<?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>201172</bug_id>
          
          <creation_ts>2019-08-26 22:11:57 -0700</creation_ts>
          <short_desc>Refactor to use VM&amp; instead of VM* at as many places as possible.</short_desc>
          <delta_ts>2019-08-28 08:37:42 -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>
          
          
          <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>ews-watchlist</cc>
    
    <cc>sabouhallawa</cc>
    
    <cc>tsavell</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1565258</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2019-08-26 22:11:57 -0700</bug_when>
    <thetext>This better documents that the VM pointer is expected to almost never be null.  There are very few places where it cane null.  Those will be left using a VM*.

Also converted some uses of ExecState* to using VM&amp; instead since those ExecState* is only there to fetch the VM pointer.  Doing this also reduces the number of times we have to compute the VM* from ExecState*.

This patch is not exhaustive in converting to use VM&amp;, but applies the change to many commonly used pieces of code for a start.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1565281</commentid>
    <comment_count>1</comment_count>
      <attachid>377324</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2019-08-27 00:53:28 -0700</bug_when>
    <thetext>Created attachment 377324
work in progress for EWS testing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1565283</commentid>
    <comment_count>2</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-08-27 00:57:28 -0700</bug_when>
    <thetext>Attachment 377324 did not pass style-queue:


ERROR: Source/JavaScriptCore/runtime/JSCast.h:36:  Please replace ASSERT_WITH_SECURITY_IMPLICATION() with RELEASE_ASSERT_WITH_SECURITY_IMPLICATION().  [security/assertion] [5]
ERROR: Source/JavaScriptCore/runtime/JSCast.h:44:  Please replace ASSERT_WITH_SECURITY_IMPLICATION() with RELEASE_ASSERT_WITH_SECURITY_IMPLICATION().  [security/assertion] [5]
ERROR: Source/JavaScriptCore/jit/JITInlineCacheGenerator.cpp:108:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/CodeBlock.h:1066:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebCore/bindings/js/SerializedScriptValue.cpp:588:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGPlan.cpp:140:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
Total errors found: 6 in 411 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>1565292</commentid>
    <comment_count>3</comment_count>
      <attachid>377328</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2019-08-27 01:33:41 -0700</bug_when>
    <thetext>Created attachment 377328
work in progress for EWS testing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1565295</commentid>
    <comment_count>4</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-08-27 01:37:01 -0700</bug_when>
    <thetext>Attachment 377328 did not pass style-queue:


ERROR: Source/JavaScriptCore/runtime/JSCast.h:36:  Please replace ASSERT_WITH_SECURITY_IMPLICATION() with RELEASE_ASSERT_WITH_SECURITY_IMPLICATION().  [security/assertion] [5]
ERROR: Source/JavaScriptCore/runtime/JSCast.h:44:  Please replace ASSERT_WITH_SECURITY_IMPLICATION() with RELEASE_ASSERT_WITH_SECURITY_IMPLICATION().  [security/assertion] [5]
ERROR: Source/JavaScriptCore/jit/JITInlineCacheGenerator.cpp:108:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/CodeBlock.h:1066:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebCore/bindings/js/SerializedScriptValue.cpp:588:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGPlan.cpp:140:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
Total errors found: 6 in 412 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>1565300</commentid>
    <comment_count>5</comment_count>
      <attachid>377330</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2019-08-27 01:51:25 -0700</bug_when>
    <thetext>Created attachment 377330
work in progress for EWS testing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1565301</commentid>
    <comment_count>6</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-08-27 01:55:40 -0700</bug_when>
    <thetext>Attachment 377330 did not pass style-queue:


ERROR: Source/JavaScriptCore/runtime/JSCast.h:36:  Please replace ASSERT_WITH_SECURITY_IMPLICATION() with RELEASE_ASSERT_WITH_SECURITY_IMPLICATION().  [security/assertion] [5]
ERROR: Source/JavaScriptCore/runtime/JSCast.h:44:  Please replace ASSERT_WITH_SECURITY_IMPLICATION() with RELEASE_ASSERT_WITH_SECURITY_IMPLICATION().  [security/assertion] [5]
ERROR: Source/JavaScriptCore/jit/JITInlineCacheGenerator.cpp:108:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/CodeBlock.h:1066:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebCore/bindings/js/SerializedScriptValue.cpp:588:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGPlan.cpp:140:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
Total errors found: 6 in 413 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>1565318</commentid>
    <comment_count>7</comment_count>
      <attachid>377330</attachid>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-08-27 04:09:19 -0700</bug_when>
    <thetext>Comment on attachment 377330
work in progress for EWS testing.

Attachment 377330 did not pass jsc-ews (mac):
Output: https://webkit-queues.webkit.org/results/12972553

New failing tests:
stress/regress-189132.js.ftl-eager
stress/regress-189132.js.ftl-no-cjit-b3o0
stress/regress-189132.js.ftl-no-cjit-small-pool
stress/regress-189132.js.ftl-no-cjit-no-inline-validate
stress/regress-189132.js.no-cjit-validate-phases
stress/regress-189132.js.mini-mode
stress/regress-189132.js.ftl-eager-no-cjit
stress/regress-189132.js.dfg-eager-no-cjit-validate
stress/regress-189132.js.no-cjit-collect-continuously
stress/regress-189132.js.bytecode-cache
stress/regress-189132.js.ftl-no-cjit-no-put-stack-validate
stress/regress-189132.js.default
stress/regress-189132.js.no-ftl
stress/regress-189132.js.eager-jettison-no-cjit
stress/regress-189132.js.ftl-no-cjit-validate-sampling-profiler
stress/regress-189132.js.no-llint
stress/regress-189132.js.dfg-eager
stress/regress-189132.js.ftl-eager-no-cjit-b3o1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1565402</commentid>
    <comment_count>8</comment_count>
      <attachid>377353</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2019-08-27 11:06:27 -0700</bug_when>
    <thetext>Created attachment 377353
proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1565542</commentid>
    <comment_count>9</comment_count>
      <attachid>377353</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2019-08-27 15:01:00 -0700</bug_when>
    <thetext>Comment on attachment 377353
proposed patch.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1565548</commentid>
    <comment_count>10</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2019-08-27 15:16:12 -0700</bug_when>
    <thetext>Thanks for the review.  Landed in r249175: &lt;http://trac.webkit.org/r249175&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1565549</commentid>
    <comment_count>11</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-08-27 15:17:21 -0700</bug_when>
    <thetext>&lt;rdar://problem/54765752&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1565650</commentid>
    <comment_count>12</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2019-08-27 23:02:37 -0700</bug_when>
    <thetext>Followup patch is r249175.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1565656</commentid>
    <comment_count>13</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2019-08-27 23:17:02 -0700</bug_when>
    <thetext>(In reply to Said Abou-Hallawa from comment #12)
&gt; Followup patch is r249175.

I think you meant build fix in http://trac.webkit.org/r249187.

Thanks for the fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1565716</commentid>
    <comment_count>14</comment_count>
    <who name="Truitt Savell">tsavell</who>
    <bug_when>2019-08-28 08:28:29 -0700</bug_when>
    <thetext>It looks like the changes in https://trac.webkit.org/changeset/249175/webkit

broke builtins-generator-tests. 

Build:
https://build.webkit.org/builders/Apple%20Mojave%20Release%20WK2%20%28Tests%29/builds/6206

I was able to reproduce this failure on 249175 but not on 249174</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1565725</commentid>
    <comment_count>15</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2019-08-28 08:37:42 -0700</bug_when>
    <thetext>(In reply to Truitt Savell from comment #14)
&gt; broke builtins-generator-tests. 
&gt; I was able to reproduce this failure on 249175 but not on 249174

Rebased test results in r249199: &lt;http://trac.webkit.org/r249199&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>377324</attachid>
            <date>2019-08-27 00:53:28 -0700</date>
            <delta_ts>2019-08-27 01:33:41 -0700</delta_ts>
            <desc>work in progress for EWS testing.</desc>
            <filename>bug-201172.patch</filename>
            <type>text/plain</type>
            <size>1516342</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjQ5MTMzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExMzgg
QEAKKzIwMTktMDgtMjcgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgorCisgICAgICAg
IFJlZmFjdG9yIHRvIHVzZSBWTSYgaW5zdGVhZCBvZiBWTSogYXQgYXMgbWFueSBwbGFjZXMgYXMg
cG9zc2libGUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMDExNzIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBVc2luZyBWTSYgZG9jdW1lbnRzIG1vcmUgY2xlYXJseSB0aGF0IHRoZSBWTSBwb2ludGVyIGlz
IGV4cGVjdGVkIHRvIG5ldmVyIGJlIG51bGwKKyAgICAgICAgaW4gbW9zdCBjYXNlcy4gIFRoZXJl
IGFyZSBhIGZldyBwbGFjZXMgd2hlcmUgaXQgY2FuIGJlIG51bGwgKGUuZyBKU0xvY2ssIGFuZAor
ICAgICAgICBERkc6OlBsYW4pLiAgVGhvc2Ugd2lsbCBiZSBsZWZ0IHVzaW5nIGEgVk0qLgorCisg
ICAgICAgIEFsc28gY29udmVydGVkIHNvbWUgdXNlcyBvZiBFeGVjU3RhdGUqIHRvIHVzaW5nIFZN
JiBpbnN0ZWFkIHNpbmNlIHRoZSBFeGVjU3RhdGUqCisgICAgICAgIGlzIG9ubHkgdGhlcmUgdG8g
ZmV0Y2ggdGhlIFZNIHBvaW50ZXIuICBEb2luZyB0aGlzIGFsc28gcmVkdWNlcyB0aGUgbnVtYmVy
IG9mCisgICAgICAgIHRpbWVzIHdlIGhhdmUgdG8gY29tcHV0ZSBWTSogZnJvbSBFeGVjU3RhdGUq
LgorCisgICAgICAgIFRoaXMgcGF0Y2ggaXMgbm90IGV4aGF1c3RpdmUgaW4gY29udmVydGluZyB0
byB1c2UgVk0mLCBidXQgYXBwbGllcyB0aGUgY2hhbmdlIHRvCisgICAgICAgIG1hbnkgY29tbW9u
bHkgdXNlZCBwaWVjZXMgb2YgY29kZSBmb3IgYSBzdGFydC4KKworICAgICAgICBUaGlzIHBhdGNo
IGFsc28gcmVtb3ZlcyB0aGUgSWRlbnRpZmllciBjb25zdHJ1Y3RvciBhbmQgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZygpCisgICAgICAgIG1ldGhvZHMgdGhhdCBhY3Qgb24gQXRvbVN0cmluZyBhbmQg
QXRvbVN0cmluZ0ltcGwuCisKKyAgICAgICAgQXRvbVN0cmluZyBoYXMgYSBjYXN0IG9wZXJhdG9y
IHRoYXQgY2FuIGltcGxpY2l0bHkgY29udmVydCBpdCB0byBhIFN0cmluZy4KKyAgICAgICAgQXRv
bVN0cmluZ0ltcGwgaXMgYSBzdWJjbGFzcyBvZiBTdHJpbmdJbXBsLiAgQXMgYSByZXN1bHQsIGhh
dmluZworICAgICAgICBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCkgdmFyaWFudHMgZm9yIHRoZXNl
IHR5cGVzIG9ubHkgcmVzdWx0IGluIGFtYmlndWl0eSB3aGVuCisgICAgICAgIGFuIEF0b21TdHJp
bmcgaXMgZW5jb3VudGVyZWQuCisKKyAgICAgICAgVGhlIFN0cmluZyBhbmQgU3RyaW5nSW1wbCB2
YXJpYW50cyBvZiBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCkgd2lsbCBjYWxsIGlubGluZQorICAg
ICAgICBtZXRob2QgSWRlbnRpZmllcjo6YWRkKCkgd2hpY2gsIGluIHR1cm4sIGNhbGxzIGlubGlu
ZSBtZXRob2QKKyAgICAgICAgQXRvbVN0cmluZ0ltcGw6OmFkZFdpdGhTdHJpbmdUYWJsZVByb3Zp
ZGVyKCksIHdoaWNoIGRvZXMgYSBudWxsIGNoZWNrLCBhbmQgdGhlbgorICAgICAgICBjYWxscyB0
aGUgaW5saW5lIG1ldGhvZCBBdG9tU3RyaW5nSW1wbDo6YWRkKCksIC4uLiB3aGljaCBmaW5hbGx5
IGRvZXMgYQorICAgICAgICBzdHJpbmcuaXNBdG9tKCkgY2hlY2suICBUaGUgY2hlY2sgYmFzaWNh
bGx5IHRlc3RzIGEgYml0IG9uIHRoZSBTdHJpbmdJbXBsJ3MgZmxhZ3MuCisKKyAgICAgICAgTGV0
J3MgdGVzdCBpZiB0aGVyZSdzIGFueSBwZXJmb3JtYW5jZSBkaWZmZXJlbmNlIGJldHdlZW4gdXNp
bmcgdGhlIFN0cmluZ0ltcGwgYW5kCisgICAgICAgIHRoZSBBdG9tU3RyaW5nSW1wbCB2YXJpYW50
cy4KKworICAgICAgICAqIEFQSS9BUElDYXN0Lmg6CisgICAgICAgICh0b0pTKToKKyAgICAgICAg
KiBBUEkvSlNBUElHbG9iYWxPYmplY3QubW06CisgICAgICAgIChKU0M6OkpTQVBJR2xvYmFsT2Jq
ZWN0Ojptb2R1bGVMb2FkZXJSZXNvbHZlKToKKyAgICAgICAgKEpTQzo6SlNBUElHbG9iYWxPYmpl
Y3Q6Om1vZHVsZUxvYWRlckltcG9ydE1vZHVsZSk6CisgICAgICAgIChKU0M6OkpTQVBJR2xvYmFs
T2JqZWN0Ojptb2R1bGVMb2FkZXJGZXRjaCk6CisgICAgICAgIChKU0M6OkpTQVBJR2xvYmFsT2Jq
ZWN0Ojptb2R1bGVMb2FkZXJDcmVhdGVJbXBvcnRNZXRhUHJvcGVydGllcyk6CisgICAgICAgIChK
U0M6OkpTQVBJR2xvYmFsT2JqZWN0Ojpsb2FkQW5kRXZhbHVhdGVKU1NjcmlwdE1vZHVsZSk6Cisg
ICAgICAgICogQVBJL0pTQ2FsbGJhY2tDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OkpT
Q2FsbGJhY2tDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAqIEFQSS9KU0Nh
bGxiYWNrT2JqZWN0RnVuY3Rpb25zLmg6CisgICAgICAgIChKU0M6OkpTQ2FsbGJhY2tPYmplY3Q8
UGFyZW50Pjo6YXNDYWxsYmFja09iamVjdCk6CisgICAgICAgIChKU0M6OkpTQ2FsbGJhY2tPYmpl
Y3Q8UGFyZW50Pjo6fkpTQ2FsbGJhY2tPYmplY3QpOgorICAgICAgICAoSlNDOjpKU0NhbGxiYWNr
T2JqZWN0PFBhcmVudD46OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgpOgorICAgICAgICAoSlND
OjpKU0NhbGxiYWNrT2JqZWN0PFBhcmVudD46OnB1dEJ5SW5kZXgpOgorICAgICAgICAoSlNDOjpK
U0NhbGxiYWNrT2JqZWN0PFBhcmVudD46OmRlbGV0ZVByb3BlcnR5QnlJbmRleCk6CisgICAgICAg
IChKU0M6OkpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5h
bWVzKToKKyAgICAgICAgKiBBUEkvSlNDb250ZXh0Lm1tOgorICAgICAgICAoLVtKU0NvbnRleHQg
ZGVwZW5kZW5jeUlkZW50aWZpZXJzRm9yTW9kdWxlSlNTY3JpcHQ6XSk6CisgICAgICAgICogQVBJ
L0pTT2JqZWN0UmVmLmNwcDoKKyAgICAgICAgKEpTT2JqZWN0TWFrZUZ1bmN0aW9uKToKKyAgICAg
ICAgKGNsYXNzSW5mb1ByaXZhdGUpOgorICAgICAgICAoSlNPYmplY3RHZXRQcml2YXRlKToKKyAg
ICAgICAgKEpTT2JqZWN0U2V0UHJpdmF0ZSk6CisgICAgICAgIChKU09iamVjdENvcHlQcm9wZXJ0
eU5hbWVzKToKKyAgICAgICAgKEpTUHJvcGVydHlOYW1lQWNjdW11bGF0b3JBZGROYW1lKToKKyAg
ICAgICAgKEpTT2JqZWN0R2V0UHJveHlUYXJnZXQpOgorICAgICAgICAqIEFQSS9KU1NjcmlwdFJl
Zi5jcHA6CisgICAgICAgIChwYXJzZVNjcmlwdCk6CisgICAgICAgICogQVBJL0pTVmFsdWVSZWYu
Y3BwOgorICAgICAgICAoSlNWYWx1ZU1ha2VTdHJpbmcpOgorICAgICAgICAqIEFQSS9PcGFxdWVK
U1N0cmluZy5jcHA6CisgICAgICAgIChPcGFxdWVKU1N0cmluZzo6aWRlbnRpZmllciBjb25zdCk6
CisgICAgICAgICogS2V5d29yZExvb2t1cEdlbmVyYXRvci5weToKKyAgICAgICAgKFRyaWUucHJp
bnRTdWJUcmVlQXNDKToKKyAgICAgICAgKiBTY3JpcHRzL3drYnVpbHRpbnMvYnVpbHRpbnNfZ2Vu
ZXJhdGVfd3JhcHBlcl9oZWFkZXIucHk6CisgICAgICAgIChCdWlsdGluc1dyYXBwZXJIZWFkZXJH
ZW5lcmF0b3IuZ2VuZXJhdGVfY29uc3RydWN0b3IpOgorICAgICAgICAqIFNjcmlwdHMvd2tidWls
dGlucy9idWlsdGluc190ZW1wbGF0ZXMucHk6CisgICAgICAgICogYmluZGluZ3MvU2NyaXB0RnVu
Y3Rpb25DYWxsLmNwcDoKKyAgICAgICAgKERlcHJlY2F0ZWQ6OlNjcmlwdENhbGxBcmd1bWVudEhh
bmRsZXI6OmFwcGVuZEFyZ3VtZW50KToKKyAgICAgICAgKERlcHJlY2F0ZWQ6OlNjcmlwdEZ1bmN0
aW9uQ2FsbDo6Y2FsbCk6CisgICAgICAgICogYmluZGluZ3MvU2NyaXB0VmFsdWUuY3BwOgorICAg
ICAgICAoSW5zcGVjdG9yOjpqc1RvSW5zcGVjdG9yVmFsdWUpOgorICAgICAgICAqIGJ1aWx0aW5z
L0J1aWx0aW5FeGVjdXRhYmxlcy5jcHA6CisgICAgICAgIChKU0M6OkJ1aWx0aW5FeGVjdXRhYmxl
czo6Y3JlYXRlRXhlY3V0YWJsZSk6CisgICAgICAgICogYnVpbHRpbnMvQnVpbHRpbk5hbWVzLmNw
cDoKKyAgICAgICAgKEpTQzo6QnVpbHRpbk5hbWVzOjpCdWlsdGluTmFtZXMpOgorICAgICAgICAq
IGJ1aWx0aW5zL0J1aWx0aW5OYW1lcy5oOgorICAgICAgICAoSlNDOjpCdWlsdGluTmFtZXM6Omdl
dFB1YmxpY05hbWUgY29uc3QpOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmNw
cDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVEdW1wZXI8QmxvY2s+Ojp2bSBjb25zdCk6CisgICAg
ICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaDoKKyAgICAgICAgKiBieXRlY29kZS9CeXRl
Y29kZUdlbmVyYXRvcmlmaWNhdGlvbi5jcHA6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJh
dG9yaWZpY2F0aW9uOjpCeXRlY29kZUdlbmVyYXRvcmlmaWNhdGlvbik6CisgICAgICAgIChKU0M6
OkJ5dGVjb2RlR2VuZXJhdG9yaWZpY2F0aW9uOjpzdG9yYWdlRm9yR2VuZXJhdG9yTG9jYWwpOgor
ICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcmlmaWNhdGlvbjo6cnVuKToKKyAgICAgICAg
KiBieXRlY29kZS9CeXRlY29kZUludHJpbnNpY1JlZ2lzdHJ5LmNwcDoKKyAgICAgICAgKEpTQzo6
Qnl0ZWNvZGVJbnRyaW5zaWNSZWdpc3RyeTo6c2VudGluZWxNYXBCdWNrZXRWYWx1ZSk6CisgICAg
ICAgIChKU0M6OkJ5dGVjb2RlSW50cmluc2ljUmVnaXN0cnk6OnNlbnRpbmVsU2V0QnVja2V0VmFs
dWUpOgorICAgICAgICAqIGJ5dGVjb2RlL0NhbGxWYXJpYW50Lmg6CisgICAgICAgIChKU0M6OkNh
bGxWYXJpYW50OjppbnRlcm5hbEZ1bmN0aW9uIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FsbFZh
cmlhbnQ6OmZ1bmN0aW9uIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FsbFZhcmlhbnQ6OmlzQ2xv
c3VyZUNhbGwgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWxsVmFyaWFudDo6ZXhlY3V0YWJsZSBj
b25zdCk6CisgICAgICAgIChKU0M6OkNhbGxWYXJpYW50OjpmdW5jdGlvbkV4ZWN1dGFibGUgY29u
c3QpOgorICAgICAgICAoSlNDOjpDYWxsVmFyaWFudDo6bmF0aXZlRXhlY3V0YWJsZSBjb25zdCk6
CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJs
b2NrOjpkdW1wU291cmNlKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpDb2RlQmxvY2spOgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNldENvbnN0YW50SWRlbnRpZmllclNldFJlZ2lzdGVy
cyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6c2V0TnVtUGFyYW1ldGVycyk6CisgICAgICAg
IChKU0M6OkNvZGVCbG9jazo6ZmluYWxpemVCYXNlbGluZUpJVElubGluZUNhY2hlcyk6CisgICAg
ICAgIChKU0M6OkNvZGVCbG9jazo6dW5saW5rSW5jb21pbmdDYWxscyk6CisgICAgICAgIChKU0M6
OkNvZGVCbG9jazo6cmVwbGFjZW1lbnQpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmNvbXB1
dGVDYXBhYmlsaXR5TGV2ZWwpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om5vdGljZUluY29t
aW5nQ2FsbCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6bmFtZUZvclJlZ2lzdGVyKToKKyAg
ICAgICAgKEpTQzo6Q29kZUJsb2NrOjppbnNlcnRCYXNpY0Jsb2NrQm91bmRhcmllc0ZvckNvbnRy
b2xGbG93UHJvZmlsZXIpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAgICAg
ICAoSlNDOjpDb2RlQmxvY2s6OnZtIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpu
dW1iZXJPZkFyZ3VtZW50VmFsdWVQcm9maWxlcyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6
dmFsdWVQcm9maWxlRm9yQXJndW1lbnQpOgorICAgICAgICAqIGJ5dGVjb2RlL0RlZmVycmVkU291
cmNlRHVtcC5jcHA6CisgICAgICAgIChKU0M6OkRlZmVycmVkU291cmNlRHVtcDo6RGVmZXJyZWRT
b3VyY2VEdW1wKToKKyAgICAgICAgKiBieXRlY29kZS9FdmFsQ29kZUJsb2NrLmg6CisgICAgICAg
ICogYnl0ZWNvZGUvRnVuY3Rpb25Db2RlQmxvY2suaDoKKyAgICAgICAgKiBieXRlY29kZS9HZXRC
eUlkU3RhdHVzLmNwcDoKKyAgICAgICAgKEpTQzo6R2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZyb21M
TEludCk6CisgICAgICAgICogYnl0ZWNvZGUvR2xvYmFsQ29kZUJsb2NrLmg6CisgICAgICAgIChK
U0M6Okdsb2JhbENvZGVCbG9jazo6R2xvYmFsQ29kZUJsb2NrKToKKyAgICAgICAgKiBieXRlY29k
ZS9Nb2R1bGVQcm9ncmFtQ29kZUJsb2NrLmg6CisgICAgICAgICogYnl0ZWNvZGUvT2JqZWN0QWxs
b2NhdGlvblByb2ZpbGVJbmxpbmVzLmg6CisgICAgICAgIChKU0M6Ok9iamVjdEFsbG9jYXRpb25Q
cm9maWxlQmFzZTxEZXJpdmVkPjo6cG9zc2libGVEZWZhdWx0UHJvcGVydHlDb3VudCk6CisgICAg
ICAgICogYnl0ZWNvZGUvUG9seVByb3RvQWNjZXNzQ2hhaW4uY3BwOgorICAgICAgICAoSlNDOjpQ
b2x5UHJvdG9BY2Nlc3NDaGFpbjo6Y3JlYXRlKToKKyAgICAgICAgKiBieXRlY29kZS9Qcm9ncmFt
Q29kZUJsb2NrLmg6CisgICAgICAgICogYnl0ZWNvZGUvUHJvcGVydHlDb25kaXRpb24uY3BwOgor
ICAgICAgICAoSlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6aXNXYXRjaGFibGVXaGVuVmFsaWQgY29u
c3QpOgorICAgICAgICAqIGJ5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwOgorICAgICAgICAoSlND
OjpQdXRCeUlkU3RhdHVzOjpjb21wdXRlRnJvbUxMSW50KToKKyAgICAgICAgKiBieXRlY29kZS9T
dHJ1Y3R1cmVTdHViSW5mby5jcHA6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjpp
bml0R2V0QnlJZFNlbGYpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6aW5pdFB1
dEJ5SWRSZXBsYWNlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86OmluaXRJbkJ5
SWRTZWxmKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86OmFkZEFjY2Vzc0Nhc2Up
OgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6dmlzaXRXZWFrUmVmZXJlbmNlcyk6
CisgICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwOgorICAgICAgICAoSlND
OjpVbmxpbmtlZENvZGVCbG9jazo6VW5saW5rZWRDb2RlQmxvY2spOgorICAgICAgICAqIGJ5dGVj
b2RlL1VubGlua2VkQ29kZUJsb2NrLmg6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2Nr
OjphZGRTZXRDb25zdGFudCk6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjphZGRD
b25zdGFudCk6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjphZGRGdW5jdGlvbkRl
Y2wpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6YWRkRnVuY3Rpb25FeHByKToK
KyAgICAgICAgKiBieXRlY29kZS9VbmxpbmtlZEV2YWxDb2RlQmxvY2suaDoKKyAgICAgICAgKiBi
eXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrLmg6CisgICAgICAgICogYnl0ZWNvZGUv
VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuY3BwOgorICAgICAgICAoSlNDOjpnZW5lcmF0ZVVu
bGlua2VkRnVuY3Rpb25Db2RlQmxvY2spOgorICAgICAgICAoSlNDOjpVbmxpbmtlZEZ1bmN0aW9u
RXhlY3V0YWJsZTo6VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUpOgorICAgICAgICAqIGJ5dGVj
b2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmg6CisgICAgICAgICogYnl0ZWNvZGUvVW5s
aW5rZWRHbG9iYWxDb2RlQmxvY2suaDoKKyAgICAgICAgKEpTQzo6VW5saW5rZWRHbG9iYWxDb2Rl
QmxvY2s6OlVubGlua2VkR2xvYmFsQ29kZUJsb2NrKToKKyAgICAgICAgKiBieXRlY29kZS9Vbmxp
bmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2suaDoKKyAgICAgICAgKiBieXRlY29kZS9Vbmxpbmtl
ZFByb2dyYW1Db2RlQmxvY2suaDoKKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5l
cmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5l
cmF0b3IpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cHVzaExleGljYWxTY29w
ZUludGVybmFsKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXREaXJlY3RQ
dXRCeUlkKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmdldFZhcmlhYmxlc1Vu
ZGVyVERaKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmFkZEJpZ0ludENvbnN0
YW50KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmFkZFRlbXBsYXRlT2JqZWN0
Q29uc3RhbnQpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdE5ld0RlZmF1
bHRDb25zdHJ1Y3Rvcik6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0U2V0
RnVuY3Rpb25OYW1lSWZOZWVkZWQpOgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdl
bmVyYXRvci5oOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6dm0gY29uc3QpOgor
ICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cHJvcGVydHlOYW1lcyBjb25zdCk6Cisg
ICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0Tm9kZUluVGFpbFBvc2l0aW9uKToK
KyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXREZWZpbmVDbGFzc0VsZW1lbnRz
KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXROb2RlSW5Db25kaXRpb25D
b250ZXh0KToKKyAgICAgICAgKiBieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcDoKKyAgICAg
ICAgKEpTQzo6UmVnRXhwTm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6QXJyYXlO
b2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkNhbGxSZXNvbHZlTm9k
ZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVJbnRyaW5zaWNOb2RlOjpl
bWl0X2ludHJpbnNpY19nZXRCeUlkRGlyZWN0UHJpdmF0ZSk6CisgICAgICAgIChKU0M6OkJ5dGVj
b2RlSW50cmluc2ljTm9kZTo6ZW1pdF9pbnRyaW5zaWNfcHV0QnlJZERpcmVjdFByaXZhdGUpOgor
ICAgICAgICAoSlNDOjpCeXRlY29kZUludHJpbnNpY05vZGU6OmVtaXRfaW50cmluc2ljX3RvT2Jq
ZWN0KToKKyAgICAgICAgKEpTQzo6SW5zdGFuY2VPZk5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAg
ICAgICogZGVidWdnZXIvRGVidWdnZXIuY3BwOgorICAgICAgICAqIGRlYnVnZ2VyL0RlYnVnZ2Vy
UGFyc2VEYXRhLmNwcDoKKyAgICAgICAgKEpTQzo6Z2F0aGVyRGVidWdnZXJQYXJzZURhdGEpOgor
ICAgICAgICAqIGRlYnVnZ2VyL0RlYnVnZ2VyU2NvcGUuY3BwOgorICAgICAgICAoSlNDOjpEZWJ1
Z2dlclNjb3BlOjpuZXh0KToKKyAgICAgICAgKEpTQzo6RGVidWdnZXJTY29wZTo6bmFtZSBjb25z
dCk6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyU2NvcGU6OmxvY2F0aW9uIGNvbnN0KToKKyAgICAg
ICAgKiBkZmcvREZHRGVzaXJlZElkZW50aWZpZXJzLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpE
ZXNpcmVkSWRlbnRpZmllcnM6OnJlYWxseUFkZCk6CisgICAgICAgICogZGZnL0RGR0Rlc2lyZWRX
YXRjaHBvaW50cy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QXJyYXlCdWZmZXJWaWV3V2F0Y2hw
b2ludEFkYXB0b3I6OmFkZCk6CisgICAgICAgIChKU0M6OkRGRzo6QWRhcHRpdmVTdHJ1Y3R1cmVX
YXRjaHBvaW50QWRhcHRvcjo6YWRkKToKKyAgICAgICAgKiBkZmcvREZHRnJvemVuVmFsdWUuaDoK
KyAgICAgICAgKEpTQzo6REZHOjpGcm96ZW5WYWx1ZTo6RnJvemVuVmFsdWUpOgorICAgICAgICAq
IGRmZy9ERkdHcmFwaC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmNhbk9wdGltaXpl
U3RyaW5nT2JqZWN0QWNjZXNzKToKKyAgICAgICAgKiBkZmcvREZHSklUQ29tcGlsZXIuY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpsaW5rT1NSRXhpdHMpOgorICAgICAgICAo
SlNDOjpERkc6OkpJVENvbXBpbGVyOjpjb21waWxlRXhjZXB0aW9uSGFuZGxlcnMpOgorICAgICAg
ICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpsaW5rKToKKyAgICAgICAgKEpTQzo6REZHOjplbWl0
U3RhY2tPdmVyZmxvd0NoZWNrKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6Y29t
cGlsZUZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6ZXhjZXB0aW9u
Q2hlY2spOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjptYWtlQ2F0Y2hPU1JFbnRy
eUJ1ZmZlcik6CisgICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVyLmg6CisgICAgICAgIChKU0M6
OkRGRzo6SklUQ29tcGlsZXI6OmV4Y2VwdGlvbkNoZWNrV2l0aENhbGxGcmFtZVJvbGxiYWNrKToK
KyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6ZmFzdEV4Y2VwdGlvbkNoZWNrKToKKyAg
ICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6dm0pOgorICAgICAgICAqIGRmZy9ERkdMYXp5
SlNWYWx1ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6TGF6eUpTVmFsdWU6OmdldFZhbHVlIGNv
bnN0KToKKyAgICAgICAgKEpTQzo6REZHOjpMYXp5SlNWYWx1ZTo6ZW1pdCBjb25zdCk6CisgICAg
ICAgICogZGZnL0RGR09TUkVudHJ5LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpwcmVwYXJlT1NS
RW50cnkpOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0LmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpPU1JFeGl0Ojpjb21waWxlT1NSRXhpdCk6CisgICAgICAgIChKU0M6OkRGRzo6T1NSRXhpdDo6
ZGVidWdPcGVyYXRpb25QcmludFNwZWN1bGF0aW9uRmFpbHVyZSk6CisgICAgICAgICogZGZnL0RG
R09TUkV4aXRDb21waWxlckNvbW1vbi5oOgorICAgICAgICAoSlNDOjpERkc6OmFkanVzdEZyYW1l
QW5kU3RhY2tJbk9TUkV4aXRDb21waWxlclRodW5rKToKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0
aW9ucy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6bmV3VHlwZWRBcnJheVdpdGhTaXplKToKKyAg
ICAgICAgKEpTQzo6REZHOjpiaW5hcnlPcCk6CisgICAgICAgIChKU0M6OkRGRzo6Yml0d2lzZUJp
bmFyeU9wKToKKyAgICAgICAgKiBkZmcvREZHUGxhbi5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
UGxhbjo6UGxhbik6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdEFsbG9jYXRlUmF3T2JqZWN0KToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVN0cmluZ1NsaWNlKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUN1cnJlbnRCbG9jayk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDaGVja1RyYXBzKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25TdHJpbmcp
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlRnJvbUNoYXJDb2Rl
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVN0cmluZ1plcm9M
ZW5ndGgpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlTG9naWNh
bE5vdFN0cmluZ09yT3RoZXIpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpl
bWl0U3RyaW5nQnJhbmNoKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1p
dFN0cmluZ09yT3RoZXJCcmFuY2gpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
OjpjYWdlVHlwZWRBcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZl
SklUOjpjb21waWxlR2V0R2xvYmFsT2JqZWN0KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZU5ld0Z1bmN0aW9uQ29tbW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNyZWF0ZUFjdGl2YXRpb24pOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlQ3JlYXRlRGlyZWN0QXJndW1lbnRzKToKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVNwcmVhZCk6CisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVOZXdBcnJheSk6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVOZXdBcnJheVdpdGhTcHJlYWQpOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJyYXlTbGljZSk6CisgICAgICAg
IChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcnJheVB1c2gpOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlVHlwZU9mKToKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVJlYWxsb2NhdGVQcm9wZXJ0
eVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlTnVr
ZVN0cnVjdHVyZUFuZFNldEJ1dHRlcmZseSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVDYWxsRE9NR2V0dGVyKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUNoZWNrU3ViQ2xhc3MpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpjb21waWxlTmV3U3RyaW5nT2JqZWN0KToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5ld1R5cGVkQXJyYXlXaXRoU2l6ZSk6CisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVOZXdSZWdleHApOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlU3RvcmVCYXJyaWVyKToKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVN0cmluZ1JlcGxhY2UpOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlTWF0ZXJpYWxpemVOZXdPYmplY3QpOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0QWxsb2NhdGVCdXR0ZXJmbHkp
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0TWFwQnVja2V0
TmV4dCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RL
ZXlzKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNyZWF0ZVRo
aXMpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlTmV3T2JqZWN0
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUxvZ1NoYWRvd0No
aWNrZW5Qcm9sb2d1ZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVMb2dTaGFkb3dDaGlja2VuVGFpbCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVHZXRQcm90b3R5cGVPZik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVBbGxvY2F0ZU5ld0FycmF5V2l0aFNpemUpOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlUHJvZmlsZVR5cGUpOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlTWFrZVJvcGUpOgorICAgICAgICAqIGRmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5oOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjp2bSk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnByZXBhcmVGb3JFeHRlcm5hbENh
bGwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0QWxsb2NhdGVKU09i
amVjdFdpdGhLbm93blNpemUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpl
bWl0QWxsb2NhdGVKU09iamVjdCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmVtaXRBbGxvY2F0ZVZhcmlhYmxlU2l6ZWRKU09iamVjdCk6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmVtaXRBbGxvY2F0ZURlc3RydWN0aWJsZU9iamVjdCk6CisgICAgICAg
ICogZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjplbWl0Q2FsbCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVMb2dpY2FsTm90KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6ZW1pdEJyYW5jaCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVOb25QZWVwaG9sZUNvbXBhcmVO
dWxsT3JVbmRlZmluZWQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpub25T
cGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNoTnVsbE9yVW5kZWZpbmVkKToKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpjb21waWxlT2JqZWN0T3JPdGhlckxvZ2ljYWxOb3QpOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlTG9naWNhbE5vdCk6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVtaXRPYmplY3RPck90aGVyQnJhbmNoKToKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdEJyYW5jaCk6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdUaHVua3MuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6Om9zckV4aXRUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChK
U0M6OkRGRzo6b3NyRXhpdEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6
OkRGRzo6b3NyRW50cnlUaHVua0dlbmVyYXRvcik6CisgICAgICAgICogZGZnL0RGR1RodW5rcy5o
OgorICAgICAgICAqIGRmZy9ERkdUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNh
bGxiYWNrLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRD
b21waWxhdGlvbkNhbGxiYWNrOjpjb21waWxhdGlvbkRpZENvbXBsZXRlKToKKyAgICAgICAgKiBk
ZmcvREZHV29ya2xpc3QuY3BwOgorICAgICAgICAoSlNDOjpERkc6OldvcmtsaXN0Ojp2aXNpdFdl
YWtSZWZlcmVuY2VzKToKKyAgICAgICAgKiBkeW5iZW5jaC5jcHA6CisgICAgICAgIChtYWluKToK
KyAgICAgICAgKiBmdGwvRlRMTG93ZXJERkdUb0IzLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpE
Rkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZU1ha2VSb3BlKToKKyAgICAgICAgKEpTQzo6RlRMOjpE
Rkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZVN0cmluZ1NsaWNlKToKKyAgICAgICAgKEpTQzo6RlRM
OjpERkc6Okxvd2VyREZHVG9CMzo6Ym9vbGlmeSk6CisgICAgICAgICogZnRsL0ZUTFRodW5rcy5j
cHA6CisgICAgICAgIChKU0M6OkZUTDo6Z2VuZXJpY0dlbmVyYXRpb25UaHVua0dlbmVyYXRvcik6
CisgICAgICAgIChKU0M6OkZUTDo6b3NyRXhpdEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcik6Cisg
ICAgICAgIChKU0M6OkZUTDo6bGF6eVNsb3dQYXRoR2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKToK
KyAgICAgICAgKiBmdGwvRlRMVGh1bmtzLmg6CisgICAgICAgICogaGVhcC9DZWxsQ29udGFpbmVy
Lmg6CisgICAgICAgICogaGVhcC9DZWxsQ29udGFpbmVySW5saW5lcy5oOgorICAgICAgICAoSlND
OjpDZWxsQ29udGFpbmVyOjp2bSBjb25zdCk6CisgICAgICAgIChKU0M6OkNlbGxDb250YWluZXI6
OmhlYXAgY29uc3QpOgorICAgICAgICAqIGhlYXAvQ29tcGxldGVTdWJzcGFjZS5jcHA6CisgICAg
ICAgIChKU0M6OkNvbXBsZXRlU3Vic3BhY2U6OnRyeUFsbG9jYXRlU2xvdyk6CisgICAgICAgIChK
U0M6OkNvbXBsZXRlU3Vic3BhY2U6OnJlYWxsb2NhdGVMYXJnZUFsbG9jYXRpb25Ob25WaXJ0dWFs
KToKKyAgICAgICAgKiBoZWFwL0dDQWN0aXZpdHlDYWxsYmFjay5oOgorICAgICAgICAqIGhlYXAv
R0NBc3NlcnRpb25zLmg6CisgICAgICAgICogaGVhcC9IYW5kbGVTZXQuY3BwOgorICAgICAgICAo
SlNDOjpIYW5kbGVTZXQ6OkhhbmRsZVNldCk6CisgICAgICAgICogaGVhcC9IYW5kbGVTZXQuaDoK
KyAgICAgICAgKEpTQzo6SGFuZGxlU2V0Ojp2bSk6CisgICAgICAgICogaGVhcC9IZWFwLmNwcDoK
KyAgICAgICAgKEpTQzo6SGVhcDo6SGVhcCk6CisgICAgICAgIChKU0M6OkhlYXA6Omxhc3RDaGFu
Y2VUb0ZpbmFsaXplKToKKyAgICAgICAgKEpTQzo6SGVhcDo6cmVsZWFzZURlbGF5ZWRSZWxlYXNl
ZE9iamVjdHMpOgorICAgICAgICAoSlNDOjpIZWFwOjpwcm90ZWN0KToKKyAgICAgICAgKEpTQzo6
SGVhcDo6dW5wcm90ZWN0KToKKyAgICAgICAgKEpTQzo6SGVhcDo6ZmluYWxpemVNYXJrZWRVbmNv
bmRpdGlvbmFsRmluYWxpemVycyk6CisgICAgICAgIChKU0M6OkhlYXA6OmZpbmFsaXplVW5jb25k
aXRpb25hbEZpbmFsaXplcnMpOgorICAgICAgICAoSlNDOjpIZWFwOjpjb21wbGV0ZUFsbEpJVFBs
YW5zKToKKyAgICAgICAgKEpTQzo6SGVhcDo6aXRlcmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0Nv
ZGVCbG9ja3MpOgorICAgICAgICAoSlNDOjpIZWFwOjpnYXRoZXJKU1N0YWNrUm9vdHMpOgorICAg
ICAgICAoSlNDOjpIZWFwOjpnYXRoZXJTY3JhdGNoQnVmZmVyUm9vdHMpOgorICAgICAgICAoSlND
OjpIZWFwOjpyZW1vdmVEZWFkQ29tcGlsZXJXb3JrbGlzdEVudHJpZXMpOgorICAgICAgICAoSlND
OjpIZWFwOjppc0FuYWx5emluZ0hlYXAgY29uc3QpOgorICAgICAgICAoSlNDOjpIZWFwOjpnYXRo
ZXJFeHRyYUhlYXBEYXRhKToKKyAgICAgICAgKEpTQzo6SGVhcDo6cHJvdGVjdGVkT2JqZWN0VHlw
ZUNvdW50cyk6CisgICAgICAgIChKU0M6OkhlYXA6Om9iamVjdFR5cGVDb3VudHMpOgorICAgICAg
ICAoSlNDOjpIZWFwOjpkZWxldGVBbGxDb2RlQmxvY2tzKToKKyAgICAgICAgKEpTQzo6SGVhcDo6
ZGVsZXRlQWxsVW5saW5rZWRDb2RlQmxvY2tzKToKKyAgICAgICAgKEpTQzo6SGVhcDo6ZGVsZXRl
VW5tYXJrZWRDb21waWxlZENvZGUpOgorICAgICAgICAoSlNDOjpIZWFwOjpjaGVja0Nvbm4pOgor
ICAgICAgICAoSlNDOjpIZWFwOjpydW5FbmRQaGFzZSk6CisgICAgICAgIChKU0M6OkhlYXA6OnN0
b3BUaGVQZXJpcGhlcnkpOgorICAgICAgICAoSlNDOjpIZWFwOjpmaW5hbGl6ZSk6CisgICAgICAg
IChKU0M6OkhlYXA6OnJlcXVlc3RDb2xsZWN0aW9uKToKKyAgICAgICAgKEpTQzo6SGVhcDo6c3dl
ZXBJbkZpbmFsaXplKToKKyAgICAgICAgKEpTQzo6SGVhcDo6c3dlZXBBcnJheUJ1ZmZlcnMpOgor
ICAgICAgICAoSlNDOjpIZWFwOjpkZWxldGVTb3VyY2VQcm92aWRlckNhY2hlcyk6CisgICAgICAg
IChKU0M6OkhlYXA6OmRpZEZpbmlzaENvbGxlY3Rpb24pOgorICAgICAgICAoSlNDOjpIZWFwOjph
ZGRDb3JlQ29uc3RyYWludHMpOgorICAgICAgICAqIGhlYXAvSGVhcC5oOgorICAgICAgICAqIGhl
YXAvSGVhcENlbGwuaDoKKyAgICAgICAgKiBoZWFwL0hlYXBDZWxsSW5saW5lcy5oOgorICAgICAg
ICAoSlNDOjpIZWFwQ2VsbDo6aGVhcCBjb25zdCk6CisgICAgICAgIChKU0M6OkhlYXBDZWxsOjp2
bSBjb25zdCk6CisgICAgICAgICogaGVhcC9IZWFwSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpI
ZWFwOjp2bSBjb25zdCk6CisgICAgICAgICogaGVhcC9Jc29TdWJzcGFjZVBlclZNLmNwcDoKKyAg
ICAgICAgKEpTQzo6SXNvU3Vic3BhY2VQZXJWTTo6QXV0b3JlbW92aW5nSXNvU3Vic3BhY2U6On5B
dXRvcmVtb3ZpbmdJc29TdWJzcGFjZSk6CisgICAgICAgICogaGVhcC9MYXJnZUFsbG9jYXRpb24u
Y3BwOgorICAgICAgICAoSlNDOjpMYXJnZUFsbG9jYXRpb246OnN3ZWVwKToKKyAgICAgICAgKEpT
Qzo6TGFyZ2VBbGxvY2F0aW9uOjphc3NlcnRWYWxpZENlbGwgY29uc3QpOgorICAgICAgICAqIGhl
YXAvTGFyZ2VBbGxvY2F0aW9uLmg6CisgICAgICAgIChKU0M6OkxhcmdlQWxsb2NhdGlvbjo6dm0g
Y29uc3QpOgorICAgICAgICAqIGhlYXAvTG9jYWxBbGxvY2F0b3IuY3BwOgorICAgICAgICAoSlND
OjpMb2NhbEFsbG9jYXRvcjo6YWxsb2NhdGVTbG93Q2FzZSk6CisgICAgICAgICogaGVhcC9NYXJr
ZWRCbG9jay5jcHA6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpIYW5kbGU6OkhhbmRsZSk6
CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjphYm91dFRvTWFya1Nsb3cpOgorICAgICAgICAo
SlNDOjpNYXJrZWRCbG9jazo6YXNzZXJ0TWFya3NOb3RTdGFsZSk6CisgICAgICAgIChKU0M6Ok1h
cmtlZEJsb2NrOjphcmVNYXJrc1N0YWxlKToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6Omlz
TWFya2VkKToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OmFzc2VydFZhbGlkQ2VsbCBjb25z
dCk6CisgICAgICAgICogaGVhcC9NYXJrZWRCbG9jay5oOgorICAgICAgICAoSlNDOjpNYXJrZWRC
bG9jazo6SGFuZGxlOjp2bSBjb25zdCk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjp2bSBj
b25zdCk6CisgICAgICAgICogaGVhcC9NYXJrZWRCbG9ja0lubGluZXMuaDoKKyAgICAgICAgKEpT
Qzo6TWFya2VkQmxvY2s6OmhlYXAgY29uc3QpOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6
SGFuZGxlOjpzcGVjaWFsaXplZFN3ZWVwKToKKyAgICAgICAgKiBoZWFwL1Nsb3RWaXNpdG9yLmNw
cDoKKyAgICAgICAgKEpTQzo6dmFsaWRhdGUpOgorICAgICAgICAqIGhlYXAvU2xvdFZpc2l0b3JJ
bmxpbmVzLmg6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjp2bSk6CisgICAgICAgIChKU0M6
OlNsb3RWaXNpdG9yOjp2bSBjb25zdCk6CisgICAgICAgICogaGVhcC9TdG9wSWZOZWNlc3NhcnlU
aW1lci5jcHA6CisgICAgICAgIChKU0M6OlN0b3BJZk5lY2Vzc2FyeVRpbWVyOjpTdG9wSWZOZWNl
c3NhcnlUaW1lcik6CisgICAgICAgICogaGVhcC9TdG9wSWZOZWNlc3NhcnlUaW1lci5oOgorICAg
ICAgICAqIGhlYXAvU3Ryb25nLmg6CisgICAgICAgIChKU0M6OlN0cm9uZzo6b3BlcmF0b3I9KToK
KyAgICAgICAgKiBoZWFwL1dlYWtTZXQuaDoKKyAgICAgICAgKEpTQzo6V2Vha1NldDo6V2Vha1Nl
dCk6CisgICAgICAgIChKU0M6OldlYWtTZXQ6OnZtIGNvbnN0KToKKyAgICAgICAgKiBpbnNwZWN0
b3IvSlNJbmplY3RlZFNjcmlwdEhvc3QuY3BwOgorICAgICAgICAoSW5zcGVjdG9yOjpKU0luamVj
dGVkU2NyaXB0SG9zdDo6c2F2ZWRSZXN1bHRBbGlhcyBjb25zdCk6CisgICAgICAgIChJbnNwZWN0
b3I6OkpTSW5qZWN0ZWRTY3JpcHRIb3N0OjppbnRlcm5hbENvbnN0cnVjdG9yTmFtZSk6CisgICAg
ICAgIChJbnNwZWN0b3I6OkpTSW5qZWN0ZWRTY3JpcHRIb3N0OjpzdWJ0eXBlKToKKyAgICAgICAg
KEluc3BlY3Rvcjo6SlNJbmplY3RlZFNjcmlwdEhvc3Q6OmZ1bmN0aW9uRGV0YWlscyk6CisgICAg
ICAgIChJbnNwZWN0b3I6OmNvbnN0cnVjdEludGVybmFsUHJvcGVydHkpOgorICAgICAgICAoSW5z
cGVjdG9yOjpKU0luamVjdGVkU2NyaXB0SG9zdDo6Z2V0SW50ZXJuYWxQcm9wZXJ0aWVzKToKKyAg
ICAgICAgKEluc3BlY3Rvcjo6SlNJbmplY3RlZFNjcmlwdEhvc3Q6OndlYWtNYXBFbnRyaWVzKToK
KyAgICAgICAgKEluc3BlY3Rvcjo6SlNJbmplY3RlZFNjcmlwdEhvc3Q6OndlYWtTZXRFbnRyaWVz
KToKKyAgICAgICAgKEluc3BlY3Rvcjo6SlNJbmplY3RlZFNjcmlwdEhvc3Q6Oml0ZXJhdG9yRW50
cmllcyk6CisgICAgICAgIChJbnNwZWN0b3I6OkpTSW5qZWN0ZWRTY3JpcHRIb3N0OjpxdWVyeUlu
c3RhbmNlcyk6CisgICAgICAgIChJbnNwZWN0b3I6OkpTSW5qZWN0ZWRTY3JpcHRIb3N0OjpxdWVy
eUhvbGRlcnMpOgorICAgICAgICAqIGluc3BlY3Rvci9KU0phdmFTY3JpcHRDYWxsRnJhbWUuY3Bw
OgorICAgICAgICAoSW5zcGVjdG9yOjp2YWx1ZUZvclNjb3BlTG9jYXRpb24pOgorICAgICAgICAo
SW5zcGVjdG9yOjpKU0phdmFTY3JpcHRDYWxsRnJhbWU6OnNjb3BlRGVzY3JpcHRpb25zKToKKyAg
ICAgICAgKEluc3BlY3Rvcjo6SlNKYXZhU2NyaXB0Q2FsbEZyYW1lOjpmdW5jdGlvbk5hbWUgY29u
c3QpOgorICAgICAgICAoSW5zcGVjdG9yOjpKU0phdmFTY3JpcHRDYWxsRnJhbWU6OnR5cGUgY29u
c3QpOgorICAgICAgICAqIGluc3BlY3Rvci9TY3JpcHRDYWxsU3RhY2tGYWN0b3J5LmNwcDoKKyAg
ICAgICAgKEluc3BlY3Rvcjo6ZXh0cmFjdFNvdXJjZUluZm9ybWF0aW9uRnJvbUV4Y2VwdGlvbik6
CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBdWRpdEFnZW50LmNwcDoKKyAg
ICAgICAgKEluc3BlY3Rvcjo6SW5zcGVjdG9yQXVkaXRBZ2VudDo6cG9wdWxhdGVBdWRpdE9iamVj
dCk6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JIZWFwQWdlbnQuY3BwOgor
ICAgICAgICAoSW5zcGVjdG9yOjpJbnNwZWN0b3JIZWFwQWdlbnQ6OmdjKToKKyAgICAgICAgKiBp
bnRlcnByZXRlci9GcmFtZVRyYWNlcnMuaDoKKyAgICAgICAgKEpTQzo6TmF0aXZlQ2FsbEZyYW1l
VHJhY2VyOjpOYXRpdmVDYWxsRnJhbWVUcmFjZXIpOgorICAgICAgICAqIGludGVycHJldGVyL0lu
dGVycHJldGVyLmNwcDoKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmV4ZWN1dGVQcm9ncmFt
KToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OnByZXBhcmVGb3JSZXBlYXRDYWxsKToKKyAg
ICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmV4ZWN1dGUpOgorICAgICAgICAoSlNDOjpJbnRlcnBy
ZXRlcjo6ZXhlY3V0ZU1vZHVsZVByb2dyYW0pOgorICAgICAgICAqIGludGVycHJldGVyL1N0YWNr
VmlzaXRvci5jcHA6CisgICAgICAgIChKU0M6OlN0YWNrVmlzaXRvcjo6RnJhbWU6OmNhbGxlZVNh
dmVSZWdpc3RlcnNGb3JVbndpbmRpbmcpOgorICAgICAgICAoSlNDOjpTdGFja1Zpc2l0b3I6OkZy
YW1lOjpjb21wdXRlTGluZUFuZENvbHVtbiBjb25zdCk6CisgICAgICAgICogaml0L0Fzc2VtYmx5
SGVscGVycy5jcHA6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6ZW1pdER1bWJWaXJ0
dWFsQ2FsbCk6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6ZW1pdENvbnZlcnRWYWx1
ZVRvQm9vbGVhbik6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6YnJhbmNoSWZWYWx1
ZSk6CisgICAgICAgICogaml0L0Fzc2VtYmx5SGVscGVycy5oOgorICAgICAgICAoSlNDOjpBc3Nl
bWJseUhlbHBlcnM6OnZtKToKKyAgICAgICAgKiBqaXQvSklULmNwcDoKKyAgICAgICAgKEpTQzo6
SklUOjpKSVQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRFbnRlck9wdGltaXphdGlvbkNoZWNr
KToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKToKKyAgICAgICAg
KEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUV4Y2VwdGlvbkhhbmRsZXJzKToKKyAgICAgICAgKiBq
aXQvSklULmg6CisgICAgICAgICogaml0L0pJVENhbGwuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6
OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKToKKyAgICAgICAgKiBqaXQvSklURXhjZXB0aW9ucy5j
cHA6CisgICAgICAgIChKU0M6OmdlbmVyaWNVbndpbmQpOgorICAgICAgICAqIGppdC9KSVRFeGNl
cHRpb25zLmg6CisgICAgICAgICogaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcDoKKyAg
ICAgICAgKEpTQzo6SklUR2V0QnlJZEdlbmVyYXRvcjo6SklUR2V0QnlJZEdlbmVyYXRvcik6Cisg
ICAgICAgICogaml0L0pJVE9wY29kZXMuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
aXNfdW5kZWZpbmVkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2pmYWxzZSk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qZXFfbnVsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9qbmVxX251bGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfanRydWUpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdGhyb3cpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfY2F0Y2gpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZXFfbnVsbCk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9uZXFfbnVsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNs
b3dfb3BfbG9vcF9oaW50KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2xvZ19zaGFkb3df
Y2hpY2tlbl9wcm9sb2d1ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9sb2dfc2hhZG93
X2NoaWNrZW5fdGFpbCk6CisgICAgICAgICogaml0L0pJVE9wY29kZXMzMl82NC5jcHA6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qZmFsc2UpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfanRydWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdGhyb3cpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfY2F0Y2gpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbG9n
X3NoYWRvd19jaGlja2VuX3Byb2xvZ3VlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2xv
Z19zaGFkb3dfY2hpY2tlbl90YWlsKToKKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5jcHA6
CisgICAgICAgIChKU0M6Om9wZXJhdGlvbk5ld0Z1bmN0aW9uQ29tbW9uKToKKyAgICAgICAgKEpT
Qzo6dHJ5R2V0QnlWYWxPcHRpbWl6ZSk6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNz
LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0V3JpdGVCYXJyaWVyKToKKyAgICAgICAgKiBq
aXQvSklUVGh1bmtzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUVGh1bmtzOjpjdGlOYXRpdmVDYWxs
KToKKyAgICAgICAgKEpTQzo6SklUVGh1bmtzOjpjdGlOYXRpdmVDb25zdHJ1Y3QpOgorICAgICAg
ICAoSlNDOjpKSVRUaHVua3M6OmN0aU5hdGl2ZVRhaWxDYWxsKToKKyAgICAgICAgKEpTQzo6SklU
VGh1bmtzOjpjdGlOYXRpdmVUYWlsQ2FsbFdpdGhvdXRTYXZlZFRhZ3MpOgorICAgICAgICAoSlND
OjpKSVRUaHVua3M6OmN0aUludGVybmFsRnVuY3Rpb25DYWxsKToKKyAgICAgICAgKEpTQzo6SklU
VGh1bmtzOjpjdGlJbnRlcm5hbEZ1bmN0aW9uQ29uc3RydWN0KToKKyAgICAgICAgKEpTQzo6SklU
VGh1bmtzOjpjdGlTdHViKToKKyAgICAgICAgKEpTQzo6SklUVGh1bmtzOjpob3N0RnVuY3Rpb25T
dHViKToKKyAgICAgICAgKiBqaXQvSklUVGh1bmtzLmg6CisgICAgICAgICogaml0L0pJVFdvcmts
aXN0LmNwcDoKKyAgICAgICAgKEpTQzo6SklUV29ya2xpc3Q6OlBsYW46OnZtKToKKyAgICAgICAg
KEpTQzo6SklUV29ya2xpc3Q6OmNvbXBsZXRlQWxsRm9yVk0pOgorICAgICAgICAoSlNDOjpKSVRX
b3JrbGlzdDo6cG9sbCk6CisgICAgICAgIChKU0M6OkpJVFdvcmtsaXN0Ojpjb21waWxlTGF0ZXIp
OgorICAgICAgICAoSlNDOjpKSVRXb3JrbGlzdDo6Y29tcGlsZU5vdyk6CisgICAgICAgICogaml0
L1JlcGF0Y2guY3BwOgorICAgICAgICAoSlNDOjpyZWFkUHV0SUNDYWxsVGFyZ2V0KToKKyAgICAg
ICAgKEpTQzo6ZnRsVGh1bmtBd2FyZVJlcGF0Y2hDYWxsKToKKyAgICAgICAgKEpTQzo6bGlua1Ns
b3dGb3IpOgorICAgICAgICAoSlNDOjpsaW5rRm9yKToKKyAgICAgICAgKEpTQzo6bGlua0RpcmVj
dEZvcik6CisgICAgICAgIChKU0M6OnJldmVydENhbGwpOgorICAgICAgICAoSlNDOjp1bmxpbmtG
b3IpOgorICAgICAgICAoSlNDOjpsaW5rVmlydHVhbEZvcik6CisgICAgICAgIChKU0M6OmxpbmtQ
b2x5bW9ycGhpY0NhbGwpOgorICAgICAgICAqIGppdC9TcGVjaWFsaXplZFRodW5rSklULmg6Cisg
ICAgICAgIChKU0M6OlNwZWNpYWxpemVkVGh1bmtKSVQ6OlNwZWNpYWxpemVkVGh1bmtKSVQpOgor
ICAgICAgICAqIGppdC9UaHVua0dlbmVyYXRvci5oOgorICAgICAgICAqIGppdC9UaHVua0dlbmVy
YXRvcnMuY3BwOgorICAgICAgICAoSlNDOjp0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhH
ZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpzbG93UGF0aEZvcik6CisgICAgICAgIChKU0M6Omxp
bmtDYWxsVGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpsaW5rUG9seW1vcnBoaWNDYWxs
VGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjp2aXJ0dWFsVGh1bmtGb3IpOgorICAgICAg
ICAoSlNDOjpuYXRpdmVGb3JHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpuYXRpdmVDYWxsR2Vu
ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6bmF0aXZlVGFpbENhbGxHZW5lcmF0b3IpOgorICAgICAg
ICAoSlNDOjpuYXRpdmVUYWlsQ2FsbFdpdGhvdXRTYXZlZFRhZ3NHZW5lcmF0b3IpOgorICAgICAg
ICAoSlNDOjpuYXRpdmVDb25zdHJ1Y3RHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjppbnRlcm5h
bEZ1bmN0aW9uQ2FsbEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OmludGVybmFsRnVuY3Rpb25D
b25zdHJ1Y3RHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjphcml0eUZpeHVwR2VuZXJhdG9yKToK
KyAgICAgICAgKEpTQzo6dW5yZWFjaGFibGVHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpzdHJp
bmdHZXRCeVZhbEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OmNoYXJUb1N0cmluZyk6CisgICAg
ICAgIChKU0M6OmNoYXJDb2RlQXRUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OmNoYXJB
dFRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6ZnJvbUNoYXJDb2RlVGh1bmtHZW5lcmF0
b3IpOgorICAgICAgICAoSlNDOjpjbHozMlRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6
c3FydFRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6Zmxvb3JUaHVua0dlbmVyYXRvcik6
CisgICAgICAgIChKU0M6OmNlaWxUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OnRydW5j
VGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpyb3VuZFRodW5rR2VuZXJhdG9yKToKKyAg
ICAgICAgKEpTQzo6ZXhwVGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpsb2dUaHVua0dl
bmVyYXRvcik6CisgICAgICAgIChKU0M6OmFic1RodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpT
Qzo6aW11bFRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6cmFuZG9tVGh1bmtHZW5lcmF0
b3IpOgorICAgICAgICAoSlNDOjpib3VuZFRoaXNOb0FyZ3NGdW5jdGlvbkNhbGxHZW5lcmF0b3Ip
OgorICAgICAgICAqIGppdC9UaHVua0dlbmVyYXRvcnMuaDoKKyAgICAgICAgKiBqc2MuY3BwOgor
ICAgICAgICAoR2xvYmFsT2JqZWN0OjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChHbG9iYWxP
YmplY3Q6OmFkZEZ1bmN0aW9uKToKKyAgICAgICAgKEdsb2JhbE9iamVjdDo6bW9kdWxlTG9hZGVy
SW1wb3J0TW9kdWxlKToKKyAgICAgICAgKEdsb2JhbE9iamVjdDo6bW9kdWxlTG9hZGVyUmVzb2x2
ZSk6CisgICAgICAgIChHbG9iYWxPYmplY3Q6Om1vZHVsZUxvYWRlckNyZWF0ZUltcG9ydE1ldGFQ
cm9wZXJ0aWVzKToKKyAgICAgICAgKGZ1bmN0aW9uRGVzY3JpYmUpOgorICAgICAgICAoZnVuY3Rp
b25EZXNjcmliZUFycmF5KToKKyAgICAgICAgKEpTQ01lbW9yeUZvb3RwcmludDo6YWRkUHJvcGVy
dHkpOgorICAgICAgICAoZnVuY3Rpb25SdW4pOgorICAgICAgICAoZnVuY3Rpb25SdW5TdHJpbmcp
OgorICAgICAgICAoZnVuY3Rpb25SZWFkRmlsZSk6CisgICAgICAgIChmdW5jdGlvbkNhbGxlclNv
dXJjZU9yaWdpbik6CisgICAgICAgIChmdW5jdGlvblJlYWRsaW5lKToKKyAgICAgICAgKGZ1bmN0
aW9uRG9sbGFyQ3JlYXRlUmVhbG0pOgorICAgICAgICAoZnVuY3Rpb25Eb2xsYXJFdmFsU2NyaXB0
KToKKyAgICAgICAgKGZ1bmN0aW9uRG9sbGFyQWdlbnRHZXRSZXBvcnQpOgorICAgICAgICAoZnVu
Y3Rpb25XYWl0Rm9yUmVwb3J0KToKKyAgICAgICAgKGZ1bmN0aW9uSlNDT3B0aW9ucyk6CisgICAg
ICAgIChmdW5jdGlvbkNoZWNrTW9kdWxlU3ludGF4KToKKyAgICAgICAgKGZ1bmN0aW9uR2VuZXJh
dGVIZWFwU25hcHNob3RGb3JHQ0RlYnVnZ2luZyk6CisgICAgICAgIChmdW5jdGlvbldlYkFzc2Vt
Ymx5TWVtb3J5TW9kZSk6CisgICAgICAgIChkdW1wRXhjZXB0aW9uKToKKyAgICAgICAgKGNoZWNr
VW5jYXVnaHRFeGNlcHRpb24pOgorICAgICAgICAqIGxsaW50L0xMSW50U2xvd1BhdGhzLmNwcDoK
KyAgICAgICAgKEpTQzo6TExJbnQ6OkxMSU5UX1NMT1dfUEFUSF9ERUNMKToKKyAgICAgICAgKEpT
Qzo6TExJbnQ6OmhhbmRsZUhvc3RDYWxsKToKKyAgICAgICAgKiBwYXJzZXIvQVNUQnVpbGRlci5o
OgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpBU1RCdWlsZGVyKToKKyAgICAgICAgKEpTQzo6
QVNUQnVpbGRlcjo6Y3JlYXRlUmVzb2x2ZSk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OmNy
ZWF0ZUdldHRlck9yU2V0dGVyUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpj
cmVhdGVQcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OmNyZWF0ZUZ1bmNEZWNs
U3RhdGVtZW50KToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6bWFrZUZ1bmN0aW9uQ2FsbE5v
ZGUpOgorICAgICAgICAqIHBhcnNlci9MZXhlci5jcHA6CisgICAgICAgIChKU0M6OkxleGVyPFQ+
OjpMZXhlcik6CisgICAgICAgIChKU0M6OkxleGVyPExDaGFyPjo6cGFyc2VJZGVudGlmaWVyKToK
KyAgICAgICAgKEpTQzo6TGV4ZXI8VUNoYXI+OjpwYXJzZUlkZW50aWZpZXIpOgorICAgICAgICAq
IHBhcnNlci9MZXhlci5oOgorICAgICAgICAoSlNDOjpMZXhlcjxUPjo6bGV4RXhwZWN0SWRlbnRp
Zmllcik6CisgICAgICAgICogcGFyc2VyL01vZHVsZUFuYWx5emVyLmNwcDoKKyAgICAgICAgKEpT
Qzo6TW9kdWxlQW5hbHl6ZXI6Ok1vZHVsZUFuYWx5emVyKToKKyAgICAgICAgKiBwYXJzZXIvTW9k
dWxlQW5hbHl6ZXIuaDoKKyAgICAgICAgKEpTQzo6TW9kdWxlQW5hbHl6ZXI6OnZtKToKKyAgICAg
ICAgKiBwYXJzZXIvUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6UGFyc2VyPExleGVyVHlwZT46
OlBhcnNlcik6CisgICAgICAgIChKU0M6OlBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUlubmVyKToK
KyAgICAgICAgKEpTQzo6UGFyc2VyPExleGVyVHlwZT46OmlzQXJyb3dGdW5jdGlvblBhcmFtZXRl
cnMpOgorICAgICAgICAoSlNDOjpQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VTb3VyY2VFbGVtZW50
cyk6CisgICAgICAgIChKU0M6OlBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZU1vZHVsZVNvdXJjZUVs
ZW1lbnRzKToKKyAgICAgICAgKEpTQzo6UGFyc2VyPExleGVyVHlwZT46OnBhcnNlR2VuZXJhdG9y
RnVuY3Rpb25Tb3VyY2VFbGVtZW50cyk6CisgICAgICAgIChKU0M6OlBhcnNlcjxMZXhlclR5cGU+
OjpwYXJzZUFzeW5jRnVuY3Rpb25Tb3VyY2VFbGVtZW50cyk6CisgICAgICAgIChKU0M6OlBhcnNl
cjxMZXhlclR5cGU+OjpwYXJzZUFzeW5jR2VuZXJhdG9yRnVuY3Rpb25Tb3VyY2VFbGVtZW50cyk6
CisgICAgICAgIChKU0M6OlBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZVNpbmdsZUZ1bmN0aW9uKToK
KyAgICAgICAgKEpTQzo6UGFyc2VyPExleGVyVHlwZT46OnBhcnNlU3RhdGVtZW50TGlzdEl0ZW0p
OgorICAgICAgICAoSlNDOjpQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VPYmplY3RSZXN0QXNzaWdu
bWVudEVsZW1lbnQpOgorICAgICAgICAoSlNDOjpQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VBc3Np
Z25tZW50RWxlbWVudCk6CisgICAgICAgIChKU0M6OlBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZURl
c3RydWN0dXJpbmdQYXR0ZXJuKToKKyAgICAgICAgKEpTQzo6UGFyc2VyPExleGVyVHlwZT46OnBh
cnNlRm9yU3RhdGVtZW50KToKKyAgICAgICAgKEpTQzo6UGFyc2VyPExleGVyVHlwZT46OnBhcnNl
QnJlYWtTdGF0ZW1lbnQpOgorICAgICAgICAoSlNDOjpQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VD
b250aW51ZVN0YXRlbWVudCk6CisgICAgICAgIChKU0M6OlBhcnNlcjxMZXhlclR5cGU+OjpwYXJz
ZVN0YXRlbWVudCk6CisgICAgICAgIChKU0M6OlBhcnNlcjxMZXhlclR5cGU+OjptYXliZVBhcnNl
QXN5bmNGdW5jdGlvbkRlY2xhcmF0aW9uU3RhdGVtZW50KToKKyAgICAgICAgKEpTQzo6UGFyc2Vy
PExleGVyVHlwZT46OmNyZWF0ZUdlbmVyYXRvclBhcmFtZXRlcnMpOgorICAgICAgICAoSlNDOjpQ
YXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VGdW5jdGlvbkluZm8pOgorICAgICAgICAoSlNDOjpQYXJz
ZXI8TGV4ZXJUeXBlPjo6cGFyc2VGdW5jdGlvbkRlY2xhcmF0aW9uKToKKyAgICAgICAgKEpTQzo6
UGFyc2VyPExleGVyVHlwZT46OnBhcnNlQXN5bmNGdW5jdGlvbkRlY2xhcmF0aW9uKToKKyAgICAg
ICAgKEpTQzo6UGFyc2VyPExleGVyVHlwZT46OnBhcnNlQ2xhc3NEZWNsYXJhdGlvbik6CisgICAg
ICAgIChKU0M6OlBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUNsYXNzKToKKyAgICAgICAgKEpTQzo6
UGFyc2VyPExleGVyVHlwZT46OnBhcnNlSW1wb3J0Q2xhdXNlSXRlbSk6CisgICAgICAgIChKU0M6
OlBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUltcG9ydERlY2xhcmF0aW9uKToKKyAgICAgICAgKEpT
Qzo6UGFyc2VyPExleGVyVHlwZT46OnBhcnNlRXhwb3J0U3BlY2lmaWVyKToKKyAgICAgICAgKEpT
Qzo6UGFyc2VyPExleGVyVHlwZT46OnBhcnNlRXhwb3J0RGVjbGFyYXRpb24pOgorICAgICAgICAo
SlNDOjpQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbik6CisgICAg
ICAgIChKU0M6OlBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZVByb3BlcnR5KToKKyAgICAgICAgKEpT
Qzo6UGFyc2VyPExleGVyVHlwZT46OnBhcnNlR2V0dGVyU2V0dGVyKToKKyAgICAgICAgKEpTQzo6
UGFyc2VyPExleGVyVHlwZT46OnBhcnNlT2JqZWN0TGl0ZXJhbCk6CisgICAgICAgIChKU0M6OlBh
cnNlcjxMZXhlclR5cGU+OjpwYXJzZVN0cmljdE9iamVjdExpdGVyYWwpOgorICAgICAgICAoSlND
OjpQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VDbGFzc0V4cHJlc3Npb24pOgorICAgICAgICAoSlND
OjpQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VGdW5jdGlvbkV4cHJlc3Npb24pOgorICAgICAgICAo
SlNDOjpQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VBc3luY0Z1bmN0aW9uRXhwcmVzc2lvbik6Cisg
ICAgICAgIChKU0M6OlBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZVByaW1hcnlFeHByZXNzaW9uKToK
KyAgICAgICAgKEpTQzo6UGFyc2VyPExleGVyVHlwZT46OnBhcnNlTWVtYmVyRXhwcmVzc2lvbik6
CisgICAgICAgIChKU0M6OlBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUFycm93RnVuY3Rpb25FeHBy
ZXNzaW9uKToKKyAgICAgICAgKEpTQzo6UGFyc2VyPExleGVyVHlwZT46OnBhcnNlVW5hcnlFeHBy
ZXNzaW9uKToKKyAgICAgICAgKiBwYXJzZXIvUGFyc2VyLmg6CisgICAgICAgIChKU0M6OmlzQXJn
dW1lbnRzKToKKyAgICAgICAgKEpTQzo6aXNFdmFsKToKKyAgICAgICAgKEpTQzo6aXNFdmFsT3JB
cmd1bWVudHNJZGVudGlmaWVyKToKKyAgICAgICAgKEpTQzo6U2NvcGU6OlNjb3BlKToKKyAgICAg
ICAgKEpTQzo6U2NvcGU6OmRlY2xhcmVQYXJhbWV0ZXIpOgorICAgICAgICAoSlNDOjpTY29wZTo6
c2V0SW5uZXJBcnJvd0Z1bmN0aW9uVXNlc0V2YWxBbmRVc2VBcmd1bWVudHNJZk5lZWRlZCk6Cisg
ICAgICAgIChKU0M6OlNjb3BlOjpjb2xsZWN0RnJlZVZhcmlhYmxlcyk6CisgICAgICAgIChKU0M6
OlBhcnNlcjo6Y2FuUmVjdXJzZSk6CisgICAgICAgIChKU0M6OnBhcnNlKToKKyAgICAgICAgKEpT
Qzo6cGFyc2VGdW5jdGlvbkZvckZ1bmN0aW9uQ29uc3RydWN0b3IpOgorICAgICAgICAqIHBhcnNl
ci9QYXJzZXJBcmVuYS5oOgorICAgICAgICAoSlNDOjpJZGVudGlmaWVyQXJlbmE6Om1ha2VJZGVu
dGlmaWVyKToKKyAgICAgICAgKEpTQzo6SWRlbnRpZmllckFyZW5hOjptYWtlRW1wdHlJZGVudGlm
aWVyKToKKyAgICAgICAgKEpTQzo6SWRlbnRpZmllckFyZW5hOjptYWtlSWRlbnRpZmllckxDaGFy
RnJvbVVDaGFyKToKKyAgICAgICAgKEpTQzo6SWRlbnRpZmllckFyZW5hOjptYWtlTnVtZXJpY0lk
ZW50aWZpZXIpOgorICAgICAgICAqIHBhcnNlci9TeW50YXhDaGVja2VyLmg6CisgICAgICAgIChK
U0M6OlN5bnRheENoZWNrZXI6OlN5bnRheENoZWNrZXIpOgorICAgICAgICAoSlNDOjpTeW50YXhD
aGVja2VyOjpjcmVhdGVQcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OlN5bnRheENoZWNrZXI6OmNy
ZWF0ZUdldHRlck9yU2V0dGVyUHJvcGVydHkpOgorICAgICAgICAqIHByb2ZpbGVyL1Byb2ZpbGVy
Qnl0ZWNvZGUuY3BwOgorICAgICAgICAoSlNDOjpQcm9maWxlcjo6Qnl0ZWNvZGU6OnRvSlMgY29u
c3QpOgorICAgICAgICAqIHByb2ZpbGVyL1Byb2ZpbGVyQnl0ZWNvZGVTZXF1ZW5jZS5jcHA6Cisg
ICAgICAgIChKU0M6OlByb2ZpbGVyOjpCeXRlY29kZVNlcXVlbmNlOjphZGRTZXF1ZW5jZVByb3Bl
cnRpZXMgY29uc3QpOgorICAgICAgICAqIHByb2ZpbGVyL1Byb2ZpbGVyQnl0ZWNvZGVzLmNwcDoK
KyAgICAgICAgKEpTQzo6UHJvZmlsZXI6OkJ5dGVjb2Rlczo6dG9KUyBjb25zdCk6CisgICAgICAg
ICogcHJvZmlsZXIvUHJvZmlsZXJDb21waWxhdGlvbi5jcHA6CisgICAgICAgIChKU0M6OlByb2Zp
bGVyOjpDb21waWxhdGlvbjo6dG9KUyBjb25zdCk6CisgICAgICAgICogcHJvZmlsZXIvUHJvZmls
ZXJDb21waWxlZEJ5dGVjb2RlLmNwcDoKKyAgICAgICAgKEpTQzo6UHJvZmlsZXI6OkNvbXBpbGVk
Qnl0ZWNvZGU6OnRvSlMgY29uc3QpOgorICAgICAgICAqIHByb2ZpbGVyL1Byb2ZpbGVyRXZlbnQu
Y3BwOgorICAgICAgICAoSlNDOjpQcm9maWxlcjo6RXZlbnQ6OnRvSlMgY29uc3QpOgorICAgICAg
ICAqIHByb2ZpbGVyL1Byb2ZpbGVyT1NSRXhpdC5jcHA6CisgICAgICAgIChKU0M6OlByb2ZpbGVy
OjpPU1JFeGl0Ojp0b0pTIGNvbnN0KToKKyAgICAgICAgKiBwcm9maWxlci9Qcm9maWxlck9TUkV4
aXRTaXRlLmNwcDoKKyAgICAgICAgKEpTQzo6UHJvZmlsZXI6Ok9TUkV4aXRTaXRlOjp0b0pTIGNv
bnN0KToKKyAgICAgICAgKiBwcm9maWxlci9Qcm9maWxlclVJRC5jcHA6CisgICAgICAgIChKU0M6
OlByb2ZpbGVyOjpVSUQ6OnRvSlMgY29uc3QpOgorICAgICAgICAqIHJ1bnRpbWUvQWJzdHJhY3RN
b2R1bGVSZWNvcmQuY3BwOgorICAgICAgICAoSlNDOjpBYnN0cmFjdE1vZHVsZVJlY29yZDo6Zmlu
aXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpBYnN0cmFjdE1vZHVsZVJlY29yZDo6aG9zdFJl
c29sdmVJbXBvcnRlZE1vZHVsZSk6CisgICAgICAgIChKU0M6OkFic3RyYWN0TW9kdWxlUmVjb3Jk
OjpyZXNvbHZlRXhwb3J0SW1wbCk6CisgICAgICAgIChKU0M6OmdldEV4cG9ydGVkTmFtZXMpOgor
ICAgICAgICAoSlNDOjpBYnN0cmFjdE1vZHVsZVJlY29yZDo6Z2V0TW9kdWxlTmFtZXNwYWNlKToK
KyAgICAgICAgKiBydW50aW1lL0FycmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludFNldC5jcHA6
CisgICAgICAgIChKU0M6OkFycmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludFNldDo6ZmlyZUFs
bCk6CisgICAgICAgICogcnVudGltZS9BcnJheUl0ZXJhdG9yUHJvdG90eXBlLmNwcDoKKyAgICAg
ICAgKEpTQzo6QXJyYXlJdGVyYXRvclByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAg
ICAqIHJ1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpmYXN0Sm9pbik6
CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5jVG9Mb2NhbGVTdHJpbmcpOgorICAgICAgICAo
SlNDOjpzbG93Sm9pbik6CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5jSm9pbik6CisgICAg
ICAgIChKU0M6OmFycmF5UHJvdG9GdW5jUHVzaCk6CisgICAgICAgICogcnVudGltZS9Bc3luY0Z1
bmN0aW9uUHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6QXN5bmNGdW5jdGlvblByb3RvdHlw
ZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAqIHJ1bnRpbWUvQXN5bmNHZW5lcmF0b3JGdW5j
dGlvblByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OkFzeW5jR2VuZXJhdG9yRnVuY3Rpb25Q
cm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKiBydW50aW1lL0FzeW5jR2VuZXJh
dG9yUHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6QXN5bmNHZW5lcmF0b3JQcm90b3R5cGU6
OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKiBydW50aW1lL0F0b21pY3NPYmplY3QuY3BwOgor
ICAgICAgICAoSlNDOjpBdG9taWNzT2JqZWN0OjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChK
U0M6OmF0b21pY3NGdW5jV2FpdCk6CisgICAgICAgIChKU0M6Om9wZXJhdGlvbkF0b21pY3NBZGQp
OgorICAgICAgICAoSlNDOjpvcGVyYXRpb25BdG9taWNzQW5kKToKKyAgICAgICAgKEpTQzo6b3Bl
cmF0aW9uQXRvbWljc0NvbXBhcmVFeGNoYW5nZSk6CisgICAgICAgIChKU0M6Om9wZXJhdGlvbkF0
b21pY3NFeGNoYW5nZSk6CisgICAgICAgIChKU0M6Om9wZXJhdGlvbkF0b21pY3NJc0xvY2tGcmVl
KToKKyAgICAgICAgKEpTQzo6b3BlcmF0aW9uQXRvbWljc0xvYWQpOgorICAgICAgICAoSlNDOjpv
cGVyYXRpb25BdG9taWNzT3IpOgorICAgICAgICAoSlNDOjpvcGVyYXRpb25BdG9taWNzU3RvcmUp
OgorICAgICAgICAoSlNDOjpvcGVyYXRpb25BdG9taWNzU3ViKToKKyAgICAgICAgKEpTQzo6b3Bl
cmF0aW9uQXRvbWljc1hvcik6CisgICAgICAgICogcnVudGltZS9CaWdJbnRQcm90b3R5cGUuY3Bw
OgorICAgICAgICAoSlNDOjpCaWdJbnRQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKToKKyAgICAg
ICAgKEpTQzo6YmlnSW50UHJvdG9GdW5jVG9TdHJpbmcpOgorICAgICAgICAqIHJ1bnRpbWUvQ2Fj
aGVkVHlwZXMuY3BwOgorICAgICAgICAoSlNDOjpDYWNoZWRVbmlxdWVkU3RyaW5nSW1wbEJhc2U6
OmRlY29kZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZElkZW50aWZpZXI6OmRlY29kZSBj
b25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZEpTVmFsdWU6OmRlY29kZSBjb25zdCk6CisgICAg
ICAgICogcnVudGltZS9Db2RlQ2FjaGUuY3BwOgorICAgICAgICAoSlNDOjpDb2RlQ2FjaGVNYXA6
OnBydW5lU2xvd0Nhc2UpOgorICAgICAgICAoSlNDOjpDb2RlQ2FjaGU6OmdldFVubGlua2VkR2xv
YmFsRnVuY3Rpb25FeGVjdXRhYmxlKToKKyAgICAgICAgKiBydW50aW1lL0NvZGVDYWNoZS5oOgor
ICAgICAgICAoSlNDOjpnZW5lcmF0ZVVubGlua2VkQ29kZUJsb2NrSW1wbCk6CisgICAgICAgICog
cnVudGltZS9Db21tb25JZGVudGlmaWVycy5jcHA6CisgICAgICAgIChKU0M6OkNvbW1vbklkZW50
aWZpZXJzOjpDb21tb25JZGVudGlmaWVycyk6CisgICAgICAgICogcnVudGltZS9Db21tb25JZGVu
dGlmaWVycy5oOgorICAgICAgICAqIHJ1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcDoKKyAgICAg
ICAgKEpTQzo6U0xPV19QQVRIX0RFQ0wpOgorICAgICAgICAqIHJ1bnRpbWUvQ29tcGxldGlvbi5j
cHA6CisgICAgICAgIChKU0M6OmNoZWNrU3ludGF4SW50ZXJuYWwpOgorICAgICAgICAoSlNDOjpj
aGVja01vZHVsZVN5bnRheCk6CisgICAgICAgIChKU0M6OmxvYWRBbmRFdmFsdWF0ZU1vZHVsZSk6
CisgICAgICAgIChKU0M6OmxvYWRNb2R1bGUpOgorICAgICAgICAqIHJ1bnRpbWUvRGF0ZUNvbnN0
cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y2FsbERhdGUpOgorICAgICAgICAqIHJ1bnRpbWUv
RGF0ZVByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OmZvcm1hdExvY2FsZURhdGUpOgorICAg
ICAgICAoSlNDOjpmb3JtYXRlRGF0ZUluc3RhbmNlKToKKyAgICAgICAgKEpTQzo6RGF0ZVByb3Rv
dHlwZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jVG9JU09T
dHJpbmcpOgorICAgICAgICAqIHJ1bnRpbWUvRXJyb3IuY3BwOgorICAgICAgICAoSlNDOjphZGRF
cnJvckluZm8pOgorICAgICAgICAqIHJ1bnRpbWUvRXJyb3JJbnN0YW5jZS5jcHA6CisgICAgICAg
IChKU0M6OmFwcGVuZFNvdXJjZVRvRXJyb3IpOgorICAgICAgICAoSlNDOjpFcnJvckluc3RhbmNl
OjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OkVycm9ySW5zdGFuY2U6Om1hdGVyaWFs
aXplRXJyb3JJbmZvSWZOZWVkZWQpOgorICAgICAgICAqIHJ1bnRpbWUvRXJyb3JQcm90b3R5cGUu
Y3BwOgorICAgICAgICAoSlNDOjpFcnJvclByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24pOgorICAg
ICAgICAoSlNDOjplcnJvclByb3RvRnVuY1RvU3RyaW5nKToKKyAgICAgICAgKiBydW50aW1lL0V4
Y2VwdGlvbkhlbHBlcnMuY3BwOgorICAgICAgICAoSlNDOjpUZXJtaW5hdGVkRXhlY3V0aW9uRXJy
b3I6OmRlZmF1bHRWYWx1ZSk6CisgICAgICAgICogcnVudGltZS9GdW5jdGlvblByb3RvdHlwZS5j
cHA6CisgICAgICAgIChKU0M6OmZ1bmN0aW9uUHJvdG9GdW5jVG9TdHJpbmcpOgorICAgICAgICAq
IHJ1bnRpbWUvRnVuY3Rpb25SYXJlRGF0YS5jcHA6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uUmFy
ZURhdGE6OmNsZWFyKToKKyAgICAgICAgKiBydW50aW1lL0dlbmVyYXRvckZ1bmN0aW9uUHJvdG90
eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6R2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGU6OmZpbmlz
aENyZWF0aW9uKToKKyAgICAgICAgKiBydW50aW1lL0dlbmVyYXRvclByb3RvdHlwZS5jcHA6Cisg
ICAgICAgIChKU0M6OkdlbmVyYXRvclByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAg
ICAqIHJ1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaDoKKyAgICAgICAgKEpTQzo6R2Vu
ZXJpY0FyZ3VtZW50czxUeXBlPjo6Z2V0T3duUHJvcGVydHlOYW1lcyk6CisgICAgICAgICogcnVu
dGltZS9HZXR0ZXJTZXR0ZXIuaDoKKyAgICAgICAgKiBydW50aW1lL0lkZW50aWZpZXIuY3BwOgor
ICAgICAgICAoSlNDOjpJZGVudGlmaWVyOjphZGQpOgorICAgICAgICAoSlNDOjpJZGVudGlmaWVy
OjphZGQ4KToKKyAgICAgICAgKEpTQzo6SWRlbnRpZmllcjo6ZnJvbSk6CisgICAgICAgIChKU0M6
OklkZW50aWZpZXI6OmNoZWNrQ3VycmVudEF0b21TdHJpbmdUYWJsZSk6CisgICAgICAgICogcnVu
dGltZS9JZGVudGlmaWVyLmg6CisgICAgICAgIChKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcp
OgorICAgICAgICAoSlNDOjpJZGVudGlmaWVyOjpjcmVhdGVMQ2hhckZyb21VQ2hhcik6CisgICAg
ICAgIChKU0M6OklkZW50aWZpZXI6OklkZW50aWZpZXIpOgorICAgICAgICAoSlNDOjpJZGVudGlm
aWVyOjphZGQpOgorICAgICAgICAqIHJ1bnRpbWUvSWRlbnRpZmllcklubGluZXMuaDoKKyAgICAg
ICAgKEpTQzo6SWRlbnRpZmllcjo6YWRkKToKKyAgICAgICAgKEpTQzo6SWRlbnRpZmllcjo6ZnJv
bVVpZCk6CisgICAgICAgIChKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcpOgorICAgICAgICAo
SlNDOjppZGVudGlmaWVyVG9KU1ZhbHVlKToKKyAgICAgICAgKEpTQzo6aWRlbnRpZmllclRvU2Fm
ZVB1YmxpY0pTVmFsdWUpOgorICAgICAgICAoSlNDOjpJZGVudGlmaWVyOjpJZGVudGlmaWVyKTog
RGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL0ludGVybmFsRnVuY3Rpb24uY3BwOgorICAgICAg
ICAoSlNDOjpJbnRlcm5hbEZ1bmN0aW9uOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgICogcnVu
dGltZS9JbnRsQ29sbGF0b3IuY3BwOgorICAgICAgICAoSlNDOjpJbnRsQ29sbGF0b3I6OnJlc29s
dmVkT3B0aW9ucyk6CisgICAgICAgICogcnVudGltZS9JbnRsQ29sbGF0b3JQcm90b3R5cGUuY3Bw
OgorICAgICAgICAoSlNDOjpJbnRsQ29sbGF0b3JQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKToK
KyAgICAgICAgKiBydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdC5jcHA6CisgICAgICAgIChKU0M6
OkludGxEVEZJbnRlcm5hbDo6dG9EYXRlVGltZU9wdGlvbnNBbnlEYXRlKToKKyAgICAgICAgKEpT
Qzo6SW50bERhdGVUaW1lRm9ybWF0OjpyZXNvbHZlZE9wdGlvbnMpOgorICAgICAgICAoSlNDOjpJ
bnRsRGF0ZVRpbWVGb3JtYXQ6OmZvcm1hdCk6CisgICAgICAgIChKU0M6OkludGxEYXRlVGltZUZv
cm1hdDo6Zm9ybWF0VG9QYXJ0cyk6CisgICAgICAgICogcnVudGltZS9JbnRsRGF0ZVRpbWVGb3Jt
YXRQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpJbnRsRGF0ZVRpbWVGb3JtYXRQcm90b3R5
cGU6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKiBydW50aW1lL0ludGxOdW1iZXJGb3JtYXQu
Y3BwOgorICAgICAgICAoSlNDOjpJbnRsTnVtYmVyRm9ybWF0Ojppbml0aWFsaXplTnVtYmVyRm9y
bWF0KToKKyAgICAgICAgKEpTQzo6SW50bE51bWJlckZvcm1hdDo6Zm9ybWF0TnVtYmVyKToKKyAg
ICAgICAgKEpTQzo6SW50bE51bWJlckZvcm1hdDo6cmVzb2x2ZWRPcHRpb25zKToKKyAgICAgICAg
KEpTQzo6SW50bE51bWJlckZvcm1hdDo6Zm9ybWF0VG9QYXJ0cyk6CisgICAgICAgICogcnVudGlt
ZS9JbnRsTnVtYmVyRm9ybWF0UHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6SW50bE51bWJl
ckZvcm1hdFByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAqIHJ1bnRpbWUvSW50
bE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6Omxvb2t1cFN1cHBvcnRlZExvY2FsZXMpOgorICAg
ICAgICAoSlNDOjpzdXBwb3J0ZWRMb2NhbGVzKToKKyAgICAgICAgKEpTQzo6aW50bE9iamVjdEZ1
bmNHZXRDYW5vbmljYWxMb2NhbGVzKToKKyAgICAgICAgKiBydW50aW1lL0ludGxQbHVyYWxSdWxl
cy5jcHA6CisgICAgICAgIChKU0M6OkludGxQbHVyYWxSdWxlczo6aW5pdGlhbGl6ZVBsdXJhbFJ1
bGVzKToKKyAgICAgICAgKEpTQzo6SW50bFBsdXJhbFJ1bGVzOjpyZXNvbHZlZE9wdGlvbnMpOgor
ICAgICAgICAoSlNDOjpJbnRsUGx1cmFsUnVsZXM6OnNlbGVjdCk6CisgICAgICAgICogcnVudGlt
ZS9JbnRsUGx1cmFsUnVsZXNQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpJbnRsUGx1cmFs
UnVsZXNQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKiBydW50aW1lL0pTQXJy
YXkuaDoKKyAgICAgICAgKEpTQzo6YXNBcnJheSk6CisgICAgICAgIChKU0M6OmlzSlNBcnJheSk6
CisgICAgICAgICogcnVudGltZS9KU0FycmF5QnVmZmVyUHJvdG90eXBlLmNwcDoKKyAgICAgICAg
KEpTQzo6SlNBcnJheUJ1ZmZlclByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAq
IHJ1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuY3BwOgorICAgICAgICAoSlNDOjpKU0FycmF5QnVm
ZmVyVmlldzo6c2xvd0Rvd25BbmRXYXN0ZU1lbW9yeSk6CisgICAgICAgICogcnVudGltZS9KU0NK
U1ZhbHVlLmNwcDoKKyAgICAgICAgKEpTQzo6SlNWYWx1ZTo6cHV0VG9QcmltaXRpdmVCeUluZGV4
KToKKyAgICAgICAgKEpTQzo6SlNWYWx1ZTo6ZHVtcEZvckJhY2t0cmFjZSBjb25zdCk6CisgICAg
ICAgIChKU0M6OkpTVmFsdWU6OnRvU3RyaW5nU2xvd0Nhc2UgY29uc3QpOgorICAgICAgICAqIHJ1
bnRpbWUvSlNDSlNWYWx1ZUlubGluZXMuaDoKKyAgICAgICAgKEpTQzo6SlNWYWx1ZTo6Z2V0IGNv
bnN0KToKKyAgICAgICAgKiBydW50aW1lL0pTQ2FzdC5oOgorICAgICAgICAoSlNDOjpqc0Nhc3Qp
OgorICAgICAgICAqIHJ1bnRpbWUvSlNDZWxsLmNwcDoKKyAgICAgICAgKEpTQzo6SlNDZWxsOjpk
dW1wIGNvbnN0KToKKyAgICAgICAgKEpTQzo6SlNDZWxsOjpkdW1wVG9TdHJlYW0pOgorICAgICAg
ICAoSlNDOjpKU0NlbGw6OnB1dEJ5SW5kZXgpOgorICAgICAgICAqIHJ1bnRpbWUvSlNDZWxsSW5s
aW5lcy5oOgorICAgICAgICAoSlNDOjpKU0NlbGw6OnN0cnVjdHVyZSBjb25zdCk6CisgICAgICAg
IChKU0M6OkV4ZWNTdGF0ZTo6dm0gY29uc3QpOgorICAgICAgICAoSlNDOjp0cnlBbGxvY2F0ZUNl
bGxIZWxwZXIpOgorICAgICAgICAqIHJ1bnRpbWUvSlNEYXRhVmlld1Byb3RvdHlwZS5jcHA6Cisg
ICAgICAgIChKU0M6OkpTRGF0YVZpZXdQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKToKKyAgICAg
ICAgKiBydW50aW1lL0pTRml4ZWRBcnJheS5jcHA6CisgICAgICAgIChKU0M6OkpTRml4ZWRBcnJh
eTo6ZHVtcFRvU3RyZWFtKToKKyAgICAgICAgKiBydW50aW1lL0pTRnVuY3Rpb24uY3BwOgorICAg
ICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OlJl
dHJpZXZlQ2FsbGVyRnVuY3Rpb25GdW5jdG9yOjpvcGVyYXRvcigpIGNvbnN0KToKKyAgICAgICAg
KEpTQzo6SlNGdW5jdGlvbjo6cmVpZnlOYW1lKToKKyAgICAgICAgKEpTQzo6SlNGdW5jdGlvbjo6
cmVpZnlMYXp5Qm91bmROYW1lSWZOZWVkZWQpOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjph
c3NlcnRUeXBlSW5mb0ZsYWdJbnZhcmlhbnRzKToKKyAgICAgICAgKiBydW50aW1lL0pTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oOgorICAgICAgICAoSlNDOjpKU0dlbmVyaWNUeXBlZEFy
cmF5VmlldzxBZGFwdG9yPjo6ZGVsZXRlUHJvcGVydHlCeUluZGV4KToKKyAgICAgICAgKEpTQzo6
SlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmdldE93blByb3BlcnR5TmFtZXMpOgor
ICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpKU0ds
b2JhbE9iamVjdDo6aW5pdCk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0OjpleHBvc2VE
b2xsYXJWTSk6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5jcHA6
CisgICAgICAgIChKU0M6OmVuY29kZSk6CisgICAgICAgIChKU0M6OmRlY29kZSk6CisgICAgICAg
IChKU0M6Omdsb2JhbEZ1bmNFc2NhcGUpOgorICAgICAgICAoSlNDOjpnbG9iYWxGdW5jVW5lc2Nh
cGUpOgorICAgICAgICAoSlNDOjpnbG9iYWxGdW5jQnVpbHRpbkRlc2NyaWJlKToKKyAgICAgICAg
KiBydW50aW1lL0pTTGV4aWNhbEVudmlyb25tZW50LmNwcDoKKyAgICAgICAgKEpTQzo6SlNMZXhp
Y2FsRW52aXJvbm1lbnQ6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyk6CisgICAgICAgICog
cnVudGltZS9KU01vZHVsZUVudmlyb25tZW50LmNwcDoKKyAgICAgICAgKEpTQzo6SlNNb2R1bGVF
bnZpcm9ubWVudDo6Z2V0T3duUHJvcGVydHlTbG90KToKKyAgICAgICAgKEpTQzo6SlNNb2R1bGVF
bnZpcm9ubWVudDo6cHV0KToKKyAgICAgICAgKEpTQzo6SlNNb2R1bGVFbnZpcm9ubWVudDo6ZGVs
ZXRlUHJvcGVydHkpOgorICAgICAgICAqIHJ1bnRpbWUvSlNNb2R1bGVMb2FkZXIuY3BwOgorICAg
ICAgICAoSlNDOjpKU01vZHVsZUxvYWRlcjo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlND
OjpKU01vZHVsZUxvYWRlcjo6cmVxdWVzdEltcG9ydE1vZHVsZSk6CisgICAgICAgIChKU0M6Om1v
ZHVsZUxvYWRlclBhcnNlTW9kdWxlKToKKyAgICAgICAgKEpTQzo6bW9kdWxlTG9hZGVyUmVxdWVz
dGVkTW9kdWxlcyk6CisgICAgICAgICogcnVudGltZS9KU01vZHVsZU5hbWVzcGFjZU9iamVjdC5j
cHA6CisgICAgICAgIChKU0M6OkpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0OjpmaW5pc2hDcmVhdGlv
bik6CisgICAgICAgIChKU0M6OkpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0OjpnZXRPd25Qcm9wZXJ0
eVNsb3RCeUluZGV4KToKKyAgICAgICAgKiBydW50aW1lL0pTTW9kdWxlUmVjb3JkLmNwcDoKKyAg
ICAgICAgKEpTQzo6SlNNb2R1bGVSZWNvcmQ6Omluc3RhbnRpYXRlRGVjbGFyYXRpb25zKToKKyAg
ICAgICAgKiBydW50aW1lL0pTT05PYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpKU09OT2JqZWN0
OjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OlByb3BlcnR5TmFtZUZvckZ1bmN0aW9u
Q2FsbDo6dmFsdWUgY29uc3QpOgorICAgICAgICAoSlNDOjpTdHJpbmdpZmllcjo6U3RyaW5naWZp
ZXIpOgorICAgICAgICAoSlNDOjpTdHJpbmdpZmllcjo6c3RyaW5naWZ5KToKKyAgICAgICAgKEpT
Qzo6U3RyaW5naWZpZXI6OkhvbGRlcjo6YXBwZW5kTmV4dFByb3BlcnR5KToKKyAgICAgICAgKEpT
Qzo6V2Fsa2VyOjp3YWxrKToKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0LmNwcDoKKyAgICAg
ICAgKEpTQzo6Z2V0Q2xhc3NQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6
OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0
QnlJbmRleCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgp
OgorICAgICAgICAoSlNDOjpKU09iamVjdDo6dG9TdHJpbmcgY29uc3QpOgorICAgICAgICAoSlND
OjpKU09iamVjdDo6cmVpZnlBbGxTdGF0aWNQcm9wZXJ0aWVzKToKKyAgICAgICAgKEpTQzo6SlNP
YmplY3Q6OnB1dERpcmVjdEluZGV4U2xvd09yQmV5b25kVmVjdG9yTGVuZ3RoKToKKyAgICAgICAg
KiBydW50aW1lL0pTT2JqZWN0Lmg6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpwdXRCeUluZGV4
SW5saW5lKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmJ1dHRlcmZseVByZUNhcGFjaXR5KToK
KyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmJ1dHRlcmZseVRvdGFsU2l6ZSk6CisgICAgICAgIChK
U0M6Om1ha2VJZGVudGlmaWVyKToKKyAgICAgICAgKiBydW50aW1lL0pTUHJvbWlzZVByb3RvdHlw
ZS5jcHA6CisgICAgICAgIChKU0M6OkpTUHJvbWlzZVByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24p
OgorICAgICAgICAqIHJ1bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmNwcDoKKyAgICAg
ICAgKEpTQzo6SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpmaW5pc2hDcmVhdGlvbik6CisgICAg
ICAgICogcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaDoKKyAgICAgICAgKEpTQzo6
cHJvcGVydHlOYW1lRW51bWVyYXRvcik6CisgICAgICAgICogcnVudGltZS9KU1J1bkxvb3BUaW1l
ci5jcHA6CisgICAgICAgIChKU0M6OkpTUnVuTG9vcFRpbWVyOjpKU1J1bkxvb3BUaW1lcik6Cisg
ICAgICAgICogcnVudGltZS9KU1J1bkxvb3BUaW1lci5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNT
dHJpbmcuY3BwOgorICAgICAgICAoSlNDOjpKU1N0cmluZzo6ZHVtcFRvU3RyZWFtKToKKyAgICAg
ICAgKEpTQzo6SlNSb3BlU3RyaW5nOjpyZXNvbHZlUm9wZVdpdGhGdW5jdGlvbiBjb25zdCk6Cisg
ICAgICAgIChKU0M6OmpzU3RyaW5nV2l0aENhY2hlU2xvd0Nhc2UpOgorICAgICAgICAqIHJ1bnRp
bWUvSlNTdHJpbmcuaDoKKyAgICAgICAgKEpTQzo6anNFbXB0eVN0cmluZyk6CisgICAgICAgIChK
U0M6OmpzU2luZ2xlQ2hhcmFjdGVyU3RyaW5nKToKKyAgICAgICAgKEpTQzo6anNOb250cml2aWFs
U3RyaW5nKToKKyAgICAgICAgKEpTQzo6SlNTdHJpbmc6OnRvSWRlbnRpZmllciBjb25zdCk6Cisg
ICAgICAgIChKU0M6OkpTU3RyaW5nOjp0b0F0b21TdHJpbmcgY29uc3QpOgorICAgICAgICAoSlND
OjpKU1N0cmluZzo6dG9FeGlzdGluZ0F0b21TdHJpbmcgY29uc3QpOgorICAgICAgICAoSlNDOjpK
U1N0cmluZzo6dmFsdWUgY29uc3QpOgorICAgICAgICAoSlNDOjpKU1N0cmluZzo6dHJ5R2V0VmFs
dWUgY29uc3QpOgorICAgICAgICAoSlNDOjpKU1N0cmluZzo6Z2V0SW5kZXgpOgorICAgICAgICAo
SlNDOjpqc1N0cmluZyk6CisgICAgICAgIChKU0M6OmpzU3Vic3RyaW5nKToKKyAgICAgICAgKEpT
Qzo6anNPd25lZFN0cmluZyk6CisgICAgICAgIChKU0M6OmpzU3RyaW5nV2l0aENhY2hlKToKKyAg
ICAgICAgKEpTQzo6SlNSb3BlU3RyaW5nOjp1bnNhZmVWaWV3IGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6SlNSb3BlU3RyaW5nOjp2aWV3V2l0aFVuZGVybHlpbmdTdHJpbmcgY29uc3QpOgorICAgICAg
ICAoSlNDOjpKU1N0cmluZzo6dW5zYWZlVmlldyBjb25zdCk6CisgICAgICAgICogcnVudGltZS9K
U1N0cmluZ0lubGluZXMuaDoKKyAgICAgICAgKEpTQzo6anNNYWtlTm9udHJpdmlhbFN0cmluZyk6
CisgICAgICAgIChKU0M6OnJlcGVhdENoYXJhY3Rlcik6CisgICAgICAgICogcnVudGltZS9KU1N0
cmluZ0pvaW5lci5jcHA6CisgICAgICAgIChKU0M6OkpTU3RyaW5nSm9pbmVyOjpqb2luKToKKyAg
ICAgICAgKiBydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpK
U1N5bWJvbFRhYmxlT2JqZWN0OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMpOgorICAgICAg
ICAqIHJ1bnRpbWUvSlNUZW1wbGF0ZU9iamVjdERlc2NyaXB0b3IuY3BwOgorICAgICAgICAoSlND
OjpKU1RlbXBsYXRlT2JqZWN0RGVzY3JpcHRvcjo6Y3JlYXRlVGVtcGxhdGVPYmplY3QpOgorICAg
ICAgICAqIHJ1bnRpbWUvSlNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5jcHA6CisgICAgICAgIChK
U0M6OnR5cGVkQXJyYXlWaWV3UHJvdG9HZXR0ZXJGdW5jVG9TdHJpbmdUYWcpOgorICAgICAgICAq
IHJ1bnRpbWUvTGF6eUNsYXNzU3RydWN0dXJlLmNwcDoKKyAgICAgICAgKEpTQzo6TGF6eUNsYXNz
U3RydWN0dXJlOjpJbml0aWFsaXplcjo6c2V0Q29uc3RydWN0b3IpOgorICAgICAgICAqIHJ1bnRp
bWUvTGF6eVByb3BlcnR5Lmg6CisgICAgICAgIChKU0M6OkxhenlQcm9wZXJ0eTo6SW5pdGlhbGl6
ZXI6OkluaXRpYWxpemVyKToKKyAgICAgICAgKiBydW50aW1lL0xpdGVyYWxQYXJzZXIuY3BwOgor
ICAgICAgICAoSlNDOjpMaXRlcmFsUGFyc2VyPENoYXJUeXBlPjo6dHJ5SlNPTlBQYXJzZSk6Cisg
ICAgICAgIChKU0M6OkxpdGVyYWxQYXJzZXI8Q2hhclR5cGU+OjptYWtlSWRlbnRpZmllcik6Cisg
ICAgICAgIChKU0M6OkxpdGVyYWxQYXJzZXI8Q2hhclR5cGU+OjpwYXJzZSk6CisgICAgICAgICog
cnVudGltZS9Mb29rdXAuaDoKKyAgICAgICAgKEpTQzo6cmVpZnlTdGF0aWNQcm9wZXJ0aWVzKToK
KyAgICAgICAgKiBydW50aW1lL01hcEl0ZXJhdG9yUHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpT
Qzo6TWFwSXRlcmF0b3JQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKiBydW50
aW1lL01hcFByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6Ok1hcFByb3RvdHlwZTo6ZmluaXNo
Q3JlYXRpb24pOgorICAgICAgICAqIHJ1bnRpbWUvTWF0aE9iamVjdC5jcHA6CisgICAgICAgIChK
U0M6Ok1hdGhPYmplY3Q6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKiBydW50aW1lL051bWJl
ckNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6TnVtYmVyQ29uc3RydWN0b3I6OmZpbmlz
aENyZWF0aW9uKToKKyAgICAgICAgKiBydW50aW1lL051bWJlclByb3RvdHlwZS5jcHA6CisgICAg
ICAgIChKU0M6Om51bWJlclByb3RvRnVuY1RvRXhwb25lbnRpYWwpOgorICAgICAgICAoSlNDOjpu
dW1iZXJQcm90b0Z1bmNUb0ZpeGVkKToKKyAgICAgICAgKEpTQzo6bnVtYmVyUHJvdG9GdW5jVG9Q
cmVjaXNpb24pOgorICAgICAgICAoSlNDOjppbnQzMlRvU3RyaW5nSW50ZXJuYWwpOgorICAgICAg
ICAoSlNDOjpudW1iZXJUb1N0cmluZ0ludGVybmFsKToKKyAgICAgICAgKEpTQzo6aW50NTJUb1N0
cmluZyk6CisgICAgICAgICogcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAg
IChKU0M6Om9iamVjdENvbnN0cnVjdG9yR2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyk6CisgICAg
ICAgIChKU0M6Om9iamVjdENvbnN0cnVjdG9yQXNzaWduKToKKyAgICAgICAgKEpTQzo6b2JqZWN0
Q29uc3RydWN0b3JWYWx1ZXMpOgorICAgICAgICAoSlNDOjpkZWZpbmVQcm9wZXJ0aWVzKToKKyAg
ICAgICAgKEpTQzo6c2V0SW50ZWdyaXR5TGV2ZWwpOgorICAgICAgICAoSlNDOjp0ZXN0SW50ZWdy
aXR5TGV2ZWwpOgorICAgICAgICAoSlNDOjpvd25Qcm9wZXJ0eUtleXMpOgorICAgICAgICAqIHJ1
bnRpbWUvT2JqZWN0UHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6b2JqZWN0UHJvdG9GdW5j
VG9TdHJpbmcpOgorICAgICAgICAqIHJ1bnRpbWUvT3BlcmF0aW9ucy5oOgorICAgICAgICAoSlND
Ojpqc1N0cmluZyk6CisgICAgICAgIChKU0M6OmpzU3RyaW5nRnJvbVJlZ2lzdGVyQXJyYXkpOgor
ICAgICAgICAoSlNDOjpqc1N0cmluZ0Zyb21Bcmd1bWVudHMpOgorICAgICAgICAqIHJ1bnRpbWUv
UHJvZ3JhbUV4ZWN1dGFibGUuY3BwOgorICAgICAgICAoSlNDOjpQcm9ncmFtRXhlY3V0YWJsZTo6
aW5pdGlhbGl6ZUdsb2JhbFByb3BlcnRpZXMpOgorICAgICAgICAqIHJ1bnRpbWUvUHJvbWlzZURl
ZmVycmVkVGltZXIuY3BwOgorICAgICAgICAoSlNDOjpQcm9taXNlRGVmZXJyZWRUaW1lcjo6UHJv
bWlzZURlZmVycmVkVGltZXIpOgorICAgICAgICAoSlNDOjpQcm9taXNlRGVmZXJyZWRUaW1lcjo6
aGFzUGVuZGluZ1Byb21pc2UpOgorICAgICAgICAoSlNDOjpQcm9taXNlRGVmZXJyZWRUaW1lcjo6
aGFzRGVwZW5kYW5jeUluUGVuZGluZ1Byb21pc2UpOgorICAgICAgICAoSlNDOjpQcm9taXNlRGVm
ZXJyZWRUaW1lcjo6Y2FuY2VsUGVuZGluZ1Byb21pc2UpOgorICAgICAgICAqIHJ1bnRpbWUvUHJv
cGVydHlOYW1lQXJyYXkuaDoKKyAgICAgICAgKEpTQzo6UHJvcGVydHlOYW1lQXJyYXk6OlByb3Bl
cnR5TmFtZUFycmF5KToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlOYW1lQXJyYXk6OnZtKToKKyAg
ICAgICAgKiBydW50aW1lL1Byb3BlcnR5U2xvdC5oOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eVNs
b3Q6OmdldFZhbHVlIGNvbnN0KToKKyAgICAgICAgKiBydW50aW1lL1Byb3h5T2JqZWN0LmNwcDoK
KyAgICAgICAgKEpTQzo6cGVyZm9ybVByb3h5R2V0KToKKyAgICAgICAgKEpTQzo6UHJveHlPYmpl
Y3Q6OnBlcmZvcm1JbnRlcm5hbE1ldGhvZEdldE93blByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6
UHJveHlPYmplY3Q6OnBlcmZvcm1IYXNQcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OlByb3h5T2Jq
ZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KToKKyAgICAgICAgKEpTQzo6UHJveHlPYmpl
Y3Q6OnBlcmZvcm1QdXQpOgorICAgICAgICAoSlNDOjpQcm94eU9iamVjdDo6cHV0QnlJbmRleENv
bW1vbik6CisgICAgICAgIChKU0M6OlByb3h5T2JqZWN0OjpwZXJmb3JtRGVsZXRlKToKKyAgICAg
ICAgKEpTQzo6UHJveHlPYmplY3Q6OmRlbGV0ZVByb3BlcnR5QnlJbmRleCk6CisgICAgICAgIChK
U0M6OlByb3h5T2JqZWN0OjpwZXJmb3JtRGVmaW5lT3duUHJvcGVydHkpOgorICAgICAgICAoSlND
OjpQcm94eU9iamVjdDo6cGVyZm9ybUdldE93blByb3BlcnR5TmFtZXMpOgorICAgICAgICAqIHJ1
bnRpbWUvUmVnRXhwR2xvYmFsRGF0YS5jcHA6CisgICAgICAgIChKU0M6OlJlZ0V4cEdsb2JhbERh
dGE6OmdldEJhY2tyZWYpOgorICAgICAgICAoSlNDOjpSZWdFeHBHbG9iYWxEYXRhOjpnZXRMYXN0
UGFyZW4pOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwTWF0Y2hlc0FycmF5LmNwcDoKKyAgICAg
ICAgKEpTQzo6Y3JlYXRlRW1wdHlSZWdFeHBNYXRjaGVzQXJyYXkpOgorICAgICAgICAqIHJ1bnRp
bWUvUmVnRXhwTWF0Y2hlc0FycmF5Lmg6CisgICAgICAgIChKU0M6OmNyZWF0ZVJlZ0V4cE1hdGNo
ZXNBcnJheSk6CisgICAgICAgICogcnVudGltZS9SZWdFeHBQcm90b3R5cGUuY3BwOgorICAgICAg
ICAoSlNDOjpyZWdFeHBQcm90b0dldHRlckZsYWdzKToKKyAgICAgICAgKEpTQzo6cmVnRXhwUHJv
dG9HZXR0ZXJTb3VyY2VJbnRlcm5hbCk6CisgICAgICAgIChKU0M6OnJlZ0V4cFByb3RvR2V0dGVy
U291cmNlKToKKyAgICAgICAgKiBydW50aW1lL1JlZ0V4cFN0cmluZ0l0ZXJhdG9yUHJvdG90eXBl
LmNwcDoKKyAgICAgICAgKEpTQzo6UmVnRXhwU3RyaW5nSXRlcmF0b3JQcm90b3R5cGU6OmZpbmlz
aENyZWF0aW9uKToKKyAgICAgICAgKiBydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3BwOgorICAg
ICAgICAoSlNDOjpTYW1wbGluZ1Byb2ZpbGVyOjpwcm9jZXNzVW52ZXJpZmllZFN0YWNrVHJhY2Vz
KToKKyAgICAgICAgKiBydW50aW1lL1NjcmlwdEV4ZWN1dGFibGUuY3BwOgorICAgICAgICAoSlND
OjpTY3JpcHRFeGVjdXRhYmxlOjppbnN0YWxsQ29kZSk6CisgICAgICAgIChKU0M6OlNjcmlwdEV4
ZWN1dGFibGU6Om5ld0NvZGVCbG9ja0Zvcik6CisgICAgICAgIChKU0M6OlNjcmlwdEV4ZWN1dGFi
bGU6Om5ld1JlcGxhY2VtZW50Q29kZUJsb2NrRm9yKToKKyAgICAgICAgKEpTQzo6c2V0dXBKSVQp
OgorICAgICAgICAqIHJ1bnRpbWUvU2V0SXRlcmF0b3JQcm90b3R5cGUuY3BwOgorICAgICAgICAo
SlNDOjpTZXRJdGVyYXRvclByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAqIHJ1
bnRpbWUvU2V0UHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6U2V0UHJvdG90eXBlOjpmaW5p
c2hDcmVhdGlvbik6CisgICAgICAgICogcnVudGltZS9TdGFja0ZyYW1lLmNwcDoKKyAgICAgICAg
KEpTQzo6U3RhY2tGcmFtZTo6Y29tcHV0ZUxpbmVBbmRDb2x1bW4gY29uc3QpOgorICAgICAgICAq
IHJ1bnRpbWUvU3RyaW5nQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpzdHJpbmdGcm9t
Q2hhckNvZGUpOgorICAgICAgICAoSlNDOjpzdHJpbmdGcm9tQ29kZVBvaW50KToKKyAgICAgICAg
KEpTQzo6c3RyaW5nQ29uc3RydWN0b3IpOgorICAgICAgICAoSlNDOjpjYWxsU3RyaW5nQ29uc3Ry
dWN0b3IpOgorICAgICAgICAqIHJ1bnRpbWUvU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUuY3BwOgor
ICAgICAgICAoSlNDOjpTdHJpbmdJdGVyYXRvclByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24pOgor
ICAgICAgICAqIHJ1bnRpbWUvU3RyaW5nT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6U3RyaW5n
T2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KToKKyAgICAgICAgKEpTQzo6U3RyaW5n
T2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKiBydW50aW1lL1N0cmluZ09i
amVjdC5oOgorICAgICAgICAoSlNDOjpTdHJpbmdPYmplY3Q6OmNyZWF0ZSk6CisgICAgICAgIChK
U0M6OmpzU3RyaW5nV2l0aFJldXNlKToKKyAgICAgICAgKEpTQzo6anNTdWJzdHJpbmcpOgorICAg
ICAgICAqIHJ1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6U3RyaW5n
UHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OlN0cmluZ1Byb3RvdHlw
ZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6anNTcGxpY2VTdWJzdHJpbmdzKToKKyAgICAgICAg
KEpTQzo6anNTcGxpY2VTdWJzdHJpbmdzV2l0aFNlcGFyYXRvcnMpOgorICAgICAgICAoSlNDOjpy
ZXBsYWNlVXNpbmdSZWdFeHBTZWFyY2gpOgorICAgICAgICAoSlNDOjpvcGVyYXRpb25TdHJpbmdQ
cm90b0Z1bmNSZXBsYWNlUmVnRXhwRW1wdHlTdHIpOgorICAgICAgICAoSlNDOjpvcGVyYXRpb25T
dHJpbmdQcm90b0Z1bmNSZXBsYWNlUmVnRXhwU3RyaW5nKToKKyAgICAgICAgKEpTQzo6cmVwbGFj
ZVVzaW5nU3RyaW5nU2VhcmNoKToKKyAgICAgICAgKEpTQzo6b3BlcmF0aW9uU3RyaW5nUHJvdG9G
dW5jUmVwbGFjZUdlbmVyaWMpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNDaGFyQXQp
OgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNTcGxpdEZhc3QpOgorICAgICAgICAoSlND
OjpzdHJpbmdQcm90b0Z1bmNTdWJzdHIpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNU
b0xvd2VyQ2FzZSk6CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY1RvVXBwZXJDYXNlKToK
KyAgICAgICAgKEpTQzo6dG9Mb2NhbGVDYXNlKToKKyAgICAgICAgKEpTQzo6dHJpbVN0cmluZyk6
CisgICAgICAgIChKU0M6Om5vcm1hbGl6ZSk6CisgICAgICAgICogcnVudGltZS9TdHJpbmdQcm90
b3R5cGVJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OnN0cmluZ1NsaWNlKToKKyAgICAgICAgKiBy
dW50aW1lL1N0cmluZ1JlY3Vyc2lvbkNoZWNrZXIuY3BwOgorICAgICAgICAoSlNDOjpTdHJpbmdS
ZWN1cnNpb25DaGVja2VyOjplbXB0eVN0cmluZyk6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1
cmUuY3BwOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmRpZFRyYW5zaXRpb25Gcm9tVGhpc1N0
cnVjdHVyZSBjb25zdCk6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmg6Cisg
ICAgICAgIChKU0M6OlN0cnVjdHVyZTo6ZGlkUmVwbGFjZVByb3BlcnR5KToKKyAgICAgICAgKEpT
Qzo6U3RydWN0dXJlOjpzaG91bGRDb252ZXJ0VG9Qb2x5UHJvdG8pOgorICAgICAgICAqIHJ1bnRp
bWUvU3ltYm9sQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpzeW1ib2xDb25zdHJ1Y3Rv
cktleUZvcik6CisgICAgICAgICogcnVudGltZS9TeW1ib2xQcm90b3R5cGUuY3BwOgorICAgICAg
ICAoSlNDOjpTeW1ib2xQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6
c3ltYm9sUHJvdG9HZXR0ZXJEZXNjcmlwdGlvbik6CisgICAgICAgIChKU0M6OnN5bWJvbFByb3Rv
RnVuY1RvU3RyaW5nKToKKyAgICAgICAgKiBydW50aW1lL1N5bWJvbFRhYmxlLmNwcDoKKyAgICAg
ICAgKEpTQzo6U3ltYm9sVGFibGU6OnNldFJhcmVEYXRhQ29kZUJsb2NrKToKKyAgICAgICAgKiBy
dW50aW1lL1Rlc3RSdW5uZXJVdGlscy5jcHA6CisgICAgICAgIChKU0M6OmdldEV4ZWN1dGFibGVG
b3JGdW5jdGlvbik6CisgICAgICAgICogcnVudGltZS9WTS5jcHA6CisgICAgICAgIChKU0M6OlZN
OjpWTSk6CisgICAgICAgIChKU0M6OlZNOjpnZXRIb3N0RnVuY3Rpb24pOgorICAgICAgICAoSlND
OjpWTTo6Z2V0Q1RJSW50ZXJuYWxGdW5jdGlvblRyYW1wb2xpbmVGb3IpOgorICAgICAgICAoSlND
OjpWTTo6c2hyaW5rRm9vdHByaW50V2hlbklkbGUpOgorICAgICAgICAoSlNDOjpsb2dTYW5pdGl6
ZVN0YWNrKToKKyAgICAgICAgKEpTQzo6c2FuaXRpemVTdGFja0ZvclZNKToKKyAgICAgICAgKEpT
Qzo6Vk06OmVtcHR5UHJvcGVydHlOYW1lRW51bWVyYXRvclNsb3cpOgorICAgICAgICAqIHJ1bnRp
bWUvVk0uaDoKKyAgICAgICAgKEpTQzo6Vk06OmdldENUSVN0dWIpOgorICAgICAgICAoSlNDOjpX
ZWFrU2V0OjpoZWFwIGNvbnN0KToKKyAgICAgICAgKiBydW50aW1lL1ZNVHJhcHMuY3BwOgorICAg
ICAgICAqIHJ1bnRpbWUvV2Vha01hcFByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OldlYWtN
YXBQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKiBydW50aW1lL1dlYWtPYmpl
Y3RSZWZQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpXZWFrT2JqZWN0UmVmUHJvdG90eXBl
OjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgICogcnVudGltZS9XZWFrU2V0UHJvdG90eXBlLmNw
cDoKKyAgICAgICAgKEpTQzo6V2Vha1NldFByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24pOgorICAg
ICAgICAqIHRvb2xzL0hlYXBWZXJpZmllci5jcHA6CisgICAgICAgIChKU0M6OkhlYXBWZXJpZmll
cjo6cHJpbnRWZXJpZmljYXRpb25IZWFkZXIpOgorICAgICAgICAoSlNDOjpIZWFwVmVyaWZpZXI6
OnZlcmlmeUNlbGxMaXN0KToKKyAgICAgICAgKEpTQzo6SGVhcFZlcmlmaWVyOjp2YWxpZGF0ZUpT
Q2VsbCk6CisgICAgICAgIChKU0M6OkhlYXBWZXJpZmllcjo6cmVwb3J0Q2VsbCk6CisgICAgICAg
ICogdG9vbHMvSlNEb2xsYXJWTS5jcHA6CisgICAgICAgIChKU0M6OkpTRG9sbGFyVk1DYWxsRnJh
bWU6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6SlNEb2xsYXJWTUNhbGxGcmFtZTo6
YWRkUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpDdXN0b21HZXR0ZXI6OmdldE93blByb3BlcnR5
U2xvdCk6CisgICAgICAgIChKU0M6OkN1c3RvbUdldHRlcjo6Y3VzdG9tR2V0dGVyKToKKyAgICAg
ICAgKEpTQzo6Q3VzdG9tR2V0dGVyOjpjdXN0b21HZXR0ZXJBY2Vzc29yKToKKyAgICAgICAgKEpT
Qzo6RE9NSklUR2V0dGVyOjpET01KSVRBdHRyaWJ1dGU6OnNsb3dDYWxsKToKKyAgICAgICAgKEpT
Qzo6RE9NSklUR2V0dGVyOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OkRPTUpJVEdl
dHRlckNvbXBsZXg6OkRPTUpJVEF0dHJpYnV0ZTo6c2xvd0NhbGwpOgorICAgICAgICAoSlNDOjpE
T01KSVRHZXR0ZXJDb21wbGV4OjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OkRPTUpJ
VEZ1bmN0aW9uT2JqZWN0OjpmdW5jdGlvbldpdGhvdXRUeXBlQ2hlY2spOgorICAgICAgICAoSlND
OjpET01KSVRGdW5jdGlvbk9iamVjdDo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpE
T01KSVRDaGVja1N1YkNsYXNzT2JqZWN0OjpmdW5jdGlvbldpdGhvdXRUeXBlQ2hlY2spOgorICAg
ICAgICAoSlNDOjpET01KSVRDaGVja1N1YkNsYXNzT2JqZWN0OjpmaW5pc2hDcmVhdGlvbik6Cisg
ICAgICAgIChKU0M6OkRPTUpJVEdldHRlckJhc2VKU09iamVjdDo6RE9NSklUQXR0cmlidXRlOjpz
bG93Q2FsbCk6CisgICAgICAgIChKU0M6OkRPTUpJVEdldHRlckJhc2VKU09iamVjdDo6ZmluaXNo
Q3JlYXRpb24pOgorICAgICAgICAoSlNDOjpjdXN0b21TZXRBY2Nlc3Nvcik6CisgICAgICAgIChK
U0M6OmN1c3RvbVNldFZhbHVlKToKKyAgICAgICAgKEpTQzo6SlNUZXN0Q3VzdG9tR2V0dGVyU2V0
dGVyOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6Oldhc21TdHJlYW1pbmdQYXJzZXI6
OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6Z2V0RXhlY3V0YWJsZUZvckZ1bmN0aW9u
KToKKyAgICAgICAgKEpTQzo6ZnVuY3Rpb25Db2RlQmxvY2tGb3IpOgorICAgICAgICAoSlNDOjpm
dW5jdGlvbkluZGV4aW5nTW9kZSk6CisgICAgICAgIChKU0M6OmZ1bmN0aW9uVmFsdWUpOgorICAg
ICAgICAoSlNDOjpmdW5jdGlvbkNyZWF0ZUJ1aWx0aW4pOgorICAgICAgICAoSlNDOjpmdW5jdGlv
bkdldFByaXZhdGVQcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkpTRG9sbGFyVk06OmZpbmlzaENy
ZWF0aW9uKToKKyAgICAgICAgKEpTQzo6SlNEb2xsYXJWTTo6YWRkRnVuY3Rpb24pOgorICAgICAg
ICAoSlNDOjpKU0RvbGxhclZNOjphZGRDb25zdHJ1Y3RpYmxlRnVuY3Rpb24pOgorICAgICAgICAq
IHRvb2xzL1ZNSW5zcGVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Vk1JbnNwZWN0b3I6OmR1bXBS
ZWdpc3RlcnMpOgorICAgICAgICAoSlNDOjpWTUluc3BlY3Rvcjo6ZHVtcENlbGxNZW1vcnlUb1N0
cmVhbSk6CisgICAgICAgICogd2FzbS9XYXNtSW5zdGFuY2UuY3BwOgorICAgICAgICAoSlNDOjpX
YXNtOjpJbnN0YW5jZTo6c2V0R2xvYmFsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6SW5zdGFuY2U6
OnNldEZ1bmN0aW9uV3JhcHBlcik6CisgICAgICAgIChKU0M6Oldhc206OnNldFdhc21UYWJsZUVs
ZW1lbnQpOgorICAgICAgICAoSlNDOjpXYXNtOjpkb1dhc21SZWZGdW5jKToKKyAgICAgICAgKiB3
YXNtL1dhc21UYWJsZS5jcHA6CisgICAgICAgIChKU0M6Oldhc206OlRhYmxlOjpzZXQpOgorICAg
ICAgICAoSlNDOjpXYXNtOjpGdW5jUmVmVGFibGU6OnNldEZ1bmN0aW9uKToKKyAgICAgICAgKiB3
YXNtL2pzL0pTV2ViQXNzZW1ibHkuY3BwOgorICAgICAgICAoSlNDOjpyZXNvbHZlKToKKyAgICAg
ICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5jcHA6CisgICAgICAgIChKU0M6OkpT
V2ViQXNzZW1ibHlJbnN0YW5jZTo6Y3JlYXRlKToKKyAgICAgICAgKiB3YXNtL2pzL1dhc21Ub0pT
LmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6aGFuZGxlQmFkSTY0VXNlKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6d2FzbVRvSlMpOgorICAgICAgICAoSlNDOjpXYXNtOjp3YXNtVG9KU0V4Y2VwdGlv
bik6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcDoKKyAgICAgICAg
KEpTQzo6V2ViQXNzZW1ibHlGdW5jdGlvbjo6anNDYWxsRW50cnlwb2ludFNsb3cpOgorICAgICAg
ICAqIHdhc20vanMvV2ViQXNzZW1ibHlNZW1vcnlDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChK
U0M6OmNvbnN0cnVjdEpTV2ViQXNzZW1ibHlNZW1vcnkpOgorICAgICAgICAqIHdhc20vanMvV2Vi
QXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OndlYkFzc2VtYmx5
TW9kdWxlSW1wb3J0cyk6CisgICAgICAgIChKU0M6OndlYkFzc2VtYmx5TW9kdWxlRXhwb3J0cyk6
CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHA6CisgICAgICAg
IChKU0M6OldlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAg
IChKU0M6OldlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpsaW5rKToKKyAgICAgICAgKiB3YXNtL2pz
L1dlYkFzc2VtYmx5VGFibGVDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OmNvbnN0cnVj
dEpTV2ViQXNzZW1ibHlUYWJsZSk6CisKIDIwMTktMDgtMjYgIERldmluIFJvdXNzbyAgPGRyb3Vz
c29AYXBwbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IHVzZSBtb3JlIEMrKyBrZXl3
b3JkcyBmb3IgZGVmaW5pbmcgYWdlbnRzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvS2V5
d29yZExvb2t1cEdlbmVyYXRvci5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvS2V5d29yZExvb2t1cEdlbmVyYXRvci5weQkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0tleXdvcmRMb29rdXBHZW5lcmF0b3IucHkJKHdvcmtpbmcgY29weSkK
QEAgLTEsNCArMSw0IEBACi0jIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoQykgMjAxMS0yMDE5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICMgQ29weXJpZ2h0IChDKSAyMDEyIFNvbnkgTmV0d29yayBFbnRlcnRh
aW5tZW50LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogIwogIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTE0NCw3ICsx
NDQsNyBAQCBjbGFzcyBUcmllOgogICAgICAgICAgICAgcHJpbnQoc3RyICsgImlmICghaXNJZGVu
dFBhcnRJbmNsdWRpbmdFc2NhcGUoY29kZSArICVkLCBtX2NvZGVFbmQpKSB7IiAlIChsZW4oc2Vs
Zi5mdWxsUHJlZml4KSkpCiAgICAgICAgICAgICBwcmludChzdHIgKyAiICAgIGludGVybmFsU2hp
ZnQ8JWQ+KCk7IiAlIGxlbihzZWxmLmZ1bGxQcmVmaXgpKQogICAgICAgICAgICAgcHJpbnQoc3Ry
ICsgIiAgICBpZiAoc2hvdWxkQ3JlYXRlSWRlbnRpZmllcikiKQotICAgICAgICAgICAgcHJpbnQo
c3RyICsgKCIgICAgICAgIGRhdGEtPmlkZW50ID0gJm1fdm0tPnByb3BlcnR5TmFtZXMtPiVzS2V5
d29yZDsiICUgc2VsZi5mdWxsUHJlZml4KSkKKyAgICAgICAgICAgIHByaW50KHN0ciArICgiICAg
ICAgICBkYXRhLT5pZGVudCA9ICZtX3ZtLnByb3BlcnR5TmFtZXMtPiVzS2V5d29yZDsiICUgc2Vs
Zi5mdWxsUHJlZml4KSkKICAgICAgICAgICAgIHByaW50KHN0ciArICIgICAgcmV0dXJuICIgKyBz
ZWxmLnZhbHVlICsgIjsiKQogICAgICAgICAgICAgcHJpbnQoc3RyICsgIn0iKQogICAgICAgICBy
b290SW5kZXggPSBsZW4oc2VsZi5mdWxsUHJlZml4KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2R5bmJlbmNoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZHlu
YmVuY2guY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZHlu
YmVuY2guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTkwLDIyICs5MCwyMiBAQCBpbnQgbWFpbihpbnQgYXJn
YywgY2hhcioqIGFyZ3YpCiAgICAgV1RGOjppbml0aWFsaXplTWFpblRocmVhZCgpOwogICAgIEpT
Qzo6aW5pdGlhbGl6ZVRocmVhZGluZygpOwogCi0gICAgVk0qIHZtID0gJlZNOjpjcmVhdGUoTGFy
Z2VIZWFwKS5sZWFrUmVmKCk7CisgICAgVk0mIHZtID0gVk06OmNyZWF0ZShMYXJnZUhlYXApLmxl
YWtSZWYoKTsKICAgICB7CiAgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrZXIodm0pOwogCiAgICAg
ICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPQotICAgICAgICAgICAgSlNHbG9iYWxP
YmplY3Q6OmNyZWF0ZSgqdm0sIEpTR2xvYmFsT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUoKnZtLCBq
c051bGwoKSkpOworICAgICAgICAgICAgSlNHbG9iYWxPYmplY3Q6OmNyZWF0ZSh2bSwgSlNHbG9i
YWxPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZSh2bSwganNOdWxsKCkpKTsKICAgICAgICAgRXhlY1N0
YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CiAKLSAgICAgICAgSWRlbnRp
ZmllciBpZGVudEYgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJmIik7Ci0gICAgICAg
IElkZW50aWZpZXIgaWRlbnRHID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCAiZyIpOwor
ICAgICAgICBJZGVudGlmaWVyIGlkZW50RiA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJm
Iik7CisgICAgICAgIElkZW50aWZpZXIgaWRlbnRHID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2
bSwgImciKTsKIAogICAgICAgICBTdHJ1Y3R1cmUqIG9iamVjdFN0cnVjdHVyZSA9Ci0gICAgICAg
ICAgICBKU0ZpbmFsT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUoKnZtLCBnbG9iYWxPYmplY3QsIGds
b2JhbE9iamVjdC0+b2JqZWN0UHJvdG90eXBlKCksIDIpOworICAgICAgICAgICAgSlNGaW5hbE9i
amVjdDo6Y3JlYXRlU3RydWN0dXJlKHZtLCBnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+b2Jq
ZWN0UHJvdG90eXBlKCksIDIpOwogCiAgICAgICAgIC8vIE5vbi1zdHJpY3QgZHluYW1pYyBnZXQg
YnkgaWQ6Ci0gICAgICAgIEpTVmFsdWUgb2JqZWN0ID0gSlNGaW5hbE9iamVjdDo6Y3JlYXRlKCp2
bSwgb2JqZWN0U3RydWN0dXJlKTsKKyAgICAgICAgSlNWYWx1ZSBvYmplY3QgPSBKU0ZpbmFsT2Jq
ZWN0OjpjcmVhdGUodm0sIG9iamVjdFN0cnVjdHVyZSk7CiAgICAgICAgIHsKICAgICAgICAgICAg
IFB1dFByb3BlcnR5U2xvdCBzbG90KG9iamVjdCwgZmFsc2UsIFB1dFByb3BlcnR5U2xvdDo6UHV0
QnlJZCk7CiAgICAgICAgICAgICBvYmplY3QucHV0SW5saW5lKGV4ZWMsIGlkZW50RiwganNOdW1i
ZXIoNDIpLCBzbG90KTsKQEAgLTEyNyw3ICsxMjcsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hh
cioqIGFyZ3YpCiAgICAgICAgICAgICB9KTsKIAogICAgICAgICAvLyBOb24tc3RyaWN0IGR5bmFt
aWMgcHV0IGJ5IGlkIHJlcGxhY2U6Ci0gICAgICAgIG9iamVjdCA9IEpTRmluYWxPYmplY3Q6OmNy
ZWF0ZSgqdm0sIG9iamVjdFN0cnVjdHVyZSk7CisgICAgICAgIG9iamVjdCA9IEpTRmluYWxPYmpl
Y3Q6OmNyZWF0ZSh2bSwgb2JqZWN0U3RydWN0dXJlKTsKICAgICAgICAgewogICAgICAgICAgICAg
UHV0UHJvcGVydHlTbG90IHNsb3Qob2JqZWN0LCBmYWxzZSwgUHV0UHJvcGVydHlTbG90OjpQdXRC
eUlkKTsKICAgICAgICAgICAgIG9iamVjdC5wdXRJbmxpbmUoZXhlYywgaWRlbnRGLCBqc051bWJl
cig0MiksIHNsb3QpOwpAQCAtMTU4LDcgKzE1OCw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFy
KiogYXJndikKICAgICAgICAgICAgIDEwMDAwMDAsCiAgICAgICAgICAgICBbJl0gKHVuc2lnbmVk
IGl0ZXJhdGlvbkNvdW50KSB7CiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gaXRl
cmF0aW9uQ291bnQ7IGktLTspIHsKLSAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZSBvYmplY3Qg
PSBKU0ZpbmFsT2JqZWN0OjpjcmVhdGUoKnZtLCBvYmplY3RTdHJ1Y3R1cmUpOworICAgICAgICAg
ICAgICAgICAgICBKU1ZhbHVlIG9iamVjdCA9IEpTRmluYWxPYmplY3Q6OmNyZWF0ZSh2bSwgb2Jq
ZWN0U3RydWN0dXJlKTsKICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAg
ICAgICAgUHV0UHJvcGVydHlTbG90IHNsb3Qob2JqZWN0LCBmYWxzZSwgUHV0UHJvcGVydHlTbG90
OjpQdXRCeUlkKTsKICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5wdXRJbmxpbmUoZXhl
YywgaWRlbnRGLCBqc051bWJlcihpKSwgc2xvdCk7CkBAIC0xNzEsNyArMTcxLDcgQEAgaW50IG1h
aW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQogICAgICAgICAgICAgfSk7CiAKICAgICAgICAgLy8g
Tm9uLXN0cmljdCBkeW5hbWljIGdldCBieSBpZCB3aXRoIGR5bmFtaWMgc3RvcmUgY29udGV4dDoK
LSAgICAgICAgb2JqZWN0ID0gSlNGaW5hbE9iamVjdDo6Y3JlYXRlKCp2bSwgb2JqZWN0U3RydWN0
dXJlKTsKKyAgICAgICAgb2JqZWN0ID0gSlNGaW5hbE9iamVjdDo6Y3JlYXRlKHZtLCBvYmplY3RT
dHJ1Y3R1cmUpOwogICAgICAgICB7CiAgICAgICAgICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChv
YmplY3QsIGZhbHNlKTsKICAgICAgICAgICAgIG9iamVjdC5wdXRJbmxpbmUoZXhlYywgaWRlbnRG
LCBqc051bWJlcig0MiksIHNsb3QpOwpAQCAtMTkzLDcgKzE5Myw3IEBAIGludCBtYWluKGludCBh
cmdjLCBjaGFyKiogYXJndikKICAgICAgICAgICAgIH0pOwogCiAgICAgICAgIC8vIE5vbi1zdHJp
Y3QgZHluYW1pYyBwdXQgYnkgaWQgcmVwbGFjZSB3aXRoIGR5bmFtaWMgc3RvcmUgY29udGV4dDoK
LSAgICAgICAgb2JqZWN0ID0gSlNGaW5hbE9iamVjdDo6Y3JlYXRlKCp2bSwgb2JqZWN0U3RydWN0
dXJlKTsKKyAgICAgICAgb2JqZWN0ID0gSlNGaW5hbE9iamVjdDo6Y3JlYXRlKHZtLCBvYmplY3RT
dHJ1Y3R1cmUpOwogICAgICAgICB7CiAgICAgICAgICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChv
YmplY3QsIGZhbHNlKTsKICAgICAgICAgICAgIG9iamVjdC5wdXRJbmxpbmUoZXhlYywgaWRlbnRG
LCBqc051bWJlcig0MiksIHNsb3QpOwpAQCAtMjI0LDcgKzIyNCw3IEBAIGludCBtYWluKGludCBh
cmdjLCBjaGFyKiogYXJndikKICAgICAgICAgICAgIDEwMDAwMDAsCiAgICAgICAgICAgICBbJl0g
KHVuc2lnbmVkIGl0ZXJhdGlvbkNvdW50KSB7CiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gaXRlcmF0aW9uQ291bnQ7IGktLTspIHsKLSAgICAgICAgICAgICAgICAgICAgSlNWYWx1
ZSBvYmplY3QgPSBKU0ZpbmFsT2JqZWN0OjpjcmVhdGUoKnZtLCBvYmplY3RTdHJ1Y3R1cmUpOwor
ICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlIG9iamVjdCA9IEpTRmluYWxPYmplY3Q6OmNyZWF0
ZSh2bSwgb2JqZWN0U3RydWN0dXJlKTsKICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgICAgICAgICAgUHV0UHJvcGVydHlTbG90IHNsb3Qob2JqZWN0LCBmYWxzZSk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBvYmplY3QucHV0SW5saW5lKGV4ZWMsIGlkZW50RiwganNOdW1i
ZXIoaSksIHNsb3QpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAJKHJldmlzaW9uIDI0OTEyOCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NTEs
MTIgKzU1MSwxMiBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIGFkZEZ1bmN0aW9uKHZtLCAiY2xlYXJT
YW1wbGluZ0ZsYWdzIiwgZnVuY3Rpb25DbGVhclNhbXBsaW5nRmxhZ3MsIDEpOwogI2VuZGlmCiAK
LSAgICAgICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rpb24odm0sIHRoaXMsIElkZW50aWZpZXI6OmZy
b21TdHJpbmcoJnZtLCAiT1NSRXhpdCIpLCAwLCBmdW5jdGlvblVuZGVmaW5lZDEsIE9TUkV4aXRJ
bnRyaW5zaWMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVu
dW0pKTsKLSAgICAgICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rpb24odm0sIHRoaXMsIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcoJnZtLCAiaXNGaW5hbFRpZXIiKSwgMCwgZnVuY3Rpb25GYWxzZSwgSXNG
aW5hbFRpZXJJbnRyaW5zaWMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0
ZTo6RG9udEVudW0pKTsKLSAgICAgICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rpb24odm0sIHRoaXMs
IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAicHJlZGljdEludDMyIiksIDAsIGZ1bmN0aW9u
VW5kZWZpbmVkMiwgU2V0SW50MzJIZWFwUHJlZGljdGlvbkludHJpbnNpYywgc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOwotICAgICAgICBwdXREaXJl
Y3ROYXRpdmVGdW5jdGlvbih2bSwgdGhpcywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJp
c0ludDMyIiksIDAsIGZ1bmN0aW9uSXNJbnQzMiwgQ2hlY2tJbnQzMkludHJpbnNpYywgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOwotICAgICAgICBw
dXREaXJlY3ROYXRpdmVGdW5jdGlvbih2bSwgdGhpcywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygm
dm0sICJpc1B1cmVOYU4iKSwgMCwgZnVuY3Rpb25Jc1B1cmVOYU4sIENoZWNrSW50MzJJbnRyaW5z
aWMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsK
LSAgICAgICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rpb24odm0sIHRoaXMsIElkZW50aWZpZXI6OmZy
b21TdHJpbmcoJnZtLCAiZmlhdEludDUyIiksIDAsIGZ1bmN0aW9uSWRlbnRpdHksIEZpYXRJbnQ1
MkludHJpbnNpYywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250
RW51bSkpOworICAgICAgICBwdXREaXJlY3ROYXRpdmVGdW5jdGlvbih2bSwgdGhpcywgSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZyh2bSwgIk9TUkV4aXQiKSwgMCwgZnVuY3Rpb25VbmRlZmluZWQxLCBP
U1JFeGl0SW50cmluc2ljLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6
OkRvbnRFbnVtKSk7CisgICAgICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9uKHZtLCB0aGlzLCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiaXNGaW5hbFRpZXIiKSwgMCwgZnVuY3Rpb25GYWxz
ZSwgSXNGaW5hbFRpZXJJbnRyaW5zaWMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0
dHJpYnV0ZTo6RG9udEVudW0pKTsKKyAgICAgICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rpb24odm0s
IHRoaXMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJwcmVkaWN0SW50MzIiKSwgMCwgZnVu
Y3Rpb25VbmRlZmluZWQyLCBTZXRJbnQzMkhlYXBQcmVkaWN0aW9uSW50cmluc2ljLCBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7CisgICAgICAgIHB1
dERpcmVjdE5hdGl2ZUZ1bmN0aW9uKHZtLCB0aGlzLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZt
LCAiaXNJbnQzMiIpLCAwLCBmdW5jdGlvbklzSW50MzIsIENoZWNrSW50MzJJbnRyaW5zaWMsIHN0
YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKKyAgICAg
ICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rpb24odm0sIHRoaXMsIElkZW50aWZpZXI6OmZyb21TdHJp
bmcodm0sICJpc1B1cmVOYU4iKSwgMCwgZnVuY3Rpb25Jc1B1cmVOYU4sIENoZWNrSW50MzJJbnRy
aW5zaWMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0p
KTsKKyAgICAgICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rpb24odm0sIHRoaXMsIElkZW50aWZpZXI6
OmZyb21TdHJpbmcodm0sICJmaWF0SW50NTIiKSwgMCwgZnVuY3Rpb25JZGVudGl0eSwgRmlhdElu
dDUySW50cmluc2ljLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRv
bnRFbnVtKSk7CiAgICAgICAgIAogICAgICAgICBhZGRGdW5jdGlvbih2bSwgImVmZmVjdGZ1bDQy
IiwgZnVuY3Rpb25FZmZlY3RmdWw0MiwgMCk7CiAgICAgICAgIGFkZEZ1bmN0aW9uKHZtLCAibWFr
ZU1hc3F1ZXJhZGVyIiwgZnVuY3Rpb25NYWtlTWFzcXVlcmFkZXIsIDApOwpAQCAtNjAwLDI2ICs2
MDAsMjYgQEAgcHJvdGVjdGVkOgogICAgICAgICBpZiAoIWFyZ3VtZW50cy5pc0VtcHR5KCkpIHsK
ICAgICAgICAgICAgIEpTQXJyYXkqIGFycmF5ID0gY29uc3RydWN0RW1wdHlBcnJheShnbG9iYWxF
eGVjKCksIDApOwogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhcmd1bWVudHMu
c2l6ZSgpOyArK2kpCi0gICAgICAgICAgICAgICAgYXJyYXktPnB1dERpcmVjdEluZGV4KGdsb2Jh
bEV4ZWMoKSwgaSwganNTdHJpbmcoZ2xvYmFsRXhlYygpLCBhcmd1bWVudHNbaV0pKTsKLSAgICAg
ICAgICAgIHB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhnbG9iYWxFeGVjKCks
ICJhcmd1bWVudHMiKSwgYXJyYXkpOworICAgICAgICAgICAgICAgIGFycmF5LT5wdXREaXJlY3RJ
bmRleChnbG9iYWxFeGVjKCksIGksIGpzU3RyaW5nKHZtLCBhcmd1bWVudHNbaV0pKTsKKyAgICAg
ICAgICAgIHB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImFyZ3VtZW50
cyIpLCBhcnJheSk7CiAgICAgICAgIH0KIAotICAgICAgICBwdXREaXJlY3Qodm0sIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcoZ2xvYmFsRXhlYygpLCAiY29uc29sZSIpLCBqc1VuZGVmaW5lZCgpKTsK
KyAgICAgICAgcHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiY29uc29s
ZSIpLCBqc1VuZGVmaW5lZCgpKTsKICAgICAgICAgCiAgICAgICAgIFN0cnVjdHVyZSogcGxhaW5P
YmplY3RTdHJ1Y3R1cmUgPSBKU0ZpbmFsT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUodm0sIHRoaXMs
IG9iamVjdFByb3RvdHlwZSgpLCAwKTsKICAgICAgICAgCiAgICAgICAgIEpTT2JqZWN0KiBkb2xs
YXIgPSBKU0ZpbmFsT2JqZWN0OjpjcmVhdGUodm0sIHBsYWluT2JqZWN0U3RydWN0dXJlKTsKLSAg
ICAgICAgcHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGdsb2JhbEV4ZWMoKSwg
IiQiKSwgZG9sbGFyKTsKLSAgICAgICAgcHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKGdsb2JhbEV4ZWMoKSwgIiQyNjIiKSwgZG9sbGFyKTsKKyAgICAgICAgcHV0RGlyZWN0KHZt
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiJCIpLCBkb2xsYXIpOworICAgICAgICBwdXRE
aXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICIkMjYyIiksIGRvbGxhcik7CiAg
ICAgICAgIAogICAgICAgICBhZGRGdW5jdGlvbih2bSwgZG9sbGFyLCAiY3JlYXRlUmVhbG0iLCBm
dW5jdGlvbkRvbGxhckNyZWF0ZVJlYWxtLCAwKTsKICAgICAgICAgYWRkRnVuY3Rpb24odm0sIGRv
bGxhciwgImRldGFjaEFycmF5QnVmZmVyIiwgZnVuY3Rpb25Eb2xsYXJEZXRhY2hBcnJheUJ1ZmZl
ciwgMSk7CiAgICAgICAgIGFkZEZ1bmN0aW9uKHZtLCBkb2xsYXIsICJldmFsU2NyaXB0IiwgZnVu
Y3Rpb25Eb2xsYXJFdmFsU2NyaXB0LCAxKTsKICAgICAgICAgCi0gICAgICAgIGRvbGxhci0+cHV0
RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGdsb2JhbEV4ZWMoKSwgImdsb2JhbCIp
LCB0aGlzKTsKKyAgICAgICAgZG9sbGFyLT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21T
dHJpbmcodm0sICJnbG9iYWwiKSwgdGhpcyk7CiAgICAgICAgIAogICAgICAgICBKU09iamVjdCog
YWdlbnQgPSBKU0ZpbmFsT2JqZWN0OjpjcmVhdGUodm0sIHBsYWluT2JqZWN0U3RydWN0dXJlKTsK
LSAgICAgICAgZG9sbGFyLT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZ2xv
YmFsRXhlYygpLCAiYWdlbnQiKSwgYWdlbnQpOworICAgICAgICBkb2xsYXItPnB1dERpcmVjdCh2
bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImFnZW50IiksIGFnZW50KTsKICAgICAgICAg
CiAgICAgICAgIC8vIFRoZSB0ZXN0MjYyIElOVEVSUFJFVElORy5tZCBkb2N1bWVudCBzYXlzIHRo
YXQgc29tZSBvZiB0aGVzZSBmdW5jdGlvbnMgYXJlIGp1c3QgaW4gdGhlIG1haW4KICAgICAgICAg
Ly8gdGhyZWFkIGFuZCBzb21lIGFyZSBpbiB0aGUgb3RoZXIgdGhyZWFkcy4gV2UganVzdCBwdXQg
dGhlbSBpbiBhbGwgdGhyZWFkcy4KQEAgLTY0Niw3ICs2NDYsNyBAQCBwcm90ZWN0ZWQ6CiAgICAg
CiAgICAgdm9pZCBhZGRGdW5jdGlvbihWTSYgdm0sIEpTT2JqZWN0KiBvYmplY3QsIGNvbnN0IGNo
YXIqIG5hbWUsIE5hdGl2ZUZ1bmN0aW9uIGZ1bmN0aW9uLCB1bnNpZ25lZCBhcmd1bWVudHMpCiAg
ICAgewotICAgICAgICBJZGVudGlmaWVyIGlkZW50aWZpZXIgPSBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKCZ2bSwgbmFtZSk7CisgICAgICAgIElkZW50aWZpZXIgaWRlbnRpZmllciA9IElkZW50aWZp
ZXI6OmZyb21TdHJpbmcodm0sIG5hbWUpOwogICAgICAgICBvYmplY3QtPnB1dERpcmVjdCh2bSwg
aWRlbnRpZmllciwgSlNGdW5jdGlvbjo6Y3JlYXRlKHZtLCB0aGlzLCBhcmd1bWVudHMsIGlkZW50
aWZpZXIuc3RyaW5nKCksIGZ1bmN0aW9uKSk7CiAgICAgfQogCkBAIC04NDQsNyArODQ0LDcgQEAg
SlNJbnRlcm5hbFByb21pc2UqIEdsb2JhbE9iamVjdDo6bW9kdWxlTAogICAgIGlmICghZGlyZWN0
b3J5TmFtZSkKICAgICAgICAgcmV0dXJuIHJlamVjdChjcmVhdGVFcnJvcihleGVjLCBtYWtlU3Ry
aW5nKCJDb3VsZCBub3QgcmVzb2x2ZSB0aGUgcmVmZXJyZXIgbmFtZSAnIiwgU3RyaW5nKHJlZmVy
cmVyLmltcGwoKSksICInLiIpKSk7CiAKLSAgICBhdXRvIHJlc3VsdCA9IEpTQzo6aW1wb3J0TW9k
dWxlKGV4ZWMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCByZXNvbHZlUGF0aChkaXJlY3Rv
cnlOYW1lLnZhbHVlKCksIE1vZHVsZU5hbWUobW9kdWxlTmFtZSkpKSwgcGFyYW1ldGVycywganNV
bmRlZmluZWQoKSk7CisgICAgYXV0byByZXN1bHQgPSBKU0M6OmltcG9ydE1vZHVsZShleGVjLCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZXNvbHZlUGF0aChkaXJlY3RvcnlOYW1lLnZhbHVl
KCksIE1vZHVsZU5hbWUobW9kdWxlTmFtZSkpKSwgcGFyYW1ldGVycywganNVbmRlZmluZWQoKSk7
CiAgICAgaWYgKFVOTElLRUxZKGNhdGNoU2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4gcmVqZWN0KGNhdGNoU2NvcGUuZXhjZXB0aW9uKCkpOwogICAgIHJldHVybiByZXN1bHQ7CkBA
IC04NjgsNyArODY4LDcgQEAgSWRlbnRpZmllciBHbG9iYWxPYmplY3Q6Om1vZHVsZUxvYWRlclJl
cwogICAgICAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIGNyZWF0ZUVycm9yKGV4
ZWMsICJDb3VsZCBub3QgcmVzb2x2ZSB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4iX3Mp
KTsKICAgICAgICAgICAgIHJldHVybiB7IH07CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCByZXNvbHZlUGF0aChkaXJlY3RvcnlOYW1lLnZhbHVl
KCksIE1vZHVsZU5hbWUoa2V5LmltcGwoKSkpKTsKKyAgICAgICAgcmV0dXJuIElkZW50aWZpZXI6
OmZyb21TdHJpbmcodm0sIHJlc29sdmVQYXRoKGRpcmVjdG9yeU5hbWUudmFsdWUoKSwgTW9kdWxl
TmFtZShrZXkuaW1wbCgpKSkpOwogICAgIH0KIAogICAgIGNvbnN0IElkZW50aWZpZXIgcmVmZXJy
ZXIgPSByZWZlcnJlclZhbHVlLnRvUHJvcGVydHlLZXkoZXhlYyk7CkBAIC04ODAsNyArODgwLDcg
QEAgSWRlbnRpZmllciBHbG9iYWxPYmplY3Q6Om1vZHVsZUxvYWRlclJlcwogICAgICAgICAgICAg
dGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIGNyZWF0ZUVycm9yKGV4ZWMsICJDb3VsZCBub3Qg
cmVzb2x2ZSB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4iX3MpKTsKICAgICAgICAgICAg
IHJldHVybiB7IH07CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIElkZW50aWZpZXI6OmZyb21T
dHJpbmcoJnZtLCByZXNvbHZlUGF0aChkaXJlY3RvcnlOYW1lLnZhbHVlKCksIE1vZHVsZU5hbWUo
a2V5LmltcGwoKSkpKTsKKyAgICAgICAgcmV0dXJuIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0s
IHJlc29sdmVQYXRoKGRpcmVjdG9yeU5hbWUudmFsdWUoKSwgTW9kdWxlTmFtZShrZXkuaW1wbCgp
KSkpOwogICAgIH0KIAogICAgIC8vIElmIHRoZSByZWZlcnJlciBleGlzdHMsIHdlIGFzc3VtZSB0
aGF0IHRoZSByZWZlcnJlciBpcyB0aGUgY29ycmVjdCBhYnNvbHV0ZSBwYXRoLgpAQCAtODg5LDcg
Kzg4OSw3IEBAIElkZW50aWZpZXIgR2xvYmFsT2JqZWN0Ojptb2R1bGVMb2FkZXJSZXMKICAgICAg
ICAgdGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIGNyZWF0ZUVycm9yKGV4ZWMsIG1ha2VTdHJp
bmcoIkNvdWxkIG5vdCByZXNvbHZlIHRoZSByZWZlcnJlciBuYW1lICciLCBTdHJpbmcocmVmZXJy
ZXIuaW1wbCgpKSwgIicuIikpKTsKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9Ci0gICAgcmV0
dXJuIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCByZXNvbHZlUGF0aChkaXJlY3RvcnlOYW1l
LnZhbHVlKCksIE1vZHVsZU5hbWUoa2V5LmltcGwoKSkpKTsKKyAgICByZXR1cm4gSWRlbnRpZmll
cjo6ZnJvbVN0cmluZyh2bSwgcmVzb2x2ZVBhdGgoZGlyZWN0b3J5TmFtZS52YWx1ZSgpLCBNb2R1
bGVOYW1lKGtleS5pbXBsKCkpKSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFZlY3Rvcj4KQEAg
LTk5Niw3ICs5OTYsNyBAQCBwdWJsaWM6CiAgICAgICAgIGlmICghY2FjaGVFbmFibGVkKCkgfHwg
IW1fY2FjaGVkQnl0ZWNvZGUpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIEJ5dGVjb2Rl
Q2FjaGVFcnJvciBlcnJvcjsKLSAgICAgICAgUmVmUHRyPENhY2hlZEJ5dGVjb2RlPiBjYWNoZWRC
eXRlY29kZSA9IGVuY29kZUZ1bmN0aW9uQ29kZUJsb2NrKCpleGVjdXRhYmxlLT52bSgpLCBjb2Rl
QmxvY2ssIGVycm9yKTsKKyAgICAgICAgUmVmUHRyPENhY2hlZEJ5dGVjb2RlPiBjYWNoZWRCeXRl
Y29kZSA9IGVuY29kZUZ1bmN0aW9uQ29kZUJsb2NrKGV4ZWN1dGFibGUtPnZtKCksIGNvZGVCbG9j
aywgZXJyb3IpOwogICAgICAgICBpZiAoY2FjaGVkQnl0ZWNvZGUgJiYgIWVycm9yLmlzVmFsaWQo
KSkKICAgICAgICAgICAgIG1fY2FjaGVkQnl0ZWNvZGUtPmFkZEZ1bmN0aW9uVXBkYXRlKGV4ZWN1
dGFibGUsIGtpbmQsICpjYWNoZWRCeXRlY29kZSk7CiAgICAgfQpAQCAtMTIwOCw3ICsxMjA4LDcg
QEAgSlNPYmplY3QqIEdsb2JhbE9iamVjdDo6bW9kdWxlTG9hZGVyQ3JlYQogICAgIEpTT2JqZWN0
KiBtZXRhUHJvcGVydGllcyA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMsIGdsb2JhbE9iamVj
dC0+bnVsbFByb3RvdHlwZU9iamVjdFN0cnVjdHVyZSgpKTsKICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCBudWxscHRyKTsKIAotICAgIG1ldGFQcm9wZXJ0aWVzLT5wdXREaXJlY3Qodm0s
IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiZmlsZW5hbWUiKSwga2V5KTsKKyAgICBtZXRh
UHJvcGVydGllcy0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiZmls
ZW5hbWUiKSwga2V5KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsK
IAogICAgIHJldHVybiBtZXRhUHJvcGVydGllczsKQEAgLTEyODQsOSArMTI4NCwxMCBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uRGViCiAKIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgZnVuY3Rpb25EZXNjcmliZShFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkKICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKGV4ZWMsIHRvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDAp
KSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcodm0sIHRvU3RyaW5nKGV4
ZWMtPmFyZ3VtZW50KDApKSkpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1
bmN0aW9uRGVzY3JpYmVBcnJheShFeGVjU3RhdGUqIGV4ZWMpCkBAIC0xMjk2LDggKzEyOTcsOCBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uRGVzCiAgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKICAgICBKU09iamVjdCogb2JqZWN0ID0ganNEeW5hbWljQ2FzdDxKU09iamVj
dCo+KHZtLCBleGVjLT5hcmd1bWVudCgwKSk7CiAgICAgaWYgKCFvYmplY3QpCi0gICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNOb250cml2aWFsU3RyaW5nKGV4ZWMsICI8bm90IG9iamVj
dD4iX3MpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTm9udHJpdmlhbFN0cmluZyhl
eGVjLCB0b1N0cmluZygiPEJ1dHRlcmZseTogIiwgUmF3UG9pbnRlcihvYmplY3QtPmJ1dHRlcmZs
eSgpKSwgIjsgcHVibGljIGxlbmd0aDogIiwgb2JqZWN0LT5nZXRBcnJheUxlbmd0aCgpLCAiOyB2
ZWN0b3IgbGVuZ3RoOiAiLCBvYmplY3QtPmdldFZlY3Rvckxlbmd0aCgpLCAiPiIpKSk7CisgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOb250cml2aWFsU3RyaW5nKHZtLCAiPG5vdCBv
YmplY3Q+Il9zKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc05vbnRyaXZpYWxTdHJp
bmcodm0sIHRvU3RyaW5nKCI8QnV0dGVyZmx5OiAiLCBSYXdQb2ludGVyKG9iamVjdC0+YnV0dGVy
Zmx5KCkpLCAiOyBwdWJsaWMgbGVuZ3RoOiAiLCBvYmplY3QtPmdldEFycmF5TGVuZ3RoKCksICI7
IHZlY3RvciBsZW5ndGg6ICIsIG9iamVjdC0+Z2V0VmVjdG9yTGVuZ3RoKCksICI+IikpKTsKIH0K
IAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblNsZWVwU2Vjb25kcyhFeGVj
U3RhdGUqIGV4ZWMpCkBAIC0xNDIwLDcgKzE0MjEsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAg
IHZvaWQgYWRkUHJvcGVydHkoVk0mIHZtLCBjb25zdCBjaGFyKiBuYW1lLCBKU1ZhbHVlIHZhbHVl
KQogICAgIHsKLSAgICAgICAgSWRlbnRpZmllciBpZGVudGlmaWVyID0gSWRlbnRpZmllcjo6ZnJv
bVN0cmluZygmdm0sIG5hbWUpOworICAgICAgICBJZGVudGlmaWVyIGlkZW50aWZpZXIgPSBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBuYW1lKTsKICAgICAgICAgcHV0RGlyZWN0KHZtLCBpZGVu
dGlmaWVyLCB2YWx1ZSk7CiAgICAgfQogfTsKQEAgLTE0ODAsOCArMTQ4MSw3IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25SdW4KICAgICAgICAgYXJyYXktPnB1dERpcmVj
dEluZGV4KGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCBpIC0gMSwgZXhlYy0+dW5jaGVja2Vk
QXJndW1lbnQoaSkpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVk
SlNWYWx1ZSgpKTsKICAgICB9Ci0gICAgZ2xvYmFsT2JqZWN0LT5wdXREaXJlY3QoCi0gICAgICAg
IHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCAi
YXJndW1lbnRzIiksIGFycmF5KTsKKyAgICBnbG9iYWxPYmplY3QtPnB1dERpcmVjdCh2bSwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImFyZ3VtZW50cyIpLCBhcnJheSk7CiAKICAgICBOYWtl
ZFB0cjxFeGNlcHRpb24+IGV4Y2VwdGlvbjsKICAgICBTdG9wV2F0Y2ggc3RvcFdhdGNoOwpAQCAt
MTUxMyw4ICsxNTEzLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblJ1
bgogICAgICAgICBhcnJheS0+cHV0RGlyZWN0SW5kZXgoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVj
KCksIGkgLSAxLCBleGVjLT51bmNoZWNrZWRBcmd1bWVudChpKSk7CiAgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIH0KLSAgICBnbG9iYWxP
YmplY3QtPnB1dERpcmVjdCgKLSAgICAgICAgdm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZ2xv
YmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksICJhcmd1bWVudHMiKSwgYXJyYXkpOworICAgIGdsb2Jh
bE9iamVjdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiYXJndW1l
bnRzIiksIGFycmF5KTsKIAogICAgIE5ha2VkUHRyPEV4Y2VwdGlvbj4gZXhjZXB0aW9uOwogICAg
IGV2YWx1YXRlKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCBqc2NTb3VyY2Uoc291cmNlLCBl
eGVjLT5jYWxsZXJTb3VyY2VPcmlnaW4oKSksIEpTVmFsdWUoKSwgZXhjZXB0aW9uKTsKQEAgLTE1
ODUsNyArMTU4NCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25SZWEK
ICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBzY29wZSwgIkNvdWxkIG5vdCBvcGVu
IGZpbGUuIik7CiAKICAgICBpZiAoIWlzQmluYXJ5KQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzU3RyaW5nKGV4ZWMsIFN0cmluZzo6ZnJvbVVURjhXaXRoTGF0aW4xRmFsbGJhY2so
Y29udGVudC0+ZGF0YSgpLCBjb250ZW50LT5sZW5ndGgoKSkpKTsKKyAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1N0cmluZyh2bSwgU3RyaW5nOjpmcm9tVVRGOFdpdGhMYXRpbjFGYWxs
YmFjayhjb250ZW50LT5kYXRhKCksIGNvbnRlbnQtPmxlbmd0aCgpKSkpOwogCiAgICAgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPnR5cGVkQXJyYXlT
dHJ1Y3R1cmUoVHlwZVVpbnQ4KTsKICAgICBKU09iamVjdCogcmVzdWx0ID0gSlNVaW50OEFycmF5
OjpjcmVhdGUodm0sIHN0cnVjdHVyZSwgV1RGTW92ZShjb250ZW50KSk7CkBAIC0xNjcxLDcgKzE2
NzAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ2FsCiAgICAgU291
cmNlT3JpZ2luIHNvdXJjZU9yaWdpbiA9IHN0YXRlLT5jYWxsZXJTb3VyY2VPcmlnaW4oKTsKICAg
ICBpZiAoc291cmNlT3JpZ2luLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzTnVsbCgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKHN0YXRl
LCBzb3VyY2VPcmlnaW4uc3RyaW5nKCkpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
U3RyaW5nKHN0YXRlLT52bSgpLCBzb3VyY2VPcmlnaW4uc3RyaW5nKCkpKTsKIH0KIAogRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblJlYWRsaW5lKEV4ZWNTdGF0ZSogZXhlYykK
QEAgLTE2ODUsNyArMTY4NCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rp
b25SZWEKICAgICAgICAgbGluZS5hcHBlbmQoYyk7CiAgICAgfQogICAgIGxpbmUuYXBwZW5kKCdc
MCcpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcoZXhlYywgbGluZS5kYXRh
KCkpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKGV4ZWMtPnZtKCksIGxp
bmUuZGF0YSgpKSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Q
cmVjaXNlVGltZShFeGVjU3RhdGUqKQpAQCAtMTg0Myw3ICsxODQyLDcgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkRvbAogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CiAgICAgR2xvYmFsT2JqZWN0KiByZXN1bHQgPSBHbG9iYWxPYmplY3Q6OmNyZWF0ZSh2bSwgR2xv
YmFsT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUodm0sIGpzTnVsbCgpKSwgVmVjdG9yPFN0cmluZz4o
KSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQtPmdldERpcmVjdCh2bSwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCAiJCIpKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShyZXN1bHQtPmdldERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIiQi
KSkpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uRG9sbGFyRGV0
YWNoQXJyYXlCdWZmZXIoRXhlY1N0YXRlKiBleGVjKQpAQCAtMTg2MCw3ICsxODU5LDcgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkRvbAogICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIAogICAgIEdsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0ID0ganNEeW5hbWljQ2FzdDxHbG9iYWxPYmplY3QqPih2bSwKLSAgICAgICAg
ZXhlYy0+dGhpc1ZhbHVlKCkuZ2V0KGV4ZWMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywg
Imdsb2JhbCIpKSk7CisgICAgICAgIGV4ZWMtPnRoaXNWYWx1ZSgpLmdldChleGVjLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKHZtLCAiZ2xvYmFsIikpKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpZiAoIWdsb2JhbE9iamVjdCkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29wZSwgY3Jl
YXRlRXJyb3IoZXhlYywgIkV4cGVjdGVkIGdsb2JhbCB0byBwb2ludCB0byBhIGdsb2JhbCBvYmpl
Y3QiX3MpKSk7CkBAIC0yMDA2LDcgKzIwMDUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGZ1bmN0aW9uRG9sCiAgICAgaWYgKCFzdHJpbmcpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNOdWxsKCkpOwogICAgIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNT
dHJpbmcoJnZtLCBzdHJpbmcpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5n
KHZtLCBzdHJpbmcpKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlv
bkRvbGxhckFnZW50TGVhdmluZyhFeGVjU3RhdGUqKQpAQCAtMjAzMSw3ICsyMDMwLDcgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbldhaQogICAgIGlmICghc3RyaW5nKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKTsKICAgICAKLSAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKCZ2bSwgc3RyaW5nKSk7CisgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1N0cmluZyh2bSwgc3RyaW5nKSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25IZWFwQ2FwYWNpdHkoRXhlY1N0YXRlKiBleGVjKQpAQCAt
MjA5Nyw3ICsyMDk2LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkpT
QwogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgSlNPYmplY3QqIG9wdGlvbnNPYmplY3Qg
PSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjKTsKICNkZWZpbmUgRk9SX0VBQ0hfT1BUSU9OKHR5
cGVfLCBuYW1lXywgZGVmYXVsdFZhbHVlXywgYXZhaWxhYmlsaXR5XywgZGVzY3JpcHRpb25fKSBc
Ci0gICAgYWRkT3B0aW9uKHZtLCBvcHRpb25zT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KGV4ZWMsICNuYW1lXyksIE9wdGlvbnM6Om5hbWVfKCkpOworICAgIGFkZE9wdGlvbih2bSwgb3B0
aW9uc09iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgI25hbWVfKSwgT3B0aW9uczo6
bmFtZV8oKSk7CiAgICAgSlNDX09QVElPTlMoRk9SX0VBQ0hfT1BUSU9OKQogI3VuZGVmIEZPUl9F
QUNIX09QVElPTgogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUob3B0aW9uc09iamVjdCk7CkBA
IC0yMjU1LDcgKzIyNTQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9u
Q2hlCiAgICAgc3RvcFdhdGNoLnN0b3AoKTsKIAogICAgIGlmICghdmFsaWRTeW50YXgpCi0gICAg
ICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHNjb3BlLCBqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywg
dG9TdHJpbmcoIlN5bnRheEVycm9yOiAiLCBlcnJvci5tZXNzYWdlKCksICI6IiwgZXJyb3IubGlu
ZSgpKSkpOworICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29wZSwganNOb250cml2aWFs
U3RyaW5nKHZtLCB0b1N0cmluZygiU3ludGF4RXJyb3I6ICIsIGVycm9yLm1lc3NhZ2UoKSwgIjoi
LCBlcnJvci5saW5lKCkpKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihz
dG9wV2F0Y2guZ2V0RWxhcHNlZE1TKCkpKTsKIH0KIApAQCAtMjI5OCw3ICsyMjk3LDcgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkdlbgogICAgICAgICBqc29uU3RyaW5n
ID0gc25hcHNob3RCdWlsZGVyLmpzb24oKTsKICAgICB9CiAgICAgc2NvcGUucmVsZWFzZUFzc2Vy
dE5vRXhjZXB0aW9uKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZygmdm0s
IGpzb25TdHJpbmcpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKHZtLCBq
c29uU3RyaW5nKSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25S
ZXNldFN1cGVyU2FtcGxlclN0YXRlKEV4ZWNTdGF0ZSopCkBAIC0yMzc4LDkgKzIzNzcsOSBAQCBz
dGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jCiAKICAgICBpZiAoSlNPYmpl
Y3QqIG9iamVjdCA9IGV4ZWMtPmFyZ3VtZW50KDApLmdldE9iamVjdCgpKSB7CiAgICAgICAgIGlm
IChhdXRvKiBtZW1vcnkgPSBqc0R5bmFtaWNDYXN0PEpTV2ViQXNzZW1ibHlNZW1vcnkqPih2bSwg
b2JqZWN0KSkKLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcoJnZt
LCBtYWtlU3RyaW5nKG1lbW9yeS0+bWVtb3J5KCkubW9kZSgpKSkpOworICAgICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyh2bSwgbWFrZVN0cmluZyhtZW1vcnktPm1lbW9y
eSgpLm1vZGUoKSkpKTsKICAgICAgICAgaWYgKGF1dG8qIGluc3RhbmNlID0ganNEeW5hbWljQ2Fz
dDxKU1dlYkFzc2VtYmx5SW5zdGFuY2UqPih2bSwgb2JqZWN0KSkKLSAgICAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcoJnZtLCBtYWtlU3RyaW5nKGluc3RhbmNlLT5tZW1v
cnlNb2RlKCkpKSk7CisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5n
KHZtLCBtYWtlU3RyaW5nKGluc3RhbmNlLT5tZW1vcnlNb2RlKCkpKSk7CiAgICAgfQogCiAgICAg
cmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUsICJXZWJBc3NlbWJseU1lbW9yeU1v
ZGUgZXhwZWN0cyBlaXRoZXIgYSBXZWJBc3NlbWJseS5NZW1vcnkgb3IgV2ViQXNzZW1ibHkuSW5z
dGFuY2UiX3MpOwpAQCAtMjUxMSwxMyArMjUxMCwxMyBAQCBzdGF0aWMgdm9pZCBkdW1wRXhjZXB0
aW9uKEdsb2JhbE9iamVjdCogCiAgICAgZWxzZQogICAgICAgICBwcmludGYoIkV4Y2VwdGlvbjog
PG91dCBvZiBtZW1vcnkgd2hpbGUgZXh0cmFjdGluZyBleGNlcHRpb24gc3RyaW5nPlxuIik7CiAK
LSAgICBJZGVudGlmaWVyIG5hbWVJRCA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcoZ2xvYmFsT2Jq
ZWN0LT5nbG9iYWxFeGVjKCksICJuYW1lIik7CisgICAgSWRlbnRpZmllciBuYW1lSUQgPSBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAibmFtZSIpOwogICAgIENIRUNLX0VYQ0VQVElPTigpOwot
ICAgIElkZW50aWZpZXIgZmlsZU5hbWVJRCA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcoZ2xvYmFs
T2JqZWN0LT5nbG9iYWxFeGVjKCksICJzb3VyY2VVUkwiKTsKKyAgICBJZGVudGlmaWVyIGZpbGVO
YW1lSUQgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAic291cmNlVVJMIik7CiAgICAgQ0hF
Q0tfRVhDRVBUSU9OKCk7Ci0gICAgSWRlbnRpZmllciBsaW5lTnVtYmVySUQgPSBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCAibGluZSIpOworICAgIElk
ZW50aWZpZXIgbGluZU51bWJlcklEID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImxpbmUi
KTsKICAgICBDSEVDS19FWENFUFRJT04oKTsKLSAgICBJZGVudGlmaWVyIHN0YWNrSUQgPSBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCAic3RhY2siKTsK
KyAgICBJZGVudGlmaWVyIHN0YWNrSUQgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAic3Rh
Y2siKTsKICAgICBDSEVDS19FWENFUFRJT04oKTsKIAogICAgIEpTVmFsdWUgbmFtZVZhbHVlID0g
ZXhjZXB0aW9uLmdldChnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwgbmFtZUlEKTsKQEAgLTI1
NTcsNyArMjU1Niw3IEBAIHN0YXRpYyBib29sIGNoZWNrVW5jYXVnaHRFeGNlcHRpb24oVk0mIHYK
ICAgICB9CiAKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMo
KTsKLSAgICBKU1ZhbHVlIGV4Y2VwdGlvbkNsYXNzID0gZ2xvYmFsT2JqZWN0LT5nZXQoZXhlYywg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCBleHBlY3RlZEV4Y2VwdGlvbk5hbWUpKTsKKyAg
ICBKU1ZhbHVlIGV4Y2VwdGlvbkNsYXNzID0gZ2xvYmFsT2JqZWN0LT5nZXQoZXhlYywgSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZyh2bSwgZXhwZWN0ZWRFeGNlcHRpb25OYW1lKSk7CiAgICAgaWYgKCFl
eGNlcHRpb25DbGFzcy5pc09iamVjdCgpIHx8IHNjb3BlLmV4Y2VwdGlvbigpKSB7CiAgICAgICAg
IHByaW50ZigiRXhwZWN0ZWQgdW5jYXVnaHQgZXhjZXB0aW9uIHdpdGggbmFtZSAnJXMnIGJ1dCBn
aXZlbiBleGNlcHRpb24gY2xhc3MgaXMgbm90IGRlZmluZWRcbiIsIGV4cGVjdGVkRXhjZXB0aW9u
TmFtZS51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS9BUElDYXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9BUElDYXN0LmgJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvQVBJQ2FzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMTkgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTE0LDcgKzExNCw3IEBA
IGlubGluZSBKU0M6OkpTT2JqZWN0KiB0b0pTKEpTT2JqZWN0UmVmIG8KIHsKICAgICBKU0M6OkpT
T2JqZWN0KiBvYmplY3QgPSB1bmNoZWNrZWRUb0pTKG8pOwogICAgIGlmIChvYmplY3QpCi0gICAg
ICAgIFJFTEVBU0VfQVNTRVJUKG9iamVjdC0+bWV0aG9kVGFibGUoKm9iamVjdC0+dm0oKSkpOwor
ICAgICAgICBSRUxFQVNFX0FTU0VSVChvYmplY3QtPm1ldGhvZFRhYmxlKG9iamVjdC0+dm0oKSkp
OwogICAgIHJldHVybiBvYmplY3Q7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvSlNBUElHbG9iYWxPYmplY3QubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9KU0FQSUdsb2JhbE9iamVjdC5tbQkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS9KU0FQSUdsb2JhbE9iamVjdC5tbQkod29ya2luZyBjb3B5KQpA
QCAtMTE2LDcgKzExNiw3IEBAIElkZW50aWZpZXIgSlNBUElHbG9iYWxPYmplY3Q6Om1vZHVsZUxv
YWQKIAogICAgIGF1dG8gcmVzdWx0ID0gY29tcHV0ZVZhbGlkSW1wb3J0U3BlY2lmaWVyKGJhc2Us
IG5hbWUpOwogICAgIGlmIChyZXN1bHQpCi0gICAgICAgIHJldHVybiBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKCZ2bSwgcmVzdWx0LnZhbHVlKCkpOworICAgICAgICByZXR1cm4gSWRlbnRpZmllcjo6
ZnJvbVN0cmluZyh2bSwgcmVzdWx0LnZhbHVlKCkpOwogCiAgICAgdGhyb3dWTUVycm9yKGV4ZWMs
IHNjb3BlLCBjcmVhdGVFcnJvcihleGVjLCByZXN1bHQuZXJyb3IoKSkpOwogICAgIHJldHVybiB7
IH07CkBAIC0xMzQsNyArMTM0LDcgQEAgSlNJbnRlcm5hbFByb21pc2UqIEpTQVBJR2xvYmFsT2Jq
ZWN0OjptbwogICAgIH07CiAKICAgICBhdXRvIGltcG9ydCA9IFsmXSAoVVJMJiB1cmwpIHsKLSAg
ICAgICAgYXV0byByZXN1bHQgPSBpbXBvcnRNb2R1bGUoZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZygmdm0sIHVybCksIGpzVW5kZWZpbmVkKCksIGpzVW5kZWZpbmVkKCkpOworICAgICAgICBh
dXRvIHJlc3VsdCA9IGltcG9ydE1vZHVsZShleGVjLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZt
LCB1cmwpLCBqc1VuZGVmaW5lZCgpLCBqc1VuZGVmaW5lZCgpKTsKICAgICAgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiByZWplY3Qoc2NvcGUu
ZXhjZXB0aW9uKCkpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwpAQCAtMjAyLDcgKzIwMiw3IEBA
IEpTSW50ZXJuYWxQcm9taXNlKiBKU0FQSUdsb2JhbE9iamVjdDo6bW8KIAogICAgICAgICBOU1VS
TCAqc291cmNlVVJMID0gW2pzU2NyaXB0IHNvdXJjZVVSTF07CiAgICAgICAgIFN0cmluZyBvbGRN
b2R1bGVLZXkgeyBbc291cmNlVVJMIGFic29sdXRlU3RyaW5nXSB9OwotICAgICAgICBpZiAoVU5M
SUtFTFkoSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIG9sZE1vZHVsZUtleSkgIT0gbW9kdWxl
S2V5KSkKKyAgICAgICAgaWYgKFVOTElLRUxZKElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIG9s
ZE1vZHVsZUtleSkgIT0gbW9kdWxlS2V5KSkKICAgICAgICAgICAgIHJldHVybiByZWplY3RQcm9t
aXNlKG1ha2VTdHJpbmcoIlRoZSBzYW1lIEpTU2NyaXB0IHdhcyBwcm92aWRlZCBmb3IgdHdvIGRp
ZmZlcmVudCBpZGVudGlmaWVycywgcHJldmlvdXNseTogIiwgb2xkTW9kdWxlS2V5LCAiIGFuZCBu
b3c6ICIsIG1vZHVsZUtleS5zdHJpbmcoKSkpOwogCiAgICAgICAgIGFyZ3MuYXBwZW5kKHNvdXJj
ZSk7CkBAIC0yMzQsNyArMjM0LDcgQEAgSlNPYmplY3QqIEpTQVBJR2xvYmFsT2JqZWN0Ojptb2R1
bGVMb2FkZQogICAgIEpTT2JqZWN0KiBtZXRhUHJvcGVydGllcyA9IGNvbnN0cnVjdEVtcHR5T2Jq
ZWN0KGV4ZWMsIGdsb2JhbE9iamVjdC0+bnVsbFByb3RvdHlwZU9iamVjdFN0cnVjdHVyZSgpKTsK
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKIAotICAgIG1ldGFQcm9w
ZXJ0aWVzLT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiZmlsZW5h
bWUiKSwga2V5KTsKKyAgICBtZXRhUHJvcGVydGllcy0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKHZtLCAiZmlsZW5hbWUiKSwga2V5KTsKICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCBudWxscHRyKTsKIAogICAgIHJldHVybiBtZXRhUHJvcGVydGllczsKQEAgLTI3
NCw3ICsyNzQsNyBAQCBKU1ZhbHVlIEpTQVBJR2xvYmFsT2JqZWN0Ojpsb2FkQW5kRXZhbHVhCiAg
ICAgRXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsRXhlYygpOwogICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIElkZW50aWZpZXIga2V5ID0gSWRlbnRpZmllcjo6
ZnJvbVN0cmluZyhleGVjLCBTdHJpbmcgeyBbW3NjcmlwdCBzb3VyY2VVUkxdIGFic29sdXRlU3Ry
aW5nXSB9KTsKKyAgICBJZGVudGlmaWVyIGtleSA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0s
IFN0cmluZyB7IFtbc2NyaXB0IHNvdXJjZVVSTF0gYWJzb2x1dGVTdHJpbmddIH0pOwogICAgIEpT
SW50ZXJuYWxQcm9taXNlKiBwcm9taXNlID0gaW1wb3J0TW9kdWxlKGV4ZWMsIGtleSwganNVbmRl
ZmluZWQoKSwganNVbmRlZmluZWQoKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
eyB9KTsKICAgICBhdXRvIHJlc3VsdCA9IEpTUHJvbWlzZURlZmVycmVkOjp0cnlDcmVhdGUoZXhl
YywgdGhpcyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tDb25z
dHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0Nh
bGxiYWNrQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDE5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtNDgsNyArNDgsNyBAQCBKU0NhbGxiYWNrQ29uc3RydWN0b3I6OkpTQ2FsbGJhY2tD
b25zdHJ1CiB2b2lkIEpTQ2FsbGJhY2tDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24oSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDbGFzc1JlZiBqc0NsYXNzKQogewogICAgIEJhc2U6
OmZpbmlzaENyZWF0aW9uKGdsb2JhbE9iamVjdC0+dm0oKSk7Ci0gICAgQVNTRVJUKGluaGVyaXRz
KCp2bSgpLCBpbmZvKCkpKTsKKyAgICBBU1NFUlQoaW5oZXJpdHModm0oKSwgaW5mbygpKSk7CiAg
ICAgaWYgKG1fY2xhc3MpCiAgICAgICAgIEpTQ2xhc3NSZXRhaW4oanNDbGFzcyk7CiB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3RG
dW5jdGlvbnMuaAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA4LCAyMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDE5IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNyBFcmljIFNlaWRlbCA8
ZXJpY0B3ZWJraXQub3JnPgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtNDMsNyArNDMsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKIHRlbXBsYXRlIDxjbGFzcyBQYXJlbnQ+CiBpbmxpbmUgSlNDYWxsYmFja09i
amVjdDxQYXJlbnQ+KiBKU0NhbGxiYWNrT2JqZWN0PFBhcmVudD46OmFzQ2FsbGJhY2tPYmplY3Qo
SlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICBBU1NFUlQoYXNPYmplY3QodmFsdWUpLT5pbmhlcml0cygq
dmFsdWUuZ2V0T2JqZWN0KCktPnZtKCksIGluZm8oKSkpOworICAgIEFTU0VSVChhc09iamVjdCh2
YWx1ZSktPmluaGVyaXRzKHZhbHVlLmdldE9iamVjdCgpLT52bSgpLCBpbmZvKCkpKTsKICAgICBy
ZXR1cm4ganNDYXN0PEpTQ2FsbGJhY2tPYmplY3QqPihhc09iamVjdCh2YWx1ZSkpOwogfQogCkBA
IC01MSw3ICs1MSw3IEBAIHRlbXBsYXRlIDxjbGFzcyBQYXJlbnQ+CiBpbmxpbmUgSlNDYWxsYmFj
a09iamVjdDxQYXJlbnQ+KiBKU0NhbGxiYWNrT2JqZWN0PFBhcmVudD46OmFzQ2FsbGJhY2tPYmpl
Y3QoRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIEpTVmFsdWUgdmFsdWUgPSBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKLSAgICBBU1NFUlQoYXNPYmplY3QodmFsdWUp
LT5pbmhlcml0cygqdmFsdWUuZ2V0T2JqZWN0KCktPnZtKCksIGluZm8oKSkpOworICAgIEFTU0VS
VChhc09iamVjdCh2YWx1ZSktPmluaGVyaXRzKHZhbHVlLmdldE9iamVjdCgpLT52bSgpLCBpbmZv
KCkpKTsKICAgICByZXR1cm4ganNDYXN0PEpTQ2FsbGJhY2tPYmplY3QqPihhc09iamVjdCh2YWx1
ZSkpOwogfQogCkBAIC03NCwxNyArNzQsMTcgQEAgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+OjpK
U0NhbGxiYWNrT2JqZQogdGVtcGxhdGUgPGNsYXNzIFBhcmVudD4KIEpTQ2FsbGJhY2tPYmplY3Q8
UGFyZW50Pjo6fkpTQ2FsbGJhY2tPYmplY3QoKQogewotICAgIFZNKiB2bSA9IHRoaXMtPkhlYXBD
ZWxsOjp2bSgpOwotICAgIHZtLT5jdXJyZW50bHlEZXN0cnVjdGluZ0NhbGxiYWNrT2JqZWN0ID0g
dGhpczsKKyAgICBWTSYgdm0gPSB0aGlzLT5IZWFwQ2VsbDo6dm0oKTsKKyAgICB2bS5jdXJyZW50
bHlEZXN0cnVjdGluZ0NhbGxiYWNrT2JqZWN0ID0gdGhpczsKICAgICBBU1NFUlQobV9jbGFzc0lu
Zm8pOwotICAgIHZtLT5jdXJyZW50bHlEZXN0cnVjdGluZ0NhbGxiYWNrT2JqZWN0Q2xhc3NJbmZv
ID0gbV9jbGFzc0luZm87CisgICAgdm0uY3VycmVudGx5RGVzdHJ1Y3RpbmdDYWxsYmFja09iamVj
dENsYXNzSW5mbyA9IG1fY2xhc3NJbmZvOwogICAgIEpTT2JqZWN0UmVmIHRoaXNSZWYgPSB0b1Jl
ZihzdGF0aWNfY2FzdDxKU09iamVjdCo+KHRoaXMpKTsKICAgICBmb3IgKEpTQ2xhc3NSZWYganND
bGFzcyA9IGNsYXNzUmVmKCk7IGpzQ2xhc3M7IGpzQ2xhc3MgPSBqc0NsYXNzLT5wYXJlbnRDbGFz
cykgewogICAgICAgICBpZiAoSlNPYmplY3RGaW5hbGl6ZUNhbGxiYWNrIGZpbmFsaXplID0ganND
bGFzcy0+ZmluYWxpemUpCiAgICAgICAgICAgICBmaW5hbGl6ZSh0aGlzUmVmKTsKICAgICB9Ci0g
ICAgdm0tPmN1cnJlbnRseURlc3RydWN0aW5nQ2FsbGJhY2tPYmplY3QgPSBudWxscHRyOwotICAg
IHZtLT5jdXJyZW50bHlEZXN0cnVjdGluZ0NhbGxiYWNrT2JqZWN0Q2xhc3NJbmZvID0gbnVsbHB0
cjsKKyAgICB2bS5jdXJyZW50bHlEZXN0cnVjdGluZ0NhbGxiYWNrT2JqZWN0ID0gbnVsbHB0cjsK
KyAgICB2bS5jdXJyZW50bHlEZXN0cnVjdGluZ0NhbGxiYWNrT2JqZWN0Q2xhc3NJbmZvID0gbnVs
bHB0cjsKIH0KICAgICAKIHRlbXBsYXRlIDxjbGFzcyBQYXJlbnQ+CkBAIC0yMTUsNyArMjE1LDgg
QEAgYm9vbCBKU0NhbGxiYWNrT2JqZWN0PFBhcmVudD46OmdldE93blBybwogdGVtcGxhdGUgPGNs
YXNzIFBhcmVudD4KIGJvb2wgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+OjpnZXRPd25Qcm9wZXJ0
eVNsb3RCeUluZGV4KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQg
cHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7Ci0gICAgcmV0dXJuIG9iamVjdC0+
bWV0aG9kVGFibGUoZXhlYy0+dm0oKSktPmdldE93blByb3BlcnR5U2xvdChvYmplY3QsIGV4ZWMs
IElkZW50aWZpZXI6OmZyb20oZXhlYywgcHJvcGVydHlOYW1lKSwgc2xvdCk7CisgICAgVk0mIHZt
ID0gZXhlYy0+dm0oKTsKKyAgICByZXR1cm4gb2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmdldE93
blByb3BlcnR5U2xvdChvYmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20odm0sIHByb3BlcnR5
TmFtZSksIHNsb3QpOwogfQogCiB0ZW1wbGF0ZSA8Y2xhc3MgUGFyZW50PgpAQCAtMzIwLDcgKzMy
MSw3IEBAIGJvb2wgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+OjpwdXRCeUluZGUKICAgICBKU09i
amVjdFJlZiB0aGlzUmVmID0gdG9SZWYodGhpc09iamVjdCk7CiAgICAgUmVmUHRyPE9wYXF1ZUpT
U3RyaW5nPiBwcm9wZXJ0eU5hbWVSZWY7CiAgICAgSlNWYWx1ZVJlZiB2YWx1ZVJlZiA9IHRvUmVm
KGV4ZWMsIHZhbHVlKTsKLSAgICBJZGVudGlmaWVyIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6
OmZyb20oZXhlYywgcHJvcGVydHlJbmRleCk7CisgICAgSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUg
PSBJZGVudGlmaWVyOjpmcm9tKHZtLCBwcm9wZXJ0eUluZGV4KTsKIAogICAgIGZvciAoSlNDbGFz
c1JlZiBqc0NsYXNzID0gdGhpc09iamVjdC0+Y2xhc3NSZWYoKTsganNDbGFzczsganNDbGFzcyA9
IGpzQ2xhc3MtPnBhcmVudENsYXNzKSB7CiAgICAgICAgIGlmIChKU09iamVjdFNldFByb3BlcnR5
Q2FsbGJhY2sgc2V0UHJvcGVydHkgPSBqc0NsYXNzLT5zZXRQcm9wZXJ0eSkgewpAQCAtNDIxLDgg
KzQyMiw5IEBAIGJvb2wgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+OjpkZWxldGVQcm8KIHRlbXBs
YXRlIDxjbGFzcyBQYXJlbnQ+CiBib29sIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6ZGVsZXRl
UHJvcGVydHlCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBw
cm9wZXJ0eU5hbWUpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBKU0NhbGxiYWNr
T2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQ2FsbGJhY2tPYmplY3QqPihjZWxsKTsKLSAg
ICByZXR1cm4gdGhpc09iamVjdC0+bWV0aG9kVGFibGUoZXhlYy0+dm0oKSktPmRlbGV0ZVByb3Bl
cnR5KHRoaXNPYmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgcHJvcGVydHlOYW1l
KSk7CisgICAgcmV0dXJuIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+ZGVsZXRlUHJvcGVy
dHkodGhpc09iamVjdCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbSh2bSwgcHJvcGVydHlOYW1lKSk7
CiB9CiAKIHRlbXBsYXRlIDxjbGFzcyBQYXJlbnQ+CkBAIC01NDcsNiArNTQ5LDcgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+OgogdGVtcGxhdGUgPGNsYXNzIFBhcmVu
dD4KIHZvaWQgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+OjpnZXRPd25Ob25JbmRleFByb3BlcnR5
TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJh
eSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7CisgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKICAgICBKU0NhbGxiYWNrT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpT
Q2FsbGJhY2tPYmplY3QqPihvYmplY3QpOwogICAgIEpTQ29udGV4dFJlZiBleGVjUmVmID0gdG9S
ZWYoZXhlYyk7CiAgICAgSlNPYmplY3RSZWYgdGhpc1JlZiA9IHRvUmVmKHRoaXNPYmplY3QpOwpA
QCAtNTY1LDcgKzU2OCw3IEBAIHZvaWQgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+OjpnZXRPd25O
b24KICAgICAgICAgICAgICAgICBTdGF0aWNWYWx1ZUVudHJ5KiBlbnRyeSA9IGl0LT52YWx1ZS5n
ZXQoKTsKICAgICAgICAgICAgICAgICBpZiAoZW50cnktPmdldFByb3BlcnR5ICYmICghKGVudHJ5
LT5hdHRyaWJ1dGVzICYga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RW51bSkgfHwgbW9kZS5pbmNs
dWRlRG9udEVudW1Qcm9wZXJ0aWVzKCkpKSB7CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCgh
bmFtZS0+aXNTeW1ib2woKSk7Ci0gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRk
KElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgU3RyaW5nKG5hbWUpKSk7CisgICAgICAgICAg
ICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIFN0
cmluZyhuYW1lKSkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAg
fQpAQCAtNTc4LDcgKzU4MSw3IEBAIHZvaWQgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+OjpnZXRP
d25Ob24KICAgICAgICAgICAgICAgICBTdGF0aWNGdW5jdGlvbkVudHJ5KiBlbnRyeSA9IGl0LT52
YWx1ZS5nZXQoKTsKICAgICAgICAgICAgICAgICBpZiAoIShlbnRyeS0+YXR0cmlidXRlcyAmIGtK
U1Byb3BlcnR5QXR0cmlidXRlRG9udEVudW0pIHx8IG1vZGUuaW5jbHVkZURvbnRFbnVtUHJvcGVy
dGllcygpKSB7CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghbmFtZS0+aXNTeW1ib2woKSk7
Ci0gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb21T
dHJpbmcoZXhlYywgU3RyaW5nKG5hbWUpKSk7CisgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5
TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIFN0cmluZyhuYW1lKSkpOwogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHQubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9KU0NvbnRleHQubW0JKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xNTgsNyAr
MTU4LDcgQEAgLSAoSlNWYWx1ZSAqKWRlcGVuZGVuY3lJZGVudGlmaWVyc0Zvck1vZAogICAgIH0K
IAogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKLSAgICBKU0M6OkpT
QXJyYXkqIHJlc3VsdCA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+bW9kdWxlTG9hZGVy
KCktPmRlcGVuZGVuY3lLZXlzSWZFdmFsdWF0ZWQoZXhlYywgSlNDOjpqc1N0cmluZygmdm0sIFtb
c2NyaXB0IHNvdXJjZVVSTF0gYWJzb2x1dGVTdHJpbmddKSk7CisgICAgSlNDOjpKU0FycmF5KiBy
ZXN1bHQgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPm1vZHVsZUxvYWRlcigpLT5kZXBl
bmRlbmN5S2V5c0lmRXZhbHVhdGVkKGV4ZWMsIEpTQzo6anNTdHJpbmcodm0sIFtbc2NyaXB0IHNv
dXJjZVVSTF0gYWJzb2x1dGVTdHJpbmddKSk7CiAgICAgaWYgKHNjb3BlLmV4Y2VwdGlvbigpKSB7
CiAgICAgICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uVmFsdWUgPSB0b1JlZihleGVjLCBzY29wZS5l
eGNlcHRpb24oKS0+dmFsdWUoKSk7CiAgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTT2JqZWN0UmVmLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTT2JqZWN0UmVmLmNwcAkocmV2aXNpb24g
MjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU09iamVjdFJlZi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE0NywxMiArMTQ3LDEyIEBAIEpTT2JqZWN0UmVmIEpTT2JqZWN0TWFr
ZUZ1bmN0aW9uKEpTQ29udGUKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2
bSk7CiAKICAgICBzdGFydGluZ0xpbmVOdW1iZXIgPSBzdGQ6Om1heCgxLCBzdGFydGluZ0xpbmVO
dW1iZXIpOwotICAgIElkZW50aWZpZXIgbmFtZUlEID0gbmFtZSA/IG5hbWUtPmlkZW50aWZpZXIo
JnZtKSA6IElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgImFub255bW91cyIpOworICAgIElk
ZW50aWZpZXIgbmFtZUlEID0gbmFtZSA/IG5hbWUtPmlkZW50aWZpZXIoJnZtKSA6IElkZW50aWZp
ZXI6OmZyb21TdHJpbmcodm0sICJhbm9ueW1vdXMiKTsKICAgICAKICAgICBNYXJrZWRBcmd1bWVu
dEJ1ZmZlciBhcmdzOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwYXJhbWV0ZXJDb3Vu
dDsgaSsrKQotICAgICAgICBhcmdzLmFwcGVuZChqc1N0cmluZyhleGVjLCBwYXJhbWV0ZXJOYW1l
c1tpXS0+c3RyaW5nKCkpKTsKLSAgICBhcmdzLmFwcGVuZChqc1N0cmluZyhleGVjLCBib2R5LT5z
dHJpbmcoKSkpOworICAgICAgICBhcmdzLmFwcGVuZChqc1N0cmluZyh2bSwgcGFyYW1ldGVyTmFt
ZXNbaV0tPnN0cmluZygpKSk7CisgICAgYXJncy5hcHBlbmQoanNTdHJpbmcodm0sIGJvZHktPnN0
cmluZygpKSk7CiAgICAgaWYgKFVOTElLRUxZKGFyZ3MuaGFzT3ZlcmZsb3dlZCgpKSkgewogICAg
ICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICAgICAg
dGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMsIHRocm93U2NvcGUpOwpAQCAtNTQ2LDcgKzU0Niw3
IEBAIGJvb2wgSlNPYmplY3REZWxldGVQcm9wZXJ0eShKU0NvbnRleHRSZWYKIC8vIGR1cmluZyBk
ZXN0cnVjdGlvbi4KIHN0YXRpYyBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mb1ByaXZhdGUoSlNP
YmplY3QqIGpzT2JqZWN0KQogewotICAgIFZNJiB2bSA9ICpqc09iamVjdC0+dm0oKTsKKyAgICBW
TSYgdm0gPSBqc09iamVjdC0+dm0oKTsKICAgICAKICAgICBpZiAodm0uY3VycmVudGx5RGVzdHJ1
Y3RpbmdDYWxsYmFja09iamVjdCAhPSBqc09iamVjdCkKICAgICAgICAgcmV0dXJuIGpzT2JqZWN0
LT5jbGFzc0luZm8odm0pOwpAQCAtNTU3LDcgKzU1Nyw3IEBAIHN0YXRpYyBjb25zdCBDbGFzc0lu
Zm8qIGNsYXNzSW5mb1ByaXZhdGUKIHZvaWQqIEpTT2JqZWN0R2V0UHJpdmF0ZShKU09iamVjdFJl
ZiBvYmplY3QpCiB7CiAgICAgSlNPYmplY3QqIGpzT2JqZWN0ID0gdW5jaGVja2VkVG9KUyhvYmpl
Y3QpOwotICAgIFZNJiB2bSA9ICpqc09iamVjdC0+dm0oKTsKKyAgICBWTSYgdm0gPSBqc09iamVj
dC0+dm0oKTsKIAogICAgIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvID0gY2xhc3NJbmZvUHJp
dmF0ZShqc09iamVjdCk7CiAgICAgCkBAIC01ODIsNyArNTgyLDcgQEAgdm9pZCogSlNPYmplY3RH
ZXRQcml2YXRlKEpTT2JqZWN0UmVmIG9iagogYm9vbCBKU09iamVjdFNldFByaXZhdGUoSlNPYmpl
Y3RSZWYgb2JqZWN0LCB2b2lkKiBkYXRhKQogewogICAgIEpTT2JqZWN0KiBqc09iamVjdCA9IHVu
Y2hlY2tlZFRvSlMob2JqZWN0KTsKLSAgICBWTSYgdm0gPSAqanNPYmplY3QtPnZtKCk7CisgICAg
Vk0mIHZtID0ganNPYmplY3QtPnZtKCk7CiAKICAgICBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5m
byA9IGNsYXNzSW5mb1ByaXZhdGUoanNPYmplY3QpOwogICAgIApAQCAtODEwLDEyICs4MTAsMTIg
QEAgSlNQcm9wZXJ0eU5hbWVBcnJheVJlZiBKU09iamVjdENvcHlQcm9wZQogICAgIEV4ZWNTdGF0
ZSogZXhlYyA9IHRvSlMoY3R4KTsKICAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKGV4ZWMpOwogCi0g
ICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKIAogICAg
IEpTT2JqZWN0KiBqc09iamVjdCA9IHRvSlMob2JqZWN0KTsKLSAgICBKU1Byb3BlcnR5TmFtZUFy
cmF5UmVmIHByb3BlcnR5TmFtZXMgPSBuZXcgT3BhcXVlSlNQcm9wZXJ0eU5hbWVBcnJheSh2bSk7
CisgICAgSlNQcm9wZXJ0eU5hbWVBcnJheVJlZiBwcm9wZXJ0eU5hbWVzID0gbmV3IE9wYXF1ZUpT
UHJvcGVydHlOYW1lQXJyYXkoJnZtKTsKICAgICBQcm9wZXJ0eU5hbWVBcnJheSBhcnJheSh2bSwg
UHJvcGVydHlOYW1lTW9kZTo6U3RyaW5ncywgUHJpdmF0ZVN5bWJvbE1vZGU6OkV4Y2x1ZGUpOwot
ICAgIGpzT2JqZWN0LT5tZXRob2RUYWJsZSgqdm0pLT5nZXRQcm9wZXJ0eU5hbWVzKGpzT2JqZWN0
LCBleGVjLCBhcnJheSwgRW51bWVyYXRpb25Nb2RlKCkpOworICAgIGpzT2JqZWN0LT5tZXRob2RU
YWJsZSh2bSktPmdldFByb3BlcnR5TmFtZXMoanNPYmplY3QsIGV4ZWMsIGFycmF5LCBFbnVtZXJh
dGlvbk1vZGUoKSk7CiAKICAgICBzaXplX3Qgc2l6ZSA9IGFycmF5LnNpemUoKTsKICAgICBwcm9w
ZXJ0eU5hbWVzLT5hcnJheS5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHNpemUpOwpAQCAtODUyLDkg
Kzg1Miw5IEBAIEpTU3RyaW5nUmVmIEpTUHJvcGVydHlOYW1lQXJyYXlHZXROYW1lQXQKIHZvaWQg
SlNQcm9wZXJ0eU5hbWVBY2N1bXVsYXRvckFkZE5hbWUoSlNQcm9wZXJ0eU5hbWVBY2N1bXVsYXRv
clJlZiBhcnJheSwgSlNTdHJpbmdSZWYgcHJvcGVydHlOYW1lKQogewogICAgIFByb3BlcnR5TmFt
ZUFycmF5KiBwcm9wZXJ0eU5hbWVzID0gdG9KUyhhcnJheSk7Ci0gICAgVk0qIHZtID0gcHJvcGVy
dHlOYW1lcy0+dm0oKTsKKyAgICBWTSYgdm0gPSBwcm9wZXJ0eU5hbWVzLT52bSgpOwogICAgIEpT
TG9ja0hvbGRlciBsb2NrZXIodm0pOwotICAgIHByb3BlcnR5TmFtZXMtPmFkZChwcm9wZXJ0eU5h
bWUtPmlkZW50aWZpZXIodm0pKTsKKyAgICBwcm9wZXJ0eU5hbWVzLT5hZGQocHJvcGVydHlOYW1l
LT5pZGVudGlmaWVyKCZ2bSkpOwogfQogCiBKU09iamVjdFJlZiBKU09iamVjdEdldFByb3h5VGFy
Z2V0KEpTT2JqZWN0UmVmIG9iamVjdFJlZikKQEAgLTg2Miw3ICs4NjIsNyBAQCBKU09iamVjdFJl
ZiBKU09iamVjdEdldFByb3h5VGFyZ2V0KEpTT2JqCiAgICAgSlNPYmplY3QqIG9iamVjdCA9IHRv
SlMob2JqZWN0UmVmKTsKICAgICBpZiAoIW9iamVjdCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0gICAgVk0mIHZtID0gKm9iamVjdC0+dm0oKTsKKyAgICBWTSYgdm0gPSBvYmplY3QtPnZtKCk7
CiAgICAgSlNMb2NrSG9sZGVyIGxvY2tlcih2bSk7CiAgICAgSlNPYmplY3QqIHJlc3VsdCA9IG51
bGxwdHI7CiAgICAgaWYgKEpTUHJveHkqIHByb3h5ID0ganNEeW5hbWljQ2FzdDxKU1Byb3h5Kj4o
dm0sIG9iamVjdCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0UmVm
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0UmVm
LmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1Nj
cmlwdFJlZi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzUsNyArNzUsNyBAQCBwcml2YXRlOgogc3RhdGlj
IGJvb2wgcGFyc2VTY3JpcHQoVk0mIHZtLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIFBhcnNl
ckVycm9yJiBlcnJvcikKIHsKICAgICByZXR1cm4gISFKU0M6OnBhcnNlPEpTQzo6UHJvZ3JhbU5v
ZGU+KAotICAgICAgICAmdm0sIHNvdXJjZSwgSWRlbnRpZmllcigpLCBKU1BhcnNlckJ1aWx0aW5N
b2RlOjpOb3RCdWlsdGluLAorICAgICAgICB2bSwgc291cmNlLCBJZGVudGlmaWVyKCksIEpTUGFy
c2VyQnVpbHRpbk1vZGU6Ok5vdEJ1aWx0aW4sCiAgICAgICAgIEpTUGFyc2VyU3RyaWN0TW9kZTo6
Tm90U3RyaWN0LCBKU1BhcnNlclNjcmlwdE1vZGU6OkNsYXNzaWMsIFNvdXJjZVBhcnNlTW9kZTo6
UHJvZ3JhbU1vZGUsIFN1cGVyQmluZGluZzo6Tm90TmVlZGVkLAogICAgICAgICBlcnJvcik7CiB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmFsdWVSZWYuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWYWx1ZVJlZi5jcHAJKHJldmlzaW9u
IDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWYWx1ZVJlZi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAy
MDA3LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAwNi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzQ2LDkgKzM0NiwxMCBAQCBKU1ZhbHVlUmVmIEpTVmFs
dWVNYWtlU3RyaW5nKEpTQ29udGV4dFJlCiAgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICBF
eGVjU3RhdGUqIGV4ZWMgPSB0b0pTKGN0eCk7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2tlcihleGVj
KTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIEpTTG9ja0hvbGRlciBsb2NrZXIodm0p
OwogCi0gICAgcmV0dXJuIHRvUmVmKGV4ZWMsIGpzU3RyaW5nKGV4ZWMsIHN0cmluZyA/IHN0cmlu
Zy0+c3RyaW5nKCkgOiBTdHJpbmcoKSkpOworICAgIHJldHVybiB0b1JlZihleGVjLCBqc1N0cmlu
Zyh2bSwgc3RyaW5nID8gc3RyaW5nLT5zdHJpbmcoKSA6IFN0cmluZygpKSk7CiB9CiAKIEpTVmFs
dWVSZWYgSlNWYWx1ZU1ha2VGcm9tSlNPTlN0cmluZyhKU0NvbnRleHRSZWYgY3R4LCBKU1N0cmlu
Z1JlZiBzdHJpbmcpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL09wYXF1ZUpTU3Ry
aW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL09wYXF1ZUpT
U3RyaW5nLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9PcGFxdWVKU1N0cmluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwOC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzgsOSArNzgsOSBAQCBJZGVudGlm
aWVyIE9wYXF1ZUpTU3RyaW5nOjppZGVudGlmaWVyKFZNCiAgICAgICAgIHJldHVybiBJZGVudGlm
aWVyKElkZW50aWZpZXI6OkVtcHR5SWRlbnRpZmllcik7CiAKICAgICBpZiAobV9zdHJpbmcuaXM4
Qml0KCkpCi0gICAgICAgIHJldHVybiBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBtX3N0cmlu
Zy5jaGFyYWN0ZXJzOCgpLCBtX3N0cmluZy5sZW5ndGgoKSk7CisgICAgICAgIHJldHVybiBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKCp2bSwgbV9zdHJpbmcuY2hhcmFjdGVyczgoKSwgbV9zdHJpbmcu
bGVuZ3RoKCkpOwogCi0gICAgcmV0dXJuIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIG1fc3Ry
aW5nLmNoYXJhY3RlcnMxNigpLCBtX3N0cmluZy5sZW5ndGgoKSk7CisgICAgcmV0dXJuIElkZW50
aWZpZXI6OmZyb21TdHJpbmcoKnZtLCBtX3N0cmluZy5jaGFyYWN0ZXJzMTYoKSwgbV9zdHJpbmcu
bGVuZ3RoKCkpOwogfQogCiBjb25zdCBVQ2hhciogT3BhcXVlSlNTdHJpbmc6OmNoYXJhY3RlcnMo
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvd2tidWlsdGlucy9idWlsdGlu
c19nZW5lcmF0ZV93cmFwcGVyX2hlYWRlci5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvU2NyaXB0cy93a2J1aWx0aW5zL2J1aWx0aW5zX2dlbmVyYXRlX3dyYXBwZXJfaGVh
ZGVyLnB5CShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0
cy93a2J1aWx0aW5zL2J1aWx0aW5zX2dlbmVyYXRlX3dyYXBwZXJfaGVhZGVyLnB5CSh3b3JraW5n
IGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiAjCi0jIENvcHly
aWdodCAoYykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdo
dCAoYykgMjAxNi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICMKICMgUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtOTIsNyArOTIsNyBAQCBjbGFzcyBCdWlsdGluc1dyYXBw
ZXJIZWFkZXJHZW5lcmF0b3IoQnVpCiAgICAgICAgIGxpbmVzID0gWyIgICAgZXhwbGljaXQgSlNC
dWlsdGluRnVuY3Rpb25zKEpTQzo6Vk0mIHZtKSIsCiAgICAgICAgICAgICAgICAgICIgICAgICAg
IDogbV92bSh2bSkiXQogICAgICAgICBmb3Igb2JqZWN0IGluIHNlbGYubW9kZWwoKS5vYmplY3Rz
OgotICAgICAgICAgICAgbWVtYmVyX2luaXQgPSAiICAgICAgICAsICVzKCZtX3ZtKSIgJSBzZWxm
Lm1lbWJlcl9uYW1lKG9iamVjdCkKKyAgICAgICAgICAgIG1lbWJlcl9pbml0ID0gIiAgICAgICAg
LCAlcyhtX3ZtKSIgJSBzZWxmLm1lbWJlcl9uYW1lKG9iamVjdCkKICAgICAgICAgICAgIGxpbmVz
LmFwcGVuZChCdWlsdGluc0dlbmVyYXRvci53cmFwX3dpdGhfZ3VhcmQob2JqZWN0LmFubm90YXRp
b25zLmdldCgnY29uZGl0aW9uYWwnKSwgbWVtYmVyX2luaXQpKQogICAgICAgICBsaW5lcy5hcHBl
bmQoIiAgICB7IikKICAgICAgICAgZm9yIG9iamVjdCBpbiBzZWxmLm1vZGVsKCkub2JqZWN0czoK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL3drYnVpbHRpbnMvYnVpbHRpbnNf
dGVtcGxhdGVzLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRz
L3drYnVpbHRpbnMvYnVpbHRpbnNfdGVtcGxhdGVzLnB5CShyZXZpc2lvbiAyNDkxMjgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy93a2J1aWx0aW5zL2J1aWx0aW5zX3RlbXBsYXRl
cy5weQkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKICMhL3Vzci9iaW4vZW52IHB5dGhv
bgogIwotIyBDb3B5cmlnaHQgKGMpIDIwMTQtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisjIENvcHlyaWdodCAoYykgMjAxNC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICMgQ29weXJpZ2h0IChDKSAyMDE1IENhbm9uIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICMKICMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0xMjksOCArMTI5LDggQEAgJHttYWNyb1ByZWZpeH1f
Rk9SRUFDSF8ke29iamVjdE1hY3JvfV9CVQogICAgIFNlcGFyYXRlSGVhZGVyV3JhcHBlckJvaWxl
cnBsYXRlID0gKAogICAgICIiImNsYXNzICR7b2JqZWN0TmFtZX1CdWlsdGluc1dyYXBwZXIgOiBw
cml2YXRlIEpTQzo6V2Vha0hhbmRsZU93bmVyIHsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCAke29i
amVjdE5hbWV9QnVpbHRpbnNXcmFwcGVyKEpTQzo6Vk0qIHZtKQotICAgICAgICA6IG1fdm0oKnZt
KQorICAgIGV4cGxpY2l0ICR7b2JqZWN0TmFtZX1CdWlsdGluc1dyYXBwZXIoSlNDOjpWTSYgdm0p
CisgICAgICAgIDogbV92bSh2bSkKICAgICAgICAgJHttYWNyb1ByZWZpeH1fRk9SRUFDSF8ke29i
amVjdE1hY3JvfV9CVUlMVElOX0ZVTkNUSU9OX05BTUUoSU5JVElBTElaRV9CVUlMVElOX05BTUVT
KQogI2RlZmluZSBJTklUSUFMSVpFX0JVSUxUSU5fU09VUkNFX01FTUJFUlMobmFtZSwgZnVuY3Rp
b25OYW1lLCBvdmVycmlkZGVuTmFtZSwgbGVuZ3RoKSAsIG1fIyNuYW1lIyNTb3VyY2UoSlNDOjpt
YWtlU291cmNlKFN0cmluZ0ltcGw6OmNyZWF0ZUZyb21MaXRlcmFsKHNfIyNuYW1lLCBsZW5ndGgp
LCB7IH0pKQogICAgICAgICAke21hY3JvUHJlZml4fV9GT1JFQUNIXyR7b2JqZWN0TWFjcm99X0JV
SUxUSU5fQ09ERShJTklUSUFMSVpFX0JVSUxUSU5fU09VUkNFX01FTUJFUlMpCkBAIC0xNjcsNyAr
MTY3LDcgQEAgaW5saW5lIEpTQzo6VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIAogICAgIGlm
ICghbV8jI25hbWUjI0V4ZWN1dGFibGUpIHtcXAogICAgICAgICBKU0M6OklkZW50aWZpZXIgZXhl
Y3V0YWJsZU5hbWUgPSBmdW5jdGlvbk5hbWUjI1B1YmxpY05hbWUoKTtcXAogICAgICAgICBpZiAo
b3ZlcnJpZGRlbk5hbWUpXFwKLSAgICAgICAgICAgIGV4ZWN1dGFibGVOYW1lID0gSlNDOjpJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKCZtX3ZtLCBvdmVycmlkZGVuTmFtZSk7XFwKKyAgICAgICAgICAg
IGV4ZWN1dGFibGVOYW1lID0gSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKG1fdm0sIG92ZXJy
aWRkZW5OYW1lKTtcXAogICAgICAgICBtXyMjbmFtZSMjRXhlY3V0YWJsZSA9IEpTQzo6V2VhazxK
U0M6OlVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlPihKU0M6OmNyZWF0ZUJ1aWx0aW5FeGVjdXRh
YmxlKG1fdm0sIG1fIyNuYW1lIyNTb3VyY2UsIGV4ZWN1dGFibGVOYW1lLCBzXyMjbmFtZSMjQ29u
c3RydWN0QWJpbGl0eSksIHRoaXMsICZtXyMjbmFtZSMjRXhlY3V0YWJsZSk7XFwKICAgICB9XFwK
ICAgICByZXR1cm4gbV8jI25hbWUjI0V4ZWN1dGFibGUuZ2V0KCk7XFwKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9TY3JpcHRGdW5jdGlvbkNhbGwuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9TY3JpcHRGdW5jdGlvbkNhbGwuY3Bw
CShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvU2Ny
aXB0RnVuY3Rpb25DYWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CkBAIC00MiwxNCArNDIsMTYgQEAgbmFtZXNwYWNlIERlcHJlY2F0ZWQg
ewogCiB2b2lkIFNjcmlwdENhbGxBcmd1bWVudEhhbmRsZXI6OmFwcGVuZEFyZ3VtZW50KGNvbnN0
IFN0cmluZyYgYXJndW1lbnQpCiB7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2sobV9leGVjKTsKLSAg
ICBtX2FyZ3VtZW50cy5hcHBlbmQoanNTdHJpbmcobV9leGVjLCBhcmd1bWVudCkpOworICAgIFZN
JiB2bSA9IG1fZXhlYy0+dm0oKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgbV9h
cmd1bWVudHMuYXBwZW5kKGpzU3RyaW5nKHZtLCBhcmd1bWVudCkpOwogfQogCiB2b2lkIFNjcmlw
dENhbGxBcmd1bWVudEhhbmRsZXI6OmFwcGVuZEFyZ3VtZW50KGNvbnN0IGNoYXIqIGFyZ3VtZW50
KQogewotICAgIEpTTG9ja0hvbGRlciBsb2NrKG1fZXhlYyk7Ci0gICAgbV9hcmd1bWVudHMuYXBw
ZW5kKGpzU3RyaW5nKG1fZXhlYywgU3RyaW5nKGFyZ3VtZW50KSkpOworICAgIFZNJiB2bSA9IG1f
ZXhlYy0+dm0oKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgbV9hcmd1bWVudHMu
YXBwZW5kKGpzU3RyaW5nKHZtLCBTdHJpbmcoYXJndW1lbnQpKSk7CiB9CiAKIHZvaWQgU2NyaXB0
Q2FsbEFyZ3VtZW50SGFuZGxlcjo6YXBwZW5kQXJndW1lbnQoSlNWYWx1ZSBhcmd1bWVudCkKQEAg
LTEwOCw3ICsxMTAsNyBAQCBKU1ZhbHVlIFNjcmlwdEZ1bmN0aW9uQ2FsbDo6Y2FsbChib29sJiBo
CiAgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKIAotICAgIEpTVmFsdWUgZnVuY3Rpb24gPSB0aGlzT2JqZWN0LT5nZXQo
bV9leGVjLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKG1fZXhlYywgbV9uYW1lKSk7CisgICAgSlNW
YWx1ZSBmdW5jdGlvbiA9IHRoaXNPYmplY3QtPmdldChtX2V4ZWMsIElkZW50aWZpZXI6OmZyb21T
dHJpbmcodm0sIG1fbmFtZSkpOwogICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
IHsKICAgICAgICAgaGFkRXhjZXB0aW9uID0gdHJ1ZTsKICAgICAgICAgcmV0dXJuIHsgfTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9TY3JpcHRWYWx1ZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2JpbmRpbmdzL1NjcmlwdFZhbHVlLmNwcAko
cmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2JpbmRpbmdzL1Njcmlw
dFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDYsIDIwMDcsIDIwMDgsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICogQ29weXJpZ2h0IChjKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC03OSw3ICs3OSw3IEBAIHN0YXRpYyBSZWZQdHI8
SlNPTjo6VmFsdWU+IGpzVG9JbnNwZWN0b3IKICAgICAgICAgVk0mIHZtID0gc2NyaXB0U3RhdGUu
dm0oKTsKICAgICAgICAgYXV0byBpbnNwZWN0b3JPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0
ZSgpOwogICAgICAgICBhdXRvJiBvYmplY3QgPSAqdmFsdWUuZ2V0T2JqZWN0KCk7Ci0gICAgICAg
IFByb3BlcnR5TmFtZUFycmF5IHByb3BlcnR5TmFtZXMoJnZtLCBQcm9wZXJ0eU5hbWVNb2RlOjpT
dHJpbmdzLCBQcml2YXRlU3ltYm9sTW9kZTo6RXhjbHVkZSk7CisgICAgICAgIFByb3BlcnR5TmFt
ZUFycmF5IHByb3BlcnR5TmFtZXModm0sIFByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3MsIFByaXZh
dGVTeW1ib2xNb2RlOjpFeGNsdWRlKTsKICAgICAgICAgb2JqZWN0Lm1ldGhvZFRhYmxlKHZtKS0+
Z2V0T3duUHJvcGVydHlOYW1lcygmb2JqZWN0LCAmc2NyaXB0U3RhdGUsIHByb3BlcnR5TmFtZXMs
IEVudW1lcmF0aW9uTW9kZSgpKTsKICAgICAgICAgZm9yIChhdXRvJiBuYW1lIDogcHJvcGVydHlO
YW1lcykgewogICAgICAgICAgICAgYXV0byBpbnNwZWN0b3JWYWx1ZSA9IGpzVG9JbnNwZWN0b3JW
YWx1ZShzY3JpcHRTdGF0ZSwgb2JqZWN0LmdldCgmc2NyaXB0U3RhdGUsIG5hbWUpLCBtYXhEZXB0
aCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvQnVpbHRpbkV4ZWN1dGFi
bGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvQnVp
bHRpbkV4ZWN1dGFibGVzLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J1aWx0aW5zL0J1aWx0aW5FeGVjdXRhYmxlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0yMTMsNyArMjEzLDcgQEAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIEJ1aWx0aW5FeGVj
dQogICAgICAgICBQYXJzZXJFcnJvciBlcnJvcjsKICAgICAgICAgSlNQYXJzZXJCdWlsdGluTW9k
ZSBidWlsdGluTW9kZSA9IGlzQnVpbHRpbkRlZmF1bHRDbGFzc0NvbnN0cnVjdG9yID8gSlNQYXJz
ZXJCdWlsdGluTW9kZTo6Tm90QnVpbHRpbiA6IEpTUGFyc2VyQnVpbHRpbk1vZGU6OkJ1aWx0aW47
CiAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxQcm9ncmFtTm9kZT4gcHJvZ3JhbSA9IHBhcnNlPFBy
b2dyYW1Ob2RlPigKLSAgICAgICAgICAgICZ2bSwgc291cmNlLCBJZGVudGlmaWVyKCksIGJ1aWx0
aW5Nb2RlLAorICAgICAgICAgICAgdm0sIHNvdXJjZSwgSWRlbnRpZmllcigpLCBidWlsdGluTW9k
ZSwKICAgICAgICAgICAgIEpTUGFyc2VyU3RyaWN0TW9kZTo6Tm90U3RyaWN0LCBKU1BhcnNlclNj
cmlwdE1vZGU6OkNsYXNzaWMsIFNvdXJjZVBhcnNlTW9kZTo6UHJvZ3JhbU1vZGUsIFN1cGVyQmlu
ZGluZzo6Tm90TmVlZGVkLCBlcnJvciwKICAgICAgICAgICAgICZwb3NpdGlvbkJlZm9yZUxhc3RO
ZXdsaW5lRnJvbVBhcnNlciwgY29uc3RydWN0b3JLaW5kKTsKIApAQCAtMjU0LDcgKzI1NCw3IEBA
IFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBCdWlsdGluRXhlY3UKICAgICAgICAgfQogICAg
IH0KIAotICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4ZWN1dGFibGUg
PSBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y3JlYXRlKCZ2bSwgc291cmNlLCAmbWV0YWRh
dGEsIGtpbmQsIGNvbnN0cnVjdEFiaWxpdHksIEpTUGFyc2VyU2NyaXB0TW9kZTo6Q2xhc3NpYywg
V1RGOjpudWxsb3B0LCBEZXJpdmVkQ29udGV4dFR5cGU6Ok5vbmUsIGlzQnVpbHRpbkRlZmF1bHRD
bGFzc0NvbnN0cnVjdG9yKTsKKyAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rp
b25FeGVjdXRhYmxlID0gVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OmNyZWF0ZSh2bSwgc291
cmNlLCAmbWV0YWRhdGEsIGtpbmQsIGNvbnN0cnVjdEFiaWxpdHksIEpTUGFyc2VyU2NyaXB0TW9k
ZTo6Q2xhc3NpYywgV1RGOjpudWxsb3B0LCBEZXJpdmVkQ29udGV4dFR5cGU6Ok5vbmUsIGlzQnVp
bHRpbkRlZmF1bHRDbGFzc0NvbnN0cnVjdG9yKTsKICAgICByZXR1cm4gZnVuY3Rpb25FeGVjdXRh
YmxlOwogfQogCkBAIC0yNzgsNyArMjc4LDcgQEAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUq
IEJ1aWx0aW5FeGVjdQogICAgIGlmICghbV91bmxpbmtlZEV4ZWN1dGFibGVzW2luZGV4XSkge1wK
ICAgICAgICAgSWRlbnRpZmllciBleGVjdXRhYmxlTmFtZSA9IG1fdm0ucHJvcGVydHlOYW1lcy0+
YnVpbHRpbk5hbWVzKCkuZnVuY3Rpb25OYW1lIyNQdWJsaWNOYW1lKCk7XAogICAgICAgICBpZiAo
b3ZlcnJpZGVOYW1lKVwKLSAgICAgICAgICAgIGV4ZWN1dGFibGVOYW1lID0gSWRlbnRpZmllcjo6
ZnJvbVN0cmluZygmbV92bSwgb3ZlcnJpZGVOYW1lKTtcCisgICAgICAgICAgICBleGVjdXRhYmxl
TmFtZSA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcobV92bSwgb3ZlcnJpZGVOYW1lKTtcCiAgICAg
ICAgIG1fdW5saW5rZWRFeGVjdXRhYmxlc1tpbmRleF0gPSBjcmVhdGVCdWlsdGluRXhlY3V0YWJs
ZShuYW1lIyNTb3VyY2UoKSwgZXhlY3V0YWJsZU5hbWUsIHNfIyNuYW1lIyNDb25zdHJ1Y3RBYmls
aXR5KTtcCiAgICAgfVwKICAgICByZXR1cm4gbV91bmxpbmtlZEV4ZWN1dGFibGVzW2luZGV4XTtc
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvQnVpbHRpbk5hbWVzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvQnVpbHRpbk5hbWVz
LmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5z
L0J1aWx0aW5OYW1lcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICog
Q29weXJpZ2h0IChDKSAyMDE3IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4u
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03Miw3ICs3Myw3IEBAIFN5bWJvbElt
cGw6OlN0YXRpY1N5bWJvbEltcGwgcG9seVByb3RvUHIKIAogLy8gV2UgdHJlYXQgdGhlIGRvbGxh
clZNIG5hbWUgYXMgYSBzcGVjaWFsIGNhc2UgYmVsb3cgZm9yICR2bSAoYmVjYXVzZSBDb21tb25J
ZGVudGlmaWVycyBkb2VzIG5vdAogLy8geWV0IHN1cHBvcnQgdGhlICQgY2hhcmFjdGVyKS4KLUJ1
aWx0aW5OYW1lczo6QnVpbHRpbk5hbWVzKFZNKiB2bSwgQ29tbW9uSWRlbnRpZmllcnMqIGNvbW1v
bklkZW50aWZpZXJzKQorQnVpbHRpbk5hbWVzOjpCdWlsdGluTmFtZXMoVk0mIHZtLCBDb21tb25J
ZGVudGlmaWVycyogY29tbW9uSWRlbnRpZmllcnMpCiAgICAgOiBtX2VtcHR5SWRlbnRpZmllcihj
b21tb25JZGVudGlmaWVycy0+ZW1wdHlJZGVudGlmaWVyKQogICAgIEpTQ19GT1JFQUNIX0JVSUxU
SU5fRlVOQ1RJT05fTkFNRShJTklUSUFMSVpFX0JVSUxUSU5fTkFNRVNfSU5fSlNDKQogICAgIEpT
Q19DT01NT05fUFJJVkFURV9JREVOVElGSUVSU19FQUNIX1BST1BFUlRZX05BTUUoSU5JVElBTEla
RV9CVUlMVElOX05BTUVTX0lOX0pTQykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWls
dGlucy9CdWlsdGluTmFtZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YnVpbHRpbnMvQnVpbHRpbk5hbWVzLmgJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9idWlsdGlucy9CdWlsdGluTmFtZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0x
OTgsNyArMTk4LDcgQEAgY2xhc3MgQnVpbHRpbk5hbWVzIHsKICAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShCdWlsdGluTmFtZXMpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICAKIHB1Ymxp
YzoKLSAgICBCdWlsdGluTmFtZXMoVk0qLCBDb21tb25JZGVudGlmaWVycyopOworICAgIEJ1aWx0
aW5OYW1lcyhWTSYsIENvbW1vbklkZW50aWZpZXJzKik7CiAKICAgICBTeW1ib2xJbXBsKiBsb29r
VXBQcml2YXRlTmFtZShjb25zdCBJZGVudGlmaWVyJikgY29uc3Q7CiAgICAgSWRlbnRpZmllciBn
ZXRQdWJsaWNOYW1lKFZNJiwgU3ltYm9sSW1wbCopIGNvbnN0OwpAQCAtMjM3LDEwICsyMzcsMTAg
QEAgaW5saW5lIFN5bWJvbEltcGwqIEJ1aWx0aW5OYW1lczo6bG9va1VwUAogaW5saW5lIElkZW50
aWZpZXIgQnVpbHRpbk5hbWVzOjpnZXRQdWJsaWNOYW1lKFZNJiB2bSwgU3ltYm9sSW1wbCogc3lt
Ym9sKSBjb25zdAogewogICAgIGlmIChzeW1ib2wtPmlzUHJpdmF0ZSgpKQotICAgICAgICByZXR1
cm4gSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIHN5bWJvbCk7CisgICAgICAgIHJldHVybiBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBzeW1ib2wpOwogICAgIC8vIFdlIGhhdmUgc3BlY2lh
bCBoYW5kbGluZyBmb3Igd2VsbC1rbm93biBzeW1ib2xzLgogICAgIEFTU0VSVChzeW1ib2wtPnN0
YXJ0c1dpdGgoIlN5bWJvbC4iKSk7Ci0gICAgcmV0dXJuIElkZW50aWZpZXI6OmZyb21TdHJpbmco
JnZtLCBtYWtlU3RyaW5nKFN0cmluZyhzeW1ib2wtPnN1YnN0cmluZyhzdHJsZW4oIlN5bWJvbC4i
KSkpLCAiU3ltYm9sIikpOworICAgIHJldHVybiBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBt
YWtlU3RyaW5nKFN0cmluZyhzeW1ib2wtPnN1YnN0cmluZyhzdHJsZW4oIlN5bWJvbC4iKSkpLCAi
U3ltYm9sIikpOwogfQogCiBpbmxpbmUgdm9pZCBCdWlsdGluTmFtZXM6OmNoZWNrUHVibGljVG9Q
cml2YXRlTWFwQ29uc2lzdGVuY3koVW5pcXVlZFN0cmluZ0ltcGwqIHB1YmxpY05hbWUsIFVuaXF1
ZWRTdHJpbmdJbXBsKiBwcml2YXRlTmFtZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTcgWXVzdWtl
IFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgotICogQ29weXJpZ2h0IChDKSAyMDE3LTIw
MTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3
LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC00NCw3ICs0NCw3IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogdGVtcGxh
dGU8Y2xhc3MgQmxvY2s+Ci1WTSogQnl0ZWNvZGVEdW1wZXI8QmxvY2s+Ojp2bSgpIGNvbnN0CitW
TSYgQnl0ZWNvZGVEdW1wZXI8QmxvY2s+Ojp2bSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGJsb2Nr
KCktPnZtKCk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNv
ZGVEdW1wZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Qnl0ZWNvZGVEdW1wZXIuaAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2
IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE3IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVh
QGdtYWlsLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTcwLDcgKzcw
LDcgQEAgcHJpdmF0ZToKIAogICAgIEJsb2NrKiBibG9jaygpIGNvbnN0IHsgcmV0dXJuIG1fYmxv
Y2s7IH0KIAotICAgIEFMV0FZU19JTkxJTkUgVk0qIHZtKCkgY29uc3Q7CisgICAgQUxXQVlTX0lO
TElORSBWTSYgdm0oKSBjb25zdDsKIAogICAgIENTdHJpbmcgcmVnaXN0ZXJOYW1lKGludCByKSBj
b25zdDsKICAgICBDU3RyaW5nIGNvbnN0YW50TmFtZShpbnQgaW5kZXgpIGNvbnN0OwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlR2VuZXJhdG9yaWZpY2F0aW9u
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNv
ZGVHZW5lcmF0b3JpZmljYXRpb24uY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVHZW5lcmF0b3JpZmljYXRpb24uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02OCw3ICs2OCw3IEBAIHB1YmxpYzoKICAgICAgICAgLCBtX2NvZGVCbG9j
ayhjb2RlQmxvY2spCiAgICAgICAgICwgbV9pbnN0cnVjdGlvbnMoaW5zdHJ1Y3Rpb25zKQogICAg
ICAgICAsIG1fZ3JhcGgobV9jb2RlQmxvY2ssIG1faW5zdHJ1Y3Rpb25zKQotICAgICAgICAsIG1f
Z2VuZXJhdG9yRnJhbWVTeW1ib2xUYWJsZSgqY29kZUJsb2NrLT52bSgpLCBnZW5lcmF0b3JGcmFt
ZVN5bWJvbFRhYmxlKQorICAgICAgICAsIG1fZ2VuZXJhdG9yRnJhbWVTeW1ib2xUYWJsZShjb2Rl
QmxvY2stPnZtKCksIGdlbmVyYXRvckZyYW1lU3ltYm9sVGFibGUpCiAgICAgICAgICwgbV9nZW5l
cmF0b3JGcmFtZVN5bWJvbFRhYmxlSW5kZXgoZ2VuZXJhdG9yRnJhbWVTeW1ib2xUYWJsZUluZGV4
KQogICAgIHsKICAgICAgICAgZm9yIChCeXRlY29kZUJhc2ljQmxvY2sqIGJsb2NrIDogbV9ncmFw
aCkgewpAQCAtMTU4LDcgKzE1OCw3IEBAIHByaXZhdGU6CiAgICAgICAgIGlmIChPcHRpb25hbDxT
dG9yYWdlPiBzdG9yYWdlID0gbV9zdG9yYWdlc1tpbmRleF0pCiAgICAgICAgICAgICByZXR1cm4g
KnN0b3JhZ2U7CiAKLSAgICAgICAgSWRlbnRpZmllciBpZGVudGlmaWVyID0gSWRlbnRpZmllcjo6
ZnJvbSgmdm0sIGluZGV4KTsKKyAgICAgICAgSWRlbnRpZmllciBpZGVudGlmaWVyID0gSWRlbnRp
Zmllcjo6ZnJvbSh2bSwgaW5kZXgpOwogICAgICAgICB1bnNpZ25lZCBpZGVudGlmaWVySW5kZXgg
PSBtX2NvZGVCbG9jay0+bnVtYmVyT2ZJZGVudGlmaWVycygpOwogICAgICAgICBtX2NvZGVCbG9j
ay0+YWRkSWRlbnRpZmllcihpZGVudGlmaWVyKTsKICAgICAgICAgU2NvcGVPZmZzZXQgc2NvcGVP
ZmZzZXQgPSBtX2dlbmVyYXRvckZyYW1lU3ltYm9sVGFibGUtPnRha2VOZXh0U2NvcGVPZmZzZXQo
Tm9Mb2NraW5nTmVjZXNzYXJ5KTsKQEAgLTIxMSw3ICsyMTEsNyBAQCB2b2lkIEJ5dGVjb2RlR2Vu
ZXJhdG9yaWZpY2F0aW9uOjpydW4oKQogewogICAgIC8vIFdlIGNhbGN1bGF0ZSB0aGUgbGl2ZW5l
c3MgYXQgZWFjaCBtZXJnZSBwb2ludC4gVGhpcyBnaXZlcyB1cyB0aGUgaW5mb3JtYXRpb24gd2hp
Y2ggcmVnaXN0ZXJzIHNob3VsZCBiZSBzYXZlZCBhbmQgcmVzdW1lZCBjb25zZXJ2YXRpdmVseS4K
IAotICAgIFZNJiB2bSA9ICptX2J5dGVjb2RlR2VuZXJhdG9yLnZtKCk7CisgICAgVk0mIHZtID0g
bV9ieXRlY29kZUdlbmVyYXRvci52bSgpOwogICAgIHsKICAgICAgICAgR2VuZXJhdG9yTGl2ZW5l
c3NBbmFseXNpcyBwYXNzKCp0aGlzKTsKICAgICAgICAgcGFzcy5ydW4obV9jb2RlQmxvY2ssIG1f
aW5zdHJ1Y3Rpb25zKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRl
Y29kZUludHJpbnNpY1JlZ2lzdHJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVJbnRyaW5zaWNSZWdpc3RyeS5jcHAJKHJldmlzaW9uIDI0
OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUludHJpbnNp
Y1JlZ2lzdHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgWXVzdWtlIFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPi4KLSAq
IENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTA0LDEyICsxMDQsMTIgQEAg
Qnl0ZWNvZGVJbnRyaW5zaWNOb2RlOjpFbWl0dGVyVHlwZSBCeXRlYwogCiBKU1ZhbHVlIEJ5dGVj
b2RlSW50cmluc2ljUmVnaXN0cnk6OnNlbnRpbmVsTWFwQnVja2V0VmFsdWUoQnl0ZWNvZGVHZW5l
cmF0b3ImIGdlbmVyYXRvcikKIHsKLSAgICByZXR1cm4gZ2VuZXJhdG9yLnZtKCktPnNlbnRpbmVs
TWFwQnVja2V0KCk7CisgICAgcmV0dXJuIGdlbmVyYXRvci52bSgpLnNlbnRpbmVsTWFwQnVja2V0
KCk7CiB9CiAKIEpTVmFsdWUgQnl0ZWNvZGVJbnRyaW5zaWNSZWdpc3RyeTo6c2VudGluZWxTZXRC
dWNrZXRWYWx1ZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yKQogewotICAgIHJldHVybiBn
ZW5lcmF0b3Iudm0oKS0+c2VudGluZWxTZXRCdWNrZXQoKTsKKyAgICByZXR1cm4gZ2VuZXJhdG9y
LnZtKCkuc2VudGluZWxTZXRCdWNrZXQoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbFZhcmlhbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbFZhcmlhbnQuaAkocmV2aXNp
b24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxWYXJpYW50
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDE0LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC04NywyMSArODcsMjEgQEAgcHVibGljOgogICAgIAogICAg
IEludGVybmFsRnVuY3Rpb24qIGludGVybmFsRnVuY3Rpb24oKSBjb25zdAogICAgIHsKLSAgICAg
ICAgcmV0dXJuIGpzRHluYW1pY0Nhc3Q8SW50ZXJuYWxGdW5jdGlvbio+KCptX2NhbGxlZS0+dm0o
KSwgbV9jYWxsZWUpOworICAgICAgICByZXR1cm4ganNEeW5hbWljQ2FzdDxJbnRlcm5hbEZ1bmN0
aW9uKj4obV9jYWxsZWUtPnZtKCksIG1fY2FsbGVlKTsKICAgICB9CiAgICAgCiAgICAgSlNGdW5j
dGlvbiogZnVuY3Rpb24oKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIGpzRHluYW1pY0Nh
c3Q8SlNGdW5jdGlvbio+KCptX2NhbGxlZS0+dm0oKSwgbV9jYWxsZWUpOworICAgICAgICByZXR1
cm4ganNEeW5hbWljQ2FzdDxKU0Z1bmN0aW9uKj4obV9jYWxsZWUtPnZtKCksIG1fY2FsbGVlKTsK
ICAgICB9CiAgICAgCi0gICAgYm9vbCBpc0Nsb3N1cmVDYWxsKCkgY29uc3QgeyByZXR1cm4gISFq
c0R5bmFtaWNDYXN0PEV4ZWN1dGFibGVCYXNlKj4oKm1fY2FsbGVlLT52bSgpLCBtX2NhbGxlZSk7
IH0KKyAgICBib29sIGlzQ2xvc3VyZUNhbGwoKSBjb25zdCB7IHJldHVybiAhIWpzRHluYW1pY0Nh
c3Q8RXhlY3V0YWJsZUJhc2UqPihtX2NhbGxlZS0+dm0oKSwgbV9jYWxsZWUpOyB9CiAgICAgCiAg
ICAgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUoKSBjb25zdAogICAgIHsKICAgICAgICAgaWYg
KEpTRnVuY3Rpb24qIGZ1bmN0aW9uID0gdGhpcy0+ZnVuY3Rpb24oKSkKICAgICAgICAgICAgIHJl
dHVybiBmdW5jdGlvbi0+ZXhlY3V0YWJsZSgpOwotICAgICAgICByZXR1cm4ganNEeW5hbWljQ2Fz
dDxFeGVjdXRhYmxlQmFzZSo+KCptX2NhbGxlZS0+dm0oKSwgbV9jYWxsZWUpOworICAgICAgICBy
ZXR1cm4ganNEeW5hbWljQ2FzdDxFeGVjdXRhYmxlQmFzZSo+KG1fY2FsbGVlLT52bSgpLCBtX2Nh
bGxlZSk7CiAgICAgfQogICAgIAogICAgIEpTQ2VsbCogbm9uRXhlY3V0YWJsZUNhbGxlZSgpIGNv
bnN0CkBAIC0xMjAsMTQgKzEyMCwxNCBAQCBwdWJsaWM6CiAgICAgRnVuY3Rpb25FeGVjdXRhYmxl
KiBmdW5jdGlvbkV4ZWN1dGFibGUoKSBjb25zdAogICAgIHsKICAgICAgICAgaWYgKEV4ZWN1dGFi
bGVCYXNlKiBleGVjdXRhYmxlID0gdGhpcy0+ZXhlY3V0YWJsZSgpKQotICAgICAgICAgICAgcmV0
dXJuIGpzRHluYW1pY0Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oKm1fY2FsbGVlLT52bSgpLCBl
eGVjdXRhYmxlKTsKKyAgICAgICAgICAgIHJldHVybiBqc0R5bmFtaWNDYXN0PEZ1bmN0aW9uRXhl
Y3V0YWJsZSo+KG1fY2FsbGVlLT52bSgpLCBleGVjdXRhYmxlKTsKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAgICAgfQogCiAgICAgTmF0aXZlRXhlY3V0YWJsZSogbmF0aXZlRXhlY3V0YWJsZSgp
IGNvbnN0CiAgICAgewogICAgICAgICBpZiAoRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUgPSB0
aGlzLT5leGVjdXRhYmxlKCkpCi0gICAgICAgICAgICByZXR1cm4ganNEeW5hbWljQ2FzdDxOYXRp
dmVFeGVjdXRhYmxlKj4oKm1fY2FsbGVlLT52bSgpLCBleGVjdXRhYmxlKTsKKyAgICAgICAgICAg
IHJldHVybiBqc0R5bmFtaWNDYXN0PE5hdGl2ZUV4ZWN1dGFibGUqPihtX2NhbGxlZS0+dm0oKSwg
ZXhlY3V0YWJsZSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDI0
OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMjksNyArMjI5LDcgQEAgdm9pZCBDb2RlQmxvY2s6OmR1bXBTb3Vy
Y2UoUHJpbnRTdHJlYW0mIAogICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhl
Y3V0YWJsZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oZXhlY3V0YWJs
ZSk7CiAgICAgICAgIFN0cmluZ1ZpZXcgc291cmNlID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5zb3Vy
Y2UoKS5wcm92aWRlcigpLT5nZXRSYW5nZSgKICAgICAgICAgICAgIGZ1bmN0aW9uRXhlY3V0YWJs
ZS0+cGFyYW1ldGVyc1N0YXJ0T2Zmc2V0KCksCi0gICAgICAgICAgICBmdW5jdGlvbkV4ZWN1dGFi
bGUtPnR5cGVQcm9maWxpbmdFbmRPZmZzZXQoKnZtKCkpICsgMSk7IC8vIFR5cGUgcHJvZmlsaW5n
IGVuZCBvZmZzZXQgaXMgdGhlIGNoYXJhY3RlciBiZWZvcmUgdGhlICd9Jy4KKyAgICAgICAgICAg
IGZ1bmN0aW9uRXhlY3V0YWJsZS0+dHlwZVByb2ZpbGluZ0VuZE9mZnNldCh2bSgpKSArIDEpOyAv
LyBUeXBlIHByb2ZpbGluZyBlbmQgb2Zmc2V0IGlzIHRoZSBjaGFyYWN0ZXIgYmVmb3JlIHRoZSAn
fScuCiAgICAgICAgIAogICAgICAgICBvdXQucHJpbnQoImZ1bmN0aW9uICIsIGluZmVycmVkTmFt
ZSgpLCBzb3VyY2UpOwogICAgICAgICByZXR1cm47CkBAIC0yODIsOCArMjgyLDggQEAgcHJpdmF0
ZToKIAogfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCiAKLUNvZGVCbG9jazo6Q29kZUJsb2NrKFZN
KiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIENvcHlQYXJzZWRCbG9ja1RhZywgQ29kZUJsb2Nr
JiBvdGhlcikKLSAgICA6IEpTQ2VsbCgqdm0sIHN0cnVjdHVyZSkKK0NvZGVCbG9jazo6Q29kZUJs
b2NrKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIENvcHlQYXJzZWRCbG9ja1RhZywgQ29k
ZUJsb2NrJiBvdGhlcikKKyAgICA6IEpTQ2VsbCh2bSwgc3RydWN0dXJlKQogICAgICwgbV9nbG9i
YWxPYmplY3Qob3RoZXIubV9nbG9iYWxPYmplY3QpCiAgICAgLCBtX3Nob3VsZEFsd2F5c0JlSW5s
aW5lZCh0cnVlKQogI2lmIEVOQUJMRShKSVQpCkBAIC0zMDEsOCArMzAxLDggQEAgQ29kZUJsb2Nr
OjpDb2RlQmxvY2soVk0qIHZtLCBTdHJ1Y3R1cmUqIAogICAgICwgbV9ieXRlY29kZUNvc3Qob3Ro
ZXIubV9ieXRlY29kZUNvc3QpCiAgICAgLCBtX3Njb3BlUmVnaXN0ZXIob3RoZXIubV9zY29wZVJl
Z2lzdGVyKQogICAgICwgbV9oYXNoKG90aGVyLm1faGFzaCkKLSAgICAsIG1fdW5saW5rZWRDb2Rl
KCpvdGhlci52bSgpLCB0aGlzLCBvdGhlci5tX3VubGlua2VkQ29kZS5nZXQoKSkKLSAgICAsIG1f
b3duZXJFeGVjdXRhYmxlKCpvdGhlci52bSgpLCB0aGlzLCBvdGhlci5tX293bmVyRXhlY3V0YWJs
ZS5nZXQoKSkKKyAgICAsIG1fdW5saW5rZWRDb2RlKG90aGVyLnZtKCksIHRoaXMsIG90aGVyLm1f
dW5saW5rZWRDb2RlLmdldCgpKQorICAgICwgbV9vd25lckV4ZWN1dGFibGUob3RoZXIudm0oKSwg
dGhpcywgb3RoZXIubV9vd25lckV4ZWN1dGFibGUuZ2V0KCkpCiAgICAgLCBtX3ZtKG90aGVyLm1f
dm0pCiAgICAgLCBtX2luc3RydWN0aW9uc1Jhd1BvaW50ZXIob3RoZXIubV9pbnN0cnVjdGlvbnNS
YXdQb2ludGVyKQogICAgICwgbV9jb25zdGFudFJlZ2lzdGVycyhvdGhlci5tX2NvbnN0YW50UmVn
aXN0ZXJzKQpAQCAtMzIxLDcgKzMyMSw3IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFZNKiB2bSwg
U3RydWN0dXJlKiAKICAgICBBU1NFUlQoc291cmNlKCkucHJvdmlkZXIoKSk7CiAgICAgc2V0TnVt
UGFyYW1ldGVycyhvdGhlci5udW1QYXJhbWV0ZXJzKCkpOwogICAgIAotICAgIHZtLT5oZWFwLmNv
ZGVCbG9ja1NldCgpLmFkZCh0aGlzKTsKKyAgICB2bS5oZWFwLmNvZGVCbG9ja1NldCgpLmFkZCh0
aGlzKTsKIH0KIAogdm9pZCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgQ29weVBh
cnNlZEJsb2NrVGFnLCBDb2RlQmxvY2smIG90aGVyKQpAQCAtMzQxLDkgKzM0MSw5IEBAIHZvaWQg
Q29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEMKICAgICB9CiB9CiAKLUNvZGVCbG9j
azo6Q29kZUJsb2NrKFZNKiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFNjcmlwdEV4ZWN1dGFi
bGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rZWRDb2RlQmxvY2sqIHVubGlua2VkQ29kZUJsb2Nr
LCBKU1Njb3BlKiBzY29wZSkKLSAgICA6IEpTQ2VsbCgqdm0sIHN0cnVjdHVyZSkKLSAgICAsIG1f
Z2xvYmFsT2JqZWN0KCp2bSwgdGhpcywgc2NvcGUtPmdsb2JhbE9iamVjdCgqdm0pKQorQ29kZUJs
b2NrOjpDb2RlQmxvY2soVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgU2NyaXB0RXhlY3V0
YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmtlZENvZGVCbG9jayogdW5saW5rZWRDb2RlQmxv
Y2ssIEpTU2NvcGUqIHNjb3BlKQorICAgIDogSlNDZWxsKHZtLCBzdHJ1Y3R1cmUpCisgICAgLCBt
X2dsb2JhbE9iamVjdCh2bSwgdGhpcywgc2NvcGUtPmdsb2JhbE9iamVjdCh2bSkpCiAgICAgLCBt
X3Nob3VsZEFsd2F5c0JlSW5saW5lZCh0cnVlKQogI2lmIEVOQUJMRShKSVQpCiAgICAgLCBtX2Nh
cGFiaWxpdHlMZXZlbFN0YXRlKERGRzo6Q2FwYWJpbGl0eUxldmVsTm90U2V0KQpAQCAtMzU3LDkg
KzM1Nyw5IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFZNKiB2bSwgU3RydWN0dXJlKiAKICAgICAs
IG1fc3RlcHBpbmdNb2RlKFN0ZXBwaW5nTW9kZURpc2FibGVkKQogICAgICwgbV9udW1CcmVha3Bv
aW50cygwKQogICAgICwgbV9zY29wZVJlZ2lzdGVyKHVubGlua2VkQ29kZUJsb2NrLT5zY29wZVJl
Z2lzdGVyKCkpCi0gICAgLCBtX3VubGlua2VkQ29kZSgqdm0sIHRoaXMsIHVubGlua2VkQ29kZUJs
b2NrKQotICAgICwgbV9vd25lckV4ZWN1dGFibGUoKnZtLCB0aGlzLCBvd25lckV4ZWN1dGFibGUp
Ci0gICAgLCBtX3ZtKHZtKQorICAgICwgbV91bmxpbmtlZENvZGUodm0sIHRoaXMsIHVubGlua2Vk
Q29kZUJsb2NrKQorICAgICwgbV9vd25lckV4ZWN1dGFibGUodm0sIHRoaXMsIG93bmVyRXhlY3V0
YWJsZSkKKyAgICAsIG1fdm0oJnZtKQogICAgICwgbV9pbnN0cnVjdGlvbnNSYXdQb2ludGVyKHVu
bGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5yYXdQb2ludGVyKCkpCiAgICAgLCBtX29z
ckV4aXRDb3VudGVyKDApCiAgICAgLCBtX29wdGltaXphdGlvbkRlbGF5Q291bnRlcigwKQpAQCAt
MzczLDcgKzM3Myw3IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFZNKiB2bSwgU3RydWN0dXJlKiAK
ICAgICBBU1NFUlQoc291cmNlKCkucHJvdmlkZXIoKSk7CiAgICAgc2V0TnVtUGFyYW1ldGVycyh1
bmxpbmtlZENvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKTsKICAgICAKLSAgICB2bS0+aGVhcC5j
b2RlQmxvY2tTZXQoKS5hZGQodGhpcyk7CisgICAgdm0uaGVhcC5jb2RlQmxvY2tTZXQoKS5hZGQo
dGhpcyk7CiB9CiAKIC8vIFRoZSBtYWluIHB1cnBvc2Ugb2YgdGhpcyBmdW5jdGlvbiBpcyB0byBn
ZW5lcmF0ZSBsaW5rZWQgYnl0ZWNvZGUgZnJvbSB1bmxpbmtlZCBieXRlY29kZS4gVGhlIHByb2Nl
c3MKQEAgLTg4MCw3ICs4ODAsNyBAQCB2b2lkIENvZGVCbG9jazo6c2V0Q29uc3RhbnRJZGVudGlm
aWVyU2V0CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAKICAg
ICAgICAgZm9yIChhdXRvIHNldEVudHJ5IDogc2V0KSB7Ci0gICAgICAgICAgICBKU1N0cmluZyog
anNTdHJpbmcgPSBqc093bmVkU3RyaW5nKCZ2bSwgc2V0RW50cnkuZ2V0KCkpOyAKKyAgICAgICAg
ICAgIEpTU3RyaW5nKiBqc1N0cmluZyA9IGpzT3duZWRTdHJpbmcodm0sIHNldEVudHJ5LmdldCgp
KTsgCiAgICAgICAgICAgICBqc1NldC0+YWRkKGV4ZWMsIGpzU3RyaW5nKTsKICAgICAgICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAgICAgICAgIH0KQEAgLTk0MCw3
ICs5NDAsNyBAQCB2b2lkIENvZGVCbG9jazo6c2V0TnVtUGFyYW1ldGVycyhpbnQgbmV3CiB7CiAg
ICAgbV9udW1QYXJhbWV0ZXJzID0gbmV3VmFsdWU7CiAKLSAgICBtX2FyZ3VtZW50VmFsdWVQcm9m
aWxlcyA9IFJlZkNvdW50ZWRBcnJheTxWYWx1ZVByb2ZpbGU+KHZtKCktPmNhblVzZUpJVCgpID8g
bmV3VmFsdWUgOiAwKTsKKyAgICBtX2FyZ3VtZW50VmFsdWVQcm9maWxlcyA9IFJlZkNvdW50ZWRB
cnJheTxWYWx1ZVByb2ZpbGU+KHZtKCkuY2FuVXNlSklUKCkgPyBuZXdWYWx1ZSA6IDApOwogfQog
CiBDb2RlQmxvY2sqIENvZGVCbG9jazo6c3BlY2lhbE9TUkVudHJ5QmxvY2tPck51bGwoKQpAQCAt
MTM2NSw3ICsxMzY1LDcgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplQmFzZWxpbmVKSVRJbmxp
bgogewogICAgIGlmIChhdXRvKiBqaXREYXRhID0gbV9qaXREYXRhLmdldCgpKSB7CiAgICAgICAg
IGZvciAoQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gOiBqaXREYXRhLT5tX2NhbGxMaW5rSW5m
b3MpCi0gICAgICAgICAgICBjYWxsTGlua0luZm8tPnZpc2l0V2Vhaygqdm0oKSk7CisgICAgICAg
ICAgICBjYWxsTGlua0luZm8tPnZpc2l0V2Vhayh2bSgpKTsKIAogICAgICAgICBmb3IgKFN0cnVj
dHVyZVN0dWJJbmZvKiBzdHViSW5mbyA6IGppdERhdGEtPm1fc3R1YkluZm9zKQogICAgICAgICAg
ICAgc3R1YkluZm8tPnZpc2l0V2Vha1JlZmVyZW5jZXModGhpcyk7CkBAIC0xOTM2LDkgKzE5MzYs
OSBAQCB2b2lkIENvZGVCbG9jazo6dW5saW5rSW5jb21pbmdDYWxscygpCiAgICAgfQogICAgIGlm
IChqaXREYXRhKSB7CiAgICAgICAgIHdoaWxlIChqaXREYXRhLT5tX2luY29taW5nQ2FsbHMuYmVn
aW4oKSAhPSBqaXREYXRhLT5tX2luY29taW5nQ2FsbHMuZW5kKCkpCi0gICAgICAgICAgICBqaXRE
YXRhLT5tX2luY29taW5nQ2FsbHMuYmVnaW4oKS0+dW5saW5rKCp2bSgpKTsKKyAgICAgICAgICAg
IGppdERhdGEtPm1faW5jb21pbmdDYWxscy5iZWdpbigpLT51bmxpbmsodm0oKSk7CiAgICAgICAg
IHdoaWxlIChqaXREYXRhLT5tX2luY29taW5nUG9seW1vcnBoaWNDYWxscy5iZWdpbigpICE9IGpp
dERhdGEtPm1faW5jb21pbmdQb2x5bW9ycGhpY0NhbGxzLmVuZCgpKQotICAgICAgICAgICAgaml0
RGF0YS0+bV9pbmNvbWluZ1BvbHltb3JwaGljQ2FsbHMuYmVnaW4oKS0+dW5saW5rKCp2bSgpKTsK
KyAgICAgICAgICAgIGppdERhdGEtPm1faW5jb21pbmdQb2x5bW9ycGhpY0NhbGxzLmJlZ2luKCkt
PnVubGluayh2bSgpKTsKICAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKIH0KQEAgLTE5NTcs
NyArMTk1Nyw3IEBAIENvZGVCbG9jayogQ29kZUJsb2NrOjpuZXdSZXBsYWNlbWVudCgpCiAjaWYg
RU5BQkxFKEpJVCkKIENvZGVCbG9jayogQ29kZUJsb2NrOjpyZXBsYWNlbWVudCgpCiB7Ci0gICAg
Y29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8gPSB0aGlzLT5jbGFzc0luZm8oKnZtKCkpOworICAg
IGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvID0gdGhpcy0+Y2xhc3NJbmZvKHZtKCkpOwogCiAg
ICAgaWYgKGNsYXNzSW5mbyA9PSBGdW5jdGlvbkNvZGVCbG9jazo6aW5mbygpKQogICAgICAgICBy
ZXR1cm4ganNDYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgpKS0+Y29k
ZUJsb2NrRm9yKGlzQ29uc3RydWN0b3IoKSA/IENvZGVGb3JDb25zdHJ1Y3QgOiBDb2RlRm9yQ2Fs
bCk7CkBAIC0xOTc3LDcgKzE5NzcsNyBAQCBDb2RlQmxvY2sqIENvZGVCbG9jazo6cmVwbGFjZW1l
bnQoKQogCiBERkc6OkNhcGFiaWxpdHlMZXZlbCBDb2RlQmxvY2s6OmNvbXB1dGVDYXBhYmlsaXR5
TGV2ZWwoKQogewotICAgIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvID0gdGhpcy0+Y2xhc3NJ
bmZvKCp2bSgpKTsKKyAgICBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbyA9IHRoaXMtPmNsYXNz
SW5mbyh2bSgpKTsKIAogICAgIGlmIChjbGFzc0luZm8gPT0gRnVuY3Rpb25Db2RlQmxvY2s6Omlu
Zm8oKSkgewogICAgICAgICBpZiAoaXNDb25zdHJ1Y3RvcigpKQpAQCAtMjIzMSw3ICsyMjMxLDcg
QEAgdm9pZCBDb2RlQmxvY2s6Om5vdGljZUluY29taW5nQ2FsbChFeGVjUwogCiAgICAgLy8gUmVj
dXJzaXZlIGNhbGxzIHdvbid0IGJlIGlubGluZWQuCiAgICAgUmVjdXJzaW9uQ2hlY2tGdW5jdG9y
IGZ1bmN0b3IoY2FsbGVyRnJhbWUsIHRoaXMsIE9wdGlvbnM6Om1heGltdW1JbmxpbmluZ0RlcHRo
KCkpOwotICAgIHZtKCktPnRvcENhbGxGcmFtZS0+aXRlcmF0ZShmdW5jdG9yKTsKKyAgICB2bSgp
LnRvcENhbGxGcmFtZS0+aXRlcmF0ZShmdW5jdG9yKTsKIAogICAgIGlmIChmdW5jdG9yLmRpZFJl
Y3Vyc2UoKSkgewogICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZUNhbGxMaW5rKCkpCkBAIC0y
OTQ4LDcgKzI5NDgsNyBAQCBTdHJpbmcgQ29kZUJsb2NrOjpuYW1lRm9yUmVnaXN0ZXIoVmlydHVh
CiAgICAgZm9yIChhdXRvJiBjb25zdGFudFJlZ2lzdGVyIDogbV9jb25zdGFudFJlZ2lzdGVycykg
ewogICAgICAgICBpZiAoY29uc3RhbnRSZWdpc3Rlci5nZXQoKS5pc0VtcHR5KCkpCiAgICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSA9IGpz
RHluYW1pY0Nhc3Q8U3ltYm9sVGFibGUqPigqdm0oKSwgY29uc3RhbnRSZWdpc3Rlci5nZXQoKSkp
IHsKKyAgICAgICAgaWYgKFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSA9IGpzRHluYW1pY0Nhc3Q8
U3ltYm9sVGFibGUqPih2bSgpLCBjb25zdGFudFJlZ2lzdGVyLmdldCgpKSkgewogICAgICAgICAg
ICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihzeW1ib2xUYWJsZS0+bV9sb2NrKTsKICAgICAg
ICAgICAgIGF1dG8gZW5kID0gc3ltYm9sVGFibGUtPmVuZChsb2NrZXIpOwogICAgICAgICAgICAg
Zm9yIChhdXRvIHB0ciA9IHN5bWJvbFRhYmxlLT5iZWdpbihsb2NrZXIpOyBwdHIgIT0gZW5kOyAr
K3B0cikgewpAQCAtMzE3NCwxMSArMzE3NCwxMSBAQCB2b2lkIENvZGVCbG9jazo6aW5zZXJ0QmFz
aWNCbG9ja0JvdW5kYXJpCiAgICAgICAgIC8vIG06IG9wX3Byb2ZpbGVfY29udHJvbF9mbG93CiAg
ICAgICAgIGlmIChiYXNpY0Jsb2NrRW5kT2Zmc2V0IDwgYmFzaWNCbG9ja1N0YXJ0T2Zmc2V0KSB7
CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChpICsgMSA8IG9mZnNldHNMZW5ndGgpOyAvLyBX
ZSBzaG91bGQgbmV2ZXIgZW5jb3VudGVyIGR1bW15IGJsb2NrcyBhdCB0aGUgZW5kIG9mIGEgQ29k
ZUJsb2NrLgotICAgICAgICAgICAgbWV0YWRhdGEubV9iYXNpY0Jsb2NrTG9jYXRpb24gPSB2bSgp
LT5jb250cm9sRmxvd1Byb2ZpbGVyKCktPmR1bW15QmFzaWNCbG9jaygpOworICAgICAgICAgICAg
bWV0YWRhdGEubV9iYXNpY0Jsb2NrTG9jYXRpb24gPSB2bSgpLmNvbnRyb2xGbG93UHJvZmlsZXIo
KS0+ZHVtbXlCYXNpY0Jsb2NrKCk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQog
Ci0gICAgICAgIEJhc2ljQmxvY2tMb2NhdGlvbiogYmFzaWNCbG9ja0xvY2F0aW9uID0gdm0oKS0+
Y29udHJvbEZsb3dQcm9maWxlcigpLT5nZXRCYXNpY0Jsb2NrTG9jYXRpb24ob3duZXJFeGVjdXRh
YmxlKCktPnNvdXJjZUlEKCksIGJhc2ljQmxvY2tTdGFydE9mZnNldCwgYmFzaWNCbG9ja0VuZE9m
ZnNldCk7CisgICAgICAgIEJhc2ljQmxvY2tMb2NhdGlvbiogYmFzaWNCbG9ja0xvY2F0aW9uID0g
dm0oKS5jb250cm9sRmxvd1Byb2ZpbGVyKCktPmdldEJhc2ljQmxvY2tMb2NhdGlvbihvd25lckV4
ZWN1dGFibGUoKS0+c291cmNlSUQoKSwgYmFzaWNCbG9ja1N0YXJ0T2Zmc2V0LCBiYXNpY0Jsb2Nr
RW5kT2Zmc2V0KTsKIAogICAgICAgICAvLyBGaW5kIGFsbCBmdW5jdGlvbnMgdGhhdCBhcmUgZW5j
bG9zZWQgd2l0aGluIHRoZSByYW5nZTogW2Jhc2ljQmxvY2tTdGFydE9mZnNldCwgYmFzaWNCbG9j
a0VuZE9mZnNldF0KICAgICAgICAgLy8gYW5kIGluc2VydCB0aGVzZSBmdW5jdGlvbnMnIHN0YXJ0
L2VuZCBvZmZzZXRzIGFzIGdhcHMgaW4gdGhlIGN1cnJlbnQgQmFzaWNCbG9ja0xvY2F0aW9uLgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNp
b24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMjAsOCArMTIwLDggQEAgcHVibGljOgogICAgIERFQ0xBUkVf
SU5GTzsKIAogcHJvdGVjdGVkOgotICAgIENvZGVCbG9jayhWTSosIFN0cnVjdHVyZSosIENvcHlQ
YXJzZWRCbG9ja1RhZywgQ29kZUJsb2NrJiBvdGhlcik7Ci0gICAgQ29kZUJsb2NrKFZNKiwgU3Ry
dWN0dXJlKiwgU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmtlZENvZGVC
bG9jayosIEpTU2NvcGUqKTsKKyAgICBDb2RlQmxvY2soVk0mLCBTdHJ1Y3R1cmUqLCBDb3B5UGFy
c2VkQmxvY2tUYWcsIENvZGVCbG9jayYgb3RoZXIpOworICAgIENvZGVCbG9jayhWTSYsIFN0cnVj
dHVyZSosIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rZWRDb2RlQmxv
Y2sqLCBKU1Njb3BlKik7CiAKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgQ29weVBhcnNl
ZEJsb2NrVGFnLCBDb2RlQmxvY2smIG90aGVyKTsKICAgICBib29sIGZpbmlzaENyZWF0aW9uKFZN
JiwgU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmtlZENvZGVCbG9jayos
IEpTU2NvcGUqKTsKQEAgLTQzNiw3ICs0MzYsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgRXhlY3V0
YWJsZVRvQ29kZUJsb2NrRWRnZSogb3duZXJFZGdlKCkgY29uc3QgeyByZXR1cm4gbV9vd25lckVk
Z2UuZ2V0KCk7IH0KIAotICAgIFZNKiB2bSgpIGNvbnN0IHsgcmV0dXJuIG1fdm07IH0KKyAgICBW
TSYgdm0oKSBjb25zdCB7IHJldHVybiAqbV92bTsgfQogCiAgICAgVmlydHVhbFJlZ2lzdGVyIHRo
aXNSZWdpc3RlcigpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT50aGlzUmVnaXN0ZXIo
KTsgfQogCkBAIC00NzIsMTMgKzQ3MiwxMyBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgbnVtYmVy
T2ZBcmd1bWVudFZhbHVlUHJvZmlsZXMoKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1fbnVtUGFy
YW1ldGVycyA+PSAwKTsKLSAgICAgICAgQVNTRVJUKG1fYXJndW1lbnRWYWx1ZVByb2ZpbGVzLnNp
emUoKSA9PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9udW1QYXJhbWV0ZXJzKSB8fCAhdm0oKS0+
Y2FuVXNlSklUKCkpOworICAgICAgICBBU1NFUlQobV9hcmd1bWVudFZhbHVlUHJvZmlsZXMuc2l6
ZSgpID09IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX251bVBhcmFtZXRlcnMpIHx8ICF2bSgpLmNh
blVzZUpJVCgpKTsKICAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRWYWx1ZVByb2ZpbGVzLnNpemUo
KTsKICAgICB9CiAKICAgICBWYWx1ZVByb2ZpbGUmIHZhbHVlUHJvZmlsZUZvckFyZ3VtZW50KHVu
c2lnbmVkIGFyZ3VtZW50SW5kZXgpCiAgICAgewotICAgICAgICBBU1NFUlQodm0oKS0+Y2FuVXNl
SklUKCkpOyAvLyBUaGlzIGlzIG9ubHkgY2FsbGVkIGZyb20gdGhlIHZhcmlvdXMgSklUIGNvbXBp
bGVycyBvciBwbGFjZXMgdGhhdCBmaXJzdCBjaGVjayBudW1iZXJPZkFyZ3VtZW50VmFsdWVQcm9m
aWxlcyBiZWZvcmUgY2FsbGluZyB0aGlzLgorICAgICAgICBBU1NFUlQodm0oKS5jYW5Vc2VKSVQo
KSk7IC8vIFRoaXMgaXMgb25seSBjYWxsZWQgZnJvbSB0aGUgdmFyaW91cyBKSVQgY29tcGlsZXJz
IG9yIHBsYWNlcyB0aGF0IGZpcnN0IGNoZWNrIG51bWJlck9mQXJndW1lbnRWYWx1ZVByb2ZpbGVz
IGJlZm9yZSBjYWxsaW5nIHRoaXMuCiAgICAgICAgIFZhbHVlUHJvZmlsZSYgcmVzdWx0ID0gbV9h
cmd1bWVudFZhbHVlUHJvZmlsZXNbYXJndW1lbnRJbmRleF07CiAgICAgICAgIHJldHVybiByZXN1
bHQ7CiAgICAgfQpAQCAtOTcyLDYgKzk3Miw4IEBAIHByaXZhdGU6CiAgICAgV3JpdGVCYXJyaWVy
PFVubGlua2VkQ29kZUJsb2NrPiBtX3VubGlua2VkQ29kZTsKICAgICBXcml0ZUJhcnJpZXI8U2Ny
aXB0RXhlY3V0YWJsZT4gbV9vd25lckV4ZWN1dGFibGU7CiAgICAgV3JpdGVCYXJyaWVyPEV4ZWN1
dGFibGVUb0NvZGVCbG9ja0VkZ2U+IG1fb3duZXJFZGdlOworICAgIC8vIG1fdm0gbXVzdCBiZSBh
IHBvaW50ZXIgKGluc3RlYWQgb2YgYSByZWZlcmVuY2UpIGJlY2F1c2UgdGhlIEpTQ0xMSW50T2Zm
c2V0c0V4dHJhY3RvcgorICAgIC8vIGNhbm5vdCBoYW5kbGUgaXQgYmVpbmcgYSByZWZlcmVuY2Uu
CiAgICAgVk0qIG1fdm07CiAKICAgICBjb25zdCB2b2lkKiBtX2luc3RydWN0aW9uc1Jhd1BvaW50
ZXIgeyBudWxscHRyIH07CkBAIC0xMDYxLDcgKzEwNjMsNyBAQCBFeGNlcHRpb24qIFNjcmlwdEV4
ZWN1dGFibGU6OnByZXBhcmVGb3JFCiAjZGVmaW5lIENPREVCTE9DS19MT0dfRVZFTlQoY29kZUJs
b2NrLCBzdW1tYXJ5LCBkZXRhaWxzKSBcCiAgICAgZG8geyBcCiAgICAgICAgIGlmIChjb2RlQmxv
Y2spIFwKLSAgICAgICAgICAgIChjb2RlQmxvY2stPnZtKCktPmxvZ0V2ZW50KGNvZGVCbG9jaywg
c3VtbWFyeSwgWyZdICgpIHsgcmV0dXJuIHRvQ1N0cmluZyBkZXRhaWxzOyB9KSk7IFwKKyAgICAg
ICAgICAgIChjb2RlQmxvY2stPnZtKCkubG9nRXZlbnQoY29kZUJsb2NrLCBzdW1tYXJ5LCBbJl0g
KCkgeyByZXR1cm4gdG9DU3RyaW5nIGRldGFpbHM7IH0pKTsgXAogICAgIH0gd2hpbGUgKDApCiAK
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RlZmVycmVkU291cmNlRHVt
cC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RlZmVy
cmVkU291cmNlRHVtcC5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9EZWZlcnJlZFNvdXJjZUR1bXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE5IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MzMsMTQgKzMzLDE0IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogRGVmZXJyZWRTb3VyY2VEdW1wOjpE
ZWZlcnJlZFNvdXJjZUR1bXAoQ29kZUJsb2NrKiBjb2RlQmxvY2spCi0gICAgOiBtX2NvZGVCbG9j
aygqY29kZUJsb2NrLT52bSgpLCBjb2RlQmxvY2spCisgICAgOiBtX2NvZGVCbG9jayhjb2RlQmxv
Y2stPnZtKCksIGNvZGVCbG9jaykKICAgICAsIG1fcm9vdEpJVFR5cGUoSklUVHlwZTo6Tm9uZSkK
IHsKIH0KIAogRGVmZXJyZWRTb3VyY2VEdW1wOjpEZWZlcnJlZFNvdXJjZUR1bXAoQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIENvZGVCbG9jayogcm9vdENvZGVCbG9jaywgSklUVHlwZSByb290SklUVHlw
ZSwgdW5zaWduZWQgY2FsbGVyQnl0ZWNvZGVJbmRleCkKLSAgICA6IG1fY29kZUJsb2NrKCpjb2Rl
QmxvY2stPnZtKCksIGNvZGVCbG9jaykKLSAgICAsIG1fcm9vdENvZGVCbG9jaygqY29kZUJsb2Nr
LT52bSgpLCByb290Q29kZUJsb2NrKQorICAgIDogbV9jb2RlQmxvY2soY29kZUJsb2NrLT52bSgp
LCBjb2RlQmxvY2spCisgICAgLCBtX3Jvb3RDb2RlQmxvY2soY29kZUJsb2NrLT52bSgpLCByb290
Q29kZUJsb2NrKQogICAgICwgbV9yb290SklUVHlwZShyb290SklUVHlwZSkKICAgICAsIG1fY2Fs
bGVyQnl0ZWNvZGVJbmRleChjYWxsZXJCeXRlY29kZUluZGV4KQogewpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V2YWxDb2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXZhbENvZGVCbG9jay5oCShyZXZpc2lvbiAyNDkx
MjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXZhbENvZGVCbG9jay5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
OC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykg
MjAwOCBDYW1lcm9uIFp3YXJpY2ggPGN3endhcmljaEB1d2F0ZXJsb28uY2E+CiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CkBAIC00NCwxOSArNDQsMTkgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gJnZtLmNv
ZGVCbG9ja1NwYWNlLnNwYWNlOwogICAgIH0KIAotICAgIHN0YXRpYyBFdmFsQ29kZUJsb2NrKiBj
cmVhdGUoVk0qIHZtLCBDb3B5UGFyc2VkQmxvY2tUYWcsIEV2YWxDb2RlQmxvY2smIG90aGVyKQor
ICAgIHN0YXRpYyBFdmFsQ29kZUJsb2NrKiBjcmVhdGUoVk0mIHZtLCBDb3B5UGFyc2VkQmxvY2tU
YWcsIEV2YWxDb2RlQmxvY2smIG90aGVyKQogICAgIHsKLSAgICAgICAgRXZhbENvZGVCbG9jayog
aW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxFdmFsQ29kZUJsb2NrPih2bS0+
aGVhcCkpCi0gICAgICAgICAgICBFdmFsQ29kZUJsb2NrKHZtLCB2bS0+ZXZhbENvZGVCbG9ja1N0
cnVjdHVyZS5nZXQoKSwgQ29weVBhcnNlZEJsb2NrLCBvdGhlcik7Ci0gICAgICAgIGluc3RhbmNl
LT5maW5pc2hDcmVhdGlvbigqdm0sIENvcHlQYXJzZWRCbG9jaywgb3RoZXIpOworICAgICAgICBF
dmFsQ29kZUJsb2NrKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEV2YWxD
b2RlQmxvY2s+KHZtLmhlYXApKQorICAgICAgICAgICAgRXZhbENvZGVCbG9jayh2bSwgdm0uZXZh
bENvZGVCbG9ja1N0cnVjdHVyZS5nZXQoKSwgQ29weVBhcnNlZEJsb2NrLCBvdGhlcik7CisgICAg
ICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbih2bSwgQ29weVBhcnNlZEJsb2NrLCBvdGhlcik7
CiAgICAgICAgIHJldHVybiBpbnN0YW5jZTsKICAgICB9CiAKLSAgICBzdGF0aWMgRXZhbENvZGVC
bG9jayogY3JlYXRlKFZNKiB2bSwgRXZhbEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5s
aW5rZWRFdmFsQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9jaywgSlNTY29wZSogc2NvcGUpCisg
ICAgc3RhdGljIEV2YWxDb2RlQmxvY2sqIGNyZWF0ZShWTSYgdm0sIEV2YWxFeGVjdXRhYmxlKiBv
d25lckV4ZWN1dGFibGUsIFVubGlua2VkRXZhbENvZGVCbG9jayogdW5saW5rZWRDb2RlQmxvY2ss
IEpTU2NvcGUqIHNjb3BlKQogICAgIHsKLSAgICAgICAgRXZhbENvZGVCbG9jayogaW5zdGFuY2Ug
PSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxFdmFsQ29kZUJsb2NrPih2bS0+aGVhcCkpCi0g
ICAgICAgICAgICBFdmFsQ29kZUJsb2NrKHZtLCB2bS0+ZXZhbENvZGVCbG9ja1N0cnVjdHVyZS5n
ZXQoKSwgb3duZXJFeGVjdXRhYmxlLCB1bmxpbmtlZENvZGVCbG9jaywgc2NvcGUpOwotICAgICAg
ICBpZiAoIWluc3RhbmNlLT5maW5pc2hDcmVhdGlvbigqdm0sIG93bmVyRXhlY3V0YWJsZSwgdW5s
aW5rZWRDb2RlQmxvY2ssIHNjb3BlKSkKKyAgICAgICAgRXZhbENvZGVCbG9jayogaW5zdGFuY2Ug
PSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxFdmFsQ29kZUJsb2NrPih2bS5oZWFwKSkKKyAg
ICAgICAgICAgIEV2YWxDb2RlQmxvY2sodm0sIHZtLmV2YWxDb2RlQmxvY2tTdHJ1Y3R1cmUuZ2V0
KCksIG93bmVyRXhlY3V0YWJsZSwgdW5saW5rZWRDb2RlQmxvY2ssIHNjb3BlKTsKKyAgICAgICAg
aWYgKCFpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24odm0sIG93bmVyRXhlY3V0YWJsZSwgdW5saW5r
ZWRDb2RlQmxvY2ssIHNjb3BlKSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAg
ICByZXR1cm4gaW5zdGFuY2U7CiAgICAgfQpAQCAtNjksMTIgKzY5LDEyIEBAIHB1YmxpYzoKICAg
ICBVbmxpbmtlZEV2YWxDb2RlQmxvY2sqIHVubGlua2VkRXZhbENvZGVCbG9jaygpIGNvbnN0IHsg
cmV0dXJuIGpzQ2FzdDxVbmxpbmtlZEV2YWxDb2RlQmxvY2sqPih1bmxpbmtlZENvZGVCbG9jaygp
KTsgfQogCiBwcml2YXRlOgotICAgIEV2YWxDb2RlQmxvY2soVk0qIHZtLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgQ29weVBhcnNlZEJsb2NrVGFnLCBFdmFsQ29kZUJsb2NrJiBvdGhlcikKKyAgICBF
dmFsQ29kZUJsb2NrKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIENvcHlQYXJzZWRCbG9j
a1RhZywgRXZhbENvZGVCbG9jayYgb3RoZXIpCiAgICAgICAgIDogR2xvYmFsQ29kZUJsb2NrKHZt
LCBzdHJ1Y3R1cmUsIENvcHlQYXJzZWRCbG9jaywgb3RoZXIpCiAgICAgewogICAgIH0KICAgICAg
ICAgCi0gICAgRXZhbENvZGVCbG9jayhWTSogdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBFdmFs
RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmtlZEV2YWxDb2RlQmxvY2sqIHVubGlu
a2VkQ29kZUJsb2NrLCBKU1Njb3BlKiBzY29wZSkKKyAgICBFdmFsQ29kZUJsb2NrKFZNJiB2bSwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEV2YWxFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVu
bGlua2VkRXZhbENvZGVCbG9jayogdW5saW5rZWRDb2RlQmxvY2ssIEpTU2NvcGUqIHNjb3BlKQog
ICAgICAgICA6IEdsb2JhbENvZGVCbG9jayh2bSwgc3RydWN0dXJlLCBvd25lckV4ZWN1dGFibGUs
IHVubGlua2VkQ29kZUJsb2NrLCBzY29wZSkKICAgICB7CiAgICAgfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Z1bmN0aW9uQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Z1bmN0aW9uQ29kZUJsb2NrLmgJKHJldmlz
aW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9GdW5jdGlvbkNv
ZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwOC0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwOC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENv
cHlyaWdodCAoQykgMjAwOCBDYW1lcm9uIFp3YXJpY2ggPGN3endhcmljaEB1d2F0ZXJsb28uY2E+
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CkBAIC00NSwxOSArNDUsMTkgQEAgcHVibGljOgogICAgICAgICBy
ZXR1cm4gJnZtLmNvZGVCbG9ja1NwYWNlLnNwYWNlOwogICAgIH0KIAotICAgIHN0YXRpYyBGdW5j
dGlvbkNvZGVCbG9jayogY3JlYXRlKFZNKiB2bSwgQ29weVBhcnNlZEJsb2NrVGFnLCBGdW5jdGlv
bkNvZGVCbG9jayYgb3RoZXIpCisgICAgc3RhdGljIEZ1bmN0aW9uQ29kZUJsb2NrKiBjcmVhdGUo
Vk0mIHZtLCBDb3B5UGFyc2VkQmxvY2tUYWcsIEZ1bmN0aW9uQ29kZUJsb2NrJiBvdGhlcikKICAg
ICB7Ci0gICAgICAgIEZ1bmN0aW9uQ29kZUJsb2NrKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwg
YWxsb2NhdGVDZWxsPEZ1bmN0aW9uQ29kZUJsb2NrPih2bS0+aGVhcCkpCi0gICAgICAgICAgICBG
dW5jdGlvbkNvZGVCbG9jayh2bSwgdm0tPmZ1bmN0aW9uQ29kZUJsb2NrU3RydWN0dXJlLmdldCgp
LCBDb3B5UGFyc2VkQmxvY2ssIG90aGVyKTsKLSAgICAgICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0
aW9uKCp2bSwgQ29weVBhcnNlZEJsb2NrLCBvdGhlcik7CisgICAgICAgIEZ1bmN0aW9uQ29kZUJs
b2NrKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEZ1bmN0aW9uQ29kZUJs
b2NrPih2bS5oZWFwKSkKKyAgICAgICAgICAgIEZ1bmN0aW9uQ29kZUJsb2NrKHZtLCB2bS5mdW5j
dGlvbkNvZGVCbG9ja1N0cnVjdHVyZS5nZXQoKSwgQ29weVBhcnNlZEJsb2NrLCBvdGhlcik7Cisg
ICAgICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbih2bSwgQ29weVBhcnNlZEJsb2NrLCBvdGhl
cik7CiAgICAgICAgIHJldHVybiBpbnN0YW5jZTsKICAgICB9CiAKLSAgICBzdGF0aWMgRnVuY3Rp
b25Db2RlQmxvY2sqIGNyZWF0ZShWTSogdm0sIEZ1bmN0aW9uRXhlY3V0YWJsZSogb3duZXJFeGVj
dXRhYmxlLCBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9jaywgSlNT
Y29wZSogc2NvcGUpCisgICAgc3RhdGljIEZ1bmN0aW9uQ29kZUJsb2NrKiBjcmVhdGUoVk0mIHZt
LCBGdW5jdGlvbkV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rZWRGdW5jdGlvbkNv
ZGVCbG9jayogdW5saW5rZWRDb2RlQmxvY2ssIEpTU2NvcGUqIHNjb3BlKQogICAgIHsKLSAgICAg
ICAgRnVuY3Rpb25Db2RlQmxvY2sqIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNl
bGw8RnVuY3Rpb25Db2RlQmxvY2s+KHZtLT5oZWFwKSkKLSAgICAgICAgICAgIEZ1bmN0aW9uQ29k
ZUJsb2NrKHZtLCB2bS0+ZnVuY3Rpb25Db2RlQmxvY2tTdHJ1Y3R1cmUuZ2V0KCksIG93bmVyRXhl
Y3V0YWJsZSwgdW5saW5rZWRDb2RlQmxvY2ssIHNjb3BlKTsKLSAgICAgICAgaWYgKCFpbnN0YW5j
ZS0+ZmluaXNoQ3JlYXRpb24oKnZtLCBvd25lckV4ZWN1dGFibGUsIHVubGlua2VkQ29kZUJsb2Nr
LCBzY29wZSkpCisgICAgICAgIEZ1bmN0aW9uQ29kZUJsb2NrKiBpbnN0YW5jZSA9IG5ldyAoTm90
TnVsbCwgYWxsb2NhdGVDZWxsPEZ1bmN0aW9uQ29kZUJsb2NrPih2bS5oZWFwKSkKKyAgICAgICAg
ICAgIEZ1bmN0aW9uQ29kZUJsb2NrKHZtLCB2bS5mdW5jdGlvbkNvZGVCbG9ja1N0cnVjdHVyZS5n
ZXQoKSwgb3duZXJFeGVjdXRhYmxlLCB1bmxpbmtlZENvZGVCbG9jaywgc2NvcGUpOworICAgICAg
ICBpZiAoIWluc3RhbmNlLT5maW5pc2hDcmVhdGlvbih2bSwgb3duZXJFeGVjdXRhYmxlLCB1bmxp
bmtlZENvZGVCbG9jaywgc2NvcGUpKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAg
ICAgIHJldHVybiBpbnN0YW5jZTsKICAgICB9CkBAIC02OCwxMiArNjgsMTIgQEAgcHVibGljOgog
ICAgIH0KIAogcHJpdmF0ZToKLSAgICBGdW5jdGlvbkNvZGVCbG9jayhWTSogdm0sIFN0cnVjdHVy
ZSogc3RydWN0dXJlLCBDb3B5UGFyc2VkQmxvY2tUYWcsIEZ1bmN0aW9uQ29kZUJsb2NrJiBvdGhl
cikKKyAgICBGdW5jdGlvbkNvZGVCbG9jayhWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBD
b3B5UGFyc2VkQmxvY2tUYWcsIEZ1bmN0aW9uQ29kZUJsb2NrJiBvdGhlcikKICAgICAgICAgOiBD
b2RlQmxvY2sodm0sIHN0cnVjdHVyZSwgQ29weVBhcnNlZEJsb2NrLCBvdGhlcikKICAgICB7CiAg
ICAgfQogCi0gICAgRnVuY3Rpb25Db2RlQmxvY2soVk0qIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgRnVuY3Rpb25FeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGlua2VkRnVuY3Rpb25D
b2RlQmxvY2sqIHVubGlua2VkQ29kZUJsb2NrLCBKU1Njb3BlKiBzY29wZSkKKyAgICBGdW5jdGlv
bkNvZGVCbG9jayhWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBGdW5jdGlvbkV4ZWN1dGFi
bGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayogdW5saW5rZWRD
b2RlQmxvY2ssIEpTU2NvcGUqIHNjb3BlKQogICAgICAgICA6IENvZGVCbG9jayh2bSwgc3RydWN0
dXJlLCBvd25lckV4ZWN1dGFibGUsIHVubGlua2VkQ29kZUJsb2NrLCBzY29wZSkKICAgICB7CiAg
ICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRTdGF0dXMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlk
U3RhdHVzLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0dldEJ5SWRTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1NCw3IEBA
IGJvb2wgR2V0QnlJZFN0YXR1czo6YXBwZW5kVmFyaWFudChjb25zdCAKIAogR2V0QnlJZFN0YXR1
cyBHZXRCeUlkU3RhdHVzOjpjb21wdXRlRnJvbUxMSW50KENvZGVCbG9jayogcHJvZmlsZWRCbG9j
aywgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKIHsKLSAg
ICBWTSYgdm0gPSAqcHJvZmlsZWRCbG9jay0+dm0oKTsKKyAgICBWTSYgdm0gPSBwcm9maWxlZEJs
b2NrLT52bSgpOwogICAgIAogICAgIGF1dG8gaW5zdHJ1Y3Rpb24gPSBwcm9maWxlZEJsb2NrLT5p
bnN0cnVjdGlvbnMoKS5hdChieXRlY29kZUluZGV4KTsKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0dsb2JhbENvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HbG9iYWxDb2RlQmxvY2suaAkocmV2aXNpb24gMjQ5MTI4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dsb2JhbENvZGVCbG9jay5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
OC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykg
MjAwOCBDYW1lcm9uIFp3YXJpY2ggPGN3endhcmljaEB1d2F0ZXJsb28uY2E+CiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CkBAIC00MCwxMiArNDAsMTIgQEAgY2xhc3MgR2xvYmFsQ29kZUJsb2NrIDogcHVibGlj
IENvZGVCbG9jawogICAgIHR5cGVkZWYgQ29kZUJsb2NrIEJhc2U7CiAKIHByb3RlY3RlZDoKLSAg
ICBHbG9iYWxDb2RlQmxvY2soVk0qIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQ29weVBhcnNl
ZEJsb2NrVGFnLCBHbG9iYWxDb2RlQmxvY2smIG90aGVyKQorICAgIEdsb2JhbENvZGVCbG9jayhW
TSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBDb3B5UGFyc2VkQmxvY2tUYWcsIEdsb2JhbENv
ZGVCbG9jayYgb3RoZXIpCiAgICAgICAgIDogQ29kZUJsb2NrKHZtLCBzdHJ1Y3R1cmUsIENvcHlQ
YXJzZWRCbG9jaywgb3RoZXIpCiAgICAgewogICAgIH0KIAotICAgIEdsb2JhbENvZGVCbG9jayhW
TSogdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1
dGFibGUsIFVubGlua2VkQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9jaywgSlNTY29wZSogc2Nv
cGUpCisgICAgR2xvYmFsQ29kZUJsb2NrKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFNj
cmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rZWRDb2RlQmxvY2sqIHVubGlu
a2VkQ29kZUJsb2NrLCBKU1Njb3BlKiBzY29wZSkKICAgICAgICAgOiBDb2RlQmxvY2sodm0sIHN0
cnVjdHVyZSwgb3duZXJFeGVjdXRhYmxlLCB1bmxpbmtlZENvZGVCbG9jaywgc2NvcGUpCiAgICAg
ewogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Nb2R1bGVQcm9n
cmFtQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL01vZHVsZVByb2dyYW1Db2RlQmxvY2suaAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL01vZHVsZVByb2dyYW1Db2RlQmxvY2suaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAx
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDgg
Q2FtZXJvbiBad2FyaWNoIDxjd3p3YXJpY2hAdXdhdGVybG9vLmNhPgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dApAQCAtNDUsMTkgKzQ1LDE5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuICZ2bS5jb2RlQmxv
Y2tTcGFjZS5zcGFjZTsKICAgICB9CiAKLSAgICBzdGF0aWMgTW9kdWxlUHJvZ3JhbUNvZGVCbG9j
ayogY3JlYXRlKFZNKiB2bSwgQ29weVBhcnNlZEJsb2NrVGFnLCBNb2R1bGVQcm9ncmFtQ29kZUJs
b2NrJiBvdGhlcikKKyAgICBzdGF0aWMgTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayogY3JlYXRlKFZN
JiB2bSwgQ29weVBhcnNlZEJsb2NrVGFnLCBNb2R1bGVQcm9ncmFtQ29kZUJsb2NrJiBvdGhlcikK
ICAgICB7Ci0gICAgICAgIE1vZHVsZVByb2dyYW1Db2RlQmxvY2sqIGluc3RhbmNlID0gbmV3IChO
b3ROdWxsLCBhbGxvY2F0ZUNlbGw8TW9kdWxlUHJvZ3JhbUNvZGVCbG9jaz4odm0tPmhlYXApKQot
ICAgICAgICAgICAgTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayh2bSwgdm0tPm1vZHVsZVByb2dyYW1D
b2RlQmxvY2tTdHJ1Y3R1cmUuZ2V0KCksIENvcHlQYXJzZWRCbG9jaywgb3RoZXIpOwotICAgICAg
ICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24oKnZtLCBDb3B5UGFyc2VkQmxvY2ssIG90aGVyKTsK
KyAgICAgICAgTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayogaW5zdGFuY2UgPSBuZXcgKE5vdE51bGws
IGFsbG9jYXRlQ2VsbDxNb2R1bGVQcm9ncmFtQ29kZUJsb2NrPih2bS5oZWFwKSkKKyAgICAgICAg
ICAgIE1vZHVsZVByb2dyYW1Db2RlQmxvY2sodm0sIHZtLm1vZHVsZVByb2dyYW1Db2RlQmxvY2tT
dHJ1Y3R1cmUuZ2V0KCksIENvcHlQYXJzZWRCbG9jaywgb3RoZXIpOworICAgICAgICBpbnN0YW5j
ZS0+ZmluaXNoQ3JlYXRpb24odm0sIENvcHlQYXJzZWRCbG9jaywgb3RoZXIpOwogICAgICAgICBy
ZXR1cm4gaW5zdGFuY2U7CiAgICAgfQogCi0gICAgc3RhdGljIE1vZHVsZVByb2dyYW1Db2RlQmxv
Y2sqIGNyZWF0ZShWTSogdm0sIE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFi
bGUsIFVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayogdW5saW5rZWRDb2RlQmxvY2ssIEpT
U2NvcGUqIHNjb3BlKQorICAgIHN0YXRpYyBNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKiBjcmVhdGUo
Vk0mIHZtLCBNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmtl
ZE1vZHVsZVByb2dyYW1Db2RlQmxvY2sqIHVubGlua2VkQ29kZUJsb2NrLCBKU1Njb3BlKiBzY29w
ZSkKICAgICB7Ci0gICAgICAgIE1vZHVsZVByb2dyYW1Db2RlQmxvY2sqIGluc3RhbmNlID0gbmV3
IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8TW9kdWxlUHJvZ3JhbUNvZGVCbG9jaz4odm0tPmhlYXAp
KQotICAgICAgICAgICAgTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayh2bSwgdm0tPm1vZHVsZVByb2dy
YW1Db2RlQmxvY2tTdHJ1Y3R1cmUuZ2V0KCksIG93bmVyRXhlY3V0YWJsZSwgdW5saW5rZWRDb2Rl
QmxvY2ssIHNjb3BlKTsKLSAgICAgICAgaWYgKCFpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24oKnZt
LCBvd25lckV4ZWN1dGFibGUsIHVubGlua2VkQ29kZUJsb2NrLCBzY29wZSkpCisgICAgICAgIE1v
ZHVsZVByb2dyYW1Db2RlQmxvY2sqIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNl
bGw8TW9kdWxlUHJvZ3JhbUNvZGVCbG9jaz4odm0uaGVhcCkpCisgICAgICAgICAgICBNb2R1bGVQ
cm9ncmFtQ29kZUJsb2NrKHZtLCB2bS5tb2R1bGVQcm9ncmFtQ29kZUJsb2NrU3RydWN0dXJlLmdl
dCgpLCBvd25lckV4ZWN1dGFibGUsIHVubGlua2VkQ29kZUJsb2NrLCBzY29wZSk7CisgICAgICAg
IGlmICghaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKHZtLCBvd25lckV4ZWN1dGFibGUsIHVubGlu
a2VkQ29kZUJsb2NrLCBzY29wZSkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAg
ICAgcmV0dXJuIGluc3RhbmNlOwogICAgIH0KQEAgLTY4LDEyICs2OCwxMiBAQCBwdWJsaWM6CiAg
ICAgfQogCiBwcml2YXRlOgotICAgIE1vZHVsZVByb2dyYW1Db2RlQmxvY2soVk0qIHZtLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgQ29weVBhcnNlZEJsb2NrVGFnLCBNb2R1bGVQcm9ncmFtQ29kZUJs
b2NrJiBvdGhlcikKKyAgICBNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKFZNJiB2bSwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIENvcHlQYXJzZWRCbG9ja1RhZywgTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayYg
b3RoZXIpCiAgICAgICAgIDogR2xvYmFsQ29kZUJsb2NrKHZtLCBzdHJ1Y3R1cmUsIENvcHlQYXJz
ZWRCbG9jaywgb3RoZXIpCiAgICAgewogICAgIH0KIAotICAgIE1vZHVsZVByb2dyYW1Db2RlQmxv
Y2soVk0qIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUq
IG93bmVyRXhlY3V0YWJsZSwgVW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKiB1bmxpbmtl
ZENvZGVCbG9jaywgSlNTY29wZSogc2NvcGUpCisgICAgTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayhW
TSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZSogb3du
ZXJFeGVjdXRhYmxlLCBVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2sqIHVubGlua2VkQ29k
ZUJsb2NrLCBKU1Njb3BlKiBzY29wZSkKICAgICAgICAgOiBHbG9iYWxDb2RlQmxvY2sodm0sIHN0
cnVjdHVyZSwgb3duZXJFeGVjdXRhYmxlLCB1bmxpbmtlZENvZGVCbG9jaywgc2NvcGUpCiAgICAg
ewogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RBbGxv
Y2F0aW9uUHJvZmlsZUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvT2JqZWN0QWxsb2NhdGlvblByb2ZpbGVJbmxpbmVzLmgJKHJldmlzaW9uIDI0
OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RBbGxvY2F0aW9u
UHJvZmlsZUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE3LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNDYsNyArMTQ2LDcgQEAgQUxXQVlTX0lO
TElORSB1bnNpZ25lZCBPYmplY3RBbGxvY2F0aW9uUAogICAgICAgICByZXR1cm4gMDsKIAogICAg
IHNpemVfdCBjb3VudCA9IDA7Ci0gICAgUHJvcGVydHlOYW1lQXJyYXkgcHJvcGVydHlOYW1lQXJy
YXkoJnZtLCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzQW5kU3ltYm9scywgUHJpdmF0ZVN5bWJv
bE1vZGU6OkluY2x1ZGUpOworICAgIFByb3BlcnR5TmFtZUFycmF5IHByb3BlcnR5TmFtZUFycmF5
KHZtLCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzQW5kU3ltYm9scywgUHJpdmF0ZVN5bWJvbE1v
ZGU6OkluY2x1ZGUpOwogICAgIHByb3RvdHlwZS0+c3RydWN0dXJlKHZtKS0+Z2V0UHJvcGVydHlO
YW1lc0Zyb21TdHJ1Y3R1cmUodm0sIHByb3BlcnR5TmFtZUFycmF5LCBFbnVtZXJhdGlvbk1vZGUo
KSk7CiAgICAgUHJvcGVydHlOYW1lQXJyYXlEYXRhOjpQcm9wZXJ0eU5hbWVWZWN0b3ImIHByb3Bl
cnR5TmFtZVZlY3RvciA9IHByb3BlcnR5TmFtZUFycmF5LmRhdGEoKS0+cHJvcGVydHlOYW1lVmVj
dG9yKCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwcm9wZXJ0eU5hbWVWZWN0b3Iuc2l6
ZSgpOyArK2kpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5UHJv
dG9BY2Nlc3NDaGFpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1BvbHlQcm90b0FjY2Vzc0NoYWluLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHlQcm90b0FjY2Vzc0NoYWluLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMTkg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC00MCw3ICs0MCw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxQb2x5UHJvdG9BY2Nlc3ND
aGFpbj4gUG8KIHN0ZDo6dW5pcXVlX3B0cjxQb2x5UHJvdG9BY2Nlc3NDaGFpbj4gUG9seVByb3Rv
QWNjZXNzQ2hhaW46OmNyZWF0ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0NlbGwq
IGJhc2UsIEpTT2JqZWN0KiB0YXJnZXQsIGJvb2wmIHVzZXNQb2x5UHJvdG8pCiB7CiAgICAgSlND
ZWxsKiBjdXJyZW50ID0gYmFzZTsKLSAgICBWTSYgdm0gPSAqYmFzZS0+dm0oKTsKKyAgICBWTSYg
dm0gPSBiYXNlLT52bSgpOwogCiAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOwogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJvZ3JhbUNvZGVCbG9jay5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qcm9ncmFtQ29kZUJsb2NrLmgJKHJl
dmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qcm9ncmFt
Q29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDA4LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA4LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICog
Q29weXJpZ2h0IChDKSAyMDA4IENhbWVyb24gWndhcmljaCA8Y3d6d2FyaWNoQHV3YXRlcmxvby5j
YT4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTQ1LDE5ICs0NSwxOSBAQCBwdWJsaWM6CiAgICAgICAg
IHJldHVybiAmdm0uY29kZUJsb2NrU3BhY2Uuc3BhY2U7CiAgICAgfQogCi0gICAgc3RhdGljIFBy
b2dyYW1Db2RlQmxvY2sqIGNyZWF0ZShWTSogdm0sIENvcHlQYXJzZWRCbG9ja1RhZywgUHJvZ3Jh
bUNvZGVCbG9jayYgb3RoZXIpCisgICAgc3RhdGljIFByb2dyYW1Db2RlQmxvY2sqIGNyZWF0ZShW
TSYgdm0sIENvcHlQYXJzZWRCbG9ja1RhZywgUHJvZ3JhbUNvZGVCbG9jayYgb3RoZXIpCiAgICAg
ewotICAgICAgICBQcm9ncmFtQ29kZUJsb2NrKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxs
b2NhdGVDZWxsPFByb2dyYW1Db2RlQmxvY2s+KHZtLT5oZWFwKSkKLSAgICAgICAgICAgIFByb2dy
YW1Db2RlQmxvY2sodm0sIHZtLT5wcm9ncmFtQ29kZUJsb2NrU3RydWN0dXJlLmdldCgpLCBDb3B5
UGFyc2VkQmxvY2ssIG90aGVyKTsKLSAgICAgICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKCp2
bSwgQ29weVBhcnNlZEJsb2NrLCBvdGhlcik7CisgICAgICAgIFByb2dyYW1Db2RlQmxvY2sqIGlu
c3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8UHJvZ3JhbUNvZGVCbG9jaz4odm0u
aGVhcCkpCisgICAgICAgICAgICBQcm9ncmFtQ29kZUJsb2NrKHZtLCB2bS5wcm9ncmFtQ29kZUJs
b2NrU3RydWN0dXJlLmdldCgpLCBDb3B5UGFyc2VkQmxvY2ssIG90aGVyKTsKKyAgICAgICAgaW5z
dGFuY2UtPmZpbmlzaENyZWF0aW9uKHZtLCBDb3B5UGFyc2VkQmxvY2ssIG90aGVyKTsKICAgICAg
ICAgcmV0dXJuIGluc3RhbmNlOwogICAgIH0KIAotICAgIHN0YXRpYyBQcm9ncmFtQ29kZUJsb2Nr
KiBjcmVhdGUoVk0qIHZtLCBQcm9ncmFtRXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxp
bmtlZFByb2dyYW1Db2RlQmxvY2sqIHVubGlua2VkQ29kZUJsb2NrLCBKU1Njb3BlKiBzY29wZSkK
KyAgICBzdGF0aWMgUHJvZ3JhbUNvZGVCbG9jayogY3JlYXRlKFZNJiB2bSwgUHJvZ3JhbUV4ZWN1
dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrKiB1bmxpbmtl
ZENvZGVCbG9jaywgSlNTY29wZSogc2NvcGUpCiAgICAgewotICAgICAgICBQcm9ncmFtQ29kZUJs
b2NrKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFByb2dyYW1Db2RlQmxv
Y2s+KHZtLT5oZWFwKSkKLSAgICAgICAgICAgIFByb2dyYW1Db2RlQmxvY2sodm0sIHZtLT5wcm9n
cmFtQ29kZUJsb2NrU3RydWN0dXJlLmdldCgpLCBvd25lckV4ZWN1dGFibGUsIHVubGlua2VkQ29k
ZUJsb2NrLCBzY29wZSk7Ci0gICAgICAgIGlmICghaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKCp2
bSwgb3duZXJFeGVjdXRhYmxlLCB1bmxpbmtlZENvZGVCbG9jaywgc2NvcGUpKQorICAgICAgICBQ
cm9ncmFtQ29kZUJsb2NrKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFBy
b2dyYW1Db2RlQmxvY2s+KHZtLmhlYXApKQorICAgICAgICAgICAgUHJvZ3JhbUNvZGVCbG9jayh2
bSwgdm0ucHJvZ3JhbUNvZGVCbG9ja1N0cnVjdHVyZS5nZXQoKSwgb3duZXJFeGVjdXRhYmxlLCB1
bmxpbmtlZENvZGVCbG9jaywgc2NvcGUpOworICAgICAgICBpZiAoIWluc3RhbmNlLT5maW5pc2hD
cmVhdGlvbih2bSwgb3duZXJFeGVjdXRhYmxlLCB1bmxpbmtlZENvZGVCbG9jaywgc2NvcGUpKQog
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIHJldHVybiBpbnN0YW5jZTsKICAg
ICB9CkBAIC02OCwxMiArNjgsMTIgQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToKLSAgICBQ
cm9ncmFtQ29kZUJsb2NrKFZNKiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIENvcHlQYXJzZWRC
bG9ja1RhZywgUHJvZ3JhbUNvZGVCbG9jayYgb3RoZXIpCisgICAgUHJvZ3JhbUNvZGVCbG9jayhW
TSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBDb3B5UGFyc2VkQmxvY2tUYWcsIFByb2dyYW1D
b2RlQmxvY2smIG90aGVyKQogICAgICAgICA6IEdsb2JhbENvZGVCbG9jayh2bSwgc3RydWN0dXJl
LCBDb3B5UGFyc2VkQmxvY2ssIG90aGVyKQogICAgIHsKICAgICB9CiAKLSAgICBQcm9ncmFtQ29k
ZUJsb2NrKFZNKiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb2dyYW1FeGVjdXRhYmxlKiBv
d25lckV4ZWN1dGFibGUsIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jayogdW5saW5rZWRDb2RlQmxv
Y2ssIEpTU2NvcGUqIHNjb3BlKQorICAgIFByb2dyYW1Db2RlQmxvY2soVk0mIHZtLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgUHJvZ3JhbUV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5r
ZWRQcm9ncmFtQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9jaywgSlNTY29wZSogc2NvcGUpCiAg
ICAgICAgIDogR2xvYmFsQ29kZUJsb2NrKHZtLCBzdHJ1Y3R1cmUsIG93bmVyRXhlY3V0YWJsZSwg
dW5saW5rZWRDb2RlQmxvY2ssIHNjb3BlKQogICAgIHsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJvcGVydHlDb25kaXRpb24uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qcm9wZXJ0eUNvbmRpdGlvbi5jcHAJKHJl
dmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qcm9wZXJ0
eUNvbmRpdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE1LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE1LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMjAsOCArMzIwLDcgQEAgYm9vbCBQ
cm9wZXJ0eUNvbmRpdGlvbjo6aXNXYXRjaGFibGVXaGVuVgogICAgICAgICAgICAgc2V0ID0gc3Ry
dWN0dXJlLT5wcm9wZXJ0eVJlcGxhY2VtZW50V2F0Y2hwb2ludFNldChvZmZzZXQpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRW5zdXJlV2F0Y2hhYmlsaXR5OgotICAgICAgICAg
ICAgc2V0ID0gc3RydWN0dXJlLT5lbnN1cmVQcm9wZXJ0eVJlcGxhY2VtZW50V2F0Y2hwb2ludFNl
dCgKLSAgICAgICAgICAgICAgICAqc3RydWN0dXJlLT52bSgpLCBvZmZzZXQpOworICAgICAgICAg
ICAgc2V0ID0gc3RydWN0dXJlLT5lbnN1cmVQcm9wZXJ0eVJlcGxhY2VtZW50V2F0Y2hwb2ludFNl
dChzdHJ1Y3R1cmUtPnZtKCksIG9mZnNldCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlk
U3RhdHVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UHV0QnlJZFN0YXR1cy5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksNyAr
NDksNyBAQCBib29sIFB1dEJ5SWRTdGF0dXM6OmFwcGVuZFZhcmlhbnQoY29uc3QgCiAKIFB1dEJ5
SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZyb21MTEludChDb2RlQmxvY2sqIHByb2Zp
bGVkQmxvY2ssIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQp
CiB7Ci0gICAgVk0mIHZtID0gKnByb2ZpbGVkQmxvY2stPnZtKCk7CisgICAgVk0mIHZtID0gcHJv
ZmlsZWRCbG9jay0+dm0oKTsKICAgICAKICAgICBhdXRvIGluc3RydWN0aW9uID0gcHJvZmlsZWRC
bG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnl0ZWNvZGVJbmRleCk7CiAgICAgYXV0byBieXRlY29k
ZSA9IGluc3RydWN0aW9uLT5hczxPcFB1dEJ5SWQ+KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAJKHJldmlzaW9u
IDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHVi
SW5mby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDA4LCAyMDE0LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDA4LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02NCw3ICs2NCw3IEBAIHZvaWQgU3Ry
dWN0dXJlU3R1YkluZm86OmluaXRHZXRCeUlkU2VsZigKICAgICBjYWNoZVR5cGUgPSBDYWNoZVR5
cGU6OkdldEJ5SWRTZWxmOwogICAgIAogICAgIHUuYnlJZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVy
ZS5zZXQoCi0gICAgICAgICpjb2RlQmxvY2stPnZtKCksIGNvZGVCbG9jaywgYmFzZU9iamVjdFN0
cnVjdHVyZSk7CisgICAgICAgIGNvZGVCbG9jay0+dm0oKSwgY29kZUJsb2NrLCBiYXNlT2JqZWN0
U3RydWN0dXJlKTsKICAgICB1LmJ5SWRTZWxmLm9mZnNldCA9IG9mZnNldDsKIH0KIApAQCAtODMs
NyArODMsNyBAQCB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjppbml0UHV0QnlJZFJlcGxhCiAgICAg
Y2FjaGVUeXBlID0gQ2FjaGVUeXBlOjpQdXRCeUlkUmVwbGFjZTsKICAgICAKICAgICB1LmJ5SWRT
ZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUuc2V0KAotICAgICAgICAqY29kZUJsb2NrLT52bSgpLCBj
b2RlQmxvY2ssIGJhc2VPYmplY3RTdHJ1Y3R1cmUpOworICAgICAgICBjb2RlQmxvY2stPnZtKCks
IGNvZGVCbG9jaywgYmFzZU9iamVjdFN0cnVjdHVyZSk7CiAgICAgdS5ieUlkU2VsZi5vZmZzZXQg
PSBvZmZzZXQ7CiB9CiAKQEAgLTkyLDcgKzkyLDcgQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6
aW5pdEluQnlJZFNlbGYoQwogICAgIGNhY2hlVHlwZSA9IENhY2hlVHlwZTo6SW5CeUlkU2VsZjsK
IAogICAgIHUuYnlJZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVyZS5zZXQoCi0gICAgICAgICpjb2Rl
QmxvY2stPnZtKCksIGNvZGVCbG9jaywgYmFzZU9iamVjdFN0cnVjdHVyZSk7CisgICAgICAgIGNv
ZGVCbG9jay0+dm0oKSwgY29kZUJsb2NrLCBiYXNlT2JqZWN0U3RydWN0dXJlKTsKICAgICB1LmJ5
SWRTZWxmLm9mZnNldCA9IG9mZnNldDsKIH0KIApAQCAtMTM1LDcgKzEzNSw3IEBAIHZvaWQgU3Ry
dWN0dXJlU3R1YkluZm86OmFib3V0VG9EaWUoKQogQWNjZXNzR2VuZXJhdGlvblJlc3VsdCBTdHJ1
Y3R1cmVTdHViSW5mbzo6YWRkQWNjZXNzQ2FzZSgKICAgICBjb25zdCBHQ1NhZmVDb25jdXJyZW50
SlNMb2NrZXImIGxvY2tlciwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0IElkZW50aWZpZXIm
IGlkZW50LCBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gYWNjZXNzQ2FzZSkKIHsKLSAgICBW
TSYgdm0gPSAqY29kZUJsb2NrLT52bSgpOworICAgIFZNJiB2bSA9IGNvZGVCbG9jay0+dm0oKTsK
ICAgICBBU1NFUlQodm0uaGVhcC5pc0RlZmVycmVkKCkpOwogICAgIEFjY2Vzc0dlbmVyYXRpb25S
ZXN1bHQgcmVzdWx0ID0gKFsmXSAoKSAtPiBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IHsKICAgICAg
ICAgaWYgKFN0cnVjdHVyZVN0dWJJbmZvSW50ZXJuYWw6OnZlcmJvc2UpCkBAIC0yNzIsNyArMjcy
LDcgQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6cmVzZXQoQ29kZUJsb2NrKgogCiB2b2lkIFN0
cnVjdHVyZVN0dWJJbmZvOjp2aXNpdFdlYWtSZWZlcmVuY2VzKENvZGVCbG9jayogY29kZUJsb2Nr
KQogewotICAgIFZNJiB2bSA9ICpjb2RlQmxvY2stPnZtKCk7CisgICAgVk0mIHZtID0gY29kZUJs
b2NrLT52bSgpOwogICAgIAogICAgIGJ1ZmZlcmVkU3RydWN0dXJlcy5nZW5lcmljRmlsdGVyKAog
ICAgICAgICBbJl0gKFN0cnVjdHVyZSogc3RydWN0dXJlKSAtPiBib29sIHsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNw
cAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Vu
bGlua2VkQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQsOCArNTQsOCBAQCBuYW1l
c3BhY2UgSlNDIHsKIAogY29uc3QgQ2xhc3NJbmZvIFVubGlua2VkQ29kZUJsb2NrOjpzX2luZm8g
PSB7ICJVbmxpbmtlZENvZGVCbG9jayIsIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIsIENSRUFU
RV9NRVRIT0RfVEFCTEUoVW5saW5rZWRDb2RlQmxvY2spIH07CiAKLVVubGlua2VkQ29kZUJsb2Nr
OjpVbmxpbmtlZENvZGVCbG9jayhWTSogdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBDb2RlVHlw
ZSBjb2RlVHlwZSwgY29uc3QgRXhlY3V0YWJsZUluZm8mIGluZm8sIE9wdGlvblNldDxDb2RlR2Vu
ZXJhdGlvbk1vZGU+IGNvZGVHZW5lcmF0aW9uTW9kZSkKLSAgICA6IEJhc2UoKnZtLCBzdHJ1Y3R1
cmUpCitVbmxpbmtlZENvZGVCbG9jazo6VW5saW5rZWRDb2RlQmxvY2soVk0mIHZtLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgQ29kZVR5cGUgY29kZVR5cGUsIGNvbnN0IEV4ZWN1dGFibGVJbmZvJiBp
bmZvLCBPcHRpb25TZXQ8Q29kZUdlbmVyYXRpb25Nb2RlPiBjb2RlR2VuZXJhdGlvbk1vZGUpCisg
ICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCiAgICAgLCBtX3VzZXNFdmFsKGluZm8udXNlc0V2YWwo
KSkKICAgICAsIG1faXNTdHJpY3RNb2RlKGluZm8uaXNTdHJpY3RNb2RlKCkpCiAgICAgLCBtX2lz
Q29uc3RydWN0b3IoaW5mby5pc0NvbnN0cnVjdG9yKCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAkocmV2aXNpb24gMjQ5
MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2Nr
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDEyLTIwMTYgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEyLTIwMTkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0xNjMsNyArMTYzLDcgQEAgcHVibGljOgogICAgIHZvaWQg
YWRkU2V0Q29uc3RhbnQoSWRlbnRpZmllclNldCYgc2V0KQogICAgIHsKICAgICAgICAgY3JlYXRl
UmFyZURhdGFJZk5lY2Vzc2FyeSgpOwotICAgICAgICBWTSYgdm0gPSAqdGhpcy0+dm0oKTsKKyAg
ICAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICAgICAgYXV0byBsb2NrZXIgPSBsb2NrRHVy
aW5nTWFya2luZyh2bS5oZWFwLCBjZWxsTG9jaygpKTsKICAgICAgICAgdW5zaWduZWQgcmVzdWx0
ID0gbV9jb25zdGFudFJlZ2lzdGVycy5zaXplKCk7CiAgICAgICAgIG1fY29uc3RhbnRSZWdpc3Rl
cnMuYXBwZW5kKFdyaXRlQmFycmllcjxVbmtub3duPigpKTsKQEAgLTE3Myw3ICsxNzMsNyBAQCBw
dWJsaWM6CiAKICAgICB1bnNpZ25lZCBhZGRDb25zdGFudChKU1ZhbHVlIHYsIFNvdXJjZUNvZGVS
ZXByZXNlbnRhdGlvbiBzb3VyY2VDb2RlUmVwcmVzZW50YXRpb24gPSBTb3VyY2VDb2RlUmVwcmVz
ZW50YXRpb246Ok90aGVyKQogICAgIHsKLSAgICAgICAgVk0mIHZtID0gKnRoaXMtPnZtKCk7Cisg
ICAgICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgICAgIGF1dG8gbG9ja2VyID0gbG9ja0R1
cmluZ01hcmtpbmcodm0uaGVhcCwgY2VsbExvY2soKSk7CiAgICAgICAgIHVuc2lnbmVkIHJlc3Vs
dCA9IG1fY29uc3RhbnRSZWdpc3RlcnMuc2l6ZSgpOwogICAgICAgICBtX2NvbnN0YW50UmVnaXN0
ZXJzLmFwcGVuZChXcml0ZUJhcnJpZXI8VW5rbm93bj4oKSk7CkBAIC0xODMsNyArMTgzLDcgQEAg
cHVibGljOgogICAgIH0KICAgICB1bnNpZ25lZCBhZGRDb25zdGFudChMaW5rVGltZUNvbnN0YW50
IHR5cGUpCiAgICAgewotICAgICAgICBWTSYgdm0gPSAqdGhpcy0+dm0oKTsKKyAgICAgICAgVk0m
IHZtID0gdGhpcy0+dm0oKTsKICAgICAgICAgYXV0byBsb2NrZXIgPSBsb2NrRHVyaW5nTWFya2lu
Zyh2bS5oZWFwLCBjZWxsTG9jaygpKTsKICAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0gbV9jb25z
dGFudFJlZ2lzdGVycy5zaXplKCk7CiAgICAgICAgIEFTU0VSVChyZXN1bHQpOwpAQCAtMjQ2LDcg
KzI0Niw3IEBAIHB1YmxpYzoKIAogICAgIHVuc2lnbmVkIGFkZEZ1bmN0aW9uRGVjbChVbmxpbmtl
ZEZ1bmN0aW9uRXhlY3V0YWJsZSogbikKICAgICB7Ci0gICAgICAgIFZNJiB2bSA9ICp0aGlzLT52
bSgpOworICAgICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgICAgICBhdXRvIGxvY2tlciA9
IGxvY2tEdXJpbmdNYXJraW5nKHZtLmhlYXAsIGNlbGxMb2NrKCkpOwogICAgICAgICB1bnNpZ25l
ZCBzaXplID0gbV9mdW5jdGlvbkRlY2xzLnNpemUoKTsKICAgICAgICAgbV9mdW5jdGlvbkRlY2xz
LmFwcGVuZChXcml0ZUJhcnJpZXI8VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU+KCkpOwpAQCAt
MjU3LDcgKzI1Nyw3IEBAIHB1YmxpYzoKICAgICBzaXplX3QgbnVtYmVyT2ZGdW5jdGlvbkRlY2xz
KCkgeyByZXR1cm4gbV9mdW5jdGlvbkRlY2xzLnNpemUoKTsgfQogICAgIHVuc2lnbmVkIGFkZEZ1
bmN0aW9uRXhwcihVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogbikKICAgICB7Ci0gICAgICAg
IFZNJiB2bSA9ICp0aGlzLT52bSgpOworICAgICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAg
ICAgICBhdXRvIGxvY2tlciA9IGxvY2tEdXJpbmdNYXJraW5nKHZtLmhlYXAsIGNlbGxMb2NrKCkp
OwogICAgICAgICB1bnNpZ25lZCBzaXplID0gbV9mdW5jdGlvbkV4cHJzLnNpemUoKTsKICAgICAg
ICAgbV9mdW5jdGlvbkV4cHJzLmFwcGVuZChXcml0ZUJhcnJpZXI8VW5saW5rZWRGdW5jdGlvbkV4
ZWN1dGFibGU+KCkpOwpAQCAtMzc3LDcgKzM3Nyw3IEBAIHB1YmxpYzoKIAogCiBwcm90ZWN0ZWQ6
Ci0gICAgVW5saW5rZWRDb2RlQmxvY2soVk0qLCBTdHJ1Y3R1cmUqLCBDb2RlVHlwZSwgY29uc3Qg
RXhlY3V0YWJsZUluZm8mLCBPcHRpb25TZXQ8Q29kZUdlbmVyYXRpb25Nb2RlPik7CisgICAgVW5s
aW5rZWRDb2RlQmxvY2soVk0mLCBTdHJ1Y3R1cmUqLCBDb2RlVHlwZSwgY29uc3QgRXhlY3V0YWJs
ZUluZm8mLCBPcHRpb25TZXQ8Q29kZUdlbmVyYXRpb25Nb2RlPik7CiAKICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgogICAgIFVubGlua2VkQ29kZUJsb2NrKERlY29kZXImLCBT
dHJ1Y3R1cmUqLCBjb25zdCBDYWNoZWRDb2RlQmxvY2s8Q29kZUJsb2NrVHlwZT4mKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEV2YWxDb2RlQmxvY2suaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRFdmFs
Q29kZUJsb2NrLmgJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9VbmxpbmtlZEV2YWxDb2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNiBBcHBsZSBJbmMuIEFsbCBSaWdo
dHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOSBBcHBsZSBJbmMuIEFsbCBS
aWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM2LDEw
ICszNiwxMCBAQCBwdWJsaWM6CiAgICAgdHlwZWRlZiBVbmxpbmtlZEdsb2JhbENvZGVCbG9jayBC
YXNlOwogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0
cnVjdHVyZUZsYWdzIHwgU3RydWN0dXJlSXNJbW1vcnRhbDsKIAotICAgIHN0YXRpYyBVbmxpbmtl
ZEV2YWxDb2RlQmxvY2sqIGNyZWF0ZShWTSogdm0sIGNvbnN0IEV4ZWN1dGFibGVJbmZvJiBpbmZv
LCBPcHRpb25TZXQ8Q29kZUdlbmVyYXRpb25Nb2RlPiBjb2RlR2VuZXJhdGlvbk1vZGUpCisgICAg
c3RhdGljIFVubGlua2VkRXZhbENvZGVCbG9jayogY3JlYXRlKFZNJiB2bSwgY29uc3QgRXhlY3V0
YWJsZUluZm8mIGluZm8sIE9wdGlvblNldDxDb2RlR2VuZXJhdGlvbk1vZGU+IGNvZGVHZW5lcmF0
aW9uTW9kZSkKICAgICB7Ci0gICAgICAgIFVubGlua2VkRXZhbENvZGVCbG9jayogaW5zdGFuY2Ug
PSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxVbmxpbmtlZEV2YWxDb2RlQmxvY2s+KHZtLT5o
ZWFwKSkgVW5saW5rZWRFdmFsQ29kZUJsb2NrKHZtLCB2bS0+dW5saW5rZWRFdmFsQ29kZUJsb2Nr
U3RydWN0dXJlLmdldCgpLCBpbmZvLCBjb2RlR2VuZXJhdGlvbk1vZGUpOwotICAgICAgICBpbnN0
YW5jZS0+ZmluaXNoQ3JlYXRpb24oKnZtKTsKKyAgICAgICAgVW5saW5rZWRFdmFsQ29kZUJsb2Nr
KiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFVubGlua2VkRXZhbENvZGVC
bG9jaz4odm0uaGVhcCkpIFVubGlua2VkRXZhbENvZGVCbG9jayh2bSwgdm0udW5saW5rZWRFdmFs
Q29kZUJsb2NrU3RydWN0dXJlLmdldCgpLCBpbmZvLCBjb2RlR2VuZXJhdGlvbk1vZGUpOworICAg
ICAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24odm0pOwogICAgICAgICByZXR1cm4gaW5zdGFu
Y2U7CiAgICAgfQogCkBAIC02Myw3ICs2Myw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgZnJp
ZW5kIENhY2hlZEV2YWxDb2RlQmxvY2s7CiAKLSAgICBVbmxpbmtlZEV2YWxDb2RlQmxvY2soVk0q
IHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgRXhlY3V0YWJsZUluZm8mIGluZm8sIE9w
dGlvblNldDxDb2RlR2VuZXJhdGlvbk1vZGU+IGNvZGVHZW5lcmF0aW9uTW9kZSkKKyAgICBVbmxp
bmtlZEV2YWxDb2RlQmxvY2soVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgRXhl
Y3V0YWJsZUluZm8mIGluZm8sIE9wdGlvblNldDxDb2RlR2VuZXJhdGlvbk1vZGU+IGNvZGVHZW5l
cmF0aW9uTW9kZSkKICAgICAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUsIEV2YWxDb2RlLCBpbmZv
LCBjb2RlR2VuZXJhdGlvbk1vZGUpCiAgICAgewogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25Db2RlQmxv
Y2suaAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1VubGlua2VkRnVuY3Rpb25Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNiBBcHBsZSBJbmMuIEFsbCBSaWdodHMg
UmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOSBBcHBsZSBJbmMuIEFsbCBSaWdo
dHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM2LDEwICsz
NiwxMCBAQCBwdWJsaWM6CiAgICAgdHlwZWRlZiBVbmxpbmtlZENvZGVCbG9jayBCYXNlOwogICAg
IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZs
YWdzIHwgU3RydWN0dXJlSXNJbW1vcnRhbDsKIAotICAgIHN0YXRpYyBVbmxpbmtlZEZ1bmN0aW9u
Q29kZUJsb2NrKiBjcmVhdGUoVk0qIHZtLCBDb2RlVHlwZSBjb2RlVHlwZSwgY29uc3QgRXhlY3V0
YWJsZUluZm8mIGluZm8sIE9wdGlvblNldDxDb2RlR2VuZXJhdGlvbk1vZGU+IGNvZGVHZW5lcmF0
aW9uTW9kZSkKKyAgICBzdGF0aWMgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayogY3JlYXRlKFZN
JiB2bSwgQ29kZVR5cGUgY29kZVR5cGUsIGNvbnN0IEV4ZWN1dGFibGVJbmZvJiBpbmZvLCBPcHRp
b25TZXQ8Q29kZUdlbmVyYXRpb25Nb2RlPiBjb2RlR2VuZXJhdGlvbk1vZGUpCiAgICAgewotICAg
ICAgICBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwg
YWxsb2NhdGVDZWxsPFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2s+KHZtLT5oZWFwKSkgVW5saW5r
ZWRGdW5jdGlvbkNvZGVCbG9jayh2bSwgdm0tPnVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2tTdHJ1
Y3R1cmUuZ2V0KCksIGNvZGVUeXBlLCBpbmZvLCBjb2RlR2VuZXJhdGlvbk1vZGUpOwotICAgICAg
ICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24oKnZtKTsKKyAgICAgICAgVW5saW5rZWRGdW5jdGlv
bkNvZGVCbG9jayogaW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxVbmxpbmtl
ZEZ1bmN0aW9uQ29kZUJsb2NrPih2bS5oZWFwKSkgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayh2
bSwgdm0udW5saW5rZWRGdW5jdGlvbkNvZGVCbG9ja1N0cnVjdHVyZS5nZXQoKSwgY29kZVR5cGUs
IGluZm8sIGNvZGVHZW5lcmF0aW9uTW9kZSk7CisgICAgICAgIGluc3RhbmNlLT5maW5pc2hDcmVh
dGlvbih2bSk7CiAgICAgICAgIHJldHVybiBpbnN0YW5jZTsKICAgICB9CiAKQEAgLTQ4LDcgKzQ4
LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBmcmllbmQgQ2FjaGVkRnVuY3Rpb25Db2RlQmxv
Y2s7CiAKLSAgICBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKFZNKiB2bSwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIENvZGVUeXBlIGNvZGVUeXBlLCBjb25zdCBFeGVjdXRhYmxlSW5mbyYgaW5mbywg
T3B0aW9uU2V0PENvZGVHZW5lcmF0aW9uTW9kZT4gY29kZUdlbmVyYXRpb25Nb2RlKQorICAgIFVu
bGlua2VkRnVuY3Rpb25Db2RlQmxvY2soVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQ29k
ZVR5cGUgY29kZVR5cGUsIGNvbnN0IEV4ZWN1dGFibGVJbmZvJiBpbmZvLCBPcHRpb25TZXQ8Q29k
ZUdlbmVyYXRpb25Nb2RlPiBjb2RlR2VuZXJhdGlvbk1vZGUpCiAgICAgICAgIDogQmFzZSh2bSwg
c3RydWN0dXJlLCBjb2RlVHlwZSwgaW5mbywgY29kZUdlbmVyYXRpb25Nb2RlKQogICAgIHsKICAg
ICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlv
bkV4ZWN1dGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJs
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDEyLTIwMTggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEyLTIwMTkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01OCw3ICs1OCw3IEBAIHN0YXRpYyBVbmxpbmtlZEZ1
bmN0aW9uQ29kZUJsb2NrKiBnZW5lcmEKICAgICBKU1BhcnNlclNjcmlwdE1vZGUgc2NyaXB0TW9k
ZSA9IGV4ZWN1dGFibGUtPnNjcmlwdE1vZGUoKTsKICAgICBBU1NFUlQoaXNGdW5jdGlvblBhcnNl
TW9kZShleGVjdXRhYmxlLT5wYXJzZU1vZGUoKSkpOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxGdW5j
dGlvbk5vZGU+IGZ1bmN0aW9uID0gcGFyc2U8RnVuY3Rpb25Ob2RlPigKLSAgICAgICAgJnZtLCBz
b3VyY2UsIGV4ZWN1dGFibGUtPm5hbWUoKSwgYnVpbHRpbk1vZGUsIHN0cmljdE1vZGUsIHNjcmlw
dE1vZGUsIGV4ZWN1dGFibGUtPnBhcnNlTW9kZSgpLCBleGVjdXRhYmxlLT5zdXBlckJpbmRpbmco
KSwgZXJyb3IsIG51bGxwdHIpOworICAgICAgICB2bSwgc291cmNlLCBleGVjdXRhYmxlLT5uYW1l
KCksIGJ1aWx0aW5Nb2RlLCBzdHJpY3RNb2RlLCBzY3JpcHRNb2RlLCBleGVjdXRhYmxlLT5wYXJz
ZU1vZGUoKSwgZXhlY3V0YWJsZS0+c3VwZXJCaW5kaW5nKCksIGVycm9yLCBudWxscHRyKTsKIAog
ICAgIGlmICghZnVuY3Rpb24pIHsKICAgICAgICAgQVNTRVJUKGVycm9yLmlzVmFsaWQoKSk7CkBA
IC03MCw3ICs3MCw3IEBAIHN0YXRpYyBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKiBnZW5lcmEK
IAogICAgIGJvb2wgaXNDbGFzc0NvbnRleHQgPSBleGVjdXRhYmxlLT5zdXBlckJpbmRpbmcoKSA9
PSBTdXBlckJpbmRpbmc6Ok5lZWRlZDsKIAotICAgIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2sq
IHJlc3VsdCA9IFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2s6OmNyZWF0ZSgmdm0sIEZ1bmN0aW9u
Q29kZSwgRXhlY3V0YWJsZUluZm8oZnVuY3Rpb24tPnVzZXNFdmFsKCksIGZ1bmN0aW9uLT5pc1N0
cmljdE1vZGUoKSwga2luZCA9PSBDb2RlRm9yQ29uc3RydWN0LCBmdW5jdGlvbktpbmQgPT0gVW5s
aW5rZWRCdWlsdGluRnVuY3Rpb24sIGV4ZWN1dGFibGUtPmNvbnN0cnVjdG9yS2luZCgpLCBzY3Jp
cHRNb2RlLCBleGVjdXRhYmxlLT5zdXBlckJpbmRpbmcoKSwgcGFyc2VNb2RlLCBleGVjdXRhYmxl
LT5kZXJpdmVkQ29udGV4dFR5cGUoKSwgZmFsc2UsIGlzQ2xhc3NDb250ZXh0LCBFdmFsQ29udGV4
dFR5cGU6OkZ1bmN0aW9uRXZhbENvbnRleHQpLCBjb2RlR2VuZXJhdGlvbk1vZGUpOworICAgIFVu
bGlua2VkRnVuY3Rpb25Db2RlQmxvY2sqIHJlc3VsdCA9IFVubGlua2VkRnVuY3Rpb25Db2RlQmxv
Y2s6OmNyZWF0ZSh2bSwgRnVuY3Rpb25Db2RlLCBFeGVjdXRhYmxlSW5mbyhmdW5jdGlvbi0+dXNl
c0V2YWwoKSwgZnVuY3Rpb24tPmlzU3RyaWN0TW9kZSgpLCBraW5kID09IENvZGVGb3JDb25zdHJ1
Y3QsIGZ1bmN0aW9uS2luZCA9PSBVbmxpbmtlZEJ1aWx0aW5GdW5jdGlvbiwgZXhlY3V0YWJsZS0+
Y29uc3RydWN0b3JLaW5kKCksIHNjcmlwdE1vZGUsIGV4ZWN1dGFibGUtPnN1cGVyQmluZGluZygp
LCBwYXJzZU1vZGUsIGV4ZWN1dGFibGUtPmRlcml2ZWRDb250ZXh0VHlwZSgpLCBmYWxzZSwgaXND
bGFzc0NvbnRleHQsIEV2YWxDb250ZXh0VHlwZTo6RnVuY3Rpb25FdmFsQ29udGV4dCksIGNvZGVH
ZW5lcmF0aW9uTW9kZSk7CiAKICAgICBWYXJpYWJsZUVudmlyb25tZW50IHBhcmVudFNjb3BlVERa
VmFyaWFibGVzID0gZXhlY3V0YWJsZS0+cGFyZW50U2NvcGVURFpWYXJpYWJsZXMoKTsKICAgICBl
cnJvciA9IEJ5dGVjb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZSh2bSwgZnVuY3Rpb24uZ2V0KCksIHNv
dXJjZSwgcmVzdWx0LCBjb2RlR2VuZXJhdGlvbk1vZGUsICZwYXJlbnRTY29wZVREWlZhcmlhYmxl
cyk7CkBAIC04MSw4ICs4MSw4IEBAIHN0YXRpYyBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKiBn
ZW5lcmEKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJs
ZTo6VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUoVk0qIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgY29uc3QgU291cmNlQ29kZSYgcGFyZW50U291cmNlLCBGdW5jdGlvbk1ldGFkYXRhTm9kZSog
bm9kZSwgVW5saW5rZWRGdW5jdGlvbktpbmQga2luZCwgQ29uc3RydWN0QWJpbGl0eSBjb25zdHJ1
Y3RBYmlsaXR5LCBKU1BhcnNlclNjcmlwdE1vZGUgc2NyaXB0TW9kZSwgT3B0aW9uYWw8Q29tcGFj
dFZhcmlhYmxlTWFwOjpIYW5kbGU+IHBhcmVudFNjb3BlVERaVmFyaWFibGVzLCBEZXJpdmVkQ29u
dGV4dFR5cGUgZGVyaXZlZENvbnRleHRUeXBlLCBib29sIGlzQnVpbHRpbkRlZmF1bHRDbGFzc0Nv
bnN0cnVjdG9yKQotICAgIDogQmFzZSgqdm0sIHN0cnVjdHVyZSkKK1VubGlua2VkRnVuY3Rpb25F
eGVjdXRhYmxlOjpVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZShWTSYgdm0sIFN0cnVjdHVyZSog
c3RydWN0dXJlLCBjb25zdCBTb3VyY2VDb2RlJiBwYXJlbnRTb3VyY2UsIEZ1bmN0aW9uTWV0YWRh
dGFOb2RlKiBub2RlLCBVbmxpbmtlZEZ1bmN0aW9uS2luZCBraW5kLCBDb25zdHJ1Y3RBYmlsaXR5
IGNvbnN0cnVjdEFiaWxpdHksIEpTUGFyc2VyU2NyaXB0TW9kZSBzY3JpcHRNb2RlLCBPcHRpb25h
bDxDb21wYWN0VmFyaWFibGVNYXA6OkhhbmRsZT4gcGFyZW50U2NvcGVURFpWYXJpYWJsZXMsIERl
cml2ZWRDb250ZXh0VHlwZSBkZXJpdmVkQ29udGV4dFR5cGUsIGJvb2wgaXNCdWlsdGluRGVmYXVs
dENsYXNzQ29uc3RydWN0b3IpCisgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCiAgICAgLCBtX2Zp
cnN0TGluZU9mZnNldChub2RlLT5maXJzdExpbmUoKSAtIHBhcmVudFNvdXJjZS5maXJzdExpbmUo
KS5vbmVCYXNlZEludCgpKQogICAgICwgbV9pc0luU3RyaWN0Q29udGV4dChub2RlLT5pc0luU3Ry
aWN0Q29udGV4dCgpKQogICAgICwgbV9saW5lQ291bnQobm9kZS0+bGFzdExpbmUoKSAtIG5vZGUt
PmZpcnN0TGluZSgpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlu
a2VkRnVuY3Rpb25FeGVjdXRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmgJKHJldmlzaW9uIDI0OTEy
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhl
Y3V0YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMi0yMDE4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMi0yMDE5IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjgsMTEgKzY4LDExIEBAIHB1YmxpYzoKICAg
ICAgICAgcmV0dXJuICZ2bS51bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZVNwYWNlLnNwYWNlOwog
ICAgIH0KIAotICAgIHN0YXRpYyBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogY3JlYXRlKFZN
KiB2bSwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBGdW5jdGlvbk1ldGFkYXRhTm9kZSogbm9k
ZSwgVW5saW5rZWRGdW5jdGlvbktpbmQgdW5saW5rZWRGdW5jdGlvbktpbmQsIENvbnN0cnVjdEFi
aWxpdHkgY29uc3RydWN0QWJpbGl0eSwgSlNQYXJzZXJTY3JpcHRNb2RlIHNjcmlwdE1vZGUsIE9w
dGlvbmFsPENvbXBhY3RWYXJpYWJsZU1hcDo6SGFuZGxlPiBwYXJlbnRTY29wZVREWlZhcmlhYmxl
cywgRGVyaXZlZENvbnRleHRUeXBlIGRlcml2ZWRDb250ZXh0VHlwZSwgYm9vbCBpc0J1aWx0aW5E
ZWZhdWx0Q2xhc3NDb25zdHJ1Y3RvciA9IGZhbHNlKQorICAgIHN0YXRpYyBVbmxpbmtlZEZ1bmN0
aW9uRXhlY3V0YWJsZSogY3JlYXRlKFZNJiB2bSwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBG
dW5jdGlvbk1ldGFkYXRhTm9kZSogbm9kZSwgVW5saW5rZWRGdW5jdGlvbktpbmQgdW5saW5rZWRG
dW5jdGlvbktpbmQsIENvbnN0cnVjdEFiaWxpdHkgY29uc3RydWN0QWJpbGl0eSwgSlNQYXJzZXJT
Y3JpcHRNb2RlIHNjcmlwdE1vZGUsIE9wdGlvbmFsPENvbXBhY3RWYXJpYWJsZU1hcDo6SGFuZGxl
PiBwYXJlbnRTY29wZVREWlZhcmlhYmxlcywgRGVyaXZlZENvbnRleHRUeXBlIGRlcml2ZWRDb250
ZXh0VHlwZSwgYm9vbCBpc0J1aWx0aW5EZWZhdWx0Q2xhc3NDb25zdHJ1Y3RvciA9IGZhbHNlKQog
ICAgIHsKLSAgICAgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIGluc3RhbmNlID0gbmV3
IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU+KHZtLT5o
ZWFwKSkKLSAgICAgICAgICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKHZtLCB2bS0+dW5s
aW5rZWRGdW5jdGlvbkV4ZWN1dGFibGVTdHJ1Y3R1cmUuZ2V0KCksIHNvdXJjZSwgbm9kZSwgdW5s
aW5rZWRGdW5jdGlvbktpbmQsIGNvbnN0cnVjdEFiaWxpdHksIHNjcmlwdE1vZGUsIFdURk1vdmUo
cGFyZW50U2NvcGVURFpWYXJpYWJsZXMpLCBkZXJpdmVkQ29udGV4dFR5cGUsIGlzQnVpbHRpbkRl
ZmF1bHRDbGFzc0NvbnN0cnVjdG9yKTsKLSAgICAgICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9u
KCp2bSk7CisgICAgICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBpbnN0YW5jZSA9IG5l
dyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlPih2bS5o
ZWFwKSkKKyAgICAgICAgICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKHZtLCB2bS51bmxp
bmtlZEZ1bmN0aW9uRXhlY3V0YWJsZVN0cnVjdHVyZS5nZXQoKSwgc291cmNlLCBub2RlLCB1bmxp
bmtlZEZ1bmN0aW9uS2luZCwgY29uc3RydWN0QWJpbGl0eSwgc2NyaXB0TW9kZSwgV1RGTW92ZShw
YXJlbnRTY29wZVREWlZhcmlhYmxlcyksIGRlcml2ZWRDb250ZXh0VHlwZSwgaXNCdWlsdGluRGVm
YXVsdENsYXNzQ29uc3RydWN0b3IpOworICAgICAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24o
dm0pOwogICAgICAgICByZXR1cm4gaW5zdGFuY2U7CiAgICAgfQogCkBAIC0yMDAsNyArMjAwLDcg
QEAgcHVibGljOgogICAgIH07CiAKIHByaXZhdGU6Ci0gICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1
dGFibGUoVk0qLCBTdHJ1Y3R1cmUqLCBjb25zdCBTb3VyY2VDb2RlJiwgRnVuY3Rpb25NZXRhZGF0
YU5vZGUqLCBVbmxpbmtlZEZ1bmN0aW9uS2luZCwgQ29uc3RydWN0QWJpbGl0eSwgSlNQYXJzZXJT
Y3JpcHRNb2RlLCBPcHRpb25hbDxDb21wYWN0VmFyaWFibGVNYXA6OkhhbmRsZT4sICBKU0M6OkRl
cml2ZWRDb250ZXh0VHlwZSwgYm9vbCBpc0J1aWx0aW5EZWZhdWx0Q2xhc3NDb25zdHJ1Y3Rvcik7
CisgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUoVk0mLCBTdHJ1Y3R1cmUqLCBjb25zdCBT
b3VyY2VDb2RlJiwgRnVuY3Rpb25NZXRhZGF0YU5vZGUqLCBVbmxpbmtlZEZ1bmN0aW9uS2luZCwg
Q29uc3RydWN0QWJpbGl0eSwgSlNQYXJzZXJTY3JpcHRNb2RlLCBPcHRpb25hbDxDb21wYWN0VmFy
aWFibGVNYXA6OkhhbmRsZT4sICBKU0M6OkRlcml2ZWRDb250ZXh0VHlwZSwgYm9vbCBpc0J1aWx0
aW5EZWZhdWx0Q2xhc3NDb25zdHJ1Y3Rvcik7CiAgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFi
bGUoRGVjb2RlciYsIGNvbnN0IENhY2hlZEZ1bmN0aW9uRXhlY3V0YWJsZSYpOwogCiAgICAgdm9p
ZCBkZWNvZGVDYWNoZWRDb2RlQmxvY2tzKFZNJik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvVW5saW5rZWRHbG9iYWxDb2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRHbG9iYWxDb2RlQmxvY2suaAkocmV2
aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2Vk
R2xvYmFsQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDEyLTIwMTYgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNCw3ICszNCw3IEBAIHB1Ymxp
YzoKICAgICB0eXBlZGVmIFVubGlua2VkQ29kZUJsb2NrIEJhc2U7CiAKIHByb3RlY3RlZDoKLSAg
ICBVbmxpbmtlZEdsb2JhbENvZGVCbG9jayhWTSogdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBD
b2RlVHlwZSBjb2RlVHlwZSwgY29uc3QgRXhlY3V0YWJsZUluZm8mIGluZm8sIE9wdGlvblNldDxD
b2RlR2VuZXJhdGlvbk1vZGU+IGNvZGVHZW5lcmF0aW9uTW9kZSkKKyAgICBVbmxpbmtlZEdsb2Jh
bENvZGVCbG9jayhWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBDb2RlVHlwZSBjb2RlVHlw
ZSwgY29uc3QgRXhlY3V0YWJsZUluZm8mIGluZm8sIE9wdGlvblNldDxDb2RlR2VuZXJhdGlvbk1v
ZGU+IGNvZGVHZW5lcmF0aW9uTW9kZSkKICAgICAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUsIGNv
ZGVUeXBlLCBpbmZvLCBjb2RlR2VuZXJhdGlvbk1vZGUpCiAgICAgewogICAgIH0KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxv
Y2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5r
ZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrLmgJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2suaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIt
MjAxNyBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTItMjAxOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTM3LDEwICszNywxMCBAQCBwdWJsaWM6CiAgICAgdHlwZWRlZiBV
bmxpbmtlZEdsb2JhbENvZGVCbG9jayBCYXNlOwogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBT
dHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgU3RydWN0dXJlSXNJbW1vcnRh
bDsKIAotICAgIHN0YXRpYyBVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2sqIGNyZWF0ZShW
TSogdm0sIGNvbnN0IEV4ZWN1dGFibGVJbmZvJiBpbmZvLCBPcHRpb25TZXQ8Q29kZUdlbmVyYXRp
b25Nb2RlPiBjb2RlR2VuZXJhdGlvbk1vZGUpCisgICAgc3RhdGljIFVubGlua2VkTW9kdWxlUHJv
Z3JhbUNvZGVCbG9jayogY3JlYXRlKFZNJiB2bSwgY29uc3QgRXhlY3V0YWJsZUluZm8mIGluZm8s
IE9wdGlvblNldDxDb2RlR2VuZXJhdGlvbk1vZGU+IGNvZGVHZW5lcmF0aW9uTW9kZSkKICAgICB7
Ci0gICAgICAgIFVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayogaW5zdGFuY2UgPSBuZXcg
KE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2s+KHZt
LT5oZWFwKSkgVW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKHZtLCB2bS0+dW5saW5rZWRN
b2R1bGVQcm9ncmFtQ29kZUJsb2NrU3RydWN0dXJlLmdldCgpLCBpbmZvLCBjb2RlR2VuZXJhdGlv
bk1vZGUpOwotICAgICAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24oKnZtKTsKKyAgICAgICAg
VW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwg
YWxsb2NhdGVDZWxsPFVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jaz4odm0uaGVhcCkpIFVu
bGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayh2bSwgdm0udW5saW5rZWRNb2R1bGVQcm9ncmFt
Q29kZUJsb2NrU3RydWN0dXJlLmdldCgpLCBpbmZvLCBjb2RlR2VuZXJhdGlvbk1vZGUpOworICAg
ICAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24odm0pOwogICAgICAgICByZXR1cm4gaW5zdGFu
Y2U7CiAgICAgfQogCkBAIC03OSw3ICs3OSw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgZnJp
ZW5kIENhY2hlZE1vZHVsZUNvZGVCbG9jazsKIAotICAgIFVubGlua2VkTW9kdWxlUHJvZ3JhbUNv
ZGVCbG9jayhWTSogdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBFeGVjdXRhYmxlSW5m
byYgaW5mbywgT3B0aW9uU2V0PENvZGVHZW5lcmF0aW9uTW9kZT4gY29kZUdlbmVyYXRpb25Nb2Rl
KQorICAgIFVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayhWTSYgdm0sIFN0cnVjdHVyZSog
c3RydWN0dXJlLCBjb25zdCBFeGVjdXRhYmxlSW5mbyYgaW5mbywgT3B0aW9uU2V0PENvZGVHZW5l
cmF0aW9uTW9kZT4gY29kZUdlbmVyYXRpb25Nb2RlKQogICAgICAgICA6IEJhc2Uodm0sIHN0cnVj
dHVyZSwgTW9kdWxlQ29kZSwgaW5mbywgY29kZUdlbmVyYXRpb25Nb2RlKQogICAgIHsKICAgICB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRQcm9ncmFtQ29k
ZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Vu
bGlua2VkUHJvZ3JhbUNvZGVCbG9jay5oCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTcgQXBw
bGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTkg
QXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0zNiwxMCArMzYsMTAgQEAgcHVibGljOgogICAgIHR5cGVkZWYgVW5saW5rZWRH
bG9iYWxDb2RlQmxvY2sgQmFzZTsKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJl
RmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IFN0cnVjdHVyZUlzSW1tb3J0YWw7CiAKLSAg
ICBzdGF0aWMgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrKiBjcmVhdGUoVk0qIHZtLCBjb25zdCBF
eGVjdXRhYmxlSW5mbyYgaW5mbywgT3B0aW9uU2V0PENvZGVHZW5lcmF0aW9uTW9kZT4gY29kZUdl
bmVyYXRpb25Nb2RlKQorICAgIHN0YXRpYyBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2sqIGNyZWF0
ZShWTSYgdm0sIGNvbnN0IEV4ZWN1dGFibGVJbmZvJiBpbmZvLCBPcHRpb25TZXQ8Q29kZUdlbmVy
YXRpb25Nb2RlPiBjb2RlR2VuZXJhdGlvbk1vZGUpCiAgICAgewotICAgICAgICBVbmxpbmtlZFBy
b2dyYW1Db2RlQmxvY2sqIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8VW5s
aW5rZWRQcm9ncmFtQ29kZUJsb2NrPih2bS0+aGVhcCkpIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9j
ayh2bSwgdm0tPnVubGlua2VkUHJvZ3JhbUNvZGVCbG9ja1N0cnVjdHVyZS5nZXQoKSwgaW5mbywg
Y29kZUdlbmVyYXRpb25Nb2RlKTsKLSAgICAgICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKCp2
bSk7CisgICAgICAgIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jayogaW5zdGFuY2UgPSBuZXcgKE5v
dE51bGwsIGFsbG9jYXRlQ2VsbDxVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2s+KHZtLmhlYXApKSBV
bmxpbmtlZFByb2dyYW1Db2RlQmxvY2sodm0sIHZtLnVubGlua2VkUHJvZ3JhbUNvZGVCbG9ja1N0
cnVjdHVyZS5nZXQoKSwgaW5mbywgY29kZUdlbmVyYXRpb25Nb2RlKTsKKyAgICAgICAgaW5zdGFu
Y2UtPmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICAgICAgcmV0dXJuIGluc3RhbmNlOwogICAgIH0K
IApAQCAtNTQsNyArNTQsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIGZyaWVuZCBDYWNoZWRQ
cm9ncmFtQ29kZUJsb2NrOwogCi0gICAgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrKFZNKiB2bSwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IEV4ZWN1dGFibGVJbmZvJiBpbmZvLCBPcHRpb25T
ZXQ8Q29kZUdlbmVyYXRpb25Nb2RlPiBjb2RlR2VuZXJhdGlvbk1vZGUpCisgICAgVW5saW5rZWRQ
cm9ncmFtQ29kZUJsb2NrKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IEV4ZWN1
dGFibGVJbmZvJiBpbmZvLCBPcHRpb25TZXQ8Q29kZUdlbmVyYXRpb25Nb2RlPiBjb2RlR2VuZXJh
dGlvbk1vZGUpCiAgICAgICAgIDogQmFzZSh2bSwgc3RydWN0dXJlLCBHbG9iYWxDb2RlLCBpbmZv
LCBjb2RlR2VuZXJhdGlvbk1vZGUpCiAgICAgewogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3Bw
CShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVy
L0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzM2LDcgKzMzNiw3IEBA
IEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihWTSYKICAgICAsIG1fY29kZUJs
b2NrKHZtLCBjb2RlQmxvY2spCiAgICAgLCBtX3RoaXNSZWdpc3RlcihDYWxsRnJhbWU6OnRoaXNB
cmd1bWVudE9mZnNldCgpKQogICAgICwgbV9jb2RlVHlwZShHbG9iYWxDb2RlKQotICAgICwgbV92
bSgmdm0pCisgICAgLCBtX3ZtKHZtKQogICAgICwgbV9uZWVkc1RvVXBkYXRlQXJyb3dGdW5jdGlv
bkNvbnRleHQocHJvZ3JhbU5vZGUtPnVzZXNBcnJvd0Z1bmN0aW9uKCkgfHwgcHJvZ3JhbU5vZGUt
PnVzZXNFdmFsKCkpCiB7CiAgICAgQVNTRVJUX1VOVVNFRChwYXJlbnRTY29wZVREWlZhcmlhYmxl
cywgIXBhcmVudFNjb3BlVERaVmFyaWFibGVzLT5zaXplKCkpOwpAQCAtMzgxLDcgKzM4MSw3IEBA
IEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihWTSYKICAgICAsIG1fc2NvcGVO
b2RlKGZ1bmN0aW9uTm9kZSkKICAgICAsIG1fY29kZUJsb2NrKHZtLCBjb2RlQmxvY2spCiAgICAg
LCBtX2NvZGVUeXBlKEZ1bmN0aW9uQ29kZSkKLSAgICAsIG1fdm0oJnZtKQorICAgICwgbV92bSh2
bSkKICAgICAsIG1faXNCdWlsdGluRnVuY3Rpb24oY29kZUJsb2NrLT5pc0J1aWx0aW5GdW5jdGlv
bigpKQogICAgICwgbV91c2VzTm9uU3RyaWN0RXZhbChjb2RlQmxvY2stPnVzZXNFdmFsKCkgJiYg
IWNvZGVCbG9jay0+aXNTdHJpY3RNb2RlKCkpCiAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBiZSBh
YmxlIHRvIGhhdmUgdGFpbCBjYWxsIGVsaW1pbmF0aW9uIHdpdGggdGhlIHByb2ZpbGVyCkBAIC0z
OTgsNyArMzk4LDcgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJgog
CiAgICAgYWxsb2NhdGVDYWxsZWVTYXZlU3BhY2UoKTsKICAgICAKLSAgICBTeW1ib2xUYWJsZSog
ZnVuY3Rpb25TeW1ib2xUYWJsZSA9IFN5bWJvbFRhYmxlOjpjcmVhdGUoKm1fdm0pOworICAgIFN5
bWJvbFRhYmxlKiBmdW5jdGlvblN5bWJvbFRhYmxlID0gU3ltYm9sVGFibGU6OmNyZWF0ZShtX3Zt
KTsKICAgICBmdW5jdGlvblN5bWJvbFRhYmxlLT5zZXRVc2VzTm9uU3RyaWN0RXZhbChtX3VzZXNO
b25TdHJpY3RFdmFsKTsKICAgICBpbnQgc3ltYm9sVGFibGVDb25zdGFudEluZGV4ID0gMDsKIApA
QCAtNTUwLDcgKzU1MCw3IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihW
TSYKICAgICAgICAgICAgICAgICAgICAgLy8gbm90aWZ5V3JpdGUoKSwgc2luY2UgdGhhdCB3b3Vs
ZCBiZSBjdW1iZXJzb21lLiBBbHNvLCB3YXRjaGluZyBmb3JtYWwKICAgICAgICAgICAgICAgICAg
ICAgLy8gcGFyYW1ldGVycyB3aGVuICJhcmd1bWVudHMiIGlzIGluIHBsYXkgaXMgdW5saWtlbHkg
dG8gYmUgc3VwZXIgcHJvZml0YWJsZS4KICAgICAgICAgICAgICAgICAgICAgLy8gU28sIHdlIGp1
c3QgZGlzYWJsZSBpdC4KLSAgICAgICAgICAgICAgICAgICAgZW50cnkuZGlzYWJsZVdhdGNoaW5n
KCptX3ZtKTsKKyAgICAgICAgICAgICAgICAgICAgZW50cnkuZGlzYWJsZVdhdGNoaW5nKG1fdm0p
OwogICAgICAgICAgICAgICAgICAgICBmdW5jdGlvblN5bWJvbFRhYmxlLT5zZXQoTm9Mb2NraW5n
TmVjZXNzYXJ5LCBuYW1lLCBlbnRyeSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgIE9wUHV0VG9TY29wZTo6ZW1pdCh0aGlzLCBtX2xleGljYWxFbnZpcm9ubWVudFJlZ2lzdGVy
LCBVSU5UX01BWCwgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSArIGkpLCBHZXRQdXRJbmZv
KFRocm93SWZOb3RGb3VuZCwgTG9jYWxDbG9zdXJlVmFyLCBJbml0aWFsaXphdGlvbk1vZGU6Ok5v
dEluaXRpYWxpemF0aW9uKSwgU3ltYm9sVGFibGVPclNjb3BlRGVwdGg6OnN5bWJvbFRhYmxlKFZp
cnR1YWxSZWdpc3RlciB7IHN5bWJvbFRhYmxlQ29uc3RhbnRJbmRleCB9KSwgb2Zmc2V0Lm9mZnNl
dCgpKTsKQEAgLTgwOCw3ICs4MDgsNyBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5l
cmF0b3IoVk0mCiAgICAgICAgIGVtaXRPdXRPZkxpbmVDYXRjaEhhbmRsZXIodGhyb3duVmFsdWUu
Z2V0KCksIG51bGxwdHIsIHRyeUZvcm1hbFBhcmFtZXRlcnNEYXRhKTsKIAogICAgICAgICAvLyBy
ZXR1cm4gcHJvbWlzZUNhcGFiaWxpdHkuQHJlamVjdCh0aHJvd25WYWx1ZSkKLSAgICAgICAgUmVm
UHRyPFJlZ2lzdGVySUQ+IHJlamVjdCA9IGVtaXRHZXRCeUlkKG5ld1RlbXBvcmFyeSgpLCBwcm9t
aXNlQ2FwYWJpbGl0eVJlZ2lzdGVyKCksIG1fdm0tPnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1l
cygpLnJlamVjdFByaXZhdGVOYW1lKCkpOworICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmVq
ZWN0ID0gZW1pdEdldEJ5SWQobmV3VGVtcG9yYXJ5KCksIHByb21pc2VDYXBhYmlsaXR5UmVnaXN0
ZXIoKSwgbV92bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5yZWplY3RQcml2YXRlTmFt
ZSgpKTsKIAogICAgICAgICBDYWxsQXJndW1lbnRzIGFyZ3MoKnRoaXMsIG51bGxwdHIsIDEpOwog
ICAgICAgICBlbWl0TG9hZChhcmdzLnRoaXNSZWdpc3RlcigpLCBqc1VuZGVmaW5lZCgpKTsKQEAg
LTgxNyw3ICs4MTcsNyBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoVk0m
CiAgICAgICAgIEpTVGV4dFBvc2l0aW9uIGRpdm90KGZ1bmN0aW9uTm9kZS0+Zmlyc3RMaW5lKCks
IGZ1bmN0aW9uTm9kZS0+c3RhcnRPZmZzZXQoKSwgZnVuY3Rpb25Ob2RlLT5saW5lU3RhcnRPZmZz
ZXQoKSk7CiAKICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHJlc3VsdCA9IGVtaXRDYWxsKG5l
d1RlbXBvcmFyeSgpLCByZWplY3QuZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgYXJncywgZGl2
b3QsIGRpdm90LCBkaXZvdCwgRGVidWdnYWJsZUNhbGw6Ok5vKTsKLSAgICAgICAgZW1pdFJldHVy
bihlbWl0R2V0QnlJZChuZXdUZW1wb3JhcnkoKSwgcHJvbWlzZUNhcGFiaWxpdHlSZWdpc3Rlcigp
LCBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5wcm9taXNlUHJpdmF0ZU5hbWUo
KSkpOworICAgICAgICBlbWl0UmV0dXJuKGVtaXRHZXRCeUlkKG5ld1RlbXBvcmFyeSgpLCBwcm9t
aXNlQ2FwYWJpbGl0eVJlZ2lzdGVyKCksIG1fdm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVz
KCkucHJvbWlzZVByaXZhdGVOYW1lKCkpKTsKIAogICAgICAgICBlbWl0TGFiZWwoZGlkTm90VGhy
b3cuZ2V0KCkpOwogICAgIH0KQEAgLTgzNiw3ICs4MzYsNyBAQCBCeXRlY29kZUdlbmVyYXRvcjo6
Qnl0ZWNvZGVHZW5lcmF0b3IoVk0mCiAgICAgLy8gU2V0IHVwIHRoZSBsZXhpY2FsIGVudmlyb25t
ZW50IHNjb3BlIGFzIHRoZSBnZW5lcmF0b3IgZnJhbWUuIFdlIHN0b3JlIHRoZSBzYXZlZCBhbmQg
cmVzdW1lZCBnZW5lcmF0b3IgcmVnaXN0ZXJzIGludG8gdGhpcyBzY29wZSB3aXRoIHRoZSBzeW1i
b2wga2V5cy4KICAgICAvLyBTaW5jZSB0aGV5IGFyZSBzeW1ib2wga2V5ZWQsIHRoZXNlIHZhcmlh
YmxlcyBjYW5ub3QgYmUgcmVhY2hlZCBmcm9tIHRoZSB1c3VhbCBjb2RlLgogICAgIGlmIChpc0dl
bmVyYXRvck9yQXN5bmNGdW5jdGlvbkJvZHlQYXJzZU1vZGUocGFyc2VNb2RlKSkgewotICAgICAg
ICBtX2dlbmVyYXRvckZyYW1lU3ltYm9sVGFibGUuc2V0KCptX3ZtLCBmdW5jdGlvblN5bWJvbFRh
YmxlKTsKKyAgICAgICAgbV9nZW5lcmF0b3JGcmFtZVN5bWJvbFRhYmxlLnNldChtX3ZtLCBmdW5j
dGlvblN5bWJvbFRhYmxlKTsKICAgICAgICAgbV9nZW5lcmF0b3JGcmFtZVN5bWJvbFRhYmxlSW5k
ZXggPSBzeW1ib2xUYWJsZUNvbnN0YW50SW5kZXg7CiAgICAgICAgIGlmIChtX2xleGljYWxFbnZp
cm9ubWVudFJlZ2lzdGVyKQogICAgICAgICAgICAgbW92ZShnZW5lcmF0b3JGcmFtZVJlZ2lzdGVy
KCksIG1fbGV4aWNhbEVudmlyb25tZW50UmVnaXN0ZXIpOwpAQCAtODYwLDcgKzg2MCw3IEBAIEJ5
dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihWTSYKICAgICAsIG1fY29kZUJsb2Nr
KHZtLCBjb2RlQmxvY2spCiAgICAgLCBtX3RoaXNSZWdpc3RlcihDYWxsRnJhbWU6OnRoaXNBcmd1
bWVudE9mZnNldCgpKQogICAgICwgbV9jb2RlVHlwZShFdmFsQ29kZSkKLSAgICAsIG1fdm0oJnZt
KQorICAgICwgbV92bSh2bSkKICAgICAsIG1fdXNlc05vblN0cmljdEV2YWwoY29kZUJsb2NrLT51
c2VzRXZhbCgpICYmICFjb2RlQmxvY2stPmlzU3RyaWN0TW9kZSgpKQogICAgICwgbV9uZWVkc1Rv
VXBkYXRlQXJyb3dGdW5jdGlvbkNvbnRleHQoZXZhbE5vZGUtPnVzZXNBcnJvd0Z1bmN0aW9uKCkg
fHwgZXZhbE5vZGUtPnVzZXNFdmFsKCkpCiAgICAgLCBtX2Rlcml2ZWRDb250ZXh0VHlwZShjb2Rl
QmxvY2stPmRlcml2ZWRDb250ZXh0VHlwZSgpKQpAQCAtOTIzLDcgKzkyMyw3IEBAIEJ5dGVjb2Rl
R2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihWTSYKICAgICAsIG1fY29kZUJsb2NrKHZtLCBj
b2RlQmxvY2spCiAgICAgLCBtX3RoaXNSZWdpc3RlcihDYWxsRnJhbWU6OnRoaXNBcmd1bWVudE9m
ZnNldCgpKQogICAgICwgbV9jb2RlVHlwZShNb2R1bGVDb2RlKQotICAgICwgbV92bSgmdm0pCisg
ICAgLCBtX3ZtKHZtKQogICAgICwgbV91c2VzTm9uU3RyaWN0RXZhbChmYWxzZSkKICAgICAsIG1f
bmVlZHNUb1VwZGF0ZUFycm93RnVuY3Rpb25Db250ZXh0KG1vZHVsZVByb2dyYW1Ob2RlLT51c2Vz
QXJyb3dGdW5jdGlvbigpIHx8IG1vZHVsZVByb2dyYW1Ob2RlLT51c2VzRXZhbCgpKQogewpAQCAt
OTM0LDcgKzkzNCw3IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihWTSYK
IAogICAgIGFsbG9jYXRlQ2FsbGVlU2F2ZVNwYWNlKCk7CiAKLSAgICBTeW1ib2xUYWJsZSogbW9k
dWxlRW52aXJvbm1lbnRTeW1ib2xUYWJsZSA9IFN5bWJvbFRhYmxlOjpjcmVhdGUoKm1fdm0pOwor
ICAgIFN5bWJvbFRhYmxlKiBtb2R1bGVFbnZpcm9ubWVudFN5bWJvbFRhYmxlID0gU3ltYm9sVGFi
bGU6OmNyZWF0ZShtX3ZtKTsKICAgICBtb2R1bGVFbnZpcm9ubWVudFN5bWJvbFRhYmxlLT5zZXRV
c2VzTm9uU3RyaWN0RXZhbChtX3VzZXNOb25TdHJpY3RFdmFsKTsKICAgICBtb2R1bGVFbnZpcm9u
bWVudFN5bWJvbFRhYmxlLT5zZXRTY29wZVR5cGUoU3ltYm9sVGFibGU6OlNjb3BlVHlwZTo6TGV4
aWNhbFNjb3BlKTsKIApAQCAtOTcyLDcgKzk3Miw3IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRl
Y29kZUdlbmVyYXRvcihWTSYKIAogICAgIC8vIE5vdyBkZWNsYXJlIGFsbCB2YXJpYWJsZXMuCiAK
LSAgICBjcmVhdGVWYXJpYWJsZShtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5t
ZXRhUHJpdmF0ZU5hbWUoKSwgVmFyS2luZDo6U2NvcGUsIG1vZHVsZUVudmlyb25tZW50U3ltYm9s
VGFibGUsIFZlcmlmeUV4aXN0aW5nKTsKKyAgICBjcmVhdGVWYXJpYWJsZShtX3ZtLnByb3BlcnR5
TmFtZXMtPmJ1aWx0aW5OYW1lcygpLm1ldGFQcml2YXRlTmFtZSgpLCBWYXJLaW5kOjpTY29wZSwg
bW9kdWxlRW52aXJvbm1lbnRTeW1ib2xUYWJsZSwgVmVyaWZ5RXhpc3RpbmcpOwogCiAgICAgZm9y
IChhdXRvJiBlbnRyeSA6IG1vZHVsZVByb2dyYW1Ob2RlLT52YXJEZWNsYXJhdGlvbnMoKSkgewog
ICAgICAgICBBU1NFUlQoIWVudHJ5LnZhbHVlLmlzTGV0KCkgJiYgIWVudHJ5LnZhbHVlLmlzQ29u
c3QoKSk7CkBAIC05OTQsNyArOTk0LDcgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2Vu
ZXJhdG9yKFZNJgogICAgIGlmIChzaG91bGRFbWl0VHlwZVByb2ZpbGVySG9va3MoKSkKICAgICAg
ICAgY29uc3RhbnRTeW1ib2xUYWJsZSA9IGFkZENvbnN0YW50VmFsdWUobW9kdWxlRW52aXJvbm1l
bnRTeW1ib2xUYWJsZSk7CiAgICAgZWxzZQotICAgICAgICBjb25zdGFudFN5bWJvbFRhYmxlID0g
YWRkQ29uc3RhbnRWYWx1ZShtb2R1bGVFbnZpcm9ubWVudFN5bWJvbFRhYmxlLT5jbG9uZVNjb3Bl
UGFydCgqbV92bSkpOworICAgICAgICBjb25zdGFudFN5bWJvbFRhYmxlID0gYWRkQ29uc3RhbnRW
YWx1ZShtb2R1bGVFbnZpcm9ubWVudFN5bWJvbFRhYmxlLT5jbG9uZVNjb3BlUGFydChtX3ZtKSk7
CiAKICAgICBwdXNoVERaVmFyaWFibGVzKGxleGljYWxWYXJpYWJsZXMsIFREWkNoZWNrT3B0aW1p
emF0aW9uOjpPcHRpbWl6ZSwgVERaUmVxdWlyZW1lbnQ6OlVuZGVyVERaKTsKICAgICBib29sIGlz
V2l0aFNjb3BlID0gZmFsc2U7CkBAIC0yMDE3LDcgKzIwMTcsNyBAQCB2b2lkIEJ5dGVjb2RlR2Vu
ZXJhdG9yOjpwdXNoTGV4aWNhbFNjb3BlCiAgICAgaWYgKHNob3VsZEVtaXREZWJ1Z0hvb2tzKCkp
CiAgICAgICAgIGVudmlyb25tZW50Lm1hcmtBbGxWYXJpYWJsZXNBc0NhcHR1cmVkKCk7CiAKLSAg
ICBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUgPSBTeW1ib2xUYWJsZTo6Y3JlYXRlKCptX3ZtKTsK
KyAgICBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUgPSBTeW1ib2xUYWJsZTo6Y3JlYXRlKG1fdm0p
OwogICAgIHN3aXRjaCAoc2NvcGVUeXBlKSB7CiAgICAgY2FzZSBTY29wZVR5cGU6OkNhdGNoU2Nv
cGU6CiAgICAgICAgIHN5bWJvbFRhYmxlLT5zZXRTY29wZVR5cGUoU3ltYm9sVGFibGU6OlNjb3Bl
VHlwZTo6Q2F0Y2hTY29wZSk7CkBAIC0yMDU0LDcgKzIwNTQsNyBAQCB2b2lkIEJ5dGVjb2RlR2Vu
ZXJhdG9yOjpwdXNoTGV4aWNhbFNjb3BlCiAgICAgICAgICAgICBuZXdTY29wZSA9IGFkZFZhcigp
OwogICAgICAgICBpZiAoIWNvbnN0YW50U3ltYm9sVGFibGUpIHsKICAgICAgICAgICAgIEFTU0VS
VCghc2hvdWxkRW1pdFR5cGVQcm9maWxlckhvb2tzKCkpOwotICAgICAgICAgICAgY29uc3RhbnRT
eW1ib2xUYWJsZSA9IGFkZENvbnN0YW50VmFsdWUoc3ltYm9sVGFibGUtPmNsb25lU2NvcGVQYXJ0
KCptX3ZtKSk7CisgICAgICAgICAgICBjb25zdGFudFN5bWJvbFRhYmxlID0gYWRkQ29uc3RhbnRW
YWx1ZShzeW1ib2xUYWJsZS0+Y2xvbmVTY29wZVBhcnQobV92bSkpOwogICAgICAgICAgICAgc3lt
Ym9sVGFibGVDb25zdGFudEluZGV4ID0gY29uc3RhbnRTeW1ib2xUYWJsZS0+aW5kZXgoKTsKICAg
ICAgICAgfQogICAgICAgICBpZiAoY29uc3RhbnRTeW1ib2xUYWJsZVJlc3VsdCkKQEAgLTI2NDUs
NyArMjY0NSw3IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RGlyZWMKIAog
ICAgIG1fc3RhdGljUHJvcGVydHlBbmFseXplci5wdXRCeUlkKGJhc2UsIHByb3BlcnR5SW5kZXgp
OwogCi0gICAgUHV0QnlJZEZsYWdzIHR5cGUgPSAocHV0VHlwZSA9PSBQcm9wZXJ0eU5vZGU6Oktu
b3duRGlyZWN0IHx8IHByb3BlcnR5ICE9IG1fdm0tPnByb3BlcnR5TmFtZXMtPnVuZGVyc2NvcmVQ
cm90bykgPyBQdXRCeUlkSXNEaXJlY3QgOiBQdXRCeUlkTm9uZTsKKyAgICBQdXRCeUlkRmxhZ3Mg
dHlwZSA9IChwdXRUeXBlID09IFByb3BlcnR5Tm9kZTo6S25vd25EaXJlY3QgfHwgcHJvcGVydHkg
IT0gbV92bS5wcm9wZXJ0eU5hbWVzLT51bmRlcnNjb3JlUHJvdG8pID8gUHV0QnlJZElzRGlyZWN0
IDogUHV0QnlJZE5vbmU7CiAgICAgT3BQdXRCeUlkOjplbWl0KHRoaXMsIGJhc2UsIHByb3BlcnR5
SW5kZXgsIHZhbHVlLCB0eXBlKTsKICAgICBtX2NvZGVCbG9jay0+YWRkUHJvcGVydHlBY2Nlc3NJ
bnN0cnVjdGlvbihtX2xhc3RJbnN0cnVjdGlvbi5vZmZzZXQoKSk7CiAgICAgcmV0dXJuIHZhbHVl
OwpAQCAtMjkyNiw3ICsyOTI2LDcgQEAgT3B0aW9uYWw8Q29tcGFjdFZhcmlhYmxlTWFwOjpIYW5k
bGU+IEJ5dAogICAgICAgICB9CiAgICAgfQogCi0gICAgbV9jYWNoZWRWYXJpYWJsZXNVbmRlclRE
WiA9IG1fdm0tPm1fY29tcGFjdFZhcmlhYmxlTWFwLT5nZXQoZW52aXJvbm1lbnQpOworICAgIG1f
Y2FjaGVkVmFyaWFibGVzVW5kZXJURFogPSBtX3ZtLm1fY29tcGFjdFZhcmlhYmxlTWFwLT5nZXQo
ZW52aXJvbm1lbnQpOwogICAgIG1faGFzQ2FjaGVkVmFyaWFibGVzVW5kZXJURFogPSAhZW52aXJv
bm1lbnQuaXNFbXB0eSgpOwogICAgIGlmICghbV9oYXNDYWNoZWRWYXJpYWJsZXNVbmRlclREWikK
ICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKQEAgLTI5NTYsOSArMjk1Niw5IEBAIFJlZ2lz
dGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TmV3T2IKIEpTVmFsdWUgQnl0ZWNvZGVHZW5l
cmF0b3I6OmFkZEJpZ0ludENvbnN0YW50KGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIsIHVp
bnQ4X3QgcmFkaXgsIGJvb2wgc2lnbikKIHsKICAgICByZXR1cm4gbV9iaWdJbnRNYXAuZW5zdXJl
KEJpZ0ludE1hcEVudHJ5KGlkZW50aWZpZXIuaW1wbCgpLCByYWRpeCwgc2lnbiksIFsmXSB7Ci0g
ICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKCp2bSgpKTsKKyAgICAgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0oKSk7CiAgICAgICAgIGF1dG8gcGFy
c2VJbnRTaWduID0gc2lnbiA/IEpTQmlnSW50OjpQYXJzZUludFNpZ246OlNpZ25lZCA6IEpTQmln
SW50OjpQYXJzZUludFNpZ246OlVuc2lnbmVkOwotICAgICAgICBKU0JpZ0ludCogYmlnSW50SW5N
YXAgPSBKU0JpZ0ludDo6cGFyc2VJbnQobnVsbHB0ciwgKnZtKCksIGlkZW50aWZpZXIuc3RyaW5n
KCksIHJhZGl4LCBKU0JpZ0ludDo6RXJyb3JQYXJzZU1vZGU6OlRocm93RXhjZXB0aW9ucywgcGFy
c2VJbnRTaWduKTsKKyAgICAgICAgSlNCaWdJbnQqIGJpZ0ludEluTWFwID0gSlNCaWdJbnQ6OnBh
cnNlSW50KG51bGxwdHIsIHZtKCksIGlkZW50aWZpZXIuc3RyaW5nKCksIHJhZGl4LCBKU0JpZ0lu
dDo6RXJyb3JQYXJzZU1vZGU6OlRocm93RXhjZXB0aW9ucywgcGFyc2VJbnRTaWduKTsKICAgICAg
ICAgLy8gRklYTUU6IFtFU05leHRdIEVuYWJsZXMgYSB3YXkgdG8gdGhyb3cgYW4gZXJyb3Igb24g
Qnl0ZUNvZGVHZW5lcmF0b3Igc3RlcAogICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTgwMTM5CiAgICAgICAgIHNjb3BlLmFzc2VydE5vRXhjZXB0aW9u
KCk7CkBAIC0yOTgzLDcgKzI5ODMsNyBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6
YWRkVGVtcGxhCiB7CiAgICAgYXV0byByZXN1bHQgPSBtX3RlbXBsYXRlT2JqZWN0RGVzY3JpcHRv
clNldC5hZGQoV1RGTW92ZShkZXNjcmlwdG9yKSk7CiAgICAgSlNUZW1wbGF0ZU9iamVjdERlc2Ny
aXB0b3IqIGRlc2NyaXB0b3JWYWx1ZSA9IG1fdGVtcGxhdGVEZXNjcmlwdG9yTWFwLmVuc3VyZShl
bmRPZmZzZXQsIFsmXSB7Ci0gICAgICAgIHJldHVybiBKU1RlbXBsYXRlT2JqZWN0RGVzY3JpcHRv
cjo6Y3JlYXRlKCp2bSgpLCByZXN1bHQuaXRlcmF0b3ItPmNvcHlSZWYoKSwgZW5kT2Zmc2V0KTsK
KyAgICAgICAgcmV0dXJuIEpTVGVtcGxhdGVPYmplY3REZXNjcmlwdG9yOjpjcmVhdGUodm0oKSwg
cmVzdWx0Lml0ZXJhdG9yLT5jb3B5UmVmKCksIGVuZE9mZnNldCk7CiAgICAgfSkuaXRlcmF0b3It
PnZhbHVlOwogICAgIGludCBpbmRleCA9IGFkZENvbnN0YW50SW5kZXgoKTsKICAgICBtX2NvZGVC
bG9jay0+YWRkQ29uc3RhbnQoZGVzY3JpcHRvclZhbHVlKTsKQEAgLTMxMDksNyArMzEwOSw3IEBA
IFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TmV3TWUKIFJlZ2lzdGVySUQqIEJ5
dGVjb2RlR2VuZXJhdG9yOjplbWl0TmV3RGVmYXVsdENvbnN0cnVjdG9yKFJlZ2lzdGVySUQqIGRz
dCwgQ29uc3RydWN0b3JLaW5kIGNvbnN0cnVjdG9yS2luZCwgY29uc3QgSWRlbnRpZmllciYgbmFt
ZSwKICAgICBjb25zdCBJZGVudGlmaWVyJiBlY21hTmFtZSwgY29uc3QgU291cmNlQ29kZSYgY2xh
c3NTb3VyY2UpCiB7Ci0gICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUg
PSBtX3ZtLT5idWlsdGluRXhlY3V0YWJsZXMoKS0+Y3JlYXRlRGVmYXVsdENvbnN0cnVjdG9yKGNv
bnN0cnVjdG9yS2luZCwgbmFtZSk7CisgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIGV4
ZWN1dGFibGUgPSBtX3ZtLmJ1aWx0aW5FeGVjdXRhYmxlcygpLT5jcmVhdGVEZWZhdWx0Q29uc3Ry
dWN0b3IoY29uc3RydWN0b3JLaW5kLCBuYW1lKTsKICAgICBleGVjdXRhYmxlLT5zZXRJbnZhbGlk
VHlwZVByb2ZpbGluZ09mZnNldHMoKTsKICAgICBleGVjdXRhYmxlLT5zZXRFY21hTmFtZShlY21h
TmFtZSk7CiAgICAgZXhlY3V0YWJsZS0+c2V0Q2xhc3NTb3VyY2UoY2xhc3NTb3VyY2UpOwpAQCAt
MzE0NCw3ICszMTQ0LDcgQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFNldEZ1bmN0aW9u
TgogICAgICAgICBDbGFzc0V4cHJOb2RlKiBjbGFzc0V4cHJOb2RlID0gc3RhdGljX2Nhc3Q8Q2xh
c3NFeHByTm9kZSo+KHZhbHVlTm9kZSk7CiAgICAgICAgIGlmICghY2xhc3NFeHByTm9kZS0+ZWNt
YU5hbWUoKS5pc051bGwoKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKGNsYXNz
RXhwck5vZGUtPmhhc1N0YXRpY1Byb3BlcnR5KG1fdm0tPnByb3BlcnR5TmFtZXMtPm5hbWUpKQor
ICAgICAgICBpZiAoY2xhc3NFeHByTm9kZS0+aGFzU3RhdGljUHJvcGVydHkobV92bS5wcm9wZXJ0
eU5hbWVzLT5uYW1lKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICB9IGVsc2UKICAgICAgICAg
cmV0dXJuOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29k
ZUdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29t
cGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zNzksOSArMzc5LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgfkJ5dGVj
b2RlR2VuZXJhdG9yKCk7CiAgICAgICAgIAotICAgICAgICBWTSogdm0oKSBjb25zdCB7IHJldHVy
biBtX3ZtOyB9CisgICAgICAgIFZNJiB2bSgpIGNvbnN0IHsgcmV0dXJuIG1fdm07IH0KICAgICAg
ICAgUGFyc2VyQXJlbmEmIHBhcnNlckFyZW5hKCkgY29uc3QgeyByZXR1cm4gbV9zY29wZU5vZGUt
PnBhcnNlckFyZW5hKCk7IH0KLSAgICAgICAgY29uc3QgQ29tbW9uSWRlbnRpZmllcnMmIHByb3Bl
cnR5TmFtZXMoKSBjb25zdCB7IHJldHVybiAqbV92bS0+cHJvcGVydHlOYW1lczsgfQorICAgICAg
ICBjb25zdCBDb21tb25JZGVudGlmaWVycyYgcHJvcGVydHlOYW1lcygpIGNvbnN0IHsgcmV0dXJu
ICptX3ZtLnByb3BlcnR5TmFtZXM7IH0KIAogICAgICAgICBib29sIGlzQ29uc3RydWN0b3IoKSBj
b25zdCB7IHJldHVybiBtX2NvZGVCbG9jay0+aXNDb25zdHJ1Y3RvcigpOyB9CiAgICAgICAgIERl
cml2ZWRDb250ZXh0VHlwZSBkZXJpdmVkQ29udGV4dFR5cGUoKSBjb25zdCB7IHJldHVybiBtX2Rl
cml2ZWRDb250ZXh0VHlwZTsgfQpAQCAtNTAwLDcgKzUwMCw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICB7CiAgICAgICAgICAgICAvLyBOb2RlOjplbWl0Q29kZSBhc3N1bWVzIHRoYXQgZHN0
LCBpZiBwcm92aWRlZCwgaXMgZWl0aGVyIGEgbG9jYWwgb3IgYSByZWZlcmVuY2VkIHRlbXBvcmFy
eS4KICAgICAgICAgICAgIEFTU0VSVCghZHN0IHx8IGRzdCA9PSBpZ25vcmVkUmVzdWx0KCkgfHwg
IWRzdC0+aXNUZW1wb3JhcnkoKSB8fCBkc3QtPnJlZkNvdW50KCkpOwotICAgICAgICAgICAgaWYg
KFVOTElLRUxZKCFtX3ZtLT5pc1NhZmVUb1JlY3Vyc2UoKSkpIHsKKyAgICAgICAgICAgIGlmIChV
TkxJS0VMWSghbV92bS5pc1NhZmVUb1JlY3Vyc2UoKSkpIHsKICAgICAgICAgICAgICAgICBlbWl0
VGhyb3dFeHByZXNzaW9uVG9vRGVlcEV4Y2VwdGlvbigpOwogICAgICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgICAgIH0KQEAgLTUzNiw3ICs1MzYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgewogICAgICAgICAgICAgLy8gTm9kZTo6ZW1pdENvZGUgYXNzdW1lcyB0aGF0IGRzdCwg
aWYgcHJvdmlkZWQsIGlzIGVpdGhlciBhIGxvY2FsIG9yIGEgcmVmZXJlbmNlZCB0ZW1wb3Jhcnku
CiAgICAgICAgICAgICBBU1NFUlQoIWRzdCB8fCBkc3QgPT0gaWdub3JlZFJlc3VsdCgpIHx8ICFk
c3QtPmlzVGVtcG9yYXJ5KCkgfHwgZHN0LT5yZWZDb3VudCgpKTsKLSAgICAgICAgICAgIGlmIChV
TkxJS0VMWSghbV92bS0+aXNTYWZlVG9SZWN1cnNlKCkpKQorICAgICAgICAgICAgaWYgKFVOTElL
RUxZKCFtX3ZtLmlzU2FmZVRvUmVjdXJzZSgpKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZW1p
dFRocm93RXhwcmVzc2lvblRvb0RlZXBFeGNlcHRpb24oKTsKICAgICAgICAgICAgIGlmIChVTkxJ
S0VMWShuLT5uZWVkc0RlYnVnSG9vaygpKSkKICAgICAgICAgICAgICAgICBlbWl0RGVidWdIb29r
KG4pOwpAQCAtNTU2LDcgKzU1Niw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBSZWdpc3Rl
cklEKiBlbWl0RGVmaW5lQ2xhc3NFbGVtZW50cyhQcm9wZXJ0eUxpc3ROb2RlKiBuLCBSZWdpc3Rl
cklEKiBjb25zdHJ1Y3RvciwgUmVnaXN0ZXJJRCogcHJvdG90eXBlKQogICAgICAgICB7CiAgICAg
ICAgICAgICBBU1NFUlQoY29uc3RydWN0b3ItPnJlZkNvdW50KCkgJiYgcHJvdG90eXBlLT5yZWZD
b3VudCgpKTsKLSAgICAgICAgICAgIGlmIChVTkxJS0VMWSghbV92bS0+aXNTYWZlVG9SZWN1cnNl
KCkpKQorICAgICAgICAgICAgaWYgKFVOTElLRUxZKCFtX3ZtLmlzU2FmZVRvUmVjdXJzZSgpKSkK
ICAgICAgICAgICAgICAgICByZXR1cm4gZW1pdFRocm93RXhwcmVzc2lvblRvb0RlZXBFeGNlcHRp
b24oKTsKICAgICAgICAgICAgIGlmIChVTkxJS0VMWShuLT5uZWVkc0RlYnVnSG9vaygpKSkKICAg
ICAgICAgICAgICAgICBlbWl0RGVidWdIb29rKG4pOwpAQCAtNTc5LDcgKzU3OSw3IEBAIG5hbWVz
cGFjZSBKU0MgewogCiAgICAgICAgIHZvaWQgZW1pdE5vZGVJbkNvbmRpdGlvbkNvbnRleHQoRXhw
cmVzc2lvbk5vZGUqIG4sIExhYmVsJiB0cnVlVGFyZ2V0LCBMYWJlbCYgZmFsc2VUYXJnZXQsIEZh
bGxUaHJvdWdoTW9kZSBmYWxsVGhyb3VnaE1vZGUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlm
IChVTkxJS0VMWSghbV92bS0+aXNTYWZlVG9SZWN1cnNlKCkpKSB7CisgICAgICAgICAgICBpZiAo
VU5MSUtFTFkoIW1fdm0uaXNTYWZlVG9SZWN1cnNlKCkpKSB7CiAgICAgICAgICAgICAgICAgZW1p
dFRocm93RXhwcmVzc2lvblRvb0RlZXBFeGNlcHRpb24oKTsKICAgICAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgICAgICB9CkBAIC0xMjkwLDcgKzEyOTAsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
IAogICAgICAgICBTdGF0aWNQcm9wZXJ0eUFuYWx5emVyIG1fc3RhdGljUHJvcGVydHlBbmFseXpl
cjsKIAotICAgICAgICBWTSogbV92bTsKKyAgICAgICAgVk0mIG1fdm07CiAKICAgICAgICAgT3Bj
b2RlSUQgbV9sYXN0T3Bjb2RlSUQgPSBvcF9lbmQ7CiAgICAgICAgIEluc3RydWN0aW9uU3RyZWFt
OjpNdXRhYmxlUmVmIG1fbGFzdEluc3RydWN0aW9uIHsgbV93cml0ZXIucmVmKCkgfTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdl
bi5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29t
cGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ2LDcgKzE0Niw3IEBA
IFJlZ2lzdGVySUQqIFJlZ0V4cE5vZGU6OmVtaXRCeXRlY29kZShCeXQKIAogICAgIGF1dG8gZmxh
Z3MgPSBZYXJyOjpwYXJzZUZsYWdzKG1fZmxhZ3Muc3RyaW5nKCkpOwogICAgIEFTU0VSVChmbGFn
cy5oYXNWYWx1ZSgpKTsKLSAgICBSZWdFeHAqIHJlZ0V4cCA9IFJlZ0V4cDo6Y3JlYXRlKCpnZW5l
cmF0b3Iudm0oKSwgbV9wYXR0ZXJuLnN0cmluZygpLCBmbGFncy52YWx1ZSgpKTsKKyAgICBSZWdF
eHAqIHJlZ0V4cCA9IFJlZ0V4cDo6Y3JlYXRlKGdlbmVyYXRvci52bSgpLCBtX3BhdHRlcm4uc3Ry
aW5nKCksIGZsYWdzLnZhbHVlKCkpOwogICAgIGlmIChyZWdFeHAtPmlzVmFsaWQoKSkKICAgICAg
ICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0TmV3UmVnRXhwKGdlbmVyYXRvci5maW5hbERlc3RpbmF0
aW9uKGRzdCksIHJlZ0V4cCk7CiAKQEAgLTQxMCwxMiArNDEwLDEyIEBAIFJlZ2lzdGVySUQqIEFy
cmF5Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGUKICAgICBhdXRvIG5ld0FycmF5ID0gWyZdIChSZWdp
c3RlcklEKiBkc3QsIEVsZW1lbnROb2RlKiBlbGVtZW50cywgdW5zaWduZWQgbGVuZ3RoLCBib29s
IGhhZFZhcmlhYmxlRXhwcmVzc2lvbikgewogICAgICAgICBpZiAobGVuZ3RoICYmICFoYWRWYXJp
YWJsZUV4cHJlc3Npb24pIHsKICAgICAgICAgICAgIHJlY29tbWVuZGVkSW5kZXhpbmdUeXBlIHw9
IENvcHlPbldyaXRlOwotICAgICAgICAgICAgQVNTRVJUKGdlbmVyYXRvci52bSgpLT5oZWFwLmlz
RGVmZXJyZWQoKSk7IC8vIFdlIHJ1biBieXRlY29kZSBnZW5lcmF0b3IgdW5kZXIgYSBEZWZlckdD
LiBJZiB3ZSBzdG9wcGVkIGRvaW5nIHRoYXQsIHdlJ2QgbmVlZCB0byBwdXQgYSBEZWZlckdDIGhl
cmUgYXMgd2UgZmlsbGVkIGluIHRoZXNlIHNsb3RzLgotICAgICAgICAgICAgYXV0byogYXJyYXkg
PSBKU0ltbXV0YWJsZUJ1dHRlcmZseTo6Y3JlYXRlKCpnZW5lcmF0b3Iudm0oKSwgcmVjb21tZW5k
ZWRJbmRleGluZ1R5cGUsIGxlbmd0aCk7CisgICAgICAgICAgICBBU1NFUlQoZ2VuZXJhdG9yLnZt
KCkuaGVhcC5pc0RlZmVycmVkKCkpOyAvLyBXZSBydW4gYnl0ZWNvZGUgZ2VuZXJhdG9yIHVuZGVy
IGEgRGVmZXJHQy4gSWYgd2Ugc3RvcHBlZCBkb2luZyB0aGF0LCB3ZSdkIG5lZWQgdG8gcHV0IGEg
RGVmZXJHQyBoZXJlIGFzIHdlIGZpbGxlZCBpbiB0aGVzZSBzbG90cy4KKyAgICAgICAgICAgIGF1
dG8qIGFycmF5ID0gSlNJbW11dGFibGVCdXR0ZXJmbHk6OmNyZWF0ZShnZW5lcmF0b3Iudm0oKSwg
cmVjb21tZW5kZWRJbmRleGluZ1R5cGUsIGxlbmd0aCk7CiAgICAgICAgICAgICB1bnNpZ25lZCBp
bmRleCA9IDA7CiAgICAgICAgICAgICBmb3IgKEVsZW1lbnROb2RlKiBlbGVtZW50ID0gZWxlbWVu
dHM7IGluZGV4IDwgbGVuZ3RoOyBlbGVtZW50ID0gZWxlbWVudC0+bmV4dCgpKSB7CiAgICAgICAg
ICAgICAgICAgQVNTRVJUKGVsZW1lbnQtPnZhbHVlKCktPmlzQ29uc3RhbnQoKSk7Ci0gICAgICAg
ICAgICAgICAgYXJyYXktPnNldEluZGV4KCpnZW5lcmF0b3Iudm0oKSwgaW5kZXgrKywgc3RhdGlj
X2Nhc3Q8Q29uc3RhbnROb2RlKj4oZWxlbWVudC0+dmFsdWUoKSktPmpzVmFsdWUoZ2VuZXJhdG9y
KSk7CisgICAgICAgICAgICAgICAgYXJyYXktPnNldEluZGV4KGdlbmVyYXRvci52bSgpLCBpbmRl
eCsrLCBzdGF0aWNfY2FzdDxDb25zdGFudE5vZGUqPihlbGVtZW50LT52YWx1ZSgpKS0+anNWYWx1
ZShnZW5lcmF0b3IpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBnZW5lcmF0
b3IuZW1pdE5ld0FycmF5QnVmZmVyKGRzdCwgYXJyYXksIHJlY29tbWVuZGVkSW5kZXhpbmdUeXBl
KTsKICAgICAgICAgfQpAQCAtOTM5LDcgKzkzOSw3IEBAIFJlZ2lzdGVySUQqIEZ1bmN0aW9uQ2Fs
bFZhbHVlTm9kZTo6ZW1pdEIKIAogUmVnaXN0ZXJJRCogRnVuY3Rpb25DYWxsUmVzb2x2ZU5vZGU6
OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBk
c3QpCiB7Ci0gICAgaWYgKFVOTElLRUxZKG1faWRlbnQgPT0gZ2VuZXJhdG9yLnZtKCktPnByb3Bl
cnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLmFzc2VydFByaXZhdGVOYW1lKCkpKSB7CisgICAgaWYg
KFVOTElLRUxZKG1faWRlbnQgPT0gZ2VuZXJhdG9yLnZtKCkucHJvcGVydHlOYW1lcy0+YnVpbHRp
bk5hbWVzKCkuYXNzZXJ0UHJpdmF0ZU5hbWUoKSkpIHsKICAgICAgICAgaWYgKEFTU0VSVF9ESVNB
QkxFRCkKICAgICAgICAgICAgIHJldHVybiBnZW5lcmF0b3IubW92ZShkc3QsIGdlbmVyYXRvci5l
bWl0TG9hZChudWxscHRyLCBqc1VuZGVmaW5lZCgpKSk7CiAgICAgfQpAQCAtMTAwNCw3ICsxMDA0
LDcgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVJbnRyaW5zaWNOb2RlOjplbWl0XwogICAgIFJlZlB0
cjxSZWdpc3RlcklEPiBiYXNlID0gZ2VuZXJhdG9yLmVtaXROb2RlKG5vZGUpOwogICAgIG5vZGUg
PSBub2RlLT5tX25leHQ7CiAgICAgQVNTRVJUKG5vZGUtPm1fZXhwci0+aXNTdHJpbmcoKSk7Ci0g
ICAgU3ltYm9sSW1wbCogc3ltYm9sID0gZ2VuZXJhdG9yLnZtKCktPnByb3BlcnR5TmFtZXMtPmxv
b2tVcFByaXZhdGVOYW1lKHN0YXRpY19jYXN0PFN0cmluZ05vZGUqPihub2RlLT5tX2V4cHIpLT52
YWx1ZSgpKTsKKyAgICBTeW1ib2xJbXBsKiBzeW1ib2wgPSBnZW5lcmF0b3Iudm0oKS5wcm9wZXJ0
eU5hbWVzLT5sb29rVXBQcml2YXRlTmFtZShzdGF0aWNfY2FzdDxTdHJpbmdOb2RlKj4obm9kZS0+
bV9leHByKS0+dmFsdWUoKSk7CiAgICAgQVNTRVJUKHN5bWJvbCk7CiAgICAgQVNTRVJUKCFub2Rl
LT5tX25leHQpOwogICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdERpcmVjdEdldEJ5SWQoZ2VuZXJh
dG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgYmFzZS5nZXQoKSwgZ2VuZXJhdG9yLnBhcnNlckFy
ZW5hKCkuaWRlbnRpZmllckFyZW5hKCkubWFrZUlkZW50aWZpZXIoZ2VuZXJhdG9yLnZtKCksIHN5
bWJvbCkpOwpAQCAtMTA1NSw3ICsxMDU1LDcgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVJbnRyaW5z
aWNOb2RlOjplbWl0XwogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBiYXNlID0gZ2VuZXJhdG9yLmVt
aXROb2RlKG5vZGUpOwogICAgIG5vZGUgPSBub2RlLT5tX25leHQ7CiAgICAgQVNTRVJUKG5vZGUt
Pm1fZXhwci0+aXNTdHJpbmcoKSk7Ci0gICAgU3ltYm9sSW1wbCogc3ltYm9sID0gZ2VuZXJhdG9y
LnZtKCktPnByb3BlcnR5TmFtZXMtPmxvb2tVcFByaXZhdGVOYW1lKHN0YXRpY19jYXN0PFN0cmlu
Z05vZGUqPihub2RlLT5tX2V4cHIpLT52YWx1ZSgpKTsKKyAgICBTeW1ib2xJbXBsKiBzeW1ib2wg
PSBnZW5lcmF0b3Iudm0oKS5wcm9wZXJ0eU5hbWVzLT5sb29rVXBQcml2YXRlTmFtZShzdGF0aWNf
Y2FzdDxTdHJpbmdOb2RlKj4obm9kZS0+bV9leHByKS0+dmFsdWUoKSk7CiAgICAgQVNTRVJUKHN5
bWJvbCk7CiAgICAgbm9kZSA9IG5vZGUtPm1fbmV4dDsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4g
dmFsdWUgPSBnZW5lcmF0b3IuZW1pdE5vZGUobm9kZSk7CkBAIC0xMTc0LDcgKzExNzQsNyBAQCBS
ZWdpc3RlcklEKiBCeXRlY29kZUludHJpbnNpY05vZGU6OmVtaXRfCiAgICAgICAgIEFTU0VSVCgh
bm9kZS0+bV9uZXh0KTsKICAgICAgICAgcmV0dXJuIGdlbmVyYXRvci5tb3ZlKGRzdCwgZ2VuZXJh
dG9yLmVtaXRUb09iamVjdCh0ZW1wLmdldCgpLCBzcmMuZ2V0KCksIG1lc3NhZ2UpKTsKICAgICB9
Ci0gICAgcmV0dXJuIGdlbmVyYXRvci5tb3ZlKGRzdCwgZ2VuZXJhdG9yLmVtaXRUb09iamVjdCh0
ZW1wLmdldCgpLCBzcmMuZ2V0KCksIGdlbmVyYXRvci52bSgpLT5wcm9wZXJ0eU5hbWVzLT5lbXB0
eUlkZW50aWZpZXIpKTsKKyAgICByZXR1cm4gZ2VuZXJhdG9yLm1vdmUoZHN0LCBnZW5lcmF0b3Iu
ZW1pdFRvT2JqZWN0KHRlbXAuZ2V0KCksIHNyYy5nZXQoKSwgZ2VuZXJhdG9yLnZtKCkucHJvcGVy
dHlOYW1lcy0+ZW1wdHlJZGVudGlmaWVyKSk7CiB9CiAKIFJlZ2lzdGVySUQqIEJ5dGVjb2RlSW50
cmluc2ljTm9kZTo6ZW1pdF9pbnRyaW5zaWNfaWRXaXRoUHJvZmlsZShCeXRlY29kZUdlbmVyYXRv
ciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCkBAIC0xMjk3LDcgKzEyOTcsNyBAQCBSZWdp
c3RlcklEKiBCeXRlY29kZUludHJpbnNpY05vZGU6OmVtaXRfCiAgICAgICAgIEFTU0VSVCh0eXBl
KCkgPT0gVHlwZTo6Q29uc3RhbnQpOyBcCiAgICAgICAgIGlmIChkc3QgPT0gZ2VuZXJhdG9yLmln
bm9yZWRSZXN1bHQoKSkgXAogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7IFwKLSAgICAgICAg
cmV0dXJuIGdlbmVyYXRvci5lbWl0TG9hZChkc3QsIGdlbmVyYXRvci52bSgpLT5ieXRlY29kZUlu
dHJpbnNpY1JlZ2lzdHJ5KCkubmFtZSMjVmFsdWUoZ2VuZXJhdG9yKSk7IFwKKyAgICAgICAgcmV0
dXJuIGdlbmVyYXRvci5lbWl0TG9hZChkc3QsIGdlbmVyYXRvci52bSgpLmJ5dGVjb2RlSW50cmlu
c2ljUmVnaXN0cnkoKS5uYW1lIyNWYWx1ZShnZW5lcmF0b3IpKTsgXAogICAgIH0KICAgICBKU0Nf
Q09NTU9OX0JZVEVDT0RFX0lOVFJJTlNJQ19DT05TVEFOVFNfRUFDSF9OQU1FKEpTQ19ERUNMQVJF
X0JZVEVDT0RFX0lOVFJJTlNJQ19DT05TVEFOVF9HRU5FUkFUT1JTKQogI3VuZGVmIEpTQ19ERUNM
QVJFX0JZVEVDT0RFX0lOVFJJTlNJQ19DT05TVEFOVF9HRU5FUkFUT1JTCkBAIC0yMzI0LDcgKzIz
MjQsNyBAQCBSZWdpc3RlcklEKiBJbnN0YW5jZU9mTm9kZTo6ZW1pdEJ5dGVjb2RlCiAgICAgZ2Vu
ZXJhdG9yLmVtaXRKdW1wSWZGYWxzZShpc09iamVjdC5nZXQoKSwgdHlwZUVycm9yLmdldCgpKTsK
IAogICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2b3RTdGFydCgp
LCBkaXZvdEVuZCgpKTsKLSAgICBnZW5lcmF0b3IuZW1pdEdldEJ5SWQoaGFzSW5zdGFuY2VWYWx1
ZS5nZXQoKSwgY29uc3RydWN0b3IuZ2V0KCksIGdlbmVyYXRvci52bSgpLT5wcm9wZXJ0eU5hbWVz
LT5oYXNJbnN0YW5jZVN5bWJvbCk7CisgICAgZ2VuZXJhdG9yLmVtaXRHZXRCeUlkKGhhc0luc3Rh
bmNlVmFsdWUuZ2V0KCksIGNvbnN0cnVjdG9yLmdldCgpLCBnZW5lcmF0b3Iudm0oKS5wcm9wZXJ0
eU5hbWVzLT5oYXNJbnN0YW5jZVN5bWJvbCk7CiAKICAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Np
b25JbmZvKGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgZ2VuZXJhdG9y
LmVtaXRPdmVycmlkZXNIYXNJbnN0YW5jZShpc0N1c3RvbS5nZXQoKSwgY29uc3RydWN0b3IuZ2V0
KCksIGhhc0luc3RhbmNlVmFsdWUuZ2V0KCkpOwpAQCAtMjMzMyw3ICsyMzMzLDcgQEAgUmVnaXN0
ZXJJRCogSW5zdGFuY2VPZk5vZGU6OmVtaXRCeXRlY29kZQogICAgIGdlbmVyYXRvci5lbWl0SnVt
cElmVHJ1ZShpc0N1c3RvbS5nZXQoKSwgY3VzdG9tLmdldCgpKTsKIAogICAgIGdlbmVyYXRvci5l
bWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKLSAg
ICBnZW5lcmF0b3IuZW1pdEdldEJ5SWQocHJvdG90eXBlLmdldCgpLCBjb25zdHJ1Y3Rvci5nZXQo
KSwgZ2VuZXJhdG9yLnZtKCktPnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSk7CisgICAgZ2VuZXJh
dG9yLmVtaXRHZXRCeUlkKHByb3RvdHlwZS5nZXQoKSwgY29uc3RydWN0b3IuZ2V0KCksIGdlbmVy
YXRvci52bSgpLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSk7CiAKICAgICBnZW5lcmF0b3IuZW1p
dEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAg
Z2VuZXJhdG9yLmVtaXRJbnN0YW5jZU9mKGRzdFJlZy5nZXQoKSwgdmFsdWUuZ2V0KCksIHByb3Rv
dHlwZS5nZXQoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdn
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1
Z2dlci5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1
Z2dlci9EZWJ1Z2dlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
IENvcHlyaWdodCAoQykgMjAwOC0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqICBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2Rl
Lm9yZykKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkK
ICAqCkBAIC01Niw3ICs1Niw3IEBAIHN0cnVjdCBHYXRoZXJTb3VyY2VQcm92aWRlcnMgOiBwdWJs
aWMgTWEKICAgICAgICAgCiAgICAgICAgIEpTQ2VsbCogY2VsbCA9IHN0YXRpY19jYXN0PEpTQ2Vs
bCo+KGhlYXBDZWxsKTsKICAgICAgICAgCi0gICAgICAgIEpTRnVuY3Rpb24qIGZ1bmN0aW9uID0g
anNEeW5hbWljQ2FzdDxKU0Z1bmN0aW9uKj4oKmNlbGwtPnZtKCksIGNlbGwpOworICAgICAgICBK
U0Z1bmN0aW9uKiBmdW5jdGlvbiA9IGpzRHluYW1pY0Nhc3Q8SlNGdW5jdGlvbio+KGNlbGwtPnZt
KCksIGNlbGwpOwogICAgICAgICBpZiAoIWZ1bmN0aW9uKQogICAgICAgICAgICAgcmV0dXJuIEl0
ZXJhdGlvblN0YXR1czo6Q29udGludWU7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZWJ1Z2dlci9EZWJ1Z2dlclBhcnNlRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyUGFyc2VEYXRhLmNwcAkocmV2aXNpb24gMjQ5MTI4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyUGFyc2VEYXRhLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2
LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0xNTQsNyArMTU0LDcgQEAgYm9vbCBnYXRoZXJEZWJ1Z2dlclBhcnNl
RGF0YShWTSYgdm0sIGNvbgogICAgIEpTUGFyc2VyU2NyaXB0TW9kZSBzY3JpcHRNb2RlID0gRGVi
dWdnZXJQYXJzZUluZm88VD46OnNjcmlwdE1vZGU7CiAKICAgICBQYXJzZXJFcnJvciBlcnJvcjsK
LSAgICBzdGQ6OnVuaXF1ZV9wdHI8Um9vdE5vZGU+IHJvb3ROb2RlID0gcGFyc2U8Um9vdE5vZGU+
KCZ2bSwgc291cmNlLCBJZGVudGlmaWVyKCksCisgICAgc3RkOjp1bmlxdWVfcHRyPFJvb3ROb2Rl
PiByb290Tm9kZSA9IHBhcnNlPFJvb3ROb2RlPih2bSwgc291cmNlLCBJZGVudGlmaWVyKCksCiAg
ICAgICAgIEpTUGFyc2VyQnVpbHRpbk1vZGU6Ok5vdEJ1aWx0aW4sIHN0cmljdE1vZGUsIHNjcmlw
dE1vZGUsIHBhcnNlTW9kZSwgU3VwZXJCaW5kaW5nOjpOb3ROZWVkZWQsCiAgICAgICAgIGVycm9y
LCBudWxscHRyLCBDb25zdHJ1Y3RvcktpbmQ6Ok5vbmUsIERlcml2ZWRDb250ZXh0VHlwZTo6Tm9u
ZSwgRXZhbENvbnRleHRUeXBlOjpOb25lLAogICAgICAgICAmZGVidWdnZXJQYXJzZURhdGEpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyU2NvcGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlclNjb3Bl
LmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2Vy
L0RlYnVnZ2VyU2NvcGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwOC0yMDA5LCAyMDE0LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTYzLDcg
KzE2Myw3IEBAIERlYnVnZ2VyU2NvcGUqIERlYnVnZ2VyU2NvcGU6Om5leHQoKQogewogICAgIEFT
U0VSVChpc1ZhbGlkKCkpOwogICAgIGlmICghbV9uZXh0ICYmIG1fc2NvcGUtPm5leHQoKSkgewot
ICAgICAgICBWTSYgdm0gPSAqbV9zY29wZS0+dm0oKTsKKyAgICAgICAgVk0mIHZtID0gbV9zY29w
ZS0+dm0oKTsKICAgICAgICAgRGVidWdnZXJTY29wZSogbmV4dFNjb3BlID0gY3JlYXRlKHZtLCBt
X3Njb3BlLT5uZXh0KCkpOwogICAgICAgICBtX25leHQuc2V0KHZtLCB0aGlzLCBuZXh0U2NvcGUp
OwogICAgIH0KQEAgLTIyNCw3ICsyMjQsNyBAQCBib29sIERlYnVnZ2VyU2NvcGU6OmlzTmVzdGVk
TGV4aWNhbFNjb3BlCiAKIFN0cmluZyBEZWJ1Z2dlclNjb3BlOjpuYW1lKCkgY29uc3QKIHsKLSAg
ICBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUgPSBtX3Njb3BlLT5zeW1ib2xUYWJsZSgqdm0oKSk7
CisgICAgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0gbV9zY29wZS0+c3ltYm9sVGFibGUodm0o
KSk7CiAgICAgaWYgKCFzeW1ib2xUYWJsZSkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCkBA
IC0yMzcsNyArMjM3LDcgQEAgU3RyaW5nIERlYnVnZ2VyU2NvcGU6Om5hbWUoKSBjb25zdAogCiBE
ZWJ1Z2dlckxvY2F0aW9uIERlYnVnZ2VyU2NvcGU6OmxvY2F0aW9uKCkgY29uc3QKIHsKLSAgICBT
eW1ib2xUYWJsZSogc3ltYm9sVGFibGUgPSBtX3Njb3BlLT5zeW1ib2xUYWJsZSgqdm0oKSk7Cisg
ICAgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0gbV9zY29wZS0+c3ltYm9sVGFibGUodm0oKSk7
CiAgICAgaWYgKCFzeW1ib2xUYWJsZSkKICAgICAgICAgcmV0dXJuIERlYnVnZ2VyTG9jYXRpb24o
KTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkSWRlbnRpZmll
cnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJl
ZElkZW50aWZpZXJzLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdEZXNpcmVkSWRlbnRpZmllcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODks
NyArODksNyBAQCB2b2lkIERlc2lyZWRJZGVudGlmaWVyczo6cmVhbGx5QWRkKFZNJiB2CiB7CiAg
ICAgZm9yIChhdXRvIHJlcCA6IG1fYWRkZWRJZGVudGlmaWVycykgewogICAgICAgICBBU1NFUlQo
cmVwLT5oYXNBdExlYXN0T25lUmVmKCkpOwotICAgICAgICBjb21tb25EYXRhLT5kZmdJZGVudGlm
aWVycy5hcHBlbmQoSWRlbnRpZmllcjo6ZnJvbVVpZCgmdm0sIHJlcCkpOworICAgICAgICBjb21t
b25EYXRhLT5kZmdJZGVudGlmaWVycy5hcHBlbmQoSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgcmVw
KSk7CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2ly
ZWRXYXRjaHBvaW50cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM4LDcgKzM4LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogdm9p
ZCBBcnJheUJ1ZmZlclZpZXdXYXRjaHBvaW50QWRhcHRvcjo6YWRkKAogICAgIENvZGVCbG9jayog
Y29kZUJsb2NrLCBKU0FycmF5QnVmZmVyVmlldyogdmlldywgQ29tbW9uRGF0YSYgY29tbW9uKQog
ewotICAgIFZNJiB2bSA9ICpjb2RlQmxvY2stPnZtKCk7CisgICAgVk0mIHZtID0gY29kZUJsb2Nr
LT52bSgpOwogICAgIFdhdGNocG9pbnQqIHdhdGNocG9pbnQgPSBjb21tb24ud2F0Y2hwb2ludHMu
YWRkKGNvZGVCbG9jayk7CiAgICAgQXJyYXlCdWZmZXJOZXV0ZXJpbmdXYXRjaHBvaW50U2V0KiBu
ZXV0ZXJpbmdXYXRjaHBvaW50ID0KICAgICAgICAgQXJyYXlCdWZmZXJOZXV0ZXJpbmdXYXRjaHBv
aW50U2V0OjpjcmVhdGUodm0pOwpAQCAtNjYsNyArNjYsNyBAQCB2b2lkIEZ1bmN0aW9uRXhlY3V0
YWJsZUFkYXB0b3I6OmFkZCgKIHZvaWQgQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50QWRhcHRv
cjo6YWRkKAogICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbiYga2V5LCBDb21tb25EYXRhJiBjb21tb24pCiB7Ci0gICAgVk0mIHZtID0gKmNvZGVC
bG9jay0+dm0oKTsKKyAgICBWTSYgdm0gPSBjb2RlQmxvY2stPnZtKCk7CiAgICAgc3dpdGNoIChr
ZXkua2luZCgpKSB7CiAgICAgY2FzZSBQcm9wZXJ0eUNvbmRpdGlvbjo6RXF1aXZhbGVuY2U6CiAg
ICAgICAgIGNvbW1vbi5hZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnRzLmFk
ZChrZXksIGNvZGVCbG9jayktPmluc3RhbGwodm0pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdGcm96ZW5WYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRnJvemVuVmFsdWUuaAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdGcm96ZW5WYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTgs
NyArNTgsNyBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9zdHJlbmd0aChzdHJlbmd0aCkKICAgICB7
CiAgICAgICAgIEFTU0VSVCgoISF2YWx1ZSAmJiB2YWx1ZS5pc0NlbGwoKSkgPT0gISFzdHJ1Y3R1
cmUpOwotICAgICAgICBBU1NFUlQoIXZhbHVlIHx8ICF2YWx1ZS5pc0NlbGwoKSB8fCB2YWx1ZS5h
c0NlbGwoKS0+Y2xhc3NJbmZvKCp2YWx1ZS5hc0NlbGwoKS0+dm0oKSkgPT0gc3RydWN0dXJlLT5j
bGFzc0luZm8oKSk7CisgICAgICAgIEFTU0VSVCghdmFsdWUgfHwgIXZhbHVlLmlzQ2VsbCgpIHx8
IHZhbHVlLmFzQ2VsbCgpLT5jbGFzc0luZm8odmFsdWUuYXNDZWxsKCktPnZtKCkpID09IHN0cnVj
dHVyZS0+Y2xhc3NJbmZvKCkpOwogICAgICAgICBBU1NFUlQoISFzdHJ1Y3R1cmUgfHwgKHN0cmVu
Z3RoID09IFdlYWtWYWx1ZSkpOwogICAgIH0KICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTcyNSw3ICsxNzI1LDcg
QEAgYm9vbCBHcmFwaDo6Y2FuT3B0aW1pemVTdHJpbmdPYmplY3RBY2NlcwogICAgIFN0cnVjdHVy
ZSogc3RyaW5nT2JqZWN0U3RydWN0dXJlID0gZ2xvYmFsT2JqZWN0Rm9yKGNvZGVPcmlnaW4pLT5z
dHJpbmdPYmplY3RTdHJ1Y3R1cmUoKTsKICAgICByZWdpc3RlclN0cnVjdHVyZShzdHJpbmdPYmpl
Y3RTdHJ1Y3R1cmUpOwogICAgIEFTU0VSVChzdHJpbmdPYmplY3RTdHJ1Y3R1cmUtPnN0b3JlZFBy
b3RvdHlwZSgpLmlzT2JqZWN0KCkpOwotICAgIEFTU0VSVChzdHJpbmdPYmplY3RTdHJ1Y3R1cmUt
PnN0b3JlZFByb3RvdHlwZSgpLmFzQ2VsbCgpLT5jbGFzc0luZm8oKnN0cmluZ09iamVjdFN0cnVj
dHVyZS0+c3RvcmVkUHJvdG90eXBlKCkuYXNDZWxsKCktPnZtKCkpID09IFN0cmluZ1Byb3RvdHlw
ZTo6aW5mbygpKTsKKyAgICBBU1NFUlQoc3RyaW5nT2JqZWN0U3RydWN0dXJlLT5zdG9yZWRQcm90
b3R5cGUoKS5hc0NlbGwoKS0+Y2xhc3NJbmZvKHN0cmluZ09iamVjdFN0cnVjdHVyZS0+c3RvcmVk
UHJvdG90eXBlKCkuYXNDZWxsKCktPnZtKCkpID09IFN0cmluZ1Byb3RvdHlwZTo6aW5mbygpKTsK
IAogICAgIGlmICghd2F0Y2hDb25kaXRpb25zKGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5
TWlzc0NvbmN1cnJlbnRseShtX3ZtLCBnbG9iYWxPYmplY3QsIHN0cmluZ09iamVjdFN0cnVjdHVy
ZSwgbV92bS5wcm9wZXJ0eU5hbWVzLT50b1ByaW1pdGl2ZVN5bWJvbC5pbXBsKCkpKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRD
b21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdK
SVRDb21waWxlci5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODUsNyArODUsNyBA
QCB2b2lkIEpJVENvbXBpbGVyOjpsaW5rT1NSRXhpdHMoKQogICAgICAgICB9CiAgICAgfQogICAg
IAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3NyRXhpdFRodW5r
ID0gdm0oKS0+Z2V0Q1RJU3R1Yihvc3JFeGl0VGh1bmtHZW5lcmF0b3IpOworICAgIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3NyRXhpdFRodW5rID0gdm0oKS5nZXRDVElT
dHViKG9zckV4aXRUaHVua0dlbmVyYXRvcik7CiAgICAgYXV0byBvc3JFeGl0VGh1bmtMYWJlbCA9
IENvZGVMb2NhdGlvbkxhYmVsPEpJVFRodW5rUHRyVGFnPihvc3JFeGl0VGh1bmsuY29kZSgpKTsK
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9qaXRDb2RlLT5vc3JFeGl0LnNpemUoKTsg
KytpKSB7CiAgICAgICAgIE9TUkV4aXRDb21waWxhdGlvbkluZm8mIGluZm8gPSBtX2V4aXRDb21w
aWxhdGlvbkluZm9baV07CkBAIC05Niw3ICs5Niw3IEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmtP
U1JFeGl0cygpCiAgICAgICAgICAgICBpbmZvLm1fcmVwbGFjZW1lbnREZXN0aW5hdGlvbiA9IGxh
YmVsKCk7CiAKICAgICAgICAgaml0QXNzZXJ0SGFzVmFsaWRDYWxsRnJhbWUoKTsKLSAgICAgICAg
c3RvcmUzMihUcnVzdGVkSW1tMzIoaSksICZ2bSgpLT5vc3JFeGl0SW5kZXgpOworICAgICAgICBz
dG9yZTMyKFRydXN0ZWRJbW0zMihpKSwgJnZtKCkub3NyRXhpdEluZGV4KTsKICAgICAgICAgaWYg
KE9wdGlvbnM6OnVzZVByb2JlT1NSRXhpdCgpKSB7CiAgICAgICAgICAgICBKdW1wIHRhcmdldCA9
IGp1bXAoKTsKICAgICAgICAgICAgIGFkZExpbmtUYXNrKFt0YXJnZXQsIG9zckV4aXRUaHVua0xh
YmVsXSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewpAQCAtMTQ3LDEwICsxNDcsMTAgQEAgdm9p
ZCBKSVRDb21waWxlcjo6Y29tcGlsZUV4Y2VwdGlvbkhhbmRsZQogICAgIGlmICghbV9leGNlcHRp
b25DaGVja3NXaXRoQ2FsbEZyYW1lUm9sbGJhY2suZW1wdHkoKSkgewogICAgICAgICBtX2V4Y2Vw
dGlvbkNoZWNrc1dpdGhDYWxsRnJhbWVSb2xsYmFjay5saW5rKHRoaXMpOwogCi0gICAgICAgIGNv
cHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCktPnRvcEVudHJ5
RnJhbWUpOworICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1
ZmZlcih2bSgpLnRvcEVudHJ5RnJhbWUpOwogCiAgICAgICAgIC8vIGxvb2t1cEV4Y2VwdGlvbkhh
bmRsZXJGcm9tQ2FsbGVyRnJhbWUgaXMgcGFzc2VkIHR3byBhcmd1bWVudHMsIHRoZSBWTSBhbmQg
dGhlIGV4ZWMgKHRoZSBDYWxsRnJhbWUqKS4KLSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKHZt
KCkpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
JnZtKCkpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwogICAgICAgICBtb3ZlKEdQUkluZm86OmNh
bGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOwogICAgICAgICBhZGRQdHIo
VHJ1c3RlZEltbTMyKG1fZ3JhcGguc3RhY2tQb2ludGVyT2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0
ZXIpKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsK
IApAQCAtMTYxLDE2ICsxNjEsMTYgQEAgdm9pZCBKSVRDb21waWxlcjo6Y29tcGlsZUV4Y2VwdGlv
bkhhbmRsZQogI2VuZGlmCiAgICAgICAgIG1fY2FsbHMuYXBwZW5kKENhbGxMaW5rUmVjb3JkKGNh
bGwoT3BlcmF0aW9uUHRyVGFnKSwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihsb29rdXBF
eGNlcHRpb25IYW5kbGVyRnJvbUNhbGxlckZyYW1lKSkpOwogCi0gICAgICAgIGp1bXBUb0V4Y2Vw
dGlvbkhhbmRsZXIoKnZtKCkpOworICAgICAgICBqdW1wVG9FeGNlcHRpb25IYW5kbGVyKHZtKCkp
OwogICAgIH0KIAogICAgIGlmICghbV9leGNlcHRpb25DaGVja3MuZW1wdHkoKSkgewogICAgICAg
ICBtX2V4Y2VwdGlvbkNoZWNrcy5saW5rKHRoaXMpOwogCi0gICAgICAgIGNvcHlDYWxsZWVTYXZl
c1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCktPnRvcEVudHJ5RnJhbWUpOworICAg
ICAgICBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgpLnRv
cEVudHJ5RnJhbWUpOwogCiAgICAgICAgIC8vIGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIgaXMgcGFz
c2VkIHR3byBhcmd1bWVudHMsIHRoZSBWTSBhbmQgdGhlIGV4ZWMgKHRoZSBDYWxsRnJhbWUqKS4K
LSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKHZtKCkpLCBHUFJJbmZvOjphcmd1bWVudEdQUjAp
OworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoJnZtKCkpLCBHUFJJbmZvOjphcmd1bWVudEdQ
UjApOwogICAgICAgICBtb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjph
cmd1bWVudEdQUjEpOwogCiAjaWYgQ1BVKFg4NikKQEAgLTE4MCw3ICsxODAsNyBAQCB2b2lkIEpJ
VENvbXBpbGVyOjpjb21waWxlRXhjZXB0aW9uSGFuZGxlCiAjZW5kaWYKICAgICAgICAgbV9jYWxs
cy5hcHBlbmQoQ2FsbExpbmtSZWNvcmQoY2FsbChPcGVyYXRpb25QdHJUYWcpLCBGdW5jdGlvblB0
cjxPcGVyYXRpb25QdHJUYWc+KGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIpKSk7CiAKLSAgICAgICAg
anVtcFRvRXhjZXB0aW9uSGFuZGxlcigqdm0oKSk7CisgICAgICAgIGp1bXBUb0V4Y2VwdGlvbkhh
bmRsZXIodm0oKSk7CiAgICAgfQogfQogCkBAIC0yNjYsNyArMjY2LDcgQEAgdm9pZCBKSVRDb21w
aWxlcjo6bGluayhMaW5rQnVmZmVyJiBsaW5rQgogICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1f
aW5CeUlkcywgbGlua0J1ZmZlcik7CiAgICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9pbnN0YW5j
ZU9mcywgbGlua0J1ZmZlcik7CiAKLSAgICBhdXRvIGxpbmtDYWxsVGh1bmsgPSBGdW5jdGlvblB0
cjxOb1B0clRhZz4odm0oKS0+Z2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5yZXRh
Z2dlZENvZGU8Tm9QdHJUYWc+KCkpOworICAgIGF1dG8gbGlua0NhbGxUaHVuayA9IEZ1bmN0aW9u
UHRyPE5vUHRyVGFnPih2bSgpLmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikucmV0
YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICBmb3IgKGF1dG8mIHJlY29yZCA6IG1fanNDYWxs
cykgewogICAgICAgICBDYWxsTGlua0luZm8mIGluZm8gPSAqcmVjb3JkLmluZm87CiAgICAgICAg
IGxpbmtCdWZmZXIubGluayhyZWNvcmQuc2xvd0NhbGwsIGxpbmtDYWxsVGh1bmspOwpAQCAtMjkz
LDcgKzI5Myw3IEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmsoTGlua0J1ZmZlciYgbGlua0IKICAg
ICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+
KHJlY29yZC5jYWxsKSk7CiAgICAgfQogICAgIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gb3NyRXhpdFRodW5rID0gdm0oKS0+Z2V0Q1RJU3R1Yihvc3JFeGl0R2Vu
ZXJhdGlvblRodW5rR2VuZXJhdG9yKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IG9zckV4aXRUaHVuayA9IHZtKCkuZ2V0Q1RJU3R1Yihvc3JFeGl0R2VuZXJhdGlv
blRodW5rR2VuZXJhdG9yKTsKICAgICBhdXRvIHRhcmdldCA9IENvZGVMb2NhdGlvbkxhYmVsPEpJ
VFRodW5rUHRyVGFnPihvc3JFeGl0VGh1bmsuY29kZSgpKTsKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbV9qaXRDb2RlLT5vc3JFeGl0LnNpemUoKTsgKytpKSB7CiAgICAgICAgIE9TUkV4
aXRDb21waWxhdGlvbkluZm8mIGluZm8gPSBtX2V4aXRDb21waWxhdGlvbkluZm9baV07CkBAIC0z
NTQsNyArMzU0LDcgQEAgc3RhdGljIHZvaWQgZW1pdFN0YWNrT3ZlcmZsb3dDaGVjayhKSVRDbwog
ICAgIGppdC5hZGRQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihmcmFtZVRvcE9mZnNl
dCksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjpyZWdUMSk7CiAgICAgaWYg
KFVOTElLRUxZKG1heEZyYW1lU2l6ZSA+IE9wdGlvbnM6OnJlc2VydmVkWm9uZVNpemUoKSkpCiAg
ICAgICAgIHN0YWNrT3ZlcmZsb3cuYXBwZW5kKGppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6
OkFib3ZlLCBHUFJJbmZvOjpyZWdUMSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpKTsKLSAg
ICBzdGFja092ZXJmbG93LmFwcGVuZChqaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpBYm92
ZSwgTWFjcm9Bc3NlbWJsZXI6OkFic29sdXRlQWRkcmVzcyhqaXQudm0oKS0+YWRkcmVzc09mU29m
dFN0YWNrTGltaXQoKSksIEdQUkluZm86OnJlZ1QxKSk7CisgICAgc3RhY2tPdmVyZmxvdy5hcHBl
bmQoaml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6QWJvdmUsIE1hY3JvQXNzZW1ibGVyOjpB
YnNvbHV0ZUFkZHJlc3Moaml0LnZtKCkuYWRkcmVzc09mU29mdFN0YWNrTGltaXQoKSksIEdQUklu
Zm86OnJlZ1QxKSk7CiB9CiAKIHZvaWQgSklUQ29tcGlsZXI6OmNvbXBpbGUoKQpAQCAtNTE5LDcg
KzUxOSw3IEBAIHZvaWQgSklUQ29tcGlsZXI6OmNvbXBpbGVGdW5jdGlvbigpCiAgICAgY29kZUJs
b2NrKCktPnNocmlua1RvRml0KENvZGVCbG9jazo6TGF0ZVNocmluayk7CiAKICAgICBpZiAocmVx
dWlyZXNBcml0eUZpeHVwKQotICAgICAgICBsaW5rQnVmZmVyLT5saW5rKGNhbGxBcml0eUZpeHVw
LCBGdW5jdGlvblB0cjxKSVRUaHVua1B0clRhZz4odm0oKS0+Z2V0Q1RJU3R1Yihhcml0eUZpeHVw
R2VuZXJhdG9yKS5jb2RlKCkpKTsKKyAgICAgICAgbGlua0J1ZmZlci0+bGluayhjYWxsQXJpdHlG
aXh1cCwgRnVuY3Rpb25QdHI8SklUVGh1bmtQdHJUYWc+KHZtKCkuZ2V0Q1RJU3R1Yihhcml0eUZp
eHVwR2VuZXJhdG9yKS5jb2RlKCkpKTsKIAogICAgIGRpc2Fzc2VtYmxlKCpsaW5rQnVmZmVyKTsK
IApAQCAtNjUzLDExICs2NTMsMTEgQEAgdm9pZCBKSVRDb21waWxlcjo6ZXhjZXB0aW9uQ2hlY2so
KQogICAgIGJvb2wgd2lsbENhdGNoRXhjZXB0aW9uID0gbV9ncmFwaC53aWxsQ2F0Y2hFeGNlcHRp
b25Jbk1hY2hpbmVGcmFtZShtX3NwZWN1bGF0aXZlLT5tX2N1cnJlbnROb2RlLT5vcmlnaW4uZm9y
RXhpdCwgb3BDYXRjaE9yaWdpbiwgZXhjZXB0aW9uSGFuZGxlcik7IAogICAgIGlmICh3aWxsQ2F0
Y2hFeGNlcHRpb24pIHsKICAgICAgICAgdW5zaWduZWQgc3RyZWFtSW5kZXggPSBtX3NwZWN1bGF0
aXZlLT5tX291dE9mTGluZVN0cmVhbUluZGV4ID8gKm1fc3BlY3VsYXRpdmUtPm1fb3V0T2ZMaW5l
U3RyZWFtSW5kZXggOiBtX3NwZWN1bGF0aXZlLT5tX3N0cmVhbS0+c2l6ZSgpOwotICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6SnVtcCBoYWRFeGNlcHRpb24gPSBlbWl0Tm9uUGF0Y2hhYmxlRXhjZXB0
aW9uQ2hlY2soKnZtKCkpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBoYWRFeGNlcHRp
b24gPSBlbWl0Tm9uUGF0Y2hhYmxlRXhjZXB0aW9uQ2hlY2sodm0oKSk7CiAgICAgICAgIC8vIFdl
IGFzc3VtZSBoZXJlIHRoYXQgdGhpcyBpcyBjYWxsZWQgYWZ0ZXIgY2FsbE9wZWFydGlvbigpL2Fw
cGVuZENhbGwoKSBpcyBjYWxsZWQuCiAgICAgICAgIGFwcGVuZEV4Y2VwdGlvbkhhbmRsaW5nT1NS
RXhpdChFeGNlcHRpb25DaGVjaywgc3RyZWFtSW5kZXgsIG9wQ2F0Y2hPcmlnaW4sIGV4Y2VwdGlv
bkhhbmRsZXIsIG1faml0Q29kZS0+Y29tbW9uLmxhc3RDYWxsU2l0ZSgpLCBoYWRFeGNlcHRpb24p
OwogICAgIH0gZWxzZQotICAgICAgICBtX2V4Y2VwdGlvbkNoZWNrcy5hcHBlbmQoZW1pdEV4Y2Vw
dGlvbkNoZWNrKCp2bSgpKSk7CisgICAgICAgIG1fZXhjZXB0aW9uQ2hlY2tzLmFwcGVuZChlbWl0
RXhjZXB0aW9uQ2hlY2sodm0oKSkpOwogfQogCiBDYWxsU2l0ZUluZGV4IEpJVENvbXBpbGVyOjpy
ZWNvcmRDYWxsU2l0ZUFuZEdlbmVyYXRlRXhjZXB0aW9uSGFuZGxpbmdPU1JFeGl0SWZOZWVkZWQo
Y29uc3QgQ29kZU9yaWdpbiYgY2FsbFNpdGVDb2RlT3JpZ2luLCB1bnNpZ25lZCBldmVudFN0cmVh
bUluZGV4KQpAQCAtNjkxLDcgKzY5MSw3IEBAIHZvaWQgSklUQ29tcGlsZXI6Om1ha2VDYXRjaE9T
UkVudHJ5QnVmZmUKIHsKICAgICBpZiAobV9ncmFwaC5tX21heExvY2Fsc0ZvckNhdGNoT1NSRW50
cnkpIHsKICAgICAgICAgdWludDMyX3QgbnVtYmVyT2ZMaXZlTG9jYWxzID0gc3RkOjptYXgoKm1f
Z3JhcGgubV9tYXhMb2NhbHNGb3JDYXRjaE9TUkVudHJ5LCAxdSk7IC8vIE1ha2Ugc3VyZSB3ZSBh
bHdheXMgYWxsb2NhdGUgYSBub24tbnVsbCBjYXRjaE9TUkVudHJ5QnVmZmVyLgotICAgICAgICBt
X2ppdENvZGUtPmNvbW1vbi5jYXRjaE9TUkVudHJ5QnVmZmVyID0gdm0oKS0+c2NyYXRjaEJ1ZmZl
ckZvclNpemUoc2l6ZW9mKEpTVmFsdWUpICogbnVtYmVyT2ZMaXZlTG9jYWxzKTsKKyAgICAgICAg
bV9qaXRDb2RlLT5jb21tb24uY2F0Y2hPU1JFbnRyeUJ1ZmZlciA9IHZtKCkuc2NyYXRjaEJ1ZmZl
ckZvclNpemUoc2l6ZW9mKEpTVmFsdWUpICogbnVtYmVyT2ZMaXZlTG9jYWxzKTsKICAgICB9CiB9
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgJKHJl
dmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGls
ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTEtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE1MCwxMyArMTUwLDEzIEBAIHB1YmxpYzoKIAogICAg
IHZvaWQgZXhjZXB0aW9uQ2hlY2tXaXRoQ2FsbEZyYW1lUm9sbGJhY2soKQogICAgIHsKLSAgICAg
ICAgbV9leGNlcHRpb25DaGVja3NXaXRoQ2FsbEZyYW1lUm9sbGJhY2suYXBwZW5kKGVtaXRFeGNl
cHRpb25DaGVjaygqdm0oKSkpOworICAgICAgICBtX2V4Y2VwdGlvbkNoZWNrc1dpdGhDYWxsRnJh
bWVSb2xsYmFjay5hcHBlbmQoZW1pdEV4Y2VwdGlvbkNoZWNrKHZtKCkpKTsKICAgICB9CiAKICAg
ICAvLyBBZGQgYSBjYWxsIG91dCBmcm9tIEpJVCBjb2RlLCB3aXRoIGEgZmFzdCBleGNlcHRpb24g
Y2hlY2sgdGhhdCB0ZXN0cyBpZiB0aGUgcmV0dXJuIHZhbHVlIGlzIHplcm8uCiAgICAgdm9pZCBm
YXN0RXhjZXB0aW9uQ2hlY2soKQogICAgIHsKLSAgICAgICAgY2FsbEV4Y2VwdGlvbkZ1enooKnZt
KCkpOworICAgICAgICBjYWxsRXhjZXB0aW9uRnV6eih2bSgpKTsKICAgICAgICAgbV9leGNlcHRp
b25DaGVja3MuYXBwZW5kKGJyYW5jaFRlc3RQdHIoWmVybywgR1BSSW5mbzo6cmV0dXJuVmFsdWVH
UFIpKTsKICAgICB9CiAgICAgCkBAIC0yNTQsNyArMjU0LDcgQEAgcHVibGljOgogCiAgICAgUENU
b0NvZGVPcmlnaW5NYXBCdWlsZGVyJiBwY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIoKSB7IHJldHVy
biBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlcjsgfQogCi0gICAgVk0qIHZtKCkgeyByZXR1cm4g
Jm1fZ3JhcGgubV92bTsgfQorICAgIFZNJiB2bSgpIHsgcmV0dXJuIG1fZ3JhcGgubV92bTsgfQog
CiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBPU1JFeGl0SnVtcFBsYWNlaG9sZGVyOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMYXp5SlNWYWx1ZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMYXp5SlNWYWx1ZS5jcHAJKHJldmlz
aW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTGF6eUpTVmFsdWUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMywgMjAxNCwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ5LDExICs0OSwxMSBAQCBKU1ZhbHVlIExh
enlKU1ZhbHVlOjpnZXRWYWx1ZShWTSYgdm0pIGNvCiAgICAgY2FzZSBLbm93blZhbHVlOgogICAg
ICAgICByZXR1cm4gdmFsdWUoKS0+dmFsdWUoKTsKICAgICBjYXNlIFNpbmdsZUNoYXJhY3RlclN0
cmluZzoKLSAgICAgICAgcmV0dXJuIGpzU2luZ2xlQ2hhcmFjdGVyU3RyaW5nKCZ2bSwgdS5jaGFy
YWN0ZXIpOworICAgICAgICByZXR1cm4ganNTaW5nbGVDaGFyYWN0ZXJTdHJpbmcodm0sIHUuY2hh
cmFjdGVyKTsKICAgICBjYXNlIEtub3duU3RyaW5nSW1wbDoKLSAgICAgICAgcmV0dXJuIGpzU3Ry
aW5nKCZ2bSwgdS5zdHJpbmdJbXBsKTsKKyAgICAgICAgcmV0dXJuIGpzU3RyaW5nKHZtLCB1LnN0
cmluZ0ltcGwpOwogICAgIGNhc2UgTmV3U3RyaW5nSW1wbDoKLSAgICAgICAgcmV0dXJuIGpzU3Ry
aW5nKCZ2bSwgQXRvbVN0cmluZ0ltcGw6OmFkZCh1LnN0cmluZ0ltcGwpKTsKKyAgICAgICAgcmV0
dXJuIGpzU3RyaW5nKHZtLCBBdG9tU3RyaW5nSW1wbDo6YWRkKHUuc3RyaW5nSW1wbCkpOwogICAg
IH0KICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVybiBKU1ZhbHVl
KCk7CkBAIC0yNTEsNyArMjUxLDcgQEAgdm9pZCBMYXp5SlNWYWx1ZTo6ZW1pdChDQ2FsbEhlbHBl
cnMmIGppdAogICAgIAogICAgIGppdC5hZGRMaW5rVGFzaygKICAgICAgICAgW2NvZGVCbG9jaywg
bGFiZWwsIHRoaXNWYWx1ZV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAg
IEpTVmFsdWUgcmVhbFZhbHVlID0gdGhpc1ZhbHVlLmdldFZhbHVlKCpjb2RlQmxvY2stPnZtKCkp
OworICAgICAgICAgICAgSlNWYWx1ZSByZWFsVmFsdWUgPSB0aGlzVmFsdWUuZ2V0VmFsdWUoY29k
ZUJsb2NrLT52bSgpKTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlYWxWYWx1ZS5pc0Nl
bGwoKSk7CiAKICAgICAgICAgICAgIGNvZGVCbG9jay0+YWRkQ29uc3RhbnQocmVhbFZhbHVlKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCShyZXZpc2lv
biAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTA5LDcgKzEwOSw3IEBAIHZvaWQqIHByZXBhcmVPU1JFbnRyeShF
eGVjU3RhdGUqIGV4ZWMsIEMKICAgICAgICAgICAgICIgZnJvbSBiYyMiLCBieXRlY29kZUluZGV4
LCAiXG4iKTsKICAgICB9CiAgICAgCi0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKIAogICAgIHNhbml0aXplU3RhY2tGb3JWTSh2bSk7CiAgICAgCkBA
IC0yMzgsNyArMjM4LDcgQEAgdm9pZCogcHJlcGFyZU9TUkVudHJ5KEV4ZWNTdGF0ZSogZXhlYywg
QwogICAgIC8vICAgIHdvdWxkIGhhdmUgb3RoZXJ3aXNlIGp1c3Qga2VwdCBydW5uaW5nIGFsYmVp
dCBsZXNzIHF1aWNrbHkuCiAgICAgCiAgICAgdW5zaWduZWQgZnJhbWVTaXplRm9yQ2hlY2sgPSBq
aXRDb2RlLT5jb21tb24ucmVxdWlyZWRSZWdpc3RlckNvdW50Rm9yRXhlY3V0aW9uQW5kRXhpdCgp
OwotICAgIGlmIChVTkxJS0VMWSghdm0tPmVuc3VyZVN0YWNrQ2FwYWNpdHlGb3IoJmV4ZWMtPnJl
Z2lzdGVycygpW3ZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGZyYW1lU2l6ZUZvckNoZWNrIC0gMSku
b2Zmc2V0KCldKSkpIHsKKyAgICBpZiAoVU5MSUtFTFkoIXZtLmVuc3VyZVN0YWNrQ2FwYWNpdHlG
b3IoJmV4ZWMtPnJlZ2lzdGVycygpW3ZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGZyYW1lU2l6ZUZv
ckNoZWNrIC0gMSkub2Zmc2V0KCldKSkpIHsKICAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VP
U1IoKSkKICAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgT1NSIGZhaWxlZCBiZWNhdXNlIHN0YWNr
IGdyb3d0aCBmYWlsZWQuXG4iKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0yNTgsNyAr
MjU4LDcgQEAgdm9pZCogcHJlcGFyZU9TUkVudHJ5KEV4ZWNTdGF0ZSogZXhlYywgQwogICAgIHVu
c2lnbmVkIGJhc2VsaW5lRnJhbWVTaXplID0gZW50cnktPm1fZXhwZWN0ZWRWYWx1ZXMubnVtYmVy
T2ZMb2NhbHMoKTsKICAgICB1bnNpZ25lZCBtYXhGcmFtZVNpemUgPSBzdGQ6Om1heChmcmFtZVNp
emUsIGJhc2VsaW5lRnJhbWVTaXplKTsKIAotICAgIFJlZ2lzdGVyKiBzY3JhdGNoID0gYml0d2lz
ZV9jYXN0PFJlZ2lzdGVyKj4odm0tPnNjcmF0Y2hCdWZmZXJGb3JTaXplKHNpemVvZihSZWdpc3Rl
cikgKiAoMiArIENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzICsgbWF4RnJhbWVTaXpl
KSktPmRhdGFCdWZmZXIoKSk7CisgICAgUmVnaXN0ZXIqIHNjcmF0Y2ggPSBiaXR3aXNlX2Nhc3Q8
UmVnaXN0ZXIqPih2bS5zY3JhdGNoQnVmZmVyRm9yU2l6ZShzaXplb2YoUmVnaXN0ZXIpICogKDIg
KyBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycyArIG1heEZyYW1lU2l6ZSkpLT5kYXRh
QnVmZmVyKCkpOwogICAgIAogICAgICpiaXR3aXNlX2Nhc3Q8c2l6ZV90Kj4oc2NyYXRjaCArIDAp
ID0gZnJhbWVTaXplOwogICAgIApAQCAtMzExLDcgKzMxMSw3IEBAIHZvaWQqIHByZXBhcmVPU1JF
bnRyeShFeGVjU3RhdGUqIGV4ZWMsIEMKICAgICBSZWdpc3RlclNldCBkb250U2F2ZVJlZ2lzdGVy
cyA9IFJlZ2lzdGVyU2V0KFJlZ2lzdGVyU2V0OjpzdGFja1JlZ2lzdGVycygpLCBSZWdpc3RlclNl
dDo6YWxsRlBScygpKTsKIAogICAgIHVuc2lnbmVkIHJlZ2lzdGVyQ291bnQgPSByZWdpc3RlclNh
dmVMb2NhdGlvbnMtPnNpemUoKTsKLSAgICBWTUVudHJ5UmVjb3JkKiByZWNvcmQgPSB2bUVudHJ5
UmVjb3JkKHZtLT50b3BFbnRyeUZyYW1lKTsKKyAgICBWTUVudHJ5UmVjb3JkKiByZWNvcmQgPSB2
bUVudHJ5UmVjb3JkKHZtLnRvcEVudHJ5RnJhbWUpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCByZWdpc3RlckNvdW50OyBpKyspIHsKICAgICAgICAgUmVnaXN0ZXJBdE9mZnNldCBjdXJy
ZW50RW50cnkgPSByZWdpc3RlclNhdmVMb2NhdGlvbnMtPmF0KGkpOwogICAgICAgICBpZiAoZG9u
dFNhdmVSZWdpc3RlcnMuZ2V0KGN1cnJlbnRFbnRyeS5yZWcoKSkpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEw
MjEsMTcgKzEwMjEsMTcgQEAgdm9pZCBPU1JFeGl0OjplbWl0UmVzdG9yZUFyZ3VtZW50cyhDQ2Fs
bAogCiB2b2lkIEpJVF9PUEVSQVRJT04gT1NSRXhpdDo6Y29tcGlsZU9TUkV4aXQoRXhlY1N0YXRl
KiBleGVjKQogewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBpZiAodmFsaWRhdGVE
RkdEb2VzR0MpIHsKICAgICAgICAgLy8gV2UncmUgYWJvdXQgdG8gZXhpdCBvcHRpbWl6ZWQgY29k
ZS4gU28sIHRoZXJlJ3Mgbm8gbG9uZ2VyIGFueSBvcHRpbWl6ZWQKICAgICAgICAgLy8gY29kZSBy
dW5uaW5nIHRoYXQgZXhwZWN0cyBubyBHQy4KLSAgICAgICAgdm0tPmhlYXAuc2V0RXhwZWN0RG9l
c0dDKHRydWUpOworICAgICAgICB2bS5oZWFwLnNldEV4cGVjdERvZXNHQyh0cnVlKTsKICAgICB9
CiAKLSAgICBpZiAodm0tPmNhbGxGcmFtZUZvckNhdGNoKQotICAgICAgICBSRUxFQVNFX0FTU0VS
VCh2bS0+Y2FsbEZyYW1lRm9yQ2F0Y2ggPT0gZXhlYyk7CisgICAgaWYgKHZtLmNhbGxGcmFtZUZv
ckNhdGNoKQorICAgICAgICBSRUxFQVNFX0FTU0VSVCh2bS5jYWxsRnJhbWVGb3JDYXRjaCA9PSBl
eGVjKTsKIAogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7CiAg
ICAgQVNTRVJUKGNvZGVCbG9jayk7CkBAIC0xMDM5LDEyICsxMDM5LDEyIEBAIHZvaWQgSklUX09Q
RVJBVElPTiBPU1JFeGl0Ojpjb21waWxlT1NSRXgKIAogICAgIC8vIEl0J3Mgc29ydCBvZiBwcmVm
ZXJhYmxlIHRoYXQgd2UgZG9uJ3QgR0Mgd2hpbGUgaW4gaGVyZS4gQW55d2F5cywgZG9pbmcgc28g
d291bGRuJ3QKICAgICAvLyByZWFsbHkgYmUgcHJvZml0YWJsZS4KLSAgICBEZWZlckdDRm9yQVdo
aWxlIGRlZmVyR0Modm0tPmhlYXApOworICAgIERlZmVyR0NGb3JBV2hpbGUgZGVmZXJHQyh2bS5o
ZWFwKTsKIAotICAgIHVpbnQzMl90IGV4aXRJbmRleCA9IHZtLT5vc3JFeGl0SW5kZXg7CisgICAg
dWludDMyX3QgZXhpdEluZGV4ID0gdm0ub3NyRXhpdEluZGV4OwogICAgIE9TUkV4aXQmIGV4aXQg
PSBjb2RlQmxvY2stPmppdENvZGUoKS0+ZGZnKCktPm9zckV4aXRbZXhpdEluZGV4XTsKIAotICAg
IEFTU0VSVCghdm0tPmNhbGxGcmFtZUZvckNhdGNoIHx8IGV4aXQubV9raW5kID09IEdlbmVyaWNV
bndpbmQpOworICAgIEFTU0VSVCghdm0uY2FsbEZyYW1lRm9yQ2F0Y2ggfHwgZXhpdC5tX2tpbmQg
PT0gR2VuZXJpY1Vud2luZCk7CiAgICAgRVhDRVBUSU9OX0FTU0VSVF9VTlVTRUQoc2NvcGUsICEh
c2NvcGUuZXhjZXB0aW9uKCkgfHwgIWV4aXQuaXNFeGNlcHRpb25IYW5kbGVyKCkpOwogICAgIAog
ICAgIHByZXBhcmVDb2RlT3JpZ2luRm9yT1NSRXhpdChleGVjLCBleGl0Lm1fY29kZU9yaWdpbik7
CkBAIC0xMDYzLDggKzEwNjMsOCBAQCB2b2lkIEpJVF9PUEVSQVRJT04gT1NSRXhpdDo6Y29tcGls
ZU9TUkV4CiAgICAgICAgIGlmIChleGl0Lm1fa2luZCA9PSBHZW5lcmljVW53aW5kKSB7CiAgICAg
ICAgICAgICAvLyBXZSBhcmUgYWN0aW5nIGFzIGEgZGVmYWN0byBvcF9jYXRjaCBiZWNhdXNlIHdl
IGFycml2ZSBoZXJlIGZyb20gZ2VuZXJpY1Vud2luZCgpLgogICAgICAgICAgICAgLy8gU28sIHdl
IG11c3QgcmVzdG9yZSBvdXIgY2FsbCBmcmFtZSBhbmQgc3RhY2sgcG9pbnRlci4KLSAgICAgICAg
ICAgIGppdC5yZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVy
KHZtLT50b3BFbnRyeUZyYW1lKTsKLSAgICAgICAgICAgIGppdC5sb2FkUHRyKHZtLT5hZGRyZXNz
T2ZDYWxsRnJhbWVGb3JDYXRjaCgpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CisgICAg
ICAgICAgICBqaXQucmVzdG9yZUNhbGxlZVNhdmVzRnJvbUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1
ZmZlcih2bS50b3BFbnRyeUZyYW1lKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKHZtLmFkZHJl
c3NPZkNhbGxGcmFtZUZvckNhdGNoKCksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKICAg
ICAgICAgfQogICAgICAgICBqaXQuYWRkUHRyKAogICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tMzIoY29kZUJsb2NrLT5zdGFja1BvaW50ZXJPZmZzZXQoKSAqIHNpemVvZihSZWdp
c3RlcikpLApAQCAtMTA3Miw4ICsxMDcyLDggQEAgdm9pZCBKSVRfT1BFUkFUSU9OIE9TUkV4aXQ6
OmNvbXBpbGVPU1JFeAogCiAgICAgICAgIGppdC5qaXRBc3NlcnRIYXNWYWxpZENhbGxGcmFtZSgp
OwogCi0gICAgICAgIGlmIChVTkxJS0VMWSh2bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyICYmIGNv
ZGVCbG9jay0+aml0Q29kZSgpLT5kZmdDb21tb24oKS0+Y29tcGlsYXRpb24pKSB7Ci0gICAgICAg
ICAgICBQcm9maWxlcjo6RGF0YWJhc2UmIGRhdGFiYXNlID0gKnZtLT5tX3BlckJ5dGVjb2RlUHJv
ZmlsZXI7CisgICAgICAgIGlmIChVTkxJS0VMWSh2bS5tX3BlckJ5dGVjb2RlUHJvZmlsZXIgJiYg
Y29kZUJsb2NrLT5qaXRDb2RlKCktPmRmZ0NvbW1vbigpLT5jb21waWxhdGlvbikpIHsKKyAgICAg
ICAgICAgIFByb2ZpbGVyOjpEYXRhYmFzZSYgZGF0YWJhc2UgPSAqdm0ubV9wZXJCeXRlY29kZVBy
b2ZpbGVyOwogICAgICAgICAgICAgUHJvZmlsZXI6OkNvbXBpbGF0aW9uKiBjb21waWxhdGlvbiA9
IGNvZGVCbG9jay0+aml0Q29kZSgpLT5kZmdDb21tb24oKS0+Y29tcGlsYXRpb24uZ2V0KCk7CiAK
ICAgICAgICAgICAgIFByb2ZpbGVyOjpPU1JFeGl0KiBwcm9maWxlckV4aXQgPSBjb21waWxhdGlv
bi0+YWRkT1NSRXhpdCgKQEAgLTEwODIsNyArMTA4Miw3IEBAIHZvaWQgSklUX09QRVJBVElPTiBP
U1JFeGl0Ojpjb21waWxlT1NSRXgKICAgICAgICAgICAgIGppdC5hZGQ2NChDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW0zMigxKSwgQ0NhbGxIZWxwZXJzOjpBYnNvbHV0ZUFkZHJlc3MocHJvZmlsZXJF
eGl0LT5jb3VudGVyQWRkcmVzcygpKSk7CiAgICAgICAgIH0KIAotICAgICAgICBjb21waWxlRXhp
dChqaXQsICp2bSwgZXhpdCwgb3BlcmFuZHMsIHJlY292ZXJ5KTsKKyAgICAgICAgY29tcGlsZUV4
aXQoaml0LCB2bSwgZXhpdCwgb3BlcmFuZHMsIHJlY292ZXJ5KTsKIAogICAgICAgICBMaW5rQnVm
ZmVyIHBhdGNoQnVmZmVyKGppdCwgY29kZUJsb2NrKTsKICAgICAgICAgZXhpdC5tX2NvZGUgPSBG
SU5BTElaRV9DT0RFX0lGKApAQCAtMTA5Niw3ICsxMDk2LDcgQEAgdm9pZCBKSVRfT1BFUkFUSU9O
IE9TUkV4aXQ6OmNvbXBpbGVPU1JFeAogCiAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1w
KGV4aXQuY29kZUxvY2F0aW9uRm9yUmVwYXRjaCgpLCBDb2RlTG9jYXRpb25MYWJlbDxPU1JFeGl0
UHRyVGFnPihleGl0Lm1fY29kZS5jb2RlKCkpKTsKIAotICAgIHZtLT5vc3JFeGl0SnVtcERlc3Rp
bmF0aW9uID0gZXhpdC5tX2NvZGUuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgdm0u
b3NyRXhpdEp1bXBEZXN0aW5hdGlvbiA9IGV4aXQubV9jb2RlLmNvZGUoKS5leGVjdXRhYmxlQWRk
cmVzcygpOwogfQogCiB2b2lkIE9TUkV4aXQ6OmNvbXBpbGVFeGl0KENDYWxsSGVscGVycyYgaml0
LCBWTSYgdm0sIGNvbnN0IE9TUkV4aXQmIGV4aXQsIGNvbnN0IE9wZXJhbmRzPFZhbHVlUmVjb3Zl
cnk+JiBvcGVyYW5kcywgU3BlY3VsYXRpb25SZWNvdmVyeSogcmVjb3ZlcnkpCkBAIC0xNjQ3LDE0
ICsxNjQ3LDE0IEBAIHZvaWQgT1NSRXhpdDo6Y29tcGlsZUV4aXQoQ0NhbGxIZWxwZXJzJiAKIAog
dm9pZCBKSVRfT1BFUkFUSU9OIE9TUkV4aXQ6OmRlYnVnT3BlcmF0aW9uUHJpbnRTcGVjdWxhdGlv
bkZhaWx1cmUoRXhlY1N0YXRlKiBleGVjLCB2b2lkKiBkZWJ1Z0luZm9SYXcsIHZvaWQqIHNjcmF0
Y2gpCiB7Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKIAogICAgIFNw
ZWN1bGF0aW9uRmFpbHVyZURlYnVnSW5mbyogZGVidWdJbmZvID0gc3RhdGljX2Nhc3Q8U3BlY3Vs
YXRpb25GYWlsdXJlRGVidWdJbmZvKj4oZGVidWdJbmZvUmF3KTsKICAgICBDb2RlQmxvY2sqIGNv
ZGVCbG9jayA9IGRlYnVnSW5mby0+Y29kZUJsb2NrOwogICAgIENvZGVCbG9jayogYWx0ZXJuYXRp
dmUgPSBjb2RlQmxvY2stPmFsdGVybmF0aXZlKCk7CiAgICAgZGF0YUxvZygiU3BlY3VsYXRpb24g
ZmFpbHVyZSBpbiAiLCAqY29kZUJsb2NrKTsKLSAgICBkYXRhTG9nKCIgQCBleGl0ICMiLCB2bS0+
b3NyRXhpdEluZGV4LCAiIChiYyMiLCBkZWJ1Z0luZm8tPmJ5dGVjb2RlT2Zmc2V0LCAiLCAiLCBl
eGl0S2luZFRvU3RyaW5nKGRlYnVnSW5mby0+a2luZCksICIpIHdpdGggIik7CisgICAgZGF0YUxv
ZygiIEAgZXhpdCAjIiwgdm0ub3NyRXhpdEluZGV4LCAiIChiYyMiLCBkZWJ1Z0luZm8tPmJ5dGVj
b2RlT2Zmc2V0LCAiLCAiLCBleGl0S2luZFRvU3RyaW5nKGRlYnVnSW5mby0+a2luZCksICIpIHdp
dGggIik7CiAgICAgaWYgKGFsdGVybmF0aXZlKSB7CiAgICAgICAgIGRhdGFMb2coCiAgICAgICAg
ICAgICAiZXhlY3V0ZUNvdW50ZXIgPSAiLCBhbHRlcm5hdGl2ZS0+aml0RXhlY3V0ZUNvdW50ZXIo
KSwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29t
bW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0
Q29tcGlsZXJDb21tb24uaAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uaAkod29ya2luZyBjb3B5KQpAQCAtNDEs
NyArNDEsNyBAQCB2b2lkIHJlaWZ5SW5saW5lZENhbGxGcmFtZXMoQ0NhbGxIZWxwZXJzCiB2b2lk
IGFkanVzdEFuZEp1bXBUb1RhcmdldChWTSYsIENDYWxsSGVscGVycyYsIGNvbnN0IE9TUkV4aXRC
YXNlJik7CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBKSVRDb2RlVHlwZT4KLXZvaWQgYWRqdXN0RnJh
bWVBbmRTdGFja0luT1NSRXhpdENvbXBpbGVyVGh1bmsoTWFjcm9Bc3NlbWJsZXImIGppdCwgVk0q
IHZtLCBKSVRUeXBlIGppdFR5cGUpCit2b2lkIGFkanVzdEZyYW1lQW5kU3RhY2tJbk9TUkV4aXRD
b21waWxlclRodW5rKE1hY3JvQXNzZW1ibGVyJiBqaXQsIFZNJiB2bSwgSklUVHlwZSBqaXRUeXBl
KQogewogICAgIEFTU0VSVChqaXRUeXBlID09IEpJVFR5cGU6OkRGR0pJVCB8fCBqaXRUeXBlID09
IEpJVFR5cGU6OkZUTEpJVCk7CiAKQEAgLTU4LDcgKzU4LDcgQEAgdm9pZCBhZGp1c3RGcmFtZUFu
ZFN0YWNrSW5PU1JFeGl0Q29tcGlsZQogICAgIGlmIChpc0ZUTE9TUkV4aXQpCiAgICAgICAgIHNj
cmF0Y2hTaXplICs9IHNpemVvZih2b2lkKik7CiAKLSAgICBTY3JhdGNoQnVmZmVyKiBzY3JhdGNo
QnVmZmVyID0gdm0tPnNjcmF0Y2hCdWZmZXJGb3JTaXplKHNjcmF0Y2hTaXplKTsKKyAgICBTY3Jh
dGNoQnVmZmVyKiBzY3JhdGNoQnVmZmVyID0gdm0uc2NyYXRjaEJ1ZmZlckZvclNpemUoc2NyYXRj
aFNpemUpOwogICAgIGNoYXIqIGJ1ZmZlciA9IHN0YXRpY19jYXN0PGNoYXIqPihzY3JhdGNoQnVm
ZmVyLT5kYXRhQnVmZmVyKCkpOwogCiAgICAgaml0LnB1c2hUb1NhdmUoR1BSSW5mbzo6cmVnVDEp
OwpAQCAtODAsNyArODAsNyBAQCB2b2lkIGFkanVzdEZyYW1lQW5kU3RhY2tJbk9TUkV4aXRDb21w
aWxlCiAgICAgaml0LnBvcFRvUmVzdG9yZShHUFJJbmZvOjpyZWdUMSk7CiAKICAgICAvLyBXZSBu
ZWVkIHRvIHJlc2V0IEZQIGluIHRoZSBjYXNlIG9mIGFuIGV4Y2VwdGlvbi4KLSAgICBqaXQubG9h
ZFB0cih2bS0+YWRkcmVzc09mQ2FsbEZyYW1lRm9yQ2F0Y2goKSwgR1BSSW5mbzo6cmVnVDApOwor
ICAgIGppdC5sb2FkUHRyKHZtLmFkZHJlc3NPZkNhbGxGcmFtZUZvckNhdGNoKCksIEdQUkluZm86
OnJlZ1QwKTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBkaWROb3RIYXZlRXhjZXB0aW9uID0g
aml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIEdQUkluZm86OnJlZ1QwKTsK
ICAgICBqaXQubW92ZShHUFJJbmZvOjpyZWdUMCwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIp
OwogICAgIGRpZE5vdEhhdmVFeGNlcHRpb24ubGluaygmaml0KTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTg5LDcgKzE4OSw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4KIGNoYXIq
IG5ld1R5cGVkQXJyYXlXaXRoU2l6ZShFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBpbnQzMl90IHNpemUsIGNoYXIqIHZlY3RvcikKIHsKICAgICBWTSYgdm0gPSBleGVjLT52
bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBpZiAoc2l6ZSA8IDApIHsKQEAgLTIxNiw5
ICsyMTYsOSBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSB2b2lkIHB1dFdpdGhUaGlzKEV4CiB0ZW1w
bGF0ZTx0eXBlbmFtZSBCaWdJbnRPcGVyYXRpb24sIHR5cGVuYW1lIE51bWJlck9wZXJhdGlvbj4K
IHN0YXRpYyBBTFdBWVNfSU5MSU5FIEVuY29kZWRKU1ZhbHVlIGJpbmFyeU9wKEV4ZWNTdGF0ZSog
ZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9w
MiwgQmlnSW50T3BlcmF0aW9uJiYgYmlnSW50T3AsIE51bWJlck9wZXJhdGlvbiYmIG51bWJlck9w
LCBjb25zdCBjaGFyKiBlcnJvck1lc3NhZ2UpCiB7Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7
CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKHZtLCBleGVjKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSgqdm0p
OworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEpTVmFs
dWUgb3AxID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDEpOwogICAgIEpTVmFsdWUgb3AyID0g
SlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDIpOwpAQCAtMjQzLDkgKzI0Myw5IEBAIHN0YXRpYyBB
TFdBWVNfSU5MSU5FIEVuY29kZWRKU1ZhbHVlIGJpbmEKIHRlbXBsYXRlPHR5cGVuYW1lIEJpZ0lu
dE9wZXJhdGlvbiwgdHlwZW5hbWUgSW50MzJPcGVyYXRpb24+CiBzdGF0aWMgQUxXQVlTX0lOTElO
RSBFbmNvZGVkSlNWYWx1ZSBiaXR3aXNlQmluYXJ5T3AoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyLCBCaWdJbnRPcGVy
YXRpb24mJiBiaWdJbnRPcCwgSW50MzJPcGVyYXRpb24mJiBpbnQzMk9wLCBjb25zdCBjaGFyKiBl
cnJvck1lc3NhZ2UpCiB7Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsK
LSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSgqdm0pOworICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEpTVmFsdWUgb3AxID0gSlNWYWx1
ZTo6ZGVjb2RlKGVuY29kZWRPcDEpOwogICAgIEpTVmFsdWUgb3AyID0gSlNWYWx1ZTo6ZGVjb2Rl
KGVuY29kZWRPcDIpOwpAQCAtMjg5LDcgKzI4OSw3IEBAIGV4dGVybiAiQyIgewogCiBFbmNvZGVk
SlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRvVGhpcyhFeGVjU3RhdGUqIGV4ZWMsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRPcCkKIHsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
dm0sIGV4ZWMpOwogCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZE9wKS50b1RoaXMoZXhlYywgTm90U3RyaWN0TW9kZSkpOwpAQCAtMjk3LDcgKzI5Nyw3
IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVG8KIAogRW5jb2RlZEpT
VmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25Ub1RoaXNTdHJpY3QoRXhlY1N0YXRlKiBleGVj
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3ApCiB7Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7
CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKHZtLCBleGVjKTsKIAogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZTo6ZGVj
b2RlKGVuY29kZWRPcCkudG9UaGlzKGV4ZWMsIFN0cmljdE1vZGUpKTsKQEAgLTMwNiw3ICszMDYs
NyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRvCiBKU0FycmF5KiBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbk9iamVjdEtleXMoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkT2JqZWN0KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxG
cmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKIAogICAgIEpTT2JqZWN0KiBvYmplY3QgPSBKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZE9iamVjdCkudG9PYmplY3QoZXhlYyk7CkBAIC0zMTgsMTQgKzMxOCwxNCBAQCBKU0Fy
cmF5KiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk9iamVjdEtlCiBKU0FycmF5KiBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvbk9iamVjdEtleXNPYmplY3QoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCog
b2JqZWN0KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIodm0sIGV4ZWMpOwogICAgIHJldHVybiBvd25Qcm9wZXJ0eUtleXMoZXhlYywgb2JqZWN0LCBQ
cm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzLCBEb250RW51bVByb3BlcnRpZXNNb2RlOjpFeGNsdWRl
KTsKIH0KIAogSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk9iamVjdENyZWF0ZShFeGVj
U3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRQcm90b3R5cGUpCiB7CiAgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwg
ZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgSlNWYWx1ZSBwcm90
b3R5cGUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFByb3RvdHlwZSk7CkBAIC0zNDMsMTQgKzM0
MywxNCBAQCBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uT2JqZWN0Q3JlCiBKU0NlbGwq
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uT2JqZWN0Q3JlYXRlT2JqZWN0KEV4ZWNTdGF0ZSogZXhl
YywgSlNPYmplY3QqIHByb3RvdHlwZSkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICByZXR1cm4gY29uc3RydWN0RW1wdHlP
YmplY3QoZXhlYywgcHJvdG90eXBlKTsKIH0KIAogSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbkNyZWF0ZVRoaXMoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogY29uc3RydWN0b3IsIHVp
bnQzMl90IGlubGluZUNhcGFjaXR5KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxG
cmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKICAgICBpZiAoY29uc3RydWN0b3ItPnR5cGUoKSA9PSBKU0Z1bmN0aW9u
VHlwZSAmJiBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNvbnN0cnVjdG9yKS0+Y2FuVXNlQWxsb2NhdGlv
blByb2ZpbGUoKSkgewogICAgICAgICBhdXRvIHJhcmVEYXRhID0ganNDYXN0PEpTRnVuY3Rpb24q
Pihjb25zdHJ1Y3RvciktPmVuc3VyZVJhcmVEYXRhQW5kQWxsb2NhdGlvblByb2ZpbGUoZXhlYywg
aW5saW5lQ2FwYWNpdHkpOwpAQCAtMzc3LDcgKzM3Nyw3IEBAIEpTQ2VsbCogSklUX09QRVJBVElP
TiBvcGVyYXRpb25DcmVhdGVUaGkKIAogSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNh
bGxPYmplY3RDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRUYXJnZXQpCiB7Ci0gICAgVk0qIHZtID0g
JmV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKIAogICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZFRhcmdldCk7CkBAIC0zOTAsOSArMzkwLDkgQEAgSlNDZWxsKiBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbkNhbGxPYmplYwogCiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uVG9PYmplY3QoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVGFyZ2V0LCBVbmlxdWVkU3RyaW5nSW1wbCogZXJy
b3JNZXNzYWdlKQogewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0g
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKKyAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1
ZTo6ZGVjb2RlKGVuY29kZWRUYXJnZXQpOwogICAgIEFTU0VSVCghdmFsdWUuaXNPYmplY3QoKSk7
CkBAIC00MjIsOSArNDIyLDkgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRp
b25WYQogCiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZhbHVlQml0Tm90
KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSkKIHsKLSAgICBWTSog
dm0gPSAmZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKCp2bSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogCiAgICAgSlNWYWx1ZSBvcDEgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMSk7CiAK
QEAgLTQ5MSw5ICs0OTEsOSBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
blZhCiAKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmFsdWVCaXRSU2hp
ZnQoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkT3AyKQogewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhl
Yyk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKKyAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBKU1ZhbHVlIG9wMSA9IEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkT3AxKTsKICAgICBKU1ZhbHVlIG9wMiA9IEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkT3AyKTsKQEAgLTUwNyw5ICs1MDcsOSBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvblZhCiAKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uVmFsdWVCaXRVUlNoaWZ0KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMikKIHsKLSAgICBWTSogdm0gPSAmZXhl
Yy0+dm0oKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRy
YWNlciB0cmFjZXIodm0sIGV4ZWMpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKCp2bSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAg
ICAgSlNWYWx1ZSBvcDEgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMSk7CiAgICAgSlNWYWx1
ZSBvcDIgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMik7CkBAIC01MjMsNyArNTIzLDcgQEAg
RW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25WYQogCiBFbmNvZGVkSlNWYWx1
ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZhbHVlQWRkTm90TnVtYmVyKEV4ZWNTdGF0ZSogZXhl
YywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMikK
IHsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwog
ICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIAogICAgIEpT
VmFsdWUgb3AxID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDEpOwpAQCAtNTYwLDkgKzU2MCw5
IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmEKIAogZG91YmxlIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uQXJpdGhBYnMoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkT3AxKQogewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhl
Yyk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKKyAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBKU1ZhbHVlIG9wMSA9IEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkT3AxKTsKICAgICBkb3VibGUgYSA9IG9wMS50b051bWJlcihl
eGVjKTsKQEAgLTU3Miw5ICs1NzIsOSBAQCBkb3VibGUgSklUX09QRVJBVElPTiBvcGVyYXRpb25B
cml0aEFicyhFCiAKIHVpbnQzMl90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXJpdGhDbHozMihF
eGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEpCiB7Ci0gICAgVk0qIHZt
ID0gJmV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSgqdm0pOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKIAogICAgIEpTVmFsdWUgb3AxID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDEpOwogICAg
IHVpbnQzMl90IHZhbHVlID0gb3AxLnRvVUludDMyKGV4ZWMpOwpAQCAtNTg0LDkgKzU4NCw5IEBA
IHVpbnQzMl90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXJpdGhDbHoKIAogZG91YmxlIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uQXJpdGhGUm91bmQoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkT3AxKQogewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhl
Yyk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKKyAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBKU1ZhbHVlIG9wMSA9IEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkT3AxKTsKICAgICBkb3VibGUgYSA9IG9wMS50b051bWJlcihl
eGVjKTsKQEAgLTU5Nyw5ICs1OTcsOSBAQCBkb3VibGUgSklUX09QRVJBVElPTiBvcGVyYXRpb25B
cml0aEZSb3VuCiAjZGVmaW5lIERGR19BUklUSF9VTkFSWShjYXBpdGFsaXplZE5hbWUsIGxvd2Vy
TmFtZSkgXAogZG91YmxlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXJpdGgjI2NhcGl0YWxpemVk
TmFtZShFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEpIFwKIHsgXAot
ICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOyBcCisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsgXAog
ICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOyBcCi0gICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsgXAorICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsgXAogICAgIEpTVmFsdWUgb3AxID0gSlNWYWx1ZTo6ZGVjb2Rl
KGVuY29kZWRPcDEpOyBcCiAgICAgZG91YmxlIHJlc3VsdCA9IG9wMS50b051bWJlcihleGVjKTsg
XAogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIFBOYU4pOyBcCkBAIC02MTAsOSArNjEw
LDkgQEAgZG91YmxlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXJpdGgjI2NhcAogCiBkb3VibGUg
SklUX09QRVJBVElPTiBvcGVyYXRpb25Bcml0aFNxcnQoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkT3AxKQogewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwg
ZXhlYyk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKKyAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBKU1ZhbHVlIG9wMSA9
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AxKTsKICAgICBkb3VibGUgYSA9IG9wMS50b051bWJl
cihleGVjKTsKQEAgLTYyMiw5ICs2MjIsOSBAQCBkb3VibGUgSklUX09QRVJBVElPTiBvcGVyYXRp
b25Bcml0aFNxcnQoCiAKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXJp
dGhSb3VuZChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRBcmd1bWVudCkK
IHsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwog
ICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwotICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwogCiAgICAgSlNWYWx1ZSBhcmd1bWVudCA9IEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkQXJndW1lbnQpOwogICAgIGRvdWJsZSB2YWx1ZU9mQXJndW1lbnQgPSBhcmd1bWVu
dC50b051bWJlcihleGVjKTsKQEAgLTYzNCw5ICs2MzQsOSBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbkFyCiAKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uQXJpdGhGbG9vcihFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRB
cmd1bWVudCkKIHsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBleGVj
LT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwotICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7CisgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgSlNWYWx1ZSBhcmd1bWVudCA9IEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkQXJndW1lbnQpOwogICAgIGRvdWJsZSB2YWx1ZU9mQXJndW1lbnQg
PSBhcmd1bWVudC50b051bWJlcihleGVjKTsKQEAgLTY0Niw5ICs2NDYsOSBAQCBFbmNvZGVkSlNW
YWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFyCiAKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uQXJpdGhDZWlsKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZEFyZ3VtZW50KQogewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhl
Yyk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKKyAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBKU1ZhbHVlIGFyZ3VtZW50
ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRBcmd1bWVudCk7CiAgICAgZG91YmxlIHZhbHVlT2ZB
cmd1bWVudCA9IGFyZ3VtZW50LnRvTnVtYmVyKGV4ZWMpOwpAQCAtNjU4LDkgKzY1OCw5IEBAIEVu
Y29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXIKIAogRW5jb2RlZEpTVmFsdWUg
SklUX09QRVJBVElPTiBvcGVyYXRpb25Bcml0aFRydW5jKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZEFyZ3VtZW50KQogewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwor
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cih2bSwgZXhlYyk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsK
KyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBKU1ZhbHVl
IGFyZ3VtZW50ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRBcmd1bWVudCk7CiAgICAgZG91Ymxl
IHRydW5jYXRlZFZhbHVlT2ZBcmd1bWVudCA9IGFyZ3VtZW50LnRvSW50ZWdlclByZXNlcnZlTmFO
KGV4ZWMpOwpAQCAtNjcxLDcgKzY3MSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uQXIKIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEVuY29kZWRKU1ZhbHVlIGdldEJ5VmFs
KEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBiYXNlLCB1aW50MzJfdCBpbmRleCkKIHsKICAgICBW
TSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZt
LCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAg
ICAKICAgICBpZiAoYmFzZS0+aXNPYmplY3QoKSkgewogICAgICAgICBKU09iamVjdCogb2JqZWN0
ID0gYXNPYmplY3QoYmFzZSk7CkBAIC02ODgsNyArNjg4LDcgQEAgc3RhdGljIEFMV0FZU19JTkxJ
TkUgRW5jb2RlZEpTVmFsdWUgZ2V0QgogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVy
YXRpb25HZXRCeVZhbChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNl
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvcGVydHkpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1Zh
bHVlOjpkZWNvZGUoZW5jb2RlZEJhc2UpOwpAQCAtNzI5LDcgKzcyOSw3IEBAIEVuY29kZWRKU1Zh
bHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2UKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uR2V0QnlWYWxDZWxsKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBiYXNlLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvcGVydHkpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgSlNWYWx1ZSBwcm9wZXJ0eSA9IEpTVmFsdWU6
OmRlY29kZShlbmNvZGVkUHJvcGVydHkpOwpAQCAtNzYyLDEyICs3NjIsMTIgQEAgRW5jb2RlZEpT
VmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZQogCiBBTFdBWVNfSU5MSU5FIEVuY29kZWRK
U1ZhbHVlIGdldEJ5VmFsQ2VsbEludChFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogYmFzZSwgaW50
MzJfdCBpbmRleCkKIHsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwog
ICAgIAogICAgIGlmIChpbmRleCA8IDApIHsKICAgICAgICAgLy8gR28gdGhlIHNsb3dlc3Qgd2F5
IHBvc3NpYmxlIGJlY2F1c2UgbmVnYXRpdmUgaW5kaWNlcyBkb24ndCB1c2UgaW5kZXhlZCBzdG9y
YWdlLgotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoYmFzZSkuZ2V0KGV4
ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgaW5kZXgpKSk7CisgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoSlNWYWx1ZShiYXNlKS5nZXQoZXhlYywgSWRlbnRpZmllcjo6ZnJvbSh2bSwg
aW5kZXgpKSk7CiAgICAgfQogCiAgICAgLy8gVXNlIHRoaXMgc2luY2Ugd2Uga25vdyB0aGF0IHRo
ZSB2YWx1ZSBpcyBvdXQgb2YgYm91bmRzLgpAQCAtNzg3LDcgKzc4Nyw3IEBAIEVuY29kZWRKU1Zh
bHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2UKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uR2V0QnlWYWxPYmplY3RTdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwq
IGJhc2UsIEpTQ2VsbCogc3RyaW5nKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxG
cmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogCiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwogCkBAIC04MDAsNyArODAwLDcgQEAgRW5jb2RlZEpTVmFsdWUgSklU
X09QRVJBVElPTiBvcGVyYXRpb25HZQogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVy
YXRpb25HZXRCeVZhbE9iamVjdFN5bWJvbChFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogYmFzZSwg
SlNDZWxsKiBzeW1ib2wpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcih2bSwgZXhlYyk7CiAKICAgICBhdXRvIHByb3BlcnR5TmFtZSA9IGFzU3ltYm9s
KHN5bWJvbCktPnByaXZhdGVOYW1lKCk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShnZXRC
eVZhbE9iamVjdChleGVjLCB2bSwgYXNPYmplY3QoYmFzZSksIHByb3BlcnR5TmFtZSkpOwpAQCAt
ODA5LDcgKzgwOSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2UK
IHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbFN0cmljdChFeGVjU3RhdGUqIGV4
ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJv
cGVydHksIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICBWTSYgdm0gPSBleGVj
LT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICAKICAgICBwdXRC
eVZhbEludGVybmFsPHRydWUsIGZhbHNlPihleGVjLCB2bSwgZW5jb2RlZEJhc2UsIGVuY29kZWRQ
cm9wZXJ0eSwgZW5jb2RlZFZhbHVlKTsKIH0KQEAgLTgxNyw3ICs4MTcsNyBAQCB2b2lkIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxTdHJpCiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uUHV0QnlWYWxOb25TdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkQmFzZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFByb3BlcnR5LCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkVmFsdWUpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcih2bSwgZXhlYyk7CiAgICAgCiAgICAgcHV0QnlWYWxJbnRlcm5hbDxmYWxzZSwgZmFs
c2U+KGV4ZWMsIHZtLCBlbmNvZGVkQmFzZSwgZW5jb2RlZFByb3BlcnR5LCBlbmNvZGVkVmFsdWUp
OwogfQpAQCAtODI1LDcgKzgyNSw3IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRC
eVZhbE5vblMKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbENlbGxTdHJpY3Qo
RXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGNlbGwsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRQcm9w
ZXJ0eSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIAogICAgIHB1dEJ5
VmFsSW50ZXJuYWw8dHJ1ZSwgZmFsc2U+KGV4ZWMsIHZtLCBKU1ZhbHVlOjplbmNvZGUoY2VsbCks
IGVuY29kZWRQcm9wZXJ0eSwgZW5jb2RlZFZhbHVlKTsKIH0KQEAgLTgzMyw3ICs4MzMsNyBAQCB2
b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxDZWxsCiB2b2lkIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uUHV0QnlWYWxDZWxsTm9uU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxs
KiBjZWxsLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvcGVydHksIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRWYWx1ZSkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxG
cmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIg
dHJhY2VyKHZtLCBleGVjKTsKICAgICAKICAgICBwdXRCeVZhbEludGVybmFsPGZhbHNlLCBmYWxz
ZT4oZXhlYywgdm0sIEpTVmFsdWU6OmVuY29kZShjZWxsKSwgZW5jb2RlZFByb3BlcnR5LCBlbmNv
ZGVkVmFsdWUpOwogfQpAQCAtODQxLDcgKzg0MSw3IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVy
YXRpb25QdXRCeVZhbENlbGwKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbENl
bGxTdHJpbmdTdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGNlbGwsIEpTQ2VsbCogc3Ry
aW5nLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAKICAgICBwdXRCeVZhbENl
bGxTdHJpbmdJbnRlcm5hbDx0cnVlLCBmYWxzZT4oZXhlYywgdm0sIGNlbGwsIGFzU3RyaW5nKHN0
cmluZyksIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpKTsKIH0KQEAgLTg0OSw3ICs4NDks
NyBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxDZWxsCiB2b2lkIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxDZWxsU3RyaW5nTm9uU3RyaWN0KEV4ZWNTdGF0ZSog
ZXhlYywgSlNDZWxsKiBjZWxsLCBKU0NlbGwqIHN0cmluZywgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFZhbHVlKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIodm0sIGV4ZWMpOwogCiAgICAgcHV0QnlWYWxDZWxsU3RyaW5nSW50ZXJuYWw8ZmFsc2UsIGZh
bHNlPihleGVjLCB2bSwgY2VsbCwgYXNTdHJpbmcoc3RyaW5nKSwgSlNWYWx1ZTo6ZGVjb2RlKGVu
Y29kZWRWYWx1ZSkpOwogfQpAQCAtODU3LDcgKzg1Nyw3IEBAIHZvaWQgSklUX09QRVJBVElPTiBv
cGVyYXRpb25QdXRCeVZhbENlbGwKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZh
bENlbGxTeW1ib2xTdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGNlbGwsIEpTQ2VsbCog
c3ltYm9sLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7Cisg
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAKICAgICBhdXRvIHBy
b3BlcnR5TmFtZSA9IGFzU3ltYm9sKHN5bWJvbCktPnByaXZhdGVOYW1lKCk7CiAgICAgcHV0QnlW
YWxDZWxsSW50ZXJuYWw8dHJ1ZSwgZmFsc2U+KGV4ZWMsIHZtLCBjZWxsLCBwcm9wZXJ0eU5hbWUs
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpKTsKQEAgLTg2Niw3ICs4NjYsNyBAQCB2b2lk
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxDZWxsCiB2b2lkIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uUHV0QnlWYWxDZWxsU3ltYm9sTm9uU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgSlND
ZWxsKiBjZWxsLCBKU0NlbGwqIHN5bWJvbCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQog
ewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4
ZWMpOwogCiAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBhc1N5bWJvbChzeW1ib2wpLT5wcml2YXRl
TmFtZSgpOwogICAgIHB1dEJ5VmFsQ2VsbEludGVybmFsPGZhbHNlLCBmYWxzZT4oZXhlYywgdm0s
IGNlbGwsIHByb3BlcnR5TmFtZSwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSkpOwpAQCAt
ODc1LDcgKzg3NSw3IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbENlbGwK
IHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbEJleW9uZEFycmF5Qm91bmRzU3Ry
aWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9iamVjdCwgaW50MzJfdCBpbmRleCwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0g
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIAogICAgIGlmIChpbmRleCA+PSAw
KSB7CiAgICAgICAgIG9iamVjdC0+cHV0QnlJbmRleElubGluZShleGVjLCBpbmRleCwgSlNWYWx1
ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSksIHRydWUpOwpAQCAtODg0LDEyICs4ODQsMTIgQEAgdm9p
ZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQmV5bwogICAgIAogICAgIFB1dFByb3Bl
cnR5U2xvdCBzbG90KG9iamVjdCwgdHJ1ZSk7CiAgICAgb2JqZWN0LT5tZXRob2RUYWJsZSh2bSkt
PnB1dCgKLSAgICAgICAgb2JqZWN0LCBleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGluZGV4
KSwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSksIHNsb3QpOworICAgICAgICBvYmplY3Qs
IGV4ZWMsIElkZW50aWZpZXI6OmZyb20odm0sIGluZGV4KSwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRWYWx1ZSksIHNsb3QpOwogfQogCiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlW
YWxCZXlvbmRBcnJheUJvdW5kc05vblN0cmljdChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBv
YmplY3QsIGludDMyX3QgaW5kZXgsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAg
ICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIAogICAgIGlmIChpbmRl
eCA+PSAwKSB7CkBAIC04OTgsMTMgKzg5OCwxMyBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uUHV0QnlWYWxCZXlvCiAgICAgfQogICAgIAogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KG9i
amVjdCwgZmFsc2UpOwotICAgIG9iamVjdC0+bWV0aG9kVGFibGUoKnZtKS0+cHV0KAotICAgICAg
ICBvYmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgaW5kZXgpLCBKU1ZhbHVlOjpk
ZWNvZGUoZW5jb2RlZFZhbHVlKSwgc2xvdCk7CisgICAgb2JqZWN0LT5tZXRob2RUYWJsZSh2bSkt
PnB1dCgKKyAgICAgICAgb2JqZWN0LCBleGVjLCBJZGVudGlmaWVyOjpmcm9tKHZtLCBpbmRleCks
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCBzbG90KTsKIH0KIAogdm9pZCBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvblB1dERvdWJsZUJ5VmFsQmV5b25kQXJyYXlCb3VuZHNTdHJpY3QoRXhl
Y1N0YXRlKiBleGVjLCBKU09iamVjdCogb2JqZWN0LCBpbnQzMl90IGluZGV4LCBkb3VibGUgdmFs
dWUpCiB7Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICAKICAg
ICBKU1ZhbHVlIGpzVmFsdWUgPSBKU1ZhbHVlKEpTVmFsdWU6OkVuY29kZUFzRG91YmxlLCB2YWx1
ZSk7CkBAIC05MTUsMTMgKzkxNSwxMyBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0
RG91YmxlQnlWCiAgICAgfQogICAgIAogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KG9iamVjdCwg
dHJ1ZSk7Ci0gICAgb2JqZWN0LT5tZXRob2RUYWJsZSgqdm0pLT5wdXQoCi0gICAgICAgIG9iamVj
dCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpbmRleCksIGpzVmFsdWUsIHNsb3QpOwor
ICAgIG9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5wdXQoCisgICAgICAgIG9iamVjdCwgZXhlYywg
SWRlbnRpZmllcjo6ZnJvbSh2bSwgaW5kZXgpLCBqc1ZhbHVlLCBzbG90KTsKIH0KIAogdm9pZCBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dERvdWJsZUJ5VmFsQmV5b25kQXJyYXlCb3VuZHNOb25T
dHJpY3QoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogb2JqZWN0LCBpbnQzMl90IGluZGV4LCBk
b3VibGUgdmFsdWUpCiB7Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsK
ICAgICAKICAgICBKU1ZhbHVlIGpzVmFsdWUgPSBKU1ZhbHVlKEpTVmFsdWU6OkVuY29kZUFzRG91
YmxlLCB2YWx1ZSk7CkBAIC05MzIsMTQgKzkzMiwxNCBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uUHV0RG91YmxlQnlWCiAgICAgfQogICAgIAogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90
KG9iamVjdCwgZmFsc2UpOwotICAgIG9iamVjdC0+bWV0aG9kVGFibGUoKnZtKS0+cHV0KAotICAg
ICAgICBvYmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgaW5kZXgpLCBqc1ZhbHVl
LCBzbG90KTsKKyAgICBvYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+cHV0KAorICAgICAgICBvYmpl
Y3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20odm0sIGluZGV4KSwganNWYWx1ZSwgc2xvdCk7CiB9
CiAKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXREb3VibGVCeVZhbERpcmVjdEJleW9u
ZEFycmF5Qm91bmRzU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9iamVjdCwgaW50
MzJfdCBpbmRleCwgZG91YmxlIHZhbHVlKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0g
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogCiAgICAgSlNWYWx1ZSBqc1ZhbHVlID0g
SlNWYWx1ZShKU1ZhbHVlOjpFbmNvZGVBc0RvdWJsZSwgdmFsdWUpOwogCkBAIC05NDksMTMgKzk0
OSwxMyBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0RG91YmxlQnlWCiAgICAgfQog
CiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3Qob2JqZWN0LCB0cnVlKTsKLSAgICBDb21tb25TbG93
UGF0aHM6OnB1dERpcmVjdFdpdGhSZWlmeSh2bSwgZXhlYywgb2JqZWN0LCBJZGVudGlmaWVyOjpm
cm9tKGV4ZWMsIGluZGV4KSwganNWYWx1ZSwgc2xvdCk7CisgICAgQ29tbW9uU2xvd1BhdGhzOjpw
dXREaXJlY3RXaXRoUmVpZnkodm0sIGV4ZWMsIG9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbSh2bSwg
aW5kZXgpLCBqc1ZhbHVlLCBzbG90KTsKIH0KIAogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
blB1dERvdWJsZUJ5VmFsRGlyZWN0QmV5b25kQXJyYXlCb3VuZHNOb25TdHJpY3QoRXhlY1N0YXRl
KiBleGVjLCBKU09iamVjdCogb2JqZWN0LCBpbnQzMl90IGluZGV4LCBkb3VibGUgdmFsdWUpCiB7
CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhl
Yyk7CiAKICAgICBKU1ZhbHVlIGpzVmFsdWUgPSBKU1ZhbHVlKEpTVmFsdWU6OkVuY29kZUFzRG91
YmxlLCB2YWx1ZSk7CiAKQEAgLTk2NSwxMyArOTY1LDEzIEBAIHZvaWQgSklUX09QRVJBVElPTiBv
cGVyYXRpb25QdXREb3VibGVCeVYKICAgICB9CiAKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChv
YmplY3QsIGZhbHNlKTsKLSAgICBDb21tb25TbG93UGF0aHM6OnB1dERpcmVjdFdpdGhSZWlmeSh2
bSwgZXhlYywgb2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGluZGV4KSwganNWYWx1ZSwg
c2xvdCk7CisgICAgQ29tbW9uU2xvd1BhdGhzOjpwdXREaXJlY3RXaXRoUmVpZnkodm0sIGV4ZWMs
IG9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbSh2bSwgaW5kZXgpLCBqc1ZhbHVlLCBzbG90KTsKIH0K
IAogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsRGlyZWN0U3RyaWN0KEV4ZWNT
dGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRQcm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4
ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIAog
ICAgIHB1dEJ5VmFsSW50ZXJuYWw8dHJ1ZSwgdHJ1ZT4oZXhlYywgdm0sIGVuY29kZWRCYXNlLCBl
bmNvZGVkUHJvcGVydHksIGVuY29kZWRWYWx1ZSk7CiB9CkBAIC05NzksNyArOTc5LDcgQEAgdm9p
ZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsRGlyZQogdm9pZCBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvblB1dEJ5VmFsRGlyZWN0Tm9uU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZEJhc2UsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRQcm9wZXJ0eSwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0g
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIAogICAgIHB1dEJ5VmFsSW50ZXJu
YWw8ZmFsc2UsIHRydWU+KGV4ZWMsIHZtLCBlbmNvZGVkQmFzZSwgZW5jb2RlZFByb3BlcnR5LCBl
bmNvZGVkVmFsdWUpOwogfQpAQCAtOTg3LDcgKzk4Nyw3IEBAIHZvaWQgSklUX09QRVJBVElPTiBv
cGVyYXRpb25QdXRCeVZhbERpcmUKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZh
bERpcmVjdENlbGxTdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGNlbGwsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRQcm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewog
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMp
OwogICAgIAogICAgIHB1dEJ5VmFsSW50ZXJuYWw8dHJ1ZSwgdHJ1ZT4oZXhlYywgdm0sIEpTVmFs
dWU6OmVuY29kZShjZWxsKSwgZW5jb2RlZFByb3BlcnR5LCBlbmNvZGVkVmFsdWUpOwogfQpAQCAt
OTk1LDcgKzk5NSw3IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbERpcmUK
IHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbERpcmVjdENlbGxOb25TdHJpY3Qo
RXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGNlbGwsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRQcm9w
ZXJ0eSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIAogICAgIHB1dEJ5
VmFsSW50ZXJuYWw8ZmFsc2UsIHRydWU+KGV4ZWMsIHZtLCBKU1ZhbHVlOjplbmNvZGUoY2VsbCks
IGVuY29kZWRQcm9wZXJ0eSwgZW5jb2RlZFZhbHVlKTsKIH0KQEAgLTEwMDMsNyArMTAwMyw3IEBA
IHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbERpcmUKIHZvaWQgSklUX09QRVJB
VElPTiBvcGVyYXRpb25QdXRCeVZhbERpcmVjdENlbGxTdHJpbmdTdHJpY3QoRXhlY1N0YXRlKiBl
eGVjLCBKU0NlbGwqIGNlbGwsIEpTQ2VsbCogc3RyaW5nLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
VmFsdWUpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVU
cmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cih2bSwgZXhlYyk7CiAKICAgICBwdXRCeVZhbENlbGxTdHJpbmdJbnRlcm5hbDx0cnVlLCB0cnVl
PihleGVjLCB2bSwgY2VsbCwgYXNTdHJpbmcoc3RyaW5nKSwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRWYWx1ZSkpOwogfQpAQCAtMTAxMSw3ICsxMDExLDcgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvblB1dEJ5VmFsRGlyZQogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFs
RGlyZWN0Q2VsbFN0cmluZ05vblN0cmljdChFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogY2VsbCwg
SlNDZWxsKiBzdHJpbmcsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICBWTSYg
dm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBl
eGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKIAogICAg
IHB1dEJ5VmFsQ2VsbFN0cmluZ0ludGVybmFsPGZhbHNlLCB0cnVlPihleGVjLCB2bSwgY2VsbCwg
YXNTdHJpbmcoc3RyaW5nKSwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSkpOwogfQpAQCAt
MTAxOSw3ICsxMDE5LDcgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsRGly
ZQogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsRGlyZWN0Q2VsbFN5bWJvbFN0
cmljdChFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogY2VsbCwgSlNDZWxsKiBzeW1ib2wsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKIAogICAgIGF1dG8gcHJvcGVydHlOYW1lID0g
YXNTeW1ib2woc3ltYm9sKS0+cHJpdmF0ZU5hbWUoKTsKICAgICBwdXRCeVZhbENlbGxJbnRlcm5h
bDx0cnVlLCB0cnVlPihleGVjLCB2bSwgY2VsbCwgcHJvcGVydHlOYW1lLCBKU1ZhbHVlOjpkZWNv
ZGUoZW5jb2RlZFZhbHVlKSk7CkBAIC0xMDI4LDcgKzEwMjgsNyBAQCB2b2lkIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uUHV0QnlWYWxEaXJlCiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0
QnlWYWxEaXJlY3RDZWxsU3ltYm9sTm9uU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBj
ZWxsLCBKU0NlbGwqIHN5bWJvbCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigm
dm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwog
CiAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBhc1N5bWJvbChzeW1ib2wpLT5wcml2YXRlTmFtZSgp
OwogICAgIHB1dEJ5VmFsQ2VsbEludGVybmFsPGZhbHNlLCB0cnVlPihleGVjLCB2bSwgY2VsbCwg
cHJvcGVydHlOYW1lLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSk7CkBAIC0xMDM3LDIw
ICsxMDM3LDIwIEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbERpcmUKIHZv
aWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbERpcmVjdEJleW9uZEFycmF5Qm91bmRz
U3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9iamVjdCwgaW50MzJfdCBpbmRleCwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIGlmIChpbmRleCA+PSAwKSB7
CiAgICAgICAgIG9iamVjdC0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaW5kZXgsIEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkVmFsdWUpLCAwLCBQdXREaXJlY3RJbmRleFNob3VsZFRocm93KTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KICAgICAKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChvYmplY3Qs
IHRydWUpOwotICAgIENvbW1vblNsb3dQYXRoczo6cHV0RGlyZWN0V2l0aFJlaWZ5KHZtLCBleGVj
LCBvYmplY3QsIElkZW50aWZpZXI6OmZyb20oZXhlYywgaW5kZXgpLCBKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZFZhbHVlKSwgc2xvdCk7CisgICAgQ29tbW9uU2xvd1BhdGhzOjpwdXREaXJlY3RXaXRo
UmVpZnkodm0sIGV4ZWMsIG9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbSh2bSwgaW5kZXgpLCBKU1Zh
bHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwgc2xvdCk7CiB9CiAKIHZvaWQgSklUX09QRVJBVElP
TiBvcGVyYXRpb25QdXRCeVZhbERpcmVjdEJleW9uZEFycmF5Qm91bmRzTm9uU3RyaWN0KEV4ZWNT
dGF0ZSogZXhlYywgSlNPYmplY3QqIG9iamVjdCwgaW50MzJfdCBpbmRleCwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFZhbHVlKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZl
Q2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRy
YWNlciB0cmFjZXIodm0sIGV4ZWMpOwogCiAgICAgaWYgKGluZGV4ID49IDApIHsKICAgICAgICAg
b2JqZWN0LT5wdXREaXJlY3RJbmRleChleGVjLCBpbmRleCwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRWYWx1ZSkpOwpAQCAtMTA1OCwxMiArMTA1OCwxMiBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uUHV0QnlWYWxEaXJlCiAgICAgfQogICAgIAogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90
KG9iamVjdCwgZmFsc2UpOwotICAgIENvbW1vblNsb3dQYXRoczo6cHV0RGlyZWN0V2l0aFJlaWZ5
KHZtLCBleGVjLCBvYmplY3QsIElkZW50aWZpZXI6OmZyb20oZXhlYywgaW5kZXgpLCBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwgc2xvdCk7CisgICAgQ29tbW9uU2xvd1BhdGhzOjpwdXRE
aXJlY3RXaXRoUmVpZnkodm0sIGV4ZWMsIG9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbSh2bSwgaW5k
ZXgpLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwgc2xvdCk7CiB9CiAKIEVuY29kZWRK
U1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXJyYXlQdXNoKEV4ZWNTdGF0ZSogZXhlYywg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0FycmF5KiBhcnJheSkKIHsKLSAgICBWTSog
dm0gPSAmZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIAogICAgIGFycmF5LT5wdXNoSW5s
aW5lKGV4ZWMsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpKTsKQEAgLTEwNzIsNyArMTA3
Miw3IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXIKIAogRW5jb2Rl
ZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25BcnJheVB1c2hEb3VibGUoRXhlY1N0YXRl
KiBleGVjLCBkb3VibGUgdmFsdWUsIEpTQXJyYXkqIGFycmF5KQogewotICAgIFZNKiB2bSA9ICZl
eGVjLT52bSgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgCiAgICAgYXJyYXktPnB1c2hJbmxpbmUoZXhl
YywgSlNWYWx1ZShKU1ZhbHVlOjpFbmNvZGVBc0RvdWJsZSwgdmFsdWUpKTsKQEAgLTEwODIsNyAr
MTA4Miw3IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXIKIEVuY29k
ZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXJyYXlQdXNoTXVsdGlwbGUoRXhlY1N0
YXRlKiBleGVjLCBKU0FycmF5KiBhcnJheSwgdm9pZCogYnVmZmVyLCBpbnQzMl90IGVsZW1lbnRD
b3VudCkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRy
YWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KHZtLCBleGVjKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAK
ICAgICAvLyBXZSBhc3N1bWUgdGhhdCBtdWx0aXBsZSBKU0FycmF5OjpwdXNoIGNhbGxzIHdpdGgg
QXJyYXlXaXRoSW50MzIvQXJyYXlXaXRoQ29udGlndW91cyBkbyBub3QgY2F1c2UgSlMgdHJhcHMu
CkBAIC0xMTA2LDcgKzExMDYsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbkFyCiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFycmF5UHVzaERv
dWJsZU11bHRpcGxlKEV4ZWNTdGF0ZSogZXhlYywgSlNBcnJheSogYXJyYXksIHZvaWQqIGJ1ZmZl
ciwgaW50MzJfdCBlbGVtZW50Q291bnQpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwogCiAgICAgLy8gV2UgYXNzdW1lIHRoYXQgbXVsdGlwbGUgSlNBcnJh
eTo6cHVzaCBjYWxscyB3aXRoIEFycmF5V2l0aERvdWJsZSBkbyBub3QgY2F1c2UgSlMgdHJhcHMu
CkBAIC0xMTI1LDcgKzExMjUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbkFyCiAKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXJyYXlQb3Ao
RXhlY1N0YXRlKiBleGVjLCBKU0FycmF5KiBhcnJheSkKIHsKLSAgICBWTSogdm0gPSAmZXhlYy0+
dm0oKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIAogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYXJy
YXktPnBvcChleGVjKSk7CkBAIC0xMTMzLDcgKzExMzMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbkFyCiAgICAgICAgIAogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJB
VElPTiBvcGVyYXRpb25BcnJheVBvcEFuZFJlY292ZXJMZW5ndGgoRXhlY1N0YXRlKiBleGVjLCBK
U0FycmF5KiBhcnJheSkKIHsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0g
PSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMp
OwogICAgIAogICAgIGFycmF5LT5idXR0ZXJmbHkoKS0+c2V0UHVibGljTGVuZ3RoKGFycmF5LT5i
dXR0ZXJmbHkoKS0+cHVibGljTGVuZ3RoKCkgKyAxKTsKQEAgLTExNDYsNyArMTE0Niw3IEBAIEVu
Y29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUmUKICAgICBTdXBlclNhbXBsZXJT
Y29wZSBzdXBlclNhbXBsZXJTY29wZShmYWxzZSk7CiAgICAgCiAgICAgVk0mIHZtID0gZ2xvYmFs
T2JqZWN0LT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVj
KTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICAKICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlZ0V4cE9iamVjdC0+ZXhlY0lubGluZShleGVjLCBn
bG9iYWxPYmplY3QsIGFyZ3VtZW50KSk7CiB9CkBAIC0xMTU2LDcgKzExNTYsNyBAQCBFbmNvZGVk
SlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblJlCiAgICAgU3VwZXJTYW1wbGVyU2NvcGUg
c3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwogICAgIAogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVj
dC0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7Cisg
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIAogICAgIEpTVmFsdWUgYXJndW1lbnQg
PSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEFyZ3VtZW50KTsKQEAgLTExNzMsNyArMTE3Myw3IEBA
IEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUmUKICAgICBTdXBlclNhbXBs
ZXJTY29wZSBzdXBlclNhbXBsZXJTY29wZShmYWxzZSk7CiAgICAgCiAgICAgVk0mIHZtID0gZ2xv
YmFsT2JqZWN0LT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBl
eGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBKU1ZhbHVlIGJhc2Ug
PSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2UpOwpAQCAtMTE5NSw3ICsxMTk1LDcgQEAgRW5j
b2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25SZQogICAgIFN1cGVyU2FtcGxlclNj
b3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKIAogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVj
dC0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7Cisg
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAKICAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKQEAgLTEyMjAsNyArMTIyMCw3IEBAIEVu
Y29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUmUKICAgICBTdXBlclNhbXBsZXJT
Y29wZSBzdXBlclNhbXBsZXJTY29wZShmYWxzZSk7CiAKICAgICBWTSYgdm0gPSBnbG9iYWxPYmpl
Y3QtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwor
ICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogCiAgICAgaWYgKCFy
ZWdFeHBPYmplY3QtPnJlZ0V4cCgpLT5nbG9iYWwoKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShyZWdFeHBPYmplY3QtPmV4ZWNJbmxpbmUoZXhlYywgZ2xvYmFsT2JqZWN0LCBhcmd1
bWVudCkpOwpAQCAtMTIzMiw3ICsxMjMyLDcgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElP
TiBvcGVyYXRpb25SZQogICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZh
bHNlKTsKIAogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKLSAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcih2bSwgZXhlYyk7CiAKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CiAKQEAgLTEyNjAsNyArMTI2MCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uUmUKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUGFy
c2VJbnROb1JhZGl4R2VuZXJpYyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIHZhbHVl
KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0s
IGV4ZWMpOwogCiAgICAgcmV0dXJuIHRvU3RyaW5nVmlldyhleGVjLCBKU1ZhbHVlOjpkZWNvZGUo
dmFsdWUpLCBbJl0gKFN0cmluZ1ZpZXcgdmlldykgewogICAgICAgICAvLyBUaGlzIHZlcnNpb24g
aXMgYXMgaWYgcmFkaXggd2FzIHVuZGVmaW5lZC4gSGVuY2UsIHVuZGVmaW5lZC50b051bWJlcigp
ID09PSAwLgpAQCAtMTI3MSw3ICsxMjcxLDcgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElP
TiBvcGVyYXRpb25QYQogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25QYXJz
ZUludFN0cmluZ05vUmFkaXgoRXhlY1N0YXRlKiBleGVjLCBKU1N0cmluZyogc3RyaW5nKQogewog
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMp
OwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIGF1dG8g
dmlld1dpdGhTdHJpbmcgPSBzdHJpbmctPnZpZXdXaXRoVW5kZXJseWluZ1N0cmluZyhleGVjKTsK
QEAgLTEyODQsNyArMTI4NCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uUGEKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUGFyc2VJbnRTdHJp
bmcoRXhlY1N0YXRlKiBleGVjLCBKU1N0cmluZyogc3RyaW5nLCBpbnQzMl90IHJhZGl4KQogewog
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMp
OwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIGF1dG8g
dmlld1dpdGhTdHJpbmcgPSBzdHJpbmctPnZpZXdXaXRoVW5kZXJseWluZ1N0cmluZyhleGVjKTsK
QEAgLTEyOTYsNyArMTI5Niw3IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uUGEKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUGFyc2VJbnRHZW5l
cmljKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgdmFsdWUsIGludDMyX3QgcmFkaXgp
CiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIg
dHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwg
ZXhlYyk7CiAKICAgICByZXR1cm4gdG9TdHJpbmdWaWV3KGV4ZWMsIEpTVmFsdWU6OmRlY29kZSh2
YWx1ZSksIFsmXSAoU3RyaW5nVmlldyB2aWV3KSB7CiAgICAgICAgIHJldHVybiBwYXJzZUludFJl
c3VsdChwYXJzZUludCh2aWV3LCByYWRpeCkpOwpAQCAtMTMwOCw3ICsxMzA4LDcgQEAgc2l6ZV90
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUmVnRXhwVGVzdAogICAgIFN1cGVyU2FtcGxlclNjb3Bl
IHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKICAgICAKICAgICBWTSYgdm0gPSBnbG9iYWxPYmpl
Y3QtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwor
ICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogCiAgICAgcmV0dXJu
IHJlZ0V4cE9iamVjdC0+dGVzdElubGluZShleGVjLCBnbG9iYWxPYmplY3QsIGlucHV0KTsKIH0K
QEAgLTEzMTgsNyArMTMxOCw3IEBAIHNpemVfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblJlZ0V4
cFRlc3QKICAgICBTdXBlclNhbXBsZXJTY29wZSBzdXBlclNhbXBsZXJTY29wZShmYWxzZSk7CiAg
ICAgCiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKHZtLCBleGVjKTsKIAogICAgIEpTVmFsdWUgYXJndW1lbnQgPSBKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZEFyZ3VtZW50KTsKIApAQCAtMTMzMyw3ICsxMzMzLDcgQEAgc2l6ZV90IEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uUmVnRXhwVGVzdAogICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2Ft
cGxlclNjb3BlKGZhbHNlKTsKICAgICAKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7
Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEpTVmFsdWUgYmFzZSA9IEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkQmFzZSk7CkBAIC0xMzU0LDcgKzEzNTQsNyBAQCBzaXplX3QgSklUX09QRVJBVElP
TiBvcGVyYXRpb25SZWdFeHBUZXN0CiAKIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25T
dWJCaWdJbnQoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIG9wMSwgSlNDZWxsKiBvcDIpCiB7Ci0g
ICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICAKICAgICBKU0JpZ0lu
dCogbGVmdE9wZXJhbmQgPSBqc0Nhc3Q8SlNCaWdJbnQqPihvcDEpOwpAQCAtMTM2NSw3ICsxMzY1
LDcgQEAgSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblN1YkJpZ0ludAogCiBKU0NlbGwq
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQml0Tm90QmlnSW50KEV4ZWNTdGF0ZSogZXhlYywgSlND
ZWxsKiBvcDEpCiB7Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKIAog
ICAgIEpTQmlnSW50KiBvcGVyYW5kID0ganNDYXN0PEpTQmlnSW50Kj4ob3AxKTsKQEAgLTEzNzUs
NyArMTM3NSw3IEBAIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25CaXROb3RCaWcKIAog
SlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk11bEJpZ0ludChFeGVjU3RhdGUqIGV4ZWMs
IEpTQ2VsbCogb3AxLCBKU0NlbGwqIG9wMikKIHsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsK
KyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIodm0sIGV4ZWMpOwogCiAgICAgSlNCaWdJbnQqIGxlZnRPcGVyYW5kID0ganNDYXN0PEpTQmln
SW50Kj4ob3AxKTsKQEAgLTEzODYsNyArMTM4Niw3IEBAIEpTQ2VsbCogSklUX09QRVJBVElPTiBv
cGVyYXRpb25NdWxCaWdJbnQKICAgICAKIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25N
b2RCaWdJbnQoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIG9wMSwgSlNDZWxsKiBvcDIpCiB7Ci0g
ICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICAKICAgICBKU0JpZ0lu
dCogbGVmdE9wZXJhbmQgPSBqc0Nhc3Q8SlNCaWdJbnQqPihvcDEpOwpAQCAtMTM5Nyw3ICsxMzk3
LDcgQEAgSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk1vZEJpZ0ludAogCiBKU0NlbGwq
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRGl2QmlnSW50KEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxs
KiBvcDEsIEpTQ2VsbCogb3AyKQogewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwg
ZXhlYyk7CiAgICAgCiAgICAgSlNCaWdJbnQqIGxlZnRPcGVyYW5kID0ganNDYXN0PEpTQmlnSW50
Kj4ob3AxKTsKQEAgLTE0MDgsNyArMTQwOCw3IEBAIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVy
YXRpb25EaXZCaWdJbnQKIAogSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblBvd0JpZ0lu
dChFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogb3AxLCBKU0NlbGwqIG9wMikKIHsKLSAgICBWTSog
dm0gPSAmZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIAogICAgIEpTQmlnSW50KiBsZWZ0
T3BlcmFuZCA9IGpzQ2FzdDxKU0JpZ0ludCo+KG9wMSk7CkBAIC0xNDE5LDcgKzE0MTksNyBAQCBK
U0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUG93QmlnSW50CiAKIEpTQ2VsbCogSklUX09Q
RVJBVElPTiBvcGVyYXRpb25CaXRBbmRCaWdJbnQoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIG9w
MSwgSlNDZWxsKiBvcDIpCiB7Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgVk0mIHZt
ID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVj
KTsKIAogICAgIEpTQmlnSW50KiBsZWZ0T3BlcmFuZCA9IGpzQ2FzdDxKU0JpZ0ludCo+KG9wMSk7
CkBAIC0xNDMwLDcgKzE0MzAsNyBAQCBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQml0
QW5kQmlnCiAKIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25CaXRMU2hpZnRCaWdJbnQo
RXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIG9wMSwgSlNDZWxsKiBvcDIpCiB7Ci0gICAgVk0qIHZt
ID0gJmV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKIAogICAgIEpTQmlnSW50KiBsZWZ0T3BlcmFu
ZCA9IGpzQ2FzdDxKU0JpZ0ludCo+KG9wMSk7CkBAIC0xNDQxLDcgKzE0NDEsNyBAQCBKU0NlbGwq
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQml0TFNoaWZ0CiAKIEpTQ2VsbCogSklUX09QRVJBVElP
TiBvcGVyYXRpb25BZGRCaWdJbnQoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIG9wMSwgSlNDZWxs
KiBvcDIpCiB7Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICAK
ICAgICBKU0JpZ0ludCogbGVmdE9wZXJhbmQgPSBqc0Nhc3Q8SlNCaWdJbnQqPihvcDEpOwpAQCAt
MTQ1Miw3ICsxNDUyLDcgQEAgSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFkZEJpZ0lu
dAogCiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQml0T3JCaWdJbnQoRXhlY1N0YXRl
KiBleGVjLCBKU0NlbGwqIG9wMSwgSlNDZWxsKiBvcDIpCiB7Ci0gICAgVk0qIHZtID0gJmV4ZWMt
PnZtKCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFj
ZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICAKICAgICBKU0JpZ0ludCogbGVmdE9wZXJhbmQgPSBq
c0Nhc3Q8SlNCaWdJbnQqPihvcDEpOwpAQCAtMTQ2Myw3ICsxNDYzLDcgQEAgSlNDZWxsKiBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbkJpdE9yQmlnSQogCiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uQml0WG9yQmlnSW50KEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBvcDEsIEpTQ2VsbCog
b3AyKQogewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAKICAgICBK
U0JpZ0ludCogbGVmdE9wZXJhbmQgPSBqc0Nhc3Q8SlNCaWdJbnQqPihvcDEpOwpAQCAtMTQ3NCw3
ICsxNDc0LDcgQEAgSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkJpdFhvckJpZwogCiBz
aXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlU3RyaWN0RXFDZWxsKEV4ZWNTdGF0
ZSogZXhlYywgSlNDZWxsKiBvcDEsIEpTQ2VsbCogb3AyKQogewotICAgIFZNKiB2bSA9ICZleGVj
LT52bSgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgCiAgICAgcmV0dXJuIEpTVmFsdWU6OnN0cmljdEVx
dWFsU2xvd0Nhc2VJbmxpbmUoZXhlYywgb3AxLCBvcDIpOwpAQCAtMTQ4MywxNCArMTQ4MywxNCBA
QCBzaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlU3RyCiBzaXplX3QgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25TYW1lVmFsdWUoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1
ZSBhcmcxLCBFbmNvZGVkSlNWYWx1ZSBhcmcyKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogCiAgICAgcmV0dXJuIHNhbWVWYWx1
ZShleGVjLCBKU1ZhbHVlOjpkZWNvZGUoYXJnMSksIEpTVmFsdWU6OmRlY29kZShhcmcyKSk7CiB9
CiAKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVG9QcmltaXRpdmUoRXhl
Y1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICBWTSogdm0gPSAmZXhl
Yy0+dm0oKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRy
YWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIAogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
SlNWYWx1ZTo6ZGVjb2RlKHZhbHVlKS50b1ByaW1pdGl2ZShleGVjKSk7CkBAIC0xNDk4LDcgKzE0
OTgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRvCiAKIEVuY29k
ZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVG9OdW1iZXIoRXhlY1N0YXRlKiBleGVj
LCBFbmNvZGVkSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
dm0sIGV4ZWMpOwogCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihKU1ZhbHVl
OjpkZWNvZGUodmFsdWUpLnRvTnVtYmVyKGV4ZWMpKSk7CkBAIC0xNTA3LDcgKzE1MDcsNyBAQCBF
bmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRvCiBFbmNvZGVkSlNWYWx1ZSBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5VmFsV2l0aFRoaXMoRXhlY1N0YXRlKiBleGVjLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFRoaXMsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3JpcHQpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZEJhc2UpOwpAQCAtMTU0NiwyMyArMTU0NiwyMyBAQCBFbmNvZGVkSlNW
YWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdlCiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uUHV0QnlJZFdpdGhUaGlzU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZEJhc2UsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRUaGlzLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkVmFsdWUsIFVuaXF1ZWRTdHJpbmdJbXBsKiBpbXBsKQogewogICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwor
ICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogCi0gICAgcHV0V2l0
aFRoaXM8dHJ1ZT4oZXhlYywgZW5jb2RlZEJhc2UsIGVuY29kZWRUaGlzLCBlbmNvZGVkVmFsdWUs
IElkZW50aWZpZXI6OmZyb21VaWQoZXhlYywgaW1wbCkpOworICAgIHB1dFdpdGhUaGlzPHRydWU+
KGV4ZWMsIGVuY29kZWRCYXNlLCBlbmNvZGVkVGhpcywgZW5jb2RlZFZhbHVlLCBJZGVudGlmaWVy
Ojpmcm9tVWlkKHZtLCBpbXBsKSk7CiB9CiAKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25Q
dXRCeUlkV2l0aFRoaXMoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFz
ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFRoaXMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1
ZSwgVW5pcXVlZFN0cmluZ0ltcGwqIGltcGwpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsK
LSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZl
Q2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAKLSAgICBwdXRXaXRoVGhpczxmYWxz
ZT4oZXhlYywgZW5jb2RlZEJhc2UsIGVuY29kZWRUaGlzLCBlbmNvZGVkVmFsdWUsIElkZW50aWZp
ZXI6OmZyb21VaWQoZXhlYywgaW1wbCkpOworICAgIHB1dFdpdGhUaGlzPGZhbHNlPihleGVjLCBl
bmNvZGVkQmFzZSwgZW5jb2RlZFRoaXMsIGVuY29kZWRWYWx1ZSwgSWRlbnRpZmllcjo6ZnJvbVVp
ZCh2bSwgaW1wbCkpOwogfQogCiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxX
aXRoVGhpc1N0cmljdChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNl
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVGhpcywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFN1YnNj
cmlwdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIElkZW50aWZpZXIgcHJvcGVydHkgPSBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFN1YnNjcmlwdCkudG9Qcm9wZXJ0eUtleShleGVjKTsKQEAg
LTE1NzQsNyArMTU3NCw3IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbFdp
dGgKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbFdpdGhUaGlzKEV4ZWNTdGF0
ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRUaGlzLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkU3Vic2NyaXB0LCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkVmFsdWUpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcih2bSwgZXhlYyk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogCiAgICAgSWRlbnRpZmllciBwcm9wZXJ0eSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVk
U3Vic2NyaXB0KS50b1Byb3BlcnR5S2V5KGV4ZWMpOwpAQCAtMTU5Niw3ICsxNTk2LDcgQEAgQUxX
QVlTX0lOTElORSBzdGF0aWMgdm9pZCBkZWZpbmVEYXRhUHJvcAogdm9pZCBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvbkRlZmluZURhdGFQcm9wZXJ0eShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBi
YXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvcGVydHksIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRWYWx1ZSwgaW50MzJfdCBhdHRyaWJ1dGVzKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIElkZW50aWZpZXIgcHJvcGVydHlOYW1lID0gSlNW
YWx1ZTo6ZGVjb2RlKGVuY29kZWRQcm9wZXJ0eSkudG9Qcm9wZXJ0eUtleShleGVjKTsKQEAgLTE2
MDgsNyArMTYwOCw3IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25EZWZpbmVEYXRhUHIK
IHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25EZWZpbmVEYXRhUHJvcGVydHlTdHJpbmcoRXhl
Y1N0YXRlKiBleGVjLCBKU09iamVjdCogYmFzZSwgSlNTdHJpbmcqIHByb3BlcnR5LCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkVmFsdWUsIGludDMyX3QgYXR0cmlidXRlcykKIHsKICAgICBWTSYgdm0g
PSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVj
KTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBJZGVudGlmaWVyIHByb3Bl
cnR5TmFtZSA9IHByb3BlcnR5LT50b0lkZW50aWZpZXIoZXhlYyk7CkBAIC0xNjIwLDE0ICsxNjIw
LDE0IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25EZWZpbmVEYXRhUHIKIHZvaWQgSklU
X09QRVJBVElPTiBvcGVyYXRpb25EZWZpbmVEYXRhUHJvcGVydHlTdHJpbmdJZGVudChFeGVjU3Rh
dGUqIGV4ZWMsIEpTT2JqZWN0KiBiYXNlLCBVbmlxdWVkU3RyaW5nSW1wbCogcHJvcGVydHksIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgaW50MzJfdCBhdHRyaWJ1dGVzKQogewogICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0s
IGV4ZWMpOwotICAgIGRlZmluZURhdGFQcm9wZXJ0eShleGVjLCB2bSwgYmFzZSwgSWRlbnRpZmll
cjo6ZnJvbVVpZCgmdm0sIHByb3BlcnR5KSwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSks
IGF0dHJpYnV0ZXMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMp
OworICAgIGRlZmluZURhdGFQcm9wZXJ0eShleGVjLCB2bSwgYmFzZSwgSWRlbnRpZmllcjo6ZnJv
bVVpZCh2bSwgcHJvcGVydHkpLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwgYXR0cmli
dXRlcyk7CiB9CiAKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25EZWZpbmVEYXRhUHJvcGVy
dHlTeW1ib2woRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYmFzZSwgU3ltYm9sKiBwcm9wZXJ0
eSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBpbnQzMl90IGF0dHJpYnV0ZXMpCiB7CiAg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7
CiAgICAgZGVmaW5lRGF0YVByb3BlcnR5KGV4ZWMsIHZtLCBiYXNlLCBJZGVudGlmaWVyOjpmcm9t
VWlkKHByb3BlcnR5LT5wcml2YXRlTmFtZSgpKSwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1
ZSksIGF0dHJpYnV0ZXMpOwogfQogCkBAIC0xNjQ0LDcgKzE2NDQsNyBAQCBBTFdBWVNfSU5MSU5F
IHN0YXRpYyB2b2lkIGRlZmluZUFjY2Vzc29yCiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
RGVmaW5lQWNjZXNzb3JQcm9wZXJ0eShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBiYXNlLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvcGVydHksIEpTT2JqZWN0KiBnZXR0ZXIsIEpTT2JqZWN0
KiBzZXR0ZXIsIGludDMyX3QgYXR0cmlidXRlcykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgp
OwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBJZGVudGlmaWVyIHByb3BlcnR5TmFtZSA9IEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkUHJvcGVydHkpLnRvUHJvcGVydHlLZXkoZXhlYyk7CkBAIC0x
NjU1LDcgKzE2NTUsNyBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRGVmaW5lQWNjZXNz
CiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRGVmaW5lQWNjZXNzb3JQcm9wZXJ0eVN0cmlu
ZyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBiYXNlLCBKU1N0cmluZyogcHJvcGVydHksIEpT
T2JqZWN0KiBnZXR0ZXIsIEpTT2JqZWN0KiBzZXR0ZXIsIGludDMyX3QgYXR0cmlidXRlcykKIHsK
ICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVj
KTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBJZGVu
dGlmaWVyIHByb3BlcnR5TmFtZSA9IHByb3BlcnR5LT50b0lkZW50aWZpZXIoZXhlYyk7CkBAIC0x
NjY2LDIwICsxNjY2LDIwIEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25EZWZpbmVBY2Nl
c3MKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25EZWZpbmVBY2Nlc3NvclByb3BlcnR5U3Ry
aW5nSWRlbnQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYmFzZSwgVW5pcXVlZFN0cmluZ0lt
cGwqIHByb3BlcnR5LCBKU09iamVjdCogZ2V0dGVyLCBKU09iamVjdCogc2V0dGVyLCBpbnQzMl90
IGF0dHJpYnV0ZXMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7Ci0gICAgZGVmaW5lQWNjZXNzb3JQcm9wZXJ0
eShleGVjLCB2bSwgYmFzZSwgSWRlbnRpZmllcjo6ZnJvbVVpZCgmdm0sIHByb3BlcnR5KSwgZ2V0
dGVyLCBzZXR0ZXIsIGF0dHJpYnV0ZXMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIodm0sIGV4ZWMpOworICAgIGRlZmluZUFjY2Vzc29yUHJvcGVydHkoZXhlYywgdm0sIGJhc2Us
IElkZW50aWZpZXI6OmZyb21VaWQodm0sIHByb3BlcnR5KSwgZ2V0dGVyLCBzZXR0ZXIsIGF0dHJp
YnV0ZXMpOwogfQogCiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRGVmaW5lQWNjZXNzb3JQ
cm9wZXJ0eVN5bWJvbChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBiYXNlLCBTeW1ib2wqIHBy
b3BlcnR5LCBKU09iamVjdCogZ2V0dGVyLCBKU09iamVjdCogc2V0dGVyLCBpbnQzMl90IGF0dHJp
YnV0ZXMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVU
cmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cih2bSwgZXhlYyk7CiAgICAgZGVmaW5lQWNjZXNzb3JQcm9wZXJ0eShleGVjLCB2bSwgYmFzZSwg
SWRlbnRpZmllcjo6ZnJvbVVpZChwcm9wZXJ0eS0+cHJpdmF0ZU5hbWUoKSksIGdldHRlciwgc2V0
dGVyLCBhdHRyaWJ1dGVzKTsKIH0KIAogY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdB
cnJheShFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogYXJyYXlTdHJ1Y3R1cmUsIHZvaWQqIGJ1
ZmZlciwgc2l6ZV90IHNpemUpCiB7Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBl
eGVjKTsKICAgICAKICAgICByZXR1cm4gYml0d2lzZV9jYXN0PGNoYXIqPihjb25zdHJ1Y3RBcnJh
eShleGVjLCBhcnJheVN0cnVjdHVyZSwgc3RhdGljX2Nhc3Q8SlNWYWx1ZSo+KGJ1ZmZlciksIHNp
emUpKTsKQEAgLTE2ODcsMTYgKzE2ODcsMTYgQEAgY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRp
b25OZXdBcnJheShFeAogCiBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0VtcHR5QXJy
YXkoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIGFycmF5U3RydWN0dXJlKQogewotICAgIFZN
KiB2bSA9ICZleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZl
Q2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgCi0gICAgcmV0dXJuIGJpdHdp
c2VfY2FzdDxjaGFyKj4oSlNBcnJheTo6Y3JlYXRlKCp2bSwgYXJyYXlTdHJ1Y3R1cmUpKTsKKyAg
ICByZXR1cm4gYml0d2lzZV9jYXN0PGNoYXIqPihKU0FycmF5OjpjcmVhdGUodm0sIGFycmF5U3Ry
dWN0dXJlKSk7CiB9CiAKIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3QXJyYXlXaXRo
U2l6ZShFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogYXJyYXlTdHJ1Y3R1cmUsIGludDMyX3Qg
c2l6ZSwgQnV0dGVyZmx5KiBidXR0ZXJmbHkpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsK
LSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZl
Q2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgaWYgKFVOTElLRUxZKHNpemUgPCAwKSkKQEAgLTE3
MTMsNyArMTcxMyw3IEBAIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3QXJyYXlXaXQK
IGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZUFuZEhpbnQoRXhl
Y1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIGFycmF5U3RydWN0dXJlLCBpbnQzMl90IHNpemUsIGlu
dDMyX3QgdmVjdG9yTGVuZ3RoSGludCwgQnV0dGVyZmx5KiBidXR0ZXJmbHkpCiB7CiAgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwg
ZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgaWYgKFVOTElLRUxZ
KHNpemUgPCAwKSkKQEAgLTE3MzIsNyArMTczMiw3IEBAIGNoYXIqIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uTmV3QXJyYXlXaXQKIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdBcnJh
eUJ1ZmZlcihFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogYXJyYXlTdHJ1Y3R1cmUsIEpTQ2Vs
bCogaW1tdXRhYmxlQnV0dGVyZmx5Q2VsbCkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwot
ICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICBBU1NFUlQoIWFycmF5U3RydWN0
dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKICAgICBhdXRvKiBpbW11dGFibGVCdXR0ZXJmbHkg
PSBqc0Nhc3Q8SlNJbW11dGFibGVCdXR0ZXJmbHkqPihpbW11dGFibGVCdXR0ZXJmbHlDZWxsKTsK
ICAgICBBU1NFUlQoYXJyYXlTdHJ1Y3R1cmUtPmluZGV4aW5nTW9kZSgpID09IGltbXV0YWJsZUJ1
dHRlcmZseS0+aW5kZXhpbmdNb2RlKCkgfHwgaGFzQW55QXJyYXlTdG9yYWdlKGFycmF5U3RydWN0
dXJlLT5pbmRleGluZ01vZGUoKSkpOwpAQCAtMTc1Miw3ICsxNzUyLDcgQEAgY2hhciogSklUX09Q
RVJBVElPTiBvcGVyYXRpb25OZXdJbnQ4QXJyYQogICAgIEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICBWTSYg
dm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBl
eGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICBy
ZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oY29uc3RydWN0R2VuZXJpY1R5cGVkQXJyYXlW
aWV3V2l0aEFyZ3VtZW50czxKU0ludDhBcnJheT4oZXhlYywgc3RydWN0dXJlLCBlbmNvZGVkVmFs
dWUsIDAsIFdURjo6bnVsbG9wdCkpOwogfQogCkBAIC0xNzY2LDcgKzE3NjYsNyBAQCBjaGFyKiBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0ludDE2QXJyCiAgICAgRXhlY1N0YXRlKiBleGVjLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigm
dm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwog
ICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPihjb25zdHJ1Y3RHZW5lcmljVHlwZWRB
cnJheVZpZXdXaXRoQXJndW1lbnRzPEpTSW50MTZBcnJheT4oZXhlYywgc3RydWN0dXJlLCBlbmNv
ZGVkVmFsdWUsIDAsIFdURjo6bnVsbG9wdCkpOwogfQogCkBAIC0xNzgwLDcgKzE3ODAsNyBAQCBj
aGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0ludDMyQXJyCiAgICAgRXhlY1N0YXRlKiBl
eGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQog
ewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4
ZWMpOwogICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPihjb25zdHJ1Y3RHZW5lcmlj
VHlwZWRBcnJheVZpZXdXaXRoQXJndW1lbnRzPEpTSW50MzJBcnJheT4oZXhlYywgc3RydWN0dXJl
LCBlbmNvZGVkVmFsdWUsIDAsIFdURjo6bnVsbG9wdCkpOwogfQogCkBAIC0xNzk0LDcgKzE3OTQs
NyBAQCBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1VpbnQ4QXJyCiAgICAgRXhlY1N0
YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZh
bHVlKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
dm0sIGV4ZWMpOwogICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPihjb25zdHJ1Y3RH
ZW5lcmljVHlwZWRBcnJheVZpZXdXaXRoQXJndW1lbnRzPEpTVWludDhBcnJheT4oZXhlYywgc3Ry
dWN0dXJlLCBlbmNvZGVkVmFsdWUsIDAsIFdURjo6bnVsbG9wdCkpOwogfQogCkBAIC0xODA4LDcg
KzE4MDgsNyBAQCBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1VpbnQ4Q2xhCiAgICAg
RXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZFZhbHVlKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIodm0sIGV4ZWMpOwogICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPihjb25z
dHJ1Y3RHZW5lcmljVHlwZWRBcnJheVZpZXdXaXRoQXJndW1lbnRzPEpTVWludDhDbGFtcGVkQXJy
YXk+KGV4ZWMsIHN0cnVjdHVyZSwgZW5jb2RlZFZhbHVlLCAwLCBXVEY6Om51bGxvcHQpKTsKIH0K
IApAQCAtMTgyMiw3ICsxODIyLDcgQEAgY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdV
aW50MTZBcgogICAgIEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2Fz
dDxjaGFyKj4oY29uc3RydWN0R2VuZXJpY1R5cGVkQXJyYXlWaWV3V2l0aEFyZ3VtZW50czxKU1Vp
bnQxNkFycmF5PihleGVjLCBzdHJ1Y3R1cmUsIGVuY29kZWRWYWx1ZSwgMCwgV1RGOjpudWxsb3B0
KSk7CiB9CiAKQEAgLTE4MzYsNyArMTgzNiw3IEBAIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uTmV3VWludDMyQXIKICAgICBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJl
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgcmV0dXJuIHJlaW50ZXJw
cmV0X2Nhc3Q8Y2hhcio+KGNvbnN0cnVjdEdlbmVyaWNUeXBlZEFycmF5Vmlld1dpdGhBcmd1bWVu
dHM8SlNVaW50MzJBcnJheT4oZXhlYywgc3RydWN0dXJlLCBlbmNvZGVkVmFsdWUsIDAsIFdURjo6
bnVsbG9wdCkpOwogfQogCkBAIC0xODUwLDcgKzE4NTAsNyBAQCBjaGFyKiBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvbk5ld0Zsb2F0MzJBCiAgICAgRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwor
ICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIHJldHVybiBy
ZWludGVycHJldF9jYXN0PGNoYXIqPihjb25zdHJ1Y3RHZW5lcmljVHlwZWRBcnJheVZpZXdXaXRo
QXJndW1lbnRzPEpTRmxvYXQzMkFycmF5PihleGVjLCBzdHJ1Y3R1cmUsIGVuY29kZWRWYWx1ZSwg
MCwgV1RGOjpudWxsb3B0KSk7CiB9CiAKQEAgLTE4NjQsMjMgKzE4NjQsMjMgQEAgY2hhciogSklU
X09QRVJBVElPTiBvcGVyYXRpb25OZXdGbG9hdDY0QQogICAgIEV4ZWNTdGF0ZSogZXhlYywgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICBW
TSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZt
LCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAg
ICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oY29uc3RydWN0R2VuZXJpY1R5cGVkQXJy
YXlWaWV3V2l0aEFyZ3VtZW50czxKU0Zsb2F0NjRBcnJheT4oZXhlYywgc3RydWN0dXJlLCBlbmNv
ZGVkVmFsdWUsIDAsIFdURjo6bnVsbG9wdCkpOwogfQogCiBKU0NlbGwqIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uQ3JlYXRlQWN0aXZhdGlvbkRpcmVjdChFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVy
ZSogc3RydWN0dXJlLCBKU1Njb3BlKiBzY29wZSwgU3ltYm9sVGFibGUqIHRhYmxlLCBFbmNvZGVk
SlNWYWx1ZSBpbml0aWFsVmFsdWVFbmNvZGVkKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgSlNWYWx1
ZSBpbml0aWFsVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoaW5pdGlhbFZhbHVlRW5jb2RlZCk7CiAg
ICAgQVNTRVJUKGluaXRpYWxWYWx1ZSA9PSBqc1VuZGVmaW5lZCgpIHx8IGluaXRpYWxWYWx1ZSA9
PSBqc1REWlZhbHVlKCkpOwotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwogICAgIHJldHVybiBKU0xleGljYWxFbnZp
cm9ubWVudDo6Y3JlYXRlKHZtLCBzdHJ1Y3R1cmUsIHNjb3BlLCB0YWJsZSwgaW5pdGlhbFZhbHVl
KTsKIH0KIAogSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZURpcmVjdEFyZ3Vt
ZW50cyhFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlLCB1aW50MzJfdCBsZW5n
dGgsIHVpbnQzMl90IG1pbkNhcGFjaXR5KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0g
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRhcmdldCgmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIERpcmVjdEFyZ3VtZW50cyogcmVz
dWx0ID0gRGlyZWN0QXJndW1lbnRzOjpjcmVhdGUoCiAgICAgICAgIHZtLCBzdHJ1Y3R1cmUsIGxl
bmd0aCwgc3RkOjptYXgobGVuZ3RoLCBtaW5DYXBhY2l0eSkpOwogICAgIC8vIFRoZSBjYWxsZXIg
d2lsbCBzdG9yZSB0byB0aGlzIG9iamVjdCB3aXRob3V0IGJhcnJpZXJzLiBNb3N0IGxpa2VseSwg
YXQgdGhpcyBwb2ludCwgdGhpcyBpcwpAQCAtMTg5Myw3ICsxODkzLDcgQEAgSlNDZWxsKiBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZURpcgogSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbkNyZWF0ZVNjb3BlZEFyZ3VtZW50cyhFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBSZWdpc3RlciogYXJndW1lbnRTdGFydCwgdWludDMyX3QgbGVuZ3RoLCBKU0Z1bmN0
aW9uKiBjYWxsZWUsIEpTTGV4aWNhbEVudmlyb25tZW50KiBzY29wZSkKIHsKICAgICBWTSYgdm0g
PSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0YXJnZXQoJnZtLCBleGVj
KTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICAKICAg
ICAvLyBXZSBjb3VsZCBwYXNzIHRoZSBTY29wZWRBcmd1bWVudHNUYWJsZSogYXMgYW4gYXJndW1l
bnQuIFdlIGN1cnJlbnRseSBkb24ndCBiZWNhdXNlIEkKICAgICAvLyBkaWRuJ3QgZmVlbCBsaWtl
IGNoYW5naW5nIHRoZSBtYXggbnVtYmVyIG9mIGFyZ3VtZW50cyBmb3IgYSBzbG93IHBhdGggY2Fs
bCBmcm9tIDYgdG8gNy4KQEAgLTE5MDYsNyArMTkwNiw3IEBAIEpTQ2VsbCogSklUX09QRVJBVElP
TiBvcGVyYXRpb25DcmVhdGVTY28KIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25DcmVh
dGVDbG9uZWRBcmd1bWVudHMoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
UmVnaXN0ZXIqIGFyZ3VtZW50U3RhcnQsIHVpbnQzMl90IGxlbmd0aCwgSlNGdW5jdGlvbiogY2Fs
bGVlKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRhcmdldCgmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
dm0sIGV4ZWMpOwogICAgIHJldHVybiBDbG9uZWRBcmd1bWVudHM6OmNyZWF0ZUJ5Q29weWluZ0Zy
b20oCiAgICAgICAgIGV4ZWMsIHN0cnVjdHVyZSwgYXJndW1lbnRTdGFydCwgbGVuZ3RoLCBjYWxs
ZWUpOwogfQpAQCAtMTkxNCw3ICsxOTE0LDcgQEAgSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbkNyZWF0ZUNsbwogSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZURpcmVj
dEFyZ3VtZW50c0R1cmluZ0V4aXQoRXhlY1N0YXRlKiBleGVjLCBJbmxpbmVDYWxsRnJhbWUqIGlu
bGluZUNhbGxGcmFtZSwgSlNGdW5jdGlvbiogY2FsbGVlLCB1aW50MzJfdCBhcmd1bWVudENvdW50
KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRhcmdldCgmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0s
IGV4ZWMpOwogICAgIAogICAgIERlZmVyR0NGb3JBV2hpbGUgZGVmZXJHQyh2bS5oZWFwKTsKICAg
ICAKQEAgLTE5NDMsNyArMTk0Myw3IEBAIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25D
cmVhdGVEaXIKIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25DcmVhdGVDbG9uZWRBcmd1
bWVudHNEdXJpbmdFeGl0KEV4ZWNTdGF0ZSogZXhlYywgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVD
YWxsRnJhbWUsIEpTRnVuY3Rpb24qIGNhbGxlZSwgdWludDMyX3QgYXJndW1lbnRDb3VudCkKIHsK
ICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0YXJn
ZXQoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVj
KTsKICAgICAKICAgICBEZWZlckdDRm9yQVdoaWxlIGRlZmVyR0Modm0uaGVhcCk7CiAgICAgCkBA
IC0xOTY5LDcgKzE5NjksNyBAQCBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRl
Q2xvCiAKIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25DcmVhdGVSZXN0KEV4ZWNTdGF0
ZSogZXhlYywgUmVnaXN0ZXIqIGFyZ3VtZW50U3RhcnQsIHVuc2lnbmVkIG51bWJlck9mUGFyYW1z
VG9Ta2lwLCB1bnNpZ25lZCBhcnJheVNpemUpCiB7Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7
CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKHZtLCBleGVjKTsKIAogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBleGVj
LT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7CkBAIC0xOTgyLDcgKzE5ODIsNyBAQCBKU0NlbGwqIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRlUmVzCiBzaXplX3QgSklUX09QRVJBVElPTiBvcGVy
YXRpb25PYmplY3RJc09iamVjdChFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTQ2VsbCogb2JqZWN0KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0g
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogCiAgICAgQVNTRVJUKGpzRHluYW1pY0Nh
c3Q8SlNPYmplY3QqPih2bSwgb2JqZWN0KSk7CiAgICAgCkBAIC0xOTk2LDcgKzE5OTYsNyBAQCBz
aXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25PYmplY3RJc09iCiBzaXplX3QgSklUX09QRVJB
VElPTiBvcGVyYXRpb25PYmplY3RJc0Z1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNDZWxsKiBvYmplY3QpCiB7CiAgICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7Cisg
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAKICAgICBBU1NFUlQo
anNEeW5hbWljQ2FzdDxKU09iamVjdCo+KHZtLCBvYmplY3QpKTsKICAgICAKQEAgLTIwMTAsNyAr
MjAxMCw3IEBAIHNpemVfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk9iamVjdElzRnUKIEpTQ2Vs
bCogSklUX09QRVJBVElPTiBvcGVyYXRpb25UeXBlT2ZPYmplY3QoRXhlY1N0YXRlKiBleGVjLCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0NlbGwqIG9iamVjdCkKIHsKICAgICBWTSYg
dm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBl
eGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKIAogICAg
IEFTU0VSVChqc0R5bmFtaWNDYXN0PEpTT2JqZWN0Kj4odm0sIG9iamVjdCkpOwogICAgIApAQCAt
MjAyNCw3ICsyMDI0LDcgQEAgSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblR5cGVPZk9i
agogaW50MzJfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblR5cGVPZk9iamVjdEFzVHlwZW9mVHlw
ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQ2VsbCog
b2JqZWN0KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIodm0sIGV4ZWMpOwogCiAgICAgQVNTRVJUKGpzRHluYW1pY0Nhc3Q8SlNPYmplY3QqPih2bSwg
b2JqZWN0KSk7CiAgICAgCkBAIC0yMDM4LDcgKzIwMzgsNyBAQCBpbnQzMl90IEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uVHlwZU9mT2JqCiBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFsbG9j
YXRlU2ltcGxlUHJvcGVydHlTdG9yYWdlV2l0aEluaXRpYWxDYXBhY2l0eShFeGVjU3RhdGUqIGV4
ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFj
ZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2
bSwgZXhlYyk7CiAKICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oCiAgICAgICAg
IEJ1dHRlcmZseTo6Y3JlYXRlVW5pbml0aWFsaXplZCh2bSwgMCwgMCwgaW5pdGlhbE91dE9mTGlu
ZUNhcGFjaXR5LCBmYWxzZSwgMCkpOwpAQCAtMjA0Nyw3ICsyMDQ3LDcgQEAgY2hhciogSklUX09Q
RVJBVElPTiBvcGVyYXRpb25BbGxvY2F0ZVNpbQogY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRp
b25BbGxvY2F0ZVNpbXBsZVByb3BlcnR5U3RvcmFnZShFeGVjU3RhdGUqIGV4ZWMsIHNpemVfdCBu
ZXdTaXplKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIodm0sIGV4ZWMpOwogCiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KAogICAg
ICAgICBCdXR0ZXJmbHk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQodm0sIDAsIDAsIG5ld1NpemUsIGZh
bHNlLCAwKSk7CkBAIC0yMDU2LDcgKzIwNTYsNyBAQCBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbkFsbG9jYXRlU2ltCiBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFsbG9jYXRlQ29t
cGxleFByb3BlcnR5U3RvcmFnZVdpdGhJbml0aWFsQ2FwYWNpdHkoRXhlY1N0YXRlKiBleGVjLCBK
U09iamVjdCogb2JqZWN0KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZl
Q2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRy
YWNlciB0cmFjZXIodm0sIGV4ZWMpOwogCiAgICAgQVNTRVJUKCFvYmplY3QtPnN0cnVjdHVyZSh2
bSktPm91dE9mTGluZUNhcGFjaXR5KCkpOwogICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNo
YXIqPigKQEAgLTIwNjYsNyArMjA2Niw3IEBAIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
QWxsb2NhdGVDb20KIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQWxsb2NhdGVDb21wbGV4
UHJvcGVydHlTdG9yYWdlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9iamVjdCwgc2l6ZV90
IG5ld1NpemUpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcih2bSwgZXhlYyk7CiAKICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oCiAg
ICAgICAgIG9iamVjdC0+YWxsb2NhdGVNb3JlT3V0T2ZMaW5lU3RvcmFnZSh2bSwgb2JqZWN0LT5z
dHJ1Y3R1cmUodm0pLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBuZXdTaXplKSk7CkBAIC0yMDc1LDcg
KzIwNzUsNyBAQCBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFsbG9jYXRlQ29tCiBjaGFy
KiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkVuc3VyZUludDMyKEV4ZWNTdGF0ZSogZXhlYywgSlND
ZWxsKiBjZWxsKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIodm0sIGV4ZWMpOwogICAgIAogICAgIGlmICghY2VsbC0+aXNPYmplY3QoKSkKICAgICAg
ICAgcmV0dXJuIDA7CkBAIC0yMDg4LDcgKzIwODgsNyBAQCBjaGFyKiBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbkVuc3VyZUludDMyCiBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkVuc3VyZURv
dWJsZShFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogY2VsbCkKIHsKICAgICBWTSYgdm0gPSBleGVj
LT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICAKICAgICBpZiAo
IWNlbGwtPmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiAwOwpAQCAtMjEwMSw3ICsyMTAxLDcg
QEAgY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25FbnN1cmVEb3VibAogY2hhciogSklUX09Q
RVJBVElPTiBvcGVyYXRpb25FbnN1cmVDb250aWd1b3VzKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxs
KiBjZWxsKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIodm0sIGV4ZWMpOwogICAgIAogICAgIGlmICghY2VsbC0+aXNPYmplY3QoKSkKICAgICAgICAg
cmV0dXJuIDA7CkBAIC0yMTE0LDcgKzIxMTQsNyBAQCBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbkVuc3VyZUNvbnRpCiBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkVuc3VyZUFycmF5
U3RvcmFnZShFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogY2VsbCkKIHsKICAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsK
KyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICAKICAgICBp
ZiAoIWNlbGwtPmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiAwOwpAQCAtMjEyNyw3ICsyMTI3
LDcgQEAgY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25FbnN1cmVBcnJheQogRW5jb2RlZEpT
VmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25IYXNHZW5lcmljUHJvcGVydHkoRXhlY1N0YXRl
KiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZVZhbHVlLCBKU0NlbGwqIHByb3BlcnR5
KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0s
IGV4ZWMpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAg
IEpTVmFsdWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNlVmFsdWUpOwpA
QCAtMjE0NSwxMSArMjE0NSwxMSBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbkhhCiBzaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25IYXNJbmRleGVkUHJvcGVydHlC
eUludChFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogYmFzZUNlbGwsIGludDMyX3Qgc3Vic2NyaXB0
LCBpbnQzMl90IGludGVybmFsTWV0aG9kVHlwZSkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgp
OwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICBKU09iamVjdCogb2JqZWN0
ID0gYmFzZUNlbGwtPnRvT2JqZWN0KGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSk7
CiAgICAgaWYgKFVOTElLRUxZKHN1YnNjcmlwdCA8IDApKSB7CiAgICAgICAgIC8vIEdvIHRoZSBz
bG93ZXN0IHdheSBwb3NzaWJsZSBiZWNhdXNlIG5lZ2F0aXZlIGluZGljZXMgZG9uJ3QgdXNlIGlu
ZGV4ZWQgc3RvcmFnZS4KLSAgICAgICAgcmV0dXJuIG9iamVjdC0+aGFzUHJvcGVydHlHZW5lcmlj
KGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgc3Vic2NyaXB0KSwgc3RhdGljX2Nhc3Q8UHJv
cGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGU+KGludGVybmFsTWV0aG9kVHlwZSkpOworICAg
ICAgICByZXR1cm4gb2JqZWN0LT5oYXNQcm9wZXJ0eUdlbmVyaWMoZXhlYywgSWRlbnRpZmllcjo6
ZnJvbSh2bSwgc3Vic2NyaXB0KSwgc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpJbnRlcm5hbE1l
dGhvZFR5cGU+KGludGVybmFsTWV0aG9kVHlwZSkpOwogICAgIH0KICAgICByZXR1cm4gb2JqZWN0
LT5oYXNQcm9wZXJ0eUdlbmVyaWMoZXhlYywgc3Vic2NyaXB0LCBzdGF0aWNfY2FzdDxQcm9wZXJ0
eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZT4oaW50ZXJuYWxNZXRob2RUeXBlKSk7CiB9CkBAIC0y
MTU3LDcgKzIxNTcsNyBAQCBzaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25IYXNJbmRleGVk
CiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0UHJvcGVydHlFbnVtZXJhdG9yKEV4
ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UpCiB7CiAgICAgVk0mIHZt
ID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhl
Yyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgSlNWYWx1ZSBiYXNlID0g
SlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNlKTsKQEAgLTIxNzMsNyArMjE3Myw3IEBAIEpTQ2Vs
bCogSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRQcm9wZXIKIEpTQ2VsbCogSklUX09QRVJBVElP
TiBvcGVyYXRpb25HZXRQcm9wZXJ0eUVudW1lcmF0b3JDZWxsKEV4ZWNTdGF0ZSogZXhlYywgSlND
ZWxsKiBjZWxsKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIodm0sIGV4ZWMpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKIAogICAgIEpTT2JqZWN0KiBiYXNlID0gY2VsbC0+dG9PYmplY3QoZXhlYywgZXhlYy0+bGV4
aWNhbEdsb2JhbE9iamVjdCgpKTsKQEAgLTIxODUsMTQgKzIxODUsMTQgQEAgSlNDZWxsKiBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbkdldFByb3BlcgogSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvblRvSW5kZXhTdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBpbnQzMl90IGluZGV4KQogewogICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigm
dm0sIGV4ZWMpOwotICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4
ZWMsIGluZGV4KS5zdHJpbmcoKSk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2
bSwgZXhlYyk7CisgICAgcmV0dXJuIGpzU3RyaW5nKHZtLCBJZGVudGlmaWVyOjpmcm9tKHZtLCBp
bmRleCkuc3RyaW5nKCkpOwogfQogCiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3
UmVnZXhwV2l0aExhc3RJbmRleChFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogcmVnZXhwUHRyLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkTGFzdEluZGV4KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogCiAgICAgUmVnRXhwKiByZWdl
eHAgPSBzdGF0aWNfY2FzdDxSZWdFeHAqPihyZWdleHBQdHIpOwogICAgIEFTU0VSVChyZWdleHAt
PmlzVmFsaWQoKSk7CkBAIC0yMjAyLDcgKzIyMDIsNyBAQCBKU0NlbGwqIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uTmV3UmVnZXhwCiBTdHJpbmdJbXBsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblJl
c29sdmVSb3BlKEV4ZWNTdGF0ZSogZXhlYywgSlNTdHJpbmcqIHN0cmluZykKIHsKICAgICBWTSYg
dm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBl
eGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKIAogICAg
IHJldHVybiBzdHJpbmctPnZhbHVlKGV4ZWMpLmltcGwoKTsKIH0KQEAgLTIyMTAsNyArMjIxMCw3
IEBAIFN0cmluZ0ltcGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUmVzb2wKIEpTU3RyaW5nKiBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvblN0cmluZ1ZhbHVlT2YoRXhlY1N0YXRlKiBleGVjLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkQXJndW1lbnQpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsK
LSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZl
Q2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgSlNWYWx1ZSBhcmd1bWVudCA9IEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkQXJndW1lbnQpOwpAQCAtMjIyOCw3ICsyMjI4LDcgQEAgSlNTdHJpbmcqIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uU3RyaW5nVgogSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvblN0cmluZ1N1YnN0cihFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogY2VsbCwgaW50MzJfdCBm
cm9tLCBpbnQzMl90IHNwYW4pCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAKICAgICByZXR1cm4ganNTdWJzdHJpbmcodm0sIGV4
ZWMsIGpzQ2FzdDxKU1N0cmluZyo+KGNlbGwpLCBmcm9tLCBzcGFuKTsKIH0KQEAgLTIyMzYsNyAr
MjIzNiw3IEBAIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25TdHJpbmdTdWIKIEpTQ2Vs
bCogSklUX09QRVJBVElPTiBvcGVyYXRpb25TdHJpbmdTbGljZShFeGVjU3RhdGUqIGV4ZWMsIEpT
Q2VsbCogY2VsbCwgaW50MzJfdCBzdGFydCwgaW50MzJfdCBlbmQpCiB7CiAgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7
CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAKICAgICBKU1N0
cmluZyogc3RyaW5nID0gYXNTdHJpbmcoY2VsbCk7CiAgICAgc3RhdGljX2Fzc2VydChzdGF0aWNf
Y2FzdDx1aW50NjRfdD4oSlNTdHJpbmc6Ok1heExlbmd0aCkgPD0gc3RhdGljX2Nhc3Q8dWludDY0
X3Q+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1heCgpKSwgIiIpOwpAQCAtMjI0Niw3
ICsyMjQ2LDcgQEAgSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblN0cmluZ1NsaQogSlNT
dHJpbmcqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVG9Mb3dlckNhc2UoRXhlY1N0YXRlKiBleGVj
LCBKU1N0cmluZyogc3RyaW5nLCB1aW50MzJfdCBmYWlsaW5nSW5kZXgpCiB7CiAgICAgVk0mIHZt
ID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhl
Yyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAKICAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKQEAgLTIyNTgsMTMgKzIyNTgs
MTMgQEAgSlNTdHJpbmcqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVG9Mb3dlcgogICAgIFN0cmlu
ZyBsb3dlcmNhc2VkU3RyaW5nID0gaW5wdXRTdHJpbmcuaXM4Qml0KCkgPyBpbnB1dFN0cmluZy5j
b252ZXJ0VG9Mb3dlcmNhc2VXaXRob3V0TG9jYWxlU3RhcnRpbmdBdEZhaWxpbmdJbmRleDhCaXQo
ZmFpbGluZ0luZGV4KSA6IGlucHV0U3RyaW5nLmNvbnZlcnRUb0xvd2VyY2FzZVdpdGhvdXRMb2Nh
bGUoKTsKICAgICBpZiAobG93ZXJjYXNlZFN0cmluZy5pbXBsKCkgPT0gaW5wdXRTdHJpbmcuaW1w
bCgpKQogICAgICAgICByZXR1cm4gc3RyaW5nOwotICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29w
ZSwganNTdHJpbmcoZXhlYywgbG93ZXJjYXNlZFN0cmluZykpOworICAgIFJFTEVBU0VfQU5EX1JF
VFVSTihzY29wZSwganNTdHJpbmcodm0sIGxvd2VyY2FzZWRTdHJpbmcpKTsKIH0KIAogY2hhciog
SklUX09QRVJBVElPTiBvcGVyYXRpb25JbnQzMlRvU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgaW50
MzJfdCB2YWx1ZSwgaW50MzJfdCByYWRpeCkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwot
ICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKIAogICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKIApAQCAtMjI3OSw3ICsyMjc5LDcgQEAgY2hhciogSklUX09Q
RVJBVElPTiBvcGVyYXRpb25JbnQzMlRvU3RyaQogY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRp
b25JbnQ1MlRvU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgaW50NjRfdCB2YWx1ZSwgaW50MzJfdCBy
YWRpeCkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRy
YWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KHZtLCBleGVjKTsKIAogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
IApAQCAtMjI5NCw3ICsyMjk0LDcgQEAgY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25JbnQ1
MlRvU3RyaQogY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25Eb3VibGVUb1N0cmluZyhFeGVj
U3RhdGUqIGV4ZWMsIGRvdWJsZSB2YWx1ZSwgaW50MzJfdCByYWRpeCkKIHsKICAgICBWTSYgdm0g
PSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVj
KTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKIAogICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIApAQCAtMjMwOSw3ICsyMzA5LDcg
QEAgY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25Eb3VibGVUb1N0cgogY2hhciogSklUX09Q
RVJBVElPTiBvcGVyYXRpb25JbnQzMlRvU3RyaW5nV2l0aFZhbGlkUmFkaXgoRXhlY1N0YXRlKiBl
eGVjLCBpbnQzMl90IHZhbHVlLCBpbnQzMl90IHJhZGl4KQogewogICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogCiAgICAgcmV0dXJuIHJl
aW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGludDMyVG9TdHJpbmcodm0sIHZhbHVlLCByYWRpeCkpOwog
fQpAQCAtMjMxNyw3ICsyMzE3LDcgQEAgY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25JbnQz
MlRvU3RyaQogY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25JbnQ1MlRvU3RyaW5nV2l0aFZh
bGlkUmFkaXgoRXhlY1N0YXRlKiBleGVjLCBpbnQ2NF90IHZhbHVlLCBpbnQzMl90IHJhZGl4KQog
ewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4
ZWMpOwogCiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGludDUyVG9TdHJpbmco
dm0sIHZhbHVlLCByYWRpeCkpOwogfQpAQCAtMjMyNSw3ICsyMzI1LDcgQEAgY2hhciogSklUX09Q
RVJBVElPTiBvcGVyYXRpb25JbnQ1MlRvU3RyaQogY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRp
b25Eb3VibGVUb1N0cmluZ1dpdGhWYWxpZFJhZGl4KEV4ZWNTdGF0ZSogZXhlYywgZG91YmxlIHZh
bHVlLCBpbnQzMl90IHJhZGl4KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogCiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8
Y2hhcio+KG51bWJlclRvU3RyaW5nKHZtLCB2YWx1ZSwgcmFkaXgpKTsKIH0KQEAgLTIzMzMsMTUg
KzIzMzMsMTUgQEAgY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25Eb3VibGVUb1N0cgogSlNT
dHJpbmcqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uU2luZ2xlQ2hhcmFjdGVyU3RyaW5nKEV4ZWNT
dGF0ZSogZXhlYywgaW50MzJfdCBjaGFyYWN0ZXIpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgCi0gICAgcmV0dXJuIGpz
U2luZ2xlQ2hhcmFjdGVyU3RyaW5nKGV4ZWMsIHN0YXRpY19jYXN0PFVDaGFyPihjaGFyYWN0ZXIp
KTsKKyAgICByZXR1cm4ganNTaW5nbGVDaGFyYWN0ZXJTdHJpbmcodm0sIHN0YXRpY19jYXN0PFVD
aGFyPihjaGFyYWN0ZXIpKTsKIH0KIAogU3ltYm9sKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5l
d1N5bWJvbChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAKICAgICByZXR1cm4gU3ltYm9sOjpjcmVh
dGUodm0pOwogfQpAQCAtMjM0OSw3ICsyMzQ5LDcgQEAgU3ltYm9sKiBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbk5ld1N5bWJvbAogU3ltYm9sKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1N5bWJv
bFdpdGhEZXNjcmlwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTU3RyaW5nKiBkZXNjcmlwdGlvbikK
IHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBl
eGVjKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBT
dHJpbmcgc3RyaW5nID0gZGVzY3JpcHRpb24tPnZhbHVlKGV4ZWMpOwpAQCAtMjM2MSw3ICsyMzYx
LDcgQEAgU3ltYm9sKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1N5bWJvbAogSlNDZWxsKiBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1N0cmluZ09iamVjdChFeGVjU3RhdGUqIGV4ZWMsIEpT
U3RyaW5nKiBzdHJpbmcsIFN0cnVjdHVyZSogc3RydWN0dXJlKQogewogICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwor
ICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIAogICAgIHJl
dHVybiBTdHJpbmdPYmplY3Q6OmNyZWF0ZSh2bSwgc3RydWN0dXJlLCBzdHJpbmcpOwogfQpAQCAt
MjM2OSw3ICsyMzY5LDcgQEAgSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1N0cmlu
ZwogSlNTdHJpbmcqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVG9TdHJpbmdPbkNlbGwoRXhlY1N0
YXRlKiBleGVjLCBKU0NlbGwqIGNlbGwpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgCiAgICAgcmV0dXJuIEpTVmFsdWUo
Y2VsbCkudG9TdHJpbmcoZXhlYyk7CiB9CkBAIC0yMzc3LDcgKzIzNzcsNyBAQCBKU1N0cmluZyog
SklUX09QRVJBVElPTiBvcGVyYXRpb25Ub1N0cmluCiBKU1N0cmluZyogSklUX09QRVJBVElPTiBv
cGVyYXRpb25Ub1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIHZhbHVlKQog
ewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4
ZWMpOwogCiAgICAgcmV0dXJuIEpTVmFsdWU6OmRlY29kZSh2YWx1ZSkudG9TdHJpbmcoZXhlYyk7
CiB9CkBAIC0yMzg1LDcgKzIzODUsNyBAQCBKU1N0cmluZyogSklUX09QRVJBVElPTiBvcGVyYXRp
b25Ub1N0cmluCiBKU1N0cmluZyogSklUX09QRVJBVElPTiBvcGVyYXRpb25DYWxsU3RyaW5nQ29u
c3RydWN0b3JPbkNlbGwoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGNlbGwpCiB7CiAgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwg
ZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAKICAg
ICByZXR1cm4gc3RyaW5nQ29uc3RydWN0b3IoZXhlYywgY2VsbCk7CiB9CkBAIC0yMzkzLDcgKzIz
OTMsNyBAQCBKU1N0cmluZyogSklUX09QRVJBVElPTiBvcGVyYXRpb25DYWxsU3RyCiBKU1N0cmlu
ZyogSklUX09QRVJBVElPTiBvcGVyYXRpb25DYWxsU3RyaW5nQ29uc3RydWN0b3IoRXhlY1N0YXRl
KiBleGVjLCBFbmNvZGVkSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgp
OwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKIAogICAgIHJldHVybiBzdHJpbmdD
b25zdHJ1Y3RvcihleGVjLCBKU1ZhbHVlOjpkZWNvZGUodmFsdWUpKTsKIH0KQEAgLTI0MDEsNyAr
MjQwMSw3IEBAIEpTU3RyaW5nKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNhbGxTdHIKIEpTU3Ry
aW5nKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk1ha2VSb3BlMihFeGVjU3RhdGUqIGV4ZWMsIEpT
U3RyaW5nKiBsZWZ0LCBKU1N0cmluZyogcmlnaHQpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAKICAgICByZXR1cm4ganNTdHJp
bmcoZXhlYywgbGVmdCwgcmlnaHQpOwogfQpAQCAtMjQwOSw3ICsyNDA5LDcgQEAgSlNTdHJpbmcq
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTWFrZVJvcAogSlNTdHJpbmcqIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uTWFrZVJvcGUzKEV4ZWNTdGF0ZSogZXhlYywgSlNTdHJpbmcqIGEsIEpTU3RyaW5n
KiBiLCBKU1N0cmluZyogYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVU
cmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKIAogICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBhLCBi
LCBjKTsKIH0KQEAgLTI0MTcsNyArMjQxNyw3IEBAIEpTU3RyaW5nKiBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbk1ha2VSb3AKIEpTU3RyaW5nKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblN0ckNhdDIo
RXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBhLCBFbmNvZGVkSlNWYWx1ZSBiKQogewog
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMp
OwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEFTU0VS
VCghSlNWYWx1ZTo6ZGVjb2RlKGEpLmlzU3ltYm9sKCkpOwpAQCAtMjQzMyw3ICsyNDMzLDcgQEAg
SlNTdHJpbmcqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uU3RyQ2F0MgogSlNTdHJpbmcqIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uU3RyQ2F0MyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVl
IGEsIEVuY29kZWRKU1ZhbHVlIGIsIEVuY29kZWRKU1ZhbHVlIGMpCiB7CiAgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7
CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgQVNTRVJUKCFKU1ZhbHVlOjpk
ZWNvZGUoYSkuaXNTeW1ib2woKSk7CkBAIC0yNDUzLDcgKzI0NTMsNyBAQCBjaGFyKiBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbkZpbmRTd2l0Y2hJCiAgICAgRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkVmFsdWUsIHNpemVfdCB0YWJsZUluZGV4KQogewogICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMp
OworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIENvZGVC
bG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7CiAgICAgU2ltcGxlSnVtcFRhYmxl
JiB0YWJsZSA9IGNvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwogICAgIEpT
VmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKQEAgLTI0NjgsNyAr
MjQ2OCw3IEBAIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRmluZFN3aXRjaEkKIGNoYXIq
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uU3dpdGNoU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgc2l6
ZV90IHRhYmxlSW5kZXgsIEpTU3RyaW5nKiBzdHJpbmcpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBTdHJpbmdJbXBsKiBzdHJJbXBs
ID0gc3RyaW5nLT52YWx1ZShleGVjKS5pbXBsKCk7CkBAIC0yNDgxLDcgKzI0ODEsNyBAQCBjaGFy
KiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblN3aXRjaFN0cmluCiBpbnQzMl90IEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uU3dpdGNoU3RyaW5nQW5kR2V0QnJhbmNoT2Zmc2V0KEV4ZWNTdGF0ZSogZXhl
Yywgc2l6ZV90IHRhYmxlSW5kZXgsIEpTU3RyaW5nKiBzdHJpbmcpCiB7CiAgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7
CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBTdHJpbmdJbXBsKiBz
dHJJbXBsID0gc3RyaW5nLT52YWx1ZShleGVjKS5pbXBsKCk7CkBAIC0yNTE0LDcgKzI1MTQsNyBA
QCB1aW50cHRyX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlCiB1aW50cHRyX3QgSklU
X09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlU3RyaW5nTGVzcyhFeGVjU3RhdGUqIGV4ZWMsIEpT
U3RyaW5nKiBhLCBKU1N0cmluZyogYikKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKIAogICAgIHJldHVybiBjb2RlUG9pbnRDb21w
YXJlTGVzc1RoYW4oYXNTdHJpbmcoYSktPnZhbHVlKGV4ZWMpLCBhc1N0cmluZyhiKS0+dmFsdWUo
ZXhlYykpOwogfQpAQCAtMjUyMiw3ICsyNTIyLDcgQEAgdWludHB0cl90IEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uQ29tcGFyZQogdWludHB0cl90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFy
ZVN0cmluZ0xlc3NFcShFeGVjU3RhdGUqIGV4ZWMsIEpTU3RyaW5nKiBhLCBKU1N0cmluZyogYikK
IHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBl
eGVjKTsKIAogICAgIHJldHVybiAhY29kZVBvaW50Q29tcGFyZUxlc3NUaGFuKGFzU3RyaW5nKGIp
LT52YWx1ZShleGVjKSwgYXNTdHJpbmcoYSktPnZhbHVlKGV4ZWMpKTsKIH0KQEAgLTI1MzAsNyAr
MjUzMCw3IEBAIHVpbnRwdHJfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmUKIHVpbnRw
dHJfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVTdHJpbmdHcmVhdGVyKEV4ZWNTdGF0
ZSogZXhlYywgSlNTdHJpbmcqIGEsIEpTU3RyaW5nKiBiKQogewogICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogCiAgICAgcmV0dXJuIGNv
ZGVQb2ludENvbXBhcmVMZXNzVGhhbihhc1N0cmluZyhiKS0+dmFsdWUoZXhlYyksIGFzU3RyaW5n
KGEpLT52YWx1ZShleGVjKSk7CiB9CkBAIC0yNTM4LDcgKzI1MzgsNyBAQCB1aW50cHRyX3QgSklU
X09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlCiB1aW50cHRyX3QgSklUX09QRVJBVElPTiBvcGVy
YXRpb25Db21wYXJlU3RyaW5nR3JlYXRlckVxKEV4ZWNTdGF0ZSogZXhlYywgSlNTdHJpbmcqIGEs
IEpTU3RyaW5nKiBiKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIodm0sIGV4ZWMpOwogCiAgICAgcmV0dXJuICFjb2RlUG9pbnRDb21wYXJlTGVzc1Ro
YW4oYXNTdHJpbmcoYSktPnZhbHVlKGV4ZWMpLCBhc1N0cmluZyhiKS0+dmFsdWUoZXhlYykpOwog
fQpAQCAtMjU0Niw3ICsyNTQ2LDcgQEAgdWludHB0cl90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
Q29tcGFyZQogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5vdGlmeVdyaXRlKEV4ZWNTdGF0
ZSogZXhlYywgV2F0Y2hwb2ludFNldCogc2V0KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogCiAgICAgc2V0LT50b3VjaCh2bSwg
IkV4ZWN1dGVkIE5vdGlmeVdyaXRlIik7CiB9CkBAIC0yNTU0LDcgKzI1NTQsNyBAQCB2b2lkIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uTm90aWZ5V3JpdGUoCiB2b2lkIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uVGhyb3dTdGFja092ZXJmbG93Rm9yVmFyYXJncyhFeGVjU3RhdGUqIGV4ZWMpCiB7CiAg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7
CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIHRocm93U3Rh
Y2tPdmVyZmxvd0Vycm9yKGV4ZWMsIHNjb3BlKTsKIH0KQEAgLTI1NjIsNyArMjU2Miw3IEBAIHZv
aWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25UaHJvd1N0YWNrT3YKIGludDMyX3QgSklUX09QRVJB
VElPTiBvcGVyYXRpb25TaXplT2ZWYXJhcmdzKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZEFyZ3VtZW50cywgdWludDMyX3QgZmlyc3RWYXJBcmdPZmZzZXQpCiB7CiAgICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2
bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAg
ICAgSlNWYWx1ZSBhcmd1bWVudHMgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEFyZ3VtZW50cyk7
CiAgICAgCiAgICAgcmV0dXJuIHNpemVPZlZhcmFyZ3MoZXhlYywgYXJndW1lbnRzLCBmaXJzdFZh
ckFyZ09mZnNldCk7CkBAIC0yNTcxLDcgKzI1NzEsNyBAQCBpbnQzMl90IEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uU2l6ZU9mVmFyCiBpbnQzMl90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSGFzT3du
UHJvcGVydHkoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iamVjdCwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZEtleSkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVU
cmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAKICAgICBKU1ZhbHVlIGtleSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkS2V5
KTsKQEAgLTI1OTEsMTQgKzI1OTEsMTQgQEAgaW50MzJfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
bkhhc093blBybwogaW50MzJfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk51bWJlcklzSW50ZWdl
cihFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIHZhbHVlKQogewogICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMp
OworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIHJldHVy
biBOdW1iZXJDb25zdHJ1Y3Rvcjo6aXNJbnRlZ2VySW1wbChKU1ZhbHVlOjpkZWNvZGUodmFsdWUp
KTsKIH0KIAogaW50MzJfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFycmF5SW5kZXhPZlN0cmlu
ZyhFeGVjU3RhdGUqIGV4ZWMsIEJ1dHRlcmZseSogYnV0dGVyZmx5LCBKU1N0cmluZyogc2VhcmNo
RWxlbWVudCwgaW50MzJfdCBpbmRleCkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CiAKICAgICBpbnQzMl90IGxlbmd0aCA9IGJ1dHRlcmZseS0+cHVibGlj
TGVuZ3RoKCk7CkBAIC0yNjIyLDcgKzI2MjIsNyBAQCBpbnQzMl90IEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uQXJyYXlJbmRlCiBpbnQzMl90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXJyYXlJbmRl
eE9mVmFsdWVJbnQzMk9yQ29udGlndW91cyhFeGVjU3RhdGUqIGV4ZWMsIEJ1dHRlcmZseSogYnV0
dGVyZmx5LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIGludDMyX3QgaW5kZXgpCiB7CiAg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7
CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgSlNWYWx1
ZSBzZWFyY2hFbGVtZW50ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CkBAIC0yNjQ0
LDcgKzI2NDQsNyBAQCBpbnQzMl90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXJyYXlJbmRlCiBp
bnQzMl90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXJyYXlJbmRleE9mVmFsdWVEb3VibGUoRXhl
Y1N0YXRlKiBleGVjLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFZhbHVlLCBpbnQzMl90IGluZGV4KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxG
cmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogCiAgICAgSlNWYWx1ZSBzZWFyY2hFbGVtZW50
ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAKQEAgLTI2NjUsNyArMjY2NSw3IEBA
IGludDMyX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25BcnJheUluZGUKIHZvaWQgSklUX09QRVJB
VElPTiBvcGVyYXRpb25Mb2FkVmFyYXJncyhFeGVjU3RhdGUqIGV4ZWMsIGludDMyX3QgZmlyc3RF
bGVtZW50RGVzdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEFyZ3VtZW50cywgdWludDMyX3Qgb2Zm
c2V0LCB1aW50MzJfdCBsZW5ndGgsIHVpbnQzMl90IG1hbmRhdG9yeU1pbmltdW0pCiB7CiAgICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2
bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAg
ICAgSlNWYWx1ZSBhcmd1bWVudHMgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEFyZ3VtZW50cyk7
CiAgICAgCiAgICAgbG9hZFZhcmFyZ3MoZXhlYywgVmlydHVhbFJlZ2lzdGVyKGZpcnN0RWxlbWVu
dERlc3QpLCBhcmd1bWVudHMsIG9mZnNldCwgbGVuZ3RoKTsKQEAgLTI2ODgsMTQgKzI2ODgsMTQg
QEAgZG91YmxlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUmFuZG9tKEpTRwogCiBKU0NlbGwqIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uU3RyaW5nRnJvbUNoYXJDb2RlKEV4ZWNTdGF0ZSogZXhlYywg
aW50MzJfdCBvcDEpCiB7Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsK
ICAgICByZXR1cm4gSlNDOjpzdHJpbmdGcm9tQ2hhckNvZGUoZXhlYywgb3AxKTsKIH0KIAogRW5j
b2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25TdHJpbmdGcm9tQ2hhckNvZGVVbnR5
cGVkKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAg
IFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgSlNWYWx1ZSBjaGFyVmFs
dWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBpbnQzMl90IGNoSW50ID0g
Y2hhclZhbHVlLnRvVUludDMyKGV4ZWMpOwpAQCAtMjcxOCw3ICsyNzE4LDcgQEAgaW50NjRfdCBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbnZlcnREbwogY2hhciogSklUX09QRVJBVElPTiBvcGVy
YXRpb25OZXdSYXdPYmplY3QoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
aW50MzJfdCBsZW5ndGgsIEJ1dHRlcmZseSogYnV0dGVyZmx5KQogewogICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwor
ICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogCiAgICAgaWYgKCFi
dXR0ZXJmbHkKICAgICAgICAgJiYgKHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSB8fCBo
YXNJbmRleGVkUHJvcGVydGllcyhzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSkpIHsKQEAgLTI3
NDAsNyArMjc0MCw3IEBAIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3UmF3T2JqZWMK
IEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdPYmplY3RXaXRoQnV0dGVyZmx5KEV4
ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEJ1dHRlcmZseSogYnV0dGVyZmx5
KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0s
IGV4ZWMpOwogICAgIAogICAgIGlmICghYnV0dGVyZmx5KSB7CiAgICAgICAgIGJ1dHRlcmZseSA9
IEJ1dHRlcmZseTo6Y3JlYXRlKApAQCAtMjc1NSw3ICsyNzU1LDcgQEAgSlNDZWxsKiBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbk5ld09iamVjdAogSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
bk5ld09iamVjdFdpdGhCdXR0ZXJmbHlXaXRoSW5kZXhpbmdIZWFkZXJBbmRWZWN0b3JMZW5ndGgo
RXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgdW5zaWduZWQgbGVuZ3RoLCBC
dXR0ZXJmbHkqIGJ1dHRlcmZseSkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKIAogICAgIEluZGV4aW5nSGVhZGVyIGhlYWRlcjsK
ICAgICBoZWFkZXIuc2V0VmVjdG9yTGVuZ3RoKGxlbmd0aCk7CkBAIC0yNzc3LDcgKzI3NzcsNyBA
QCBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3T2JqZWN0CiBKU0NlbGwqIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uTmV3QXJyYXlXaXRoU3ByZWFkU2xvdyhFeGVjU3RhdGUqIGV4ZWMs
IHZvaWQqIGJ1ZmZlciwgdWludDMyX3QgbnVtSXRlbXMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgRW5jb2RlZEpTVmFsdWUqIHZhbHVlcyA9
IHN0YXRpY19jYXN0PEVuY29kZWRKU1ZhbHVlKj4oYnVmZmVyKTsKQEAgLTI4MzUsNyArMjgzNSw3
IEBAIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdBcnJheVcKIEpTQ2VsbCogb3Bl
cmF0aW9uQ3JlYXRlRml4ZWRBcnJheShFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGxlbmd0aCkK
IHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBl
eGVjKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBp
ZiAoSlNGaXhlZEFycmF5KiByZXN1bHQgPSBKU0ZpeGVkQXJyYXk6OnRyeUNyZWF0ZSh2bSwgdm0u
Zml4ZWRBcnJheVN0cnVjdHVyZS5nZXQoKSwgbGVuZ3RoKSkKQEAgLTI4NDgsNyArMjg0OCw3IEBA
IEpTQ2VsbCogb3BlcmF0aW9uQ3JlYXRlRml4ZWRBcnJheShFeGVjU3QKIEpTQ2VsbCogSklUX09Q
RVJBVElPTiBvcGVyYXRpb25TcHJlYWRHZW5lcmljKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBp
dGVyYWJsZSkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKHZtLCBleGVjKTsKIAogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwogCkBAIC0yODgzLDcgKzI4ODMsNyBAQCBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uU3ByZWFkR2VuCiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uU3ByZWFkRmFz
dEFycmF5KEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBjZWxsKQogewogICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwor
ICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogCiAgICAgQVNTRVJU
KGlzSlNBcnJheShjZWxsKSk7CiAgICAgSlNBcnJheSogYXJyYXkgPSBqc0Nhc3Q8SlNBcnJheSo+
KGNlbGwpOwpAQCAtMjg5NSw3ICsyODk1LDcgQEAgSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvblNwcmVhZEZhcwogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblByb2Nlc3NUeXBlUHJv
ZmlsZXJMb2dERkcoRXhlY1N0YXRlKiBleGVjKSAKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgp
OwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKIAogICAgIHZtLnR5cGVQcm9maWxl
ckxvZygpLT5wcm9jZXNzTG9nRW50cmllcyh2bSwgIkxvZyBGdWxsLCBjYWxsZWQgZnJvbSBpbnNp
ZGUgREZHLiJfcyk7CiB9CkBAIC0yOTAzLDI4ICsyOTAzLDI4IEBAIHZvaWQgSklUX09QRVJBVElP
TiBvcGVyYXRpb25Qcm9jZXNzVHlwZVAKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uUmVzb2x2ZVNjb3BlRm9ySG9pc3RpbmdGdW5jRGVjbEluRXZhbChFeGVjU3RhdGUqIGV4
ZWMsIEpTU2NvcGUqIHNjb3BlLCBVbmlxdWVkU3RyaW5nSW1wbCogaW1wbCkKIHsKICAgICBWTSYg
dm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBl
eGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICAg
ICAgCi0gICAgSlNWYWx1ZSByZXNvbHZlZFNjb3BlID0gSlNTY29wZTo6cmVzb2x2ZVNjb3BlRm9y
SG9pc3RpbmdGdW5jRGVjbEluRXZhbChleGVjLCBzY29wZSwgSWRlbnRpZmllcjo6ZnJvbVVpZChl
eGVjLCBpbXBsKSk7CisgICAgSlNWYWx1ZSByZXNvbHZlZFNjb3BlID0gSlNTY29wZTo6cmVzb2x2
ZVNjb3BlRm9ySG9pc3RpbmdGdW5jRGVjbEluRXZhbChleGVjLCBzY29wZSwgSWRlbnRpZmllcjo6
ZnJvbVVpZCh2bSwgaW1wbCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzb2x2ZWRT
Y29wZSk7CiB9CiAgICAgCiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUmVzb2x2ZVNj
b3BlKEV4ZWNTdGF0ZSogZXhlYywgSlNTY29wZSogc2NvcGUsIFVuaXF1ZWRTdHJpbmdJbXBsKiBp
bXBsKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
dm0sIGV4ZWMpOwogCi0gICAgSlNPYmplY3QqIHJlc29sdmVkU2NvcGUgPSBKU1Njb3BlOjpyZXNv
bHZlKGV4ZWMsIHNjb3BlLCBJZGVudGlmaWVyOjpmcm9tVWlkKGV4ZWMsIGltcGwpKTsKKyAgICBK
U09iamVjdCogcmVzb2x2ZWRTY29wZSA9IEpTU2NvcGU6OnJlc29sdmUoZXhlYywgc2NvcGUsIElk
ZW50aWZpZXI6OmZyb21VaWQodm0sIGltcGwpKTsKICAgICByZXR1cm4gcmVzb2x2ZWRTY29wZTsK
IH0KIAogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXREeW5hbWljVmFy
KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHNjb3BlLCBVbmlxdWVkU3RyaW5nSW1wbCogaW1w
bCwgdW5zaWduZWQgZ2V0UHV0SW5mb0JpdHMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsK
LSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZl
Q2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAgICBJZGVudGlmaWVyIGlkZW50ID0gSWRlbnRp
Zmllcjo6ZnJvbVVpZChleGVjLCBpbXBsKTsKKyAgICBJZGVudGlmaWVyIGlkZW50ID0gSWRlbnRp
Zmllcjo6ZnJvbVVpZCh2bSwgaW1wbCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2Nv
cGUsIEpTVmFsdWU6OmVuY29kZShzY29wZS0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIGlkZW50LCBb
Jl0gKGJvb2wgZm91bmQsIFByb3BlcnR5U2xvdCYgc2xvdCkgLT4gSlNWYWx1ZSB7CiAgICAgICAg
IGlmICghZm91bmQpIHsKICAgICAgICAgICAgIEdldFB1dEluZm8gZ2V0UHV0SW5mbyhnZXRQdXRJ
bmZvQml0cyk7CkBAIC0yOTUxLDcgKzI5NTEsNyBAQCBBTFdBWVNfSU5MSU5FIHN0YXRpYyB2b2lk
IHB1dER5bmFtaWNWYXIoCiB7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAKLSAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IElkZW50aWZpZXI6OmZy
b21VaWQoZXhlYywgaW1wbCk7CisgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBJZGVudGlm
aWVyOjpmcm9tVWlkKHZtLCBpbXBsKTsKICAgICBHZXRQdXRJbmZvIGdldFB1dEluZm8oZ2V0UHV0
SW5mb0JpdHMpOwogICAgIGJvb2wgaGFzUHJvcGVydHkgPSBzY29wZS0+aGFzUHJvcGVydHkoZXhl
YywgaWRlbnQpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgdm9pZCgpKTsK
QEAgLTI5ODAsNyArMjk4MCw3IEBAIEFMV0FZU19JTkxJTkUgc3RhdGljIHZvaWQgcHV0RHluYW1p
Y1ZhcigKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXREeW5hbWljVmFyU3RyaWN0KEV4
ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHNjb3BlLCBFbmNvZGVkSlNWYWx1ZSB2YWx1ZSwgVW5p
cXVlZFN0cmluZ0ltcGwqIGltcGwsIHVuc2lnbmVkIGdldFB1dEluZm9CaXRzKQogewogICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0s
IGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAg
IGNvbnN0ZXhwciBib29sIGlzU3RyaWN0TW9kZSA9IHRydWU7CiAgICAgcmV0dXJuIHB1dER5bmFt
aWNWYXIoZXhlYywgdm0sIHNjb3BlLCB2YWx1ZSwgaW1wbCwgZ2V0UHV0SW5mb0JpdHMsIGlzU3Ry
aWN0TW9kZSk7CiB9CkBAIC0yOTg4LDcgKzI5ODgsNyBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uUHV0RHluYW1pY1ZhCiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0RHluYW1p
Y1Zhck5vblN0cmljdChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBzY29wZSwgRW5jb2RlZEpT
VmFsdWUgdmFsdWUsIFVuaXF1ZWRTdHJpbmdJbXBsKiBpbXBsLCB1bnNpZ25lZCBnZXRQdXRJbmZv
Qml0cykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRy
YWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KHZtLCBleGVjKTsKICAgICBjb25zdGV4cHIgYm9vbCBpc1N0cmljdE1vZGUgPSBmYWxzZTsKICAg
ICByZXR1cm4gcHV0RHluYW1pY1ZhcihleGVjLCB2bSwgc2NvcGUsIHZhbHVlLCBpbXBsLCBnZXRQ
dXRJbmZvQml0cywgaXNTdHJpY3RNb2RlKTsKIH0KQEAgLTI5OTYsNyArMjk5Niw3IEBAIHZvaWQg
SklUX09QRVJBVElPTiBvcGVyYXRpb25QdXREeW5hbWljVmEKIGludDMyX3QgSklUX09QRVJBVElP
TiBvcGVyYXRpb25NYXBIYXNoKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgaW5wdXQp
CiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIg
dHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwg
ZXhlYyk7CiAKICAgICByZXR1cm4ganNNYXBIYXNoKGV4ZWMsIHZtLCBKU1ZhbHVlOjpkZWNvZGUo
aW5wdXQpKTsKIH0KQEAgLTMwMDQsNyArMzAwNCw3IEBAIGludDMyX3QgSklUX09QRVJBVElPTiBv
cGVyYXRpb25NYXBIYXNoKEUKIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25KU01hcEZp
bmRCdWNrZXQoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIG1hcCwgRW5jb2RlZEpTVmFsdWUga2V5
LCBpbnQzMl90IGhhc2gpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgSlNNYXA6OkJ1Y2tldFR5cGUqKiBidWNrZXQgPSBq
c0Nhc3Q8SlNNYXAqPihtYXApLT5maW5kQnVja2V0KGV4ZWMsIEpTVmFsdWU6OmRlY29kZShrZXkp
LCBoYXNoKTsKICAgICBpZiAoIWJ1Y2tldCkKICAgICAgICAgcmV0dXJuIHZtLnNlbnRpbmVsTWFw
QnVja2V0KCk7CkBAIC0zMDE0LDcgKzMwMTQsNyBAQCBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uSlNNYXBGaW5kCiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSlNTZXRGaW5k
QnVja2V0KEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBtYXAsIEVuY29kZWRKU1ZhbHVlIGtleSwg
aW50MzJfdCBoYXNoKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIEpTU2V0OjpCdWNrZXRUeXBlKiogYnVja2V0ID0ganND
YXN0PEpTU2V0Kj4obWFwKS0+ZmluZEJ1Y2tldChleGVjLCBKU1ZhbHVlOjpkZWNvZGUoa2V5KSwg
aGFzaCk7CiAgICAgaWYgKCFidWNrZXQpCiAgICAgICAgIHJldHVybiB2bS5zZW50aW5lbFNldEJ1
Y2tldCgpOwpAQCAtMzAyNCw3ICszMDI0LDcgQEAgSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbkpTU2V0RmluZAogSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblNldEFkZChFeGVj
U3RhdGUqIGV4ZWMsIEpTQ2VsbCogc2V0LCBFbmNvZGVkSlNWYWx1ZSBrZXksIGludDMyX3QgaGFz
aCkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZt
LCBleGVjKTsKICAgICBhdXRvKiBidWNrZXQgPSBqc0Nhc3Q8SlNTZXQqPihzZXQpLT5hZGROb3Jt
YWxpemVkKGV4ZWMsIEpTVmFsdWU6OmRlY29kZShrZXkpLCBKU1ZhbHVlKCksIGhhc2gpOwogICAg
IGlmICghYnVja2V0KQogICAgICAgICByZXR1cm4gdm0uc2VudGluZWxTZXRCdWNrZXQoKTsKQEAg
LTMwMzQsNyArMzAzNCw3IEBAIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25TZXRBZGQo
RXgKIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25NYXBTZXQoRXhlY1N0YXRlKiBleGVj
LCBKU0NlbGwqIG1hcCwgRW5jb2RlZEpTVmFsdWUga2V5LCBFbmNvZGVkSlNWYWx1ZSB2YWx1ZSwg
aW50MzJfdCBoYXNoKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIGF1dG8qIGJ1Y2tldCA9IGpzQ2FzdDxKU01hcCo+KG1h
cCktPmFkZE5vcm1hbGl6ZWQoZXhlYywgSlNWYWx1ZTo6ZGVjb2RlKGtleSksIEpTVmFsdWU6OmRl
Y29kZSh2YWx1ZSksIGhhc2gpOwogICAgIGlmICghYnVja2V0KQogICAgICAgICByZXR1cm4gdm0u
c2VudGluZWxNYXBCdWNrZXQoKTsKQEAgLTMwNDQsMjggKzMwNDQsMjggQEAgSlNDZWxsKiBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbk1hcFNldChFeAogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
bldlYWtTZXRBZGQoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIHNldCwgSlNDZWxsKiBrZXksIGlu
dDMyX3QgaGFzaCkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxG
cmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIg
dHJhY2VyKHZtLCBleGVjKTsKICAgICBqc0Nhc3Q8SlNXZWFrU2V0Kj4oc2V0KS0+YWRkKHZtLCBh
c09iamVjdChrZXkpLCBKU1ZhbHVlKCksIGhhc2gpOwogfQogCiB2b2lkIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uV2Vha01hcFNldChFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogbWFwLCBKU0NlbGwq
IGtleSwgRW5jb2RlZEpTVmFsdWUgdmFsdWUsIGludDMyX3QgaGFzaCkKIHsKICAgICBWTSYgdm0g
PSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVj
KTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICBqc0Nh
c3Q8SlNXZWFrTWFwKj4obWFwKS0+YWRkKHZtLCBhc09iamVjdChrZXkpLCBKU1ZhbHVlOjpkZWNv
ZGUodmFsdWUpLCBoYXNoKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVy
YXRpb25HZXRQcm90b3R5cGVPZk9iamVjdChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlz
T2JqZWN0KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIodm0sIGV4ZWMpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhpc09iamVjdC0+Z2V0
UHJvdG90eXBlKHZtLCBleGVjKSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uR2V0UHJvdG90eXBlT2YoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkVmFsdWUpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcih2bSwgZXhlYyk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogCiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZh
bHVlKS50b1RoaXMoZXhlYywgU3RyaWN0TW9kZSk7CkBAIC0zMDg3LDcgKzMwODcsNyBAQCBFbmNv
ZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdlCiB2b2lkIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uVGhyb3dERkcoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSB2YWx1ZVRv
VGhyb3cpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVU
cmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cih2bSwgZXhlYyk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwog
ICAgIHNjb3BlLnRocm93RXhjZXB0aW9uKGV4ZWMsIEpTVmFsdWU6OmRlY29kZSh2YWx1ZVRvVGhy
b3cpKTsKIH0KQEAgLTMwOTUsNyArMzA5NSw3IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRp
b25UaHJvd0RGRyhFeGUKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25UaHJvd1N0YXRpY0Vy
cm9yKEV4ZWNTdGF0ZSogZXhlYywgSlNTdHJpbmcqIG1lc3NhZ2UsIHVpbnQzMl90IGVycm9yVHlw
ZSkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZt
LCBleGVjKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAg
U3RyaW5nIGVycm9yTWVzc2FnZSA9IG1lc3NhZ2UtPnZhbHVlKGV4ZWMpOwogICAgIHNjb3BlLnRo
cm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZUVycm9yKGV4ZWMsIHN0YXRpY19jYXN0PEVycm9yVHlw
ZT4oZXJyb3JUeXBlKSwgZXJyb3JNZXNzYWdlKSk7CkBAIC0zMTA1LDcgKzMxMDUsNyBAQCBleHRl
cm4gIkMiIHZvaWQgSklUX09QRVJBVElPTiB0cmlnZ2VyUmVvCiB7CiAgICAgLy8gSXQncyBzb3J0
IG9mIHByZWZlcmFibGUgdGhhdCB3ZSBkb24ndCBHQyB3aGlsZSBpbiBoZXJlLiBBbnl3YXlzLCBk
b2luZyBzbyB3b3VsZG4ndAogICAgIC8vIHJlYWxseSBiZSBwcm9maXRhYmxlLgotICAgIERlZmVy
R0NGb3JBV2hpbGUgZGVmZXJHQyhjb2RlQmxvY2stPnZtKCktPmhlYXApOworICAgIERlZmVyR0NG
b3JBV2hpbGUgZGVmZXJHQyhjb2RlQmxvY2stPnZtKCkuaGVhcCk7CiAgICAgCiAgICAgc2FuaXRp
emVTdGFja0ZvclZNKGNvZGVCbG9jay0+dm0oKSk7CiAKQEAgLTMxNzgsNyArMzE3OCw3IEBAIHN0
YXRpYyBib29sIHNob3VsZFRyaWdnZXJGVExDb21waWxlKENvZGUKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAotc3RhdGljIHZvaWQgdHJpZ2dlckZUTFJlcGxhY2VtZW50Q29tcGlsZShWTSogdm0sIENv
ZGVCbG9jayogY29kZUJsb2NrLCBKSVRDb2RlKiBqaXRDb2RlKQorc3RhdGljIHZvaWQgdHJpZ2dl
ckZUTFJlcGxhY2VtZW50Q29tcGlsZShWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRD
b2RlKiBqaXRDb2RlKQogewogICAgIGlmIChjb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gR2xvYmFs
Q29kZSkgewogICAgICAgICAvLyBHbG9iYWwgY29kZSBydW5zIG9uY2UsIHNvIHdlIGRvbid0IHdh
bnQgdG8gZG8gYW55dGhpbmcuIFdlIGRvbid0IHdhbnQgdG8gZGVmZXIgaW5kZWZpbml0ZWx5LApA
QCAtMzE5MSw3ICszMTkxLDcgQEAgc3RhdGljIHZvaWQgdHJpZ2dlckZUTFJlcGxhY2VtZW50Q29t
cGlsZQogICAgIFdvcmtsaXN0OjpTdGF0ZSB3b3JrbGlzdFN0YXRlOwogICAgIGlmIChXb3JrbGlz
dCogd29ya2xpc3QgPSBleGlzdGluZ0dsb2JhbEZUTFdvcmtsaXN0T3JOdWxsKCkpIHsKICAgICAg
ICAgd29ya2xpc3RTdGF0ZSA9IHdvcmtsaXN0LT5jb21wbGV0ZUFsbFJlYWR5UGxhbnNGb3JWTSgK
LSAgICAgICAgICAgICp2bSwgQ29tcGlsYXRpb25LZXkoY29kZUJsb2NrLT5iYXNlbGluZVZlcnNp
b24oKSwgRlRMTW9kZSkpOworICAgICAgICAgICAgdm0sIENvbXBpbGF0aW9uS2V5KGNvZGVCbG9j
ay0+YmFzZWxpbmVWZXJzaW9uKCksIEZUTE1vZGUpKTsKICAgICB9IGVsc2UKICAgICAgICAgd29y
a2xpc3RTdGF0ZSA9IFdvcmtsaXN0OjpOb3RLbm93bjsKICAgICAKQEAgLTMyMjIsNyArMzIyMiw3
IEBAIHN0YXRpYyB2b2lkIHRyaWdnZXJGVExSZXBsYWNlbWVudENvbXBpbGUKICAgICBDT0RFQkxP
Q0tfTE9HX0VWRU5UKGNvZGVCbG9jaywgInRyaWdnZXJGVExSZXBsYWNlbWVudCIsICgpKTsKICAg
ICAvLyBXZSBuZWVkIHRvIGNvbXBpbGUgdGhlIGNvZGUuCiAgICAgY29tcGlsZSgKLSAgICAgICAg
KnZtLCBjb2RlQmxvY2stPm5ld1JlcGxhY2VtZW50KCksIGNvZGVCbG9jaywgRlRMTW9kZSwgVUlO
VF9NQVgsCisgICAgICAgIHZtLCBjb2RlQmxvY2stPm5ld1JlcGxhY2VtZW50KCksIGNvZGVCbG9j
aywgRlRMTW9kZSwgVUlOVF9NQVgsCiAgICAgICAgIE9wZXJhbmRzPE9wdGlvbmFsPEpTVmFsdWU+
PigpLCBUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6Y3JlYXRlKCkpOwogCiAgICAg
Ly8gSWYgd2UgcmVhY2hlZCBoZXJlLCB0aGUgY291bnRlciBoYXMgbm90IGJlIHJlc2V0LiBEbyB0
aGF0IG5vdy4KQEAgLTMyMzIsOSArMzIzMiw5IEBAIHN0YXRpYyB2b2lkIHRyaWdnZXJGVExSZXBs
YWNlbWVudENvbXBpbGUKIAogdm9pZCBKSVRfT1BFUkFUSU9OIHRyaWdnZXJUaWVyVXBOb3coRXhl
Y1N0YXRlKiBleGVjKQogewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7
Ci0gICAgRGVmZXJHQ0ZvckFXaGlsZSBkZWZlckdDKHZtLT5oZWFwKTsKKyAgICBEZWZlckdDRm9y
QVdoaWxlIGRlZmVyR0Modm0uaGVhcCk7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVj
LT5jb2RlQmxvY2soKTsKICAgICAKICAgICBzYW5pdGl6ZVN0YWNrRm9yVk0odm0pOwpAQCAtMzI3
NywxNCArMzI3NywxNCBAQCB2b2lkIEpJVF9PUEVSQVRJT04gdHJpZ2dlclRpZXJVcE5vdyhFeGVj
CiAKIHN0YXRpYyBjaGFyKiB0aWVyVXBDb21tb24oRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBv
cmlnaW5CeXRlY29kZUluZGV4LCBib29sIGNhbk9TUkVudGVySGVyZSkKIHsKLSAgICBWTSogdm0g
PSAmZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIENvZGVCbG9jayog
Y29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7CiAKICAgICAvLyBSZXNvbHZlIGFueSBwZW5k
aW5nIHBsYW4gZm9yIE9TUiBFbnRlciBvbiB0aGlzIGZ1bmN0aW9uLgogICAgIFdvcmtsaXN0OjpT
dGF0ZSB3b3JrbGlzdFN0YXRlOwogICAgIGlmIChXb3JrbGlzdCogd29ya2xpc3QgPSBleGlzdGlu
Z0dsb2JhbEZUTFdvcmtsaXN0T3JOdWxsKCkpIHsKICAgICAgICAgd29ya2xpc3RTdGF0ZSA9IHdv
cmtsaXN0LT5jb21wbGV0ZUFsbFJlYWR5UGxhbnNGb3JWTSgKLSAgICAgICAgICAgICp2bSwgQ29t
cGlsYXRpb25LZXkoY29kZUJsb2NrLT5iYXNlbGluZVZlcnNpb24oKSwgRlRMRm9yT1NSRW50cnlN
b2RlKSk7CisgICAgICAgICAgICB2bSwgQ29tcGlsYXRpb25LZXkoY29kZUJsb2NrLT5iYXNlbGlu
ZVZlcnNpb24oKSwgRlRMRm9yT1NSRW50cnlNb2RlKSk7CiAgICAgfSBlbHNlCiAgICAgICAgIHdv
cmtsaXN0U3RhdGUgPSBXb3JrbGlzdDo6Tm90S25vd247CiAKQEAgLTM0NjQsNyArMzQ2NCw3IEBA
IHN0YXRpYyBjaGFyKiB0aWVyVXBDb21tb24oRXhlY1N0YXRlKiBleGUKIAogICAgIENPREVCTE9D
S19MT0dfRVZFTlQoY29kZUJsb2NrLCAidHJpZ2dlckZUTE9TUiIsICgpKTsKICAgICBDb21waWxh
dGlvblJlc3VsdCBmb3JFbnRyeVJlc3VsdCA9IGNvbXBpbGUoCi0gICAgICAgICp2bSwgcmVwbGFj
ZW1lbnRDb2RlQmxvY2ssIGNvZGVCbG9jaywgRlRMRm9yT1NSRW50cnlNb2RlLCBvcmlnaW5CeXRl
Y29kZUluZGV4LAorICAgICAgICB2bSwgcmVwbGFjZW1lbnRDb2RlQmxvY2ssIGNvZGVCbG9jaywg
RlRMRm9yT1NSRW50cnlNb2RlLCBvcmlnaW5CeXRlY29kZUluZGV4LAogICAgICAgICBtdXN0SGFu
ZGxlVmFsdWVzLCBUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjpj
cmVhdGUodHJpZ2dlckFkZHJlc3MpKTsKIAogICAgIGlmIChqaXRDb2RlLT5uZXZlckV4ZWN1dGVk
RW50cnkpCkBAIC0zNDkzLDkgKzM0OTMsOSBAQCBzdGF0aWMgY2hhciogdGllclVwQ29tbW9uKEV4
ZWNTdGF0ZSogZXhlCiAKIHZvaWQgSklUX09QRVJBVElPTiB0cmlnZ2VyVGllclVwTm93SW5Mb29w
KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKIHsKLSAgICBWTSogdm0g
PSAmZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxG
cmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwotICAgIERlZmVyR0NGb3JBV2hpbGUgZGVmZXJH
Qyh2bS0+aGVhcCk7CisgICAgRGVmZXJHQ0ZvckFXaGlsZSBkZWZlckdDKHZtLmhlYXApOwogICAg
IENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7CiAKICAgICBzYW5pdGl6
ZVN0YWNrRm9yVk0odm0pOwpAQCAtMzUyNyw5ICszNTI3LDkgQEAgdm9pZCBKSVRfT1BFUkFUSU9O
IHRyaWdnZXJUaWVyVXBOb3dJbkxvbwogCiBjaGFyKiBKSVRfT1BFUkFUSU9OIHRyaWdnZXJPU1JF
bnRyeU5vdyhFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCiB7Ci0gICAg
Vk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLSAgICBEZWZlckdDRm9yQVdoaWxl
IGRlZmVyR0Modm0tPmhlYXApOworICAgIERlZmVyR0NGb3JBV2hpbGUgZGVmZXJHQyh2bS5oZWFw
KTsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOwogCiAgICAg
c2FuaXRpemVTdGFja0ZvclZNKHZtKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUGxhbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQ
bGFuLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdQbGFuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEzNyw3ICsxMzcsNyBAQCBQbGFuOjpQbGFu
KENvZGVCbG9jayogcGFzc2VkQ29kZUJsb2NrLCBDCiAgICAgQ29tcGlsYXRpb25Nb2RlIG1vZGUs
IHVuc2lnbmVkIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwKICAgICBjb25zdCBPcGVyYW5kczxPcHRp
b25hbDxKU1ZhbHVlPj4mIG11c3RIYW5kbGVWYWx1ZXMpCiAgICAgOiBtX21vZGUobW9kZSkKLSAg
ICAsIG1fdm0ocGFzc2VkQ29kZUJsb2NrLT52bSgpKQorICAgICwgbV92bSgmcGFzc2VkQ29kZUJs
b2NrLT52bSgpKQogICAgICwgbV9jb2RlQmxvY2socGFzc2VkQ29kZUJsb2NrKQogICAgICwgbV9w
cm9maWxlZERGR0NvZGVCbG9jayhwcm9maWxlZERGR0NvZGVCbG9jaykKICAgICAsIG1fbXVzdEhh
bmRsZVZhbHVlcyhtdXN0SGFuZGxlVmFsdWVzKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCShyZXZpc2lvbiAyNDkx
MjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdo
dCAoQykgMjAxMSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKQEAgLTU4OCw3ICs1ODgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0
Q2FsbChOb2RlKiBub2RlCiAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4ZWN1dGFi
bGUgPSBudWxscHRyOwogICAgIGlmIChpc0RpcmVjdCkgewogICAgICAgICBleGVjdXRhYmxlID0g
bm9kZS0+Y2FzdE9wZXJhbmQ8RXhlY3V0YWJsZUJhc2UqPigpOwotICAgICAgICBmdW5jdGlvbkV4
ZWN1dGFibGUgPSBqc0R5bmFtaWNDYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KCptX2ppdC52bSgp
LCBleGVjdXRhYmxlKTsKKyAgICAgICAgZnVuY3Rpb25FeGVjdXRhYmxlID0ganNEeW5hbWljQ2Fz
dDxGdW5jdGlvbkV4ZWN1dGFibGUqPih2bSgpLCBleGVjdXRhYmxlKTsKICAgICB9CiAgICAgCiAg
ICAgdW5zaWduZWQgbnVtUGFzc2VkQXJncyA9IDA7CkBAIC02MjIsNyArNjIyLDcgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZQogICAgICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZSA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxp
bmVDYWxsRnJhbWUoKTsKICAgICAgICAgICAgIC8vIGVtaXRTZXR1cFZhcmFyZ3NGcmFtZUZhc3RD
YXNlIG1vZGlmaWVzIHRoZSBzdGFjayBwb2ludGVyIGlmIGl0IHN1Y2NlZWRzLgotICAgICAgICAg
ICAgZW1pdFNldHVwVmFyYXJnc0ZyYW1lRmFzdENhc2UoKm1faml0LnZtKCksIG1faml0LCBzY3Jh
dGNoR1BSMiwgc2NyYXRjaEdQUjEsIHNjcmF0Y2hHUFIyLCBzY3JhdGNoR1BSMywgaW5saW5lQ2Fs
bEZyYW1lLCBkYXRhLT5maXJzdFZhckFyZ09mZnNldCwgc2xvd0Nhc2UpOworICAgICAgICAgICAg
ZW1pdFNldHVwVmFyYXJnc0ZyYW1lRmFzdENhc2Uodm0oKSwgbV9qaXQsIHNjcmF0Y2hHUFIyLCBz
Y3JhdGNoR1BSMSwgc2NyYXRjaEdQUjIsIHNjcmF0Y2hHUFIzLCBpbmxpbmVDYWxsRnJhbWUsIGRh
dGEtPmZpcnN0VmFyQXJnT2Zmc2V0LCBzbG93Q2FzZSk7CiAgICAgICAgICAgICBKSVRDb21waWxl
cjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOwogICAgICAgICAgICAgc2xvd0Nhc2UubGluaygm
bV9qaXQpOwogICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UaHJvd1N0YWNrT3Zl
cmZsb3dGb3JWYXJhcmdzKTsKQEAgLTgxNyw3ICs4MTcsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
OjplbWl0Q2FsbChOb2RlKiBub2RlCiAgICAgICAgIG1faml0LmFkZFB0cihUcnVzdGVkSW1tMzIo
cmVxdWlyZWRCeXRlcyksIEpJVENvbXBpbGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAg
ICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6Y2FsbGVlRnJhbWVTbG90KENhbGxGcmFtZVNs
b3Q6OmNhbGxlZSkud2l0aE9mZnNldChQYXlsb2FkT2Zmc2V0KSwgR1BSSW5mbzo6cmVnVDApOwog
ICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OmNhbGxlZUZyYW1lU2xvdChDYWxsRnJh
bWVTbG90OjpjYWxsZWUpLndpdGhPZmZzZXQoVGFnT2Zmc2V0KSwgR1BSSW5mbzo6cmVnVDEpOwot
ICAgICAgICBtX2ppdC5lbWl0RHVtYlZpcnR1YWxDYWxsKCptX2ppdC52bSgpLCBpbmZvKTsKKyAg
ICAgICAgbV9qaXQuZW1pdER1bWJWaXJ0dWFsQ2FsbCh2bSgpLCBpbmZvKTsKICAgICAgICAgCiAg
ICAgICAgIGRvbmUubGluaygmbV9qaXQpOwogICAgICAgICBzZXRSZXN1bHRBbmRSZXNldFN0YWNr
KCk7CkBAIC0xNTcwLDcgKzE1NzAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTG9n
aWNhbE5vdChOCiAgICAgICAgIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
ID0gIW1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50SXNTdGlsbFZhbGlkKCk7CiAgICAg
ICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2ppdC5ncmFwaCgpLmdsb2JhbE9i
amVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpOwogICAgICAgICBib29sIG5lZ2F0ZVJlc3Vs
dCA9IHRydWU7Ci0gICAgICAgIG1faml0LmVtaXRDb252ZXJ0VmFsdWVUb0Jvb2xlYW4oKm1faml0
LnZtKCksIGFyZzEuanNWYWx1ZVJlZ3MoKSwgcmVzdWx0R1BSLCB0ZW1wLmdwcigpLCB2YWx1ZUZQ
Ui5mcHIoKSwgdGVtcEZQUi5mcHIoKSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
LCBnbG9iYWxPYmplY3QsIG5lZ2F0ZVJlc3VsdCk7CisgICAgICAgIG1faml0LmVtaXRDb252ZXJ0
VmFsdWVUb0Jvb2xlYW4odm0oKSwgYXJnMS5qc1ZhbHVlUmVncygpLCByZXN1bHRHUFIsIHRlbXAu
Z3ByKCksIHZhbHVlRlBSLmZwcigpLCB0ZW1wRlBSLmZwcigpLCBzaG91bGRDaGVja01hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQsIGdsb2JhbE9iamVjdCwgbmVnYXRlUmVzdWx0KTsKICAgICAgICAgYm9v
bGVhblJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAt
MTcxNSw3ICsxNzE1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdEJyYW5jaChOb2RlKiBu
bwogCiAgICAgICAgIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gIW1h
c3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50SXNTdGlsbFZhbGlkKCk7CiAgICAgICAgIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZv
cihub2RlLT5vcmlnaW4uc2VtYW50aWMpOwotICAgICAgICBhdXRvIGZhbHNleSA9IG1faml0LmJy
YW5jaElmRmFsc2V5KCptX2ppdC52bSgpLCB2YWx1ZVJlZ3MsIHJlc3VsdEdQUiwgdGVtcC5ncHIo
KSwgdmFsdWVGUFIuZnByKCksIHRlbXBGUFIuZnByKCksIHNob3VsZENoZWNrTWFzcXVlcmFkZXNB
c1VuZGVmaW5lZCwgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgYXV0byBmYWxzZXkgPSBtX2ppdC5i
cmFuY2hJZkZhbHNleSh2bSgpLCB2YWx1ZVJlZ3MsIHJlc3VsdEdQUiwgdGVtcC5ncHIoKSwgdmFs
dWVGUFIuZnByKCksIHRlbXBGUFIuZnByKCksIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCwgZ2xvYmFsT2JqZWN0KTsKICAgICAgICAgYWRkQnJhbmNoKGZhbHNleSwgbm90VGFrZW4p
OwogICAgICAgICBqdW1wKHRha2VuLCBGb3JjZUp1bXApOwogCkBAIC0zOTM5LDggKzM5MzksOCBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIG1faml0
LmFkZDMyKHN0cnVjdHVyZUlER1BSLCBoYXNoR1BSKTsKICAgICAgICAgbV9qaXQuYW5kMzIoVHJ1
c3RlZEltbTMyKEhhc093blByb3BlcnR5Q2FjaGU6Om1hc2spLCBoYXNoR1BSKTsKICAgICAgICAg
bV9qaXQubXVsMzIoVHJ1c3RlZEltbTMyKHNpemVvZihIYXNPd25Qcm9wZXJ0eUNhY2hlOjpFbnRy
eSkpLCBoYXNoR1BSLCBoYXNoR1BSKTsKLSAgICAgICAgQVNTRVJUKG1faml0LnZtKCktPmhhc093
blByb3BlcnR5Q2FjaGUoKSk7Ci0gICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cihtX2pp
dC52bSgpLT5oYXNPd25Qcm9wZXJ0eUNhY2hlKCkpLCB0ZW1wR1BSKTsKKyAgICAgICAgQVNTRVJU
KHZtKCkuaGFzT3duUHJvcGVydHlDYWNoZSgpKTsKKyAgICAgICAgbV9qaXQubW92ZShUcnVzdGVk
SW1tUHRyKHZtKCkuaGFzT3duUHJvcGVydHlDYWNoZSgpKSwgdGVtcEdQUik7CiAgICAgICAgIHNs
b3dQYXRoLmFwcGVuZChtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCAK
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgodGVtcEdQUiwgaGFzaEdQUiwg
TWFjcm9Bc3NlbWJsZXI6OlRpbWVzT25lLCBIYXNPd25Qcm9wZXJ0eUNhY2hlOjpFbnRyeTo6b2Zm
c2V0T2ZJbXBsKCkpLCBpbXBsR1BSKSk7CiAgICAgICAgIG1faml0LmxvYWQ4KE1hY3JvQXNzZW1i
bGVyOjpCYXNlSW5kZXgodGVtcEdQUiwgaGFzaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzT25l
LCBIYXNPd25Qcm9wZXJ0eUNhY2hlOjpFbnRyeTo6b2Zmc2V0T2ZSZXN1bHQoKSksIHJlc3VsdEdQ
Uik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQ2NC5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0Nyw3ICsyNDcs
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZU5vblBlCiAgICAgICAgIEdQ
UlJlZyBsb2NhbEdsb2JhbE9iamVjdEdQUiA9IGxvY2FsR2xvYmFsT2JqZWN0LmdwcigpOwogICAg
ICAgICBHUFJSZWcgcmVtb3RlR2xvYmFsT2JqZWN0R1BSID0gcmVtb3RlR2xvYmFsT2JqZWN0Lmdw
cigpOwogICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1faml0
LmdyYXBoKCksIG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG1fY3VycmVudE5vZGUtPm9y
aWdpbi5zZW1hbnRpYykpLCBsb2NhbEdsb2JhbE9iamVjdEdQUik7Ci0gICAgICAgIG1faml0LmVt
aXRMb2FkU3RydWN0dXJlKCptX2ppdC52bSgpLCBhcmdHUFIsIHJlc3VsdEdQUiwgc2NyYXRjaC5n
cHIoKSk7CisgICAgICAgIG1faml0LmVtaXRMb2FkU3RydWN0dXJlKHZtKCksIGFyZ0dQUiwgcmVz
dWx0R1BSLCBzY3JhdGNoLmdwcigpKTsKICAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxl
cjo6QWRkcmVzcyhyZXN1bHRHUFIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCBy
ZW1vdGVHbG9iYWxPYmplY3RHUFIpOwogICAgICAgICBtX2ppdC5jb21wYXJlUHRyKEpJVENvbXBp
bGVyOjpFcXVhbCwgbG9jYWxHbG9iYWxPYmplY3RHUFIsIHJlbW90ZUdsb2JhbE9iamVjdEdQUiwg
cmVzdWx0R1BSKTsKICAgICAgICAgZG9uZS5hcHBlbmQobV9qaXQuanVtcCgpKTsKQEAgLTMwMCw3
ICszMDAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVBlZXBoCiAgICAg
ICAgIEdQUlJlZyBsb2NhbEdsb2JhbE9iamVjdEdQUiA9IGxvY2FsR2xvYmFsT2JqZWN0Lmdwcigp
OwogICAgICAgICBHUFJSZWcgcmVtb3RlR2xvYmFsT2JqZWN0R1BSID0gcmVtb3RlR2xvYmFsT2Jq
ZWN0LmdwcigpOwogICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVy
KG1faml0LmdyYXBoKCksIG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG1fY3VycmVudE5v
ZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBsb2NhbEdsb2JhbE9iamVjdEdQUik7Ci0gICAgICAgIG1f
aml0LmVtaXRMb2FkU3RydWN0dXJlKCptX2ppdC52bSgpLCBhcmdHUFIsIHJlc3VsdEdQUiwgc2Ny
YXRjaC5ncHIoKSk7CisgICAgICAgIG1faml0LmVtaXRMb2FkU3RydWN0dXJlKHZtKCksIGFyZ0dQ
UiwgcmVzdWx0R1BSLCBzY3JhdGNoLmdwcigpKTsKICAgICAgICAgbV9qaXQubG9hZFB0cihKSVRD
b21waWxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0
KCkpLCByZW1vdGVHbG9iYWxPYmplY3RHUFIpOwogICAgICAgICBicmFuY2hQdHIoSklUQ29tcGls
ZXI6OkVxdWFsLCBsb2NhbEdsb2JhbE9iamVjdEdQUiwgcmVtb3RlR2xvYmFsT2JqZWN0R1BSLCB0
YWtlbik7CiAKQEAgLTU0Nyw3ICs1NDcsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2Fs
bChOb2RlKiBub2RlCiAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4ZWN1dGFibGUg
PSBudWxscHRyOwogICAgIGlmIChpc0RpcmVjdCkgewogICAgICAgICBleGVjdXRhYmxlID0gbm9k
ZS0+Y2FzdE9wZXJhbmQ8RXhlY3V0YWJsZUJhc2UqPigpOwotICAgICAgICBmdW5jdGlvbkV4ZWN1
dGFibGUgPSBqc0R5bmFtaWNDYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KCptX2ppdC52bSgpLCBl
eGVjdXRhYmxlKTsKKyAgICAgICAgZnVuY3Rpb25FeGVjdXRhYmxlID0ganNEeW5hbWljQ2FzdDxG
dW5jdGlvbkV4ZWN1dGFibGUqPih2bSgpLCBleGVjdXRhYmxlKTsKICAgICB9CiAgICAgCiAgICAg
dW5zaWduZWQgbnVtUGFzc2VkQXJncyA9IDA7CkBAIC01ODEsNyArNTgxLDcgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZQogICAgICAgICAgICAgZWxzZQogICAgICAg
ICAgICAgICAgIGlubGluZUNhbGxGcmFtZSA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVD
YWxsRnJhbWUoKTsKICAgICAgICAgICAgIC8vIGVtaXRTZXR1cFZhcmFyZ3NGcmFtZUZhc3RDYXNl
IG1vZGlmaWVzIHRoZSBzdGFjayBwb2ludGVyIGlmIGl0IHN1Y2NlZWRzLgotICAgICAgICAgICAg
ZW1pdFNldHVwVmFyYXJnc0ZyYW1lRmFzdENhc2UoKm1faml0LnZtKCksIG1faml0LCBzY3JhdGNo
R1BSMiwgc2NyYXRjaEdQUjEsIHNjcmF0Y2hHUFIyLCBzY3JhdGNoR1BSMywgaW5saW5lQ2FsbEZy
YW1lLCBkYXRhLT5maXJzdFZhckFyZ09mZnNldCwgc2xvd0Nhc2UpOworICAgICAgICAgICAgZW1p
dFNldHVwVmFyYXJnc0ZyYW1lRmFzdENhc2Uodm0oKSwgbV9qaXQsIHNjcmF0Y2hHUFIyLCBzY3Jh
dGNoR1BSMSwgc2NyYXRjaEdQUjIsIHNjcmF0Y2hHUFIzLCBpbmxpbmVDYWxsRnJhbWUsIGRhdGEt
PmZpcnN0VmFyQXJnT2Zmc2V0LCBzbG93Q2FzZSk7CiAgICAgICAgICAgICBKSVRDb21waWxlcjo6
SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOwogICAgICAgICAgICAgc2xvd0Nhc2UubGluaygmbV9q
aXQpOwogICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UaHJvd1N0YWNrT3ZlcmZs
b3dGb3JWYXJhcmdzKTsKQEAgLTc2Nyw3ICs3NjcsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpl
bWl0Q2FsbChOb2RlKiBub2RlCiAgICAgICAgIC8vIFRoaXMgaXMgdGhlIHBhcnQgd2hlcmUgd2Ug
bWVhbnQgdG8gbWFrZSBhIG5vcm1hbCBjYWxsLiBPb3BzLgogICAgICAgICBtX2ppdC5hZGRQdHIo
VHJ1c3RlZEltbTMyKHJlcXVpcmVkQnl0ZXMpLCBKSVRDb21waWxlcjo6c3RhY2tQb2ludGVyUmVn
aXN0ZXIpOwogICAgICAgICBtX2ppdC5sb2FkNjQoSklUQ29tcGlsZXI6OmNhbGxlZUZyYW1lU2xv
dChDYWxsRnJhbWVTbG90OjpjYWxsZWUpLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgIG1faml0
LmVtaXREdW1iVmlydHVhbENhbGwoKm1faml0LnZtKCksIGNhbGxMaW5rSW5mbyk7CisgICAgICAg
IG1faml0LmVtaXREdW1iVmlydHVhbENhbGwodm0oKSwgY2FsbExpbmtJbmZvKTsKICAgICAgICAg
CiAgICAgICAgIGRvbmUubGluaygmbV9qaXQpOwogICAgICAgICBzZXRSZXN1bHRBbmRSZXNldFN0
YWNrKCk7CkBAIC0xNjAzLDcgKzE2MDMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
T2JqZWN0T3JPdGhlCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModmFs
dWVHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgCiAgICAgICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CiAK
LSAgICAgICAgbV9qaXQuZW1pdExvYWRTdHJ1Y3R1cmUoKm1faml0LnZtKCksIHZhbHVlR1BSLCBz
dHJ1Y3R1cmVHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICBtX2ppdC5lbWl0TG9hZFN0cnVjdHVy
ZSh2bSgpLCB2YWx1ZUdQUiwgc3RydWN0dXJlR1BSLCBzY3JhdGNoR1BSKTsKICAgICAgICAgc3Bl
Y3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIG5vZGVVc2UsIAog
ICAgICAgICAgICAgbV9qaXQuYnJhbmNoUHRyKAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpFcXVhbCwgCkBAIC0xNzA5LDcgKzE3MDksNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlTG9naWNhbE5vdChOCiAgICAgICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaC0+Z3By
KCk7CiAgICAgICAgIH0KICAgICAgICAgYm9vbCBuZWdhdGVSZXN1bHQgPSB0cnVlOwotICAgICAg
ICBtX2ppdC5lbWl0Q29udmVydFZhbHVlVG9Cb29sZWFuKCptX2ppdC52bSgpLCBKU1ZhbHVlUmVn
cyhhcmcxR1BSKSwgcmVzdWx0R1BSLCBzY3JhdGNoR1BSLCB2YWx1ZUZQUi5mcHIoKSwgdGVtcEZQ
Ui5mcHIoKSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBnbG9iYWxPYmplY3Qs
IG5lZ2F0ZVJlc3VsdCk7CisgICAgICAgIG1faml0LmVtaXRDb252ZXJ0VmFsdWVUb0Jvb2xlYW4o
dm0oKSwgSlNWYWx1ZVJlZ3MoYXJnMUdQUiksIHJlc3VsdEdQUiwgc2NyYXRjaEdQUiwgdmFsdWVG
UFIuZnByKCksIHRlbXBGUFIuZnByKCksIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCwgZ2xvYmFsT2JqZWN0LCBuZWdhdGVSZXN1bHQpOwogICAgICAgICBtX2ppdC5vcjMyKFRydXN0
ZWRJbW0zMihWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKICAgICAgICAganNWYWx1ZVJlc3VsdChy
ZXN1bHRHUFIsIG5vZGUsIERhdGFGb3JtYXRKU0Jvb2xlYW4pOwogICAgICAgICByZXR1cm47CkBA
IC0xNzU0LDcgKzE3NTQsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0T2JqZWN0T3JPdGhl
ckJyCiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh2YWx1ZUdQUiwgSlNDZWxs
Ojp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCAKICAgICAgICAgICAgIFRydXN0ZWRJbW0zMihNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkKSk7CiAKLSAgICAgICAgbV9qaXQuZW1pdExvYWRTdHJ1Y3R1cmUo
Km1faml0LnZtKCksIHZhbHVlR1BSLCBzdHJ1Y3R1cmVHUFIsIHNjcmF0Y2hHUFIpOworICAgICAg
ICBtX2ppdC5lbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCB2YWx1ZUdQUiwgc3RydWN0dXJlR1BSLCBz
Y3JhdGNoR1BSKTsKICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVn
cyh2YWx1ZUdQUiksIG5vZGVVc2UsCiAgICAgICAgICAgICBtX2ppdC5icmFuY2hQdHIoCiAgICAg
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKQEAgLTE4ODIsNyArMTg4Miw3IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRCcmFuY2goTm9kZSogbm8KICAgICAgICAgICAgIHZh
bHVlLnVzZSgpOwogCiAgICAgICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0g
bV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKLSAg
ICAgICAgICAgIGF1dG8gdHJ1dGh5ID0gbV9qaXQuYnJhbmNoSWZUcnV0aHkoKm1faml0LnZtKCks
IEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgcmVzdWx0R1BSLCBzY3JhdGNoR1BSLCB2YWx1ZUZQUiwg
dGVtcEZQUiwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBnbG9iYWxPYmplY3Qp
OworICAgICAgICAgICAgYXV0byB0cnV0aHkgPSBtX2ppdC5icmFuY2hJZlRydXRoeSh2bSgpLCBK
U1ZhbHVlUmVncyh2YWx1ZUdQUiksIHJlc3VsdEdQUiwgc2NyYXRjaEdQUiwgdmFsdWVGUFIsIHRl
bXBGUFIsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgZ2xvYmFsT2JqZWN0KTsK
ICAgICAgICAgICAgIGFkZEJyYW5jaCh0cnV0aHksIHRha2VuKTsKICAgICAgICAgICAgIGp1bXAo
bm90VGFrZW4pOwogICAgICAgICB9CkBAIC0xOTAyLDcgKzE5MDIsNyBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAKICAgICBpZiAodmFsaWRhdGVERkdEb2VzR0Mp
IHsKICAgICAgICAgYm9vbCBleHBlY3REb2VzR0MgPSBkb2VzR0MobV9qaXQuZ3JhcGgoKSwgbm9k
ZSk7Ci0gICAgICAgIG1faml0LnN0b3JlOChUcnVzdGVkSW1tMzIoZXhwZWN0RG9lc0dDKSwgbV9q
aXQudm0oKS0+aGVhcC5hZGRyZXNzT2ZFeHBlY3REb2VzR0MoKSk7CisgICAgICAgIG1faml0LnN0
b3JlOChUcnVzdGVkSW1tMzIoZXhwZWN0RG9lc0dDKSwgdm0oKS5oZWFwLmFkZHJlc3NPZkV4cGVj
dERvZXNHQygpKTsKICAgICB9CiAKICNpZiBFTkFCTEUoREZHX1JFR0lTVEVSX0FMTE9DQVRJT05f
VkFMSURBVElPTikKQEAgLTM5MTIsNyArMzkxMiw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgICAgIEdQUlJlZyBsb2NhbEdsb2JhbE9iamVjdEdQ
UiA9IGxvY2FsR2xvYmFsT2JqZWN0LmdwcigpOwogICAgICAgICAgICAgR1BSUmVnIHJlbW90ZUds
b2JhbE9iamVjdEdQUiA9IHJlbW90ZUdsb2JhbE9iamVjdC5ncHIoKTsKICAgICAgICAgICAgIG1f
aml0Lm1vdmUoVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9qaXQuZ3JhcGgoKSwgbV9qaXQu
Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBsb2NhbEdsb2JhbE9iamVj
dEdQUik7Ci0gICAgICAgICAgICBtX2ppdC5lbWl0TG9hZFN0cnVjdHVyZSgqbV9qaXQudm0oKSwg
dmFsdWUuZ3ByKCksIHJlc3VsdC5ncHIoKSwgc2NyYXRjaC5ncHIoKSk7CisgICAgICAgICAgICBt
X2ppdC5lbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCB2YWx1ZS5ncHIoKSwgcmVzdWx0LmdwcigpLCBz
Y3JhdGNoLmdwcigpKTsKICAgICAgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFk
ZHJlc3MocmVzdWx0LmdwcigpLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVt
b3RlR2xvYmFsT2JqZWN0R1BSKTsgCiAgICAgICAgICAgICBtX2ppdC5jb21wYXJlUHRyKEpJVENv
bXBpbGVyOjpFcXVhbCwgbG9jYWxHbG9iYWxPYmplY3RHUFIsIHJlbW90ZUdsb2JhbE9iamVjdEdQ
UiwgcmVzdWx0LmdwcigpKTsKICAgICAgICAgfQpAQCAtNDIzNCw5ICs0MjM0LDkgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogCiAgICAgICAgIG5vdFByZXNlbnRJ
blRhYmxlLmxpbmsoJm1faml0KTsKICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQo
KSA9PSBNYXBPYmplY3RVc2UpCi0gICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHI6
OndlYWtQb2ludGVyKG1faml0LmdyYXBoKCksIG1faml0LnZtKCktPnNlbnRpbmVsTWFwQnVja2V0
KCkpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyOjp3
ZWFrUG9pbnRlcihtX2ppdC5ncmFwaCgpLCB2bSgpLnNlbnRpbmVsTWFwQnVja2V0KCkpLCByZXN1
bHRHUFIpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1Q
dHI6OndlYWtQb2ludGVyKG1faml0LmdyYXBoKCksIG1faml0LnZtKCktPnNlbnRpbmVsU2V0QnVj
a2V0KCkpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRy
Ojp3ZWFrUG9pbnRlcihtX2ppdC5ncmFwaCgpLCB2bSgpLnNlbnRpbmVsU2V0QnVja2V0KCkpLCBy
ZXN1bHRHUFIpOwogICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKICAgICAgICAgY2VsbFJlc3Vs
dChyZXN1bHRHUFIsIG5vZGUpOwogICAgICAgICBicmVhazsKQEAgLTQ1MDksOCArNDUwOSw4IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgICAgIG1f
aml0LmxzaGlmdDMyKFRydXN0ZWRJbW0zMihnZXRMU0JTZXQoc2l6ZW9mKEhhc093blByb3BlcnR5
Q2FjaGU6OkVudHJ5KSkpLCBoYXNoR1BSKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgbV9q
aXQubXVsMzIoVHJ1c3RlZEltbTMyKHNpemVvZihIYXNPd25Qcm9wZXJ0eUNhY2hlOjpFbnRyeSkp
LCBoYXNoR1BSLCBoYXNoR1BSKTsKLSAgICAgICAgQVNTRVJUKG1faml0LnZtKCktPmhhc093blBy
b3BlcnR5Q2FjaGUoKSk7Ci0gICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cihtX2ppdC52
bSgpLT5oYXNPd25Qcm9wZXJ0eUNhY2hlKCkpLCB0ZW1wR1BSKTsKKyAgICAgICAgQVNTRVJUKHZt
KCkuaGFzT3duUHJvcGVydHlDYWNoZSgpKTsKKyAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1t
UHRyKHZtKCkuaGFzT3duUHJvcGVydHlDYWNoZSgpKSwgdGVtcEdQUik7CiAgICAgICAgIHNsb3dQ
YXRoLmFwcGVuZChtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCAKICAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgodGVtcEdQUiwgaGFzaEdQUiwgTWFj
cm9Bc3NlbWJsZXI6OlRpbWVzT25lLCBIYXNPd25Qcm9wZXJ0eUNhY2hlOjpFbnRyeTo6b2Zmc2V0
T2ZJbXBsKCkpLCBpbXBsR1BSKSk7CiAgICAgICAgIG1faml0LmxvYWQ4KE1hY3JvQXNzZW1ibGVy
OjpCYXNlSW5kZXgodGVtcEdQUiwgaGFzaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzT25lLCBI
YXNPd25Qcm9wZXJ0eUNhY2hlOjpFbnRyeTo6b2Zmc2V0T2ZSZXN1bHQoKSksIHJlc3VsdEdQUik7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNiw4ICsxMTYsOSBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjplbWl0QWxsb2NhdGVSYXdPYmplCiAKICAgICBtX2ppdC5tb3ZlKFRy
dXN0ZWRJbW1QdHIobnVsbHB0ciksIHN0b3JhZ2VHUFIpOwogCisgICAgVk0mIHZtID0gdGhpcy0+
dm0oKTsKICAgICBpZiAoc2l6ZSkgewotICAgICAgICBpZiAoQWxsb2NhdG9yIGFsbG9jYXRvciA9
IG1faml0LnZtKCktPmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLmFsbG9jYXRvckZvck5v
blZpcnR1YWwoc2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpKSB7Cisg
ICAgICAgIGlmIChBbGxvY2F0b3IgYWxsb2NhdG9yID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4aWxp
YXJ5U3BhY2UuYWxsb2NhdG9yRm9yTm9uVmlydHVhbChzaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpB
bGxvY2F0b3JJZkV4aXN0cykpIHsKICAgICAgICAgICAgIG1faml0LmVtaXRBbGxvY2F0ZShzdG9y
YWdlR1BSLCBKSVRBbGxvY2F0b3I6OmNvbnN0YW50KGFsbG9jYXRvciksIHNjcmF0Y2hHUFIsIHNj
cmF0Y2gyR1BSLCBzbG93Q2FzZXMpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBtX2ppdC5h
ZGRQdHIoCkBAIC0xMzEsNyArMTMyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdEFsbG9j
YXRlUmF3T2JqZQogICAgIH0KIAogICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpTRmluYWxP
YmplY3Q6OmFsbG9jYXRpb25TaXplKGlubGluZUNhcGFjaXR5KTsKLSAgICBBbGxvY2F0b3IgYWxs
b2NhdG9yID0gYWxsb2NhdG9yRm9yTm9uVmlydHVhbENvbmN1cnJlbnRseTxKU0ZpbmFsT2JqZWN0
PigqbV9qaXQudm0oKSwgYWxsb2NhdGlvblNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRv
cklmRXhpc3RzKTsKKyAgICBBbGxvY2F0b3IgYWxsb2NhdG9yID0gYWxsb2NhdG9yRm9yTm9uVmly
dHVhbENvbmN1cnJlbnRseTxKU0ZpbmFsT2JqZWN0Pih2bSwgYWxsb2NhdGlvblNpemUsIEFsbG9j
YXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKICAgICBpZiAoYWxsb2NhdG9yKSB7CiAg
ICAgICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KHJlc3VsdEdQUiwgSklUQWxsb2NhdG9yOjpjb25z
dGFudChhbGxvY2F0b3IpLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIHN0
b3JhZ2VHUFIsIHNjcmF0Y2gyR1BSLCBzbG93Q2FzZXMpOwogICAgICAgICBtX2ppdC5lbWl0SW5p
dGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0R1BSLCBzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5
KCkpOwpAQCAtMTcxLDcgKzE3Miw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRBbGxvY2F0
ZVJhd09iamUKICAgICAKICAgICBtX2ppdC5lbWl0SW5pdGlhbGl6ZU91dE9mTGluZVN0b3JhZ2Uo
c3RvcmFnZUdQUiwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKICAgICAKLSAgICBt
X2ppdC5tdXRhdG9yRmVuY2UoKm1faml0LnZtKCkpOworICAgIG1faml0Lm11dGF0b3JGZW5jZSh2
bSk7CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRHZXRMZW5ndGgoSW5saW5lQ2FsbEZy
YW1lKiBpbmxpbmVDYWxsRnJhbWUsIEdQUlJlZyBsZW5ndGhHUFIsIGJvb2wgaW5jbHVkZVRoaXMp
CkBAIC0xNTcxLDggKzE1NzIsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlU3RyaW5n
U2xpY2UoCiAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBkb25lQ2FzZXM7CiAgICAgQ0NhbGxI
ZWxwZXJzOjpKdW1wTGlzdCBzbG93Q2FzZXM7CiAKKyAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwog
ICAgIGF1dG8gbm9uRW1wdHlDYXNlID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkJl
bG93LCBzdGFydEluZGV4R1BSLCB0ZW1wR1BSKTsKLSAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1Q
dHI6OndlYWtQb2ludGVyKG1faml0LmdyYXBoKCksIGpzRW1wdHlTdHJpbmcoJnZtKCkpKSwgdGVt
cEdQUik7CisgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2ppdC5n
cmFwaCgpLCBqc0VtcHR5U3RyaW5nKHZtKSksIHRlbXBHUFIpOwogICAgIGRvbmVDYXNlcy5hcHBl
bmQobV9qaXQuanVtcCgpKTsKIAogICAgIG5vbkVtcHR5Q2FzZS5saW5rKCZtX2ppdCk7CkBAIC0x
NTk5LDcgKzE2MDEsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlU3RyaW5nU2xpY2Uo
CiAgICAgY29udDhCaXQubGluaygmbV9qaXQpOwogCiAgICAgbV9qaXQubHNoaWZ0MzIoTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW0zMihzaXplb2Yodm9pZCopID09IDQgPyAyIDogMyksIHRlbXBH
UFIpOwotICAgIG1faml0LmFkZFB0cihUcnVzdGVkSW1tUHRyKG1faml0LnZtKCktPnNtYWxsU3Ry
aW5ncy5zaW5nbGVDaGFyYWN0ZXJTdHJpbmdzKCkpLCB0ZW1wR1BSKTsKKyAgICBtX2ppdC5hZGRQ
dHIoVHJ1c3RlZEltbVB0cih2bS5zbWFsbFN0cmluZ3Muc2luZ2xlQ2hhcmFjdGVyU3RyaW5ncygp
KSwgdGVtcEdQUik7CiAgICAgbV9qaXQubG9hZFB0cih0ZW1wR1BSLCB0ZW1wR1BSKTsKIAogICAg
IGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChiaWdDaGFyYWN0ZXIsIHRoaXMsIG9w
ZXJhdGlvblNpbmdsZUNoYXJhY3RlclN0cmluZywgdGVtcEdQUiwgdGVtcEdQUikpOwpAQCAtMTg2
OSw3ICsxODcxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUN1cnJlbnRCbG9jawog
ICAgICAgICB9CiAKICAgICAgICAgaWYgKE9wdGlvbnM6OnZhbGlkYXRlREZHRXhjZXB0aW9uSGFu
ZGxpbmcoKSAmJiAobWF5RXhpdChtX2ppdC5ncmFwaCgpLCBtX2N1cnJlbnROb2RlKSAhPSBEb2Vz
Tm90RXhpdCB8fCBtX2N1cnJlbnROb2RlLT5pc1Rlcm1pbmFsKCkpKQotICAgICAgICAgICAgbV9q
aXQuaml0UmVsZWFzZUFzc2VydE5vRXhjZXB0aW9uKCptX2ppdC52bSgpKTsKKyAgICAgICAgICAg
IG1faml0LmppdFJlbGVhc2VBc3NlcnROb0V4Y2VwdGlvbihtX2ppdC52bSgpKTsKIAogICAgICAg
ICBtX2ppdC5wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIoKS5hcHBlbmRJdGVtKG1faml0LmxhYmVs
SWdub3JpbmdXYXRjaHBvaW50cygpLCBtX29yaWdpbi5zZW1hbnRpYyk7CiAKQEAgLTIwNDksNyAr
MjA1MSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDaGVja1RyYXBzKE4KICAgICBH
UFJSZWcgdW51c2VkR1BSID0gdW51c2VkLmdwcigpOwogCiAgICAgSklUQ29tcGlsZXI6Okp1bXAg
bmVlZFRyYXBIYW5kbGluZyA9IG1faml0LmJyYW5jaFRlc3Q4KEpJVENvbXBpbGVyOjpOb25aZXJv
LAotICAgICAgICBKSVRDb21waWxlcjo6QWJzb2x1dGVBZGRyZXNzKG1faml0LnZtKCktPm5lZWRU
cmFwSGFuZGxpbmdBZGRyZXNzKCkpKTsKKyAgICAgICAgSklUQ29tcGlsZXI6OkFic29sdXRlQWRk
cmVzcyhtX2ppdC52bSgpLm5lZWRUcmFwSGFuZGxpbmdBZGRyZXNzKCkpKTsKIAogICAgIGFkZFNs
b3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChuZWVkVHJhcEhhbmRsaW5nLCB0aGlzLCBvcGVy
YXRpb25IYW5kbGVUcmFwcywgdW51c2VkR1BSKSk7CiAgICAgbm9SZXN1bHQobm9kZSk7CkBAIC0y
MjE0LDggKzIyMTYsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPblN0
CiAgICAgLy8gOCBiaXQgc3RyaW5nIHZhbHVlcyBkb24ndCBuZWVkIHRoZSBpc0FTQ0lJIGNoZWNr
LgogICAgIGNvbnQ4Qml0LmxpbmsoJm1faml0KTsKIAorICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7
CiAgICAgbV9qaXQubHNoaWZ0MzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihzaXplb2Yo
dm9pZCopID09IDQgPyAyIDogMyksIHNjcmF0Y2hSZWcpOwotICAgIG1faml0LmFkZFB0cihUcnVz
dGVkSW1tUHRyKG1faml0LnZtKCktPnNtYWxsU3RyaW5ncy5zaW5nbGVDaGFyYWN0ZXJTdHJpbmdz
KCkpLCBzY3JhdGNoUmVnKTsKKyAgICBtX2ppdC5hZGRQdHIoVHJ1c3RlZEltbVB0cih2bS5zbWFs
bFN0cmluZ3Muc2luZ2xlQ2hhcmFjdGVyU3RyaW5ncygpKSwgc2NyYXRjaFJlZyk7CiAgICAgbV9q
aXQubG9hZFB0cihzY3JhdGNoUmVnLCBzY3JhdGNoUmVnKTsKIAogICAgIGFkZFNsb3dQYXRoR2Vu
ZXJhdG9yKApAQCAtMjIzNiw4ICsyMjM5LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZUdldEJ5VmFsT25TdAogICAgICAgICAgICAgLy8gb24gYSBzdHJpbmdQcm90b3R5cGVDaGFpbklz
U2FuZSgpIGd1YXJhbnRlZWluZyB0aGF0IHRoZSBwcm90b3R5cGVzIGhhdmUgbm8gbmVnYXRpdmUK
ICAgICAgICAgICAgIC8vIGluZGV4ZWQgcHJvcGVydGllcyBlaXRoZXIuCiAgICAgICAgICAgICAv
LyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ0NjY4Ci0gICAgICAg
ICAgICBtX2ppdC5ncmFwaCgpLnJlZ2lzdGVyQW5kV2F0Y2hTdHJ1Y3R1cmVUcmFuc2l0aW9uKGds
b2JhbE9iamVjdC0+c3RyaW5nUHJvdG90eXBlKCktPnN0cnVjdHVyZSgqbV9qaXQudm0oKSkpOwot
ICAgICAgICAgICAgbV9qaXQuZ3JhcGgoKS5yZWdpc3RlckFuZFdhdGNoU3RydWN0dXJlVHJhbnNp
dGlvbihnbG9iYWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgpLT5zdHJ1Y3R1cmUoKm1faml0LnZt
KCkpKTsKKyAgICAgICAgICAgIG1faml0LmdyYXBoKCkucmVnaXN0ZXJBbmRXYXRjaFN0cnVjdHVy
ZVRyYW5zaXRpb24oZ2xvYmFsT2JqZWN0LT5zdHJpbmdQcm90b3R5cGUoKS0+c3RydWN0dXJlKHZt
KSk7CisgICAgICAgICAgICBtX2ppdC5ncmFwaCgpLnJlZ2lzdGVyQW5kV2F0Y2hTdHJ1Y3R1cmVU
cmFuc2l0aW9uKGdsb2JhbE9iamVjdC0+b2JqZWN0UHJvdG90eXBlKCktPnN0cnVjdHVyZSh2bSkp
OwogICAgICAgICAgICAgcHJvdG90eXBlQ2hhaW5Jc1NhbmUgPSBnbG9iYWxPYmplY3QtPnN0cmlu
Z1Byb3RvdHlwZUNoYWluSXNTYW5lKCk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKHByb3RvdHlw
ZUNoYWluSXNTYW5lKSB7CkBAIC0yMjk4LDcgKzIzMDEsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlRnJvbUNoYXJDb2RlCiAKICAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd0Nh
c2VzOwogICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6
OkFib3ZlLCBwcm9wZXJ0eVJlZywgVHJ1c3RlZEltbTMyKG1heFNpbmdsZUNoYXJhY3RlclN0cmlu
ZykpKTsKLSAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIobV9qaXQudm0oKS0+c21hbGxTdHJp
bmdzLnNpbmdsZUNoYXJhY3RlclN0cmluZ3MoKSksIHNtYWxsU3RyaW5nc1JlZyk7CisgICAgbV9q
aXQubW92ZShUcnVzdGVkSW1tUHRyKHZtKCkuc21hbGxTdHJpbmdzLnNpbmdsZUNoYXJhY3RlclN0
cmluZ3MoKSksIHNtYWxsU3RyaW5nc1JlZyk7CiAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6QmFzZUluZGV4KHNtYWxsU3RyaW5nc1JlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1i
bGVyOjpTY2FsZVB0ciwgMCksIHNjcmF0Y2hSZWcpOwogCiAgICAgc2xvd0Nhc2VzLmFwcGVuZCht
X2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHNjcmF0Y2hSZWcpKTsKQEAg
LTY3MDUsNyArNjcwOCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTdHJpbmdaZXJv
TGUKICAgICBHUFJUZW1wb3JhcnkgZXEodGhpcyk7CiAgICAgR1BSUmVnIGVxR1BSID0gZXEuZ3By
KCk7CiAKLSAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1faml0Lmdy
YXBoKCksIGpzRW1wdHlTdHJpbmcobV9qaXQudm0oKSkpLCBlcUdQUik7CisgICAgbV9qaXQubW92
ZShUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2ppdC5ncmFwaCgpLCBqc0VtcHR5U3RyaW5n
KHZtKCkpKSwgZXFHUFIpOwogICAgIG1faml0LmNvbXBhcmVQdHIoQ0NhbGxIZWxwZXJzOjpFcXVh
bCwgc3RyR1BSLCBlcUdQUiwgZXFHUFIpOwogICAgIHVuYmxlc3NlZEJvb2xlYW5SZXN1bHQoZXFH
UFIsIG5vZGUpOwogfQpAQCAtNjcyMiw3ICs2NzI1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZUxvZ2ljYWxOb3RTdAogICAgIERGR19UWVBFX0NIRUNLKAogICAgICAgICB2YWx1ZVJl
Z3MsIG5vZGUtPmNoaWxkMSgpLCAoflNwZWNDZWxsQ2hlY2spIHwgU3BlY1N0cmluZywgbV9qaXQu
YnJhbmNoSWZOb3RTdHJpbmcoY2VsbEdQUikpOwogCi0gICAgbV9qaXQubW92ZShUcnVzdGVkSW1t
UHRyOjp3ZWFrUG9pbnRlcihtX2ppdC5ncmFwaCgpLCBqc0VtcHR5U3RyaW5nKG1faml0LnZtKCkp
KSwgdGVtcEdQUik7CisgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlciht
X2ppdC5ncmFwaCgpLCBqc0VtcHR5U3RyaW5nKHZtKCkpKSwgdGVtcEdQUik7CiAgICAgbV9qaXQu
Y29tcGFyZVB0cihDQ2FsbEhlbHBlcnM6OkVxdWFsLCBjZWxsR1BSLCB0ZW1wR1BSLCB0ZW1wR1BS
KTsKICAgICBhdXRvIGRvbmUgPSBtX2ppdC5qdW1wKCk7CiAKQEAgLTY3NDQsNyArNjc0Nyw3IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRTdHJpbmdCcmFuY2goRWQKIAogICAgIHNwZWN1bGF0
ZVN0cmluZyhub2RlVXNlLCBzdHJHUFIpOwogCi0gICAgYnJhbmNoUHRyKENDYWxsSGVscGVyczo6
RXF1YWwsIHN0ckdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9qaXQuZ3JhcGgoKSwg
anNFbXB0eVN0cmluZyhtX2ppdC52bSgpKSksIG5vdFRha2VuKTsKKyAgICBicmFuY2hQdHIoQ0Nh
bGxIZWxwZXJzOjpFcXVhbCwgc3RyR1BSLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2pp
dC5ncmFwaCgpLCBqc0VtcHR5U3RyaW5nKHZtKCkpKSwgbm90VGFrZW4pOwogICAgIGp1bXAodGFr
ZW4pOwogCiAgICAgbm9SZXN1bHQobV9jdXJyZW50Tm9kZSk7CkBAIC02NzYxLDcgKzY3NjQsNyBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0U3RyaW5nT3JPdGhlckJyCiAgICAgR1BSUmVnIGNl
bGxHUFIgPSB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpOwogICAgIERGR19UWVBFX0NIRUNLKHZhbHVl
UmVncywgbm9kZVVzZSwgKH5TcGVjQ2VsbENoZWNrKSB8IFNwZWNTdHJpbmcsIG1faml0LmJyYW5j
aElmTm90U3RyaW5nKGNlbGxHUFIpKTsKIAotICAgIGJyYW5jaFB0cihDQ2FsbEhlbHBlcnM6OkVx
dWFsLCBjZWxsR1BSLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2ppdC5ncmFwaCgpLCBq
c0VtcHR5U3RyaW5nKG1faml0LnZtKCkpKSwgbm90VGFrZW4pOworICAgIGJyYW5jaFB0cihDQ2Fs
bEhlbHBlcnM6OkVxdWFsLCBjZWxsR1BSLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2pp
dC5ncmFwaCgpLCBqc0VtcHR5U3RyaW5nKHZtKCkpKSwgbm90VGFrZW4pOwogICAgIGp1bXAodGFr
ZW4sIEZvcmNlSnVtcCk7CiAKICAgICBub3RDZWxsLmxpbmsoJm1faml0KTsKQEAgLTY3OTQsOCAr
Njc5Nyw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNhZ2VUeXBlZEFycmF5U3RvcmEKICAgICAg
ICAgcmV0dXJuOwogICAgIAogICAgIGlmIChHaWdhY2FnZTo6Y2FuUHJpbWl0aXZlR2lnYWNhZ2VC
ZURpc2FibGVkKCkpIHsKLSAgICAgICAgaWYgKG1faml0LnZtKCktPnByaW1pdGl2ZUdpZ2FjYWdl
RW5hYmxlZCgpLmlzU3RpbGxWYWxpZCgpKQotICAgICAgICAgICAgbV9qaXQuZ3JhcGgoKS53YXRj
aHBvaW50cygpLmFkZExhemlseShtX2ppdC52bSgpLT5wcmltaXRpdmVHaWdhY2FnZUVuYWJsZWQo
KSk7CisgICAgICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CisgICAgICAgIGlmICh2bS5wcmltaXRp
dmVHaWdhY2FnZUVuYWJsZWQoKS5pc1N0aWxsVmFsaWQoKSkKKyAgICAgICAgICAgIG1faml0Lmdy
YXBoKCkud2F0Y2hwb2ludHMoKS5hZGRMYXppbHkodm0ucHJpbWl0aXZlR2lnYWNhZ2VFbmFibGVk
KCkpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtNzAzMiw3
ICs3MDM2LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEdsb2JhbE9iagogICAg
IFNwZWN1bGF0ZUNlbGxPcGVyYW5kIG9iamVjdCh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAg
R1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlz
KTsKLSAgICBtX2ppdC5lbWl0TG9hZFN0cnVjdHVyZSgqbV9qaXQudm0oKSwgb2JqZWN0Lmdwcigp
LCByZXN1bHQuZ3ByKCksIHNjcmF0Y2guZ3ByKCkpOworICAgIG1faml0LmVtaXRMb2FkU3RydWN0
dXJlKHZtKCksIG9iamVjdC5ncHIoKSwgcmVzdWx0LmdwcigpLCBzY3JhdGNoLmdwcigpKTsKICAg
ICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKHJlc3VsdC5ncHIoKSwgU3RydWN0
dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlc3VsdC5ncHIoKSk7CiAgICAgY2VsbFJlc3Vs
dChyZXN1bHQuZ3ByKCksIG5vZGUpOwogfQpAQCAtNzIwNCw3ICs3MjA4LDcgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZU5ld0Z1bmN0aW9uQwogICAgIG1faml0LnN0b3JlUHRyKFRydXN0
ZWRJbW1QdHIobnVsbHB0ciksIEpJVENvbXBpbGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgSlNGdW5j
dGlvbjo6b2Zmc2V0T2ZSYXJlRGF0YSgpKSk7CiAgICAgCiAgICAgaWYgKGV4ZWN1dGFibGUtPmlz
QW5vbnltb3VzQnVpbHRpbkZ1bmN0aW9uKCkpIHsKLSAgICAgICAgVk0mIHZtID0gKm1faml0LnZt
KCk7CisgICAgICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgICAgIG1faml0Lm11dGF0b3JG
ZW5jZSh2bSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSBhbGxvY2F0b3IodGhpcyk7CiAgICAgICAg
IEFsbG9jYXRvciBhbGxvY2F0b3JWYWx1ZSA9IGFsbG9jYXRvckZvck5vblZpcnR1YWxDb25jdXJy
ZW50bHk8RnVuY3Rpb25SYXJlRGF0YT4odm0sIHNpemVvZihGdW5jdGlvblJhcmVEYXRhKSwgQWxs
b2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOwpAQCAtNzIyMyw3ICs3MjI3LDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5ld0Z1bmN0aW9uQwogICAgICAgICBtX2ppdC5t
dXRhdG9yRmVuY2Uodm0pOwogICAgICAgICBtX2ppdC5zdG9yZVB0cihzY3JhdGNoMUdQUiwgSklU
Q29tcGlsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlJhcmVEYXRh
KCkpKTsKICAgICB9IGVsc2UKLSAgICAgICAgbV9qaXQubXV0YXRvckZlbmNlKCptX2ppdC52bSgp
KTsKKyAgICAgICAgbV9qaXQubXV0YXRvckZlbmNlKHZtKCkpOwogCiB9CiAKQEAgLTc1MTIsNyAr
NzUxNiw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDcmVhdGVBY3RpdmEKICAgICAg
ICAgICAgICAgICByZXN1bHRHUFIsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlh
YmxlKFNjb3BlT2Zmc2V0KGkpKSkpOwogICAgIH0KICAgICAKLSAgICBtX2ppdC5tdXRhdG9yRmVu
Y2UoKm1faml0LnZtKCkpOworICAgIG1faml0Lm11dGF0b3JGZW5jZSh2bSgpKTsKIAogI2lmIFVT
RShKU1ZBTFVFNjQpCiAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCkBAIC03Njc3LDcgKzc2ODEs
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ3JlYXRlRGlyZWN0CiAgICAgICAgICAg
ICBkb25lLmxpbmsoJm1faml0KTsKICAgICB9CiAgICAgICAgIAotICAgIG1faml0Lm11dGF0b3JG
ZW5jZSgqbV9qaXQudm0oKSk7CisgICAgbV9qaXQubXV0YXRvckZlbmNlKHZtKCkpOwogICAgICAg
ICAKICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CiB9CkBAIC03ODk3LDcgKzc5MDEs
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlU3ByZWFkKE5vZGUqCiAgICAgICAgIG1f
aml0LmxzaGlmdDMyKFRydXN0ZWRJbW0zMigzKSwgc2NyYXRjaDFHUFIpOwogICAgICAgICBtX2pp
dC5hZGQzMihUcnVzdGVkSW1tMzIoSlNGaXhlZEFycmF5OjpvZmZzZXRPZkRhdGEoKSksIHNjcmF0
Y2gxR1BSKTsKIAotICAgICAgICBtX2ppdC5lbWl0QWxsb2NhdGVWYXJpYWJsZVNpemVkQ2VsbDxK
U0ZpeGVkQXJyYXk+KCptX2ppdC52bSgpLCByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHIobV9qaXQu
Z3JhcGgoKS5yZWdpc3RlclN0cnVjdHVyZShtX2ppdC5ncmFwaCgpLm1fdm0uZml4ZWRBcnJheVN0
cnVjdHVyZS5nZXQoKSkpLCBzY3JhdGNoMUdQUiwgc2NyYXRjaDFHUFIsIHNjcmF0Y2gyR1BSLCBz
bG93UGF0aCk7CisgICAgICAgIG1faml0LmVtaXRBbGxvY2F0ZVZhcmlhYmxlU2l6ZWRDZWxsPEpT
Rml4ZWRBcnJheT4odm0oKSwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyKG1faml0LmdyYXBoKCku
cmVnaXN0ZXJTdHJ1Y3R1cmUobV9qaXQuZ3JhcGgoKS5tX3ZtLmZpeGVkQXJyYXlTdHJ1Y3R1cmUu
Z2V0KCkpKSwgc2NyYXRjaDFHUFIsIHNjcmF0Y2gxR1BSLCBzY3JhdGNoMkdQUiwgc2xvd1BhdGgp
OwogICAgICAgICBtX2ppdC5zdG9yZTMyKGxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3MocmVzdWx0R1BSLCBKU0ZpeGVkQXJyYXk6Om9mZnNldE9mU2l6ZSgpKSk7CiAKICAgICAgICAg
bV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhhcmd1bWVudCwgSlNPYmplY3Q6
OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaDFHUFIpOwpAQCAtNzkzOCw3ICs3OTQyLDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVNwcmVhZChOb2RlKgogICAgICAgICAgICAgZG9u
ZS5hcHBlbmQobV9qaXQuanVtcCgpKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgbV9q
aXQubXV0YXRvckZlbmNlKCptX2ppdC52bSgpKTsKKyAgICAgICAgbV9qaXQubXV0YXRvckZlbmNl
KHZtKCkpOwogCiAgICAgICAgIHNsb3dQYXRoLmxpbmsoJm1faml0KTsKICAgICAgICAgYWRkU2xv
d1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKG1faml0Lmp1bXAoKSwgdGhpcywgb3BlcmF0aW9u
U3ByZWFkRmFzdEFycmF5LCByZXN1bHRHUFIsIGFyZ3VtZW50KSk7CkBAIC04MDQ5LDcgKzgwNTMs
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTmV3QXJyYXkoTm9kCiAgICAgfQogCiAg
ICAgc2l6ZV90IHNjcmF0Y2hTaXplID0gc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSAqIG5vZGUtPm51
bUNoaWxkcmVuKCk7Ci0gICAgU2NyYXRjaEJ1ZmZlciogc2NyYXRjaEJ1ZmZlciA9IG1faml0LnZt
KCktPnNjcmF0Y2hCdWZmZXJGb3JTaXplKHNjcmF0Y2hTaXplKTsKKyAgICBTY3JhdGNoQnVmZmVy
KiBzY3JhdGNoQnVmZmVyID0gdm0oKS5zY3JhdGNoQnVmZmVyRm9yU2l6ZShzY3JhdGNoU2l6ZSk7
CiAgICAgRW5jb2RlZEpTVmFsdWUqIGJ1ZmZlciA9IHNjcmF0Y2hCdWZmZXIgPyBzdGF0aWNfY2Fz
dDxFbmNvZGVkSlNWYWx1ZSo+KHNjcmF0Y2hCdWZmZXItPmRhdGFCdWZmZXIoKSkgOiBudWxscHRy
OwogCiAgICAgZm9yICh1bnNpZ25lZCBvcGVyYW5kSWR4ID0gMDsgb3BlcmFuZElkeCA8IG5vZGUt
Pm51bUNoaWxkcmVuKCk7ICsrb3BlcmFuZElkeCkgewpAQCAtODIyMSw3ICs4MjI1LDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5ld0FycmF5V2l0aAogCiAgICAgQVNTRVJUKG5vZGUt
Pm51bUNoaWxkcmVuKCkpOwogICAgIHNpemVfdCBzY3JhdGNoU2l6ZSA9IHNpemVvZihFbmNvZGVk
SlNWYWx1ZSkgKiBub2RlLT5udW1DaGlsZHJlbigpOwotICAgIFNjcmF0Y2hCdWZmZXIqIHNjcmF0
Y2hCdWZmZXIgPSBtX2ppdC52bSgpLT5zY3JhdGNoQnVmZmVyRm9yU2l6ZShzY3JhdGNoU2l6ZSk7
CisgICAgU2NyYXRjaEJ1ZmZlciogc2NyYXRjaEJ1ZmZlciA9IHZtKCkuc2NyYXRjaEJ1ZmZlckZv
clNpemUoc2NyYXRjaFNpemUpOwogICAgIEVuY29kZWRKU1ZhbHVlKiBidWZmZXIgPSBzdGF0aWNf
Y2FzdDxFbmNvZGVkSlNWYWx1ZSo+KHNjcmF0Y2hCdWZmZXItPmRhdGFCdWZmZXIoKSk7CiAKICAg
ICBCaXRWZWN0b3IqIGJpdFZlY3RvciA9IG5vZGUtPmJpdFZlY3RvcigpOwpAQCAtODQzNCw3ICs4
NDM4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFycmF5U2xpY2UoTgogICAgICAg
ICAgICAgZW1pdEFsbG9jYXRlQnV0dGVyZmx5KHN0b3JhZ2VSZXN1bHRHUFIsIHNpemVHUFIsIHNj
cmF0Y2hHUFIsIHNjcmF0Y2gyR1BSLCByZXN1bHRHUFIsIHNsb3dDYXNlcyk7CiAgICAgICAgICAg
ICBlbWl0SW5pdGlhbGl6ZUJ1dHRlcmZseShzdG9yYWdlUmVzdWx0R1BSLCBzaXplR1BSLCBlbXB0
eVZhbHVlUmVncywgc2NyYXRjaEdQUik7CiAgICAgICAgICAgICBlbWl0QWxsb2NhdGVKU09iamVj
dDxKU0FycmF5PihyZXN1bHRHUFIsIHRlbXBWYWx1ZSwgc3RvcmFnZVJlc3VsdEdQUiwgc2NyYXRj
aEdQUiwgc2NyYXRjaDJHUFIsIHNsb3dDYXNlcyk7Ci0gICAgICAgICAgICBtX2ppdC5tdXRhdG9y
RmVuY2UoKm1faml0LnZtKCkpOworICAgICAgICAgICAgbV9qaXQubXV0YXRvckZlbmNlKHZtKCkp
OwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5q
dW1wKCkpOwogICAgICAgICB9CkBAIC04Nzc4LDcgKzg3ODIsNyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlQXJyYXlQdXNoKE5vCiAgICAgICAgIHNsb3dQYXRoLmxpbmsoJm1faml0KTsK
IAogICAgICAgICBzaXplX3Qgc2NyYXRjaFNpemUgPSBzaXplb2YoRW5jb2RlZEpTVmFsdWUpICog
ZWxlbWVudENvdW50OwotICAgICAgICBTY3JhdGNoQnVmZmVyKiBzY3JhdGNoQnVmZmVyID0gbV9q
aXQudm0oKS0+c2NyYXRjaEJ1ZmZlckZvclNpemUoc2NyYXRjaFNpemUpOworICAgICAgICBTY3Jh
dGNoQnVmZmVyKiBzY3JhdGNoQnVmZmVyID0gdm0oKS5zY3JhdGNoQnVmZmVyRm9yU2l6ZShzY3Jh
dGNoU2l6ZSk7CiAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cihzdGF0aWNfY2FzdDxF
bmNvZGVkSlNWYWx1ZSo+KHNjcmF0Y2hCdWZmZXItPmRhdGFCdWZmZXIoKSkpLCBidWZmZXJHUFIp
OwogICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIoc2NyYXRjaEJ1ZmZlci0+YWRkcmVz
c09mQWN0aXZlTGVuZ3RoKCkpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKICAgICAgICAgbV9qaXQuc3Rv
cmVQdHIoVHJ1c3RlZEltbVB0cihzY3JhdGNoU2l6ZSksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KHN0b3JhZ2VMZW5ndGhHUFIpKTsKQEAgLTg4NTIsNyArODg1Niw3IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVBcnJheVB1c2goTm8KICAgICAgICAgc2xvd1BhdGgubGluaygmbV9qaXQp
OwogCiAgICAgICAgIHNpemVfdCBzY3JhdGNoU2l6ZSA9IHNpemVvZihkb3VibGUpICogZWxlbWVu
dENvdW50OwotICAgICAgICBTY3JhdGNoQnVmZmVyKiBzY3JhdGNoQnVmZmVyID0gbV9qaXQudm0o
KS0+c2NyYXRjaEJ1ZmZlckZvclNpemUoc2NyYXRjaFNpemUpOworICAgICAgICBTY3JhdGNoQnVm
ZmVyKiBzY3JhdGNoQnVmZmVyID0gdm0oKS5zY3JhdGNoQnVmZmVyRm9yU2l6ZShzY3JhdGNoU2l6
ZSk7CiAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cihzdGF0aWNfY2FzdDxFbmNvZGVk
SlNWYWx1ZSo+KHNjcmF0Y2hCdWZmZXItPmRhdGFCdWZmZXIoKSkpLCBidWZmZXJHUFIpOwogICAg
ICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIoc2NyYXRjaEJ1ZmZlci0+YWRkcmVzc09mQWN0
aXZlTGVuZ3RoKCkpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKICAgICAgICAgbV9qaXQuc3RvcmVQdHIo
VHJ1c3RlZEltbVB0cihzY3JhdGNoU2l6ZSksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3Jh
Z2VMZW5ndGhHUFIpKTsKQEAgLTg5MzMsNyArODkzNyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVBcnJheVB1c2goTm8KICAgICAgICAgc2xvd1BhdGgubGluaygmbV9qaXQpOwogCiAg
ICAgICAgIHNpemVfdCBzY3JhdGNoU2l6ZSA9IHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKiBlbGVt
ZW50Q291bnQ7Ci0gICAgICAgIFNjcmF0Y2hCdWZmZXIqIHNjcmF0Y2hCdWZmZXIgPSBtX2ppdC52
bSgpLT5zY3JhdGNoQnVmZmVyRm9yU2l6ZShzY3JhdGNoU2l6ZSk7CisgICAgICAgIFNjcmF0Y2hC
dWZmZXIqIHNjcmF0Y2hCdWZmZXIgPSB2bSgpLnNjcmF0Y2hCdWZmZXJGb3JTaXplKHNjcmF0Y2hT
aXplKTsKICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKHN0YXRpY19jYXN0PEVuY29k
ZWRKU1ZhbHVlKj4oc2NyYXRjaEJ1ZmZlci0+ZGF0YUJ1ZmZlcigpKSksIGJ1ZmZlckdQUik7CiAg
ICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cihzY3JhdGNoQnVmZmVyLT5hZGRyZXNzT2ZB
Y3RpdmVMZW5ndGgoKSksIHN0b3JhZ2VMZW5ndGhHUFIpOwogICAgICAgICBtX2ppdC5zdG9yZVB0
cihUcnVzdGVkSW1tUHRyKHNjcmF0Y2hTaXplKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3Rv
cmFnZUxlbmd0aEdQUikpOwpAQCAtOTEwMiw3ICs5MTA2LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZVR5cGVPZihOb2RlKgogICAgIG1faml0LmVtaXRUeXBlT2YoCiAgICAgICAgIHZh
bHVlUmVncywgcmVzdWx0R1BSLAogICAgICAgICBbJl0gKFR5cGVvZlR5cGUgdHlwZSwgYm9vbCBm
YWxsc1Rocm91Z2gpIHsKLSAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cjo6d2Vh
a1BvaW50ZXIobV9qaXQuZ3JhcGgoKSwgbV9qaXQudm0oKS0+c21hbGxTdHJpbmdzLnR5cGVTdHJp
bmcodHlwZSkpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1t
UHRyOjp3ZWFrUG9pbnRlcihtX2ppdC5ncmFwaCgpLCB2bSgpLnNtYWxsU3RyaW5ncy50eXBlU3Ry
aW5nKHR5cGUpKSwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIGlmICghZmFsbHNUaHJvdWdoKQog
ICAgICAgICAgICAgICAgIGRvbmUuYXBwZW5kKG1faml0Lmp1bXAoKSk7CiAgICAgICAgIH0sCkBA
IC05MjE2LDcgKzkyMjAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQWxsb2NhdGVQ
cm9wCiAgICAgCiAgICAgc2l6ZV90IHNpemUgPSBpbml0aWFsT3V0T2ZMaW5lQ2FwYWNpdHkgKiBz
aXplb2YoSlNWYWx1ZSk7CiAKLSAgICBBbGxvY2F0b3IgYWxsb2NhdG9yID0gbV9qaXQudm0oKS0+
anNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdG9yRm9yTm9uVmlydHVhbChzaXpl
LCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CisgICAgQWxsb2NhdG9yIGFs
bG9jYXRvciA9IHZtKCkuanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdG9yRm9y
Tm9uVmlydHVhbChzaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CiAK
ICAgICBpZiAoIWFsbG9jYXRvciB8fCBub2RlLT50cmFuc2l0aW9uKCktPnByZXZpb3VzLT5jb3Vs
ZEhhdmVJbmRleGluZ0hlYWRlcigpKSB7CiAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJh
c2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwpAQCAtOTI2MCw3ICs5MjY0LDcgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZVJlYWxsb2NhdGVQcgogICAgIHNpemVfdCBuZXdTaXplID0gb2xk
U2l6ZSAqIG91dE9mTGluZUdyb3d0aEZhY3RvcjsKICAgICBBU1NFUlQobmV3U2l6ZSA9PSBub2Rl
LT50cmFuc2l0aW9uKCktPm5leHQtPm91dE9mTGluZUNhcGFjaXR5KCkgKiBzaXplb2YoSlNWYWx1
ZSkpOwogICAgIAotICAgIEFsbG9jYXRvciBhbGxvY2F0b3IgPSBtX2ppdC52bSgpLT5qc1ZhbHVl
R2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKG5ld1NpemUsIEFs
bG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKKyAgICBBbGxvY2F0b3IgYWxsb2Nh
dG9yID0gdm0oKS5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0b3JGb3JOb25W
aXJ0dWFsKG5ld1NpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKIAog
ICAgIGlmICghYWxsb2NhdG9yIHx8IG5vZGUtPnRyYW5zaXRpb24oKS0+cHJldmlvdXMtPmNvdWxk
SGF2ZUluZGV4aW5nSGVhZGVyKCkpIHsKICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFz
ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CkBAIC05MzE1LDcgKzkzMTksNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlTnVrZVN0cnVjdHVyCiAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNl
LmdwcigpOwogICAgIEdQUlJlZyBzdG9yYWdlR1BSID0gc3RvcmFnZS5ncHIoKTsKIAotICAgIG1f
aml0Lm51a2VTdHJ1Y3R1cmVBbmRTdG9yZUJ1dHRlcmZseSgqbV9qaXQudm0oKSwgc3RvcmFnZUdQ
UiwgYmFzZUdQUik7CisgICAgbV9qaXQubnVrZVN0cnVjdHVyZUFuZFN0b3JlQnV0dGVyZmx5KHZt
KCksIHN0b3JhZ2VHUFIsIGJhc2VHUFIpOwogICAgIAogICAgIG5vUmVzdWx0KG5vZGUpOwogfQpA
QCAtOTQ0NSw3ICs5NDQ5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNhbGxET01H
ZXR0ZQogCiAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CiAgICAgICAgIG1faml0LnNldHVwQXJn
dW1lbnRzPEpfSklUT3BlcmF0aW9uX0VKST4oQ0NhbGxIZWxwZXJzOjpDZWxsVmFsdWUoYmFzZUdQ
UiksIGlkZW50aWZpZXJVSUQobm9kZS0+Y2FsbERPTUdldHRlckRhdGEoKS0+aWRlbnRpZmllck51
bWJlcikpOwotICAgICAgICBtX2ppdC5zdG9yZVB0cihHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rl
ciwgJm1faml0LnZtKCktPnRvcENhbGxGcmFtZSk7CisgICAgICAgIG1faml0LnN0b3JlUHRyKEdQ
UkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCAmdm0oKS50b3BDYWxsRnJhbWUpOwogICAgICAgICBt
X2ppdC5lbWl0U3RvcmVDb2RlT3JpZ2luKG1fY3VycmVudE5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7
CiAgICAgICAgIG1faml0LmFwcGVuZENhbGwoZ2V0dGVyLnJldGFnZ2VkPENGdW5jdGlvblB0clRh
Zz4oKSk7CiAgICAgICAgIG1faml0LnNldHVwUmVzdWx0cyhyZXN1bHRSZWdzKTsKQEAgLTk0OTMs
NyArOTQ5Nyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDaGVja1N1YkNsYXMKICAg
ICAgICAgR1BSUmVnIG90aGVyR1BSID0gb3RoZXIuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyBzcGVj
aWZpZWRHUFIgPSBzcGVjaWZpZWQuZ3ByKCk7CiAKLSAgICAgICAgbV9qaXQuZW1pdExvYWRTdHJ1
Y3R1cmUoKm1faml0LnZtKCksIGJhc2VHUFIsIG90aGVyR1BSLCBzcGVjaWZpZWRHUFIpOworICAg
ICAgICBtX2ppdC5lbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCBiYXNlR1BSLCBvdGhlckdQUiwgc3Bl
Y2lmaWVkR1BSKTsKICAgICAgICAgbV9qaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
b3RoZXJHUFIsIFN0cnVjdHVyZTo6Y2xhc3NJbmZvT2Zmc2V0KCkpLCBvdGhlckdQUik7CiAgICAg
ICAgIG1faml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG5vZGUtPmNsYXNzSW5m
bygpKSwgc3BlY2lmaWVkR1BSKTsKIApAQCAtOTgwMiw3ICs5ODA2LDcgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZU5ld1N0cmluZ09iagogICAgICAgICBKSVRDb21waWxlcjo6QWRkcmVz
cyhyZXN1bHRHUFIsIEpTV3JhcHBlck9iamVjdDo6aW50ZXJuYWxWYWx1ZU9mZnNldCgpICsgT0JK
RUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSk7CiAjZW5kaWYKICAgICAK
LSAgICBtX2ppdC5tdXRhdG9yRmVuY2UoKm1faml0LnZtKCkpOworICAgIG1faml0Lm11dGF0b3JG
ZW5jZSh2bSgpKTsKICAgICAKICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aENhbGwo
CiAgICAgICAgIHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRpb25OZXdTdHJpbmdPYmplY3QsIHJlc3Vs
dEdQUiwgb3BlcmFuZEdQUiwgbm9kZS0+c3RydWN0dXJlKCkpKTsKQEAgLTk4NjksNyArOTg3Myw3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVOZXdUeXBlZEFycmEKICAgICAgICAgbV9q
aXQuYW5kMzIoVHJ1c3RlZEltbTMyKH43KSwgc2NyYXRjaEdQUik7CiAgICAgfQogICAgIG1faml0
LmVtaXRBbGxvY2F0ZVZhcmlhYmxlU2l6ZWQoCi0gICAgICAgIHN0b3JhZ2VHUFIsIG1faml0LnZt
KCktPnByaW1pdGl2ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UsIHNjcmF0Y2hHUFIsIHNjcmF0Y2hH
UFIsCisgICAgICAgIHN0b3JhZ2VHUFIsIHZtKCkucHJpbWl0aXZlR2lnYWNhZ2VBdXhpbGlhcnlT
cGFjZSwgc2NyYXRjaEdQUiwgc2NyYXRjaEdQUiwKICAgICAgICAgc2NyYXRjaEdQUjIsIHNsb3dD
YXNlcyk7CiAgICAgCiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9uZSA9IG1faml0LmJyYW5j
aFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgc2l6ZUdQUik7CkBAIC05OTEyLDcgKzk5MTYs
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTmV3VHlwZWRBcnJhCiAgICAgICAgIFRy
dXN0ZWRJbW0zMihGYXN0VHlwZWRBcnJheSksCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHJlc3VsdEdQUiwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mTW9kZSgpKSk7CiAgICAg
Ci0gICAgbV9qaXQubXV0YXRvckZlbmNlKCptX2ppdC52bSgpKTsKKyAgICBtX2ppdC5tdXRhdG9y
RmVuY2Uodm0oKSk7CiAgICAgCiAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxs
KAogICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbk5ld1R5cGVkQXJyYXlXaXRoU2l6
ZUZvclR5cGUodHlwZWRBcnJheVR5cGUpLApAQCAtOTk0NSw3ICs5OTQ5LDcgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZU5ld1JlZ2V4cChObwogICAgICAgICBUcnVzdGVkSW1tUHRyKG5v
ZGUtPmNlbGxPcGVyYW5kKCkpLAogICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MocmVzdWx0
R1BSLCBSZWdFeHBPYmplY3Q6Om9mZnNldE9mUmVnRXhwQW5kTGFzdEluZGV4SXNOb3RXcml0YWJs
ZUZsYWcoKSkpOwogICAgIG1faml0LnN0b3JlVmFsdWUobGFzdEluZGV4UmVncywgQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKHJlc3VsdEdQUiwgUmVnRXhwT2JqZWN0OjpvZmZzZXRPZkxhc3RJbmRleCgp
KSk7Ci0gICAgbV9qaXQubXV0YXRvckZlbmNlKCptX2ppdC52bSgpKTsKKyAgICBtX2ppdC5tdXRh
dG9yRmVuY2Uodm0oKSk7CiAKICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aENhbGwo
c2xvd1BhdGgsIHRoaXMsIG9wZXJhdGlvbk5ld1JlZ2V4cFdpdGhMYXN0SW5kZXgsIHJlc3VsdEdQ
UiwgcmVnZXhwLCBsYXN0SW5kZXhSZWdzKSk7CiAKQEAgLTExMDg3LDkgKzExMDkxLDkgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVN0b3JlQmFycmllcgogICAgIEpJVENvbXBpbGVyOjpK
dW1wTGlzdCBvazsKICAgICAKICAgICBpZiAoaXNGZW5jZWQpIHsKLSAgICAgICAgb2suYXBwZW5k
KG1faml0LmJhcnJpZXJCcmFuY2goKm1faml0LnZtKCksIGJhc2VHUFIsIHNjcmF0Y2gxR1BSKSk7
CisgICAgICAgIG9rLmFwcGVuZChtX2ppdC5iYXJyaWVyQnJhbmNoKHZtKCksIGJhc2VHUFIsIHNj
cmF0Y2gxR1BSKSk7CiAgICAgICAgIAotICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBub0ZlbmNl
ID0gbV9qaXQuanVtcElmTXV0YXRvckZlbmNlTm90TmVlZGVkKCptX2ppdC52bSgpKTsKKyAgICAg
ICAgSklUQ29tcGlsZXI6Okp1bXAgbm9GZW5jZSA9IG1faml0Lmp1bXBJZk11dGF0b3JGZW5jZU5v
dE5lZWRlZCh2bSgpKTsKICAgICAgICAgbV9qaXQubWVtb3J5RmVuY2UoKTsKICAgICAgICAgb2su
YXBwZW5kKG1faml0LmJhcnJpZXJCcmFuY2hXaXRob3V0RmVuY2UoYmFzZUdQUikpOwogICAgICAg
ICBub0ZlbmNlLmxpbmsoJm1faml0KTsKQEAgLTExNDIwLDcgKzExNDI0LDcgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZVN0cmluZ1JlcGxhYwogICAgIGlmIChub2RlLT5jaGlsZDEoKS51
c2VLaW5kKCkgPT0gU3RyaW5nVXNlCiAgICAgICAgICYmIG5vZGUtPmNoaWxkMigpLnVzZUtpbmQo
KSA9PSBSZWdFeHBPYmplY3RVc2UKICAgICAgICAgJiYgbm9kZS0+Y2hpbGQzKCkudXNlS2luZCgp
ID09IFN0cmluZ1VzZSkgewotICAgICAgICBpZiAoSlNTdHJpbmcqIHJlcGxhY2UgPSBub2RlLT5j
aGlsZDMoKS0+ZHluYW1pY0Nhc3RDb25zdGFudDxKU1N0cmluZyo+KCptX2ppdC52bSgpKSkgewor
ICAgICAgICBpZiAoSlNTdHJpbmcqIHJlcGxhY2UgPSBub2RlLT5jaGlsZDMoKS0+ZHluYW1pY0Nh
c3RDb25zdGFudDxKU1N0cmluZyo+KHZtKCkpKSB7CiAgICAgICAgICAgICBpZiAoIXJlcGxhY2Ut
Pmxlbmd0aCgpKSB7CiAgICAgICAgICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgc3RyaW5n
KHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgICAgICBTcGVjdWxhdGVDZWxsT3Bl
cmFuZCByZWdFeHAodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwpAQCAtMTE1NTQsNyArMTE1NTgsNyBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTGF6eUpTQ29uc3RhCiB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlTWF0ZXJpYWxpemVOZXdPYmplY3QoTm9kZSogbm9kZSkKIHsKICAgICBS
ZWdpc3RlcmVkU3RydWN0dXJlIHN0cnVjdHVyZSA9IG5vZGUtPnN0cnVjdHVyZVNldCgpLmF0KDAp
OwotICAgIEFTU0VSVChtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIDApLT5keW5hbWlj
Q2FzdENvbnN0YW50PFN0cnVjdHVyZSo+KCptX2ppdC52bSgpKSA9PSBzdHJ1Y3R1cmUuZ2V0KCkp
OworICAgIEFTU0VSVChtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIDApLT5keW5hbWlj
Q2FzdENvbnN0YW50PFN0cnVjdHVyZSo+KHZtKCkpID09IHN0cnVjdHVyZS5nZXQoKSk7CiAKICAg
ICBPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhJiBkYXRhID0gbm9kZS0+b2JqZWN0TWF0ZXJpYWxp
emF0aW9uRGF0YSgpOwogICAgICAgICAKQEAgLTExODQyLDcgKzExODQ2LDcgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6ZW1pdEFsbG9jYXRlQnV0dGVyZgogICAgIGRpZE5vdE92ZXJmbG93Lmxpbmso
Jm1faml0KTsKICNlbmRpZgogICAgIG1faml0LmVtaXRBbGxvY2F0ZVZhcmlhYmxlU2l6ZWQoCi0g
ICAgICAgIHN0b3JhZ2VSZXN1bHRHUFIsIG1faml0LnZtKCktPmpzVmFsdWVHaWdhY2FnZUF1eGls
aWFyeVNwYWNlLCBzY3JhdGNoMiwgc2NyYXRjaDEsIHNjcmF0Y2gzLCBzbG93Q2FzZXMpOworICAg
ICAgICBzdG9yYWdlUmVzdWx0R1BSLCB2bSgpLmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNl
LCBzY3JhdGNoMiwgc2NyYXRjaDEsIHNjcmF0Y2gzLCBzbG93Q2FzZXMpOwogICAgIG1faml0LmFk
ZFB0cihUcnVzdGVkSW1tMzIoc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSksIHN0b3JhZ2VSZXN1bHRH
UFIpOwogCiAgICAgbV9qaXQuc3RvcmUzMihzaXplR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhzdG9yYWdlUmVzdWx0R1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKTsK
QEAgLTExOTM5LDEwICsxMTk0MywxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0
TWFwQnVja2V0CiAgICAgbm90QnVja2V0LmxpbmsoJm1faml0KTsKICAgICBKU0NlbGwqIHNlbnRp
bmVsID0gbnVsbHB0cjsKICAgICBpZiAobm9kZS0+YnVja2V0T3duZXJUeXBlKCkgPT0gQnVja2V0
T3duZXJUeXBlOjpNYXApCi0gICAgICAgIHNlbnRpbmVsID0gbV9qaXQudm0oKS0+c2VudGluZWxN
YXBCdWNrZXQoKTsKKyAgICAgICAgc2VudGluZWwgPSB2bSgpLnNlbnRpbmVsTWFwQnVja2V0KCk7
CiAgICAgZWxzZSB7CiAgICAgICAgIEFTU0VSVChub2RlLT5idWNrZXRPd25lclR5cGUoKSA9PSBC
dWNrZXRPd25lclR5cGU6OlNldCk7Ci0gICAgICAgIHNlbnRpbmVsID0gbV9qaXQudm0oKS0+c2Vu
dGluZWxTZXRCdWNrZXQoKTsKKyAgICAgICAgc2VudGluZWwgPSB2bSgpLnNlbnRpbmVsU2V0QnVj
a2V0KCk7CiAgICAgfQogICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIo
bV9qaXQuZ3JhcGgoKSwgc2VudGluZWwpLCByZXN1bHRHUFIpOwogICAgIGRvbmUubGluaygmbV9q
aXQpOwpAQCAtMTI1MTYsMTEgKzEyNTIwLDExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVPYmplY3RLZXlzKE4KICAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChub2RlLT5jaGlsZDEo
KSwgb2JqZWN0R1BSKTsKIAogICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93
Q2FzZXM7Ci0gICAgICAgICAgICBtX2ppdC5lbWl0TG9hZFN0cnVjdHVyZSgqbV9qaXQudm0oKSwg
b2JqZWN0R1BSLCBzdHJ1Y3R1cmVHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgbV9qaXQu
ZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgb2JqZWN0R1BSLCBzdHJ1Y3R1cmVHUFIsIHNjcmF0Y2hH
UFIpOwogICAgICAgICAgICAgbV9qaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3Ry
dWN0dXJlR1BSLCBTdHJ1Y3R1cmU6OnByZXZpb3VzT3JSYXJlRGF0YU9mZnNldCgpKSwgc2NyYXRj
aEdQUik7CiAKICAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdFB0
cihDQ2FsbEhlbHBlcnM6Olplcm8sIHNjcmF0Y2hHUFIpKTsKLSAgICAgICAgICAgIHNsb3dDYXNl
cy5hcHBlbmQobV9qaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpFcXVhbCwgQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIFRydXN0
ZWRJbW0zMihiaXR3aXNlX2Nhc3Q8aW50MzJfdD4obV9qaXQudm0oKS0+c3RydWN0dXJlU3RydWN0
dXJlLT5zdHJ1Y3R1cmVJRCgpKSkpKTsKKyAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9q
aXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpFcXVhbCwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNj
cmF0Y2hHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihiaXR3
aXNlX2Nhc3Q8aW50MzJfdD4odm0oKS5zdHJ1Y3R1cmVTdHJ1Y3R1cmUtPnN0cnVjdHVyZUlEKCkp
KSkpOwogCiAgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhz
Y3JhdGNoR1BSLCBTdHJ1Y3R1cmVSYXJlRGF0YTo6b2Zmc2V0T2ZDYWNoZWRPd25LZXlzKCkpLCBz
Y3JhdGNoR1BSKTsKIApAQCAtMTI2NjAsNyArMTI2NjQsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlQ3JlYXRlVGhpcyhOCiAKICAgICBtX2ppdC5sb2FkOChKSVRDb21waWxlcjo6QWRk
cmVzcyhzdHJ1Y3R1cmVHUFIsIFN0cnVjdHVyZTo6aW5saW5lQ2FwYWNpdHlPZmZzZXQoKSksIGlu
bGluZUNhcGFjaXR5R1BSKTsKICAgICBtX2ppdC5lbWl0SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2Uo
cmVzdWx0R1BSLCBpbmxpbmVDYXBhY2l0eUdQUik7Ci0gICAgbV9qaXQubXV0YXRvckZlbmNlKCpt
X2ppdC52bSgpKTsKKyAgICBtX2ppdC5tdXRhdG9yRmVuY2Uodm0oKSk7CiAKICAgICBhZGRTbG93
UGF0aEdlbmVyYXRvcihzbG93UGF0aENhbGwoc2xvd1BhdGgsIHRoaXMsIG9wZXJhdGlvbkNyZWF0
ZVRoaXMsIHJlc3VsdEdQUiwgY2FsbGVlR1BSLCBub2RlLT5pbmxpbmVDYXBhY2l0eSgpKSk7CiAK
QEAgLTEyNjgxLDE0ICsxMjY4NSwxNCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTmV3
T2JqZWN0KE5vCiAKICAgICBSZWdpc3RlcmVkU3RydWN0dXJlIHN0cnVjdHVyZSA9IG5vZGUtPnN0
cnVjdHVyZSgpOwogICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpTRmluYWxPYmplY3Q6OmFs
bG9jYXRpb25TaXplKHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0gICAgQWxsb2NhdG9y
IGFsbG9jYXRvclZhbHVlID0gYWxsb2NhdG9yRm9yTm9uVmlydHVhbENvbmN1cnJlbnRseTxKU0Zp
bmFsT2JqZWN0PigqbV9qaXQudm0oKSwgYWxsb2NhdGlvblNpemUsIEFsbG9jYXRvckZvck1vZGU6
OkFsbG9jYXRvcklmRXhpc3RzKTsKKyAgICBBbGxvY2F0b3IgYWxsb2NhdG9yVmFsdWUgPSBhbGxv
Y2F0b3JGb3JOb25WaXJ0dWFsQ29uY3VycmVudGx5PEpTRmluYWxPYmplY3Q+KHZtKCksIGFsbG9j
YXRpb25TaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CiAgICAgaWYg
KCFhbGxvY2F0b3JWYWx1ZSkKICAgICAgICAgc2xvd1BhdGguYXBwZW5kKG1faml0Lmp1bXAoKSk7
CiAgICAgZWxzZSB7CiAgICAgICAgIGF1dG8gYnV0dGVyZmx5ID0gVHJ1c3RlZEltbVB0cihudWxs
cHRyKTsKICAgICAgICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0R1BSLCBKSVRBbGxvY2F0
b3I6OmNvbnN0YW50KGFsbG9jYXRvclZhbHVlKSwgYWxsb2NhdG9yR1BSLCBUcnVzdGVkSW1tUHRy
KHN0cnVjdHVyZSksIGJ1dHRlcmZseSwgc2NyYXRjaEdQUiwgc2xvd1BhdGgpOwogICAgICAgICBt
X2ppdC5lbWl0SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0R1BSLCBzdHJ1Y3R1cmUtPmlu
bGluZUNhcGFjaXR5KCkpOwotICAgICAgICBtX2ppdC5tdXRhdG9yRmVuY2UoKm1faml0LnZtKCkp
OworICAgICAgICBtX2ppdC5tdXRhdG9yRmVuY2Uodm0oKSk7CiAgICAgfQogCiAgICAgYWRkU2xv
d1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRpb25OZXdP
YmplY3QsIHJlc3VsdEdQUiwgc3RydWN0dXJlKSk7CkBAIC0xMjczMSw3ICsxMjczNSw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVMb2dTaGFkb3dDaGkKICAgICBHUFJUZW1wb3Jhcnkg
c2hhZG93UGFja2V0KHRoaXMpOwogICAgIEdQUlJlZyBzaGFkb3dQYWNrZXRSZWcgPSBzaGFkb3dQ
YWNrZXQuZ3ByKCk7CiAKLSAgICBtX2ppdC5lbnN1cmVTaGFkb3dDaGlja2VuUGFja2V0KCptX2pp
dC52bSgpLCBzaGFkb3dQYWNrZXRSZWcsIHNjcmF0Y2gxUmVnLCBzY3JhdGNoMlJlZyk7CisgICAg
bV9qaXQuZW5zdXJlU2hhZG93Q2hpY2tlblBhY2tldCh2bSgpLCBzaGFkb3dQYWNrZXRSZWcsIHNj
cmF0Y2gxUmVnLCBzY3JhdGNoMlJlZyk7CiAKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBzY29w
ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgR1BSUmVnIHNjb3BlUmVnID0gc2NvcGUuZ3By
KCk7CkBAIC0xMjc1Myw3ICsxMjc1Nyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVM
b2dTaGFkb3dDaGkKICAgICBHUFJUZW1wb3Jhcnkgc2hhZG93UGFja2V0KHRoaXMpOwogICAgIEdQ
UlJlZyBzaGFkb3dQYWNrZXRSZWcgPSBzaGFkb3dQYWNrZXQuZ3ByKCk7CiAKLSAgICBtX2ppdC5l
bnN1cmVTaGFkb3dDaGlja2VuUGFja2V0KCptX2ppdC52bSgpLCBzaGFkb3dQYWNrZXRSZWcsIHNj
cmF0Y2gxUmVnLCBzY3JhdGNoMlJlZyk7CisgICAgbV9qaXQuZW5zdXJlU2hhZG93Q2hpY2tlblBh
Y2tldCh2bSgpLCBzaGFkb3dQYWNrZXRSZWcsIHNjcmF0Y2gxUmVnLCBzY3JhdGNoMlJlZyk7CiAK
ICAgICBKU1ZhbHVlT3BlcmFuZCB0aGlzVmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAg
IEpTVmFsdWVSZWdzIHRoaXNSZWdzID0gdGhpc1ZhbHVlLmpzVmFsdWVSZWdzKCk7CkBAIC0xMjk3
Myw3ICsxMjk3Nyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRQcm90b3R5cGUK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKLSAgICAgICAgbV9qaXQuZW1pdExvYWRT
dHJ1Y3R1cmUoKm1faml0LnZtKCksIG9iamVjdEdQUiwgdGVtcEdQUiwgdGVtcDJHUFIpOworICAg
ICAgICBtX2ppdC5lbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCBvYmplY3RHUFIsIHRlbXBHUFIsIHRl
bXAyR1BSKTsKIAogICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IG1fc3RhdGUuZm9yTm9k
ZShub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIGlmICgodmFsdWUubV90eXBlICYmICEodmFsdWUu
bV90eXBlICYgflNwZWNPYmplY3QpKSAmJiB2YWx1ZS5tX3N0cnVjdHVyZS5pc0Zpbml0ZSgpKSB7
CkBAIC0xMzE3NCw3ICsxMzE3OCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBbGxv
Y2F0ZU5ld0EKIAogICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0PEpTQXJyYXk+KHJlc3VsdEdQUiwg
VHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBzdG9yYWdlR1BSLCBzY3JhdGNoR1BSLCBzY3JhdGNo
MkdQUiwgc2xvd0Nhc2VzKTsKIAotICAgIG1faml0Lm11dGF0b3JGZW5jZSgqbV9qaXQudm0oKSk7
CisgICAgbV9qaXQubXV0YXRvckZlbmNlKHZtKCkpOwogCiAgICAgYWRkU2xvd1BhdGhHZW5lcmF0
b3IobWFrZVVuaXF1ZTxDYWxsQXJyYXlBbGxvY2F0b3JXaXRoVmFyaWFibGVTaXplU2xvd1BhdGhH
ZW5lcmF0b3I+KAogICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbk5ld0FycmF5V2l0
aFNpemUsIHJlc3VsdEdQUiwKQEAgLTEzNDAxLDcgKzEzNDA1LDcgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZVByb2ZpbGVUeXBlKAogICAgIH0KIAogICAgIC8vIExvYWQgdGhlIFR5cGVQ
cm9maWxlckxvZyBpbnRvIFNjcmF0Y2gyLgotICAgIFR5cGVQcm9maWxlckxvZyogY2FjaGVkVHlw
ZVByb2ZpbGVyTG9nID0gbV9qaXQudm0oKS0+dHlwZVByb2ZpbGVyTG9nKCk7CisgICAgVHlwZVBy
b2ZpbGVyTG9nKiBjYWNoZWRUeXBlUHJvZmlsZXJMb2cgPSB2bSgpLnR5cGVQcm9maWxlckxvZygp
OwogICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cihjYWNoZWRUeXBlUHJvZmlsZXJMb2cpLCBz
Y3JhdGNoMkdQUik7CiAKICAgICAvLyBMb2FkIHRoZSBuZXh0IExvZ0VudHJ5IGludG8gU2NyYXRj
aDEuCkBAIC0xMzY1MSwxNCArMTM2NTUsMTQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZU1ha2VSb3BlKE5vZAogICAgIEdQUlJlZyBzY3JhdGNoMkdQUiA9IHNjcmF0Y2gyLmdwcigpOwog
CiAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93UGF0aDsKLSAgICBBbGxvY2F0b3IgYWxs
b2NhdG9yVmFsdWUgPSBhbGxvY2F0b3JGb3JOb25WaXJ0dWFsQ29uY3VycmVudGx5PEpTUm9wZVN0
cmluZz4oKm1faml0LnZtKCksIHNpemVvZihKU1JvcGVTdHJpbmcpLCBBbGxvY2F0b3JGb3JNb2Rl
OjpBbGxvY2F0b3JJZkV4aXN0cyk7Ci0gICAgZW1pdEFsbG9jYXRlSlNDZWxsKHJlc3VsdEdQUiwg
SklUQWxsb2NhdG9yOjpjb25zdGFudChhbGxvY2F0b3JWYWx1ZSksIGFsbG9jYXRvckdQUiwgVHJ1
c3RlZEltbVB0cihtX2ppdC5ncmFwaCgpLnJlZ2lzdGVyU3RydWN0dXJlKG1faml0LnZtKCktPnN0
cmluZ1N0cnVjdHVyZS5nZXQoKSkpLCBzY3JhdGNoR1BSLCBzbG93UGF0aCk7CisgICAgQWxsb2Nh
dG9yIGFsbG9jYXRvclZhbHVlID0gYWxsb2NhdG9yRm9yTm9uVmlydHVhbENvbmN1cnJlbnRseTxK
U1JvcGVTdHJpbmc+KHZtKCksIHNpemVvZihKU1JvcGVTdHJpbmcpLCBBbGxvY2F0b3JGb3JNb2Rl
OjpBbGxvY2F0b3JJZkV4aXN0cyk7CisgICAgZW1pdEFsbG9jYXRlSlNDZWxsKHJlc3VsdEdQUiwg
SklUQWxsb2NhdG9yOjpjb25zdGFudChhbGxvY2F0b3JWYWx1ZSksIGFsbG9jYXRvckdQUiwgVHJ1
c3RlZEltbVB0cihtX2ppdC5ncmFwaCgpLnJlZ2lzdGVyU3RydWN0dXJlKHZtKCkuc3RyaW5nU3Ry
dWN0dXJlLmdldCgpKSksIHNjcmF0Y2hHUFIsIHNsb3dQYXRoKTsKIAogICAgIC8vIFRoaXMgcHV0
cyBudWxscHRyIGZvciB0aGUgZmlyc3QgZmliZXIuIEl0IG1ha2VzIHZpc2l0Q2hpbGRyZW4gc2Fm
ZSBldmVuIGlmIHRoaXMgSlNSb3BlU3RyaW5nIGlzIGRpc2NhcmRlZCBkdWUgdG8gdGhlIHNwZWN1
bGF0aW9uIGZhaWx1cmUgaW4gdGhlIGZvbGxvd2luZyBwYXRoLgogICAgIG1faml0LnN0b3JlUHRy
KFRydXN0ZWRJbW1QdHIoSlNTdHJpbmc6OmlzUm9wZUluUG9pbnRlciksIENDYWxsSGVscGVyczo6
QWRkcmVzcyhyZXN1bHRHUFIsIEpTUm9wZVN0cmluZzo6b2Zmc2V0T2ZGaWJlcjAoKSkpOwogCiAg
ICAgewotICAgICAgICBpZiAoSlNTdHJpbmcqIHN0cmluZyA9IGVkZ2VzWzBdLT5keW5hbWljQ2Fz
dENvbnN0YW50PEpTU3RyaW5nKj4oKm1faml0LnZtKCkpKSB7CisgICAgICAgIGlmIChKU1N0cmlu
Zyogc3RyaW5nID0gZWRnZXNbMF0tPmR5bmFtaWNDYXN0Q29uc3RhbnQ8SlNTdHJpbmcqPih2bSgp
KSkgewogICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoc3RyaW5nLT5pczhCaXQo
KSA/IFN0cmluZ0ltcGw6OmZsYWdJczhCaXQoKSA6IDApLCBzY3JhdGNoR1BSKTsKICAgICAgICAg
ICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKHN0cmluZy0+bGVuZ3RoKCkpLCBhbGxvY2F0b3JH
UFIpOwogICAgICAgICB9IGVsc2UgewpAQCAtMTM2OTAsNyArMTM2OTQsNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlTWFrZVJvcGUoTm9kCiAgICAgfQogCiAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMTsgaSA8IG51bU9wR1BSczsgKytpKSB7Ci0gICAgICAgIGlmIChKU1N0cmluZyogc3Ry
aW5nID0gZWRnZXNbaV0tPmR5bmFtaWNDYXN0Q29uc3RhbnQ8SlNTdHJpbmcqPigqbV9qaXQudm0o
KSkpIHsKKyAgICAgICAgaWYgKEpTU3RyaW5nKiBzdHJpbmcgPSBlZGdlc1tpXS0+ZHluYW1pY0Nh
c3RDb25zdGFudDxKU1N0cmluZyo+KHZtKCkpKSB7CiAgICAgICAgICAgICBtX2ppdC5hbmQzMihU
cnVzdGVkSW1tMzIoc3RyaW5nLT5pczhCaXQoKSA/IFN0cmluZ0ltcGw6OmZsYWdJczhCaXQoKSA6
IDApLCBzY3JhdGNoR1BSKTsKICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCiAgICAgICAg
ICAgICAgICAgVW5jb3VudGFibGUsIEpTVmFsdWVTb3VyY2UoKSwgbnVsbHB0ciwKQEAgLTEzNzU4
LDEwICsxMzc2MiwxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTWFrZVJvcGUoTm9k
CiAKICAgICBhdXRvIGlzTm9uRW1wdHlTdHJpbmcgPSBtX2ppdC5icmFuY2hUZXN0MzIoQ0NhbGxI
ZWxwZXJzOjpOb25aZXJvLCBhbGxvY2F0b3JHUFIpOwogCi0gICAgbV9qaXQubW92ZShUcnVzdGVk
SW1tUHRyOjp3ZWFrUG9pbnRlcihtX2ppdC5ncmFwaCgpLCBqc0VtcHR5U3RyaW5nKCZtX2ppdC5n
cmFwaCgpLm1fdm0pKSwgcmVzdWx0R1BSKTsKKyAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHI6
OndlYWtQb2ludGVyKG1faml0LmdyYXBoKCksIGpzRW1wdHlTdHJpbmcobV9qaXQuZ3JhcGgoKS5t
X3ZtKSksIHJlc3VsdEdQUik7CiAKICAgICBpc05vbkVtcHR5U3RyaW5nLmxpbmsoJm1faml0KTsK
LSAgICBtX2ppdC5tdXRhdG9yRmVuY2UoKm1faml0LnZtKCkpOworICAgIG1faml0Lm11dGF0b3JG
ZW5jZSh2bSgpKTsKIAogICAgIHN3aXRjaCAobnVtT3BHUFJzKSB7CiAgICAgY2FzZSAyOgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2
aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTMsNyArMTEzLDcgQEAgcHVibGljOgogCiAgICAg
Vk0mIHZtKCkKICAgICB7Ci0gICAgICAgIHJldHVybiAqbV9qaXQudm0oKTsKKyAgICAgICAgcmV0
dXJuIG1faml0LnZtKCk7CiAgICAgfQogCiAgICAgc3RydWN0IFRydXN0ZWRJbW1QdHIgewpAQCAt
OTkxLDcgKzk5MSw3IEBAIHB1YmxpYzoKICAgICAgICAgLy8gYW55d2F5IHNpbmNlIGl0IHdhcyBu
b3QgYmVpbmcgdXBkYXRlZCBieSBKSVQnZWQgY29kZSBieSBkZXNpZ24uCiAKICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemVvZih2b2lkKikgLyA0OyBpKyspCi0gICAgICAgICAg
ICBtX2ppdC5zdG9yZTMyKFRydXN0ZWRJbW0zMigweGJhZGJlZWYpLCByZWludGVycHJldF9jYXN0
PGNoYXIqPigmbV9qaXQudm0oKS0+dG9wQ2FsbEZyYW1lKSArIGkgKiA0KTsKKyAgICAgICAgICAg
IG1faml0LnN0b3JlMzIoVHJ1c3RlZEltbTMyKDB4YmFkYmVlZiksIHJlaW50ZXJwcmV0X2Nhc3Q8
Y2hhcio+KCZ2bSgpLnRvcENhbGxGcmFtZSkgKyBpICogNCk7CiAgICAgfQogI2Vsc2UKICAgICB2
b2lkIHByZXBhcmVGb3JFeHRlcm5hbENhbGwoKSB7IH0KQEAgLTE1MTgsNyArMTUxOCw3IEBAIHB1
YmxpYzoKICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiwgU3RydWN0dXJlVHlwZSBzdHJ1Y3R1cmUs
IFN0b3JhZ2VUeXBlIHN0b3JhZ2UsIEdQUlJlZyBzY3JhdGNoR1BSMSwKICAgICAgICAgR1BSUmVn
IHNjcmF0Y2hHUFIyLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QmIHNsb3dQYXRoLCBzaXplX3Qg
c2l6ZSkKICAgICB7Ci0gICAgICAgIG1faml0LmVtaXRBbGxvY2F0ZUpTT2JqZWN0V2l0aEtub3du
U2l6ZTxDbGFzc1R5cGU+KCptX2ppdC52bSgpLCByZXN1bHRHUFIsIHN0cnVjdHVyZSwgc3RvcmFn
ZSwgc2NyYXRjaEdQUjEsIHNjcmF0Y2hHUFIyLCBzbG93UGF0aCwgc2l6ZSk7CisgICAgICAgIG1f
aml0LmVtaXRBbGxvY2F0ZUpTT2JqZWN0V2l0aEtub3duU2l6ZTxDbGFzc1R5cGU+KHZtKCksIHJl
c3VsdEdQUiwgc3RydWN0dXJlLCBzdG9yYWdlLCBzY3JhdGNoR1BSMSwgc2NyYXRjaEdQUjIsIHNs
b3dQYXRoLCBzaXplKTsKICAgICB9CiAKICAgICAvLyBDb252ZW5pZW5jZSBhbGxvY2F0b3IgZm9y
IGEgYnVpbHQtaW4gb2JqZWN0LgpAQCAtMTUyNiwyMCArMTUyNiwyMCBAQCBwdWJsaWM6CiAgICAg
dm9pZCBlbWl0QWxsb2NhdGVKU09iamVjdChHUFJSZWcgcmVzdWx0R1BSLCBTdHJ1Y3R1cmVUeXBl
IHN0cnVjdHVyZSwgU3RvcmFnZVR5cGUgc3RvcmFnZSwKICAgICAgICAgR1BSUmVnIHNjcmF0Y2hH
UFIxLCBHUFJSZWcgc2NyYXRjaEdQUjIsIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYgc2xvd1Bh
dGgpCiAgICAgewotICAgICAgICBtX2ppdC5lbWl0QWxsb2NhdGVKU09iamVjdDxDbGFzc1R5cGU+
KCptX2ppdC52bSgpLCByZXN1bHRHUFIsIHN0cnVjdHVyZSwgc3RvcmFnZSwgc2NyYXRjaEdQUjEs
IHNjcmF0Y2hHUFIyLCBzbG93UGF0aCk7CisgICAgICAgIG1faml0LmVtaXRBbGxvY2F0ZUpTT2Jq
ZWN0PENsYXNzVHlwZT4odm0oKSwgcmVzdWx0R1BSLCBzdHJ1Y3R1cmUsIHN0b3JhZ2UsIHNjcmF0
Y2hHUFIxLCBzY3JhdGNoR1BSMiwgc2xvd1BhdGgpOwogICAgIH0KIAogICAgIHRlbXBsYXRlIDx0
eXBlbmFtZSBDbGFzc1R5cGUsIHR5cGVuYW1lIFN0cnVjdHVyZVR5cGU+IC8vIFN0cnVjdHVyZVR5
cGUgYW5kIFN0b3JhZ2VUeXBlIGNhbiBiZSBHUFIgb3IgSW1tUHRyLgogICAgIHZvaWQgZW1pdEFs
bG9jYXRlVmFyaWFibGVTaXplZEpTT2JqZWN0KEdQUlJlZyByZXN1bHRHUFIsIFN0cnVjdHVyZVR5
cGUgc3RydWN0dXJlLCBHUFJSZWcgYWxsb2NhdGlvblNpemUsIEdQUlJlZyBzY3JhdGNoR1BSMSwg
R1BSUmVnIHNjcmF0Y2hHUFIyLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QmIHNsb3dQYXRoKQog
ICAgIHsKLSAgICAgICAgbV9qaXQuZW1pdEFsbG9jYXRlVmFyaWFibGVTaXplZEpTT2JqZWN0PENs
YXNzVHlwZT4oKm1faml0LnZtKCksIHJlc3VsdEdQUiwgc3RydWN0dXJlLCBhbGxvY2F0aW9uU2l6
ZSwgc2NyYXRjaEdQUjEsIHNjcmF0Y2hHUFIyLCBzbG93UGF0aCk7CisgICAgICAgIG1faml0LmVt
aXRBbGxvY2F0ZVZhcmlhYmxlU2l6ZWRKU09iamVjdDxDbGFzc1R5cGU+KHZtKCksIHJlc3VsdEdQ
Uiwgc3RydWN0dXJlLCBhbGxvY2F0aW9uU2l6ZSwgc2NyYXRjaEdQUjEsIHNjcmF0Y2hHUFIyLCBz
bG93UGF0aCk7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2xhc3NUeXBlPgogICAg
IHZvaWQgZW1pdEFsbG9jYXRlRGVzdHJ1Y3RpYmxlT2JqZWN0KEdQUlJlZyByZXN1bHRHUFIsIFJl
Z2lzdGVyZWRTdHJ1Y3R1cmUgc3RydWN0dXJlLCAKICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIx
LCBHUFJSZWcgc2NyYXRjaEdQUjIsIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYgc2xvd1BhdGgp
CiAgICAgewotICAgICAgICBtX2ppdC5lbWl0QWxsb2NhdGVEZXN0cnVjdGlibGVPYmplY3Q8Q2xh
c3NUeXBlPigqbV9qaXQudm0oKSwgcmVzdWx0R1BSLCBzdHJ1Y3R1cmUuZ2V0KCksIHNjcmF0Y2hH
UFIxLCBzY3JhdGNoR1BSMiwgc2xvd1BhdGgpOworICAgICAgICBtX2ppdC5lbWl0QWxsb2NhdGVE
ZXN0cnVjdGlibGVPYmplY3Q8Q2xhc3NUeXBlPih2bSgpLCByZXN1bHRHUFIsIHN0cnVjdHVyZS5n
ZXQoKSwgc2NyYXRjaEdQUjEsIHNjcmF0Y2hHUFIyLCBzbG93UGF0aCk7CiAgICAgfQogCiAgICAg
dm9pZCBlbWl0QWxsb2NhdGVSYXdPYmplY3QoR1BSUmVnIHJlc3VsdEdQUiwgUmVnaXN0ZXJlZFN0
cnVjdHVyZSwgR1BSUmVnIHN0b3JhZ2VHUFIsIHVuc2lnbmVkIG51bUVsZW1lbnRzLCB1bnNpZ25l
ZCB2ZWN0b3JMZW5ndGgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaHVu
a3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtz
LmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdU
aHVua3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMS0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDAsMTUgKzQwLDE1IEBACiAKIG5hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiBvc3JFeGl0VGh1bmtHZW5lcmF0b3IoVk0qIHZtKQorTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBvc3JFeGl0VGh1bmtHZW5lcmF0b3IoVk0mIHZtKQogewogICAg
IE1hY3JvQXNzZW1ibGVyIGppdDsKLSAgICBqaXQucHJvYmUoT1NSRXhpdDo6ZXhlY3V0ZU9TUkV4
aXQsIHZtKTsKKyAgICBqaXQucHJvYmUoT1NSRXhpdDo6ZXhlY3V0ZU9TUkV4aXQsICZ2bSk7CiAg
ICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCk7CiAgICAgcmV0
dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCAiREZHIE9TUiBl
eGl0IHRodW5rIik7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
b3NyRXhpdEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcihWTSogdm0pCitNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9zckV4aXRHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IoVk0m
IHZtKQogewogICAgIE1hY3JvQXNzZW1ibGVyIGppdDsKIApAQCAtNTYsNyArNTYsNyBAQCBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9zCiAgICAgYWRqdXN0RnJhbWVBbmRT
dGFja0luT1NSRXhpdENvbXBpbGVyVGh1bms8REZHOjpKSVRDb2RlPihqaXQsIHZtLCBKSVRUeXBl
OjpERkdKSVQpOwogICAgIAogICAgIHNpemVfdCBzY3JhdGNoU2l6ZSA9IHNpemVvZihFbmNvZGVk
SlNWYWx1ZSkgKiAoR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgKyBGUFJJbmZvOjpudW1iZXJP
ZlJlZ2lzdGVycyk7Ci0gICAgU2NyYXRjaEJ1ZmZlciogc2NyYXRjaEJ1ZmZlciA9IHZtLT5zY3Jh
dGNoQnVmZmVyRm9yU2l6ZShzY3JhdGNoU2l6ZSk7CisgICAgU2NyYXRjaEJ1ZmZlciogc2NyYXRj
aEJ1ZmZlciA9IHZtLnNjcmF0Y2hCdWZmZXJGb3JTaXplKHNjcmF0Y2hTaXplKTsKICAgICBFbmNv
ZGVkSlNWYWx1ZSogYnVmZmVyID0gc3RhdGljX2Nhc3Q8RW5jb2RlZEpTVmFsdWUqPihzY3JhdGNo
QnVmZmVyLT5kYXRhQnVmZmVyKCkpOwogICAgIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgKytpKSB7CkBAIC05OSw3ICs5OSw3IEBAIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3MKICNlbmRpZgogICAgIH0KIAot
ICAgIGppdC5mYXJKdW1wKE1hY3JvQXNzZW1ibGVyOjpBYnNvbHV0ZUFkZHJlc3MoJnZtLT5vc3JF
eGl0SnVtcERlc3RpbmF0aW9uKSwgT1NSRXhpdFB0clRhZyk7CisgICAgaml0LmZhckp1bXAoTWFj
cm9Bc3NlbWJsZXI6OkFic29sdXRlQWRkcmVzcygmdm0ub3NyRXhpdEp1bXBEZXN0aW5hdGlvbiks
IE9TUkV4aXRQdHJUYWcpOwogCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JB
TF9USFVOS19JRCk7CiAgICAgCkBAIC0xMDgsNyArMTA4LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBvcwogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVm
ZmVyLCBKSVRUaHVua1B0clRhZywgIkRGRyBPU1IgZXhpdCBnZW5lcmF0aW9uIHRodW5rIik7CiB9
CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3NyRW50cnlUaHVua0dl
bmVyYXRvcihWTSogdm0pCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9z
ckVudHJ5VGh1bmtHZW5lcmF0b3IoVk0mIHZtKQogewogICAgIEFzc2VtYmx5SGVscGVycyBqaXQo
bnVsbHB0cik7CiAKQEAgLTE0MSw3ICsxNDEsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IG9zCiAgICAgaml0LmFib3J0V2l0aFJlYXNvbihERkdVbnJlYXNvbmFibGVP
U1JFbnRyeUp1bXBEZXN0aW5hdGlvbik7CiAKICAgICBvay5saW5rKCZqaXQpOwotICAgIGppdC5y
ZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtLT50b3BF
bnRyeUZyYW1lKTsKKyAgICBqaXQucmVzdG9yZUNhbGxlZVNhdmVzRnJvbUVudHJ5RnJhbWVDYWxs
ZWVTYXZlc0J1ZmZlcih2bS50b3BFbnRyeUZyYW1lKTsKICAgICBqaXQuZW1pdE1hdGVyaWFsaXpl
VGFnQ2hlY2tSZWdpc3RlcnMoKTsKIAogICAgIGppdC5mYXJKdW1wKEdQUkluZm86OnJlZ1QxLCBH
UFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1RodW5rcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHVGh1bmtzLmgJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHVGh1bmtzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDExLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDExLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNSw5ICszNSw5IEBAIGNsYXNzIFZN
OwogCiBuYW1lc3BhY2UgREZHIHsKIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBvc3JFeGl0VGh1bmtHZW5lcmF0b3IoVk0qKTsKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gb3NyRXhpdEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcihWTSopOwotTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvc3JFbnRyeVRodW5rR2VuZXJhdG9y
KFZNKik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9zckV4aXRUaHVu
a0dlbmVyYXRvcihWTSYpOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBv
c3JFeGl0R2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKFZNJik7CitNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IG9zckVudHJ5VGh1bmtHZW5lcmF0b3IoVk0mKTsKIAogfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkRGRwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVG9GVExGb3JPU1JFbnRyeURlZmVy
cmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHVG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25D
YWxsYmFjay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzQsNyArNzQsNyBAQCB2b2lkIFRvRlRMRm9yT1NS
RW50cnlEZWZlcnJlZENvbXBpbGF0aW9uCiAgICAgICAgIAogICAgIHN3aXRjaCAocmVzdWx0KSB7
CiAgICAgY2FzZSBDb21waWxhdGlvblN1Y2Nlc3NmdWw6IHsKLSAgICAgICAgaml0Q29kZS0+c2V0
T1NSRW50cnlCbG9jaygqY29kZUJsb2NrLT52bSgpLCBwcm9maWxlZERGR0NvZGVCbG9jaywgY29k
ZUJsb2NrKTsKKyAgICAgICAgaml0Q29kZS0+c2V0T1NSRW50cnlCbG9jayhjb2RlQmxvY2stPnZt
KCksIHByb2ZpbGVkREZHQ29kZUJsb2NrLCBjb2RlQmxvY2spOwogICAgICAgICB1bnNpZ25lZCBv
c3JFbnRyeUJ5dGVjb2RlID0gY29kZUJsb2NrLT5qaXRDb2RlKCktPmZ0bEZvck9TUkVudHJ5KCkt
PmJ5dGVjb2RlSW5kZXgoKTsKICAgICAgICAgaml0Q29kZS0+dGllclVwRW50cnlUcmlnZ2Vycy5z
ZXQob3NyRW50cnlCeXRlY29kZSwgSklUQ29kZTo6VHJpZ2dlclJlYXNvbjo6Q29tcGlsYXRpb25E
b25lKTsKICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1dvcmtsaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1dvcmtsaXN0LmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdXb3JrbGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zODAsNyArMzgwLDcgQEAg
dm9pZCBXb3JrbGlzdDo6cmVzdW1lQWxsVGhyZWFkcygpCiAKIHZvaWQgV29ya2xpc3Q6OnZpc2l0
V2Vha1JlZmVyZW5jZXMoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7Ci0gICAgVk0qIHZtID0gdmlz
aXRvci5oZWFwKCktPnZtKCk7CisgICAgVk0qIHZtID0gJnZpc2l0b3IuaGVhcCgpLT52bSgpOwog
ICAgIHsKICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIoKm1fbG9jayk7CiAgICAgICAgIGZvciAo
UGxhbk1hcDo6aXRlcmF0b3IgaXRlciA9IG1fcGxhbnMuYmVnaW4oKTsgaXRlciAhPSBtX3BsYW5z
LmVuZCgpOyArK2l0ZXIpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93
ZXJERkdUb0IzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TExvd2VyREZHVG9CMy5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjg2OSw3ICs2
ODY5LDcgQEAgcHJpdmF0ZToKICAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0LmlzWmVybzMyKGZs
YWdzQW5kTGVuZ3RoLmxlbmd0aCksIHJhcmVseShlbXB0eUNhc2UpLCB1c3VhbGx5KGNvbnRpbnVh
dGlvbikpOwogCiAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8o
ZW1wdHlDYXNlLCBzbG93UGF0aCk7Ci0gICAgICAgIFZhbHVlRnJvbUJsb2NrIGVtcHR5UmVzdWx0
ID0gbV9vdXQuYW5jaG9yKHdlYWtQb2ludGVyKGpzRW1wdHlTdHJpbmcoJm1fZ3JhcGgubV92bSkp
KTsKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgZW1wdHlSZXN1bHQgPSBtX291dC5hbmNob3Iod2Vh
a1BvaW50ZXIoanNFbXB0eVN0cmluZyhtX2dyYXBoLm1fdm0pKSk7CiAgICAgICAgIG1fb3V0Lmp1
bXAoY29udGludWF0aW9uKTsKICAgICAgICAgCiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKHNsb3dQ
YXRoLCBjb250aW51YXRpb24pOwpAQCAtMTIyODIsNyArMTIyODIsNyBAQCBwcml2YXRlOgogICAg
ICAgICBWZWN0b3I8VmFsdWVGcm9tQmxvY2ssIDU+IHJlc3VsdHM7CiAKICAgICAgICAgbV9vdXQu
YXBwZW5kVG8oZW1wdHlDYXNlLCBub3RFbXB0eUNhc2UpOwotICAgICAgICByZXN1bHRzLmFwcGVu
ZChtX291dC5hbmNob3Iod2Vha1BvaW50ZXIoanNFbXB0eVN0cmluZygmdm0oKSkpKSk7CisgICAg
ICAgIHJlc3VsdHMuYXBwZW5kKG1fb3V0LmFuY2hvcih3ZWFrUG9pbnRlcihqc0VtcHR5U3RyaW5n
KHZtKCkpKSkpOwogICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAKICAgICAgICAg
bV9vdXQuYXBwZW5kVG8obm90RW1wdHlDYXNlLCBvbmVDaGFyQ2FzZSk7CkBAIC0xMzg4MCw3ICsx
Mzg4MCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIGVkZ2UsIENlbGxDYXNlU3Bl
Y3VsYXRlc09iamVjdCwgU3BlY3VsYXRlTnVsbE9yVW5kZWZpbmVkLAogICAgICAgICAgICAgICAg
ICAgICBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pKTsKICAgICAgICAgY2FzZSBTdHJpbmdVc2U6
Ci0gICAgICAgICAgICByZXR1cm4gbV9vdXQubm90RXF1YWwobG93U3RyaW5nKGVkZ2UpLCB3ZWFr
UG9pbnRlcihqc0VtcHR5U3RyaW5nKCZtX2dyYXBoLm1fdm0pKSk7CisgICAgICAgICAgICByZXR1
cm4gbV9vdXQubm90RXF1YWwobG93U3RyaW5nKGVkZ2UpLCB3ZWFrUG9pbnRlcihqc0VtcHR5U3Ry
aW5nKG1fZ3JhcGgubV92bSkpKTsKICAgICAgICAgY2FzZSBTdHJpbmdPck90aGVyVXNlOiB7CiAg
ICAgICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dKU1ZhbHVlKGVkZ2UsIE1hbnVhbE9wZXJhbmRT
cGVjdWxhdGlvbik7CiAKQEAgLTEzODkyLDcgKzEzODkyLDcgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgIAogICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhj
ZWxsQ2FzZSwgbm90Q2VsbENhc2UpOwogICAgICAgICAgICAgRlRMX1RZUEVfQ0hFQ0soanNWYWx1
ZVZhbHVlKHZhbHVlKSwgZWRnZSwgKH5TcGVjQ2VsbENoZWNrKSB8IFNwZWNTdHJpbmcsIGlzTm90
U3RyaW5nKHZhbHVlKSk7Ci0gICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBzdHJpbmdSZXN1bHQg
PSBtX291dC5hbmNob3IobV9vdXQubm90RXF1YWwodmFsdWUsIHdlYWtQb2ludGVyKGpzRW1wdHlT
dHJpbmcoJm1fZ3JhcGgubV92bSkpKSk7CisgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBzdHJp
bmdSZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQubm90RXF1YWwodmFsdWUsIHdlYWtQb2ludGVy
KGpzRW1wdHlTdHJpbmcobV9ncmFwaC5tX3ZtKSkpKTsKICAgICAgICAgICAgIG1fb3V0Lmp1bXAo
Y29udGludWF0aW9uKTsKIAogICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8obm90Q2VsbENhc2Us
IGNvbnRpbnVhdGlvbik7CkBAIC0xMzk0OSw3ICsxMzk0OSw3IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAgICAgdW5zdXJlKGJpZ0ludENhc2UpLCB1bnN1cmUobm90U3RyaW5nT3JCaWdJbnRDYXNl
KSk7CiAKICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKHN0cmluZ0Nhc2UsIGJpZ0ludENhc2Up
OwotICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQobV9vdXQuYW5jaG9yKG1fb3V0Lm5vdEVxdWFs
KHZhbHVlLCB3ZWFrUG9pbnRlcihqc0VtcHR5U3RyaW5nKCZtX2dyYXBoLm1fdm0pKSkpKTsKKyAg
ICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKG1fb3V0LmFuY2hvcihtX291dC5ub3RFcXVhbCh2YWx1
ZSwgd2Vha1BvaW50ZXIoanNFbXB0eVN0cmluZyhtX2dyYXBoLm1fdm0pKSkpKTsKICAgICAgICAg
ICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKIAogICAgICAgICAgICAgbV9vdXQuYXBwZW5k
VG8oYmlnSW50Q2FzZSwgbm90U3RyaW5nT3JCaWdJbnRDYXNlKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMVGh1bmtzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTFRodW5rcy5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMVGh1bmtzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyAr
NDcsNyBAQCBlbnVtIGNsYXNzIEZyYW1lQW5kU3RhY2tBZGp1c3RtZW50UmVxdWlyCiB9OwogCiBz
dGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBnZW5lcmljR2VuZXJh
dGlvblRodW5rR2VuZXJhdG9yKAotICAgIFZNKiB2bSwgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRy
VGFnPiBnZW5lcmF0aW9uRnVuY3Rpb24sIFB0clRhZyByZXN1bHRUYWcsIGNvbnN0IGNoYXIqIG5h
bWUsIHVuc2lnbmVkIGV4dHJhUG9wc1RvUmVzdG9yZSwgRnJhbWVBbmRTdGFja0FkanVzdG1lbnRS
ZXF1aXJlbWVudCBmcmFtZUFuZFN0YWNrQWRqdXN0bWVudFJlcXVpcmVtZW50KQorICAgIFZNJiB2
bSwgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBnZW5lcmF0aW9uRnVuY3Rpb24sIFB0clRh
ZyByZXN1bHRUYWcsIGNvbnN0IGNoYXIqIG5hbWUsIHVuc2lnbmVkIGV4dHJhUG9wc1RvUmVzdG9y
ZSwgRnJhbWVBbmRTdGFja0FkanVzdG1lbnRSZXF1aXJlbWVudCBmcmFtZUFuZFN0YWNrQWRqdXN0
bWVudFJlcXVpcmVtZW50KQogewogICAgIEFzc2VtYmx5SGVscGVycyBqaXQobnVsbHB0cik7CiAK
QEAgLTczLDcgKzczLDcgQEAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
cgogICAgICAgICBudW1iZXJPZlJlcXVpcmVkUG9wcysrOwogICAgIH0gd2hpbGUgKHN0YWNrTWlz
YWxpZ25tZW50ICUgc3RhY2tBbGlnbm1lbnRCeXRlcygpKTsKICAgICAKLSAgICBTY3JhdGNoQnVm
ZmVyKiBzY3JhdGNoQnVmZmVyID0gdm0tPnNjcmF0Y2hCdWZmZXJGb3JTaXplKHJlcXVpcmVkU2Ny
YXRjaE1lbW9yeVNpemVJbkJ5dGVzKCkpOworICAgIFNjcmF0Y2hCdWZmZXIqIHNjcmF0Y2hCdWZm
ZXIgPSB2bS5zY3JhdGNoQnVmZmVyRm9yU2l6ZShyZXF1aXJlZFNjcmF0Y2hNZW1vcnlTaXplSW5C
eXRlcygpKTsKICAgICBjaGFyKiBidWZmZXIgPSBzdGF0aWNfY2FzdDxjaGFyKj4oc2NyYXRjaEJ1
ZmZlci0+ZGF0YUJ1ZmZlcigpKTsKICAgICAKICAgICBzYXZlQWxsUmVnaXN0ZXJzKGppdCwgYnVm
ZmVyKTsKQEAgLTEyOCwxNCArMTI4LDE0IEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHIKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1
bmtQdHJUYWcsICIlcyIsIG5hbWUpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IG9zckV4aXRHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQorTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvc3JFeGl0R2VuZXJhdGlvblRodW5rR2Vu
ZXJhdG9yKFZNJiB2bSkKIHsKICAgICB1bnNpZ25lZCBleHRyYVBvcHNUb1Jlc3RvcmUgPSAwOwog
ICAgIHJldHVybiBnZW5lcmljR2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKAogICAgICAgICB2bSwg
Y29tcGlsZUZUTE9TUkV4aXQsIE9TUkV4aXRQdHJUYWcsICJGVEwgT1NSIGV4aXQgZ2VuZXJhdGlv
biB0aHVuayIsIGV4dHJhUG9wc1RvUmVzdG9yZSwgRnJhbWVBbmRTdGFja0FkanVzdG1lbnRSZXF1
aXJlbWVudDo6TmVlZGVkKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBsYXp5U2xvd1BhdGhHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQorTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBsYXp5U2xvd1BhdGhHZW5lcmF0aW9uVGh1
bmtHZW5lcmF0b3IoVk0mIHZtKQogewogICAgIHVuc2lnbmVkIGV4dHJhUG9wc1RvUmVzdG9yZSA9
IDE7CiAgICAgcmV0dXJuIGdlbmVyaWNHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IoCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFRodW5rcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVGh1bmtzLmgJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVGh1bmtzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0z
OCw4ICszOCw4IEBAIGNsYXNzIFZNOwogCiBuYW1lc3BhY2UgRlRMIHsKIAotTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvc3JFeGl0R2VuZXJhdGlvblRodW5rR2VuZXJhdG9y
KFZNKik7Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGxhenlTbG93UGF0
aEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcihWTSopOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBvc3JFeGl0R2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKFZNJik7CitNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGxhenlTbG93UGF0aEdlbmVyYXRpb25U
aHVua0dlbmVyYXRvcihWTSYpOwogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiBzbG93UGF0aENhbGxUaHVua0dlbmVyYXRvcihjb25zdCBTbG93UGF0aENhbGxLZXkmKTsKIAog
dGVtcGxhdGU8dHlwZW5hbWUgS2V5VHlwZUFyZ3VtZW50PgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvQ2VsbENvbnRhaW5lci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0NlbGxDb250YWluZXIuaAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvQ2VsbENvbnRhaW5lci5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU4LDcg
KzU4LDcgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAgICAgCi0gICAgVk0qIHZtKCkgY29uc3Q7
CisgICAgVk0mIHZtKCkgY29uc3Q7CiAgICAgSGVhcCogaGVhcCgpIGNvbnN0OwogICAgIAogICAg
IGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhIW1fZW5jb2RlZFBvaW50
ZXI7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NlbGxDb250YWluZXJJbmxp
bmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ2VsbENvbnRh
aW5lcklubGluZXMuaAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvQ2VsbENvbnRhaW5lcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMyw3ICszMyw3IEBA
CiAKIG5hbWVzcGFjZSBKU0MgewogCi1pbmxpbmUgVk0qIENlbGxDb250YWluZXI6OnZtKCkgY29u
c3QKK2lubGluZSBWTSYgQ2VsbENvbnRhaW5lcjo6dm0oKSBjb25zdAogewogICAgIGlmIChpc0xh
cmdlQWxsb2NhdGlvbigpKQogICAgICAgICByZXR1cm4gbGFyZ2VBbGxvY2F0aW9uKCkudm0oKTsK
QEAgLTQyLDcgKzQyLDcgQEAgaW5saW5lIFZNKiBDZWxsQ29udGFpbmVyOjp2bSgpIGNvbnN0CiAK
IGlubGluZSBIZWFwKiBDZWxsQ29udGFpbmVyOjpoZWFwKCkgY29uc3QKIHsKLSAgICByZXR1cm4g
JnZtKCktPmhlYXA7CisgICAgcmV0dXJuICZ2bSgpLmhlYXA7CiB9CiAKIGlubGluZSBib29sIENl
bGxDb250YWluZXI6OmlzTWFya2VkKEhlYXBDZWxsKiBjZWxsKSBjb25zdApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvQ29tcGxldGVTdWJzcGFjZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29tcGxldGVTdWJzcGFjZS5jcHAJKHJldmlzaW9u
IDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbXBsZXRlU3Vic3BhY2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjUsNyArMTI1LDcgQEAgdm9pZCogQ29tcGxldGVTdWJz
cGFjZTo6dHJ5QWxsb2NhdGVTbG93KAogICAgIGlmICh2YWxpZGF0ZURGR0RvZXNHQykKICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQodm0uaGVhcC5leHBlY3REb2VzR0MoKSk7CiAKLSAgICBzYW5pdGl6
ZVN0YWNrRm9yVk0oJnZtKTsKKyAgICBzYW5pdGl6ZVN0YWNrRm9yVk0odm0pOwogICAgIAogICAg
IGlmIChBbGxvY2F0b3IgYWxsb2NhdG9yID0gYWxsb2NhdG9yRm9yKHNpemUsIEFsbG9jYXRvckZv
ck1vZGU6OkVuc3VyZUFsbG9jYXRvcikpCiAgICAgICAgIHJldHVybiBhbGxvY2F0b3IuYWxsb2Nh
dGUoZGVmZXJyYWxDb250ZXh0LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OlJldHVybk51bGwpOwpA
QCAtMTY5LDcgKzE2OSw3IEBAIHZvaWQqIENvbXBsZXRlU3Vic3BhY2U6OnJlYWxsb2NhdGVMYXJn
ZUEKICAgICBBU1NFUlQob2xkQWxsb2NhdGlvbi0+YXR0cmlidXRlcygpLmNlbGxLaW5kID09IEhl
YXBDZWxsOjpBdXhpbGlhcnkpOwogICAgIEFTU0VSVChzaXplID4gTWFya2VkU3BhY2U6Omxhcmdl
Q3V0b2ZmKTsKIAotICAgIHNhbml0aXplU3RhY2tGb3JWTSgmdm0pOworICAgIHNhbml0aXplU3Rh
Y2tGb3JWTSh2bSk7CiAKICAgICBpZiAoc2l6ZSA8PSBPcHRpb25zOjpsYXJnZUFsbG9jYXRpb25D
dXRvZmYoKQogICAgICAgICAmJiBzaXplIDw9IE1hcmtlZFNwYWNlOjpsYXJnZUN1dG9mZikgewpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NBY3Rpdml0eUNhbGxiYWNrLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NBY3Rpdml0eUNhbGxiYWNr
LmgJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDQWN0
aXZpdHlDYWxsYmFjay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMCwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY1LDcgKzY1LDcgQEAgcHJvdGVj
dGVkOgogICAgIHZpcnR1YWwgZG91YmxlIGdjVGltZVNsaWNlKHNpemVfdCBieXRlcykgPSAwOwog
ICAgIHZpcnR1YWwgZG91YmxlIGRlYXRoUmF0ZShIZWFwJikgPSAwOwogCi0gICAgR0NBY3Rpdml0
eUNhbGxiYWNrKFZNKiB2bSkKKyAgICBHQ0FjdGl2aXR5Q2FsbGJhY2soVk0mIHZtKQogICAgICAg
ICA6IEJhc2Uodm0pCiAgICAgICAgICwgbV9lbmFibGVkKHRydWUpCiAgICAgICAgICwgbV9kZWxh
eShzX2RlY2FkZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDQXNzZXJ0aW9u
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDQXNzZXJ0aW9u
cy5oCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0Fz
c2VydGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEyLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJp
Z2h0IChDKSAyMDE1IElnYWxpYSBTLkwuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0zNyw3ICszNyw3
IEBACiAKICNkZWZpbmUgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhvYmplY3QsIGNsYXNzSW5m
bykgZG8ge1wKICAgICBBU1NFUlRfR0NfT0JKRUNUX0xPT0tTX1ZBTElEKG9iamVjdCk7IFwKLSAg
ICBSRUxFQVNFX0FTU0VSVChvYmplY3QtPmluaGVyaXRzKCpvYmplY3QtPkpTQzo6SlNDZWxsOjp2
bSgpLCBjbGFzc0luZm8pKTsgXAorICAgIFJFTEVBU0VfQVNTRVJUKG9iamVjdC0+aW5oZXJpdHMo
b2JqZWN0LT5KU0M6OkpTQ2VsbDo6dm0oKSwgY2xhc3NJbmZvKSk7IFwKIH0gd2hpbGUgKDApCiAK
IC8vIFVzZWQgdG8gYXZvaWQgdHJpZ2dlcmluZyAtV3VuZGVmaW5lZC1ib29sLWNvbnZlcnNpb24u
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IYW5kbGVTZXQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hhbmRsZVNldC5jcHAJKHJldmlzaW9u
IDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hhbmRsZVNldC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEx
LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0zNCw3ICszNCw3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1IYW5k
bGVTZXQ6OkhhbmRsZVNldChWTSogdm0pCitIYW5kbGVTZXQ6OkhhbmRsZVNldChWTSYgdm0pCiAg
ICAgOiBtX3ZtKHZtKQogewogICAgIGdyb3coKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0hhbmRsZVNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0hhbmRsZVNldC5oCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9IYW5kbGVTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02NSwxMCArNjUsMTAgQEAg
Y2xhc3MgSGFuZGxlU2V0IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgSGFuZGxlU2V0KiBoZWFwRm9y
KEhhbmRsZVNsb3QpOwogCi0gICAgSGFuZGxlU2V0KFZNKik7CisgICAgSGFuZGxlU2V0KFZNJik7
CiAgICAgfkhhbmRsZVNldCgpOwogCi0gICAgVk0qIHZtKCk7CisgICAgVk0mIHZtKCk7CiAKICAg
ICBIYW5kbGVTbG90IGFsbG9jYXRlKCk7CiAgICAgdm9pZCBkZWFsbG9jYXRlKEhhbmRsZVNsb3Qp
OwpAQCAtOTIsNyArOTIsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgaXNMaXZlTm9kZShOb2RlKik7
CiAjZW5kaWYKIAotICAgIFZNKiBtX3ZtOworICAgIFZNJiBtX3ZtOwogICAgIERvdWJseUxpbmtl
ZExpc3Q8SGFuZGxlQmxvY2s+IG1fYmxvY2tMaXN0OwogCiAgICAgU2VudGluZWxMaW5rZWRMaXN0
PE5vZGU+IG1fc3Ryb25nTGlzdDsKQEAgLTEwNSw3ICsxMDUsNyBAQCBpbmxpbmUgSGFuZGxlU2V0
KiBIYW5kbGVTZXQ6OmhlYXBGb3IoSGFuCiAgICAgcmV0dXJuIHRvTm9kZShoYW5kbGUpLT5oYW5k
bGVTZXQoKTsKIH0KIAotaW5saW5lIFZNKiBIYW5kbGVTZXQ6OnZtKCkKK2lubGluZSBWTSYgSGFu
ZGxlU2V0Ojp2bSgpCiB7CiAgICAgcmV0dXJuIG1fdm07CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9IZWFwLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NCwxNyArMTQ0LDE3IEBAIHNp
emVfdCBwcm9wb3J0aW9uYWxIZWFwU2l6ZShzaXplX3QgaGVhcFMKICAgICByZXR1cm4gT3B0aW9u
czo6bGFyZ2VIZWFwR3Jvd3RoRmFjdG9yKCkgKiBoZWFwU2l6ZTsKIH0KIAotYm9vbCBpc1ZhbGlk
U2hhcmVkSW5zdGFuY2VUaHJlYWRTdGF0ZShWTSogdm0pCitib29sIGlzVmFsaWRTaGFyZWRJbnN0
YW5jZVRocmVhZFN0YXRlKFZNJiB2bSkKIHsKLSAgICByZXR1cm4gdm0tPmN1cnJlbnRUaHJlYWRJ
c0hvbGRpbmdBUElMb2NrKCk7CisgICAgcmV0dXJuIHZtLmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdB
UElMb2NrKCk7CiB9CiAKLWJvb2wgaXNWYWxpZFRocmVhZFN0YXRlKFZNKiB2bSkKK2Jvb2wgaXNW
YWxpZFRocmVhZFN0YXRlKFZNJiB2bSkKIHsKLSAgICBpZiAodm0tPmF0b21TdHJpbmdUYWJsZSgp
ICE9IFRocmVhZDo6Y3VycmVudCgpLmF0b21TdHJpbmdUYWJsZSgpKQorICAgIGlmICh2bS5hdG9t
U3RyaW5nVGFibGUoKSAhPSBUaHJlYWQ6OmN1cnJlbnQoKS5hdG9tU3RyaW5nVGFibGUoKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKHZtLT5pc1NoYXJlZEluc3RhbmNlKCkgJiYg
IWlzVmFsaWRTaGFyZWRJbnN0YW5jZVRocmVhZFN0YXRlKHZtKSkKKyAgICBpZiAodm0uaXNTaGFy
ZWRJbnN0YW5jZSgpICYmICFpc1ZhbGlkU2hhcmVkSW5zdGFuY2VUaHJlYWRTdGF0ZSh2bSkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVybiB0cnVlOwpAQCAtMjgyLDcgKzI4Miw3
IEBAIHByaXZhdGU6CiAgICAgSGVhcCYgbV9oZWFwOwogfTsKIAotSGVhcDo6SGVhcChWTSogdm0s
IEhlYXBUeXBlIGhlYXBUeXBlKQorSGVhcDo6SGVhcChWTSYgdm0sIEhlYXBUeXBlIGhlYXBUeXBl
KQogICAgIDogbV9oZWFwVHlwZShoZWFwVHlwZSkKICAgICAsIG1fcmFtU2l6ZShPcHRpb25zOjpm
b3JjZVJBTVNpemUoKSA/IE9wdGlvbnM6OmZvcmNlUkFNU2l6ZSgpIDogcmFtU2l6ZSgpKQogICAg
ICwgbV9taW5CeXRlc1BlckN5Y2xlKG1pbkhlYXBTaXplKG1faGVhcFR5cGUsIG1fcmFtU2l6ZSkp
CkBAIC00MDIsNyArNDAyLDcgQEAgdm9pZCBIZWFwOjpsYXN0Q2hhbmNlVG9GaW5hbGl6ZSgpCiAg
ICAgCiAgICAgbV9pc1NodXR0aW5nRG93biA9IHRydWU7CiAgICAgCi0gICAgUkVMRUFTRV9BU1NF
UlQoIW1fdm0tPmVudHJ5U2NvcGUpOworICAgIFJFTEVBU0VfQVNTRVJUKCFtX3ZtLmVudHJ5U2Nv
cGUpOwogICAgIFJFTEVBU0VfQVNTRVJUKG1fbXV0YXRvclN0YXRlID09IE11dGF0b3JTdGF0ZTo6
UnVubmluZyk7CiAgICAgCiAgICAgaWYgKG1fY29sbGVjdENvbnRpbnVvdXNseVRocmVhZCkgewpA
QCAtNDk4LDcgKzQ5OCw3IEBAIHZvaWQgSGVhcDo6cmVsZWFzZURlbGF5ZWRSZWxlYXNlZE9iamVj
dHMKICAgICAvLyBhbmQgdXNlIGEgdGVtcCBWZWN0b3IgZm9yIHRoZSBhY3R1YWwgcmVsZWFzaW5n
LgogICAgIGlmICghbV9kZWxheWVkUmVsZWFzZVJlY3Vyc2lvbkNvdW50KyspIHsKICAgICAgICAg
d2hpbGUgKCFtX2RlbGF5ZWRSZWxlYXNlT2JqZWN0cy5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAg
IEFTU0VSVChtX3ZtLT5jdXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsKKyAgICAgICAg
ICAgIEFTU0VSVChtX3ZtLmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOwogCiAgICAg
ICAgICAgICBhdXRvIG9iamVjdHNUb1JlbGVhc2UgPSBXVEZNb3ZlKG1fZGVsYXllZFJlbGVhc2VP
YmplY3RzKTsKIApAQCAtNTcxLDcgKzU3MSw3IEBAIHZvaWQgSGVhcDo6cmVwb3J0QWJhbmRvbmVk
T2JqZWN0R3JhcGgoKQogdm9pZCBIZWFwOjpwcm90ZWN0KEpTVmFsdWUgaykKIHsKICAgICBBU1NF
UlQoayk7Ci0gICAgQVNTRVJUKG1fdm0tPmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkp
OworICAgIEFTU0VSVChtX3ZtLmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOwogCiAg
ICAgaWYgKCFrLmlzQ2VsbCgpKQogICAgICAgICByZXR1cm47CkBAIC01ODIsNyArNTgyLDcgQEAg
dm9pZCBIZWFwOjpwcm90ZWN0KEpTVmFsdWUgaykKIGJvb2wgSGVhcDo6dW5wcm90ZWN0KEpTVmFs
dWUgaykKIHsKICAgICBBU1NFUlQoayk7Ci0gICAgQVNTRVJUKG1fdm0tPmN1cnJlbnRUaHJlYWRJ
c0hvbGRpbmdBUElMb2NrKCkpOworICAgIEFTU0VSVChtX3ZtLmN1cnJlbnRUaHJlYWRJc0hvbGRp
bmdBUElMb2NrKCkpOwogCiAgICAgaWYgKCFrLmlzQ2VsbCgpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CkBAIC02MDMsMzQgKzYwMywzNCBAQCB2b2lkIEhlYXA6OmZpbmFsaXplTWFya2VkVW5jb25k
aXRpb25hbEZpCiB7CiAgICAgY2VsbFNldC5mb3JFYWNoTWFya2VkQ2VsbCgKICAgICAgICAgWyZd
IChIZWFwQ2VsbCogY2VsbCwgSGVhcENlbGw6OktpbmQpIHsKLSAgICAgICAgICAgIHN0YXRpY19j
YXN0PENlbGxUeXBlKj4oY2VsbCktPmZpbmFsaXplVW5jb25kaXRpb25hbGx5KCp2bSgpKTsKKyAg
ICAgICAgICAgIHN0YXRpY19jYXN0PENlbGxUeXBlKj4oY2VsbCktPmZpbmFsaXplVW5jb25kaXRp
b25hbGx5KHZtKCkpOwogICAgICAgICB9KTsKIH0KIAogdm9pZCBIZWFwOjpmaW5hbGl6ZVVuY29u
ZGl0aW9uYWxGaW5hbGl6ZXJzKCkKIHsKLSAgICB2bSgpLT5idWlsdGluRXhlY3V0YWJsZXMoKS0+
ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoKTsKLSAgICBmaW5hbGl6ZU1hcmtlZFVuY29uZGl0aW9u
YWxGaW5hbGl6ZXJzPEZ1bmN0aW9uRXhlY3V0YWJsZT4odm0oKS0+ZnVuY3Rpb25FeGVjdXRhYmxl
U3BhY2Uuc3BhY2UpOwotICAgIGZpbmFsaXplTWFya2VkVW5jb25kaXRpb25hbEZpbmFsaXplcnM8
U3ltYm9sVGFibGU+KHZtKCktPnN5bWJvbFRhYmxlU3BhY2UpOwotICAgIHZtKCktPmZvckVhY2hD
b2RlQmxvY2tTcGFjZSgKKyAgICB2bSgpLmJ1aWx0aW5FeGVjdXRhYmxlcygpLT5maW5hbGl6ZVVu
Y29uZGl0aW9uYWxseSgpOworICAgIGZpbmFsaXplTWFya2VkVW5jb25kaXRpb25hbEZpbmFsaXpl
cnM8RnVuY3Rpb25FeGVjdXRhYmxlPih2bSgpLmZ1bmN0aW9uRXhlY3V0YWJsZVNwYWNlLnNwYWNl
KTsKKyAgICBmaW5hbGl6ZU1hcmtlZFVuY29uZGl0aW9uYWxGaW5hbGl6ZXJzPFN5bWJvbFRhYmxl
Pih2bSgpLnN5bWJvbFRhYmxlU3BhY2UpOworICAgIHZtKCkuZm9yRWFjaENvZGVCbG9ja1NwYWNl
KAogICAgICAgICBbJl0gKGF1dG8mIHNwYWNlKSB7CiAgICAgICAgICAgICB0aGlzLT5maW5hbGl6
ZU1hcmtlZFVuY29uZGl0aW9uYWxGaW5hbGl6ZXJzPENvZGVCbG9jaz4oc3BhY2Uuc2V0KTsKICAg
ICAgICAgfSk7Ci0gICAgZmluYWxpemVNYXJrZWRVbmNvbmRpdGlvbmFsRmluYWxpemVyczxFeGVj
dXRhYmxlVG9Db2RlQmxvY2tFZGdlPih2bSgpLT5leGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlc1dp
dGhGaW5hbGl6ZXJzKTsKLSAgICBmaW5hbGl6ZU1hcmtlZFVuY29uZGl0aW9uYWxGaW5hbGl6ZXJz
PFN0cnVjdHVyZVJhcmVEYXRhPih2bSgpLT5zdHJ1Y3R1cmVSYXJlRGF0YVNwYWNlKTsKLSAgICBm
aW5hbGl6ZU1hcmtlZFVuY29uZGl0aW9uYWxGaW5hbGl6ZXJzPFVubGlua2VkRnVuY3Rpb25FeGVj
dXRhYmxlPih2bSgpLT51bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZVNwYWNlLnNldCk7Ci0gICAg
aWYgKHZtKCktPm1fd2Vha1NldFNwYWNlKQotICAgICAgICBmaW5hbGl6ZU1hcmtlZFVuY29uZGl0
aW9uYWxGaW5hbGl6ZXJzPEpTV2Vha1NldD4oKnZtKCktPm1fd2Vha1NldFNwYWNlKTsKLSAgICBp
ZiAodm0oKS0+bV93ZWFrTWFwU3BhY2UpCi0gICAgICAgIGZpbmFsaXplTWFya2VkVW5jb25kaXRp
b25hbEZpbmFsaXplcnM8SlNXZWFrTWFwPigqdm0oKS0+bV93ZWFrTWFwU3BhY2UpOwotICAgIGlm
ICh2bSgpLT5tX3dlYWtPYmplY3RSZWZTcGFjZSkKLSAgICAgICAgZmluYWxpemVNYXJrZWRVbmNv
bmRpdGlvbmFsRmluYWxpemVyczxKU1dlYWtPYmplY3RSZWY+KCp2bSgpLT5tX3dlYWtPYmplY3RS
ZWZTcGFjZSk7Ci0gICAgaWYgKHZtKCktPm1fZXJyb3JJbnN0YW5jZVNwYWNlKQotICAgICAgICBm
aW5hbGl6ZU1hcmtlZFVuY29uZGl0aW9uYWxGaW5hbGl6ZXJzPEVycm9ySW5zdGFuY2U+KCp2bSgp
LT5tX2Vycm9ySW5zdGFuY2VTcGFjZSk7CisgICAgZmluYWxpemVNYXJrZWRVbmNvbmRpdGlvbmFs
RmluYWxpemVyczxFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlPih2bSgpLmV4ZWN1dGFibGVUb0Nv
ZGVCbG9ja0VkZ2VzV2l0aEZpbmFsaXplcnMpOworICAgIGZpbmFsaXplTWFya2VkVW5jb25kaXRp
b25hbEZpbmFsaXplcnM8U3RydWN0dXJlUmFyZURhdGE+KHZtKCkuc3RydWN0dXJlUmFyZURhdGFT
cGFjZSk7CisgICAgZmluYWxpemVNYXJrZWRVbmNvbmRpdGlvbmFsRmluYWxpemVyczxVbmxpbmtl
ZEZ1bmN0aW9uRXhlY3V0YWJsZT4odm0oKS51bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZVNwYWNl
LnNldCk7CisgICAgaWYgKHZtKCkubV93ZWFrU2V0U3BhY2UpCisgICAgICAgIGZpbmFsaXplTWFy
a2VkVW5jb25kaXRpb25hbEZpbmFsaXplcnM8SlNXZWFrU2V0Pigqdm0oKS5tX3dlYWtTZXRTcGFj
ZSk7CisgICAgaWYgKHZtKCkubV93ZWFrTWFwU3BhY2UpCisgICAgICAgIGZpbmFsaXplTWFya2Vk
VW5jb25kaXRpb25hbEZpbmFsaXplcnM8SlNXZWFrTWFwPigqdm0oKS5tX3dlYWtNYXBTcGFjZSk7
CisgICAgaWYgKHZtKCkubV93ZWFrT2JqZWN0UmVmU3BhY2UpCisgICAgICAgIGZpbmFsaXplTWFy
a2VkVW5jb25kaXRpb25hbEZpbmFsaXplcnM8SlNXZWFrT2JqZWN0UmVmPigqdm0oKS5tX3dlYWtP
YmplY3RSZWZTcGFjZSk7CisgICAgaWYgKHZtKCkubV9lcnJvckluc3RhbmNlU3BhY2UpCisgICAg
ICAgIGZpbmFsaXplTWFya2VkVW5jb25kaXRpb25hbEZpbmFsaXplcnM8RXJyb3JJbnN0YW5jZT4o
KnZtKCkubV9lcnJvckluc3RhbmNlU3BhY2UpOwogCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQot
ICAgIGlmICh2bSgpLT5tX3dlYkFzc2VtYmx5Q29kZUJsb2NrU3BhY2UpCi0gICAgICAgIGZpbmFs
aXplTWFya2VkVW5jb25kaXRpb25hbEZpbmFsaXplcnM8SlNXZWJBc3NlbWJseUNvZGVCbG9jaz4o
KnZtKCktPm1fd2ViQXNzZW1ibHlDb2RlQmxvY2tTcGFjZSk7CisgICAgaWYgKHZtKCkubV93ZWJB
c3NlbWJseUNvZGVCbG9ja1NwYWNlKQorICAgICAgICBmaW5hbGl6ZU1hcmtlZFVuY29uZGl0aW9u
YWxGaW5hbGl6ZXJzPEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s+KCp2bSgpLm1fd2ViQXNzZW1ibHlD
b2RlQmxvY2tTcGFjZSk7CiAjZW5kaWYKIH0KIApAQCAtNjQ5LDkgKzY0OSw5IEBAIHZvaWQgSGVh
cDo6Y29tcGxldGVBbGxKSVRQbGFucygpCiAgICAgaWYgKCFWTTo6Y2FuVXNlSklUKCkpCiAgICAg
ICAgIHJldHVybjsKICNpZiBFTkFCTEUoSklUKQotICAgIEpJVFdvcmtsaXN0OjplbnN1cmVHbG9i
YWxXb3JrbGlzdCgpLmNvbXBsZXRlQWxsRm9yVk0oKm1fdm0pOworICAgIEpJVFdvcmtsaXN0Ojpl
bnN1cmVHbG9iYWxXb3JrbGlzdCgpLmNvbXBsZXRlQWxsRm9yVk0obV92bSk7CiAjZW5kaWYgLy8g
RU5BQkxFKEpJVCkKLSAgICBERkc6OmNvbXBsZXRlQWxsUGxhbnNGb3JWTSgqbV92bSk7CisgICAg
REZHOjpjb21wbGV0ZUFsbFBsYW5zRm9yVk0obV92bSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1l
IEZ1bmM+CkBAIC02NTksNyArNjU5LDcgQEAgdm9pZCBIZWFwOjppdGVyYXRlRXhlY3V0aW5nQW5k
Q29tcGlsaW5nQwogewogICAgIG1fY29kZUJsb2Nrcy0+aXRlcmF0ZUN1cnJlbnRseUV4ZWN1dGlu
ZyhmdW5jKTsKICAgICBpZiAoVk06OmNhblVzZUpJVCgpKQotICAgICAgICBERkc6Oml0ZXJhdGVD
b2RlQmxvY2tzRm9yR0MoKm1fdm0sIGZ1bmMpOworICAgICAgICBERkc6Oml0ZXJhdGVDb2RlQmxv
Y2tzRm9yR0MobV92bSwgZnVuYyk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CkBAIC03
MDgsNyArNzA4LDcgQEAgdm9pZCBIZWFwOjpnYXRoZXJTdGFja1Jvb3RzKENvbnNlcnZhdGl2ZQog
dm9pZCBIZWFwOjpnYXRoZXJKU1N0YWNrUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMmIHJvb3RzKQog
ewogI2lmIEVOQUJMRShDX0xPT1ApCi0gICAgbV92bS0+aW50ZXJwcmV0ZXItPmNsb29wU3RhY2so
KS5nYXRoZXJDb25zZXJ2YXRpdmVSb290cyhyb290cywgKm1faml0U3R1YlJvdXRpbmVzLCAqbV9j
b2RlQmxvY2tzKTsKKyAgICBtX3ZtLmludGVycHJldGVyLT5jbG9vcFN0YWNrKCkuZ2F0aGVyQ29u
c2VydmF0aXZlUm9vdHMocm9vdHMsICptX2ppdFN0dWJSb3V0aW5lcywgKm1fY29kZUJsb2Nrcyk7
CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShyb290cyk7CiAjZW5kaWYKQEAgLTcxOSw3ICs3MTks
NyBAQCB2b2lkIEhlYXA6OmdhdGhlclNjcmF0Y2hCdWZmZXJSb290cyhDb25zCiAjaWYgRU5BQkxF
KERGR19KSVQpCiAgICAgaWYgKCFWTTo6Y2FuVXNlSklUKCkpCiAgICAgICAgIHJldHVybjsKLSAg
ICBtX3ZtLT5nYXRoZXJTY3JhdGNoQnVmZmVyUm9vdHMocm9vdHMpOworICAgIG1fdm0uZ2F0aGVy
U2NyYXRjaEJ1ZmZlclJvb3RzKHJvb3RzKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHJvb3Rz
KTsKICNlbmRpZgpAQCAtNzM5LDEzICs3MzksMTMgQEAgdm9pZCBIZWFwOjpyZW1vdmVEZWFkQ29t
cGlsZXJXb3JrbGlzdEVudAogICAgIGlmICghVk06OmNhblVzZUpJVCgpKQogICAgICAgICByZXR1
cm47CiAgICAgZm9yICh1bnNpZ25lZCBpID0gREZHOjpudW1iZXJPZldvcmtsaXN0cygpOyBpLS07
KQotICAgICAgICBERkc6OmV4aXN0aW5nV29ya2xpc3RGb3JJbmRleChpKS5yZW1vdmVEZWFkUGxh
bnMoKm1fdm0pOworICAgICAgICBERkc6OmV4aXN0aW5nV29ya2xpc3RGb3JJbmRleChpKS5yZW1v
dmVEZWFkUGxhbnMobV92bSk7CiAjZW5kaWYKIH0KIAogYm9vbCBIZWFwOjppc0FuYWx5emluZ0hl
YXAoKSBjb25zdAogewotICAgIEhlYXBQcm9maWxlciogaGVhcFByb2ZpbGVyID0gbV92bS0+aGVh
cFByb2ZpbGVyKCk7CisgICAgSGVhcFByb2ZpbGVyKiBoZWFwUHJvZmlsZXIgPSBtX3ZtLmhlYXBQ
cm9maWxlcigpOwogICAgIGlmIChVTkxJS0VMWShoZWFwUHJvZmlsZXIpKQogICAgICAgICByZXR1
cm4gaGVhcFByb2ZpbGVyLT5hY3RpdmVIZWFwQW5hbHl6ZXIoKTsKICAgICByZXR1cm4gZmFsc2U7
CkBAIC03NzUsNyArNzc1LDcgQEAgdm9pZCBIZWFwOjpnYXRoZXJFeHRyYUhlYXBEYXRhKEhlYXBQ
cm9maQogewogICAgIGlmIChhdXRvKiBhbmFseXplciA9IGhlYXBQcm9maWxlci5hY3RpdmVIZWFw
QW5hbHl6ZXIoKSkgewogICAgICAgICBIZWFwSXRlcmF0aW9uU2NvcGUgaGVhcEl0ZXJhdGlvblNj
b3BlKCp0aGlzKTsKLSAgICAgICAgR2F0aGVyRXh0cmFIZWFwRGF0YSBmdW5jdG9yKCptX3ZtLCAq
YW5hbHl6ZXIpOworICAgICAgICBHYXRoZXJFeHRyYUhlYXBEYXRhIGZ1bmN0b3IobV92bSwgKmFu
YWx5emVyKTsKICAgICAgICAgbV9vYmplY3RTcGFjZS5mb3JFYWNoTGl2ZUNlbGwoaGVhcEl0ZXJh
dGlvblNjb3BlLCBmdW5jdG9yKTsKICAgICB9CiB9CkBAIC05MDIsNyArOTAyLDcgQEAgc3RkOjp1
bmlxdWVfcHRyPFR5cGVDb3VudFNldD4gSGVhcDo6cHJvdAogICAgIHN0ZDo6dW5pcXVlX3B0cjxU
eXBlQ291bnRTZXQ+IHJlc3VsdCA9IG1ha2VVbmlxdWU8VHlwZUNvdW50U2V0PigpOwogICAgIGZv
ckVhY2hQcm90ZWN0ZWRDZWxsKAogICAgICAgICBbJl0gKEpTQ2VsbCogY2VsbCkgewotICAgICAg
ICAgICAgcmVjb3JkVHlwZSgqdm0oKSwgKnJlc3VsdCwgY2VsbCk7CisgICAgICAgICAgICByZWNv
cmRUeXBlKHZtKCksICpyZXN1bHQsIGNlbGwpOwogICAgICAgICB9KTsKICAgICByZXR1cm4gcmVz
dWx0OwogfQpAQCAtOTE1LDcgKzkxNSw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxUeXBlQ291bnRTZXQ+
IEhlYXA6Om9iamUKICAgICAgICAgaXRlcmF0aW9uU2NvcGUsCiAgICAgICAgIFsmXSAoSGVhcENl
bGwqIGNlbGwsIEhlYXBDZWxsOjpLaW5kIGtpbmQpIC0+IEl0ZXJhdGlvblN0YXR1cyB7CiAgICAg
ICAgICAgICBpZiAoaXNKU0NlbGxLaW5kKGtpbmQpKQotICAgICAgICAgICAgICAgIHJlY29yZFR5
cGUoKnZtKCksICpyZXN1bHQsIHN0YXRpY19jYXN0PEpTQ2VsbCo+KGNlbGwpKTsKKyAgICAgICAg
ICAgICAgICByZWNvcmRUeXBlKHZtKCksICpyZXN1bHQsIHN0YXRpY19jYXN0PEpTQ2VsbCo+KGNl
bGwpKTsKICAgICAgICAgICAgIHJldHVybiBJdGVyYXRpb25TdGF0dXM6OkNvbnRpbnVlOwogICAg
ICAgICB9KTsKICAgICByZXR1cm4gcmVzdWx0OwpAQCAtOTI2LDcgKzkyNiw3IEBAIHZvaWQgSGVh
cDo6ZGVsZXRlQWxsQ29kZUJsb2NrcyhEZWxldGVBbGwKICAgICBpZiAobV9jb2xsZWN0aW9uU2Nv
cGUgJiYgZWZmb3J0ID09IERlbGV0ZUFsbENvZGVJZk5vdENvbGxlY3RpbmcpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIFZNJiB2bSA9ICptX3ZtOworICAgIFZNJiB2bSA9IG1fdm07CiAgICAgUHJl
dmVudENvbGxlY3Rpb25TY29wZSBwcmV2ZW50Q29sbGVjdGlvblNjb3BlKCp0aGlzKTsKICAgICAK
ICAgICAvLyBJZiBKYXZhU2NyaXB0IGlzIHJ1bm5pbmcsIGl0J3Mgbm90IHNhZmUgdG8gZGVsZXRl
IGFsbCBKYXZhU2NyaXB0IGNvZGUsIHNpbmNlCkBAIC05NzEsNyArOTcxLDcgQEAgdm9pZCBIZWFw
OjpkZWxldGVBbGxVbmxpbmtlZENvZGVCbG9ja3MoRAogICAgIGlmIChtX2NvbGxlY3Rpb25TY29w
ZSAmJiBlZmZvcnQgPT0gRGVsZXRlQWxsQ29kZUlmTm90Q29sbGVjdGluZykKICAgICAgICAgcmV0
dXJuOwogCi0gICAgVk0mIHZtID0gKm1fdm07CisgICAgVk0mIHZtID0gbV92bTsKICAgICBQcmV2
ZW50Q29sbGVjdGlvblNjb3BlIHByZXZlbnRDb2xsZWN0aW9uU2NvcGUoKnRoaXMpOwogCiAgICAg
UkVMRUFTRV9BU1NFUlQoIW1fY29sbGVjdGlvblNjb3BlKTsKQEAgLTk4Niw4ICs5ODYsOCBAQCB2
b2lkIEhlYXA6OmRlbGV0ZUFsbFVubGlua2VkQ29kZUJsb2NrcyhECiAKIHZvaWQgSGVhcDo6ZGVs
ZXRlVW5tYXJrZWRDb21waWxlZENvZGUoKQogewotICAgIHZtKCktPmZvckVhY2hTY3JpcHRFeGVj
dXRhYmxlU3BhY2UoW10gKGF1dG8mIHNwYWNlKSB7IHNwYWNlLnNwYWNlLnN3ZWVwKCk7IH0pOwot
ICAgIHZtKCktPmZvckVhY2hDb2RlQmxvY2tTcGFjZShbXSAoYXV0byYgc3BhY2UpIHsgc3BhY2Uu
c3BhY2Uuc3dlZXAoKTsgfSk7IC8vIFN3ZWVwaW5nIG11c3Qgb2NjdXIgYmVmb3JlIGRlbGV0aW5n
IHN0dWJzLCBvdGhlcndpc2UgdGhlIHN0dWJzIG1pZ2h0IHN0aWxsIHRoaW5rIHRoZXkncmUgYWxp
dmUgYXMgdGhleSBnZXQgZGVsZXRlZC4KKyAgICB2bSgpLmZvckVhY2hTY3JpcHRFeGVjdXRhYmxl
U3BhY2UoW10gKGF1dG8mIHNwYWNlKSB7IHNwYWNlLnNwYWNlLnN3ZWVwKCk7IH0pOworICAgIHZt
KCkuZm9yRWFjaENvZGVCbG9ja1NwYWNlKFtdIChhdXRvJiBzcGFjZSkgeyBzcGFjZS5zcGFjZS5z
d2VlcCgpOyB9KTsgLy8gU3dlZXBpbmcgbXVzdCBvY2N1ciBiZWZvcmUgZGVsZXRpbmcgc3R1YnMs
IG90aGVyd2lzZSB0aGUgc3R1YnMgbWlnaHQgc3RpbGwgdGhpbmsgdGhleSdyZSBhbGl2ZSBhcyB0
aGV5IGdldCBkZWxldGVkLgogICAgIG1faml0U3R1YlJvdXRpbmVzLT5kZWxldGVVbm1hcmtlZEpl
dHRpc29uZWRTdHViUm91dGluZXMoKTsKIH0KIApAQCAtMTE4MSwxMCArMTE4MSwxMCBAQCB2b2lk
IEhlYXA6OmNoZWNrQ29ubihHQ0NvbmR1Y3RvciBjb25uKQogICAgIHVuc2lnbmVkIHdvcmxkU3Rh
dGUgPSBtX3dvcmxkU3RhdGUubG9hZCgpOwogICAgIHN3aXRjaCAoY29ubikgewogICAgIGNhc2Ug
R0NDb25kdWN0b3I6Ok11dGF0b3I6Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKHdvcmxkU3RhdGUg
JiBtdXRhdG9ySGFzQ29ubkJpdCwgd29ybGRTdGF0ZSwgYXNJbnQobV9sYXN0UGhhc2UpLCBhc0lu
dChtX2N1cnJlbnRQaGFzZSksIGFzSW50KG1fbmV4dFBoYXNlKSwgdm0oKS0+aWQoKSwgVk06Om51
bWJlck9mSURzKCksIHZtKCktPmlzRW50ZXJlZCgpKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQo
d29ybGRTdGF0ZSAmIG11dGF0b3JIYXNDb25uQml0LCB3b3JsZFN0YXRlLCBhc0ludChtX2xhc3RQ
aGFzZSksIGFzSW50KG1fY3VycmVudFBoYXNlKSwgYXNJbnQobV9uZXh0UGhhc2UpLCB2bSgpLmlk
KCksIFZNOjpudW1iZXJPZklEcygpLCB2bSgpLmlzRW50ZXJlZCgpKTsKICAgICAgICAgcmV0dXJu
OwogICAgIGNhc2UgR0NDb25kdWN0b3I6OkNvbGxlY3RvcjoKLSAgICAgICAgUkVMRUFTRV9BU1NF
UlQoISh3b3JsZFN0YXRlICYgbXV0YXRvckhhc0Nvbm5CaXQpLCB3b3JsZFN0YXRlLCBhc0ludCht
X2xhc3RQaGFzZSksIGFzSW50KG1fY3VycmVudFBoYXNlKSwgYXNJbnQobV9uZXh0UGhhc2UpLCB2
bSgpLT5pZCgpLCBWTTo6bnVtYmVyT2ZJRHMoKSwgdm0oKS0+aXNFbnRlcmVkKCkpOworICAgICAg
ICBSRUxFQVNFX0FTU0VSVCghKHdvcmxkU3RhdGUgJiBtdXRhdG9ySGFzQ29ubkJpdCksIHdvcmxk
U3RhdGUsIGFzSW50KG1fbGFzdFBoYXNlKSwgYXNJbnQobV9jdXJyZW50UGhhc2UpLCBhc0ludCht
X25leHRQaGFzZSksIHZtKCkuaWQoKSwgVk06Om51bWJlck9mSURzKCksIHZtKCkuaXNFbnRlcmVk
KCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CkBAIC0xNTA4LDggKzE1MDgsOCBAQCBORVZFUl9JTkxJTkUgYm9vbCBIZWFwOjpydW5F
bmRQaGFzZShHQ0NvCiAgICAgICAgIG1fdmVyaWZpZXItPnZlcmlmeShIZWFwVmVyaWZpZXI6OlBo
YXNlOjpBZnRlck1hcmtpbmcpOwogICAgIH0KICAgICAgICAgCi0gICAgaWYgKHZtKCktPnR5cGVQ
cm9maWxlcigpKQotICAgICAgICB2bSgpLT50eXBlUHJvZmlsZXIoKS0+aW52YWxpZGF0ZVR5cGVT
ZXRDYWNoZSgqdm0oKSk7CisgICAgaWYgKHZtKCkudHlwZVByb2ZpbGVyKCkpCisgICAgICAgIHZt
KCkudHlwZVByb2ZpbGVyKCktPmludmFsaWRhdGVUeXBlU2V0Q2FjaGUodm0oKSk7CiAKICAgICBy
ZWFwV2Vha0hhbmRsZXMoKTsKICAgICBwcnVuZVN0YWxlRW50cmllc0Zyb21XZWFrR0NNYXBzKCk7
CkBAIC0xNjQ4LDE1ICsxNjQ4LDE1IEBAIHZvaWQgSGVhcDo6c3RvcFRoZVBlcmlwaGVyeShHQ0Nv
bmR1Y3RvciAKICNpZiBFTkFCTEUoSklUKQogICAgIGlmIChWTTo6Y2FuVXNlSklUKCkpIHsKICAg
ICAgICAgRGVmZXJHQ0ZvckFXaGlsZSBhd2hpbGUoKnRoaXMpOwotICAgICAgICBpZiAoSklUV29y
a2xpc3Q6OmVuc3VyZUdsb2JhbFdvcmtsaXN0KCkuY29tcGxldGVBbGxGb3JWTSgqbV92bSkKKyAg
ICAgICAgaWYgKEpJVFdvcmtsaXN0OjplbnN1cmVHbG9iYWxXb3JrbGlzdCgpLmNvbXBsZXRlQWxs
Rm9yVk0obV92bSkKICAgICAgICAgICAgICYmIGNvbm4gPT0gR0NDb25kdWN0b3I6OkNvbGxlY3Rv
cikKICAgICAgICAgICAgIHNldEdDRGlkSklUKCk7CiAgICAgfQogI2VuZGlmIC8vIEVOQUJMRShK
SVQpCiAgICAgVU5VU0VEX1BBUkFNKGNvbm4pOwogICAgIAotICAgIGlmIChhdXRvKiBzaGFkb3dD
aGlja2VuID0gdm0oKS0+c2hhZG93Q2hpY2tlbigpKQotICAgICAgICBzaGFkb3dDaGlja2VuLT51
cGRhdGUoKnZtKCksIHZtKCktPnRvcENhbGxGcmFtZSk7CisgICAgaWYgKGF1dG8qIHNoYWRvd0No
aWNrZW4gPSB2bSgpLnNoYWRvd0NoaWNrZW4oKSkKKyAgICAgICAgc2hhZG93Q2hpY2tlbi0+dXBk
YXRlKHZtKCksIHZtKCkudG9wQ2FsbEZyYW1lKTsKICAgICAKICAgICBtX3N0cnVjdHVyZUlEVGFi
bGUuZmx1c2hPbGRUYWJsZXMoKTsKICAgICBtX29iamVjdFNwYWNlLnN0b3BBbGxvY2F0aW5nKCk7
CkBAIC0yMDk3LDEzICsyMDk3LDEzIEBAIHZvaWQgSGVhcDo6ZmluYWxpemUoKQogICAgICAgICBz
d2VlcEluRmluYWxpemUoKTsKICAgICB9CiAgICAgCi0gICAgaWYgKEhhc093blByb3BlcnR5Q2Fj
aGUqIGNhY2hlID0gdm0oKS0+aGFzT3duUHJvcGVydHlDYWNoZSgpKQorICAgIGlmIChIYXNPd25Q
cm9wZXJ0eUNhY2hlKiBjYWNoZSA9IHZtKCkuaGFzT3duUHJvcGVydHlDYWNoZSgpKQogICAgICAg
ICBjYWNoZS0+Y2xlYXIoKTsKIAogICAgIGltbXV0YWJsZUJ1dHRlcmZseVRvU3RyaW5nQ2FjaGUu
Y2xlYXIoKTsKICAgICAKICAgICBmb3IgKGNvbnN0IEhlYXBGaW5hbGl6ZXJDYWxsYmFjayYgY2Fs
bGJhY2sgOiBtX2hlYXBGaW5hbGl6ZXJDYWxsYmFja3MpCi0gICAgICAgIGNhbGxiYWNrLnJ1bigq
dm0oKSk7CisgICAgICAgIGNhbGxiYWNrLnJ1bih2bSgpKTsKICAgICAKICAgICBpZiAoc2hvdWxk
U3dlZXBTeW5jaHJvbm91c2x5KCkpCiAgICAgICAgIHN3ZWVwU3luY2hyb25vdXNseSgpOwpAQCAt
MjExOCw4ICsyMTE4LDggQEAgSGVhcDo6VGlja2V0IEhlYXA6OnJlcXVlc3RDb2xsZWN0aW9uKEdD
UgogewogICAgIHN0b3BJZk5lY2Vzc2FyeSgpOwogICAgIAotICAgIEFTU0VSVCh2bSgpLT5jdXJy
ZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsKLSAgICBSRUxFQVNFX0FTU0VSVCh2bSgpLT5h
dG9tU3RyaW5nVGFibGUoKSA9PSBUaHJlYWQ6OmN1cnJlbnQoKS5hdG9tU3RyaW5nVGFibGUoKSk7
CisgICAgQVNTRVJUKHZtKCkuY3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7CisgICAg
UkVMRUFTRV9BU1NFUlQodm0oKS5hdG9tU3RyaW5nVGFibGUoKSA9PSBUaHJlYWQ6OmN1cnJlbnQo
KS5hdG9tU3RyaW5nVGFibGUoKSk7CiAgICAgCiAgICAgTG9ja0hvbGRlciBsb2NrZXIoKm1fdGhy
ZWFkTG9jayk7CiAgICAgLy8gV2UgbWF5IGJlIGFibGUgdG8gc3RlYWwgdGhlIGNvbm4uIFRoYXQg
b25seSB3b3JrcyBpZiB0aGUgY29sbGVjdG9yIGlzIGRlZmluaXRlbHkgbm90IHJ1bm5pbmcKQEAg
LTIxNTAsNyArMjE1MCw3IEBAIHZvaWQgSGVhcDo6d2FpdEZvckNvbGxlY3Rpb24oVGlja2V0IHRp
Y2sKIHZvaWQgSGVhcDo6c3dlZXBJbkZpbmFsaXplKCkKIHsKICAgICBtX29iamVjdFNwYWNlLnN3
ZWVwTGFyZ2VBbGxvY2F0aW9ucygpOwotICAgIHZtKCktPmVhZ2VybHlTd2VwdERlc3RydWN0aWJs
ZU9iamVjdFNwYWNlLnN3ZWVwKCk7CisgICAgdm0oKS5lYWdlcmx5U3dlcHREZXN0cnVjdGlibGVP
YmplY3RTcGFjZS5zd2VlcCgpOwogfQogCiB2b2lkIEhlYXA6OnN1c3BlbmRDb21waWxlclRocmVh
ZHMoKQpAQCAtMjIyNyw3ICsyMjI3LDcgQEAgdm9pZCBIZWFwOjpwcnVuZVN0YWxlRW50cmllc0Zy
b21XZWFrR0NNYQogCiB2b2lkIEhlYXA6OnN3ZWVwQXJyYXlCdWZmZXJzKCkKIHsKLSAgICBtX2Fy
cmF5QnVmZmVycy5zd2VlcCgqdm0oKSk7CisgICAgbV9hcnJheUJ1ZmZlcnMuc3dlZXAodm0oKSk7
CiB9CiAKIHZvaWQgSGVhcDo6c25hcHNob3RVbnN3ZXB0KCkKQEAgLTIyMzksNyArMjIzOSw3IEBA
IHZvaWQgSGVhcDo6c25hcHNob3RVbnN3ZXB0KCkKIHZvaWQgSGVhcDo6ZGVsZXRlU291cmNlUHJv
dmlkZXJDYWNoZXMoKQogewogICAgIGlmIChtX2xhc3RDb2xsZWN0aW9uU2NvcGUgJiYgbV9sYXN0
Q29sbGVjdGlvblNjb3BlLnZhbHVlKCkgPT0gQ29sbGVjdGlvblNjb3BlOjpGdWxsKQotICAgICAg
ICBtX3ZtLT5jbGVhclNvdXJjZVByb3ZpZGVyQ2FjaGVzKCk7CisgICAgICAgIG1fdm0uY2xlYXJT
b3VyY2VQcm92aWRlckNhY2hlcygpOwogfQogCiB2b2lkIEhlYXA6Om5vdGlmeUluY3JlbWVudGFs
U3dlZXBlcigpCkBAIC0yMzU5LDcgKzIzNTksNyBAQCB2b2lkIEhlYXA6OmRpZEZpbmlzaENvbGxl
Y3Rpb24oKQogICAgIEFTU0VSVChleHRlcm5hbE1lbW9yeVNpemUoKSA8PSBleHRyYU1lbW9yeVNp
emUoKSk7CiAjZW5kaWYKIAotICAgIGlmIChIZWFwUHJvZmlsZXIqIGhlYXBQcm9maWxlciA9IG1f
dm0tPmhlYXBQcm9maWxlcigpKSB7CisgICAgaWYgKEhlYXBQcm9maWxlciogaGVhcFByb2ZpbGVy
ID0gbV92bS5oZWFwUHJvZmlsZXIoKSkgewogICAgICAgICBnYXRoZXJFeHRyYUhlYXBEYXRhKCpo
ZWFwUHJvZmlsZXIpOwogICAgICAgICByZW1vdmVEZWFkSGVhcFNuYXBzaG90Tm9kZXMoKmhlYXBQ
cm9maWxlcik7CiAgICAgfQpAQCAtMjcyOSwxMSArMjcyOSwxMSBAQCB2b2lkIEhlYXA6OmFkZENv
cmVDb25zdHJhaW50cygpCiAgICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9y
KSB7CiAKICNpZiBKU0NfT0JKQ19BUElfRU5BQkxFRAotICAgICAgICAgICAgc2NhbkV4dGVybmFs
UmVtZW1iZXJlZFNldCgqbV92bSwgc2xvdFZpc2l0b3IpOworICAgICAgICAgICAgc2NhbkV4dGVy
bmFsUmVtZW1iZXJlZFNldChtX3ZtLCBzbG90VmlzaXRvcik7CiAjZW5kaWYKLSAgICAgICAgICAg
IGlmIChtX3ZtLT5zbWFsbFN0cmluZ3MubmVlZHNUb0JlVmlzaXRlZCgqbV9jb2xsZWN0aW9uU2Nv
cGUpKSB7CisgICAgICAgICAgICBpZiAobV92bS5zbWFsbFN0cmluZ3MubmVlZHNUb0JlVmlzaXRl
ZCgqbV9jb2xsZWN0aW9uU2NvcGUpKSB7CiAgICAgICAgICAgICAgICAgU2V0Um9vdE1hcmtSZWFz
b25TY29wZSByb290U2NvcGUoc2xvdFZpc2l0b3IsIFNsb3RWaXNpdG9yOjpSb290TWFya1JlYXNv
bjo6U3Ryb25nUmVmZXJlbmNlcyk7Ci0gICAgICAgICAgICAgICAgbV92bS0+c21hbGxTdHJpbmdz
LnZpc2l0U3Ryb25nUmVmZXJlbmNlcyhzbG90VmlzaXRvcik7CisgICAgICAgICAgICAgICAgbV92
bS5zbWFsbFN0cmluZ3MudmlzaXRTdHJvbmdSZWZlcmVuY2VzKHNsb3RWaXNpdG9yKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgewpAQCAtMjc0OSw4ICsyNzQ5LDgg
QEAgdm9pZCBIZWFwOjphZGRDb3JlQ29uc3RyYWludHMoKQogCiAgICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICAgU2V0Um9vdE1hcmtSZWFzb25TY29wZSByb290U2NvcGUoc2xvdFZpc2l0b3Is
IFNsb3RWaXNpdG9yOjpSb290TWFya1JlYXNvbjo6Vk1FeGNlcHRpb25zKTsKLSAgICAgICAgICAg
ICAgICBzbG90VmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChtX3ZtLT5leGNlcHRpb24oKSk7Ci0g
ICAgICAgICAgICAgICAgc2xvdFZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQobV92bS0+bGFzdEV4
Y2VwdGlvbigpKTsKKyAgICAgICAgICAgICAgICBzbG90VmlzaXRvci5hcHBlbmRVbmJhcnJpZXJl
ZChtX3ZtLmV4Y2VwdGlvbigpKTsKKyAgICAgICAgICAgICAgICBzbG90VmlzaXRvci5hcHBlbmRV
bmJhcnJpZXJlZChtX3ZtLmxhc3RFeGNlcHRpb24oKSk7CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0sCiAgICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeUV4ZWN1dGlvbik7CkBA
IC0yNzY5LDcgKzI3NjksNyBAQCB2b2lkIEhlYXA6OmFkZENvcmVDb25zdHJhaW50cygpCiAgICAg
ICAgICAgICBTZXRSb290TWFya1JlYXNvblNjb3BlIHJvb3RTY29wZShzbG90VmlzaXRvciwgU2xv
dFZpc2l0b3I6OlJvb3RNYXJrUmVhc29uOjpEZWJ1Z2dlcik7CiAKICNpZiBFTkFCTEUoU0FNUExJ
TkdfUFJPRklMRVIpCi0gICAgICAgICAgICBpZiAoU2FtcGxpbmdQcm9maWxlciogc2FtcGxpbmdQ
cm9maWxlciA9IG1fdm0tPnNhbXBsaW5nUHJvZmlsZXIoKSkgeworICAgICAgICAgICAgaWYgKFNh
bXBsaW5nUHJvZmlsZXIqIHNhbXBsaW5nUHJvZmlsZXIgPSBtX3ZtLnNhbXBsaW5nUHJvZmlsZXIo
KSkgewogICAgICAgICAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKHNhbXBsaW5nUHJvZmlsZXIt
PmdldExvY2soKSk7CiAgICAgICAgICAgICAgICAgc2FtcGxpbmdQcm9maWxlci0+cHJvY2Vzc1Vu
dmVyaWZpZWRTdGFja1RyYWNlcygpOwogICAgICAgICAgICAgICAgIHNhbXBsaW5nUHJvZmlsZXIt
PnZpc2l0KHNsb3RWaXNpdG9yKTsKQEAgLTI3NzgsMTAgKzI3NzgsMTAgQEAgdm9pZCBIZWFwOjph
ZGRDb3JlQ29uc3RyYWludHMoKQogICAgICAgICAgICAgfQogI2VuZGlmIC8vIEVOQUJMRShTQU1Q
TElOR19QUk9GSUxFUikKIAotICAgICAgICAgICAgaWYgKG1fdm0tPnR5cGVQcm9maWxlcigpKQot
ICAgICAgICAgICAgICAgIG1fdm0tPnR5cGVQcm9maWxlckxvZygpLT52aXNpdChzbG90VmlzaXRv
cik7CisgICAgICAgICAgICBpZiAobV92bS50eXBlUHJvZmlsZXIoKSkKKyAgICAgICAgICAgICAg
ICBtX3ZtLnR5cGVQcm9maWxlckxvZygpLT52aXNpdChzbG90VmlzaXRvcik7CiAgICAgICAgICAg
ICAKLSAgICAgICAgICAgIGlmIChhdXRvKiBzaGFkb3dDaGlja2VuID0gbV92bS0+c2hhZG93Q2hp
Y2tlbigpKQorICAgICAgICAgICAgaWYgKGF1dG8qIHNoYWRvd0NoaWNrZW4gPSBtX3ZtLnNoYWRv
d0NoaWNrZW4oKSkKICAgICAgICAgICAgICAgICBzaGFkb3dDaGlja2VuLT52aXNpdENoaWxkcmVu
KHNsb3RWaXNpdG9yKTsKICAgICAgICAgfSwKICAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHk6
OkdyZXllZEJ5RXhlY3V0aW9uKTsKQEAgLTI4MzAsNyArMjgzMCw3IEBAIHZvaWQgSGVhcDo6YWRk
Q29yZUNvbnN0cmFpbnRzKCkKICAgICAgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBpcyBhbG1v
c3QgY2VydGFpbmx5IHVubmVjZXNzYXJ5LgogICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjY4MjkKICAgICAgICAgICAgICAgICBERkc6
Oml0ZXJhdGVDb2RlQmxvY2tzRm9yR0MoCi0gICAgICAgICAgICAgICAgICAgICptX3ZtLAorICAg
ICAgICAgICAgICAgICAgICBtX3ZtLAogICAgICAgICAgICAgICAgICAgICBbJl0gKENvZGVCbG9j
ayogY29kZUJsb2NrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBzbG90VmlzaXRvci5hcHBl
bmRVbmJhcnJpZXJlZChjb2RlQmxvY2spOwogICAgICAgICAgICAgICAgICAgICB9KTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMTM5LDEyICsxMzks
MTIgQEAgcHVibGljOgogICAgIC8vIFRha2UgdGhpcyBpZiB5b3Uga25vdyB0aGF0IGZyb20tPmNl
bGxTdGF0ZSgpIDwgYmFycmllclRocmVzaG9sZC4KICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lk
IHdyaXRlQmFycmllclNsb3dQYXRoKGNvbnN0IEpTQ2VsbCogZnJvbSk7CiAKLSAgICBIZWFwKFZN
KiwgSGVhcFR5cGUpOworICAgIEhlYXAoVk0mLCBIZWFwVHlwZSk7CiAgICAgfkhlYXAoKTsKICAg
ICB2b2lkIGxhc3RDaGFuY2VUb0ZpbmFsaXplKCk7CiAgICAgdm9pZCByZWxlYXNlRGVsYXllZFJl
bGVhc2VkT2JqZWN0cygpOwogCi0gICAgVk0qIHZtKCkgY29uc3Q7CisgICAgVk0mIHZtKCkgY29u
c3Q7CiAKICAgICBNYXJrZWRTcGFjZSYgb2JqZWN0U3BhY2UoKSB7IHJldHVybiBtX29iamVjdFNw
YWNlOyB9CiAgICAgTWFjaGluZVRocmVhZHMmIG1hY2hpbmVUaHJlYWRzKCkgeyByZXR1cm4gKm1f
bWFjaGluZVRocmVhZHM7IH0KQEAgLTY0Miw3ICs2NDIsNyBAQCBwcml2YXRlOgogCiAgICAgdW5z
aWduZWQgbV9iYXJyaWVyVGhyZXNob2xkIHsgT3B0aW9uczo6Zm9yY2VGZW5jZWRCYXJyaWVyKCkg
PyB0YXV0b2xvZ2ljYWxUaHJlc2hvbGQgOiBibGFja1RocmVzaG9sZCB9OwogCi0gICAgVk0qIG1f
dm07CisgICAgVk0mIG1fdm07CiAgICAgU2Vjb25kcyBtX2xhc3RGdWxsR0NMZW5ndGggeyAxMF9t
cyB9OwogICAgIFNlY29uZHMgbV9sYXN0RWRlbkdDTGVuZ3RoIHsgMTBfbXMgfTsKIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcENlbGwuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwQ2VsbC5oCShyZXZpc2lvbiAyNDkxMjgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwQ2VsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC03
Myw3ICs3Myw3IEBAIHB1YmxpYzoKICAgICAvLyByZWNvbW1lbmRlZCB0byB1c2UgaXQgZm9yIHRv
byBtYW55IG90aGVyIHRoaW5ncywgc2luY2UgdGhlIGxhcmdlIGFsbG9jYXRpb24gY3V0b2ZmIGlz
CiAgICAgLy8gYSBydW50aW1lIG9wdGlvbiBhbmQgaXRzIGRlZmF1bHQgdmFsdWUgaXMgc21hbGwg
KDQwMCBieXRlcykuCiAgICAgSGVhcCogaGVhcCgpIGNvbnN0OwotICAgIFZNKiB2bSgpIGNvbnN0
OworICAgIFZNJiB2bSgpIGNvbnN0OwogICAgIAogICAgIHNpemVfdCBjZWxsU2l6ZSgpIGNvbnN0
OwogICAgIENlbGxBdHRyaWJ1dGVzIGNlbGxBdHRyaWJ1dGVzKCkgY29uc3Q7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwQ2VsbElubGluZXMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwQ2VsbElubGluZXMuaAkocmV2aXNpb24gMjQ5
MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcENlbGxJbmxpbmVzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2
LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC01NiwxMCArNTYsMTAgQEAgQUxXQVlTX0lOTElORSBMYXJnZUFsbG9j
YXRpb24mIEhlYXBDZWxsOgogCiBBTFdBWVNfSU5MSU5FIEhlYXAqIEhlYXBDZWxsOjpoZWFwKCkg
Y29uc3QKIHsKLSAgICByZXR1cm4gJnZtKCktPmhlYXA7CisgICAgcmV0dXJuICZ2bSgpLmhlYXA7
CiB9CiAKLUFMV0FZU19JTkxJTkUgVk0qIEhlYXBDZWxsOjp2bSgpIGNvbnN0CitBTFdBWVNfSU5M
SU5FIFZNJiBIZWFwQ2VsbDo6dm0oKSBjb25zdAogewogICAgIGlmIChpc0xhcmdlQWxsb2NhdGlv
bigpKQogICAgICAgICByZXR1cm4gbGFyZ2VBbGxvY2F0aW9uKCkudm0oKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMuaAkocmV2aXNpb24gMjQ5MTI4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTM4LDkgKzM4LDkgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLUFMV0FZU19JTkxJTkUgVk0q
IEhlYXA6OnZtKCkgY29uc3QKK0FMV0FZU19JTkxJTkUgVk0mIEhlYXA6OnZtKCkgY29uc3QKIHsK
LSAgICByZXR1cm4gYml0d2lzZV9jYXN0PFZNKj4oYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4odGhp
cykgLSBPQkpFQ1RfT0ZGU0VUT0YoVk0sIGhlYXApKTsKKyAgICByZXR1cm4gKmJpdHdpc2VfY2Fz
dDxWTSo+KGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHRoaXMpIC0gT0JKRUNUX09GRlNFVE9GKFZN
LCBoZWFwKSk7CiB9CiAKIEFMV0FZU19JTkxJTkUgSGVhcCogSGVhcDo6aGVhcChjb25zdCBIZWFw
Q2VsbCogY2VsbCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb1N1YnNwYWNl
UGVyVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb1N1
YnNwYWNlUGVyVk0uY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9Jc29TdWJzcGFjZVBlclZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MSw3ICs0MSw3IEBA
IHB1YmxpYzoKICAgICB+QXV0b3JlbW92aW5nSXNvU3Vic3BhY2UoKQogICAgIHsKICAgICAgICAg
YXV0byBsb2NrZXIgPSBob2xkTG9jayhtX3BlclZNLm1fbG9jayk7Ci0gICAgICAgIG1fcGVyVk0u
bV9zdWJzcGFjZVBlclZNLnJlbW92ZShzcGFjZSgpLmhlYXAoKS0+dm0oKSk7CisgICAgICAgIG1f
cGVyVk0ubV9zdWJzcGFjZVBlclZNLnJlbW92ZSgmc3BhY2UoKS5oZWFwKCktPnZtKCkpOwogICAg
IH0KIAogcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xhcmdlQWxs
b2NhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTGFy
Z2VBbGxvY2F0aW9uLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvTGFyZ2VBbGxvY2F0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE3Nyw3ICsx
NzcsNyBAQCB2b2lkIExhcmdlQWxsb2NhdGlvbjo6c3dlZXAoKQogICAgIAogICAgIGlmIChtX2hh
c1ZhbGlkQ2VsbCAmJiAhaXNMaXZlKCkpIHsKICAgICAgICAgaWYgKG1fYXR0cmlidXRlcy5kZXN0
cnVjdGlvbiA9PSBOZWVkc0Rlc3RydWN0aW9uKQotICAgICAgICAgICAgbV9zdWJzcGFjZS0+ZGVz
dHJveSgqdm0oKSwgc3RhdGljX2Nhc3Q8SlNDZWxsKj4oY2VsbCgpKSk7CisgICAgICAgICAgICBt
X3N1YnNwYWNlLT5kZXN0cm95KHZtKCksIHN0YXRpY19jYXN0PEpTQ2VsbCo+KGNlbGwoKSkpOwog
ICAgICAgICBtX2hhc1ZhbGlkQ2VsbCA9IGZhbHNlOwogICAgIH0KIH0KQEAgLTE5OCw3ICsxOTgs
NyBAQCB2b2lkIExhcmdlQWxsb2NhdGlvbjo6ZHVtcChQcmludFN0cmVhbSYgCiAjaWYgIUFTU0VS
VF9ESVNBQkxFRAogdm9pZCBMYXJnZUFsbG9jYXRpb246OmFzc2VydFZhbGlkQ2VsbChWTSYgdm0s
IEhlYXBDZWxsKiBjZWxsKSBjb25zdAogewotICAgIEFTU0VSVCgmdm0gPT0gdGhpcy0+dm0oKSk7
CisgICAgQVNTRVJUKCZ2bSA9PSAmdGhpcy0+dm0oKSk7CiAgICAgQVNTRVJUKGNlbGwgPT0gdGhp
cy0+Y2VsbCgpKTsKICAgICBBU1NFUlQobV9oYXNWYWxpZENlbGwpOwogfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvTGFyZ2VBbGxvY2F0aW9uLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTGFyZ2VBbGxvY2F0aW9uLmgJKHJldmlzaW9uIDI0OTEy
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xhcmdlQWxsb2NhdGlvbi5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0y
MDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtNjUsNyArNjUsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBsYXN0Q2hhbmNl
VG9GaW5hbGl6ZSgpOwogICAgIAogICAgIEhlYXAqIGhlYXAoKSBjb25zdCB7IHJldHVybiBtX3dl
YWtTZXQuaGVhcCgpOyB9Ci0gICAgVk0qIHZtKCkgY29uc3QgeyByZXR1cm4gbV93ZWFrU2V0LnZt
KCk7IH0KKyAgICBWTSYgdm0oKSBjb25zdCB7IHJldHVybiBtX3dlYWtTZXQudm0oKTsgfQogICAg
IFdlYWtTZXQmIHdlYWtTZXQoKSB7IHJldHVybiBtX3dlYWtTZXQ7IH0KIAogICAgIHVuc2lnbmVk
IGluZGV4SW5TcGFjZSgpIHsgcmV0dXJuIG1faW5kZXhJblNwYWNlOyB9CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9Mb2NhbEFsbG9jYXRvci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTG9jYWxBbGxvY2F0b3IuY3BwCShyZXZpc2lvbiAyNDkx
MjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Mb2NhbEFsbG9jYXRvci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTExNCw3ICsxMTQsNyBAQCB2b2lkKiBMb2NhbEFsbG9jYXRvcjo6YWxs
b2NhdGVTbG93Q2FzZShHCiB7CiAgICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2Nv
cGUoZmFsc2UpOwogICAgIEhlYXAmIGhlYXAgPSAqbV9kaXJlY3RvcnktPm1faGVhcDsKLSAgICBB
U1NFUlQoaGVhcC52bSgpLT5jdXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsKKyAgICBB
U1NFUlQoaGVhcC52bSgpLmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOwogICAgIGRv
VGVzdENvbGxlY3Rpb25zSWZOZWVkZWQoZGVmZXJyYWxDb250ZXh0KTsKIAogICAgIEFTU0VSVCgh
bV9kaXJlY3RvcnktPm1hcmtlZFNwYWNlKCkuaXNJdGVyYXRpbmcoKSk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suY3BwCShyZXZpc2lvbiAyNDkxMjgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTY2LDcgKzY2LDcgQEAgTWFya2VkQmxvY2s6OkhhbmRsZTo6SGFuZGxlKEhlYXAmIGhl
YXAsIAogICAgIDogbV9hbGlnbmVkTWVtb3J5QWxsb2NhdG9yKGFsaWduZWRNZW1vcnlBbGxvY2F0
b3IpCiAgICAgLCBtX3dlYWtTZXQoaGVhcC52bSgpLCBDZWxsQ29udGFpbmVyKCkpCiB7Ci0gICAg
bV9ibG9jayA9IG5ldyAoTm90TnVsbCwgYmxvY2tTcGFjZSkgTWFya2VkQmxvY2soKmhlYXAudm0o
KSwgKnRoaXMpOworICAgIG1fYmxvY2sgPSBuZXcgKE5vdE51bGwsIGJsb2NrU3BhY2UpIE1hcmtl
ZEJsb2NrKGhlYXAudm0oKSwgKnRoaXMpOwogICAgIAogICAgIG1fd2Vha1NldC5zZXRDb250YWlu
ZXIoKm1fYmxvY2spOwogICAgIApAQCAtMjA3LDcgKzIwNyw3IEBAIHZvaWQgTWFya2VkQmxvY2s6
OkhhbmRsZTo6cmVzdW1lQWxsb2NhdGkKIAogdm9pZCBNYXJrZWRCbG9jazo6YWJvdXRUb01hcmtT
bG93KEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uKQogewotICAgIEFTU0VSVCh2bSgpLT5oZWFw
Lm9iamVjdFNwYWNlKCkuaXNNYXJraW5nKCkpOworICAgIEFTU0VSVCh2bSgpLmhlYXAub2JqZWN0
U3BhY2UoKS5pc01hcmtpbmcoKSk7CiAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhmb290ZXIo
KS5tX2xvY2spOwogICAgIAogICAgIGlmICghYXJlTWFya3NTdGFsZShtYXJraW5nVmVyc2lvbikp
CkBAIC0yNzUsMTMgKzI3NSwxMyBAQCB2b2lkIE1hcmtlZEJsb2NrOjpyZXNldE1hcmtzKCkKICNp
ZiAhQVNTRVJUX0RJU0FCTEVECiB2b2lkIE1hcmtlZEJsb2NrOjphc3NlcnRNYXJrc05vdFN0YWxl
KCkKIHsKLSAgICBBU1NFUlQoZm9vdGVyKCkubV9tYXJraW5nVmVyc2lvbiA9PSB2bSgpLT5oZWFw
Lm9iamVjdFNwYWNlKCkubWFya2luZ1ZlcnNpb24oKSk7CisgICAgQVNTRVJUKGZvb3RlcigpLm1f
bWFya2luZ1ZlcnNpb24gPT0gdm0oKS5oZWFwLm9iamVjdFNwYWNlKCkubWFya2luZ1ZlcnNpb24o
KSk7CiB9CiAjZW5kaWYgLy8gIUFTU0VSVF9ESVNBQkxFRAogCiBib29sIE1hcmtlZEJsb2NrOjph
cmVNYXJrc1N0YWxlKCkKIHsKLSAgICByZXR1cm4gYXJlTWFya3NTdGFsZSh2bSgpLT5oZWFwLm9i
amVjdFNwYWNlKCkubWFya2luZ1ZlcnNpb24oKSk7CisgICAgcmV0dXJuIGFyZU1hcmtzU3RhbGUo
dm0oKS5oZWFwLm9iamVjdFNwYWNlKCkubWFya2luZ1ZlcnNpb24oKSk7CiB9CiAKIGJvb2wgTWFy
a2VkQmxvY2s6OkhhbmRsZTo6YXJlTWFya3NTdGFsZSgpCkBAIC0yOTEsNyArMjkxLDcgQEAgYm9v
bCBNYXJrZWRCbG9jazo6SGFuZGxlOjphcmVNYXJrc1N0YWxlKAogCiBib29sIE1hcmtlZEJsb2Nr
Ojppc01hcmtlZChjb25zdCB2b2lkKiBwKQogewotICAgIHJldHVybiBpc01hcmtlZCh2bSgpLT5o
ZWFwLm9iamVjdFNwYWNlKCkubWFya2luZ1ZlcnNpb24oKSwgcCk7CisgICAgcmV0dXJuIGlzTWFy
a2VkKHZtKCkuaGVhcC5vYmplY3RTcGFjZSgpLm1hcmtpbmdWZXJzaW9uKCksIHApOwogfQogCiB2
b2lkIE1hcmtlZEJsb2NrOjpIYW5kbGU6OmRpZENvbnN1bWVGcmVlTGlzdCgpCkBAIC0zNzEsNyAr
MzcxLDcgQEAgdm9pZCBNYXJrZWRCbG9jazo6SGFuZGxlOjpkaWRSZW1vdmVGcm9tRAogI2lmICFB
U1NFUlRfRElTQUJMRUQKIHZvaWQgTWFya2VkQmxvY2s6OmFzc2VydFZhbGlkQ2VsbChWTSYgdm0s
IEhlYXBDZWxsKiBjZWxsKSBjb25zdAogewotICAgIFJFTEVBU0VfQVNTRVJUKCZ2bSA9PSB0aGlz
LT52bSgpKTsKKyAgICBSRUxFQVNFX0FTU0VSVCgmdm0gPT0gJnRoaXMtPnZtKCkpOwogICAgIFJF
TEVBU0VfQVNTRVJUKGNvbnN0X2Nhc3Q8TWFya2VkQmxvY2sqPih0aGlzKS0+aGFuZGxlKCkuY2Vs
bEFsaWduKGNlbGwpID09IGNlbGwpOwogfQogI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyNCw3ICsx
MjQsNyBAQCBwdWJsaWM6CiAgICAgICAgIEFsaWduZWRNZW1vcnlBbGxvY2F0b3IqIGFsaWduZWRN
ZW1vcnlBbGxvY2F0b3IoKSBjb25zdDsKICAgICAgICAgSGVhcCogaGVhcCgpIGNvbnN0OwogICAg
ICAgICBpbmxpbmUgTWFya2VkU3BhY2UqIHNwYWNlKCkgY29uc3Q7Ci0gICAgICAgIFZNKiB2bSgp
IGNvbnN0OworICAgICAgICBWTSYgdm0oKSBjb25zdDsKICAgICAgICAgV2Vha1NldCYgd2Vha1Nl
dCgpOwogICAgICAgICAgICAgCiAgICAgICAgIGVudW0gU3dlZXBNb2RlIHsgU3dlZXBPbmx5LCBT
d2VlcFRvRnJlZUxpc3QgfTsKQEAgLTI1Nyw2ICsyNTcsOCBAQCBwdWJsaWM6CiAgICAgICAgIGZy
aWVuZCBjbGFzcyBNYXJrZWRCbG9jazsKICAgICAgICAgCiAgICAgICAgIEhhbmRsZSYgbV9oYW5k
bGU7CisgICAgICAgIC8vIG1fdm0gbXVzdCByZW1haW4gYSBwb2ludGVyIChpbnN0ZWFkIG9mIGEg
cmVmZXJlbmNlKSBiZWNhdXNlIEpTQ0xMSW50T2Zmc2V0c0V4dHJhY3RvcgorICAgICAgICAvLyB3
aWxsIGZhaWwgb3RoZXJ3aXNlLgogICAgICAgICBWTSogbV92bTsKICAgICAgICAgU3Vic3BhY2Uq
IG1fc3Vic3BhY2U7CiAKQEAgLTMxNSw3ICszMTcsNyBAQCBwdWJsaWM6CiAgICAgSGFuZGxlJiBo
YW5kbGUoKTsKICAgICBjb25zdCBIYW5kbGUmIGhhbmRsZSgpIGNvbnN0OwogICAgICAgICAKLSAg
ICBWTSogdm0oKSBjb25zdDsKKyAgICBWTSYgdm0oKSBjb25zdDsKICAgICBpbmxpbmUgSGVhcCog
aGVhcCgpIGNvbnN0OwogICAgIGlubGluZSBNYXJrZWRTcGFjZSogc3BhY2UoKSBjb25zdDsKIApA
QCAtNDcxLDE0ICs0NzMsMTQgQEAgaW5saW5lIEhlYXAqIE1hcmtlZEJsb2NrOjpIYW5kbGU6Omhl
YXAoKQogICAgIHJldHVybiBtX3dlYWtTZXQuaGVhcCgpOwogfQogCi1pbmxpbmUgVk0qIE1hcmtl
ZEJsb2NrOjpIYW5kbGU6OnZtKCkgY29uc3QKK2lubGluZSBWTSYgTWFya2VkQmxvY2s6OkhhbmRs
ZTo6dm0oKSBjb25zdAogewogICAgIHJldHVybiBtX3dlYWtTZXQudm0oKTsKIH0KIAotaW5saW5l
IFZNKiBNYXJrZWRCbG9jazo6dm0oKSBjb25zdAoraW5saW5lIFZNJiBNYXJrZWRCbG9jazo6dm0o
KSBjb25zdAogewotICAgIHJldHVybiBmb290ZXIoKS5tX3ZtOworICAgIHJldHVybiAqZm9vdGVy
KCkubV92bTsKIH0KIAogaW5saW5lIFdlYWtTZXQmIE1hcmtlZEJsb2NrOjpIYW5kbGU6OndlYWtT
ZXQoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2tJbmxpbmVz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2tJ
bmxpbmVzLmgJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L01hcmtlZEJsb2NrSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC01Miw3ICs1Miw3IEBAIGlu
bGluZSBib29sIE1hcmtlZEJsb2NrOjpoYXNBbnlOZXdseUFsbG8KIAogaW5saW5lIEhlYXAqIE1h
cmtlZEJsb2NrOjpoZWFwKCkgY29uc3QKIHsKLSAgICByZXR1cm4gJnZtKCktPmhlYXA7CisgICAg
cmV0dXJuICZ2bSgpLmhlYXA7CiB9CiAKIGlubGluZSBNYXJrZWRTcGFjZSogTWFya2VkQmxvY2s6
OnNwYWNlKCkgY29uc3QKQEAgLTI1Myw3ICsyNTMsNyBAQCB2b2lkIE1hcmtlZEJsb2NrOjpIYW5k
bGU6OnNwZWNpYWxpemVkU3dlCiAgICAgCiAgICAgdW5zaWduZWQgY2VsbFNpemUgPSB0aGlzLT5j
ZWxsU2l6ZSgpOwogICAgIAotICAgIFZNJiB2bSA9ICp0aGlzLT52bSgpOworICAgIFZNJiB2bSA9
IHRoaXMtPnZtKCk7CiAgICAgYXV0byBkZXN0cm95ID0gWyZdICh2b2lkKiBjZWxsKSB7CiAgICAg
ICAgIEpTQ2VsbCoganNDZWxsID0gc3RhdGljX2Nhc3Q8SlNDZWxsKj4oY2VsbCk7CiAgICAgICAg
IGlmICghanNDZWxsLT5pc1phcHBlZCgpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9TbG90VmlzaXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvU2xvdFZpc2l0b3IuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYwLDcgKzYw
LDcgQEAgc3RhdGljIHZvaWQgdmFsaWRhdGUoSlNDZWxsKiBjZWxsKQogCiAgICAgLy8gQm90aCB0
aGUgY2VsbCdzIHN0cnVjdHVyZSwgYW5kIHRoZSBjZWxsJ3Mgc3RydWN0dXJlJ3Mgc3RydWN0dXJl
IHNob3VsZCBiZSB0aGUgU3RydWN0dXJlIFN0cnVjdHVyZS4KICAgICAvLyBJIGhhdGUgdGhpcyBz
ZW50ZW5jZS4KLSAgICBWTSYgdm0gPSAqY2VsbC0+dm0oKTsKKyAgICBWTSYgdm0gPSBjZWxsLT52
bSgpOwogICAgIGlmIChjZWxsLT5zdHJ1Y3R1cmUoKS0+c3RydWN0dXJlKCktPkpTQ2VsbDo6Y2xh
c3NJbmZvKHZtKSAhPSBjZWxsLT5zdHJ1Y3R1cmUoKS0+SlNDZWxsOjpjbGFzc0luZm8odm0pKSB7
CiAgICAgICAgIGNvbnN0IGNoYXIqIHBhcmVudENsYXNzTmFtZSA9IDA7CiAgICAgICAgIGNvbnN0
IGNoYXIqIG91ckNsYXNzTmFtZSA9IDA7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9TbG90VmlzaXRvcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9TbG90VmlzaXRvcklubGluZXMuaAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0xNzYsMTIgKzE3NiwxMiBAQCBpbmxpbmUgSGVhcCogU2xvdFZpc2l0b3I6OmhlYXAoKSBj
b25zdAogCiBpbmxpbmUgVk0mIFNsb3RWaXNpdG9yOjp2bSgpCiB7Ci0gICAgcmV0dXJuICptX2hl
YXAudm0oKTsKKyAgICByZXR1cm4gbV9oZWFwLnZtKCk7CiB9CiAKIGlubGluZSBjb25zdCBWTSYg
U2xvdFZpc2l0b3I6OnZtKCkgY29uc3QKIHsKLSAgICByZXR1cm4gKm1faGVhcC52bSgpOworICAg
IHJldHVybiBtX2hlYXAudm0oKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N0b3BJZk5lY2Vzc2FyeVRpbWVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdG9wSWZOZWNlc3NhcnlUaW1l
ci5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N0
b3BJZk5lY2Vzc2FyeVRpbWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDcgKzMwLDcgQEAK
IAogbmFtZXNwYWNlIEpTQyB7CiAKLVN0b3BJZk5lY2Vzc2FyeVRpbWVyOjpTdG9wSWZOZWNlc3Nh
cnlUaW1lcihWTSogdm0pCitTdG9wSWZOZWNlc3NhcnlUaW1lcjo6U3RvcElmTmVjZXNzYXJ5VGlt
ZXIoVk0mIHZtKQogICAgIDogQmFzZSh2bSkKIHsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1N0b3BJZk5lY2Vzc2FyeVRpbWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvU3RvcElmTmVjZXNzYXJ5VGltZXIuaAkocmV2aXNpb24gMjQ5MTI4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3RvcElmTmVjZXNzYXJ5VGltZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIw
MTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0zNCw3ICszNCw3IEBAIGNsYXNzIEhlYXA7CiBjbGFzcyBTdG9wSWZOZWNl
c3NhcnlUaW1lciA6IHB1YmxpYyBKU1J1bkxvb3BUaW1lciB7CiBwdWJsaWM6CiAgICAgdXNpbmcg
QmFzZSA9IEpTUnVuTG9vcFRpbWVyOwotICAgIGV4cGxpY2l0IFN0b3BJZk5lY2Vzc2FyeVRpbWVy
KFZNKik7CisgICAgZXhwbGljaXQgU3RvcElmTmVjZXNzYXJ5VGltZXIoVk0mKTsKICAgICAKICAg
ICB2b2lkIGRvV29yayhWTSYpIG92ZXJyaWRlOwogICAgIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvU3Ryb25nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvU3Ryb25nLmgJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL1N0cm9uZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTExMiw3ICsxMTIsNyBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgICAgIH0KIAotICAgICAgICBzZXQoKkhhbmRs
ZVNldDo6aGVhcEZvcihvdGhlci5zbG90KCkpLT52bSgpLCBvdGhlci5nZXQoKSk7CisgICAgICAg
IHNldChIYW5kbGVTZXQ6OmhlYXBGb3Iob3RoZXIuc2xvdCgpKS0+dm0oKSwgb3RoZXIuZ2V0KCkp
OwogICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9XZWFrU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvV2Vha1NldC5oCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9XZWFrU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDEyLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MSw3ICs0MSw3IEBAIHB1Ymxp
YzoKICAgICBzdGF0aWMgV2Vha0ltcGwqIGFsbG9jYXRlKEpTVmFsdWUsIFdlYWtIYW5kbGVPd25l
ciogPSAwLCB2b2lkKiBjb250ZXh0ID0gMCk7CiAgICAgc3RhdGljIHZvaWQgZGVhbGxvY2F0ZShX
ZWFrSW1wbCopOwogCi0gICAgV2Vha1NldChWTSosIENlbGxDb250YWluZXIpOworICAgIFdlYWtT
ZXQoVk0mLCBDZWxsQ29udGFpbmVyKTsKICAgICB+V2Vha1NldCgpOwogICAgIHZvaWQgbGFzdENo
YW5jZVRvRmluYWxpemUoKTsKICAgICAKQEAgLTQ5LDcgKzQ5LDcgQEAgcHVibGljOgogICAgIHZv
aWQgc2V0Q29udGFpbmVyKENlbGxDb250YWluZXIgY29udGFpbmVyKSB7IG1fY29udGFpbmVyID0g
Y29udGFpbmVyOyB9CiAKICAgICBIZWFwKiBoZWFwKCkgY29uc3Q7Ci0gICAgVk0qIHZtKCkgY29u
c3Q7CisgICAgVk0mIHZtKCkgY29uc3Q7CiAKICAgICBib29sIGlzRW1wdHkoKSBjb25zdDsKICAg
ICBib29sIGlzVHJpdmlhbGx5RGVzdHJ1Y3RpYmxlKCkgY29uc3Q7CkBAIC03MCwxMSArNzAsMTEg
QEAgcHJpdmF0ZToKICAgICBXZWFrQmxvY2s6OkZyZWVDZWxsKiBtX2FsbG9jYXRvcjsKICAgICBX
ZWFrQmxvY2sqIG1fbmV4dEFsbG9jYXRvcjsKICAgICBEb3VibHlMaW5rZWRMaXN0PFdlYWtCbG9j
az4gbV9ibG9ja3M7Ci0gICAgVk0qIG1fdm07CisgICAgVk0mIG1fdm07CiAgICAgQ2VsbENvbnRh
aW5lciBtX2NvbnRhaW5lcjsKIH07CiAKLWlubGluZSBXZWFrU2V0OjpXZWFrU2V0KFZNKiB2bSwg
Q2VsbENvbnRhaW5lciBjb250YWluZXIpCitpbmxpbmUgV2Vha1NldDo6V2Vha1NldChWTSYgdm0s
IENlbGxDb250YWluZXIgY29udGFpbmVyKQogICAgIDogbV9hbGxvY2F0b3IoMCkKICAgICAsIG1f
bmV4dEFsbG9jYXRvcigwKQogICAgICwgbV92bSh2bSkKQEAgLTgyLDcgKzgyLDcgQEAgaW5saW5l
IFdlYWtTZXQ6OldlYWtTZXQoVk0qIHZtLCBDZWxsQ29udAogewogfQogCi1pbmxpbmUgVk0qIFdl
YWtTZXQ6OnZtKCkgY29uc3QKK2lubGluZSBWTSYgV2Vha1NldDo6dm0oKSBjb25zdAogewogICAg
IHJldHVybiBtX3ZtOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9K
U0luamVjdGVkU2NyaXB0SG9zdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9KU0luamVjdGVkU2NyaXB0SG9zdC5jcHAJKHJldmlzaW9uIDI0OTEyOCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNJbmplY3RlZFNjcmlwdEhvc3Qu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMywgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTIwLDcgKzEyMCw3IEBAIEpTVmFsdWUgSlNJ
bmplY3RlZFNjcmlwdEhvc3Q6OnNhdmVkUmVzdWwKICAgICBhdXRvIHNhdmVkUmVzdWx0QWxpYXMg
PSBpbXBsKCkuc2F2ZWRSZXN1bHRBbGlhcygpOwogICAgIGlmICghc2F2ZWRSZXN1bHRBbGlhcykK
ICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMs
IHNhdmVkUmVzdWx0QWxpYXMudmFsdWUoKSk7CisgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMtPnZt
KCksIHNhdmVkUmVzdWx0QWxpYXMudmFsdWUoKSk7CiB9CiAKIEpTVmFsdWUgSlNJbmplY3RlZFNj
cmlwdEhvc3Q6OmV2YWx1YXRlV2l0aFNjb3BlRXh0ZW5zaW9uKEV4ZWNTdGF0ZSogZXhlYykKQEAg
LTE0OSw4ICsxNDksOSBAQCBKU1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRIb3N0OjppbnRlcm5hbENv
CiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpCiAgICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwogCisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBKU09iamVjdCogb2Jq
ZWN0ID0ganNDYXN0PEpTT2JqZWN0Kj4oZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkudG9UaGlz
KGV4ZWMsIE5vdFN0cmljdE1vZGUpKTsKLSAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgSlNPYmpl
Y3Q6OmNhbGN1bGF0ZWRDbGFzc05hbWUob2JqZWN0KSk7CisgICAgcmV0dXJuIGpzU3RyaW5nKHZt
LCBKU09iamVjdDo6Y2FsY3VsYXRlZENsYXNzTmFtZShvYmplY3QpKTsKIH0KIAogSlNWYWx1ZSBK
U0luamVjdGVkU2NyaXB0SG9zdDo6aXNIVE1MQWxsQ29sbGVjdGlvbihFeGVjU3RhdGUqIGV4ZWMp
CkBAIC0xOTYsNDEgKzE5Nyw0MSBAQCBKU1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRIb3N0OjpzdWJ0
eXBlKEV4CiAKICAgICBpZiAoYXV0byogb2JqZWN0ID0ganNEeW5hbWljQ2FzdDxKU09iamVjdCo+
KHZtLCB2YWx1ZSkpIHsKICAgICAgICAgaWYgKG9iamVjdC0+aXNFcnJvckluc3RhbmNlKCkpCi0g
ICAgICAgICAgICByZXR1cm4ganNOb250cml2aWFsU3RyaW5nKGV4ZWMsICJlcnJvciJfcyk7Cisg
ICAgICAgICAgICByZXR1cm4ganNOb250cml2aWFsU3RyaW5nKHZtLCAiZXJyb3IiX3MpOwogCiAg
ICAgICAgIC8vIENvbnNpZGVyIGNsYXNzIGNvbnN0cnVjdG9yIGZ1bmN0aW9ucyBjbGFzcyBvYmpl
Y3RzLgogICAgICAgICBKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IGpzRHluYW1pY0Nhc3Q8SlNGdW5j
dGlvbio+KHZtLCB2YWx1ZSk7CiAgICAgICAgIGlmIChmdW5jdGlvbiAmJiBmdW5jdGlvbi0+aXND
bGFzc0NvbnN0cnVjdG9yRnVuY3Rpb24oKSkKLSAgICAgICAgICAgIHJldHVybiBqc05vbnRyaXZp
YWxTdHJpbmcoZXhlYywgImNsYXNzIl9zKTsKKyAgICAgICAgICAgIHJldHVybiBqc05vbnRyaXZp
YWxTdHJpbmcodm0sICJjbGFzcyJfcyk7CiAKICAgICAgICAgaWYgKG9iamVjdC0+aW5oZXJpdHM8
SlNBcnJheT4odm0pKQotICAgICAgICAgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyhleGVj
LCAiYXJyYXkiX3MpOworICAgICAgICAgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyh2bSwg
ImFycmF5Il9zKTsKICAgICAgICAgaWYgKG9iamVjdC0+aW5oZXJpdHM8RGlyZWN0QXJndW1lbnRz
Pih2bSkgfHwgb2JqZWN0LT5pbmhlcml0czxTY29wZWRBcmd1bWVudHM+KHZtKSkKLSAgICAgICAg
ICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywgImFycmF5Il9zKTsKKyAgICAgICAg
ICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcodm0sICJhcnJheSJfcyk7CiAKICAgICAgICAg
aWYgKG9iamVjdC0+aW5oZXJpdHM8RGF0ZUluc3RhbmNlPih2bSkpCi0gICAgICAgICAgICByZXR1
cm4ganNOb250cml2aWFsU3RyaW5nKGV4ZWMsICJkYXRlIl9zKTsKKyAgICAgICAgICAgIHJldHVy
biBqc05vbnRyaXZpYWxTdHJpbmcodm0sICJkYXRlIl9zKTsKICAgICAgICAgaWYgKG9iamVjdC0+
aW5oZXJpdHM8UmVnRXhwT2JqZWN0Pih2bSkpCi0gICAgICAgICAgICByZXR1cm4ganNOb250cml2
aWFsU3RyaW5nKGV4ZWMsICJyZWdleHAiX3MpOworICAgICAgICAgICAgcmV0dXJuIGpzTm9udHJp
dmlhbFN0cmluZyh2bSwgInJlZ2V4cCJfcyk7CiAgICAgICAgIGlmIChvYmplY3QtPmluaGVyaXRz
PFByb3h5T2JqZWN0Pih2bSkpCi0gICAgICAgICAgICByZXR1cm4ganNOb250cml2aWFsU3RyaW5n
KGV4ZWMsICJwcm94eSJfcyk7CisgICAgICAgICAgICByZXR1cm4ganNOb250cml2aWFsU3RyaW5n
KHZtLCAicHJveHkiX3MpOwogCiAgICAgICAgIGlmIChvYmplY3QtPmluaGVyaXRzPEpTTWFwPih2
bSkpCi0gICAgICAgICAgICByZXR1cm4ganNOb250cml2aWFsU3RyaW5nKGV4ZWMsICJtYXAiX3Mp
OworICAgICAgICAgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyh2bSwgIm1hcCJfcyk7CiAg
ICAgICAgIGlmIChvYmplY3QtPmluaGVyaXRzPEpTU2V0Pih2bSkpCi0gICAgICAgICAgICByZXR1
cm4ganNOb250cml2aWFsU3RyaW5nKGV4ZWMsICJzZXQiX3MpOworICAgICAgICAgICAgcmV0dXJu
IGpzTm9udHJpdmlhbFN0cmluZyh2bSwgInNldCJfcyk7CiAgICAgICAgIGlmIChvYmplY3QtPmlu
aGVyaXRzPEpTV2Vha01hcD4odm0pKQotICAgICAgICAgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0
cmluZyhleGVjLCAid2Vha21hcCJfcyk7CisgICAgICAgICAgICByZXR1cm4ganNOb250cml2aWFs
U3RyaW5nKHZtLCAid2Vha21hcCJfcyk7CiAgICAgICAgIGlmIChvYmplY3QtPmluaGVyaXRzPEpT
V2Vha1NldD4odm0pKQotICAgICAgICAgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyhleGVj
LCAid2Vha3NldCJfcyk7CisgICAgICAgICAgICByZXR1cm4ganNOb250cml2aWFsU3RyaW5nKHZt
LCAid2Vha3NldCJfcyk7CiAKICAgICAgICAgaWYgKG9iamVjdC0+aW5oZXJpdHM8SlNTdHJpbmdJ
dGVyYXRvcj4odm0pKQotICAgICAgICAgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyhleGVj
LCAiaXRlcmF0b3IiX3MpOworICAgICAgICAgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyh2
bSwgIml0ZXJhdG9yIl9zKTsKIAogICAgICAgICBpZiAob2JqZWN0LT5nZXREaXJlY3Qodm0sIHZt
LnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLmFycmF5SXRlcmF0b3JOZXh0SW5kZXhQcml2
YXRlTmFtZSgpKQogICAgICAgICAgICAgfHwgb2JqZWN0LT5nZXREaXJlY3Qodm0sIHZtLnByb3Bl
cnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLm1hcEJ1Y2tldFByaXZhdGVOYW1lKCkpCiAgICAgICAg
ICAgICB8fCBvYmplY3QtPmdldERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5h
bWVzKCkuc2V0QnVja2V0UHJpdmF0ZU5hbWUoKSkpCi0gICAgICAgICAgICByZXR1cm4ganNOb250
cml2aWFsU3RyaW5nKGV4ZWMsICJpdGVyYXRvciJfcyk7CisgICAgICAgICAgICByZXR1cm4ganNO
b250cml2aWFsU3RyaW5nKHZtLCAiaXRlcmF0b3IiX3MpOwogCiAgICAgICAgIGlmIChvYmplY3Qt
PmluaGVyaXRzPEpTSW50OEFycmF5Pih2bSkKICAgICAgICAgICAgIHx8IG9iamVjdC0+aW5oZXJp
dHM8SlNJbnQxNkFycmF5Pih2bSkKQEAgLTI0MSw3ICsyNDIsNyBAQCBKU1ZhbHVlIEpTSW5qZWN0
ZWRTY3JpcHRIb3N0OjpzdWJ0eXBlKEV4CiAgICAgICAgICAgICB8fCBvYmplY3QtPmluaGVyaXRz
PEpTVWludDMyQXJyYXk+KHZtKQogICAgICAgICAgICAgfHwgb2JqZWN0LT5pbmhlcml0czxKU0Zs
b2F0MzJBcnJheT4odm0pCiAgICAgICAgICAgICB8fCBvYmplY3QtPmluaGVyaXRzPEpTRmxvYXQ2
NEFycmF5Pih2bSkpCi0gICAgICAgICAgICByZXR1cm4ganNOb250cml2aWFsU3RyaW5nKGV4ZWMs
ICJhcnJheSJfcyk7CisgICAgICAgICAgICByZXR1cm4ganNOb250cml2aWFsU3RyaW5nKHZtLCAi
YXJyYXkiX3MpOwogICAgIH0KIAogICAgIHJldHVybiBpbXBsKCkuc3VidHlwZShleGVjLCB2YWx1
ZSk7CkBAIC0yNzYsMjAgKzI3NywyMCBAQCBKU1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRIb3N0Ojpm
dW5jdGlvbkRlCiAKICAgICBTdHJpbmcgc2NyaXB0SUQgPSBTdHJpbmc6Om51bWJlcihzb3VyY2VD
b2RlLT5wcm92aWRlcigpLT5hc0lEKCkpOwogICAgIEpTT2JqZWN0KiBsb2NhdGlvbiA9IGNvbnN0
cnVjdEVtcHR5T2JqZWN0KGV4ZWMpOwotICAgIGxvY2F0aW9uLT5wdXREaXJlY3Qodm0sIElkZW50
aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgInNjcmlwdElkIiksIGpzU3RyaW5nKGV4ZWMsIHNjcmlw
dElEKSk7Ci0gICAgbG9jYXRpb24tPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
ZyhleGVjLCAibGluZU51bWJlciIpLCBqc051bWJlcihsaW5lTnVtYmVyKSk7Ci0gICAgbG9jYXRp
b24tPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCAiY29sdW1uTnVt
YmVyIiksIGpzTnVtYmVyKGNvbHVtbk51bWJlcikpOworICAgIGxvY2F0aW9uLT5wdXREaXJlY3Qo
dm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJzY3JpcHRJZCIpLCBqc1N0cmluZyh2bSwg
c2NyaXB0SUQpKTsKKyAgICBsb2NhdGlvbi0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKHZtLCAibGluZU51bWJlciIpLCBqc051bWJlcihsaW5lTnVtYmVyKSk7CisgICAgbG9j
YXRpb24tPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImNvbHVtbk51
bWJlciIpLCBqc051bWJlcihjb2x1bW5OdW1iZXIpKTsKIAogICAgIEpTT2JqZWN0KiByZXN1bHQg
PSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjKTsKLSAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCAibG9jYXRpb24iKSwgbG9jYXRpb24pOworICAg
IHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAibG9jYXRp
b24iKSwgbG9jYXRpb24pOwogCiAgICAgU3RyaW5nIG5hbWUgPSBmdW5jdGlvbi0+bmFtZSh2bSk7
CiAgICAgaWYgKCFuYW1lLmlzRW1wdHkoKSkKLSAgICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0s
IElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgIm5hbWUiKSwganNTdHJpbmcoZXhlYywgbmFt
ZSkpOworICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zyh2bSwgIm5hbWUiKSwganNTdHJpbmcodm0sIG5hbWUpKTsKIAogICAgIFN0cmluZyBkaXNwbGF5
TmFtZSA9IGZ1bmN0aW9uLT5kaXNwbGF5TmFtZSh2bSk7CiAgICAgaWYgKCFkaXNwbGF5TmFtZS5p
c0VtcHR5KCkpCi0gICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKGV4ZWMsICJkaXNwbGF5TmFtZSIpLCBqc1N0cmluZyhleGVjLCBkaXNwbGF5TmFtZSkp
OworICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2
bSwgImRpc3BsYXlOYW1lIiksIGpzU3RyaW5nKHZtLCBkaXNwbGF5TmFtZSkpOwogCiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KQEAgLTI5OCw4ICsyOTksOCBAQCBzdGF0aWMgSlNPYmplY3QqIGNvbnN0
cnVjdEludGVybmFsUHJvcGVyCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBKU09i
amVjdCogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYyk7Ci0gICAgcmVzdWx0LT5w
dXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgIm5hbWUiKSwganNTdHJp
bmcoZXhlYywgbmFtZSkpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKGV4ZWMsICJ2YWx1ZSIpLCB2YWx1ZSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qo
dm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJuYW1lIiksIGpzU3RyaW5nKHZtLCBuYW1l
KSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0s
ICJ2YWx1ZSIpLCB2YWx1ZSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMzIzLDE2ICsz
MjQsMTYgQEAgSlNWYWx1ZSBKU0luamVjdGVkU2NyaXB0SG9zdDo6Z2V0SW50ZXJuYQogICAgICAg
ICBzd2l0Y2ggKHByb21pc2UtPnN0YXR1cyh2bSkpIHsKICAgICAgICAgY2FzZSBKU1Byb21pc2U6
OlN0YXR1czo6UGVuZGluZzoKICAgICAgICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICAgICAg
ICAgIGFycmF5LT5wdXREaXJlY3RJbmRleChleGVjLCBpbmRleCsrLCBjb25zdHJ1Y3RJbnRlcm5h
bFByb3BlcnR5KGV4ZWMsICJzdGF0dXMiX3MsIGpzTm9udHJpdmlhbFN0cmluZyhleGVjLCAicGVu
ZGluZyJfcykpKTsKKyAgICAgICAgICAgIGFycmF5LT5wdXREaXJlY3RJbmRleChleGVjLCBpbmRl
eCsrLCBjb25zdHJ1Y3RJbnRlcm5hbFByb3BlcnR5KGV4ZWMsICJzdGF0dXMiX3MsIGpzTm9udHJp
dmlhbFN0cmluZyh2bSwgInBlbmRpbmciX3MpKSk7CiAgICAgICAgICAgICByZXR1cm4gYXJyYXk7
CiAgICAgICAgIGNhc2UgSlNQcm9taXNlOjpTdGF0dXM6OkZ1bGZpbGxlZDoKLSAgICAgICAgICAg
IGFycmF5LT5wdXREaXJlY3RJbmRleChleGVjLCBpbmRleCsrLCBjb25zdHJ1Y3RJbnRlcm5hbFBy
b3BlcnR5KGV4ZWMsICJzdGF0dXMiX3MsIGpzTm9udHJpdmlhbFN0cmluZyhleGVjLCAicmVzb2x2
ZWQiX3MpKSk7CisgICAgICAgICAgICBhcnJheS0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaW5kZXgr
KywgY29uc3RydWN0SW50ZXJuYWxQcm9wZXJ0eShleGVjLCAic3RhdHVzIl9zLCBqc05vbnRyaXZp
YWxTdHJpbmcodm0sICJyZXNvbHZlZCJfcykpKTsKICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIEpTVmFsdWUoKSk7CiAgICAgICAgICAgICBzY29wZS5yZWxlYXNlKCk7CiAg
ICAgICAgICAgICBhcnJheS0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaW5kZXgrKywgY29uc3RydWN0
SW50ZXJuYWxQcm9wZXJ0eShleGVjLCAicmVzdWx0Il9zLCBwcm9taXNlLT5yZXN1bHQodm0pKSk7
CiAgICAgICAgICAgICByZXR1cm4gYXJyYXk7CiAgICAgICAgIGNhc2UgSlNQcm9taXNlOjpTdGF0
dXM6OlJlamVjdGVkOgotICAgICAgICAgICAgYXJyYXktPnB1dERpcmVjdEluZGV4KGV4ZWMsIGlu
ZGV4KyssIGNvbnN0cnVjdEludGVybmFsUHJvcGVydHkoZXhlYywgInN0YXR1cyJfcywganNOb250
cml2aWFsU3RyaW5nKGV4ZWMsICJyZWplY3RlZCJfcykpKTsKKyAgICAgICAgICAgIGFycmF5LT5w
dXREaXJlY3RJbmRleChleGVjLCBpbmRleCsrLCBjb25zdHJ1Y3RJbnRlcm5hbFByb3BlcnR5KGV4
ZWMsICJzdGF0dXMiX3MsIGpzTm9udHJpdmlhbFN0cmluZyh2bSwgInJlamVjdGVkIl9zKSkpOwog
ICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZSgpKTsKICAgICAg
ICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKICAgICAgICAgICAgIGFycmF5LT5wdXREaXJlY3RJbmRl
eChleGVjLCBpbmRleCsrLCBjb25zdHJ1Y3RJbnRlcm5hbFByb3BlcnR5KGV4ZWMsICJyZXN1bHQi
X3MsIHByb21pc2UtPnJlc3VsdCh2bSkpKTsKQEAgLTQwNCw3ICs0MDUsNyBAQCBKU1ZhbHVlIEpT
SW5qZWN0ZWRTY3JpcHRIb3N0OjpnZXRJbnRlcm5hCiAgICAgICAgICAgICBhcnJheS0+cHV0RGly
ZWN0SW5kZXgoZXhlYywgaW5kZXgrKywgY29uc3RydWN0SW50ZXJuYWxQcm9wZXJ0eShleGVjLCAi
bWFwIiwgaXRlcmF0ZWRWYWx1ZSkpOwogICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgSlNWYWx1ZSgpKTsKICAgICAgICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICAgICAg
ICAgIGFycmF5LT5wdXREaXJlY3RJbmRleChleGVjLCBpbmRleCsrLCBjb25zdHJ1Y3RJbnRlcm5h
bFByb3BlcnR5KGV4ZWMsICJraW5kIiwganNOb250cml2aWFsU3RyaW5nKGV4ZWMsIGtpbmQpKSk7
CisgICAgICAgICAgICBhcnJheS0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaW5kZXgrKywgY29uc3Ry
dWN0SW50ZXJuYWxQcm9wZXJ0eShleGVjLCAia2luZCIsIGpzTm9udHJpdmlhbFN0cmluZyh2bSwg
a2luZCkpKTsKICAgICAgICAgICAgIHJldHVybiBhcnJheTsKICAgICAgICAgfQogCkBAIC00Mjgs
NyArNDI5LDcgQEAgSlNWYWx1ZSBKU0luamVjdGVkU2NyaXB0SG9zdDo6Z2V0SW50ZXJuYQogICAg
ICAgICAgICAgYXJyYXktPnB1dERpcmVjdEluZGV4KGV4ZWMsIGluZGV4KyssIGNvbnN0cnVjdElu
dGVybmFsUHJvcGVydHkoZXhlYywgInNldCIsIGl0ZXJhdGVkVmFsdWUpKTsKICAgICAgICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTVmFsdWUoKSk7CiAgICAgICAgICAgICBzY29w
ZS5yZWxlYXNlKCk7Ci0gICAgICAgICAgICBhcnJheS0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaW5k
ZXgrKywgY29uc3RydWN0SW50ZXJuYWxQcm9wZXJ0eShleGVjLCAia2luZCIsIGpzTm9udHJpdmlh
bFN0cmluZyhleGVjLCBraW5kKSkpOworICAgICAgICAgICAgYXJyYXktPnB1dERpcmVjdEluZGV4
KGV4ZWMsIGluZGV4KyssIGNvbnN0cnVjdEludGVybmFsUHJvcGVydHkoZXhlYywgImtpbmQiLCBq
c05vbnRyaXZpYWxTdHJpbmcodm0sIGtpbmQpKSk7CiAgICAgICAgICAgICByZXR1cm4gYXJyYXk7
CiAgICAgICAgIH0KICAgICB9CkBAIC01MDQsOCArNTA1LDggQEAgSlNWYWx1ZSBKU0luamVjdGVk
U2NyaXB0SG9zdDo6d2Vha01hcEVudAogCiAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGlu
ZGV4IDwgYnVmZmVyLnNpemUoKTsgaW5kZXggKz0gMikgewogICAgICAgICBKU09iamVjdCogZW50
cnkgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjKTsKLSAgICAgICAgZW50cnktPnB1dERpcmVj
dCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCAia2V5IiksIGJ1ZmZlci5hdChpbmRl
eCkpOwotICAgICAgICBlbnRyeS0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KGV4ZWMsICJ2YWx1ZSIpLCBidWZmZXIuYXQoaW5kZXggKyAxKSk7CisgICAgICAgIGVudHJ5LT5w
dXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJrZXkiKSwgYnVmZmVyLmF0
KGluZGV4KSk7CisgICAgICAgIGVudHJ5LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21T
dHJpbmcodm0sICJ2YWx1ZSIpLCBidWZmZXIuYXQoaW5kZXggKyAxKSk7CiAgICAgICAgIGFycmF5
LT5wdXREaXJlY3RJbmRleChleGVjLCBpbmRleCAvIDIsIGVudHJ5KTsKICAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZSgpKTsKICAgICB9CkBAIC01NTQsNyArNTU1LDcg
QEAgSlNWYWx1ZSBKU0luamVjdGVkU2NyaXB0SG9zdDo6d2Vha1NldEVudAogCiAgICAgZm9yICh1
bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgYnVmZmVyLnNpemUoKTsgKytpbmRleCkgewogICAg
ICAgICBKU09iamVjdCogZW50cnkgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjKTsKLSAgICAg
ICAgZW50cnktPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCAidmFs
dWUiKSwgYnVmZmVyLmF0KGluZGV4KSk7CisgICAgICAgIGVudHJ5LT5wdXREaXJlY3Qodm0sIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJ2YWx1ZSIpLCBidWZmZXIuYXQoaW5kZXgpKTsKICAg
ICAgICAgYXJyYXktPnB1dERpcmVjdEluZGV4KGV4ZWMsIGluZGV4LCBlbnRyeSk7CiAgICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTVmFsdWUoKSk7CiAgICAgfQpAQCAtNjUzLDcg
KzY1NCw3IEBAIEpTVmFsdWUgSlNJbmplY3RlZFNjcmlwdEhvc3Q6Oml0ZXJhdG9yRW4KICAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAogICAgICAgICBKU09iamVjdCog
ZW50cnkgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjKTsKLSAgICAgICAgZW50cnktPnB1dERp
cmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCAidmFsdWUiKSwgbmV4dFZhbHVl
KTsKKyAgICAgICAgZW50cnktPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2
bSwgInZhbHVlIiksIG5leHRWYWx1ZSk7CiAgICAgICAgIGFycmF5LT5wdXREaXJlY3RJbmRleChl
eGVjLCBpLCBlbnRyeSk7CiAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
IHsKICAgICAgICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKQEAgLTcyMiw3ICs3MjMsNyBAQCBKU1Zh
bHVlIEpTSW5qZWN0ZWRTY3JpcHRIb3N0OjpxdWVyeUluc3RhCiAgICAgaWYgKGNoZWNrRm9yYmlk
ZGVuUHJvdG90eXBlKGV4ZWMsIG9iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdC0+cHJvbWlzZVBy
b3RvdHlwZSgpKSkKICAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCAi
cXVlcnlJbnN0YW5jZXMgY2Fubm90IGJlIGNhbGxlZCB3aXRoIFByb21pc2UuIl9zKTsKIAotICAg
IHNhbml0aXplU3RhY2tGb3JWTSgmdm0pOworICAgIHNhbml0aXplU3RhY2tGb3JWTSh2bSk7CiAg
ICAgdm0uaGVhcC5jb2xsZWN0Tm93KFN5bmMsIENvbGxlY3Rpb25TY29wZTo6RnVsbCk7CiAKICAg
ICBKU0FycmF5KiBhcnJheSA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgbnVsbHB0cik7CkBA
IC04MDAsNyArODAxLDcgQEAgcHVibGljOgogICAgIHZvaWQgYW5hbHl6ZUVkZ2UoSlNDZWxsKiBm
cm9tLCBKU0NlbGwqIHRvLCBTbG90VmlzaXRvcjo6Um9vdE1hcmtSZWFzb24gcmVhc29uKQogICAg
IHsKICAgICAgICAgQVNTRVJUKHRvKTsKLSAgICAgICAgQVNTRVJUKHRvLT52bSgpLT5oZWFwUHJv
ZmlsZXIoKS0+YWN0aXZlSGVhcEFuYWx5emVyKCkgPT0gdGhpcyk7CisgICAgICAgIEFTU0VSVCh0
by0+dm0oKS5oZWFwUHJvZmlsZXIoKS0+YWN0aXZlSGVhcEFuYWx5emVyKCkgPT0gdGhpcyk7CiAK
ICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX211dGV4KTsKIApAQCAtOTAwLDcgKzkw
MSw3IEBAIEpTVmFsdWUgSlNJbmplY3RlZFNjcmlwdEhvc3Q6OnF1ZXJ5SG9sZGUKICAgICB7CiAg
ICAgICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKICAgICAgICAgUHJldmVudENvbGxlY3Rp
b25TY29wZSBwcmV2ZW50Q29sbGVjdGlvblNjb3BlKHZtLmhlYXApOwotICAgICAgICBzYW5pdGl6
ZVN0YWNrRm9yVk0oJnZtKTsKKyAgICAgICAgc2FuaXRpemVTdGFja0ZvclZNKHZtKTsKIAogICAg
ICAgICBIZWFwSG9sZGVyRmluZGVyIGhvbGRlckZpbmRlcih2bS5lbnN1cmVIZWFwUHJvZmlsZXIo
KSwgdGFyZ2V0LmFzQ2VsbCgpKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9KU0phdmFTY3JpcHRDYWxsRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNKYXZhU2NyaXB0Q2FsbEZyYW1lLmNwcAkocmV2aXNpb24g
MjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0phdmFTY3JpcHRD
YWxsRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNC0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTIxLDkgKzEyMSw5IEBAIHN0YXRpYyBK
U1ZhbHVlIHZhbHVlRm9yU2NvcGVMb2NhdGlvbihFeGUKICAgICAvLyBEZWJ1Z2dlci5Mb2NhdGlv
biBwcm90b2NvbCBvYmplY3QuCiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBKU09iamVj
dCogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYyk7Ci0gICAgcmVzdWx0LT5wdXRE
aXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgInNjcmlwdElkIiksIGpzU3Ry
aW5nKGV4ZWMsIFN0cmluZzo6bnVtYmVyKGxvY2F0aW9uLnNvdXJjZUlEKSkpOwotICAgIHJlc3Vs
dC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJsaW5lTnVtYmVy
IiksIGpzTnVtYmVyKGxvY2F0aW9uLmxpbmUpKTsKLSAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCAiY29sdW1uTnVtYmVyIiksIGpzTnVtYmVyKGxv
Y2F0aW9uLmNvbHVtbikpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCAic2NyaXB0SWQiKSwganNTdHJpbmcodm0sIFN0cmluZzo6bnVtYmVyKGxv
Y2F0aW9uLnNvdXJjZUlEKSkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKHZtLCAibGluZU51bWJlciIpLCBqc051bWJlcihsb2NhdGlvbi5saW5lKSk7
CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJj
b2x1bW5OdW1iZXIiKSwganNOdW1iZXIobG9jYXRpb24uY29sdW1uKSk7CiAgICAgcmV0dXJuIHJl
c3VsdDsKIH0KIApAQCAtMTQzLDkgKzE0Myw5IEBAIEpTVmFsdWUgSlNKYXZhU2NyaXB0Q2FsbEZy
YW1lOjpzY29wZURlc2MKICAgICBmb3IgKERlYnVnZ2VyU2NvcGU6Oml0ZXJhdG9yIGl0ZXIgPSBz
Y29wZUNoYWluLT5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7CiAgICAgICAgIERlYnVn
Z2VyU2NvcGUqIHNjb3BlID0gaXRlci5nZXQoKTsKICAgICAgICAgSlNPYmplY3QqIGRlc2NyaXB0
aW9uID0gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYyk7Ci0gICAgICAgIGRlc2NyaXB0aW9uLT5w
dXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgInR5cGUiKSwgdmFsdWVG
b3JTY29wZVR5cGUoc2NvcGUpKTsKLSAgICAgICAgZGVzY3JpcHRpb24tPnB1dERpcmVjdCh2bSwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCAibmFtZSIpLCBqc1N0cmluZyhleGVjLCBzY29w
ZS0+bmFtZSgpKSk7Ci0gICAgICAgIGRlc2NyaXB0aW9uLT5wdXREaXJlY3Qodm0sIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcoZXhlYywgImxvY2F0aW9uIiksIHZhbHVlRm9yU2NvcGVMb2NhdGlvbihl
eGVjLCBzY29wZS0+bG9jYXRpb24oKSkpOworICAgICAgICBkZXNjcmlwdGlvbi0+cHV0RGlyZWN0
KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAidHlwZSIpLCB2YWx1ZUZvclNjb3BlVHlw
ZShzY29wZSkpOworICAgICAgICBkZXNjcmlwdGlvbi0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKHZtLCAibmFtZSIpLCBqc1N0cmluZyh2bSwgc2NvcGUtPm5hbWUoKSkpOwor
ICAgICAgICBkZXNjcmlwdGlvbi0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KHZtLCAibG9jYXRpb24iKSwgdmFsdWVGb3JTY29wZUxvY2F0aW9uKGV4ZWMsIHNjb3BlLT5sb2Nh
dGlvbigpKSk7CiAgICAgICAgIGFycmF5LT5wdXREaXJlY3RJbmRleChleGVjLCBpbmRleCsrLCBk
ZXNjcmlwdGlvbik7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgSlNW
YWx1ZSgpKTsKICAgICB9CkBAIC0xNzUsNyArMTc1LDcgQEAgSlNWYWx1ZSBKU0phdmFTY3JpcHRD
YWxsRnJhbWU6OmNvbHVtbihFeAogCiBKU1ZhbHVlIEpTSmF2YVNjcmlwdENhbGxGcmFtZTo6ZnVu
Y3Rpb25OYW1lKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKIHsKLSAgICByZXR1cm4ganNTdHJpbmco
ZXhlYywgaW1wbCgpLmZ1bmN0aW9uTmFtZSgpKTsKKyAgICByZXR1cm4ganNTdHJpbmcoZXhlYy0+
dm0oKSwgaW1wbCgpLmZ1bmN0aW9uTmFtZSgpKTsKIH0KIAogSlNWYWx1ZSBKU0phdmFTY3JpcHRD
YWxsRnJhbWU6OnNjb3BlQ2hhaW4oRXhlY1N0YXRlKiBleGVjKSBjb25zdApAQCAtMjE4LDExICsy
MTgsMTIgQEAgSlNWYWx1ZSBKU0phdmFTY3JpcHRDYWxsRnJhbWU6OmlzVGFpbERlbAogCiBKU1Zh
bHVlIEpTSmF2YVNjcmlwdENhbGxGcmFtZTo6dHlwZShFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiB7
CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBzd2l0Y2ggKGltcGwoKS50eXBlKCkpIHsK
ICAgICBjYXNlIERlYnVnZ2VyQ2FsbEZyYW1lOjpGdW5jdGlvblR5cGU6Ci0gICAgICAgIHJldHVy
biBqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywgImZ1bmN0aW9uIl9zKTsKKyAgICAgICAgcmV0dXJu
IGpzTm9udHJpdmlhbFN0cmluZyh2bSwgImZ1bmN0aW9uIl9zKTsKICAgICBjYXNlIERlYnVnZ2Vy
Q2FsbEZyYW1lOjpQcm9ncmFtVHlwZToKLSAgICAgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmlu
ZyhleGVjLCAicHJvZ3JhbSJfcyk7CisgICAgICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmco
dm0sICJwcm9ncmFtIl9zKTsKICAgICB9CiAKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvU2NyaXB0Q2FsbFN0YWNrRmFjdG9y
eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9TY3Jp
cHRDYWxsU3RhY2tGYWN0b3J5LmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9TY3JpcHRDYWxsU3RhY2tGYWN0b3J5LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTkg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChjKSAyMDEwIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTIgUmVz
ZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgpAQCAtMTI5
LDkgKzEyOSw5IEBAIHN0YXRpYyBib29sIGV4dHJhY3RTb3VyY2VJbmZvcm1hdGlvbkZyb20KICAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CiAKICAgICAvLyBGSVhNRTog
PGh0dHA6Ly93ZWJraXQub3JnL2IvMTE1MDg3PiBXZWIgSW5zcGVjdG9yOiBTaG91bGQgbm90IG5l
ZWQgdG8gZXZhbHVhdGUgSmF2YVNjcmlwdCBoYW5kbGluZyBleGNlcHRpb25zCi0gICAgSlNWYWx1
ZSBsaW5lVmFsdWUgPSBleGNlcHRpb25PYmplY3QtPmdldERpcmVjdCh2bSwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZyhleGVjLCAibGluZSIpKTsKLSAgICBKU1ZhbHVlIGNvbHVtblZhbHVlID0gZXhj
ZXB0aW9uT2JqZWN0LT5nZXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywg
ImNvbHVtbiIpKTsKLSAgICBKU1ZhbHVlIHNvdXJjZVVSTFZhbHVlID0gZXhjZXB0aW9uT2JqZWN0
LT5nZXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgInNvdXJjZVVSTCIp
KTsKKyAgICBKU1ZhbHVlIGxpbmVWYWx1ZSA9IGV4Y2VwdGlvbk9iamVjdC0+Z2V0RGlyZWN0KHZt
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAibGluZSIpKTsKKyAgICBKU1ZhbHVlIGNvbHVt
blZhbHVlID0gZXhjZXB0aW9uT2JqZWN0LT5nZXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21T
dHJpbmcodm0sICJjb2x1bW4iKSk7CisgICAgSlNWYWx1ZSBzb3VyY2VVUkxWYWx1ZSA9IGV4Y2Vw
dGlvbk9iamVjdC0+Z2V0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAic291
cmNlVVJMIikpOwogICAgIAogICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7CiAgICAgaWYgKGxpbmVW
YWx1ZSAmJiBsaW5lVmFsdWUuaXNOdW1iZXIoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQXVkaXRBZ2VudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQXVkaXRBZ2Vu
dC5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3IvYWdlbnRzL0luc3BlY3RvckF1ZGl0QWdlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzYs
OSArMTM2LDEwIEBAIHZvaWQgSW5zcGVjdG9yQXVkaXRBZ2VudDo6cG9wdWxhdGVBdWRpdE8KICAg
ICBpZiAoIWV4ZWNTdGF0ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSlNDOjpKU0xvY2tIb2xk
ZXIgbG9jayhleGVjU3RhdGUpOworICAgIEpTQzo6Vk0mIHZtID0gZXhlY1N0YXRlLT52bSgpOwor
ICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2sodm0pOwogCi0gICAgYXVkaXRPYmplY3QtPnB1dERp
cmVjdChleGVjU3RhdGUtPnZtKCksIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjU3Rh
dGUsICJWZXJzaW9uIiksIEpTQzo6SlNWYWx1ZShJbnNwZWN0b3I6OlByb3RvY29sOjpBdWRpdDo6
VkVSU0lPTikpOworICAgIGF1ZGl0T2JqZWN0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmll
cjo6ZnJvbVN0cmluZyh2bSwgIlZlcnNpb24iKSwgSlNDOjpKU1ZhbHVlKEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkF1ZGl0OjpWRVJTSU9OKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9ySGVh
cEFnZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L2FnZW50cy9JbnNwZWN0b3JIZWFwQWdlbnQuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JIZWFwQWdlbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtOTAsNyArOTAsNyBAQCB2b2lkIEluc3BlY3RvckhlYXBBZ2Vu
dDo6Z2MoRXJyb3JTdHJpbmcmCiB7CiAgICAgVk0mIHZtID0gbV9lbnZpcm9ubWVudC52bSgpOwog
ICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKLSAgICBzYW5pdGl6ZVN0YWNrRm9yVk0oJnZtKTsK
KyAgICBzYW5pdGl6ZVN0YWNrRm9yVk0odm0pOwogICAgIHZtLmhlYXAuY29sbGVjdE5vdyhTeW5j
LCBDb2xsZWN0aW9uU2NvcGU6OkZ1bGwpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW50ZXJwcmV0ZXIvRnJhbWVUcmFjZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL0ZyYW1lVHJhY2Vycy5oCShyZXZpc2lvbiAyNDkxMjgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvRnJhbWVUcmFjZXJzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIw
MTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC04MywxMyArODMsMTMgQEAgQUxXQVlTX0lOTElORSBzdGF0aWMgdm9pZCBh
c3NlcnRTdGFja1BvaQogCiBjbGFzcyBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgewogcHVibGljOgot
ICAgIEFMV0FZU19JTkxJTkUgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyKFZNKiB2bSwgQ2FsbEZyYW1l
KiBjYWxsRnJhbWUpCisgICAgQUxXQVlTX0lOTElORSBOYXRpdmVDYWxsRnJhbWVUcmFjZXIoVk0m
IHZtLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKICAgICB7Ci0gICAgICAgIEFTU0VSVCh2bSk7Cisg
ICAgICAgIEFTU0VSVCgmdm0pOwogICAgICAgICBBU1NFUlQoY2FsbEZyYW1lKTsKLSAgICAgICAg
QVNTRVJUKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGNhbGxGcmFtZSkgPCByZWludGVycHJldF9j
YXN0PHZvaWQqPih2bS0+dG9wRW50cnlGcmFtZSkpOworICAgICAgICBBU1NFUlQocmVpbnRlcnBy
ZXRfY2FzdDx2b2lkKj4oY2FsbEZyYW1lKSA8IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHZtLnRv
cEVudHJ5RnJhbWUpKTsKICAgICAgICAgYXNzZXJ0U3RhY2tQb2ludGVySXNBbGlnbmVkKCk7Ci0g
ICAgICAgIHZtLT50b3BDYWxsRnJhbWUgPSBjYWxsRnJhbWU7CisgICAgICAgIHZtLnRvcENhbGxG
cmFtZSA9IGNhbGxGcmFtZTsKICAgICB9CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAJKHJldmlzaW9uIDI0OTEyOCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTY2Miw3ICs2NjIsNyBAQCB2b2lkIEludGVycHJldGVyOjpub3RpZnlE
ZWJ1Z2dlck9mRXhjZXB0CiBKU1ZhbHVlIEludGVycHJldGVyOjpleGVjdXRlUHJvZ3JhbShjb25z
dCBTb3VyY2VDb2RlJiBzb3VyY2UsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU09iamVjdCogdGhp
c09iaikKIHsKICAgICBKU1Njb3BlKiBzY29wZSA9IHRoaXNPYmotPmdsb2JhbE9iamVjdCgpLT5n
bG9iYWxTY29wZSgpOwotICAgIFZNJiB2bSA9ICpzY29wZS0+dm0oKTsKKyAgICBWTSYgdm0gPSBz
Y29wZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKIAogICAgIFByb2dyYW1FeGVjdXRhYmxlKiBwcm9ncmFtID0gUHJvZ3JhbUV4ZWN1dGFibGU6
OmNyZWF0ZShjYWxsRnJhbWUsIHNvdXJjZSk7CkBAIC05ODcsNyArOTg3LDcgQEAgSlNPYmplY3Qq
IEludGVycHJldGVyOjpleGVjdXRlQ29uc3RydWN0KAogCiBDYWxsRnJhbWVDbG9zdXJlIEludGVy
cHJldGVyOjpwcmVwYXJlRm9yUmVwZWF0Q2FsbChGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9u
RXhlY3V0YWJsZSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIFByb3RvQ2FsbEZyYW1lKiBwcm90b0Nh
bGxGcmFtZSwgSlNGdW5jdGlvbiogZnVuY3Rpb24sIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcywgSlNTY29wZSogc2NvcGUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7Ci0gICAgVk0mIHZt
ID0gKnNjb3BlLT52bSgpOworICAgIFZNJiB2bSA9IHNjb3BlLT52bSgpOwogICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIHRocm93U2NvcGUuYXNzZXJ0
Tm9FeGNlcHRpb24oKTsKICAgICAKQEAgLTEwMTIsNyArMTAxMiw3IEBAIENhbGxGcmFtZUNsb3N1
cmUgSW50ZXJwcmV0ZXI6OnByZXBhcmVGb3IKIAogSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0
ZShFdmFsRXhlY3V0YWJsZSogZXZhbCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTVmFsdWUgdGhp
c1ZhbHVlLCBKU1Njb3BlKiBzY29wZSkKIHsKLSAgICBWTSYgdm0gPSAqc2NvcGUtPnZtKCk7Cisg
ICAgVk0mIHZtID0gc2NvcGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CiAKICAgICBBU1NFUlQoJnZtID09ICZjYWxsRnJhbWUtPnZtKCkpOwpA
QCAtMTE2MSw3ICsxMTYxLDcgQEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZShFdmFsRXhl
Y3V0YQogCiBKU1ZhbHVlIEludGVycHJldGVyOjpleGVjdXRlTW9kdWxlUHJvZ3JhbShNb2R1bGVQ
cm9ncmFtRXhlY3V0YWJsZSogZXhlY3V0YWJsZSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTTW9k
dWxlRW52aXJvbm1lbnQqIHNjb3BlKQogewotICAgIFZNJiB2bSA9ICpzY29wZS0+dm0oKTsKKyAg
ICBWTSYgdm0gPSBzY29wZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKIAogICAgIEFTU0VSVCgmdm0gPT0gJmNhbGxGcmFtZS0+dm0oKSk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNp
dG9yLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVy
cHJldGVyL1N0YWNrVmlzaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNzQsNyArMjc0LDcg
QEAgT3B0aW9uYWw8UmVnaXN0ZXJBdE9mZnNldExpc3Q+IFN0YWNrVmlzaQogICAgIH0KIAogICAg
IGlmIChjYWxsZWUoKS5pc0NlbGwoKSkgewotICAgICAgICBpZiAoYXV0byoganNUb1dhc21JQ0Nh
bGxlZSA9IGpzRHluYW1pY0Nhc3Q8SlNUb1dhc21JQ0NhbGxlZSo+KCpjYWxsZWUoKS5hc0NlbGwo
KS0+dm0oKSwgY2FsbGVlKCkuYXNDZWxsKCkpKQorICAgICAgICBpZiAoYXV0byoganNUb1dhc21J
Q0NhbGxlZSA9IGpzRHluYW1pY0Nhc3Q8SlNUb1dhc21JQ0NhbGxlZSo+KGNhbGxlZSgpLmFzQ2Vs
bCgpLT52bSgpLCBjYWxsZWUoKS5hc0NlbGwoKSkpCiAgICAgICAgICAgICByZXR1cm4ganNUb1dh
c21JQ0NhbGxlZS0+ZnVuY3Rpb24oKS0+dXNlZENhbGxlZVNhdmVSZWdpc3RlcnMoKTsKICAgICB9
CiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpAQCAtNDE0LDcgKzQxNCw3IEBAIHZvaWQg
U3RhY2tWaXNpdG9yOjpGcmFtZTo6Y29tcHV0ZUxpbmVBbmQKICAgICBsaW5lID0gZGl2b3RMaW5l
ICsgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKS0+Zmlyc3RMaW5lKCk7CiAgICAgY29sdW1u
ID0gZGl2b3RDb2x1bW4gKyAoZGl2b3RMaW5lID8gMSA6IGNvZGVCbG9jay0+Zmlyc3RMaW5lQ29s
dW1uT2Zmc2V0KCkpOwogCi0gICAgaWYgKE9wdGlvbmFsPGludD4gb3ZlcnJpZGVMaW5lTnVtYmVy
ID0gY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKS0+b3ZlcnJpZGVMaW5lTnVtYmVyKCpjb2Rl
QmxvY2stPnZtKCkpKQorICAgIGlmIChPcHRpb25hbDxpbnQ+IG92ZXJyaWRlTGluZU51bWJlciA9
IGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCktPm92ZXJyaWRlTGluZU51bWJlcihjb2RlQmxv
Y2stPnZtKCkpKQogICAgICAgICBsaW5lID0gb3ZlcnJpZGVMaW5lTnVtYmVyLnZhbHVlKCk7CiB9
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5j
cHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1i
bHlIZWxwZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjM0LDcgKzYzNCw3IEBAIHZvaWQgQXNz
ZW1ibHlIZWxwZXJzOjplbWl0RHVtYlZpcnR1YWxDYWwKICAgICBDYWxsIGNhbGwgPSBuZWFyQ2Fs
bCgpOwogICAgIGFkZExpbmtUYXNrKAogICAgICAgICBbPSwgJnZtXSAoTGlua0J1ZmZlciYgbGlu
a0J1ZmZlcikgewotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0
aW5lUHRyVGFnPiB2aXJ0dWFsVGh1bmsgPSB2aXJ0dWFsVGh1bmtGb3IoJnZtLCAqaW5mbyk7Cisg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHZp
cnR1YWxUaHVuayA9IHZpcnR1YWxUaHVua0Zvcih2bSwgKmluZm8pOwogICAgICAgICAgICAgaW5m
by0+c2V0U2xvd1N0dWIoY3JlYXRlSklUU3R1YlJvdXRpbmUodmlydHVhbFRodW5rLCB2bSwgbnVs
bHB0ciwgdHJ1ZSkpOwogICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIENvZGVMb2Nh
dGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPih2aXJ0dWFsVGh1bmsuY29kZSgpKSk7CiAg
ICAgICAgIH0pOwpAQCAtNzI3LDcgKzcyNyw3IEBAIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0
Q29udmVydFZhbHVlVG8KICAgICBkb25lLmFwcGVuZChqdW1wKCkpOwogCiAgICAgaXNTdHJpbmcu
bGluayh0aGlzKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoanNFbXB0eVN0cmluZygmdm0pKSwg
cmVzdWx0KTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoanNFbXB0eVN0cmluZyh2bSkpLCByZXN1
bHQpOwogICAgIGNvbXBhcmVQdHIoaW52ZXJ0ID8gRXF1YWwgOiBOb3RFcXVhbCwgdmFsdWUucGF5
bG9hZEdQUigpLCByZXN1bHQsIHJlc3VsdCk7CiAgICAgZG9uZS5hcHBlbmQoanVtcCgpKTsKIApA
QCAtODE3LDcgKzgxNyw3IEBAIEFzc2VtYmx5SGVscGVyczo6SnVtcExpc3QgQXNzZW1ibHlIZWxw
ZXIKICAgICB9CiAKICAgICBpc1N0cmluZy5saW5rKHRoaXMpOwotICAgIHRydXRoeS5hcHBlbmQo
YnJhbmNoUHRyKGludmVydCA/IEVxdWFsIDogTm90RXF1YWwsIHZhbHVlLnBheWxvYWRHUFIoKSwg
VHJ1c3RlZEltbVB0cihqc0VtcHR5U3RyaW5nKCZ2bSkpKSk7CisgICAgdHJ1dGh5LmFwcGVuZChi
cmFuY2hQdHIoaW52ZXJ0ID8gRXF1YWwgOiBOb3RFcXVhbCwgdmFsdWUucGF5bG9hZEdQUigpLCBU
cnVzdGVkSW1tUHRyKGpzRW1wdHlTdHJpbmcodm0pKSkpOwogICAgIGRvbmUuYXBwZW5kKGp1bXAo
KSk7CiAKICAgICBpc0JpZ0ludC5saW5rKHRoaXMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC02
Miw3ICs2Miw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaygp
IHsgcmV0dXJuIG1fY29kZUJsb2NrOyB9Ci0gICAgVk0mIHZtKCkgeyByZXR1cm4gKm1fY29kZUJs
b2NrLT52bSgpOyB9CisgICAgVk0mIHZtKCkgeyByZXR1cm4gbV9jb2RlQmxvY2stPnZtKCk7IH0K
ICAgICBBc3NlbWJsZXJUeXBlX1QmIGFzc2VtYmxlcigpIHsgcmV0dXJuIG1fYXNzZW1ibGVyOyB9
CiAKICAgICB2b2lkIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDgtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTc0LDEyICs3NCwxMiBAQCB2b2lk
IGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5BCiAgICAgICAgIG5ld0NhbGxlZUZ1
bmN0aW9uLnJldGFnZ2VkPE9wZXJhdGlvblB0clRhZz4oKSk7CiB9CiAKLUpJVDo6SklUKFZNKiB2
bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIHVuc2lnbmVkIGxvb3BPU1JFbnRyeUJ5dGVjb2RlT2Zm
c2V0KQotICAgIDogSlNJbnRlcmZhY2VKSVQodm0sIGNvZGVCbG9jaykKLSAgICAsIG1faW50ZXJw
cmV0ZXIodm0tPmludGVycHJldGVyKQorSklUOjpKSVQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVC
bG9jaywgdW5zaWduZWQgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVPZmZzZXQpCisgICAgOiBKU0ludGVy
ZmFjZUpJVCgmdm0sIGNvZGVCbG9jaykKKyAgICAsIG1faW50ZXJwcmV0ZXIodm0uaW50ZXJwcmV0
ZXIpCiAgICAgLCBtX2xhYmVscyhjb2RlQmxvY2sgPyBjb2RlQmxvY2stPmluc3RydWN0aW9ucygp
LnNpemUoKSA6IDApCiAgICAgLCBtX2J5dGVjb2RlT2Zmc2V0KHN0ZDo6bnVtZXJpY19saW1pdHM8
dW5zaWduZWQ+OjptYXgoKSkKLSAgICAsIG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyKCp2bSkK
KyAgICAsIG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyKHZtKQogICAgICwgbV9jYW5CZU9wdGlt
aXplZChmYWxzZSkKICAgICAsIG1fc2hvdWxkRW1pdFByb2ZpbGluZyhmYWxzZSkKICAgICAsIG1f
c2hvdWxkVXNlSW5kZXhNYXNraW5nKE9wdGlvbnM6OmVuYWJsZVNwZWN0cmVNaXRpZ2F0aW9ucygp
KQpAQCAtMTAyLDcgKzEwMiw3IEBAIHZvaWQgSklUOjplbWl0RW50ZXJPcHRpbWl6YXRpb25DaGVj
aygpCiAgICAgc2tpcE9wdGltaXplLmFwcGVuZChicmFuY2hBZGQzMihTaWduZWQsIFRydXN0ZWRJ
bW0zMihPcHRpb25zOjpleGVjdXRpb25Db3VudGVySW5jcmVtZW50Rm9yRW50cnkoKSksIEFic29s
dXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+YWRkcmVzc09mSklURXhlY3V0ZUNvdW50ZXIoKSkpKTsK
ICAgICBBU1NFUlQoIW1fYnl0ZWNvZGVPZmZzZXQpOwogCi0gICAgY29weUNhbGxlZVNhdmVzRnJv
bUZyYW1lT3JSZWdpc3RlclRvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCktPnRvcEVu
dHJ5RnJhbWUpOworICAgIGNvcHlDYWxsZWVTYXZlc0Zyb21GcmFtZU9yUmVnaXN0ZXJUb0VudHJ5
RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgpLnRvcEVudHJ5RnJhbWUpOwogCiAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25PcHRpbWl6ZSwgbV9ieXRlY29kZU9mZnNldCk7CiAgICAgc2tpcE9w
dGltaXplLmFwcGVuZChicmFuY2hUZXN0UHRyKFplcm8sIHJldHVyblZhbHVlR1BSKSk7CkBAIC0x
OTEsNyArMTkxLDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogCiAgICAg
bV9jYWxsTGlua0luZm9JbmRleCA9IDA7CiAKLSAgICBWTSYgdm0gPSAqbV9jb2RlQmxvY2stPnZt
KCk7CisgICAgVk0mIHZtID0gbV9jb2RlQmxvY2stPnZtKCk7CiAgICAgdW5zaWduZWQgc3RhcnRC
eXRlY29kZU9mZnNldCA9IDA7CiAgICAgaWYgKG1fbG9vcE9TUkVudHJ5Qnl0ZWNvZGVPZmZzZXQg
JiYgKG1fY29kZUJsb2NrLT5pbmhlcml0czxQcm9ncmFtQ29kZUJsb2NrPih2bSkgfHwgbV9jb2Rl
QmxvY2stPmluaGVyaXRzPE1vZHVsZVByb2dyYW1Db2RlQmxvY2s+KHZtKSkpIHsKICAgICAgICAg
Ly8gV2UgY2FuIG9ubHkgZG8gdGhpcyBvcHRpbWl6YXRpb24gYmVjYXVzZSB3ZSBleGVjdXRlIFBy
b2dyYW1Db2RlQmxvY2sncyBleGFjdGx5IG9uY2UuCkBAIC05MzMsMTEgKzkzMywxMSBAQCB2b2lk
IEpJVDo6cHJpdmF0ZUNvbXBpbGVFeGNlcHRpb25IYW5kbGVyCiAgICAgaWYgKCFtX2V4Y2VwdGlv
bkNoZWNrc1dpdGhDYWxsRnJhbWVSb2xsYmFjay5lbXB0eSgpKSB7CiAgICAgICAgIG1fZXhjZXB0
aW9uQ2hlY2tzV2l0aENhbGxGcmFtZVJvbGxiYWNrLmxpbmsodGhpcyk7CiAKLSAgICAgICAgY29w
eUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0oKS0+dG9wRW50cnlG
cmFtZSk7CisgICAgICAgIGNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVm
ZmVyKHZtKCkudG9wRW50cnlGcmFtZSk7CiAKICAgICAgICAgLy8gbG9va3VwRXhjZXB0aW9uSGFu
ZGxlckZyb21DYWxsZXJGcmFtZSBpcyBwYXNzZWQgdHdvIGFyZ3VtZW50cywgdGhlIFZNIGFuZCB0
aGUgZXhlYyAodGhlIENhbGxGcmFtZSopLgogCi0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cih2
bSgpKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRy
KCZ2bSgpKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKICAgICAgICAgbW92ZShHUFJJbmZvOjpj
YWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKIAogI2lmIENQVShYODYp
CkBAIC05NDYsMTcgKzk0NiwxNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVFeGNlcHRpb25I
YW5kbGVyCiAgICAgICAgIHBva2UoR1BSSW5mbzo6YXJndW1lbnRHUFIxLCAxKTsKICNlbmRpZgog
ICAgICAgICBtX2NhbGxzLmFwcGVuZChDYWxsUmVjb3JkKGNhbGwoT3BlcmF0aW9uUHRyVGFnKSwg
c3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpLCBGdW5jdGlvblB0cjxPcGVyYXRp
b25QdHJUYWc+KGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXJGcm9tQ2FsbGVyRnJhbWUpKSk7Ci0gICAg
ICAgIGp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIoKnZtKCkpOworICAgICAgICBqdW1wVG9FeGNlcHRp
b25IYW5kbGVyKHZtKCkpOwogICAgIH0KIAogICAgIGlmICghbV9leGNlcHRpb25DaGVja3MuZW1w
dHkoKSB8fCBtX2J5VmFsQ29tcGlsYXRpb25JbmZvLnNpemUoKSkgewogICAgICAgICBtX2V4Y2Vw
dGlvbkhhbmRsZXIgPSBsYWJlbCgpOwogICAgICAgICBtX2V4Y2VwdGlvbkNoZWNrcy5saW5rKHRo
aXMpOwogCi0gICAgICAgIGNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVm
ZmVyKHZtKCktPnRvcEVudHJ5RnJhbWUpOworICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5
RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgpLnRvcEVudHJ5RnJhbWUpOwogCiAgICAgICAgIC8v
IGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIgaXMgcGFzc2VkIHR3byBhcmd1bWVudHMsIHRoZSBWTSBh
bmQgdGhlIGV4ZWMgKHRoZSBDYWxsRnJhbWUqKS4KLSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRy
KHZtKCkpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIoJnZtKCkpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwogICAgICAgICBtb3ZlKEdQUkluZm86
OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOwogCiAjaWYgQ1BVKFg4
NikKQEAgLTk2NSw3ICs5NjUsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVFeGNlcHRpb25I
YW5kbGVyCiAgICAgICAgIHBva2UoR1BSSW5mbzo6YXJndW1lbnRHUFIxLCAxKTsKICNlbmRpZgog
ICAgICAgICBtX2NhbGxzLmFwcGVuZChDYWxsUmVjb3JkKGNhbGwoT3BlcmF0aW9uUHRyVGFnKSwg
c3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpLCBGdW5jdGlvblB0cjxPcGVyYXRp
b25QdHJUYWc+KGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIpKSk7Ci0gICAgICAgIGp1bXBUb0V4Y2Vw
dGlvbkhhbmRsZXIoKnZtKCkpOworICAgICAgICBqdW1wVG9FeGNlcHRpb25IYW5kbGVyKHZtKCkp
OwogICAgIH0KIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCShyZXZpc2lvbiAyNDkx
MjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMTkyLDQxICsxOTIsNDMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyBjb25z
dCBpbnQgcGF0Y2hQdXRCeUlkRGVmYXVsdE9mZnNldCA9IDI1NjsKIAogICAgIHB1YmxpYzoKLSAg
ICAgICAgSklUKFZNKiwgQ29kZUJsb2NrKiA9IDAsIHVuc2lnbmVkIGxvb3BPU1JFbnRyeUJ5dGVj
b2RlT2Zmc2V0ID0gMCk7CisgICAgICAgIEpJVChWTSYsIENvZGVCbG9jayogPSAwLCB1bnNpZ25l
ZCBsb29wT1NSRW50cnlCeXRlY29kZU9mZnNldCA9IDApOwogICAgICAgICB+SklUKCk7CiAKKyAg
ICAgICAgVk0mIHZtKCkgeyByZXR1cm4gKkpTSW50ZXJmYWNlSklUOjp2bSgpOyB9CisKICAgICAg
ICAgdm9pZCBjb21waWxlV2l0aG91dExpbmtpbmcoSklUQ29tcGlsYXRpb25FZmZvcnQpOwogICAg
ICAgICBDb21waWxhdGlvblJlc3VsdCBsaW5rKCk7CiAKICAgICAgICAgdm9pZCBkb01haW5UaHJl
YWRQcmVwYXJhdGlvbkJlZm9yZUNvbXBpbGUoKTsKICAgICAgICAgCi0gICAgICAgIHN0YXRpYyBD
b21waWxhdGlvblJlc3VsdCBjb21waWxlKFZNKiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJ
VENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCwgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSAwKQor
ICAgICAgICBzdGF0aWMgQ29tcGlsYXRpb25SZXN1bHQgY29tcGlsZShWTSYgdm0sIENvZGVCbG9j
ayogY29kZUJsb2NrLCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQsIHVuc2lnbmVkIGJ5dGVj
b2RlT2Zmc2V0ID0gMCkKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIEpJVCh2bSwgY29k
ZUJsb2NrLCBieXRlY29kZU9mZnNldCkucHJpdmF0ZUNvbXBpbGUoZWZmb3J0KTsKICAgICAgICAg
fQogICAgICAgICAKLSAgICAgICAgc3RhdGljIHZvaWQgY29tcGlsZUdldEJ5VmFsKGNvbnN0IENv
bmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBWTSogdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBC
eVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBKSVRB
cnJheU1vZGUgYXJyYXlNb2RlKQorICAgICAgICBzdGF0aWMgdm9pZCBjb21waWxlR2V0QnlWYWwo
Y29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIsIFZNJiB2bSwgQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJl
c3MsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUpCiAgICAgICAgIHsKICAgICAgICAgICAgIEpJVCBq
aXQodm0sIGNvZGVCbG9jayk7CiAgICAgICAgICAgICBqaXQubV9ieXRlY29kZU9mZnNldCA9IGJ5
VmFsSW5mby0+Ynl0ZWNvZGVJbmRleDsKICAgICAgICAgICAgIGppdC5wcml2YXRlQ29tcGlsZUdl
dEJ5VmFsKGxvY2tlciwgYnlWYWxJbmZvLCByZXR1cm5BZGRyZXNzLCBhcnJheU1vZGUpOwogICAg
ICAgICB9CiAKLSAgICAgICAgc3RhdGljIHZvaWQgY29tcGlsZUdldEJ5VmFsV2l0aENhY2hlZElk
KFZNKiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1
cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFt
ZSkKKyAgICAgICAgc3RhdGljIHZvaWQgY29tcGlsZUdldEJ5VmFsV2l0aENhY2hlZElkKFZNJiB2
bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRy
ZXNzUHRyIHJldHVybkFkZHJlc3MsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkKICAg
ICAgICAgewogICAgICAgICAgICAgSklUIGppdCh2bSwgY29kZUJsb2NrKTsKICAgICAgICAgICAg
IGppdC5tX2J5dGVjb2RlT2Zmc2V0ID0gYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4OwogICAgICAg
ICAgICAgaml0LnByaXZhdGVDb21waWxlR2V0QnlWYWxXaXRoQ2FjaGVkSWQoYnlWYWxJbmZvLCBy
ZXR1cm5BZGRyZXNzLCBwcm9wZXJ0eU5hbWUpOwogICAgICAgICB9CiAKLSAgICAgICAgc3RhdGlj
IHZvaWQgY29tcGlsZVB1dEJ5VmFsKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBW
TSogdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJu
QWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBKSVRBcnJheU1vZGUgYXJyYXlNb2RlKQorICAgICAg
ICBzdGF0aWMgdm9pZCBjb21waWxlUHV0QnlWYWwoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBs
b2NrZXIsIFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5VmFsSW5mbyogYnlWYWxJbmZv
LCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUp
CiAgICAgICAgIHsKICAgICAgICAgICAgIEpJVCBqaXQodm0sIGNvZGVCbG9jayk7CiAgICAgICAg
ICAgICBqaXQubV9ieXRlY29kZU9mZnNldCA9IGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleDsKICAg
ICAgICAgICAgIGppdC5wcml2YXRlQ29tcGlsZVB1dEJ5VmFsPE9wUHV0QnlWYWw+KGxvY2tlciwg
YnlWYWxJbmZvLCByZXR1cm5BZGRyZXNzLCBhcnJheU1vZGUpOwogICAgICAgICB9CiAgICAgICAg
IAotICAgICAgICBzdGF0aWMgdm9pZCBjb21waWxlRGlyZWN0UHV0QnlWYWwoY29uc3QgQ29uY3Vy
cmVudEpTTG9ja2VyJiBsb2NrZXIsIFZNKiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5VmFs
SW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEpJVEFycmF5
TW9kZSBhcnJheU1vZGUpCisgICAgICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVEaXJlY3RQdXRCeVZh
bChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImIGxvY2tlciwgVk0mIHZtLCBDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRk
cmVzcywgSklUQXJyYXlNb2RlIGFycmF5TW9kZSkKICAgICAgICAgewogICAgICAgICAgICAgSklU
IGppdCh2bSwgY29kZUJsb2NrKTsKICAgICAgICAgICAgIGppdC5tX2J5dGVjb2RlT2Zmc2V0ID0g
YnlWYWxJbmZvLT5ieXRlY29kZUluZGV4OwpAQCAtMjM0LDE0ICsyMzYsMTQgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIH0KIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLSAgICAg
ICAgc3RhdGljIHZvaWQgY29tcGlsZVB1dEJ5VmFsV2l0aENhY2hlZElkKFZNKiB2bSwgQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJl
dHVybkFkZHJlc3MsIFB1dEtpbmQgcHV0S2luZCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlO
YW1lKQorICAgICAgICBzdGF0aWMgdm9pZCBjb21waWxlUHV0QnlWYWxXaXRoQ2FjaGVkSWQoVk0m
IHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFk
ZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgUHV0S2luZCBwdXRLaW5kLCBjb25zdCBJZGVudGlmaWVy
JiBwcm9wZXJ0eU5hbWUpCiAgICAgICAgIHsKICAgICAgICAgICAgIEpJVCBqaXQodm0sIGNvZGVC
bG9jayk7CiAgICAgICAgICAgICBqaXQubV9ieXRlY29kZU9mZnNldCA9IGJ5VmFsSW5mby0+Ynl0
ZWNvZGVJbmRleDsKICAgICAgICAgICAgIGppdC5wcml2YXRlQ29tcGlsZVB1dEJ5VmFsV2l0aENh
Y2hlZElkPE9wPihieVZhbEluZm8sIHJldHVybkFkZHJlc3MsIHB1dEtpbmQsIHByb3BlcnR5TmFt
ZSk7CiAgICAgICAgIH0KIAotICAgICAgICBzdGF0aWMgdm9pZCBjb21waWxlSGFzSW5kZXhlZFBy
b3BlcnR5KFZNKiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5VmFsSW5mbyogYnlWYWxJbmZv
LCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUp
CisgICAgICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkoVk0mIHZtLCBD
b2RlQmxvY2sqIGNvZGVCbG9jaywgQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQ
dHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlNb2RlIGFycmF5TW9kZSkKICAgICAgICAgewogICAg
ICAgICAgICAgSklUIGppdCh2bSwgY29kZUJsb2NrKTsKICAgICAgICAgICAgIGppdC5tX2J5dGVj
b2RlT2Zmc2V0ID0gYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4OwpAQCAtMjk1LDEyICsyOTcsMTIg
QEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdm9pZCBleGNlcHRpb25DaGVjaygpCiAgICAg
ICAgIHsKLSAgICAgICAgICAgIG1fZXhjZXB0aW9uQ2hlY2tzLmFwcGVuZChlbWl0RXhjZXB0aW9u
Q2hlY2soKnZtKCkpKTsKKyAgICAgICAgICAgIG1fZXhjZXB0aW9uQ2hlY2tzLmFwcGVuZChlbWl0
RXhjZXB0aW9uQ2hlY2sodm0oKSkpOwogICAgICAgICB9CiAKICAgICAgICAgdm9pZCBleGNlcHRp
b25DaGVja1dpdGhDYWxsRnJhbWVSb2xsYmFjaygpCiAgICAgICAgIHsKLSAgICAgICAgICAgIG1f
ZXhjZXB0aW9uQ2hlY2tzV2l0aENhbGxGcmFtZVJvbGxiYWNrLmFwcGVuZChlbWl0RXhjZXB0aW9u
Q2hlY2soKnZtKCkpKTsKKyAgICAgICAgICAgIG1fZXhjZXB0aW9uQ2hlY2tzV2l0aENhbGxGcmFt
ZVJvbGxiYWNrLmFwcGVuZChlbWl0RXhjZXB0aW9uQ2hlY2sodm0oKSkpOwogICAgICAgICB9CiAK
ICAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZUV4Y2VwdGlvbkhhbmRsZXJzKCk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2
Miw3ICsxNjIsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgCiAg
ICAgYWRkUHRyKFRydXN0ZWRJbW0zMihyZWdpc3Rlck9mZnNldCAqIHNpemVvZihSZWdpc3Rlcikg
KyBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2lu
dGVyUmVnaXN0ZXIpOwogCiAgICAgbG9hZDY0KEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIs
IHNpemVvZihSZWdpc3RlcikgKiBDYWxsRnJhbWVTbG90OjpjYWxsZWUgLSBzaXplb2YoQ2FsbGVy
RnJhbWVBbmRQQykpLCByZWdUMCk7Ci0gICAgZW1pdER1bWJWaXJ0dWFsQ2FsbCgqdm0oKSwgaW5m
byk7CisgICAgZW1pdER1bWJWaXJ0dWFsQ2FsbCh2bSgpLCBpbmZvKTsKICAgICBhZGRQdHIoVHJ1
c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVn
aXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBj
aGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVEV4Y2VwdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklURXhjZXB0aW9ucy5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklURXhjZXB0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00
MywyMiArNDMsMjIgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLXZvaWQgZ2VuZXJpY1Vud2luZChW
TSogdm0sIEV4ZWNTdGF0ZSogY2FsbEZyYW1lKQordm9pZCBnZW5lcmljVW53aW5kKFZNJiB2bSwg
RXhlY1N0YXRlKiBjYWxsRnJhbWUpCiB7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hf
U0NPUEUoKnZtKTsKLSAgICBDYWxsRnJhbWUqIHRvcEpTQ2FsbEZyYW1lID0gdm0tPnRvcEpTQ2Fs
bEZyYW1lKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworICAg
IENhbGxGcmFtZSogdG9wSlNDYWxsRnJhbWUgPSB2bS50b3BKU0NhbGxGcmFtZSgpOwogICAgIGlm
IChPcHRpb25zOjpicmVha09uVGhyb3coKSkgewogICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9j
ayA9IHRvcEpTQ2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKICAgICAgICAgZGF0YUxvZygiSW4gY2Fs
bCBmcmFtZSAiLCBSYXdQb2ludGVyKHRvcEpTQ2FsbEZyYW1lKSwgIiBmb3IgY29kZSBibG9jayAi
LCBjb2RlQmxvY2ssICJcbiIpOwogICAgICAgICBDUkFTSCgpOwogICAgIH0KICAgICAKLSAgICBp
ZiAoYXV0byogc2hhZG93Q2hpY2tlbiA9IHZtLT5zaGFkb3dDaGlja2VuKCkpCi0gICAgICAgIHNo
YWRvd0NoaWNrZW4tPmxvZygqdm0sIHRvcEpTQ2FsbEZyYW1lLCBTaGFkb3dDaGlja2VuOjpQYWNr
ZXQ6OnRocm93UGFja2V0KCkpOworICAgIGlmIChhdXRvKiBzaGFkb3dDaGlja2VuID0gdm0uc2hh
ZG93Q2hpY2tlbigpKQorICAgICAgICBzaGFkb3dDaGlja2VuLT5sb2codm0sIHRvcEpTQ2FsbEZy
YW1lLCBTaGFkb3dDaGlja2VuOjpQYWNrZXQ6OnRocm93UGFja2V0KCkpOwogCiAgICAgRXhjZXB0
aW9uKiBleGNlcHRpb24gPSBzY29wZS5leGNlcHRpb24oKTsKICAgICBSRUxFQVNFX0FTU0VSVChl
eGNlcHRpb24pOwotICAgIEhhbmRsZXJJbmZvKiBoYW5kbGVyID0gdm0tPmludGVycHJldGVyLT51
bndpbmQoKnZtLCBjYWxsRnJhbWUsIGV4Y2VwdGlvbik7IC8vIFRoaXMgbWF5IHVwZGF0ZSBjYWxs
RnJhbWUuCisgICAgSGFuZGxlckluZm8qIGhhbmRsZXIgPSB2bS5pbnRlcnByZXRlci0+dW53aW5k
KHZtLCBjYWxsRnJhbWUsIGV4Y2VwdGlvbik7IC8vIFRoaXMgbWF5IHVwZGF0ZSBjYWxsRnJhbWUu
CiAKICAgICB2b2lkKiBjYXRjaFJvdXRpbmU7CiAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGNhdGNo
UENGb3JJbnRlcnByZXRlciA9IG51bGxwdHI7CkBAIC04NCwxMiArODQsMTIgQEAgdm9pZCBnZW5l
cmljVW53aW5kKFZNKiB2bSwgRXhlY1N0YXRlKiBjYQogICAgIH0gZWxzZQogICAgICAgICBjYXRj
aFJvdXRpbmUgPSBMTEludDo6Z2V0Q29kZVB0cjxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPihoYW5k
bGVVbmNhdWdodEV4Y2VwdGlvbikuZXhlY3V0YWJsZUFkZHJlc3MoKTsKIAotICAgIEFTU0VSVChi
aXR3aXNlX2Nhc3Q8dWludHB0cl90PihjYWxsRnJhbWUpIDwgYml0d2lzZV9jYXN0PHVpbnRwdHJf
dD4odm0tPnRvcEVudHJ5RnJhbWUpKTsKKyAgICBBU1NFUlQoYml0d2lzZV9jYXN0PHVpbnRwdHJf
dD4oY2FsbEZyYW1lKSA8IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHZtLnRvcEVudHJ5RnJhbWUp
KTsKIAogICAgIGFzc2VydElzVGFnZ2VkV2l0aChjYXRjaFJvdXRpbmUsIEV4Y2VwdGlvbkhhbmRs
ZXJQdHJUYWcpOwotICAgIHZtLT5jYWxsRnJhbWVGb3JDYXRjaCA9IGNhbGxGcmFtZTsKLSAgICB2
bS0+dGFyZ2V0TWFjaGluZVBDRm9yVGhyb3cgPSBjYXRjaFJvdXRpbmU7Ci0gICAgdm0tPnRhcmdl
dEludGVycHJldGVyUENGb3JUaHJvdyA9IGNhdGNoUENGb3JJbnRlcnByZXRlcjsKKyAgICB2bS5j
YWxsRnJhbWVGb3JDYXRjaCA9IGNhbGxGcmFtZTsKKyAgICB2bS50YXJnZXRNYWNoaW5lUENGb3JU
aHJvdyA9IGNhdGNoUm91dGluZTsKKyAgICB2bS50YXJnZXRJbnRlcnByZXRlclBDRm9yVGhyb3cg
PSBjYXRjaFBDRm9ySW50ZXJwcmV0ZXI7CiAgICAgCiAgICAgUkVMRUFTRV9BU1NFUlQoY2F0Y2hS
b3V0aW5lKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURXhjZXB0aW9u
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURXhjZXB0aW9u
cy5oCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEV4
Y2VwdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTItMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTItMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDYgKzMwLDYgQEAgbmFtZXNwYWNlIEpT
QyB7CiBjbGFzcyBFeGVjU3RhdGU7CiBjbGFzcyBWTTsKIAotdm9pZCBnZW5lcmljVW53aW5kKFZN
KiwgRXhlY1N0YXRlKik7Cit2b2lkIGdlbmVyaWNVbndpbmQoVk0mLCBFeGVjU3RhdGUqKTsKIAog
fSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElu
bGluZUNhY2hlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0xMDUsNyArMTA1LDcgQEAgSklUR2V0QnlJZEdlbmVyYXRvcjo6SklU
R2V0QnlJZEdlbmVyYXRvcgogICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBDb2RlT3JpZ2luIGNv
ZGVPcmlnaW4sIENhbGxTaXRlSW5kZXggY2FsbFNpdGUsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2Vk
UmVnaXN0ZXJzLAogICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWVS
ZWdzIGJhc2UsIEpTVmFsdWVSZWdzIHZhbHVlLCBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUpCiAgICAg
OiBKSVRCeUlkR2VuZXJhdG9yKGNvZGVCbG9jaywgY29kZU9yaWdpbiwgY2FsbFNpdGUsIGFjY2Vz
c1R5cGUsIHVzZWRSZWdpc3RlcnMsIGJhc2UsIHZhbHVlKQotICAgICwgbV9pc0xlbmd0aEFjY2Vz
cyhwcm9wZXJ0eU5hbWUgPT0gY29kZUJsb2NrLT52bSgpLT5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgu
aW1wbCgpKQorICAgICwgbV9pc0xlbmd0aEFjY2Vzcyhwcm9wZXJ0eU5hbWUgPT0gY29kZUJsb2Nr
LT52bSgpLnByb3BlcnR5TmFtZXMtPmxlbmd0aC5pbXBsKCkpCiB7CiAgICAgUkVMRUFTRV9BU1NF
UlQoYmFzZS5wYXlsb2FkR1BSKCkgIT0gdmFsdWUudGFnR1BSKCkpOwogfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkocmV2aXNpb24gMjQ5
MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zODAsNyArMzgwLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfamZhbHNl
KGNvbnN0IEluc3RydWN0aQogICAgIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QyOwogICAgIEdQUlJl
ZyBzY3JhdGNoMiA9IHJlZ1QzOwogICAgIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkID0gdHJ1ZTsKLSAgICBhZGRKdW1wKGJyYW5jaElmRmFsc2V5KCp2bSgpLCB2YWx1ZSwg
c2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7Cisg
ICAgYWRkSnVtcChicmFuY2hJZkZhbHNleSh2bSgpLCB2YWx1ZSwgc2NyYXRjaDEsIHNjcmF0Y2gy
LCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CiB9CiAKIHZvaWQgSklUOjplbWl0
X29wX2p0cnVlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0zOTQs
NyArMzk0LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfanRydWUoY29uc3QgSW5zdHJ1Y3RpbwogICAg
IEpTVmFsdWVSZWdzIHZhbHVlKHJlZ1QxLCByZWdUMCk7CiAgICAgR1BSUmVnIHNjcmF0Y2gxID0g
cmVnVDI7CiAgICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDM7Ci0gICAgYWRkSnVtcChicmFuY2hJ
ZlRydXRoeSgqdm0oKSwgdmFsdWUsIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdU
MSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCB0YXJnZXQpOworICAgIGFkZEp1bXAoYnJhbmNoSWZUcnV0aHkodm0oKSwgdmFs
dWUsIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQp
OwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQpAQCAtODE1LDEwICs4MTUsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
dGhyb3coY29uc3QgSW5zdHJ1Y3RpbwogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wVGhyb3c+KCk7CiAgICAgQVNTRVJUKHJlZ1QwID09IHJldHVyblZhbHVl
R1BSKTsKLSAgICBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2
bSgpLT50b3BFbnRyeUZyYW1lKTsKKyAgICBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxs
ZWVTYXZlc0J1ZmZlcih2bSgpLnRvcEVudHJ5RnJhbWUpOwogICAgIGVtaXRMb2FkKGJ5dGVjb2Rl
Lm1fdmFsdWUub2Zmc2V0KCksIHJlZ1QxLCByZWdUMCk7CiAgICAgY2FsbE9wZXJhdGlvbk5vRXhj
ZXB0aW9uQ2hlY2sob3BlcmF0aW9uVGhyb3csIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOwot
ICAgIGp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIoKnZtKCkpOworICAgIGp1bXBUb0V4Y2VwdGlvbkhh
bmRsZXIodm0oKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3RvX251bWJlcihjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtODczLDcgKzg3Myw3IEBAIHZvaWQgSklU
OjplbWl0X29wX2NhdGNoKGNvbnN0IEluc3RydWN0aW8KIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcENhdGNoPigpOwogCi0gICAgcmVzdG9yZUNhbGxlZVNh
dmVzRnJvbUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgpLT50b3BFbnRyeUZyYW1lKTsK
KyAgICByZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZt
KCkudG9wRW50cnlGcmFtZSk7CiAKICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV92bSksIHJlZ1Qz
KTsKICAgICAvLyBvcGVyYXRpb25UaHJvdyByZXR1cm5zIHRoZSBjYWxsRnJhbWUgZm9yIHRoZSBo
YW5kbGVyLgpAQCAtODg0LDcgKzg4NCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2NhdGNoKGNvbnN0
IEluc3RydWN0aW8KIAogICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlv
bkNoZWNrSWZFeGNlcHRpb25Jc1VuY2F0Y2hhYmxlQW5kTm90aWZ5UHJvZmlsZXIpOwogICAgIEp1
bXAgaXNDYXRjaGFibGVFeGNlcHRpb24gPSBicmFuY2hUZXN0MzIoWmVybywgcmV0dXJuVmFsdWVH
UFIpOwotICAgIGp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIoKnZtKCkpOworICAgIGp1bXBUb0V4Y2Vw
dGlvbkhhbmRsZXIodm0oKSk7CiAgICAgaXNDYXRjaGFibGVFeGNlcHRpb24ubGluayh0aGlzKTsK
IAogICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX3ZtKSwgcmVnVDMpOwpAQCAtMTM1OCwxNCArMTM1
OCwxNCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wcm9maWxlX3R5cGUoY29uc3QgSW5zCiAKIHZvaWQg
SklUOjplbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl9wcm9sb2d1ZShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIFJFTEVBU0VfQVNTRVJUKHZtKCktPnNoYWRv
d0NoaWNrZW4oKSk7CisgICAgUkVMRUFTRV9BU1NFUlQodm0oKS5zaGFkb3dDaGlja2VuKCkpOwog
ICAgIHVwZGF0ZVRvcENhbGxGcmFtZSgpOwogICAgIHN0YXRpY19hc3NlcnQobm9uQXJnR1BSMCAh
PSByZWdUMCAmJiBub25BcmdHUFIwICE9IHJlZ1QyLCAid2Ugd2lsbCBoYXZlIHByb2JsZW1zIGlm
IHRoaXMgaXMgdHJ1ZS4iKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcExvZ1NoYWRvd0NoaWNrZW5Qcm9sb2d1ZT4oKTsKICAgICBHUFJSZWcgc2hhZG93UGFj
a2V0UmVnID0gcmVnVDA7CiAgICAgR1BSUmVnIHNjcmF0Y2gxUmVnID0gbm9uQXJnR1BSMDsgLy8g
VGhpcyBtdXN0IGJlIGEgbm9uLWFyZ3VtZW50IHJlZ2lzdGVyLgogICAgIEdQUlJlZyBzY3JhdGNo
MlJlZyA9IHJlZ1QyOwotICAgIGVuc3VyZVNoYWRvd0NoaWNrZW5QYWNrZXQoKnZtKCksIHNoYWRv
d1BhY2tldFJlZywgc2NyYXRjaDFSZWcsIHNjcmF0Y2gyUmVnKTsKKyAgICBlbnN1cmVTaGFkb3dD
aGlja2VuUGFja2V0KHZtKCksIHNoYWRvd1BhY2tldFJlZywgc2NyYXRjaDFSZWcsIHNjcmF0Y2gy
UmVnKTsKIAogICAgIHNjcmF0Y2gxUmVnID0gcmVnVDQ7CiAgICAgZW1pdExvYWRQYXlsb2FkKGJ5
dGVjb2RlLm1fc2NvcGUub2Zmc2V0KCksIHJlZ1QzKTsKQEAgLTEzNzQsMTQgKzEzNzQsMTQgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3BybwogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewotICAgIFJFTEVBU0VfQVNTRVJUKHZtKCktPnNoYWRvd0NoaWNrZW4oKSk7
CisgICAgUkVMRUFTRV9BU1NFUlQodm0oKS5zaGFkb3dDaGlja2VuKCkpOwogICAgIHVwZGF0ZVRv
cENhbGxGcmFtZSgpOwogICAgIHN0YXRpY19hc3NlcnQobm9uQXJnR1BSMCAhPSByZWdUMCAmJiBu
b25BcmdHUFIwICE9IHJlZ1QyLCAid2Ugd2lsbCBoYXZlIHByb2JsZW1zIGlmIHRoaXMgaXMgdHJ1
ZS4iKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcExvZ1No
YWRvd0NoaWNrZW5UYWlsPigpOwogICAgIEdQUlJlZyBzaGFkb3dQYWNrZXRSZWcgPSByZWdUMDsK
ICAgICBHUFJSZWcgc2NyYXRjaDFSZWcgPSBub25BcmdHUFIwOyAvLyBUaGlzIG11c3QgYmUgYSBu
b24tYXJndW1lbnQgcmVnaXN0ZXIuCiAgICAgR1BSUmVnIHNjcmF0Y2gyUmVnID0gcmVnVDI7Ci0g
ICAgZW5zdXJlU2hhZG93Q2hpY2tlblBhY2tldCgqdm0oKSwgc2hhZG93UGFja2V0UmVnLCBzY3Jh
dGNoMVJlZywgc2NyYXRjaDJSZWcpOworICAgIGVuc3VyZVNoYWRvd0NoaWNrZW5QYWNrZXQodm0o
KSwgc2hhZG93UGFja2V0UmVnLCBzY3JhdGNoMVJlZywgc2NyYXRjaDJSZWcpOwogICAgIGVtaXRM
b2FkUGF5bG9hZChieXRlY29kZS5tX3RoaXNWYWx1ZS5vZmZzZXQoKSwgcmVnVDIpOwogICAgIGVt
aXRMb2FkVGFnKGJ5dGVjb2RlLm1fdGhpc1ZhbHVlLm9mZnNldCgpLCByZWdUMSk7CiAgICAgSlNW
YWx1ZVJlZ3MgdGhpc1JlZ3MocmVnVDEsIHJlZ1QyKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMyLDcgKzIz
Miw3IEBAIHZvaWQgSklUOjplbWl0X29wX2lzX3VuZGVmaW5lZChjb25zdCBJbnMKICAgICBKdW1w
IG5vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7CiAKICAgICBpc01hc3F1ZXJhZGVz
QXNVbmRlZmluZWQubGluayh0aGlzKTsKLSAgICBlbWl0TG9hZFN0cnVjdHVyZSgqdm0oKSwgcmVn
VDAsIHJlZ1QxLCByZWdUMik7CisgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJl
Z1QxLCByZWdUMik7CiAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIHJlZ1QwKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6
Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMSk7CiAgICAgY29tcGFyZVB0cihFcXVhbCwgcmVn
VDAsIHJlZ1QxLCByZWdUMCk7CkBAIC0zOTEsNyArMzkxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
amZhbHNlKGNvbnN0IEluc3RydWN0aQogICAgIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkID0gdHJ1ZTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9jb25kaXRpb24ub2Zmc2V0KCksIHZhbHVlKTsKLSAgICBhZGRKdW1wKGJyYW5jaElmRmFsc2V5
KCp2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwg
ZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOworICAgIGFkZEp1bXAoYnJhbmNoSWZGYWxzZXkodm0o
KSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVn
VDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgdGFyZ2V0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfamVxX251bGwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQwNSw3ICs0MDUsNyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9qZXFfbnVsbChjb25zdCBJbnN0cnVjCiAKICAgICAvLyBGaXJzdCwg
aGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9u
IHRoZSBzdHJ1Y3R1cmUuCiAgICAgSnVtcCBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBi
cmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZz
ZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7Ci0gICAgZW1pdExv
YWRTdHJ1Y3R1cmUoKnZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOworICAgIGVtaXRMb2FkU3Ry
dWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwogICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CiAgICAgYWRkSnVtcChicmFu
Y2hQdHIoRXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0
KCkpLCByZWdUMCksIHRhcmdldCk7CiAgICAgSnVtcCBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElz
Rm9yZWlnbiA9IGp1bXAoKTsKQEAgLTQyOSw3ICs0MjksNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9q
bmVxX251bGwoY29uc3QgSW5zdHJ1CiAKICAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNl
cyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCiAg
ICAgYWRkSnVtcChicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJ
bmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSks
IHRhcmdldCk7Ci0gICAgZW1pdExvYWRTdHJ1Y3R1cmUoKnZtKCksIHJlZ1QwLCByZWdUMiwgcmVn
VDEpOworICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwog
ICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdU
MCk7CiAgICAgYWRkSnVtcChicmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVj
dHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdldCk7CiAgICAgSnVtcCB3
YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7CkBAIC01MTAsNyArNTEwLDcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfanRydWUoY29uc3QgSW5zdHJ1Y3RpbwogICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1Qy
OwogICAgIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fY29uZGl0aW9uLm9mZnNldCgpLCB2
YWx1ZSk7Ci0gICAgYWRkSnVtcChicmFuY2hJZlRydXRoeSgqdm0oKSwgSlNWYWx1ZVJlZ3ModmFs
dWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFz
cXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0
KTsKKyAgICBhZGRKdW1wKGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwg
c2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX25lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQpAQCAtNTM3LDEwICs1MzcsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdGhyb3coY29u
c3QgSW5zdHJ1Y3RpbwogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wVGhyb3c+KCk7CiAgICAgQVNTRVJUKHJlZ1QwID09IHJldHVyblZhbHVlR1BSKTsKLSAg
ICBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgpLT50b3BF
bnRyeUZyYW1lKTsKKyAgICBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1
ZmZlcih2bSgpLnRvcEVudHJ5RnJhbWUpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV92YWx1ZS5vZmZzZXQoKSwgcmVnVDApOwogICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2Vw
dGlvbkNoZWNrKG9wZXJhdGlvblRocm93LCByZWdUMCk7Ci0gICAganVtcFRvRXhjZXB0aW9uSGFu
ZGxlcigqdm0oKSk7CisgICAganVtcFRvRXhjZXB0aW9uSGFuZGxlcih2bSgpKTsKIH0KIAogdGVt
cGxhdGU8dHlwZW5hbWUgT3A+CkBAIC02OTEsNyArNjkxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
Y2F0Y2goY29uc3QgSW5zdHJ1Y3RpbwogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wQ2F0Y2g+KCk7CiAKLSAgICByZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tRW50
cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCktPnRvcEVudHJ5RnJhbWUpOworICAgIHJlc3Rv
cmVDYWxsZWVTYXZlc0Zyb21FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0oKS50b3BFbnRy
eUZyYW1lKTsKIAogICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX3ZtKSwgcmVnVDMpOwogICAgIGxv
YWQ2NChBZGRyZXNzKHJlZ1QzLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hPZmZzZXQoKSksIGNhbGxG
cmFtZVJlZ2lzdGVyKTsKQEAgLTcwMSw3ICs3MDEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRj
aChjb25zdCBJbnN0cnVjdGlvCiAKICAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhv
cGVyYXRpb25DaGVja0lmRXhjZXB0aW9uSXNVbmNhdGNoYWJsZUFuZE5vdGlmeVByb2ZpbGVyKTsK
ICAgICBKdW1wIGlzQ2F0Y2hhYmxlRXhjZXB0aW9uID0gYnJhbmNoVGVzdDMyKFplcm8sIHJldHVy
blZhbHVlR1BSKTsKLSAgICBqdW1wVG9FeGNlcHRpb25IYW5kbGVyKCp2bSgpKTsKKyAgICBqdW1w
VG9FeGNlcHRpb25IYW5kbGVyKHZtKCkpOwogICAgIGlzQ2F0Y2hhYmxlRXhjZXB0aW9uLmxpbmso
dGhpcyk7CiAKICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV92bSksIHJlZ1QzKTsKQEAgLTgyNCw3
ICs4MjQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lcV9udWxsKGNvbnN0IEluc3RydWN0CiAgICAg
SnVtcCB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOwogCiAgICAgaXNNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0gICAgZW1pdExvYWRTdHJ1Y3R1cmUoKnZt
KCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOworICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJl
Z1QwLCByZWdUMiwgcmVnVDEpOwogICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBTdHJ1
Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDIpOwogICAgIGNvbXBhcmVQdHIoRXF1
YWwsIHJlZ1QwLCByZWdUMiwgcmVnVDApOwpAQCAtODU3LDcgKzg1Nyw3IEBAIHZvaWQgSklUOjpl
bWl0X29wX25lcV9udWxsKGNvbnN0IEluc3RydWMKICAgICBKdW1wIHdhc05vdE1hc3F1ZXJhZGVz
QXNVbmRlZmluZWQgPSBqdW1wKCk7CiAKICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGlu
ayh0aGlzKTsKLSAgICBlbWl0TG9hZFN0cnVjdHVyZSgqdm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdU
MSk7CisgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7CiAg
ICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1Qw
KTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zm
c2V0KCkpLCByZWdUMik7CiAgICAgY29tcGFyZVB0cihOb3RFcXVhbCwgcmVnVDAsIHJlZ1QyLCBy
ZWdUMCk7CkBAIC0xMDM0LDcgKzEwMzQsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbG9vcF9o
aW50KGNvbnN0IEluCiAgICAgaWYgKGNhbkJlT3B0aW1pemVkKCkpIHsKICAgICAgICAgbGlua0Fs
bFNsb3dDYXNlcyhpdGVyKTsKIAotICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNGcm9tRnJhbWVPclJl
Z2lzdGVyVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0oKS0+dG9wRW50cnlGcmFtZSk7
CisgICAgICAgIGNvcHlDYWxsZWVTYXZlc0Zyb21GcmFtZU9yUmVnaXN0ZXJUb0VudHJ5RnJhbWVD
YWxsZWVTYXZlc0J1ZmZlcih2bSgpLnRvcEVudHJ5RnJhbWUpOwogCiAgICAgICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uT3B0aW1pemUsIG1fYnl0ZWNvZGVPZmZzZXQpOwogICAgICAgICBKdW1w
IG5vT3B0aW1pemVkRW50cnkgPSBicmFuY2hUZXN0UHRyKFplcm8sIHJldHVyblZhbHVlR1BSKTsK
QEAgLTE0ODAsMjggKzE0ODAsMjggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBlKGNv
bnN0IElucwogCiB2b2lkIEpJVDo6ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fcHJvbG9ndWUo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBSRUxFQVNFX0FT
U0VSVCh2bSgpLT5zaGFkb3dDaGlja2VuKCkpOworICAgIFJFTEVBU0VfQVNTRVJUKHZtKCkuc2hh
ZG93Q2hpY2tlbigpKTsKICAgICB1cGRhdGVUb3BDYWxsRnJhbWUoKTsKICAgICBzdGF0aWNfYXNz
ZXJ0KG5vbkFyZ0dQUjAgIT0gcmVnVDAgJiYgbm9uQXJnR1BSMCAhPSByZWdUMiwgIndlIHdpbGwg
aGF2ZSBwcm9ibGVtcyBpZiB0aGlzIGlzIHRydWUuIik7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BMb2dTaGFkb3dDaGlja2VuUHJvbG9ndWU+KCk7CiAgICAg
R1BSUmVnIHNoYWRvd1BhY2tldFJlZyA9IHJlZ1QwOwogICAgIEdQUlJlZyBzY3JhdGNoMVJlZyA9
IG5vbkFyZ0dQUjA7IC8vIFRoaXMgbXVzdCBiZSBhIG5vbi1hcmd1bWVudCByZWdpc3Rlci4KICAg
ICBHUFJSZWcgc2NyYXRjaDJSZWcgPSByZWdUMjsKLSAgICBlbnN1cmVTaGFkb3dDaGlja2VuUGFj
a2V0KCp2bSgpLCBzaGFkb3dQYWNrZXRSZWcsIHNjcmF0Y2gxUmVnLCBzY3JhdGNoMlJlZyk7Cisg
ICAgZW5zdXJlU2hhZG93Q2hpY2tlblBhY2tldCh2bSgpLCBzaGFkb3dQYWNrZXRSZWcsIHNjcmF0
Y2gxUmVnLCBzY3JhdGNoMlJlZyk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX3Njb3BlLm9mZnNldCgpLCByZWdUMyk7CiAgICAgbG9nU2hhZG93Q2hpY2tlblByb2xvZ3Vl
UGFja2V0KHNoYWRvd1BhY2tldFJlZywgc2NyYXRjaDFSZWcsIHJlZ1QzKTsKIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBSRUxFQVNFX0FTU0VSVCh2bSgpLT5zaGFkb3dDaGlj
a2VuKCkpOworICAgIFJFTEVBU0VfQVNTRVJUKHZtKCkuc2hhZG93Q2hpY2tlbigpKTsKICAgICB1
cGRhdGVUb3BDYWxsRnJhbWUoKTsKICAgICBzdGF0aWNfYXNzZXJ0KG5vbkFyZ0dQUjAgIT0gcmVn
VDAgJiYgbm9uQXJnR1BSMCAhPSByZWdUMiwgIndlIHdpbGwgaGF2ZSBwcm9ibGVtcyBpZiB0aGlz
IGlzIHRydWUuIik7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BMb2dTaGFkb3dDaGlja2VuVGFpbD4oKTsKICAgICBHUFJSZWcgc2hhZG93UGFja2V0UmVnID0g
cmVnVDA7CiAgICAgR1BSUmVnIHNjcmF0Y2gxUmVnID0gbm9uQXJnR1BSMDsgLy8gVGhpcyBtdXN0
IGJlIGEgbm9uLWFyZ3VtZW50IHJlZ2lzdGVyLgogICAgIEdQUlJlZyBzY3JhdGNoMlJlZyA9IHJl
Z1QyOwotICAgIGVuc3VyZVNoYWRvd0NoaWNrZW5QYWNrZXQoKnZtKCksIHNoYWRvd1BhY2tldFJl
Zywgc2NyYXRjaDFSZWcsIHNjcmF0Y2gyUmVnKTsKKyAgICBlbnN1cmVTaGFkb3dDaGlja2VuUGFj
a2V0KHZtKCksIHNoYWRvd1BhY2tldFJlZywgc2NyYXRjaDFSZWcsIHNjcmF0Y2gyUmVnKTsKICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdGhpc1ZhbHVlLm9mZnNldCgpLCBy
ZWdUMik7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLm9mZnNl
dCgpLCByZWdUMyk7CiAgICAgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoc2hhZG93UGFja2V0
UmVnLCBKU1ZhbHVlUmVncyhyZWdUMiksIHJlZ1QzLCBtX2NvZGVCbG9jaywgQ2FsbFNpdGVJbmRl
eChtX2J5dGVjb2RlT2Zmc2V0KSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkzLDcgKzkzLDcg
QEAgdm9pZCAqIF9SZXR1cm5BZGRyZXNzKHZvaWQpOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoT1BD
T0RFX1NBTVBMSU5HKQotI2RlZmluZSBDVElfU0FNUExFUiB2bS0+aW50ZXJwcmV0ZXItPnNhbXBs
ZXIoKQorI2RlZmluZSBDVElfU0FNUExFUiB2bS5pbnRlcnByZXRlci0+c2FtcGxlcigpCiAjZWxz
ZQogI2RlZmluZSBDVElfU0FNUExFUiAwCiAjZW5kaWYKQEAgLTEwMiwzMyArMTAyLDM0IEBAIHZv
aWQgKiBfUmV0dXJuQWRkcmVzcyh2b2lkKTsKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25U
aHJvd1N0YWNrT3ZlcmZsb3dFcnJvcihFeGVjU3RhdGUqIGV4ZWMsIENvZGVCbG9jayogY29kZUJs
b2NrKQogewogICAgIC8vIFdlIHBhc3MgaW4gb3VyIG93biBjb2RlIGJsb2NrLCBiZWNhdXNlIHRo
ZSBjYWxsZnJhbWUgaGFzbid0IGJlZW4gcG9wdWxhdGVkLgotICAgIFZNKiB2bSA9IGNvZGVCbG9j
ay0+dm0oKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSgqdm0pOwotICAg
IGV4ZWMtPmNvbnZlcnRUb1N0YWNrT3ZlcmZsb3dGcmFtZSgqdm0sIGNvZGVCbG9jayk7CisgICAg
Vk0mIHZtID0gY29kZUJsb2NrLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKKyAgICBleGVjLT5jb252ZXJ0VG9TdGFja092ZXJmbG93RnJhbWUodm0sIGNv
ZGVCbG9jayk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAg
ICAgdGhyb3dTdGFja092ZXJmbG93RXJyb3IoZXhlYywgc2NvcGUpOwogfQogCi12b2lkIEpJVF9P
UEVSQVRJT04gdGhyb3dTdGFja092ZXJmbG93RXJyb3JGcm9tVGh1bmsoVk0qIHZtLCBFeGVjU3Rh
dGUqIGV4ZWMpCit2b2lkIEpJVF9PUEVSQVRJT04gdGhyb3dTdGFja092ZXJmbG93RXJyb3JGcm9t
VGh1bmsoVk0qIHZtUG9pbnRlciwgRXhlY1N0YXRlKiBleGVjKQogewotICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7CisgICAgVk0mIHZtID0gKnZtUG9pbnRlcjsKKyAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgdGhyb3dTdGFja092ZXJmbG93RXJyb3Io
ZXhlYywgc2NvcGUpOwogICAgIGdlbmVyaWNVbndpbmQodm0sIGV4ZWMpOwotICAgIEFTU0VSVCh2
bS0+dGFyZ2V0TWFjaGluZVBDRm9yVGhyb3cpOworICAgIEFTU0VSVCh2bS50YXJnZXRNYWNoaW5l
UENGb3JUaHJvdyk7CiB9CiAKIGludDMyX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25DYWxsQXJp
dHlDaGVjayhFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0g
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKKyAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAot
ICAgIGludDMyX3QgbWlzc2luZ0FyZ0NvdW50ID0gQ29tbW9uU2xvd1BhdGhzOjphcml0eUNoZWNr
Rm9yKGV4ZWMsICp2bSwgQ29kZUZvckNhbGwpOworICAgIGludDMyX3QgbWlzc2luZ0FyZ0NvdW50
ID0gQ29tbW9uU2xvd1BhdGhzOjphcml0eUNoZWNrRm9yKGV4ZWMsIHZtLCBDb2RlRm9yQ2FsbCk7
CiAgICAgaWYgKFVOTElLRUxZKG1pc3NpbmdBcmdDb3VudCA8IDApKSB7CiAgICAgICAgIENvZGVC
bG9jayogY29kZUJsb2NrID0gQ29tbW9uU2xvd1BhdGhzOjpjb2RlQmxvY2tGcm9tQ2FsbEZyYW1l
Q2FsbGVlKGV4ZWMsIENvZGVGb3JDYWxsKTsKLSAgICAgICAgZXhlYy0+Y29udmVydFRvU3RhY2tP
dmVyZmxvd0ZyYW1lKCp2bSwgY29kZUJsb2NrKTsKKyAgICAgICAgZXhlYy0+Y29udmVydFRvU3Rh
Y2tPdmVyZmxvd0ZyYW1lKHZtLCBjb2RlQmxvY2spOwogICAgICAgICBOYXRpdmVDYWxsRnJhbWVU
cmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLSAgICAgICAgdGhyb3dTdGFja092ZXJmbG93RXJyb3Io
dm0tPnRvcENhbGxGcmFtZSwgc2NvcGUpOworICAgICAgICB0aHJvd1N0YWNrT3ZlcmZsb3dFcnJv
cih2bS50b3BDYWxsRnJhbWUsIHNjb3BlKTsKICAgICB9CiAKICAgICByZXR1cm4gbWlzc2luZ0Fy
Z0NvdW50OwpAQCAtMTM2LDE1ICsxMzcsMTUgQEAgaW50MzJfdCBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbkNhbGxBcml0eQogCiBpbnQzMl90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29uc3RydWN0
QXJpdHlDaGVjayhFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7
Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKKyAgICBWTSYgdm0g
PSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
IAotICAgIGludDMyX3QgbWlzc2luZ0FyZ0NvdW50ID0gQ29tbW9uU2xvd1BhdGhzOjphcml0eUNo
ZWNrRm9yKGV4ZWMsICp2bSwgQ29kZUZvckNvbnN0cnVjdCk7CisgICAgaW50MzJfdCBtaXNzaW5n
QXJnQ291bnQgPSBDb21tb25TbG93UGF0aHM6OmFyaXR5Q2hlY2tGb3IoZXhlYywgdm0sIENvZGVG
b3JDb25zdHJ1Y3QpOwogICAgIGlmIChVTkxJS0VMWShtaXNzaW5nQXJnQ291bnQgPCAwKSkgewog
ICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IENvbW1vblNsb3dQYXRoczo6Y29kZUJsb2Nr
RnJvbUNhbGxGcmFtZUNhbGxlZShleGVjLCBDb2RlRm9yQ29uc3RydWN0KTsKLSAgICAgICAgZXhl
Yy0+Y29udmVydFRvU3RhY2tPdmVyZmxvd0ZyYW1lKCp2bSwgY29kZUJsb2NrKTsKKyAgICAgICAg
ZXhlYy0+Y29udmVydFRvU3RhY2tPdmVyZmxvd0ZyYW1lKHZtLCBjb2RlQmxvY2spOwogICAgICAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLSAgICAgICAgdGhyb3dT
dGFja092ZXJmbG93RXJyb3Iodm0tPnRvcENhbGxGcmFtZSwgc2NvcGUpOworICAgICAgICB0aHJv
d1N0YWNrT3ZlcmZsb3dFcnJvcih2bS50b3BDYWxsRnJhbWUsIHNjb3BlKTsKICAgICB9CiAKICAg
ICByZXR1cm4gbWlzc2luZ0FyZ0NvdW50OwpAQCAtMTUyLDcgKzE1Myw3IEBAIGludDMyX3QgSklU
X09QRVJBVElPTiBvcGVyYXRpb25Db25zdHJ1Y3QKIAogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJB
VElPTiBvcGVyYXRpb25UcnlHZXRCeUlkKEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlU3R1Yklu
Zm8qIHN0dWJJbmZvLCBFbmNvZGVkSlNWYWx1ZSBiYXNlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlk
KQogewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgSWRlbnRp
ZmllciBpZGVudCA9IElkZW50aWZpZXI6OmZyb21VaWQodm0sIHVpZCk7CiAgICAgc3R1YkluZm8t
PnRvb2tTbG93UGF0aCA9IHRydWU7CkBAIC0xNjcsNyArMTY4LDcgQEAgRW5jb2RlZEpTVmFsdWUg
SklUX09QRVJBVElPTiBvcGVyYXRpb25UcgogCiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvblRyeUdldEJ5SWRHZW5lcmljKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFs
dWUgYmFzZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKIHsKLSAgICBWTSogdm0gPSAmZXhlYy0+
dm0oKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIElkZW50aWZpZXIgaWRlbnQgPSBJZGVudGlmaWVyOjpm
cm9tVWlkKHZtLCB1aWQpOwogCkBAIC0xODAsOSArMTgxLDkgQEAgRW5jb2RlZEpTVmFsdWUgSklU
X09QRVJBVElPTiBvcGVyYXRpb25UcgogCiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZShFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZVN0dWJJ
bmZvKiBzdHViSW5mbywgRW5jb2RlZEpTVmFsdWUgYmFzZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVp
ZCkKIHsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgp
OwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwotICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwogICAgIElkZW50aWZpZXIgaWRlbnQgPSBJZGVudGlmaWVyOjpm
cm9tVWlkKHZtLCB1aWQpOwogCiAgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNv
ZGUoYmFzZSk7CkBAIC0xOTEsNyArMTkyLDcgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElP
TiBvcGVyYXRpb25UcgogICAgIGJhc2VWYWx1ZS5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgaWRlbnQs
IHNsb3QpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkp
OwogCi0gICAgaWYgKHN0dWJJbmZvLT5jb25zaWRlckNhY2hpbmcoKnZtLCBleGVjLT5jb2RlQmxv
Y2soKSwgYmFzZVZhbHVlLnN0cnVjdHVyZU9yTnVsbCgpKSAmJiAhc2xvdC5pc1RhaW50ZWRCeU9w
YXF1ZU9iamVjdCgpICYmIChzbG90LmlzQ2FjaGVhYmxlVmFsdWUoKSB8fCBzbG90LmlzQ2FjaGVh
YmxlR2V0dGVyKCkgfHwgc2xvdC5pc1Vuc2V0KCkpKQorICAgIGlmIChzdHViSW5mby0+Y29uc2lk
ZXJDYWNoaW5nKHZtLCBleGVjLT5jb2RlQmxvY2soKSwgYmFzZVZhbHVlLnN0cnVjdHVyZU9yTnVs
bCgpKSAmJiAhc2xvdC5pc1RhaW50ZWRCeU9wYXF1ZU9iamVjdCgpICYmIChzbG90LmlzQ2FjaGVh
YmxlVmFsdWUoKSB8fCBzbG90LmlzQ2FjaGVhYmxlR2V0dGVyKCkgfHwgc2xvdC5pc1Vuc2V0KCkp
KQogICAgICAgICByZXBhdGNoR2V0QnlJRChleGVjLCBiYXNlVmFsdWUsIGlkZW50LCBzbG90LCAq
c3R1YkluZm8sIEdldEJ5SURLaW5kOjpUcnkpOwogCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShzbG90LmdldFB1cmVSZXN1bHQoKSk7CkBAIC0yMDAsOSArMjAxLDkgQEAgRW5jb2RlZEpTVmFs
dWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25UcgogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElP
TiBvcGVyYXRpb25HZXRCeUlkRGlyZWN0KEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlU3R1Yklu
Zm8qIHN0dWJJbmZvLCBFbmNvZGVkSlNWYWx1ZSBiYXNlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlk
KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0s
IGV4ZWMpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBJ
ZGVudGlmaWVyIGlkZW50ID0gSWRlbnRpZmllcjo6ZnJvbVVpZCgmdm0sIHVpZCk7CisgICAgSWRl
bnRpZmllciBpZGVudCA9IElkZW50aWZpZXI6OmZyb21VaWQodm0sIHVpZCk7CiAgICAgc3R1Yklu
Zm8tPnRvb2tTbG93UGF0aCA9IHRydWU7CiAKICAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFs
dWU6OmRlY29kZShiYXNlKTsKQEAgLTIxNyw5ICsyMTgsOSBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbkdlCiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbkdldEJ5SWREaXJlY3RHZW5lcmljKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUg
YmFzZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgp
OwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgSWRlbnRpZmllciBpZGVudCA9IElkZW50aWZpZXI6
OmZyb21VaWQoJnZtLCB1aWQpOworICAgIElkZW50aWZpZXIgaWRlbnQgPSBJZGVudGlmaWVyOjpm
cm9tVWlkKHZtLCB1aWQpOwogCiAgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNv
ZGUoYmFzZSk7CiAgICAgUHJvcGVydHlTbG90IHNsb3QoYmFzZVZhbHVlLCBQcm9wZXJ0eVNsb3Q6
OkludGVybmFsTWV0aG9kVHlwZTo6R2V0T3duUHJvcGVydHkpOwpAQCAtMjMzLDkgKzIzNCw5IEBA
IEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2UKIEVuY29kZWRKU1ZhbHVl
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXplKEV4ZWNTdGF0ZSog
ZXhlYywgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBFbmNvZGVkSlNWYWx1ZSBiYXNlLCBV
bmlxdWVkU3RyaW5nSW1wbCogdWlkKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxG
cmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKLSAgICBJZGVudGlmaWVyIGlkZW50ID0gSWRlbnRpZmllcjo6ZnJvbVVp
ZCgmdm0sIHVpZCk7CisgICAgSWRlbnRpZmllciBpZGVudCA9IElkZW50aWZpZXI6OmZyb21VaWQo
dm0sIHVpZCk7CiAKICAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShiYXNl
KTsKICAgICBQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFsdWUsIFByb3BlcnR5U2xvdDo6SW50ZXJu
YWxNZXRob2RUeXBlOjpHZXRPd25Qcm9wZXJ0eSk7CkBAIC0yNTMsNyArMjU0LDcgQEAgRW5jb2Rl
ZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZQogewogICAgIFN1cGVyU2FtcGxlclNj
b3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKICAgICAKLSAgICBWTSogdm0gPSAmZXhlYy0+
dm0oKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIAogICAgIHN0dWJJbmZvLT50b29rU2xvd1BhdGggPSB0
cnVlOwpAQCAtMjYzLDcgKzI2NCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uR2UKICAgICBJZGVudGlmaWVyIGlkZW50ID0gSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwg
dWlkKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGJhc2VWYWx1ZS5nZXQoZXhlYywgaWRlbnQsIHNs
b3QpOwogCi0gICAgTE9HX0lDKChJQ0V2ZW50OjpPcGVyYXRpb25HZXRCeUlkLCBiYXNlVmFsdWUu
Y2xhc3NJbmZvT3JOdWxsKCp2bSksIGlkZW50LCBiYXNlVmFsdWUgPT0gc2xvdC5zbG90QmFzZSgp
KSk7CisgICAgTE9HX0lDKChJQ0V2ZW50OjpPcGVyYXRpb25HZXRCeUlkLCBiYXNlVmFsdWUuY2xh
c3NJbmZvT3JOdWxsKHZtKSwgaWRlbnQsIGJhc2VWYWx1ZSA9PSBzbG90LnNsb3RCYXNlKCkpKTsK
IAogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KQEAgLTI3Miw3ICsyNzMs
NyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdlCiB7CiAgICAgU3Vw
ZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwogICAgIAotICAgIFZNKiB2
bSA9ICZleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgCiAgICAgSlNWYWx1ZSBiYXNlVmFs
dWUgPSBKU1ZhbHVlOjpkZWNvZGUoYmFzZSk7CkBAIC0yODAsNyArMjgxLDcgQEAgRW5jb2RlZEpT
VmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZQogICAgIElkZW50aWZpZXIgaWRlbnQgPSBJ
ZGVudGlmaWVyOjpmcm9tVWlkKHZtLCB1aWQpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0gYmFzZVZh
bHVlLmdldChleGVjLCBpZGVudCwgc2xvdCk7CiAgICAgCi0gICAgTE9HX0lDKChJQ0V2ZW50OjpP
cGVyYXRpb25HZXRCeUlkR2VuZXJpYywgYmFzZVZhbHVlLmNsYXNzSW5mb09yTnVsbCgqdm0pLCBp
ZGVudCwgYmFzZVZhbHVlID09IHNsb3Quc2xvdEJhc2UoKSkpOworICAgIExPR19JQygoSUNFdmVu
dDo6T3BlcmF0aW9uR2V0QnlJZEdlbmVyaWMsIGJhc2VWYWx1ZS5jbGFzc0luZm9Pck51bGwodm0p
LCBpZGVudCwgYmFzZVZhbHVlID09IHNsb3Quc2xvdEJhc2UoKSkpOwogICAgIAogICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KQEAgLTI4OSw3ICsyOTAsNyBAQCBFbmNvZGVk
SlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdlCiB7CiAgICAgU3VwZXJTYW1wbGVyU2Nv
cGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwogICAgIAotICAgIFZNKiB2bSA9ICZleGVjLT52
bSgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcih2bSwgZXhlYyk7CiAgICAgSWRlbnRpZmllciBpZGVudCA9IElkZW50aWZpZXI6OmZy
b21VaWQodm0sIHVpZCk7CiAKQEAgLTI5Nyw5ICsyOTgsOSBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbkdlCiAKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGJhc2VW
YWx1ZS5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgaWRlbnQsIFsmXSAoYm9vbCBmb3VuZCwgUHJvcGVy
dHlTbG90JiBzbG90KSAtPiBKU1ZhbHVlIHsKICAgICAgICAgCi0gICAgICAgIExPR19JQygoSUNF
dmVudDo6T3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCBiYXNlVmFsdWUuY2xhc3NJbmZvT3JOdWxs
KCp2bSksIGlkZW50LCBiYXNlVmFsdWUgPT0gc2xvdC5zbG90QmFzZSgpKSk7CisgICAgICAgIExP
R19JQygoSUNFdmVudDo6T3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCBiYXNlVmFsdWUuY2xhc3NJ
bmZvT3JOdWxsKHZtKSwgaWRlbnQsIGJhc2VWYWx1ZSA9PSBzbG90LnNsb3RCYXNlKCkpKTsKICAg
ICAgICAgCi0gICAgICAgIGlmIChzdHViSW5mby0+Y29uc2lkZXJDYWNoaW5nKCp2bSwgZXhlYy0+
Y29kZUJsb2NrKCksIGJhc2VWYWx1ZS5zdHJ1Y3R1cmVPck51bGwoKSkpCisgICAgICAgIGlmIChz
dHViSW5mby0+Y29uc2lkZXJDYWNoaW5nKHZtLCBleGVjLT5jb2RlQmxvY2soKSwgYmFzZVZhbHVl
LnN0cnVjdHVyZU9yTnVsbCgpKSkKICAgICAgICAgICAgIHJlcGF0Y2hHZXRCeUlEKGV4ZWMsIGJh
c2VWYWx1ZSwgaWRlbnQsIHNsb3QsICpzdHViSW5mbywgR2V0QnlJREtpbmQ6Ok5vcm1hbCk7CiAg
ICAgICAgIHJldHVybiBmb3VuZCA/IHNsb3QuZ2V0VmFsdWUoZXhlYywgaWRlbnQpIDoganNVbmRl
ZmluZWQoKTsKICAgICB9KSk7CkBAIC0zMDksNyArMzEwLDcgQEAgRW5jb2RlZEpTVmFsdWUgSklU
X09QRVJBVElPTiBvcGVyYXRpb25HZQogewogICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2Ft
cGxlclNjb3BlKGZhbHNlKTsKIAotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhl
Yyk7CiAgICAgSWRlbnRpZmllciBpZGVudCA9IElkZW50aWZpZXI6OmZyb21VaWQodm0sIHVpZCk7
CiAKQEAgLTMyNiw3ICszMjcsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbkdlCiB7CiAgICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2Up
OwogCi0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsK
ICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICBJZGVudGlm
aWVyIGlkZW50ID0gSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgdWlkKTsKIApAQCAtMzQxLDcgKzM0
Miw3IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2UKIHsKICAgICBT
dXBlclNhbXBsZXJTY29wZSBzdXBlclNhbXBsZXJTY29wZShmYWxzZSk7CiAgICAgCi0gICAgVk0q
IHZtID0gJmV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICBJZGVudGlmaWVyIGlkZW50ID0g
SWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgdWlkKTsKIApAQCAtMzUwLDkgKzM1MSw5IEBAIEVuY29k
ZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2UKIAogICAgIFByb3BlcnR5U2xvdCBz
bG90KHRoaXNWYWx1ZSwgUHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6OkdldCk7CiAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShiYXNlVmFsdWUuZ2V0UHJvcGVydHlTbG90KGV4ZWMs
IGlkZW50LCBzbG90LCBbJl0gKGJvb2wgZm91bmQsIFByb3BlcnR5U2xvdCYgc2xvdCkgLT4gSlNW
YWx1ZSB7Ci0gICAgICAgIExPR19JQygoSUNFdmVudDo6T3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlz
T3B0aW1pemUsIGJhc2VWYWx1ZS5jbGFzc0luZm9Pck51bGwoKnZtKSwgaWRlbnQsIGJhc2VWYWx1
ZSA9PSBzbG90LnNsb3RCYXNlKCkpKTsKKyAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpPcGVyYXRp
b25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZSwgYmFzZVZhbHVlLmNsYXNzSW5mb09yTnVsbCh2bSks
IGlkZW50LCBiYXNlVmFsdWUgPT0gc2xvdC5zbG90QmFzZSgpKSk7CiAgICAgICAgIAotICAgICAg
ICBpZiAoc3R1YkluZm8tPmNvbnNpZGVyQ2FjaGluZygqdm0sIGV4ZWMtPmNvZGVCbG9jaygpLCBi
YXNlVmFsdWUuc3RydWN0dXJlT3JOdWxsKCkpKQorICAgICAgICBpZiAoc3R1YkluZm8tPmNvbnNp
ZGVyQ2FjaGluZyh2bSwgZXhlYy0+Y29kZUJsb2NrKCksIGJhc2VWYWx1ZS5zdHJ1Y3R1cmVPck51
bGwoKSkpCiAgICAgICAgICAgICByZXBhdGNoR2V0QnlJRChleGVjLCBiYXNlVmFsdWUsIGlkZW50
LCBzbG90LCAqc3R1YkluZm8sIEdldEJ5SURLaW5kOjpXaXRoVGhpcyk7CiAgICAgICAgIHJldHVy
biBmb3VuZCA/IHNsb3QuZ2V0VmFsdWUoZXhlYywgaWRlbnQpIDoganNVbmRlZmluZWQoKTsKICAg
ICB9KSk7CkBAIC0zNjMsMTIgKzM2NCwxMiBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvbkluCiAgICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFs
c2UpOwogCiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFj
ZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2
bSwgZXhlYyk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAg
ICAgc3R1YkluZm8tPnRvb2tTbG93UGF0aCA9IHRydWU7CiAKLSAgICBJZGVudGlmaWVyIGlkZW50
ID0gSWRlbnRpZmllcjo6ZnJvbVVpZCgmdm0sIHVpZCk7CisgICAgSWRlbnRpZmllciBpZGVudCA9
IElkZW50aWZpZXI6OmZyb21VaWQodm0sIHVpZCk7CiAKICAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9
IEpTVmFsdWU6OmRlY29kZShiYXNlKTsKICAgICBpZiAoIWJhc2VWYWx1ZS5pc09iamVjdCgpKSB7
CkBAIC0zODksMTAgKzM5MCwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbkluCiAgICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwog
CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhl
Yyk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgSWRl
bnRpZmllciBpZGVudCA9IElkZW50aWZpZXI6OmZyb21VaWQoJnZtLCB1aWQpOworICAgIElkZW50
aWZpZXIgaWRlbnQgPSBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCB1aWQpOwogCiAgICAgSlNWYWx1
ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoYmFzZSk7CiAgICAgaWYgKCFiYXNlVmFsdWUu
aXNPYmplY3QoKSkgewpAQCAtNDEzLDEwICs0MTQsMTAgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25JbgogICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNj
b3BlKGZhbHNlKTsKIAogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIodm0sIGV4ZWMpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKIAotICAgIElkZW50aWZpZXIgaWRlbnQgPSBJZGVudGlmaWVyOjpmcm9tVWlkKCZ2bSwgdWlk
KTsKKyAgICBJZGVudGlmaWVyIGlkZW50ID0gSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgdWlkKTsK
IAogICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGJhc2UpOwogICAgIGlm
ICghYmFzZVZhbHVlLmlzT2JqZWN0KCkpIHsKQEAgLTQzOSw3ICs0NDAsNyBAQCBFbmNvZGVkSlNW
YWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkluCiB7CiAgICAgU3VwZXJTYW1wbGVyU2NvcGUg
c3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwogICAgIAotICAgIFZNKiB2bSA9ICZleGVjLT52bSgp
OworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcih2bSwgZXhlYyk7CiAKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihD
b21tb25TbG93UGF0aHM6Om9wSW5CeVZhbChleGVjLCBiYXNlLCBKU1ZhbHVlOjpkZWNvZGUoa2V5
KSkpKTsKQEAgLTQ0OSw3ICs0NTAsNyBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0
QnlJZFN0cmljCiB7CiAgICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFs
c2UpOwogICAgIAotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAg
CiAgICAgc3R1YkluZm8tPnRvb2tTbG93UGF0aCA9IHRydWU7CkBAIC00NTksMTQgKzQ2MCwxNCBA
QCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZFN0cmljCiAgICAgUHV0UHJvcGVy
dHlTbG90IHNsb3QoYmFzZVZhbHVlLCB0cnVlLCBleGVjLT5jb2RlQmxvY2soKS0+cHV0QnlJZENv
bnRleHQoKSk7CiAgICAgYmFzZVZhbHVlLnB1dElubGluZShleGVjLCBpZGVudCwgSlNWYWx1ZTo6
ZGVjb2RlKGVuY29kZWRWYWx1ZSksIHNsb3QpOwogICAgIAotICAgIExPR19JQygoSUNFdmVudDo6
T3BlcmF0aW9uUHV0QnlJZFN0cmljdCwgYmFzZVZhbHVlLmNsYXNzSW5mb09yTnVsbCgqdm0pLCBp
ZGVudCwgc2xvdC5iYXNlKCkgPT0gYmFzZVZhbHVlKSk7CisgICAgTE9HX0lDKChJQ0V2ZW50OjpP
cGVyYXRpb25QdXRCeUlkU3RyaWN0LCBiYXNlVmFsdWUuY2xhc3NJbmZvT3JOdWxsKHZtKSwgaWRl
bnQsIHNsb3QuYmFzZSgpID09IGJhc2VWYWx1ZSkpOwogfQogCiB2b2lkIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdChFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZVN0dWJJ
bmZvKiBzdHViSW5mbywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkQmFzZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKIHsKICAgICBTdXBlclNhbXBs
ZXJTY29wZSBzdXBlclNhbXBsZXJTY29wZShmYWxzZSk7CiAgICAgCi0gICAgVk0qIHZtID0gJmV4
ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVU
cmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICAKICAgICBzdHViSW5mby0+dG9va1Nsb3dQYXRo
ID0gdHJ1ZTsKQEAgLTQ3Niw3ICs0NzcsNyBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
UHV0QnlJZE5vblN0CiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3QoYmFzZVZhbHVlLCBmYWxzZSwg
ZXhlYy0+Y29kZUJsb2NrKCktPnB1dEJ5SWRDb250ZXh0KCkpOwogICAgIGJhc2VWYWx1ZS5wdXRJ
bmxpbmUoZXhlYywgaWRlbnQsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCBzbG90KTsK
IAotICAgIExPR19JQygoSUNFdmVudDo6T3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdCwgYmFzZVZh
bHVlLmNsYXNzSW5mb09yTnVsbCgqdm0pLCBpZGVudCwgc2xvdC5iYXNlKCkgPT0gYmFzZVZhbHVl
KSk7CisgICAgTE9HX0lDKChJQ0V2ZW50OjpPcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0LCBiYXNl
VmFsdWUuY2xhc3NJbmZvT3JOdWxsKHZtKSwgaWRlbnQsIHNsb3QuYmFzZSgpID09IGJhc2VWYWx1
ZSkpOwogfQogCiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmlj
dChFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZFZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgVW5pcXVlZFN0
cmluZ0ltcGwqIHVpZCkKQEAgLTQ4NCwxMiArNDg1LDEyIEBAIHZvaWQgSklUX09QRVJBVElPTiBv
cGVyYXRpb25QdXRCeUlkRGlyZWMKICAgICBTdXBlclNhbXBsZXJTY29wZSBzdXBlclNhbXBsZXJT
Y29wZShmYWxzZSk7CiAgICAgCiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgCiAgICAgc3R1YkluZm8tPnRvb2tTbG93UGF0aCA9
IHRydWU7CiAgICAgCiAgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5j
b2RlZEJhc2UpOwotICAgIElkZW50aWZpZXIgaWRlbnQgPSBJZGVudGlmaWVyOjpmcm9tVWlkKCZ2
bSwgdWlkKTsKKyAgICBJZGVudGlmaWVyIGlkZW50ID0gSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwg
dWlkKTsKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFsdWUsIHRydWUsIGV4ZWMtPmNv
ZGVCbG9jaygpLT5wdXRCeUlkQ29udGV4dCgpKTsKICAgICBDb21tb25TbG93UGF0aHM6OnB1dERp
cmVjdFdpdGhSZWlmeSh2bSwgZXhlYywgYXNPYmplY3QoYmFzZVZhbHVlKSwgaWRlbnQsIEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCBzbG90KTsKIApAQCAtNTAxLDEyICs1MDIsMTIgQEAg
dm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWREaXJlYwogICAgIFN1cGVyU2FtcGxl
clNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKICAgICAKICAgICBWTSYgdm0gPSBleGVj
LT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICAKICAgICBzdHVi
SW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsKICAgICAKICAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQmFzZSk7Ci0gICAgSWRlbnRpZmllciBpZGVudCA9IElk
ZW50aWZpZXI6OmZyb21VaWQoJnZtLCB1aWQpOworICAgIElkZW50aWZpZXIgaWRlbnQgPSBJZGVu
dGlmaWVyOjpmcm9tVWlkKHZtLCB1aWQpOwogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KGJhc2VW
YWx1ZSwgZmFsc2UsIGV4ZWMtPmNvZGVCbG9jaygpLT5wdXRCeUlkQ29udGV4dCgpKTsKICAgICBD
b21tb25TbG93UGF0aHM6OnB1dERpcmVjdFdpdGhSZWlmeSh2bSwgZXhlYywgYXNPYmplY3QoYmFz
ZVZhbHVlKSwgaWRlbnQsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCBzbG90KTsKIApA
QCAtNTE3LDkgKzUxOCw5IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkU3Ry
aWMKIHsKICAgICBTdXBlclNhbXBsZXJTY29wZSBzdXBlclNhbXBsZXJTY29wZShmYWxzZSk7CiAg
ICAgCi0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsK
ICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLSAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSgqdm0pOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIElkZW50aWZpZXIgaWRlbnQgPSBJZGVudGlmaWVyOjpm
cm9tVWlkKHZtLCB1aWQpOwogICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSA9IHN0YXRpY19jYXN0
PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLT5hY2Nlc3NUeXBlKTsKQEAgLTUyOSwxNyArNTMwLDE3IEBA
IHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkU3RyaWMKICAgICBDb2RlQmxvY2sq
IGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOwogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90
KGJhc2VWYWx1ZSwgdHJ1ZSwgY29kZUJsb2NrLT5wdXRCeUlkQ29udGV4dCgpKTsKIAotICAgIFN0
cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZVZhbHVlLmlzQ2VsbCgpID8gYmFzZVZhbHVlLmFzQ2Vs
bCgpLT5zdHJ1Y3R1cmUoKnZtKSA6IG51bGxwdHI7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUg
PSBiYXNlVmFsdWUuaXNDZWxsKCkgPyBiYXNlVmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSh2bSkg
OiBudWxscHRyOwogICAgIGJhc2VWYWx1ZS5wdXRJbmxpbmUoZXhlYywgaWRlbnQsIHZhbHVlLCBz
bG90KTsKIAotICAgIExPR19JQygoSUNFdmVudDo6T3BlcmF0aW9uUHV0QnlJZFN0cmljdE9wdGlt
aXplLCBiYXNlVmFsdWUuY2xhc3NJbmZvT3JOdWxsKCp2bSksIGlkZW50LCBzbG90LmJhc2UoKSA9
PSBiYXNlVmFsdWUpKTsKKyAgICBMT0dfSUMoKElDRXZlbnQ6Ok9wZXJhdGlvblB1dEJ5SWRTdHJp
Y3RPcHRpbWl6ZSwgYmFzZVZhbHVlLmNsYXNzSW5mb09yTnVsbCh2bSksIGlkZW50LCBzbG90LmJh
c2UoKSA9PSBiYXNlVmFsdWUpKTsKIAogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZv
aWQoKSk7CiAKICAgICBpZiAoYWNjZXNzVHlwZSAhPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihz
dHViSW5mby0+YWNjZXNzVHlwZSkpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBpZiAoc3R1
YkluZm8tPmNvbnNpZGVyQ2FjaGluZygqdm0sIGNvZGVCbG9jaywgc3RydWN0dXJlKSkKKyAgICBp
ZiAoc3R1YkluZm8tPmNvbnNpZGVyQ2FjaGluZyh2bSwgY29kZUJsb2NrLCBzdHJ1Y3R1cmUpKQog
ICAgICAgICByZXBhdGNoUHV0QnlJRChleGVjLCBiYXNlVmFsdWUsIHN0cnVjdHVyZSwgaWRlbnQs
IHNsb3QsICpzdHViSW5mbywgTm90RGlyZWN0KTsKIH0KIApAQCAtNTQ3LDkgKzU0OCw5IEBAIHZv
aWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkTm9uU3QKIHsKICAgICBTdXBlclNhbXBs
ZXJTY29wZSBzdXBlclNhbXBsZXJTY29wZShmYWxzZSk7CiAgICAgCi0gICAgVk0qIHZtID0gJmV4
ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVU
cmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSgqdm0pOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAog
ICAgIElkZW50aWZpZXIgaWRlbnQgPSBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCB1aWQpOwogICAg
IEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSA9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZv
LT5hY2Nlc3NUeXBlKTsKQEAgLTU1OSwxNyArNTYwLDE3IEBAIHZvaWQgSklUX09QRVJBVElPTiBv
cGVyYXRpb25QdXRCeUlkTm9uU3QKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNv
ZGVCbG9jaygpOwogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KGJhc2VWYWx1ZSwgZmFsc2UsIGNv
ZGVCbG9jay0+cHV0QnlJZENvbnRleHQoKSk7CiAKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9
IGJhc2VWYWx1ZS5pc0NlbGwoKSA/IGJhc2VWYWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlKCp2bSkg
OiBudWxscHRyOyAgICAKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2VWYWx1ZS5pc0Nl
bGwoKSA/IGJhc2VWYWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlKHZtKSA6IG51bGxwdHI7CiAgICAg
YmFzZVZhbHVlLnB1dElubGluZShleGVjLCBpZGVudCwgdmFsdWUsIHNsb3QpOwogCi0gICAgTE9H
X0lDKChJQ0V2ZW50OjpPcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0aW1pemUsIGJhc2VWYWx1
ZS5jbGFzc0luZm9Pck51bGwoKnZtKSwgaWRlbnQsIHNsb3QuYmFzZSgpID09IGJhc2VWYWx1ZSkp
OworICAgIExPR19JQygoSUNFdmVudDo6T3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXpl
LCBiYXNlVmFsdWUuY2xhc3NJbmZvT3JOdWxsKHZtKSwgaWRlbnQsIHNsb3QuYmFzZSgpID09IGJh
c2VWYWx1ZSkpOwogCiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKIAog
ICAgIGlmIChhY2Nlc3NUeXBlICE9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLT5h
Y2Nlc3NUeXBlKSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIGlmIChzdHViSW5mby0+Y29u
c2lkZXJDYWNoaW5nKCp2bSwgY29kZUJsb2NrLCBzdHJ1Y3R1cmUpKQorICAgIGlmIChzdHViSW5m
by0+Y29uc2lkZXJDYWNoaW5nKHZtLCBjb2RlQmxvY2ssIHN0cnVjdHVyZSkpCiAgICAgICAgIHJl
cGF0Y2hQdXRCeUlEKGV4ZWMsIGJhc2VWYWx1ZSwgc3RydWN0dXJlLCBpZGVudCwgc2xvdCwgKnN0
dWJJbmZvLCBOb3REaXJlY3QpOwogfQogCkBAIC01NzgsMTAgKzU3OSwxMCBAQCB2b2lkIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVjCiAgICAgU3VwZXJTYW1wbGVyU2NvcGUgc3Vw
ZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwogICAgIAogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0g
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKICAgICAKLSAgICBJZGVudGlmaWVyIGlkZW50ID0gSWRlbnRpZmll
cjo6ZnJvbVVpZCgmdm0sIHVpZCk7CisgICAgSWRlbnRpZmllciBpZGVudCA9IElkZW50aWZpZXI6
OmZyb21VaWQodm0sIHVpZCk7CiAgICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlID0gc3RhdGljX2Nh
c3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8tPmFjY2Vzc1R5cGUpOwogCiAgICAgSlNWYWx1ZSB2YWx1
ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwpAQCAtNjA3LDEwICs2MDgsMTAgQEAg
dm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWREaXJlYwogICAgIFN1cGVyU2FtcGxl
clNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKICAgICAKICAgICBWTSYgdm0gPSBleGVj
LT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgCi0gICAgSWRlbnRpZmllciBpZGVudCA9
IElkZW50aWZpZXI6OmZyb21VaWQoJnZtLCB1aWQpOworICAgIElkZW50aWZpZXIgaWRlbnQgPSBJ
ZGVudGlmaWVyOjpmcm9tVWlkKHZtLCB1aWQpOwogICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSA9
IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLT5hY2Nlc3NUeXBlKTsKIAogICAgIEpT
VmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKQEAgLTc2OSw3ICs3
NzAsNyBAQCBzdGF0aWMgT3B0aW1pemF0aW9uUmVzdWx0IHRyeVB1dEJ5VmFsT3B0CiAgICAgICAg
ICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKICAgICAg
ICAgICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrKTsK
ICAgICAgICAgICAgICAgICBieVZhbEluZm8tPmFycmF5UHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQ
cmVkaWN0aW9uKGxvY2tlciwgY29kZUJsb2NrLCBzdHJ1Y3R1cmUpOwotICAgICAgICAgICAgICAg
IEpJVDo6Y29tcGlsZVB1dEJ5VmFsKGxvY2tlciwgJnZtLCBjb2RlQmxvY2ssIGJ5VmFsSW5mbywg
cmV0dXJuQWRkcmVzcywgYXJyYXlNb2RlKTsKKyAgICAgICAgICAgICAgICBKSVQ6OmNvbXBpbGVQ
dXRCeVZhbChsb2NrZXIsIHZtLCBjb2RlQmxvY2ssIGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywg
YXJyYXlNb2RlKTsKICAgICAgICAgICAgICAgICBvcHRpbWl6YXRpb25SZXN1bHQgPSBPcHRpbWl6
YXRpb25SZXN1bHQ6Ok9wdGltaXplZDsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtNzg3
LDcgKzc4OCw3IEBAIHN0YXRpYyBPcHRpbWl6YXRpb25SZXN1bHQgdHJ5UHV0QnlWYWxPcHQKICAg
ICAgICAgICAgIEFTU0VSVCghYnlWYWxJbmZvLT5zdHViUm91dGluZSk7CiAgICAgICAgICAgICBp
ZiAoYnlWYWxJbmZvLT5zZWVuKSB7CiAgICAgICAgICAgICAgICAgaWYgKGJ5VmFsSW5mby0+Y2Fj
aGVkSWQgPT0gcHJvcGVydHlOYW1lKSB7Ci0gICAgICAgICAgICAgICAgICAgIEpJVDo6Y29tcGls
ZVB1dEJ5VmFsV2l0aENhY2hlZElkPE9wUHV0QnlWYWw+KCZ2bSwgZXhlYy0+Y29kZUJsb2NrKCks
IGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywgTm90RGlyZWN0LCBwcm9wZXJ0eU5hbWUpOworICAg
ICAgICAgICAgICAgICAgICBKSVQ6OmNvbXBpbGVQdXRCeVZhbFdpdGhDYWNoZWRJZDxPcFB1dEJ5
VmFsPih2bSwgZXhlYy0+Y29kZUJsb2NrKCksIGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywgTm90
RGlyZWN0LCBwcm9wZXJ0eU5hbWUpOwogICAgICAgICAgICAgICAgICAgICBvcHRpbWl6YXRpb25S
ZXN1bHQgPSBPcHRpbWl6YXRpb25SZXN1bHQ6Ok9wdGltaXplZDsKICAgICAgICAgICAgICAgICB9
IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAvLyBTZWVtIGxpa2UgYSBnZW5lcmljIHByb3Bl
cnR5IGFjY2VzcyBzaXRlLgpAQCAtODIxLDcgKzgyMiw3IEBAIHN0YXRpYyBPcHRpbWl6YXRpb25S
ZXN1bHQgdHJ5UHV0QnlWYWxPcHQKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZh
bE9wdGltaXplKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2VWYWx1
ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFN1YnNjcmlwdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFZhbHVlLCBCeVZhbEluZm8qIGJ5VmFsSW5mbykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgp
OwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6
OmRlY29kZShlbmNvZGVkQmFzZVZhbHVlKTsKQEAgLTg1OCw3ICs4NTksNyBAQCBzdGF0aWMgT3B0
aW1pemF0aW9uUmVzdWx0IHRyeURpcmVjdFB1dEJ5CiAgICAgICAgICAgICAgICAgQ29uY3VycmVu
dEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jayk7CiAgICAgICAgICAgICAgICAgYnlW
YWxJbmZvLT5hcnJheVByb2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIsIGNv
ZGVCbG9jaywgc3RydWN0dXJlKTsKIAotICAgICAgICAgICAgICAgIEpJVDo6Y29tcGlsZURpcmVj
dFB1dEJ5VmFsKGxvY2tlciwgJnZtLCBjb2RlQmxvY2ssIGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVz
cywgYXJyYXlNb2RlKTsKKyAgICAgICAgICAgICAgICBKSVQ6OmNvbXBpbGVEaXJlY3RQdXRCeVZh
bChsb2NrZXIsIHZtLCBjb2RlQmxvY2ssIGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywgYXJyYXlN
b2RlKTsKICAgICAgICAgICAgICAgICBvcHRpbWl6YXRpb25SZXN1bHQgPSBPcHRpbWl6YXRpb25S
ZXN1bHQ6Ok9wdGltaXplZDsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtODc0LDcgKzg3
NSw3IEBAIHN0YXRpYyBPcHRpbWl6YXRpb25SZXN1bHQgdHJ5RGlyZWN0UHV0QnkKICAgICAgICAg
ICAgIEFTU0VSVCghYnlWYWxJbmZvLT5zdHViUm91dGluZSk7CiAgICAgICAgICAgICBpZiAoYnlW
YWxJbmZvLT5zZWVuKSB7CiAgICAgICAgICAgICAgICAgaWYgKGJ5VmFsSW5mby0+Y2FjaGVkSWQg
PT0gcHJvcGVydHlOYW1lKSB7Ci0gICAgICAgICAgICAgICAgICAgIEpJVDo6Y29tcGlsZVB1dEJ5
VmFsV2l0aENhY2hlZElkPE9wUHV0QnlWYWxEaXJlY3Q+KCZ2bSwgZXhlYy0+Y29kZUJsb2NrKCks
IGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywgRGlyZWN0LCBwcm9wZXJ0eU5hbWUpOworICAgICAg
ICAgICAgICAgICAgICBKSVQ6OmNvbXBpbGVQdXRCeVZhbFdpdGhDYWNoZWRJZDxPcFB1dEJ5VmFs
RGlyZWN0Pih2bSwgZXhlYy0+Y29kZUJsb2NrKCksIGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywg
RGlyZWN0LCBwcm9wZXJ0eU5hbWUpOwogICAgICAgICAgICAgICAgICAgICBvcHRpbWl6YXRpb25S
ZXN1bHQgPSBPcHRpbWl6YXRpb25SZXN1bHQ6Ok9wdGltaXplZDsKICAgICAgICAgICAgICAgICB9
IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAvLyBTZWVtIGxpa2UgYSBnZW5lcmljIHByb3Bl
cnR5IGFjY2VzcyBzaXRlLgpAQCAtOTA4LDcgKzkwOSw3IEBAIHN0YXRpYyBPcHRpbWl6YXRpb25S
ZXN1bHQgdHJ5RGlyZWN0UHV0QnkKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25EaXJlY3RQ
dXRCeVZhbE9wdGltaXplKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJh
c2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFN1YnNjcmlwdCwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZFZhbHVlLCBCeVZhbEluZm8qIGJ5VmFsSW5mbykKIHsKICAgICBWTSYgdm0gPSBleGVj
LT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkQmFzZVZhbHVlKTsKQEAgLTkzMCw3ICs5MzEsNyBAQCB2b2lk
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRGlyZWN0UHV0QnlWCiB2b2lkIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uUHV0QnlWYWxHZW5lcmljKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZEJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFN1YnNjcmlwdCwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBCeVZhbEluZm8qIGJ5VmFsSW5mbykKIHsKICAgICBWTSYg
dm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBl
eGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICAK
ICAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQmFzZVZhbHVl
KTsKICAgICBKU1ZhbHVlIHN1YnNjcmlwdCA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkU3Vic2Ny
aXB0KTsKQEAgLTk0Myw3ICs5NDQsNyBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0
QnlWYWxHZW5lCiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxHZW5l
cmljKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2VWYWx1ZSwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFN1YnNjcmlwdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVl
LCBCeVZhbEluZm8qIGJ5VmFsSW5mbykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICAKICAgICBKU1ZhbHVlIGJhc2VWYWx1
ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQmFzZVZhbHVlKTsKICAgICBKU1ZhbHVlIHN1YnNj
cmlwdCA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkU3Vic2NyaXB0KTsKQEAgLTk1NCw4ICs5NTUs
OCBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRGlyZWN0UHV0QnlWCiAKIEVuY29kZWRK
U1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ2FsbEV2YWwoRXhlY1N0YXRlKiBleGVjLCBF
eGVjU3RhdGUqIGV4ZWNDYWxsZWUpCiB7Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKKyAgICBWTSYgdm0gPSBleGVj
LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAg
IGV4ZWNDYWxsZWUtPnNldENvZGVCbG9jaygwKTsKICAgICAKQEAgLTk3MSwyNCArOTcyLDI0IEBA
IEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ2EKIHN0YXRpYyBTbG93UGF0
aFJldHVyblR5cGUgaGFuZGxlSG9zdENhbGwoRXhlY1N0YXRlKiBleGVjQ2FsbGVlLCBKU1ZhbHVl
IGNhbGxlZSwgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8pCiB7CiAgICAgRXhlY1N0YXRlKiBl
eGVjID0gZXhlY0NhbGxlZS0+Y2FsbGVyRnJhbWUoKTsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0o
KTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSgqdm0pOworICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwogCiAgICAgZXhlY0NhbGxlZS0+c2V0Q29kZUJsb2NrKDApOwogCiAgICAgaWYgKGNhbGxMaW5r
SW5mby0+c3BlY2lhbGl6YXRpb25LaW5kKCkgPT0gQ29kZUZvckNhbGwpIHsKICAgICAgICAgQ2Fs
bERhdGEgY2FsbERhdGE7Ci0gICAgICAgIENhbGxUeXBlIGNhbGxUeXBlID0gZ2V0Q2FsbERhdGEo
KnZtLCBjYWxsZWUsIGNhbGxEYXRhKTsKKyAgICAgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBnZXRD
YWxsRGF0YSh2bSwgY2FsbGVlLCBjYWxsRGF0YSk7CiAgICAgCiAgICAgICAgIEFTU0VSVChjYWxs
VHlwZSAhPSBDYWxsVHlwZTo6SlMpOwogICAgIAogICAgICAgICBpZiAoY2FsbFR5cGUgPT0gQ2Fs
bFR5cGU6Okhvc3QpIHsKICAgICAgICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
dm0sIGV4ZWNDYWxsZWUpOwogICAgICAgICAgICAgZXhlY0NhbGxlZS0+c2V0Q2FsbGVlKGFzT2Jq
ZWN0KGNhbGxlZSkpOwotICAgICAgICAgICAgdm0tPmhvc3RDYWxsUmV0dXJuVmFsdWUgPSBKU1Zh
bHVlOjpkZWNvZGUoY2FsbERhdGEubmF0aXZlLmZ1bmN0aW9uKGV4ZWNDYWxsZWUpKTsKKyAgICAg
ICAgICAgIHZtLmhvc3RDYWxsUmV0dXJuVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoY2FsbERhdGEu
bmF0aXZlLmZ1bmN0aW9uKGV4ZWNDYWxsZWUpKTsKICAgICAgICAgICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0
KAotICAgICAgICAgICAgICAgICAgICB2bS0+Z2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21D
YWxsU2xvd1BhdGhHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxKU0VudHJ5UHRyVGFnPigpLmV4ZWN1
dGFibGVBZGRyZXNzKCksCisgICAgICAgICAgICAgICAgICAgIHZtLmdldENUSVN0dWIodGhyb3dF
eGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8SlNFbnRyeVB0
clRhZz4oKS5leGVjdXRhYmxlQWRkcmVzcygpLAogICAgICAgICAgICAgICAgICAgICByZWludGVy
cHJldF9jYXN0PHZvaWQqPihLZWVwVGhlRnJhbWUpKTsKICAgICAgICAgICAgIH0KIApAQCAtMTAw
MCwyNCArMTAwMSwyNCBAQCBzdGF0aWMgU2xvd1BhdGhSZXR1cm5UeXBlIGhhbmRsZUhvc3RDYWxs
CiAgICAgICAgIEFTU0VSVChjYWxsVHlwZSA9PSBDYWxsVHlwZTo6Tm9uZSk7CiAgICAgICAgIHRo
cm93RXhjZXB0aW9uKGV4ZWMsIHNjb3BlLCBjcmVhdGVOb3RBRnVuY3Rpb25FcnJvcihleGVjLCBj
YWxsZWUpKTsKICAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdCgKLSAgICAgICAgICAgIHZtLT5n
ZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcikucmV0YWdn
ZWRDb2RlPEpTRW50cnlQdHJUYWc+KCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwKKyAgICAgICAgICAg
IHZtLmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5y
ZXRhZ2dlZENvZGU8SlNFbnRyeVB0clRhZz4oKS5leGVjdXRhYmxlQWRkcmVzcygpLAogICAgICAg
ICAgICAgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oS2VlcFRoZUZyYW1lKSk7CiAgICAgfQogCiAg
ICAgQVNTRVJUKGNhbGxMaW5rSW5mby0+c3BlY2lhbGl6YXRpb25LaW5kKCkgPT0gQ29kZUZvckNv
bnN0cnVjdCk7CiAgICAgCiAgICAgQ29uc3RydWN0RGF0YSBjb25zdHJ1Y3REYXRhOwotICAgIENv
bnN0cnVjdFR5cGUgY29uc3RydWN0VHlwZSA9IGdldENvbnN0cnVjdERhdGEoKnZtLCBjYWxsZWUs
IGNvbnN0cnVjdERhdGEpOworICAgIENvbnN0cnVjdFR5cGUgY29uc3RydWN0VHlwZSA9IGdldENv
bnN0cnVjdERhdGEodm0sIGNhbGxlZSwgY29uc3RydWN0RGF0YSk7CiAgICAgCiAgICAgQVNTRVJU
KGNvbnN0cnVjdFR5cGUgIT0gQ29uc3RydWN0VHlwZTo6SlMpOwogICAgIAogICAgIGlmIChjb25z
dHJ1Y3RUeXBlID09IENvbnN0cnVjdFR5cGU6Okhvc3QpIHsKICAgICAgICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlY0NhbGxlZSk7CiAgICAgICAgIGV4ZWNDYWxsZWUtPnNl
dENhbGxlZShhc09iamVjdChjYWxsZWUpKTsKLSAgICAgICAgdm0tPmhvc3RDYWxsUmV0dXJuVmFs
dWUgPSBKU1ZhbHVlOjpkZWNvZGUoY29uc3RydWN0RGF0YS5uYXRpdmUuZnVuY3Rpb24oZXhlY0Nh
bGxlZSkpOworICAgICAgICB2bS5ob3N0Q2FsbFJldHVyblZhbHVlID0gSlNWYWx1ZTo6ZGVjb2Rl
KGNvbnN0cnVjdERhdGEubmF0aXZlLmZ1bmN0aW9uKGV4ZWNDYWxsZWUpKTsKICAgICAgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgewogICAgICAgICAgICAgcmV0dXJuIGVuY29k
ZVJlc3VsdCgKLSAgICAgICAgICAgICAgICB2bS0+Z2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZy
b21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxKU0VudHJ5UHRyVGFnPigpLmV4
ZWN1dGFibGVBZGRyZXNzKCksCisgICAgICAgICAgICAgICAgdm0uZ2V0Q1RJU3R1Yih0aHJvd0V4
Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxKU0VudHJ5UHRy
VGFnPigpLmV4ZWN1dGFibGVBZGRyZXNzKCksCiAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRf
Y2FzdDx2b2lkKj4oS2VlcFRoZUZyYW1lKSk7CiAgICAgICAgIH0KIApAQCAtMTAyNywxNSArMTAy
OCwxNSBAQCBzdGF0aWMgU2xvd1BhdGhSZXR1cm5UeXBlIGhhbmRsZUhvc3RDYWxsCiAgICAgQVNT
RVJUKGNvbnN0cnVjdFR5cGUgPT0gQ29uc3RydWN0VHlwZTo6Tm9uZSk7CiAgICAgdGhyb3dFeGNl
cHRpb24oZXhlYywgc2NvcGUsIGNyZWF0ZU5vdEFDb25zdHJ1Y3RvckVycm9yKGV4ZWMsIGNhbGxl
ZSkpOwogICAgIHJldHVybiBlbmNvZGVSZXN1bHQoCi0gICAgICAgIHZtLT5nZXRDVElTdHViKHRo
cm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPEpTRW50
cnlQdHJUYWc+KCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwKKyAgICAgICAgdm0uZ2V0Q1RJU3R1Yih0
aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxKU0Vu
dHJ5UHRyVGFnPigpLmV4ZWN1dGFibGVBZGRyZXNzKCksCiAgICAgICAgIHJlaW50ZXJwcmV0X2Nh
c3Q8dm9pZCo+KEtlZXBUaGVGcmFtZSkpOwogfQogCiBTbG93UGF0aFJldHVyblR5cGUgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25MaW5rQ2FsbChFeGVjU3RhdGUqIGV4ZWNDYWxsZWUsIENhbGxMaW5r
SW5mbyogY2FsbExpbmtJbmZvKQogewogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGV4ZWNDYWxsZWUt
PmNhbGxlckZyYW1lKCk7Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSgqdm0pOworICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAg
ICBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQgPSBjYWxsTGlua0luZm8tPnNwZWNpYWxpemF0
aW9uS2luZCgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwpA
QCAtMTA0NSw4ICsxMDQ2LDggQEAgU2xvd1BhdGhSZXR1cm5UeXBlIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aQogICAgIEpTVmFsdWUgY2FsbGVlQXNWYWx1ZSA9IGV4ZWNDYWxsZWUtPmd1YXJhbnRlZWRK
U1ZhbHVlQ2FsbGVlKCk7CiAgICAgSlNDZWxsKiBjYWxsZWVBc0Z1bmN0aW9uQ2VsbCA9IGdldEpT
RnVuY3Rpb24oY2FsbGVlQXNWYWx1ZSk7CiAgICAgaWYgKCFjYWxsZWVBc0Z1bmN0aW9uQ2VsbCkg
ewotICAgICAgICBpZiAoYXV0byogaW50ZXJuYWxGdW5jdGlvbiA9IGpzRHluYW1pY0Nhc3Q8SW50
ZXJuYWxGdW5jdGlvbio+KCp2bSwgY2FsbGVlQXNWYWx1ZSkpIHsKLSAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBjb2RlUHRyID0gdm0tPmdldENUSUludGVy
bmFsRnVuY3Rpb25UcmFtcG9saW5lRm9yKGtpbmQpOworICAgICAgICBpZiAoYXV0byogaW50ZXJu
YWxGdW5jdGlvbiA9IGpzRHluYW1pY0Nhc3Q8SW50ZXJuYWxGdW5jdGlvbio+KHZtLCBjYWxsZWVB
c1ZhbHVlKSkgeworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJU
YWc+IGNvZGVQdHIgPSB2bS5nZXRDVElJbnRlcm5hbEZ1bmN0aW9uVHJhbXBvbGluZUZvcihraW5k
KTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCEhY29kZVB0cik7CiAKICAgICAgICAgICAg
IGlmICghY2FsbExpbmtJbmZvLT5zZWVuT25jZSgpKQpAQCAtMTA2NywxNCArMTA2OCwxNCBAQCBT
bG93UGF0aFJldHVyblR5cGUgSklUX09QRVJBVElPTiBvcGVyYXRpCiAgICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGNvZGVQdHI7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxv
Y2sgPSBudWxscHRyOwogICAgIGlmIChleGVjdXRhYmxlLT5pc0hvc3RGdW5jdGlvbigpKSB7Ci0g
ICAgICAgIGNvZGVQdHIgPSBqc1RvV2FzbUlDQ29kZVB0cigqdm0sIGtpbmQsIGNhbGxlZSk7Cisg
ICAgICAgIGNvZGVQdHIgPSBqc1RvV2FzbUlDQ29kZVB0cih2bSwga2luZCwgY2FsbGVlKTsKICAg
ICAgICAgaWYgKCFjb2RlUHRyKQogICAgICAgICAgICAgY29kZVB0ciA9IGV4ZWN1dGFibGUtPmVu
dHJ5cG9pbnRGb3Ioa2luZCwgTXVzdENoZWNrQXJpdHkpOwogICAgIH0gZWxzZSB7CiAgICAgICAg
IEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25FeGVjdXRhYmxlID0gc3RhdGljX2Nhc3Q8RnVu
Y3Rpb25FeGVjdXRhYmxlKj4oZXhlY3V0YWJsZSk7CiAKICAgICAgICAgYXV0byBoYW5kbGVUaHJv
d0V4Y2VwdGlvbiA9IFsmXSAoKSB7Ci0gICAgICAgICAgICB2b2lkKiB0aHJvd1RhcmdldCA9IHZt
LT5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcikucmV0
YWdnZWRDb2RlPEpTRW50cnlQdHJUYWc+KCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKKyAgICAgICAg
ICAgIHZvaWQqIHRocm93VGFyZ2V0ID0gdm0uZ2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21D
YWxsU2xvd1BhdGhHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxKU0VudHJ5UHRyVGFnPigpLmV4ZWN1
dGFibGVBZGRyZXNzKCk7CiAgICAgICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KHRocm93VGFy
Z2V0LCByZWludGVycHJldF9jYXN0PHZvaWQqPihLZWVwVGhlRnJhbWUpKTsKICAgICAgICAgfTsK
IApAQCAtMTA4NCw3ICsxMDg1LDcgQEAgU2xvd1BhdGhSZXR1cm5UeXBlIEpJVF9PUEVSQVRJT04g
b3BlcmF0aQogICAgICAgICB9CiAKICAgICAgICAgQ29kZUJsb2NrKiogY29kZUJsb2NrU2xvdCA9
IGV4ZWNDYWxsZWUtPmFkZHJlc3NPZkNvZGVCbG9jaygpOwotICAgICAgICBFeGNlcHRpb24qIGVy
cm9yID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5wcmVwYXJlRm9yRXhlY3V0aW9uPEZ1bmN0aW9uRXhl
Y3V0YWJsZT4oKnZtLCBjYWxsZWUsIHNjb3BlLCBraW5kLCAqY29kZUJsb2NrU2xvdCk7CisgICAg
ICAgIEV4Y2VwdGlvbiogZXJyb3IgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPnByZXBhcmVGb3JFeGVj
dXRpb248RnVuY3Rpb25FeGVjdXRhYmxlPih2bSwgY2FsbGVlLCBzY29wZSwga2luZCwgKmNvZGVC
bG9ja1Nsb3QpOwogICAgICAgICBFWENFUFRJT05fQVNTRVJUKHRocm93U2NvcGUuZXhjZXB0aW9u
KCkgPT0gZXJyb3IpOwogICAgICAgICBpZiAoVU5MSUtFTFkoZXJyb3IpKQogICAgICAgICAgICAg
cmV0dXJuIGhhbmRsZVRocm93RXhjZXB0aW9uKCk7CkBAIC0xMTA3LDggKzExMDgsOCBAQCBTbG93
UGF0aFJldHVyblR5cGUgSklUX09QRVJBVElPTiBvcGVyYXRpCiAKIHZvaWQgSklUX09QRVJBVElP
TiBvcGVyYXRpb25MaW5rRGlyZWN0Q2FsbChFeGVjU3RhdGUqIGV4ZWMsIENhbGxMaW5rSW5mbyog
Y2FsbExpbmtJbmZvLCBKU0Z1bmN0aW9uKiBjYWxsZWUpCiB7Ci0gICAgVk0qIHZtID0gJmV4ZWMt
PnZtKCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSgqdm0pOwor
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CiAKICAgICBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQgPSBjYWxs
TGlua0luZm8tPnNwZWNpYWxpemF0aW9uS2luZCgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIodm0sIGV4ZWMpOwpAQCAtMTE0MSw3ICsxMTQyLDcgQEAgdm9pZCBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvbkxpbmtEaXJlY3RDYQogCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGlzQ2Fs
bChraW5kKSB8fCBmdW5jdGlvbkV4ZWN1dGFibGUtPmNvbnN0cnVjdEFiaWxpdHkoKSAhPSBDb25z
dHJ1Y3RBYmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3QpOwogICAgICAgICAKLSAgICAgICAgRXhjZXB0
aW9uKiBlcnJvciA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+cHJlcGFyZUZvckV4ZWN1dGlvbjxGdW5j
dGlvbkV4ZWN1dGFibGU+KCp2bSwgY2FsbGVlLCBzY29wZSwga2luZCwgY29kZUJsb2NrKTsKKyAg
ICAgICAgRXhjZXB0aW9uKiBlcnJvciA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+cHJlcGFyZUZvckV4
ZWN1dGlvbjxGdW5jdGlvbkV4ZWN1dGFibGU+KHZtLCBjYWxsZWUsIHNjb3BlLCBraW5kLCBjb2Rl
QmxvY2spOwogICAgICAgICBFWENFUFRJT05fQVNTRVJUX1VOVVNFRCh0aHJvd1Njb3BlLCB0aHJv
d1Njb3BlLmV4Y2VwdGlvbigpID09IGVycm9yKTsKICAgICAgICAgaWYgKFVOTElLRUxZKGVycm9y
KSkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTExNTksOCArMTE2MCw4IEBAIGlubGluZSBTbG93
UGF0aFJldHVyblR5cGUgdmlydHVhbEZvcldpdGgKICAgICBFeGVjU3RhdGUqIGV4ZWNDYWxsZWUs
IENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvLCBKU0NlbGwqJiBjYWxsZWVBc0Z1bmN0aW9uQ2Vs
bCkKIHsKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBleGVjQ2FsbGVlLT5jYWxsZXJGcmFtZSgpOwot
ICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUoKnZtKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgQ29kZVNwZWNpYWxpemF0
aW9uS2luZCBraW5kID0gY2FsbExpbmtJbmZvLT5zcGVjaWFsaXphdGlvbktpbmQoKTsKICAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKQEAgLTExNjgsOCArMTE2OSw4
IEBAIGlubGluZSBTbG93UGF0aFJldHVyblR5cGUgdmlydHVhbEZvcldpdGgKICAgICBKU1ZhbHVl
IGNhbGxlZUFzVmFsdWUgPSBleGVjQ2FsbGVlLT5ndWFyYW50ZWVkSlNWYWx1ZUNhbGxlZSgpOwog
ICAgIGNhbGxlZUFzRnVuY3Rpb25DZWxsID0gZ2V0SlNGdW5jdGlvbihjYWxsZWVBc1ZhbHVlKTsK
ICAgICBpZiAoVU5MSUtFTFkoIWNhbGxlZUFzRnVuY3Rpb25DZWxsKSkgewotICAgICAgICBpZiAo
anNEeW5hbWljQ2FzdDxJbnRlcm5hbEZ1bmN0aW9uKj4oKnZtLCBjYWxsZWVBc1ZhbHVlKSkgewot
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGNvZGVQdHIg
PSB2bS0+Z2V0Q1RJSW50ZXJuYWxGdW5jdGlvblRyYW1wb2xpbmVGb3Ioa2luZCk7CisgICAgICAg
IGlmIChqc0R5bmFtaWNDYXN0PEludGVybmFsRnVuY3Rpb24qPih2bSwgY2FsbGVlQXNWYWx1ZSkp
IHsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBjb2Rl
UHRyID0gdm0uZ2V0Q1RJSW50ZXJuYWxGdW5jdGlvblRyYW1wb2xpbmVGb3Ioa2luZCk7CiAgICAg
ICAgICAgICBBU1NFUlQoISFjb2RlUHRyKTsKICAgICAgICAgICAgIHJldHVybiBlbmNvZGVSZXN1
bHQoY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpLCByZWludGVycHJldF9jYXN0PHZvaWQqPihj
YWxsTGlua0luZm8tPmNhbGxNb2RlKCkgPT0gQ2FsbE1vZGU6OlRhaWwgPyBSZXVzZVRoZUZyYW1l
IDogS2VlcFRoZUZyYW1lKSk7CiAgICAgICAgIH0KQEAgLTExODUsMTYgKzExODYsMTYgQEAgaW5s
aW5lIFNsb3dQYXRoUmV0dXJuVHlwZSB2aXJ0dWFsRm9yV2l0aAogICAgICAgICBpZiAoIWlzQ2Fs
bChraW5kKSAmJiBmdW5jdGlvbkV4ZWN1dGFibGUtPmNvbnN0cnVjdEFiaWxpdHkoKSA9PSBDb25z
dHJ1Y3RBYmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3QpIHsKICAgICAgICAgICAgIHRocm93RXhjZXB0
aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEFDb25zdHJ1Y3RvckVycm9yKGV4ZWMsIGZ1
bmN0aW9uKSk7CiAgICAgICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KAotICAgICAgICAgICAg
ICAgIHZtLT5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRv
cikucmV0YWdnZWRDb2RlPEpTRW50cnlQdHJUYWc+KCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwKKyAg
ICAgICAgICAgICAgICB2bS5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0
aEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPEpTRW50cnlQdHJUYWc+KCkuZXhlY3V0YWJsZUFkZHJl
c3MoKSwKICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PHZvaWQqPihLZWVwVGhlRnJh
bWUpKTsKICAgICAgICAgfQogCiAgICAgICAgIENvZGVCbG9jayoqIGNvZGVCbG9ja1Nsb3QgPSBl
eGVjQ2FsbGVlLT5hZGRyZXNzT2ZDb2RlQmxvY2soKTsKLSAgICAgICAgRXhjZXB0aW9uKiBlcnJv
ciA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+cHJlcGFyZUZvckV4ZWN1dGlvbjxGdW5jdGlvbkV4ZWN1
dGFibGU+KCp2bSwgZnVuY3Rpb24sIHNjb3BlLCBraW5kLCAqY29kZUJsb2NrU2xvdCk7CisgICAg
ICAgIEV4Y2VwdGlvbiogZXJyb3IgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPnByZXBhcmVGb3JFeGVj
dXRpb248RnVuY3Rpb25FeGVjdXRhYmxlPih2bSwgZnVuY3Rpb24sIHNjb3BlLCBraW5kLCAqY29k
ZUJsb2NrU2xvdCk7CiAgICAgICAgIEVYQ0VQVElPTl9BU1NFUlQodGhyb3dTY29wZS5leGNlcHRp
b24oKSA9PSBlcnJvcik7CiAgICAgICAgIGlmIChVTkxJS0VMWShlcnJvcikpIHsKICAgICAgICAg
ICAgIHJldHVybiBlbmNvZGVSZXN1bHQoCi0gICAgICAgICAgICAgICAgdm0tPmdldENUSVN0dWIo
dGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8SlNF
bnRyeVB0clRhZz4oKS5leGVjdXRhYmxlQWRkcmVzcygpLAorICAgICAgICAgICAgICAgIHZtLmdl
dENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5yZXRhZ2dl
ZENvZGU8SlNFbnRyeVB0clRhZz4oKS5leGVjdXRhYmxlQWRkcmVzcygpLAogICAgICAgICAgICAg
ICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEtlZXBUaGVGcmFtZSkpOwogICAgICAgICB9CiAg
ICAgfQpAQCAtMTIyMiw3ICsxMjIzLDcgQEAgU2xvd1BhdGhSZXR1cm5UeXBlIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aQogCiBzaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlTGVzcyhF
eGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRPcDIpCiB7Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsK
ICAgICAKICAgICByZXR1cm4ganNMZXNzPHRydWU+KGV4ZWMsIEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkT3AxKSwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDIpKTsKQEAgLTEyMzAsNyArMTIzMSw3
IEBAIHNpemVfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVMZXMKIAogc2l6ZV90IEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZUxlc3NFcShFeGVjU3RhdGUqIGV4ZWMsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpCiB7Ci0gICAg
Vk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKIAogICAgIHJldHVybiBqc0xlc3NF
cTx0cnVlPihleGVjLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMSksIEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkT3AyKSk7CkBAIC0xMjM4LDcgKzEyMzksNyBAQCBzaXplX3QgSklUX09QRVJBVElP
TiBvcGVyYXRpb25Db21wYXJlTGVzCiAKIHNpemVfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNv
bXBhcmVHcmVhdGVyKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMikKIHsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsK
KyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIodm0sIGV4ZWMpOwogCiAgICAgcmV0dXJuIGpzTGVzczxmYWxzZT4oZXhlYywgSlNWYWx1ZTo6
ZGVjb2RlKGVuY29kZWRPcDIpLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMSkpOwpAQCAtMTI0
Niw3ICsxMjQ3LDcgQEAgc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZUdyZQog
CiBzaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlR3JlYXRlckVxKEV4ZWNTdGF0
ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZE9wMikKIHsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBleGVjLT52
bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogCiAgICAg
cmV0dXJuIGpzTGVzc0VxPGZhbHNlPihleGVjLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMiks
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AxKSk7CkBAIC0xMjU0LDcgKzEyNTUsNyBAQCBzaXpl
X3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlR3JlCiAKIHNpemVfdCBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvbkNvbXBhcmVFcShFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpCiB7Ci0gICAgVk0qIHZtID0gJmV4
ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVU
cmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKIAogICAgIHJldHVybiBKU1ZhbHVlOjplcXVhbFNsb3dD
YXNlSW5saW5lKGV4ZWMsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AxKSwgSlNWYWx1ZTo6ZGVj
b2RlKGVuY29kZWRPcDIpKTsKQEAgLTEyNjYsNyArMTI2Nyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uQ28KIHNpemVfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNv
bXBhcmVTdHJpbmdFcShFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogbGVmdCwgSlNDZWxsKiByaWdo
dCkKICNlbmRpZgogewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAK
ICAgICBib29sIHJlc3VsdCA9IGFzU3RyaW5nKGxlZnQpLT5lcXVhbChleGVjLCBhc1N0cmluZyhy
aWdodCkpOwpAQCAtMTI3OSw3ICsxMjgwLDcgQEAgc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uQ29tcGFyZVN0cgogCiBzaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlU3Ry
aWN0RXEoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkT3AyKQogewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwg
ZXhlYyk7CiAKICAgICBKU1ZhbHVlIHNyYzEgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMSk7
CkBAIC0xMjkwLDE0ICsxMjkxLDE0IEBAIHNpemVfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNv
bXBhcmVTdHIKIAogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdBcnJh
eVdpdGhQcm9maWxlKEV4ZWNTdGF0ZSogZXhlYywgQXJyYXlBbGxvY2F0aW9uUHJvZmlsZSogcHJv
ZmlsZSwgY29uc3QgSlNWYWx1ZSogdmFsdWVzLCBpbnQgc2l6ZSkKIHsKLSAgICBWTSogdm0gPSAm
ZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY29u
c3RydWN0QXJyYXlOZWdhdGl2ZUluZGV4ZWQoZXhlYywgcHJvZmlsZSwgdmFsdWVzLCBzaXplKSk7
CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3QXJyYXlXaXRo
U2l6ZUFuZFByb2ZpbGUoRXhlY1N0YXRlKiBleGVjLCBBcnJheUFsbG9jYXRpb25Qcm9maWxlKiBw
cm9maWxlLCBFbmNvZGVkSlNWYWx1ZSBzaXplKQogewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgp
OworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcih2bSwgZXhlYyk7CiAgICAgSlNWYWx1ZSBzaXplVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUo
c2l6ZSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjb25zdHJ1Y3RBcnJheVdpdGhTaXpl
UXVpcmsoZXhlYywgcHJvZmlsZSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBzaXplVmFs
dWUpKTsKQEAgLTEzMTAsNyArMTMxMSw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBvcGVyYXRp
b25OZXdGdW5jdGkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIEFTU0VSVChmdW5j
dGlvbkV4ZWN1dGFibGUtPmluaGVyaXRzPEZ1bmN0aW9uRXhlY3V0YWJsZT4odm0pKTsKLSAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgaWYgKGlzSW52YWxpZGF0ZWQpCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoRnVuY3Rpb25UeXBlOjpjcmVhdGVXaXRoSW52YWxp
ZGF0ZWRSZWFsbG9jYXRpb25XYXRjaHBvaW50KHZtLCBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1
dGFibGUqPihmdW5jdGlvbkV4ZWN1dGFibGUpLCBzY29wZSkpOwogICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoRnVuY3Rpb25UeXBlOjpjcmVhdGUodm0sIHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhl
Y3V0YWJsZSo+KGZ1bmN0aW9uRXhlY3V0YWJsZSksIHNjb3BlKSk7CkBAIC0xMzYwLDcgKzEzNjEs
NyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5lCiAgICAgCiB2b2lk
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uU2V0RnVuY3Rpb25OYW1lKEV4ZWNTdGF0ZSogZXhlYywg
SlNDZWxsKiBmdW5jQ2VsbCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE5hbWUpCiB7Ci0gICAgVk0q
IHZtID0gJmV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKIAogICAgIEpTRnVuY3Rpb24qIGZ1bmMg
PSBqc0Nhc3Q8SlNGdW5jdGlvbio+KGZ1bmNDZWxsKTsKQEAgLTEzNzAsNyArMTM3MSw3IEBAIHZv
aWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25TZXRGdW5jdGlvbk4KIAogSlNDZWxsKiBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbk5ld09iamVjdChFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3Ry
dWN0dXJlKQogewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAKICAg
ICByZXR1cm4gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYywgc3RydWN0dXJlKTsKQEAgLTEzODAs
NyArMTM4MSw3IEBAIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdSZWdleHAKIHsK
ICAgICBTdXBlclNhbXBsZXJTY29wZSBzdXBlclNhbXBsZXJTY29wZShmYWxzZSk7CiAgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwg
ZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAKICAg
ICBSZWdFeHAqIHJlZ2V4cCA9IHN0YXRpY19jYXN0PFJlZ0V4cCo+KHJlZ2V4cFB0cik7CiAgICAg
QVNTRVJUKHJlZ2V4cC0+aXNWYWxpZCgpKTsKQEAgLTEzOTQsNyArMTM5NSw3IEBAIEpTQ2VsbCog
SklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdSZWdleHAKIFVudXNlZFB0ciBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvbkhhbmRsZVRyYXBzKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsK
KyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICBBU1NFUlQo
dm0ubmVlZFRyYXBIYW5kbGluZygpKTsKICAgICB2bS5oYW5kbGVUcmFwcyhleGVjKTsKICAgICBy
ZXR1cm4gbnVsbHB0cjsKQEAgLTE0MDMsNyArMTQwNCw3IEBAIFVudXNlZFB0ciBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvbkhhbmRsZVQKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25EZWJ1ZyhF
eGVjU3RhdGUqIGV4ZWMsIGludDMyX3QgZGVidWdIb29rVHlwZSkKIHsKICAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsK
KyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKIAogICAgIHZtLmlu
dGVycHJldGVyLT5kZWJ1ZyhleGVjLCBzdGF0aWNfY2FzdDxEZWJ1Z0hvb2tUeXBlPihkZWJ1Z0hv
b2tUeXBlKSk7CiB9CkBAIC0xNDE4LDcgKzE0MTksNyBAQCBzdGF0aWMgdm9pZCB1cGRhdGVBbGxQ
cmVkaWN0aW9uc0FuZE9wdGltCiBTbG93UGF0aFJldHVyblR5cGUgSklUX09QRVJBVElPTiBvcGVy
YXRpb25PcHRpbWl6ZShFeGVjU3RhdGUqIGV4ZWMsIHVpbnQzMl90IGJ5dGVjb2RlSW5kZXgpCiB7
CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhl
Yyk7CiAKICAgICAvLyBEZWZlciBHQyBmb3IgYSB3aGlsZSBzbyB0aGF0IGl0IGRvZXNuJ3QgcnVu
IGJldHdlZW4gd2hlbiB3ZSBlbnRlciBpbnRvIHRoaXMKICAgICAvLyBzbG93IHBhdGggYW5kIHdo
ZW4gd2UgZmlndXJlIG91dCB0aGUgc3RhdGUgb2Ygb3VyIGNvZGUgYmxvY2suIFRoaXMgcHJldmVu
dHMKQEAgLTE2NjMsNyArMTY2NCw3IEBAIFNsb3dQYXRoUmV0dXJuVHlwZSBKSVRfT1BFUkFUSU9O
IG9wZXJhdGkKIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNo
KEV4ZWNTdGF0ZSogZXhlYywgdWludDMyX3QgYnl0ZWNvZGVJbmRleCkKIHsKICAgICBWTSYgdm0g
PSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVj
KTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKIAogICAgIENv
ZGVCbG9jayogb3B0aW1pemVkUmVwbGFjZW1lbnQgPSBleGVjLT5jb2RlQmxvY2soKS0+cmVwbGFj
ZW1lbnQoKTsKICAgICBpZiAoVU5MSUtFTFkoIW9wdGltaXplZFJlcGxhY2VtZW50KSkKQEAgLTE2
ODQsNyArMTY4NSw3IEBAIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVHJ5T1NSRW50ZXIK
IGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNoQW5kVmFsdWVQ
cm9maWxlKEV4ZWNTdGF0ZSogZXhlYywgdWludDMyX3QgYnl0ZWNvZGVJbmRleCkKIHsKICAgICBW
TSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZt
LCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKIAog
ICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7CiAgICAgQ29kZUJs
b2NrKiBvcHRpbWl6ZWRSZXBsYWNlbWVudCA9IGNvZGVCbG9jay0+cmVwbGFjZW1lbnQoKTsKQEAg
LTE3MTYsNyArMTcxNyw3IEBAIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVHJ5T1NSRW50
ZXIKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUluZGV4KEV4ZWNTdGF0ZSogZXhl
YywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEFycmF5VmFsdWUsIGludDMyX3QgaW5kZXgsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKIAogICAgIEpTVmFsdWUgYXJyYXlWYWx1ZSA9
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQXJyYXlWYWx1ZSk7CiAgICAgQVNTRVJUKGlzSlNBcnJh
eShhcnJheVZhbHVlKSk7CkBAIC0xNzQ1LDcgKzE3NDYsNyBAQCBzdGF0aWMgdm9pZCBwdXRBY2Nl
c3NvckJ5VmFsKEV4ZWNTdGF0ZSogCiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0R2V0
dGVyQnlJZChFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogb2JqZWN0LCBVbmlxdWVkU3RyaW5nSW1w
bCogdWlkLCBpbnQzMl90IG9wdGlvbnMsIEpTQ2VsbCogZ2V0dGVyKQogewogICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMp
OworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogCiAgICAgQVNT
RVJUKG9iamVjdCAmJiBvYmplY3QtPmlzT2JqZWN0KCkpOwogICAgIEpTT2JqZWN0KiBiYXNlT2Jq
ID0gb2JqZWN0LT5nZXRPYmplY3QoKTsKQEAgLTE3NTcsNyArMTc1OCw3IEBAIHZvaWQgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25QdXRHZXR0ZXJCeUkKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRp
b25QdXRTZXR0ZXJCeUlkKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBvYmplY3QsIFVuaXF1ZWRT
dHJpbmdJbXBsKiB1aWQsIGludDMyX3Qgb3B0aW9ucywgSlNDZWxsKiBzZXR0ZXIpCiB7CiAgICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2
bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAK
ICAgICBBU1NFUlQob2JqZWN0ICYmIG9iamVjdC0+aXNPYmplY3QoKSk7CiAgICAgSlNPYmplY3Qq
IGJhc2VPYmogPSBvYmplY3QtPmdldE9iamVjdCgpOwpAQCAtMTc2OSw3ICsxNzcwLDcgQEAgdm9p
ZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dFNldHRlckJ5SQogdm9pZCBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvblB1dEdldHRlckJ5VmFsKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBiYXNlLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkU3Vic2NyaXB0LCBpbnQzMl90IGF0dHJpYnV0ZSwgSlNDZWxs
KiBnZXR0ZXIpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcih2bSwgZXhlYyk7CiAKICAgICBwdXRBY2Nlc3NvckJ5VmFsKGV4ZWMsIGFzT2JqZWN0KGJh
c2UpLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFN1YnNjcmlwdCksIGF0dHJpYnV0ZSwgYXNPYmpl
Y3QoZ2V0dGVyKSwgQWNjZXNzb3JUeXBlOjpHZXR0ZXIpOwogfQpAQCAtMTc3Nyw3ICsxNzc4LDcg
QEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEdldHRlckJ5Vgogdm9pZCBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvblB1dFNldHRlckJ5VmFsKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBi
YXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkU3Vic2NyaXB0LCBpbnQzMl90IGF0dHJpYnV0ZSwg
SlNDZWxsKiBzZXR0ZXIpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcih2bSwgZXhlYyk7CiAKICAgICBwdXRBY2Nlc3NvckJ5VmFsKGV4ZWMsIGFzT2Jq
ZWN0KGJhc2UpLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFN1YnNjcmlwdCksIGF0dHJpYnV0ZSwg
YXNPYmplY3Qoc2V0dGVyKSwgQWNjZXNzb3JUeXBlOjpTZXR0ZXIpOwogfQpAQCAtMTc4Niw3ICsx
Nzg3LDcgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dFNldHRlckJ5Vgogdm9pZCBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEdldHRlclNldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpT
Q2VsbCogb2JqZWN0LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBpbnQzMl90IGF0dHJpYnV0ZSwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZEdldHRlclZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
U2V0dGVyVmFsdWUpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcih2bSwgZXhlYyk7CiAKICAgICBBU1NFUlQob2JqZWN0ICYmIG9iamVjdC0+aXNPYmpl
Y3QoKSk7CiAgICAgSlNPYmplY3QqIGJhc2VPYmplY3QgPSBhc09iamVjdChvYmplY3QpOwpAQCAt
MTgwMiw3ICsxODAzLDcgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEdldHRlclNl
dAogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEdldHRlclNldHRlcihFeGVjU3RhdGUq
IGV4ZWMsIEpTQ2VsbCogb2JqZWN0LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBpbnQzMl90IGF0
dHJpYnV0ZSwgSlNDZWxsKiBnZXR0ZXJDZWxsLCBKU0NlbGwqIHNldHRlckNlbGwpCiB7CiAgICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2
bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAK
ICAgICBBU1NFUlQob2JqZWN0ICYmIG9iamVjdC0+aXNPYmplY3QoKSk7CiAgICAgSlNPYmplY3Qq
IGJhc2VPYmplY3QgPSBhc09iamVjdChvYmplY3QpOwpAQCAtMTgxOCw3ICsxODE5LDcgQEAgdm9p
ZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEdldHRlclNldAogdm9pZCBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvblBvcFNjb3BlKEV4ZWNTdGF0ZSogZXhlYywgaW50MzJfdCBzY29wZVJlZykKIHsK
ICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVj
KTsKIAogICAgIEpTU2NvcGUqIHNjb3BlID0gZXhlYy0+dW5jaGVja2VkUihzY29wZVJlZykuUmVn
aXN0ZXI6OnNjb3BlKCk7CiAgICAgZXhlYy0+dW5jaGVja2VkUihzY29wZVJlZykgPSBzY29wZS0+
bmV4dCgpOwpAQCAtMTgyNyw3ICsxODI4LDcgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
blBvcFNjb3BlKEV4ZQogaW50MzJfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkluc3RhbmNlT2ZD
dXN0b20oRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTT2Jq
ZWN0KiBjb25zdHJ1Y3RvciwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEhhc0luc3RhbmNlKQogewog
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMp
OwogCiAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwog
ICAgIEpTVmFsdWUgaGFzSW5zdGFuY2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkSGFz
SW5zdGFuY2UpOwpAQCAtMTkzNCw3ICsxOTM1LDcgQEAgc3RhdGljIE9wdGltaXphdGlvblJlc3Vs
dCB0cnlHZXRCeVZhbE9wdAogICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2Nr
ZXIoY29kZUJsb2NrLT5tX2xvY2spOwogICAgICAgICAgICAgICAgIGJ5VmFsSW5mby0+YXJyYXlQ
cm9maWxlLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obG9ja2VyLCBjb2RlQmxvY2ssIHN0cnVj
dHVyZSk7CiAKLSAgICAgICAgICAgICAgICBKSVQ6OmNvbXBpbGVHZXRCeVZhbChsb2NrZXIsICZ2
bSwgY29kZUJsb2NrLCBieVZhbEluZm8sIHJldHVybkFkZHJlc3MsIGFycmF5TW9kZSk7CisgICAg
ICAgICAgICAgICAgSklUOjpjb21waWxlR2V0QnlWYWwobG9ja2VyLCB2bSwgY29kZUJsb2NrLCBi
eVZhbEluZm8sIHJldHVybkFkZHJlc3MsIGFycmF5TW9kZSk7CiAgICAgICAgICAgICAgICAgb3B0
aW1pemF0aW9uUmVzdWx0ID0gT3B0aW1pemF0aW9uUmVzdWx0OjpPcHRpbWl6ZWQ7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KQEAgLTE5NTIsNyArMTk1Myw3IEBAIHN0YXRpYyBPcHRpbWl6YXRp
b25SZXN1bHQgdHJ5R2V0QnlWYWxPcHQKICAgICAgICAgICAgIEFTU0VSVCghYnlWYWxJbmZvLT5z
dHViUm91dGluZSk7CiAgICAgICAgICAgICBpZiAoYnlWYWxJbmZvLT5zZWVuKSB7CiAgICAgICAg
ICAgICAgICAgaWYgKGJ5VmFsSW5mby0+Y2FjaGVkSWQgPT0gcHJvcGVydHlOYW1lKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIEpJVDo6Y29tcGlsZUdldEJ5VmFsV2l0aENhY2hlZElkKCZ2bSwgZXhl
Yy0+Y29kZUJsb2NrKCksIGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywgcHJvcGVydHlOYW1lKTsK
KyAgICAgICAgICAgICAgICAgICAgSklUOjpjb21waWxlR2V0QnlWYWxXaXRoQ2FjaGVkSWQodm0s
IGV4ZWMtPmNvZGVCbG9jaygpLCBieVZhbEluZm8sIHJldHVybkFkZHJlc3MsIHByb3BlcnR5TmFt
ZSk7CiAgICAgICAgICAgICAgICAgICAgIG9wdGltaXphdGlvblJlc3VsdCA9IE9wdGltaXphdGlv
blJlc3VsdDo6T3B0aW1pemVkOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICAgICAgICAgIC8vIFNlZW0gbGlrZSBhIGdlbmVyaWMgcHJvcGVydHkgYWNjZXNzIHNpdGUuCkBA
IC0xOTg4LDcgKzE5ODksNyBAQCBleHRlcm4gIkMiIHsKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uR2V0QnlWYWxHZW5lcmljKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZEJhc2UsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3JpcHQsIEJ5VmFs
SW5mbyogYnlWYWxJbmZvKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZl
Q2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRy
YWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6
ZGVjb2RlKGVuY29kZWRCYXNlKTsKICAgICBKU1ZhbHVlIHN1YnNjcmlwdCA9IEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkU3Vic2NyaXB0KTsKIApAQCAtMTk5OSw3ICsyMDAwLDcgQEAgRW5jb2RlZEpT
VmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZQogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJB
VElPTiBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZEJhc2UsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3JpcHQsIEJ5VmFs
SW5mbyogYnlWYWxJbmZvKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZl
Q2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRy
YWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKIAogICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRCYXNlKTsKQEAgLTIwMTksNyArMjAyMCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uR2UKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSGFz
SW5kZXhlZFByb3BlcnR5RGVmYXVsdChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRCYXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkU3Vic2NyaXB0LCBCeVZhbEluZm8qIGJ5
VmFsSW5mbykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKHZtLCBleGVjKTsKICAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShl
bmNvZGVkQmFzZSk7CiAgICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBKU1ZhbHVlOjpkZWNvZGUoZW5j
b2RlZFN1YnNjcmlwdCk7CiAgICAgCkBAIC0yMDM2LDcgKzIwMzcsNyBAQCBFbmNvZGVkSlNWYWx1
ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkhhCiAgICAgICAgIC8vIEF0dGVtcHQgdG8gb3B0aW1p
emUuCiAgICAgICAgIEpJVEFycmF5TW9kZSBhcnJheU1vZGUgPSBqaXRBcnJheU1vZGVGb3JTdHJ1
Y3R1cmUob2JqZWN0LT5zdHJ1Y3R1cmUodm0pKTsKICAgICAgICAgaWYgKGFycmF5TW9kZSAhPSBi
eVZhbEluZm8tPmFycmF5TW9kZSkgewotICAgICAgICAgICAgSklUOjpjb21waWxlSGFzSW5kZXhl
ZFByb3BlcnR5KCZ2bSwgZXhlYy0+Y29kZUJsb2NrKCksIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVz
c1B0cihPVVJfUkVUVVJOX0FERFJFU1MpLCBhcnJheU1vZGUpOworICAgICAgICAgICAgSklUOjpj
b21waWxlSGFzSW5kZXhlZFByb3BlcnR5KHZtLCBleGVjLT5jb2RlQmxvY2soKSwgYnlWYWxJbmZv
LCBSZXR1cm5BZGRyZXNzUHRyKE9VUl9SRVRVUk5fQUREUkVTUyksIGFycmF5TW9kZSk7CiAgICAg
ICAgICAgICBkaWRPcHRpbWl6ZSA9IHRydWU7CiAgICAgICAgIH0KICAgICB9CkBAIC0yMDY2LDcg
KzIwNjcsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkhhCiBFbmNv
ZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkhhc0luZGV4ZWRQcm9wZXJ0eUdlbmVy
aWMoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZFN1YnNjcmlwdCwgQnlWYWxJbmZvKiBieVZhbEluZm8pCiB7CiAgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwg
ZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAg
SlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2UpOwogICAgIEpT
VmFsdWUgc3Vic2NyaXB0ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRTdWJzY3JpcHQpOwogICAg
IApAQCAtMjA4Niw3ICsyMDg3LDcgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVy
YXRpb25IYQogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRCeVZhbFN0
cmluZyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkU3Vic2NyaXB0LCBCeVZhbEluZm8qIGJ5VmFsSW5mbykKIHsKICAgICBW
TSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZt
LCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNWYWx1ZSBiYXNl
VmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2UpOwogICAgIEpTVmFsdWUgc3Vic2Ny
aXB0ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRTdWJzY3JpcHQpOwpAQCAtMjEyNCwxNCArMjEy
NSwxNCBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkRlCiBzaXplX3Qg
SklUX09QRVJBVElPTiBvcGVyYXRpb25EZWxldGVCeUlkKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZEJhc2UsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCiB7CiAgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwg
ZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgSlNPYmplY3QqIGJh
c2VPYmogPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2UpLnRvT2JqZWN0KGV4ZWMpOwogICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKICAgICBpZiAoIWJhc2VPYmopCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBib29sIGNvdWxkRGVsZXRlID0gYmFzZU9iai0+bWV0
aG9kVGFibGUodm0pLT5kZWxldGVQcm9wZXJ0eShiYXNlT2JqLCBleGVjLCBJZGVudGlmaWVyOjpm
cm9tVWlkKCZ2bSwgdWlkKSk7CisgICAgYm9vbCBjb3VsZERlbGV0ZSA9IGJhc2VPYmotPm1ldGhv
ZFRhYmxlKHZtKS0+ZGVsZXRlUHJvcGVydHkoYmFzZU9iaiwgZXhlYywgSWRlbnRpZmllcjo6ZnJv
bVVpZCh2bSwgdWlkKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwog
ICAgIGlmICghY291bGREZWxldGUgJiYgZXhlYy0+Y29kZUJsb2NrKCktPmlzU3RyaWN0TW9kZSgp
KQogICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwgVW5hYmxlVG9EZWxldGVQcm9w
ZXJ0eUVycm9yKTsKQEAgLTIxNDYsNyArMjE0Nyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uRGUKIHNpemVfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkRlbGV0ZUJ5
VmFsKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRLZXkpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogCiAgICAgSlNPYmplY3QqIGJhc2VPYmogPSBKU1ZhbHVlOjpkZWNvZGUoZW5j
b2RlZEJhc2UpLnRvT2JqZWN0KGV4ZWMpOwpAQCAtMjE3Myw3ICsyMTc0LDcgQEAgc2l6ZV90IEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uRGVsZXRlQnlWYQogSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvblB1c2hXaXRoU2NvcGUoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGN1cnJlbnRTY29w
ZUNlbGwsIEVuY29kZWRKU1ZhbHVlIG9iamVjdFZhbHVlKQogewogICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEpTT2JqZWN0KiBvYmplY3QgPSBKU1Zh
bHVlOjpkZWNvZGUob2JqZWN0VmFsdWUpLnRvT2JqZWN0KGV4ZWMpOwpAQCAtMjE4Nyw3ICsyMTg4
LDcgQEAgSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1c2hXaXRoUwogSlNDZWxsKiBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1c2hXaXRoU2NvcGVPYmplY3QoRXhlY1N0YXRlKiBleGVj
LCBKU0NlbGwqIGN1cnJlbnRTY29wZUNlbGwsIEpTT2JqZWN0KiBvYmplY3QpCiB7CiAgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwg
ZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAg
SlNTY29wZSogY3VycmVudFNjb3BlID0ganNDYXN0PEpTU2NvcGUqPihjdXJyZW50U2NvcGVDZWxs
KTsKICAgICByZXR1cm4gSlNXaXRoU2NvcGU6OmNyZWF0ZSh2bSwgZXhlYy0+bGV4aWNhbEdsb2Jh
bE9iamVjdCgpLCBjdXJyZW50U2NvcGUsIG9iamVjdCk7CiB9CkBAIC0yMTk1LDcgKzIxOTYsNyBA
QCBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHVzaFdpdGhTCiBFbmNvZGVkSlNWYWx1
ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkluc3RhbmNlT2YoRXhlY1N0YXRlKiBleGVjLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRQcm90bykKIHsK
ICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVj
KTsKICAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAg
ICAgSlNWYWx1ZSBwcm90byA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkUHJvdG8pOwogICAgIApA
QCAtMjIwNiw3ICsyMjA3LDcgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRp
b25JbgogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25JbnN0YW5jZU9mR2Vu
ZXJpYyhFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvdG8pCiB7CiAg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7
CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAg
IEpTVmFsdWUgcHJvdG8gPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFByb3RvKTsKICAgICAKQEAg
LTIyMTksNyArMjIyMCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
SW4KIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSW5zdGFuY2VPZk9wdGlt
aXplKEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRQcm90bykKIHsKICAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
JnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsK
ICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNWYWx1ZSB2
YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIEpTVmFsdWUgcHJvdG8g
PSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFByb3RvKTsKQEAgLTIyMzYsMTQgKzIyMzcsMTQgQEAg
RW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25JbgogaW50MzJfdCBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvblNpemVGcmFtZUZvckZvcndhcmRBcmd1bWVudHMoRXhlY1N0YXRlKiBl
eGVjLCBFbmNvZGVkSlNWYWx1ZSwgaW50MzJfdCBudW1Vc2VkU3RhY2tTbG90cywgaW50MzJfdCkK
IHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBl
eGVjKTsKICAgICByZXR1cm4gc2l6ZUZyYW1lRm9yRm9yd2FyZEFyZ3VtZW50cyhleGVjLCB2bSwg
bnVtVXNlZFN0YWNrU2xvdHMpOwogfQogCiBpbnQzMl90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
U2l6ZUZyYW1lRm9yVmFyYXJncyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRBcmd1bWVudHMsIGludDMyX3QgbnVtVXNlZFN0YWNrU2xvdHMsIGludDMyX3QgZmlyc3RWYXJB
cmdPZmZzZXQpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcih2bSwgZXhlYyk7CiAgICAgSlNWYWx1ZSBhcmd1bWVudHMgPSBKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZEFyZ3VtZW50cyk7CiAgICAgcmV0dXJuIHNpemVGcmFtZUZvclZhcmFyZ3MoZXhlYywg
dm0sIGFyZ3VtZW50cywgbnVtVXNlZFN0YWNrU2xvdHMsIGZpcnN0VmFyQXJnT2Zmc2V0KTsKIH0K
QEAgLTIyNTEsNyArMjI1Miw3IEBAIGludDMyX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25TaXpl
RnJhbWUKIENhbGxGcmFtZSogSklUX09QRVJBVElPTiBvcGVyYXRpb25TZXR1cEZvcndhcmRBcmd1
bWVudHNGcmFtZShFeGVjU3RhdGUqIGV4ZWMsIENhbGxGcmFtZSogbmV3Q2FsbEZyYW1lLCBFbmNv
ZGVkSlNWYWx1ZSwgaW50MzJfdCwgaW50MzJfdCBsZW5ndGgpCiB7CiAgICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7Cisg
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgc2V0dXBGb3J3
YXJkQXJndW1lbnRzRnJhbWUoZXhlYywgbmV3Q2FsbEZyYW1lLCBsZW5ndGgpOwogICAgIHJldHVy
biBuZXdDYWxsRnJhbWU7CiB9CkBAIC0yMjU5LDcgKzIyNjAsNyBAQCBDYWxsRnJhbWUqIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uU2V0dXBGCiBDYWxsRnJhbWUqIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uU2V0dXBWYXJhcmdzRnJhbWUoRXhlY1N0YXRlKiBleGVjLCBDYWxsRnJhbWUqIG5ld0NhbGxG
cmFtZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEFyZ3VtZW50cywgaW50MzJfdCBmaXJzdFZhckFy
Z09mZnNldCwgaW50MzJfdCBsZW5ndGgpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgSlNWYWx1ZSBhcmd1bWVudHMgPSBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEFyZ3VtZW50cyk7CiAgICAgc2V0dXBWYXJhcmdzRnJhbWUo
ZXhlYywgbmV3Q2FsbEZyYW1lLCBhcmd1bWVudHMsIGZpcnN0VmFyQXJnT2Zmc2V0LCBsZW5ndGgp
OwogICAgIHJldHVybiBuZXdDYWxsRnJhbWU7CkBAIC0yMjY4LDcgKzIyNjksNyBAQCBDYWxsRnJh
bWUqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uU2V0dXBWCiBjaGFyKiBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvblN3aXRjaENoYXJXaXRoVW5rbm93bktleVR5cGUoRXhlY1N0YXRlKiBleGVjLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkS2V5LCBzaXplX3QgdGFibGVJbmRleCkKIHsKICAgICBWTSYgdm0g
PSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVj
KTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICBKU1Zh
bHVlIGtleSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkS2V5KTsKICAgICBDb2RlQmxvY2sqIGNv
ZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOwogCkBAIC0yMjg4LDcgKzIyODksNyBAQCBjaGFy
KiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblN3aXRjaENoYXJXCiBjaGFyKiBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvblN3aXRjaEltbVdpdGhVbmtub3duS2V5VHlwZShFeGVjU3RhdGUqIGV4ZWMsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRLZXksIHNpemVfdCB0YWJsZUluZGV4KQogewogICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4
ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIEpT
VmFsdWUga2V5ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRLZXkpOwogICAgIENvZGVCbG9jayog
Y29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7CiAKQEAgLTIzMDcsNyArMjMwOCw3IEBAIGNo
YXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uU3dpdGNoSW1tV2kKIGNoYXIqIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uU3dpdGNoU3RyaW5nV2l0aFVua25vd25LZXlUeXBlKEV4ZWNTdGF0ZSogZXhl
YywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEtleSwgc2l6ZV90IHRhYmxlSW5kZXgpCiB7CiAgICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2
bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAg
ICAgSlNWYWx1ZSBrZXkgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEtleSk7CiAgICAgQ29kZUJs
b2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKICAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTIzMzEsNyArMjMzMiw3IEBAIGNoYXIqIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uU3dpdGNoU3RyaW4KIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uR2V0RnJvbVNjb3BlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSW5zdHJ1
Y3Rpb24qIHBjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIodm0sIGV4ZWMpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwogCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsK
QEAgLTIzNzIsNyArMjM3Myw3IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uR2UKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRUb1Njb3BlKEV4ZWNTdGF0ZSog
ZXhlYywgY29uc3QgSW5zdHJ1Y3Rpb24qIHBjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBl
eGVjLT5jb2RlQmxvY2soKTsKQEAgLTI0MjQsOSArMjQyNSw5IEBAIHZvaWQgSklUX09QRVJBVElP
TiBvcGVyYXRpb25QdXRUb1Njb3BlKEUKIAogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRo
cm93KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEV4Y2VwdGlvblZhbHVl
KQogewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0gICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBKU1ZhbHVlIGV4Y2VwdGlvblZhbHVlID0gSlNWYWx1
ZTo6ZGVjb2RlKGVuY29kZWRFeGNlcHRpb25WYWx1ZSk7CiAgICAgdGhyb3dFeGNlcHRpb24oZXhl
Yywgc2NvcGUsIGV4Y2VwdGlvblZhbHVlKTsKQEAgLTI0MzgsNyArMjQzOSw3IEBAIHZvaWQgSklU
X09QRVJBVElPTiBvcGVyYXRpb25UaHJvdyhFeGVjU3QKIGNoYXIqIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uUmVhbGxvY2F0ZUJ1dHRlcmZseVRvSGF2ZVByb3BlcnR5U3RvcmFnZVdpdGhJbml0aWFs
Q2FwYWNpdHkoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogb2JqZWN0KQogewogICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4
ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogCiAgICAg
QVNTRVJUKCFvYmplY3QtPnN0cnVjdHVyZSh2bSktPm91dE9mTGluZUNhcGFjaXR5KCkpOwogICAg
IEJ1dHRlcmZseSogcmVzdWx0ID0gb2JqZWN0LT5hbGxvY2F0ZU1vcmVPdXRPZkxpbmVTdG9yYWdl
KHZtLCAwLCBpbml0aWFsT3V0T2ZMaW5lQ2FwYWNpdHkpOwpAQCAtMjQ0OSw3ICsyNDUwLDcgQEAg
Y2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25SZWFsbG9jYXRlQgogY2hhciogSklUX09QRVJB
VElPTiBvcGVyYXRpb25SZWFsbG9jYXRlQnV0dGVyZmx5VG9Hcm93UHJvcGVydHlTdG9yYWdlKEV4
ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9iamVjdCwgc2l6ZV90IG5ld1NpemUpCiB7CiAgICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2
bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAK
ICAgICBCdXR0ZXJmbHkqIHJlc3VsdCA9IG9iamVjdC0+YWxsb2NhdGVNb3JlT3V0T2ZMaW5lU3Rv
cmFnZSh2bSwgb2JqZWN0LT5zdHJ1Y3R1cmUodm0pLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBuZXdT
aXplKTsKICAgICBvYmplY3QtPm51a2VTdHJ1Y3R1cmVBbmRTZXRCdXR0ZXJmbHkodm0sIG9iamVj
dC0+c3RydWN0dXJlSUQoKSwgcmVzdWx0KTsKQEAgLTI0NTgsMjMgKzI0NTksMjQgQEAgY2hhciog
SklUX09QRVJBVElPTiBvcGVyYXRpb25SZWFsbG9jYXRlQgogCiB2b2lkIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uT1NSV3JpdGVCYXJyaWVyKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBjZWxsKQog
ewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAg
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0gICAgdm0tPmhlYXAu
d3JpdGVCYXJyaWVyKGNlbGwpOworICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKGNlbGwpOwogfQog
CiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uV3JpdGVCYXJyaWVyU2xvd1BhdGgoRXhlY1N0
YXRlKiBleGVjLCBKU0NlbGwqIGNlbGwpCiB7Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Cisg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KHZtLCBleGVjKTsKLSAgICB2bS0+aGVhcC53cml0ZUJhcnJpZXJTbG93UGF0aChjZWxsKTsKKyAg
ICB2bS5oZWFwLndyaXRlQmFycmllclNsb3dQYXRoKGNlbGwpOwogfQogCi12b2lkIEpJVF9PUEVS
QVRJT04gbG9va3VwRXhjZXB0aW9uSGFuZGxlcihWTSogdm0sIEV4ZWNTdGF0ZSogZXhlYykKK3Zv
aWQgSklUX09QRVJBVElPTiBsb29rdXBFeGNlcHRpb25IYW5kbGVyKFZNKiB2bVBvaW50ZXIsIEV4
ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSAqdm1Qb2ludGVyOwogICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIGdlbmVyaWNVbndpbmQodm0sIGV4
ZWMpOwotICAgIEFTU0VSVCh2bS0+dGFyZ2V0TWFjaGluZVBDRm9yVGhyb3cpOworICAgIEFTU0VS
VCh2bS50YXJnZXRNYWNoaW5lUENGb3JUaHJvdyk7CiB9CiAKIHZvaWQgSklUX09QRVJBVElPTiBs
b29rdXBFeGNlcHRpb25IYW5kbGVyRnJvbUNhbGxlckZyYW1lKFZNKiB2bSwgRXhlY1N0YXRlKiBl
eGVjKQpAQCAtMjQ4Niw3ICsyNDg4LDcgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIGxvb2t1cEV4Y2Vw
dGlvbkhhbmRsZQogCiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVk1IYW5kbGVFeGNlcHRp
b24oRXhlY1N0YXRlKiBleGVjKQogewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwg
ZXhlYyk7CiAgICAgZ2VuZXJpY1Vud2luZCh2bSwgZXhlYyk7CiB9CkBAIC0yNDk4LDkgKzI1MDAs
OSBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVk1IYW5kbGVFeGNlCiAvLyB0ZXN0aW5n
Lgogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkV4Y2VwdGlvbkZ1enooRXhlY1N0YXRlKiBl
eGVjKQogewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0gICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKKyAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHNjb3BlKTsKICNpZiBDT01Q
SUxFUihHQ0NfQ09NUEFUSUJMRSkKICAgICB2b2lkKiByZXR1cm5QQyA9IF9fYnVpbHRpbl9yZXR1
cm5fYWRkcmVzcygwKTsKQEAgLTI1MTAsNyArMjUxMiw3IEBAIHZvaWQgSklUX09QRVJBVElPTiBv
cGVyYXRpb25FeGNlcHRpb25GdXoKIAogQUxXQVlTX0lOTElORSBzdGF0aWMgRW5jb2RlZEpTVmFs
dWUgdW5wcm9maWxlZEFkZChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRP
cDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpCiB7Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZt
KCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIg
dHJhY2VyKHZtLCBleGVjKTsKICAgICAKICAgICBKU1ZhbHVlIG9wMSA9IEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkT3AxKTsKQEAgLTI1MjEsNyArMjUyMyw3IEBAIEFMV0FZU19JTkxJTkUgc3RhdGlj
IEVuY29kZWRKU1ZhbHVlIHVucHIKIAogQUxXQVlTX0lOTElORSBzdGF0aWMgRW5jb2RlZEpTVmFs
dWUgcHJvZmlsZWRBZGQoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3Ax
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyLCBBcml0aFByb2ZpbGUmIGFyaXRoUHJvZmlsZSkK
IHsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwog
ICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIAogICAgIEpT
VmFsdWUgb3AxID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDEpOwpAQCAtMjU0Nyw3ICsyNTQ5
LDcgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25WYQogCiBFbmNvZGVk
SlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZhbHVlQWRkUHJvZmlsZWRPcHRpbWl6ZShF
eGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRPcDIsIEpJVEFkZElDKiBhZGRJQykKIHsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0o
KTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIodm0sIGV4ZWMpOwogICAgIAogICAgIEpTVmFsdWUgb3AxID0gSlNWYWx1ZTo6ZGVjb2Rl
KGVuY29kZWRPcDEpOwpAQCAtMjU3MSw3ICsyNTczLDcgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25WYQogCiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvblZhbHVlQWRkUHJvZmlsZWROb09wdGltaXplKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMiwgSklUQWRkSUMqIGFk
ZElDKQogewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAKICAgICBB
cml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IGFkZElDLT5hcml0aFByb2ZpbGUoKTsKQEAgLTI1
ODEsNyArMjU4Myw3IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmEK
IAogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25WYWx1ZUFkZE9wdGltaXpl
KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZE9wMiwgSklUQWRkSUMqIGFkZElDKQogewotICAgIFZNKiB2bSA9ICZleGVjLT52
bSgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcih2bSwgZXhlYyk7CiAKICAgICBKU1ZhbHVlIG9wMSA9IEpTVmFsdWU6OmRlY29kZShl
bmNvZGVkT3AxKTsKQEAgLTI2MDEsNyArMjYwMyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uVmEKIAogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRp
b25WYWx1ZUFkZE5vT3B0aW1pemUoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyLCBKSVRBZGRJQyopCiB7Ci0gICAgVk0q
IHZtID0gJmV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICAKICAgICBKU1ZhbHVlIG9wMSA9
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AxKTsKQEAgLTI2MzgsNyArMjY0MCw3IEBAIEFMV0FZ
U19JTkxJTkUgc3RhdGljIEVuY29kZWRKU1ZhbHVlIHByb2YKIAogRW5jb2RlZEpTVmFsdWUgSklU
X09QRVJBVElPTiBvcGVyYXRpb25WYWx1ZU11bChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpCiB7Ci0gICAgVk0qIHZt
ID0gJmV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKIAogICAgIHJldHVybiB1bnByb2ZpbGVkTXVs
KGV4ZWMsIGVuY29kZWRPcDEsIGVuY29kZWRPcDIpOwpAQCAtMjY0Niw3ICsyNjQ4LDcgQEAgRW5j
b2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25WYQogCiBFbmNvZGVkSlNWYWx1ZSBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvblZhbHVlTXVsTm9PcHRpbWl6ZShFeGVjU3RhdGUqIGV4ZWMs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIsIEpJ
VE11bElDKikKIHsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBleGVj
LT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogCiAg
ICAgcmV0dXJuIHVucHJvZmlsZWRNdWwoZXhlYywgZW5jb2RlZE9wMSwgZW5jb2RlZE9wMik7CkBA
IC0yNjU0LDcgKzI2NTYsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
blZhCiAKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmFsdWVNdWxPcHRp
bWl6ZShFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRPcDIsIEpJVE11bElDKiBtdWxJQykKIHsKLSAgICBWTSogdm0gPSAmZXhl
Yy0+dm0oKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRy
YWNlciB0cmFjZXIodm0sIGV4ZWMpOwogCiAgICAgYXV0byBub25PcHRpbWl6ZVZhcmlhbnQgPSBv
cGVyYXRpb25WYWx1ZU11bE5vT3B0aW1pemU7CkBAIC0yNjcxLDcgKzI2NzMsNyBAQCBFbmNvZGVk
SlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZhCiAKIEVuY29kZWRKU1ZhbHVlIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uVmFsdWVNdWxQcm9maWxlZChFeGVjU3RhdGUqIGV4ZWMsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIsIEFyaXRoUHJv
ZmlsZSogYXJpdGhQcm9maWxlKQogewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwg
ZXhlYyk7CiAKICAgICBBU1NFUlQoYXJpdGhQcm9maWxlKTsKQEAgLTI2ODAsNyArMjY4Miw3IEBA
IEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmEKIAogRW5jb2RlZEpTVmFs
dWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25WYWx1ZU11bFByb2ZpbGVkT3B0aW1pemUoRXhlY1N0
YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkT3AyLCBKSVRNdWxJQyogbXVsSUMpCiB7Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Cisg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KHZtLCBleGVjKTsKIAogICAgIEFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbXVsSUMtPmFy
aXRoUHJvZmlsZSgpOwpAQCAtMjY5OCw3ICsyNzAwLDcgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25WYQogCiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvblZhbHVlTXVsUHJvZmlsZWROb09wdGltaXplKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMiwgSklUTXVsSUMqIG11
bElDKQogewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAKICAgICBB
cml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG11bElDLT5hcml0aFByb2ZpbGUoKTsKQEAgLTI3
MTAsNyArMjcxMiw3IEBAIEFMV0FZU19JTkxJTkUgc3RhdGljIEVuY29kZWRKU1ZhbHVlIHVucHIK
IHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhl
Yyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgCiAg
ICAgSlNWYWx1ZSBvcGVyYW5kID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcGVyYW5kKTsKICAg
ICAKQEAgLTI3MjksNyArMjczMSw3IEBAIEFMV0FZU19JTkxJTkUgc3RhdGljIEVuY29kZWRKU1Zh
bHVlIHByb2YKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7
CiAKICAgICBKU1ZhbHVlIG9wZXJhbmQgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wZXJhbmQp
OwogICAgIGFyaXRoUHJvZmlsZS5vYnNlcnZlTEhTKG9wZXJhbmQpOwpAQCAtMjc2Niw3ICsyNzY4
LDcgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25BcgogewogICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICAKICAgICBKU1ZhbHVl
IG9wZXJhbmQgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wZXJhbmQpOwogCkBAIC0yNzk5LDcg
KzI4MDEsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFyCiB7CiAg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwor
ICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogCiAgICAgSlNWYWx1
ZSBvcGVyYW5kID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcGVyYW5kKTsKIApAQCAtMjg0OCw3
ICsyODUwLDcgQEAgQUxXQVlTX0lOTElORSBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgcHJvZgogCiBF
bmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZhbHVlU3ViKEV4ZWNTdGF0ZSog
ZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9w
MikKIHsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgp
OwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIHJldHVy
biB1bnByb2ZpbGVkU3ViKGV4ZWMsIGVuY29kZWRPcDEsIGVuY29kZWRPcDIpOwogfQpAQCAtMjg1
NywxNSArMjg1OSwxNSBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZh
CiB7CiAgICAgQVNTRVJUKGFyaXRoUHJvZmlsZSk7CiAKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0o
KTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIodm0sIGV4ZWMpOwogCi0gICAgcmV0dXJuIHByb2ZpbGVkU3ViKCp2bSwgZXhlYywgZW5j
b2RlZE9wMSwgZW5jb2RlZE9wMiwgKmFyaXRoUHJvZmlsZSk7CisgICAgcmV0dXJuIHByb2ZpbGVk
U3ViKHZtLCBleGVjLCBlbmNvZGVkT3AxLCBlbmNvZGVkT3AyLCAqYXJpdGhQcm9maWxlKTsKIH0K
IAogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25WYWx1ZVN1Yk9wdGltaXpl
KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZE9wMiwgSklUU3ViSUMqIHN1YklDKQogewotICAgIFZNKiB2bSA9ICZleGVjLT52
bSgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcih2bSwgZXhlYyk7CiAKICAgICBhdXRvIG5vbk9wdGltaXplVmFyaWFudCA9IG9wZXJh
dGlvblZhbHVlU3ViTm9PcHRpbWl6ZTsKQEAgLTI4ODIsNyArMjg4NCw3IEBAIEVuY29kZWRKU1Zh
bHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmEKIAogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJB
VElPTiBvcGVyYXRpb25WYWx1ZVN1Yk5vT3B0aW1pemUoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyLCBKSVRTdWJJQyop
CiB7Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsK
ICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKIAogICAgIHJldHVy
biB1bnByb2ZpbGVkU3ViKGV4ZWMsIGVuY29kZWRPcDEsIGVuY29kZWRPcDIpOwpAQCAtMjg5MCw3
ICsyODkyLDcgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25WYQogCiBF
bmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZhbHVlU3ViUHJvZmlsZWRPcHRp
bWl6ZShFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRPcDIsIEpJVFN1YklDKiBzdWJJQykKIHsKLSAgICBWTSogdm0gPSAmZXhl
Yy0+dm0oKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRy
YWNlciB0cmFjZXIodm0sIGV4ZWMpOwogCiAgICAgQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUg
PSBzdWJJQy0+YXJpdGhQcm9maWxlKCk7CkBAIC0yOTAzLDMwICsyOTA1LDMwIEBAIEVuY29kZWRK
U1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmEKICAgICBleGVjLT5jb2RlQmxvY2soKS0+
ZHVtcE1hdGhJQ1N0YXRzKCk7CiAjZW5kaWYKIAotICAgIHJldHVybiBwcm9maWxlZFN1Yigqdm0s
IGV4ZWMsIGVuY29kZWRPcDEsIGVuY29kZWRPcDIsICphcml0aFByb2ZpbGUsIGZhbHNlKTsKKyAg
ICByZXR1cm4gcHJvZmlsZWRTdWIodm0sIGV4ZWMsIGVuY29kZWRPcDEsIGVuY29kZWRPcDIsICph
cml0aFByb2ZpbGUsIGZhbHNlKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBv
cGVyYXRpb25WYWx1ZVN1YlByb2ZpbGVkTm9PcHRpbWl6ZShFeGVjU3RhdGUqIGV4ZWMsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIsIEpJVFN1YklD
KiBzdWJJQykKIHsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBleGVj
LT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogCiAg
ICAgQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBzdWJJQy0+YXJpdGhQcm9maWxlKCk7CiAg
ICAgQVNTRVJUKGFyaXRoUHJvZmlsZSk7Ci0gICAgcmV0dXJuIHByb2ZpbGVkU3ViKCp2bSwgZXhl
YywgZW5jb2RlZE9wMSwgZW5jb2RlZE9wMiwgKmFyaXRoUHJvZmlsZSk7CisgICAgcmV0dXJuIHBy
b2ZpbGVkU3ViKHZtLCBleGVjLCBlbmNvZGVkT3AxLCBlbmNvZGVkT3AyLCAqYXJpdGhQcm9maWxl
KTsKIH0KIAogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblByb2Nlc3NUeXBlUHJvZmlsZXJM
b2coRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIHZtLnR5cGVQcm9maWxlckxvZygpLT5wcm9j
ZXNzTG9nRW50cmllcyh2bSwgIkxvZyBGdWxsLCBjYWxsZWQgZnJvbSBpbnNpZGUgYmFzZWxpbmUg
SklUIl9zKTsKIH0KIAogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblByb2Nlc3NTaGFkb3dD
aGlja2VuTG9nKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwot
ICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICBSRUxFQVNFX0FTU0VSVCh2bS5z
aGFkb3dDaGlja2VuKCkpOwogICAgIHZtLnNoYWRvd0NoaWNrZW4oKS0+dXBkYXRlKHZtLCBleGVj
KTsKIH0KQEAgLTI5MzQsMTIgKzI5MzYsMTIgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
blByb2Nlc3NTaGFkbwogaW50MzJfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNoZWNrSWZFeGNl
cHRpb25Jc1VuY2F0Y2hhYmxlQW5kTm90aWZ5UHJvZmlsZXIoRXhlY1N0YXRlKiBleGVjKQogewog
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMp
OwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBSRUxFQVNF
X0FTU0VSVCghIXNjb3BlLmV4Y2VwdGlvbigpKTsKIAogICAgIGlmIChpc1Rlcm1pbmF0ZWRFeGVj
dXRpb25FeGNlcHRpb24odm0sIHNjb3BlLmV4Y2VwdGlvbigpKSkgewotICAgICAgICBnZW5lcmlj
VW53aW5kKCZ2bSwgZXhlYyk7CisgICAgICAgIGdlbmVyaWNVbndpbmQodm0sIGV4ZWMpOwogICAg
ICAgICByZXR1cm4gMTsKICAgICB9CiAgICAgcmV0dXJuIDA7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkocmV2aXNpb24gMjQ5MTI4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEyMTIsNyArMTIxMiw3IEBAIHZvaWQgSklUOjplbWl0V3JpdGVCYXJy
aWVyKHVuc2lnbmVkIG93bmUKICAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFs
dWUgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlKQogICAgICAgICBvd25lck5vdENlbGwgPSBi
cmFuY2hJZk5vdENlbGwocmVnVDApOwogCi0gICAgSnVtcCBvd25lcklzUmVtZW1iZXJlZE9ySW5F
ZGVuID0gYmFycmllckJyYW5jaCgqdm0oKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBKdW1wIG93bmVy
SXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBiYXJyaWVyQnJhbmNoKHZtKCksIHJlZ1QwLCByZWdUMSk7
CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93UGF0aCwgcmVnVDAp
OwogICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4ubGluayh0aGlzKTsKIApAQCAtMTI3OCw3
ICsxMjc4LDcgQEAgdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lcgogCiB2
b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyKQogewotICAgIEp1bXAgb3du
ZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IGJhcnJpZXJCcmFuY2goKnZtKCksIG93bmVyLCByZWdU
MCk7CisgICAgSnVtcCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuID0gYmFycmllckJyYW5jaCh2
bSgpLCBvd25lciwgcmVnVDApOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uV3JpdGVCYXJy
aWVyU2xvd1BhdGgsIG93bmVyKTsKICAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuLmxpbmso
dGhpcyk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRodW5rcy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRUaHVua3MuY3BwCShy
ZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRodW5rcy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDEyLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEyLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC00NSw0MyArNDUsNDMgQEAgSklUVGh1bmtzOjp+SklUVGh1
bmtzKCkKIHsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFnPiBKSVRU
aHVua3M6OmN0aU5hdGl2ZUNhbGwoVk0qIHZtKQorTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFRo
dW5rUHRyVGFnPiBKSVRUaHVua3M6OmN0aU5hdGl2ZUNhbGwoVk0mIHZtKQogewogICAgIEFTU0VS
VChWTTo6Y2FuVXNlSklUKCkpOwogICAgIHJldHVybiBjdGlTdHViKHZtLCBuYXRpdmVDYWxsR2Vu
ZXJhdG9yKS5jb2RlKCk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRUaHVua1B0clRh
Zz4gSklUVGh1bmtzOjpjdGlOYXRpdmVDb25zdHJ1Y3QoVk0qIHZtKQorTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyPEpJVFRodW5rUHRyVGFnPiBKSVRUaHVua3M6OmN0aU5hdGl2ZUNvbnN0cnVjdChWTSYg
dm0pCiB7CiAgICAgQVNTRVJUKFZNOjpjYW5Vc2VKSVQoKSk7CiAgICAgcmV0dXJuIGN0aVN0dWIo
dm0sIG5hdGl2ZUNvbnN0cnVjdEdlbmVyYXRvcikuY29kZSgpOwogfQogCi1NYWNyb0Fzc2VtYmxl
ckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+IEpJVFRodW5rczo6Y3RpTmF0aXZlVGFpbENhbGwoVk0q
IHZtKQorTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFnPiBKSVRUaHVua3M6OmN0
aU5hdGl2ZVRhaWxDYWxsKFZNJiB2bSkKIHsKICAgICBBU1NFUlQoVk06OmNhblVzZUpJVCgpKTsK
ICAgICByZXR1cm4gY3RpU3R1Yih2bSwgbmF0aXZlVGFpbENhbGxHZW5lcmF0b3IpLmNvZGUoKTsK
IH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFnPiBKSVRUaHVua3M6OmN0
aU5hdGl2ZVRhaWxDYWxsV2l0aG91dFNhdmVkVGFncyhWTSogdm0pCitNYWNyb0Fzc2VtYmxlckNv
ZGVQdHI8SklUVGh1bmtQdHJUYWc+IEpJVFRodW5rczo6Y3RpTmF0aXZlVGFpbENhbGxXaXRob3V0
U2F2ZWRUYWdzKFZNJiB2bSkKIHsKICAgICBBU1NFUlQoVk06OmNhblVzZUpJVCgpKTsKICAgICBy
ZXR1cm4gY3RpU3R1Yih2bSwgbmF0aXZlVGFpbENhbGxXaXRob3V0U2F2ZWRUYWdzR2VuZXJhdG9y
KS5jb2RlKCk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRUaHVua1B0clRhZz4gSklU
VGh1bmtzOjpjdGlJbnRlcm5hbEZ1bmN0aW9uQ2FsbChWTSogdm0pCitNYWNyb0Fzc2VtYmxlckNv
ZGVQdHI8SklUVGh1bmtQdHJUYWc+IEpJVFRodW5rczo6Y3RpSW50ZXJuYWxGdW5jdGlvbkNhbGwo
Vk0mIHZtKQogewogICAgIEFTU0VSVChWTTo6Y2FuVXNlSklUKCkpOwogICAgIHJldHVybiBjdGlT
dHViKHZtLCBpbnRlcm5hbEZ1bmN0aW9uQ2FsbEdlbmVyYXRvcikuY29kZSgpOwogfQogCi1NYWNy
b0Fzc2VtYmxlckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+IEpJVFRodW5rczo6Y3RpSW50ZXJuYWxG
dW5jdGlvbkNvbnN0cnVjdChWTSogdm0pCitNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUVGh1bmtQ
dHJUYWc+IEpJVFRodW5rczo6Y3RpSW50ZXJuYWxGdW5jdGlvbkNvbnN0cnVjdChWTSYgdm0pCiB7
CiAgICAgQVNTRVJUKFZNOjpjYW5Vc2VKSVQoKSk7CiAgICAgcmV0dXJuIGN0aVN0dWIodm0sIGlu
dGVybmFsRnVuY3Rpb25Db25zdHJ1Y3RHZW5lcmF0b3IpLmNvZGUoKTsKIH0KIAotTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVRUaHVua3M6OmN0aVN0dWIoVk0qIHZtLCBU
aHVua0dlbmVyYXRvciBnZW5lcmF0b3IpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IEpJVFRodW5rczo6Y3RpU3R1YihWTSYgdm0sIFRodW5rR2VuZXJhdG9yIGdlbmVyYXRv
cikKIHsKICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2xvY2spOwogICAgIENUSVN0dWJNYXA6OkFk
ZFJlc3VsdCBlbnRyeSA9IG1fY3RpU3R1Yk1hcC5hZGQoZ2VuZXJhdG9yLCBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+KCkpOwpAQCAtMTA4LDEyICsxMDgsMTIgQEAgdm9pZCBK
SVRUaHVua3M6OmZpbmFsaXplKEhhbmRsZTxVbmtub3duPgogICAgIHdlYWtSZW1vdmUoKm1faG9z
dEZ1bmN0aW9uU3R1Yk1hcCwgc3RkOjptYWtlX3R1cGxlKG5hdGl2ZUV4ZWN1dGFibGUtPmZ1bmN0
aW9uKCksIG5hdGl2ZUV4ZWN1dGFibGUtPmNvbnN0cnVjdG9yKCksIG5hdGl2ZUV4ZWN1dGFibGUt
Pm5hbWUoKSksIG5hdGl2ZUV4ZWN1dGFibGUpOwogfQogCi1OYXRpdmVFeGVjdXRhYmxlKiBKSVRU
aHVua3M6Omhvc3RGdW5jdGlvblN0dWIoVk0qIHZtLCBUYWdnZWROYXRpdmVGdW5jdGlvbiBmdW5j
dGlvbiwgVGFnZ2VkTmF0aXZlRnVuY3Rpb24gY29uc3RydWN0b3IsIGNvbnN0IFN0cmluZyYgbmFt
ZSkKK05hdGl2ZUV4ZWN1dGFibGUqIEpJVFRodW5rczo6aG9zdEZ1bmN0aW9uU3R1YihWTSYgdm0s
IFRhZ2dlZE5hdGl2ZUZ1bmN0aW9uIGZ1bmN0aW9uLCBUYWdnZWROYXRpdmVGdW5jdGlvbiBjb25z
dHJ1Y3RvciwgY29uc3QgU3RyaW5nJiBuYW1lKQogewogICAgIHJldHVybiBob3N0RnVuY3Rpb25T
dHViKHZtLCBmdW5jdGlvbiwgY29uc3RydWN0b3IsIG51bGxwdHIsIE5vSW50cmluc2ljLCBudWxs
cHRyLCBuYW1lKTsKIH0KIAotTmF0aXZlRXhlY3V0YWJsZSogSklUVGh1bmtzOjpob3N0RnVuY3Rp
b25TdHViKFZNKiB2bSwgVGFnZ2VkTmF0aXZlRnVuY3Rpb24gZnVuY3Rpb24sIFRhZ2dlZE5hdGl2
ZUZ1bmN0aW9uIGNvbnN0cnVjdG9yLCBUaHVua0dlbmVyYXRvciBnZW5lcmF0b3IsIEludHJpbnNp
YyBpbnRyaW5zaWMsIGNvbnN0IERPTUpJVDo6U2lnbmF0dXJlKiBzaWduYXR1cmUsIGNvbnN0IFN0
cmluZyYgbmFtZSkKK05hdGl2ZUV4ZWN1dGFibGUqIEpJVFRodW5rczo6aG9zdEZ1bmN0aW9uU3R1
YihWTSYgdm0sIFRhZ2dlZE5hdGl2ZUZ1bmN0aW9uIGZ1bmN0aW9uLCBUYWdnZWROYXRpdmVGdW5j
dGlvbiBjb25zdHJ1Y3RvciwgVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yLCBJbnRyaW5zaWMgaW50
cmluc2ljLCBjb25zdCBET01KSVQ6OlNpZ25hdHVyZSogc2lnbmF0dXJlLCBjb25zdCBTdHJpbmcm
IG5hbWUpCiB7CiAgICAgQVNTRVJUKCFpc0NvbXBpbGF0aW9uVGhyZWFkKCkpOyAgICAKICAgICBB
U1NFUlQoVk06OmNhblVzZUpJVCgpKTsKQEAgLTEzMiwxMiArMTMyLDEyIEBAIE5hdGl2ZUV4ZWN1
dGFibGUqIEpJVFRodW5rczo6aG9zdEZ1bmN0aW8KICAgICAKICAgICBSZWY8SklUQ29kZT4gZm9y
Q29uc3RydWN0ID0gYWRvcHRSZWYoKm5ldyBOYXRpdmVKSVRDb2RlKE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKU0VudHJ5UHRyVGFnPjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKGN0aU5hdGl2ZUNv
bnN0cnVjdCh2bSkucmV0YWdnZWQ8SlNFbnRyeVB0clRhZz4oKSksIEpJVFR5cGU6Okhvc3RDYWxs
VGh1bmssIE5vSW50cmluc2ljKSk7CiAgICAgCi0gICAgTmF0aXZlRXhlY3V0YWJsZSogbmF0aXZl
RXhlY3V0YWJsZSA9IE5hdGl2ZUV4ZWN1dGFibGU6OmNyZWF0ZSgqdm0sIGZvckNhbGwucmVsZWFz
ZU5vbk51bGwoKSwgZnVuY3Rpb24sIFdURk1vdmUoZm9yQ29uc3RydWN0KSwgY29uc3RydWN0b3Is
IG5hbWUpOworICAgIE5hdGl2ZUV4ZWN1dGFibGUqIG5hdGl2ZUV4ZWN1dGFibGUgPSBOYXRpdmVF
eGVjdXRhYmxlOjpjcmVhdGUodm0sIGZvckNhbGwucmVsZWFzZU5vbk51bGwoKSwgZnVuY3Rpb24s
IFdURk1vdmUoZm9yQ29uc3RydWN0KSwgY29uc3RydWN0b3IsIG5hbWUpOwogICAgIHdlYWtBZGQo
Km1faG9zdEZ1bmN0aW9uU3R1Yk1hcCwgc3RkOjptYWtlX3R1cGxlKGZ1bmN0aW9uLCBjb25zdHJ1
Y3RvciwgbmFtZSksIFdlYWs8TmF0aXZlRXhlY3V0YWJsZT4obmF0aXZlRXhlY3V0YWJsZSwgdGhp
cykpOwogICAgIHJldHVybiBuYXRpdmVFeGVjdXRhYmxlOwogfQogCi1OYXRpdmVFeGVjdXRhYmxl
KiBKSVRUaHVua3M6Omhvc3RGdW5jdGlvblN0dWIoVk0qIHZtLCBUYWdnZWROYXRpdmVGdW5jdGlv
biBmdW5jdGlvbiwgVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yLCBJbnRyaW5zaWMgaW50cmluc2lj
LCBjb25zdCBTdHJpbmcmIG5hbWUpCitOYXRpdmVFeGVjdXRhYmxlKiBKSVRUaHVua3M6Omhvc3RG
dW5jdGlvblN0dWIoVk0mIHZtLCBUYWdnZWROYXRpdmVGdW5jdGlvbiBmdW5jdGlvbiwgVGh1bmtH
ZW5lcmF0b3IgZ2VuZXJhdG9yLCBJbnRyaW5zaWMgaW50cmluc2ljLCBjb25zdCBTdHJpbmcmIG5h
bWUpCiB7CiAgICAgcmV0dXJuIGhvc3RGdW5jdGlvblN0dWIodm0sIGZ1bmN0aW9uLCBjYWxsSG9z
dEZ1bmN0aW9uQXNDb25zdHJ1Y3RvciwgZ2VuZXJhdG9yLCBpbnRyaW5zaWMsIG51bGxwdHIsIG5h
bWUpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRUaHVua3MuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRodW5rcy5oCShyZXZpc2lv
biAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRodW5rcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0y
MDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtNTEsMTkgKzUxLDE5IEBAIHB1YmxpYzoKICAgICBKSVRUaHVua3MoKTsK
ICAgICB2aXJ0dWFsIH5KSVRUaHVua3MoKTsKIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxK
SVRUaHVua1B0clRhZz4gY3RpTmF0aXZlQ2FsbChWTSopOwotICAgIE1hY3JvQXNzZW1ibGVyQ29k
ZVB0cjxKSVRUaHVua1B0clRhZz4gY3RpTmF0aXZlQ29uc3RydWN0KFZNKik7Ci0gICAgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFnPiBjdGlOYXRpdmVUYWlsQ2FsbChWTSopOwot
ICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRUaHVua1B0clRhZz4gY3RpTmF0aXZlVGFpbENh
bGxXaXRob3V0U2F2ZWRUYWdzKFZNKik7Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFRo
dW5rUHRyVGFnPiBjdGlJbnRlcm5hbEZ1bmN0aW9uQ2FsbChWTSopOwotICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVB0cjxKSVRUaHVua1B0clRhZz4gY3RpSW50ZXJuYWxGdW5jdGlvbkNvbnN0cnVjdChW
TSopOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRUaHVua1B0clRhZz4gY3RpTmF0aXZl
Q2FsbChWTSYpOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRUaHVua1B0clRhZz4gY3Rp
TmF0aXZlQ29uc3RydWN0KFZNJik7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFRodW5r
UHRyVGFnPiBjdGlOYXRpdmVUYWlsQ2FsbChWTSYpOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0
cjxKSVRUaHVua1B0clRhZz4gY3RpTmF0aXZlVGFpbENhbGxXaXRob3V0U2F2ZWRUYWdzKFZNJik7
CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFnPiBjdGlJbnRlcm5hbEZ1
bmN0aW9uQ2FsbChWTSYpOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRUaHVua1B0clRh
Zz4gY3RpSW50ZXJuYWxGdW5jdGlvbkNvbnN0cnVjdChWTSYpOwogCi0gICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBjdGlTdHViKFZNKiwgVGh1bmtHZW5lcmF0b3IpOwor
ICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gY3RpU3R1YihWTSYsIFRo
dW5rR2VuZXJhdG9yKTsKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
IGV4aXN0aW5nQ1RJU3R1YihUaHVua0dlbmVyYXRvcik7CiAKLSAgICBOYXRpdmVFeGVjdXRhYmxl
KiBob3N0RnVuY3Rpb25TdHViKFZNKiwgVGFnZ2VkTmF0aXZlRnVuY3Rpb24sIFRhZ2dlZE5hdGl2
ZUZ1bmN0aW9uIGNvbnN0cnVjdG9yLCBjb25zdCBTdHJpbmcmIG5hbWUpOwotICAgIE5hdGl2ZUV4
ZWN1dGFibGUqIGhvc3RGdW5jdGlvblN0dWIoVk0qLCBUYWdnZWROYXRpdmVGdW5jdGlvbiwgVGFn
Z2VkTmF0aXZlRnVuY3Rpb24gY29uc3RydWN0b3IsIFRodW5rR2VuZXJhdG9yLCBJbnRyaW5zaWMs
IGNvbnN0IERPTUpJVDo6U2lnbmF0dXJlKiwgY29uc3QgU3RyaW5nJiBuYW1lKTsKLSAgICBOYXRp
dmVFeGVjdXRhYmxlKiBob3N0RnVuY3Rpb25TdHViKFZNKiwgVGFnZ2VkTmF0aXZlRnVuY3Rpb24s
IFRodW5rR2VuZXJhdG9yLCBJbnRyaW5zaWMsIGNvbnN0IFN0cmluZyYgbmFtZSk7CisgICAgTmF0
aXZlRXhlY3V0YWJsZSogaG9zdEZ1bmN0aW9uU3R1YihWTSYsIFRhZ2dlZE5hdGl2ZUZ1bmN0aW9u
LCBUYWdnZWROYXRpdmVGdW5jdGlvbiBjb25zdHJ1Y3RvciwgY29uc3QgU3RyaW5nJiBuYW1lKTsK
KyAgICBOYXRpdmVFeGVjdXRhYmxlKiBob3N0RnVuY3Rpb25TdHViKFZNJiwgVGFnZ2VkTmF0aXZl
RnVuY3Rpb24sIFRhZ2dlZE5hdGl2ZUZ1bmN0aW9uIGNvbnN0cnVjdG9yLCBUaHVua0dlbmVyYXRv
ciwgSW50cmluc2ljLCBjb25zdCBET01KSVQ6OlNpZ25hdHVyZSosIGNvbnN0IFN0cmluZyYgbmFt
ZSk7CisgICAgTmF0aXZlRXhlY3V0YWJsZSogaG9zdEZ1bmN0aW9uU3R1YihWTSYsIFRhZ2dlZE5h
dGl2ZUZ1bmN0aW9uLCBUaHVua0dlbmVyYXRvciwgSW50cmluc2ljLCBjb25zdCBTdHJpbmcmIG5h
bWUpOwogCiAgICAgdm9pZCBjbGVhckhvc3RGdW5jdGlvblN0dWJzKCk7CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUV29ya2xpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUV29ya2xpc3QuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFdvcmtsaXN0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC03NSw3ICs3NSw3IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAgICAgQ29kZUJsb2NrKiBjb2Rl
QmxvY2soKSB7IHJldHVybiBtX2NvZGVCbG9jazsgfQotICAgIFZNKiB2bSgpIHsgcmV0dXJuIG1f
Y29kZUJsb2NrLT52bSgpOyB9CisgICAgVk0mIHZtKCkgeyByZXR1cm4gbV9jb2RlQmxvY2stPnZt
KCk7IH0KICAgICAKICAgICBib29sIGlzRmluaXNoZWRDb21waWxpbmcoKQogICAgIHsKQEAgLTE3
OSw3ICsxNzksNyBAQCBib29sIEpJVFdvcmtsaXN0Ojpjb21wbGV0ZUFsbEZvclZNKFZNJiB2CiAg
ICAgICAgICAgICAgICAgYm9vbCBkaWRGaW5kVW5maW5pc2hlZFBsYW4gPSBmYWxzZTsKICAgICAg
ICAgICAgICAgICBtX3BsYW5zLnJlbW92ZUFsbE1hdGNoaW5nKAogICAgICAgICAgICAgICAgICAg
ICBbJl0gKFJlZlB0cjxQbGFuPiYgcGxhbikgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KHBsYW4tPnZtKCkgIT0gJnZtKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCZwbGFuLT52
bSgpICE9ICZ2bSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXBsYW4tPmlzRmluaXNoZWRDb21waWxpbmcoKSkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZEZpbmRVbmZpbmlzaGVkUGxhbiA9IHRy
dWU7CkBAIC0yMTYsNyArMjE2LDcgQEAgdm9pZCBKSVRXb3JrbGlzdDo6cG9sbChWTSYgdm0pCiAg
ICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKCptX2xvY2spOwogICAgICAgICBtX3BsYW5zLnJlbW92
ZUFsbE1hdGNoaW5nKAogICAgICAgICAgICAgWyZdIChSZWZQdHI8UGxhbj4mIHBsYW4pIHsKLSAg
ICAgICAgICAgICAgICBpZiAocGxhbi0+dm0oKSAhPSAmdm0pCisgICAgICAgICAgICAgICAgaWYg
KCZwbGFuLT52bSgpICE9ICZ2bSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICAgICAgICAgIGlmICghcGxhbi0+aXNGaW5pc2hlZENvbXBpbGluZygpKQogICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0yMzAsNyArMjMwLDcgQEAgdm9pZCBKSVRX
b3JrbGlzdDo6cG9sbChWTSYgdm0pCiAKIHZvaWQgSklUV29ya2xpc3Q6OmNvbXBpbGVMYXRlcihD
b2RlQmxvY2sqIGNvZGVCbG9jaywgdW5zaWduZWQgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVPZmZzZXQp
CiB7Ci0gICAgRGVmZXJHQyBkZWZlckdDKGNvZGVCbG9jay0+dm0oKS0+aGVhcCk7CisgICAgRGVm
ZXJHQyBkZWZlckdDKGNvZGVCbG9jay0+dm0oKS5oZWFwKTsKICAgICBSRUxFQVNFX0FTU0VSVChj
b2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5rKTsKICAgICAK
ICAgICBpZiAoY29kZUJsb2NrLT5tX2RpZEZhaWxKSVRDb21waWxhdGlvbikgewpAQCAtMjgyLDgg
KzI4Miw4IEBAIHZvaWQgSklUV29ya2xpc3Q6OmNvbXBpbGVMYXRlcihDb2RlQmxvY2sKIAogdm9p
ZCBKSVRXb3JrbGlzdDo6Y29tcGlsZU5vdyhDb2RlQmxvY2sqIGNvZGVCbG9jaywgdW5zaWduZWQg
bG9vcE9TUkVudHJ5Qnl0ZWNvZGVPZmZzZXQpCiB7Ci0gICAgVk0qIHZtID0gY29kZUJsb2NrLT52
bSgpOwotICAgIERlZmVyR0MgZGVmZXJHQyh2bS0+aGVhcCk7CisgICAgVk0mIHZtID0gY29kZUJs
b2NrLT52bSgpOworICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKICAgICBpZiAoY29kZUJs
b2NrLT5qaXRUeXBlKCkgIT0gSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuaykKICAgICAgICAgcmV0
dXJuOwogICAgIApAQCAtMjk2LDcgKzI5Niw3IEBAIHZvaWQgSklUV29ya2xpc3Q6OmNvbXBpbGVO
b3coQ29kZUJsb2NrKiAKICAgICBpZiAoaXNQbGFubmVkKSB7CiAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKE9wdGlvbnM6OnVzZUNvbmN1cnJlbnRKSVQoKSk7CiAgICAgICAgIC8vIFRoaXMgaXMgZXhw
ZW5zaXZlLCBidXQgcHJvYmFibHkgZ29vZCBlbm91Z2guCi0gICAgICAgIGNvbXBsZXRlQWxsRm9y
Vk0oKnZtKTsKKyAgICAgICAgY29tcGxldGVBbGxGb3JWTSh2bSk7CiAgICAgfQogICAgIAogICAg
IC8vIE5vdyBpdCBtaWdodCBiZSBjb21waWxlZCEKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvUmVwYXRjaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9SZXBhdGNoLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9SZXBhdGNoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzcsNyArNzcsNyBAQCBzdGF0aWMg
RnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiByZWFkCiAjaWYgRU5BQkxFKEZUTF9KSVQpCiAg
ICAgaWYgKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkZUTEpJVCkgewogICAgICAg
ICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+IHRodW5rID0gTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyPE9wZXJhdGlvblB0clRhZz46OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVz
cyh0YXJnZXQuZXhlY3V0YWJsZUFkZHJlc3MoKSkucmV0YWdnZWQ8SklUVGh1bmtQdHJUYWc+KCk7
Ci0gICAgICAgIHJldHVybiBjb2RlQmxvY2stPnZtKCktPmZ0bFRodW5rcy0+a2V5Rm9yU2xvd1Bh
dGhDYWxsVGh1bmsodGh1bmspLmNhbGxUYXJnZXQoKS5yZXRhZ2dlZDxDRnVuY3Rpb25QdHJUYWc+
KCk7CisgICAgICAgIHJldHVybiBjb2RlQmxvY2stPnZtKCkuZnRsVGh1bmtzLT5rZXlGb3JTbG93
UGF0aENhbGxUaHVuayh0aHVuaykuY2FsbFRhcmdldCgpLnJldGFnZ2VkPENGdW5jdGlvblB0clRh
Zz4oKTsKICAgICB9CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShjb2RlQmxvY2spOwpAQCAtODks
NyArODksNyBAQCB2b2lkIGZ0bFRodW5rQXdhcmVSZXBhdGNoQ2FsbChDb2RlQmxvY2sqCiB7CiAj
aWYgRU5BQkxFKEZUTF9KSVQpCiAgICAgaWYgKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5
cGU6OkZUTEpJVCkgewotICAgICAgICBWTSYgdm0gPSAqY29kZUJsb2NrLT52bSgpOworICAgICAg
ICBWTSYgdm0gPSBjb2RlQmxvY2stPnZtKCk7CiAgICAgICAgIEZUTDo6VGh1bmtzJiB0aHVua3Mg
PSAqdm0uZnRsVGh1bmtzOwogICAgICAgICBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+IHRh
cmdldCA9IE1hY3JvQXNzZW1ibGVyOjpyZWFkQ2FsbFRhcmdldDxPcGVyYXRpb25QdHJUYWc+KGNh
bGwpOwogICAgICAgICBhdXRvIHNsb3dQYXRoVGh1bmsgPSBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8
SklUVGh1bmtQdHJUYWc+OjpjcmVhdGVGcm9tRXhlY3V0YWJsZUFkZHJlc3ModGFyZ2V0LnJldGFn
Z2VkRXhlY3V0YWJsZUFkZHJlc3M8SklUVGh1bmtQdHJUYWc+KCkpOwpAQCAtNzk5LDIxICs3OTks
MjEgQEAgdm9pZCByZXBhdGNoSW5zdGFuY2VPZigKICAgICAgICAgZnRsVGh1bmtBd2FyZVJlcGF0
Y2hDYWxsKGV4ZWMtPmNvZGVCbG9jaygpLCBzdHViSW5mby5zbG93UGF0aENhbGxMb2NhdGlvbigp
LCBvcGVyYXRpb25JbnN0YW5jZU9mR2VuZXJpYyk7CiB9CiAKLXN0YXRpYyB2b2lkIGxpbmtTbG93
Rm9yKFZNKiwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8sIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRTdHViUm91dGluZVB0clRhZz4gY29kZVJlZikKK3N0YXRpYyB2b2lkIGxpbmtTbG93Rm9y
KFZNJiwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8sIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRTdHViUm91dGluZVB0clRhZz4gY29kZVJlZikKIHsKICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVw
YXRjaE5lYXJDYWxsKGNhbGxMaW5rSW5mby5jYWxsUmV0dXJuTG9jYXRpb24oKSwgQ29kZUxvY2F0
aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KGNvZGVSZWYuY29kZSgpKSk7CiB9CiAKLXN0
YXRpYyB2b2lkIGxpbmtTbG93Rm9yKFZNKiB2bSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8s
IFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvcikKK3N0YXRpYyB2b2lkIGxpbmtTbG93Rm9yKFZNJiB2
bSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8sIFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvcikK
IHsKLSAgICBsaW5rU2xvd0Zvcih2bSwgY2FsbExpbmtJbmZvLCB2bS0+Z2V0Q1RJU3R1YihnZW5l
cmF0b3IpLnJldGFnZ2VkPEpJVFN0dWJSb3V0aW5lUHRyVGFnPigpKTsKKyAgICBsaW5rU2xvd0Zv
cih2bSwgY2FsbExpbmtJbmZvLCB2bS5nZXRDVElTdHViKGdlbmVyYXRvcikucmV0YWdnZWQ8SklU
U3R1YlJvdXRpbmVQdHJUYWc+KCkpOwogfQogCi1zdGF0aWMgdm9pZCBsaW5rU2xvd0ZvcihWTSog
dm0sIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvKQorc3RhdGljIHZvaWQgbGlua1Nsb3dGb3Io
Vk0mIHZtLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykKIHsKICAgICBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHZpcnR1YWxUaHVuayA9IHZpcnR1YWxUaHVu
a0Zvcih2bSwgY2FsbExpbmtJbmZvKTsKICAgICBsaW5rU2xvd0Zvcih2bSwgY2FsbExpbmtJbmZv
LCB2aXJ0dWFsVGh1bmspOwotICAgIGNhbGxMaW5rSW5mby5zZXRTbG93U3R1YihjcmVhdGVKSVRT
dHViUm91dGluZSh2aXJ0dWFsVGh1bmssICp2bSwgbnVsbHB0ciwgdHJ1ZSkpOworICAgIGNhbGxM
aW5rSW5mby5zZXRTbG93U3R1YihjcmVhdGVKSVRTdHViUm91dGluZSh2aXJ0dWFsVGh1bmssIHZt
LCBudWxscHRyLCB0cnVlKSk7CiB9CiAKIHN0YXRpYyBKU0NlbGwqIHdlYkFzc2VtYmx5T3duZXIo
SlNDZWxsKiBjYWxsZWUpCkBAIC04NTksMTEgKzg1OSwxMSBAQCB2b2lkIGxpbmtGb3IoCiAgICAg
ICAgIGNhbGxlZUNvZGVCbG9jay0+bGlua0luY29taW5nQ2FsbChjYWxsZXJGcmFtZSwgJmNhbGxM
aW5rSW5mbyk7CiAKICAgICBpZiAoY2FsbExpbmtJbmZvLnNwZWNpYWxpemF0aW9uS2luZCgpID09
IENvZGVGb3JDYWxsICYmIGNhbGxMaW5rSW5mby5hbGxvd1N0dWJzKCkpIHsKLSAgICAgICAgbGlu
a1Nsb3dGb3IoJnZtLCBjYWxsTGlua0luZm8sIGxpbmtQb2x5bW9ycGhpY0NhbGxUaHVua0dlbmVy
YXRvcik7CisgICAgICAgIGxpbmtTbG93Rm9yKHZtLCBjYWxsTGlua0luZm8sIGxpbmtQb2x5bW9y
cGhpY0NhbGxUaHVua0dlbmVyYXRvcik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0g
ICAgbGlua1Nsb3dGb3IoJnZtLCBjYWxsTGlua0luZm8pOworICAgIGxpbmtTbG93Rm9yKHZtLCBj
YWxsTGlua0luZm8pOwogfQogCiB2b2lkIGxpbmtEaXJlY3RGb3IoCkBAIC04NzQsMTAgKzg3NCwx
MCBAQCB2b2lkIGxpbmtEaXJlY3RGb3IoCiAgICAgCiAgICAgQ29kZUJsb2NrKiBjYWxsZXJDb2Rl
QmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKIAotICAgIFZNKiB2bSA9IGNhbGxlckNvZGVCbG9j
ay0+dm0oKTsKKyAgICBWTSYgdm0gPSBjYWxsZXJDb2RlQmxvY2stPnZtKCk7CiAgICAgCiAgICAg
QVNTRVJUKCFjYWxsTGlua0luZm8uaXNMaW5rZWQoKSk7Ci0gICAgY2FsbExpbmtJbmZvLnNldENv
ZGVCbG9jaygqdm0sIGNhbGxlckNvZGVCbG9jaywganNDYXN0PEZ1bmN0aW9uQ29kZUJsb2NrKj4o
Y2FsbGVlQ29kZUJsb2NrKSk7CisgICAgY2FsbExpbmtJbmZvLnNldENvZGVCbG9jayh2bSwgY2Fs
bGVyQ29kZUJsb2NrLCBqc0Nhc3Q8RnVuY3Rpb25Db2RlQmxvY2sqPihjYWxsZWVDb2RlQmxvY2sp
KTsKICAgICBpZiAoc2hvdWxkRHVtcERpc2Fzc2VtYmx5Rm9yKGNhbGxlckNvZGVCbG9jaykpCiAg
ICAgICAgIGRhdGFMb2coIkxpbmtpbmcgY2FsbCBpbiAiLCBGdWxsQ29kZU9yaWdpbihjYWxsZXJD
b2RlQmxvY2ssIGNhbGxMaW5rSW5mby5jb2RlT3JpZ2luKCkpLCAiIHRvICIsIHBvaW50ZXJEdW1w
KGNhbGxlZUNvZGVCbG9jayksICIsIGVudHJ5cG9pbnQgYXQgIiwgY29kZVB0ciwgIlxuIik7CiAK
QEAgLTg5MywxMiArODkzLDEyIEBAIHZvaWQgbGlua1Nsb3dGb3IoCiAgICAgRXhlY1N0YXRlKiBl
eGVjLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykKIHsKICAgICBDb2RlQmxvY2sqIGNhbGxl
ckNvZGVCbG9jayA9IGV4ZWMtPmNhbGxlckZyYW1lKCktPmNvZGVCbG9jaygpOwotICAgIFZNKiB2
bSA9IGNhbGxlckNvZGVCbG9jay0+dm0oKTsKKyAgICBWTSYgdm0gPSBjYWxsZXJDb2RlQmxvY2st
PnZtKCk7CiAgICAgCiAgICAgbGlua1Nsb3dGb3Iodm0sIGNhbGxMaW5rSW5mbyk7CiB9CiAKLXN0
YXRpYyB2b2lkIHJldmVydENhbGwoVk0qIHZtLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiBjb2RlUmVmKQorc3Rh
dGljIHZvaWQgcmV2ZXJ0Q2FsbChWTSYgdm0sIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+IGNvZGVSZWYpCiB7CiAg
ICAgaWYgKGNhbGxMaW5rSW5mby5pc0RpcmVjdCgpKSB7CiAgICAgICAgIGNhbGxMaW5rSW5mby5j
bGVhckNvZGVCbG9jaygpOwpAQCAtOTMwLDcgKzkzMCw3IEBAIHZvaWQgdW5saW5rRm9yKFZNJiB2
bSwgQ2FsbExpbmtJbmZvJiBjYWwKICAgICBpZiAoT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCkp
CiAgICAgICAgIGRhdGFMb2coIlVubGlua2luZyBjYWxsIGF0ICIsIGNhbGxMaW5rSW5mby5ob3RQ
YXRoT3RoZXIoKSwgIlxuIik7CiAgICAgCi0gICAgcmV2ZXJ0Q2FsbCgmdm0sIGNhbGxMaW5rSW5m
bywgdm0uZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5yZXRhZ2dlZDxKSVRTdHVi
Um91dGluZVB0clRhZz4oKSk7CisgICAgcmV2ZXJ0Q2FsbCh2bSwgY2FsbExpbmtJbmZvLCB2bS5n
ZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLnJldGFnZ2VkPEpJVFN0dWJSb3V0aW5l
UHRyVGFnPigpKTsKIH0KIAogc3RhdGljIHZvaWQgbGlua1ZpcnR1YWxGb3IoRXhlY1N0YXRlKiBl
eGVjLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykKQEAgLTk0Miw4ICs5NDIsOCBAQCBzdGF0
aWMgdm9pZCBsaW5rVmlydHVhbEZvcihFeGVjU3RhdGUqIGV4CiAgICAgaWYgKHNob3VsZER1bXBE
aXNhc3NlbWJseUZvcihjYWxsZXJDb2RlQmxvY2spKQogICAgICAgICBkYXRhTG9nKCJMaW5raW5n
IHZpcnR1YWwgY2FsbCBhdCAiLCBGdWxsQ29kZU9yaWdpbihjYWxsZXJDb2RlQmxvY2ssIGNhbGxl
ckZyYW1lLT5jb2RlT3JpZ2luKCkpLCAiXG4iKTsKIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRTdHViUm91dGluZVB0clRhZz4gdmlydHVhbFRodW5rID0gdmlydHVhbFRodW5rRm9yKCZ2
bSwgY2FsbExpbmtJbmZvKTsKLSAgICByZXZlcnRDYWxsKCZ2bSwgY2FsbExpbmtJbmZvLCB2aXJ0
dWFsVGh1bmspOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91dGluZVB0clRh
Zz4gdmlydHVhbFRodW5rID0gdmlydHVhbFRodW5rRm9yKHZtLCBjYWxsTGlua0luZm8pOworICAg
IHJldmVydENhbGwodm0sIGNhbGxMaW5rSW5mbywgdmlydHVhbFRodW5rKTsKICAgICBjYWxsTGlu
a0luZm8uc2V0U2xvd1N0dWIoY3JlYXRlSklUU3R1YlJvdXRpbmUodmlydHVhbFRodW5rLCB2bSwg
bnVsbHB0ciwgdHJ1ZSkpOwogICAgIGNhbGxMaW5rSW5mby5zZXRDbGVhcmVkQnlWaXJ0dWFsKCk7
CiB9CkBAIC0xMjQ0LDcgKzEyNDQsNyBAQCB2b2lkIGxpbmtQb2x5bW9ycGhpY0NhbGwoCiAgICAg
Ly8gVGhlIG9yaWdpbmFsIHNsb3cgcGF0aCBpcyB1bnJlYWNoYWJsZSBvbiA2NC1iaXRzLCBidXQg
c3RpbGwKICAgICAvLyByZWFjaGFibGUgb24gMzItYml0cyBzaW5jZSBhIG5vbi1jZWxsIGNhbGxl
ZSB3aWxsIGFsd2F5cwogICAgIC8vIHRyaWdnZXIgdGhlIHNsb3cgcGF0aAotICAgIGxpbmtTbG93
Rm9yKCZ2bSwgY2FsbExpbmtJbmZvKTsKKyAgICBsaW5rU2xvd0Zvcih2bSwgY2FsbExpbmtJbmZv
KTsKICAgICAKICAgICAvLyBJZiB0aGVyZSBoYWQgYmVlbiBhIHByZXZpb3VzIHN0dWIgcm91dGlu
ZSwgdGhhdCBvbmUgd2lsbCBkaWUgYXMgc29vbiBhcyB0aGUgR0MgcnVucyBhbmQgc2VlcwogICAg
IC8vIHRoYXQgaXQncyBubyBsb25nZXIgb24gc3RhY2suCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1NwZWNpYWxpemVkVGh1bmtKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1NwZWNpYWxpemVkVGh1bmtKSVQuaAkocmV2aXNpb24gMjQ5MTI4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TcGVjaWFsaXplZFRodW5rSklULmgJKHdvcmtp
bmcgY29weSkKQEAgLTM3LDggKzM3LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgU3Bl
Y2lhbGl6ZWRUaHVua0pJVCA6IHB1YmxpYyBKU0ludGVyZmFjZUpJVCB7CiAgICAgcHVibGljOgog
ICAgICAgICBzdGF0aWMgY29uc3QgaW50IFRoaXNBcmd1bWVudCA9IC0xOwotICAgICAgICBTcGVj
aWFsaXplZFRodW5rSklUKFZNKiB2bSwgaW50IGV4cGVjdGVkQXJnQ291bnQpCi0gICAgICAgICAg
ICA6IEpTSW50ZXJmYWNlSklUKHZtKQorICAgICAgICBTcGVjaWFsaXplZFRodW5rSklUKFZNJiB2
bSwgaW50IGV4cGVjdGVkQXJnQ291bnQpCisgICAgICAgICAgICA6IEpTSW50ZXJmYWNlSklUKCZ2
bSkKICAgICAgICAgewogICAgICAgICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoKTsKICAgICAg
ICAgICAgIGVtaXRTYXZlVGhlbk1hdGVyaWFsaXplVGFnUmVnaXN0ZXJzKCk7CkBAIC00Niw4ICs0
Niw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgbV9mYWlsdXJlcy5hcHBlbmQoYnJh
bmNoMzIoTm90RXF1YWwsIHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCks
IFRydXN0ZWRJbW0zMihleHBlY3RlZEFyZ0NvdW50ICsgMSkpKTsKICAgICAgICAgfQogICAgICAg
ICAKLSAgICAgICAgZXhwbGljaXQgU3BlY2lhbGl6ZWRUaHVua0pJVChWTSogdm0pCi0gICAgICAg
ICAgICA6IEpTSW50ZXJmYWNlSklUKHZtKQorICAgICAgICBleHBsaWNpdCBTcGVjaWFsaXplZFRo
dW5rSklUKFZNJiB2bSkKKyAgICAgICAgICAgIDogSlNJbnRlcmZhY2VKSVQoJnZtKQogICAgICAg
ICB7CiAgICAgICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZSgpOwogICAgICAgICAgICAgZW1p
dFNhdmVUaGVuTWF0ZXJpYWxpemVUYWdSZWdpc3RlcnMoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9yLmgJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTMzLDcgKzMzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBWTTsKIHRlbXBsYXRlPFB0clRh
Zz4gY2xhc3MgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOwogCi11c2luZyBUaHVua0dlbmVyYXRvciA9
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gKCopKFZNKik7Cit1c2luZyBU
aHVua0dlbmVyYXRvciA9IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gKCop
KFZNJik7CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTYwLDcgKzYwLDcgQEAgaW5saW5lIHZvaWQgZW1pdFBvaW50ZXJWYWxpZGF0aW9uKENDYWxs
SAogCiAvLyBXZSB3aWxsIGp1bXAgaGVyZSBpZiB0aGUgSklUIGNvZGUgdHJpZXMgdG8gbWFrZSBh
IGNhbGwsIGJ1dCB0aGUKIC8vIGxpbmtpbmcgaGVscGVyIChDKysgY29kZSkgZGVjaWRlcyB0byB0
aHJvdyBhbiBleGNlcHRpb24gaW5zdGVhZC4KLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gdGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKFZNKiB2bSkK
K01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gdGhyb3dFeGNlcHRpb25Gcm9t
Q2FsbFNsb3dQYXRoR2VuZXJhdG9yKFZNJiB2bSkKIHsKICAgICBDQ2FsbEhlbHBlcnMgaml0Owog
ICAgIApAQCAtNjgsMjMgKzY4LDIzIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gdGgKICAgICAvLyBldmVuIHRob3VnaCB3ZSB3b24ndCB1c2UgaXQuCiAgICAgaml0LnBy
ZXNlcnZlUmV0dXJuQWRkcmVzc0FmdGVyQ2FsbChHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25SZXR1
cm5HUFIpOwogCi0gICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVz
QnVmZmVyKHZtLT50b3BFbnRyeUZyYW1lKTsKKyAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9FbnRy
eUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0udG9wRW50cnlGcmFtZSk7CiAKLSAgICBqaXQuc2V0
dXBBcmd1bWVudHM8ZGVjbHR5cGUobG9va3VwRXhjZXB0aW9uSGFuZGxlcik+KENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbVB0cih2bSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKKyAgICBq
aXQuc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUobG9va3VwRXhjZXB0aW9uSGFuZGxlcik+KENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbVB0cigmdm0pLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7
CiAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHRhZ0NGdW5jdGlvblB0
cjxPcGVyYXRpb25QdHJUYWc+KGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIpKSwgR1BSSW5mbzo6bm9u
QXJnR1BSMCk7CiAgICAgZW1pdFBvaW50ZXJWYWxpZGF0aW9uKGppdCwgR1BSSW5mbzo6bm9uQXJn
R1BSMCwgT3BlcmF0aW9uUHRyVGFnKTsKICAgICBqaXQuY2FsbChHUFJJbmZvOjpub25BcmdHUFIw
LCBPcGVyYXRpb25QdHJUYWcpOwotICAgIGppdC5qdW1wVG9FeGNlcHRpb25IYW5kbGVyKCp2bSk7
CisgICAgaml0Lmp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIodm0pOwogCiAgICAgTGlua0J1ZmZlciBw
YXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCk7CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NP
REUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCAiVGhyb3cgZXhjZXB0aW9uIGZyb20gY2Fs
bCBzbG93IHBhdGggdGh1bmsiKTsKIH0KIAotc3RhdGljIHZvaWQgc2xvd1BhdGhGb3IoQ0NhbGxI
ZWxwZXJzJiBqaXQsIFZNKiB2bSwgU3BydF9KSVRPcGVyYXRpb25fRUNsaSBzbG93UGF0aEZ1bmN0
aW9uKQorc3RhdGljIHZvaWQgc2xvd1BhdGhGb3IoQ0NhbGxIZWxwZXJzJiBqaXQsIFZNJiB2bSwg
U3BydF9KSVRPcGVyYXRpb25fRUNsaSBzbG93UGF0aEZ1bmN0aW9uKQogewotICAgIGppdC5zYW5p
dGl6ZVN0YWNrSW5saW5lKCp2bSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7CisgICAgaml0LnNhbml0
aXplU3RhY2tJbmxpbmUodm0sIEdQUkluZm86Om5vbkFyZ0dQUjApOwogICAgIGppdC5lbWl0RnVu
Y3Rpb25Qcm9sb2d1ZSgpOwotICAgIGppdC5zdG9yZVB0cihHUFJJbmZvOjpjYWxsRnJhbWVSZWdp
c3RlciwgJnZtLT50b3BDYWxsRnJhbWUpOworICAgIGppdC5zdG9yZVB0cihHUFJJbmZvOjpjYWxs
RnJhbWVSZWdpc3RlciwgJnZtLnRvcENhbGxGcmFtZSk7CiAjaWYgT1MoV0lORE9XUykgJiYgQ1BV
KFg4Nl82NCkKICAgICAvLyBXaW5kb3dzIFg4Nl82NCBuZWVkcyBzb21lIHNwYWNlIHBvaW50ZWQg
dG8gYnkgYXJnMCBmb3IgcmV0dXJuIHR5cGVzIGxhcmdlciB0aGFuIDY0IGJpdHMuCiAgICAgLy8g
T3RoZXIgYXJndW1lbnQgdmFsdWVzIGFyZSBzaGlmdCBieSAxLiBVc2Ugc3BhY2Ugb24gdGhlIHN0
YWNrIGZvciBvdXIgdHdvIHJldHVybiB2YWx1ZXMuCkBAIC0xMzEsNyArMTMxLDcgQEAgc3RhdGlj
IHZvaWQgc2xvd1BhdGhGb3IoQ0NhbGxIZWxwZXJzJiBqaQogICAgIGppdC5mYXJKdW1wKEdQUklu
Zm86OnJldHVyblZhbHVlR1BSLCBKU0VudHJ5UHRyVGFnKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiBsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKFZNKiB2bSkKK01h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gbGlua0NhbGxUaHVua0dlbmVyYXRv
cihWTSYgdm0pCiB7CiAgICAgLy8gVGhlIHJldHVybiBhZGRyZXNzIGlzIG9uIHRoZSBzdGFjayBv
ciBpbiB0aGUgbGluayByZWdpc3Rlci4gV2Ugd2lsbCBoZW5jZQogICAgIC8vIHNhdmUgdGhlIHJl
dHVybiBhZGRyZXNzIHRvIHRoZSBjYWxsIGZyYW1lIHdoaWxlIHdlIG1ha2UgYSBDKysgZnVuY3Rp
b24gY2FsbApAQCAtMTQ4LDcgKzE0OCw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gbGkKIAogLy8gRm9yIGNsb3N1cmUgb3B0aW1pemF0aW9ucywgd2Ugb25seSBpbmNs
dWRlIGNhbGxzLCBzaW5jZSBpZiB5b3UncmUgdXNpbmcgY2xvc3VyZXMgZm9yCiAvLyBvYmplY3Qg
Y29uc3RydWN0aW9uIHRoZW4geW91J3JlIGdvaW5nIHRvIGxvc2UgYmlnIHRpbWUgYW55d2F5Lgot
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBsaW5rUG9seW1vcnBoaWNDYWxs
VGh1bmtHZW5lcmF0b3IoVk0qIHZtKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBsaW5rUG9seW1vcnBoaWNDYWxsVGh1bmtHZW5lcmF0b3IoVk0mIHZtKQogewogICAgIEND
YWxsSGVscGVycyBqaXQ7CiAKQEAgLTE2Miw3ICsxNjIsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IGxpCiAvLyBwYXRoIHZpcnR1YWwgY2FsbCBzbyB0aGF0IHdlIGNh
biBlbmFibGUgZmFzdCB0YWlsIGNhbGxzIGZvciBtZWdhbW9ycGhpYwogLy8gdmlydHVhbCBjYWxs
cyBieSB1c2luZyB0aGUgc2h1ZmZsZXIuCiAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTQ4ODMxCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQ
dHJUYWc+IHZpcnR1YWxUaHVua0ZvcihWTSogdm0sIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZv
KQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiB2aXJ0dWFsVGh1
bmtGb3IoVk0mIHZtLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykKIHsKICAgICAvLyBUaGUg
Y2FsbGVlIGlzIGluIHJlZ1QwIChmb3IgSlNWQUxVRTMyXzY0LCB0aGUgdGFnIGlzIGluIHJlZ1Qx
KS4KICAgICAvLyBUaGUgcmV0dXJuIGFkZHJlc3MgaXMgb24gdGhlIHN0YWNrLCBvciBpbiB0aGUg
bGluayByZWdpc3Rlci4gV2Ugd2lsbCBoZW5jZQpAQCAtMjIxLDcgKzIyMSw3IEBAIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91dGluZVB0clQKIAogICAgIG5vdEpTRnVuY3Rpb24ubGlu
aygmaml0KTsKICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5jaElmTm90VHlwZShHUFJJbmZv
OjpyZWdUMCwgSW50ZXJuYWxGdW5jdGlvblR5cGUpKTsKLSAgICB2b2lkKiBleGVjdXRhYmxlQWRk
cmVzcyA9IHZtLT5nZXRDVElJbnRlcm5hbEZ1bmN0aW9uVHJhbXBvbGluZUZvcihjYWxsTGlua0lu
Zm8uc3BlY2lhbGl6YXRpb25LaW5kKCkpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgdm9pZCog
ZXhlY3V0YWJsZUFkZHJlc3MgPSB2bS5nZXRDVElJbnRlcm5hbEZ1bmN0aW9uVHJhbXBvbGluZUZv
cihjYWxsTGlua0luZm8uc3BlY2lhbGl6YXRpb25LaW5kKCkpLmV4ZWN1dGFibGVBZGRyZXNzKCk7
CiAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGV4ZWN1dGFibGVBZGRy
ZXNzKSwgR1BSSW5mbzo6cmVnVDQpOwogICAgIGppdC5qdW1wKCkubGlua1RvKGNhbGxDb2RlLCAm
aml0KTsKIApAQCAtMjQwLDE0ICsyNDAsMTQgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFN0
dWJSb3V0aW5lUHRyVAogZW51bSBUaHVua0VudHJ5VHlwZSB7IEVudGVyVmlhQ2FsbCwgRW50ZXJW
aWFKdW1wV2l0aFNhdmVkVGFncywgRW50ZXJWaWFKdW1wV2l0aG91dFNhdmVkVGFncyB9OwogZW51
bSBjbGFzcyBUaHVua0Z1bmN0aW9uVHlwZSB7IEpTRnVuY3Rpb24sIEludGVybmFsRnVuY3Rpb24g
fTsKIAotc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gbmF0aXZl
Rm9yR2VuZXJhdG9yKFZNKiB2bSwgVGh1bmtGdW5jdGlvblR5cGUgdGh1bmtGdW5jdGlvblR5cGUs
IENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCwgVGh1bmtFbnRyeVR5cGUgZW50cnlUeXBlID0g
RW50ZXJWaWFDYWxsKQorc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gbmF0aXZlRm9yR2VuZXJhdG9yKFZNJiB2bSwgVGh1bmtGdW5jdGlvblR5cGUgdGh1bmtGdW5j
dGlvblR5cGUsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCwgVGh1bmtFbnRyeVR5cGUgZW50
cnlUeXBlID0gRW50ZXJWaWFDYWxsKQogewogICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBh
YmxlIHRvIGxvZyBTaGFkb3dDaGlja2VuIHByb2xvZ3VlIHBhY2tldHMuCiAgICAgLy8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NTY4OQogICAgIAogICAgIGludCBl
eGVjdXRhYmxlT2Zmc2V0VG9GdW5jdGlvbiA9IE5hdGl2ZUV4ZWN1dGFibGU6Om9mZnNldE9mTmF0
aXZlRnVuY3Rpb25Gb3Ioa2luZCk7CiAgICAgCi0gICAgSlNJbnRlcmZhY2VKSVQgaml0KHZtKTsK
KyAgICBKU0ludGVyZmFjZUpJVCBqaXQoJnZtKTsKIAogICAgIHN3aXRjaCAoZW50cnlUeXBlKSB7
CiAgICAgY2FzZSBFbnRlclZpYUNhbGw6CkBAIC0yNjYsNyArMjY2LDcgQEAgc3RhdGljIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0cgogICAgIH0KIAogICAgIGppdC5lbWl0UHV0VG9D
YWxsRnJhbWVIZWFkZXIoMCwgQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKTsKLSAgICBqaXQuc3Rv
cmVQdHIoSlNJbnRlcmZhY2VKSVQ6OmNhbGxGcmFtZVJlZ2lzdGVyLCAmdm0tPnRvcENhbGxGcmFt
ZSk7CisgICAgaml0LnN0b3JlUHRyKEpTSW50ZXJmYWNlSklUOjpjYWxsRnJhbWVSZWdpc3Rlciwg
JnZtLnRvcENhbGxGcmFtZSk7CiAKICNpZiBDUFUoWDg2KQogICAgIC8vIENhbGxpbmcgY29udmVu
dGlvbjogICAgICBmKGVjeCwgZWR4LCAuLi4pOwpAQCAtMzYzLDEyICszNjMsMTIgQEAgc3RhdGlj
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0cgogCiAgICAgLy8gQ2hlY2sgZm9yIGFu
IGV4Y2VwdGlvbgogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgaml0LmxvYWQ2NCh2bS0+YWRkcmVz
c09mRXhjZXB0aW9uKCksIEpTSW50ZXJmYWNlSklUOjpyZWdUMik7CisgICAgaml0LmxvYWQ2NCh2
bS5hZGRyZXNzT2ZFeGNlcHRpb24oKSwgSlNJbnRlcmZhY2VKSVQ6OnJlZ1QyKTsKICAgICBKU0lu
dGVyZmFjZUpJVDo6SnVtcCBleGNlcHRpb25IYW5kbGVyID0gaml0LmJyYW5jaFRlc3Q2NChKU0lu
dGVyZmFjZUpJVDo6Tm9uWmVybywgSlNJbnRlcmZhY2VKSVQ6OnJlZ1QyKTsKICNlbHNlCiAgICAg
SlNJbnRlcmZhY2VKSVQ6Okp1bXAgZXhjZXB0aW9uSGFuZGxlciA9IGppdC5icmFuY2gzMigKICAg
ICAgICAgSlNJbnRlcmZhY2VKSVQ6Ok5vdEVxdWFsLAotICAgICAgICBKU0ludGVyZmFjZUpJVDo6
QWJzb2x1dGVBZGRyZXNzKHZtLT5hZGRyZXNzT2ZFeGNlcHRpb24oKSksCisgICAgICAgIEpTSW50
ZXJmYWNlSklUOjpBYnNvbHV0ZUFkZHJlc3Modm0uYWRkcmVzc09mRXhjZXB0aW9uKCkpLAogICAg
ICAgICBKU0ludGVyZmFjZUpJVDo6VHJ1c3RlZEltbTMyKDApKTsKICNlbmRpZgogCkBAIC0zNzks
OCArMzc5LDggQEAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0cgogICAg
IC8vIEhhbmRsZSBhbiBleGNlcHRpb24KICAgICBleGNlcHRpb25IYW5kbGVyLmxpbmsoJmppdCk7
CiAKLSAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIo
dm0tPnRvcEVudHJ5RnJhbWUpOwotICAgIGppdC5zdG9yZVB0cihKU0ludGVyZmFjZUpJVDo6Y2Fs
bEZyYW1lUmVnaXN0ZXIsICZ2bS0+dG9wQ2FsbEZyYW1lKTsKKyAgICBqaXQuY29weUNhbGxlZVNh
dmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0udG9wRW50cnlGcmFtZSk7CisgICAg
aml0LnN0b3JlUHRyKEpTSW50ZXJmYWNlSklUOjpjYWxsRnJhbWVSZWdpc3RlciwgJnZtLnRvcENh
bGxGcmFtZSk7CiAKICNpZiBDUFUoWDg2KSAmJiBVU0UoSlNWQUxVRTMyXzY0KQogICAgIGppdC5z
dWJQdHIoSlNJbnRlcmZhY2VKSVQ6OlRydXN0ZWRJbW0zMig0KSwgSlNJbnRlcmZhY2VKSVQ6OnN0
YWNrUG9pbnRlclJlZ2lzdGVyKTsKQEAgLTQwMSw0NSArNDAxLDQ1IEBAIHN0YXRpYyBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHIKICAgICBqaXQuYWRkUHRyKEpTSW50ZXJmYWNlSklU
OjpUcnVzdGVkSW1tMzIoNCAqIHNpemVvZihpbnQ2NF90KSksIEpTSW50ZXJmYWNlSklUOjpzdGFj
a1BvaW50ZXJSZWdpc3Rlcik7CiAjZW5kaWYKIAotICAgIGppdC5qdW1wVG9FeGNlcHRpb25IYW5k
bGVyKCp2bSk7CisgICAgaml0Lmp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIodm0pOwogCiAgICAgTGlu
a0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCk7CiAgICAgcmV0dXJuIEZJ
TkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCAiJXMgJXMlcyB0cmFtcG9s
aW5lIiwgdGh1bmtGdW5jdGlvblR5cGUgPT0gVGh1bmtGdW5jdGlvblR5cGU6OkpTRnVuY3Rpb24g
PyAibmF0aXZlIiA6ICJpbnRlcm5hbCIsIGVudHJ5VHlwZSA9PSBFbnRlclZpYUp1bXBXaXRoU2F2
ZWRUYWdzID8gIlRhaWwgV2l0aCBTYXZlZCBUYWdzICIgOiBlbnRyeVR5cGUgPT0gRW50ZXJWaWFK
dW1wV2l0aG91dFNhdmVkVGFncyA/ICJUYWlsIFdpdGhvdXQgU2F2ZWQgVGFncyAiIDogIiIsIHRv
Q1N0cmluZyhraW5kKS5kYXRhKCkpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IG5hdGl2ZUNhbGxHZW5lcmF0b3IoVk0qIHZtKQorTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBuYXRpdmVDYWxsR2VuZXJhdG9yKFZNJiB2bSkKIHsKICAgICBy
ZXR1cm4gbmF0aXZlRm9yR2VuZXJhdG9yKHZtLCBUaHVua0Z1bmN0aW9uVHlwZTo6SlNGdW5jdGlv
biwgQ29kZUZvckNhbGwpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IG5hdGl2ZVRhaWxDYWxsR2VuZXJhdG9yKFZNKiB2bSkKK01hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz4gbmF0aXZlVGFpbENhbGxHZW5lcmF0b3IoVk0mIHZtKQogewogICAg
IHJldHVybiBuYXRpdmVGb3JHZW5lcmF0b3Iodm0sIFRodW5rRnVuY3Rpb25UeXBlOjpKU0Z1bmN0
aW9uLCBDb2RlRm9yQ2FsbCwgRW50ZXJWaWFKdW1wV2l0aFNhdmVkVGFncyk7CiB9CiAKLU1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gbmF0aXZlVGFpbENhbGxXaXRob3V0U2F2
ZWRUYWdzR2VuZXJhdG9yKFZNKiB2bSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gbmF0aXZlVGFpbENhbGxXaXRob3V0U2F2ZWRUYWdzR2VuZXJhdG9yKFZNJiB2bSkKIHsK
ICAgICByZXR1cm4gbmF0aXZlRm9yR2VuZXJhdG9yKHZtLCBUaHVua0Z1bmN0aW9uVHlwZTo6SlNG
dW5jdGlvbiwgQ29kZUZvckNhbGwsIEVudGVyVmlhSnVtcFdpdGhvdXRTYXZlZFRhZ3MpOwogfQog
Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG5hdGl2ZUNvbnN0cnVjdEdl
bmVyYXRvcihWTSogdm0pCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG5h
dGl2ZUNvbnN0cnVjdEdlbmVyYXRvcihWTSYgdm0pCiB7CiAgICAgcmV0dXJuIG5hdGl2ZUZvckdl
bmVyYXRvcih2bSwgVGh1bmtGdW5jdGlvblR5cGU6OkpTRnVuY3Rpb24sIENvZGVGb3JDb25zdHJ1
Y3QpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGludGVybmFs
RnVuY3Rpb25DYWxsR2VuZXJhdG9yKFZNKiB2bSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gaW50ZXJuYWxGdW5jdGlvbkNhbGxHZW5lcmF0b3IoVk0mIHZtKQogewogICAg
IHJldHVybiBuYXRpdmVGb3JHZW5lcmF0b3Iodm0sIFRodW5rRnVuY3Rpb25UeXBlOjpJbnRlcm5h
bEZ1bmN0aW9uLCBDb2RlRm9yQ2FsbCk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gaW50ZXJuYWxGdW5jdGlvbkNvbnN0cnVjdEdlbmVyYXRvcihWTSogdm0pCitN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGludGVybmFsRnVuY3Rpb25Db25z
dHJ1Y3RHZW5lcmF0b3IoVk0mIHZtKQogewogICAgIHJldHVybiBuYXRpdmVGb3JHZW5lcmF0b3Io
dm0sIFRodW5rRnVuY3Rpb25UeXBlOjpJbnRlcm5hbEZ1bmN0aW9uLCBDb2RlRm9yQ29uc3RydWN0
KTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBhcml0eUZpeHVw
R2VuZXJhdG9yKFZNKiB2bSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
YXJpdHlGaXh1cEdlbmVyYXRvcihWTSYgdm0pCiB7Ci0gICAgSlNJbnRlcmZhY2VKSVQgaml0KHZt
KTsKKyAgICBKU0ludGVyZmFjZUpJVCBqaXQoJnZtKTsKIAogICAgIC8vIFdlIGVudGVyIHdpdGgg
Zml4dXAgY291bnQgaW4gYXJndW1lbnRHUFIwCiAgICAgLy8gV2UgaGF2ZSB0aGUgZ3VhcmFudGVl
IHRoYXQgYTAsIGExLCBhMiwgdDMsIHQ0IGFuZCB0NSAob3IgdDAgZm9yIFdpbmRvd3MpIGFyZSBh
bGwgZGlzdGluY3QgOi0pCkBAIC01OTAsOSArNTkwLDkgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPiBhcgogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVy
LCBKSVRUaHVua1B0clRhZywgImZpeHVwIGFyaXR5Iik7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gdW5yZWFjaGFibGVHZW5lcmF0b3IoVk0qIHZtKQorTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiB1bnJlYWNoYWJsZUdlbmVyYXRvcihWTSYg
dm0pCiB7Ci0gICAgSlNJbnRlcmZhY2VKSVQgaml0KHZtKTsKKyAgICBKU0ludGVyZmFjZUpJVCBq
aXQoJnZtKTsKIAogICAgIGppdC5icmVha3BvaW50KCk7CiAKQEAgLTYwMCw3ICs2MDAsNyBAQCBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHVuCiAgICAgcmV0dXJuIEZJTkFM
SVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCAidW5yZWFjaGFibGUgdGh1bmsi
KTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBzdHJpbmdHZXRC
eVZhbEdlbmVyYXRvcihWTSogdm0pCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IHN0cmluZ0dldEJ5VmFsR2VuZXJhdG9yKFZNJiB2bSkKIHsKICAgICAvLyByZWdUMCBpcyBK
U1N0cmluZyosIGFuZCByZWdUMSAoNjRiaXQpIG9yIHJlZ1QyICgzMmJpdCkgaXMgaW50IGluZGV4
LgogICAgIC8vIFJldHVybiByZWdUMCA9IHJlc3VsdCBKU1N0cmluZyogaWYgc3VjY2VlZHMuIE90
aGVyd2lzZSwgcmV0dXJuIHJlZ1QwID0gMC4KQEAgLTYxNCw3ICs2MTQsNyBAQCBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHN0CiAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBH
UFJJbmZvOjpyZWdUMTsKICNlbmRpZgogCi0gICAgSlNJbnRlcmZhY2VKSVQgaml0KHZtKTsKKyAg
ICBKU0ludGVyZmFjZUpJVCBqaXQoJnZtKTsKICAgICBKU0ludGVyZmFjZUpJVDo6SnVtcExpc3Qg
ZmFpbHVyZXM7CiAgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKIApAQCAtNjQwLDcgKzY0MCw3
IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gc3QKICAgICBjb250OEJp
dC5saW5rKCZqaXQpOwogCiAgICAgZmFpbHVyZXMuYXBwZW5kKGppdC5icmFuY2gzMihKU0ludGVy
ZmFjZUpJVDo6QWJvdmUsIHN0cmluZ0dQUiwgSlNJbnRlcmZhY2VKSVQ6OlRydXN0ZWRJbW0zMiht
YXhTaW5nbGVDaGFyYWN0ZXJTdHJpbmcpKSk7Ci0gICAgaml0Lm1vdmUoSlNJbnRlcmZhY2VKSVQ6
OlRydXN0ZWRJbW1QdHIodm0tPnNtYWxsU3RyaW5ncy5zaW5nbGVDaGFyYWN0ZXJTdHJpbmdzKCkp
LCBpbmRleEdQUik7CisgICAgaml0Lm1vdmUoSlNJbnRlcmZhY2VKSVQ6OlRydXN0ZWRJbW1QdHIo
dm0uc21hbGxTdHJpbmdzLnNpbmdsZUNoYXJhY3RlclN0cmluZ3MoKSksIGluZGV4R1BSKTsKICAg
ICBqaXQubG9hZFB0cihKU0ludGVyZmFjZUpJVDo6QmFzZUluZGV4KGluZGV4R1BSLCBzdHJpbmdH
UFIsIEpTSW50ZXJmYWNlSklUOjpTY2FsZVB0ciwgMCksIHN0cmluZ0dQUik7CiAgICAgaml0LnJl
dCgpOwogCkBAIC02ODIsNDIgKzY4Miw0MiBAQCBzdGF0aWMgdm9pZCBzdHJpbmdDaGFyTG9hZChT
cGVjaWFsaXplZFRoCiAgICAgY29udDhCaXQubGluaygmaml0KTsKIH0KIAotc3RhdGljIHZvaWQg
Y2hhclRvU3RyaW5nKFNwZWNpYWxpemVkVGh1bmtKSVQmIGppdCwgVk0qIHZtLCBNYWNyb0Fzc2Vt
Ymxlcjo6UmVnaXN0ZXJJRCBzcmMsIE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIGRzdCwgTWFj
cm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgc2NyYXRjaCkKK3N0YXRpYyB2b2lkIGNoYXJUb1N0cmlu
ZyhTcGVjaWFsaXplZFRodW5rSklUJiBqaXQsIFZNJiB2bSwgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lz
dGVySUQgc3JjLCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBkc3QsIE1hY3JvQXNzZW1ibGVy
OjpSZWdpc3RlcklEIHNjcmF0Y2gpCiB7CiAgICAgaml0LmFwcGVuZEZhaWx1cmUoaml0LmJyYW5j
aDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZSwgc3JjLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bTMyKG1heFNpbmdsZUNoYXJhY3RlclN0cmluZykpKTsKLSAgICBqaXQubW92ZShNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbVB0cih2bS0+c21hbGxTdHJpbmdzLnNpbmdsZUNoYXJhY3RlclN0cmlu
Z3MoKSksIHNjcmF0Y2gpOworICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
UHRyKHZtLnNtYWxsU3RyaW5ncy5zaW5nbGVDaGFyYWN0ZXJTdHJpbmdzKCkpLCBzY3JhdGNoKTsK
ICAgICBqaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHNjcmF0Y2gsIHNyYywg
TWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCAwKSwgZHN0KTsKICAgICBqaXQuYXBwZW5kRmFpbHVy
ZShqaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgZHN0KSk7CiB9CiAKLU1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gY2hhckNvZGVBdFRodW5rR2VuZXJh
dG9yKFZNKiB2bSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gY2hhckNv
ZGVBdFRodW5rR2VuZXJhdG9yKFZNJiB2bSkKIHsKICAgICBTcGVjaWFsaXplZFRodW5rSklUIGpp
dCh2bSwgMSk7CiAgICAgc3RyaW5nQ2hhckxvYWQoaml0KTsKICAgICBqaXQucmV0dXJuSW50MzIo
U3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDApOwotICAgIHJldHVybiBqaXQuZmluYWxpemUodm0t
PmppdFN0dWJzLT5jdGlOYXRpdmVUYWlsQ2FsbCh2bSksICJjaGFyQ29kZUF0Iik7CisgICAgcmV0
dXJuIGppdC5maW5hbGl6ZSh2bS5qaXRTdHVicy0+Y3RpTmF0aXZlVGFpbENhbGwodm0pLCAiY2hh
ckNvZGVBdCIpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGNo
YXJBdFRodW5rR2VuZXJhdG9yKFZNKiB2bSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gY2hhckF0VGh1bmtHZW5lcmF0b3IoVk0mIHZtKQogewogICAgIFNwZWNpYWxpemVk
VGh1bmtKSVQgaml0KHZtLCAxKTsKICAgICBzdHJpbmdDaGFyTG9hZChqaXQpOwogICAgIGNoYXJU
b1N0cmluZyhqaXQsIHZtLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCwgU3BlY2lhbGl6ZWRU
aHVua0pJVDo6cmVnVDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QxKTsKICAgICBqaXQucmV0
dXJuSlNDZWxsKFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwKTsKLSAgICByZXR1cm4gaml0LmZp
bmFsaXplKHZtLT5qaXRTdHVicy0+Y3RpTmF0aXZlVGFpbENhbGwodm0pLCAiY2hhckF0Iik7Cisg
ICAgcmV0dXJuIGppdC5maW5hbGl6ZSh2bS5qaXRTdHVicy0+Y3RpTmF0aXZlVGFpbENhbGwodm0p
LCAiY2hhckF0Iik7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
ZnJvbUNoYXJDb2RlVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPiBmcm9tQ2hhckNvZGVUaHVua0dlbmVyYXRvcihWTSYgdm0pCiB7CiAg
ICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQodm0sIDEpOwogICAgIC8vIGxvYWQgY2hhciBjb2Rl
CiAgICAgaml0LmxvYWRJbnQzMkFyZ3VtZW50KDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1Qw
KTsKICAgICBjaGFyVG9TdHJpbmcoaml0LCB2bSwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDAs
IFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMSk7
CiAgICAgaml0LnJldHVybkpTQ2VsbChTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCk7Ci0gICAg
cmV0dXJuIGppdC5maW5hbGl6ZSh2bS0+aml0U3R1YnMtPmN0aU5hdGl2ZVRhaWxDYWxsKHZtKSwg
ImZyb21DaGFyQ29kZSIpOworICAgIHJldHVybiBqaXQuZmluYWxpemUodm0uaml0U3R1YnMtPmN0
aU5hdGl2ZVRhaWxDYWxsKHZtKSwgImZyb21DaGFyQ29kZSIpOwogfQogCi1NYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGNsejMyVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQorTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBjbHozMlRodW5rR2VuZXJhdG9yKFZN
JiB2bSkKIHsKICAgICBTcGVjaWFsaXplZFRodW5rSklUIGppdCh2bSwgMSk7CiAgICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXAgbm9uSW50QXJnSnVtcDsKQEAgLTczNSwxOSArNzM1LDE5IEBAIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gY2wKICAgICB9IGVsc2UKICAgICAgICAg
aml0LmFwcGVuZEZhaWx1cmUobm9uSW50QXJnSnVtcCk7CiAKLSAgICByZXR1cm4gaml0LmZpbmFs
aXplKHZtLT5qaXRTdHVicy0+Y3RpTmF0aXZlVGFpbENhbGwodm0pLCAiY2x6MzIiKTsKKyAgICBy
ZXR1cm4gaml0LmZpbmFsaXplKHZtLmppdFN0dWJzLT5jdGlOYXRpdmVUYWlsQ2FsbCh2bSksICJj
bHozMiIpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHNxcnRU
aHVua0dlbmVyYXRvcihWTSogdm0pCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IHNxcnRUaHVua0dlbmVyYXRvcihWTSYgdm0pCiB7CiAgICAgU3BlY2lhbGl6ZWRUaHVua0pJ
VCBqaXQodm0sIDEpOwogICAgIGlmICghaml0LnN1cHBvcnRzRmxvYXRpbmdQb2ludFNxcnQoKSkK
LSAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz46OmNy
ZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZih2bS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwodm0pKTsK
KyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz46OmNy
ZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZih2bS5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCh2bSkpOwog
CiAgICAgaml0LmxvYWREb3VibGVBcmd1bWVudCgwLCBTcGVjaWFsaXplZFRodW5rSklUOjpmcFJl
Z1QwLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCk7CiAgICAgaml0LnNxcnREb3VibGUoU3Bl
Y2lhbGl6ZWRUaHVua0pJVDo6ZnBSZWdUMCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6ZnBSZWdUMCk7
CiAgICAgaml0LnJldHVybkRvdWJsZShTcGVjaWFsaXplZFRodW5rSklUOjpmcFJlZ1QwKTsKLSAg
ICByZXR1cm4gaml0LmZpbmFsaXplKHZtLT5qaXRTdHVicy0+Y3RpTmF0aXZlVGFpbENhbGwodm0p
LCAic3FydCIpOworICAgIHJldHVybiBqaXQuZmluYWxpemUodm0uaml0U3R1YnMtPmN0aU5hdGl2
ZVRhaWxDYWxsKHZtKSwgInNxcnQiKTsKIH0KIAogCkBAIC04OTgsMTIgKzg5OCwxMiBAQCBkZWZp
bmVVbmFyeURvdWJsZU9wV3JhcHBlcih0cnVuYyk7CiAKIHN0YXRpYyBjb25zdCBkb3VibGUgaGFs
ZkNvbnN0YW50ID0gMC41OwogICAgIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBmbG9vclRodW5rR2VuZXJhdG9yKFZNKiB2bSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gZmxvb3JUaHVua0dlbmVyYXRvcihWTSYgdm0pCiB7CiAgICAgU3BlY2lh
bGl6ZWRUaHVua0pJVCBqaXQodm0sIDEpOwogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vbklu
dEp1bXA7CiAgICAgaWYgKCFVbmFyeURvdWJsZU9wV3JhcHBlcihmbG9vcikgfHwgIWppdC5zdXBw
b3J0c0Zsb2F0aW5nUG9pbnQoKSkKLSAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz46OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZih2bS0+aml0U3R1YnMt
PmN0aU5hdGl2ZUNhbGwodm0pKTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz46OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZih2bS5qaXRTdHVicy0+
Y3RpTmF0aXZlQ2FsbCh2bSkpOwogICAgIGppdC5sb2FkSW50MzJBcmd1bWVudCgwLCBTcGVjaWFs
aXplZFRodW5rSklUOjpyZWdUMCwgbm9uSW50SnVtcCk7CiAgICAgaml0LnJldHVybkludDMyKFNw
ZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwKTsKICAgICBub25JbnRKdW1wLmxpbmsoJmppdCk7CkBA
IC05MTYsNyArOTE2LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBm
bAogICAgICAgICBqaXQucmV0dXJuSW50MzIoU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDApOwog
ICAgICAgICBkb3VibGVSZXN1bHQubGluaygmaml0KTsKICAgICAgICAgaml0LnJldHVybkRvdWJs
ZShTcGVjaWFsaXplZFRodW5rSklUOjpmcFJlZ1QwKTsKLSAgICAgICAgcmV0dXJuIGppdC5maW5h
bGl6ZSh2bS0+aml0U3R1YnMtPmN0aU5hdGl2ZVRhaWxDYWxsKHZtKSwgImZsb29yIik7CisgICAg
ICAgIHJldHVybiBqaXQuZmluYWxpemUodm0uaml0U3R1YnMtPmN0aU5hdGl2ZVRhaWxDYWxsKHZt
KSwgImZsb29yIik7CiAgICAgfQogCiAgICAgU3BlY2lhbGl6ZWRUaHVua0pJVDo6SnVtcCBpbnRS
ZXN1bHQ7CkBAIC05MzgsMTQgKzkzOCwxNCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IGZsCiAgICAgaml0LnJldHVybkludDMyKFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJl
Z1QwKTsKICAgICBkb3VibGVSZXN1bHQubGluaygmaml0KTsKICAgICBqaXQucmV0dXJuRG91Ymxl
KFNwZWNpYWxpemVkVGh1bmtKSVQ6OmZwUmVnVDApOwotICAgIHJldHVybiBqaXQuZmluYWxpemUo
dm0tPmppdFN0dWJzLT5jdGlOYXRpdmVUYWlsQ2FsbCh2bSksICJmbG9vciIpOworICAgIHJldHVy
biBqaXQuZmluYWxpemUodm0uaml0U3R1YnMtPmN0aU5hdGl2ZVRhaWxDYWxsKHZtKSwgImZsb29y
Iik7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gY2VpbFRodW5r
R2VuZXJhdG9yKFZNKiB2bSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
Y2VpbFRodW5rR2VuZXJhdG9yKFZNJiB2bSkKIHsKICAgICBTcGVjaWFsaXplZFRodW5rSklUIGpp
dCh2bSwgMSk7CiAgICAgaWYgKCFVbmFyeURvdWJsZU9wV3JhcHBlcihjZWlsKSB8fCAhaml0LnN1
cHBvcnRzRmxvYXRpbmdQb2ludCgpKQotICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKHZtLT5qaXRTdHVi
cy0+Y3RpTmF0aXZlQ2FsbCh2bSkpOworICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKHZtLmppdFN0dWJz
LT5jdGlOYXRpdmVDYWxsKHZtKSk7CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm9uSW50SnVt
cDsKICAgICBqaXQubG9hZEludDMyQXJndW1lbnQoMCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVn
VDAsIG5vbkludEp1bXApOwogICAgIGppdC5yZXR1cm5JbnQzMihTcGVjaWFsaXplZFRodW5rSklU
OjpyZWdUMCk7CkBAIC05NjEsMTQgKzk2MSwxNCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IGNlCiAgICAgaml0LnJldHVybkludDMyKFNwZWNpYWxpemVkVGh1bmtKSVQ6
OnJlZ1QwKTsKICAgICBkb3VibGVSZXN1bHQubGluaygmaml0KTsKICAgICBqaXQucmV0dXJuRG91
YmxlKFNwZWNpYWxpemVkVGh1bmtKSVQ6OmZwUmVnVDApOwotICAgIHJldHVybiBqaXQuZmluYWxp
emUodm0tPmppdFN0dWJzLT5jdGlOYXRpdmVUYWlsQ2FsbCh2bSksICJjZWlsIik7CisgICAgcmV0
dXJuIGppdC5maW5hbGl6ZSh2bS5qaXRTdHVicy0+Y3RpTmF0aXZlVGFpbENhbGwodm0pLCAiY2Vp
bCIpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHRydW5jVGh1
bmtHZW5lcmF0b3IoVk0qIHZtKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiB0cnVuY1RodW5rR2VuZXJhdG9yKFZNJiB2bSkKIHsKICAgICBTcGVjaWFsaXplZFRodW5rSklU
IGppdCh2bSwgMSk7CiAgICAgaWYgKCFVbmFyeURvdWJsZU9wV3JhcHBlcih0cnVuYykgfHwgIWpp
dC5zdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkKLSAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz46OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZih2bS0+aml0
U3R1YnMtPmN0aU5hdGl2ZUNhbGwodm0pKTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz46OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZih2bS5qaXRT
dHVicy0+Y3RpTmF0aXZlQ2FsbCh2bSkpOwogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vbklu
dEp1bXA7CiAgICAgaml0LmxvYWRJbnQzMkFyZ3VtZW50KDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6
OnJlZ1QwLCBub25JbnRKdW1wKTsKICAgICBqaXQucmV0dXJuSW50MzIoU3BlY2lhbGl6ZWRUaHVu
a0pJVDo6cmVnVDApOwpAQCAtOTg0LDE0ICs5ODQsMTQgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPiB0cgogICAgIGppdC5yZXR1cm5JbnQzMihTcGVjaWFsaXplZFRodW5r
SklUOjpyZWdUMCk7CiAgICAgZG91YmxlUmVzdWx0LmxpbmsoJmppdCk7CiAgICAgaml0LnJldHVy
bkRvdWJsZShTcGVjaWFsaXplZFRodW5rSklUOjpmcFJlZ1QwKTsKLSAgICByZXR1cm4gaml0LmZp
bmFsaXplKHZtLT5qaXRTdHVicy0+Y3RpTmF0aXZlVGFpbENhbGwodm0pLCAidHJ1bmMiKTsKKyAg
ICByZXR1cm4gaml0LmZpbmFsaXplKHZtLmppdFN0dWJzLT5jdGlOYXRpdmVUYWlsQ2FsbCh2bSks
ICJ0cnVuYyIpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHJv
dW5kVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiByb3VuZFRodW5rR2VuZXJhdG9yKFZNJiB2bSkKIHsKICAgICBTcGVjaWFsaXplZFRo
dW5rSklUIGppdCh2bSwgMSk7CiAgICAgaWYgKCFVbmFyeURvdWJsZU9wV3JhcHBlcihqc1JvdW5k
KSB8fCAhaml0LnN1cHBvcnRzRmxvYXRpbmdQb2ludCgpKQotICAgICAgICByZXR1cm4gTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVm
KHZtLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCh2bSkpOworICAgICAgICByZXR1cm4gTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVm
KHZtLmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKHZtKSk7CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXAgbm9uSW50SnVtcDsKICAgICBqaXQubG9hZEludDMyQXJndW1lbnQoMCwgU3BlY2lhbGl6ZWRU
aHVua0pJVDo6cmVnVDAsIG5vbkludEp1bXApOwogICAgIGppdC5yZXR1cm5JbnQzMihTcGVjaWFs
aXplZFRodW5rSklUOjpyZWdUMCk7CkBAIC0xMDE4LDQwICsxMDE4LDQwIEBAIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gcm8KICAgICBqaXQucmV0dXJuSW50MzIoU3BlY2lh
bGl6ZWRUaHVua0pJVDo6cmVnVDApOwogICAgIGRvdWJsZVJlc3VsdC5saW5rKCZqaXQpOwogICAg
IGppdC5yZXR1cm5Eb3VibGUoU3BlY2lhbGl6ZWRUaHVua0pJVDo6ZnBSZWdUMCk7Ci0gICAgcmV0
dXJuIGppdC5maW5hbGl6ZSh2bS0+aml0U3R1YnMtPmN0aU5hdGl2ZVRhaWxDYWxsKHZtKSwgInJv
dW5kIik7CisgICAgcmV0dXJuIGppdC5maW5hbGl6ZSh2bS5qaXRTdHVicy0+Y3RpTmF0aXZlVGFp
bENhbGwodm0pLCAicm91bmQiKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiBleHBUaHVua0dlbmVyYXRvcihWTSogdm0pCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IGV4cFRodW5rR2VuZXJhdG9yKFZNJiB2bSkKIHsKICAgICBpZiAoIVVu
YXJ5RG91YmxlT3BXcmFwcGVyKGV4cCkpCi0gICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+OjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYodm0tPmppdFN0
dWJzLT5jdGlOYXRpdmVDYWxsKHZtKSk7CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+OjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYodm0uaml0U3R1
YnMtPmN0aU5hdGl2ZUNhbGwodm0pKTsKICAgICBTcGVjaWFsaXplZFRodW5rSklUIGppdCh2bSwg
MSk7CiAgICAgaWYgKCFqaXQuc3VwcG9ydHNGbG9hdGluZ1BvaW50KCkpCi0gICAgICAgIHJldHVy
biBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+OjpjcmVhdGVTZWxmTWFuYWdl
ZENvZGVSZWYodm0tPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKHZtKSk7CisgICAgICAgIHJldHVy
biBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+OjpjcmVhdGVTZWxmTWFuYWdl
ZENvZGVSZWYodm0uaml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwodm0pKTsKICAgICBqaXQubG9hZERv
dWJsZUFyZ3VtZW50KDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OmZwUmVnVDAsIFNwZWNpYWxpemVk
VGh1bmtKSVQ6OnJlZ1QwKTsKICAgICBqaXQuY2FsbERvdWJsZVRvRG91YmxlUHJlc2VydmluZ1Jl
dHVybihVbmFyeURvdWJsZU9wV3JhcHBlcihleHApKTsKICAgICBqaXQucmV0dXJuRG91YmxlKFNw
ZWNpYWxpemVkVGh1bmtKSVQ6OmZwUmVnVDApOwotICAgIHJldHVybiBqaXQuZmluYWxpemUodm0t
PmppdFN0dWJzLT5jdGlOYXRpdmVUYWlsQ2FsbCh2bSksICJleHAiKTsKKyAgICByZXR1cm4gaml0
LmZpbmFsaXplKHZtLmppdFN0dWJzLT5jdGlOYXRpdmVUYWlsQ2FsbCh2bSksICJleHAiKTsKIH0K
IAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBsb2dUaHVua0dlbmVyYXRv
cihWTSogdm0pCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGxvZ1RodW5r
R2VuZXJhdG9yKFZNJiB2bSkKIHsKICAgICBpZiAoIVVuYXJ5RG91YmxlT3BXcmFwcGVyKGxvZykp
Ci0gICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+Ojpj
cmVhdGVTZWxmTWFuYWdlZENvZGVSZWYodm0tPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKHZtKSk7
CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+Ojpj
cmVhdGVTZWxmTWFuYWdlZENvZGVSZWYodm0uaml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwodm0pKTsK
ICAgICBTcGVjaWFsaXplZFRodW5rSklUIGppdCh2bSwgMSk7CiAgICAgaWYgKCFqaXQuc3VwcG9y
dHNGbG9hdGluZ1BvaW50KCkpCi0gICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+OjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYodm0tPmppdFN0dWJzLT5j
dGlOYXRpdmVDYWxsKHZtKSk7CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+OjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYodm0uaml0U3R1YnMtPmN0
aU5hdGl2ZUNhbGwodm0pKTsKICAgICBqaXQubG9hZERvdWJsZUFyZ3VtZW50KDAsIFNwZWNpYWxp
emVkVGh1bmtKSVQ6OmZwUmVnVDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwKTsKICAgICBq
aXQuY2FsbERvdWJsZVRvRG91YmxlUHJlc2VydmluZ1JldHVybihVbmFyeURvdWJsZU9wV3JhcHBl
cihsb2cpKTsKICAgICBqaXQucmV0dXJuRG91YmxlKFNwZWNpYWxpemVkVGh1bmtKSVQ6OmZwUmVn
VDApOwotICAgIHJldHVybiBqaXQuZmluYWxpemUodm0tPmppdFN0dWJzLT5jdGlOYXRpdmVUYWls
Q2FsbCh2bSksICJsb2ciKTsKKyAgICByZXR1cm4gaml0LmZpbmFsaXplKHZtLmppdFN0dWJzLT5j
dGlOYXRpdmVUYWlsQ2FsbCh2bSksICJsb2ciKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPiBhYnNUaHVua0dlbmVyYXRvcihWTSogdm0pCitNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGFic1RodW5rR2VuZXJhdG9yKFZNJiB2bSkKIHsKICAg
ICBTcGVjaWFsaXplZFRodW5rSklUIGppdCh2bSwgMSk7CiAgICAgaWYgKCFqaXQuc3VwcG9ydHNG
bG9hdGluZ1BvaW50QWJzKCkpCi0gICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+OjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYodm0tPmppdFN0dWJzLT5j
dGlOYXRpdmVDYWxsKHZtKSk7CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+OjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYodm0uaml0U3R1YnMtPmN0
aU5hdGl2ZUNhbGwodm0pKTsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgdW5zaWduZWQgdmly
dHVhbFJlZ2lzdGVySW5kZXggPSBDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0KDApOwpAQCAtMTEw
MSwxMCArMTEwMSwxMCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGFi
CiAgICAgaml0LmFic0RvdWJsZShTcGVjaWFsaXplZFRodW5rSklUOjpmcFJlZ1QwLCBTcGVjaWFs
aXplZFRodW5rSklUOjpmcFJlZ1QxKTsKICAgICBqaXQucmV0dXJuRG91YmxlKFNwZWNpYWxpemVk
VGh1bmtKSVQ6OmZwUmVnVDEpOwogI2VuZGlmCi0gICAgcmV0dXJuIGppdC5maW5hbGl6ZSh2bS0+
aml0U3R1YnMtPmN0aU5hdGl2ZVRhaWxDYWxsKHZtKSwgImFicyIpOworICAgIHJldHVybiBqaXQu
ZmluYWxpemUodm0uaml0U3R1YnMtPmN0aU5hdGl2ZVRhaWxDYWxsKHZtKSwgImFicyIpOwogfQog
Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGltdWxUaHVua0dlbmVyYXRv
cihWTSogdm0pCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGltdWxUaHVu
a0dlbmVyYXRvcihWTSYgdm0pCiB7CiAgICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQodm0sIDIp
OwogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vbkludEFyZzBKdW1wOwpAQCAtMTEzMiwyNiAr
MTEzMiwyNiBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGltCiAgICAg
fSBlbHNlCiAgICAgICAgIGppdC5hcHBlbmRGYWlsdXJlKG5vbkludEFyZzFKdW1wKTsKIAotICAg
IHJldHVybiBqaXQuZmluYWxpemUodm0tPmppdFN0dWJzLT5jdGlOYXRpdmVUYWlsQ2FsbCh2bSks
ICJpbXVsIik7CisgICAgcmV0dXJuIGppdC5maW5hbGl6ZSh2bS5qaXRTdHVicy0+Y3RpTmF0aXZl
VGFpbENhbGwodm0pLCAiaW11bCIpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IHJhbmRvbVRodW5rR2VuZXJhdG9yKFZNKiB2bSkKK01hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gcmFuZG9tVGh1bmtHZW5lcmF0b3IoVk0mIHZtKQogewogICAg
IFNwZWNpYWxpemVkVGh1bmtKSVQgaml0KHZtLCAwKTsKICAgICBpZiAoIWppdC5zdXBwb3J0c0Zs
b2F0aW5nUG9pbnQoKSkKLSAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz46OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZih2bS0+aml0U3R1YnMtPmN0aU5h
dGl2ZUNhbGwodm0pKTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz46OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZih2bS5qaXRTdHVicy0+Y3RpTmF0
aXZlQ2FsbCh2bSkpOwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBqaXQuZW1pdFJhbmRvbVRo
dW5rKCp2bSwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6
OnJlZ1QxLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMiwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6
cmVnVDMsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OmZwUmVnVDApOworICAgIGppdC5lbWl0UmFuZG9t
VGh1bmsodm0sIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwLCBTcGVjaWFsaXplZFRodW5rSklU
OjpyZWdUMSwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDIsIFNwZWNpYWxpemVkVGh1bmtKSVQ6
OnJlZ1QzLCBTcGVjaWFsaXplZFRodW5rSklUOjpmcFJlZ1QwKTsKICAgICBqaXQucmV0dXJuRG91
YmxlKFNwZWNpYWxpemVkVGh1bmtKSVQ6OmZwUmVnVDApOwogCi0gICAgcmV0dXJuIGppdC5maW5h
bGl6ZSh2bS0+aml0U3R1YnMtPmN0aU5hdGl2ZVRhaWxDYWxsKHZtKSwgInJhbmRvbSIpOworICAg
IHJldHVybiBqaXQuZmluYWxpemUodm0uaml0U3R1YnMtPmN0aU5hdGl2ZVRhaWxDYWxsKHZtKSwg
InJhbmRvbSIpOwogI2Vsc2UKLSAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKHZtLT5qaXRTdHVicy0+Y3RpTmF0
aXZlQ2FsbCh2bSkpOworICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+OjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYodm0uaml0U3R1YnMtPmN0aU5hdGl2ZUNh
bGwodm0pKTsKICNlbmRpZgogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IGJvdW5kVGhpc05vQXJnc0Z1bmN0aW9uQ2FsbEdlbmVyYXRvcihWTSogdm0pCitNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGJvdW5kVGhpc05vQXJnc0Z1bmN0aW9uQ2Fs
bEdlbmVyYXRvcihWTSYgdm0pCiB7CiAgICAgQ0NhbGxIZWxwZXJzIGppdDsKICAgICAKQEAgLTEx
OTQsMTUgKzExOTQsMTUgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBi
bwogICAgIAogICAgIGppdC5uZWdQdHIoR1BSSW5mbzo6cmVnVDIpOwogICAgIGppdC5hZGRQdHIo
Q0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgR1BSSW5mbzo6cmVnVDIpOwotICAg
IENDYWxsSGVscGVyczo6SnVtcCBoYXZlU3RhY2tTcGFjZSA9IGppdC5icmFuY2hQdHIoQ0NhbGxI
ZWxwZXJzOjpCZWxvd09yRXF1YWwsIENDYWxsSGVscGVyczo6QWJzb2x1dGVBZGRyZXNzKHZtLT5h
ZGRyZXNzT2ZTb2Z0U3RhY2tMaW1pdCgpKSwgR1BSSW5mbzo6cmVnVDIpOworICAgIENDYWxsSGVs
cGVyczo6SnVtcCBoYXZlU3RhY2tTcGFjZSA9IGppdC5icmFuY2hQdHIoQ0NhbGxIZWxwZXJzOjpC
ZWxvd09yRXF1YWwsIENDYWxsSGVscGVyczo6QWJzb2x1dGVBZGRyZXNzKHZtLmFkZHJlc3NPZlNv
ZnRTdGFja0xpbWl0KCkpLCBHUFJJbmZvOjpyZWdUMik7CiAKICAgICAvLyBUaHJvdyBTdGFjayBP
dmVyZmxvdyBleGNlcHRpb24KLSAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2Fs
bGVlU2F2ZXNCdWZmZXIodm0tPnRvcEVudHJ5RnJhbWUpOwotICAgIGppdC5zZXR1cEFyZ3VtZW50
czxkZWNsdHlwZSh0aHJvd1N0YWNrT3ZlcmZsb3dFcnJvckZyb21UaHVuayk+KENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbVB0cih2bSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKKyAgICBq
aXQuY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0udG9wRW50
cnlGcmFtZSk7CisgICAgaml0LnNldHVwQXJndW1lbnRzPGRlY2x0eXBlKHRocm93U3RhY2tPdmVy
Zmxvd0Vycm9yRnJvbVRodW5rKT4oQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKCZ2bSksIEdQ
UkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW1QdHIodGFnQ0Z1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4odGhyb3dTdGFja092
ZXJmbG93RXJyb3JGcm9tVGh1bmspKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7CiAgICAgZW1pdFBv
aW50ZXJWYWxpZGF0aW9uKGppdCwgR1BSSW5mbzo6bm9uQXJnR1BSMCwgT3BlcmF0aW9uUHRyVGFn
KTsKICAgICBqaXQuY2FsbChHUFJJbmZvOjpub25BcmdHUFIwLCBPcGVyYXRpb25QdHJUYWcpOwot
ICAgIGppdC5qdW1wVG9FeGNlcHRpb25IYW5kbGVyKCp2bSk7CisgICAgaml0Lmp1bXBUb0V4Y2Vw
dGlvbkhhbmRsZXIodm0pOwogCiAgICAgaGF2ZVN0YWNrU3BhY2UubGluaygmaml0KTsKICAgICBq
aXQubW92ZShHUFJJbmZvOjpyZWdUMiwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rl
cik7CkBAIC0xMjUwLDcgKzEyNTAsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IGJvCiAgICAgaml0LnJldCgpOwogICAgIAogICAgIExpbmtCdWZmZXIgbGlua0J1ZmZl
cihqaXQsIEdMT0JBTF9USFVOS19JRCk7Ci0gICAgbGlua0J1ZmZlci5saW5rKG5vQ29kZSwgQ29k
ZUxvY2F0aW9uTGFiZWw8SklUVGh1bmtQdHJUYWc+KHZtLT5qaXRTdHVicy0+Y3RpTmF0aXZlVGFp
bENhbGxXaXRob3V0U2F2ZWRUYWdzKHZtKSkpOworICAgIGxpbmtCdWZmZXIubGluayhub0NvZGUs
IENvZGVMb2NhdGlvbkxhYmVsPEpJVFRodW5rUHRyVGFnPih2bS5qaXRTdHVicy0+Y3RpTmF0aXZl
VGFpbENhbGxXaXRob3V0U2F2ZWRUYWdzKHZtKSkpOwogICAgIHJldHVybiBGSU5BTElaRV9DT0RF
KAogICAgICAgICBsaW5rQnVmZmVyLCBKSVRUaHVua1B0clRhZywgIlNwZWNpYWxpemVkIHRodW5r
IGZvciBib3VuZCBmdW5jdGlvbiBjYWxscyB3aXRoIG5vIGFyZ3VtZW50cyIpOwogfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5oCShyZXZpc2lvbiAy
NDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMC0y
MDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
MC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMzUsMzkgKzM1LDM5IEBAIGNsYXNzIENhbGxMaW5rSW5mbzsKIHRl
bXBsYXRlPFB0clRhZz4gY2xhc3MgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOwogY2xhc3MgVk07CiAK
LU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gdGhyb3dFeGNlcHRpb25Gcm9t
Q2FsbFNsb3dQYXRoR2VuZXJhdG9yKFZNKik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcihWTSYpOwog
CiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGxpbmtDYWxsVGh1bmsoVk0q
LCBDYWxsTGlua0luZm8mLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsKLU1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz4gbGlua0NhbGxUaHVua0dlbmVyYXRvcihWTSopOwotTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBsaW5rUG9seW1vcnBoaWNDYWxsVGh1
bmtHZW5lcmF0b3IoVk0qKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
bGlua0NhbGxUaHVua0dlbmVyYXRvcihWTSYpOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiBsaW5rUG9seW1vcnBoaWNDYWxsVGh1bmtHZW5lcmF0b3IoVk0mKTsKIAotTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiB2aXJ0dWFsVGh1bmtGb3Io
Vk0qLCBDYWxsTGlua0luZm8mKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91dGlu
ZVB0clRhZz4gdmlydHVhbFRodW5rRm9yKFZNJiwgQ2FsbExpbmtJbmZvJik7CiAKLU1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gbmF0aXZlQ2FsbEdlbmVyYXRvcihWTSopOwot
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBuYXRpdmVDb25zdHJ1Y3RHZW5l
cmF0b3IoVk0qKTsKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gbmF0aXZl
VGFpbENhbGxHZW5lcmF0b3IoVk0qKTsKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gbmF0aXZlVGFpbENhbGxXaXRob3V0U2F2ZWRUYWdzR2VuZXJhdG9yKFZNKik7Ci1NYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGludGVybmFsRnVuY3Rpb25DYWxsR2Vu
ZXJhdG9yKFZNKik7Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGludGVy
bmFsRnVuY3Rpb25Db25zdHJ1Y3RHZW5lcmF0b3IoVk0qKTsKLU1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz4gYXJpdHlGaXh1cEdlbmVyYXRvcihWTSopOwotTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiB1bnJlYWNoYWJsZUdlbmVyYXRvcihWTSopOwotTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBzdHJpbmdHZXRCeVZhbEdlbmVyYXRv
cihWTSopOwotCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGNoYXJDb2Rl
QXRUaHVua0dlbmVyYXRvcihWTSopOwotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBjaGFyQXRUaHVua0dlbmVyYXRvcihWTSopOwotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBjbHozMlRodW5rR2VuZXJhdG9yKFZNKik7Ci1NYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IGZyb21DaGFyQ29kZVRodW5rR2VuZXJhdG9yKFZNKik7Ci1N
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGFic1RodW5rR2VuZXJhdG9yKFZN
Kik7Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGNlaWxUaHVua0dlbmVy
YXRvcihWTSopOwotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBleHBUaHVu
a0dlbmVyYXRvcihWTSopOwotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBm
bG9vclRodW5rR2VuZXJhdG9yKFZNKik7Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IGxvZ1RodW5rR2VuZXJhdG9yKFZNKik7Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IHJvdW5kVGh1bmtHZW5lcmF0b3IoVk0qKTsKLU1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gc3FydFRodW5rR2VuZXJhdG9yKFZNKik7Ci1NYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGltdWxUaHVua0dlbmVyYXRvcihWTSopOwotTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiByYW5kb21UaHVua0dlbmVyYXRvcihW
TSopOwotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiB0cnVuY1RodW5rR2Vu
ZXJhdG9yKFZNKik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG5hdGl2
ZUNhbGxHZW5lcmF0b3IoVk0mKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gbmF0aXZlQ29uc3RydWN0R2VuZXJhdG9yKFZNJik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IG5hdGl2ZVRhaWxDYWxsR2VuZXJhdG9yKFZNJik7CitNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG5hdGl2ZVRhaWxDYWxsV2l0aG91dFNhdmVkVGFn
c0dlbmVyYXRvcihWTSYpOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBp
bnRlcm5hbEZ1bmN0aW9uQ2FsbEdlbmVyYXRvcihWTSYpOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPiBpbnRlcm5hbEZ1bmN0aW9uQ29uc3RydWN0R2VuZXJhdG9yKFZNJik7
CitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGFyaXR5Rml4dXBHZW5lcmF0
b3IoVk0mKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gdW5yZWFjaGFi
bGVHZW5lcmF0b3IoVk0mKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
c3RyaW5nR2V0QnlWYWxHZW5lcmF0b3IoVk0mKTsKKworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBjaGFyQ29kZUF0VGh1bmtHZW5lcmF0b3IoVk0mKTsKK01hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gY2hhckF0VGh1bmtHZW5lcmF0b3IoVk0mKTsKK01h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gY2x6MzJUaHVua0dlbmVyYXRvcihW
TSYpOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBmcm9tQ2hhckNvZGVU
aHVua0dlbmVyYXRvcihWTSYpOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiBhYnNUaHVua0dlbmVyYXRvcihWTSYpOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiBjZWlsVGh1bmtHZW5lcmF0b3IoVk0mKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gZXhwVGh1bmtHZW5lcmF0b3IoVk0mKTsKK01hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gZmxvb3JUaHVua0dlbmVyYXRvcihWTSYpOworTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBsb2dUaHVua0dlbmVyYXRvcihWTSYpOworTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiByb3VuZFRodW5rR2VuZXJhdG9yKFZN
Jik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHNxcnRUaHVua0dlbmVy
YXRvcihWTSYpOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBpbXVsVGh1
bmtHZW5lcmF0b3IoVk0mKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
cmFuZG9tVGh1bmtHZW5lcmF0b3IoVk0mKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gdHJ1bmNUaHVua0dlbmVyYXRvcihWTSYpOwogCi1NYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IGJvdW5kVGhpc05vQXJnc0Z1bmN0aW9uQ2FsbEdlbmVyYXRvcihW
TSopOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBib3VuZFRoaXNOb0Fy
Z3NGdW5jdGlvbkNhbGxHZW5lcmF0b3IoVk0mKTsKIH0KICNlbmRpZiAvLyBFTkFCTEUoSklUKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3Bw
CShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRT
bG93UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Nyw3ICs3Nyw3IEBAIG5hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgTExJbnQgewogCiAjZGVmaW5lIExMSU5UX0JFR0lOX05PX1NFVF9QQygp
IFwKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOyAgICAgIFwKLSAgICBOYXRpdmVDYWxsRnJhbWVU
cmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7IFwKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKHZtLCBleGVjKTsgXAogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pCiAKICNpZm5kZWYgTkRFQlVHCkBAIC01MjksNyArNTI5LDcgQEAgTExJTlRfU0xPV19Q
QVRIX0RFQ0woc3RhY2tfY2hlY2spCiAgICAgLy8gSXQncyBvayB0byBjcmVhdGUgdGhlIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciBoZXJlIGJlZm9yZSB3ZQogICAgIC8vIGNvbnZlcnRUb1N0YWNrT3Zl
cmZsb3dGcmFtZSgpIGJlY2F1c2UgdGhpcyBmdW5jdGlvbiBpcyBhbHdheXMgY2FsbGVkCiAgICAg
Ly8gYWZ0ZXIgdGhlIGZyYW1lIGhhcyBiZWVuIHByb3B1bGF0ZWQgd2l0aCBhIHByb3BlciBDb2Rl
QmxvY2sgYW5kIGNhbGxlZS4KLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwg
ZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAKICAg
ICBMTElOVF9TRVRfUENfRk9SX1NUVUJTKCk7CiAKQEAgLTE0NDEsNyArMTQ0MSw3IEBAIHN0YXRp
YyBTbG93UGF0aFJldHVyblR5cGUgaGFuZGxlSG9zdENhbGwKICAgICAgICAgQVNTRVJUKGNhbGxU
eXBlICE9IENhbGxUeXBlOjpKUyk7CiAgICAgCiAgICAgICAgIGlmIChjYWxsVHlwZSA9PSBDYWxs
VHlwZTo6SG9zdCkgewotICAgICAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigm
dm0sIGV4ZWNDYWxsZWUpOworICAgICAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cih2bSwgZXhlY0NhbGxlZSk7CiAgICAgICAgICAgICBleGVjQ2FsbGVlLT5zZXRDYWxsZWUoYXNP
YmplY3QoY2FsbGVlKSk7CiAgICAgICAgICAgICB2bS5ob3N0Q2FsbFJldHVyblZhbHVlID0gSlNW
YWx1ZTo6ZGVjb2RlKGNhbGxEYXRhLm5hdGl2ZS5mdW5jdGlvbihleGVjQ2FsbGVlKSk7CiAgICAg
ICAgICAgICBMTElOVF9DQUxMX1JFVFVSTihleGVjQ2FsbGVlLCBleGVjQ2FsbGVlLCBMTEludDo6
Z2V0Q29kZVB0cihnZXRIb3N0Q2FsbFJldHVyblZhbHVlKSwgQ0Z1bmN0aW9uUHRyVGFnKTsKQEAg
LTE0NjEsNyArMTQ2MSw3IEBAIHN0YXRpYyBTbG93UGF0aFJldHVyblR5cGUgaGFuZGxlSG9zdENh
bGwKICAgICBBU1NFUlQoY29uc3RydWN0VHlwZSAhPSBDb25zdHJ1Y3RUeXBlOjpKUyk7CiAgICAg
CiAgICAgaWYgKGNvbnN0cnVjdFR5cGUgPT0gQ29uc3RydWN0VHlwZTo6SG9zdCkgewotICAgICAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlY0NhbGxlZSk7CisgICAgICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWNDYWxsZWUpOwogICAgICAgICBl
eGVjQ2FsbGVlLT5zZXRDYWxsZWUoYXNPYmplY3QoY2FsbGVlKSk7CiAgICAgICAgIHZtLmhvc3RD
YWxsUmV0dXJuVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoY29uc3RydWN0RGF0YS5uYXRpdmUuZnVu
Y3Rpb24oZXhlY0NhbGxlZSkpOwogICAgICAgICBMTElOVF9DQUxMX1JFVFVSTihleGVjQ2FsbGVl
LCBleGVjQ2FsbGVlLCBMTEludDo6Z2V0Q29kZVB0cihnZXRIb3N0Q2FsbFJldHVyblZhbHVlKSwg
Q0Z1bmN0aW9uUHRyVGFnKTsKQEAgLTE3NzcsNyArMTc3Nyw3IEBAIExMSU5UX1NMT1dfUEFUSF9E
RUNMKHNsb3dfcGF0aF9oYW5kbGVfZXgKIHsKICAgICBMTElOVF9CRUdJTl9OT19TRVRfUEMoKTsK
ICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgZ2VuZXJpY1Vud2luZCgmdm0sIGV4
ZWMpOworICAgIGdlbmVyaWNVbndpbmQodm0sIGV4ZWMpOwogICAgIExMSU5UX0VORF9JTVBMKCk7
CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvQVNUQnVpbGRlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvQVNUQnVpbGRlci5oCShy
ZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0FTVEJ1aWxk
ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTAsIDIwMTMsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEwLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03OCw3ICs3OCw3IEBAIGNsYXNzIEFTVEJ1
aWxkZXIgewogICAgICAgICBPcGVyYXRvciBtX29wOwogICAgIH07CiBwdWJsaWM6Ci0gICAgQVNU
QnVpbGRlcihWTSogdm0sIFBhcnNlckFyZW5hJiBwYXJzZXJBcmVuYSwgU291cmNlQ29kZSogc291
cmNlQ29kZSkKKyAgICBBU1RCdWlsZGVyKFZNJiB2bSwgUGFyc2VyQXJlbmEmIHBhcnNlckFyZW5h
LCBTb3VyY2VDb2RlKiBzb3VyY2VDb2RlKQogICAgICAgICA6IG1fdm0odm0pCiAgICAgICAgICwg
bV9wYXJzZXJBcmVuYShwYXJzZXJBcmVuYSkKICAgICAgICAgLCBtX3NvdXJjZUNvZGUoc291cmNl
Q29kZSkKQEAgLTE5NiwxMSArMTk2LDExIEBAIHB1YmxpYzoKICAgICBib29sIGlzSW1wb3J0TWV0
YShFeHByZXNzaW9uTm9kZSogbm9kZSkgeyByZXR1cm4gbm9kZS0+aXNJbXBvcnRNZXRhKCk7IH0K
ICAgICBFeHByZXNzaW9uTm9kZSogY3JlYXRlUmVzb2x2ZShjb25zdCBKU1Rva2VuTG9jYXRpb24m
IGxvY2F0aW9uLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgY29uc3QgSlNUZXh0UG9zaXRpb24m
IHN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZW5kKQogICAgIHsKLSAgICAgICAgaWYgKG1f
dm0tPnByb3BlcnR5TmFtZXMtPmFyZ3VtZW50cyA9PSBpZGVudCkKKyAgICAgICAgaWYgKG1fdm0u
cHJvcGVydHlOYW1lcy0+YXJndW1lbnRzID09IGlkZW50KQogICAgICAgICAgICAgdXNlc0FyZ3Vt
ZW50cygpOwogCiAgICAgICAgIGlmIChpZGVudC5pc1N5bWJvbCgpKSB7Ci0gICAgICAgICAgICBp
ZiAoQnl0ZWNvZGVJbnRyaW5zaWNOb2RlOjpFbWl0dGVyVHlwZSBlbWl0dGVyID0gbV92bS0+Ynl0
ZWNvZGVJbnRyaW5zaWNSZWdpc3RyeSgpLmxvb2t1cChpZGVudCkpCisgICAgICAgICAgICBpZiAo
Qnl0ZWNvZGVJbnRyaW5zaWNOb2RlOjpFbWl0dGVyVHlwZSBlbWl0dGVyID0gbV92bS5ieXRlY29k
ZUludHJpbnNpY1JlZ2lzdHJ5KCkubG9va3VwKGlkZW50KSkKICAgICAgICAgICAgICAgICByZXR1
cm4gbmV3IChtX3BhcnNlckFyZW5hKSBCeXRlY29kZUludHJpbnNpY05vZGUoQnl0ZWNvZGVJbnRy
aW5zaWNOb2RlOjpUeXBlOjpDb25zdGFudCwgbG9jYXRpb24sIGVtaXR0ZXIsIGlkZW50LCBudWxs
cHRyLCBzdGFydCwgc3RhcnQsIGVuZCk7CiAgICAgICAgIH0KIApAQCAtNDgyLDcgKzQ4Miw3IEBA
IHB1YmxpYzoKICAgICAgICAgZnVuY3Rpb25JbmZvLmJvZHktPnNldExvYyhmdW5jdGlvbkluZm8u
c3RhcnRMaW5lLCBmdW5jdGlvbkluZm8uZW5kTGluZSwgbG9jYXRpb24uc3RhcnRPZmZzZXQsIGxv
Y2F0aW9uLmxpbmVTdGFydE9mZnNldCk7CiAgICAgICAgIGZ1bmN0aW9uSW5mby5ib2R5LT5zZXRF
Y21hTmFtZSgqbmFtZSk7CiAgICAgICAgIFNvdXJjZUNvZGUgc291cmNlID0gbV9zb3VyY2VDb2Rl
LT5zdWJFeHByZXNzaW9uKGZ1bmN0aW9uSW5mby5zdGFydE9mZnNldCwgZnVuY3Rpb25JbmZvLmVu
ZE9mZnNldCwgZnVuY3Rpb25JbmZvLnN0YXJ0TGluZSwgZnVuY3Rpb25JbmZvLnBhcmFtZXRlcnNT
dGFydENvbHVtbik7Ci0gICAgICAgIE1ldGhvZERlZmluaXRpb25Ob2RlKiBtZXRob2REZWYgPSBu
ZXcgKG1fcGFyc2VyQXJlbmEpIE1ldGhvZERlZmluaXRpb25Ob2RlKGxvY2F0aW9uLCBtX3ZtLT5w
cm9wZXJ0eU5hbWVzLT5udWxsSWRlbnRpZmllciwgZnVuY3Rpb25JbmZvLmJvZHksIHNvdXJjZSk7
CisgICAgICAgIE1ldGhvZERlZmluaXRpb25Ob2RlKiBtZXRob2REZWYgPSBuZXcgKG1fcGFyc2Vy
QXJlbmEpIE1ldGhvZERlZmluaXRpb25Ob2RlKGxvY2F0aW9uLCBtX3ZtLnByb3BlcnR5TmFtZXMt
Pm51bGxJZGVudGlmaWVyLCBmdW5jdGlvbkluZm8uYm9keSwgc291cmNlKTsKICAgICAgICAgcmV0
dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgUHJvcGVydHlOb2RlKCpuYW1lLCBtZXRob2REZWYsIHR5
cGUsIFByb3BlcnR5Tm9kZTo6VW5rbm93biwgU3VwZXJCaW5kaW5nOjpOZWVkZWQsIHRhZyk7CiAg
ICAgfQogCkBAIC00OTIsMTcgKzQ5MiwxNyBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVChuYW1l
KTsKICAgICAgICAgZnVuY3Rpb25JbmZvLmJvZHktPnNldExvYyhmdW5jdGlvbkluZm8uc3RhcnRM
aW5lLCBmdW5jdGlvbkluZm8uZW5kTGluZSwgbG9jYXRpb24uc3RhcnRPZmZzZXQsIGxvY2F0aW9u
LmxpbmVTdGFydE9mZnNldCk7CiAgICAgICAgIFNvdXJjZUNvZGUgc291cmNlID0gbV9zb3VyY2VD
b2RlLT5zdWJFeHByZXNzaW9uKGZ1bmN0aW9uSW5mby5zdGFydE9mZnNldCwgZnVuY3Rpb25JbmZv
LmVuZE9mZnNldCwgZnVuY3Rpb25JbmZvLnN0YXJ0TGluZSwgZnVuY3Rpb25JbmZvLnBhcmFtZXRl
cnNTdGFydENvbHVtbik7Ci0gICAgICAgIE1ldGhvZERlZmluaXRpb25Ob2RlKiBtZXRob2REZWYg
PSBuZXcgKG1fcGFyc2VyQXJlbmEpIE1ldGhvZERlZmluaXRpb25Ob2RlKGxvY2F0aW9uLCBtX3Zt
LT5wcm9wZXJ0eU5hbWVzLT5udWxsSWRlbnRpZmllciwgZnVuY3Rpb25JbmZvLmJvZHksIHNvdXJj
ZSk7CisgICAgICAgIE1ldGhvZERlZmluaXRpb25Ob2RlKiBtZXRob2REZWYgPSBuZXcgKG1fcGFy
c2VyQXJlbmEpIE1ldGhvZERlZmluaXRpb25Ob2RlKGxvY2F0aW9uLCBtX3ZtLnByb3BlcnR5TmFt
ZXMtPm51bGxJZGVudGlmaWVyLCBmdW5jdGlvbkluZm8uYm9keSwgc291cmNlKTsKICAgICAgICAg
cmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgUHJvcGVydHlOb2RlKG5hbWUsIG1ldGhvZERlZiwg
dHlwZSwgUHJvcGVydHlOb2RlOjpVbmtub3duLCBTdXBlckJpbmRpbmc6Ok5lZWRlZCwgdGFnKTsK
ICAgICB9CiAKLSAgICBORVZFUl9JTkxJTkUgUHJvcGVydHlOb2RlKiBjcmVhdGVHZXR0ZXJPclNl
dHRlclByb3BlcnR5KFZNKiB2bSwgUGFyc2VyQXJlbmEmIHBhcnNlckFyZW5hLCBjb25zdCBKU1Rv
a2VuTG9jYXRpb24mIGxvY2F0aW9uLCBQcm9wZXJ0eU5vZGU6OlR5cGUgdHlwZSwgYm9vbCwKKyAg
ICBORVZFUl9JTkxJTkUgUHJvcGVydHlOb2RlKiBjcmVhdGVHZXR0ZXJPclNldHRlclByb3BlcnR5
KFZNJiB2bSwgUGFyc2VyQXJlbmEmIHBhcnNlckFyZW5hLCBjb25zdCBKU1Rva2VuTG9jYXRpb24m
IGxvY2F0aW9uLCBQcm9wZXJ0eU5vZGU6OlR5cGUgdHlwZSwgYm9vbCwKICAgICAgICAgZG91Ymxl
IG5hbWUsIGNvbnN0IFBhcnNlckZ1bmN0aW9uSW5mbzxBU1RCdWlsZGVyPiYgZnVuY3Rpb25JbmZv
LCBDbGFzc0VsZW1lbnRUYWcgdGFnKQogICAgIHsKICAgICAgICAgZnVuY3Rpb25JbmZvLmJvZHkt
PnNldExvYyhmdW5jdGlvbkluZm8uc3RhcnRMaW5lLCBmdW5jdGlvbkluZm8uZW5kTGluZSwgbG9j
YXRpb24uc3RhcnRPZmZzZXQsIGxvY2F0aW9uLmxpbmVTdGFydE9mZnNldCk7CiAgICAgICAgIGNv
bnN0IElkZW50aWZpZXImIGlkZW50ID0gcGFyc2VyQXJlbmEuaWRlbnRpZmllckFyZW5hKCkubWFr
ZU51bWVyaWNJZGVudGlmaWVyKHZtLCBuYW1lKTsKICAgICAgICAgU291cmNlQ29kZSBzb3VyY2Ug
PSBtX3NvdXJjZUNvZGUtPnN1YkV4cHJlc3Npb24oZnVuY3Rpb25JbmZvLnN0YXJ0T2Zmc2V0LCBm
dW5jdGlvbkluZm8uZW5kT2Zmc2V0LCBmdW5jdGlvbkluZm8uc3RhcnRMaW5lLCBmdW5jdGlvbklu
Zm8ucGFyYW1ldGVyc1N0YXJ0Q29sdW1uKTsKLSAgICAgICAgTWV0aG9kRGVmaW5pdGlvbk5vZGUq
IG1ldGhvZERlZiA9IG5ldyAobV9wYXJzZXJBcmVuYSkgTWV0aG9kRGVmaW5pdGlvbk5vZGUobG9j
YXRpb24sIHZtLT5wcm9wZXJ0eU5hbWVzLT5udWxsSWRlbnRpZmllciwgZnVuY3Rpb25JbmZvLmJv
ZHksIHNvdXJjZSk7CisgICAgICAgIE1ldGhvZERlZmluaXRpb25Ob2RlKiBtZXRob2REZWYgPSBu
ZXcgKG1fcGFyc2VyQXJlbmEpIE1ldGhvZERlZmluaXRpb25Ob2RlKGxvY2F0aW9uLCB2bS5wcm9w
ZXJ0eU5hbWVzLT5udWxsSWRlbnRpZmllciwgZnVuY3Rpb25JbmZvLmJvZHksIHNvdXJjZSk7CiAg
ICAgICAgIHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIFByb3BlcnR5Tm9kZShpZGVudCwgbWV0
aG9kRGVmLCB0eXBlLCBQcm9wZXJ0eU5vZGU6OlVua25vd24sIFN1cGVyQmluZGluZzo6TmVlZGVk
LCB0YWcpOwogICAgIH0KIApAQCAtNTIxLDcgKzUyMSw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAg
ICAgIHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIFByb3BlcnR5Tm9kZShub2RlLCB0eXBlLCBw
dXRUeXBlLCBzdXBlckJpbmRpbmcsIHRhZyk7CiAgICAgfQotICAgIFByb3BlcnR5Tm9kZSogY3Jl
YXRlUHJvcGVydHkoVk0qIHZtLCBQYXJzZXJBcmVuYSYgcGFyc2VyQXJlbmEsIGRvdWJsZSBwcm9w
ZXJ0eU5hbWUsIEV4cHJlc3Npb25Ob2RlKiBub2RlLCBQcm9wZXJ0eU5vZGU6OlR5cGUgdHlwZSwg
UHJvcGVydHlOb2RlOjpQdXRUeXBlIHB1dFR5cGUsIGJvb2wsIFN1cGVyQmluZGluZyBzdXBlckJp
bmRpbmcsIENsYXNzRWxlbWVudFRhZyB0YWcpCisgICAgUHJvcGVydHlOb2RlKiBjcmVhdGVQcm9w
ZXJ0eShWTSYgdm0sIFBhcnNlckFyZW5hJiBwYXJzZXJBcmVuYSwgZG91YmxlIHByb3BlcnR5TmFt
ZSwgRXhwcmVzc2lvbk5vZGUqIG5vZGUsIFByb3BlcnR5Tm9kZTo6VHlwZSB0eXBlLCBQcm9wZXJ0
eU5vZGU6OlB1dFR5cGUgcHV0VHlwZSwgYm9vbCwgU3VwZXJCaW5kaW5nIHN1cGVyQmluZGluZywg
Q2xhc3NFbGVtZW50VGFnIHRhZykKICAgICB7CiAgICAgICAgIHJldHVybiBuZXcgKG1fcGFyc2Vy
QXJlbmEpIFByb3BlcnR5Tm9kZShwYXJzZXJBcmVuYS5pZGVudGlmaWVyQXJlbmEoKS5tYWtlTnVt
ZXJpY0lkZW50aWZpZXIodm0sIHByb3BlcnR5TmFtZSksIG5vZGUsIHR5cGUsIHB1dFR5cGUsIHN1
cGVyQmluZGluZywgdGFnKTsKICAgICB9CkBAIC01NTgsNyArNTU4LDcgQEAgcHVibGljOgogICAg
IHsKICAgICAgICAgRnVuY0RlY2xOb2RlKiBkZWNsID0gbmV3IChtX3BhcnNlckFyZW5hKSBGdW5j
RGVjbE5vZGUobG9jYXRpb24sICpmdW5jdGlvbkluZm8ubmFtZSwgZnVuY3Rpb25JbmZvLmJvZHks
CiAgICAgICAgICAgICBtX3NvdXJjZUNvZGUtPnN1YkV4cHJlc3Npb24oZnVuY3Rpb25JbmZvLnN0
YXJ0T2Zmc2V0LCBmdW5jdGlvbkluZm8uZW5kT2Zmc2V0LCBmdW5jdGlvbkluZm8uc3RhcnRMaW5l
LCBmdW5jdGlvbkluZm8ucGFyYW1ldGVyc1N0YXJ0Q29sdW1uKSk7Ci0gICAgICAgIGlmICgqZnVu
Y3Rpb25JbmZvLm5hbWUgPT0gbV92bS0+cHJvcGVydHlOYW1lcy0+YXJndW1lbnRzKQorICAgICAg
ICBpZiAoKmZ1bmN0aW9uSW5mby5uYW1lID09IG1fdm0ucHJvcGVydHlOYW1lcy0+YXJndW1lbnRz
KQogICAgICAgICAgICAgdXNlc0FyZ3VtZW50cygpOwogICAgICAgICBmdW5jdGlvbkluZm8uYm9k
eS0+c2V0TG9jKGZ1bmN0aW9uSW5mby5zdGFydExpbmUsIGZ1bmN0aW9uSW5mby5lbmRMaW5lLCBs
b2NhdGlvbi5zdGFydE9mZnNldCwgbG9jYXRpb24ubGluZVN0YXJ0T2Zmc2V0KTsKICAgICAgICAg
cmV0dXJuIGRlY2w7CkBAIC0xMTMzLDcgKzExMzMsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAg
c3RhdGljX2Nhc3Q8Q2xhc3NFeHByTm9kZSo+KGRlZmF1bHRWYWx1ZSktPnNldEVjbWFOYW1lKGlk
ZW50KTsKICAgICB9CiAKLSAgICBWTSogbV92bTsKKyAgICBWTSYgbV92bTsKICAgICBQYXJzZXJB
cmVuYSYgbV9wYXJzZXJBcmVuYTsKICAgICBTb3VyY2VDb2RlKiBtX3NvdXJjZUNvZGU7CiAgICAg
U2NvcGUgbV9zY29wZTsKQEAgLTE0MDUsNyArMTQwNSw3IEBAIEV4cHJlc3Npb25Ob2RlKiBBU1RC
dWlsZGVyOjptYWtlRnVuY3Rpb24KICAgICBpZiAoZnVuYy0+aXNSZXNvbHZlTm9kZSgpKSB7CiAg
ICAgICAgIFJlc29sdmVOb2RlKiByZXNvbHZlID0gc3RhdGljX2Nhc3Q8UmVzb2x2ZU5vZGUqPihm
dW5jKTsKICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnRpZmllciA9IHJlc29sdmUtPmlk
ZW50aWZpZXIoKTsKLSAgICAgICAgaWYgKGlkZW50aWZpZXIgPT0gbV92bS0+cHJvcGVydHlOYW1l
cy0+ZXZhbCkgeworICAgICAgICBpZiAoaWRlbnRpZmllciA9PSBtX3ZtLnByb3BlcnR5TmFtZXMt
PmV2YWwpIHsKICAgICAgICAgICAgIHVzZXNFdmFsKCk7CiAgICAgICAgICAgICByZXR1cm4gbmV3
IChtX3BhcnNlckFyZW5hKSBFdmFsRnVuY3Rpb25DYWxsTm9kZShsb2NhdGlvbiwgYXJncywgZGl2
b3QsIGRpdm90U3RhcnQsIGRpdm90RW5kKTsKICAgICAgICAgfQpAQCAtMTQyMCw5ICsxNDIwLDkg
QEAgRXhwcmVzc2lvbk5vZGUqIEFTVEJ1aWxkZXI6Om1ha2VGdW5jdGlvbgogICAgIEFTU0VSVChm
dW5jLT5pc0RvdEFjY2Vzc29yTm9kZSgpKTsKICAgICBEb3RBY2Nlc3Nvck5vZGUqIGRvdCA9IHN0
YXRpY19jYXN0PERvdEFjY2Vzc29yTm9kZSo+KGZ1bmMpOwogICAgIEZ1bmN0aW9uQ2FsbERvdE5v
ZGUqIG5vZGUgPSBudWxscHRyOwotICAgIGlmICghcHJldmlvdXNCYXNlV2FzU3VwZXIgJiYgKGRv
dC0+aWRlbnRpZmllcigpID09IG1fdm0tPnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLmNh
bGxQdWJsaWNOYW1lKCkgfHwgZG90LT5pZGVudGlmaWVyKCkgPT0gbV92bS0+cHJvcGVydHlOYW1l
cy0+YnVpbHRpbk5hbWVzKCkuY2FsbFByaXZhdGVOYW1lKCkpKQorICAgIGlmICghcHJldmlvdXNC
YXNlV2FzU3VwZXIgJiYgKGRvdC0+aWRlbnRpZmllcigpID09IG1fdm0ucHJvcGVydHlOYW1lcy0+
YnVpbHRpbk5hbWVzKCkuY2FsbFB1YmxpY05hbWUoKSB8fCBkb3QtPmlkZW50aWZpZXIoKSA9PSBt
X3ZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLmNhbGxQcml2YXRlTmFtZSgpKSkKICAg
ICAgICAgbm9kZSA9IG5ldyAobV9wYXJzZXJBcmVuYSkgQ2FsbEZ1bmN0aW9uQ2FsbERvdE5vZGUo
bG9jYXRpb24sIGRvdC0+YmFzZSgpLCBkb3QtPmlkZW50aWZpZXIoKSwgYXJncywgZGl2b3QsIGRp
dm90U3RhcnQsIGRpdm90RW5kLCBjYWxsT3JBcHBseUNoaWxkRGVwdGgpOwotICAgIGVsc2UgaWYg
KCFwcmV2aW91c0Jhc2VXYXNTdXBlciAmJiAoZG90LT5pZGVudGlmaWVyKCkgPT0gbV92bS0+cHJv
cGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkuYXBwbHlQdWJsaWNOYW1lKCkgfHwgZG90LT5pZGVu
dGlmaWVyKCkgPT0gbV92bS0+cHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkuYXBwbHlQcml2
YXRlTmFtZSgpKSkgeworICAgIGVsc2UgaWYgKCFwcmV2aW91c0Jhc2VXYXNTdXBlciAmJiAoZG90
LT5pZGVudGlmaWVyKCkgPT0gbV92bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5hcHBs
eVB1YmxpY05hbWUoKSB8fCBkb3QtPmlkZW50aWZpZXIoKSA9PSBtX3ZtLnByb3BlcnR5TmFtZXMt
PmJ1aWx0aW5OYW1lcygpLmFwcGx5UHJpdmF0ZU5hbWUoKSkpIHsKICAgICAgICAgLy8gRklYTUU6
IFRoaXMgY2hlY2sgaXMgb25seSBuZWVkZWQgYmVjYXVzZSB3ZSBoYXZlbid0IHRhdWdodCB0aGUg
Ynl0ZWNvZGUgZ2VuZXJhdG9yIHRvIGlubGluZQogICAgICAgICAvLyBSZWZsZWN0LmFwcGx5IHll
dC4gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTA2NjguCiAg
ICAgICAgIGlmICghZG90LT5iYXNlKCktPmlzUmVzb2x2ZU5vZGUoKSB8fCBzdGF0aWNfY2FzdDxS
ZXNvbHZlTm9kZSo+KGRvdC0+YmFzZSgpKS0+aWRlbnRpZmllcigpICE9ICJSZWZsZWN0IikKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTGV4ZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTGV4ZXIuY3BwCShyZXZpc2lvbiAyNDkxMjgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0xleGVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkg
UG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNyBBcHBs
ZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTkg
QXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICogIENvcHlyaWdodCAoQykgMjAwNyBD
YW1lcm9uIFp3YXJpY2ggKGN3endhcmljaEB1d2F0ZXJsb28uY2EpCiAgKiAgQ29weXJpZ2h0IChD
KSAyMDEwIFpvbHRhbiBIZXJjemVnICh6aGVyY3plZ0BpbmYudS1zemVnZWQuaHUpCiAgKiAgQ29w
eXJpZ2h0IChDKSAyMDEyIE1hdGhpYXMgQnluZW5zIChtYXRoaWFzQHFpd2kuYmUpCkBAIC00OTMs
NyArNDkzLDcgQEAgc3RhdGljIGNvbnN0ZXhwciBjb25zdCBMQ2hhciBzaW5nbGVDaGFyYQogfTsK
IAogdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1MZXhlcjxUPjo6TGV4ZXIoVk0qIHZtLCBKU1BhcnNl
ckJ1aWx0aW5Nb2RlIGJ1aWx0aW5Nb2RlLCBKU1BhcnNlclNjcmlwdE1vZGUgc2NyaXB0TW9kZSkK
K0xleGVyPFQ+OjpMZXhlcihWTSYgdm0sIEpTUGFyc2VyQnVpbHRpbk1vZGUgYnVpbHRpbk1vZGUs
IEpTUGFyc2VyU2NyaXB0TW9kZSBzY3JpcHRNb2RlKQogICAgIDogbV9pc1JlcGFyc2luZ0Z1bmN0
aW9uKGZhbHNlKQogICAgICwgbV92bSh2bSkKICAgICAsIG1fcGFyc2luZ0J1aWx0aW5GdW5jdGlv
bihidWlsdGluTW9kZSA9PSBKU1BhcnNlckJ1aWx0aW5Nb2RlOjpCdWlsdGluKQpAQCAtOTYwLDE0
ICs5NjAsMTQgQEAgdGVtcGxhdGUgPGJvb2wgc2hvdWxkQ3JlYXRlSWRlbnRpZmllcj4gQQogICAg
ICAgICBpbnQgaWRlbnRpZmllckxlbmd0aCA9IGN1cnJlbnRTb3VyY2VQdHIoKSAtIGlkZW50aWZp
ZXJTdGFydDsKICAgICAgICAgaWRlbnQgPSBtYWtlSWRlbnRpZmllcihpZGVudGlmaWVyU3RhcnQs
IGlkZW50aWZpZXJMZW5ndGgpOwogICAgICAgICBpZiAobV9wYXJzaW5nQnVpbHRpbkZ1bmN0aW9u
KSB7Ci0gICAgICAgICAgICBpZiAoIWlzU2FmZUJ1aWx0aW5JZGVudGlmaWVyKCptX3ZtLCBpZGVu
dCkgJiYgIWlzUHJpdmF0ZU5hbWUpIHsKKyAgICAgICAgICAgIGlmICghaXNTYWZlQnVpbHRpbklk
ZW50aWZpZXIobV92bSwgaWRlbnQpICYmICFpc1ByaXZhdGVOYW1lKSB7CiAgICAgICAgICAgICAg
ICAgbV9sZXhFcnJvck1lc3NhZ2UgPSBtYWtlU3RyaW5nKCJUaGUgdXNlIG9mICciLCBpZGVudC0+
c3RyaW5nKCksICInIGlzIGRpc2FsbG93ZWQgaW4gYnVpbHRpbiBmdW5jdGlvbnMuIik7CiAgICAg
ICAgICAgICAgICAgcmV0dXJuIEVSUk9SVE9LOwogICAgICAgICAgICAgfQogICAgICAgICAgICAg
aWYgKGlzUHJpdmF0ZU5hbWUpCi0gICAgICAgICAgICAgICAgaWRlbnQgPSAmbV9hcmVuYS0+bWFr
ZUlkZW50aWZpZXIobV92bSwgbV92bS0+cHJvcGVydHlOYW1lcy0+bG9va1VwUHJpdmF0ZU5hbWUo
KmlkZW50KSk7Ci0gICAgICAgICAgICBlbHNlIGlmICgqaWRlbnQgPT0gbV92bS0+cHJvcGVydHlO
YW1lcy0+dW5kZWZpbmVkS2V5d29yZCkKLSAgICAgICAgICAgICAgICB0b2tlbkRhdGEtPmlkZW50
ID0gJm1fdm0tPnByb3BlcnR5TmFtZXMtPnVuZGVmaW5lZFByaXZhdGVOYW1lOworICAgICAgICAg
ICAgICAgIGlkZW50ID0gJm1fYXJlbmEtPm1ha2VJZGVudGlmaWVyKG1fdm0sIG1fdm0ucHJvcGVy
dHlOYW1lcy0+bG9va1VwUHJpdmF0ZU5hbWUoKmlkZW50KSk7CisgICAgICAgICAgICBlbHNlIGlm
ICgqaWRlbnQgPT0gbV92bS5wcm9wZXJ0eU5hbWVzLT51bmRlZmluZWRLZXl3b3JkKQorICAgICAg
ICAgICAgICAgIHRva2VuRGF0YS0+aWRlbnQgPSAmbV92bS5wcm9wZXJ0eU5hbWVzLT51bmRlZmlu
ZWRQcml2YXRlTmFtZTsKICAgICAgICAgICAgIGlmICghaWRlbnQpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIElOVkFMSURfUFJJVkFURV9OQU1FX0VSUk9SVE9LOwogICAgICAgICB9CkBAIC0xMDM4
LDE0ICsxMDM4LDE0IEBAIHRlbXBsYXRlIDxib29sIHNob3VsZENyZWF0ZUlkZW50aWZpZXI+IEEK
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgaWRlbnQgPSBtYWtlSWRlbnRpZmllcihpZGVudGlm
aWVyU3RhcnQsIGlkZW50aWZpZXJMZW5ndGgpOwogICAgICAgICBpZiAobV9wYXJzaW5nQnVpbHRp
bkZ1bmN0aW9uKSB7Ci0gICAgICAgICAgICBpZiAoIWlzU2FmZUJ1aWx0aW5JZGVudGlmaWVyKCpt
X3ZtLCBpZGVudCkgJiYgIWlzUHJpdmF0ZU5hbWUpIHsKKyAgICAgICAgICAgIGlmICghaXNTYWZl
QnVpbHRpbklkZW50aWZpZXIobV92bSwgaWRlbnQpICYmICFpc1ByaXZhdGVOYW1lKSB7CiAgICAg
ICAgICAgICAgICAgbV9sZXhFcnJvck1lc3NhZ2UgPSBtYWtlU3RyaW5nKCJUaGUgdXNlIG9mICci
LCBpZGVudC0+c3RyaW5nKCksICInIGlzIGRpc2FsbG93ZWQgaW4gYnVpbHRpbiBmdW5jdGlvbnMu
Iik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIEVSUk9SVE9LOwogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgaWYgKGlzUHJpdmF0ZU5hbWUpCi0gICAgICAgICAgICAgICAgaWRlbnQgPSAmbV9h
cmVuYS0+bWFrZUlkZW50aWZpZXIobV92bSwgbV92bS0+cHJvcGVydHlOYW1lcy0+bG9va1VwUHJp
dmF0ZU5hbWUoKmlkZW50KSk7Ci0gICAgICAgICAgICBlbHNlIGlmICgqaWRlbnQgPT0gbV92bS0+
cHJvcGVydHlOYW1lcy0+dW5kZWZpbmVkS2V5d29yZCkKLSAgICAgICAgICAgICAgICB0b2tlbkRh
dGEtPmlkZW50ID0gJm1fdm0tPnByb3BlcnR5TmFtZXMtPnVuZGVmaW5lZFByaXZhdGVOYW1lOwor
ICAgICAgICAgICAgICAgIGlkZW50ID0gJm1fYXJlbmEtPm1ha2VJZGVudGlmaWVyKG1fdm0sIG1f
dm0ucHJvcGVydHlOYW1lcy0+bG9va1VwUHJpdmF0ZU5hbWUoKmlkZW50KSk7CisgICAgICAgICAg
ICBlbHNlIGlmICgqaWRlbnQgPT0gbV92bS5wcm9wZXJ0eU5hbWVzLT51bmRlZmluZWRLZXl3b3Jk
KQorICAgICAgICAgICAgICAgIHRva2VuRGF0YS0+aWRlbnQgPSAmbV92bS5wcm9wZXJ0eU5hbWVz
LT51bmRlZmluZWRQcml2YXRlTmFtZTsKICAgICAgICAgICAgIGlmICghaWRlbnQpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIElOVkFMSURfUFJJVkFURV9OQU1FX0VSUk9SVE9LOwogICAgICAgICB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0xleGVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9MZXhlci5oCShyZXZpc2lvbiAyNDkxMjgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0xleGVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJpIFBv
cnRlbiAocG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAyLCAyMDAzLCAyMDA0
LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDExLCAyMDEyLCAyMDEzIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDItMjAxOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAgQ29weXJpZ2h0IChDKSAyMDEwIFpvbHRh
biBIZXJjemVnICh6aGVyY3plZ0BpbmYudS1zemVnZWQuaHUpCiAgKgogICogIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTUw
LDcgKzUwLDcgQEAgY2xhc3MgTGV4ZXIgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwog
CiBwdWJsaWM6Ci0gICAgTGV4ZXIoVk0qLCBKU1BhcnNlckJ1aWx0aW5Nb2RlLCBKU1BhcnNlclNj
cmlwdE1vZGUpOworICAgIExleGVyKFZNJiwgSlNQYXJzZXJCdWlsdGluTW9kZSwgSlNQYXJzZXJT
Y3JpcHRNb2RlKTsKICAgICB+TGV4ZXIoKTsKIAogICAgIC8vIENoYXJhY3RlciBtYW5pcHVsYXRp
b24gZnVuY3Rpb25zLgpAQCAtMjI3LDcgKzIyNyw3IEBAIHByaXZhdGU6CiAKICAgICBJZGVudGlm
aWVyQXJlbmEqIG1fYXJlbmE7CiAKLSAgICBWTSogbV92bTsKKyAgICBWTSYgbV92bTsKICAgICBi
b29sIG1fcGFyc2luZ0J1aWx0aW5GdW5jdGlvbjsKICAgICBKU1BhcnNlclNjcmlwdE1vZGUgbV9z
Y3JpcHRNb2RlOwogfTsKQEAgLTM5Miw3ICszOTIsNyBAQCBBTFdBWVNfSU5MSU5FIEpTVG9rZW5U
eXBlIExleGVyPFQ+OjpsZXhFCiAgICAgdG9rZW5SZWNvcmQtPm1fZW5kUG9zaXRpb24gPSBjdXJy
ZW50UG9zaXRpb24oKTsKICNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAgaWYgKG1fcGFyc2luZ0J1
aWx0aW5GdW5jdGlvbikgewotICAgICAgICBpZiAoIWlzU2FmZUJ1aWx0aW5JZGVudGlmaWVyKCpt
X3ZtLCB0b2tlbkRhdGEtPmlkZW50KSkKKyAgICAgICAgaWYgKCFpc1NhZmVCdWlsdGluSWRlbnRp
ZmllcihtX3ZtLCB0b2tlbkRhdGEtPmlkZW50KSkKICAgICAgICAgICAgIHJldHVybiBFUlJPUlRP
SzsKICAgICB9CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTW9k
dWxlQW5hbHl6ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJz
ZXIvTW9kdWxlQW5hbHl6ZXIuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcGFyc2VyL01vZHVsZUFuYWx5emVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM2
LDggKzM2LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAKIAogTW9kdWxlQW5hbHl6ZXI6Ok1vZHVsZUFu
YWx5emVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgbW9kdWxlS2V5LCBjb25z
dCBTb3VyY2VDb2RlJiBzb3VyY2VDb2RlLCBjb25zdCBWYXJpYWJsZUVudmlyb25tZW50JiBkZWNs
YXJlZFZhcmlhYmxlcywgY29uc3QgVmFyaWFibGVFbnZpcm9ubWVudCYgbGV4aWNhbFZhcmlhYmxl
cykKLSAgICA6IG1fdm0oJmV4ZWMtPnZtKCkpCi0gICAgLCBtX21vZHVsZVJlY29yZCgqbV92bSwg
SlNNb2R1bGVSZWNvcmQ6OmNyZWF0ZShleGVjLCAqbV92bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9i
amVjdCgpLT5tb2R1bGVSZWNvcmRTdHJ1Y3R1cmUoKSwgbW9kdWxlS2V5LCBzb3VyY2VDb2RlLCBk
ZWNsYXJlZFZhcmlhYmxlcywgbGV4aWNhbFZhcmlhYmxlcykpCisgICAgOiBtX3ZtKGV4ZWMtPnZt
KCkpCisgICAgLCBtX21vZHVsZVJlY29yZChtX3ZtLCBKU01vZHVsZVJlY29yZDo6Y3JlYXRlKGV4
ZWMsIG1fdm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+bW9kdWxlUmVjb3JkU3RydWN0
dXJlKCksIG1vZHVsZUtleSwgc291cmNlQ29kZSwgZGVjbGFyZWRWYXJpYWJsZXMsIGxleGljYWxW
YXJpYWJsZXMpKQogewogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL01v
ZHVsZUFuYWx5emVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNl
ci9Nb2R1bGVBbmFseXplci5oCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcGFyc2VyL01vZHVsZUFuYWx5emVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzksMTQgKzM5LDE0
IEBAIHB1YmxpYzoKIAogICAgIEpTTW9kdWxlUmVjb3JkKiBhbmFseXplKE1vZHVsZVByb2dyYW1O
b2RlJik7CiAKLSAgICBWTSYgdm0oKSB7IHJldHVybiAqbV92bTsgfQorICAgIFZNJiB2bSgpIHsg
cmV0dXJuIG1fdm07IH0KIAogICAgIEpTTW9kdWxlUmVjb3JkKiBtb2R1bGVSZWNvcmQoKSB7IHJl
dHVybiBtX21vZHVsZVJlY29yZC5nZXQoKTsgfQogCiBwcml2YXRlOgogICAgIHZvaWQgZXhwb3J0
VmFyaWFibGUoTW9kdWxlUHJvZ3JhbU5vZGUmLCBjb25zdCBSZWZQdHI8VW5pcXVlZFN0cmluZ0lt
cGw+JiwgY29uc3QgVmFyaWFibGVFbnZpcm9ubWVudEVudHJ5Jik7CiAKLSAgICBWTSogbV92bTsK
KyAgICBWTSYgbV92bTsKICAgICBTdHJvbmc8SlNNb2R1bGVSZWNvcmQ+IG1fbW9kdWxlUmVjb3Jk
OwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmNwcAkocmV2
aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMjYsNyArMTI2LDcgQEAgdm9pZCBQYXJzZXI8TGV4ZXJUeXBl
Pjo6bG9nRXJyb3IoYm9vbCBzaAogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGV4ZXJUeXBlPgot
UGFyc2VyPExleGVyVHlwZT46OlBhcnNlcihWTSogdm0sIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJj
ZSwgSlNQYXJzZXJCdWlsdGluTW9kZSBidWlsdGluTW9kZSwgSlNQYXJzZXJTdHJpY3RNb2RlIHN0
cmljdE1vZGUsIEpTUGFyc2VyU2NyaXB0TW9kZSBzY3JpcHRNb2RlLCBTb3VyY2VQYXJzZU1vZGUg
cGFyc2VNb2RlLCBTdXBlckJpbmRpbmcgc3VwZXJCaW5kaW5nLCBDb25zdHJ1Y3RvcktpbmQgZGVm
YXVsdENvbnN0cnVjdG9yS2luZCwgRGVyaXZlZENvbnRleHRUeXBlIGRlcml2ZWRDb250ZXh0VHlw
ZSwgYm9vbCBpc0V2YWxDb250ZXh0LCBFdmFsQ29udGV4dFR5cGUgZXZhbENvbnRleHRUeXBlLCBE
ZWJ1Z2dlclBhcnNlRGF0YSogZGVidWdnZXJQYXJzZURhdGEpCitQYXJzZXI8TGV4ZXJUeXBlPjo6
UGFyc2VyKFZNJiB2bSwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBKU1BhcnNlckJ1aWx0aW5N
b2RlIGJ1aWx0aW5Nb2RlLCBKU1BhcnNlclN0cmljdE1vZGUgc3RyaWN0TW9kZSwgSlNQYXJzZXJT
Y3JpcHRNb2RlIHNjcmlwdE1vZGUsIFNvdXJjZVBhcnNlTW9kZSBwYXJzZU1vZGUsIFN1cGVyQmlu
ZGluZyBzdXBlckJpbmRpbmcsIENvbnN0cnVjdG9yS2luZCBkZWZhdWx0Q29uc3RydWN0b3JLaW5k
LCBEZXJpdmVkQ29udGV4dFR5cGUgZGVyaXZlZENvbnRleHRUeXBlLCBib29sIGlzRXZhbENvbnRl
eHQsIEV2YWxDb250ZXh0VHlwZSBldmFsQ29udGV4dFR5cGUsIERlYnVnZ2VyUGFyc2VEYXRhKiBk
ZWJ1Z2dlclBhcnNlRGF0YSkKICAgICA6IG1fdm0odm0pCiAgICAgLCBtX3NvdXJjZSgmc291cmNl
KQogICAgICwgbV9oYXNTdGFja092ZXJmbG93KGZhbHNlKQpAQCAtMTQ2LDcgKzE0Niw3IEBAIFBh
cnNlcjxMZXhlclR5cGU+OjpQYXJzZXIoVk0qIHZtLCBjb25zdCAKICAgICBtX3Rva2VuLm1fbG9j
YXRpb24uc3RhcnRPZmZzZXQgPSBzb3VyY2Uuc3RhcnRPZmZzZXQoKTsKICAgICBtX3Rva2VuLm1f
bG9jYXRpb24uZW5kT2Zmc2V0ID0gc291cmNlLnN0YXJ0T2Zmc2V0KCk7CiAgICAgbV90b2tlbi5t
X2xvY2F0aW9uLmxpbmVTdGFydE9mZnNldCA9IHNvdXJjZS5zdGFydE9mZnNldCgpOwotICAgIG1f
ZnVuY3Rpb25DYWNoZSA9IHZtLT5hZGRTb3VyY2VQcm92aWRlckNhY2hlKHNvdXJjZS5wcm92aWRl
cigpKTsKKyAgICBtX2Z1bmN0aW9uQ2FjaGUgPSB2bS5hZGRTb3VyY2VQcm92aWRlckNhY2hlKHNv
dXJjZS5wcm92aWRlcigpKTsKICAgICBtX2V4cHJlc3Npb25FcnJvckNsYXNzaWZpZXIgPSBudWxs
cHRyOwogCiAgICAgU2NvcGVSZWYgc2NvcGUgPSBwdXNoU2NvcGUoKTsKQEAgLTIxMiw3ICsyMTIs
NyBAQCBTdHJpbmcgUGFyc2VyPExleGVyVHlwZT46OnBhcnNlSW5uZXIoY29uCiB7CiAgICAgU3Ry
aW5nIHBhcnNlRXJyb3IgPSBTdHJpbmcoKTsKIAotICAgIEFTVEJ1aWxkZXIgY29udGV4dChjb25z
dF9jYXN0PFZNKj4obV92bSksIG1fcGFyc2VyQXJlbmEsIGNvbnN0X2Nhc3Q8U291cmNlQ29kZSo+
KG1fc291cmNlKSk7CisgICAgQVNUQnVpbGRlciBjb250ZXh0KGNvbnN0X2Nhc3Q8Vk0mPihtX3Zt
KSwgbV9wYXJzZXJBcmVuYSwgY29uc3RfY2FzdDxTb3VyY2VDb2RlKj4obV9zb3VyY2UpKTsKICAg
ICBTY29wZVJlZiBzY29wZSA9IGN1cnJlbnRTY29wZSgpOwogICAgIHNjb3BlLT5zZXRJc0xleGlj
YWxTY29wZSgpOwogICAgIFNldEZvclNjb3BlPEZ1bmN0aW9uUGFyc2VQaGFzZT4gZnVuY3Rpb25Q
YXJzZVBoYXNlUG9pc29uZXIobV9wYXJzZXJTdGF0ZS5mdW5jdGlvblBhcnNlUGhhc2UsIEZ1bmN0
aW9uUGFyc2VQaGFzZTo6Qm9keSk7CkBAIC0yNzYsNyArMjc2LDcgQEAgU3RyaW5nIFBhcnNlcjxM
ZXhlclR5cGU+OjpwYXJzZUlubmVyKGNvbgogICAgICAgICB2YXJEZWNsYXJhdGlvbnMubWFya1Zh
cmlhYmxlQXNDYXB0dXJlZChlbnRyeSk7CiAKICAgICBpZiAoaXNHZW5lcmF0b3JXcmFwcGVyUGFy
c2VNb2RlKHBhcnNlTW9kZSkgfHwgaXNBc3luY0Z1bmN0aW9uT3JBc3luY0dlbmVyYXRvcldyYXBw
ZXJQYXJzZU1vZGUocGFyc2VNb2RlKSkgewotICAgICAgICBpZiAoc2NvcGUtPnVzZWRWYXJpYWJs
ZXNDb250YWlucyhtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5hcmd1bWVudHMuaW1wbCgpKSkKKyAgICAg
ICAgaWYgKHNjb3BlLT51c2VkVmFyaWFibGVzQ29udGFpbnMobV92bS5wcm9wZXJ0eU5hbWVzLT5h
cmd1bWVudHMuaW1wbCgpKSkKICAgICAgICAgICAgIGNvbnRleHQucHJvcGFnYXRlQXJndW1lbnRz
VXNlKCk7CiAgICAgfQogCkBAIC0yOTQsNyArMjk0LDcgQEAgU3RyaW5nIFBhcnNlcjxMZXhlclR5
cGU+OjpwYXJzZUlubmVyKGNvbgogICAgICAgICBjb25zdCBIYXNoU2V0PFVuaXF1ZWRTdHJpbmdJ
bXBsKj4mIGNsb3NlZFZhcmlhYmxlQ2FuZGlkYXRlcyA9IHNjb3BlLT5jbG9zZWRWYXJpYWJsZUNh
bmRpZGF0ZXMoKTsKICAgICAgICAgZm9yIChVbmlxdWVkU3RyaW5nSW1wbCogY2FuZGlkYXRlIDog
Y2xvc2VkVmFyaWFibGVDYW5kaWRhdGVzKSB7CiAgICAgICAgICAgICAvLyBGSVhNRTogV2UgYWxs
b3cgYXN5bmMgdG8gbGVhayBiZWNhdXNlIGl0IGFwcGVhcmluZyBhcyBhIGNsb3NlZCB2YXJpYWJs
ZSBpcyBhIHNpZGUgZWZmZWN0IG9mIHRyeWluZyB0byBwYXJzZSBhc3luYyBhcnJvdyBmdW5jdGlv
bnMuCi0gICAgICAgICAgICBpZiAoIWxleGljYWxWYXJpYWJsZXMuY29udGFpbnMoY2FuZGlkYXRl
KSAmJiAhdmFyRGVjbGFyYXRpb25zLmNvbnRhaW5zKGNhbmRpZGF0ZSkgJiYgIWNhbmRpZGF0ZS0+
aXNTeW1ib2woKSAmJiBjYW5kaWRhdGUgIT0gbV92bS0+cHJvcGVydHlOYW1lcy0+YXN5bmMuaW1w
bCgpKSB7CisgICAgICAgICAgICBpZiAoIWxleGljYWxWYXJpYWJsZXMuY29udGFpbnMoY2FuZGlk
YXRlKSAmJiAhdmFyRGVjbGFyYXRpb25zLmNvbnRhaW5zKGNhbmRpZGF0ZSkgJiYgIWNhbmRpZGF0
ZS0+aXNTeW1ib2woKSAmJiBjYW5kaWRhdGUgIT0gbV92bS5wcm9wZXJ0eU5hbWVzLT5hc3luYy5p
bXBsKCkpIHsKICAgICAgICAgICAgICAgICBkYXRhTG9nKCJCYWQgZ2xvYmFsIGNhcHR1cmUgaW4g
YnVpbHRpbjogJyIsIGNhbmRpZGF0ZSwgIidcbiIpOwogICAgICAgICAgICAgICAgIGRhdGFMb2co
bV9zb3VyY2UtPnZpZXcoKSk7CiAgICAgICAgICAgICAgICAgQ1JBU0goKTsKQEAgLTMzMCw3ICsz
MzAsNyBAQCBib29sIFBhcnNlcjxMZXhlclR5cGU+Ojppc0Fycm93RnVuY3Rpb25QCiAgICAgICAg
ICAgICBuZXh0KCk7CiAgICAgICAgICAgICBpc0Fycm93RnVuY3Rpb24gPSBtYXRjaChBUlJPV0ZV
TkNUSU9OKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIFN5bnRheENoZWNrZXIgc3lu
dGF4Q2hlY2tlcihjb25zdF9jYXN0PFZNKj4obV92bSksIG1fbGV4ZXIuZ2V0KCkpOworICAgICAg
ICAgICAgU3ludGF4Q2hlY2tlciBzeW50YXhDaGVja2VyKGNvbnN0X2Nhc3Q8Vk0mPihtX3ZtKSwg
bV9sZXhlci5nZXQoKSk7CiAgICAgICAgICAgICAvLyBXZSBtYWtlIGZha2Ugc2NvcGUsIG90aGVy
d2lzZSBwYXJzZUZvcm1hbFBhcmFtZXRlcnMgd2lsbCBhZGQgdmFyaWFibGUgdG8gY3VycmVudCBz
Y29wZSB0aGF0IGxlYWQgdG8gZXJyb3JzCiAgICAgICAgICAgICBBdXRvUG9wU2NvcGVSZWYgZmFr
ZVNjb3BlKHRoaXMsIHB1c2hTY29wZSgpKTsKICAgICAgICAgICAgIGZha2VTY29wZS0+c2V0U291
cmNlUGFyc2VNb2RlKFNvdXJjZVBhcnNlTW9kZTo6QXJyb3dGdW5jdGlvbk1vZGUpOwpAQCAtMzc3
LDE5ICszNzcsMTkgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU291cmNlRQog
ICAgICAgICBpZiAoc2hvdWxkQ2hlY2tGb3JVc2VTdHJpY3QpIHsKICAgICAgICAgICAgIGlmIChk
aXJlY3RpdmUpIHsKICAgICAgICAgICAgICAgICAvLyAidXNlIHN0cmljdCIgbXVzdCBiZSB0aGUg
ZXhhY3QgbGl0ZXJhbCB3aXRob3V0IGVzY2FwZSBzZXF1ZW5jZXMgb3IgbGluZSBjb250aW51YXRp
b24uCi0gICAgICAgICAgICAgICAgaWYgKGRpcmVjdGl2ZUxpdGVyYWxMZW5ndGggPT0gbGVuZ3Ro
T2ZVc2VTdHJpY3RMaXRlcmFsICYmIG1fdm0tPnByb3BlcnR5TmFtZXMtPnVzZVN0cmljdElkZW50
aWZpZXIgPT0gKmRpcmVjdGl2ZSkgeworICAgICAgICAgICAgICAgIGlmIChkaXJlY3RpdmVMaXRl
cmFsTGVuZ3RoID09IGxlbmd0aE9mVXNlU3RyaWN0TGl0ZXJhbCAmJiBtX3ZtLnByb3BlcnR5TmFt
ZXMtPnVzZVN0cmljdElkZW50aWZpZXIgPT0gKmRpcmVjdGl2ZSkgewogICAgICAgICAgICAgICAg
ICAgICBzZXRTdHJpY3RNb2RlKCk7CiAgICAgICAgICAgICAgICAgICAgIHNob3VsZENoZWNrRm9y
VXNlU3RyaWN0ID0gZmFsc2U7IC8vIFdlIHNhdyAidXNlIHN0cmljdCIsIHRoZXJlIGlzIG5vIG5l
ZWQgdG8ga2VlcCBjaGVja2luZyBmb3IgaXQuCiAgICAgICAgICAgICAgICAgICAgIGlmICghaXNW
YWxpZFN0cmljdE1vZGUoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1fcGFyc2Vy
U3RhdGUubGFzdEZ1bmN0aW9uTmFtZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5hcmd1bWVudHMgPT0gKm1fcGFyc2VyU3RhdGUubGFzdEZ1
bmN0aW9uTmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobV92bS5wcm9wZXJ0
eU5hbWVzLT5hcmd1bWVudHMgPT0gKm1fcGFyc2VyU3RhdGUubGFzdEZ1bmN0aW9uTmFtZSkKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VtYW50aWNGYWlsKCJDYW5ub3QgbmFtZSBh
IGZ1bmN0aW9uICdhcmd1bWVudHMnIGluIHN0cmljdCBtb2RlIik7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKG1fdm0tPnByb3BlcnR5TmFtZXMtPmV2YWwgPT0gKm1fcGFyc2VyU3Rh
dGUubGFzdEZ1bmN0aW9uTmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobV92
bS5wcm9wZXJ0eU5hbWVzLT5ldmFsID09ICptX3BhcnNlclN0YXRlLmxhc3RGdW5jdGlvbk5hbWUp
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbWFudGljRmFpbCgiQ2Fubm90IG5h
bWUgYSBmdW5jdGlvbiAnZXZhbCcgaW4gc3RyaWN0IG1vZGUiKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNEZWNsYXJlZFZhcmlhYmxl
KG1fdm0tPnByb3BlcnR5TmFtZXMtPmFyZ3VtZW50cykpCisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoaGFzRGVjbGFyZWRWYXJpYWJsZShtX3ZtLnByb3BlcnR5TmFtZXMtPmFyZ3VtZW50cykp
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VtYW50aWNGYWlsKCJDYW5ub3QgZGVjbGFy
ZSBhIHZhcmlhYmxlIG5hbWVkICdhcmd1bWVudHMnIGluIHN0cmljdCBtb2RlIik7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoaGFzRGVjbGFyZWRWYXJpYWJsZShtX3ZtLT5wcm9wZXJ0eU5h
bWVzLT5ldmFsKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNEZWNsYXJlZFZhcmlh
YmxlKG1fdm0ucHJvcGVydHlOYW1lcy0+ZXZhbCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2VtYW50aWNGYWlsKCJDYW5ub3QgZGVjbGFyZSBhIHZhcmlhYmxlIG5hbWVkICdldmFsJyBp
biBzdHJpY3QgbW9kZSIpOwogICAgICAgICAgICAgICAgICAgICAgICAgc2VtYW50aWNGYWlsSWZU
cnVlKGN1cnJlbnRTY29wZSgpLT5oYXNOb25TaW1wbGVQYXJhbWV0ZXJMaXN0KCksICIndXNlIHN0
cmljdCcgZGlyZWN0aXZlIG5vdCBhbGxvd2VkIGluc2lkZSBhIGZ1bmN0aW9uIHdpdGggYSBub24t
c2ltcGxlIHBhcmFtZXRlciBsaXN0Iik7CiAgICAgICAgICAgICAgICAgICAgICAgICBzZW1hbnRp
Y0ZhaWxJZkZhbHNlKGlzVmFsaWRTdHJpY3RNb2RlKCksICJJbnZhbGlkIHBhcmFtZXRlcnMgb3Ig
ZnVuY3Rpb24gbmFtZSBpbiBzdHJpY3QgbW9kZSIpOwpAQCAtNDIxLDcgKzQyMSw3IEBAIHRlbXBs
YXRlIDx0eXBlbmFtZSBMZXhlclR5cGU+CiB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRy
ZWVTb3VyY2VFbGVtZW50cyBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VNb2R1bGVTb3VyY2VFbGVt
ZW50cyhUcmVlQnVpbGRlciYgY29udGV4dCwgU291cmNlUGFyc2VNb2RlIHBhcnNlTW9kZSkKIHsK
ICAgICBUcmVlU291cmNlRWxlbWVudHMgc291cmNlRWxlbWVudHMgPSBjb250ZXh0LmNyZWF0ZVNv
dXJjZUVsZW1lbnRzKCk7Ci0gICAgU3ludGF4Q2hlY2tlciBzeW50YXhDaGVja2VyKGNvbnN0X2Nh
c3Q8Vk0qPihtX3ZtKSwgbV9sZXhlci5nZXQoKSk7CisgICAgU3ludGF4Q2hlY2tlciBzeW50YXhD
aGVja2VyKGNvbnN0X2Nhc3Q8Vk0mPihtX3ZtKSwgbV9sZXhlci5nZXQoKSk7CiAKICAgICB3aGls
ZSAodHJ1ZSkgewogICAgICAgICBUcmVlU3RhdGVtZW50IHN0YXRlbWVudCA9IDA7CkBAIC01MDAs
NyArNTAwLDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU291cmNlRQogICAg
IGludCBwYXJhbWV0ZXJzU3RhcnQgPSBtX3Rva2VuLm1fbG9jYXRpb24uc3RhcnRPZmZzZXQ7CiAK
ICAgICBQYXJzZXJGdW5jdGlvbkluZm88VHJlZUJ1aWxkZXI+IGluZm87Ci0gICAgaW5mby5uYW1l
ID0gJm1fdm0tPnByb3BlcnR5TmFtZXMtPm51bGxJZGVudGlmaWVyOworICAgIGluZm8ubmFtZSA9
ICZtX3ZtLnByb3BlcnR5TmFtZXMtPm51bGxJZGVudGlmaWVyOwogICAgIGNyZWF0ZUdlbmVyYXRv
clBhcmFtZXRlcnMoY29udGV4dCwgaW5mby5wYXJhbWV0ZXJDb3VudCk7CiAgICAgaW5mby5zdGFy
dE9mZnNldCA9IHBhcmFtZXRlcnNTdGFydDsKICAgICBpbmZvLnN0YXJ0TGluZSA9IHRva2VuTGlu
ZSgpOwpAQCAtNTExLDcgKzUxMSw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJl
ZVNvdXJjZUUKICAgICAgICAgZ2VuZXJhdG9yQm9keVNjb3BlLT5zZXRDb25zdHJ1Y3RvcktpbmQo
Q29uc3RydWN0b3JLaW5kOjpOb25lKTsKICAgICAgICAgZ2VuZXJhdG9yQm9keVNjb3BlLT5zZXRF
eHBlY3RlZFN1cGVyQmluZGluZyhtX3N1cGVyQmluZGluZyk7CiAKLSAgICAgICAgU3ludGF4Q2hl
Y2tlciBnZW5lcmF0b3JGdW5jdGlvbkNvbnRleHQoY29uc3RfY2FzdDxWTSo+KG1fdm0pLCBtX2xl
eGVyLmdldCgpKTsKKyAgICAgICAgU3ludGF4Q2hlY2tlciBnZW5lcmF0b3JGdW5jdGlvbkNvbnRl
eHQoY29uc3RfY2FzdDxWTSY+KG1fdm0pLCBtX2xleGVyLmdldCgpKTsKICAgICAgICAgZmFpbElm
RmFsc2UocGFyc2VTb3VyY2VFbGVtZW50cyhnZW5lcmF0b3JGdW5jdGlvbkNvbnRleHQsIG1vZGUp
LCAiQ2Fubm90IHBhcnNlIHRoZSBib2R5IG9mIGEgZ2VuZXJhdG9yIik7CiAgICAgICAgIHBvcFNj
b3BlKGdlbmVyYXRvckJvZHlTY29wZSwgVHJlZUJ1aWxkZXI6Ok5lZWRzRnJlZVZhcmlhYmxlSW5m
byk7CiAgICAgfQpAQCAtNTQyLDcgKzU0Miw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRl
cj4gVHJlZVNvdXJjZUUKICAgICBpbnQgcGFyYW1ldGVyc1N0YXJ0ID0gbV90b2tlbi5tX2xvY2F0
aW9uLnN0YXJ0T2Zmc2V0OwogCiAgICAgUGFyc2VyRnVuY3Rpb25JbmZvPFRyZWVCdWlsZGVyPiBp
bmZvOwotICAgIGluZm8ubmFtZSA9ICZtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5udWxsSWRlbnRpZmll
cjsKKyAgICBpbmZvLm5hbWUgPSAmbV92bS5wcm9wZXJ0eU5hbWVzLT5udWxsSWRlbnRpZmllcjsK
ICAgICBjcmVhdGVHZW5lcmF0b3JQYXJhbWV0ZXJzKGNvbnRleHQsIGluZm8ucGFyYW1ldGVyQ291
bnQpOwogICAgIGluZm8uc3RhcnRPZmZzZXQgPSBwYXJhbWV0ZXJzU3RhcnQ7CiAgICAgaW5mby5z
dGFydExpbmUgPSB0b2tlbkxpbmUoKTsKQEAgLTU1Miw3ICs1NTIsNyBAQCB0ZW1wbGF0ZSA8Y2xh
c3MgVHJlZUJ1aWxkZXI+IFRyZWVTb3VyY2VFCiAgICAgewogICAgICAgICBBdXRvUG9wU2NvcGVS
ZWYgYXN5bmNGdW5jdGlvbkJvZHlTY29wZSh0aGlzLCBwdXNoU2NvcGUoKSk7CiAgICAgICAgIGFz
eW5jRnVuY3Rpb25Cb2R5U2NvcGUtPnNldFNvdXJjZVBhcnNlTW9kZShpbm5lclBhcnNlTW9kZSk7
Ci0gICAgICAgIFN5bnRheENoZWNrZXIgc3ludGF4Q2hlY2tlcihjb25zdF9jYXN0PFZNKj4obV92
bSksIG1fbGV4ZXIuZ2V0KCkpOworICAgICAgICBTeW50YXhDaGVja2VyIHN5bnRheENoZWNrZXIo
Y29uc3RfY2FzdDxWTSY+KG1fdm0pLCBtX2xleGVyLmdldCgpKTsKICAgICAgICAgaWYgKGlzQXJy
b3dGdW5jdGlvbkJvZHlFeHByZXNzaW9uKSB7CiAgICAgICAgICAgICBpZiAobV9kZWJ1Z2dlclBh
cnNlRGF0YSkKICAgICAgICAgICAgICAgICBmYWlsSWZGYWxzZShwYXJzZUFycm93RnVuY3Rpb25T
aW5nbGVFeHByZXNzaW9uQm9keVNvdXJjZUVsZW1lbnRzKGNvbnRleHQpLCAiQ2Fubm90IHBhcnNl
IHRoZSBib2R5IG9mIGFzeW5jIGFycm93IGZ1bmN0aW9uIik7CkBAIC01OTMsNyArNTkzLDcgQEAg
dGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU291cmNlRQogICAgIGludCBwYXJhbWV0
ZXJzU3RhcnQgPSBtX3Rva2VuLm1fbG9jYXRpb24uc3RhcnRPZmZzZXQ7CiAgICAgCiAgICAgUGFy
c2VyRnVuY3Rpb25JbmZvPFRyZWVCdWlsZGVyPiBpbmZvOwotICAgIGluZm8ubmFtZSA9ICZtX3Zt
LT5wcm9wZXJ0eU5hbWVzLT5udWxsSWRlbnRpZmllcjsKKyAgICBpbmZvLm5hbWUgPSAmbV92bS5w
cm9wZXJ0eU5hbWVzLT5udWxsSWRlbnRpZmllcjsKICAgICBjcmVhdGVHZW5lcmF0b3JQYXJhbWV0
ZXJzKGNvbnRleHQsIGluZm8ucGFyYW1ldGVyQ291bnQpOwogICAgIGluZm8uc3RhcnRPZmZzZXQg
PSBwYXJhbWV0ZXJzU3RhcnQ7CiAgICAgaW5mby5zdGFydExpbmUgPSB0b2tlbkxpbmUoKTsKQEAg
LTYwMSw3ICs2MDEsNyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTb3VyY2VF
CiAgICAgewogICAgICAgICBBdXRvUG9wU2NvcGVSZWYgYXN5bmNGdW5jdGlvbkJvZHlTY29wZSh0
aGlzLCBwdXNoU2NvcGUoKSk7CiAgICAgICAgIGFzeW5jRnVuY3Rpb25Cb2R5U2NvcGUtPnNldFNv
dXJjZVBhcnNlTW9kZShpbm5lclBhcnNlTW9kZSk7Ci0gICAgICAgIFN5bnRheENoZWNrZXIgc3lu
dGF4Q2hlY2tlcihjb25zdF9jYXN0PFZNKj4obV92bSksIG1fbGV4ZXIuZ2V0KCkpOworICAgICAg
ICBTeW50YXhDaGVja2VyIHN5bnRheENoZWNrZXIoY29uc3RfY2FzdDxWTSY+KG1fdm0pLCBtX2xl
eGVyLmdldCgpKTsKICAgICAgICAgaWYgKGlzQXJyb3dGdW5jdGlvbkJvZHlFeHByZXNzaW9uKSB7
CiAgICAgICAgICAgICBpZiAobV9kZWJ1Z2dlclBhcnNlRGF0YSkKICAgICAgICAgICAgICAgICBm
YWlsSWZGYWxzZShwYXJzZUFycm93RnVuY3Rpb25TaW5nbGVFeHByZXNzaW9uQm9keVNvdXJjZUVs
ZW1lbnRzKGNvbnRleHQpLCAiQ2Fubm90IHBhcnNlIHRoZSBib2R5IG9mIGFzeW5jIGFycm93IGZ1
bmN0aW9uIik7CkBAIC02MzgsNyArNjM4LDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVy
PiBUcmVlU291cmNlRQogICAgICAgICBzdGF0ZW1lbnQgPSBwYXJzZUZ1bmN0aW9uRGVjbGFyYXRp
b24oY29udGV4dCwgRXhwb3J0VHlwZTo6Tm90RXhwb3J0ZWQsIERlY2xhcmF0aW9uRGVmYXVsdENv
bnRleHQ6OlN0YW5kYXJkLCBmdW5jdGlvbkNvbnN0cnVjdG9yUGFyYW1ldGVyc0VuZFBvc2l0aW9u
KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJREVOVDoKLSAgICAgICAgaWYgKCptX3Rva2Vu
Lm1fZGF0YS5pZGVudCA9PSBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5hc3luYyAmJiAhbV90b2tlbi5t
X2RhdGEuZXNjYXBlZCkgeworICAgICAgICBpZiAoKm1fdG9rZW4ubV9kYXRhLmlkZW50ID09IG1f
dm0ucHJvcGVydHlOYW1lcy0+YXN5bmMgJiYgIW1fdG9rZW4ubV9kYXRhLmVzY2FwZWQpIHsKICAg
ICAgICAgICAgIG5leHQoKTsKICAgICAgICAgICAgIGZhaWxJZkZhbHNlKG1hdGNoKEZVTkNUSU9O
KSAmJiAhbV9sZXhlci0+aGFzTGluZVRlcm1pbmF0b3JCZWZvcmVUb2tlbigpLCAiQ2Fubm90IHBh
cnNlIHRoZSBhc3luYyBmdW5jdGlvbiIpOwogICAgICAgICAgICAgc3RhdGVtZW50ID0gcGFyc2VB
c3luY0Z1bmN0aW9uRGVjbGFyYXRpb24oY29udGV4dCwgRXhwb3J0VHlwZTo6Tm90RXhwb3J0ZWQs
IERlY2xhcmF0aW9uRGVmYXVsdENvbnRleHQ6OlN0YW5kYXJkLCBmdW5jdGlvbkNvbnN0cnVjdG9y
UGFyYW1ldGVyc0VuZFBvc2l0aW9uKTsKQEAgLTcwNyw3ICs3MDcsNyBAQCB0ZW1wbGF0ZSA8Y2xh
c3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lCiAgICAgICAgIHJlc3VsdCA9IHBhcnNlRnVuY3Rp
b25EZWNsYXJhdGlvbihjb250ZXh0KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJREVOVDoK
LSAgICAgICAgaWYgKFVOTElLRUxZKCptX3Rva2VuLm1fZGF0YS5pZGVudCA9PSBtX3ZtLT5wcm9w
ZXJ0eU5hbWVzLT5hc3luYyAmJiAhbV90b2tlbi5tX2RhdGEuZXNjYXBlZCkpIHsKKyAgICAgICAg
aWYgKFVOTElLRUxZKCptX3Rva2VuLm1fZGF0YS5pZGVudCA9PSBtX3ZtLnByb3BlcnR5TmFtZXMt
PmFzeW5jICYmICFtX3Rva2VuLm1fZGF0YS5lc2NhcGVkKSkgewogICAgICAgICAgICAgLy8gRWFn
ZXJseSBwYXJzZSBhcyBBc3luY0Z1bmN0aW9uRGVjbGFyYXRpb24uIFRoaXMgaXMgdGhlIHVuY29t
bW9uIGNhc2UsCiAgICAgICAgICAgICAvLyBidXQgY291bGQgYmUgbWlzdGFrZW5seSBwYXJzZWQg
YXMgYW4gQXN5bmNGdW5jdGlvbkV4cHJlc3Npb24uCiAgICAgICAgICAgICBTYXZlUG9pbnQgc2F2
ZVBvaW50ID0gY3JlYXRlU2F2ZVBvaW50KCk7CkBAIC0xMDQwLDcgKzEwNDAsNyBAQCB0ZW1wbGF0
ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVEZXN0cnVjCiAgICAgfQogCiAgICAgaWYgKHN0cmlj
dE1vZGUoKSAmJiBtX3BhcnNlclN0YXRlLmxhc3RJZGVudGlmaWVyICYmIGNvbnRleHQuaXNSZXNv
bHZlKGVsZW1lbnQpKSB7Ci0gICAgICAgIGJvb2wgaXNFdmFsT3JBcmd1bWVudHMgPSBtX3ZtLT5w
cm9wZXJ0eU5hbWVzLT5ldmFsID09ICptX3BhcnNlclN0YXRlLmxhc3RJZGVudGlmaWVyIHx8IG1f
dm0tPnByb3BlcnR5TmFtZXMtPmFyZ3VtZW50cyA9PSAqbV9wYXJzZXJTdGF0ZS5sYXN0SWRlbnRp
ZmllcjsKKyAgICAgICAgYm9vbCBpc0V2YWxPckFyZ3VtZW50cyA9IG1fdm0ucHJvcGVydHlOYW1l
cy0+ZXZhbCA9PSAqbV9wYXJzZXJTdGF0ZS5sYXN0SWRlbnRpZmllciB8fCBtX3ZtLnByb3BlcnR5
TmFtZXMtPmFyZ3VtZW50cyA9PSAqbV9wYXJzZXJTdGF0ZS5sYXN0SWRlbnRpZmllcjsKICAgICAg
ICAgaWYgKGlzRXZhbE9yQXJndW1lbnRzICYmIHN0cmljdE1vZGUoKSkKICAgICAgICAgICAgIHJl
Y2xhc3NpZnlFeHByZXNzaW9uRXJyb3IoRXJyb3JJbmRpY2F0ZXNQYXR0ZXJuLCBFcnJvckluZGlj
YXRlc05vdGhpbmcpOwogICAgICAgICBmYWlsSWZUcnVlSWZTdHJpY3QoaXNFdmFsT3JBcmd1bWVu
dHMsICJDYW5ub3QgbW9kaWZ5ICciLCBtX3BhcnNlclN0YXRlLmxhc3RJZGVudGlmaWVyLT5pbXBs
KCksICInIGluIHN0cmljdCBtb2RlIik7CkBAIC0xMDY4LDcgKzEwNjgsNyBAQCB0ZW1wbGF0ZSA8
Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVEZXN0cnVjCiAgICAgc2VtYW50aWNGYWlsSWZGYWxzZShl
bGVtZW50ICYmIGNvbnRleHQuaXNBc3NpZ25tZW50TG9jYXRpb24oZWxlbWVudCksICJJbnZhbGlk
IGRlc3RydWN0dXJpbmcgYXNzaWdubWVudCB0YXJnZXQiKTsKIAogICAgIGlmIChzdHJpY3RNb2Rl
KCkgJiYgbV9wYXJzZXJTdGF0ZS5sYXN0SWRlbnRpZmllciAmJiBjb250ZXh0LmlzUmVzb2x2ZShl
bGVtZW50KSkgewotICAgICAgICBib29sIGlzRXZhbE9yQXJndW1lbnRzID0gbV92bS0+cHJvcGVy
dHlOYW1lcy0+ZXZhbCA9PSAqbV9wYXJzZXJTdGF0ZS5sYXN0SWRlbnRpZmllciB8fCBtX3ZtLT5w
cm9wZXJ0eU5hbWVzLT5hcmd1bWVudHMgPT0gKm1fcGFyc2VyU3RhdGUubGFzdElkZW50aWZpZXI7
CisgICAgICAgIGJvb2wgaXNFdmFsT3JBcmd1bWVudHMgPSBtX3ZtLnByb3BlcnR5TmFtZXMtPmV2
YWwgPT0gKm1fcGFyc2VyU3RhdGUubGFzdElkZW50aWZpZXIgfHwgbV92bS5wcm9wZXJ0eU5hbWVz
LT5hcmd1bWVudHMgPT0gKm1fcGFyc2VyU3RhdGUubGFzdElkZW50aWZpZXI7CiAgICAgICAgIGZh
aWxJZlRydWVJZlN0cmljdChpc0V2YWxPckFyZ3VtZW50cywgIkNhbm5vdCBtb2RpZnkgJyIsIG1f
cGFyc2VyU3RhdGUubGFzdElkZW50aWZpZXItPmltcGwoKSwgIicgaW4gc3RyaWN0IG1vZGUiKTsK
ICAgICB9CiAKQEAgLTExOTYsNyArMTE5Niw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRl
cj4gVHJlZURlc3RydWMKICAgICAgICAgICAgICAgICBwcm9wYWdhdGVFcnJvcigpOwogICAgICAg
ICAgICAgICAgIGlmICghaW5uZXJQYXR0ZXJuKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4g
MDsKLSAgICAgICAgICAgICAgICBjb250ZXh0LmFwcGVuZE9iamVjdFBhdHRlcm5SZXN0RW50cnko
Km1fdm0sIG9iamVjdFBhdHRlcm4sIGxvY2F0aW9uLCBpbm5lclBhdHRlcm4pOworICAgICAgICAg
ICAgICAgIGNvbnRleHQuYXBwZW5kT2JqZWN0UGF0dGVyblJlc3RFbnRyeShtX3ZtLCBvYmplY3RQ
YXR0ZXJuLCBsb2NhdGlvbiwgaW5uZXJQYXR0ZXJuKTsKICAgICAgICAgICAgICAgICByZXN0RWxl
bWVudFdhc0ZvdW5kID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBjb250ZXh0LnNldENvbnRhaW5z
T2JqZWN0UmVzdEVsZW1lbnQob2JqZWN0UGF0dGVybiwgcmVzdEVsZW1lbnRXYXNGb3VuZCk7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0xMjE1LDcgKzEyMTUsNyBAQCB0ZW1wbGF0ZSA8Y2xh
c3MgVHJlZUJ1aWxkZXI+IFRyZWVEZXN0cnVjCiAgICAgICAgICAgICAgICAgICAgIGlubmVyUGF0
dGVybiA9IHBhcnNlQmluZGluZ09yQXNzaWdubWVudEVsZW1lbnQoY29udGV4dCwga2luZCwgZXhw
b3J0VHlwZSwgZHVwbGljYXRlSWRlbnRpZmllciwgaGFzRGVzdHJ1Y3R1cmluZ1BhdHRlcm4sIGJp
bmRpbmdDb250ZXh0LCBkZXB0aCArIDEpOwogICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAg
ICAgICAgICAgICAgICBpZiAoa2luZCA9PSBEZXN0cnVjdHVyaW5nS2luZDo6RGVzdHJ1Y3R1cmVU
b0V4cHJlc3Npb25zKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBib29sIGlzRXZhbE9yQXJn
dW1lbnRzID0gbV92bS0+cHJvcGVydHlOYW1lcy0+ZXZhbCA9PSAqcHJvcGVydHlOYW1lIHx8IG1f
dm0tPnByb3BlcnR5TmFtZXMtPmFyZ3VtZW50cyA9PSAqcHJvcGVydHlOYW1lOworICAgICAgICAg
ICAgICAgICAgICAgICAgYm9vbCBpc0V2YWxPckFyZ3VtZW50cyA9IG1fdm0ucHJvcGVydHlOYW1l
cy0+ZXZhbCA9PSAqcHJvcGVydHlOYW1lIHx8IG1fdm0ucHJvcGVydHlOYW1lcy0+YXJndW1lbnRz
ID09ICpwcm9wZXJ0eU5hbWU7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNFdmFsT3JB
cmd1bWVudHMgJiYgc3RyaWN0TW9kZSgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
Y2xhc3NpZnlFeHByZXNzaW9uRXJyb3IoRXJyb3JJbmRpY2F0ZXNQYXR0ZXJuLCBFcnJvckluZGlj
YXRlc05vdGhpbmcpOwogICAgICAgICAgICAgICAgICAgICAgICAgZmFpbElmVHJ1ZUlmU3RyaWN0
KGlzRXZhbE9yQXJndW1lbnRzLCAiQ2Fubm90IG1vZGlmeSAnIiwgcHJvcGVydHlOYW1lLT5pbXBs
KCksICInIGluIHN0cmljdCBtb2RlIik7CkBAIC0xMjI4LDcgKzEyMjgsNyBAQCB0ZW1wbGF0ZSA8
Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVEZXN0cnVjCiAgICAgICAgICAgICAgICAgc3dpdGNoICht
X3Rva2VuLm1fdHlwZSkgewogICAgICAgICAgICAgICAgIGNhc2UgRE9VQkxFOgogICAgICAgICAg
ICAgICAgIGNhc2UgSU5URUdFUjoKLSAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lID0g
Jm1fcGFyc2VyQXJlbmEuaWRlbnRpZmllckFyZW5hKCkubWFrZU51bWVyaWNJZGVudGlmaWVyKGNv
bnN0X2Nhc3Q8Vk0qPihtX3ZtKSwgbV90b2tlbi5tX2RhdGEuZG91YmxlVmFsdWUpOworICAgICAg
ICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWUgPSAmbV9wYXJzZXJBcmVuYS5pZGVudGlmaWVyQXJl
bmEoKS5tYWtlTnVtZXJpY0lkZW50aWZpZXIoY29uc3RfY2FzdDxWTSY+KG1fdm0pLCBtX3Rva2Vu
Lm1fZGF0YS5kb3VibGVWYWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgIGNhc2UgU1RSSU5HOgogICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWUg
PSBtX3Rva2VuLm1fZGF0YS5pZGVudDsKQEAgLTEyNjcsNyArMTI2Nyw3IEBAIHRlbXBsYXRlIDxj
bGFzcyBUcmVlQnVpbGRlcj4gVHJlZURlc3RydWMKICAgICAgICAgICAgIFRyZWVFeHByZXNzaW9u
IGRlZmF1bHRWYWx1ZSA9IHBhcnNlRGVmYXVsdFZhbHVlRm9yRGVzdHJ1Y3R1cmluZ1BhdHRlcm4o
Y29udGV4dCk7CiAgICAgICAgICAgICBwcm9wYWdhdGVFcnJvcigpOwogICAgICAgICAgICAgaWYg
KHByb3BlcnR5RXhwcmVzc2lvbikgewotICAgICAgICAgICAgICAgIGNvbnRleHQuYXBwZW5kT2Jq
ZWN0UGF0dGVybkVudHJ5KCptX3ZtLCBvYmplY3RQYXR0ZXJuLCBsb2NhdGlvbiwgcHJvcGVydHlF
eHByZXNzaW9uLCBpbm5lclBhdHRlcm4sIGRlZmF1bHRWYWx1ZSk7CisgICAgICAgICAgICAgICAg
Y29udGV4dC5hcHBlbmRPYmplY3RQYXR0ZXJuRW50cnkobV92bSwgb2JqZWN0UGF0dGVybiwgbG9j
YXRpb24sIHByb3BlcnR5RXhwcmVzc2lvbiwgaW5uZXJQYXR0ZXJuLCBkZWZhdWx0VmFsdWUpOwog
ICAgICAgICAgICAgICAgIGNvbnRleHQuc2V0Q29udGFpbnNDb21wdXRlZFByb3BlcnR5KG9iamVj
dFBhdHRlcm4sIHRydWUpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBB
U1NFUlQocHJvcGVydHlOYW1lKTsKQEAgLTEzOTgsNyArMTM5OCw3IEBAIHRlbXBsYXRlIDxjbGFz
cyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWUKICAgICAgICAgSlNUZXh0UG9zaXRpb24gaW5Mb2Nh
dGlvbiA9IHRva2VuU3RhcnRQb3NpdGlvbigpOwogICAgICAgICBib29sIGlzT2ZFbnVtZXJhdGlv
biA9IGZhbHNlOwogICAgICAgICBpZiAoIW1hdGNoKElOVE9LRU4pKSB7Ci0gICAgICAgICAgICBm
YWlsSWZGYWxzZShtYXRjaENvbnRleHR1YWxLZXl3b3JkKG1fdm0tPnByb3BlcnR5TmFtZXMtPm9m
KSwgIkV4cGVjdGVkIGVpdGhlciAnaW4nIG9yICdvZicgaW4gZW51bWVyYXRpb24gc3ludGF4Iik7
CisgICAgICAgICAgICBmYWlsSWZGYWxzZShtYXRjaENvbnRleHR1YWxLZXl3b3JkKG1fdm0ucHJv
cGVydHlOYW1lcy0+b2YpLCAiRXhwZWN0ZWQgZWl0aGVyICdpbicgb3IgJ29mJyBpbiBlbnVtZXJh
dGlvbiBzeW50YXgiKTsKICAgICAgICAgICAgIGlzT2ZFbnVtZXJhdGlvbiA9IHRydWU7CiAgICAg
ICAgICAgICBuZXh0KCk7CiAgICAgICAgIH0gZWxzZSB7CkBAIC0xNDQ4LDcgKzE0NDgsNyBAQCB0
ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lCiAgICAgICAgICAgICBkZWNs
c1N0YXJ0ID0gdG9rZW5TdGFydFBvc2l0aW9uKCk7CiAgICAgICAgICAgICBwYXR0ZXJuID0gdHJ5
UGFyc2VEZXN0cnVjdHVyaW5nUGF0dGVybkV4cHJlc3Npb24oY29udGV4dCwgQXNzaWdubWVudENv
bnRleHQ6OkRlY2xhcmF0aW9uU3RhdGVtZW50KTsKICAgICAgICAgICAgIGRlY2xzRW5kID0gbGFz
dFRva2VuRW5kUG9zaXRpb24oKTsKLSAgICAgICAgICAgIGlmIChwYXR0ZXJuICYmIChtYXRjaChJ
TlRPS0VOKSB8fCBtYXRjaENvbnRleHR1YWxLZXl3b3JkKG1fdm0tPnByb3BlcnR5TmFtZXMtPm9m
KSkpCisgICAgICAgICAgICBpZiAocGF0dGVybiAmJiAobWF0Y2goSU5UT0tFTikgfHwgbWF0Y2hD
b250ZXh0dWFsS2V5d29yZChtX3ZtLnByb3BlcnR5TmFtZXMtPm9mKSkpCiAgICAgICAgICAgICAg
ICAgZ290byBlbnVtZXJhdGlvbkxvb3A7CiAgICAgICAgICAgICBwYXR0ZXJuID0gVHJlZURlc3Ry
dWN0dXJpbmdQYXR0ZXJuKDApOwogICAgICAgICAgICAgcmVzdG9yZVNhdmVQb2ludChzYXZlUG9p
bnQpOwpAQCAtMTUwMyw3ICsxNTAzLDcgQEAgZW51bWVyYXRpb25Mb29wOgogICAgIGZhaWxJZkZh
bHNlKG5vbkxIU0NvdW50ID09IG1fcGFyc2VyU3RhdGUubm9uTEhTQ291bnQsICJFeHBlY3RlZCBh
IHJlZmVyZW5jZSBvbiB0aGUgbGVmdCBoYW5kIHNpZGUgb2YgYW4gZW51bWVyYXRpb24gc3RhdGVt
ZW50Iik7CiAgICAgYm9vbCBpc09mRW51bWVyYXRpb24gPSBmYWxzZTsKICAgICBpZiAoIW1hdGNo
KElOVE9LRU4pKSB7Ci0gICAgICAgIGZhaWxJZkZhbHNlKG1hdGNoQ29udGV4dHVhbEtleXdvcmQo
bV92bS0+cHJvcGVydHlOYW1lcy0+b2YpLCAiRXhwZWN0ZWQgZWl0aGVyICdpbicgb3IgJ29mJyBp
biBlbnVtZXJhdGlvbiBzeW50YXgiKTsKKyAgICAgICAgZmFpbElmRmFsc2UobWF0Y2hDb250ZXh0
dWFsS2V5d29yZChtX3ZtLnByb3BlcnR5TmFtZXMtPm9mKSwgIkV4cGVjdGVkIGVpdGhlciAnaW4n
IG9yICdvZicgaW4gZW51bWVyYXRpb24gc3ludGF4Iik7CiAgICAgICAgIGlzT2ZFbnVtZXJhdGlv
biA9IHRydWU7CiAgICAgICAgIG5leHQoKTsKICAgICB9IGVsc2UgewpAQCAtMTU1OCw3ICsxNTU4
LDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZQogICAgIAogICAg
IGlmIChhdXRvU2VtaUNvbG9uKCkpIHsKICAgICAgICAgc2VtYW50aWNGYWlsSWZGYWxzZShicmVh
a0lzVmFsaWQoKSwgIidicmVhaycgaXMgb25seSB2YWxpZCBpbnNpZGUgYSBzd2l0Y2ggb3IgbG9v
cCBzdGF0ZW1lbnQiKTsKLSAgICAgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlQnJlYWtTdGF0ZW1l
bnQobG9jYXRpb24sICZtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5udWxsSWRlbnRpZmllciwgc3RhcnQs
IGVuZCk7CisgICAgICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUJyZWFrU3RhdGVtZW50KGxvY2F0
aW9uLCAmbV92bS5wcm9wZXJ0eU5hbWVzLT5udWxsSWRlbnRpZmllciwgc3RhcnQsIGVuZCk7CiAg
ICAgfQogICAgIGZhaWxJZkZhbHNlKG1hdGNoU3BlY0lkZW50aWZpZXIoKSwgIkV4cGVjdGVkIGFu
IGlkZW50aWZpZXIgYXMgdGhlIHRhcmdldCBmb3IgYSBicmVhayBzdGF0ZW1lbnQiKTsKICAgICBj
b25zdCBJZGVudGlmaWVyKiBpZGVudCA9IG1fdG9rZW4ubV9kYXRhLmlkZW50OwpAQCAtMTU4MCw3
ICsxNTgwLDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZQogICAg
IAogICAgIGlmIChhdXRvU2VtaUNvbG9uKCkpIHsKICAgICAgICAgc2VtYW50aWNGYWlsSWZGYWxz
ZShjb250aW51ZUlzVmFsaWQoKSwgIidjb250aW51ZScgaXMgb25seSB2YWxpZCBpbnNpZGUgYSBs
b29wIHN0YXRlbWVudCIpOwotICAgICAgICByZXR1cm4gY29udGV4dC5jcmVhdGVDb250aW51ZVN0
YXRlbWVudChsb2NhdGlvbiwgJm1fdm0tPnByb3BlcnR5TmFtZXMtPm51bGxJZGVudGlmaWVyLCBz
dGFydCwgZW5kKTsKKyAgICAgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlQ29udGludWVTdGF0ZW1l
bnQobG9jYXRpb24sICZtX3ZtLnByb3BlcnR5TmFtZXMtPm51bGxJZGVudGlmaWVyLCBzdGFydCwg
ZW5kKTsKICAgICB9CiAgICAgZmFpbElmRmFsc2UobWF0Y2hTcGVjSWRlbnRpZmllcigpLCAiRXhw
ZWN0ZWQgYW4gaWRlbnRpZmllciBhcyB0aGUgdGFyZ2V0IGZvciBhIGNvbnRpbnVlIHN0YXRlbWVu
dCIpOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gbV90b2tlbi5tX2RhdGEuaWRlbnQ7
CkBAIC0xOTUwLDcgKzE5NTAsNyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVT
dGF0ZW1lCiAgICAgICAgIGdvdG8gZGVmYXVsdENhc2U7CiAgICAgfQogICAgIGNhc2UgSURFTlQ6
Ci0gICAgICAgIGlmIChVTkxJS0VMWSgqbV90b2tlbi5tX2RhdGEuaWRlbnQgPT0gbV92bS0+cHJv
cGVydHlOYW1lcy0+YXN5bmMgJiYgIW1fdG9rZW4ubV9kYXRhLmVzY2FwZWQpKSB7CisgICAgICAg
IGlmIChVTkxJS0VMWSgqbV90b2tlbi5tX2RhdGEuaWRlbnQgPT0gbV92bS5wcm9wZXJ0eU5hbWVz
LT5hc3luYyAmJiAhbV90b2tlbi5tX2RhdGEuZXNjYXBlZCkpIHsKICAgICAgICAgICAgIGlmICht
YXliZVBhcnNlQXN5bmNGdW5jdGlvbkRlY2xhcmF0aW9uU3RhdGVtZW50KGNvbnRleHQsIHJlc3Vs
dCwgcGFyZW50QWxsb3dzRnVuY3Rpb25EZWNsYXJhdGlvbkFzU3RhdGVtZW50KSkKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMjAzOSw3ICsyMDM5LDcgQEAgdGVtcGxhdGUg
PGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZQogdGVtcGxhdGUgPHR5cGVuYW1lIExleGVy
VHlwZT4KIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gYm9vbCBQYXJzZXI8TGV4ZXJUeXBl
Pjo6bWF5YmVQYXJzZUFzeW5jRnVuY3Rpb25EZWNsYXJhdGlvblN0YXRlbWVudChUcmVlQnVpbGRl
ciYgY29udGV4dCwgVHJlZVN0YXRlbWVudCYgcmVzdWx0LCBib29sIHBhcmVudEFsbG93c0Z1bmN0
aW9uRGVjbGFyYXRpb25Bc1N0YXRlbWVudCkKIHsKLSAgICBBU1NFUlQobWF0Y2hDb250ZXh0dWFs
S2V5d29yZChtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5hc3luYykpOworICAgIEFTU0VSVChtYXRjaENv
bnRleHR1YWxLZXl3b3JkKG1fdm0ucHJvcGVydHlOYW1lcy0+YXN5bmMpKTsKICAgICBTYXZlUG9p
bnQgc2F2ZVBvaW50ID0gY3JlYXRlU2F2ZVBvaW50KCk7CiAgICAgbmV4dCgpOwogICAgIGlmICht
YXRjaChGVU5DVElPTikgJiYgIW1fbGV4ZXItPmhhc0xpbmVUZXJtaW5hdG9yQmVmb3JlVG9rZW4o
KSkgewpAQCAtMjMwMCwxNSArMjMwMCwxNSBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+
IHR5cGVuYW1lIFRyCiAgICAgfTsKIAogICAgIC8vIEBnZW5lcmF0b3IKLSAgICBhZGRQYXJhbWV0
ZXIobV92bS0+cHJvcGVydHlOYW1lcy0+Z2VuZXJhdG9yUHJpdmF0ZU5hbWUpOworICAgIGFkZFBh
cmFtZXRlcihtX3ZtLnByb3BlcnR5TmFtZXMtPmdlbmVyYXRvclByaXZhdGVOYW1lKTsKICAgICAv
LyBAZ2VuZXJhdG9yU3RhdGUKLSAgICBhZGRQYXJhbWV0ZXIobV92bS0+cHJvcGVydHlOYW1lcy0+
Z2VuZXJhdG9yU3RhdGVQcml2YXRlTmFtZSk7CisgICAgYWRkUGFyYW1ldGVyKG1fdm0ucHJvcGVy
dHlOYW1lcy0+Z2VuZXJhdG9yU3RhdGVQcml2YXRlTmFtZSk7CiAgICAgLy8gQGdlbmVyYXRvclZh
bHVlCi0gICAgYWRkUGFyYW1ldGVyKG1fdm0tPnByb3BlcnR5TmFtZXMtPmdlbmVyYXRvclZhbHVl
UHJpdmF0ZU5hbWUpOworICAgIGFkZFBhcmFtZXRlcihtX3ZtLnByb3BlcnR5TmFtZXMtPmdlbmVy
YXRvclZhbHVlUHJpdmF0ZU5hbWUpOwogICAgIC8vIEBnZW5lcmF0b3JSZXN1bWVNb2RlCi0gICAg
YWRkUGFyYW1ldGVyKG1fdm0tPnByb3BlcnR5TmFtZXMtPmdlbmVyYXRvclJlc3VtZU1vZGVQcml2
YXRlTmFtZSk7CisgICAgYWRkUGFyYW1ldGVyKG1fdm0ucHJvcGVydHlOYW1lcy0+Z2VuZXJhdG9y
UmVzdW1lTW9kZVByaXZhdGVOYW1lKTsKICAgICAvLyBAZ2VuZXJhdG9yRnJhbWUKLSAgICBhZGRQ
YXJhbWV0ZXIobV92bS0+cHJvcGVydHlOYW1lcy0+Z2VuZXJhdG9yRnJhbWVQcml2YXRlTmFtZSk7
CisgICAgYWRkUGFyYW1ldGVyKG1fdm0ucHJvcGVydHlOYW1lcy0+Z2VuZXJhdG9yRnJhbWVQcml2
YXRlTmFtZSk7CiAKICAgICByZXR1cm4gcGFyYW1ldGVyczsKIH0KQEAgLTI0MTIsNyArMjQxMiw3
IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gYm9vbCBQYXJzZXIKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIH07CiAKLSAgICBTeW50YXhDaGVja2VyIHN5bnRheENoZWNrZXIoY29u
c3RfY2FzdDxWTSo+KG1fdm0pLCBtX2xleGVyLmdldCgpKTsKKyAgICBTeW50YXhDaGVja2VyIHN5
bnRheENoZWNrZXIoY29uc3RfY2FzdDxWTSY+KG1fdm0pLCBtX2xleGVyLmdldCgpKTsKIAogICAg
IGlmIChVTkxJS0VMWSgoU291cmNlUGFyc2VNb2RlU2V0KFNvdXJjZVBhcnNlTW9kZTo6QXJyb3dG
dW5jdGlvbk1vZGUsIFNvdXJjZVBhcnNlTW9kZTo6QXN5bmNBcnJvd0Z1bmN0aW9uTW9kZSkuY29u
dGFpbnMobW9kZSkpKSkgewogICAgICAgICBzdGFydExvY2F0aW9uID0gdG9rZW5Mb2NhdGlvbigp
OwpAQCAtMjU4OSw4ICsyNTg5LDggQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBib29s
IFBhcnNlcgogICAgIGlmIChmdW5jdGlvblNjb3BlLT5zdHJpY3RNb2RlKCkgJiYgcmVxdWlyZW1l
bnRzICE9IEZ1bmN0aW9uTmFtZVJlcXVpcmVtZW50czo6VW5uYW1lZCkgewogICAgICAgICBBU1NF
UlQoZnVuY3Rpb25JbmZvLm5hbWUpOwogICAgICAgICBSRUxFQVNFX0FTU0VSVChTb3VyY2VQYXJz
ZU1vZGVTZXQoU291cmNlUGFyc2VNb2RlOjpOb3JtYWxGdW5jdGlvbk1vZGUsIFNvdXJjZVBhcnNl
TW9kZTo6TWV0aG9kTW9kZSwgU291cmNlUGFyc2VNb2RlOjpBcnJvd0Z1bmN0aW9uTW9kZSwgU291
cmNlUGFyc2VNb2RlOjpHZW5lcmF0b3JCb2R5TW9kZSwgU291cmNlUGFyc2VNb2RlOjpHZW5lcmF0
b3JXcmFwcGVyRnVuY3Rpb25Nb2RlKS5jb250YWlucyhtb2RlKSB8fCBpc0FzeW5jRnVuY3Rpb25P
ckFzeW5jR2VuZXJhdG9yV3JhcHBlclBhcnNlTW9kZShtb2RlKSk7Ci0gICAgICAgIHNlbWFudGlj
RmFpbElmVHJ1ZShtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5hcmd1bWVudHMgPT0gKmZ1bmN0aW9uSW5m
by5uYW1lLCAiJyIsIGZ1bmN0aW9uSW5mby5uYW1lLT5pbXBsKCksICInIGlzIG5vdCBhIHZhbGlk
IGZ1bmN0aW9uIG5hbWUgaW4gc3RyaWN0IG1vZGUiKTsKLSAgICAgICAgc2VtYW50aWNGYWlsSWZU
cnVlKG1fdm0tPnByb3BlcnR5TmFtZXMtPmV2YWwgPT0gKmZ1bmN0aW9uSW5mby5uYW1lLCAiJyIs
IGZ1bmN0aW9uSW5mby5uYW1lLT5pbXBsKCksICInIGlzIG5vdCBhIHZhbGlkIGZ1bmN0aW9uIG5h
bWUgaW4gc3RyaWN0IG1vZGUiKTsKKyAgICAgICAgc2VtYW50aWNGYWlsSWZUcnVlKG1fdm0ucHJv
cGVydHlOYW1lcy0+YXJndW1lbnRzID09ICpmdW5jdGlvbkluZm8ubmFtZSwgIiciLCBmdW5jdGlv
bkluZm8ubmFtZS0+aW1wbCgpLCAiJyBpcyBub3QgYSB2YWxpZCBmdW5jdGlvbiBuYW1lIGluIHN0
cmljdCBtb2RlIik7CisgICAgICAgIHNlbWFudGljRmFpbElmVHJ1ZShtX3ZtLnByb3BlcnR5TmFt
ZXMtPmV2YWwgPT0gKmZ1bmN0aW9uSW5mby5uYW1lLCAiJyIsIGZ1bmN0aW9uSW5mby5uYW1lLT5p
bXBsKCksICInIGlzIG5vdCBhIHZhbGlkIGZ1bmN0aW9uIG5hbWUgaW4gc3RyaWN0IG1vZGUiKTsK
ICAgICB9CiAKICAgICBKU1Rva2VuTG9jYXRpb24gbG9jYXRpb24gPSBKU1Rva2VuTG9jYXRpb24o
bV90b2tlbi5tX2xvY2F0aW9uKTsKQEAgLTI2OTIsNyArMjY5Miw3IEBAIHRlbXBsYXRlIDxjbGFz
cyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWUKICAgICAgICAgLy8KICAgICAgICAgLy8gSW4gdGhp
cyBjYXNlLCB3ZSB1c2UgIipkZWZhdWx0KiIgYXMgdGhpcyBmdW5jdGlvbiBkZWNsYXJhdGlvbidz
IG5hbWUuCiAgICAgICAgIHJlcXVpcmVtZW50cyA9IEZ1bmN0aW9uTmFtZVJlcXVpcmVtZW50czo6
Tm9uZTsKLSAgICAgICAgZnVuY3Rpb25JbmZvLm5hbWUgPSAmbV92bS0+cHJvcGVydHlOYW1lcy0+
c3RhckRlZmF1bHRQcml2YXRlTmFtZTsKKyAgICAgICAgZnVuY3Rpb25JbmZvLm5hbWUgPSAmbV92
bS5wcm9wZXJ0eU5hbWVzLT5zdGFyRGVmYXVsdFByaXZhdGVOYW1lOwogICAgIH0KIAogICAgIGZh
aWxJZkZhbHNlKChwYXJzZUZ1bmN0aW9uSW5mbyhjb250ZXh0LCByZXF1aXJlbWVudHMsIHBhcnNl
TW9kZSwgdHJ1ZSwgQ29uc3RydWN0b3JLaW5kOjpOb25lLCBTdXBlckJpbmRpbmc6Ok5vdE5lZWRl
ZCwgZnVuY3Rpb25LZXl3b3JkU3RhcnQsIGZ1bmN0aW9uSW5mbywgRnVuY3Rpb25EZWZpbml0aW9u
VHlwZTo6RGVjbGFyYXRpb24sIGZ1bmN0aW9uQ29uc3RydWN0b3JQYXJhbWV0ZXJzRW5kUG9zaXRp
b24pKSwgIkNhbm5vdCBwYXJzZSB0aGlzIGZ1bmN0aW9uIik7CkBAIC0yNzUwLDcgKzI3NTAsNyBA
QCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lCiAgICAgICAgIC8vCiAg
ICAgICAgIC8vIEluIHRoaXMgY2FzZSwgd2UgdXNlICIqZGVmYXVsdCoiIGFzIHRoaXMgZnVuY3Rp
b24gZGVjbGFyYXRpb24ncyBuYW1lLgogICAgICAgICByZXF1aXJlbWVudHMgPSBGdW5jdGlvbk5h
bWVSZXF1aXJlbWVudHM6Ok5vbmU7Ci0gICAgICAgIGZ1bmN0aW9uSW5mby5uYW1lID0gJm1fdm0t
PnByb3BlcnR5TmFtZXMtPnN0YXJEZWZhdWx0UHJpdmF0ZU5hbWU7CisgICAgICAgIGZ1bmN0aW9u
SW5mby5uYW1lID0gJm1fdm0ucHJvcGVydHlOYW1lcy0+c3RhckRlZmF1bHRQcml2YXRlTmFtZTsK
ICAgICB9CiAKICAgICBmYWlsSWZGYWxzZSgocGFyc2VGdW5jdGlvbkluZm8oY29udGV4dCwgcmVx
dWlyZW1lbnRzLCBwYXJzZU1vZGUsIHRydWUsIENvbnN0cnVjdG9yS2luZDo6Tm9uZSwgU3VwZXJC
aW5kaW5nOjpOb3ROZWVkZWQsIGZ1bmN0aW9uS2V5d29yZFN0YXJ0LCBmdW5jdGlvbkluZm8sIEZ1
bmN0aW9uRGVmaW5pdGlvblR5cGU6OkRlY2xhcmF0aW9uLCBmdW5jdGlvbkNvbnN0cnVjdG9yUGFy
YW1ldGVyc0VuZFBvc2l0aW9uKSksICJDYW5ub3QgcGFyc2UgdGhpcyBhc3luYyBmdW5jdGlvbiIp
OwpAQCAtMjc5Niw3ICsyNzk2LDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVl
U3RhdGVtZQogICAgICAgICAvLwogICAgICAgICAvLyBJbiB0aGlzIGNhc2UsIHdlIHVzZSAiKmRl
ZmF1bHQqIiBhcyB0aGlzIGNsYXNzIGRlY2xhcmF0aW9uJ3MgbmFtZS4KICAgICAgICAgcmVxdWly
ZW1lbnRzID0gRnVuY3Rpb25OYW1lUmVxdWlyZW1lbnRzOjpOb25lOwotICAgICAgICBpbmZvLmNs
YXNzTmFtZSA9ICZtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5zdGFyRGVmYXVsdFByaXZhdGVOYW1lOwor
ICAgICAgICBpbmZvLmNsYXNzTmFtZSA9ICZtX3ZtLnByb3BlcnR5TmFtZXMtPnN0YXJEZWZhdWx0
UHJpdmF0ZU5hbWU7CiAgICAgfQogCiAgICAgVHJlZUNsYXNzRXhwcmVzc2lvbiBjbGFzc0V4cHIg
PSBwYXJzZUNsYXNzKGNvbnRleHQsIHJlcXVpcmVtZW50cywgaW5mbyk7CkBAIC0yODcwLDcgKzI4
NzAsNyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVDbGFzc0V4CiAKICAgICAg
ICAgLy8gRm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LCAic3RhdGljIiBpcyBhIG5vbi1yZXNl
cnZlZCBrZXl3b3JkIGluIG5vbi1zdHJpY3QgbW9kZS4KICAgICAgICAgQ2xhc3NFbGVtZW50VGFn
IHRhZyA9IENsYXNzRWxlbWVudFRhZzo6SW5zdGFuY2U7Ci0gICAgICAgIGlmIChtYXRjaChSRVNF
UlZFRF9JRl9TVFJJQ1QpICYmICptX3Rva2VuLm1fZGF0YS5pZGVudCA9PSBtX3ZtLT5wcm9wZXJ0
eU5hbWVzLT5zdGF0aWNLZXl3b3JkKSB7CisgICAgICAgIGlmIChtYXRjaChSRVNFUlZFRF9JRl9T
VFJJQ1QpICYmICptX3Rva2VuLm1fZGF0YS5pZGVudCA9PSBtX3ZtLnByb3BlcnR5TmFtZXMtPnN0
YXRpY0tleXdvcmQpIHsKICAgICAgICAgICAgIFNhdmVQb2ludCBzYXZlUG9pbnQgPSBjcmVhdGVT
YXZlUG9pbnQoKTsKICAgICAgICAgICAgIG5leHQoKTsKICAgICAgICAgICAgIGlmIChtYXRjaChP
UEVOUEFSRU4pKSB7CkBAIC0yODgxLDcgKzI4ODEsNyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1
aWxkZXI+IFRyZWVDbGFzc0V4CiAgICAgICAgIH0KIAogICAgICAgICAvLyBGSVhNRTogRmlndXJl
IG91dCBhIHdheSB0byBzaGFyZSBtb3JlIGNvZGUgd2l0aCBwYXJzZVByb3BlcnR5LgotICAgICAg
ICBjb25zdCBDb21tb25JZGVudGlmaWVycyYgcHJvcGVydHlOYW1lcyA9ICptX3ZtLT5wcm9wZXJ0
eU5hbWVzOworICAgICAgICBjb25zdCBDb21tb25JZGVudGlmaWVycyYgcHJvcGVydHlOYW1lcyA9
ICptX3ZtLnByb3BlcnR5TmFtZXM7CiAgICAgICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0g
JnByb3BlcnR5TmFtZXMubnVsbElkZW50aWZpZXI7CiAgICAgICAgIFRyZWVFeHByZXNzaW9uIGNv
bXB1dGVkUHJvcGVydHlOYW1lID0gMDsKICAgICAgICAgYm9vbCBpc0dldHRlciA9IGZhbHNlOwpA
QCAtMjg5OSw3ICsyODk5LDcgQEAgcGFyc2VNZXRob2Q6CiAgICAgICAgICAgICBuZXh0KCk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBJREVOVDoKLSAgICAgICAgICAgIGlmIChV
TkxJS0VMWSgqbV90b2tlbi5tX2RhdGEuaWRlbnQgPT0gbV92bS0+cHJvcGVydHlOYW1lcy0+YXN5
bmMgJiYgIW1fdG9rZW4ubV9kYXRhLmVzY2FwZWQpKSB7CisgICAgICAgICAgICBpZiAoVU5MSUtF
TFkoKm1fdG9rZW4ubV9kYXRhLmlkZW50ID09IG1fdm0ucHJvcGVydHlOYW1lcy0+YXN5bmMgJiYg
IW1fdG9rZW4ubV9kYXRhLmVzY2FwZWQpKSB7CiAgICAgICAgICAgICAgICAgaWYgKCFpc0dlbmVy
YXRvck1ldGhvZFBhcnNlTW9kZShwYXJzZU1vZGUpICYmICFpc0FzeW5jTWV0aG9kUGFyc2VNb2Rl
KHBhcnNlTW9kZSkpIHsKICAgICAgICAgICAgICAgICAgICAgaWRlbnQgPSBtX3Rva2VuLm1fZGF0
YS5pZGVudDsKICAgICAgICAgICAgICAgICAgICAgbmV4dCgpOwpAQCAtMjkyNCw3ICsyOTI0LDcg
QEAgcGFyc2VNZXRob2Q6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBET1VCTEU6
CiAgICAgICAgIGNhc2UgSU5URUdFUjoKLSAgICAgICAgICAgIGlkZW50ID0gJm1fcGFyc2VyQXJl
bmEuaWRlbnRpZmllckFyZW5hKCkubWFrZU51bWVyaWNJZGVudGlmaWVyKGNvbnN0X2Nhc3Q8Vk0q
PihtX3ZtKSwgbV90b2tlbi5tX2RhdGEuZG91YmxlVmFsdWUpOworICAgICAgICAgICAgaWRlbnQg
PSAmbV9wYXJzZXJBcmVuYS5pZGVudGlmaWVyQXJlbmEoKS5tYWtlTnVtZXJpY0lkZW50aWZpZXIo
Y29uc3RfY2FzdDxWTSY+KG1fdm0pLCBtX3Rva2VuLm1fZGF0YS5kb3VibGVWYWx1ZSk7CiAgICAg
ICAgICAgICBBU1NFUlQoaWRlbnQpOwogICAgICAgICAgICAgbmV4dCgpOwogICAgICAgICAgICAg
YnJlYWs7CkBAIC0yOTUxLDggKzI5NTEsOCBAQCBwYXJzZU1ldGhvZDoKICAgICAgICAgICAgIGJv
b2wgaXNDb25zdHJ1Y3RvciA9IHRhZyA9PSBDbGFzc0VsZW1lbnRUYWc6Okluc3RhbmNlICYmICpp
ZGVudCA9PSBwcm9wZXJ0eU5hbWVzLmNvbnN0cnVjdG9yOwogICAgICAgICAgICAgaWYgKGlzQXN5
bmNNZXRob2RQYXJzZU1vZGUocGFyc2VNb2RlKSB8fCBpc0FzeW5jR2VuZXJhdG9yTWV0aG9kUGFy
c2VNb2RlKHBhcnNlTW9kZSkgfHwgaXNHZW5lcmF0b3JNZXRob2RQYXJzZU1vZGUocGFyc2VNb2Rl
KSkgewogICAgICAgICAgICAgICAgIGlzQ29uc3RydWN0b3IgPSBmYWxzZTsKLSAgICAgICAgICAg
ICAgICBzZW1hbnRpY0ZhaWxJZlRydWUoKmlkZW50ID09IG1fdm0tPnByb3BlcnR5TmFtZXMtPnBy
b3RvdHlwZSwgIkNhbm5vdCBkZWNsYXJlICIsIHN0cmluZ0FydGljbGVGb3JGdW5jdGlvbk1vZGUo
cGFyc2VNb2RlKSwgc3RyaW5nRm9yRnVuY3Rpb25Nb2RlKHBhcnNlTW9kZSksICIgbmFtZWQgJ3By
b3RvdHlwZSciKTsKLSAgICAgICAgICAgICAgICBzZW1hbnRpY0ZhaWxJZlRydWUoKmlkZW50ID09
IG1fdm0tPnByb3BlcnR5TmFtZXMtPmNvbnN0cnVjdG9yLCAiQ2Fubm90IGRlY2xhcmUgIiwgc3Ry
aW5nQXJ0aWNsZUZvckZ1bmN0aW9uTW9kZShwYXJzZU1vZGUpLCBzdHJpbmdGb3JGdW5jdGlvbk1v
ZGUocGFyc2VNb2RlKSwgIiBuYW1lZCAnY29uc3RydWN0b3InIik7CisgICAgICAgICAgICAgICAg
c2VtYW50aWNGYWlsSWZUcnVlKCppZGVudCA9PSBtX3ZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlw
ZSwgIkNhbm5vdCBkZWNsYXJlICIsIHN0cmluZ0FydGljbGVGb3JGdW5jdGlvbk1vZGUocGFyc2VN
b2RlKSwgc3RyaW5nRm9yRnVuY3Rpb25Nb2RlKHBhcnNlTW9kZSksICIgbmFtZWQgJ3Byb3RvdHlw
ZSciKTsKKyAgICAgICAgICAgICAgICBzZW1hbnRpY0ZhaWxJZlRydWUoKmlkZW50ID09IG1fdm0u
cHJvcGVydHlOYW1lcy0+Y29uc3RydWN0b3IsICJDYW5ub3QgZGVjbGFyZSAiLCBzdHJpbmdBcnRp
Y2xlRm9yRnVuY3Rpb25Nb2RlKHBhcnNlTW9kZSksIHN0cmluZ0ZvckZ1bmN0aW9uTW9kZShwYXJz
ZU1vZGUpLCAiIG5hbWVkICdjb25zdHJ1Y3RvciciKTsKICAgICAgICAgICAgIH0KIAogICAgICAg
ICAgICAgbWV0aG9kSW5mby5uYW1lID0gaXNDb25zdHJ1Y3RvciA/IGluZm8uY2xhc3NOYW1lIDog
aWRlbnQ7CkBAIC0zMjE4LDEwICszMjE4LDEwIEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRl
cj4gdHlwZW5hbWUgVHIKICAgICAgICAgLy8gZS5nLgogICAgICAgICAvLyAgICAgKiBhcyBuYW1l
c3BhY2UKICAgICAgICAgQVNTRVJUKG1hdGNoKFRJTUVTKSk7Ci0gICAgICAgIGltcG9ydGVkTmFt
ZSA9ICZtX3ZtLT5wcm9wZXJ0eU5hbWVzLT50aW1lc0lkZW50aWZpZXI7CisgICAgICAgIGltcG9y
dGVkTmFtZSA9ICZtX3ZtLnByb3BlcnR5TmFtZXMtPnRpbWVzSWRlbnRpZmllcjsKICAgICAgICAg
bmV4dCgpOwogCi0gICAgICAgIGZhaWxJZkZhbHNlKG1hdGNoQ29udGV4dHVhbEtleXdvcmQobV92
bS0+cHJvcGVydHlOYW1lcy0+YXMpLCAiRXhwZWN0ZWQgJ2FzJyBiZWZvcmUgaW1wb3J0ZWQgYmlu
ZGluZyBuYW1lIik7CisgICAgICAgIGZhaWxJZkZhbHNlKG1hdGNoQ29udGV4dHVhbEtleXdvcmQo
bV92bS5wcm9wZXJ0eU5hbWVzLT5hcyksICJFeHBlY3RlZCAnYXMnIGJlZm9yZSBpbXBvcnRlZCBi
aW5kaW5nIG5hbWUiKTsKICAgICAgICAgbmV4dCgpOwogCiAgICAgICAgIGZhaWxJZkZhbHNlKG1h
dGNoU3BlY0lkZW50aWZpZXIoKSwgIkV4cGVjdGVkIGEgdmFyaWFibGUgbmFtZSBmb3IgdGhlIGlt
cG9ydCBkZWNsYXJhdGlvbiIpOwpAQCAtMzI0NCw3ICszMjQ0LDcgQEAgdGVtcGxhdGUgPGNsYXNz
IFRyZWVCdWlsZGVyPiB0eXBlbmFtZSBUcgogICAgICAgICBpbXBvcnRlZE5hbWUgPSBsb2NhbE5h
bWU7CiAgICAgICAgIG5leHQoKTsKIAotICAgICAgICBpZiAobWF0Y2hDb250ZXh0dWFsS2V5d29y
ZChtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5hcykpIHsKKyAgICAgICAgaWYgKG1hdGNoQ29udGV4dHVh
bEtleXdvcmQobV92bS5wcm9wZXJ0eU5hbWVzLT5hcykpIHsKICAgICAgICAgICAgIG5leHQoKTsK
ICAgICAgICAgICAgIGZhaWxJZkZhbHNlKG1hdGNoU3BlY0lkZW50aWZpZXIoKSwgIkV4cGVjdGVk
IGEgdmFyaWFibGUgbmFtZSBmb3IgdGhlIGltcG9ydCBkZWNsYXJhdGlvbiIpOwogICAgICAgICAg
ICAgbG9jYWxOYW1lVG9rZW4gPSBtX3Rva2VuOwpAQCAtMzI2MCw3ICszMjYwLDcgQEAgdGVtcGxh
dGUgPGNsYXNzIFRyZWVCdWlsZGVyPiB0eXBlbmFtZSBUcgogICAgICAgICBBU1NFUlQobWF0Y2hT
cGVjSWRlbnRpZmllcigpKTsKICAgICAgICAgbG9jYWxOYW1lVG9rZW4gPSBtX3Rva2VuOwogICAg
ICAgICBsb2NhbE5hbWUgPSBtX3Rva2VuLm1fZGF0YS5pZGVudDsKLSAgICAgICAgaW1wb3J0ZWRO
YW1lID0gJm1fdm0tPnByb3BlcnR5TmFtZXMtPmRlZmF1bHRLZXl3b3JkOworICAgICAgICBpbXBv
cnRlZE5hbWUgPSAmbV92bS5wcm9wZXJ0eU5hbWVzLT5kZWZhdWx0S2V5d29yZDsKICAgICAgICAg
bmV4dCgpOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC0zMzM4LDcgKzMzMzgsNyBAQCB0ZW1w
bGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lCiAgICAgLy8gRnJvbUNsYXVzZSA6
CiAgICAgLy8gZnJvbSBNb2R1bGVTcGVjaWZpZXIKIAotICAgIGZhaWxJZkZhbHNlKG1hdGNoQ29u
dGV4dHVhbEtleXdvcmQobV92bS0+cHJvcGVydHlOYW1lcy0+ZnJvbSksICJFeHBlY3RlZCAnZnJv
bScgYmVmb3JlIGltcG9ydGVkIG1vZHVsZSBuYW1lIik7CisgICAgZmFpbElmRmFsc2UobWF0Y2hD
b250ZXh0dWFsS2V5d29yZChtX3ZtLnByb3BlcnR5TmFtZXMtPmZyb20pLCAiRXhwZWN0ZWQgJ2Zy
b20nIGJlZm9yZSBpbXBvcnRlZCBtb2R1bGUgbmFtZSIpOwogICAgIG5leHQoKTsKIAogICAgIGF1
dG8gbW9kdWxlTmFtZSA9IHBhcnNlTW9kdWxlTmFtZShjb250ZXh0KTsKQEAgLTMzNjMsNyArMzM2
Myw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gdHlwZW5hbWUgVHIKICAgICBjb25z
dCBJZGVudGlmaWVyKiBleHBvcnRlZE5hbWUgPSBsb2NhbE5hbWU7CiAgICAgbmV4dCgpOwogCi0g
ICAgaWYgKG1hdGNoQ29udGV4dHVhbEtleXdvcmQobV92bS0+cHJvcGVydHlOYW1lcy0+YXMpKSB7
CisgICAgaWYgKG1hdGNoQ29udGV4dHVhbEtleXdvcmQobV92bS5wcm9wZXJ0eU5hbWVzLT5hcykp
IHsKICAgICAgICAgbmV4dCgpOwogICAgICAgICBmYWlsSWZGYWxzZShtYXRjaElkZW50aWZpZXJP
cktleXdvcmQoKSwgIkV4cGVjdGVkIGFuIGV4cG9ydGVkIG5hbWUgZm9yIHRoZSBleHBvcnQgZGVj
bGFyYXRpb24iKTsKICAgICAgICAgZXhwb3J0ZWROYW1lID0gbV90b2tlbi5tX2RhdGEuaWRlbnQ7
CkBAIC0zMzg4LDcgKzMzODgsNyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVT
dGF0ZW1lCiAgICAgICAgIC8vIGV4cG9ydCAqIEZyb21DbGF1c2UgOwogICAgICAgICBuZXh0KCk7
CiAKLSAgICAgICAgZmFpbElmRmFsc2UobWF0Y2hDb250ZXh0dWFsS2V5d29yZChtX3ZtLT5wcm9w
ZXJ0eU5hbWVzLT5mcm9tKSwgIkV4cGVjdGVkICdmcm9tJyBiZWZvcmUgZXhwb3J0ZWQgbW9kdWxl
IG5hbWUiKTsKKyAgICAgICAgZmFpbElmRmFsc2UobWF0Y2hDb250ZXh0dWFsS2V5d29yZChtX3Zt
LnByb3BlcnR5TmFtZXMtPmZyb20pLCAiRXhwZWN0ZWQgJ2Zyb20nIGJlZm9yZSBleHBvcnRlZCBt
b2R1bGUgbmFtZSIpOwogICAgICAgICBuZXh0KCk7CiAgICAgICAgIGF1dG8gbW9kdWxlTmFtZSA9
IHBhcnNlTW9kdWxlTmFtZShjb250ZXh0KTsKICAgICAgICAgZmFpbElmRmFsc2UobW9kdWxlTmFt
ZSwgIkNhbm5vdCBwYXJzZSB0aGUgJ2Zyb20nIGNsYXVzZSIpOwpAQCAtMzQyMCw3ICszNDIwLDcg
QEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZQogICAgICAgICAgICAg
aWYgKG1hdGNoKElERU5UKSkKICAgICAgICAgICAgICAgICBsb2NhbE5hbWUgPSBtX3Rva2VuLm1f
ZGF0YS5pZGVudDsKICAgICAgICAgICAgIHJlc3RvcmVTYXZlUG9pbnQoc2F2ZVBvaW50KTsKLSAg
ICAgICAgfSBlbHNlIGlmIChtYXRjaENvbnRleHR1YWxLZXl3b3JkKG1fdm0tPnByb3BlcnR5TmFt
ZXMtPmFzeW5jKSkgeworICAgICAgICB9IGVsc2UgaWYgKG1hdGNoQ29udGV4dHVhbEtleXdvcmQo
bV92bS5wcm9wZXJ0eU5hbWVzLT5hc3luYykpIHsKICAgICAgICAgICAgIFNhdmVQb2ludCBzYXZl
UG9pbnQgPSBjcmVhdGVTYXZlUG9pbnQoKTsKICAgICAgICAgICAgIG5leHQoKTsKICAgICAgICAg
ICAgIGlmIChtYXRjaChGVU5DVElPTikgJiYgIW1fbGV4ZXItPmhhc0xpbmVUZXJtaW5hdG9yQmVm
b3JlVG9rZW4oKSkgewpAQCAtMzQzMyw3ICszNDMzLDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVC
dWlsZGVyPiBUcmVlU3RhdGVtZQogICAgICAgICB9CiAKICAgICAgICAgaWYgKCFsb2NhbE5hbWUp
Ci0gICAgICAgICAgICBsb2NhbE5hbWUgPSAmbV92bS0+cHJvcGVydHlOYW1lcy0+c3RhckRlZmF1
bHRQcml2YXRlTmFtZTsKKyAgICAgICAgICAgIGxvY2FsTmFtZSA9ICZtX3ZtLnByb3BlcnR5TmFt
ZXMtPnN0YXJEZWZhdWx0UHJpdmF0ZU5hbWU7CiAKICAgICAgICAgaWYgKGlzRnVuY3Rpb25PckNs
YXNzRGVjbGFyYXRpb24pIHsKICAgICAgICAgICAgIGlmIChzdGFydHNXaXRoRnVuY3Rpb24pIHsK
QEAgLTM0NDQsNyArMzQ0NCw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0
YXRlbWUKICAgICAgICAgICAgIH0gZWxzZSBpZiAobWF0Y2goQ0xBU1NUT0tFTikpIHsKICAgICAg
ICAgICAgICAgICByZXN1bHQgPSBwYXJzZUNsYXNzRGVjbGFyYXRpb24oY29udGV4dCwgRXhwb3J0
VHlwZTo6Tm90RXhwb3J0ZWQsIERlY2xhcmF0aW9uRGVmYXVsdENvbnRleHQ6OkV4cG9ydERlZmF1
bHQpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQobWF0Y2hD
b250ZXh0dWFsS2V5d29yZChtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5hc3luYykpOworICAgICAgICAg
ICAgICAgIEFTU0VSVChtYXRjaENvbnRleHR1YWxLZXl3b3JkKG1fdm0ucHJvcGVydHlOYW1lcy0+
YXN5bmMpKTsKICAgICAgICAgICAgICAgICBuZXh0KCk7CiAgICAgICAgICAgICAgICAgRGVwdGhN
YW5hZ2VyIHN0YXRlbWVudERlcHRoKCZtX3N0YXRlbWVudERlcHRoKTsKICAgICAgICAgICAgICAg
ICBtX3N0YXRlbWVudERlcHRoID0gMTsKQEAgLTM0NjUsMTggKzM0NjUsMTggQEAgdGVtcGxhdGUg
PGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZQogICAgICAgICAgICAgVHJlZUV4cHJlc3Np
b24gZXhwcmVzc2lvbiA9IHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oY29udGV4dCk7CiAgICAg
ICAgICAgICBmYWlsSWZGYWxzZShleHByZXNzaW9uLCAiQ2Fubm90IHBhcnNlIGV4cHJlc3Npb24i
KTsKIAotICAgICAgICAgICAgRGVjbGFyYXRpb25SZXN1bHRNYXNrIGRlY2xhcmF0aW9uUmVzdWx0
ID0gZGVjbGFyZVZhcmlhYmxlKCZtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5zdGFyRGVmYXVsdFByaXZh
dGVOYW1lLCBEZWNsYXJhdGlvblR5cGU6OkNvbnN0RGVjbGFyYXRpb24pOworICAgICAgICAgICAg
RGVjbGFyYXRpb25SZXN1bHRNYXNrIGRlY2xhcmF0aW9uUmVzdWx0ID0gZGVjbGFyZVZhcmlhYmxl
KCZtX3ZtLnByb3BlcnR5TmFtZXMtPnN0YXJEZWZhdWx0UHJpdmF0ZU5hbWUsIERlY2xhcmF0aW9u
VHlwZTo6Q29uc3REZWNsYXJhdGlvbik7CiAgICAgICAgICAgICBpZiAoZGVjbGFyYXRpb25SZXN1
bHQgJiBEZWNsYXJhdGlvblJlc3VsdDo6SW52YWxpZER1cGxpY2F0ZURlY2xhcmF0aW9uKQogICAg
ICAgICAgICAgICAgIGludGVybmFsRmFpbFdpdGhNZXNzYWdlKGZhbHNlLCAiT25seSBvbmUgJ2Rl
ZmF1bHQnIGV4cG9ydCBpcyBhbGxvd2VkIik7CiAKLSAgICAgICAgICAgIFRyZWVFeHByZXNzaW9u
IGFzc2lnbm1lbnQgPSBjb250ZXh0LmNyZWF0ZUFzc2lnblJlc29sdmUobG9jYXRpb24sIG1fdm0t
PnByb3BlcnR5TmFtZXMtPnN0YXJEZWZhdWx0UHJpdmF0ZU5hbWUsIGV4cHJlc3Npb24sIHN0YXJ0
LCBzdGFydCwgdG9rZW5FbmRQb3NpdGlvbigpLCBBc3NpZ25tZW50Q29udGV4dDo6Q29uc3REZWNs
YXJhdGlvblN0YXRlbWVudCk7CisgICAgICAgICAgICBUcmVlRXhwcmVzc2lvbiBhc3NpZ25tZW50
ID0gY29udGV4dC5jcmVhdGVBc3NpZ25SZXNvbHZlKGxvY2F0aW9uLCBtX3ZtLnByb3BlcnR5TmFt
ZXMtPnN0YXJEZWZhdWx0UHJpdmF0ZU5hbWUsIGV4cHJlc3Npb24sIHN0YXJ0LCBzdGFydCwgdG9r
ZW5FbmRQb3NpdGlvbigpLCBBc3NpZ25tZW50Q29udGV4dDo6Q29uc3REZWNsYXJhdGlvblN0YXRl
bWVudCk7CiAgICAgICAgICAgICByZXN1bHQgPSBjb250ZXh0LmNyZWF0ZUV4cHJTdGF0ZW1lbnQo
bG9jYXRpb24sIGFzc2lnbm1lbnQsIHN0YXJ0LCB0b2tlbkVuZFBvc2l0aW9uKCkpOwogICAgICAg
ICAgICAgZmFpbElmRmFsc2UoYXV0b1NlbWlDb2xvbigpLCAiRXhwZWN0ZWQgYSAnOycgZm9sbG93
aW5nIGEgdGFyZ2V0ZWQgZXhwb3J0IGRlY2xhcmF0aW9uIik7CiAgICAgICAgIH0KICAgICAgICAg
ZmFpbElmRmFsc2UocmVzdWx0LCAiQ2Fubm90IHBhcnNlIHRoZSBkZWNsYXJhdGlvbiIpOwogCi0g
ICAgICAgIHNlbWFudGljRmFpbElmRmFsc2UoZXhwb3J0TmFtZShtX3ZtLT5wcm9wZXJ0eU5hbWVz
LT5kZWZhdWx0S2V5d29yZCksICJPbmx5IG9uZSAnZGVmYXVsdCcgZXhwb3J0IGlzIGFsbG93ZWQi
KTsKLSAgICAgICAgbV9tb2R1bGVTY29wZURhdGEtPmV4cG9ydEJpbmRpbmcoKmxvY2FsTmFtZSwg
bV92bS0+cHJvcGVydHlOYW1lcy0+ZGVmYXVsdEtleXdvcmQpOworICAgICAgICBzZW1hbnRpY0Zh
aWxJZkZhbHNlKGV4cG9ydE5hbWUobV92bS5wcm9wZXJ0eU5hbWVzLT5kZWZhdWx0S2V5d29yZCks
ICJPbmx5IG9uZSAnZGVmYXVsdCcgZXhwb3J0IGlzIGFsbG93ZWQiKTsKKyAgICAgICAgbV9tb2R1
bGVTY29wZURhdGEtPmV4cG9ydEJpbmRpbmcoKmxvY2FsTmFtZSwgbV92bS5wcm9wZXJ0eU5hbWVz
LT5kZWZhdWx0S2V5d29yZCk7CiAgICAgICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUV4cG9ydERl
ZmF1bHREZWNsYXJhdGlvbihleHBvcnRMb2NhdGlvbiwgcmVzdWx0LCAqbG9jYWxOYW1lKTsKICAg
ICB9CiAKQEAgLTM1MTAsNyArMzUxMCw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4g
VHJlZVN0YXRlbWUKICAgICAgICAgaGFuZGxlUHJvZHVjdGlvbk9yRmFpbDIoQ0xPU0VCUkFDRSwg
In0iLCAiZW5kIiwgImV4cG9ydCBsaXN0Iik7CiAKICAgICAgICAgdHlwZW5hbWUgVHJlZUJ1aWxk
ZXI6Ok1vZHVsZU5hbWUgbW9kdWxlTmFtZSA9IDA7Ci0gICAgICAgIGlmIChtYXRjaENvbnRleHR1
YWxLZXl3b3JkKG1fdm0tPnByb3BlcnR5TmFtZXMtPmZyb20pKSB7CisgICAgICAgIGlmIChtYXRj
aENvbnRleHR1YWxLZXl3b3JkKG1fdm0ucHJvcGVydHlOYW1lcy0+ZnJvbSkpIHsKICAgICAgICAg
ICAgIG5leHQoKTsKICAgICAgICAgICAgIG1vZHVsZU5hbWUgPSBwYXJzZU1vZHVsZU5hbWUoY29u
dGV4dCk7CiAgICAgICAgICAgICBmYWlsSWZGYWxzZShtb2R1bGVOYW1lLCAiQ2Fubm90IHBhcnNl
IHRoZSAnZnJvbScgY2xhdXNlIik7CkBAIC0zNTY2LDcgKzM1NjYsNyBAQCB0ZW1wbGF0ZSA8Y2xh
c3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lCiAgICAgICAgICAgICBicmVhazsKIAogICAgICAg
ICBjYXNlIElERU5UOgotICAgICAgICAgICAgaWYgKCptX3Rva2VuLm1fZGF0YS5pZGVudCA9PSBt
X3ZtLT5wcm9wZXJ0eU5hbWVzLT5hc3luYyAmJiAhbV90b2tlbi5tX2RhdGEuZXNjYXBlZCkgewor
ICAgICAgICAgICAgaWYgKCptX3Rva2VuLm1fZGF0YS5pZGVudCA9PSBtX3ZtLnByb3BlcnR5TmFt
ZXMtPmFzeW5jICYmICFtX3Rva2VuLm1fZGF0YS5lc2NhcGVkKSB7CiAgICAgICAgICAgICAgICAg
bmV4dCgpOwogICAgICAgICAgICAgICAgIHNlbWFudGljRmFpbElmRmFsc2UobWF0Y2goRlVOQ1RJ
T04pICYmICFtX2xleGVyLT5oYXNMaW5lVGVybWluYXRvckJlZm9yZVRva2VuKCksICJFeHBlY3Rl
ZCAnZnVuY3Rpb24nIGtleXdvcmQgZm9sbG93aW5nICdhc3luYycga2V5d29yZCB3aXRoIG5vIHBy
ZWNlZGluZyBsaW5lIHRlcm1pbmF0b3IiKTsKICAgICAgICAgICAgICAgICBEZXB0aE1hbmFnZXIg
c3RhdGVtZW50RGVwdGgoJm1fc3RhdGVtZW50RGVwdGgpOwpAQCAtMzY5Miw3ICszNjkyLDcgQEAg
dGVtcGxhdGUgPHR5cGVuYW1lIFRyZWVCdWlsZGVyPiBUcmVlRXhwcgogICAgICAgICAgICAgcmVz
dG9yZVNhdmVQb2ludChzYXZlUG9pbnQpOwogICAgICAgICAgICAgYm9vbCBpc0FzeW5jQXJyb3cg
PSBmYWxzZTsKICAgICAgICAgICAgIGlmIChVTkxJS0VMWShjbGFzc2lmaWVyLmluZGljYXRlc1Bv
c3NpYmxlQXN5bmNBcnJvd0Z1bmN0aW9uKCkpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1hdGNo
Q29udGV4dHVhbEtleXdvcmQobV92bS0+cHJvcGVydHlOYW1lcy0+YXN5bmMpKSB7CisgICAgICAg
ICAgICAgICAgaWYgKG1hdGNoQ29udGV4dHVhbEtleXdvcmQobV92bS5wcm9wZXJ0eU5hbWVzLT5h
c3luYykpIHsKICAgICAgICAgICAgICAgICAgICAgbmV4dCgpOwogICAgICAgICAgICAgICAgICAg
ICBpc0FzeW5jQXJyb3cgPSAhbV9sZXhlci0+aGFzTGluZVRlcm1pbmF0b3JCZWZvcmVUb2tlbigp
OwogICAgICAgICAgICAgICAgIH0KQEAgLTM3NjcsOCArMzc2Nyw4IEBAIHRlbXBsYXRlIDx0eXBl
bmFtZSBUcmVlQnVpbGRlcj4gVHJlZUV4cHIKICAgICAgICAgbV9wYXJzZXJTdGF0ZS5hc3NpZ25t
ZW50Q291bnQrKzsKICAgICAgICAgbmV4dChUcmVlQnVpbGRlcjo6RG9udEJ1aWxkU3RyaW5ncyk7
CiAgICAgICAgIGlmIChzdHJpY3RNb2RlKCkgJiYgbV9wYXJzZXJTdGF0ZS5sYXN0SWRlbnRpZmll
ciAmJiBjb250ZXh0LmlzUmVzb2x2ZShsaHMpKSB7Ci0gICAgICAgICAgICBmYWlsSWZUcnVlSWZT
dHJpY3QobV92bS0+cHJvcGVydHlOYW1lcy0+ZXZhbCA9PSAqbV9wYXJzZXJTdGF0ZS5sYXN0SWRl
bnRpZmllciwgIkNhbm5vdCBtb2RpZnkgJ2V2YWwnIGluIHN0cmljdCBtb2RlIik7Ci0gICAgICAg
ICAgICBmYWlsSWZUcnVlSWZTdHJpY3QobV92bS0+cHJvcGVydHlOYW1lcy0+YXJndW1lbnRzID09
ICptX3BhcnNlclN0YXRlLmxhc3RJZGVudGlmaWVyLCAiQ2Fubm90IG1vZGlmeSAnYXJndW1lbnRz
JyBpbiBzdHJpY3QgbW9kZSIpOworICAgICAgICAgICAgZmFpbElmVHJ1ZUlmU3RyaWN0KG1fdm0u
cHJvcGVydHlOYW1lcy0+ZXZhbCA9PSAqbV9wYXJzZXJTdGF0ZS5sYXN0SWRlbnRpZmllciwgIkNh
bm5vdCBtb2RpZnkgJ2V2YWwnIGluIHN0cmljdCBtb2RlIik7CisgICAgICAgICAgICBmYWlsSWZU
cnVlSWZTdHJpY3QobV92bS5wcm9wZXJ0eU5hbWVzLT5hcmd1bWVudHMgPT0gKm1fcGFyc2VyU3Rh
dGUubGFzdElkZW50aWZpZXIsICJDYW5ub3QgbW9kaWZ5ICdhcmd1bWVudHMnIGluIHN0cmljdCBt
b2RlIik7CiAgICAgICAgICAgICBtX3BhcnNlclN0YXRlLmxhc3RJZGVudGlmaWVyID0gMDsKICAg
ICAgICAgfQogICAgICAgICBsaHMgPSBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKGNvbnRleHQp
OwpAQCAtMzk3MSw3ICszOTcxLDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVl
UHJvcGVydAogcGFyc2VQcm9wZXJ0eToKICAgICBzd2l0Y2ggKG1fdG9rZW4ubV90eXBlKSB7CiAg
ICAgY2FzZSBJREVOVDoKLSAgICAgICAgaWYgKFVOTElLRUxZKCptX3Rva2VuLm1fZGF0YS5pZGVu
dCA9PSBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5hc3luYyAmJiAhbV90b2tlbi5tX2RhdGEuZXNjYXBl
ZCkpIHsKKyAgICAgICAgaWYgKFVOTElLRUxZKCptX3Rva2VuLm1fZGF0YS5pZGVudCA9PSBtX3Zt
LnByb3BlcnR5TmFtZXMtPmFzeW5jICYmICFtX3Rva2VuLm1fZGF0YS5lc2NhcGVkKSkgewogICAg
ICAgICAgICAgaWYgKHBhcnNlTW9kZSA9PSBTb3VyY2VQYXJzZU1vZGU6Ok1ldGhvZE1vZGUpIHsK
ICAgICAgICAgICAgICAgICBTYXZlUG9pbnQgc2F2ZVBvaW50ID0gY3JlYXRlU2F2ZVBvaW50KCk7
CiAgICAgICAgICAgICAgICAgbmV4dCgpOwpAQCAtNDAwMSw3ICs0MDAxLDcgQEAgbmFtZWRQcm9w
ZXJ0eToKICAgICAgICAgdW5zaWduZWQgZ2V0dGVyT3JTZXR0ZXJTdGFydE9mZnNldCA9IHRva2Vu
U3RhcnQoKTsKICAgICAgICAgSlNUb2tlbiBpZGVudFRva2VuID0gbV90b2tlbjsKIAotICAgICAg
ICBpZiAoY29tcGxldGUgfHwgKHdhc0lkZW50ICYmICFpc0dlbmVyYXRvck1ldGhvZFBhcnNlTW9k
ZShwYXJzZU1vZGUpICAmJiAoKmlkZW50ID09IG1fdm0tPnByb3BlcnR5TmFtZXMtPmdldCB8fCAq
aWRlbnQgPT0gbV92bS0+cHJvcGVydHlOYW1lcy0+c2V0KSkpCisgICAgICAgIGlmIChjb21wbGV0
ZSB8fCAod2FzSWRlbnQgJiYgIWlzR2VuZXJhdG9yTWV0aG9kUGFyc2VNb2RlKHBhcnNlTW9kZSkg
ICYmICgqaWRlbnQgPT0gbV92bS5wcm9wZXJ0eU5hbWVzLT5nZXQgfHwgKmlkZW50ID09IG1fdm0u
cHJvcGVydHlOYW1lcy0+c2V0KSkpCiAgICAgICAgICAgICBuZXh0RXhwZWN0SWRlbnRpZmllcihM
ZXhlckZsYWdzSWdub3JlUmVzZXJ2ZWRXb3Jkcyk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAg
IG5leHRFeHBlY3RJZGVudGlmaWVyKExleGVyRmxhZ3NJZ25vcmVSZXNlcnZlZFdvcmRzIHwgVHJl
ZUJ1aWxkZXI6OkRvbnRCdWlsZEtleXdvcmRzKTsKQEAgLTQwMTEsNyArNDAxMSw3IEBAIG5hbWVk
UHJvcGVydHk6CiAgICAgICAgICAgICBUcmVlRXhwcmVzc2lvbiBub2RlID0gcGFyc2VBc3NpZ25t
ZW50RXhwcmVzc2lvbk9yUHJvcGFnYXRlRXJyb3JDbGFzcyhjb250ZXh0KTsKICAgICAgICAgICAg
IGZhaWxJZkZhbHNlKG5vZGUsICJDYW5ub3QgcGFyc2UgZXhwcmVzc2lvbiBmb3IgcHJvcGVydHkg
ZGVjbGFyYXRpb24iKTsKICAgICAgICAgICAgIGNvbnRleHQuc2V0RW5kT2Zmc2V0KG5vZGUsIG1f
bGV4ZXItPmN1cnJlbnRPZmZzZXQoKSk7Ci0gICAgICAgICAgICBJbmZlck5hbWUgaW5mZXJOYW1l
ID0gaWRlbnQgJiYgKmlkZW50ID09IG1fdm0tPnByb3BlcnR5TmFtZXMtPnVuZGVyc2NvcmVQcm90
byA/IEluZmVyTmFtZTo6RGlzYWxsb3dlZCA6IEluZmVyTmFtZTo6QWxsb3dlZDsKKyAgICAgICAg
ICAgIEluZmVyTmFtZSBpbmZlck5hbWUgPSBpZGVudCAmJiAqaWRlbnQgPT0gbV92bS5wcm9wZXJ0
eU5hbWVzLT51bmRlcnNjb3JlUHJvdG8gPyBJbmZlck5hbWU6OkRpc2FsbG93ZWQgOiBJbmZlck5h
bWU6OkFsbG93ZWQ7CiAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5jcmVhdGVQcm9wZXJ0eShp
ZGVudCwgbm9kZSwgUHJvcGVydHlOb2RlOjpDb25zdGFudCwgUHJvcGVydHlOb2RlOjpVbmtub3du
LCBjb21wbGV0ZSwgU3VwZXJCaW5kaW5nOjpOb3ROZWVkZWQsIGluZmVyTmFtZSwgQ2xhc3NFbGVt
ZW50VGFnOjpObyk7CiAgICAgICAgIH0KIApAQCAtNDAyOCw3ICs0MDI4LDcgQEAgbmFtZWRQcm9w
ZXJ0eToKICAgICAgICAgICAgIHNlbWFudGljRmFpbHVyZUR1ZVRvS2V5d29yZENoZWNraW5nVG9r
ZW4oaWRlbnRUb2tlbiwgInNob3J0aGFuZCBwcm9wZXJ0eSBuYW1lIik7CiAgICAgICAgICAgICBK
U1RleHRQb3NpdGlvbiBzdGFydCA9IHRva2VuU3RhcnRQb3NpdGlvbigpOwogICAgICAgICAgICAg
SlNUb2tlbkxvY2F0aW9uIGxvY2F0aW9uKHRva2VuTG9jYXRpb24oKSk7Ci0gICAgICAgICAgICBj
dXJyZW50U2NvcGUoKS0+dXNlVmFyaWFibGUoaWRlbnQsIG1fdm0tPnByb3BlcnR5TmFtZXMtPmV2
YWwgPT0gKmlkZW50KTsKKyAgICAgICAgICAgIGN1cnJlbnRTY29wZSgpLT51c2VWYXJpYWJsZShp
ZGVudCwgbV92bS5wcm9wZXJ0eU5hbWVzLT5ldmFsID09ICppZGVudCk7CiAgICAgICAgICAgICBp
ZiAoY3VycmVudFNjb3BlKCktPmlzQXJyb3dGdW5jdGlvbigpKQogICAgICAgICAgICAgICAgIGN1
cnJlbnRTY29wZSgpLT5zZXRJbm5lckFycm93RnVuY3Rpb25Vc2VzRXZhbCgpOwogICAgICAgICAg
ICAgVHJlZUV4cHJlc3Npb24gbm9kZSA9IGNvbnRleHQuY3JlYXRlUmVzb2x2ZShsb2NhdGlvbiwg
KmlkZW50LCBzdGFydCwgbGFzdFRva2VuRW5kUG9zaXRpb24oKSk7CkBAIC00MDM5LDkgKzQwMzks
OSBAQCBuYW1lZFByb3BlcnR5OgogICAgICAgICAgICAgY2xhc3NpZnlFeHByZXNzaW9uRXJyb3Io
RXJyb3JJbmRpY2F0ZXNQYXR0ZXJuKTsKIAogICAgICAgICBQcm9wZXJ0eU5vZGU6OlR5cGUgdHlw
ZTsKLSAgICAgICAgaWYgKCppZGVudCA9PSBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5nZXQpCisgICAg
ICAgIGlmICgqaWRlbnQgPT0gbV92bS5wcm9wZXJ0eU5hbWVzLT5nZXQpCiAgICAgICAgICAgICB0
eXBlID0gUHJvcGVydHlOb2RlOjpHZXR0ZXI7Ci0gICAgICAgIGVsc2UgaWYgKCppZGVudCA9PSBt
X3ZtLT5wcm9wZXJ0eU5hbWVzLT5zZXQpCisgICAgICAgIGVsc2UgaWYgKCppZGVudCA9PSBtX3Zt
LnByb3BlcnR5TmFtZXMtPnNldCkKICAgICAgICAgICAgIHR5cGUgPSBQcm9wZXJ0eU5vZGU6OlNl
dHRlcjsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgZmFpbFdpdGhNZXNzYWdlKCJFeHBlY3Rl
ZCBhICc6JyBmb2xsb3dpbmcgdGhlIHByb3BlcnR5IG5hbWUgJyIsIGlkZW50LT5pbXBsKCksICIn
Iik7CkBAIC00MDUzLDcgKzQwNTMsNyBAQCBuYW1lZFByb3BlcnR5OgogICAgICAgICBuZXh0KCk7
CiAKICAgICAgICAgaWYgKG1hdGNoKE9QRU5QQVJFTikpIHsKLSAgICAgICAgICAgIGNvbnN0IElk
ZW50aWZpZXImIGlkZW50ID0gbV9wYXJzZXJBcmVuYS5pZGVudGlmaWVyQXJlbmEoKS5tYWtlTnVt
ZXJpY0lkZW50aWZpZXIoY29uc3RfY2FzdDxWTSo+KG1fdm0pLCBwcm9wZXJ0eU5hbWUpOworICAg
ICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBtX3BhcnNlckFyZW5hLmlkZW50aWZp
ZXJBcmVuYSgpLm1ha2VOdW1lcmljSWRlbnRpZmllcihjb25zdF9jYXN0PFZNJj4obV92bSksIHBy
b3BlcnR5TmFtZSk7CiAgICAgICAgICAgICBhdXRvIG1ldGhvZCA9IHBhcnNlUHJvcGVydHlNZXRo
b2QoY29udGV4dCwgJmlkZW50LCBwYXJzZU1vZGUpOwogICAgICAgICAgICAgcHJvcGFnYXRlRXJy
b3IoKTsKICAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZVByb3BlcnR5KCZpZGVudCwg
bWV0aG9kLCBQcm9wZXJ0eU5vZGU6OkNvbnN0YW50LCBQcm9wZXJ0eU5vZGU6OlVua25vd24sIGNv
bXBsZXRlLCBTdXBlckJpbmRpbmc6Ok5lZWRlZCwgSW5mZXJOYW1lOjpBbGxvd2VkLCBDbGFzc0Vs
ZW1lbnRUYWc6Ok5vKTsKQEAgLTQwNjQsNyArNDA2NCw3IEBAIG5hbWVkUHJvcGVydHk6CiAgICAg
ICAgIFRyZWVFeHByZXNzaW9uIG5vZGUgPSBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKGNvbnRl
eHQpOwogICAgICAgICBmYWlsSWZGYWxzZShub2RlLCAiQ2Fubm90IHBhcnNlIGV4cHJlc3Npb24g
Zm9yIHByb3BlcnR5IGRlY2xhcmF0aW9uIik7CiAgICAgICAgIGNvbnRleHQuc2V0RW5kT2Zmc2V0
KG5vZGUsIG1fbGV4ZXItPmN1cnJlbnRPZmZzZXQoKSk7Ci0gICAgICAgIHJldHVybiBjb250ZXh0
LmNyZWF0ZVByb3BlcnR5KGNvbnN0X2Nhc3Q8Vk0qPihtX3ZtKSwgbV9wYXJzZXJBcmVuYSwgcHJv
cGVydHlOYW1lLCBub2RlLCBQcm9wZXJ0eU5vZGU6OkNvbnN0YW50LCBQcm9wZXJ0eU5vZGU6OlVu
a25vd24sIGNvbXBsZXRlLCBTdXBlckJpbmRpbmc6Ok5vdE5lZWRlZCwgQ2xhc3NFbGVtZW50VGFn
OjpObyk7CisgICAgICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZVByb3BlcnR5KGNvbnN0X2Nhc3Q8
Vk0mPihtX3ZtKSwgbV9wYXJzZXJBcmVuYSwgcHJvcGVydHlOYW1lLCBub2RlLCBQcm9wZXJ0eU5v
ZGU6OkNvbnN0YW50LCBQcm9wZXJ0eU5vZGU6OlVua25vd24sIGNvbXBsZXRlLCBTdXBlckJpbmRp
bmc6Ok5vdE5lZWRlZCwgQ2xhc3NFbGVtZW50VGFnOjpObyk7CiAgICAgfQogICAgIGNhc2UgT1BF
TkJSQUNLRVQ6IHsKICAgICAgICAgbmV4dCgpOwpAQCAtNDA3Myw3ICs0MDczLDcgQEAgbmFtZWRQ
cm9wZXJ0eToKICAgICAgICAgaGFuZGxlUHJvZHVjdGlvbk9yRmFpbChDTE9TRUJSQUNLRVQsICJd
IiwgImVuZCIsICJjb21wdXRlZCBwcm9wZXJ0eSBuYW1lIik7CiAKICAgICAgICAgaWYgKG1hdGNo
KE9QRU5QQVJFTikpIHsKLSAgICAgICAgICAgIGF1dG8gbWV0aG9kID0gcGFyc2VQcm9wZXJ0eU1l
dGhvZChjb250ZXh0LCAmbV92bS0+cHJvcGVydHlOYW1lcy0+bnVsbElkZW50aWZpZXIsIHBhcnNl
TW9kZSk7CisgICAgICAgICAgICBhdXRvIG1ldGhvZCA9IHBhcnNlUHJvcGVydHlNZXRob2QoY29u
dGV4dCwgJm1fdm0ucHJvcGVydHlOYW1lcy0+bnVsbElkZW50aWZpZXIsIHBhcnNlTW9kZSk7CiAg
ICAgICAgICAgICBwcm9wYWdhdGVFcnJvcigpOwogICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQu
Y3JlYXRlUHJvcGVydHkocHJvcGVydHlOYW1lLCBtZXRob2QsIHN0YXRpY19jYXN0PFByb3BlcnR5
Tm9kZTo6VHlwZT4oUHJvcGVydHlOb2RlOjpDb25zdGFudCB8IFByb3BlcnR5Tm9kZTo6Q29tcHV0
ZWQpLCBQcm9wZXJ0eU5vZGU6Oktub3duRGlyZWN0LCBjb21wbGV0ZSwgU3VwZXJCaW5kaW5nOjpO
ZWVkZWQsIENsYXNzRWxlbWVudFRhZzo6Tm8pOwogICAgICAgICB9CkBAIC00MTI2LDkgKzQxMjYs
OSBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVQcm9wZXJ0CiAKICAgICBpZiAo
bWF0Y2hTcGVjSWRlbnRpZmllcigpIHx8IG1hdGNoKFNUUklORykgfHwgbV90b2tlbi5tX3R5cGUg
JiBLZXl3b3JkVG9rZW5GbGFnKSB7CiAgICAgICAgIHN0cmluZ1Byb3BlcnR5TmFtZSA9IG1fdG9r
ZW4ubV9kYXRhLmlkZW50OwotICAgICAgICBzZW1hbnRpY0ZhaWxJZlRydWUodGFnID09IENsYXNz
RWxlbWVudFRhZzo6U3RhdGljICYmICpzdHJpbmdQcm9wZXJ0eU5hbWUgPT0gbV92bS0+cHJvcGVy
dHlOYW1lcy0+cHJvdG90eXBlLAorICAgICAgICBzZW1hbnRpY0ZhaWxJZlRydWUodGFnID09IENs
YXNzRWxlbWVudFRhZzo6U3RhdGljICYmICpzdHJpbmdQcm9wZXJ0eU5hbWUgPT0gbV92bS5wcm9w
ZXJ0eU5hbWVzLT5wcm90b3R5cGUsCiAgICAgICAgICAgICAiQ2Fubm90IGRlY2xhcmUgYSBzdGF0
aWMgbWV0aG9kIG5hbWVkICdwcm90b3R5cGUnIik7Ci0gICAgICAgIHNlbWFudGljRmFpbElmVHJ1
ZSh0YWcgPT0gQ2xhc3NFbGVtZW50VGFnOjpJbnN0YW5jZSAmJiAqc3RyaW5nUHJvcGVydHlOYW1l
ID09IG1fdm0tPnByb3BlcnR5TmFtZXMtPmNvbnN0cnVjdG9yLAorICAgICAgICBzZW1hbnRpY0Zh
aWxJZlRydWUodGFnID09IENsYXNzRWxlbWVudFRhZzo6SW5zdGFuY2UgJiYgKnN0cmluZ1Byb3Bl
cnR5TmFtZSA9PSBtX3ZtLnByb3BlcnR5TmFtZXMtPmNvbnN0cnVjdG9yLAogICAgICAgICAgICAg
IkNhbm5vdCBkZWNsYXJlIGEgZ2V0dGVyIG9yIHNldHRlciBuYW1lZCAnY29uc3RydWN0b3InIik7
CiAgICAgICAgIG5leHQoKTsKICAgICB9IGVsc2UgaWYgKG1hdGNoKERPVUJMRSkgfHwgbWF0Y2go
SU5URUdFUikpIHsKQEAgLTQxNTcsNyArNDE1Nyw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVp
bGRlcj4gVHJlZVByb3BlcnQKICAgICBpZiAoY29tcHV0ZWRQcm9wZXJ0eU5hbWUpCiAgICAgICAg
IHJldHVybiBjb250ZXh0LmNyZWF0ZUdldHRlck9yU2V0dGVyUHJvcGVydHkobG9jYXRpb24sIHN0
YXRpY19jYXN0PFByb3BlcnR5Tm9kZTo6VHlwZT4odHlwZSB8IFByb3BlcnR5Tm9kZTo6Q29tcHV0
ZWQpLCBzdHJpY3QsIGNvbXB1dGVkUHJvcGVydHlOYW1lLCBpbmZvLCB0YWcpOwogCi0gICAgcmV0
dXJuIGNvbnRleHQuY3JlYXRlR2V0dGVyT3JTZXR0ZXJQcm9wZXJ0eShjb25zdF9jYXN0PFZNKj4o
bV92bSksIG1fcGFyc2VyQXJlbmEsIGxvY2F0aW9uLCB0eXBlLCBzdHJpY3QsIG51bWVyaWNQcm9w
ZXJ0eU5hbWUsIGluZm8sIHRhZyk7CisgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlR2V0dGVyT3JT
ZXR0ZXJQcm9wZXJ0eShjb25zdF9jYXN0PFZNJj4obV92bSksIG1fcGFyc2VyQXJlbmEsIGxvY2F0
aW9uLCB0eXBlLCBzdHJpY3QsIG51bWVyaWNQcm9wZXJ0eU5hbWUsIGluZm8sIHRhZyk7CiB9CiAK
IHRlbXBsYXRlIDx0eXBlbmFtZSBMZXhlclR5cGU+CkBAIC00MjI0LDcgKzQyMjQsNyBAQCB0ZW1w
bGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVFeHByZXNzCiAKICAgICBib29sIHNlZW5VbmRl
cnNjb3JlUHJvdG8gPSBmYWxzZTsKICAgICBpZiAoc2hvdWxkQ2hlY2tQcm9wZXJ0eUZvclVuZGVy
c2NvcmVQcm90b0R1cGxpY2F0ZShjb250ZXh0LCBwcm9wZXJ0eSkpCi0gICAgICAgIHNlZW5VbmRl
cnNjb3JlUHJvdG8gPSAqY29udGV4dC5nZXROYW1lKHByb3BlcnR5KSA9PSBtX3ZtLT5wcm9wZXJ0
eU5hbWVzLT51bmRlcnNjb3JlUHJvdG87CisgICAgICAgIHNlZW5VbmRlcnNjb3JlUHJvdG8gPSAq
Y29udGV4dC5nZXROYW1lKHByb3BlcnR5KSA9PSBtX3ZtLnByb3BlcnR5TmFtZXMtPnVuZGVyc2Nv
cmVQcm90bzsKIAogICAgIFRyZWVQcm9wZXJ0eUxpc3QgcHJvcGVydHlMaXN0ID0gY29udGV4dC5j
cmVhdGVQcm9wZXJ0eUxpc3QobG9jYXRpb24sIHByb3BlcnR5KTsKICAgICBUcmVlUHJvcGVydHlM
aXN0IHRhaWwgPSBwcm9wZXJ0eUxpc3Q7CkBAIC00MjQwLDcgKzQyNDAsNyBAQCB0ZW1wbGF0ZSA8
Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVFeHByZXNzCiAgICAgICAgICAgICByZXR1cm4gcGFyc2VT
dHJpY3RPYmplY3RMaXRlcmFsKGNvbnRleHQpOwogICAgICAgICB9CiAgICAgICAgIGlmIChzaG91
bGRDaGVja1Byb3BlcnR5Rm9yVW5kZXJzY29yZVByb3RvRHVwbGljYXRlKGNvbnRleHQsIHByb3Bl
cnR5KSkgewotICAgICAgICAgICAgaWYgKCpjb250ZXh0LmdldE5hbWUocHJvcGVydHkpID09IG1f
dm0tPnByb3BlcnR5TmFtZXMtPnVuZGVyc2NvcmVQcm90bykgeworICAgICAgICAgICAgaWYgKCpj
b250ZXh0LmdldE5hbWUocHJvcGVydHkpID09IG1fdm0ucHJvcGVydHlOYW1lcy0+dW5kZXJzY29y
ZVByb3RvKSB7CiAgICAgICAgICAgICAgICAgc2VtYW50aWNGYWlsSWZUcnVlKHNlZW5VbmRlcnNj
b3JlUHJvdG8sICJBdHRlbXB0ZWQgdG8gcmVkZWZpbmUgX19wcm90b19fIHByb3BlcnR5Iik7CiAg
ICAgICAgICAgICAgICAgc2VlblVuZGVyc2NvcmVQcm90byA9IHRydWU7CiAgICAgICAgICAgICB9
CkBAIC00Mjc0LDcgKzQyNzQsNyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVF
eHByZXNzCiAKICAgICBib29sIHNlZW5VbmRlcnNjb3JlUHJvdG8gPSBmYWxzZTsKICAgICBpZiAo
c2hvdWxkQ2hlY2tQcm9wZXJ0eUZvclVuZGVyc2NvcmVQcm90b0R1cGxpY2F0ZShjb250ZXh0LCBw
cm9wZXJ0eSkpCi0gICAgICAgIHNlZW5VbmRlcnNjb3JlUHJvdG8gPSAqY29udGV4dC5nZXROYW1l
KHByb3BlcnR5KSA9PSBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT51bmRlcnNjb3JlUHJvdG87CisgICAg
ICAgIHNlZW5VbmRlcnNjb3JlUHJvdG8gPSAqY29udGV4dC5nZXROYW1lKHByb3BlcnR5KSA9PSBt
X3ZtLnByb3BlcnR5TmFtZXMtPnVuZGVyc2NvcmVQcm90bzsKIAogICAgIFRyZWVQcm9wZXJ0eUxp
c3QgcHJvcGVydHlMaXN0ID0gY29udGV4dC5jcmVhdGVQcm9wZXJ0eUxpc3QobG9jYXRpb24sIHBy
b3BlcnR5KTsKICAgICBUcmVlUHJvcGVydHlMaXN0IHRhaWwgPSBwcm9wZXJ0eUxpc3Q7CkBAIC00
Mjg2LDcgKzQyODYsNyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVFeHByZXNz
CiAgICAgICAgIHByb3BlcnR5ID0gcGFyc2VQcm9wZXJ0eShjb250ZXh0LCB0cnVlKTsKICAgICAg
ICAgZmFpbElmRmFsc2UocHJvcGVydHksICJDYW5ub3QgcGFyc2Ugb2JqZWN0IGxpdGVyYWwgcHJv
cGVydHkiKTsKICAgICAgICAgaWYgKHNob3VsZENoZWNrUHJvcGVydHlGb3JVbmRlcnNjb3JlUHJv
dG9EdXBsaWNhdGUoY29udGV4dCwgcHJvcGVydHkpKSB7Ci0gICAgICAgICAgICBpZiAoKmNvbnRl
eHQuZ2V0TmFtZShwcm9wZXJ0eSkgPT0gbV92bS0+cHJvcGVydHlOYW1lcy0+dW5kZXJzY29yZVBy
b3RvKSB7CisgICAgICAgICAgICBpZiAoKmNvbnRleHQuZ2V0TmFtZShwcm9wZXJ0eSkgPT0gbV92
bS5wcm9wZXJ0eU5hbWVzLT51bmRlcnNjb3JlUHJvdG8pIHsKICAgICAgICAgICAgICAgICBzZW1h
bnRpY0ZhaWxJZlRydWUoc2VlblVuZGVyc2NvcmVQcm90bywgIkF0dGVtcHRlZCB0byByZWRlZmlu
ZSBfX3Byb3RvX18gcHJvcGVydHkiKTsKICAgICAgICAgICAgICAgICBzZWVuVW5kZXJzY29yZVBy
b3RvID0gdHJ1ZTsKICAgICAgICAgICAgIH0KQEAgLTQzODEsNyArNDM4MSw3IEBAIHRlbXBsYXRl
IDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUNsYXNzRXgKIHsKICAgICBBU1NFUlQobWF0Y2goQ0xB
U1NUT0tFTikpOwogICAgIFBhcnNlckNsYXNzSW5mbzxUcmVlQnVpbGRlcj4gaW5mbzsKLSAgICBp
bmZvLmNsYXNzTmFtZSA9ICZtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5udWxsSWRlbnRpZmllcjsKKyAg
ICBpbmZvLmNsYXNzTmFtZSA9ICZtX3ZtLnByb3BlcnR5TmFtZXMtPm51bGxJZGVudGlmaWVyOwog
ICAgIHJldHVybiBwYXJzZUNsYXNzKGNvbnRleHQsIEZ1bmN0aW9uTmFtZVJlcXVpcmVtZW50czo6
Tm9uZSwgaW5mbyk7CiB9CiAKQEAgLTQzOTMsNyArNDM5Myw3IEBAIHRlbXBsYXRlIDxjbGFzcyBU
cmVlQnVpbGRlcj4gVHJlZUV4cHJlc3MKICAgICB1bnNpZ25lZCBmdW5jdGlvbktleXdvcmRTdGFy
dCA9IHRva2VuU3RhcnQoKTsKICAgICBuZXh0KCk7CiAgICAgUGFyc2VyRnVuY3Rpb25JbmZvPFRy
ZWVCdWlsZGVyPiBmdW5jdGlvbkluZm87Ci0gICAgZnVuY3Rpb25JbmZvLm5hbWUgPSAmbV92bS0+
cHJvcGVydHlOYW1lcy0+bnVsbElkZW50aWZpZXI7CisgICAgZnVuY3Rpb25JbmZvLm5hbWUgPSAm
bV92bS5wcm9wZXJ0eU5hbWVzLT5udWxsSWRlbnRpZmllcjsKICAgICBTb3VyY2VQYXJzZU1vZGUg
cGFyc2VNb2RlID0gU291cmNlUGFyc2VNb2RlOjpOb3JtYWxGdW5jdGlvbk1vZGU7CiAgICAgaWYg
KGNvbnN1bWUoVElNRVMpKQogICAgICAgICBwYXJzZU1vZGUgPSBTb3VyY2VQYXJzZU1vZGU6Okdl
bmVyYXRvcldyYXBwZXJGdW5jdGlvbk1vZGU7CkBAIC00NDE0LDcgKzQ0MTQsNyBAQCB0ZW1wbGF0
ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVFeHByZXNzCiAgICAgICAgIHBhcnNlTW9kZSA9IFNv
dXJjZVBhcnNlTW9kZTo6QXN5bmNHZW5lcmF0b3JXcmFwcGVyRnVuY3Rpb25Nb2RlOwogCiAgICAg
UGFyc2VyRnVuY3Rpb25JbmZvPFRyZWVCdWlsZGVyPiBmdW5jdGlvbkluZm87Ci0gICAgZnVuY3Rp
b25JbmZvLm5hbWUgPSAmbV92bS0+cHJvcGVydHlOYW1lcy0+bnVsbElkZW50aWZpZXI7CisgICAg
ZnVuY3Rpb25JbmZvLm5hbWUgPSAmbV92bS5wcm9wZXJ0eU5hbWVzLT5udWxsSWRlbnRpZmllcjsK
ICAgICBmYWlsSWZGYWxzZShwYXJzZUZ1bmN0aW9uSW5mbyhjb250ZXh0LCBGdW5jdGlvbk5hbWVS
ZXF1aXJlbWVudHM6Ok5vbmUsIHBhcnNlTW9kZSwgZmFsc2UsIENvbnN0cnVjdG9yS2luZDo6Tm9u
ZSwgU3VwZXJCaW5kaW5nOjpOb3ROZWVkZWQsIGZ1bmN0aW9uS2V5d29yZFN0YXJ0LCBmdW5jdGlv
bkluZm8sIEZ1bmN0aW9uRGVmaW5pdGlvblR5cGU6OkV4cHJlc3Npb24pLCBwYXJzZU1vZGUgPT0g
U291cmNlUGFyc2VNb2RlOjpBc3luY0Z1bmN0aW9uTW9kZSA/ICJDYW5ub3QgcGFyc2UgYXN5bmMg
ZnVuY3Rpb24gZXhwcmVzc2lvbiIgOiAiQ2Fubm90IHBhcnNlIGFzeW5jIGdlbmVyYXRvciBmdW5j
dGlvbiBleHByZXNzaW9uIik7CiAgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlRnVuY3Rpb25FeHBy
KGxvY2F0aW9uLCBmdW5jdGlvbkluZm8pOwogfQpAQCAtNDUyNiw3ICs0NTI2LDcgQEAgdGVtcGxh
dGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzcwogCiAgICAgICAgIGdvdG8gaWRlbnRp
ZmllckV4cHJlc3Npb247CiAgICAgY2FzZSBJREVOVDogewotICAgICAgICBpZiAoVU5MSUtFTFko
Km1fdG9rZW4ubV9kYXRhLmlkZW50ID09IG1fdm0tPnByb3BlcnR5TmFtZXMtPmFzeW5jICYmICFt
X3Rva2VuLm1fZGF0YS5lc2NhcGVkKSkgeworICAgICAgICBpZiAoVU5MSUtFTFkoKm1fdG9rZW4u
bV9kYXRhLmlkZW50ID09IG1fdm0ucHJvcGVydHlOYW1lcy0+YXN5bmMgJiYgIW1fdG9rZW4ubV9k
YXRhLmVzY2FwZWQpKSB7CiAgICAgICAgICAgICBKU1RleHRQb3NpdGlvbiBzdGFydCA9IHRva2Vu
U3RhcnRQb3NpdGlvbigpOwogICAgICAgICAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSBt
X3Rva2VuLm1fZGF0YS5pZGVudDsKICAgICAgICAgICAgIEpTVG9rZW5Mb2NhdGlvbiBsb2NhdGlv
bih0b2tlbkxvY2F0aW9uKCkpOwpAQCAtNDU1MSw3ICs0NTUxLDcgQEAgdGVtcGxhdGUgPGNsYXNz
IFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzcwogICAgICAgICBpZiAoVU5MSUtFTFkobWF0Y2goQVJS
T1dGVU5DVElPTikpKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICAgICAgcmV0dXJuIGNy
ZWF0ZVJlc29sdmVBbmRVc2VWYXJpYWJsZShjb250ZXh0LCBpZGVudCwgKmlkZW50ID09IG1fdm0t
PnByb3BlcnR5TmFtZXMtPmV2YWwsIHN0YXJ0LCBsb2NhdGlvbik7CisgICAgICAgIHJldHVybiBj
cmVhdGVSZXNvbHZlQW5kVXNlVmFyaWFibGUoY29udGV4dCwgaWRlbnQsICppZGVudCA9PSBtX3Zt
LnByb3BlcnR5TmFtZXMtPmV2YWwsIHN0YXJ0LCBsb2NhdGlvbik7CiAgICAgfQogICAgIGNhc2Ug
QklHSU5UOiB7CiAgICAgICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gbV90b2tlbi5tX2Rh
dGEuYmlnSW50U3RyaW5nOwpAQCAtNDczNiw3ICs0NzM2LDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRy
ZWVCdWlsZGVyPiBUcmVlRXhwcmVzcwogICAgIGJvb2wgYmFzZUlzTmV3VGFyZ2V0ID0gZmFsc2U7
CiAgICAgaWYgKG5ld0NvdW50ICYmIG1hdGNoKERPVCkpIHsKICAgICAgICAgbmV4dCgpOwotICAg
ICAgICBpZiAobWF0Y2hDb250ZXh0dWFsS2V5d29yZChtX3ZtLT5wcm9wZXJ0eU5hbWVzLT50YXJn
ZXQpKSB7CisgICAgICAgIGlmIChtYXRjaENvbnRleHR1YWxLZXl3b3JkKG1fdm0ucHJvcGVydHlO
YW1lcy0+dGFyZ2V0KSkgewogICAgICAgICAgICAgU2NvcGVSZWYgY2xvc2VzdE9yZGluYXJ5RnVu
Y3Rpb25TY29wZSA9IGNsb3Nlc3RQYXJlbnRPcmRpbmFyeUZ1bmN0aW9uTm9uTGV4aWNhbFNjb3Bl
KCk7CiAgICAgICAgICAgICBzZW1hbnRpY0ZhaWxJZkZhbHNlKGN1cnJlbnRTY29wZSgpLT5pc0Z1
bmN0aW9uKCkgfHwgY2xvc2VzdE9yZGluYXJ5RnVuY3Rpb25TY29wZS0+ZXZhbENvbnRleHRUeXBl
KCkgPT0gRXZhbENvbnRleHRUeXBlOjpGdW5jdGlvbkV2YWxDb250ZXh0LCAibmV3LnRhcmdldCBp
cyBvbmx5IHZhbGlkIGluc2lkZSBmdW5jdGlvbnMiKTsKICAgICAgICAgICAgIGJhc2VJc05ld1Rh
cmdldCA9IHRydWU7CkBAIC00Nzc3LDkgKzQ3NzcsOSBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1
aWxkZXI+IFRyZWVFeHByZXNzCiAgICAgICAgIG5leHQoKTsKICAgICAgICAgSlNUZXh0UG9zaXRp
b24gZXhwcmVzc2lvbkVuZCA9IGxhc3RUb2tlbkVuZFBvc2l0aW9uKCk7CiAgICAgICAgIGlmIChj
b25zdW1lKERPVCkpIHsKLSAgICAgICAgICAgIGlmIChtYXRjaENvbnRleHR1YWxLZXl3b3JkKG1f
dm0tPnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLm1ldGFQdWJsaWNOYW1lKCkpKSB7Cisg
ICAgICAgICAgICBpZiAobWF0Y2hDb250ZXh0dWFsS2V5d29yZChtX3ZtLnByb3BlcnR5TmFtZXMt
PmJ1aWx0aW5OYW1lcygpLm1ldGFQdWJsaWNOYW1lKCkpKSB7CiAgICAgICAgICAgICAgICAgc2Vt
YW50aWNGYWlsSWZGYWxzZShtX3NjcmlwdE1vZGUgPT0gSlNQYXJzZXJTY3JpcHRNb2RlOjpNb2R1
bGUsICJpbXBvcnQubWV0YSBpcyBvbmx5IHZhbGlkIGluc2lkZSBtb2R1bGVzIik7Ci0gICAgICAg
ICAgICAgICAgYmFzZSA9IGNvbnRleHQuY3JlYXRlSW1wb3J0TWV0YUV4cHIobG9jYXRpb24sIGNy
ZWF0ZVJlc29sdmVBbmRVc2VWYXJpYWJsZShjb250ZXh0LCAmbV92bS0+cHJvcGVydHlOYW1lcy0+
bWV0YVByaXZhdGVOYW1lLCBmYWxzZSwgZXhwcmVzc2lvblN0YXJ0LCBsb2NhdGlvbikpOworICAg
ICAgICAgICAgICAgIGJhc2UgPSBjb250ZXh0LmNyZWF0ZUltcG9ydE1ldGFFeHByKGxvY2F0aW9u
LCBjcmVhdGVSZXNvbHZlQW5kVXNlVmFyaWFibGUoY29udGV4dCwgJm1fdm0ucHJvcGVydHlOYW1l
cy0+bWV0YVByaXZhdGVOYW1lLCBmYWxzZSwgZXhwcmVzc2lvblN0YXJ0LCBsb2NhdGlvbikpOwog
ICAgICAgICAgICAgICAgIG5leHQoKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICAgICAgZmFpbElmVHJ1ZShtYXRjaChJREVOVCksICJcImltcG9ydC5cIiBjYW4gb25seSBmb2xs
b3dlZCB3aXRoIG1ldGEiKTsKQEAgLTQ3OTMsNyArNDc5Myw3IEBAIHRlbXBsYXRlIDxjbGFzcyBU
cmVlQnVpbGRlcj4gVHJlZUV4cHJlc3MKICAgICAgICAgICAgIGJhc2UgPSBjb250ZXh0LmNyZWF0
ZUltcG9ydEV4cHIobG9jYXRpb24sIGV4cHIsIGV4cHJlc3Npb25TdGFydCwgZXhwcmVzc2lvbkVu
ZCwgbGFzdFRva2VuRW5kUG9zaXRpb24oKSk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgaWYgKCFi
YXNlSXNOZXdUYXJnZXQpIHsKLSAgICAgICAgY29uc3QgYm9vbCBpc0FzeW5jID0gbWF0Y2hDb250
ZXh0dWFsS2V5d29yZChtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5hc3luYyk7CisgICAgICAgIGNvbnN0
IGJvb2wgaXNBc3luYyA9IG1hdGNoQ29udGV4dHVhbEtleXdvcmQobV92bS5wcm9wZXJ0eU5hbWVz
LT5hc3luYyk7CiAKICAgICAgICAgYmFzZSA9IHBhcnNlUHJpbWFyeUV4cHJlc3Npb24oY29udGV4
dCk7CiAgICAgICAgIGZhaWxJZkZhbHNlKGJhc2UsICJDYW5ub3QgcGFyc2UgYmFzZSBleHByZXNz
aW9uIik7CkBAIC00ODYzLDcgKzQ4NjMsNyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+
IFRyZWVFeHByZXNzCiAgICAgICAgICAgICAgICAgICAgIHNpemVfdCB1c2VkVmFyaWFibGVzU2l6
ZSA9IGN1cnJlbnRTY29wZSgpLT5jdXJyZW50VXNlZFZhcmlhYmxlc1NpemUoKTsKICAgICAgICAg
ICAgICAgICAgICAgSlNUZXh0UG9zaXRpb24gZXhwcmVzc2lvbkVuZCA9IGxhc3RUb2tlbkVuZFBv
c2l0aW9uKCk7CiAgICAgICAgICAgICAgICAgICAgIE9wdGlvbmFsPENhbGxPckFwcGx5RGVwdGhT
Y29wZT4gY2FsbE9yQXBwbHlEZXB0aFNjb3BlOwotICAgICAgICAgICAgICAgICAgICByZWNvcmRD
YWxsT3JBcHBseURlcHRoPFRyZWVCdWlsZGVyPih0aGlzLCAqbV92bSwgY2FsbE9yQXBwbHlEZXB0
aFNjb3BlLCBiYXNlKTsKKyAgICAgICAgICAgICAgICAgICAgcmVjb3JkQ2FsbE9yQXBwbHlEZXB0
aDxUcmVlQnVpbGRlcj4odGhpcywgbV92bSwgY2FsbE9yQXBwbHlEZXB0aFNjb3BlLCBiYXNlKTsK
IAogICAgICAgICAgICAgICAgICAgICBUcmVlQXJndW1lbnRzIGFyZ3VtZW50cyA9IHBhcnNlQXJn
dW1lbnRzKGNvbnRleHQpOwogCkBAIC00OTUyLDcgKzQ5NTIsNyBAQCB0ZW1wbGF0ZSA8Y2xhc3Mg
VHJlZUJ1aWxkZXI+IFRyZWVFeHByZXNzCiAgICAgdW5zaWduZWQgZnVuY3Rpb25LZXl3b3JkU3Rh
cnQgPSB0b2tlblN0YXJ0KCk7CiAgICAgbG9jYXRpb24gPSB0b2tlbkxvY2F0aW9uKCk7CiAgICAg
UGFyc2VyRnVuY3Rpb25JbmZvPFRyZWVCdWlsZGVyPiBpbmZvOwotICAgIGluZm8ubmFtZSA9ICZt
X3ZtLT5wcm9wZXJ0eU5hbWVzLT5udWxsSWRlbnRpZmllcjsKKyAgICBpbmZvLm5hbWUgPSAmbV92
bS5wcm9wZXJ0eU5hbWVzLT5udWxsSWRlbnRpZmllcjsKIAogICAgIFNvdXJjZVBhcnNlTW9kZSBw
YXJzZU1vZGUgPSBpc0FzeW5jID8gU291cmNlUGFyc2VNb2RlOjpBc3luY0Fycm93RnVuY3Rpb25N
b2RlIDogU291cmNlUGFyc2VNb2RlOjpBcnJvd0Z1bmN0aW9uTW9kZTsKICAgICBmYWlsSWZGYWxz
ZSgocGFyc2VGdW5jdGlvbkluZm8oY29udGV4dCwgRnVuY3Rpb25OYW1lUmVxdWlyZW1lbnRzOjpV
bm5hbWVkLCBwYXJzZU1vZGUsIHRydWUsIENvbnN0cnVjdG9yS2luZDo6Tm9uZSwgU3VwZXJCaW5k
aW5nOjpOb3ROZWVkZWQsIGZ1bmN0aW9uS2V5d29yZFN0YXJ0LCBpbmZvLCBGdW5jdGlvbkRlZmlu
aXRpb25UeXBlOjpFeHByZXNzaW9uKSksICJDYW5ub3QgcGFyc2UgYXJyb3cgZnVuY3Rpb24gZXhw
cmVzc2lvbiIpOwpAQCAtNTAzOCw3ICs1MDM4LDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWls
ZGVyPiBUcmVlRXhwcmVzcwogICAgIGJvb2wgaXNFdmFsT3JBcmd1bWVudHMgPSBmYWxzZTsKICAg
ICBpZiAoc3RyaWN0TW9kZSgpKSB7CiAgICAgICAgIGlmIChjb250ZXh0LmlzUmVzb2x2ZShleHBy
KSkKLSAgICAgICAgICAgIGlzRXZhbE9yQXJndW1lbnRzID0gKm1fcGFyc2VyU3RhdGUubGFzdElk
ZW50aWZpZXIgPT0gbV92bS0+cHJvcGVydHlOYW1lcy0+ZXZhbCB8fCAqbV9wYXJzZXJTdGF0ZS5s
YXN0SWRlbnRpZmllciA9PSBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5hcmd1bWVudHM7CisgICAgICAg
ICAgICBpc0V2YWxPckFyZ3VtZW50cyA9ICptX3BhcnNlclN0YXRlLmxhc3RJZGVudGlmaWVyID09
IG1fdm0ucHJvcGVydHlOYW1lcy0+ZXZhbCB8fCAqbV9wYXJzZXJTdGF0ZS5sYXN0SWRlbnRpZmll
ciA9PSBtX3ZtLnByb3BlcnR5TmFtZXMtPmFyZ3VtZW50czsKICAgICB9CiAgICAgZmFpbElmVHJ1
ZUlmU3RyaWN0KGlzRXZhbE9yQXJndW1lbnRzICYmIGhhc1ByZWZpeFVwZGF0ZU9wLCAiQ2Fubm90
IG1vZGlmeSAnIiwgbV9wYXJzZXJTdGF0ZS5sYXN0SWRlbnRpZmllci0+aW1wbCgpLCAiJyBpbiBz
dHJpY3QgbW9kZSIpOwogICAgIHN3aXRjaCAobV90b2tlbi5tX3R5cGUpIHsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuaAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsx
LDcgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEgSGFycmkgUG9ydGVuIChwb3J0
ZW5Aa2RlLm9yZykKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0
LmNvbSkKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIw
MTAsIDIwMTEsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHly
aWdodCAoQykgMjAwMy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCkBAIC0xMTcsMTUgKzExNywxNSBAQCBzdHJ1Y3QgU2NvcGVMYWJlbElu
Zm8gewogICAgIGJvb2wgaXNMb29wOwogfTsKIAotQUxXQVlTX0lOTElORSBzdGF0aWMgYm9vbCBp
c0FyZ3VtZW50cyhjb25zdCBWTSogdm0sIGNvbnN0IElkZW50aWZpZXIqIGlkZW50KQorQUxXQVlT
X0lOTElORSBzdGF0aWMgYm9vbCBpc0FyZ3VtZW50cyhjb25zdCBWTSYgdm0sIGNvbnN0IElkZW50
aWZpZXIqIGlkZW50KQogewotICAgIHJldHVybiB2bS0+cHJvcGVydHlOYW1lcy0+YXJndW1lbnRz
ID09ICppZGVudDsKKyAgICByZXR1cm4gdm0ucHJvcGVydHlOYW1lcy0+YXJndW1lbnRzID09ICpp
ZGVudDsKIH0KLUFMV0FZU19JTkxJTkUgc3RhdGljIGJvb2wgaXNFdmFsKGNvbnN0IFZNKiB2bSwg
Y29uc3QgSWRlbnRpZmllciogaWRlbnQpCitBTFdBWVNfSU5MSU5FIHN0YXRpYyBib29sIGlzRXZh
bChjb25zdCBWTSYgdm0sIGNvbnN0IElkZW50aWZpZXIqIGlkZW50KQogewotICAgIHJldHVybiB2
bS0+cHJvcGVydHlOYW1lcy0+ZXZhbCA9PSAqaWRlbnQ7CisgICAgcmV0dXJuIHZtLnByb3BlcnR5
TmFtZXMtPmV2YWwgPT0gKmlkZW50OwogfQotQUxXQVlTX0lOTElORSBzdGF0aWMgYm9vbCBpc0V2
YWxPckFyZ3VtZW50c0lkZW50aWZpZXIoY29uc3QgVk0qIHZtLCBjb25zdCBJZGVudGlmaWVyKiBp
ZGVudCkKK0FMV0FZU19JTkxJTkUgc3RhdGljIGJvb2wgaXNFdmFsT3JBcmd1bWVudHNJZGVudGlm
aWVyKGNvbnN0IFZNJiB2bSwgY29uc3QgSWRlbnRpZmllciogaWRlbnQpCiB7CiAgICAgcmV0dXJu
IGlzRXZhbCh2bSwgaWRlbnQpIHx8IGlzQXJndW1lbnRzKHZtLCBpZGVudCk7CiB9CkBAIC0xNTYs
NyArMTU2LDcgQEAgc3RydWN0IFNjb3BlIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTY29w
ZSk7CiAKIHB1YmxpYzoKLSAgICBTY29wZShjb25zdCBWTSogdm0sIGJvb2wgaXNGdW5jdGlvbiwg
Ym9vbCBpc0dlbmVyYXRvciwgYm9vbCBzdHJpY3RNb2RlLCBib29sIGlzQXJyb3dGdW5jdGlvbiwg
Ym9vbCBpc0FzeW5jRnVuY3Rpb24pCisgICAgU2NvcGUoY29uc3QgVk0mIHZtLCBib29sIGlzRnVu
Y3Rpb24sIGJvb2wgaXNHZW5lcmF0b3IsIGJvb2wgc3RyaWN0TW9kZSwgYm9vbCBpc0Fycm93RnVu
Y3Rpb24sIGJvb2wgaXNBc3luY0Z1bmN0aW9uKQogICAgICAgICA6IG1fdm0odm0pCiAgICAgICAg
ICwgbV9zaGFkb3dzQXJndW1lbnRzKGZhbHNlKQogICAgICAgICAsIG1fdXNlc0V2YWwoZmFsc2Up
CkBAIC00ODksNyArNDg5LDcgQEAgcHVibGljOgogICAgICAgICBib29sIGlzQXJndW1lbnRzSWRl
bnQgPSBpc0FyZ3VtZW50cyhtX3ZtLCBpZGVudCk7CiAgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0g
bV9kZWNsYXJlZFZhcmlhYmxlcy5hZGQoaWRlbnQtPmltcGwoKSk7CiAgICAgICAgIGJvb2wgaXNW
YWxpZFN0cmljdE1vZGUgPSAoYWRkUmVzdWx0LmlzTmV3RW50cnkgfHwgIWFkZFJlc3VsdC5pdGVy
YXRvci0+dmFsdWUuaXNQYXJhbWV0ZXIoKSkKLSAgICAgICAgICAgICYmIG1fdm0tPnByb3BlcnR5
TmFtZXMtPmV2YWwgIT0gKmlkZW50ICYmICFpc0FyZ3VtZW50c0lkZW50OworICAgICAgICAgICAg
JiYgbV92bS5wcm9wZXJ0eU5hbWVzLT5ldmFsICE9ICppZGVudCAmJiAhaXNBcmd1bWVudHNJZGVu
dDsKICAgICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5jbGVhcklzVmFyKCk7CiAgICAg
ICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUuc2V0SXNQYXJhbWV0ZXIoKTsKICAgICAgICAg
bV9pc1ZhbGlkU3RyaWN0TW9kZSA9IG1faXNWYWxpZFN0cmljdE1vZGUgJiYgaXNWYWxpZFN0cmlj
dE1vZGU7CkBAIC01NzMsNyArNTczLDcgQEAgcHVibGljOgogICAgICAgICBpZiAobV91c2VzRXZh
bCkKICAgICAgICAgICAgIHNldElubmVyQXJyb3dGdW5jdGlvblVzZXNFdmFsKCk7CiAgICAgICAg
IAotICAgICAgICBpZiAodXNlZFZhcmlhYmxlc0NvbnRhaW5zKG1fdm0tPnByb3BlcnR5TmFtZXMt
PmFyZ3VtZW50cy5pbXBsKCkpKQorICAgICAgICBpZiAodXNlZFZhcmlhYmxlc0NvbnRhaW5zKG1f
dm0ucHJvcGVydHlOYW1lcy0+YXJndW1lbnRzLmltcGwoKSkpCiAgICAgICAgICAgICBzZXRJbm5l
ckFycm93RnVuY3Rpb25Vc2VzQXJndW1lbnRzKCk7CiAgICAgfQogCkBAIC01OTUsNyArNTk1LDcg
QEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAg
ICAgICAgICAgICAgLy8gImFyZ3VtZW50cyIgcmVmZXJlbmNlIHNob3VsZCBiZSByZXNvbHZlZCBh
dCBmdW5jdGlvbiBib3VkYXJ5LgotICAgICAgICAgICAgICAgICAgICBpZiAobmVzdGVkU2NvcGUt
PmlzRnVuY3Rpb25Cb3VuZGFyeSgpICYmIG5lc3RlZFNjb3BlLT5oYXNBcmd1bWVudHMoKSAmJiBp
bXBsID09IG1fdm0tPnByb3BlcnR5TmFtZXMtPmFyZ3VtZW50cy5pbXBsKCkgJiYgIW5lc3RlZFNj
b3BlLT5pc0Fycm93RnVuY3Rpb25Cb3VuZGFyeSgpKQorICAgICAgICAgICAgICAgICAgICBpZiAo
bmVzdGVkU2NvcGUtPmlzRnVuY3Rpb25Cb3VuZGFyeSgpICYmIG5lc3RlZFNjb3BlLT5oYXNBcmd1
bWVudHMoKSAmJiBpbXBsID09IG1fdm0ucHJvcGVydHlOYW1lcy0+YXJndW1lbnRzLmltcGwoKSAm
JiAhbmVzdGVkU2NvcGUtPmlzQXJyb3dGdW5jdGlvbkJvdW5kYXJ5KCkpCiAgICAgICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvblNl
dC5hZGQoaW1wbCk7CkBAIC03OTUsNyArNzk1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgbV9pc0Fz
eW5jRnVuY3Rpb25Cb3VuZGFyeSA9IHRydWU7CiAgICAgfQogCi0gICAgY29uc3QgVk0qIG1fdm07
CisgICAgY29uc3QgVk0mIG1fdm07CiAgICAgYm9vbCBtX3NoYWRvd3NBcmd1bWVudHM7CiAgICAg
Ym9vbCBtX3VzZXNFdmFsOwogICAgIGJvb2wgbV9uZWVkc0Z1bGxBY3RpdmF0aW9uOwpAQCAtODg1
LDcgKzg4NSw3IEBAIGNsYXNzIFBhcnNlciB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CiAKIHB1YmxpYzoKLSAgICBQYXJzZXIoVk0qLCBjb25zdCBTb3VyY2VDb2RlJiwgSlNQYXJzZXJC
dWlsdGluTW9kZSwgSlNQYXJzZXJTdHJpY3RNb2RlLCBKU1BhcnNlclNjcmlwdE1vZGUsIFNvdXJj
ZVBhcnNlTW9kZSwgU3VwZXJCaW5kaW5nLCBDb25zdHJ1Y3RvcktpbmQgZGVmYXVsdENvbnN0cnVj
dG9yS2luZCA9IENvbnN0cnVjdG9yS2luZDo6Tm9uZSwgRGVyaXZlZENvbnRleHRUeXBlID0gRGVy
aXZlZENvbnRleHRUeXBlOjpOb25lLCBib29sIGlzRXZhbENvbnRleHQgPSBmYWxzZSwgRXZhbENv
bnRleHRUeXBlID0gRXZhbENvbnRleHRUeXBlOjpOb25lLCBEZWJ1Z2dlclBhcnNlRGF0YSogPSBu
dWxscHRyKTsKKyAgICBQYXJzZXIoVk0mLCBjb25zdCBTb3VyY2VDb2RlJiwgSlNQYXJzZXJCdWls
dGluTW9kZSwgSlNQYXJzZXJTdHJpY3RNb2RlLCBKU1BhcnNlclNjcmlwdE1vZGUsIFNvdXJjZVBh
cnNlTW9kZSwgU3VwZXJCaW5kaW5nLCBDb25zdHJ1Y3RvcktpbmQgZGVmYXVsdENvbnN0cnVjdG9y
S2luZCA9IENvbnN0cnVjdG9yS2luZDo6Tm9uZSwgRGVyaXZlZENvbnRleHRUeXBlID0gRGVyaXZl
ZENvbnRleHRUeXBlOjpOb25lLCBib29sIGlzRXZhbENvbnRleHQgPSBmYWxzZSwgRXZhbENvbnRl
eHRUeXBlID0gRXZhbENvbnRleHRUeXBlOjpOb25lLCBEZWJ1Z2dlclBhcnNlRGF0YSogPSBudWxs
cHRyKTsKICAgICB+UGFyc2VyKCk7CiAKICAgICB0ZW1wbGF0ZSA8Y2xhc3MgUGFyc2VkTm9kZT4K
QEAgLTE2ODMsNyArMTY4Myw3IEBAIHByaXZhdGU6CiAgICAgCiAgICAgYm9vbCBjYW5SZWN1cnNl
KCkKICAgICB7Ci0gICAgICAgIHJldHVybiBtX3ZtLT5pc1NhZmVUb1JlY3Vyc2UoKTsKKyAgICAg
ICAgcmV0dXJuIG1fdm0uaXNTYWZlVG9SZWN1cnNlKCk7CiAgICAgfQogICAgIAogICAgIGNvbnN0
IEpTVGV4dFBvc2l0aW9uJiBsYXN0VG9rZW5FbmRQb3NpdGlvbigpIGNvbnN0CkBAIC0xODY2LDcg
KzE4NjYsNyBAQCBwcml2YXRlOgogICAgICAgICBtX2Vycm9yTWVzc2FnZSA9IFN0cmluZygpOwog
ICAgIH0KIAotICAgIFZNKiBtX3ZtOworICAgIFZNJiBtX3ZtOwogICAgIGNvbnN0IFNvdXJjZUNv
ZGUqIG1fc291cmNlOwogICAgIFBhcnNlckFyZW5hIG1fcGFyc2VyQXJlbmE7CiAgICAgc3RkOjp1
bmlxdWVfcHRyPExleGVyVHlwZT4gbV9sZXhlcjsKQEAgLTE5OTcsNyArMTk5Nyw3IEBAIHN0ZDo6
dW5pcXVlX3B0cjxQYXJzZWROb2RlPiBQYXJzZXI8TGV4ZXIKIAogdGVtcGxhdGUgPGNsYXNzIFBh
cnNlZE5vZGU+CiBzdGQ6OnVuaXF1ZV9wdHI8UGFyc2VkTm9kZT4gcGFyc2UoCi0gICAgVk0qIHZt
LCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsCisgICAgVk0mIHZtLCBjb25zdCBTb3VyY2VDb2Rl
JiBzb3VyY2UsCiAgICAgY29uc3QgSWRlbnRpZmllciYgbmFtZSwgSlNQYXJzZXJCdWlsdGluTW9k
ZSBidWlsdGluTW9kZSwKICAgICBKU1BhcnNlclN0cmljdE1vZGUgc3RyaWN0TW9kZSwgSlNQYXJz
ZXJTY3JpcHRNb2RlIHNjcmlwdE1vZGUsIFNvdXJjZVBhcnNlTW9kZSBwYXJzZU1vZGUsIFN1cGVy
QmluZGluZyBzdXBlckJpbmRpbmcsCiAgICAgUGFyc2VyRXJyb3ImIGVycm9yLCBKU1RleHRQb3Np
dGlvbiogcG9zaXRpb25CZWZvcmVMYXN0TmV3bGluZSA9IG51bGxwdHIsCkBAIC0yMDU3LDEyICsy
MDU3LDEyIEBAIGlubGluZSBzdGQ6OnVuaXF1ZV9wdHI8UHJvZ3JhbU5vZGU+IHBhcnMKICAgICBi
b29sIGlzRXZhbE5vZGUgPSBmYWxzZTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UHJvZ3JhbU5vZGU+
IHJlc3VsdDsKICAgICBpZiAoc291cmNlLnByb3ZpZGVyKCktPnNvdXJjZSgpLmlzOEJpdCgpKSB7
Ci0gICAgICAgIFBhcnNlcjxMZXhlcjxMQ2hhcj4+IHBhcnNlcigmdm0sIHNvdXJjZSwgSlNQYXJz
ZXJCdWlsdGluTW9kZTo6Tm90QnVpbHRpbiwgSlNQYXJzZXJTdHJpY3RNb2RlOjpOb3RTdHJpY3Qs
IEpTUGFyc2VyU2NyaXB0TW9kZTo6Q2xhc3NpYywgU291cmNlUGFyc2VNb2RlOjpQcm9ncmFtTW9k
ZSwgU3VwZXJCaW5kaW5nOjpOb3ROZWVkZWQsIENvbnN0cnVjdG9yS2luZDo6Tm9uZSwgRGVyaXZl
ZENvbnRleHRUeXBlOjpOb25lLCBpc0V2YWxOb2RlLCBFdmFsQ29udGV4dFR5cGU6Ok5vbmUsIG51
bGxwdHIpOworICAgICAgICBQYXJzZXI8TGV4ZXI8TENoYXI+PiBwYXJzZXIodm0sIHNvdXJjZSwg
SlNQYXJzZXJCdWlsdGluTW9kZTo6Tm90QnVpbHRpbiwgSlNQYXJzZXJTdHJpY3RNb2RlOjpOb3RT
dHJpY3QsIEpTUGFyc2VyU2NyaXB0TW9kZTo6Q2xhc3NpYywgU291cmNlUGFyc2VNb2RlOjpQcm9n
cmFtTW9kZSwgU3VwZXJCaW5kaW5nOjpOb3ROZWVkZWQsIENvbnN0cnVjdG9yS2luZDo6Tm9uZSwg
RGVyaXZlZENvbnRleHRUeXBlOjpOb25lLCBpc0V2YWxOb2RlLCBFdmFsQ29udGV4dFR5cGU6Ok5v
bmUsIG51bGxwdHIpOwogICAgICAgICByZXN1bHQgPSBwYXJzZXIucGFyc2U8UHJvZ3JhbU5vZGU+
KGVycm9yLCBuYW1lLCBTb3VyY2VQYXJzZU1vZGU6OlByb2dyYW1Nb2RlLCBQYXJzaW5nQ29udGV4
dDo6RnVuY3Rpb25Db25zdHJ1Y3RvciwgZnVuY3Rpb25Db25zdHJ1Y3RvclBhcmFtZXRlcnNFbmRQ
b3NpdGlvbik7CiAgICAgICAgIGlmIChwb3NpdGlvbkJlZm9yZUxhc3ROZXdsaW5lKQogICAgICAg
ICAgICAgKnBvc2l0aW9uQmVmb3JlTGFzdE5ld2xpbmUgPSBwYXJzZXIucG9zaXRpb25CZWZvcmVM
YXN0TmV3bGluZSgpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIFBhcnNlcjxMZXhlcjxVQ2hhcj4+
IHBhcnNlcigmdm0sIHNvdXJjZSwgSlNQYXJzZXJCdWlsdGluTW9kZTo6Tm90QnVpbHRpbiwgSlNQ
YXJzZXJTdHJpY3RNb2RlOjpOb3RTdHJpY3QsIEpTUGFyc2VyU2NyaXB0TW9kZTo6Q2xhc3NpYywg
U291cmNlUGFyc2VNb2RlOjpQcm9ncmFtTW9kZSwgU3VwZXJCaW5kaW5nOjpOb3ROZWVkZWQsIENv
bnN0cnVjdG9yS2luZDo6Tm9uZSwgRGVyaXZlZENvbnRleHRUeXBlOjpOb25lLCBpc0V2YWxOb2Rl
LCBFdmFsQ29udGV4dFR5cGU6Ok5vbmUsIG51bGxwdHIpOworICAgICAgICBQYXJzZXI8TGV4ZXI8
VUNoYXI+PiBwYXJzZXIodm0sIHNvdXJjZSwgSlNQYXJzZXJCdWlsdGluTW9kZTo6Tm90QnVpbHRp
biwgSlNQYXJzZXJTdHJpY3RNb2RlOjpOb3RTdHJpY3QsIEpTUGFyc2VyU2NyaXB0TW9kZTo6Q2xh
c3NpYywgU291cmNlUGFyc2VNb2RlOjpQcm9ncmFtTW9kZSwgU3VwZXJCaW5kaW5nOjpOb3ROZWVk
ZWQsIENvbnN0cnVjdG9yS2luZDo6Tm9uZSwgRGVyaXZlZENvbnRleHRUeXBlOjpOb25lLCBpc0V2
YWxOb2RlLCBFdmFsQ29udGV4dFR5cGU6Ok5vbmUsIG51bGxwdHIpOwogICAgICAgICByZXN1bHQg
PSBwYXJzZXIucGFyc2U8UHJvZ3JhbU5vZGU+KGVycm9yLCBuYW1lLCBTb3VyY2VQYXJzZU1vZGU6
OlByb2dyYW1Nb2RlLCBQYXJzaW5nQ29udGV4dDo6RnVuY3Rpb25Db25zdHJ1Y3RvciwgZnVuY3Rp
b25Db25zdHJ1Y3RvclBhcmFtZXRlcnNFbmRQb3NpdGlvbik7CiAgICAgICAgIGlmIChwb3NpdGlv
bkJlZm9yZUxhc3ROZXdsaW5lKQogICAgICAgICAgICAgKnBvc2l0aW9uQmVmb3JlTGFzdE5ld2xp
bmUgPSBwYXJzZXIucG9zaXRpb25CZWZvcmVMYXN0TmV3bGluZSgpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXJBcmVuYS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyQXJlbmEuaAkocmV2aXNpb24gMjQ5MTI4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXJBcmVuYS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOS0yMDE4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDE5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtNDQsMTIgKzQ0LDEyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAKICAgICAg
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0gICAgICAgIEFMV0FZU19JTkxJTkUgY29uc3QgSWRl
bnRpZmllciYgbWFrZUlkZW50aWZpZXIoVk0qLCBjb25zdCBUKiBjaGFyYWN0ZXJzLCBzaXplX3Qg
bGVuZ3RoKTsKLSAgICAgICAgQUxXQVlTX0lOTElORSBjb25zdCBJZGVudGlmaWVyJiBtYWtlRW1w
dHlJZGVudGlmaWVyKFZNKik7Ci0gICAgICAgIEFMV0FZU19JTkxJTkUgY29uc3QgSWRlbnRpZmll
ciYgbWFrZUlkZW50aWZpZXJMQ2hhckZyb21VQ2hhcihWTSosIGNvbnN0IFVDaGFyKiBjaGFyYWN0
ZXJzLCBzaXplX3QgbGVuZ3RoKTsKLSAgICAgICAgQUxXQVlTX0lOTElORSBjb25zdCBJZGVudGlm
aWVyJiBtYWtlSWRlbnRpZmllcihWTSosIFN5bWJvbEltcGwqKTsKKyAgICAgICAgQUxXQVlTX0lO
TElORSBjb25zdCBJZGVudGlmaWVyJiBtYWtlSWRlbnRpZmllcihWTSYsIGNvbnN0IFQqIGNoYXJh
Y3RlcnMsIHNpemVfdCBsZW5ndGgpOworICAgICAgICBBTFdBWVNfSU5MSU5FIGNvbnN0IElkZW50
aWZpZXImIG1ha2VFbXB0eUlkZW50aWZpZXIoVk0mKTsKKyAgICAgICAgQUxXQVlTX0lOTElORSBj
b25zdCBJZGVudGlmaWVyJiBtYWtlSWRlbnRpZmllckxDaGFyRnJvbVVDaGFyKFZNJiwgY29uc3Qg
VUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgpOworICAgICAgICBBTFdBWVNfSU5MSU5F
IGNvbnN0IElkZW50aWZpZXImIG1ha2VJZGVudGlmaWVyKFZNJiwgU3ltYm9sSW1wbCopOwogCi0g
ICAgICAgIGNvbnN0IElkZW50aWZpZXImIG1ha2VOdW1lcmljSWRlbnRpZmllcihWTSosIGRvdWJs
ZSBudW1iZXIpOworICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBtYWtlTnVtZXJpY0lkZW50aWZp
ZXIoVk0mLCBkb3VibGUgbnVtYmVyKTsKIAogICAgIHB1YmxpYzoKICAgICAgICAgc3RhdGljIGNv
bnN0IGludCBNYXhpbXVtQ2FjaGFibGVDaGFyYWN0ZXIgPSAxMjg7CkBAIC03MCwxMCArNzAsMTAg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgfTsKIAogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgot
ICAgIEFMV0FZU19JTkxJTkUgY29uc3QgSWRlbnRpZmllciYgSWRlbnRpZmllckFyZW5hOjptYWtl
SWRlbnRpZmllcihWTSogdm0sIGNvbnN0IFQqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgpCisg
ICAgQUxXQVlTX0lOTElORSBjb25zdCBJZGVudGlmaWVyJiBJZGVudGlmaWVyQXJlbmE6Om1ha2VJ
ZGVudGlmaWVyKFZNJiB2bSwgY29uc3QgVCogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCkKICAg
ICB7CiAgICAgICAgIGlmICghbGVuZ3RoKQotICAgICAgICAgICAgcmV0dXJuIHZtLT5wcm9wZXJ0
eU5hbWVzLT5lbXB0eUlkZW50aWZpZXI7CisgICAgICAgICAgICByZXR1cm4gdm0ucHJvcGVydHlO
YW1lcy0+ZW1wdHlJZGVudGlmaWVyOwogICAgICAgICBpZiAoY2hhcmFjdGVyc1swXSA+PSBNYXhp
bXVtQ2FjaGFibGVDaGFyYWN0ZXIpIHsKICAgICAgICAgICAgIG1faWRlbnRpZmllcnMuYXBwZW5k
KElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIGNoYXJhY3RlcnMsIGxlbmd0aCkpOwogICAgICAg
ICAgICAgcmV0dXJuIG1faWRlbnRpZmllcnMubGFzdCgpOwpAQCAtOTMsMjIgKzkzLDIyIEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICByZXR1cm4gbV9pZGVudGlmaWVycy5sYXN0KCk7CiAgICAg
fQogCi0gICAgQUxXQVlTX0lOTElORSBjb25zdCBJZGVudGlmaWVyJiBJZGVudGlmaWVyQXJlbmE6
Om1ha2VJZGVudGlmaWVyKFZNKiwgU3ltYm9sSW1wbCogc3ltYm9sKQorICAgIEFMV0FZU19JTkxJ
TkUgY29uc3QgSWRlbnRpZmllciYgSWRlbnRpZmllckFyZW5hOjptYWtlSWRlbnRpZmllcihWTSYs
IFN5bWJvbEltcGwqIHN5bWJvbCkKICAgICB7CiAgICAgICAgIEFTU0VSVChzeW1ib2wpOwogICAg
ICAgICBtX2lkZW50aWZpZXJzLmFwcGVuZChJZGVudGlmaWVyOjpmcm9tVWlkKCpzeW1ib2wpKTsK
ICAgICAgICAgcmV0dXJuIG1faWRlbnRpZmllcnMubGFzdCgpOwogICAgIH0KIAotICAgIEFMV0FZ
U19JTkxJTkUgY29uc3QgSWRlbnRpZmllciYgSWRlbnRpZmllckFyZW5hOjptYWtlRW1wdHlJZGVu
dGlmaWVyKFZNKiB2bSkKKyAgICBBTFdBWVNfSU5MSU5FIGNvbnN0IElkZW50aWZpZXImIElkZW50
aWZpZXJBcmVuYTo6bWFrZUVtcHR5SWRlbnRpZmllcihWTSYgdm0pCiAgICAgewotICAgICAgICBy
ZXR1cm4gdm0tPnByb3BlcnR5TmFtZXMtPmVtcHR5SWRlbnRpZmllcjsKKyAgICAgICAgcmV0dXJu
IHZtLnByb3BlcnR5TmFtZXMtPmVtcHR5SWRlbnRpZmllcjsKICAgICB9CiAKLSAgICBBTFdBWVNf
SU5MSU5FIGNvbnN0IElkZW50aWZpZXImIElkZW50aWZpZXJBcmVuYTo6bWFrZUlkZW50aWZpZXJM
Q2hhckZyb21VQ2hhcihWTSogdm0sIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVu
Z3RoKQorICAgIEFMV0FZU19JTkxJTkUgY29uc3QgSWRlbnRpZmllciYgSWRlbnRpZmllckFyZW5h
OjptYWtlSWRlbnRpZmllckxDaGFyRnJvbVVDaGFyKFZNJiB2bSwgY29uc3QgVUNoYXIqIGNoYXJh
Y3RlcnMsIHNpemVfdCBsZW5ndGgpCiAgICAgewogICAgICAgICBpZiAoIWxlbmd0aCkKLSAgICAg
ICAgICAgIHJldHVybiB2bS0+cHJvcGVydHlOYW1lcy0+ZW1wdHlJZGVudGlmaWVyOworICAgICAg
ICAgICAgcmV0dXJuIHZtLnByb3BlcnR5TmFtZXMtPmVtcHR5SWRlbnRpZmllcjsKICAgICAgICAg
aWYgKGNoYXJhY3RlcnNbMF0gPj0gTWF4aW11bUNhY2hhYmxlQ2hhcmFjdGVyKSB7CiAgICAgICAg
ICAgICBtX2lkZW50aWZpZXJzLmFwcGVuZChJZGVudGlmaWVyOjpjcmVhdGVMQ2hhckZyb21VQ2hh
cih2bSwgY2hhcmFjdGVycywgbGVuZ3RoKSk7CiAgICAgICAgICAgICByZXR1cm4gbV9pZGVudGlm
aWVycy5sYXN0KCk7CkBAIC0xMjgsNyArMTI4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IHJldHVybiBtX2lkZW50aWZpZXJzLmxhc3QoKTsKICAgICB9CiAgICAgCi0gICAgaW5saW5lIGNv
bnN0IElkZW50aWZpZXImIElkZW50aWZpZXJBcmVuYTo6bWFrZU51bWVyaWNJZGVudGlmaWVyKFZN
KiB2bSwgZG91YmxlIG51bWJlcikKKyAgICBpbmxpbmUgY29uc3QgSWRlbnRpZmllciYgSWRlbnRp
ZmllckFyZW5hOjptYWtlTnVtZXJpY0lkZW50aWZpZXIoVk0mIHZtLCBkb3VibGUgbnVtYmVyKQog
ICAgIHsKICAgICAgICAgLy8gRklYTUU6IFdoeSBkb2Vzbid0IHRoaXMgdXNlIHRoZSBJZGVudGlm
aWVyOjpmcm9tIG92ZXJsb2FkIHRoYXQgdGFrZXMgYSBkb3VibGU/CiAgICAgICAgIC8vIFNlZW1z
IHdlIGFyZSBtaXNzaW5nIG91dCBvbiBtdWx0aXBsZSBvcHRpbWl6YXRpb25zIGJ5IG5vdCB1c2lu
ZyBpdC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU3ludGF4Q2hlY2tlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU3ludGF4Q2hlY2tl
ci5oCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1N5
bnRheENoZWNrZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTAsIDIwMTMsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02NCw3ICs2NCw3IEBAIHB1
YmxpYzoKICAgICAgICAgU3ludGF4Q2hlY2tlciogbV9jb250ZXh0OwogICAgIH07CiAgICAgCi0g
ICAgU3ludGF4Q2hlY2tlcihWTSogLCB2b2lkKikKKyAgICBTeW50YXhDaGVja2VyKFZNJiAsIHZv
aWQqKQogICAgIHsKICAgICB9CiAKQEAgLTIyNiw3ICsyMjYsNyBAQCBwdWJsaWM6CiAgICAgewog
ICAgICAgICByZXR1cm4gUHJvcGVydHkodHlwZSk7CiAgICAgfQotICAgIFByb3BlcnR5IGNyZWF0
ZVByb3BlcnR5KFZNKiB2bSwgUGFyc2VyQXJlbmEmIHBhcnNlckFyZW5hLCBkb3VibGUgbmFtZSwg
aW50LCBQcm9wZXJ0eU5vZGU6OlR5cGUgdHlwZSwgUHJvcGVydHlOb2RlOjpQdXRUeXBlLCBib29s
IGNvbXBsZXRlLCBTdXBlckJpbmRpbmcsIENsYXNzRWxlbWVudFRhZykKKyAgICBQcm9wZXJ0eSBj
cmVhdGVQcm9wZXJ0eShWTSYgdm0sIFBhcnNlckFyZW5hJiBwYXJzZXJBcmVuYSwgZG91YmxlIG5h
bWUsIGludCwgUHJvcGVydHlOb2RlOjpUeXBlIHR5cGUsIFByb3BlcnR5Tm9kZTo6UHV0VHlwZSwg
Ym9vbCBjb21wbGV0ZSwgU3VwZXJCaW5kaW5nLCBDbGFzc0VsZW1lbnRUYWcpCiAgICAgewogICAg
ICAgICBpZiAoIWNvbXBsZXRlKQogICAgICAgICAgICAgcmV0dXJuIFByb3BlcnR5KHR5cGUpOwpA
QCAtMjk3LDcgKzI5Nyw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiBQcm9wZXJ0
eSh0eXBlKTsKICAgICB9Ci0gICAgUHJvcGVydHkgY3JlYXRlR2V0dGVyT3JTZXR0ZXJQcm9wZXJ0
eShWTSogdm0sIFBhcnNlckFyZW5hJiBwYXJzZXJBcmVuYSwgY29uc3QgSlNUb2tlbkxvY2F0aW9u
JiwgUHJvcGVydHlOb2RlOjpUeXBlIHR5cGUsIGJvb2wgc3RyaWN0LCBkb3VibGUgbmFtZSwgY29u
c3QgUGFyc2VyRnVuY3Rpb25JbmZvPFN5bnRheENoZWNrZXI+JiwgQ2xhc3NFbGVtZW50VGFnKQor
ICAgIFByb3BlcnR5IGNyZWF0ZUdldHRlck9yU2V0dGVyUHJvcGVydHkoVk0mIHZtLCBQYXJzZXJB
cmVuYSYgcGFyc2VyQXJlbmEsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIFByb3BlcnR5Tm9kZTo6
VHlwZSB0eXBlLCBib29sIHN0cmljdCwgZG91YmxlIG5hbWUsIGNvbnN0IFBhcnNlckZ1bmN0aW9u
SW5mbzxTeW50YXhDaGVja2VyPiYsIENsYXNzRWxlbWVudFRhZykKICAgICB7CiAgICAgICAgIGlm
ICghc3RyaWN0KQogICAgICAgICAgICAgcmV0dXJuIFByb3BlcnR5KHR5cGUpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyQnl0ZWNvZGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlckJ5dGVjb2RlLmNw
cAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1By
b2ZpbGVyQnl0ZWNvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTItMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM4LDggKzM4LDggQEAgSlNWYWx1ZSBC
eXRlY29kZTo6dG9KUyhFeGVjU3RhdGUqIGV4ZWMpIAogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CiAgICAgSlNPYmplY3QqIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMpOwogICAg
IHJlc3VsdC0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5ieXRlY29kZUluZGV4LCBq
c051bWJlcihtX2J5dGVjb2RlSW5kZXgpKTsKLSAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgdm0u
cHJvcGVydHlOYW1lcy0+b3Bjb2RlLCBqc1N0cmluZyhleGVjLCBTdHJpbmc6OmZyb21VVEY4KG9w
Y29kZU5hbWVzW21fb3Bjb2RlSURdKSkpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCB2bS5w
cm9wZXJ0eU5hbWVzLT5kZXNjcmlwdGlvbiwganNTdHJpbmcoZXhlYywgU3RyaW5nOjpmcm9tVVRG
OChtX2Rlc2NyaXB0aW9uKSkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0
eU5hbWVzLT5vcGNvZGUsIGpzU3RyaW5nKHZtLCBTdHJpbmc6OmZyb21VVEY4KG9wY29kZU5hbWVz
W21fb3Bjb2RlSURdKSkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5h
bWVzLT5kZXNjcmlwdGlvbiwganNTdHJpbmcodm0sIFN0cmluZzo6ZnJvbVVURjgobV9kZXNjcmlw
dGlvbikpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcHJvZmlsZXIvUHJvZmlsZXJCeXRlY29kZVNlcXVlbmNlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJCeXRlY29kZVNlcXVlbmNl
LmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVy
L1Byb2ZpbGVyQnl0ZWNvZGVTZXF1ZW5jZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04Myw3ICs4
Myw3IEBAIHZvaWQgQnl0ZWNvZGVTZXF1ZW5jZTo6YWRkU2VxdWVuY2VQcm9wZXIKICAgICBKU0Fy
cmF5KiBoZWFkZXIgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIDApOwogICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG1faGVhZGVyLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGhlYWRlci0+cHV0RGlyZWN0SW5kZXgo
ZXhlYywgaSwganNTdHJpbmcoZXhlYywgU3RyaW5nOjpmcm9tVVRGOChtX2hlYWRlcltpXSkpKTsK
KyAgICAgICAgaGVhZGVyLT5wdXREaXJlY3RJbmRleChleGVjLCBpLCBqc1N0cmluZyh2bSwgU3Ry
aW5nOjpmcm9tVVRGOChtX2hlYWRlcltpXSkpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgdm9pZCgpKTsKICAgICB9CiAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIHZtLnBy
b3BlcnR5TmFtZXMtPmhlYWRlciwgaGVhZGVyKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9wcm9maWxlci9Qcm9maWxlckJ5dGVjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyQnl0ZWNvZGVzLmNwcAkocmV2aXNpb24gMjQ5
MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyQnl0ZWNvZGVz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEyLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC01Nyw5ICs1Nyw5IEBAIEpTVmFsdWUgQnl0ZWNvZGVzOjp0b0pT
KEV4ZWNTdGF0ZSogZXhlYykKICAgICBKU09iamVjdCogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlP
YmplY3QoZXhlYyk7CiAgICAgCiAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5
TmFtZXMtPmJ5dGVjb2Rlc0lELCBqc051bWJlcihtX2lkKSk7Ci0gICAgcmVzdWx0LT5wdXREaXJl
Y3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmluZmVycmVkTmFtZSwganNTdHJpbmcoZXhlYywgU3Ry
aW5nOjpmcm9tVVRGOChtX2luZmVycmVkTmFtZSkpKTsKLSAgICByZXN1bHQtPnB1dERpcmVjdCh2
bSwgdm0ucHJvcGVydHlOYW1lcy0+c291cmNlQ29kZSwganNTdHJpbmcoZXhlYywgU3RyaW5nOjpm
cm9tVVRGOChtX3NvdXJjZUNvZGUpKSk7Ci0gICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIHZtLnBy
b3BlcnR5TmFtZXMtPmhhc2gsIGpzU3RyaW5nKGV4ZWMsIFN0cmluZzo6ZnJvbVVURjgodG9DU3Ry
aW5nKG1faGFzaCkpKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFt
ZXMtPmluZmVycmVkTmFtZSwganNTdHJpbmcodm0sIFN0cmluZzo6ZnJvbVVURjgobV9pbmZlcnJl
ZE5hbWUpKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnNv
dXJjZUNvZGUsIGpzU3RyaW5nKHZtLCBTdHJpbmc6OmZyb21VVEY4KG1fc291cmNlQ29kZSkpKTsK
KyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+aGFzaCwganNTdHJp
bmcodm0sIFN0cmluZzo6ZnJvbVVURjgodG9DU3RyaW5nKG1faGFzaCkpKSk7CiAgICAgcmVzdWx0
LT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmluc3RydWN0aW9uQ291bnQsIGpzTnVt
YmVyKG1faW5zdHJ1Y3Rpb25Db3VudCkpOwogICAgIGFkZFNlcXVlbmNlUHJvcGVydGllcyhleGVj
LCByZXN1bHQpOwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1By
b2ZpbGVyQ29tcGlsYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9wcm9maWxlci9Qcm9maWxlckNvbXBpbGF0aW9uLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyQ29tcGlsYXRpb24uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0y
MDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
Mi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMTE5LDcgKzExOSw3IEBAIEpTVmFsdWUgQ29tcGlsYXRpb246OnRv
SlMoRXhlY1N0YXRlKiBleGUKICAgICBKU09iamVjdCogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlP
YmplY3QoZXhlYyk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICBy
ZXN1bHQtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+Ynl0ZWNvZGVzSUQsIGpzTnVt
YmVyKG1fYnl0ZWNvZGVzLT5pZCgpKSk7Ci0gICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIHZtLnBy
b3BlcnR5TmFtZXMtPmNvbXBpbGF0aW9uS2luZCwganNTdHJpbmcoZXhlYywgU3RyaW5nOjpmcm9t
VVRGOCh0b0NTdHJpbmcobV9raW5kKSkpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgdm0u
cHJvcGVydHlOYW1lcy0+Y29tcGlsYXRpb25LaW5kLCBqc1N0cmluZyh2bSwgU3RyaW5nOjpmcm9t
VVRGOCh0b0NTdHJpbmcobV9raW5kKSkpKTsKICAgICAKICAgICBKU0FycmF5KiBwcm9maWxlZEJ5
dGVjb2RlcyA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgMCk7CiAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgeyB9KTsKQEAgLTE3Niw5ICsxNzYsOSBAQCBKU1ZhbHVlIENvbXBpbGF0
aW9uOjp0b0pTKEV4ZWNTdGF0ZSogZXhlCiAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIHZtLnBy
b3BlcnR5TmFtZXMtPm51bUlubGluZWRHZXRCeUlkcywganNOdW1iZXIobV9udW1JbmxpbmVkR2V0
QnlJZHMpKTsKICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bnVt
SW5saW5lZFB1dEJ5SWRzLCBqc051bWJlcihtX251bUlubGluZWRQdXRCeUlkcykpOwogICAgIHJl
c3VsdC0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5udW1JbmxpbmVkQ2FsbHMsIGpz
TnVtYmVyKG1fbnVtSW5saW5lZENhbGxzKSk7Ci0gICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIHZt
LnByb3BlcnR5TmFtZXMtPmpldHRpc29uUmVhc29uLCBqc1N0cmluZyhleGVjLCBTdHJpbmc6OmZy
b21VVEY4KHRvQ1N0cmluZyhtX2pldHRpc29uUmVhc29uKSkpKTsKKyAgICByZXN1bHQtPnB1dERp
cmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+amV0dGlzb25SZWFzb24sIGpzU3RyaW5nKHZtLCBT
dHJpbmc6OmZyb21VVEY4KHRvQ1N0cmluZyhtX2pldHRpc29uUmVhc29uKSkpKTsKICAgICBpZiAo
IW1fYWRkaXRpb25hbEpldHRpc29uUmVhc29uLmlzTnVsbCgpKQotICAgICAgICByZXN1bHQtPnB1
dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+YWRkaXRpb25hbEpldHRpc29uUmVhc29uLCBq
c1N0cmluZyhleGVjLCBTdHJpbmc6OmZyb21VVEY4KG1fYWRkaXRpb25hbEpldHRpc29uUmVhc29u
KSkpOworICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+YWRk
aXRpb25hbEpldHRpc29uUmVhc29uLCBqc1N0cmluZyh2bSwgU3RyaW5nOjpmcm9tVVRGOChtX2Fk
ZGl0aW9uYWxKZXR0aXNvblJlYXNvbikpKTsKICAgICAKICAgICByZXN1bHQtPnB1dERpcmVjdCh2
bSwgdm0ucHJvcGVydHlOYW1lcy0+dWlkLCBtX3VpZC50b0pTKGV4ZWMpKTsKICAgICAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlckNvbXBpbGVkQnl0ZWNvZGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxl
ckNvbXBpbGVkQnl0ZWNvZGUuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJDb21waWxlZEJ5dGVjb2RlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC00OCw3ICs0OCw3IEBAIEpTVmFsdWUgQ29tcGlsZWRCeXRlY29kZTo6dG9KUyhFeGVjU3Rh
dGUKICAgICBKU09iamVjdCogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYyk7CiAg
ICAgCiAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm9yaWdpbiwg
bV9vcmlnaW4udG9KUyhleGVjKSk7Ci0gICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIHZtLnByb3Bl
cnR5TmFtZXMtPmRlc2NyaXB0aW9uLCBqc1N0cmluZyhleGVjLCBTdHJpbmc6OmZyb21VVEY4KG1f
ZGVzY3JpcHRpb24pKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFt
ZXMtPmRlc2NyaXB0aW9uLCBqc1N0cmluZyh2bSwgU3RyaW5nOjpmcm9tVVRGOChtX2Rlc2NyaXB0
aW9uKSkpOwogICAgIAogICAgIHJldHVybiByZXN1bHQ7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJFdmVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyRXZlbnQuY3BwCShyZXZpc2lvbiAyNDkx
MjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJFdmVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0y
MDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtNTMsOSArNTMsOSBAQCBKU1ZhbHVlIEV2ZW50Ojp0b0pTKEV4ZWNTdGF0
ZSogZXhlYykgY29uCiAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMt
PmJ5dGVjb2Rlc0lELCBqc051bWJlcihtX2J5dGVjb2Rlcy0+aWQoKSkpOwogICAgIGlmIChtX2Nv
bXBpbGF0aW9uKQogICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1l
cy0+Y29tcGlsYXRpb25VSUQsIG1fY29tcGlsYXRpb24tPnVpZCgpLnRvSlMoZXhlYykpOwotICAg
IHJlc3VsdC0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5zdW1tYXJ5LCBqc1N0cmlu
ZyhleGVjLCBTdHJpbmc6OmZyb21VVEY4KG1fc3VtbWFyeSkpKTsKKyAgICByZXN1bHQtPnB1dERp
cmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+c3VtbWFyeSwganNTdHJpbmcodm0sIFN0cmluZzo6
ZnJvbVVURjgobV9zdW1tYXJ5KSkpOwogICAgIGlmIChtX2RldGFpbC5sZW5ndGgoKSkKLSAgICAg
ICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmRldGFpbCwganNTdHJp
bmcoZXhlYywgU3RyaW5nOjpmcm9tVVRGOChtX2RldGFpbCkpKTsKKyAgICAgICAgcmVzdWx0LT5w
dXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmRldGFpbCwganNTdHJpbmcodm0sIFN0cmlu
Zzo6ZnJvbVVURjgobV9kZXRhaWwpKSk7CiAgICAgCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlck9TUkV4aXQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlck9TUkV4
aXQuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmls
ZXIvUHJvZmlsZXJPU1JFeGl0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01MSw3ICs1MSw3IEBAIEpTVmFs
dWUgT1NSRXhpdDo6dG9KUyhFeGVjU3RhdGUqIGV4ZWMpIGMKICAgICBKU09iamVjdCogcmVzdWx0
ID0gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYyk7CiAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0s
IHZtLnByb3BlcnR5TmFtZXMtPmlkLCBqc051bWJlcihtX2lkKSk7CiAgICAgcmVzdWx0LT5wdXRE
aXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm9yaWdpbiwgbV9vcmlnaW4udG9KUyhleGVjKSk7
Ci0gICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmV4aXRLaW5kLCBq
c1N0cmluZyhleGVjLCBleGl0S2luZFRvU3RyaW5nKG1fZXhpdEtpbmQpKSk7CisgICAgcmVzdWx0
LT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmV4aXRLaW5kLCBqc1N0cmluZyh2bSwg
ZXhpdEtpbmRUb1N0cmluZyhtX2V4aXRLaW5kKSkpOwogICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZt
LCB2bS5wcm9wZXJ0eU5hbWVzLT5pc1dhdGNocG9pbnQsIGpzQm9vbGVhbihtX2lzV2F0Y2hwb2lu
dCkpOwogICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5jb3VudCwg
anNOdW1iZXIobV9jb3VudGVyKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlck9TUkV4aXRTaXRlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJPU1JFeGl0U2l0ZS5j
cHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Q
cm9maWxlck9TUkV4aXRTaXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQxLDcgKzQxLDcgQEAg
SlNWYWx1ZSBPU1JFeGl0U2l0ZTo6dG9KUyhFeGVjU3RhdGUqIGV4ZQogICAgIEpTQXJyYXkqIHJl
c3VsdCA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgMCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgeyB9KTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jb2RlQWRk
cmVzc2VzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0SW5kZXgoZXhl
YywgaSwganNTdHJpbmcoZXhlYywgdG9TdHJpbmcoUmF3UG9pbnRlcihtX2NvZGVBZGRyZXNzZXNb
aV0uZGF0YUxvY2F0aW9uKCkpKSkpOworICAgICAgICByZXN1bHQtPnB1dERpcmVjdEluZGV4KGV4
ZWMsIGksIGpzU3RyaW5nKHZtLCB0b1N0cmluZyhSYXdQb2ludGVyKG1fY29kZUFkZHJlc3Nlc1tp
XS5kYXRhTG9jYXRpb24oKSkpKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IHsgfSk7CiAgICAgfQogICAgIHJldHVybiByZXN1bHQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcHJvZmlsZXIvUHJvZmlsZXJVSUQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlclVJRC5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlclVJRC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtNDksNyArNDksNyBAQCB2b2lkIFVJRDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25z
dAogCiBKU1ZhbHVlIFVJRDo6dG9KUyhFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIGpzU3RyaW5nKGV4ZWMsIHRvU3RyaW5nKCp0aGlzKSk7CisgICAgcmV0dXJuIGpzU3RyaW5n
KGV4ZWMtPnZtKCksIHRvU3RyaW5nKCp0aGlzKSk7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlND
OjpQcm9maWxlcgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQWJzdHJhY3RN
b2R1bGVSZWNvcmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0Fic3RyYWN0TW9kdWxlUmVjb3JkLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQWJzdHJhY3RNb2R1bGVSZWNvcmQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtNjUsNyArNjUsNyBAQCB2b2lkIEFic3RyYWN0TW9kdWxlUmVjb3JkOjpmaW5p
c2hDcmVhdGlvCiAgICAgSlNNYXAqIG1hcCA9IEpTTWFwOjpjcmVhdGUoZXhlYywgdm0sIGdsb2Jh
bE9iamVjdCh2bSktPm1hcFN0cnVjdHVyZSgpKTsKICAgICBzY29wZS5yZWxlYXNlQXNzZXJ0Tm9F
eGNlcHRpb24oKTsKICAgICBtX2RlcGVuZGVuY2llc01hcC5zZXQodm0sIHRoaXMsIG1hcCk7Ci0g
ICAgcHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImRlcGVuZGVuY2ll
c01hcCJfcyksIG1fZGVwZW5kZW5jaWVzTWFwLmdldCgpKTsKKyAgICBwdXREaXJlY3Qodm0sIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJkZXBlbmRlbmNpZXNNYXAiX3MpLCBtX2RlcGVuZGVu
Y2llc01hcC5nZXQoKSk7CiB9CiAKIHZvaWQgQWJzdHJhY3RNb2R1bGVSZWNvcmQ6OnZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKQEAgLTE0OCw3ICsxNDgs
NyBAQCBBYnN0cmFjdE1vZHVsZVJlY29yZCogQWJzdHJhY3RNb2R1bGVSZWNvCiAgICAgSlNWYWx1
ZSBtb2R1bGVOYW1lVmFsdWUgPSBpZGVudGlmaWVyVG9KU1ZhbHVlKHZtLCBtb2R1bGVOYW1lKTsK
ICAgICBKU1ZhbHVlIGVudHJ5ID0gbV9kZXBlbmRlbmNpZXNNYXAtPkpTTWFwOjpnZXQoZXhlYywg
bW9kdWxlTmFtZVZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRy
KTsKLSAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGpzQ2FzdDxBYnN0cmFjdE1vZHVsZVJl
Y29yZCo+KGVudHJ5LmdldChleGVjLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJtb2R1
bGUiKSkpKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGpzQ2FzdDxBYnN0cmFjdE1v
ZHVsZVJlY29yZCo+KGVudHJ5LmdldChleGVjLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAi
bW9kdWxlIikpKSk7CiB9CiAKIGF1dG8gQWJzdHJhY3RNb2R1bGVSZWNvcmQ6OnJlc29sdmVJbXBv
cnQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBsb2NhbE5hbWUpIC0+IFJlc29s
dXRpb24KQEAgLTU0MSw3ICs1NDEsNyBAQCBhdXRvIEFic3RyYWN0TW9kdWxlUmVjb3JkOjpyZXNv
bHZlRXhwb3J0CiAgICAgICAgIC8vIEVucXVldWUgdGhlIHRhc2tzIGluIHJldmVyc2Ugb3JkZXIu
CiAgICAgICAgIGZvciAoYXV0byBpdGVyYXRvciA9IHF1ZXJ5Lm1vZHVsZVJlY29yZC0+c3RhckV4
cG9ydEVudHJpZXMoKS5yYmVnaW4oKSwgZW5kID0gcXVlcnkubW9kdWxlUmVjb3JkLT5zdGFyRXhw
b3J0RW50cmllcygpLnJlbmQoKTsgaXRlcmF0b3IgIT0gZW5kOyArK2l0ZXJhdG9yKSB7CiAgICAg
ICAgICAgICBjb25zdCBSZWZQdHI8VW5pcXVlZFN0cmluZ0ltcGw+JiBzdGFyTW9kdWxlTmFtZSA9
ICppdGVyYXRvcjsKLSAgICAgICAgICAgIEFic3RyYWN0TW9kdWxlUmVjb3JkKiBpbXBvcnRlZE1v
ZHVsZVJlY29yZCA9IHF1ZXJ5Lm1vZHVsZVJlY29yZC0+aG9zdFJlc29sdmVJbXBvcnRlZE1vZHVs
ZShleGVjLCBJZGVudGlmaWVyOjpmcm9tVWlkKGV4ZWMsIHN0YXJNb2R1bGVOYW1lLmdldCgpKSk7
CisgICAgICAgICAgICBBYnN0cmFjdE1vZHVsZVJlY29yZCogaW1wb3J0ZWRNb2R1bGVSZWNvcmQg
PSBxdWVyeS5tb2R1bGVSZWNvcmQtPmhvc3RSZXNvbHZlSW1wb3J0ZWRNb2R1bGUoZXhlYywgSWRl
bnRpZmllcjo6ZnJvbVVpZCh2bSwgc3Rhck1vZHVsZU5hbWUuZ2V0KCkpKTsKICAgICAgICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKICAgICAgICAgICAgIHBlbmRpbmdU
YXNrcy5hcHBlbmQoVGFzayB7IFJlc29sdmVRdWVyeShpbXBvcnRlZE1vZHVsZVJlY29yZCwgcXVl
cnkuZXhwb3J0TmFtZS5nZXQoKSksIFR5cGU6OlF1ZXJ5IH0pOwogICAgICAgICB9CkBAIC03MjAs
NyArNzIwLDcgQEAgc3RhdGljIHZvaWQgZ2V0RXhwb3J0ZWROYW1lcyhFeGVjU3RhdGUqIAogICAg
ICAgICB9CiAKICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBzdGFyTW9kdWxlTmFtZSA6IG1vZHVs
ZVJlY29yZC0+c3RhckV4cG9ydEVudHJpZXMoKSkgewotICAgICAgICAgICAgQWJzdHJhY3RNb2R1
bGVSZWNvcmQqIHJlcXVlc3RlZE1vZHVsZVJlY29yZCA9IG1vZHVsZVJlY29yZC0+aG9zdFJlc29s
dmVJbXBvcnRlZE1vZHVsZShleGVjLCBJZGVudGlmaWVyOjpmcm9tVWlkKGV4ZWMsIHN0YXJNb2R1
bGVOYW1lLmdldCgpKSk7CisgICAgICAgICAgICBBYnN0cmFjdE1vZHVsZVJlY29yZCogcmVxdWVz
dGVkTW9kdWxlUmVjb3JkID0gbW9kdWxlUmVjb3JkLT5ob3N0UmVzb2x2ZUltcG9ydGVkTW9kdWxl
KGV4ZWMsIElkZW50aWZpZXI6OmZyb21VaWQodm0sIHN0YXJNb2R1bGVOYW1lLmdldCgpKSk7CiAg
ICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogICAgICAgICAg
ICAgcGVuZGluZ01vZHVsZXMuYXBwZW5kKHJlcXVlc3RlZE1vZHVsZVJlY29yZCk7CiAgICAgICAg
IH0KQEAgLTc0Myw3ICs3NDMsNyBAQCBKU01vZHVsZU5hbWVzcGFjZU9iamVjdCogQWJzdHJhY3RN
b2R1bGVSCiAKICAgICBWZWN0b3I8c3RkOjpwYWlyPElkZW50aWZpZXIsIFJlc29sdXRpb24+PiBy
ZXNvbHV0aW9uczsKICAgICBmb3IgKGF1dG8mIG5hbWUgOiBleHBvcnRlZE5hbWVzKSB7Ci0gICAg
ICAgIElkZW50aWZpZXIgaWRlbnQgPSBJZGVudGlmaWVyOjpmcm9tVWlkKGV4ZWMsIG5hbWUuZ2V0
KCkpOworICAgICAgICBJZGVudGlmaWVyIGlkZW50ID0gSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwg
bmFtZS5nZXQoKSk7CiAgICAgICAgIGNvbnN0IFJlc29sdXRpb24gcmVzb2x1dGlvbiA9IHJlc29s
dmVFeHBvcnQoZXhlYywgaWRlbnQpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBudWxscHRyKTsKICAgICAgICAgc3dpdGNoIChyZXNvbHV0aW9uLnR5cGUpIHsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2lu
dFNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJy
YXlCdWZmZXJOZXV0ZXJpbmdXYXRjaHBvaW50U2V0LmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXJOZXV0ZXJpbmdXYXRjaHBv
aW50U2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02Miw3ICs2Miw3IEBAIFN0cnVjdHVyZSogQXJyYXlC
dWZmZXJOZXV0ZXJpbmdXYXRjaHBvaW4KIAogdm9pZCBBcnJheUJ1ZmZlck5ldXRlcmluZ1dhdGNo
cG9pbnRTZXQ6OmZpcmVBbGwoKQogewotICAgIG1fc2V0LT5maXJlQWxsKCp2bSgpLCAiQXJyYXkg
YnVmZmVyIHdhcyBuZXV0ZXJlZCIpOworICAgIG1fc2V0LT5maXJlQWxsKHZtKCksICJBcnJheSBi
dWZmZXIgd2FzIG5ldXRlcmVkIik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlJdGVyYXRvclByb3RvdHlwZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlJdGVyYXRvclBy
b3RvdHlwZS5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0FycmF5SXRlcmF0b3JQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSwgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTkgQXBwbGUsIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDMsNyAr
NDMsNyBAQCB2b2lkIEFycmF5SXRlcmF0b3JQcm90b3R5cGU6OmZpbmlzaENyZWF0CiB7CiAgICAg
QmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygp
KSk7Ci0gICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMt
PnRvU3RyaW5nVGFnU3ltYm9sLCBqc1N0cmluZygmdm0sICJBcnJheSBJdGVyYXRvciIpLCBQcm9w
ZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpOwor
ICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT50b1N0
cmluZ1RhZ1N5bWJvbCwganNTdHJpbmcodm0sICJBcnJheSBJdGVyYXRvciIpLCBQcm9wZXJ0eUF0
dHJpYnV0ZTo6RG9udEVudW0gfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpOwogICAgIEpT
Q19CVUlMVElOX0ZVTkNUSU9OX1dJVEhPVVRfVFJBTlNJVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5u
ZXh0LCBhcnJheUl0ZXJhdG9yUHJvdG90eXBlTmV4dENvZGVHZW5lcmF0b3IsIHN0YXRpY19jYXN0
PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKIH0KIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmNwcAkocmV2
aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90
b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmln
aHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQotICogIENvcHly
aWdodCAoQykgMjAwMy0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBD
b3B5cmlnaHQgKEMpIDIwMDMtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KiAgQ29weXJpZ2h0IChDKSAyMDAzIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCiAgKiAgQ29w
eXJpZ2h0IChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YgKGFwQG55cG9wLmNvbSkKICAqCkBA
IC01MzMsMTkgKzUzMywxOSBAQCBpbmxpbmUgSlNWYWx1ZSBmYXN0Sm9pbihFeGVjU3RhdGUmIHN0
YXRlCiAgICAgICAgICAgICBnb3RvIGdlbmVyYWxDYXNlOwogICAgICAgICBzd2l0Y2ggKHNlcGFy
YXRvci5sZW5ndGgoKSkgewogICAgICAgICBjYXNlIDA6Ci0gICAgICAgICAgICBSRUxFQVNFX0FO
RF9SRVRVUk4oc2NvcGUsIGpzRW1wdHlTdHJpbmcoJnN0YXRlKSk7CisgICAgICAgICAgICBSRUxF
QVNFX0FORF9SRVRVUk4oc2NvcGUsIGpzRW1wdHlTdHJpbmcodm0pKTsKICAgICAgICAgY2FzZSAx
OiB7CiAgICAgICAgICAgICBpZiAobGVuZ3RoIDw9IDEpCi0gICAgICAgICAgICAgICAgUkVMRUFT
RV9BTkRfUkVUVVJOKHNjb3BlLCBqc0VtcHR5U3RyaW5nKCZzdGF0ZSkpOworICAgICAgICAgICAg
ICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwganNFbXB0eVN0cmluZyh2bSkpOwogICAgICAg
ICAgICAgaWYgKHNlcGFyYXRvci5pczhCaXQoKSkKICAgICAgICAgICAgICAgICBSRUxFQVNFX0FO
RF9SRVRVUk4oc2NvcGUsIHJlcGVhdENoYXJhY3RlcihzdGF0ZSwgc2VwYXJhdG9yLmNoYXJhY3Rl
cnM4KClbMF0sIGxlbmd0aCAtIDEpKTsKICAgICAgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihz
Y29wZSwgcmVwZWF0Q2hhcmFjdGVyKHN0YXRlLCBzZXBhcmF0b3IuY2hhcmFjdGVyczE2KClbMF0s
IGxlbmd0aCAtIDEpKTsKICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIEpTU3RyaW5nKiBy
ZXN1bHQgPSBqc0VtcHR5U3RyaW5nKCZzdGF0ZSk7CisgICAgICAgICAgICBKU1N0cmluZyogcmVz
dWx0ID0ganNFbXB0eVN0cmluZyh2bSk7CiAgICAgICAgICAgICBpZiAobGVuZ3RoIDw9IDEpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKIAotICAgICAgICAgICAgSlNTdHJpbmcqIG9w
ZXJhbmQgPSBqc1N0cmluZygmdm0sIHNlcGFyYXRvci50b1N0cmluZygpKTsKKyAgICAgICAgICAg
IEpTU3RyaW5nKiBvcGVyYW5kID0ganNTdHJpbmcodm0sIHNlcGFyYXRvci50b1N0cmluZygpKTsK
ICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgICAgICAg
ICB1bnNpZ25lZCBjb3VudCA9IGxlbmd0aCAtIDE7CiAgICAgICAgICAgICBmb3IgKDs7KSB7CkBA
IC02OTksNyArNjk5LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3Rv
RgogICAgICAgICBKU1ZhbHVlIGVsZW1lbnQgPSB0aGlzT2JqZWN0LT5nZXRJbmRleChleGVjLCBp
KTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7
CiAgICAgICAgIGlmIChlbGVtZW50LmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgICAgICBl
bGVtZW50ID0ganNFbXB0eVN0cmluZyhleGVjKTsKKyAgICAgICAgICAgIGVsZW1lbnQgPSBqc0Vt
cHR5U3RyaW5nKHZtKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBKU1ZhbHVlIGNvbnZl
cnNpb25GdW5jdGlvbiA9IGVsZW1lbnQuZ2V0KGV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPnRvTG9j
YWxlU3RyaW5nKTsKICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29k
ZWRKU1ZhbHVlKCkpOwpAQCAtNzI4LDcgKzcyOCw3IEBAIHN0YXRpYyBKU1ZhbHVlIHNsb3dKb2lu
KEV4ZWNTdGF0ZSYgZXhlYywKIAogICAgIC8vIDUuIElmIGxlbiBpcyB6ZXJvLCByZXR1cm4gdGhl
IGVtcHR5IFN0cmluZy4KICAgICBpZiAoIWxlbmd0aCkKLSAgICAgICAgcmV0dXJuIGpzRW1wdHlT
dHJpbmcoJmV4ZWMpOworICAgICAgICByZXR1cm4ganNFbXB0eVN0cmluZyh2bSk7CiAKICAgICAv
LyA2LiBMZXQgZWxlbWVudDAgYmUgR2V0KE8sICIwIikuCiAgICAgSlNWYWx1ZSBlbGVtZW50MCA9
IHRoaXNPYmplY3QtPmdldEluZGV4KCZleGVjLCAwKTsKQEAgLTczNyw3ICs3MzcsNyBAQCBzdGF0
aWMgSlNWYWx1ZSBzbG93Sm9pbihFeGVjU3RhdGUmIGV4ZWMsCiAgICAgLy8gNy4gSWYgZWxlbWVu
dDAgaXMgdW5kZWZpbmVkIG9yIG51bGwsIGxldCBSIGJlIHRoZSBlbXB0eSBTdHJpbmc7IG90aGVy
d2lzZSwgbGV0IFIgYmUgPyBUb1N0cmluZyhlbGVtZW50MCkuCiAgICAgSlNTdHJpbmcqIHIgPSBu
dWxscHRyOwogICAgIGlmIChlbGVtZW50MC5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICBy
ID0ganNFbXB0eVN0cmluZygmZXhlYyk7CisgICAgICAgIHIgPSBqc0VtcHR5U3RyaW5nKHZtKTsK
ICAgICBlbHNlCiAgICAgICAgIHIgPSBlbGVtZW50MC50b1N0cmluZygmZXhlYyk7CiAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKQEAgLTc0Nyw3ICs3NDcsNyBAQCBzdGF0aWMg
SlNWYWx1ZSBzbG93Sm9pbihFeGVjU3RhdGUmIGV4ZWMsCiAgICAgLy8gOS5lIEluY3JlYXNlIGsg
YnkgMS4uCiAgICAgZm9yICh1aW50NjRfdCBrID0gMTsgayA8IGxlbmd0aDsgKytrKSB7CiAgICAg
ICAgIC8vIGIuIExldCBlbGVtZW50IGJlID8gR2V0KE8sICEgVG9TdHJpbmcoaykpLgotICAgICAg
ICBKU1ZhbHVlIGVsZW1lbnQgPSB0aGlzT2JqZWN0LT5nZXQoJmV4ZWMsIElkZW50aWZpZXI6OmZy
b21TdHJpbmcoJmV4ZWMsIEF0b21TdHJpbmc6Om51bWJlcihrKSkpOworICAgICAgICBKU1ZhbHVl
IGVsZW1lbnQgPSB0aGlzT2JqZWN0LT5nZXQoJmV4ZWMsIElkZW50aWZpZXI6OmZyb21TdHJpbmco
dm0sIEF0b21TdHJpbmc6Om51bWJlcihrKSkpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCB7IH0pOwogCiAgICAgICAgIC8vIGMuIElmIGVsZW1lbnQgaXMgdW5kZWZpbmVkIG9y
IG51bGwsIGxldCBuZXh0IGJlIHRoZSBlbXB0eSBTdHJpbmc7IG90aGVyd2lzZSwgbGV0IG5leHQg
YmUgPyBUb1N0cmluZyhlbGVtZW50KS4KQEAgLTc1NSw3ICs3NTUsNyBAQCBzdGF0aWMgSlNWYWx1
ZSBzbG93Sm9pbihFeGVjU3RhdGUmIGV4ZWMsCiAgICAgICAgIGlmIChlbGVtZW50LmlzVW5kZWZp
bmVkT3JOdWxsKCkpIHsKICAgICAgICAgICAgIGlmICghc2VwYXJhdG9yLT5sZW5ndGgoKSkKICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIG5leHQgPSBqc0VtcHR5U3RyaW5n
KCZleGVjKTsKKyAgICAgICAgICAgIG5leHQgPSBqc0VtcHR5U3RyaW5nKHZtKTsKICAgICAgICAg
fSBlbHNlCiAgICAgICAgICAgICBuZXh0ID0gZWxlbWVudC50b1N0cmluZygmZXhlYyk7CiAgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CkBAIC03OTcsNyArNzk3LDcgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgICAgICBpZiAoVU5M
SUtFTFkobGVuZ3RoID4gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpIHx8ICFj
YW5Vc2VGYXN0Sm9pbih0aGlzT2JqZWN0KSkpIHsKICAgICAgICAgICAgIHVpbnQ2NF90IGxlbmd0
aDY0ID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGxlbmd0aCk7CiAgICAgICAgICAgICBBU1NFUlQo
c3RhdGljX2Nhc3Q8ZG91YmxlPihsZW5ndGg2NCkgPT0gbGVuZ3RoKTsKLSAgICAgICAgICAgIEpT
U3RyaW5nKiBqc1NlcGFyYXRvciA9IGpzU2luZ2xlQ2hhcmFjdGVyU3RyaW5nKGV4ZWMsIGNvbW1h
KTsKKyAgICAgICAgICAgIEpTU3RyaW5nKiBqc1NlcGFyYXRvciA9IGpzU2luZ2xlQ2hhcmFjdGVy
U3RyaW5nKHZtLCBjb21tYSk7CiAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBlbmNvZGVkSlNWYWx1ZSgpKTsKIAogICAgICAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNj
b3BlLCBKU1ZhbHVlOjplbmNvZGUoc2xvd0pvaW4oKmV4ZWMsIHRoaXNPYmplY3QsIGpzU2VwYXJh
dG9yLCBsZW5ndGg2NCkpKTsKQEAgLTg4OCw3ICs4ODgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgICAgICAgICB0aGlzT2JqLT5tZXRob2RUYWJsZSh2
bSktPnB1dEJ5SW5kZXgodGhpc09iaiwgZXhlYywgbGVuZ3RoICsgbiwgZXhlYy0+dW5jaGVja2Vk
QXJndW1lbnQobiksIHRydWUpOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIFB1dFByb3Bl
cnR5U2xvdCBzbG90KHRoaXNPYmopOwotICAgICAgICAgICAgSWRlbnRpZmllciBwcm9wZXJ0eU5h
bWUgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsIEpTVmFsdWUoc3RhdGljX2Nhc3Q8aW50
NjRfdD4obGVuZ3RoKSArIHN0YXRpY19jYXN0PGludDY0X3Q+KG4pKS50b1dURlN0cmluZyhleGVj
KSk7CisgICAgICAgICAgICBJZGVudGlmaWVyIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZy
b21TdHJpbmcodm0sIEpTVmFsdWUoc3RhdGljX2Nhc3Q8aW50NjRfdD4obGVuZ3RoKSArIHN0YXRp
Y19jYXN0PGludDY0X3Q+KG4pKS50b1dURlN0cmluZyhleGVjKSk7CiAgICAgICAgICAgICB0aGlz
T2JqLT5tZXRob2RUYWJsZSh2bSktPnB1dCh0aGlzT2JqLCBleGVjLCBwcm9wZXJ0eU5hbWUsIGV4
ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KG4pLCBzbG90KTsKICAgICAgICAgfQogICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0FzeW5jRnVuY3Rpb25Qcm90b3R5cGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FzeW5jRnVuY3Rpb25Qcm90b3R5
cGUuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Bc3luY0Z1bmN0aW9uUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYg
QEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQ2FpdGxpbiBQb3R0ZXIgPGNhaXRwQGlnYWxp
YS5jb20+LgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDksNyArNTAsNyBAQCB2
b2lkIEFzeW5jRnVuY3Rpb25Qcm90b3R5cGU6OmZpbmlzaENyZWF0CiAgICAgQmFzZTo6ZmluaXNo
Q3JlYXRpb24odm0pOwogICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7CiAgICAgcHV0
RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNO
dW1iZXIoMCksIFByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgUHJvcGVydHlBdHRyaWJ1
dGU6OlJlYWRPbmx5IHwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKLSAgICBwdXREaXJl
Y3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+dG9TdHJpbmdUYWdTeW1i
b2wsIGpzU3RyaW5nKCZ2bSwgIkFzeW5jRnVuY3Rpb24iKSwgUHJvcGVydHlBdHRyaWJ1dGU6OkRv
bnRFbnVtIHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KTsKKyAgICBwdXREaXJlY3RXaXRo
b3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+dG9TdHJpbmdUYWdTeW1ib2wsIGpz
U3RyaW5nKHZtLCAiQXN5bmNGdW5jdGlvbiIpLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0g
fCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FzeW5jR2VuZXJhdG9yRnVuY3Rp
b25Qcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0FzeW5jR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyNDkxMjgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Bc3luY0dlbmVyYXRvckZ1bmN0aW9u
UHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5
cmlnaHQgKEMpIDIwMTcgT2xla3NhbmRyIFNrYWNoa292IDxnc2thY2hrb3ZAZ21haWwuY29tPi4K
KyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ5LDcgKzUwLDcgQEAgdm9pZCBBc3lu
Y0dlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlOjpmaQogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9u
KHZtKTsKICAgICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOwogICAgIHB1dERpcmVjdFdp
dGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDAp
LCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IFByb3BlcnR5QXR0cmlidXRlOjpSZWFk
T25seSB8IFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7Ci0gICAgcHV0RGlyZWN0V2l0aG91
dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPnRvU3RyaW5nVGFnU3ltYm9sLCBqc1N0
cmluZygmdm0sICJBc3luY0dlbmVyYXRvckZ1bmN0aW9uIiksIFByb3BlcnR5QXR0cmlidXRlOjpE
b250RW51bSB8IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSk7CisgICAgcHV0RGlyZWN0V2l0
aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPnRvU3RyaW5nVGFnU3ltYm9sLCBq
c1N0cmluZyh2bSwgIkFzeW5jR2VuZXJhdG9yRnVuY3Rpb24iKSwgUHJvcGVydHlBdHRyaWJ1dGU6
OkRvbnRFbnVtIHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Bc3luY0dlbmVy
YXRvclByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQXN5bmNHZW5lcmF0b3JQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Bc3luY0dlbmVyYXRvclByb3RvdHlwZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE3
IE9sZWtzYW5kciBTa2FjaGtvdiA8Z3NrYWNoa292QGdtYWlsLmNvbT4uCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC00OCw3ICs0OSw3IEBAIHZvaWQgQXN5bmNHZW5lcmF0b3JQcm90
b3R5cGU6OmZpbmlzaENyZWEKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAg
QVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKLSAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNp
dGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+dG9TdHJpbmdUYWdTeW1ib2wsIGpzU3RyaW5nKCZ2
bSwgIkFzeW5jR2VuZXJhdG9yIiksIFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8IFByb3Bl
cnR5QXR0cmlidXRlOjpSZWFkT25seSk7CisgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24o
dm0sIHZtLnByb3BlcnR5TmFtZXMtPnRvU3RyaW5nVGFnU3ltYm9sLCBqc1N0cmluZyh2bSwgIkFz
eW5jR2VuZXJhdG9yIiksIFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8IFByb3BlcnR5QXR0
cmlidXRlOjpSZWFkT25seSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXRvbWljc09iamVjdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXRvbWljc09iamVjdC5jcHAJKHJldmlzaW9u
IDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0F0b21pY3NPYmplY3Qu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODEsNyArODEsNyBAQCB2b2lkIEF0b21pY3NPYmplY3Q6
OmZpbmlzaENyZWF0aW9uKFZNJiB2CiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsK
ICAgICAKICNkZWZpbmUgUFVUX0RJUkVDVF9OQVRJVkVfRlVOQyhsb3dlck5hbWUsIHVwcGVyTmFt
ZSwgY291bnQpIFwKLSAgICBwdXREaXJlY3ROYXRpdmVGdW5jdGlvbldpdGhvdXRUcmFuc2l0aW9u
KHZtLCBnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAjbG93ZXJOYW1l
KSwgY291bnQsIGF0b21pY3NGdW5jICMjIHVwcGVyTmFtZSwgQXRvbWljcyAjIyB1cHBlck5hbWUg
IyMgSW50cmluc2ljLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRv
bnRFbnVtKSk7CisgICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbih2
bSwgZ2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAjbG93ZXJOYW1lKSwg
Y291bnQsIGF0b21pY3NGdW5jICMjIHVwcGVyTmFtZSwgQXRvbWljcyAjIyB1cHBlck5hbWUgIyMg
SW50cmluc2ljLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRF
bnVtKSk7CiAgICAgRk9SX0VBQ0hfQVRPTUlDU19GVU5DKFBVVF9ESVJFQ1RfTkFUSVZFX0ZVTkMp
CiAjdW5kZWYgUFVUX0RJUkVDVF9OQVRJVkVfRlVOQwogfQpAQCAtNDI1LDcgKzQyNSw3IEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXRvbWljc0Z1bmMKICAgICAgICAgcmVzdWx0U3Ry
aW5nID0gInRpbWVkLW91dCI7CiAgICAgZWxzZQogICAgICAgICByZXN1bHRTdHJpbmcgPSAib2si
OwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcoZXhlYywgcmVzdWx0U3RyaW5n
KSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyh2bSwgcmVzdWx0U3RyaW5n
KSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXRvbWljc0Z1bmNXYWtlKEV4
ZWNTdGF0ZSogZXhlYykKQEAgLTQ2OCw3ICs0NjgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGF0b21pY3NGdW5jCiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
bkF0b21pY3NBZGQoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBiYXNlLCBFbmNvZGVk
SlNWYWx1ZSBpbmRleCwgRW5jb2RlZEpTVmFsdWUgb3BlcmFuZCkKIHsKICAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsK
KyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICBKU1ZhbHVl
IGFyZ3NbXSA9IHtKU1ZhbHVlOjpkZWNvZGUoYmFzZSksIEpTVmFsdWU6OmRlY29kZShpbmRleCks
IEpTVmFsdWU6OmRlY29kZShvcGVyYW5kKX07CiAgICAgcmV0dXJuIGF0b21pY09wZXJhdGlvbldp
dGhBcmdzKHZtLCBleGVjLCBhcmdzLCBBZGRGdW5jKCkpOwogfQpAQCAtNDc2LDcgKzQ3Niw3IEBA
IEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXQKIEVuY29kZWRKU1ZhbHVl
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXRvbWljc0FuZChFeGVjU3RhdGUqIGV4ZWMsIEVuY29k
ZWRKU1ZhbHVlIGJhc2UsIEVuY29kZWRKU1ZhbHVlIGluZGV4LCBFbmNvZGVkSlNWYWx1ZSBvcGVy
YW5kKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
dm0sIGV4ZWMpOwogICAgIEpTVmFsdWUgYXJnc1tdID0ge0pTVmFsdWU6OmRlY29kZShiYXNlKSwg
SlNWYWx1ZTo6ZGVjb2RlKGluZGV4KSwgSlNWYWx1ZTo6ZGVjb2RlKG9wZXJhbmQpfTsKICAgICBy
ZXR1cm4gYXRvbWljT3BlcmF0aW9uV2l0aEFyZ3Modm0sIGV4ZWMsIGFyZ3MsIEFuZEZ1bmMoKSk7
CiB9CkBAIC00ODQsNyArNDg0LDcgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVy
YXRpb25BdAogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25BdG9taWNzQ29t
cGFyZUV4Y2hhbmdlKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgYmFzZSwgRW5jb2Rl
ZEpTVmFsdWUgaW5kZXgsIEVuY29kZWRKU1ZhbHVlIGV4cGVjdGVkLCBFbmNvZGVkSlNWYWx1ZSBu
ZXdWYWx1ZSkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKHZtLCBleGVjKTsKICAgICBKU1ZhbHVlIGFyZ3NbXSA9IHtKU1ZhbHVlOjpkZWNvZGUoYmFz
ZSksIEpTVmFsdWU6OmRlY29kZShpbmRleCksIEpTVmFsdWU6OmRlY29kZShleHBlY3RlZCksIEpT
VmFsdWU6OmRlY29kZShuZXdWYWx1ZSl9OwogICAgIHJldHVybiBhdG9taWNPcGVyYXRpb25XaXRo
QXJncyh2bSwgZXhlYywgYXJncywgQ29tcGFyZUV4Y2hhbmdlRnVuYygpKTsKIH0KQEAgLTQ5Miw3
ICs0OTIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkF0CiBFbmNv
ZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkF0b21pY3NFeGNoYW5nZShFeGVjU3Rh
dGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGJhc2UsIEVuY29kZWRKU1ZhbHVlIGluZGV4LCBFbmNv
ZGVkSlNWYWx1ZSBvcGVyYW5kKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIEpTVmFsdWUgYXJnc1tdID0ge0pTVmFsdWU6
OmRlY29kZShiYXNlKSwgSlNWYWx1ZTo6ZGVjb2RlKGluZGV4KSwgSlNWYWx1ZTo6ZGVjb2RlKG9w
ZXJhbmQpfTsKICAgICByZXR1cm4gYXRvbWljT3BlcmF0aW9uV2l0aEFyZ3Modm0sIGV4ZWMsIGFy
Z3MsIEV4Y2hhbmdlRnVuYygpKTsKIH0KQEAgLTUwMCwxNCArNTAwLDE0IEBAIEVuY29kZWRKU1Zh
bHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXQKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uQXRvbWljc0lzTG9ja0ZyZWUoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNW
YWx1ZSBzaXplKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIodm0sIGV4ZWMpOwogICAgIHJldHVybiBpc0xvY2tGcmVlKGV4ZWMsIEpTVmFsdWU6OmRl
Y29kZShzaXplKSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
QXRvbWljc0xvYWQoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBiYXNlLCBFbmNvZGVk
SlNWYWx1ZSBpbmRleCkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFj
ZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICBKU1ZhbHVlIGFyZ3NbXSA9IHtKU1ZhbHVlOjpkZWNv
ZGUoYmFzZSksIEpTVmFsdWU6OmRlY29kZShpbmRleCl9OwogICAgIHJldHVybiBhdG9taWNPcGVy
YXRpb25XaXRoQXJncyh2bSwgZXhlYywgYXJncywgTG9hZEZ1bmMoKSk7CiB9CkBAIC01MTUsNyAr
NTE1LDcgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25BdAogRW5jb2Rl
ZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25BdG9taWNzT3IoRXhlY1N0YXRlKiBleGVj
LCBFbmNvZGVkSlNWYWx1ZSBiYXNlLCBFbmNvZGVkSlNWYWx1ZSBpbmRleCwgRW5jb2RlZEpTVmFs
dWUgb3BlcmFuZCkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxG
cmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIg
dHJhY2VyKHZtLCBleGVjKTsKICAgICBKU1ZhbHVlIGFyZ3NbXSA9IHtKU1ZhbHVlOjpkZWNvZGUo
YmFzZSksIEpTVmFsdWU6OmRlY29kZShpbmRleCksIEpTVmFsdWU6OmRlY29kZShvcGVyYW5kKX07
CiAgICAgcmV0dXJuIGF0b21pY09wZXJhdGlvbldpdGhBcmdzKHZtLCBleGVjLCBhcmdzLCBPckZ1
bmMoKSk7CiB9CkBAIC01MjMsNyArNTIzLDcgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElP
TiBvcGVyYXRpb25BdAogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25BdG9t
aWNzU3RvcmUoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBiYXNlLCBFbmNvZGVkSlNW
YWx1ZSBpbmRleCwgRW5jb2RlZEpTVmFsdWUgb3BlcmFuZCkKIHsKICAgICBWTSYgdm0gPSBleGVj
LT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICBKU1ZhbHVlIGFy
Z3NbXSA9IHtKU1ZhbHVlOjpkZWNvZGUoYmFzZSksIEpTVmFsdWU6OmRlY29kZShpbmRleCksIEpT
VmFsdWU6OmRlY29kZShvcGVyYW5kKX07CiAgICAgcmV0dXJuIGF0b21pY09wZXJhdGlvbldpdGhB
cmdzKHZtLCBleGVjLCBhcmdzLCBTdG9yZUZ1bmMoKSk7CiB9CkBAIC01MzEsNyArNTMxLDcgQEAg
RW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25BdAogRW5jb2RlZEpTVmFsdWUg
SklUX09QRVJBVElPTiBvcGVyYXRpb25BdG9taWNzU3ViKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2Rl
ZEpTVmFsdWUgYmFzZSwgRW5jb2RlZEpTVmFsdWUgaW5kZXgsIEVuY29kZWRKU1ZhbHVlIG9wZXJh
bmQpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFj
ZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2
bSwgZXhlYyk7CiAgICAgSlNWYWx1ZSBhcmdzW10gPSB7SlNWYWx1ZTo6ZGVjb2RlKGJhc2UpLCBK
U1ZhbHVlOjpkZWNvZGUoaW5kZXgpLCBKU1ZhbHVlOjpkZWNvZGUob3BlcmFuZCl9OwogICAgIHJl
dHVybiBhdG9taWNPcGVyYXRpb25XaXRoQXJncyh2bSwgZXhlYywgYXJncywgU3ViRnVuYygpKTsK
IH0KQEAgLTUzOSw3ICs1MzksNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbkF0CiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkF0b21pY3NYb3Io
RXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBiYXNlLCBFbmNvZGVkSlNWYWx1ZSBpbmRl
eCwgRW5jb2RlZEpTVmFsdWUgb3BlcmFuZCkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwot
ICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICBKU1ZhbHVlIGFyZ3NbXSA9IHtK
U1ZhbHVlOjpkZWNvZGUoYmFzZSksIEpTVmFsdWU6OmRlY29kZShpbmRleCksIEpTVmFsdWU6OmRl
Y29kZShvcGVyYW5kKX07CiAgICAgcmV0dXJuIGF0b21pY09wZXJhdGlvbldpdGhBcmdzKHZtLCBl
eGVjLCBhcmdzLCBYb3JGdW5jKCkpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQmlnSW50UHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9CaWdJbnRQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CaWdJbnRQcm90b3R5cGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxNyBDYWlvIExp
bWEgPHRpY2Fpb2xpbWFAZ21haWwuY29tPi4KLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTcyLDcgKzcyLDcgQEAgdm9pZCBCaWdJbnRQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9u
KFZNJgogewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBBU1NFUlQoaW5oZXJp
dHModm0sIGluZm8oKSkpOwotICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5w
cm9wZXJ0eU5hbWVzLT50b1N0cmluZ1RhZ1N5bWJvbCwganNTdHJpbmcoJnZtLCAiQmlnSW50Iiks
IFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25s
eSk7CisgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMt
PnRvU3RyaW5nVGFnU3ltYm9sLCBqc1N0cmluZyh2bSwgIkJpZ0ludCIpLCBQcm9wZXJ0eUF0dHJp
YnV0ZTo6RG9udEVudW0gfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpOwogfQogCiAvLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQpAQCAtMTEwLDcgKzExMCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgYmlnSW50UHJvdG8KICAgICBpZiAocmVzdWx0U3RyaW5nLmxlbmd0aCgpID09IDEpCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodm0uc21hbGxTdHJpbmdzLnNpbmdsZUNoYXJhY3Rl
clN0cmluZyhyZXN1bHRTdHJpbmdbMF0pKTsKIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNOb250cml2aWFsU3RyaW5nKCZ2bSwgcmVzdWx0U3RyaW5nKSk7CisgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc05vbnRyaXZpYWxTdHJpbmcodm0sIHJlc3VsdFN0cmluZykpOwogfQogCiBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGJpZ0ludFByb3RvRnVuY1RvTG9jYWxlU3RyaW5n
KEV4ZWNTdGF0ZSogc3RhdGUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9D
YWNoZWRUeXBlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQ2FjaGVkVHlwZXMuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9DYWNoZWRUeXBlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcxMSw3ICs3
MTEsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBpZiAoIW1faXNTeW1ib2wpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIEF0b21TdHJpbmdJbXBsOjphZGQoYnVmZmVyLCBtX2xlbmd0aCkubGVha1Jl
ZigpOwogCi0gICAgICAgICAgICBJZGVudGlmaWVyIGlkZW50ID0gSWRlbnRpZmllcjo6ZnJvbVN0
cmluZygmZGVjb2Rlci52bSgpLCBidWZmZXIsIG1fbGVuZ3RoKTsKKyAgICAgICAgICAgIElkZW50
aWZpZXIgaWRlbnQgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGRlY29kZXIudm0oKSwgYnVmZmVy
LCBtX2xlbmd0aCk7CiAgICAgICAgICAgICBTdHJpbmcgc3RyID0gZGVjb2Rlci52bSgpLnByb3Bl
cnR5TmFtZXMtPmxvb2tVcFByaXZhdGVOYW1lKGlkZW50KTsKICAgICAgICAgICAgIFN0cmluZ0lt
cGwqIGltcGwgPSBzdHIucmVsZWFzZUltcGwoKS5nZXQoKTsKICAgICAgICAgICAgIEFTU0VSVChp
bXBsLT5pc1N5bWJvbCgpKTsKQEAgLTc3Myw3ICs3NzMsNyBAQCBwdWJsaWM6CiAgICAgICAgIGlm
IChzdHIuaXNOdWxsKCkpCiAgICAgICAgICAgICByZXR1cm4gSWRlbnRpZmllcigpOwogCi0gICAg
ICAgIHJldHVybiBJZGVudGlmaWVyOjpmcm9tVWlkKCZkZWNvZGVyLnZtKCksIChVbmlxdWVkU3Ry
aW5nSW1wbCopc3RyLmltcGwoKSk7CisgICAgICAgIHJldHVybiBJZGVudGlmaWVyOjpmcm9tVWlk
KGRlY29kZXIudm0oKSwgKFVuaXF1ZWRTdHJpbmdJbXBsKilzdHIuaW1wbCgpKTsKICAgICB9CiAK
ICAgICB2b2lkIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBJZGVudGlmaWVyJiBpZGVudCkgY29u
c3QKQEAgLTEzMTQsNyArMTMxNCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICBjYXNlIEVuY29kZWRUeXBlOjpTdHJpbmc6IHsKICAgICAgICAgICAgIFN0cmluZ0ltcGwq
IGltcGwgPSB0aGlzLT5idWZmZXI8Q2FjaGVkVW5pcXVlZFN0cmluZ0ltcGw+KCktPmRlY29kZShk
ZWNvZGVyKTsKLSAgICAgICAgICAgIHYgPSBqc1N0cmluZygmZGVjb2Rlci52bSgpLCBhZG9wdFJl
ZigqaW1wbCkpOworICAgICAgICAgICAgdiA9IGpzU3RyaW5nKGRlY29kZXIudm0oKSwgYWRvcHRS
ZWYoKmltcGwpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2Ug
RW5jb2RlZFR5cGU6OkltbXV0YWJsZUJ1dHRlcmZseToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0NvZGVDYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ29kZUNhY2hlLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29kZUNhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDUsNyArNDUsNyBAQCB2b2lkIENvZGVDYWNoZU1hcDo6cHJ1bmVTbG93Q2FzZSgpCiAgICAgd2hp
bGUgKG1fc2l6ZSA+IG1fY2FwYWNpdHkgfHwgIWNhblBydW5lUXVpY2tseSgpKSB7CiAgICAgICAg
IE1hcFR5cGU6Oml0ZXJhdG9yIGl0ID0gbV9tYXAuYmVnaW4oKTsKIAotICAgICAgICB3cml0ZUNv
ZGVCbG9jaygqaXQtPnZhbHVlLmNlbGwtPnZtKCksIGl0LT5rZXksIGl0LT52YWx1ZSk7CisgICAg
ICAgIHdyaXRlQ29kZUJsb2NrKGl0LT52YWx1ZS5jZWxsLT52bSgpLCBpdC0+a2V5LCBpdC0+dmFs
dWUpOwogCiAgICAgICAgIG1fc2l6ZSAtPSBpdC0+a2V5Lmxlbmd0aCgpOwogICAgICAgICBtX21h
cC5yZW1vdmUoaXQpOwpAQCAtMTUxLDcgKzE1MSw3IEBAIFVubGlua2VkRnVuY3Rpb25FeGVjdXRh
YmxlKiBDb2RlQ2FjaGU6OmcKICAgICAvLyBUaGUgRnVuY3Rpb24gY29uc3RydWN0b3Igb25seSBo
YXMgYWNjZXNzIHRvIGdsb2JhbCB2YXJpYWJsZXMsIHNvIG5vIHZhcmlhYmxlcyB3aWxsIGJlIHVu
ZGVyIFREWiB1bmxlc3MgdGhleSdyZQogICAgIC8vIGluIHRoZSBnbG9iYWwgbGV4aWNhbCBlbnZp
cm9ubWVudCwgd2hpY2ggd2UgYWx3YXlzIFREWiBjaGVjayBhY2Nlc3NlcyBmcm9tLgogICAgIENv
bnN0cnVjdEFiaWxpdHkgY29uc3RydWN0QWJpbGl0eSA9IGNvbnN0cnVjdEFiaWxpdHlGb3JQYXJz
ZU1vZGUobWV0YWRhdGEtPnBhcnNlTW9kZSgpKTsKLSAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0
YWJsZSogZnVuY3Rpb25FeGVjdXRhYmxlID0gVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OmNy
ZWF0ZSgmdm0sIHNvdXJjZSwgbWV0YWRhdGEsIFVubGlua2VkTm9ybWFsRnVuY3Rpb24sIGNvbnN0
cnVjdEFiaWxpdHksIEpTUGFyc2VyU2NyaXB0TW9kZTo6Q2xhc3NpYywgV1RGOjpudWxsb3B0LCBE
ZXJpdmVkQ29udGV4dFR5cGU6Ok5vbmUpOworICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxl
KiBmdW5jdGlvbkV4ZWN1dGFibGUgPSBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y3JlYXRl
KHZtLCBzb3VyY2UsIG1ldGFkYXRhLCBVbmxpbmtlZE5vcm1hbEZ1bmN0aW9uLCBjb25zdHJ1Y3RB
YmlsaXR5LCBKU1BhcnNlclNjcmlwdE1vZGU6OkNsYXNzaWMsIFdURjo6bnVsbG9wdCwgRGVyaXZl
ZENvbnRleHRUeXBlOjpOb25lKTsKIAogICAgIGlmICghc291cmNlLnByb3ZpZGVyKCktPnNvdXJj
ZVVSTERpcmVjdGl2ZSgpLmlzTnVsbCgpKQogICAgICAgICBmdW5jdGlvbkV4ZWN1dGFibGUtPnNl
dFNvdXJjZVVSTERpcmVjdGl2ZShzb3VyY2UucHJvdmlkZXIoKS0+c291cmNlVVJMRGlyZWN0aXZl
KCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29kZUNhY2hlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29kZUNhY2hlLmgJKHJl
dmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvZGVDYWNo
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNjQsNyArMjY0LDcgQEAgVW5saW5rZWRDb2RlQmxvY2tU
eXBlKiBnZW5lcmF0ZVVubGlua2VkQwogewogICAgIHR5cGVkZWYgdHlwZW5hbWUgQ2FjaGVUeXBl
czxVbmxpbmtlZENvZGVCbG9ja1R5cGU+OjpSb290Tm9kZSBSb290Tm9kZTsKICAgICBzdGQ6OnVu
aXF1ZV9wdHI8Um9vdE5vZGU+IHJvb3ROb2RlID0gcGFyc2U8Um9vdE5vZGU+KAotICAgICAgICAm
dm0sIHNvdXJjZSwgSWRlbnRpZmllcigpLCBKU1BhcnNlckJ1aWx0aW5Nb2RlOjpOb3RCdWlsdGlu
LCBzdHJpY3RNb2RlLCBzY3JpcHRNb2RlLCBDYWNoZVR5cGVzPFVubGlua2VkQ29kZUJsb2NrVHlw
ZT46OnBhcnNlTW9kZSwgU3VwZXJCaW5kaW5nOjpOb3ROZWVkZWQsIGVycm9yLCBudWxscHRyLCBD
b25zdHJ1Y3RvcktpbmQ6Ok5vbmUsIGRlcml2ZWRDb250ZXh0VHlwZSwgZXZhbENvbnRleHRUeXBl
KTsKKyAgICAgICAgdm0sIHNvdXJjZSwgSWRlbnRpZmllcigpLCBKU1BhcnNlckJ1aWx0aW5Nb2Rl
OjpOb3RCdWlsdGluLCBzdHJpY3RNb2RlLCBzY3JpcHRNb2RlLCBDYWNoZVR5cGVzPFVubGlua2Vk
Q29kZUJsb2NrVHlwZT46OnBhcnNlTW9kZSwgU3VwZXJCaW5kaW5nOjpOb3ROZWVkZWQsIGVycm9y
LCBudWxscHRyLCBDb25zdHJ1Y3RvcktpbmQ6Ok5vbmUsIGRlcml2ZWRDb250ZXh0VHlwZSwgZXZh
bENvbnRleHRUeXBlKTsKICAgICBpZiAoIXJvb3ROb2RlKQogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKIApAQCAtMjgxLDcgKzI4MSw3IEBAIFVubGlua2VkQ29kZUJsb2NrVHlwZSogZ2VuZXJhdGVV
bmxpbmtlZEMKICAgICBib29sIGlzU3RyaWN0TW9kZSA9IHJvb3ROb2RlLT5mZWF0dXJlcygpICYg
U3RyaWN0TW9kZUZlYXR1cmU7CiAgICAgRXhlY3V0YWJsZUluZm8gZXhlY3V0YWJsZUluZm8odXNl
c0V2YWwsIGlzU3RyaWN0TW9kZSwgZmFsc2UsIGZhbHNlLCBDb25zdHJ1Y3RvcktpbmQ6Ok5vbmUs
IHNjcmlwdE1vZGUsIFN1cGVyQmluZGluZzo6Tm90TmVlZGVkLCBDYWNoZVR5cGVzPFVubGlua2Vk
Q29kZUJsb2NrVHlwZT46OnBhcnNlTW9kZSwgZGVyaXZlZENvbnRleHRUeXBlLCBpc0Fycm93RnVu
Y3Rpb25Db250ZXh0LCBmYWxzZSwgZXZhbENvbnRleHRUeXBlKTsKIAotICAgIFVubGlua2VkQ29k
ZUJsb2NrVHlwZSogdW5saW5rZWRDb2RlQmxvY2sgPSBVbmxpbmtlZENvZGVCbG9ja1R5cGU6OmNy
ZWF0ZSgmdm0sIGV4ZWN1dGFibGVJbmZvLCBjb2RlR2VuZXJhdGlvbk1vZGUpOworICAgIFVubGlu
a2VkQ29kZUJsb2NrVHlwZSogdW5saW5rZWRDb2RlQmxvY2sgPSBVbmxpbmtlZENvZGVCbG9ja1R5
cGU6OmNyZWF0ZSh2bSwgZXhlY3V0YWJsZUluZm8sIGNvZGVHZW5lcmF0aW9uTW9kZSk7CiAgICAg
dW5saW5rZWRDb2RlQmxvY2stPnJlY29yZFBhcnNlKHJvb3ROb2RlLT5mZWF0dXJlcygpLCByb290
Tm9kZS0+aGFzQ2FwdHVyZWRWYXJpYWJsZXMoKSwgbGluZUNvdW50LCB1bmxpbmtlZEVuZENvbHVt
bik7CiAgICAgaWYgKCFzb3VyY2UucHJvdmlkZXIoKS0+c291cmNlVVJMRGlyZWN0aXZlKCkuaXNO
dWxsKCkpCiAgICAgICAgIHVubGlua2VkQ29kZUJsb2NrLT5zZXRTb3VyY2VVUkxEaXJlY3RpdmUo
c291cmNlLnByb3ZpZGVyKCktPnNvdXJjZVVSTERpcmVjdGl2ZSgpKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vbklkZW50aWZpZXJzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25JZGVudGlmaWVycy5jcHAJKHJl
dmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vbklk
ZW50aWZpZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiAgQ29w
eXJpZ2h0IChDKSAyMDAzLCAyMDA3LCAyMDA5LCAyMDEyLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMzMsNyArMzMsNyBA
QCBuYW1lc3BhY2UgSlNDIHsKICNkZWZpbmUgSU5JVElBTElaRV9QUklWQVRFX05BTUUobmFtZSkg
LCBuYW1lIyNQcml2YXRlTmFtZShtX2J1aWx0aW5OYW1lcy0+bmFtZSMjUHJpdmF0ZU5hbWUoKSkK
ICNkZWZpbmUgSU5JVElBTElaRV9TWU1CT0wobmFtZSkgLCBuYW1lIyNTeW1ib2wobV9idWlsdGlu
TmFtZXMtPm5hbWUjI1N5bWJvbCgpKQogCi1Db21tb25JZGVudGlmaWVyczo6Q29tbW9uSWRlbnRp
ZmllcnMoVk0qIHZtKQorQ29tbW9uSWRlbnRpZmllcnM6OkNvbW1vbklkZW50aWZpZXJzKFZNJiB2
bSkKICAgICA6IG51bGxJZGVudGlmaWVyKCkKICAgICAsIGVtcHR5SWRlbnRpZmllcihJZGVudGlm
aWVyOjpFbXB0eUlkZW50aWZpZXIpCiAgICAgLCB1bmRlcnNjb3JlUHJvdG8oSWRlbnRpZmllcjo6
ZnJvbVN0cmluZyh2bSwgIl9fcHJvdG9fXyIpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQ29tbW9uSWRlbnRpZmllcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Db21tb25JZGVudGlmaWVycy5oCShyZXZpc2lvbiAyNDkxMjgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25JZGVudGlmaWVycy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAz
LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKQEAgLTI4Miw3ICsyODIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBDb21tb25J
ZGVudGlmaWVycyB7CiAgICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENvbW1vbklkZW50aWZp
ZXJzKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgcHJpdmF0ZToKLSAgICAgICAgQ29t
bW9uSWRlbnRpZmllcnMoVk0qKTsKKyAgICAgICAgQ29tbW9uSWRlbnRpZmllcnMoVk0mKTsKICAg
ICAgICAgfkNvbW1vbklkZW50aWZpZXJzKCk7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBWTTsKICAg
ICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0
aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1v
blNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcyLDcgKzcy
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICNkZWZpbmUgQkVHSU5fTk9fU0VUX1BDKCkgXAogICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7ICAgICAgXAotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIoJnZtLCBleGVjKTsgXAorICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0s
IGV4ZWMpOyBcCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
IFwKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSkKIApAQCAtMTgwLDcgKzE4MCw3IEBAIFNM
T1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9jYWxsX2FyaXR5Q2hlY2sKICAgICBpZiAoVU5MSUtFTFko
c2xvdHNUb0FkZCA8IDApKSB7CiAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gQ29tbW9u
U2xvd1BhdGhzOjpjb2RlQmxvY2tGcm9tQ2FsbEZyYW1lQ2FsbGVlKGV4ZWMsIENvZGVGb3JDYWxs
KTsKICAgICAgICAgZXhlYy0+Y29udmVydFRvU3RhY2tPdmVyZmxvd0ZyYW1lKHZtLCBjb2RlQmxv
Y2spOwotICAgICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7Cisg
ICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgICAgICBF
cnJvckhhbmRsaW5nU2NvcGUgZXJyb3JTY29wZSh2bSk7CiAgICAgICAgIHRocm93U2NvcGUucmVs
ZWFzZSgpOwogICAgICAgICB0aHJvd0FyaXR5Q2hlY2tTdGFja092ZXJmbG93RXJyb3IoZXhlYywg
dGhyb3dTY29wZSk7CkBAIC0xOTYsNyArMTk2LDcgQEAgU0xPV19QQVRIX0RFQ0woc2xvd19wYXRo
X2NvbnN0cnVjdF9hcml0eQogICAgIGlmIChVTkxJS0VMWShzbG90c1RvQWRkIDwgMCkpIHsKICAg
ICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBDb21tb25TbG93UGF0aHM6OmNvZGVCbG9ja0Zy
b21DYWxsRnJhbWVDYWxsZWUoZXhlYywgQ29kZUZvckNvbnN0cnVjdCk7CiAgICAgICAgIGV4ZWMt
PmNvbnZlcnRUb1N0YWNrT3ZlcmZsb3dGcmFtZSh2bSwgY29kZUJsb2NrKTsKLSAgICAgICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgICAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICAgICAgRXJyb3JIYW5kbGluZ1Njb3Bl
IGVycm9yU2NvcGUodm0pOwogICAgICAgICB0aHJvd0FyaXR5Q2hlY2tTdGFja092ZXJmbG93RXJy
b3IoZXhlYywgdGhyb3dTY29wZSk7CiAgICAgICAgIFJFVFVSTl9UV08oYml0d2lzZV9jYXN0PHZv
aWQqPihzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KDEpKSwgZXhlYyk7CkBAIC0xMDEyLDcgKzEwMTIs
NyBAQCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfdG9faW5kZXhfc3RyaW5nCiAgICAgYXV0byBi
eXRlY29kZSA9IHBjLT5hczxPcFRvSW5kZXhTdHJpbmc+KCk7CiAgICAgSlNWYWx1ZSBpbmRleFZh
bHVlID0gR0VUKGJ5dGVjb2RlLm1faW5kZXgpLmpzVmFsdWUoKTsKICAgICBBU1NFUlQoaW5kZXhW
YWx1ZS5pc1VJbnQzMkFzQW55SW50KCkpOwotICAgIFJFVFVSTihqc1N0cmluZyhleGVjLCBJZGVu
dGlmaWVyOjpmcm9tKGV4ZWMsIGluZGV4VmFsdWUuYXNVSW50MzJBc0FueUludCgpKS5zdHJpbmco
KSkpOworICAgIFJFVFVSTihqc1N0cmluZyh2bSwgSWRlbnRpZmllcjo6ZnJvbSh2bSwgaW5kZXhW
YWx1ZS5hc1VJbnQzMkFzQW55SW50KCkpLnN0cmluZygpKSk7CiB9CiAKIFNMT1dfUEFUSF9ERUNM
KHNsb3dfcGF0aF9wcm9maWxlX3R5cGVfY2xlYXJfbG9nKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ29tcGxldGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQ29tcGxldGlvbi5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbXBsZXRpb24uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00OSw3ICs0OSw3IEBAIG5hbWVzcGFjZSBKU0Mgewogc3RhdGljIGlubGluZSBib29sIGNo
ZWNrU3ludGF4SW50ZXJuYWwoVk0mIHZtLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIFBhcnNl
ckVycm9yJiBlcnJvcikKIHsKICAgICByZXR1cm4gISFwYXJzZTxQcm9ncmFtTm9kZT4oCi0gICAg
ICAgICZ2bSwgc291cmNlLCBJZGVudGlmaWVyKCksIEpTUGFyc2VyQnVpbHRpbk1vZGU6Ok5vdEJ1
aWx0aW4sCisgICAgICAgIHZtLCBzb3VyY2UsIElkZW50aWZpZXIoKSwgSlNQYXJzZXJCdWlsdGlu
TW9kZTo6Tm90QnVpbHRpbiwKICAgICAgICAgSlNQYXJzZXJTdHJpY3RNb2RlOjpOb3RTdHJpY3Qs
IEpTUGFyc2VyU2NyaXB0TW9kZTo6Q2xhc3NpYywgU291cmNlUGFyc2VNb2RlOjpQcm9ncmFtTW9k
ZSwgU3VwZXJCaW5kaW5nOjpOb3ROZWVkZWQsIGVycm9yKTsKIH0KIApAQCAtODEsNyArODEsNyBA
QCBib29sIGNoZWNrTW9kdWxlU3ludGF4KEV4ZWNTdGF0ZSogZXhlYywgCiAgICAgSlNMb2NrSG9s
ZGVyIGxvY2sodm0pOwogICAgIFJFTEVBU0VfQVNTRVJUKHZtLmF0b21TdHJpbmdUYWJsZSgpID09
IFRocmVhZDo6Y3VycmVudCgpLmF0b21TdHJpbmdUYWJsZSgpKTsKICAgICBzdGQ6OnVuaXF1ZV9w
dHI8TW9kdWxlUHJvZ3JhbU5vZGU+IG1vZHVsZVByb2dyYW1Ob2RlID0gcGFyc2U8TW9kdWxlUHJv
Z3JhbU5vZGU+KAotICAgICAgICAmdm0sIHNvdXJjZSwgSWRlbnRpZmllcigpLCBKU1BhcnNlckJ1
aWx0aW5Nb2RlOjpOb3RCdWlsdGluLAorICAgICAgICB2bSwgc291cmNlLCBJZGVudGlmaWVyKCks
IEpTUGFyc2VyQnVpbHRpbk1vZGU6Ok5vdEJ1aWx0aW4sCiAgICAgICAgIEpTUGFyc2VyU3RyaWN0
TW9kZTo6U3RyaWN0LCBKU1BhcnNlclNjcmlwdE1vZGU6Ok1vZHVsZSwgU291cmNlUGFyc2VNb2Rl
OjpNb2R1bGVBbmFseXplTW9kZSwgU3VwZXJCaW5kaW5nOjpOb3ROZWVkZWQsIGVycm9yKTsKICAg
ICBpZiAoIW1vZHVsZVByb2dyYW1Ob2RlKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0yMTks
NyArMjE5LDcgQEAgSlNJbnRlcm5hbFByb21pc2UqIGxvYWRBbmRFdmFsdWF0ZU1vZHVsZQogICAg
IFJFTEVBU0VfQVNTRVJUKHZtLmF0b21TdHJpbmdUYWJsZSgpID09IFRocmVhZDo6Y3VycmVudCgp
LmF0b21TdHJpbmdUYWJsZSgpKTsKICAgICBSRUxFQVNFX0FTU0VSVCghdm0uaXNDb2xsZWN0b3JC
dXN5T25DdXJyZW50VGhyZWFkKCkpOwogCi0gICAgcmV0dXJuIHZtLnZtRW50cnlHbG9iYWxPYmpl
Y3QoZXhlYyktPm1vZHVsZUxvYWRlcigpLT5sb2FkQW5kRXZhbHVhdGVNb2R1bGUoZXhlYywgaWRl
bnRpZmllclRvSlNWYWx1ZSh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCBtb2R1bGVO
YW1lKSksIHBhcmFtZXRlcnMsIHNjcmlwdEZldGNoZXIpOworICAgIHJldHVybiB2bS52bUVudHJ5
R2xvYmFsT2JqZWN0KGV4ZWMpLT5tb2R1bGVMb2FkZXIoKS0+bG9hZEFuZEV2YWx1YXRlTW9kdWxl
KGV4ZWMsIGlkZW50aWZpZXJUb0pTVmFsdWUodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0s
IG1vZHVsZU5hbWUpKSwgcGFyYW1ldGVycywgc2NyaXB0RmV0Y2hlcik7CiB9CiAKIEpTSW50ZXJu
YWxQcm9taXNlKiBsb2FkQW5kRXZhbHVhdGVNb2R1bGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBT
b3VyY2VDb2RlJiBzb3VyY2UsIEpTVmFsdWUgc2NyaXB0RmV0Y2hlcikKQEAgLTI0OCw3ICsyNDgs
NyBAQCBKU0ludGVybmFsUHJvbWlzZSogbG9hZE1vZHVsZShFeGVjU3RhdGUqCiAgICAgUkVMRUFT
RV9BU1NFUlQodm0uYXRvbVN0cmluZ1RhYmxlKCkgPT0gVGhyZWFkOjpjdXJyZW50KCkuYXRvbVN0
cmluZ1RhYmxlKCkpOwogICAgIFJFTEVBU0VfQVNTRVJUKCF2bS5pc0NvbGxlY3RvckJ1c3lPbkN1
cnJlbnRUaHJlYWQoKSk7CiAKLSAgICByZXR1cm4gdm0udm1FbnRyeUdsb2JhbE9iamVjdChleGVj
KS0+bW9kdWxlTG9hZGVyKCktPmxvYWRNb2R1bGUoZXhlYywgaWRlbnRpZmllclRvSlNWYWx1ZSh2
bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCBtb2R1bGVOYW1lKSksIHBhcmFtZXRlcnMs
IHNjcmlwdEZldGNoZXIpOworICAgIHJldHVybiB2bS52bUVudHJ5R2xvYmFsT2JqZWN0KGV4ZWMp
LT5tb2R1bGVMb2FkZXIoKS0+bG9hZE1vZHVsZShleGVjLCBpZGVudGlmaWVyVG9KU1ZhbHVlKHZt
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBtb2R1bGVOYW1lKSksIHBhcmFtZXRlcnMsIHNj
cmlwdEZldGNoZXIpOwogfQogCiBKU0ludGVybmFsUHJvbWlzZSogbG9hZE1vZHVsZShFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgSlNWYWx1ZSBzY3JpcHRGZXRjaGVy
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZUNvbnN0cnVjdG9yLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlQ29uc3Ry
dWN0b3IuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9EYXRlQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAog
LyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUu
b3JnKQotICogIENvcHlyaWdodCAoQykgMjAwNC0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC0xNjAsNyArMTYwLDcgQEAgc3Rh
dGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbAogICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CiAgICAgR3JlZ29yaWFuRGF0ZVRpbWUgdHM7CiAgICAgbXNUb0dyZWdvcmlhbkRhdGVU
aW1lKHZtLCBXYWxsVGltZTo6bm93KCkuc2Vjb25kc1NpbmNlRXBvY2goKS5taWxsaXNlY29uZHMo
KSwgV1RGOjpMb2NhbFRpbWUsIHRzKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTm9u
dHJpdmlhbFN0cmluZygmdm0sIGZvcm1hdERhdGVUaW1lKHRzLCBEYXRlVGltZUZvcm1hdERhdGVB
bmRUaW1lLCBmYWxzZSkpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTm9udHJpdmlh
bFN0cmluZyh2bSwgZm9ybWF0RGF0ZVRpbWUodHMsIERhdGVUaW1lRm9ybWF0RGF0ZUFuZFRpbWUs
IGZhbHNlKSkpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQYXJzZShF
eGVjU3RhdGUqIGV4ZWMpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRl
UHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9EYXRlUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRGF0ZVByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiAr
MSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9y
dGVuQGtkZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMDgsIDIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwNC0yMDE5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkg
VG9yY2ggTW9iaWxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAgQ29weXJpZ2h0IChD
KSAyMDEwIFRvcmNoIE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCkBAIC0xNDQsNiArMTQ0LDcgQEAgc3RhdGljIENGRGF0ZUZvcm1hdHRlclN0eWxlIHN0
eWxlRnJvbUFyZwogCiBzdGF0aWMgSlNDZWxsKiBmb3JtYXRMb2NhbGVEYXRlKEV4ZWNTdGF0ZSog
ZXhlYywgRGF0ZUluc3RhbmNlKiwgZG91YmxlIHRpbWVJbk1pbGxpc2Vjb25kcywgTG9jYWxlRGF0
ZVRpbWVGb3JtYXQgZm9ybWF0KQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgQ0ZE
YXRlRm9ybWF0dGVyU3R5bGUgZGF0ZVN0eWxlID0gKGZvcm1hdCAhPSBMb2NhbGVUaW1lID8ga0NG
RGF0ZUZvcm1hdHRlckxvbmdTdHlsZSA6IGtDRkRhdGVGb3JtYXR0ZXJOb1N0eWxlKTsKICAgICBD
RkRhdGVGb3JtYXR0ZXJTdHlsZSB0aW1lU3R5bGUgPSAoZm9ybWF0ICE9IExvY2FsZURhdGUgPyBr
Q0ZEYXRlRm9ybWF0dGVyTG9uZ1N0eWxlIDoga0NGRGF0ZUZvcm1hdHRlck5vU3R5bGUpOwogCkBA
IC0xNjcsMzUgKzE2OCwzNyBAQCBzdGF0aWMgSlNDZWxsKiBmb3JtYXRMb2NhbGVEYXRlKEV4ZWNT
dGF0CiAgICAgYXV0byBmb3JtYXR0ZXIgPSBhZG9wdENGKENGRGF0ZUZvcm1hdHRlckNyZWF0ZShr
Q0ZBbGxvY2F0b3JEZWZhdWx0LCBhZG9wdENGKENGTG9jYWxlQ29weUN1cnJlbnQoKSkuZ2V0KCks
IGRhdGVTdHlsZSwgdGltZVN0eWxlKSk7CiAgICAgaWYgKHVzZUN1c3RvbUZvcm1hdCkKICAgICAg
ICAgQ0ZEYXRlRm9ybWF0dGVyU2V0Rm9ybWF0KGZvcm1hdHRlci5nZXQoKSwgY3VzdG9tRm9ybWF0
U3RyaW5nLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCkpOwotICAgIHJldHVybiBqc05vbnRyaXZpYWxT
dHJpbmcoZXhlYywgYWRvcHRDRihDRkRhdGVGb3JtYXR0ZXJDcmVhdGVTdHJpbmdXaXRoQWJzb2x1
dGVUaW1lKGtDRkFsbG9jYXRvckRlZmF1bHQsIGZvcm1hdHRlci5nZXQoKSwgYWJzb2x1dGVUaW1l
KSkuZ2V0KCkpOworICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcodm0sIGFkb3B0Q0YoQ0ZE
YXRlRm9ybWF0dGVyQ3JlYXRlU3RyaW5nV2l0aEFic29sdXRlVGltZShrQ0ZBbGxvY2F0b3JEZWZh
dWx0LCBmb3JtYXR0ZXIuZ2V0KCksIGFic29sdXRlVGltZSkpLmdldCgpKTsKIH0KIAogI2VsaWYg
IVVDT05GSUdfTk9fRk9STUFUVElORwogCiBzdGF0aWMgSlNDZWxsKiBmb3JtYXRMb2NhbGVEYXRl
KEV4ZWNTdGF0ZSogZXhlYywgRGF0ZUluc3RhbmNlKiwgZG91YmxlIHRpbWVJbk1pbGxpc2Vjb25k
cywgTG9jYWxlRGF0ZVRpbWVGb3JtYXQgZm9ybWF0KQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7CiAgICAgVURhdGVGb3JtYXRTdHlsZSB0aW1lU3R5bGUgPSAoZm9ybWF0ICE9IExvY2FsZURh
dGUgPyBVREFUX0xPTkcgOiBVREFUX05PTkUpOwogICAgIFVEYXRlRm9ybWF0U3R5bGUgZGF0ZVN0
eWxlID0gKGZvcm1hdCAhPSBMb2NhbGVUaW1lID8gVURBVF9MT05HIDogVURBVF9OT05FKTsKIAog
ICAgIFVFcnJvckNvZGUgc3RhdHVzID0gVV9aRVJPX0VSUk9SOwogICAgIFVEYXRlRm9ybWF0KiBk
ZiA9IHVkYXRfb3Blbih0aW1lU3R5bGUsIGRhdGVTdHlsZSwgMCwgMCwgLTEsIDAsIDAsICZzdGF0
dXMpOwogICAgIGlmICghZGYpCi0gICAgICAgIHJldHVybiBqc0VtcHR5U3RyaW5nKGV4ZWMpOwor
ICAgICAgICByZXR1cm4ganNFbXB0eVN0cmluZyh2bSk7CiAKICAgICBVQ2hhciBidWZmZXJbMTI4
XTsKICAgICBpbnQzMl90IGxlbmd0aDsKICAgICBsZW5ndGggPSB1ZGF0X2Zvcm1hdChkZiwgdGlt
ZUluTWlsbGlzZWNvbmRzLCBidWZmZXIsIDEyOCwgMCwgJnN0YXR1cyk7CiAgICAgdWRhdF9jbG9z
ZShkZik7CiAgICAgaWYgKHN0YXR1cyAhPSBVX1pFUk9fRVJST1IpCi0gICAgICAgIHJldHVybiBq
c0VtcHR5U3RyaW5nKGV4ZWMpOworICAgICAgICByZXR1cm4ganNFbXB0eVN0cmluZyh2bSk7CiAK
LSAgICByZXR1cm4ganNOb250cml2aWFsU3RyaW5nKGV4ZWMsIFN0cmluZyhidWZmZXIsIGxlbmd0
aCkpOworICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcodm0sIFN0cmluZyhidWZmZXIsIGxl
bmd0aCkpOwogfQogCiAjZWxzZQogCiBzdGF0aWMgSlNDZWxsKiBmb3JtYXRMb2NhbGVEYXRlKEV4
ZWNTdGF0ZSogZXhlYywgY29uc3QgR3JlZ29yaWFuRGF0ZVRpbWUmIGdkdCwgTG9jYWxlRGF0ZVRp
bWVGb3JtYXQgZm9ybWF0KQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAjaWYgT1MoV0lO
RE9XUykKICAgICBTWVNURU1USU1FIHN5c3RlbVRpbWU7CiAgICAgbWVtc2V0KCZzeXN0ZW1UaW1l
LCAwLCBzaXplb2Yoc3lzdGVtVGltZSkpOwpAQCAtMjMwLDcgKzIzMyw3IEBAIHN0YXRpYyBKU0Nl
bGwqIGZvcm1hdExvY2FsZURhdGUoRXhlY1N0YXQKICAgICBpZiAobGVuZ3RoKQogICAgICAgICBs
ZW5ndGgtLTsKIAotICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywgU3RyaW5nKGJ1
ZmZlci5kYXRhKCksIGxlbmd0aCkpOworICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcodm0s
IFN0cmluZyhidWZmZXIuZGF0YSgpLCBsZW5ndGgpKTsKIAogI2Vsc2UgLy8gT1MoV0lORE9XUykK
IApAQCAtMjY5LDcgKzI3Miw3IEBAIHN0YXRpYyBKU0NlbGwqIGZvcm1hdExvY2FsZURhdGUoRXhl
Y1N0YXQKICNlbmRpZgogCiAgICAgaWYgKHJldCA9PSAwKQotICAgICAgICByZXR1cm4ganNFbXB0
eVN0cmluZyhleGVjKTsKKyAgICAgICAgcmV0dXJuIGpzRW1wdHlTdHJpbmcodm0pOwogCiAgICAg
Ly8gQ29weSBvcmlnaW5hbCBpbnRvIHRoZSBidWZmZXIKICAgICBpZiAoeWVhck5lZWRzT2Zmc2V0
ICYmIGZvcm1hdCAhPSBMb2NhbGVUaW1lKSB7CkBAIC0yOTksMTkgKzMwMiwyMCBAQCBzdGF0aWMg
SlNDZWxsKiBmb3JtYXRMb2NhbGVEYXRlKEV4ZWNTdGF0CiAgICAgaWYgKGxlbmd0aCAhPSBzdGF0
aWNfY2FzdDxzaXplX3Q+KC0xKSkgewogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxl
bmd0aDsgKytpKQogICAgICAgICAgICAgYnVmZmVyW2ldID0gc3RhdGljX2Nhc3Q8VUNoYXI+KHRl
bXBidWZmZXJbaV0pOwotICAgICAgICByZXR1cm4ganNOb250cml2aWFsU3RyaW5nKGV4ZWMsIFN0
cmluZyhidWZmZXIsIGxlbmd0aCkpOworICAgICAgICByZXR1cm4ganNOb250cml2aWFsU3RyaW5n
KHZtLCBTdHJpbmcoYnVmZmVyLCBsZW5ndGgpKTsKICAgICB9CiAjZW5kaWYKIAotICAgIHJldHVy
biBqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywgdGltZWJ1ZmZlcik7CisgICAgcmV0dXJuIGpzTm9u
dHJpdmlhbFN0cmluZyh2bSwgdGltZWJ1ZmZlcik7CiAjZW5kaWYgLy8gT1MoV0lORE9XUykKIH0K
IAogc3RhdGljIEpTQ2VsbCogZm9ybWF0TG9jYWxlRGF0ZShFeGVjU3RhdGUqIGV4ZWMsIERhdGVJ
bnN0YW5jZSogZGF0ZU9iamVjdCwgZG91YmxlLCBMb2NhbGVEYXRlVGltZUZvcm1hdCBmb3JtYXQp
CiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBjb25zdCBHcmVnb3JpYW5EYXRlVGlt
ZSogZ3JlZ29yaWFuRGF0ZVRpbWUgPSBkYXRlT2JqZWN0LT5ncmVnb3JpYW5EYXRlVGltZShleGVj
KTsKICAgICBpZiAoIWdyZWdvcmlhbkRhdGVUaW1lKQotICAgICAgICByZXR1cm4ganNOb250cml2
aWFsU3RyaW5nKGV4ZWMsICJJbnZhbGlkIERhdGUiX3MpOworICAgICAgICByZXR1cm4ganNOb250
cml2aWFsU3RyaW5nKHZtLCAiSW52YWxpZCBEYXRlIl9zKTsKICAgICByZXR1cm4gZm9ybWF0TG9j
YWxlRGF0ZShleGVjLCAqZ3JlZ29yaWFuRGF0ZVRpbWUsIGZvcm1hdCk7CiB9CiAKQEAgLTMzMCw5
ICszMzQsOSBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgZm9ybWF0ZURhdGVJbnN0YW5jCiAgICAg
ICAgID8gdGhpc0RhdGVPYmotPmdyZWdvcmlhbkRhdGVUaW1lVVRDKGV4ZWMpCiAgICAgICAgIDog
dGhpc0RhdGVPYmotPmdyZWdvcmlhbkRhdGVUaW1lKGV4ZWMpOwogICAgIGlmICghZ3JlZ29yaWFu
RGF0ZVRpbWUpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOb250cml2aWFsU3Ry
aW5nKGV4ZWMsIFN0cmluZygiSW52YWxpZCBEYXRlIl9zKSkpOworICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzTm9udHJpdmlhbFN0cmluZyh2bSwgU3RyaW5nKCJJbnZhbGlkIERhdGUi
X3MpKSk7CiAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTm9udHJpdmlhbFN0cmluZyhl
eGVjLCBmb3JtYXREYXRlVGltZSgqZ3JlZ29yaWFuRGF0ZVRpbWUsIGZvcm1hdCwgYXNVVENWYXJp
YW50KSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOb250cml2aWFsU3RyaW5nKHZt
LCBmb3JtYXREYXRlVGltZSgqZ3JlZ29yaWFuRGF0ZVRpbWUsIGZvcm1hdCwgYXNVVENWYXJpYW50
KSkpOwogfQogCiAvLyBDb252ZXJ0cyBhIGxpc3Qgb2YgYXJndW1lbnRzIHNlbnQgdG8gYSBEYXRl
IG1lbWJlciBmdW5jdGlvbiBpbnRvIG1pbGxpc2Vjb25kcywgdXBkYXRpbmcKQEAgLTUwMiwxMCAr
NTA2LDEwIEBAIHZvaWQgRGF0ZVByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHYKICAgICBC
YXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkp
KTsKIAotICAgIElkZW50aWZpZXIgdG9VVENTdHJpbmdOYW1lID0gSWRlbnRpZmllcjo6ZnJvbVN0
cmluZygmdm0sICJ0b1VUQ1N0cmluZyJfcyk7CisgICAgSWRlbnRpZmllciB0b1VUQ1N0cmluZ05h
bWUgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAidG9VVENTdHJpbmciX3MpOwogICAgIEpT
RnVuY3Rpb24qIHRvVVRDU3RyaW5nRnVuY3Rpb24gPSBKU0Z1bmN0aW9uOjpjcmVhdGUodm0sIGds
b2JhbE9iamVjdCwgMCwgdG9VVENTdHJpbmdOYW1lLnN0cmluZygpLCBkYXRlUHJvdG9GdW5jVG9V
VENTdHJpbmcpOwogICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB0b1VUQ1N0cmlu
Z05hbWUsIHRvVVRDU3RyaW5nRnVuY3Rpb24sIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0
eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKLSAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2
bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJ0b0dNVFN0cmluZyJfcyksIHRvVVRDU3Ry
aW5nRnVuY3Rpb24sIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9u
dEVudW0pKTsKKyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZyh2bSwgInRvR01UU3RyaW5nIl9zKSwgdG9VVENTdHJpbmdGdW5jdGlvbiwgc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOwogCiAjaWYg
RU5BQkxFKElOVEwpCiAgICAgSlNDX0JVSUxUSU5fRlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lUSU9O
KCJ0b0xvY2FsZVN0cmluZyIsIGRhdGVQcm90b3R5cGVUb0xvY2FsZVN0cmluZ0NvZGVHZW5lcmF0
b3IsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsK
QEAgLTU0Nyw3ICs1NTEsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90
b0Z1CiAKICAgICBjb25zdCBHcmVnb3JpYW5EYXRlVGltZSogZ3JlZ29yaWFuRGF0ZVRpbWUgPSB0
aGlzRGF0ZU9iai0+Z3JlZ29yaWFuRGF0ZVRpbWVVVEMoZXhlYyk7CiAgICAgaWYgKCFncmVnb3Jp
YW5EYXRlVGltZSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc05vbnRyaXZpYWxT
dHJpbmcoZXhlYywgU3RyaW5nKCJJbnZhbGlkIERhdGUiX3MpKSk7CisgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNOb250cml2aWFsU3RyaW5nKHZtLCBTdHJpbmcoIkludmFsaWQgRGF0
ZSJfcykpKTsKICAgICAvLyBNYXhpbXVtIGFtb3VudCBvZiBzcGFjZSB3ZSBuZWVkIGluIGJ1ZmZl
cjogNyAobWF4LiBkaWdpdHMgaW4geWVhcikgKyAyICogNSAoMiBjaGFyYWN0ZXJzIGVhY2ggZm9y
IG1vbnRoLCBkYXksIGhvdXIsIG1pbnV0ZSwgc2Vjb25kKSArIDQgKC4gKyAzIGRpZ2l0cyBmb3Ig
bWlsbGlzZWNvbmRzKQogICAgIC8vIDYgZm9yIGZvcm1hdHRpbmcgYW5kIG9uZSBmb3IgbnVsbCB0
ZXJtaW5hdGlvbiA9IDI4LiBXZSBhZGQgb25lIGV4dHJhIGNoYXJhY3RlciB0byBhbGxvdyB1cyB0
byBmb3JjZSBudWxsIHRlcm1pbmF0aW9uLgogICAgIGNoYXIgYnVmZmVyWzI4XTsKQEAgLTU2NCw5
ICs1NjgsOSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1CiAKICAg
ICBBU1NFUlQoY2hhcmFjdGVyc1dyaXR0ZW4gPiAwICYmIHN0YXRpY19jYXN0PHVuc2lnbmVkPihj
aGFyYWN0ZXJzV3JpdHRlbikgPCBzaXplb2YoYnVmZmVyKSk7CiAgICAgaWYgKHN0YXRpY19jYXN0
PHVuc2lnbmVkPihjaGFyYWN0ZXJzV3JpdHRlbikgPj0gc2l6ZW9mKGJ1ZmZlcikpCi0gICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNFbXB0eVN0cmluZyhleGVjKSk7CisgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNFbXB0eVN0cmluZyh2bSkpOwogCi0gICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywgU3RyaW5nKGJ1ZmZlciwgY2hh
cmFjdGVyc1dyaXR0ZW4pKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc05vbnRyaXZp
YWxTdHJpbmcodm0sIFN0cmluZyhidWZmZXIsIGNoYXJhY3RlcnNXcml0dGVuKSkpOwogfQogCiBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNUb0RhdGVTdHJpbmcoRXhl
Y1N0YXRlKiBleGVjKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3Iu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yLmNw
cAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJy
b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjYsOSArMjI2LDkgQEAgYm9vbCBhZGRFcnJvcklu
Zm8oVk0mIHZtLCBWZWN0b3I8U3RhY2tGcgogICAgICAgICBvYmotPnB1dERpcmVjdCh2bSwgdm0u
cHJvcGVydHlOYW1lcy0+bGluZSwganNOdW1iZXIobGluZSkpOwogICAgICAgICBvYmotPnB1dERp
cmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+Y29sdW1uLCBqc051bWJlcihjb2x1bW4pKTsKICAg
ICAgICAgaWYgKCFzb3VyY2VVUkwuaXNFbXB0eSgpKQotICAgICAgICAgICAgb2JqLT5wdXREaXJl
Y3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnNvdXJjZVVSTCwganNTdHJpbmcoJnZtLCBzb3VyY2VV
UkwpKTsKKyAgICAgICAgICAgIG9iai0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5z
b3VyY2VVUkwsIGpzU3RyaW5nKHZtLCBzb3VyY2VVUkwpKTsKIAotICAgICAgICBvYmotPnB1dERp
cmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+c3RhY2ssIGpzU3RyaW5nKCZ2bSwgSW50ZXJwcmV0
ZXI6OnN0YWNrVHJhY2VBc1N0cmluZyh2bSwgKnN0YWNrVHJhY2UpKSwgc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOworICAgICAgICBvYmotPnB1dERp
cmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+c3RhY2ssIGpzU3RyaW5nKHZtLCBJbnRlcnByZXRl
cjo6c3RhY2tUcmFjZUFzU3RyaW5nKHZtLCAqc3RhY2tUcmFjZSkpLCBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7CiAKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgfQpAQCAtMjY1LDcgKzI2NSw3IEBAIEpTT2JqZWN0KiBhZGRFcnJvckluZm8oQ2Fs
bEZyYW1lKiBjYWxsRnIKICAgICBpZiAobGluZSAhPSAtMSkKICAgICAgICAgZXJyb3ItPnB1dERp
cmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGluZSwganNOdW1iZXIobGluZSkpOwogICAgIGlm
ICghc291cmNlVVJMLmlzTnVsbCgpKQotICAgICAgICBlcnJvci0+cHV0RGlyZWN0KHZtLCB2bS5w
cm9wZXJ0eU5hbWVzLT5zb3VyY2VVUkwsIGpzU3RyaW5nKCZ2bSwgc291cmNlVVJMKSk7CisgICAg
ICAgIGVycm9yLT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnNvdXJjZVVSTCwganNT
dHJpbmcodm0sIHNvdXJjZVVSTCkpOwogICAgIHJldHVybiBlcnJvcjsKIH0KIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JJbnN0YW5jZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JJbnN0YW5jZS5jcHAJKHJldmlz
aW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9ySW5zdGFu
Y2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQg
KEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQotICogIENvcHlyaWdo
dCAoQykgMjAwMy0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5
cmlnaHQgKEMpIDIwMDMtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljCkBAIC04MCw4ICs4MCw4IEBAIHN0YXRpYyB2b2lkIGFwcGVuZFNvdXJj
ZVRvRXJyb3IoQ2FsbEZyYW0KICAgICBpZiAoIWV4cHJlc3Npb25TdG9wIHx8IGV4cHJlc3Npb25T
dGFydCA+IHN0YXRpY19jYXN0PGludD4oc291cmNlU3RyaW5nLmxlbmd0aCgpKSkKICAgICAgICAg
cmV0dXJuOwogICAgIAotICAgIFZNKiB2bSA9ICZjYWxsRnJhbWUtPnZtKCk7Ci0gICAgSlNWYWx1
ZSBqc01lc3NhZ2UgPSBleGNlcHRpb24tPmdldERpcmVjdCgqdm0sIHZtLT5wcm9wZXJ0eU5hbWVz
LT5tZXNzYWdlKTsKKyAgICBWTSYgdm0gPSBjYWxsRnJhbWUtPnZtKCk7CisgICAgSlNWYWx1ZSBq
c01lc3NhZ2UgPSBleGNlcHRpb24tPmdldERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bWVz
c2FnZSk7CiAgICAgaWYgKCFqc01lc3NhZ2UgfHwgIWpzTWVzc2FnZS5pc1N0cmluZygpKQogICAg
ICAgICByZXR1cm47CiAgICAgCkBAIC0xMDUsNyArMTA1LDcgQEAgc3RhdGljIHZvaWQgYXBwZW5k
U291cmNlVG9FcnJvcihDYWxsRnJhbQogICAgICAgICAgICAgc3RvcC0tOwogICAgICAgICBtZXNz
YWdlID0gYXBwZW5kZXIobWVzc2FnZSwgY29kZUJsb2NrLT5zb3VyY2UoKS5wcm92aWRlcigpLT5n
ZXRSYW5nZShzdGFydCwgc3RvcCkudG9TdHJpbmcoKSwgdHlwZSwgRXJyb3JJbnN0YW5jZTo6Rm91
bmRBcHByb3hpbWF0ZVNvdXJjZSk7CiAgICAgfQotICAgIGV4Y2VwdGlvbi0+cHV0RGlyZWN0KCp2
bSwgdm0tPnByb3BlcnR5TmFtZXMtPm1lc3NhZ2UsIGpzU3RyaW5nKHZtLCBtZXNzYWdlKSk7Cisg
ICAgZXhjZXB0aW9uLT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm1lc3NhZ2UsIGpz
U3RyaW5nKHZtLCBtZXNzYWdlKSk7CiAKIH0KIApAQCAtMTE0LDcgKzExNCw3IEBAIHZvaWQgRXJy
b3JJbnN0YW5jZTo6ZmluaXNoQ3JlYXRpb24oRXhlY1MKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlv
bih2bSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKICAgICBpZiAoIW1lc3Nh
Z2UuaXNOdWxsKCkpCi0gICAgICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bWVz
c2FnZSwganNTdHJpbmcoJnZtLCBtZXNzYWdlKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3Bl
cnR5QXR0cmlidXRlOjpEb250RW51bSkpOworICAgICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3Bl
cnR5TmFtZXMtPm1lc3NhZ2UsIGpzU3RyaW5nKHZtLCBtZXNzYWdlKSwgc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOwogCiAgICAgc3RkOjp1bmlxdWVf
cHRyPFZlY3RvcjxTdGFja0ZyYW1lPj4gc3RhY2tUcmFjZSA9IGdldFN0YWNrVHJhY2UoZXhlYywg
dm0sIHRoaXMsIHVzZUN1cnJlbnRGcmFtZSk7CiAgICAgewpAQCAtMjQxLDkgKzI0MSw5IEBAIGJv
b2wgRXJyb3JJbnN0YW5jZTo6bWF0ZXJpYWxpemVFcnJvckluZm8KICAgICAgICAgcHV0RGlyZWN0
KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5saW5lLCBqc051bWJlcihtX2xpbmUpKTsKICAgICAgICAg
cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5jb2x1bW4sIGpzTnVtYmVyKG1fY29sdW1u
KSk7CiAgICAgICAgIGlmICghbV9zb3VyY2VVUkwuaXNFbXB0eSgpKQotICAgICAgICAgICAgcHV0
RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5zb3VyY2VVUkwsIGpzU3RyaW5nKCZ2bSwgV1RG
TW92ZShtX3NvdXJjZVVSTCkpKTsKKyAgICAgICAgICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVy
dHlOYW1lcy0+c291cmNlVVJMLCBqc1N0cmluZyh2bSwgV1RGTW92ZShtX3NvdXJjZVVSTCkpKTsK
IAotICAgICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnN0YWNrLCBqc1N0cmlu
Zygmdm0sIFdURk1vdmUobV9zdGFja1N0cmluZykpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJv
cGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7CisgICAgICAgIHB1dERpcmVjdCh2bSwgdm0ucHJv
cGVydHlOYW1lcy0+c3RhY2ssIGpzU3RyaW5nKHZtLCBXVEZNb3ZlKG1fc3RhY2tTdHJpbmcpKSwg
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOwogICAg
IH0KIAogICAgIG1fZXJyb3JJbmZvTWF0ZXJpYWxpemVkID0gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvclByb3RvdHlwZS5jcHAJKHJldmlzaW9u
IDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yUHJvdG90eXBl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChD
KSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmlnaHQg
KEMpIDIwMDMsIDIwMDgsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
IENvcHlyaWdodCAoQykgMjAwMy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTY0LDggKzY0LDggQEAgdm9pZCBFcnJvclByb3RvdHlw
ZTo6ZmluaXNoQ3JlYXRpb24oVk0mIAogewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsK
ICAgICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOwotICAgIHB1dERpcmVjdFdpdGhvdXRU
cmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc1N0cmluZygmdm0sIG5hbWUp
LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7Ci0g
ICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPm1lc3Nh
Z2UsIGpzRW1wdHlTdHJpbmcoJnZtKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0
cmlidXRlOjpEb250RW51bSkpOworICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2
bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc1N0cmluZyh2bSwgbmFtZSksIHN0YXRpY19jYXN0PHVu
c2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKKyAgICBwdXREaXJlY3RXaXRo
b3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+bWVzc2FnZSwganNFbXB0eVN0cmlu
Zyh2bSksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0p
KTsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEZ1bmN0aW9ucyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTEyMCwxMSArMTIwLDExIEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZXJyb3JQcm90b0YKIAogICAgIC8vIDguIElmIG5hbWUgaXMgdGhl
IGVtcHR5IFN0cmluZywgcmV0dXJuIG1zZy4KICAgICBpZiAoIW5hbWVTdHJpbmcubGVuZ3RoKCkp
Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUobWVzc2FnZS5pc1N0cmluZygpID8gbWVz
c2FnZSA6IGpzU3RyaW5nKGV4ZWMsIG1lc3NhZ2VTdHJpbmcpKTsKKyAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShtZXNzYWdlLmlzU3RyaW5nKCkgPyBtZXNzYWdlIDoganNTdHJpbmcodm0s
IG1lc3NhZ2VTdHJpbmcpKTsKIAogICAgIC8vIDkuIElmIG1zZyBpcyB0aGUgZW1wdHkgU3RyaW5n
LCByZXR1cm4gbmFtZS4KICAgICBpZiAoIW1lc3NhZ2VTdHJpbmcubGVuZ3RoKCkpCi0gICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUobmFtZS5pc1N0cmluZygpID8gbmFtZSA6IGpzU3RyaW5n
KGV4ZWMsIG5hbWVTdHJpbmcpKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShuYW1l
LmlzU3RyaW5nKCkgPyBuYW1lIDoganNTdHJpbmcodm0sIG5hbWVTdHJpbmcpKTsKIAogICAgIC8v
IDEwLiBSZXR1cm4gdGhlIHJlc3VsdCBvZiBjb25jYXRlbmF0aW5nIG5hbWUsICI6IiwgYSBzaW5n
bGUgc3BhY2UgY2hhcmFjdGVyLCBhbmQgbXNnLgogICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29w
ZSwgSlNWYWx1ZTo6ZW5jb2RlKGpzTWFrZU5vbnRyaXZpYWxTdHJpbmcoZXhlYywgbmFtZVN0cmlu
ZywgIjogIiwgbWVzc2FnZVN0cmluZykpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTAsNyArNTAsNyBAQCBjb25zdCBDbGFzc0luZm8gVGVybWluYXRlZEV4
ZWN1dGlvbkVycm9yCiBKU1ZhbHVlIFRlcm1pbmF0ZWRFeGVjdXRpb25FcnJvcjo6ZGVmYXVsdFZh
bHVlKGNvbnN0IEpTT2JqZWN0KiwgRXhlY1N0YXRlKiBleGVjLCBQcmVmZXJyZWRQcmltaXRpdmVU
eXBlIGhpbnQpCiB7CiAgICAgaWYgKGhpbnQgPT0gUHJlZmVyU3RyaW5nKQotICAgICAgICByZXR1
cm4ganNOb250cml2aWFsU3RyaW5nKGV4ZWMsIFN0cmluZygiSmF2YVNjcmlwdCBleGVjdXRpb24g
dGVybWluYXRlZC4iX3MpKTsKKyAgICAgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyhleGVj
LT52bSgpLCBTdHJpbmcoIkphdmFTY3JpcHQgZXhlY3V0aW9uIHRlcm1pbmF0ZWQuIl9zKSk7CiAg
ICAgcmV0dXJuIEpTVmFsdWUoUE5hTik7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0Z1bmN0aW9uUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvblByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDI0OTEy
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUHJvdG90eXBlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAx
OTk5LTIwMDEgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmlnaHQgKEMp
IDIwMDMtMjAwOSwgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
ICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC04OSw3ICs4OSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgZnVuY3Rpb25Qcm8KIAogICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4
ZWN1dGFibGUgPSBmdW5jdGlvbi0+anNFeGVjdXRhYmxlKCk7CiAgICAgICAgIGlmIChleGVjdXRh
YmxlLT5pc0NsYXNzKCkpCi0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3Ry
aW5nKGV4ZWMsIGV4ZWN1dGFibGUtPmNsYXNzU291cmNlKCkudmlldygpLnRvU3RyaW5nKCkpKTsK
KyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcodm0sIGV4ZWN1dGFi
bGUtPmNsYXNzU291cmNlKCkudmlldygpLnRvU3RyaW5nKCkpKTsKIAogICAgICAgICBTdHJpbmcg
ZnVuY3Rpb25IZWFkZXI7CiAgICAgICAgIHN3aXRjaCAoZXhlY3V0YWJsZS0+cGFyc2VNb2RlKCkp
IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUmFyZURhdGEu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9u
UmFyZURhdGEuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9GdW5jdGlvblJhcmVEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTg4LDcgKzg4
LDcgQEAgdm9pZCBGdW5jdGlvblJhcmVEYXRhOjpjbGVhcihjb25zdCBjaGFyKgogewogICAgIG1f
b2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuY2xlYXIoKTsKICAgICBtX2ludGVybmFsRnVuY3Rpb25B
bGxvY2F0aW9uUHJvZmlsZS5jbGVhcigpOwotICAgIG1fb2JqZWN0QWxsb2NhdGlvblByb2ZpbGVX
YXRjaHBvaW50LmZpcmVBbGwoKnZtKCksIHJlYXNvbik7CisgICAgbV9vYmplY3RBbGxvY2F0aW9u
UHJvZmlsZVdhdGNocG9pbnQuZmlyZUFsbCh2bSgpLCByZWFzb24pOwogfQogCiB2b2lkIEZ1bmN0
aW9uUmFyZURhdGE6OkFsbG9jYXRpb25Qcm9maWxlQ2xlYXJpbmdXYXRjaHBvaW50OjpmaXJlSW50
ZXJuYWwoVk0mLCBjb25zdCBGaXJlRGV0YWlsJikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0dlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZS5j
cHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dl
bmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYg
QEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTUgWXVzdWtlIFN1enVraSA8dXRhdGFuZS50ZWFA
Z21haWwuY29tPi4KKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUxLDcgKzUyLDcg
QEAgdm9pZCBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZTo6ZmluaXNoQwogICAgIEJhc2U6OmZp
bmlzaENyZWF0aW9uKHZtKTsKICAgICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOwogICAg
IHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgs
IGpzTnVtYmVyKDApLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBQcm9wZXJ0eUF0dHJp
YnV0ZTo6RG9udEVudW0pOwotICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5w
cm9wZXJ0eU5hbWVzLT50b1N0cmluZ1RhZ1N5bWJvbCwganNTdHJpbmcoJnZtLCAiR2VuZXJhdG9y
RnVuY3Rpb24iKSwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtIHwgUHJvcGVydHlBdHRyaWJ1
dGU6OlJlYWRPbmx5KTsKKyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJv
cGVydHlOYW1lcy0+dG9TdHJpbmdUYWdTeW1ib2wsIGpzU3RyaW5nKHZtLCAiR2VuZXJhdG9yRnVu
Y3Rpb24iKSwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtIHwgUHJvcGVydHlBdHRyaWJ1dGU6
OlJlYWRPbmx5KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9HZW5lcmF0b3JQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyYXRvclByb3RvdHlwZS5jcHAJKHJldmlz
aW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyYXRvclBy
b3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJp
Z2h0IChDKSAyMDE1IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4uCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00OCw3ICs0OSw3IEBAIHZvaWQgR2VuZXJhdG9y
UHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbigKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2
bSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKLSAgICBwdXREaXJlY3RXaXRo
b3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+dG9TdHJpbmdUYWdTeW1ib2wsIGpz
U3RyaW5nKCZ2bSwgIkdlbmVyYXRvciIpLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBQ
cm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpOworICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0
aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT50b1N0cmluZ1RhZ1N5bWJvbCwganNTdHJpbmcodm0s
ICJHZW5lcmF0b3IiKSwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtIHwgUHJvcGVydHlBdHRy
aWJ1dGU6OlJlYWRPbmx5KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHNJbmxp
bmVzLmgJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0dlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC05MiwxOCArOTIs
MTggQEAgYm9vbCBHZW5lcmljQXJndW1lbnRzPFR5cGU+OjpnZXRPd25Qcm9wZQogdGVtcGxhdGU8
dHlwZW5hbWUgVHlwZT4KIHZvaWQgR2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6Z2V0T3duUHJvcGVy
dHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFy
cmF5JiBhcnJheSwgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKICAgICBUeXBlKiB0aGlzT2JqZWN0ID0ganNDYXN0PFR5cGUqPihvYmplY3QpOwogCiAg
ICAgaWYgKGFycmF5LmluY2x1ZGVTdHJpbmdQcm9wZXJ0aWVzKCkpIHsKICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHRoaXNPYmplY3QtPmludGVybmFsTGVuZ3RoKCk7ICsraSkgewog
ICAgICAgICAgICAgaWYgKCF0aGlzT2JqZWN0LT5pc01hcHBlZEFyZ3VtZW50KGkpKQogICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgYXJyYXkuYWRkKElkZW50aWZpZXI6OmZy
b20oZXhlYywgaSkpOworICAgICAgICAgICAgYXJyYXkuYWRkKElkZW50aWZpZXI6OmZyb20odm0s
IGkpKTsKICAgICAgICAgfQogICAgIH0KIAogICAgIGlmIChtb2RlLmluY2x1ZGVEb250RW51bVBy
b3BlcnRpZXMoKSAmJiAhdGhpc09iamVjdC0+b3ZlcnJvZGVUaGluZ3MoKSkgewotICAgICAgICBW
TSYgdm0gPSBleGVjLT52bSgpOwogICAgICAgICBhcnJheS5hZGQodm0ucHJvcGVydHlOYW1lcy0+
bGVuZ3RoKTsKICAgICAgICAgYXJyYXkuYWRkKHZtLnByb3BlcnR5TmFtZXMtPmNhbGxlZSk7CiAg
ICAgICAgIGlmIChhcnJheS5pbmNsdWRlU3ltYm9sUHJvcGVydGllcygpKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2V0dGVyU2V0dGVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2V0dGVyU2V0dGVyLmgJKHJldmlzaW9uIDI0OTEy
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dldHRlclNldHRlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAw
MSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICogIENvcHlyaWdodCAoQykgMjAwMSBQ
ZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwg
MjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTg3LDggKzg3LDggQEAgcHVi
bGljOgogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAotICAgIGJvb2wgaXNHZXR0ZXJO
dWxsKCkgY29uc3QgeyByZXR1cm4gISFqc0R5bmFtaWNDYXN0PE51bGxHZXR0ZXJGdW5jdGlvbio+
KCptX2dldHRlci5nZXQoKS0+dm0oKSwgbV9nZXR0ZXIuZ2V0KCkpOyB9Ci0gICAgYm9vbCBpc1Nl
dHRlck51bGwoKSBjb25zdCB7IHJldHVybiAhIWpzRHluYW1pY0Nhc3Q8TnVsbFNldHRlckZ1bmN0
aW9uKj4oKm1fc2V0dGVyLmdldCgpLT52bSgpLCBtX3NldHRlci5nZXQoKSk7IH0KKyAgICBib29s
IGlzR2V0dGVyTnVsbCgpIGNvbnN0IHsgcmV0dXJuICEhanNEeW5hbWljQ2FzdDxOdWxsR2V0dGVy
RnVuY3Rpb24qPihtX2dldHRlci5nZXQoKS0+dm0oKSwgbV9nZXR0ZXIuZ2V0KCkpOyB9CisgICAg
Ym9vbCBpc1NldHRlck51bGwoKSBjb25zdCB7IHJldHVybiAhIWpzRHluYW1pY0Nhc3Q8TnVsbFNl
dHRlckZ1bmN0aW9uKj4obV9zZXR0ZXIuZ2V0KCktPnZtKCksIG1fc2V0dGVyLmdldCgpKTsgfQog
CiAgICAgSlNPYmplY3QqIHNldHRlcigpIGNvbnN0IHsgcmV0dXJuIG1fc2V0dGVyLmdldCgpOyB9
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lkZW50aWZpZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lkZW50aWZpZXIuY3Bw
CShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JZGVu
dGlmaWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiAgQ29weXJp
Z2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDEyIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMzUs
MjggKzM1LDIzIEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1SZWY8U3RyaW5nSW1wbD4gSWRlbnRp
Zmllcjo6YWRkKFZNKiB2bSwgY29uc3QgY2hhciogYykKK1JlZjxTdHJpbmdJbXBsPiBJZGVudGlm
aWVyOjphZGQoVk0mIHZtLCBjb25zdCBjaGFyKiBjKQogewogICAgIEFTU0VSVChjKTsKICAgICBB
U1NFUlQoY1swXSk7CiAgICAgaWYgKCFjWzFdKQotICAgICAgICByZXR1cm4gdm0tPnNtYWxsU3Ry
aW5ncy5zaW5nbGVDaGFyYWN0ZXJTdHJpbmdSZXAoY1swXSk7CisgICAgICAgIHJldHVybiB2bS5z
bWFsbFN0cmluZ3Muc2luZ2xlQ2hhcmFjdGVyU3RyaW5nUmVwKGNbMF0pOwogCiAgICAgcmV0dXJu
ICpBdG9tU3RyaW5nSW1wbDo6YWRkKGMpOwogfQogCi1SZWY8U3RyaW5nSW1wbD4gSWRlbnRpZmll
cjo6YWRkKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgY2hhciogYykKLXsKLSAgICByZXR1cm4gYWRk
KCZleGVjLT52bSgpLCBjKTsKLX0KLQotUmVmPFN0cmluZ0ltcGw+IElkZW50aWZpZXI6OmFkZDgo
Vk0qIHZtLCBjb25zdCBVQ2hhciogcywgaW50IGxlbmd0aCkKK1JlZjxTdHJpbmdJbXBsPiBJZGVu
dGlmaWVyOjphZGQ4KFZNJiB2bSwgY29uc3QgVUNoYXIqIHMsIGludCBsZW5ndGgpCiB7CiAgICAg
aWYgKGxlbmd0aCA9PSAxKSB7CiAgICAgICAgIFVDaGFyIGMgPSBzWzBdOwogICAgICAgICBBU1NF
UlQoaXNMYXRpbjEoYykpOwogICAgICAgICBpZiAoY2FuVXNlU2luZ2xlQ2hhcmFjdGVyU3RyaW5n
KGMpKQotICAgICAgICAgICAgcmV0dXJuIHZtLT5zbWFsbFN0cmluZ3Muc2luZ2xlQ2hhcmFjdGVy
U3RyaW5nUmVwKGMpOworICAgICAgICAgICAgcmV0dXJuIHZtLnNtYWxsU3RyaW5ncy5zaW5nbGVD
aGFyYWN0ZXJTdHJpbmdSZXAoYyk7CiAgICAgfQogICAgIGlmICghbGVuZ3RoKQogICAgICAgICBy
ZXR1cm4gKlN0cmluZ0ltcGw6OmVtcHR5KCk7CkBAIC02NCwzNCArNTksMTkgQEAgUmVmPFN0cmlu
Z0ltcGw+IElkZW50aWZpZXI6OmFkZDgoVk0qIHZtLAogICAgIHJldHVybiAqQXRvbVN0cmluZ0lt
cGw6OmFkZChzLCBsZW5ndGgpOwogfQogCi1JZGVudGlmaWVyIElkZW50aWZpZXI6OmZyb20oRXhl
Y1N0YXRlKiBleGVjLCB1bnNpZ25lZCB2YWx1ZSkKLXsKLSAgICByZXR1cm4gSWRlbnRpZmllcihl
eGVjLCBleGVjLT52bSgpLm51bWVyaWNTdHJpbmdzLmFkZCh2YWx1ZSkpOwotfQotCi1JZGVudGlm
aWVyIElkZW50aWZpZXI6OmZyb20oRXhlY1N0YXRlKiBleGVjLCBpbnQgdmFsdWUpCitJZGVudGlm
aWVyIElkZW50aWZpZXI6OmZyb20oVk0mIHZtLCB1bnNpZ25lZCB2YWx1ZSkKIHsKLSAgICByZXR1
cm4gSWRlbnRpZmllcihleGVjLCBleGVjLT52bSgpLm51bWVyaWNTdHJpbmdzLmFkZCh2YWx1ZSkp
OworICAgIHJldHVybiBJZGVudGlmaWVyKHZtLCB2bS5udW1lcmljU3RyaW5ncy5hZGQodmFsdWUp
KTsKIH0KIAotSWRlbnRpZmllciBJZGVudGlmaWVyOjpmcm9tKEV4ZWNTdGF0ZSogZXhlYywgZG91
YmxlIHZhbHVlKQorSWRlbnRpZmllciBJZGVudGlmaWVyOjpmcm9tKFZNJiB2bSwgaW50IHZhbHVl
KQogewotICAgIHJldHVybiBJZGVudGlmaWVyKGV4ZWMsIGV4ZWMtPnZtKCkubnVtZXJpY1N0cmlu
Z3MuYWRkKHZhbHVlKSk7CisgICAgcmV0dXJuIElkZW50aWZpZXIodm0sIHZtLm51bWVyaWNTdHJp
bmdzLmFkZCh2YWx1ZSkpOwogfQogCi1JZGVudGlmaWVyIElkZW50aWZpZXI6OmZyb20oVk0qIHZt
LCB1bnNpZ25lZCB2YWx1ZSkKK0lkZW50aWZpZXIgSWRlbnRpZmllcjo6ZnJvbShWTSYgdm0sIGRv
dWJsZSB2YWx1ZSkKIHsKLSAgICByZXR1cm4gSWRlbnRpZmllcih2bSwgdm0tPm51bWVyaWNTdHJp
bmdzLmFkZCh2YWx1ZSkpOwotfQotCi1JZGVudGlmaWVyIElkZW50aWZpZXI6OmZyb20oVk0qIHZt
LCBpbnQgdmFsdWUpCi17Ci0gICAgcmV0dXJuIElkZW50aWZpZXIodm0sIHZtLT5udW1lcmljU3Ry
aW5ncy5hZGQodmFsdWUpKTsKLX0KLQotSWRlbnRpZmllciBJZGVudGlmaWVyOjpmcm9tKFZNKiB2
bSwgZG91YmxlIHZhbHVlKQotewotICAgIHJldHVybiBJZGVudGlmaWVyKHZtLCB2bS0+bnVtZXJp
Y1N0cmluZ3MuYWRkKHZhbHVlKSk7CisgICAgcmV0dXJuIElkZW50aWZpZXIodm0sIHZtLm51bWVy
aWNTdHJpbmdzLmFkZCh2YWx1ZSkpOwogfQogCiB2b2lkIElkZW50aWZpZXI6OmR1bXAoUHJpbnRT
dHJlYW0mIG91dCkgY29uc3QKQEAgLTEwOSwyNCArODksMTggQEAgdm9pZCBJZGVudGlmaWVyOjpk
dW1wKFByaW50U3RyZWFtJiBvdXQpIAogCiAjaWZuZGVmIE5ERUJVRwogCi12b2lkIElkZW50aWZp
ZXI6OmNoZWNrQ3VycmVudEF0b21TdHJpbmdUYWJsZShWTSogdm0pCit2b2lkIElkZW50aWZpZXI6
OmNoZWNrQ3VycmVudEF0b21TdHJpbmdUYWJsZShWTSYgdm0pCiB7CiAgICAgLy8gQ2hlY2sgdGhl
IGlkZW50aWZpZXIgdGFibGUgYWNjZXNzaWJsZSB0aHJvdWdoIHRoZSB0aHJlYWRzcGVjaWZpYyBt
YXRjaGVzIHRoZQogICAgIC8vIHZtJ3MgaWRlbnRpZmllciB0YWJsZS4KLSAgICBBU1NFUlRfVU5V
U0VEKHZtLCB2bS0+YXRvbVN0cmluZ1RhYmxlKCkgPT0gVGhyZWFkOjpjdXJyZW50KCkuYXRvbVN0
cmluZ1RhYmxlKCkpOwotfQotCi12b2lkIElkZW50aWZpZXI6OmNoZWNrQ3VycmVudEF0b21TdHJp
bmdUYWJsZShFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgY2hlY2tDdXJyZW50QXRvbVN0cmluZ1Rh
YmxlKCZleGVjLT52bSgpKTsKKyAgICBBU1NFUlRfVU5VU0VEKHZtLCB2bS5hdG9tU3RyaW5nVGFi
bGUoKSA9PSBUaHJlYWQ6OmN1cnJlbnQoKS5hdG9tU3RyaW5nVGFibGUoKSk7CiB9CiAKICNlbHNl
CiAKIC8vIFRoZXNlIG9ubHkgZXhpc3RzIHNvIHRoYXQgb3VyIGV4cG9ydHMgYXJlIHRoZSBzYW1l
IGZvciBkZWJ1ZyBhbmQgcmVsZWFzZSBidWlsZHMuCiAvLyBUaGlzIHdvdWxkIGJlIGFuIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCksIGJ1dCB3ZSdyZSBpbiBOREVCVUcgb25seSBjb2RlIGhl
cmUhCi1OT19SRVRVUk5fRFVFX1RPX0NSQVNIIHZvaWQgSWRlbnRpZmllcjo6Y2hlY2tDdXJyZW50
QXRvbVN0cmluZ1RhYmxlKFZNKikgeyBDUkFTSCgpOyB9Ci1OT19SRVRVUk5fRFVFX1RPX0NSQVNI
IHZvaWQgSWRlbnRpZmllcjo6Y2hlY2tDdXJyZW50QXRvbVN0cmluZ1RhYmxlKEV4ZWNTdGF0ZSop
IHsgQ1JBU0goKTsgfQorTk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2b2lkIElkZW50aWZpZXI6OmNo
ZWNrQ3VycmVudEF0b21TdHJpbmdUYWJsZShWTSYpIHsgQ1JBU0goKTsgfQogCiAjZW5kaWYKIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSWRlbnRpZmllci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lkZW50aWZpZXIuaAkocmV2aXNp
b24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSWRlbnRpZmllci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqICBDb3B5cmlnaHQgKEMpIDIw
MDMsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0xMTEsMzEgKzExMSwyMyBAQCBw
dWJsaWM6CiAKICAgICAvLyBPbmx5IHRvIGJlIHVzZWQgd2l0aCBzdHJpbmcgbGl0ZXJhbHMuCiAg
ICAgdGVtcGxhdGU8dW5zaWduZWQgY2hhcmFjdGVyc0NvdW50PgotICAgIHN0YXRpYyBJZGVudGlm
aWVyIGZyb21TdHJpbmcoVk0qLCBjb25zdCBjaGFyICgmY2hhcmFjdGVycylbY2hhcmFjdGVyc0Nv
dW50XSk7Ci0gICAgdGVtcGxhdGU8dW5zaWduZWQgY2hhcmFjdGVyc0NvdW50PgotICAgIHN0YXRp
YyBJZGVudGlmaWVyIGZyb21TdHJpbmcoRXhlY1N0YXRlKiwgY29uc3QgY2hhciAoJmNoYXJhY3Rl
cnMpW2NoYXJhY3RlcnNDb3VudF0pOwotICAgIHN0YXRpYyBJZGVudGlmaWVyIGZyb21TdHJpbmco
Vk0qLCBjb25zdCBMQ2hhciosIGludCBsZW5ndGgpOwotICAgIHN0YXRpYyBJZGVudGlmaWVyIGZy
b21TdHJpbmcoVk0qLCBjb25zdCBVQ2hhciosIGludCBsZW5ndGgpOwotICAgIHN0YXRpYyBJZGVu
dGlmaWVyIGZyb21TdHJpbmcoVk0qLCBjb25zdCBTdHJpbmcmKTsKLSAgICBzdGF0aWMgSWRlbnRp
ZmllciBmcm9tU3RyaW5nKEV4ZWNTdGF0ZSosIEF0b21TdHJpbmdJbXBsKik7Ci0gICAgc3RhdGlj
IElkZW50aWZpZXIgZnJvbVN0cmluZyhFeGVjU3RhdGUqLCBjb25zdCBBdG9tU3RyaW5nJik7Ci0g
ICAgc3RhdGljIElkZW50aWZpZXIgZnJvbVN0cmluZyhFeGVjU3RhdGUqLCBjb25zdCBTdHJpbmcm
KTsKLSAgICBzdGF0aWMgSWRlbnRpZmllciBmcm9tU3RyaW5nKEV4ZWNTdGF0ZSosIGNvbnN0IGNo
YXIqKTsKLSAgICBzdGF0aWMgSWRlbnRpZmllciBmcm9tU3RyaW5nKFZNKiB2bSwgY29uc3QgVmVj
dG9yPExDaGFyPiYgY2hhcmFjdGVycykgeyByZXR1cm4gZnJvbVN0cmluZyh2bSwgY2hhcmFjdGVy
cy5kYXRhKCksIGNoYXJhY3RlcnMuc2l6ZSgpKTsgfQorICAgIHN0YXRpYyBJZGVudGlmaWVyIGZy
b21TdHJpbmcoVk0mLCBjb25zdCBjaGFyICgmY2hhcmFjdGVycylbY2hhcmFjdGVyc0NvdW50XSk7
CisgICAgc3RhdGljIElkZW50aWZpZXIgZnJvbVN0cmluZyhWTSYsIEFTQ0lJTGl0ZXJhbCk7Cisg
ICAgc3RhdGljIElkZW50aWZpZXIgZnJvbVN0cmluZyhWTSYsIGNvbnN0IExDaGFyKiwgaW50IGxl
bmd0aCk7CisgICAgc3RhdGljIElkZW50aWZpZXIgZnJvbVN0cmluZyhWTSYsIGNvbnN0IFVDaGFy
KiwgaW50IGxlbmd0aCk7CisgICAgc3RhdGljIElkZW50aWZpZXIgZnJvbVN0cmluZyhWTSYsIGNv
bnN0IFN0cmluZyYpOworICAgIHN0YXRpYyBJZGVudGlmaWVyIGZyb21TdHJpbmcoVk0mLCBjb25z
dCBjaGFyKik7CisgICAgc3RhdGljIElkZW50aWZpZXIgZnJvbVN0cmluZyhWTSYgdm0sIGNvbnN0
IFZlY3RvcjxMQ2hhcj4mIGNoYXJhY3RlcnMpIHsgcmV0dXJuIGZyb21TdHJpbmcodm0sIGNoYXJh
Y3RlcnMuZGF0YSgpLCBjaGFyYWN0ZXJzLnNpemUoKSk7IH0KIAotICAgIHN0YXRpYyBJZGVudGlm
aWVyIGZyb21VaWQoVk0qLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKTsKLSAgICBzdGF0aWMgSWRl
bnRpZmllciBmcm9tVWlkKEV4ZWNTdGF0ZSosIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpOworICAg
IHN0YXRpYyBJZGVudGlmaWVyIGZyb21VaWQoVk0mLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKTsK
ICAgICBzdGF0aWMgSWRlbnRpZmllciBmcm9tVWlkKGNvbnN0IFByaXZhdGVOYW1lJik7CiAgICAg
c3RhdGljIElkZW50aWZpZXIgZnJvbVVpZChTeW1ib2xJbXBsJik7CiAKLSAgICBzdGF0aWMgSWRl
bnRpZmllciBjcmVhdGVMQ2hhckZyb21VQ2hhcihWTSogdm0sIGNvbnN0IFVDaGFyKiBzLCBpbnQg
bGVuZ3RoKSB7IHJldHVybiBJZGVudGlmaWVyKHZtLCBhZGQ4KHZtLCBzLCBsZW5ndGgpKTsgfQor
ICAgIHN0YXRpYyBJZGVudGlmaWVyIGNyZWF0ZUxDaGFyRnJvbVVDaGFyKFZNJiB2bSwgY29uc3Qg
VUNoYXIqIHMsIGludCBsZW5ndGgpIHsgcmV0dXJuIElkZW50aWZpZXIodm0sIGFkZDgodm0sIHMs
IGxlbmd0aCkpOyB9CiAKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgSWRlbnRpZmllciBm
cm9tKEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHkpOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRp
YyBJZGVudGlmaWVyIGZyb20oRXhlY1N0YXRlKiwgaW50IHkpOwotICAgIHN0YXRpYyBJZGVudGlm
aWVyIGZyb20oRXhlY1N0YXRlKiwgZG91YmxlIHkpOwotICAgIHN0YXRpYyBJZGVudGlmaWVyIGZy
b20oVk0qLCB1bnNpZ25lZCB5KTsKLSAgICBzdGF0aWMgSWRlbnRpZmllciBmcm9tKFZNKiwgaW50
IHkpOwotICAgIHN0YXRpYyBJZGVudGlmaWVyIGZyb20oVk0qLCBkb3VibGUgeSk7CisgICAgSlNf
RVhQT1JUX1BSSVZBVEUgc3RhdGljIElkZW50aWZpZXIgZnJvbShWTSYsIHVuc2lnbmVkIHkpOwor
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBJZGVudGlmaWVyIGZyb20oVk0mLCBpbnQgeSk7
CisgICAgc3RhdGljIElkZW50aWZpZXIgZnJvbShWTSYsIGRvdWJsZSB5KTsKIAogICAgIGJvb2wg
aXNOdWxsKCkgY29uc3QgeyByZXR1cm4gbV9zdHJpbmcuaXNOdWxsKCk7IH0KICAgICBib29sIGlz
RW1wdHkoKSBjb25zdCB7IHJldHVybiBtX3N0cmluZy5pc0VtcHR5KCk7IH0KQEAgLTE1Nyw4ICsx
NDksNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgU3RyaW5nSW1wbCog
YSwgY29uc3QgU3RyaW5nSW1wbCogYikgeyByZXR1cm4gOjplcXVhbChhLCBiKTsgfQogCiAgICAg
Ly8gT25seSB0byBiZSB1c2VkIHdpdGggc3RyaW5nIGxpdGVyYWxzLgotICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHN0YXRpYyBSZWY8U3RyaW5nSW1wbD4gYWRkKFZNKiwgY29uc3QgY2hhciopOwotICAg
IEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBSZWY8U3RyaW5nSW1wbD4gYWRkKEV4ZWNTdGF0ZSos
IGNvbnN0IGNoYXIqKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgUmVmPFN0cmluZ0lt
cGw+IGFkZChWTSYsIGNvbnN0IGNoYXIqKTsKIAogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYp
IGNvbnN0OwogCkBAIC0xNjcsMTQgKzE1OCwxMiBAQCBwcml2YXRlOgogCiAgICAgLy8gT25seSB0
byBiZSB1c2VkIHdpdGggc3RyaW5nIGxpdGVyYWxzLgogICAgIHRlbXBsYXRlPHVuc2lnbmVkIGNo
YXJhY3RlcnNDb3VudD4KLSAgICBJZGVudGlmaWVyKFZNKiB2bSwgY29uc3QgY2hhciAoJmNoYXJh
Y3RlcnMpW2NoYXJhY3RlcnNDb3VudF0pIDogbV9zdHJpbmcoYWRkKHZtLCBjaGFyYWN0ZXJzKSkg
eyBBU1NFUlQobV9zdHJpbmcuaW1wbCgpLT5pc0F0b20oKSk7IH0KKyAgICBJZGVudGlmaWVyKFZN
JiB2bSwgY29uc3QgY2hhciAoJmNoYXJhY3RlcnMpW2NoYXJhY3RlcnNDb3VudF0pIDogbV9zdHJp
bmcoYWRkKHZtLCBjaGFyYWN0ZXJzKSkgeyBBU1NFUlQobV9zdHJpbmcuaW1wbCgpLT5pc0F0b20o
KSk7IH0KIAotICAgIElkZW50aWZpZXIoVk0qIHZtLCBjb25zdCBMQ2hhciogcywgaW50IGxlbmd0
aCkgOiBtX3N0cmluZyhhZGQodm0sIHMsIGxlbmd0aCkpIHsgQVNTRVJUKG1fc3RyaW5nLmltcGwo
KS0+aXNBdG9tKCkpOyB9Ci0gICAgSWRlbnRpZmllcihWTSogdm0sIGNvbnN0IFVDaGFyKiBzLCBp
bnQgbGVuZ3RoKSA6IG1fc3RyaW5nKGFkZCh2bSwgcywgbGVuZ3RoKSkgeyBBU1NFUlQobV9zdHJp
bmcuaW1wbCgpLT5pc0F0b20oKSk7IH0KLSAgICBJZGVudGlmaWVyKEV4ZWNTdGF0ZSosIEF0b21T
dHJpbmdJbXBsKik7Ci0gICAgSWRlbnRpZmllcihFeGVjU3RhdGUqLCBjb25zdCBBdG9tU3RyaW5n
Jik7Ci0gICAgSWRlbnRpZmllcihWTSogdm0sIGNvbnN0IFN0cmluZyYgc3RyaW5nKSA6IG1fc3Ry
aW5nKGFkZCh2bSwgc3RyaW5nLmltcGwoKSkpIHsgQVNTRVJUKG1fc3RyaW5nLmltcGwoKS0+aXNB
dG9tKCkpOyB9Ci0gICAgSWRlbnRpZmllcihWTSogdm0sIFN0cmluZ0ltcGwqIHJlcCkgOiBtX3N0
cmluZyhhZGQodm0sIHJlcCkpIHsgQVNTRVJUKG1fc3RyaW5nLmltcGwoKS0+aXNBdG9tKCkpOyB9
CisgICAgSWRlbnRpZmllcihWTSYgdm0sIGNvbnN0IExDaGFyKiBzLCBpbnQgbGVuZ3RoKSA6IG1f
c3RyaW5nKGFkZCh2bSwgcywgbGVuZ3RoKSkgeyBBU1NFUlQobV9zdHJpbmcuaW1wbCgpLT5pc0F0
b20oKSk7IH0KKyAgICBJZGVudGlmaWVyKFZNJiB2bSwgY29uc3QgVUNoYXIqIHMsIGludCBsZW5n
dGgpIDogbV9zdHJpbmcoYWRkKHZtLCBzLCBsZW5ndGgpKSB7IEFTU0VSVChtX3N0cmluZy5pbXBs
KCktPmlzQXRvbSgpKTsgfQorICAgIElkZW50aWZpZXIoVk0mIHZtLCBjb25zdCBTdHJpbmcmIHN0
cmluZykgOiBtX3N0cmluZyhhZGQodm0sIHN0cmluZy5pbXBsKCkpKSB7IEFTU0VSVChtX3N0cmlu
Zy5pbXBsKCktPmlzQXRvbSgpKTsgfQorICAgIElkZW50aWZpZXIoVk0mIHZtLCBTdHJpbmdJbXBs
KiByZXApIDogbV9zdHJpbmcoYWRkKHZtLCByZXApKSB7IEFTU0VSVChtX3N0cmluZy5pbXBsKCkt
PmlzQXRvbSgpKTsgfQogCiAgICAgSWRlbnRpZmllcihTeW1ib2xJbXBsJiB1aWQpCiAgICAgICAg
IDogbV9zdHJpbmcoJnVpZCkKQEAgLTE4NywxOSArMTc2LDE2IEBAIHByaXZhdGU6CiAgICAgc3Rh
dGljIGJvb2wgZXF1YWwoY29uc3QgSWRlbnRpZmllciYgYSwgY29uc3QgSWRlbnRpZmllciYgYikg
eyByZXR1cm4gYS5tX3N0cmluZy5pbXBsKCkgPT0gYi5tX3N0cmluZy5pbXBsKCk7IH0KICAgICBz
dGF0aWMgYm9vbCBlcXVhbChjb25zdCBJZGVudGlmaWVyJiBhLCBjb25zdCBMQ2hhciogYikgeyBy
ZXR1cm4gZXF1YWwoYS5tX3N0cmluZy5pbXBsKCksIGIpOyB9CiAKLSAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVD4gc3RhdGljIFJlZjxTdHJpbmdJbXBsPiBhZGQoVk0qLCBjb25zdCBUKiwgaW50IGxl
bmd0aCk7Ci0gICAgc3RhdGljIFJlZjxTdHJpbmdJbXBsPiBhZGQ4KFZNKiwgY29uc3QgVUNoYXIq
LCBpbnQgbGVuZ3RoKTsKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gc3RhdGljIFJlZjxTdHJp
bmdJbXBsPiBhZGQoVk0mLCBjb25zdCBUKiwgaW50IGxlbmd0aCk7CisgICAgc3RhdGljIFJlZjxT
dHJpbmdJbXBsPiBhZGQ4KFZNJiwgY29uc3QgVUNoYXIqLCBpbnQgbGVuZ3RoKTsKICAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgVD4gQUxXQVlTX0lOTElORSBzdGF0aWMgYm9vbCBjYW5Vc2VTaW5nbGVD
aGFyYWN0ZXJTdHJpbmcoVCk7CiAKLSAgICBzdGF0aWMgUmVmPFN0cmluZ0ltcGw+IGFkZChFeGVj
U3RhdGUqLCBTdHJpbmdJbXBsKik7Ci0gICAgc3RhdGljIFJlZjxTdHJpbmdJbXBsPiBhZGQoVk0q
LCBTdHJpbmdJbXBsKik7CisgICAgc3RhdGljIFJlZjxTdHJpbmdJbXBsPiBhZGQoVk0mLCBTdHJp
bmdJbXBsKik7CiAKICNpZm5kZWYgTkRFQlVHCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGlj
IHZvaWQgY2hlY2tDdXJyZW50QXRvbVN0cmluZ1RhYmxlKEV4ZWNTdGF0ZSopOwotICAgIEpTX0VY
UE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGNoZWNrQ3VycmVudEF0b21TdHJpbmdUYWJsZShWTSop
OworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGNoZWNrQ3VycmVudEF0b21TdHJp
bmdUYWJsZShWTSYpOwogI2Vsc2UKLSAgICBKU19FWFBPUlRfUFJJVkFURSBOT19SRVRVUk5fRFVF
X1RPX0NSQVNIIHN0YXRpYyB2b2lkIGNoZWNrQ3VycmVudEF0b21TdHJpbmdUYWJsZShFeGVjU3Rh
dGUqKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBOT19SRVRVUk5fRFVFX1RPX0NSQVNIIHN0YXRp
YyB2b2lkIGNoZWNrQ3VycmVudEF0b21TdHJpbmdUYWJsZShWTSopOworICAgIEpTX0VYUE9SVF9Q
UklWQVRFIE5PX1JFVFVSTl9EVUVfVE9fQ1JBU0ggc3RhdGljIHZvaWQgY2hlY2tDdXJyZW50QXRv
bVN0cmluZ1RhYmxlKFZNJik7CiAjZW5kaWYKIH07CiAKQEAgLTIxNSwxMiArMjAxLDEyIEBAIHRl
bXBsYXRlIDw+IEFMV0FZU19JTkxJTkUgYm9vbCBJZGVudGlmaWUKIH0KIAogdGVtcGxhdGUgPHR5
cGVuYW1lIFQ+Ci1SZWY8U3RyaW5nSW1wbD4gSWRlbnRpZmllcjo6YWRkKFZNKiB2bSwgY29uc3Qg
VCogcywgaW50IGxlbmd0aCkKK1JlZjxTdHJpbmdJbXBsPiBJZGVudGlmaWVyOjphZGQoVk0mIHZt
LCBjb25zdCBUKiBzLCBpbnQgbGVuZ3RoKQogewogICAgIGlmIChsZW5ndGggPT0gMSkgewogICAg
ICAgICBUIGMgPSBzWzBdOwogICAgICAgICBpZiAoY2FuVXNlU2luZ2xlQ2hhcmFjdGVyU3RyaW5n
KGMpKQotICAgICAgICAgICAgcmV0dXJuIHZtLT5zbWFsbFN0cmluZ3Muc2luZ2xlQ2hhcmFjdGVy
U3RyaW5nUmVwKGMpOworICAgICAgICAgICAgcmV0dXJuIHZtLnNtYWxsU3RyaW5ncy5zaW5nbGVD
aGFyYWN0ZXJTdHJpbmdSZXAoYyk7CiAgICAgfQogICAgIGlmICghbGVuZ3RoKQogICAgICAgICBy
ZXR1cm4gKlN0cmluZ0ltcGw6OmVtcHR5KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JZGVudGlmaWVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0lkZW50aWZpZXJJbmxpbmVzLmgJKHJldmlzaW9uIDI0OTEyOCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lkZW50aWZpZXJJbmxpbmVzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMzEsNTggKzMxLDIxIEBACiAKIG5hbWVzcGFjZSBKU0MgIHsKIAotaW5saW5lIElk
ZW50aWZpZXI6OklkZW50aWZpZXIoRXhlY1N0YXRlKiBleGVjLCBBdG9tU3RyaW5nSW1wbCogc3Ry
aW5nKQotICAgIDogbV9zdHJpbmcoc3RyaW5nKQotewotI2lmbmRlZiBOREVCVUcKLSAgICBjaGVj
a0N1cnJlbnRBdG9tU3RyaW5nVGFibGUoZXhlYyk7Ci0gICAgaWYgKHN0cmluZykKLSAgICAgICAg
QVNTRVJUX1dJVEhfTUVTU0FHRSghc3RyaW5nLT5sZW5ndGgoKSB8fCBzdHJpbmctPmlzU3ltYm9s
KCkgfHwgQXRvbVN0cmluZ0ltcGw6OmlzSW5BdG9tU3RyaW5nVGFibGUoc3RyaW5nKSwgIlRoZSBh
dG9taWMgc3RyaW5nIGNvbWVzIGZyb20gYW4gb3RoZXIgdGhyZWFkISIpOwotI2Vsc2UKLSAgICBV
TlVTRURfUEFSQU0oZXhlYyk7Ci0jZW5kaWYKLX0KLQotaW5saW5lIElkZW50aWZpZXI6OklkZW50
aWZpZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBdG9tU3RyaW5nJiBzdHJpbmcpCi0gICAgOiBt
X3N0cmluZyhzdHJpbmcuc3RyaW5nKCkpCi17Ci0jaWZuZGVmIE5ERUJVRwotICAgIGNoZWNrQ3Vy
cmVudEF0b21TdHJpbmdUYWJsZShleGVjKTsKLSAgICBpZiAoIXN0cmluZy5pc051bGwoKSkKLSAg
ICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRSghc3RyaW5nLmxlbmd0aCgpIHx8IHN0cmluZy5pbXBs
KCktPmlzU3ltYm9sKCkgfHwgQXRvbVN0cmluZ0ltcGw6OmlzSW5BdG9tU3RyaW5nVGFibGUoc3Ry
aW5nLmltcGwoKSksICJUaGUgYXRvbWljIHN0cmluZyBjb21lcyBmcm9tIGFuIG90aGVyIHRocmVh
ZCEiKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGV4ZWMpOwotI2VuZGlmCi19Ci0KLWlubGlu
ZSBSZWY8U3RyaW5nSW1wbD4gSWRlbnRpZmllcjo6YWRkKEV4ZWNTdGF0ZSogZXhlYywgU3RyaW5n
SW1wbCogcikKLXsKLSNpZm5kZWYgTkRFQlVHCi0gICAgY2hlY2tDdXJyZW50QXRvbVN0cmluZ1Rh
YmxlKGV4ZWMpOwotI2VuZGlmCi0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICByZXR1cm4g
KkF0b21TdHJpbmdJbXBsOjphZGRXaXRoU3RyaW5nVGFibGVQcm92aWRlcih2bSwgcik7Ci19Ci1p
bmxpbmUgUmVmPFN0cmluZ0ltcGw+IElkZW50aWZpZXI6OmFkZChWTSogdm0sIFN0cmluZ0ltcGwq
IHIpCitpbmxpbmUgUmVmPFN0cmluZ0ltcGw+IElkZW50aWZpZXI6OmFkZChWTSYgdm0sIFN0cmlu
Z0ltcGwqIHIpCiB7CiAjaWZuZGVmIE5ERUJVRwogICAgIGNoZWNrQ3VycmVudEF0b21TdHJpbmdU
YWJsZSh2bSk7CiAjZW5kaWYKLSAgICByZXR1cm4gKkF0b21TdHJpbmdJbXBsOjphZGRXaXRoU3Ry
aW5nVGFibGVQcm92aWRlcigqdm0sIHIpOworICAgIHJldHVybiAqQXRvbVN0cmluZ0ltcGw6OmFk
ZFdpdGhTdHJpbmdUYWJsZVByb3ZpZGVyKHZtLCByKTsKIH0KIAotaW5saW5lIElkZW50aWZpZXIg
SWRlbnRpZmllcjo6ZnJvbVVpZChWTSogdm0sIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCitpbmxp
bmUgSWRlbnRpZmllciBJZGVudGlmaWVyOjpmcm9tVWlkKFZNJiB2bSwgVW5pcXVlZFN0cmluZ0lt
cGwqIHVpZCkKIHsKICAgICBpZiAoIXVpZCB8fCAhdWlkLT5pc1N5bWJvbCgpKQogICAgICAgICBy
ZXR1cm4gSWRlbnRpZmllcih2bSwgdWlkKTsKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U3ltYm9s
SW1wbCY+KCp1aWQpOwogfQogCi1pbmxpbmUgSWRlbnRpZmllciBJZGVudGlmaWVyOjpmcm9tVWlk
KEV4ZWNTdGF0ZSogZXhlYywgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKLXsKLSAgICByZXR1cm4g
ZnJvbVVpZCgmZXhlYy0+dm0oKSwgdWlkKTsKLX0KLQogaW5saW5lIElkZW50aWZpZXIgSWRlbnRp
Zmllcjo6ZnJvbVVpZChjb25zdCBQcml2YXRlTmFtZSYgbmFtZSkKIHsKICAgICByZXR1cm4gbmFt
ZS51aWQoKTsKQEAgLTk0LDY0ICs1Nyw0OCBAQCBpbmxpbmUgSWRlbnRpZmllciBJZGVudGlmaWVy
Ojpmcm9tVWlkKFN5CiB9CiAKIHRlbXBsYXRlPHVuc2lnbmVkIGNoYXJhY3RlcnNDb3VudD4KLWlu
bGluZSBJZGVudGlmaWVyIElkZW50aWZpZXI6OmZyb21TdHJpbmcoVk0qIHZtLCBjb25zdCBjaGFy
ICgmY2hhcmFjdGVycylbY2hhcmFjdGVyc0NvdW50XSkKK2lubGluZSBJZGVudGlmaWVyIElkZW50
aWZpZXI6OmZyb21TdHJpbmcoVk0mIHZtLCBjb25zdCBjaGFyICgmY2hhcmFjdGVycylbY2hhcmFj
dGVyc0NvdW50XSkKIHsKLSAgICByZXR1cm4gSWRlbnRpZmllcih2bSwgY2hhcmFjdGVycyk7Cisg
ICAgcmV0dXJuIElkZW50aWZpZXIoJnZtLCBjaGFyYWN0ZXJzKTsKIH0KIAotdGVtcGxhdGU8dW5z
aWduZWQgY2hhcmFjdGVyc0NvdW50PgotaW5saW5lIElkZW50aWZpZXIgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IGNoYXIgKCZjaGFyYWN0ZXJzKVtjaGFyYWN0
ZXJzQ291bnRdKQoraW5saW5lIElkZW50aWZpZXIgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhWTSYg
dm0sIEFTQ0lJTGl0ZXJhbCBzKQogewotICAgIHJldHVybiBJZGVudGlmaWVyKCZleGVjLT52bSgp
LCBjaGFyYWN0ZXJzKTsKKyAgICByZXR1cm4gSWRlbnRpZmllcih2bSwgU3RyaW5nKHMpKTsKIH0K
IAotaW5saW5lIElkZW50aWZpZXIgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhWTSogdm0sIGNvbnN0
IExDaGFyKiBzLCBpbnQgbGVuZ3RoKQoraW5saW5lIElkZW50aWZpZXIgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyhWTSYgdm0sIGNvbnN0IExDaGFyKiBzLCBpbnQgbGVuZ3RoKQogewogICAgIHJldHVy
biBJZGVudGlmaWVyKHZtLCBzLCBsZW5ndGgpOwogfQogCi1pbmxpbmUgSWRlbnRpZmllciBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKFZNKiB2bSwgY29uc3QgVUNoYXIqIHMsIGludCBsZW5ndGgpCitp
bmxpbmUgSWRlbnRpZmllciBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKFZNJiB2bSwgY29uc3QgVUNo
YXIqIHMsIGludCBsZW5ndGgpCiB7CiAgICAgcmV0dXJuIElkZW50aWZpZXIodm0sIHMsIGxlbmd0
aCk7CiB9CiAKLWlubGluZSBJZGVudGlmaWVyIElkZW50aWZpZXI6OmZyb21TdHJpbmcoVk0qIHZt
LCBjb25zdCBTdHJpbmcmIHN0cmluZykKK2lubGluZSBJZGVudGlmaWVyIElkZW50aWZpZXI6OmZy
b21TdHJpbmcoVk0mIHZtLCBjb25zdCBTdHJpbmcmIHN0cmluZykKIHsKICAgICByZXR1cm4gSWRl
bnRpZmllcih2bSwgc3RyaW5nLmltcGwoKSk7CiB9CiAKLWlubGluZSBJZGVudGlmaWVyIElkZW50
aWZpZXI6OmZyb21TdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcmIHN0cmluZykK
LXsKLSAgICByZXR1cm4gSWRlbnRpZmllcigmZXhlYy0+dm0oKSwgc3RyaW5nLmltcGwoKSk7Ci19
Ci0KLWlubGluZSBJZGVudGlmaWVyIElkZW50aWZpZXI6OmZyb21TdHJpbmcoRXhlY1N0YXRlKiBl
eGVjLCBBdG9tU3RyaW5nSW1wbCogYXRvbVN0cmluZykKLXsKLSAgICByZXR1cm4gSWRlbnRpZmll
cihleGVjLCBhdG9tU3RyaW5nKTsKLX0KLQotaW5saW5lIElkZW50aWZpZXIgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEF0b21TdHJpbmcmIGF0b21TdHJpbmcp
Ci17Ci0gICAgcmV0dXJuIElkZW50aWZpZXIoZXhlYywgYXRvbVN0cmluZyk7Ci19Ci0KLWlubGlu
ZSBJZGVudGlmaWVyIElkZW50aWZpZXI6OmZyb21TdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBjb25z
dCBjaGFyKiBzKQoraW5saW5lIElkZW50aWZpZXIgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhWTSYg
dm0sIGNvbnN0IGNoYXIqIHMpCiB7Ci0gICAgcmV0dXJuIElkZW50aWZpZXIoZXhlYywgQXRvbVN0
cmluZyhzKSk7CisgICAgcmV0dXJuIElkZW50aWZpZXIodm0sIEF0b21TdHJpbmcocykpOwogfQog
CiBpbmxpbmUgSlNWYWx1ZSBpZGVudGlmaWVyVG9KU1ZhbHVlKFZNJiB2bSwgY29uc3QgSWRlbnRp
ZmllciYgaWRlbnRpZmllcikKIHsKICAgICBpZiAoaWRlbnRpZmllci5pc1N5bWJvbCgpKQogICAg
ICAgICByZXR1cm4gU3ltYm9sOjpjcmVhdGUodm0sIHN0YXRpY19jYXN0PFN5bWJvbEltcGwmPigq
aWRlbnRpZmllci5pbXBsKCkpKTsKLSAgICByZXR1cm4ganNTdHJpbmcoJnZtLCBpZGVudGlmaWVy
LmltcGwoKSk7CisgICAgcmV0dXJuIGpzU3RyaW5nKHZtLCBpZGVudGlmaWVyLmltcGwoKSk7CiB9
CiAKIGlubGluZSBKU1ZhbHVlIGlkZW50aWZpZXJUb1NhZmVQdWJsaWNKU1ZhbHVlKFZNJiB2bSwg
Y29uc3QgSWRlbnRpZmllciYgaWRlbnRpZmllcikgCiB7CiAgICAgaWYgKGlkZW50aWZpZXIuaXNT
eW1ib2woKSAmJiAhaWRlbnRpZmllci5pc1ByaXZhdGVOYW1lKCkpCiAgICAgICAgIHJldHVybiBT
eW1ib2w6OmNyZWF0ZSh2bSwgc3RhdGljX2Nhc3Q8U3ltYm9sSW1wbCY+KCppZGVudGlmaWVyLmlt
cGwoKSkpOwotICAgIHJldHVybiBqc1N0cmluZygmdm0sIGlkZW50aWZpZXIuaW1wbCgpKTsKKyAg
ICByZXR1cm4ganNTdHJpbmcodm0sIGlkZW50aWZpZXIuaW1wbCgpKTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRlcm5hbEZ1
bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bnRlcm5hbEZ1bmN0aW9uLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSW50ZXJuYWxGdW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUy
LDcgKzUyLDcgQEAgdm9pZCBJbnRlcm5hbEZ1bmN0aW9uOjpmaW5pc2hDcmVhdGlvbihWTQogICAg
IEFTU0VSVChtZXRob2RUYWJsZSh2bSktPmdldENhbGxEYXRhID09IEludGVybmFsRnVuY3Rpb246
OmluZm8oKS0+bWV0aG9kVGFibGUuZ2V0Q2FsbERhdGEpOwogICAgIEFTU0VSVChtZXRob2RUYWJs
ZSh2bSktPmdldENvbnN0cnVjdERhdGEgPT0gSW50ZXJuYWxGdW5jdGlvbjo6aW5mbygpLT5tZXRo
b2RUYWJsZS5nZXRDb25zdHJ1Y3REYXRhKTsKICAgICBBU1NFUlQodHlwZSgpID09IEludGVybmFs
RnVuY3Rpb25UeXBlKTsKLSAgICBKU1N0cmluZyogbmFtZVN0cmluZyA9IGpzU3RyaW5nKCZ2bSwg
bmFtZSk7CisgICAgSlNTdHJpbmcqIG5hbWVTdHJpbmcgPSBqc1N0cmluZyh2bSwgbmFtZSk7CiAg
ICAgbV9vcmlnaW5hbE5hbWUuc2V0KHZtLCB0aGlzLCBuYW1lU3RyaW5nKTsKICAgICBpZiAobmFt
ZVZpc2liaWxpdHkgPT0gTmFtZVZpc2liaWxpdHk6OlZpc2libGUpIHsKICAgICAgICAgaWYgKG5h
bWVBZGRpdGlvbk1vZGUgPT0gTmFtZUFkZGl0aW9uTW9kZTo6V2l0aFN0cnVjdHVyZVRyYW5zaXRp
b24pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsQ29sbGF0b3IuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xsYXRv
ci5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0ludGxDb2xsYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogICog
Q29weXJpZ2h0IChDKSAyMDE1IEFuZHkgVmFuV2Fnb25lciAoYW5keUB2YW53YWdvbmVyLmZhbWls
eSkKICAqIENvcHlyaWdodCAoQykgMjAxNSBTdWtvbHNhayBTYWtzaHV3b25nIChzdWtvbHNha0Bn
bWFpbC5jb20pCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCBSaWdo
dHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMuIEFsbCBS
aWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQxMiwx
MyArNDEyLDEzIEBAIEpTT2JqZWN0KiBJbnRsQ29sbGF0b3I6OnJlc29sdmVkT3B0aW9ucygKICAg
ICB9CiAKICAgICBKU09iamVjdCogb3B0aW9ucyA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KCZzdGF0
ZSk7Ci0gICAgb3B0aW9ucy0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sb2NhbGUs
IGpzU3RyaW5nKCZzdGF0ZSwgbV9sb2NhbGUpKTsKLSAgICBvcHRpb25zLT5wdXREaXJlY3Qodm0s
IHZtLnByb3BlcnR5TmFtZXMtPnVzYWdlLCBqc05vbnRyaXZpYWxTdHJpbmcoJnN0YXRlLCB1c2Fn
ZVN0cmluZyhtX3VzYWdlKSkpOwotICAgIG9wdGlvbnMtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVy
dHlOYW1lcy0+c2Vuc2l0aXZpdHksIGpzTm9udHJpdmlhbFN0cmluZygmc3RhdGUsIHNlbnNpdGl2
aXR5U3RyaW5nKG1fc2Vuc2l0aXZpdHkpKSk7CisgICAgb3B0aW9ucy0+cHV0RGlyZWN0KHZtLCB2
bS5wcm9wZXJ0eU5hbWVzLT5sb2NhbGUsIGpzU3RyaW5nKHZtLCBtX2xvY2FsZSkpOworICAgIG9w
dGlvbnMtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+dXNhZ2UsIGpzTm9udHJpdmlh
bFN0cmluZyh2bSwgdXNhZ2VTdHJpbmcobV91c2FnZSkpKTsKKyAgICBvcHRpb25zLT5wdXREaXJl
Y3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnNlbnNpdGl2aXR5LCBqc05vbnRyaXZpYWxTdHJpbmco
dm0sIHNlbnNpdGl2aXR5U3RyaW5nKG1fc2Vuc2l0aXZpdHkpKSk7CiAgICAgb3B0aW9ucy0+cHV0
RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5pZ25vcmVQdW5jdHVhdGlvbiwganNCb29sZWFu
KG1faWdub3JlUHVuY3R1YXRpb24pKTsKLSAgICBvcHRpb25zLT5wdXREaXJlY3Qodm0sIHZtLnBy
b3BlcnR5TmFtZXMtPmNvbGxhdGlvbiwganNTdHJpbmcoJnN0YXRlLCBtX2NvbGxhdGlvbikpOwor
ICAgIG9wdGlvbnMtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+Y29sbGF0aW9uLCBq
c1N0cmluZyh2bSwgbV9jb2xsYXRpb24pKTsKICAgICBvcHRpb25zLT5wdXREaXJlY3Qodm0sIHZt
LnByb3BlcnR5TmFtZXMtPm51bWVyaWMsIGpzQm9vbGVhbihtX251bWVyaWMpKTsKLSAgICBvcHRp
b25zLT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmNhc2VGaXJzdCwganNOb250cml2
aWFsU3RyaW5nKCZzdGF0ZSwgY2FzZUZpcnN0U3RyaW5nKG1fY2FzZUZpcnN0KSkpOworICAgIG9w
dGlvbnMtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+Y2FzZUZpcnN0LCBqc05vbnRy
aXZpYWxTdHJpbmcodm0sIGNhc2VGaXJzdFN0cmluZyhtX2Nhc2VGaXJzdCkpKTsKICAgICByZXR1
cm4gb3B0aW9uczsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50
bENvbGxhdG9yUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbnRsQ29sbGF0b3JQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsQ29sbGF0b3JQcm90b3R5cGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAx
NSBBbmR5IFZhbldhZ29uZXIgKGFuZHlAdmFud2Fnb25lci5mYW1pbHkpCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTc1LDcgKzc1LDcgQEAgdm9pZCBJbnRsQ29sbGF0
b3JQcm90b3R5cGU6OmZpbmlzaENyZWF0aQogewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZt
KTsKIAotICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVz
LT50b1N0cmluZ1RhZ1N5bWJvbCwganNTdHJpbmcoJnZtLCAiT2JqZWN0IiksIFByb3BlcnR5QXR0
cmlidXRlOjpEb250RW51bSB8IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSk7CisgICAgcHV0
RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPnRvU3RyaW5nVGFn
U3ltYm9sLCBqc1N0cmluZyh2bSwgIk9iamVjdCIpLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVu
dW0gfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpOwogfQogCiBzdGF0aWMgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBJbnRsQ29sbGF0b3JGdW5jQ29tcGFyZShFeGVjU3RhdGUqIHN0
YXRlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9y
bWF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRs
RGF0ZVRpbWVGb3JtYXQuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxNSBBbmR5IFZhbldhZ29uZXIgKGFu
ZHlAdmFud2Fnb25lci5mYW1pbHkpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTMxNiw3ICszMTYsNyBAQCBzdGF0aWMgSlNPYmplY3QqIHRvRGF0ZVRpbWVPcHRpb25z
QW55RGF0CiAgICAgICAgIC8vIGEuIEZvciBlYWNoIG9mIHRoZSBwcm9wZXJ0eSBuYW1lcyAieWVh
ciIsICJtb250aCIsICJkYXkiOgogICAgICAgICAvLyBpLiBMZXQgc3RhdHVzIGJlIENyZWF0ZURh
dGVQcm9wZXJ0eU9yVGhyb3cob3B0aW9ucywgcHJvcCwgIm51bWVyaWMiKS4KICAgICAgICAgLy8g
aWkuIFJldHVybklmQWJydXB0KHN0YXR1cykuCi0gICAgICAgIEpTU3RyaW5nKiBudW1lcmljID0g
anNOb250cml2aWFsU3RyaW5nKCZleGVjLCAibnVtZXJpYyJfcyk7CisgICAgICAgIEpTU3RyaW5n
KiBudW1lcmljID0ganNOb250cml2aWFsU3RyaW5nKHZtLCAibnVtZXJpYyJfcyk7CiAKICAgICAg
ICAgb3B0aW9ucy0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT55ZWFyLCBudW1lcmlj
KTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CkBAIC04NDgs
NDIgKzg0OCw0MiBAQCBKU09iamVjdCogSW50bERhdGVUaW1lRm9ybWF0OjpyZXNvbHZlZE9wCiAg
ICAgfQogCiAgICAgSlNPYmplY3QqIG9wdGlvbnMgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdCgmZXhl
Yyk7Ci0gICAgb3B0aW9ucy0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sb2NhbGUs
IGpzTm9udHJpdmlhbFN0cmluZygmZXhlYywgbV9sb2NhbGUpKTsKLSAgICBvcHRpb25zLT5wdXRE
aXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmNhbGVuZGFyLCBqc05vbnRyaXZpYWxTdHJpbmco
JmV4ZWMsIG1fY2FsZW5kYXIpKTsKLSAgICBvcHRpb25zLT5wdXREaXJlY3Qodm0sIHZtLnByb3Bl
cnR5TmFtZXMtPm51bWJlcmluZ1N5c3RlbSwganNOb250cml2aWFsU3RyaW5nKCZleGVjLCBtX251
bWJlcmluZ1N5c3RlbSkpOwotICAgIG9wdGlvbnMtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlO
YW1lcy0+dGltZVpvbmUsIGpzTm9udHJpdmlhbFN0cmluZygmZXhlYywgbV90aW1lWm9uZSkpOwor
ICAgIG9wdGlvbnMtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bG9jYWxlLCBqc05v
bnRyaXZpYWxTdHJpbmcodm0sIG1fbG9jYWxlKSk7CisgICAgb3B0aW9ucy0+cHV0RGlyZWN0KHZt
LCB2bS5wcm9wZXJ0eU5hbWVzLT5jYWxlbmRhciwganNOb250cml2aWFsU3RyaW5nKHZtLCBtX2Nh
bGVuZGFyKSk7CisgICAgb3B0aW9ucy0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5u
dW1iZXJpbmdTeXN0ZW0sIGpzTm9udHJpdmlhbFN0cmluZyh2bSwgbV9udW1iZXJpbmdTeXN0ZW0p
KTsKKyAgICBvcHRpb25zLT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnRpbWVab25l
LCBqc05vbnRyaXZpYWxTdHJpbmcodm0sIG1fdGltZVpvbmUpKTsKIAogICAgIGlmIChtX3dlZWtk
YXkgIT0gV2Vla2RheTo6Tm9uZSkKLSAgICAgICAgb3B0aW9ucy0+cHV0RGlyZWN0KHZtLCB2bS5w
cm9wZXJ0eU5hbWVzLT53ZWVrZGF5LCBqc05vbnRyaXZpYWxTdHJpbmcoJmV4ZWMsIHdlZWtkYXlT
dHJpbmcobV93ZWVrZGF5KSkpOworICAgICAgICBvcHRpb25zLT5wdXREaXJlY3Qodm0sIHZtLnBy
b3BlcnR5TmFtZXMtPndlZWtkYXksIGpzTm9udHJpdmlhbFN0cmluZyh2bSwgd2Vla2RheVN0cmlu
ZyhtX3dlZWtkYXkpKSk7CiAKICAgICBpZiAobV9lcmEgIT0gRXJhOjpOb25lKQotICAgICAgICBv
cHRpb25zLT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmVyYSwganNOb250cml2aWFs
U3RyaW5nKCZleGVjLCBlcmFTdHJpbmcobV9lcmEpKSk7CisgICAgICAgIG9wdGlvbnMtPnB1dERp
cmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+ZXJhLCBqc05vbnRyaXZpYWxTdHJpbmcodm0sIGVy
YVN0cmluZyhtX2VyYSkpKTsKIAogICAgIGlmIChtX3llYXIgIT0gWWVhcjo6Tm9uZSkKLSAgICAg
ICAgb3B0aW9ucy0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT55ZWFyLCBqc05vbnRy
aXZpYWxTdHJpbmcoJmV4ZWMsIHllYXJTdHJpbmcobV95ZWFyKSkpOworICAgICAgICBvcHRpb25z
LT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnllYXIsIGpzTm9udHJpdmlhbFN0cmlu
Zyh2bSwgeWVhclN0cmluZyhtX3llYXIpKSk7CiAKICAgICBpZiAobV9tb250aCAhPSBNb250aDo6
Tm9uZSkKLSAgICAgICAgb3B0aW9ucy0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5t
b250aCwganNOb250cml2aWFsU3RyaW5nKCZleGVjLCBtb250aFN0cmluZyhtX21vbnRoKSkpOwor
ICAgICAgICBvcHRpb25zLT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm1vbnRoLCBq
c05vbnRyaXZpYWxTdHJpbmcodm0sIG1vbnRoU3RyaW5nKG1fbW9udGgpKSk7CiAKICAgICBpZiAo
bV9kYXkgIT0gRGF5OjpOb25lKQotICAgICAgICBvcHRpb25zLT5wdXREaXJlY3Qodm0sIHZtLnBy
b3BlcnR5TmFtZXMtPmRheSwganNOb250cml2aWFsU3RyaW5nKCZleGVjLCBkYXlTdHJpbmcobV9k
YXkpKSk7CisgICAgICAgIG9wdGlvbnMtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+
ZGF5LCBqc05vbnRyaXZpYWxTdHJpbmcodm0sIGRheVN0cmluZyhtX2RheSkpKTsKIAogICAgIGlm
IChtX2hvdXIgIT0gSG91cjo6Tm9uZSkKLSAgICAgICAgb3B0aW9ucy0+cHV0RGlyZWN0KHZtLCB2
bS5wcm9wZXJ0eU5hbWVzLT5ob3VyLCBqc05vbnRyaXZpYWxTdHJpbmcoJmV4ZWMsIGhvdXJTdHJp
bmcobV9ob3VyKSkpOworICAgICAgICBvcHRpb25zLT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5
TmFtZXMtPmhvdXIsIGpzTm9udHJpdmlhbFN0cmluZyh2bSwgaG91clN0cmluZyhtX2hvdXIpKSk7
CiAKICAgICBpZiAoIW1faG91ckN5Y2xlLmlzTnVsbCgpKSB7Ci0gICAgICAgIG9wdGlvbnMtPnB1
dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+aG91ckN5Y2xlLCBqc05vbnRyaXZpYWxTdHJp
bmcoJmV4ZWMsIG1faG91ckN5Y2xlKSk7CisgICAgICAgIG9wdGlvbnMtPnB1dERpcmVjdCh2bSwg
dm0ucHJvcGVydHlOYW1lcy0+aG91ckN5Y2xlLCBqc05vbnRyaXZpYWxTdHJpbmcodm0sIG1faG91
ckN5Y2xlKSk7CiAgICAgICAgIG9wdGlvbnMtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1l
cy0+aG91cjEyLCBqc0Jvb2xlYW4obV9ob3VyQ3ljbGUgPT0gImgxMSIgfHwgbV9ob3VyQ3ljbGUg
PT0gImgxMiIpKTsKICAgICB9CiAKICAgICBpZiAobV9taW51dGUgIT0gTWludXRlOjpOb25lKQot
ICAgICAgICBvcHRpb25zLT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm1pbnV0ZSwg
anNOb250cml2aWFsU3RyaW5nKCZleGVjLCBtaW51dGVTdHJpbmcobV9taW51dGUpKSk7CisgICAg
ICAgIG9wdGlvbnMtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bWludXRlLCBqc05v
bnRyaXZpYWxTdHJpbmcodm0sIG1pbnV0ZVN0cmluZyhtX21pbnV0ZSkpKTsKIAogICAgIGlmICht
X3NlY29uZCAhPSBTZWNvbmQ6Ok5vbmUpCi0gICAgICAgIG9wdGlvbnMtPnB1dERpcmVjdCh2bSwg
dm0ucHJvcGVydHlOYW1lcy0+c2Vjb25kLCBqc05vbnRyaXZpYWxTdHJpbmcoJmV4ZWMsIHNlY29u
ZFN0cmluZyhtX3NlY29uZCkpKTsKKyAgICAgICAgb3B0aW9ucy0+cHV0RGlyZWN0KHZtLCB2bS5w
cm9wZXJ0eU5hbWVzLT5zZWNvbmQsIGpzTm9udHJpdmlhbFN0cmluZyh2bSwgc2Vjb25kU3RyaW5n
KG1fc2Vjb25kKSkpOwogCiAgICAgaWYgKG1fdGltZVpvbmVOYW1lICE9IFRpbWVab25lTmFtZTo6
Tm9uZSkKLSAgICAgICAgb3B0aW9ucy0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT50
aW1lWm9uZU5hbWUsIGpzTm9udHJpdmlhbFN0cmluZygmZXhlYywgdGltZVpvbmVOYW1lU3RyaW5n
KG1fdGltZVpvbmVOYW1lKSkpOworICAgICAgICBvcHRpb25zLT5wdXREaXJlY3Qodm0sIHZtLnBy
b3BlcnR5TmFtZXMtPnRpbWVab25lTmFtZSwganNOb250cml2aWFsU3RyaW5nKHZtLCB0aW1lWm9u
ZU5hbWVTdHJpbmcobV90aW1lWm9uZU5hbWUpKSk7CiAKICAgICByZXR1cm4gb3B0aW9uczsKIH0K
QEAgLTkxNSw3ICs5MTUsNyBAQCBKU1ZhbHVlIEludGxEYXRlVGltZUZvcm1hdDo6Zm9ybWF0KEV4
ZWNTCiAgICAgaWYgKFVfRkFJTFVSRShzdGF0dXMpKQogICAgICAgICByZXR1cm4gdGhyb3dUeXBl
RXJyb3IoJmV4ZWMsIHNjb3BlLCAiZmFpbGVkIHRvIGZvcm1hdCBkYXRlIHZhbHVlIl9zKTsKIAot
ICAgIHJldHVybiBqc1N0cmluZygmZXhlYywgU3RyaW5nKHJlc3VsdC5kYXRhKCksIHJlc3VsdExl
bmd0aCkpOworICAgIHJldHVybiBqc1N0cmluZyh2bSwgU3RyaW5nKHJlc3VsdC5kYXRhKCksIHJl
c3VsdExlbmd0aCkpOwogfQogCiAjaWYgSlNDX0lDVV9IQVNfVUZJRUxEUE9TSVRFUgpAQCAtMTAx
OCw4ICsxMDE4LDggQEAgSlNWYWx1ZSBJbnRsRGF0ZVRpbWVGb3JtYXQ6OmZvcm1hdFRvUGFydAog
ICAgICAgICByZXR1cm4gdGhyb3dPdXRPZk1lbW9yeUVycm9yKCZleGVjLCBzY29wZSk7CiAKICAg
ICBhdXRvIHJlc3VsdFN0cmluZyA9IFN0cmluZyhyZXN1bHQuZGF0YSgpLCByZXN1bHRMZW5ndGgp
OwotICAgIGF1dG8gdHlwZVByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZt
LCAidHlwZSIpOwotICAgIGF1dG8gbGl0ZXJhbFN0cmluZyA9IGpzU3RyaW5nKCZleGVjLCAibGl0
ZXJhbCJfcyk7CisgICAgYXV0byB0eXBlUHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbVN0
cmluZyh2bSwgInR5cGUiKTsKKyAgICBhdXRvIGxpdGVyYWxTdHJpbmcgPSBqc1N0cmluZyh2bSwg
ImxpdGVyYWwiX3MpOwogCiAgICAgaW50MzJfdCBwcmV2aW91c0VuZEluZGV4ID0gMDsKICAgICBp
bnQzMl90IGJlZ2luSW5kZXggPSAwOwpAQCAtMTAzMCw3ICsxMDMwLDcgQEAgSlNWYWx1ZSBJbnRs
RGF0ZVRpbWVGb3JtYXQ6OmZvcm1hdFRvUGFydAogICAgICAgICAgICAgYmVnaW5JbmRleCA9IGVu
ZEluZGV4ID0gcmVzdWx0TGVuZ3RoOwogCiAgICAgICAgIGlmIChwcmV2aW91c0VuZEluZGV4IDwg
YmVnaW5JbmRleCkgewotICAgICAgICAgICAgYXV0byB2YWx1ZSA9IGpzU3RyaW5nKCZleGVjLCBy
ZXN1bHRTdHJpbmcuc3Vic3RyaW5nKHByZXZpb3VzRW5kSW5kZXgsIGJlZ2luSW5kZXggLSBwcmV2
aW91c0VuZEluZGV4KSk7CisgICAgICAgICAgICBhdXRvIHZhbHVlID0ganNTdHJpbmcodm0sIHJl
c3VsdFN0cmluZy5zdWJzdHJpbmcocHJldmlvdXNFbmRJbmRleCwgYmVnaW5JbmRleCAtIHByZXZp
b3VzRW5kSW5kZXgpKTsKICAgICAgICAgICAgIEpTT2JqZWN0KiBwYXJ0ID0gY29uc3RydWN0RW1w
dHlPYmplY3QoJmV4ZWMpOwogICAgICAgICAgICAgcGFydC0+cHV0RGlyZWN0KHZtLCB0eXBlUHJv
cGVydHlOYW1lLCBsaXRlcmFsU3RyaW5nKTsKICAgICAgICAgICAgIHBhcnQtPnB1dERpcmVjdCh2
bSwgdm0ucHJvcGVydHlOYW1lcy0+dmFsdWUsIHZhbHVlKTsKQEAgLTEwNDAsOCArMTA0MCw4IEBA
IEpTVmFsdWUgSW50bERhdGVUaW1lRm9ybWF0Ojpmb3JtYXRUb1BhcnQKICAgICAgICAgcHJldmlv
dXNFbmRJbmRleCA9IGVuZEluZGV4OwogCiAgICAgICAgIGlmIChmaWVsZFR5cGUgPj0gMCkgewot
ICAgICAgICAgICAgYXV0byB0eXBlID0ganNTdHJpbmcoJmV4ZWMsIHBhcnRUeXBlU3RyaW5nKFVE
YXRlRm9ybWF0RmllbGQoZmllbGRUeXBlKSkpOwotICAgICAgICAgICAgYXV0byB2YWx1ZSA9IGpz
U3RyaW5nKCZleGVjLCByZXN1bHRTdHJpbmcuc3Vic3RyaW5nKGJlZ2luSW5kZXgsIGVuZEluZGV4
IC0gYmVnaW5JbmRleCkpOworICAgICAgICAgICAgYXV0byB0eXBlID0ganNTdHJpbmcodm0sIHBh
cnRUeXBlU3RyaW5nKFVEYXRlRm9ybWF0RmllbGQoZmllbGRUeXBlKSkpOworICAgICAgICAgICAg
YXV0byB2YWx1ZSA9IGpzU3RyaW5nKHZtLCByZXN1bHRTdHJpbmcuc3Vic3RyaW5nKGJlZ2luSW5k
ZXgsIGVuZEluZGV4IC0gYmVnaW5JbmRleCkpOwogICAgICAgICAgICAgSlNPYmplY3QqIHBhcnQg
PSBjb25zdHJ1Y3RFbXB0eU9iamVjdCgmZXhlYyk7CiAgICAgICAgICAgICBwYXJ0LT5wdXREaXJl
Y3Qodm0sIHR5cGVQcm9wZXJ0eU5hbWUsIHR5cGUpOwogICAgICAgICAgICAgcGFydC0+cHV0RGly
ZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT52YWx1ZSwgdmFsdWUpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0UHJvdG90eXBlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3Jt
YXRQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXRQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxNSBBbmR5IFZhbldhZ29u
ZXIgKGFuZHlAdmFud2Fnb25lci5mYW1pbHkpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC04OSw3ICs4OSw3IEBAIHZvaWQgSW50bERhdGVUaW1lRm9ybWF0UHJvdG90eXBlOjpm
aW5pc2gKICAgICBVTlVTRURfUEFSQU0oZ2xvYmFsT2JqZWN0KTsKICNlbmRpZgogCi0gICAgcHV0
RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPnRvU3RyaW5nVGFn
U3ltYm9sLCBqc1N0cmluZygmdm0sICJPYmplY3QiKSwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRF
bnVtIHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KTsKKyAgICBwdXREaXJlY3RXaXRob3V0
VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+dG9TdHJpbmdUYWdTeW1ib2wsIGpzU3Ry
aW5nKHZtLCAiT2JqZWN0IiksIFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8IFByb3BlcnR5
QXR0cmlidXRlOjpSZWFkT25seSk7CiB9CiAKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIEludGxEYXRlVGltZUZvcm1hdEZ1bmNGb3JtYXREYXRlVGltZShFeGVjU3RhdGUqIHN0
YXRlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1h
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51
bWJlckZvcm1hdC5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEs
NyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxNSBBbmR5IFZhbldhZ29uZXIgKGFuZHlAdmFu
d2Fnb25lci5mYW1pbHkpCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTYgU3Vrb2xzYWsgU2Frc2h1d29u
ZyAoc3Vrb2xzYWtAZ21haWwuY29tKQotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0xOTUsNyArMTk1LDcgQEAgdm9pZCBJbnRsTnVtYmVyRm9ybWF0Ojppbml0aWFsaXpl
TnVtYmVyRgogCiAgICAgbV9udW1iZXJpbmdTeXN0ZW0gPSByZXN1bHQuZ2V0KCJudSJfcyk7CiAK
LSAgICBTdHJpbmcgc3R5bGVTdHJpbmcgPSBpbnRsU3RyaW5nT3B0aW9uKHN0YXRlLCBvcHRpb25z
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgInN0eWxlIiksIHsgImRlY2ltYWwiLCAicGVy
Y2VudCIsICJjdXJyZW5jeSIgfSwgInN0eWxlIG11c3QgYmUgZWl0aGVyIFwiZGVjaW1hbFwiLCBc
InBlcmNlbnRcIiwgb3IgXCJjdXJyZW5jeVwiIiwgImRlY2ltYWwiKTsKKyAgICBTdHJpbmcgc3R5
bGVTdHJpbmcgPSBpbnRsU3RyaW5nT3B0aW9uKHN0YXRlLCBvcHRpb25zLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCAic3R5bGUiKSwgeyAiZGVjaW1hbCIsICJwZXJjZW50IiwgImN1cnJlbmN5
IiB9LCAic3R5bGUgbXVzdCBiZSBlaXRoZXIgXCJkZWNpbWFsXCIsIFwicGVyY2VudFwiLCBvciBc
ImN1cnJlbmN5XCIiLCAiZGVjaW1hbCIpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IHZvaWQoKSk7CiAgICAgaWYgKHN0eWxlU3RyaW5nID09ICJkZWNpbWFsIikKICAgICAgICAgbV9z
dHlsZSA9IFN0eWxlOjpEZWNpbWFsOwpAQCAtMjA2LDcgKzIwNiw3IEBAIHZvaWQgSW50bE51bWJl
ckZvcm1hdDo6aW5pdGlhbGl6ZU51bWJlckYKICAgICBlbHNlCiAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogCi0gICAgU3RyaW5nIGN1cnJlbmN5ID0gaW50bFN0cmluZ09wdGlvbihzdGF0
ZSwgb3B0aW9ucywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJjdXJyZW5jeSIpLCB7IH0s
IG51bGxwdHIsIG51bGxwdHIpOworICAgIFN0cmluZyBjdXJyZW5jeSA9IGludGxTdHJpbmdPcHRp
b24oc3RhdGUsIG9wdGlvbnMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJjdXJyZW5jeSIp
LCB7IH0sIG51bGxwdHIsIG51bGxwdHIpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IHZvaWQoKSk7CiAgICAgaWYgKCFjdXJyZW5jeS5pc051bGwoKSkgewogICAgICAgICBpZiAoY3Vy
cmVuY3kubGVuZ3RoKCkgIT0gMyB8fCAhY3VycmVuY3kuaXNBbGxTcGVjaWFsQ2hhcmFjdGVyczxp
c0FTQ0lJQWxwaGE+KCkpIHsKQEAgLTIyNyw3ICsyMjcsNyBAQCB2b2lkIEludGxOdW1iZXJGb3Jt
YXQ6OmluaXRpYWxpemVOdW1iZXJGCiAgICAgICAgIGN1cnJlbmN5RGlnaXRzID0gY29tcHV0ZUN1
cnJlbmN5RGlnaXRzKGN1cnJlbmN5KTsKICAgICB9CiAKLSAgICBTdHJpbmcgY3VycmVuY3lEaXNw
bGF5U3RyaW5nID0gaW50bFN0cmluZ09wdGlvbihzdGF0ZSwgb3B0aW9ucywgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZygmdm0sICJjdXJyZW5jeURpc3BsYXkiKSwgeyAiY29kZSIsICJzeW1ib2wiLCAi
bmFtZSIgfSwgImN1cnJlbmN5RGlzcGxheSBtdXN0IGJlIGVpdGhlciBcImNvZGVcIiwgXCJzeW1i
b2xcIiwgb3IgXCJuYW1lXCIiLCAic3ltYm9sIik7CisgICAgU3RyaW5nIGN1cnJlbmN5RGlzcGxh
eVN0cmluZyA9IGludGxTdHJpbmdPcHRpb24oc3RhdGUsIG9wdGlvbnMsIElkZW50aWZpZXI6OmZy
b21TdHJpbmcodm0sICJjdXJyZW5jeURpc3BsYXkiKSwgeyAiY29kZSIsICJzeW1ib2wiLCAibmFt
ZSIgfSwgImN1cnJlbmN5RGlzcGxheSBtdXN0IGJlIGVpdGhlciBcImNvZGVcIiwgXCJzeW1ib2xc
Iiwgb3IgXCJuYW1lXCIiLCAic3ltYm9sIik7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgdm9pZCgpKTsKICAgICBpZiAobV9zdHlsZSA9PSBTdHlsZTo6Q3VycmVuY3kpIHsKICAgICAg
ICAgaWYgKGN1cnJlbmN5RGlzcGxheVN0cmluZyA9PSAiY29kZSIpCkBAIC0yNDAsMTMgKzI0MCwx
MyBAQCB2b2lkIEludGxOdW1iZXJGb3JtYXQ6OmluaXRpYWxpemVOdW1iZXJGCiAgICAgICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CiAKLSAgICB1bnNpZ25lZCBtaW5pbXVtSW50
ZWdlckRpZ2l0cyA9IGludGxOdW1iZXJPcHRpb24oc3RhdGUsIG9wdGlvbnMsIElkZW50aWZpZXI6
OmZyb21TdHJpbmcoJnZtLCAibWluaW11bUludGVnZXJEaWdpdHMiKSwgMSwgMjEsIDEpOworICAg
IHVuc2lnbmVkIG1pbmltdW1JbnRlZ2VyRGlnaXRzID0gaW50bE51bWJlck9wdGlvbihzdGF0ZSwg
b3B0aW9ucywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIm1pbmltdW1JbnRlZ2VyRGlnaXRz
IiksIDEsIDIxLCAxKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwog
ICAgIG1fbWluaW11bUludGVnZXJEaWdpdHMgPSBtaW5pbXVtSW50ZWdlckRpZ2l0czsKIAogICAg
IHVuc2lnbmVkIG1pbmltdW1GcmFjdGlvbkRpZ2l0c0RlZmF1bHQgPSAobV9zdHlsZSA9PSBTdHls
ZTo6Q3VycmVuY3kpID8gY3VycmVuY3lEaWdpdHMgOiAwOwogCi0gICAgdW5zaWduZWQgbWluaW11
bUZyYWN0aW9uRGlnaXRzID0gaW50bE51bWJlck9wdGlvbihzdGF0ZSwgb3B0aW9ucywgSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZygmdm0sICJtaW5pbXVtRnJhY3Rpb25EaWdpdHMiKSwgMCwgMjAsIG1p
bmltdW1GcmFjdGlvbkRpZ2l0c0RlZmF1bHQpOworICAgIHVuc2lnbmVkIG1pbmltdW1GcmFjdGlv
bkRpZ2l0cyA9IGludGxOdW1iZXJPcHRpb24oc3RhdGUsIG9wdGlvbnMsIElkZW50aWZpZXI6OmZy
b21TdHJpbmcodm0sICJtaW5pbXVtRnJhY3Rpb25EaWdpdHMiKSwgMCwgMjAsIG1pbmltdW1GcmFj
dGlvbkRpZ2l0c0RlZmF1bHQpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQo
KSk7CiAgICAgbV9taW5pbXVtRnJhY3Rpb25EaWdpdHMgPSBtaW5pbXVtRnJhY3Rpb25EaWdpdHM7
CiAKQEAgLTI1OCwyNyArMjU4LDI3IEBAIHZvaWQgSW50bE51bWJlckZvcm1hdDo6aW5pdGlhbGl6
ZU51bWJlckYKICAgICBlbHNlCiAgICAgICAgIG1heGltdW1GcmFjdGlvbkRpZ2l0c0RlZmF1bHQg
PSBzdGQ6Om1heChtaW5pbXVtRnJhY3Rpb25EaWdpdHMsIDN1KTsKIAotICAgIHVuc2lnbmVkIG1h
eGltdW1GcmFjdGlvbkRpZ2l0cyA9IGludGxOdW1iZXJPcHRpb24oc3RhdGUsIG9wdGlvbnMsIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAibWF4aW11bUZyYWN0aW9uRGlnaXRzIiksIG1pbmlt
dW1GcmFjdGlvbkRpZ2l0cywgMjAsIG1heGltdW1GcmFjdGlvbkRpZ2l0c0RlZmF1bHQpOworICAg
IHVuc2lnbmVkIG1heGltdW1GcmFjdGlvbkRpZ2l0cyA9IGludGxOdW1iZXJPcHRpb24oc3RhdGUs
IG9wdGlvbnMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJtYXhpbXVtRnJhY3Rpb25EaWdp
dHMiKSwgbWluaW11bUZyYWN0aW9uRGlnaXRzLCAyMCwgbWF4aW11bUZyYWN0aW9uRGlnaXRzRGVm
YXVsdCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKICAgICBtX21h
eGltdW1GcmFjdGlvbkRpZ2l0cyA9IG1heGltdW1GcmFjdGlvbkRpZ2l0czsKIAotICAgIEpTVmFs
dWUgbWluaW11bVNpZ25pZmljYW50RGlnaXRzVmFsdWUgPSBvcHRpb25zLT5nZXQoJnN0YXRlLCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgIm1pbmltdW1TaWduaWZpY2FudERpZ2l0cyIpKTsK
KyAgICBKU1ZhbHVlIG1pbmltdW1TaWduaWZpY2FudERpZ2l0c1ZhbHVlID0gb3B0aW9ucy0+Z2V0
KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIm1pbmltdW1TaWduaWZpY2FudERp
Z2l0cyIpKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogCi0gICAg
SlNWYWx1ZSBtYXhpbXVtU2lnbmlmaWNhbnREaWdpdHNWYWx1ZSA9IG9wdGlvbnMtPmdldCgmc3Rh
dGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAibWF4aW11bVNpZ25pZmljYW50RGlnaXRz
IikpOworICAgIEpTVmFsdWUgbWF4aW11bVNpZ25pZmljYW50RGlnaXRzVmFsdWUgPSBvcHRpb25z
LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAibWF4aW11bVNpZ25pZmlj
YW50RGlnaXRzIikpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAK
ICAgICBpZiAoIW1pbmltdW1TaWduaWZpY2FudERpZ2l0c1ZhbHVlLmlzVW5kZWZpbmVkKCkgfHwg
IW1heGltdW1TaWduaWZpY2FudERpZ2l0c1ZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKLSAgICAgICAg
dW5zaWduZWQgbWluaW11bVNpZ25pZmljYW50RGlnaXRzID0gaW50bERlZmF1bHROdW1iZXJPcHRp
b24oc3RhdGUsIG1pbmltdW1TaWduaWZpY2FudERpZ2l0c1ZhbHVlLCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKCZ2bSwgIm1pbmltdW1TaWduaWZpY2FudERpZ2l0cyIpLCAxLCAyMSwgMSk7CisgICAg
ICAgIHVuc2lnbmVkIG1pbmltdW1TaWduaWZpY2FudERpZ2l0cyA9IGludGxEZWZhdWx0TnVtYmVy
T3B0aW9uKHN0YXRlLCBtaW5pbXVtU2lnbmlmaWNhbnREaWdpdHNWYWx1ZSwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZyh2bSwgIm1pbmltdW1TaWduaWZpY2FudERpZ2l0cyIpLCAxLCAyMSwgMSk7CiAg
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7Ci0gICAgICAgIHVuc2ln
bmVkIG1heGltdW1TaWduaWZpY2FudERpZ2l0cyA9IGludGxEZWZhdWx0TnVtYmVyT3B0aW9uKHN0
YXRlLCBtYXhpbXVtU2lnbmlmaWNhbnREaWdpdHNWYWx1ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zygmdm0sICJtYXhpbXVtU2lnbmlmaWNhbnREaWdpdHMiKSwgbWluaW11bVNpZ25pZmljYW50RGln
aXRzLCAyMSwgMjEpOworICAgICAgICB1bnNpZ25lZCBtYXhpbXVtU2lnbmlmaWNhbnREaWdpdHMg
PSBpbnRsRGVmYXVsdE51bWJlck9wdGlvbihzdGF0ZSwgbWF4aW11bVNpZ25pZmljYW50RGlnaXRz
VmFsdWUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJtYXhpbXVtU2lnbmlmaWNhbnREaWdp
dHMiKSwgbWluaW11bVNpZ25pZmljYW50RGlnaXRzLCAyMSwgMjEpOwogICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogICAgICAgICBtX21pbmltdW1TaWduaWZpY2Fu
dERpZ2l0cyA9IG1pbmltdW1TaWduaWZpY2FudERpZ2l0czsKICAgICAgICAgbV9tYXhpbXVtU2ln
bmlmaWNhbnREaWdpdHMgPSBtYXhpbXVtU2lnbmlmaWNhbnREaWdpdHM7CiAgICAgfQogCiAgICAg
Ym9vbCB1c2VzRmFsbGJhY2s7Ci0gICAgYm9vbCB1c2VHcm91cGluZyA9IGludGxCb29sZWFuT3B0
aW9uKHN0YXRlLCBvcHRpb25zLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgInVzZUdyb3Vw
aW5nIiksIHVzZXNGYWxsYmFjayk7CisgICAgYm9vbCB1c2VHcm91cGluZyA9IGludGxCb29sZWFu
T3B0aW9uKHN0YXRlLCBvcHRpb25zLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAidXNlR3Jv
dXBpbmciKSwgdXNlc0ZhbGxiYWNrKTsKICAgICBpZiAodXNlc0ZhbGxiYWNrKQogICAgICAgICB1
c2VHcm91cGluZyA9IHRydWU7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgp
KTsKQEAgLTM2NCw3ICszNjQsNyBAQCBKU1ZhbHVlIEludGxOdW1iZXJGb3JtYXQ6OmZvcm1hdE51
bWJlcihFCiAgICAgaWYgKFVfRkFJTFVSRShzdGF0dXMpKQogICAgICAgICByZXR1cm4gdGhyb3dF
eGNlcHRpb24oJnN0YXRlLCBzY29wZSwgY3JlYXRlRXJyb3IoJnN0YXRlLCAiRmFpbGVkIHRvIGZv
cm1hdCBhIG51bWJlci4iX3MpKTsKIAotICAgIHJldHVybiBqc1N0cmluZygmc3RhdGUsIFN0cmlu
ZyhidWZmZXIuZGF0YSgpLCBsZW5ndGgpKTsKKyAgICByZXR1cm4ganNTdHJpbmcodm0sIFN0cmlu
ZyhidWZmZXIuZGF0YSgpLCBsZW5ndGgpKTsKIH0KIAogQVNDSUlMaXRlcmFsIEludGxOdW1iZXJG
b3JtYXQ6OnN0eWxlU3RyaW5nKFN0eWxlIHN0eWxlKQpAQCAtNDE1LDIyICs0MTUsMjIgQEAgSlNP
YmplY3QqIEludGxOdW1iZXJGb3JtYXQ6OnJlc29sdmVkT3B0aQogICAgIH0KIAogICAgIEpTT2Jq
ZWN0KiBvcHRpb25zID0gY29uc3RydWN0RW1wdHlPYmplY3QoJnN0YXRlKTsKLSAgICBvcHRpb25z
LT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxvY2FsZSwganNTdHJpbmcoJnN0YXRl
LCBtX2xvY2FsZSkpOwotICAgIG9wdGlvbnMtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZygmdm0sICJudW1iZXJpbmdTeXN0ZW0iKSwganNTdHJpbmcoJnN0YXRlLCBtX251bWJl
cmluZ1N5c3RlbSkpOwotICAgIG9wdGlvbnMtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZygmdm0sICJzdHlsZSIpLCBqc05vbnRyaXZpYWxTdHJpbmcoJnN0YXRlLCBzdHlsZVN0
cmluZyhtX3N0eWxlKSkpOworICAgIG9wdGlvbnMtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlO
YW1lcy0+bG9jYWxlLCBqc1N0cmluZyh2bSwgbV9sb2NhbGUpKTsKKyAgICBvcHRpb25zLT5wdXRE
aXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJudW1iZXJpbmdTeXN0ZW0iKSwg
anNTdHJpbmcodm0sIG1fbnVtYmVyaW5nU3lzdGVtKSk7CisgICAgb3B0aW9ucy0+cHV0RGlyZWN0
KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAic3R5bGUiKSwganNOb250cml2aWFsU3Ry
aW5nKHZtLCBzdHlsZVN0cmluZyhtX3N0eWxlKSkpOwogICAgIGlmIChtX3N0eWxlID09IFN0eWxl
OjpDdXJyZW5jeSkgewotICAgICAgICBvcHRpb25zLT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6
OmZyb21TdHJpbmcoJnZtLCAiY3VycmVuY3kiKSwganNOb250cml2aWFsU3RyaW5nKCZzdGF0ZSwg
bV9jdXJyZW5jeSkpOwotICAgICAgICBvcHRpb25zLT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6
OmZyb21TdHJpbmcoJnZtLCAiY3VycmVuY3lEaXNwbGF5IiksIGpzTm9udHJpdmlhbFN0cmluZygm
c3RhdGUsIGN1cnJlbmN5RGlzcGxheVN0cmluZyhtX2N1cnJlbmN5RGlzcGxheSkpKTsKKyAgICAg
ICAgb3B0aW9ucy0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiY3Vy
cmVuY3kiKSwganNOb250cml2aWFsU3RyaW5nKHZtLCBtX2N1cnJlbmN5KSk7CisgICAgICAgIG9w
dGlvbnMtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImN1cnJlbmN5
RGlzcGxheSIpLCBqc05vbnRyaXZpYWxTdHJpbmcodm0sIGN1cnJlbmN5RGlzcGxheVN0cmluZyht
X2N1cnJlbmN5RGlzcGxheSkpKTsKICAgICB9Ci0gICAgb3B0aW9ucy0+cHV0RGlyZWN0KHZtLCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgIm1pbmltdW1JbnRlZ2VyRGlnaXRzIiksIGpzTnVt
YmVyKG1fbWluaW11bUludGVnZXJEaWdpdHMpKTsKLSAgICBvcHRpb25zLT5wdXREaXJlY3Qodm0s
IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAibWluaW11bUZyYWN0aW9uRGlnaXRzIiksIGpz
TnVtYmVyKG1fbWluaW11bUZyYWN0aW9uRGlnaXRzKSk7Ci0gICAgb3B0aW9ucy0+cHV0RGlyZWN0
KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgIm1heGltdW1GcmFjdGlvbkRpZ2l0cyIp
LCBqc051bWJlcihtX21heGltdW1GcmFjdGlvbkRpZ2l0cykpOworICAgIG9wdGlvbnMtPnB1dERp
cmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIm1pbmltdW1JbnRlZ2VyRGlnaXRz
IiksIGpzTnVtYmVyKG1fbWluaW11bUludGVnZXJEaWdpdHMpKTsKKyAgICBvcHRpb25zLT5wdXRE
aXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJtaW5pbXVtRnJhY3Rpb25EaWdp
dHMiKSwganNOdW1iZXIobV9taW5pbXVtRnJhY3Rpb25EaWdpdHMpKTsKKyAgICBvcHRpb25zLT5w
dXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJtYXhpbXVtRnJhY3Rpb25E
aWdpdHMiKSwganNOdW1iZXIobV9tYXhpbXVtRnJhY3Rpb25EaWdpdHMpKTsKICAgICBpZiAobV9t
aW5pbXVtU2lnbmlmaWNhbnREaWdpdHMpIHsKICAgICAgICAgQVNTRVJUKG1fbWF4aW11bVNpZ25p
ZmljYW50RGlnaXRzKTsKLSAgICAgICAgb3B0aW9ucy0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKCZ2bSwgIm1pbmltdW1TaWduaWZpY2FudERpZ2l0cyIpLCBqc051bWJlciht
X21pbmltdW1TaWduaWZpY2FudERpZ2l0cykpOwotICAgICAgICBvcHRpb25zLT5wdXREaXJlY3Qo
dm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAibWF4aW11bVNpZ25pZmljYW50RGlnaXRz
IiksIGpzTnVtYmVyKG1fbWF4aW11bVNpZ25pZmljYW50RGlnaXRzKSk7CisgICAgICAgIG9wdGlv
bnMtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIm1pbmltdW1TaWdu
aWZpY2FudERpZ2l0cyIpLCBqc051bWJlcihtX21pbmltdW1TaWduaWZpY2FudERpZ2l0cykpOwor
ICAgICAgICBvcHRpb25zLT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0s
ICJtYXhpbXVtU2lnbmlmaWNhbnREaWdpdHMiKSwganNOdW1iZXIobV9tYXhpbXVtU2lnbmlmaWNh
bnREaWdpdHMpKTsKICAgICB9Ci0gICAgb3B0aW9ucy0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKCZ2bSwgInVzZUdyb3VwaW5nIiksIGpzQm9vbGVhbihtX3VzZUdyb3VwaW5n
KSk7CisgICAgb3B0aW9ucy0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZt
LCAidXNlR3JvdXBpbmciKSwganNCb29sZWFuKG1fdXNlR3JvdXBpbmcpKTsKICAgICByZXR1cm4g
b3B0aW9uczsKIH0KIApAQCAtNTM0LDggKzUzNCw4IEBAIEpTVmFsdWUgSW50bE51bWJlckZvcm1h
dDo6Zm9ybWF0VG9QYXJ0cygKICAgICB1bnNpZ25lZCBpbmRleCA9IDA7CiAKICAgICBhdXRvIHJl
c3VsdFN0cmluZyA9IFN0cmluZyhyZXN1bHQuZGF0YSgpLCByZXN1bHRMZW5ndGgpOwotICAgIGF1
dG8gdHlwZVByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAidHlwZSIp
OwotICAgIGF1dG8gbGl0ZXJhbFN0cmluZyA9IGpzU3RyaW5nKCZleGVjLCAibGl0ZXJhbCJfcyk7
CisgICAgYXV0byB0eXBlUHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwg
InR5cGUiKTsKKyAgICBhdXRvIGxpdGVyYWxTdHJpbmcgPSBqc1N0cmluZyh2bSwgImxpdGVyYWwi
X3MpOwogCiAgICAgaW50MzJfdCBjdXJyZW50SW5kZXggPSAwOwogICAgIHdoaWxlIChjdXJyZW50
SW5kZXggPCByZXN1bHRMZW5ndGgpIHsKQEAgLTU0Myw4ICs1NDMsOCBAQCBKU1ZhbHVlIEludGxO
dW1iZXJGb3JtYXQ6OmZvcm1hdFRvUGFydHMoCiAgICAgICAgIGF1dG8gZmllbGRUeXBlID0gZmll
bGRzW2N1cnJlbnRJbmRleF0udHlwZTsKICAgICAgICAgd2hpbGUgKGN1cnJlbnRJbmRleCA8IHJl
c3VsdExlbmd0aCAmJiBmaWVsZHNbY3VycmVudEluZGV4XS50eXBlID09IGZpZWxkVHlwZSkKICAg
ICAgICAgICAgICsrY3VycmVudEluZGV4OwotICAgICAgICBhdXRvIHBhcnRUeXBlID0gZmllbGRU
eXBlID09IGxpdGVyYWxGaWVsZFR5cGUgPyBsaXRlcmFsU3RyaW5nIDoganNTdHJpbmcoJmV4ZWMs
IHBhcnRUeXBlU3RyaW5nKFVOdW1iZXJGb3JtYXRGaWVsZHMoZmllbGRUeXBlKSwgdmFsdWUpKTsK
LSAgICAgICAgYXV0byBwYXJ0VmFsdWUgPSBqc1N1YnN0cmluZygmdm0sIHJlc3VsdFN0cmluZywg
c3RhcnRJbmRleCwgY3VycmVudEluZGV4IC0gc3RhcnRJbmRleCk7CisgICAgICAgIGF1dG8gcGFy
dFR5cGUgPSBmaWVsZFR5cGUgPT0gbGl0ZXJhbEZpZWxkVHlwZSA/IGxpdGVyYWxTdHJpbmcgOiBq
c1N0cmluZyh2bSwgcGFydFR5cGVTdHJpbmcoVU51bWJlckZvcm1hdEZpZWxkcyhmaWVsZFR5cGUp
LCB2YWx1ZSkpOworICAgICAgICBhdXRvIHBhcnRWYWx1ZSA9IGpzU3Vic3RyaW5nKHZtLCByZXN1
bHRTdHJpbmcsIHN0YXJ0SW5kZXgsIGN1cnJlbnRJbmRleCAtIHN0YXJ0SW5kZXgpOwogICAgICAg
ICBKU09iamVjdCogcGFydCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KCZleGVjKTsKICAgICAgICAg
cGFydC0+cHV0RGlyZWN0KHZtLCB0eXBlUHJvcGVydHlOYW1lLCBwYXJ0VHlwZSk7CiAgICAgICAg
IHBhcnQtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+dmFsdWUsIHBhcnRWYWx1ZSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0UHJv
dG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bnRsTnVtYmVyRm9ybWF0UHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdFByb3RvdHlwZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE1IEFu
ZHkgVmFuV2Fnb25lciAoYW5keUB2YW53YWdvbmVyLmZhbWlseSkKLSAqIENvcHlyaWdodCAoQykg
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTYtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTg2LDcgKzg2LDcgQEAgdm9pZCBJbnRsTnVtYmVyRm9ybWF0UHJv
dG90eXBlOjpmaW5pc2hDcgogICAgIFVOVVNFRF9QQVJBTShnbG9iYWxPYmplY3QpOwogI2VuZGlm
CiAKLSAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+
dG9TdHJpbmdUYWdTeW1ib2wsIGpzU3RyaW5nKCZ2bSwgIk9iamVjdCIpLCBQcm9wZXJ0eUF0dHJp
YnV0ZTo6RG9udEVudW0gfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpOworICAgIHB1dERp
cmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT50b1N0cmluZ1RhZ1N5
bWJvbCwganNTdHJpbmcodm0sICJPYmplY3QiKSwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVt
IHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KTsKIH0KIAogc3RhdGljIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgSW50bE51bWJlckZvcm1hdEZ1bmNGb3JtYXROdW1iZXIoRXhlY1N0
YXRlKiBzdGF0ZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxPYmpl
Y3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxP
YmplY3QuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQW5keSBWYW5XYWdvbmVyIChhbmR5QHZhbndhZ29uZXIuZmFt
aWx5KQogICogQ29weXJpZ2h0IChDKSAyMDE1IFN1a29sc2FrIFNha3NodXdvbmcgKHN1a29sc2Fr
QGdtYWlsLmNvbSkKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTgyMiw3ICs4
MjIsNyBAQCBzdGF0aWMgSlNBcnJheSogbG9va3VwU3VwcG9ydGVkTG9jYWxlcyhFCiAgICAgICAg
IFN0cmluZyBub0V4dGVuc2lvbnNMb2NhbGUgPSByZW1vdmVVbmljb2RlTG9jYWxlRXh0ZW5zaW9u
KGxvY2FsZSk7CiAgICAgICAgIFN0cmluZyBhdmFpbGFibGVMb2NhbGUgPSBiZXN0QXZhaWxhYmxl
TG9jYWxlKGF2YWlsYWJsZUxvY2FsZXMsIG5vRXh0ZW5zaW9uc0xvY2FsZSk7CiAgICAgICAgIGlm
ICghYXZhaWxhYmxlTG9jYWxlLmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBzdWJzZXQtPnB1dERp
cmVjdEluZGV4KCZzdGF0ZSwgaW5kZXgrKywganNTdHJpbmcoJnN0YXRlLCBsb2NhbGUpKTsKKyAg
ICAgICAgICAgIHN1YnNldC0+cHV0RGlyZWN0SW5kZXgoJnN0YXRlLCBpbmRleCsrLCBqc1N0cmlu
Zyh2bSwgbG9jYWxlKSk7CiAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBu
dWxscHRyKTsKICAgICAgICAgfQogICAgIH0KQEAgLTg1OSw3ICs4NTksNyBAQCBKU1ZhbHVlIHN1
cHBvcnRlZExvY2FsZXMoRXhlY1N0YXRlJiBzdGF0CiAgICAgICAgIDogbG9va3VwU3VwcG9ydGVk
TG9jYWxlcyhzdGF0ZSwgYXZhaWxhYmxlTG9jYWxlcywgcmVxdWVzdGVkTG9jYWxlcyk7CiAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZSgpKTsKIAotICAgIFByb3BlcnR5TmFt
ZUFycmF5IGtleXMoJnZtLCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzLCBQcml2YXRlU3ltYm9s
TW9kZTo6RXhjbHVkZSk7CisgICAgUHJvcGVydHlOYW1lQXJyYXkga2V5cyh2bSwgUHJvcGVydHlO
YW1lTW9kZTo6U3RyaW5ncywgUHJpdmF0ZVN5bWJvbE1vZGU6OkV4Y2x1ZGUpOwogICAgIHN1cHBv
cnRlZExvY2FsZXMtPmdldE93blByb3BlcnR5TmFtZXMoc3VwcG9ydGVkTG9jYWxlcywgJnN0YXRl
LCBrZXlzLCBFbnVtZXJhdGlvbk1vZGUoKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgSlNWYWx1ZSgpKTsKIApAQCAtOTM3LDcgKzkzNyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgaW50bE9iamVjdEYKICAgICB9CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIGxvY2FsZUFycmF5LT5wdXREaXJlY3RJbmRleChzdGF0
ZSwgaSwganNTdHJpbmcoc3RhdGUsIGxvY2FsZUxpc3RbaV0pKTsKKyAgICAgICAgbG9jYWxlQXJy
YXktPnB1dERpcmVjdEluZGV4KHN0YXRlLCBpLCBqc1N0cmluZyh2bSwgbG9jYWxlTGlzdFtpXSkp
OwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsK
ICAgICB9CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShsb2NhbGVBcnJheSk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUGx1cmFsUnVsZXMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxQbHVyYWxSdWxlcy5jcHAJ
KHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxQ
bHVyYWxSdWxlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNCwzNCArMTM0LDM0IEBAIHZvaWQg
SW50bFBsdXJhbFJ1bGVzOjppbml0aWFsaXplUGx1cmFsUnUKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIFN0cmluZyB0eXBlU3RyaW5nID0gaW50bFN0cmluZ09wdGlvbihleGVjLCBvcHRp
b25zLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgInR5cGUiKSwgeyAiY2FyZGluYWwiLCAi
b3JkaW5hbCIgfSwgInR5cGUgbXVzdCBiZSBcImNhcmRpbmFsXCIgb3IgXCJvcmRpbmFsXCIiLCAi
Y2FyZGluYWwiKTsKKyAgICBTdHJpbmcgdHlwZVN0cmluZyA9IGludGxTdHJpbmdPcHRpb24oZXhl
Yywgb3B0aW9ucywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInR5cGUiKSwgeyAiY2FyZGlu
YWwiLCAib3JkaW5hbCIgfSwgInR5cGUgbXVzdCBiZSBcImNhcmRpbmFsXCIgb3IgXCJvcmRpbmFs
XCIiLCAiY2FyZGluYWwiKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkp
OwogICAgIG1fdHlwZSA9IHR5cGVTdHJpbmcgPT0gIm9yZGluYWwiID8gVVBMVVJBTF9UWVBFX09S
RElOQUwgOiBVUExVUkFMX1RZUEVfQ0FSRElOQUw7CiAKLSAgICB1bnNpZ25lZCBtaW5pbXVtSW50
ZWdlckRpZ2l0cyA9IGludGxOdW1iZXJPcHRpb24oZXhlYywgb3B0aW9ucywgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZygmdm0sICJtaW5pbXVtSW50ZWdlckRpZ2l0cyIpLCAxLCAyMSwgMSk7CisgICAg
dW5zaWduZWQgbWluaW11bUludGVnZXJEaWdpdHMgPSBpbnRsTnVtYmVyT3B0aW9uKGV4ZWMsIG9w
dGlvbnMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJtaW5pbXVtSW50ZWdlckRpZ2l0cyIp
LCAxLCAyMSwgMSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKICAg
ICBtX21pbmltdW1JbnRlZ2VyRGlnaXRzID0gbWluaW11bUludGVnZXJEaWdpdHM7CiAKICAgICB1
bnNpZ25lZCBtaW5pbXVtRnJhY3Rpb25EaWdpdHNEZWZhdWx0ID0gMDsKLSAgICB1bnNpZ25lZCBt
aW5pbXVtRnJhY3Rpb25EaWdpdHMgPSBpbnRsTnVtYmVyT3B0aW9uKGV4ZWMsIG9wdGlvbnMsIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAibWluaW11bUZyYWN0aW9uRGlnaXRzIiksIDAsIDIw
LCBtaW5pbXVtRnJhY3Rpb25EaWdpdHNEZWZhdWx0KTsKKyAgICB1bnNpZ25lZCBtaW5pbXVtRnJh
Y3Rpb25EaWdpdHMgPSBpbnRsTnVtYmVyT3B0aW9uKGV4ZWMsIG9wdGlvbnMsIElkZW50aWZpZXI6
OmZyb21TdHJpbmcodm0sICJtaW5pbXVtRnJhY3Rpb25EaWdpdHMiKSwgMCwgMjAsIG1pbmltdW1G
cmFjdGlvbkRpZ2l0c0RlZmF1bHQpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZv
aWQoKSk7CiAgICAgbV9taW5pbXVtRnJhY3Rpb25EaWdpdHMgPSBtaW5pbXVtRnJhY3Rpb25EaWdp
dHM7CiAKICAgICB1bnNpZ25lZCBtYXhpbXVtRnJhY3Rpb25EaWdpdHNEZWZhdWx0ID0gc3RkOjpt
YXgobWluaW11bUZyYWN0aW9uRGlnaXRzLCAzdSk7Ci0gICAgdW5zaWduZWQgbWF4aW11bUZyYWN0
aW9uRGlnaXRzID0gaW50bE51bWJlck9wdGlvbihleGVjLCBvcHRpb25zLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKCZ2bSwgIm1heGltdW1GcmFjdGlvbkRpZ2l0cyIpLCBtaW5pbXVtRnJhY3Rpb25E
aWdpdHMsIDIwLCBtYXhpbXVtRnJhY3Rpb25EaWdpdHNEZWZhdWx0KTsKKyAgICB1bnNpZ25lZCBt
YXhpbXVtRnJhY3Rpb25EaWdpdHMgPSBpbnRsTnVtYmVyT3B0aW9uKGV4ZWMsIG9wdGlvbnMsIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJtYXhpbXVtRnJhY3Rpb25EaWdpdHMiKSwgbWluaW11
bUZyYWN0aW9uRGlnaXRzLCAyMCwgbWF4aW11bUZyYWN0aW9uRGlnaXRzRGVmYXVsdCk7CiAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKICAgICBtX21heGltdW1GcmFjdGlv
bkRpZ2l0cyA9IG1heGltdW1GcmFjdGlvbkRpZ2l0czsKIAotICAgIEpTVmFsdWUgbWluaW11bVNp
Z25pZmljYW50RGlnaXRzVmFsdWUgPSBvcHRpb25zLT5nZXQoJmV4ZWMsIElkZW50aWZpZXI6OmZy
b21TdHJpbmcoJnZtLCAibWluaW11bVNpZ25pZmljYW50RGlnaXRzIikpOworICAgIEpTVmFsdWUg
bWluaW11bVNpZ25pZmljYW50RGlnaXRzVmFsdWUgPSBvcHRpb25zLT5nZXQoJmV4ZWMsIElkZW50
aWZpZXI6OmZyb21TdHJpbmcodm0sICJtaW5pbXVtU2lnbmlmaWNhbnREaWdpdHMiKSk7CiAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKIAotICAgIEpTVmFsdWUgbWF4aW11
bVNpZ25pZmljYW50RGlnaXRzVmFsdWUgPSBvcHRpb25zLT5nZXQoJmV4ZWMsIElkZW50aWZpZXI6
OmZyb21TdHJpbmcoJnZtLCAibWF4aW11bVNpZ25pZmljYW50RGlnaXRzIikpOworICAgIEpTVmFs
dWUgbWF4aW11bVNpZ25pZmljYW50RGlnaXRzVmFsdWUgPSBvcHRpb25zLT5nZXQoJmV4ZWMsIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJtYXhpbXVtU2lnbmlmaWNhbnREaWdpdHMiKSk7CiAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKIAogICAgIGlmICghbWluaW11
bVNpZ25pZmljYW50RGlnaXRzVmFsdWUuaXNVbmRlZmluZWQoKSB8fCAhbWF4aW11bVNpZ25pZmlj
YW50RGlnaXRzVmFsdWUuaXNVbmRlZmluZWQoKSkgewotICAgICAgICB1bnNpZ25lZCBtaW5pbXVt
U2lnbmlmaWNhbnREaWdpdHMgPSBpbnRsTnVtYmVyT3B0aW9uKGV4ZWMsIG9wdGlvbnMsIElkZW50
aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAibWluaW11bVNpZ25pZmljYW50RGlnaXRzIiksIDEsIDIx
LCAxKTsKKyAgICAgICAgdW5zaWduZWQgbWluaW11bVNpZ25pZmljYW50RGlnaXRzID0gaW50bE51
bWJlck9wdGlvbihleGVjLCBvcHRpb25zLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAibWlu
aW11bVNpZ25pZmljYW50RGlnaXRzIiksIDEsIDIxLCAxKTsKICAgICAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgdm9pZCgpKTsKLSAgICAgICAgdW5zaWduZWQgbWF4aW11bVNpZ25pZmlj
YW50RGlnaXRzID0gaW50bE51bWJlck9wdGlvbihleGVjLCBvcHRpb25zLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKCZ2bSwgIm1heGltdW1TaWduaWZpY2FudERpZ2l0cyIpLCBtaW5pbXVtU2lnbmlm
aWNhbnREaWdpdHMsIDIxLCAyMSk7CisgICAgICAgIHVuc2lnbmVkIG1heGltdW1TaWduaWZpY2Fu
dERpZ2l0cyA9IGludGxOdW1iZXJPcHRpb24oZXhlYywgb3B0aW9ucywgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyh2bSwgIm1heGltdW1TaWduaWZpY2FudERpZ2l0cyIpLCBtaW5pbXVtU2lnbmlmaWNh
bnREaWdpdHMsIDIxLCAyMSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZv
aWQoKSk7CiAgICAgICAgIG1fbWluaW11bVNpZ25pZmljYW50RGlnaXRzID0gbWluaW11bVNpZ25p
ZmljYW50RGlnaXRzOwogICAgICAgICBtX21heGltdW1TaWduaWZpY2FudERpZ2l0cyA9IG1heGlt
dW1TaWduaWZpY2FudERpZ2l0czsKQEAgLTIwNywxNCArMjA3LDE0IEBAIEpTT2JqZWN0KiBJbnRs
UGx1cmFsUnVsZXM6OnJlc29sdmVkT3B0aW8KICAgICB9CiAKICAgICBKU09iamVjdCogb3B0aW9u
cyA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KCZleGVjKTsKLSAgICBvcHRpb25zLT5wdXREaXJlY3Qo
dm0sIHZtLnByb3BlcnR5TmFtZXMtPmxvY2FsZSwganNOb250cml2aWFsU3RyaW5nKCZleGVjLCBt
X2xvY2FsZSkpOwotICAgIG9wdGlvbnMtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZygmdm0sICJ0eXBlIiksIGpzTm9udHJpdmlhbFN0cmluZygmZXhlYywgbV90eXBlID09IFVQ
TFVSQUxfVFlQRV9PUkRJTkFMID8gIm9yZGluYWwiX3MgOiAiY2FyZGluYWwiX3MpKTsKLSAgICBv
cHRpb25zLT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAibWluaW11
bUludGVnZXJEaWdpdHMiKSwganNOdW1iZXIobV9taW5pbXVtSW50ZWdlckRpZ2l0cykpOwotICAg
IG9wdGlvbnMtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJtaW5p
bXVtRnJhY3Rpb25EaWdpdHMiKSwganNOdW1iZXIobV9taW5pbXVtRnJhY3Rpb25EaWdpdHMpKTsK
LSAgICBvcHRpb25zLT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAi
bWF4aW11bUZyYWN0aW9uRGlnaXRzIiksIGpzTnVtYmVyKG1fbWF4aW11bUZyYWN0aW9uRGlnaXRz
KSk7CisgICAgb3B0aW9ucy0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sb2NhbGUs
IGpzTm9udHJpdmlhbFN0cmluZyh2bSwgbV9sb2NhbGUpKTsKKyAgICBvcHRpb25zLT5wdXREaXJl
Y3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJ0eXBlIiksIGpzTm9udHJpdmlhbFN0
cmluZyh2bSwgbV90eXBlID09IFVQTFVSQUxfVFlQRV9PUkRJTkFMID8gIm9yZGluYWwiX3MgOiAi
Y2FyZGluYWwiX3MpKTsKKyAgICBvcHRpb25zLT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZy
b21TdHJpbmcodm0sICJtaW5pbXVtSW50ZWdlckRpZ2l0cyIpLCBqc051bWJlcihtX21pbmltdW1J
bnRlZ2VyRGlnaXRzKSk7CisgICAgb3B0aW9ucy0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCAibWluaW11bUZyYWN0aW9uRGlnaXRzIiksIGpzTnVtYmVyKG1fbWluaW11
bUZyYWN0aW9uRGlnaXRzKSk7CisgICAgb3B0aW9ucy0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKHZtLCAibWF4aW11bUZyYWN0aW9uRGlnaXRzIiksIGpzTnVtYmVyKG1fbWF4
aW11bUZyYWN0aW9uRGlnaXRzKSk7CiAgICAgaWYgKG1fbWluaW11bVNpZ25pZmljYW50RGlnaXRz
KSB7Ci0gICAgICAgIG9wdGlvbnMtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zygmdm0sICJtaW5pbXVtU2lnbmlmaWNhbnREaWdpdHMiKSwganNOdW1iZXIobV9taW5pbXVtU2ln
bmlmaWNhbnREaWdpdHMudmFsdWUoKSkpOwotICAgICAgICBvcHRpb25zLT5wdXREaXJlY3Qodm0s
IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAibWF4aW11bVNpZ25pZmljYW50RGlnaXRzIiks
IGpzTnVtYmVyKG1fbWF4aW11bVNpZ25pZmljYW50RGlnaXRzLnZhbHVlKCkpKTsKKyAgICAgICAg
b3B0aW9ucy0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAibWluaW11
bVNpZ25pZmljYW50RGlnaXRzIiksIGpzTnVtYmVyKG1fbWluaW11bVNpZ25pZmljYW50RGlnaXRz
LnZhbHVlKCkpKTsKKyAgICAgICAgb3B0aW9ucy0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCAibWF4aW11bVNpZ25pZmljYW50RGlnaXRzIiksIGpzTnVtYmVyKG1fbWF4
aW11bVNpZ25pZmljYW50RGlnaXRzLnZhbHVlKCkpKTsKICAgICB9CiAKICNpZiBIQVZFKElDVV9Q
TFVSQUxSVUxFU19LRVlXT1JEUykKQEAgLTIzNCwxMCArMjM0LDEwIEBAIEpTT2JqZWN0KiBJbnRs
UGx1cmFsUnVsZXM6OnJlc29sdmVkT3B0aW8KICAgICB1bnNpZ25lZCBpbmRleCA9IDA7CiAgICAg
d2hpbGUgKGNvbnN0IGNoYXIqIHJlc3VsdCA9IHVlbnVtX25leHQoa2V5d29yZHMuZ2V0KCksICZy
ZXN1bHRMZW5ndGgsICZzdGF0dXMpKSB7CiAgICAgICAgIEFTU0VSVChVX1NVQ0NFU1Moc3RhdHVz
KSk7Ci0gICAgICAgIGNhdGVnb3JpZXMtPnB1dERpcmVjdEluZGV4KCZleGVjLCBpbmRleCsrLCBq
c05vbnRyaXZpYWxTdHJpbmcoJmV4ZWMsIFN0cmluZyhyZXN1bHQsIHJlc3VsdExlbmd0aCkpKTsK
KyAgICAgICAgY2F0ZWdvcmllcy0+cHV0RGlyZWN0SW5kZXgoJmV4ZWMsIGluZGV4KyssIGpzTm9u
dHJpdmlhbFN0cmluZyh2bSwgU3RyaW5nKHJlc3VsdCwgcmVzdWx0TGVuZ3RoKSkpOwogICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgIH0KLSAgICBvcHRpb25zLT5w
dXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAicGx1cmFsQ2F0ZWdvcmll
cyIpLCBjYXRlZ29yaWVzKTsKKyAgICBvcHRpb25zLT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6
OmZyb21TdHJpbmcodm0sICJwbHVyYWxDYXRlZ29yaWVzIiksIGNhdGVnb3JpZXMpOwogI2VuZGlm
CiAKICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIG9wdGlvbnMpOwpAQCAtMjU0LDcgKzI1
NCw3IEBAIEpTVmFsdWUgSW50bFBsdXJhbFJ1bGVzOjpzZWxlY3QoRXhlY1N0YXQKICAgICAgICAg
cmV0dXJuIHRocm93VHlwZUVycm9yKCZleGVjLCBzY29wZSwgIkludGwuUGx1cmFsUnVsZXMucHJv
dG90eXBlLnNlbGVjdCBjYWxsZWQgb24gdmFsdWUgdGhhdCdzIG5vdCBhbiBvYmplY3QgaW5pdGlh
bGl6ZWQgYXMgYSBQbHVyYWxSdWxlcyJfcyk7CiAKICAgICBpZiAoIXN0ZDo6aXNmaW5pdGUodmFs
dWUpKQotICAgICAgICByZXR1cm4ganNOb250cml2aWFsU3RyaW5nKCZleGVjLCAib3RoZXIiX3Mp
OworICAgICAgICByZXR1cm4ganNOb250cml2aWFsU3RyaW5nKHZtLCAib3RoZXIiX3MpOwogCiAj
aWYgSEFWRShJQ1VfUExVUkFMUlVMRVNfV0lUSF9GT1JNQVQpCiAgICAgVUVycm9yQ29kZSBzdGF0
dXMgPSBVX1pFUk9fRVJST1I7CkBAIC0yODYsNyArMjg2LDcgQEAgSlNWYWx1ZSBJbnRsUGx1cmFs
UnVsZXM6OnNlbGVjdChFeGVjU3RhdAogICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoJmV4
ZWMsIHNjb3BlLCAiZmFpbGVkIHRvIHNlbGVjdCBwbHVyYWwgdmFsdWUiX3MpOwogI2VuZGlmCiAK
LSAgICByZXR1cm4ganNTdHJpbmcoJmV4ZWMsIFN0cmluZyhyZXN1bHQuZGF0YSgpLCBsZW5ndGgp
KTsKKyAgICByZXR1cm4ganNTdHJpbmcodm0sIFN0cmluZyhyZXN1bHQuZGF0YSgpLCBsZW5ndGgp
KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbnRsUGx1cmFsUnVsZXNQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxQbHVyYWxSdWxlc1Byb3RvdHlwZS5jcHAJKHJl
dmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxQbHVy
YWxSdWxlc1Byb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgog
ICogQ29weXJpZ2h0IChDKSAyMDE4IEFuZHkgVmFuV2Fnb25lciAoYW5keUB2YW53YWdvbmVyLmZh
bWlseSkKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTc0LDcgKzc1LDcgQEAgdm9p
ZCBJbnRsUGx1cmFsUnVsZXNQcm90b3R5cGU6OmZpbmlzaENyZQogewogICAgIEJhc2U6OmZpbmlz
aENyZWF0aW9uKHZtKTsKIAotICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5w
cm9wZXJ0eU5hbWVzLT50b1N0cmluZ1RhZ1N5bWJvbCwganNTdHJpbmcoJnZtLCAiT2JqZWN0Iiks
IFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25s
eSk7CisgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMt
PnRvU3RyaW5nVGFnU3ltYm9sLCBqc1N0cmluZyh2bSwgIk9iamVjdCIpLCBQcm9wZXJ0eUF0dHJp
YnV0ZTo6RG9udEVudW0gfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpOwogfQogCiBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEludGxQbHVyYWxSdWxlc1Byb3RvdHlwZUZ1bmNTZWxl
Y3QoRXhlY1N0YXRlKiBzdGF0ZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0FycmF5LmgJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29w
eXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAqICBD
b3B5cmlnaHQgKEMpIDIwMDMtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtMjg5LDcgKzI4OSw3IEBAIEpTQXJyYXkqIGFzQXJy
YXkoSlNWYWx1ZSk7CiAKIGlubGluZSBKU0FycmF5KiBhc0FycmF5KEpTQ2VsbCogY2VsbCkKIHsK
LSAgICBBU1NFUlQoY2VsbC0+aW5oZXJpdHM8SlNBcnJheT4oKmNlbGwtPnZtKCkpKTsKKyAgICBB
U1NFUlQoY2VsbC0+aW5oZXJpdHM8SlNBcnJheT4oY2VsbC0+dm0oKSkpOwogICAgIHJldHVybiBq
c0Nhc3Q8SlNBcnJheSo+KGNlbGwpOwogfQogCkBAIC0zMDAsNyArMzAwLDcgQEAgaW5saW5lIEpT
QXJyYXkqIGFzQXJyYXkoSlNWYWx1ZSB2YWx1ZSkKIAogaW5saW5lIGJvb2wgaXNKU0FycmF5KEpT
Q2VsbCogY2VsbCkKIHsKLSAgICBBU1NFUlQoKGNlbGwtPmNsYXNzSW5mbygqY2VsbC0+dm0oKSkg
PT0gSlNBcnJheTo6aW5mbygpKSA9PSAoY2VsbC0+dHlwZSgpID09IEFycmF5VHlwZSkpOworICAg
IEFTU0VSVCgoY2VsbC0+Y2xhc3NJbmZvKGNlbGwtPnZtKCkpID09IEpTQXJyYXk6OmluZm8oKSkg
PT0gKGNlbGwtPnR5cGUoKSA9PSBBcnJheVR5cGUpKTsKICAgICByZXR1cm4gY2VsbC0+dHlwZSgp
ID09IEFycmF5VHlwZTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNBcnJheUJ1ZmZlclByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDI0OTEy
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJQcm90b3R5
cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMywgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTExNiw3ICsxMTYsNyBAQCB2b2lkIEpTQXJyYXlC
dWZmZXJQcm90b3R5cGU6OmZpbmlzaENyZWF0CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0p
OwogICAgIAogICAgIEpTQ19OQVRJVkVfRlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lUSU9OKHZtLnBy
b3BlcnR5TmFtZXMtPnNsaWNlLCBhcnJheUJ1ZmZlclByb3RvRnVuY1NsaWNlLCBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSwgMik7Ci0gICAgcHV0RGly
ZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPnRvU3RyaW5nVGFnU3lt
Ym9sLCBqc1N0cmluZygmdm0sIGFycmF5QnVmZmVyU2hhcmluZ01vZGVOYW1lKG1fc2hhcmluZ01v
ZGUpKSwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtIHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJl
YWRPbmx5KTsKKyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlO
YW1lcy0+dG9TdHJpbmdUYWdTeW1ib2wsIGpzU3RyaW5nKHZtLCBhcnJheUJ1ZmZlclNoYXJpbmdN
b2RlTmFtZShtX3NoYXJpbmdNb2RlKSksIFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8IFBy
b3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSk7CiAgICAgaWYgKG1fc2hhcmluZ01vZGUgPT0gQXJy
YXlCdWZmZXJTaGFyaW5nTW9kZTo6RGVmYXVsdCkKICAgICAgICAgSlNDX05BVElWRV9HRVRURVJf
V0lUSE9VVF9UUkFOU0lUSU9OKHZtLnByb3BlcnR5TmFtZXMtPmJ5dGVMZW5ndGgsIGFycmF5QnVm
ZmVyUHJvdG9HZXR0ZXJGdW5jQnl0ZUxlbmd0aCwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVt
IHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KTsKICAgICBlbHNlCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuY3BwCShy
ZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5
QnVmZmVyVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1Niw3ICsyNTYsNyBAQCBBcnJheUJ1
ZmZlciogSlNBcnJheUJ1ZmZlclZpZXc6OnNsb3dEb3duCiAgICAgLy8gdXAuIEJ1dCBpZiB5b3Ug
ZG8gKmFueXRoaW5nKiB0byB0cmlnZ2VyIGEgR0Mgd2F0ZXJtYXJrIGNoZWNrLCBpdCB3aWxsIGtu
b3cKICAgICAvLyB0aGF0IHlvdSAqaGFkKiBkb25lIHRob3NlIGFsbG9jYXRpb25zIGFuZCBpdCB3
aWxsIEdDIGFwcHJvcHJpYXRlbHkuCiAgICAgSGVhcCogaGVhcCA9IEhlYXA6OmhlYXAodGhpcyk7
Ci0gICAgVk0mIHZtID0gKmhlYXAtPnZtKCk7CisgICAgVk0mIHZtID0gaGVhcC0+dm0oKTsKICAg
ICBEZWZlckdDRm9yQVdoaWxlIGRlZmVyR0MoKmhlYXApOwogCiAgICAgUkVMRUFTRV9BU1NFUlQo
IWhhc0luZGV4aW5nSGVhZGVyKHZtKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0NKU1ZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0NKU1ZhbHVlLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNyAr
MSw3IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAxIEhhcnJpIFBvcnRlbiAocG9y
dGVuQGtkZS5vcmcpCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9z
dC5jb20pCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDE5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMTUsNyArMjE1LDcgQEAg
Ym9vbCBKU1ZhbHVlOjpwdXRUb1ByaW1pdGl2ZUJ5SW5kZXgoRXhlYwogCiAgICAgaWYgKHByb3Bl
cnR5TmFtZSA+IE1BWF9BUlJBWV9JTkRFWCkgewogICAgICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xv
dCgqdGhpcywgc2hvdWxkVGhyb3cpOwotICAgICAgICByZXR1cm4gcHV0VG9QcmltaXRpdmUoZXhl
YywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBwcm9wZXJ0eU5hbWUpLCB2YWx1ZSwgc2xvdCk7Cisg
ICAgICAgIHJldHVybiBwdXRUb1ByaW1pdGl2ZShleGVjLCBJZGVudGlmaWVyOjpmcm9tKHZtLCBw
cm9wZXJ0eU5hbWUpLCB2YWx1ZSwgc2xvdCk7CiAgICAgfQogICAgIAogICAgIEpTT2JqZWN0KiBw
cm90b3R5cGUgPSBzeW50aGVzaXplUHJvdG90eXBlKGV4ZWMpOwpAQCAtMzE1LDcgKzMxNSw3IEBA
IHZvaWQgSlNWYWx1ZTo6ZHVtcEZvckJhY2t0cmFjZShQcmludFN0cmUKICAgICBlbHNlIGlmIChp
c0RvdWJsZSgpKQogICAgICAgICBvdXQucHJpbnRmKCIlbGYiLCBhc0RvdWJsZSgpKTsKICAgICBl
bHNlIGlmIChpc0NlbGwoKSkgewotICAgICAgICBWTSYgdm0gPSAqYXNDZWxsKCktPnZtKCk7Cisg
ICAgICAgIFZNJiB2bSA9IGFzQ2VsbCgpLT52bSgpOwogICAgICAgICBpZiAoYXNDZWxsKCktPmlu
aGVyaXRzPEpTU3RyaW5nPih2bSkpIHsKICAgICAgICAgICAgIEpTU3RyaW5nKiBzdHJpbmcgPSBh
c1N0cmluZyhhc0NlbGwoKSk7CiAgICAgICAgICAgICBjb25zdCBTdHJpbmdJbXBsKiBpbXBsID0g
c3RyaW5nLT50cnlHZXRWYWx1ZUltcGwoKTsKQEAgLTM2MCw3ICszNjAsNyBAQCBKU1N0cmluZyog
SlNWYWx1ZTo6dG9TdHJpbmdTbG93Q2FzZShFeGVjCiAKICAgICBhdXRvIGVycm9yVmFsdWUgPSBb
Jl0gKCkgLT4gSlNTdHJpbmcqIHsKICAgICAgICAgaWYgKHJldHVybkVtcHR5U3RyaW5nT25FcnJv
cikKLSAgICAgICAgICAgIHJldHVybiBqc0VtcHR5U3RyaW5nKGV4ZWMpOworICAgICAgICAgICAg
cmV0dXJuIGpzRW1wdHlTdHJpbmcodm0pOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9
OwogICAgIApAQCAtMzY5LDEwICszNjksMTAgQEAgSlNTdHJpbmcqIEpTVmFsdWU6OnRvU3RyaW5n
U2xvd0Nhc2UoRXhlYwogICAgICAgICBhdXRvIGludGVnZXIgPSBhc0ludDMyKCk7CiAgICAgICAg
IGlmIChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW50ZWdlcikgPD0gOSkKICAgICAgICAgICAgIHJl
dHVybiB2bS5zbWFsbFN0cmluZ3Muc2luZ2xlQ2hhcmFjdGVyU3RyaW5nKGludGVnZXIgKyAnMCcp
OwotICAgICAgICByZXR1cm4ganNOb250cml2aWFsU3RyaW5nKCZ2bSwgdm0ubnVtZXJpY1N0cmlu
Z3MuYWRkKGludGVnZXIpKTsKKyAgICAgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyh2bSwg
dm0ubnVtZXJpY1N0cmluZ3MuYWRkKGludGVnZXIpKTsKICAgICB9CiAgICAgaWYgKGlzRG91Ymxl
KCkpCi0gICAgICAgIHJldHVybiBqc1N0cmluZygmdm0sIHZtLm51bWVyaWNTdHJpbmdzLmFkZChh
c0RvdWJsZSgpKSk7CisgICAgICAgIHJldHVybiBqc1N0cmluZyh2bSwgdm0ubnVtZXJpY1N0cmlu
Z3MuYWRkKGFzRG91YmxlKCkpKTsKICAgICBpZiAoaXNUcnVlKCkpCiAgICAgICAgIHJldHVybiB2
bS5zbWFsbFN0cmluZ3MudHJ1ZVN0cmluZygpOwogICAgIGlmIChpc0ZhbHNlKCkpCkBAIC0zODks
NyArMzg5LDcgQEAgSlNTdHJpbmcqIEpTVmFsdWU6OnRvU3RyaW5nU2xvd0Nhc2UoRXhlYwogICAg
ICAgICBKU0JpZ0ludCogYmlnSW50ID0gYXNCaWdJbnQoKnRoaXMpOwogICAgICAgICBpZiAoYXV0
byBkaWdpdCA9IGJpZ0ludC0+c2luZ2xlRGlnaXRWYWx1ZUZvclN0cmluZygpKQogICAgICAgICAg
ICAgcmV0dXJuIHZtLnNtYWxsU3RyaW5ncy5zaW5nbGVDaGFyYWN0ZXJTdHJpbmcoKmRpZ2l0ICsg
JzAnKTsKLSAgICAgICAgSlNTdHJpbmcqIHJldHVyblN0cmluZyA9IGpzTm9udHJpdmlhbFN0cmlu
Zygmdm0sIGJpZ0ludC0+dG9TdHJpbmcoZXhlYywgMTApKTsKKyAgICAgICAgSlNTdHJpbmcqIHJl
dHVyblN0cmluZyA9IGpzTm9udHJpdmlhbFN0cmluZyh2bSwgYmlnSW50LT50b1N0cmluZyhleGVj
LCAxMCkpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlcnJvclZhbHVlKCkp
OwogICAgICAgICByZXR1cm4gcmV0dXJuU3RyaW5nOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWVJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZUlubGluZXMuaAkocmV2aXNpb24g
MjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZUlubGlu
ZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTEtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTk2NSw3ICs5NjUsNyBAQCBBTFdBWVNfSU5MSU5FIEpT
VmFsdWUgSlNWYWx1ZTo6Z2V0KEV4ZWNTCiB7CiAgICAgaWYgKExJS0VMWShwcm9wZXJ0eU5hbWUg
PD0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKSkKICAgICAgICAgcmV0dXJu
IGdldChleGVjLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocHJvcGVydHlOYW1lKSk7Ci0gICAgcmV0
dXJuIGdldChleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIHN0YXRpY19jYXN0PGRvdWJsZT4o
cHJvcGVydHlOYW1lKSkpOworICAgIHJldHVybiBnZXQoZXhlYywgSWRlbnRpZmllcjo6ZnJvbShl
eGVjLT52bSgpLCBzdGF0aWNfY2FzdDxkb3VibGU+KHByb3BlcnR5TmFtZSkpKTsKIH0KIAogaW5s
aW5lIGJvb2wgSlNWYWx1ZTo6cHV0KEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3Bl
cnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDYXN0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDYXN0LmgJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2FzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
Myw3ICszMyw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFRvLCB0eXBlbmFtZSBGcm9tPgogaW5saW5l
IFRvIGpzQ2FzdChGcm9tKiBmcm9tKQogewogICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNl
X29mPEpTQ2VsbCwgdHlwZW5hbWUgc3RkOjpyZW1vdmVfcG9pbnRlcjxUbz46OnR5cGU+Ojp2YWx1
ZSAmJiBzdGQ6OmlzX2Jhc2Vfb2Y8SlNDZWxsLCB0eXBlbmFtZSBzdGQ6OnJlbW92ZV9wb2ludGVy
PEZyb20+Ojp0eXBlPjo6dmFsdWUsICJKUyBjYXN0aW5nIGV4cGVjdHMgdGhhdCB0aGUgdHlwZXMg
eW91IGFyZSBjYXN0aW5nIHRvL2Zyb20gYXJlIHN1YmNsYXNzZXMgb2YgSlNDZWxsIik7Ci0gICAg
QVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oIWZyb20gfHwgZnJvbS0+SlNDZWxsOjpp
bmhlcml0cygqZnJvbS0+SlNDZWxsOjp2bSgpLCBzdGQ6OnJlbW92ZV9wb2ludGVyPFRvPjo6dHlw
ZTo6aW5mbygpKSk7CisgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oIWZyb20g
fHwgZnJvbS0+SlNDZWxsOjppbmhlcml0cyhmcm9tLT5KU0NlbGw6OnZtKCksIHN0ZDo6cmVtb3Zl
X3BvaW50ZXI8VG8+Ojp0eXBlOjppbmZvKCkpKTsKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VG8+
KGZyb20pOwogfQogCkBAIC00MSw3ICs0MSw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFRvPgogaW5s
aW5lIFRvIGpzQ2FzdChKU1ZhbHVlIGZyb20pCiB7CiAgICAgc3RhdGljX2Fzc2VydChzdGQ6Omlz
X2Jhc2Vfb2Y8SlNDZWxsLCB0eXBlbmFtZSBzdGQ6OnJlbW92ZV9wb2ludGVyPFRvPjo6dHlwZT46
OnZhbHVlLCAiSlMgY2FzdGluZyBleHBlY3RzIHRoYXQgdGhlIHR5cGVzIHlvdSBhcmUgY2FzdGlu
ZyB0byBpcyBhIHN1YmNsYXNzIG9mIEpTQ2VsbCIpOwotICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZ
X0lNUExJQ0FUSU9OKGZyb20uaXNDZWxsKCkgJiYgZnJvbS5hc0NlbGwoKS0+SlNDZWxsOjppbmhl
cml0cygqZnJvbS5hc0NlbGwoKS0+dm0oKSwgc3RkOjpyZW1vdmVfcG9pbnRlcjxUbz46OnR5cGU6
OmluZm8oKSkpOworICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGZyb20uaXND
ZWxsKCkgJiYgZnJvbS5hc0NlbGwoKS0+SlNDZWxsOjppbmhlcml0cyhmcm9tLmFzQ2VsbCgpLT52
bSgpLCBzdGQ6OnJlbW92ZV9wb2ludGVyPFRvPjo6dHlwZTo6aW5mbygpKSk7CiAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PFRvPihmcm9tLmFzQ2VsbCgpKTsKIH0KIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0NlbGwuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcg
KzEsNyBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBv
cnRlbkBrZGUub3JnKQogICogIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBv
c3QuY29tKQotICogIENvcHlyaWdodCAoQykgMjAwMy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtNDYsMTIgKzQ2LDEyIEBA
IHZvaWQgSlNDZWxsOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKIAogdm9pZCBKU0NlbGw6OmR1bXAo
UHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsKLSAgICBtZXRob2RUYWJsZSgqdm0oKSktPmR1bXBU
b1N0cmVhbSh0aGlzLCBvdXQpOworICAgIG1ldGhvZFRhYmxlKHZtKCkpLT5kdW1wVG9TdHJlYW0o
dGhpcywgb3V0KTsKIH0KIAogdm9pZCBKU0NlbGw6OmR1bXBUb1N0cmVhbShjb25zdCBKU0NlbGwq
IGNlbGwsIFByaW50U3RyZWFtJiBvdXQpCiB7Ci0gICAgb3V0LnByaW50ZigiPCVwLCAlcz4iLCBj
ZWxsLCBjZWxsLT5jbGFzc05hbWUoKmNlbGwtPnZtKCkpKTsKKyAgICBvdXQucHJpbnRmKCI8JXAs
ICVzPiIsIGNlbGwsIGNlbGwtPmNsYXNzTmFtZShjZWxsLT52bSgpKSk7CiB9CiAKIHNpemVfdCBK
U0NlbGw6OmVzdGltYXRlZFNpemVJbkJ5dGVzKFZNJiB2bSkgY29uc3QKQEAgLTExOCwxMiArMTE4
LDEzIEBAIGJvb2wgSlNDZWxsOjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUKIAogYm9vbCBK
U0NlbGw6OnB1dEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVk
IGlkZW50aWZpZXIsIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCiB7CisgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKICAgICBpZiAoY2VsbC0+aXNTdHJpbmcoKSB8fCBjZWxsLT5pc1N5
bWJvbCgpIHx8IGNlbGwtPmlzQmlnSW50KCkpIHsKICAgICAgICAgUHV0UHJvcGVydHlTbG90IHNs
b3QoY2VsbCwgc2hvdWxkVGhyb3cpOwotICAgICAgICByZXR1cm4gSlNWYWx1ZShjZWxsKS5wdXRU
b1ByaW1pdGl2ZShleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGlkZW50aWZpZXIpLCB2YWx1
ZSwgc2xvdCk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlKGNlbGwpLnB1dFRvUHJpbWl0aXZlKGV4
ZWMsIElkZW50aWZpZXI6OmZyb20odm0sIGlkZW50aWZpZXIpLCB2YWx1ZSwgc2xvdCk7CiAgICAg
fQogICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0gY2VsbC0+dG9PYmplY3QoZXhlYywgZXhlYy0+
bGV4aWNhbEdsb2JhbE9iamVjdCgpKTsKLSAgICByZXR1cm4gdGhpc09iamVjdC0+bWV0aG9kVGFi
bGUoZXhlYy0+dm0oKSktPnB1dEJ5SW5kZXgodGhpc09iamVjdCwgZXhlYywgaWRlbnRpZmllciwg
dmFsdWUsIHNob3VsZFRocm93KTsKKyAgICByZXR1cm4gdGhpc09iamVjdC0+bWV0aG9kVGFibGUo
dm0pLT5wdXRCeUluZGV4KHRoaXNPYmplY3QsIGV4ZWMsIGlkZW50aWZpZXIsIHZhbHVlLCBzaG91
bGRUaHJvdyk7CiB9CiAKIGJvb2wgSlNDZWxsOjpkZWxldGVQcm9wZXJ0eShKU0NlbGwqIGNlbGws
IEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIGlkZW50aWZpZXIpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGxJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsSW5saW5lcy5oCShyZXZpc2lvbiAyNDkx
MjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGxJbmxpbmVzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEyMSw3ICsxMjEsNyBAQCBpbmxpbmUgSW5kZXhpbmdUeXBlIEpTQ2Vs
bDo6aW5kZXhpbmdNb2RlCiAKIEFMV0FZU19JTkxJTkUgU3RydWN0dXJlKiBKU0NlbGw6OnN0cnVj
dHVyZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHN0cnVjdHVyZSgqdm0oKSk7CisgICAgcmV0dXJu
IHN0cnVjdHVyZSh2bSgpKTsKIH0KIAogQUxXQVlTX0lOTElORSBTdHJ1Y3R1cmUqIEpTQ2VsbDo6
c3RydWN0dXJlKFZNJiB2bSkgY29uc3QKQEAgLTE0MiwxMCArMTQyLDEwIEBAIEFMV0FZU19JTkxJ
TkUgVk0mIEV4ZWNTdGF0ZTo6dm0oKSBjb25zdAogewogICAgIEpTQ2VsbCogY2FsbGVlID0gdGhp
cy0+Y2FsbGVlKCkuYXNDZWxsKCk7CiAgICAgQVNTRVJUKGNhbGxlZSk7Ci0gICAgQVNTRVJUKGNh
bGxlZS0+dm0oKSk7CisgICAgQVNTRVJUKCZjYWxsZWUtPnZtKCkpOwogICAgIEFTU0VSVCghY2Fs
bGVlLT5pc0xhcmdlQWxsb2NhdGlvbigpKTsKICAgICAvLyBUaGlzIGlzIGFuIGltcG9ydGFudCBv
cHRpbWl6YXRpb24gc2luY2Ugd2UgYWNjZXNzIHRoaXMgc28gb2Z0ZW4uCi0gICAgcmV0dXJuICpj
YWxsZWUtPm1hcmtlZEJsb2NrKCkudm0oKTsKKyAgICByZXR1cm4gY2FsbGVlLT5tYXJrZWRCbG9j
aygpLnZtKCk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vz
cz4KQEAgLTE2Nyw3ICsxNjcsNyBAQCBpbmxpbmUgQWxsb2NhdG9yIGFsbG9jYXRvckZvck5vblZp
cnR1YWxDCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogQUxXQVlTX0lOTElORSB2b2lkKiB0cnlBbGxv
Y2F0ZUNlbGxIZWxwZXIoSGVhcCYgaGVhcCwgc2l6ZV90IHNpemUsIEdDRGVmZXJyYWxDb250ZXh0
KiBkZWZlcnJhbENvbnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZSBmYWlsdXJlTW9kZSkKIHsK
LSAgICBWTSYgdm0gPSAqaGVhcC52bSgpOworICAgIFZNJiB2bSA9IGhlYXAudm0oKTsKICAgICBB
U1NFUlQoZGVmZXJyYWxDb250ZXh0IHx8ICFEaXNhbGxvd0dDOjppc0luRWZmZWN0T25DdXJyZW50
VGhyZWFkKCkpOwogICAgIEFTU0VSVChzaXplID49IHNpemVvZihUKSk7CiAgICAgSlNDZWxsKiBy
ZXN1bHQgPSBzdGF0aWNfY2FzdDxKU0NlbGwqPihzdWJzcGFjZUZvcjxUPih2bSktPmFsbG9jYXRl
Tm9uVmlydHVhbCh2bSwgc2l6ZSwgZGVmZXJyYWxDb250ZXh0LCBmYWlsdXJlTW9kZSkpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRhVmlld1Byb3RvdHlwZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRhVmlld1By
b3RvdHlwZS5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTRGF0YVZpZXdQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEwOSw3
ICsxMDksNyBAQCBKU0RhdGFWaWV3UHJvdG90eXBlKiBKU0RhdGFWaWV3UHJvdG90eXBlCiB2b2lk
IEpTRGF0YVZpZXdQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mIHZtKQogewogICAg
IEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKLSAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlv
bih2bSwgdm0ucHJvcGVydHlOYW1lcy0+dG9TdHJpbmdUYWdTeW1ib2wsIGpzU3RyaW5nKCZ2bSwg
IkRhdGFWaWV3IiksIFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8IFByb3BlcnR5QXR0cmli
dXRlOjpSZWFkT25seSk7CisgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnBy
b3BlcnR5TmFtZXMtPnRvU3RyaW5nVGFnU3ltYm9sLCBqc1N0cmluZyh2bSwgIkRhdGFWaWV3Iiks
IFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25s
eSk7CiB9CiAKIFN0cnVjdHVyZSogSlNEYXRhVmlld1Byb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJl
KApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGaXhlZEFycmF5LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ZpeGVkQXJyYXku
Y3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0ZpeGVkQXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU0LDcgKzU0LDcgQEAgdm9pZCBKU0ZpeGVk
QXJyYXk6OmNvcHlUb0FyZ3VtZW50cyhFeGVjUwogCiB2b2lkIEpTRml4ZWRBcnJheTo6ZHVtcFRv
U3RyZWFtKGNvbnN0IEpTQ2VsbCogY2VsbCwgUHJpbnRTdHJlYW0mIG91dCkKIHsKLSAgICBWTSYg
dm0gPSAqY2VsbC0+dm0oKTsKKyAgICBWTSYgdm0gPSBjZWxsLT52bSgpOwogICAgIGNvbnN0IGF1
dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8Y29uc3QgSlNGaXhlZEFycmF5Kj4oY2VsbCk7CiAgICAg
b3V0LnByaW50ZigiPCVwLCAlcywgWyV1XSwgWyIsIHRoaXNPYmplY3QsIHRoaXNPYmplY3QtPmNs
YXNzTmFtZSh2bSksIHRoaXNPYmplY3QtPmxlbmd0aCgpKTsKICAgICBDb21tYVByaW50ZXIgY29t
bWE7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNw
cAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNG
dW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogIENvcHly
aWdodCAoQykgMTk5OS0yMDAyIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCiAgKiAgQ29w
eXJpZ2h0IChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0gKiAgQ29weXJpZ2h0
IChDKSAyMDAzLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHly
aWdodCAoQykgMjAwMy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqICBD
b3B5cmlnaHQgKEMpIDIwMDcgQ2FtZXJvbiBad2FyaWNoIChjd3p3YXJpY2hAdXdhdGVybG9vLmNh
KQogICogIENvcHlyaWdodCAoQykgMjAwNyBNYWtzIE9ybG92aWNoCiAgKiAgQ29weXJpZ2h0IChD
KSAyMDE1IENhbm9uIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KQEAgLTEzOSw3ICsxMzksNyBA
QCB2b2lkIEpTRnVuY3Rpb246OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgCiAgICAgbV9leGVjdXRh
YmxlLnNldCh2bSwgdGhpcywgZXhlY3V0YWJsZSk7CiAgICAgLy8gU29tZSBOYXRpdmVFeGVjdXRh
YmxlIGZ1bmN0aW9ucywgbGlrZSBKU0JvdW5kRnVuY3Rpb24sIGRlY2lkZSB0byBsYXppbHkgYWxs
b2NhdGUgdGhlaXIgbmFtZSBzdHJpbmcuCiAgICAgaWYgKCFuYW1lLmlzTnVsbCgpKQotICAgICAg
ICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzU3RyaW5nKCZ2bSwgbmFt
ZSksIFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IFByb3BlcnR5QXR0cmlidXRlOjpEb250
RW51bSk7CisgICAgICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNT
dHJpbmcodm0sIG5hbWUpLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBQcm9wZXJ0eUF0
dHJpYnV0ZTo6RG9udEVudW0pOwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+
bGVuZ3RoLCBqc051bWJlcihsZW5ndGgpLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBQ
cm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwogfQogCkBAIC0zMzQsNyArMzM0LDcgQEAgcHVi
bGljOgogCiAgICAgICAgIEpTQ2VsbCogY2FsbGVlID0gdmlzaXRvci0+Y2FsbGVlKCkuYXNDZWxs
KCk7CiAKLSAgICAgICAgaWYgKGNhbGxlZSAmJiBjYWxsZWUtPmluaGVyaXRzPEpTQm91bmRGdW5j
dGlvbj4oKmNhbGxlZS0+dm0oKSkpCisgICAgICAgIGlmIChjYWxsZWUgJiYgY2FsbGVlLT5pbmhl
cml0czxKU0JvdW5kRnVuY3Rpb24+KGNhbGxlZS0+dm0oKSkpCiAgICAgICAgICAgICByZXR1cm4g
U3RhY2tWaXNpdG9yOjpDb250aW51ZTsKIAogICAgICAgICBpZiAoIW1faGFzRm91bmRGcmFtZSAm
JiAoY2FsbGVlICE9IG1fdGFyZ2V0Q2FsbGVlKSkKQEAgLTc1Miw3ICs3NTIsNyBAQCB2b2lkIEpT
RnVuY3Rpb246OnJlaWZ5TmFtZShWTSYgdm0sIEV4ZWNTCiAgICAgICAgIG5hbWUgPSBtYWtlU3Ry
aW5nKCJzZXQgIiwgbmFtZSk7CiAKICAgICByYXJlRGF0YS0+c2V0SGFzUmVpZmllZE5hbWUoKTsK
LSAgICBwdXREaXJlY3Qodm0sIHByb3BJRCwganNTdHJpbmcoZXhlYywgbmFtZSksIGluaXRpYWxB
dHRyaWJ1dGVzKTsKKyAgICBwdXREaXJlY3Qodm0sIHByb3BJRCwganNTdHJpbmcodm0sIG5hbWUp
LCBpbml0aWFsQXR0cmlidXRlcyk7CiB9CiAKIEpTRnVuY3Rpb246OlByb3BlcnR5U3RhdHVzIEpT
RnVuY3Rpb246OnJlaWZ5TGF6eVByb3BlcnR5SWZOZWVkZWQoVk0mIHZtLCBFeGVjU3RhdGUqIGV4
ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCkBAIC04MTksNyArODE5LDcgQEAgSlNGdW5j
dGlvbjo6UHJvcGVydHlTdGF0dXMgSlNGdW5jdGlvbjo6cgogICAgICAgICBTdHJpbmcgbmFtZSA9
IG1ha2VTdHJpbmcoImJvdW5kICIsIHN0YXRpY19jYXN0PE5hdGl2ZUV4ZWN1dGFibGUqPihtX2V4
ZWN1dGFibGUuZ2V0KCkpLT5uYW1lKCkpOwogICAgICAgICB1bnNpZ25lZCBpbml0aWFsQXR0cmli
dXRlcyA9IFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8IFByb3BlcnR5QXR0cmlidXRlOjpS
ZWFkT25seTsKICAgICAgICAgcmFyZURhdGEtPnNldEhhc1JlaWZpZWROYW1lKCk7Ci0gICAgICAg
IHB1dERpcmVjdCh2bSwgbmFtZUlkZW50LCBqc1N0cmluZyhleGVjLCBuYW1lKSwgaW5pdGlhbEF0
dHJpYnV0ZXMpOworICAgICAgICBwdXREaXJlY3Qodm0sIG5hbWVJZGVudCwganNTdHJpbmcodm0s
IG5hbWUpLCBpbml0aWFsQXR0cmlidXRlcyk7CiAgICAgfQogICAgIHJldHVybiBQcm9wZXJ0eVN0
YXR1czo6UmVpZmllZDsKIH0KQEAgLTgyOCw3ICs4MjgsNyBAQCBKU0Z1bmN0aW9uOjpQcm9wZXJ0
eVN0YXR1cyBKU0Z1bmN0aW9uOjpyCiB2b2lkIEpTRnVuY3Rpb246OmFzc2VydFR5cGVJbmZvRmxh
Z0ludmFyaWFudHMoKQogewogICAgIC8vIElmIHlvdSBjaGFuZ2UgdGhpcywgeW91J2xsIG5lZWQg
dG8gdXBkYXRlIHNwZWN1bGF0aW9uRnJvbUNsYXNzSW5mby4KLSAgICBjb25zdCBDbGFzc0luZm8q
IGluZm8gPSBjbGFzc0luZm8oKnZtKCkpOworICAgIGNvbnN0IENsYXNzSW5mbyogaW5mbyA9IGNs
YXNzSW5mbyh2bSgpKTsKICAgICBpZiAoIShpbmxpbmVUeXBlRmxhZ3MoKSAmIEltcGxlbWVudHNE
ZWZhdWx0SGFzSW5zdGFuY2UpKQogICAgICAgICBSRUxFQVNFX0FTU0VSVChpbmZvID09IEpTQm91
bmRGdW5jdGlvbjo6aW5mbygpKTsKICAgICBlbHNlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lu
bGluZXMuaAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4
MiwxOCArNDgyLDIwIEBAIHRlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+CiBib29sIEpTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoCiAgICAgSlND
ZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSkKIHsKLSAg
ICByZXR1cm4gY2VsbC0+bWV0aG9kVGFibGUoZXhlYy0+dm0oKSktPmRlbGV0ZVByb3BlcnR5KGNl
bGwsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgcHJvcGVydHlOYW1lKSk7CisgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKKyAgICByZXR1cm4gY2VsbC0+bWV0aG9kVGFibGUodm0pLT5kZWxl
dGVQcm9wZXJ0eShjZWxsLCBleGVjLCBJZGVudGlmaWVyOjpmcm9tKHZtLCBwcm9wZXJ0eU5hbWUp
KTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KIHZvaWQgSlNHZW5lcmljVHlwZWRB
cnJheVZpZXc8QWRhcHRvcj46OmdldE93blByb3BlcnR5TmFtZXMoCiAgICAgSlNPYmplY3QqIG9i
amVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgYXJyYXksIEVudW1lcmF0
aW9uTW9kZSBtb2RlKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNHZW5lcmljVHlwZWRBcnJheVZp
ZXcqPihvYmplY3QpOwogCiAgICAgaWYgKGFycmF5LmluY2x1ZGVTdHJpbmdQcm9wZXJ0aWVzKCkp
IHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRoaXNPYmplY3QtPm1fbGVuZ3Ro
OyArK2kpCi0gICAgICAgICAgICBhcnJheS5hZGQoSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpKSk7
CisgICAgICAgICAgICBhcnJheS5hZGQoSWRlbnRpZmllcjo6ZnJvbSh2bSwgaSkpOwogICAgIH0K
ICAgICAKICAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIGV4ZWMs
IGFycmF5LCBtb2RlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xv
YmFsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0dsb2JhbE9iamVjdC5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzY2
LDcgKzc2Niw3IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OmluaXQoVk0mIHZtKQogICAgIG1fYXJy
YXlDb25zdHJ1Y3Rvci5zZXQodm0sIHRoaXMsIGFycmF5Q29uc3RydWN0b3IpOwogICAgIAogICAg
IFJlZ0V4cENvbnN0cnVjdG9yKiByZWdFeHBDb25zdHJ1Y3RvciA9IFJlZ0V4cENvbnN0cnVjdG9y
OjpjcmVhdGUodm0sIFJlZ0V4cENvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUodm0sIHRoaXMs
IG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpLCBtX3JlZ0V4cFByb3RvdHlwZS5nZXQoKSwgbV9z
cGVjaWVzR2V0dGVyU2V0dGVyLmdldCgpKTsKLSAgICBtX3JlZ0V4cEdsb2JhbERhdGEuY2FjaGVk
UmVzdWx0KCkucmVjb3JkKHZtLCB0aGlzLCBudWxscHRyLCBqc0VtcHR5U3RyaW5nKCZ2bSksIE1h
dGNoUmVzdWx0KDAsIDApKTsKKyAgICBtX3JlZ0V4cEdsb2JhbERhdGEuY2FjaGVkUmVzdWx0KCku
cmVjb3JkKHZtLCB0aGlzLCBudWxscHRyLCBqc0VtcHR5U3RyaW5nKHZtKSwgTWF0Y2hSZXN1bHQo
MCwgMCkpOwogICAgIAogI2lmIEVOQUJMRShTSEFSRURfQVJSQVlfQlVGRkVSKQogICAgIEpTU2hh
cmVkQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvciogc2hhcmVkQXJyYXlCdWZmZXJDb25zdHJ1Y3RvciA9
IG51bGxwdHI7CkBAIC04NDksNyArODQ5LDcgQEAgY2FwaXRhbE5hbWUgIyMgQ29uc3RydWN0b3Iq
IGxvd2VyTmFtZSAjIwogCiAjaWYgRU5BQkxFKFNIQVJFRF9BUlJBWV9CVUZGRVIpCiAgICAgcHV0
RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPlNoYXJlZEFycmF5
QnVmZmVyLCBzaGFyZWRBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLCBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7Ci0gICAgcHV0RGlyZWN0V2l0aG91dFRy
YW5zaXRpb24odm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgIkF0b21pY3MiKSwgYXRv
bWljc09iamVjdCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250
RW51bSkpOworICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCAiQXRvbWljcyIpLCBhdG9taWNzT2JqZWN0LCBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7CiAjZW5kaWYKIAogI2RlZmluZSBQ
VVRfQ09OU1RSVUNUT1JfRk9SX1NJTVBMRV9UWVBFKGNhcGl0YWxOYW1lLCBsb3dlck5hbWUsIHBy
b3Blck5hbWUsIGluc3RhbmNlVHlwZSwganNOYW1lLCBwcm90b3R5cGVCYXNlLCBmZWF0dXJlRmxh
ZykgXApAQCAtMTEwMyw3ICsxMTAzLDcgQEAgY2FwaXRhbE5hbWUgIyMgQ29uc3RydWN0b3IqIGxv
d2VyTmFtZSAjIwogICAgICAgICAgICAgICAgIGluaXQuc2V0KFdlYkFzc2VtYmx5VG9KU0NhbGxl
ZTo6Y3JlYXRlU3RydWN0dXJlKGluaXQudm0sIGluaXQub3duZXIsIGpzTnVsbCgpKSk7CiAgICAg
ICAgICAgICB9KTsKICAgICAgICAgYXV0byogd2ViQXNzZW1ibHkgPSBKU1dlYkFzc2VtYmx5Ojpj
cmVhdGUodm0sIHRoaXMsIEpTV2ViQXNzZW1ibHk6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgdGhpcywg
bV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKTsKLSAgICAgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5z
aXRpb24odm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgIldlYkFzc2VtYmx5IiksIHdl
YkFzc2VtYmx5LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRF
bnVtKSk7CisgICAgICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKHZtLCAiV2ViQXNzZW1ibHkiKSwgd2ViQXNzZW1ibHksIHN0YXRpY19jYXN0
PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKIAogI2RlZmluZSBDUkVB
VEVfV0VCQVNTRU1CTFlfUFJPVE9UWVBFKGNhcGl0YWxOYW1lLCBsb3dlck5hbWUsIHByb3Blck5h
bWUsIGluc3RhbmNlVHlwZSwganNOYW1lLCBwcm90b3R5cGVCYXNlLCBmZWF0dXJlRmxhZykgXAog
ICAgIGlmIChmZWF0dXJlRmxhZykge1wKQEAgLTE4MzEsNyArMTgzMSw3IEBAIHZvaWQgSlNHbG9i
YWxPYmplY3Q6OmV4cG9zZURvbGxhclZNKFZNJiAKICAgICB9OwogICAgIGFkZFN0YXRpY0dsb2Jh
bHMoZXh0cmFTdGF0aWNHbG9iYWxzLCBXVEZfQVJSQVlfTEVOR1RIKGV4dHJhU3RhdGljR2xvYmFs
cykpOwogCi0gICAgcHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGdsb2JhbEV4
ZWMoKSwgIiR2bSIpLCBkb2xsYXJWTSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0
cmlidXRlOjpEb250RW51bSkpOworICAgIHB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZyh2bSwgIiR2bSIpLCBkb2xsYXJWTSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5
QXR0cmlidXRlOjpEb250RW51bSkpOwogfQogCiB2b2lkIEpTR2xvYmFsT2JqZWN0OjphZGRTdGF0
aWNHbG9iYWxzKEdsb2JhbFByb3BlcnR5SW5mbyogZ2xvYmFscywgaW50IGNvdW50KQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2Jq
ZWN0RnVuY3Rpb25zLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDcgKzEsNyBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMiBIYXJyaSBQb3J0
ZW4gKHBvcnRlbkBrZGUub3JnKQogICogIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAo
cG1rQHBvc3QuY29tKQotICogIENvcHlyaWdodCAoQykgMjAwMy0yMDE4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3IENhbWVyb24gWndh
cmljaCAoY3d6d2FyaWNoQHV3YXRlcmxvby5jYSkKICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgTWFr
cyBPcmxvdmljaAogICoKQEAgLTE1Miw3ICsxNTIsNyBAQCBzdGF0aWMgSlNWYWx1ZSBlbmNvZGUo
RXhlY1N0YXRlKiBleGVjLCBjCiAKICAgICBpZiAoVU5MSUtFTFkoYnVpbGRlci5oYXNPdmVyZmxv
d2VkKCkpKQogICAgICAgICByZXR1cm4gdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMsIHNjb3Bl
KTsKLSAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgYnVpbGRlci50b1N0cmluZygpKTsKKyAgICBy
ZXR1cm4ganNTdHJpbmcodm0sIGJ1aWxkZXIudG9TdHJpbmcoKSk7CiB9CiAKIHN0YXRpYyBKU1Zh
bHVlIGVuY29kZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEJpdG1hcDwyNTY+JiBkb05vdEVzY2Fw
ZSkKQEAgLTI0MSw3ICsyNDEsNyBAQCBzdGF0aWMgSlNWYWx1ZSBkZWNvZGUoRXhlY1N0YXRlKiBl
eGVjLCBjCiAgICAgfQogICAgIGlmIChVTkxJS0VMWShidWlsZGVyLmhhc092ZXJmbG93ZWQoKSkp
CiAgICAgICAgIHJldHVybiB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYywgc2NvcGUpOwotICAg
IFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwganNTdHJpbmcoJnZtLCBidWlsZGVyLnRvU3RyaW5n
KCkpKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGpzU3RyaW5nKHZtLCBidWlsZGVy
LnRvU3RyaW5nKCkpKTsKIH0KIAogc3RhdGljIEpTVmFsdWUgZGVjb2RlKEV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgQml0bWFwPDI1Nj4mIGRvTm90VW5lc2NhcGUsIGJvb2wgc3RyaWN0KQpAQCAtNjAx
LDYgKzYwMSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY0UKICAg
ICApOwogCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b1N0cmluZ1ZpZXcoZXhlYywgZXhl
Yy0+YXJndW1lbnQoMCksIFsmXSAoU3RyaW5nVmlldyB2aWV3KSB7CisgICAgICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7CiAgICAgICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKICAgICAgICAgaWYg
KHZpZXcuaXM4Qml0KCkpIHsKICAgICAgICAgICAgIGNvbnN0IExDaGFyKiBjID0gdmlldy5jaGFy
YWN0ZXJzOCgpOwpAQCAtNjEzLDcgKzYxNCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZ2xvYmFsRnVuY0UKICAgICAgICAgICAgICAgICAgICAgYXBwZW5kQnl0ZUFzSGV4KHUsIGJ1
aWxkZXIpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJl
dHVybiBqc1N0cmluZyhleGVjLCBidWlsZGVyLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgcmV0
dXJuIGpzU3RyaW5nKHZtLCBidWlsZGVyLnRvU3RyaW5nKCkpOwogICAgICAgICB9CiAKICAgICAg
ICAgY29uc3QgVUNoYXIqIGMgPSB2aWV3LmNoYXJhY3RlcnMxNigpOwpAQCAtNjMxLDcgKzYzMiw3
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY0UKICAgICAgICAgICAg
IH0KICAgICAgICAgfQogCi0gICAgICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBidWlsZGVyLnRv
U3RyaW5nKCkpOworICAgICAgICByZXR1cm4ganNTdHJpbmcodm0sIGJ1aWxkZXIudG9TdHJpbmco
KSk7CiAgICAgfSkpOwogfQogCkBAIC02ODcsNyArNjg4LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBnbG9iYWxGdW5jVQogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAg
ICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIGJ1aWxkZXIudG9TdHJpbmcoKSk7CisgICAgICAgIHJl
dHVybiBqc1N0cmluZyhleGVjLT52bSgpLCBidWlsZGVyLnRvU3RyaW5nKCkpOwogICAgIH0pKTsK
IH0KIApAQCAtODA0LDcgKzgwNSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xv
YmFsRnVuY0IKIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxGdW5jQnVpbHRp
bkRlc2NyaWJlKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzU3RyaW5nKGV4ZWMsIHRvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDApKSkpOworICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcoZXhlYy0+dm0oKSwgdG9TdHJpbmcoZXhlYy0+YXJn
dW1lbnQoMCkpKSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVu
Y0ltcG9ydE1vZHVsZShFeGVjU3RhdGUqIGV4ZWMpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0xleGljYWxFbnZpcm9ubWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMZXhpY2FsRW52aXJvbm1lbnQuY3BwCShyZXZpc2lv
biAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xleGljYWxFbnZp
cm9ubWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDA4LCAyMDA5LCAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzMsNiArNzMsNyBA
QCB2b2lkIEpTTGV4aWNhbEVudmlyb25tZW50OjpnZXRPd25Ob25JbmRlCiAgICAgewogICAgICAg
ICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKHRoaXNPYmplY3QtPnN5bWJvbFRhYmxlKCktPm1f
bG9jayk7CiAgICAgICAgIFN5bWJvbFRhYmxlOjpNYXA6Oml0ZXJhdG9yIGVuZCA9IHRoaXNPYmpl
Y3QtPnN5bWJvbFRhYmxlKCktPmVuZChsb2NrZXIpOworICAgICAgICBWTSYgdm0gPSBleGVjLT52
bSgpOwogICAgICAgICBmb3IgKFN5bWJvbFRhYmxlOjpNYXA6Oml0ZXJhdG9yIGl0ID0gdGhpc09i
amVjdC0+c3ltYm9sVGFibGUoKS0+YmVnaW4obG9ja2VyKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAg
ICAgICAgICAgICBpZiAoaXQtPnZhbHVlLmdldEF0dHJpYnV0ZXMoKSAmIFByb3BlcnR5QXR0cmli
dXRlOjpEb250RW51bSAmJiAhbW9kZS5pbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKCkpCiAgICAg
ICAgICAgICAgICAgY29udGludWU7CkBAIC04MCw3ICs4MSw3IEBAIHZvaWQgSlNMZXhpY2FsRW52
aXJvbm1lbnQ6OmdldE93bk5vbkluZGUKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgICAgIGlmIChpdC0+a2V5LT5pc1N5bWJvbCgpICYmICFwcm9wZXJ0eU5hbWVzLmluY2x1ZGVT
eW1ib2xQcm9wZXJ0aWVzKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9tVWlkKGV4ZWMsIGl0LT5rZXkuZ2V0
KCkpKTsKKyAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb21VaWQo
dm0sIGl0LT5rZXkuZ2V0KCkpKTsKICAgICAgICAgfQogICAgIH0KICAgICAvLyBTa2lwIHRoZSBK
U1N5bWJvbFRhYmxlT2JqZWN0J3MgaW1wbGVtZW50YXRpb24gb2YgZ2V0T3duTm9uSW5kZXhQcm9w
ZXJ0eU5hbWVzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZUVu
dmlyb25tZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU01vZHVsZUVudmlyb25tZW50LmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVFbnZpcm9ubWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTkgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC04MSw3ICs4MSw3IEBAIGJvb2wgSlNNb2R1bGVFbnZpcm9ubWVudDo6Z2V0T3duUHJv
cGVydHkKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU01vZHVsZUVudmlyb25tZW50KiB0aGlzT2JqZWN0ID0g
anNDYXN0PEpTTW9kdWxlRW52aXJvbm1lbnQqPihjZWxsKTsKLSAgICBBYnN0cmFjdE1vZHVsZVJl
Y29yZDo6UmVzb2x1dGlvbiByZXNvbHV0aW9uID0gdGhpc09iamVjdC0+bW9kdWxlUmVjb3JkKCkt
PnJlc29sdmVJbXBvcnQoZXhlYywgSWRlbnRpZmllcjo6ZnJvbVVpZChleGVjLCBwcm9wZXJ0eU5h
bWUudWlkKCkpKTsKKyAgICBBYnN0cmFjdE1vZHVsZVJlY29yZDo6UmVzb2x1dGlvbiByZXNvbHV0
aW9uID0gdGhpc09iamVjdC0+bW9kdWxlUmVjb3JkKCktPnJlc29sdmVJbXBvcnQoZXhlYywgSWRl
bnRpZmllcjo6ZnJvbVVpZCh2bSwgcHJvcGVydHlOYW1lLnVpZCgpKSk7CiAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwogICAgIGlmIChyZXNvbHV0aW9uLnR5cGUgPT0gQWJz
dHJhY3RNb2R1bGVSZWNvcmQ6OlJlc29sdXRpb246OlR5cGU6OlJlc29sdmVkKSB7CiAgICAgICAg
IC8vIFdoZW4gcmVzb2x2ZUltcG9ydCByZXNvbHZlcyB0aGUgcmVzb2x1dGlvbiwgdGhlIGltcG9y
dGVkIG1vZHVsZSBlbnZpcm9ubWVudCBtdXN0IGhhdmUgdGhlIGJpbmRpbmcuCkBAIC0xMTgsNyAr
MTE4LDcgQEAgYm9vbCBKU01vZHVsZUVudmlyb25tZW50OjpwdXQoSlNDZWxsKiBjZQogCiAgICAg
SlNNb2R1bGVFbnZpcm9ubWVudCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU01vZHVsZUVudmlyb25t
ZW50Kj4oY2VsbCk7CiAgICAgLy8gQWxsIGltcG9ydGVkIGJpbmRpbmdzIGFyZSBpbW11dGFibGUu
Ci0gICAgQWJzdHJhY3RNb2R1bGVSZWNvcmQ6OlJlc29sdXRpb24gcmVzb2x1dGlvbiA9IHRoaXNP
YmplY3QtPm1vZHVsZVJlY29yZCgpLT5yZXNvbHZlSW1wb3J0KGV4ZWMsIElkZW50aWZpZXI6OmZy
b21VaWQoZXhlYywgcHJvcGVydHlOYW1lLnVpZCgpKSk7CisgICAgQWJzdHJhY3RNb2R1bGVSZWNv
cmQ6OlJlc29sdXRpb24gcmVzb2x1dGlvbiA9IHRoaXNPYmplY3QtPm1vZHVsZVJlY29yZCgpLT5y
ZXNvbHZlSW1wb3J0KGV4ZWMsIElkZW50aWZpZXI6OmZyb21VaWQodm0sIHByb3BlcnR5TmFtZS51
aWQoKSkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKICAgICBpZiAo
cmVzb2x1dGlvbi50eXBlID09IEFic3RyYWN0TW9kdWxlUmVjb3JkOjpSZXNvbHV0aW9uOjpUeXBl
OjpSZXNvbHZlZCkgewogICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwgUmVhZG9u
bHlQcm9wZXJ0eVdyaXRlRXJyb3IpOwpAQCAtMTM0LDcgKzEzNCw3IEBAIGJvb2wgSlNNb2R1bGVF
bnZpcm9ubWVudDo6ZGVsZXRlUHJvcGVydHkKIAogICAgIEpTTW9kdWxlRW52aXJvbm1lbnQqIHRo
aXNPYmplY3QgPSBqc0Nhc3Q8SlNNb2R1bGVFbnZpcm9ubWVudCo+KGNlbGwpOwogICAgIC8vIEFs
bCBpbXBvcnRlZCBiaW5kaW5ncyBhcmUgaW1tdXRhYmxlLgotICAgIEFic3RyYWN0TW9kdWxlUmVj
b3JkOjpSZXNvbHV0aW9uIHJlc29sdXRpb24gPSB0aGlzT2JqZWN0LT5tb2R1bGVSZWNvcmQoKS0+
cmVzb2x2ZUltcG9ydChleGVjLCBJZGVudGlmaWVyOjpmcm9tVWlkKGV4ZWMsIHByb3BlcnR5TmFt
ZS51aWQoKSkpOworICAgIEFic3RyYWN0TW9kdWxlUmVjb3JkOjpSZXNvbHV0aW9uIHJlc29sdXRp
b24gPSB0aGlzT2JqZWN0LT5tb2R1bGVSZWNvcmQoKS0+cmVzb2x2ZUltcG9ydChleGVjLCBJZGVu
dGlmaWVyOjpmcm9tVWlkKHZtLCBwcm9wZXJ0eU5hbWUudWlkKCkpKTsKICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7CiAgICAgaWYgKHJlc29sdXRpb24udHlwZSA9PSBBYnN0
cmFjdE1vZHVsZVJlY29yZDo6UmVzb2x1dGlvbjo6VHlwZTo6UmVzb2x2ZWQpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxl
TG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U01vZHVsZUxvYWRlci5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTTW9kdWxlTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOCBBcHBsZSBJbmMuIEFsbCBSaWdo
dHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOSBBcHBsZSBJbmMuIEFsbCBS
aWdodHMgUmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTYgWXVzdWtlIFN1enVraSA8dXRh
dGFuZS50ZWFAZ21haWwuY29tPi4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTEwOSw3ICsxMDksNyBA
QCB2b2lkIEpTTW9kdWxlTG9hZGVyOjpmaW5pc2hDcmVhdGlvbihFeGVjCiAgICAgQVNTRVJUKGlu
aGVyaXRzKHZtLCBpbmZvKCkpKTsKICAgICBKU01hcCogbWFwID0gSlNNYXA6OmNyZWF0ZShleGVj
LCB2bSwgZ2xvYmFsT2JqZWN0LT5tYXBTdHJ1Y3R1cmUoKSk7CiAgICAgc2NvcGUucmVsZWFzZUFz
c2VydE5vRXhjZXB0aW9uKCk7Ci0gICAgcHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKCZ2bSwgInJlZ2lzdHJ5IiksIG1hcCk7CisgICAgcHV0RGlyZWN0KHZtLCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKHZtLCAicmVnaXN0cnkiKSwgbWFwKTsKIH0KIAogLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tIEZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQpAQCAtMjQxLDcgKzI0MSw3IEBAIEpTSW50ZXJuYWxQcm9taXNlKiBKU01vZHVsZUxvYWRl
cjo6cmVxdWUKICAgICBBU1NFUlQoY2FsbFR5cGUgIT0gQ2FsbFR5cGU6Ok5vbmUpOwogCiAgICAg
TWFya2VkQXJndW1lbnRCdWZmZXIgYXJndW1lbnRzOwotICAgIGFyZ3VtZW50cy5hcHBlbmQoanNT
dHJpbmcoZXhlYywgbW9kdWxlS2V5LmltcGwoKSkpOworICAgIGFyZ3VtZW50cy5hcHBlbmQoanNT
dHJpbmcodm0sIG1vZHVsZUtleS5pbXBsKCkpKTsKICAgICBhcmd1bWVudHMuYXBwZW5kKHBhcmFt
ZXRlcnMpOwogICAgIGFyZ3VtZW50cy5hcHBlbmQoc2NyaXB0RmV0Y2hlcik7CiAgICAgQVNTRVJU
KCFhcmd1bWVudHMuaGFzT3ZlcmZsb3dlZCgpKTsKQEAgLTQyMCw3ICs0MjAsNyBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1vZHVsZUxvYWRlCiAKICAgICBQYXJzZXJFcnJvciBlcnJv
cjsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8TW9kdWxlUHJvZ3JhbU5vZGU+IG1vZHVsZVByb2dyYW1O
b2RlID0gcGFyc2U8TW9kdWxlUHJvZ3JhbU5vZGU+KAotICAgICAgICAmdm0sIHNvdXJjZUNvZGUs
IElkZW50aWZpZXIoKSwgSlNQYXJzZXJCdWlsdGluTW9kZTo6Tm90QnVpbHRpbiwKKyAgICAgICAg
dm0sIHNvdXJjZUNvZGUsIElkZW50aWZpZXIoKSwgSlNQYXJzZXJCdWlsdGluTW9kZTo6Tm90QnVp
bHRpbiwKICAgICAgICAgSlNQYXJzZXJTdHJpY3RNb2RlOjpTdHJpY3QsIEpTUGFyc2VyU2NyaXB0
TW9kZTo6TW9kdWxlLCBTb3VyY2VQYXJzZU1vZGU6Ok1vZHVsZUFuYWx5emVNb2RlLCBTdXBlckJp
bmRpbmc6Ok5vdE5lZWRlZCwgZXJyb3IpOwogICAgIGlmIChlcnJvci5pc1ZhbGlkKCkpCiAgICAg
ICAgIHJldHVybiByZWplY3QoZXJyb3IudG9FcnJvck9iamVjdChleGVjLT5sZXhpY2FsR2xvYmFs
T2JqZWN0KCksIHNvdXJjZUNvZGUpKTsKQEAgLTQ0Nyw3ICs0NDcsNyBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIG1vZHVsZUxvYWRlCiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgc2l6ZV90IGkgPSAwOwogICAgIGZvciAoYXV0byYg
a2V5IDogbW9kdWxlUmVjb3JkLT5yZXF1ZXN0ZWRNb2R1bGVzKCkpIHsKLSAgICAgICAgcmVzdWx0
LT5wdXREaXJlY3RJbmRleChleGVjLCBpKyssIGpzU3RyaW5nKGV4ZWMsIGtleS5nZXQoKSkpOwor
ICAgICAgICByZXN1bHQtPnB1dERpcmVjdEluZGV4KGV4ZWMsIGkrKywganNTdHJpbmcodm0sIGtl
eS5nZXQoKSkpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNW
YWx1ZSgpKTsKICAgICB9CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVOYW1lc3BhY2VPYmplY3Qu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxl
TmFtZXNwYWNlT2JqZWN0LmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtNzMsNyArNzMsNyBAQCB2b2lkIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0OjpmaW5pc2hD
cmVhCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFt
ZXMtPnRvU3RyaW5nVGFnU3ltYm9sLCBqc1N0cmluZygmdm0sICJNb2R1bGUiKSwgUHJvcGVydHlB
dHRyaWJ1dGU6OkRvbnRFbnVtIHwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUgfCBQcm9w
ZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlO
YW1lcy0+dG9TdHJpbmdUYWdTeW1ib2wsIGpzU3RyaW5nKHZtLCAiTW9kdWxlIiksIFByb3BlcnR5
QXR0cmlidXRlOjpEb250RW51bSB8IFByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgUHJv
cGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KTsKIAogICAgIC8vIGh0dHA6Ly93d3cuZWNtYS1pbnRl
cm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1tb2R1bGUtbmFtZXNwYWNlLWV4b3RpYy1v
YmplY3RzLWdldHByb3RvdHlwZW9mCiAgICAgLy8gaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9u
YWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLW1vZHVsZS1uYW1lc3BhY2UtZXhvdGljLW9iamVjdHMt
c2V0cHJvdG90eXBlb2YtdgpAQCAtMTczLDggKzE3Myw5IEBAIGJvb2wgSlNNb2R1bGVOYW1lc3Bh
Y2VPYmplY3Q6OmdldE93blByb3AKIAogYm9vbCBKU01vZHVsZU5hbWVzcGFjZU9iamVjdDo6Z2V0
T3duUHJvcGVydHlTbG90QnlJbmRleChKU09iamVjdCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1
bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKKyAgICBWTSYgdm0g
PSBleGVjLT52bSgpOwogICAgIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0KiB0aGlzT2JqZWN0ID0g
anNDYXN0PEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0Kj4oY2VsbCk7Ci0gICAgcmV0dXJuIHRoaXNP
YmplY3QtPmdldE93blByb3BlcnR5U2xvdENvbW1vbihleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4
ZWMsIHByb3BlcnR5TmFtZSksIHNsb3QpOworICAgIHJldHVybiB0aGlzT2JqZWN0LT5nZXRPd25Q
cm9wZXJ0eVNsb3RDb21tb24oZXhlYywgSWRlbnRpZmllcjo6ZnJvbSh2bSwgcHJvcGVydHlOYW1l
KSwgc2xvdCk7CiB9CiAKIGJvb2wgSlNNb2R1bGVOYW1lc3BhY2VPYmplY3Q6OnB1dChKU0NlbGwq
LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90
JiBzbG90KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVSZWNv
cmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9k
dWxlUmVjb3JkLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNNb2R1bGVSZWNvcmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTgwLDcgKzE4
MCw3IEBAIHZvaWQgSlNNb2R1bGVSZWNvcmQ6Omluc3RhbnRpYXRlRGVjbGFyYXQKICAgICAgICAg
VmFyT2Zmc2V0IG9mZnNldCA9IGVudHJ5LnZhck9mZnNldCgpOwogICAgICAgICBpZiAoIW9mZnNl
dC5pc1N0YWNrKCkpIHsKICAgICAgICAgICAgIGJvb2wgcHV0UmVzdWx0ID0gZmFsc2U7Ci0gICAg
ICAgICAgICBzeW1ib2xUYWJsZVB1dFRvdWNoV2F0Y2hwb2ludFNldChtb2R1bGVFbnZpcm9ubWVu
dCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbVVpZChleGVjLCB2YXJpYWJsZS5rZXkuZ2V0KCkpLCBq
c1VuZGVmaW5lZCgpLCAvKiBzaG91bGRUaHJvd1JlYWRPbmx5RXJyb3IgKi8gZmFsc2UsIC8qIGln
bm9yZVJlYWRPbmx5RXJyb3JzICovIHRydWUsIHB1dFJlc3VsdCk7CisgICAgICAgICAgICBzeW1i
b2xUYWJsZVB1dFRvdWNoV2F0Y2hwb2ludFNldChtb2R1bGVFbnZpcm9ubWVudCwgZXhlYywgSWRl
bnRpZmllcjo6ZnJvbVVpZCh2bSwgdmFyaWFibGUua2V5LmdldCgpKSwganNVbmRlZmluZWQoKSwg
Lyogc2hvdWxkVGhyb3dSZWFkT25seUVycm9yICovIGZhbHNlLCAvKiBpZ25vcmVSZWFkT25seUVy
cm9ycyAqLyB0cnVlLCBwdXRSZXN1bHQpOwogICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgdm9pZCgpKTsKICAgICAgICAgfQogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTT05PYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTT05PYmplY3QuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09OT2JqZWN0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTY0LDcgKzY0LDcgQEAgdm9pZCBKU09OT2JqZWN0OjpmaW5pc2hDcmVhdGlvbihWTSYg
dm0pCiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIEFTU0VSVChpbmhlcml0cyh2
bSwgaW5mbygpKSk7CiAKLSAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJv
cGVydHlOYW1lcy0+dG9TdHJpbmdUYWdTeW1ib2wsIGpzU3RyaW5nKCZ2bSwgIkpTT04iKSwgUHJv
cGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtIHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KTsK
KyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+dG9T
dHJpbmdUYWdTeW1ib2wsIGpzU3RyaW5nKHZtLCAiSlNPTiIpLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6
RG9udEVudW0gfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpOwogfQogCiAvLyBQcm9wZXJ0
eU5hbWVGb3JGdW5jdGlvbkNhbGwgb2JqZWN0cyBtdXN0IGJlIG9uIHRoZSBzdGFjaywgc2luY2Ug
dGhlIEpTVmFsdWUgdGhhdCB0aGV5IGNyZWF0ZSBpcyBub3QgbWFya2VkLgpAQCAtMjA1LDEzICsy
MDUsMTMgQEAgaW5saW5lIFByb3BlcnR5TmFtZUZvckZ1bmN0aW9uQ2FsbDo6UHJvcAogSlNWYWx1
ZSBQcm9wZXJ0eU5hbWVGb3JGdW5jdGlvbkNhbGw6OnZhbHVlKEV4ZWNTdGF0ZSogZXhlYykgY29u
c3QKIHsKICAgICBpZiAoIW1fdmFsdWUpIHsKKyAgICAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsK
ICAgICAgICAgaWYgKG1faWRlbnRpZmllcikKLSAgICAgICAgICAgIG1fdmFsdWUgPSBqc1N0cmlu
ZyhleGVjLCBtX2lkZW50aWZpZXItPnN0cmluZygpKTsKKyAgICAgICAgICAgIG1fdmFsdWUgPSBq
c1N0cmluZyh2bSwgbV9pZGVudGlmaWVyLT5zdHJpbmcoKSk7CiAgICAgICAgIGVsc2UgewotICAg
ICAgICAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICAgICAgICAgIGlmIChtX251bWJlciA8
PSA5KQogICAgICAgICAgICAgICAgIHJldHVybiB2bS5zbWFsbFN0cmluZ3Muc2luZ2xlQ2hhcmFj
dGVyU3RyaW5nKG1fbnVtYmVyICsgJzAnKTsKLSAgICAgICAgICAgIG1fdmFsdWUgPSBqc05vbnRy
aXZpYWxTdHJpbmcoJnZtLCB2bS5udW1lcmljU3RyaW5ncy5hZGQobV9udW1iZXIpKTsKKyAgICAg
ICAgICAgIG1fdmFsdWUgPSBqc05vbnRyaXZpYWxTdHJpbmcodm0sIHZtLm51bWVyaWNTdHJpbmdz
LmFkZChtX251bWJlcikpOwogICAgICAgICB9CiAgICAgfQogICAgIHJldHVybiBtX3ZhbHVlOwpA
QCAtMjIyLDcgKzIyMiw3IEBAIEpTVmFsdWUgUHJvcGVydHlOYW1lRm9yRnVuY3Rpb25DYWxsOjp2
YWwKIFN0cmluZ2lmaWVyOjpTdHJpbmdpZmllcihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgcmVw
bGFjZXIsIEpTVmFsdWUgc3BhY2UpCiAgICAgOiBtX2V4ZWMoZXhlYykKICAgICAsIG1fcmVwbGFj
ZXIocmVwbGFjZXIpCi0gICAgLCBtX2FycmF5UmVwbGFjZXJQcm9wZXJ0eU5hbWVzKCZleGVjLT52
bSgpLCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzLCBQcml2YXRlU3ltYm9sTW9kZTo6RXhjbHVk
ZSkKKyAgICAsIG1fYXJyYXlSZXBsYWNlclByb3BlcnR5TmFtZXMoZXhlYy0+dm0oKSwgUHJvcGVy
dHlOYW1lTW9kZTo6U3RyaW5ncywgUHJpdmF0ZVN5bWJvbE1vZGU6OkV4Y2x1ZGUpCiB7CiAgICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CkBAIC0yODcsNyArMjg3LDcgQEAgSlNWYWx1ZSBTdHJpbmdpZmllcjo6c3RyaW5naWZ5
KEpTVmFsdWUgdgogICAgIH0KICAgICBpZiAoVU5MSUtFTFkoc3RyaW5naWZ5UmVzdWx0ICE9IFN0
cmluZ2lmeVN1Y2NlZWRlZCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIFJF
TEVBU0VfQU5EX1JFVFVSTihzY29wZSwganNTdHJpbmcobV9leGVjLCByZXN1bHQudG9TdHJpbmco
KSkpOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwganNTdHJpbmcodm0sIHJlc3VsdC50
b1N0cmluZygpKSk7CiB9CiAKIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBTdHJpbmdpZmllcjo6dG9K
U09OKEpTVmFsdWUgYmFzZVZhbHVlLCBjb25zdCBQcm9wZXJ0eU5hbWVGb3JGdW5jdGlvbkNhbGwm
IHByb3BlcnR5TmFtZSkKQEAgLTQ5Niw3ICs0OTYsNyBAQCBib29sIFN0cmluZ2lmaWVyOjpIb2xk
ZXI6OmFwcGVuZE5leHRQcm9wCiAgICAgICAgICAgICBpZiAoc3RyaW5naWZpZXIubV91c2luZ0Fy
cmF5UmVwbGFjZXIpCiAgICAgICAgICAgICAgICAgbV9wcm9wZXJ0eU5hbWVzID0gc3RyaW5naWZp
ZXIubV9hcnJheVJlcGxhY2VyUHJvcGVydHlOYW1lcy5kYXRhKCk7CiAgICAgICAgICAgICBlbHNl
IHsKLSAgICAgICAgICAgICAgICBQcm9wZXJ0eU5hbWVBcnJheSBvYmplY3RQcm9wZXJ0eU5hbWVz
KCZ2bSwgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5ncywgUHJpdmF0ZVN5bWJvbE1vZGU6OkV4Y2x1
ZGUpOworICAgICAgICAgICAgICAgIFByb3BlcnR5TmFtZUFycmF5IG9iamVjdFByb3BlcnR5TmFt
ZXModm0sIFByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3MsIFByaXZhdGVTeW1ib2xNb2RlOjpFeGNs
dWRlKTsKICAgICAgICAgICAgICAgICBtX29iamVjdC0+bWV0aG9kVGFibGUodm0pLT5nZXRPd25Q
cm9wZXJ0eU5hbWVzKG1fb2JqZWN0LCBleGVjLCBvYmplY3RQcm9wZXJ0eU5hbWVzLCBFbnVtZXJh
dGlvbk1vZGUoKSk7CiAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
ZmFsc2UpOwogICAgICAgICAgICAgICAgIG1fcHJvcGVydHlOYW1lcyA9IG9iamVjdFByb3BlcnR5
TmFtZXMucmVsZWFzZURhdGEoKTsKQEAgLTcwNSw3ICs3MDUsNyBAQCBORVZFUl9JTkxJTkUgSlNW
YWx1ZSBXYWxrZXI6OndhbGsoSlNWYWx1CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXNl
IEFycmF5RW5kVmlzaXRNZW1iZXI6IHsKICAgICAgICAgICAgICAgICBKU0FycmF5KiBhcnJheSA9
IGpzQ2FzdDxKU0FycmF5Kj4obWFya2VkU3RhY2subGFzdCgpKTsKLSAgICAgICAgICAgICAgICBK
U1ZhbHVlIGZpbHRlcmVkVmFsdWUgPSBjYWxsUmV2aXZlcihhcnJheSwganNTdHJpbmcobV9leGVj
LCBTdHJpbmc6Om51bWJlcihpbmRleFN0YWNrLmxhc3QoKSkpLCBvdXRWYWx1ZSk7CisgICAgICAg
ICAgICAgICAgSlNWYWx1ZSBmaWx0ZXJlZFZhbHVlID0gY2FsbFJldml2ZXIoYXJyYXksIGpzU3Ry
aW5nKHZtLCBTdHJpbmc6Om51bWJlcihpbmRleFN0YWNrLmxhc3QoKSkpLCBvdXRWYWx1ZSk7CiAg
ICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICAgICAg
ICAgICAgICBpZiAoZmlsdGVyZWRWYWx1ZS5pc1VuZGVmaW5lZCgpKQogICAgICAgICAgICAgICAg
ICAgICBhcnJheS0+bWV0aG9kVGFibGUodm0pLT5kZWxldGVQcm9wZXJ0eUJ5SW5kZXgoYXJyYXks
IG1fZXhlYywgaW5kZXhTdGFjay5sYXN0KCkpOwpAQCAtNzI1LDcgKzcyNSw3IEBAIE5FVkVSX0lO
TElORSBKU1ZhbHVlIFdhbGtlcjo6d2FsayhKU1ZhbHUKICAgICAgICAgICAgICAgICBKU09iamVj
dCogb2JqZWN0ID0gYXNPYmplY3QoaW5WYWx1ZSk7CiAgICAgICAgICAgICAgICAgbWFya2VkU3Rh
Y2suYXBwZW5kV2l0aENyYXNoT25PdmVyZmxvdyhvYmplY3QpOwogICAgICAgICAgICAgICAgIGlu
ZGV4U3RhY2suYXBwZW5kKDApOwotICAgICAgICAgICAgICAgIHByb3BlcnR5U3RhY2suYXBwZW5k
KFByb3BlcnR5TmFtZUFycmF5KCZ2bSwgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5ncywgUHJpdmF0
ZVN5bWJvbE1vZGU6OkV4Y2x1ZGUpKTsKKyAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0YWNrLmFw
cGVuZChQcm9wZXJ0eU5hbWVBcnJheSh2bSwgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5ncywgUHJp
dmF0ZVN5bWJvbE1vZGU6OkV4Y2x1ZGUpKTsKICAgICAgICAgICAgICAgICBvYmplY3QtPm1ldGhv
ZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIG1fZXhlYywgcHJvcGVydHlT
dGFjay5sYXN0KCksIEVudW1lcmF0aW9uTW9kZSgpKTsKICAgICAgICAgICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgICAgICAgICAgfQpAQCAtNzYyLDcgKzc2Miw3
IEBAIE5FVkVSX0lOTElORSBKU1ZhbHVlIFdhbGtlcjo6d2FsayhKU1ZhbHUKICAgICAgICAgICAg
ICAgICBKU09iamVjdCogb2JqZWN0ID0ganNDYXN0PEpTT2JqZWN0Kj4obWFya2VkU3RhY2subGFz
dCgpKTsKICAgICAgICAgICAgICAgICBJZGVudGlmaWVyIHByb3AgPSBwcm9wZXJ0eVN0YWNrLmxh
c3QoKVtpbmRleFN0YWNrLmxhc3QoKV07CiAgICAgICAgICAgICAgICAgUHV0UHJvcGVydHlTbG90
IHNsb3Qob2JqZWN0KTsKLSAgICAgICAgICAgICAgICBKU1ZhbHVlIGZpbHRlcmVkVmFsdWUgPSBj
YWxsUmV2aXZlcihvYmplY3QsIGpzU3RyaW5nKG1fZXhlYywgcHJvcC5zdHJpbmcoKSksIG91dFZh
bHVlKTsKKyAgICAgICAgICAgICAgICBKU1ZhbHVlIGZpbHRlcmVkVmFsdWUgPSBjYWxsUmV2aXZl
cihvYmplY3QsIGpzU3RyaW5nKHZtLCBwcm9wLnN0cmluZygpKSwgb3V0VmFsdWUpOwogICAgICAg
ICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgICAgICAgICAg
ICAgaWYgKGZpbHRlcmVkVmFsdWUuaXNVbmRlZmluZWQoKSkKICAgICAgICAgICAgICAgICAgICAg
b2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmRlbGV0ZVByb3BlcnR5KG9iamVjdCwgbV9leGVjLCBw
cm9wKTsKQEAgLTc5Myw3ICs3OTMsNyBAQCBORVZFUl9JTkxJTkUgSlNWYWx1ZSBXYWxrZXI6Ondh
bGsoSlNWYWx1CiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3QoZmluYWxIb2xkZXIpOwogICAgIGZp
bmFsSG9sZGVyLT5tZXRob2RUYWJsZSh2bSktPnB1dChmaW5hbEhvbGRlciwgbV9leGVjLCB2bS5w
cm9wZXJ0eU5hbWVzLT5lbXB0eUlkZW50aWZpZXIsIG91dFZhbHVlLCBzbG90KTsKICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29w
ZSwgY2FsbFJldml2ZXIoZmluYWxIb2xkZXIsIGpzRW1wdHlTdHJpbmcobV9leGVjKSwgb3V0VmFs
dWUpKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGNhbGxSZXZpdmVyKGZpbmFsSG9s
ZGVyLCBqc0VtcHR5U3RyaW5nKHZtKSwgb3V0VmFsdWUpKTsKIH0KIAogLy8gRUNNQS0yNjIgdjUg
MTUuMTIuMgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNw
cAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNP
YmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBDb3B5cmln
aHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICogIENvcHly
aWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICogIENvcHlyaWdodCAo
QykgMjAwMy0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmln
aHQgKEMpIDIwMDMtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAgQ29w
eXJpZ2h0IChDKSAyMDA3IEVyaWMgU2VpZGVsIChlcmljQHdlYmtpdC5vcmcpCiAgKgogICogIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKQEAgLTg3LDcgKzg3LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGdldENsYXNzUHJvcGVydHlO
YW1lcwogCiAgICAgICAgIGZvciAoYXV0byBpdGVyID0gdGFibGUtPmJlZ2luKCk7IGl0ZXIgIT0g
dGFibGUtPmVuZCgpOyArK2l0ZXIpIHsKICAgICAgICAgICAgIGlmICghKGl0ZXItPmF0dHJpYnV0
ZXMoKSAmIFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkgfHwgbW9kZS5pbmNsdWRlRG9udEVu
dW1Qcm9wZXJ0aWVzKCkpCi0gICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZygmdm0sIGl0ZXIua2V5KCkpKTsKKyAgICAgICAgICAgICAgICBwcm9w
ZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBpdGVyLmtleSgpKSk7CiAg
ICAgICAgIH0KICAgICB9CiB9CkBAIC01OTgsMTIgKzU5OCwxNCBAQCBTdHJpbmcgSlNPYmplY3Q6
OmNhbGN1bGF0ZWRDbGFzc05hbWUoSlNPCiAKIGJvb2wgSlNPYmplY3Q6OmdldE93blByb3BlcnR5
U2xvdEJ5SW5kZXgoSlNPYmplY3QqIHRoaXNPYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWdu
ZWQgaSwgUHJvcGVydHlTbG90JiBzbG90KQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisK
ICAgICAvLyBOQi4gVGhlIGZhY3QgdGhhdCB3ZSdyZSBkaXJlY3RseSBjb25zdWx0aW5nIG91ciBp
bmRleGVkIHN0b3JhZ2UgaW1wbGllcyB0aGF0IGl0IGlzIG5vdAogICAgIC8vIGxlZ2FsIGZvciBh
bnlvbmUgdG8gb3ZlcnJpZGUgZ2V0T3duUHJvcGVydHlTbG90KCkgd2l0aG91dCBhbHNvIG92ZXJy
aWRpbmcKICAgICAvLyBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KCkuCiAgICAgCiAgICAgaWYg
KGkgPiBNQVhfQVJSQVlfSU5ERVgpCi0gICAgICAgIHJldHVybiB0aGlzT2JqZWN0LT5tZXRob2RU
YWJsZShleGVjLT52bSgpKS0+Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIElk
ZW50aWZpZXI6OmZyb20oZXhlYywgaSksIHNsb3QpOworICAgICAgICByZXR1cm4gdGhpc09iamVj
dC0+bWV0aG9kVGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywg
SWRlbnRpZmllcjo6ZnJvbSh2bSwgaSksIHNsb3QpOwogICAgIAogICAgIHN3aXRjaCAodGhpc09i
amVjdC0+aW5kZXhpbmdUeXBlKCkpIHsKICAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19UWVBF
UzoKQEAgLTg2Miw3ICs4NjQsNyBAQCBib29sIEpTT2JqZWN0OjpwdXRCeUluZGV4KEpTQ2VsbCog
Y2VsbCwgCiAKICAgICBpZiAocHJvcGVydHlOYW1lID4gTUFYX0FSUkFZX0lOREVYKSB7CiAgICAg
ICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KGNlbGwsIHNob3VsZFRocm93KTsKLSAgICAgICAgcmV0
dXJuIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+cHV0KHRoaXNPYmplY3QsIGV4ZWMsIElk
ZW50aWZpZXI6OmZyb20oZXhlYywgcHJvcGVydHlOYW1lKSwgdmFsdWUsIHNsb3QpOworICAgICAg
ICByZXR1cm4gdGhpc09iamVjdC0+bWV0aG9kVGFibGUodm0pLT5wdXQodGhpc09iamVjdCwgZXhl
YywgSWRlbnRpZmllcjo6ZnJvbSh2bSwgcHJvcGVydHlOYW1lKSwgdmFsdWUsIHNsb3QpOwogICAg
IH0KIAogICAgIHRoaXNPYmplY3QtPmVuc3VyZVdyaXRhYmxlKHZtKTsKQEAgLTIwMjIsNyArMjAy
NCw3IEBAIGJvb2wgSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5QnlJbmRleChKU0MKICAgICBKU09i
amVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU09iamVjdCo+KGNlbGwpOwogICAgIAogICAgIGlm
IChpID4gTUFYX0FSUkFZX0lOREVYKQotICAgICAgICByZXR1cm4gdGhpc09iamVjdC0+bWV0aG9k
VGFibGUodm0pLT5kZWxldGVQcm9wZXJ0eSh0aGlzT2JqZWN0LCBleGVjLCBJZGVudGlmaWVyOjpm
cm9tKGV4ZWMsIGkpKTsKKyAgICAgICAgcmV0dXJuIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKHZt
KS0+ZGVsZXRlUHJvcGVydHkodGhpc09iamVjdCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbSh2bSwg
aSkpOwogICAgIAogICAgIHN3aXRjaCAodGhpc09iamVjdC0+aW5kZXhpbmdNb2RlKCkpIHsKICAg
ICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzoKQEAgLTI0NDYsNyArMjQ0OCw3IEBAIEpT
U3RyaW5nKiBKU09iamVjdDo6dG9TdHJpbmcoRXhlY1N0YXRlKiAKICAgICBWTSYgdm0gPSBleGVj
LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBK
U1ZhbHVlIHByaW1pdGl2ZSA9IHRvUHJpbWl0aXZlKGV4ZWMsIFByZWZlclN0cmluZyk7Ci0gICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwganNFbXB0eVN0cmluZyhleGVjKSk7CisgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwganNFbXB0eVN0cmluZyh2bSkpOwogICAgIFJFTEVBU0Vf
QU5EX1JFVFVSTihzY29wZSwgcHJpbWl0aXZlLnRvU3RyaW5nKGV4ZWMpKTsKIH0KIApAQCAtMjUx
OSw3ICsyNTIxLDcgQEAgdm9pZCBKU09iamVjdDo6cmVpZnlBbGxTdGF0aWNQcm9wZXJ0aWVzKAog
CiAgICAgICAgIGZvciAoYXV0byYgdmFsdWUgOiAqaGFzaFRhYmxlKSB7CiAgICAgICAgICAgICB1
bnNpZ25lZCBhdHRyaWJ1dGVzOwotICAgICAgICAgICAgYXV0byBrZXkgPSBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKCZ2bSwgdmFsdWUubV9rZXkpOworICAgICAgICAgICAgYXV0byBrZXkgPSBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKHZtLCB2YWx1ZS5tX2tleSk7CiAgICAgICAgICAgICBQcm9wZXJ0
eU9mZnNldCBvZmZzZXQgPSBnZXREaXJlY3RPZmZzZXQodm0sIGtleSwgYXR0cmlidXRlcyk7CiAg
ICAgICAgICAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKICAgICAgICAgICAgICAgICBy
ZWlmeVN0YXRpY1Byb3BlcnR5KHZtLCBoYXNoVGFibGUtPmNsYXNzRm9yVGhpcywga2V5LCB2YWx1
ZSwgKnRoaXMpOwpAQCAtMzA2NCw3ICszMDY2LDcgQEAgYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0
SW5kZXhTbG93T3JCZXlvbgogICAgIGlmICghY2FuRG9GYXN0UHV0RGlyZWN0SW5kZXgodm0sIHRo
aXMpKSB7CiAgICAgICAgIFByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlwdG9yOwogICAgICAgICBk
ZXNjcmlwdG9yLnNldERlc2NyaXB0b3IodmFsdWUsIGF0dHJpYnV0ZXMpOwotICAgICAgICByZXR1
cm4gbWV0aG9kVGFibGUodm0pLT5kZWZpbmVPd25Qcm9wZXJ0eSh0aGlzLCBleGVjLCBJZGVudGlm
aWVyOjpmcm9tKGV4ZWMsIGkpLCBkZXNjcmlwdG9yLCBtb2RlID09IFB1dERpcmVjdEluZGV4U2hv
dWxkVGhyb3cpOworICAgICAgICByZXR1cm4gbWV0aG9kVGFibGUodm0pLT5kZWZpbmVPd25Qcm9w
ZXJ0eSh0aGlzLCBleGVjLCBJZGVudGlmaWVyOjpmcm9tKHZtLCBpKSwgZGVzY3JpcHRvciwgbW9k
ZSA9PSBQdXREaXJlY3RJbmRleFNob3VsZFRocm93KTsKICAgICB9CiAKICAgICAvLyBpIHNob3Vs
ZCBiZSBhIHZhbGlkIGFycmF5IGluZGV4IHRoYXQgaXMgb3V0c2lkZSBvZiB0aGUgY3VycmVudCB2
ZWN0b3IuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHJl
dmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTE5OCwxMSArMTk4LDEyIEBAIHB1YmxpYzoKICAgICAvLyBU
aGlzIHBlcmZvcm1zIHRoZSBFQ01BU2NyaXB0IFNldCgpIG9wZXJhdGlvbi4KICAgICBBTFdBWVNf
SU5MSU5FIGJvb2wgcHV0QnlJbmRleElubGluZShFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHBy
b3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKICAgICB7CisgICAg
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgICAgIGlmIChjYW5TZXRJbmRleFF1aWNrbHko
cHJvcGVydHlOYW1lLCB2YWx1ZSkpIHsKLSAgICAgICAgICAgIHNldEluZGV4UXVpY2tseShleGVj
LT52bSgpLCBwcm9wZXJ0eU5hbWUsIHZhbHVlKTsKKyAgICAgICAgICAgIHNldEluZGV4UXVpY2ts
eSh2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICAgICAgfQotICAgICAgICByZXR1cm4gbWV0aG9kVGFibGUoZXhlYy0+dm0oKSktPnB1dEJ5SW5k
ZXgodGhpcywgZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2hvdWxkVGhyb3cpOworICAgICAg
ICByZXR1cm4gbWV0aG9kVGFibGUodm0pLT5wdXRCeUluZGV4KHRoaXMsIGV4ZWMsIHByb3BlcnR5
TmFtZSwgdmFsdWUsIHNob3VsZFRocm93KTsKICAgICB9CiAgICAgICAgIAogICAgIC8vIFRoaXMg
aXMgc2ltaWxhciB0byB0aGUgcHV0RGlyZWN0KiBtZXRob2RzOgpAQCAtMTU0OSw3ICsxNTUwLDcg
QEAgaW5saW5lIHNpemVfdCBvZmZzZXRJbkJ1dHRlcmZseShQcm9wZXJ0eQogCiBpbmxpbmUgc2l6
ZV90IEpTT2JqZWN0OjpidXR0ZXJmbHlQcmVDYXBhY2l0eSgpCiB7Ci0gICAgVk0mIHZtID0gKnRo
aXMtPnZtKCk7CisgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICBpZiAoVU5MSUtFTFkoaGFz
SW5kZXhpbmdIZWFkZXIodm0pKSkKICAgICAgICAgcmV0dXJuIGJ1dHRlcmZseSgpLT5pbmRleGlu
Z0hlYWRlcigpLT5wcmVDYXBhY2l0eShzdHJ1Y3R1cmUodm0pKTsKICAgICByZXR1cm4gMDsKQEAg
LTE1NTcsNyArMTU1OCw3IEBAIGlubGluZSBzaXplX3QgSlNPYmplY3Q6OmJ1dHRlcmZseVByZUNh
cGEKIAogaW5saW5lIHNpemVfdCBKU09iamVjdDo6YnV0dGVyZmx5VG90YWxTaXplKCkKIHsKLSAg
ICBWTSYgdm0gPSAqdGhpcy0+dm0oKTsKKyAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIFN0
cnVjdHVyZSogc3RydWN0dXJlID0gdGhpcy0+c3RydWN0dXJlKHZtKTsKICAgICBCdXR0ZXJmbHkq
IGJ1dHRlcmZseSA9IHRoaXMtPmJ1dHRlcmZseSgpOwogICAgIHNpemVfdCBwcmVDYXBhY2l0eTsK
QEAgLTE2MDYsMTIgKzE2MDcsMTIgQEAgQ09NUElMRV9BU1NFUlQoIShzaXplb2YoSlNPYmplY3Qp
ICUgc2l6ZQogdGVtcGxhdGU8dW5zaWduZWQgY2hhcmFjdGVyc0NvdW50PgogQUxXQVlTX0lOTElO
RSBJZGVudGlmaWVyIG1ha2VJZGVudGlmaWVyKFZNJiB2bSwgY29uc3QgY2hhciAoJmNoYXJhY3Rl
cnMpW2NoYXJhY3RlcnNDb3VudF0pCiB7Ci0gICAgcmV0dXJuIElkZW50aWZpZXI6OmZyb21TdHJp
bmcoJnZtLCBjaGFyYWN0ZXJzKTsKKyAgICByZXR1cm4gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2
bSwgY2hhcmFjdGVycyk7CiB9CiAKIEFMV0FZU19JTkxJTkUgSWRlbnRpZmllciBtYWtlSWRlbnRp
ZmllcihWTSYgdm0sIGNvbnN0IGNoYXIqIG5hbWUpCiB7Ci0gICAgcmV0dXJuIElkZW50aWZpZXI6
OmZyb21TdHJpbmcoJnZtLCBuYW1lKTsKKyAgICByZXR1cm4gSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zyh2bSwgbmFtZSk7CiB9CiAKIEFMV0FZU19JTkxJTkUgSWRlbnRpZmllciBtYWtlSWRlbnRpZmll
cihWTSYsIGNvbnN0IElkZW50aWZpZXImIG5hbWUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1Byb21pc2VQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvbWlzZVByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDI0
OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvbWlzZVByb3RvdHlw
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtNzYsNyArNzYsNyBAQCBKU1Byb21pc2VQcm90b3R5cGU6OkpT
UHJvbWlzZVByb3RvdHlwZShWCiB2b2lkIEpTUHJvbWlzZVByb3RvdHlwZTo6ZmluaXNoQ3JlYXRp
b24oVk0mIHZtLCBTdHJ1Y3R1cmUqKQogewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsK
LSAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+dG9T
dHJpbmdUYWdTeW1ib2wsIGpzU3RyaW5nKCZ2bSwgIlByb21pc2UiKSwgUHJvcGVydHlBdHRyaWJ1
dGU6OkRvbnRFbnVtIHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KTsKKyAgICBwdXREaXJl
Y3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+dG9TdHJpbmdUYWdTeW1i
b2wsIGpzU3RyaW5nKHZtLCAiUHJvbWlzZSIpLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0g
fCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpOwogfQogCiB2b2lkIEpTUHJvbWlzZVByb3Rv
dHlwZTo6YWRkT3duSW50ZXJuYWxTbG90cyhWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0
LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE0LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC02OCw3ICs2OCw3IEBAIHZvaWQgSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yOjpmaW5pc2hDcmUKICAgICBBU1NFUlQobV9lbmRHZW5lcmljUHJvcGVydHlJbmRleCA9
PSB2ZWN0b3Iuc2l6ZSgpKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdmVjdG9yLnNp
emUoKTsgKytpKSB7CiAgICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIgPSB2ZWN0
b3JbaV07Ci0gICAgICAgIG1fcHJvcGVydHlOYW1lcy5nZXQoKVtpXS5zZXQodm0sIHRoaXMsIGpz
U3RyaW5nKCZ2bSwgaWRlbnRpZmllci5zdHJpbmcoKSkpOworICAgICAgICBtX3Byb3BlcnR5TmFt
ZXMuZ2V0KClbaV0uc2V0KHZtLCB0aGlzLCBqc1N0cmluZyh2bSwgaWRlbnRpZmllci5zdHJpbmco
KSkpOwogICAgIH0KIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgJKHJldmlzaW9uIDI0OTEyOCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRv
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNC0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTEwLDcgKzExMCw3IEBAIGlubGluZSBKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3IqIHByb3BlcnQKIAogICAgIHVpbnQzMl90IG51bWJlclN0cnVjdHVyZVBy
b3BlcnRpZXMgPSAwOwogCi0gICAgUHJvcGVydHlOYW1lQXJyYXkgcHJvcGVydHlOYW1lcygmdm0s
IFByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3MsIFByaXZhdGVTeW1ib2xNb2RlOjpFeGNsdWRlKTsK
KyAgICBQcm9wZXJ0eU5hbWVBcnJheSBwcm9wZXJ0eU5hbWVzKHZtLCBQcm9wZXJ0eU5hbWVNb2Rl
OjpTdHJpbmdzLCBQcml2YXRlU3ltYm9sTW9kZTo6RXhjbHVkZSk7CiAKICAgICBpZiAoc3RydWN0
dXJlLT5jYW5BY2Nlc3NQcm9wZXJ0aWVzUXVpY2tseUZvckVudW1lcmF0aW9uKCkgJiYgaW5kZXhl
ZExlbmd0aCA9PSBiYXNlLT5nZXRBcnJheUxlbmd0aCgpKSB7CiAgICAgICAgIGJhc2UtPm1ldGhv
ZFRhYmxlKHZtKS0+Z2V0U3RydWN0dXJlUHJvcGVydHlOYW1lcyhiYXNlLCBleGVjLCBwcm9wZXJ0
eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1J1bkxvb3BUaW1lci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNSdW5Mb29wVGltZXIuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1J1bkxvb3BUaW1lci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTggQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTkg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0zMDcsOCArMzA3LDggQEAgdm9pZCBKU1J1bkxvb3BUaW1lcjo6dGltZXJEaWRG
aXJlKCkKICAgICBkb1dvcmsoKnZtKTsKIH0KIAotSlNSdW5Mb29wVGltZXI6OkpTUnVuTG9vcFRp
bWVyKFZNKiB2bSkKLSAgICA6IG1fYXBpTG9jayh2bS0+YXBpTG9jaygpKQorSlNSdW5Mb29wVGlt
ZXI6OkpTUnVuTG9vcFRpbWVyKFZNJiB2bSkKKyAgICA6IG1fYXBpTG9jayh2bS5hcGlMb2NrKCkp
CiB7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUnVuTG9vcFRp
bWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNSdW5M
b29wVGltZXIuaAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNSdW5Mb29wVGltZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEwMyw3ICsx
MDMsNyBAQCBwdWJsaWM6CiAgICAgICAgIEhhc2hNYXA8UmVmPEpTTG9jaz4sIHN0ZDo6dW5pcXVl
X3B0cjxQZXJWTURhdGE+PiBtX21hcHBpbmc7CiAgICAgfTsKIAotICAgIEpTUnVuTG9vcFRpbWVy
KFZNKik7CisgICAgSlNSdW5Mb29wVGltZXIoVk0mKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSB2
aXJ0dWFsIH5KU1J1bkxvb3BUaW1lcigpOwogICAgIHZpcnR1YWwgdm9pZCBkb1dvcmsoVk0mKSA9
IDA7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5jcHAJ
KHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3Ry
aW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgQ29weXJpZ2h0
IChDKSAxOTk5LTIwMDIgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKICAqICBDb3B5cmln
aHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKLSAqICBDb3B5cmlnaHQgKEMp
IDIwMDQtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0
IChDKSAyMDA0LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKQEAgLTcxLDcgKzcxLDcgQEAgdm9pZCBKU1N0cmluZzo6ZGVzdHJveShKU0Nl
bGwqIGNlbGwpCiAKIHZvaWQgSlNTdHJpbmc6OmR1bXBUb1N0cmVhbShjb25zdCBKU0NlbGwqIGNl
bGwsIFByaW50U3RyZWFtJiBvdXQpCiB7Ci0gICAgVk0mIHZtID0gKmNlbGwtPnZtKCk7CisgICAg
Vk0mIHZtID0gY2VsbC0+dm0oKTsKICAgICBjb25zdCBKU1N0cmluZyogdGhpc09iamVjdCA9IGpz
Q2FzdDxjb25zdCBKU1N0cmluZyo+KGNlbGwpOwogICAgIG91dC5wcmludGYoIjwlcCwgJXMsIFsl
dV0sICIsIHRoaXNPYmplY3QsIHRoaXNPYmplY3QtPmNsYXNzTmFtZSh2bSksIHRoaXNPYmplY3Qt
Pmxlbmd0aCgpKTsKICAgICB1aW50cHRyX3QgcG9pbnRlciA9IHRoaXNPYmplY3QtPm1fZmliZXI7
CkBAIC0yOTQsNyArMjk0LDcgQEAgY29uc3QgU3RyaW5nJiBKU1JvcGVTdHJpbmc6OnJlc29sdmVS
b3BlVwogewogICAgIEFTU0VSVChpc1JvcGUoKSk7CiAgICAgCi0gICAgVk0mIHZtID0gKnRoaXMt
PnZtKCk7CisgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICBpZiAoaXNTdWJzdHJpbmcoKSkg
ewogICAgICAgICBBU1NFUlQoIXN1YnN0cmluZ0Jhc2UoKS0+aXNSb3BlKCkpOwogICAgICAgICBh
dXRvIG5ld0ltcGwgPSBzdWJzdHJpbmdCYXNlKCktPnZhbHVlSW50ZXJuYWwoKS5zdWJzdHJpbmdT
aGFyaW5nSW1wbChzdWJzdHJpbmdPZmZzZXQoKSwgbGVuZ3RoKCkpOwpAQCAtNTAyLDcgKzUwMiw3
IEBAIEpTU3RyaW5nKiBqc1N0cmluZ1dpdGhDYWNoZVNsb3dDYXNlKFZNJiAKICAgICBpZiAoSlNT
dHJpbmcqIHN0cmluZyA9IHZtLnN0cmluZ0NhY2hlLmdldCgmc3RyaW5nSW1wbCkpCiAgICAgICAg
IHJldHVybiBzdHJpbmc7CiAKLSAgICBKU1N0cmluZyogc3RyaW5nID0ganNTdHJpbmcoJnZtLCBT
dHJpbmcoc3RyaW5nSW1wbCkpOworICAgIEpTU3RyaW5nKiBzdHJpbmcgPSBqc1N0cmluZyh2bSwg
U3RyaW5nKHN0cmluZ0ltcGwpKTsKICAgICB2bS5sYXN0Q2FjaGVkU3RyaW5nLnNldCh2bSwgc3Ry
aW5nKTsKICAgICByZXR1cm4gc3RyaW5nOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNTdHJpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1N0cmluZy5oCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1N0cmluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSwyNiArNDEsMjEg
QEAgY2xhc3MgSlNTdHJpbmc7CiBjbGFzcyBKU1JvcGVTdHJpbmc7CiBjbGFzcyBMTEludE9mZnNl
dHNFeHRyYWN0b3I7CiAKLUpTU3RyaW5nKiBqc0VtcHR5U3RyaW5nKFZNKik7Ci1KU1N0cmluZyog
anNFbXB0eVN0cmluZyhFeGVjU3RhdGUqKTsKLUpTU3RyaW5nKiBqc1N0cmluZyhWTSosIGNvbnN0
IFN0cmluZyYpOyAvLyByZXR1cm5zIGVtcHR5IHN0cmluZyBpZiBwYXNzZWQgbnVsbCBzdHJpbmcK
LUpTU3RyaW5nKiBqc1N0cmluZyhFeGVjU3RhdGUqLCBjb25zdCBTdHJpbmcmKTsgLy8gcmV0dXJu
cyBlbXB0eSBzdHJpbmcgaWYgcGFzc2VkIG51bGwgc3RyaW5nCi0KLUpTU3RyaW5nKiBqc1Npbmds
ZUNoYXJhY3RlclN0cmluZyhWTSosIFVDaGFyKTsKLUpTU3RyaW5nKiBqc1NpbmdsZUNoYXJhY3Rl
clN0cmluZyhFeGVjU3RhdGUqLCBVQ2hhcik7Ci1KU1N0cmluZyoganNTdWJzdHJpbmcoVk0qLCBj
b25zdCBTdHJpbmcmLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CitKU1N0cmlu
ZyoganNFbXB0eVN0cmluZyhWTSYpOworSlNTdHJpbmcqIGpzU3RyaW5nKFZNJiwgY29uc3QgU3Ry
aW5nJik7IC8vIHJldHVybnMgZW1wdHkgc3RyaW5nIGlmIHBhc3NlZCBudWxsIHN0cmluZworCitK
U1N0cmluZyoganNTaW5nbGVDaGFyYWN0ZXJTdHJpbmcoVk0mLCBVQ2hhcik7CitKU1N0cmluZyog
anNTdWJzdHJpbmcoVk0mLCBjb25zdCBTdHJpbmcmLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVk
IGxlbmd0aCk7CiAKIC8vIE5vbi10cml2aWFsIHN0cmluZ3MgYXJlIHR3byBvciBtb3JlIGNoYXJh
Y3RlcnMgbG9uZy4KIC8vIFRoZXNlIGZ1bmN0aW9ucyBhcmUgZmFzdGVyIHRoYW4ganVzdCBjYWxs
aW5nIGpzU3RyaW5nLgotSlNTdHJpbmcqIGpzTm9udHJpdmlhbFN0cmluZyhWTSosIGNvbnN0IFN0
cmluZyYpOwotSlNTdHJpbmcqIGpzTm9udHJpdmlhbFN0cmluZyhFeGVjU3RhdGUqLCBjb25zdCBT
dHJpbmcmKTsKLUpTU3RyaW5nKiBqc05vbnRyaXZpYWxTdHJpbmcoRXhlY1N0YXRlKiwgU3RyaW5n
JiYpOworSlNTdHJpbmcqIGpzTm9udHJpdmlhbFN0cmluZyhWTSYsIGNvbnN0IFN0cmluZyYpOwor
SlNTdHJpbmcqIGpzTm9udHJpdmlhbFN0cmluZyhWTSYsIFN0cmluZyYmKTsKIAogLy8gU2hvdWxk
IGJlIHVzZWQgZm9yIHN0cmluZ3MgdGhhdCBhcmUgb3duZWQgYnkgYW4gb2JqZWN0IHRoYXQgd2ls
bAogLy8gbGlrZWx5IG91dGxpdmUgdGhlIEpTVmFsdWUgdGhpcyBtYWtlcywgc3VjaCBhcyB0aGUg
cGFyc2UgdHJlZSBvciBhCiAvLyBET00gb2JqZWN0IHRoYXQgY29udGFpbnMgYSBTdHJpbmcKLUpT
U3RyaW5nKiBqc093bmVkU3RyaW5nKFZNKiwgY29uc3QgU3RyaW5nJik7Ci1KU1N0cmluZyoganNP
d25lZFN0cmluZyhFeGVjU3RhdGUqLCBjb25zdCBTdHJpbmcmKTsKK0pTU3RyaW5nKiBqc093bmVk
U3RyaW5nKFZNJiwgY29uc3QgU3RyaW5nJik7CiAKIGJvb2wgaXNKU1N0cmluZyhKU0NlbGwqKTsK
IGJvb2wgaXNKU1N0cmluZyhKU1ZhbHVlKTsKQEAgLTIzOCwyMCArMjMzLDIwIEBAIHByaXZhdGU6
CiAKICAgICBTdHJpbmdWaWV3IHVuc2FmZVZpZXcoRXhlY1N0YXRlKikgY29uc3Q7CiAKLSAgICBm
cmllbmQgSlNTdHJpbmcqIGpzU3RyaW5nKFZNKiwgY29uc3QgU3RyaW5nJik7CisgICAgZnJpZW5k
IEpTU3RyaW5nKiBqc1N0cmluZyhWTSYsIGNvbnN0IFN0cmluZyYpOwogICAgIGZyaWVuZCBKU1N0
cmluZyoganNTdHJpbmcoRXhlY1N0YXRlKiwgSlNTdHJpbmcqLCBKU1N0cmluZyopOwogICAgIGZy
aWVuZCBKU1N0cmluZyoganNTdHJpbmcoRXhlY1N0YXRlKiwgY29uc3QgU3RyaW5nJiwgSlNTdHJp
bmcqKTsKICAgICBmcmllbmQgSlNTdHJpbmcqIGpzU3RyaW5nKEV4ZWNTdGF0ZSosIEpTU3RyaW5n
KiwgY29uc3QgU3RyaW5nJik7CiAgICAgZnJpZW5kIEpTU3RyaW5nKiBqc1N0cmluZyhFeGVjU3Rh
dGUqLCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKTsKICAgICBmcmllbmQgSlNTdHJpbmcq
IGpzU3RyaW5nKEV4ZWNTdGF0ZSosIEpTU3RyaW5nKiwgSlNTdHJpbmcqLCBKU1N0cmluZyopOwog
ICAgIGZyaWVuZCBKU1N0cmluZyoganNTdHJpbmcoRXhlY1N0YXRlKiwgY29uc3QgU3RyaW5nJiwg
Y29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJik7Ci0gICAgZnJpZW5kIEpTU3RyaW5nKiBqc1Np
bmdsZUNoYXJhY3RlclN0cmluZyhWTSosIFVDaGFyKTsKLSAgICBmcmllbmQgSlNTdHJpbmcqIGpz
Tm9udHJpdmlhbFN0cmluZyhWTSosIGNvbnN0IFN0cmluZyYpOwotICAgIGZyaWVuZCBKU1N0cmlu
ZyoganNOb250cml2aWFsU3RyaW5nKFZNKiwgU3RyaW5nJiYpOwotICAgIGZyaWVuZCBKU1N0cmlu
ZyoganNTdWJzdHJpbmcoVk0qLCBjb25zdCBTdHJpbmcmLCB1bnNpZ25lZCwgdW5zaWduZWQpOwor
ICAgIGZyaWVuZCBKU1N0cmluZyoganNTaW5nbGVDaGFyYWN0ZXJTdHJpbmcoVk0mLCBVQ2hhcik7
CisgICAgZnJpZW5kIEpTU3RyaW5nKiBqc05vbnRyaXZpYWxTdHJpbmcoVk0mLCBjb25zdCBTdHJp
bmcmKTsKKyAgICBmcmllbmQgSlNTdHJpbmcqIGpzTm9udHJpdmlhbFN0cmluZyhWTSYsIFN0cmlu
ZyYmKTsKKyAgICBmcmllbmQgSlNTdHJpbmcqIGpzU3Vic3RyaW5nKFZNJiwgY29uc3QgU3RyaW5n
JiwgdW5zaWduZWQsIHVuc2lnbmVkKTsKICAgICBmcmllbmQgSlNTdHJpbmcqIGpzU3Vic3RyaW5n
KFZNJiwgRXhlY1N0YXRlKiwgSlNTdHJpbmcqLCB1bnNpZ25lZCwgdW5zaWduZWQpOwogICAgIGZy
aWVuZCBKU1N0cmluZyoganNTdWJzdHJpbmdPZlJlc29sdmVkKFZNJiwgR0NEZWZlcnJhbENvbnRl
eHQqLCBKU1N0cmluZyosIHVuc2lnbmVkLCB1bnNpZ25lZCk7Ci0gICAgZnJpZW5kIEpTU3RyaW5n
KiBqc093bmVkU3RyaW5nKFZNKiwgY29uc3QgU3RyaW5nJik7CisgICAgZnJpZW5kIEpTU3RyaW5n
KiBqc093bmVkU3RyaW5nKFZNJiwgY29uc3QgU3RyaW5nJik7CiB9OwogCiAvLyBOT1RFOiBUaGlz
IGNsYXNzIGNhbm5vdCBvdmVycmlkZSBKU1N0cmluZydzIGRlc3RydWN0b3IuIEpTU3RyaW5nJ3Mg
ZGVzdHJ1Y3RvciBpcyBjYWxsZWQgZGlyZWN0bHkKQEAgLTQwMiw3ICszOTcsNyBAQCBwdWJsaWM6
CiAgICAgICAgICAgICBzd2l0Y2ggKG1fc3RyaW5ncy5zaXplKCkpIHsKICAgICAgICAgICAgIGNh
c2UgMDogewogICAgICAgICAgICAgICAgIEFTU0VSVCghbV9sZW5ndGgpOwotICAgICAgICAgICAg
ICAgIHJlc3VsdCA9IGpzRW1wdHlTdHJpbmcoJm1fdm0pOworICAgICAgICAgICAgICAgIHJlc3Vs
dCA9IGpzRW1wdHlTdHJpbmcobV92bSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICBjYXNlIDE6IHsKQEAgLTcxOSw0MSArNzE0LDQyIEBAIGlubGlu
ZSBKU1N0cmluZyogYXNTdHJpbmcoSlNWYWx1ZSB2YWx1ZSkKIH0KIAogLy8gVGhpcyBNVVNUIE5P
VCBHQy4KLWlubGluZSBKU1N0cmluZyoganNFbXB0eVN0cmluZyhWTSogdm0pCitpbmxpbmUgSlNT
dHJpbmcqIGpzRW1wdHlTdHJpbmcoVk0mIHZtKQogewotICAgIHJldHVybiB2bS0+c21hbGxTdHJp
bmdzLmVtcHR5U3RyaW5nKCk7CisgICAgcmV0dXJuIHZtLnNtYWxsU3RyaW5ncy5lbXB0eVN0cmlu
ZygpOwogfQogCi1BTFdBWVNfSU5MSU5FIEpTU3RyaW5nKiBqc1NpbmdsZUNoYXJhY3RlclN0cmlu
ZyhWTSogdm0sIFVDaGFyIGMpCitBTFdBWVNfSU5MSU5FIEpTU3RyaW5nKiBqc1NpbmdsZUNoYXJh
Y3RlclN0cmluZyhWTSYgdm0sIFVDaGFyIGMpCiB7CiAgICAgaWYgKHZhbGlkYXRlREZHRG9lc0dD
KQotICAgICAgICBSRUxFQVNFX0FTU0VSVCh2bS0+aGVhcC5leHBlY3REb2VzR0MoKSk7CisgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKHZtLmhlYXAuZXhwZWN0RG9lc0dDKCkpOwogICAgIGlmIChjIDw9
IG1heFNpbmdsZUNoYXJhY3RlclN0cmluZykKLSAgICAgICAgcmV0dXJuIHZtLT5zbWFsbFN0cmlu
Z3Muc2luZ2xlQ2hhcmFjdGVyU3RyaW5nKGMpOwotICAgIHJldHVybiBKU1N0cmluZzo6Y3JlYXRl
KCp2bSwgU3RyaW5nSW1wbDo6Y3JlYXRlKCZjLCAxKSk7CisgICAgICAgIHJldHVybiB2bS5zbWFs
bFN0cmluZ3Muc2luZ2xlQ2hhcmFjdGVyU3RyaW5nKGMpOworICAgIHJldHVybiBKU1N0cmluZzo6
Y3JlYXRlKHZtLCBTdHJpbmdJbXBsOjpjcmVhdGUoJmMsIDEpKTsKIH0KIAotaW5saW5lIEpTU3Ry
aW5nKiBqc05vbnRyaXZpYWxTdHJpbmcoVk0qIHZtLCBjb25zdCBTdHJpbmcmIHMpCitpbmxpbmUg
SlNTdHJpbmcqIGpzTm9udHJpdmlhbFN0cmluZyhWTSYgdm0sIGNvbnN0IFN0cmluZyYgcykKIHsK
ICAgICBBU1NFUlQocy5sZW5ndGgoKSA+IDEpOwotICAgIHJldHVybiBKU1N0cmluZzo6Y3JlYXRl
KCp2bSwgKnMuaW1wbCgpKTsKKyAgICByZXR1cm4gSlNTdHJpbmc6OmNyZWF0ZSh2bSwgKnMuaW1w
bCgpKTsKIH0KIAotaW5saW5lIEpTU3RyaW5nKiBqc05vbnRyaXZpYWxTdHJpbmcoVk0qIHZtLCBT
dHJpbmcmJiBzKQoraW5saW5lIEpTU3RyaW5nKiBqc05vbnRyaXZpYWxTdHJpbmcoVk0mIHZtLCBT
dHJpbmcmJiBzKQogewogICAgIEFTU0VSVChzLmxlbmd0aCgpID4gMSk7Ci0gICAgcmV0dXJuIEpT
U3RyaW5nOjpjcmVhdGUoKnZtLCBzLnJlbGVhc2VJbXBsKCkucmVsZWFzZU5vbk51bGwoKSk7Cisg
ICAgcmV0dXJuIEpTU3RyaW5nOjpjcmVhdGUodm0sIHMucmVsZWFzZUltcGwoKS5yZWxlYXNlTm9u
TnVsbCgpKTsKIH0KIAogQUxXQVlTX0lOTElORSBJZGVudGlmaWVyIEpTU3RyaW5nOjp0b0lkZW50
aWZpZXIoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogewotICAgIHJldHVybiBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKGV4ZWMsIHRvQXRvbVN0cmluZyhleGVjKSk7CisgICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKKyAgICByZXR1cm4gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgdG9BdG9tU3RyaW5n
KGV4ZWMpKTsKIH0KIAogQUxXQVlTX0lOTElORSBBdG9tU3RyaW5nIEpTU3RyaW5nOjp0b0F0b21T
dHJpbmcoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogewogICAgIGlmICh2YWxpZGF0ZURGR0RvZXNH
QykKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQodm0oKS0+aGVhcC5leHBlY3REb2VzR0MoKSk7Cisg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKHZtKCkuaGVhcC5leHBlY3REb2VzR0MoKSk7CiAgICAgaWYg
KGlzUm9wZSgpKQogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgSlNSb3BlU3RyaW5n
Kj4odGhpcyktPnJlc29sdmVSb3BlVG9BdG9tU3RyaW5nKGV4ZWMpOwogICAgIHJldHVybiBBdG9t
U3RyaW5nKHZhbHVlSW50ZXJuYWwoKSk7CkBAIC03NjIsNyArNzU4LDcgQEAgQUxXQVlTX0lOTElO
RSBBdG9tU3RyaW5nIEpTU3RyaW5nOjp0b0F0bwogQUxXQVlTX0lOTElORSBSZWZQdHI8QXRvbVN0
cmluZ0ltcGw+IEpTU3RyaW5nOjp0b0V4aXN0aW5nQXRvbVN0cmluZyhFeGVjU3RhdGUqIGV4ZWMp
IGNvbnN0CiB7CiAgICAgaWYgKHZhbGlkYXRlREZHRG9lc0dDKQotICAgICAgICBSRUxFQVNFX0FT
U0VSVCh2bSgpLT5oZWFwLmV4cGVjdERvZXNHQygpKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQo
dm0oKS5oZWFwLmV4cGVjdERvZXNHQygpKTsKICAgICBpZiAoaXNSb3BlKCkpCiAgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxjb25zdCBKU1JvcGVTdHJpbmcqPih0aGlzKS0+cmVzb2x2ZVJvcGVU
b0V4aXN0aW5nQXRvbVN0cmluZyhleGVjKTsKICAgICBpZiAodmFsdWVJbnRlcm5hbCgpLmltcGwo
KS0+aXNBdG9tKCkpCkBAIC03NzMsNyArNzY5LDcgQEAgQUxXQVlTX0lOTElORSBSZWZQdHI8QXRv
bVN0cmluZ0ltcGw+IEpTUwogaW5saW5lIGNvbnN0IFN0cmluZyYgSlNTdHJpbmc6OnZhbHVlKEV4
ZWNTdGF0ZSogZXhlYykgY29uc3QKIHsKICAgICBpZiAodmFsaWRhdGVERkdEb2VzR0MpCi0gICAg
ICAgIFJFTEVBU0VfQVNTRVJUKHZtKCktPmhlYXAuZXhwZWN0RG9lc0dDKCkpOworICAgICAgICBS
RUxFQVNFX0FTU0VSVCh2bSgpLmhlYXAuZXhwZWN0RG9lc0dDKCkpOwogICAgIGlmIChpc1JvcGUo
KSkKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IEpTUm9wZVN0cmluZyo+KHRoaXMp
LT5yZXNvbHZlUm9wZShleGVjKTsKICAgICByZXR1cm4gdmFsdWVJbnRlcm5hbCgpOwpAQCAtNzgz
LDcgKzc3OSw3IEBAIGlubGluZSBjb25zdCBTdHJpbmcmIEpTU3RyaW5nOjp0cnlHZXRWYWwKIHsK
ICAgICBpZiAoYWxsb2NhdGlvbkFsbG93ZWQpIHsKICAgICAgICAgaWYgKHZhbGlkYXRlREZHRG9l
c0dDKQotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQodm0oKS0+aGVhcC5leHBlY3REb2VzR0Mo
KSk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCh2bSgpLmhlYXAuZXhwZWN0RG9lc0dDKCkp
OwogICAgICAgICBpZiAoaXNSb3BlKCkpIHsKICAgICAgICAgICAgIC8vIFBhc3MgbnVsbHB0ciBm
b3IgdGhlIEV4ZWNTdGF0ZSBzbyB0aGF0IHJlc29sdmVSb3BlIGRvZXMgbm90IHRocm93IGluIHRo
ZSBldmVudCBvZiBhbiBPT00gZXJyb3IuCiAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
Y29uc3QgSlNSb3BlU3RyaW5nKj4odGhpcyktPnJlc29sdmVSb3BlKG51bGxwdHIpOwpAQCAtODAw
LDIwICs3OTYsMjAgQEAgaW5saW5lIEpTU3RyaW5nKiBKU1N0cmluZzo6Z2V0SW5kZXgoRXhlYwog
ICAgIEFTU0VSVChjYW5HZXRJbmRleChpKSk7CiAgICAgU3RyaW5nVmlldyB2aWV3ID0gdW5zYWZl
VmlldyhleGVjKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKLSAg
ICByZXR1cm4ganNTaW5nbGVDaGFyYWN0ZXJTdHJpbmcoZXhlYywgdmlld1tpXSk7CisgICAgcmV0
dXJuIGpzU2luZ2xlQ2hhcmFjdGVyU3RyaW5nKHZtLCB2aWV3W2ldKTsKIH0KIAotaW5saW5lIEpT
U3RyaW5nKiBqc1N0cmluZyhWTSogdm0sIGNvbnN0IFN0cmluZyYgcykKK2lubGluZSBKU1N0cmlu
ZyoganNTdHJpbmcoVk0mIHZtLCBjb25zdCBTdHJpbmcmIHMpCiB7CiAgICAgaW50IHNpemUgPSBz
Lmxlbmd0aCgpOwogICAgIGlmICghc2l6ZSkKLSAgICAgICAgcmV0dXJuIHZtLT5zbWFsbFN0cmlu
Z3MuZW1wdHlTdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIHZtLnNtYWxsU3RyaW5ncy5lbXB0eVN0
cmluZygpOwogICAgIGlmIChzaXplID09IDEpIHsKICAgICAgICAgVUNoYXIgYyA9IHMuY2hhcmFj
dGVyQXQoMCk7CiAgICAgICAgIGlmIChjIDw9IG1heFNpbmdsZUNoYXJhY3RlclN0cmluZykKLSAg
ICAgICAgICAgIHJldHVybiB2bS0+c21hbGxTdHJpbmdzLnNpbmdsZUNoYXJhY3RlclN0cmluZyhj
KTsKKyAgICAgICAgICAgIHJldHVybiB2bS5zbWFsbFN0cmluZ3Muc2luZ2xlQ2hhcmFjdGVyU3Ry
aW5nKGMpOwogICAgIH0KLSAgICByZXR1cm4gSlNTdHJpbmc6OmNyZWF0ZSgqdm0sICpzLmltcGwo
KSk7CisgICAgcmV0dXJuIEpTU3RyaW5nOjpjcmVhdGUodm0sICpzLmltcGwoKSk7CiB9CiAKIGlu
bGluZSBKU1N0cmluZyoganNTdWJzdHJpbmcoVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIEpTU3Ry
aW5nKiBiYXNlLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKQEAgLTg3Miw1MCAr
ODY4LDQzIEBAIGlubGluZSBKU1N0cmluZyoganNTdWJzdHJpbmcoRXhlY1N0YXRlKiAKICAgICBy
ZXR1cm4ganNTdWJzdHJpbmcoZXhlYy0+dm0oKSwgZXhlYywgcywgb2Zmc2V0LCBsZW5ndGgpOwog
fQogCi1pbmxpbmUgSlNTdHJpbmcqIGpzU3Vic3RyaW5nKFZNKiB2bSwgY29uc3QgU3RyaW5nJiBz
LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKK2lubGluZSBKU1N0cmluZyoganNT
dWJzdHJpbmcoVk0mIHZtLCBjb25zdCBTdHJpbmcmIHMsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWdu
ZWQgbGVuZ3RoKQogewogICAgIEFTU0VSVChvZmZzZXQgPD0gcy5sZW5ndGgoKSk7CiAgICAgQVNT
RVJUKGxlbmd0aCA8PSBzLmxlbmd0aCgpKTsKICAgICBBU1NFUlQob2Zmc2V0ICsgbGVuZ3RoIDw9
IHMubGVuZ3RoKCkpOwogICAgIGlmICghbGVuZ3RoKQotICAgICAgICByZXR1cm4gdm0tPnNtYWxs
U3RyaW5ncy5lbXB0eVN0cmluZygpOworICAgICAgICByZXR1cm4gdm0uc21hbGxTdHJpbmdzLmVt
cHR5U3RyaW5nKCk7CiAgICAgaWYgKGxlbmd0aCA9PSAxKSB7CiAgICAgICAgIFVDaGFyIGMgPSBz
LmNoYXJhY3RlckF0KG9mZnNldCk7CiAgICAgICAgIGlmIChjIDw9IG1heFNpbmdsZUNoYXJhY3Rl
clN0cmluZykKLSAgICAgICAgICAgIHJldHVybiB2bS0+c21hbGxTdHJpbmdzLnNpbmdsZUNoYXJh
Y3RlclN0cmluZyhjKTsKKyAgICAgICAgICAgIHJldHVybiB2bS5zbWFsbFN0cmluZ3Muc2luZ2xl
Q2hhcmFjdGVyU3RyaW5nKGMpOwogICAgIH0KICAgICBhdXRvIGltcGwgPSBTdHJpbmdJbXBsOjpj
cmVhdGVTdWJzdHJpbmdTaGFyaW5nSW1wbCgqcy5pbXBsKCksIG9mZnNldCwgbGVuZ3RoKTsKICAg
ICBpZiAoaW1wbC0+aXNTdWJTdHJpbmcoKSkKLSAgICAgICAgcmV0dXJuIEpTU3RyaW5nOjpjcmVh
dGVIYXNPdGhlck93bmVyKCp2bSwgV1RGTW92ZShpbXBsKSk7Ci0gICAgcmV0dXJuIEpTU3RyaW5n
OjpjcmVhdGUoKnZtLCBXVEZNb3ZlKGltcGwpKTsKKyAgICAgICAgcmV0dXJuIEpTU3RyaW5nOjpj
cmVhdGVIYXNPdGhlck93bmVyKHZtLCBXVEZNb3ZlKGltcGwpKTsKKyAgICByZXR1cm4gSlNTdHJp
bmc6OmNyZWF0ZSh2bSwgV1RGTW92ZShpbXBsKSk7CiB9CiAKLWlubGluZSBKU1N0cmluZyoganNP
d25lZFN0cmluZyhWTSogdm0sIGNvbnN0IFN0cmluZyYgcykKK2lubGluZSBKU1N0cmluZyoganNP
d25lZFN0cmluZyhWTSYgdm0sIGNvbnN0IFN0cmluZyYgcykKIHsKICAgICBpbnQgc2l6ZSA9IHMu
bGVuZ3RoKCk7CiAgICAgaWYgKCFzaXplKQotICAgICAgICByZXR1cm4gdm0tPnNtYWxsU3RyaW5n
cy5lbXB0eVN0cmluZygpOworICAgICAgICByZXR1cm4gdm0uc21hbGxTdHJpbmdzLmVtcHR5U3Ry
aW5nKCk7CiAgICAgaWYgKHNpemUgPT0gMSkgewogICAgICAgICBVQ2hhciBjID0gcy5jaGFyYWN0
ZXJBdCgwKTsKICAgICAgICAgaWYgKGMgPD0gbWF4U2luZ2xlQ2hhcmFjdGVyU3RyaW5nKQotICAg
ICAgICAgICAgcmV0dXJuIHZtLT5zbWFsbFN0cmluZ3Muc2luZ2xlQ2hhcmFjdGVyU3RyaW5nKGMp
OworICAgICAgICAgICAgcmV0dXJuIHZtLnNtYWxsU3RyaW5ncy5zaW5nbGVDaGFyYWN0ZXJTdHJp
bmcoYyk7CiAgICAgfQotICAgIHJldHVybiBKU1N0cmluZzo6Y3JlYXRlSGFzT3RoZXJPd25lcigq
dm0sICpzLmltcGwoKSk7CisgICAgcmV0dXJuIEpTU3RyaW5nOjpjcmVhdGVIYXNPdGhlck93bmVy
KHZtLCAqcy5pbXBsKCkpOwogfQogCi1pbmxpbmUgSlNTdHJpbmcqIGpzRW1wdHlTdHJpbmcoRXhl
Y1N0YXRlKiBleGVjKSB7IHJldHVybiBqc0VtcHR5U3RyaW5nKCZleGVjLT52bSgpKTsgfQotaW5s
aW5lIEpTU3RyaW5nKiBqc1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFN0cmluZyYgcykg
eyByZXR1cm4ganNTdHJpbmcoJmV4ZWMtPnZtKCksIHMpOyB9Ci1pbmxpbmUgSlNTdHJpbmcqIGpz
U2luZ2xlQ2hhcmFjdGVyU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgVUNoYXIgYykgeyByZXR1cm4g
anNTaW5nbGVDaGFyYWN0ZXJTdHJpbmcoJmV4ZWMtPnZtKCksIGMpOyB9Ci1pbmxpbmUgSlNTdHJp
bmcqIGpzTm9udHJpdmlhbFN0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFN0cmluZyYgcykg
eyByZXR1cm4ganNOb250cml2aWFsU3RyaW5nKCZleGVjLT52bSgpLCBzKTsgfQotaW5saW5lIEpT
U3RyaW5nKiBqc05vbnRyaXZpYWxTdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBTdHJpbmcmJiBzKSB7
IHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcoJmV4ZWMtPnZtKCksIFdURk1vdmUocykpOyB9Ci1p
bmxpbmUgSlNTdHJpbmcqIGpzT3duZWRTdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJp
bmcmIHMpIHsgcmV0dXJuIGpzT3duZWRTdHJpbmcoJmV4ZWMtPnZtKCksIHMpOyB9Ci0KIEFMV0FZ
U19JTkxJTkUgSlNTdHJpbmcqIGpzU3RyaW5nV2l0aENhY2hlKEV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgU3RyaW5nJiBzKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgU3RyaW5nSW1w
bCogc3RyaW5nSW1wbCA9IHMuaW1wbCgpOwogICAgIGlmICghc3RyaW5nSW1wbCB8fCAhc3RyaW5n
SW1wbC0+bGVuZ3RoKCkpCi0gICAgICAgIHJldHVybiBqc0VtcHR5U3RyaW5nKCZ2bSk7CisgICAg
ICAgIHJldHVybiBqc0VtcHR5U3RyaW5nKHZtKTsKIAogICAgIGlmIChzdHJpbmdJbXBsLT5sZW5n
dGgoKSA9PSAxKSB7CiAgICAgICAgIFVDaGFyIHNpbmdsZUNoYXJhY3RlciA9ICgqc3RyaW5nSW1w
bClbMHVdOwpAQCAtOTgwLDcgKzk2OSw3IEBAIGlubGluZSBib29sIGlzSlNTdHJpbmcoSlNWYWx1
ZSB2KQogQUxXQVlTX0lOTElORSBTdHJpbmdWaWV3IEpTUm9wZVN0cmluZzo6dW5zYWZlVmlldyhF
eGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiB7CiAgICAgaWYgKHZhbGlkYXRlREZHRG9lc0dDKQotICAg
ICAgICBSRUxFQVNFX0FTU0VSVCh2bSgpLT5oZWFwLmV4cGVjdERvZXNHQygpKTsKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlQodm0oKS5oZWFwLmV4cGVjdERvZXNHQygpKTsKICAgICBpZiAoaXNTdWJz
dHJpbmcoKSkgewogICAgICAgICBhdXRvJiBiYXNlID0gc3Vic3RyaW5nQmFzZSgpLT52YWx1ZUlu
dGVybmFsKCk7CiAgICAgICAgIGlmIChiYXNlLmlzOEJpdCgpKQpAQCAtOTkzLDcgKzk4Miw3IEBA
IEFMV0FZU19JTkxJTkUgU3RyaW5nVmlldyBKU1JvcGVTdHJpbmc6OnUKIEFMV0FZU19JTkxJTkUg
U3RyaW5nVmlld1dpdGhVbmRlcmx5aW5nU3RyaW5nIEpTUm9wZVN0cmluZzo6dmlld1dpdGhVbmRl
cmx5aW5nU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKIHsKICAgICBpZiAodmFsaWRhdGVE
RkdEb2VzR0MpCi0gICAgICAgIFJFTEVBU0VfQVNTRVJUKHZtKCktPmhlYXAuZXhwZWN0RG9lc0dD
KCkpOworICAgICAgICBSRUxFQVNFX0FTU0VSVCh2bSgpLmhlYXAuZXhwZWN0RG9lc0dDKCkpOwog
ICAgIGlmIChpc1N1YnN0cmluZygpKSB7CiAgICAgICAgIGF1dG8mIGJhc2UgPSBzdWJzdHJpbmdC
YXNlKCktPnZhbHVlSW50ZXJuYWwoKTsKICAgICAgICAgaWYgKGJhc2UuaXM4Qml0KCkpCkBAIC0x
MDA3LDcgKzk5Niw3IEBAIEFMV0FZU19JTkxJTkUgU3RyaW5nVmlld1dpdGhVbmRlcmx5aW5nU3QK
IEFMV0FZU19JTkxJTkUgU3RyaW5nVmlldyBKU1N0cmluZzo6dW5zYWZlVmlldyhFeGVjU3RhdGUq
IGV4ZWMpIGNvbnN0CiB7CiAgICAgaWYgKHZhbGlkYXRlREZHRG9lc0dDKQotICAgICAgICBSRUxF
QVNFX0FTU0VSVCh2bSgpLT5oZWFwLmV4cGVjdERvZXNHQygpKTsKKyAgICAgICAgUkVMRUFTRV9B
U1NFUlQodm0oKS5oZWFwLmV4cGVjdERvZXNHQygpKTsKICAgICBpZiAoaXNSb3BlKCkpCiAgICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBKU1JvcGVTdHJpbmcqPih0aGlzKS0+dW5zYWZl
VmlldyhleGVjKTsKICAgICByZXR1cm4gdmFsdWVJbnRlcm5hbCgpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdJbmxpbmVzLmgJKHJldmlzaW9uIDI0
OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSW5saW5lcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
Ni0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtNDQsOSArNDQsOSBAQCBib29sIEpTU3RyaW5nOjplcXVhbChF
eGVjU3RhdGUqIGV4ZWMsIEpTCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFN0cmluZ1R5cGU+Ci1p
bmxpbmUgSlNWYWx1ZSBqc01ha2VOb250cml2aWFsU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgU3Ry
aW5nVHlwZSYmIHN0cmluZykKK2lubGluZSBKU1ZhbHVlIGpzTWFrZU5vbnRyaXZpYWxTdHJpbmco
Vk0mIHZtLCBTdHJpbmdUeXBlJiYgc3RyaW5nKQogewotICAgIHJldHVybiBqc05vbnRyaXZpYWxT
dHJpbmcoZXhlYywgc3RkOjpmb3J3YXJkPFN0cmluZ1R5cGU+KHN0cmluZykpOworICAgIHJldHVy
biBqc05vbnRyaXZpYWxTdHJpbmcodm0sIHN0ZDo6Zm9yd2FyZDxTdHJpbmdUeXBlPihzdHJpbmcp
KTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgU3RyaW5nVHlwZSwgdHlwZW5hbWUuLi4gU3RyaW5n
VHlwZXM+CkBAIC01OCw3ICs1OCw3IEBAIGlubGluZSBKU1ZhbHVlIGpzTWFrZU5vbnRyaXZpYWxT
dHJpbmcoRXgKICAgICBpZiAoVU5MSUtFTFkoIXJlc3VsdCkpCiAgICAgICAgIHJldHVybiB0aHJv
d091dE9mTWVtb3J5RXJyb3IoZXhlYywgc2NvcGUpOwogICAgIEFTU0VSVChyZXN1bHQubGVuZ3Ro
KCkgPD0gSlNTdHJpbmc6Ok1heExlbmd0aCk7Ci0gICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmlu
ZyhleGVjLCBXVEZNb3ZlKHJlc3VsdCkpOworICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmco
dm0sIFdURk1vdmUocmVzdWx0KSk7CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJU
eXBlPgpAQCAtNzYsNyArNzYsNyBAQCBpbmxpbmUgSlNTdHJpbmcqIHJlcGVhdENoYXJhY3RlcihF
eGVjU3RhCiAKICAgICBzdGQ6OmZpbGxfbihidWZmZXIsIHJlcGVhdENvdW50LCBjaGFyYWN0ZXIp
OwogCi0gICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBqc1N0cmluZygmZXhlYywgV1RGTW92
ZShpbXBsKSkpOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwganNTdHJpbmcodm0sIFdU
Rk1vdmUoaW1wbCkpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZ0pvaW5lci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdKb2luZXIuY3BwCShyZXZpc2lvbiAy
NDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZ0pvaW5lci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDEyLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEyLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0xMTEsNyArMTExLDcgQEAgSlNWYWx1ZSBKU1N0cmluZ0pv
aW5lcjo6am9pbihFeGVjU3RhdGUmIAogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpT
VmFsdWUoKSk7CiAKICAgICBpZiAoIWxlbmd0aCkKLSAgICAgICAgcmV0dXJuIGpzRW1wdHlTdHJp
bmcoJnN0YXRlKTsKKyAgICAgICAgcmV0dXJuIGpzRW1wdHlTdHJpbmcodm0pOwogCiAgICAgU3Ry
aW5nIHJlc3VsdDsKICAgICBpZiAobV9pc0FsbDhCaXQpCkBAIC0xMjIsNyArMTIyLDcgQEAgSlNW
YWx1ZSBKU1N0cmluZ0pvaW5lcjo6am9pbihFeGVjU3RhdGUmIAogICAgIGlmIChyZXN1bHQuaXNO
dWxsKCkpCiAgICAgICAgIHJldHVybiB0aHJvd091dE9mTWVtb3J5RXJyb3IoJnN0YXRlLCBzY29w
ZSk7CiAKLSAgICByZXR1cm4ganNTdHJpbmcoJnN0YXRlLCBXVEZNb3ZlKHJlc3VsdCkpOworICAg
IHJldHVybiBqc1N0cmluZyh2bSwgV1RGTW92ZShyZXN1bHQpKTsKIH0KIAogfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVj
dC5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTU3ltYm9sVGFibGVPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU1LDYgKzU1LDcg
QEAgYm9vbCBKU1N5bWJvbFRhYmxlT2JqZWN0OjpkZWxldGVQcm9wZXJ0eQogCiB2b2lkIEpTU3lt
Ym9sVGFibGVPYmplY3Q6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2Jq
ZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBF
bnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIEpT
U3ltYm9sVGFibGVPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNTeW1ib2xUYWJsZU9iamVj
dCo+KG9iamVjdCk7CiAgICAgewogICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKHRo
aXNPYmplY3QtPnN5bWJvbFRhYmxlKCktPm1fbG9jayk7CkBAIC02Myw3ICs2NCw3IEBAIHZvaWQg
SlNTeW1ib2xUYWJsZU9iamVjdDo6Z2V0T3duTm9uSW5kZXgKICAgICAgICAgICAgIGlmICghKGl0
LT52YWx1ZS5nZXRBdHRyaWJ1dGVzKCkgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pIHx8
IG1vZGUuaW5jbHVkZURvbnRFbnVtUHJvcGVydGllcygpKSB7CiAgICAgICAgICAgICAgICAgaWYg
KGl0LT5rZXktPmlzU3ltYm9sKCkgJiYgIXByb3BlcnR5TmFtZXMuaW5jbHVkZVN5bWJvbFByb3Bl
cnRpZXMoKSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAg
cHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbVVpZChleGVjLCBpdC0+a2V5LmdldCgp
KSk7CisgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbVVp
ZCh2bSwgaXQtPmtleS5nZXQoKSkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUZW1wbGF0ZU9iamVjdERlc2Ny
aXB0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
VGVtcGxhdGVPYmplY3REZXNjcmlwdG9yLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUZW1wbGF0ZU9iamVjdERlc2NyaXB0b3IuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxNSBZ
dXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+LgotICogQ29weXJpZ2h0IChDKSAy
MDE2IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
Ni0yMDE5IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtNjgsMTIgKzY4LDEyIEBAIEpTQXJyYXkqIEpTVGVtcGxhdGVPYmpl
Y3REZXNjcmlwdG9yOjpjcmUKICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCBj
b3VudDsgKytpbmRleCkgewogICAgICAgICBhdXRvIGNvb2tlZCA9IGRlc2NyaXB0b3IoKS5jb29r
ZWRTdHJpbmdzKClbaW5kZXhdOwogICAgICAgICBpZiAoY29va2VkKQotICAgICAgICAgICAgdGVt
cGxhdGVPYmplY3QtPnB1dERpcmVjdEluZGV4KGV4ZWMsIGluZGV4LCBqc1N0cmluZyhleGVjLCBj
b29rZWQudmFsdWUoKSksIFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IFByb3BlcnR5QXR0
cmlidXRlOjpEb250RGVsZXRlLCBQdXREaXJlY3RJbmRleExpa2VQdXREaXJlY3QpOworICAgICAg
ICAgICAgdGVtcGxhdGVPYmplY3QtPnB1dERpcmVjdEluZGV4KGV4ZWMsIGluZGV4LCBqc1N0cmlu
Zyh2bSwgY29va2VkLnZhbHVlKCkpLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBQcm9w
ZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSwgUHV0RGlyZWN0SW5kZXhMaWtlUHV0RGlyZWN0KTsK
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgdGVtcGxhdGVPYmplY3QtPnB1dERpcmVjdEluZGV4
KGV4ZWMsIGluZGV4LCBqc1VuZGVmaW5lZCgpLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkg
fCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSwgUHV0RGlyZWN0SW5kZXhMaWtlUHV0RGly
ZWN0KTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAKLSAg
ICAgICAgcmF3T2JqZWN0LT5wdXREaXJlY3RJbmRleChleGVjLCBpbmRleCwganNTdHJpbmcoZXhl
YywgZGVzY3JpcHRvcigpLnJhd1N0cmluZ3MoKVtpbmRleF0pLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6
UmVhZE9ubHkgfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSwgUHV0RGlyZWN0SW5kZXhM
aWtlUHV0RGlyZWN0KTsKKyAgICAgICAgcmF3T2JqZWN0LT5wdXREaXJlY3RJbmRleChleGVjLCBp
bmRleCwganNTdHJpbmcodm0sIGRlc2NyaXB0b3IoKS5yYXdTdHJpbmdzKClbaW5kZXhdKSwgUHJv
cGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUs
IFB1dERpcmVjdEluZGV4TGlrZVB1dERpcmVjdCk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIG51bGxwdHIpOwogICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5jcHAJ
KHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlw
ZWRBcnJheVZpZXdQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjU3LDIzICsyNTcs
MjMgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgdHlwZQogICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CiAgICAgc3dpdGNoICh0aGlzVmFsdWUuZ2V0T2JqZWN0KCktPmNsYXNz
SW5mbyh2bSktPnR5cGVkQXJyYXlTdG9yYWdlVHlwZSkgewogICAgIGNhc2UgVHlwZVVpbnQ4Q2xh
bXBlZDoKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZygmdm0sICJVaW50
OENsYW1wZWRBcnJheSIpKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmlu
Zyh2bSwgIlVpbnQ4Q2xhbXBlZEFycmF5IikpOwogICAgIGNhc2UgVHlwZUludDMyOgotICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKCZ2bSwgIkludDMyQXJyYXkiKSk7Cisg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcodm0sICJJbnQzMkFycmF5Iikp
OwogICAgIGNhc2UgVHlwZVVpbnQzMjoKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1N0cmluZygmdm0sICJVaW50MzJBcnJheSIpKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1N0cmluZyh2bSwgIlVpbnQzMkFycmF5IikpOwogICAgIGNhc2UgVHlwZUZsb2F0NjQ6
Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcoJnZtLCAiRmxvYXQ2NEFy
cmF5IikpOworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKHZtLCAiRmxv
YXQ2NEFycmF5IikpOwogICAgIGNhc2UgVHlwZUZsb2F0MzI6Ci0gICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNTdHJpbmcoJnZtLCAiRmxvYXQzMkFycmF5IikpOworICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKHZtLCAiRmxvYXQzMkFycmF5IikpOwogICAgIGNh
c2UgVHlwZUludDg6Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcoJnZt
LCAiSW50OEFycmF5IikpOworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5n
KHZtLCAiSW50OEFycmF5IikpOwogICAgIGNhc2UgVHlwZVVpbnQ4OgotICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKCZ2bSwgIlVpbnQ4QXJyYXkiKSk7CisgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcodm0sICJVaW50OEFycmF5IikpOwogICAgIGNh
c2UgVHlwZUludDE2OgotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKCZ2
bSwgIkludDE2QXJyYXkiKSk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdHJp
bmcodm0sICJJbnQxNkFycmF5IikpOwogICAgIGNhc2UgVHlwZVVpbnQxNjoKLSAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZygmdm0sICJVaW50MTZBcnJheSIpKTsKKyAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyh2bSwgIlVpbnQxNkFycmF5IikpOwog
ICAgIGNhc2UgTm90VHlwZWRBcnJheToKICAgICBjYXNlIFR5cGVEYXRhVmlldzoKICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0xhenlDbGFzc1N0cnVjdHVyZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTGF6eUNsYXNzU3RydWN0dXJlLmNwcAkocmV2
aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTGF6eUNsYXNz
U3RydWN0dXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04NCw3ICs4NCw3IEBAIHZvaWQgTGF6eUNsYXNz
U3RydWN0dXJlOjpJbml0aWFsaXplcjo6c2UKICAgICBlbHNlCiAgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CiAgICAgCi0gICAgc2V0Q29uc3RydWN0b3IoSWRlbnRpZmllcjo6
ZnJvbVN0cmluZygmdm0sIG5hbWUpLCBjb25zdHJ1Y3Rvcik7CisgICAgc2V0Q29uc3RydWN0b3Io
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgbmFtZSksIGNvbnN0cnVjdG9yKTsKIH0KIAogdm9p
ZCBMYXp5Q2xhc3NTdHJ1Y3R1cmU6OnZpc2l0KFNsb3RWaXNpdG9yJiB2aXNpdG9yKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTGF6eVByb3BlcnR5LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTGF6eVByb3BlcnR5LmgJKHJldmlzaW9u
IDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xhenlQcm9wZXJ0eS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYt
MjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTQwLDcgKzQwLDcgQEAgY2xhc3MgTGF6eVByb3BlcnR5IHsKIHB1Ymxp
YzoKICAgICBzdHJ1Y3QgSW5pdGlhbGl6ZXIgewogICAgICAgICBJbml0aWFsaXplcihPd25lclR5
cGUqIG93bmVyLCBMYXp5UHJvcGVydHkmIHByb3BlcnR5KQotICAgICAgICAgICAgOiB2bSgqSGVh
cDo6aGVhcChvd25lciktPnZtKCkpCisgICAgICAgICAgICA6IHZtKEhlYXA6OmhlYXAob3duZXIp
LT52bSgpKQogICAgICAgICAgICAgLCBvd25lcihvd25lcikKICAgICAgICAgICAgICwgcHJvcGVy
dHkocHJvcGVydHkpCiAgICAgICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0xpdGVyYWxQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0xpdGVyYWxQYXJzZXIuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9MaXRlcmFsUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTIgTWF0aGlhcyBC
eW5lbnMgKG1hdGhpYXNAcWl3aS5iZSkKICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTU5LDE3ICs1OSwx
NyBAQCBib29sIExpdGVyYWxQYXJzZXI8Q2hhclR5cGU+Ojp0cnlKU09OUFBhCiAgICAgZG8gewog
ICAgICAgICBWZWN0b3I8SlNPTlBQYXRoRW50cnk+IHBhdGg7CiAgICAgICAgIC8vIFVuZ3VhcmRl
ZCBuZXh0IHRvIHN0YXJ0IG9mZiB0aGUgbGV4ZXIKLSAgICAgICAgSWRlbnRpZmllciBuYW1lID0g
SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIG1fbGV4ZXIuY3VycmVudFRva2VuKCktPnN0YXJ0
LCBtX2xleGVyLmN1cnJlbnRUb2tlbigpLT5lbmQgLSBtX2xleGVyLmN1cnJlbnRUb2tlbigpLT5z
dGFydCk7CisgICAgICAgIElkZW50aWZpZXIgbmFtZSA9IElkZW50aWZpZXI6OmZyb21TdHJpbmco
dm0sIG1fbGV4ZXIuY3VycmVudFRva2VuKCktPnN0YXJ0LCBtX2xleGVyLmN1cnJlbnRUb2tlbigp
LT5lbmQgLSBtX2xleGVyLmN1cnJlbnRUb2tlbigpLT5zdGFydCk7CiAgICAgICAgIEpTT05QUGF0
aEVudHJ5IGVudHJ5OwogICAgICAgICBpZiAobmFtZSA9PSB2bS5wcm9wZXJ0eU5hbWVzLT52YXJL
ZXl3b3JkKSB7CiAgICAgICAgICAgICBpZiAobV9sZXhlci5uZXh0KCkgIT0gVG9rSWRlbnRpZmll
cikKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICBlbnRyeS5tX3R5
cGUgPSBKU09OUFBhdGhFbnRyeVR5cGVEZWNsYXJlVmFyOwotICAgICAgICAgICAgZW50cnkubV9w
YXRoRW50cnlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIG1fbGV4ZXIuY3VycmVu
dFRva2VuKCktPnN0YXJ0LCBtX2xleGVyLmN1cnJlbnRUb2tlbigpLT5lbmQgLSBtX2xleGVyLmN1
cnJlbnRUb2tlbigpLT5zdGFydCk7CisgICAgICAgICAgICBlbnRyeS5tX3BhdGhFbnRyeU5hbWUg
PSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBtX2xleGVyLmN1cnJlbnRUb2tlbigpLT5zdGFy
dCwgbV9sZXhlci5jdXJyZW50VG9rZW4oKS0+ZW5kIC0gbV9sZXhlci5jdXJyZW50VG9rZW4oKS0+
c3RhcnQpOwogICAgICAgICAgICAgcGF0aC5hcHBlbmQoZW50cnkpOwogICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgZW50cnkubV90eXBlID0gSlNPTlBQYXRoRW50cnlUeXBlRG90OwotICAg
ICAgICAgICAgZW50cnkubV9wYXRoRW50cnlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZygm
dm0sIG1fbGV4ZXIuY3VycmVudFRva2VuKCktPnN0YXJ0LCBtX2xleGVyLmN1cnJlbnRUb2tlbigp
LT5lbmQgLSBtX2xleGVyLmN1cnJlbnRUb2tlbigpLT5zdGFydCk7CisgICAgICAgICAgICBlbnRy
eS5tX3BhdGhFbnRyeU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBtX2xleGVyLmN1
cnJlbnRUb2tlbigpLT5zdGFydCwgbV9sZXhlci5jdXJyZW50VG9rZW4oKS0+ZW5kIC0gbV9sZXhl
ci5jdXJyZW50VG9rZW4oKS0+c3RhcnQpOwogICAgICAgICAgICAgcGF0aC5hcHBlbmQoZW50cnkp
OwogICAgICAgICB9CiAgICAgICAgIGlmIChpc0xleGVyS2V5d29yZChlbnRyeS5tX3BhdGhFbnRy
eU5hbWUpKQpAQCAtOTYsNyArOTYsNyBAQCBib29sIExpdGVyYWxQYXJzZXI8Q2hhclR5cGU+Ojp0
cnlKU09OUFBhCiAgICAgICAgICAgICAgICAgZW50cnkubV90eXBlID0gSlNPTlBQYXRoRW50cnlU
eXBlRG90OwogICAgICAgICAgICAgICAgIGlmIChtX2xleGVyLm5leHQoKSAhPSBUb2tJZGVudGlm
aWVyKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAg
ZW50cnkubV9wYXRoRW50cnlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIG1fbGV4
ZXIuY3VycmVudFRva2VuKCktPnN0YXJ0LCBtX2xleGVyLmN1cnJlbnRUb2tlbigpLT5lbmQgLSBt
X2xleGVyLmN1cnJlbnRUb2tlbigpLT5zdGFydCk7CisgICAgICAgICAgICAgICAgZW50cnkubV9w
YXRoRW50cnlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgbV9sZXhlci5jdXJyZW50
VG9rZW4oKS0+c3RhcnQsIG1fbGV4ZXIuY3VycmVudFRva2VuKCktPmVuZCAtIG1fbGV4ZXIuY3Vy
cmVudFRva2VuKCktPnN0YXJ0KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIGNhc2UgVG9rTFBhcmVuOiB7CkBAIC0xMzYsNDAgKzEzNiw0MiBAQCBi
b29sIExpdGVyYWxQYXJzZXI8Q2hhclR5cGU+Ojp0cnlKU09OUFBhCiB0ZW1wbGF0ZSA8dHlwZW5h
bWUgQ2hhclR5cGU+CiBBTFdBWVNfSU5MSU5FIGNvbnN0IElkZW50aWZpZXIgTGl0ZXJhbFBhcnNl
cjxDaGFyVHlwZT46Om1ha2VJZGVudGlmaWVyKGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJzLCBzaXpl
X3QgbGVuZ3RoKQogeworICAgIFZNJiB2bSA9IG1fZXhlYy0+dm0oKTsKICAgICBpZiAoIWxlbmd0
aCkKLSAgICAgICAgcmV0dXJuIG1fZXhlYy0+dm0oKS5wcm9wZXJ0eU5hbWVzLT5lbXB0eUlkZW50
aWZpZXI7CisgICAgICAgIHJldHVybiB2bS5wcm9wZXJ0eU5hbWVzLT5lbXB0eUlkZW50aWZpZXI7
CiAgICAgaWYgKGNoYXJhY3RlcnNbMF0gPj0gTWF4aW11bUNhY2hhYmxlQ2hhcmFjdGVyKQotICAg
ICAgICByZXR1cm4gSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmbV9leGVjLT52bSgpLCBjaGFyYWN0
ZXJzLCBsZW5ndGgpOworICAgICAgICByZXR1cm4gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwg
Y2hhcmFjdGVycywgbGVuZ3RoKTsKIAogICAgIGlmIChsZW5ndGggPT0gMSkgewogICAgICAgICBp
ZiAoIW1fc2hvcnRJZGVudGlmaWVyc1tjaGFyYWN0ZXJzWzBdXS5pc051bGwoKSkKICAgICAgICAg
ICAgIHJldHVybiBtX3Nob3J0SWRlbnRpZmllcnNbY2hhcmFjdGVyc1swXV07Ci0gICAgICAgIG1f
c2hvcnRJZGVudGlmaWVyc1tjaGFyYWN0ZXJzWzBdXSA9IElkZW50aWZpZXI6OmZyb21TdHJpbmco
Jm1fZXhlYy0+dm0oKSwgY2hhcmFjdGVycywgbGVuZ3RoKTsKKyAgICAgICAgbV9zaG9ydElkZW50
aWZpZXJzW2NoYXJhY3RlcnNbMF1dID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgY2hhcmFj
dGVycywgbGVuZ3RoKTsKICAgICAgICAgcmV0dXJuIG1fc2hvcnRJZGVudGlmaWVyc1tjaGFyYWN0
ZXJzWzBdXTsKICAgICB9CiAgICAgaWYgKCFtX3JlY2VudElkZW50aWZpZXJzW2NoYXJhY3RlcnNb
MF1dLmlzTnVsbCgpICYmIElkZW50aWZpZXI6OmVxdWFsKG1fcmVjZW50SWRlbnRpZmllcnNbY2hh
cmFjdGVyc1swXV0uaW1wbCgpLCBjaGFyYWN0ZXJzLCBsZW5ndGgpKQogICAgICAgICByZXR1cm4g
bV9yZWNlbnRJZGVudGlmaWVyc1tjaGFyYWN0ZXJzWzBdXTsKLSAgICBtX3JlY2VudElkZW50aWZp
ZXJzW2NoYXJhY3RlcnNbMF1dID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmbV9leGVjLT52bSgp
LCBjaGFyYWN0ZXJzLCBsZW5ndGgpOworICAgIG1fcmVjZW50SWRlbnRpZmllcnNbY2hhcmFjdGVy
c1swXV0gPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBjaGFyYWN0ZXJzLCBsZW5ndGgpOwog
ICAgIHJldHVybiBtX3JlY2VudElkZW50aWZpZXJzW2NoYXJhY3RlcnNbMF1dOwogfQogCiB0ZW1w
bGF0ZSA8dHlwZW5hbWUgQ2hhclR5cGU+CiBBTFdBWVNfSU5MSU5FIGNvbnN0IElkZW50aWZpZXIg
TGl0ZXJhbFBhcnNlcjxDaGFyVHlwZT46Om1ha2VJZGVudGlmaWVyKGNvbnN0IFVDaGFyKiBjaGFy
YWN0ZXJzLCBzaXplX3QgbGVuZ3RoKQogeworICAgIFZNJiB2bSA9IG1fZXhlYy0+dm0oKTsKICAg
ICBpZiAoIWxlbmd0aCkKLSAgICAgICAgcmV0dXJuIG1fZXhlYy0+dm0oKS5wcm9wZXJ0eU5hbWVz
LT5lbXB0eUlkZW50aWZpZXI7CisgICAgICAgIHJldHVybiB2bS5wcm9wZXJ0eU5hbWVzLT5lbXB0
eUlkZW50aWZpZXI7CiAgICAgaWYgKGNoYXJhY3RlcnNbMF0gPj0gTWF4aW11bUNhY2hhYmxlQ2hh
cmFjdGVyKQotICAgICAgICByZXR1cm4gSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmbV9leGVjLT52
bSgpLCBjaGFyYWN0ZXJzLCBsZW5ndGgpOworICAgICAgICByZXR1cm4gSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyh2bSwgY2hhcmFjdGVycywgbGVuZ3RoKTsKIAogICAgIGlmIChsZW5ndGggPT0gMSkg
ewogICAgICAgICBpZiAoIW1fc2hvcnRJZGVudGlmaWVyc1tjaGFyYWN0ZXJzWzBdXS5pc051bGwo
KSkKICAgICAgICAgICAgIHJldHVybiBtX3Nob3J0SWRlbnRpZmllcnNbY2hhcmFjdGVyc1swXV07
Ci0gICAgICAgIG1fc2hvcnRJZGVudGlmaWVyc1tjaGFyYWN0ZXJzWzBdXSA9IElkZW50aWZpZXI6
OmZyb21TdHJpbmcoJm1fZXhlYy0+dm0oKSwgY2hhcmFjdGVycywgbGVuZ3RoKTsKKyAgICAgICAg
bV9zaG9ydElkZW50aWZpZXJzW2NoYXJhY3RlcnNbMF1dID0gSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zyh2bSwgY2hhcmFjdGVycywgbGVuZ3RoKTsKICAgICAgICAgcmV0dXJuIG1fc2hvcnRJZGVudGlm
aWVyc1tjaGFyYWN0ZXJzWzBdXTsKICAgICB9CiAgICAgaWYgKCFtX3JlY2VudElkZW50aWZpZXJz
W2NoYXJhY3RlcnNbMF1dLmlzTnVsbCgpICYmIElkZW50aWZpZXI6OmVxdWFsKG1fcmVjZW50SWRl
bnRpZmllcnNbY2hhcmFjdGVyc1swXV0uaW1wbCgpLCBjaGFyYWN0ZXJzLCBsZW5ndGgpKQogICAg
ICAgICByZXR1cm4gbV9yZWNlbnRJZGVudGlmaWVyc1tjaGFyYWN0ZXJzWzBdXTsKLSAgICBtX3Jl
Y2VudElkZW50aWZpZXJzW2NoYXJhY3RlcnNbMF1dID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZygm
bV9leGVjLT52bSgpLCBjaGFyYWN0ZXJzLCBsZW5ndGgpOworICAgIG1fcmVjZW50SWRlbnRpZmll
cnNbY2hhcmFjdGVyc1swXV0gPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBjaGFyYWN0ZXJz
LCBsZW5ndGgpOwogICAgIHJldHVybiBtX3JlY2VudElkZW50aWZpZXJzW2NoYXJhY3RlcnNbMF1d
OwogfQogCkBAIC05NjEsOSArOTYzLDkgQEAgSlNWYWx1ZSBMaXRlcmFsUGFyc2VyPENoYXJUeXBl
Pjo6cGFyc2UoUAogICAgICAgICAgICAgICAgICAgICBjYXNlIFRva1N0cmluZzogewogICAgICAg
ICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgTGV4ZXI6OkxpdGVyYWxQYXJzZXJUb2tlblB0ciBz
dHJpbmdUb2tlbiA9IG1fbGV4ZXIuY3VycmVudFRva2VuKCk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoc3RyaW5nVG9rZW4tPnN0cmluZ0lzOEJpdCkKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBsYXN0VmFsdWUgPSBqc1N0cmluZyhtX2V4ZWMsIG1ha2VJZGVudGlmaWVyKHN0cmlu
Z1Rva2VuLT5zdHJpbmdUb2tlbjgsIHN0cmluZ1Rva2VuLT5zdHJpbmdMZW5ndGgpLnN0cmluZygp
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0VmFsdWUgPSBqc1N0cmluZyh2bSwg
bWFrZUlkZW50aWZpZXIoc3RyaW5nVG9rZW4tPnN0cmluZ1Rva2VuOCwgc3RyaW5nVG9rZW4tPnN0
cmluZ0xlbmd0aCkuc3RyaW5nKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RWYWx1ZSA9IGpzU3RyaW5nKG1fZXhlYywgbWFr
ZUlkZW50aWZpZXIoc3RyaW5nVG9rZW4tPnN0cmluZ1Rva2VuMTYsIHN0cmluZ1Rva2VuLT5zdHJp
bmdMZW5ndGgpLnN0cmluZygpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0VmFs
dWUgPSBqc1N0cmluZyh2bSwgbWFrZUlkZW50aWZpZXIoc3RyaW5nVG9rZW4tPnN0cmluZ1Rva2Vu
MTYsIHN0cmluZ1Rva2VuLT5zdHJpbmdMZW5ndGgpLnN0cmluZygpKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIG1fbGV4ZXIubmV4dCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0xvb2t1cC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0xvb2t1cC5oCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Mb29rdXAuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29w
eXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAqICBD
b3B5cmlnaHQgKEMpIDIwMDMtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtMzk5LDcgKzM5OSw3IEBAIGlubGluZSB2b2lkIHJl
aWZ5U3RhdGljUHJvcGVydGllcyhWTSYgdm0KICAgICBmb3IgKGF1dG8mIHZhbHVlIDogdmFsdWVz
KSB7CiAgICAgICAgIGlmICghdmFsdWUubV9rZXkpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgYXV0byBrZXkgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBMQ2hhcio+KHZhbHVlLm1fa2V5KSwgc3RybGVuKHZhbHVlLm1fa2V5KSk7Cisg
ICAgICAgIGF1dG8ga2V5ID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBMQ2hhcio+KHZhbHVlLm1fa2V5KSwgc3RybGVuKHZhbHVlLm1fa2V5KSk7CiAg
ICAgICAgIHJlaWZ5U3RhdGljUHJvcGVydHkodm0sIGNsYXNzSW5mbywga2V5LCB2YWx1ZSwgdGhp
c09iaik7CiAgICAgfQogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFw
SXRlcmF0b3JQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL01hcEl0ZXJhdG9yUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwSXRlcmF0b3JQcm90b3R5cGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywg
MjAxNiBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTkgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMzgsNyArMzgsNyBAQCB2b2lkIE1hcEl0ZXJhdG9yUHJvdG90
eXBlOjpmaW5pc2hDcmVhdGlvCiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIEFT
U0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7CiAKLSAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNp
dGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+dG9TdHJpbmdUYWdTeW1ib2wsIGpzU3RyaW5nKCZ2
bSwgIk1hcCBJdGVyYXRvciIpLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBQcm9wZXJ0
eUF0dHJpYnV0ZTo6UmVhZE9ubHkpOworICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZt
LCB2bS5wcm9wZXJ0eU5hbWVzLT50b1N0cmluZ1RhZ1N5bWJvbCwganNTdHJpbmcodm0sICJNYXAg
SXRlcmF0b3IiKSwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtIHwgUHJvcGVydHlBdHRyaWJ1
dGU6OlJlYWRPbmx5KTsKICAgICBKU0NfQlVJTFRJTl9GVU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJ
T04odm0ucHJvcGVydHlOYW1lcy0+bmV4dCwgbWFwSXRlcmF0b3JQcm90b3R5cGVOZXh0Q29kZUdl
bmVyYXRvciwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51
bSkpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBQcm90b3R5
cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcFBy
b3RvdHlwZS5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL01hcFByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzMsNyArNzMsNyBA
QCB2b2lkIE1hcFByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtCiAgICAgSlNGdW5jdGlv
biogZW50cmllcyA9IEpTRnVuY3Rpb246OmNyZWF0ZSh2bSwgbWFwUHJvdG90eXBlRW50cmllc0Nv
ZGVHZW5lcmF0b3Iodm0pLCBnbG9iYWxPYmplY3QpOwogICAgIHB1dERpcmVjdFdpdGhvdXRUcmFu
c2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5lbnRyaWVzUHVibGlj
TmFtZSgpLCBlbnRyaWVzLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6
OkRvbnRFbnVtKSk7CiAgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3Bl
cnR5TmFtZXMtPml0ZXJhdG9yU3ltYm9sLCBlbnRyaWVzLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7Ci0gICAgcHV0RGlyZWN0V2l0aG91dFRyYW5z
aXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPnRvU3RyaW5nVGFnU3ltYm9sLCBqc1N0cmluZygm
dm0sICJNYXAiKSwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtIHwgUHJvcGVydHlBdHRyaWJ1
dGU6OlJlYWRPbmx5KTsKKyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJv
cGVydHlOYW1lcy0+dG9TdHJpbmdUYWdTeW1ib2wsIGpzU3RyaW5nKHZtLCAiTWFwIiksIFByb3Bl
cnR5QXR0cmlidXRlOjpEb250RW51bSB8IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSk7CiAK
ICAgICBKU0NfTkFUSVZFX0dFVFRFUl9XSVRIT1VUX1RSQU5TSVRJT04odm0ucHJvcGVydHlOYW1l
cy0+c2l6ZSwgbWFwUHJvdG9GdW5jU2l6ZSwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtIHwg
UHJvcGVydHlBdHRyaWJ1dGU6OkFjY2Vzc29yKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL01hdGhPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL01hdGhPYmplY3QuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXRoT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9y
dGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOCwgMjAxMywg
MjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQg
KEMpIDIwMDctMjAxOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCkBAIC03OCw1MSArNzgsNTEgQEAgdm9pZCBNYXRoT2JqZWN0OjpmaW5pc2hDcmVh
dGlvbihWTSYgdm0sIAogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBBU1NFUlQo
aW5oZXJpdHModm0sIGluZm8oKSkpOwogCi0gICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24o
dm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiRSIpLCBqc051bWJlcihNYXRoOjpleHAo
MS4wKSksIFByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgUHJvcGVydHlBdHRyaWJ1dGU6
OkRvbnRFbnVtIHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KTsKLSAgICBwdXREaXJlY3RX
aXRob3V0VHJhbnNpdGlvbih2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJMTjIiKSwg
anNOdW1iZXIoTWF0aDo6bG9nKDIuMCkpLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8
IFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25s
eSk7Ci0gICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIElkZW50aWZpZXI6OmZyb21T
dHJpbmcoJnZtLCAiTE4xMCIpLCBqc051bWJlcihNYXRoOjpsb2coMTAuMCkpLCBQcm9wZXJ0eUF0
dHJpYnV0ZTo6RG9udERlbGV0ZSB8IFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8IFByb3Bl
cnR5QXR0cmlidXRlOjpSZWFkT25seSk7Ci0gICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24o
dm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiTE9HMkUiKSwganNOdW1iZXIoMS4wIC8g
TWF0aDo6bG9nKDIuMCkpLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IFByb3BlcnR5
QXR0cmlidXRlOjpEb250RW51bSB8IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSk7Ci0gICAg
cHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZt
LCAiTE9HMTBFIiksIGpzTnVtYmVyKDAuNDM0Mjk0NDgxOTAzMjUxOCksIFByb3BlcnR5QXR0cmli
dXRlOjpEb250RGVsZXRlIHwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtIHwgUHJvcGVydHlB
dHRyaWJ1dGU6OlJlYWRPbmx5KTsKLSAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJQSSIpLCBqc051bWJlcihwaURvdWJsZSksIFBy
b3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVt
IHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KTsKLSAgICBwdXREaXJlY3RXaXRob3V0VHJh
bnNpdGlvbih2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJTUVJUMV8yIiksIGpzTnVt
YmVyKHNxcnQoMC41KSksIFByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgUHJvcGVydHlB
dHRyaWJ1dGU6OkRvbnRFbnVtIHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KTsKLSAgICBw
dXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0s
ICJTUVJUMiIpLCBqc051bWJlcihzcXJ0KDIuMCkpLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERl
bGV0ZSB8IFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8IFByb3BlcnR5QXR0cmlidXRlOjpS
ZWFkT25seSk7Ci0gICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5
TmFtZXMtPnRvU3RyaW5nVGFnU3ltYm9sLCBqc1N0cmluZygmdm0sICJNYXRoIiksIFByb3BlcnR5
QXR0cmlidXRlOjpEb250RW51bSB8IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSk7Ci0KLSAg
ICBwdXREaXJlY3ROYXRpdmVGdW5jdGlvbldpdGhvdXRUcmFuc2l0aW9uKHZtLCBnbG9iYWxPYmpl
Y3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiYWJzIiksIDEsIG1hdGhQcm90b0Z1bmNB
YnMsIEFic0ludHJpbnNpYywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRl
OjpEb250RW51bSkpOwotICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9uV2l0aG91dFRyYW5zaXRp
b24odm0sIGdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJhY29zIiks
IDEsIG1hdGhQcm90b0Z1bmNBQ29zLCBBQ29zSW50cmluc2ljLCBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7Ci0gICAgcHV0RGlyZWN0TmF0aXZlRnVu
Y3Rpb25XaXRob3V0VHJhbnNpdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKCZ2bSwgImFzaW4iKSwgMSwgbWF0aFByb3RvRnVuY0FTaW4sIEFTaW5JbnRyaW5zaWMs
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKLSAg
ICBwdXREaXJlY3ROYXRpdmVGdW5jdGlvbldpdGhvdXRUcmFuc2l0aW9uKHZtLCBnbG9iYWxPYmpl
Y3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiYXRhbiIpLCAxLCBtYXRoUHJvdG9GdW5j
QVRhbiwgQVRhbkludHJpbnNpYywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmli
dXRlOjpEb250RW51bSkpOwotICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9uV2l0aG91dFRyYW5z
aXRpb24odm0sIGdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJhY29z
aCIpLCAxLCBtYXRoUHJvdG9GdW5jQUNvc2gsIEFDb3NoSW50cmluc2ljLCBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7Ci0gICAgcHV0RGlyZWN0TmF0
aXZlRnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKCZ2bSwgImFzaW5oIiksIDEsIG1hdGhQcm90b0Z1bmNBU2luaCwgQVNpbmhJ
bnRyaW5zaWMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVu
dW0pKTsKLSAgICBwdXREaXJlY3ROYXRpdmVGdW5jdGlvbldpdGhvdXRUcmFuc2l0aW9uKHZtLCBn
bG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiYXRhbmgiKSwgMSwgbWF0
aFByb3RvRnVuY0FUYW5oLCBBVGFuaEludHJpbnNpYywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFBy
b3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOwotICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9u
V2l0aG91dFRyYW5zaXRpb24odm0sIGdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zygmdm0sICJhdGFuMiIpLCAyLCBtYXRoUHJvdG9GdW5jQVRhbjIsIE5vSW50cmluc2ljLCBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7Ci0gICAgcHV0
RGlyZWN0TmF0aXZlRnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImNicnQiKSwgMSwgbWF0aFByb3RvRnVuY0NicnQs
IENicnRJbnRyaW5zaWMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6
RG9udEVudW0pKTsKLSAgICBwdXREaXJlY3ROYXRpdmVGdW5jdGlvbldpdGhvdXRUcmFuc2l0aW9u
KHZtLCBnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiY2VpbCIpLCAx
LCBtYXRoUHJvdG9GdW5jQ2VpbCwgQ2VpbEludHJpbnNpYywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOwotICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0
aW9uV2l0aG91dFRyYW5zaXRpb24odm0sIGdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZygmdm0sICJjbHozMiIpLCAxLCBtYXRoUHJvdG9GdW5jQ2x6MzIsIENsejMySW50cmluc2lj
LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7Ci0g
ICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbih2bSwgZ2xvYmFsT2Jq
ZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImNvcyIpLCAxLCBtYXRoUHJvdG9GdW5j
Q29zLCBDb3NJbnRyaW5zaWMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0
ZTo6RG9udEVudW0pKTsKLSAgICBwdXREaXJlY3ROYXRpdmVGdW5jdGlvbldpdGhvdXRUcmFuc2l0
aW9uKHZtLCBnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiY29zaCIp
LCAxLCBtYXRoUHJvdG9GdW5jQ29zaCwgQ29zaEludHJpbnNpYywgc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOwotICAgIHB1dERpcmVjdE5hdGl2ZUZ1
bmN0aW9uV2l0aG91dFRyYW5zaXRpb24odm0sIGdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZygmdm0sICJleHAiKSwgMSwgbWF0aFByb3RvRnVuY0V4cCwgRXhwSW50cmluc2ljLCBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7Ci0gICAg
cHV0RGlyZWN0TmF0aXZlRnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbih2bSwgZ2xvYmFsT2JqZWN0
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImV4cG0xIiksIDEsIG1hdGhQcm90b0Z1bmNF
eHBtMSwgRXhwbTFJbnRyaW5zaWMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJp
YnV0ZTo6RG9udEVudW0pKTsKLSAgICBwdXREaXJlY3ROYXRpdmVGdW5jdGlvbldpdGhvdXRUcmFu
c2l0aW9uKHZtLCBnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiZmxv
b3IiKSwgMSwgbWF0aFByb3RvRnVuY0Zsb29yLCBGbG9vckludHJpbnNpYywgc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOwotICAgIHB1dERpcmVjdE5h
dGl2ZUZ1bmN0aW9uV2l0aG91dFRyYW5zaXRpb24odm0sIGdsb2JhbE9iamVjdCwgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZygmdm0sICJmcm91bmQiKSwgMSwgbWF0aFByb3RvRnVuY0Zyb3VuZCwgRlJv
dW5kSW50cmluc2ljLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRv
bnRFbnVtKSk7Ci0gICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbih2
bSwgZ2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImh5cG90IiksIDIs
IG1hdGhQcm90b0Z1bmNIeXBvdCwgTm9JbnRyaW5zaWMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQ
cm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKLSAgICBwdXREaXJlY3ROYXRpdmVGdW5jdGlv
bldpdGhvdXRUcmFuc2l0aW9uKHZtLCBnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJp
bmcoJnZtLCAibG9nIiksIDEsIG1hdGhQcm90b0Z1bmNMb2csIExvZ0ludHJpbnNpYywgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOwotICAgIHB1dERp
cmVjdE5hdGl2ZUZ1bmN0aW9uV2l0aG91dFRyYW5zaXRpb24odm0sIGdsb2JhbE9iamVjdCwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJsb2cxMCIpLCAxLCBtYXRoUHJvdG9GdW5jTG9nMTAs
IExvZzEwSW50cmluc2ljLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6
OkRvbnRFbnVtKSk7Ci0gICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rpb25XaXRob3V0VHJhbnNpdGlv
bih2bSwgZ2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImxvZzFwIiks
IDEsIG1hdGhQcm90b0Z1bmNMb2cxcCwgTG9nMXBJbnRyaW5zaWMsIHN0YXRpY19jYXN0PHVuc2ln
bmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKLSAgICBwdXREaXJlY3ROYXRpdmVG
dW5jdGlvbldpdGhvdXRUcmFuc2l0aW9uKHZtLCBnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZy
b21TdHJpbmcoJnZtLCAibG9nMiIpLCAxLCBtYXRoUHJvdG9GdW5jTG9nMiwgTG9nMkludHJpbnNp
Yywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOwot
ICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9uV2l0aG91dFRyYW5zaXRpb24odm0sIGdsb2JhbE9i
amVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJtYXgiKSwgMiwgbWF0aFByb3RvRnVu
Y01heCwgTWF4SW50cmluc2ljLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1
dGU6OkRvbnRFbnVtKSk7Ci0gICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rpb25XaXRob3V0VHJhbnNp
dGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgIm1pbiIp
LCAyLCBtYXRoUHJvdG9GdW5jTWluLCBNaW5JbnRyaW5zaWMsIHN0YXRpY19jYXN0PHVuc2lnbmVk
PihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKLSAgICBwdXREaXJlY3ROYXRpdmVGdW5j
dGlvbldpdGhvdXRUcmFuc2l0aW9uKHZtLCBnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21T
dHJpbmcoJnZtLCAicG93IiksIDIsIG1hdGhQcm90b0Z1bmNQb3csIFBvd0ludHJpbnNpYywgc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOwotICAgIHB1
dERpcmVjdE5hdGl2ZUZ1bmN0aW9uV2l0aG91dFRyYW5zaXRpb24odm0sIGdsb2JhbE9iamVjdCwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJyYW5kb20iKSwgMCwgbWF0aFByb3RvRnVuY1Jh
bmRvbSwgUmFuZG9tSW50cmluc2ljLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRy
aWJ1dGU6OkRvbnRFbnVtKSk7Ci0gICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rpb25XaXRob3V0VHJh
bnNpdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgInJv
dW5kIiksIDEsIG1hdGhQcm90b0Z1bmNSb3VuZCwgUm91bmRJbnRyaW5zaWMsIHN0YXRpY19jYXN0
PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKLSAgICBwdXREaXJlY3RO
YXRpdmVGdW5jdGlvbldpdGhvdXRUcmFuc2l0aW9uKHZtLCBnbG9iYWxPYmplY3QsIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcoJnZtLCAic2lnbiIpLCAxLCBtYXRoUHJvdG9GdW5jU2lnbiwgTm9JbnRy
aW5zaWMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0p
KTsKLSAgICBwdXREaXJlY3ROYXRpdmVGdW5jdGlvbldpdGhvdXRUcmFuc2l0aW9uKHZtLCBnbG9i
YWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAic2luIiksIDEsIG1hdGhQcm90
b0Z1bmNTaW4sIFNpbkludHJpbnNpYywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0
cmlidXRlOjpEb250RW51bSkpOwotICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9uV2l0aG91dFRy
YW5zaXRpb24odm0sIGdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJz
aW5oIiksIDEsIG1hdGhQcm90b0Z1bmNTaW5oLCBTaW5oSW50cmluc2ljLCBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7Ci0gICAgcHV0RGlyZWN0TmF0
aXZlRnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKCZ2bSwgInNxcnQiKSwgMSwgbWF0aFByb3RvRnVuY1NxcnQsIFNxcnRJbnRy
aW5zaWMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0p
KTsKLSAgICBwdXREaXJlY3ROYXRpdmVGdW5jdGlvbldpdGhvdXRUcmFuc2l0aW9uKHZtLCBnbG9i
YWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAidGFuIiksIDEsIG1hdGhQcm90
b0Z1bmNUYW4sIFRhbkludHJpbnNpYywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0
cmlidXRlOjpEb250RW51bSkpOwotICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9uV2l0aG91dFRy
YW5zaXRpb24odm0sIGdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJ0
YW5oIiksIDEsIG1hdGhQcm90b0Z1bmNUYW5oLCBUYW5oSW50cmluc2ljLCBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7Ci0gICAgcHV0RGlyZWN0TmF0
aXZlRnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKCZ2bSwgInRydW5jIiksIDEsIG1hdGhQcm90b0Z1bmNUcnVuYywgVHJ1bmNJ
bnRyaW5zaWMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVu
dW0pKTsKLSAgICBwdXREaXJlY3ROYXRpdmVGdW5jdGlvbldpdGhvdXRUcmFuc2l0aW9uKHZtLCBn
bG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiaW11bCIpLCAyLCBtYXRo
UHJvdG9GdW5jSU11bCwgSU11bEludHJpbnNpYywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3Bl
cnR5QXR0cmlidXRlOjpEb250RW51bSkpOworICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9u
KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiRSIpLCBqc051bWJlcihNYXRoOjpleHAo
MS4wKSksIFByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgUHJvcGVydHlBdHRyaWJ1dGU6
OkRvbnRFbnVtIHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KTsKKyAgICBwdXREaXJlY3RX
aXRob3V0VHJhbnNpdGlvbih2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIkxOMiIpLCBq
c051bWJlcihNYXRoOjpsb2coMi4wKSksIFByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwg
UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtIHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5
KTsKKyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZyh2bSwgIkxOMTAiKSwganNOdW1iZXIoTWF0aDo6bG9nKDEwLjApKSwgUHJvcGVydHlBdHRy
aWJ1dGU6OkRvbnREZWxldGUgfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBQcm9wZXJ0
eUF0dHJpYnV0ZTo6UmVhZE9ubHkpOworICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZt
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiTE9HMkUiKSwganNOdW1iZXIoMS4wIC8gTWF0
aDo6bG9nKDIuMCkpLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IFByb3BlcnR5QXR0
cmlidXRlOjpEb250RW51bSB8IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSk7CisgICAgcHV0
RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJM
T0cxMEUiKSwganNOdW1iZXIoMC40MzQyOTQ0ODE5MDMyNTE4KSwgUHJvcGVydHlBdHRyaWJ1dGU6
OkRvbnREZWxldGUgfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBQcm9wZXJ0eUF0dHJp
YnV0ZTo6UmVhZE9ubHkpOworICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiUEkiKSwganNOdW1iZXIocGlEb3VibGUpLCBQcm9wZXJ0
eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8IFBy
b3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSk7CisgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRp
b24odm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJTUVJUMV8yIiksIGpzTnVtYmVyKHNx
cnQoMC41KSksIFByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgUHJvcGVydHlBdHRyaWJ1
dGU6OkRvbnRFbnVtIHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KTsKKyAgICBwdXREaXJl
Y3RXaXRob3V0VHJhbnNpdGlvbih2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIlNRUlQy
IiksIGpzTnVtYmVyKHNxcnQoMi4wKSksIFByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwg
UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtIHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5
KTsKKyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+
dG9TdHJpbmdUYWdTeW1ib2wsIGpzU3RyaW5nKHZtLCAiTWF0aCIpLCBQcm9wZXJ0eUF0dHJpYnV0
ZTo6RG9udEVudW0gfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpOworCisgICAgcHV0RGly
ZWN0TmF0aXZlRnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiYWJzIiksIDEsIG1hdGhQcm90b0Z1bmNBYnMsIEFic0lu
dHJpbnNpYywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51
bSkpOworICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9uV2l0aG91dFRyYW5zaXRpb24odm0sIGds
b2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImFjb3MiKSwgMSwgbWF0aFBy
b3RvRnVuY0FDb3MsIEFDb3NJbnRyaW5zaWMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0
eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKKyAgICBwdXREaXJlY3ROYXRpdmVGdW5jdGlvbldpdGhv
dXRUcmFuc2l0aW9uKHZtLCBnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0s
ICJhc2luIiksIDEsIG1hdGhQcm90b0Z1bmNBU2luLCBBU2luSW50cmluc2ljLCBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7CisgICAgcHV0RGlyZWN0
TmF0aXZlRnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKHZtLCAiYXRhbiIpLCAxLCBtYXRoUHJvdG9GdW5jQVRhbiwgQVRhbklu
dHJpbnNpYywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51
bSkpOworICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9uV2l0aG91dFRyYW5zaXRpb24odm0sIGds
b2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImFjb3NoIiksIDEsIG1hdGhQ
cm90b0Z1bmNBQ29zaCwgQUNvc2hJbnRyaW5zaWMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9w
ZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKKyAgICBwdXREaXJlY3ROYXRpdmVGdW5jdGlvbldp
dGhvdXRUcmFuc2l0aW9uKHZtLCBnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmco
dm0sICJhc2luaCIpLCAxLCBtYXRoUHJvdG9GdW5jQVNpbmgsIEFTaW5oSW50cmluc2ljLCBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7CisgICAgcHV0
RGlyZWN0TmF0aXZlRnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiYXRhbmgiKSwgMSwgbWF0aFByb3RvRnVuY0FUYW5o
LCBBVGFuaEludHJpbnNpYywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRl
OjpEb250RW51bSkpOworICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9uV2l0aG91dFRyYW5zaXRp
b24odm0sIGdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImF0YW4yIiks
IDIsIG1hdGhQcm90b0Z1bmNBVGFuMiwgTm9JbnRyaW5zaWMsIHN0YXRpY19jYXN0PHVuc2lnbmVk
PihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKKyAgICBwdXREaXJlY3ROYXRpdmVGdW5j
dGlvbldpdGhvdXRUcmFuc2l0aW9uKHZtLCBnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21T
dHJpbmcodm0sICJjYnJ0IiksIDEsIG1hdGhQcm90b0Z1bmNDYnJ0LCBDYnJ0SW50cmluc2ljLCBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7CisgICAg
cHV0RGlyZWN0TmF0aXZlRnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbih2bSwgZ2xvYmFsT2JqZWN0
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiY2VpbCIpLCAxLCBtYXRoUHJvdG9GdW5jQ2Vp
bCwgQ2VpbEludHJpbnNpYywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRl
OjpEb250RW51bSkpOworICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9uV2l0aG91dFRyYW5zaXRp
b24odm0sIGdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImNsejMyIiks
IDEsIG1hdGhQcm90b0Z1bmNDbHozMiwgQ2x6MzJJbnRyaW5zaWMsIHN0YXRpY19jYXN0PHVuc2ln
bmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKKyAgICBwdXREaXJlY3ROYXRpdmVG
dW5jdGlvbldpdGhvdXRUcmFuc2l0aW9uKHZtLCBnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZy
b21TdHJpbmcodm0sICJjb3MiKSwgMSwgbWF0aFByb3RvRnVuY0NvcywgQ29zSW50cmluc2ljLCBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7CisgICAg
cHV0RGlyZWN0TmF0aXZlRnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbih2bSwgZ2xvYmFsT2JqZWN0
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiY29zaCIpLCAxLCBtYXRoUHJvdG9GdW5jQ29z
aCwgQ29zaEludHJpbnNpYywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRl
OjpEb250RW51bSkpOworICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9uV2l0aG91dFRyYW5zaXRp
b24odm0sIGdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImV4cCIpLCAx
LCBtYXRoUHJvdG9GdW5jRXhwLCBFeHBJbnRyaW5zaWMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQ
cm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKKyAgICBwdXREaXJlY3ROYXRpdmVGdW5jdGlv
bldpdGhvdXRUcmFuc2l0aW9uKHZtLCBnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJp
bmcodm0sICJleHBtMSIpLCAxLCBtYXRoUHJvdG9GdW5jRXhwbTEsIEV4cG0xSW50cmluc2ljLCBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7CisgICAg
cHV0RGlyZWN0TmF0aXZlRnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbih2bSwgZ2xvYmFsT2JqZWN0
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiZmxvb3IiKSwgMSwgbWF0aFByb3RvRnVuY0Zs
b29yLCBGbG9vckludHJpbnNpYywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmli
dXRlOjpEb250RW51bSkpOworICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9uV2l0aG91dFRyYW5z
aXRpb24odm0sIGdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImZyb3Vu
ZCIpLCAxLCBtYXRoUHJvdG9GdW5jRnJvdW5kLCBGUm91bmRJbnRyaW5zaWMsIHN0YXRpY19jYXN0
PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKKyAgICBwdXREaXJlY3RO
YXRpdmVGdW5jdGlvbldpdGhvdXRUcmFuc2l0aW9uKHZtLCBnbG9iYWxPYmplY3QsIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcodm0sICJoeXBvdCIpLCAyLCBtYXRoUHJvdG9GdW5jSHlwb3QsIE5vSW50
cmluc2ljLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVt
KSk7CisgICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbih2bSwgZ2xv
YmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAibG9nIiksIDEsIG1hdGhQcm90
b0Z1bmNMb2csIExvZ0ludHJpbnNpYywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0
cmlidXRlOjpEb250RW51bSkpOworICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9uV2l0aG91dFRy
YW5zaXRpb24odm0sIGdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImxv
ZzEwIiksIDEsIG1hdGhQcm90b0Z1bmNMb2cxMCwgTG9nMTBJbnRyaW5zaWMsIHN0YXRpY19jYXN0
PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKKyAgICBwdXREaXJlY3RO
YXRpdmVGdW5jdGlvbldpdGhvdXRUcmFuc2l0aW9uKHZtLCBnbG9iYWxPYmplY3QsIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcodm0sICJsb2cxcCIpLCAxLCBtYXRoUHJvdG9GdW5jTG9nMXAsIExvZzFw
SW50cmluc2ljLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRF
bnVtKSk7CisgICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbih2bSwg
Z2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAibG9nMiIpLCAxLCBtYXRo
UHJvdG9GdW5jTG9nMiwgTG9nMkludHJpbnNpYywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3Bl
cnR5QXR0cmlidXRlOjpEb250RW51bSkpOworICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9uV2l0
aG91dFRyYW5zaXRpb24odm0sIGdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2
bSwgIm1heCIpLCAyLCBtYXRoUHJvdG9GdW5jTWF4LCBNYXhJbnRyaW5zaWMsIHN0YXRpY19jYXN0
PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKKyAgICBwdXREaXJlY3RO
YXRpdmVGdW5jdGlvbldpdGhvdXRUcmFuc2l0aW9uKHZtLCBnbG9iYWxPYmplY3QsIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcodm0sICJtaW4iKSwgMiwgbWF0aFByb3RvRnVuY01pbiwgTWluSW50cmlu
c2ljLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7
CisgICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbih2bSwgZ2xvYmFs
T2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAicG93IiksIDIsIG1hdGhQcm90b0Z1
bmNQb3csIFBvd0ludHJpbnNpYywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmli
dXRlOjpEb250RW51bSkpOworICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9uV2l0aG91dFRyYW5z
aXRpb24odm0sIGdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInJhbmRv
bSIpLCAwLCBtYXRoUHJvdG9GdW5jUmFuZG9tLCBSYW5kb21JbnRyaW5zaWMsIHN0YXRpY19jYXN0
PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKKyAgICBwdXREaXJlY3RO
YXRpdmVGdW5jdGlvbldpdGhvdXRUcmFuc2l0aW9uKHZtLCBnbG9iYWxPYmplY3QsIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcodm0sICJyb3VuZCIpLCAxLCBtYXRoUHJvdG9GdW5jUm91bmQsIFJvdW5k
SW50cmluc2ljLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRF
bnVtKSk7CisgICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbih2bSwg
Z2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAic2lnbiIpLCAxLCBtYXRo
UHJvdG9GdW5jU2lnbiwgTm9JbnRyaW5zaWMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0
eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKKyAgICBwdXREaXJlY3ROYXRpdmVGdW5jdGlvbldpdGhv
dXRUcmFuc2l0aW9uKHZtLCBnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0s
ICJzaW4iKSwgMSwgbWF0aFByb3RvRnVuY1NpbiwgU2luSW50cmluc2ljLCBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7CisgICAgcHV0RGlyZWN0TmF0
aXZlRnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKHZtLCAic2luaCIpLCAxLCBtYXRoUHJvdG9GdW5jU2luaCwgU2luaEludHJp
bnNpYywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkp
OworICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9uV2l0aG91dFRyYW5zaXRpb24odm0sIGdsb2Jh
bE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInNxcnQiKSwgMSwgbWF0aFByb3Rv
RnVuY1NxcnQsIFNxcnRJbnRyaW5zaWMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0
dHJpYnV0ZTo6RG9udEVudW0pKTsKKyAgICBwdXREaXJlY3ROYXRpdmVGdW5jdGlvbldpdGhvdXRU
cmFuc2l0aW9uKHZtLCBnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJ0
YW4iKSwgMSwgbWF0aFByb3RvRnVuY1RhbiwgVGFuSW50cmluc2ljLCBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7CisgICAgcHV0RGlyZWN0TmF0aXZl
RnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCAidGFuaCIpLCAxLCBtYXRoUHJvdG9GdW5jVGFuaCwgVGFuaEludHJpbnNp
Yywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOwor
ICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9uV2l0aG91dFRyYW5zaXRpb24odm0sIGdsb2JhbE9i
amVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInRydW5jIiksIDEsIG1hdGhQcm90b0Z1
bmNUcnVuYywgVHJ1bmNJbnRyaW5zaWMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0
dHJpYnV0ZTo6RG9udEVudW0pKTsKKyAgICBwdXREaXJlY3ROYXRpdmVGdW5jdGlvbldpdGhvdXRU
cmFuc2l0aW9uKHZtLCBnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJp
bXVsIiksIDIsIG1hdGhQcm90b0Z1bmNJTXVsLCBJTXVsSW50cmluc2ljLCBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7CiB9CiAKIC8vIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlckNvbnN0
cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9O
dW1iZXJDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL051bWJlckNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAsMjAwMyBIYXJyaSBQ
b3J0ZW4gKHBvcnRlbkBrZGUub3JnKQotICogIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAx
MSwgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmln
aHQgKEMpIDIwMDctMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdl
bmVyYWwgUHVibGljCkBAIC03MCwxOSArNzAsMTkgQEAgdm9pZCBOdW1iZXJDb25zdHJ1Y3Rvcjo6
ZmluaXNoQ3JlYXRpb24oVgogICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5w
cm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIG51bWJlclByb3RvdHlwZSwgUHJvcGVydHlBdHRyaWJ1
dGU6OkRvbnRFbnVtIHwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUgfCBQcm9wZXJ0eUF0
dHJpYnV0ZTo6UmVhZE9ubHkpOwogICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2
bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDEpLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6
UmVhZE9ubHkgfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwogCi0gICAgcHV0RGlyZWN0
V2l0aG91dFRyYW5zaXRpb24odm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiRVBTSUxP
TiIpLCBqc0RvdWJsZU51bWJlcihzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OmVwc2lsb24o
KSksIFByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgUHJvcGVydHlBdHRyaWJ1dGU6OkRv
bnRFbnVtIHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KTsKLSAgICBwdXREaXJlY3RXaXRo
b3V0VHJhbnNpdGlvbih2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJNQVhfVkFMVUUi
KSwganNEb3VibGVOdW1iZXIoMS43OTc2OTMxMzQ4NjIzMTU3RSszMDgpLCBQcm9wZXJ0eUF0dHJp
YnV0ZTo6RG9udERlbGV0ZSB8IFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8IFByb3BlcnR5
QXR0cmlidXRlOjpSZWFkT25seSk7Ci0gICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0s
IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiTUlOX1ZBTFVFIiksIGpzRG91YmxlTnVtYmVy
KDVFLTMyNCksIFByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgUHJvcGVydHlBdHRyaWJ1
dGU6OkRvbnRFbnVtIHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KTsKLSAgICBwdXREaXJl
Y3RXaXRob3V0VHJhbnNpdGlvbih2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJNQVhf
U0FGRV9JTlRFR0VSIiksIGpzRG91YmxlTnVtYmVyKG1heFNhZmVJbnRlZ2VyKCkpLCBQcm9wZXJ0
eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8IFBy
b3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSk7Ci0gICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRp
b24odm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiTUlOX1NBRkVfSU5URUdFUiIpLCBq
c0RvdWJsZU51bWJlcihtaW5TYWZlSW50ZWdlcigpKSwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRE
ZWxldGUgfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6
UmVhZE9ubHkpOwotICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKCZ2bSwgIk5FR0FUSVZFX0lORklOSVRZIiksIGpzRG91YmxlTnVtYmVyKC1z
dGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OmluZmluaXR5KCkpLCBQcm9wZXJ0eUF0dHJpYnV0
ZTo6RG9udERlbGV0ZSB8IFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8IFByb3BlcnR5QXR0
cmlidXRlOjpSZWFkT25seSk7Ci0gICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiUE9TSVRJVkVfSU5GSU5JVFkiKSwganNEb3VibGVO
dW1iZXIoc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjppbmZpbml0eSgpKSwgUHJvcGVydHlB
dHRyaWJ1dGU6OkRvbnREZWxldGUgfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBQcm9w
ZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpOworICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9u
KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiRVBTSUxPTiIpLCBqc0RvdWJsZU51bWJl
cihzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OmVwc2lsb24oKSksIFByb3BlcnR5QXR0cmli
dXRlOjpEb250RGVsZXRlIHwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtIHwgUHJvcGVydHlB
dHRyaWJ1dGU6OlJlYWRPbmx5KTsKKyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIk1BWF9WQUxVRSIpLCBqc0RvdWJsZU51bWJlcigx
Ljc5NzY5MzEzNDg2MjMxNTdFKzMwOCksIFByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwg
UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtIHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5
KTsKKyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZyh2bSwgIk1JTl9WQUxVRSIpLCBqc0RvdWJsZU51bWJlcig1RS0zMjQpLCBQcm9wZXJ0eUF0
dHJpYnV0ZTo6RG9udERlbGV0ZSB8IFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8IFByb3Bl
cnR5QXR0cmlidXRlOjpSZWFkT25seSk7CisgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24o
dm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJNQVhfU0FGRV9JTlRFR0VSIiksIGpzRG91
YmxlTnVtYmVyKG1heFNhZmVJbnRlZ2VyKCkpLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0
ZSB8IFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8IFByb3BlcnR5QXR0cmlidXRlOjpSZWFk
T25seSk7CisgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIElkZW50aWZpZXI6OmZy
b21TdHJpbmcodm0sICJNSU5fU0FGRV9JTlRFR0VSIiksIGpzRG91YmxlTnVtYmVyKG1pblNhZmVJ
bnRlZ2VyKCkpLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IFByb3BlcnR5QXR0cmli
dXRlOjpEb250RW51bSB8IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSk7CisgICAgcHV0RGly
ZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJORUdB
VElWRV9JTkZJTklUWSIpLCBqc0RvdWJsZU51bWJlcigtc3RkOjpudW1lcmljX2xpbWl0czxkb3Vi
bGU+OjppbmZpbml0eSgpKSwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUgfCBQcm9wZXJ0
eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpOworICAg
IHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZt
LCAiUE9TSVRJVkVfSU5GSU5JVFkiKSwganNEb3VibGVOdW1iZXIoc3RkOjpudW1lcmljX2xpbWl0
czxkb3VibGU+OjppbmZpbml0eSgpKSwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUgfCBQ
cm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkp
OwogICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5O
YU4sIGpzTmFOKCksIFByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgUHJvcGVydHlBdHRy
aWJ1dGU6OkRvbnRFbnVtIHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KTsKIAogICAgIHB1
dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wYXJzZUludCwg
bnVtYmVyUHJvdG90eXBlLT5nbG9iYWxPYmplY3Qodm0pLT5wYXJzZUludEZ1bmN0aW9uKCksIHN0
YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKICAgICBw
dXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+cGFyc2VGbG9h
dCwgbnVtYmVyUHJvdG90eXBlLT5nbG9iYWxPYmplY3Qodm0pLT5wYXJzZUZsb2F0RnVuY3Rpb24o
KSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOwog
Ci0gICAgSlNDX05BVElWRV9JTlRSSU5TSUNfRlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lUSU9OKElk
ZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiaXNJbnRlZ2VyIiksIG51bWJlckNvbnN0cnVjdG9y
RnVuY0lzSW50ZWdlciwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpE
b250RW51bSksIDEsIE51bWJlcklzSW50ZWdlckludHJpbnNpYyk7CisgICAgSlNDX05BVElWRV9J
TlRSSU5TSUNfRlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lUSU9OKElkZW50aWZpZXI6OmZyb21TdHJp
bmcodm0sICJpc0ludGVnZXIiKSwgbnVtYmVyQ29uc3RydWN0b3JGdW5jSXNJbnRlZ2VyLCBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSwgMSwgTnVtYmVy
SXNJbnRlZ2VySW50cmluc2ljKTsKIH0KIAogLy8gRUNNQSAxNS43LjEKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlclByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyUHJvdG90eXBlLmNwcAkocmV2aXNp
b24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyUHJvdG90
eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0
IChDKSAxOTk5LTIwMDAsMjAwMyBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQotICogIENv
cHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA3LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtNDIyLDcgKzQyMiw3IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgbnVtYmVyUHJvdG8KIAogICAgIC8vIEhhbmRsZSBOYU4gYW5k
IEluZmluaXR5LgogICAgIGlmICghc3RkOjppc2Zpbml0ZSh4KSkKLSAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywgU3RyaW5nOjpudW1iZXIoeCkp
KTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc05vbnRyaXZpYWxTdHJpbmcodm0s
IFN0cmluZzo6bnVtYmVyKHgpKSk7CiAKICAgICBpZiAoIWluUmFuZ2UpCiAgICAgICAgIHJldHVy
biB0aHJvd1ZNRXJyb3IoZXhlYywgc2NvcGUsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgInRvRXhw
b25lbnRpYWwoKSBhcmd1bWVudCBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMjAiX3MpKTsKQEAgLTQz
NSw3ICs0MzUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG51bWJlclByb3RvCiAg
ICAgaXNVbmRlZmluZWQKICAgICAgICAgPyBjb252ZXJ0ZXIuVG9FeHBvbmVudGlhbCh4LCAtMSwg
JmJ1aWxkZXIpCiAgICAgICAgIDogY29udmVydGVyLlRvRXhwb25lbnRpYWwoeCwgZGVjaW1hbFBs
YWNlc0luRXhwb25lbnQsICZidWlsZGVyKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
U3RyaW5nKGV4ZWMsIGJ1aWxkZXIuRmluYWxpemUoKSkpOworICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNTdHJpbmcodm0sIGJ1aWxkZXIuRmluYWxpemUoKSkpOwogfQogCiAvLyB0b0ZpeGVk
IGNvbnZlcnRzIGEgbnVtYmVyIHRvIGEgc3RyaW5nLCBhbHdheXMgZm9ybWF0dGluZyBhcyBhbiBh
IGRlY2ltYWwgZnJhY3Rpb24uCkBAIC00NjMsMTMgKzQ2MywxMyBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIG51bWJlclByb3RvCiAgICAgLy8gVGhpcyBhbHNvIGNvdmVycyBJbmluaXR5
LCBhbmQgc3RydWN0dXJlIHRoZSBjaGVjayBzbyB0aGF0IE5hTgogICAgIC8vIHZhbHVlcyBhcmUg
YWxzbyBoYW5kbGVkIGJ5IG51bWJlclRvU3RyaW5nCiAgICAgaWYgKCEoZmFicyh4KSA8IDFlKzIx
KSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyhleGVjLCBTdHJpbmc6
Om51bWJlcih4KSkpOworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKHZt
LCBTdHJpbmc6Om51bWJlcih4KSkpOwogCiAgICAgLy8gVGhlIGNoZWNrIGFib3ZlIHdpbGwgcmV0
dXJuIGZhbHNlIGZvciBOYU4gb3IgSW5maW5pdHksIHRoZXNlIHdpbGwgYmUKICAgICAvLyBoYW5k
bGVkIGJ5IG51bWJlclRvU3RyaW5nLgogICAgIEFTU0VSVChzdGQ6OmlzZmluaXRlKHgpKTsKIAot
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcoZXhlYywgU3RyaW5nOjpudW1iZXJU
b1N0cmluZ0ZpeGVkV2lkdGgoeCwgZGVjaW1hbFBsYWNlcykpKTsKKyAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzU3RyaW5nKHZtLCBTdHJpbmc6Om51bWJlclRvU3RyaW5nRml4ZWRXaWR0aCh4
LCBkZWNpbWFsUGxhY2VzKSkpOwogfQogCiAvLyB0b1ByZWNpc2lvbiBjb252ZXJ0cyBhIG51bWJl
ciB0byBhIHN0cmluZywgdGFraW5nIGFuIGFyZ3VtZW50IHNwZWNpZnlpbmcgYQpAQCAtNDk2LDE2
ICs0OTYsMTYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBudW1iZXJQcm90bwogCiAg
ICAgLy8gVG8gcHJlY2lzaW9uIGNhbGxlZCB3aXRoIG5vIGFyZ3VtZW50IGlzIHRyZWF0ZWQgYXMg
VG9TdHJpbmcuCiAgICAgaWYgKGlzVW5kZWZpbmVkKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzU3RyaW5nKGV4ZWMsIFN0cmluZzo6bnVtYmVyKHgpKSk7CisgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcodm0sIFN0cmluZzo6bnVtYmVyKHgpKSk7CiAKICAg
ICAvLyBIYW5kbGUgTmFOIGFuZCBJbmZpbml0eS4KICAgICBpZiAoIXN0ZDo6aXNmaW5pdGUoeCkp
Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOb250cml2aWFsU3RyaW5nKGV4ZWMs
IFN0cmluZzo6bnVtYmVyKHgpKSk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNO
b250cml2aWFsU3RyaW5nKHZtLCBTdHJpbmc6Om51bWJlcih4KSkpOwogCiAgICAgaWYgKCFpblJh
bmdlKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIHNjb3BlLCBjcmVhdGVSYW5n
ZUVycm9yKGV4ZWMsICJ0b1ByZWNpc2lvbigpIGFyZ3VtZW50IG11c3QgYmUgYmV0d2VlbiAxIGFu
ZCAyMSJfcykpOwogCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyhleGVjLCBT
dHJpbmc6Om51bWJlclRvU3RyaW5nRml4ZWRQcmVjaXNpb24oeCwgc2lnbmlmaWNhbnRGaWd1cmVz
LCBLZWVwVHJhaWxpbmdaZXJvcykpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3Ry
aW5nKHZtLCBTdHJpbmc6Om51bWJlclRvU3RyaW5nRml4ZWRQcmVjaXNpb24oeCwgc2lnbmlmaWNh
bnRGaWd1cmVzLCBLZWVwVHJhaWxpbmdaZXJvcykpKTsKIH0KIAogc3RhdGljIEFMV0FZU19JTkxJ
TkUgSlNTdHJpbmcqIGludDMyVG9TdHJpbmdJbnRlcm5hbChWTSYgdm0sIGludDMyX3QgdmFsdWUs
IGludDMyX3QgcmFkaXgpCkBAIC01MTksOSArNTE5LDkgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUg
SlNTdHJpbmcqIGludDMyVG9TdAogICAgIH0KIAogICAgIGlmIChyYWRpeCA9PSAxMCkKLSAgICAg
ICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZygmdm0sIHZtLm51bWVyaWNTdHJpbmdzLmFkZCh2
YWx1ZSkpOworICAgICAgICByZXR1cm4ganNOb250cml2aWFsU3RyaW5nKHZtLCB2bS5udW1lcmlj
U3RyaW5ncy5hZGQodmFsdWUpKTsKIAotICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcoJnZt
LCB0b1N0cmluZ1dpdGhSYWRpeEludGVybmFsKHZhbHVlLCByYWRpeCkpOworICAgIHJldHVybiBq
c05vbnRyaXZpYWxTdHJpbmcodm0sIHRvU3RyaW5nV2l0aFJhZGl4SW50ZXJuYWwodmFsdWUsIHJh
ZGl4KSk7CiAKIH0KIApAQCAtNTM0LDEzICs1MzQsMTMgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUg
SlNTdHJpbmcqIG51bWJlclRvUwogICAgICAgICByZXR1cm4gaW50MzJUb1N0cmluZ0ludGVybmFs
KHZtLCBpbnRlZ2VyVmFsdWUsIHJhZGl4KTsKIAogICAgIGlmIChyYWRpeCA9PSAxMCkKLSAgICAg
ICAgcmV0dXJuIGpzU3RyaW5nKCZ2bSwgdm0ubnVtZXJpY1N0cmluZ3MuYWRkKGRvdWJsZVZhbHVl
KSk7CisgICAgICAgIHJldHVybiBqc1N0cmluZyh2bSwgdm0ubnVtZXJpY1N0cmluZ3MuYWRkKGRv
dWJsZVZhbHVlKSk7CiAKICAgICBpZiAoIXN0ZDo6aXNmaW5pdGUoZG91YmxlVmFsdWUpKQotICAg
ICAgICByZXR1cm4ganNOb250cml2aWFsU3RyaW5nKCZ2bSwgU3RyaW5nOjpudW1iZXIoZG91Ymxl
VmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyh2bSwgU3RyaW5nOjpu
dW1iZXIoZG91YmxlVmFsdWUpKTsKIAogICAgIFJhZGl4QnVmZmVyIGJ1ZmZlcjsKLSAgICByZXR1
cm4ganNTdHJpbmcoJnZtLCB0b1N0cmluZ1dpdGhSYWRpeEludGVybmFsKGJ1ZmZlciwgZG91Ymxl
VmFsdWUsIHJhZGl4KSk7CisgICAgcmV0dXJuIGpzU3RyaW5nKHZtLCB0b1N0cmluZ1dpdGhSYWRp
eEludGVybmFsKGJ1ZmZlciwgZG91YmxlVmFsdWUsIHJhZGl4KSk7CiB9CiAKIEpTU3RyaW5nKiBp
bnQzMlRvU3RyaW5nKFZNJiB2bSwgaW50MzJfdCB2YWx1ZSwgaW50MzJfdCByYWRpeCkKQEAgLTU1
OSw3ICs1NTksNyBAQCBKU1N0cmluZyogaW50NTJUb1N0cmluZyhWTSYgdm0sIGludDY0X3QgCiAg
ICAgfQogCiAgICAgaWYgKHJhZGl4ID09IDEwKQotICAgICAgICByZXR1cm4ganNOb250cml2aWFs
U3RyaW5nKCZ2bSwgdm0ubnVtZXJpY1N0cmluZ3MuYWRkKHN0YXRpY19jYXN0PGRvdWJsZT4odmFs
dWUpKSk7CisgICAgICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcodm0sIHZtLm51bWVyaWNT
dHJpbmdzLmFkZChzdGF0aWNfY2FzdDxkb3VibGU+KHZhbHVlKSkpOwogCiAgICAgLy8gUG9zaXRp
b24gdGhlIGRlY2ltYWwgcG9pbnQgYXQgdGhlIGNlbnRlciBvZiB0aGUgc3RyaW5nLCBzZXQKICAg
ICAvLyB0aGUgc3RhcnRPZlJlc3VsdFN0cmluZyBwb2ludGVyIHRvIHBvaW50IGF0IHRoZSBkZWNp
bWFsIHBvaW50LgpAQCAtNTY4LDcgKzU2OCw3IEBAIEpTU3RyaW5nKiBpbnQ1MlRvU3RyaW5nKFZN
JiB2bSwgaW50NjRfdCAKICAgICBjaGFyKiBzdGFydE9mUmVzdWx0U3RyaW5nID0gZGVjaW1hbFBv
aW50OwogICAgICpkZWNpbWFsUG9pbnQgPSAnXDAnOwogCi0gICAgcmV0dXJuIGpzTm9udHJpdmlh
bFN0cmluZygmdm0sIGludDUyVG9TdHJpbmdXaXRoUmFkaXgoc3RhcnRPZlJlc3VsdFN0cmluZywg
dmFsdWUsIHJhZGl4KSk7CisgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyh2bSwgaW50NTJU
b1N0cmluZ1dpdGhSYWRpeChzdGFydE9mUmVzdWx0U3RyaW5nLCB2YWx1ZSwgcmFkaXgpKTsKIH0K
IAogSlNTdHJpbmcqIG51bWJlclRvU3RyaW5nKFZNJiB2bSwgZG91YmxlIGRvdWJsZVZhbHVlLCBp
bnQzMl90IHJhZGl4KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0
Q29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL09iamVjdENvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQ
b3J0ZW4gKHBvcnRlbkBrZGUub3JnKQotICogIENvcHlyaWdodCAoQykgMjAwOC0yMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxOSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC0y
MDQsNyArMjA0LDcgQEAgSlNWYWx1ZSBvYmplY3RDb25zdHJ1Y3RvckdldE93blByb3BlcnR5RAog
ewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwotICAgIFByb3BlcnR5TmFtZUFycmF5IHByb3BlcnRpZXMoJnZtLCBQcm9w
ZXJ0eU5hbWVNb2RlOjpTdHJpbmdzQW5kU3ltYm9scywgUHJpdmF0ZVN5bWJvbE1vZGU6OkV4Y2x1
ZGUpOworICAgIFByb3BlcnR5TmFtZUFycmF5IHByb3BlcnRpZXModm0sIFByb3BlcnR5TmFtZU1v
ZGU6OlN0cmluZ3NBbmRTeW1ib2xzLCBQcml2YXRlU3ltYm9sTW9kZTo6RXhjbHVkZSk7CiAgICAg
b2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBleGVj
LCBwcm9wZXJ0aWVzLCBFbnVtZXJhdGlvbk1vZGUoRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6SW5j
bHVkZSkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKQEAgLTM3Myw3
ICszNzMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0CiAgICAg
ICAgIC8vIEZvciBleGFtcGxlLCBbW0dldF1dIG9mIHNvdXJjZSBvYmplY3QgY291bGQgY29uZmln
dXJlIHNldHRlciB0byB0YXJnZXQgb2JqZWN0LiBTbyBkaXNhYmxlIHRoZSBmYXN0IHBhdGguCiAg
ICAgICAgIHRhcmdldENhblBlcmZvcm1GYXN0UHV0ID0gZmFsc2U7CiAKLSAgICAgICAgUHJvcGVy
dHlOYW1lQXJyYXkgcHJvcGVydGllcygmdm0sIFByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3NBbmRT
eW1ib2xzLCBQcml2YXRlU3ltYm9sTW9kZTo6RXhjbHVkZSk7CisgICAgICAgIFByb3BlcnR5TmFt
ZUFycmF5IHByb3BlcnRpZXModm0sIFByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3NBbmRTeW1ib2xz
LCBQcml2YXRlU3ltYm9sTW9kZTo6RXhjbHVkZSk7CiAgICAgICAgIHNvdXJjZS0+bWV0aG9kVGFi
bGUodm0pLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKHNvdXJjZSwgZXhlYywgcHJvcGVydGllcywgRW51
bWVyYXRpb25Nb2RlKERvbnRFbnVtUHJvcGVydGllc01vZGU6OkluY2x1ZGUpKTsKICAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIApAQCAtNDQwLDcgKzQ0MCw3IEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3QKICAgICBKU0FycmF5KiB2YWx1
ZXMgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIG51bGxwdHIpOwogICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIHsgfSk7CiAKLSAgICBQcm9wZXJ0eU5hbWVBcnJheSBwcm9wZXJ0aWVz
KCZ2bSwgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5ncywgUHJpdmF0ZVN5bWJvbE1vZGU6OkV4Y2x1
ZGUpOworICAgIFByb3BlcnR5TmFtZUFycmF5IHByb3BlcnRpZXModm0sIFByb3BlcnR5TmFtZU1v
ZGU6OlN0cmluZ3MsIFByaXZhdGVTeW1ib2xNb2RlOjpFeGNsdWRlKTsKICAgICB0YXJnZXQtPm1l
dGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVydHlOYW1lcyh0YXJnZXQsIGV4ZWMsIHByb3BlcnRp
ZXMsIEVudW1lcmF0aW9uTW9kZShEb250RW51bVByb3BlcnRpZXNNb2RlOjpJbmNsdWRlKSk7CiAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIApAQCAtNjAwLDcgKzYwMCw3IEBA
IHN0YXRpYyBKU1ZhbHVlIGRlZmluZVByb3BlcnRpZXMoRXhlY1N0YXQKICAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAot
ICAgIFByb3BlcnR5TmFtZUFycmF5IHByb3BlcnR5TmFtZXMoJnZtLCBQcm9wZXJ0eU5hbWVNb2Rl
OjpTdHJpbmdzQW5kU3ltYm9scywgUHJpdmF0ZVN5bWJvbE1vZGU6OkV4Y2x1ZGUpOworICAgIFBy
b3BlcnR5TmFtZUFycmF5IHByb3BlcnR5TmFtZXModm0sIFByb3BlcnR5TmFtZU1vZGU6OlN0cmlu
Z3NBbmRTeW1ib2xzLCBQcml2YXRlU3ltYm9sTW9kZTo6RXhjbHVkZSk7CiAgICAgYXNPYmplY3Qo
cHJvcGVydGllcyktPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhhc09iamVj
dChwcm9wZXJ0aWVzKSwgZXhlYywgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlKERvbnRF
bnVtUHJvcGVydGllc01vZGU6OkV4Y2x1ZGUpKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCB7IH0pOwogICAgIHNpemVfdCBudW1Qcm9wZXJ0aWVzID0gcHJvcGVydHlOYW1lcy5zaXpl
KCk7CkBAIC02OTEsNyArNjkxLDcgQEAgYm9vbCBzZXRJbnRlZ3JpdHlMZXZlbChFeGVjU3RhdGUq
IGV4ZWMsIAogICAgIGlmIChVTkxJS0VMWSghc3VjY2VzcykpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgIFByb3BlcnR5TmFtZUFycmF5IHByb3BlcnRpZXMoJnZtLCBQcm9wZXJ0eU5hbWVN
b2RlOjpTdHJpbmdzQW5kU3ltYm9scywgUHJpdmF0ZVN5bWJvbE1vZGU6OkV4Y2x1ZGUpOworICAg
IFByb3BlcnR5TmFtZUFycmF5IHByb3BlcnRpZXModm0sIFByb3BlcnR5TmFtZU1vZGU6OlN0cmlu
Z3NBbmRTeW1ib2xzLCBQcml2YXRlU3ltYm9sTW9kZTo6RXhjbHVkZSk7CiAgICAgb2JqZWN0LT5t
ZXRob2RUYWJsZSh2bSktPmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBleGVjLCBwcm9wZXJ0
aWVzLCBFbnVtZXJhdGlvbk1vZGUoRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6SW5jbHVkZSkpOwog
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKIApAQCAtNzM4LDcgKzczOCw3
IEBAIGJvb2wgdGVzdEludGVncml0eUxldmVsKEV4ZWNTdGF0ZSogZXhlYywKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCiAgICAgLy8gNi4gTGV0IGtleXMgYmUgPyBPLltbT3duUHJvcGVydHlLZXlz
XV0oKS4KLSAgICBQcm9wZXJ0eU5hbWVBcnJheSBrZXlzKCZ2bSwgUHJvcGVydHlOYW1lTW9kZTo6
U3RyaW5nc0FuZFN5bWJvbHMsIFByaXZhdGVTeW1ib2xNb2RlOjpFeGNsdWRlKTsKKyAgICBQcm9w
ZXJ0eU5hbWVBcnJheSBrZXlzKHZtLCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzQW5kU3ltYm9s
cywgUHJpdmF0ZVN5bWJvbE1vZGU6OkV4Y2x1ZGUpOwogICAgIG9iamVjdC0+bWV0aG9kVGFibGUo
dm0pLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgZXhlYywga2V5cywgRW51bWVyYXRpb25N
b2RlKERvbnRFbnVtUHJvcGVydGllc01vZGU6OkluY2x1ZGUpKTsKICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCB7IH0pOwogCkBAIC05MTcsNyArOTE3LDcgQEAgSlNBcnJheSogb3duUHJv
cGVydHlLZXlzKEV4ZWNTdGF0ZSogZXhlYwogICAgICAgICB9CiAgICAgfQogCi0gICAgUHJvcGVy
dHlOYW1lQXJyYXkgcHJvcGVydGllcygmdm0sIHByb3BlcnR5TmFtZU1vZGUsIFByaXZhdGVTeW1i
b2xNb2RlOjpFeGNsdWRlKTsKKyAgICBQcm9wZXJ0eU5hbWVBcnJheSBwcm9wZXJ0aWVzKHZtLCBw
cm9wZXJ0eU5hbWVNb2RlLCBQcml2YXRlU3ltYm9sTW9kZTo6RXhjbHVkZSk7CiAgICAgb2JqZWN0
LT5tZXRob2RUYWJsZSh2bSktPmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBleGVjLCBwcm9w
ZXJ0aWVzLCBFbnVtZXJhdGlvbk1vZGUoZG9udEVudW1Qcm9wZXJ0aWVzTW9kZSkpOwogICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwogCkBAIC05MzUsNyArOTM1LDcgQEAg
SlNBcnJheSogb3duUHJvcGVydHlLZXlzKEV4ZWNTdGF0ZSogZXhlYwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtUHJvcGVydGllczsgaSsrKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGF1dG8mIGlkZW50aWZpZXIg
PSBwcm9wZXJ0aWVzW2ldOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQo
IWlkZW50aWZpZXIuaXNTeW1ib2woKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG5ld0J1dHRlcmZseS0+c2V0SW5kZXgodm0sIGksIGpzT3duZWRTdHJpbmcoJnZtLCBpZGVudGlm
aWVyLnN0cmluZygpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0J1dHRl
cmZseS0+c2V0SW5kZXgodm0sIGksIGpzT3duZWRTdHJpbmcodm0sIGlkZW50aWZpZXIuc3RyaW5n
KCkpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdHJ1Y3R1cmUtPnNldENhY2hlZE93bktleXModm0sIG5ld0J1dHRlcmZseSk7
CkBAIC05NTUsNyArOTU1LDcgQEAgSlNBcnJheSogb3duUHJvcGVydHlLZXlzKEV4ZWNTdGF0ZSog
ZXhlYwogICAgICAgICAgICAgICAgICAgICBjb25zdCBhdXRvJiBpZGVudGlmaWVyID0gcHJvcGVy
dGllc1tpXTsKICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnR5TmFtZU1vZGUgPT0gUHJv
cGVydHlOYW1lTW9kZTo6U3RyaW5ncykgewogICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJU
KCFpZGVudGlmaWVyLmlzU3ltYm9sKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVy
W2ldLnNldCh2bSwga2V5cywganNPd25lZFN0cmluZygmdm0sIGlkZW50aWZpZXIuc3RyaW5nKCkp
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcltpXS5zZXQodm0sIGtleXMsIGpzT3du
ZWRTdHJpbmcodm0sIGlkZW50aWZpZXIuc3RyaW5nKCkpKTsKICAgICAgICAgICAgICAgICAgICAg
fSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChpZGVudGlmaWVyLmlzU3lt
Ym9sKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyW2ldLnNldCh2bSwga2V5cywg
U3ltYm9sOjpjcmVhdGUodm0sIHN0YXRpY19jYXN0PFN5bWJvbEltcGwmPigqaWRlbnRpZmllci5p
bXBsKCkpKSk7CkBAIC05ODAsNyArOTgwLDcgQEAgSlNBcnJheSogb3duUHJvcGVydHlLZXlzKEV4
ZWNTdGF0ZSogZXhlYwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bVByb3BlcnRp
ZXM7IGkrKykgewogICAgICAgICAgICAgY29uc3QgYXV0byYgaWRlbnRpZmllciA9IHByb3BlcnRp
ZXNbaV07CiAgICAgICAgICAgICBBU1NFUlQoIWlkZW50aWZpZXIuaXNTeW1ib2woKSk7Ci0gICAg
ICAgICAgICBwdXNoRGlyZWN0KGV4ZWMsIGtleXMsIGpzT3duZWRTdHJpbmcoZXhlYywgaWRlbnRp
Zmllci5zdHJpbmcoKSkpOworICAgICAgICAgICAgcHVzaERpcmVjdChleGVjLCBrZXlzLCBqc093
bmVkU3RyaW5nKHZtLCBpZGVudGlmaWVyLnN0cmluZygpKSk7CiAgICAgICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKICAgICAgICAgfQogICAgICAgICBicmVhazsK
QEAgLTEwMDksNyArMTAwOSw3IEBAIEpTQXJyYXkqIG93blByb3BlcnR5S2V5cyhFeGVjU3RhdGUq
IGV4ZWMKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KIAotICAgICAg
ICAgICAgcHVzaERpcmVjdChleGVjLCBrZXlzLCBqc093bmVkU3RyaW5nKGV4ZWMsIGlkZW50aWZp
ZXIuc3RyaW5nKCkpKTsKKyAgICAgICAgICAgIHB1c2hEaXJlY3QoZXhlYywga2V5cywganNPd25l
ZFN0cmluZyh2bSwgaWRlbnRpZmllci5zdHJpbmcoKSkpOwogICAgICAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAgICAgICAgIH0KIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RQcm90b3R5cGUuY3BwCShyZXZpc2lv
biAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RQcm90b3R5
cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQg
KEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQotICogIENvcHlyaWdo
dCAoQykgMjAwOC0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5
cmlnaHQgKEMpIDIwMDgtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljCkBAIC0zNDQsNyArMzQ0LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBvYmplY3RQcm90bwogICAgICAgICBpZiAoIW5ld1N0cmluZykKICAgICAgICAgICAg
IHJldHVybiB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYywgc2NvcGUpOwogCi0gICAgICAgIGF1
dG8gcmVzdWx0ID0ganNOb250cml2aWFsU3RyaW5nKCZ2bSwgbmV3U3RyaW5nKTsKKyAgICAgICAg
YXV0byByZXN1bHQgPSBqc05vbnRyaXZpYWxTdHJpbmcodm0sIG5ld1N0cmluZyk7CiAgICAgICAg
IHRoaXNPYmplY3QtPnN0cnVjdHVyZSh2bSktPnNldE9iamVjdFRvU3RyaW5nVmFsdWUoZXhlYywg
dm0sIHJlc3VsdCwgdG9TdHJpbmdUYWdTbG90KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAg
ICB9KSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3BlcmF0aW9ucy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wZXJhdGlvbnMu
aAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3Bl
cmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBAIEFMV0FZU19JTkxJTkUg
SlNTdHJpbmcqIGpzU3RyaW5nKEV4ZWNTdGEKICAgICAgICAgcmV0dXJuIHMyOwogICAgIHVuc2ln
bmVkIGxlbmd0aDIgPSBzMi0+bGVuZ3RoKCk7CiAgICAgaWYgKCFsZW5ndGgyKQotICAgICAgICBy
ZXR1cm4ganNTdHJpbmcoJnZtLCB1MSk7CisgICAgICAgIHJldHVybiBqc1N0cmluZyh2bSwgdTEp
OwogICAgIHN0YXRpY19hc3NlcnQoSlNTdHJpbmc6Ok1heExlbmd0aCA9PSBzdGQ6Om51bWVyaWNf
bGltaXRzPGludDMyX3Q+OjptYXgoKSwgIiIpOwogICAgIGlmIChzdW1PdmVyZmxvd3M8aW50MzJf
dD4obGVuZ3RoMSwgbGVuZ3RoMikpIHsKICAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4
ZWMsIHNjb3BlKTsKQEAgLTYwLDcgKzYwLDcgQEAgQUxXQVlTX0lOTElORSBKU1N0cmluZyoganNT
dHJpbmcoRXhlY1N0YQogICAgIC8vIFdlIGNvbnNlcnZhdGl2ZWx5IGNvbnNpZGVyIHRoZSBjb3N0
IG9mIHUxLiBDdXJyZW50bHksIHdlIGFyZSBub3QgY29uc2lkZXJpbmcgYWJvdXQgaXM4Qml0KCkg
Y2FzZSBiZWNhdXNlIDE2LWJpdAogICAgIC8vIHN0cmluZ3MgYXJlIHJlbGF0aXZlbHkgcmFyZS4g
QnV0IHdlIGNhbiBkbyB0aGF0IGlmIHdlIG5lZWQgdG8gY29uc2lkZXIgaXQuCiAgICAgaWYgKHMy
LT5pc1JvcGUoKSB8fCAoU3RyaW5nSW1wbDo6aGVhZGVyU2l6ZTxMQ2hhcj4oKSArIGxlbmd0aDEg
KyBsZW5ndGgyKSA+PSBzaXplb2YoSlNSb3BlU3RyaW5nKSkKLSAgICAgICAgcmV0dXJuIEpTUm9w
ZVN0cmluZzo6Y3JlYXRlKHZtLCBqc1N0cmluZygmdm0sIHUxKSwgczIpOworICAgICAgICByZXR1
cm4gSlNSb3BlU3RyaW5nOjpjcmVhdGUodm0sIGpzU3RyaW5nKHZtLCB1MSksIHMyKTsKIAogICAg
IEFTU0VSVCghczItPmlzUm9wZSgpKTsKICAgICBjb25zdCBTdHJpbmcmIHUyID0gczItPnZhbHVl
KGV4ZWMpOwpAQCAtODAsNyArODAsNyBAQCBBTFdBWVNfSU5MSU5FIEpTU3RyaW5nKiBqc1N0cmlu
ZyhFeGVjU3RhCiAKICAgICB1bnNpZ25lZCBsZW5ndGgxID0gczEtPmxlbmd0aCgpOwogICAgIGlm
ICghbGVuZ3RoMSkKLSAgICAgICAgcmV0dXJuIGpzU3RyaW5nKCZ2bSwgdTIpOworICAgICAgICBy
ZXR1cm4ganNTdHJpbmcodm0sIHUyKTsKICAgICB1bnNpZ25lZCBsZW5ndGgyID0gdTIubGVuZ3Ro
KCk7CiAgICAgaWYgKCFsZW5ndGgyKQogICAgICAgICByZXR1cm4gczE7CkBAIC05Myw3ICs5Myw3
IEBAIEFMV0FZU19JTkxJTkUgSlNTdHJpbmcqIGpzU3RyaW5nKEV4ZWNTdGEKICAgICAvLyAoMSkg
Q29zdCBvZiBtYWtpbmcgSlNTdHJpbmcgICAgOiBzaXplb2YoSlNTdHJpbmcpIChmb3IgbmV3IHN0
cmluZykgKyBzaXplb2YoU3RyaW5nSW1wbCBoZWFkZXIpICsgbGVuZ3RoMSArIGxlbmd0aDIKICAg
ICAvLyAoMikgQ29zdCBvZiBtYWtpbmcgSlNSb3BlU3RyaW5nOiBzaXplb2YoSlNTdHJpbmcpIChm
b3IgdTIpICsgc2l6ZW9mKEpTUm9wZVN0cmluZykKICAgICBpZiAoczEtPmlzUm9wZSgpIHx8IChT
dHJpbmdJbXBsOjpoZWFkZXJTaXplPExDaGFyPigpICsgbGVuZ3RoMSArIGxlbmd0aDIpID49IHNp
emVvZihKU1JvcGVTdHJpbmcpKQotICAgICAgICByZXR1cm4gSlNSb3BlU3RyaW5nOjpjcmVhdGUo
dm0sIHMxLCBqc1N0cmluZygmdm0sIHUyKSk7CisgICAgICAgIHJldHVybiBKU1JvcGVTdHJpbmc6
OmNyZWF0ZSh2bSwgczEsIGpzU3RyaW5nKHZtLCB1MikpOwogCiAgICAgQVNTRVJUKCFzMS0+aXNS
b3BlKCkpOwogICAgIGNvbnN0IFN0cmluZyYgdTEgPSBzMS0+dmFsdWUoZXhlYyk7CkBAIC0xNTks
MTAgKzE1OSwxMCBAQCBBTFdBWVNfSU5MSU5FIEpTU3RyaW5nKiBqc1N0cmluZyhFeGVjU3RhCiAK
ICAgICB1bnNpZ25lZCBsZW5ndGgxID0gdTEubGVuZ3RoKCk7CiAgICAgaWYgKCFsZW5ndGgxKQot
ICAgICAgICByZXR1cm4ganNTdHJpbmcoJnZtLCB1Mik7CisgICAgICAgIHJldHVybiBqc1N0cmlu
Zyh2bSwgdTIpOwogICAgIHVuc2lnbmVkIGxlbmd0aDIgPSB1Mi5sZW5ndGgoKTsKICAgICBpZiAo
IWxlbmd0aDIpCi0gICAgICAgIHJldHVybiBqc1N0cmluZygmdm0sIHUxKTsKKyAgICAgICAgcmV0
dXJuIGpzU3RyaW5nKHZtLCB1MSk7CiAgICAgc3RhdGljX2Fzc2VydChKU1N0cmluZzo6TWF4TGVu
Z3RoID09IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1heCgpLCAiIik7CiAgICAgaWYg
KHN1bU92ZXJmbG93czxpbnQzMl90PihsZW5ndGgxLCBsZW5ndGgyKSkgewogICAgICAgICB0aHJv
d091dE9mTWVtb3J5RXJyb3IoZXhlYywgc2NvcGUpOwpAQCAtMTcyLDcgKzE3Miw3IEBAIEFMV0FZ
U19JTkxJTkUgSlNTdHJpbmcqIGpzU3RyaW5nKEV4ZWNTdGEKICAgICAvLyAoMSkgQ29zdCBvZiBt
YWtpbmcgSlNTdHJpbmcgICAgOiBzaXplb2YoSlNTdHJpbmcpIChmb3IgbmV3IHN0cmluZykgKyBz
aXplb2YoU3RyaW5nSW1wbCBoZWFkZXIpICsgbGVuZ3RoMSArIGxlbmd0aDIKICAgICAvLyAoMikg
Q29zdCBvZiBtYWtpbmcgSlNSb3BlU3RyaW5nOiBzaXplb2YoSlNTdHJpbmcpIChmb3IgdTEpICsg
c2l6ZW9mKEpTU3RyaW5nKSAoZm9yIHUyKSArIHNpemVvZihKU1JvcGVTdHJpbmcpCiAgICAgaWYg
KChTdHJpbmdJbXBsOjpoZWFkZXJTaXplPExDaGFyPigpICsgbGVuZ3RoMSArIGxlbmd0aDIpID49
IChzaXplb2YoSlNSb3BlU3RyaW5nKSArIHNpemVvZihKU1N0cmluZykpKQotICAgICAgICByZXR1
cm4gSlNSb3BlU3RyaW5nOjpjcmVhdGUodm0sIGpzU3RyaW5nKCZ2bSwgdTEpLCBqc1N0cmluZygm
dm0sIHUyKSk7CisgICAgICAgIHJldHVybiBKU1JvcGVTdHJpbmc6OmNyZWF0ZSh2bSwganNTdHJp
bmcodm0sIHUxKSwganNTdHJpbmcodm0sIHUyKSk7CiAKICAgICBTdHJpbmcgbmV3U3RyaW5nID0g
dHJ5TWFrZVN0cmluZyh1MSwgdTIpOwogICAgIGlmICghbmV3U3RyaW5nKSB7CkBAIC0xODQsOCAr
MTg0LDggQEAgQUxXQVlTX0lOTElORSBKU1N0cmluZyoganNTdHJpbmcoRXhlY1N0YQogCiBBTFdB
WVNfSU5MSU5FIEpTU3RyaW5nKiBqc1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFN0cmlu
ZyYgdTEsIGNvbnN0IFN0cmluZyYgdTIsIGNvbnN0IFN0cmluZyYgdTMpCiB7Ci0gICAgVk0qIHZt
ID0gJmV4ZWMtPnZtKCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZt
KTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKIAogICAgIHVuc2lnbmVkIGxlbmd0aDEgPSB1MS5sZW5ndGgoKTsKICAg
ICB1bnNpZ25lZCBsZW5ndGgyID0gdTIubGVuZ3RoKCk7CkBAIC0yMTIsMjEgKzIxMiwyMSBAQCBB
TFdBWVNfSU5MSU5FIEpTU3RyaW5nKiBqc1N0cmluZyhFeGVjU3RhCiAgICAgLy8gKDEpIENvc3Qg
b2YgbWFraW5nIEpTU3RyaW5nICAgIDogc2l6ZW9mKEpTU3RyaW5nKSAoZm9yIG5ldyBzdHJpbmcp
ICsgc2l6ZW9mKFN0cmluZ0ltcGwgaGVhZGVyKSArIGxlbmd0aDEgKyBsZW5ndGgyICsgbGVuZ3Ro
MwogICAgIC8vICgyKSBDb3N0IG9mIG1ha2luZyBKU1JvcGVTdHJpbmc6IHNpemVvZihKU1N0cmlu
ZykgKGZvciB1MSkgKyBzaXplb2YoSlNTdHJpbmcpIChmb3IgdTIpICsgc2l6ZW9mKEpTU3RyaW5n
KSAoZm9yIHUzKSArIHNpemVvZihKU1JvcGVTdHJpbmcpCiAgICAgaWYgKChTdHJpbmdJbXBsOjpo
ZWFkZXJTaXplPExDaGFyPigpICsgbGVuZ3RoMSArIGxlbmd0aDIgKyBsZW5ndGgzKSA+PSAoc2l6
ZW9mKEpTUm9wZVN0cmluZykgKyBzaXplb2YoSlNTdHJpbmcpICogMikpCi0gICAgICAgIHJldHVy
biBKU1JvcGVTdHJpbmc6OmNyZWF0ZSgqdm0sIGpzU3RyaW5nKHZtLCB1MSksIGpzU3RyaW5nKHZt
LCB1MiksIGpzU3RyaW5nKHZtLCB1MykpOworICAgICAgICByZXR1cm4gSlNSb3BlU3RyaW5nOjpj
cmVhdGUodm0sIGpzU3RyaW5nKHZtLCB1MSksIGpzU3RyaW5nKHZtLCB1MiksIGpzU3RyaW5nKHZt
LCB1MykpOwogCiAgICAgU3RyaW5nIG5ld1N0cmluZyA9IHRyeU1ha2VTdHJpbmcodTEsIHUyLCB1
Myk7CiAgICAgaWYgKCFuZXdTdHJpbmcpIHsKICAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9y
KGV4ZWMsIHNjb3BlKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQotICAgIHJldHVy
biBKU1N0cmluZzo6Y3JlYXRlKCp2bSwgbmV3U3RyaW5nLnJlbGVhc2VJbXBsKCkucmVsZWFzZU5v
bk51bGwoKSk7CisgICAgcmV0dXJuIEpTU3RyaW5nOjpjcmVhdGUodm0sIG5ld1N0cmluZy5yZWxl
YXNlSW1wbCgpLnJlbGVhc2VOb25OdWxsKCkpOwogfQogCiBBTFdBWVNfSU5MSU5FIEpTVmFsdWUg
anNTdHJpbmdGcm9tUmVnaXN0ZXJBcnJheShFeGVjU3RhdGUqIGV4ZWMsIFJlZ2lzdGVyKiBzdHJp
bmdzLCB1bnNpZ25lZCBjb3VudCkKIHsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSgqdm0pOwotICAgIEpTUm9wZVN0cmluZzo6
Um9wZUJ1aWxkZXI8UmVjb3JkT3ZlcmZsb3c+IHJvcGVCdWlsZGVyKCp2bSk7CisgICAgVk0mIHZt
ID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CisgICAgSlNSb3BlU3RyaW5nOjpSb3BlQnVpbGRlcjxSZWNvcmRPdmVyZmxvdz4gcm9wZUJ1aWxk
ZXIodm0pOwogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKICAg
ICAgICAgSlNWYWx1ZSB2ID0gc3RyaW5nc1stc3RhdGljX2Nhc3Q8aW50PihpKV0uanNWYWx1ZSgp
OwpAQCAtMjQxLDkgKzI0MSw5IEBAIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBqc1N0cmluZ0Zyb21S
ZWdpc3QKIAogQUxXQVlTX0lOTElORSBKU1ZhbHVlIGpzU3RyaW5nRnJvbUFyZ3VtZW50cyhFeGVj
U3RhdGUqIGV4ZWMsIEpTVmFsdWUgdGhpc1ZhbHVlKQogewotICAgIFZNKiB2bSA9ICZleGVjLT52
bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7Ci0gICAgSlNS
b3BlU3RyaW5nOjpSb3BlQnVpbGRlcjxSZWNvcmRPdmVyZmxvdz4gcm9wZUJ1aWxkZXIoKnZtKTsK
KyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKKyAgICBKU1JvcGVTdHJpbmc6OlJvcGVCdWlsZGVyPFJlY29yZE92ZXJmbG93
PiByb3BlQnVpbGRlcih2bSk7CiAgICAgSlNTdHJpbmcqIHN0ciA9IHRoaXNWYWx1ZS50b1N0cmlu
ZyhleGVjKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgIHJvcGVC
dWlsZGVyLmFwcGVuZChzdHIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
UHJvZ3JhbUV4ZWN1dGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1Byb2dyYW1FeGVjdXRhYmxlLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvZ3JhbUV4ZWN1dGFibGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNzksNyArMTc5LDcgQEAgSlNPYmplY3QqIFByb2dyYW1FeGVjdXRhYmxlOjpp
bml0aWFsaXplRwogCiAgICAgZm9yIChhdXRvJiBlbnRyeSA6IHZhcmlhYmxlRGVjbGFyYXRpb25z
KSB7CiAgICAgICAgIEFTU0VSVChlbnRyeS52YWx1ZS5pc1ZhcigpKTsKLSAgICAgICAgZ2xvYmFs
T2JqZWN0LT5hZGRWYXIoY2FsbEZyYW1lLCBJZGVudGlmaWVyOjpmcm9tVWlkKCZ2bSwgZW50cnku
a2V5LmdldCgpKSk7CisgICAgICAgIGdsb2JhbE9iamVjdC0+YWRkVmFyKGNhbGxGcmFtZSwgSWRl
bnRpZmllcjo6ZnJvbVVpZCh2bSwgZW50cnkua2V5LmdldCgpKSk7CiAgICAgICAgIHRocm93U2Nv
cGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1Byb21pc2VEZWZlcnJlZFRpbWVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9taXNlRGVmZXJyZWRUaW1lci5jcHAJKHJldmlz
aW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb21pc2VEZWZl
cnJlZFRpbWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTctMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTctMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM5LDcgKzM5LDcgQEAgc3RhdGljIGNv
bnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogfQogCiBQcm9taXNlRGVmZXJyZWRUaW1lcjo6UHJv
bWlzZURlZmVycmVkVGltZXIoVk0mIHZtKQotICAgIDogQmFzZSgmdm0pCisgICAgOiBCYXNlKHZt
KQogewogfQogCkBAIC0xMjEsMTMgKzEyMSwxMyBAQCB2b2lkIFByb21pc2VEZWZlcnJlZFRpbWVy
OjphZGRQZW5kaW5nUHJvCiAKIGJvb2wgUHJvbWlzZURlZmVycmVkVGltZXI6Omhhc1BlbmRpbmdQ
cm9taXNlKEpTUHJvbWlzZURlZmVycmVkKiB0aWNrZXQpCiB7Ci0gICAgQVNTRVJUKHRpY2tldC0+
dm0oKS0+Y3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7CisgICAgQVNTRVJUKHRpY2tl
dC0+dm0oKS5jdXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsKICAgICByZXR1cm4gbV9w
ZW5kaW5nUHJvbWlzZXMuY29udGFpbnModGlja2V0KTsKIH0KIAogYm9vbCBQcm9taXNlRGVmZXJy
ZWRUaW1lcjo6aGFzRGVwZW5kYW5jeUluUGVuZGluZ1Byb21pc2UoSlNQcm9taXNlRGVmZXJyZWQq
IHRpY2tldCwgSlNDZWxsKiBkZXBlbmRlbmN5KQogewotICAgIEFTU0VSVCh0aWNrZXQtPnZtKCkt
PmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOworICAgIEFTU0VSVCh0aWNrZXQtPnZt
KCkuY3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7CiAgICAgQVNTRVJUKG1fcGVuZGlu
Z1Byb21pc2VzLmNvbnRhaW5zKHRpY2tldCkpOwogCiAgICAgYXV0byByZXN1bHQgPSBtX3BlbmRp
bmdQcm9taXNlcy5nZXQodGlja2V0KTsKQEAgLTEzNiw3ICsxMzYsNyBAQCBib29sIFByb21pc2VE
ZWZlcnJlZFRpbWVyOjpoYXNEZXBlbmRhbmN5CiAKIGJvb2wgUHJvbWlzZURlZmVycmVkVGltZXI6
OmNhbmNlbFBlbmRpbmdQcm9taXNlKEpTUHJvbWlzZURlZmVycmVkKiB0aWNrZXQpCiB7Ci0gICAg
QVNTRVJUKHRpY2tldC0+dm0oKS0+Y3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7Cisg
ICAgQVNTRVJUKHRpY2tldC0+dm0oKS5jdXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsK
ICAgICBib29sIHJlc3VsdCA9IG1fcGVuZGluZ1Byb21pc2VzLnJlbW92ZSh0aWNrZXQpOwogCiAg
ICAgaWYgKHJlc3VsdCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3Bl
cnR5TmFtZUFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUHJvcGVydHlOYW1lQXJyYXkuaAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlOYW1lQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA4LCAyMDEyIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxOSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAt
NDcsNyArNDcsNyBAQCBwcml2YXRlOgogLy8gRklYTUU6IFJlbmFtZSB0byBQcm9wZXJ0eU5hbWVB
cnJheUJ1aWxkZXIuCiBjbGFzcyBQcm9wZXJ0eU5hbWVBcnJheSB7CiBwdWJsaWM6Ci0gICAgUHJv
cGVydHlOYW1lQXJyYXkoVk0qIHZtLCBQcm9wZXJ0eU5hbWVNb2RlIHByb3BlcnR5TmFtZU1vZGUs
IFByaXZhdGVTeW1ib2xNb2RlIHByaXZhdGVTeW1ib2xNb2RlKQorICAgIFByb3BlcnR5TmFtZUFy
cmF5KFZNJiB2bSwgUHJvcGVydHlOYW1lTW9kZSBwcm9wZXJ0eU5hbWVNb2RlLCBQcml2YXRlU3lt
Ym9sTW9kZSBwcml2YXRlU3ltYm9sTW9kZSkKICAgICAgICAgOiBtX2RhdGEoUHJvcGVydHlOYW1l
QXJyYXlEYXRhOjpjcmVhdGUoKSkKICAgICAgICAgLCBtX3ZtKHZtKQogICAgICAgICAsIG1fcHJv
cGVydHlOYW1lTW9kZShwcm9wZXJ0eU5hbWVNb2RlKQpAQCAtNTUsNyArNTUsNyBAQCBwdWJsaWM6
CiAgICAgewogICAgIH0KIAotICAgIFZNKiB2bSgpIHsgcmV0dXJuIG1fdm07IH0KKyAgICBWTSYg
dm0oKSB7IHJldHVybiBtX3ZtOyB9CiAKICAgICB2b2lkIGFkZCh1aW50MzJfdCBpbmRleCkKICAg
ICB7CkBAIC05MSw3ICs5MSw3IEBAIHByaXZhdGU6CiAKICAgICBSZWZQdHI8UHJvcGVydHlOYW1l
QXJyYXlEYXRhPiBtX2RhdGE7CiAgICAgSGFzaFNldDxVbmlxdWVkU3RyaW5nSW1wbCo+IG1fc2V0
OwotICAgIFZNKiBtX3ZtOworICAgIFZNJiBtX3ZtOwogICAgIFByb3BlcnR5TmFtZU1vZGUgbV9w
cm9wZXJ0eU5hbWVNb2RlOwogICAgIFByaXZhdGVTeW1ib2xNb2RlIG1fcHJpdmF0ZVN5bWJvbE1v
ZGU7CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlTbG90
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlT
bG90LmgJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1Byb3BlcnR5U2xvdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqICBD
b3B5cmlnaHQgKEMpIDIwMDUtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiAgQ29weXJpZ2h0IChDKSAyMDA1LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTQxNiwxMyArNDE2LDE0IEBAIEFMV0FZU19JTkxJ
TkUgSlNWYWx1ZSBQcm9wZXJ0eVNsb3Q6OmdldFYKIAogQUxXQVlTX0lOTElORSBKU1ZhbHVlIFBy
b3BlcnR5U2xvdDo6Z2V0VmFsdWUoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5h
bWUpIGNvbnN0CiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBpZiAobV9wcm9wZXJ0
eVR5cGUgPT0gVHlwZVZhbHVlKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZGVjb2RlKG1fZGF0
YS52YWx1ZSk7CiAgICAgaWYgKG1fcHJvcGVydHlUeXBlID09IFR5cGVHZXR0ZXIpCiAgICAgICAg
IHJldHVybiBmdW5jdGlvbkdldHRlcihleGVjKTsKICAgICBpZiAobV9wcm9wZXJ0eVR5cGUgPT0g
VHlwZUN1c3RvbUFjY2Vzc29yKQotICAgICAgICByZXR1cm4gY3VzdG9tQWNjZXNzb3JHZXR0ZXIo
ZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBwcm9wZXJ0eU5hbWUpKTsKLSAgICByZXR1cm4g
Y3VzdG9tR2V0dGVyKGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgcHJvcGVydHlOYW1lKSk7
CisgICAgICAgIHJldHVybiBjdXN0b21BY2Nlc3NvckdldHRlcihleGVjLCBJZGVudGlmaWVyOjpm
cm9tKHZtLCBwcm9wZXJ0eU5hbWUpKTsKKyAgICByZXR1cm4gY3VzdG9tR2V0dGVyKGV4ZWMsIElk
ZW50aWZpZXI6OmZyb20odm0sIHByb3BlcnR5TmFtZSkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBK
U0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5T2JqZWN0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eU9iamVjdC5j
cHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1By
b3h5T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY2LDcgKzE2Niw3IEBAIHN0YXRpYyBK
U1ZhbHVlIHBlcmZvcm1Qcm94eUdldChFeGVjU3RhdGUKIAogICAgIE1hcmtlZEFyZ3VtZW50QnVm
ZmVyIGFyZ3VtZW50czsKICAgICBhcmd1bWVudHMuYXBwZW5kKHRhcmdldCk7Ci0gICAgYXJndW1l
bnRzLmFwcGVuZChpZGVudGlmaWVyVG9TYWZlUHVibGljSlNWYWx1ZSh2bSwgSWRlbnRpZmllcjo6
ZnJvbVVpZCgmdm0sIHByb3BlcnR5TmFtZS51aWQoKSkpKTsKKyAgICBhcmd1bWVudHMuYXBwZW5k
KGlkZW50aWZpZXJUb1NhZmVQdWJsaWNKU1ZhbHVlKHZtLCBJZGVudGlmaWVyOjpmcm9tVWlkKHZt
LCBwcm9wZXJ0eU5hbWUudWlkKCkpKSk7CiAgICAgYXJndW1lbnRzLmFwcGVuZChyZWNlaXZlcik7
CiAgICAgQVNTRVJUKCFhcmd1bWVudHMuaGFzT3ZlcmZsb3dlZCgpKTsKICAgICBKU1ZhbHVlIHRy
YXBSZXN1bHQgPSBjYWxsKGV4ZWMsIGdldEhhbmRsZXIsIGNhbGxUeXBlLCBjYWxsRGF0YSwgaGFu
ZGxlciwgYXJndW1lbnRzKTsKQEAgLTIzOCw3ICsyMzgsNyBAQCBib29sIFByb3h5T2JqZWN0Ojpw
ZXJmb3JtSW50ZXJuYWxNZXRob2RHCiAKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmd1bWVu
dHM7CiAgICAgYXJndW1lbnRzLmFwcGVuZCh0YXJnZXQpOwotICAgIGFyZ3VtZW50cy5hcHBlbmQo
aWRlbnRpZmllclRvU2FmZVB1YmxpY0pTVmFsdWUodm0sIElkZW50aWZpZXI6OmZyb21VaWQoJnZt
LCBwcm9wZXJ0eU5hbWUudWlkKCkpKSk7CisgICAgYXJndW1lbnRzLmFwcGVuZChpZGVudGlmaWVy
VG9TYWZlUHVibGljSlNWYWx1ZSh2bSwgSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgcHJvcGVydHlO
YW1lLnVpZCgpKSkpOwogICAgIEFTU0VSVCghYXJndW1lbnRzLmhhc092ZXJmbG93ZWQoKSk7CiAg
ICAgSlNWYWx1ZSB0cmFwUmVzdWx0ID0gY2FsbChleGVjLCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3JNZXRob2QsIGNhbGxUeXBlLCBjYWxsRGF0YSwgaGFuZGxlciwgYXJndW1lbnRzKTsKICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7CkBAIC0zNDcsNyArMzQ3LDcgQEAgYm9v
bCBQcm94eU9iamVjdDo6cGVyZm9ybUhhc1Byb3BlcnR5KEV4ZQogCiAgICAgTWFya2VkQXJndW1l
bnRCdWZmZXIgYXJndW1lbnRzOwogICAgIGFyZ3VtZW50cy5hcHBlbmQodGFyZ2V0KTsKLSAgICBh
cmd1bWVudHMuYXBwZW5kKGlkZW50aWZpZXJUb1NhZmVQdWJsaWNKU1ZhbHVlKHZtLCBJZGVudGlm
aWVyOjpmcm9tVWlkKCZ2bSwgcHJvcGVydHlOYW1lLnVpZCgpKSkpOworICAgIGFyZ3VtZW50cy5h
cHBlbmQoaWRlbnRpZmllclRvU2FmZVB1YmxpY0pTVmFsdWUodm0sIElkZW50aWZpZXI6OmZyb21V
aWQodm0sIHByb3BlcnR5TmFtZS51aWQoKSkpKTsKICAgICBBU1NFUlQoIWFyZ3VtZW50cy5oYXNP
dmVyZmxvd2VkKCkpOwogICAgIEpTVmFsdWUgdHJhcFJlc3VsdCA9IGNhbGwoZXhlYywgaGFzTWV0
aG9kLCBjYWxsVHlwZSwgY2FsbERhdGEsIGhhbmRsZXIsIGFyZ3VtZW50cyk7CiAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwpAQCAtNDEzLDggKzQxMyw5IEBAIGJvb2wgUHJv
eHlPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdChKU08KIAogYm9vbCBQcm94eU9iamVjdDo6Z2V0
T3duUHJvcGVydHlTbG90QnlJbmRleChKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMs
IHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQogeworICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CiAgICAgUHJveHlPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8UHJv
eHlPYmplY3QqPihvYmplY3QpOwotICAgIElkZW50aWZpZXIgaWRlbnQgPSBJZGVudGlmaWVyOjpm
cm9tKGV4ZWMsIHByb3BlcnR5TmFtZSk7IAorICAgIElkZW50aWZpZXIgaWRlbnQgPSBJZGVudGlm
aWVyOjpmcm9tKHZtLCBwcm9wZXJ0eU5hbWUpOwogICAgIHJldHVybiB0aGlzT2JqZWN0LT5nZXRP
d25Qcm9wZXJ0eVNsb3RDb21tb24oZXhlYywgaWRlbnQuaW1wbCgpLCBzbG90KTsKIH0KIApAQCAt
NDUwLDcgKzQ1MSw3IEBAIGJvb2wgUHJveHlPYmplY3Q6OnBlcmZvcm1QdXQoRXhlY1N0YXRlKiAK
IAogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3VtZW50czsKICAgICBhcmd1bWVudHMuYXBw
ZW5kKHRhcmdldCk7Ci0gICAgYXJndW1lbnRzLmFwcGVuZChpZGVudGlmaWVyVG9TYWZlUHVibGlj
SlNWYWx1ZSh2bSwgSWRlbnRpZmllcjo6ZnJvbVVpZCgmdm0sIHByb3BlcnR5TmFtZS51aWQoKSkp
KTsKKyAgICBhcmd1bWVudHMuYXBwZW5kKGlkZW50aWZpZXJUb1NhZmVQdWJsaWNKU1ZhbHVlKHZt
LCBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCBwcm9wZXJ0eU5hbWUudWlkKCkpKSk7CiAgICAgYXJn
dW1lbnRzLmFwcGVuZChwdXRWYWx1ZSk7CiAgICAgYXJndW1lbnRzLmFwcGVuZCh0aGlzVmFsdWUp
OwogICAgIEFTU0VSVCghYXJndW1lbnRzLmhhc092ZXJmbG93ZWQoKSk7CkBAIC00OTgsNyArNDk5
LDcgQEAgYm9vbCBQcm94eU9iamVjdDo6cHV0QnlJbmRleENvbW1vbihFeGVjUwogewogICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwotICAgIElkZW50aWZpZXIgaWRlbnQgPSBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIHByb3Bl
cnR5TmFtZSk7CisgICAgSWRlbnRpZmllciBpZGVudCA9IElkZW50aWZpZXI6OmZyb20odm0sIHBy
b3BlcnR5TmFtZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwogICAg
IGF1dG8gcGVyZm9ybURlZmF1bHRQdXQgPSBbJl0gKCkgewogICAgICAgICBKU09iamVjdCogdGFy
Z2V0ID0gdGhpcy0+dGFyZ2V0KCk7CkBAIC02NTMsNyArNjU0LDcgQEAgYm9vbCBQcm94eU9iamVj
dDo6cGVyZm9ybURlbGV0ZShFeGVjU3RhdAogCiAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJn
dW1lbnRzOwogICAgIGFyZ3VtZW50cy5hcHBlbmQodGFyZ2V0KTsKLSAgICBhcmd1bWVudHMuYXBw
ZW5kKGlkZW50aWZpZXJUb1NhZmVQdWJsaWNKU1ZhbHVlKHZtLCBJZGVudGlmaWVyOjpmcm9tVWlk
KCZ2bSwgcHJvcGVydHlOYW1lLnVpZCgpKSkpOworICAgIGFyZ3VtZW50cy5hcHBlbmQoaWRlbnRp
ZmllclRvU2FmZVB1YmxpY0pTVmFsdWUodm0sIElkZW50aWZpZXI6OmZyb21VaWQodm0sIHByb3Bl
cnR5TmFtZS51aWQoKSkpKTsKICAgICBBU1NFUlQoIWFyZ3VtZW50cy5oYXNPdmVyZmxvd2VkKCkp
OwogICAgIEpTVmFsdWUgdHJhcFJlc3VsdCA9IGNhbGwoZXhlYywgZGVsZXRlUHJvcGVydHlNZXRo
b2QsIGNhbGxUeXBlLCBjYWxsRGF0YSwgaGFuZGxlciwgYXJndW1lbnRzKTsKICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7CkBAIC02OTcsMTEgKzY5OCwxMiBAQCBib29sIFBy
b3h5T2JqZWN0OjpkZWxldGVQcm9wZXJ0eShKU0NlbGwqCiAKIGJvb2wgUHJveHlPYmplY3Q6OmRl
bGV0ZVByb3BlcnR5QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWdu
ZWQgcHJvcGVydHlOYW1lKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgUHJveHlP
YmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8UHJveHlPYmplY3QqPihjZWxsKTsKLSAgICBJZGVu
dGlmaWVyIGlkZW50ID0gSWRlbnRpZmllcjo6ZnJvbShleGVjLCBwcm9wZXJ0eU5hbWUpOyAKKyAg
ICBJZGVudGlmaWVyIGlkZW50ID0gSWRlbnRpZmllcjo6ZnJvbSh2bSwgcHJvcGVydHlOYW1lKTsK
ICAgICBhdXRvIHBlcmZvcm1EZWZhdWx0RGVsZXRlID0gWyZdICgpIC0+IGJvb2wgewogICAgICAg
ICBKU09iamVjdCogdGFyZ2V0ID0gdGhpc09iamVjdC0+dGFyZ2V0KCk7Ci0gICAgICAgIHJldHVy
biB0YXJnZXQtPm1ldGhvZFRhYmxlKGV4ZWMtPnZtKCkpLT5kZWxldGVQcm9wZXJ0eUJ5SW5kZXgo
dGFyZ2V0LCBleGVjLCBwcm9wZXJ0eU5hbWUpOworICAgICAgICByZXR1cm4gdGFyZ2V0LT5tZXRo
b2RUYWJsZSh2bSktPmRlbGV0ZVByb3BlcnR5QnlJbmRleCh0YXJnZXQsIGV4ZWMsIHByb3BlcnR5
TmFtZSk7CiAgICAgfTsKICAgICByZXR1cm4gdGhpc09iamVjdC0+cGVyZm9ybURlbGV0ZShleGVj
LCBpZGVudC5pbXBsKCksIHBlcmZvcm1EZWZhdWx0RGVsZXRlKTsKIH0KQEAgLTg1NSw3ICs4NTcs
NyBAQCBib29sIFByb3h5T2JqZWN0OjpwZXJmb3JtRGVmaW5lT3duUHJvcGVyCiAKICAgICBNYXJr
ZWRBcmd1bWVudEJ1ZmZlciBhcmd1bWVudHM7CiAgICAgYXJndW1lbnRzLmFwcGVuZCh0YXJnZXQp
OwotICAgIGFyZ3VtZW50cy5hcHBlbmQoaWRlbnRpZmllclRvU2FmZVB1YmxpY0pTVmFsdWUodm0s
IElkZW50aWZpZXI6OmZyb21VaWQoJnZtLCBwcm9wZXJ0eU5hbWUudWlkKCkpKSk7CisgICAgYXJn
dW1lbnRzLmFwcGVuZChpZGVudGlmaWVyVG9TYWZlUHVibGljSlNWYWx1ZSh2bSwgSWRlbnRpZmll
cjo6ZnJvbVVpZCh2bSwgcHJvcGVydHlOYW1lLnVpZCgpKSkpOwogICAgIGFyZ3VtZW50cy5hcHBl
bmQoZGVzY3JpcHRvck9iamVjdCk7CiAgICAgQVNTRVJUKCFhcmd1bWVudHMuaGFzT3ZlcmZsb3dl
ZCgpKTsKICAgICBKU1ZhbHVlIHRyYXBSZXN1bHQgPSBjYWxsKGV4ZWMsIGRlZmluZVByb3BlcnR5
TWV0aG9kLCBjYWxsVHlwZSwgY2FsbERhdGEsIGhhbmRsZXIsIGFyZ3VtZW50cyk7CkBAIC05NTIs
NyArOTU0LDcgQEAgdm9pZCBQcm94eU9iamVjdDo6cGVyZm9ybUdldE93blByb3BlcnR5TgogICAg
IEpTVmFsdWUgYXJyYXlMaWtlT2JqZWN0ID0gY2FsbChleGVjLCBvd25LZXlzTWV0aG9kLCBjYWxs
VHlwZSwgY2FsbERhdGEsIGhhbmRsZXIsIGFyZ3VtZW50cyk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgdm9pZCgpKTsKIAotICAgIFByb3BlcnR5TmFtZUFycmF5IHRyYXBSZXN1bHQo
JnZtLCBwcm9wZXJ0eU5hbWVzLnByb3BlcnR5TmFtZU1vZGUoKSwgcHJvcGVydHlOYW1lcy5wcml2
YXRlU3ltYm9sTW9kZSgpKTsKKyAgICBQcm9wZXJ0eU5hbWVBcnJheSB0cmFwUmVzdWx0KHZtLCBw
cm9wZXJ0eU5hbWVzLnByb3BlcnR5TmFtZU1vZGUoKSwgcHJvcGVydHlOYW1lcy5wcml2YXRlU3lt
Ym9sTW9kZSgpKTsKICAgICBIYXNoU2V0PFVuaXF1ZWRTdHJpbmdJbXBsKj4gdW5jaGVja2VkUmVz
dWx0S2V5czsKICAgICB7CiAgICAgICAgIEhhc2hTZXQ8UmVmUHRyPFVuaXF1ZWRTdHJpbmdJbXBs
Pj4gc2VlbktleXM7CkBAIC0xMDA2LDcgKzEwMDgsNyBAQCB2b2lkIFByb3h5T2JqZWN0OjpwZXJm
b3JtR2V0T3duUHJvcGVydHlOCiAgICAgYm9vbCB0YXJnZXRJc0V4ZW5zaWJsZSA9IHRhcmdldC0+
aXNFeHRlbnNpYmxlKGV4ZWMpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQo
KSk7CiAKLSAgICBQcm9wZXJ0eU5hbWVBcnJheSB0YXJnZXRLZXlzKCZ2bSwgcHJvcGVydHlOYW1l
cy5wcm9wZXJ0eU5hbWVNb2RlKCksIHByb3BlcnR5TmFtZXMucHJpdmF0ZVN5bWJvbE1vZGUoKSk7
CisgICAgUHJvcGVydHlOYW1lQXJyYXkgdGFyZ2V0S2V5cyh2bSwgcHJvcGVydHlOYW1lcy5wcm9w
ZXJ0eU5hbWVNb2RlKCksIHByb3BlcnR5TmFtZXMucHJpdmF0ZVN5bWJvbE1vZGUoKSk7CiAgICAg
dGFyZ2V0LT5tZXRob2RUYWJsZSh2bSktPmdldE93blByb3BlcnR5TmFtZXModGFyZ2V0LCBleGVj
LCB0YXJnZXRLZXlzLCBlbnVtZXJhdGlvbk1vZGUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIHZvaWQoKSk7CiAgICAgVmVjdG9yPFVuaXF1ZWRTdHJpbmdJbXBsKj4gdGFyZ2V0Q29u
ZmlndXJhYmxlS2V5czsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4
cEdsb2JhbERhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1JlZ0V4cEdsb2JhbERhdGEuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBHbG9iYWxEYXRhLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTEsNyArNTEsNyBAQCBKU1ZhbHVlIFJlZ0V4cEdsb2JhbERhdGE6OmdldEJhY2tyZWYoRXhl
CiAgICAgICAgIGlmICghcmVzdWx0LmlzVW5kZWZpbmVkKCkpCiAgICAgICAgICAgICByZXR1cm4g
cmVzdWx0OwogICAgIH0KLSAgICByZXR1cm4ganNFbXB0eVN0cmluZygmdm0pOworICAgIHJldHVy
biBqc0VtcHR5U3RyaW5nKHZtKTsKIH0KIAogSlNWYWx1ZSBSZWdFeHBHbG9iYWxEYXRhOjpnZXRM
YXN0UGFyZW4oRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogb3duZXIpCkBAIC03MCw3
ICs3MCw3IEBAIEpTVmFsdWUgUmVnRXhwR2xvYmFsRGF0YTo6Z2V0TGFzdFBhcmVuKEUKICAgICAg
ICAgaWYgKCFyZXN1bHQuaXNVbmRlZmluZWQoKSkKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7
CiAgICAgfQotICAgIHJldHVybiBqc0VtcHR5U3RyaW5nKCZ2bSk7CisgICAgcmV0dXJuIGpzRW1w
dHlTdHJpbmcodm0pOwogfQogCiBKU1ZhbHVlIFJlZ0V4cEdsb2JhbERhdGE6OmdldExlZnRDb250
ZXh0KEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIG93bmVyKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwTWF0Y2hlc0FycmF5LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBNYXRjaGVzQXJyYXkuY3Bw
CShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdF
eHBNYXRjaGVzQXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDcsNyArNDcsNyBAQCBKU0Fy
cmF5KiBjcmVhdGVFbXB0eVJlZ0V4cE1hdGNoZXNBcnJheShKCiAgICAgICAgIC8vIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjk3ODYKICAgICAgICAgUkVMRUFTRV9B
U1NFUlQoYXJyYXkpOwogCi0gICAgICAgIGFycmF5LT5pbml0aWFsaXplSW5kZXhXaXRob3V0QmFy
cmllcihzY29wZSwgMCwganNFbXB0eVN0cmluZygmdm0pKTsKKyAgICAgICAgYXJyYXktPmluaXRp
YWxpemVJbmRleFdpdGhvdXRCYXJyaWVyKHNjb3BlLCAwLCBqc0VtcHR5U3RyaW5nKHZtKSk7CiAg
ICAgICAgIAogICAgICAgICBpZiAodW5zaWduZWQgbnVtU3VicGF0dGVybnMgPSByZWdFeHAtPm51
bVN1YnBhdHRlcm5zKCkpIHsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPD0g
bnVtU3VicGF0dGVybnM7ICsraSkKQEAgLTU4LDcgKzU4LDcgQEAgSlNBcnJheSogY3JlYXRlRW1w
dHlSZWdFeHBNYXRjaGVzQXJyYXkoSgogICAgICAgICBhcnJheSA9IHRyeUNyZWF0ZVVuaW5pdGlh
bGl6ZWRSZWdFeHBNYXRjaGVzQXJyYXkoc2NvcGUsICZkZWZlcnJhbENvbnRleHQsIGdsb2JhbE9i
amVjdC0+cmVnRXhwTWF0Y2hlc0FycmF5U3RydWN0dXJlKCksIHJlZ0V4cC0+bnVtU3VicGF0dGVy
bnMoKSArIDEpOwogICAgICAgICBSRUxFQVNFX0FTU0VSVChhcnJheSk7CiAgICAgICAgIAotICAg
ICAgICBhcnJheS0+aW5pdGlhbGl6ZUluZGV4V2l0aG91dEJhcnJpZXIoc2NvcGUsIDAsIGpzRW1w
dHlTdHJpbmcoJnZtKSwgQXJyYXlXaXRoQ29udGlndW91cyk7CisgICAgICAgIGFycmF5LT5pbml0
aWFsaXplSW5kZXhXaXRob3V0QmFycmllcihzY29wZSwgMCwganNFbXB0eVN0cmluZyh2bSksIEFy
cmF5V2l0aENvbnRpZ3VvdXMpOwogICAgICAgICAKICAgICAgICAgaWYgKHVuc2lnbmVkIG51bVN1
YnBhdHRlcm5zID0gcmVnRXhwLT5udW1TdWJwYXR0ZXJucygpKSB7CiAgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAxOyBpIDw9IG51bVN1YnBhdHRlcm5zOyArK2kpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBNYXRjaGVzQXJyYXkuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBNYXRjaGVzQXJyYXkuaAkocmV2
aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwTWF0
Y2hlc0FycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogIENvcHly
aWdodCAoQykgMjAwOC0yMDE4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqICBD
b3B5cmlnaHQgKEMpIDIwMDgtMjAxOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAg
KgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCkBAIC0xNTksNyArMTU5LDcgQEAgQUxXQVlTX0lOTElORSBKU0Fy
cmF5KiBjcmVhdGVSZWdFeHBNYXRjaAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDw9
IG51bVN1YnBhdHRlcm5zOyArK2kpIHsKICAgICAgICAgICAgIFN0cmluZyBncm91cE5hbWUgPSBy
ZWdFeHAtPmdldENhcHR1cmVHcm91cE5hbWUoaSk7CiAgICAgICAgICAgICBpZiAoIWdyb3VwTmFt
ZS5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgZ3JvdXBzLT5wdXREaXJlY3Qodm0sIElkZW50
aWZpZXI6OmZyb21TdHJpbmcoJnZtLCBncm91cE5hbWUpLCBhcnJheS0+Z2V0SW5kZXhRdWlja2x5
KGkpKTsKKyAgICAgICAgICAgICAgICBncm91cHMtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZyh2bSwgZ3JvdXBOYW1lKSwgYXJyYXktPmdldEluZGV4UXVpY2tseShpKSk7CiAg
ICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIGFycmF5OwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvUmVnRXhwUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyNDkx
MjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBQcm90b3R5cGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5
OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQotICogIENvcHlyaWdodCAoQykg
MjAwMy0yMDE3IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQg
KEMpIDIwMDMtMjAxOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCkBAIC0zNDQsNyArMzQ0LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCByZWdFeHBQcm90bwogICAgIGF1dG8gZmxhZ3MgPSBmbGFnc1N0cmluZyhleGVjLCBhc09iamVj
dCh0aGlzVmFsdWUpKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNW
YWx1ZSgpKTsKIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcoZXhlYywgZmxh
Z3MuZGF0YSgpKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyh2bSwgZmxh
Z3MuZGF0YSgpKSk7CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgpAQCAt
Mzc1LDYgKzM3NSw3IEBAIGlubGluZSB2b2lkIGFwcGVuZExpbmVUZXJtaW5hdG9yRXNjYXBlPFUK
IHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgogc3RhdGljIGlubGluZSBKU1ZhbHVl
IHJlZ0V4cFByb3RvR2V0dGVyU291cmNlSW50ZXJuYWwoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBT
dHJpbmcmIHBhdHRlcm4sIGNvbnN0IENoYXJhY3RlclR5cGUqIGNoYXJhY3RlcnMsIHVuc2lnbmVk
IGxlbmd0aCkKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGJvb2wgcHJldmlvdXND
aGFyYWN0ZXJXYXNCYWNrc2xhc2ggPSBmYWxzZTsKICAgICBib29sIGluQnJhY2tldHMgPSBmYWxz
ZTsKICAgICBib29sIHNob3VsZEVzY2FwZSA9IGZhbHNlOwpAQCAtMzg1LDcgKzM4Niw3IEBAIHN0
YXRpYyBpbmxpbmUgSlNWYWx1ZSByZWdFeHBQcm90b0dldHRlclMKICAgICAvLyBzb3VyY2UgY2Fu
bm90IGV2ZXIgdmFsaWRseSBiZSAiIi4gSWYgdGhlIHNvdXJjZSBpcyBlbXB0eSwgcmV0dXJuIGEg
ZGlmZmVyZW50IFBhdHRlcm4KICAgICAvLyB0aGF0IHdvdWxkIG1hdGNoIHRoZSBzYW1lIHRoaW5n
LgogICAgIGlmICghbGVuZ3RoKQotICAgICAgICByZXR1cm4ganNOb250cml2aWFsU3RyaW5nKGV4
ZWMsICIoPzopIl9zKTsKKyAgICAgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyh2bSwgIig/
OikiX3MpOwogCiAgICAgLy8gZWFybHkgcmV0dXJuIGZvciBzdHJpbmdzIHRoYXQgZG9uJ3QgY29u
dGFpbiBhIGZvcndhcmRzIHNsYXNoIGFuZCBMaW5lVGVybWluYXRvcgogICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewpAQCAtNDE2LDcgKzQxNyw3IEBAIHN0YXRpYyBp
bmxpbmUgSlNWYWx1ZSByZWdFeHBQcm90b0dldHRlclMKICAgICB9CiAKICAgICBpZiAoIXNob3Vs
ZEVzY2FwZSkKLSAgICAgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIHBhdHRlcm4pOworICAgICAg
ICByZXR1cm4ganNTdHJpbmcodm0sIHBhdHRlcm4pOwogCiAgICAgcHJldmlvdXNDaGFyYWN0ZXJX
YXNCYWNrc2xhc2ggPSBmYWxzZTsKICAgICBpbkJyYWNrZXRzID0gZmFsc2U7CkBAIC00NTAsNyAr
NDUxLDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIHJlZ0V4cFByb3RvR2V0dGVyUwogICAgICAg
ICAgICAgcHJldmlvdXNDaGFyYWN0ZXJXYXNCYWNrc2xhc2ggPSBjaCA9PSAnXFwnOwogICAgIH0K
IAotICAgIHJldHVybiBqc1N0cmluZyhleGVjLCByZXN1bHQudG9TdHJpbmcoKSk7CisgICAgcmV0
dXJuIGpzU3RyaW5nKHZtLCByZXN1bHQudG9TdHJpbmcoKSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgcmVnRXhwUHJvdG9HZXR0ZXJTb3VyY2UoRXhlY1N0YXRlKiBleGVjKQpA
QCAtNDYyLDcgKzQ2Myw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVnRXhwUHJv
dG8KICAgICBhdXRvKiByZWdleHAgPSBqc0R5bmFtaWNDYXN0PFJlZ0V4cE9iamVjdCo+KHZtLCB0
aGlzVmFsdWUpOwogICAgIGlmIChVTkxJS0VMWSghcmVnZXhwKSkgewogICAgICAgICBpZiAodGhp
c1ZhbHVlLmluaGVyaXRzPFJlZ0V4cFByb3RvdHlwZT4odm0pKQotICAgICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyhleGVjLCAiKD86KSJfcykpOworICAgICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyh2bSwgIig/OikiX3MpKTsKICAgICAgICAg
cmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUsICJUaGUgUmVnRXhwLnByb3RvdHlw
ZS5zb3VyY2UgZ2V0dGVyIGNhbiBvbmx5IGJlIGNhbGxlZCBvbiBhIFJlZ0V4cCBvYmplY3QiX3Mp
OwogICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwU3Ry
aW5nSXRlcmF0b3JQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1JlZ0V4cFN0cmluZ0l0ZXJhdG9yUHJvdG90eXBlLmNwcAkocmV2aXNpb24g
MjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwU3RyaW5nSXRl
cmF0b3JQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAq
IENvcHlyaWdodCAoQykgMjAxOSBBbGV4ZXkgU2h2YXlrYSA8c2h2YWlrYWxlc2hAZ21haWwuY29t
Pi4KKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQzLDcgKzQ0LDcgQEAgdm9pZCBS
ZWdFeHBTdHJpbmdJdGVyYXRvclByb3RvdHlwZTo6ZmluaQogewogICAgIEJhc2U6OmZpbmlzaENy
ZWF0aW9uKHZtKTsKICAgICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOwotICAgIHB1dERp
cmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT50b1N0cmluZ1RhZ1N5
bWJvbCwganNTdHJpbmcoJnZtLCAiUmVnRXhwIFN0cmluZyBJdGVyYXRvciIpLCBQcm9wZXJ0eUF0
dHJpYnV0ZTo6RG9udEVudW0gfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpOworICAgIHB1
dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT50b1N0cmluZ1Rh
Z1N5bWJvbCwganNTdHJpbmcodm0sICJSZWdFeHAgU3RyaW5nIEl0ZXJhdG9yIiksIFByb3BlcnR5
QXR0cmlidXRlOjpEb250RW51bSB8IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSk7CiAgICAg
SlNDX0JVSUxUSU5fRlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lUSU9OKHZtLnByb3BlcnR5TmFtZXMt
Pm5leHQsIHJlZ0V4cFN0cmluZ0l0ZXJhdG9yUHJvdG90eXBlTmV4dENvZGVHZW5lcmF0b3IsIHN0
YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKIH0KIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9m
aWxlci5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NDksNyArNTQ5LDcg
QEAgdm9pZCBTYW1wbGluZ1Byb2ZpbGVyOjpwcm9jZXNzVW52ZXJpZmllZAogICAgICAgICAgICAg
fTsKIAogICAgICAgICAgICAgaWYgKGNhbGxlZUNlbGwtPnR5cGUoKSAhPSBKU0Z1bmN0aW9uVHlw
ZSkgewotICAgICAgICAgICAgICAgIGlmIChKU09iamVjdCogb2JqZWN0ID0ganNEeW5hbWljQ2Fz
dDxKU09iamVjdCo+KCpjYWxsZWVDZWxsLT52bSgpLCBjYWxsZWVDZWxsKSkKKyAgICAgICAgICAg
ICAgICBpZiAoSlNPYmplY3QqIG9iamVjdCA9IGpzRHluYW1pY0Nhc3Q8SlNPYmplY3QqPihjYWxs
ZWVDZWxsLT52bSgpLCBjYWxsZWVDZWxsKSkKICAgICAgICAgICAgICAgICAgICAgYWRkQ2FsbGVl
KG9iamVjdCk7CiAKICAgICAgICAgICAgICAgICBpZiAoIWFscmVhZHlIYXNFeGVjdXRhYmxlKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NyaXB0RXhlY3V0YWJsZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NyaXB0RXhlY3V0
YWJsZS5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1NjcmlwdEV4ZWN1dGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTMsNyArMTEzLDcg
QEAgdm9pZCBTY3JpcHRFeGVjdXRhYmxlOjpjbGVhckNvZGUoSXNvQ2VsbAogCiB2b2lkIFNjcmlw
dEV4ZWN1dGFibGU6Omluc3RhbGxDb2RlKENvZGVCbG9jayogY29kZUJsb2NrKQogewotICAgIGlu
c3RhbGxDb2RlKCpjb2RlQmxvY2stPnZtKCksIGNvZGVCbG9jaywgY29kZUJsb2NrLT5jb2RlVHlw
ZSgpLCBjb2RlQmxvY2stPnNwZWNpYWxpemF0aW9uS2luZCgpKTsKKyAgICBpbnN0YWxsQ29kZShj
b2RlQmxvY2stPnZtKCksIGNvZGVCbG9jaywgY29kZUJsb2NrLT5jb2RlVHlwZSgpLCBjb2RlQmxv
Y2stPnNwZWNpYWxpemF0aW9uS2luZCgpKTsKIH0KIAogdm9pZCBTY3JpcHRFeGVjdXRhYmxlOjpp
bnN0YWxsQ29kZShWTSYgdm0sIENvZGVCbG9jayogZ2VuZXJpY0NvZGVCbG9jaywgQ29kZVR5cGUg
Y29kZVR5cGUsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKQEAgLTI0OSwxNiArMjQ5LDE2
IEBAIGJvb2wgU2NyaXB0RXhlY3V0YWJsZTo6aGFzQ2xlYXJhYmxlQ29kZSgKIENvZGVCbG9jayog
U2NyaXB0RXhlY3V0YWJsZTo6bmV3Q29kZUJsb2NrRm9yKAogICAgIENvZGVTcGVjaWFsaXphdGlv
bktpbmQga2luZCwgSlNGdW5jdGlvbiogZnVuY3Rpb24sIEpTU2NvcGUqIHNjb3BlLCBFeGNlcHRp
b24qJiBleGNlcHRpb24pCiB7Ci0gICAgVk0qIHZtID0gc2NvcGUtPnZtKCk7Ci0gICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSgqdm0pOworICAgIFZNJiB2bSA9IHNjb3Bl
LT52bSgpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwog
Ci0gICAgQVNTRVJUKHZtLT5oZWFwLmlzRGVmZXJyZWQoKSk7CisgICAgQVNTRVJUKHZtLmhlYXAu
aXNEZWZlcnJlZCgpKTsKICAgICBBU1NFUlQoZW5kQ29sdW1uKCkgIT0gVUlOVF9NQVgpOwogCi0g
ICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHNjb3BlLT5nbG9iYWxPYmplY3QoKnZt
KTsKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gc2NvcGUtPmdsb2JhbE9iamVj
dCh2bSk7CiAgICAgRXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7
CiAKLSAgICBpZiAoY2xhc3NJbmZvKCp2bSkgPT0gRXZhbEV4ZWN1dGFibGU6OmluZm8oKSkgewor
ICAgIGlmIChjbGFzc0luZm8odm0pID09IEV2YWxFeGVjdXRhYmxlOjppbmZvKCkpIHsKICAgICAg
ICAgRXZhbEV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBqc0Nhc3Q8RXZhbEV4ZWN1dGFibGUqPih0
aGlzKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoa2luZCA9PSBDb2RlRm9yQ2FsbCk7CiAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKCFleGVjdXRhYmxlLT5tX2V2YWxDb2RlQmxvY2spOwpAQCAtMjc1
LDcgKzI3NSw3IEBAIENvZGVCbG9jayogU2NyaXB0RXhlY3V0YWJsZTo6bmV3Q29kZUJsb2MKICAg
ICAgICAgcmV0dXJuIGNvZGVCbG9jazsKICAgICB9CiAgICAgCi0gICAgaWYgKGNsYXNzSW5mbygq
dm0pID09IFByb2dyYW1FeGVjdXRhYmxlOjppbmZvKCkpIHsKKyAgICBpZiAoY2xhc3NJbmZvKHZt
KSA9PSBQcm9ncmFtRXhlY3V0YWJsZTo6aW5mbygpKSB7CiAgICAgICAgIFByb2dyYW1FeGVjdXRh
YmxlKiBleGVjdXRhYmxlID0ganNDYXN0PFByb2dyYW1FeGVjdXRhYmxlKj4odGhpcyk7CiAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKGtpbmQgPT0gQ29kZUZvckNhbGwpOwogICAgICAgICBSRUxFQVNF
X0FTU0VSVCghZXhlY3V0YWJsZS0+bV9wcm9ncmFtQ29kZUJsb2NrKTsKQEAgLTI5Miw3ICsyOTIs
NyBAQCBDb2RlQmxvY2sqIFNjcmlwdEV4ZWN1dGFibGU6Om5ld0NvZGVCbG9jCiAgICAgICAgIHJl
dHVybiBjb2RlQmxvY2s7CiAgICAgfQogCi0gICAgaWYgKGNsYXNzSW5mbygqdm0pID09IE1vZHVs
ZVByb2dyYW1FeGVjdXRhYmxlOjppbmZvKCkpIHsKKyAgICBpZiAoY2xhc3NJbmZvKHZtKSA9PSBN
b2R1bGVQcm9ncmFtRXhlY3V0YWJsZTo6aW5mbygpKSB7CiAgICAgICAgIE1vZHVsZVByb2dyYW1F
eGVjdXRhYmxlKiBleGVjdXRhYmxlID0ganNDYXN0PE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlKj4o
dGhpcyk7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGtpbmQgPT0gQ29kZUZvckNhbGwpOwogICAg
ICAgICBSRUxFQVNFX0FTU0VSVCghZXhlY3V0YWJsZS0+bV9tb2R1bGVQcm9ncmFtQ29kZUJsb2Nr
KTsKQEAgLTMwOSw3ICszMDksNyBAQCBDb2RlQmxvY2sqIFNjcmlwdEV4ZWN1dGFibGU6Om5ld0Nv
ZGVCbG9jCiAgICAgICAgIHJldHVybiBjb2RlQmxvY2s7CiAgICAgfQogCi0gICAgUkVMRUFTRV9B
U1NFUlQoY2xhc3NJbmZvKCp2bSkgPT0gRnVuY3Rpb25FeGVjdXRhYmxlOjppbmZvKCkpOworICAg
IFJFTEVBU0VfQVNTRVJUKGNsYXNzSW5mbyh2bSkgPT0gRnVuY3Rpb25FeGVjdXRhYmxlOjppbmZv
KCkpOwogICAgIFJFTEVBU0VfQVNTRVJUKGZ1bmN0aW9uKTsKICAgICBGdW5jdGlvbkV4ZWN1dGFi
bGUqIGV4ZWN1dGFibGUgPSBqc0Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4odGhpcyk7CiAgICAg
UkVMRUFTRV9BU1NFUlQoIWV4ZWN1dGFibGUtPmNvZGVCbG9ja0ZvcihraW5kKSk7CkBAIC0zMjYs
NyArMzI2LDcgQEAgQ29kZUJsb2NrKiBTY3JpcHRFeGVjdXRhYmxlOjpuZXdDb2RlQmxvYwogICAg
IH0KICAgICBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9jayA9IAog
ICAgICAgICBleGVjdXRhYmxlLT5tX3VubGlua2VkRXhlY3V0YWJsZS0+dW5saW5rZWRDb2RlQmxv
Y2tGb3IoCi0gICAgICAgICAgICAqdm0sIGV4ZWN1dGFibGUtPnNvdXJjZSgpLCBraW5kLCBjb2Rl
R2VuZXJhdGlvbk1vZGUsIGVycm9yLCAKKyAgICAgICAgICAgIHZtLCBleGVjdXRhYmxlLT5zb3Vy
Y2UoKSwga2luZCwgY29kZUdlbmVyYXRpb25Nb2RlLCBlcnJvciwgCiAgICAgICAgICAgICBleGVj
dXRhYmxlLT5wYXJzZU1vZGUoKSk7CiAgICAgcmVjb3JkUGFyc2UoCiAgICAgICAgIGV4ZWN1dGFi
bGUtPm1fdW5saW5rZWRFeGVjdXRhYmxlLT5mZWF0dXJlcygpLCAKQEAgLTM0NSwxMyArMzQ1LDEz
IEBAIENvZGVCbG9jayogU2NyaXB0RXhlY3V0YWJsZTo6bmV3Q29kZUJsb2MKIENvZGVCbG9jayog
U2NyaXB0RXhlY3V0YWJsZTo6bmV3UmVwbGFjZW1lbnRDb2RlQmxvY2tGb3IoCiAgICAgQ29kZVNw
ZWNpYWxpemF0aW9uS2luZCBraW5kKQogewotICAgIFZNJiB2bSA9ICp0aGlzLT52bSgpOworICAg
IFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgaWYgKGNsYXNzSW5mbyh2bSkgPT0gRXZhbEV4ZWN1
dGFibGU6OmluZm8oKSkgewogICAgICAgICBSRUxFQVNFX0FTU0VSVChraW5kID09IENvZGVGb3JD
YWxsKTsKICAgICAgICAgRXZhbEV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBqc0Nhc3Q8RXZhbEV4
ZWN1dGFibGUqPih0aGlzKTsKICAgICAgICAgRXZhbENvZGVCbG9jayogYmFzZWxpbmUgPSBzdGF0
aWNfY2FzdDxFdmFsQ29kZUJsb2NrKj4oCiAgICAgICAgICAgICBleGVjdXRhYmxlLT5jb2RlQmxv
Y2soKS0+YmFzZWxpbmVWZXJzaW9uKCkpOwotICAgICAgICBFdmFsQ29kZUJsb2NrKiByZXN1bHQg
PSBFdmFsQ29kZUJsb2NrOjpjcmVhdGUoJnZtLAorICAgICAgICBFdmFsQ29kZUJsb2NrKiByZXN1
bHQgPSBFdmFsQ29kZUJsb2NrOjpjcmVhdGUodm0sCiAgICAgICAgICAgICBDb2RlQmxvY2s6OkNv
cHlQYXJzZWRCbG9jaywgKmJhc2VsaW5lKTsKICAgICAgICAgcmVzdWx0LT5zZXRBbHRlcm5hdGl2
ZSh2bSwgYmFzZWxpbmUpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwpAQCAtMzYyLDcgKzM2Miw3
IEBAIENvZGVCbG9jayogU2NyaXB0RXhlY3V0YWJsZTo6bmV3UmVwbGFjZW0KICAgICAgICAgUHJv
Z3JhbUV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBqc0Nhc3Q8UHJvZ3JhbUV4ZWN1dGFibGUqPih0
aGlzKTsKICAgICAgICAgUHJvZ3JhbUNvZGVCbG9jayogYmFzZWxpbmUgPSBzdGF0aWNfY2FzdDxQ
cm9ncmFtQ29kZUJsb2NrKj4oCiAgICAgICAgICAgICBleGVjdXRhYmxlLT5jb2RlQmxvY2soKS0+
YmFzZWxpbmVWZXJzaW9uKCkpOwotICAgICAgICBQcm9ncmFtQ29kZUJsb2NrKiByZXN1bHQgPSBQ
cm9ncmFtQ29kZUJsb2NrOjpjcmVhdGUoJnZtLAorICAgICAgICBQcm9ncmFtQ29kZUJsb2NrKiBy
ZXN1bHQgPSBQcm9ncmFtQ29kZUJsb2NrOjpjcmVhdGUodm0sCiAgICAgICAgICAgICBDb2RlQmxv
Y2s6OkNvcHlQYXJzZWRCbG9jaywgKmJhc2VsaW5lKTsKICAgICAgICAgcmVzdWx0LT5zZXRBbHRl
cm5hdGl2ZSh2bSwgYmFzZWxpbmUpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwpAQCAtMzczLDcg
KzM3Myw3IEBAIENvZGVCbG9jayogU2NyaXB0RXhlY3V0YWJsZTo6bmV3UmVwbGFjZW0KICAgICAg
ICAgTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBqc0Nhc3Q8TW9kdWxlUHJv
Z3JhbUV4ZWN1dGFibGUqPih0aGlzKTsKICAgICAgICAgTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayog
YmFzZWxpbmUgPSBzdGF0aWNfY2FzdDxNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKj4oCiAgICAgICAg
ICAgICBleGVjdXRhYmxlLT5jb2RlQmxvY2soKS0+YmFzZWxpbmVWZXJzaW9uKCkpOwotICAgICAg
ICBNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKiByZXN1bHQgPSBNb2R1bGVQcm9ncmFtQ29kZUJsb2Nr
OjpjcmVhdGUoJnZtLAorICAgICAgICBNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKiByZXN1bHQgPSBN
b2R1bGVQcm9ncmFtQ29kZUJsb2NrOjpjcmVhdGUodm0sCiAgICAgICAgICAgICBDb2RlQmxvY2s6
OkNvcHlQYXJzZWRCbG9jaywgKmJhc2VsaW5lKTsKICAgICAgICAgcmVzdWx0LT5zZXRBbHRlcm5h
dGl2ZSh2bSwgYmFzZWxpbmUpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwpAQCAtMzgzLDcgKzM4
Myw3IEBAIENvZGVCbG9jayogU2NyaXB0RXhlY3V0YWJsZTo6bmV3UmVwbGFjZW0KICAgICBGdW5j
dGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBqc0Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4o
dGhpcyk7CiAgICAgRnVuY3Rpb25Db2RlQmxvY2sqIGJhc2VsaW5lID0gc3RhdGljX2Nhc3Q8RnVu
Y3Rpb25Db2RlQmxvY2sqPigKICAgICAgICAgZXhlY3V0YWJsZS0+Y29kZUJsb2NrRm9yKGtpbmQp
LT5iYXNlbGluZVZlcnNpb24oKSk7Ci0gICAgRnVuY3Rpb25Db2RlQmxvY2sqIHJlc3VsdCA9IEZ1
bmN0aW9uQ29kZUJsb2NrOjpjcmVhdGUoJnZtLAorICAgIEZ1bmN0aW9uQ29kZUJsb2NrKiByZXN1
bHQgPSBGdW5jdGlvbkNvZGVCbG9jazo6Y3JlYXRlKHZtLAogICAgICAgICBDb2RlQmxvY2s6OkNv
cHlQYXJzZWRCbG9jaywgKmJhc2VsaW5lKTsKICAgICByZXN1bHQtPnNldEFsdGVybmF0aXZlKHZt
LCBiYXNlbGluZSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTM5Nyw3ICszOTcsNyBAQCBzdGF0
aWMgdm9pZCBzZXR1cExMSW50KENvZGVCbG9jayogY29kZUJsCiBzdGF0aWMgdm9pZCBzZXR1cEpJ
VChWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrKQogewogI2lmIEVOQUJMRShKSVQpCi0gICAg
Q29tcGlsYXRpb25SZXN1bHQgcmVzdWx0ID0gSklUOjpjb21waWxlKCZ2bSwgY29kZUJsb2NrLCBK
SVRDb21waWxhdGlvbk11c3RTdWNjZWVkKTsKKyAgICBDb21waWxhdGlvblJlc3VsdCByZXN1bHQg
PSBKSVQ6OmNvbXBpbGUodm0sIGNvZGVCbG9jaywgSklUQ29tcGlsYXRpb25NdXN0U3VjY2VlZCk7
CiAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0ID09IENvbXBpbGF0aW9uU3VjY2Vzc2Z1bCk7CiAj
ZWxzZQogICAgIFVOVVNFRF9QQVJBTSh2bSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TZXRJdGVyYXRvclByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU2V0SXRlcmF0b3JQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAy
NDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TZXRJdGVyYXRvclByb3Rv
dHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDEzLCAyMDE2IEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxOSBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zOSw3ICszOSw3IEBAIHZvaWQgU2V0SXRl
cmF0b3JQcm90b3R5cGU6OmZpbmlzaENyZWF0aW8KICAgICBBU1NFUlQoaW5oZXJpdHModm0sIGlu
Zm8oKSkpOwogCiAgICAgSlNDX0JVSUxUSU5fRlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lUSU9OKCJu
ZXh0Iiwgc2V0SXRlcmF0b3JQcm90b3R5cGVOZXh0Q29kZUdlbmVyYXRvciwgc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOwotICAgIHB1dERpcmVjdFdp
dGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT50b1N0cmluZ1RhZ1N5bWJvbCwg
anNTdHJpbmcoJnZtLCAiU2V0IEl0ZXJhdG9yIiksIFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51
bSB8IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSk7CisgICAgcHV0RGlyZWN0V2l0aG91dFRy
YW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPnRvU3RyaW5nVGFnU3ltYm9sLCBqc1N0cmlu
Zyh2bSwgIlNldCBJdGVyYXRvciIpLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBQcm9w
ZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpOwogfQogCiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TZXRQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1NldFByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NldFByb3RvdHlwZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtNzEsNyArNzEsNyBAQCB2b2lkIFNldFByb3RvdHlwZTo6ZmluaXNoQ3JlYXRp
b24oVk0mIHZtCiAgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5
TmFtZXMtPmJ1aWx0aW5OYW1lcygpLnZhbHVlc1B1YmxpY05hbWUoKSwgdmFsdWVzLCBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7CiAgICAgcHV0RGly
ZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygp
LmtleXNQdWJsaWNOYW1lKCksIHZhbHVlcywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5
QXR0cmlidXRlOjpEb250RW51bSkpOwogICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZt
LCB2bS5wcm9wZXJ0eU5hbWVzLT5pdGVyYXRvclN5bWJvbCwgdmFsdWVzLCBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7Ci0gICAgcHV0RGlyZWN0V2l0
aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPnRvU3RyaW5nVGFnU3ltYm9sLCBq
c1N0cmluZygmdm0sICJTZXQiKSwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtIHwgUHJvcGVy
dHlBdHRyaWJ1dGU6OlJlYWRPbmx5KTsKKyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2
bSwgdm0ucHJvcGVydHlOYW1lcy0+dG9TdHJpbmdUYWdTeW1ib2wsIGpzU3RyaW5nKHZtLCAiU2V0
IiksIFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8IFByb3BlcnR5QXR0cmlidXRlOjpSZWFk
T25seSk7CiAKICAgICBKU0NfTkFUSVZFX0dFVFRFUl9XSVRIT1VUX1RSQU5TSVRJT04odm0ucHJv
cGVydHlOYW1lcy0+c2l6ZSwgc2V0UHJvdG9GdW5jU2l6ZSwgUHJvcGVydHlBdHRyaWJ1dGU6OkRv
bnRFbnVtIHwgUHJvcGVydHlBdHRyaWJ1dGU6OkFjY2Vzc29yKTsKIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0YWNrRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0YWNrRnJhbWUuY3BwCShyZXZpc2lvbiAyNDkxMjgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdGFja0ZyYW1lLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAx
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTExNCw3ICsxMTQsNyBAQCB2b2lkIFN0YWNrRnJhbWU6OmNvbXB1dGVMaW5l
QW5kQ29sdW1uKHVuCiAgICAgbV9jb2RlQmxvY2stPmV4cHJlc3Npb25SYW5nZUZvckJ5dGVjb2Rl
T2Zmc2V0KG1fYnl0ZWNvZGVPZmZzZXQsIGRpdm90LCB1bnVzZWRTdGFydE9mZnNldCwgdW51c2Vk
RW5kT2Zmc2V0LCBsaW5lLCBjb2x1bW4pOwogCiAgICAgU2NyaXB0RXhlY3V0YWJsZSogZXhlY3V0
YWJsZSA9IG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKTsKLSAgICBpZiAoT3B0aW9uYWw8
aW50PiBvdmVycmlkZUxpbmVOdW1iZXIgPSBleGVjdXRhYmxlLT5vdmVycmlkZUxpbmVOdW1iZXIo
Km1fY29kZUJsb2NrLT52bSgpKSkKKyAgICBpZiAoT3B0aW9uYWw8aW50PiBvdmVycmlkZUxpbmVO
dW1iZXIgPSBleGVjdXRhYmxlLT5vdmVycmlkZUxpbmVOdW1iZXIobV9jb2RlQmxvY2stPnZtKCkp
KQogICAgICAgICBsaW5lID0gb3ZlcnJpZGVMaW5lTnVtYmVyLnZhbHVlKCk7CiB9CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ0NvbnN0cnVjdG9yLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdDb25zdHJ1Y3Rv
ci5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N0cmluZ0NvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8q
CiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9y
ZykKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwOCwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMTkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtODAsNyArODAsNyBAQCBz
dGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpCiAgICAgICAgIHNjb3BlLnJl
bGVhc2UoKTsKICAgICAgICAgdW5zaWduZWQgY29kZSA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50
KDApLnRvVUludDMyKGV4ZWMpOwogICAgICAgICAvLyBOb3QgY2hlY2tpbmcgZm9yIGFuIGV4Y2Vw
dGlvbiBoZXJlIGlzIG9rIGJlY2F1c2UganNTaW5nbGVDaGFyYWN0ZXJTdHJpbmcgd2lsbCBqdXN0
IGZldGNoIGFuIHVudXNlZCBzdHJpbmcgaWYgdGhlcmUncyBhbiBleGNlcHRpb24uCi0gICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNTaW5nbGVDaGFyYWN0ZXJTdHJpbmcoZXhlYywgY29k
ZSkpOworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU2luZ2xlQ2hhcmFjdGVyU3Ry
aW5nKHZtLCBjb2RlKSk7CiAgICAgfQogCiAgICAgTENoYXIqIGJ1ZjhCaXQ7CkBAIC05OCwxNiAr
OTgsMTYgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaQogICAgICAg
ICAgICAgICAgIGJ1ZjE2Qml0W2ldID0gc3RhdGljX2Nhc3Q8VUNoYXI+KGV4ZWMtPnVuY2hlY2tl
ZEFyZ3VtZW50KGkpLnRvVUludDMyKGV4ZWMpKTsKICAgICAgICAgICAgICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5n
KGV4ZWMsIFdURk1vdmUoaW1wbDE2Qml0KSkpKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQU5EX1JF
VFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKHZtLCBXVEZNb3ZlKGltcGwxNkJp
dCkpKSk7CiAgICAgICAgIH0KICAgICAgICAgYnVmOEJpdFtpXSA9IHN0YXRpY19jYXN0PExDaGFy
PihjaGFyYWN0ZXIpOwogICAgIH0KLSAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFs
dWU6OmVuY29kZShqc1N0cmluZyhleGVjLCBXVEZNb3ZlKGltcGw4Qml0KSkpKTsKKyAgICBSRUxF
QVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyh2bSwgV1RGTW92
ZShpbXBsOEJpdCkpKSk7CiB9CiAKIEpTU3RyaW5nKiBKU0NfSE9TVF9DQUxMIHN0cmluZ0Zyb21D
aGFyQ29kZShFeGVjU3RhdGUqIGV4ZWMsIGludDMyX3QgYXJnKQogewotICAgIHJldHVybiBqc1Np
bmdsZUNoYXJhY3RlclN0cmluZyhleGVjLCBhcmcpOworICAgIHJldHVybiBqc1NpbmdsZUNoYXJh
Y3RlclN0cmluZyhleGVjLT52bSgpLCBhcmcpOwogfQogCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBzdHJpbmdGcm9tQ29kZVBvaW50KEV4ZWNTdGF0ZSogZXhlYykKQEAgLTEz
Niw3ICsxMzYsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpCiAg
ICAgICAgIH0KICAgICB9CiAKLSAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6
OmVuY29kZShqc1N0cmluZyhleGVjLCBidWlsZGVyLnRvU3RyaW5nKCkpKSk7CisgICAgUkVMRUFT
RV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcodm0sIGJ1aWxkZXIu
dG9TdHJpbmcoKSkpKTsKIH0KIAogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
Y29uc3RydWN0V2l0aFN0cmluZ0NvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYykKQEAgLTE1Nywx
NSArMTU3LDE3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnMKIAog
SlNTdHJpbmcqIHN0cmluZ0NvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBhcmd1
bWVudCkKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGlmIChhcmd1bWVudC5pc1N5
bWJvbCgpKQotICAgICAgICByZXR1cm4ganNOb250cml2aWFsU3RyaW5nKGV4ZWMsIGFzU3ltYm9s
KGFyZ3VtZW50KS0+ZGVzY3JpcHRpdmVTdHJpbmcoKSk7CisgICAgICAgIHJldHVybiBqc05vbnRy
aXZpYWxTdHJpbmcodm0sIGFzU3ltYm9sKGFyZ3VtZW50KS0+ZGVzY3JpcHRpdmVTdHJpbmcoKSk7
CiAgICAgcmV0dXJuIGFyZ3VtZW50LnRvU3RyaW5nKGV4ZWMpOwogfQogCiBzdGF0aWMgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsU3RyaW5nQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBl
eGVjKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgaWYgKCFleGVjLT5hcmd1bWVu
dENvdW50KCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNFbXB0eVN0cmluZyhl
eGVjKSk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNFbXB0eVN0cmluZyh2bSkp
OwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoc3RyaW5nQ29uc3RydWN0b3IoZXhlYywgZXhl
Yy0+dW5jaGVja2VkQXJndW1lbnQoMCkpKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ0l0ZXJhdG9yUHJvdG90eXBlLmNwcAko
cmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5n
SXRlcmF0b3JQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTkgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqIENvcHlyaWdodCAoQykgMjAxNSBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFp
bC5jb20+LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtNDEsNyArNDEsNyBAQCB2b2lkIFN0cmluZ0l0
ZXJhdG9yUHJvdG90eXBlOjpmaW5pc2hDcmVhCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24o
dm0pOwogICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7Ci0gICAgcHV0RGlyZWN0V2l0
aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPnRvU3RyaW5nVGFnU3ltYm9sLCBq
c1N0cmluZygmdm0sICJTdHJpbmcgSXRlcmF0b3IiKSwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRF
bnVtIHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KTsKKyAgICBwdXREaXJlY3RXaXRob3V0
VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+dG9TdHJpbmdUYWdTeW1ib2wsIGpzU3Ry
aW5nKHZtLCAiU3RyaW5nIEl0ZXJhdG9yIiksIFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8
IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSk7CiAgICAgSlNDX0JVSUxUSU5fRlVOQ1RJT05f
V0lUSE9VVF9UUkFOU0lUSU9OKHZtLnByb3BlcnR5TmFtZXMtPm5leHQsIHN0cmluZ0l0ZXJhdG9y
UHJvdG90eXBlTmV4dENvZGVHZW5lcmF0b3IsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0
eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3RyaW5nT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TdHJpbmdPYmplY3QuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQ
b3J0ZW4gKHBvcnRlbkBrZGUub3JnKQotICogIENvcHlyaWdodCAoQykgMjAwNC0yMDA4LCAyMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQt
MjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
CkBAIC01Nyw3ICs1Nyw4IEBAIGJvb2wgU3RyaW5nT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RC
eUkKICAgICBTdHJpbmdPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8U3RyaW5nT2JqZWN0Kj4o
b2JqZWN0KTsKICAgICBpZiAodGhpc09iamVjdC0+aW50ZXJuYWxWYWx1ZSgpLT5nZXRTdHJpbmdQ
cm9wZXJ0eVNsb3QoZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KSkKICAgICAgICAgcmV0dXJuIHRy
dWU7ICAgIAotICAgIHJldHVybiBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmpl
Y3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgcHJvcGVydHlOYW1lKSwgc2xvdCk7Cisg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICByZXR1cm4gSlNPYmplY3Q6OmdldE93blByb3Bl
cnR5U2xvdCh0aGlzT2JqZWN0LCBleGVjLCBJZGVudGlmaWVyOjpmcm9tKHZtLCBwcm9wZXJ0eU5h
bWUpLCBzbG90KTsKIH0KIAogYm9vbCBTdHJpbmdPYmplY3Q6OnB1dChKU0NlbGwqIGNlbGwsIEV4
ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwg
UHV0UHJvcGVydHlTbG90JiBzbG90KQpAQCAtMTQ2LDExICsxNDcsMTIgQEAgYm9vbCBTdHJpbmdP
YmplY3Q6OmRlbGV0ZVByb3BlcnR5QnlJbmRleAogCiB2b2lkIFN0cmluZ09iamVjdDo6Z2V0T3du
UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5
TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKKyAgICBW
TSYgdm0gPSBleGVjLT52bSgpOwogICAgIFN0cmluZ09iamVjdCogdGhpc09iamVjdCA9IGpzQ2Fz
dDxTdHJpbmdPYmplY3QqPihvYmplY3QpOwogICAgIGlmIChwcm9wZXJ0eU5hbWVzLmluY2x1ZGVT
dHJpbmdQcm9wZXJ0aWVzKCkpIHsKICAgICAgICAgaW50IHNpemUgPSB0aGlzT2JqZWN0LT5pbnRl
cm5hbFZhbHVlKCktPmxlbmd0aCgpOwogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7
ICsraSkKLSAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb20oZXhl
YywgaSkpOworICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbSh2
bSwgaSkpOwogICAgIH0KICAgICByZXR1cm4gSlNPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMo
dGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7CiB9CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdPYmplY3QuaAkocmV2aXNpb24gMjQ5MTI4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nT2JqZWN0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAw
IEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA3LTIw
MDgsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAo
QykgMjAwNy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMKQEAgLTMyLDcgKzMyLDcgQEAgcHVibGljOgogCiAgICAgc3RhdGljIFN0cmluZ09i
amVjdCogY3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgewotICAgICAg
ICBKU1N0cmluZyogc3RyaW5nID0ganNFbXB0eVN0cmluZygmdm0pOworICAgICAgICBKU1N0cmlu
Zyogc3RyaW5nID0ganNFbXB0eVN0cmluZyh2bSk7CiAgICAgICAgIFN0cmluZ09iamVjdCogb2Jq
ZWN0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8U3RyaW5nT2JqZWN0Pih2bS5oZWFwKSkg
U3RyaW5nT2JqZWN0KHZtLCBzdHJ1Y3R1cmUpOwogICAgICAgICBvYmplY3QtPmZpbmlzaENyZWF0
aW9uKHZtLCBzdHJpbmcpOwogICAgICAgICByZXR1cm4gb2JqZWN0OwpAQCAtODUsNyArODUsNyBA
QCBzdGF0aWMgaW5saW5lIEpTU3RyaW5nKiBqc1N0cmluZ1dpdGhSZXVzCiAgICAgICAgIEFTU0VS
VChhc1N0cmluZyhvcmlnaW5hbFZhbHVlKS0+dmFsdWUoZXhlYykgPT0gc3RyaW5nKTsKICAgICAg
ICAgcmV0dXJuIGFzU3RyaW5nKG9yaWdpbmFsVmFsdWUpOwogICAgIH0KLSAgICByZXR1cm4ganNT
dHJpbmcoJmV4ZWMtPnZtKCksIHN0cmluZyk7CisgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMtPnZt
KCksIHN0cmluZyk7CiB9CiAKIC8vIEhlbHBlciB0aGF0IHRyaWVzIHRvIHVzZSB0aGUgSlNTdHJp
bmcgc3Vic3RyaW5nIHNoYXJpbmcgbWVjaGFuaXNtIGlmICdvcmlnaW5hbFZhbHVlJyBpcyBhIEpT
U3RyaW5nLgpAQCAtOTksNyArOTksNyBAQCBzdGF0aWMgaW5saW5lIEpTU3RyaW5nKiBqc1N1YnN0
cmluZyhFeGVjCiAgICAgICAgIEFTU0VSVChhc1N0cmluZyhvcmlnaW5hbFZhbHVlKS0+dmFsdWUo
ZXhlYykgPT0gc3RyaW5nKTsKICAgICAgICAgcmV0dXJuIGpzU3Vic3RyaW5nKGV4ZWMsIGFzU3Ry
aW5nKG9yaWdpbmFsVmFsdWUpLCBvZmZzZXQsIGxlbmd0aCk7CiAgICAgfQotICAgIHJldHVybiBq
c1N1YnN0cmluZygmZXhlYy0+dm0oKSwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCk7CisgICAgcmV0
dXJuIGpzU3Vic3RyaW5nKGV4ZWMtPnZtKCksIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N0cmluZ1Byb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTYzLDEwICsxNjMsMTAgQEAgdm9pZCBTdHJpbmdQcm90b3R5cGU6OmZpbmlzaENyZWF0
aW9uKFZNJgogCiAgICAgSlNGdW5jdGlvbiogdHJpbVN0YXJ0RnVuY3Rpb24gPSBKU0Z1bmN0aW9u
OjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgMCwgInRyaW1TdGFydCJfcywgc3RyaW5nUHJvdG9G
dW5jVHJpbVN0YXJ0LCBOb0ludHJpbnNpYyk7CiAgICAgSlNGdW5jdGlvbiogdHJpbUVuZEZ1bmN0
aW9uID0gSlNGdW5jdGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIDAsICJ0cmltRW5kIl9z
LCBzdHJpbmdQcm90b0Z1bmNUcmltRW5kLCBOb0ludHJpbnNpYyk7Ci0gICAgcHV0RGlyZWN0V2l0
aG91dFRyYW5zaXRpb24odm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAidHJpbVN0YXJ0
IiksIHRyaW1TdGFydEZ1bmN0aW9uLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRy
aWJ1dGU6OkRvbnRFbnVtKSk7Ci0gICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAidHJpbUxlZnQiKSwgdHJpbVN0YXJ0RnVuY3Rpb24s
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKLSAg
ICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygm
dm0sICJ0cmltRW5kIiksIHRyaW1FbmRGdW5jdGlvbiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFBy
b3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOwotICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0
aW9uKHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgInRyaW1SaWdodCIpLCB0cmltRW5k
RnVuY3Rpb24sIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVu
dW0pKTsKKyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyh2bSwgInRyaW1TdGFydCIpLCB0cmltU3RhcnRGdW5jdGlvbiwgc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOworICAgIHB1dERpcmVjdFdp
dGhvdXRUcmFuc2l0aW9uKHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAidHJpbUxlZnQi
KSwgdHJpbVN0YXJ0RnVuY3Rpb24sIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJp
YnV0ZTo6RG9udEVudW0pKTsKKyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInRyaW1FbmQiKSwgdHJpbUVuZEZ1bmN0aW9uLCBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7CisgICAgcHV0
RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJ0
cmltUmlnaHQiKSwgdHJpbUVuZEZ1bmN0aW9uLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVy
dHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7CiAKICAgICBKU0Z1bmN0aW9uKiBpdGVyYXRvckZ1bmN0
aW9uID0gSlNGdW5jdGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIDAsICJbU3ltYm9sLml0
ZXJhdG9yXSJfcywgc3RyaW5nUHJvdG9GdW5jSXRlcmF0b3IsIE5vSW50cmluc2ljKTsKICAgICBw
dXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+aXRlcmF0b3JT
eW1ib2wsIGl0ZXJhdG9yRnVuY3Rpb24sIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0
dHJpYnV0ZTo6RG9udEVudW0pKTsKQEAgLTE3Nyw3ICsxNzcsNyBAQCB2b2lkIFN0cmluZ1Byb3Rv
dHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0mCiAKIFN0cmluZ1Byb3RvdHlwZSogU3RyaW5nUHJvdG90
eXBlOjpjcmVhdGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkKIHsKLSAgICBKU1N0cmluZyogZW1wdHkgPSBqc0VtcHR5U3RyaW5nKCZ2
bSk7CisgICAgSlNTdHJpbmcqIGVtcHR5ID0ganNFbXB0eVN0cmluZyh2bSk7CiAgICAgU3RyaW5n
UHJvdG90eXBlKiBwcm90b3R5cGUgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxTdHJpbmdQ
cm90b3R5cGU+KHZtLmhlYXApKSBTdHJpbmdQcm90b3R5cGUodm0sIHN0cnVjdHVyZSk7CiAgICAg
cHJvdG90eXBlLT5maW5pc2hDcmVhdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBlbXB0eSk7CiAgICAg
cmV0dXJuIHByb3RvdHlwZTsKQEAgLTMyMyw3ICszMjMsNyBAQCBzdGF0aWMgQUxXQVlTX0lOTElO
RSBKU1N0cmluZyoganNTcGxpY2VTCiAgICAgICAgIGlmIChwb3NpdGlvbiA8PSAwICYmIGxlbmd0
aCA+PSBzb3VyY2VTaXplKQogICAgICAgICAgICAgcmV0dXJuIHNvdXJjZVZhbDsKICAgICAgICAg
Ly8gV2UgY291bGQgY2FsbCBTdHJpbmc6OnN1YnN0cmluZ1NoYXJpbmdJbXBsKCksIGJ1dCB0aGlz
IHdvdWxkIHJlc3VsdCBpbiByZWR1bmRhbnQgY2hlY2tzLgotICAgICAgICBSRUxFQVNFX0FORF9S
RVRVUk4oc2NvcGUsIGpzU3RyaW5nKGV4ZWMsIFN0cmluZ0ltcGw6OmNyZWF0ZVN1YnN0cmluZ1No
YXJpbmdJbXBsKCpzb3VyY2UuaW1wbCgpLCBzdGQ6Om1heCgwLCBwb3NpdGlvbiksIHN0ZDo6bWlu
KHNvdXJjZVNpemUsIGxlbmd0aCkpKSk7CisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29w
ZSwganNTdHJpbmcodm0sIFN0cmluZ0ltcGw6OmNyZWF0ZVN1YnN0cmluZ1NoYXJpbmdJbXBsKCpz
b3VyY2UuaW1wbCgpLCBzdGQ6Om1heCgwLCBwb3NpdGlvbiksIHN0ZDo6bWluKHNvdXJjZVNpemUs
IGxlbmd0aCkpKSk7CiAgICAgfQogCiAgICAgLy8gV2Uga25vdyB0aGF0IHRoZSBzdW0gb2Ygc3Vi
c3RyaW5nUmFuZ2VzIGxlbmd0aHMgY2Fubm90IGV4Y2VlZCBsZW5ndGggb2YKQEAgLTMzNiw3ICsz
MzYsNyBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSBKU1N0cmluZyoganNTcGxpY2VTCiAgICAgQVNT
RVJUKHRvdGFsTGVuZ3RoIDw9IFN0cmluZzo6TWF4TGVuZ3RoKTsKIAogICAgIGlmICghdG90YWxM
ZW5ndGgpCi0gICAgICAgIHJldHVybiBqc0VtcHR5U3RyaW5nKGV4ZWMpOworICAgICAgICByZXR1
cm4ganNFbXB0eVN0cmluZyh2bSk7CiAKICAgICBpZiAoc291cmNlLmlzOEJpdCgpKSB7CiAgICAg
ICAgIExDaGFyKiBidWZmZXI7CkBAIC0zNTUsNyArMzU1LDcgQEAgc3RhdGljIEFMV0FZU19JTkxJ
TkUgSlNTdHJpbmcqIGpzU3BsaWNlUwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAg
ICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBqc1N0cmluZyhleGVjLCBXVEZNb3ZlKGltcGwp
KSk7CisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwganNTdHJpbmcodm0sIFdURk1v
dmUoaW1wbCkpKTsKICAgICB9CiAKICAgICBVQ2hhciogYnVmZmVyOwpAQCAtMzc1LDcgKzM3NSw3
IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpTU3RyaW5nKiBqc1NwbGljZVMKICAgICAgICAgfQog
ICAgIH0KIAotICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwganNTdHJpbmcoZXhlYywgV1RG
TW92ZShpbXBsKSkpOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwganNTdHJpbmcodm0s
IFdURk1vdmUoaW1wbCkpKTsKIH0KIAogc3RhdGljIEFMV0FZU19JTkxJTkUgSlNTdHJpbmcqIGpz
U3BsaWNlU3Vic3RyaW5nc1dpdGhTZXBhcmF0b3JzKEV4ZWNTdGF0ZSogZXhlYywgSlNTdHJpbmcq
IHNvdXJjZVZhbCwgY29uc3QgU3RyaW5nJiBzb3VyY2UsIGNvbnN0IFN0cmluZ1JhbmdlKiBzdWJz
dHJpbmdSYW5nZXMsIGludCByYW5nZUNvdW50LCBjb25zdCBTdHJpbmcqIHNlcGFyYXRvcnMsIGlu
dCBzZXBhcmF0b3JDb3VudCkKQEAgLTM5MCw3ICszOTAsNyBAQCBzdGF0aWMgQUxXQVlTX0lOTElO
RSBKU1N0cmluZyoganNTcGxpY2VTCiAgICAgICAgIGlmIChwb3NpdGlvbiA8PSAwICYmIGxlbmd0
aCA+PSBzb3VyY2VTaXplKQogICAgICAgICAgICAgcmV0dXJuIHNvdXJjZVZhbDsKICAgICAgICAg
Ly8gV2UgY291bGQgY2FsbCBTdHJpbmc6OnN1YnN0cmluZ1NoYXJpbmdJbXBsKCksIGJ1dCB0aGlz
IHdvdWxkIHJlc3VsdCBpbiByZWR1bmRhbnQgY2hlY2tzLgotICAgICAgICBSRUxFQVNFX0FORF9S
RVRVUk4oc2NvcGUsIGpzU3RyaW5nKGV4ZWMsIFN0cmluZ0ltcGw6OmNyZWF0ZVN1YnN0cmluZ1No
YXJpbmdJbXBsKCpzb3VyY2UuaW1wbCgpLCBzdGQ6Om1heCgwLCBwb3NpdGlvbiksIHN0ZDo6bWlu
KHNvdXJjZVNpemUsIGxlbmd0aCkpKSk7CisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29w
ZSwganNTdHJpbmcodm0sIFN0cmluZ0ltcGw6OmNyZWF0ZVN1YnN0cmluZ1NoYXJpbmdJbXBsKCpz
b3VyY2UuaW1wbCgpLCBzdGQ6Om1heCgwLCBwb3NpdGlvbiksIHN0ZDo6bWluKHNvdXJjZVNpemUs
IGxlbmd0aCkpKSk7CiAgICAgfQogCiAgICAgQ2hlY2tlZDxpbnQsIFJlY29yZE92ZXJmbG93PiB0
b3RhbExlbmd0aCA9IDA7CkBAIC00MDgsNyArNDA4LDcgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUg
SlNTdHJpbmcqIGpzU3BsaWNlUwogICAgIH0KIAogICAgIGlmICghdG90YWxMZW5ndGgpCi0gICAg
ICAgIHJldHVybiBqc0VtcHR5U3RyaW5nKGV4ZWMpOworICAgICAgICByZXR1cm4ganNFbXB0eVN0
cmluZyh2bSk7CiAKICAgICBpZiAoc291cmNlLmlzOEJpdCgpICYmIGFsbFNlcGFyYXRvcnM4Qml0
KSB7CiAgICAgICAgIExDaGFyKiBidWZmZXI7CkBAIC00MzcsNyArNDM3LDcgQEAgc3RhdGljIEFM
V0FZU19JTkxJTkUgSlNTdHJpbmcqIGpzU3BsaWNlUwogICAgICAgICAgICAgfQogICAgICAgICB9
ICAgICAgICAKIAotICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGpzU3RyaW5nKGV4
ZWMsIFdURk1vdmUoaW1wbCkpKTsKKyAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBq
c1N0cmluZyh2bSwgV1RGTW92ZShpbXBsKSkpOwogICAgIH0KIAogICAgIFVDaGFyKiBidWZmZXI7
CkBAIC00NzAsNyArNDcwLDcgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgSlNTdHJpbmcqIGpzU3Bs
aWNlUwogICAgICAgICB9CiAgICAgfQogCi0gICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBq
c1N0cmluZyhleGVjLCBXVEZNb3ZlKGltcGwpKSk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNj
b3BlLCBqc1N0cmluZyh2bSwgV1RGTW92ZShpbXBsKSkpOwogfQogCiAjZGVmaW5lIE9VVF9PRl9N
RU1PUlkoZXhlY19fLCBzY29wZV9fKSBcCkBAIC01OTMsMTQgKzU5MywxNCBAQCBzdGF0aWMgQUxX
QVlTX0lOTElORSBKU1N0cmluZyogcmVwbGFjZVVzCiAgICAgICAgICAgICAgICAgaWYgKG1hdGNo
U3RhcnQgPCAwKQogICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuVmFsdWUgPSBqc1VuZGVmaW5l
ZCgpOwogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgcGF0dGVyblZh
bHVlID0ganNTdWJzdHJpbmcoJnZtLCBzb3VyY2UsIG1hdGNoU3RhcnQsIG1hdGNoTGVuKTsKKyAg
ICAgICAgICAgICAgICAgICAgcGF0dGVyblZhbHVlID0ganNTdWJzdHJpbmcodm0sIHNvdXJjZSwg
bWF0Y2hTdGFydCwgbWF0Y2hMZW4pOwogCiAgICAgICAgICAgICAgICAgY2FjaGVkQ2FsbC5hcHBl
bmRBcmd1bWVudChwYXR0ZXJuVmFsdWUpOwogCiAgICAgICAgICAgICAgICAgaWYgKGkgJiYgaGFz
TmFtZWRDYXB0dXJlcykgewogICAgICAgICAgICAgICAgICAgICBTdHJpbmcgZ3JvdXBOYW1lID0g
cmVnRXhwLT5nZXRDYXB0dXJlR3JvdXBOYW1lKGkpOwogICAgICAgICAgICAgICAgICAgICBpZiAo
IWdyb3VwTmFtZS5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBncm91cHMtPnB1
dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIGdyb3VwTmFtZSksIHBhdHRl
cm5WYWx1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBncm91cHMtPnB1dERpcmVjdCh2bSwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgZ3JvdXBOYW1lKSwgcGF0dGVyblZhbHVlKTsKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKQEAgLTY1OSw3ICs2NTksNyBAQCBzdGF0
aWMgQUxXQVlTX0lOTElORSBKU1N0cmluZyogcmVwbGFjZVVzCiAgICAgICAgICAgICAgICAgICAg
IGlmIChtYXRjaFN0YXJ0IDwgMCkKICAgICAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm5WYWx1
ZSA9IGpzVW5kZWZpbmVkKCk7CiAgICAgICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAg
ICAgICAgICAgICAgICAgcGF0dGVyblZhbHVlID0ganNTdWJzdHJpbmcoJnZtLCBzb3VyY2UsIG1h
dGNoU3RhcnQsIG1hdGNoTGVuKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm5WYWx1
ZSA9IGpzU3Vic3RyaW5nKHZtLCBzb3VyY2UsIG1hdGNoU3RhcnQsIG1hdGNoTGVuKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwog
ICAgICAgICAgICAgICAgICAgICB9CiAKQEAgLTY2OCw3ICs2NjgsNyBAQCBzdGF0aWMgQUxXQVlT
X0lOTElORSBKU1N0cmluZyogcmVwbGFjZVVzCiAgICAgICAgICAgICAgICAgICAgIGlmIChpICYm
IGhhc05hbWVkQ2FwdHVyZXMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBncm91
cE5hbWUgPSByZWdFeHAtPmdldENhcHR1cmVHcm91cE5hbWUoaSk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIWdyb3VwTmFtZS5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZ3JvdXBzLT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCBn
cm91cE5hbWUpLCBwYXR0ZXJuVmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdy
b3Vwcy0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBncm91cE5hbWUp
LCBwYXR0ZXJuVmFsdWUpOwogICAgICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAg
ICB9CkBAIC03MzEsNyArNzMxLDcgQEAgSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblN0
cmluZ1BybwogICAgIEV4ZWNTdGF0ZSogZXhlYywgSlNTdHJpbmcqIHRoaXNWYWx1ZSwgUmVnRXhw
T2JqZWN0KiBzZWFyY2hWYWx1ZSkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CiAKICAgICBSZWdFeHAqIHJlZ0V4cCA9IHNlYXJjaFZhbHVlLT5yZWdFeHAo
KTsKQEAgLTc1NCw3ICs3NTQsNyBAQCBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uU3Ry
aW5nUHJvCiAgICAgRXhlY1N0YXRlKiBleGVjLCBKU1N0cmluZyogdGhpc1ZhbHVlLCBSZWdFeHBP
YmplY3QqIHNlYXJjaFZhbHVlLCBKU1N0cmluZyogcmVwbGFjZVN0cmluZykKIHsKICAgICBWTSYg
dm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBl
eGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBDYWxsRGF0YSBjYWxs
RGF0YTsKQEAgLTc5OCw3ICs3OTgsNyBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSBKU1N0cmluZyog
cmVwbGFjZVVzCiAgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBnZXRDYWxsRGF0YSh2bSwgcmVwbGFj
ZVZhbHVlLCBjYWxsRGF0YSk7CiAgICAgaWYgKGNhbGxUeXBlICE9IENhbGxUeXBlOjpOb25lKSB7
CiAgICAgICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7Ci0gICAgICAgIGF1dG8qIHN1YnN0
cmluZyA9IGpzU3Vic3RyaW5nKCZ2bSwgc3RyaW5nLCBtYXRjaFN0YXJ0LCBzZWFyY2hTdHJpbmcu
aW1wbCgpLT5sZW5ndGgoKSk7CisgICAgICAgIGF1dG8qIHN1YnN0cmluZyA9IGpzU3Vic3RyaW5n
KHZtLCBzdHJpbmcsIG1hdGNoU3RhcnQsIHNlYXJjaFN0cmluZy5pbXBsKCktPmxlbmd0aCgpKTsK
ICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAgICAgICAgIGFy
Z3MuYXBwZW5kKHN1YnN0cmluZyk7CiAgICAgICAgIGFyZ3MuYXBwZW5kKGpzTnVtYmVyKG1hdGNo
U3RhcnQpKTsKQEAgLTkzMyw3ICs5MzMsNyBAQCBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uU3RyaW5nUHJvCiAgICAgRW5jb2RlZEpTVmFsdWUgcmVwbGFjZVZhbHVlKQogewogICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0s
IGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAg
IAogICAgIHJldHVybiByZXBsYWNlKAogICAgICAgICB2bSwgZXhlYywgSlNWYWx1ZTo6ZGVjb2Rl
KHRoaXNWYWx1ZSksIEpTVmFsdWU6OmRlY29kZShzZWFyY2hWYWx1ZSksCkBAIC05NzQsMTQgKzk3
NCwxNCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgaWYg
KGEwLmlzVUludDMyKCkpIHsKICAgICAgICAgdWludDMyX3QgaSA9IGEwLmFzVUludDMyKCk7CiAg
ICAgICAgIGlmIChpIDwgdmlldy5sZW5ndGgoKSkKLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNTaW5nbGVDaGFyYWN0ZXJTdHJpbmcoZXhlYywgdmlld1tpXSkpOwotICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzRW1wdHlTdHJpbmcoZXhlYykpOworICAgICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1NpbmdsZUNoYXJhY3RlclN0cmluZyh2bSwgdmll
d1tpXSkpOworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzRW1wdHlTdHJpbmcodm0p
KTsKICAgICB9CiAgICAgZG91YmxlIGRwb3MgPSBhMC50b0ludGVnZXIoZXhlYyk7CiAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgaWYgKGRwb3Mg
Pj0gMCAmJiBkcG9zIDwgdmlldy5sZW5ndGgoKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1NpbmdsZUNoYXJhY3RlclN0cmluZyhleGVjLCB2aWV3W3N0YXRpY19jYXN0PHVuc2ln
bmVkPihkcG9zKV0pKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzRW1wdHlTdHJpbmco
ZXhlYykpOworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU2luZ2xlQ2hhcmFjdGVy
U3RyaW5nKHZtLCB2aWV3W3N0YXRpY19jYXN0PHVuc2lnbmVkPihkcG9zKV0pKTsKKyAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzRW1wdHlTdHJpbmcodm0pKTsKIH0KIAogRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNDaGFyQ29kZUF0KEV4ZWNTdGF0ZSogZXhl
YykKQEAgLTEyNzAsNyArMTI3MCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3Ry
aW5nUHJvdG8KICAgICAgICAgQVNTRVJUKGxpbWl0KTsKIAogICAgICAgICBkbyB7Ci0gICAgICAg
ICAgICByZXN1bHQtPnB1dERpcmVjdEluZGV4KGV4ZWMsIHBvc2l0aW9uLCBqc1NpbmdsZUNoYXJh
Y3RlclN0cmluZyhleGVjLCBpbnB1dFtwb3NpdGlvbl0pKTsKKyAgICAgICAgICAgIHJlc3VsdC0+
cHV0RGlyZWN0SW5kZXgoZXhlYywgcG9zaXRpb24sIGpzU2luZ2xlQ2hhcmFjdGVyU3RyaW5nKHZt
LCBpbnB1dFtwb3NpdGlvbl0pKTsKICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgICAgICB9IHdoaWxlICgrK3Bvc2l0aW9uIDwgbGlt
aXQpOwogCkBAIC0xMzY2LDcgKzEzNjYsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IHN0cmluZ1Byb3RvCiAgICAgZG91YmxlIGxlbmd0aCA9IGExLmlzVW5kZWZpbmVkKCkgPyBsZW4g
OiBhMS50b0ludGVnZXIoZXhlYyk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5j
b2RlZEpTVmFsdWUoKSk7CiAgICAgaWYgKHN0YXJ0ID49IGxlbiB8fCBsZW5ndGggPD0gMCkKLSAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0VtcHR5U3RyaW5nKGV4ZWMpKTsKKyAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0VtcHR5U3RyaW5nKHZtKSk7CiAgICAgaWYgKHN0
YXJ0IDwgMCkgewogICAgICAgICBzdGFydCArPSBsZW47CiAgICAgICAgIGlmIChzdGFydCA8IDAp
CkBAIC0xMzc5LDcgKzEzNzksNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmlu
Z1Byb3RvCiAgICAgc2NvcGUucmVsZWFzZSgpOwogICAgIGlmIChqc1N0cmluZykKICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N1YnN0cmluZyhleGVjLCBqc1N0cmluZywgc3Vic3Ry
aW5nU3RhcnQsIHN1YnN0cmluZ0xlbmd0aCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNTdWJzdHJpbmcoJnZtLCB1U3RyaW5nLCBzdWJzdHJpbmdTdGFydCwgc3Vic3RyaW5nTGVuZ3Ro
KSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N1YnN0cmluZyh2bSwgdVN0cmluZywg
c3Vic3RyaW5nU3RhcnQsIHN1YnN0cmluZ0xlbmd0aCkpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGJ1aWx0aW5TdHJpbmdTdWJzdHJJbnRlcm5hbChFeGVjU3RhdGUqIGV4ZWMp
CkBAIC0xNDU1LDcgKzE0NTUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmlu
Z1Byb3RvCiAgICAgU3RyaW5nIGxvd2VyY2FzZWRTdHJpbmcgPSBzLmNvbnZlcnRUb0xvd2VyY2Fz
ZVdpdGhvdXRMb2NhbGUoKTsKICAgICBpZiAobG93ZXJjYXNlZFN0cmluZy5pbXBsKCkgPT0gcy5p
bXBsKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoc1ZhbCk7Ci0gICAgUkVMRUFT
RV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcoZXhlYywgbG93ZXJj
YXNlZFN0cmluZykpKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVu
Y29kZShqc1N0cmluZyh2bSwgbG93ZXJjYXNlZFN0cmluZykpKTsKIH0KIAogRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNUb1VwcGVyQ2FzZShFeGVjU3RhdGUqIGV4
ZWMpCkBAIC0xNDczLDcgKzE0NzMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0
cmluZ1Byb3RvCiAgICAgU3RyaW5nIHVwcGVyY2FzZWRTdHJpbmcgPSBzLmNvbnZlcnRUb1VwcGVy
Y2FzZVdpdGhvdXRMb2NhbGUoKTsKICAgICBpZiAodXBwZXJjYXNlZFN0cmluZy5pbXBsKCkgPT0g
cy5pbXBsKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoc1ZhbCk7Ci0gICAgUkVM
RUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcoZXhlYywgdXBw
ZXJjYXNlZFN0cmluZykpKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6
OmVuY29kZShqc1N0cmluZyh2bSwgdXBwZXJjYXNlZFN0cmluZykpKTsKIH0KIAogRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNMb2NhbGVDb21wYXJlKEV4ZWNTdGF0
ZSogZXhlYykKQEAgLTE2MDEsNyArMTYwMSw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSB0b0xv
Y2FsZUNhc2UoRXhlY1MKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUsIHNj
b3BlLCB1X2Vycm9yTmFtZShlcnJvcikpOwogCiAgICAgLy8gMTguIFJldHVybiBMLgotICAgIFJF
TEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKHN0YXRlLCBs
b3dlcikpKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShq
c1N0cmluZyh2bSwgbG93ZXIpKSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
c3RyaW5nUHJvdG9GdW5jVG9Mb2NhbGVMb3dlckNhc2UoRXhlY1N0YXRlKiBzdGF0ZSkKQEAgLTE2
NTAsNyArMTY1MCw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSB0cmltU3RyaW5nKEV4ZWNTdGEK
ICAgICBpZiAobGVmdCA9PSAwICYmIHJpZ2h0ID09IHN0ci5sZW5ndGgoKSAmJiB0aGlzVmFsdWUu
aXNTdHJpbmcoKSkKICAgICAgICAgcmV0dXJuIHRoaXNWYWx1ZTsKIAotICAgIFJFTEVBU0VfQU5E
X1JFVFVSTihzY29wZSwganNTdHJpbmcoZXhlYywgc3RyLnN1YnN0cmluZ1NoYXJpbmdJbXBsKGxl
ZnQsIHJpZ2h0IC0gbGVmdCkpKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGpzU3Ry
aW5nKHZtLCBzdHIuc3Vic3RyaW5nU2hhcmluZ0ltcGwobGVmdCwgcmlnaHQgLSBsZWZ0KSkpOwog
fQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1RyaW0oRXhl
Y1N0YXRlKiBleGVjKQpAQCAtMTkwMSw3ICsxOTAxLDcgQEAgc3RhdGljIEpTVmFsdWUgbm9ybWFs
aXplKEV4ZWNTdGF0ZSogZXhlYwogICAgIHVub3JtMl9ub3JtYWxpemUobm9ybWFsaXplciwgY2hh
cmFjdGVycywgdmlldy5sZW5ndGgoKSwgYnVmZmVyLCBub3JtYWxpemVkU3RyaW5nTGVuZ3RoLCAm
c3RhdHVzKTsKICAgICBBU1NFUlQoVV9TVUNDRVNTKHN0YXR1cykpOwogCi0gICAgUkVMRUFTRV9B
TkRfUkVUVVJOKHNjb3BlLCBqc1N0cmluZygmdm0sIFdURk1vdmUocmVzdWx0KSkpOworICAgIFJF
TEVBU0VfQU5EX1JFVFVSTihzY29wZSwganNTdHJpbmcodm0sIFdURk1vdmUocmVzdWx0KSkpOwog
fQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY05vcm1hbGl6
ZShFeGVjU3RhdGUqIGV4ZWMpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
dHJpbmdQcm90b3R5cGVJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlSW5saW5lcy5oCShyZXZpc2lvbiAyNDkxMjgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGVJbmxpbmVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAgQUxXQVlTX0lOTElORSBKU1N0cmluZyog
c3RyaW5nU2xpY2UoRXhlYwogICAgICAgICAgICAgdG8gPSBsZW5ndGg7CiAgICAgICAgIHJldHVy
biBqc1N1YnN0cmluZyh2bSwgZXhlYywgc3RyaW5nLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZnJv
bSksIHN0YXRpY19jYXN0PHVuc2lnbmVkPih0bykgLSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZnJv
bSkpOwogICAgIH0KLSAgICByZXR1cm4ganNFbXB0eVN0cmluZygmdm0pOworICAgIHJldHVybiBq
c0VtcHR5U3RyaW5nKHZtKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdSZWN1cnNpb25DaGVja2VyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdSZWN1cnNpb25DaGVj
a2VyLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RyaW5nUmVjdXJzaW9uQ2hlY2tlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogIENvcHlyaWdodCAoQykgMjAxMS0yMDEyLCAyMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC0zNSw3ICszNSw3
IEBAIEpTVmFsdWUgU3RyaW5nUmVjdXJzaW9uQ2hlY2tlcjo6dGhyb3dTdGEKIAogSlNWYWx1ZSBT
dHJpbmdSZWN1cnNpb25DaGVja2VyOjplbXB0eVN0cmluZygpCiB7Ci0gICAgcmV0dXJuIGpzRW1w
dHlTdHJpbmcobV9leGVjKTsKKyAgICByZXR1cm4ganNFbXB0eVN0cmluZyhtX2V4ZWMtPnZtKCkp
OwogfQogCiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVy
ZS5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N0cnVjdHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMjYsOSArMTAyNiw5IEBAIHZvaWQg
U3RydWN0dXJlOjpkaWRUcmFuc2l0aW9uRnJvbVRoaXNTdHIKIAogICAgIGlmIChkZWZlcnJlZCkg
ewogICAgICAgICBBU1NFUlQoZGVmZXJyZWQtPnN0cnVjdHVyZSgpID09IHRoaXMpOwotICAgICAg
ICBtX3RyYW5zaXRpb25XYXRjaHBvaW50U2V0LmZpcmVBbGwoKnZtKCksIGRlZmVycmVkKTsKKyAg
ICAgICAgbV90cmFuc2l0aW9uV2F0Y2hwb2ludFNldC5maXJlQWxsKHZtKCksIGRlZmVycmVkKTsK
ICAgICB9IGVsc2UKLSAgICAgICAgbV90cmFuc2l0aW9uV2F0Y2hwb2ludFNldC5maXJlQWxsKCp2
bSgpLCBTdHJ1Y3R1cmVGaXJlRGV0YWlsKHRoaXMpKTsKKyAgICAgICAgbV90cmFuc2l0aW9uV2F0
Y2hwb2ludFNldC5maXJlQWxsKHZtKCksIFN0cnVjdHVyZUZpcmVEZXRhaWwodGhpcykpOwogfQog
CiB2b2lkIFN0cnVjdHVyZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJl
SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0
cnVjdHVyZUlubGluZXMuaAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzI5LDcg
KzMyOSw3IEBAIGlubGluZSB2b2lkIFN0cnVjdHVyZTo6ZGlkUmVwbGFjZVByb3BlcnQKICAgICBX
YXRjaHBvaW50U2V0KiBzZXQgPSBtYXAtPmdldChvZmZzZXQpOwogICAgIGlmIChMSUtFTFkoIXNl
dCkpCiAgICAgICAgIHJldHVybjsKLSAgICBzZXQtPmZpcmVBbGwoKnZtKCksICJQcm9wZXJ0eSBk
aWQgZ2V0IHJlcGxhY2VkIik7CisgICAgc2V0LT5maXJlQWxsKHZtKCksICJQcm9wZXJ0eSBkaWQg
Z2V0IHJlcGxhY2VkIik7CiB9CiAKIGlubGluZSBXYXRjaHBvaW50U2V0KiBTdHJ1Y3R1cmU6OnBy
b3BlcnR5UmVwbGFjZW1lbnRXYXRjaHBvaW50U2V0KFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKQEAg
LTU1OSw3ICs1NTksNyBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgU3RydWN0dXJlOjpzaG91bGRDb252
CiAgICAgaWYgKGEtPnN0b3JlZFByb3RvdHlwZSgpID09IGItPnN0b3JlZFByb3RvdHlwZSgpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBWTSYgdm0gPSAqYS0+dm0oKTsKKyAgICBWTSYg
dm0gPSBhLT52bSgpOwogICAgIEpTT2JqZWN0KiBhT2JqID0gYS0+c3RvcmVkUHJvdG90eXBlT2Jq
ZWN0KCk7CiAgICAgSlNPYmplY3QqIGJPYmogPSBiLT5zdG9yZWRQcm90b3R5cGVPYmplY3QoKTsK
ICAgICB3aGlsZSAoYU9iaiAmJiBiT2JqKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TeW1ib2xDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAyNDkxMjgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xDb25zdHJ1Y3Rvci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEy
LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAo
QykgMjAxNSBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+LgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dApAQCAtNjQsNyArNjQsNyBAQCBTeW1ib2xDb25zdHJ1Y3Rvcjo6U3ltYm9sQ29uc3Ry
dWN0b3IoVk0mCiB9CiAKICNkZWZpbmUgSU5JVElBTElaRV9XRUxMX0tOT1dOX1NZTUJPTFMobmFt
ZSkgXAotcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIElkZW50aWZpZXI6OmZyb21TdHJp
bmcoJnZtLCAjbmFtZSksIFN5bWJvbDo6Y3JlYXRlKHZtLCBzdGF0aWNfY2FzdDxTeW1ib2xJbXBs
Jj4oKnZtLnByb3BlcnR5TmFtZXMtPm5hbWUjI1N5bWJvbC5pbXBsKCkpKSwgUHJvcGVydHlBdHRy
aWJ1dGU6OkRvbnRFbnVtIHwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUgfCBQcm9wZXJ0
eUF0dHJpYnV0ZTo6UmVhZE9ubHkpOworcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICNuYW1lKSwgU3ltYm9sOjpjcmVhdGUodm0sIHN0YXRp
Y19jYXN0PFN5bWJvbEltcGwmPigqdm0ucHJvcGVydHlOYW1lcy0+bmFtZSMjU3ltYm9sLmltcGwo
KSkpLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9u
dERlbGV0ZSB8IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSk7CiAKIHZvaWQgU3ltYm9sQ29u
c3RydWN0b3I6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgU3ltYm9sUHJvdG90eXBlKiBwcm90b3R5
cGUpCiB7CkBAIC0xMjEsNyArMTIxLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBz
eW1ib2xDb25zdAogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogCiAgICAgQVNTRVJUKHVpZC5zeW1ib2xSZWdpc3RyeSgpID09ICZ2bS5zeW1ib2xSZWdpc3Ry
eSgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKGV4ZWMsICZ1aWQpKTsK
KyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKHZtLCAmdWlkKSk7CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3lt
Ym9sUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TeW1ib2xQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTUgWXVzdWtlIFN1
enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPi4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTYyLDcg
KzYyLDcgQEAgU3ltYm9sUHJvdG90eXBlOjpTeW1ib2xQcm90b3R5cGUoVk0mIHZtLAogdm9pZCBT
eW1ib2xQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCkKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7Ci0gICAgcHV0RGly
ZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPnRvU3RyaW5nVGFnU3lt
Ym9sLCBqc1N0cmluZygmdm0sICJTeW1ib2wiKSwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVt
IHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KTsKKyAgICBwdXREaXJlY3RXaXRob3V0VHJh
bnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+dG9TdHJpbmdUYWdTeW1ib2wsIGpzU3RyaW5n
KHZtLCAiU3ltYm9sIiksIFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8IFByb3BlcnR5QXR0
cmlidXRlOjpSZWFkT25seSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKIAog
ICAgIEpTRnVuY3Rpb24qIHRvUHJpbWl0aXZlRnVuY3Rpb24gPSBKU0Z1bmN0aW9uOjpjcmVhdGUo
dm0sIGdsb2JhbE9iamVjdCwgMSwgIltTeW1ib2wudG9QcmltaXRpdmVdIl9zLCBzeW1ib2xQcm90
b0Z1bmNWYWx1ZU9mLCBOb0ludHJpbnNpYyk7CkBAIC05OCw3ICs5OCw3IEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgc3ltYm9sUHJvdG8KICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBl
RXJyb3IoZXhlYywgc2NvcGUsIFN5bWJvbERlc2NyaXB0aW9uVHlwZUVycm9yKTsKICAgICBzY29w
ZS5yZWxlYXNlKCk7CiAgICAgY29uc3QgYXV0byBkZXNjcmlwdGlvbiA9IHN5bWJvbC0+ZGVzY3Jp
cHRpb24oKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGRlc2NyaXB0aW9uLmlzTnVsbCgp
ID8ganNVbmRlZmluZWQoKSA6IGpzU3RyaW5nKCZ2bSwgZGVzY3JpcHRpb24pKTsKKyAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGRlc2NyaXB0aW9uLmlzTnVsbCgpID8ganNVbmRlZmluZWQoKSA6
IGpzU3RyaW5nKHZtLCBkZXNjcmlwdGlvbikpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIHN5bWJvbFByb3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYykKQEAgLTEwOSw3
ICsxMDksNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN5bWJvbFByb3RvCiAgICAg
U3ltYm9sKiBzeW1ib2wgPSB0cnlFeHRyYWN0U3ltYm9sKHZtLCBleGVjLT50aGlzVmFsdWUoKSk7
CiAgICAgaWYgKCFzeW1ib2wpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMs
IHNjb3BlLCBTeW1ib2xUb1N0cmluZ1R5cGVFcnJvcik7Ci0gICAgUkVMRUFTRV9BTkRfUkVUVVJO
KHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUoanNOb250cml2aWFsU3RyaW5nKCZ2bSwgc3ltYm9sLT5k
ZXNjcmlwdGl2ZVN0cmluZygpKSkpOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNW
YWx1ZTo6ZW5jb2RlKGpzTm9udHJpdmlhbFN0cmluZyh2bSwgc3ltYm9sLT5kZXNjcmlwdGl2ZVN0
cmluZygpKSkpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN5bWJvbFByb3Rv
RnVuY1ZhbHVlT2YoRXhlY1N0YXRlKiBleGVjKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3ltYm9sVGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxNCwgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTIxMyw3ICsyMTMsNyBAQCB2b2lkIFN5bWJvbFRhYmxlOjpzZXRSYXJlRGF0YUNv
ZGVCbG9jayhDCiAgICAgICAgIG1fcmFyZURhdGEgPSBtYWtlVW5pcXVlPFN5bWJvbFRhYmxlUmFy
ZURhdGE+KCk7CiAKICAgICBBU1NFUlQoIW1fcmFyZURhdGEtPm1fY29kZUJsb2NrKTsKLSAgICBt
X3JhcmVEYXRhLT5tX2NvZGVCbG9jay5zZXQoKmNvZGVCbG9jay0+dm0oKSwgdGhpcywgY29kZUJs
b2NrKTsKKyAgICBtX3JhcmVEYXRhLT5tX2NvZGVCbG9jay5zZXQoY29kZUJsb2NrLT52bSgpLCB0
aGlzLCBjb2RlQmxvY2spOwogfQogCiBHbG9iYWxWYXJpYWJsZUlEIFN5bWJvbFRhYmxlOjp1bmlx
dWVJREZvclZhcmlhYmxlKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFVuaXF1ZWRTdHJpbmdJ
bXBsKiBrZXksIFZNJiB2bSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Rl
c3RSdW5uZXJVdGlscy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVGVzdFJ1bm5lclV0aWxzLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVzdFJ1bm5lclV0aWxzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTM4LDcgKzM4LDcgQEAgRnVuY3Rpb25FeGVjdXRhYmxlKiBnZXRFeGVjdXRhYmxlRm9yRnVu
YwogICAgIGlmICghdGhlRnVuY3Rpb25WYWx1ZS5pc0NlbGwoKSkKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAKLSAgICBWTSYgdm0gPSAqdGhlRnVuY3Rpb25WYWx1ZS5hc0NlbGwoKS0+dm0oKTsK
KyAgICBWTSYgdm0gPSB0aGVGdW5jdGlvblZhbHVlLmFzQ2VsbCgpLT52bSgpOwogICAgIEpTRnVu
Y3Rpb24qIHRoZUZ1bmN0aW9uID0ganNEeW5hbWljQ2FzdDxKU0Z1bmN0aW9uKj4odm0sIHRoZUZ1
bmN0aW9uVmFsdWUpOwogICAgIGlmICghdGhlRnVuY3Rpb24pCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkocmV2aXNpb24gMjQ5
MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNTEsNyArMjUxLDcgQEAgVk06OlZNKFZNVHlwZSB2bVR5cGUsIEhlYXBUeXBlIGhl
YXBUeXBlKQogI2lmIFVTRShDRikKICAgICAsIG1fcnVuTG9vcChDRlJ1bkxvb3BHZXRDdXJyZW50
KCkpCiAjZW5kaWYgLy8gVVNFKENGKQotICAgICwgaGVhcCh0aGlzLCBoZWFwVHlwZSkKKyAgICAs
IGhlYXAoKnRoaXMsIGhlYXBUeXBlKQogICAgICwgZmFzdE1hbGxvY0FsbG9jYXRvcihtYWtlVW5p
cXVlPEZhc3RNYWxsb2NBbGlnbmVkTWVtb3J5QWxsb2NhdG9yPigpKQogICAgICwgcHJpbWl0aXZl
R2lnYWNhZ2VBbGxvY2F0b3IobWFrZVVuaXF1ZTxHaWdhY2FnZUFsaWduZWRNZW1vcnlBbGxvY2F0
b3I+KEdpZ2FjYWdlOjpQcmltaXRpdmUpKQogICAgICwganNWYWx1ZUdpZ2FjYWdlQWxsb2NhdG9y
KG1ha2VVbmlxdWU8R2lnYWNhZ2VBbGlnbmVkTWVtb3J5QWxsb2NhdG9yPihHaWdhY2FnZTo6SlNW
YWx1ZSkpCkBAIC0zMzcsNyArMzM3LDcgQEAgVk06OlZNKFZNVHlwZSB2bVR5cGUsIEhlYXBUeXBl
IGhlYXBUeXBlKQogCiAgICAgc21hbGxTdHJpbmdzLmluaXRpYWxpemVDb21tb25TdHJpbmdzKCp0
aGlzKTsKIAotICAgIHByb3BlcnR5TmFtZXMgPSBuZXcgQ29tbW9uSWRlbnRpZmllcnModGhpcyk7
CisgICAgcHJvcGVydHlOYW1lcyA9IG5ldyBDb21tb25JZGVudGlmaWVycygqdGhpcyk7CiAgICAg
dGVybWluYXRlZEV4ZWN1dGlvbkVycm9yU3RydWN0dXJlLnNldCgqdGhpcywgVGVybWluYXRlZEV4
ZWN1dGlvbkVycm9yOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAgICAg
cHJvcGVydHlOYW1lRW51bWVyYXRvclN0cnVjdHVyZS5zZXQoKnRoaXMsIEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvcjo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwogICAgIGN1
c3RvbUdldHRlclNldHRlclN0cnVjdHVyZS5zZXQoKnRoaXMsIEN1c3RvbUdldHRlclNldHRlcjo6
Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwpAQCAtNzAzLDcgKzcwMyw3IEBA
IE5hdGl2ZUV4ZWN1dGFibGUqIFZNOjpnZXRIb3N0RnVuY3Rpb24oTmEKICNpZiBFTkFCTEUoSklU
KQogICAgIGlmIChjYW5Vc2VKSVQoKSkgewogICAgICAgICByZXR1cm4gaml0U3R1YnMtPmhvc3RG
dW5jdGlvblN0dWIoCi0gICAgICAgICAgICB0aGlzLCBmdW5jdGlvbiwgY29uc3RydWN0b3IsCisg
ICAgICAgICAgICAqdGhpcywgZnVuY3Rpb24sIGNvbnN0cnVjdG9yLAogICAgICAgICAgICAgaW50
cmluc2ljICE9IE5vSW50cmluc2ljID8gdGh1bmtHZW5lcmF0b3JGb3JJbnRyaW5zaWMoaW50cmlu
c2ljKSA6IDAsCiAgICAgICAgICAgICBpbnRyaW5zaWMsIHNpZ25hdHVyZSwgbmFtZSk7CiAgICAg
fQpAQCAtNzE4LDggKzcxOCw4IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFn
PiBWTToKICNpZiBFTkFCTEUoSklUKQogICAgIGlmIChjYW5Vc2VKSVQoKSkgewogICAgICAgICBp
ZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkKLSAgICAgICAgICAgIHJldHVybiBqaXRTdHVicy0+Y3Rp
SW50ZXJuYWxGdW5jdGlvbkNhbGwodGhpcykucmV0YWdnZWQ8SlNFbnRyeVB0clRhZz4oKTsKLSAg
ICAgICAgcmV0dXJuIGppdFN0dWJzLT5jdGlJbnRlcm5hbEZ1bmN0aW9uQ29uc3RydWN0KHRoaXMp
LnJldGFnZ2VkPEpTRW50cnlQdHJUYWc+KCk7CisgICAgICAgICAgICByZXR1cm4gaml0U3R1YnMt
PmN0aUludGVybmFsRnVuY3Rpb25DYWxsKCp0aGlzKS5yZXRhZ2dlZDxKU0VudHJ5UHRyVGFnPigp
OworICAgICAgICByZXR1cm4gaml0U3R1YnMtPmN0aUludGVybmFsRnVuY3Rpb25Db25zdHJ1Y3Qo
KnRoaXMpLnJldGFnZ2VkPEpTRW50cnlQdHJUYWc+KCk7CiAgICAgfQogI2VuZGlmCiAgICAgaWYg
KGtpbmQgPT0gQ29kZUZvckNhbGwpCkBAIC03NzEsNyArNzcxLDcgQEAgdm9pZCBWTTo6ZGVsZXRl
QWxsQ29kZShEZWxldGVBbGxDb2RlRWZmbwogdm9pZCBWTTo6c2hyaW5rRm9vdHByaW50V2hlbklk
bGUoKQogewogICAgIHdoZW5JZGxlKFs9XSAoKSB7Ci0gICAgICAgIHNhbml0aXplU3RhY2tGb3JW
TSh0aGlzKTsKKyAgICAgICAgc2FuaXRpemVTdGFja0ZvclZNKCp0aGlzKTsKICAgICAgICAgZGVs
ZXRlQWxsQ29kZShEZWxldGVBbGxDb2RlSWZOb3RDb2xsZWN0aW5nKTsKICAgICAgICAgaGVhcC5j
b2xsZWN0Tm93KFN5bmNocm9ub3VzbmVzczo6U3luYywgQ29sbGVjdGlvblNjb3BlOjpGdWxsKTsK
ICAgICAgICAgLy8gRklYTUU6IENvbnNpZGVyIHN0b3BwaW5nIHZhcmlvdXMgYXV0b21hdGljIHRo
cmVhZHMgaGVyZS4KQEAgLTkyNSwxNiArOTI1LDE2IEBAIHZvaWQgVk06OmdhdGhlclNjcmF0Y2hC
dWZmZXJSb290cyhDb25zZXIKIH0KICNlbmRpZgogCi12b2lkIGxvZ1Nhbml0aXplU3RhY2soVk0q
IHZtKQordm9pZCBsb2dTYW5pdGl6ZVN0YWNrKFZNJiB2bSkKIHsKLSAgICBpZiAoT3B0aW9uczo6
dmVyYm9zZVNhbml0aXplU3RhY2soKSAmJiB2bS0+dG9wQ2FsbEZyYW1lKSB7CisgICAgaWYgKE9w
dGlvbnM6OnZlcmJvc2VTYW5pdGl6ZVN0YWNrKCkgJiYgdm0udG9wQ2FsbEZyYW1lKSB7CiAgICAg
ICAgIGludCBkdW1teTsKICAgICAgICAgYXV0byYgc3RhY2tCb3VuZHMgPSBUaHJlYWQ6OmN1cnJl
bnQoKS5zdGFjaygpOwogICAgICAgICBkYXRhTG9nKAotICAgICAgICAgICAgIlNhbml0aXppbmcg
c3RhY2sgZm9yIFZNID0gIiwgUmF3UG9pbnRlcih2bSksICIgd2l0aCB0b3AgY2FsbCBmcmFtZSBh
dCAiLCBSYXdQb2ludGVyKHZtLT50b3BDYWxsRnJhbWUpLAorICAgICAgICAgICAgIlNhbml0aXpp
bmcgc3RhY2sgZm9yIFZNID0gIiwgUmF3UG9pbnRlcigmdm0pLCAiIHdpdGggdG9wIGNhbGwgZnJh
bWUgYXQgIiwgUmF3UG9pbnRlcih2bS50b3BDYWxsRnJhbWUpLAogICAgICAgICAgICAgIiwgY3Vy
cmVudCBzdGFjayBwb2ludGVyIGF0ICIsIFJhd1BvaW50ZXIoJmR1bW15KSwgIiwgaW4gIiwKLSAg
ICAgICAgICAgIHBvaW50ZXJEdW1wKHZtLT50b3BDYWxsRnJhbWUtPmNvZGVCbG9jaygpKSwgIiwg
bGFzdCBjb2RlIG9yaWdpbiA9ICIsCi0gICAgICAgICAgICB2bS0+dG9wQ2FsbEZyYW1lLT5jb2Rl
T3JpZ2luKCksICIsIGxhc3Qgc3RhY2sgdG9wID0gIiwgUmF3UG9pbnRlcih2bS0+bGFzdFN0YWNr
VG9wKCkpLCAiLCBpbiBzdGFjayByYW5nZSBbIiwgUmF3UG9pbnRlcihzdGFja0JvdW5kcy5vcmln
aW4oKSksICIsICIsIFJhd1BvaW50ZXIoc3RhY2tCb3VuZHMuZW5kKCkpLCAiXVxuIik7CisgICAg
ICAgICAgICBwb2ludGVyRHVtcCh2bS50b3BDYWxsRnJhbWUtPmNvZGVCbG9jaygpKSwgIiwgbGFz
dCBjb2RlIG9yaWdpbiA9ICIsCisgICAgICAgICAgICB2bS50b3BDYWxsRnJhbWUtPmNvZGVPcmln
aW4oKSwgIiwgbGFzdCBzdGFjayB0b3AgPSAiLCBSYXdQb2ludGVyKHZtLmxhc3RTdGFja1RvcCgp
KSwgIiwgaW4gc3RhY2sgcmFuZ2UgWyIsIFJhd1BvaW50ZXIoc3RhY2tCb3VuZHMub3JpZ2luKCkp
LCAiLCAiLCBSYXdQb2ludGVyKHN0YWNrQm91bmRzLmVuZCgpKSwgIl1cbiIpOwogICAgIH0KIH0K
IApAQCAtMTE0MywxOCArMTE0MywxOCBAQCB2b2lkIFF1ZXVlZFRhc2s6OnJ1bigpCiAgICAgbV9t
aWNyb3Rhc2stPnJ1bihtX2dsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpKTsKIH0KIAotdm9pZCBz
YW5pdGl6ZVN0YWNrRm9yVk0oVk0qIHZtKQordm9pZCBzYW5pdGl6ZVN0YWNrRm9yVk0oVk0mIHZt
KQogewogICAgIGxvZ1Nhbml0aXplU3RhY2sodm0pOwotICAgIGlmICh2bS0+dG9wQ2FsbEZyYW1l
KSB7CisgICAgaWYgKHZtLnRvcENhbGxGcmFtZSkgewogICAgICAgICBhdXRvJiBzdGFja0JvdW5k
cyA9IFRocmVhZDo6Y3VycmVudCgpLnN0YWNrKCk7Ci0gICAgICAgIEFTU0VSVCh2bS0+Y3VycmVu
dFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQoc3RhY2tC
b3VuZHMsIHN0YWNrQm91bmRzLmNvbnRhaW5zKHZtLT5sYXN0U3RhY2tUb3AoKSkpOworICAgICAg
ICBBU1NFUlQodm0uY3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7CisgICAgICAgIEFT
U0VSVF9VTlVTRUQoc3RhY2tCb3VuZHMsIHN0YWNrQm91bmRzLmNvbnRhaW5zKHZtLmxhc3RTdGFj
a1RvcCgpKSk7CiAgICAgfQogI2lmIEVOQUJMRShDX0xPT1ApCi0gICAgdm0tPmludGVycHJldGVy
LT5jbG9vcFN0YWNrKCkuc2FuaXRpemVTdGFjaygpOworICAgIHZtLmludGVycHJldGVyLT5jbG9v
cFN0YWNrKCkuc2FuaXRpemVTdGFjaygpOwogI2Vsc2UKLSAgICBzYW5pdGl6ZVN0YWNrRm9yVk1J
bXBsKHZtKTsKKyAgICBzYW5pdGl6ZVN0YWNrRm9yVk1JbXBsKCZ2bSk7CiAjZW5kaWYKIH0KIApA
QCAtMTM1MCw3ICsxMzUwLDcgQEAgSlNDZWxsKiBWTTo6c2VudGluZWxNYXBCdWNrZXRTbG93KCkK
IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciogVk06OmVtcHR5UHJvcGVydHlOYW1lRW51bWVyYXRv
clNsb3coKQogewogICAgIEFTU0VSVCghbV9lbXB0eVByb3BlcnR5TmFtZUVudW1lcmF0b3IpOwot
ICAgIFByb3BlcnR5TmFtZUFycmF5IHByb3BlcnR5TmFtZXModGhpcywgUHJvcGVydHlOYW1lTW9k
ZTo6U3RyaW5ncywgUHJpdmF0ZVN5bWJvbE1vZGU6OkV4Y2x1ZGUpOworICAgIFByb3BlcnR5TmFt
ZUFycmF5IHByb3BlcnR5TmFtZXMoKnRoaXMsIFByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3MsIFBy
aXZhdGVTeW1ib2xNb2RlOjpFeGNsdWRlKTsKICAgICBhdXRvKiBlbnVtZXJhdG9yID0gSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yOjpjcmVhdGUoKnRoaXMsIG51bGxwdHIsIDAsIDAsIFdURk1vdmUo
cHJvcGVydHlOYW1lcykpOwogICAgIG1fZW1wdHlQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLnNldCgq
dGhpcywgZW51bWVyYXRvcik7CiAgICAgcmV0dXJuIGVudW1lcmF0b3I7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1ZNLmgJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1ZNLmgJKHdvcmtpbmcgY29weSkKQEAgLTY3NCw3ICs2NzQsNyBAQCBw
dWJsaWM6CiAgICAgc3RkOjp1bmlxdWVfcHRyPEpJVFRodW5rcz4gaml0U3R1YnM7CiAgICAgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBnZXRDVElTdHViKFRodW5rR2VuZXJh
dG9yIGdlbmVyYXRvcikKICAgICB7Ci0gICAgICAgIHJldHVybiBqaXRTdHVicy0+Y3RpU3R1Yih0
aGlzLCBnZW5lcmF0b3IpOworICAgICAgICByZXR1cm4gaml0U3R1YnMtPmN0aVN0dWIoKnRoaXMs
IGdlbmVyYXRvcik7CiAgICAgfQogCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKQEAgLTExMDgsMTQg
KzExMDgsMTQgQEAgaW5saW5lIHZvaWQgVk06OnNldEluaXRpYWxpemluZ09iamVjdENsYQogCiBp
bmxpbmUgSGVhcCogV2Vha1NldDo6aGVhcCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuICZtX3ZtLT5o
ZWFwOworICAgIHJldHVybiAmbV92bS5oZWFwOwogfQogCiAjaWYgIUVOQUJMRShDX0xPT1ApCiBl
eHRlcm4gIkMiIHZvaWQgc2FuaXRpemVTdGFja0ZvclZNSW1wbChWTSopOwogI2VuZGlmCiAKLUpT
X0VYUE9SVF9QUklWQVRFIHZvaWQgc2FuaXRpemVTdGFja0ZvclZNKFZNKik7Ci12b2lkIGxvZ1Nh
bml0aXplU3RhY2soVk0qKTsKK0pTX0VYUE9SVF9QUklWQVRFIHZvaWQgc2FuaXRpemVTdGFja0Zv
clZNKFZNJik7Cit2b2lkIGxvZ1Nhbml0aXplU3RhY2soVk0mKTsKIAogfSAvLyBuYW1lc3BhY2Ug
SlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTVRyYXBzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTVRyYXBzLmNwcAkocmV2
aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1UcmFwcy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDE3LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE3LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0yMTUsNyArMjE1LDcgQEAgcHVibGljOgogICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gU2lnbmFsQWN0aW9uOjpOb3RIYW5kbGVkOwogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICBBU1NFUlQoY3VycmVudENvZGVCbG9jay0+aGFzSW5zdGFs
bGVkVk1UcmFwQnJlYWtwb2ludHMoKSk7Ci0gICAgICAgICAgICAgICAgVk0mIHZtID0gKmN1cnJl
bnRDb2RlQmxvY2stPnZtKCk7CisgICAgICAgICAgICAgICAgVk0mIHZtID0gY3VycmVudENvZGVC
bG9jay0+dm0oKTsKIAogICAgICAgICAgICAgICAgIC8vIFdlIGFyZSBpbiBKSVQgY29kZSBzbyBp
dCdzIHNhZmUgdG8gYWNxdWlyZSB0aGlzIGxvY2suCiAgICAgICAgICAgICAgICAgYXV0byBjb2Rl
QmxvY2tTZXRMb2NrZXIgPSBob2xkTG9jayh2bS5oZWFwLmNvZGVCbG9ja1NldCgpLmdldExvY2so
KSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrTWFwUHJvdG90eXBl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrTWFw
UHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvV2Vha01hcFByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE2IEFwcGxlLCBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOSBBcHBsZSwgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00OCw3
ICs0OCw3IEBAIHZvaWQgV2Vha01hcFByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0KICAgICBK
U0NfTkFUSVZFX0lOVFJJTlNJQ19GVU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJT04odm0ucHJvcGVy
dHlOYW1lcy0+aGFzLCBwcm90b0Z1bmNXZWFrTWFwSGFzLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSwgMSwgSlNXZWFrTWFwSGFzSW50cmluc2ljKTsK
ICAgICBKU0NfTkFUSVZFX0lOVFJJTlNJQ19GVU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJT04odm0u
cHJvcGVydHlOYW1lcy0+c2V0LCBwcm90b0Z1bmNXZWFrTWFwU2V0LCBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSwgMiwgSlNXZWFrTWFwU2V0SW50cmlu
c2ljKTsKIAotICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5h
bWVzLT50b1N0cmluZ1RhZ1N5bWJvbCwganNTdHJpbmcoJnZtLCAiV2Vha01hcCIpLCBQcm9wZXJ0
eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpOworICAg
IHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT50b1N0cmlu
Z1RhZ1N5bWJvbCwganNTdHJpbmcodm0sICJXZWFrTWFwIiksIFByb3BlcnR5QXR0cmlidXRlOjpE
b250RW51bSB8IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSk7CiB9CiAKIEFMV0FZU19JTkxJ
TkUgc3RhdGljIEpTV2Vha01hcCogZ2V0V2Vha01hcChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNW
YWx1ZSB2YWx1ZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtPYmpl
Y3RSZWZQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1dlYWtPYmplY3RSZWZQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrT2JqZWN0UmVmUHJvdG90eXBlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBAQCB2b2lkIFdlYWtPYmplY3RSZWZQcm90b3R5
cGU6OmZpbmlzaENyZWF0CiAgICAgLy8gRklYTUU6IEl0IHdvdWxkbid0IGJlIGhhcmQgdG8gbWFr
ZSB0aGlzIGFuIGludHJpbnNpYy4KICAgICBKU0NfTkFUSVZFX0ZVTkNUSU9OX1dJVEhPVVRfVFJB
TlNJVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5kZXJlZiwgcHJvdG9GdW5jV2Vha1JlZkRlcmVmLCBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSwgMCk7CiAK
LSAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+dG9T
dHJpbmdUYWdTeW1ib2wsIGpzU3RyaW5nKCZ2bSwgIldlYWtSZWYiKSwgUHJvcGVydHlBdHRyaWJ1
dGU6OkRvbnRFbnVtIHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KTsKKyAgICBwdXREaXJl
Y3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+dG9TdHJpbmdUYWdTeW1i
b2wsIGpzU3RyaW5nKHZtLCAiV2Vha1JlZiIpLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0g
fCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpOwogfQogCiBBTFdBWVNfSU5MSU5FIHN0YXRp
YyBKU1dlYWtPYmplY3RSZWYqIGdldFdlYWtSZWYoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTVmFs
dWUgdmFsdWUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrU2V0UHJv
dG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9X
ZWFrU2V0UHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvV2Vha1NldFByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUsIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE5IEFwcGxlLCBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTQ2LDcgKzQ2LDcgQEAgdm9pZCBXZWFrU2V0UHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbihWTQog
ICAgIEpTQ19OQVRJVkVfSU5UUklOU0lDX0ZVTkNUSU9OX1dJVEhPVVRfVFJBTlNJVElPTih2bS5w
cm9wZXJ0eU5hbWVzLT5oYXMsIHByb3RvRnVuY1dlYWtTZXRIYXMsIHN0YXRpY19jYXN0PHVuc2ln
bmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pLCAxLCBKU1dlYWtTZXRIYXNJbnRyaW5z
aWMpOwogICAgIEpTQ19OQVRJVkVfSU5UUklOU0lDX0ZVTkNUSU9OX1dJVEhPVVRfVFJBTlNJVElP
Tih2bS5wcm9wZXJ0eU5hbWVzLT5hZGQsIHByb3RvRnVuY1dlYWtTZXRBZGQsIHN0YXRpY19jYXN0
PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pLCAxLCBKU1dlYWtTZXRBZGRJ
bnRyaW5zaWMpOwogCi0gICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3Bl
cnR5TmFtZXMtPnRvU3RyaW5nVGFnU3ltYm9sLCBqc1N0cmluZygmdm0sICJXZWFrU2V0IiksIFBy
b3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSk7
CisgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPnRv
U3RyaW5nVGFnU3ltYm9sLCBqc1N0cmluZyh2bSwgIldlYWtTZXQiKSwgUHJvcGVydHlBdHRyaWJ1
dGU6OkRvbnRFbnVtIHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KTsKIH0KIAogQUxXQVlT
X0lOTElORSBzdGF0aWMgSlNXZWFrU2V0KiBnZXRXZWFrU2V0KENhbGxGcmFtZSogY2FsbEZyYW1l
LCBKU1ZhbHVlIHZhbHVlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0hlYXBW
ZXJpZmllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0hl
YXBWZXJpZmllci5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS90b29scy9IZWFwVmVyaWZpZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTQ0LDEyICsxNDQs
MTIgQEAgdm9pZCBIZWFwVmVyaWZpZXI6OnByaW50VmVyaWZpY2F0aW9uSGVhZAogICAgIENvbGxl
Y3Rpb25TY29wZSBzY29wZSA9IGN1cnJlbnRDeWNsZSgpLnNjb3BlOwogICAgIE1vbm90b25pY1Rp
bWUgZ2NDeWNsZVRpbWVzdGFtcCA9IGN1cnJlbnRDeWNsZSgpLnRpbWVzdGFtcDsKICAgICBkYXRh
TG9nKCJWZXJpZnlpbmcgaGVhcCBpbiBbcCIsIGdldEN1cnJlbnRQcm9jZXNzSUQoKSwgIiwgIiwg
VGhyZWFkOjpjdXJyZW50KCksICJdIHZtICIsCi0gICAgICAgIFJhd1BvaW50ZXIobV9oZWFwLT52
bSgpKSwgIiBvbiAiLCBzY29wZSwgIiBHQyBAICIsIGdjQ3ljbGVUaW1lc3RhbXAsICJcbiIpOwor
ICAgICAgICBSYXdQb2ludGVyKCZtX2hlYXAtPnZtKCkpLCAiIG9uICIsIHNjb3BlLCAiIEdDIEAg
IiwgZ2NDeWNsZVRpbWVzdGFtcCwgIlxuIik7CiB9CiAKIGJvb2wgSGVhcFZlcmlmaWVyOjp2ZXJp
ZnlDZWxsTGlzdChQaGFzZSBwaGFzZSwgQ2VsbExpc3QmIGxpc3QpCiB7Ci0gICAgVk0mIHZtID0g
Km1faGVhcC0+dm0oKTsKKyAgICBWTSYgdm0gPSBtX2hlYXAtPnZtKCk7CiAgICAgYXV0byYgbGl2
ZUNlbGxzID0gbGlzdC5jZWxscygpOwogCiAgICAgYm9vbCBsaXN0TmFtZVByaW50ZWQgPSBmYWxz
ZTsKQEAgLTIyMiw3ICsyMjIsNyBAQCBib29sIEhlYXBWZXJpZmllcjo6dmFsaWRhdGVKU0NlbGwo
Vk0qIGV4CiAgICAgaWYgKGV4cGVjdGVkVk0pIHsKICAgICAgICAgVk0mIHZtID0gKmV4cGVjdGVk
Vk07CiAKLSAgICAgICAgVk0qIGNlbGxWTSA9IGNlbGwtPnZtKCk7CisgICAgICAgIFZNKiBjZWxs
Vk0gPSAmY2VsbC0+dm0oKTsKICAgICAgICAgaWYgKGNlbGxWTSAhPSBleHBlY3RlZFZNKSB7CiAg
ICAgICAgICAgICBwcmludEhlYWRlckFuZENlbGwoKTsKICAgICAgICAgICAgIGRhdGFMb2coIiBp
cyBmcm9tIGEgZGlmZmVyZW50IFZNOiBleHBlY3RlZDoiLCBSYXdQb2ludGVyKGV4cGVjdGVkVk0p
LCAiIGFjdHVhbDoiLCBSYXdQb2ludGVyKGNlbGxWTSksICJcbiIpOwpAQCAtMjU1LDcgKzI1NSw3
IEBAIGJvb2wgSGVhcFZlcmlmaWVyOjp2YWxpZGF0ZUpTQ2VsbChWTSogZXgKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgfQogCi0gICAgICAgIFZNKiBzdHJ1Y3R1cmVWTSA9IHN0
cnVjdHVyZS0+dm0oKTsKKyAgICAgICAgVk0qIHN0cnVjdHVyZVZNID0gJnN0cnVjdHVyZS0+dm0o
KTsKICAgICAgICAgaWYgKHN0cnVjdHVyZVZNICE9IGV4cGVjdGVkVk0pIHsKICAgICAgICAgICAg
IHByaW50SGVhZGVyQW5kQ2VsbCgpOwogICAgICAgICAgICAgZGF0YUxvZygiIGhhcyBzdHJ1Y3R1
cmUgIiwgUmF3UG9pbnRlcihzdHJ1Y3R1cmUpLCAiIGZyb20gYSBkaWZmZXJlbnQgVk06IGV4cGVj
dGVkOiIsIFJhd1BvaW50ZXIoZXhwZWN0ZWRWTSksICIgYWN0dWFsOiIsIFJhd1BvaW50ZXIoc3Ry
dWN0dXJlVk0pLCAiXG4iKTsKQEAgLTMwNSw3ICszMDUsNyBAQCBib29sIEhlYXBWZXJpZmllcjo6
dmFsaWRhdGVKU0NlbGwoVk0qIGV4CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
IH0KICAgICAgICAgCi0gICAgICAgIFZNKiBzdHJ1Y3R1cmVTdHJ1Y3R1cmVWTSA9IHN0cnVjdHVy
ZVN0cnVjdHVyZS0+dm0oKTsKKyAgICAgICAgVk0qIHN0cnVjdHVyZVN0cnVjdHVyZVZNID0gJnN0
cnVjdHVyZVN0cnVjdHVyZS0+dm0oKTsKICAgICAgICAgaWYgKHN0cnVjdHVyZVN0cnVjdHVyZVZN
ICE9IGV4cGVjdGVkVk0pIHsKICAgICAgICAgICAgIHByaW50SGVhZGVyQW5kQ2VsbCgpOwogICAg
ICAgICAgICAgZGF0YUxvZygiIGhhcyBzdHJ1Y3R1cmUgIiwgUmF3UG9pbnRlcihzdHJ1Y3R1cmUp
LCAiIHdob3NlIHN0cnVjdHVyZSAiLCBSYXdQb2ludGVyKHN0cnVjdHVyZVN0cnVjdHVyZSksICIg
aXMgZnJvbSBhIGRpZmZlcmVudCBWTTogZXhwZWN0ZWQ6IiwgUmF3UG9pbnRlcihleHBlY3RlZFZN
KSwgIiBhY3R1YWw6IiwgUmF3UG9pbnRlcihzdHJ1Y3R1cmVTdHJ1Y3R1cmVWTSksICJcbiIpOwpA
QCAtMzY1LDcgKzM2NSw3IEBAIHZvaWQgSGVhcFZlcmlmaWVyOjp2ZXJpZnkoSGVhcFZlcmlmaWVy
OjoKIHZvaWQgSGVhcFZlcmlmaWVyOjpyZXBvcnRDZWxsKENlbGxQcm9maWxlJiBwcm9maWxlLCBp
bnQgY3ljbGVJbmRleCwgSGVhcFZlcmlmaWVyOjpHQ0N5Y2xlJiBjeWNsZSwgQ2VsbExpc3QmIGxp
c3QsIGNvbnN0IGNoYXIqIHByZWZpeCkKIHsKICAgICBIZWFwQ2VsbCogY2VsbCA9IHByb2ZpbGUu
Y2VsbCgpOwotICAgIFZNKiB2bSA9IG1faGVhcC0+dm0oKTsKKyAgICBWTSYgdm0gPSBtX2hlYXAt
PnZtKCk7CiAKICAgICBpZiAocHJlZml4KQogICAgICAgICBkYXRhTG9nKHByZWZpeCk7CkBAIC0z
ODcsNyArMzg3LDcgQEAgdm9pZCBIZWFwVmVyaWZpZXI6OnJlcG9ydENlbGwoQ2VsbFByb2ZpbAog
CiAgICAgaWYgKHByb2ZpbGUuaXNMaXZlKCkgJiYgcHJvZmlsZS5pc0pTQ2VsbCgpKSB7CiAgICAg
ICAgIEpTQ2VsbCoganNDZWxsID0gcHJvZmlsZS5qc0NlbGwoKTsKLSAgICAgICAgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUgPSBqc0NlbGwtPnN0cnVjdHVyZSgqdm0pOworICAgICAgICBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSA9IGpzQ2VsbC0+c3RydWN0dXJlKHZtKTsKICAgICAgICAgZGF0YUxvZygiIHN0
cnVjdHVyZToiLCBSYXdQb2ludGVyKHN0cnVjdHVyZSkpOwogICAgICAgICBpZiAoanNDZWxsLT5p
c09iamVjdCgpKSB7CiAgICAgICAgICAgICBKU09iamVjdCogb2JqID0gc3RhdGljX2Nhc3Q8SlNP
YmplY3QqPihjZWxsKTsKQEAgLTM5OSw3ICszOTksNyBAQCB2b2lkIEhlYXBWZXJpZmllcjo6cmVw
b3J0Q2VsbChDZWxsUHJvZmlsCiAgICAgfQogCiAgICAgZGF0YUxvZygiIGluICIsIGN5Y2xlLnNj
b3BlLCAiIEdDWyIsIGN5Y2xlSW5kZXgsICJdIGluICciLCBsaXN0Lm5hbWUoKSwgIicgbGlzdCBp
biBWTSAiLAotICAgICAgICBSYXdQb2ludGVyKHZtKSwgIiByZWNvcmRlZCBhdCB0aW1lICIsIHBy
b2ZpbGUudGltZXN0YW1wKCksICJcbiIpOworICAgICAgICBSYXdQb2ludGVyKCZ2bSksICIgcmVj
b3JkZWQgYXQgdGltZSAiLCBwcm9maWxlLnRpbWVzdGFtcCgpLCAiXG4iKTsKICAgICBpZiAocHJv
ZmlsZS5zdGFja1RyYWNlKCkpCiAgICAgICAgIGRhdGFMb2coKnByb2ZpbGUuc3RhY2tUcmFjZSgp
KTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xsYXJWTS5jcHAJ
KHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxh
clZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTksNyArOTksNyBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICBpZiAoZnJhbWVJbmRleCsrICE9IHJlcXVlc3RlZEZyYW1lSW5kZXgpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6Q29udGludWU7CiAKLSAgICAgICAgICAgIGFkZFBy
b3BlcnR5KHZtLCAibmFtZSIsIGpzU3RyaW5nKCZ2bSwgdmlzaXRvci0+ZnVuY3Rpb25OYW1lKCkp
KTsKKyAgICAgICAgICAgIGFkZFByb3BlcnR5KHZtLCAibmFtZSIsIGpzU3RyaW5nKHZtLCB2aXNp
dG9yLT5mdW5jdGlvbk5hbWUoKSkpOwogCiAgICAgICAgICAgICBpZiAodmlzaXRvci0+Y2FsbGVl
KCkuaXNDZWxsKCkpCiAgICAgICAgICAgICAgICAgYWRkUHJvcGVydHkodm0sICJjYWxsZWUiLCB2
aXNpdG9yLT5jYWxsZWUoKS5hc0NlbGwoKSk7CkBAIC0xMjMsNyArMTIzLDcgQEAgcHVibGljOgog
cHJpdmF0ZToKICAgICB2b2lkIGFkZFByb3BlcnR5KFZNJiB2bSwgY29uc3QgY2hhciogbmFtZSwg
SlNWYWx1ZSB2YWx1ZSkKICAgICB7Ci0gICAgICAgIElkZW50aWZpZXIgaWRlbnRpZmllciA9IElk
ZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCBuYW1lKTsKKyAgICAgICAgSWRlbnRpZmllciBpZGVu
dGlmaWVyID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgbmFtZSk7CiAgICAgICAgIHB1dERp
cmVjdCh2bSwgaWRlbnRpZmllciwgdmFsdWUpOwogICAgIH0KIH07CkBAIC0zNjksMTMgKzM2OSwx
NCBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmpl
Y3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQ
cm9wZXJ0eVNsb3QmIHNsb3QpCiAgICAgeworICAgICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwog
ICAgICAgICBDdXN0b21HZXR0ZXIqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8Q3VzdG9tR2V0dGVyKj4o
b2JqZWN0KTsKLSAgICAgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBQcm9wZXJ0eU5hbWUoSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZyhleGVjLCAiY3VzdG9tR2V0dGVyIikpKSB7CisgICAgICAgIGlmIChw
cm9wZXJ0eU5hbWUgPT0gUHJvcGVydHlOYW1lKElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJj
dXN0b21HZXR0ZXIiKSkpIHsKICAgICAgICAgICAgIHNsb3Quc2V0Q2FjaGVhYmxlQ3VzdG9tKHRo
aXNPYmplY3QsIFByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgUHJvcGVydHlBdHRyaWJ1
dGU6OlJlYWRPbmx5IHwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtLCB0aGlzT2JqZWN0LT5j
dXN0b21HZXR0ZXIpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICAg
ICAgCi0gICAgICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gUHJvcGVydHlOYW1lKElkZW50aWZpZXI6
OmZyb21TdHJpbmcoZXhlYywgImN1c3RvbUdldHRlckFjY2Vzc29yIikpKSB7CisgICAgICAgIGlm
IChwcm9wZXJ0eU5hbWUgPT0gUHJvcGVydHlOYW1lKElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0s
ICJjdXN0b21HZXR0ZXJBY2Nlc3NvciIpKSkgewogICAgICAgICAgICAgc2xvdC5zZXRDYWNoZWFi
bGVDdXN0b20odGhpc09iamVjdCwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUgfCBQcm9w
ZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBQ
cm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tQWNjZXNzb3IsIHRoaXNPYmplY3QtPmN1c3RvbUdldHRl
ckFjZXNzb3IpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KQEAgLTM5Miw3
ICszOTMsNyBAQCBwcml2YXRlOgogICAgICAgICBDdXN0b21HZXR0ZXIqIHRoaXNPYmplY3QgPSBq
c0R5bmFtaWNDYXN0PEN1c3RvbUdldHRlcio+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVl
KSk7CiAgICAgICAgIGlmICghdGhpc09iamVjdCkKICAgICAgICAgICAgIHJldHVybiB0aHJvd1ZN
VHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsKLSAgICAgICAgYm9vbCBzaG91bGRUaHJvdyA9IHRoaXNP
YmplY3QtPmdldChleGVjLCBQcm9wZXJ0eU5hbWUoSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVj
LCAic2hvdWxkVGhyb3ciKSkpLnRvQm9vbGVhbihleGVjKTsKKyAgICAgICAgYm9vbCBzaG91bGRU
aHJvdyA9IHRoaXNPYmplY3QtPmdldChleGVjLCBQcm9wZXJ0eU5hbWUoSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyh2bSwgInNob3VsZFRocm93IikpKS50b0Jvb2xlYW4oZXhlYyk7CiAgICAgICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgICAgICBpZiAo
c2hvdWxkVGhyb3cpCiAgICAgICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBz
Y29wZSk7CkBAIC00MDcsNyArNDA4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgSlNPYmplY3QqIHRo
aXNPYmplY3QgPSBqc0R5bmFtaWNDYXN0PEpTT2JqZWN0Kj4odm0sIEpTVmFsdWU6OmRlY29kZSh0
aGlzVmFsdWUpKTsKICAgICAgICAgaWYgKCF0aGlzT2JqZWN0KQogICAgICAgICAgICAgcmV0dXJu
IHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUpOwotICAgICAgICBib29sIHNob3VsZFRocm93
ID0gdGhpc09iamVjdC0+Z2V0KGV4ZWMsIFByb3BlcnR5TmFtZShJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKGV4ZWMsICJzaG91bGRUaHJvdyIpKSkudG9Cb29sZWFuKGV4ZWMpOworICAgICAgICBib29s
IHNob3VsZFRocm93ID0gdGhpc09iamVjdC0+Z2V0KGV4ZWMsIFByb3BlcnR5TmFtZShJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKHZtLCAic2hvdWxkVGhyb3ciKSkpLnRvQm9vbGVhbihleGVjKTsKICAg
ICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAg
ICAgIGlmIChzaG91bGRUaHJvdykKICAgICAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9y
KGV4ZWMsIHNjb3BlKTsKQEAgLTYxMiw3ICs2MTMsNyBAQCBwdWJsaWM6CiAgICAgICAgIHN0YXRp
YyBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIHNsb3dDYWxsKEV4ZWNTdGF0ZSogZXhlYywg
dm9pZCogcG9pbnRlcikKICAgICAgICAgewogICAgICAgICAgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKLSAgICAgICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsK
KyAgICAgICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAg
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihzdGF0aWNfY2FzdDxET01K
SVRHZXR0ZXIqPihwb2ludGVyKS0+dmFsdWUoKSkpOwogICAgICAgICB9CiAKQEAgLTY1MSw3ICs2
NTIsNyBAQCB2b2lkIERPTUpJVEdldHRlcjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtCiAgICAgQmFz
ZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIGNvbnN0IERPTUpJVDo6R2V0dGVyU2V0dGVyKiBk
b21KSVQgPSAmRE9NSklUR2V0dGVyRE9NSklUOwogICAgIGF1dG8qIGN1c3RvbUdldHRlclNldHRl
ciA9IERPTUF0dHJpYnV0ZUdldHRlclNldHRlcjo6Y3JlYXRlKHZtLCBkb21KSVQtPmdldHRlcigp
LCBudWxscHRyLCBET01BdHRyaWJ1dGVBbm5vdGF0aW9uIHsgRE9NSklUTm9kZTo6aW5mbygpLCBk
b21KSVQgfSk7Ci0gICAgcHV0RGlyZWN0Q3VzdG9tQWNjZXNzb3Iodm0sIElkZW50aWZpZXI6OmZy
b21TdHJpbmcoJnZtLCAiY3VzdG9tR2V0dGVyIiksIGN1c3RvbUdldHRlclNldHRlciwgUHJvcGVy
dHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgUHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29y
KTsKKyAgICBwdXREaXJlY3RDdXN0b21BY2Nlc3Nvcih2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zyh2bSwgImN1c3RvbUdldHRlciIpLCBjdXN0b21HZXR0ZXJTZXR0ZXIsIFByb3BlcnR5QXR0cmli
dXRlOjpSZWFkT25seSB8IFByb3BlcnR5QXR0cmlidXRlOjpDdXN0b21BY2Nlc3Nvcik7CiB9CiAK
IGNsYXNzIERPTUpJVEdldHRlckNvbXBsZXggOiBwdWJsaWMgRE9NSklUTm9kZSB7CkBAIC02OTUs
NyArNjk2LDcgQEAgcHVibGljOgogICAgICAgICBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSklUX09Q
RVJBVElPTiBzbG93Q2FsbChFeGVjU3RhdGUqIGV4ZWMsIHZvaWQqIHBvaW50ZXIpCiAgICAgICAg
IHsKICAgICAgICAgICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgICAgICAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgICAgICAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICAgICAgICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICAgICAgICAgIGF1dG8qIG9iamVjdCA9IHN0YXRp
Y19jYXN0PERPTUpJVE5vZGUqPihwb2ludGVyKTsKICAgICAgICAgICAgIGF1dG8qIGRvbWppdEdl
dHRlckNvbXBsZXggPSBqc0R5bmFtaWNDYXN0PERPTUpJVEdldHRlckNvbXBsZXgqPih2bSwgb2Jq
ZWN0KTsKQEAgLTc2MSw4ICs3NjIsOCBAQCB2b2lkIERPTUpJVEdldHRlckNvbXBsZXg6OmZpbmlz
aENyZWF0aW9uCiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIGNvbnN0IERPTUpJ
VDo6R2V0dGVyU2V0dGVyKiBkb21KSVQgPSAmRE9NSklUR2V0dGVyQ29tcGxleERPTUpJVDsKICAg
ICBhdXRvKiBjdXN0b21HZXR0ZXJTZXR0ZXIgPSBET01BdHRyaWJ1dGVHZXR0ZXJTZXR0ZXI6OmNy
ZWF0ZSh2bSwgZG9tSklULT5nZXR0ZXIoKSwgbnVsbHB0ciwgRE9NQXR0cmlidXRlQW5ub3RhdGlv
biB7IERPTUpJVEdldHRlckNvbXBsZXg6OmluZm8oKSwgZG9tSklUIH0pOwotICAgIHB1dERpcmVj
dEN1c3RvbUFjY2Vzc29yKHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImN1c3RvbUdl
dHRlciIpLCBjdXN0b21HZXR0ZXJTZXR0ZXIsIFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8
IFByb3BlcnR5QXR0cmlidXRlOjpDdXN0b21BY2Nlc3Nvcik7Ci0gICAgcHV0RGlyZWN0TmF0aXZl
RnVuY3Rpb24odm0sIGdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJl
bmFibGVFeGNlcHRpb24iKSwgMCwgZnVuY3Rpb25FbmFibGVFeGNlcHRpb24sIE5vSW50cmluc2lj
LCAwKTsKKyAgICBwdXREaXJlY3RDdXN0b21BY2Nlc3Nvcih2bSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZyh2bSwgImN1c3RvbUdldHRlciIpLCBjdXN0b21HZXR0ZXJTZXR0ZXIsIFByb3BlcnR5QXR0
cmlidXRlOjpSZWFkT25seSB8IFByb3BlcnR5QXR0cmlidXRlOjpDdXN0b21BY2Nlc3Nvcik7Cisg
ICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rpb24odm0sIGdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZyh2bSwgImVuYWJsZUV4Y2VwdGlvbiIpLCAwLCBmdW5jdGlvbkVuYWJsZUV4Y2Vw
dGlvbiwgTm9JbnRyaW5zaWMsIDApOwogfQogCiBjbGFzcyBET01KSVRGdW5jdGlvbk9iamVjdCA6
IHB1YmxpYyBET01KSVROb2RlIHsKQEAgLTgwMyw3ICs4MDQsNyBAQCBwdWJsaWM6CiAgICAgc3Rh
dGljIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gZnVuY3Rpb25XaXRob3V0VHlwZUNoZWNr
KEV4ZWNTdGF0ZSogZXhlYywgRE9NSklUTm9kZSogbm9kZSkKICAgICB7CiAgICAgICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7Ci0gICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZt
LCBleGVjKTsKKyAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIobm9kZS0+dmFsdWUoKSkp
OwogICAgIH0KIApAQCAtODMzLDcgKzgzNCw3IEBAIHN0YXRpYyBjb25zdCBET01KSVQ6OlNpZ25h
dHVyZSBET01KSVRGdW4KIHZvaWQgRE9NSklURnVuY3Rpb25PYmplY3Q6OmZpbmlzaENyZWF0aW9u
KFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKIHsKICAgICBCYXNlOjpmaW5p
c2hDcmVhdGlvbih2bSk7Ci0gICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rpb24odm0sIGdsb2JhbE9i
amVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJmdW5jIiksIDAsIGZ1bmN0aW9uV2l0
aFR5cGVDaGVjaywgTm9JbnRyaW5zaWMsICZET01KSVRGdW5jdGlvbk9iamVjdFNpZ25hdHVyZSwg
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSkpOworICAg
IHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9uKHZtLCBnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZy
b21TdHJpbmcodm0sICJmdW5jIiksIDAsIGZ1bmN0aW9uV2l0aFR5cGVDaGVjaywgTm9JbnRyaW5z
aWMsICZET01KSVRGdW5jdGlvbk9iamVjdFNpZ25hdHVyZSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSkpOwogfQogCiBjbGFzcyBET01KSVRDaGVja1N1
YkNsYXNzT2JqZWN0IDogcHVibGljIERPTUpJVE5vZGUgewpAQCAtODc0LDcgKzg3NSw3IEBAIHB1
YmxpYzoKICAgICBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBmdW5jdGlvbldp
dGhvdXRUeXBlQ2hlY2soRXhlY1N0YXRlKiBleGVjLCBET01KSVROb2RlKiBub2RlKQogICAgIHsK
ICAgICAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKHZtLCBleGVjKTsKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihu
b2RlLT52YWx1ZSgpKSk7CiAgICAgfQogCkBAIC04ODcsNyArODg4LDcgQEAgc3RhdGljIGNvbnN0
IERPTUpJVDo6U2lnbmF0dXJlIERPTUpJVENoZQogdm9pZCBET01KSVRDaGVja1N1YkNsYXNzT2Jq
ZWN0OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qp
CiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwotICAgIHB1dERpcmVjdE5hdGl2ZUZ1
bmN0aW9uKHZtLCBnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiZnVu
YyIpLCAwLCBmdW5jdGlvbldpdGhUeXBlQ2hlY2ssIE5vSW50cmluc2ljLCAmRE9NSklUQ2hlY2tT
dWJDbGFzc09iamVjdFNpZ25hdHVyZSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0
cmlidXRlOjpSZWFkT25seSkpOworICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9uKHZtLCBnbG9i
YWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJmdW5jIiksIDAsIGZ1bmN0aW9u
V2l0aFR5cGVDaGVjaywgTm9JbnRyaW5zaWMsICZET01KSVRDaGVja1N1YkNsYXNzT2JqZWN0U2ln
bmF0dXJlLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5
KSk7CiB9CiAKIGNsYXNzIERPTUpJVEdldHRlckJhc2VKU09iamVjdCA6IHB1YmxpYyBET01KSVRO
b2RlIHsKQEAgLTkzMSw3ICs5MzIsNyBAQCBwdWJsaWM6CiAgICAgICAgIHN0YXRpYyBFbmNvZGVk
SlNWYWx1ZSBKSVRfT1BFUkFUSU9OIHNsb3dDYWxsKEV4ZWNTdGF0ZSogZXhlYywgdm9pZCogcG9p
bnRlcikKICAgICAgICAgewogICAgICAgICAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICAg
ICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICAgICAg
ICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgICAgICAgICAg
SlNPYmplY3QqIG9iamVjdCA9IHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4ocG9pbnRlcik7CiAgICAg
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKG9iamVjdC0+Z2V0UHJvdG90eXBlRGlyZWN0
KHZtKSk7CiAgICAgICAgIH0KQEAgLTk3MSw3ICs5NzIsNyBAQCB2b2lkIERPTUpJVEdldHRlckJh
c2VKU09iamVjdDo6ZmluaXNoQ3JlCiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAg
IGNvbnN0IERPTUpJVDo6R2V0dGVyU2V0dGVyKiBkb21KSVQgPSAmRE9NSklUR2V0dGVyQmFzZUpT
T2JqZWN0RE9NSklUOwogICAgIGF1dG8qIGN1c3RvbUdldHRlclNldHRlciA9IERPTUF0dHJpYnV0
ZUdldHRlclNldHRlcjo6Y3JlYXRlKHZtLCBkb21KSVQtPmdldHRlcigpLCBudWxscHRyLCBET01B
dHRyaWJ1dGVBbm5vdGF0aW9uIHsgSlNPYmplY3Q6OmluZm8oKSwgZG9tSklUIH0pOwotICAgIHB1
dERpcmVjdEN1c3RvbUFjY2Vzc29yKHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImN1
c3RvbUdldHRlciIpLCBjdXN0b21HZXR0ZXJTZXR0ZXIsIFByb3BlcnR5QXR0cmlidXRlOjpSZWFk
T25seSB8IFByb3BlcnR5QXR0cmlidXRlOjpDdXN0b21BY2Nlc3Nvcik7CisgICAgcHV0RGlyZWN0
Q3VzdG9tQWNjZXNzb3Iodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJjdXN0b21HZXR0
ZXIiKSwgY3VzdG9tR2V0dGVyU2V0dGVyLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBQ
cm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tQWNjZXNzb3IpOwogfQogCiBjbGFzcyBNZXNzYWdlIDog
cHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPE1lc3NhZ2U+IHsKQEAgLTEwMzUsNyArMTAzNiw3
IEBAIHN0YXRpYyBib29sIGN1c3RvbVNldEFjY2Vzc29yKEV4ZWNTdGF0ZSoKICAgICBSRUxFQVNF
X0FTU0VSVCh2YWx1ZS5pc09iamVjdCgpKTsKICAgICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmpl
Y3QodmFsdWUpOwogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KG9iamVjdCk7Ci0gICAgb2JqZWN0
LT5wdXQob2JqZWN0LCBleGVjLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgInJlc3VsdCIp
LCBKU1ZhbHVlOjpkZWNvZGUodGhpc09iamVjdCksIHNsb3QpOworICAgIG9iamVjdC0+cHV0KG9i
amVjdCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInJlc3VsdCIpLCBKU1ZhbHVl
OjpkZWNvZGUodGhpc09iamVjdCksIHNsb3QpOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC0x
MDUwLDcgKzEwNTEsNyBAQCBzdGF0aWMgYm9vbCBjdXN0b21TZXRWYWx1ZShFeGVjU3RhdGUqIGV4
CiAgICAgUkVMRUFTRV9BU1NFUlQodmFsdWUuaXNPYmplY3QoKSk7CiAgICAgSlNPYmplY3QqIG9i
amVjdCA9IGFzT2JqZWN0KHZhbHVlKTsKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChvYmplY3Qp
OwotICAgIG9iamVjdC0+cHV0KG9iamVjdCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygm
dm0sICJyZXN1bHQiKSwgSlNWYWx1ZTo6ZGVjb2RlKHNsb3RWYWx1ZSksIHNsb3QpOworICAgIG9i
amVjdC0+cHV0KG9iamVjdCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInJlc3Vs
dCIpLCBKU1ZhbHVlOjpkZWNvZGUoc2xvdFZhbHVlKSwgc2xvdCk7CiAKICAgICByZXR1cm4gdHJ1
ZTsKIH0KQEAgLTEwNTksOSArMTA2MCw5IEBAIHZvaWQgSlNUZXN0Q3VzdG9tR2V0dGVyU2V0dGVy
OjpmaW5pc2hDcmUKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAKLSAgICBwdXRE
aXJlY3RDdXN0b21BY2Nlc3Nvcih2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJjdXN0
b21WYWx1ZSIpLAorICAgIHB1dERpcmVjdEN1c3RvbUFjY2Vzc29yKHZtLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCAiY3VzdG9tVmFsdWUiKSwKICAgICAgICAgQ3VzdG9tR2V0dGVyU2V0dGVy
OjpjcmVhdGUodm0sIGN1c3RvbUdldFZhbHVlLCBjdXN0b21TZXRWYWx1ZSksIDApOwotICAgIHB1
dERpcmVjdEN1c3RvbUFjY2Vzc29yKHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImN1
c3RvbUFjY2Vzc29yIiksCisgICAgcHV0RGlyZWN0Q3VzdG9tQWNjZXNzb3Iodm0sIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcodm0sICJjdXN0b21BY2Nlc3NvciIpLAogICAgICAgICBDdXN0b21HZXR0
ZXJTZXR0ZXI6OmNyZWF0ZSh2bSwgY3VzdG9tR2V0QWNjZXNzb3IsIGN1c3RvbVNldEFjY2Vzc29y
KSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpDdXN0b21BY2Nlc3Nv
cikpOwogfQogCkBAIC0xMTM4LDggKzExMzksOCBAQCBwdWJsaWM6CiAgICAgICAgIEJhc2U6OmZp
bmlzaENyZWF0aW9uKHZtKTsKIAogICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
ID0gdGhpcy0+Z2xvYmFsT2JqZWN0KHZtKTsKLSAgICAgICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rp
b24odm0sIGdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJhZGRCeXRl
cyIpLCAwLCBmdW5jdGlvbldhc21TdHJlYW1pbmdQYXJzZXJBZGRCeXRlcywgTm9JbnRyaW5zaWMs
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKLSAg
ICAgICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rpb24odm0sIGdsb2JhbE9iamVjdCwgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZygmdm0sICJmaW5hbGl6ZSIpLCAwLCBmdW5jdGlvbldhc21TdHJlYW1pbmdQ
YXJzZXJGaW5hbGl6ZSwgTm9JbnRyaW5zaWMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0
eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKKyAgICAgICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rpb24o
dm0sIGdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImFkZEJ5dGVzIiks
IDAsIGZ1bmN0aW9uV2FzbVN0cmVhbWluZ1BhcnNlckFkZEJ5dGVzLCBOb0ludHJpbnNpYywgc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOworICAgICAg
ICBwdXREaXJlY3ROYXRpdmVGdW5jdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCAiZmluYWxpemUiKSwgMCwgZnVuY3Rpb25XYXNtU3RyZWFtaW5nUGFyc2Vy
RmluYWxpemUsIE5vSW50cmluc2ljLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRy
aWJ1dGU6OkRvbnRFbnVtKSk7CiAgICAgfQogCiAgICAgREVDTEFSRV9JTkZPOwpAQCAtMTMzMCw3
ICsxMzMxLDcgQEAgc3RhdGljIEZ1bmN0aW9uRXhlY3V0YWJsZSogZ2V0RXhlY3V0YWJsZQogICAg
IGlmICghdGhlRnVuY3Rpb25WYWx1ZS5pc0NlbGwoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAgICAgCi0gICAgVk0mIHZtID0gKnRoZUZ1bmN0aW9uVmFsdWUuYXNDZWxsKCktPnZtKCk7Cisg
ICAgVk0mIHZtID0gdGhlRnVuY3Rpb25WYWx1ZS5hc0NlbGwoKS0+dm0oKTsKICAgICBKU0Z1bmN0
aW9uKiB0aGVGdW5jdGlvbiA9IGpzRHluYW1pY0Nhc3Q8SlNGdW5jdGlvbio+KHZtLCB0aGVGdW5j
dGlvblZhbHVlKTsKICAgICBpZiAoIXRoZUZ1bmN0aW9uKQogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKQEAgLTE0OTgsNyArMTQ5OSw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGZ1bmMKICAgICBXVEY6OlN0cmluZ1ByaW50U3RyZWFtIHN0cmVhbTsKICAgICBpZiAoY29k
ZUJsb2NrKSB7CiAgICAgICAgIHN0cmVhbS5wcmludCgqY29kZUJsb2NrKTsKLSAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyhleGVjLCBzdHJlYW0udG9TdHJpbmcoKSkpOwor
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKGV4ZWMtPnZtKCksIHN0cmVh
bS50b1N0cmluZygpKSk7CiAgICAgfQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CiB9CkBAIC0xNjMxLDcgKzE2MzIsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBmdW5jCiAKICAgICBXVEY6OlN0cmluZ1ByaW50U3RyZWFtIHN0cmVhbTsK
ICAgICBzdHJlYW0ucHJpbnQoSW5kZXhpbmdUeXBlRHVtcChleGVjLT51bmNoZWNrZWRBcmd1bWVu
dCgwKS5nZXRPYmplY3QoKS0+aW5kZXhpbmdNb2RlKCkpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzU3RyaW5nKGV4ZWMsIHN0cmVhbS50b1N0cmluZygpKSk7CisgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1N0cmluZyhleGVjLT52bSgpLCBzdHJlYW0udG9TdHJpbmcoKSkpOwog
fQogCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbklubGluZUNh
cGFjaXR5KEV4ZWNTdGF0ZSogZXhlYykKQEAgLTE2NTQsNyArMTY1NSw3IEBAIHN0YXRpYyBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmMKICAgICAgICAgc3RyZWFtLnByaW50KGV4ZWMt
PnVuY2hlY2tlZEFyZ3VtZW50KGkpKTsKICAgICB9CiAgICAgCi0gICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1N0cmluZyhleGVjLCBzdHJlYW0udG9TdHJpbmcoKSkpOworICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNTdHJpbmcoZXhlYy0+dm0oKSwgc3RyZWFtLnRvU3RyaW5nKCkpKTsK
IH0KIAogLy8gR2V0cyB0aGUgcGlkIG9mIHRoZSBjdXJyZW50IHByb2Nlc3MuCkBAIC0xODYwLDcg
KzE4NjEsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jCiAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAKICAgICBjb25z
dCBTb3VyY2VDb2RlJiBzb3VyY2UgPSBtYWtlU291cmNlKGZ1bmN0aW9uVGV4dCwgeyB9KTsKLSAg
ICBKU0Z1bmN0aW9uKiBmdW5jID0gSlNGdW5jdGlvbjo6Y3JlYXRlKHZtLCBjcmVhdGVCdWlsdGlu
RXhlY3V0YWJsZSh2bSwgc291cmNlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImZvbyIp
LCBDb25zdHJ1Y3RvcktpbmQ6Ok5vbmUsIENvbnN0cnVjdEFiaWxpdHk6OkNhbm5vdENvbnN0cnVj
dCktPmxpbmsodm0sIG51bGxwdHIsIHNvdXJjZSksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3Qo
KSk7CisgICAgSlNGdW5jdGlvbiogZnVuYyA9IEpTRnVuY3Rpb246OmNyZWF0ZSh2bSwgY3JlYXRl
QnVpbHRpbkV4ZWN1dGFibGUodm0sIHNvdXJjZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwg
ImZvbyIpLCBDb25zdHJ1Y3RvcktpbmQ6Ok5vbmUsIENvbnN0cnVjdEFiaWxpdHk6OkNhbm5vdENv
bnN0cnVjdCktPmxpbmsodm0sIG51bGxwdHIsIHNvdXJjZSksIGV4ZWMtPmxleGljYWxHbG9iYWxP
YmplY3QoKSk7CiAKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGZ1bmMpOwogfQpAQCAtMTg3
NSw3ICsxODc2LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuYwog
CiAgICAgU3RyaW5nIHN0ciA9IGFzU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDEpKS0+dmFsdWUoZXhl
Yyk7CiAKLSAgICBTeW1ib2xJbXBsKiBzeW1ib2wgPSB2bS5wcm9wZXJ0eU5hbWVzLT5sb29rVXBQ
cml2YXRlTmFtZShJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsIHN0cikpOworICAgIFN5bWJv
bEltcGwqIHN5bWJvbCA9IHZtLnByb3BlcnR5TmFtZXMtPmxvb2tVcFByaXZhdGVOYW1lKElkZW50
aWZpZXI6OmZyb21TdHJpbmcodm0sIHN0cikpOwogICAgIGlmICghc3ltYm9sKQogICAgICAgICBy
ZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIHNjb3BlLCAiVW5rbm93biBwcml2YXRlIG5hbWUuIik7
CiAKQEAgLTIyMjksMTMgKzIyMzAsMTMgQEAgdm9pZCBKU0RvbGxhclZNOjpmaW5pc2hDcmVhdGlv
bihWTSYgdm0pCiAgICAgYWRkRnVuY3Rpb24odm0sICJjcmFzaCIsIGZ1bmN0aW9uQ3Jhc2gsIDAp
OwogICAgIGFkZEZ1bmN0aW9uKHZtLCAiYnJlYWtwb2ludCIsIGZ1bmN0aW9uQnJlYWtwb2ludCwg
MCk7CiAKLSAgICBwdXREaXJlY3ROYXRpdmVGdW5jdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImRmZ1RydWUiKSwgMCwgZnVuY3Rpb25ERkdUcnVlLCBE
RkdUcnVlSW50cmluc2ljLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6
OkRvbnRFbnVtKSk7Ci0gICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rpb24odm0sIGdsb2JhbE9iamVj
dCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJmdGxUcnVlIiksIDAsIGZ1bmN0aW9uRlRM
VHJ1ZSwgRlRMVHJ1ZUludHJpbnNpYywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0
cmlidXRlOjpEb250RW51bSkpOworICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9uKHZtLCBnbG9i
YWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJkZmdUcnVlIiksIDAsIGZ1bmN0
aW9uREZHVHJ1ZSwgREZHVHJ1ZUludHJpbnNpYywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3Bl
cnR5QXR0cmlidXRlOjpEb250RW51bSkpOworICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9uKHZt
LCBnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJmdGxUcnVlIiksIDAs
IGZ1bmN0aW9uRlRMVHJ1ZSwgRlRMVHJ1ZUludHJpbnNpYywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOwogCi0gICAgcHV0RGlyZWN0TmF0aXZlRnVu
Y3Rpb24odm0sIGdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJjcHVN
ZmVuY2UiKSwgMCwgZnVuY3Rpb25DcHVNZmVuY2UsIENQVU1mZW5jZUludHJpbnNpYywgMCk7Ci0g
ICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rpb24odm0sIGdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZygmdm0sICJjcHVSZHRzYyIpLCAwLCBmdW5jdGlvbkNwdVJkdHNjLCBDUFVSZHRz
Y0ludHJpbnNpYywgMCk7Ci0gICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rpb24odm0sIGdsb2JhbE9i
amVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJjcHVDcHVpZCIpLCAwLCBmdW5jdGlv
bkNwdUNwdWlkLCBDUFVDcHVpZEludHJpbnNpYywgMCk7Ci0gICAgcHV0RGlyZWN0TmF0aXZlRnVu
Y3Rpb24odm0sIGdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJjcHVQ
YXVzZSIpLCAwLCBmdW5jdGlvbkNwdVBhdXNlLCBDUFVQYXVzZUludHJpbnNpYywgMCk7CisgICAg
cHV0RGlyZWN0TmF0aXZlRnVuY3Rpb24odm0sIGdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyh2bSwgImNwdU1mZW5jZSIpLCAwLCBmdW5jdGlvbkNwdU1mZW5jZSwgQ1BVTWZlbmNl
SW50cmluc2ljLCAwKTsKKyAgICBwdXREaXJlY3ROYXRpdmVGdW5jdGlvbih2bSwgZ2xvYmFsT2Jq
ZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiY3B1UmR0c2MiKSwgMCwgZnVuY3Rpb25D
cHVSZHRzYywgQ1BVUmR0c2NJbnRyaW5zaWMsIDApOworICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0
aW9uKHZtLCBnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJjcHVDcHVp
ZCIpLCAwLCBmdW5jdGlvbkNwdUNwdWlkLCBDUFVDcHVpZEludHJpbnNpYywgMCk7CisgICAgcHV0
RGlyZWN0TmF0aXZlRnVuY3Rpb24odm0sIGdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZyh2bSwgImNwdVBhdXNlIiksIDAsIGZ1bmN0aW9uQ3B1UGF1c2UsIENQVVBhdXNlSW50cmlu
c2ljLCAwKTsKICAgICBhZGRGdW5jdGlvbih2bSwgImNwdUNsZmx1c2giLCBmdW5jdGlvbkNwdUNs
Zmx1c2gsIDIpOwogCiAgICAgYWRkRnVuY3Rpb24odm0sICJsbGludFRydWUiLCBmdW5jdGlvbkxM
aW50VHJ1ZSwgMCk7CkBAIC0yMzM0LDEzICsyMzM1LDEzIEBAIHZvaWQgSlNEb2xsYXJWTTo6Zmlu
aXNoQ3JlYXRpb24oVk0mIHZtKQogCiB2b2lkIEpTRG9sbGFyVk06OmFkZEZ1bmN0aW9uKFZNJiB2
bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgY2hhciogbmFtZSwgTmF0aXZl
RnVuY3Rpb24gZnVuY3Rpb24sIHVuc2lnbmVkIGFyZ3VtZW50cykKIHsKLSAgICBJZGVudGlmaWVy
IGlkZW50aWZpZXIgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgbmFtZSk7CisgICAgSWRl
bnRpZmllciBpZGVudGlmaWVyID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgbmFtZSk7CiAg
ICAgcHV0RGlyZWN0KHZtLCBpZGVudGlmaWVyLCBKU0Z1bmN0aW9uOjpjcmVhdGUodm0sIGdsb2Jh
bE9iamVjdCwgYXJndW1lbnRzLCBpZGVudGlmaWVyLnN0cmluZygpLCBmdW5jdGlvbikpOwogfQog
CiB2b2lkIEpTRG9sbGFyVk06OmFkZENvbnN0cnVjdGlibGVGdW5jdGlvbihWTSYgdm0sIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IGNoYXIqIG5hbWUsIE5hdGl2ZUZ1bmN0aW9u
IGZ1bmN0aW9uLCB1bnNpZ25lZCBhcmd1bWVudHMpCiB7Ci0gICAgSWRlbnRpZmllciBpZGVudGlm
aWVyID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIG5hbWUpOworICAgIElkZW50aWZpZXIg
aWRlbnRpZmllciA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIG5hbWUpOwogICAgIHB1dERp
cmVjdCh2bSwgaWRlbnRpZmllciwgSlNGdW5jdGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3Qs
IGFyZ3VtZW50cywgaWRlbnRpZmllci5zdHJpbmcoKSwgZnVuY3Rpb24sIE5vSW50cmluc2ljLCBm
dW5jdGlvbikpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvVk1JbnNw
ZWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9WTUlu
c3BlY3Rvci5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90
b29scy9WTUluc3BlY3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3NCw3ICszNzQsNyBAQCB2
b2lkIFZNSW5zcGVjdG9yOjpkdW1wUmVnaXN0ZXJzKENhbGxGcmFtCiAgICAgICAgIGRhdGFMb2co
IkR1bXBpbmcgaG9zdCBmcmFtZSByZWdpc3RlcnMgbm90IHN1cHBvcnRlZC5cbiIpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQotICAgIFZNJiB2bSA9ICpjb2RlQmxvY2stPnZtKCk7CisgICAgVk0m
IHZtID0gY29kZUJsb2NrLT52bSgpOwogICAgIGF1dG8gdmFsdWVBc1N0cmluZyA9IFsmXSAoSlNW
YWx1ZSB2KSAtPiBDU3RyaW5nIHsKICAgICAgICAgaWYgKCF2LmlzQ2VsbCgpIHx8IFZNSW5zcGVj
dG9yOjppc1ZhbGlkQ2VsbCgmdm0uaGVhcCwgcmVpbnRlcnByZXRfY2FzdDxKU0NlbGwqPihKU1Zh
bHVlOjplbmNvZGUodikpKSkKICAgICAgICAgICAgIHJldHVybiB0b0NTdHJpbmcodik7CkBAIC00
OTcsNyArNDk3LDcgQEAgcHJpdmF0ZToKIAogdm9pZCBWTUluc3BlY3Rvcjo6ZHVtcENlbGxNZW1v
cnlUb1N0cmVhbShKU0NlbGwqIGNlbGwsIFByaW50U3RyZWFtJiBvdXQpCiB7Ci0gICAgVk0mIHZt
ID0gKmNlbGwtPnZtKCk7CisgICAgVk0mIHZtID0gY2VsbC0+dm0oKTsKICAgICBTdHJ1Y3R1cmVJ
RCBzdHJ1Y3R1cmVJRCA9IGNlbGwtPnN0cnVjdHVyZUlEKCk7CiAgICAgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUgPSBjZWxsLT5zdHJ1Y3R1cmUodm0pOwogICAgIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5
cGVBbmRNaXNjID0gY2VsbC0+aW5kZXhpbmdUeXBlQW5kTWlzYygpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUluc3RhbmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtSW5zdGFuY2UuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtSW5zdGFuY2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTc5LDcgKzc5LDcgQEAgc2l6ZV90IEluc3RhbmNlOjpleHRyYU1lbW9yeUFsbG9jYXRlZCgp
IAogdm9pZCBJbnN0YW5jZTo6c2V0R2xvYmFsKHVuc2lnbmVkIGksIEpTVmFsdWUgdmFsdWUpCiB7
CiAgICAgQVNTRVJUKG1fb3duZXIpOwotICAgIG1fZ2xvYmFscy5nZXQoKVtpXS5hbnlyZWYuc2V0
KCpvd25lcjxKU1dlYkFzc2VtYmx5SW5zdGFuY2U+KCktPnZtKCksIG93bmVyPEpTV2ViQXNzZW1i
bHlJbnN0YW5jZT4oKSwgdmFsdWUpOworICAgIG1fZ2xvYmFscy5nZXQoKVtpXS5hbnlyZWYuc2V0
KG93bmVyPEpTV2ViQXNzZW1ibHlJbnN0YW5jZT4oKS0+dm0oKSwgb3duZXI8SlNXZWJBc3NlbWJs
eUluc3RhbmNlPigpLCB2YWx1ZSk7CiB9CiAKIEpTVmFsdWUgSW5zdGFuY2U6OmdldEZ1bmN0aW9u
V3JhcHBlcih1bnNpZ25lZCBpKSBjb25zdApAQCAtOTMsMTAgKzkzLDEwIEBAIEpTVmFsdWUgSW5z
dGFuY2U6OmdldEZ1bmN0aW9uV3JhcHBlcih1bnMKIHZvaWQgSW5zdGFuY2U6OnNldEZ1bmN0aW9u
V3JhcHBlcih1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlKQogewogICAgIEFTU0VSVChtX293bmVy
KTsKLSAgICBBU1NFUlQodmFsdWUuaXNGdW5jdGlvbigqb3duZXI8SlNXZWJBc3NlbWJseUluc3Rh
bmNlPigpLT52bSgpKSk7CisgICAgQVNTRVJUKHZhbHVlLmlzRnVuY3Rpb24ob3duZXI8SlNXZWJB
c3NlbWJseUluc3RhbmNlPigpLT52bSgpKSk7CiAgICAgQVNTRVJUKCFtX2Z1bmN0aW9uV3JhcHBl
cnMuY29udGFpbnMoaSkpOwogICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sob3duZXI8SlNXZWJB
c3NlbWJseUluc3RhbmNlPigpLT5jZWxsTG9jaygpKTsKLSAgICBtX2Z1bmN0aW9uV3JhcHBlcnMu
c2V0KGksIFdyaXRlQmFycmllcjxVbmtub3duPigqb3duZXI8SlNXZWJBc3NlbWJseUluc3RhbmNl
PigpLT52bSgpLCBvd25lcjxKU1dlYkFzc2VtYmx5SW5zdGFuY2U+KCksIHZhbHVlKSk7CisgICAg
bV9mdW5jdGlvbldyYXBwZXJzLnNldChpLCBXcml0ZUJhcnJpZXI8VW5rbm93bj4ob3duZXI8SlNX
ZWJBc3NlbWJseUluc3RhbmNlPigpLT52bSgpLCBvd25lcjxKU1dlYkFzc2VtYmx5SW5zdGFuY2U+
KCksIHZhbHVlKSk7CiAgICAgQVNTRVJUKGdldEZ1bmN0aW9uV3JhcHBlcihpKSA9PSB2YWx1ZSk7
CiB9CiAKQEAgLTE0Myw3ICsxNDMsNyBAQCBib29sIHNldFdhc21UYWJsZUVsZW1lbnQoSW5zdGFu
Y2UqIGluc3RhCiAgICAgICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24qIHdhc21GdW5jdGlvbjsKICAg
ICAgICAgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24qIHdhc21XcmFwcGVyRnVuY3Rpb247CiAK
LSAgICAgICAgaWYgKGlzV2ViQXNzZW1ibHlIb3N0RnVuY3Rpb24oKmluc3RhbmNlLT5vd25lcjxK
U09iamVjdD4oKS0+dm0oKSwgdmFsdWUsIHdhc21GdW5jdGlvbiwgd2FzbVdyYXBwZXJGdW5jdGlv
bikpIHsKKyAgICAgICAgaWYgKGlzV2ViQXNzZW1ibHlIb3N0RnVuY3Rpb24oaW5zdGFuY2UtPm93
bmVyPEpTT2JqZWN0PigpLT52bSgpLCB2YWx1ZSwgd2FzbUZ1bmN0aW9uLCB3YXNtV3JhcHBlckZ1
bmN0aW9uKSkgewogICAgICAgICAgICAgQVNTRVJUKCEhd2FzbUZ1bmN0aW9uIHx8ICEhd2FzbVdy
YXBwZXJGdW5jdGlvbik7CiAgICAgICAgICAgICBpZiAod2FzbUZ1bmN0aW9uKQogICAgICAgICAg
ICAgICAgIGluc3RhbmNlLT50YWJsZSh0YWJsZUluZGV4KS0+YXNGdW5jcmVmVGFibGUoKS0+c2V0
RnVuY3Rpb24oaW5kZXgsIGpzQ2FzdDxKU09iamVjdCo+KHZhbHVlKSwgd2FzbUZ1bmN0aW9uLT5p
bXBvcnRhYmxlRnVuY3Rpb24oKSwgJndhc21GdW5jdGlvbi0+aW5zdGFuY2UoKS0+aW5zdGFuY2Uo
KSk7CkBAIC0xOTYsNyArMTk2LDcgQEAgYm9vbCBkb1dhc21UYWJsZUZpbGwoSW5zdGFuY2UqIGlu
c3RhbmNlLAogRW5jb2RlZEpTVmFsdWUgZG9XYXNtUmVmRnVuYyhJbnN0YW5jZSogaW5zdGFuY2Us
IHVpbnQzMl90IGluZGV4KQogewogICAgIEpTVmFsdWUgdmFsdWUgPSBpbnN0YW5jZS0+Z2V0RnVu
Y3Rpb25XcmFwcGVyKGluZGV4KTsKLSAgICBBU1NFUlQodmFsdWUuaXNGdW5jdGlvbigqaW5zdGFu
Y2UtPm93bmVyPEpTT2JqZWN0PigpLT52bSgpKSk7CisgICAgQVNTRVJUKHZhbHVlLmlzRnVuY3Rp
b24oaW5zdGFuY2UtPm93bmVyPEpTT2JqZWN0PigpLT52bSgpKSk7CiAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZSh2YWx1ZSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21UYWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbVRhYmxlLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbVRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE0OSw3ICsxNDksNyBAQCB2
b2lkIFRhYmxlOjpzZXQodWludDMyX3QgaW5kZXgsIEpTVmFsdWUgCiAgICAgUkVMRUFTRV9BU1NF
UlQoaXNBbnlyZWZUYWJsZSgpKTsKICAgICBSRUxFQVNFX0FTU0VSVChtX293bmVyKTsKICAgICBj
bGVhcihpbmRleCk7Ci0gICAgbV9qc1ZhbHVlcy5nZXQoKVtpbmRleCAmIG1fbWFza10uc2V0KCpt
X293bmVyLT52bSgpLCBtX293bmVyLCB2YWx1ZSk7CisgICAgbV9qc1ZhbHVlcy5nZXQoKVtpbmRl
eCAmIG1fbWFza10uc2V0KG1fb3duZXItPnZtKCksIG1fb3duZXIsIHZhbHVlKTsKIH0KIAogSlNW
YWx1ZSBUYWJsZTo6Z2V0KHVpbnQzMl90IGluZGV4KSBjb25zdApAQCAtMTkzLDcgKzE5Myw3IEBA
IHZvaWQgRnVuY1JlZlRhYmxlOjpzZXRGdW5jdGlvbih1aW50MzJfdCAKICAgICBSRUxFQVNFX0FT
U0VSVChtX293bmVyKTsKICAgICBjbGVhcihpbmRleCk7CiAgICAgaWYgKG9wdGlvbmFsV3JhcHBl
cikKLSAgICAgICAgbV9qc1ZhbHVlcy5nZXQoKVtpbmRleCAmIG1fbWFza10uc2V0KCptX293bmVy
LT52bSgpLCBtX293bmVyLCBvcHRpb25hbFdyYXBwZXIpOworICAgICAgICBtX2pzVmFsdWVzLmdl
dCgpW2luZGV4ICYgbV9tYXNrXS5zZXQobV9vd25lci0+dm0oKSwgbV9vd25lciwgb3B0aW9uYWxX
cmFwcGVyKTsKICAgICBtX2ltcG9ydGFibGVGdW5jdGlvbnMuZ2V0KClbaW5kZXggJiBtX21hc2td
ID0gZnVuY3Rpb247CiAgICAgbV9pbnN0YW5jZXMuZ2V0KClbaW5kZXggJiBtX21hc2tdID0gaW5z
dGFuY2U7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dl
YkFzc2VtYmx5LmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvSlNXZWJBc3NlbWJseS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xOTYsOCArMTk2
LDggQEAgc3RhdGljIHZvaWQgcmVzb2x2ZShWTSYgdm0sIEV4ZWNTdGF0ZSogZQogICAgICAgICBw
cm9taXNlLT5yZXNvbHZlKGV4ZWMsIG1vZHVsZVJlY29yZCk7CiAgICAgfSBlbHNlIHsKICAgICAg
ICAgSlNPYmplY3QqIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMpOwotICAgICAg
ICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJtb2R1
bGUiX3MpLCBtb2R1bGUpOwotICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZygmdm0sICJpbnN0YW5jZSJfcyksIGluc3RhbmNlKTsKKyAgICAgICAgcmVz
dWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJtb2R1bGUiX3Mp
LCBtb2R1bGUpOworICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyh2bSwgImluc3RhbmNlIl9zKSwgaW5zdGFuY2UpOwogICAgICAgICBwcm9taXNlLT5y
ZXNvbHZlKGV4ZWMsIHJlc3VsdCk7CiAgICAgfQogICAgIENMRUFSX0FORF9SRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCB2b2lkKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuY3BwCShyZXZpc2lvbiAyNDkx
MjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFu
Y2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDAsOCArMjAwLDggQEAgSlNXZWJBc3NlbWJseUlu
c3RhbmNlKiBKU1dlYkFzc2VtYmx5SW5zdAogCiAgICAgLy8gRm9yIGVhY2ggaW1wb3J0IGkgaW4g
bW9kdWxlLmltcG9ydHM6CiAgICAgZm9yIChhdXRvJiBpbXBvcnQgOiBtb2R1bGVJbmZvcm1hdGlv
bi5pbXBvcnRzKSB7Ci0gICAgICAgIElkZW50aWZpZXIgbW9kdWxlTmFtZSA9IElkZW50aWZpZXI6
OmZyb21TdHJpbmcoJnZtLCBTdHJpbmc6OmZyb21VVEY4KGltcG9ydC5tb2R1bGUpKTsKLSAgICAg
ICAgSWRlbnRpZmllciBmaWVsZE5hbWUgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgU3Ry
aW5nOjpmcm9tVVRGOChpbXBvcnQuZmllbGQpKTsKKyAgICAgICAgSWRlbnRpZmllciBtb2R1bGVO
YW1lID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgU3RyaW5nOjpmcm9tVVRGOChpbXBvcnQu
bW9kdWxlKSk7CisgICAgICAgIElkZW50aWZpZXIgZmllbGROYW1lID0gSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyh2bSwgU3RyaW5nOjpmcm9tVVRGOChpbXBvcnQuZmllbGQpKTsKICAgICAgICAgbW9k
dWxlUmVjb3JkLT5hcHBlbmRSZXF1ZXN0ZWRNb2R1bGUobW9kdWxlTmFtZSk7CiAgICAgICAgIG1v
ZHVsZVJlY29yZC0+YWRkSW1wb3J0RW50cnkoV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OkltcG9y
dEVudHJ5IHsKICAgICAgICAgICAgIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpJbXBvcnRFbnRy
eVR5cGU6OlNpbmdsZSwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dhc21U
b0pTLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XYXNt
VG9KUy5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL1dhc21Ub0pTLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTIsMTggKzkyLDE4IEBAIHN0YXRp
YyBFeHBlY3RlZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8V2EKICAgICAgICAgaml0Lmp1bXBUb0V4
Y2VwdGlvbkhhbmRsZXIoKnZtKTsKIAogICAgICAgICB2b2lkICgqdGhyb3dCYWRJNjQpKEV4ZWNT
dGF0ZSosIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSopID0gW10gKEV4ZWNTdGF0ZSogZXhlYywgSlNX
ZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSkgLT4gdm9pZCB7Ci0gICAgICAgICAgICBWTSog
dm0gPSAmZXhlYy0+dm0oKTsKKyAgICAgICAgICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAg
ICAgICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKIAogICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUoKnZtKTsKLSAgICAgICAgICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
ID0gaW5zdGFuY2UtPmdsb2JhbE9iamVjdCgqdm0pOwotICAgICAgICAgICAgICAgIGF1dG8qIGVy
cm9yID0gRXJyb3JJbnN0YW5jZTo6Y3JlYXRlKGV4ZWMsICp2bSwgZ2xvYmFsT2JqZWN0LT5lcnJv
clN0cnVjdHVyZShFcnJvclR5cGU6OlR5cGVFcnJvciksICJpNjQgbm90IGFsbG93ZWQgYXMgcmV0
dXJuIHR5cGUgb3IgYXJndW1lbnQgdG8gYW4gaW1wb3J0ZWQgZnVuY3Rpb24iX3MpOworICAgICAg
ICAgICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAg
ICAgICAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBpbnN0YW5jZS0+Z2xv
YmFsT2JqZWN0KHZtKTsKKyAgICAgICAgICAgICAgICBhdXRvKiBlcnJvciA9IEVycm9ySW5zdGFu
Y2U6OmNyZWF0ZShleGVjLCB2bSwgZ2xvYmFsT2JqZWN0LT5lcnJvclN0cnVjdHVyZShFcnJvclR5
cGU6OlR5cGVFcnJvciksICJpNjQgbm90IGFsbG93ZWQgYXMgcmV0dXJuIHR5cGUgb3IgYXJndW1l
bnQgdG8gYW4gaW1wb3J0ZWQgZnVuY3Rpb24iX3MpOwogICAgICAgICAgICAgICAgIHRocm93RXhj
ZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGVycm9yKTsKICAgICAgICAgICAgIH0KIAogICAgICAg
ICAgICAgZ2VuZXJpY1Vud2luZCh2bSwgZXhlYyk7Ci0gICAgICAgICAgICBBU1NFUlQoISF2bS0+
Y2FsbEZyYW1lRm9yQ2F0Y2gpOworICAgICAgICAgICAgQVNTRVJUKCEhdm0uY2FsbEZyYW1lRm9y
Q2F0Y2gpOwogICAgICAgICB9OwogCiAgICAgICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcihqaXQs
IEdMT0JBTF9USFVOS19JRCwgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKQEAgLTIyNiw5ICsyMjYs
OSBAQCBFeHBlY3RlZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8V2FzbUVudHJ5CiAKICAgICAgICAg
dWludDY0X3QgKCpjYWxsRnVuYykoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBTaWduYXR1cmVJbmRl
eCwgdWludDY0X3QqKSA9CiAgICAgICAgICAgICBbXSAoRXhlY1N0YXRlKiBleGVjLCBKU09iamVj
dCogY2FsbGVlLCBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCwgdWludDY0X3QqIGJ1ZmZl
cikgLT4gdWludDY0X3QgeyAKLSAgICAgICAgICAgICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsK
KyAgICAgICAgICAgICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgICAgICAgICAgICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwotICAgICAgICAgICAgICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKKyAgICAgICAgICAgICAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICAgICAgICAg
ICAgICBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpn
ZXQoc2lnbmF0dXJlSW5kZXgpOwogICAgICAgICAgICAgICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVy
IGFyZ3M7CiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBhcmdOdW0gPSAwOyBhcmdOdW0g
PCBzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpOyArK2FyZ051bSkgewpAQCAtMjQ0LDcgKzI0NCw3
IEBAIEV4cGVjdGVkPE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxXYXNtRW50cnkKICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICBjYXNlIEZ1bmNyZWY6IHsK
ICAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IEpTVmFsdWU6OmRlY29kZShidWZmZXJbYXJn
TnVtXSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoaXNXZWJBc3NlbWJseUhvc3RG
dW5jdGlvbigqdm0sIGFyZykgfHwgYXJnLmlzTnVsbCgpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIEFTU0VSVChpc1dlYkFzc2VtYmx5SG9zdEZ1bmN0aW9uKHZtLCBhcmcpIHx8IGFyZy5pc051
bGwoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgICBjYXNlIEFueXJlZjoKQEAgLTI2Myw3ICsyNjMsNyBA
QCBFeHBlY3RlZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8V2FzbUVudHJ5CiAgICAgICAgICAgICAg
ICAgfQogCiAgICAgICAgICAgICAgICAgQ2FsbERhdGEgY2FsbERhdGE7Ci0gICAgICAgICAgICAg
ICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBjYWxsZWUtPm1ldGhvZFRhYmxlKCp2bSktPmdldENhbGxE
YXRhKGNhbGxlZSwgY2FsbERhdGEpOworICAgICAgICAgICAgICAgIENhbGxUeXBlIGNhbGxUeXBl
ID0gY2FsbGVlLT5tZXRob2RUYWJsZSh2bSktPmdldENhbGxEYXRhKGNhbGxlZSwgY2FsbERhdGEp
OwogICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxUeXBlICE9IENhbGxUeXBlOjpO
b25lKTsKICAgICAgICAgICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGNhbGwoZXhlYywgY2FsbGVl
LCBjYWxsVHlwZSwgY2FsbERhdGEsIGpzVW5kZWZpbmVkKCksIGFyZ3MpOwogICAgICAgICAgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgMCk7CkBAIC0yODIsNyArMjgyLDcg
QEAgRXhwZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFdhc21FbnRyeQogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICBjYXNlIEZ1bmNyZWY6IHsKICAgICAgICAgICAgICAgICAg
ICAgcmVhbFJlc3VsdCA9IEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwotICAgICAgICAgICAgICAg
ICAgICBBU1NFUlQocmVzdWx0LmlzRnVuY3Rpb24oKnZtKSB8fCByZXN1bHQuaXNOdWxsKCkpOwor
ICAgICAgICAgICAgICAgICAgICBBU1NFUlQocmVzdWx0LmlzRnVuY3Rpb24odm0pIHx8IHJlc3Vs
dC5pc051bGwoKSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICBjYXNlIEFueXJlZjogewpAQCAtMzE3LDEwICszMTcsMTAgQEAg
RXhwZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFdhc21FbnRyeQogICAgICAgICBqaXQuY29w
eUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0tPnRvcEVudHJ5RnJh
bWUpOwogICAgICAgICBqaXQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5m
bzo6YXJndW1lbnRHUFIwKTsKICAgICAgICAgdm9pZCAoKmRvVW53aW5kaW5nKShFeGVjU3RhdGUq
KSA9IFtdIChFeGVjU3RhdGUqIGV4ZWMpIC0+IHZvaWQgewotICAgICAgICAgICAgVk0qIHZtID0g
JmV4ZWMtPnZtKCk7CisgICAgICAgICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgICAgICAg
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgICAgICAgICBn
ZW5lcmljVW53aW5kKHZtLCBleGVjKTsKLSAgICAgICAgICAgIEFTU0VSVCghIXZtLT5jYWxsRnJh
bWVGb3JDYXRjaCk7CisgICAgICAgICAgICBBU1NFUlQoISF2bS5jYWxsRnJhbWVGb3JDYXRjaCk7
CiAgICAgICAgIH07CiAgICAgICAgIGF1dG8gZXhjZXB0aW9uQ2FsbCA9IGppdC5jYWxsKE9wZXJh
dGlvblB0clRhZyk7CiAgICAgICAgIGppdC5qdW1wVG9FeGNlcHRpb25IYW5kbGVyKCp2bSk7CkBA
IC01MzYsNyArNTM2LDcgQEAgRXhwZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFdhc21FbnRy
eQogICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dQYXRoOwogCiAgICAgICAgIGlu
dDMyX3QgKCpjb252ZXJ0VG9JMzIpKEV4ZWNTdGF0ZSosIEpTVmFsdWUpID0gW10gKEV4ZWNTdGF0
ZSogZXhlYywgSlNWYWx1ZSB2KSAtPiBpbnQzMl90IHsKLSAgICAgICAgICAgIFZNKiB2bSA9ICZl
eGVjLT52bSgpOworICAgICAgICAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICAgICAgICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgICAgICAgICAgcmV0
dXJuIHYudG9JbnQzMihleGVjKTsKICAgICAgICAgfTsKQEAgLTU2NSw3ICs1NjUsNyBAQCBFeHBl
Y3RlZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8V2FzbUVudHJ5CiAgICAgICAgIENDYWxsSGVscGVy
czo6SnVtcExpc3QgZG9uZTsKIAogICAgICAgICBmbG9hdCAoKmNvbnZlcnRUb0YzMikoRXhlY1N0
YXRlKiwgSlNWYWx1ZSkgPSBbXSAoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHYpIC0+IGZsb2F0
IHsKLSAgICAgICAgICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgICAgICAgICAgVk0mIHZt
ID0gZXhlYy0+dm0oKTsKICAgICAgICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
dm0sIGV4ZWMpOwogICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0Pih2LnRvTnVt
YmVyKGV4ZWMpKTsKICAgICAgICAgfTsKQEAgLTYwMCw3ICs2MDAsNyBAQCBFeHBlY3RlZDxNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8V2FzbUVudHJ5CiAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcExp
c3QgZG9uZTsKIAogICAgICAgICBkb3VibGUgKCpjb252ZXJ0VG9GNjQpKEV4ZWNTdGF0ZSosIEpT
VmFsdWUpID0gW10gKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2KSAtPiBkb3VibGUgewotICAg
ICAgICAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgICAgICAgICBWTSYgdm0gPSBleGVj
LT52bSgpOwogICAgICAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhl
Yyk7CiAgICAgICAgICAgICByZXR1cm4gdi50b051bWJlcihleGVjKTsKICAgICAgICAgfTsKQEAg
LTY0MywxMCArNjQzLDEwIEBAIEV4cGVjdGVkPE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxXYXNtRW50
cnkKICAgICAgICAgaml0Lmp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIoKnZtKTsKIAogICAgICAgICB2
b2lkICgqZG9VbndpbmRpbmcpKEV4ZWNTdGF0ZSopID0gW10gKEV4ZWNTdGF0ZSogZXhlYykgLT4g
dm9pZCB7Ci0gICAgICAgICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICAgICAgICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgICAgICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKHZtLCBleGVjKTsKICAgICAgICAgICAgIGdlbmVyaWNVbndpbmQodm0sIGV4ZWMpOwotICAg
ICAgICAgICAgQVNTRVJUKCEhdm0tPmNhbGxGcmFtZUZvckNhdGNoKTsKKyAgICAgICAgICAgIEFT
U0VSVCghIXZtLmNhbGxGcmFtZUZvckNhdGNoKTsKICAgICAgICAgfTsKIAogICAgICAgICBqaXQu
YWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CkBAIC02ODcsNyArNjg3
LDcgQEAgdm9pZCogd2FzbVRvSlNFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLAogICAgICAgICB0
aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBlcnJvcik7CiAgICAgfQogCi0gICAgZ2Vu
ZXJpY1Vud2luZCgmdm0sIGV4ZWMpOworICAgIGdlbmVyaWNVbndpbmQodm0sIGV4ZWMpOwogICAg
IEFTU0VSVCghIXZtLmNhbGxGcmFtZUZvckNhdGNoKTsKICAgICBBU1NFUlQoISF2bS50YXJnZXRN
YWNoaW5lUENGb3JUaHJvdyk7CiAgICAgLy8gRklYTUU6IFdlIGNvdWxkIG1ha2UgdGhpcyBiZXR0
ZXI6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0
aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJB
c3NlbWJseUZ1bmN0aW9uLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0yMTAsNyArMjEwLDcgQEAgV2FzbTo6SW5zdGFuY2UqIFdlYkFzc2VtYmx5RnVuY3Rpb246OnBy
ZQogCiBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gV2ViQXNzZW1ibHlGdW5j
dGlvbjo6anNDYWxsRW50cnlwb2ludFNsb3coKQogewotICAgIFZNJiB2bSA9ICp0aGlzLT52bSgp
OworICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAg
IGNvbnN0IGF1dG8mIHNpZ25hdHVyZSA9IFdhc206OlNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQo
c2lnbmF0dXJlSW5kZXgoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9X
ZWJBc3NlbWJseU1lbW9yeUNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1lbW9yeUNvbnN0cnVjdG9yLmNwcAkocmV2
aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1i
bHlNZW1vcnlDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02NSw3ICs2NSw3IEBA
IHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnMKIAogICAgIFdhc206OlBh
Z2VDb3VudCBpbml0aWFsUGFnZUNvdW50OwogICAgIHsKLSAgICAgICAgSWRlbnRpZmllciBpbml0
aWFsID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJpbml0aWFsIik7CisgICAgICAgIElk
ZW50aWZpZXIgaW5pdGlhbCA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJpbml0aWFsIik7
CiAgICAgICAgIEpTVmFsdWUgbWluU2l6ZVZhbHVlID0gbWVtb3J5RGVzY3JpcHRvci0+Z2V0KGV4
ZWMsIGluaXRpYWwpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVu
Y29kZWRKU1ZhbHVlKCkpOwogICAgICAgICB1aW50MzJfdCBzaXplID0gdG9Ob25XcmFwcGluZ1Vp
bnQzMihleGVjLCBtaW5TaXplVmFsdWUpOwpAQCAtODEsNyArODEsNyBAQCBzdGF0aWMgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zCiAgICAgewogICAgICAgICAvLyBJbiBXZWJJREws
ICJwcmVzZW50IiBtZWFucyB0aGF0IFtbR2V0XV0gcmVzdWx0IGlzIHVuZGVmaW5lZCwgbm90IFtb
SGFzUHJvcGVydHldXSByZXN1bHQuCiAgICAgICAgIC8vIGh0dHBzOi8vaGV5Y2FtLmdpdGh1Yi5p
by93ZWJpZGwvI2lkbC1kaWN0aW9uYXJpZXMKLSAgICAgICAgSWRlbnRpZmllciBtYXhpbXVtID0g
SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJtYXhpbXVtIik7CisgICAgICAgIElkZW50aWZp
ZXIgbWF4aW11bSA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJtYXhpbXVtIik7CiAgICAg
ICAgIEpTVmFsdWUgbWF4U2l6ZVZhbHVlID0gbWVtb3J5RGVzY3JpcHRvci0+Z2V0KGV4ZWMsIG1h
eGltdW0pOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRK
U1ZhbHVlKCkpOwogICAgICAgICBpZiAoIW1heFNpemVWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0
cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9X
ZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE2LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0xMTQsMTUgKzExNCwxNSBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5CiAKICAgICBjb25zdCBhdXRvJiBpbXBvcnRzID0gbW9k
dWxlLT5tb2R1bGVJbmZvcm1hdGlvbigpLmltcG9ydHM7CiAgICAgaWYgKGltcG9ydHMuc2l6ZSgp
KSB7Ci0gICAgICAgIElkZW50aWZpZXIgbW9kdWxlID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhl
eGVjLCAibW9kdWxlIik7Ci0gICAgICAgIElkZW50aWZpZXIgbmFtZSA9IElkZW50aWZpZXI6OmZy
b21TdHJpbmcoZXhlYywgIm5hbWUiKTsKLSAgICAgICAgSWRlbnRpZmllciBraW5kID0gSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZyhleGVjLCAia2luZCIpOworICAgICAgICBJZGVudGlmaWVyIG1vZHVs
ZSA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJtb2R1bGUiKTsKKyAgICAgICAgSWRlbnRp
ZmllciBuYW1lID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIm5hbWUiKTsKKyAgICAgICAg
SWRlbnRpZmllciBraW5kID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImtpbmQiKTsKICAg
ICAgICAgZm9yIChjb25zdCBXYXNtOjpJbXBvcnQmIGltcCA6IGltcG9ydHMpIHsKICAgICAgICAg
ICAgIEpTT2JqZWN0KiBvYmogPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjKTsKICAgICAgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKLSAgICAgICAgICAgIG9i
ai0+cHV0RGlyZWN0KHZtLCBtb2R1bGUsIGpzU3RyaW5nKGV4ZWMsIFN0cmluZzo6ZnJvbVVURjgo
aW1wLm1vZHVsZSkpKTsKLSAgICAgICAgICAgIG9iai0+cHV0RGlyZWN0KHZtLCBuYW1lLCBqc1N0
cmluZyhleGVjLCBTdHJpbmc6OmZyb21VVEY4KGltcC5maWVsZCkpKTsKLSAgICAgICAgICAgIG9i
ai0+cHV0RGlyZWN0KHZtLCBraW5kLCBqc1N0cmluZyhleGVjLCBTdHJpbmcobWFrZVN0cmluZyhp
bXAua2luZCkpKSk7CisgICAgICAgICAgICBvYmotPnB1dERpcmVjdCh2bSwgbW9kdWxlLCBqc1N0
cmluZyh2bSwgU3RyaW5nOjpmcm9tVVRGOChpbXAubW9kdWxlKSkpOworICAgICAgICAgICAgb2Jq
LT5wdXREaXJlY3Qodm0sIG5hbWUsIGpzU3RyaW5nKHZtLCBTdHJpbmc6OmZyb21VVEY4KGltcC5m
aWVsZCkpKTsKKyAgICAgICAgICAgIG9iai0+cHV0RGlyZWN0KHZtLCBraW5kLCBqc1N0cmluZyh2
bSwgU3RyaW5nKG1ha2VTdHJpbmcoaW1wLmtpbmQpKSkpOwogICAgICAgICAgICAgcmVzdWx0LT5w
dXNoKGV4ZWMsIG9iaik7CiAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2Nv
cGUsIHsgfSk7CiAgICAgICAgIH0KQEAgLTE0NiwxMyArMTQ2LDEzIEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgd2ViQXNzZW1ibHkKIAogICAgIGNvbnN0IGF1dG8mIGV4cG9ydHMgPSBt
b2R1bGUtPm1vZHVsZUluZm9ybWF0aW9uKCkuZXhwb3J0czsKICAgICBpZiAoZXhwb3J0cy5zaXpl
KCkpIHsKLSAgICAgICAgSWRlbnRpZmllciBuYW1lID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhl
eGVjLCAibmFtZSIpOwotICAgICAgICBJZGVudGlmaWVyIGtpbmQgPSBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKGV4ZWMsICJraW5kIik7CisgICAgICAgIElkZW50aWZpZXIgbmFtZSA9IElkZW50aWZp
ZXI6OmZyb21TdHJpbmcodm0sICJuYW1lIik7CisgICAgICAgIElkZW50aWZpZXIga2luZCA9IElk
ZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJraW5kIik7CiAgICAgICAgIGZvciAoY29uc3QgV2Fz
bTo6RXhwb3J0JiBleHAgOiBleHBvcnRzKSB7CiAgICAgICAgICAgICBKU09iamVjdCogb2JqID0g
Y29uc3RydWN0RW1wdHlPYmplY3QoZXhlYyk7CiAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHRocm93U2NvcGUsIHsgfSk7Ci0gICAgICAgICAgICBvYmotPnB1dERpcmVjdCh2bSwgbmFt
ZSwganNTdHJpbmcoZXhlYywgU3RyaW5nOjpmcm9tVVRGOChleHAuZmllbGQpKSk7Ci0gICAgICAg
ICAgICBvYmotPnB1dERpcmVjdCh2bSwga2luZCwganNTdHJpbmcoZXhlYywgU3RyaW5nKG1ha2VT
dHJpbmcoZXhwLmtpbmQpKSkpOworICAgICAgICAgICAgb2JqLT5wdXREaXJlY3Qodm0sIG5hbWUs
IGpzU3RyaW5nKHZtLCBTdHJpbmc6OmZyb21VVEY4KGV4cC5maWVsZCkpKTsKKyAgICAgICAgICAg
IG9iai0+cHV0RGlyZWN0KHZtLCBraW5kLCBqc1N0cmluZyh2bSwgU3RyaW5nKG1ha2VTdHJpbmco
ZXhwLmtpbmQpKSkpOwogICAgICAgICAgICAgcmVzdWx0LT5wdXNoKGV4ZWMsIG9iaik7CiAgICAg
ICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgICAgIH0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVj
b3JkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJB
c3NlbWJseU1vZHVsZVJlY29yZC5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNzMsNyArNzMsNyBAQCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpmaW5p
c2hDcmVhCiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZXhlYywgdm0pOwogICAgIEFTU0VSVChp
bmhlcml0cyh2bSwgaW5mbygpKSk7CiAgICAgZm9yIChjb25zdCBhdXRvJiBleHAgOiBtb2R1bGVJ
bmZvcm1hdGlvbi5leHBvcnRzKSB7Ci0gICAgICAgIElkZW50aWZpZXIgZmllbGQgPSBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKCZ2bSwgU3RyaW5nOjpmcm9tVVRGOChleHAuZmllbGQpKTsKKyAgICAg
ICAgSWRlbnRpZmllciBmaWVsZCA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIFN0cmluZzo6
ZnJvbVVURjgoZXhwLmZpZWxkKSk7CiAgICAgICAgIGFkZEV4cG9ydEVudHJ5KEV4cG9ydEVudHJ5
OjpjcmVhdGVMb2NhbChmaWVsZCwgZmllbGQpKTsKICAgICB9CiB9CkBAIC0xMjYsOCArMTI2LDgg
QEAgdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6bGluayhFeGVjUwogICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgIH0KIAotICAgICAgICBJZGVudGlmaWVyIG1vZHVsZU5hbWUgPSBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgU3RyaW5nOjpmcm9tVVRGOChpbXBvcnQubW9kdWxl
KSk7Ci0gICAgICAgIElkZW50aWZpZXIgZmllbGROYW1lID0gSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zygmdm0sIFN0cmluZzo6ZnJvbVVURjgoaW1wb3J0LmZpZWxkKSk7CisgICAgICAgIElkZW50aWZp
ZXIgbW9kdWxlTmFtZSA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIFN0cmluZzo6ZnJvbVVU
RjgoaW1wb3J0Lm1vZHVsZSkpOworICAgICAgICBJZGVudGlmaWVyIGZpZWxkTmFtZSA9IElkZW50
aWZpZXI6OmZyb21TdHJpbmcodm0sIFN0cmluZzo6ZnJvbVVURjgoaW1wb3J0LmZpZWxkKSk7CiAg
ICAgICAgIEpTVmFsdWUgdmFsdWU7CiAgICAgICAgIGlmIChjcmVhdGlvbk1vZGUgPT0gV2FzbTo6
Q3JlYXRpb25Nb2RlOjpGcm9tSlMpIHsKICAgICAgICAgICAgIC8vIDEuIExldCBvIGJlIHRoZSBy
ZXN1bHRhbnQgdmFsdWUgb2YgcGVyZm9ybWluZyBHZXQoaW1wb3J0T2JqZWN0LCBpLm1vZHVsZV9u
YW1lKS4KQEAgLTQ0MSw3ICs0NDEsNyBAQCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjps
aW5rKEV4ZWNTCiAgICAgICAgIGJvb2wgc2hvdWxkVGhyb3dSZWFkT25seUVycm9yID0gZmFsc2U7
CiAgICAgICAgIGJvb2wgaWdub3JlUmVhZE9ubHlFcnJvcnMgPSB0cnVlOwogICAgICAgICBib29s
IHB1dFJlc3VsdCA9IGZhbHNlOwotICAgICAgICBzeW1ib2xUYWJsZVB1dFRvdWNoV2F0Y2hwb2lu
dFNldChtb2R1bGVFbnZpcm9ubWVudCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0s
IFN0cmluZzo6ZnJvbVVURjgoZXhwLmZpZWxkKSksIGV4cG9ydGVkVmFsdWUsIHNob3VsZFRocm93
UmVhZE9ubHlFcnJvciwgaWdub3JlUmVhZE9ubHlFcnJvcnMsIHB1dFJlc3VsdCk7CisgICAgICAg
IHN5bWJvbFRhYmxlUHV0VG91Y2hXYXRjaHBvaW50U2V0KG1vZHVsZUVudmlyb25tZW50LCBleGVj
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBTdHJpbmc6OmZyb21VVEY4KGV4cC5maWVsZCkp
LCBleHBvcnRlZFZhbHVlLCBzaG91bGRUaHJvd1JlYWRPbmx5RXJyb3IsIGlnbm9yZVJlYWRPbmx5
RXJyb3JzLCBwdXRSZXN1bHQpOwogICAgICAgICBzY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwog
ICAgICAgICBSRUxFQVNFX0FTU0VSVChwdXRSZXN1bHQpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5VGFibGVDb25zdHJ1Y3Rvci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlUYWJs
ZUNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvV2ViQXNzZW1ibHlUYWJsZUNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTYwLDcgKzYwLDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
Y29ucwogCiAgICAgV2FzbTo6VGFibGVFbGVtZW50VHlwZSB0eXBlOwogICAgIHsKLSAgICAgICAg
SWRlbnRpZmllciBlbGVtZW50SWRlbnQgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImVs
ZW1lbnQiKTsKKyAgICAgICAgSWRlbnRpZmllciBlbGVtZW50SWRlbnQgPSBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCAiZWxlbWVudCIpOwogICAgICAgICBKU1ZhbHVlIGVsZW1lbnRWYWx1ZSA9
IG1lbW9yeURlc2NyaXB0b3ItPmdldChleGVjLCBlbGVtZW50SWRlbnQpOwogICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgICAgICBT
dHJpbmcgZWxlbWVudFN0cmluZyA9IGVsZW1lbnRWYWx1ZS50b1dURlN0cmluZyhleGVjKTsKQEAg
LTczLDcgKzczLDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29ucwog
ICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihleGVjLCB0
aHJvd1Njb3BlLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIldlYkFzc2VtYmx5LlRhYmxlIGV4cGVj
dHMgaXRzICdlbGVtZW50JyBmaWVsZCB0byBiZSB0aGUgc3RyaW5nICdmdW5jcmVmJyBvciAnYW55
cmVmJyJfcykpKTsKICAgICB9CiAKLSAgICBJZGVudGlmaWVyIGluaXRpYWxJZGVudCA9IElkZW50
aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiaW5pdGlhbCIpOworICAgIElkZW50aWZpZXIgaW5pdGlh
bElkZW50ID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImluaXRpYWwiKTsKICAgICBKU1Zh
bHVlIGluaXRpYWxTaXplVmFsdWUgPSBtZW1vcnlEZXNjcmlwdG9yLT5nZXQoZXhlYywgaW5pdGlh
bElkZW50KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1Zh
bHVlKCkpOwogICAgIHVpbnQzMl90IGluaXRpYWwgPSB0b05vbldyYXBwaW5nVWludDMyKGV4ZWMs
IGluaXRpYWxTaXplVmFsdWUpOwpAQCAtODIsNyArODIsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBjb25zCiAgICAgLy8gSW4gV2ViSURMLCAicHJlc2VudCIgbWVhbnMg
dGhhdCBbW0dldF1dIHJlc3VsdCBpcyB1bmRlZmluZWQsIG5vdCBbW0hhc1Byb3BlcnR5XV0gcmVz
dWx0LgogICAgIC8vIGh0dHBzOi8vaGV5Y2FtLmdpdGh1Yi5pby93ZWJpZGwvI2lkbC1kaWN0aW9u
YXJpZXMKICAgICBPcHRpb25hbDx1aW50MzJfdD4gbWF4aW11bTsKLSAgICBJZGVudGlmaWVyIG1h
eGltdW1JZGVudCA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAibWF4aW11bSIpOworICAg
IElkZW50aWZpZXIgbWF4aW11bUlkZW50ID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIm1h
eGltdW0iKTsKICAgICBKU1ZhbHVlIG1heFNpemVWYWx1ZSA9IG1lbW9yeURlc2NyaXB0b3ItPmdl
dChleGVjLCBtYXhpbXVtSWRlbnQpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29w
ZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgaWYgKCFtYXhTaXplVmFsdWUuaXNVbmRlZmluZWQo
KSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTgyIEBACisyMDE5LTA4LTI3ICBN
YXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBSZWZhY3RvciB0byB1c2Ug
Vk0mIGluc3RlYWQgb2YgVk0qIGF0IGFzIG1hbnkgcGxhY2VzIGFzIHBvc3NpYmxlLgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAxMTcyCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiAg
Q292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAqIE1vZHVsZXMvZW5jcnlwdGVk
bWVkaWEvbGVnYWN5L0xlZ2FjeUNETVNlc3Npb25DbGVhcktleS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDRE1TZXNzaW9uQ2xlYXJLZXk6OnVwZGF0ZSk6CisgICAgICAgICogTW9kdWxlcy9wbHVn
aW5zL1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Lm1tOgorICAgICAgICAoV2ViQ29yZTo6UXVp
Y2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQ6OmVuc3VyZVJlcGxhY2VtZW50U2NyaXB0SW5qZWN0ZWQp
OgorICAgICAgICAoV2ViQ29yZTo6UXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQ6Omluc3RhbGxS
ZXBsYWNlbWVudCk6CisgICAgICAgICogYW5pbWF0aW9uL0tleWZyYW1lRWZmZWN0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OnByb2Nlc3NLZXlmcmFtZUxpa2VPYmplY3QpOgorICAgICAgICAqIGJp
bmRpbmdzL2pzL0dDQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHQ0NvbnRyb2xs
ZXI6OmR1bXBIZWFwKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVz
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmdldCk6CisgICAgICAgIChXZWJDb3JlOjpzZXQpOgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQ1NTUnVsZUxpc3RDdXN0b20uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SlNDU1NSdWxlTGlzdE93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyk6
CisgICAgICAgICogYmluZGluZ3MvanMvSlNDdXN0b21FbGVtZW50UmVnaXN0cnlDdXN0b20uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SlNDdXN0b21FbGVtZW50UmVnaXN0cnk6OmRlZmluZSk6Cisg
ICAgICAgICogYmluZGluZ3MvanMvSlNDdXN0b21YUGF0aE5TUmVzb2x2ZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SlNDdXN0b21YUGF0aE5TUmVzb2x2ZXI6Omxvb2t1cE5hbWVzcGFjZVVSSSk6
CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01Db252ZXJ0UmVjb3JkLmg6CisgICAgICAgICog
YmluZGluZ3MvanMvSlNET01Db252ZXJ0U3RyaW5ncy5oOgorICAgICAgICAoV2ViQ29yZTo6SlND
b252ZXJ0ZXI8SURMRE9NU3RyaW5nPjo6Y29udmVydCk6CisgICAgICAgIChXZWJDb3JlOjpKU0Nv
bnZlcnRlcjxJRExCeXRlU3RyaW5nPjo6Y29udmVydCk6CisgICAgICAgIChXZWJDb3JlOjpKU0Nv
bnZlcnRlcjxJRExVU1ZTdHJpbmc+Ojpjb252ZXJ0KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9K
U0RPTVdpbmRvd0N1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvdzo6Z2V0
T3duUHJvcGVydHlTbG90QnlJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjphZGRTY29wZWRDaGls
ZHJlbkluZGV4ZXMpOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3c6OmRlZmluZU93blBy
b3BlcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OkRpYWxvZ0hhbmRsZXI6OmRpYWxvZ0NyZWF0ZWQp
OgorICAgICAgICAoV2ViQ29yZTo6RGlhbG9nSGFuZGxlcjo6cmV0dXJuVmFsdWUgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3c6OnNldE9wZW5lcik6CisgICAgICAgIChXZWJD
b3JlOjpKU0RPTVdpbmRvdzo6c2V0T3BlbkRhdGFiYXNlKToKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9KU0RPTVdpbmRvd1Byb3BlcnRpZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5k
b3dQcm9wZXJ0aWVzOjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KToKKyAgICAgICAgKiBiaW5k
aW5ncy9qcy9KU0RlcHJlY2F0ZWRDU1NPTVZhbHVlQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkpTRGVwcmVjYXRlZENTU09NVmFsdWVPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9v
dHMpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpKU0V2ZW50TGlzdGVuZXI6OmhhbmRsZUV2ZW50KToKKyAgICAgICAgKiBiaW5k
aW5ncy9qcy9KU0ltYWdlRGF0YUN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0b0pTTmV3
bHlDcmVhdGVkKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0xhenlFdmVudExpc3RlbmVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkpTTGF6eUV2ZW50TGlzdGVuZXI6OmluaXRpYWxpemVKU0Z1
bmN0aW9uIGNvbnN0KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0xvY2F0aW9uQ3VzdG9tLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkpTTG9jYXRpb246OmdldE93blByb3BlcnR5U2xvdEJ5SW5k
ZXgpOgorICAgICAgICAoV2ViQ29yZTo6SlNMb2NhdGlvbjo6cHV0QnlJbmRleCk6CisgICAgICAg
ICogYmluZGluZ3MvanMvSlNOb2RlTGlzdEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpK
U05vZGVMaXN0T3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKToKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9KU1BsdWdpbkVsZW1lbnRGdW5jdGlvbnMuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6cGx1Z2luRWxlbWVudEN1c3RvbUdldENhbGxEYXRhKToKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9KU1JlbW90ZURPTVdpbmRvd0N1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1JlbW90
ZURPTVdpbmRvdzo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleCk6CisgICAgICAgICogYmluZGlu
Z3MvanMvUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyOjppbnZva2UpOgorICAgICAgICAq
IGJpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
aXB0Q29udHJvbGxlcjo6bGlua0FuZEV2YWx1YXRlTW9kdWxlU2NyaXB0SW5Xb3JsZCk6CisgICAg
ICAgICogYmluZGluZ3MvanMvU2NyaXB0TW9kdWxlTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNjcmlwdE1vZHVsZUxvYWRlcjo6cmVzb2x2ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3Jp
cHRNb2R1bGVMb2FkZXI6OmltcG9ydE1vZHVsZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRN
b2R1bGVMb2FkZXI6OmNyZWF0ZUltcG9ydE1ldGFQcm9wZXJ0aWVzKToKKyAgICAgICAgKiBiaW5k
aW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2xv
bmVTZXJpYWxpemVyOjpDbG9uZVNlcmlhbGl6ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVT
ZXJpYWxpemVyOjp3cml0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDbG9uZVNlcmlhbGl6ZXI6OnNl
cmlhbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpDbG9uZURlc2VyaWFsaXplcjo6Q2FjaGVkU3Ry
aW5nOjpqc1N0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpDbG9uZURlc2VyaWFsaXplcjo6cmVh
ZFRlcm1pbmFsKToKKyAgICAgICAgKFdlYkNvcmU6OkNsb25lRGVzZXJpYWxpemVyOjpkZXNlcmlh
bGl6ZSk6CisgICAgICAgICogYmluZGluZ3MvanMvV2ViQ29yZUJ1aWx0aW5OYW1lcy5oOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViQ29yZUJ1aWx0aW5OYW1lczo6V2ViQ29yZUJ1aWx0aW5OYW1lcyk6
CisgICAgICAgICogYmluZGluZ3MvanMvV2ViQ29yZUpTQ2xpZW50RGF0YS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpKU1ZNQ2xpZW50RGF0YTo6SlNWTUNsaWVudERhdGEpOgorICAgICAgICAqIGJp
bmRpbmdzL2pzL1dpbmRvd1Byb3h5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldpbmRvd1Byb3h5
OjpjbGVhckpTV2luZG93UHJveGllc05vdE1hdGNoaW5nRE9NV2luZG93KToKKyAgICAgICAgKiBi
aW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbToKKyAgICAgICAgKEdlbmVyYXRlR2V0
T3duUHJvcGVydHlTbG90QnlJbmRleCk6CisgICAgICAgIChHZW5lcmF0ZUdldE93blByb3BlcnR5
TmFtZXMpOgorICAgICAgICAoR2VuZXJhdGVQdXRCeUluZGV4KToKKyAgICAgICAgKEdlbmVyYXRl
RGVsZXRlUHJvcGVydHlCeUluZGV4KToKKyAgICAgICAgKEdlbmVyYXRlRGljdGlvbmFyeUltcGxl
bWVudGF0aW9uQ29udGVudCk6CisgICAgICAgIChhZGRVbnNjb3BhYmxlUHJvcGVydGllcyk6Cisg
ICAgICAgIChHZW5lcmF0ZUltcGxlbWVudGF0aW9uKToKKyAgICAgICAgKEdlbmVyYXRlQXR0cmli
dXRlU2V0dGVyQm9keURlZmluaXRpb24pOgorICAgICAgICAoR2VuZXJhdGVPcGVyYXRpb25EZWZp
bml0aW9uKToKKyAgICAgICAgKEdlbmVyYXRlU2VyaWFsaXplckRlZmluaXRpb24pOgorICAgICAg
ICAoR2VuZXJhdGVDYWxsYmFja0ltcGxlbWVudGF0aW9uQ29udGVudCk6CisgICAgICAgIChHZW5l
cmF0ZUNvbnN0cnVjdG9ySGVscGVyTWV0aG9kcyk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTSW50ZXJmYWNlTmFtZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0ludGVy
ZmFjZU5hbWVDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMpOgorICAgICAgICAqIGJp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU01hcExpa2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SlNNYXBMaWtlQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKToKKyAgICAgICAgKiBi
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNSZWFkT25seU1hcExpa2UuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SlNSZWFkT25seU1hcExpa2VDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRp
ZXMpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RBY3RpdmVET01P
YmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0QWN0aXZlRE9NT2JqZWN0Q29uc3Ry
dWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0Q0VSZWFjdGlvbnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0
Q0VSZWFjdGlvbnNDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMpOgorICAgICAgICAo
V2ViQ29yZTo6c2V0SlNUZXN0Q0VSZWFjdGlvbnNBdHRyaWJ1dGVXaXRoQ0VSZWFjdGlvbnNTZXR0
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0Q0VSZWFjdGlvbnNSZWZsZWN0QXR0cmli
dXRlV2l0aENFUmVhY3Rpb25zU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdENF
UmVhY3Rpb25zU3RyaW5naWZpZXJBdHRyaWJ1dGVTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
c2V0SlNUZXN0Q0VSZWFjdGlvbnNBdHRyaWJ1dGVXaXRoQ0VSZWFjdGlvbnNOb3ROZWVkZWRTZXR0
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0Q0VSZWFjdGlvbnNSZWZsZWN0QXR0cmli
dXRlV2l0aENFUmVhY3Rpb25zTm90TmVlZGVkU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNl
dEpTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXJBdHRyaWJ1dGVOb3ROZWVkZWRTZXR0ZXIpOgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDRVJlYWN0aW9uc1N0cmlu
Z2lmaWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZp
ZXJDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6
c2V0SlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllclZhbHVlU2V0dGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OnNldEpTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXJWYWx1ZVdpdGhvdXRSZWFjdGlv
bnNTZXR0ZXIpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxs
VHJhY2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdENhbGxUcmFjZXJDb25zdHJ1Y3Rv
cjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0Q2Fs
bFRyYWNlclRlc3RBdHRyaWJ1dGVJbnRlcmZhY2VTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
c2V0SlNUZXN0Q2FsbFRyYWNlclRlc3RBdHRyaWJ1dGVTcGVjaWZpZWRTZXR0ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6c2V0SlNUZXN0Q2FsbFRyYWNlclRlc3RBdHRyaWJ1dGVXaXRoVmFyaWFudFNl
dHRlcik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENhbGxiYWNr
SW50ZXJmYWNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnREaWN0aW9uYXJ5PFRlc3RD
YWxsYmFja0ludGVyZmFjZTo6RGljdGlvbmFyeT4pOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0
Q2FsbGJhY2tJbnRlcmZhY2VDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6SlNUZXN0Q2FsbGJhY2tJbnRlcmZhY2U6OmNhbGxiYWNrV2l0aE5vUGFy
YW0pOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Q2FsbGJhY2tJbnRlcmZhY2U6OmNhbGxiYWNr
V2l0aEFycmF5UGFyYW0pOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Q2FsbGJhY2tJbnRlcmZh
Y2U6OmNhbGxiYWNrV2l0aFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZVBhcmFtKToKKyAgICAgICAgKFdl
YkNvcmU6OkpTVGVzdENhbGxiYWNrSW50ZXJmYWNlOjpjYWxsYmFja1dpdGhTdHJpbmdMaXN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdENhbGxiYWNrSW50ZXJmYWNlOjpjYWxsYmFja1dpdGhC
b29sZWFuKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdENhbGxiYWNrSW50ZXJmYWNlOjpjYWxs
YmFja1JlcXVpcmVzVGhpc1RvUGFzcyk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDYWxsYmFj
a0ludGVyZmFjZTo6Y2FsbGJhY2tXaXRoQVJldHVyblZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6
OkpTVGVzdENhbGxiYWNrSW50ZXJmYWNlOjpjYWxsYmFja1RoYXRSZXRocm93c0V4Y2VwdGlvbnMp
OgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Q2FsbGJhY2tJbnRlcmZhY2U6OmNhbGxiYWNrVGhh
dFNraXBzSW52b2tlQ2hlY2spOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Q2FsbGJhY2tJbnRl
cmZhY2U6OmNhbGxiYWNrV2l0aFRoaXNPYmplY3QpOgorICAgICAgICAqIGJpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvckNvbnN0cnVj
dG9yOjppbml0aWFsaXplUHJvcGVydGllcyk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdERPTUpJVC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RET01KSVRD
b25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6anNU
ZXN0RE9NSklUUHJvdG90eXBlRnVuY3Rpb25HZXRBdHRyaWJ1dGVXaXRob3V0VHlwZUNoZWNrKToK
KyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdERPTUpJVFByb3RvdHlwZUZ1bmN0aW9uSXRlbVdpdGhv
dXRUeXBlQ2hlY2spOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0RE9NSklUUHJvdG90eXBlRnVu
Y3Rpb25IYXNBdHRyaWJ1dGVXaXRob3V0VHlwZUNoZWNrKToKKyAgICAgICAgKFdlYkNvcmU6Ompz
VGVzdERPTUpJVFByb3RvdHlwZUZ1bmN0aW9uR2V0RWxlbWVudEJ5SWRXaXRob3V0VHlwZUNoZWNr
KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdERPTUpJVFByb3RvdHlwZUZ1bmN0aW9uR2V0RWxl
bWVudHNCeU5hbWVXaXRob3V0VHlwZUNoZWNrKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0RW5hYmxlZEJ5U2V0dGluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpK
U1Rlc3RFbmFibGVkQnlTZXR0aW5nQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKToK
KyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEVuYWJsZWRCeVNldHRpbmdQcm90b3R5cGU6OmZpbmlz
aENyZWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdEVuYWJsZWRCeVNldHRpbmdU
ZXN0U3ViT2JqRW5hYmxlZEJ5U2V0dGluZ0NvbnN0cnVjdG9yU2V0dGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OnNldEpTVGVzdEVuYWJsZWRCeVNldHRpbmdFbmFibGVkQnlTZXR0aW5nQXR0cmlidXRl
U2V0dGVyKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RW5hYmxl
ZEZvckNvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0RW5hYmxlZEZvckNvbnRl
eHRDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6
c2V0SlNUZXN0RW5hYmxlZEZvckNvbnRleHRUZXN0U3ViT2JqRW5hYmxlZEZvckNvbnRleHRDb25z
dHJ1Y3RvclNldHRlcik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dEV2ZW50Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydERpY3Rpb25h
cnk8VGVzdEV2ZW50Q29uc3RydWN0b3I6OkluaXQ+KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVz
dEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMpOgorICAg
ICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudFRhcmdldC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1Rlc3RFdmVudFRhcmdldENvbnN0cnVjdG9yOjppbml0aWFsaXpl
UHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RFdmVudFRhcmdldDo6Z2V0T3du
UHJvcGVydHlTbG90QnlJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RFdmVudFRhcmdl
dDo6Z2V0T3duUHJvcGVydHlOYW1lcyk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdEV4Y2VwdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RFeGNlcHRp
b25Db25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMpOgorICAgICAgICAqIGJpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6
ZVByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJs
ZVByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RHbG9iYWxPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0
R2xvYmFsT2JqZWN0Q29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKToKKyAgICAgICAg
KFdlYkNvcmU6OnNldEpTVGVzdEdsb2JhbE9iamVjdFJlZ3VsYXJBdHRyaWJ1dGVTZXR0ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0R2xvYmFsT2JqZWN0UHVibGljQW5kUHJpdmF0ZUF0
dHJpYnV0ZVNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RHbG9iYWxPYmplY3RQ
dWJsaWNBbmRQcml2YXRlQ29uZGl0aW9uYWxBdHRyaWJ1dGVTZXR0ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6c2V0SlNUZXN0R2xvYmFsT2JqZWN0RW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZVNldHRl
cik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0Q0VSZWFjdGlv
bnNDb25zdHJ1Y3RvclNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RHbG9iYWxP
YmplY3RUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllckNvbnN0cnVjdG9yU2V0dGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OnNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RDYWxsVHJhY2VyQ29uc3RydWN0
b3JTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdENh
bGxiYWNrSW50ZXJmYWNlQ29uc3RydWN0b3JTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0
SlNUZXN0R2xvYmFsT2JqZWN0VGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yQ29uc3Ry
dWN0b3JTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVz
dERPTUpJVENvbnN0cnVjdG9yU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdEds
b2JhbE9iamVjdFRlc3REb21haW5TZWN1cml0eUNvbnN0cnVjdG9yU2V0dGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OnNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RFbmFibGVkQnlTZXR0aW5nQ29uc3Ry
dWN0b3JTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVz
dEVuYWJsZWRGb3JDb250ZXh0Q29uc3RydWN0b3JTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3RvclNldHRl
cik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0RXZlbnRUYXJn
ZXRDb25zdHJ1Y3RvclNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RHbG9iYWxP
YmplY3RUZXN0RXhjZXB0aW9uQ29uc3RydWN0b3JTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdEdlbmVyYXRlSXNSZWFjaGFibGVDb25zdHJ1Y3RvclNl
dHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0R2xvYmFs
T2JqZWN0Q29uc3RydWN0b3JTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0R2xv
YmFsT2JqZWN0VGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXJDb25zdHJ1Y3RvclNldHRlcik6
CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0SW5kZXhlZFNldHRl
clRocm93aW5nRXhjZXB0aW9uQ29uc3RydWN0b3JTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllckNvbnN0
cnVjdG9yU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdEdsb2JhbE9iamVjdFRl
c3RJbnRlcmZhY2VDb25zdHJ1Y3RvclNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rl
c3RHbG9iYWxPYmplY3RUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmVDb25zdHJ1Y3RvclNl
dHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0SXRlcmFi
bGVDb25zdHJ1Y3RvclNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RHbG9iYWxP
YmplY3RUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JDb25zdHJ1Y3RvclNldHRlcik6CisgICAgICAg
IChXZWJDb3JlOjpzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TWFwTGlrZUNvbnN0cnVjdG9yU2V0
dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RNZWRpYVF1
ZXJ5TGlzdExpc3RlbmVyQ29uc3RydWN0b3JTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0
SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllckNv
bnN0cnVjdG9yU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdEdsb2JhbE9iamVj
dFRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbkNvbnN0cnVjdG9yU2V0
dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZEFu
ZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllckNvbnN0cnVjdG9yU2V0dGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OnNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZENvbnN0cnVjdG9yQ29uc3Ry
dWN0b3JTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0R2xvYmFsT2JqZWN0QXVk
aW9Db25zdHJ1Y3RvclNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RHbG9iYWxP
YmplY3RUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVyQ29uc3RydWN0b3JTZXR0ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkRGVsZXRlclRocm93
aW5nRXhjZXB0aW9uQ29uc3RydWN0b3JTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNU
ZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyQ29uc3RydWN0b3JT
ZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVk
RGVsZXRlcldpdGhJbmRleGVkR2V0dGVyQ29uc3RydWN0b3JTZXR0ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGhDb25zdHJ1
Y3RvclNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0
TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXJDb25zdHJ1Y3RvclNldHRlcik6CisgICAgICAgIChXZWJD
b3JlOjpzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllckNv
bnN0cnVjdG9yU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdEdsb2JhbE9iamVj
dFRlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllckNvbnN0cnVjdG9yU2V0dGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OnNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZFNldHRlclRocm93aW5nRXhj
ZXB0aW9uQ29uc3RydWN0b3JTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0R2xv
YmFsT2JqZWN0VGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXJDb25zdHJ1Y3RvclNldHRlcik6
CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRTZXR0ZXJX
aXRoSW5kZXhlZEdldHRlckNvbnN0cnVjdG9yU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNl
dEpTVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0
dGVyQ29uc3RydWN0b3JTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0R2xvYmFs
T2JqZWN0VGVzdE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnNDb25zdHJ1Y3RvclNldHRl
cik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRTZXR0
ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNDb25zdHJ1Y3RvclNldHRlcik6CisgICAgICAgIChX
ZWJDb3JlOjpzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJs
ZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5zQ29uc3RydWN0b3JTZXR0ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3Rv
cnNDb25zdHJ1Y3RvclNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RHbG9iYWxP
YmplY3RUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZUNvbnN0cnVjdG9yU2V0
dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RPdmVycmlk
ZUJ1aWx0aW5zQ29uc3RydWN0b3JTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0
R2xvYmFsT2JqZWN0VGVzdFBsdWdpbkludGVyZmFjZUNvbnN0cnVjdG9yU2V0dGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OnNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RSZWFkT25seU1hcExpa2VDb25z
dHJ1Y3RvclNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RHbG9iYWxPYmplY3RU
ZXN0UmVwb3J0RXh0cmFNZW1vcnlDb3N0Q29uc3RydWN0b3JTZXR0ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFNlcmlhbGl6YXRpb25Db25zdHJ1Y3RvclNl
dHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0U2VyaWFs
aXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2VDb25zdHJ1Y3RvclNldHRlcik6CisgICAgICAgIChX
ZWJDb3JlOjpzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRDb25z
dHJ1Y3RvclNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RHbG9iYWxPYmplY3RU
ZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbENvbnN0cnVjdG9yU2V0dGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OnNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJ
bnRlcmZhY2VDb25zdHJ1Y3RvclNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RH
bG9iYWxPYmplY3RUZXN0U3RyaW5naWZpZXJDb25zdHJ1Y3RvclNldHRlcik6CisgICAgICAgIChX
ZWJDb3JlOjpzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0U3RyaW5naWZpZXJBbm9ueW1vdXNPcGVy
YXRpb25Db25zdHJ1Y3RvclNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RHbG9i
YWxPYmplY3RUZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvbkNvbnN0cnVjdG9yU2V0dGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RTdHJpbmdpZmllck9w
ZXJhdGlvbkltcGxlbWVudGVkQXNDb25zdHJ1Y3RvclNldHRlcik6CisgICAgICAgIChXZWJDb3Jl
OjpzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25OYW1lZFRvU3Ry
aW5nQ29uc3RydWN0b3JTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0R2xvYmFs
T2JqZWN0VGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGVDb25zdHJ1Y3RvclNldHRlcik6
CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0U3RyaW5naWZpZXJS
ZWFkV3JpdGVBdHRyaWJ1dGVDb25zdHJ1Y3RvclNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpz
ZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0VHlwZWRlZnNDb25zdHJ1Y3RvclNldHRlcik6CisgICAg
ICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50
aWZpZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRp
ZmllckNvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3Jl
OjpKU1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKToK
KyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlclRo
cm93aW5nRXhjZXB0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEluZGV4ZWRTZXR0
ZXJUaHJvd2luZ0V4Y2VwdGlvbkNvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGllcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246Omdl
dE93blByb3BlcnR5TmFtZXMpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyQ29uc3RydWN0b3I6OmluaXRpYWxpemVQ
cm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRl
bnRpZmllcjo6Z2V0T3duUHJvcGVydHlOYW1lcyk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RJ
bnRlcmZhY2VDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6c2V0SlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JJbXBsZW1lbnRzU3RhdGljQXR0clNl
dHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzU3Ry
MlNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRz
U3RyM1NldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RJbnRlcmZhY2VJbXBsZW1l
bnRzTm9kZVNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RJbnRlcmZhY2VDb25z
dHJ1Y3RvclN1cHBsZW1lbnRhbFN0YXRpY0F0dHJTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
c2V0SlNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsU3RyMlNldHRlcik6CisgICAgICAgIChXZWJD
b3JlOjpzZXRKU1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxTdHIzU2V0dGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OnNldEpTVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbE5vZGVTZXR0ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0SW50ZXJmYWNlUmVmbGVjdEF0dHJpYnV0ZVNldHRlcik6
CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZUxlYWRp
bmdVbmRlcnNjb3JlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEludGVyZmFjZUxlYWRp
bmdVbmRlcnNjb3JlQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKToKKyAgICAgICAg
KiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SXRlcmFibGUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SlNUZXN0SXRlcmFibGVDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMp
OgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RKU0J1aWx0aW5Db25z
dHJ1Y3Rvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rv
ckNvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjpz
ZXRKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvclRlc3RBdHRyaWJ1dGVSV0N1c3RvbVNldHRlcik6
CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE1lZGlhUXVlcnlMaXN0
TGlzdGVuZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0
ZW5lckNvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGllcyk6CisgICAgICAgICogYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmll
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lk
ZW50aWZpZXJDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyOjpnZXRPd25Qcm9w
ZXJ0eVNsb3RCeUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkQW5kSW5kZXhl
ZFNldHRlck5vSWRlbnRpZmllcjo6Z2V0T3duUHJvcGVydHlOYW1lcyk6CisgICAgICAgIChXZWJD
b3JlOjpKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXI6OnB1dEJ5SW5kZXgp
OgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4
ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RO
YW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbkNvbnN0cnVjdG9yOjppbml0aWFs
aXplUHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZEFuZEluZGV4ZWRT
ZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleCk6CisgICAg
ICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlv
bjo6Z2V0T3duUHJvcGVydHlOYW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZEFu
ZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6cHV0QnlJbmRleCk6CisgICAgICAgICog
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJ
ZGVudGlmaWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkQW5kSW5kZXhlZFNl
dHRlcldpdGhJZGVudGlmaWVyQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVy
OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5h
bWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKToK
KyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlm
aWVyOjpwdXRCeUluZGV4KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0TmFtZWRDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZENv
bnN0cnVjdG9yQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdl
YkNvcmU6OkpTVGVzdE5hbWVkQ29uc3RydWN0b3JOYW1lZENvbnN0cnVjdG9yOjppbml0aWFsaXpl
UHJvcGVydGllcyk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5h
bWVkRGVsZXRlck5vSWRlbnRpZmllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1l
ZERlbGV0ZXJOb0lkZW50aWZpZXJDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVyOjpnZXRPd25Q
cm9wZXJ0eVNsb3RCeUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkRGVsZXRl
ck5vSWRlbnRpZmllcjo6Z2V0T3duUHJvcGVydHlOYW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpK
U1Rlc3ROYW1lZERlbGV0ZXJOb0lkZW50aWZpZXI6OmRlbGV0ZVByb3BlcnR5QnlJbmRleCk6Cisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkRGVsZXRlclRocm93
aW5nRXhjZXB0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkRGVsZXRlclRo
cm93aW5nRXhjZXB0aW9uQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9uOjpnZXRPd25Q
cm9wZXJ0eVNsb3RCeUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkRGVsZXRl
clRocm93aW5nRXhjZXB0aW9uOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKFdlYkNv
cmU6OkpTVGVzdE5hbWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9uOjpkZWxldGVQcm9wZXJ0eUJ5
SW5kZXgpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZERl
bGV0ZXJXaXRoSWRlbnRpZmllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZERl
bGV0ZXJXaXRoSWRlbnRpZmllckNvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGllcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllcjo6Z2V0T3du
UHJvcGVydHlTbG90QnlJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZERlbGV0
ZXJXaXRoSWRlbnRpZmllcjo6Z2V0T3duUHJvcGVydHlOYW1lcyk6CisgICAgICAgIChXZWJDb3Jl
OjpKU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllcjo6ZGVsZXRlUHJvcGVydHlCeUluZGV4
KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxldGVy
V2l0aEluZGV4ZWRHZXR0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWREZWxl
dGVyV2l0aEluZGV4ZWRHZXR0ZXJDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXI6Omdl
dE93blByb3BlcnR5U2xvdEJ5SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRE
ZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXI6OmdldE93blByb3BlcnR5TmFtZXMpOgorICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGhDb25zdHJ1Y3Rvcjo6
aW5pdGlhbGl6ZVByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRHZXR0
ZXJDYWxsV2l0aDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleCk6CisgICAgICAgIChXZWJDb3Jl
OjpKU1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZp
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXJD
b25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6SlNU
ZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXI6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgpOgor
ICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXI6OmdldE93blBy
b3BlcnR5TmFtZXMpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RO
YW1lZEdldHRlcldpdGhJZGVudGlmaWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5h
bWVkR2V0dGVyV2l0aElkZW50aWZpZXJDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMp
OgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllcjo6Z2V0
T3duUHJvcGVydHlTbG90QnlJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZEdl
dHRlcldpdGhJZGVudGlmaWVyOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKiBiaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXJDb25zdHJ1Y3Rv
cjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRT
ZXR0ZXJOb0lkZW50aWZpZXI6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgpOgorICAgICAgICAo
V2ViQ29yZTo6SlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXI6OmdldE93blByb3BlcnR5TmFt
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXI6OnB1
dEJ5SW5kZXgpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1l
ZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5h
bWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb25Db25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRp
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlv
bjo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RO
YW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246OnB1dEJ5SW5k
ZXgpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRl
cldpdGhJZGVudGlmaWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkU2V0dGVy
V2l0aElkZW50aWZpZXJDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6Z2V0T3duUHJvcGVy
dHlTbG90QnlJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZFNldHRlcldpdGhJ
ZGVudGlmaWVyOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVz
dE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXI6OnB1dEJ5SW5kZXgpOgorICAgICAgICAqIGJpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJD
b25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6SlNU
ZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlcjo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRl
eCk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVy
OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkU2V0
dGVyV2l0aEluZGV4ZWRHZXR0ZXI6OnB1dEJ5SW5kZXgpOgorICAgICAgICAqIGJpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0
ZXJBbmRTZXR0ZXJDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMpOgorICAgICAgICAo
V2ViQ29yZTo6SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlcjo6Z2V0
T3duUHJvcGVydHlTbG90QnlJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZFNl
dHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0
ZXI6OnB1dEJ5SW5kZXgpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3ROYW1lZFNldHRlcldpdGhPdmVycmlkZUJ1aWx0aW5zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkpTVGVzdE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnNDb25zdHJ1Y3Rvcjo6aW5pdGlh
bGl6ZVByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRTZXR0ZXJXaXRo
T3ZlcnJpZGVCdWlsdGluczo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleCk6CisgICAgICAgIChX
ZWJDb3JlOjpKU1Rlc3ROYW1lZFNldHRlcldpdGhPdmVycmlkZUJ1aWx0aW5zOjpnZXRPd25Qcm9w
ZXJ0eU5hbWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkU2V0dGVyV2l0aE92ZXJy
aWRlQnVpbHRpbnM6OnB1dEJ5SW5kZXgpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllcy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0Nv
bnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rl
c3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllczo6Z2V0T3duUHJvcGVydHlTbG90
QnlJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdh
YmxlUHJvcGVydGllczo6Z2V0T3duUHJvcGVydHlOYW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpK
U1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllczo6cHV0QnlJbmRleCk6Cisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aFVu
Zm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGlucy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpKU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0FuZE92ZXJyaWRl
QnVpbHRpbnNDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6SlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVycmlk
ZUJ1aWx0aW5zOjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6
OkpTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWls
dGluczo6Z2V0T3duUHJvcGVydHlOYW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1l
ZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0FuZE92ZXJyaWRlQnVpbHRpbnM6OnB1dEJ5
SW5kZXgpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb2RlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5vZGVDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVBy
b3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Tm9kZVByb3RvdHlwZTo6ZmluaXNo
Q3JlYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0Tm9kZU5hbWVTZXR0ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Tm9kZTo6c2VyaWFsaXplKToKKyAgICAgICAgKiBiaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNv
bnZlcnREaWN0aW9uYXJ5PFRlc3RPYmo6OkRpY3Rpb25hcnk+KToKKyAgICAgICAgKFdlYkNvcmU6
OmNvbnZlcnREaWN0aW9uYXJ5VG9KUyk6CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0RGljdGlv
bmFyeTxUZXN0T2JqOjpEaWN0aW9uYXJ5VGhhdFNob3VsZE5vdFRvbGVyYXRlTnVsbD4pOgorICAg
ICAgICAoV2ViQ29yZTo6Y29udmVydERpY3Rpb25hcnk8VGVzdE9iajo6RGljdGlvbmFyeVRoYXRT
aG91bGRUb2xlcmF0ZU51bGw+KToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnREaWN0aW9uYXJ5
PEFsdGVybmF0ZURpY3Rpb25hcnlOYW1lPik6CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0RGlj
dGlvbmFyeTxUZXN0T2JqOjpQYXJlbnREaWN0aW9uYXJ5Pik6CisgICAgICAgIChXZWJDb3JlOjpj
b252ZXJ0RGljdGlvbmFyeTxUZXN0T2JqOjpDaGlsZERpY3Rpb25hcnk+KToKKyAgICAgICAgKFdl
YkNvcmU6OmNvbnZlcnREaWN0aW9uYXJ5PFRlc3RPYmo6OkNvbmRpdGlvbmFsRGljdGlvbmFyeUE+
KToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnREaWN0aW9uYXJ5PFRlc3RPYmo6OkNvbmRpdGlv
bmFsRGljdGlvbmFyeUI+KToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnREaWN0aW9uYXJ5PFRl
c3RPYmo6OkNvbmRpdGlvbmFsRGljdGlvbmFyeUM+KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVz
dE9iakNvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3Jl
OjpKU1Rlc3RPYmpQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OkpTVGVzdE9iajo6Z2V0T3duUHJvcGVydHlOYW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpzZXRK
U1Rlc3RPYmpDb25zdHJ1Y3RvclN0YXRpY1N0cmluZ0F0dHJTZXR0ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6c2V0SlNUZXN0T2JqRW51bUF0dHJTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0
SlNUZXN0T2JqQnl0ZUF0dHJTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2Jq
T2N0ZXRBdHRyU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9ialNob3J0QXR0
clNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpDbGFtcGVkU2hvcnRBdHRy
U2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9iakVuZm9yY2VSYW5nZVNob3J0
QXR0clNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpVbnNpZ25lZFNob3J0
QXR0clNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpMb25nQXR0clNldHRl
cik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpMb25nTG9uZ0F0dHJTZXR0ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqVW5zaWduZWRMb25nTG9uZ0F0dHJTZXR0ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqU3RyaW5nQXR0clNldHRlcik6CisgICAg
ICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpVc3ZzdHJpbmdBdHRyU2V0dGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OnNldEpTVGVzdE9ialRlc3RPYmpBdHRyU2V0dGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OnNldEpTVGVzdE9ialRlc3ROdWxsYWJsZU9iakF0dHJTZXR0ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6c2V0SlNUZXN0T2JqTGVuaWVudFRlc3RPYmpBdHRyU2V0dGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OnNldEpTVGVzdE9ialN0cmluZ0F0dHJUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nU2V0
dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9ialVzdnN0cmluZ0F0dHJUcmVhdGlu
Z051bGxBc0VtcHR5U3RyaW5nU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9i
akJ5dGVTdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZ1NldHRlcik6CisgICAgICAg
IChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpTdHJpbmdMb25nUmVjb3JkQXR0clNldHRlcik6CisgICAg
ICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpVc3ZzdHJpbmdMb25nUmVjb3JkQXR0clNldHRlcik6
CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpTdHJpbmdPYmpSZWNvcmRBdHRyU2V0dGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9ialN0cmluZ051bGxhYmxlT2JqUmVjb3Jk
QXR0clNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpEaWN0aW9uYXJ5QXR0
clNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpOdWxsYWJsZURpY3Rpb25h
cnlBdHRyU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9iakFubm90YXRlZFR5
cGVJblVuaW9uQXR0clNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpBbm5v
dGF0ZWRUeXBlSW5TZXF1ZW5jZUF0dHJTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNU
ZXN0T2JqSW1wbGVtZW50YXRpb25FbnVtQXR0clNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpz
ZXRKU1Rlc3RPYmpYTUxPYmpBdHRyU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVz
dE9iakNyZWF0ZVNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpSZWZsZWN0
ZWRTdHJpbmdBdHRyU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9ialJlZmxl
Y3RlZFVTVlN0cmluZ0F0dHJTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2Jq
UmVmbGVjdGVkSW50ZWdyYWxBdHRyU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVz
dE9ialJlZmxlY3RlZFVuc2lnbmVkSW50ZWdyYWxBdHRyU2V0dGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OnNldEpTVGVzdE9ialJlZmxlY3RlZEJvb2xlYW5BdHRyU2V0dGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OnNldEpTVGVzdE9ialJlZmxlY3RlZFVSTEF0dHJTZXR0ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6c2V0SlNUZXN0T2JqUmVmbGVjdGVkVVNWVVJMQXR0clNldHRlcik6CisgICAgICAgIChX
ZWJDb3JlOjpzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21JbnRlZ3JhbEF0dHJTZXR0ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tQm9vbGVhbkF0dHJT
ZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tVVJM
QXR0clNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpFbmFibGVkQXRSdW50
aW1lQXR0cmlidXRlU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9iakNvbnN0
cnVjdG9yRW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZVN0YXRpY1NldHRlcik6CisgICAgICAgIChX
ZWJDb3JlOjpzZXRKU1Rlc3RPYmpUeXBlZEFycmF5QXR0clNldHRlcik6CisgICAgICAgIChXZWJD
b3JlOjpzZXRKU1Rlc3RPYmpDdXN0b21BdHRyU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNl
dEpTVGVzdE9iak9uZm9vU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9iak9u
d2Via2l0Zm9vU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9ialdpdGhFeGVj
U3RhdGVBdHRyaWJ1dGVTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqV2l0
aENhbGxXaXRoQW5kU2V0dGVyQ2FsbFdpdGhBdHRyaWJ1dGVTZXR0ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6c2V0SlNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGVTZXR0
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHRBbmRFeGVjU3RhdGVBdHRyaWJ1dGVTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0
SlNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRFeGVjU3RhdGVXaXRoU3BhY2Vz
QXR0cmlidXRlU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9iakNvbmRpdGlv
bmFsQXR0cjFTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqQ29uZGl0aW9u
YWxBdHRyMlNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpDb25kaXRpb25h
bEF0dHIzU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9iakNvbmRpdGlvbmFs
QXR0cjRDb25zdHJ1Y3RvclNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpD
b25kaXRpb25hbEF0dHI1Q29uc3RydWN0b3JTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0
SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNkNvbnN0cnVjdG9yU2V0dGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OnNldEpTVGVzdE9iakFueUF0dHJpYnV0ZVNldHRlcik6CisgICAgICAgIChXZWJDb3Jl
OjpzZXRKU1Rlc3RPYmpPYmplY3RBdHRyaWJ1dGVTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
c2V0SlNUZXN0T2JqTXV0YWJsZVBvaW50U2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpT
VGVzdE9ialN0cmF3YmVycnlTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2Jq
SWRTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqUmVwbGFjZWFibGVBdHRy
aWJ1dGVTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqTnVsbGFibGVMb25n
U2V0dGFibGVBdHRyaWJ1dGVTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2Jq
TnVsbGFibGVTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZVNldHRlcik6CisgICAgICAgIChXZWJDb3Jl
OjpzZXRKU1Rlc3RPYmpOdWxsYWJsZVVTVlN0cmluZ1NldHRhYmxlQXR0cmlidXRlU2V0dGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9iak51bGxhYmxlQnl0ZVN0cmluZ1NldHRhYmxl
QXR0cmlidXRlU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9iakF0dHJpYnV0
ZVdpdGhSZXNlcnZlZEVudW1UeXBlU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVz
dE9ialB1dEZvcndhcmRzQXR0cmlidXRlU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpT
VGVzdE9ialB1dEZvcndhcmRzTnVsbGFibGVBdHRyaWJ1dGVTZXR0ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6c2V0SlNUZXN0T2JqU3RyaW5naWZpZXJBdHRyaWJ1dGVTZXR0ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6c2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxseVJlYWRXcml0ZUF0dHJpYnV0ZVNldHRl
cik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEFuZENvbmRpdGlv
bmFsbHlSZWFkV3JpdGVBdHRyaWJ1dGVTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNU
ZXN0T2JqQ29uZGl0aW9uYWxseUV4cG9zZWRUb1dpbmRvd0F0dHJpYnV0ZVNldHRlcik6CisgICAg
ICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpDb25kaXRpb25hbGx5RXhwb3NlZFRvV29ya2VyQXR0
cmlidXRlU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9iakNvbmRpdGlvbmFs
bHlFeHBvc2VkVG9XaW5kb3dBbmRXb3JrZXJBdHRyaWJ1dGVTZXR0ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6SlNUZXN0T2JqOjpzZXJpYWxpemUpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVBy
b3BlcnRpZXMpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVy
bG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpT
VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2VDb25zdHJ1Y3Rvcjo6aW5pdGlh
bGl6ZVByb3BlcnRpZXMpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RPdmVycmlkZUJ1aWx0aW5zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE92ZXJyaWRl
QnVpbHRpbnNDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6SlNUZXN0T3ZlcnJpZGVCdWlsdGluczo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleCk6
CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RPdmVycmlkZUJ1aWx0aW5zOjpnZXRPd25Qcm9wZXJ0
eU5hbWVzKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0UGx1Z2lu
SW50ZXJmYWNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFBsdWdpbkludGVyZmFjZUNv
bnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rl
c3RQbHVnaW5JbnRlcmZhY2U6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgpOgorICAgICAgICAo
V2ViQ29yZTo6SlNUZXN0UGx1Z2luSW50ZXJmYWNlOjpwdXRCeUluZGV4KToKKyAgICAgICAgKiBi
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnREaWN0aW9uYXJ5PFRlc3RQcm9taXNlUmVqZWN0aW9u
RXZlbnQ6OkluaXQ+KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFByb21pc2VSZWplY3Rpb25F
dmVudENvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGllcyk6CisgICAgICAgICogYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb24uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SlNUZXN0U2VyaWFsaXphdGlvbkNvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGll
cyk6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RTZXJpYWxpemF0aW9uRmlyc3RTdHJpbmdB
dHRyaWJ1dGVTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0U2VyaWFsaXphdGlv
blNlY29uZExvbmdBdHRyaWJ1dGVTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0
U2VyaWFsaXphdGlvblRoaXJkVW5zZXJpYWxpemFibGVBdHRyaWJ1dGVTZXR0ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6c2V0SlNUZXN0U2VyaWFsaXphdGlvbkZvdXJ0aFVucmVzdHJpY3RlZERvdWJs
ZUF0dHJpYnV0ZVNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RTZXJpYWxpemF0
aW9uRmlmdGhMb25nQXR0cmlidXRlU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVz
dFNlcmlhbGl6YXRpb25TaXh0aFR5cGVkZWZBdHRyaWJ1dGVTZXR0ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6c2V0SlNUZXN0U2VyaWFsaXphdGlvblNldmVudGhEaXJlY3RseVNlcmlhbGl6YWJsZUF0
dHJpYnV0ZVNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RTZXJpYWxpemF0aW9u
RWlnaHRoSW5kaXJlY3RseUF0dHJpYnV0ZVNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRK
U1Rlc3RTZXJpYWxpemF0aW9uTmludGhPcHRpb25hbERpcmVjdGx5U2VyaWFsaXphYmxlQXR0cmli
dXRlU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdFNlcmlhbGl6YXRpb25UZW50
aEZyb3plbkFycmF5QXR0cmlidXRlU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVz
dFNlcmlhbGl6YXRpb25FbGV2ZW50aFNlcXVlbmNlQXR0cmlidXRlU2V0dGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OnNldEpTVGVzdFNlcmlhbGl6YXRpb25Ud2VsZnRoSW50ZXJmYWNlU2VxdWVuY2VB
dHRyaWJ1dGVTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0U2VyaWFsaXphdGlvbjo6
c2VyaWFsaXplKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2Vy
aWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNU
ZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2VDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6
ZVByb3BlcnRpZXMpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RT
ZXJpYWxpemF0aW9uSW5oZXJpdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RTZXJpYWxp
emF0aW9uSW5oZXJpdENvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGllcyk6CisgICAgICAg
IChXZWJDb3JlOjpzZXRKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEluaGVyaXRMb25nQXR0cmli
dXRlU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0
OjpzZXJpYWxpemUpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RT
ZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFNl
cmlhbGl6YXRpb25Jbmhlcml0RmluYWxDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMp
OgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbEZp
bmFsTG9uZ0F0dHJpYnV0ZUZvb1NldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RT
ZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsRmluYWxMb25nQXR0cmlidXRlQmFyU2V0dGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWw6OnNlcmlhbGl6
ZSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZUludGVyZmFjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RTZXJpYWxp
emVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMp
OgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJm
YWNlVmFsdWVTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0U2VyaWFsaXplZFNj
cmlwdFZhbHVlSW50ZXJmYWNlQ2FjaGVkVmFsdWVTZXR0ZXIpOgorICAgICAgICAqIGJpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdGFuZGFsb25lRGljdGlvbmFyeS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpjb252ZXJ0RGljdGlvbmFyeTxEaWN0aW9uYXJ5SW1wbE5hbWU+KToKKyAgICAg
ICAgKFdlYkNvcmU6OmNvbnZlcnREaWN0aW9uYXJ5VG9KUyk6CisgICAgICAgICogYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkpTVGVzdFN0cmluZ2lmaWVyQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKToKKyAg
ICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJBbm9ueW1v
dXNPcGVyYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0U3RyaW5naWZpZXJBbm9u
eW1vdXNPcGVyYXRpb25Db25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMpOgorICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllck5hbWVkT3BlcmF0
aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRp
b25Db25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMpOgorICAgICAgICAqIGJpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbkltcGxlbWVudGVkQXMu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25JbXBsZW1l
bnRlZEFzQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKToKKyAgICAgICAgKiBiaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25OYW1lZFRvU3Ry
aW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uTmFt
ZWRUb1N0cmluZ0NvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGllcyk6CisgICAgICAgICog
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1
dGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0U3RyaW5naWZpZXJSZWFkT25seUF0dHJp
YnV0ZUNvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGllcyk6CisgICAgICAgICogYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmlidXRlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmlidXRl
Q29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OnNl
dEpTVGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmlidXRlSWRlbnRpZmllclNldHRlcik6Cisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFR5cGVkZWZzLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkpTVGVzdFR5cGVkZWZzQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9w
ZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdFR5cGVkZWZzVW5zaWduZWRMb25n
TG9uZ0F0dHJTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0VHlwZWRlZnNTZXJp
YWxpemVkU2NyaXB0VmFsdWVTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0VHlw
ZWRlZnNBdHRyaWJ1dGVXaXRoQ2xhbXBTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNU
ZXN0VHlwZWRlZnNBdHRyaWJ1dGVXaXRoQ2xhbXBJblR5cGVkZWZTZXR0ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6c2V0SlNUZXN0VHlwZWRlZnNCdWZmZXJTb3VyY2VBdHRyU2V0dGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OnNldEpTVGVzdFR5cGVkZWZzRG9tVGltZVN0YW1wQXR0clNldHRlcik6Cisg
ICAgICAgICogYnJpZGdlL05QX2pzb2JqZWN0LmNwcDoKKyAgICAgICAgKiBicmlkZ2UvYy9jX2lu
c3RhbmNlLmNwcDoKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OkNJbnN0YW5jZTo6c3RyaW5nVmFs
dWUgY29uc3QpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6Q0luc3RhbmNlOjpnZXRQcm9wZXJ0
eU5hbWVzKToKKyAgICAgICAgKiBicmlkZ2UvYy9jX3V0aWxpdHkuY3BwOgorICAgICAgICAoSlND
OjpCaW5kaW5nczo6aWRlbnRpZmllckZyb21OUElkZW50aWZpZXIpOgorICAgICAgICAqIGJyaWRn
ZS9vYmpjL1dlYlNjcmlwdE9iamVjdC5tbToKKyAgICAgICAgKC1bV2ViU2NyaXB0T2JqZWN0IGNh
bGxXZWJTY3JpcHRNZXRob2Q6d2l0aEFyZ3VtZW50czpdKToKKyAgICAgICAgKC1bV2ViU2NyaXB0
T2JqZWN0IHNldFZhbHVlOmZvcktleTpdKToKKyAgICAgICAgKC1bV2ViU2NyaXB0T2JqZWN0IHZh
bHVlRm9yS2V5Ol0pOgorICAgICAgICAoLVtXZWJTY3JpcHRPYmplY3QgcmVtb3ZlV2ViU2NyaXB0
S2V5Ol0pOgorICAgICAgICAoLVtXZWJTY3JpcHRPYmplY3QgaGFzV2ViU2NyaXB0S2V5Ol0pOgor
ICAgICAgICAqIGJyaWRnZS9vYmpjL29iamNfcnVudGltZS5tbToKKyAgICAgICAgKEpTQzo6Qmlu
ZGluZ3M6Ok9iamNGYWxsYmFja09iamVjdEltcDo6ZGVmYXVsdFZhbHVlKToKKyAgICAgICAgKiBi
cmlkZ2Uvb2JqYy9vYmpjX3V0aWxpdHkubW06CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpjb252
ZXJ0TlNTdHJpbmdUb1N0cmluZyk6CisgICAgICAgICogYnJpZGdlL3J1bnRpbWVfYXJyYXkuY3Bw
OgorICAgICAgICAoSlNDOjpSdW50aW1lQXJyYXk6OmdldE93blByb3BlcnR5TmFtZXMpOgorICAg
ICAgICAqIGNvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25QYXJzZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OmxvYWRUcmlnZ2VyKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpsb2FkQWN0aW9uKToKKyAgICAgICAgKiBjcnlw
dG8vU3VidGxlQ3J5cHRvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om5vcm1hbGl6ZUNyeXB0b0Fs
Z29yaXRobVBhcmFtZXRlcnMpOgorICAgICAgICAqIGRvbWppdC9ET01KSVRIZWxwZXJzLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpET01KSVQ6OnRvV3JhcHBlclNsb3cpOgorICAgICAgICAqIGh0bWwv
SFRNTE1lZGlhRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb250cm9sbGVySlNWYWx1
ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50Ojp1cGRhdGVDYXB0aW9uQ29u
dGFpbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OmVuc3VyZU1lZGlh
Q29udHJvbHNJbmplY3RlZFNjcmlwdCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVt
ZW50OjpzZXRDb250cm9sbGVySlNQcm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVk
aWFFbGVtZW50OjpkaWRBZGRVc2VyQWdlbnRTaGFkb3dSb290KToKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxNZWRpYUVsZW1lbnQ6OnVwZGF0ZU1lZGlhQ29udHJvbHNBZnRlclByZXNlbnRhdGlvbk1v
ZGVDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6Z2V0Q3VycmVu
dE1lZGlhQ29udHJvbHNTdGF0dXMpOgorICAgICAgICAqIGh0bWwvSFRNTFBsdWdJbkltYWdlRWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MUGx1Z0luSW1hZ2VFbGVtZW50OjpkaWRB
ZGRVc2VyQWdlbnRTaGFkb3dSb290KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRnJv
bnRlbmRIb3N0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kSG9zdDo6
YWRkU2VsZlRvR2xvYmFsT2JqZWN0SW5Xb3JsZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JGcm9udGVuZEhvc3Q6OnNob3dDb250ZXh0TWVudSk6CisgICAgICAgICogaW5zcGVjdG9yL1dl
YkluamVjdGVkU2NyaXB0SG9zdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJJbmplY3RlZFNj
cmlwdEhvc3Q6OnN1YnR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6Y29uc3RydWN0SW50ZXJuYWxQ
cm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpvYmplY3RGb3JQYXltZW50T3B0aW9ucyk6Cisg
ICAgICAgIChXZWJDb3JlOjpvYmplY3RGb3JQYXltZW50Q3VycmVuY3lBbW91bnQpOgorICAgICAg
ICAoV2ViQ29yZTo6b2JqZWN0Rm9yUGF5bWVudEl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6b2Jq
ZWN0Rm9yUGF5bWVudFNoaXBwaW5nT3B0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Om9iamVjdEZv
clBheW1lbnREZXRhaWxzTW9kaWZpZXIpOgorICAgICAgICAoV2ViQ29yZTo6b2JqZWN0Rm9yUGF5
bWVudERldGFpbHMpOgorICAgICAgICAoV2ViQ29yZTo6anNTdHJpbmdGb3JQYXltZW50UmVxdWVz
dFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkluamVjdGVkU2NyaXB0SG9zdDo6Z2V0SW50
ZXJuYWxQcm9wZXJ0aWVzKToKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNh
bnZhc0FnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNhbnZhc0FnZW50Ojpj
b25zb2xlU3RhcnRSZWNvcmRpbmdDYW52YXMpOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMv
SW5zcGVjdG9yRE9NQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdl
bnQ6OmJ1aWxkT2JqZWN0Rm9yRXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JET01BZ2VudDo6c2NyaXB0VmFsdWVBc05vZGUpOgorICAgICAgICAqIGluc3BlY3Rvci9h
Z2VudHMvcGFnZS9QYWdlQXVkaXRBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdlQXVk
aXRBZ2VudDo6cG9wdWxhdGVBdWRpdE9iamVjdCk6CisgICAgICAgICogcGFnZS9QYWdlQ29uc29s
ZUNsaWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdlQ29uc29sZUNsaWVudDo6c2NyZWVu
c2hvdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ3VzdG9tUGFpbnRJbWFnZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21QYWludEltYWdlOjpkb0N1c3RvbVBhaW50KToKKyAg
ICAgICAgKiB0ZXN0aW5nL2pzL1dlYkNvcmVUZXN0U3VwcG9ydC5jcHA6CisgICAgICAgIChXZWJD
b3JlVGVzdFN1cHBvcnQ6OmluamVjdEludGVybmFsc09iamVjdCk6CisgICAgICAgIChXZWJDb3Jl
VGVzdFN1cHBvcnQ6OnNldHVwTmV3bHlDcmVhdGVkU2VydmljZVdvcmtlcik6CisgICAgICAgICog
d29ya2xldHMvUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UGFpbnRXb3JrbGV0R2xvYmFsU2NvcGU6OnJlZ2lzdGVyUGFpbnQpOgorCiAyMDE5LTA4LTI2ICBE
ZXZpbiBSb3Vzc28gIDxkcm91c3NvQGFwcGxlLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9y
OiB1bmlmeSBhZ2VudCBjb21tYW5kIGVycm9yIG1lc3NhZ2VzCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL2xlZ2FjeS9MZWdhY3lDRE1TZXNzaW9uQ2xlYXJLZXku
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW5jcnlwdGVkbWVkaWEv
bGVnYWN5L0xlZ2FjeUNETVNlc3Npb25DbGVhcktleS5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysr
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW5jcnlwdGVkbWVkaWEvbGVnYWN5L0xlZ2FjeUNETVNl
c3Npb25DbGVhcktleS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
IAogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEwOSw3ICsxMDksNyBAQCBib29sIENE
TVNlc3Npb25DbGVhcktleTo6dXBkYXRlKFVpbnQ4QXJyCiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQogCi0gICAgICAgIGF1dG8ga2V5c0FycmF5VmFsdWUgPSBhc09iamVjdChrZXlzRGF0
YVZhbHVlKS0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJrZXlz
IikpOworICAgICAgICBhdXRvIGtleXNBcnJheVZhbHVlID0gYXNPYmplY3Qoa2V5c0RhdGFWYWx1
ZSktPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJrZXlzIikpOwogICAg
ICAgICBpZiAoc2NvcGUuZXhjZXB0aW9uKCkgfHwgIWlzSlNBcnJheShrZXlzQXJyYXlWYWx1ZSkp
IHsKICAgICAgICAgICAgIExPRyhNZWRpYSwgIkNETVNlc3Npb25DbGVhcktleTo6dXBkYXRlKCVw
KSAtIGZhaWxlZDoga2V5cyBhcnJheSBtaXNzaW5nIG9yIGVtcHR5IiwgdGhpcyk7CiAgICAgICAg
ICAgICBicmVhazsKQEAgLTEzMyw4ICsxMzMsOCBAQCBib29sIENETVNlc3Npb25DbGVhcktleTo6
dXBkYXRlKFVpbnQ4QXJyCiAKICAgICAgICAgICAgIGF1dG8ga2V5T2JqZWN0ID0gYXNPYmplY3Qo
a2V5VmFsdWUpOwogCi0gICAgICAgICAgICBhdXRvIGdldFN0cmluZ1Byb3BlcnR5ID0gWyZzY29w
ZSwgJnN0YXRlLCAma2V5T2JqZWN0XShjb25zdCBjaGFyKiBuYW1lKSAtPiBTdHJpbmcgewotICAg
ICAgICAgICAgICAgIGF1dG8gdmFsdWUgPSBrZXlPYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcoJnN0YXRlLCBuYW1lKSk7CisgICAgICAgICAgICBhdXRvIGdldFN0cmlu
Z1Byb3BlcnR5ID0gWyZzY29wZSwgJnN0YXRlLCAma2V5T2JqZWN0LCAmdm1dKGNvbnN0IGNoYXIq
IG5hbWUpIC0+IFN0cmluZyB7CisgICAgICAgICAgICAgICAgYXV0byB2YWx1ZSA9IGtleU9iamVj
dC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgbmFtZSkpOwogICAgICAg
ICAgICAgICAgIGlmIChzY29wZS5leGNlcHRpb24oKSB8fCAhdmFsdWUuaXNTdHJpbmcoKSkKICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9wbHVnaW5zL1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Lm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGx1Z2lucy9RdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVu
dC5tbQkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wbHVnaW5z
L1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTU0LDcg
KzE1NCw3IEBAIGJvb2wgUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQ6OmVuc3VyZVIKICAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CiAgICAgSlNDOjpFeGVjU3RhdGUq
IGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKICAgICAKLSAgICBKU0M6OkpTVmFs
dWUgcmVwbGFjZW1lbnRGdW5jdGlvbiA9IGdsb2JhbE9iamVjdC0+Z2V0KGV4ZWMsIEpTQzo6SWRl
bnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCAiY3JlYXRlUGx1Z2luUmVwbGFjZW1lbnQiKSk7Cisg
ICAgSlNDOjpKU1ZhbHVlIHJlcGxhY2VtZW50RnVuY3Rpb24gPSBnbG9iYWxPYmplY3QtPmdldChl
eGVjLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJjcmVhdGVQbHVnaW5SZXBsYWNl
bWVudCIpKTsKICAgICBpZiAocmVwbGFjZW1lbnRGdW5jdGlvbi5pc0Z1bmN0aW9uKHZtKSkKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgCkBAIC0xODUsNyArMTg1LDcgQEAgYm9vbCBRdWlja1Rp
bWVQbHVnaW5SZXBsYWNlbWVudDo6aW5zdGFsbAogICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0g
Z2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CiAKICAgICAvLyBMb29rdXAgdGhlICJjcmVhdGVQ
bHVnaW5SZXBsYWNlbWVudCIgZnVuY3Rpb24uCi0gICAgSlNDOjpKU1ZhbHVlIHJlcGxhY2VtZW50
RnVuY3Rpb24gPSBnbG9iYWxPYmplY3QtPmdldChleGVjLCBKU0M6OklkZW50aWZpZXI6OmZyb21T
dHJpbmcoZXhlYywgImNyZWF0ZVBsdWdpblJlcGxhY2VtZW50IikpOworICAgIEpTQzo6SlNWYWx1
ZSByZXBsYWNlbWVudEZ1bmN0aW9uID0gZ2xvYmFsT2JqZWN0LT5nZXQoZXhlYywgSlNDOjpJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiY3JlYXRlUGx1Z2luUmVwbGFjZW1lbnQiKSk7CiAgICAg
aWYgKHJlcGxhY2VtZW50RnVuY3Rpb24uaXNVbmRlZmluZWRPck51bGwoKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIEpTQzo6SlNPYmplY3QqIHJlcGxhY2VtZW50T2JqZWN0ID0gcmVwbGFj
ZW1lbnRGdW5jdGlvbi50b09iamVjdChleGVjKTsKQEAgLTIwOSw3ICsyMDksNyBAQCBib29sIFF1
aWNrVGltZVBsdWdpblJlcGxhY2VtZW50OjppbnN0YWxsCiAgICAgfQogCiAgICAgLy8gR2V0IHRo
ZSA8dmlkZW8+IGNyZWF0ZWQgdG8gcmVwbGFjZSB0aGUgcGx1Zy1pbi4KLSAgICBKU0M6OkpTVmFs
dWUgdmFsdWUgPSByZXBsYWNlbWVudC5nZXQoZXhlYywgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKGV4ZWMsICJ2aWRlbyIpKTsKKyAgICBKU0M6OkpTVmFsdWUgdmFsdWUgPSByZXBsYWNlbWVu
dC5nZXQoZXhlYywgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAidmlkZW8iKSk7CiAg
ICAgaWYgKCFzY29wZS5leGNlcHRpb24oKSAmJiAhdmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkK
ICAgICAgICAgbV9tZWRpYUVsZW1lbnQgPSBKU0hUTUxWaWRlb0VsZW1lbnQ6OnRvV3JhcHBlZCh2
bSwgdmFsdWUpOwogCkBAIC0yMjAsNyArMjIwLDcgQEAgYm9vbCBRdWlja1RpbWVQbHVnaW5SZXBs
YWNlbWVudDo6aW5zdGFsbAogICAgIH0KIAogICAgIC8vIEdldCB0aGUgc2NyaXB0aW5nIGludGVy
ZmFjZS4KLSAgICB2YWx1ZSA9IHJlcGxhY2VtZW50LmdldChleGVjLCBKU0M6OklkZW50aWZpZXI6
OmZyb21TdHJpbmcoZXhlYywgInNjcmlwdE9iamVjdCIpKTsKKyAgICB2YWx1ZSA9IHJlcGxhY2Vt
ZW50LmdldChleGVjLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJzY3JpcHRPYmpl
Y3QiKSk7CiAgICAgaWYgKCFzY29wZS5leGNlcHRpb24oKSAmJiAhdmFsdWUuaXNVbmRlZmluZWRP
ck51bGwoKSkgewogICAgICAgICBtX3NjcmlwdE9iamVjdCA9IHZhbHVlLnRvT2JqZWN0KGV4ZWMp
OwogICAgICAgICBzY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvYW5pbWF0aW9uL0tleWZyYW1lRWZmZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9hbmltYXRpb24vS2V5ZnJhbWVFZmZlY3QuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBT
b3VyY2UvV2ViQ29yZS9hbmltYXRpb24vS2V5ZnJhbWVFZmZlY3QuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMjA4LDcgKzIwOCw3IEBAIHN0YXRpYyBpbmxpbmUgRXhjZXB0aW9uT3I8S2V5ZnJhbWVF
ZmZlY3QKICAgICAvLyAgICAgICBuYW1lIHRvIElETCBhdHRyaWJ1dGUgbmFtZSBhbGdvcml0aG0u
CiAKICAgICAvLyAzLiBMZXQgaW5wdXQgcHJvcGVydGllcyBiZSB0aGUgcmVzdWx0IG9mIGNhbGxp
bmcgdGhlIEVudW1lcmFibGVPd25OYW1lcyBvcGVyYXRpb24gd2l0aCBrZXlmcmFtZSBpbnB1dCBh
cyB0aGUgb2JqZWN0LgotICAgIFByb3BlcnR5TmFtZUFycmF5IGlucHV0UHJvcGVydGllcygmdm0s
IFByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3MsIFByaXZhdGVTeW1ib2xNb2RlOjpFeGNsdWRlKTsK
KyAgICBQcm9wZXJ0eU5hbWVBcnJheSBpbnB1dFByb3BlcnRpZXModm0sIFByb3BlcnR5TmFtZU1v
ZGU6OlN0cmluZ3MsIFByaXZhdGVTeW1ib2xNb2RlOjpFeGNsdWRlKTsKICAgICBKU09iamVjdDo6
Z2V0T3duUHJvcGVydHlOYW1lcyhrZXlmcmFtZXNJbnB1dC5nZXQoKSwgJnN0YXRlLCBpbnB1dFBy
b3BlcnRpZXMsIEVudW1lcmF0aW9uTW9kZSgpKTsKIAogICAgIC8vIDQuIE1ha2UgdXAgYSBuZXcg
bGlzdCBhbmltYXRpb24gcHJvcGVydGllcyB0aGF0IGNvbnNpc3RzIG9mIGFsbCBvZiB0aGUgcHJv
cGVydGllcyB0aGF0IGFyZSBpbiBib3RoIGlucHV0IHByb3BlcnRpZXMgYW5kIGFuaW1hdGFibGUK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0dDQ29udHJvbGxlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvR0NDb250cm9sbGVyLmNwcAkocmV2
aXNpb24gMjQ5MTI4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvR0NDb250cm9sbGVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDctMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDctMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE1MCw3ICsxNTAsNyBAQCB2b2lkIEdDQ29udHJvbGxl
cjo6ZHVtcEhlYXAoKQogICAgIFZNJiB2bSA9IGNvbW1vblZNKCk7CiAgICAgSlNMb2NrSG9sZGVy
IGxvY2sodm0pOwogCi0gICAgc2FuaXRpemVTdGFja0ZvclZNKCZ2bSk7CisgICAgc2FuaXRpemVT
dGFja0ZvclZNKHZtKTsKIAogICAgIFN0cmluZyBqc29uRGF0YTsKICAgICB7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVzLmNwcAko
cmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSURCQmluZGlu
Z1V0aWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogQ29w
eXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5
cmlnaHQgKEMpIDIwMTIgTWljaGFlbCBQcnVldHQgPG1pY2hhZWxANjhrLm9yZz4KLSAqIENvcHly
aWdodCAoQykgMjAxNCwgMjAxNSwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY2LDkgKzY2LDkgQEAgc3Rh
dGljIGJvb2wgZ2V0KEV4ZWNTdGF0ZSYgZXhlYywgSlNWYWx1ZQogICAgIGlmICghb2JqZWN0Lmlz
T2JqZWN0KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIFZNJiB2bSA9IGV4ZWMudm0o
KTsKICAgICBhdXRvKiBvYmogPSBhc09iamVjdChvYmplY3QpOwotICAgIElkZW50aWZpZXIgaWRl
bnRpZmllciA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJmV4ZWMudm0oKSwga2V5UGF0aEVsZW1l
bnQpOwotICAgIGF1dG8mIHZtID0gZXhlYy52bSgpOworICAgIElkZW50aWZpZXIgaWRlbnRpZmll
ciA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIGtleVBhdGhFbGVtZW50KTsKICAgICBpZiAo
b2JqLT5pbmhlcml0czxKU0FycmF5Pih2bSkgJiYga2V5UGF0aEVsZW1lbnQgPT0gImxlbmd0aCIp
IHsKICAgICAgICAgcmVzdWx0ID0gb2JqLT5nZXQoJmV4ZWMsIGlkZW50aWZpZXIpOwogICAgICAg
ICByZXR1cm4gdHJ1ZTsKQEAgLTc5LDEzICs3OSwxMyBAQCBzdGF0aWMgYm9vbCBnZXQoRXhlY1N0
YXRlJiBleGVjLCBKU1ZhbHVlCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQog
ICAgICAgICBpZiAoa2V5UGF0aEVsZW1lbnQgPT0gInR5cGUiKSB7Ci0gICAgICAgICAgICByZXN1
bHQgPSBqc1N0cmluZygmdm0sIGpzQ2FzdDxKU0Jsb2IqPihvYmopLT53cmFwcGVkKCkudHlwZSgp
KTsKKyAgICAgICAgICAgIHJlc3VsdCA9IGpzU3RyaW5nKHZtLCBqc0Nhc3Q8SlNCbG9iKj4ob2Jq
KS0+d3JhcHBlZCgpLnR5cGUoKSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAg
fQogICAgIH0KICAgICBpZiAob2JqLT5pbmhlcml0czxKU0ZpbGU+KHZtKSkgewogICAgICAgICBp
ZiAoa2V5UGF0aEVsZW1lbnQgPT0gIm5hbWUiKSB7Ci0gICAgICAgICAgICByZXN1bHQgPSBqc1N0
cmluZygmdm0sIGpzQ2FzdDxKU0ZpbGUqPihvYmopLT53cmFwcGVkKCkubmFtZSgpKTsKKyAgICAg
ICAgICAgIHJlc3VsdCA9IGpzU3RyaW5nKHZtLCBqc0Nhc3Q8SlNGaWxlKj4ob2JqKS0+d3JhcHBl
ZCgpLm5hbWUoKSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgICAg
ICBpZiAoa2V5UGF0aEVsZW1lbnQgPT0gImxhc3RNb2RpZmllZCIpIHsKQEAgLTExOCw4ICsxMTgs
OSBAQCBzdGF0aWMgYm9vbCBzZXQoRXhlY1N0YXRlJiBleGVjLCBKU1ZhbHVlCiB7CiAgICAgaWYg
KCFjYW5TZXQob2JqZWN0LCBrZXlQYXRoRWxlbWVudCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBJZGVudGlmaWVyIGlkZW50aWZpZXIgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZleGVj
LnZtKCksIGtleVBhdGhFbGVtZW50KTsKLSAgICBhc09iamVjdChvYmplY3QpLT5wdXREaXJlY3Qo
ZXhlYy52bSgpLCBpZGVudGlmaWVyLCBqc1ZhbHVlKTsKKyAgICBWTSYgdm0gPSBleGVjLnZtKCk7
CisgICAgSWRlbnRpZmllciBpZGVudGlmaWVyID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwg
a2V5UGF0aEVsZW1lbnQpOworICAgIGFzT2JqZWN0KG9iamVjdCktPnB1dERpcmVjdCh2bSwgaWRl
bnRpZmllciwganNWYWx1ZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NTUnVsZUxpc3RDdXN0b20uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NTUnVsZUxpc3RDdXN0b20uY3BwCShyZXZp
c2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1J1bGVMaXN0
Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHQgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDktMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodCByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzksNyArMzksNyBAQCB1c2luZyBuYW1lc3BhY2UgSlND
OwogYm9vbCBKU0NTU1J1bGVMaXN0T3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpT
Qzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0b3ImIHZpc2l0
b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAgSlNDU1NSdWxlTGlzdCoganNDU1NSdWxl
TGlzdCA9IGpzQ2FzdDxKU0NTU1J1bGVMaXN0Kj4oaGFuZGxlLnNsb3QoKS0+YXNDZWxsKCkpOwot
ICAgIGlmICghanNDU1NSdWxlTGlzdC0+aGFzQ3VzdG9tUHJvcGVydGllcygqanNDU1NSdWxlTGlz
dC0+dm0oKSkpCisgICAgaWYgKCFqc0NTU1J1bGVMaXN0LT5oYXNDdXN0b21Qcm9wZXJ0aWVzKGpz
Q1NTUnVsZUxpc3QtPnZtKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoQ1NT
U3R5bGVTaGVldCogc3R5bGVTaGVldCA9IGpzQ1NTUnVsZUxpc3QtPndyYXBwZWQoKS5zdHlsZVNo
ZWV0KCkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tRWxlbWVu
dFJlZ2lzdHJ5Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0N1c3RvbUVsZW1lbnRSZWdpc3RyeUN1c3RvbS5jcHAJKHJldmlzaW9uIDI0OTEyOCkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5Q3Vz
dG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEyOSwyNSArMTI5LDI1IEBAIEpTVmFsdWUgSlND
dXN0b21FbGVtZW50UmVnaXN0cnk6OmRlZmluZSgKICAgICBRdWFsaWZpZWROYW1lIG5hbWUobnVs
bEF0b20oKSwgbG9jYWxOYW1lLCBIVE1MTmFtZXM6OnhodG1sTmFtZXNwYWNlVVJJKTsKICAgICBh
dXRvIGVsZW1lbnRJbnRlcmZhY2UgPSBKU0N1c3RvbUVsZW1lbnRJbnRlcmZhY2U6OmNyZWF0ZShu
YW1lLCBjb25zdHJ1Y3RvciwgZ2xvYmFsT2JqZWN0KCkpOwogCi0gICAgYXV0byogY29ubmVjdGVk
Q2FsbGJhY2sgPSBnZXRDdXN0b21FbGVtZW50Q2FsbGJhY2soc3RhdGUsIHByb3RvdHlwZU9iamVj
dCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJjb25uZWN0ZWRDYWxsYmFjayIpKTsKKyAg
ICBhdXRvKiBjb25uZWN0ZWRDYWxsYmFjayA9IGdldEN1c3RvbUVsZW1lbnRDYWxsYmFjayhzdGF0
ZSwgcHJvdG90eXBlT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiY29ubmVjdGVk
Q2FsbGJhY2siKSk7CiAgICAgaWYgKGNvbm5lY3RlZENhbGxiYWNrKQogICAgICAgICBlbGVtZW50
SW50ZXJmYWNlLT5zZXRDb25uZWN0ZWRDYWxsYmFjayhjb25uZWN0ZWRDYWxsYmFjayk7CiAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZSgpKTsKIAotICAgIGF1dG8qIGRpc2Nv
bm5lY3RlZENhbGxiYWNrID0gZ2V0Q3VzdG9tRWxlbWVudENhbGxiYWNrKHN0YXRlLCBwcm90b3R5
cGVPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiZGlzY29ubmVjdGVkQ2FsbGJh
Y2siKSk7CisgICAgYXV0byogZGlzY29ubmVjdGVkQ2FsbGJhY2sgPSBnZXRDdXN0b21FbGVtZW50
Q2FsbGJhY2soc3RhdGUsIHByb3RvdHlwZU9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2
bSwgImRpc2Nvbm5lY3RlZENhbGxiYWNrIikpOwogICAgIGlmIChkaXNjb25uZWN0ZWRDYWxsYmFj
aykKICAgICAgICAgZWxlbWVudEludGVyZmFjZS0+c2V0RGlzY29ubmVjdGVkQ2FsbGJhY2soZGlz
Y29ubmVjdGVkQ2FsbGJhY2spOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTVmFs
dWUoKSk7CiAKLSAgICBhdXRvKiBhZG9wdGVkQ2FsbGJhY2sgPSBnZXRDdXN0b21FbGVtZW50Q2Fs
bGJhY2soc3RhdGUsIHByb3RvdHlwZU9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0s
ICJhZG9wdGVkQ2FsbGJhY2siKSk7CisgICAgYXV0byogYWRvcHRlZENhbGxiYWNrID0gZ2V0Q3Vz
dG9tRWxlbWVudENhbGxiYWNrKHN0YXRlLCBwcm90b3R5cGVPYmplY3QsIElkZW50aWZpZXI6OmZy
b21TdHJpbmcodm0sICJhZG9wdGVkQ2FsbGJhY2siKSk7CiAgICAgaWYgKGFkb3B0ZWRDYWxsYmFj
aykKICAgICAgICAgZWxlbWVudEludGVyZmFjZS0+c2V0QWRvcHRlZENhbGxiYWNrKGFkb3B0ZWRD
YWxsYmFjayk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZSgpKTsKIAot
ICAgIGF1dG8qIGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayA9IGdldEN1c3RvbUVsZW1lbnRDYWxs
YmFjayhzdGF0ZSwgcHJvdG90eXBlT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwg
ImF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayIpKTsKKyAgICBhdXRvKiBhdHRyaWJ1dGVDaGFuZ2Vk
Q2FsbGJhY2sgPSBnZXRDdXN0b21FbGVtZW50Q2FsbGJhY2soc3RhdGUsIHByb3RvdHlwZU9iamVj
dCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayIp
KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkpOwogICAgIGlmIChh
dHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2spIHsKLSAgICAgICAgYXV0byBvYnNlcnZlZEF0dHJpYnV0
ZXNWYWx1ZSA9IGNvbnN0cnVjdG9yLT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KCZzdGF0ZSwgIm9ic2VydmVkQXR0cmlidXRlcyIpKTsKKyAgICAgICAgYXV0byBvYnNlcnZlZEF0
dHJpYnV0ZXNWYWx1ZSA9IGNvbnN0cnVjdG9yLT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKHZtLCAib2JzZXJ2ZWRBdHRyaWJ1dGVzIikpOwogICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkpOwogICAgICAgICBpZiAoIW9ic2VydmVkQXR0cmlidXRl
c1ZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKICAgICAgICAgICAgIGF1dG8gb2JzZXJ2ZWRBdHRyaWJ1
dGVzID0gY29udmVydDxJRExTZXF1ZW5jZTxJRExET01TdHJpbmc+PihzdGF0ZSwgb2JzZXJ2ZWRB
dHRyaWJ1dGVzVmFsdWUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0
b21YUGF0aE5TUmVzb2x2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21YUGF0aE5TUmVzb2x2ZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNywg
MjAxMyBBbGV4ZXkgUHJvc2t1cnlha292IChhcEBueXBvcC5jb20pCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC03Miw3ICs3Myw3IEBAIFN0cmluZyBKU0N1c3RvbVhQYXRoTlNSZXNv
bHZlcjo6bG9va3VwTmEKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBtX2dsb2JhbE9iamVjdC0+Z2xv
YmFsRXhlYygpOwogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgICAgIAotICAgIEpTVmFs
dWUgZnVuY3Rpb24gPSBtX2N1c3RvbVJlc29sdmVyLT5nZXQoZXhlYywgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyhleGVjLCAibG9va3VwTmFtZXNwYWNlVVJJIikpOworICAgIEpTVmFsdWUgZnVuY3Rp
b24gPSBtX2N1c3RvbVJlc29sdmVyLT5nZXQoZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2
bSwgImxvb2t1cE5hbWVzcGFjZVVSSSIpKTsKICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICBD
YWxsVHlwZSBjYWxsVHlwZSA9IGdldENhbGxEYXRhKHZtLCBmdW5jdGlvbiwgY2FsbERhdGEpOwog
ICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZTo6Tm9uZSkgewpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0UmVjb3JkLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0UmVjb3JkLmgJKHJldmlzaW9uIDI0OTEy
OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydFJlY29yZC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0y
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
Ni0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtODUsNyArODUsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBLLCB0eXBl
bmFtZSBWPiBzdHJ1Y3QgCiAgICAgICAgIFJldHVyblR5cGUgcmVzdWx0OwogICAgIAogICAgICAg
ICAvLyA0LiBMZXQga2V5cyBiZSA/IE8uW1tPd25Qcm9wZXJ0eUtleXNdXSgpLgotICAgICAgICBK
U0M6OlByb3BlcnR5TmFtZUFycmF5IGtleXMoJnZtLCBKU0M6OlByb3BlcnR5TmFtZU1vZGU6OlN0
cmluZ3MsIEpTQzo6UHJpdmF0ZVN5bWJvbE1vZGU6OkV4Y2x1ZGUpOworICAgICAgICBKU0M6OlBy
b3BlcnR5TmFtZUFycmF5IGtleXModm0sIEpTQzo6UHJvcGVydHlOYW1lTW9kZTo6U3RyaW5ncywg
SlNDOjpQcml2YXRlU3ltYm9sTW9kZTo6RXhjbHVkZSk7CiAgICAgICAgIG9iamVjdC0+bWV0aG9k
VGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgJnN0YXRlLCBrZXlzLCBKU0M6
OkVudW1lcmF0aW9uTW9kZShKU0M6OkRvbnRFbnVtUHJvcGVydGllc01vZGU6OkluY2x1ZGUpKTsK
IAogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwpAQCAtMTUwLDcgKzE1
MCw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIEssIHR5cGVuYW1lIFY+IHN0cnVjdCAKICAgICAgICAg
ICAgIGF1dG8gZXNWYWx1ZSA9IHRvSlM8Vj4oc3RhdGUsIGdsb2JhbE9iamVjdCwga2V5VmFsdWVQ
YWlyLnZhbHVlKTsKIAogICAgICAgICAgICAgLy8gMy4gTGV0IGNyZWF0ZWQgYmUgISBDcmVhdGVE
YXRhUHJvcGVydHkocmVzdWx0LCBlc0tleSwgZXNWYWx1ZSkuCi0gICAgICAgICAgICBib29sIGNy
ZWF0ZWQgPSByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KCZ2bSwga2V5VmFsdWVQYWlyLmtleSksIGVzVmFsdWUpOworICAgICAgICAgICAgYm9vbCBjcmVh
dGVkID0gcmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2
bSwga2V5VmFsdWVQYWlyLmtleSksIGVzVmFsdWUpOwogCiAgICAgICAgICAgICAvLyA0LiBBc3Nl
cnQ6IGNyZWF0ZWQgaXMgdHJ1ZS4KICAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoY3JlYXRlZCwg
Y3JlYXRlZCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRT
dHJpbmdzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01D
b252ZXJ0U3RyaW5ncy5oCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RPTUNvbnZlcnRTdHJpbmdzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjgsMTIgKzY4LDEy
IEBAIHRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETERPTVN0cmkKIAogICAgIHN0YXRp
YyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IFVuY2Fj
aGVkU3RyaW5nJiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzU3RyaW5nKCZz
dGF0ZSwgdmFsdWUuc3RyaW5nKTsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNTdHJpbmcoc3RhdGUu
dm0oKSwgdmFsdWUuc3RyaW5nKTsKICAgICB9CiAKICAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBPd25lZFN0cmluZyYgdmFsdWUpCiAg
ICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc093bmVkU3RyaW5nKCZzdGF0ZSwgdmFsdWUuc3Ry
aW5nKTsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNPd25lZFN0cmluZyhzdGF0ZS52bSgpLCB2YWx1
ZS5zdHJpbmcpOwogICAgIH0KIH07CiAKQEAgLTk1LDEyICs5NSwxMiBAQCB0ZW1wbGF0ZTw+IHN0
cnVjdCBKU0NvbnZlcnRlcjxJRExCeXRlU3RyCiAKICAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBVbmNhY2hlZFN0cmluZyYgdmFsdWUp
CiAgICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc1N0cmluZygmc3RhdGUsIHZhbHVlLnN0cmlu
Zyk7CisgICAgICAgIHJldHVybiBKU0M6OmpzU3RyaW5nKHN0YXRlLnZtKCksIHZhbHVlLnN0cmlu
Zyk7CiAgICAgfQogCiAgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgY29uc3QgT3duZWRTdHJpbmcmIHZhbHVlKQogICAgIHsKLSAgICAgICAgcmV0
dXJuIEpTQzo6anNPd25lZFN0cmluZygmc3RhdGUsIHZhbHVlLnN0cmluZyk7CisgICAgICAgIHJl
dHVybiBKU0M6OmpzT3duZWRTdHJpbmcoc3RhdGUudm0oKSwgdmFsdWUuc3RyaW5nKTsKICAgICB9
CiB9OwogCkBAIC0xMjIsMTIgKzEyMiwxMiBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRl
cjxJRExVU1ZTdHJpCiAKICAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBjb25zdCBVbmNhY2hlZFN0cmluZyYgdmFsdWUpCiAgICAgewotICAgICAg
ICByZXR1cm4gSlNDOjpqc1N0cmluZygmc3RhdGUsIHZhbHVlLnN0cmluZyk7CisgICAgICAgIHJl
dHVybiBKU0M6OmpzU3RyaW5nKHN0YXRlLnZtKCksIHZhbHVlLnN0cmluZyk7CiAgICAgfQogCiAg
ICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29u
c3QgT3duZWRTdHJpbmcmIHZhbHVlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNPd25l
ZFN0cmluZygmc3RhdGUsIHZhbHVlLnN0cmluZyk7CisgICAgICAgIHJldHVybiBKU0M6OmpzT3du
ZWRTdHJpbmcoc3RhdGUudm0oKSwgdmFsdWUuc3RyaW5nKTsKICAgICB9CiB9OwogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCShy
ZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRv
d0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDA3LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA3LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICog
Q29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgpAQCAtMjM2LDYgKzIzNiw3IEBAIGJvb2wgSlNET01XaW5kb3c6OmdldE93blByb3Bl
cnR5U2xvdChKU08KIC8vICgzKSBuYW1lZCBwcm9wZXJ0aWVzIChpbiBmYWN0LCB0aGVzZSBzaG91
bGRuJ3QgYmUgb24gdGhlIHdpbmRvdywgc2hvdWxkIGJlIG9uIHRoZSBOUE8pLgogYm9vbCBKU0RP
TVdpbmRvdzo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU09iamVjdCogb2JqZWN0LCBFeGVj
U3RhdGUqIHN0YXRlLCB1bnNpZ25lZCBpbmRleCwgUHJvcGVydHlTbG90JiBzbG90KQogeworICAg
IFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNE
T01XaW5kb3cqPihvYmplY3QpOwogICAgIGF1dG8mIHdpbmRvdyA9IHRoaXNPYmplY3QtPndyYXBw
ZWQoKTsKICAgICBhdXRvKiBmcmFtZSA9IHdpbmRvdy5mcmFtZSgpOwpAQCAtMjYwLDcgKzI2MSw3
IEBAIGJvb2wgSlNET01XaW5kb3c6OmdldE93blByb3BlcnR5U2xvdEJ5SW4KIAogICAgIC8vIEhh
bmQgb2ZmIGFsbCBjcm9zcy1kb21haW4vZnJhbWVsZXNzIGFjY2VzcyB0byBqc0RPTVdpbmRvd0dl
dE93blByb3BlcnR5U2xvdFJlc3RyaWN0ZWRBY2Nlc3MuCiAgICAgaWYgKGlzQ3Jvc3NPcmlnaW5B
Y2Nlc3MoKSkKLSAgICAgICAgcmV0dXJuIGpzRE9NV2luZG93R2V0T3duUHJvcGVydHlTbG90UmVz
dHJpY3RlZEFjY2VzczxET01XaW5kb3dUeXBlOjpMb2NhbD4odGhpc09iamVjdCwgd2luZG93LCAq
c3RhdGUsIElkZW50aWZpZXI6OmZyb20oc3RhdGUsIGluZGV4KSwgc2xvdCwgZXJyb3JNZXNzYWdl
KTsKKyAgICAgICAgcmV0dXJuIGpzRE9NV2luZG93R2V0T3duUHJvcGVydHlTbG90UmVzdHJpY3Rl
ZEFjY2VzczxET01XaW5kb3dUeXBlOjpMb2NhbD4odGhpc09iamVjdCwgd2luZG93LCAqc3RhdGUs
IElkZW50aWZpZXI6OmZyb20odm0sIGluZGV4KSwgc2xvdCwgZXJyb3JNZXNzYWdlKTsKIAogICAg
IC8vICgyKSBSZWd1bGFyIG93biBwcm9wZXJ0aWVzLgogICAgIHJldHVybiBCYXNlOjpnZXRPd25Q
cm9wZXJ0eVNsb3RCeUluZGV4KHRoaXNPYmplY3QsIHN0YXRlLCBpbmRleCwgc2xvdCk7CkBAIC00
MDIsOSArNDAzLDEwIEBAIHN0YXRpYyB2b2lkIGFkZFNjb3BlZENoaWxkcmVuSW5kZXhlcyhFeGUK
ICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm47CiAKKyAgICBWTSYgdm0gPSBzdGF0ZS52
bSgpOwogICAgIHVuc2lnbmVkIHNjb3BlZENoaWxkQ291bnQgPSBmcmFtZS0+dHJlZSgpLnNjb3Bl
ZENoaWxkQ291bnQoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2NvcGVkQ2hpbGRD
b3VudDsgKytpKQotICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9tKCZz
dGF0ZSwgaSkpOworICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9tKHZt
LCBpKSk7CiB9CiAKIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvI3dpbmRvd3Byb3h5
LW93bnByb3BlcnR5a2V5cwpAQCAtNDI0LDEzICs0MjYsMTQgQEAgdm9pZCBKU0RPTVdpbmRvdzo6
Z2V0T3duUHJvcGVydHlOYW1lcyhKUwogCiBib29sIEpTRE9NV2luZG93OjpkZWZpbmVPd25Qcm9w
ZXJ0eShKU0M6OkpTT2JqZWN0KiBvYmplY3QsIEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OlBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIGNvbnN0IEpTQzo6UHJvcGVydHlEZXNjcmlwdG9yJiBk
ZXNjcmlwdG9yLCBib29sIHNob3VsZFRocm93KQogeworICAgIEpTQzo6Vk0mIHZtID0gZXhlYy0+
dm0oKTsKICAgICBKU0RPTVdpbmRvdyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0RPTVdpbmRvdyo+
KG9iamVjdCk7CiAgICAgLy8gT25seSBhbGxvdyBkZWZpbmluZyBwcm9wZXJ0aWVzIGluIHRoaXMg
d2F5IGJ5IGZyYW1lcyBpbiB0aGUgc2FtZSBvcmlnaW4sIGFzIGl0IGFsbG93cyBzZXR0ZXJzIHRv
IGJlIGludHJvZHVjZWQuCiAgICAgaWYgKCFCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNj
ZXNzVG9ET01XaW5kb3coZXhlYywgdGhpc09iamVjdC0+d3JhcHBlZCgpLCBUaHJvd1NlY3VyaXR5
RXJyb3IpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBEb24ndCBhbGxvdyBzaGFk
b3dpbmcgbG9jYXRpb24gdXNpbmcgYWNjZXNzb3IgcHJvcGVydGllcy4KLSAgICBpZiAoZGVzY3Jp
cHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigpICYmIHByb3BlcnR5TmFtZSA9PSBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKGV4ZWMsICJsb2NhdGlvbiIpKQorICAgIGlmIChkZXNjcmlwdG9yLmlzQWNj
ZXNzb3JEZXNjcmlwdG9yKCkgJiYgcHJvcGVydHlOYW1lID09IElkZW50aWZpZXI6OmZyb21TdHJp
bmcodm0sICJsb2NhdGlvbiIpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4g
QmFzZTo6ZGVmaW5lT3duUHJvcGVydHkodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBk
ZXNjcmlwdG9yLCBzaG91bGRUaHJvdyk7CkBAIC00OTAsMjEgKzQ5MywyMyBAQCBwcml2YXRlOgog
CiBpbmxpbmUgdm9pZCBEaWFsb2dIYW5kbGVyOjpkaWFsb2dDcmVhdGVkKERPTVdpbmRvdyYgZGlh
bG9nKQogeworICAgIFZNJiB2bSA9IG1fZXhlYy52bSgpOwogICAgIG1fZnJhbWUgPSBkaWFsb2cu
ZnJhbWUoKTsKICAgICAKICAgICAvLyBGSVhNRTogVGhpcyBsb29rcyBsaWtlIGEgbGVhayBiZXR3
ZWVuIHRoZSBub3JtYWwgd29ybGQgYW5kIGFuIGlzb2xhdGVkCiAgICAgLy8gICAgICAgIHdvcmxk
IGlmIGRpYWxvZ0FyZ3VtZW50cyBjb21lcyBmcm9tIGFuIGlzb2xhdGVkIHdvcmxkLgotICAgIEpT
RE9NV2luZG93KiBnbG9iYWxPYmplY3QgPSB0b0pTRE9NV2luZG93KG1fZnJhbWUuZ2V0KCksIG5v
cm1hbFdvcmxkKG1fZXhlYy52bSgpKSk7CisgICAgSlNET01XaW5kb3cqIGdsb2JhbE9iamVjdCA9
IHRvSlNET01XaW5kb3cobV9mcmFtZS5nZXQoKSwgbm9ybWFsV29ybGQodm0pKTsKICAgICBpZiAo
SlNWYWx1ZSBkaWFsb2dBcmd1bWVudHMgPSBtX2V4ZWMuYXJndW1lbnQoMSkpCi0gICAgICAgIGds
b2JhbE9iamVjdC0+cHV0RGlyZWN0KG1fZXhlYy52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KCZtX2V4ZWMsICJkaWFsb2dBcmd1bWVudHMiKSwgZGlhbG9nQXJndW1lbnRzKTsKKyAgICAgICAg
Z2xvYmFsT2JqZWN0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJk
aWFsb2dBcmd1bWVudHMiKSwgZGlhbG9nQXJndW1lbnRzKTsKIH0KIAogaW5saW5lIEpTVmFsdWUg
RGlhbG9nSGFuZGxlcjo6cmV0dXJuVmFsdWUoKSBjb25zdAogewotICAgIEpTRE9NV2luZG93KiBn
bG9iYWxPYmplY3QgPSB0b0pTRE9NV2luZG93KG1fZnJhbWUuZ2V0KCksIG5vcm1hbFdvcmxkKG1f
ZXhlYy52bSgpKSk7CisgICAgVk0mIHZtID0gbV9leGVjLnZtKCk7CisgICAgSlNET01XaW5kb3cq
IGdsb2JhbE9iamVjdCA9IHRvSlNET01XaW5kb3cobV9mcmFtZS5nZXQoKSwgbm9ybWFsV29ybGQo
dm0pKTsKICAgICBpZiAoIWdsb2JhbE9iamVjdCkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7Ci0gICAgSWRlbnRpZmllciBpZGVudGlmaWVyID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZygm
bV9leGVjLCAicmV0dXJuVmFsdWUiKTsKKyAgICBJZGVudGlmaWVyIGlkZW50aWZpZXIgPSBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAicmV0dXJuVmFsdWUiKTsKICAgICBQcm9wZXJ0eVNsb3Qg
c2xvdChnbG9iYWxPYmplY3QsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpHZXQp
OwogICAgIGlmICghSlNHbG9iYWxPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdChnbG9iYWxPYmpl
Y3QsICZtX2V4ZWMsIGlkZW50aWZpZXIsIHNsb3QpKQogICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKQEAgLTU3Myw3ICs1NzgsOCBAQCB2b2lkIEpTRE9NV2luZG93OjpzZXRPcGVuZXIoSlND
OjpFeGVjU3RhCiAgICAgICAgIHdyYXBwZWQoKS5kaXNvd25PcGVuZXIoKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KLSAgICByZXBsYWNlU3RhdGljUHJvcGVydHlTbG90KHN0YXRlLnZtKCksIHRo
aXMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLnZtKCksICJvcGVuZXIiKSwgdmFsdWUp
OworICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgcmVwbGFjZVN0YXRpY1Byb3BlcnR5U2xv
dCh2bSwgdGhpcywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIm9wZW5lciIpLCB2YWx1ZSk7
CiB9CiAKIEpTVmFsdWUgSlNET01XaW5kb3c6OnNlbGYoSlNDOjpFeGVjU3RhdGUmKSBjb25zdApA
QCAtNjQ1LDcgKzY1MSw4IEBAIHZvaWQgSlNET01XaW5kb3c6OnNldE9wZW5EYXRhYmFzZShKU0M6
OkUKICAgICBpZiAoIUJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRv
dygmc3RhdGUsIHdyYXBwZWQoKSwgVGhyb3dTZWN1cml0eUVycm9yKSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgcmVwbGFjZVN0YXRpY1Byb3BlcnR5U2xvdChzdGF0ZS52bSgpLCB0aGlzLCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZS52bSgpLCAib3BlbkRhdGFiYXNlIiksIHZhbHVlKTsK
KyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIHJlcGxhY2VTdGF0aWNQcm9wZXJ0eVNsb3Qo
dm0sIHRoaXMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJvcGVuRGF0YWJhc2UiKSwgdmFs
dWUpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RPTVdpbmRvd1Byb3BlcnRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93UHJvcGVydGllcy5jcHAJKHJldmlzaW9u
IDI0OTEyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93UHJvcGVy
dGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTA0LDcgKzEwNCw4IEBAIGJvb2wgSlNET01XaW5kb3dQ
cm9wZXJ0aWVzOjpnZXRPd25Qcm9wZXIKIAogYm9vbCBKU0RPTVdpbmRvd1Byb3BlcnRpZXM6Omdl
dE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBzdGF0
ZSwgdW5zaWduZWQgaW5kZXgsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKLSAgICByZXR1cm4gZ2V0
T3duUHJvcGVydHlTbG90KG9iamVjdCwgc3RhdGUsIElkZW50aWZpZXI6OmZyb20oc3RhdGUsIGlu
ZGV4KSwgc2xvdCk7CisgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CisgICAgcmV0dXJuIGdldE93
blByb3BlcnR5U2xvdChvYmplY3QsIHN0YXRlLCBJZGVudGlmaWVyOjpmcm9tKHZtLCBpbmRleCks
IHNsb3QpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RlcHJlY2F0ZWRDU1NPTVZhbHVlQ3VzdG9tLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RlcHJlY2F0ZWRDU1NPTVZhbHVlQ3Vz
dG9tLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNEZXByZWNhdGVkQ1NTT01WYWx1ZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDE5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzgs
NyArMzgsNyBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogYm9vbCBKU0RlcHJlY2F0ZWRDU1NPTVZh
bHVlT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5r
bm93bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiBy
ZWFzb24pCiB7CiAgICAgSlNEZXByZWNhdGVkQ1NTT01WYWx1ZSoganNDU1NWYWx1ZSA9IGpzQ2Fz
dDxKU0RlcHJlY2F0ZWRDU1NPTVZhbHVlKj4oaGFuZGxlLnNsb3QoKS0+YXNDZWxsKCkpOwotICAg
IGlmICghanNDU1NWYWx1ZS0+aGFzQ3VzdG9tUHJvcGVydGllcygqanNDU1NWYWx1ZS0+dm0oKSkp
CisgICAgaWYgKCFqc0NTU1ZhbHVlLT5oYXNDdXN0b21Qcm9wZXJ0aWVzKGpzQ1NTVmFsdWUtPnZt
KCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoVU5MSUtFTFkocmVhc29uKSkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVyLmNw
cAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVu
dExpc3RlbmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29w
eXJpZ2h0IChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0gKiAgQ29weXJpZ2h0
IChDKSAyMDAzLTIwMTggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogIENvcHly
aWdodCAoQykgMjAwMy0yMDE5IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAg
KiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMKQEAgLTEzOSw3ICsxMzksNyBAQCB2b2lkIEpTRXZlbnRMaXN0ZW5lcjo6
aGFuZGxlRXZlbnQoU2NyaXB0CiAKICAgICAvLyBJZiBqc0Z1bmN0aW9uIGlzIG5vdCBhY3R1YWxs
eSBhIGZ1bmN0aW9uLCBzZWUgaWYgaXQgaW1wbGVtZW50cyB0aGUgRXZlbnRMaXN0ZW5lciBpbnRl
cmZhY2UgYW5kIHVzZSB0aGF0CiAgICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBlOjpOb25lKSB7
Ci0gICAgICAgIGhhbmRsZUV2ZW50RnVuY3Rpb24gPSBqc0Z1bmN0aW9uLT5nZXQoZXhlYywgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCAiaGFuZGxlRXZlbnQiKSk7CisgICAgICAgIGhhbmRs
ZUV2ZW50RnVuY3Rpb24gPSBqc0Z1bmN0aW9uLT5nZXQoZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZyh2bSwgImhhbmRsZUV2ZW50IikpOwogICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKSB7CiAgICAgICAgICAgICBhdXRvKiBleGNlcHRpb24gPSBzY29wZS5leGNlcHRp
b24oKTsKICAgICAgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ltYWdlRGF0YUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbWFnZURhdGFDdXN0b20uY3BwCShyZXZpc2lv
biAyNDkxMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ltYWdlRGF0YUN1c3Rv
bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAwOC0yMDE5IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtNDMsNyArNDMsNyBAQCBKU1ZhbHVlIHRvSlNOZXdseUNyZWF0
ZWQoRXhlY1N0YXRlKiBzdGF0CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byog
ZGF0YSA9IGltYWdlRGF0YS0+ZGF0YSgpOwogICAgIGF1dG8qIHdyYXBwZXIgPSBjcmVhdGVXcmFw
cGVyPEltYWdlRGF0YT4oZ2xvYmFsT2JqZWN0LCBXVEZNb3ZlKGltYWdlRGF0YSkpOwotICAgIElk
ZW50aWZpZXIgZGF0YU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHN0YXRlLCAiZGF0YSIp
OworICAgIElkZW50aWZpZXIgZGF0YU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAi
ZGF0YSIpOwogICAgIHdyYXBwZXItPnB1dERpcmVjdCh2bSwgZGF0YU5hbWUsIHRvSlMoc3RhdGUs
IGdsb2JhbE9iamVjdCwgZGF0YSksIFByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgUHJv
cGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KTsKICAgICAvLyBGSVhNRTogQWRvcHQgcmVwb3J0RXh0
cmFNZW1vcnlWaXNpdGVkLCBhbmQgc3dpdGNoIHRvIHJlcG9ydEV4dHJhTWVtb3J5QWxsb2NhdGVk
LgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDI1OTUK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTGF6eUV2ZW50TGlzdGVuZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTGF6eUV2ZW50TGlz
dGVuZXIuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0xhenlFdmVudExpc3RlbmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAK
IC8qCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0g
KiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVk
LgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDE5IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNl
cnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTE0OSw3ICsxNDksNyBAQCBKU09iamVjdCog
SlNMYXp5RXZlbnRMaXN0ZW5lcjo6aW5pdGlhbGl6CiAgICAgRXhlY1N0YXRlKiBleGVjID0gZ2xv
YmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CiAKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdz
OwotICAgIGFyZ3MuYXBwZW5kKGpzTm9udHJpdmlhbFN0cmluZyhleGVjLCBtX2V2ZW50UGFyYW1l
dGVyTmFtZSkpOworICAgIGFyZ3MuYXBwZW5kKGpzTm9udHJpdmlhbFN0cmluZyh2bSwgbV9ldmVu
dFBhcmFtZXRlck5hbWUpKTsKICAgICBhcmdzLmFwcGVuZChqc1N0cmluZ1dpdGhDYWNoZShleGVj
LCBtX2NvZGUpKTsKICAgICBBU1NFUlQoIWFyZ3MuaGFzT3ZlcmZsb3dlZCgpKTsKIApAQCAtMTU4
LDcgKzE1OCw3IEBAIEpTT2JqZWN0KiBKU0xhenlFdmVudExpc3RlbmVyOjppbml0aWFsaXoKICAg
ICBpbnQgb3ZlcnJpZGVMaW5lTnVtYmVyID0gbV9zb3VyY2VQb3NpdGlvbi5tX2xpbmUub25lQmFz
ZWRJbnQoKTsKIAogICAgIEpTT2JqZWN0KiBqc0Z1bmN0aW9uID0gY29uc3RydWN0RnVuY3Rpb25T
a2lwcGluZ0V2YWxFbmFibGVkQ2hlY2soZXhlYywKLSAgICAgICAgZXhlYy0+bGV4aWNhbEdsb2Jh
bE9iamVjdCgpLCBhcmdzLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsIG1fZnVuY3Rpb25O
YW1lKSwKKyAgICAgICAgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBhcmdzLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKHZtLCBtX2Z1bmN0aW9uTmFtZSksCiAgICAgICAgIFNvdXJjZU9yaWdp
biB7IG1fc291cmNlVVJMLCBDYWNoZWRTY3JpcHRGZXRjaGVyOjpjcmVhdGUoZG9jdW1lbnQuY2hh
cnNldCgpKSB9LAogICAgICAgICBtX3NvdXJjZVVSTCwgbV9zb3VyY2VQb3NpdGlvbiwgb3ZlcnJp
ZGVMaW5lTnVtYmVyKTsKICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0xvY2F0aW9uQ3VzdG9tLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0xvY2F0aW9uQ3VzdG9tLmNw
cAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNMb2Nh
dGlvbkN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogIENv
cHlyaWdodCAoQykgMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICogIENvcHly
aWdodCAoQykgMjAwNiBKb24gU2hpZXIgKGpzaGllckBpYXN0YXRlLmVkdSkKLSAqICBDb3B5cmln
aHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMTAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2V2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2V2ZWQuCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA2IEFsZXhleSBQ
cm9za3VyeWFrb3YgKGFwQHdlYmtpdC5vcmcpCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTk4LDcgKzk4LDcg
QEAgYm9vbCBKU0xvY2F0aW9uOjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZAogICAgIGF1dG8qIHRo
aXNPYmplY3QgPSBqc0Nhc3Q8SlNMb2NhdGlvbio+KG9iamVjdCk7CiAgICAgQVNTRVJUX0dDX09C
SkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogCi0gICAgYm9vbCByZXN1bHQgPSBn
ZXRPd25Qcm9wZXJ0eVNsb3RDb21tb24oKnRoaXNPYmplY3QsICpzdGF0ZSwgSWRlbnRpZmllcjo6
ZnJvbShzdGF0ZSwgaW5kZXgpLCBzbG90KTsKKyAgICBib29sIHJlc3VsdCA9IGdldE93blByb3Bl
cnR5U2xvdENvbW1vbigqdGhpc09iamVjdCwgKnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tKHZtLCBp
bmRleCksIHNsb3QpOwogICAgIEVYQ0VQVElPTl9BU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpIHx8
ICFyZXN1bHQpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKICAgICBp
ZiAocmVzdWx0KQpAQCAtMTU2LDEwICsxNTYsMTEgQEAgYm9vbCBKU0xvY2F0aW9uOjpwdXQoSlND
ZWxsKiBjZWxsLCBFeGVjUwogCiBib29sIEpTTG9jYXRpb246OnB1dEJ5SW5kZXgoSlNDZWxsKiBj
ZWxsLCBFeGVjU3RhdGUqIHN0YXRlLCB1bnNpZ25lZCBpbmRleCwgSlNWYWx1ZSB2YWx1ZSwgYm9v
bCBzaG91bGRUaHJvdykKIHsKKyAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvKiB0
aGlzT2JqZWN0ID0ganNDYXN0PEpTTG9jYXRpb24qPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JK
RUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAKLSAgICBpZiAocHV0Q29tbW9uKCp0
aGlzT2JqZWN0LCAqc3RhdGUsIElkZW50aWZpZXI6OmZyb20oc3RhdGUsIGluZGV4KSkpCisgICAg
aWYgKHB1dENvbW1vbigqdGhpc09iamVjdCwgKnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tKHZtLCBp
bmRleCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4gSlNPYmplY3Q6OnB1
dEJ5SW5kZXgoY2VsbCwgc3RhdGUsIGluZGV4LCB2YWx1ZSwgc2hvdWxkVGhyb3cpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlTGlzdEN1c3RvbS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlTGlzdEN1c3RvbS5jcHAJKHJl
dmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUxpc3RD
dXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwNywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDctMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQwLDcgKzQwLDcgQEAgdXNpbmcgbmFtZXNw
YWNlIEpTQzsKIGJvb2wgSlNOb2RlTGlzdE93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290
cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2
aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQogewogICAgIEpTTm9kZUxpc3QqIGpzTm9kZUxp
c3QgPSBqc0Nhc3Q8SlNOb2RlTGlzdCo+KGhhbmRsZS5zbG90KCktPmFzQ2VsbCgpKTsKLSAgICBp
ZiAoIWpzTm9kZUxpc3QtPmhhc0N1c3RvbVByb3BlcnRpZXMoKmpzTm9kZUxpc3QtPnZtKCkpKQor
ICAgIGlmICghanNOb2RlTGlzdC0+aGFzQ3VzdG9tUHJvcGVydGllcyhqc05vZGVMaXN0LT52bSgp
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKGpzTm9kZUxpc3QtPndyYXBwZWQo
KS5pc0xpdmVOb2RlTGlzdCgpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1BsdWdpbkVsZW1lbnRGdW5jdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTUGx1Z2luRWxlbWVudEZ1bmN0aW9ucy5jcHAJKHJldmlzaW9uIDI0OTEy
OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGx1Z2luRWxlbWVudEZ1bmN0aW9u
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAo
QykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29weXJpZ2h0
IChDKSAyMDA0LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHly
aWdodCAoQykgMjAwNC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMKQEAgLTE2OCw3ICsxNjgsNyBAQCBDYWxsVHlwZSBwbHVnaW5FbGVtZW50
Q3VzdG9tR2V0Q2FsbERhdGEoCiAgICAgaWYgKEpTT2JqZWN0KiBzY3JpcHRPYmplY3QgPSBwbHVn
aW5TY3JpcHRPYmplY3RGcm9tUGx1Z2luVmlld0Jhc2UoZWxlbWVudCkpIHsKICAgICAgICAgQ2Fs
bERhdGEgc2NyaXB0T2JqZWN0Q2FsbERhdGE7CiAgICAgICAgIAotICAgICAgICBWTSYgdm0gPSAq
c2NyaXB0T2JqZWN0LT52bSgpOworICAgICAgICBWTSYgdm0gPSBzY3JpcHRPYmplY3QtPnZtKCk7
CiAgICAgICAgIGlmIChzY3JpcHRPYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0Q2FsbERhdGEo
c2NyaXB0T2JqZWN0LCBzY3JpcHRPYmplY3RDYWxsRGF0YSkgPT0gQ2FsbFR5cGU6Ok5vbmUpCiAg
ICAgICAgICAgICByZXR1cm4gQ2FsbFR5cGU6Ok5vbmU7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTUmVtb3RlRE9NV2luZG93Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1JlbW90ZURPTVdpbmRvd0N1c3RvbS5jcHAJKHJl
dmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUmVtb3RlRE9N
V2luZG93Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE4LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00Myw2ICs0Myw3IEBAIGJvb2wgSlNSZW1v
dGVET01XaW5kb3c6OmdldE93blByb3BlcnR5U2wKIAogYm9vbCBKU1JlbW90ZURPTVdpbmRvdzo6
Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIHN0
YXRlLCB1bnNpZ25lZCBpbmRleCwgUHJvcGVydHlTbG90JiBzbG90KQogeworICAgIFZNJiB2bSA9
IHN0YXRlLT52bSgpOwogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNSZW1vdGVET01X
aW5kb3cqPihvYmplY3QpOwogCiAgICAgLy8gSW5kZXhlZCBnZXR0ZXJzIHRha2UgcHJlY2VuZGVu
Y2Ugb3ZlciByZWd1bGFyIHByb3BlcnRpZXMsIHNvIGNhY2hpbmcgd291bGQgYmUgaW52YWxpZC4K
QEAgLTUwLDcgKzUxLDcgQEAgYm9vbCBKU1JlbW90ZURPTVdpbmRvdzo6Z2V0T3duUHJvcGVydHlT
bAogCiAgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBpbmRleGVkIHByb3BlcnRpZXMuCiAK
LSAgICByZXR1cm4ganNET01XaW5kb3dHZXRPd25Qcm9wZXJ0eVNsb3RSZXN0cmljdGVkQWNjZXNz
PERPTVdpbmRvd1R5cGU6OlJlbW90ZT4odGhpc09iamVjdCwgdGhpc09iamVjdC0+d3JhcHBlZCgp
LCAqc3RhdGUsIElkZW50aWZpZXI6OmZyb20oc3RhdGUsIGluZGV4KSwgc2xvdCwgU3RyaW5nKCkp
OworICAgIHJldHVybiBqc0RPTVdpbmRvd0dldE93blByb3BlcnR5U2xvdFJlc3RyaWN0ZWRBY2Nl
c3M8RE9NV2luZG93VHlwZTo6UmVtb3RlPih0aGlzT2JqZWN0LCB0aGlzT2JqZWN0LT53cmFwcGVk
KCksICpzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbSh2bSwgaW5kZXgpLCBzbG90LCBTdHJpbmcoKSk7
CiB9CiAKIGJvb2wgSlNSZW1vdGVET01XaW5kb3c6OnB1dChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0
ZSogc3RhdGUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFBy
b3BlcnR5U2xvdCYgc2xvdCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1JlYWRh
YmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL1JlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIuY3BwCShyZXZp
c2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9SZWFkYWJsZVN0cmVh
bURlZmF1bHRDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8q
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQ2Fub24gSW5jLgotICogQ29weXJpZ2h0IChDKSAyMDE2
LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE2LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkLCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtNTQsNyArNTQsNyBAQCBKU0M6OkpTVmFsdWUgUmVhZGFibGVT
dHJlYW1EZWZhdWx0Q29udHJvCiAgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayh2bSk7CiAgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgYXV0byBmdW5jdGlv
biA9IG9iamVjdC5nZXQoJnN0YXRlLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRl
LCBwcm9wZXJ0eU5hbWUpKTsKKyAgICBhdXRvIGZ1bmN0aW9uID0gb2JqZWN0LmdldCgmc3RhdGUs
IEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcHJvcGVydHlOYW1lKSk7CiAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNDOjpKU1ZhbHVlKCkpOwogCiAgICAgaWYgKCFmdW5j
dGlvbi5pc0Z1bmN0aW9uKHZtKSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
U2NyaXB0Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvU2NyaXB0Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xODMsNyArMTgzLDggQEAgdm9pZCBTY3JpcHRDb250cm9sbGVyOjpsb2FkTW9kdWxlU2NyaXB0
KAogCiBKU0M6OkpTVmFsdWUgU2NyaXB0Q29udHJvbGxlcjo6bGlua0FuZEV2YWx1YXRlTW9kdWxl
U2NyaXB0SW5Xb3JsZChMb2FkYWJsZU1vZHVsZVNjcmlwdCYgbW9kdWxlU2NyaXB0LCBET01XcmFw
cGVyV29ybGQmIHdvcmxkKQogewotICAgIEpTTG9ja0hvbGRlciBsb2NrKHdvcmxkLnZtKCkpOwor
ICAgIEpTQzo6Vk0mIHZtID0gd29ybGQudm0oKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7
CiAKICAgICBhdXRvJiBwcm94eSA9IGpzV2luZG93UHJveHkod29ybGQpOwogICAgIGF1dG8mIHN0
YXRlID0gKnByb3h5LndpbmRvdygpLT5nbG9iYWxFeGVjKCk7CkBAIC0xOTMsNyArMTk0LDcgQEAg
SlNDOjpKU1ZhbHVlIFNjcmlwdENvbnRyb2xsZXI6OmxpbmtBbmRFdgogICAgIFJlZjxGcmFtZT4g
cHJvdGVjdG9yKG1fZnJhbWUpOwogCiAgICAgTmFrZWRQdHI8SlNDOjpFeGNlcHRpb24+IGV2YWx1
YXRpb25FeGNlcHRpb247Ci0gICAgYXV0byByZXR1cm5WYWx1ZSA9IEpTRXhlY1N0YXRlOjpsaW5r
QW5kRXZhbHVhdGVNb2R1bGUoc3RhdGUsIElkZW50aWZpZXI6OmZyb21VaWQoJnN0YXRlLnZtKCks
IG1vZHVsZVNjcmlwdC5tb2R1bGVLZXkoKSksIGpzVW5kZWZpbmVkKCksIGV2YWx1YXRpb25FeGNl
cHRpb24pOworICAgIGF1dG8gcmV0dXJuVmFsdWUgPSBKU0V4ZWNTdGF0ZTo6bGlua0FuZEV2YWx1
YXRlTW9kdWxlKHN0YXRlLCBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCBtb2R1bGVTY3JpcHQubW9k
dWxlS2V5KCkpLCBqc1VuZGVmaW5lZCgpLCBldmFsdWF0aW9uRXhjZXB0aW9uKTsKICAgICBpZiAo
ZXZhbHVhdGlvbkV4Y2VwdGlvbikgewogICAgICAgICAvLyBGSVhNRTogR2l2ZSBhIGNoYW5jZSB0
byBkdW1wIHRoZSBzdGFjayB0cmFjZSBpZiB0aGUgImNyb3Nzb3JpZ2luIiBhdHRyaWJ1dGUgYWxs
b3dzLgogICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTY0NTM5CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRNb2R1bGVMb2Fk
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdE1v
ZHVsZUxvYWRlci5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL1NjcmlwdE1vZHVsZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMjMsNyAr
MTIzLDcgQEAgSlNDOjpJZGVudGlmaWVyIFNjcmlwdE1vZHVsZUxvYWRlcjo6cmVzbwogICAgICAg
ICByZXR1cm4geyB9OwogICAgIH0KIAotICAgIHJldHVybiBKU0M6OklkZW50aWZpZXI6OmZyb21T
dHJpbmcoJnZtLCByZXN1bHQtPnN0cmluZygpKTsKKyAgICByZXR1cm4gSlNDOjpJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKHZtLCByZXN1bHQtPnN0cmluZygpKTsKIH0KIAogc3RhdGljIHZvaWQgcmVq
ZWN0VG9Qcm9wYWdhdGVOZXR3b3JrRXJyb3IoRGVmZXJyZWRQcm9taXNlJiBkZWZlcnJlZCwgTW9k
dWxlRmV0Y2hGYWlsdXJlS2luZCBmYWlsdXJlS2luZCwgQVNDSUlMaXRlcmFsIG1lc3NhZ2UpCkBA
IC0yNTgsNyArMjU4LDcgQEAgSlNDOjpKU0ludGVybmFsUHJvbWlzZSogU2NyaXB0TW9kdWxlTG9h
ZAogICAgIGlmICghcmVzdWx0KQogICAgICAgICByZXR1cm4gcmVqZWN0UHJvbWlzZShzdGF0ZSwg
Z2xvYmFsT2JqZWN0LCBUeXBlRXJyb3IsIHJlc3VsdC5lcnJvcigpKTsKIAotICAgIHJldHVybiBK
U0M6OmltcG9ydE1vZHVsZShleGVjLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCBy
ZXN1bHQtPnN0cmluZygpKSwgcGFyYW1ldGVycywgSlNDOjpKU1NjcmlwdEZldGNoZXI6OmNyZWF0
ZSh2bSwgV1RGTW92ZShzY3JpcHRGZXRjaGVyKSApKTsKKyAgICByZXR1cm4gSlNDOjppbXBvcnRN
b2R1bGUoZXhlYywgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZXN1bHQtPnN0cmlu
ZygpKSwgcGFyYW1ldGVycywgSlNDOjpKU1NjcmlwdEZldGNoZXI6OmNyZWF0ZSh2bSwgV1RGTW92
ZShzY3JpcHRGZXRjaGVyKSApKTsKIH0KIAogSlNDOjpKU09iamVjdCogU2NyaXB0TW9kdWxlTG9h
ZGVyOjpjcmVhdGVJbXBvcnRNZXRhUHJvcGVydGllcyhKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OkpTTW9kdWxlTG9hZGVyKiwgSlND
OjpKU1ZhbHVlIG1vZHVsZUtleVZhbHVlLCBKU0M6OkpTTW9kdWxlUmVjb3JkKiwgSlNDOjpKU1Zh
bHVlKQpAQCAtMjcyLDcgKzI3Miw3IEBAIEpTQzo6SlNPYmplY3QqIFNjcmlwdE1vZHVsZUxvYWRl
cjo6Y3JlYXQKICAgICBhdXRvKiBtZXRhUHJvcGVydGllcyA9IEpTQzo6Y29uc3RydWN0RW1wdHlP
YmplY3QoZXhlYywgZ2xvYmFsT2JqZWN0LT5udWxsUHJvdG90eXBlT2JqZWN0U3RydWN0dXJlKCkp
OwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwogCi0gICAgbWV0YVBy
b3BlcnRpZXMtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwg
InVybCIpLCBKU0M6OmpzU3RyaW5nKCZ2bSwgc291cmNlVVJMLnN0cmluZygpKSk7CisgICAgbWV0
YVByb3BlcnRpZXMtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZt
LCAidXJsIiksIEpTQzo6anNTdHJpbmcodm0sIHNvdXJjZVVSTC5zdHJpbmcoKSkpOwogICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwogCiAgICAgcmV0dXJuIG1ldGFQcm9w
ZXJ0aWVzOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlw
dFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJp
YWxpemVkU2NyaXB0VmFsdWUuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOS0yMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDE5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtNTg1LDcgKzU4NSw3IEBAIHByaXZhdGU6CiAgICAgICAgIDogQ2xvbmVCYXNlKGV4ZWMpCiAg
ICAgICAgICwgbV9idWZmZXIob3V0KQogICAgICAgICAsIG1fYmxvYlVSTHMoYmxvYlVSTHMpCi0g
ICAgICAgICwgbV9lbXB0eUlkZW50aWZpZXIoSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCBl
bXB0eVN0cmluZygpKSkKKyAgICAgICAgLCBtX2VtcHR5SWRlbnRpZmllcihJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKGV4ZWMtPnZtKCksIGVtcHR5U3RyaW5nKCkpKQogICAgICAgICAsIG1fY29udGV4
dChjb250ZXh0KQogICAgICAgICAsIG1fc2hhcmVkQnVmZmVycyhzaGFyZWRCdWZmZXJzKQogI2lm
IEVOQUJMRShXRUJBU1NFTUJMWSkKQEAgLTEyNTcsNyArMTI1Nyw3IEBAIHByaXZhdGU6CiAgICAg
ICAgIGlmIChzdHIuaXNOdWxsKCkpCiAgICAgICAgICAgICB3cml0ZShtX2VtcHR5SWRlbnRpZmll
cik7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHdyaXRlKElkZW50aWZpZXI6OmZyb21TdHJp
bmcobV9leGVjLCBzdHIpKTsKKyAgICAgICAgICAgIHdyaXRlKElkZW50aWZpZXI6OmZyb21TdHJp
bmcobV9leGVjLT52bSgpLCBzdHIpKTsKICAgICB9CiAKICAgICB2b2lkIHdyaXRlKGNvbnN0IFZl
Y3Rvcjx1aW50OF90PiYgdmVjdG9yKQpAQCAtMTUxOCw3ICsxNTE4LDcgQEAgU2VyaWFsaXphdGlv
blJldHVybkNvZGUgQ2xvbmVTZXJpYWxpemVyOgogICAgICAgICAgICAgICAgICAgICBpbmRleFN0
YWNrLnJlbW92ZUxhc3QoKTsKICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoU3RhY2sucmVtb3Zl
TGFzdCgpOwogCi0gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5U3RhY2suYXBwZW5kKFByb3Bl
cnR5TmFtZUFycmF5KCZ2bSwgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5ncywgUHJpdmF0ZVN5bWJv
bE1vZGU6OkV4Y2x1ZGUpKTsKKyAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlTdGFjay5hcHBl
bmQoUHJvcGVydHlOYW1lQXJyYXkodm0sIFByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3MsIFByaXZh
dGVTeW1ib2xNb2RlOjpFeGNsdWRlKSk7CiAgICAgICAgICAgICAgICAgICAgIGFycmF5LT5tZXRo
b2RUYWJsZSh2bSktPmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhhcnJheSwgbV9leGVjLCBw
cm9wZXJ0eVN0YWNrLmxhc3QoKSwgRW51bWVyYXRpb25Nb2RlKCkpOwogICAgICAgICAgICAgICAg
ICAgICBpZiAocHJvcGVydHlTdGFjay5sYXN0KCkuc2l6ZSgpKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICB3cml0ZShOb25JbmRleFByb3BlcnRpZXNUYWcpOwpAQCAtMTU2OCw3ICsxNTY4LDcg
QEAgU2VyaWFsaXphdGlvblJldHVybkNvZGUgQ2xvbmVTZXJpYWxpemVyOgogICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gU2VyaWFsaXphdGlvblJldHVybkNvZGU6OkRhdGFDbG9uZUVycm9yOwog
ICAgICAgICAgICAgICAgIGlucHV0T2JqZWN0U3RhY2suYXBwZW5kKGluT2JqZWN0KTsKICAgICAg
ICAgICAgICAgICBpbmRleFN0YWNrLmFwcGVuZCgwKTsKLSAgICAgICAgICAgICAgICBwcm9wZXJ0
eVN0YWNrLmFwcGVuZChQcm9wZXJ0eU5hbWVBcnJheSgmdm0sIFByb3BlcnR5TmFtZU1vZGU6OlN0
cmluZ3MsIFByaXZhdGVTeW1ib2xNb2RlOjpFeGNsdWRlKSk7CisgICAgICAgICAgICAgICAgcHJv
cGVydHlTdGFjay5hcHBlbmQoUHJvcGVydHlOYW1lQXJyYXkodm0sIFByb3BlcnR5TmFtZU1vZGU6
OlN0cmluZ3MsIFByaXZhdGVTeW1ib2xNb2RlOjpFeGNsdWRlKSk7CiAgICAgICAgICAgICAgICAg
aW5PYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhpbk9iamVjdCwg
bV9leGVjLCBwcm9wZXJ0eVN0YWNrLmxhc3QoKSwgRW51bWVyYXRpb25Nb2RlKCkpOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgb2JqZWN0U3RhcnRWaXNpdE1lbWJlcjoKQEAgLTE2MzYsNyAr
MTYzNiw3IEBAIFNlcmlhbGl6YXRpb25SZXR1cm5Db2RlIENsb25lU2VyaWFsaXplcjoKICAgICAg
ICAgICAgICAgICAgICAgbWFwSXRlcmF0b3JTdGFjay5yZW1vdmVMYXN0KCk7CiAgICAgICAgICAg
ICAgICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBpbnB1dE9iamVjdFN0YWNrLmxhc3QoKTsKICAg
ICAgICAgICAgICAgICAgICAgQVNTRVJUKGpzRHluYW1pY0Nhc3Q8SlNNYXAqPih2bSwgb2JqZWN0
KSk7Ci0gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5U3RhY2suYXBwZW5kKFByb3BlcnR5TmFt
ZUFycmF5KCZ2bSwgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5ncywgUHJpdmF0ZVN5bWJvbE1vZGU6
OkV4Y2x1ZGUpKTsKKyAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlTdGFjay5hcHBlbmQoUHJv
cGVydHlOYW1lQXJyYXkodm0sIFByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3MsIFByaXZhdGVTeW1i
b2xNb2RlOjpFeGNsdWRlKSk7CiAgICAgICAgICAgICAgICAgICAgIG9iamVjdC0+bWV0aG9kVGFi
bGUodm0pLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgbV9leGVjLCBwcm9wZXJ0eVN0YWNr
Lmxhc3QoKSwgRW51bWVyYXRpb25Nb2RlKCkpOwogICAgICAgICAgICAgICAgICAgICB3cml0ZShO
b25NYXBQcm9wZXJ0aWVzVGFnKTsKICAgICAgICAgICAgICAgICAgICAgaW5kZXhTdGFjay5hcHBl
bmQoMCk7CkBAIC0xNjgwLDcgKzE2ODAsNyBAQCBTZXJpYWxpemF0aW9uUmV0dXJuQ29kZSBDbG9u
ZVNlcmlhbGl6ZXI6CiAgICAgICAgICAgICAgICAgICAgIHNldEl0ZXJhdG9yU3RhY2sucmVtb3Zl
TGFzdCgpOwogICAgICAgICAgICAgICAgICAgICBKU09iamVjdCogb2JqZWN0ID0gaW5wdXRPYmpl
Y3RTdGFjay5sYXN0KCk7CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChqc0R5bmFtaWNDYXN0
PEpTU2V0Kj4odm0sIG9iamVjdCkpOwotICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0YWNr
LmFwcGVuZChQcm9wZXJ0eU5hbWVBcnJheSgmdm0sIFByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3Ms
IFByaXZhdGVTeW1ib2xNb2RlOjpFeGNsdWRlKSk7CisgICAgICAgICAgICAgICAgICAgIHByb3Bl
cnR5U3RhY2suYXBwZW5kKFByb3BlcnR5TmFtZUFycmF5KHZtLCBQcm9wZXJ0eU5hbWVNb2RlOjpT
dHJpbmdzLCBQcml2YXRlU3ltYm9sTW9kZTo6RXhjbHVkZSkpOwogICAgICAgICAgICAgICAgICAg
ICBvYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIG1f
ZXhlYywgcHJvcGVydHlTdGFjay5sYXN0KCksIEVudW1lcmF0aW9uTW9kZSgpKTsKICAgICAgICAg
ICAgICAgICAgICAgd3JpdGUoTm9uU2V0UHJvcGVydGllc1RhZyk7CiAgICAgICAgICAgICAgICAg
ICAgIGluZGV4U3RhY2suYXBwZW5kKDApOwpAQCAtMTc3Nyw3ICsxNzc3LDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgSlNWYWx1ZSBqc1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMpCiAgICAgICAgIHsKICAg
ICAgICAgICAgIGlmICghbV9qc1N0cmluZykKLSAgICAgICAgICAgICAgICBtX2pzU3RyaW5nID0g
SlNDOjpqc1N0cmluZyhleGVjLCBtX3N0cmluZyk7CisgICAgICAgICAgICAgICAgbV9qc1N0cmlu
ZyA9IEpTQzo6anNTdHJpbmcoZXhlYy0+dm0oKSwgbV9zdHJpbmcpOwogICAgICAgICAgICAgcmV0
dXJuIG1fanNTdHJpbmc7CiAgICAgICAgIH0KICAgICAgICAgY29uc3QgU3RyaW5nJiBzdHJpbmco
KSB7IHJldHVybiBtX3N0cmluZzsgfQpAQCAtMjg2Niw3ICsyODY2LDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgIHJldHVybiBjYWNoZWRTdHJpbmctPmpzU3RyaW5nKG1fZXhlYyk7CiAgICAgICAg
IH0KICAgICAgICAgY2FzZSBFbXB0eVN0cmluZ1RhZzoKLSAgICAgICAgICAgIHJldHVybiBqc0Vt
cHR5U3RyaW5nKCZtX2V4ZWMtPnZtKCkpOworICAgICAgICAgICAgcmV0dXJuIGpzRW1wdHlTdHJp
bmcobV9leGVjLT52bSgpKTsKICAgICAgICAgY2FzZSBTdHJpbmdPYmplY3RUYWc6IHsKICAgICAg
ICAgICAgIENhY2hlZFN0cmluZ1JlZiBjYWNoZWRTdHJpbmc7CiAgICAgICAgICAgICBpZiAoIXJl
YWRTdHJpbmdEYXRhKGNhY2hlZFN0cmluZykpCkBAIC0yODc3LDcgKzI4NzcsNyBAQCBwcml2YXRl
OgogICAgICAgICB9CiAgICAgICAgIGNhc2UgRW1wdHlTdHJpbmdPYmplY3RUYWc6IHsKICAgICAg
ICAgICAgIFZNJiB2bSA9IG1fZXhlYy0+dm0oKTsKLSAgICAgICAgICAgIFN0cmluZ09iamVjdCog
b2JqID0gY29uc3RydWN0U3RyaW5nKHZtLCBtX2dsb2JhbE9iamVjdCwganNFbXB0eVN0cmluZygm
dm0pKTsKKyAgICAgICAgICAgIFN0cmluZ09iamVjdCogb2JqID0gY29uc3RydWN0U3RyaW5nKHZt
LCBtX2dsb2JhbE9iamVjdCwganNFbXB0eVN0cmluZyh2bSkpOwogICAgICAgICAgICAgbV9nY0J1
ZmZlci5hcHBlbmRXaXRoQ3Jhc2hPbk92ZXJmbG93KG9iaik7CiAgICAgICAgICAgICByZXR1cm4g
b2JqOwogICAgICAgICB9CkBAIC0zMTYyLDExICszMTYyLDExIEBAIERlc2VyaWFsaXphdGlvblJl
c3VsdCBDbG9uZURlc2VyaWFsaXplcjoKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYg
KEpTVmFsdWUgdGVybWluYWwgPSByZWFkVGVybWluYWwoKSkgewotICAgICAgICAgICAgICAgIHB1
dFByb3BlcnR5KG91dHB1dE9iamVjdFN0YWNrLmxhc3QoKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
ZyhtX2V4ZWMsIGNhY2hlZFN0cmluZy0+c3RyaW5nKCkpLCB0ZXJtaW5hbCk7CisgICAgICAgICAg
ICAgICAgcHV0UHJvcGVydHkob3V0cHV0T2JqZWN0U3RhY2subGFzdCgpLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCBjYWNoZWRTdHJpbmctPnN0cmluZygpKSwgdGVybWluYWwpOwogICAgICAg
ICAgICAgICAgIGdvdG8gb2JqZWN0U3RhcnRWaXNpdE1lbWJlcjsKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIHN0YXRlU3RhY2suYXBwZW5kKE9iamVjdEVuZFZpc2l0TWVtYmVyKTsKLSAgICAg
ICAgICAgIHByb3BlcnR5TmFtZVN0YWNrLmFwcGVuZChJZGVudGlmaWVyOjpmcm9tU3RyaW5nKG1f
ZXhlYywgY2FjaGVkU3RyaW5nLT5zdHJpbmcoKSkpOworICAgICAgICAgICAgcHJvcGVydHlOYW1l
U3RhY2suYXBwZW5kKElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIGNhY2hlZFN0cmluZy0+c3Ry
aW5nKCkpKTsKICAgICAgICAgICAgIGdvdG8gc3RhdGVVbmtub3duOwogICAgICAgICB9CiAgICAg
ICAgIGNhc2UgT2JqZWN0RW5kVmlzaXRNZW1iZXI6IHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL1dlYkNvcmVCdWlsdGluTmFtZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlQnVpbHRpbk5hbWVzLmgJKHJldmlzaW9uIDI0OTEyOCkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVCdWlsdGluTmFtZXMuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChjKSAyMDE1LCBD
YW5vbiBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAgQ29weXJpZ2h0IChDKSAyMDE4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMTgtMjAx
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMzYwLDggKzM2MCw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xh
c3MgV2ViQ29yZUJ1aWx0aW5OYW1lcyB7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgV2ViQ29yZUJ1
aWx0aW5OYW1lcyhKU0M6OlZNKiB2bSkKLSAgICAgICAgOiBtX3ZtKCp2bSkKKyAgICBleHBsaWNp
dCBXZWJDb3JlQnVpbHRpbk5hbWVzKEpTQzo6Vk0mIHZtKQorICAgICAgICA6IG1fdm0odm0pCiAg
ICAgICAgIFdFQkNPUkVfQ09NTU9OX1BSSVZBVEVfSURFTlRJRklFUlNfRUFDSF9QUk9QRVJUWV9O
QU1FKElOSVRJQUxJWkVfQlVJTFRJTl9OQU1FUykKICAgICB7CiAjZGVmaW5lIEVYUE9SVF9OQU1F
KG5hbWUpIG1fdm0ucHJvcGVydHlOYW1lcy0+YXBwZW5kRXh0ZXJuYWxOYW1lKG5hbWUjI1B1Ymxp
Y05hbWUoKSwgbmFtZSMjUHJpdmF0ZU5hbWUoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9XZWJDb3JlSlNDbGllbnREYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlSlNDbGllbnREYXRhLmNwcAkocmV2aXNpb24gMjQ5MTI4
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZUpTQ2xpZW50RGF0YS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0y
MDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtNDIsNyArNDIsNyBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBKU1ZN
Q2xpZW50RGF0YTo6SlNWTUNsaWVudERhdGEoVk0mIHZtKQogICAgIDogbV9idWlsdGluRnVuY3Rp
b25zKHZtKQotICAgICwgbV9idWlsdGluTmFtZXMoJnZtKQorICAgICwgbV9idWlsdGluTmFtZXMo
dm0pCiAgICAgLCBtX3J1bnRpbWVNZXRob2RTcGFjZSBJU09fU1VCU1BBQ0VfSU5JVCh2bS5oZWFw
LCB2bS5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuZ2V0KCksIFJ1bnRpbWVNZXRob2Qp
IC8vIEhhc2g6MHhmNzBjNGE4NQogICAgICwgbV9vdXRwdXRDb25zdHJhaW50U3BhY2UoIldlYkNv
cmUgV3JhcHBlciB3LyBPdXRwdXQgQ29uc3RyYWludCIsIHZtLmhlYXAsIHZtLmRlc3RydWN0aWJs
ZU9iamVjdEhlYXBDZWxsVHlwZS5nZXQoKSwgdm0uZmFzdE1hbGxvY0FsbG9jYXRvci5nZXQoKSkg
Ly8gSGFzaDoweDc3MjRjMmU0CiAgICAgLCBtX2dsb2JhbE9iamVjdE91dHB1dENvbnN0cmFpbnRT
cGFjZSgiV2ViQ29yZSBHbG9iYWwgT2JqZWN0IHcvIE91dHB1dCBDb25zdHJhaW50Iiwgdm0uaGVh
cCwgdm0uY2VsbEhlYXBDZWxsVHlwZS5nZXQoKSwgdm0uZmFzdE1hbGxvY0FsbG9jYXRvci5nZXQo
KSkgLy8gSGFzaDoweDUyMmQ2ZWM5CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9X
aW5kb3dQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
V2luZG93UHJveHkuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9XaW5kb3dQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAv
KgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAxIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5v
cmcpCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0g
KiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTEzOSw3ICsxMzksNyBAQCB2b2lkIFdpbmRv
d1Byb3h5OjpjbGVhckpTV2luZG93UHJveGllc05vCiAgICAgICAgIC8vIENsZWFyIHRoZSBkZWJ1
Z2dlciBhbmQgY29uc29sZSBmcm9tIHRoZSBjdXJyZW50IHdpbmRvdyBiZWZvcmUgc2V0dGluZyB0
aGUgbmV3IHdpbmRvdy4KICAgICAgICAgd2luZG93UHJveHktPmF0dGFjaERlYnVnZ2VyKG51bGxw
dHIpOwogICAgICAgICB3aW5kb3dQcm94eS0+d2luZG93KCktPnNldENvbnNvbGVDbGllbnQobnVs
bHB0cik7Ci0gICAgICAgIGlmIChhdXRvKiBqc0RPTVdpbmRvdyA9IGpzRHluYW1pY0Nhc3Q8SlNE
T01XaW5kb3dCYXNlKj4oKndpbmRvd1Byb3h5LT52bSgpLCB3aW5kb3dQcm94eS0+d2luZG93KCkp
KQorICAgICAgICBpZiAoYXV0byoganNET01XaW5kb3cgPSBqc0R5bmFtaWNDYXN0PEpTRE9NV2lu
ZG93QmFzZSo+KHdpbmRvd1Byb3h5LT52bSgpLCB3aW5kb3dQcm94eS0+d2luZG93KCkpKQogICAg
ICAgICAgICAganNET01XaW5kb3ctPndpbGxSZW1vdmVGcm9tV2luZG93UHJveHkoKTsKICAgICB9
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpT
LnBtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdl
bmVyYXRvckpTLnBtCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkod29ya2luZyBjb3B5KQpAQCAtNzI3LDIwICs3
MjcsMjMgQEAgc3ViIEdlbmVyYXRlR2V0T3duUHJvcGVydHlTbG90QnlJbmRleAogICAgIG15ICRw
cm9wZXJ0eU5hbWVHZW5lcmF0aW9uID0gc3ViIHsKICAgICAgICAgcmV0dXJuIGlmICRkaWRHZW5l
cmF0ZVByb3BlcnR5TmFtZTsKICAgICAgICAgCi0gICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwg
IiAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb20oc3RhdGUsIGluZGV4KTtc
biIpOworICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgYXV0byBwcm9wZXJ0eU5hbWUg
PSBJZGVudGlmaWVyOjpmcm9tKHZtLCBpbmRleCk7XG4iKTsKICAgICAgICAgJGRpZEdlbmVyYXRl
UHJvcGVydHlOYW1lID0gMTsKICAgICB9OwogICAgIAorICAgIG15ICRuYW1lZEdldHRlck9wZXJh
dGlvbiA9IEdldE5hbWVkR2V0dGVyT3BlcmF0aW9uKCRpbnRlcmZhY2UpOworICAgIG15ICRpbmRl
eGVkR2V0dGVyT3BlcmF0aW9uID0gR2V0SW5kZXhlZEdldHRlck9wZXJhdGlvbigkaW50ZXJmYWNl
KTsKKyAgICAKICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJib29sICR7Y2xhc3NOYW1lfTo6Z2V0
T3duUHJvcGVydHlTbG90QnlJbmRleChKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIHN0YXRl
LCB1bnNpZ25lZCBpbmRleCwgUHJvcGVydHlTbG90JiBzbG90KVxuIik7CiAgICAgcHVzaChAJG91
dHB1dEFycmF5LCAie1xuIik7CisgICAgaWYgKCRuYW1lZEdldHRlck9wZXJhdGlvbiB8fCAkaW50
ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntQbHVnaW59KSB7CisgICAgICAgIHB1c2goQCRv
dXRwdXRBcnJheSwgIiAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTtcbiIpOworICAgIH0KICAgICBw
dXNoKEAkb3V0cHV0QXJyYXksICIgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDwke2NsYXNz
TmFtZX0qPihvYmplY3QpO1xuIik7CiAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIEFTU0VS
VF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTtcbiIpOwogICAgIAotICAg
IG15ICRuYW1lZEdldHRlck9wZXJhdGlvbiA9IEdldE5hbWVkR2V0dGVyT3BlcmF0aW9uKCRpbnRl
cmZhY2UpOwotICAgIG15ICRpbmRleGVkR2V0dGVyT3BlcmF0aW9uID0gR2V0SW5kZXhlZEdldHRl
ck9wZXJhdGlvbigkaW50ZXJmYWNlKTsKLSAgICAKICAgICBpZiAoKCRuYW1lZEdldHRlck9wZXJh
dGlvbiAmJiAkbmFtZWRHZXR0ZXJPcGVyYXRpb24tPmV4dGVuZGVkQXR0cmlidXRlcy0+e01heVRo
cm93RXhjZXB0aW9ufSkgfHwgKCRpbmRleGVkR2V0dGVyT3BlcmF0aW9uICYmICRpbmRleGVkR2V0
dGVyT3BlcmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntNYXlUaHJvd0V4Y2VwdGlvbn0pKSB7
Ci0gICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHN0YXRlLT52bSgpKTtcbiIpOworICAgICAgICBwdXNoKEAkb3V0cHV0
QXJyYXksICIgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7XG4i
KTsKICAgICB9CiAgICAgCiAgICAgIyBOT1RFOiBUaGUgYWxvZ2l0aG0gZm9yIFtbR2V0T3duUHJv
cGVydHldXSBjb250YWlucyBvbmx5IHRoZSBmb2xsb3dpbmcgc3RlcDoKQEAgLTgzNiw2ICs4Mzks
OSBAQCBzdWIgR2VuZXJhdGVHZXRPd25Qcm9wZXJ0eU5hbWVzCiAgICAgCiAgICAgcHVzaChAJG91
dHB1dEFycmF5LCAidm9pZCAke2NsYXNzTmFtZX06OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmpl
Y3QqIG9iamVjdCwgRXhlY1N0YXRlKiBzdGF0ZSwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5
TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKVxuIik7CiAgICAgcHVzaChAJG91dHB1dEFycmF5
LCAie1xuIik7CisgICAgaWYgKCRpbmRleGVkR2V0dGVyT3BlcmF0aW9uIHx8ICRuYW1lZEdldHRl
ck9wZXJhdGlvbikgeworICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgVk0mIHZtID0g
c3RhdGUtPnZtKCk7XG4iKTsKKyAgICB9CiAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGF1
dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8JHtjbGFzc05hbWV9Kj4ob2JqZWN0KTtcbiIpOwogICAg
IHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKG9iamVj
dCwgaW5mbygpKTtcbiIpOwogICAgIApAQCAtODQ0LDcgKzg1MCw3IEBAIHN1YiBHZW5lcmF0ZUdl
dE93blByb3BlcnR5TmFtZXMKICAgICAjIEZJWE1FOiBUaGlzIHNob3VsZCBzdXBwb3J0IG5vbi1j
b250aWd1b3VzIGluZGljZXMuCiAgICAgaWYgKCRpbmRleGVkR2V0dGVyT3BlcmF0aW9uKSB7CiAg
ICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBmb3IgKHVuc2lnbmVkIGkgPSAwLCBjb3Vu
dCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKS5sZW5ndGgoKTsgaSA8IGNvdW50OyArK2kpXG4iKTsK
LSAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJ
ZGVudGlmaWVyOjpmcm9tKHN0YXRlLCBpKSk7XG4iKTsKKyAgICAgICAgcHVzaChAJG91dHB1dEFy
cmF5LCAiICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9tKHZtLCBpKSk7
XG4iKTsKICAgICB9CiAKICAgICAjIDIuIElmIHRoZSBvYmplY3Qgc3VwcG9ydHMgbmFtZWQgcHJv
cGVydGllcyBhbmQgZG9lc27igJl0IGltcGxlbWVudCBhbiBpbnRlcmZhY2UKQEAgLTg1NSwxMSAr
ODYxLDExIEBAIHN1YiBHZW5lcmF0ZUdldE93blByb3BlcnR5TmFtZXMKICAgICBpZiAoJG5hbWVk
R2V0dGVyT3BlcmF0aW9uKSB7CiAgICAgICAgIGlmICghJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRy
aWJ1dGVzLT57TGVnYWN5VW5lbnVtZXJhYmxlTmFtZWRQcm9wZXJ0aWVzfSkgewogICAgICAgICAg
ICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGZvciAoYXV0byYgcHJvcGVydHlOYW1lIDogdGhp
c09iamVjdC0+d3JhcHBlZCgpLnN1cHBvcnRlZFByb3BlcnR5TmFtZXMoKSlcbiIpOwotICAgICAg
ICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKHN0YXRlLCBwcm9wZXJ0eU5hbWUpKTtcbiIpOworICAgICAgICAg
ICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKHZtLCBwcm9wZXJ0eU5hbWUpKTtcbiIpOwogICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGlmIChtb2RlLmluY2x1ZGVE
b250RW51bVByb3BlcnRpZXMoKSkge1xuIik7CiAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJy
YXksICIgICAgICAgIGZvciAoYXV0byYgcHJvcGVydHlOYW1lIDogdGhpc09iamVjdC0+d3JhcHBl
ZCgpLnN1cHBvcnRlZFByb3BlcnR5TmFtZXMoKSlcbiIpOwotICAgICAgICAgICAgcHVzaChAJG91
dHB1dEFycmF5LCAiICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyhzdGF0ZSwgcHJvcGVydHlOYW1lKSk7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQCRv
dXRwdXRBcnJheSwgIiAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZy
b21TdHJpbmcodm0sIHByb3BlcnR5TmFtZSkpO1xuIik7CiAgICAgICAgICAgICBwdXNoKEAkb3V0
cHV0QXJyYXksICIgICAgfVxuIik7CiAgICAgICAgIH0KICAgICB9CkBAIC0xMDA2LDYgKzEwMTIs
OSBAQCBzdWIgR2VuZXJhdGVQdXRCeUluZGV4CiAgICAgCiAgICAgcHVzaChAJG91dHB1dEFycmF5
LCAiYm9vbCAke2NsYXNzTmFtZX06OnB1dEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUq
IHN0YXRlLCB1bnNpZ25lZCBpbmRleCwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCIgLiAoISRlbGxpZGVz
Q2FsbHNUb0Jhc2UgPyAiIHNob3VsZFRocm93IiA6ICIiKSAuICIpXG4iKTsKICAgICBwdXNoKEAk
b3V0cHV0QXJyYXksICJ7XG4iKTsKKyAgICBpZiAoJG5hbWVkU2V0dGVyT3BlcmF0aW9uIHx8ICRp
bnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+e1BsdWdpbn0pIHsKKyAgICAgICAgcHVzaChA
JG91dHB1dEFycmF5LCAiICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpO1xuIik7CisgICAgfQogICAg
IHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PCR7Y2xh
c3NOYW1lfSo+KGNlbGwpO1xuIik7CiAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIEFTU0VS
VF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTtcblxuIik7CiAKQEAgLTEw
MTgsNyArMTAyNyw3IEBAIHN1YiBHZW5lcmF0ZVB1dEJ5SW5kZXgKICAgICAgICAgR2VuZXJhdGVD
dXN0b21FbGVtZW50UmVhY3Rpb25zU3RhY2tJZk5lZWRlZCgkb3V0cHV0QXJyYXksICRpbmRleGVk
U2V0dGVyT3BlcmF0aW9uLCAiKnN0YXRlIik7CiAgICAgfQogICAgIAotICAgIGlmICgkaW5kZXhl
ZFNldHRlck9wZXJhdGlvbiApIHsKKyAgICBpZiAoJGluZGV4ZWRTZXR0ZXJPcGVyYXRpb24pIHsK
ICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGlmIChMSUtFTFkoaW5kZXggPD0gTUFY
X0FSUkFZX0lOREVYKSkge1xuIik7CiAgICAgICAgIAogICAgICAgICBHZW5lcmF0ZUludm9rZUlu
ZGV4ZWRQcm9wZXJ0eVNldHRlcigkb3V0cHV0QXJyYXksICIgICAgICAgICIsICRpbnRlcmZhY2Us
ICRpbmRleGVkU2V0dGVyT3BlcmF0aW9uLCAiaW5kZXgiLCAidmFsdWUiKTsKQEAgLTEwMjgsMTIg
KzEwMzcsMTIgQEAgc3ViIEdlbmVyYXRlUHV0QnlJbmRleAogICAgIH0KICAgICAKICAgICBpZiAo
JG5hbWVkU2V0dGVyT3BlcmF0aW9uKSB7Ci0gICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAg
ICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb20oc3RhdGUsIGluZGV4KTtcbiIp
OworICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJ
ZGVudGlmaWVyOjpmcm9tKHZtLCBpbmRleCk7XG4iKTsKICAgICAgICAgICAgICAgICAKICAgICAg
ICAgbXkgJGFkZGl0aW9uYWxJbmRlbnQgPSAiIjsKICAgICAgICAgaWYgKCEkb3ZlcnJpZGVCdWls
dGlucykgewogICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIFByb3BlcnR5U2xv
dCBzbG90IHsgdGhpc09iamVjdCwgUHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6OlZN
SW5xdWlyeSB9O1xuIik7Ci0gICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgSlNW
YWx1ZSBwcm90b3R5cGUgPSB0aGlzT2JqZWN0LT5nZXRQcm90b3R5cGVEaXJlY3Qoc3RhdGUtPnZt
KCkpO1xuIik7CisgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgSlNWYWx1ZSBw
cm90b3R5cGUgPSB0aGlzT2JqZWN0LT5nZXRQcm90b3R5cGVEaXJlY3Qodm0pO1xuIik7CiAgICAg
ICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgaWYgKCEocHJvdG90eXBlLmlzT2JqZWN0
KCkgJiYgYXNPYmplY3QocHJvdG90eXBlKS0+Z2V0UHJvcGVydHlTbG90KHN0YXRlLCBwcm9wZXJ0
eU5hbWUsIHNsb3QpKSkge1xuIik7CiAgICAgICAgICAgICAkYWRkaXRpb25hbEluZGVudCAuPSAi
ICAgICI7CiAgICAgICAgIH0KQEAgLTEwNTMsNyArMTA2Miw3IEBAIHN1YiBHZW5lcmF0ZVB1dEJ5
SW5kZXgKICAgICBhc3NlcnQoIlVzaW5nIGJvdGggYSBuYW1lZCBwcm9wZXJ0eSBzZXR0ZXIgYW5k
IFtQbHVnaW5dIHRvZ2V0aGVyIGlzIG5vdCBzdXBwb3J0ZWQuIikgaWYgJG5hbWVkU2V0dGVyT3Bl
cmF0aW9uICYmICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+e1BsdWdpbn07CiAgICAg
aWYgKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+e1BsdWdpbn0pIHsKICAgICAgICAg
QWRkVG9JbXBsSW5jbHVkZXMoIkpTUGx1Z2luRWxlbWVudEZ1bmN0aW9ucy5oIik7Ci0gICAgICAg
IHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6
OmZyb20oc3RhdGUsIGluZGV4KTtcbiIpOworICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIg
ICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tKHZtLCBpbmRleCk7XG4iKTsK
ICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIFB1dFByb3BlcnR5U2xvdCBwdXRQcm9w
ZXJ0eVNsb3QodGhpc09iamVjdCwgc2hvdWxkVGhyb3cpO1xuIik7CiAgICAgICAgIHB1c2goQCRv
dXRwdXRBcnJheSwgIiAgICBib29sIHB1dFJlc3VsdCA9IGZhbHNlO1xuIik7CiAgICAgICAgIHB1
c2goQCRvdXRwdXRBcnJheSwgIiAgICBpZiAocGx1Z2luRWxlbWVudEN1c3RvbVB1dCh0aGlzT2Jq
ZWN0LCBzdGF0ZSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgcHV0UHJvcGVydHlTbG90LCBwdXRSZXN1
bHQpKVxuIik7CkBAIC0xMzQxLDcgKzEzNTAsOCBAQCBzdWIgR2VuZXJhdGVEZWxldGVQcm9wZXJ0
eUJ5SW5kZXgKICAgICBpZiAoR2V0SW5kZXhlZEdldHRlck9wZXJhdGlvbigkaW50ZXJmYWNlKSkg
ewogICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgcmV0dXJuICFpbXBsLmlzU3VwcG9y
dGVkUHJvcGVydHlJbmRleChpbmRleCk7XG4iKTsKICAgICB9IGVsc2UgewotICAgICAgICBwdXNo
KEAkb3V0cHV0QXJyYXksICIgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9t
KHN0YXRlLCBpbmRleCk7XG4iKTsKKyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIFZN
JiB2bSA9IHN0YXRlLT52bSgpO1xuIik7CisgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAg
ICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb20odm0sIGluZGV4KTtcbiIpOwog
CiAgICAgICAgICMgR2VuZXJhdGVEZWxldGVQcm9wZXJ0eUNvbW1vbiBpbXBsZW1lbnRzIHN0ZXAg
Mi4KICAgICAgICAgR2VuZXJhdGVEZWxldGVQcm9wZXJ0eUNvbW1vbigkb3V0cHV0QXJyYXksICRp
bnRlcmZhY2UsICRjbGFzc05hbWUsICRvcGVyYXRpb24sICRjb25kaXRpb25hbCk7CkBAIC0yMzQ3
LDcgKzIzNTcsNyBAQCBzdWIgR2VuZXJhdGVEaWN0aW9uYXJ5SW1wbGVtZW50YXRpb25Db250CiAg
ICAgICAgICAgICAkcmVzdWx0IC49ICIgICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKVxuIjsKICAg
ICAgICAgICAgICRyZXN1bHQgLj0gIiAgICAgICAgJHtrZXl9VmFsdWUgPSBqc1VuZGVmaW5lZCgp
O1xuIjsKICAgICAgICAgICAgICRyZXN1bHQgLj0gIiAgICBlbHNlIHtcbiI7Ci0gICAgICAgICAg
ICAkcmVzdWx0IC49ICIgICAgICAgICR7a2V5fVZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgXCIke2tleX1cIikpO1xuIjsKKyAgICAgICAg
ICAgICRyZXN1bHQgLj0gIiAgICAgICAgJHtrZXl9VmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUs
IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIFwiJHtrZXl9XCIpKTtcbiI7CiAgICAgICAgICAg
ICAkcmVzdWx0IC49ICIgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9
KTtcbiI7CiAgICAgICAgICAgICAkcmVzdWx0IC49ICIgICAgfVxuIjsKIApAQCAtMjQzMywxMyAr
MjQ0MywxMyBAQCBzdWIgR2VuZXJhdGVEaWN0aW9uYXJ5SW1wbGVtZW50YXRpb25Db250CiAKICAg
ICAgICAgICAgICAgICAgICAgJHJlc3VsdCAuPSAiJHtpbmRlbnR9ICAgIGlmICghJHtJRExUeXBl
fTo6aXNOdWxsVmFsdWUoJHt2YWx1ZUV4cHJlc3Npb259KSkge1xuIjsKICAgICAgICAgICAgICAg
ICAgICAgJHJlc3VsdCAuPSAiJHtpbmRlbnR9ICAgICAgICBhdXRvICR7a2V5fVZhbHVlID0gJHtj
b252ZXJzaW9uRXhwcmVzc2lvbn07XG4iOwotICAgICAgICAgICAgICAgICAgICAkcmVzdWx0IC49
ICIke2luZGVudH0gICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6
OmZyb21TdHJpbmcoJnZtLCBcIiR7a2V5fVwiKSwgJHtrZXl9VmFsdWUpO1xuIjsKKyAgICAgICAg
ICAgICAgICAgICAgJHJlc3VsdCAuPSAiJHtpbmRlbnR9ICAgICAgICByZXN1bHQtPnB1dERpcmVj
dCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBcIiR7a2V5fVwiKSwgJHtrZXl9
VmFsdWUpO1xuIjsKICAgICAgICAgICAgICAgICAgICAgJHJlc3VsdCAuPSAiJHtpbmRlbnR9ICAg
IH1cbiI7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgbXkg
JGNvbnZlcnNpb25FeHByZXNzaW9uID0gTmF0aXZlVG9KU1ZhbHVlVXNpbmdSZWZlcmVuY2VzKCRt
ZW1iZXIsICR0eXBlU2NvcGUsICR2YWx1ZUV4cHJlc3Npb24sICJnbG9iYWxPYmplY3QiKTsKIAog
ICAgICAgICAgICAgICAgICAgICAkcmVzdWx0IC49ICIke2luZGVudH0gICAgYXV0byAke2tleX1W
YWx1ZSA9ICR7Y29udmVyc2lvbkV4cHJlc3Npb259O1xuIjsKLSAgICAgICAgICAgICAgICAgICAg
JHJlc3VsdCAuPSAiJHtpbmRlbnR9ICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50
aWZpZXI6OmZyb21TdHJpbmcoJnZtLCBcIiR7a2V5fVwiKSwgJHtrZXl9VmFsdWUpO1xuIjsKKyAg
ICAgICAgICAgICAgICAgICAgJHJlc3VsdCAuPSAiJHtpbmRlbnR9ICAgIHJlc3VsdC0+cHV0RGly
ZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIFwiJHtrZXl9XCIpLCAke2tl
eX1WYWx1ZSk7XG4iOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBpZiAoJG5l
ZWRzUnVudGltZUNoZWNrKSB7CiAgICAgICAgICAgICAgICAgICAgICRyZXN1bHQgLj0gIiAgICB9
XG4iOwpAQCAtMzgzNCw3ICszODQ0LDcgQEAgc3ViIGFkZFVuc2NvcGFibGVQcm9wZXJ0aWVzCiAg
ICAgQWRkVG9JbXBsSW5jbHVkZXMoIjxKYXZhU2NyaXB0Q29yZS9PYmplY3RDb25zdHJ1Y3Rvci5o
PiIpOwogICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEpTT2JqZWN0JiB1bnNjb3BhYmxlcyA9
ICpjb25zdHJ1Y3RFbXB0eU9iamVjdChnbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpLCBnbG9i
YWxPYmplY3QoKS0+bnVsbFByb3RvdHlwZU9iamVjdFN0cnVjdHVyZSgpKTtcbiIpOwogICAgIGZv
cmVhY2ggbXkgJHVuc2NvcGFibGUgKEB1bnNjb3BhYmxlcykgewotICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICB1bnNjb3BhYmxlcy5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21T
dHJpbmcoJnZtLCBcIiR1bnNjb3BhYmxlXCIpLCBqc0Jvb2xlYW4odHJ1ZSkpO1xuIik7CisgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHVuc2NvcGFibGVzLnB1dERpcmVjdCh2bSwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgXCIkdW5zY29wYWJsZVwiKSwganNCb29sZWFuKHRydWUp
KTtcbiIpOwogICAgIH0KICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBwdXREaXJlY3RXaXRo
b3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+dW5zY29wYWJsZXNTeW1ib2wsICZ1
bnNjb3BhYmxlcywgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBKU0M6OlByb3Bl
cnR5QXR0cmlidXRlOjpSZWFkT25seSk7XG4iKTsKIH0KQEAgLTQyNjAsNyArNDI3MCw3IEBAIHN1
YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgICAgICBteSAkbmFtZSA9ICRvcGVyYXRp
b25PckF0dHJpYnV0ZS0+bmFtZTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
IGlmICghJHtydW50aW1lRW5hYmxlQ29uZGl0aW9uYWxTdHJpbmd9KSB7XG4iKTsKICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBoYXNEaXNhYmxlZFJ1bnRpbWVQcm9wZXJ0
aWVzID0gdHJ1ZTtcbiIpOwotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAg
IGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihcIiRuYW1lXCIpLCBzdHJsZW4oXCIkbmFtZVwiKSk7XG4i
KTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBhdXRvIHByb3BlcnR5
TmFtZSA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
TENoYXIqPihcIiRuYW1lXCIpLCBzdHJsZW4oXCIkbmFtZVwiKSk7XG4iKTsKICAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBWTTo6RGVsZXRlUHJvcGVydHlNb2RlU2NvcGUg
c2NvcGUodm0sIFZNOjpEZWxldGVQcm9wZXJ0eU1vZGU6Oklnbm9yZUNvbmZpZ3VyYWJsZSk7XG4i
KTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBKU09iamVjdDo6ZGVs
ZXRlUHJvcGVydHkodGhpcywgZ2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKSwgcHJvcGVydHlO
YW1lKTtcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgfVxuIik7CkBA
IC00NDk5LDEwICs0NTA5LDExIEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAg
IGlmICgkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntJbXBsaWNpdFRoaXN9KSB7CiAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgInRlbXBsYXRlPD4gaW5saW5lICR7Y2xhc3NO
YW1lfSogSURMQXR0cmlidXRlPCR7Y2xhc3NOYW1lfT46OmNhc3QoRXhlY1N0YXRlJiBzdGF0ZSwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlKVxuIik7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIntcbiIpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgVk0mIHZt
ID0gc3RhdGUudm0oKTtcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
YXV0byBkZWNvZGVkVGhpc1ZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSk7XG4iKTsK
ICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmIChkZWNvZGVkVGhpc1ZhbHVl
LmlzVW5kZWZpbmVkT3JOdWxsKCkpXG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgICAgICBkZWNvZGVkVGhpc1ZhbHVlID0gc3RhdGUudGhpc1ZhbHVlKCkudG9UaGlzKCZz
dGF0ZSwgTm90U3RyaWN0TW9kZSk7XG4iKTsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgIHJldHVybiAkY2FzdGluZ0Z1bmN0aW9uKHN0YXRlLnZtKCksIGRlY29kZWRUaGlzVmFs
dWUpOyIpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuICRjYXN0
aW5nRnVuY3Rpb24odm0sIGRlY29kZWRUaGlzVmFsdWUpOyIpOwogICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICJ9XG5cbiIpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICJ0ZW1wbGF0ZTw+IGlubGluZSAke2NsYXNzTmFtZX0qIElETEF0dHJp
YnV0ZTwke2NsYXNzTmFtZX0+OjpjYXN0KEV4ZWNTdGF0ZSYgc3RhdGUsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSlcbiIpOwpAQCAtNDk3OSw3ICs0OTkwLDEyIEBAIHN1YiBHZW5lcmF0ZUF0dHJp
YnV0ZVNldHRlckJvZHlEZWZpbml0aW8KICAgICAKICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJz
dGF0aWMgaW5saW5lIGJvb2wgJHthdHRyaWJ1dGVTZXR0ZXJCb2R5TmFtZX0oIiAuIGpvaW4oIiwg
IiwgQHNpZ25hdHVyZUFyZ3VtZW50cykgLiAiKVxuIik7CiAgICAgcHVzaChAJG91dHB1dEFycmF5
LCAie1xuIik7Ci0gICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTtcbiIpOworICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBVTlVTRURfUEFSQU0o
c3RhdGUpO1xuIik7CisgICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5Jc0NvbnN0cnVjdG9yVHlwZSgk
YXR0cmlidXRlLT50eXBlKSB8fCAkYXR0cmlidXRlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntSZXBs
YWNlYWJsZX0gfHwgJGF0dHJpYnV0ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57UHV0Rm9yd2FyZHN9
KSB7CisgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBWTSYgdm0gPSB0aHJvd1Njb3Bl
LnZtKCk7XG4iKTsKKyAgICB9IGVsc2UgeworICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpO1xuIik7CisgICAgfQogCiAgICAgR2VuZXJhdGVD
dXN0b21FbGVtZW50UmVhY3Rpb25zU3RhY2tJZk5lZWRlZCgkb3V0cHV0QXJyYXksICRhdHRyaWJ1
dGUsICJzdGF0ZSIpOwogCkBAIC01MDIzLDIxICs1MDM5LDIxIEBAIHN1YiBHZW5lcmF0ZUF0dHJp
YnV0ZVNldHRlckJvZHlEZWZpbml0aW8KICAgICAgICAgfQogICAgICAgICBteSAkaWQgPSAkYXR0
cmlidXRlLT5uYW1lOwogICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgLy8gU2hhZG93
aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuXG4iKTsKLSAgICAgICAgcHVzaChAJG91dHB1dEFy
cmF5LCAiICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdChzdGF0ZS52bSgpLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKCZzdGF0ZS52bSgpLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFy
Kj4oXCIke2lkfVwiKSwgc3RybGVuKFwiJHtpZH1cIikpLCB2YWx1ZSk7XG4iKTsKKyAgICAgICAg
cHVzaChAJG91dHB1dEFycmF5LCAiICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+
KFwiJHtpZH1cIiksIHN0cmxlbihcIiR7aWR9XCIpKSwgdmFsdWUpO1xuIik7CiAgICAgfSBlbHNp
ZiAoJGF0dHJpYnV0ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57UmVwbGFjZWFibGV9KSB7CiAgICAg
ICAgIG15ICRpZCA9ICRhdHRyaWJ1dGUtPm5hbWU7CiAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJh
eSwgIiAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBwcm9wZXJ0eS5cbiIpOwogICAgICAgICBp
ZiAoQXR0cmlidXRlU2hvdWxkQmVPbkluc3RhbmNlKCRpbnRlcmZhY2UsICRhdHRyaWJ1dGUpKSB7
Ci0gICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgcmV0dXJuIHJlcGxhY2VTdGF0
aWNQcm9wZXJ0eVNsb3Qoc3RhdGUudm0oKSwgJnRoaXNPYmplY3QsIElkZW50aWZpZXI6OmZyb21T
dHJpbmcoJnN0YXRlLnZtKCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihcIiR7aWR9
XCIpLCBzdHJsZW4oXCIke2lkfVwiKSksIHZhbHVlKTtcbiIpOworICAgICAgICAgICAgcHVzaChA
JG91dHB1dEFycmF5LCAiICAgIHJldHVybiByZXBsYWNlU3RhdGljUHJvcGVydHlTbG90KHZtLCAm
dGhpc09iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxj
b25zdCBMQ2hhcio+KFwiJHtpZH1cIiksIHN0cmxlbihcIiR7aWR9XCIpKSwgdmFsdWUpO1xuIik7
CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAg
cmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHN0YXRlLnZtKCksIElkZW50aWZpZXI6OmZyb21T
dHJpbmcoJnN0YXRlLnZtKCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihcIiR7aWR9
XCIpLCBzdHJsZW4oXCIke2lkfVwiKSksIHZhbHVlKTtcbiIpOworICAgICAgICAgICAgcHVzaChA
JG91dHB1dEFycmF5LCAiICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KFwiJHtp
ZH1cIiksIHN0cmxlbihcIiR7aWR9XCIpKSwgdmFsdWUpO1xuIik7CiAgICAgICAgIH0KICAgICB9
IGVsc2lmICgkYXR0cmlidXRlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntQdXRGb3J3YXJkc30pIHsK
ICAgICAgICAgYXNzZXJ0KCJbUHV0Rm9yd2FyZHNdIGlzIG5vdCBjb21wYXRpYmxlIHdpdGggc3Rh
dGljIGF0dHJpYnV0ZXMiKSBpZiAkYXR0cmlidXRlLT5pc1N0YXRpYzsKICAgICAgICAgCiAgICAg
ICAgICMgMy41LjkuMS4gTGV0IFEgYmUgPyBHZXQoTywgaWQpLgogICAgICAgICBteSAkaWQgPSAk
YXR0cmlidXRlLT5uYW1lOwotICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgYXV0byBp
ZCA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLnZtKCksIHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgTENoYXIqPihcIiR7aWR9XCIpLCBzdHJsZW4oXCIke2lkfVwiKSk7XG4iKTsKKyAgICAg
ICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGF1dG8gaWQgPSBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oXCIke2lkfVwiKSwgc3RybGVu
KFwiJHtpZH1cIikpO1xuIik7CiAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBhdXRv
IHZhbHVlVG9Gb3J3YXJkVG8gPSB0aGlzT2JqZWN0LmdldCgmc3RhdGUsIGlkKTtcbiIpOwogICAg
ICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCBmYWxzZSk7XG4iKTsKICAgICAgICAgCkBAIC01MDQ5LDEzICs1MDY1LDEzIEBAIHN1YiBH
ZW5lcmF0ZUF0dHJpYnV0ZVNldHRlckJvZHlEZWZpbml0aW8KICAgICAgICAgCiAgICAgICAgICMg
My41LjkuMy4gTGV0IGZvcndhcmRJZCBiZSB0aGUgaWRlbnRpZmllciBhcmd1bWVudCBvZiB0aGUg
W1B1dEZvcndhcmRzXSBleHRlbmRlZCBhdHRyaWJ1dGUuCiAgICAgICAgIG15ICRmb3J3YXJkSWQg
PSAkYXR0cmlidXRlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntQdXRGb3J3YXJkc307Ci0gICAgICAg
IHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBhdXRvIGZvcndhcmRJZCA9IElkZW50aWZpZXI6OmZy
b21TdHJpbmcoJnN0YXRlLnZtKCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihcIiR7
Zm9yd2FyZElkfVwiKSwgc3RybGVuKFwiJHtmb3J3YXJkSWR9XCIpKTtcbiIpOworICAgICAgICBw
dXNoKEAkb3V0cHV0QXJyYXksICIgICAgYXV0byBmb3J3YXJkSWQgPSBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oXCIke2ZvcndhcmRJZH1c
IiksIHN0cmxlbihcIiR7Zm9yd2FyZElkfVwiKSk7XG4iKTsKICAgICAgICAgCiAgICAgICAgICMg
My41LjkuNC4gUGVyZm9ybSA/IFNldChRLCBmb3J3YXJkSWQsIFYpLgogICAgICAgICAjIEZJWE1F
OiBXaGF0IHNob3VsZCB0aGUgc2Vjb25kIHZhbHVlIHRvIHRoZSBQdXRQcm9wZXJ0eVNsb3QgYmU/
CiAgICAgICAgICMgKGh0dHBzOi8vZ2l0aHViLmNvbS9oZXljYW0vd2ViaWRsL2lzc3Vlcy8zNjgp
CiAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdCh2
YWx1ZVRvRm9yd2FyZFRvLCBmYWxzZSk7XG4iKTsKLSAgICAgICAgcHVzaChAJG91dHB1dEFycmF5
LCAiICAgIGFzT2JqZWN0KHZhbHVlVG9Gb3J3YXJkVG8pLT5tZXRob2RUYWJsZShzdGF0ZS52bSgp
KS0+cHV0KGFzT2JqZWN0KHZhbHVlVG9Gb3J3YXJkVG8pLCAmc3RhdGUsIGZvcndhcmRJZCwgdmFs
dWUsIHNsb3QpO1xuIik7CisgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBhc09iamVj
dCh2YWx1ZVRvRm9yd2FyZFRvKS0+bWV0aG9kVGFibGUodm0pLT5wdXQoYXNPYmplY3QodmFsdWVU
b0ZvcndhcmRUbyksICZzdGF0ZSwgZm9yd2FyZElkLCB2YWx1ZSwgc2xvdCk7XG4iKTsKICAgICAg
ICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29w
ZSwgZmFsc2UpO1xuIik7CiAgICAgICAgIAogICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIg
ICAgcmV0dXJuIHRydWU7XG4iKTsKQEAgLTUzMzIsNyArNTM0OCw3IEBAIHN1YiBHZW5lcmF0ZU9w
ZXJhdGlvbkRlZmluaXRpb24KICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAie1xuIik7CiAg
ICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBVTlVTRURfUEFSQU0oc3RhdGUpO1xuIik7
CiAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTtc
biIpOwotICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgSlNDOjpOYXRpdmVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKCZ2bSwgc3RhdGUpO1xuIik7CisgICAgICAgIHB1c2goQCRvdXRwdXRB
cnJheSwgIiAgICBKU0M6Ok5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIHN0YXRlKTtc
biIpOwogICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7XG4iKTsKICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5
LCAiICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTtcbiIpOwogICAgICAgICBwdXNoKEAkb3V0
cHV0QXJyYXksICIgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTtcbiIpOwpA
QCAtNTQzNSwxNSArNTQ1MSwxNSBAQCBzdWIgR2VuZXJhdGVTZXJpYWxpemVyRGVmaW5pdGlvbgog
ICAgICAgICAgICAgaWYgKCRhdHRyaWJ1dGUtPnR5cGUtPmlzTnVsbGFibGUpIHsKICAgICAgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoISR7bmFtZX1WYWx1ZS5pc051bGwo
KSkge1xuIik7CiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIGF1
dG8qICR7bmFtZX1TZXJpYWxpemVkVmFsdWUgPSBKUyR7YXR0cmlidXRlSW50ZXJmYWNlTmFtZX06
OnNlcmlhbGl6ZShzdGF0ZSwgKmpzQ2FzdDxKUyR7YXR0cmlidXRlSW50ZXJmYWNlTmFtZX0qPigk
e25hbWV9VmFsdWUpLCBnbG9iYWxPYmplY3QsIHRocm93U2NvcGUpO1xuIik7Ci0gICAgICAgICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgXCIke25hbWV9XCIpLCAke25hbWV9U2VyaWFsaXpl
ZFZhbHVlKTtcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAg
ICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgXCIke25h
bWV9XCIpLCAke25hbWV9U2VyaWFsaXplZFZhbHVlKTtcbiIpOwogICAgICAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgIH0gZWxzZVxuIik7Ci0gICAgICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKCZ2bSwgXCIke25hbWV9XCIpLCAke25hbWV9VmFsdWUpO1xuIik7CisgICAgICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZt
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBcIiR7bmFtZX1cIiksICR7bmFtZX1WYWx1ZSk7
XG4iKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgYXV0byogJHtuYW1lfVNlcmlhbGl6ZWRWYWx1ZSA9IEpTJHthdHRyaWJ1dGVJ
bnRlcmZhY2VOYW1lfTo6c2VyaWFsaXplKHN0YXRlLCAqanNDYXN0PEpTJHthdHRyaWJ1dGVJbnRl
cmZhY2VOYW1lfSo+KCR7bmFtZX1WYWx1ZSksIGdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSk7XG4i
KTsKLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXN1bHQtPnB1dERp
cmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIFwiJHtuYW1lfVwiKSwgJHtuYW1l
fVNlcmlhbGl6ZWRWYWx1ZSk7XG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwg
XCIke25hbWV9XCIpLCAke25hbWV9U2VyaWFsaXplZFZhbHVlKTtcbiIpOwogICAgICAgICAgICAg
fQogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
cmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCBcIiR7bmFt
ZX1cIiksICR7bmFtZX1WYWx1ZSk7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBc
IiR7bmFtZX1cIiksICR7bmFtZX1WYWx1ZSk7XG4iKTsKICAgICAgICAgfQogCiAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiXG4iKTsKQEAgLTYyMzQsNyArNjI1MCw3IEBAIHN1YiBHZW5lcmF0
ZUNhbGxiYWNrSW1wbGVtZW50YXRpb25Db250ZW4KICAgICAgICAgICAgICAgICAkY2FsbGJhY2tJ
bnZvY2F0aW9uID0gIm1fZGF0YS0+aW52b2tlQ2FsbGJhY2sodGhpc1ZhbHVlLCBhcmdzLCBKU0Nh
bGxiYWNrRGF0YTo6Q2FsbGJhY2tUeXBlOjpGdW5jdGlvbiwgSWRlbnRpZmllcigpLCByZXR1cm5l
ZEV4Y2VwdGlvbikiOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBteSAk
Y2FsbGJhY2tUeXBlID0gJG51bU9wZXJhdGlvbnMgPiAxID8gIk9iamVjdCIgOiAiRnVuY3Rpb25P
ck9iamVjdCI7Ci0gICAgICAgICAgICAgICAgJGNhbGxiYWNrSW52b2NhdGlvbiA9ICJtX2RhdGEt
Pmludm9rZUNhbGxiYWNrKHRoaXNWYWx1ZSwgYXJncywgSlNDYWxsYmFja0RhdGE6OkNhbGxiYWNr
VHlwZTo6JHtjYWxsYmFja1R5cGV9LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgXCIke2Z1
bmN0aW9uTmFtZX1cIiksIHJldHVybmVkRXhjZXB0aW9uKSI7CisgICAgICAgICAgICAgICAgJGNh
bGxiYWNrSW52b2NhdGlvbiA9ICJtX2RhdGEtPmludm9rZUNhbGxiYWNrKHRoaXNWYWx1ZSwgYXJn
cywgSlNDYWxsYmFja0RhdGE6OkNhbGxiYWNrVHlwZTo6JHtjYWxsYmFja1R5cGV9LCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKHZtLCBcIiR7ZnVuY3Rpb25OYW1lfVwiKSwgcmV0dXJuZWRFeGNlcHRp
b24pIjsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKCRvcGVyYXRpb24tPnR5cGUt
Pm5hbWUgZXEgInZvaWQiKSB7CkBAIC03MzUxLDcgKzczNjcsNyBAQCBzdWIgR2VuZXJhdGVDb25z
dHJ1Y3RvckhlbHBlck1ldGhvZHMKICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIHB1
dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCAke2NsYXNzTmFtZX06OnBy
b3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERl
bGV0ZSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0
dHJpYnV0ZTo6RG9udEVudW0pO1xuIik7CiAgICAgfQogCi0gICAgcHVzaChAJG91dHB1dEFycmF5
LCAiICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFs
U3RyaW5nKCZ2bSwgU3RyaW5nKFwiJHZpc2libGVJbnRlcmZhY2VOYW1lXCJfcykpLCBKU0M6OlBy
b3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRF
bnVtKTtcbiIpOworICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBwdXREaXJlY3Qodm0sIHZt
LnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZyh2bSwgU3RyaW5nKFwiJHZp
c2libGVJbnRlcmZhY2VOYW1lXCJfcykpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25s
eSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTtcbiIpOwogICAgIHB1c2goQCRv
dXRwdXRBcnJheSwgIiAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwg
anNOdW1iZXIoJHtsZWFzdENvbnN0cnVjdG9yTGVuZ3RofSksIEpTQzo6UHJvcGVydHlBdHRyaWJ1
dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pO1xuIikgaWYg
ZGVmaW5lZCAkbGVhc3RDb25zdHJ1Y3Rvckxlbmd0aDsKIAogICAgIG15ICRjbGFzc0ZvclRoaXMg
PSAiJHtjbGFzc05hbWV9OjppbmZvKCkiOwpAQCAtNzM2OCw3ICs3Mzg0LDcgQEAgc3ViIEdlbmVy
YXRlQ29uc3RydWN0b3JIZWxwZXJNZXRob2RzCiAgICAgICAgIG15ICRydW50aW1lRW5hYmxlQ29u
ZGl0aW9uYWxTdHJpbmcgPSBHZW5lcmF0ZVJ1bnRpbWVFbmFibGVDb25kaXRpb25hbFN0cmluZygk
aW50ZXJmYWNlLCAkb3BlcmF0aW9uT3JBdHRyaWJ1dGUsICJ0cnVlIik7CiAgICAgICAgIG15ICRu
YW1lID0gJG9wZXJhdGlvbk9yQXR0cmlidXRlLT5uYW1lOwogICAgICAgICBwdXNoKEAkb3V0cHV0
QXJyYXksICIgICAgaWYgKCEke3J1bnRpbWVFbmFibGVDb25kaXRpb25hbFN0cmluZ30pIHtcbiIp
OwotICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgIGF1dG8gcHJvcGVydHlOYW1l
ID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENo
YXIqPihcIiRuYW1lXCIpLCBzdHJsZW4oXCIkbmFtZVwiKSk7XG4iKTsKKyAgICAgICAgcHVzaChA
JG91dHB1dEFycmF5LCAiICAgICAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZy
b21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihcIiRuYW1lXCIpLCBz
dHJsZW4oXCIkbmFtZVwiKSk7XG4iKTsKICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAg
ICAgICBWTTo6RGVsZXRlUHJvcGVydHlNb2RlU2NvcGUgc2NvcGUodm0sIFZNOjpEZWxldGVQcm9w
ZXJ0eU1vZGU6Oklnbm9yZUNvbmZpZ3VyYWJsZSk7XG4iKTsKICAgICAgICAgcHVzaChAJG91dHB1
dEFycmF5LCAiICAgICAgICBKU09iamVjdDo6ZGVsZXRlUHJvcGVydHkodGhpcywgZ2xvYmFsT2Jq
ZWN0Lmdsb2JhbEV4ZWMoKSwgcHJvcGVydHlOYW1lKTtcbiIpOwogICAgICAgICBwdXNoKEAkb3V0
cHV0QXJyYXksICIgICAgfVxuIik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNJbnRlcmZhY2VOYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNJbnRlcmZhY2VOYW1lLmNwcAkocmV2aXNp
b24gMjQ5MTI4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
SW50ZXJmYWNlTmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4LDcgKzc4LDcgQEAgdGVtcGxh
dGU8PiBKU1ZhbHVlIEpTSW50ZXJmYWNlTmFtZUNvbnN0cgogdGVtcGxhdGU8PiB2b2lkIEpTSW50
ZXJmYWNlTmFtZUNvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGllcyhWTSYgdm0sIEpTRE9N
R2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCiB7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9w
ZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTSW50ZXJmYWNlTmFtZTo6cHJvdG90eXBlKHZtLCBnbG9i
YWxPYmplY3QpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgSlNDOjpQcm9w
ZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51
bSk7Ci0gICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZp
YWxTdHJpbmcoJnZtLCBTdHJpbmcoIkludGVyZmFjZU5hbWUiX3MpKSwgSlNDOjpQcm9wZXJ0eUF0
dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7Cisg
ICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJp
bmcodm0sIFN0cmluZygiSW50ZXJmYWNlTmFtZSJfcykpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRl
OjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKICAgICBwdXRE
aXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMCksIEpTQzo6UHJv
cGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVu
dW0pOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNNYXBMaWtlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNNYXBMaWtlLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTTWFwTGlrZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTk3LDcgKzk3LDcgQEAgdGVtcGxhdGU8PiBKU1ZhbHVlIEpTTWFwTGlrZUNvbnN0cnVj
dG9yOgogdGVtcGxhdGU8PiB2b2lkIEpTTWFwTGlrZUNvbnN0cnVjdG9yOjppbml0aWFsaXplUHJv
cGVydGllcyhWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCiB7CiAgICAg
cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTTWFwTGlrZTo6cHJv
dG90eXBlKHZtLCBnbG9iYWxPYmplY3QpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RGVs
ZXRlIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0
cmlidXRlOjpEb250RW51bSk7Ci0gICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5u
YW1lLCBqc05vbnRyaXZpYWxTdHJpbmcoJnZtLCBTdHJpbmcoIk1hcExpa2UiX3MpKSwgSlNDOjpQ
cm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250
RW51bSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRy
aXZpYWxTdHJpbmcodm0sIFN0cmluZygiTWFwTGlrZSJfcykpLCBKU0M6OlByb3BlcnR5QXR0cmli
dXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKICAgICBw
dXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMCksIEpTQzo6
UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9u
dEVudW0pOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNSZWFkT25seU1hcExpa2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1JlYWRPbmx5TWFwTGlrZS5jcHAJKHJldmlzaW9uIDI0
OTEyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1JlYWRP
bmx5TWFwTGlrZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk0LDcgKzk0LDcgQEAgdGVtcGxhdGU8
PiBKU1ZhbHVlIEpTUmVhZE9ubHlNYXBMaWtlQ29ucwogdGVtcGxhdGU8PiB2b2lkIEpTUmVhZE9u
bHlNYXBMaWtlQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKFZNJiB2bSwgSlNET01H
bG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKIHsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3Bl
cnR5TmFtZXMtPnByb3RvdHlwZSwgSlNSZWFkT25seU1hcExpa2U6OnByb3RvdHlwZSh2bSwgZ2xv
YmFsT2JqZWN0KSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IEpTQzo6UHJv
cGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVu
dW0pOwotICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2
aWFsU3RyaW5nKCZ2bSwgU3RyaW5nKCJSZWFkT25seU1hcExpa2UiX3MpKSwgSlNDOjpQcm9wZXJ0
eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7
CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxT
dHJpbmcodm0sIFN0cmluZygiUmVhZE9ubHlNYXBMaWtlIl9zKSksIEpTQzo6UHJvcGVydHlBdHRy
aWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwogICAg
IHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigwKSwgSlND
OjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpE
b250RW51bSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RBY3RpdmVET01PYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RBY3RpdmVET01PYmplY3QuY3BwCShy
ZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0QWN0aXZlRE9NT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA1LDcgKzEw
NSw3IEBAIHRlbXBsYXRlPD4gSlNWYWx1ZSBKU1Rlc3RBY3RpdmVET01PYmplY3QKIHRlbXBsYXRl
PD4gdm9pZCBKU1Rlc3RBY3RpdmVET01PYmplY3RDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3Bl
cnRpZXMoVk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQogewogICAgIHB1
dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3RBY3RpdmVET01P
YmplY3Q6OnByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0
ZTo6RG9udERlbGV0ZSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQ
cm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwotICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVy
dHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKCZ2bSwgU3RyaW5nKCJUZXN0QWN0aXZl
RE9NT2JqZWN0Il9zKSksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQ
cm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVy
dHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKHZtLCBTdHJpbmcoIlRlc3RBY3RpdmVE
T01PYmplY3QiX3MpKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlBy
b3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0
eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDApLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFk
T25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKIH0KIApJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENFUmVhY3Rpb25zLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0Q0VSZWFjdGlvbnMuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q0VSZWFjdGlvbnMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDMsNyArMTAzLDcgQEAgdGVtcGxhdGU8PiBKU1ZhbHVlIEpTVGVzdENFUmVh
Y3Rpb25zQ29ucwogdGVtcGxhdGU8PiB2b2lkIEpTVGVzdENFUmVhY3Rpb25zQ29uc3RydWN0b3I6
OmluaXRpYWxpemVQcm9wZXJ0aWVzKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9i
amVjdCkKIHsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwg
SlNUZXN0Q0VSZWFjdGlvbnM6OnByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KSwgSlNDOjpQcm9w
ZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRP
bmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwotICAgIHB1dERpcmVjdCh2
bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKCZ2bSwgU3RyaW5n
KCJUZXN0Q0VSZWFjdGlvbnMiX3MpKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkg
fCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CisgICAgcHV0RGlyZWN0KHZtLCB2
bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcodm0sIFN0cmluZygiVGVz
dENFUmVhY3Rpb25zIl9zKSksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlND
OjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJv
cGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigwKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6
UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CiB9CiAKQEAgLTIx
Niw2ICsyMTYsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RDRVJlYWN0aW9uc0F0dHJpYnV0CiAK
IHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RDRVJlYWN0aW9uc0F0dHJpYnV0ZVdpdGhDRVJl
YWN0aW9uc1NldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RDRVJlYWN0aW9ucyYgdGhpc09i
amVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKKyAgICBVTlVT
RURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBDdXN0
b21FbGVtZW50UmVhY3Rpb25TdGFjayBjdXN0b21FbGVtZW50UmVhY3Rpb25TdGFjayhzdGF0ZSk7
CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwpAQCAtMjQ4LDYgKzI0OSw3
IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdENFUmVhY3Rpb25zUmVmbGVjdEEKIAogc3RhdGljIGlu
bGluZSBib29sIHNldEpTVGVzdENFUmVhY3Rpb25zUmVmbGVjdEF0dHJpYnV0ZVdpdGhDRVJlYWN0
aW9uc1NldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RDRVJlYWN0aW9ucyYgdGhpc09iamVj
dCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKKyAgICBVTlVTRURf
UEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBDdXN0b21F
bGVtZW50UmVhY3Rpb25TdGFjayBjdXN0b21FbGVtZW50UmVhY3Rpb25TdGFjayhzdGF0ZSk7CiAg
ICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwpAQCAtMjgwLDE3ICsyODIsMTgg
QEAgRW5jb2RlZEpTVmFsdWUganNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZgogCiBzdGF0aWMgaW5s
aW5lIGJvb2wgc2V0SlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllckF0dHJpYnV0ZVNldHRlcihF
eGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RDRVJlYWN0aW9ucyYgdGhpc09iamVjdCwgSlNWYWx1ZSB2
YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7Ci0gICAgYXV0byBpZCA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLnZtKCks
IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigic3RyaW5naWZpZXJBdHRyaWJ1dGUiKSwg
c3RybGVuKCJzdHJpbmdpZmllckF0dHJpYnV0ZSIpKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUp
OworICAgIFZNJiB2bSA9IHRocm93U2NvcGUudm0oKTsKKyAgICBhdXRvIGlkID0gSWRlbnRpZmll
cjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJzdHJpbmdp
ZmllckF0dHJpYnV0ZSIpLCBzdHJsZW4oInN0cmluZ2lmaWVyQXR0cmlidXRlIikpOwogICAgIGF1
dG8gdmFsdWVUb0ZvcndhcmRUbyA9IHRoaXNPYmplY3QuZ2V0KCZzdGF0ZSwgaWQpOwogICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwogICAgIGlmIChVTkxJS0VMWSgh
dmFsdWVUb0ZvcndhcmRUby5pc09iamVjdCgpKSkgewogICAgICAgICB0aHJvd1R5cGVFcnJvcigm
c3RhdGUsIHRocm93U2NvcGUpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIGF1
dG8gZm9yd2FyZElkID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUudm0oKSwgcmVpbnRl
cnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJ2YWx1ZSIpLCBzdHJsZW4oInZhbHVlIikpOworICAg
IGF1dG8gZm9yd2FyZElkID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBMQ2hhcio+KCJ2YWx1ZSIpLCBzdHJsZW4oInZhbHVlIikpOwogICAgIFB1dFBy
b3BlcnR5U2xvdCBzbG90KHZhbHVlVG9Gb3J3YXJkVG8sIGZhbHNlKTsKLSAgICBhc09iamVjdCh2
YWx1ZVRvRm9yd2FyZFRvKS0+bWV0aG9kVGFibGUoc3RhdGUudm0oKSktPnB1dChhc09iamVjdCh2
YWx1ZVRvRm9yd2FyZFRvKSwgJnN0YXRlLCBmb3J3YXJkSWQsIHZhbHVlLCBzbG90KTsKKyAgICBh
c09iamVjdCh2YWx1ZVRvRm9yd2FyZFRvKS0+bWV0aG9kVGFibGUodm0pLT5wdXQoYXNPYmplY3Qo
dmFsdWVUb0ZvcndhcmRUbyksICZzdGF0ZSwgZm9yd2FyZElkLCB2YWx1ZSwgc2xvdCk7CiAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CiAgICAgcmV0dXJuIHRydWU7
CiB9CkBAIC0zMTYsNiArMzE5LDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0Q0VSZWFjdGlvbnNB
dHRyaWJ1dAogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0Q0VSZWFjdGlvbnNBdHRyaWJ1
dGVXaXRoQ0VSZWFjdGlvbnNOb3ROZWVkZWRTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0
Q0VSZWFjdGlvbnMmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93
U2NvcGUpCiB7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7CiAgICAgQ3VzdG9tRWxlbWVudFJlYWN0aW9uRGlzYWxsb3dlZFNjb3BlIGN1c3Rv
bUVsZW1lbnRSZWFjdGlvbkRpc2FsbG93ZWRTY29wZTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09i
amVjdC53cmFwcGVkKCk7CkBAIC0zNDgsNiArMzUyLDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0
Q0VSZWFjdGlvbnNSZWZsZWN0QQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0Q0VSZWFj
dGlvbnNSZWZsZWN0QXR0cmlidXRlV2l0aENFUmVhY3Rpb25zTm90TmVlZGVkU2V0dGVyKEV4ZWNT
dGF0ZSYgc3RhdGUsIEpTVGVzdENFUmVhY3Rpb25zJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVl
LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogeworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIEN1c3RvbUVsZW1lbnRSZWFjdGlvbkRp
c2FsbG93ZWRTY29wZSBjdXN0b21FbGVtZW50UmVhY3Rpb25EaXNhbGxvd2VkU2NvcGU7CiAgICAg
YXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwpAQCAtMzgwLDE3ICszODUsMTggQEAg
RW5jb2RlZEpTVmFsdWUganNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZgogCiBzdGF0aWMgaW5saW5l
IGJvb2wgc2V0SlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllckF0dHJpYnV0ZU5vdE5lZWRlZFNl
dHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RDRVJlYWN0aW9ucyYgdGhpc09iamVjdCwgSlNW
YWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7Ci0gICAgYXV0byBpZCA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRl
LnZtKCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigic3RyaW5naWZpZXJBdHRyaWJ1
dGVOb3ROZWVkZWQiKSwgc3RybGVuKCJzdHJpbmdpZmllckF0dHJpYnV0ZU5vdE5lZWRlZCIpKTsK
KyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFZNJiB2bSA9IHRocm93U2NvcGUudm0oKTsK
KyAgICBhdXRvIGlkID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBMQ2hhcio+KCJzdHJpbmdpZmllckF0dHJpYnV0ZU5vdE5lZWRlZCIpLCBzdHJsZW4o
InN0cmluZ2lmaWVyQXR0cmlidXRlTm90TmVlZGVkIikpOwogICAgIGF1dG8gdmFsdWVUb0Zvcndh
cmRUbyA9IHRoaXNPYmplY3QuZ2V0KCZzdGF0ZSwgaWQpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04odGhyb3dTY29wZSwgZmFsc2UpOwogICAgIGlmIChVTkxJS0VMWSghdmFsdWVUb0ZvcndhcmRU
by5pc09iamVjdCgpKSkgewogICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHRocm93U2Nv
cGUpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIGF1dG8gZm9yd2FyZElkID0g
SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUudm0oKSwgcmVpbnRlcnByZXRfY2FzdDxjb25z
dCBMQ2hhcio+KCJ2YWx1ZVdpdGhvdXRSZWFjdGlvbnMiKSwgc3RybGVuKCJ2YWx1ZVdpdGhvdXRS
ZWFjdGlvbnMiKSk7CisgICAgYXV0byBmb3J3YXJkSWQgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oInZhbHVlV2l0aG91dFJlYWN0aW9u
cyIpLCBzdHJsZW4oInZhbHVlV2l0aG91dFJlYWN0aW9ucyIpKTsKICAgICBQdXRQcm9wZXJ0eVNs
b3Qgc2xvdCh2YWx1ZVRvRm9yd2FyZFRvLCBmYWxzZSk7Ci0gICAgYXNPYmplY3QodmFsdWVUb0Zv
cndhcmRUbyktPm1ldGhvZFRhYmxlKHN0YXRlLnZtKCkpLT5wdXQoYXNPYmplY3QodmFsdWVUb0Zv
cndhcmRUbyksICZzdGF0ZSwgZm9yd2FyZElkLCB2YWx1ZSwgc2xvdCk7CisgICAgYXNPYmplY3Qo
dmFsdWVUb0ZvcndhcmRUbyktPm1ldGhvZFRhYmxlKHZtKS0+cHV0KGFzT2JqZWN0KHZhbHVlVG9G
b3J3YXJkVG8pLCAmc3RhdGUsIGZvcndhcmRJZCwgdmFsdWUsIHNsb3QpOwogICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwogICAgIHJldHVybiB0cnVlOwogfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENFUmVhY3Rp
b25zU3RyaW5naWZpZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyLmNwcAkocmV2aXNp
b24gMjQ5MTI4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MCw3ICs5
MCw3IEBAIHRlbXBsYXRlPD4gSlNWYWx1ZSBKU1Rlc3RDRVJlYWN0aW9uc1N0cmkKIHRlbXBsYXRl
PD4gdm9pZCBKU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyQ29uc3RydWN0b3I6OmluaXRpYWxp
emVQcm9wZXJ0aWVzKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKIHsK
ICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgSlNUZXN0Q0VS
ZWFjdGlvbnNTdHJpbmdpZmllcjo6cHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QpLCBKU0M6OlBy
b3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVh
ZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7Ci0gICAgcHV0RGlyZWN0
KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcoJnZtLCBTdHJp
bmcoIlRlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyIl9zKSksIEpTQzo6UHJvcGVydHlBdHRyaWJ1
dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOworICAgIHB1
dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKHZt
LCBTdHJpbmcoIlRlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyIl9zKSksIEpTQzo6UHJvcGVydHlB
dHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwog
ICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigwKSwg
SlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRl
OjpEb250RW51bSk7CiB9CiAKQEAgLTE5OCw2ICsxOTgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RDRVJlYWN0aW9uc1N0cmluZ2lmCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RDRVJl
YWN0aW9uc1N0cmluZ2lmaWVyVmFsdWVTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0Q0VS
ZWFjdGlvbnNTdHJpbmdpZmllciYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29w
ZSYgdGhyb3dTY29wZSkKIHsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsKICAgICBDdXN0b21FbGVtZW50UmVhY3Rpb25TdGFjayBjdXN0b21F
bGVtZW50UmVhY3Rpb25TdGFjayhzdGF0ZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qu
d3JhcHBlZCgpOwpAQCAtMjMwLDYgKzIzMSw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdENFUmVh
Y3Rpb25zU3RyaW5naWYKIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdENFUmVhY3Rpb25z
U3RyaW5naWZpZXJWYWx1ZVdpdGhvdXRSZWFjdGlvbnNTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwg
SlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllciYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwg
VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAg
IFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBDdXN0b21FbGVtZW50UmVhY3Rpb25EaXNh
bGxvd2VkU2NvcGUgY3VzdG9tRWxlbWVudFJlYWN0aW9uRGlzYWxsb3dlZFNjb3BlOwogICAgIGF1
dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsVHJhY2VyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2FsbFRyYWNl
ci5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RDYWxsVHJhY2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE3LDcg
KzExNyw3IEBAIHRlbXBsYXRlPD4gSlNWYWx1ZSBKU1Rlc3RDYWxsVHJhY2VyQ29uc3QKIHRlbXBs
YXRlPD4gdm9pZCBKU1Rlc3RDYWxsVHJhY2VyQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0
aWVzKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKIHsKICAgICBwdXRE
aXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgSlNUZXN0Q2FsbFRyYWNlcjo6
cHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250
RGVsZXRlIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5
QXR0cmlidXRlOjpEb250RW51bSk7Ci0gICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVz
LT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcoJnZtLCBTdHJpbmcoIlRlc3RDYWxsVHJhY2VyIl9z
KSksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJp
YnV0ZTo6RG9udEVudW0pOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFt
ZSwganNOb250cml2aWFsU3RyaW5nKHZtLCBTdHJpbmcoIlRlc3RDYWxsVHJhY2VyIl9zKSksIEpT
Qzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6
RG9udEVudW0pOwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBq
c051bWJlcigwKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3Bl
cnR5QXR0cmlidXRlOjpEb250RW51bSk7CiAgICAgcmVpZnlTdGF0aWNQcm9wZXJ0aWVzKHZtLCBK
U1Rlc3RDYWxsVHJhY2VyOjppbmZvKCksIEpTVGVzdENhbGxUcmFjZXJDb25zdHJ1Y3RvclRhYmxl
VmFsdWVzLCAqdGhpcyk7CiB9CkBAIC0yMzgsNiArMjM4LDcgQEAgRW5jb2RlZEpTVmFsdWUganNU
ZXN0Q2FsbFRyYWNlclRlc3RBdHRyaQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0Q2Fs
bFRyYWNlclRlc3RBdHRyaWJ1dGVJbnRlcmZhY2VTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNU
ZXN0Q2FsbFRyYWNlciYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSkKIHsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAg
YXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMQm9vbGVhbj4oc3RhdGUsIHZhbHVlKTsKQEAg
LTI3Myw2ICsyNzQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RDYWxsVHJhY2VyVGVzdEF0dHJp
CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RDYWxsVHJhY2VyVGVzdEF0dHJpYnV0ZVNw
ZWNpZmllZFNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RDYWxsVHJhY2VyJiB0aGlzT2Jq
ZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogeworICAgIFVOVVNF
RF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8m
IGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29u
dmVydDxJRExCb29sZWFuPihzdGF0ZSwgdmFsdWUpOwpAQCAtMzA4LDYgKzMxMCw3IEBAIEVuY29k
ZWRKU1ZhbHVlIGpzVGVzdENhbGxUcmFjZXJUZXN0QXR0cmkKIAogc3RhdGljIGlubGluZSBib29s
IHNldEpTVGVzdENhbGxUcmFjZXJUZXN0QXR0cmlidXRlV2l0aFZhcmlhbnRTZXR0ZXIoRXhlY1N0
YXRlJiBzdGF0ZSwgSlNUZXN0Q2FsbFRyYWNlciYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwg
VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAg
IFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53
cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMVW5pb248SURMQm9v
bGVhbiwgSURMRmxvYXQsIElETERPTVN0cmluZz4+KHN0YXRlLCB2YWx1ZSk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2FsbGJhY2tJbnRlcmZh
Y2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RDYWxsYmFja0ludGVyZmFjZS5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsYmFja0ludGVy
ZmFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk0LDcgKzk0LDcgQEAgdGVtcGxhdGU8PiBUZXN0
Q2FsbGJhY2tJbnRlcmZhY2U6OkRpY3RpbwogICAgIGlmIChpc051bGxPclVuZGVmaW5lZCkKICAg
ICAgICAgb3B0aW9uYWxNZW1iZXJWYWx1ZSA9IGpzVW5kZWZpbmVkKCk7CiAgICAgZWxzZSB7Ci0g
ICAgICAgIG9wdGlvbmFsTWVtYmVyVmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAib3B0aW9uYWxNZW1iZXIiKSk7CisgICAgICAgIG9wdGlv
bmFsTWVtYmVyVmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJp
bmcodm0sICJvcHRpb25hbE1lbWJlciIpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCB7IH0pOwogICAgIH0KICAgICBpZiAoIW9wdGlvbmFsTWVtYmVyVmFsdWUuaXNV
bmRlZmluZWQoKSkgewpAQCAtMTA1LDcgKzEwNSw3IEBAIHRlbXBsYXRlPD4gVGVzdENhbGxiYWNr
SW50ZXJmYWNlOjpEaWN0aW8KICAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQpCiAgICAgICAgIHJl
cXVpcmVkTWVtYmVyVmFsdWUgPSBqc1VuZGVmaW5lZCgpOwogICAgIGVsc2UgewotICAgICAgICBy
ZXF1aXJlZE1lbWJlclZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKCZzdGF0ZSwgInJlcXVpcmVkTWVtYmVyIikpOworICAgICAgICByZXF1aXJlZE1lbWJl
clZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAi
cmVxdWlyZWRNZW1iZXIiKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29w
ZSwgeyB9KTsKICAgICB9CiAgICAgaWYgKCFyZXF1aXJlZE1lbWJlclZhbHVlLmlzVW5kZWZpbmVk
KCkpIHsKQEAgLTE2MCw3ICsxNjAsNyBAQCB0ZW1wbGF0ZTw+IEpTVmFsdWUgSlNUZXN0Q2FsbGJh
Y2tJbnRlcmZhCiB0ZW1wbGF0ZTw+IHZvaWQgSlNUZXN0Q2FsbGJhY2tJbnRlcmZhY2VDb25zdHJ1
Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMoVk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xv
YmFsT2JqZWN0KQogewogICAgIFVOVVNFRF9QQVJBTShnbG9iYWxPYmplY3QpOwotICAgIHB1dERp
cmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKCZ2bSwg
U3RyaW5nKCJUZXN0Q2FsbGJhY2tJbnRlcmZhY2UiX3MpKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0
ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CisgICAgcHV0
RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcodm0s
IFN0cmluZygiVGVzdENhbGxiYWNrSW50ZXJmYWNlIl9zKSksIEpTQzo6UHJvcGVydHlBdHRyaWJ1
dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwogICAgIHB1
dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigwKSwgSlNDOjpQ
cm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250
RW51bSk7CiAgICAgcmVpZnlTdGF0aWNQcm9wZXJ0aWVzKHZtLCBudWxscHRyLCBKU1Rlc3RDYWxs
YmFja0ludGVyZmFjZUNvbnN0cnVjdG9yVGFibGVWYWx1ZXMsICp0aGlzKTsKIH0KQEAgLTE4OSw3
ICsxODksNyBAQCBDYWxsYmFja1Jlc3VsdDx0eXBlbmFtZSBJRExWb2lkOjpJbXBsZW1lCiAgICAg
QVNTRVJUKCFhcmdzLmhhc092ZXJmbG93ZWQoKSk7CiAKICAgICBOYWtlZFB0cjxKU0M6OkV4Y2Vw
dGlvbj4gcmV0dXJuZWRFeGNlcHRpb247Ci0gICAgbV9kYXRhLT5pbnZva2VDYWxsYmFjayh0aGlz
VmFsdWUsIGFyZ3MsIEpTQ2FsbGJhY2tEYXRhOjpDYWxsYmFja1R5cGU6Ok9iamVjdCwgSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZygmdm0sICJjYWxsYmFja1dpdGhOb1BhcmFtIiksIHJldHVybmVkRXhj
ZXB0aW9uKTsKKyAgICBtX2RhdGEtPmludm9rZUNhbGxiYWNrKHRoaXNWYWx1ZSwgYXJncywgSlND
YWxsYmFja0RhdGE6OkNhbGxiYWNrVHlwZTo6T2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KHZtLCAiY2FsbGJhY2tXaXRoTm9QYXJhbSIpLCByZXR1cm5lZEV4Y2VwdGlvbik7CiAgICAgaWYg
KHJldHVybmVkRXhjZXB0aW9uKSB7CiAgICAgICAgIHJlcG9ydEV4Y2VwdGlvbigmc3RhdGUsIHJl
dHVybmVkRXhjZXB0aW9uKTsKICAgICAgICAgcmV0dXJuIENhbGxiYWNrUmVzdWx0VHlwZTo6RXhj
ZXB0aW9uVGhyb3duOwpAQCAtMjE2LDcgKzIxNiw3IEBAIENhbGxiYWNrUmVzdWx0PHR5cGVuYW1l
IElETFZvaWQ6OkltcGxlbWUKICAgICBBU1NFUlQoIWFyZ3MuaGFzT3ZlcmZsb3dlZCgpKTsKIAog
ICAgIE5ha2VkUHRyPEpTQzo6RXhjZXB0aW9uPiByZXR1cm5lZEV4Y2VwdGlvbjsKLSAgICBtX2Rh
dGEtPmludm9rZUNhbGxiYWNrKHRoaXNWYWx1ZSwgYXJncywgSlNDYWxsYmFja0RhdGE6OkNhbGxi
YWNrVHlwZTo6T2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImNhbGxiYWNrV2l0
aEFycmF5UGFyYW0iKSwgcmV0dXJuZWRFeGNlcHRpb24pOworICAgIG1fZGF0YS0+aW52b2tlQ2Fs
bGJhY2sodGhpc1ZhbHVlLCBhcmdzLCBKU0NhbGxiYWNrRGF0YTo6Q2FsbGJhY2tUeXBlOjpPYmpl
Y3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJjYWxsYmFja1dpdGhBcnJheVBhcmFtIiks
IHJldHVybmVkRXhjZXB0aW9uKTsKICAgICBpZiAocmV0dXJuZWRFeGNlcHRpb24pIHsKICAgICAg
ICAgcmVwb3J0RXhjZXB0aW9uKCZzdGF0ZSwgcmV0dXJuZWRFeGNlcHRpb24pOwogICAgICAgICBy
ZXR1cm4gQ2FsbGJhY2tSZXN1bHRUeXBlOjpFeGNlcHRpb25UaHJvd247CkBAIC0yNDQsNyArMjQ0
LDcgQEAgQ2FsbGJhY2tSZXN1bHQ8dHlwZW5hbWUgSURMVm9pZDo6SW1wbGVtZQogICAgIEFTU0VS
VCghYXJncy5oYXNPdmVyZmxvd2VkKCkpOwogCiAgICAgTmFrZWRQdHI8SlNDOjpFeGNlcHRpb24+
IHJldHVybmVkRXhjZXB0aW9uOwotICAgIG1fZGF0YS0+aW52b2tlQ2FsbGJhY2sodGhpc1ZhbHVl
LCBhcmdzLCBKU0NhbGxiYWNrRGF0YTo6Q2FsbGJhY2tUeXBlOjpPYmplY3QsIElkZW50aWZpZXI6
OmZyb21TdHJpbmcoJnZtLCAiY2FsbGJhY2tXaXRoU2VyaWFsaXplZFNjcmlwdFZhbHVlUGFyYW0i
KSwgcmV0dXJuZWRFeGNlcHRpb24pOworICAgIG1fZGF0YS0+aW52b2tlQ2FsbGJhY2sodGhpc1Zh
bHVlLCBhcmdzLCBKU0NhbGxiYWNrRGF0YTo6Q2FsbGJhY2tUeXBlOjpPYmplY3QsIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcodm0sICJjYWxsYmFja1dpdGhTZXJpYWxpemVkU2NyaXB0VmFsdWVQYXJh
bSIpLCByZXR1cm5lZEV4Y2VwdGlvbik7CiAgICAgaWYgKHJldHVybmVkRXhjZXB0aW9uKSB7CiAg
ICAgICAgIHJlcG9ydEV4Y2VwdGlvbigmc3RhdGUsIHJldHVybmVkRXhjZXB0aW9uKTsKICAgICAg
ICAgcmV0dXJuIENhbGxiYWNrUmVzdWx0VHlwZTo6RXhjZXB0aW9uVGhyb3duOwpAQCAtMjcxLDcg
KzI3MSw3IEBAIENhbGxiYWNrUmVzdWx0PHR5cGVuYW1lIElETFZvaWQ6OkltcGxlbWUKICAgICBB
U1NFUlQoIWFyZ3MuaGFzT3ZlcmZsb3dlZCgpKTsKIAogICAgIE5ha2VkUHRyPEpTQzo6RXhjZXB0
aW9uPiByZXR1cm5lZEV4Y2VwdGlvbjsKLSAgICBtX2RhdGEtPmludm9rZUNhbGxiYWNrKHRoaXNW
YWx1ZSwgYXJncywgSlNDYWxsYmFja0RhdGE6OkNhbGxiYWNrVHlwZTo6T2JqZWN0LCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKCZ2bSwgImNhbGxiYWNrV2l0aFN0cmluZ0xpc3QiKSwgcmV0dXJuZWRF
eGNlcHRpb24pOworICAgIG1fZGF0YS0+aW52b2tlQ2FsbGJhY2sodGhpc1ZhbHVlLCBhcmdzLCBK
U0NhbGxiYWNrRGF0YTo6Q2FsbGJhY2tUeXBlOjpPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJp
bmcodm0sICJjYWxsYmFja1dpdGhTdHJpbmdMaXN0IiksIHJldHVybmVkRXhjZXB0aW9uKTsKICAg
ICBpZiAocmV0dXJuZWRFeGNlcHRpb24pIHsKICAgICAgICAgcmVwb3J0RXhjZXB0aW9uKCZzdGF0
ZSwgcmV0dXJuZWRFeGNlcHRpb24pOwogICAgICAgICByZXR1cm4gQ2FsbGJhY2tSZXN1bHRUeXBl
OjpFeGNlcHRpb25UaHJvd247CkBAIC0yOTgsNyArMjk4LDcgQEAgQ2FsbGJhY2tSZXN1bHQ8dHlw
ZW5hbWUgSURMVm9pZDo6SW1wbGVtZQogICAgIEFTU0VSVCghYXJncy5oYXNPdmVyZmxvd2VkKCkp
OwogCiAgICAgTmFrZWRQdHI8SlNDOjpFeGNlcHRpb24+IHJldHVybmVkRXhjZXB0aW9uOwotICAg
IG1fZGF0YS0+aW52b2tlQ2FsbGJhY2sodGhpc1ZhbHVlLCBhcmdzLCBKU0NhbGxiYWNrRGF0YTo6
Q2FsbGJhY2tUeXBlOjpPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiY2FsbGJh
Y2tXaXRoQm9vbGVhbiIpLCByZXR1cm5lZEV4Y2VwdGlvbik7CisgICAgbV9kYXRhLT5pbnZva2VD
YWxsYmFjayh0aGlzVmFsdWUsIGFyZ3MsIEpTQ2FsbGJhY2tEYXRhOjpDYWxsYmFja1R5cGU6Ok9i
amVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImNhbGxiYWNrV2l0aEJvb2xlYW4iKSwg
cmV0dXJuZWRFeGNlcHRpb24pOwogICAgIGlmIChyZXR1cm5lZEV4Y2VwdGlvbikgewogICAgICAg
ICByZXBvcnRFeGNlcHRpb24oJnN0YXRlLCByZXR1cm5lZEV4Y2VwdGlvbik7CiAgICAgICAgIHJl
dHVybiBDYWxsYmFja1Jlc3VsdFR5cGU6OkV4Y2VwdGlvblRocm93bjsKQEAgLTMyNiw3ICszMjYs
NyBAQCBDYWxsYmFja1Jlc3VsdDx0eXBlbmFtZSBJRExWb2lkOjpJbXBsZW1lCiAgICAgQVNTRVJU
KCFhcmdzLmhhc092ZXJmbG93ZWQoKSk7CiAKICAgICBOYWtlZFB0cjxKU0M6OkV4Y2VwdGlvbj4g
cmV0dXJuZWRFeGNlcHRpb247Ci0gICAgbV9kYXRhLT5pbnZva2VDYWxsYmFjayh0aGlzVmFsdWUs
IGFyZ3MsIEpTQ2FsbGJhY2tEYXRhOjpDYWxsYmFja1R5cGU6Ok9iamVjdCwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZygmdm0sICJjYWxsYmFja1JlcXVpcmVzVGhpc1RvUGFzcyIpLCByZXR1cm5lZEV4
Y2VwdGlvbik7CisgICAgbV9kYXRhLT5pbnZva2VDYWxsYmFjayh0aGlzVmFsdWUsIGFyZ3MsIEpT
Q2FsbGJhY2tEYXRhOjpDYWxsYmFja1R5cGU6Ok9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zyh2bSwgImNhbGxiYWNrUmVxdWlyZXNUaGlzVG9QYXNzIiksIHJldHVybmVkRXhjZXB0aW9uKTsK
ICAgICBpZiAocmV0dXJuZWRFeGNlcHRpb24pIHsKICAgICAgICAgcmVwb3J0RXhjZXB0aW9uKCZz
dGF0ZSwgcmV0dXJuZWRFeGNlcHRpb24pOwogICAgICAgICByZXR1cm4gQ2FsbGJhY2tSZXN1bHRU
eXBlOjpFeGNlcHRpb25UaHJvd247CkBAIC0zNTIsNyArMzUyLDcgQEAgQ2FsbGJhY2tSZXN1bHQ8
dHlwZW5hbWUgSURMRE9NU3RyaW5nOjpJbQogICAgIEFTU0VSVCghYXJncy5oYXNPdmVyZmxvd2Vk
KCkpOwogCiAgICAgTmFrZWRQdHI8SlNDOjpFeGNlcHRpb24+IHJldHVybmVkRXhjZXB0aW9uOwot
ICAgIGF1dG8ganNSZXN1bHQgPSBtX2RhdGEtPmludm9rZUNhbGxiYWNrKHRoaXNWYWx1ZSwgYXJn
cywgSlNDYWxsYmFja0RhdGE6OkNhbGxiYWNrVHlwZTo6T2JqZWN0LCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKCZ2bSwgImNhbGxiYWNrV2l0aEFSZXR1cm5WYWx1ZSIpLCByZXR1cm5lZEV4Y2VwdGlv
bik7CisgICAgYXV0byBqc1Jlc3VsdCA9IG1fZGF0YS0+aW52b2tlQ2FsbGJhY2sodGhpc1ZhbHVl
LCBhcmdzLCBKU0NhbGxiYWNrRGF0YTo6Q2FsbGJhY2tUeXBlOjpPYmplY3QsIElkZW50aWZpZXI6
OmZyb21TdHJpbmcodm0sICJjYWxsYmFja1dpdGhBUmV0dXJuVmFsdWUiKSwgcmV0dXJuZWRFeGNl
cHRpb24pOwogICAgIGlmIChyZXR1cm5lZEV4Y2VwdGlvbikgewogICAgICAgICByZXBvcnRFeGNl
cHRpb24oJnN0YXRlLCByZXR1cm5lZEV4Y2VwdGlvbik7CiAgICAgICAgIHJldHVybiBDYWxsYmFj
a1Jlc3VsdFR5cGU6OkV4Y2VwdGlvblRocm93bjsKQEAgLTM4Miw3ICszODIsNyBAQCBDYWxsYmFj
a1Jlc3VsdDx0eXBlbmFtZSBJRExET01TdHJpbmc6OkltCiAgICAgQVNTRVJUKCFhcmdzLmhhc092
ZXJmbG93ZWQoKSk7CiAKICAgICBOYWtlZFB0cjxKU0M6OkV4Y2VwdGlvbj4gcmV0dXJuZWRFeGNl
cHRpb247Ci0gICAgYXV0byBqc1Jlc3VsdCA9IG1fZGF0YS0+aW52b2tlQ2FsbGJhY2sodGhpc1Zh
bHVlLCBhcmdzLCBKU0NhbGxiYWNrRGF0YTo6Q2FsbGJhY2tUeXBlOjpPYmplY3QsIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcoJnZtLCAiY2FsbGJhY2tUaGF0UmV0aHJvd3NFeGNlcHRpb25zIiksIHJl
dHVybmVkRXhjZXB0aW9uKTsKKyAgICBhdXRvIGpzUmVzdWx0ID0gbV9kYXRhLT5pbnZva2VDYWxs
YmFjayh0aGlzVmFsdWUsIGFyZ3MsIEpTQ2FsbGJhY2tEYXRhOjpDYWxsYmFja1R5cGU6Ok9iamVj
dCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImNhbGxiYWNrVGhhdFJldGhyb3dzRXhjZXB0
aW9ucyIpLCByZXR1cm5lZEV4Y2VwdGlvbik7CiAgICAgaWYgKHJldHVybmVkRXhjZXB0aW9uKSB7
CiAgICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAg
ICAgICB0aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHRocm93U2NvcGUsIHJldHVybmVkRXhjZXB0aW9u
KTsKQEAgLTQxMCw3ICs0MTAsNyBAQCBDYWxsYmFja1Jlc3VsdDx0eXBlbmFtZSBJRExET01TdHJp
bmc6OkltCiAgICAgQVNTRVJUKCFhcmdzLmhhc092ZXJmbG93ZWQoKSk7CiAKICAgICBOYWtlZFB0
cjxKU0M6OkV4Y2VwdGlvbj4gcmV0dXJuZWRFeGNlcHRpb247Ci0gICAgYXV0byBqc1Jlc3VsdCA9
IG1fZGF0YS0+aW52b2tlQ2FsbGJhY2sodGhpc1ZhbHVlLCBhcmdzLCBKU0NhbGxiYWNrRGF0YTo6
Q2FsbGJhY2tUeXBlOjpPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiY2FsbGJh
Y2tUaGF0U2tpcHNJbnZva2VDaGVjayIpLCByZXR1cm5lZEV4Y2VwdGlvbik7CisgICAgYXV0byBq
c1Jlc3VsdCA9IG1fZGF0YS0+aW52b2tlQ2FsbGJhY2sodGhpc1ZhbHVlLCBhcmdzLCBKU0NhbGxi
YWNrRGF0YTo6Q2FsbGJhY2tUeXBlOjpPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0s
ICJjYWxsYmFja1RoYXRTa2lwc0ludm9rZUNoZWNrIiksIHJldHVybmVkRXhjZXB0aW9uKTsKICAg
ICBpZiAocmV0dXJuZWRFeGNlcHRpb24pIHsKICAgICAgICAgcmVwb3J0RXhjZXB0aW9uKCZzdGF0
ZSwgcmV0dXJuZWRFeGNlcHRpb24pOwogICAgICAgICByZXR1cm4gQ2FsbGJhY2tSZXN1bHRUeXBl
OjpFeGNlcHRpb25UaHJvd247CkBAIC00NDAsNyArNDQwLDcgQEAgQ2FsbGJhY2tSZXN1bHQ8dHlw
ZW5hbWUgSURMRE9NU3RyaW5nOjpJbQogICAgIEFTU0VSVCghYXJncy5oYXNPdmVyZmxvd2VkKCkp
OwogCiAgICAgTmFrZWRQdHI8SlNDOjpFeGNlcHRpb24+IHJldHVybmVkRXhjZXB0aW9uOwotICAg
IGF1dG8ganNSZXN1bHQgPSBtX2RhdGEtPmludm9rZUNhbGxiYWNrKHRoaXNWYWx1ZSwgYXJncywg
SlNDYWxsYmFja0RhdGE6OkNhbGxiYWNrVHlwZTo6T2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKCZ2bSwgImNhbGxiYWNrV2l0aFRoaXNPYmplY3QiKSwgcmV0dXJuZWRFeGNlcHRpb24pOwor
ICAgIGF1dG8ganNSZXN1bHQgPSBtX2RhdGEtPmludm9rZUNhbGxiYWNrKHRoaXNWYWx1ZSwgYXJn
cywgSlNDYWxsYmFja0RhdGE6OkNhbGxiYWNrVHlwZTo6T2JqZWN0LCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKHZtLCAiY2FsbGJhY2tXaXRoVGhpc09iamVjdCIpLCByZXR1cm5lZEV4Y2VwdGlvbik7
CiAgICAgaWYgKHJldHVybmVkRXhjZXB0aW9uKSB7CiAgICAgICAgIHJlcG9ydEV4Y2VwdGlvbigm
c3RhdGUsIHJldHVybmVkRXhjZXB0aW9uKTsKICAgICAgICAgcmV0dXJuIENhbGxiYWNrUmVzdWx0
VHlwZTo6RXhjZXB0aW9uVGhyb3duOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2xhc3NXaXRoSlNC
dWlsdGluQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OSw3ICs3OSw3IEBAIHRl
bXBsYXRlPD4gSlNWYWx1ZSBKU1Rlc3RDbGFzc1dpdGhKU0J1aWwKIHRlbXBsYXRlPD4gdm9pZCBK
U1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvckNvbnN0cnVjdG9yOjppbml0aWFsaXpl
UHJvcGVydGllcyhWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCiB7CiAg
ICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdENsYXNz
V2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yOjpwcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCksIEpT
Qzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRl
OjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKLSAgICBwdXRE
aXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZygmdm0s
IFN0cmluZygiVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yIl9zKSksIEpTQzo6UHJv
cGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVu
dW0pOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2
aWFsU3RyaW5nKHZtLCBTdHJpbmcoIlRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvciJf
cykpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRy
aWJ1dGU6OkRvbnRFbnVtKTsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxl
bmd0aCwganNOdW1iZXIoMCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlND
OjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RE9NSklULmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RE9NSklULmNw
cAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdERPTUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwMCw3ICs1MDAsNyBA
QCB0ZW1wbGF0ZTw+IEpTVmFsdWUgSlNUZXN0RE9NSklUQ29uc3RydWN0CiB0ZW1wbGF0ZTw+IHZv
aWQgSlNUZXN0RE9NSklUQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKFZNJiB2bSwg
SlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKIHsKICAgICBwdXREaXJlY3Qodm0sIHZt
LnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgSlNUZXN0RE9NSklUOjpwcm90b3R5cGUodm0sIGds
b2JhbE9iamVjdCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUgfCBKU0M6OlBy
b3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRF
bnVtKTsKLSAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJp
dmlhbFN0cmluZygmdm0sIFN0cmluZygiVGVzdERPTUpJVCJfcykpLCBKU0M6OlByb3BlcnR5QXR0
cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKKyAg
ICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0cmlu
Zyh2bSwgU3RyaW5nKCJUZXN0RE9NSklUIl9zKSksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJl
YWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwogICAgIHB1dERpcmVj
dCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigwKSwgSlNDOjpQcm9wZXJ0
eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7
CiB9CiAKQEAgLTExMzQsNyArMTEzNCw3IEBAIEpTQzo6RW5jb2RlZEpTVmFsdWUgSklUX09QRVJB
VElPTiBqc1Rlc3QKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFZNJiB2bSA9IHN0
YXRlLT52bSgpOwotICAgIEpTQzo6TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIHN0
YXRlKTsKKyAgICBKU0M6Ok5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIHN0YXRlKTsK
ICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBw
ZWQoKTsKQEAgLTExNjYsNyArMTE2Niw3IEBAIEpTQzo6RW5jb2RlZEpTVmFsdWUgSklUX09QRVJB
VElPTiBqc1Rlc3QKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFZNJiB2bSA9IHN0
YXRlLT52bSgpOwotICAgIEpTQzo6TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIHN0
YXRlKTsKKyAgICBKU0M6Ok5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIHN0YXRlKTsK
ICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBw
ZWQoKTsKQEAgLTExOTQsNyArMTE5NCw3IEBAIEpTQzo6RW5jb2RlZEpTVmFsdWUgSklUX09QRVJB
VElPTiBqc1Rlc3QKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFZNJiB2bSA9IHN0
YXRlLT52bSgpOwotICAgIEpTQzo6TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIHN0
YXRlKTsKKyAgICBKU0M6Ok5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIHN0YXRlKTsK
ICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBw
ZWQoKTsKQEAgLTEyMjIsNyArMTIyMiw3IEBAIEpTQzo6RW5jb2RlZEpTVmFsdWUgSklUX09QRVJB
VElPTiBqc1Rlc3QKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFZNJiB2bSA9IHN0
YXRlLT52bSgpOwotICAgIEpTQzo6TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIHN0
YXRlKTsKKyAgICBKU0M6Ok5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIHN0YXRlKTsK
ICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBw
ZWQoKTsKQEAgLTEyNTIsNyArMTI1Miw3IEBAIEpTQzo6RW5jb2RlZEpTVmFsdWUgSklUX09QRVJB
VElPTiBqc1Rlc3QKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFZNJiB2bSA9IHN0
YXRlLT52bSgpOwotICAgIEpTQzo6TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIHN0
YXRlKTsKKyAgICBKU0M6Ok5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIHN0YXRlKTsK
ICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBw
ZWQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RFbmFibGVkQnlTZXR0aW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RW5hYmxlZEJ5U2V0dGluZy5jcHAJKHJldmlzaW9u
IDI0OTEyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RFbmFibGVkQnlTZXR0aW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAwLDcgKzEwMCw3IEBA
IHRlbXBsYXRlPD4gSlNWYWx1ZSBKU1Rlc3RFbmFibGVkQnlTZXR0aW4KIHRlbXBsYXRlPD4gdm9p
ZCBKU1Rlc3RFbmFibGVkQnlTZXR0aW5nQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVz
KFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKIHsKICAgICBwdXREaXJl
Y3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgSlNUZXN0RW5hYmxlZEJ5U2V0dGlu
Zzo6cHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpE
b250RGVsZXRlIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3Bl
cnR5QXR0cmlidXRlOjpEb250RW51bSk7Ci0gICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5h
bWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcoJnZtLCBTdHJpbmcoIlRlc3RFbmFibGVkQnlT
ZXR0aW5nIl9zKSksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9w
ZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlO
YW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKHZtLCBTdHJpbmcoIlRlc3RFbmFibGVkQnlT
ZXR0aW5nIl9zKSksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9w
ZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlO
YW1lcy0+bGVuZ3RoLCBqc051bWJlcigwKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9u
bHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CiB9CiAKQEAgLTEzMyw3ICsx
MzMsNyBAQCB2b2lkIEpTVGVzdEVuYWJsZWRCeVNldHRpbmdQcm90b3R5cGU6OmZpCiAjaWYgRU5B
QkxFKFRFU1RfRkVBVFVSRSkKICAgICBpZiAoIWRvd25jYXN0PERvY3VtZW50Pihqc0Nhc3Q8SlNE
T01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KSktPnNldHRpbmdzKCkudGVzdFNldHRpbmdFbmFibGVkKCkpIHsKICAgICAgICAgaGFzRGlzYWJs
ZWRSdW50aW1lUHJvcGVydGllcyA9IHRydWU7Ci0gICAgICAgIGF1dG8gcHJvcGVydHlOYW1lID0g
SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIq
PigiZW5hYmxlZEJ5U2V0dGluZ09wZXJhdGlvbiIpLCBzdHJsZW4oImVuYWJsZWRCeVNldHRpbmdP
cGVyYXRpb24iKSk7CisgICAgICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJlbmFibGVkQnlTZXR0
aW5nT3BlcmF0aW9uIiksIHN0cmxlbigiZW5hYmxlZEJ5U2V0dGluZ09wZXJhdGlvbiIpKTsKICAg
ICAgICAgVk06OkRlbGV0ZVByb3BlcnR5TW9kZVNjb3BlIHNjb3BlKHZtLCBWTTo6RGVsZXRlUHJv
cGVydHlNb2RlOjpJZ25vcmVDb25maWd1cmFibGUpOwogICAgICAgICBKU09iamVjdDo6ZGVsZXRl
UHJvcGVydHkodGhpcywgZ2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKSwgcHJvcGVydHlOYW1l
KTsKICAgICB9CkBAIC0xNDEsNyArMTQxLDcgQEAgdm9pZCBKU1Rlc3RFbmFibGVkQnlTZXR0aW5n
UHJvdG90eXBlOjpmaQogI2lmIEVOQUJMRShURVNUX0ZFQVRVUkUpCiAgICAgaWYgKCFkb3duY2Fz
dDxEb2N1bWVudD4oanNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KCkpLT5z
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCkpLT5zZXR0aW5ncygpLnRlc3RTZXR0aW5nRW5hYmxlZCgp
KSB7CiAgICAgICAgIGhhc0Rpc2FibGVkUnVudGltZVByb3BlcnRpZXMgPSB0cnVlOwotICAgICAg
ICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCByZWludGVy
cHJldF9jYXN0PGNvbnN0IExDaGFyKj4oImVuYWJsZWRCeVNldHRpbmdBdHRyaWJ1dGUiKSwgc3Ry
bGVuKCJlbmFibGVkQnlTZXR0aW5nQXR0cmlidXRlIikpOworICAgICAgICBhdXRvIHByb3BlcnR5
TmFtZSA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
TENoYXIqPigiZW5hYmxlZEJ5U2V0dGluZ0F0dHJpYnV0ZSIpLCBzdHJsZW4oImVuYWJsZWRCeVNl
dHRpbmdBdHRyaWJ1dGUiKSk7CiAgICAgICAgIFZNOjpEZWxldGVQcm9wZXJ0eU1vZGVTY29wZSBz
Y29wZSh2bSwgVk06OkRlbGV0ZVByb3BlcnR5TW9kZTo6SWdub3JlQ29uZmlndXJhYmxlKTsKICAg
ICAgICAgSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KHRoaXMsIGdsb2JhbE9iamVjdCgpLT5nbG9i
YWxFeGVjKCksIHByb3BlcnR5TmFtZSk7CiAgICAgfQpAQCAtMjM0LDkgKzIzNCwxMCBAQCBFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RFbmFibGVkQnlTZXR0aW5nVGVzCiAKIHN0YXRpYyBpbmxpbmUgYm9v
bCBzZXRKU1Rlc3RFbmFibGVkQnlTZXR0aW5nVGVzdFN1Yk9iakVuYWJsZWRCeVNldHRpbmdDb25z
dHJ1Y3RvclNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RFbmFibGVkQnlTZXR0aW5nJiB0
aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAg
IFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAg
IFZNJiB2bSA9IHRocm93U2NvcGUudm0oKTsKICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBj
b25zdHJ1Y3Rvci4KLSAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qoc3RhdGUudm0oKSwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUudm0oKSwgcmVpbnRlcnByZXRfY2FzdDxjb25z
dCBMQ2hhcio+KCJUZXN0U3ViT2JqRW5hYmxlZEJ5U2V0dGluZyIpLCBzdHJsZW4oIlRlc3RTdWJP
YmpFbmFibGVkQnlTZXR0aW5nIikpLCB2YWx1ZSk7CisgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0
RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNv
bnN0IExDaGFyKj4oIlRlc3RTdWJPYmpFbmFibGVkQnlTZXR0aW5nIiksIHN0cmxlbigiVGVzdFN1
Yk9iakVuYWJsZWRCeVNldHRpbmciKSksIHZhbHVlKTsKIH0KIAogYm9vbCBzZXRKU1Rlc3RFbmFi
bGVkQnlTZXR0aW5nVGVzdFN1Yk9iakVuYWJsZWRCeVNldHRpbmdDb25zdHJ1Y3RvcihFeGVjU3Rh
dGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRWYWx1ZSkKQEAgLTI2NCw2ICsyNjUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RFbmFibGVk
QnlTZXR0aW5nRW5hCiAjaWYgRU5BQkxFKFRFU1RfRkVBVFVSRSkKIHN0YXRpYyBpbmxpbmUgYm9v
bCBzZXRKU1Rlc3RFbmFibGVkQnlTZXR0aW5nRW5hYmxlZEJ5U2V0dGluZ0F0dHJpYnV0ZVNldHRl
cihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RFbmFibGVkQnlTZXR0aW5nJiB0aGlzT2JqZWN0LCBK
U1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogeworICAgIFVOVVNFRF9QQVJB
TShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwg
PSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJ
RExET01TdHJpbmc+KHN0YXRlLCB2YWx1ZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RW5hYmxlZEZvckNvbnRleHQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFbmFibGVk
Rm9yQ29udGV4dC5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFbmFibGVkRm9yQ29udGV4dC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTg1LDcgKzg1LDcgQEAgdGVtcGxhdGU8PiBKU1ZhbHVlIEpTVGVzdEVuYWJsZWRG
b3JDb250ZQogdGVtcGxhdGU8PiB2b2lkIEpTVGVzdEVuYWJsZWRGb3JDb250ZXh0Q29uc3RydWN0
b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2Jh
bE9iamVjdCkKIHsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlw
ZSwgSlNUZXN0RW5hYmxlZEZvckNvbnRleHQ6OnByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KSwg
SlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1
dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwotICAgIHB1
dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKCZ2
bSwgU3RyaW5nKCJUZXN0RW5hYmxlZEZvckNvbnRleHQiX3MpKSwgSlNDOjpQcm9wZXJ0eUF0dHJp
YnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CisgICAg
cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmco
dm0sIFN0cmluZygiVGVzdEVuYWJsZWRGb3JDb250ZXh0Il9zKSksIEpTQzo6UHJvcGVydHlBdHRy
aWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwogICAg
IHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigwKSwgSlND
OjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpE
b250RW51bSk7CiB9CiAKQEAgLTE4NSw5ICsxODUsMTAgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0
RW5hYmxlZEZvckNvbnRleHRUZQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0RW5hYmxl
ZEZvckNvbnRleHRUZXN0U3ViT2JqRW5hYmxlZEZvckNvbnRleHRDb25zdHJ1Y3RvclNldHRlcihF
eGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RFbmFibGVkRm9yQ29udGV4dCYgdGhpc09iamVjdCwgSlNW
YWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBWTSYgdm0gPSB0aHJv
d1Njb3BlLnZtKCk7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCi0g
ICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHN0YXRlLnZtKCksIElkZW50aWZpZXI6OmZy
b21TdHJpbmcoJnN0YXRlLnZtKCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVz
dFN1Yk9iakVuYWJsZWRGb3JDb250ZXh0IiksIHN0cmxlbigiVGVzdFN1Yk9iakVuYWJsZWRGb3JD
b250ZXh0IikpLCB2YWx1ZSk7CisgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4o
IlRlc3RTdWJPYmpFbmFibGVkRm9yQ29udGV4dCIpLCBzdHJsZW4oIlRlc3RTdWJPYmpFbmFibGVk
Rm9yQ29udGV4dCIpKSwgdmFsdWUpOwogfQogCiBib29sIHNldEpTVGVzdEVuYWJsZWRGb3JDb250
ZXh0VGVzdFN1Yk9iakVuYWJsZWRGb3JDb250ZXh0Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0
ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZl
bnRDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50Q29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAyNDkx
MjgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZl
bnRDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1LDcgKzU1LDcgQEAgdGVtcGxh
dGU8PiBUZXN0RXZlbnRDb25zdHJ1Y3Rvcjo6SW5pdCBjbwogICAgIGlmIChpc051bGxPclVuZGVm
aW5lZCkKICAgICAgICAgYnViYmxlc1ZhbHVlID0ganNVbmRlZmluZWQoKTsKICAgICBlbHNlIHsK
LSAgICAgICAgYnViYmxlc1ZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKCZzdGF0ZSwgImJ1YmJsZXMiKSk7CisgICAgICAgIGJ1YmJsZXNWYWx1ZSA9IG9i
amVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImJ1YmJsZXMiKSk7
CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICB9CiAg
ICAgaWYgKCFidWJibGVzVmFsdWUuaXNVbmRlZmluZWQoKSkgewpAQCAtNjcsNyArNjcsNyBAQCB0
ZW1wbGF0ZTw+IFRlc3RFdmVudENvbnN0cnVjdG9yOjpJbml0IGNvCiAgICAgaWYgKGlzTnVsbE9y
VW5kZWZpbmVkKQogICAgICAgICBjYW5jZWxhYmxlVmFsdWUgPSBqc1VuZGVmaW5lZCgpOwogICAg
IGVsc2UgewotICAgICAgICBjYW5jZWxhYmxlVmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAiY2FuY2VsYWJsZSIpKTsKKyAgICAgICAgY2Fu
Y2VsYWJsZVZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KHZtLCAiY2FuY2VsYWJsZSIpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCB7IH0pOwogICAgIH0KICAgICBpZiAoIWNhbmNlbGFibGVWYWx1ZS5pc1VuZGVmaW5lZCgp
KSB7CkBAIC03OSw3ICs3OSw3IEBAIHRlbXBsYXRlPD4gVGVzdEV2ZW50Q29uc3RydWN0b3I6Oklu
aXQgY28KICAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQpCiAgICAgICAgIGNvbXBvc2VkVmFsdWUg
PSBqc1VuZGVmaW5lZCgpOwogICAgIGVsc2UgewotICAgICAgICBjb21wb3NlZFZhbHVlID0gb2Jq
ZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImNvbXBvc2Vk
IikpOworICAgICAgICBjb21wb3NlZFZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKHZtLCAiY29tcG9zZWQiKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICB9CiAgICAgaWYgKCFjb21wb3NlZFZhbHVlLmlz
VW5kZWZpbmVkKCkpIHsKQEAgLTkxLDcgKzkxLDcgQEAgdGVtcGxhdGU8PiBUZXN0RXZlbnRDb25z
dHJ1Y3Rvcjo6SW5pdCBjbwogICAgIGlmIChpc051bGxPclVuZGVmaW5lZCkKICAgICAgICAgYXR0
cjJWYWx1ZSA9IGpzVW5kZWZpbmVkKCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIGF0dHIyVmFsdWUg
PSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAiYXR0
cjIiKSk7CisgICAgICAgIGF0dHIyVmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcodm0sICJhdHRyMiIpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0KICAgICBpZiAoIWF0dHIyVmFsdWUuaXNVbmRlZmlu
ZWQoKSkgewpAQCAtMTA0LDcgKzEwNCw3IEBAIHRlbXBsYXRlPD4gVGVzdEV2ZW50Q29uc3RydWN0
b3I6OkluaXQgY28KICAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQpCiAgICAgICAgIGF0dHIzVmFs
dWUgPSBqc1VuZGVmaW5lZCgpOwogICAgIGVsc2UgewotICAgICAgICBhdHRyM1ZhbHVlID0gb2Jq
ZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImF0dHIzIikp
OworICAgICAgICBhdHRyM1ZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCAiYXR0cjMiKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgeyB9KTsKICAgICB9CiAgICAgaWYgKCFhdHRyM1ZhbHVlLmlzVW5kZWZpbmVkKCkp
IHsKQEAgLTE3OCw3ICsxNzgsNyBAQCB0ZW1wbGF0ZTw+IEpTVmFsdWUgSlNUZXN0RXZlbnRDb25z
dHJ1Y3RvCiB0ZW1wbGF0ZTw+IHZvaWQgSlNUZXN0RXZlbnRDb25zdHJ1Y3RvckNvbnN0cnVjdG9y
Ojppbml0aWFsaXplUHJvcGVydGllcyhWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxP
YmplY3QpCiB7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUs
IEpTVGVzdEV2ZW50Q29uc3RydWN0b3I6OnByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KSwgSlND
OjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6
OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwotICAgIHB1dERp
cmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKCZ2bSwg
U3RyaW5nKCJUZXN0RXZlbnRDb25zdHJ1Y3RvciJfcykpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRl
OjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKKyAgICBwdXRE
aXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZyh2bSwg
U3RyaW5nKCJUZXN0RXZlbnRDb25zdHJ1Y3RvciJfcykpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRl
OjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKICAgICBwdXRE
aXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMSksIEpTQzo6UHJv
cGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVu
dW0pOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0RXZlbnRUYXJnZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudFRhcmdldC5jcHAJKHJldmlzaW9uIDI0OTEy
OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVu
dFRhcmdldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3LDcgKzg3LDcgQEAgdGVtcGxhdGU8PiBK
U1ZhbHVlIEpTVGVzdEV2ZW50VGFyZ2V0Q29ucwogdGVtcGxhdGU8PiB2b2lkIEpTVGVzdEV2ZW50
VGFyZ2V0Q29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKFZNJiB2bSwgSlNET01HbG9i
YWxPYmplY3QmIGdsb2JhbE9iamVjdCkKIHsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5
TmFtZXMtPnByb3RvdHlwZSwgSlNUZXN0RXZlbnRUYXJnZXQ6OnByb3RvdHlwZSh2bSwgZ2xvYmFs
T2JqZWN0KSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IEpTQzo6UHJvcGVy
dHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0p
OwotICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFs
U3RyaW5nKCZ2bSwgU3RyaW5nKCJUZXN0RXZlbnRUYXJnZXQiX3MpKSwgSlNDOjpQcm9wZXJ0eUF0
dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7Cisg
ICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJp
bmcodm0sIFN0cmluZygiVGVzdEV2ZW50VGFyZ2V0Il9zKSksIEpTQzo6UHJvcGVydHlBdHRyaWJ1
dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwogICAgIHB1
dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigwKSwgSlNDOjpQ
cm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250
RW51bSk7CiB9CiAKQEAgLTE2Nyw2ICsxNjcsNyBAQCBib29sIEpTVGVzdEV2ZW50VGFyZ2V0Ojpn
ZXRPd25Qcm9wZXJ0eVNsCiAKIGJvb2wgSlNUZXN0RXZlbnRUYXJnZXQ6OmdldE93blByb3BlcnR5
U2xvdEJ5SW5kZXgoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBzdGF0ZSwgdW5zaWduZWQg
aW5kZXgsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKKyAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsK
ICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdEV2ZW50VGFyZ2V0Kj4ob2JqZWN0
KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAg
ICAgaWYgKExJS0VMWShpbmRleCA8PSBNQVhfQVJSQVlfSU5ERVgpKSB7CkBAIC0xNzcsNyArMTc4
LDcgQEAgYm9vbCBKU1Rlc3RFdmVudFRhcmdldDo6Z2V0T3duUHJvcGVydHlTbAogICAgICAgICB9
CiAgICAgICAgIHJldHVybiBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChvYmpl
Y3QsIHN0YXRlLCBpbmRleCwgc2xvdCk7CiAgICAgfQotICAgIGF1dG8gcHJvcGVydHlOYW1lID0g
SWRlbnRpZmllcjo6ZnJvbShzdGF0ZSwgaW5kZXgpOworICAgIGF1dG8gcHJvcGVydHlOYW1lID0g
SWRlbnRpZmllcjo6ZnJvbSh2bSwgaW5kZXgpOwogICAgIHVzaW5nIEdldHRlcklETFR5cGUgPSBJ
RExJbnRlcmZhY2U8Tm9kZT47CiAgICAgYXV0byBnZXR0ZXJGdW5jdG9yID0gW10gKGF1dG8mIHRo
aXNPYmplY3QsIGF1dG8gcHJvcGVydHlOYW1lKSAtPiBPcHRpb25hbDx0eXBlbmFtZSBHZXR0ZXJJ
RExUeXBlOjpJbXBsZW1lbnRhdGlvblR5cGU+IHsKICAgICAgICAgYXV0byByZXN1bHQgPSB0aGlz
T2JqZWN0LndyYXBwZWQoKS5uYW1lZEl0ZW0ocHJvcGVydHlOYW1lVG9BdG9tU3RyaW5nKHByb3Bl
cnR5TmFtZSkpOwpAQCAtMTk1LDEyICsxOTYsMTMgQEAgYm9vbCBKU1Rlc3RFdmVudFRhcmdldDo6
Z2V0T3duUHJvcGVydHlTbAogCiB2b2lkIEpTVGVzdEV2ZW50VGFyZ2V0OjpnZXRPd25Qcm9wZXJ0
eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogc3RhdGUsIFByb3BlcnR5TmFtZUFy
cmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKKyAgICBWTSYgdm0g
PSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdEV2ZW50
VGFyZ2V0Kj4ob2JqZWN0KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKG9iamVjdCwg
aW5mbygpKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwLCBjb3VudCA9IHRoaXNPYmplY3QtPndy
YXBwZWQoKS5sZW5ndGgoKTsgaSA8IGNvdW50OyArK2kpCi0gICAgICAgIHByb3BlcnR5TmFtZXMu
YWRkKElkZW50aWZpZXI6OmZyb20oc3RhdGUsIGkpKTsKKyAgICAgICAgcHJvcGVydHlOYW1lcy5h
ZGQoSWRlbnRpZmllcjo6ZnJvbSh2bSwgaSkpOwogICAgIGZvciAoYXV0byYgcHJvcGVydHlOYW1l
IDogdGhpc09iamVjdC0+d3JhcHBlZCgpLnN1cHBvcnRlZFByb3BlcnR5TmFtZXMoKSkKLSAgICAg
ICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhzdGF0ZSwgcHJvcGVy
dHlOYW1lKSk7CisgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb21TdHJp
bmcodm0sIHByb3BlcnR5TmFtZSkpOwogICAgIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVz
KG9iamVjdCwgc3RhdGUsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwogfQogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXhjZXB0aW9uLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
RXhjZXB0aW9uLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV4Y2VwdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTgxLDcgKzgxLDcgQEAgdGVtcGxhdGU8PiBKU1ZhbHVlIEpTVGVzdEV4Y2VwdGlvbkNvbnN0cgog
dGVtcGxhdGU8PiB2b2lkIEpTVGVzdEV4Y2VwdGlvbkNvbnN0cnVjdG9yOjppbml0aWFsaXplUHJv
cGVydGllcyhWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCiB7CiAgICAg
cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdEV4Y2VwdGlv
bjo6cHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpE
b250RGVsZXRlIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3Bl
cnR5QXR0cmlidXRlOjpEb250RW51bSk7Ci0gICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5h
bWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcoJnZtLCBTdHJpbmcoIlRlc3RFeGNlcHRpb24i
X3MpKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0
cmlidXRlOjpEb250RW51bSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5u
YW1lLCBqc05vbnRyaXZpYWxTdHJpbmcodm0sIFN0cmluZygiVGVzdEV4Y2VwdGlvbiJfcykpLCBK
U0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6
OkRvbnRFbnVtKTsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwg
anNOdW1iZXIoMCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9w
ZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdl
bmVyYXRlSXNSZWFjaGFibGUuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTgxLDcgKzgxLDcgQEAgdGVtcGxhdGU8PiBKU1ZhbHVlIEpTVGVz
dEdlbmVyYXRlSXNSZWFjaAogdGVtcGxhdGU8PiB2b2lkIEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFi
bGVDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMoVk0mIHZtLCBKU0RPTUdsb2JhbE9i
amVjdCYgZ2xvYmFsT2JqZWN0KQogewogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1l
cy0+cHJvdG90eXBlLCBKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlOjpwcm90b3R5cGUodm0sIGds
b2JhbE9iamVjdCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUgfCBKU0M6OlBy
b3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRF
bnVtKTsKLSAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJp
dmlhbFN0cmluZygmdm0sIFN0cmluZygiVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUiX3MpKSwgSlND
OjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpE
b250RW51bSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05v
bnRyaXZpYWxTdHJpbmcodm0sIFN0cmluZygiVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUiX3MpKSwg
SlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRl
OjpEb250RW51bSk7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgs
IGpzTnVtYmVyKDApLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJv
cGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKIH0KIApAQCAtMTA0LDcgKzEwNCw3IEBAIHZvaWQg
SlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZVByb3RvdHlwZToKICAgICBib29sIGhhc0Rpc2FibGVk
UnVudGltZVByb3BlcnRpZXMgPSBmYWxzZTsKICAgICBpZiAoIWpzQ2FzdDxKU0RPTUdsb2JhbE9i
amVjdCo+KGdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5pc1NlY3Vy
ZUNvbnRleHQoKSkgewogICAgICAgICBoYXNEaXNhYmxlZFJ1bnRpbWVQcm9wZXJ0aWVzID0gdHJ1
ZTsKLSAgICAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2
bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJhU2VjcmV0QXR0cmlidXRlIiksIHN0
cmxlbigiYVNlY3JldEF0dHJpYnV0ZSIpKTsKKyAgICAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4o
ImFTZWNyZXRBdHRyaWJ1dGUiKSwgc3RybGVuKCJhU2VjcmV0QXR0cmlidXRlIikpOwogICAgICAg
ICBWTTo6RGVsZXRlUHJvcGVydHlNb2RlU2NvcGUgc2NvcGUodm0sIFZNOjpEZWxldGVQcm9wZXJ0
eU1vZGU6Oklnbm9yZUNvbmZpZ3VyYWJsZSk7CiAgICAgICAgIEpTT2JqZWN0OjpkZWxldGVQcm9w
ZXJ0eSh0aGlzLCBnbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpLCBwcm9wZXJ0eU5hbWUpOwog
ICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RHbG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RHbG9iYWxPYmplY3QuY3BwCShyZXZpc2lvbiAyNDkxMjgp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2xvYmFs
T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjY2LDcgKzY2Niw3IEBAIHRlbXBsYXRlPD4g
SlNWYWx1ZSBKU1Rlc3RHbG9iYWxPYmplY3RDb24KIHRlbXBsYXRlPD4gdm9pZCBKU1Rlc3RHbG9i
YWxPYmplY3RDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMoVk0mIHZtLCBKU0RPTUds
b2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQogewogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVy
dHlOYW1lcy0+cHJvdG90eXBlLCBnbG9iYWxPYmplY3QuZ2V0UHJvdG90eXBlRGlyZWN0KHZtKSwg
SlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1
dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwotICAgIHB1
dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKCZ2
bSwgU3RyaW5nKCJUZXN0R2xvYmFsT2JqZWN0Il9zKSksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6
OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOworICAgIHB1dERp
cmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKHZtLCBT
dHJpbmcoIlRlc3RHbG9iYWxPYmplY3QiX3MpKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVh
ZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CiAgICAgcHV0RGlyZWN0
KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDApLCBKU0M6OlByb3BlcnR5
QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsK
ICAgICByZWlmeVN0YXRpY1Byb3BlcnRpZXModm0sIEpTVGVzdEdsb2JhbE9iamVjdDo6aW5mbygp
LCBKU1Rlc3RHbG9iYWxPYmplY3RDb25zdHJ1Y3RvclRhYmxlVmFsdWVzLCAqdGhpcyk7CiB9CkBA
IC04MDMsNiArODAzLDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0UmVndWxh
cgogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0UmVndWxhckF0dHJp
YnV0ZVNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmpl
Y3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CisgICAgVU5VU0VE
X1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYg
aW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252
ZXJ0PElETERPTVN0cmluZz4oc3RhdGUsIHZhbHVlKTsKQEAgLTgzNCw2ICs4MzUsNyBAQCBFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RQdWJsaWNBCiAKIHN0YXRpYyBpbmxpbmUgYm9v
bCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RQdWJsaWNBbmRQcml2YXRlQXR0cmlidXRlU2V0dGVyKEV4
ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2
YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUp
OwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09i
amVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3Ry
aW5nPihzdGF0ZSwgdmFsdWUpOwpAQCAtODY5LDYgKzg3MSw3IEBAIEVuY29kZWRKU1ZhbHVlIGpz
VGVzdEdsb2JhbE9iamVjdFB1YmxpY0EKICNpZiBFTkFCTEUoVEVTVF9GRUFUVVJFKQogc3RhdGlj
IGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFB1YmxpY0FuZFByaXZhdGVDb25kaXRp
b25hbEF0dHJpYnV0ZVNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RHbG9iYWxPYmplY3Qm
IHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Cisg
ICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAg
ICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFs
dWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oc3RhdGUsIHZhbHVlKTsKQEAgLTkwNiw2ICs5MDks
NyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RFbmFibGVkCiAjaWYgRU5BQkxF
KFRFU1RfRkVBVFVSRSkKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RF
bmFibGVkQXRSdW50aW1lQXR0cmlidXRlU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEds
b2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dT
Y29wZSkKIHsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0
byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPihzdGF0ZSwgdmFsdWUpOwpAQCAt
OTM3LDkgKzk0MSwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0Q0VS
CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0Q0VSZWFjdGlv
bnNDb25zdHJ1Y3RvclNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RHbG9iYWxPYmplY3Qm
IHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0g
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Cisg
ICAgVk0mIHZtID0gdGhyb3dTY29wZS52bSgpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWlu
IGNvbnN0cnVjdG9yLgotICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdChzdGF0ZS52bSgp
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZS52bSgpLCByZWludGVycHJldF9jYXN0PGNv
bnN0IExDaGFyKj4oIlRlc3RDRVJlYWN0aW9ucyIpLCBzdHJsZW4oIlRlc3RDRVJlYWN0aW9ucyIp
KSwgdmFsdWUpOworICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0Q0VS
ZWFjdGlvbnMiKSwgc3RybGVuKCJUZXN0Q0VSZWFjdGlvbnMiKSksIHZhbHVlKTsKIH0KIAogYm9v
bCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0Q0VSZWFjdGlvbnNDb25zdHJ1Y3RvcihFeGVjU3Rh
dGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRWYWx1ZSkKQEAgLTk2MSw5ICs5NjYsMTAgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFs
T2JqZWN0VGVzdENFUgogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0
VGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXJDb25zdHJ1Y3RvclNldHRlcihFeGVjU3RhdGUmIHN0
YXRlLCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93
U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAg
IFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVk0mIHZtID0gdGhyb3dTY29wZS52bSgpOwogICAg
IC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgotICAgIHJldHVybiB0aGlzT2Jq
ZWN0LnB1dERpcmVjdChzdGF0ZS52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZS52
bSgpLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RDRVJlYWN0aW9uc1N0cmlu
Z2lmaWVyIiksIHN0cmxlbigiVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXIiKSksIHZhbHVlKTsK
KyAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJp
bmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdENFUmVhY3Rpb25zU3Ry
aW5naWZpZXIiKSwgc3RybGVuKCJUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllciIpKSwgdmFsdWUp
OwogfQogCiBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RDRVJlYWN0aW9uc1N0cmluZ2lm
aWVyQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCkBAIC05ODUsOSArOTkxLDEwIEBAIEVuY29k
ZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RDYWwKIAogc3RhdGljIGlubGluZSBib29s
IHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RDYWxsVHJhY2VyQ29uc3RydWN0b3JTZXR0ZXIoRXhl
Y1N0YXRlJiBzdGF0ZSwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZh
bHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFZNJiB2bSA9IHRocm93U2NvcGUu
dm0oKTsKICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KLSAgICByZXR1
cm4gdGhpc09iamVjdC5wdXREaXJlY3Qoc3RhdGUudm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zygmc3RhdGUudm0oKSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0Q2FsbFRy
YWNlciIpLCBzdHJsZW4oIlRlc3RDYWxsVHJhY2VyIikpLCB2YWx1ZSk7CisgICAgcmV0dXJuIHRo
aXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVy
cHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RDYWxsVHJhY2VyIiksIHN0cmxlbigiVGVzdENh
bGxUcmFjZXIiKSksIHZhbHVlKTsKIH0KIAogYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0
Q2FsbFRyYWNlckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQpAQCAtMTAxMyw5ICsxMDIwLDEw
IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RDYWwKICNpZiBFTkFCTEUo
VEVTVF9DT05ESVRJT05BTCkKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmpl
Y3RUZXN0Q2FsbGJhY2tJbnRlcmZhY2VDb25zdHJ1Y3RvclNldHRlcihFeGVjU3RhdGUmIHN0YXRl
LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2Nv
cGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIFVO
VVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVk0mIHZtID0gdGhyb3dTY29wZS52bSgpOwogICAgIC8v
IFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgotICAgIHJldHVybiB0aGlzT2JqZWN0
LnB1dERpcmVjdChzdGF0ZS52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZS52bSgp
LCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RDYWxsYmFja0ludGVyZmFjZSIp
LCBzdHJsZW4oIlRlc3RDYWxsYmFja0ludGVyZmFjZSIpKSwgdmFsdWUpOworICAgIHJldHVybiB0
aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRl
cnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0Q2FsbGJhY2tJbnRlcmZhY2UiKSwgc3RybGVu
KCJUZXN0Q2FsbGJhY2tJbnRlcmZhY2UiKSksIHZhbHVlKTsKIH0KIAogYm9vbCBzZXRKU1Rlc3RH
bG9iYWxPYmplY3RUZXN0Q2FsbGJhY2tJbnRlcmZhY2VDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0
YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1
ZSkKQEAgLTEwMzksOSArMTA0NywxMCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmpl
Y3RUZXN0Q2xhCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0
Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JDb25zdHJ1Y3RvclNldHRlcihFeGVjU3RhdGUm
IHN0YXRlLCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRo
cm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwor
ICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVk0mIHZtID0gdGhyb3dTY29wZS52bSgpOwog
ICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgotICAgIHJldHVybiB0aGlz
T2JqZWN0LnB1dERpcmVjdChzdGF0ZS52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0
ZS52bSgpLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RDbGFzc1dpdGhKU0J1
aWx0aW5Db25zdHJ1Y3RvciIpLCBzdHJsZW4oIlRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1
Y3RvciIpKSwgdmFsdWUpOworICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJU
ZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IiKSwgc3RybGVuKCJUZXN0Q2xhc3NXaXRo
SlNCdWlsdGluQ29uc3RydWN0b3IiKSksIHZhbHVlKTsKIH0KIAogYm9vbCBzZXRKU1Rlc3RHbG9i
YWxPYmplY3RUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JDb25zdHJ1Y3RvcihFeGVj
U3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRWYWx1ZSkKQEAgLTEwNjMsOSArMTA3MiwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RH
bG9iYWxPYmplY3RUZXN0RE9NCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxP
YmplY3RUZXN0RE9NSklUQ29uc3RydWN0b3JTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0
R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBVTlVTRURfUEFS
QU0oc3RhdGUpOworICAgIFZNJiB2bSA9IHRocm93U2NvcGUudm0oKTsKICAgICAvLyBTaGFkb3dp
bmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KLSAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJl
Y3Qoc3RhdGUudm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUudm0oKSwgcmVpbnRl
cnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0RE9NSklUIiksIHN0cmxlbigiVGVzdERPTUpJ
VCIpKSwgdmFsdWUpOworICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0
RE9NSklUIiksIHN0cmxlbigiVGVzdERPTUpJVCIpKSwgdmFsdWUpOwogfQogCiBib29sIHNldEpT
VGVzdEdsb2JhbE9iamVjdFRlc3RET01KSVRDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKQEAg
LTEwODcsOSArMTA5NywxMCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0
RG9tCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0RG9tYWlu
U2VjdXJpdHlDb25zdHJ1Y3RvclNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RHbG9iYWxP
YmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUp
CiB7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIFVOVVNFRF9QQVJBTShzdGF0
ZSk7CisgICAgVk0mIHZtID0gdGhyb3dTY29wZS52bSgpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1
aWx0LWluIGNvbnN0cnVjdG9yLgotICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdChzdGF0
ZS52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZS52bSgpLCByZWludGVycHJldF9j
YXN0PGNvbnN0IExDaGFyKj4oIlRlc3REb21haW5TZWN1cml0eSIpLCBzdHJsZW4oIlRlc3REb21h
aW5TZWN1cml0eSIpKSwgdmFsdWUpOworICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2
bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hh
cio+KCJUZXN0RG9tYWluU2VjdXJpdHkiKSwgc3RybGVuKCJUZXN0RG9tYWluU2VjdXJpdHkiKSks
IHZhbHVlKTsKIH0KIAogYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0RG9tYWluU2VjdXJp
dHlDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKQEAgLTExMTEsOSArMTEyMiwxMCBAQCBFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0RW5hCiAKIHN0YXRpYyBpbmxpbmUgYm9v
bCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0RW5hYmxlZEJ5U2V0dGluZ0NvbnN0cnVjdG9yU2V0
dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNW
YWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBWTSYgdm0gPSB0aHJv
d1Njb3BlLnZtKCk7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCi0g
ICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHN0YXRlLnZtKCksIElkZW50aWZpZXI6OmZy
b21TdHJpbmcoJnN0YXRlLnZtKCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVz
dEVuYWJsZWRCeVNldHRpbmciKSwgc3RybGVuKCJUZXN0RW5hYmxlZEJ5U2V0dGluZyIpKSwgdmFs
dWUpOworICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0RW5hYmxlZEJ5
U2V0dGluZyIpLCBzdHJsZW4oIlRlc3RFbmFibGVkQnlTZXR0aW5nIikpLCB2YWx1ZSk7CiB9CiAK
IGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdEVuYWJsZWRCeVNldHRpbmdDb25zdHJ1Y3Rv
cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRWYWx1ZSkKQEAgLTExMzUsOSArMTE0NywxMCBAQCBFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RHbG9iYWxPYmplY3RUZXN0RW5hCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RH
bG9iYWxPYmplY3RUZXN0RW5hYmxlZEZvckNvbnRleHRDb25zdHJ1Y3RvclNldHRlcihFeGVjU3Rh
dGUmIHN0YXRlLCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUs
IFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVk0mIHZtID0gdGhyb3dTY29wZS52bSgp
OwogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgotICAgIHJldHVybiB0
aGlzT2JqZWN0LnB1dERpcmVjdChzdGF0ZS52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZz
dGF0ZS52bSgpLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RFbmFibGVkRm9y
Q29udGV4dCIpLCBzdHJsZW4oIlRlc3RFbmFibGVkRm9yQ29udGV4dCIpKSwgdmFsdWUpOworICAg
IHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2
bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0RW5hYmxlZEZvckNvbnRleHQi
KSwgc3RybGVuKCJUZXN0RW5hYmxlZEZvckNvbnRleHQiKSksIHZhbHVlKTsKIH0KIAogYm9vbCBz
ZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0RW5hYmxlZEZvckNvbnRleHRDb25zdHJ1Y3RvcihFeGVj
U3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRWYWx1ZSkKQEAgLTExNTksOSArMTE3MiwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RH
bG9iYWxPYmplY3RUZXN0RXZlCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxP
YmplY3RUZXN0RXZlbnRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yU2V0dGVyKEV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dT
Y29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAg
VU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBWTSYgdm0gPSB0aHJvd1Njb3BlLnZtKCk7CiAgICAg
Ly8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCi0gICAgcmV0dXJuIHRoaXNPYmpl
Y3QucHV0RGlyZWN0KHN0YXRlLnZtKCksIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLnZt
KCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdEV2ZW50Q29uc3RydWN0b3Ii
KSwgc3RybGVuKCJUZXN0RXZlbnRDb25zdHJ1Y3RvciIpKSwgdmFsdWUpOworICAgIHJldHVybiB0
aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRl
cnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0RXZlbnRDb25zdHJ1Y3RvciIpLCBzdHJsZW4o
IlRlc3RFdmVudENvbnN0cnVjdG9yIikpLCB2YWx1ZSk7CiB9CiAKIGJvb2wgc2V0SlNUZXN0R2xv
YmFsT2JqZWN0VGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRl
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkK
QEAgLTExODMsOSArMTE5NywxMCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RU
ZXN0RXZlCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0RXZl
bnRUYXJnZXRDb25zdHJ1Y3RvclNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RHbG9iYWxP
YmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUp
CiB7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIFVOVVNFRF9QQVJBTShzdGF0
ZSk7CisgICAgVk0mIHZtID0gdGhyb3dTY29wZS52bSgpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1
aWx0LWluIGNvbnN0cnVjdG9yLgotICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdChzdGF0
ZS52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZS52bSgpLCByZWludGVycHJldF9j
YXN0PGNvbnN0IExDaGFyKj4oIlRlc3RFdmVudFRhcmdldCIpLCBzdHJsZW4oIlRlc3RFdmVudFRh
cmdldCIpKSwgdmFsdWUpOworICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJU
ZXN0RXZlbnRUYXJnZXQiKSwgc3RybGVuKCJUZXN0RXZlbnRUYXJnZXQiKSksIHZhbHVlKTsKIH0K
IAogYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0RXZlbnRUYXJnZXRDb25zdHJ1Y3RvcihF
eGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRWYWx1ZSkKQEAgLTEyMDcsOSArMTIyMiwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RHbG9iYWxPYmplY3RUZXN0RXhjCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9i
YWxPYmplY3RUZXN0RXhjZXB0aW9uQ29uc3RydWN0b3JTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwg
SlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBVTlVT
RURfUEFSQU0oc3RhdGUpOworICAgIFZNJiB2bSA9IHRocm93U2NvcGUudm0oKTsKICAgICAvLyBT
aGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KLSAgICByZXR1cm4gdGhpc09iamVjdC5w
dXREaXJlY3Qoc3RhdGUudm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUudm0oKSwg
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0RXhjZXB0aW9uIiksIHN0cmxlbigi
VGVzdEV4Y2VwdGlvbiIpKSwgdmFsdWUpOworICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVj
dCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBM
Q2hhcio+KCJUZXN0RXhjZXB0aW9uIiksIHN0cmxlbigiVGVzdEV4Y2VwdGlvbiIpKSwgdmFsdWUp
OwogfQogCiBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RFeGNlcHRpb25Db25zdHJ1Y3Rv
cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRWYWx1ZSkKQEAgLTEyMzEsOSArMTI0NywxMCBAQCBFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RHbG9iYWxPYmplY3RUZXN0R2VuCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RH
bG9iYWxPYmplY3RUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZUNvbnN0cnVjdG9yU2V0dGVyKEV4ZWNT
dGF0ZSYgc3RhdGUsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1
ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBWTSYgdm0gPSB0aHJvd1Njb3BlLnZt
KCk7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCi0gICAgcmV0dXJu
IHRoaXNPYmplY3QucHV0RGlyZWN0KHN0YXRlLnZtKCksIElkZW50aWZpZXI6OmZyb21TdHJpbmco
JnN0YXRlLnZtKCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdEdlbmVyYXRl
SXNSZWFjaGFibGUiKSwgc3RybGVuKCJUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZSIpKSwgdmFsdWUp
OworICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0R2VuZXJhdGVJc1Jl
YWNoYWJsZSIpLCBzdHJsZW4oIlRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlIikpLCB2YWx1ZSk7CiB9
CiAKIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdEdlbmVyYXRlSXNSZWFjaGFibGVDb25z
dHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKQEAgLTEyNTUsOSArMTI3MiwxMCBAQCBFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0R2xvCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRK
U1Rlc3RHbG9iYWxPYmplY3RUZXN0R2xvYmFsT2JqZWN0Q29uc3RydWN0b3JTZXR0ZXIoRXhlY1N0
YXRlJiBzdGF0ZSwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVl
LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFZNJiB2bSA9IHRocm93U2NvcGUudm0o
KTsKICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KLSAgICByZXR1cm4g
dGhpc09iamVjdC5wdXREaXJlY3Qoc3RhdGUudm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygm
c3RhdGUudm0oKSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0R2xvYmFsT2Jq
ZWN0IiksIHN0cmxlbigiVGVzdEdsb2JhbE9iamVjdCIpKSwgdmFsdWUpOworICAgIHJldHVybiB0
aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRl
cnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0R2xvYmFsT2JqZWN0IiksIHN0cmxlbigiVGVz
dEdsb2JhbE9iamVjdCIpKSwgdmFsdWUpOwogfQogCiBib29sIHNldEpTVGVzdEdsb2JhbE9iamVj
dFRlc3RHbG9iYWxPYmplY3RDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKQEAgLTEyNzksOSAr
MTI5NywxMCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0SW5kCiAKIHN0
YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0SW5kZXhlZFNldHRlck5v
SWRlbnRpZmllckNvbnN0cnVjdG9yU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEdsb2Jh
bE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29w
ZSkKIHsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgVU5VU0VEX1BBUkFNKHN0
YXRlKTsKKyAgICBWTSYgdm0gPSB0aHJvd1Njb3BlLnZtKCk7CiAgICAgLy8gU2hhZG93aW5nIGEg
YnVpbHQtaW4gY29uc3RydWN0b3IuCi0gICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHN0
YXRlLnZtKCksIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLnZtKCksIHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIiKSwgc3Ry
bGVuKCJUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllciIpKSwgdmFsdWUpOworICAgIHJldHVy
biB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVp
bnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmll
ciIpLCBzdHJsZW4oIlRlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyIikpLCB2YWx1ZSk7CiB9
CiAKIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZp
ZXJDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKQEAgLTEzMDMsOSArMTMyMiwxMCBAQCBFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0SW5kCiAKIHN0YXRpYyBpbmxpbmUgYm9v
bCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9u
Q29uc3RydWN0b3JTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0
aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAg
IFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAg
IFZNJiB2bSA9IHRocm93U2NvcGUudm0oKTsKICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBj
b25zdHJ1Y3Rvci4KLSAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qoc3RhdGUudm0oKSwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUudm0oKSwgcmVpbnRlcnByZXRfY2FzdDxjb25z
dCBMQ2hhcio+KCJUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uIiksIHN0cmxlbigi
VGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbiIpKSwgdmFsdWUpOworICAgIHJldHVy
biB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVp
bnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhj
ZXB0aW9uIiksIHN0cmxlbigiVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbiIpKSwg
dmFsdWUpOwogfQogCiBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RJbmRleGVkU2V0dGVy
VGhyb3dpbmdFeGNlcHRpb25Db25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKQEAgLTEzMjcsOSAr
MTM0NywxMCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0SW5kCiAKIHN0
YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0SW5kZXhlZFNldHRlcldp
dGhJZGVudGlmaWVyQ29uc3RydWN0b3JTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0R2xv
YmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Nj
b3BlKQogewotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBVTlVTRURfUEFSQU0o
c3RhdGUpOworICAgIFZNJiB2bSA9IHRocm93U2NvcGUudm0oKTsKICAgICAvLyBTaGFkb3dpbmcg
YSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KLSAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qo
c3RhdGUudm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUudm0oKSwgcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyIiks
IHN0cmxlbigiVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllciIpKSwgdmFsdWUpOworICAg
IHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2
bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0SW5kZXhlZFNldHRlcldpdGhJ
ZGVudGlmaWVyIiksIHN0cmxlbigiVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllciIpKSwg
dmFsdWUpOwogfQogCiBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RJbmRleGVkU2V0dGVy
V2l0aElkZW50aWZpZXJDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKQEAgLTEzNTUsOSArMTM3
NiwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0SW50CiAjaWYgRU5B
QkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24yKQogc3RhdGljIGlubGluZSBib29s
IHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvclNldHRlcihFeGVj
U3RhdGUmIHN0YXRlLCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFs
dWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVk0mIHZtID0gdGhyb3dTY29wZS52
bSgpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgotICAgIHJldHVy
biB0aGlzT2JqZWN0LnB1dERpcmVjdChzdGF0ZS52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KCZzdGF0ZS52bSgpLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RJbnRlcmZh
Y2UiKSwgc3RybGVuKCJUZXN0SW50ZXJmYWNlIikpLCB2YWx1ZSk7CisgICAgcmV0dXJuIHRoaXNP
YmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJl
dF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RJbnRlcmZhY2UiKSwgc3RybGVuKCJUZXN0SW50ZXJm
YWNlIikpLCB2YWx1ZSk7CiB9CiAKIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdEludGVy
ZmFjZUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQpAQCAtMTM4MSw5ICsxNDAzLDEwIEBAIEVu
Y29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RJbnQKIAogc3RhdGljIGlubGluZSBi
b29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZUNv
bnN0cnVjdG9yU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhp
c09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBW
TSYgdm0gPSB0aHJvd1Njb3BlLnZtKCk7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29u
c3RydWN0b3IuCi0gICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHN0YXRlLnZtKCksIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLnZtKCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
TENoYXIqPigiVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlIiksIHN0cmxlbigiVGVzdElu
dGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlIikpLCB2YWx1ZSk7CisgICAgcmV0dXJuIHRoaXNPYmpl
Y3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9j
YXN0PGNvbnN0IExDaGFyKj4oIlRlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZSIpLCBzdHJs
ZW4oIlRlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZSIpKSwgdmFsdWUpOwogfQogCiBib29s
IHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZUNvbnN0
cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQpAQCAtMTQwNSw5ICsxNDI4LDEwIEBAIEVuY29kZWRKU1Zh
bHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RJdGUKIAogc3RhdGljIGlubGluZSBib29sIHNldEpT
VGVzdEdsb2JhbE9iamVjdFRlc3RJdGVyYWJsZUNvbnN0cnVjdG9yU2V0dGVyKEV4ZWNTdGF0ZSYg
c3RhdGUsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhy
b3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Cisg
ICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBWTSYgdm0gPSB0aHJvd1Njb3BlLnZtKCk7CiAg
ICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCi0gICAgcmV0dXJuIHRoaXNP
YmplY3QucHV0RGlyZWN0KHN0YXRlLnZtKCksIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRl
LnZtKCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdEl0ZXJhYmxlIiksIHN0
cmxlbigiVGVzdEl0ZXJhYmxlIikpLCB2YWx1ZSk7CisgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0
RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNv
bnN0IExDaGFyKj4oIlRlc3RJdGVyYWJsZSIpLCBzdHJsZW4oIlRlc3RJdGVyYWJsZSIpKSwgdmFs
dWUpOwogfQogCiBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RJdGVyYWJsZUNvbnN0cnVj
dG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZFZhbHVlKQpAQCAtMTQyOSw5ICsxNDUzLDEwIEBAIEVuY29kZWRKU1ZhbHVl
IGpzVGVzdEdsb2JhbE9iamVjdFRlc3RKU0IKIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVz
dEdsb2JhbE9iamVjdFRlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvckNvbnN0cnVjdG9yU2V0dGVyKEV4
ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2
YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBWTSYgdm0gPSB0aHJvd1Njb3Bl
LnZtKCk7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCi0gICAgcmV0
dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHN0YXRlLnZtKCksIElkZW50aWZpZXI6OmZyb21TdHJp
bmcoJnN0YXRlLnZtKCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdEpTQnVp
bHRpbkNvbnN0cnVjdG9yIiksIHN0cmxlbigiVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yIikpLCB2
YWx1ZSk7CisgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RKU0J1aWx0
aW5Db25zdHJ1Y3RvciIpLCBzdHJsZW4oIlRlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvciIpKSwgdmFs
dWUpOwogfQogCiBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RKU0J1aWx0aW5Db25zdHJ1
Y3RvckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQpAQCAtMTQ1Myw5ICsxNDc4LDEwIEBAIEVu
Y29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RNYXAKIAogc3RhdGljIGlubGluZSBi
b29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RNYXBMaWtlQ29uc3RydWN0b3JTZXR0ZXIoRXhl
Y1N0YXRlJiBzdGF0ZSwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZh
bHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFZNJiB2bSA9IHRocm93U2NvcGUu
dm0oKTsKICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KLSAgICByZXR1
cm4gdGhpc09iamVjdC5wdXREaXJlY3Qoc3RhdGUudm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zygmc3RhdGUudm0oKSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0TWFwTGlr
ZSIpLCBzdHJsZW4oIlRlc3RNYXBMaWtlIikpLCB2YWx1ZSk7CisgICAgcmV0dXJuIHRoaXNPYmpl
Y3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9j
YXN0PGNvbnN0IExDaGFyKj4oIlRlc3RNYXBMaWtlIiksIHN0cmxlbigiVGVzdE1hcExpa2UiKSks
IHZhbHVlKTsKIH0KIAogYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TWFwTGlrZUNvbnN0
cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQpAQCAtMTQ3Nyw5ICsxNTAzLDEwIEBAIEVuY29kZWRKU1Zh
bHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RNZWQKIAogc3RhdGljIGlubGluZSBib29sIHNldEpT
VGVzdEdsb2JhbE9iamVjdFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyQ29uc3RydWN0b3JTZXR0
ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1Zh
bHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFZNJiB2bSA9IHRocm93
U2NvcGUudm0oKTsKICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KLSAg
ICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qoc3RhdGUudm0oKSwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZygmc3RhdGUudm0oKSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0
TWVkaWFRdWVyeUxpc3RMaXN0ZW5lciIpLCBzdHJsZW4oIlRlc3RNZWRpYVF1ZXJ5TGlzdExpc3Rl
bmVyIikpLCB2YWx1ZSk7CisgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRl
c3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyIiksIHN0cmxlbigiVGVzdE1lZGlhUXVlcnlMaXN0TGlz
dGVuZXIiKSksIHZhbHVlKTsKIH0KIAogYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TWVk
aWFRdWVyeUxpc3RMaXN0ZW5lckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQpAQCAtMTUwMSw5
ICsxNTI4LDEwIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3ROYW0KIAog
c3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZEFuZEluZGV4
ZWRTZXR0ZXJOb0lkZW50aWZpZXJDb25zdHJ1Y3RvclNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBK
U1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUm
IHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIFVOVVNF
RF9QQVJBTShzdGF0ZSk7CisgICAgVk0mIHZtID0gdGhyb3dTY29wZS52bSgpOwogICAgIC8vIFNo
YWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgotICAgIHJldHVybiB0aGlzT2JqZWN0LnB1
dERpcmVjdChzdGF0ZS52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZS52bSgpLCBy
ZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJO
b0lkZW50aWZpZXIiKSwgc3RybGVuKCJUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlm
aWVyIikpLCB2YWx1ZSk7CisgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRl
c3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIiKSwgc3RybGVuKCJUZXN0TmFtZWRB
bmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyIikpLCB2YWx1ZSk7CiB9CiAKIGJvb2wgc2V0SlNU
ZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllckNvbnN0
cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQpAQCAtMTUyNSw5ICsxNTUzLDEwIEBAIEVuY29kZWRKU1Zh
bHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3ROYW0KIAogc3RhdGljIGlubGluZSBib29sIHNldEpT
VGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlv
bkNvbnN0cnVjdG9yU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEdsb2JhbE9iamVjdCYg
dGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAg
ICBWTSYgdm0gPSB0aHJvd1Njb3BlLnZtKCk7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4g
Y29uc3RydWN0b3IuCi0gICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHN0YXRlLnZtKCks
IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLnZtKCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgTENoYXIqPigiVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uIiks
IHN0cmxlbigiVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uIikpLCB2
YWx1ZSk7CisgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3ROYW1lZEFu
ZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbiIpLCBzdHJsZW4oIlRlc3ROYW1lZEFuZElu
ZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbiIpKSwgdmFsdWUpOwogfQogCiBib29sIHNldEpT
VGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlv
bkNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQpAQCAtMTU0OSw5ICsxNTc4LDEwIEBAIEVuY29k
ZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3ROYW0KIAogc3RhdGljIGlubGluZSBib29s
IHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRp
ZmllckNvbnN0cnVjdG9yU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEdsb2JhbE9iamVj
dCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsK
LSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsK
KyAgICBWTSYgdm0gPSB0aHJvd1Njb3BlLnZtKCk7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQt
aW4gY29uc3RydWN0b3IuCi0gICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHN0YXRlLnZt
KCksIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLnZtKCksIHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgTENoYXIqPigiVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyIiks
IHN0cmxlbigiVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyIikpLCB2YWx1
ZSk7CisgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3ROYW1lZEFuZElu
ZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllciIpLCBzdHJsZW4oIlRlc3ROYW1lZEFuZEluZGV4ZWRT
ZXR0ZXJXaXRoSWRlbnRpZmllciIpKSwgdmFsdWUpOwogfQogCiBib29sIHNldEpTVGVzdEdsb2Jh
bE9iamVjdFRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllckNvbnN0cnVjdG9y
KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFZhbHVlKQpAQCAtMTU3Myw5ICsxNjAzLDEwIEBAIEVuY29kZWRKU1ZhbHVlIGpz
VGVzdEdsb2JhbE9iamVjdFRlc3ROYW0KIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEds
b2JhbE9iamVjdFRlc3ROYW1lZENvbnN0cnVjdG9yQ29uc3RydWN0b3JTZXR0ZXIoRXhlY1N0YXRl
JiBzdGF0ZSwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
KyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFZNJiB2bSA9IHRocm93U2NvcGUudm0oKTsK
ICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KLSAgICByZXR1cm4gdGhp
c09iamVjdC5wdXREaXJlY3Qoc3RhdGUudm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3Rh
dGUudm0oKSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0TmFtZWRDb25zdHJ1
Y3RvciIpLCBzdHJsZW4oIlRlc3ROYW1lZENvbnN0cnVjdG9yIikpLCB2YWx1ZSk7CisgICAgcmV0
dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBy
ZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3ROYW1lZENvbnN0cnVjdG9yIiksIHN0
cmxlbigiVGVzdE5hbWVkQ29uc3RydWN0b3IiKSksIHZhbHVlKTsKIH0KIAogYm9vbCBzZXRKU1Rl
c3RHbG9iYWxPYmplY3RUZXN0TmFtZWRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSog
c3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZh
bHVlKQpAQCAtMTU5Nyw5ICsxNjI4LDEwIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9i
amVjdEF1ZGlvQ28KIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdEF1
ZGlvQ29uc3RydWN0b3JTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0R2xvYmFsT2JqZWN0
JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewot
ICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwor
ICAgIFZNJiB2bSA9IHRocm93U2NvcGUudm0oKTsKICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1p
biBjb25zdHJ1Y3Rvci4KLSAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qoc3RhdGUudm0o
KSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUudm0oKSwgcmVpbnRlcnByZXRfY2FzdDxj
b25zdCBMQ2hhcio+KCJBdWRpbyIpLCBzdHJsZW4oIkF1ZGlvIikpLCB2YWx1ZSk7CisgICAgcmV0
dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBy
ZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIkF1ZGlvIiksIHN0cmxlbigiQXVkaW8iKSks
IHZhbHVlKTsKIH0KIAogYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RBdWRpb0NvbnN0cnVjdG9y
KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFZhbHVlKQpAQCAtMTYyMSw5ICsxNjUzLDEwIEBAIEVuY29kZWRKU1ZhbHVlIGpz
VGVzdEdsb2JhbE9iamVjdFRlc3ROYW0KIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEds
b2JhbE9iamVjdFRlc3ROYW1lZERlbGV0ZXJOb0lkZW50aWZpZXJDb25zdHJ1Y3RvclNldHRlcihF
eGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUg
dmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVk0mIHZtID0gdGhyb3dTY29w
ZS52bSgpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgotICAgIHJl
dHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdChzdGF0ZS52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKCZzdGF0ZS52bSgpLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3ROYW1l
ZERlbGV0ZXJOb0lkZW50aWZpZXIiKSwgc3RybGVuKCJUZXN0TmFtZWREZWxldGVyTm9JZGVudGlm
aWVyIikpLCB2YWx1ZSk7CisgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRl
c3ROYW1lZERlbGV0ZXJOb0lkZW50aWZpZXIiKSwgc3RybGVuKCJUZXN0TmFtZWREZWxldGVyTm9J
ZGVudGlmaWVyIikpLCB2YWx1ZSk7CiB9CiAKIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVz
dE5hbWVkRGVsZXRlck5vSWRlbnRpZmllckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQpAQCAt
MTY0NSw5ICsxNjc4LDEwIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RO
YW0KIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZERl
bGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbkNvbnN0cnVjdG9yU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUs
IEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29w
ZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgVU5V
U0VEX1BBUkFNKHN0YXRlKTsKKyAgICBWTSYgdm0gPSB0aHJvd1Njb3BlLnZtKCk7CiAgICAgLy8g
U2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCi0gICAgcmV0dXJuIHRoaXNPYmplY3Qu
cHV0RGlyZWN0KHN0YXRlLnZtKCksIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLnZtKCks
IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdE5hbWVkRGVsZXRlclRocm93aW5n
RXhjZXB0aW9uIiksIHN0cmxlbigiVGVzdE5hbWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9uIikp
LCB2YWx1ZSk7CisgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3ROYW1l
ZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbiIpLCBzdHJsZW4oIlRlc3ROYW1lZERlbGV0ZXJUaHJv
d2luZ0V4Y2VwdGlvbiIpKSwgdmFsdWUpOwogfQogCiBib29sIHNldEpTVGVzdEdsb2JhbE9iamVj
dFRlc3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbkNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSog
c3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZh
bHVlKQpAQCAtMTY2OSw5ICsxNzAzLDEwIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9i
amVjdFRlc3ROYW0KIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRl
c3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllckNvbnN0cnVjdG9yU2V0dGVyKEV4ZWNTdGF0ZSYg
c3RhdGUsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhy
b3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Cisg
ICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBWTSYgdm0gPSB0aHJvd1Njb3BlLnZtKCk7CiAg
ICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCi0gICAgcmV0dXJuIHRoaXNP
YmplY3QucHV0RGlyZWN0KHN0YXRlLnZtKCksIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRl
LnZtKCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdE5hbWVkRGVsZXRlcldp
dGhJZGVudGlmaWVyIiksIHN0cmxlbigiVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyIikp
LCB2YWx1ZSk7CisgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3ROYW1l
ZERlbGV0ZXJXaXRoSWRlbnRpZmllciIpLCBzdHJsZW4oIlRlc3ROYW1lZERlbGV0ZXJXaXRoSWRl
bnRpZmllciIpKSwgdmFsdWUpOwogfQogCiBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RO
YW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQpAQCAt
MTY5Myw5ICsxNzI4LDEwIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RO
YW0KIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZERl
bGV0ZXJXaXRoSW5kZXhlZEdldHRlckNvbnN0cnVjdG9yU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUs
IEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29w
ZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgVU5V
U0VEX1BBUkFNKHN0YXRlKTsKKyAgICBWTSYgdm0gPSB0aHJvd1Njb3BlLnZtKCk7CiAgICAgLy8g
U2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCi0gICAgcmV0dXJuIHRoaXNPYmplY3Qu
cHV0RGlyZWN0KHN0YXRlLnZtKCksIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLnZtKCks
IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdE5hbWVkRGVsZXRlcldpdGhJbmRl
eGVkR2V0dGVyIiksIHN0cmxlbigiVGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVkR2V0dGVyIikp
LCB2YWx1ZSk7CisgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3ROYW1l
ZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRlciIpLCBzdHJsZW4oIlRlc3ROYW1lZERlbGV0ZXJXaXRo
SW5kZXhlZEdldHRlciIpKSwgdmFsdWUpOwogfQogCiBib29sIHNldEpTVGVzdEdsb2JhbE9iamVj
dFRlc3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRlckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSog
c3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZh
bHVlKQpAQCAtMTcxNyw5ICsxNzUzLDEwIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9i
amVjdFRlc3ROYW0KIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRl
c3ROYW1lZEdldHRlckNhbGxXaXRoQ29uc3RydWN0b3JTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwg
SlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBVTlVT
RURfUEFSQU0oc3RhdGUpOworICAgIFZNJiB2bSA9IHRocm93U2NvcGUudm0oKTsKICAgICAvLyBT
aGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KLSAgICByZXR1cm4gdGhpc09iamVjdC5w
dXREaXJlY3Qoc3RhdGUudm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUudm0oKSwg
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aCIp
LCBzdHJsZW4oIlRlc3ROYW1lZEdldHRlckNhbGxXaXRoIikpLCB2YWx1ZSk7CisgICAgcmV0dXJu
IHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWlu
dGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3ROYW1lZEdldHRlckNhbGxXaXRoIiksIHN0
cmxlbigiVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGgiKSksIHZhbHVlKTsKIH0KIAogYm9vbCBzZXRK
U1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aENvbnN0cnVjdG9yKEV4ZWNT
dGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZFZhbHVlKQpAQCAtMTc0MSw5ICsxNzc4LDEwIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEds
b2JhbE9iamVjdFRlc3ROYW0KIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9i
amVjdFRlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllckNvbnN0cnVjdG9yU2V0dGVyKEV4ZWNTdGF0
ZSYgc3RhdGUsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwg
VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7
CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBWTSYgdm0gPSB0aHJvd1Njb3BlLnZtKCk7
CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCi0gICAgcmV0dXJuIHRo
aXNPYmplY3QucHV0RGlyZWN0KHN0YXRlLnZtKCksIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0
YXRlLnZtKCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdE5hbWVkR2V0dGVy
Tm9JZGVudGlmaWVyIiksIHN0cmxlbigiVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyIikpLCB2
YWx1ZSk7CisgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3ROYW1lZEdl
dHRlck5vSWRlbnRpZmllciIpLCBzdHJsZW4oIlRlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllciIp
KSwgdmFsdWUpOwogfQogCiBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZEdldHRl
ck5vSWRlbnRpZmllckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQpAQCAtMTc2NSw5ICsxODAz
LDEwIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3ROYW0KIAogc3RhdGlj
IGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZEdldHRlcldpdGhJZGVu
dGlmaWVyQ29uc3RydWN0b3JTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0R2xvYmFsT2Jq
ZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQog
ewotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUp
OworICAgIFZNJiB2bSA9IHRocm93U2NvcGUudm0oKTsKICAgICAvLyBTaGFkb3dpbmcgYSBidWls
dC1pbiBjb25zdHJ1Y3Rvci4KLSAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qoc3RhdGUu
dm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUudm0oKSwgcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBMQ2hhcio+KCJUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllciIpLCBzdHJsZW4o
IlRlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyIikpLCB2YWx1ZSk7CisgICAgcmV0dXJuIHRo
aXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVy
cHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyIiks
IHN0cmxlbigiVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXIiKSksIHZhbHVlKTsKIH0KIAog
Ym9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllckNv
bnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQpAQCAtMTc4OSw5ICsxODI4LDEwIEBAIEVuY29kZWRK
U1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3ROYW0KIAogc3RhdGljIGlubGluZSBib29sIHNl
dEpTVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllckNvbnN0cnVjdG9y
U2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwg
SlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBWTSYgdm0gPSB0
aHJvd1Njb3BlLnZtKCk7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3Iu
Ci0gICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHN0YXRlLnZtKCksIElkZW50aWZpZXI6
OmZyb21TdHJpbmcoJnN0YXRlLnZtKCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigi
VGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyIiksIHN0cmxlbigiVGVzdE5hbWVkU2V0dGVyTm9J
ZGVudGlmaWVyIikpLCB2YWx1ZSk7CisgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZt
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFy
Kj4oIlRlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllciIpLCBzdHJsZW4oIlRlc3ROYW1lZFNldHRl
ck5vSWRlbnRpZmllciIpKSwgdmFsdWUpOwogfQogCiBib29sIHNldEpTVGVzdEdsb2JhbE9iamVj
dFRlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUs
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQpA
QCAtMTgxMyw5ICsxODUzLDEwIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRl
c3ROYW0KIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1l
ZFNldHRlclRocm93aW5nRXhjZXB0aW9uQ29uc3RydWN0b3JTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0
ZSwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBV
TlVTRURfUEFSQU0oc3RhdGUpOworICAgIFZNJiB2bSA9IHRocm93U2NvcGUudm0oKTsKICAgICAv
LyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KLSAgICByZXR1cm4gdGhpc09iamVj
dC5wdXREaXJlY3Qoc3RhdGUudm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUudm0o
KSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0TmFtZWRTZXR0ZXJUaHJvd2lu
Z0V4Y2VwdGlvbiIpLCBzdHJsZW4oIlRlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uIikp
LCB2YWx1ZSk7CisgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3ROYW1l
ZFNldHRlclRocm93aW5nRXhjZXB0aW9uIiksIHN0cmxlbigiVGVzdE5hbWVkU2V0dGVyVGhyb3dp
bmdFeGNlcHRpb24iKSksIHZhbHVlKTsKIH0KIAogYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RU
ZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbkNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVl
KQpAQCAtMTgzNyw5ICsxODc4LDEwIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVj
dFRlc3ROYW0KIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RO
YW1lZFNldHRlcldpdGhJZGVudGlmaWVyQ29uc3RydWN0b3JTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0
ZSwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBV
TlVTRURfUEFSQU0oc3RhdGUpOworICAgIFZNJiB2bSA9IHRocm93U2NvcGUudm0oKTsKICAgICAv
LyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KLSAgICByZXR1cm4gdGhpc09iamVj
dC5wdXREaXJlY3Qoc3RhdGUudm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUudm0o
KSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0TmFtZWRTZXR0ZXJXaXRoSWRl
bnRpZmllciIpLCBzdHJsZW4oIlRlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyIikpLCB2YWx1
ZSk7CisgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3ROYW1lZFNldHRl
cldpdGhJZGVudGlmaWVyIiksIHN0cmxlbigiVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXIi
KSksIHZhbHVlKTsKIH0KIAogYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRTZXR0
ZXJXaXRoSWRlbnRpZmllckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQpAQCAtMTg2MSw5ICsx
OTAzLDEwIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3ROYW0KIAogc3Rh
dGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZFNldHRlcldpdGhJ
bmRleGVkR2V0dGVyQ29uc3RydWN0b3JTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0R2xv
YmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Nj
b3BlKQogewotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBVTlVTRURfUEFSQU0o
c3RhdGUpOworICAgIFZNJiB2bSA9IHRocm93U2NvcGUudm0oKTsKICAgICAvLyBTaGFkb3dpbmcg
YSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KLSAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qo
c3RhdGUudm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUudm0oKSwgcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlciIp
LCBzdHJsZW4oIlRlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyIikpLCB2YWx1ZSk7Cisg
ICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3ROYW1lZFNldHRlcldpdGhJ
bmRleGVkR2V0dGVyIiksIHN0cmxlbigiVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXIi
KSksIHZhbHVlKTsKIH0KIAogYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRTZXR0
ZXJXaXRoSW5kZXhlZEdldHRlckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQpAQCAtMTg4NSw5
ICsxOTI4LDEwIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3ROYW0KIAog
c3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZFNldHRlcldp
dGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyQ29uc3RydWN0b3JTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0
ZSwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBV
TlVTRURfUEFSQU0oc3RhdGUpOworICAgIFZNJiB2bSA9IHRocm93U2NvcGUudm0oKTsKICAgICAv
LyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KLSAgICByZXR1cm4gdGhpc09iamVj
dC5wdXREaXJlY3Qoc3RhdGUudm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUudm0o
KSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0TmFtZWRTZXR0ZXJXaXRoSW5k
ZXhlZEdldHRlckFuZFNldHRlciIpLCBzdHJsZW4oIlRlc3ROYW1lZFNldHRlcldpdGhJbmRleGVk
R2V0dGVyQW5kU2V0dGVyIikpLCB2YWx1ZSk7CisgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGly
ZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0
IExDaGFyKj4oIlRlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyIiksIHN0
cmxlbigiVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXIiKSksIHZhbHVl
KTsKIH0KIAogYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRTZXR0ZXJXaXRoSW5k
ZXhlZEdldHRlckFuZFNldHRlckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQpAQCAtMTkwOSw5
ICsxOTUzLDEwIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3ROYW0KIAog
c3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZFNldHRlcldp
dGhPdmVycmlkZUJ1aWx0aW5zQ29uc3RydWN0b3JTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNU
ZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBVTlVTRURf
UEFSQU0oc3RhdGUpOworICAgIFZNJiB2bSA9IHRocm93U2NvcGUudm0oKTsKICAgICAvLyBTaGFk
b3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KLSAgICByZXR1cm4gdGhpc09iamVjdC5wdXRE
aXJlY3Qoc3RhdGUudm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUudm0oKSwgcmVp
bnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0TmFtZWRTZXR0ZXJXaXRoT3ZlcnJpZGVC
dWlsdGlucyIpLCBzdHJsZW4oIlRlc3ROYW1lZFNldHRlcldpdGhPdmVycmlkZUJ1aWx0aW5zIikp
LCB2YWx1ZSk7CisgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3ROYW1l
ZFNldHRlcldpdGhPdmVycmlkZUJ1aWx0aW5zIiksIHN0cmxlbigiVGVzdE5hbWVkU2V0dGVyV2l0
aE92ZXJyaWRlQnVpbHRpbnMiKSksIHZhbHVlKTsKIH0KIAogYm9vbCBzZXRKU1Rlc3RHbG9iYWxP
YmplY3RUZXN0TmFtZWRTZXR0ZXJXaXRoT3ZlcnJpZGVCdWlsdGluc0NvbnN0cnVjdG9yKEV4ZWNT
dGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZFZhbHVlKQpAQCAtMTkzMyw5ICsxOTc4LDEwIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEds
b2JhbE9iamVjdFRlc3ROYW0KIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9i
amVjdFRlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0NvbnN0cnVjdG9yU2V0
dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNW
YWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBWTSYgdm0gPSB0aHJv
d1Njb3BlLnZtKCk7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCi0g
ICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHN0YXRlLnZtKCksIElkZW50aWZpZXI6OmZy
b21TdHJpbmcoJnN0YXRlLnZtKCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVz
dE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzIiksIHN0cmxlbigiVGVzdE5hbWVk
U2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzIikpLCB2YWx1ZSk7CisgICAgcmV0dXJuIHRo
aXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVy
cHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJv
cGVydGllcyIpLCBzdHJsZW4oIlRlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGll
cyIpKSwgdmFsdWUpOwogfQogCiBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZFNl
dHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0NvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUs
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQpA
QCAtMTk1Nyw5ICsyMDAzLDEwIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRl
c3ROYW0KIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1l
ZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0FuZE92ZXJyaWRlQnVpbHRpbnNDb25zdHJ1
Y3RvclNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmpl
Y3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVk0mIHZt
ID0gdGhyb3dTY29wZS52bSgpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVj
dG9yLgotICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdChzdGF0ZS52bSgpLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKCZzdGF0ZS52bSgpLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFy
Kj4oIlRlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0FuZE92ZXJyaWRlQnVp
bHRpbnMiKSwgc3RybGVuKCJUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNB
bmRPdmVycmlkZUJ1aWx0aW5zIikpLCB2YWx1ZSk7CisgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0
RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNv
bnN0IExDaGFyKj4oIlRlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0FuZE92
ZXJyaWRlQnVpbHRpbnMiKSwgc3RybGVuKCJUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVBy
b3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5zIikpLCB2YWx1ZSk7CiB9CiAKIGJvb2wgc2V0SlNU
ZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5k
T3ZlcnJpZGVCdWlsdGluc0NvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQpAQCAtMTk4MSw5ICsy
MDI4LDEwIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RPdmUKIAogc3Rh
dGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RPdmVybG9hZGVkQ29uc3Ry
dWN0b3JzQ29uc3RydWN0b3JTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0R2xvYmFsT2Jq
ZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQog
ewotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUp
OworICAgIFZNJiB2bSA9IHRocm93U2NvcGUudm0oKTsKICAgICAvLyBTaGFkb3dpbmcgYSBidWls
dC1pbiBjb25zdHJ1Y3Rvci4KLSAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qoc3RhdGUu
dm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUudm0oKSwgcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBMQ2hhcio+KCJUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycyIpLCBzdHJsZW4oIlRl
c3RPdmVybG9hZGVkQ29uc3RydWN0b3JzIikpLCB2YWx1ZSk7CisgICAgcmV0dXJuIHRoaXNPYmpl
Y3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9j
YXN0PGNvbnN0IExDaGFyKj4oIlRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzIiksIHN0cmxlbigi
VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMiKSksIHZhbHVlKTsKIH0KIAogYm9vbCBzZXRKU1Rl
c3RHbG9iYWxPYmplY3RUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0NvbnN0cnVjdG9yKEV4ZWNT
dGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZFZhbHVlKQpAQCAtMjAwNSw5ICsyMDUzLDEwIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEds
b2JhbE9iamVjdFRlc3RPdmUKIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9i
amVjdFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlQ29uc3RydWN0b3JTZXR0
ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1Zh
bHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFZNJiB2bSA9IHRocm93
U2NvcGUudm0oKTsKICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KLSAg
ICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qoc3RhdGUudm0oKSwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZygmc3RhdGUudm0oKSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0
T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZSIpLCBzdHJsZW4oIlRlc3RPdmVybG9h
ZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlIikpLCB2YWx1ZSk7CisgICAgcmV0dXJuIHRoaXNP
YmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJl
dF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVl
bmNlIiksIHN0cmxlbigiVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2UiKSks
IHZhbHVlKTsKIH0KIAogYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0T3ZlcmxvYWRlZENv
bnN0cnVjdG9yc1dpdGhTZXF1ZW5jZUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQpAQCAtMjAy
OSw5ICsyMDc4LDEwIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RPdmUK
IAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RPdmVycmlkZUJ1
aWx0aW5zQ29uc3RydWN0b3JTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0R2xvYmFsT2Jq
ZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQog
ewotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUp
OworICAgIFZNJiB2bSA9IHRocm93U2NvcGUudm0oKTsKICAgICAvLyBTaGFkb3dpbmcgYSBidWls
dC1pbiBjb25zdHJ1Y3Rvci4KLSAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qoc3RhdGUu
dm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUudm0oKSwgcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBMQ2hhcio+KCJUZXN0T3ZlcnJpZGVCdWlsdGlucyIpLCBzdHJsZW4oIlRlc3RPdmVy
cmlkZUJ1aWx0aW5zIikpLCB2YWx1ZSk7CisgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0
KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExD
aGFyKj4oIlRlc3RPdmVycmlkZUJ1aWx0aW5zIiksIHN0cmxlbigiVGVzdE92ZXJyaWRlQnVpbHRp
bnMiKSksIHZhbHVlKTsKIH0KIAogYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0T3ZlcnJp
ZGVCdWlsdGluc0NvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQpAQCAtMjA1Myw5ICsyMTAzLDEw
IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RQbHUKIAogc3RhdGljIGlu
bGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RQbHVnaW5JbnRlcmZhY2VDb25zdHJ1
Y3RvclNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmpl
Y3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVk0mIHZt
ID0gdGhyb3dTY29wZS52bSgpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVj
dG9yLgotICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdChzdGF0ZS52bSgpLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKCZzdGF0ZS52bSgpLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFy
Kj4oIlRlc3RQbHVnaW5JbnRlcmZhY2UiKSwgc3RybGVuKCJUZXN0UGx1Z2luSW50ZXJmYWNlIikp
LCB2YWx1ZSk7CisgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RQbHVn
aW5JbnRlcmZhY2UiKSwgc3RybGVuKCJUZXN0UGx1Z2luSW50ZXJmYWNlIikpLCB2YWx1ZSk7CiB9
CiAKIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFBsdWdpbkludGVyZmFjZUNvbnN0cnVj
dG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZFZhbHVlKQpAQCAtMjA3Nyw5ICsyMTI4LDEwIEBAIEVuY29kZWRKU1ZhbHVl
IGpzVGVzdEdsb2JhbE9iamVjdFRlc3RSZWEKIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVz
dEdsb2JhbE9iamVjdFRlc3RSZWFkT25seU1hcExpa2VDb25zdHJ1Y3RvclNldHRlcihFeGVjU3Rh
dGUmIHN0YXRlLCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUs
IFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVk0mIHZtID0gdGhyb3dTY29wZS52bSgp
OwogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgotICAgIHJldHVybiB0
aGlzT2JqZWN0LnB1dERpcmVjdChzdGF0ZS52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZz
dGF0ZS52bSgpLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RSZWFkT25seU1h
cExpa2UiKSwgc3RybGVuKCJUZXN0UmVhZE9ubHlNYXBMaWtlIikpLCB2YWx1ZSk7CisgICAgcmV0
dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBy
ZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RSZWFkT25seU1hcExpa2UiKSwgc3Ry
bGVuKCJUZXN0UmVhZE9ubHlNYXBMaWtlIikpLCB2YWx1ZSk7CiB9CiAKIGJvb2wgc2V0SlNUZXN0
R2xvYmFsT2JqZWN0VGVzdFJlYWRPbmx5TWFwTGlrZUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVl
KQpAQCAtMjEwMSw5ICsyMTUzLDEwIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVj
dFRlc3RSZXAKIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RS
ZXBvcnRFeHRyYU1lbW9yeUNvc3RDb25zdHJ1Y3RvclNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBK
U1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUm
IHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIFVOVVNF
RF9QQVJBTShzdGF0ZSk7CisgICAgVk0mIHZtID0gdGhyb3dTY29wZS52bSgpOwogICAgIC8vIFNo
YWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgotICAgIHJldHVybiB0aGlzT2JqZWN0LnB1
dERpcmVjdChzdGF0ZS52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZS52bSgpLCBy
ZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RSZXBvcnRFeHRyYU1lbW9yeUNvc3Qi
KSwgc3RybGVuKCJUZXN0UmVwb3J0RXh0cmFNZW1vcnlDb3N0IikpLCB2YWx1ZSk7CisgICAgcmV0
dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBy
ZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RSZXBvcnRFeHRyYU1lbW9yeUNvc3Qi
KSwgc3RybGVuKCJUZXN0UmVwb3J0RXh0cmFNZW1vcnlDb3N0IikpLCB2YWx1ZSk7CiB9CiAKIGJv
b2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFJlcG9ydEV4dHJhTWVtb3J5Q29zdENvbnN0cnVj
dG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZFZhbHVlKQpAQCAtMjEyNSw5ICsyMTc4LDEwIEBAIEVuY29kZWRKU1ZhbHVl
IGpzVGVzdEdsb2JhbE9iamVjdFRlc3RTZXIKIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVz
dEdsb2JhbE9iamVjdFRlc3RTZXJpYWxpemF0aW9uQ29uc3RydWN0b3JTZXR0ZXIoRXhlY1N0YXRl
JiBzdGF0ZSwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
KyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFZNJiB2bSA9IHRocm93U2NvcGUudm0oKTsK
ICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KLSAgICByZXR1cm4gdGhp
c09iamVjdC5wdXREaXJlY3Qoc3RhdGUudm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3Rh
dGUudm0oKSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0U2VyaWFsaXphdGlv
biIpLCBzdHJsZW4oIlRlc3RTZXJpYWxpemF0aW9uIikpLCB2YWx1ZSk7CisgICAgcmV0dXJuIHRo
aXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVy
cHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RTZXJpYWxpemF0aW9uIiksIHN0cmxlbigiVGVz
dFNlcmlhbGl6YXRpb24iKSksIHZhbHVlKTsKIH0KIAogYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmpl
Y3RUZXN0U2VyaWFsaXphdGlvbkNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQpAQCAtMjE0OSw5
ICsyMjAzLDEwIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RTZXIKIAog
c3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RTZXJpYWxpemF0aW9u
SW5kaXJlY3RJbmhlcml0YW5jZUNvbnN0cnVjdG9yU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpT
VGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYg
dGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgVU5VU0VE
X1BBUkFNKHN0YXRlKTsKKyAgICBWTSYgdm0gPSB0aHJvd1Njb3BlLnZtKCk7CiAgICAgLy8gU2hh
ZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCi0gICAgcmV0dXJuIHRoaXNPYmplY3QucHV0
RGlyZWN0KHN0YXRlLnZtKCksIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLnZtKCksIHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdElu
aGVyaXRhbmNlIiksIHN0cmxlbigiVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNl
IikpLCB2YWx1ZSk7CisgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RT
ZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZSIpLCBzdHJsZW4oIlRlc3RTZXJpYWxpemF0
aW9uSW5kaXJlY3RJbmhlcml0YW5jZSIpKSwgdmFsdWUpOwogfQogCiBib29sIHNldEpTVGVzdEds
b2JhbE9iamVjdFRlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZUNvbnN0cnVjdG9y
KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFZhbHVlKQpAQCAtMjE3Myw5ICsyMjI4LDEwIEBAIEVuY29kZWRKU1ZhbHVlIGpz
VGVzdEdsb2JhbE9iamVjdFRlc3RTZXIKIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEds
b2JhbE9iamVjdFRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdENvbnN0cnVjdG9yU2V0dGVyKEV4ZWNT
dGF0ZSYgc3RhdGUsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1
ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBWTSYgdm0gPSB0aHJvd1Njb3BlLnZt
KCk7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCi0gICAgcmV0dXJu
IHRoaXNPYmplY3QucHV0RGlyZWN0KHN0YXRlLnZtKCksIElkZW50aWZpZXI6OmZyb21TdHJpbmco
JnN0YXRlLnZtKCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdFNlcmlhbGl6
YXRpb25Jbmhlcml0IiksIHN0cmxlbigiVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0IikpLCB2YWx1
ZSk7CisgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RTZXJpYWxpemF0
aW9uSW5oZXJpdCIpLCBzdHJsZW4oIlRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdCIpKSwgdmFsdWUp
OwogfQogCiBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RTZXJpYWxpemF0aW9uSW5oZXJp
dENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQpAQCAtMjE5Nyw5ICsyMjUzLDEwIEBAIEVuY29k
ZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RTZXIKIAogc3RhdGljIGlubGluZSBib29s
IHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsQ29uc3Ry
dWN0b3JTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2Jq
ZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFZNJiB2
bSA9IHRocm93U2NvcGUudm0oKTsKICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1
Y3Rvci4KLSAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qoc3RhdGUudm0oKSwgSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZygmc3RhdGUudm0oKSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hh
cio+KCJUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbCIpLCBzdHJsZW4oIlRlc3RTZXJpYWxp
emF0aW9uSW5oZXJpdEZpbmFsIikpLCB2YWx1ZSk7CisgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0
RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNv
bnN0IExDaGFyKj4oIlRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsIiksIHN0cmxlbigiVGVz
dFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwiKSksIHZhbHVlKTsKIH0KIAogYm9vbCBzZXRKU1Rl
c3RHbG9iYWxPYmplY3RUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbENvbnN0cnVjdG9yKEV4
ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZFZhbHVlKQpAQCAtMjIyNSw5ICsyMjgyLDEwIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVz
dEdsb2JhbE9iamVjdFRlc3RTZXIKICNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENv
bmRpdGlvbjIpCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNvbnN0cnVjdG9yU2V0dGVyKEV4ZWNTdGF0ZSYg
c3RhdGUsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhy
b3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Cisg
ICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBWTSYgdm0gPSB0aHJvd1Njb3BlLnZtKCk7CiAg
ICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCi0gICAgcmV0dXJuIHRoaXNP
YmplY3QucHV0RGlyZWN0KHN0YXRlLnZtKCksIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRl
LnZtKCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUludGVyZmFjZSIpLCBzdHJsZW4oIlRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRl
cmZhY2UiKSksIHZhbHVlKTsKKyAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigi
VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSIpLCBzdHJsZW4oIlRlc3RTZXJpYWxp
emVkU2NyaXB0VmFsdWVJbnRlcmZhY2UiKSksIHZhbHVlKTsKIH0KIAogYm9vbCBzZXRKU1Rlc3RH
bG9iYWxPYmplY3RUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ29uc3RydWN0b3Io
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkVmFsdWUpCkBAIC0yMjUxLDkgKzIzMDksMTAgQEAgRW5jb2RlZEpTVmFsdWUganNU
ZXN0R2xvYmFsT2JqZWN0VGVzdFN0cgogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xv
YmFsT2JqZWN0VGVzdFN0cmluZ2lmaWVyQ29uc3RydWN0b3JTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0
ZSwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBV
TlVTRURfUEFSQU0oc3RhdGUpOworICAgIFZNJiB2bSA9IHRocm93U2NvcGUudm0oKTsKICAgICAv
LyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KLSAgICByZXR1cm4gdGhpc09iamVj
dC5wdXREaXJlY3Qoc3RhdGUudm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUudm0o
KSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0U3RyaW5naWZpZXIiKSwgc3Ry
bGVuKCJUZXN0U3RyaW5naWZpZXIiKSksIHZhbHVlKTsKKyAgICByZXR1cm4gdGhpc09iamVjdC5w
dXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgTENoYXIqPigiVGVzdFN0cmluZ2lmaWVyIiksIHN0cmxlbigiVGVzdFN0cmluZ2lmaWVy
IikpLCB2YWx1ZSk7CiB9CiAKIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFN0cmluZ2lm
aWVyQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCkBAIC0yMjc1LDkgKzIzMzQsMTAgQEAgRW5j
b2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdFN0cgogCiBzdGF0aWMgaW5saW5lIGJv
b2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFN0cmluZ2lmaWVyQW5vbnltb3VzT3BlcmF0aW9u
Q29uc3RydWN0b3JTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0
aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAg
IFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAg
IFZNJiB2bSA9IHRocm93U2NvcGUudm0oKTsKICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBj
b25zdHJ1Y3Rvci4KLSAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qoc3RhdGUudm0oKSwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUudm0oKSwgcmVpbnRlcnByZXRfY2FzdDxjb25z
dCBMQ2hhcio+KCJUZXN0U3RyaW5naWZpZXJBbm9ueW1vdXNPcGVyYXRpb24iKSwgc3RybGVuKCJU
ZXN0U3RyaW5naWZpZXJBbm9ueW1vdXNPcGVyYXRpb24iKSksIHZhbHVlKTsKKyAgICByZXR1cm4g
dGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdFN0cmluZ2lmaWVyQW5vbnltb3VzT3BlcmF0
aW9uIiksIHN0cmxlbigiVGVzdFN0cmluZ2lmaWVyQW5vbnltb3VzT3BlcmF0aW9uIikpLCB2YWx1
ZSk7CiB9CiAKIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFN0cmluZ2lmaWVyQW5vbnlt
b3VzT3BlcmF0aW9uQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCkBAIC0yMjk5LDkgKzIzNTks
MTAgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdFN0cgogCiBzdGF0aWMg
aW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVy
YXRpb25Db25zdHJ1Y3RvclNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RHbG9iYWxPYmpl
Y3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7
Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7
CisgICAgVk0mIHZtID0gdGhyb3dTY29wZS52bSgpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0
LWluIGNvbnN0cnVjdG9yLgotICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdChzdGF0ZS52
bSgpLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZS52bSgpLCByZWludGVycHJldF9jYXN0
PGNvbnN0IExDaGFyKj4oIlRlc3RTdHJpbmdpZmllck5hbWVkT3BlcmF0aW9uIiksIHN0cmxlbigi
VGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRpb24iKSksIHZhbHVlKTsKKyAgICByZXR1cm4gdGhp
c09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRpb24iKSwg
c3RybGVuKCJUZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvbiIpKSwgdmFsdWUpOwogfQogCiBi
b29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RTdHJpbmdpZmllck5hbWVkT3BlcmF0aW9uQ29u
c3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCkBAIC0yMzIzLDkgKzIzODQsMTAgQEAgRW5jb2RlZEpT
VmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdFN0cgogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0
SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uSW1wbGVtZW50ZWRBc0Nv
bnN0cnVjdG9yU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhp
c09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBW
TSYgdm0gPSB0aHJvd1Njb3BlLnZtKCk7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29u
c3RydWN0b3IuCi0gICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHN0YXRlLnZtKCksIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLnZtKCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
TENoYXIqPigiVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uSW1wbGVtZW50ZWRBcyIpLCBzdHJsZW4o
IlRlc3RTdHJpbmdpZmllck9wZXJhdGlvbkltcGxlbWVudGVkQXMiKSksIHZhbHVlKTsKKyAgICBy
ZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0s
IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9u
SW1wbGVtZW50ZWRBcyIpLCBzdHJsZW4oIlRlc3RTdHJpbmdpZmllck9wZXJhdGlvbkltcGxlbWVu
dGVkQXMiKSksIHZhbHVlKTsKIH0KIAogYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0U3Ry
aW5naWZpZXJPcGVyYXRpb25JbXBsZW1lbnRlZEFzQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0
ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUp
CkBAIC0yMzQ3LDkgKzI0MDksMTAgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0
VGVzdFN0cgogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFN0
cmluZ2lmaWVyT3BlcmF0aW9uTmFtZWRUb1N0cmluZ0NvbnN0cnVjdG9yU2V0dGVyKEV4ZWNTdGF0
ZSYgc3RhdGUsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwg
VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7
CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBWTSYgdm0gPSB0aHJvd1Njb3BlLnZtKCk7
CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCi0gICAgcmV0dXJuIHRo
aXNPYmplY3QucHV0RGlyZWN0KHN0YXRlLnZtKCksIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0
YXRlLnZtKCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdFN0cmluZ2lmaWVy
T3BlcmF0aW9uTmFtZWRUb1N0cmluZyIpLCBzdHJsZW4oIlRlc3RTdHJpbmdpZmllck9wZXJhdGlv
bk5hbWVkVG9TdHJpbmciKSksIHZhbHVlKTsKKyAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJl
Y3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
TENoYXIqPigiVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uTmFtZWRUb1N0cmluZyIpLCBzdHJsZW4o
IlRlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmciKSksIHZhbHVlKTsKIH0KIAog
Ym9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25OYW1lZFRv
U3RyaW5nQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCkBAIC0yMzcxLDkgKzI0MzQsMTAgQEAg
RW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdFN0cgogCiBzdGF0aWMgaW5saW5l
IGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1
dGVDb25zdHJ1Y3RvclNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RHbG9iYWxPYmplY3Qm
IHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0g
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Cisg
ICAgVk0mIHZtID0gdGhyb3dTY29wZS52bSgpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWlu
IGNvbnN0cnVjdG9yLgotICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdChzdGF0ZS52bSgp
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZS52bSgpLCByZWludGVycHJldF9jYXN0PGNv
bnN0IExDaGFyKj4oIlRlc3RTdHJpbmdpZmllclJlYWRPbmx5QXR0cmlidXRlIiksIHN0cmxlbigi
VGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGUiKSksIHZhbHVlKTsKKyAgICByZXR1cm4g
dGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1
dGUiKSwgc3RybGVuKCJUZXN0U3RyaW5naWZpZXJSZWFkT25seUF0dHJpYnV0ZSIpKSwgdmFsdWUp
OwogfQogCiBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RTdHJpbmdpZmllclJlYWRPbmx5
QXR0cmlidXRlQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCkBAIC0yMzk1LDkgKzI0NTksMTAg
QEAgRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdFN0cgogCiBzdGF0aWMgaW5s
aW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0
cmlidXRlQ29uc3RydWN0b3JTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0R2xvYmFsT2Jq
ZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQog
ewotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUp
OworICAgIFZNJiB2bSA9IHRocm93U2NvcGUudm0oKTsKICAgICAvLyBTaGFkb3dpbmcgYSBidWls
dC1pbiBjb25zdHJ1Y3Rvci4KLSAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qoc3RhdGUu
dm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUudm0oKSwgcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBMQ2hhcio+KCJUZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGUiKSwgc3Ry
bGVuKCJUZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGUiKSksIHZhbHVlKTsKKyAgICBy
ZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0s
IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRl
QXR0cmlidXRlIiksIHN0cmxlbigiVGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmlidXRlIikp
LCB2YWx1ZSk7CiB9CiAKIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFN0cmluZ2lmaWVy
UmVhZFdyaXRlQXR0cmlidXRlQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCkBAIC0yNDE5LDkg
KzI0ODQsMTAgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdFR5cAogCiBz
dGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFR5cGVkZWZzQ29uc3Ry
dWN0b3JTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2Jq
ZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFZNJiB2
bSA9IHRocm93U2NvcGUudm0oKTsKICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1
Y3Rvci4KLSAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qoc3RhdGUudm0oKSwgSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZygmc3RhdGUudm0oKSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hh
cio+KCJUZXN0VHlwZWRlZnMiKSwgc3RybGVuKCJUZXN0VHlwZWRlZnMiKSksIHZhbHVlKTsKKyAg
ICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmco
dm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdFR5cGVkZWZzIiksIHN0cmxl
bigiVGVzdFR5cGVkZWZzIikpLCB2YWx1ZSk7CiB9CiAKIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2Jq
ZWN0VGVzdFR5cGVkZWZzQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlck5vSWRl
bnRpZmllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIuY3BwCShyZXZpc2lvbiAy
NDkxMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
SW5kZXhlZFNldHRlck5vSWRlbnRpZmllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwLDcgKzgw
LDcgQEAgdGVtcGxhdGU8PiBKU1ZhbHVlIEpTVGVzdEluZGV4ZWRTZXR0ZXJObwogdGVtcGxhdGU8
PiB2b2lkIEpTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXJDb25zdHJ1Y3Rvcjo6aW5pdGlh
bGl6ZVByb3BlcnRpZXMoVk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQog
ewogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3RJ
bmRleGVkU2V0dGVyTm9JZGVudGlmaWVyOjpwcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCksIEpT
Qzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRl
OjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKLSAgICBwdXRE
aXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZygmdm0s
IFN0cmluZygiVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIiX3MpKSwgSlNDOjpQcm9wZXJ0
eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7
CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxT
dHJpbmcodm0sIFN0cmluZygiVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIiX3MpKSwgSlND
OjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpE
b250RW51bSk7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpz
TnVtYmVyKDApLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVy
dHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKIH0KIApAQCAtMTY2LDEwICsxNjYsMTEgQEAgYm9vbCBK
U1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyOjpnZQogCiB2b2lkIEpTVGVzdEluZGV4ZWRT
ZXR0ZXJOb0lkZW50aWZpZXI6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwg
RXhlY1N0YXRlKiBzdGF0ZSwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1l
cmF0aW9uTW9kZSBtb2RlKQogeworICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8q
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllcio+KG9i
amVjdCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhvYmplY3QsIGluZm8oKSk7CiAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMCwgY291bnQgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCkubGVu
Z3RoKCk7IGkgPCBjb3VudDsgKytpKQotICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlm
aWVyOjpmcm9tKHN0YXRlLCBpKSk7CisgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZp
ZXI6OmZyb20odm0sIGkpKTsKICAgICBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhvYmpl
Y3QsIHN0YXRlLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4
Y2VwdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5jcHAJKHJldmlz
aW9uIDI0OTEyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC04MCw3ICs4MCw3IEBAIHRlbXBsYXRlPD4gSlNWYWx1ZSBKU1Rlc3RJbmRleGVkU2V0dGVyVGgK
IHRlbXBsYXRlPD4gdm9pZCBKU1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb25Db25z
dHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMoVk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCYg
Z2xvYmFsT2JqZWN0KQogewogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJv
dG90eXBlLCBKU1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246OnByb3RvdHlwZSh2
bSwgZ2xvYmFsT2JqZWN0KSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IEpT
Qzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6
RG9udEVudW0pOwotICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNO
b250cml2aWFsU3RyaW5nKCZ2bSwgU3RyaW5nKCJUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhj
ZXB0aW9uIl9zKSksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9w
ZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlO
YW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKHZtLCBTdHJpbmcoIlRlc3RJbmRleGVkU2V0
dGVyVGhyb3dpbmdFeGNlcHRpb24iX3MpKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9u
bHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CiAgICAgcHV0RGlyZWN0KHZt
LCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDApLCBKU0M6OlByb3BlcnR5QXR0
cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKIH0K
IApAQCAtMTY2LDEwICsxNjYsMTEgQEAgYm9vbCBKU1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdF
eGNlcHRpbwogCiB2b2lkIEpTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6Z2V0
T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIHN0YXRlLCBQcm9w
ZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7Cisg
ICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxK
U1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24qPihvYmplY3QpOwogICAgIEFTU0VS
VF9HQ19PQkpFQ1RfSU5IRVJJVFMob2JqZWN0LCBpbmZvKCkpOwogICAgIGZvciAodW5zaWduZWQg
aSA9IDAsIGNvdW50ID0gdGhpc09iamVjdC0+d3JhcHBlZCgpLmxlbmd0aCgpOyBpIDwgY291bnQ7
ICsraSkKLSAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbShzdGF0ZSwg
aSkpOworICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9tKHZtLCBpKSk7
CiAgICAgSlNPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBzdGF0ZSwgcHJvcGVy
dHlOYW1lcywgbW9kZSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRl
eGVkU2V0dGVyV2l0aElkZW50aWZpZXIuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlcldpdGhJ
ZGVudGlmaWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODYsNyArODYsNyBAQCB0ZW1wbGF0ZTw+
IEpTVmFsdWUgSlNUZXN0SW5kZXhlZFNldHRlcldpCiB0ZW1wbGF0ZTw+IHZvaWQgSlNUZXN0SW5k
ZXhlZFNldHRlcldpdGhJZGVudGlmaWVyQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVz
KFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKIHsKICAgICBwdXREaXJl
Y3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgSlNUZXN0SW5kZXhlZFNldHRlcldp
dGhJZGVudGlmaWVyOjpwcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCksIEpTQzo6UHJvcGVydHlB
dHRyaWJ1dGU6OkRvbnREZWxldGUgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8
IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKLSAgICBwdXREaXJlY3Qodm0sIHZt
LnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZygmdm0sIFN0cmluZygiVGVz
dEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllciJfcykpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRl
OjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKKyAgICBwdXRE
aXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZyh2bSwg
U3RyaW5nKCJUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyIl9zKSksIEpTQzo6UHJvcGVy
dHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0p
OwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigw
KSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmli
dXRlOjpEb250RW51bSk7CiB9CiAKQEAgLTE3MywxMCArMTczLDExIEBAIGJvb2wgSlNUZXN0SW5k
ZXhlZFNldHRlcldpdGhJZGVudGlmaWVyOjoKIAogdm9pZCBKU1Rlc3RJbmRleGVkU2V0dGVyV2l0
aElkZW50aWZpZXI6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0
YXRlKiBzdGF0ZSwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9u
TW9kZSBtb2RlKQogeworICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8qIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8SlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyKj4ob2JqZWN0
KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKG9iamVjdCwgaW5mbygpKTsKICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwLCBjb3VudCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKS5sZW5ndGgo
KTsgaSA8IGNvdW50OyArK2kpCi0gICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6
OmZyb20oc3RhdGUsIGkpKTsKKyAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6
ZnJvbSh2bSwgaSkpOwogICAgIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwg
c3RhdGUsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNl
LmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3Myw3ICsy
NzMsNyBAQCB0ZW1wbGF0ZTw+IEpTVmFsdWUgSlNUZXN0SW50ZXJmYWNlQ29uc3RyCiB0ZW1wbGF0
ZTw+IHZvaWQgSlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVz
KFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKIHsKICAgICBwdXREaXJl
Y3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgSlNUZXN0SW50ZXJmYWNlOjpwcm90
b3R5cGUodm0sIGdsb2JhbE9iamVjdCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnREZWxl
dGUgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRy
aWJ1dGU6OkRvbnRFbnVtKTsKLSAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm5h
bWUsIGpzTm9udHJpdmlhbFN0cmluZygmdm0sIFN0cmluZygiVGVzdEludGVyZmFjZSJfcykpLCBK
U0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6
OkRvbnRFbnVtKTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpz
Tm9udHJpdmlhbFN0cmluZyh2bSwgU3RyaW5nKCJUZXN0SW50ZXJmYWNlIl9zKSksIEpTQzo6UHJv
cGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVu
dW0pOwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJl
cigxKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0
cmlidXRlOjpEb250RW51bSk7CiAgICAgcmVpZnlTdGF0aWNQcm9wZXJ0aWVzKHZtLCBKU1Rlc3RJ
bnRlcmZhY2U6OmluZm8oKSwgSlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JUYWJsZVZhbHVlcywg
KnRoaXMpOwogfQpAQCAtNTA4LDYgKzUwOCw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEludGVy
ZmFjZUNvbnN0cnVjdG8KICNpZiBFTkFCTEUoQ29uZGl0aW9uMjIpIHx8IEVOQUJMRShDb25kaXRp
b24yMykKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3Rvcklt
cGxlbWVudHNTdGF0aWNBdHRyU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUs
IFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZl
cnQ8SURMRE9NU3RyaW5nPihzdGF0ZSwgdmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgZmFsc2UpOwpAQCAtNTYxLDYgKzU2Miw3IEBAIEVuY29kZWRKU1ZhbHVlIGpz
VGVzdEludGVyZmFjZUltcGxlbWVudHMKICNpZiBFTkFCTEUoQ29uZGl0aW9uMjIpIHx8IEVOQUJM
RShDb25kaXRpb24yMykKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VJbXBs
ZW1lbnRzU3RyMlNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RJbnRlcmZhY2UmIHRoaXNP
YmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CisgICAgVU5V
U0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0
byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBj
b252ZXJ0PElETERPTVN0cmluZz4oc3RhdGUsIHZhbHVlKTsKQEAgLTU5Niw2ICs1OTgsNyBAQCBF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzCiAjaWYgRU5BQkxFKENvbmRp
dGlvbjIyKSB8fCBFTkFCTEUoQ29uZGl0aW9uMjMpCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNU
ZXN0SW50ZXJmYWNlSW1wbGVtZW50c1N0cjNTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0
SW50ZXJmYWNlJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Nj
b3BlKQogeworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOwogICAgIHRoaXNPYmplY3Quc2V0SW1wbGVtZW50c1N0cjMoc3RhdGUsIHZhbHVlKTsK
ICAgICByZXR1cm4gdHJ1ZTsKQEAgLTYyOCw2ICs2MzEsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RJbnRlcmZhY2VJbXBsZW1lbnRzCiAjaWYgRU5BQkxFKENvbmRpdGlvbjIyKSB8fCBFTkFCTEUo
Q29uZGl0aW9uMjMpCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0SW50ZXJmYWNlSW1wbGVt
ZW50c05vZGVTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0SW50ZXJmYWNlJiB0aGlzT2Jq
ZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogeworICAgIFVOVVNF
RF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8m
IGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29u
dmVydDxJRExJbnRlcmZhY2U8Tm9kZT4+KHN0YXRlLCB2YWx1ZSwgW10oSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXR0cmlidXRlVHlwZUVycm9y
KHN0YXRlLCBzY29wZSwgIlRlc3RJbnRlcmZhY2UiLCAiaW1wbGVtZW50c05vZGUiLCAiTm9kZSIp
OyB9KTsKQEAgLTY4MCw2ICs2ODQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VD
b25zdHJ1Y3RvCiAjaWYgRU5BQkxFKENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIp
CiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JTdXBwbGVt
ZW50YWxTdGF0aWNBdHRyU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUsIFRo
cm93U2NvcGUmIHRocm93U2NvcGUpCiB7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8
SURMRE9NU3RyaW5nPihzdGF0ZSwgdmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgZmFsc2UpOwpAQCAtNzMzLDYgKzczOCw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVz
dEludGVyZmFjZVN1cHBsZW1lbnQKICNpZiBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVOQUJMRShD
b25kaXRpb24xMikKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VTdXBwbGVt
ZW50YWxTdHIyU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEludGVyZmFjZSYgdGhpc09i
amVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKKyAgICBVTlVT
RURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRv
JiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNv
bnZlcnQ8SURMRE9NU3RyaW5nPihzdGF0ZSwgdmFsdWUpOwpAQCAtNzY4LDYgKzc3NCw3IEBAIEVu
Y29kZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFjZVN1cHBsZW1lbnQKICNpZiBFTkFCTEUoQ29uZGl0
aW9uMTEpIHx8IEVOQUJMRShDb25kaXRpb24xMikKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rl
c3RJbnRlcmZhY2VTdXBwbGVtZW50YWxTdHIzU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVz
dEludGVyZmFjZSYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dT
Y29wZSkKIHsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKICAgICB0aGlzT2JqZWN0LnNldFN1cHBsZW1lbnRhbFN0cjMoc3RhdGUsIHZhbHVl
KTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTgwMCw2ICs4MDcsNyBAQCBFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50CiAjaWYgRU5BQkxFKENvbmRpdGlvbjExKSB8fCBFTkFC
TEUoQ29uZGl0aW9uMTIpCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0SW50ZXJmYWNlU3Vw
cGxlbWVudGFsTm9kZVNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RJbnRlcmZhY2UmIHRo
aXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CisgICAg
VU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAg
YXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUg
PSBjb252ZXJ0PElETEludGVyZmFjZTxOb2RlPj4oc3RhdGUsIHZhbHVlLCBbXShKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBdHRyaWJ1dGVUeXBl
RXJyb3Ioc3RhdGUsIHNjb3BlLCAiVGVzdEludGVyZmFjZSIsICJzdXBwbGVtZW50YWxOb2RlIiwg
Ik5vZGUiKTsgfSk7CkBAIC04MzcsNiArODQ1LDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0SW50
ZXJmYWNlUmVmbGVjdEF0dAogI2lmIEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENvbmRp
dGlvbjEyKQogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEludGVyZmFjZVJlZmxlY3RBdHRy
aWJ1dGVTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0SW50ZXJmYWNlJiB0aGlzT2JqZWN0
LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogeworICAgIFVOVVNFRF9Q
QVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGlt
cGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVy
dDxJRExET01TdHJpbmc+KHN0YXRlLCB2YWx1ZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZS5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2VM
ZWFkaW5nVW5kZXJzY29yZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgxLDcgKzgxLDcgQEAgdGVt
cGxhdGU8PiBKU1ZhbHVlIEpTVGVzdEludGVyZmFjZUxlYWRpbgogdGVtcGxhdGU8PiB2b2lkIEpT
VGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9w
ZXJ0aWVzKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKIHsKICAgICBw
dXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgSlNUZXN0SW50ZXJmYWNl
TGVhZGluZ1VuZGVyc2NvcmU6OnByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KSwgSlNDOjpQcm9w
ZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRP
bmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwotICAgIHB1dERpcmVjdCh2
bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKCZ2bSwgU3RyaW5n
KCJUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmUiX3MpKSwgSlNDOjpQcm9wZXJ0eUF0dHJp
YnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CisgICAg
cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmco
dm0sIFN0cmluZygiVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlIl9zKSksIEpTQzo6UHJv
cGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVu
dW0pOwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJl
cigwKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0
cmlidXRlOjpEb250RW51bSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RJdGVyYWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEl0ZXJhYmxlLmNwcAkocmV2aXNp
b24gMjQ5MTI4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdEl0ZXJhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODksNyArODksNyBAQCB0ZW1wbGF0
ZTw+IEpTVmFsdWUgSlNUZXN0SXRlcmFibGVDb25zdHJ1CiB0ZW1wbGF0ZTw+IHZvaWQgSlNUZXN0
SXRlcmFibGVDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMoVk0mIHZtLCBKU0RPTUds
b2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQogewogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVy
dHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3RJdGVyYWJsZTo6cHJvdG90eXBlKHZtLCBnbG9iYWxP
YmplY3QpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgSlNDOjpQcm9wZXJ0
eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7
Ci0gICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxT
dHJpbmcoJnZtLCBTdHJpbmcoIlRlc3RJdGVyYWJsZSJfcykpLCBKU0M6OlByb3BlcnR5QXR0cmli
dXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKKyAgICBw
dXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZyh2
bSwgU3RyaW5nKCJUZXN0SXRlcmFibGUiX3MpKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVh
ZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CiAgICAgcHV0RGlyZWN0
KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDApLCBKU0M6OlByb3BlcnR5
QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsK
IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dEpTQnVpbHRpbkNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3IuY3BwCShy
ZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NSw3
ICs4NSw3IEBAIHRlbXBsYXRlPD4gSlNWYWx1ZSBKU1Rlc3RKU0J1aWx0aW5Db25zdHIKIHRlbXBs
YXRlPD4gdm9pZCBKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvckNvbnN0cnVjdG9yOjppbml0aWFs
aXplUHJvcGVydGllcyhWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCiB7
CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdEpT
QnVpbHRpbkNvbnN0cnVjdG9yOjpwcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCksIEpTQzo6UHJv
cGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFk
T25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKLSAgICBwdXREaXJlY3Qo
dm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZygmdm0sIFN0cmlu
ZygiVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yIl9zKSksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6
OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOworICAgIHB1dERp
cmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKHZtLCBT
dHJpbmcoIlRlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvciJfcykpLCBKU0M6OlByb3BlcnR5QXR0cmli
dXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKICAgICBw
dXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMCksIEpTQzo6
UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9u
dEVudW0pOwogfQogCkBAIC0yMDgsNiArMjA4LDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0SlNC
dWlsdGluQ29uc3RydWN0bwogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0SlNCdWlsdGlu
Q29uc3RydWN0b3JUZXN0QXR0cmlidXRlUldDdXN0b21TZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwg
SlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3ImIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRo
cm93U2NvcGUmIHRocm93U2NvcGUpCiB7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgdGhpc09iamVjdC5zZXRUZXN0QXR0cmlidXRl
UldDdXN0b20oc3RhdGUsIHZhbHVlKTsKICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3Rl
bmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5jcHAJKHJldmlzaW9uIDI0OTEyOCkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RNZWRpYVF1
ZXJ5TGlzdExpc3RlbmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODYsNyArODYsNyBAQCB0ZW1w
bGF0ZTw+IEpTVmFsdWUgSlNUZXN0TWVkaWFRdWVyeUxpc3RMCiB0ZW1wbGF0ZTw+IHZvaWQgSlNU
ZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lckNvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGll
cyhWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCiB7CiAgICAgcHV0RGly
ZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdE1lZGlhUXVlcnlMaXN0
TGlzdGVuZXI6OnByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KSwgSlNDOjpQcm9wZXJ0eUF0dHJp
YnV0ZTo6RG9udERlbGV0ZSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlND
OjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwotICAgIHB1dERpcmVjdCh2bSwgdm0ucHJv
cGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKCZ2bSwgU3RyaW5nKCJUZXN0TWVk
aWFRdWVyeUxpc3RMaXN0ZW5lciJfcykpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25s
eSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKKyAgICBwdXREaXJlY3Qodm0s
IHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZyh2bSwgU3RyaW5nKCJU
ZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lciJfcykpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpS
ZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKICAgICBwdXREaXJl
Y3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMCksIEpTQzo6UHJvcGVy
dHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0p
OwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRl
eGVkU2V0dGVyTm9JZGVudGlmaWVyLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRl
ck5vSWRlbnRpZmllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgxLDcgKzgxLDcgQEAgdGVtcGxh
dGU8PiBKU1ZhbHVlIEpTVGVzdE5hbWVkQW5kSW5kZXhlZAogdGVtcGxhdGU8PiB2b2lkIEpTVGVz
dE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllckNvbnN0cnVjdG9yOjppbml0aWFsaXpl
UHJvcGVydGllcyhWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCiB7CiAg
ICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdE5hbWVk
QW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllcjo6cHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3Qp
LCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgSlNDOjpQcm9wZXJ0eUF0dHJp
YnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7Ci0gICAg
cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmco
JnZtLCBTdHJpbmcoIlRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIiX3MpKSwg
SlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRl
OjpEb250RW51bSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBq
c05vbnRyaXZpYWxTdHJpbmcodm0sIFN0cmluZygiVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5v
SWRlbnRpZmllciJfcykpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6
UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3Bl
cnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJl
YWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwogfQogCkBAIC0xNjYs
NiArMTY2LDcgQEAgYm9vbCBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aQogCiBi
b29sIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllcjo6Z2V0T3duUHJvcGVy
dHlTbG90QnlJbmRleChKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIHN0YXRlLCB1bnNpZ25l
ZCBpbmRleCwgUHJvcGVydHlTbG90JiBzbG90KQogeworICAgIFZNJiB2bSA9IHN0YXRlLT52bSgp
OwogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0
dGVyTm9JZGVudGlmaWVyKj4ob2JqZWN0KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRT
KHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgaWYgKExJS0VMWShpbmRleCA8PSBNQVhfQVJSQVlf
SU5ERVgpKSB7CkBAIC0xNzYsNyArMTc3LDcgQEAgYm9vbCBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRT
ZXR0ZXJOb0lkZW50aQogICAgICAgICB9CiAgICAgICAgIHJldHVybiBKU09iamVjdDo6Z2V0T3du
UHJvcGVydHlTbG90QnlJbmRleChvYmplY3QsIHN0YXRlLCBpbmRleCwgc2xvdCk7CiAgICAgfQot
ICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbShzdGF0ZSwgaW5kZXgpOwor
ICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbSh2bSwgaW5kZXgpOwogICAg
IHVzaW5nIEdldHRlcklETFR5cGUgPSBJRExET01TdHJpbmc7CiAgICAgYXV0byBnZXR0ZXJGdW5j
dG9yID0gW10gKGF1dG8mIHRoaXNPYmplY3QsIGF1dG8gcHJvcGVydHlOYW1lKSAtPiBPcHRpb25h
bDx0eXBlbmFtZSBHZXR0ZXJJRExUeXBlOjpJbXBsZW1lbnRhdGlvblR5cGU+IHsKICAgICAgICAg
YXV0byByZXN1bHQgPSB0aGlzT2JqZWN0LndyYXBwZWQoKS5uYW1lZEl0ZW0ocHJvcGVydHlOYW1l
VG9BdG9tU3RyaW5nKHByb3BlcnR5TmFtZSkpOwpAQCAtMTk0LDEyICsxOTUsMTMgQEAgYm9vbCBK
U1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aQogCiB2b2lkIEpTVGVzdE5hbWVkQW5k
SW5kZXhlZFNldHRlck5vSWRlbnRpZmllcjo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCog
b2JqZWN0LCBFeGVjU3RhdGUqIHN0YXRlLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1l
cywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7CisgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAg
ICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJO
b0lkZW50aWZpZXIqPihvYmplY3QpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMob2Jq
ZWN0LCBpbmZvKCkpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDAsIGNvdW50ID0gdGhpc09iamVj
dC0+d3JhcHBlZCgpLmxlbmd0aCgpOyBpIDwgY291bnQ7ICsraSkKLSAgICAgICAgcHJvcGVydHlO
YW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbShzdGF0ZSwgaSkpOworICAgICAgICBwcm9wZXJ0eU5h
bWVzLmFkZChJZGVudGlmaWVyOjpmcm9tKHZtLCBpKSk7CiAgICAgZm9yIChhdXRvJiBwcm9wZXJ0
eU5hbWUgOiB0aGlzT2JqZWN0LT53cmFwcGVkKCkuc3VwcG9ydGVkUHJvcGVydHlOYW1lcygpKQot
ICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHN0YXRlLCBw
cm9wZXJ0eU5hbWUpKTsKKyAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyh2bSwgcHJvcGVydHlOYW1lKSk7CiAgICAgSlNPYmplY3Q6OmdldE93blByb3BlcnR5
TmFtZXMob2JqZWN0LCBzdGF0ZSwgcHJvcGVydHlOYW1lcywgbW9kZSk7CiB9CiAKQEAgLTIzMyw2
ICsyMzUsNyBAQCBib29sIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpCiAKIGJv
b2wgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyOjpwdXRCeUluZGV4KEpT
Q2VsbCogY2VsbCwgRXhlY1N0YXRlKiBzdGF0ZSwgdW5zaWduZWQgaW5kZXgsIEpTVmFsdWUgdmFs
dWUsIGJvb2wgc2hvdWxkVGhyb3cpCiB7CisgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAg
YXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lk
ZW50aWZpZXIqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmpl
Y3QsIGluZm8oKSk7CiAKQEAgLTI0NCw5ICsyNDcsOSBAQCBib29sIEpTVGVzdE5hbWVkQW5kSW5k
ZXhlZFNldHRlck5vSWRlbnRpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIGF1
dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbShzdGF0ZSwgaW5kZXgpOworICAgIGF1
dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbSh2bSwgaW5kZXgpOwogICAgIFByb3Bl
cnR5U2xvdCBzbG90IHsgdGhpc09iamVjdCwgUHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5
cGU6OlZNSW5xdWlyeSB9OwotICAgIEpTVmFsdWUgcHJvdG90eXBlID0gdGhpc09iamVjdC0+Z2V0
UHJvdG90eXBlRGlyZWN0KHN0YXRlLT52bSgpKTsKKyAgICBKU1ZhbHVlIHByb3RvdHlwZSA9IHRo
aXNPYmplY3QtPmdldFByb3RvdHlwZURpcmVjdCh2bSk7CiAgICAgaWYgKCEocHJvdG90eXBlLmlz
T2JqZWN0KCkgJiYgYXNPYmplY3QocHJvdG90eXBlKS0+Z2V0UHJvcGVydHlTbG90KHN0YXRlLCBw
cm9wZXJ0eU5hbWUsIHNsb3QpKSkgewogICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHN0YXRlLT52bSgpKTsKICAgICAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNv
bnZlcnQ8SURMRE9NU3RyaW5nPigqc3RhdGUsIHZhbHVlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJv
d2luZ0V4Y2VwdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0
aW9uLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9u
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODEsNyArODEsNyBAQCB0ZW1wbGF0ZTw+IEpTVmFsdWUg
SlNUZXN0TmFtZWRBbmRJbmRleGVkCiB0ZW1wbGF0ZTw+IHZvaWQgSlNUZXN0TmFtZWRBbmRJbmRl
eGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb25Db25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRp
ZXMoVk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQogewogICAgIHB1dERp
cmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3ROYW1lZEFuZEluZGV4
ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6cHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QpLCBK
U0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0
ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7Ci0gICAgcHV0
RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcoJnZt
LCBTdHJpbmcoIlRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbiJfcykp
LCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1
dGU6OkRvbnRFbnVtKTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUs
IGpzTm9udHJpdmlhbFN0cmluZyh2bSwgU3RyaW5nKCJUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVy
VGhyb3dpbmdFeGNlcHRpb24iX3MpKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkg
fCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CiAgICAgcHV0RGlyZWN0KHZtLCB2
bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDApLCBKU0M6OlByb3BlcnR5QXR0cmli
dXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKIH0KIApA
QCAtMTY2LDYgKzE2Niw3IEBAIGJvb2wgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dp
bmcKIAogYm9vbCBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6
Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIHN0
YXRlLCB1bnNpZ25lZCBpbmRleCwgUHJvcGVydHlTbG90JiBzbG90KQogeworICAgIFZNJiB2bSA9
IHN0YXRlLT52bSgpOwogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWRB
bmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24qPihvYmplY3QpOwogICAgIEFTU0VSVF9H
Q19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKICAgICBpZiAoTElLRUxZKGlu
ZGV4IDw9IE1BWF9BUlJBWV9JTkRFWCkpIHsKQEAgLTE3Niw3ICsxNzcsNyBAQCBib29sIEpTVGVz
dE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nCiAgICAgICAgIH0KICAgICAgICAgcmV0dXJu
IEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KG9iamVjdCwgc3RhdGUsIGluZGV4
LCBzbG90KTsKICAgICB9Ci0gICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9t
KHN0YXRlLCBpbmRleCk7CisgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9t
KHZtLCBpbmRleCk7CiAgICAgdXNpbmcgR2V0dGVySURMVHlwZSA9IElETERPTVN0cmluZzsKICAg
ICBhdXRvIGdldHRlckZ1bmN0b3IgPSBbXSAoYXV0byYgdGhpc09iamVjdCwgYXV0byBwcm9wZXJ0
eU5hbWUpIC0+IE9wdGlvbmFsPHR5cGVuYW1lIEdldHRlcklETFR5cGU6OkltcGxlbWVudGF0aW9u
VHlwZT4gewogICAgICAgICBhdXRvIHJlc3VsdCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpLm5hbWVk
SXRlbShwcm9wZXJ0eU5hbWVUb0F0b21TdHJpbmcocHJvcGVydHlOYW1lKSk7CkBAIC0xOTQsMTIg
KzE5NSwxMyBAQCBib29sIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nCiAKIHZv
aWQgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246OmdldE93blBy
b3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBzdGF0ZSwgUHJvcGVydHlO
YW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQogeworICAgIFZN
JiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0
TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24qPihvYmplY3QpOwogICAgIEFT
U0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMob2JqZWN0LCBpbmZvKCkpOwogICAgIGZvciAodW5zaWdu
ZWQgaSA9IDAsIGNvdW50ID0gdGhpc09iamVjdC0+d3JhcHBlZCgpLmxlbmd0aCgpOyBpIDwgY291
bnQ7ICsraSkKLSAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbShzdGF0
ZSwgaSkpOworICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9tKHZtLCBp
KSk7CiAgICAgZm9yIChhdXRvJiBwcm9wZXJ0eU5hbWUgOiB0aGlzT2JqZWN0LT53cmFwcGVkKCku
c3VwcG9ydGVkUHJvcGVydHlOYW1lcygpKQotICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKHN0YXRlLCBwcm9wZXJ0eU5hbWUpKTsKKyAgICAgICAgcHJvcGVy
dHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcHJvcGVydHlOYW1lKSk7CiAg
ICAgSlNPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBzdGF0ZSwgcHJvcGVydHlO
YW1lcywgbW9kZSk7CiB9CiAKQEAgLTIzMyw2ICsyMzUsNyBAQCBib29sIEpTVGVzdE5hbWVkQW5k
SW5kZXhlZFNldHRlclRocm93aW5nCiAKIGJvb2wgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVy
VGhyb3dpbmdFeGNlcHRpb246OnB1dEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIHN0
YXRlLCB1bnNpZ25lZCBpbmRleCwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKIHsK
KyAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0
PEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uKj4oY2VsbCk7CiAg
ICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogCkBAIC0y
NDQsOSArMjQ3LDkgQEAgYm9vbCBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZwog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElk
ZW50aWZpZXI6OmZyb20oc3RhdGUsIGluZGV4KTsKKyAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElk
ZW50aWZpZXI6OmZyb20odm0sIGluZGV4KTsKICAgICBQcm9wZXJ0eVNsb3Qgc2xvdCB7IHRoaXNP
YmplY3QsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpWTUlucXVpcnkgfTsKLSAg
ICBKU1ZhbHVlIHByb3RvdHlwZSA9IHRoaXNPYmplY3QtPmdldFByb3RvdHlwZURpcmVjdChzdGF0
ZS0+dm0oKSk7CisgICAgSlNWYWx1ZSBwcm90b3R5cGUgPSB0aGlzT2JqZWN0LT5nZXRQcm90b3R5
cGVEaXJlY3Qodm0pOwogICAgIGlmICghKHByb3RvdHlwZS5pc09iamVjdCgpICYmIGFzT2JqZWN0
KHByb3RvdHlwZSktPmdldFByb3BlcnR5U2xvdChzdGF0ZSwgcHJvcGVydHlOYW1lLCBzbG90KSkp
IHsKICAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShzdGF0ZS0+
dm0oKSk7CiAgICAgICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4o
KnN0YXRlLCB2YWx1ZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RO
YW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5jcHAJKHJldmlzaW9uIDI0OTEyOCkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFu
ZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg4LDcg
Kzg4LDcgQEAgdGVtcGxhdGU8PiBKU1ZhbHVlIEpTVGVzdE5hbWVkQW5kSW5kZXhlZAogdGVtcGxh
dGU8PiB2b2lkIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyQ29uc3Ry
dWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGds
b2JhbE9iamVjdCkKIHsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3Rv
dHlwZSwgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXI6OnByb3RvdHlw
ZSh2bSwgZ2xvYmFsT2JqZWN0KSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8
IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0
ZTo6RG9udEVudW0pOwotICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwg
anNOb250cml2aWFsU3RyaW5nKCZ2bSwgU3RyaW5nKCJUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVy
V2l0aElkZW50aWZpZXIiX3MpKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBK
U0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5w
cm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcodm0sIFN0cmluZygiVGVzdE5h
bWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyIl9zKSksIEpTQzo6UHJvcGVydHlBdHRy
aWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwogICAg
IHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigwKSwgSlND
OjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpE
b250RW51bSk7CiB9CiAKQEAgLTE3NSw2ICsxNzUsNyBAQCBib29sIEpTVGVzdE5hbWVkQW5kSW5k
ZXhlZFNldHRlcldpdGhJZGVuCiAKIGJvb2wgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0
aElkZW50aWZpZXI6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmplY3QqIG9iamVjdCwg
RXhlY1N0YXRlKiBzdGF0ZSwgdW5zaWduZWQgaW5kZXgsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsK
KyAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0
PEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyKj4ob2JqZWN0KTsKICAg
ICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgaWYg
KExJS0VMWShpbmRleCA8PSBNQVhfQVJSQVlfSU5ERVgpKSB7CkBAIC0xODUsNyArMTg2LDcgQEAg
Ym9vbCBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbgogICAgICAgICB9CiAgICAg
ICAgIHJldHVybiBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChvYmplY3QsIHN0
YXRlLCBpbmRleCwgc2xvdCk7CiAgICAgfQotICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRp
Zmllcjo6ZnJvbShzdGF0ZSwgaW5kZXgpOworICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRp
Zmllcjo6ZnJvbSh2bSwgaW5kZXgpOwogICAgIHVzaW5nIEdldHRlcklETFR5cGUgPSBJRExET01T
dHJpbmc7CiAgICAgYXV0byBnZXR0ZXJGdW5jdG9yID0gW10gKGF1dG8mIHRoaXNPYmplY3QsIGF1
dG8gcHJvcGVydHlOYW1lKSAtPiBPcHRpb25hbDx0eXBlbmFtZSBHZXR0ZXJJRExUeXBlOjpJbXBs
ZW1lbnRhdGlvblR5cGU+IHsKICAgICAgICAgYXV0byByZXN1bHQgPSB0aGlzT2JqZWN0LndyYXBw
ZWQoKS5uYW1lZEl0ZW0ocHJvcGVydHlOYW1lVG9BdG9tU3RyaW5nKHByb3BlcnR5TmFtZSkpOwpA
QCAtMjAzLDEyICsyMDQsMTMgQEAgYm9vbCBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRo
SWRlbgogCiB2b2lkIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyOjpn
ZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogc3RhdGUsIFBy
b3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsK
KyAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0
PEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyKj4ob2JqZWN0KTsKICAg
ICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKG9iamVjdCwgaW5mbygpKTsKICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwLCBjb3VudCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKS5sZW5ndGgoKTsgaSA8
IGNvdW50OyArK2kpCi0gICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb20o
c3RhdGUsIGkpKTsKKyAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbSh2
bSwgaSkpOwogICAgIGZvciAoYXV0byYgcHJvcGVydHlOYW1lIDogdGhpc09iamVjdC0+d3JhcHBl
ZCgpLnN1cHBvcnRlZFByb3BlcnR5TmFtZXMoKSkKLSAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQo
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyhzdGF0ZSwgcHJvcGVydHlOYW1lKSk7CisgICAgICAgIHBy
b3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHByb3BlcnR5TmFtZSkp
OwogICAgIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgc3RhdGUsIHByb3Bl
cnR5TmFtZXMsIG1vZGUpOwogfQogCkBAIC0yNDIsNiArMjQ0LDcgQEAgYm9vbCBKU1Rlc3ROYW1l
ZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbgogCiBib29sIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNl
dHRlcldpdGhJZGVudGlmaWVyOjpwdXRCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBz
dGF0ZSwgdW5zaWduZWQgaW5kZXgsIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCiB7
CisgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2Fz
dDxKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcio+KGNlbGwpOwogICAg
IEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKIApAQCAtMjUz
LDkgKzI1Niw5IEBAIGJvb2wgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW4KICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVu
dGlmaWVyOjpmcm9tKHN0YXRlLCBpbmRleCk7CisgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVu
dGlmaWVyOjpmcm9tKHZtLCBpbmRleCk7CiAgICAgUHJvcGVydHlTbG90IHNsb3QgeyB0aGlzT2Jq
ZWN0LCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6Vk1JbnF1aXJ5IH07Ci0gICAg
SlNWYWx1ZSBwcm90b3R5cGUgPSB0aGlzT2JqZWN0LT5nZXRQcm90b3R5cGVEaXJlY3Qoc3RhdGUt
PnZtKCkpOworICAgIEpTVmFsdWUgcHJvdG90eXBlID0gdGhpc09iamVjdC0+Z2V0UHJvdG90eXBl
RGlyZWN0KHZtKTsKICAgICBpZiAoIShwcm90b3R5cGUuaXNPYmplY3QoKSAmJiBhc09iamVjdChw
cm90b3R5cGUpLT5nZXRQcm9wZXJ0eVNsb3Qoc3RhdGUsIHByb3BlcnR5TmFtZSwgc2xvdCkpKSB7
CiAgICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoc3RhdGUtPnZt
KCkpOwogICAgICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KCpz
dGF0ZSwgdmFsdWUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdE5hbWVkQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZENvbnN0cnVjdG9yLmNwcAko
cmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdE5hbWVkQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Miw3ICs4
Miw3IEBAIHRlbXBsYXRlPD4gSlNWYWx1ZSBKU1Rlc3ROYW1lZENvbnN0cnVjdG8KIHRlbXBsYXRl
PD4gdm9pZCBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9w
ZXJ0aWVzKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKIHsKICAgICBw
dXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgSlNUZXN0TmFtZWRDb25z
dHJ1Y3Rvcjo6cHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QpLCBKU0M6OlByb3BlcnR5QXR0cmli
dXRlOjpEb250RGVsZXRlIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6
OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7Ci0gICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9w
ZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcoJnZtLCBTdHJpbmcoIlRlc3ROYW1l
ZENvbnN0cnVjdG9yIl9zKSksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlND
OjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJv
cGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKHZtLCBTdHJpbmcoIlRlc3ROYW1l
ZENvbnN0cnVjdG9yIl9zKSksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlND
OjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJv
cGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigwKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6
UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CiB9CiAKQEAgLTEx
Niw3ICsxMTYsNyBAQCB0ZW1wbGF0ZTw+IEpTVmFsdWUgSlNUZXN0TmFtZWRDb25zdHJ1Y3RvCiB0
ZW1wbGF0ZTw+IHZvaWQgSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvck5hbWVkQ29uc3RydWN0b3I6Omlu
aXRpYWxpemVQcm9wZXJ0aWVzKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVj
dCkKIHsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgSlNU
ZXN0TmFtZWRDb25zdHJ1Y3Rvcjo6cHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QpLCBKU0M6OlBy
b3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVh
ZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7Ci0gICAgcHV0RGlyZWN0
KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcoJnZtLCBTdHJp
bmcoIkF1ZGlvIl9zKSksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQ
cm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVy
dHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKHZtLCBTdHJpbmcoIkF1ZGlvIl9zKSks
IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0
ZTo6RG9udEVudW0pOwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3Ro
LCBqc051bWJlcigwKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlBy
b3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZERlbGV0ZXJOb0lkZW50aWZpZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3ROYW1lZERlbGV0ZXJOb0lkZW50aWZpZXIuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxldGVy
Tm9JZGVudGlmaWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODAsNyArODAsNyBAQCB0ZW1wbGF0
ZTw+IEpTVmFsdWUgSlNUZXN0TmFtZWREZWxldGVyTm9JCiB0ZW1wbGF0ZTw+IHZvaWQgSlNUZXN0
TmFtZWREZWxldGVyTm9JZGVudGlmaWVyQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVz
KFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKIHsKICAgICBwdXREaXJl
Y3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgSlNUZXN0TmFtZWREZWxldGVyTm9J
ZGVudGlmaWVyOjpwcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCksIEpTQzo6UHJvcGVydHlBdHRy
aWJ1dGU6OkRvbnREZWxldGUgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpT
Qzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKLSAgICBwdXREaXJlY3Qodm0sIHZtLnBy
b3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZygmdm0sIFN0cmluZygiVGVzdE5h
bWVkRGVsZXRlck5vSWRlbnRpZmllciJfcykpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFk
T25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKKyAgICBwdXREaXJlY3Qo
dm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZyh2bSwgU3RyaW5n
KCJUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVyIl9zKSksIEpTQzo6UHJvcGVydHlBdHRyaWJ1
dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwogICAgIHB1
dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigwKSwgSlNDOjpQ
cm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250
RW51bSk7CiB9CiAKQEAgLTE1Nyw5ICsxNTcsMTAgQEAgYm9vbCBKU1Rlc3ROYW1lZERlbGV0ZXJO
b0lkZW50aWZpZXI6OmdldAogCiBib29sIEpTVGVzdE5hbWVkRGVsZXRlck5vSWRlbnRpZmllcjo6
Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIHN0
YXRlLCB1bnNpZ25lZCBpbmRleCwgUHJvcGVydHlTbG90JiBzbG90KQogeworICAgIFZNJiB2bSA9
IHN0YXRlLT52bSgpOwogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWRE
ZWxldGVyTm9JZGVudGlmaWVyKj4ob2JqZWN0KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKHRoaXNPYmplY3QsIGluZm8oKSk7Ci0gICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlm
aWVyOjpmcm9tKHN0YXRlLCBpbmRleCk7CisgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlm
aWVyOjpmcm9tKHZtLCBpbmRleCk7CiAgICAgdXNpbmcgR2V0dGVySURMVHlwZSA9IElETERPTVN0
cmluZzsKICAgICBhdXRvIGdldHRlckZ1bmN0b3IgPSBbXSAoYXV0byYgdGhpc09iamVjdCwgYXV0
byBwcm9wZXJ0eU5hbWUpIC0+IE9wdGlvbmFsPHR5cGVuYW1lIEdldHRlcklETFR5cGU6OkltcGxl
bWVudGF0aW9uVHlwZT4gewogICAgICAgICBhdXRvIHJlc3VsdCA9IHRoaXNPYmplY3Qud3JhcHBl
ZCgpLm5hbWVkSXRlbShwcm9wZXJ0eU5hbWVUb0F0b21TdHJpbmcocHJvcGVydHlOYW1lKSk7CkBA
IC0xNzcsMTAgKzE3OCwxMSBAQCBib29sIEpTVGVzdE5hbWVkRGVsZXRlck5vSWRlbnRpZmllcjo6
Z2V0CiAKIHZvaWQgSlNUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVyOjpnZXRPd25Qcm9wZXJ0
eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogc3RhdGUsIFByb3BlcnR5TmFtZUFy
cmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKKyAgICBWTSYgdm0g
PSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVk
RGVsZXRlck5vSWRlbnRpZmllcio+KG9iamVjdCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhF
UklUUyhvYmplY3QsIGluZm8oKSk7CiAgICAgZm9yIChhdXRvJiBwcm9wZXJ0eU5hbWUgOiB0aGlz
T2JqZWN0LT53cmFwcGVkKCkuc3VwcG9ydGVkUHJvcGVydHlOYW1lcygpKQotICAgICAgICBwcm9w
ZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHN0YXRlLCBwcm9wZXJ0eU5hbWUp
KTsKKyAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwg
cHJvcGVydHlOYW1lKSk7CiAgICAgSlNPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0
LCBzdGF0ZSwgcHJvcGVydHlOYW1lcywgbW9kZSk7CiB9CiAKQEAgLTE5OCw3ICsyMDAsOCBAQCBi
b29sIEpTVGVzdE5hbWVkRGVsZXRlck5vSWRlbnRpZmllcjo6ZGVsCiB7CiAgICAgYXV0byYgdGhp
c09iamVjdCA9ICpqc0Nhc3Q8SlNUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVyKj4oY2VsbCk7
CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIGF1dG8gcHJvcGVy
dHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbShzdGF0ZSwgaW5kZXgpOworICAgIFZNJiB2bSA9IHN0
YXRlLT52bSgpOworICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbSh2bSwg
aW5kZXgpOwogICAgIGlmIChpc1Zpc2libGVOYW1lZFByb3BlcnR5PE92ZXJyaWRlQnVpbHRpbnM6
Ok5vPigqc3RhdGUsIHRoaXNPYmplY3QsIHByb3BlcnR5TmFtZSkpIHsKICAgICAgICAgcmV0dXJu
IGltcGwuZGVsZXRlTmFtZWRQcm9wZXJ0eShwcm9wZXJ0eU5hbWVUb1N0cmluZyhwcm9wZXJ0eU5h
bWUpKTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0TmFtZWREZWxldGVyVGhyb3dpbmdFeGNlcHRpb24uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZERlbGV0
ZXJUaHJvd2luZ0V4Y2VwdGlvbi5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4
Y2VwdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwLDcgKzgwLDcgQEAgdGVtcGxhdGU8PiBK
U1ZhbHVlIEpTVGVzdE5hbWVkRGVsZXRlclRocgogdGVtcGxhdGU8PiB2b2lkIEpTVGVzdE5hbWVk
RGVsZXRlclRocm93aW5nRXhjZXB0aW9uQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVz
KFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKIHsKICAgICBwdXREaXJl
Y3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgSlNUZXN0TmFtZWREZWxldGVyVGhy
b3dpbmdFeGNlcHRpb246OnByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KSwgSlNDOjpQcm9wZXJ0
eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5
IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwotICAgIHB1dERpcmVjdCh2bSwg
dm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKCZ2bSwgU3RyaW5nKCJU
ZXN0TmFtZWREZWxldGVyVGhyb3dpbmdFeGNlcHRpb24iX3MpKSwgSlNDOjpQcm9wZXJ0eUF0dHJp
YnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CisgICAg
cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmco
dm0sIFN0cmluZygiVGVzdE5hbWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9uIl9zKSksIEpTQzo6
UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9u
dEVudW0pOwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051
bWJlcigwKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5
QXR0cmlidXRlOjpEb250RW51bSk7CiB9CiAKQEAgLTE1Nyw5ICsxNTcsMTAgQEAgYm9vbCBKU1Rl
c3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbgogCiBib29sIEpTVGVzdE5hbWVkRGVsZXRl
clRocm93aW5nRXhjZXB0aW9uOjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTT2JqZWN0KiBv
YmplY3QsIEV4ZWNTdGF0ZSogc3RhdGUsIHVuc2lnbmVkIGluZGV4LCBQcm9wZXJ0eVNsb3QmIHNs
b3QpCiB7CisgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byogdGhpc09iamVjdCA9
IGpzQ2FzdDxKU1Rlc3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbio+KG9iamVjdCk7CiAg
ICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwotICAgIGF1
dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbShzdGF0ZSwgaW5kZXgpOworICAgIGF1
dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbSh2bSwgaW5kZXgpOwogICAgIHVzaW5n
IEdldHRlcklETFR5cGUgPSBJRExET01TdHJpbmc7CiAgICAgYXV0byBnZXR0ZXJGdW5jdG9yID0g
W10gKGF1dG8mIHRoaXNPYmplY3QsIGF1dG8gcHJvcGVydHlOYW1lKSAtPiBPcHRpb25hbDx0eXBl
bmFtZSBHZXR0ZXJJRExUeXBlOjpJbXBsZW1lbnRhdGlvblR5cGU+IHsKICAgICAgICAgYXV0byBy
ZXN1bHQgPSB0aGlzT2JqZWN0LndyYXBwZWQoKS5uYW1lZEl0ZW0ocHJvcGVydHlOYW1lVG9BdG9t
U3RyaW5nKHByb3BlcnR5TmFtZSkpOwpAQCAtMTc3LDEwICsxNzgsMTEgQEAgYm9vbCBKU1Rlc3RO
YW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbgogCiB2b2lkIEpTVGVzdE5hbWVkRGVsZXRlclRo
cm93aW5nRXhjZXB0aW9uOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4
ZWNTdGF0ZSogc3RhdGUsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJh
dGlvbk1vZGUgbW9kZSkKIHsKKyAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvKiB0
aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9uKj4o
b2JqZWN0KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKG9iamVjdCwgaW5mbygpKTsK
ICAgICBmb3IgKGF1dG8mIHByb3BlcnR5TmFtZSA6IHRoaXNPYmplY3QtPndyYXBwZWQoKS5zdXBw
b3J0ZWRQcm9wZXJ0eU5hbWVzKCkpCi0gICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZp
ZXI6OmZyb21TdHJpbmcoc3RhdGUsIHByb3BlcnR5TmFtZSkpOworICAgICAgICBwcm9wZXJ0eU5h
bWVzLmFkZChJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBwcm9wZXJ0eU5hbWUpKTsKICAgICBK
U09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIHN0YXRlLCBwcm9wZXJ0eU5hbWVz
LCBtb2RlKTsKIH0KIApAQCAtMjA1LDcgKzIwNyw4IEBAIGJvb2wgSlNUZXN0TmFtZWREZWxldGVy
VGhyb3dpbmdFeGNlcHRpb24KIHsKICAgICBhdXRvJiB0aGlzT2JqZWN0ID0gKmpzQ2FzdDxKU1Rl
c3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbio+KGNlbGwpOwogICAgIGF1dG8mIGltcGwg
PSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZp
ZXI6OmZyb20oc3RhdGUsIGluZGV4KTsKKyAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKKyAgICBh
dXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb20odm0sIGluZGV4KTsKICAgICBpZiAo
aXNWaXNpYmxlTmFtZWRQcm9wZXJ0eTxPdmVycmlkZUJ1aWx0aW5zOjpObz4oKnN0YXRlLCB0aGlz
T2JqZWN0LCBwcm9wZXJ0eU5hbWUpKSB7CiAgICAgICAgIGF1dG8gcmVzdWx0ID0gaW1wbC5kZWxl
dGVOYW1lZFByb3BlcnR5KHByb3BlcnR5TmFtZVRvU3RyaW5nKHByb3BlcnR5TmFtZSkpOwogICAg
ICAgICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllci5jcHAJKHJldmlzaW9uIDI0OTEyOCkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZERl
bGV0ZXJXaXRoSWRlbnRpZmllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1LDcgKzg1LDcgQEAg
dGVtcGxhdGU8PiBKU1ZhbHVlIEpTVGVzdE5hbWVkRGVsZXRlcldpdAogdGVtcGxhdGU8PiB2b2lk
IEpTVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyQ29uc3RydWN0b3I6OmluaXRpYWxpemVQ
cm9wZXJ0aWVzKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKIHsKICAg
ICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgSlNUZXN0TmFtZWRE
ZWxldGVyV2l0aElkZW50aWZpZXI6OnByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KSwgSlNDOjpQ
cm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJl
YWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwotICAgIHB1dERpcmVj
dCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKCZ2bSwgU3Ry
aW5nKCJUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXIiX3MpKSwgSlNDOjpQcm9wZXJ0eUF0
dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7Cisg
ICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJp
bmcodm0sIFN0cmluZygiVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyIl9zKSksIEpTQzo6
UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9u
dEVudW0pOwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051
bWJlcigwKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5
QXR0cmlidXRlOjpEb250RW51bSk7CiB9CiAKQEAgLTE2Myw5ICsxNjMsMTAgQEAgYm9vbCBKU1Rl
c3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllcjo6ZwogCiBib29sIEpTVGVzdE5hbWVkRGVsZXRl
cldpdGhJZGVudGlmaWVyOjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTT2JqZWN0KiBvYmpl
Y3QsIEV4ZWNTdGF0ZSogc3RhdGUsIHVuc2lnbmVkIGluZGV4LCBQcm9wZXJ0eVNsb3QmIHNsb3Qp
CiB7CisgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpz
Q2FzdDxKU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllcio+KG9iamVjdCk7CiAgICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwotICAgIGF1dG8gcHJv
cGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbShzdGF0ZSwgaW5kZXgpOworICAgIGF1dG8gcHJv
cGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbSh2bSwgaW5kZXgpOwogICAgIHVzaW5nIEdldHRl
cklETFR5cGUgPSBJRExET01TdHJpbmc7CiAgICAgYXV0byBnZXR0ZXJGdW5jdG9yID0gW10gKGF1
dG8mIHRoaXNPYmplY3QsIGF1dG8gcHJvcGVydHlOYW1lKSAtPiBPcHRpb25hbDx0eXBlbmFtZSBH
ZXR0ZXJJRExUeXBlOjpJbXBsZW1lbnRhdGlvblR5cGU+IHsKICAgICAgICAgYXV0byByZXN1bHQg
PSB0aGlzT2JqZWN0LndyYXBwZWQoKS5uYW1lZEl0ZW0ocHJvcGVydHlOYW1lVG9BdG9tU3RyaW5n
KHByb3BlcnR5TmFtZSkpOwpAQCAtMTgzLDEwICsxODQsMTEgQEAgYm9vbCBKU1Rlc3ROYW1lZERl
bGV0ZXJXaXRoSWRlbnRpZmllcjo6ZwogCiB2b2lkIEpTVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVu
dGlmaWVyOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSog
c3RhdGUsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUg
bW9kZSkKIHsKKyAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvKiB0aGlzT2JqZWN0
ID0ganNDYXN0PEpTVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyKj4ob2JqZWN0KTsKICAg
ICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKG9iamVjdCwgaW5mbygpKTsKICAgICBmb3IgKGF1
dG8mIHByb3BlcnR5TmFtZSA6IHRoaXNPYmplY3QtPndyYXBwZWQoKS5zdXBwb3J0ZWRQcm9wZXJ0
eU5hbWVzKCkpCi0gICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb21TdHJp
bmcoc3RhdGUsIHByb3BlcnR5TmFtZSkpOworICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBwcm9wZXJ0eU5hbWUpKTsKICAgICBKU09iamVjdDo6Z2V0
T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIHN0YXRlLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKIH0K
IApAQCAtMjA1LDcgKzIwNyw4IEBAIGJvb2wgSlNUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZp
ZXI6OmQKIHsKICAgICBhdXRvJiB0aGlzT2JqZWN0ID0gKmpzQ2FzdDxKU1Rlc3ROYW1lZERlbGV0
ZXJXaXRoSWRlbnRpZmllcio+KGNlbGwpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0Lndy
YXBwZWQoKTsKLSAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb20oc3RhdGUs
IGluZGV4KTsKKyAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKKyAgICBhdXRvIHByb3BlcnR5TmFt
ZSA9IElkZW50aWZpZXI6OmZyb20odm0sIGluZGV4KTsKICAgICBpZiAoaXNWaXNpYmxlTmFtZWRQ
cm9wZXJ0eTxPdmVycmlkZUJ1aWx0aW5zOjpObz4oKnN0YXRlLCB0aGlzT2JqZWN0LCBwcm9wZXJ0
eU5hbWUpKSB7CiAgICAgICAgIGltcGwubmFtZWREZWxldGVyKHByb3BlcnR5TmFtZVRvU3RyaW5n
KHByb3BlcnR5TmFtZSkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhl
ZEdldHRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVkR2V0dGVyLmNwcAkocmV2aXNp
b24gMjQ5MTI4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVkR2V0dGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
ODEsNyArODEsNyBAQCB0ZW1wbGF0ZTw+IEpTVmFsdWUgSlNUZXN0TmFtZWREZWxldGVyV2l0CiB0
ZW1wbGF0ZTw+IHZvaWQgSlNUZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXJDb25zdHJ1
Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMoVk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xv
YmFsT2JqZWN0KQogewogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90
eXBlLCBKU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRlcjo6cHJvdG90eXBlKHZtLCBn
bG9iYWxPYmplY3QpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgSlNDOjpQ
cm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250
RW51bSk7Ci0gICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRy
aXZpYWxTdHJpbmcoJnZtLCBTdHJpbmcoIlRlc3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRl
ciJfcykpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlB
dHRyaWJ1dGU6OkRvbnRFbnVtKTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMt
Pm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZyh2bSwgU3RyaW5nKCJUZXN0TmFtZWREZWxldGVyV2l0
aEluZGV4ZWRHZXR0ZXIiX3MpKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBK
U0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5w
cm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDApLCBKU0M6OlByb3BlcnR5QXR0cmlidXRl
OjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKIH0KIApAQCAt
MTY2LDYgKzE2Niw3IEBAIGJvb2wgSlNUZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXIK
IAogYm9vbCBKU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRlcjo6Z2V0T3duUHJvcGVy
dHlTbG90QnlJbmRleChKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIHN0YXRlLCB1bnNpZ25l
ZCBpbmRleCwgUHJvcGVydHlTbG90JiBzbG90KQogeworICAgIFZNJiB2bSA9IHN0YXRlLT52bSgp
OwogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWREZWxldGVyV2l0aElu
ZGV4ZWRHZXR0ZXIqPihvYmplY3QpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhp
c09iamVjdCwgaW5mbygpKTsKICAgICBpZiAoTElLRUxZKGluZGV4IDw9IE1BWF9BUlJBWV9JTkRF
WCkpIHsKQEAgLTE3Niw3ICsxNzcsNyBAQCBib29sIEpTVGVzdE5hbWVkRGVsZXRlcldpdGhJbmRl
eGVkR2V0dGVyCiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIEpTT2JqZWN0OjpnZXRPd25Qcm9w
ZXJ0eVNsb3RCeUluZGV4KG9iamVjdCwgc3RhdGUsIGluZGV4LCBzbG90KTsKICAgICB9Ci0gICAg
YXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tKHN0YXRlLCBpbmRleCk7CisgICAg
YXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tKHZtLCBpbmRleCk7CiAgICAgdXNp
bmcgR2V0dGVySURMVHlwZSA9IElETERPTVN0cmluZzsKICAgICBhdXRvIGdldHRlckZ1bmN0b3Ig
PSBbXSAoYXV0byYgdGhpc09iamVjdCwgYXV0byBwcm9wZXJ0eU5hbWUpIC0+IE9wdGlvbmFsPHR5
cGVuYW1lIEdldHRlcklETFR5cGU6OkltcGxlbWVudGF0aW9uVHlwZT4gewogICAgICAgICBhdXRv
IHJlc3VsdCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpLm5hbWVkSXRlbShwcm9wZXJ0eU5hbWVUb0F0
b21TdHJpbmcocHJvcGVydHlOYW1lKSk7CkBAIC0xOTQsMTIgKzE5NSwxMyBAQCBib29sIEpTVGVz
dE5hbWVkRGVsZXRlcldpdGhJbmRleGVkR2V0dGVyCiAKIHZvaWQgSlNUZXN0TmFtZWREZWxldGVy
V2l0aEluZGV4ZWRHZXR0ZXI6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwg
RXhlY1N0YXRlKiBzdGF0ZSwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1l
cmF0aW9uTW9kZSBtb2RlKQogeworICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8q
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXIq
PihvYmplY3QpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMob2JqZWN0LCBpbmZvKCkp
OwogICAgIGZvciAodW5zaWduZWQgaSA9IDAsIGNvdW50ID0gdGhpc09iamVjdC0+d3JhcHBlZCgp
Lmxlbmd0aCgpOyBpIDwgY291bnQ7ICsraSkKLSAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRl
bnRpZmllcjo6ZnJvbShzdGF0ZSwgaSkpOworICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVu
dGlmaWVyOjpmcm9tKHZtLCBpKSk7CiAgICAgZm9yIChhdXRvJiBwcm9wZXJ0eU5hbWUgOiB0aGlz
T2JqZWN0LT53cmFwcGVkKCkuc3VwcG9ydGVkUHJvcGVydHlOYW1lcygpKQotICAgICAgICBwcm9w
ZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHN0YXRlLCBwcm9wZXJ0eU5hbWUp
KTsKKyAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwg
cHJvcGVydHlOYW1lKSk7CiAgICAgSlNPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0
LCBzdGF0ZSwgcHJvcGVydHlOYW1lcywgbW9kZSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aC5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEdldHRlckNhbGxXaXRo
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODAsNyArODAsNyBAQCB0ZW1wbGF0ZTw+IEpTVmFsdWUg
SlNUZXN0TmFtZWRHZXR0ZXJDYWxsCiB0ZW1wbGF0ZTw+IHZvaWQgSlNUZXN0TmFtZWRHZXR0ZXJD
YWxsV2l0aENvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGllcyhWTSYgdm0sIEpTRE9NR2xv
YmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCiB7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0
eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGg6OnByb3RvdHlwZSh2
bSwgZ2xvYmFsT2JqZWN0KSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IEpT
Qzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6
RG9udEVudW0pOwotICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNO
b250cml2aWFsU3RyaW5nKCZ2bSwgU3RyaW5nKCJUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aCJfcykp
LCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1
dGU6OkRvbnRFbnVtKTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUs
IGpzTm9udHJpdmlhbFN0cmluZyh2bSwgU3RyaW5nKCJUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aCJf
cykpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRy
aWJ1dGU6OkRvbnRFbnVtKTsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxl
bmd0aCwganNOdW1iZXIoMCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlND
OjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwogfQogCkBAIC0xNTcsOSArMTU3LDEwIEBA
IGJvb2wgSlNUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aDo6Z2V0T3duUHIKIAogYm9vbCBKU1Rlc3RO
YW1lZEdldHRlckNhbGxXaXRoOjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTT2JqZWN0KiBv
YmplY3QsIEV4ZWNTdGF0ZSogc3RhdGUsIHVuc2lnbmVkIGluZGV4LCBQcm9wZXJ0eVNsb3QmIHNs
b3QpCiB7CisgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byogdGhpc09iamVjdCA9
IGpzQ2FzdDxKU1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoKj4ob2JqZWN0KTsKICAgICBBU1NFUlRf
R0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7Ci0gICAgYXV0byBwcm9wZXJ0
eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tKHN0YXRlLCBpbmRleCk7CisgICAgYXV0byBwcm9wZXJ0
eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tKHZtLCBpbmRleCk7CiAgICAgdXNpbmcgR2V0dGVySURM
VHlwZSA9IElETERPTVN0cmluZzsKICAgICBhdXRvIGdldHRlckZ1bmN0b3IgPSBbXSAoYXV0byYg
dGhpc09iamVjdCwgYXV0byBwcm9wZXJ0eU5hbWUpIC0+IE9wdGlvbmFsPHR5cGVuYW1lIEdldHRl
cklETFR5cGU6OkltcGxlbWVudGF0aW9uVHlwZT4gewogICAgICAgICBhdXRvIHJlc3VsdCA9IHRo
aXNPYmplY3Qud3JhcHBlZCgpLm5hbWVkSXRlbSh3b3JsZEZvckRPTU9iamVjdCh0aGlzT2JqZWN0
KSwgcHJvcGVydHlOYW1lVG9BdG9tU3RyaW5nKHByb3BlcnR5TmFtZSkpOwpAQCAtMTc3LDEwICsx
NzgsMTEgQEAgYm9vbCBKU1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoOjpnZXRPd25QcgogCiB2b2lk
IEpTVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGg6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3Qq
IG9iamVjdCwgRXhlY1N0YXRlKiBzdGF0ZSwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFt
ZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQogeworICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwog
ICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aCo+
KG9iamVjdCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhvYmplY3QsIGluZm8oKSk7
CiAgICAgZm9yIChhdXRvJiBwcm9wZXJ0eU5hbWUgOiB0aGlzT2JqZWN0LT53cmFwcGVkKCkuc3Vw
cG9ydGVkUHJvcGVydHlOYW1lcygpKQotICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKHN0YXRlLCBwcm9wZXJ0eU5hbWUpKTsKKyAgICAgICAgcHJvcGVydHlO
YW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcHJvcGVydHlOYW1lKSk7CiAgICAg
SlNPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBzdGF0ZSwgcHJvcGVydHlOYW1l
cywgbW9kZSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkR2V0dGVyTm9J
ZGVudGlmaWVyLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtODAsNyArODAsNyBAQCB0ZW1wbGF0ZTw+IEpTVmFsdWUgSlNUZXN0TmFt
ZWRHZXR0ZXJOb0lkCiB0ZW1wbGF0ZTw+IHZvaWQgSlNUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZp
ZXJDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMoVk0mIHZtLCBKU0RPTUdsb2JhbE9i
amVjdCYgZ2xvYmFsT2JqZWN0KQogewogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1l
cy0+cHJvdG90eXBlLCBKU1Rlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllcjo6cHJvdG90eXBlKHZt
LCBnbG9iYWxPYmplY3QpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgSlND
OjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpE
b250RW51bSk7Ci0gICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05v
bnRyaXZpYWxTdHJpbmcoJnZtLCBTdHJpbmcoIlRlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllciJf
cykpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRy
aWJ1dGU6OkRvbnRFbnVtKTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm5h
bWUsIGpzTm9udHJpdmlhbFN0cmluZyh2bSwgU3RyaW5nKCJUZXN0TmFtZWRHZXR0ZXJOb0lkZW50
aWZpZXIiX3MpKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3Bl
cnR5QXR0cmlidXRlOjpEb250RW51bSk7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5h
bWVzLT5sZW5ndGgsIGpzTnVtYmVyKDApLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25s
eSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKIH0KIApAQCAtMTU3LDkgKzE1
NywxMCBAQCBib29sIEpTVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyOjpnZXRPCiAKIGJvb2wg
SlNUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXI6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgo
SlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBzdGF0ZSwgdW5zaWduZWQgaW5kZXgsIFByb3Bl
cnR5U2xvdCYgc2xvdCkKIHsKKyAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvKiB0
aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyKj4ob2JqZWN0
KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7Ci0g
ICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tKHN0YXRlLCBpbmRleCk7Cisg
ICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tKHZtLCBpbmRleCk7CiAgICAg
dXNpbmcgR2V0dGVySURMVHlwZSA9IElETERPTVN0cmluZzsKICAgICBhdXRvIGdldHRlckZ1bmN0
b3IgPSBbXSAoYXV0byYgdGhpc09iamVjdCwgYXV0byBwcm9wZXJ0eU5hbWUpIC0+IE9wdGlvbmFs
PHR5cGVuYW1lIEdldHRlcklETFR5cGU6OkltcGxlbWVudGF0aW9uVHlwZT4gewogICAgICAgICBh
dXRvIHJlc3VsdCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpLm5hbWVkSXRlbShwcm9wZXJ0eU5hbWVU
b0F0b21TdHJpbmcocHJvcGVydHlOYW1lKSk7CkBAIC0xNzcsMTAgKzE3OCwxMSBAQCBib29sIEpT
VGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyOjpnZXRPCiAKIHZvaWQgSlNUZXN0TmFtZWRHZXR0
ZXJOb0lkZW50aWZpZXI6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhl
Y1N0YXRlKiBzdGF0ZSwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0
aW9uTW9kZSBtb2RlKQogeworICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8qIHRo
aXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXIqPihvYmplY3Qp
OwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMob2JqZWN0LCBpbmZvKCkpOwogICAgIGZv
ciAoYXV0byYgcHJvcGVydHlOYW1lIDogdGhpc09iamVjdC0+d3JhcHBlZCgpLnN1cHBvcnRlZFBy
b3BlcnR5TmFtZXMoKSkKLSAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyhzdGF0ZSwgcHJvcGVydHlOYW1lKSk7CisgICAgICAgIHByb3BlcnR5TmFtZXMuYWRk
KElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHByb3BlcnR5TmFtZSkpOwogICAgIEpTT2JqZWN0
OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgc3RhdGUsIHByb3BlcnR5TmFtZXMsIG1vZGUp
OwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50
aWZpZXIuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTg1LDcgKzg1LDcgQEAgdGVtcGxhdGU8PiBKU1ZhbHVlIEpTVGVzdE5hbWVk
R2V0dGVyV2l0aAogdGVtcGxhdGU8PiB2b2lkIEpTVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZp
ZXJDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMoVk0mIHZtLCBKU0RPTUdsb2JhbE9i
amVjdCYgZ2xvYmFsT2JqZWN0KQogewogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1l
cy0+cHJvdG90eXBlLCBKU1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyOjpwcm90b3R5cGUo
dm0sIGdsb2JhbE9iamVjdCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUgfCBK
U0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6
OkRvbnRFbnVtKTsKLSAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpz
Tm9udHJpdmlhbFN0cmluZygmdm0sIFN0cmluZygiVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZp
ZXIiX3MpKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5
QXR0cmlidXRlOjpEb250RW51bSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVz
LT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcodm0sIFN0cmluZygiVGVzdE5hbWVkR2V0dGVyV2l0
aElkZW50aWZpZXIiX3MpKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6
OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9w
ZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDApLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpS
ZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKIH0KIApAQCAtMTYz
LDkgKzE2MywxMCBAQCBib29sIEpTVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXI6OmdlCiAK
IGJvb2wgSlNUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllcjo6Z2V0T3duUHJvcGVydHlTbG90
QnlJbmRleChKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIHN0YXRlLCB1bnNpZ25lZCBpbmRl
eCwgUHJvcGVydHlTbG90JiBzbG90KQogeworICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAg
IGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmll
cio+KG9iamVjdCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBp
bmZvKCkpOwotICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbShzdGF0ZSwg
aW5kZXgpOworICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbSh2bSwgaW5k
ZXgpOwogICAgIHVzaW5nIEdldHRlcklETFR5cGUgPSBJRExET01TdHJpbmc7CiAgICAgYXV0byBn
ZXR0ZXJGdW5jdG9yID0gW10gKGF1dG8mIHRoaXNPYmplY3QsIGF1dG8gcHJvcGVydHlOYW1lKSAt
PiBPcHRpb25hbDx0eXBlbmFtZSBHZXR0ZXJJRExUeXBlOjpJbXBsZW1lbnRhdGlvblR5cGU+IHsK
ICAgICAgICAgYXV0byByZXN1bHQgPSB0aGlzT2JqZWN0LndyYXBwZWQoKS5nZXR0ZXJOYW1lKHBy
b3BlcnR5TmFtZVRvQXRvbVN0cmluZyhwcm9wZXJ0eU5hbWUpKTsKQEAgLTE4MywxMCArMTg0LDEx
IEBAIGJvb2wgSlNUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllcjo6Z2UKIAogdm9pZCBKU1Rl
c3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0
KiBvYmplY3QsIEV4ZWNTdGF0ZSogc3RhdGUsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5h
bWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKKyAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsK
ICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50
aWZpZXIqPihvYmplY3QpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMob2JqZWN0LCBp
bmZvKCkpOwogICAgIGZvciAoYXV0byYgcHJvcGVydHlOYW1lIDogdGhpc09iamVjdC0+d3JhcHBl
ZCgpLnN1cHBvcnRlZFByb3BlcnR5TmFtZXMoKSkKLSAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQo
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyhzdGF0ZSwgcHJvcGVydHlOYW1lKSk7CisgICAgICAgIHBy
b3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHByb3BlcnR5TmFtZSkp
OwogICAgIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgc3RhdGUsIHByb3Bl
cnR5TmFtZXMsIG1vZGUpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNl
dHRlck5vSWRlbnRpZmllci5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTgwLDcgKzgwLDcgQEAgdGVtcGxhdGU8PiBKU1ZhbHVlIEpT
VGVzdE5hbWVkU2V0dGVyTm9JZAogdGVtcGxhdGU8PiB2b2lkIEpTVGVzdE5hbWVkU2V0dGVyTm9J
ZGVudGlmaWVyQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKFZNJiB2bSwgSlNET01H
bG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKIHsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3Bl
cnR5TmFtZXMtPnByb3RvdHlwZSwgSlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXI6OnByb3Rv
dHlwZSh2bSwgZ2xvYmFsT2JqZWN0KSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0
ZSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJp
YnV0ZTo6RG9udEVudW0pOwotICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFt
ZSwganNOb250cml2aWFsU3RyaW5nKCZ2bSwgU3RyaW5nKCJUZXN0TmFtZWRTZXR0ZXJOb0lkZW50
aWZpZXIiX3MpKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3Bl
cnR5QXR0cmlidXRlOjpEb250RW51bSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5h
bWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcodm0sIFN0cmluZygiVGVzdE5hbWVkU2V0dGVy
Tm9JZGVudGlmaWVyIl9zKSksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlND
OjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJv
cGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigwKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6
UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CiB9CiAKQEAgLTE1
Nyw5ICsxNTcsMTAgQEAgYm9vbCBKU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllcjo6Z2V0Twog
CiBib29sIEpTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyOjpnZXRPd25Qcm9wZXJ0eVNsb3RC
eUluZGV4KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogc3RhdGUsIHVuc2lnbmVkIGluZGV4
LCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CisgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAg
YXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllcio+
KG9iamVjdCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZv
KCkpOwotICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbShzdGF0ZSwgaW5k
ZXgpOworICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbSh2bSwgaW5kZXgp
OwogICAgIHVzaW5nIEdldHRlcklETFR5cGUgPSBJRExET01TdHJpbmc7CiAgICAgYXV0byBnZXR0
ZXJGdW5jdG9yID0gW10gKGF1dG8mIHRoaXNPYmplY3QsIGF1dG8gcHJvcGVydHlOYW1lKSAtPiBP
cHRpb25hbDx0eXBlbmFtZSBHZXR0ZXJJRExUeXBlOjpJbXBsZW1lbnRhdGlvblR5cGU+IHsKICAg
ICAgICAgYXV0byByZXN1bHQgPSB0aGlzT2JqZWN0LndyYXBwZWQoKS5uYW1lZEl0ZW0ocHJvcGVy
dHlOYW1lVG9BdG9tU3RyaW5nKHByb3BlcnR5TmFtZSkpOwpAQCAtMTc3LDEwICsxNzgsMTEgQEAg
Ym9vbCBKU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllcjo6Z2V0TwogCiB2b2lkIEpTVGVzdE5h
bWVkU2V0dGVyTm9JZGVudGlmaWVyOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmpl
Y3QsIEV4ZWNTdGF0ZSogc3RhdGUsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBF
bnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKKyAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBh
dXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyKj4o
b2JqZWN0KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKG9iamVjdCwgaW5mbygpKTsK
ICAgICBmb3IgKGF1dG8mIHByb3BlcnR5TmFtZSA6IHRoaXNPYmplY3QtPndyYXBwZWQoKS5zdXBw
b3J0ZWRQcm9wZXJ0eU5hbWVzKCkpCi0gICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZp
ZXI6OmZyb21TdHJpbmcoc3RhdGUsIHByb3BlcnR5TmFtZSkpOworICAgICAgICBwcm9wZXJ0eU5h
bWVzLmFkZChJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBwcm9wZXJ0eU5hbWUpKTsKICAgICBK
U09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIHN0YXRlLCBwcm9wZXJ0eU5hbWVz
LCBtb2RlKTsKIH0KIApAQCAtMjA2LDEyICsyMDgsMTMgQEAgYm9vbCBKU1Rlc3ROYW1lZFNldHRl
ck5vSWRlbnRpZmllcjo6cHV0KAogCiBib29sIEpTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVy
OjpwdXRCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBzdGF0ZSwgdW5zaWduZWQgaW5k
ZXgsIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCiB7CisgICAgVk0mIHZtID0gc3Rh
dGUtPnZtKCk7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZFNldHRl
ck5vSWRlbnRpZmllcio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhp
c09iamVjdCwgaW5mbygpKTsKIAotICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6
ZnJvbShzdGF0ZSwgaW5kZXgpOworICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6
ZnJvbSh2bSwgaW5kZXgpOwogICAgIFByb3BlcnR5U2xvdCBzbG90IHsgdGhpc09iamVjdCwgUHJv
cGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6OlZNSW5xdWlyeSB9OwotICAgIEpTVmFsdWUg
cHJvdG90eXBlID0gdGhpc09iamVjdC0+Z2V0UHJvdG90eXBlRGlyZWN0KHN0YXRlLT52bSgpKTsK
KyAgICBKU1ZhbHVlIHByb3RvdHlwZSA9IHRoaXNPYmplY3QtPmdldFByb3RvdHlwZURpcmVjdCh2
bSk7CiAgICAgaWYgKCEocHJvdG90eXBlLmlzT2JqZWN0KCkgJiYgYXNPYmplY3QocHJvdG90eXBl
KS0+Z2V0UHJvcGVydHlTbG90KHN0YXRlLCBwcm9wZXJ0eU5hbWUsIHNsb3QpKSkgewogICAgICAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHN0YXRlLT52bSgpKTsKICAg
ICAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqc3RhdGUsIHZh
bHVlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2lu
Z0V4Y2VwdGlvbi5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtODAsNyArODAsNyBAQCB0ZW1wbGF0ZTw+IEpTVmFsdWUgSlNU
ZXN0TmFtZWRTZXR0ZXJUaHJvCiB0ZW1wbGF0ZTw+IHZvaWQgSlNUZXN0TmFtZWRTZXR0ZXJUaHJv
d2luZ0V4Y2VwdGlvbkNvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGllcyhWTSYgdm0sIEpT
RE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCiB7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5w
cm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRp
b246OnByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6
RG9udERlbGV0ZSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9w
ZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwotICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlO
YW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKCZ2bSwgU3RyaW5nKCJUZXN0TmFtZWRTZXR0
ZXJUaHJvd2luZ0V4Y2VwdGlvbiJfcykpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25s
eSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKKyAgICBwdXREaXJlY3Qodm0s
IHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZyh2bSwgU3RyaW5nKCJU
ZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbiJfcykpLCBKU0M6OlByb3BlcnR5QXR0cmli
dXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKICAgICBw
dXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMCksIEpTQzo6
UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9u
dEVudW0pOwogfQogCkBAIC0xNTcsOSArMTU3LDEwIEBAIGJvb2wgSlNUZXN0TmFtZWRTZXR0ZXJU
aHJvd2luZ0V4Y2VwdGlvbjoKIAogYm9vbCBKU1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0
aW9uOjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0
ZSogc3RhdGUsIHVuc2lnbmVkIGluZGV4LCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CisgICAgVk0m
IHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3RO
YW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uKj4ob2JqZWN0KTsKICAgICBBU1NFUlRfR0NfT0JK
RUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7Ci0gICAgYXV0byBwcm9wZXJ0eU5hbWUg
PSBJZGVudGlmaWVyOjpmcm9tKHN0YXRlLCBpbmRleCk7CisgICAgYXV0byBwcm9wZXJ0eU5hbWUg
PSBJZGVudGlmaWVyOjpmcm9tKHZtLCBpbmRleCk7CiAgICAgdXNpbmcgR2V0dGVySURMVHlwZSA9
IElETERPTVN0cmluZzsKICAgICBhdXRvIGdldHRlckZ1bmN0b3IgPSBbXSAoYXV0byYgdGhpc09i
amVjdCwgYXV0byBwcm9wZXJ0eU5hbWUpIC0+IE9wdGlvbmFsPHR5cGVuYW1lIEdldHRlcklETFR5
cGU6OkltcGxlbWVudGF0aW9uVHlwZT4gewogICAgICAgICBhdXRvIHJlc3VsdCA9IHRoaXNPYmpl
Y3Qud3JhcHBlZCgpLm5hbWVkSXRlbShwcm9wZXJ0eU5hbWVUb0F0b21TdHJpbmcocHJvcGVydHlO
YW1lKSk7CkBAIC0xNzcsMTAgKzE3OCwxMSBAQCBib29sIEpTVGVzdE5hbWVkU2V0dGVyVGhyb3dp
bmdFeGNlcHRpb246CiAKIHZvaWQgSlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6
Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIHN0YXRlLCBQ
cm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7
CisgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2Fz
dDxKU1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uKj4ob2JqZWN0KTsKICAgICBBU1NF
UlRfR0NfT0JKRUNUX0lOSEVSSVRTKG9iamVjdCwgaW5mbygpKTsKICAgICBmb3IgKGF1dG8mIHBy
b3BlcnR5TmFtZSA6IHRoaXNPYmplY3QtPndyYXBwZWQoKS5zdXBwb3J0ZWRQcm9wZXJ0eU5hbWVz
KCkpCi0gICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb21TdHJpbmcoc3Rh
dGUsIHByb3BlcnR5TmFtZSkpOworICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKHZtLCBwcm9wZXJ0eU5hbWUpKTsKICAgICBKU09iamVjdDo6Z2V0T3duUHJv
cGVydHlOYW1lcyhvYmplY3QsIHN0YXRlLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKIH0KIApAQCAt
MjA2LDEyICsyMDgsMTMgQEAgYm9vbCBKU1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9u
OgogCiBib29sIEpTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246OnB1dEJ5SW5kZXgo
SlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIHN0YXRlLCB1bnNpZ25lZCBpbmRleCwgSlNWYWx1ZSB2
YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKIHsKKyAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAg
ICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNl
cHRpb24qPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3Qs
IGluZm8oKSk7CiAKLSAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb20oc3Rh
dGUsIGluZGV4KTsKKyAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb20odm0s
IGluZGV4KTsKICAgICBQcm9wZXJ0eVNsb3Qgc2xvdCB7IHRoaXNPYmplY3QsIFByb3BlcnR5U2xv
dDo6SW50ZXJuYWxNZXRob2RUeXBlOjpWTUlucXVpcnkgfTsKLSAgICBKU1ZhbHVlIHByb3RvdHlw
ZSA9IHRoaXNPYmplY3QtPmdldFByb3RvdHlwZURpcmVjdChzdGF0ZS0+dm0oKSk7CisgICAgSlNW
YWx1ZSBwcm90b3R5cGUgPSB0aGlzT2JqZWN0LT5nZXRQcm90b3R5cGVEaXJlY3Qodm0pOwogICAg
IGlmICghKHByb3RvdHlwZS5pc09iamVjdCgpICYmIGFzT2JqZWN0KHByb3RvdHlwZSktPmdldFBy
b3BlcnR5U2xvdChzdGF0ZSwgcHJvcGVydHlOYW1lLCBzbG90KSkpIHsKICAgICAgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShzdGF0ZS0+dm0oKSk7CiAgICAgICAgIGF1
dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKnN0YXRlLCB2YWx1ZSk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRT
ZXR0ZXJXaXRoSWRlbnRpZmllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXIuY3Bw
CShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTg1LDcgKzg1LDcgQEAgdGVtcGxhdGU8PiBKU1ZhbHVlIEpTVGVzdE5hbWVkU2V0dGVyV2l0
aAogdGVtcGxhdGU8PiB2b2lkIEpTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXJDb25zdHJ1
Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMoVk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xv
YmFsT2JqZWN0KQogewogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90
eXBlLCBKU1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyOjpwcm90b3R5cGUodm0sIGdsb2Jh
bE9iamVjdCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUgfCBKU0M6OlByb3Bl
cnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVt
KTsKLSAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlh
bFN0cmluZygmdm0sIFN0cmluZygiVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXIiX3MpKSwg
SlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRl
OjpEb250RW51bSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBq
c05vbnRyaXZpYWxTdHJpbmcodm0sIFN0cmluZygiVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZp
ZXIiX3MpKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5
QXR0cmlidXRlOjpEb250RW51bSk7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVz
LT5sZW5ndGgsIGpzTnVtYmVyKDApLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8
IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKIH0KIApAQCAtMTYzLDkgKzE2Mywx
MCBAQCBib29sIEpTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXI6OmdlCiAKIGJvb2wgSlNU
ZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChK
U09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIHN0YXRlLCB1bnNpZ25lZCBpbmRleCwgUHJvcGVy
dHlTbG90JiBzbG90KQogeworICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8qIHRo
aXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllcio+KG9iamVj
dCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwot
ICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbShzdGF0ZSwgaW5kZXgpOwor
ICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbSh2bSwgaW5kZXgpOwogICAg
IHVzaW5nIEdldHRlcklETFR5cGUgPSBJRExET01TdHJpbmc7CiAgICAgYXV0byBnZXR0ZXJGdW5j
dG9yID0gW10gKGF1dG8mIHRoaXNPYmplY3QsIGF1dG8gcHJvcGVydHlOYW1lKSAtPiBPcHRpb25h
bDx0eXBlbmFtZSBHZXR0ZXJJRExUeXBlOjpJbXBsZW1lbnRhdGlvblR5cGU+IHsKICAgICAgICAg
YXV0byByZXN1bHQgPSB0aGlzT2JqZWN0LndyYXBwZWQoKS5uYW1lZEl0ZW0ocHJvcGVydHlOYW1l
VG9BdG9tU3RyaW5nKHByb3BlcnR5TmFtZSkpOwpAQCAtMTgzLDEwICsxODQsMTEgQEAgYm9vbCBK
U1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyOjpnZQogCiB2b2lkIEpTVGVzdE5hbWVkU2V0
dGVyV2l0aElkZW50aWZpZXI6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwg
RXhlY1N0YXRlKiBzdGF0ZSwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1l
cmF0aW9uTW9kZSBtb2RlKQogeworICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8q
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllcio+KG9i
amVjdCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhvYmplY3QsIGluZm8oKSk7CiAg
ICAgZm9yIChhdXRvJiBwcm9wZXJ0eU5hbWUgOiB0aGlzT2JqZWN0LT53cmFwcGVkKCkuc3VwcG9y
dGVkUHJvcGVydHlOYW1lcygpKQotICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKHN0YXRlLCBwcm9wZXJ0eU5hbWUpKTsKKyAgICAgICAgcHJvcGVydHlOYW1l
cy5hZGQoSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcHJvcGVydHlOYW1lKSk7CiAgICAgSlNP
YmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBzdGF0ZSwgcHJvcGVydHlOYW1lcywg
bW9kZSk7CiB9CiAKQEAgLTIxMiwxMiArMjE0LDEzIEBAIGJvb2wgSlNUZXN0TmFtZWRTZXR0ZXJX
aXRoSWRlbnRpZmllcjo6cHUKIAogYm9vbCBKU1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVy
OjpwdXRCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBzdGF0ZSwgdW5zaWduZWQgaW5k
ZXgsIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCiB7CisgICAgVk0mIHZtID0gc3Rh
dGUtPnZtKCk7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZFNldHRl
cldpdGhJZGVudGlmaWVyKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0
aGlzT2JqZWN0LCBpbmZvKCkpOwogCi0gICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVy
Ojpmcm9tKHN0YXRlLCBpbmRleCk7CisgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVy
Ojpmcm9tKHZtLCBpbmRleCk7CiAgICAgUHJvcGVydHlTbG90IHNsb3QgeyB0aGlzT2JqZWN0LCBQ
cm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6Vk1JbnF1aXJ5IH07Ci0gICAgSlNWYWx1
ZSBwcm90b3R5cGUgPSB0aGlzT2JqZWN0LT5nZXRQcm90b3R5cGVEaXJlY3Qoc3RhdGUtPnZtKCkp
OworICAgIEpTVmFsdWUgcHJvdG90eXBlID0gdGhpc09iamVjdC0+Z2V0UHJvdG90eXBlRGlyZWN0
KHZtKTsKICAgICBpZiAoIShwcm90b3R5cGUuaXNPYmplY3QoKSAmJiBhc09iamVjdChwcm90b3R5
cGUpLT5nZXRQcm9wZXJ0eVNsb3Qoc3RhdGUsIHByb3BlcnR5TmFtZSwgc2xvdCkpKSB7CiAgICAg
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoc3RhdGUtPnZtKCkpOwog
ICAgICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KCpzdGF0ZSwg
dmFsdWUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJ
bmRleGVkR2V0dGVyLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OCw3ICs4OCw3IEBAIHRlbXBsYXRlPD4gSlNWYWx1ZSBK
U1Rlc3ROYW1lZFNldHRlcldpdGgKIHRlbXBsYXRlPD4gdm9pZCBKU1Rlc3ROYW1lZFNldHRlcldp
dGhJbmRleGVkR2V0dGVyQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKFZNJiB2bSwg
SlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKIHsKICAgICBwdXREaXJlY3Qodm0sIHZt
LnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdl
dHRlcjo6cHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRl
OjpEb250RGVsZXRlIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlBy
b3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7Ci0gICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0
eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcoJnZtLCBTdHJpbmcoIlRlc3ROYW1lZFNl
dHRlcldpdGhJbmRleGVkR2V0dGVyIl9zKSksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRP
bmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOworICAgIHB1dERpcmVjdCh2
bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKHZtLCBTdHJpbmco
IlRlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyIl9zKSksIEpTQzo6UHJvcGVydHlBdHRy
aWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwogICAg
IHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigwKSwgSlND
OjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpE
b250RW51bSk7CiB9CiAKQEAgLTE3NSw2ICsxNzUsNyBAQCBib29sIEpTVGVzdE5hbWVkU2V0dGVy
V2l0aEluZGV4ZWRHZXR0ZXI6CiAKIGJvb2wgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdl
dHRlcjo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU09iamVjdCogb2JqZWN0LCBFeGVjU3Rh
dGUqIHN0YXRlLCB1bnNpZ25lZCBpbmRleCwgUHJvcGVydHlTbG90JiBzbG90KQogeworICAgIFZN
JiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0
TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlcio+KG9iamVjdCk7CiAgICAgQVNTRVJUX0dDX09C
SkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogICAgIGlmIChMSUtFTFkoaW5kZXgg
PD0gTUFYX0FSUkFZX0lOREVYKSkgewpAQCAtMTg1LDcgKzE4Niw3IEBAIGJvb2wgSlNUZXN0TmFt
ZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlcjoKICAgICAgICAgfQogICAgICAgICByZXR1cm4gSlNP
YmplY3Q6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgob2JqZWN0LCBzdGF0ZSwgaW5kZXgsIHNs
b3QpOwogICAgIH0KLSAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb20oc3Rh
dGUsIGluZGV4KTsKKyAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb20odm0s
IGluZGV4KTsKICAgICB1c2luZyBHZXR0ZXJJRExUeXBlID0gSURMRE9NU3RyaW5nOwogICAgIGF1
dG8gZ2V0dGVyRnVuY3RvciA9IFtdIChhdXRvJiB0aGlzT2JqZWN0LCBhdXRvIHByb3BlcnR5TmFt
ZSkgLT4gT3B0aW9uYWw8dHlwZW5hbWUgR2V0dGVySURMVHlwZTo6SW1wbGVtZW50YXRpb25UeXBl
PiB7CiAgICAgICAgIGF1dG8gcmVzdWx0ID0gdGhpc09iamVjdC53cmFwcGVkKCkubmFtZWRJdGVt
KHByb3BlcnR5TmFtZVRvQXRvbVN0cmluZyhwcm9wZXJ0eU5hbWUpKTsKQEAgLTIwMywxMiArMjA0
LDEzIEBAIGJvb2wgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlcjoKIAogdm9pZCBK
U1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpT
T2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogc3RhdGUsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9w
ZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKKyAgICBWTSYgdm0gPSBzdGF0ZS0+
dm0oKTsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkU2V0dGVyV2l0
aEluZGV4ZWRHZXR0ZXIqPihvYmplY3QpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMo
b2JqZWN0LCBpbmZvKCkpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDAsIGNvdW50ID0gdGhpc09i
amVjdC0+d3JhcHBlZCgpLmxlbmd0aCgpOyBpIDwgY291bnQ7ICsraSkKLSAgICAgICAgcHJvcGVy
dHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbShzdGF0ZSwgaSkpOworICAgICAgICBwcm9wZXJ0
eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9tKHZtLCBpKSk7CiAgICAgZm9yIChhdXRvJiBwcm9w
ZXJ0eU5hbWUgOiB0aGlzT2JqZWN0LT53cmFwcGVkKCkuc3VwcG9ydGVkUHJvcGVydHlOYW1lcygp
KQotICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHN0YXRl
LCBwcm9wZXJ0eU5hbWUpKTsKKyAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6
ZnJvbVN0cmluZyh2bSwgcHJvcGVydHlOYW1lKSk7CiAgICAgSlNPYmplY3Q6OmdldE93blByb3Bl
cnR5TmFtZXMob2JqZWN0LCBzdGF0ZSwgcHJvcGVydHlOYW1lcywgbW9kZSk7CiB9CiAKQEAgLTIz
NCwxMiArMjM2LDEzIEBAIGJvb2wgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlcjoK
IAogYm9vbCBKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyOjpwdXRCeUluZGV4KEpT
Q2VsbCogY2VsbCwgRXhlY1N0YXRlKiBzdGF0ZSwgdW5zaWduZWQgaW5kZXgsIEpTVmFsdWUgdmFs
dWUsIGJvb2wgc2hvdWxkVGhyb3cpCiB7CisgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAg
YXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0
dGVyKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBp
bmZvKCkpOwogCi0gICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tKHN0YXRl
LCBpbmRleCk7CisgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tKHZtLCBp
bmRleCk7CiAgICAgUHJvcGVydHlTbG90IHNsb3QgeyB0aGlzT2JqZWN0LCBQcm9wZXJ0eVNsb3Q6
OkludGVybmFsTWV0aG9kVHlwZTo6Vk1JbnF1aXJ5IH07Ci0gICAgSlNWYWx1ZSBwcm90b3R5cGUg
PSB0aGlzT2JqZWN0LT5nZXRQcm90b3R5cGVEaXJlY3Qoc3RhdGUtPnZtKCkpOworICAgIEpTVmFs
dWUgcHJvdG90eXBlID0gdGhpc09iamVjdC0+Z2V0UHJvdG90eXBlRGlyZWN0KHZtKTsKICAgICBp
ZiAoIShwcm90b3R5cGUuaXNPYmplY3QoKSAmJiBhc09iamVjdChwcm90b3R5cGUpLT5nZXRQcm9w
ZXJ0eVNsb3Qoc3RhdGUsIHByb3BlcnR5TmFtZSwgc2xvdCkpKSB7CiAgICAgICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoc3RhdGUtPnZtKCkpOwogICAgICAgICBhdXRv
IG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KCpzdGF0ZSwgdmFsdWUpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0
dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRl
eGVkR2V0dGVyQW5kU2V0dGVyLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRH
ZXR0ZXJBbmRTZXR0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OCw3ICs4OCw3IEBAIHRlbXBs
YXRlPD4gSlNWYWx1ZSBKU1Rlc3ROYW1lZFNldHRlcldpdGgKIHRlbXBsYXRlPD4gdm9pZCBKU1Rl
c3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyQ29uc3RydWN0b3I6OmluaXRp
YWxpemVQcm9wZXJ0aWVzKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkK
IHsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgSlNUZXN0
TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlcjo6cHJvdG90eXBlKHZtLCBnbG9i
YWxPYmplY3QpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgSlNDOjpQcm9w
ZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51
bSk7Ci0gICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZp
YWxTdHJpbmcoJnZtLCBTdHJpbmcoIlRlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5k
U2V0dGVyIl9zKSksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9w
ZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlO
YW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKHZtLCBTdHJpbmcoIlRlc3ROYW1lZFNldHRl
cldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyIl9zKSksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6
OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwogICAgIHB1dERp
cmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigwKSwgSlNDOjpQcm9w
ZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51
bSk7CiB9CiAKQEAgLTE3NSw2ICsxNzUsNyBAQCBib29sIEpTVGVzdE5hbWVkU2V0dGVyV2l0aElu
ZGV4ZWRHZXR0ZXJBCiAKIGJvb2wgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFu
ZFNldHRlcjo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU09iamVjdCogb2JqZWN0LCBFeGVj
U3RhdGUqIHN0YXRlLCB1bnNpZ25lZCBpbmRleCwgUHJvcGVydHlTbG90JiBzbG90KQogeworICAg
IFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNU
ZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlcio+KG9iamVjdCk7CiAgICAg
QVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogICAgIGlmIChM
SUtFTFkoaW5kZXggPD0gTUFYX0FSUkFZX0lOREVYKSkgewpAQCAtMTg1LDcgKzE4Niw3IEBAIGJv
b2wgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckEKICAgICAgICAgfQogICAgICAg
ICByZXR1cm4gSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgob2JqZWN0LCBzdGF0
ZSwgaW5kZXgsIHNsb3QpOwogICAgIH0KLSAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZp
ZXI6OmZyb20oc3RhdGUsIGluZGV4KTsKKyAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZp
ZXI6OmZyb20odm0sIGluZGV4KTsKICAgICB1c2luZyBHZXR0ZXJJRExUeXBlID0gSURMRE9NU3Ry
aW5nOwogICAgIGF1dG8gZ2V0dGVyRnVuY3RvciA9IFtdIChhdXRvJiB0aGlzT2JqZWN0LCBhdXRv
IHByb3BlcnR5TmFtZSkgLT4gT3B0aW9uYWw8dHlwZW5hbWUgR2V0dGVySURMVHlwZTo6SW1wbGVt
ZW50YXRpb25UeXBlPiB7CiAgICAgICAgIGF1dG8gcmVzdWx0ID0gdGhpc09iamVjdC53cmFwcGVk
KCkubmFtZWRJdGVtKHByb3BlcnR5TmFtZVRvQXRvbVN0cmluZyhwcm9wZXJ0eU5hbWUpKTsKQEAg
LTIwMywxMiArMjA0LDEzIEBAIGJvb2wgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRl
ckEKIAogdm9pZCBKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyOjpn
ZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogc3RhdGUsIFBy
b3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsK
KyAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0
PEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXIqPihvYmplY3QpOwog
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMob2JqZWN0LCBpbmZvKCkpOwogICAgIGZvciAo
dW5zaWduZWQgaSA9IDAsIGNvdW50ID0gdGhpc09iamVjdC0+d3JhcHBlZCgpLmxlbmd0aCgpOyBp
IDwgY291bnQ7ICsraSkKLSAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJv
bShzdGF0ZSwgaSkpOworICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9t
KHZtLCBpKSk7CiAgICAgZm9yIChhdXRvJiBwcm9wZXJ0eU5hbWUgOiB0aGlzT2JqZWN0LT53cmFw
cGVkKCkuc3VwcG9ydGVkUHJvcGVydHlOYW1lcygpKQotICAgICAgICBwcm9wZXJ0eU5hbWVzLmFk
ZChJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHN0YXRlLCBwcm9wZXJ0eU5hbWUpKTsKKyAgICAgICAg
cHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcHJvcGVydHlOYW1l
KSk7CiAgICAgSlNPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBzdGF0ZSwgcHJv
cGVydHlOYW1lcywgbW9kZSk7CiB9CiAKQEAgLTI0Miw2ICsyNDQsNyBAQCBib29sIEpTVGVzdE5h
bWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBCiAKIGJvb2wgSlNUZXN0TmFtZWRTZXR0ZXJXaXRo
SW5kZXhlZEdldHRlckFuZFNldHRlcjo6cHV0QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0
ZSogc3RhdGUsIHVuc2lnbmVkIGluZGV4LCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93
KQogeworICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlcio+KGNlbGwp
OwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKIApA
QCAtMjUzLDkgKzI1Niw5IEBAIGJvb2wgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRl
ckEKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgYXV0byBwcm9wZXJ0eU5hbWUg
PSBJZGVudGlmaWVyOjpmcm9tKHN0YXRlLCBpbmRleCk7CisgICAgYXV0byBwcm9wZXJ0eU5hbWUg
PSBJZGVudGlmaWVyOjpmcm9tKHZtLCBpbmRleCk7CiAgICAgUHJvcGVydHlTbG90IHNsb3QgeyB0
aGlzT2JqZWN0LCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6Vk1JbnF1aXJ5IH07
Ci0gICAgSlNWYWx1ZSBwcm90b3R5cGUgPSB0aGlzT2JqZWN0LT5nZXRQcm90b3R5cGVEaXJlY3Qo
c3RhdGUtPnZtKCkpOworICAgIEpTVmFsdWUgcHJvdG90eXBlID0gdGhpc09iamVjdC0+Z2V0UHJv
dG90eXBlRGlyZWN0KHZtKTsKICAgICBpZiAoIShwcm90b3R5cGUuaXNPYmplY3QoKSAmJiBhc09i
amVjdChwcm90b3R5cGUpLT5nZXRQcm9wZXJ0eVNsb3Qoc3RhdGUsIHByb3BlcnR5TmFtZSwgc2xv
dCkpKSB7CiAgICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoc3Rh
dGUtPnZtKCkpOwogICAgICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJp
bmc+KCpzdGF0ZSwgdmFsdWUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RO
YW1lZFNldHRlcldpdGhPdmVycmlkZUJ1aWx0aW5zLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVy
V2l0aE92ZXJyaWRlQnVpbHRpbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MCw3ICs4MCw3IEBA
IHRlbXBsYXRlPD4gSlNWYWx1ZSBKU1Rlc3ROYW1lZFNldHRlcldpdGgKIHRlbXBsYXRlPD4gdm9p
ZCBKU1Rlc3ROYW1lZFNldHRlcldpdGhPdmVycmlkZUJ1aWx0aW5zQ29uc3RydWN0b3I6OmluaXRp
YWxpemVQcm9wZXJ0aWVzKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkK
IHsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgSlNUZXN0
TmFtZWRTZXR0ZXJXaXRoT3ZlcnJpZGVCdWlsdGluczo6cHJvdG90eXBlKHZtLCBnbG9iYWxPYmpl
Y3QpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgSlNDOjpQcm9wZXJ0eUF0
dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7Ci0g
ICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJp
bmcoJnZtLCBTdHJpbmcoIlRlc3ROYW1lZFNldHRlcldpdGhPdmVycmlkZUJ1aWx0aW5zIl9zKSks
IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0
ZTo6RG9udEVudW0pOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwg
anNOb250cml2aWFsU3RyaW5nKHZtLCBTdHJpbmcoIlRlc3ROYW1lZFNldHRlcldpdGhPdmVycmlk
ZUJ1aWx0aW5zIl9zKSksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQ
cm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVy
dHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigwKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVh
ZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CiB9CiAKQEAgLTE1Nyw5
ICsxNTcsMTAgQEAgYm9vbCBKU1Rlc3ROYW1lZFNldHRlcldpdGhPdmVycmlkZUJ1aWx0aQogCiBi
b29sIEpTVGVzdE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnM6OmdldE93blByb3BlcnR5
U2xvdEJ5SW5kZXgoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBzdGF0ZSwgdW5zaWduZWQg
aW5kZXgsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKKyAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsK
ICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkU2V0dGVyV2l0aE92ZXJy
aWRlQnVpbHRpbnMqPihvYmplY3QpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhp
c09iamVjdCwgaW5mbygpKTsKLSAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZy
b20oc3RhdGUsIGluZGV4KTsKKyAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZy
b20odm0sIGluZGV4KTsKICAgICB1c2luZyBHZXR0ZXJJRExUeXBlID0gSURMRE9NU3RyaW5nOwog
ICAgIGF1dG8gZ2V0dGVyRnVuY3RvciA9IFtdIChhdXRvJiB0aGlzT2JqZWN0LCBhdXRvIHByb3Bl
cnR5TmFtZSkgLT4gT3B0aW9uYWw8dHlwZW5hbWUgR2V0dGVySURMVHlwZTo6SW1wbGVtZW50YXRp
b25UeXBlPiB7CiAgICAgICAgIGF1dG8gcmVzdWx0ID0gdGhpc09iamVjdC53cmFwcGVkKCkubmFt
ZWRJdGVtKHByb3BlcnR5TmFtZVRvQXRvbVN0cmluZyhwcm9wZXJ0eU5hbWUpKTsKQEAgLTE3Nywx
MCArMTc4LDExIEBAIGJvb2wgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoT3ZlcnJpZGVCdWlsdGkKIAog
dm9pZCBKU1Rlc3ROYW1lZFNldHRlcldpdGhPdmVycmlkZUJ1aWx0aW5zOjpnZXRPd25Qcm9wZXJ0
eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogc3RhdGUsIFByb3BlcnR5TmFtZUFy
cmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKKyAgICBWTSYgdm0g
PSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVk
U2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnMqPihvYmplY3QpOwogICAgIEFTU0VSVF9HQ19PQkpF
Q1RfSU5IRVJJVFMob2JqZWN0LCBpbmZvKCkpOwogICAgIGZvciAoYXV0byYgcHJvcGVydHlOYW1l
IDogdGhpc09iamVjdC0+d3JhcHBlZCgpLnN1cHBvcnRlZFByb3BlcnR5TmFtZXMoKSkKLSAgICAg
ICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhzdGF0ZSwgcHJvcGVy
dHlOYW1lKSk7CisgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb21TdHJp
bmcodm0sIHByb3BlcnR5TmFtZSkpOwogICAgIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVz
KG9iamVjdCwgc3RhdGUsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwogfQogCkBAIC0yMDIsMTAgKzIw
NCwxMSBAQCBib29sIEpTVGVzdE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRpCiAKIGJvb2wg
SlNUZXN0TmFtZWRTZXR0ZXJXaXRoT3ZlcnJpZGVCdWlsdGluczo6cHV0QnlJbmRleChKU0NlbGwq
IGNlbGwsIEV4ZWNTdGF0ZSogc3RhdGUsIHVuc2lnbmVkIGluZGV4LCBKU1ZhbHVlIHZhbHVlLCBi
b29sKQogeworICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8qIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8SlNUZXN0TmFtZWRTZXR0ZXJXaXRoT3ZlcnJpZGVCdWlsdGlucyo+KGNlbGwpOwog
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKIAotICAg
IGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbShzdGF0ZSwgaW5kZXgpOworICAg
IGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbSh2bSwgaW5kZXgpOwogICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoc3RhdGUtPnZtKCkpOwogICAgIGF1
dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKnN0YXRlLCB2YWx1ZSk7CiAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB0cnVlKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZv
cmdhYmxlUHJvcGVydGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0
aWVzLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTA0LDcgKzEwNCw3IEBAIHRlbXBsYXRlPD4gSlNWYWx1ZSBK
U1Rlc3ROYW1lZFNldHRlcldpdGgKIHRlbXBsYXRlPD4gdm9pZCBKU1Rlc3ROYW1lZFNldHRlcldp
dGhVbmZvcmdhYmxlUHJvcGVydGllc0NvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGllcyhW
TSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCiB7CiAgICAgcHV0RGlyZWN0
KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdE5hbWVkU2V0dGVyV2l0aFVu
Zm9yZ2FibGVQcm9wZXJ0aWVzOjpwcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCksIEpTQzo6UHJv
cGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFk
T25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKLSAgICBwdXREaXJlY3Qo
dm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZygmdm0sIFN0cmlu
ZygiVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzIl9zKSksIEpTQzo6UHJv
cGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVu
dW0pOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2
aWFsU3RyaW5nKHZtLCBTdHJpbmcoIlRlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVy
dGllcyJfcykpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVy
dHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFt
ZXMtPmxlbmd0aCwganNOdW1iZXIoMCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5
IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwogfQogCkBAIC0xODEsOSArMTgx
LDEwIEBAIGJvb2wgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3AKIAogYm9vbCBK
U1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllczo6Z2V0T3duUHJvcGVydHlT
bG90QnlJbmRleChKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIHN0YXRlLCB1bnNpZ25lZCBp
bmRleCwgUHJvcGVydHlTbG90JiBzbG90KQogeworICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwog
ICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3Jn
YWJsZVByb3BlcnRpZXMqPihvYmplY3QpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMo
dGhpc09iamVjdCwgaW5mbygpKTsKLSAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6
OmZyb20oc3RhdGUsIGluZGV4KTsKKyAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6
OmZyb20odm0sIGluZGV4KTsKICAgICB1c2luZyBHZXR0ZXJJRExUeXBlID0gSURMRE9NU3RyaW5n
OwogICAgIGF1dG8gZ2V0dGVyRnVuY3RvciA9IFtdIChhdXRvJiB0aGlzT2JqZWN0LCBhdXRvIHBy
b3BlcnR5TmFtZSkgLT4gT3B0aW9uYWw8dHlwZW5hbWUgR2V0dGVySURMVHlwZTo6SW1wbGVtZW50
YXRpb25UeXBlPiB7CiAgICAgICAgIGF1dG8gcmVzdWx0ID0gdGhpc09iamVjdC53cmFwcGVkKCku
bmFtZWRJdGVtKHByb3BlcnR5TmFtZVRvQXRvbVN0cmluZyhwcm9wZXJ0eU5hbWUpKTsKQEAgLTIw
MSwxMCArMjAyLDExIEBAIGJvb2wgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3AK
IAogdm9pZCBKU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllczo6Z2V0T3du
UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIHN0YXRlLCBQcm9wZXJ0
eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7CisgICAg
Vk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rl
c3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllcyo+KG9iamVjdCk7CiAgICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUyhvYmplY3QsIGluZm8oKSk7CiAgICAgZm9yIChhdXRvJiBw
cm9wZXJ0eU5hbWUgOiB0aGlzT2JqZWN0LT53cmFwcGVkKCkuc3VwcG9ydGVkUHJvcGVydHlOYW1l
cygpKQotICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHN0
YXRlLCBwcm9wZXJ0eU5hbWUpKTsKKyAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmll
cjo6ZnJvbVN0cmluZyh2bSwgcHJvcGVydHlOYW1lKSk7CiAgICAgSlNPYmplY3Q6OmdldE93blBy
b3BlcnR5TmFtZXMob2JqZWN0LCBzdGF0ZSwgcHJvcGVydHlOYW1lcywgbW9kZSk7CiB9CiAKQEAg
LTIzMCwxMiArMjMyLDEzIEBAIGJvb2wgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVBy
b3AKIAogYm9vbCBKU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllczo6cHV0
QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogc3RhdGUsIHVuc2lnbmVkIGluZGV4LCBK
U1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93KQogeworICAgIFZNJiB2bSA9IHN0YXRlLT52
bSgpOwogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWRTZXR0ZXJXaXRo
VW5mb3JnYWJsZVByb3BlcnRpZXMqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAKLSAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50
aWZpZXI6OmZyb20oc3RhdGUsIGluZGV4KTsKKyAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50
aWZpZXI6OmZyb20odm0sIGluZGV4KTsKICAgICBQcm9wZXJ0eVNsb3Qgc2xvdCB7IHRoaXNPYmpl
Y3QsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpWTUlucXVpcnkgfTsKLSAgICBK
U1ZhbHVlIHByb3RvdHlwZSA9IHRoaXNPYmplY3QtPmdldFByb3RvdHlwZURpcmVjdChzdGF0ZS0+
dm0oKSk7CisgICAgSlNWYWx1ZSBwcm90b3R5cGUgPSB0aGlzT2JqZWN0LT5nZXRQcm90b3R5cGVE
aXJlY3Qodm0pOwogICAgIGlmICghKHByb3RvdHlwZS5pc09iamVjdCgpICYmIGFzT2JqZWN0KHBy
b3RvdHlwZSktPmdldFByb3BlcnR5U2xvdChzdGF0ZSwgcHJvcGVydHlOYW1lLCBzbG90KSkpIHsK
ICAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShzdGF0ZS0+dm0o
KSk7CiAgICAgICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKnN0
YXRlLCB2YWx1ZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1
aWx0aW5zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVy
cmlkZUJ1aWx0aW5zLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9w
ZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGlucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNCw3ICsx
MDQsNyBAQCB0ZW1wbGF0ZTw+IEpTVmFsdWUgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoCiB0ZW1wbGF0
ZTw+IHZvaWQgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVy
cmlkZUJ1aWx0aW5zQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKFZNJiB2bSwgSlNE
T01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKIHsKICAgICBwdXREaXJlY3Qodm0sIHZtLnBy
b3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVBy
b3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5zOjpwcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCks
IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUgfCBKU0M6OlByb3BlcnR5QXR0cmli
dXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKLSAgICBw
dXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZygm
dm0sIFN0cmluZygiVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3Zl
cnJpZGVCdWlsdGlucyJfcykpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpT
Qzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnBy
b3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZyh2bSwgU3RyaW5nKCJUZXN0TmFt
ZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5zIl9zKSks
IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0
ZTo6RG9udEVudW0pOwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3Ro
LCBqc051bWJlcigwKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlBy
b3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CiB9CiAKQEAgLTE4MSw5ICsxODEsMTAgQEAgYm9v
bCBKU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcAogCiBib29sIEpTVGVzdE5hbWVk
U2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGluczo6Z2V0T3du
UHJvcGVydHlTbG90QnlJbmRleChKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIHN0YXRlLCB1
bnNpZ25lZCBpbmRleCwgUHJvcGVydHlTbG90JiBzbG90KQogeworICAgIFZNJiB2bSA9IHN0YXRl
LT52bSgpOwogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWRTZXR0ZXJX
aXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5zKj4ob2JqZWN0KTsKICAg
ICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7Ci0gICAgYXV0
byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tKHN0YXRlLCBpbmRleCk7CisgICAgYXV0
byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tKHZtLCBpbmRleCk7CiAgICAgdXNpbmcg
R2V0dGVySURMVHlwZSA9IElETERPTVN0cmluZzsKICAgICBhdXRvIGdldHRlckZ1bmN0b3IgPSBb
XSAoYXV0byYgdGhpc09iamVjdCwgYXV0byBwcm9wZXJ0eU5hbWUpIC0+IE9wdGlvbmFsPHR5cGVu
YW1lIEdldHRlcklETFR5cGU6OkltcGxlbWVudGF0aW9uVHlwZT4gewogICAgICAgICBhdXRvIHJl
c3VsdCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpLm5hbWVkSXRlbShwcm9wZXJ0eU5hbWVUb0F0b21T
dHJpbmcocHJvcGVydHlOYW1lKSk7CkBAIC0yMDEsMTAgKzIwMiwxMSBAQCBib29sIEpTVGVzdE5h
bWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wCiAKIHZvaWQgSlNUZXN0TmFtZWRTZXR0ZXJXaXRo
VW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5zOjpnZXRPd25Qcm9wZXJ0eU5h
bWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogc3RhdGUsIFByb3BlcnR5TmFtZUFycmF5
JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKKyAgICBWTSYgdm0gPSBz
dGF0ZS0+dm0oKTsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkU2V0
dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGlucyo+KG9iamVjdCk7
CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhvYmplY3QsIGluZm8oKSk7CiAgICAgZm9y
IChhdXRvJiBwcm9wZXJ0eU5hbWUgOiB0aGlzT2JqZWN0LT53cmFwcGVkKCkuc3VwcG9ydGVkUHJv
cGVydHlOYW1lcygpKQotICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKHN0YXRlLCBwcm9wZXJ0eU5hbWUpKTsKKyAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQo
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcHJvcGVydHlOYW1lKSk7CiAgICAgSlNPYmplY3Q6
OmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBzdGF0ZSwgcHJvcGVydHlOYW1lcywgbW9kZSk7
CiB9CiAKQEAgLTIyNiwxMCArMjI4LDExIEBAIGJvb2wgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5m
b3JnYWJsZVByb3AKIAogYm9vbCBKU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVy
dGllc0FuZE92ZXJyaWRlQnVpbHRpbnM6OnB1dEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3Rh
dGUqIHN0YXRlLCB1bnNpZ25lZCBpbmRleCwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCkKIHsKKyAgICBW
TSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVz
dE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGlucyo+
KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygp
KTsKIAotICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbShzdGF0ZSwgaW5k
ZXgpOworICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbSh2bSwgaW5kZXgp
OwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoc3RhdGUtPnZtKCkp
OwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKnN0YXRlLCB2
YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB0cnVlKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb2RlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0Tm9kZS5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE0LDcg
KzExNCw3IEBAIHRlbXBsYXRlPD4gSlNWYWx1ZSBKU1Rlc3ROb2RlQ29uc3RydWN0b3IKIHRlbXBs
YXRlPD4gdm9pZCBKU1Rlc3ROb2RlQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKFZN
JiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKIHsKICAgICBwdXREaXJlY3Qo
dm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgSlNUZXN0Tm9kZTo6cHJvdG90eXBlKHZt
LCBnbG9iYWxPYmplY3QpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgSlND
OjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpE
b250RW51bSk7Ci0gICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05v
bnRyaXZpYWxTdHJpbmcoJnZtLCBTdHJpbmcoIlRlc3ROb2RlIl9zKSksIEpTQzo6UHJvcGVydHlB
dHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwor
ICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3Ry
aW5nKHZtLCBTdHJpbmcoIlRlc3ROb2RlIl9zKSksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJl
YWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwogICAgIHB1dERpcmVj
dCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigwKSwgSlNDOjpQcm9wZXJ0
eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7
CiB9CiAKQEAgLTE1MCw0NSArMTUwLDQ1IEBAIHZvaWQgSlNUZXN0Tm9kZVByb3RvdHlwZTo6Zmlu
aXNoQ3JlYXRpb24KICAgICBib29sIGhhc0Rpc2FibGVkUnVudGltZVByb3BlcnRpZXMgPSBmYWxz
ZTsKICAgICBpZiAoIWpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCgpKS0+
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5pc1NlY3VyZUNvbnRleHQoKSkgewogICAgICAgICBo
YXNEaXNhYmxlZFJ1bnRpbWVQcm9wZXJ0aWVzID0gdHJ1ZTsKLSAgICAgICAgYXV0byBwcm9wZXJ0
eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25z
dCBMQ2hhcio+KCJjYWxjdWxhdGVTZWNyZXRSZXN1bHQiKSwgc3RybGVuKCJjYWxjdWxhdGVTZWNy
ZXRSZXN1bHQiKSk7CisgICAgICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJjYWxjdWxhdGVTZWNy
ZXRSZXN1bHQiKSwgc3RybGVuKCJjYWxjdWxhdGVTZWNyZXRSZXN1bHQiKSk7CiAgICAgICAgIFZN
OjpEZWxldGVQcm9wZXJ0eU1vZGVTY29wZSBzY29wZSh2bSwgVk06OkRlbGV0ZVByb3BlcnR5TW9k
ZTo6SWdub3JlQ29uZmlndXJhYmxlKTsKICAgICAgICAgSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5
KHRoaXMsIGdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCksIHByb3BlcnR5TmFtZSk7CiAgICAg
fQogICAgIGlmICghanNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KCkpLT5z
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmlzU2VjdXJlQ29udGV4dCgpKSB7CiAgICAgICAgIGhh
c0Rpc2FibGVkUnVudGltZVByb3BlcnRpZXMgPSB0cnVlOwotICAgICAgICBhdXRvIHByb3BlcnR5
TmFtZSA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCByZWludGVycHJldF9jYXN0PGNvbnN0
IExDaGFyKj4oImdldFNlY3JldEJvb2xlYW4iKSwgc3RybGVuKCJnZXRTZWNyZXRCb29sZWFuIikp
OworICAgICAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0s
IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiZ2V0U2VjcmV0Qm9vbGVhbiIpLCBzdHJs
ZW4oImdldFNlY3JldEJvb2xlYW4iKSk7CiAgICAgICAgIFZNOjpEZWxldGVQcm9wZXJ0eU1vZGVT
Y29wZSBzY29wZSh2bSwgVk06OkRlbGV0ZVByb3BlcnR5TW9kZTo6SWdub3JlQ29uZmlndXJhYmxl
KTsKICAgICAgICAgSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KHRoaXMsIGdsb2JhbE9iamVjdCgp
LT5nbG9iYWxFeGVjKCksIHByb3BlcnR5TmFtZSk7CiAgICAgfQogI2lmIEVOQUJMRShURVNUX0ZF
QVRVUkUpCiAgICAgaWYgKCEoanNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0
KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmlzU2VjdXJlQ29udGV4dCgpICYmIFJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkudGVzdEZlYXR1cmVFbmFibGVkKCkp
KSB7CiAgICAgICAgIGhhc0Rpc2FibGVkUnVudGltZVByb3BlcnRpZXMgPSB0cnVlOwotICAgICAg
ICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCByZWludGVy
cHJldF9jYXN0PGNvbnN0IExDaGFyKj4oInRlc3RGZWF0dXJlR2V0U2VjcmV0Qm9vbGVhbiIpLCBz
dHJsZW4oInRlc3RGZWF0dXJlR2V0U2VjcmV0Qm9vbGVhbiIpKTsKKyAgICAgICAgYXV0byBwcm9w
ZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNv
bnN0IExDaGFyKj4oInRlc3RGZWF0dXJlR2V0U2VjcmV0Qm9vbGVhbiIpLCBzdHJsZW4oInRlc3RG
ZWF0dXJlR2V0U2VjcmV0Qm9vbGVhbiIpKTsKICAgICAgICAgVk06OkRlbGV0ZVByb3BlcnR5TW9k
ZVNjb3BlIHNjb3BlKHZtLCBWTTo6RGVsZXRlUHJvcGVydHlNb2RlOjpJZ25vcmVDb25maWd1cmFi
bGUpOwogICAgICAgICBKU09iamVjdDo6ZGVsZXRlUHJvcGVydHkodGhpcywgZ2xvYmFsT2JqZWN0
KCktPmdsb2JhbEV4ZWMoKSwgcHJvcGVydHlOYW1lKTsKICAgICB9CiAjZW5kaWYKICAgICBpZiAo
IVJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkuZG9tSXRlcmF0b3JFbmFi
bGVkKCkpIHsKICAgICAgICAgaGFzRGlzYWJsZWRSdW50aW1lUHJvcGVydGllcyA9IHRydWU7Ci0g
ICAgICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiZW50cmllcyIpLCBzdHJsZW4oImVudHJpZXMi
KSk7CisgICAgICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2
bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJlbnRyaWVzIiksIHN0cmxlbigiZW50
cmllcyIpKTsKICAgICAgICAgVk06OkRlbGV0ZVByb3BlcnR5TW9kZVNjb3BlIHNjb3BlKHZtLCBW
TTo6RGVsZXRlUHJvcGVydHlNb2RlOjpJZ25vcmVDb25maWd1cmFibGUpOwogICAgICAgICBKU09i
amVjdDo6ZGVsZXRlUHJvcGVydHkodGhpcywgZ2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKSwg
cHJvcGVydHlOYW1lKTsKICAgICB9CiAgICAgaWYgKCFSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpz
aGFyZWRGZWF0dXJlcygpLmRvbUl0ZXJhdG9yRW5hYmxlZCgpKSB7CiAgICAgICAgIGhhc0Rpc2Fi
bGVkUnVudGltZVByb3BlcnRpZXMgPSB0cnVlOwotICAgICAgICBhdXRvIHByb3BlcnR5TmFtZSA9
IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFy
Kj4oImtleXMiKSwgc3RybGVuKCJrZXlzIikpOworICAgICAgICBhdXRvIHByb3BlcnR5TmFtZSA9
IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIq
Pigia2V5cyIpLCBzdHJsZW4oImtleXMiKSk7CiAgICAgICAgIFZNOjpEZWxldGVQcm9wZXJ0eU1v
ZGVTY29wZSBzY29wZSh2bSwgVk06OkRlbGV0ZVByb3BlcnR5TW9kZTo6SWdub3JlQ29uZmlndXJh
YmxlKTsKICAgICAgICAgSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KHRoaXMsIGdsb2JhbE9iamVj
dCgpLT5nbG9iYWxFeGVjKCksIHByb3BlcnR5TmFtZSk7CiAgICAgfQogICAgIGlmICghUnVudGlt
ZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS5kb21JdGVyYXRvckVuYWJsZWQoKSkg
ewogICAgICAgICBoYXNEaXNhYmxlZFJ1bnRpbWVQcm9wZXJ0aWVzID0gdHJ1ZTsKLSAgICAgICAg
YXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJ2YWx1ZXMiKSwgc3RybGVuKCJ2YWx1ZXMiKSk7CisgICAg
ICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRl
cnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJ2YWx1ZXMiKSwgc3RybGVuKCJ2YWx1ZXMiKSk7CiAg
ICAgICAgIFZNOjpEZWxldGVQcm9wZXJ0eU1vZGVTY29wZSBzY29wZSh2bSwgVk06OkRlbGV0ZVBy
b3BlcnR5TW9kZTo6SWdub3JlQ29uZmlndXJhYmxlKTsKICAgICAgICAgSlNPYmplY3Q6OmRlbGV0
ZVByb3BlcnR5KHRoaXMsIGdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCksIHByb3BlcnR5TmFt
ZSk7CiAgICAgfQogICAgIGlmICghUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVy
ZXMoKS5kb21JdGVyYXRvckVuYWJsZWQoKSkgewogICAgICAgICBoYXNEaXNhYmxlZFJ1bnRpbWVQ
cm9wZXJ0aWVzID0gdHJ1ZTsKLSAgICAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKCZ2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJmb3JFYWNo
IiksIHN0cmxlbigiZm9yRWFjaCIpKTsKKyAgICAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oImZv
ckVhY2giKSwgc3RybGVuKCJmb3JFYWNoIikpOwogICAgICAgICBWTTo6RGVsZXRlUHJvcGVydHlN
b2RlU2NvcGUgc2NvcGUodm0sIFZNOjpEZWxldGVQcm9wZXJ0eU1vZGU6Oklnbm9yZUNvbmZpZ3Vy
YWJsZSk7CiAgICAgICAgIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eSh0aGlzLCBnbG9iYWxPYmpl
Y3QoKS0+Z2xvYmFsRXhlYygpLCBwcm9wZXJ0eU5hbWUpOwogICAgIH0KQEAgLTI3NSw2ICsyNzUs
NyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROb2RlTmFtZShFeGVjU3RhdGUqCiAKIHN0YXRpYyBp
bmxpbmUgYm9vbCBzZXRKU1Rlc3ROb2RlTmFtZVNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rl
c3ROb2RlJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KQogeworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5h
dGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KHN0YXRlLCB2YWx1ZSk7CkBAIC00MDks
NyArNDEwLDcgQEAgSlNDOjpKU09iamVjdCogSlNUZXN0Tm9kZTo6c2VyaWFsaXplKEV4ZQogCiAg
ICAgYXV0byBuYW1lVmFsdWUgPSBqc1Rlc3ROb2RlTmFtZUdldHRlcihzdGF0ZSwgdGhpc09iamVj
dCwgdGhyb3dTY29wZSk7CiAgICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwotICAg
IHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgIm5hbWUi
KSwgbmFtZVZhbHVlKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyh2bSwgIm5hbWUiKSwgbmFtZVZhbHVlKTsKIAogICAgIHJldHVybiByZXN1bHQ7CiB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2Jq
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0T2JqLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQz
NSw3ICs0MzUsNyBAQCB0ZW1wbGF0ZTw+IFRlc3RPYmo6OkRpY3Rpb25hcnkgY29udmVydERpCiAg
ICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKQogICAgICAgICBhbm5vdGF0ZWRUeXBlSW5TZXF1ZW5j
ZU1lbWJlclZhbHVlID0ganNVbmRlZmluZWQoKTsKICAgICBlbHNlIHsKLSAgICAgICAgYW5ub3Rh
dGVkVHlwZUluU2VxdWVuY2VNZW1iZXJWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJhbm5vdGF0ZWRUeXBlSW5TZXF1ZW5jZU1lbWJlciIp
KTsKKyAgICAgICAgYW5ub3RhdGVkVHlwZUluU2VxdWVuY2VNZW1iZXJWYWx1ZSA9IG9iamVjdC0+
Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImFubm90YXRlZFR5cGVJblNl
cXVlbmNlTWVtYmVyIikpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IHsgfSk7CiAgICAgfQogICAgIGlmICghYW5ub3RhdGVkVHlwZUluU2VxdWVuY2VNZW1iZXJWYWx1
ZS5pc1VuZGVmaW5lZCgpKSB7CkBAIC00NDYsNyArNDQ2LDcgQEAgdGVtcGxhdGU8PiBUZXN0T2Jq
OjpEaWN0aW9uYXJ5IGNvbnZlcnREaQogICAgIGlmIChpc051bGxPclVuZGVmaW5lZCkKICAgICAg
ICAgYW5ub3RhdGVkVHlwZUluVW5pb25NZW1iZXJWYWx1ZSA9IGpzVW5kZWZpbmVkKCk7CiAgICAg
ZWxzZSB7Ci0gICAgICAgIGFubm90YXRlZFR5cGVJblVuaW9uTWVtYmVyVmFsdWUgPSBvYmplY3Qt
PmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAiYW5ub3RhdGVkVHlw
ZUluVW5pb25NZW1iZXIiKSk7CisgICAgICAgIGFubm90YXRlZFR5cGVJblVuaW9uTWVtYmVyVmFs
dWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJhbm5v
dGF0ZWRUeXBlSW5Vbmlvbk1lbWJlciIpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCB7IH0pOwogICAgIH0KICAgICBpZiAoIWFubm90YXRlZFR5cGVJblVuaW9uTWVt
YmVyVmFsdWUuaXNVbmRlZmluZWQoKSkgewpAQCAtNDU3LDcgKzQ1Nyw3IEBAIHRlbXBsYXRlPD4g
VGVzdE9iajo6RGljdGlvbmFyeSBjb252ZXJ0RGkKICAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQp
CiAgICAgICAgIGFueVR5cGVkZWZWYWx1ZVZhbHVlID0ganNVbmRlZmluZWQoKTsKICAgICBlbHNl
IHsKLSAgICAgICAgYW55VHlwZWRlZlZhbHVlVmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAiYW55VHlwZWRlZlZhbHVlIikpOworICAgICAg
ICBhbnlUeXBlZGVmVmFsdWVWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZyh2bSwgImFueVR5cGVkZWZWYWx1ZSIpKTsKICAgICAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0KICAgICBpZiAoIWFueVR5cGVkZWZWYWx1
ZVZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKQEAgLTQ2OSw3ICs0NjksNyBAQCB0ZW1wbGF0ZTw+IFRl
c3RPYmo6OkRpY3Rpb25hcnkgY29udmVydERpCiAgICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKQog
ICAgICAgICBhbnlWYWx1ZVZhbHVlID0ganNVbmRlZmluZWQoKTsKICAgICBlbHNlIHsKLSAgICAg
ICAgYW55VmFsdWVWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZygmc3RhdGUsICJhbnlWYWx1ZSIpKTsKKyAgICAgICAgYW55VmFsdWVWYWx1ZSA9IG9iamVj
dC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImFueVZhbHVlIikpOwog
ICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgfQogICAg
IGlmICghYW55VmFsdWVWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7CkBAIC00ODEsNyArNDgxLDcgQEAg
dGVtcGxhdGU8PiBUZXN0T2JqOjpEaWN0aW9uYXJ5IGNvbnZlcnREaQogICAgIGlmIChpc051bGxP
clVuZGVmaW5lZCkKICAgICAgICAgYW55VmFsdWVXaXRoTnVsbERlZmF1bHRWYWx1ZSA9IGpzVW5k
ZWZpbmVkKCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIGFueVZhbHVlV2l0aE51bGxEZWZhdWx0VmFs
dWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAi
YW55VmFsdWVXaXRoTnVsbERlZmF1bHQiKSk7CisgICAgICAgIGFueVZhbHVlV2l0aE51bGxEZWZh
dWx0VmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0s
ICJhbnlWYWx1ZVdpdGhOdWxsRGVmYXVsdCIpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0KICAgICBpZiAoIWFueVZhbHVlV2l0aE51bGxEZWZh
dWx0VmFsdWUuaXNVbmRlZmluZWQoKSkgewpAQCAtNDkzLDcgKzQ5Myw3IEBAIHRlbXBsYXRlPD4g
VGVzdE9iajo6RGljdGlvbmFyeSBjb252ZXJ0RGkKICAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQp
CiAgICAgICAgIGJvb2xlYW5XaXRoRGVmYXVsdFZhbHVlID0ganNVbmRlZmluZWQoKTsKICAgICBl
bHNlIHsKLSAgICAgICAgYm9vbGVhbldpdGhEZWZhdWx0VmFsdWUgPSBvYmplY3QtPmdldCgmc3Rh
dGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAiYm9vbGVhbldpdGhEZWZhdWx0Iikp
OworICAgICAgICBib29sZWFuV2l0aERlZmF1bHRWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImJvb2xlYW5XaXRoRGVmYXVsdCIpKTsKICAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0KICAgICBpZiAo
IWJvb2xlYW5XaXRoRGVmYXVsdFZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKQEAgLTUwNSw3ICs1MDUs
NyBAQCB0ZW1wbGF0ZTw+IFRlc3RPYmo6OkRpY3Rpb25hcnkgY29udmVydERpCiAgICAgaWYgKGlz
TnVsbE9yVW5kZWZpbmVkKQogICAgICAgICBib29sZWFuV2l0aG91dERlZmF1bHRWYWx1ZSA9IGpz
VW5kZWZpbmVkKCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIGJvb2xlYW5XaXRob3V0RGVmYXVsdFZh
bHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwg
ImJvb2xlYW5XaXRob3V0RGVmYXVsdCIpKTsKKyAgICAgICAgYm9vbGVhbldpdGhvdXREZWZhdWx0
VmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJi
b29sZWFuV2l0aG91dERlZmF1bHQiKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgeyB9KTsKICAgICB9CiAgICAgaWYgKCFib29sZWFuV2l0aG91dERlZmF1bHRWYWx1
ZS5pc1VuZGVmaW5lZCgpKSB7CkBAIC01MTYsNyArNTE2LDcgQEAgdGVtcGxhdGU8PiBUZXN0T2Jq
OjpEaWN0aW9uYXJ5IGNvbnZlcnREaQogICAgIGlmIChpc051bGxPclVuZGVmaW5lZCkKICAgICAg
ICAgYnVmZmVyU291cmNlVmFsdWVWYWx1ZSA9IGpzVW5kZWZpbmVkKCk7CiAgICAgZWxzZSB7Ci0g
ICAgICAgIGJ1ZmZlclNvdXJjZVZhbHVlVmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50
aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAiYnVmZmVyU291cmNlVmFsdWUiKSk7CisgICAgICAg
IGJ1ZmZlclNvdXJjZVZhbHVlVmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6
OmZyb21TdHJpbmcodm0sICJidWZmZXJTb3VyY2VWYWx1ZSIpKTsKICAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0KICAgICBpZiAoIWJ1ZmZlclNvdXJj
ZVZhbHVlVmFsdWUuaXNVbmRlZmluZWQoKSkgewpAQCAtNTI3LDcgKzUyNyw3IEBAIHRlbXBsYXRl
PD4gVGVzdE9iajo6RGljdGlvbmFyeSBjb252ZXJ0RGkKICAgICBpZiAoaXNOdWxsT3JVbmRlZmlu
ZWQpCiAgICAgICAgIGRpY3Rpb25hcnlNZW1iZXJWYWx1ZSA9IGpzVW5kZWZpbmVkKCk7CiAgICAg
ZWxzZSB7Ci0gICAgICAgIGRpY3Rpb25hcnlNZW1iZXJWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0
ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJkaWN0aW9uYXJ5TWVtYmVyIikpOwor
ICAgICAgICBkaWN0aW9uYXJ5TWVtYmVyVmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50
aWZpZXI6OmZyb21TdHJpbmcodm0sICJkaWN0aW9uYXJ5TWVtYmVyIikpOwogICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgfQogICAgIGlmICghZGljdGlv
bmFyeU1lbWJlclZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKQEAgLTUzOCw3ICs1MzgsNyBAQCB0ZW1w
bGF0ZTw+IFRlc3RPYmo6OkRpY3Rpb25hcnkgY29udmVydERpCiAgICAgaWYgKGlzTnVsbE9yVW5k
ZWZpbmVkKQogICAgICAgICBlbnVtZXJhdGlvblZhbHVlV2l0aERlZmF1bHRWYWx1ZSA9IGpzVW5k
ZWZpbmVkKCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIGVudW1lcmF0aW9uVmFsdWVXaXRoRGVmYXVs
dFZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0
ZSwgImVudW1lcmF0aW9uVmFsdWVXaXRoRGVmYXVsdCIpKTsKKyAgICAgICAgZW51bWVyYXRpb25W
YWx1ZVdpdGhEZWZhdWx0VmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZy
b21TdHJpbmcodm0sICJlbnVtZXJhdGlvblZhbHVlV2l0aERlZmF1bHQiKSk7CiAgICAgICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICB9CiAgICAgaWYgKCFlbnVt
ZXJhdGlvblZhbHVlV2l0aERlZmF1bHRWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7CkBAIC01NTAsNyAr
NTUwLDcgQEAgdGVtcGxhdGU8PiBUZXN0T2JqOjpEaWN0aW9uYXJ5IGNvbnZlcnREaQogICAgIGlm
IChpc051bGxPclVuZGVmaW5lZCkKICAgICAgICAgZW51bWVyYXRpb25WYWx1ZVdpdGhFbXB0eVN0
cmluZ0RlZmF1bHRWYWx1ZSA9IGpzVW5kZWZpbmVkKCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIGVu
dW1lcmF0aW9uVmFsdWVXaXRoRW1wdHlTdHJpbmdEZWZhdWx0VmFsdWUgPSBvYmplY3QtPmdldCgm
c3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAiZW51bWVyYXRpb25WYWx1ZVdp
dGhFbXB0eVN0cmluZ0RlZmF1bHQiKSk7CisgICAgICAgIGVudW1lcmF0aW9uVmFsdWVXaXRoRW1w
dHlTdHJpbmdEZWZhdWx0VmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZy
b21TdHJpbmcodm0sICJlbnVtZXJhdGlvblZhbHVlV2l0aEVtcHR5U3RyaW5nRGVmYXVsdCIpKTsK
ICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0KICAg
ICBpZiAoIWVudW1lcmF0aW9uVmFsdWVXaXRoRW1wdHlTdHJpbmdEZWZhdWx0VmFsdWUuaXNVbmRl
ZmluZWQoKSkgewpAQCAtNTYyLDcgKzU2Miw3IEBAIHRlbXBsYXRlPD4gVGVzdE9iajo6RGljdGlv
bmFyeSBjb252ZXJ0RGkKICAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQpCiAgICAgICAgIGVudW1l
cmF0aW9uVmFsdWVXaXRob3V0RGVmYXVsdFZhbHVlID0ganNVbmRlZmluZWQoKTsKICAgICBlbHNl
IHsKLSAgICAgICAgZW51bWVyYXRpb25WYWx1ZVdpdGhvdXREZWZhdWx0VmFsdWUgPSBvYmplY3Qt
PmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAiZW51bWVyYXRpb25W
YWx1ZVdpdGhvdXREZWZhdWx0IikpOworICAgICAgICBlbnVtZXJhdGlvblZhbHVlV2l0aG91dERl
ZmF1bHRWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2
bSwgImVudW1lcmF0aW9uVmFsdWVXaXRob3V0RGVmYXVsdCIpKTsKICAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0KICAgICBpZiAoIWVudW1lcmF0aW9u
VmFsdWVXaXRob3V0RGVmYXVsdFZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKQEAgLTU3Myw3ICs1NzMs
NyBAQCB0ZW1wbGF0ZTw+IFRlc3RPYmo6OkRpY3Rpb25hcnkgY29udmVydERpCiAgICAgaWYgKGlz
TnVsbE9yVW5kZWZpbmVkKQogICAgICAgICBmb29BbGlhc1ZhbHVlID0ganNVbmRlZmluZWQoKTsK
ICAgICBlbHNlIHsKLSAgICAgICAgZm9vQWxpYXNWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJmb29BbGlhcyIpKTsKKyAgICAgICAgZm9v
QWxpYXNWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2
bSwgImZvb0FsaWFzIikpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IHsgfSk7CiAgICAgfQogICAgIGlmICghZm9vQWxpYXNWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7CkBA
IC01ODUsNyArNTg1LDcgQEAgdGVtcGxhdGU8PiBUZXN0T2JqOjpEaWN0aW9uYXJ5IGNvbnZlcnRE
aQogICAgIGlmIChpc051bGxPclVuZGVmaW5lZCkKICAgICAgICAgZm9vV2l0aERlZmF1bHRBbGlh
c1ZhbHVlID0ganNVbmRlZmluZWQoKTsKICAgICBlbHNlIHsKLSAgICAgICAgZm9vV2l0aERlZmF1
bHRBbGlhc1ZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KCZzdGF0ZSwgImZvb1dpdGhEZWZhdWx0QWxpYXMiKSk7CisgICAgICAgIGZvb1dpdGhEZWZhdWx0
QWxpYXNWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2
bSwgImZvb1dpdGhEZWZhdWx0QWxpYXMiKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgeyB9KTsKICAgICB9CiAgICAgaWYgKCFmb29XaXRoRGVmYXVsdEFsaWFzVmFs
dWUuaXNVbmRlZmluZWQoKSkgewpAQCAtNTk3LDcgKzU5Nyw3IEBAIHRlbXBsYXRlPD4gVGVzdE9i
ajo6RGljdGlvbmFyeSBjb252ZXJ0RGkKICAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQpCiAgICAg
ICAgIGludGVnZXJWYWx1ZSA9IGpzVW5kZWZpbmVkKCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIGlu
dGVnZXJWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygm
c3RhdGUsICJpbnRlZ2VyIikpOworICAgICAgICBpbnRlZ2VyVmFsdWUgPSBvYmplY3QtPmdldCgm
c3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJpbnRlZ2VyIikpOwogICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgfQogICAgIGlmICghaW50
ZWdlclZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKQEAgLTYwOCw3ICs2MDgsNyBAQCB0ZW1wbGF0ZTw+
IFRlc3RPYmo6OkRpY3Rpb25hcnkgY29udmVydERpCiAgICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVk
KQogICAgICAgICBpbnRlZ2VyV2l0aERlZmF1bHRWYWx1ZSA9IGpzVW5kZWZpbmVkKCk7CiAgICAg
ZWxzZSB7Ci0gICAgICAgIGludGVnZXJXaXRoRGVmYXVsdFZhbHVlID0gb2JqZWN0LT5nZXQoJnN0
YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImludGVnZXJXaXRoRGVmYXVsdCIp
KTsKKyAgICAgICAgaW50ZWdlcldpdGhEZWZhdWx0VmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUs
IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJpbnRlZ2VyV2l0aERlZmF1bHQiKSk7CiAgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICB9CiAgICAgaWYg
KCFpbnRlZ2VyV2l0aERlZmF1bHRWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7CkBAIC02MjAsNyArNjIw
LDcgQEAgdGVtcGxhdGU8PiBUZXN0T2JqOjpEaWN0aW9uYXJ5IGNvbnZlcnREaQogICAgIGlmIChp
c051bGxPclVuZGVmaW5lZCkKICAgICAgICAgbGFyZ2VJbnRlZ2VyVmFsdWUgPSBqc1VuZGVmaW5l
ZCgpOwogICAgIGVsc2UgewotICAgICAgICBsYXJnZUludGVnZXJWYWx1ZSA9IG9iamVjdC0+Z2V0
KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJsYXJnZUludGVnZXIiKSk7
CisgICAgICAgIGxhcmdlSW50ZWdlclZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKHZtLCAibGFyZ2VJbnRlZ2VyIikpOwogICAgICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgfQogICAgIGlmICghbGFyZ2VJbnRlZ2Vy
VmFsdWUuaXNVbmRlZmluZWQoKSkgewpAQCAtNjMxLDcgKzYzMSw3IEBAIHRlbXBsYXRlPD4gVGVz
dE9iajo6RGljdGlvbmFyeSBjb252ZXJ0RGkKICAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQpCiAg
ICAgICAgIGxhcmdlSW50ZWdlcldpdGhEZWZhdWx0VmFsdWUgPSBqc1VuZGVmaW5lZCgpOwogICAg
IGVsc2UgewotICAgICAgICBsYXJnZUludGVnZXJXaXRoRGVmYXVsdFZhbHVlID0gb2JqZWN0LT5n
ZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImxhcmdlSW50ZWdlcldp
dGhEZWZhdWx0IikpOworICAgICAgICBsYXJnZUludGVnZXJXaXRoRGVmYXVsdFZhbHVlID0gb2Jq
ZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAibGFyZ2VJbnRlZ2Vy
V2l0aERlZmF1bHQiKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
eyB9KTsKICAgICB9CiAgICAgaWYgKCFsYXJnZUludGVnZXJXaXRoRGVmYXVsdFZhbHVlLmlzVW5k
ZWZpbmVkKCkpIHsKQEAgLTY0Myw3ICs2NDMsNyBAQCB0ZW1wbGF0ZTw+IFRlc3RPYmo6OkRpY3Rp
b25hcnkgY29udmVydERpCiAgICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKQogICAgICAgICBudWxs
YWJsZUVudW1WYWx1ZSA9IGpzVW5kZWZpbmVkKCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIG51bGxh
YmxlRW51bVZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KCZzdGF0ZSwgIm51bGxhYmxlRW51bSIpKTsKKyAgICAgICAgbnVsbGFibGVFbnVtVmFsdWUgPSBv
YmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJudWxsYWJsZUVu
dW0iKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAg
ICB9CiAgICAgaWYgKCFudWxsYWJsZUVudW1WYWx1ZS5pc1VuZGVmaW5lZCgpKSB7CkBAIC02NTUs
NyArNjU1LDcgQEAgdGVtcGxhdGU8PiBUZXN0T2JqOjpEaWN0aW9uYXJ5IGNvbnZlcnREaQogICAg
IGlmIChpc051bGxPclVuZGVmaW5lZCkKICAgICAgICAgbnVsbGFibGVJbnRlZ2VyV2l0aERlZmF1
bHRWYWx1ZSA9IGpzVW5kZWZpbmVkKCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIG51bGxhYmxlSW50
ZWdlcldpdGhEZWZhdWx0VmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZy
b21TdHJpbmcoJnN0YXRlLCAibnVsbGFibGVJbnRlZ2VyV2l0aERlZmF1bHQiKSk7CisgICAgICAg
IG51bGxhYmxlSW50ZWdlcldpdGhEZWZhdWx0VmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJudWxsYWJsZUludGVnZXJXaXRoRGVmYXVsdCIpKTsK
ICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0KICAg
ICBpZiAoIW51bGxhYmxlSW50ZWdlcldpdGhEZWZhdWx0VmFsdWUuaXNVbmRlZmluZWQoKSkgewpA
QCAtNjY3LDcgKzY2Nyw3IEBAIHRlbXBsYXRlPD4gVGVzdE9iajo6RGljdGlvbmFyeSBjb252ZXJ0
RGkKICAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQpCiAgICAgICAgIG51bGxhYmxlTm9kZVZhbHVl
ID0ganNVbmRlZmluZWQoKTsKICAgICBlbHNlIHsKLSAgICAgICAgbnVsbGFibGVOb2RlVmFsdWUg
PSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAibnVs
bGFibGVOb2RlIikpOworICAgICAgICBudWxsYWJsZU5vZGVWYWx1ZSA9IG9iamVjdC0+Z2V0KCZz
dGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIm51bGxhYmxlTm9kZSIpKTsKICAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0KICAgICBpZiAo
IW51bGxhYmxlTm9kZVZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKQEAgLTY3OSw3ICs2NzksNyBAQCB0
ZW1wbGF0ZTw+IFRlc3RPYmo6OkRpY3Rpb25hcnkgY29udmVydERpCiAgICAgaWYgKGlzTnVsbE9y
VW5kZWZpbmVkKQogICAgICAgICBudWxsYWJsZVN0cmluZ1dpdGhEZWZhdWx0VmFsdWUgPSBqc1Vu
ZGVmaW5lZCgpOwogICAgIGVsc2UgewotICAgICAgICBudWxsYWJsZVN0cmluZ1dpdGhEZWZhdWx0
VmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRl
LCAibnVsbGFibGVTdHJpbmdXaXRoRGVmYXVsdCIpKTsKKyAgICAgICAgbnVsbGFibGVTdHJpbmdX
aXRoRGVmYXVsdFZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKHZtLCAibnVsbGFibGVTdHJpbmdXaXRoRGVmYXVsdCIpKTsKICAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0KICAgICBpZiAoIW51bGxhYmxlU3Ry
aW5nV2l0aERlZmF1bHRWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7CkBAIC02OTEsNyArNjkxLDcgQEAg
dGVtcGxhdGU8PiBUZXN0T2JqOjpEaWN0aW9uYXJ5IGNvbnZlcnREaQogICAgIGlmIChpc051bGxP
clVuZGVmaW5lZCkKICAgICAgICAgbnVsbGFibGVVbmlvbk1lbWJlclZhbHVlID0ganNVbmRlZmlu
ZWQoKTsKICAgICBlbHNlIHsKLSAgICAgICAgbnVsbGFibGVVbmlvbk1lbWJlclZhbHVlID0gb2Jq
ZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgIm51bGxhYmxl
VW5pb25NZW1iZXIiKSk7CisgICAgICAgIG51bGxhYmxlVW5pb25NZW1iZXJWYWx1ZSA9IG9iamVj
dC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIm51bGxhYmxlVW5pb25N
ZW1iZXIiKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsK
ICAgICB9CiAgICAgaWYgKCFudWxsYWJsZVVuaW9uTWVtYmVyVmFsdWUuaXNVbmRlZmluZWQoKSkg
ewpAQCAtNzAzLDcgKzcwMyw3IEBAIHRlbXBsYXRlPD4gVGVzdE9iajo6RGljdGlvbmFyeSBjb252
ZXJ0RGkKICAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQpCiAgICAgICAgIHJlcXVpcmVkQnVmZmVy
U291cmNlVmFsdWVWYWx1ZSA9IGpzVW5kZWZpbmVkKCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIHJl
cXVpcmVkQnVmZmVyU291cmNlVmFsdWVWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJyZXF1aXJlZEJ1ZmZlclNvdXJjZVZhbHVlIikpOwor
ICAgICAgICByZXF1aXJlZEJ1ZmZlclNvdXJjZVZhbHVlVmFsdWUgPSBvYmplY3QtPmdldCgmc3Rh
dGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJyZXF1aXJlZEJ1ZmZlclNvdXJjZVZhbHVl
IikpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAg
fQogICAgIGlmICghcmVxdWlyZWRCdWZmZXJTb3VyY2VWYWx1ZVZhbHVlLmlzVW5kZWZpbmVkKCkp
IHsKQEAgLTcxNyw3ICs3MTcsNyBAQCB0ZW1wbGF0ZTw+IFRlc3RPYmo6OkRpY3Rpb25hcnkgY29u
dmVydERpCiAgICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKQogICAgICAgICByZXN0cmljdGVkRG91
YmxlVmFsdWUgPSBqc1VuZGVmaW5lZCgpOwogICAgIGVsc2UgewotICAgICAgICByZXN0cmljdGVk
RG91YmxlVmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmco
JnN0YXRlLCAicmVzdHJpY3RlZERvdWJsZSIpKTsKKyAgICAgICAgcmVzdHJpY3RlZERvdWJsZVZh
bHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAicmVz
dHJpY3RlZERvdWJsZSIpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3Bl
LCB7IH0pOwogICAgIH0KICAgICBpZiAoIXJlc3RyaWN0ZWREb3VibGVWYWx1ZS5pc1VuZGVmaW5l
ZCgpKSB7CkBAIC03MjgsNyArNzI4LDcgQEAgdGVtcGxhdGU8PiBUZXN0T2JqOjpEaWN0aW9uYXJ5
IGNvbnZlcnREaQogICAgIGlmIChpc051bGxPclVuZGVmaW5lZCkKICAgICAgICAgcmVzdHJpY3Rl
ZERvdWJsZVdpdGhEZWZhdWx0VmFsdWUgPSBqc1VuZGVmaW5lZCgpOwogICAgIGVsc2UgewotICAg
ICAgICByZXN0cmljdGVkRG91YmxlV2l0aERlZmF1bHRWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0
ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJyZXN0cmljdGVkRG91YmxlV2l0aERl
ZmF1bHQiKSk7CisgICAgICAgIHJlc3RyaWN0ZWREb3VibGVXaXRoRGVmYXVsdFZhbHVlID0gb2Jq
ZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAicmVzdHJpY3RlZERv
dWJsZVdpdGhEZWZhdWx0IikpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2Nv
cGUsIHsgfSk7CiAgICAgfQogICAgIGlmICghcmVzdHJpY3RlZERvdWJsZVdpdGhEZWZhdWx0VmFs
dWUuaXNVbmRlZmluZWQoKSkgewpAQCAtNzQwLDcgKzc0MCw3IEBAIHRlbXBsYXRlPD4gVGVzdE9i
ajo6RGljdGlvbmFyeSBjb252ZXJ0RGkKICAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQpCiAgICAg
ICAgIHJlc3RyaWN0ZWRGbG9hdFZhbHVlID0ganNVbmRlZmluZWQoKTsKICAgICBlbHNlIHsKLSAg
ICAgICAgcmVzdHJpY3RlZEZsb2F0VmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAicmVzdHJpY3RlZEZsb2F0IikpOworICAgICAgICByZXN0
cmljdGVkRmxvYXRWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZyh2bSwgInJlc3RyaWN0ZWRGbG9hdCIpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0KICAgICBpZiAoIXJlc3RyaWN0ZWRGbG9hdFZhbHVl
LmlzVW5kZWZpbmVkKCkpIHsKQEAgLTc1MSw3ICs3NTEsNyBAQCB0ZW1wbGF0ZTw+IFRlc3RPYmo6
OkRpY3Rpb25hcnkgY29udmVydERpCiAgICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKQogICAgICAg
ICByZXN0cmljdGVkRmxvYXRXaXRoRGVmYXVsdFZhbHVlID0ganNVbmRlZmluZWQoKTsKICAgICBl
bHNlIHsKLSAgICAgICAgcmVzdHJpY3RlZEZsb2F0V2l0aERlZmF1bHRWYWx1ZSA9IG9iamVjdC0+
Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJyZXN0cmljdGVkRmxv
YXRXaXRoRGVmYXVsdCIpKTsKKyAgICAgICAgcmVzdHJpY3RlZEZsb2F0V2l0aERlZmF1bHRWYWx1
ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInJlc3Ry
aWN0ZWRGbG9hdFdpdGhEZWZhdWx0IikpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIHsgfSk7CiAgICAgfQogICAgIGlmICghcmVzdHJpY3RlZEZsb2F0V2l0aERlZmF1
bHRWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7CkBAIC03NjMsNyArNzYzLDcgQEAgdGVtcGxhdGU8PiBU
ZXN0T2JqOjpEaWN0aW9uYXJ5IGNvbnZlcnREaQogICAgIGlmIChpc051bGxPclVuZGVmaW5lZCkK
ICAgICAgICAgc2VxdWVuY2VPZlN0cmluZ3NWYWx1ZSA9IGpzVW5kZWZpbmVkKCk7CiAgICAgZWxz
ZSB7Ci0gICAgICAgIHNlcXVlbmNlT2ZTdHJpbmdzVmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUs
IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAic2VxdWVuY2VPZlN0cmluZ3MiKSk7Cisg
ICAgICAgIHNlcXVlbmNlT2ZTdHJpbmdzVmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50
aWZpZXI6OmZyb21TdHJpbmcodm0sICJzZXF1ZW5jZU9mU3RyaW5ncyIpKTsKICAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0KICAgICBpZiAoIXNlcXVl
bmNlT2ZTdHJpbmdzVmFsdWUuaXNVbmRlZmluZWQoKSkgewpAQCAtNzc0LDcgKzc3NCw3IEBAIHRl
bXBsYXRlPD4gVGVzdE9iajo6RGljdGlvbmFyeSBjb252ZXJ0RGkKICAgICBpZiAoaXNOdWxsT3JV
bmRlZmluZWQpCiAgICAgICAgIHNtYWxsSW50ZWdlckNsYW1wZWRWYWx1ZSA9IGpzVW5kZWZpbmVk
KCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIHNtYWxsSW50ZWdlckNsYW1wZWRWYWx1ZSA9IG9iamVj
dC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJzbWFsbEludGVn
ZXJDbGFtcGVkIikpOworICAgICAgICBzbWFsbEludGVnZXJDbGFtcGVkVmFsdWUgPSBvYmplY3Qt
PmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJzbWFsbEludGVnZXJDbGFt
cGVkIikpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAg
ICAgfQogICAgIGlmICghc21hbGxJbnRlZ2VyQ2xhbXBlZFZhbHVlLmlzVW5kZWZpbmVkKCkpIHsK
QEAgLTc4NSw3ICs3ODUsNyBAQCB0ZW1wbGF0ZTw+IFRlc3RPYmo6OkRpY3Rpb25hcnkgY29udmVy
dERpCiAgICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKQogICAgICAgICBzbWFsbEludGVnZXJXaXRo
RGVmYXVsdFZhbHVlID0ganNVbmRlZmluZWQoKTsKICAgICBlbHNlIHsKLSAgICAgICAgc21hbGxJ
bnRlZ2VyV2l0aERlZmF1bHRWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZygmc3RhdGUsICJzbWFsbEludGVnZXJXaXRoRGVmYXVsdCIpKTsKKyAgICAgICAg
c21hbGxJbnRlZ2VyV2l0aERlZmF1bHRWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZyh2bSwgInNtYWxsSW50ZWdlcldpdGhEZWZhdWx0IikpOwogICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgfQogICAgIGlmICgh
c21hbGxJbnRlZ2VyV2l0aERlZmF1bHRWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7CkBAIC03OTYsNyAr
Nzk2LDcgQEAgdGVtcGxhdGU8PiBUZXN0T2JqOjpEaWN0aW9uYXJ5IGNvbnZlcnREaQogICAgIGlm
IChpc051bGxPclVuZGVmaW5lZCkKICAgICAgICAgc21hbGxVbnNpZ25lZEludGVnZXJFbmZvcmNl
ZFJhbmdlVmFsdWUgPSBqc1VuZGVmaW5lZCgpOwogICAgIGVsc2UgewotICAgICAgICBzbWFsbFVu
c2lnbmVkSW50ZWdlckVuZm9yY2VkUmFuZ2VWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJzbWFsbFVuc2lnbmVkSW50ZWdlckVuZm9yY2Vk
UmFuZ2UiKSk7CisgICAgICAgIHNtYWxsVW5zaWduZWRJbnRlZ2VyRW5mb3JjZWRSYW5nZVZhbHVl
ID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAic21hbGxV
bnNpZ25lZEludGVnZXJFbmZvcmNlZFJhbmdlIikpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgfQogICAgIGlmICghc21hbGxVbnNpZ25lZEludGVn
ZXJFbmZvcmNlZFJhbmdlVmFsdWUuaXNVbmRlZmluZWQoKSkgewpAQCAtODA3LDcgKzgwNyw3IEBA
IHRlbXBsYXRlPD4gVGVzdE9iajo6RGljdGlvbmFyeSBjb252ZXJ0RGkKICAgICBpZiAoaXNOdWxs
T3JVbmRlZmluZWQpCiAgICAgICAgIHNtYWxsVW5zaWduZWRJbnRlZ2VyV2l0aERlZmF1bHRWYWx1
ZSA9IGpzVW5kZWZpbmVkKCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIHNtYWxsVW5zaWduZWRJbnRl
Z2VyV2l0aERlZmF1bHRWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZygmc3RhdGUsICJzbWFsbFVuc2lnbmVkSW50ZWdlcldpdGhEZWZhdWx0IikpOworICAg
ICAgICBzbWFsbFVuc2lnbmVkSW50ZWdlcldpdGhEZWZhdWx0VmFsdWUgPSBvYmplY3QtPmdldCgm
c3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJzbWFsbFVuc2lnbmVkSW50ZWdlcldp
dGhEZWZhdWx0IikpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsg
fSk7CiAgICAgfQogICAgIGlmICghc21hbGxVbnNpZ25lZEludGVnZXJXaXRoRGVmYXVsdFZhbHVl
LmlzVW5kZWZpbmVkKCkpIHsKQEAgLTgxOSw3ICs4MTksNyBAQCB0ZW1wbGF0ZTw+IFRlc3RPYmo6
OkRpY3Rpb25hcnkgY29udmVydERpCiAgICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKQogICAgICAg
ICBzdHJpbmdUcmVhdE51bGxBc0VtcHR5U3RyaW5nVmFsdWUgPSBqc1VuZGVmaW5lZCgpOwogICAg
IGVsc2UgewotICAgICAgICBzdHJpbmdUcmVhdE51bGxBc0VtcHR5U3RyaW5nVmFsdWUgPSBvYmpl
Y3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAic3RyaW5nVHJl
YXROdWxsQXNFbXB0eVN0cmluZyIpKTsKKyAgICAgICAgc3RyaW5nVHJlYXROdWxsQXNFbXB0eVN0
cmluZ1ZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZt
LCAic3RyaW5nVHJlYXROdWxsQXNFbXB0eVN0cmluZyIpKTsKICAgICAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0KICAgICBpZiAoIXN0cmluZ1RyZWF0TnVs
bEFzRW1wdHlTdHJpbmdWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7CkBAIC04MzAsNyArODMwLDcgQEAg
dGVtcGxhdGU8PiBUZXN0T2JqOjpEaWN0aW9uYXJ5IGNvbnZlcnREaQogICAgIGlmIChpc051bGxP
clVuZGVmaW5lZCkKICAgICAgICAgc3RyaW5nV2l0aERlZmF1bHRWYWx1ZSA9IGpzVW5kZWZpbmVk
KCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIHN0cmluZ1dpdGhEZWZhdWx0VmFsdWUgPSBvYmplY3Qt
PmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAic3RyaW5nV2l0aERl
ZmF1bHQiKSk7CisgICAgICAgIHN0cmluZ1dpdGhEZWZhdWx0VmFsdWUgPSBvYmplY3QtPmdldCgm
c3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJzdHJpbmdXaXRoRGVmYXVsdCIpKTsK
ICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0KICAg
ICBpZiAoIXN0cmluZ1dpdGhEZWZhdWx0VmFsdWUuaXNVbmRlZmluZWQoKSkgewpAQCAtODQyLDcg
Kzg0Miw3IEBAIHRlbXBsYXRlPD4gVGVzdE9iajo6RGljdGlvbmFyeSBjb252ZXJ0RGkKICAgICBp
ZiAoaXNOdWxsT3JVbmRlZmluZWQpCiAgICAgICAgIHN0cmluZ1dpdGhvdXREZWZhdWx0VmFsdWUg
PSBqc1VuZGVmaW5lZCgpOwogICAgIGVsc2UgewotICAgICAgICBzdHJpbmdXaXRob3V0RGVmYXVs
dFZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0
ZSwgInN0cmluZ1dpdGhvdXREZWZhdWx0IikpOworICAgICAgICBzdHJpbmdXaXRob3V0RGVmYXVs
dFZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAi
c3RyaW5nV2l0aG91dERlZmF1bHQiKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgeyB9KTsKICAgICB9CiAgICAgaWYgKCFzdHJpbmdXaXRob3V0RGVmYXVsdFZhbHVl
LmlzVW5kZWZpbmVkKCkpIHsKQEAgLTg1Myw3ICs4NTMsNyBAQCB0ZW1wbGF0ZTw+IFRlc3RPYmo6
OkRpY3Rpb25hcnkgY29udmVydERpCiAgICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKQogICAgICAg
ICB1bmlvbk1lbWJlclZhbHVlID0ganNVbmRlZmluZWQoKTsKICAgICBlbHNlIHsKLSAgICAgICAg
dW5pb25NZW1iZXJWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZygmc3RhdGUsICJ1bmlvbk1lbWJlciIpKTsKKyAgICAgICAgdW5pb25NZW1iZXJWYWx1ZSA9
IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInVuaW9uTWVt
YmVyIikpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAg
ICAgfQogICAgIGlmICghdW5pb25NZW1iZXJWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7CkBAIC04NjQs
NyArODY0LDcgQEAgdGVtcGxhdGU8PiBUZXN0T2JqOjpEaWN0aW9uYXJ5IGNvbnZlcnREaQogICAg
IGlmIChpc051bGxPclVuZGVmaW5lZCkKICAgICAgICAgdW5yZXN0cmljdGVkRG91YmxlVmFsdWUg
PSBqc1VuZGVmaW5lZCgpOwogICAgIGVsc2UgewotICAgICAgICB1bnJlc3RyaWN0ZWREb3VibGVW
YWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUs
ICJ1bnJlc3RyaWN0ZWREb3VibGUiKSk7CisgICAgICAgIHVucmVzdHJpY3RlZERvdWJsZVZhbHVl
ID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAidW5yZXN0
cmljdGVkRG91YmxlIikpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IHsgfSk7CiAgICAgfQogICAgIGlmICghdW5yZXN0cmljdGVkRG91YmxlVmFsdWUuaXNVbmRlZmlu
ZWQoKSkgewpAQCAtODc1LDcgKzg3NSw3IEBAIHRlbXBsYXRlPD4gVGVzdE9iajo6RGljdGlvbmFy
eSBjb252ZXJ0RGkKICAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQpCiAgICAgICAgIHVucmVzdHJp
Y3RlZERvdWJsZVdpdGhEZWZhdWx0VmFsdWUgPSBqc1VuZGVmaW5lZCgpOwogICAgIGVsc2Ugewot
ICAgICAgICB1bnJlc3RyaWN0ZWREb3VibGVXaXRoRGVmYXVsdFZhbHVlID0gb2JqZWN0LT5nZXQo
JnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgInVucmVzdHJpY3RlZERvdWJs
ZVdpdGhEZWZhdWx0IikpOworICAgICAgICB1bnJlc3RyaWN0ZWREb3VibGVXaXRoRGVmYXVsdFZh
bHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAidW5y
ZXN0cmljdGVkRG91YmxlV2l0aERlZmF1bHQiKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04odGhyb3dTY29wZSwgeyB9KTsKICAgICB9CiAgICAgaWYgKCF1bnJlc3RyaWN0ZWREb3VibGVX
aXRoRGVmYXVsdFZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKQEAgLTg4Nyw3ICs4ODcsNyBAQCB0ZW1w
bGF0ZTw+IFRlc3RPYmo6OkRpY3Rpb25hcnkgY29udmVydERpCiAgICAgaWYgKGlzTnVsbE9yVW5k
ZWZpbmVkKQogICAgICAgICB1bnJlc3RyaWN0ZWRGbG9hdFZhbHVlID0ganNVbmRlZmluZWQoKTsK
ICAgICBlbHNlIHsKLSAgICAgICAgdW5yZXN0cmljdGVkRmxvYXRWYWx1ZSA9IG9iamVjdC0+Z2V0
KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJ1bnJlc3RyaWN0ZWRGbG9h
dCIpKTsKKyAgICAgICAgdW5yZXN0cmljdGVkRmxvYXRWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0
ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInVucmVzdHJpY3RlZEZsb2F0IikpOwogICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgfQogICAgIGlm
ICghdW5yZXN0cmljdGVkRmxvYXRWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7CkBAIC04OTgsNyArODk4
LDcgQEAgdGVtcGxhdGU8PiBUZXN0T2JqOjpEaWN0aW9uYXJ5IGNvbnZlcnREaQogICAgIGlmIChp
c051bGxPclVuZGVmaW5lZCkKICAgICAgICAgdW5yZXN0cmljdGVkRmxvYXRXaXRoRGVmYXVsdFZh
bHVlID0ganNVbmRlZmluZWQoKTsKICAgICBlbHNlIHsKLSAgICAgICAgdW5yZXN0cmljdGVkRmxv
YXRXaXRoRGVmYXVsdFZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKCZzdGF0ZSwgInVucmVzdHJpY3RlZEZsb2F0V2l0aERlZmF1bHQiKSk7CisgICAgICAg
IHVucmVzdHJpY3RlZEZsb2F0V2l0aERlZmF1bHRWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInVucmVzdHJpY3RlZEZsb2F0V2l0aERlZmF1bHQi
KSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICB9
CiAgICAgaWYgKCF1bnJlc3RyaWN0ZWRGbG9hdFdpdGhEZWZhdWx0VmFsdWUuaXNVbmRlZmluZWQo
KSkgewpAQCAtOTEwLDcgKzkxMCw3IEBAIHRlbXBsYXRlPD4gVGVzdE9iajo6RGljdGlvbmFyeSBj
b252ZXJ0RGkKICAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQpCiAgICAgICAgIHVuc2lnbmVkSW50
ZWdlclZhbHVlID0ganNVbmRlZmluZWQoKTsKICAgICBlbHNlIHsKLSAgICAgICAgdW5zaWduZWRJ
bnRlZ2VyVmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmco
JnN0YXRlLCAidW5zaWduZWRJbnRlZ2VyIikpOworICAgICAgICB1bnNpZ25lZEludGVnZXJWYWx1
ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInVuc2ln
bmVkSW50ZWdlciIpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7
IH0pOwogICAgIH0KICAgICBpZiAoIXVuc2lnbmVkSW50ZWdlclZhbHVlLmlzVW5kZWZpbmVkKCkp
IHsKQEAgLTkyMSw3ICs5MjEsNyBAQCB0ZW1wbGF0ZTw+IFRlc3RPYmo6OkRpY3Rpb25hcnkgY29u
dmVydERpCiAgICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKQogICAgICAgICB1bnNpZ25lZEludGVn
ZXJXaXRoRGVmYXVsdFZhbHVlID0ganNVbmRlZmluZWQoKTsKICAgICBlbHNlIHsKLSAgICAgICAg
dW5zaWduZWRJbnRlZ2VyV2l0aERlZmF1bHRWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJ1bnNpZ25lZEludGVnZXJXaXRoRGVmYXVsdCIp
KTsKKyAgICAgICAgdW5zaWduZWRJbnRlZ2VyV2l0aERlZmF1bHRWYWx1ZSA9IG9iamVjdC0+Z2V0
KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInVuc2lnbmVkSW50ZWdlcldpdGhE
ZWZhdWx0IikpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7
CiAgICAgfQogICAgIGlmICghdW5zaWduZWRJbnRlZ2VyV2l0aERlZmF1bHRWYWx1ZS5pc1VuZGVm
aW5lZCgpKSB7CkBAIC05MzMsNyArOTMzLDcgQEAgdGVtcGxhdGU8PiBUZXN0T2JqOjpEaWN0aW9u
YXJ5IGNvbnZlcnREaQogICAgIGlmIChpc051bGxPclVuZGVmaW5lZCkKICAgICAgICAgdW5zaWdu
ZWRMYXJnZUludGVnZXJWYWx1ZSA9IGpzVW5kZWZpbmVkKCk7CiAgICAgZWxzZSB7Ci0gICAgICAg
IHVuc2lnbmVkTGFyZ2VJbnRlZ2VyVmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAidW5zaWduZWRMYXJnZUludGVnZXIiKSk7CisgICAgICAg
IHVuc2lnbmVkTGFyZ2VJbnRlZ2VyVmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcodm0sICJ1bnNpZ25lZExhcmdlSW50ZWdlciIpKTsKICAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0KICAgICBpZiAoIXVuc2ln
bmVkTGFyZ2VJbnRlZ2VyVmFsdWUuaXNVbmRlZmluZWQoKSkgewpAQCAtOTQ0LDcgKzk0NCw3IEBA
IHRlbXBsYXRlPD4gVGVzdE9iajo6RGljdGlvbmFyeSBjb252ZXJ0RGkKICAgICBpZiAoaXNOdWxs
T3JVbmRlZmluZWQpCiAgICAgICAgIHVuc2lnbmVkTGFyZ2VJbnRlZ2VyV2l0aERlZmF1bHRWYWx1
ZSA9IGpzVW5kZWZpbmVkKCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIHVuc2lnbmVkTGFyZ2VJbnRl
Z2VyV2l0aERlZmF1bHRWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZygmc3RhdGUsICJ1bnNpZ25lZExhcmdlSW50ZWdlcldpdGhEZWZhdWx0IikpOworICAg
ICAgICB1bnNpZ25lZExhcmdlSW50ZWdlcldpdGhEZWZhdWx0VmFsdWUgPSBvYmplY3QtPmdldCgm
c3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJ1bnNpZ25lZExhcmdlSW50ZWdlcldp
dGhEZWZhdWx0IikpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsg
fSk7CiAgICAgfQogICAgIGlmICghdW5zaWduZWRMYXJnZUludGVnZXJXaXRoRGVmYXVsdFZhbHVl
LmlzVW5kZWZpbmVkKCkpIHsKQEAgLTk2MywxMzYgKzk2MywxMzYgQEAgSlNDOjpKU09iamVjdCog
Y29udmVydERpY3Rpb25hcnlUb0pTKEpTQwogCiAgICAgaWYgKCFJRExTZXF1ZW5jZTxJRExDbGFt
cEFkYXB0b3I8SURMTG9uZz4+Ojppc051bGxWYWx1ZShkaWN0aW9uYXJ5LmFubm90YXRlZFR5cGVJ
blNlcXVlbmNlTWVtYmVyKSkgewogICAgICAgICBhdXRvIGFubm90YXRlZFR5cGVJblNlcXVlbmNl
TWVtYmVyVmFsdWUgPSB0b0pTPElETFNlcXVlbmNlPElETENsYW1wQWRhcHRvcjxJRExMb25nPj4+
KHN0YXRlLCBnbG9iYWxPYmplY3QsIElETFNlcXVlbmNlPElETENsYW1wQWRhcHRvcjxJRExMb25n
Pj46OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZShkaWN0aW9uYXJ5LmFubm90YXRlZFR5cGVJblNl
cXVlbmNlTWVtYmVyKSk7Ci0gICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50
aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiYW5ub3RhdGVkVHlwZUluU2VxdWVuY2VNZW1iZXIiKSwg
YW5ub3RhdGVkVHlwZUluU2VxdWVuY2VNZW1iZXJWYWx1ZSk7CisgICAgICAgIHJlc3VsdC0+cHV0
RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJhbm5vdGF0ZWRUeXBl
SW5TZXF1ZW5jZU1lbWJlciIpLCBhbm5vdGF0ZWRUeXBlSW5TZXF1ZW5jZU1lbWJlclZhbHVlKTsK
ICAgICB9CiAgICAgaWYgKCFJRExVbmlvbjxJRExET01TdHJpbmcsIElETENsYW1wQWRhcHRvcjxJ
RExMb25nPj46OmlzTnVsbFZhbHVlKGRpY3Rpb25hcnkuYW5ub3RhdGVkVHlwZUluVW5pb25NZW1i
ZXIpKSB7CiAgICAgICAgIGF1dG8gYW5ub3RhdGVkVHlwZUluVW5pb25NZW1iZXJWYWx1ZSA9IHRv
SlM8SURMVW5pb248SURMRE9NU3RyaW5nLCBJRExDbGFtcEFkYXB0b3I8SURMTG9uZz4+PihzdGF0
ZSwgZ2xvYmFsT2JqZWN0LCBJRExVbmlvbjxJRExET01TdHJpbmcsIElETENsYW1wQWRhcHRvcjxJ
RExMb25nPj46OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZShkaWN0aW9uYXJ5LmFubm90YXRlZFR5
cGVJblVuaW9uTWVtYmVyKSk7Ci0gICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6Oklk
ZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiYW5ub3RhdGVkVHlwZUluVW5pb25NZW1iZXIiKSwg
YW5ub3RhdGVkVHlwZUluVW5pb25NZW1iZXJWYWx1ZSk7CisgICAgICAgIHJlc3VsdC0+cHV0RGly
ZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJhbm5vdGF0ZWRUeXBlSW5V
bmlvbk1lbWJlciIpLCBhbm5vdGF0ZWRUeXBlSW5Vbmlvbk1lbWJlclZhbHVlKTsKICAgICB9CiAg
ICAgYXV0byBhbnlUeXBlZGVmVmFsdWVWYWx1ZSA9IHRvSlM8SURMQW55PihkaWN0aW9uYXJ5LmFu
eVR5cGVkZWZWYWx1ZSk7Ci0gICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmll
cjo6ZnJvbVN0cmluZygmdm0sICJhbnlUeXBlZGVmVmFsdWUiKSwgYW55VHlwZWRlZlZhbHVlVmFs
dWUpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJp
bmcodm0sICJhbnlUeXBlZGVmVmFsdWUiKSwgYW55VHlwZWRlZlZhbHVlVmFsdWUpOwogICAgIGF1
dG8gYW55VmFsdWVWYWx1ZSA9IHRvSlM8SURMQW55PihkaWN0aW9uYXJ5LmFueVZhbHVlKTsKLSAg
ICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwg
ImFueVZhbHVlIiksIGFueVZhbHVlVmFsdWUpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBK
U0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJhbnlWYWx1ZSIpLCBhbnlWYWx1ZVZhbHVl
KTsKICAgICBhdXRvIGFueVZhbHVlV2l0aE51bGxEZWZhdWx0VmFsdWUgPSB0b0pTPElETEFueT4o
ZGljdGlvbmFyeS5hbnlWYWx1ZVdpdGhOdWxsRGVmYXVsdCk7Ci0gICAgcmVzdWx0LT5wdXREaXJl
Y3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJhbnlWYWx1ZVdpdGhOdWxs
RGVmYXVsdCIpLCBhbnlWYWx1ZVdpdGhOdWxsRGVmYXVsdFZhbHVlKTsKKyAgICByZXN1bHQtPnB1
dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiYW55VmFsdWVXaXRo
TnVsbERlZmF1bHQiKSwgYW55VmFsdWVXaXRoTnVsbERlZmF1bHRWYWx1ZSk7CiAgICAgYXV0byBi
b29sZWFuV2l0aERlZmF1bHRWYWx1ZSA9IHRvSlM8SURMQm9vbGVhbj4oZGljdGlvbmFyeS5ib29s
ZWFuV2l0aERlZmF1bHQpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZp
ZXI6OmZyb21TdHJpbmcoJnZtLCAiYm9vbGVhbldpdGhEZWZhdWx0IiksIGJvb2xlYW5XaXRoRGVm
YXVsdFZhbHVlKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCAiYm9vbGVhbldpdGhEZWZhdWx0IiksIGJvb2xlYW5XaXRoRGVmYXVsdFZh
bHVlKTsKICAgICBpZiAoIUlETEJvb2xlYW46OmlzTnVsbFZhbHVlKGRpY3Rpb25hcnkuYm9vbGVh
bldpdGhvdXREZWZhdWx0KSkgewogICAgICAgICBhdXRvIGJvb2xlYW5XaXRob3V0RGVmYXVsdFZh
bHVlID0gdG9KUzxJRExCb29sZWFuPihJRExCb29sZWFuOjpleHRyYWN0VmFsdWVGcm9tTnVsbGFi
bGUoZGljdGlvbmFyeS5ib29sZWFuV2l0aG91dERlZmF1bHQpKTsKLSAgICAgICAgcmVzdWx0LT5w
dXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJib29sZWFuV2l0
aG91dERlZmF1bHQiKSwgYm9vbGVhbldpdGhvdXREZWZhdWx0VmFsdWUpOworICAgICAgICByZXN1
bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiYm9vbGVh
bldpdGhvdXREZWZhdWx0IiksIGJvb2xlYW5XaXRob3V0RGVmYXVsdFZhbHVlKTsKICAgICB9CiAg
ICAgaWYgKCFJRExVbmlvbjxJRExBcnJheUJ1ZmZlclZpZXcsIElETEFycmF5QnVmZmVyPjo6aXNO
dWxsVmFsdWUoZGljdGlvbmFyeS5idWZmZXJTb3VyY2VWYWx1ZSkpIHsKICAgICAgICAgYXV0byBi
dWZmZXJTb3VyY2VWYWx1ZVZhbHVlID0gdG9KUzxJRExVbmlvbjxJRExBcnJheUJ1ZmZlclZpZXcs
IElETEFycmF5QnVmZmVyPj4oc3RhdGUsIGdsb2JhbE9iamVjdCwgSURMVW5pb248SURMQXJyYXlC
dWZmZXJWaWV3LCBJRExBcnJheUJ1ZmZlcj46OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZShkaWN0
aW9uYXJ5LmJ1ZmZlclNvdXJjZVZhbHVlKSk7Ci0gICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZt
LCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiYnVmZmVyU291cmNlVmFsdWUiKSwg
YnVmZmVyU291cmNlVmFsdWVWYWx1ZSk7CisgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBK
U0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJidWZmZXJTb3VyY2VWYWx1ZSIpLCBidWZm
ZXJTb3VyY2VWYWx1ZVZhbHVlKTsKICAgICB9CiAgICAgaWYgKCFJRExEaWN0aW9uYXJ5PFRlc3RP
Ymo6OkRpY3Rpb25hcnlUaGF0U2hvdWxkVG9sZXJhdGVOdWxsPjo6aXNOdWxsVmFsdWUoZGljdGlv
bmFyeS5kaWN0aW9uYXJ5TWVtYmVyKSkgewogICAgICAgICBhdXRvIGRpY3Rpb25hcnlNZW1iZXJW
YWx1ZSA9IHRvSlM8SURMRGljdGlvbmFyeTxUZXN0T2JqOjpEaWN0aW9uYXJ5VGhhdFNob3VsZFRv
bGVyYXRlTnVsbD4+KHN0YXRlLCBnbG9iYWxPYmplY3QsIElETERpY3Rpb25hcnk8VGVzdE9iajo6
RGljdGlvbmFyeVRoYXRTaG91bGRUb2xlcmF0ZU51bGw+OjpleHRyYWN0VmFsdWVGcm9tTnVsbGFi
bGUoZGljdGlvbmFyeS5kaWN0aW9uYXJ5TWVtYmVyKSk7Ci0gICAgICAgIHJlc3VsdC0+cHV0RGly
ZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiZGljdGlvbmFyeU1lbWJl
ciIpLCBkaWN0aW9uYXJ5TWVtYmVyVmFsdWUpOworICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2
bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiZGljdGlvbmFyeU1lbWJlciIpLCBk
aWN0aW9uYXJ5TWVtYmVyVmFsdWUpOwogICAgIH0KICAgICBhdXRvIGVudW1lcmF0aW9uVmFsdWVX
aXRoRGVmYXVsdFZhbHVlID0gdG9KUzxJRExFbnVtZXJhdGlvbjxUZXN0T2JqOjpFbnVtVHlwZT4+
KHN0YXRlLCBkaWN0aW9uYXJ5LmVudW1lcmF0aW9uVmFsdWVXaXRoRGVmYXVsdCk7Ci0gICAgcmVz
dWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJlbnVt
ZXJhdGlvblZhbHVlV2l0aERlZmF1bHQiKSwgZW51bWVyYXRpb25WYWx1ZVdpdGhEZWZhdWx0VmFs
dWUpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJp
bmcodm0sICJlbnVtZXJhdGlvblZhbHVlV2l0aERlZmF1bHQiKSwgZW51bWVyYXRpb25WYWx1ZVdp
dGhEZWZhdWx0VmFsdWUpOwogICAgIGF1dG8gZW51bWVyYXRpb25WYWx1ZVdpdGhFbXB0eVN0cmlu
Z0RlZmF1bHRWYWx1ZSA9IHRvSlM8SURMRW51bWVyYXRpb248VGVzdE9iajo6RW51bVR5cGU+Pihz
dGF0ZSwgZGljdGlvbmFyeS5lbnVtZXJhdGlvblZhbHVlV2l0aEVtcHR5U3RyaW5nRGVmYXVsdCk7
Ci0gICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygm
dm0sICJlbnVtZXJhdGlvblZhbHVlV2l0aEVtcHR5U3RyaW5nRGVmYXVsdCIpLCBlbnVtZXJhdGlv
blZhbHVlV2l0aEVtcHR5U3RyaW5nRGVmYXVsdFZhbHVlKTsKKyAgICByZXN1bHQtPnB1dERpcmVj
dCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiZW51bWVyYXRpb25WYWx1ZVdp
dGhFbXB0eVN0cmluZ0RlZmF1bHQiKSwgZW51bWVyYXRpb25WYWx1ZVdpdGhFbXB0eVN0cmluZ0Rl
ZmF1bHRWYWx1ZSk7CiAgICAgaWYgKCFJRExFbnVtZXJhdGlvbjxUZXN0T2JqOjpFbnVtVHlwZT46
OmlzTnVsbFZhbHVlKGRpY3Rpb25hcnkuZW51bWVyYXRpb25WYWx1ZVdpdGhvdXREZWZhdWx0KSkg
ewogICAgICAgICBhdXRvIGVudW1lcmF0aW9uVmFsdWVXaXRob3V0RGVmYXVsdFZhbHVlID0gdG9K
UzxJRExFbnVtZXJhdGlvbjxUZXN0T2JqOjpFbnVtVHlwZT4+KHN0YXRlLCBJRExFbnVtZXJhdGlv
bjxUZXN0T2JqOjpFbnVtVHlwZT46OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZShkaWN0aW9uYXJ5
LmVudW1lcmF0aW9uVmFsdWVXaXRob3V0RGVmYXVsdCkpOwotICAgICAgICByZXN1bHQtPnB1dERp
cmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImVudW1lcmF0aW9uVmFs
dWVXaXRob3V0RGVmYXVsdCIpLCBlbnVtZXJhdGlvblZhbHVlV2l0aG91dERlZmF1bHRWYWx1ZSk7
CisgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJp
bmcodm0sICJlbnVtZXJhdGlvblZhbHVlV2l0aG91dERlZmF1bHQiKSwgZW51bWVyYXRpb25WYWx1
ZVdpdGhvdXREZWZhdWx0VmFsdWUpOwogICAgIH0KICAgICBhdXRvIGZvb0FsaWFzVmFsdWUgPSB0
b0pTPElETEFueT4oZGljdGlvbmFyeS5mb28pOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBK
U0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiZm9vQWxpYXMiKSwgZm9vQWxpYXNWYWx1
ZSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zyh2bSwgImZvb0FsaWFzIiksIGZvb0FsaWFzVmFsdWUpOwogICAgIGF1dG8gZm9vV2l0aERlZmF1
bHRBbGlhc1ZhbHVlID0gdG9KUzxJRExBbnk+KGRpY3Rpb25hcnkuZm9vV2l0aERlZmF1bHQpOwot
ICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZt
LCAiZm9vV2l0aERlZmF1bHRBbGlhcyIpLCBmb29XaXRoRGVmYXVsdEFsaWFzVmFsdWUpOworICAg
IHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJm
b29XaXRoRGVmYXVsdEFsaWFzIiksIGZvb1dpdGhEZWZhdWx0QWxpYXNWYWx1ZSk7CiAgICAgaWYg
KCFJRExMb25nOjppc051bGxWYWx1ZShkaWN0aW9uYXJ5LmludGVnZXIpKSB7CiAgICAgICAgIGF1
dG8gaW50ZWdlclZhbHVlID0gdG9KUzxJRExMb25nPihJRExMb25nOjpleHRyYWN0VmFsdWVGcm9t
TnVsbGFibGUoZGljdGlvbmFyeS5pbnRlZ2VyKSk7Ci0gICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0
KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiaW50ZWdlciIpLCBpbnRlZ2Vy
VmFsdWUpOworICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCAiaW50ZWdlciIpLCBpbnRlZ2VyVmFsdWUpOwogICAgIH0KICAgICBhdXRv
IGludGVnZXJXaXRoRGVmYXVsdFZhbHVlID0gdG9KUzxJRExMb25nPihkaWN0aW9uYXJ5LmludGVn
ZXJXaXRoRGVmYXVsdCk7Ci0gICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmll
cjo6ZnJvbVN0cmluZygmdm0sICJpbnRlZ2VyV2l0aERlZmF1bHQiKSwgaW50ZWdlcldpdGhEZWZh
dWx0VmFsdWUpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZy
b21TdHJpbmcodm0sICJpbnRlZ2VyV2l0aERlZmF1bHQiKSwgaW50ZWdlcldpdGhEZWZhdWx0VmFs
dWUpOwogICAgIGlmICghSURMTG9uZ0xvbmc6OmlzTnVsbFZhbHVlKGRpY3Rpb25hcnkubGFyZ2VJ
bnRlZ2VyKSkgewogICAgICAgICBhdXRvIGxhcmdlSW50ZWdlclZhbHVlID0gdG9KUzxJRExMb25n
TG9uZz4oSURMTG9uZ0xvbmc6OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZShkaWN0aW9uYXJ5Lmxh
cmdlSW50ZWdlcikpOwotICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKCZ2bSwgImxhcmdlSW50ZWdlciIpLCBsYXJnZUludGVnZXJWYWx1ZSk7
CisgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJp
bmcodm0sICJsYXJnZUludGVnZXIiKSwgbGFyZ2VJbnRlZ2VyVmFsdWUpOwogICAgIH0KICAgICBh
dXRvIGxhcmdlSW50ZWdlcldpdGhEZWZhdWx0VmFsdWUgPSB0b0pTPElETExvbmdMb25nPihkaWN0
aW9uYXJ5LmxhcmdlSW50ZWdlcldpdGhEZWZhdWx0KTsKLSAgICByZXN1bHQtPnB1dERpcmVjdCh2
bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImxhcmdlSW50ZWdlcldpdGhEZWZh
dWx0IiksIGxhcmdlSW50ZWdlcldpdGhEZWZhdWx0VmFsdWUpOworICAgIHJlc3VsdC0+cHV0RGly
ZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJsYXJnZUludGVnZXJXaXRo
RGVmYXVsdCIpLCBsYXJnZUludGVnZXJXaXRoRGVmYXVsdFZhbHVlKTsKICAgICBhdXRvIG51bGxh
YmxlRW51bVZhbHVlID0gdG9KUzxJRExOdWxsYWJsZTxJRExFbnVtZXJhdGlvbjxUZXN0T2JqOjpF
bnVtVHlwZT4+PihzdGF0ZSwgZGljdGlvbmFyeS5udWxsYWJsZUVudW0pOwotICAgIHJlc3VsdC0+
cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAibnVsbGFibGVF
bnVtIiksIG51bGxhYmxlRW51bVZhbHVlKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlND
OjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAibnVsbGFibGVFbnVtIiksIG51bGxhYmxlRW51
bVZhbHVlKTsKICAgICBhdXRvIG51bGxhYmxlSW50ZWdlcldpdGhEZWZhdWx0VmFsdWUgPSB0b0pT
PElETE51bGxhYmxlPElETExvbmc+PihkaWN0aW9uYXJ5Lm51bGxhYmxlSW50ZWdlcldpdGhEZWZh
dWx0KTsKLSAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKCZ2bSwgIm51bGxhYmxlSW50ZWdlcldpdGhEZWZhdWx0IiksIG51bGxhYmxlSW50ZWdlcldp
dGhEZWZhdWx0VmFsdWUpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZp
ZXI6OmZyb21TdHJpbmcodm0sICJudWxsYWJsZUludGVnZXJXaXRoRGVmYXVsdCIpLCBudWxsYWJs
ZUludGVnZXJXaXRoRGVmYXVsdFZhbHVlKTsKICAgICBhdXRvIG51bGxhYmxlTm9kZVZhbHVlID0g
dG9KUzxJRExOdWxsYWJsZTxJRExJbnRlcmZhY2U8Tm9kZT4+PihzdGF0ZSwgZ2xvYmFsT2JqZWN0
LCBkaWN0aW9uYXJ5Lm51bGxhYmxlTm9kZSk7Ci0gICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIEpT
Qzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJudWxsYWJsZU5vZGUiKSwgbnVsbGFibGVO
b2RlVmFsdWUpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZy
b21TdHJpbmcodm0sICJudWxsYWJsZU5vZGUiKSwgbnVsbGFibGVOb2RlVmFsdWUpOwogICAgIGF1
dG8gbnVsbGFibGVTdHJpbmdXaXRoRGVmYXVsdFZhbHVlID0gdG9KUzxJRExOdWxsYWJsZTxJRExE
T01TdHJpbmc+PihzdGF0ZSwgZGljdGlvbmFyeS5udWxsYWJsZVN0cmluZ1dpdGhEZWZhdWx0KTsK
LSAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2
bSwgIm51bGxhYmxlU3RyaW5nV2l0aERlZmF1bHQiKSwgbnVsbGFibGVTdHJpbmdXaXRoRGVmYXVs
dFZhbHVlKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKHZtLCAibnVsbGFibGVTdHJpbmdXaXRoRGVmYXVsdCIpLCBudWxsYWJsZVN0cmluZ1dp
dGhEZWZhdWx0VmFsdWUpOwogICAgIGF1dG8gbnVsbGFibGVVbmlvbk1lbWJlclZhbHVlID0gdG9K
UzxJRExOdWxsYWJsZTxJRExVbmlvbjxJRExMb25nLCBJRExJbnRlcmZhY2U8Tm9kZT4+Pj4oc3Rh
dGUsIGdsb2JhbE9iamVjdCwgZGljdGlvbmFyeS5udWxsYWJsZVVuaW9uTWVtYmVyKTsKLSAgICBy
ZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgIm51
bGxhYmxlVW5pb25NZW1iZXIiKSwgbnVsbGFibGVVbmlvbk1lbWJlclZhbHVlKTsKKyAgICByZXN1
bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAibnVsbGFi
bGVVbmlvbk1lbWJlciIpLCBudWxsYWJsZVVuaW9uTWVtYmVyVmFsdWUpOwogICAgIGF1dG8gcmVx
dWlyZWRCdWZmZXJTb3VyY2VWYWx1ZVZhbHVlID0gdG9KUzxJRExVbmlvbjxJRExBcnJheUJ1ZmZl
clZpZXcsIElETEFycmF5QnVmZmVyPj4oc3RhdGUsIGdsb2JhbE9iamVjdCwgZGljdGlvbmFyeS5y
ZXF1aXJlZEJ1ZmZlclNvdXJjZVZhbHVlKTsKLSAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlND
OjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgInJlcXVpcmVkQnVmZmVyU291cmNlVmFsdWUi
KSwgcmVxdWlyZWRCdWZmZXJTb3VyY2VWYWx1ZVZhbHVlKTsKKyAgICByZXN1bHQtPnB1dERpcmVj
dCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAicmVxdWlyZWRCdWZmZXJTb3Vy
Y2VWYWx1ZSIpLCByZXF1aXJlZEJ1ZmZlclNvdXJjZVZhbHVlVmFsdWUpOwogICAgIGlmICghSURM
RG91YmxlOjppc051bGxWYWx1ZShkaWN0aW9uYXJ5LnJlc3RyaWN0ZWREb3VibGUpKSB7CiAgICAg
ICAgIGF1dG8gcmVzdHJpY3RlZERvdWJsZVZhbHVlID0gdG9KUzxJRExEb3VibGU+KElETERvdWJs
ZTo6ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKGRpY3Rpb25hcnkucmVzdHJpY3RlZERvdWJsZSkp
OwotICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKCZ2bSwgInJlc3RyaWN0ZWREb3VibGUiKSwgcmVzdHJpY3RlZERvdWJsZVZhbHVlKTsKKyAg
ICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2
bSwgInJlc3RyaWN0ZWREb3VibGUiKSwgcmVzdHJpY3RlZERvdWJsZVZhbHVlKTsKICAgICB9CiAg
ICAgYXV0byByZXN0cmljdGVkRG91YmxlV2l0aERlZmF1bHRWYWx1ZSA9IHRvSlM8SURMRG91Ymxl
PihkaWN0aW9uYXJ5LnJlc3RyaWN0ZWREb3VibGVXaXRoRGVmYXVsdCk7Ci0gICAgcmVzdWx0LT5w
dXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJyZXN0cmljdGVk
RG91YmxlV2l0aERlZmF1bHQiKSwgcmVzdHJpY3RlZERvdWJsZVdpdGhEZWZhdWx0VmFsdWUpOwor
ICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0s
ICJyZXN0cmljdGVkRG91YmxlV2l0aERlZmF1bHQiKSwgcmVzdHJpY3RlZERvdWJsZVdpdGhEZWZh
dWx0VmFsdWUpOwogICAgIGlmICghSURMRmxvYXQ6OmlzTnVsbFZhbHVlKGRpY3Rpb25hcnkucmVz
dHJpY3RlZEZsb2F0KSkgewogICAgICAgICBhdXRvIHJlc3RyaWN0ZWRGbG9hdFZhbHVlID0gdG9K
UzxJRExGbG9hdD4oSURMRmxvYXQ6OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZShkaWN0aW9uYXJ5
LnJlc3RyaWN0ZWRGbG9hdCkpOwotICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgInJlc3RyaWN0ZWRGbG9hdCIpLCByZXN0cmljdGVk
RmxvYXRWYWx1ZSk7CisgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZp
ZXI6OmZyb21TdHJpbmcodm0sICJyZXN0cmljdGVkRmxvYXQiKSwgcmVzdHJpY3RlZEZsb2F0VmFs
dWUpOwogICAgIH0KICAgICBhdXRvIHJlc3RyaWN0ZWRGbG9hdFdpdGhEZWZhdWx0VmFsdWUgPSB0
b0pTPElETEZsb2F0PihkaWN0aW9uYXJ5LnJlc3RyaWN0ZWRGbG9hdFdpdGhEZWZhdWx0KTsKLSAg
ICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwg
InJlc3RyaWN0ZWRGbG9hdFdpdGhEZWZhdWx0IiksIHJlc3RyaWN0ZWRGbG9hdFdpdGhEZWZhdWx0
VmFsdWUpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21T
dHJpbmcodm0sICJyZXN0cmljdGVkRmxvYXRXaXRoRGVmYXVsdCIpLCByZXN0cmljdGVkRmxvYXRX
aXRoRGVmYXVsdFZhbHVlKTsKICAgICBpZiAoIUlETFNlcXVlbmNlPElETERPTVN0cmluZz46Omlz
TnVsbFZhbHVlKGRpY3Rpb25hcnkuc2VxdWVuY2VPZlN0cmluZ3MpKSB7CiAgICAgICAgIGF1dG8g
c2VxdWVuY2VPZlN0cmluZ3NWYWx1ZSA9IHRvSlM8SURMU2VxdWVuY2U8SURMRE9NU3RyaW5nPj4o
c3RhdGUsIGdsb2JhbE9iamVjdCwgSURMU2VxdWVuY2U8SURMRE9NU3RyaW5nPjo6ZXh0cmFjdFZh
bHVlRnJvbU51bGxhYmxlKGRpY3Rpb25hcnkuc2VxdWVuY2VPZlN0cmluZ3MpKTsKLSAgICAgICAg
cmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJz
ZXF1ZW5jZU9mU3RyaW5ncyIpLCBzZXF1ZW5jZU9mU3RyaW5nc1ZhbHVlKTsKKyAgICAgICAgcmVz
dWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInNlcXVl
bmNlT2ZTdHJpbmdzIiksIHNlcXVlbmNlT2ZTdHJpbmdzVmFsdWUpOwogICAgIH0KICAgICBpZiAo
IUlETENsYW1wQWRhcHRvcjxJRExCeXRlPjo6aXNOdWxsVmFsdWUoZGljdGlvbmFyeS5zbWFsbElu
dGVnZXJDbGFtcGVkKSkgewogICAgICAgICBhdXRvIHNtYWxsSW50ZWdlckNsYW1wZWRWYWx1ZSA9
IHRvSlM8SURMQ2xhbXBBZGFwdG9yPElETEJ5dGU+PihJRExDbGFtcEFkYXB0b3I8SURMQnl0ZT46
OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZShkaWN0aW9uYXJ5LnNtYWxsSW50ZWdlckNsYW1wZWQp
KTsKLSAgICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0
cmluZygmdm0sICJzbWFsbEludGVnZXJDbGFtcGVkIiksIHNtYWxsSW50ZWdlckNsYW1wZWRWYWx1
ZSk7CisgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21T
dHJpbmcodm0sICJzbWFsbEludGVnZXJDbGFtcGVkIiksIHNtYWxsSW50ZWdlckNsYW1wZWRWYWx1
ZSk7CiAgICAgfQogICAgIGlmICghSURMQnl0ZTo6aXNOdWxsVmFsdWUoZGljdGlvbmFyeS5zbWFs
bEludGVnZXJXaXRoRGVmYXVsdCkpIHsKICAgICAgICAgYXV0byBzbWFsbEludGVnZXJXaXRoRGVm
YXVsdFZhbHVlID0gdG9KUzxJRExCeXRlPihJRExCeXRlOjpleHRyYWN0VmFsdWVGcm9tTnVsbGFi
bGUoZGljdGlvbmFyeS5zbWFsbEludGVnZXJXaXRoRGVmYXVsdCkpOwotICAgICAgICByZXN1bHQt
PnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgInNtYWxsSW50
ZWdlcldpdGhEZWZhdWx0IiksIHNtYWxsSW50ZWdlcldpdGhEZWZhdWx0VmFsdWUpOworICAgICAg
ICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAi
c21hbGxJbnRlZ2VyV2l0aERlZmF1bHQiKSwgc21hbGxJbnRlZ2VyV2l0aERlZmF1bHRWYWx1ZSk7
CiAgICAgfQogICAgIGlmICghSURMRW5mb3JjZVJhbmdlQWRhcHRvcjxJRExPY3RldD46OmlzTnVs
bFZhbHVlKGRpY3Rpb25hcnkuc21hbGxVbnNpZ25lZEludGVnZXJFbmZvcmNlZFJhbmdlKSkgewog
ICAgICAgICBhdXRvIHNtYWxsVW5zaWduZWRJbnRlZ2VyRW5mb3JjZWRSYW5nZVZhbHVlID0gdG9K
UzxJRExFbmZvcmNlUmFuZ2VBZGFwdG9yPElETE9jdGV0Pj4oSURMRW5mb3JjZVJhbmdlQWRhcHRv
cjxJRExPY3RldD46OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZShkaWN0aW9uYXJ5LnNtYWxsVW5z
aWduZWRJbnRlZ2VyRW5mb3JjZWRSYW5nZSkpOwotICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2
bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgInNtYWxsVW5zaWduZWRJbnRlZ2Vy
RW5mb3JjZWRSYW5nZSIpLCBzbWFsbFVuc2lnbmVkSW50ZWdlckVuZm9yY2VkUmFuZ2VWYWx1ZSk7
CisgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJp
bmcodm0sICJzbWFsbFVuc2lnbmVkSW50ZWdlckVuZm9yY2VkUmFuZ2UiKSwgc21hbGxVbnNpZ25l
ZEludGVnZXJFbmZvcmNlZFJhbmdlVmFsdWUpOwogICAgIH0KICAgICBhdXRvIHNtYWxsVW5zaWdu
ZWRJbnRlZ2VyV2l0aERlZmF1bHRWYWx1ZSA9IHRvSlM8SURMT2N0ZXQ+KGRpY3Rpb25hcnkuc21h
bGxVbnNpZ25lZEludGVnZXJXaXRoRGVmYXVsdCk7Ci0gICAgcmVzdWx0LT5wdXREaXJlY3Qodm0s
IEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJzbWFsbFVuc2lnbmVkSW50ZWdlcldp
dGhEZWZhdWx0IiksIHNtYWxsVW5zaWduZWRJbnRlZ2VyV2l0aERlZmF1bHRWYWx1ZSk7CisgICAg
cmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInNt
YWxsVW5zaWduZWRJbnRlZ2VyV2l0aERlZmF1bHQiKSwgc21hbGxVbnNpZ25lZEludGVnZXJXaXRo
RGVmYXVsdFZhbHVlKTsKICAgICBpZiAoIUlETFRyZWF0TnVsbEFzRW1wdHlBZGFwdG9yPElETERP
TVN0cmluZz46OmlzTnVsbFZhbHVlKGRpY3Rpb25hcnkuc3RyaW5nVHJlYXROdWxsQXNFbXB0eVN0
cmluZykpIHsKICAgICAgICAgYXV0byBzdHJpbmdUcmVhdE51bGxBc0VtcHR5U3RyaW5nVmFsdWUg
PSB0b0pTPElETFRyZWF0TnVsbEFzRW1wdHlBZGFwdG9yPElETERPTVN0cmluZz4+KHN0YXRlLCBJ
RExUcmVhdE51bGxBc0VtcHR5QWRhcHRvcjxJRExET01TdHJpbmc+OjpleHRyYWN0VmFsdWVGcm9t
TnVsbGFibGUoZGljdGlvbmFyeS5zdHJpbmdUcmVhdE51bGxBc0VtcHR5U3RyaW5nKSk7Ci0gICAg
ICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZt
LCAic3RyaW5nVHJlYXROdWxsQXNFbXB0eVN0cmluZyIpLCBzdHJpbmdUcmVhdE51bGxBc0VtcHR5
U3RyaW5nVmFsdWUpOworICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKHZtLCAic3RyaW5nVHJlYXROdWxsQXNFbXB0eVN0cmluZyIpLCBzdHJp
bmdUcmVhdE51bGxBc0VtcHR5U3RyaW5nVmFsdWUpOwogICAgIH0KICAgICBhdXRvIHN0cmluZ1dp
dGhEZWZhdWx0VmFsdWUgPSB0b0pTPElETERPTVN0cmluZz4oc3RhdGUsIGRpY3Rpb25hcnkuc3Ry
aW5nV2l0aERlZmF1bHQpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZp
ZXI6OmZyb21TdHJpbmcoJnZtLCAic3RyaW5nV2l0aERlZmF1bHQiKSwgc3RyaW5nV2l0aERlZmF1
bHRWYWx1ZSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJv
bVN0cmluZyh2bSwgInN0cmluZ1dpdGhEZWZhdWx0IiksIHN0cmluZ1dpdGhEZWZhdWx0VmFsdWUp
OwogICAgIGlmICghSURMRE9NU3RyaW5nOjppc051bGxWYWx1ZShkaWN0aW9uYXJ5LnN0cmluZ1dp
dGhvdXREZWZhdWx0KSkgewogICAgICAgICBhdXRvIHN0cmluZ1dpdGhvdXREZWZhdWx0VmFsdWUg
PSB0b0pTPElETERPTVN0cmluZz4oc3RhdGUsIElETERPTVN0cmluZzo6ZXh0cmFjdFZhbHVlRnJv
bU51bGxhYmxlKGRpY3Rpb25hcnkuc3RyaW5nV2l0aG91dERlZmF1bHQpKTsKLSAgICAgICAgcmVz
dWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJzdHJp
bmdXaXRob3V0RGVmYXVsdCIpLCBzdHJpbmdXaXRob3V0RGVmYXVsdFZhbHVlKTsKKyAgICAgICAg
cmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInN0
cmluZ1dpdGhvdXREZWZhdWx0IiksIHN0cmluZ1dpdGhvdXREZWZhdWx0VmFsdWUpOwogICAgIH0K
ICAgICBpZiAoIUlETFVuaW9uPElETExvbmcsIElETEludGVyZmFjZTxOb2RlPj46OmlzTnVsbFZh
bHVlKGRpY3Rpb25hcnkudW5pb25NZW1iZXIpKSB7CiAgICAgICAgIGF1dG8gdW5pb25NZW1iZXJW
YWx1ZSA9IHRvSlM8SURMVW5pb248SURMTG9uZywgSURMSW50ZXJmYWNlPE5vZGU+Pj4oc3RhdGUs
IGdsb2JhbE9iamVjdCwgSURMVW5pb248SURMTG9uZywgSURMSW50ZXJmYWNlPE5vZGU+Pjo6ZXh0
cmFjdFZhbHVlRnJvbU51bGxhYmxlKGRpY3Rpb25hcnkudW5pb25NZW1iZXIpKTsKLSAgICAgICAg
cmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJ1
bmlvbk1lbWJlciIpLCB1bmlvbk1lbWJlclZhbHVlKTsKKyAgICAgICAgcmVzdWx0LT5wdXREaXJl
Y3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInVuaW9uTWVtYmVyIiksIHVu
aW9uTWVtYmVyVmFsdWUpOwogICAgIH0KICAgICBpZiAoIUlETFVucmVzdHJpY3RlZERvdWJsZTo6
aXNOdWxsVmFsdWUoZGljdGlvbmFyeS51bnJlc3RyaWN0ZWREb3VibGUpKSB7CiAgICAgICAgIGF1
dG8gdW5yZXN0cmljdGVkRG91YmxlVmFsdWUgPSB0b0pTPElETFVucmVzdHJpY3RlZERvdWJsZT4o
SURMVW5yZXN0cmljdGVkRG91YmxlOjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUoZGljdGlvbmFy
eS51bnJlc3RyaWN0ZWREb3VibGUpKTsKLSAgICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIEpT
Qzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJ1bnJlc3RyaWN0ZWREb3VibGUiKSwgdW5y
ZXN0cmljdGVkRG91YmxlVmFsdWUpOworICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlND
OjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAidW5yZXN0cmljdGVkRG91YmxlIiksIHVucmVz
dHJpY3RlZERvdWJsZVZhbHVlKTsKICAgICB9CiAgICAgYXV0byB1bnJlc3RyaWN0ZWREb3VibGVX
aXRoRGVmYXVsdFZhbHVlID0gdG9KUzxJRExVbnJlc3RyaWN0ZWREb3VibGU+KGRpY3Rpb25hcnku
dW5yZXN0cmljdGVkRG91YmxlV2l0aERlZmF1bHQpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZt
LCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAidW5yZXN0cmljdGVkRG91YmxlV2l0
aERlZmF1bHQiKSwgdW5yZXN0cmljdGVkRG91YmxlV2l0aERlZmF1bHRWYWx1ZSk7CisgICAgcmVz
dWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInVucmVz
dHJpY3RlZERvdWJsZVdpdGhEZWZhdWx0IiksIHVucmVzdHJpY3RlZERvdWJsZVdpdGhEZWZhdWx0
VmFsdWUpOwogICAgIGlmICghSURMVW5yZXN0cmljdGVkRmxvYXQ6OmlzTnVsbFZhbHVlKGRpY3Rp
b25hcnkudW5yZXN0cmljdGVkRmxvYXQpKSB7CiAgICAgICAgIGF1dG8gdW5yZXN0cmljdGVkRmxv
YXRWYWx1ZSA9IHRvSlM8SURMVW5yZXN0cmljdGVkRmxvYXQ+KElETFVucmVzdHJpY3RlZEZsb2F0
OjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUoZGljdGlvbmFyeS51bnJlc3RyaWN0ZWRGbG9hdCkp
OwotICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKCZ2bSwgInVucmVzdHJpY3RlZEZsb2F0IiksIHVucmVzdHJpY3RlZEZsb2F0VmFsdWUpOwor
ICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KHZtLCAidW5yZXN0cmljdGVkRmxvYXQiKSwgdW5yZXN0cmljdGVkRmxvYXRWYWx1ZSk7CiAgICAg
fQogICAgIGF1dG8gdW5yZXN0cmljdGVkRmxvYXRXaXRoRGVmYXVsdFZhbHVlID0gdG9KUzxJRExV
bnJlc3RyaWN0ZWRGbG9hdD4oZGljdGlvbmFyeS51bnJlc3RyaWN0ZWRGbG9hdFdpdGhEZWZhdWx0
KTsKLSAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KCZ2bSwgInVucmVzdHJpY3RlZEZsb2F0V2l0aERlZmF1bHQiKSwgdW5yZXN0cmljdGVkRmxvYXRX
aXRoRGVmYXVsdFZhbHVlKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKHZtLCAidW5yZXN0cmljdGVkRmxvYXRXaXRoRGVmYXVsdCIpLCB1bnJl
c3RyaWN0ZWRGbG9hdFdpdGhEZWZhdWx0VmFsdWUpOwogICAgIGlmICghSURMVW5zaWduZWRMb25n
Ojppc051bGxWYWx1ZShkaWN0aW9uYXJ5LnVuc2lnbmVkSW50ZWdlcikpIHsKICAgICAgICAgYXV0
byB1bnNpZ25lZEludGVnZXJWYWx1ZSA9IHRvSlM8SURMVW5zaWduZWRMb25nPihJRExVbnNpZ25l
ZExvbmc6OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZShkaWN0aW9uYXJ5LnVuc2lnbmVkSW50ZWdl
cikpOwotICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKCZ2bSwgInVuc2lnbmVkSW50ZWdlciIpLCB1bnNpZ25lZEludGVnZXJWYWx1ZSk7Cisg
ICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmco
dm0sICJ1bnNpZ25lZEludGVnZXIiKSwgdW5zaWduZWRJbnRlZ2VyVmFsdWUpOwogICAgIH0KICAg
ICBhdXRvIHVuc2lnbmVkSW50ZWdlcldpdGhEZWZhdWx0VmFsdWUgPSB0b0pTPElETFVuc2lnbmVk
TG9uZz4oZGljdGlvbmFyeS51bnNpZ25lZEludGVnZXJXaXRoRGVmYXVsdCk7Ci0gICAgcmVzdWx0
LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJ1bnNpZ25l
ZEludGVnZXJXaXRoRGVmYXVsdCIpLCB1bnNpZ25lZEludGVnZXJXaXRoRGVmYXVsdFZhbHVlKTsK
KyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZt
LCAidW5zaWduZWRJbnRlZ2VyV2l0aERlZmF1bHQiKSwgdW5zaWduZWRJbnRlZ2VyV2l0aERlZmF1
bHRWYWx1ZSk7CiAgICAgaWYgKCFJRExVbnNpZ25lZExvbmdMb25nOjppc051bGxWYWx1ZShkaWN0
aW9uYXJ5LnVuc2lnbmVkTGFyZ2VJbnRlZ2VyKSkgewogICAgICAgICBhdXRvIHVuc2lnbmVkTGFy
Z2VJbnRlZ2VyVmFsdWUgPSB0b0pTPElETFVuc2lnbmVkTG9uZ0xvbmc+KElETFVuc2lnbmVkTG9u
Z0xvbmc6OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZShkaWN0aW9uYXJ5LnVuc2lnbmVkTGFyZ2VJ
bnRlZ2VyKSk7Ci0gICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6
OmZyb21TdHJpbmcoJnZtLCAidW5zaWduZWRMYXJnZUludGVnZXIiKSwgdW5zaWduZWRMYXJnZUlu
dGVnZXJWYWx1ZSk7CisgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZp
ZXI6OmZyb21TdHJpbmcodm0sICJ1bnNpZ25lZExhcmdlSW50ZWdlciIpLCB1bnNpZ25lZExhcmdl
SW50ZWdlclZhbHVlKTsKICAgICB9CiAgICAgYXV0byB1bnNpZ25lZExhcmdlSW50ZWdlcldpdGhE
ZWZhdWx0VmFsdWUgPSB0b0pTPElETFVuc2lnbmVkTG9uZ0xvbmc+KGRpY3Rpb25hcnkudW5zaWdu
ZWRMYXJnZUludGVnZXJXaXRoRGVmYXVsdCk7Ci0gICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIEpT
Qzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJ1bnNpZ25lZExhcmdlSW50ZWdlcldpdGhE
ZWZhdWx0IiksIHVuc2lnbmVkTGFyZ2VJbnRlZ2VyV2l0aERlZmF1bHRWYWx1ZSk7CisgICAgcmVz
dWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInVuc2ln
bmVkTGFyZ2VJbnRlZ2VyV2l0aERlZmF1bHQiKSwgdW5zaWduZWRMYXJnZUludGVnZXJXaXRoRGVm
YXVsdFZhbHVlKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0xMTExLDcgKzExMTEsNyBA
QCB0ZW1wbGF0ZTw+IFRlc3RPYmo6OkRpY3Rpb25hcnlUaGF0U2hvdWxkCiAgICAgaWYgKGlzTnVs
bE9yVW5kZWZpbmVkKQogICAgICAgICBib29sZWFuV2l0aG91dERlZmF1bHRWYWx1ZSA9IGpzVW5k
ZWZpbmVkKCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIGJvb2xlYW5XaXRob3V0RGVmYXVsdFZhbHVl
ID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImJv
b2xlYW5XaXRob3V0RGVmYXVsdCIpKTsKKyAgICAgICAgYm9vbGVhbldpdGhvdXREZWZhdWx0VmFs
dWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJib29s
ZWFuV2l0aG91dERlZmF1bHQiKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dT
Y29wZSwgeyB9KTsKICAgICB9CiAgICAgaWYgKCFib29sZWFuV2l0aG91dERlZmF1bHRWYWx1ZS5p
c1VuZGVmaW5lZCgpKSB7CkBAIC0xMTIyLDcgKzExMjIsNyBAQCB0ZW1wbGF0ZTw+IFRlc3RPYmo6
OkRpY3Rpb25hcnlUaGF0U2hvdWxkCiAgICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKQogICAgICAg
ICBub25OdWxsYWJsZU5vZGVWYWx1ZSA9IGpzVW5kZWZpbmVkKCk7CiAgICAgZWxzZSB7Ci0gICAg
ICAgIG5vbk51bGxhYmxlTm9kZVZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKCZzdGF0ZSwgIm5vbk51bGxhYmxlTm9kZSIpKTsKKyAgICAgICAgbm9uTnVs
bGFibGVOb2RlVmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJp
bmcodm0sICJub25OdWxsYWJsZU5vZGUiKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgeyB9KTsKICAgICB9CiAgICAgaWYgKCFub25OdWxsYWJsZU5vZGVWYWx1ZS5p
c1VuZGVmaW5lZCgpKSB7CkBAIC0xMTM2LDcgKzExMzYsNyBAQCB0ZW1wbGF0ZTw+IFRlc3RPYmo6
OkRpY3Rpb25hcnlUaGF0U2hvdWxkCiAgICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKQogICAgICAg
ICByZXF1aXJlZERpY3Rpb25hcnlNZW1iZXJWYWx1ZSA9IGpzVW5kZWZpbmVkKCk7CiAgICAgZWxz
ZSB7Ci0gICAgICAgIHJlcXVpcmVkRGljdGlvbmFyeU1lbWJlclZhbHVlID0gb2JqZWN0LT5nZXQo
JnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgInJlcXVpcmVkRGljdGlvbmFy
eU1lbWJlciIpKTsKKyAgICAgICAgcmVxdWlyZWREaWN0aW9uYXJ5TWVtYmVyVmFsdWUgPSBvYmpl
Y3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJyZXF1aXJlZERpY3Rp
b25hcnlNZW1iZXIiKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
eyB9KTsKICAgICB9CiAgICAgaWYgKCFyZXF1aXJlZERpY3Rpb25hcnlNZW1iZXJWYWx1ZS5pc1Vu
ZGVmaW5lZCgpKSB7CkBAIC0xMTUwLDcgKzExNTAsNyBAQCB0ZW1wbGF0ZTw+IFRlc3RPYmo6OkRp
Y3Rpb25hcnlUaGF0U2hvdWxkCiAgICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKQogICAgICAgICBy
ZXF1aXJlZEVudW1lcmF0aW9uVmFsdWVWYWx1ZSA9IGpzVW5kZWZpbmVkKCk7CiAgICAgZWxzZSB7
Ci0gICAgICAgIHJlcXVpcmVkRW51bWVyYXRpb25WYWx1ZVZhbHVlID0gb2JqZWN0LT5nZXQoJnN0
YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgInJlcXVpcmVkRW51bWVyYXRpb25W
YWx1ZSIpKTsKKyAgICAgICAgcmVxdWlyZWRFbnVtZXJhdGlvblZhbHVlVmFsdWUgPSBvYmplY3Qt
PmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJyZXF1aXJlZEVudW1lcmF0
aW9uVmFsdWUiKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9
KTsKICAgICB9CiAgICAgaWYgKCFyZXF1aXJlZEVudW1lcmF0aW9uVmFsdWVWYWx1ZS5pc1VuZGVm
aW5lZCgpKSB7CkBAIC0xMTc4LDcgKzExNzgsNyBAQCB0ZW1wbGF0ZTw+IFRlc3RPYmo6OkRpY3Rp
b25hcnlUaGF0U2hvdWxkCiAgICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKQogICAgICAgICBib29s
ZWFuV2l0aG91dERlZmF1bHRWYWx1ZSA9IGpzVW5kZWZpbmVkKCk7CiAgICAgZWxzZSB7Ci0gICAg
ICAgIGJvb2xlYW5XaXRob3V0RGVmYXVsdFZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImJvb2xlYW5XaXRob3V0RGVmYXVsdCIpKTsKKyAg
ICAgICAgYm9vbGVhbldpdGhvdXREZWZhdWx0VmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJib29sZWFuV2l0aG91dERlZmF1bHQiKSk7CiAgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICB9CiAgICAgaWYg
KCFib29sZWFuV2l0aG91dERlZmF1bHRWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7CkBAIC0xMTg5LDcg
KzExODksNyBAQCB0ZW1wbGF0ZTw+IFRlc3RPYmo6OkRpY3Rpb25hcnlUaGF0U2hvdWxkCiAgICAg
aWYgKGlzTnVsbE9yVW5kZWZpbmVkKQogICAgICAgICBlbnVtZXJhdGlvblZhbHVlVmFsdWUgPSBq
c1VuZGVmaW5lZCgpOwogICAgIGVsc2UgewotICAgICAgICBlbnVtZXJhdGlvblZhbHVlVmFsdWUg
PSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAiZW51
bWVyYXRpb25WYWx1ZSIpKTsKKyAgICAgICAgZW51bWVyYXRpb25WYWx1ZVZhbHVlID0gb2JqZWN0
LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiZW51bWVyYXRpb25WYWx1
ZSIpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAg
IH0KICAgICBpZiAoIWVudW1lcmF0aW9uVmFsdWVWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7CkBAIC0x
MjE0LDcgKzEyMTQsNyBAQCB0ZW1wbGF0ZTw+IEFsdGVybmF0ZURpY3Rpb25hcnlOYW1lIGNvbnZl
CiAgICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKQogICAgICAgICBib29sZWFuV2l0aG91dERlZmF1
bHRWYWx1ZSA9IGpzVW5kZWZpbmVkKCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIGJvb2xlYW5XaXRo
b3V0RGVmYXVsdFZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKCZzdGF0ZSwgImJvb2xlYW5XaXRob3V0RGVmYXVsdCIpKTsKKyAgICAgICAgYm9vbGVhbldp
dGhvdXREZWZhdWx0VmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21T
dHJpbmcodm0sICJib29sZWFuV2l0aG91dERlZmF1bHQiKSk7CiAgICAgICAgIFJFVFVSTl9JRl9F
WENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICB9CiAgICAgaWYgKCFib29sZWFuV2l0aG91
dERlZmF1bHRWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7CkBAIC0xMjI1LDcgKzEyMjUsNyBAQCB0ZW1w
bGF0ZTw+IEFsdGVybmF0ZURpY3Rpb25hcnlOYW1lIGNvbnZlCiAgICAgaWYgKGlzTnVsbE9yVW5k
ZWZpbmVkKQogICAgICAgICBlbnVtZXJhdGlvblZhbHVlVmFsdWUgPSBqc1VuZGVmaW5lZCgpOwog
ICAgIGVsc2UgewotICAgICAgICBlbnVtZXJhdGlvblZhbHVlVmFsdWUgPSBvYmplY3QtPmdldCgm
c3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAiZW51bWVyYXRpb25WYWx1ZSIp
KTsKKyAgICAgICAgZW51bWVyYXRpb25WYWx1ZVZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiZW51bWVyYXRpb25WYWx1ZSIpKTsKICAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0KICAgICBpZiAoIWVu
dW1lcmF0aW9uVmFsdWVWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7CkBAIC0xMjUwLDcgKzEyNTAsNyBA
QCB0ZW1wbGF0ZTw+IFRlc3RPYmo6OlBhcmVudERpY3Rpb25hcnkgY29uCiAgICAgaWYgKGlzTnVs
bE9yVW5kZWZpbmVkKQogICAgICAgICBwYXJlbnRNZW1iZXIxVmFsdWUgPSBqc1VuZGVmaW5lZCgp
OwogICAgIGVsc2UgewotICAgICAgICBwYXJlbnRNZW1iZXIxVmFsdWUgPSBvYmplY3QtPmdldCgm
c3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAicGFyZW50TWVtYmVyMSIpKTsK
KyAgICAgICAgcGFyZW50TWVtYmVyMVZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKHZtLCAicGFyZW50TWVtYmVyMSIpKTsKICAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0KICAgICBpZiAoIXBhcmVudE1lbWJl
cjFWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7CkBAIC0xMjYxLDcgKzEyNjEsNyBAQCB0ZW1wbGF0ZTw+
IFRlc3RPYmo6OlBhcmVudERpY3Rpb25hcnkgY29uCiAgICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVk
KQogICAgICAgICBwYXJlbnRNZW1iZXIyVmFsdWUgPSBqc1VuZGVmaW5lZCgpOwogICAgIGVsc2Ug
ewotICAgICAgICBwYXJlbnRNZW1iZXIyVmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50
aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAicGFyZW50TWVtYmVyMiIpKTsKKyAgICAgICAgcGFy
ZW50TWVtYmVyMlZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKHZtLCAicGFyZW50TWVtYmVyMiIpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCB7IH0pOwogICAgIH0KICAgICBpZiAoIXBhcmVudE1lbWJlcjJWYWx1ZS5pc1Vu
ZGVmaW5lZCgpKSB7CkBAIC0xMjg2LDcgKzEyODYsNyBAQCB0ZW1wbGF0ZTw+IFRlc3RPYmo6OkNo
aWxkRGljdGlvbmFyeSBjb252CiAgICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKQogICAgICAgICBw
YXJlbnRNZW1iZXIxVmFsdWUgPSBqc1VuZGVmaW5lZCgpOwogICAgIGVsc2UgewotICAgICAgICBw
YXJlbnRNZW1iZXIxVmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21T
dHJpbmcoJnN0YXRlLCAicGFyZW50TWVtYmVyMSIpKTsKKyAgICAgICAgcGFyZW50TWVtYmVyMVZh
bHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAicGFy
ZW50TWVtYmVyMSIpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7
IH0pOwogICAgIH0KICAgICBpZiAoIXBhcmVudE1lbWJlcjFWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7
CkBAIC0xMjk3LDcgKzEyOTcsNyBAQCB0ZW1wbGF0ZTw+IFRlc3RPYmo6OkNoaWxkRGljdGlvbmFy
eSBjb252CiAgICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKQogICAgICAgICBwYXJlbnRNZW1iZXIy
VmFsdWUgPSBqc1VuZGVmaW5lZCgpOwogICAgIGVsc2UgewotICAgICAgICBwYXJlbnRNZW1iZXIy
VmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRl
LCAicGFyZW50TWVtYmVyMiIpKTsKKyAgICAgICAgcGFyZW50TWVtYmVyMlZhbHVlID0gb2JqZWN0
LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAicGFyZW50TWVtYmVyMiIp
KTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0K
ICAgICBpZiAoIXBhcmVudE1lbWJlcjJWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7CkBAIC0xMzA4LDcg
KzEzMDgsNyBAQCB0ZW1wbGF0ZTw+IFRlc3RPYmo6OkNoaWxkRGljdGlvbmFyeSBjb252CiAgICAg
aWYgKGlzTnVsbE9yVW5kZWZpbmVkKQogICAgICAgICBjaGlsZE1lbWJlcjFWYWx1ZSA9IGpzVW5k
ZWZpbmVkKCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIGNoaWxkTWVtYmVyMVZhbHVlID0gb2JqZWN0
LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImNoaWxkTWVtYmVy
MSIpKTsKKyAgICAgICAgY2hpbGRNZW1iZXIxVmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJjaGlsZE1lbWJlcjEiKSk7CiAgICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICB9CiAgICAgaWYgKCFjaGlsZE1l
bWJlcjFWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7CkBAIC0xMzE5LDcgKzEzMTksNyBAQCB0ZW1wbGF0
ZTw+IFRlc3RPYmo6OkNoaWxkRGljdGlvbmFyeSBjb252CiAgICAgaWYgKGlzTnVsbE9yVW5kZWZp
bmVkKQogICAgICAgICBjaGlsZE1lbWJlcjJWYWx1ZSA9IGpzVW5kZWZpbmVkKCk7CiAgICAgZWxz
ZSB7Ci0gICAgICAgIGNoaWxkTWVtYmVyMlZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImNoaWxkTWVtYmVyMiIpKTsKKyAgICAgICAgY2hp
bGRNZW1iZXIyVmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJp
bmcodm0sICJjaGlsZE1lbWJlcjIiKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgeyB9KTsKICAgICB9CiAgICAgaWYgKCFjaGlsZE1lbWJlcjJWYWx1ZS5pc1VuZGVm
aW5lZCgpKSB7CkBAIC0xMzQ2LDcgKzEzNDYsNyBAQCB0ZW1wbGF0ZTw+IFRlc3RPYmo6OkNvbmRp
dGlvbmFsRGljdGlvbmFyCiAgICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKQogICAgICAgICBzdHJp
bmdXaXRob3V0RGVmYXVsdFZhbHVlID0ganNVbmRlZmluZWQoKTsKICAgICBlbHNlIHsKLSAgICAg
ICAgc3RyaW5nV2l0aG91dERlZmF1bHRWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJzdHJpbmdXaXRob3V0RGVmYXVsdCIpKTsKKyAgICAg
ICAgc3RyaW5nV2l0aG91dERlZmF1bHRWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZyh2bSwgInN0cmluZ1dpdGhvdXREZWZhdWx0IikpOwogICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgfQogICAgIGlmICghc3Ry
aW5nV2l0aG91dERlZmF1bHRWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7CkBAIC0xMzc1LDcgKzEzNzUs
NyBAQCB0ZW1wbGF0ZTw+IFRlc3RPYmo6OkNvbmRpdGlvbmFsRGljdGlvbmFyCiAgICAgaWYgKGlz
TnVsbE9yVW5kZWZpbmVkKQogICAgICAgICBzdHJpbmdXaXRob3V0RGVmYXVsdFZhbHVlID0ganNV
bmRlZmluZWQoKTsKICAgICBlbHNlIHsKLSAgICAgICAgc3RyaW5nV2l0aG91dERlZmF1bHRWYWx1
ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJz
dHJpbmdXaXRob3V0RGVmYXVsdCIpKTsKKyAgICAgICAgc3RyaW5nV2l0aG91dERlZmF1bHRWYWx1
ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInN0cmlu
Z1dpdGhvdXREZWZhdWx0IikpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2Nv
cGUsIHsgfSk7CiAgICAgfQogICAgIGlmICghc3RyaW5nV2l0aG91dERlZmF1bHRWYWx1ZS5pc1Vu
ZGVmaW5lZCgpKSB7CkBAIC0xNDA0LDcgKzE0MDQsNyBAQCB0ZW1wbGF0ZTw+IFRlc3RPYmo6OkNv
bmRpdGlvbmFsRGljdGlvbmFyCiAgICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKQogICAgICAgICBz
dHJpbmdXaXRob3V0RGVmYXVsdFZhbHVlID0ganNVbmRlZmluZWQoKTsKICAgICBlbHNlIHsKLSAg
ICAgICAgc3RyaW5nV2l0aG91dERlZmF1bHRWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJzdHJpbmdXaXRob3V0RGVmYXVsdCIpKTsKKyAg
ICAgICAgc3RyaW5nV2l0aG91dERlZmF1bHRWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInN0cmluZ1dpdGhvdXREZWZhdWx0IikpOwogICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgfQogICAgIGlmICgh
c3RyaW5nV2l0aG91dERlZmF1bHRWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7CkBAIC0xOTY4LDE5ICsx
OTY4LDE5IEBAIHRlbXBsYXRlPD4gSlNWYWx1ZSBKU1Rlc3RPYmpDb25zdHJ1Y3RvcjoKIHRlbXBs
YXRlPD4gdm9pZCBKU1Rlc3RPYmpDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMoVk0m
IHZtLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQogewogICAgIHB1dERpcmVjdCh2
bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3RPYmo6OnByb3RvdHlwZSh2bSwg
Z2xvYmFsT2JqZWN0KSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IEpTQzo6
UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9u
dEVudW0pOwotICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250
cml2aWFsU3RyaW5nKCZ2bSwgU3RyaW5nKCJUZXN0T2JqZWN0Il9zKSksIEpTQzo6UHJvcGVydHlB
dHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwor
ICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3Ry
aW5nKHZtLCBTdHJpbmcoIlRlc3RPYmplY3QiX3MpKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6
UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CiAgICAgcHV0RGly
ZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDIpLCBKU0M6OlByb3Bl
cnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVt
KTsKICAgICByZWlmeVN0YXRpY1Byb3BlcnRpZXModm0sIEpTVGVzdE9iajo6aW5mbygpLCBKU1Rl
c3RPYmpDb25zdHJ1Y3RvclRhYmxlVmFsdWVzLCAqdGhpcyk7CiAjaWYgRU5BQkxFKFRFU1RfRkVB
VFVSRSkKICAgICBpZiAoIVJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCku
dGVzdEZlYXR1cmVFbmFibGVkKCkpIHsKLSAgICAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJl
bmFibGVkQXRSdW50aW1lQXR0cmlidXRlU3RhdGljIiksIHN0cmxlbigiZW5hYmxlZEF0UnVudGlt
ZUF0dHJpYnV0ZVN0YXRpYyIpKTsKKyAgICAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oImVuYWJs
ZWRBdFJ1bnRpbWVBdHRyaWJ1dGVTdGF0aWMiKSwgc3RybGVuKCJlbmFibGVkQXRSdW50aW1lQXR0
cmlidXRlU3RhdGljIikpOwogICAgICAgICBWTTo6RGVsZXRlUHJvcGVydHlNb2RlU2NvcGUgc2Nv
cGUodm0sIFZNOjpEZWxldGVQcm9wZXJ0eU1vZGU6Oklnbm9yZUNvbmZpZ3VyYWJsZSk7CiAgICAg
ICAgIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eSh0aGlzLCBnbG9iYWxPYmplY3QuZ2xvYmFsRXhl
YygpLCBwcm9wZXJ0eU5hbWUpOwogICAgIH0KICNlbmRpZgogI2lmIEVOQUJMRShURVNUX0ZFQVRV
UkUpCiAgICAgaWYgKCFSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLnRl
c3RGZWF0dXJlRW5hYmxlZCgpKSB7Ci0gICAgICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZygmdm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiZW5h
YmxlZEF0UnVudGltZU9wZXJhdGlvblN0YXRpYyIpLCBzdHJsZW4oImVuYWJsZWRBdFJ1bnRpbWVP
cGVyYXRpb25TdGF0aWMiKSk7CisgICAgICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmll
cjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJlbmFibGVk
QXRSdW50aW1lT3BlcmF0aW9uU3RhdGljIiksIHN0cmxlbigiZW5hYmxlZEF0UnVudGltZU9wZXJh
dGlvblN0YXRpYyIpKTsKICAgICAgICAgVk06OkRlbGV0ZVByb3BlcnR5TW9kZVNjb3BlIHNjb3Bl
KHZtLCBWTTo6RGVsZXRlUHJvcGVydHlNb2RlOjpJZ25vcmVDb25maWd1cmFibGUpOwogICAgICAg
ICBKU09iamVjdDo6ZGVsZXRlUHJvcGVydHkodGhpcywgZ2xvYmFsT2JqZWN0Lmdsb2JhbEV4ZWMo
KSwgcHJvcGVydHlOYW1lKTsKICAgICB9CkBAIC0yMzM0LDg0ICsyMzM0LDg0IEBAIHZvaWQgSlNU
ZXN0T2JqUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbigKICNpZiBFTkFCTEUoVEVTVF9GRUFUVVJF
KQogICAgIGlmICghUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS50ZXN0
RmVhdHVyZUVuYWJsZWQoKSkgewogICAgICAgICBoYXNEaXNhYmxlZFJ1bnRpbWVQcm9wZXJ0aWVz
ID0gdHJ1ZTsKLSAgICAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKCZ2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJlbmFibGVkQXRSdW50aW1l
T3BlcmF0aW9uIiksIHN0cmxlbigiZW5hYmxlZEF0UnVudGltZU9wZXJhdGlvbiIpKTsKKyAgICAg
ICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVy
cHJldF9jYXN0PGNvbnN0IExDaGFyKj4oImVuYWJsZWRBdFJ1bnRpbWVPcGVyYXRpb24iKSwgc3Ry
bGVuKCJlbmFibGVkQXRSdW50aW1lT3BlcmF0aW9uIikpOwogICAgICAgICBWTTo6RGVsZXRlUHJv
cGVydHlNb2RlU2NvcGUgc2NvcGUodm0sIFZNOjpEZWxldGVQcm9wZXJ0eU1vZGU6Oklnbm9yZUNv
bmZpZ3VyYWJsZSk7CiAgICAgICAgIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eSh0aGlzLCBnbG9i
YWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpLCBwcm9wZXJ0eU5hbWUpOwogICAgIH0KICNlbmRpZgog
ICAgIGlmICghKHdvcmxkRm9yRE9NT2JqZWN0KCp0aGlzKS5zb21lV29ybGQoKSAmJiBSdW50aW1l
RW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLnRlc3RGZWF0dXJlRW5hYmxlZCgpKSkg
ewogICAgICAgICBoYXNEaXNhYmxlZFJ1bnRpbWVQcm9wZXJ0aWVzID0gdHJ1ZTsKLSAgICAgICAg
YXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJlbmFibGVkSW5TcGVjaWZpY1dvcmxkV2hlblJ1bnRpbWVG
ZWF0dXJlRW5hYmxlZCIpLCBzdHJsZW4oImVuYWJsZWRJblNwZWNpZmljV29ybGRXaGVuUnVudGlt
ZUZlYXR1cmVFbmFibGVkIikpOworICAgICAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZp
ZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiZW5hYmxl
ZEluU3BlY2lmaWNXb3JsZFdoZW5SdW50aW1lRmVhdHVyZUVuYWJsZWQiKSwgc3RybGVuKCJlbmFi
bGVkSW5TcGVjaWZpY1dvcmxkV2hlblJ1bnRpbWVGZWF0dXJlRW5hYmxlZCIpKTsKICAgICAgICAg
Vk06OkRlbGV0ZVByb3BlcnR5TW9kZVNjb3BlIHNjb3BlKHZtLCBWTTo6RGVsZXRlUHJvcGVydHlN
b2RlOjpJZ25vcmVDb25maWd1cmFibGUpOwogICAgICAgICBKU09iamVjdDo6ZGVsZXRlUHJvcGVy
dHkodGhpcywgZ2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKSwgcHJvcGVydHlOYW1lKTsKICAg
ICB9CiAgICAgaWYgKCF3b3JsZEZvckRPTU9iamVjdCgqdGhpcykuc29tZVdvcmxkKCkpIHsKICAg
ICAgICAgaGFzRGlzYWJsZWRSdW50aW1lUHJvcGVydGllcyA9IHRydWU7Ci0gICAgICAgIGF1dG8g
cHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgTENoYXIqPigid29ybGRTcGVjaWZpY01ldGhvZCIpLCBzdHJsZW4oIndvcmxkU3Bl
Y2lmaWNNZXRob2QiKSk7CisgICAgICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6
ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJ3b3JsZFNwZWNp
ZmljTWV0aG9kIiksIHN0cmxlbigid29ybGRTcGVjaWZpY01ldGhvZCIpKTsKICAgICAgICAgVk06
OkRlbGV0ZVByb3BlcnR5TW9kZVNjb3BlIHNjb3BlKHZtLCBWTTo6RGVsZXRlUHJvcGVydHlNb2Rl
OjpJZ25vcmVDb25maWd1cmFibGUpOwogICAgICAgICBKU09iamVjdDo6ZGVsZXRlUHJvcGVydHko
dGhpcywgZ2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKSwgcHJvcGVydHlOYW1lKTsKICAgICB9
CiAgICAgaWYgKCFqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QoKSktPnNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+aXNTZWN1cmVDb250ZXh0KCkpIHsKICAgICAgICAgaGFz
RGlzYWJsZWRSdW50aW1lUHJvcGVydGllcyA9IHRydWU7Ci0gICAgICAgIGF1dG8gcHJvcGVydHlO
YW1lID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
TENoYXIqPigiY2FsY3VsYXRlU2VjcmV0UmVzdWx0IiksIHN0cmxlbigiY2FsY3VsYXRlU2VjcmV0
UmVzdWx0IikpOworICAgICAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb21T
dHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiY2FsY3VsYXRlU2VjcmV0
UmVzdWx0IiksIHN0cmxlbigiY2FsY3VsYXRlU2VjcmV0UmVzdWx0IikpOwogICAgICAgICBWTTo6
RGVsZXRlUHJvcGVydHlNb2RlU2NvcGUgc2NvcGUodm0sIFZNOjpEZWxldGVQcm9wZXJ0eU1vZGU6
Oklnbm9yZUNvbmZpZ3VyYWJsZSk7CiAgICAgICAgIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eSh0
aGlzLCBnbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpLCBwcm9wZXJ0eU5hbWUpOwogICAgIH0K
ICAgICBpZiAoIWpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCgpKS0+c2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpLT5pc1NlY3VyZUNvbnRleHQoKSkgewogICAgICAgICBoYXNE
aXNhYmxlZFJ1bnRpbWVQcm9wZXJ0aWVzID0gdHJ1ZTsKLSAgICAgICAgYXV0byBwcm9wZXJ0eU5h
bWUgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBM
Q2hhcio+KCJnZXRTZWNyZXRCb29sZWFuIiksIHN0cmxlbigiZ2V0U2VjcmV0Qm9vbGVhbiIpKTsK
KyAgICAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBy
ZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oImdldFNlY3JldEJvb2xlYW4iKSwgc3RybGVu
KCJnZXRTZWNyZXRCb29sZWFuIikpOwogICAgICAgICBWTTo6RGVsZXRlUHJvcGVydHlNb2RlU2Nv
cGUgc2NvcGUodm0sIFZNOjpEZWxldGVQcm9wZXJ0eU1vZGU6Oklnbm9yZUNvbmZpZ3VyYWJsZSk7
CiAgICAgICAgIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eSh0aGlzLCBnbG9iYWxPYmplY3QoKS0+
Z2xvYmFsRXhlYygpLCBwcm9wZXJ0eU5hbWUpOwogICAgIH0KICNpZiBFTkFCTEUoVEVTVF9GRUFU
VVJFKQogICAgIGlmICghKGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCgp
KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5pc1NlY3VyZUNvbnRleHQoKSAmJiBSdW50aW1l
RW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLnRlc3RGZWF0dXJlRW5hYmxlZCgpKSkg
ewogICAgICAgICBoYXNEaXNhYmxlZFJ1bnRpbWVQcm9wZXJ0aWVzID0gdHJ1ZTsKLSAgICAgICAg
YXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJ0ZXN0RmVhdHVyZUdldFNlY3JldEJvb2xlYW4iKSwgc3Ry
bGVuKCJ0ZXN0RmVhdHVyZUdldFNlY3JldEJvb2xlYW4iKSk7CisgICAgICAgIGF1dG8gcHJvcGVy
dHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25z
dCBMQ2hhcio+KCJ0ZXN0RmVhdHVyZUdldFNlY3JldEJvb2xlYW4iKSwgc3RybGVuKCJ0ZXN0RmVh
dHVyZUdldFNlY3JldEJvb2xlYW4iKSk7CiAgICAgICAgIFZNOjpEZWxldGVQcm9wZXJ0eU1vZGVT
Y29wZSBzY29wZSh2bSwgVk06OkRlbGV0ZVByb3BlcnR5TW9kZTo6SWdub3JlQ29uZmlndXJhYmxl
KTsKICAgICAgICAgSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KHRoaXMsIGdsb2JhbE9iamVjdCgp
LT5nbG9iYWxFeGVjKCksIHByb3BlcnR5TmFtZSk7CiAgICAgfQogI2VuZGlmCiAgICAgaWYgKCFq
c0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKS0+aXNEb2N1bWVudCgpKSB7CiAgICAgICAgIGhhc0Rpc2FibGVkUnVudGltZVBy
b3BlcnRpZXMgPSB0cnVlOwotICAgICAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6
OmZyb21TdHJpbmcoJnZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oImNvbmRpdGlv
bmFsbHlFeHBvc2VkVG9XaW5kb3dGdW5jdGlvbiIpLCBzdHJsZW4oImNvbmRpdGlvbmFsbHlFeHBv
c2VkVG9XaW5kb3dGdW5jdGlvbiIpKTsKKyAgICAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oImNv
bmRpdGlvbmFsbHlFeHBvc2VkVG9XaW5kb3dGdW5jdGlvbiIpLCBzdHJsZW4oImNvbmRpdGlvbmFs
bHlFeHBvc2VkVG9XaW5kb3dGdW5jdGlvbiIpKTsKICAgICAgICAgVk06OkRlbGV0ZVByb3BlcnR5
TW9kZVNjb3BlIHNjb3BlKHZtLCBWTTo6RGVsZXRlUHJvcGVydHlNb2RlOjpJZ25vcmVDb25maWd1
cmFibGUpOwogICAgICAgICBKU09iamVjdDo6ZGVsZXRlUHJvcGVydHkodGhpcywgZ2xvYmFsT2Jq
ZWN0KCktPmdsb2JhbEV4ZWMoKSwgcHJvcGVydHlOYW1lKTsKICAgICB9CiAgICAgaWYgKCFqc0Nh
c3Q8SlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKS0+aXNXb3JrZXJHbG9iYWxTY29wZSgpKSB7CiAgICAgICAgIGhhc0Rpc2FibGVkUnVu
dGltZVByb3BlcnRpZXMgPSB0cnVlOwotICAgICAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50
aWZpZXI6OmZyb21TdHJpbmcoJnZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oImNv
bmRpdGlvbmFsbHlFeHBvc2VkVG9Xb3JrZXJGdW5jdGlvbiIpLCBzdHJsZW4oImNvbmRpdGlvbmFs
bHlFeHBvc2VkVG9Xb3JrZXJGdW5jdGlvbiIpKTsKKyAgICAgICAgYXV0byBwcm9wZXJ0eU5hbWUg
PSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFy
Kj4oImNvbmRpdGlvbmFsbHlFeHBvc2VkVG9Xb3JrZXJGdW5jdGlvbiIpLCBzdHJsZW4oImNvbmRp
dGlvbmFsbHlFeHBvc2VkVG9Xb3JrZXJGdW5jdGlvbiIpKTsKICAgICAgICAgVk06OkRlbGV0ZVBy
b3BlcnR5TW9kZVNjb3BlIHNjb3BlKHZtLCBWTTo6RGVsZXRlUHJvcGVydHlNb2RlOjpJZ25vcmVD
b25maWd1cmFibGUpOwogICAgICAgICBKU09iamVjdDo6ZGVsZXRlUHJvcGVydHkodGhpcywgZ2xv
YmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKSwgcHJvcGVydHlOYW1lKTsKICAgICB9CiAgICAgaWYg
KCEoanNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVj
dXRpb25Db250ZXh0KCktPmlzU2VjdXJlQ29udGV4dCgpfHwganNDYXN0PEpTRE9NR2xvYmFsT2Jq
ZWN0Kj4oZ2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmFsbG93c01l
ZGlhRGV2aWNlcygpKSkgewogICAgICAgICBoYXNEaXNhYmxlZFJ1bnRpbWVQcm9wZXJ0aWVzID0g
dHJ1ZTsKLSAgICAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KCZ2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJtZWRpYURldmljZXMiKSwgc3Ry
bGVuKCJtZWRpYURldmljZXMiKSk7CisgICAgICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJtZWRp
YURldmljZXMiKSwgc3RybGVuKCJtZWRpYURldmljZXMiKSk7CiAgICAgICAgIFZNOjpEZWxldGVQ
cm9wZXJ0eU1vZGVTY29wZSBzY29wZSh2bSwgVk06OkRlbGV0ZVByb3BlcnR5TW9kZTo6SWdub3Jl
Q29uZmlndXJhYmxlKTsKICAgICAgICAgSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KHRoaXMsIGds
b2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCksIHByb3BlcnR5TmFtZSk7CiAgICAgfQogICAgIGlm
ICghKGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpLT5pc1NlY3VyZUNvbnRleHQoKXx8IGpzQ2FzdDxKU0RPTUdsb2JhbE9i
amVjdCo+KGdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5oYXNTZXJ2
aWNlV29ya2VyU2NoZW1lKCkpKSB7CiAgICAgICAgIGhhc0Rpc2FibGVkUnVudGltZVByb3BlcnRp
ZXMgPSB0cnVlOwotICAgICAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb21T
dHJpbmcoJnZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oInNlcnZpY2VXb3JrZXJz
IiksIHN0cmxlbigic2VydmljZVdvcmtlcnMiKSk7CisgICAgICAgIGF1dG8gcHJvcGVydHlOYW1l
ID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hh
cio+KCJzZXJ2aWNlV29ya2VycyIpLCBzdHJsZW4oInNlcnZpY2VXb3JrZXJzIikpOwogICAgICAg
ICBWTTo6RGVsZXRlUHJvcGVydHlNb2RlU2NvcGUgc2NvcGUodm0sIFZNOjpEZWxldGVQcm9wZXJ0
eU1vZGU6Oklnbm9yZUNvbmZpZ3VyYWJsZSk7CiAgICAgICAgIEpTT2JqZWN0OjpkZWxldGVQcm9w
ZXJ0eSh0aGlzLCBnbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpLCBwcm9wZXJ0eU5hbWUpOwog
ICAgIH0KICNpZiBFTkFCTEUoVEVTVF9GRUFUVVJFKQogICAgIGlmICghKFJ1bnRpbWVFbmFibGVk
RmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkudGVzdEZlYXR1cmVFbmFibGVkKCkgJiYgUnVudGlt
ZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS50ZXN0RmVhdHVyZTFFbmFibGVkKCkp
KSB7CiAgICAgICAgIGhhc0Rpc2FibGVkUnVudGltZVByb3BlcnRpZXMgPSB0cnVlOwotICAgICAg
ICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCByZWludGVy
cHJldF9jYXN0PGNvbnN0IExDaGFyKj4oImVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGUiKSwgc3Ry
bGVuKCJlbmFibGVkQXRSdW50aW1lQXR0cmlidXRlIikpOworICAgICAgICBhdXRvIHByb3BlcnR5
TmFtZSA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
TENoYXIqPigiZW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZSIpLCBzdHJsZW4oImVuYWJsZWRBdFJ1
bnRpbWVBdHRyaWJ1dGUiKSk7CiAgICAgICAgIFZNOjpEZWxldGVQcm9wZXJ0eU1vZGVTY29wZSBz
Y29wZSh2bSwgVk06OkRlbGV0ZVByb3BlcnR5TW9kZTo6SWdub3JlQ29uZmlndXJhYmxlKTsKICAg
ICAgICAgSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KHRoaXMsIGdsb2JhbE9iamVjdCgpLT5nbG9i
YWxFeGVjKCksIHByb3BlcnR5TmFtZSk7CiAgICAgfQogI2VuZGlmCiAgICAgaWYgKCFqc0Nhc3Q8
SlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKS0+aXNEb2N1bWVudCgpKSB7CiAgICAgICAgIGhhc0Rpc2FibGVkUnVudGltZVByb3BlcnRp
ZXMgPSB0cnVlOwotICAgICAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb21T
dHJpbmcoJnZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oImNvbmRpdGlvbmFsbHlF
eHBvc2VkVG9XaW5kb3dBdHRyaWJ1dGUiKSwgc3RybGVuKCJjb25kaXRpb25hbGx5RXhwb3NlZFRv
V2luZG93QXR0cmlidXRlIikpOworICAgICAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZp
ZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiY29uZGl0
aW9uYWxseUV4cG9zZWRUb1dpbmRvd0F0dHJpYnV0ZSIpLCBzdHJsZW4oImNvbmRpdGlvbmFsbHlF
eHBvc2VkVG9XaW5kb3dBdHRyaWJ1dGUiKSk7CiAgICAgICAgIFZNOjpEZWxldGVQcm9wZXJ0eU1v
ZGVTY29wZSBzY29wZSh2bSwgVk06OkRlbGV0ZVByb3BlcnR5TW9kZTo6SWdub3JlQ29uZmlndXJh
YmxlKTsKICAgICAgICAgSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KHRoaXMsIGdsb2JhbE9iamVj
dCgpLT5nbG9iYWxFeGVjKCksIHByb3BlcnR5TmFtZSk7CiAgICAgfQogICAgIGlmICghanNDYXN0
PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250
ZXh0KCktPmlzV29ya2VyR2xvYmFsU2NvcGUoKSkgewogICAgICAgICBoYXNEaXNhYmxlZFJ1bnRp
bWVQcm9wZXJ0aWVzID0gdHJ1ZTsKLSAgICAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKCZ2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJjb25k
aXRpb25hbGx5RXhwb3NlZFRvV29ya2VyQXR0cmlidXRlIiksIHN0cmxlbigiY29uZGl0aW9uYWxs
eUV4cG9zZWRUb1dvcmtlckF0dHJpYnV0ZSIpKTsKKyAgICAgICAgYXV0byBwcm9wZXJ0eU5hbWUg
PSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFy
Kj4oImNvbmRpdGlvbmFsbHlFeHBvc2VkVG9Xb3JrZXJBdHRyaWJ1dGUiKSwgc3RybGVuKCJjb25k
aXRpb25hbGx5RXhwb3NlZFRvV29ya2VyQXR0cmlidXRlIikpOwogICAgICAgICBWTTo6RGVsZXRl
UHJvcGVydHlNb2RlU2NvcGUgc2NvcGUodm0sIFZNOjpEZWxldGVQcm9wZXJ0eU1vZGU6Oklnbm9y
ZUNvbmZpZ3VyYWJsZSk7CiAgICAgICAgIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eSh0aGlzLCBn
bG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpLCBwcm9wZXJ0eU5hbWUpOwogICAgIH0KQEAgLTI0
MjIsOCArMjQyMiw4IEBAIHZvaWQgSlNUZXN0T2JqUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbigK
ICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPml0ZXJhdG9yU3ltYm9sLCBnbG9i
YWxPYmplY3QoKS0+YXJyYXlQcm90b3R5cGUoKS0+Z2V0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5h
bWVzLT5idWlsdGluTmFtZXMoKS52YWx1ZXNQcml2YXRlTmFtZSgpKSwgc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7CiAgICAgYWRkVmFsdWVJ
dGVyYWJsZU1ldGhvZHMoKmdsb2JhbE9iamVjdCgpLCAqdGhpcyk7CiAgICAgSlNPYmplY3QmIHVu
c2NvcGFibGVzID0gKmNvbnN0cnVjdEVtcHR5T2JqZWN0KGdsb2JhbE9iamVjdCgpLT5nbG9iYWxF
eGVjKCksIGdsb2JhbE9iamVjdCgpLT5udWxsUHJvdG90eXBlT2JqZWN0U3RydWN0dXJlKCkpOwot
ICAgIHVuc2NvcGFibGVzLnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0s
ICJ2b2lkTWV0aG9kIiksIGpzQm9vbGVhbih0cnVlKSk7Ci0gICAgdW5zY29wYWJsZXMucHV0RGly
ZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgInNob3J0QXR0ciIpLCBqc0Jvb2xl
YW4odHJ1ZSkpOworICAgIHVuc2NvcGFibGVzLnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyh2bSwgInZvaWRNZXRob2QiKSwganNCb29sZWFuKHRydWUpKTsKKyAgICB1bnNjb3Bh
Ymxlcy5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJzaG9ydEF0dHIi
KSwganNCb29sZWFuKHRydWUpKTsKICAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwg
dm0ucHJvcGVydHlOYW1lcy0+dW5zY29wYWJsZXNTeW1ib2wsICZ1bnNjb3BhYmxlcywgSlNDOjpQ
cm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFk
T25seSk7CiB9CiAKQEAgLTI0OTIsMTAgKzI0OTIsMTEgQEAgYm9vbCBKU1Rlc3RPYmo6OmdldE93
blByb3BlcnR5U2xvdEJ5SW5kZQogCiB2b2lkIEpTVGVzdE9iajo6Z2V0T3duUHJvcGVydHlOYW1l
cyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIHN0YXRlLCBQcm9wZXJ0eU5hbWVBcnJheSYg
cHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7CisgICAgVk0mIHZtID0gc3Rh
dGUtPnZtKCk7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3RPYmoqPihvYmpl
Y3QpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMob2JqZWN0LCBpbmZvKCkpOwogICAg
IGZvciAodW5zaWduZWQgaSA9IDAsIGNvdW50ID0gdGhpc09iamVjdC0+d3JhcHBlZCgpLmxlbmd0
aCgpOyBpIDwgY291bnQ7ICsraSkKLSAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmll
cjo6ZnJvbShzdGF0ZSwgaSkpOworICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVy
Ojpmcm9tKHZtLCBpKSk7CiAgICAgSlNPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0
LCBzdGF0ZSwgcHJvcGVydHlOYW1lcywgbW9kZSk7CiB9CiAKQEAgLTI2NjUsNiArMjY2Niw3IEBA
IEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNvbnN0cnVjdG9yU3RhdGkKIAogc3RhdGljIGlubGlu
ZSBib29sIHNldEpTVGVzdE9iakNvbnN0cnVjdG9yU3RhdGljU3RyaW5nQXR0clNldHRlcihFeGVj
U3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewor
ICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwog
ICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oc3RhdGUsIHZhbHVl
KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTI3MjUs
NiArMjcyNyw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakVudW1BdHRyKEV4ZWNTdGEKIAog
c3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakVudW1BdHRyU2V0dGVyKEV4ZWNTdGF0ZSYg
c3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYg
dGhyb3dTY29wZSkKIHsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAg
ICAgYXV0byBvcHRpb25hbE5hdGl2ZVZhbHVlID0gcGFyc2VFbnVtZXJhdGlvbjxUZXN0T2JqOjpF
bnVtVHlwZT4oc3RhdGUsIHZhbHVlKTsKQEAgLTI3NTksNiArMjc2Miw3IEBAIEVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9iakJ5dGVBdHRyKEV4ZWNTdGEKIAogc3RhdGljIGlubGluZSBib29sIHNldEpT
VGVzdE9iakJ5dGVBdHRyU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09i
amVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKKyAgICBVTlVT
RURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRv
JiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNv
bnZlcnQ8SURMQnl0ZT4oc3RhdGUsIHZhbHVlKTsKQEAgLTI3OTAsNiArMjc5NCw3IEBAIEVuY29k
ZWRKU1ZhbHVlIGpzVGVzdE9iak9jdGV0QXR0cihFeGVjU3QKIAogc3RhdGljIGlubGluZSBib29s
IHNldEpTVGVzdE9iak9jdGV0QXR0clNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmom
IHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Cisg
ICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAg
ICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFs
dWUgPSBjb252ZXJ0PElETE9jdGV0PihzdGF0ZSwgdmFsdWUpOwpAQCAtMjgyMSw2ICsyODI2LDcg
QEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqU2hvcnRBdHRyKEV4ZWNTdAogCiBzdGF0aWMgaW5s
aW5lIGJvb2wgc2V0SlNUZXN0T2JqU2hvcnRBdHRyU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpT
VGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29w
ZSkKIHsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBu
YXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMU2hvcnQ+KHN0YXRlLCB2YWx1ZSk7CkBAIC0yODUyLDYg
KzI4NTgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDbGFtcGVkU2hvcnRBdHRyCiAKIHN0
YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpDbGFtcGVkU2hvcnRBdHRyU2V0dGVyKEV4ZWNT
dGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dT
Y29wZSYgdGhyb3dTY29wZSkKIHsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVk
KCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMQ2xhbXBBZGFwdG9yPElETFNo
b3J0Pj4oc3RhdGUsIHZhbHVlKTsKQEAgLTI4ODMsNiArMjg5MCw3IEBAIEVuY29kZWRKU1ZhbHVl
IGpzVGVzdE9iakVuZm9yY2VSYW5nZVNob3IKIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVz
dE9iakVuZm9yY2VSYW5nZVNob3J0QXR0clNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RP
YmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7
CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7
CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZl
VmFsdWUgPSBjb252ZXJ0PElETEVuZm9yY2VSYW5nZUFkYXB0b3I8SURMU2hvcnQ+PihzdGF0ZSwg
dmFsdWUpOwpAQCAtMjkxNCw2ICsyOTIyLDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqVW5z
aWduZWRTaG9ydEF0dAogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqVW5zaWduZWRT
aG9ydEF0dHJTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBK
U1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogeworICAgIFVOVVNFRF9QQVJB
TShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwg
PSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJ
RExVbnNpZ25lZFNob3J0PihzdGF0ZSwgdmFsdWUpOwpAQCAtMjk0NSw2ICsyOTU0LDcgQEAgRW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqTG9uZ0F0dHIoRXhlY1N0YQogCiBzdGF0aWMgaW5saW5lIGJv
b2wgc2V0SlNUZXN0T2JqTG9uZ0F0dHJTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2Jq
JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewor
ICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwog
ICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZh
bHVlID0gY29udmVydDxJRExMb25nPihzdGF0ZSwgdmFsdWUpOwpAQCAtMjk3Niw2ICsyOTg2LDcg
QEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqTG9uZ0xvbmdBdHRyKEV4ZQogCiBzdGF0aWMgaW5s
aW5lIGJvb2wgc2V0SlNUZXN0T2JqTG9uZ0xvbmdBdHRyU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUs
IEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dT
Y29wZSkKIHsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0
byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMTG9uZ0xvbmc+KHN0YXRlLCB2YWx1ZSk7CkBAIC0z
MDA3LDYgKzMwMTgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpVbnNpZ25lZExvbmdMb25n
CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpVbnNpZ25lZExvbmdMb25nQXR0clNl
dHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFs
dWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsK
ICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmpl
Y3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETFVuc2lnbmVk
TG9uZ0xvbmc+KHN0YXRlLCB2YWx1ZSk7CkBAIC0zMDM4LDYgKzMwNTAsNyBAQCBFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RPYmpTdHJpbmdBdHRyKEV4ZWNTCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRK
U1Rlc3RPYmpTdHJpbmdBdHRyU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhp
c09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKKyAgICBV
TlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBh
dXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9
IGNvbnZlcnQ8SURMRE9NU3RyaW5nPihzdGF0ZSwgdmFsdWUpOwpAQCAtMzA2OSw2ICszMDgyLDcg
QEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqVXN2c3RyaW5nQXR0cihFeAogCiBzdGF0aWMgaW5s
aW5lIGJvb2wgc2V0SlNUZXN0T2JqVXN2c3RyaW5nQXR0clNldHRlcihFeGVjU3RhdGUmIHN0YXRl
LCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93
U2NvcGUpCiB7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1
dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETFVTVlN0cmluZz4oc3RhdGUsIHZhbHVlKTsKQEAg
LTMxMDAsNiArMzExNCw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialRlc3RPYmpBdHRyKEV4
ZWMKIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialRlc3RPYmpBdHRyU2V0dGVyKEV4
ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhy
b3dTY29wZSYgdGhyb3dTY29wZSkKIHsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFw
cGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMSW50ZXJmYWNlPFRlc3RP
Ymo+PihzdGF0ZSwgdmFsdWUsIFtdKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Nj
b3BlJiBzY29wZSkgeyB0aHJvd0F0dHJpYnV0ZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUsICJUZXN0
T2JqZWN0IiwgInRlc3RPYmpBdHRyIiwgIlRlc3RPYmoiKTsgfSk7CkBAIC0zMTMxLDYgKzMxNDYs
NyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpUZXN0TnVsbGFibGVPYmpBCiAKIHN0YXRpYyBp
bmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpUZXN0TnVsbGFibGVPYmpBdHRyU2V0dGVyKEV4ZWNTdGF0
ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29w
ZSYgdGhyb3dTY29wZSkKIHsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7
CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMTnVsbGFibGU8SURMSW50ZXJmYWNl
PFRlc3RPYmo+Pj4oc3RhdGUsIHZhbHVlLCBbXShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBdHRyaWJ1dGVUeXBlRXJyb3Ioc3RhdGUsIHNjb3Bl
LCAiVGVzdE9iamVjdCIsICJ0ZXN0TnVsbGFibGVPYmpBdHRyIiwgIlRlc3RPYmoiKTsgfSk7CkBA
IC0zMTYyLDYgKzMxNzgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpMZW5pZW50VGVzdE9i
akF0CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpMZW5pZW50VGVzdE9iakF0dHJT
ZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZh
bHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogeworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7
CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2Jq
ZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExJbnRlcmZh
Y2U8VGVzdE9iaj4+KHN0YXRlLCB2YWx1ZSwgW10oSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXR0cmlidXRlVHlwZUVycm9yKHN0YXRlLCBzY29w
ZSwgIlRlc3RPYmplY3QiLCAibGVuaWVudFRlc3RPYmpBdHRyIiwgIlRlc3RPYmoiKTsgfSk7CkBA
IC0zMjA3LDYgKzMyMjQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdBdHRyVHJl
YXRpCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpTdHJpbmdBdHRyVHJlYXRpbmdO
dWxsQXNFbXB0eVN0cmluZ1NldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNP
YmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CisgICAgVU5V
U0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0
byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBj
b252ZXJ0PElETFRyZWF0TnVsbEFzRW1wdHlBZGFwdG9yPElETERPTVN0cmluZz4+KHN0YXRlLCB2
YWx1ZSk7CkBAIC0zMjM4LDYgKzMyNTYsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpVc3Zz
dHJpbmdBdHRyVHJlCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpVc3ZzdHJpbmdB
dHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZ1NldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rl
c3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUp
CiB7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0
aXZlVmFsdWUgPSBjb252ZXJ0PElETFRyZWF0TnVsbEFzRW1wdHlBZGFwdG9yPElETFVTVlN0cmlu
Zz4+KHN0YXRlLCB2YWx1ZSk7CkBAIC0zMjY5LDYgKzMyODgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RPYmpCeXRlU3RyaW5nQXR0clRyCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RP
YmpCeXRlU3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmdTZXR0ZXIoRXhlY1N0YXRl
JiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKQogeworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsK
ICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExUcmVhdE51bGxBc0VtcHR5QWRhcHRv
cjxJRExCeXRlU3RyaW5nPj4oc3RhdGUsIHZhbHVlKTsKQEAgLTMzMDAsNiArMzMyMCw3IEBAIEVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9ialN0cmluZ0xvbmdSZWNvcmQKIAogc3RhdGljIGlubGluZSBi
b29sIHNldEpTVGVzdE9ialN0cmluZ0xvbmdSZWNvcmRBdHRyU2V0dGVyKEV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSkKIHsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAg
YXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMUmVjb3JkPElETERPTVN0cmluZywgSURMTG9u
Zz4+KHN0YXRlLCB2YWx1ZSk7CkBAIC0zMzMxLDYgKzMzNTIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RPYmpVc3ZzdHJpbmdMb25nUmVjCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RP
YmpVc3ZzdHJpbmdMb25nUmVjb3JkQXR0clNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RP
YmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7
CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7
CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZl
VmFsdWUgPSBjb252ZXJ0PElETFJlY29yZDxJRExVU1ZTdHJpbmcsIElETExvbmc+PihzdGF0ZSwg
dmFsdWUpOwpAQCAtMzM2Miw2ICszMzg0LDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqVXN2
c3RyaW5nTG9uZ1JlYwogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqVXN2c3RyaW5n
TG9uZ1JlY29yZEF0dHJTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2Jq
ZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogeworICAgIFVOVVNF
RF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8m
IGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29u
dmVydDxJRExSZWNvcmQ8SURMQnl0ZVN0cmluZywgSURMTG9uZz4+KHN0YXRlLCB2YWx1ZSk7CkBA
IC0zMzkzLDYgKzM0MTYsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdPYmpSZWNv
cmRBCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpTdHJpbmdPYmpSZWNvcmRBdHRy
U2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2
YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUp
OwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09i
amVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMUmVjb3Jk
PElETERPTVN0cmluZywgSURMSW50ZXJmYWNlPFRlc3RPYmo+Pj4oc3RhdGUsIHZhbHVlKTsKQEAg
LTM0MjQsNiArMzQ0OCw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialN0cmluZ051bGxhYmxl
T2IKIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialN0cmluZ051bGxhYmxlT2JqUmVj
b3JkQXR0clNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpT
VmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CisgICAgVU5VU0VEX1BBUkFN
KHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9
IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElE
TFJlY29yZDxJRExET01TdHJpbmcsIElETE51bGxhYmxlPElETEludGVyZmFjZTxUZXN0T2JqPj4+
PihzdGF0ZSwgdmFsdWUpOwpAQCAtMzQ1NSw2ICszNDgwLDcgQEAgRW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqRGljdGlvbmFyeUF0dHIoRQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2Jq
RGljdGlvbmFyeUF0dHJTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2Jq
ZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogeworICAgIFVOVVNF
RF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8m
IGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29u
dmVydDxJRExEaWN0aW9uYXJ5PFRlc3RPYmo6OkRpY3Rpb25hcnk+PihzdGF0ZSwgdmFsdWUpOwpA
QCAtMzQ4Niw2ICszNTEyLDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqTnVsbGFibGVEaWN0
aW9uYQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqTnVsbGFibGVEaWN0aW9uYXJ5
QXR0clNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFs
dWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CisgICAgVU5VU0VEX1BBUkFNKHN0
YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRo
aXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETE51
bGxhYmxlPElETERpY3Rpb25hcnk8VGVzdE9iajo6RGljdGlvbmFyeT4+PihzdGF0ZSwgdmFsdWUp
OwpAQCAtMzUxNyw2ICszNTQ0LDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQW5ub3RhdGVk
VHlwZUluVQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQW5ub3RhdGVkVHlwZUlu
VW5pb25BdHRyU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwg
SlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKKyAgICBVTlVTRURfUEFS
QU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBs
ID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8
SURMVW5pb248SURMRE9NU3RyaW5nLCBJRExDbGFtcEFkYXB0b3I8SURMTG9uZz4+PihzdGF0ZSwg
dmFsdWUpOwpAQCAtMzU0OCw2ICszNTc2LDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQW5u
b3RhdGVkVHlwZUluUwogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQW5ub3RhdGVk
VHlwZUluU2VxdWVuY2VBdHRyU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhp
c09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKKyAgICBV
TlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBh
dXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9
IGNvbnZlcnQ8SURMU2VxdWVuY2U8SURMQ2xhbXBBZGFwdG9yPElETExvbmc+Pj4oc3RhdGUsIHZh
bHVlKTsKQEAgLTM1NzksNiArMzYwOCw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakltcGxl
bWVudGF0aW9uRW4KIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakltcGxlbWVudGF0
aW9uRW51bUF0dHJTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0
LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogeworICAgIFVOVVNFRF9Q
QVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGlt
cGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG9wdGlvbmFsTmF0aXZlVmFsdWUg
PSBwYXJzZUVudW1lcmF0aW9uPEFsdGVybmF0ZUVudW1OYW1lPihzdGF0ZSwgdmFsdWUpOwpAQCAt
MzY0MSw2ICszNjcxLDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqWE1MT2JqQXR0cihFeGVj
UwogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqWE1MT2JqQXR0clNldHRlcihFeGVj
U3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93
U2NvcGUmIHRocm93U2NvcGUpCiB7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBl
ZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETEludGVyZmFjZTxUZXN0T2Jq
Pj4oc3RhdGUsIHZhbHVlLCBbXShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29w
ZSYgc2NvcGUpIHsgdGhyb3dBdHRyaWJ1dGVUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlLCAiVGVzdE9i
amVjdCIsICJYTUxPYmpBdHRyIiwgIlRlc3RPYmoiKTsgfSk7CkBAIC0zNjcyLDYgKzM3MDMsNyBA
QCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDcmVhdGUoRXhlY1N0YXRlCiAKIHN0YXRpYyBpbmxp
bmUgYm9vbCBzZXRKU1Rlc3RPYmpDcmVhdGVTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0
T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQog
eworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2
ZVZhbHVlID0gY29udmVydDxJRExCb29sZWFuPihzdGF0ZSwgdmFsdWUpOwpAQCAtMzcwMyw2ICsz
NzM1LDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkU3RyaW5nQQogCiBzdGF0
aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkU3RyaW5nQXR0clNldHRlcihFeGVj
U3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93
U2NvcGUmIHRocm93U2NvcGUpCiB7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBl
ZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oc3RhdGUs
IHZhbHVlKTsKQEAgLTM3MzQsNiArMzc2Nyw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialJl
ZmxlY3RlZFVTVlN0cmkKIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialJlZmxlY3Rl
ZFVTVlN0cmluZ0F0dHJTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2Jq
ZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogeworICAgIFVOVVNF
RF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8m
IGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29u
dmVydDxJRExVU1ZTdHJpbmc+KHN0YXRlLCB2YWx1ZSk7CkBAIC0zNzY1LDYgKzM3OTksNyBAQCBF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRJbnRlZ3JhCiAKIHN0YXRpYyBpbmxpbmUg
Ym9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRJbnRlZ3JhbEF0dHJTZXR0ZXIoRXhlY1N0YXRlJiBz
dGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKQogeworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAg
ICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExMb25nPihzdGF0ZSwgdmFsdWUpOwpAQCAt
Mzc5Niw2ICszODMxLDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkVW5zaWdu
ZQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkVW5zaWduZWRJbnRl
Z3JhbEF0dHJTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBK
U1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogeworICAgIFVOVVNFRF9QQVJB
TShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwg
PSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJ
RExVbnNpZ25lZExvbmc+KHN0YXRlLCB2YWx1ZSk7CkBAIC0zODI3LDYgKzM4NjMsNyBAQCBFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRCb29sZWFuCiAKIHN0YXRpYyBpbmxpbmUgYm9v
bCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRCb29sZWFuQXR0clNldHRlcihFeGVjU3RhdGUmIHN0YXRl
LCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93
U2NvcGUpCiB7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1
dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETEJvb2xlYW4+KHN0YXRlLCB2YWx1ZSk7CkBAIC0z
ODU4LDYgKzM4OTUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRVUkxBdHRy
CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRVUkxBdHRyU2V0dGVy
KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwg
VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAg
IFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53
cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPihz
dGF0ZSwgdmFsdWUpOwpAQCAtMzg4OSw2ICszOTI3LDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqUmVmbGVjdGVkVVNWVVJMQQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqUmVm
bGVjdGVkVVNWVVJMQXR0clNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNP
YmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CisgICAgVU5V
U0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0
byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBj
b252ZXJ0PElETFVTVlN0cmluZz4oc3RhdGUsIHZhbHVlKTsKQEAgLTM5MjAsNiArMzk1OSw3IEBA
IEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZFN0cmluZ0EKIAogc3RhdGljIGlubGlu
ZSBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZFN0cmluZ0F0dHJTZXR0ZXIoRXhlY1N0YXRlJiBz
dGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKQogeworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAg
ICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KHN0YXRlLCB2YWx1ZSk7
CkBAIC0zOTUxLDYgKzM5OTEsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRD
dXN0b21JCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21J
bnRlZ3JhbEF0dHJTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0
LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogeworICAgIFVOVVNFRF9Q
QVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGlt
cGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVy
dDxJRExMb25nPihzdGF0ZSwgdmFsdWUpOwpAQCAtMzk4Miw2ICs0MDIzLDcgQEAgRW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tQgogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0
SlNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tQm9vbGVhbkF0dHJTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0
ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQogeworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBh
dXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExCb29sZWFuPihzdGF0ZSwgdmFsdWUpOwpAQCAt
NDAxMyw2ICs0MDU1LDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9t
VQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tVVJMQXR0
clNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUg
dmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRl
KTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNP
YmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0
cmluZz4oc3RhdGUsIHZhbHVlKTsKQEAgLTQwNDgsNiArNDA5MSw3IEBAIEVuY29kZWRKU1ZhbHVl
IGpzVGVzdE9iakVuYWJsZWRBdFJ1bnRpbWUKICNpZiBFTkFCTEUoVEVTVF9GRUFUVVJFKQogc3Rh
dGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGVTZXR0
ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVl
LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogeworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0
LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+
KHN0YXRlLCB2YWx1ZSk7CkBAIC00MDg0LDYgKzQxMjgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpDb25zdHJ1Y3RvckVuYWJsCiAjaWYgRU5BQkxFKFRFU1RfRkVBVFVSRSkKIHN0YXRpYyBp
bmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpDb25zdHJ1Y3RvckVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1
dGVTdGF0aWNTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29w
ZSYgdGhyb3dTY29wZSkKIHsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01T
dHJpbmc+KHN0YXRlLCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3Bl
LCBmYWxzZSk7CkBAIC00MTE2LDYgKzQxNjEsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpU
eXBlZEFycmF5QXR0cihFCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpUeXBlZEFy
cmF5QXR0clNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpT
VmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CisgICAgVU5VU0VEX1BBUkFN
KHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9
IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElE
TEZsb2F0MzJBcnJheT4oc3RhdGUsIHZhbHVlLCBbXShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBdHRyaWJ1dGVUeXBlRXJyb3Ioc3RhdGUsIHNj
b3BlLCAiVGVzdE9iamVjdCIsICJ0eXBlZEFycmF5QXR0ciIsICJGbG9hdDMyQXJyYXkiKTsgfSk7
CkBAIC00MTQ1LDYgKzQxOTEsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDdXN0b21BdHRy
KEV4ZWNTCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpDdXN0b21BdHRyU2V0dGVy
KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwg
VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAg
IFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICB0aGlzT2JqZWN0LnNldEN1c3RvbUF0dHIo
c3RhdGUsIHZhbHVlKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTQxNjksNiArNDIxNiw3IEBAIEVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9iak9uZm9vKEV4ZWNTdGF0ZSoKIAogc3RhdGljIGlubGluZSBi
b29sIHNldEpTVGVzdE9iak9uZm9vU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYg
dGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKKyAg
ICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAg
ICBzZXRFdmVudEhhbmRsZXJBdHRyaWJ1dGUoc3RhdGUsIHRoaXNPYmplY3QsIHRoaXNPYmplY3Qu
d3JhcHBlZCgpLCBldmVudE5hbWVzKCkuZm9vRXZlbnQsIHZhbHVlKTsKICAgICByZXR1cm4gdHJ1
ZTsKQEAgLTQxOTMsNiArNDI0MSw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iak9ud2Via2l0
Zm9vKEV4ZWMKIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iak9ud2Via2l0Zm9vU2V0
dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1
ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwog
ICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBzZXRFdmVudEhhbmRsZXJBdHRyaWJ1
dGUoc3RhdGUsIHRoaXNPYmplY3QsIHRoaXNPYmplY3Qud3JhcHBlZCgpLCBldmVudE5hbWVzKCku
Zm9vRXZlbnQsIHZhbHVlKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTQyMTksNiArNDI2OCw3IEBA
IEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialdpdGhFeGVjU3RhdGVBdHQKIAogc3RhdGljIGlubGlu
ZSBib29sIHNldEpTVGVzdE9ialdpdGhFeGVjU3RhdGVBdHRyaWJ1dGVTZXR0ZXIoRXhlY1N0YXRl
JiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKQogeworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsK
ICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExMb25nPihzdGF0ZSwgdmFsdWUpOwpA
QCAtNDI1MCw2ICs0MzAwLDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqV2l0aENhbGxXaXRo
QW5kUwogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqV2l0aENhbGxXaXRoQW5kU2V0
dGVyQ2FsbFdpdGhBdHRyaWJ1dGVTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0
aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogeworICAg
IFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAg
IGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVl
ID0gY29udmVydDxJRExMb25nPihzdGF0ZSwgdmFsdWUpOwpAQCAtNDI4NCw2ICs0MzM1LDcgQEAg
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dAogCiBzdGF0aWMgaW5saW5l
IGJvb2wgc2V0SlNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGVTZXR0
ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVl
LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogeworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0
LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExJbnRlcmZhY2U8
VGVzdE9iaj4+KHN0YXRlLCB2YWx1ZSwgW10oSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRo
cm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXR0cmlidXRlVHlwZUVycm9yKHN0YXRlLCBzY29wZSwg
IlRlc3RPYmplY3QiLCAid2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGUiLCAiVGVz
dE9iaiIpOyB9KTsKQEAgLTQzMjEsNiArNDM3Myw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9i
aldpdGhTY3JpcHRFeGVjdXQKIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialdpdGhT
Y3JpcHRFeGVjdXRpb25Db250ZXh0QW5kRXhlY1N0YXRlQXR0cmlidXRlU2V0dGVyKEV4ZWNTdGF0
ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29w
ZSYgdGhyb3dTY29wZSkKIHsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7
CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMSW50ZXJmYWNlPFRlc3RPYmo+Pihz
dGF0ZSwgdmFsdWUsIFtdKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBz
Y29wZSkgeyB0aHJvd0F0dHJpYnV0ZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUsICJUZXN0T2JqZWN0
IiwgIndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kRXhlY1N0YXRlQXR0cmlidXRlIiwgIlRl
c3RPYmoiKTsgfSk7CkBAIC00MzU4LDYgKzQ0MTEsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpXaXRoU2NyaXB0RXhlY3V0CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpXaXRo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZEV4ZWNTdGF0ZVdpdGhTcGFjZXNBdHRyaWJ1dGVTZXR0
ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVl
LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogeworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0
LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExJbnRlcmZhY2U8
VGVzdE9iaj4+KHN0YXRlLCB2YWx1ZSwgW10oSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRo
cm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXR0cmlidXRlVHlwZUVycm9yKHN0YXRlLCBzY29wZSwg
IlRlc3RPYmplY3QiLCAid2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRFeGVjU3RhdGVXaXRo
U3BhY2VzQXR0cmlidXRlIiwgIlRlc3RPYmoiKTsgfSk7CkBAIC00Mzk2LDYgKzQ0NTAsNyBAQCBF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHIxCiAjaWYgRU5BQkxFKENvbmRp
dGlvbjEpCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMVNl
dHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFs
dWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsK
ICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmpl
Y3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETExvbmc+KHN0
YXRlLCB2YWx1ZSk7CkBAIC00NDMzLDYgKzQ0ODgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpDb25kaXRpb25hbEF0dHIyCiAjaWYgRU5BQkxFKENvbmRpdGlvbjEpICYmIEVOQUJMRShDb25k
aXRpb24yKQogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0cjJT
ZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZh
bHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogeworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7
CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2Jq
ZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExMb25nPihz
dGF0ZSwgdmFsdWUpOwpAQCAtNDQ3MCw2ICs0NTI2LDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqQ29uZGl0aW9uYWxBdHRyMwogI2lmIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29u
ZGl0aW9uMikKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHIz
U2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2
YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUp
OwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09i
amVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMTG9uZz4o
c3RhdGUsIHZhbHVlKTsKQEAgLTQ1MDUsOSArNDU2MiwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpDb25kaXRpb25hbEF0dHI0CiAjaWYgRU5BQkxFKENvbmRpdGlvbjEpCiBzdGF0aWMgaW5s
aW5lIGJvb2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNENvbnN0cnVjdG9yU2V0dGVyKEV4
ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhy
b3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Cisg
ICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBWTSYgdm0gPSB0aHJvd1Njb3BlLnZtKCk7CiAg
ICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCi0gICAgcmV0dXJuIHRoaXNP
YmplY3QucHV0RGlyZWN0KHN0YXRlLnZtKCksIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRl
LnZtKCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiY29uZGl0aW9uYWxBdHRyNCIp
LCBzdHJsZW4oImNvbmRpdGlvbmFsQXR0cjQiKSksIHZhbHVlKTsKKyAgICByZXR1cm4gdGhpc09i
amVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgTENoYXIqPigiY29uZGl0aW9uYWxBdHRyNCIpLCBzdHJsZW4oImNvbmRpdGlv
bmFsQXR0cjQiKSksIHZhbHVlKTsKIH0KIAogYm9vbCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0
dHI0Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCkBAIC00NTM1LDkgKzQ1OTMsMTAgQEAgRW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNQogI2lmIEVOQUJMRShDb25kaXRp
b24xKSAmJiBFTkFCTEUoQ29uZGl0aW9uMikKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RP
YmpDb25kaXRpb25hbEF0dHI1Q29uc3RydWN0b3JTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNU
ZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KQogewotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBVTlVTRURfUEFSQU0oc3Rh
dGUpOworICAgIFZNJiB2bSA9IHRocm93U2NvcGUudm0oKTsKICAgICAvLyBTaGFkb3dpbmcgYSBi
dWlsdC1pbiBjb25zdHJ1Y3Rvci4KLSAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qoc3Rh
dGUudm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUudm0oKSwgcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBMQ2hhcio+KCJjb25kaXRpb25hbEF0dHI1IiksIHN0cmxlbigiY29uZGl0aW9u
YWxBdHRyNSIpKSwgdmFsdWUpOworICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+
KCJjb25kaXRpb25hbEF0dHI1IiksIHN0cmxlbigiY29uZGl0aW9uYWxBdHRyNSIpKSwgdmFsdWUp
OwogfQogCiBib29sIHNldEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0cjVDb25zdHJ1Y3RvcihFeGVj
U3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRWYWx1ZSkKQEAgLTQ1NjUsOSArNDYyNCwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpDb25kaXRpb25hbEF0dHI2CiAjaWYgRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25k
aXRpb24yKQogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0cjZD
b25zdHJ1Y3RvclNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3Qs
IEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVk0mIHZtID0g
dGhyb3dTY29wZS52bSgpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9y
LgotICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdChzdGF0ZS52bSgpLCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKCZzdGF0ZS52bSgpLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4o
ImNvbmRpdGlvbmFsQXR0cjYiKSwgc3RybGVuKCJjb25kaXRpb25hbEF0dHI2IikpLCB2YWx1ZSk7
CisgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oImNvbmRpdGlvbmFsQXR0cjYi
KSwgc3RybGVuKCJjb25kaXRpb25hbEF0dHI2IikpLCB2YWx1ZSk7CiB9CiAKIGJvb2wgc2V0SlNU
ZXN0T2JqQ29uZGl0aW9uYWxBdHRyNkNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQpAQCAtNDY0
Nyw2ICs0NzA3LDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQW55QXR0cmlidXRlKEV4ZQog
CiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQW55QXR0cmlidXRlU2V0dGVyKEV4ZWNT
dGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dT
Y29wZSYgdGhyb3dTY29wZSkKIHsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVk
KCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMQW55PihzdGF0ZSwgdmFsdWUp
OwpAQCAtNDY3OCw2ICs0NzM5LDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqT2JqZWN0QXR0
cmlidXRlKAogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqT2JqZWN0QXR0cmlidXRl
U2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2
YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUp
OwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09i
amVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMT2JqZWN0
PihzdGF0ZSwgdmFsdWUpOwpAQCAtNDcyMyw2ICs0Nzg1LDcgQEAgRW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqTXV0YWJsZVBvaW50KEV4ZQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2Jq
TXV0YWJsZVBvaW50U2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVj
dCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKKyAgICBVTlVTRURf
UEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBp
bXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZl
cnQ8SURMSW50ZXJmYWNlPFNWR1BvaW50Pj4oc3RhdGUsIHZhbHVlLCBbXShKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBdHRyaWJ1dGVUeXBlRXJy
b3Ioc3RhdGUsIHNjb3BlLCAiVGVzdE9iamVjdCIsICJtdXRhYmxlUG9pbnQiLCAiU1ZHUG9pbnQi
KTsgfSk7CkBAIC00NzU0LDYgKzQ4MTcsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpTdHJh
d2JlcnJ5KEV4ZWNTCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpTdHJhd2JlcnJ5
U2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2
YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUp
OwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09i
amVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMTG9uZz4o
c3RhdGUsIHZhbHVlKTsKQEAgLTQ3OTksNiArNDg2Myw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9iaklkKEV4ZWNTdGF0ZSogc3QKIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iaklk
U2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2
YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUp
OwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09i
amVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMTG9uZz4o
c3RhdGUsIHZhbHVlKTsKQEAgLTQ4NDQsOSArNDkwOSwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpSZXBsYWNlYWJsZUF0dHJpCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpS
ZXBsYWNlYWJsZUF0dHJpYnV0ZVNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRo
aXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAg
VU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAg
Vk0mIHZtID0gdGhyb3dTY29wZS52bSgpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIHBy
b3BlcnR5LgotICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdChzdGF0ZS52bSgpLCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZS52bSgpLCByZWludGVycHJldF9jYXN0PGNvbnN0IExD
aGFyKj4oInJlcGxhY2VhYmxlQXR0cmlidXRlIiksIHN0cmxlbigicmVwbGFjZWFibGVBdHRyaWJ1
dGUiKSksIHZhbHVlKTsKKyAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50
aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigicmVw
bGFjZWFibGVBdHRyaWJ1dGUiKSwgc3RybGVuKCJyZXBsYWNlYWJsZUF0dHJpYnV0ZSIpKSwgdmFs
dWUpOwogfQogCiBib29sIHNldEpTVGVzdE9ialJlcGxhY2VhYmxlQXR0cmlidXRlKEV4ZWNTdGF0
ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFZhbHVlKQpAQCAtNDkyNiw2ICs0OTkyLDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqTnVs
bGFibGVMb25nU2V0dAogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqTnVsbGFibGVM
b25nU2V0dGFibGVBdHRyaWJ1dGVTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0
aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogeworICAg
IFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAg
IGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVl
ID0gY29udmVydDxJRExOdWxsYWJsZTxJRExMb25nPj4oc3RhdGUsIHZhbHVlKTsKQEAgLTQ5NTcs
NiArNTAyNCw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlU3RyaW5nU2UKIAog
c3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iak51bGxhYmxlU3RyaW5nU2V0dGFibGVBdHRy
aWJ1dGVTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1Zh
bHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogeworICAgIFVOVVNFRF9QQVJBTShz
dGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSB0
aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExO
dWxsYWJsZTxJRExET01TdHJpbmc+PihzdGF0ZSwgdmFsdWUpOwpAQCAtNDk4OCw2ICs1MDU2LDcg
QEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqTnVsbGFibGVVU1ZTdHJpbgogCiBzdGF0aWMgaW5s
aW5lIGJvb2wgc2V0SlNUZXN0T2JqTnVsbGFibGVVU1ZTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZVNl
dHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFs
dWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsK
ICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmpl
Y3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETE51bGxhYmxl
PElETFVTVlN0cmluZz4+KHN0YXRlLCB2YWx1ZSk7CkBAIC01MDE5LDYgKzUwODgsNyBAQCBFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZUJ5dGVTdHJpCiAKIHN0YXRpYyBpbmxpbmUgYm9v
bCBzZXRKU1Rlc3RPYmpOdWxsYWJsZUJ5dGVTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZVNldHRlcihF
eGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRo
cm93U2NvcGUmIHRocm93U2NvcGUpCiB7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3Jh
cHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETE51bGxhYmxlPElETEJ5
dGVTdHJpbmc+PihzdGF0ZSwgdmFsdWUpOwpAQCAtNTA2NCw2ICs1MTM0LDcgQEAgRW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqQXR0cmlidXRlV2l0aFJlcwogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0
SlNUZXN0T2JqQXR0cmlidXRlV2l0aFJlc2VydmVkRW51bVR5cGVTZXR0ZXIoRXhlY1N0YXRlJiBz
dGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKQogeworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAg
ICBhdXRvIG9wdGlvbmFsTmF0aXZlVmFsdWUgPSBwYXJzZUVudW1lcmF0aW9uPFRlc3RPYmo6Ok9w
dGlvbmFsPihzdGF0ZSwgdmFsdWUpOwpAQCAtNTEyNiwxNyArNTE5NywxOCBAQCBFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RPYmpQdXRGb3J3YXJkc0F0dHJpCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRK
U1Rlc3RPYmpQdXRGb3J3YXJkc0F0dHJpYnV0ZVNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rl
c3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUp
CiB7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIGF1dG8gaWQgPSBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKCZzdGF0ZS52bSgpLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFy
Kj4oInB1dEZvcndhcmRzQXR0cmlidXRlIiksIHN0cmxlbigicHV0Rm9yd2FyZHNBdHRyaWJ1dGUi
KSk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBWTSYgdm0gPSB0aHJvd1Njb3BlLnZt
KCk7CisgICAgYXV0byBpZCA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgTENoYXIqPigicHV0Rm9yd2FyZHNBdHRyaWJ1dGUiKSwgc3RybGVuKCJwdXRG
b3J3YXJkc0F0dHJpYnV0ZSIpKTsKICAgICBhdXRvIHZhbHVlVG9Gb3J3YXJkVG8gPSB0aGlzT2Jq
ZWN0LmdldCgmc3RhdGUsIGlkKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IGZhbHNlKTsKICAgICBpZiAoVU5MSUtFTFkoIXZhbHVlVG9Gb3J3YXJkVG8uaXNPYmplY3QoKSkp
IHsKICAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCB0aHJvd1Njb3BlKTsKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICBhdXRvIGZvcndhcmRJZCA9IElkZW50aWZpZXI6OmZy
b21TdHJpbmcoJnN0YXRlLnZtKCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigibmFt
ZSIpLCBzdHJsZW4oIm5hbWUiKSk7CisgICAgYXV0byBmb3J3YXJkSWQgPSBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIm5hbWUiKSwgc3Ry
bGVuKCJuYW1lIikpOwogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KHZhbHVlVG9Gb3J3YXJkVG8s
IGZhbHNlKTsKLSAgICBhc09iamVjdCh2YWx1ZVRvRm9yd2FyZFRvKS0+bWV0aG9kVGFibGUoc3Rh
dGUudm0oKSktPnB1dChhc09iamVjdCh2YWx1ZVRvRm9yd2FyZFRvKSwgJnN0YXRlLCBmb3J3YXJk
SWQsIHZhbHVlLCBzbG90KTsKKyAgICBhc09iamVjdCh2YWx1ZVRvRm9yd2FyZFRvKS0+bWV0aG9k
VGFibGUodm0pLT5wdXQoYXNPYmplY3QodmFsdWVUb0ZvcndhcmRUbyksICZzdGF0ZSwgZm9yd2Fy
ZElkLCB2YWx1ZSwgc2xvdCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBm
YWxzZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC01MTYyLDE3ICs1MjM0LDE4IEBAIEVuY29k
ZWRKU1ZhbHVlIGpzVGVzdE9ialB1dEZvcndhcmRzTnVsbGEKIAogc3RhdGljIGlubGluZSBib29s
IHNldEpTVGVzdE9ialB1dEZvcndhcmRzTnVsbGFibGVBdHRyaWJ1dGVTZXR0ZXIoRXhlY1N0YXRl
JiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBhdXRv
IGlkID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUudm0oKSwgcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBMQ2hhcio+KCJwdXRGb3J3YXJkc051bGxhYmxlQXR0cmlidXRlIiksIHN0cmxlbigi
cHV0Rm9yd2FyZHNOdWxsYWJsZUF0dHJpYnV0ZSIpKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUp
OworICAgIFZNJiB2bSA9IHRocm93U2NvcGUudm0oKTsKKyAgICBhdXRvIGlkID0gSWRlbnRpZmll
cjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJwdXRGb3J3
YXJkc051bGxhYmxlQXR0cmlidXRlIiksIHN0cmxlbigicHV0Rm9yd2FyZHNOdWxsYWJsZUF0dHJp
YnV0ZSIpKTsKICAgICBhdXRvIHZhbHVlVG9Gb3J3YXJkVG8gPSB0aGlzT2JqZWN0LmdldCgmc3Rh
dGUsIGlkKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKICAg
ICBpZiAoVU5MSUtFTFkoIXZhbHVlVG9Gb3J3YXJkVG8uaXNPYmplY3QoKSkpIHsKICAgICAgICAg
dGhyb3dUeXBlRXJyb3IoJnN0YXRlLCB0aHJvd1Njb3BlKTsKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIH0KLSAgICBhdXRvIGZvcndhcmRJZCA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0
YXRlLnZtKCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigibmFtZSIpLCBzdHJsZW4o
Im5hbWUiKSk7CisgICAgYXV0byBmb3J3YXJkSWQgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZt
LCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIm5hbWUiKSwgc3RybGVuKCJuYW1lIikp
OwogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KHZhbHVlVG9Gb3J3YXJkVG8sIGZhbHNlKTsKLSAg
ICBhc09iamVjdCh2YWx1ZVRvRm9yd2FyZFRvKS0+bWV0aG9kVGFibGUoc3RhdGUudm0oKSktPnB1
dChhc09iamVjdCh2YWx1ZVRvRm9yd2FyZFRvKSwgJnN0YXRlLCBmb3J3YXJkSWQsIHZhbHVlLCBz
bG90KTsKKyAgICBhc09iamVjdCh2YWx1ZVRvRm9yd2FyZFRvKS0+bWV0aG9kVGFibGUodm0pLT5w
dXQoYXNPYmplY3QodmFsdWVUb0ZvcndhcmRUbyksICZzdGF0ZSwgZm9yd2FyZElkLCB2YWx1ZSwg
c2xvdCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CiAgICAg
cmV0dXJuIHRydWU7CiB9CkBAIC01MTk4LDYgKzUyNzEsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpTdHJpbmdpZmllckF0dHJpCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpT
dHJpbmdpZmllckF0dHJpYnV0ZVNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRo
aXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CisgICAg
VU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAg
YXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUg
PSBjb252ZXJ0PElETFVTVlN0cmluZz4oc3RhdGUsIHZhbHVlKTsKQEAgLTUyMzAsNiArNTMwNCw3
IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbmFsbHlSZWEKICNpZiBFTkFCTEUo
Q09ORElUSU9OKQogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakNvbmRpdGlvbmFsbHlS
ZWFkV3JpdGVBdHRyaWJ1dGVTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlz
T2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogeworICAgIFVO
VVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1
dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0g
Y29udmVydDxJRExJbnRlcmZhY2U8Tm9kZT4+KHN0YXRlLCB2YWx1ZSwgW10oSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXR0cmlidXRlVHlwZUVy
cm9yKHN0YXRlLCBzY29wZSwgIlRlc3RPYmplY3QiLCAiY29uZGl0aW9uYWxseVJlYWRXcml0ZUF0
dHJpYnV0ZSIsICJOb2RlIik7IH0pOwpAQCAtNTI2OCw2ICs1MzQzLDcgQEAgRW5jb2RlZEpTVmFs
dWUganNUZXN0T2JqQ29uZGl0aW9uYWxBbmRDbwogI2lmIEVOQUJMRShDT05ESVRJT04pCiBzdGF0
aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBbmRDb25kaXRpb25hbGx5UmVh
ZFdyaXRlQXR0cmlidXRlU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09i
amVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKKyAgICBVTlVT
RURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRv
JiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNv
bnZlcnQ8SURMSW50ZXJmYWNlPE5vZGU+PihzdGF0ZSwgdmFsdWUsIFtdKEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0F0dHJpYnV0ZVR5cGVFcnJv
cihzdGF0ZSwgc2NvcGUsICJUZXN0T2JqZWN0IiwgImNvbmRpdGlvbmFsQW5kQ29uZGl0aW9uYWxs
eVJlYWRXcml0ZUF0dHJpYnV0ZSIsICJOb2RlIik7IH0pOwpAQCAtNTMwMyw2ICs1Mzc5LDcgQEAg
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxseUV4cAogCiBzdGF0aWMgaW5saW5l
IGJvb2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxseUV4cG9zZWRUb1dpbmRvd0F0dHJpYnV0ZVNl
dHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFs
dWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsK
ICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmpl
Y3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETExvbmc+KHN0
YXRlLCB2YWx1ZSk7CkBAIC01MzM0LDYgKzU0MTEsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpDb25kaXRpb25hbGx5RXhwCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpDb25k
aXRpb25hbGx5RXhwb3NlZFRvV29ya2VyQXR0cmlidXRlU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUs
IEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dT
Y29wZSkKIHsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0
byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMTG9uZz4oc3RhdGUsIHZhbHVlKTsKQEAgLTUzNjUs
NiArNTQ0Myw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbmFsbHlFeHAKIAog
c3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakNvbmRpdGlvbmFsbHlFeHBvc2VkVG9XaW5k
b3dBbmRXb3JrZXJBdHRyaWJ1dGVTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0
aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogeworICAg
IFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAg
IGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVl
ID0gY29udmVydDxJRExMb25nPihzdGF0ZSwgdmFsdWUpOwpAQCAtODU0OCwxOSArODYyNywxOSBA
QCBKU0M6OkpTT2JqZWN0KiBKU1Rlc3RPYmo6OnNlcmlhbGl6ZShFeGVjCiAKICAgICBhdXRvIGNy
ZWF0ZVZhbHVlID0ganNUZXN0T2JqQ3JlYXRlR2V0dGVyKHN0YXRlLCB0aGlzT2JqZWN0LCB0aHJv
d1Njb3BlKTsKICAgICB0aHJvd1Njb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7Ci0gICAgcmVzdWx0
LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiY3JlYXRlIiksIGNy
ZWF0ZVZhbHVlKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZyh2bSwgImNyZWF0ZSIpLCBjcmVhdGVWYWx1ZSk7CiAKICAgICBhdXRvIHJlYWRPbmx5U3Ry
aW5nQXR0clZhbHVlID0ganNUZXN0T2JqUmVhZE9ubHlTdHJpbmdBdHRyR2V0dGVyKHN0YXRlLCB0
aGlzT2JqZWN0LCB0aHJvd1Njb3BlKTsKICAgICB0aHJvd1Njb3BlLmFzc2VydE5vRXhjZXB0aW9u
KCk7Ci0gICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZt
LCAicmVhZE9ubHlTdHJpbmdBdHRyIiksIHJlYWRPbmx5U3RyaW5nQXR0clZhbHVlKTsKKyAgICBy
ZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInJlYWRPbmx5
U3RyaW5nQXR0ciIpLCByZWFkT25seVN0cmluZ0F0dHJWYWx1ZSk7CiAKICAgICBhdXRvIGVudW1B
dHRyVmFsdWUgPSBqc1Rlc3RPYmpFbnVtQXR0ckdldHRlcihzdGF0ZSwgdGhpc09iamVjdCwgdGhy
b3dTY29wZSk7CiAgICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwotICAgIHJlc3Vs
dC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImVudW1BdHRyIiks
IGVudW1BdHRyVmFsdWUpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCAiZW51bUF0dHIiKSwgZW51bUF0dHJWYWx1ZSk7CiAKICAgICBhdXRvIGxv
bmdBdHRyVmFsdWUgPSBqc1Rlc3RPYmpMb25nQXR0ckdldHRlcihzdGF0ZSwgdGhpc09iamVjdCwg
dGhyb3dTY29wZSk7CiAgICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwotICAgIHJl
c3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImxvbmdBdHRy
IiksIGxvbmdBdHRyVmFsdWUpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKHZtLCAibG9uZ0F0dHIiKSwgbG9uZ0F0dHJWYWx1ZSk7CiAKICAgICByZXR1
cm4gcmVzdWx0OwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVybG9hZGVkQ29uc3Ry
dWN0b3JzLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNzMsNyArMTczLDcgQEAgdGVtcGxhdGU8PiBKU1ZhbHVlIEpTVGVzdE92ZXJs
b2FkZWRDb25zdAogdGVtcGxhdGU8PiB2b2lkIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnND
b25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMoVk0mIHZtLCBKU0RPTUdsb2JhbE9iamVj
dCYgZ2xvYmFsT2JqZWN0KQogewogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+
cHJvdG90eXBlLCBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzOjpwcm90b3R5cGUodm0sIGds
b2JhbE9iamVjdCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUgfCBKU0M6OlBy
b3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRF
bnVtKTsKLSAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJp
dmlhbFN0cmluZygmdm0sIFN0cmluZygiVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMiX3MpKSwg
SlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRl
OjpEb250RW51bSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBq
c05vbnRyaXZpYWxTdHJpbmcodm0sIFN0cmluZygiVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMi
X3MpKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0
cmlidXRlOjpEb250RW51bSk7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5s
ZW5ndGgsIGpzTnVtYmVyKDApLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpT
Qzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNX
aXRoU2VxdWVuY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlLmNw
cAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMjksNyArMTI5LDcgQEAgdGVtcGxhdGU8PiBKU1ZhbHVlIEpTVGVzdE92
ZXJsb2FkZWRDb25zdAogdGVtcGxhdGU8PiB2b2lkIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3Rv
cnNXaXRoU2VxdWVuY2VDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMoVk0mIHZtLCBK
U0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQogewogICAgIHB1dERpcmVjdCh2bSwgdm0u
cHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0
aFNlcXVlbmNlOjpwcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCksIEpTQzo6UHJvcGVydHlBdHRy
aWJ1dGU6OkRvbnREZWxldGUgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpT
Qzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKLSAgICBwdXREaXJlY3Qodm0sIHZtLnBy
b3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZygmdm0sIFN0cmluZygiVGVzdE92
ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2UiX3MpKSwgSlNDOjpQcm9wZXJ0eUF0dHJp
YnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CisgICAg
cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmco
dm0sIFN0cmluZygiVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2UiX3MpKSwg
SlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRl
OjpEb250RW51bSk7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgs
IGpzTnVtYmVyKDApLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJv
cGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJyaWRlQnVpbHRpbnMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVy
cmlkZUJ1aWx0aW5zLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJyaWRlQnVpbHRpbnMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC04OCw3ICs4OCw3IEBAIHRlbXBsYXRlPD4gSlNWYWx1ZSBKU1Rlc3RPdmVycmlk
ZUJ1aWx0aW4KIHRlbXBsYXRlPD4gdm9pZCBKU1Rlc3RPdmVycmlkZUJ1aWx0aW5zQ29uc3RydWN0
b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2Jh
bE9iamVjdCkKIHsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlw
ZSwgSlNUZXN0T3ZlcnJpZGVCdWlsdGluczo6cHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QpLCBK
U0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0
ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7Ci0gICAgcHV0
RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcoJnZt
LCBTdHJpbmcoIlRlc3RPdmVycmlkZUJ1aWx0aW5zIl9zKSksIEpTQzo6UHJvcGVydHlBdHRyaWJ1
dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOworICAgIHB1
dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKHZt
LCBTdHJpbmcoIlRlc3RPdmVycmlkZUJ1aWx0aW5zIl9zKSksIEpTQzo6UHJvcGVydHlBdHRyaWJ1
dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwogICAgIHB1
dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigwKSwgSlNDOjpQ
cm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250
RW51bSk7CiB9CiAKQEAgLTE2Niw5ICsxNjYsMTAgQEAgYm9vbCBKU1Rlc3RPdmVycmlkZUJ1aWx0
aW5zOjpnZXRPd25Qcm9wZQogCiBib29sIEpTVGVzdE92ZXJyaWRlQnVpbHRpbnM6OmdldE93blBy
b3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBzdGF0ZSwgdW5z
aWduZWQgaW5kZXgsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKKyAgICBWTSYgdm0gPSBzdGF0ZS0+
dm0oKTsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE92ZXJyaWRlQnVpbHRp
bnMqPihvYmplY3QpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwg
aW5mbygpKTsKLSAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb20oc3RhdGUs
IGluZGV4KTsKKyAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb20odm0sIGlu
ZGV4KTsKICAgICB1c2luZyBHZXR0ZXJJRExUeXBlID0gSURMSW50ZXJmYWNlPE5vZGU+OwogICAg
IGF1dG8gZ2V0dGVyRnVuY3RvciA9IFtdIChhdXRvJiB0aGlzT2JqZWN0LCBhdXRvIHByb3BlcnR5
TmFtZSkgLT4gT3B0aW9uYWw8dHlwZW5hbWUgR2V0dGVySURMVHlwZTo6SW1wbGVtZW50YXRpb25U
eXBlPiB7CiAgICAgICAgIGF1dG8gcmVzdWx0ID0gdGhpc09iamVjdC53cmFwcGVkKCkubmFtZWRJ
dGVtKHByb3BlcnR5TmFtZVRvQXRvbVN0cmluZyhwcm9wZXJ0eU5hbWUpKTsKQEAgLTE4NiwxMCAr
MTg3LDExIEBAIGJvb2wgSlNUZXN0T3ZlcnJpZGVCdWlsdGluczo6Z2V0T3duUHJvcGUKIAogdm9p
ZCBKU1Rlc3RPdmVycmlkZUJ1aWx0aW5zOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBv
YmplY3QsIEV4ZWNTdGF0ZSogc3RhdGUsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVz
LCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKKyAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAg
ICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE92ZXJyaWRlQnVpbHRpbnMqPihvYmpl
Y3QpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMob2JqZWN0LCBpbmZvKCkpOwogICAg
IGZvciAoYXV0byYgcHJvcGVydHlOYW1lIDogdGhpc09iamVjdC0+d3JhcHBlZCgpLnN1cHBvcnRl
ZFByb3BlcnR5TmFtZXMoKSkKLSAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6
ZnJvbVN0cmluZyhzdGF0ZSwgcHJvcGVydHlOYW1lKSk7CisgICAgICAgIHByb3BlcnR5TmFtZXMu
YWRkKElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHByb3BlcnR5TmFtZSkpOwogICAgIEpTT2Jq
ZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgc3RhdGUsIHByb3BlcnR5TmFtZXMsIG1v
ZGUpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0UGx1Z2luSW50ZXJmYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0UGx1Z2luSW50ZXJmYWNlLmNwcAkocmV2aXNp
b24gMjQ5MTI4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdFBsdWdpbkludGVyZmFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc5LDcgKzc5LDcgQEAg
dGVtcGxhdGU8PiBKU1ZhbHVlIEpTVGVzdFBsdWdpbkludGVyZmFjZQogdGVtcGxhdGU8PiB2b2lk
IEpTVGVzdFBsdWdpbkludGVyZmFjZUNvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGllcyhW
TSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCiB7CiAgICAgcHV0RGlyZWN0
KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdFBsdWdpbkludGVyZmFjZTo6
cHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250
RGVsZXRlIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5
QXR0cmlidXRlOjpEb250RW51bSk7Ci0gICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVz
LT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcoJnZtLCBTdHJpbmcoIlRlc3RQbHVnaW5JbnRlcmZh
Y2UiX3MpKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5
QXR0cmlidXRlOjpEb250RW51bSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVz
LT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcodm0sIFN0cmluZygiVGVzdFBsdWdpbkludGVyZmFj
ZSJfcykpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlB
dHRyaWJ1dGU6OkRvbnRFbnVtKTsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMt
Pmxlbmd0aCwganNOdW1iZXIoMCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwg
SlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwogfQogCkBAIC0xNDYsOSArMTQ2LDEw
IEBAIGJvb2wgSlNUZXN0UGx1Z2luSW50ZXJmYWNlOjpnZXRPd25Qcm9wZXIKIAogYm9vbCBKU1Rl
c3RQbHVnaW5JbnRlcmZhY2U6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmplY3QqIG9i
amVjdCwgRXhlY1N0YXRlKiBzdGF0ZSwgdW5zaWduZWQgaW5kZXgsIFByb3BlcnR5U2xvdCYgc2xv
dCkKIHsKKyAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0g
anNDYXN0PEpTVGVzdFBsdWdpbkludGVyZmFjZSo+KG9iamVjdCk7CiAgICAgQVNTRVJUX0dDX09C
SkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwotICAgIGF1dG8gcHJvcGVydHlOYW1l
ID0gSWRlbnRpZmllcjo6ZnJvbShzdGF0ZSwgaW5kZXgpOworICAgIGF1dG8gcHJvcGVydHlOYW1l
ID0gSWRlbnRpZmllcjo6ZnJvbSh2bSwgaW5kZXgpOwogICAgIGlmIChwbHVnaW5FbGVtZW50Q3Vz
dG9tR2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIHN0YXRlLCBwcm9wZXJ0eU5hbWUsIHNs
b3QpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICByZXR1cm4gSlNPYmplY3Q6OmdldE93blBy
b3BlcnR5U2xvdEJ5SW5kZXgob2JqZWN0LCBzdGF0ZSwgaW5kZXgsIHNsb3QpOwpAQCAtMTY4LDEw
ICsxNjksMTEgQEAgYm9vbCBKU1Rlc3RQbHVnaW5JbnRlcmZhY2U6OnB1dChKU0NlbGwqIAogCiBi
b29sIEpTVGVzdFBsdWdpbkludGVyZmFjZTo6cHV0QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNT
dGF0ZSogc3RhdGUsIHVuc2lnbmVkIGluZGV4LCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRo
cm93KQogeworICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8qIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8SlNUZXN0UGx1Z2luSW50ZXJmYWNlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09C
SkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogCi0gICAgYXV0byBwcm9wZXJ0eU5h
bWUgPSBJZGVudGlmaWVyOjpmcm9tKHN0YXRlLCBpbmRleCk7CisgICAgYXV0byBwcm9wZXJ0eU5h
bWUgPSBJZGVudGlmaWVyOjpmcm9tKHZtLCBpbmRleCk7CiAgICAgUHV0UHJvcGVydHlTbG90IHB1
dFByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBzaG91bGRUaHJvdyk7CiAgICAgYm9vbCBwdXRSZXN1
bHQgPSBmYWxzZTsKICAgICBpZiAocGx1Z2luRWxlbWVudEN1c3RvbVB1dCh0aGlzT2JqZWN0LCBz
dGF0ZSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgcHV0UHJvcGVydHlTbG90LCBwdXRSZXN1bHQpKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFByb21p
c2VSZWplY3Rpb25FdmVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFByb21pc2VSZWplY3Rpb25FdmVudC5jcHAJKHJldmlz
aW9uIDI0OTEyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1
OSw3IEBAIHRlbXBsYXRlPD4gVGVzdFByb21pc2VSZWplY3Rpb25FdmVudDo6SW4KICAgICBpZiAo
aXNOdWxsT3JVbmRlZmluZWQpCiAgICAgICAgIGJ1YmJsZXNWYWx1ZSA9IGpzVW5kZWZpbmVkKCk7
CiAgICAgZWxzZSB7Ci0gICAgICAgIGJ1YmJsZXNWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJidWJibGVzIikpOworICAgICAgICBidWJi
bGVzVmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0s
ICJidWJibGVzIikpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsg
fSk7CiAgICAgfQogICAgIGlmICghYnViYmxlc1ZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKQEAgLTcx
LDcgKzcxLDcgQEAgdGVtcGxhdGU8PiBUZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50OjpJbgogICAg
IGlmIChpc051bGxPclVuZGVmaW5lZCkKICAgICAgICAgY2FuY2VsYWJsZVZhbHVlID0ganNVbmRl
ZmluZWQoKTsKICAgICBlbHNlIHsKLSAgICAgICAgY2FuY2VsYWJsZVZhbHVlID0gb2JqZWN0LT5n
ZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImNhbmNlbGFibGUiKSk7
CisgICAgICAgIGNhbmNlbGFibGVWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZyh2bSwgImNhbmNlbGFibGUiKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICB9CiAgICAgaWYgKCFjYW5jZWxhYmxlVmFsdWUu
aXNVbmRlZmluZWQoKSkgewpAQCAtODMsNyArODMsNyBAQCB0ZW1wbGF0ZTw+IFRlc3RQcm9taXNl
UmVqZWN0aW9uRXZlbnQ6OkluCiAgICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKQogICAgICAgICBj
b21wb3NlZFZhbHVlID0ganNVbmRlZmluZWQoKTsKICAgICBlbHNlIHsKLSAgICAgICAgY29tcG9z
ZWRWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3Rh
dGUsICJjb21wb3NlZCIpKTsKKyAgICAgICAgY29tcG9zZWRWYWx1ZSA9IG9iamVjdC0+Z2V0KCZz
dGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImNvbXBvc2VkIikpOwogICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgfQogICAgIGlmICghY29t
cG9zZWRWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7CkBAIC05NSw3ICs5NSw3IEBAIHRlbXBsYXRlPD4g
VGVzdFByb21pc2VSZWplY3Rpb25FdmVudDo6SW4KICAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQp
CiAgICAgICAgIHByb21pc2VWYWx1ZSA9IGpzVW5kZWZpbmVkKCk7CiAgICAgZWxzZSB7Ci0gICAg
ICAgIHByb21pc2VWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZygmc3RhdGUsICJwcm9taXNlIikpOworICAgICAgICBwcm9taXNlVmFsdWUgPSBvYmplY3Qt
PmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJwcm9taXNlIikpOwogICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgfQogICAgIGlm
ICghcHJvbWlzZVZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKQEAgLTEwOSw3ICsxMDksNyBAQCB0ZW1w
bGF0ZTw+IFRlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnQ6OkluCiAgICAgaWYgKGlzTnVsbE9yVW5k
ZWZpbmVkKQogICAgICAgICByZWFzb25WYWx1ZSA9IGpzVW5kZWZpbmVkKCk7CiAgICAgZWxzZSB7
Ci0gICAgICAgIHJlYXNvblZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKCZzdGF0ZSwgInJlYXNvbiIpKTsKKyAgICAgICAgcmVhc29uVmFsdWUgPSBvYmpl
Y3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJyZWFzb24iKSk7CiAg
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICB9CiAgICAg
aWYgKCFyZWFzb25WYWx1ZS5pc1VuZGVmaW5lZCgpKSB7CkBAIC0xODAsNyArMTgwLDcgQEAgdGVt
cGxhdGU8PiBKU1ZhbHVlIEpTVGVzdFByb21pc2VSZWplY3RpbwogdGVtcGxhdGU8PiB2b2lkIEpT
VGVzdFByb21pc2VSZWplY3Rpb25FdmVudENvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGll
cyhWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCiB7CiAgICAgcHV0RGly
ZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdFByb21pc2VSZWplY3Rp
b25FdmVudDo6cHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QpLCBKU0M6OlByb3BlcnR5QXR0cmli
dXRlOjpEb250RGVsZXRlIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6
OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7Ci0gICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9w
ZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcoJnZtLCBTdHJpbmcoIlRlc3RQcm9t
aXNlUmVqZWN0aW9uRXZlbnQiX3MpKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkg
fCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CisgICAgcHV0RGlyZWN0KHZtLCB2
bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcodm0sIFN0cmluZygiVGVz
dFByb21pc2VSZWplY3Rpb25FdmVudCJfcykpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFk
T25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKICAgICBwdXREaXJlY3Qo
dm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMiksIEpTQzo6UHJvcGVydHlB
dHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwog
fQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
U2VyaWFsaXphdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb24uY3BwCShyZXZpc2lvbiAyNDkxMjgp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFs
aXphdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMCw3ICsxMjAsNyBAQCB0ZW1wbGF0ZTw+
IEpTVmFsdWUgSlNUZXN0U2VyaWFsaXphdGlvbkNvCiB0ZW1wbGF0ZTw+IHZvaWQgSlNUZXN0U2Vy
aWFsaXphdGlvbkNvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGllcyhWTSYgdm0sIEpTRE9N
R2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCiB7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9w
ZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdFNlcmlhbGl6YXRpb246OnByb3RvdHlwZSh2bSwg
Z2xvYmFsT2JqZWN0KSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IEpTQzo6
UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9u
dEVudW0pOwotICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250
cml2aWFsU3RyaW5nKCZ2bSwgU3RyaW5nKCJUZXN0U2VyaWFsaXphdGlvbiJfcykpLCBKU0M6OlBy
b3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRF
bnVtKTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJp
dmlhbFN0cmluZyh2bSwgU3RyaW5nKCJUZXN0U2VyaWFsaXphdGlvbiJfcykpLCBKU0M6OlByb3Bl
cnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVt
KTsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIo
MCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJp
YnV0ZTo6RG9udEVudW0pOwogfQogCkBAIC0yMzgsNiArMjM4LDcgQEAgRW5jb2RlZEpTVmFsdWUg
anNUZXN0U2VyaWFsaXphdGlvbkZpcnN0UwogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0
U2VyaWFsaXphdGlvbkZpcnN0U3RyaW5nQXR0cmlidXRlU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUs
IEpTVGVzdFNlcmlhbGl6YXRpb24mIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2Nv
cGUmIHRocm93U2NvcGUpCiB7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgp
OwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oc3RhdGUsIHZh
bHVlKTsKQEAgLTI2OSw2ICsyNzAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0
aW9uU2Vjb25kCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uU2Vj
b25kTG9uZ0F0dHJpYnV0ZVNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RTZXJpYWxpemF0
aW9uJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQog
eworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2
ZVZhbHVlID0gY29udmVydDxJRExMb25nPihzdGF0ZSwgdmFsdWUpOwpAQCAtMzAwLDYgKzMwMiw3
IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25UaGlyZFUKIAogc3RhdGljIGlu
bGluZSBib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25UaGlyZFVuc2VyaWFsaXphYmxlQXR0cmli
dXRlU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdFNlcmlhbGl6YXRpb24mIHRoaXNPYmpl
Y3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CisgICAgVU5VU0VE
X1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYg
aW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252
ZXJ0PElETEludGVyZmFjZTxUZXN0RXhjZXB0aW9uPj4oc3RhdGUsIHZhbHVlLCBbXShKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBdHRyaWJ1dGVU
eXBlRXJyb3Ioc3RhdGUsIHNjb3BlLCAiVGVzdFNlcmlhbGl6YXRpb24iLCAidGhpcmRVbnNlcmlh
bGl6YWJsZUF0dHJpYnV0ZSIsICJUZXN0RXhjZXB0aW9uIik7IH0pOwpAQCAtMzMxLDYgKzMzNCw3
IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25Gb3VydGgKIAogc3RhdGljIGlu
bGluZSBib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25Gb3VydGhVbnJlc3RyaWN0ZWREb3VibGVB
dHRyaWJ1dGVTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0U2VyaWFsaXphdGlvbiYgdGhp
c09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKKyAgICBV
TlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBh
dXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9
IGNvbnZlcnQ8SURMVW5yZXN0cmljdGVkRG91YmxlPihzdGF0ZSwgdmFsdWUpOwpAQCAtMzYyLDYg
KzM2Niw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25GaWZ0aEwKIAogc3Rh
dGljIGlubGluZSBib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25GaWZ0aExvbmdBdHRyaWJ1dGVT
ZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0U2VyaWFsaXphdGlvbiYgdGhpc09iamVjdCwg
SlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKKyAgICBVTlVTRURfUEFS
QU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBs
ID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8
SURMTG9uZz4oc3RhdGUsIHZhbHVlKTsKQEAgLTM5Myw2ICszOTgsNyBAQCBFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RTZXJpYWxpemF0aW9uU2l4dGhUCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rl
c3RTZXJpYWxpemF0aW9uU2l4dGhUeXBlZGVmQXR0cmlidXRlU2V0dGVyKEV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTVGVzdFNlcmlhbGl6YXRpb24mIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93
U2NvcGUmIHRocm93U2NvcGUpCiB7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBl
ZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERvdWJsZT4oc3RhdGUsIHZh
bHVlKTsKQEAgLTQyNCw2ICs0MzAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0
aW9uU2V2ZW50CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uU2V2
ZW50aERpcmVjdGx5U2VyaWFsaXphYmxlQXR0cmlidXRlU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUs
IEpTVGVzdFNlcmlhbGl6YXRpb24mIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2Nv
cGUmIHRocm93U2NvcGUpCiB7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgp
OwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETEludGVyZmFjZTxUZXN0U2VyaWFs
aXphdGlvbkluaGVyaXRGaW5hbD4+KHN0YXRlLCB2YWx1ZSwgW10oSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXR0cmlidXRlVHlwZUVycm9yKHN0
YXRlLCBzY29wZSwgIlRlc3RTZXJpYWxpemF0aW9uIiwgInNldmVudGhEaXJlY3RseVNlcmlhbGl6
YWJsZUF0dHJpYnV0ZSIsICJUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbCIpOyB9KTsKQEAg
LTQ1NSw2ICs0NjIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uRWlnaHRo
CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uRWlnaHRoSW5kaXJl
Y3RseUF0dHJpYnV0ZVNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RTZXJpYWxpemF0aW9u
JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewor
ICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwog
ICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZh
bHVlID0gY29udmVydDxJRExJbnRlcmZhY2U8VGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVy
aXRhbmNlPj4oc3RhdGUsIHZhbHVlLCBbXShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhy
b3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBdHRyaWJ1dGVUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlLCAi
VGVzdFNlcmlhbGl6YXRpb24iLCAiZWlnaHRoSW5kaXJlY3RseUF0dHJpYnV0ZSIsICJUZXN0U2Vy
aWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2UiKTsgfSk7CkBAIC00ODYsNiArNDk0LDcgQEAg
RW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvbk5pbnRoTwogCiBzdGF0aWMgaW5saW5l
IGJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvbk5pbnRoT3B0aW9uYWxEaXJlY3RseVNlcmlhbGl6
YWJsZUF0dHJpYnV0ZVNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RTZXJpYWxpemF0aW9u
JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewor
ICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwog
ICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZh
bHVlID0gY29udmVydDxJRExOdWxsYWJsZTxJRExJbnRlcmZhY2U8VGVzdFNlcmlhbGl6YXRpb25J
bmhlcml0RmluYWw+Pj4oc3RhdGUsIHZhbHVlLCBbXShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBdHRyaWJ1dGVUeXBlRXJyb3Ioc3RhdGUsIHNj
b3BlLCAiVGVzdFNlcmlhbGl6YXRpb24iLCAibmludGhPcHRpb25hbERpcmVjdGx5U2VyaWFsaXph
YmxlQXR0cmlidXRlIiwgIlRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsIik7IH0pOwpAQCAt
NTE3LDYgKzUyNiw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25UZW50aEYK
IAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25UZW50aEZyb3plbkFy
cmF5QXR0cmlidXRlU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdFNlcmlhbGl6YXRpb24m
IHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Cisg
ICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAg
ICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFs
dWUgPSBjb252ZXJ0PElETEZyb3plbkFycmF5PElETEJvb2xlYW4+PihzdGF0ZSwgdmFsdWUpOwpA
QCAtNTQ4LDYgKzU1OCw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25FbGV2
ZW4KIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25FbGV2ZW50aFNl
cXVlbmNlQXR0cmlidXRlU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdFNlcmlhbGl6YXRp
b24mIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7
CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7
CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZl
VmFsdWUgPSBjb252ZXJ0PElETFNlcXVlbmNlPElETERPTVN0cmluZz4+KHN0YXRlLCB2YWx1ZSk7
CkBAIC01NzksNiArNTkwLDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvblR3
ZWxmdAogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvblR3ZWxmdGhJ
bnRlcmZhY2VTZXF1ZW5jZUF0dHJpYnV0ZVNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RT
ZXJpYWxpemF0aW9uJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQogeworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBh
dXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExTZXF1ZW5jZTxJRExJbnRlcmZhY2U8VGVzdFNl
cmlhbGl6YXRpb25Jbmhlcml0RmluYWw+Pj4oc3RhdGUsIHZhbHVlKTsKQEAgLTYwMSw0OSArNjEz
LDQ5IEBAIEpTQzo6SlNPYmplY3QqIEpTVGVzdFNlcmlhbGl6YXRpb246OnNlcmkKIAogICAgIGF1
dG8gZmlyc3RTdHJpbmdBdHRyaWJ1dGVWYWx1ZSA9IGpzVGVzdFNlcmlhbGl6YXRpb25GaXJzdFN0
cmluZ0F0dHJpYnV0ZUdldHRlcihzdGF0ZSwgdGhpc09iamVjdCwgdGhyb3dTY29wZSk7CiAgICAg
dGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZt
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImZpcnN0U3RyaW5nQXR0cmlidXRlIiksIGZp
cnN0U3RyaW5nQXR0cmlidXRlVmFsdWUpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiZmlyc3RTdHJpbmdBdHRyaWJ1dGUiKSwgZmlyc3RTdHJp
bmdBdHRyaWJ1dGVWYWx1ZSk7CiAKICAgICBhdXRvIHNlY29uZExvbmdBdHRyaWJ1dGVWYWx1ZSA9
IGpzVGVzdFNlcmlhbGl6YXRpb25TZWNvbmRMb25nQXR0cmlidXRlR2V0dGVyKHN0YXRlLCB0aGlz
T2JqZWN0LCB0aHJvd1Njb3BlKTsKICAgICB0aHJvd1Njb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7
Ci0gICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAi
c2Vjb25kTG9uZ0F0dHJpYnV0ZSIpLCBzZWNvbmRMb25nQXR0cmlidXRlVmFsdWUpOworICAgIHJl
c3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAic2Vjb25kTG9u
Z0F0dHJpYnV0ZSIpLCBzZWNvbmRMb25nQXR0cmlidXRlVmFsdWUpOwogCiAgICAgYXV0byBmb3Vy
dGhVbnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGVWYWx1ZSA9IGpzVGVzdFNlcmlhbGl6YXRpb25G
b3VydGhVbnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGVHZXR0ZXIoc3RhdGUsIHRoaXNPYmplY3Qs
IHRocm93U2NvcGUpOwogICAgIHRocm93U2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKLSAgICBy
ZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJmb3VydGhV
bnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGUiKSwgZm91cnRoVW5yZXN0cmljdGVkRG91YmxlQXR0
cmlidXRlVmFsdWUpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKHZtLCAiZm91cnRoVW5yZXN0cmljdGVkRG91YmxlQXR0cmlidXRlIiksIGZvdXJ0aFVu
cmVzdHJpY3RlZERvdWJsZUF0dHJpYnV0ZVZhbHVlKTsKIAogICAgIGF1dG8gZmlmdGhMb25nQXR0
cmlidXRlVmFsdWUgPSBqc1Rlc3RTZXJpYWxpemF0aW9uRmlmdGhMb25nQXR0cmlidXRlR2V0dGVy
KHN0YXRlLCB0aGlzT2JqZWN0LCB0aHJvd1Njb3BlKTsKICAgICB0aHJvd1Njb3BlLmFzc2VydE5v
RXhjZXB0aW9uKCk7Ci0gICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21T
dHJpbmcoJnZtLCAiZmlmdGhMb25nQXR0cmlidXRlIiksIGZpZnRoTG9uZ0F0dHJpYnV0ZVZhbHVl
KTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwg
ImZpZnRoTG9uZ0F0dHJpYnV0ZSIpLCBmaWZ0aExvbmdBdHRyaWJ1dGVWYWx1ZSk7CiAKICAgICBh
dXRvIHNpeHRoVHlwZWRlZkF0dHJpYnV0ZVZhbHVlID0ganNUZXN0U2VyaWFsaXphdGlvblNpeHRo
VHlwZWRlZkF0dHJpYnV0ZUdldHRlcihzdGF0ZSwgdGhpc09iamVjdCwgdGhyb3dTY29wZSk7CiAg
ICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0
KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgInNpeHRoVHlwZWRlZkF0dHJpYnV0ZSIp
LCBzaXh0aFR5cGVkZWZBdHRyaWJ1dGVWYWx1ZSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0s
IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJzaXh0aFR5cGVkZWZBdHRyaWJ1dGUiKSwgc2l4
dGhUeXBlZGVmQXR0cmlidXRlVmFsdWUpOwogCiAgICAgYXV0byBzZXZlbnRoRGlyZWN0bHlTZXJp
YWxpemFibGVBdHRyaWJ1dGVWYWx1ZSA9IGpzVGVzdFNlcmlhbGl6YXRpb25TZXZlbnRoRGlyZWN0
bHlTZXJpYWxpemFibGVBdHRyaWJ1dGVHZXR0ZXIoc3RhdGUsIHRoaXNPYmplY3QsIHRocm93U2Nv
cGUpOwogICAgIHRocm93U2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKICAgICBhdXRvKiBzZXZl
bnRoRGlyZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGVTZXJpYWxpemVkVmFsdWUgPSBKU1Rlc3RT
ZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsOjpzZXJpYWxpemUoc3RhdGUsICpqc0Nhc3Q8SlNUZXN0
U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbCo+KHNldmVudGhEaXJlY3RseVNlcmlhbGl6YWJsZUF0
dHJpYnV0ZVZhbHVlKSwgZ2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlKTsKLSAgICByZXN1bHQtPnB1
dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJzZXZlbnRoRGlyZWN0bHlT
ZXJpYWxpemFibGVBdHRyaWJ1dGUiKSwgc2V2ZW50aERpcmVjdGx5U2VyaWFsaXphYmxlQXR0cmli
dXRlU2VyaWFsaXplZFZhbHVlKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZyh2bSwgInNldmVudGhEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZSIp
LCBzZXZlbnRoRGlyZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGVTZXJpYWxpemVkVmFsdWUpOwog
CiAgICAgYXV0byBlaWdodGhJbmRpcmVjdGx5QXR0cmlidXRlVmFsdWUgPSBqc1Rlc3RTZXJpYWxp
emF0aW9uRWlnaHRoSW5kaXJlY3RseUF0dHJpYnV0ZUdldHRlcihzdGF0ZSwgdGhpc09iamVjdCwg
dGhyb3dTY29wZSk7CiAgICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwogICAgIGF1
dG8qIGVpZ2h0aEluZGlyZWN0bHlBdHRyaWJ1dGVTZXJpYWxpemVkVmFsdWUgPSBKU1Rlc3RTZXJp
YWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZTo6c2VyaWFsaXplKHN0YXRlLCAqanNDYXN0PEpT
VGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlKj4oZWlnaHRoSW5kaXJlY3RseUF0
dHJpYnV0ZVZhbHVlKSwgZ2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlKTsKLSAgICByZXN1bHQtPnB1
dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJlaWdodGhJbmRpcmVjdGx5
QXR0cmlidXRlIiksIGVpZ2h0aEluZGlyZWN0bHlBdHRyaWJ1dGVTZXJpYWxpemVkVmFsdWUpOwor
ICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiZWln
aHRoSW5kaXJlY3RseUF0dHJpYnV0ZSIpLCBlaWdodGhJbmRpcmVjdGx5QXR0cmlidXRlU2VyaWFs
aXplZFZhbHVlKTsKIAogICAgIGF1dG8gbmludGhPcHRpb25hbERpcmVjdGx5U2VyaWFsaXphYmxl
QXR0cmlidXRlVmFsdWUgPSBqc1Rlc3RTZXJpYWxpemF0aW9uTmludGhPcHRpb25hbERpcmVjdGx5
U2VyaWFsaXphYmxlQXR0cmlidXRlR2V0dGVyKHN0YXRlLCB0aGlzT2JqZWN0LCB0aHJvd1Njb3Bl
KTsKICAgICB0aHJvd1Njb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7CiAgICAgaWYgKCFuaW50aE9w
dGlvbmFsRGlyZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGVWYWx1ZS5pc051bGwoKSkgewogICAg
ICAgICBhdXRvKiBuaW50aE9wdGlvbmFsRGlyZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGVTZXJp
YWxpemVkVmFsdWUgPSBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsOjpzZXJpYWxpemUo
c3RhdGUsICpqc0Nhc3Q8SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbCo+KG5pbnRoT3B0
aW9uYWxEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZVZhbHVlKSwgZ2xvYmFsT2JqZWN0LCB0
aHJvd1Njb3BlKTsKLSAgICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZy
b21TdHJpbmcoJnZtLCAibmludGhPcHRpb25hbERpcmVjdGx5U2VyaWFsaXphYmxlQXR0cmlidXRl
IiksIG5pbnRoT3B0aW9uYWxEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZVNlcmlhbGl6ZWRW
YWx1ZSk7CisgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKHZtLCAibmludGhPcHRpb25hbERpcmVjdGx5U2VyaWFsaXphYmxlQXR0cmlidXRlIiksIG5p
bnRoT3B0aW9uYWxEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZVNlcmlhbGl6ZWRWYWx1ZSk7
CiAgICAgfSBlbHNlCi0gICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKCZ2bSwgIm5pbnRoT3B0aW9uYWxEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0
ZSIpLCBuaW50aE9wdGlvbmFsRGlyZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGVWYWx1ZSk7Cisg
ICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAi
bmludGhPcHRpb25hbERpcmVjdGx5U2VyaWFsaXphYmxlQXR0cmlidXRlIiksIG5pbnRoT3B0aW9u
YWxEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZVZhbHVlKTsKIAogICAgIGF1dG8gdGVudGhG
cm96ZW5BcnJheUF0dHJpYnV0ZVZhbHVlID0ganNUZXN0U2VyaWFsaXphdGlvblRlbnRoRnJvemVu
QXJyYXlBdHRyaWJ1dGVHZXR0ZXIoc3RhdGUsIHRoaXNPYmplY3QsIHRocm93U2NvcGUpOwogICAg
IHRocm93U2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKLSAgICByZXN1bHQtPnB1dERpcmVjdCh2
bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJ0ZW50aEZyb3plbkFycmF5QXR0cmlidXRl
IiksIHRlbnRoRnJvemVuQXJyYXlBdHRyaWJ1dGVWYWx1ZSk7CisgICAgcmVzdWx0LT5wdXREaXJl
Y3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJ0ZW50aEZyb3plbkFycmF5QXR0cmli
dXRlIiksIHRlbnRoRnJvemVuQXJyYXlBdHRyaWJ1dGVWYWx1ZSk7CiAKICAgICBhdXRvIGVsZXZl
bnRoU2VxdWVuY2VBdHRyaWJ1dGVWYWx1ZSA9IGpzVGVzdFNlcmlhbGl6YXRpb25FbGV2ZW50aFNl
cXVlbmNlQXR0cmlidXRlR2V0dGVyKHN0YXRlLCB0aGlzT2JqZWN0LCB0aHJvd1Njb3BlKTsKICAg
ICB0aHJvd1Njb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7Ci0gICAgcmVzdWx0LT5wdXREaXJlY3Qo
dm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiZWxldmVudGhTZXF1ZW5jZUF0dHJpYnV0
ZSIpLCBlbGV2ZW50aFNlcXVlbmNlQXR0cmlidXRlVmFsdWUpOworICAgIHJlc3VsdC0+cHV0RGly
ZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiZWxldmVudGhTZXF1ZW5jZUF0dHJp
YnV0ZSIpLCBlbGV2ZW50aFNlcXVlbmNlQXR0cmlidXRlVmFsdWUpOwogCiAgICAgcmV0dXJuIHJl
c3VsdDsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRp
b25JbmRpcmVjdEluaGVyaXRhbmNlLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVj
dEluaGVyaXRhbmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzYsNyArNzYsNyBAQCB0ZW1wbGF0
ZTw+IEpTVmFsdWUgSlNUZXN0U2VyaWFsaXphdGlvbkluCiB0ZW1wbGF0ZTw+IHZvaWQgSlNUZXN0
U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2VDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVBy
b3BlcnRpZXMoVk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQogewogICAg
IHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3RTZXJpYWxp
emF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZTo6cHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QpLCBK
U0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0
ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7Ci0gICAgcHV0
RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcoJnZt
LCBTdHJpbmcoIlRlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZSJfcykpLCBKU0M6
OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRv
bnRFbnVtKTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9u
dHJpdmlhbFN0cmluZyh2bSwgU3RyaW5nKCJUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJp
dGFuY2UiX3MpKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3Bl
cnR5QXR0cmlidXRlOjpEb250RW51bSk7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5h
bWVzLT5sZW5ndGgsIGpzTnVtYmVyKDApLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25s
eSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKIH0KIApJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb25Jbmhl
cml0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXph
dGlvbkluaGVyaXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Niw3ICs4Niw3IEBAIHRlbXBsYXRl
PD4gSlNWYWx1ZSBKU1Rlc3RTZXJpYWxpemF0aW9uSW4KIHRlbXBsYXRlPD4gdm9pZCBKU1Rlc3RT
ZXJpYWxpemF0aW9uSW5oZXJpdENvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGllcyhWTSYg
dm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCiB7CiAgICAgcHV0RGlyZWN0KHZt
LCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0
Ojpwcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRv
bnREZWxldGUgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVy
dHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKLSAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFt
ZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZygmdm0sIFN0cmluZygiVGVzdFNlcmlhbGl6YXRp
b25Jbmhlcml0Il9zKSksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQ
cm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVy
dHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKHZtLCBTdHJpbmcoIlRlc3RTZXJpYWxp
emF0aW9uSW5oZXJpdCJfcykpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpT
Qzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKICAgICBwdXREaXJlY3Qodm0sIHZtLnBy
b3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6
OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwogfQogCkBAIC0x
ODcsNiArMTg3LDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvbkluaGVyaQog
CiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRJbmhlcml0
TG9uZ0F0dHJpYnV0ZVNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RTZXJpYWxpemF0aW9u
SW5oZXJpdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29w
ZSkKIHsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBu
YXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMTG9uZz4oc3RhdGUsIHZhbHVlKTsKQEAgLTIwOSw3ICsy
MTAsNyBAQCBKU0M6OkpTT2JqZWN0KiBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpCiAKICAgICBh
dXRvIGluaGVyaXRMb25nQXR0cmlidXRlVmFsdWUgPSBqc1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJp
dEluaGVyaXRMb25nQXR0cmlidXRlR2V0dGVyKHN0YXRlLCB0aGlzT2JqZWN0LCB0aHJvd1Njb3Bl
KTsKICAgICB0aHJvd1Njb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7Ci0gICAgcmVzdWx0LT5wdXRE
aXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiaW5oZXJpdExvbmdBdHRyaWJ1
dGUiKSwgaW5oZXJpdExvbmdBdHRyaWJ1dGVWYWx1ZSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qo
dm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJpbmhlcml0TG9uZ0F0dHJpYnV0ZSIpLCBp
bmhlcml0TG9uZ0F0dHJpYnV0ZVZhbHVlKTsKIAogICAgIHJldHVybiByZXN1bHQ7CiB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXph
dGlvbkluaGVyaXRGaW5hbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwuY3BwCShy
ZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTg4LDcgKzg4LDcgQEAgdGVtcGxhdGU8PiBKU1ZhbHVlIEpTVGVzdFNlcmlhbGl6YXRpb25Jbgog
dGVtcGxhdGU8PiB2b2lkIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxDb25zdHJ1Y3Rv
cjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMoVk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFs
T2JqZWN0KQogewogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBl
LCBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsOjpwcm90b3R5cGUodm0sIGdsb2JhbE9i
amVjdCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUgfCBKU0M6OlByb3BlcnR5
QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsK
LSAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0
cmluZygmdm0sIFN0cmluZygiVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwiX3MpKSwgSlND
OjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpE
b250RW51bSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05v
bnRyaXZpYWxTdHJpbmcodm0sIFN0cmluZygiVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwi
X3MpKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0
cmlidXRlOjpEb250RW51bSk7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5s
ZW5ndGgsIGpzTnVtYmVyKDApLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpT
Qzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKIH0KIApAQCAtMTkwLDYgKzE5MCw3IEBA
IEVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25JbmhlcmkKIAogc3RhdGljIGlubGlu
ZSBib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxGaW5hbExvbmdBdHRyaWJ1
dGVGb29TZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRG
aW5hbCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkK
IHsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRp
dmVWYWx1ZSA9IGNvbnZlcnQ8SURMTG9uZz4oc3RhdGUsIHZhbHVlKTsKQEAgLTIyMSw2ICsyMjIs
NyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpCiAKIHN0YXRpYyBp
bmxpbmUgYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsRmluYWxMb25nQXR0
cmlidXRlQmFyU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhl
cml0RmluYWwmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2Nv
cGUpCiB7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8g
bmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETExvbmc+KHN0YXRlLCB2YWx1ZSk7CkBAIC0yNDMsNyAr
MjQ1LDcgQEAgSlNDOjpKU09iamVjdCogSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaQogCiAgICAg
YXV0byBmaW5hbExvbmdBdHRyaWJ1dGVCYXJWYWx1ZSA9IGpzVGVzdFNlcmlhbGl6YXRpb25Jbmhl
cml0RmluYWxGaW5hbExvbmdBdHRyaWJ1dGVCYXJHZXR0ZXIoc3RhdGUsIHRoaXNPYmplY3QsIHRo
cm93U2NvcGUpOwogICAgIHRocm93U2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKLSAgICByZXN1
bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJmaW5hbExvbmdB
dHRyaWJ1dGVCYXIiKSwgZmluYWxMb25nQXR0cmlidXRlQmFyVmFsdWUpOworICAgIHJlc3VsdC0+
cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiZmluYWxMb25nQXR0cmli
dXRlQmFyIiksIGZpbmFsTG9uZ0F0dHJpYnV0ZUJhclZhbHVlKTsKIAogICAgIHJldHVybiByZXN1
bHQ7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXplZFNjcmlw
dFZhbHVlSW50ZXJmYWNlLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVy
ZmFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMiw3ICsxMDIsNyBAQCB0ZW1wbGF0ZTw+IEpT
VmFsdWUgSlNUZXN0U2VyaWFsaXplZFNjcmlwCiB0ZW1wbGF0ZTw+IHZvaWQgSlNUZXN0U2VyaWFs
aXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVz
KFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKIHsKICAgICBwdXREaXJl
Y3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgSlNUZXN0U2VyaWFsaXplZFNjcmlw
dFZhbHVlSW50ZXJmYWNlOjpwcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCksIEpTQzo6UHJvcGVy
dHlBdHRyaWJ1dGU6OkRvbnREZWxldGUgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25s
eSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKLSAgICBwdXREaXJlY3Qodm0s
IHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZygmdm0sIFN0cmluZygi
VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSJfcykpLCBKU0M6OlByb3BlcnR5QXR0
cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKKyAg
ICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0cmlu
Zyh2bSwgU3RyaW5nKCJUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlIl9zKSksIEpT
Qzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6
RG9udEVudW0pOwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBq
c051bWJlcigwKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3Bl
cnR5QXR0cmlidXRlOjpEb250RW51bSk7CiB9CiAKQEAgLTIxNCw2ICsyMTQsNyBAQCBFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBz
ZXRKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VWYWx1ZVNldHRlcihFeGVjU3Rh
dGUmIHN0YXRlLCBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UmIHRoaXNPYmpl
Y3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CisgICAgVU5VU0VE
X1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYg
aW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252
ZXJ0PElETFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTxTZXJpYWxpemVkU2NyaXB0VmFsdWU+PihzdGF0
ZSwgdmFsdWUpOwpAQCAtMjYyLDYgKzI2Myw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlh
bGl6ZWRTY3JpcHRWYWwKIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZUludGVyZmFjZUNhY2hlZFZhbHVlU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpT
VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSYgdGhpc09iamVjdCwgSlNWYWx1ZSB2
YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUp
OwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09i
amVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMU2VyaWFs
aXplZFNjcmlwdFZhbHVlPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4+KHN0YXRlLCB2YWx1ZSk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RhbmRh
bG9uZURpY3Rpb25hcnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdGFuZGFsb25lRGljdGlvbmFyeS5jcHAJKHJldmlzaW9u
IDI0OTEyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RTdGFuZGFsb25lRGljdGlvbmFyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4LDcgKzU4LDcg
QEAgdGVtcGxhdGU8PiBEaWN0aW9uYXJ5SW1wbE5hbWUgY29udmVydERpYwogICAgIGlmIChpc051
bGxPclVuZGVmaW5lZCkKICAgICAgICAgYm9vbE1lbWJlclZhbHVlID0ganNVbmRlZmluZWQoKTsK
ICAgICBlbHNlIHsKLSAgICAgICAgYm9vbE1lbWJlclZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRl
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImJvb2xNZW1iZXIiKSk7CisgICAgICAg
IGJvb2xNZW1iZXJWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZyh2bSwgImJvb2xNZW1iZXIiKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgeyB9KTsKICAgICB9CiAgICAgaWYgKCFib29sTWVtYmVyVmFsdWUuaXNVbmRlZmlu
ZWQoKSkgewpAQCAtNjksNyArNjksNyBAQCB0ZW1wbGF0ZTw+IERpY3Rpb25hcnlJbXBsTmFtZSBj
b252ZXJ0RGljCiAgICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKQogICAgICAgICBjYWxsYmFja01l
bWJlclZhbHVlID0ganNVbmRlZmluZWQoKTsKICAgICBlbHNlIHsKLSAgICAgICAgY2FsbGJhY2tN
ZW1iZXJWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygm
c3RhdGUsICJjYWxsYmFja01lbWJlciIpKTsKKyAgICAgICAgY2FsbGJhY2tNZW1iZXJWYWx1ZSA9
IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImNhbGxiYWNr
TWVtYmVyIikpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7
CiAgICAgfQogICAgIGlmICghY2FsbGJhY2tNZW1iZXJWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7CkBA
IC04MCw3ICs4MCw3IEBAIHRlbXBsYXRlPD4gRGljdGlvbmFyeUltcGxOYW1lIGNvbnZlcnREaWMK
ICAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQpCiAgICAgICAgIGVudW1NZW1iZXJWYWx1ZSA9IGpz
VW5kZWZpbmVkKCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIGVudW1NZW1iZXJWYWx1ZSA9IG9iamVj
dC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJlbnVtTWVtYmVy
IikpOworICAgICAgICBlbnVtTWVtYmVyVmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50
aWZpZXI6OmZyb21TdHJpbmcodm0sICJlbnVtTWVtYmVyIikpOwogICAgICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgfQogICAgIGlmICghZW51bU1lbWJlclZh
bHVlLmlzVW5kZWZpbmVkKCkpIHsKQEAgLTkyLDcgKzkyLDcgQEAgdGVtcGxhdGU8PiBEaWN0aW9u
YXJ5SW1wbE5hbWUgY29udmVydERpYwogICAgIGlmIChpc051bGxPclVuZGVmaW5lZCkKICAgICAg
ICAgcGFydGlhbEJvb2xlYW5NZW1iZXJWYWx1ZSA9IGpzVW5kZWZpbmVkKCk7CiAgICAgZWxzZSB7
Ci0gICAgICAgIHBhcnRpYWxCb29sZWFuTWVtYmVyVmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUs
IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAicGFydGlhbEJvb2xlYW5NZW1iZXIiKSk7
CisgICAgICAgIHBhcnRpYWxCb29sZWFuTWVtYmVyVmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUs
IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJwYXJ0aWFsQm9vbGVhbk1lbWJlciIpKTsKICAg
ICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0KICAgICBp
ZiAoIXBhcnRpYWxCb29sZWFuTWVtYmVyVmFsdWUuaXNVbmRlZmluZWQoKSkgewpAQCAtMTA1LDcg
KzEwNSw3IEBAIHRlbXBsYXRlPD4gRGljdGlvbmFyeUltcGxOYW1lIGNvbnZlcnREaWMKICAgICBp
ZiAoaXNOdWxsT3JVbmRlZmluZWQpCiAgICAgICAgIHBhcnRpYWxCb29sZWFuTWVtYmVyV2l0aEln
bm9yZWRDb25kaXRpb25hbFZhbHVlID0ganNVbmRlZmluZWQoKTsKICAgICBlbHNlIHsKLSAgICAg
ICAgcGFydGlhbEJvb2xlYW5NZW1iZXJXaXRoSWdub3JlZENvbmRpdGlvbmFsVmFsdWUgPSBvYmpl
Y3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAicGFydGlhbEJv
b2xlYW5NZW1iZXJXaXRoSWdub3JlZENvbmRpdGlvbmFsIikpOworICAgICAgICBwYXJ0aWFsQm9v
bGVhbk1lbWJlcldpdGhJZ25vcmVkQ29uZGl0aW9uYWxWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0
ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInBhcnRpYWxCb29sZWFuTWVtYmVyV2l0aEln
bm9yZWRDb25kaXRpb25hbCIpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCB7IH0pOwogICAgIH0KICAgICBpZiAoIXBhcnRpYWxCb29sZWFuTWVtYmVyV2l0aElnbm9y
ZWRDb25kaXRpb25hbFZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKQEAgLTExOCw3ICsxMTgsNyBAQCB0
ZW1wbGF0ZTw+IERpY3Rpb25hcnlJbXBsTmFtZSBjb252ZXJ0RGljCiAgICAgaWYgKGlzTnVsbE9y
VW5kZWZpbmVkKQogICAgICAgICBwYXJ0aWFsQ2FsbGJhY2tNZW1iZXJWYWx1ZSA9IGpzVW5kZWZp
bmVkKCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIHBhcnRpYWxDYWxsYmFja01lbWJlclZhbHVlID0g
b2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgInBhcnRp
YWxDYWxsYmFja01lbWJlciIpKTsKKyAgICAgICAgcGFydGlhbENhbGxiYWNrTWVtYmVyVmFsdWUg
PSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJwYXJ0aWFs
Q2FsbGJhY2tNZW1iZXIiKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29w
ZSwgeyB9KTsKICAgICB9CiAgICAgaWYgKCFwYXJ0aWFsQ2FsbGJhY2tNZW1iZXJWYWx1ZS5pc1Vu
ZGVmaW5lZCgpKSB7CkBAIC0xMzEsNyArMTMxLDcgQEAgdGVtcGxhdGU8PiBEaWN0aW9uYXJ5SW1w
bE5hbWUgY29udmVydERpYwogICAgIGlmIChpc051bGxPclVuZGVmaW5lZCkKICAgICAgICAgcGFy
dGlhbEVudW1NZW1iZXJWYWx1ZSA9IGpzVW5kZWZpbmVkKCk7CiAgICAgZWxzZSB7Ci0gICAgICAg
IHBhcnRpYWxFbnVtTWVtYmVyVmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6
OmZyb21TdHJpbmcoJnN0YXRlLCAicGFydGlhbEVudW1NZW1iZXIiKSk7CisgICAgICAgIHBhcnRp
YWxFbnVtTWVtYmVyVmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21T
dHJpbmcodm0sICJwYXJ0aWFsRW51bU1lbWJlciIpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0KICAgICBpZiAoIXBhcnRpYWxFbnVtTWVtYmVy
VmFsdWUuaXNVbmRlZmluZWQoKSkgewpAQCAtMTQ0LDcgKzE0NCw3IEBAIHRlbXBsYXRlPD4gRGlj
dGlvbmFyeUltcGxOYW1lIGNvbnZlcnREaWMKICAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQpCiAg
ICAgICAgIHBhcnRpYWxSZXF1aXJlZExvbmdNZW1iZXJWYWx1ZSA9IGpzVW5kZWZpbmVkKCk7CiAg
ICAgZWxzZSB7Ci0gICAgICAgIHBhcnRpYWxSZXF1aXJlZExvbmdNZW1iZXJWYWx1ZSA9IG9iamVj
dC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJwYXJ0aWFsUmVx
dWlyZWRMb25nTWVtYmVyIikpOworICAgICAgICBwYXJ0aWFsUmVxdWlyZWRMb25nTWVtYmVyVmFs
dWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJwYXJ0
aWFsUmVxdWlyZWRMb25nTWVtYmVyIikpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIHsgfSk7CiAgICAgfQogICAgIGlmICghcGFydGlhbFJlcXVpcmVkTG9uZ01lbWJl
clZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKQEAgLTE2MCw3ICsxNjAsNyBAQCB0ZW1wbGF0ZTw+IERp
Y3Rpb25hcnlJbXBsTmFtZSBjb252ZXJ0RGljCiAgICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKQog
ICAgICAgICBwYXJ0aWFsU3RyaW5nTWVtYmVyVmFsdWUgPSBqc1VuZGVmaW5lZCgpOwogICAgIGVs
c2UgewotICAgICAgICBwYXJ0aWFsU3RyaW5nTWVtYmVyVmFsdWUgPSBvYmplY3QtPmdldCgmc3Rh
dGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAicGFydGlhbFN0cmluZ01lbWJlciIp
KTsKKyAgICAgICAgcGFydGlhbFN0cmluZ01lbWJlclZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRl
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAicGFydGlhbFN0cmluZ01lbWJlciIpKTsKICAg
ICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0KICAgICBp
ZiAoIXBhcnRpYWxTdHJpbmdNZW1iZXJWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7CkBAIC0xNzMsNyAr
MTczLDcgQEAgdGVtcGxhdGU8PiBEaWN0aW9uYXJ5SW1wbE5hbWUgY29udmVydERpYwogICAgIGlm
IChpc051bGxPclVuZGVmaW5lZCkKICAgICAgICAgcGFydGlhbFN0cmluZ01lbWJlcldpdGhFbmFi
bGVkQnlTZXR0aW5nVmFsdWUgPSBqc1VuZGVmaW5lZCgpOwogICAgIGVsc2UgewotICAgICAgICBw
YXJ0aWFsU3RyaW5nTWVtYmVyV2l0aEVuYWJsZWRCeVNldHRpbmdWYWx1ZSA9IG9iamVjdC0+Z2V0
KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJwYXJ0aWFsU3RyaW5nTWVt
YmVyV2l0aEVuYWJsZWRCeVNldHRpbmciKSk7CisgICAgICAgIHBhcnRpYWxTdHJpbmdNZW1iZXJX
aXRoRW5hYmxlZEJ5U2V0dGluZ1ZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKHZtLCAicGFydGlhbFN0cmluZ01lbWJlcldpdGhFbmFibGVkQnlTZXR0aW5n
IikpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAg
fQogICAgIGlmICghcGFydGlhbFN0cmluZ01lbWJlcldpdGhFbmFibGVkQnlTZXR0aW5nVmFsdWUu
aXNVbmRlZmluZWQoKSkgewpAQCAtMTg2LDcgKzE4Niw3IEBAIHRlbXBsYXRlPD4gRGljdGlvbmFy
eUltcGxOYW1lIGNvbnZlcnREaWMKICAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQpCiAgICAgICAg
IHBhcnRpYWxVbnNpZ25lZExvbmdNZW1iZXJXaXRoSW1wbGVtZW50ZWRBc1ZhbHVlID0ganNVbmRl
ZmluZWQoKTsKICAgICBlbHNlIHsKLSAgICAgICAgcGFydGlhbFVuc2lnbmVkTG9uZ01lbWJlcldp
dGhJbXBsZW1lbnRlZEFzVmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZy
b21TdHJpbmcoJnN0YXRlLCAicGFydGlhbFVuc2lnbmVkTG9uZ01lbWJlcldpdGhJbXBsZW1lbnRl
ZEFzIikpOworICAgICAgICBwYXJ0aWFsVW5zaWduZWRMb25nTWVtYmVyV2l0aEltcGxlbWVudGVk
QXNWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwg
InBhcnRpYWxVbnNpZ25lZExvbmdNZW1iZXJXaXRoSW1wbGVtZW50ZWRBcyIpKTsKICAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0KICAgICBpZiAoIXBh
cnRpYWxVbnNpZ25lZExvbmdNZW1iZXJXaXRoSW1wbGVtZW50ZWRBc1ZhbHVlLmlzVW5kZWZpbmVk
KCkpIHsKQEAgLTE5OCw3ICsxOTgsNyBAQCB0ZW1wbGF0ZTw+IERpY3Rpb25hcnlJbXBsTmFtZSBj
b252ZXJ0RGljCiAgICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKQogICAgICAgICBzdHJpbmdNZW1i
ZXJWYWx1ZSA9IGpzVW5kZWZpbmVkKCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIHN0cmluZ01lbWJl
clZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0
ZSwgInN0cmluZ01lbWJlciIpKTsKKyAgICAgICAgc3RyaW5nTWVtYmVyVmFsdWUgPSBvYmplY3Qt
PmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJzdHJpbmdNZW1iZXIiKSk7
CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICB9CiAg
ICAgaWYgKCFzdHJpbmdNZW1iZXJWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7CkBAIC0yMTYsNjcgKzIx
Niw2NyBAQCBKU0M6OkpTT2JqZWN0KiBjb252ZXJ0RGljdGlvbmFyeVRvSlMoSlNDCiAKICAgICBp
ZiAoIUlETEJvb2xlYW46OmlzTnVsbFZhbHVlKGRpY3Rpb25hcnkuYm9vbE1lbWJlcikpIHsKICAg
ICAgICAgYXV0byBib29sTWVtYmVyVmFsdWUgPSB0b0pTPElETEJvb2xlYW4+KElETEJvb2xlYW46
OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZShkaWN0aW9uYXJ5LmJvb2xNZW1iZXIpKTsKLSAgICAg
ICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0s
ICJib29sTWVtYmVyIiksIGJvb2xNZW1iZXJWYWx1ZSk7CisgICAgICAgIHJlc3VsdC0+cHV0RGly
ZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJib29sTWVtYmVyIiksIGJv
b2xNZW1iZXJWYWx1ZSk7CiAgICAgfQogICAgIGlmICghSURMQ2FsbGJhY2tGdW5jdGlvbjxKU1Zv
aWRDYWxsYmFjaz46OmlzTnVsbFZhbHVlKGRpY3Rpb25hcnkuY2FsbGJhY2tNZW1iZXIpKSB7CiAg
ICAgICAgIGF1dG8gY2FsbGJhY2tNZW1iZXJWYWx1ZSA9IHRvSlM8SURMQ2FsbGJhY2tGdW5jdGlv
bjxKU1ZvaWRDYWxsYmFjaz4+KHN0YXRlLCBnbG9iYWxPYmplY3QsIElETENhbGxiYWNrRnVuY3Rp
b248SlNWb2lkQ2FsbGJhY2s+OjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUoZGljdGlvbmFyeS5j
YWxsYmFja01lbWJlcikpOwotICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImNhbGxiYWNrTWVtYmVyIiksIGNhbGxiYWNrTWVtYmVy
VmFsdWUpOworICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCAiY2FsbGJhY2tNZW1iZXIiKSwgY2FsbGJhY2tNZW1iZXJWYWx1ZSk7CiAg
ICAgfQogICAgIGlmICghSURMRW51bWVyYXRpb248VGVzdFN0YW5kYWxvbmVEaWN0aW9uYXJ5OjpF
bnVtSW5TdGFuZGFsb25lRGljdGlvbmFyeUZpbGU+Ojppc051bGxWYWx1ZShkaWN0aW9uYXJ5LmVu
dW1NZW1iZXIpKSB7CiAgICAgICAgIGF1dG8gZW51bU1lbWJlclZhbHVlID0gdG9KUzxJRExFbnVt
ZXJhdGlvbjxUZXN0U3RhbmRhbG9uZURpY3Rpb25hcnk6OkVudW1JblN0YW5kYWxvbmVEaWN0aW9u
YXJ5RmlsZT4+KHN0YXRlLCBJRExFbnVtZXJhdGlvbjxUZXN0U3RhbmRhbG9uZURpY3Rpb25hcnk6
OkVudW1JblN0YW5kYWxvbmVEaWN0aW9uYXJ5RmlsZT46OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJs
ZShkaWN0aW9uYXJ5LmVudW1NZW1iZXIpKTsKLSAgICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0s
IEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJlbnVtTWVtYmVyIiksIGVudW1NZW1i
ZXJWYWx1ZSk7CisgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6
OmZyb21TdHJpbmcodm0sICJlbnVtTWVtYmVyIiksIGVudW1NZW1iZXJWYWx1ZSk7CiAgICAgfQog
I2lmIEVOQUJMRShDb25kaXRpb25hbDEzKSB8fCBFTkFCTEUoQ29uZGl0aW9uYWwxNCkKICAgICBp
ZiAoIUlETEJvb2xlYW46OmlzTnVsbFZhbHVlKGRpY3Rpb25hcnkucGFydGlhbEJvb2xlYW5NZW1i
ZXIpKSB7CiAgICAgICAgIGF1dG8gcGFydGlhbEJvb2xlYW5NZW1iZXJWYWx1ZSA9IHRvSlM8SURM
Qm9vbGVhbj4oSURMQm9vbGVhbjo6ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKGRpY3Rpb25hcnku
cGFydGlhbEJvb2xlYW5NZW1iZXIpKTsKLSAgICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIEpT
Qzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJwYXJ0aWFsQm9vbGVhbk1lbWJlciIpLCBw
YXJ0aWFsQm9vbGVhbk1lbWJlclZhbHVlKTsKKyAgICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0s
IEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInBhcnRpYWxCb29sZWFuTWVtYmVyIiks
IHBhcnRpYWxCb29sZWFuTWVtYmVyVmFsdWUpOwogICAgIH0KICNlbmRpZgogI2lmIEVOQUJMRShD
b25kaXRpb25hbDEzKSB8fCBFTkFCTEUoQ29uZGl0aW9uYWwxNCkKICAgICBpZiAoIUlETEJvb2xl
YW46OmlzTnVsbFZhbHVlKGRpY3Rpb25hcnkucGFydGlhbEJvb2xlYW5NZW1iZXJXaXRoSWdub3Jl
ZENvbmRpdGlvbmFsKSkgewogICAgICAgICBhdXRvIHBhcnRpYWxCb29sZWFuTWVtYmVyV2l0aEln
bm9yZWRDb25kaXRpb25hbFZhbHVlID0gdG9KUzxJRExCb29sZWFuPihJRExCb29sZWFuOjpleHRy
YWN0VmFsdWVGcm9tTnVsbGFibGUoZGljdGlvbmFyeS5wYXJ0aWFsQm9vbGVhbk1lbWJlcldpdGhJ
Z25vcmVkQ29uZGl0aW9uYWwpKTsKLSAgICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6
SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJwYXJ0aWFsQm9vbGVhbk1lbWJlcldpdGhJZ25v
cmVkQ29uZGl0aW9uYWwiKSwgcGFydGlhbEJvb2xlYW5NZW1iZXJXaXRoSWdub3JlZENvbmRpdGlv
bmFsVmFsdWUpOworICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKHZtLCAicGFydGlhbEJvb2xlYW5NZW1iZXJXaXRoSWdub3JlZENvbmRpdGlv
bmFsIiksIHBhcnRpYWxCb29sZWFuTWVtYmVyV2l0aElnbm9yZWRDb25kaXRpb25hbFZhbHVlKTsK
ICAgICB9CiAjZW5kaWYKICNpZiBFTkFCTEUoQ29uZGl0aW9uYWwxMykgfHwgRU5BQkxFKENvbmRp
dGlvbmFsMTQpCiAgICAgaWYgKCFJRExDYWxsYmFja0Z1bmN0aW9uPEpTVm9pZENhbGxiYWNrPjo6
aXNOdWxsVmFsdWUoZGljdGlvbmFyeS5wYXJ0aWFsQ2FsbGJhY2tNZW1iZXIpKSB7CiAgICAgICAg
IGF1dG8gcGFydGlhbENhbGxiYWNrTWVtYmVyVmFsdWUgPSB0b0pTPElETENhbGxiYWNrRnVuY3Rp
b248SlNWb2lkQ2FsbGJhY2s+PihzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBJRExDYWxsYmFja0Z1bmN0
aW9uPEpTVm9pZENhbGxiYWNrPjo6ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKGRpY3Rpb25hcnku
cGFydGlhbENhbGxiYWNrTWVtYmVyKSk7Ci0gICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBK
U0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAicGFydGlhbENhbGxiYWNrTWVtYmVyIiks
IHBhcnRpYWxDYWxsYmFja01lbWJlclZhbHVlKTsKKyAgICAgICAgcmVzdWx0LT5wdXREaXJlY3Qo
dm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInBhcnRpYWxDYWxsYmFja01lbWJl
ciIpLCBwYXJ0aWFsQ2FsbGJhY2tNZW1iZXJWYWx1ZSk7CiAgICAgfQogI2VuZGlmCiAjaWYgRU5B
QkxFKENvbmRpdGlvbmFsMTMpIHx8IEVOQUJMRShDb25kaXRpb25hbDE0KQogICAgIGlmICghSURM
RW51bWVyYXRpb248VGVzdFN0YW5kYWxvbmVEaWN0aW9uYXJ5OjpFbnVtSW5TdGFuZGFsb25lRGlj
dGlvbmFyeUZpbGU+Ojppc051bGxWYWx1ZShkaWN0aW9uYXJ5LnBhcnRpYWxFbnVtTWVtYmVyKSkg
ewogICAgICAgICBhdXRvIHBhcnRpYWxFbnVtTWVtYmVyVmFsdWUgPSB0b0pTPElETEVudW1lcmF0
aW9uPFRlc3RTdGFuZGFsb25lRGljdGlvbmFyeTo6RW51bUluU3RhbmRhbG9uZURpY3Rpb25hcnlG
aWxlPj4oc3RhdGUsIElETEVudW1lcmF0aW9uPFRlc3RTdGFuZGFsb25lRGljdGlvbmFyeTo6RW51
bUluU3RhbmRhbG9uZURpY3Rpb25hcnlGaWxlPjo6ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKGRp
Y3Rpb25hcnkucGFydGlhbEVudW1NZW1iZXIpKTsKLSAgICAgICAgcmVzdWx0LT5wdXREaXJlY3Qo
dm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJwYXJ0aWFsRW51bU1lbWJlciIp
LCBwYXJ0aWFsRW51bU1lbWJlclZhbHVlKTsKKyAgICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0s
IEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInBhcnRpYWxFbnVtTWVtYmVyIiksIHBh
cnRpYWxFbnVtTWVtYmVyVmFsdWUpOwogICAgIH0KICNlbmRpZgogI2lmIEVOQUJMRShDb25kaXRp
b25hbDEzKSB8fCBFTkFCTEUoQ29uZGl0aW9uYWwxNCkKICAgICBhdXRvIHBhcnRpYWxSZXF1aXJl
ZExvbmdNZW1iZXJWYWx1ZSA9IHRvSlM8SURMTG9uZz4oZGljdGlvbmFyeS5wYXJ0aWFsUmVxdWly
ZWRMb25nTWVtYmVyKTsKLSAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKCZ2bSwgInBhcnRpYWxSZXF1aXJlZExvbmdNZW1iZXIiKSwgcGFydGlhbFJl
cXVpcmVkTG9uZ01lbWJlclZhbHVlKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAicGFydGlhbFJlcXVpcmVkTG9uZ01lbWJlciIpLCBw
YXJ0aWFsUmVxdWlyZWRMb25nTWVtYmVyVmFsdWUpOwogI2VuZGlmCiAjaWYgRU5BQkxFKENvbmRp
dGlvbmFsMTMpIHx8IEVOQUJMRShDb25kaXRpb25hbDE0KQogICAgIGlmICghSURMRE9NU3RyaW5n
Ojppc051bGxWYWx1ZShkaWN0aW9uYXJ5LnBhcnRpYWxTdHJpbmdNZW1iZXIpKSB7CiAgICAgICAg
IGF1dG8gcGFydGlhbFN0cmluZ01lbWJlclZhbHVlID0gdG9KUzxJRExET01TdHJpbmc+KHN0YXRl
LCBJRExET01TdHJpbmc6OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZShkaWN0aW9uYXJ5LnBhcnRp
YWxTdHJpbmdNZW1iZXIpKTsKLSAgICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRl
bnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJwYXJ0aWFsU3RyaW5nTWVtYmVyIiksIHBhcnRpYWxT
dHJpbmdNZW1iZXJWYWx1ZSk7CisgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6Oklk
ZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJwYXJ0aWFsU3RyaW5nTWVtYmVyIiksIHBhcnRpYWxT
dHJpbmdNZW1iZXJWYWx1ZSk7CiAgICAgfQogI2VuZGlmCiAjaWYgRU5BQkxFKENvbmRpdGlvbmFs
MTMpIHx8IEVOQUJMRShDb25kaXRpb25hbDE0KQogICAgIGlmIChkb3duY2FzdDxEb2N1bWVudD4o
anNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKSktPnNldHRpbmdzKCkudGVzdFNldHRpbmdFbmFibGVkKCkpIHsKICAgICAgICAg
aWYgKCFJRExET01TdHJpbmc6OmlzTnVsbFZhbHVlKGRpY3Rpb25hcnkucGFydGlhbFN0cmluZ01l
bWJlcldpdGhFbmFibGVkQnlTZXR0aW5nKSkgewogICAgICAgICAgICAgYXV0byBwYXJ0aWFsU3Ry
aW5nTWVtYmVyV2l0aEVuYWJsZWRCeVNldHRpbmdWYWx1ZSA9IHRvSlM8SURMRE9NU3RyaW5nPihz
dGF0ZSwgSURMRE9NU3RyaW5nOjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUoZGljdGlvbmFyeS5w
YXJ0aWFsU3RyaW5nTWVtYmVyV2l0aEVuYWJsZWRCeVNldHRpbmcpKTsKLSAgICAgICAgICAgIHJl
c3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAicGFy
dGlhbFN0cmluZ01lbWJlcldpdGhFbmFibGVkQnlTZXR0aW5nIiksIHBhcnRpYWxTdHJpbmdNZW1i
ZXJXaXRoRW5hYmxlZEJ5U2V0dGluZ1ZhbHVlKTsKKyAgICAgICAgICAgIHJlc3VsdC0+cHV0RGly
ZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJwYXJ0aWFsU3RyaW5nTWVt
YmVyV2l0aEVuYWJsZWRCeVNldHRpbmciKSwgcGFydGlhbFN0cmluZ01lbWJlcldpdGhFbmFibGVk
QnlTZXR0aW5nVmFsdWUpOwogICAgICAgICB9CiAgICAgfQogI2VuZGlmCiAjaWYgRU5BQkxFKENv
bmRpdGlvbmFsMTMpIHx8IEVOQUJMRShDb25kaXRpb25hbDE0KQogICAgIGlmICghSURMVW5zaWdu
ZWRMb25nOjppc051bGxWYWx1ZShkaWN0aW9uYXJ5LnBhcnRpYWxVbnNpZ25lZExvbmdNZW1iZXIp
KSB7CiAgICAgICAgIGF1dG8gcGFydGlhbFVuc2lnbmVkTG9uZ01lbWJlcldpdGhJbXBsZW1lbnRl
ZEFzVmFsdWUgPSB0b0pTPElETFVuc2lnbmVkTG9uZz4oSURMVW5zaWduZWRMb25nOjpleHRyYWN0
VmFsdWVGcm9tTnVsbGFibGUoZGljdGlvbmFyeS5wYXJ0aWFsVW5zaWduZWRMb25nTWVtYmVyKSk7
Ci0gICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJp
bmcoJnZtLCAicGFydGlhbFVuc2lnbmVkTG9uZ01lbWJlcldpdGhJbXBsZW1lbnRlZEFzIiksIHBh
cnRpYWxVbnNpZ25lZExvbmdNZW1iZXJXaXRoSW1wbGVtZW50ZWRBc1ZhbHVlKTsKKyAgICAgICAg
cmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInBh
cnRpYWxVbnNpZ25lZExvbmdNZW1iZXJXaXRoSW1wbGVtZW50ZWRBcyIpLCBwYXJ0aWFsVW5zaWdu
ZWRMb25nTWVtYmVyV2l0aEltcGxlbWVudGVkQXNWYWx1ZSk7CiAgICAgfQogI2VuZGlmCiAgICAg
aWYgKCFJRExET01TdHJpbmc6OmlzTnVsbFZhbHVlKGRpY3Rpb25hcnkuc3RyaW5nTWVtYmVyKSkg
ewogICAgICAgICBhdXRvIHN0cmluZ01lbWJlclZhbHVlID0gdG9KUzxJRExET01TdHJpbmc+KHN0
YXRlLCBJRExET01TdHJpbmc6OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZShkaWN0aW9uYXJ5LnN0
cmluZ01lbWJlcikpOwotICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKCZ2bSwgInN0cmluZ01lbWJlciIpLCBzdHJpbmdNZW1iZXJWYWx1ZSk7
CisgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJp
bmcodm0sICJzdHJpbmdNZW1iZXIiKSwgc3RyaW5nTWVtYmVyVmFsdWUpOwogICAgIH0KICAgICBy
ZXR1cm4gcmVzdWx0OwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXIuY3BwCShyZXZpc2lv
biAyNDkxMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0U3RyaW5naWZpZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NCw3ICs4NCw3IEBAIHRlbXBs
YXRlPD4gSlNWYWx1ZSBKU1Rlc3RTdHJpbmdpZmllckNvbnMKIHRlbXBsYXRlPD4gdm9pZCBKU1Rl
c3RTdHJpbmdpZmllckNvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGllcyhWTSYgdm0sIEpT
RE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCiB7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5w
cm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdFN0cmluZ2lmaWVyOjpwcm90b3R5cGUodm0s
IGdsb2JhbE9iamVjdCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUgfCBKU0M6
OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRv
bnRFbnVtKTsKLSAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9u
dHJpdmlhbFN0cmluZygmdm0sIFN0cmluZygiVGVzdFN0cmluZ2lmaWVyIl9zKSksIEpTQzo6UHJv
cGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVu
dW0pOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2
aWFsU3RyaW5nKHZtLCBTdHJpbmcoIlRlc3RTdHJpbmdpZmllciJfcykpLCBKU0M6OlByb3BlcnR5
QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsK
ICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMCks
IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0
ZTo6RG9udEVudW0pOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJBbm9ueW1vdXNPcGVyYXRpb24uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJp
bmdpZmllckFub255bW91c09wZXJhdGlvbi5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllckFub255
bW91c09wZXJhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg0LDcgKzg0LDcgQEAgdGVtcGxh
dGU8PiBKU1ZhbHVlIEpTVGVzdFN0cmluZ2lmaWVyQW5vbgogdGVtcGxhdGU8PiB2b2lkIEpTVGVz
dFN0cmluZ2lmaWVyQW5vbnltb3VzT3BlcmF0aW9uQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9w
ZXJ0aWVzKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKIHsKICAgICBw
dXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgSlNUZXN0U3RyaW5naWZp
ZXJBbm9ueW1vdXNPcGVyYXRpb246OnByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KSwgSlNDOjpQ
cm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJl
YWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwotICAgIHB1dERpcmVj
dCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKCZ2bSwgU3Ry
aW5nKCJUZXN0U3RyaW5naWZpZXJBbm9ueW1vdXNPcGVyYXRpb24iX3MpKSwgSlNDOjpQcm9wZXJ0
eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7
CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxT
dHJpbmcodm0sIFN0cmluZygiVGVzdFN0cmluZ2lmaWVyQW5vbnltb3VzT3BlcmF0aW9uIl9zKSks
IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0
ZTo6RG9udEVudW0pOwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3Ro
LCBqc051bWJlcigwKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlBy
b3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllck5hbWVkT3BlcmF0aW9uLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvbi5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmll
ck5hbWVkT3BlcmF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODUsNyArODUsNyBAQCB0ZW1w
bGF0ZTw+IEpTVmFsdWUgSlNUZXN0U3RyaW5naWZpZXJOYW1lCiB0ZW1wbGF0ZTw+IHZvaWQgSlNU
ZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvbkNvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVy
dGllcyhWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCiB7CiAgICAgcHV0
RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdFN0cmluZ2lmaWVy
TmFtZWRPcGVyYXRpb246OnByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KSwgSlNDOjpQcm9wZXJ0
eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5
IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwotICAgIHB1dERpcmVjdCh2bSwg
dm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKCZ2bSwgU3RyaW5nKCJU
ZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvbiJfcykpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRl
OjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKKyAgICBwdXRE
aXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZyh2bSwg
U3RyaW5nKCJUZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvbiJfcykpLCBKU0M6OlByb3BlcnR5
QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsK
ICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMCks
IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0
ZTo6RG9udEVudW0pOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25JbXBsZW1lbnRlZEFzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
U3RyaW5naWZpZXJPcGVyYXRpb25JbXBsZW1lbnRlZEFzLmNwcAkocmV2aXNpb24gMjQ5MTI4KQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lm
aWVyT3BlcmF0aW9uSW1wbGVtZW50ZWRBcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1LDcgKzg1
LDcgQEAgdGVtcGxhdGU8PiBKU1ZhbHVlIEpTVGVzdFN0cmluZ2lmaWVyT3BlcgogdGVtcGxhdGU8
PiB2b2lkIEpTVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uSW1wbGVtZW50ZWRBc0NvbnN0cnVjdG9y
Ojppbml0aWFsaXplUHJvcGVydGllcyhWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxP
YmplY3QpCiB7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUs
IEpTVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uSW1wbGVtZW50ZWRBczo6cHJvdG90eXBlKHZtLCBn
bG9iYWxPYmplY3QpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgSlNDOjpQ
cm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250
RW51bSk7Ci0gICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRy
aXZpYWxTdHJpbmcoJnZtLCBTdHJpbmcoIlRlc3RTdHJpbmdpZmllck9wZXJhdGlvbkltcGxlbWVu
dGVkQXMiX3MpKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3Bl
cnR5QXR0cmlidXRlOjpEb250RW51bSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5h
bWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcodm0sIFN0cmluZygiVGVzdFN0cmluZ2lmaWVy
T3BlcmF0aW9uSW1wbGVtZW50ZWRBcyJfcykpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFk
T25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKICAgICBwdXREaXJlY3Qo
dm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMCksIEpTQzo6UHJvcGVydHlB
dHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwog
fQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
U3RyaW5naWZpZXJPcGVyYXRpb25OYW1lZFRvU3RyaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJPcGVy
YXRpb25OYW1lZFRvU3RyaW5nLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uTmFt
ZWRUb1N0cmluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg0LDcgKzg0LDcgQEAgdGVtcGxhdGU8
PiBKU1ZhbHVlIEpTVGVzdFN0cmluZ2lmaWVyT3BlcgogdGVtcGxhdGU8PiB2b2lkIEpTVGVzdFN0
cmluZ2lmaWVyT3BlcmF0aW9uTmFtZWRUb1N0cmluZ0NvbnN0cnVjdG9yOjppbml0aWFsaXplUHJv
cGVydGllcyhWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCiB7CiAgICAg
cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdFN0cmluZ2lm
aWVyT3BlcmF0aW9uTmFtZWRUb1N0cmluZzo6cHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QpLCBK
U0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0
ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7Ci0gICAgcHV0
RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcoJnZt
LCBTdHJpbmcoIlRlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmciX3MpKSwgSlND
OjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpE
b250RW51bSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05v
bnRyaXZpYWxTdHJpbmcodm0sIFN0cmluZygiVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uTmFtZWRU
b1N0cmluZyJfcykpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJv
cGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5
TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRP
bmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwogfQogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJSZWFk
T25seUF0dHJpYnV0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGUuY3BwCShy
ZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0U3RyaW5naWZpZXJSZWFkT25seUF0dHJpYnV0ZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTg2LDcgKzg2LDcgQEAgdGVtcGxhdGU8PiBKU1ZhbHVlIEpTVGVzdFN0cmluZ2lmaWVyUmVh
ZAogdGVtcGxhdGU8PiB2b2lkIEpTVGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGVDb25z
dHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMoVk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCYg
Z2xvYmFsT2JqZWN0KQogewogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJv
dG90eXBlLCBKU1Rlc3RTdHJpbmdpZmllclJlYWRPbmx5QXR0cmlidXRlOjpwcm90b3R5cGUodm0s
IGdsb2JhbE9iamVjdCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUgfCBKU0M6
OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRv
bnRFbnVtKTsKLSAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9u
dHJpdmlhbFN0cmluZygmdm0sIFN0cmluZygiVGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1
dGUiX3MpKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5
QXR0cmlidXRlOjpEb250RW51bSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVz
LT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcodm0sIFN0cmluZygiVGVzdFN0cmluZ2lmaWVyUmVh
ZE9ubHlBdHRyaWJ1dGUiX3MpKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBK
U0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5w
cm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDApLCBKU0M6OlByb3BlcnR5QXR0cmlidXRl
OjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKIH0KIApJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lm
aWVyUmVhZFdyaXRlQXR0cmlidXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1
dGUuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04Nyw3ICs4Nyw3IEBAIHRlbXBsYXRlPD4gSlNWYWx1ZSBKU1Rlc3RTdHJp
bmdpZmllclJlYWQKIHRlbXBsYXRlPD4gdm9pZCBKU1Rlc3RTdHJpbmdpZmllclJlYWRXcml0ZUF0
dHJpYnV0ZUNvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGllcyhWTSYgdm0sIEpTRE9NR2xv
YmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCiB7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0
eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmlidXRlOjpw
cm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRE
ZWxldGUgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlB
dHRyaWJ1dGU6OkRvbnRFbnVtKTsKLSAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMt
Pm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZygmdm0sIFN0cmluZygiVGVzdFN0cmluZ2lmaWVyUmVh
ZFdyaXRlQXR0cmlidXRlIl9zKSksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwg
SlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOworICAgIHB1dERpcmVjdCh2bSwgdm0u
cHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKHZtLCBTdHJpbmcoIlRlc3RT
dHJpbmdpZmllclJlYWRXcml0ZUF0dHJpYnV0ZSJfcykpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRl
OjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKICAgICBwdXRE
aXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMCksIEpTQzo6UHJv
cGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVu
dW0pOwogfQogCkBAIC0xOTQsNiArMTk0LDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0U3RyaW5n
aWZpZXJSZWFkV3JpdAogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0U3RyaW5naWZpZXJS
ZWFkV3JpdGVBdHRyaWJ1dGVJZGVudGlmaWVyU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVz
dFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmlidXRlJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVl
LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogeworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0
LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+
KHN0YXRlLCB2YWx1ZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0VHlwZWRlZnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RUeXBlZGVmcy5jcHAJKHJldmlzaW9uIDI0OTEy
OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RUeXBl
ZGVmcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3MCw3ICsxNzAsNyBAQCB0ZW1wbGF0ZTw+IEpT
VmFsdWUgSlNUZXN0VHlwZWRlZnNDb25zdHJ1CiB0ZW1wbGF0ZTw+IHZvaWQgSlNUZXN0VHlwZWRl
ZnNDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMoVk0mIHZtLCBKU0RPTUdsb2JhbE9i
amVjdCYgZ2xvYmFsT2JqZWN0KQogewogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1l
cy0+cHJvdG90eXBlLCBKU1Rlc3RUeXBlZGVmczo6cHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3Qp
LCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgSlNDOjpQcm9wZXJ0eUF0dHJp
YnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7Ci0gICAg
cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmco
JnZtLCBTdHJpbmcoIlRlc3RUeXBlZGVmcyJfcykpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpS
ZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKKyAgICBwdXREaXJl
Y3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZyh2bSwgU3Ry
aW5nKCJUZXN0VHlwZWRlZnMiX3MpKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkg
fCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CiAgICAgcHV0RGlyZWN0KHZtLCB2
bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDMpLCBKU0M6OlByb3BlcnR5QXR0cmli
dXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKICAgICBy
ZWlmeVN0YXRpY1Byb3BlcnRpZXModm0sIEpTVGVzdFR5cGVkZWZzOjppbmZvKCksIEpTVGVzdFR5
cGVkZWZzQ29uc3RydWN0b3JUYWJsZVZhbHVlcywgKnRoaXMpOwogfQpAQCAtMjk3LDYgKzI5Nyw3
IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzVW5zaWduZWRMb24KIAogc3RhdGljIGlu
bGluZSBib29sIHNldEpTVGVzdFR5cGVkZWZzVW5zaWduZWRMb25nTG9uZ0F0dHJTZXR0ZXIoRXhl
Y1N0YXRlJiBzdGF0ZSwgSlNUZXN0VHlwZWRlZnMmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUs
IFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qu
d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETFVuc2lnbmVkTG9u
Z0xvbmc+KHN0YXRlLCB2YWx1ZSk7CkBAIC0zMjgsNiArMzI5LDcgQEAgRW5jb2RlZEpTVmFsdWUg
anNUZXN0VHlwZWRlZnNTZXJpYWxpemVkUwogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0
VHlwZWRlZnNTZXJpYWxpemVkU2NyaXB0VmFsdWVTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNU
ZXN0VHlwZWRlZnMmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93
U2NvcGUpCiB7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1
dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTxTZXJpYWxp
emVkU2NyaXB0VmFsdWU+PihzdGF0ZSwgdmFsdWUpOwpAQCAtMzcxLDYgKzM3Myw3IEBAIEVuY29k
ZWRKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzQXR0cmlidXRlV2kKIAogc3RhdGljIGlubGluZSBib29s
IHNldEpTVGVzdFR5cGVkZWZzQXR0cmlidXRlV2l0aENsYW1wU2V0dGVyKEV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTVGVzdFR5cGVkZWZzJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKQogeworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsK
ICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExDbGFtcEFkYXB0b3I8SURMVW5zaWdu
ZWRMb25nTG9uZz4+KHN0YXRlLCB2YWx1ZSk7CkBAIC00MDIsNiArNDA1LDcgQEAgRW5jb2RlZEpT
VmFsdWUganNUZXN0VHlwZWRlZnNBdHRyaWJ1dGVXaQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0
SlNUZXN0VHlwZWRlZnNBdHRyaWJ1dGVXaXRoQ2xhbXBJblR5cGVkZWZTZXR0ZXIoRXhlY1N0YXRl
JiBzdGF0ZSwgSlNUZXN0VHlwZWRlZnMmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93
U2NvcGUmIHRocm93U2NvcGUpCiB7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBl
ZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETENsYW1wQWRhcHRvcjxJRExM
b25nPj4oc3RhdGUsIHZhbHVlKTsKQEAgLTQzMyw2ICs0MzcsNyBAQCBFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RUeXBlZGVmc0J1ZmZlclNvdXJjCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RU
eXBlZGVmc0J1ZmZlclNvdXJjZUF0dHJTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0VHlw
ZWRlZnMmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUp
CiB7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0
aXZlVmFsdWUgPSBjb252ZXJ0PElETFVuaW9uPElETEFycmF5QnVmZmVyVmlldywgSURMQXJyYXlC
dWZmZXI+PihzdGF0ZSwgdmFsdWUpOwpAQCAtNDY0LDYgKzQ2OSw3IEBAIEVuY29kZWRKU1ZhbHVl
IGpzVGVzdFR5cGVkZWZzRG9tVGltZVN0YW0KIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVz
dFR5cGVkZWZzRG9tVGltZVN0YW1wQXR0clNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RU
eXBlZGVmcyYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29w
ZSkKIHsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBu
YXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMVW5zaWduZWRMb25nTG9uZz4oc3RhdGUsIHZhbHVlKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9OUF9qc29iamVjdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL05QX2pzb2JqZWN0LmNwcAkocmV2aXNpb24gMjQ5MTI4
KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL05QX2pzb2JqZWN0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxNyBBcHBsZSBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTkgQXBw
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtNDg3LDcgKzQ4Nyw3IEBAIGJvb2wgX05QTl9FbnVtZXJhdGUoTlBQLCBOUE9iamVj
dCogbywgTlAKICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwog
CiAgICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwot
ICAgICAgICBQcm9wZXJ0eU5hbWVBcnJheSBwcm9wZXJ0eU5hbWVzKCZ2bSwgUHJvcGVydHlOYW1l
TW9kZTo6U3RyaW5ncywgUHJpdmF0ZVN5bWJvbE1vZGU6OkV4Y2x1ZGUpOworICAgICAgICBQcm9w
ZXJ0eU5hbWVBcnJheSBwcm9wZXJ0eU5hbWVzKHZtLCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdz
LCBQcml2YXRlU3ltYm9sTW9kZTo6RXhjbHVkZSk7CiAKICAgICAgICAgb2JqLT5pbXAtPm1ldGhv
ZFRhYmxlKHZtKS0+Z2V0UHJvcGVydHlOYW1lcyhvYmotPmltcCwgZXhlYywgcHJvcGVydHlOYW1l
cywgRW51bWVyYXRpb25Nb2RlKCkpOwogICAgICAgICB1bnNpZ25lZCBzaXplID0gc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KHByb3BlcnR5TmFtZXMuc2l6ZSgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JyaWRnZS9ydW50aW1lX2FycmF5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
cmlkZ2UvcnVudGltZV9hcnJheS5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9XZWJD
b3JlL2JyaWRnZS9ydW50aW1lX2FycmF5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDgsIDIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMTkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03
Nyw3ICs3Nyw3IEBAIHZvaWQgUnVudGltZUFycmF5OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEoKICAg
ICBSdW50aW1lQXJyYXkqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8UnVudGltZUFycmF5Kj4ob2JqZWN0
KTsKICAgICB1bnNpZ25lZCBsZW5ndGggPSB0aGlzT2JqZWN0LT5nZXRMZW5ndGgoKTsKICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCi0gICAgICAgIHByb3BlcnR5TmFt
ZXMuYWRkKElkZW50aWZpZXI6OmZyb20oZXhlYywgaSkpOworICAgICAgICBwcm9wZXJ0eU5hbWVz
LmFkZChJZGVudGlmaWVyOjpmcm9tKHZtLCBpKSk7CiAKICAgICBpZiAobW9kZS5pbmNsdWRlRG9u
dEVudW1Qcm9wZXJ0aWVzKCkpCiAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKHZtLnByb3BlcnR5
TmFtZXMtPmxlbmd0aCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvYy9jX2luc3RhbmNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvYy9jX2luc3RhbmNlLmNw
cAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL2MvY19pbnN0YW5j
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDAzLCAyMDA2LCAyMDE2IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDMtMjAxOSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOTUsNyArMjk1LDcgQEAgSlNWYWx1
ZSBDSW5zdGFuY2U6OnN0cmluZ1ZhbHVlKEV4ZWNTdGF0ZQogICAgICAgICByZXR1cm4gdmFsdWU7
CiAKICAgICAvLyBGYWxsYmFjayB0byBkZWZhdWx0IGltcGxlbWVudGF0aW9uLgotICAgIHJldHVy
biBqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywgIk5QT2JqZWN0Il9zKTsKKyAgICByZXR1cm4ganNO
b250cml2aWFsU3RyaW5nKGV4ZWMtPnZtKCksICJOUE9iamVjdCJfcyk7CiB9CiAKIEpTVmFsdWUg
Q0luc3RhbmNlOjpudW1iZXJWYWx1ZShFeGVjU3RhdGUqKSBjb25zdApAQCAtMzY2LDEzICszNjYs
MTQgQEAgdm9pZCBDSW5zdGFuY2U6OmdldFByb3BlcnR5TmFtZXMoRXhlY1N0YQogICAgICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAorICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgZm9yICh1
aW50MzJfdCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKICAgICAgICAgSWRlbnRpZmllclJlcCog
aWRlbnRpZmllciA9IHN0YXRpY19jYXN0PElkZW50aWZpZXJSZXAqPihpZGVudGlmaWVyc1tpXSk7
CiAKICAgICAgICAgaWYgKGlkZW50aWZpZXItPmlzU3RyaW5nKCkpCiAgICAgICAgICAgICBuYW1l
QXJyYXkuYWRkKGlkZW50aWZpZXJGcm9tTlBJZGVudGlmaWVyKGV4ZWMsIGlkZW50aWZpZXItPnN0
cmluZygpKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG5hbWVBcnJheS5hZGQoSWRlbnRp
Zmllcjo6ZnJvbShleGVjLCBpZGVudGlmaWVyLT5udW1iZXIoKSkpOworICAgICAgICAgICAgbmFt
ZUFycmF5LmFkZChJZGVudGlmaWVyOjpmcm9tKHZtLCBpZGVudGlmaWVyLT5udW1iZXIoKSkpOwog
ICAgIH0KIAogICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCByZWFsbHkgY2FsbCBOUE5fTWVtRnJl
ZSBidXQgdGhhdCdzIGluIFdlYktpdApJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL2MvY191
dGlsaXR5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvYy9jX3V0aWxp
dHkuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvYy9jX3V0
aWxpdHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwNCwgMjAwNiwgMjAxMyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTkgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqIENvcHlyaWdodCAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IChhcEBueXBvcC5j
b20pCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0xNDYsNyArMTQ2LDggQEAgU3RyaW5nIGNvbnZlcnRO
UFN0cmluZ1RvVVRGMTYoY29uc3QgTlBTdAogCiBJZGVudGlmaWVyIGlkZW50aWZpZXJGcm9tTlBJ
ZGVudGlmaWVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgTlBVVEY4KiBuYW1lKQogewotICAgIHJl
dHVybiBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsIGNvbnZlcnRVVEY4VG9VVEYxNldpdGhM
YXRpbjFGYWxsYmFjayhuYW1lLCAtMSkpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAg
cmV0dXJuIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIGNvbnZlcnRVVEY4VG9VVEYxNldpdGhM
YXRpbjFGYWxsYmFjayhuYW1lLCAtMSkpOwogfQogCiB9IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JyaWRnZS9vYmpjL1dlYlNjcmlwdE9iamVjdC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9icmlkZ2Uvb2JqYy9XZWJTY3JpcHRPYmplY3QubW0JKHJldmlzaW9uIDI0OTEyOCkKKysr
IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9vYmpjL1dlYlNjcmlwdE9iamVjdC5tbQkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxOSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTM0Nyw3ICszNDcsNyBAQCAtIChpZCljYWxsV2ViU2NyaXB0TWV0aG9kOihOU1N0
cmluZyAqKW5hCiAgICAgRXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVj
KCk7CiAgICAgVU5VU0VEX1BBUkFNKHNjb3BlKTsKIAotICAgIEpTQzo6SlNWYWx1ZSBmdW5jdGlv
biA9IFtzZWxmIF9pbXBdLT5nZXQoZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCBT
dHJpbmcobmFtZSkpKTsKKyAgICBKU0M6OkpTVmFsdWUgZnVuY3Rpb24gPSBbc2VsZiBfaW1wXS0+
Z2V0KGV4ZWMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIFN0cmluZyhuYW1lKSkpOwogICAg
IENhbGxEYXRhIGNhbGxEYXRhOwogICAgIENhbGxUeXBlIGNhbGxUeXBlID0gZ2V0Q2FsbERhdGEo
dm0sIGZ1bmN0aW9uLCBjYWxsRGF0YSk7CiAgICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBlOjpO
b25lKQpAQCAtNDA2LDcgKzQwNiw3IEBAIC0gKHZvaWQpc2V0VmFsdWU6KGlkKXZhbHVlIGZvcktl
eTooTlNTdHIKIAogICAgIEpTT2JqZWN0KiBvYmplY3QgPSBKU0M6OmpzRHluYW1pY0Nhc3Q8SlNP
YmplY3QqPih2bSwgW3NlbGYgX2ltcF0pOwogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KG9iamVj
dCk7Ci0gICAgb2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPnB1dChvYmplY3QsIGV4ZWMsIElkZW50
aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgU3RyaW5nKGtleSkpLCBjb252ZXJ0T2JqY1ZhbHVlVG9W
YWx1ZShleGVjLCAmdmFsdWUsIE9iamNPYmplY3RUeXBlLCBbc2VsZiBfcm9vdE9iamVjdF0pLCBz
bG90KTsKKyAgICBvYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+cHV0KG9iamVjdCwgZXhlYywgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgU3RyaW5nKGtleSkpLCBjb252ZXJ0T2JqY1ZhbHVlVG9W
YWx1ZShleGVjLCAmdmFsdWUsIE9iamNPYmplY3RUeXBlLCBbc2VsZiBfcm9vdE9iamVjdF0pLCBz
bG90KTsKIAogICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpIHsKICAgICAgICAg
YWRkRXhjZXB0aW9uVG9Db25zb2xlKGV4ZWMpOwpAQCAtNDMyLDcgKzQzMiw3IEBAIC0gKGlkKXZh
bHVlRm9yS2V5OihOU1N0cmluZyAqKWtleQogICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9D
QVRDSF9TQ09QRSh2bSk7CiAgICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+
Z2xvYmFsRXhlYygpOwogCi0gICAgICAgIEpTQzo6SlNWYWx1ZSByZXN1bHQgPSBbc2VsZiBfaW1w
XS0+Z2V0KGV4ZWMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgU3RyaW5nKGtleSkpKTsK
KyAgICAgICAgSlNDOjpKU1ZhbHVlIHJlc3VsdCA9IFtzZWxmIF9pbXBdLT5nZXQoZXhlYywgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgU3RyaW5nKGtleSkpKTsKICAgICAgICAgCiAgICAgICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpIHsKICAgICAgICAgICAgIGFkZEV4Y2Vw
dGlvblRvQ29uc29sZShleGVjKTsKQEAgLTQ2MCw3ICs0NjAsNyBAQCAtICh2b2lkKXJlbW92ZVdl
YlNjcmlwdEtleTooTlNTdHJpbmcgKilrCiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hf
U0NPUEUodm0pOwogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhl
YygpOwogCi0gICAgW3NlbGYgX2ltcF0tPm1ldGhvZFRhYmxlKHZtKS0+ZGVsZXRlUHJvcGVydHko
W3NlbGYgX2ltcF0sIGV4ZWMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgU3RyaW5nKGtl
eSkpKTsKKyAgICBbc2VsZiBfaW1wXS0+bWV0aG9kVGFibGUodm0pLT5kZWxldGVQcm9wZXJ0eShb
c2VsZiBfaW1wXSwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgU3RyaW5nKGtleSkp
KTsKIAogICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpIHsKICAgICAgICAgYWRk
RXhjZXB0aW9uVG9Db25zb2xlKGV4ZWMpOwpAQCAtNDc5LDcgKzQ3OSw3IEBAIC0gKEJPT0wpaGFz
V2ViU2NyaXB0S2V5OihOU1N0cmluZyAqKWtleQogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NB
VENIX1NDT1BFKHZtKTsKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2Jh
bEV4ZWMoKTsKIAotICAgIEJPT0wgcmVzdWx0ID0gW3NlbGYgX2ltcF0tPmhhc1Byb3BlcnR5KGV4
ZWMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgU3RyaW5nKGtleSkpKTsKKyAgICBCT09M
IHJlc3VsdCA9IFtzZWxmIF9pbXBdLT5oYXNQcm9wZXJ0eShleGVjLCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKHZtLCBTdHJpbmcoa2V5KSkpOwogCiAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkgewogICAgICAgICBhZGRFeGNlcHRpb25Ub0NvbnNvbGUoZXhlYyk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX3J1bnRpbWUubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYnJpZGdlL29iamMvb2JqY19ydW50aW1lLm1tCShyZXZpc2lvbiAyNDkx
MjgpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX3J1bnRpbWUubW0JKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA4
LCAyMDEzLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjk1LDggKzI5NSw5IEBAIGJvb2wgT2JqY0ZhbGxi
YWNrT2JqZWN0SW1wOjpkZWxldGVQcm9wZXIKIAogSlNWYWx1ZSBPYmpjRmFsbGJhY2tPYmplY3RJ
bXA6OmRlZmF1bHRWYWx1ZShjb25zdCBKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMs
IFByZWZlcnJlZFByaW1pdGl2ZVR5cGUpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAg
ICBjb25zdCBPYmpjRmFsbGJhY2tPYmplY3RJbXAqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8Y29uc3Qg
T2JqY0ZhbGxiYWNrT2JqZWN0SW1wKj4ob2JqZWN0KTsKLSAgICByZXR1cm4gdGhpc09iamVjdC0+
X2luc3RhbmNlLT5nZXRWYWx1ZU9mVW5kZWZpbmVkRmllbGQoZXhlYywgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyhleGVjLCB0aGlzT2JqZWN0LT5tX2l0ZW0pKTsKKyAgICByZXR1cm4gdGhpc09iamVj
dC0+X2luc3RhbmNlLT5nZXRWYWx1ZU9mVW5kZWZpbmVkRmllbGQoZXhlYywgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZyh2bSwgdGhpc09iamVjdC0+bV9pdGVtKSk7CiB9CiAKIGJvb2wgT2JqY0ZhbGxi
YWNrT2JqZWN0SW1wOjp0b0Jvb2xlYW4oRXhlY1N0YXRlICopIGNvbnN0CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX3V0aWxpdHkubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYnJpZGdlL29iamMvb2JqY191dGlsaXR5Lm1tCShyZXZpc2lvbiAyNDkxMjgpCisr
KyBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX3V0aWxpdHkubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTE1Miw4ICsxNTIsOSBAQCBPYmpjVmFsdWUgY29udmVydFZhbHVlVG9PYmpjVmFsdWUo
RXhlY1N0CiAKIEpTVmFsdWUgY29udmVydE5TU3RyaW5nVG9TdHJpbmcoRXhlY1N0YXRlKiBleGVj
LCBOU1N0cmluZyAqbnNzdHJpbmcpCiB7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7Ci0g
ICAgSlNWYWx1ZSBhVmFsdWUgPSBqc1N0cmluZyhleGVjLCBTdHJpbmcobnNzdHJpbmcpKTsKKyAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICBK
U1ZhbHVlIGFWYWx1ZSA9IGpzU3RyaW5nKHZtLCBTdHJpbmcobnNzdHJpbmcpKTsKICAgICByZXR1
cm4gYVZhbHVlOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9D
b250ZW50RXh0ZW5zaW9uUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9j
b250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uUGFyc2VyLmNwcAkocmV2aXNpb24gMjQ5
MTI4KQorKysgU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lv
blBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDE0LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE0LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMzEsMTEgKzEzMSwxMSBAQCBzdGF0aWMg
RXhwZWN0ZWQ8VHJpZ2dlciwgc3RkOjplcnJvcl9jb2RlCiAgICAgVk0mIHZtID0gZXhlYy52bSgp
OwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIGNvbnN0
IEpTVmFsdWUgdHJpZ2dlck9iamVjdCA9IHJ1bGVPYmplY3QuZ2V0KCZleGVjLCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKCZleGVjLCAidHJpZ2dlciIpKTsKKyAgICBjb25zdCBKU1ZhbHVlIHRyaWdn
ZXJPYmplY3QgPSBydWxlT2JqZWN0LmdldCgmZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2
bSwgInRyaWdnZXIiKSk7CiAgICAgaWYgKCF0cmlnZ2VyT2JqZWN0IHx8IHNjb3BlLmV4Y2VwdGlv
bigpIHx8ICF0cmlnZ2VyT2JqZWN0LmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiBtYWtlVW5l
eHBlY3RlZChDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05JbnZhbGlkVHJpZ2dlcik7CiAgICAg
Ci0gICAgY29uc3QgSlNWYWx1ZSB1cmxGaWx0ZXJPYmplY3QgPSB0cmlnZ2VyT2JqZWN0LmdldCgm
ZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmZXhlYywgInVybC1maWx0ZXIiKSk7CisgICAg
Y29uc3QgSlNWYWx1ZSB1cmxGaWx0ZXJPYmplY3QgPSB0cmlnZ2VyT2JqZWN0LmdldCgmZXhlYywg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInVybC1maWx0ZXIiKSk7CiAgICAgaWYgKCF1cmxG
aWx0ZXJPYmplY3QgfHwgc2NvcGUuZXhjZXB0aW9uKCkgfHwgIXVybEZpbHRlck9iamVjdC5pc1N0
cmluZygpKQogICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoQ29udGVudEV4dGVuc2lvbkVy
cm9yOjpKU09OSW52YWxpZFVSTEZpbHRlckluVHJpZ2dlcik7CiAKQEAgLTE0NiwxNSArMTQ2LDE1
IEBAIHN0YXRpYyBFeHBlY3RlZDxUcmlnZ2VyLCBzdGQ6OmVycm9yX2NvZGUKICAgICBUcmlnZ2Vy
IHRyaWdnZXI7CiAgICAgdHJpZ2dlci51cmxGaWx0ZXIgPSB1cmxGaWx0ZXI7CiAKLSAgICBjb25z
dCBKU1ZhbHVlIHVybEZpbHRlckNhc2VWYWx1ZSA9IHRyaWdnZXJPYmplY3QuZ2V0KCZleGVjLCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZleGVjLCAidXJsLWZpbHRlci1pcy1jYXNlLXNlbnNpdGl2
ZSIpKTsKKyAgICBjb25zdCBKU1ZhbHVlIHVybEZpbHRlckNhc2VWYWx1ZSA9IHRyaWdnZXJPYmpl
Y3QuZ2V0KCZleGVjLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAidXJsLWZpbHRlci1pcy1j
YXNlLXNlbnNpdGl2ZSIpKTsKICAgICBpZiAodXJsRmlsdGVyQ2FzZVZhbHVlICYmICFzY29wZS5l
eGNlcHRpb24oKSAmJiB1cmxGaWx0ZXJDYXNlVmFsdWUuaXNCb29sZWFuKCkpCiAgICAgICAgIHRy
aWdnZXIudXJsRmlsdGVySXNDYXNlU2Vuc2l0aXZlID0gdXJsRmlsdGVyQ2FzZVZhbHVlLnRvQm9v
bGVhbigmZXhlYyk7CiAKLSAgICBjb25zdCBKU1ZhbHVlIHRvcFVSTEZpbHRlckNhc2VWYWx1ZSA9
IHRyaWdnZXJPYmplY3QuZ2V0KCZleGVjLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZleGVjLCAi
dG9wLXVybC1maWx0ZXItaXMtY2FzZS1zZW5zaXRpdmUiKSk7CisgICAgY29uc3QgSlNWYWx1ZSB0
b3BVUkxGaWx0ZXJDYXNlVmFsdWUgPSB0cmlnZ2VyT2JqZWN0LmdldCgmZXhlYywgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZyh2bSwgInRvcC11cmwtZmlsdGVyLWlzLWNhc2Utc2Vuc2l0aXZlIikpOwog
ICAgIGlmICh0b3BVUkxGaWx0ZXJDYXNlVmFsdWUgJiYgIXNjb3BlLmV4Y2VwdGlvbigpICYmIHRv
cFVSTEZpbHRlckNhc2VWYWx1ZS5pc0Jvb2xlYW4oKSkKICAgICAgICAgdHJpZ2dlci50b3BVUkxD
b25kaXRpb25Jc0Nhc2VTZW5zaXRpdmUgPSB0b3BVUkxGaWx0ZXJDYXNlVmFsdWUudG9Cb29sZWFu
KCZleGVjKTsKIAotICAgIGNvbnN0IEpTVmFsdWUgcmVzb3VyY2VUeXBlVmFsdWUgPSB0cmlnZ2Vy
T2JqZWN0LmdldCgmZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmZXhlYywgInJlc291cmNl
LXR5cGUiKSk7CisgICAgY29uc3QgSlNWYWx1ZSByZXNvdXJjZVR5cGVWYWx1ZSA9IHRyaWdnZXJP
YmplY3QuZ2V0KCZleGVjLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAicmVzb3VyY2UtdHlw
ZSIpKTsKICAgICBpZiAoIXNjb3BlLmV4Y2VwdGlvbigpICYmIHJlc291cmNlVHlwZVZhbHVlLmlz
T2JqZWN0KCkpIHsKICAgICAgICAgYXV0byB0eXBlRmxhZ3NFcnJvciA9IGdldFR5cGVGbGFncyhl
eGVjLCByZXNvdXJjZVR5cGVWYWx1ZSwgdHJpZ2dlci5mbGFncywgcmVhZFJlc291cmNlVHlwZSk7
CiAgICAgICAgIGlmICh0eXBlRmxhZ3NFcnJvcikKQEAgLTE2Miw3ICsxNjIsNyBAQCBzdGF0aWMg
RXhwZWN0ZWQ8VHJpZ2dlciwgc3RkOjplcnJvcl9jb2RlCiAgICAgfSBlbHNlIGlmICghcmVzb3Vy
Y2VUeXBlVmFsdWUuaXNVbmRlZmluZWQoKSkKICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVk
KENvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTkludmFsaWRUcmlnZ2VyRmxhZ3NBcnJheSk7CiAK
LSAgICBjb25zdCBKU1ZhbHVlIGxvYWRUeXBlVmFsdWUgPSB0cmlnZ2VyT2JqZWN0LmdldCgmZXhl
YywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmZXhlYywgImxvYWQtdHlwZSIpKTsKKyAgICBjb25z
dCBKU1ZhbHVlIGxvYWRUeXBlVmFsdWUgPSB0cmlnZ2VyT2JqZWN0LmdldCgmZXhlYywgSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZyh2bSwgImxvYWQtdHlwZSIpKTsKICAgICBpZiAoIXNjb3BlLmV4Y2Vw
dGlvbigpICYmIGxvYWRUeXBlVmFsdWUuaXNPYmplY3QoKSkgewogICAgICAgICBhdXRvIHR5cGVG
bGFnc0Vycm9yID0gZ2V0VHlwZUZsYWdzKGV4ZWMsIGxvYWRUeXBlVmFsdWUsIHRyaWdnZXIuZmxh
Z3MsIHJlYWRMb2FkVHlwZSk7CiAgICAgICAgIGlmICh0eXBlRmxhZ3NFcnJvcikKQEAgLTE3MCw3
ICsxNzAsNyBAQCBzdGF0aWMgRXhwZWN0ZWQ8VHJpZ2dlciwgc3RkOjplcnJvcl9jb2RlCiAgICAg
fSBlbHNlIGlmICghbG9hZFR5cGVWYWx1ZS5pc1VuZGVmaW5lZCgpKQogICAgICAgICByZXR1cm4g
bWFrZVVuZXhwZWN0ZWQoQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OSW52YWxpZFRyaWdnZXJG
bGFnc0FycmF5KTsKIAotICAgIGNvbnN0IEpTVmFsdWUgaWZEb21haW5WYWx1ZSA9IHRyaWdnZXJP
YmplY3QuZ2V0KCZleGVjLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZleGVjLCAiaWYtZG9tYWlu
IikpOworICAgIGNvbnN0IEpTVmFsdWUgaWZEb21haW5WYWx1ZSA9IHRyaWdnZXJPYmplY3QuZ2V0
KCZleGVjLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiaWYtZG9tYWluIikpOwogICAgIGlm
ICghc2NvcGUuZXhjZXB0aW9uKCkgJiYgaWZEb21haW5WYWx1ZS5pc09iamVjdCgpKSB7CiAgICAg
ICAgIGF1dG8gaWZEb21haW4gPSBnZXREb21haW5MaXN0KGV4ZWMsIGFzT2JqZWN0KGlmRG9tYWlu
VmFsdWUpKTsKICAgICAgICAgaWYgKCFpZkRvbWFpbi5oYXNfdmFsdWUoKSkKQEAgLTE4Myw3ICsx
ODMsNyBAQCBzdGF0aWMgRXhwZWN0ZWQ8VHJpZ2dlciwgc3RkOjplcnJvcl9jb2RlCiAgICAgfSBl
bHNlIGlmICghaWZEb21haW5WYWx1ZS5pc1VuZGVmaW5lZCgpKQogICAgICAgICByZXR1cm4gbWFr
ZVVuZXhwZWN0ZWQoQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OSW52YWxpZENvbmRpdGlvbkxp
c3QpOwogCi0gICAgY29uc3QgSlNWYWx1ZSB1bmxlc3NEb21haW5WYWx1ZSA9IHRyaWdnZXJPYmpl
Y3QuZ2V0KCZleGVjLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZleGVjLCAidW5sZXNzLWRvbWFp
biIpKTsKKyAgICBjb25zdCBKU1ZhbHVlIHVubGVzc0RvbWFpblZhbHVlID0gdHJpZ2dlck9iamVj
dC5nZXQoJmV4ZWMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJ1bmxlc3MtZG9tYWluIikp
OwogICAgIGlmICghc2NvcGUuZXhjZXB0aW9uKCkgJiYgdW5sZXNzRG9tYWluVmFsdWUuaXNPYmpl
Y3QoKSkgewogICAgICAgICBpZiAodHJpZ2dlci5jb25kaXRpb25UeXBlICE9IFRyaWdnZXI6OkNv
bmRpdGlvblR5cGU6Ok5vbmUpCiAgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoQ29u
dGVudEV4dGVuc2lvbkVycm9yOjpKU09OTXVsdGlwbGVDb25kaXRpb25zKTsKQEAgLTE5Nyw3ICsx
OTcsNyBAQCBzdGF0aWMgRXhwZWN0ZWQ8VHJpZ2dlciwgc3RkOjplcnJvcl9jb2RlCiAgICAgfSBl
bHNlIGlmICghdW5sZXNzRG9tYWluVmFsdWUuaXNVbmRlZmluZWQoKSkKICAgICAgICAgcmV0dXJu
IG1ha2VVbmV4cGVjdGVkKENvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTkludmFsaWRDb25kaXRp
b25MaXN0KTsKIAotICAgIGNvbnN0IEpTVmFsdWUgaWZUb3BVUkxWYWx1ZSA9IHRyaWdnZXJPYmpl
Y3QuZ2V0KCZleGVjLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZleGVjLCAiaWYtdG9wLXVybCIp
KTsKKyAgICBjb25zdCBKU1ZhbHVlIGlmVG9wVVJMVmFsdWUgPSB0cmlnZ2VyT2JqZWN0LmdldCgm
ZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImlmLXRvcC11cmwiKSk7CiAgICAgaWYg
KCFzY29wZS5leGNlcHRpb24oKSAmJiBpZlRvcFVSTFZhbHVlLmlzT2JqZWN0KCkpIHsKICAgICAg
ICAgaWYgKHRyaWdnZXIuY29uZGl0aW9uVHlwZSAhPSBUcmlnZ2VyOjpDb25kaXRpb25UeXBlOjpO
b25lKQogICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKENvbnRlbnRFeHRlbnNpb25F
cnJvcjo6SlNPTk11bHRpcGxlQ29uZGl0aW9ucyk7CkBAIC0yMTEsNyArMjExLDcgQEAgc3RhdGlj
IEV4cGVjdGVkPFRyaWdnZXIsIHN0ZDo6ZXJyb3JfY29kZQogICAgIH0gZWxzZSBpZiAoIWlmVG9w
VVJMVmFsdWUuaXNVbmRlZmluZWQoKSkKICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKENv
bnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTkludmFsaWRDb25kaXRpb25MaXN0KTsKIAotICAgIGNv
bnN0IEpTVmFsdWUgdW5sZXNzVG9wVVJMVmFsdWUgPSB0cmlnZ2VyT2JqZWN0LmdldCgmZXhlYywg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmZXhlYywgInVubGVzcy10b3AtdXJsIikpOworICAgIGNv
bnN0IEpTVmFsdWUgdW5sZXNzVG9wVVJMVmFsdWUgPSB0cmlnZ2VyT2JqZWN0LmdldCgmZXhlYywg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInVubGVzcy10b3AtdXJsIikpOwogICAgIGlmICgh
c2NvcGUuZXhjZXB0aW9uKCkgJiYgdW5sZXNzVG9wVVJMVmFsdWUuaXNPYmplY3QoKSkgewogICAg
ICAgICBpZiAodHJpZ2dlci5jb25kaXRpb25UeXBlICE9IFRyaWdnZXI6OkNvbmRpdGlvblR5cGU6
Ok5vbmUpCiAgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoQ29udGVudEV4dGVuc2lv
bkVycm9yOjpKU09OTXVsdGlwbGVDb25kaXRpb25zKTsKQEAgLTI0NSwxMSArMjQ1LDExIEBAIHN0
YXRpYyBFeHBlY3RlZDxPcHRpb25hbDxBY3Rpb24+LCBzdGQ6OmUKICAgICBWTSYgdm0gPSBleGVj
LnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAg
Y29uc3QgSlNWYWx1ZSBhY3Rpb25PYmplY3QgPSBydWxlT2JqZWN0LmdldCgmZXhlYywgSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZygmZXhlYywgImFjdGlvbiIpKTsKKyAgICBjb25zdCBKU1ZhbHVlIGFj
dGlvbk9iamVjdCA9IHJ1bGVPYmplY3QuZ2V0KCZleGVjLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KHZtLCAiYWN0aW9uIikpOwogICAgIGlmIChzY29wZS5leGNlcHRpb24oKSB8fCAhYWN0aW9uT2Jq
ZWN0LmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChDb250ZW50RXh0
ZW5zaW9uRXJyb3I6OkpTT05JbnZhbGlkQWN0aW9uKTsKIAotICAgIGNvbnN0IEpTVmFsdWUgdHlw
ZU9iamVjdCA9IGFjdGlvbk9iamVjdC5nZXQoJmV4ZWMsIElkZW50aWZpZXI6OmZyb21TdHJpbmco
JmV4ZWMsICJ0eXBlIikpOworICAgIGNvbnN0IEpTVmFsdWUgdHlwZU9iamVjdCA9IGFjdGlvbk9i
amVjdC5nZXQoJmV4ZWMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJ0eXBlIikpOwogICAg
IGlmIChzY29wZS5leGNlcHRpb24oKSB8fCAhdHlwZU9iamVjdC5pc1N0cmluZygpKQogICAgICAg
ICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OSW52YWxp
ZEFjdGlvblR5cGUpOwogCkBAIC0yNjIsNyArMjYyLDcgQEAgc3RhdGljIEV4cGVjdGVkPE9wdGlv
bmFsPEFjdGlvbj4sIHN0ZDo6ZQogICAgIGlmIChhY3Rpb25UeXBlID09ICJibG9jay1jb29raWVz
IikKICAgICAgICAgcmV0dXJuIHsgQWN0aW9uKEFjdGlvblR5cGU6OkJsb2NrQ29va2llcykgfTsK
ICAgICBpZiAoYWN0aW9uVHlwZSA9PSAiY3NzLWRpc3BsYXktbm9uZSIpIHsKLSAgICAgICAgSlNW
YWx1ZSBzZWxlY3RvciA9IGFjdGlvbk9iamVjdC5nZXQoJmV4ZWMsIElkZW50aWZpZXI6OmZyb21T
dHJpbmcoJmV4ZWMsICJzZWxlY3RvciIpKTsKKyAgICAgICAgSlNWYWx1ZSBzZWxlY3RvciA9IGFj
dGlvbk9iamVjdC5nZXQoJmV4ZWMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJzZWxlY3Rv
ciIpKTsKICAgICAgICAgaWYgKHNjb3BlLmV4Y2VwdGlvbigpIHx8ICFzZWxlY3Rvci5pc1N0cmlu
ZygpKQogICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKENvbnRlbnRFeHRlbnNpb25F
cnJvcjo6SlNPTkludmFsaWRDU1NEaXNwbGF5Tm9uZUFjdGlvblR5cGUpOwogCkBAIC0yNzYsNyAr
Mjc2LDcgQEAgc3RhdGljIEV4cGVjdGVkPE9wdGlvbmFsPEFjdGlvbj4sIHN0ZDo6ZQogICAgIGlm
IChhY3Rpb25UeXBlID09ICJtYWtlLWh0dHBzIikKICAgICAgICAgcmV0dXJuIHsgQWN0aW9uKEFj
dGlvblR5cGU6Ok1ha2VIVFRQUykgfTsKICAgICBpZiAoYWN0aW9uVHlwZSA9PSAibm90aWZ5Iikg
ewotICAgICAgICBKU1ZhbHVlIG5vdGlmaWNhdGlvbiA9IGFjdGlvbk9iamVjdC5nZXQoJmV4ZWMs
IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJmV4ZWMsICJub3RpZmljYXRpb24iKSk7CisgICAgICAg
IEpTVmFsdWUgbm90aWZpY2F0aW9uID0gYWN0aW9uT2JqZWN0LmdldCgmZXhlYywgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZyh2bSwgIm5vdGlmaWNhdGlvbiIpKTsKICAgICAgICAgaWYgKHNjb3BlLmV4
Y2VwdGlvbigpIHx8ICFub3RpZmljYXRpb24uaXNTdHJpbmcoKSkKICAgICAgICAgICAgIHJldHVy
biBtYWtlVW5leHBlY3RlZChDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05JbnZhbGlkTm90aWZp
Y2F0aW9uKTsKICAgICAgICAgcmV0dXJuIHsgQWN0aW9uKEFjdGlvblR5cGU6Ok5vdGlmeSwgYXNT
dHJpbmcobm90aWZpY2F0aW9uKS0+dmFsdWUoJmV4ZWMpKSB9OwpJbmRleDogU291cmNlL1dlYkNv
cmUvY3J5cHRvL1N1YnRsZUNyeXB0by5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
Y3J5cHRvL1N1YnRsZUNyeXB0by5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9XZWJD
b3JlL2NyeXB0by9TdWJ0bGVDcnlwdG8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTk1LDcgKzk1LDcgQEAg
c3RhdGljIEV4Y2VwdGlvbk9yPHN0ZDo6dW5pcXVlX3B0cjxDcnlwdAogCiAgICAgaWYgKFdURjo6
aG9sZHNfYWx0ZXJuYXRpdmU8U3RyaW5nPihhbGdvcml0aG1JZGVudGlmaWVyKSkgewogICAgICAg
ICBhdXRvIG5ld1BhcmFtcyA9IFN0cm9uZzxKU09iamVjdD4odm0sIGNvbnN0cnVjdEVtcHR5T2Jq
ZWN0KCZzdGF0ZSkpOwotICAgICAgICBuZXdQYXJhbXMtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZygmdm0sICJuYW1lIiksIGpzU3RyaW5nKCZzdGF0ZSwgV1RGOjpnZXQ8U3Ry
aW5nPihhbGdvcml0aG1JZGVudGlmaWVyKSkpOworICAgICAgICBuZXdQYXJhbXMtPnB1dERpcmVj
dCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIm5hbWUiKSwganNTdHJpbmcodm0sIFdU
Rjo6Z2V0PFN0cmluZz4oYWxnb3JpdGhtSWRlbnRpZmllcikpKTsKICAgICAgICAgCiAgICAgICAg
IHJldHVybiBub3JtYWxpemVDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzKHN0YXRlLCBuZXdQYXJh
bXMsIG9wZXJhdGlvbik7CiAgICAgfQpAQCAtMjQxLDExICsyNDEsMTEgQEAgc3RhdGljIEV4Y2Vw
dGlvbk9yPHN0ZDo6dW5pcXVlX3B0cjxDcnlwdAogICAgICAgICBzd2l0Y2ggKCppZGVudGlmaWVy
KSB7CiAgICAgICAgIGNhc2UgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6RUNESDogewogICAg
ICAgICAgICAgLy8gUmVtb3ZlIHRoaXMgaGFjayBvbmNlIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNjkzMzMgaXMgZml4ZWQuCi0gICAgICAgICAgICBKU1ZhbHVlIG5h
bWVWYWx1ZSA9IHZhbHVlLmdldCgpLT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KCZzdGF0ZSwgIm5hbWUiKSk7Ci0gICAgICAgICAgICBKU1ZhbHVlIHB1YmxpY1ZhbHVlID0gdmFs
dWUuZ2V0KCktPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAicHVi
bGljIikpOworICAgICAgICAgICAgSlNWYWx1ZSBuYW1lVmFsdWUgPSB2YWx1ZS5nZXQoKS0+Z2V0
KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIm5hbWUiKSk7CisgICAgICAgICAg
ICBKU1ZhbHVlIHB1YmxpY1ZhbHVlID0gdmFsdWUuZ2V0KCktPmdldCgmc3RhdGUsIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcodm0sICJwdWJsaWMiKSk7CiAgICAgICAgICAgICBKU09iamVjdCogbmV3
VmFsdWUgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdCgmc3RhdGUpOwotICAgICAgICAgICAgbmV3VmFs
dWUtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJuYW1lIiksIG5h
bWVWYWx1ZSk7Ci0gICAgICAgICAgICBuZXdWYWx1ZS0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKCZ2bSwgInB1YmxpY0tleSIpLCBwdWJsaWNWYWx1ZSk7CisgICAgICAgICAg
ICBuZXdWYWx1ZS0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAibmFt
ZSIpLCBuYW1lVmFsdWUpOworICAgICAgICAgICAgbmV3VmFsdWUtPnB1dERpcmVjdCh2bSwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInB1YmxpY0tleSIpLCBwdWJsaWNWYWx1ZSk7CiAKICAg
ICAgICAgICAgIGF1dG8gcGFyYW1zID0gY29udmVydERpY3Rpb25hcnk8Q3J5cHRvQWxnb3JpdGht
RWNkaEtleURlcml2ZVBhcmFtcz4oc3RhdGUsIG5ld1ZhbHVlKTsKICAgICAgICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIEV4Y2VwdGlvbiB7IEV4aXN0aW5nRXhjZXB0aW9uRXJyb3Ig
fSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb21qaXQvRE9NSklUSGVscGVycy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbWppdC9ET01KSVRIZWxwZXJzLmgJKHJldmlzaW9uIDI0
OTEyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbWppdC9ET01KSVRIZWxwZXJzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIElu
Yy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE5IEFwcGxl
IEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtNTgsNyArNTgsNyBAQCBKU0M6OkVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gdG9X
cmFwCiAgICAgQVNTRVJUKGV4ZWMpOwogICAgIEFTU0VSVChyZXN1bHQpOwogICAgIEFTU0VSVChn
bG9iYWxPYmplY3QpOwotICAgIEpTQzo6TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmZXhl
Yy0+dm0oKSwgZXhlYyk7CisgICAgSlNDOjpOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKGds
b2JhbE9iamVjdC0+dm0oKSwgZXhlYyk7CiAgICAgcmV0dXJuIEpTQzo6SlNWYWx1ZTo6ZW5jb2Rl
KHRvSlMoZXhlYywgc3RhdGljX2Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3Qp
LCAqc3RhdGljX2Nhc3Q8V3JhcHBlZE5vZGUqPihyZXN1bHQpKSk7CiB9CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysg
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDM3Niw3ICs0Mzc2LDcgQEAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb250cm9sbGVySlNWYWx1
ZShKUwogICAgIGlmICghbWVkaWFKU1dyYXBwZXJPYmplY3QpCiAgICAgICAgIHJldHVybiBKU0M6
OmpzTnVsbCgpOwogCi0gICAgSlNDOjpJZGVudGlmaWVyIGNvbnRyb2xzSG9zdCA9IEpTQzo6SWRl
bnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJjb250cm9sc0hvc3QiKTsKKyAgICBKU0M6OklkZW50
aWZpZXIgY29udHJvbHNIb3N0ID0gSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiY29u
dHJvbHNIb3N0Iik7CiAgICAgSlNDOjpKU1ZhbHVlIGNvbnRyb2xzSG9zdEpTV3JhcHBlciA9IG1l
ZGlhSlNXcmFwcGVyT2JqZWN0LT5nZXQoJmV4ZWMsIGNvbnRyb2xzSG9zdCk7CiAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgSlNDOjpqc051bGwoKSk7CiAKQEAgLTQzODQsNyArNDM4NCw3
IEBAIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udHJvbGxlckpTVmFsdWUoSlMKICAgICBpZiAoIWNv
bnRyb2xzSG9zdEpTV3JhcHBlck9iamVjdCkKICAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7
CiAKLSAgICBKU0M6OklkZW50aWZpZXIgY29udHJvbGxlcklEID0gSlNDOjpJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKCZ2bSwgImNvbnRyb2xsZXIiKTsKKyAgICBKU0M6OklkZW50aWZpZXIgY29udHJv
bGxlcklEID0gSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiY29udHJvbGxlciIpOwog
ICAgIEpTQzo6SlNWYWx1ZSBjb250cm9sbGVySlNXcmFwcGVyID0gY29udHJvbHNIb3N0SlNXcmFw
cGVyT2JqZWN0LT5nZXQoJmV4ZWMsIGNvbnRyb2xsZXJJRCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgSlNDOjpqc051bGwoKSk7CiAKQEAgLTQ0NDcsNyArNDQ0Nyw3IEBAIHZvaWQg
SFRNTE1lZGlhRWxlbWVudDo6dXBkYXRlQ2FwdGlvbkNvbnQKICAgICAgICAgLy8gICAgIE5vbmUK
ICAgICAgICAgLy8gUmV0dXJuIHZhbHVlOgogICAgICAgICAvLyAgICAgTm9uZQotICAgICAgICBh
dXRvIG1ldGhvZFZhbHVlID0gY29udHJvbGxlck9iamVjdC0+Z2V0KCZleGVjLCBKU0M6OklkZW50
aWZpZXI6OmZyb21TdHJpbmcoJmV4ZWMsICJ1cGRhdGVDYXB0aW9uQ29udGFpbmVyIikpOworICAg
ICAgICBhdXRvIG1ldGhvZFZhbHVlID0gY29udHJvbGxlck9iamVjdC0+Z2V0KCZleGVjLCBKU0M6
OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJ1cGRhdGVDYXB0aW9uQ29udGFpbmVyIikpOwog
ICAgICAgICBhdXRvKiBtZXRob2RPYmplY3QgPSBKU0M6OmpzRHluYW1pY0Nhc3Q8SlNDOjpKU09i
amVjdCo+KHZtLCBtZXRob2RWYWx1ZSk7CiAgICAgICAgIGlmICghbWV0aG9kT2JqZWN0KQogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNzI3MSw3ICs3MjcxLDcgQEAgYm9vbCBIVE1MTWVk
aWFFbGVtZW50OjplbnN1cmVNZWRpYUNvbnRybwogICAgICAgICBhdXRvJiB2bSA9IGdsb2JhbE9i
amVjdC52bSgpOwogICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7
CiAKLSAgICAgICAgYXV0byBmdW5jdGlvblZhbHVlID0gZ2xvYmFsT2JqZWN0LmdldCgmZXhlYywg
SlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZleGVjLCAiY3JlYXRlQ29udHJvbHMiKSk7Cisg
ICAgICAgIGF1dG8gZnVuY3Rpb25WYWx1ZSA9IGdsb2JhbE9iamVjdC5nZXQoJmV4ZWMsIEpTQzo6
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImNyZWF0ZUNvbnRyb2xzIikpOwogICAgICAgICBp
ZiAoZnVuY3Rpb25WYWx1ZS5pc0Z1bmN0aW9uKHZtKSkKICAgICAgICAgICAgIHJldHVybiB0cnVl
OwogCkBAIC03MzIzLDcgKzczMjMsNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnNldENvbnRy
b2xsZXJKU1ByCiAgICAgICAgIGlmICghY29udHJvbGxlck9iamVjdCkKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgICAgICBjb250cm9sbGVyT2JqZWN0LT5tZXRob2RUYWJsZSh2bSkt
PnB1dChjb250cm9sbGVyT2JqZWN0LCAmZXhlYywgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KCZleGVjLCBwcm9wZXJ0eU5hbWUpLCBwcm9wZXJ0eVZhbHVlLCBwcm9wZXJ0eVNsb3QpOworICAg
ICAgICBjb250cm9sbGVyT2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPnB1dChjb250cm9sbGVyT2Jq
ZWN0LCAmZXhlYywgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBwcm9wZXJ0eU5hbWUp
LCBwcm9wZXJ0eVZhbHVlLCBwcm9wZXJ0eVNsb3QpOwogCiAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0pOwpAQCAtNzM0OSw3ICs3MzQ5LDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpkaWRB
ZGRVc2VyQWdlbnRTaAogICAgICAgICAvLyBSZXR1cm4gdmFsdWU6CiAgICAgICAgIC8vICAgICBB
IHJlZmVyZW5jZSB0byB0aGUgY3JlYXRlZCBtZWRpYSBjb250cm9sbGVyIGluc3RhbmNlLgogCi0g
ICAgICAgIGF1dG8gZnVuY3Rpb25WYWx1ZSA9IGdsb2JhbE9iamVjdC5nZXQoJmV4ZWMsIEpTQzo6
SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmZXhlYywgImNyZWF0ZUNvbnRyb2xzIikpOworICAgICAg
ICBhdXRvIGZ1bmN0aW9uVmFsdWUgPSBnbG9iYWxPYmplY3QuZ2V0KCZleGVjLCBKU0M6OklkZW50
aWZpZXI6OmZyb21TdHJpbmcodm0sICJjcmVhdGVDb250cm9scyIpKTsKICAgICAgICAgaWYgKGZ1
bmN0aW9uVmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKIApAQCAtNzM4MSwyMSArNzM4MSwyMSBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmRpZEFk
ZFVzZXJBZ2VudFNoCiAgICAgICAgIC8vIENvbm5lY3QgdGhlIE1lZGlhLCBNZWRpYUNvbnRyb2xs
ZXJIb3N0LCBhbmQgQ29udHJvbGxlciBzbyB0aGUgR0Mga25vd3MgYWJvdXQgdGhlaXIgcmVsYXRp
b25zaGlwCiAgICAgICAgIGF1dG8qIG1lZGlhSlNXcmFwcGVyT2JqZWN0ID0gbWVkaWFKU1dyYXBw
ZXIudG9PYmplY3QoJmV4ZWMpOwogICAgICAgICBzY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwot
ICAgICAgICBhdXRvIGNvbnRyb2xzSG9zdCA9IEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygm
ZXhlYy52bSgpLCAiY29udHJvbHNIb3N0Iik7CisgICAgICAgIGF1dG8gY29udHJvbHNIb3N0ID0g
SlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiY29udHJvbHNIb3N0Iik7CiAKICAgICAg
ICAgQVNTRVJUKCFtZWRpYUpTV3JhcHBlck9iamVjdC0+aGFzUHJvcGVydHkoJmV4ZWMsIGNvbnRy
b2xzSG9zdCkpOwogCi0gICAgICAgIG1lZGlhSlNXcmFwcGVyT2JqZWN0LT5wdXREaXJlY3QoZXhl
Yy52bSgpLCBjb250cm9sc0hvc3QsIG1lZGlhQ29udHJvbHNIb3N0SlNXcmFwcGVyLCBKU0M6OlBy
b3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9u
dEVudW0gfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSk7CisgICAgICAgIG1lZGlh
SlNXcmFwcGVyT2JqZWN0LT5wdXREaXJlY3Qodm0sIGNvbnRyb2xzSG9zdCwgbWVkaWFDb250cm9s
c0hvc3RKU1dyYXBwZXIsIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUgfCBKU0M6
OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJl
YWRPbmx5KTsKIAogICAgICAgICBhdXRvKiBtZWRpYUNvbnRyb2xzSG9zdEpTV3JhcHBlck9iamVj
dCA9IEpTQzo6anNEeW5hbWljQ2FzdDxKU0M6OkpTT2JqZWN0Kj4odm0sIG1lZGlhQ29udHJvbHNI
b3N0SlNXcmFwcGVyKTsKICAgICAgICAgaWYgKCFtZWRpYUNvbnRyb2xzSG9zdEpTV3JhcHBlck9i
amVjdCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBhdXRvIGNvbnRyb2xs
ZXIgPSBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJmV4ZWMudm0oKSwgImNvbnRyb2xsZXIi
KTsKKyAgICAgICAgYXV0byBjb250cm9sbGVyID0gSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KHZtLCAiY29udHJvbGxlciIpOwogCiAgICAgICAgIEFTU0VSVCghY29udHJvbGxlck9iamVjdC0+
aGFzUHJvcGVydHkoJmV4ZWMsIGNvbnRyb2xsZXIpKTsKIAotICAgICAgICBtZWRpYUNvbnRyb2xz
SG9zdEpTV3JhcHBlck9iamVjdC0+cHV0RGlyZWN0KGV4ZWMudm0oKSwgY29udHJvbGxlciwgY29u
dHJvbGxlclZhbHVlLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgSlNDOjpQ
cm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFk
T25seSk7CisgICAgICAgIG1lZGlhQ29udHJvbHNIb3N0SlNXcmFwcGVyT2JqZWN0LT5wdXREaXJl
Y3Qodm0sIGNvbnRyb2xsZXIsIGNvbnRyb2xsZXJWYWx1ZSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0
ZTo6RG9udERlbGV0ZSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtIHwgSlNDOjpQ
cm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpOwogCiAgICAgICAgIHVwZGF0ZVBhZ2VTY2FsZUZh
Y3RvckpTUHJvcGVydHkoKTsKICAgICAgICAgdXBkYXRlVXNlc0xUUlVzZXJJbnRlcmZhY2VMYXlv
dXREaXJlY3Rpb25KU1Byb3BlcnR5KCk7CkBAIC03NDQ0LDcgKzc0NDQsNyBAQCB2b2lkIEhUTUxN
ZWRpYUVsZW1lbnQ6OnVwZGF0ZU1lZGlhQ29udHJvCiAKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgZmFsc2UpOwogCi0gICAgICAgIGF1dG8gZnVuY3Rpb25WYWx1ZSA9IGNvbnRy
b2xsZXJPYmplY3QtPmdldCgmZXhlYywgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZleGVj
LCAiaGFuZGxlUHJlc2VudGF0aW9uTW9kZUNoYW5nZSIpKTsKKyAgICAgICAgYXV0byBmdW5jdGlv
blZhbHVlID0gY29udHJvbGxlck9iamVjdC0+Z2V0KCZleGVjLCBKU0M6OklkZW50aWZpZXI6OmZy
b21TdHJpbmcodm0sICJoYW5kbGVQcmVzZW50YXRpb25Nb2RlQ2hhbmdlIikpOwogICAgICAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpIHx8IGZ1bmN0aW9uVmFsdWUuaXNVbmRlZmlu
ZWRPck51bGwoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtNzQ4Nyw3ICs3NDg3
LDcgQEAgU3RyaW5nIEhUTUxNZWRpYUVsZW1lbnQ6OmdldEN1cnJlbnRNZWRpYQogCiAgICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKIAotICAgICAgICBhdXRvIGZ1bmN0
aW9uVmFsdWUgPSBjb250cm9sbGVyT2JqZWN0LT5nZXQoJmV4ZWMsIEpTQzo6SWRlbnRpZmllcjo6
ZnJvbVN0cmluZygmZXhlYywgImdldEN1cnJlbnRDb250cm9sc1N0YXR1cyIpKTsKKyAgICAgICAg
YXV0byBmdW5jdGlvblZhbHVlID0gY29udHJvbGxlck9iamVjdC0+Z2V0KCZleGVjLCBKU0M6Oklk
ZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJnZXRDdXJyZW50Q29udHJvbHNTdGF0dXMiKSk7CiAg
ICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkgfHwgZnVuY3Rpb25WYWx1ZS5p
c1VuZGVmaW5lZE9yTnVsbCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkltYWdlRWxlbWVudC5jcHAJKHJldmlz
aW9uIDI0OTEyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkltYWdlRWxlbWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwNSw3ICs0MDUsNyBAQCB2b2lkIEhUTUxQbHVnSW5J
bWFnZUVsZW1lbnQ6OmRpZEFkZFVzZXJBCiAgICAgQVNTRVJUKCFhcmdMaXN0Lmhhc092ZXJmbG93
ZWQoKSk7CiAKICAgICAvLyBJdCBpcyBleHBlY3RlZCB0aGUgSlMgZmlsZSBwcm92aWRlcyBhIGNy
ZWF0ZU92ZXJsYXkoc2hhZG93Um9vdCwgdGl0bGUsIHN1YnRpdGxlKSBmdW5jdGlvbi4KLSAgICBh
dXRvKiBvdmVybGF5ID0gZ2xvYmFsT2JqZWN0LmdldCgmc3RhdGUsIEpTQzo6SWRlbnRpZmllcjo6
ZnJvbVN0cmluZygmc3RhdGUsICJjcmVhdGVPdmVybGF5IikpLnRvT2JqZWN0KCZzdGF0ZSk7Cisg
ICAgYXV0byogb3ZlcmxheSA9IGdsb2JhbE9iamVjdC5nZXQoJnN0YXRlLCBKU0M6OklkZW50aWZp
ZXI6OmZyb21TdHJpbmcodm0sICJjcmVhdGVPdmVybGF5IikpLnRvT2JqZWN0KCZzdGF0ZSk7CiAg
ICAgQVNTRVJUKCFvdmVybGF5ID09ICEhc2NvcGUuZXhjZXB0aW9uKCkpOwogICAgIGlmICghb3Zl
cmxheSkgewogICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHAJKHJldmlz
aW9uIDI0OTEyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVu
ZEhvc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwNy0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwNy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENv
cHlyaWdodCAoQykgMjAwOCBNYXR0IExpbGVrIDx3ZWJraXRAbWF0dGxpbGVrLmNvbT4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKQEAgLTE1OCw3ICsxNTgsNyBAQCB2b2lkIEluc3BlY3RvckZyb250ZW5kSG9z
dDo6YWRkU2VsZlRvR2xvCiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0p
OwogCiAgICAgYXV0byYgZ2xvYmFsT2JqZWN0ID0gKkpTQzo6anNDYXN0PEpTRE9NR2xvYmFsT2Jq
ZWN0Kj4oc3RhdGUubGV4aWNhbEdsb2JhbE9iamVjdCgpKTsKLSAgICBnbG9iYWxPYmplY3QucHV0
RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiSW5zcGVjdG9yRnJv
bnRlbmRIb3N0IiksIHRvSlM8SURMSW50ZXJmYWNlPEluc3BlY3RvckZyb250ZW5kSG9zdD4+KHN0
YXRlLCBnbG9iYWxPYmplY3QsICp0aGlzKSk7CisgICAgZ2xvYmFsT2JqZWN0LnB1dERpcmVjdCh2
bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiSW5zcGVjdG9yRnJvbnRlbmRIb3N0
IiksIHRvSlM8SURMSW50ZXJmYWNlPEluc3BlY3RvckZyb250ZW5kSG9zdD4+KHN0YXRlLCBnbG9i
YWxPYmplY3QsICp0aGlzKSk7CiAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmVwb3J0RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUuZXhjZXB0aW9uKCkpOwogfQpA
QCAtNDA5LDcgKzQwOSw4IEBAIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmRIb3N0OjpzaG93Q29udGV4
dE0KICAgICBBU1NFUlQobV9mcm9udGVuZFBhZ2UpOwogCiAgICAgYXV0byYgc3RhdGUgPSAqZXhl
Y1N0YXRlRnJvbVBhZ2UoZGVidWdnZXJXb3JsZCgpLCBtX2Zyb250ZW5kUGFnZSk7Ci0gICAgYXV0
byB2YWx1ZSA9IHN0YXRlLmxleGljYWxHbG9iYWxPYmplY3QoKS0+Z2V0KCZzdGF0ZSwgSlNDOjpJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZS52bSgpLCAiSW5zcGVjdG9yRnJvbnRlbmRBUEki
KSk7CisgICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gdmFsdWUgPSBzdGF0ZS5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCktPmdldCgmc3RhdGUsIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0
cmluZyh2bSwgIkluc3BlY3RvckZyb250ZW5kQVBJIikpOwogICAgIEFTU0VSVCh2YWx1ZSk7CiAg
ICAgQVNTRVJUKHZhbHVlLmlzT2JqZWN0KCkpOwogICAgIGF1dG8qIGZyb250ZW5kQVBJT2JqZWN0
ID0gYXNPYmplY3QodmFsdWUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1dlYklu
amVjdGVkU2NyaXB0SG9zdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL1dlYkluamVjdGVkU2NyaXB0SG9zdC5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9XZWJJbmplY3RlZFNjcmlwdEhvc3QuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtNDgsMTMgKzQ4LDEzIEBAIEpTVmFsdWUgV2ViSW5qZWN0ZWRTY3JpcHRIb3N0Ojpz
dWJ0eXBlKEUKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGlmICh2YWx1ZS5pbmhl
cml0czxKU05vZGU+KHZtKSkKLSAgICAgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyhleGVj
LCAibm9kZSJfcyk7CisgICAgICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcodm0sICJub2Rl
Il9zKTsKICAgICBpZiAodmFsdWUuaW5oZXJpdHM8SlNOb2RlTGlzdD4odm0pKQotICAgICAgICBy
ZXR1cm4ganNOb250cml2aWFsU3RyaW5nKGV4ZWMsICJhcnJheSJfcyk7CisgICAgICAgIHJldHVy
biBqc05vbnRyaXZpYWxTdHJpbmcodm0sICJhcnJheSJfcyk7CiAgICAgaWYgKHZhbHVlLmluaGVy
aXRzPEpTSFRNTENvbGxlY3Rpb24+KHZtKSkKLSAgICAgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0
cmluZyhleGVjLCAiYXJyYXkiX3MpOworICAgICAgICByZXR1cm4ganNOb250cml2aWFsU3RyaW5n
KHZtLCAiYXJyYXkiX3MpOwogICAgIGlmICh2YWx1ZS5pbmhlcml0czxKU0RPTUV4Y2VwdGlvbj4o
dm0pKQotICAgICAgICByZXR1cm4ganNOb250cml2aWFsU3RyaW5nKGV4ZWMsICJlcnJvciJfcyk7
CisgICAgICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcodm0sICJlcnJvciJfcyk7CiAKICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KQEAgLTYzLDQ2ICs2Myw0NiBAQCBKU1ZhbHVlIFdl
YkluamVjdGVkU2NyaXB0SG9zdDo6c3VidHlwZShFCiBzdGF0aWMgSlNPYmplY3QqIGNvbnN0cnVj
dEludGVybmFsUHJvcGVydHkoVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFN0cmluZyYg
bmFtZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBhdXRvKiBvYmplY3QgPSBjb25zdHJ1Y3RFbXB0
eU9iamVjdChleGVjKTsKLSAgICBvYmplY3QtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyhleGVjLCAibmFtZSIpLCBqc1N0cmluZyhleGVjLCBuYW1lKSk7Ci0gICAgb2JqZWN0
LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgInZhbHVlIiksIHZh
bHVlKTsKKyAgICBvYmplY3QtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2
bSwgIm5hbWUiKSwganNTdHJpbmcodm0sIG5hbWUpKTsKKyAgICBvYmplY3QtPnB1dERpcmVjdCh2
bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInZhbHVlIiksIHZhbHVlKTsKICAgICByZXR1
cm4gb2JqZWN0OwogfQogCiBzdGF0aWMgSlNPYmplY3QqIG9iamVjdEZvclBheW1lbnRPcHRpb25z
KFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBjb25zdCBQYXltZW50T3B0aW9ucyYgcGF5bWVudE9w
dGlvbnMpCiB7CiAgICAgYXV0byogb2JqZWN0ID0gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYyk7
Ci0gICAgb2JqZWN0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywg
InJlcXVlc3RQYXllck5hbWUiKSwganNCb29sZWFuKHBheW1lbnRPcHRpb25zLnJlcXVlc3RQYXll
ck5hbWUpKTsKLSAgICBvYmplY3QtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
ZyhleGVjLCAicmVxdWVzdFBheWVyRW1haWwiKSwganNCb29sZWFuKHBheW1lbnRPcHRpb25zLnJl
cXVlc3RQYXllckVtYWlsKSk7Ci0gICAgb2JqZWN0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6
OmZyb21TdHJpbmcoZXhlYywgInJlcXVlc3RQYXllclBob25lIiksIGpzQm9vbGVhbihwYXltZW50
T3B0aW9ucy5yZXF1ZXN0UGF5ZXJQaG9uZSkpOwotICAgIG9iamVjdC0+cHV0RGlyZWN0KHZtLCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJyZXF1ZXN0U2hpcHBpbmciKSwganNCb29sZWFu
KHBheW1lbnRPcHRpb25zLnJlcXVlc3RTaGlwcGluZykpOwotICAgIG9iamVjdC0+cHV0RGlyZWN0
KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJzaGlwcGluZ1R5cGUiKSwganNOb250
cml2aWFsU3RyaW5nKGV4ZWMsIGNvbnZlcnRFbnVtZXJhdGlvblRvU3RyaW5nKHBheW1lbnRPcHRp
b25zLnNoaXBwaW5nVHlwZSkpKTsKKyAgICBvYmplY3QtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZyh2bSwgInJlcXVlc3RQYXllck5hbWUiKSwganNCb29sZWFuKHBheW1lbnRP
cHRpb25zLnJlcXVlc3RQYXllck5hbWUpKTsKKyAgICBvYmplY3QtPnB1dERpcmVjdCh2bSwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInJlcXVlc3RQYXllckVtYWlsIiksIGpzQm9vbGVhbihw
YXltZW50T3B0aW9ucy5yZXF1ZXN0UGF5ZXJFbWFpbCkpOworICAgIG9iamVjdC0+cHV0RGlyZWN0
KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAicmVxdWVzdFBheWVyUGhvbmUiKSwganNC
b29sZWFuKHBheW1lbnRPcHRpb25zLnJlcXVlc3RQYXllclBob25lKSk7CisgICAgb2JqZWN0LT5w
dXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJyZXF1ZXN0U2hpcHBpbmci
KSwganNCb29sZWFuKHBheW1lbnRPcHRpb25zLnJlcXVlc3RTaGlwcGluZykpOworICAgIG9iamVj
dC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAic2hpcHBpbmdUeXBl
IiksIGpzTm9udHJpdmlhbFN0cmluZyh2bSwgY29udmVydEVudW1lcmF0aW9uVG9TdHJpbmcocGF5
bWVudE9wdGlvbnMuc2hpcHBpbmdUeXBlKSkpOwogICAgIHJldHVybiBvYmplY3Q7CiB9CiAKIHN0
YXRpYyBKU09iamVjdCogb2JqZWN0Rm9yUGF5bWVudEN1cnJlbmN5QW1vdW50KFZNJiB2bSwgRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBQYXltZW50Q3VycmVuY3lBbW91bnQmIHBheW1lbnRDdXJyZW5j
eUFtb3VudCkKIHsKICAgICBhdXRvKiBvYmplY3QgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVj
KTsKLSAgICBvYmplY3QtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVj
LCAiY3VycmVuY3kiKSwganNTdHJpbmcoZXhlYywgcGF5bWVudEN1cnJlbmN5QW1vdW50LmN1cnJl
bmN5KSk7Ci0gICAgb2JqZWN0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmco
ZXhlYywgInZhbHVlIiksIGpzU3RyaW5nKGV4ZWMsIHBheW1lbnRDdXJyZW5jeUFtb3VudC52YWx1
ZSkpOworICAgIG9iamVjdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZt
LCAiY3VycmVuY3kiKSwganNTdHJpbmcodm0sIHBheW1lbnRDdXJyZW5jeUFtb3VudC5jdXJyZW5j
eSkpOworICAgIG9iamVjdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZt
LCAidmFsdWUiKSwganNTdHJpbmcodm0sIHBheW1lbnRDdXJyZW5jeUFtb3VudC52YWx1ZSkpOwog
ICAgIHJldHVybiBvYmplY3Q7CiB9CiAKIHN0YXRpYyBKU09iamVjdCogb2JqZWN0Rm9yUGF5bWVu
dEl0ZW0oVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFBheW1lbnRJdGVtJiBwYXltZW50
SXRlbSkKIHsKICAgICBhdXRvKiBvYmplY3QgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjKTsK
LSAgICBvYmplY3QtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCAi
bGFiZWwiKSwganNTdHJpbmcoZXhlYywgcGF5bWVudEl0ZW0ubGFiZWwpKTsKLSAgICBvYmplY3Qt
PnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCAiYW1vdW50IiksIG9i
amVjdEZvclBheW1lbnRDdXJyZW5jeUFtb3VudCh2bSwgZXhlYywgcGF5bWVudEl0ZW0uYW1vdW50
KSk7Ci0gICAgb2JqZWN0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhl
YywgInBlbmRpbmciKSwganNCb29sZWFuKHBheW1lbnRJdGVtLnBlbmRpbmcpKTsKKyAgICBvYmpl
Y3QtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImxhYmVsIiksIGpz
U3RyaW5nKHZtLCBwYXltZW50SXRlbS5sYWJlbCkpOworICAgIG9iamVjdC0+cHV0RGlyZWN0KHZt
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiYW1vdW50IiksIG9iamVjdEZvclBheW1lbnRD
dXJyZW5jeUFtb3VudCh2bSwgZXhlYywgcGF5bWVudEl0ZW0uYW1vdW50KSk7CisgICAgb2JqZWN0
LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJwZW5kaW5nIiksIGpz
Qm9vbGVhbihwYXltZW50SXRlbS5wZW5kaW5nKSk7CiAgICAgcmV0dXJuIG9iamVjdDsKIH0KIAog
c3RhdGljIEpTT2JqZWN0KiBvYmplY3RGb3JQYXltZW50U2hpcHBpbmdPcHRpb24oVk0mIHZtLCBF
eGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFBheW1lbnRTaGlwcGluZ09wdGlvbiYgcGF5bWVudFNoaXBw
aW5nT3B0aW9uKQogewogICAgIGF1dG8qIG9iamVjdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4
ZWMpOwotICAgIG9iamVjdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4
ZWMsICJpZCIpLCBqc1N0cmluZyhleGVjLCBwYXltZW50U2hpcHBpbmdPcHRpb24uaWQpKTsKLSAg
ICBvYmplY3QtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCAibGFi
ZWwiKSwganNTdHJpbmcoZXhlYywgcGF5bWVudFNoaXBwaW5nT3B0aW9uLmxhYmVsKSk7Ci0gICAg
b2JqZWN0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgImFtb3Vu
dCIpLCBvYmplY3RGb3JQYXltZW50Q3VycmVuY3lBbW91bnQodm0sIGV4ZWMsIHBheW1lbnRTaGlw
cGluZ09wdGlvbi5hbW91bnQpKTsKLSAgICBvYmplY3QtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZyhleGVjLCAic2VsZWN0ZWQiKSwganNCb29sZWFuKHBheW1lbnRTaGlwcGlu
Z09wdGlvbi5zZWxlY3RlZCkpOworICAgIG9iamVjdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKHZtLCAiaWQiKSwganNTdHJpbmcodm0sIHBheW1lbnRTaGlwcGluZ09wdGlv
bi5pZCkpOworICAgIG9iamVjdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KHZtLCAibGFiZWwiKSwganNTdHJpbmcodm0sIHBheW1lbnRTaGlwcGluZ09wdGlvbi5sYWJlbCkp
OworICAgIG9iamVjdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAi
YW1vdW50IiksIG9iamVjdEZvclBheW1lbnRDdXJyZW5jeUFtb3VudCh2bSwgZXhlYywgcGF5bWVu
dFNoaXBwaW5nT3B0aW9uLmFtb3VudCkpOworICAgIG9iamVjdC0+cHV0RGlyZWN0KHZtLCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAic2VsZWN0ZWQiKSwganNCb29sZWFuKHBheW1lbnRTaGlw
cGluZ09wdGlvbi5zZWxlY3RlZCkpOwogICAgIHJldHVybiBvYmplY3Q7CiB9CiAKQEAgLTExMywx
MCArMTEzLDEwIEBAIHN0YXRpYyBKU09iamVjdCogb2JqZWN0Rm9yUGF5bWVudERldGFpbHMKICAg
ICAgICAgYWRkaXRpb25hbERpc3BsYXlJdGVtcy0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaSwgb2Jq
ZWN0Rm9yUGF5bWVudEl0ZW0odm0sIGV4ZWMsIG1vZGlmaWVyLmFkZGl0aW9uYWxEaXNwbGF5SXRl
bXNbaV0pKTsKIAogICAgIGF1dG8qIG9iamVjdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMp
OwotICAgIG9iamVjdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMs
ICJzdXBwb3J0ZWRNZXRob2RzIiksIGpzU3RyaW5nKGV4ZWMsIG1vZGlmaWVyLnN1cHBvcnRlZE1l
dGhvZHMpKTsKLSAgICBvYmplY3QtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
ZyhleGVjLCAidG90YWwiKSwgIW1vZGlmaWVyLnRvdGFsID8ganNOdWxsKCkgOiBvYmplY3RGb3JQ
YXltZW50SXRlbSh2bSwgZXhlYywgKm1vZGlmaWVyLnRvdGFsKSk7Ci0gICAgb2JqZWN0LT5wdXRE
aXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgImFkZGl0aW9uYWxEaXNwbGF5
SXRlbXMiKSwgYWRkaXRpb25hbERpc3BsYXlJdGVtcyk7Ci0gICAgb2JqZWN0LT5wdXREaXJlY3Qo
dm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgImRhdGEiKSwgIW1vZGlmaWVyLmRhdGEg
PyBqc051bGwoKSA6IG1vZGlmaWVyLmRhdGEuZ2V0KCkpOworICAgIG9iamVjdC0+cHV0RGlyZWN0
KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAic3VwcG9ydGVkTWV0aG9kcyIpLCBqc1N0
cmluZyh2bSwgbW9kaWZpZXIuc3VwcG9ydGVkTWV0aG9kcykpOworICAgIG9iamVjdC0+cHV0RGly
ZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAidG90YWwiKSwgIW1vZGlmaWVyLnRv
dGFsID8ganNOdWxsKCkgOiBvYmplY3RGb3JQYXltZW50SXRlbSh2bSwgZXhlYywgKm1vZGlmaWVy
LnRvdGFsKSk7CisgICAgb2JqZWN0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJp
bmcodm0sICJhZGRpdGlvbmFsRGlzcGxheUl0ZW1zIiksIGFkZGl0aW9uYWxEaXNwbGF5SXRlbXMp
OworICAgIG9iamVjdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAi
ZGF0YSIpLCAhbW9kaWZpZXIuZGF0YSA/IGpzTnVsbCgpIDogbW9kaWZpZXIuZGF0YS5nZXQoKSk7
CiAgICAgcmV0dXJuIG9iamVjdDsKIH0KIApAQCAtMTM1LDI3ICsxMzUsMjcgQEAgc3RhdGljIEpT
T2JqZWN0KiBvYmplY3RGb3JQYXltZW50RGV0YWlscwogICAgICAgICBtb2RpZmllcnMtPnB1dERp
cmVjdEluZGV4KGV4ZWMsIGksIG9iamVjdEZvclBheW1lbnREZXRhaWxzTW9kaWZpZXIodm0sIGV4
ZWMsIHBheW1lbnREZXRhaWxzLm1vZGlmaWVyc1tpXSkpOwogCiAgICAgYXV0byogb2JqZWN0ID0g
Y29uc3RydWN0RW1wdHlPYmplY3QoZXhlYyk7Ci0gICAgb2JqZWN0LT5wdXREaXJlY3Qodm0sIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgImlkIiksIGpzU3RyaW5nKGV4ZWMsIHBheW1lbnRE
ZXRhaWxzLmlkKSk7Ci0gICAgb2JqZWN0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21T
dHJpbmcoZXhlYywgInRvdGFsIiksIG9iamVjdEZvclBheW1lbnRJdGVtKHZtLCBleGVjLCBwYXlt
ZW50RGV0YWlscy50b3RhbCkpOwotICAgIG9iamVjdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKGV4ZWMsICJkaXNwbGF5SXRlbXMiKSwgZGlzcGxheUl0ZW1zKTsKLSAgICBv
YmplY3QtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCAic2hpcHBp
bmdPcHRpb25zIiksIHNoaXBwaW5nT3B0aW9ucyk7Ci0gICAgb2JqZWN0LT5wdXREaXJlY3Qodm0s
IElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgIm1vZGlmaWVycyIpLCBtb2RpZmllcnMpOwor
ICAgIG9iamVjdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiaWQi
KSwganNTdHJpbmcodm0sIHBheW1lbnREZXRhaWxzLmlkKSk7CisgICAgb2JqZWN0LT5wdXREaXJl
Y3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJ0b3RhbCIpLCBvYmplY3RGb3JQYXlt
ZW50SXRlbSh2bSwgZXhlYywgcGF5bWVudERldGFpbHMudG90YWwpKTsKKyAgICBvYmplY3QtPnB1
dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImRpc3BsYXlJdGVtcyIpLCBk
aXNwbGF5SXRlbXMpOworICAgIG9iamVjdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKHZtLCAic2hpcHBpbmdPcHRpb25zIiksIHNoaXBwaW5nT3B0aW9ucyk7CisgICAgb2Jq
ZWN0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJtb2RpZmllcnMi
KSwgbW9kaWZpZXJzKTsKICAgICByZXR1cm4gb2JqZWN0OwogfQogCi1zdGF0aWMgSlNTdHJpbmcq
IGpzU3RyaW5nRm9yUGF5bWVudFJlcXVlc3RTdGF0ZShWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywg
UGF5bWVudFJlcXVlc3Q6OlN0YXRlIHN0YXRlKQorc3RhdGljIEpTU3RyaW5nKiBqc1N0cmluZ0Zv
clBheW1lbnRSZXF1ZXN0U3RhdGUoVk0mIHZtLCBQYXltZW50UmVxdWVzdDo6U3RhdGUgc3RhdGUp
CiB7CiAgICAgc3dpdGNoIChzdGF0ZSkgewogICAgIGNhc2UgUGF5bWVudFJlcXVlc3Q6OlN0YXRl
OjpDcmVhdGVkOgotICAgICAgICByZXR1cm4ganNOb250cml2aWFsU3RyaW5nKGV4ZWMsICJjcmVh
dGVkIl9zKTsKKyAgICAgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyh2bSwgImNyZWF0ZWQi
X3MpOwogICAgIGNhc2UgUGF5bWVudFJlcXVlc3Q6OlN0YXRlOjpJbnRlcmFjdGl2ZToKLSAgICAg
ICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyhleGVjLCAiaW50ZXJhY3RpdmUiX3MpOworICAg
ICAgICByZXR1cm4ganNOb250cml2aWFsU3RyaW5nKHZtLCAiaW50ZXJhY3RpdmUiX3MpOwogICAg
IGNhc2UgUGF5bWVudFJlcXVlc3Q6OlN0YXRlOjpDbG9zZWQ6Ci0gICAgICAgIHJldHVybiBqc05v
bnRyaXZpYWxTdHJpbmcoZXhlYywgImNsb3NlZCJfcyk7CisgICAgICAgIHJldHVybiBqc05vbnRy
aXZpYWxTdHJpbmcodm0sICJjbG9zZWQiX3MpOwogICAgIH0KIAogICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgIHJldHVybiBqc0VtcHR5U3RyaW5nKCZ2bSk7CisgICAgcmV0dXJuIGpzRW1w
dHlTdHJpbmcodm0pOwogfQogI2VuZGlmCiAKQEAgLTE2OSw3ICsxNjksNyBAQCBKU1ZhbHVlIFdl
YkluamVjdGVkU2NyaXB0SG9zdDo6Z2V0SW50ZXJuCiAgICAgICAgIGF1dG8qIGFycmF5ID0gY29u
c3RydWN0RW1wdHlBcnJheShleGVjLCBudWxscHRyKTsKICAgICAgICAgYXJyYXktPnB1dERpcmVj
dEluZGV4KGV4ZWMsIGluZGV4KyssIGNvbnN0cnVjdEludGVybmFsUHJvcGVydHkodm0sIGV4ZWMs
ICJvcHRpb25zIl9zLCBvYmplY3RGb3JQYXltZW50T3B0aW9ucyh2bSwgZXhlYywgcGF5bWVudFJl
cXVlc3QtPnBheW1lbnRPcHRpb25zKCkpKSk7CiAgICAgICAgIGFycmF5LT5wdXREaXJlY3RJbmRl
eChleGVjLCBpbmRleCsrLCBjb25zdHJ1Y3RJbnRlcm5hbFByb3BlcnR5KHZtLCBleGVjLCAiZGV0
YWlscyJfcywgb2JqZWN0Rm9yUGF5bWVudERldGFpbHModm0sIGV4ZWMsIHBheW1lbnRSZXF1ZXN0
LT5wYXltZW50RGV0YWlscygpKSkpOwotICAgICAgICBhcnJheS0+cHV0RGlyZWN0SW5kZXgoZXhl
YywgaW5kZXgrKywgY29uc3RydWN0SW50ZXJuYWxQcm9wZXJ0eSh2bSwgZXhlYywgInN0YXRlIl9z
LCBqc1N0cmluZ0ZvclBheW1lbnRSZXF1ZXN0U3RhdGUodm0sIGV4ZWMsIHBheW1lbnRSZXF1ZXN0
LT5zdGF0ZSgpKSkpOworICAgICAgICBhcnJheS0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaW5kZXgr
KywgY29uc3RydWN0SW50ZXJuYWxQcm9wZXJ0eSh2bSwgZXhlYywgInN0YXRlIl9zLCBqc1N0cmlu
Z0ZvclBheW1lbnRSZXF1ZXN0U3RhdGUodm0sIHBheW1lbnRSZXF1ZXN0LT5zdGF0ZSgpKSkpOwog
ICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgICAgICByZXR1cm4g
YXJyYXk7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNw
ZWN0b3JDYW52YXNBZ2VudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2FnZW50cy9JbnNwZWN0b3JDYW52YXNBZ2VudC5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysr
IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ2FudmFzQWdlbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTct
MjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTUzMCwxMyArNTMwLDE0IEBAIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdl
bnQ6OmNvbnNvbGVTdGFydFIKIAogICAgIFJlY29yZGluZ09wdGlvbnMgcmVjb3JkaW5nT3B0aW9u
czsKICAgICBpZiAob3B0aW9ucykgewotICAgICAgICBpZiAoSlNDOjpKU1ZhbHVlIG9wdGlvblNp
bmdsZUZyYW1lID0gb3B0aW9ucy0+Z2V0KCZleGVjLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJp
bmcoJmV4ZWMsICJzaW5nbGVGcmFtZSIpKSkKKyAgICAgICAgSlNDOjpWTSYgdm0gPSBleGVjLnZt
KCk7CisgICAgICAgIGlmIChKU0M6OkpTVmFsdWUgb3B0aW9uU2luZ2xlRnJhbWUgPSBvcHRpb25z
LT5nZXQoJmV4ZWMsIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInNpbmdsZUZyYW1l
IikpKQogICAgICAgICAgICAgcmVjb3JkaW5nT3B0aW9ucy5mcmFtZUNvdW50ID0gb3B0aW9uU2lu
Z2xlRnJhbWUudG9Cb29sZWFuKCZleGVjKSA/IDEgOiAwOwotICAgICAgICBpZiAoSlNDOjpKU1Zh
bHVlIG9wdGlvbkZyYW1lQ291bnQgPSBvcHRpb25zLT5nZXQoJmV4ZWMsIEpTQzo6SWRlbnRpZmll
cjo6ZnJvbVN0cmluZygmZXhlYywgImZyYW1lQ291bnQiKSkpCisgICAgICAgIGlmIChKU0M6OkpT
VmFsdWUgb3B0aW9uRnJhbWVDb3VudCA9IG9wdGlvbnMtPmdldCgmZXhlYywgSlNDOjpJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKHZtLCAiZnJhbWVDb3VudCIpKSkKICAgICAgICAgICAgIHJlY29yZGlu
Z09wdGlvbnMuZnJhbWVDb3VudCA9IG9wdGlvbkZyYW1lQ291bnQudG9OdW1iZXIoJmV4ZWMpOwot
ICAgICAgICBpZiAoSlNDOjpKU1ZhbHVlIG9wdGlvbk1lbW9yeUxpbWl0ID0gb3B0aW9ucy0+Z2V0
KCZleGVjLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJmV4ZWMsICJtZW1vcnlMaW1pdCIp
KSkKKyAgICAgICAgaWYgKEpTQzo6SlNWYWx1ZSBvcHRpb25NZW1vcnlMaW1pdCA9IG9wdGlvbnMt
PmdldCgmZXhlYywgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAibWVtb3J5TGltaXQi
KSkpCiAgICAgICAgICAgICByZWNvcmRpbmdPcHRpb25zLm1lbW9yeUxpbWl0ID0gb3B0aW9uTWVt
b3J5TGltaXQudG9OdW1iZXIoJmV4ZWMpOwotICAgICAgICBpZiAoSlNDOjpKU1ZhbHVlIG9wdGlv
bk5hbWUgPSBvcHRpb25zLT5nZXQoJmV4ZWMsIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygm
ZXhlYywgIm5hbWUiKSkpCisgICAgICAgIGlmIChKU0M6OkpTVmFsdWUgb3B0aW9uTmFtZSA9IG9w
dGlvbnMtPmdldCgmZXhlYywgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAibmFtZSIp
KSkKICAgICAgICAgICAgIHJlY29yZGluZ09wdGlvbnMubmFtZSA9IG9wdGlvbk5hbWUudG9XVEZT
dHJpbmcoJmV4ZWMpOwogICAgIH0KICAgICBzdGFydFJlY29yZGluZygqaW5zcGVjdG9yQ2FudmFz
LCBJbnNwZWN0b3I6OlByb3RvY29sOjpSZWNvcmRpbmc6OkluaXRpYXRvcjo6Q29uc29sZSwgV1RG
TW92ZShyZWNvcmRpbmdPcHRpb25zKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
YWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmNwcAkocmV2aXNpb24gMjQ5MTI4
KQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01BZ2VudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDA5LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDA5LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0
IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDkgSm9zZXBoIFBlY29yYXJvCiAgKgpAQCAtMTcwMSwxOSArMTcwMSwyMCBAQCBSZWY8
SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpFdmVudExpc3RlCiAgICAgICAgIH0KIAogICAgICAg
ICBpZiAoaGFuZGxlck9iamVjdCAmJiBleGVjKSB7Ci0gICAgICAgICAgICBKU0M6OkpTRnVuY3Rp
b24qIGhhbmRsZXJGdW5jdGlvbiA9IEpTQzo6anNEeW5hbWljQ2FzdDxKU0M6OkpTRnVuY3Rpb24q
PihleGVjLT52bSgpLCBoYW5kbGVyT2JqZWN0KTsKKyAgICAgICAgICAgIEpTQzo6Vk0mIHZtID0g
ZXhlYy0+dm0oKTsKKyAgICAgICAgICAgIEpTQzo6SlNGdW5jdGlvbiogaGFuZGxlckZ1bmN0aW9u
ID0gSlNDOjpqc0R5bmFtaWNDYXN0PEpTQzo6SlNGdW5jdGlvbio+KHZtLCBoYW5kbGVyT2JqZWN0
KTsKIAogICAgICAgICAgICAgaWYgKCFoYW5kbGVyRnVuY3Rpb24pIHsKLSAgICAgICAgICAgICAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRShleGVjLT52bSgpKTsKKyAgICAgICAg
ICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CiAKICAgICAgICAg
ICAgICAgICAvLyBJZiB0aGUgaGFuZGxlciBpcyBub3QgYWN0dWFsbHkgYSBmdW5jdGlvbiwgc2Vl
IGlmIGl0IGltcGxlbWVudHMgdGhlIEV2ZW50TGlzdGVuZXIgaW50ZXJmYWNlIGFuZCB1c2UgdGhh
dC4KLSAgICAgICAgICAgICAgICBhdXRvIGhhbmRsZUV2ZW50VmFsdWUgPSBoYW5kbGVyT2JqZWN0
LT5nZXQoZXhlYywgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJoYW5kbGVFdmVu
dCIpKTsKKyAgICAgICAgICAgICAgICBhdXRvIGhhbmRsZUV2ZW50VmFsdWUgPSBoYW5kbGVyT2Jq
ZWN0LT5nZXQoZXhlYywgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiaGFuZGxlRXZl
bnQiKSk7CiAKICAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICAgICAgICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogCiAgICAgICAg
ICAgICAgICAgaWYgKGhhbmRsZUV2ZW50VmFsdWUpCi0gICAgICAgICAgICAgICAgICAgIGhhbmRs
ZXJGdW5jdGlvbiA9IEpTQzo6anNEeW5hbWljQ2FzdDxKU0M6OkpTRnVuY3Rpb24qPihleGVjLT52
bSgpLCBoYW5kbGVFdmVudFZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgaGFuZGxlckZ1bmN0
aW9uID0gSlNDOjpqc0R5bmFtaWNDYXN0PEpTQzo6SlNGdW5jdGlvbio+KHZtLCBoYW5kbGVFdmVu
dFZhbHVlKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKGhhbmRsZXJGdW5jdGlv
biAmJiAhaGFuZGxlckZ1bmN0aW9uLT5pc0hvc3RPckJ1aWx0aW5GdW5jdGlvbigpKSB7CkBAIC0x
NzIyLDcgKzE3MjMsNyBAQCBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpFdmVudExpc3Rl
CiAgICAgICAgICAgICAgICAgaWYgKGhhbmRsZXJGdW5jdGlvbiAhPSBoYW5kbGVyT2JqZWN0KQog
ICAgICAgICAgICAgICAgICAgICBoYW5kbGVyTmFtZSA9IEpTQzo6SlNPYmplY3Q6OmNhbGN1bGF0
ZWRDbGFzc05hbWUoaGFuZGxlck9iamVjdCk7CiAgICAgICAgICAgICAgICAgaWYgKGhhbmRsZXJO
YW1lLmlzRW1wdHkoKSB8fCBoYW5kbGVyTmFtZSA9PSAiT2JqZWN0Il9zKQotICAgICAgICAgICAg
ICAgICAgICBoYW5kbGVyTmFtZSA9IGhhbmRsZXJGdW5jdGlvbi0+Y2FsY3VsYXRlZERpc3BsYXlO
YW1lKGV4ZWMtPnZtKCkpOworICAgICAgICAgICAgICAgICAgICBoYW5kbGVyTmFtZSA9IGhhbmRs
ZXJGdW5jdGlvbi0+Y2FsY3VsYXRlZERpc3BsYXlOYW1lKHZtKTsKIAogICAgICAgICAgICAgICAg
IGlmIChhdXRvIGV4ZWN1dGFibGUgPSBoYW5kbGVyRnVuY3Rpb24tPmpzRXhlY3V0YWJsZSgpKSB7
CiAgICAgICAgICAgICAgICAgICAgIGxpbmVOdW1iZXIgPSBleGVjdXRhYmxlLT5maXJzdExpbmUo
KSAtIDE7CkBAIC0yNjA4LDcgKzI2MDksNyBAQCBOb2RlKiBJbnNwZWN0b3JET01BZ2VudDo6c2Ny
aXB0VmFsdWVBc05vCiB7CiAgICAgaWYgKCF2YWx1ZSB8fCAhdmFsdWUuaXNPYmplY3QoKSkKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIEpTTm9kZTo6dG9XcmFwcGVkKCp2YWx1
ZS5nZXRPYmplY3QoKS0+dm0oKSwgdmFsdWUuZ2V0T2JqZWN0KCkpOworICAgIHJldHVybiBKU05v
ZGU6OnRvV3JhcHBlZCh2YWx1ZS5nZXRPYmplY3QoKS0+dm0oKSwgdmFsdWUuZ2V0T2JqZWN0KCkp
OwogfQogCiBKU0M6OkpTVmFsdWUgSW5zcGVjdG9yRE9NQWdlbnQ6Om5vZGVBc1NjcmlwdFZhbHVl
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgTm9kZSogbm9kZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlQXVkaXRBZ2VudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VBdWRpdEFnZW50LmNwcAko
cmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdl
L1BhZ2VBdWRpdEFnZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODQsMTYgKzg0LDE3IEBAIHZv
aWQgUGFnZUF1ZGl0QWdlbnQ6OnBvcHVsYXRlQXVkaXRPYmplY3QKICAgICAgICAgcmV0dXJuOwog
CiAgICAgaWYgKGF1dG8qIGdsb2JhbE9iamVjdCA9IEpTQzo6anNDYXN0PEpTRE9NR2xvYmFsT2Jq
ZWN0Kj4oZXhlY1N0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpKSB7Ci0gICAgICAgIEpTQzo6
SlNMb2NrSG9sZGVyIGxvY2soZXhlY1N0YXRlKTsKKyAgICAgICAgSlNDOjpWTSYgdm0gPSBnbG9i
YWxPYmplY3QtPnZtKCk7CisgICAgICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2sodm0pOwogCiAg
ICAgICAgIGlmIChKU0M6OkpTVmFsdWUganNJbnNwZWN0b3JBdWRpdEFjY2Vzc2liaWxpdHlPYmpl
Y3QgPSB0b0pTTmV3bHlDcmVhdGVkKGV4ZWNTdGF0ZSwgZ2xvYmFsT2JqZWN0LCBJbnNwZWN0b3JB
dWRpdEFjY2Vzc2liaWxpdHlPYmplY3Q6OmNyZWF0ZSgqdGhpcykpKQotICAgICAgICAgICAgYXVk
aXRPYmplY3QtPnB1dERpcmVjdChleGVjU3RhdGUtPnZtKCksIEpTQzo6SWRlbnRpZmllcjo6ZnJv
bVN0cmluZyhleGVjU3RhdGUsICJBY2Nlc3NpYmlsaXR5IiksIGpzSW5zcGVjdG9yQXVkaXRBY2Nl
c3NpYmlsaXR5T2JqZWN0KTsKKyAgICAgICAgICAgIGF1ZGl0T2JqZWN0LT5wdXREaXJlY3Qodm0s
IEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIkFjY2Vzc2liaWxpdHkiKSwganNJbnNw
ZWN0b3JBdWRpdEFjY2Vzc2liaWxpdHlPYmplY3QpOwogCiAgICAgICAgIGlmIChKU0M6OkpTVmFs
dWUganNJbnNwZWN0b3JBdWRpdERPTU9iamVjdCA9IHRvSlNOZXdseUNyZWF0ZWQoZXhlY1N0YXRl
LCBnbG9iYWxPYmplY3QsIEluc3BlY3RvckF1ZGl0RE9NT2JqZWN0OjpjcmVhdGUoKnRoaXMpKSkK
LSAgICAgICAgICAgIGF1ZGl0T2JqZWN0LT5wdXREaXJlY3QoZXhlY1N0YXRlLT52bSgpLCBKU0M6
OklkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlY1N0YXRlLCAiRE9NIiksIGpzSW5zcGVjdG9yQXVk
aXRET01PYmplY3QpOworICAgICAgICAgICAgYXVkaXRPYmplY3QtPnB1dERpcmVjdCh2bSwgSlND
OjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiRE9NIiksIGpzSW5zcGVjdG9yQXVkaXRET01P
YmplY3QpOwogCiAgICAgICAgIGlmIChKU0M6OkpTVmFsdWUganNJbnNwZWN0b3JBdWRpdFJlc291
cmNlc09iamVjdCA9IHRvSlNOZXdseUNyZWF0ZWQoZXhlY1N0YXRlLCBnbG9iYWxPYmplY3QsIElu
c3BlY3RvckF1ZGl0UmVzb3VyY2VzT2JqZWN0OjpjcmVhdGUoKnRoaXMpKSkKLSAgICAgICAgICAg
IGF1ZGl0T2JqZWN0LT5wdXREaXJlY3QoZXhlY1N0YXRlLT52bSgpLCBKU0M6OklkZW50aWZpZXI6
OmZyb21TdHJpbmcoZXhlY1N0YXRlLCAiUmVzb3VyY2VzIiksIGpzSW5zcGVjdG9yQXVkaXRSZXNv
dXJjZXNPYmplY3QpOworICAgICAgICAgICAgYXVkaXRPYmplY3QtPnB1dERpcmVjdCh2bSwgSlND
OjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiUmVzb3VyY2VzIiksIGpzSW5zcGVjdG9yQXVk
aXRSZXNvdXJjZXNPYmplY3QpOwogICAgIH0KIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGFn
ZS9QYWdlQ29uc29sZUNsaWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFn
ZS9QYWdlQ29uc29sZUNsaWVudC5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BhZ2UvUGFnZUNvbnNvbGVDbGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwMiwx
MyArMzAyLDE0IEBAIHN0YXRpYyBPcHRpb25hbDxTdHJpbmc+IHNuYXBzaG90Q2FudmFzKEgKIAog
dm9pZCBQYWdlQ29uc29sZUNsaWVudDo6c2NyZWVuc2hvdChKU0M6OkV4ZWNTdGF0ZSogc3RhdGUs
IFJlZjxTY3JpcHRBcmd1bWVudHM+JiYgYXJndW1lbnRzKQogeworICAgIEpTQzo6Vk0mIHZtID0g
c3RhdGUtPnZtKCk7CiAgICAgU3RyaW5nIGRhdGFVUkw7CiAgICAgSlNDOjpKU1ZhbHVlIHRhcmdl
dDsKIAogICAgIGlmIChhcmd1bWVudHMtPmFyZ3VtZW50Q291bnQoKSkgewogICAgICAgICBhdXRv
IHBvc3NpYmxlVGFyZ2V0ID0gYXJndW1lbnRzLT5hcmd1bWVudEF0KDApOwogCi0gICAgICAgIGlm
IChhdXRvKiBub2RlID0gSlNOb2RlOjp0b1dyYXBwZWQoc3RhdGUtPnZtKCksIHBvc3NpYmxlVGFy
Z2V0KSkgeworICAgICAgICBpZiAoYXV0byogbm9kZSA9IEpTTm9kZTo6dG9XcmFwcGVkKHZtLCBw
b3NzaWJsZVRhcmdldCkpIHsKICAgICAgICAgICAgIHRhcmdldCA9IHBvc3NpYmxlVGFyZ2V0Owog
ICAgICAgICAgICAgaWYgKFVOTElLRUxZKEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6aGFzRnJv
bnRlbmRzKCkpKSB7CiAgICAgICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVy
PiBzbmFwc2hvdDsKQEAgLTM1Nyw3ICszNTgsNyBAQCB2b2lkIFBhZ2VDb25zb2xlQ2xpZW50Ojpz
Y3JlZW5zaG90KEpTQzo6CiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhVVJMID0gc25hcHNo
b3QtPnRvRGF0YVVSTCgiaW1hZ2UvcG5nIl9zLCBXVEY6Om51bGxvcHQsIFByZXNlcnZlUmVzb2x1
dGlvbjo6WWVzKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0g
ZWxzZSBpZiAoYXV0byogaW1hZ2VEYXRhID0gSlNJbWFnZURhdGE6OnRvV3JhcHBlZChzdGF0ZS0+
dm0oKSwgcG9zc2libGVUYXJnZXQpKSB7CisgICAgICAgIH0gZWxzZSBpZiAoYXV0byogaW1hZ2VE
YXRhID0gSlNJbWFnZURhdGE6OnRvV3JhcHBlZCh2bSwgcG9zc2libGVUYXJnZXQpKSB7CiAgICAg
ICAgICAgICB0YXJnZXQgPSBwb3NzaWJsZVRhcmdldDsKICAgICAgICAgICAgIGlmIChVTkxJS0VM
WShJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246Omhhc0Zyb250ZW5kcygpKSkgewogICAgICAgICAg
ICAgICAgIGF1dG8gc291cmNlU2l6ZSA9IGltYWdlRGF0YS0+c2l6ZSgpOwpAQCAtMzY3LDEzICsz
NjgsMTMgQEAgdm9pZCBQYWdlQ29uc29sZUNsaWVudDo6c2NyZWVuc2hvdChKU0M6OgogICAgICAg
ICAgICAgICAgICAgICBkYXRhVVJMID0gaW1hZ2VCdWZmZXItPnRvRGF0YVVSTCgiaW1hZ2UvcG5n
Il9zLCBXVEY6Om51bGxvcHQsIFByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKTsKICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoYXV0byogaW1hZ2VCaXRt
YXAgPSBKU0ltYWdlQml0bWFwOjp0b1dyYXBwZWQoc3RhdGUtPnZtKCksIHBvc3NpYmxlVGFyZ2V0
KSkgeworICAgICAgICB9IGVsc2UgaWYgKGF1dG8qIGltYWdlQml0bWFwID0gSlNJbWFnZUJpdG1h
cDo6dG9XcmFwcGVkKHZtLCBwb3NzaWJsZVRhcmdldCkpIHsKICAgICAgICAgICAgIHRhcmdldCA9
IHBvc3NpYmxlVGFyZ2V0OwogICAgICAgICAgICAgaWYgKFVOTElLRUxZKEluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbjo6aGFzRnJvbnRlbmRzKCkpKSB7CiAgICAgICAgICAgICAgICAgaWYgKGF1dG8q
IGltYWdlQnVmZmVyID0gaW1hZ2VCaXRtYXAtPmJ1ZmZlcigpKQogICAgICAgICAgICAgICAgICAg
ICBkYXRhVVJMID0gaW1hZ2VCdWZmZXItPnRvRGF0YVVSTCgiaW1hZ2UvcG5nIl9zLCBXVEY6Om51
bGxvcHQsIFByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKTsKICAgICAgICAgICAgIH0KLSAgICAgICAg
fSBlbHNlIGlmIChhdXRvKiBjb250ZXh0ID0gY2FudmFzUmVuZGVyaW5nQ29udGV4dChzdGF0ZS0+
dm0oKSwgcG9zc2libGVUYXJnZXQpKSB7CisgICAgICAgIH0gZWxzZSBpZiAoYXV0byogY29udGV4
dCA9IGNhbnZhc1JlbmRlcmluZ0NvbnRleHQodm0sIHBvc3NpYmxlVGFyZ2V0KSkgewogICAgICAg
ICAgICAgYXV0byYgY2FudmFzID0gY29udGV4dC0+Y2FudmFzQmFzZSgpOwogICAgICAgICAgICAg
aWYgKGlzPEhUTUxDYW52YXNFbGVtZW50PihjYW52YXMpKSB7CiAgICAgICAgICAgICAgICAgdGFy
Z2V0ID0gcG9zc2libGVUYXJnZXQ7CkBAIC00MDgsOSArNDA5LDkgQEAgdm9pZCBQYWdlQ29uc29s
ZUNsaWVudDo6c2NyZWVuc2hvdChKU0M6OgogICAgIH0KIAogICAgIFZlY3RvcjxKU0M6OlN0cm9u
ZzxKU0M6OlVua25vd24+PiBhZGp1c3RlZEFyZ3VtZW50czsKLSAgICBhZGp1c3RlZEFyZ3VtZW50
cy5hcHBlbmQoeyBzdGF0ZS0+dm0oKSwgdGFyZ2V0ID8gdGFyZ2V0IDogSlNDOjpqc05vbnRyaXZp
YWxTdHJpbmcoc3RhdGUsICJWaWV3cG9ydCJfcykgfSk7CisgICAgYWRqdXN0ZWRBcmd1bWVudHMu
YXBwZW5kKHsgdm0sIHRhcmdldCA/IHRhcmdldCA6IEpTQzo6anNOb250cml2aWFsU3RyaW5nKHZt
LCAiVmlld3BvcnQiX3MpIH0pOwogICAgIGZvciAoc2l6ZV90IGkgPSAoIXRhcmdldCA/IDAgOiAx
KTsgaSA8IGFyZ3VtZW50cy0+YXJndW1lbnRDb3VudCgpOyArK2kpCi0gICAgICAgIGFkanVzdGVk
QXJndW1lbnRzLmFwcGVuZCh7IHN0YXRlLT52bSgpLCBhcmd1bWVudHMtPmFyZ3VtZW50QXQoaSkg
fSk7CisgICAgICAgIGFkanVzdGVkQXJndW1lbnRzLmFwcGVuZCh7IHZtLCBhcmd1bWVudHMtPmFy
Z3VtZW50QXQoaSkgfSk7CiAgICAgYXJndW1lbnRzID0gU2NyaXB0QXJndW1lbnRzOjpjcmVhdGUo
KnN0YXRlLCBXVEZNb3ZlKGFkanVzdGVkQXJndW1lbnRzKSk7CiAgICAgYWRkTWVzc2FnZShtYWtl
VW5pcXVlPEluc3BlY3Rvcjo6Q29uc29sZU1lc3NhZ2U+KE1lc3NhZ2VTb3VyY2U6OkNvbnNvbGVB
UEksIE1lc3NhZ2VUeXBlOjpJbWFnZSwgTWVzc2FnZUxldmVsOjpMb2csIGRhdGFVUkwsIFdURk1v
dmUoYXJndW1lbnRzKSkpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvQ3VzdG9tUGFpbnRJbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvQ3VzdG9tUGFpbnRJbWFnZS5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0N1c3RvbVBhaW50SW1hZ2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAx
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTE0Nyw3ICsxNDcsNyBAQCBJbWFnZURyYXdSZXN1bHQgQ3VzdG9tUGFpbnRJ
bWFnZTo6ZG9DdXN0CiAgICAgYXV0byBzaXplID0gQ1NTUGFpbnRTaXplOjpjcmVhdGUoZGVzdFNp
emUud2lkdGgoKSwgZGVzdFNpemUuaGVpZ2h0KCkpOwogICAgIFJlZjxTdHlsZVByb3BlcnR5TWFw
UmVhZE9ubHk+IHByb3BlcnR5TWFwID0gSGFzaE1hcFN0eWxlUHJvcGVydHlNYXA6OmNyZWF0ZShX
VEZNb3ZlKHByb3BlcnR5VmFsdWVzKSk7CiAKLSAgICBhdXRvJiB2bSA9ICpwYWludENvbnN0cnVj
dG9yLmdldE9iamVjdCgpLT52bSgpOworICAgIGF1dG8mIHZtID0gcGFpbnRDb25zdHJ1Y3Rvci5n
ZXRPYmplY3QoKS0+dm0oKTsKICAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKHZtKTsKICAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgYXV0byYgZ2xvYmFsT2Jq
ZWN0ID0gKnBhaW50Q29uc3RydWN0b3IuZ2V0T2JqZWN0KCktPmdsb2JhbE9iamVjdCgpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvdGVzdGluZy9qcy9XZWJDb3JlVGVzdFN1cHBvcnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvanMvV2ViQ29yZVRlc3RTdXBwb3J0LmNw
cAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL1dlYkNvcmUvdGVzdGluZy9qcy9XZWJDb3Jl
VGVzdFN1cHBvcnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENv
cHlyaWdodCAoQykgMjAxMSwgMjAxNSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTcsMTIgKzU3LDEyIEBAIHVzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOwogdm9pZCBpbmplY3RJbnRlcm5hbHNPYmplY3QoSlNDb250ZXh0
UmVmIGNvbnRleHQpCiB7CiAgICAgRXhlY1N0YXRlKiBleGVjID0gdG9KUyhjb250ZXh0KTsKLSAg
ICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAg
IEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKICAgICBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVj
dCgpKTsKICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRDb250ZXh0ID0gZ2xvYmFs
T2JqZWN0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgaWYgKGlzPERvY3VtZW50Pigq
c2NyaXB0Q29udGV4dCkpIHsKLSAgICAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICAgICAg
Z2xvYmFsT2JqZWN0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCBJ
bnRlcm5hbHM6OmludGVybmFsc0lkKSwgdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIEludGVybmFs
czo6Y3JlYXRlKGRvd25jYXN0PERvY3VtZW50Pigqc2NyaXB0Q29udGV4dCkpKSk7CisgICAgICAg
IGdsb2JhbE9iamVjdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBJ
bnRlcm5hbHM6OmludGVybmFsc0lkKSwgdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIEludGVybmFs
czo6Y3JlYXRlKGRvd25jYXN0PERvY3VtZW50Pigqc2NyaXB0Q29udGV4dCkpKSk7CiAgICAgICAg
IGdsb2JhbE9iamVjdC0+ZXhwb3NlRG9sbGFyVk0odm0pOwogICAgIH0KIH0KQEAgLTIwMCw5ICsy
MDAsMTAgQEAgdm9pZCBzZXR1cE5ld2x5Q3JlYXRlZFNlcnZpY2VXb3JrZXIodWludAogICAgICAg
ICAgICAgcmV0dXJuOwogCiAgICAgICAgIGF1dG8mIHN0YXRlID0gKmdsb2JhbFNjb3BlLmV4ZWNT
dGF0ZSgpOwotICAgICAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKHN0YXRlLnZtKCkpOworICAgICAg
ICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrZXIodm0p
OwogICAgICAgICBhdXRvKiBjb250ZXh0V3JhcHBlciA9IHNjcmlwdC0+d29ya2VyR2xvYmFsU2Nv
cGVXcmFwcGVyKCk7Ci0gICAgICAgIGNvbnRleHRXcmFwcGVyLT5wdXREaXJlY3Qoc3RhdGUudm0o
KSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsIEludGVybmFsczo6aW50ZXJuYWxzSWQp
LCB0b0pTKCZzdGF0ZSwgY29udGV4dFdyYXBwZXIsIFNlcnZpY2VXb3JrZXJJbnRlcm5hbHM6OmNy
ZWF0ZShpZGVudGlmaWVyKSkpOworICAgICAgICBjb250ZXh0V3JhcHBlci0+cHV0RGlyZWN0KHZt
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBJbnRlcm5hbHM6OmludGVybmFsc0lkKSwgdG9K
Uygmc3RhdGUsIGNvbnRleHRXcmFwcGVyLCBTZXJ2aWNlV29ya2VySW50ZXJuYWxzOjpjcmVhdGUo
aWRlbnRpZmllcikpKTsKICAgICB9KTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHNlcnZpY2VX
b3JrZXJJZGVudGlmaWVyKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dvcmtsZXRzL1BhaW50V29y
a2xldEdsb2JhbFNjb3BlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93b3JrbGV0
cy9QYWludFdvcmtsZXRHbG9iYWxTY29wZS5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3dvcmtsZXRzL1BhaW50V29ya2xldEdsb2JhbFNjb3BlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMTkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC03MSw3ICs3MSw3IEBAIFBhaW50V29ya2xldEdsb2JhbFNjb3BlOjpQYWludERlZmluaXRp
b24KIC8vIGh0dHBzOi8vZHJhZnRzLmNzcy1ob3VkaW5pLm9yZy9jc3MtcGFpbnQtYXBpLyNyZWdp
c3RlcmluZy1jdXN0b20tcGFpbnQKIEV4Y2VwdGlvbk9yPHZvaWQ+IFBhaW50V29ya2xldEdsb2Jh
bFNjb3BlOjpyZWdpc3RlclBhaW50KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxP
YmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBTdHJvbmc8SlNPYmplY3Q+
IHBhaW50Q29uc3RydWN0b3IpCiB7Ci0gICAgYXV0byYgdm0gPSAqcGFpbnRDb25zdHJ1Y3Rvci0+
dm0oKTsKKyAgICBhdXRvJiB2bSA9IHBhaW50Q29uc3RydWN0b3ItPnZtKCk7CiAgICAgSlNDOjpK
U0xvY2tIb2xkZXIgbG9jayh2bSk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwogCkBAIC05MSw3ICs5MSw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFBhaW50V29ya2xl
dEdsb2JhbFNjb3AKIAogICAgICAgICBWZWN0b3I8U3RyaW5nPiBpbnB1dFByb3BlcnRpZXM7CiAK
LSAgICAgICAgSlNWYWx1ZSBpbnB1dFByb3BlcnRpZXNJdGVyYWJsZVZhbHVlID0gcGFpbnRDb25z
dHJ1Y3Rvci0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJpbnB1dFBy
b3BlcnRpZXMiKSk7CisgICAgICAgIEpTVmFsdWUgaW5wdXRQcm9wZXJ0aWVzSXRlcmFibGVWYWx1
ZSA9IHBhaW50Q29uc3RydWN0b3ItPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmco
dm0sICJpbnB1dFByb3BlcnRpZXMiKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIEV4Y2VwdGlvbiB7IEV4aXN0aW5nRXhjZXB0aW9uRXJyb3IgfSk7CiAKICAgICAgICAgaWYg
KCFpbnB1dFByb3BlcnRpZXNJdGVyYWJsZVZhbHVlLmlzVW5kZWZpbmVkKCkpCkBAIC0xMDIsNyAr
MTAyLDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gUGFpbnRXb3JrbGV0R2xvYmFsU2NvcAogCiAgICAg
ICAgIFZlY3RvcjxTdHJpbmc+IGlucHV0QXJndW1lbnRzOwogCi0gICAgICAgIEpTVmFsdWUgaW5w
dXRBcmd1bWVudHNJdGVyYWJsZVZhbHVlID0gcGFpbnRDb25zdHJ1Y3Rvci0+Z2V0KCZzdGF0ZSwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJpbnB1dEFyZ3VtZW50cyIpKTsKKyAgICAgICAg
SlNWYWx1ZSBpbnB1dEFyZ3VtZW50c0l0ZXJhYmxlVmFsdWUgPSBwYWludENvbnN0cnVjdG9yLT5n
ZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiaW5wdXRBcmd1bWVudHMiKSk7
CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEV4Y2VwdGlvbiB7IEV4aXN0aW5n
RXhjZXB0aW9uRXJyb3IgfSk7CiAKICAgICAgICAgaWYgKCFpbnB1dEFyZ3VtZW50c0l0ZXJhYmxl
VmFsdWUuaXNVbmRlZmluZWQoKSkKQEAgLTExMSw3ICsxMTEsNyBAQCBFeGNlcHRpb25Pcjx2b2lk
PiBQYWludFdvcmtsZXRHbG9iYWxTY29wCiAKICAgICAgICAgLy8gRklYTUU6IFBhcnNlIHN5bnRh
eCBmb3IgaW5wdXRBcmd1bWVudHMgaGVyZSAoc3RlcHMgMTEgYW5kIDEyKS4KIAotICAgICAgICBK
U1ZhbHVlIGNvbnRleHRPcHRpb25zVmFsdWUgPSBwYWludENvbnN0cnVjdG9yLT5nZXQoJnN0YXRl
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImNvbnRleHRPcHRpb25zIikpOworICAgICAg
ICBKU1ZhbHVlIGNvbnRleHRPcHRpb25zVmFsdWUgPSBwYWludENvbnN0cnVjdG9yLT5nZXQoJnN0
YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiY29udGV4dE9wdGlvbnMiKSk7CiAgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEV4Y2VwdGlvbiB7IEV4aXN0aW5nRXhjZXB0
aW9uRXJyb3IgfSk7CiAgICAgICAgIFVOVVNFRF9QQVJBTShjb250ZXh0T3B0aW9uc1ZhbHVlKTsK
IApAQCAtMTI2LDcgKzEyNiw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFBhaW50V29ya2xldEdsb2Jh
bFNjb3AKICAgICAgICAgaWYgKCFwcm90b3R5cGVWYWx1ZS5pc09iamVjdCgpKQogICAgICAgICAg
ICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFR5cGVFcnJvciwgIlRoZSBzZWNvbmQgYXJndW1lbnQgbXVz
dCBoYXZlIGEgcHJvdG90eXBlIHRoYXQgaXMgYW4gb2JqZWN0IiB9OwogCi0gICAgICAgIEpTVmFs
dWUgcGFpbnRWYWx1ZSA9IHByb3RvdHlwZVZhbHVlLmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZy
b21TdHJpbmcoJnZtLCAicGFpbnQiKSk7CisgICAgICAgIEpTVmFsdWUgcGFpbnRWYWx1ZSA9IHBy
b3RvdHlwZVZhbHVlLmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJwYWlu
dCIpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgRXhjZXB0aW9uIHsgRXhp
c3RpbmdFeGNlcHRpb25FcnJvciB9KTsKIAogICAgICAgICBpZiAocGFpbnRWYWx1ZS5pc1VuZGVm
aW5lZCgpKQpJbmRleDogU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9XZWJLaXQv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTktMDgtMjcgIE1h
cmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgorCisgICAgICAgIFJlZmFjdG9yIHRvIHVzZSBW
TSYgaW5zdGVhZCBvZiBWTSogYXQgYXMgbWFueSBwbGFjZXMgYXMgcG9zc2libGUuCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDExNzIKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvRE9NL0luamVjdGVkQnVuZGxlTm9kZUhhbmRsZS5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OkluamVjdGVkQnVuZGxlTm9kZUhhbmRsZTo6Z2V0T3JDcmVhdGUpOgorICAgICAgICAq
IFdlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9KU05QT2JqZWN0LmNwcDoKKyAgICAgICAgKFdl
YktpdDo6SlNOUE9iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyk6CisgICAgICAgICogV2ViUHJv
Y2Vzcy9QbHVnaW5zL05ldHNjYXBlL05QSlNPYmplY3QuY3BwOgorICAgICAgICAoV2ViS2l0Ojpp
ZGVudGlmaWVyRnJvbUlkZW50aWZpZXJSZXApOgorICAgICAgICAoV2ViS2l0OjpOUEpTT2JqZWN0
OjplbnVtZXJhdGUpOgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUFJ1
bnRpbWVPYmplY3RNYXAuY3BwOgorICAgICAgICAoV2ViS2l0OjpOUFJ1bnRpbWVPYmplY3RNYXA6
OmNvbnZlcnROUFZhcmlhbnRUb0pTVmFsdWUpOgorICAgICAgICAoV2ViS2l0OjpOUFJ1bnRpbWVP
YmplY3RNYXA6OmNvbnZlcnRKU1ZhbHVlVG9OUFZhcmlhbnQpOgorICAgICAgICAqIFdlYlByb2Nl
c3MvV2ViUGFnZS9XZWJGcmFtZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lOjpjb3Vu
dGVyVmFsdWUpOgorCiAyMDE5LTA4LTI2ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+
CiAKICAgICAgICAgUmVncmVzc2lvbjogSVRQIHN0YXJ0ZWQgZG9pbmcgYSBsb3QgbW9yZSBJUEMg
YWZ0ZXIgaXRzIGxvZ2ljIHdhcyBtb3ZlZCB0byB0aGUgbmV0d29yayBwcm9jZXNzCkluZGV4OiBT
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvRE9NL0luamVjdGVkQnVuZGxl
Tm9kZUhhbmRsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0RPTS9JbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGUuY3BwCShyZXZpc2lvbiAy
NDkxMjgpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvRE9NL0lu
amVjdGVkQnVuZGxlTm9kZUhhbmRsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzAsNyArNzAsNyBAQCBz
dGF0aWMgRE9NTm9kZUhhbmRsZUNhY2hlJiBkb21Ob2RlSGFuZGxlCiAKIFJlZlB0cjxJbmplY3Rl
ZEJ1bmRsZU5vZGVIYW5kbGU+IEluamVjdGVkQnVuZGxlTm9kZUhhbmRsZTo6Z2V0T3JDcmVhdGUo
SlNDb250ZXh0UmVmLCBKU09iamVjdFJlZiBvYmplY3QpCiB7Ci0gICAgTm9kZSogbm9kZSA9IEpT
Tm9kZTo6dG9XcmFwcGVkKCp0b0pTKG9iamVjdCktPnZtKCksIHRvSlMob2JqZWN0KSk7CisgICAg
Tm9kZSogbm9kZSA9IEpTTm9kZTo6dG9XcmFwcGVkKHRvSlMob2JqZWN0KS0+dm0oKSwgdG9KUyhv
YmplY3QpKTsKICAgICByZXR1cm4gZ2V0T3JDcmVhdGUobm9kZSk7CiB9CiAKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL0pTTlBPYmplY3QuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL0pTTlBP
YmplY3QuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
UGx1Z2lucy9OZXRzY2FwZS9KU05QT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUxLDkg
KzQ1MSw5IEBAIHZvaWQgSlNOUE9iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU08KICAgICAg
ICAgICAgIGNvbnN0IGNoYXIqIHN0cmluZyA9IGlkZW50aWZpZXJSZXAtPnN0cmluZygpOwogICAg
ICAgICAgICAgaW50IGxlbmd0aCA9IHN0cmxlbihzdHJpbmcpOwogICAgICAgICAgICAgCi0gICAg
ICAgICAgICBpZGVudGlmaWVyID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCBTdHJpbmc6
OmZyb21VVEY4V2l0aExhdGluMUZhbGxiYWNrKHN0cmluZywgbGVuZ3RoKSk7CisgICAgICAgICAg
ICBpZGVudGlmaWVyID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgU3RyaW5nOjpmcm9tVVRG
OFdpdGhMYXRpbjFGYWxsYmFjayhzdHJpbmcsIGxlbmd0aCkpOwogICAgICAgICB9IGVsc2UKLSAg
ICAgICAgICAgIGlkZW50aWZpZXIgPSBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGlkZW50aWZpZXJS
ZXAtPm51bWJlcigpKTsKKyAgICAgICAgICAgIGlkZW50aWZpZXIgPSBJZGVudGlmaWVyOjpmcm9t
KHZtLCBpZGVudGlmaWVyUmVwLT5udW1iZXIoKSk7CiAKICAgICAgICAgcHJvcGVydHlOYW1lQXJy
YXkuYWRkKGlkZW50aWZpZXIpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9QbHVnaW5zL05ldHNjYXBlL05QSlNPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05QSlNPYmplY3QuY3BwCShyZXZpc2lv
biAyNDkxMjgpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9O
UEpTT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEwLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04MiwxMiArODIsMTMgQEAgdm9pZCBOUEpTT2Jq
ZWN0Ojppbml0aWFsaXplKFZNJiB2bSwgTlBSdQogCiBzdGF0aWMgSWRlbnRpZmllciBpZGVudGlm
aWVyRnJvbUlkZW50aWZpZXJSZXAoRXhlY1N0YXRlKiBleGVjLCBJZGVudGlmaWVyUmVwKiBpZGVu
dGlmaWVyUmVwKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgQVNTRVJUKGlkZW50
aWZpZXJSZXAtPmlzU3RyaW5nKCkpOwogCiAgICAgY29uc3QgY2hhciogc3RyaW5nID0gaWRlbnRp
ZmllclJlcC0+c3RyaW5nKCk7CiAgICAgaW50IGxlbmd0aCA9IHN0cmxlbihzdHJpbmcpOwogCi0g
ICAgcmV0dXJuIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgU3RyaW5nOjpmcm9tVVRGOFdp
dGhMYXRpbjFGYWxsYmFjayhzdHJpbmcsIGxlbmd0aCkpOworICAgIHJldHVybiBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKHZtLCBTdHJpbmc6OmZyb21VVEY4V2l0aExhdGluMUZhbGxiYWNrKHN0cmlu
ZywgbGVuZ3RoKSk7CiB9CiAKIGJvb2wgTlBKU09iamVjdDo6aGFzTWV0aG9kKE5QSWRlbnRpZmll
ciBtZXRob2ROYW1lKQpAQCAtMjUyLDcgKzI1Myw3IEBAIGJvb2wgTlBKU09iamVjdDo6ZW51bWVy
YXRlKE5QSWRlbnRpZmllcioKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIEpTTG9ja0hv
bGRlciBsb2NrKHZtKTsKIAotICAgIFByb3BlcnR5TmFtZUFycmF5IHByb3BlcnR5TmFtZXMoJnZt
LCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzLCBQcml2YXRlU3ltYm9sTW9kZTo6RXhjbHVkZSk7
CisgICAgUHJvcGVydHlOYW1lQXJyYXkgcHJvcGVydHlOYW1lcyh2bSwgUHJvcGVydHlOYW1lTW9k
ZTo6U3RyaW5ncywgUHJpdmF0ZVN5bWJvbE1vZGU6OkV4Y2x1ZGUpOwogICAgIG1fanNPYmplY3Qt
Pm1ldGhvZFRhYmxlKHZtKS0+Z2V0UHJvcGVydHlOYW1lcyhtX2pzT2JqZWN0LmdldCgpLCBleGVj
LCBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUoKSk7CiAKICAgICBOUElkZW50aWZpZXIq
IG5hbWVJZGVudGlmaWVycyA9IG5wbk1lbU5ld0FycmF5PE5QSWRlbnRpZmllcj4ocHJvcGVydHlO
YW1lcy5zaXplKCkpOwpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0
c2NhcGUvTlBSdW50aW1lT2JqZWN0TWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUFJ1bnRpbWVPYmplY3RNYXAuY3BwCShyZXZp
c2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2Fw
ZS9OUFJ1bnRpbWVPYmplY3RNYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEyOSw3ICsxMjks
NyBAQCBKU1ZhbHVlIE5QUnVudGltZU9iamVjdE1hcDo6Y29udmVydE5QVmFyCiAgICAgICAgIHJl
dHVybiBqc051bWJlcih2YXJpYW50LnZhbHVlLmRvdWJsZVZhbHVlKTsKIAogICAgIGNhc2UgTlBW
YXJpYW50VHlwZV9TdHJpbmc6Ci0gICAgICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBTdHJpbmc6
OmZyb21VVEY4V2l0aExhdGluMUZhbGxiYWNrKHZhcmlhbnQudmFsdWUuc3RyaW5nVmFsdWUuVVRG
OENoYXJhY3RlcnMsIAorICAgICAgICByZXR1cm4ganNTdHJpbmcoZ2xvYmFsT2JqZWN0LT52bSgp
LCBTdHJpbmc6OmZyb21VVEY4V2l0aExhdGluMUZhbGxiYWNrKHZhcmlhbnQudmFsdWUuc3RyaW5n
VmFsdWUuVVRGOENoYXJhY3RlcnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQudmFsdWUuc3RyaW5nVmFsdWUu
VVRGOExlbmd0aCkpOwogICAgIGNhc2UgTlBWYXJpYW50VHlwZV9PYmplY3Q6CiAgICAgICAgIHJl
dHVybiBnZXRPckNyZWF0ZUpTT2JqZWN0KGdsb2JhbE9iamVjdCwgdmFyaWFudC52YWx1ZS5vYmpl
Y3RWYWx1ZSk7CkBAIC0xNDEsNiArMTQxLDcgQEAgSlNWYWx1ZSBOUFJ1bnRpbWVPYmplY3RNYXA6
OmNvbnZlcnROUFZhcgogCiB2b2lkIE5QUnVudGltZU9iamVjdE1hcDo6Y29udmVydEpTVmFsdWVU
b05QVmFyaWFudChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUsIE5QVmFyaWFudCYgdmFy
aWFudCkKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIEpTTG9ja0hvbGRlciBsb2Nr
KGV4ZWMpOwogCiAgICAgVk9JRF9UT19OUFZBUklBTlQodmFyaWFudCk7CkBAIC0xNzIsNyArMTcz
LDcgQEAgdm9pZCBOUFJ1bnRpbWVPYmplY3RNYXA6OmNvbnZlcnRKU1ZhbHVlVAogICAgIH0KIAog
ICAgIGlmICh2YWx1ZS5pc09iamVjdCgpKSB7Ci0gICAgICAgIE5QT2JqZWN0KiBucE9iamVjdCA9
IGdldE9yQ3JlYXRlTlBPYmplY3QoZXhlYy0+dm0oKSwgYXNPYmplY3QodmFsdWUpKTsKKyAgICAg
ICAgTlBPYmplY3QqIG5wT2JqZWN0ID0gZ2V0T3JDcmVhdGVOUE9iamVjdCh2bSwgYXNPYmplY3Qo
dmFsdWUpKTsKICAgICAgICAgT0JKRUNUX1RPX05QVkFSSUFOVChucE9iamVjdCwgdmFyaWFudCk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJGcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcz
OCw3ICs3MzgsNyBAQCBKU1ZhbHVlUmVmIFdlYkZyYW1lOjpqc1dyYXBwZXJGb3JXb3JsZChJCiAK
IFN0cmluZyBXZWJGcmFtZTo6Y291bnRlclZhbHVlKEpTT2JqZWN0UmVmIGVsZW1lbnQpCiB7Ci0g
ICAgaWYgKCF0b0pTKGVsZW1lbnQpLT5pbmhlcml0czxKU0VsZW1lbnQ+KCp0b0pTKGVsZW1lbnQp
LT52bSgpKSkKKyAgICBpZiAoIXRvSlMoZWxlbWVudCktPmluaGVyaXRzPEpTRWxlbWVudD4odG9K
UyhlbGVtZW50KS0+dm0oKSkpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKIAogICAgIHJldHVy
biBjb3VudGVyVmFsdWVGb3JFbGVtZW50KCZqc0Nhc3Q8SlNFbGVtZW50Kj4odG9KUyhlbGVtZW50
KSktPndyYXBwZWQoKSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCShyZXZpc2lv
biAyNDkxMjgpCisrKyBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMyArMSwyOSBAQAorMjAxOS0wOC0yNyAgTWFyayBMYW0gIDxtYXJrLmxhbUBh
cHBsZS5jb20+CisKKyAgICAgICAgUmVmYWN0b3IgdG8gdXNlIFZNJiBpbnN0ZWFkIG9mIFZNKiBh
dCBhcyBtYW55IHBsYWNlcyBhcyBwb3NzaWJsZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMTE3MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogRE9NL0RPTS5tbToKKyAgICAgICAgKCtbRE9NTm9kZSBf
bm9kZUZyb21KU1dyYXBwZXI6XSk6CisgICAgICAgICogRE9NL0RPTVV0aWxpdHkubW06CisgICAg
ICAgIChjcmVhdGVET01XcmFwcGVyKToKKyAgICAgICAgKiBQbHVnaW5zL0hvc3RlZC9OZXRzY2Fw
ZVBsdWdpbkhvc3RQcm94eS5tbToKKyAgICAgICAgKGlkZW50aWZpZXJGcm9tSWRlbnRpZmllclJl
cCk6CisgICAgICAgICogUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5
Lm1tOgorICAgICAgICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OmVudW1l
cmF0ZSk6CisgICAgICAgIChXZWJLaXQ6OmdldE9iamVjdElEKToKKyAgICAgICAgKFdlYktpdDo6
TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjphZGRWYWx1ZVRvQXJyYXkpOgorICAgICAgICAo
V2ViS2l0OjpOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OmRlbWFyc2hhbFZhbHVlRnJvbUFy
cmF5KToKKyAgICAgICAgKFdlYktpdDo6TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpyZXRh
aW5Mb2NhbE9iamVjdCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQ
cm94eTo6cmVsZWFzZUxvY2FsT2JqZWN0KToKKyAgICAgICAgKiBQbHVnaW5zL0hvc3RlZC9Qcm94
eUluc3RhbmNlLm1tOgorICAgICAgICAoV2ViS2l0OjpQcm94eUluc3RhbmNlOjpzdHJpbmdWYWx1
ZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlByb3h5SW5zdGFuY2U6OmdldFByb3BlcnR5TmFt
ZXMpOgorICAgICAgICAqIFdlYlZpZXcvV2ViRnJhbWUubW06CisgICAgICAgICgtW1dlYkZyYW1l
IF9zdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0RnJvbVN0cmluZzp3aXRoR2xvYmFsT2JqZWN0
OmluU2NyaXB0V29ybGQ6XSk6CisKIDIwMTktMDgtMjMgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFw
cGxlLmNvbT4KIAogICAgICAgICBbZ2VvbG9jYXRpb25dIFJlbmFtZSBpbnRlcmZhY2VzIGFuZCBy
ZW1vdmUgW05vSW50ZXJmYWNlT2JqZWN0XQpJbmRleDogU291cmNlL1dlYktpdExlZ2FjeS9tYWMv
RE9NL0RPTS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9N
Lm1tCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9N
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC01MjksNyArNTI5LDcgQEAgLSAoTlNBcnJheSAqKXRleHRS
ZWN0cwogKyAoaWQpX25vZGVGcm9tSlNXcmFwcGVyOihKU09iamVjdFJlZilqc1dyYXBwZXIKIHsK
ICAgICBKU09iamVjdCogb2JqZWN0ID0gdG9KUyhqc1dyYXBwZXIpOwotICAgIGlmICghb2JqZWN0
LT5pbmhlcml0czxKU05vZGU+KCpvYmplY3QtPnZtKCkpKQorICAgIGlmICghb2JqZWN0LT5pbmhl
cml0czxKU05vZGU+KG9iamVjdC0+dm0oKSkpCiAgICAgICAgIHJldHVybiBuaWw7CiAgICAgcmV0
dXJuIGtpdCgmanNDYXN0PEpTTm9kZSo+KG9iamVjdCktPndyYXBwZWQoKSk7CiB9CkluZGV4OiBT
b3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NVXRpbGl0eS5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NVXRpbGl0eS5tbQkocmV2aXNpb24gMjQ5MTI4
KQorKysgU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTVV0aWxpdHkubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAy
MDA2LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwNC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqIENvcHlyaWdodCAoQykgMjAwNiBKYW1lcyBHLiBTcGV0aCAoc3BldGhAZW5kLmNvbSkKICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKQEAgLTc0LDcgKzc0LDcgQEAKIAogc3RhdGljIFdlYlNjcmlwdE9iamVj
dCAqY3JlYXRlRE9NV3JhcHBlcihKU0M6OkpTT2JqZWN0JiBqc1dyYXBwZXIpCiB7Ci0gICAgSlND
OjpWTSYgdm0gPSAqanNXcmFwcGVyLnZtKCk7CisgICAgSlNDOjpWTSYgdm0gPSBqc1dyYXBwZXIu
dm0oKTsKICAgICAjZGVmaW5lIFdSQVAoY2xhc3NOYW1lKSBcCiAgICAgICAgIGlmIChhdXRvKiB3
cmFwcGVkID0gV2ViQ29yZTo6SlMjI2NsYXNzTmFtZTo6dG9XcmFwcGVkKHZtLCAmanNXcmFwcGVy
KSkgXAogICAgICAgICAgICAgcmV0dXJuIGtpdCh3cmFwcGVkKTsKSW5kZXg6IFNvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSG9zdFByb3h5Lm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1BsdWdpbnMvSG9zdGVkL05ldHNj
YXBlUGx1Z2luSG9zdFByb3h5Lm1tCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvV2ViS2l0
TGVnYWN5L21hYy9QbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkhvc3RQcm94eS5tbQkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAx
OCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgt
MjAxOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTY2NSw3ICs2NjUsNyBAQCBzdGF0aWMgSWRlbnRpZmllciBpZGVudGlm
aWVyRnJvbUlkZW50aWZpCiAgICAgQVNTRVJUKGlkZW50aWZpZXItPmlzU3RyaW5nKCkpOwogICAK
ICAgICBjb25zdCBjaGFyKiBzdHIgPSBpZGVudGlmaWVyLT5zdHJpbmcoKTsgICAgCi0gICAgcmV0
dXJuIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJmNvbW1vblZNKCksIFN0cmluZzo6ZnJvbVVURjhX
aXRoTGF0aW4xRmFsbGJhY2soc3RyLCBzdHJsZW4oc3RyKSkpOworICAgIHJldHVybiBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKGNvbW1vblZNKCksIFN0cmluZzo6ZnJvbVVURjhXaXRoTGF0aW4xRmFs
bGJhY2soc3RyLCBzdHJsZW4oc3RyKSkpOwogfQogCiBrZXJuX3JldHVybl90IFdLUENJbnZva2Uo
bWFjaF9wb3J0X3QgY2xpZW50UG9ydCwgdWludDMyX3QgcGx1Z2luSUQsIHVpbnQzMl90IHJlcXVl
c3RJRCwgdWludDMyX3Qgb2JqZWN0SUQsIHVpbnQ2NF90IHNlcnZlcklkZW50aWZpZXIsCkluZGV4
OiBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9QbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbklu
c3RhbmNlUHJveHkubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdExlZ2FjeS9tYWMvUGx1
Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Lm1tCShyZXZpc2lvbiAyNDkx
MjgpCisrKyBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9QbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBs
dWdpbkluc3RhbmNlUHJveHkubW0JKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTAsIDIwMTYgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTkgQXBwbGUgSW5jLiBBbGwgUmlnaHRz
IFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMjc1LDcgKzEy
NzUsNyBAQCBib29sIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6ZW51bWVyCiAKICAgICBF
eGVjU3RhdGUqIGV4ZWMgPSBmcmFtZS0+c2NyaXB0KCkuZ2xvYmFsT2JqZWN0KHBsdWdpbldvcmxk
KCkpLT5nbG9iYWxFeGVjKCk7CiAgCi0gICAgUHJvcGVydHlOYW1lQXJyYXkgcHJvcGVydHlOYW1l
cygmdm0sIFByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3MsIFByaXZhdGVTeW1ib2xNb2RlOjpFeGNs
dWRlKTsKKyAgICBQcm9wZXJ0eU5hbWVBcnJheSBwcm9wZXJ0eU5hbWVzKHZtLCBQcm9wZXJ0eU5h
bWVNb2RlOjpTdHJpbmdzLCBQcml2YXRlU3ltYm9sTW9kZTo6RXhjbHVkZSk7CiAgICAgb2JqZWN0
LT5tZXRob2RUYWJsZSh2bSktPmdldFByb3BlcnR5TmFtZXMob2JqZWN0LCBleGVjLCBwcm9wZXJ0
eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUoKSk7CiAKICAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJy
YXk+IGFycmF5ID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XSk7CkBAIC0x
MzAwLDcgKzEzMDAsNyBAQCBib29sIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6ZW51bWVy
CiAKIHN0YXRpYyBib29sIGdldE9iamVjdElEKE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eSog
cGx1Z2luSW5zdGFuY2VQcm94eSwgSlNPYmplY3QqIG9iamVjdCwgdWludDY0X3QmIG9iamVjdElE
KQogewotICAgIEpTQzo6Vk0mIHZtID0gKm9iamVjdC0+dm0oKTsKKyAgICBKU0M6OlZNJiB2bSA9
IG9iamVjdC0+dm0oKTsKICAgICBpZiAob2JqZWN0LT5jbGFzc0luZm8odm0pICE9IFByb3h5UnVu
dGltZU9iamVjdDo6aW5mbygpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTEzMTgsNyAr
MTMxOCw4IEBAIHN0YXRpYyBib29sIGdldE9iamVjdElEKE5ldHNjYXBlUGx1Z2luSW4KICAgICAK
IHZvaWQgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjphZGRWYWx1ZVRvQXJyYXkoTlNNdXRh
YmxlQXJyYXkgKmFycmF5LCBFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAg
SlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBK
U0xvY2tIb2xkZXIgbG9jayh2bSk7CiAKICAgICBpZiAodmFsdWUuaXNTdHJpbmcoKSkgewogICAg
ICAgICBbYXJyYXkgYWRkT2JqZWN0OltOU051bWJlciBudW1iZXJXaXRoSW50OlN0cmluZ1ZhbHVl
VHlwZV1dOwpAQCAtMTMzOSw3ICsxMzQwLDcgQEAgdm9pZCBOZXRzY2FwZVBsdWdpbkluc3RhbmNl
UHJveHk6OmFkZFZhbAogICAgICAgICAgICAgW2FycmF5IGFkZE9iamVjdDpbTlNOdW1iZXIgbnVt
YmVyV2l0aEludDpvYmplY3RJRF1dOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgW2Fy
cmF5IGFkZE9iamVjdDpbTlNOdW1iZXIgbnVtYmVyV2l0aEludDpKU09iamVjdFZhbHVlVHlwZV1d
OwotICAgICAgICAgICAgW2FycmF5IGFkZE9iamVjdDpbTlNOdW1iZXIgbnVtYmVyV2l0aEludDpt
X2xvY2FsT2JqZWN0cy5pZEZvck9iamVjdChleGVjLT52bSgpLCBvYmplY3QpXV07CisgICAgICAg
ICAgICBbYXJyYXkgYWRkT2JqZWN0OltOU051bWJlciBudW1iZXJXaXRoSW50Om1fbG9jYWxPYmpl
Y3RzLmlkRm9yT2JqZWN0KHZtLCBvYmplY3QpXV07CiAgICAgICAgIH0KICAgICB9IGVsc2UKICAg
ICAgICAgW2FycmF5IGFkZE9iamVjdDpbTlNOdW1iZXIgbnVtYmVyV2l0aEludDpWb2lkVmFsdWVU
eXBlXV07CkBAIC0xMzk1LDcgKzEzOTYsNyBAQCBib29sIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQ
cm94eTo6ZGVtYXJzCiAgICAgICAgIGNhc2UgU3RyaW5nVmFsdWVUeXBlOiB7CiAgICAgICAgICAg
ICBOU1N0cmluZyAqc3RyaW5nID0gW2FycmF5IG9iamVjdEF0SW5kZXg6aW5kZXgrK107CiAgICAg
ICAgICAgICAKLSAgICAgICAgICAgIHJlc3VsdCA9IGpzU3RyaW5nKGV4ZWMsIFN0cmluZyhzdHJp
bmcpKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IGpzU3RyaW5nKGV4ZWMtPnZtKCksIFN0cmluZyhz
dHJpbmcpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgICAgIGNh
c2UgSlNPYmplY3RWYWx1ZVR5cGU6IHsKQEAgLTE0NTMsNyArMTQ1NCw3IEBAIHZvaWQgTmV0c2Nh
cGVQbHVnaW5JbnN0YW5jZVByb3h5OjpkZW1hcnMKIAogdm9pZCBOZXRzY2FwZVBsdWdpbkluc3Rh
bmNlUHJveHk6OnJldGFpbkxvY2FsT2JqZWN0KEpTQzo6SlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICBp
ZiAoIXZhbHVlLmlzT2JqZWN0KCkgfHwgdmFsdWUuaW5oZXJpdHM8UHJveHlSdW50aW1lT2JqZWN0
PigqdmFsdWUuZ2V0T2JqZWN0KCktPnZtKCkpKQorICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSB8
fCB2YWx1ZS5pbmhlcml0czxQcm94eVJ1bnRpbWVPYmplY3Q+KHZhbHVlLmdldE9iamVjdCgpLT52
bSgpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9sb2NhbE9iamVjdHMucmV0YWluKGFzT2Jq
ZWN0KHZhbHVlKSk7CkBAIC0xNDYxLDcgKzE0NjIsNyBAQCB2b2lkIE5ldHNjYXBlUGx1Z2luSW5z
dGFuY2VQcm94eTo6cmV0YWluCiAKIHZvaWQgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Ojpy
ZWxlYXNlTG9jYWxPYmplY3QoSlNDOjpKU1ZhbHVlIHZhbHVlKQogewotICAgIGlmICghdmFsdWUu
aXNPYmplY3QoKSB8fCB2YWx1ZS5pbmhlcml0czxQcm94eVJ1bnRpbWVPYmplY3Q+KCp2YWx1ZS5n
ZXRPYmplY3QoKS0+dm0oKSkpCisgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpIHx8IHZhbHVlLmlu
aGVyaXRzPFByb3h5UnVudGltZU9iamVjdD4odmFsdWUuZ2V0T2JqZWN0KCktPnZtKCkpKQogICAg
ICAgICByZXR1cm47CiAKICAgICBtX2xvY2FsT2JqZWN0cy5yZWxlYXNlKGFzT2JqZWN0KHZhbHVl
KSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9QbHVnaW5zL0hvc3RlZC9Qcm94eUlu
c3RhbmNlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1BsdWdpbnMv
SG9zdGVkL1Byb3h5SW5zdGFuY2UubW0JKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL1BsdWdpbnMvSG9zdGVkL1Byb3h5SW5zdGFuY2UubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTAsIDIwMTYg
QXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIw
MTkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0yODIsNyArMjgyLDcgQEAgSlNWYWx1ZSBQcm94eUluc3RhbmNlOjpkZWZh
dWx0VmFsdWUoRXhlYwogSlNWYWx1ZSBQcm94eUluc3RhbmNlOjpzdHJpbmdWYWx1ZShFeGVjU3Rh
dGUqIGV4ZWMpIGNvbnN0CiB7CiAgICAgLy8gRklYTUU6IEltcGxlbWVudCBzb21ldGhpbmcgc2Vu
c2libGUuCi0gICAgcmV0dXJuIGpzRW1wdHlTdHJpbmcoZXhlYyk7CisgICAgcmV0dXJuIGpzRW1w
dHlTdHJpbmcoZXhlYy0+dm0oKSk7CiB9CiAKIEpTVmFsdWUgUHJveHlJbnN0YW5jZTo6bnVtYmVy
VmFsdWUoRXhlY1N0YXRlKikgY29uc3QKQEAgLTMxOSw2ICszMTksNyBAQCB2b2lkIFByb3h5SW5z
dGFuY2U6OmdldFByb3BlcnR5TmFtZXMoRXhlCiAgICAgCiAgICAgTlNBcnJheSAqYXJyYXkgPSBb
TlNQcm9wZXJ0eUxpc3RTZXJpYWxpemF0aW9uIHByb3BlcnR5TGlzdFdpdGhEYXRhOihfX2JyaWRn
ZSBOU0RhdGEgKilyZXBseS0+bV9yZXN1bHQuZ2V0KCkgb3B0aW9uczpOU1Byb3BlcnR5TGlzdElt
bXV0YWJsZSBmb3JtYXQ6bnVsbHB0ciBlcnJvcjpudWxscHRyXTsKICAgICAKKyAgICBWTSYgdm0g
PSBleGVjLT52bSgpOwogICAgIGZvciAoTlNOdW1iZXIgKm51bWJlciBpbiBhcnJheSkgewogICAg
ICAgICBJZGVudGlmaWVyUmVwKiBpZGVudGlmaWVyID0gcmVpbnRlcnByZXRfY2FzdDxJZGVudGlm
aWVyUmVwKj4oW251bWJlciBsb25nTG9uZ1ZhbHVlXSk7CiAgICAgICAgIGlmICghSWRlbnRpZmll
clJlcDo6aXNWYWxpZChpZGVudGlmaWVyKSkKQEAgLTMyNiw5ICszMjcsOSBAQCB2b2lkIFByb3h5
SW5zdGFuY2U6OmdldFByb3BlcnR5TmFtZXMoRXhlCiAKICAgICAgICAgaWYgKGlkZW50aWZpZXIt
PmlzU3RyaW5nKCkpIHsKICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHN0ciA9IGlkZW50aWZpZXIt
PnN0cmluZygpOwotICAgICAgICAgICAgbmFtZUFycmF5LmFkZChJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKCZjb21tb25WTSgpLCBTdHJpbmc6OmZyb21VVEY4V2l0aExhdGluMUZhbGxiYWNrKHN0ciwg
c3RybGVuKHN0cikpKSk7CisgICAgICAgICAgICBuYW1lQXJyYXkuYWRkKElkZW50aWZpZXI6OmZy
b21TdHJpbmcodm0sIFN0cmluZzo6ZnJvbVVURjhXaXRoTGF0aW4xRmFsbGJhY2soc3RyLCBzdHJs
ZW4oc3RyKSkpKTsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBuYW1lQXJyYXkuYWRkKElk
ZW50aWZpZXI6OmZyb20oZXhlYywgaWRlbnRpZmllci0+bnVtYmVyKCkpKTsKKyAgICAgICAgICAg
IG5hbWVBcnJheS5hZGQoSWRlbnRpZmllcjo6ZnJvbSh2bSwgaWRlbnRpZmllci0+bnVtYmVyKCkp
KTsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2Vi
RnJhbWUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9X
ZWJGcmFtZS5tbQkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL1dlYktpdExlZ2FjeS9tYWMv
V2ViVmlldy9XZWJGcmFtZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIwOTAsNyArMjA5MCw3IEBA
IC0gKE5TU3RyaW5nICopX3N0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3IKIAogICAgIC8vIFRoZSBn
bG9iYWwgb2JqZWN0IGlzIHByb2JhYmx5IGEgcHJveHkgb2JqZWN0PyAtIGlmIHNvLCB3ZSBrbm93
IGhvdyB0byB1c2UgdGhpcyEKICAgICBKU0M6OkpTT2JqZWN0KiBnbG9iYWxPYmplY3RPYmogPSB0
b0pTKGdsb2JhbE9iamVjdFJlZik7Ci0gICAgSlNDOjpWTSYgdm0gPSAqZ2xvYmFsT2JqZWN0T2Jq
LT52bSgpOworICAgIEpTQzo6Vk0mIHZtID0gZ2xvYmFsT2JqZWN0T2JqLT52bSgpOwogICAgIGlm
ICghc3RyY21wKGdsb2JhbE9iamVjdE9iai0+Y2xhc3NJbmZvKHZtKS0+Y2xhc3NOYW1lLCAiSlNX
aW5kb3dQcm94eSIpKQogICAgICAgICBhbnlXb3JsZEdsb2JhbE9iamVjdCA9IEpTQzo6anNEeW5h
bWljQ2FzdDxKU0RPTVdpbmRvdyo+KHZtLCBzdGF0aWNfY2FzdDxKU1dpbmRvd1Byb3h5Kj4oZ2xv
YmFsT2JqZWN0T2JqKS0+d2luZG93KCkpOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>377328</attachid>
            <date>2019-08-27 01:33:41 -0700</date>
            <delta_ts>2019-08-27 01:51:25 -0700</delta_ts>
            <desc>work in progress for EWS testing.</desc>
            <filename>bug-201172.patch</filename>
            <type>text/plain</type>
            <size>1517705</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjQ5MTM0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExNDAg
QEAKKzIwMTktMDgtMjcgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgorCisgICAgICAg
IFJlZmFjdG9yIHRvIHVzZSBWTSYgaW5zdGVhZCBvZiBWTSogYXQgYXMgbWFueSBwbGFjZXMgYXMg
cG9zc2libGUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMDExNzIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBVc2luZyBWTSYgZG9jdW1lbnRzIG1vcmUgY2xlYXJseSB0aGF0IHRoZSBWTSBwb2ludGVyIGlz
IGV4cGVjdGVkIHRvIG5ldmVyIGJlIG51bGwKKyAgICAgICAgaW4gbW9zdCBjYXNlcy4gIFRoZXJl
IGFyZSBhIGZldyBwbGFjZXMgd2hlcmUgaXQgY2FuIGJlIG51bGwgKGUuZyBKU0xvY2ssIGFuZAor
ICAgICAgICBERkc6OlBsYW4pLiAgVGhvc2Ugd2lsbCBiZSBsZWZ0IHVzaW5nIGEgVk0qLgorCisg
ICAgICAgIEFsc28gY29udmVydGVkIHNvbWUgdXNlcyBvZiBFeGVjU3RhdGUqIHRvIHVzaW5nIFZN
JiBpbnN0ZWFkIHNpbmNlIHRoZSBFeGVjU3RhdGUqCisgICAgICAgIGlzIG9ubHkgdGhlcmUgdG8g
ZmV0Y2ggdGhlIFZNIHBvaW50ZXIuICBEb2luZyB0aGlzIGFsc28gcmVkdWNlcyB0aGUgbnVtYmVy
IG9mCisgICAgICAgIHRpbWVzIHdlIGhhdmUgdG8gY29tcHV0ZSBWTSogZnJvbSBFeGVjU3RhdGUq
LgorCisgICAgICAgIFRoaXMgcGF0Y2ggaXMgbm90IGV4aGF1c3RpdmUgaW4gY29udmVydGluZyB0
byB1c2UgVk0mLCBidXQgYXBwbGllcyB0aGUgY2hhbmdlIHRvCisgICAgICAgIG1hbnkgY29tbW9u
bHkgdXNlZCBwaWVjZXMgb2YgY29kZSBmb3IgYSBzdGFydC4KKworICAgICAgICBUaGlzIHBhdGNo
IGFsc28gcmVtb3ZlcyB0aGUgSWRlbnRpZmllciBjb25zdHJ1Y3RvciBhbmQgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZygpCisgICAgICAgIG1ldGhvZHMgdGhhdCBhY3Qgb24gQXRvbVN0cmluZyBhbmQg
QXRvbVN0cmluZ0ltcGwuCisKKyAgICAgICAgQXRvbVN0cmluZyBoYXMgYSBjYXN0IG9wZXJhdG9y
IHRoYXQgY2FuIGltcGxpY2l0bHkgY29udmVydCBpdCB0byBhIFN0cmluZy4KKyAgICAgICAgQXRv
bVN0cmluZ0ltcGwgaXMgYSBzdWJjbGFzcyBvZiBTdHJpbmdJbXBsLiAgQXMgYSByZXN1bHQsIGhh
dmluZworICAgICAgICBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCkgdmFyaWFudHMgZm9yIHRoZXNl
IHR5cGVzIG9ubHkgcmVzdWx0IGluIGFtYmlndWl0eSB3aGVuCisgICAgICAgIGFuIEF0b21TdHJp
bmcgaXMgZW5jb3VudGVyZWQuCisKKyAgICAgICAgVGhlIFN0cmluZyBhbmQgU3RyaW5nSW1wbCB2
YXJpYW50cyBvZiBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCkgd2lsbCBjYWxsIGlubGluZQorICAg
ICAgICBtZXRob2QgSWRlbnRpZmllcjo6YWRkKCkgd2hpY2gsIGluIHR1cm4sIGNhbGxzIGlubGlu
ZSBtZXRob2QKKyAgICAgICAgQXRvbVN0cmluZ0ltcGw6OmFkZFdpdGhTdHJpbmdUYWJsZVByb3Zp
ZGVyKCksIHdoaWNoIGRvZXMgYSBudWxsIGNoZWNrLCBhbmQgdGhlbgorICAgICAgICBjYWxscyB0
aGUgaW5saW5lIG1ldGhvZCBBdG9tU3RyaW5nSW1wbDo6YWRkKCksIC4uLiB3aGljaCBmaW5hbGx5
IGRvZXMgYQorICAgICAgICBzdHJpbmcuaXNBdG9tKCkgY2hlY2suICBUaGUgY2hlY2sgYmFzaWNh
bGx5IHRlc3RzIGEgYml0IG9uIHRoZSBTdHJpbmdJbXBsJ3MgZmxhZ3MuCisKKyAgICAgICAgTGV0
J3MgdGVzdCBpZiB0aGVyZSdzIGFueSBwZXJmb3JtYW5jZSBkaWZmZXJlbmNlIGJldHdlZW4gdXNp
bmcgdGhlIFN0cmluZ0ltcGwgYW5kCisgICAgICAgIHRoZSBBdG9tU3RyaW5nSW1wbCB2YXJpYW50
cy4KKworICAgICAgICAqIEFQSS9BUElDYXN0Lmg6CisgICAgICAgICh0b0pTKToKKyAgICAgICAg
KiBBUEkvSlNBUElHbG9iYWxPYmplY3QubW06CisgICAgICAgIChKU0M6OkpTQVBJR2xvYmFsT2Jq
ZWN0Ojptb2R1bGVMb2FkZXJSZXNvbHZlKToKKyAgICAgICAgKEpTQzo6SlNBUElHbG9iYWxPYmpl
Y3Q6Om1vZHVsZUxvYWRlckltcG9ydE1vZHVsZSk6CisgICAgICAgIChKU0M6OkpTQVBJR2xvYmFs
T2JqZWN0Ojptb2R1bGVMb2FkZXJGZXRjaCk6CisgICAgICAgIChKU0M6OkpTQVBJR2xvYmFsT2Jq
ZWN0Ojptb2R1bGVMb2FkZXJDcmVhdGVJbXBvcnRNZXRhUHJvcGVydGllcyk6CisgICAgICAgIChK
U0M6OkpTQVBJR2xvYmFsT2JqZWN0Ojpsb2FkQW5kRXZhbHVhdGVKU1NjcmlwdE1vZHVsZSk6Cisg
ICAgICAgICogQVBJL0pTQ2FsbGJhY2tDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OkpT
Q2FsbGJhY2tDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAqIEFQSS9KU0Nh
bGxiYWNrT2JqZWN0RnVuY3Rpb25zLmg6CisgICAgICAgIChKU0M6OkpTQ2FsbGJhY2tPYmplY3Q8
UGFyZW50Pjo6YXNDYWxsYmFja09iamVjdCk6CisgICAgICAgIChKU0M6OkpTQ2FsbGJhY2tPYmpl
Y3Q8UGFyZW50Pjo6fkpTQ2FsbGJhY2tPYmplY3QpOgorICAgICAgICAoSlNDOjpKU0NhbGxiYWNr
T2JqZWN0PFBhcmVudD46OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgpOgorICAgICAgICAoSlND
OjpKU0NhbGxiYWNrT2JqZWN0PFBhcmVudD46OnB1dEJ5SW5kZXgpOgorICAgICAgICAoSlNDOjpK
U0NhbGxiYWNrT2JqZWN0PFBhcmVudD46OmRlbGV0ZVByb3BlcnR5QnlJbmRleCk6CisgICAgICAg
IChKU0M6OkpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5h
bWVzKToKKyAgICAgICAgKiBBUEkvSlNDb250ZXh0Lm1tOgorICAgICAgICAoLVtKU0NvbnRleHQg
ZGVwZW5kZW5jeUlkZW50aWZpZXJzRm9yTW9kdWxlSlNTY3JpcHQ6XSk6CisgICAgICAgICogQVBJ
L0pTT2JqZWN0UmVmLmNwcDoKKyAgICAgICAgKEpTT2JqZWN0TWFrZUZ1bmN0aW9uKToKKyAgICAg
ICAgKGNsYXNzSW5mb1ByaXZhdGUpOgorICAgICAgICAoSlNPYmplY3RHZXRQcml2YXRlKToKKyAg
ICAgICAgKEpTT2JqZWN0U2V0UHJpdmF0ZSk6CisgICAgICAgIChKU09iamVjdENvcHlQcm9wZXJ0
eU5hbWVzKToKKyAgICAgICAgKEpTUHJvcGVydHlOYW1lQWNjdW11bGF0b3JBZGROYW1lKToKKyAg
ICAgICAgKEpTT2JqZWN0R2V0UHJveHlUYXJnZXQpOgorICAgICAgICAqIEFQSS9KU1NjcmlwdFJl
Zi5jcHA6CisgICAgICAgIChwYXJzZVNjcmlwdCk6CisgICAgICAgICogQVBJL0pTVmFsdWVSZWYu
Y3BwOgorICAgICAgICAoSlNWYWx1ZU1ha2VTdHJpbmcpOgorICAgICAgICAqIEFQSS9PcGFxdWVK
U1N0cmluZy5jcHA6CisgICAgICAgIChPcGFxdWVKU1N0cmluZzo6aWRlbnRpZmllciBjb25zdCk6
CisgICAgICAgICogQVBJL2dsaWIvSlNDQ29udGV4dC5jcHA6CisgICAgICAgIChqc2NfY29udGV4
dF9jaGVja19zeW50YXgpOgorICAgICAgICAqIEtleXdvcmRMb29rdXBHZW5lcmF0b3IucHk6Cisg
ICAgICAgIChUcmllLnByaW50U3ViVHJlZUFzQyk6CisgICAgICAgICogU2NyaXB0cy93a2J1aWx0
aW5zL2J1aWx0aW5zX2dlbmVyYXRlX3dyYXBwZXJfaGVhZGVyLnB5OgorICAgICAgICAoQnVpbHRp
bnNXcmFwcGVySGVhZGVyR2VuZXJhdG9yLmdlbmVyYXRlX2NvbnN0cnVjdG9yKToKKyAgICAgICAg
KiBTY3JpcHRzL3drYnVpbHRpbnMvYnVpbHRpbnNfdGVtcGxhdGVzLnB5OgorICAgICAgICAqIGJp
bmRpbmdzL1NjcmlwdEZ1bmN0aW9uQ2FsbC5jcHA6CisgICAgICAgIChEZXByZWNhdGVkOjpTY3Jp
cHRDYWxsQXJndW1lbnRIYW5kbGVyOjphcHBlbmRBcmd1bWVudCk6CisgICAgICAgIChEZXByZWNh
dGVkOjpTY3JpcHRGdW5jdGlvbkNhbGw6OmNhbGwpOgorICAgICAgICAqIGJpbmRpbmdzL1Njcmlw
dFZhbHVlLmNwcDoKKyAgICAgICAgKEluc3BlY3Rvcjo6anNUb0luc3BlY3RvclZhbHVlKToKKyAg
ICAgICAgKiBidWlsdGlucy9CdWlsdGluRXhlY3V0YWJsZXMuY3BwOgorICAgICAgICAoSlNDOjpC
dWlsdGluRXhlY3V0YWJsZXM6OmNyZWF0ZUV4ZWN1dGFibGUpOgorICAgICAgICAqIGJ1aWx0aW5z
L0J1aWx0aW5OYW1lcy5jcHA6CisgICAgICAgIChKU0M6OkJ1aWx0aW5OYW1lczo6QnVpbHRpbk5h
bWVzKToKKyAgICAgICAgKiBidWlsdGlucy9CdWlsdGluTmFtZXMuaDoKKyAgICAgICAgKEpTQzo6
QnVpbHRpbk5hbWVzOjpnZXRQdWJsaWNOYW1lIGNvbnN0KToKKyAgICAgICAgKiBieXRlY29kZS9C
eXRlY29kZUR1bXBlci5jcHA6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlRHVtcGVyPEJsb2NrPjo6
dm0gY29uc3QpOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmg6CisgICAgICAg
ICogYnl0ZWNvZGUvQnl0ZWNvZGVHZW5lcmF0b3JpZmljYXRpb24uY3BwOgorICAgICAgICAoSlND
OjpCeXRlY29kZUdlbmVyYXRvcmlmaWNhdGlvbjo6Qnl0ZWNvZGVHZW5lcmF0b3JpZmljYXRpb24p
OgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcmlmaWNhdGlvbjo6c3RvcmFnZUZvckdl
bmVyYXRvckxvY2FsKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3JpZmljYXRpb246
OnJ1bik6CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVJbnRyaW5zaWNSZWdpc3RyeS5jcHA6
CisgICAgICAgIChKU0M6OkJ5dGVjb2RlSW50cmluc2ljUmVnaXN0cnk6OnNlbnRpbmVsTWFwQnVj
a2V0VmFsdWUpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUludHJpbnNpY1JlZ2lzdHJ5OjpzZW50
aW5lbFNldEJ1Y2tldFZhbHVlKToKKyAgICAgICAgKiBieXRlY29kZS9DYWxsVmFyaWFudC5oOgor
ICAgICAgICAoSlNDOjpDYWxsVmFyaWFudDo6aW50ZXJuYWxGdW5jdGlvbiBjb25zdCk6CisgICAg
ICAgIChKU0M6OkNhbGxWYXJpYW50OjpmdW5jdGlvbiBjb25zdCk6CisgICAgICAgIChKU0M6OkNh
bGxWYXJpYW50Ojppc0Nsb3N1cmVDYWxsIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FsbFZhcmlh
bnQ6OmV4ZWN1dGFibGUgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWxsVmFyaWFudDo6ZnVuY3Rp
b25FeGVjdXRhYmxlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FsbFZhcmlhbnQ6Om5hdGl2ZUV4
ZWN1dGFibGUgY29uc3QpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAg
ICAgIChKU0M6OkNvZGVCbG9jazo6ZHVtcFNvdXJjZSk6CisgICAgICAgIChKU0M6OkNvZGVCbG9j
azo6Q29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzZXRDb25zdGFudElkZW50
aWZpZXJTZXRSZWdpc3RlcnMpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNldE51bVBhcmFt
ZXRlcnMpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmZpbmFsaXplQmFzZWxpbmVKSVRJbmxp
bmVDYWNoZXMpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnVubGlua0luY29taW5nQ2FsbHMp
OgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnJlcGxhY2VtZW50KToKKyAgICAgICAgKEpTQzo6
Q29kZUJsb2NrOjpjb21wdXRlQ2FwYWJpbGl0eUxldmVsKToKKyAgICAgICAgKEpTQzo6Q29kZUJs
b2NrOjpub3RpY2VJbmNvbWluZ0NhbGwpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om5hbWVG
b3JSZWdpc3Rlcik6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6aW5zZXJ0QmFzaWNCbG9ja0Jv
dW5kYXJpZXNGb3JDb250cm9sRmxvd1Byb2ZpbGVyKToKKyAgICAgICAgKiBieXRlY29kZS9Db2Rl
QmxvY2suaDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp2bSBjb25zdCk6CisgICAgICAgIChK
U0M6OkNvZGVCbG9jazo6bnVtYmVyT2ZBcmd1bWVudFZhbHVlUHJvZmlsZXMpOgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OnZhbHVlUHJvZmlsZUZvckFyZ3VtZW50KToKKyAgICAgICAgKiBieXRl
Y29kZS9EZWZlcnJlZFNvdXJjZUR1bXAuY3BwOgorICAgICAgICAoSlNDOjpEZWZlcnJlZFNvdXJj
ZUR1bXA6OkRlZmVycmVkU291cmNlRHVtcCk6CisgICAgICAgICogYnl0ZWNvZGUvRXZhbENvZGVC
bG9jay5oOgorICAgICAgICAqIGJ5dGVjb2RlL0Z1bmN0aW9uQ29kZUJsb2NrLmg6CisgICAgICAg
ICogYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHA6CisgICAgICAgIChKU0M6OkdldEJ5SWRTdGF0
dXM6OmNvbXB1dGVGcm9tTExJbnQpOgorICAgICAgICAqIGJ5dGVjb2RlL0dsb2JhbENvZGVCbG9j
ay5oOgorICAgICAgICAoSlNDOjpHbG9iYWxDb2RlQmxvY2s6Okdsb2JhbENvZGVCbG9jayk6Cisg
ICAgICAgICogYnl0ZWNvZGUvTW9kdWxlUHJvZ3JhbUNvZGVCbG9jay5oOgorICAgICAgICAqIGJ5
dGVjb2RlL09iamVjdEFsbG9jYXRpb25Qcm9maWxlSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpP
YmplY3RBbGxvY2F0aW9uUHJvZmlsZUJhc2U8RGVyaXZlZD46OnBvc3NpYmxlRGVmYXVsdFByb3Bl
cnR5Q291bnQpOgorICAgICAgICAqIGJ5dGVjb2RlL1BvbHlQcm90b0FjY2Vzc0NoYWluLmNwcDoK
KyAgICAgICAgKEpTQzo6UG9seVByb3RvQWNjZXNzQ2hhaW46OmNyZWF0ZSk6CisgICAgICAgICog
Ynl0ZWNvZGUvUHJvZ3JhbUNvZGVCbG9jay5oOgorICAgICAgICAqIGJ5dGVjb2RlL1Byb3BlcnR5
Q29uZGl0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6UHJvcGVydHlDb25kaXRpb246OmlzV2F0Y2hh
YmxlV2hlblZhbGlkIGNvbnN0KToKKyAgICAgICAgKiBieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNw
cDoKKyAgICAgICAgKEpTQzo6UHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZyb21MTEludCk6CisgICAg
ICAgICogYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwOgorICAgICAgICAoSlNDOjpTdHJ1
Y3R1cmVTdHViSW5mbzo6aW5pdEdldEJ5SWRTZWxmKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJl
U3R1YkluZm86OmluaXRQdXRCeUlkUmVwbGFjZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0
dWJJbmZvOjppbml0SW5CeUlkU2VsZik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZv
OjphZGRBY2Nlc3NDYXNlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86OnZpc2l0
V2Vha1JlZmVyZW5jZXMpOgorICAgICAgICAqIGJ5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNw
cDoKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OlVubGlua2VkQ29kZUJsb2NrKToK
KyAgICAgICAgKiBieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpV
bmxpbmtlZENvZGVCbG9jazo6YWRkU2V0Q29uc3RhbnQpOgorICAgICAgICAoSlNDOjpVbmxpbmtl
ZENvZGVCbG9jazo6YWRkQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9j
azo6YWRkRnVuY3Rpb25EZWNsKToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmFk
ZEZ1bmN0aW9uRXhwcik6CisgICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRFdmFsQ29kZUJsb2Nr
Lmg6CisgICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jay5oOgorICAg
ICAgICAqIGJ5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmNwcDoKKyAgICAgICAg
KEpTQzo6Z2VuZXJhdGVVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6
VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OlVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKToK
KyAgICAgICAgKiBieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5oOgorICAgICAg
ICAqIGJ5dGVjb2RlL1VubGlua2VkR2xvYmFsQ29kZUJsb2NrLmg6CisgICAgICAgIChKU0M6OlVu
bGlua2VkR2xvYmFsQ29kZUJsb2NrOjpVbmxpbmtlZEdsb2JhbENvZGVCbG9jayk6CisgICAgICAg
ICogYnl0ZWNvZGUvVW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrLmg6CisgICAgICAgICog
Ynl0ZWNvZGUvVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrLmg6CisgICAgICAgICogYnl0ZWNvbXBp
bGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0
b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6
OnB1c2hMZXhpY2FsU2NvcGVJbnRlcm5hbCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJh
dG9yOjplbWl0RGlyZWN0UHV0QnlJZCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9y
OjpnZXRWYXJpYWJsZXNVbmRlclREWik6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9y
OjphZGRCaWdJbnRDb25zdGFudCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjph
ZGRUZW1wbGF0ZU9iamVjdENvbnN0YW50KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0
b3I6OmVtaXROZXdEZWZhdWx0Q29uc3RydWN0b3IpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdl
bmVyYXRvcjo6ZW1pdFNldEZ1bmN0aW9uTmFtZUlmTmVlZGVkKToKKyAgICAgICAgKiBieXRlY29t
cGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0
b3I6OnZtIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnByb3BlcnR5
TmFtZXMgY29uc3QpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdE5vZGVJ
blRhaWxQb3NpdGlvbik6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RGVm
aW5lQ2xhc3NFbGVtZW50cyk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0
Tm9kZUluQ29uZGl0aW9uQ29udGV4dCk6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL05vZGVzQ29k
ZWdlbi5jcHA6CisgICAgICAgIChKU0M6OlJlZ0V4cE5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAg
ICAgIChKU0M6OkFycmF5Tm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6RnVuY3Rp
b25DYWxsUmVzb2x2ZU5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkJ5dGVjb2Rl
SW50cmluc2ljTm9kZTo6ZW1pdF9pbnRyaW5zaWNfZ2V0QnlJZERpcmVjdFByaXZhdGUpOgorICAg
ICAgICAoSlNDOjpCeXRlY29kZUludHJpbnNpY05vZGU6OmVtaXRfaW50cmluc2ljX3B1dEJ5SWRE
aXJlY3RQcml2YXRlKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVJbnRyaW5zaWNOb2RlOjplbWl0
X2ludHJpbnNpY190b09iamVjdCk6CisgICAgICAgIChKU0M6Okluc3RhbmNlT2ZOb2RlOjplbWl0
Qnl0ZWNvZGUpOgorICAgICAgICAqIGRlYnVnZ2VyL0RlYnVnZ2VyLmNwcDoKKyAgICAgICAgKiBk
ZWJ1Z2dlci9EZWJ1Z2dlclBhcnNlRGF0YS5jcHA6CisgICAgICAgIChKU0M6OmdhdGhlckRlYnVn
Z2VyUGFyc2VEYXRhKToKKyAgICAgICAgKiBkZWJ1Z2dlci9EZWJ1Z2dlclNjb3BlLmNwcDoKKyAg
ICAgICAgKEpTQzo6RGVidWdnZXJTY29wZTo6bmV4dCk6CisgICAgICAgIChKU0M6OkRlYnVnZ2Vy
U2NvcGU6Om5hbWUgY29uc3QpOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlclNjb3BlOjpsb2NhdGlv
biBjb25zdCk6CisgICAgICAgICogZGZnL0RGR0Rlc2lyZWRJZGVudGlmaWVycy5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6RGVzaXJlZElkZW50aWZpZXJzOjpyZWFsbHlBZGQpOgorICAgICAgICAq
IGRmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkFycmF5
QnVmZmVyVmlld1dhdGNocG9pbnRBZGFwdG9yOjphZGQpOgorICAgICAgICAoSlNDOjpERkc6OkFk
YXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludEFkYXB0b3I6OmFkZCk6CisgICAgICAgICogZGZnL0RG
R0Zyb3plblZhbHVlLmg6CisgICAgICAgIChKU0M6OkRGRzo6RnJvemVuVmFsdWU6OkZyb3plblZh
bHVlKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguY3BwOgorICAgICAgICAoSlNDOjpERkc6Okdy
YXBoOjpjYW5PcHRpbWl6ZVN0cmluZ09iamVjdEFjY2Vzcyk6CisgICAgICAgICogZGZnL0RGR0pJ
VENvbXBpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6bGlua09TUkV4
aXRzKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6Y29tcGlsZUV4Y2VwdGlvbkhh
bmRsZXJzKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6bGluayk6CisgICAgICAg
IChKU0M6OkRGRzo6ZW1pdFN0YWNrT3ZlcmZsb3dDaGVjayk6CisgICAgICAgIChKU0M6OkRGRzo6
SklUQ29tcGlsZXI6OmNvbXBpbGVGdW5jdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29t
cGlsZXI6OmV4Y2VwdGlvbkNoZWNrKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6
bWFrZUNhdGNoT1NSRW50cnlCdWZmZXIpOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5o
OgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpleGNlcHRpb25DaGVja1dpdGhDYWxs
RnJhbWVSb2xsYmFjayk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmZhc3RFeGNl
cHRpb25DaGVjayk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OnZtKToKKyAgICAg
ICAgKiBkZmcvREZHTGF6eUpTVmFsdWUuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkxhenlKU1Zh
bHVlOjpnZXRWYWx1ZSBjb25zdCk6CisgICAgICAgIChKU0M6OkRGRzo6TGF6eUpTVmFsdWU6OmVt
aXQgY29uc3QpOgorICAgICAgICAqIGRmZy9ERkdPU1JFbnRyeS5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6cHJlcGFyZU9TUkVudHJ5KToKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdC5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6T1NSRXhpdDo6Y29tcGlsZU9TUkV4aXQpOgorICAgICAgICAoSlND
OjpERkc6Ok9TUkV4aXQ6OmRlYnVnT3BlcmF0aW9uUHJpbnRTcGVjdWxhdGlvbkZhaWx1cmUpOgor
ICAgICAgICAqIGRmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uaDoKKyAgICAgICAgKEpTQzo6
REZHOjphZGp1c3RGcmFtZUFuZFN0YWNrSW5PU1JFeGl0Q29tcGlsZXJUaHVuayk6CisgICAgICAg
ICogZGZnL0RGR09wZXJhdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpERkc6Om5ld1R5cGVkQXJy
YXlXaXRoU2l6ZSk6CisgICAgICAgIChKU0M6OkRGRzo6YmluYXJ5T3ApOgorICAgICAgICAoSlND
OjpERkc6OmJpdHdpc2VCaW5hcnlPcCk6CisgICAgICAgICogZGZnL0RGR1BsYW4uY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OlBsYW46OlBsYW4pOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVtaXRBbGxvY2F0
ZVJhd09iamVjdCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVT
dHJpbmdTbGljZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVD
dXJyZW50QmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxl
Q2hlY2tUcmFwcyk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVH
ZXRCeVZhbE9uU3RyaW5nKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUZyb21DaGFyQ29kZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVTdHJpbmdaZXJvTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZUxvZ2ljYWxOb3RTdHJpbmdPck90aGVyKToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6ZW1pdFN0cmluZ0JyYW5jaCk6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmVtaXRTdHJpbmdPck90aGVyQnJhbmNoKToKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6Y2FnZVR5cGVkQXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEdsb2JhbE9iamVjdCk6CisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVOZXdGdW5jdGlvbkNvbW1vbik6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDcmVhdGVBY3RpdmF0aW9uKToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNyZWF0ZURpcmVjdEFy
Z3VtZW50cyk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTcHJl
YWQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlTmV3QXJyYXkp
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlTmV3QXJyYXlXaXRo
U3ByZWFkKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFycmF5
U2xpY2UpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJyYXlQ
dXNoKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVR5cGVPZik6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBbGxvY2F0ZVByb3Bl
cnR5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVS
ZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZU51a2VTdHJ1Y3R1cmVBbmRTZXRCdXR0ZXJmbHkpOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlQ2FsbERPTUdldHRlcik6CisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDaGVja1N1YkNsYXNzKToKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5ld1N0cmluZ09iamVjdCk6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVOZXdUeXBlZEFycmF5V2l0aFNp
emUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlTmV3UmVnZXhw
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVN0b3JlQmFycmll
cik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTdHJpbmdSZXBs
YWNlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU1hdGVyaWFs
aXplTmV3T2JqZWN0KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdEFs
bG9jYXRlQnV0dGVyZmx5KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUdldE1hcEJ1Y2tldE5leHQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
Ojpjb21waWxlT2JqZWN0S2V5cyk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVDcmVhdGVUaGlzKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZU5ld09iamVjdCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVMb2dTaGFkb3dDaGlja2VuUHJvbG9ndWUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpjb21waWxlTG9nU2hhZG93Q2hpY2tlblRhaWwpOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0UHJvdG90eXBlT2YpOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlQWxsb2NhdGVOZXdBcnJheVdpdGhTaXplKToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVByb2ZpbGVUeXBlKToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU1ha2VSb3BlKToKKyAg
ICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuaDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6dm0pOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpwcmVw
YXJlRm9yRXh0ZXJuYWxDYWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
ZW1pdEFsbG9jYXRlSlNPYmplY3RXaXRoS25vd25TaXplKToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6ZW1pdEFsbG9jYXRlSlNPYmplY3QpOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjplbWl0QWxsb2NhdGVWYXJpYWJsZVNpemVkSlNPYmplY3QpOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0QWxsb2NhdGVEZXN0cnVjdGlibGVP
YmplY3QpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwpOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlTG9naWNhbE5vdCk6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmVtaXRCcmFuY2gpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlTm9u
UGVlcGhvbGVDb21wYXJlTnVsbE9yVW5kZWZpbmVkKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaE51bGxPclVuZGVmaW5lZCk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKToKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdE9yT3RoZXJMb2dpY2FsTm90
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUxvZ2ljYWxOb3Qp
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0T2JqZWN0T3JPdGhlckJy
YW5jaCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVtaXRCcmFuY2gpOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBk
ZmcvREZHVGh1bmtzLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpvc3JFeGl0VGh1bmtHZW5lcmF0
b3IpOgorICAgICAgICAoSlNDOjpERkc6Om9zckV4aXRHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3Ip
OgorICAgICAgICAoSlNDOjpERkc6Om9zckVudHJ5VGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAq
IGRmZy9ERkdUaHVua3MuaDoKKyAgICAgICAgKiBkZmcvREZHVG9GVExGb3JPU1JFbnRyeURlZmVy
cmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6VG9GVExGb3JP
U1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6Y29tcGlsYXRpb25EaWRDb21wbGV0
ZSk6CisgICAgICAgICogZGZnL0RGR1dvcmtsaXN0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpX
b3JrbGlzdDo6dmlzaXRXZWFrUmVmZXJlbmNlcyk6CisgICAgICAgICogZHluYmVuY2guY3BwOgor
ICAgICAgICAobWFpbik6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9CMy5jcHA6CisgICAg
ICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVNYWtlUm9wZSk6CisgICAg
ICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVTdHJpbmdTbGljZSk6Cisg
ICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmJvb2xpZnkpOgorICAgICAgICAq
IGZ0bC9GVExUaHVua3MuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OmdlbmVyaWNHZW5lcmF0aW9u
VGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpGVEw6Om9zckV4aXRHZW5lcmF0aW9uVGh1
bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpGVEw6OmxhenlTbG93UGF0aEdlbmVyYXRpb25U
aHVua0dlbmVyYXRvcik6CisgICAgICAgICogZnRsL0ZUTFRodW5rcy5oOgorICAgICAgICAqIGhl
YXAvQ2VsbENvbnRhaW5lci5oOgorICAgICAgICAqIGhlYXAvQ2VsbENvbnRhaW5lcklubGluZXMu
aDoKKyAgICAgICAgKEpTQzo6Q2VsbENvbnRhaW5lcjo6dm0gY29uc3QpOgorICAgICAgICAoSlND
OjpDZWxsQ29udGFpbmVyOjpoZWFwIGNvbnN0KToKKyAgICAgICAgKiBoZWFwL0NvbXBsZXRlU3Vi
c3BhY2UuY3BwOgorICAgICAgICAoSlNDOjpDb21wbGV0ZVN1YnNwYWNlOjp0cnlBbGxvY2F0ZVNs
b3cpOgorICAgICAgICAoSlNDOjpDb21wbGV0ZVN1YnNwYWNlOjpyZWFsbG9jYXRlTGFyZ2VBbGxv
Y2F0aW9uTm9uVmlydHVhbCk6CisgICAgICAgICogaGVhcC9HQ0FjdGl2aXR5Q2FsbGJhY2suaDoK
KyAgICAgICAgKiBoZWFwL0dDQXNzZXJ0aW9ucy5oOgorICAgICAgICAqIGhlYXAvSGFuZGxlU2V0
LmNwcDoKKyAgICAgICAgKEpTQzo6SGFuZGxlU2V0OjpIYW5kbGVTZXQpOgorICAgICAgICAqIGhl
YXAvSGFuZGxlU2V0Lmg6CisgICAgICAgIChKU0M6OkhhbmRsZVNldDo6dm0pOgorICAgICAgICAq
IGhlYXAvSGVhcC5jcHA6CisgICAgICAgIChKU0M6OkhlYXA6OkhlYXApOgorICAgICAgICAoSlND
OjpIZWFwOjpsYXN0Q2hhbmNlVG9GaW5hbGl6ZSk6CisgICAgICAgIChKU0M6OkhlYXA6OnJlbGVh
c2VEZWxheWVkUmVsZWFzZWRPYmplY3RzKToKKyAgICAgICAgKEpTQzo6SGVhcDo6cHJvdGVjdCk6
CisgICAgICAgIChKU0M6OkhlYXA6OnVucHJvdGVjdCk6CisgICAgICAgIChKU0M6OkhlYXA6OmZp
bmFsaXplTWFya2VkVW5jb25kaXRpb25hbEZpbmFsaXplcnMpOgorICAgICAgICAoSlNDOjpIZWFw
OjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxGaW5hbGl6ZXJzKToKKyAgICAgICAgKEpTQzo6SGVhcDo6
Y29tcGxldGVBbGxKSVRQbGFucyk6CisgICAgICAgIChKU0M6OkhlYXA6Oml0ZXJhdGVFeGVjdXRp
bmdBbmRDb21waWxpbmdDb2RlQmxvY2tzKToKKyAgICAgICAgKEpTQzo6SGVhcDo6Z2F0aGVySlNT
dGFja1Jvb3RzKToKKyAgICAgICAgKEpTQzo6SGVhcDo6Z2F0aGVyU2NyYXRjaEJ1ZmZlclJvb3Rz
KToKKyAgICAgICAgKEpTQzo6SGVhcDo6cmVtb3ZlRGVhZENvbXBpbGVyV29ya2xpc3RFbnRyaWVz
KToKKyAgICAgICAgKEpTQzo6SGVhcDo6aXNBbmFseXppbmdIZWFwIGNvbnN0KToKKyAgICAgICAg
KEpTQzo6SGVhcDo6Z2F0aGVyRXh0cmFIZWFwRGF0YSk6CisgICAgICAgIChKU0M6OkhlYXA6OnBy
b3RlY3RlZE9iamVjdFR5cGVDb3VudHMpOgorICAgICAgICAoSlNDOjpIZWFwOjpvYmplY3RUeXBl
Q291bnRzKToKKyAgICAgICAgKEpTQzo6SGVhcDo6ZGVsZXRlQWxsQ29kZUJsb2Nrcyk6CisgICAg
ICAgIChKU0M6OkhlYXA6OmRlbGV0ZUFsbFVubGlua2VkQ29kZUJsb2Nrcyk6CisgICAgICAgIChK
U0M6OkhlYXA6OmRlbGV0ZVVubWFya2VkQ29tcGlsZWRDb2RlKToKKyAgICAgICAgKEpTQzo6SGVh
cDo6Y2hlY2tDb25uKToKKyAgICAgICAgKEpTQzo6SGVhcDo6cnVuRW5kUGhhc2UpOgorICAgICAg
ICAoSlNDOjpIZWFwOjpzdG9wVGhlUGVyaXBoZXJ5KToKKyAgICAgICAgKEpTQzo6SGVhcDo6Zmlu
YWxpemUpOgorICAgICAgICAoSlNDOjpIZWFwOjpyZXF1ZXN0Q29sbGVjdGlvbik6CisgICAgICAg
IChKU0M6OkhlYXA6OnN3ZWVwSW5GaW5hbGl6ZSk6CisgICAgICAgIChKU0M6OkhlYXA6OnN3ZWVw
QXJyYXlCdWZmZXJzKToKKyAgICAgICAgKEpTQzo6SGVhcDo6ZGVsZXRlU291cmNlUHJvdmlkZXJD
YWNoZXMpOgorICAgICAgICAoSlNDOjpIZWFwOjpkaWRGaW5pc2hDb2xsZWN0aW9uKToKKyAgICAg
ICAgKEpTQzo6SGVhcDo6YWRkQ29yZUNvbnN0cmFpbnRzKToKKyAgICAgICAgKiBoZWFwL0hlYXAu
aDoKKyAgICAgICAgKiBoZWFwL0hlYXBDZWxsLmg6CisgICAgICAgICogaGVhcC9IZWFwQ2VsbElu
bGluZXMuaDoKKyAgICAgICAgKEpTQzo6SGVhcENlbGw6OmhlYXAgY29uc3QpOgorICAgICAgICAo
SlNDOjpIZWFwQ2VsbDo6dm0gY29uc3QpOgorICAgICAgICAqIGhlYXAvSGVhcElubGluZXMuaDoK
KyAgICAgICAgKEpTQzo6SGVhcDo6dm0gY29uc3QpOgorICAgICAgICAqIGhlYXAvSXNvU3Vic3Bh
Y2VQZXJWTS5jcHA6CisgICAgICAgIChKU0M6Oklzb1N1YnNwYWNlUGVyVk06OkF1dG9yZW1vdmlu
Z0lzb1N1YnNwYWNlOjp+QXV0b3JlbW92aW5nSXNvU3Vic3BhY2UpOgorICAgICAgICAqIGhlYXAv
TGFyZ2VBbGxvY2F0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6TGFyZ2VBbGxvY2F0aW9uOjpzd2Vl
cCk6CisgICAgICAgIChKU0M6OkxhcmdlQWxsb2NhdGlvbjo6YXNzZXJ0VmFsaWRDZWxsIGNvbnN0
KToKKyAgICAgICAgKiBoZWFwL0xhcmdlQWxsb2NhdGlvbi5oOgorICAgICAgICAoSlNDOjpMYXJn
ZUFsbG9jYXRpb246OnZtIGNvbnN0KToKKyAgICAgICAgKiBoZWFwL0xvY2FsQWxsb2NhdG9yLmNw
cDoKKyAgICAgICAgKEpTQzo6TG9jYWxBbGxvY2F0b3I6OmFsbG9jYXRlU2xvd0Nhc2UpOgorICAg
ICAgICAqIGhlYXAvTWFya2VkQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6
SGFuZGxlOjpIYW5kbGUpOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6YWJvdXRUb01hcmtT
bG93KToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OmFzc2VydE1hcmtzTm90U3RhbGUpOgor
ICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6YXJlTWFya3NTdGFsZSk6CisgICAgICAgIChKU0M6
Ok1hcmtlZEJsb2NrOjppc01hcmtlZCk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjphc3Nl
cnRWYWxpZENlbGwgY29uc3QpOgorICAgICAgICAqIGhlYXAvTWFya2VkQmxvY2suaDoKKyAgICAg
ICAgKEpTQzo6TWFya2VkQmxvY2s6OkhhbmRsZTo6dm0gY29uc3QpOgorICAgICAgICAoSlNDOjpN
YXJrZWRCbG9jazo6dm0gY29uc3QpOgorICAgICAgICAqIGhlYXAvTWFya2VkQmxvY2tJbmxpbmVz
Lmg6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpoZWFwIGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6TWFya2VkQmxvY2s6OkhhbmRsZTo6c3BlY2lhbGl6ZWRTd2VlcCk6CisgICAgICAgICogaGVh
cC9TbG90VmlzaXRvci5jcHA6CisgICAgICAgIChKU0M6OnZhbGlkYXRlKToKKyAgICAgICAgKiBo
ZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6dm0p
OgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6dm0gY29uc3QpOgorICAgICAgICAqIGhlYXAv
U3RvcElmTmVjZXNzYXJ5VGltZXIuY3BwOgorICAgICAgICAoSlNDOjpTdG9wSWZOZWNlc3NhcnlU
aW1lcjo6U3RvcElmTmVjZXNzYXJ5VGltZXIpOgorICAgICAgICAqIGhlYXAvU3RvcElmTmVjZXNz
YXJ5VGltZXIuaDoKKyAgICAgICAgKiBoZWFwL1N0cm9uZy5oOgorICAgICAgICAoSlNDOjpTdHJv
bmc6Om9wZXJhdG9yPSk6CisgICAgICAgICogaGVhcC9XZWFrU2V0Lmg6CisgICAgICAgIChKU0M6
OldlYWtTZXQ6OldlYWtTZXQpOgorICAgICAgICAoSlNDOjpXZWFrU2V0Ojp2bSBjb25zdCk6Cisg
ICAgICAgICogaW5zcGVjdG9yL0pTSW5qZWN0ZWRTY3JpcHRIb3N0LmNwcDoKKyAgICAgICAgKElu
c3BlY3Rvcjo6SlNJbmplY3RlZFNjcmlwdEhvc3Q6OnNhdmVkUmVzdWx0QWxpYXMgY29uc3QpOgor
ICAgICAgICAoSW5zcGVjdG9yOjpKU0luamVjdGVkU2NyaXB0SG9zdDo6aW50ZXJuYWxDb25zdHJ1
Y3Rvck5hbWUpOgorICAgICAgICAoSW5zcGVjdG9yOjpKU0luamVjdGVkU2NyaXB0SG9zdDo6c3Vi
dHlwZSk6CisgICAgICAgIChJbnNwZWN0b3I6OkpTSW5qZWN0ZWRTY3JpcHRIb3N0OjpmdW5jdGlv
bkRldGFpbHMpOgorICAgICAgICAoSW5zcGVjdG9yOjpjb25zdHJ1Y3RJbnRlcm5hbFByb3BlcnR5
KToKKyAgICAgICAgKEluc3BlY3Rvcjo6SlNJbmplY3RlZFNjcmlwdEhvc3Q6OmdldEludGVybmFs
UHJvcGVydGllcyk6CisgICAgICAgIChJbnNwZWN0b3I6OkpTSW5qZWN0ZWRTY3JpcHRIb3N0Ojp3
ZWFrTWFwRW50cmllcyk6CisgICAgICAgIChJbnNwZWN0b3I6OkpTSW5qZWN0ZWRTY3JpcHRIb3N0
Ojp3ZWFrU2V0RW50cmllcyk6CisgICAgICAgIChJbnNwZWN0b3I6OkpTSW5qZWN0ZWRTY3JpcHRI
b3N0OjppdGVyYXRvckVudHJpZXMpOgorICAgICAgICAoSW5zcGVjdG9yOjpKU0luamVjdGVkU2Ny
aXB0SG9zdDo6cXVlcnlJbnN0YW5jZXMpOgorICAgICAgICAoSW5zcGVjdG9yOjpKU0luamVjdGVk
U2NyaXB0SG9zdDo6cXVlcnlIb2xkZXJzKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSlNKYXZhU2Ny
aXB0Q2FsbEZyYW1lLmNwcDoKKyAgICAgICAgKEluc3BlY3Rvcjo6dmFsdWVGb3JTY29wZUxvY2F0
aW9uKToKKyAgICAgICAgKEluc3BlY3Rvcjo6SlNKYXZhU2NyaXB0Q2FsbEZyYW1lOjpzY29wZURl
c2NyaXB0aW9ucyk6CisgICAgICAgIChJbnNwZWN0b3I6OkpTSmF2YVNjcmlwdENhbGxGcmFtZTo6
ZnVuY3Rpb25OYW1lIGNvbnN0KToKKyAgICAgICAgKEluc3BlY3Rvcjo6SlNKYXZhU2NyaXB0Q2Fs
bEZyYW1lOjp0eXBlIGNvbnN0KToKKyAgICAgICAgKiBpbnNwZWN0b3IvU2NyaXB0Q2FsbFN0YWNr
RmFjdG9yeS5jcHA6CisgICAgICAgIChJbnNwZWN0b3I6OmV4dHJhY3RTb3VyY2VJbmZvcm1hdGlv
bkZyb21FeGNlcHRpb24pOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQXVk
aXRBZ2VudC5jcHA6CisgICAgICAgIChJbnNwZWN0b3I6Okluc3BlY3RvckF1ZGl0QWdlbnQ6OnBv
cHVsYXRlQXVkaXRPYmplY3QpOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9y
SGVhcEFnZW50LmNwcDoKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5zcGVjdG9ySGVhcEFnZW50Ojpn
Yyk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvRnJhbWVUcmFjZXJzLmg6CisgICAgICAgIChKU0M6
Ok5hdGl2ZUNhbGxGcmFtZVRyYWNlcjo6TmF0aXZlQ2FsbEZyYW1lVHJhY2VyKToKKyAgICAgICAg
KiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHA6CisgICAgICAgIChKU0M6OkludGVycHJldGVy
OjpleGVjdXRlUHJvZ3JhbSk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpwcmVwYXJlRm9y
UmVwZWF0Q2FsbCk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpleGVjdXRlKToKKyAgICAg
ICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmV4ZWN1dGVNb2R1bGVQcm9ncmFtKToKKyAgICAgICAgKiBp
bnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3BwOgorICAgICAgICAoSlNDOjpTdGFja1Zpc2l0b3I6
OkZyYW1lOjpjYWxsZWVTYXZlUmVnaXN0ZXJzRm9yVW53aW5kaW5nKToKKyAgICAgICAgKEpTQzo6
U3RhY2tWaXNpdG9yOjpGcmFtZTo6Y29tcHV0ZUxpbmVBbmRDb2x1bW4gY29uc3QpOgorICAgICAg
ICAqIGppdC9Bc3NlbWJseUhlbHBlcnMuY3BwOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBl
cnM6OmVtaXREdW1iVmlydHVhbENhbGwpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6
OmVtaXRDb252ZXJ0VmFsdWVUb0Jvb2xlYW4pOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBl
cnM6OmJyYW5jaElmVmFsdWUpOgorICAgICAgICAqIGppdC9Bc3NlbWJseUhlbHBlcnMuaDoKKyAg
ICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjp2bSk6CisgICAgICAgICogaml0L0pJVC5jcHA6
CisgICAgICAgIChKU0M6OkpJVDo6SklUKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0RW50ZXJP
cHRpbWl6YXRpb25DaGVjayk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVNYWlu
UGFzcyk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVFeGNlcHRpb25IYW5kbGVy
cyk6CisgICAgICAgICogaml0L0pJVC5oOgorICAgICAgICAqIGppdC9KSVRDYWxsLmNwcDoKKyAg
ICAgICAgKEpTQzo6SklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZSk6CisgICAgICAgICogaml0
L0pJVEV4Y2VwdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpnZW5lcmljVW53aW5kKToKKyAgICAg
ICAgKiBqaXQvSklURXhjZXB0aW9ucy5oOgorICAgICAgICAqIGppdC9KSVRJbmxpbmVDYWNoZUdl
bmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkpJVEdldEJ5SWRHZW5lcmF0b3I6OkpJVEdldEJ5
SWRHZW5lcmF0b3IpOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzLmNwcDoKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX2lzX3VuZGVmaW5lZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF9qZmFsc2UpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfamVxX251bGwpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3Bfam5lcV9udWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX2p0cnVlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3Rocm93KToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX2NhdGNoKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2Vx
X251bGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmVxX251bGwpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRTbG93X29wX2xvb3BfaGludCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fcHJvbG9ndWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWwpOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVz
MzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfamZhbHNlKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX2p0cnVlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3Ro
cm93KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2NhdGNoKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl9wcm9sb2d1ZSk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpbCk6CisgICAgICAgICogaml0L0pJ
VE9wZXJhdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpvcGVyYXRpb25OZXdGdW5jdGlvbkNvbW1v
bik6CisgICAgICAgIChKU0M6OnRyeUdldEJ5VmFsT3B0aW1pemUpOgorICAgICAgICAqIGppdC9K
SVRQcm9wZXJ0eUFjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFdyaXRlQmFycmll
cik6CisgICAgICAgICogaml0L0pJVFRodW5rcy5jcHA6CisgICAgICAgIChKU0M6OkpJVFRodW5r
czo6Y3RpTmF0aXZlQ2FsbCk6CisgICAgICAgIChKU0M6OkpJVFRodW5rczo6Y3RpTmF0aXZlQ29u
c3RydWN0KToKKyAgICAgICAgKEpTQzo6SklUVGh1bmtzOjpjdGlOYXRpdmVUYWlsQ2FsbCk6Cisg
ICAgICAgIChKU0M6OkpJVFRodW5rczo6Y3RpTmF0aXZlVGFpbENhbGxXaXRob3V0U2F2ZWRUYWdz
KToKKyAgICAgICAgKEpTQzo6SklUVGh1bmtzOjpjdGlJbnRlcm5hbEZ1bmN0aW9uQ2FsbCk6Cisg
ICAgICAgIChKU0M6OkpJVFRodW5rczo6Y3RpSW50ZXJuYWxGdW5jdGlvbkNvbnN0cnVjdCk6Cisg
ICAgICAgIChKU0M6OkpJVFRodW5rczo6Y3RpU3R1Yik6CisgICAgICAgIChKU0M6OkpJVFRodW5r
czo6aG9zdEZ1bmN0aW9uU3R1Yik6CisgICAgICAgICogaml0L0pJVFRodW5rcy5oOgorICAgICAg
ICAqIGppdC9KSVRXb3JrbGlzdC5jcHA6CisgICAgICAgIChKU0M6OkpJVFdvcmtsaXN0OjpQbGFu
Ojp2bSk6CisgICAgICAgIChKU0M6OkpJVFdvcmtsaXN0Ojpjb21wbGV0ZUFsbEZvclZNKToKKyAg
ICAgICAgKEpTQzo6SklUV29ya2xpc3Q6OnBvbGwpOgorICAgICAgICAoSlNDOjpKSVRXb3JrbGlz
dDo6Y29tcGlsZUxhdGVyKToKKyAgICAgICAgKEpTQzo6SklUV29ya2xpc3Q6OmNvbXBpbGVOb3cp
OgorICAgICAgICAqIGppdC9SZXBhdGNoLmNwcDoKKyAgICAgICAgKEpTQzo6cmVhZFB1dElDQ2Fs
bFRhcmdldCk6CisgICAgICAgIChKU0M6OmZ0bFRodW5rQXdhcmVSZXBhdGNoQ2FsbCk6CisgICAg
ICAgIChKU0M6OmxpbmtTbG93Rm9yKToKKyAgICAgICAgKEpTQzo6bGlua0Zvcik6CisgICAgICAg
IChKU0M6OmxpbmtEaXJlY3RGb3IpOgorICAgICAgICAoSlNDOjpyZXZlcnRDYWxsKToKKyAgICAg
ICAgKEpTQzo6dW5saW5rRm9yKToKKyAgICAgICAgKEpTQzo6bGlua1ZpcnR1YWxGb3IpOgorICAg
ICAgICAoSlNDOjpsaW5rUG9seW1vcnBoaWNDYWxsKToKKyAgICAgICAgKiBqaXQvU3BlY2lhbGl6
ZWRUaHVua0pJVC5oOgorICAgICAgICAoSlNDOjpTcGVjaWFsaXplZFRodW5rSklUOjpTcGVjaWFs
aXplZFRodW5rSklUKToKKyAgICAgICAgKiBqaXQvVGh1bmtHZW5lcmF0b3IuaDoKKyAgICAgICAg
KiBqaXQvVGh1bmtHZW5lcmF0b3JzLmNwcDoKKyAgICAgICAgKEpTQzo6dGhyb3dFeGNlcHRpb25G
cm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6c2xvd1BhdGhGb3IpOgor
ICAgICAgICAoSlNDOjpsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6bGlu
a1BvbHltb3JwaGljQ2FsbFRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6dmlydHVhbFRo
dW5rRm9yKToKKyAgICAgICAgKEpTQzo6bmF0aXZlRm9yR2VuZXJhdG9yKToKKyAgICAgICAgKEpT
Qzo6bmF0aXZlQ2FsbEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6Om5hdGl2ZVRhaWxDYWxsR2Vu
ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6bmF0aXZlVGFpbENhbGxXaXRob3V0U2F2ZWRUYWdzR2Vu
ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6bmF0aXZlQ29uc3RydWN0R2VuZXJhdG9yKToKKyAgICAg
ICAgKEpTQzo6aW50ZXJuYWxGdW5jdGlvbkNhbGxHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpp
bnRlcm5hbEZ1bmN0aW9uQ29uc3RydWN0R2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6YXJpdHlG
aXh1cEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OnVucmVhY2hhYmxlR2VuZXJhdG9yKToKKyAg
ICAgICAgKEpTQzo6c3RyaW5nR2V0QnlWYWxHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpjaGFy
VG9TdHJpbmcpOgorICAgICAgICAoSlNDOjpjaGFyQ29kZUF0VGh1bmtHZW5lcmF0b3IpOgorICAg
ICAgICAoSlNDOjpjaGFyQXRUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OmZyb21DaGFy
Q29kZVRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6Y2x6MzJUaHVua0dlbmVyYXRvcik6
CisgICAgICAgIChKU0M6OnNxcnRUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OmZsb29y
VGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpjZWlsVGh1bmtHZW5lcmF0b3IpOgorICAg
ICAgICAoSlNDOjp0cnVuY1RodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6cm91bmRUaHVu
a0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OmV4cFRodW5rR2VuZXJhdG9yKToKKyAgICAgICAg
KEpTQzo6bG9nVGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjphYnNUaHVua0dlbmVyYXRv
cik6CisgICAgICAgIChKU0M6OmltdWxUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OnJh
bmRvbVRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6Ym91bmRUaGlzTm9BcmdzRnVuY3Rp
b25DYWxsR2VuZXJhdG9yKToKKyAgICAgICAgKiBqaXQvVGh1bmtHZW5lcmF0b3JzLmg6CisgICAg
ICAgICoganNjLmNwcDoKKyAgICAgICAgKEdsb2JhbE9iamVjdDo6ZmluaXNoQ3JlYXRpb24pOgor
ICAgICAgICAoR2xvYmFsT2JqZWN0OjphZGRGdW5jdGlvbik6CisgICAgICAgIChHbG9iYWxPYmpl
Y3Q6Om1vZHVsZUxvYWRlckltcG9ydE1vZHVsZSk6CisgICAgICAgIChHbG9iYWxPYmplY3Q6Om1v
ZHVsZUxvYWRlclJlc29sdmUpOgorICAgICAgICAoR2xvYmFsT2JqZWN0Ojptb2R1bGVMb2FkZXJD
cmVhdGVJbXBvcnRNZXRhUHJvcGVydGllcyk6CisgICAgICAgIChmdW5jdGlvbkRlc2NyaWJlKToK
KyAgICAgICAgKGZ1bmN0aW9uRGVzY3JpYmVBcnJheSk6CisgICAgICAgIChKU0NNZW1vcnlGb290
cHJpbnQ6OmFkZFByb3BlcnR5KToKKyAgICAgICAgKGZ1bmN0aW9uUnVuKToKKyAgICAgICAgKGZ1
bmN0aW9uUnVuU3RyaW5nKToKKyAgICAgICAgKGZ1bmN0aW9uUmVhZEZpbGUpOgorICAgICAgICAo
ZnVuY3Rpb25DYWxsZXJTb3VyY2VPcmlnaW4pOgorICAgICAgICAoZnVuY3Rpb25SZWFkbGluZSk6
CisgICAgICAgIChmdW5jdGlvbkRvbGxhckNyZWF0ZVJlYWxtKToKKyAgICAgICAgKGZ1bmN0aW9u
RG9sbGFyRXZhbFNjcmlwdCk6CisgICAgICAgIChmdW5jdGlvbkRvbGxhckFnZW50R2V0UmVwb3J0
KToKKyAgICAgICAgKGZ1bmN0aW9uV2FpdEZvclJlcG9ydCk6CisgICAgICAgIChmdW5jdGlvbkpT
Q09wdGlvbnMpOgorICAgICAgICAoZnVuY3Rpb25DaGVja01vZHVsZVN5bnRheCk6CisgICAgICAg
IChmdW5jdGlvbkdlbmVyYXRlSGVhcFNuYXBzaG90Rm9yR0NEZWJ1Z2dpbmcpOgorICAgICAgICAo
ZnVuY3Rpb25XZWJBc3NlbWJseU1lbW9yeU1vZGUpOgorICAgICAgICAoZHVtcEV4Y2VwdGlvbik6
CisgICAgICAgIChjaGVja1VuY2F1Z2h0RXhjZXB0aW9uKToKKyAgICAgICAgKiBsbGludC9MTElu
dFNsb3dQYXRocy5jcHA6CisgICAgICAgIChKU0M6OkxMSW50OjpMTElOVF9TTE9XX1BBVEhfREVD
TCk6CisgICAgICAgIChKU0M6OkxMSW50OjpoYW5kbGVIb3N0Q2FsbCk6CisgICAgICAgICogcGFy
c2VyL0FTVEJ1aWxkZXIuaDoKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6QVNUQnVpbGRlcik6
CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OmNyZWF0ZVJlc29sdmUpOgorICAgICAgICAoSlND
OjpBU1RCdWlsZGVyOjpjcmVhdGVHZXR0ZXJPclNldHRlclByb3BlcnR5KToKKyAgICAgICAgKEpT
Qzo6QVNUQnVpbGRlcjo6Y3JlYXRlUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVy
OjpjcmVhdGVGdW5jRGVjbFN0YXRlbWVudCk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6Om1h
a2VGdW5jdGlvbkNhbGxOb2RlKToKKyAgICAgICAgKiBwYXJzZXIvTGV4ZXIuY3BwOgorICAgICAg
ICAoSlNDOjpMZXhlcjxUPjo6TGV4ZXIpOgorICAgICAgICAoSlNDOjpMZXhlcjxMQ2hhcj46OnBh
cnNlSWRlbnRpZmllcik6CisgICAgICAgIChKU0M6OkxleGVyPFVDaGFyPjo6cGFyc2VJZGVudGlm
aWVyKToKKyAgICAgICAgKiBwYXJzZXIvTGV4ZXIuaDoKKyAgICAgICAgKEpTQzo6TGV4ZXI8VD46
OmxleEV4cGVjdElkZW50aWZpZXIpOgorICAgICAgICAqIHBhcnNlci9Nb2R1bGVBbmFseXplci5j
cHA6CisgICAgICAgIChKU0M6Ok1vZHVsZUFuYWx5emVyOjpNb2R1bGVBbmFseXplcik6CisgICAg
ICAgICogcGFyc2VyL01vZHVsZUFuYWx5emVyLmg6CisgICAgICAgIChKU0M6Ok1vZHVsZUFuYWx5
emVyOjp2bSk6CisgICAgICAgICogcGFyc2VyL1BhcnNlci5jcHA6CisgICAgICAgIChKU0M6OlBh
cnNlcjxMZXhlclR5cGU+OjpQYXJzZXIpOgorICAgICAgICAoSlNDOjpQYXJzZXI8TGV4ZXJUeXBl
Pjo6cGFyc2VJbm5lcik6CisgICAgICAgIChKU0M6OlBhcnNlcjxMZXhlclR5cGU+Ojppc0Fycm93
RnVuY3Rpb25QYXJhbWV0ZXJzKToKKyAgICAgICAgKEpTQzo6UGFyc2VyPExleGVyVHlwZT46OnBh
cnNlU291cmNlRWxlbWVudHMpOgorICAgICAgICAoSlNDOjpQYXJzZXI8TGV4ZXJUeXBlPjo6cGFy
c2VNb2R1bGVTb3VyY2VFbGVtZW50cyk6CisgICAgICAgIChKU0M6OlBhcnNlcjxMZXhlclR5cGU+
OjpwYXJzZUdlbmVyYXRvckZ1bmN0aW9uU291cmNlRWxlbWVudHMpOgorICAgICAgICAoSlNDOjpQ
YXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VBc3luY0Z1bmN0aW9uU291cmNlRWxlbWVudHMpOgorICAg
ICAgICAoSlNDOjpQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VBc3luY0dlbmVyYXRvckZ1bmN0aW9u
U291cmNlRWxlbWVudHMpOgorICAgICAgICAoSlNDOjpQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VT
aW5nbGVGdW5jdGlvbik6CisgICAgICAgIChKU0M6OlBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZVN0
YXRlbWVudExpc3RJdGVtKToKKyAgICAgICAgKEpTQzo6UGFyc2VyPExleGVyVHlwZT46OnBhcnNl
T2JqZWN0UmVzdEFzc2lnbm1lbnRFbGVtZW50KToKKyAgICAgICAgKEpTQzo6UGFyc2VyPExleGVy
VHlwZT46OnBhcnNlQXNzaWdubWVudEVsZW1lbnQpOgorICAgICAgICAoSlNDOjpQYXJzZXI8TGV4
ZXJUeXBlPjo6cGFyc2VEZXN0cnVjdHVyaW5nUGF0dGVybik6CisgICAgICAgIChKU0M6OlBhcnNl
cjxMZXhlclR5cGU+OjpwYXJzZUZvclN0YXRlbWVudCk6CisgICAgICAgIChKU0M6OlBhcnNlcjxM
ZXhlclR5cGU+OjpwYXJzZUJyZWFrU3RhdGVtZW50KToKKyAgICAgICAgKEpTQzo6UGFyc2VyPExl
eGVyVHlwZT46OnBhcnNlQ29udGludWVTdGF0ZW1lbnQpOgorICAgICAgICAoSlNDOjpQYXJzZXI8
TGV4ZXJUeXBlPjo6cGFyc2VTdGF0ZW1lbnQpOgorICAgICAgICAoSlNDOjpQYXJzZXI8TGV4ZXJU
eXBlPjo6bWF5YmVQYXJzZUFzeW5jRnVuY3Rpb25EZWNsYXJhdGlvblN0YXRlbWVudCk6CisgICAg
ICAgIChKU0M6OlBhcnNlcjxMZXhlclR5cGU+OjpjcmVhdGVHZW5lcmF0b3JQYXJhbWV0ZXJzKToK
KyAgICAgICAgKEpTQzo6UGFyc2VyPExleGVyVHlwZT46OnBhcnNlRnVuY3Rpb25JbmZvKToKKyAg
ICAgICAgKEpTQzo6UGFyc2VyPExleGVyVHlwZT46OnBhcnNlRnVuY3Rpb25EZWNsYXJhdGlvbik6
CisgICAgICAgIChKU0M6OlBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUFzeW5jRnVuY3Rpb25EZWNs
YXJhdGlvbik6CisgICAgICAgIChKU0M6OlBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUNsYXNzRGVj
bGFyYXRpb24pOgorICAgICAgICAoSlNDOjpQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VDbGFzcyk6
CisgICAgICAgIChKU0M6OlBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUltcG9ydENsYXVzZUl0ZW0p
OgorICAgICAgICAoSlNDOjpQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VJbXBvcnREZWNsYXJhdGlv
bik6CisgICAgICAgIChKU0M6OlBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUV4cG9ydFNwZWNpZmll
cik6CisgICAgICAgIChKU0M6OlBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUV4cG9ydERlY2xhcmF0
aW9uKToKKyAgICAgICAgKEpTQzo6UGFyc2VyPExleGVyVHlwZT46OnBhcnNlQXNzaWdubWVudEV4
cHJlc3Npb24pOgorICAgICAgICAoSlNDOjpQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VQcm9wZXJ0
eSk6CisgICAgICAgIChKU0M6OlBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUdldHRlclNldHRlcik6
CisgICAgICAgIChKU0M6OlBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZU9iamVjdExpdGVyYWwpOgor
ICAgICAgICAoSlNDOjpQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VTdHJpY3RPYmplY3RMaXRlcmFs
KToKKyAgICAgICAgKEpTQzo6UGFyc2VyPExleGVyVHlwZT46OnBhcnNlQ2xhc3NFeHByZXNzaW9u
KToKKyAgICAgICAgKEpTQzo6UGFyc2VyPExleGVyVHlwZT46OnBhcnNlRnVuY3Rpb25FeHByZXNz
aW9uKToKKyAgICAgICAgKEpTQzo6UGFyc2VyPExleGVyVHlwZT46OnBhcnNlQXN5bmNGdW5jdGlv
bkV4cHJlc3Npb24pOgorICAgICAgICAoSlNDOjpQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VQcmlt
YXJ5RXhwcmVzc2lvbik6CisgICAgICAgIChKU0M6OlBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZU1l
bWJlckV4cHJlc3Npb24pOgorICAgICAgICAoSlNDOjpQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VB
cnJvd0Z1bmN0aW9uRXhwcmVzc2lvbik6CisgICAgICAgIChKU0M6OlBhcnNlcjxMZXhlclR5cGU+
OjpwYXJzZVVuYXJ5RXhwcmVzc2lvbik6CisgICAgICAgICogcGFyc2VyL1BhcnNlci5oOgorICAg
ICAgICAoSlNDOjppc0FyZ3VtZW50cyk6CisgICAgICAgIChKU0M6OmlzRXZhbCk6CisgICAgICAg
IChKU0M6OmlzRXZhbE9yQXJndW1lbnRzSWRlbnRpZmllcik6CisgICAgICAgIChKU0M6OlNjb3Bl
OjpTY29wZSk6CisgICAgICAgIChKU0M6OlNjb3BlOjpkZWNsYXJlUGFyYW1ldGVyKToKKyAgICAg
ICAgKEpTQzo6U2NvcGU6OnNldElubmVyQXJyb3dGdW5jdGlvblVzZXNFdmFsQW5kVXNlQXJndW1l
bnRzSWZOZWVkZWQpOgorICAgICAgICAoSlNDOjpTY29wZTo6Y29sbGVjdEZyZWVWYXJpYWJsZXMp
OgorICAgICAgICAoSlNDOjpQYXJzZXI6OmNhblJlY3Vyc2UpOgorICAgICAgICAoSlNDOjpwYXJz
ZSk6CisgICAgICAgIChKU0M6OnBhcnNlRnVuY3Rpb25Gb3JGdW5jdGlvbkNvbnN0cnVjdG9yKToK
KyAgICAgICAgKiBwYXJzZXIvUGFyc2VyQXJlbmEuaDoKKyAgICAgICAgKEpTQzo6SWRlbnRpZmll
ckFyZW5hOjptYWtlSWRlbnRpZmllcik6CisgICAgICAgIChKU0M6OklkZW50aWZpZXJBcmVuYTo6
bWFrZUVtcHR5SWRlbnRpZmllcik6CisgICAgICAgIChKU0M6OklkZW50aWZpZXJBcmVuYTo6bWFr
ZUlkZW50aWZpZXJMQ2hhckZyb21VQ2hhcik6CisgICAgICAgIChKU0M6OklkZW50aWZpZXJBcmVu
YTo6bWFrZU51bWVyaWNJZGVudGlmaWVyKToKKyAgICAgICAgKiBwYXJzZXIvU3ludGF4Q2hlY2tl
ci5oOgorICAgICAgICAoSlNDOjpTeW50YXhDaGVja2VyOjpTeW50YXhDaGVja2VyKToKKyAgICAg
ICAgKEpTQzo6U3ludGF4Q2hlY2tlcjo6Y3JlYXRlUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpT
eW50YXhDaGVja2VyOjpjcmVhdGVHZXR0ZXJPclNldHRlclByb3BlcnR5KToKKyAgICAgICAgKiBw
cm9maWxlci9Qcm9maWxlckJ5dGVjb2RlLmNwcDoKKyAgICAgICAgKEpTQzo6UHJvZmlsZXI6OkJ5
dGVjb2RlOjp0b0pTIGNvbnN0KToKKyAgICAgICAgKiBwcm9maWxlci9Qcm9maWxlckJ5dGVjb2Rl
U2VxdWVuY2UuY3BwOgorICAgICAgICAoSlNDOjpQcm9maWxlcjo6Qnl0ZWNvZGVTZXF1ZW5jZTo6
YWRkU2VxdWVuY2VQcm9wZXJ0aWVzIGNvbnN0KToKKyAgICAgICAgKiBwcm9maWxlci9Qcm9maWxl
ckJ5dGVjb2Rlcy5jcHA6CisgICAgICAgIChKU0M6OlByb2ZpbGVyOjpCeXRlY29kZXM6OnRvSlMg
Y29uc3QpOgorICAgICAgICAqIHByb2ZpbGVyL1Byb2ZpbGVyQ29tcGlsYXRpb24uY3BwOgorICAg
ICAgICAoSlNDOjpQcm9maWxlcjo6Q29tcGlsYXRpb246OnRvSlMgY29uc3QpOgorICAgICAgICAq
IHByb2ZpbGVyL1Byb2ZpbGVyQ29tcGlsZWRCeXRlY29kZS5jcHA6CisgICAgICAgIChKU0M6OlBy
b2ZpbGVyOjpDb21waWxlZEJ5dGVjb2RlOjp0b0pTIGNvbnN0KToKKyAgICAgICAgKiBwcm9maWxl
ci9Qcm9maWxlckV2ZW50LmNwcDoKKyAgICAgICAgKEpTQzo6UHJvZmlsZXI6OkV2ZW50Ojp0b0pT
IGNvbnN0KToKKyAgICAgICAgKiBwcm9maWxlci9Qcm9maWxlck9TUkV4aXQuY3BwOgorICAgICAg
ICAoSlNDOjpQcm9maWxlcjo6T1NSRXhpdDo6dG9KUyBjb25zdCk6CisgICAgICAgICogcHJvZmls
ZXIvUHJvZmlsZXJPU1JFeGl0U2l0ZS5jcHA6CisgICAgICAgIChKU0M6OlByb2ZpbGVyOjpPU1JF
eGl0U2l0ZTo6dG9KUyBjb25zdCk6CisgICAgICAgICogcHJvZmlsZXIvUHJvZmlsZXJVSUQuY3Bw
OgorICAgICAgICAoSlNDOjpQcm9maWxlcjo6VUlEOjp0b0pTIGNvbnN0KToKKyAgICAgICAgKiBy
dW50aW1lL0Fic3RyYWN0TW9kdWxlUmVjb3JkLmNwcDoKKyAgICAgICAgKEpTQzo6QWJzdHJhY3RN
b2R1bGVSZWNvcmQ6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6QWJzdHJhY3RNb2R1
bGVSZWNvcmQ6Omhvc3RSZXNvbHZlSW1wb3J0ZWRNb2R1bGUpOgorICAgICAgICAoSlNDOjpBYnN0
cmFjdE1vZHVsZVJlY29yZDo6cmVzb2x2ZUV4cG9ydEltcGwpOgorICAgICAgICAoSlNDOjpnZXRF
eHBvcnRlZE5hbWVzKToKKyAgICAgICAgKEpTQzo6QWJzdHJhY3RNb2R1bGVSZWNvcmQ6OmdldE1v
ZHVsZU5hbWVzcGFjZSk6CisgICAgICAgICogcnVudGltZS9BcnJheUJ1ZmZlck5ldXRlcmluZ1dh
dGNocG9pbnRTZXQuY3BwOgorICAgICAgICAoSlNDOjpBcnJheUJ1ZmZlck5ldXRlcmluZ1dhdGNo
cG9pbnRTZXQ6OmZpcmVBbGwpOgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlJdGVyYXRvclByb3Rv
dHlwZS5jcHA6CisgICAgICAgIChKU0M6OkFycmF5SXRlcmF0b3JQcm90b3R5cGU6OmZpbmlzaENy
ZWF0aW9uKToKKyAgICAgICAgKiBydW50aW1lL0FycmF5UHJvdG90eXBlLmNwcDoKKyAgICAgICAg
KEpTQzo6ZmFzdEpvaW4pOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY1RvTG9jYWxlU3Ry
aW5nKToKKyAgICAgICAgKEpTQzo6c2xvd0pvaW4pOgorICAgICAgICAoSlNDOjphcnJheVByb3Rv
RnVuY0pvaW4pOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY1B1c2gpOgorICAgICAgICAq
IHJ1bnRpbWUvQXN5bmNGdW5jdGlvblByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OkFzeW5j
RnVuY3Rpb25Qcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKiBydW50aW1lL0Fz
eW5jR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpBc3luY0dl
bmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgICogcnVu
dGltZS9Bc3luY0dlbmVyYXRvclByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OkFzeW5jR2Vu
ZXJhdG9yUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgICogcnVudGltZS9BdG9t
aWNzT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6QXRvbWljc09iamVjdDo6ZmluaXNoQ3JlYXRp
b24pOgorICAgICAgICAoSlNDOjphdG9taWNzRnVuY1dhaXQpOgorICAgICAgICAoSlNDOjpvcGVy
YXRpb25BdG9taWNzQWRkKToKKyAgICAgICAgKEpTQzo6b3BlcmF0aW9uQXRvbWljc0FuZCk6Cisg
ICAgICAgIChKU0M6Om9wZXJhdGlvbkF0b21pY3NDb21wYXJlRXhjaGFuZ2UpOgorICAgICAgICAo
SlNDOjpvcGVyYXRpb25BdG9taWNzRXhjaGFuZ2UpOgorICAgICAgICAoSlNDOjpvcGVyYXRpb25B
dG9taWNzSXNMb2NrRnJlZSk6CisgICAgICAgIChKU0M6Om9wZXJhdGlvbkF0b21pY3NMb2FkKToK
KyAgICAgICAgKEpTQzo6b3BlcmF0aW9uQXRvbWljc09yKToKKyAgICAgICAgKEpTQzo6b3BlcmF0
aW9uQXRvbWljc1N0b3JlKToKKyAgICAgICAgKEpTQzo6b3BlcmF0aW9uQXRvbWljc1N1Yik6Cisg
ICAgICAgIChKU0M6Om9wZXJhdGlvbkF0b21pY3NYb3IpOgorICAgICAgICAqIHJ1bnRpbWUvQmln
SW50UHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6QmlnSW50UHJvdG90eXBlOjpmaW5pc2hD
cmVhdGlvbik6CisgICAgICAgIChKU0M6OmJpZ0ludFByb3RvRnVuY1RvU3RyaW5nKToKKyAgICAg
ICAgKiBydW50aW1lL0NhY2hlZFR5cGVzLmNwcDoKKyAgICAgICAgKEpTQzo6Q2FjaGVkVW5pcXVl
ZFN0cmluZ0ltcGxCYXNlOjpkZWNvZGUgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRJZGVu
dGlmaWVyOjpkZWNvZGUgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRKU1ZhbHVlOjpkZWNv
ZGUgY29uc3QpOgorICAgICAgICAqIHJ1bnRpbWUvQ29kZUNhY2hlLmNwcDoKKyAgICAgICAgKEpT
Qzo6Q29kZUNhY2hlTWFwOjpwcnVuZVNsb3dDYXNlKToKKyAgICAgICAgKEpTQzo6Q29kZUNhY2hl
OjpnZXRVbmxpbmtlZEdsb2JhbEZ1bmN0aW9uRXhlY3V0YWJsZSk6CisgICAgICAgICogcnVudGlt
ZS9Db2RlQ2FjaGUuaDoKKyAgICAgICAgKEpTQzo6Z2VuZXJhdGVVbmxpbmtlZENvZGVCbG9ja0lt
cGwpOgorICAgICAgICAqIHJ1bnRpbWUvQ29tbW9uSWRlbnRpZmllcnMuY3BwOgorICAgICAgICAo
SlNDOjpDb21tb25JZGVudGlmaWVyczo6Q29tbW9uSWRlbnRpZmllcnMpOgorICAgICAgICAqIHJ1
bnRpbWUvQ29tbW9uSWRlbnRpZmllcnMuaDoKKyAgICAgICAgKiBydW50aW1lL0NvbW1vblNsb3dQ
YXRocy5jcHA6CisgICAgICAgIChKU0M6OlNMT1dfUEFUSF9ERUNMKToKKyAgICAgICAgKiBydW50
aW1lL0NvbXBsZXRpb24uY3BwOgorICAgICAgICAoSlNDOjpjaGVja1N5bnRheEludGVybmFsKToK
KyAgICAgICAgKEpTQzo6Y2hlY2tNb2R1bGVTeW50YXgpOgorICAgICAgICAoSlNDOjpsb2FkQW5k
RXZhbHVhdGVNb2R1bGUpOgorICAgICAgICAoSlNDOjpsb2FkTW9kdWxlKToKKyAgICAgICAgKiBy
dW50aW1lL0RhdGVDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OmNhbGxEYXRlKToKKyAg
ICAgICAgKiBydW50aW1lL0RhdGVQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpmb3JtYXRM
b2NhbGVEYXRlKToKKyAgICAgICAgKEpTQzo6Zm9ybWF0ZURhdGVJbnN0YW5jZSk6CisgICAgICAg
IChKU0M6OkRhdGVQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6ZGF0
ZVByb3RvRnVuY1RvSVNPU3RyaW5nKToKKyAgICAgICAgKiBydW50aW1lL0Vycm9yLmNwcDoKKyAg
ICAgICAgKEpTQzo6YWRkRXJyb3JJbmZvKToKKyAgICAgICAgKiBydW50aW1lL0Vycm9ySW5zdGFu
Y2UuY3BwOgorICAgICAgICAoSlNDOjphcHBlbmRTb3VyY2VUb0Vycm9yKToKKyAgICAgICAgKEpT
Qzo6RXJyb3JJbnN0YW5jZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpFcnJvcklu
c3RhbmNlOjptYXRlcmlhbGl6ZUVycm9ySW5mb0lmTmVlZGVkKToKKyAgICAgICAgKiBydW50aW1l
L0Vycm9yUHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6RXJyb3JQcm90b3R5cGU6OmZpbmlz
aENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6ZXJyb3JQcm90b0Z1bmNUb1N0cmluZyk6CisgICAg
ICAgICogcnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmNwcDoKKyAgICAgICAgKEpTQzo6VGVybWlu
YXRlZEV4ZWN1dGlvbkVycm9yOjpkZWZhdWx0VmFsdWUpOgorICAgICAgICAqIHJ1bnRpbWUvRnVu
Y3Rpb25Qcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpmdW5jdGlvblByb3RvRnVuY1RvU3Ry
aW5nKToKKyAgICAgICAgKiBydW50aW1lL0Z1bmN0aW9uUmFyZURhdGEuY3BwOgorICAgICAgICAo
SlNDOjpGdW5jdGlvblJhcmVEYXRhOjpjbGVhcik6CisgICAgICAgICogcnVudGltZS9HZW5lcmF0
b3JGdW5jdGlvblByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OkdlbmVyYXRvckZ1bmN0aW9u
UHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgICogcnVudGltZS9HZW5lcmF0b3JQ
cm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpHZW5lcmF0b3JQcm90b3R5cGU6OmZpbmlzaENy
ZWF0aW9uKToKKyAgICAgICAgKiBydW50aW1lL0dlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmg6Cisg
ICAgICAgIChKU0M6OkdlbmVyaWNBcmd1bWVudHM8VHlwZT46OmdldE93blByb3BlcnR5TmFtZXMp
OgorICAgICAgICAqIHJ1bnRpbWUvR2V0dGVyU2V0dGVyLmg6CisgICAgICAgICogcnVudGltZS9J
ZGVudGlmaWVyLmNwcDoKKyAgICAgICAgKEpTQzo6SWRlbnRpZmllcjo6YWRkKToKKyAgICAgICAg
KEpTQzo6SWRlbnRpZmllcjo6YWRkOCk6CisgICAgICAgIChKU0M6OklkZW50aWZpZXI6OmZyb20p
OgorICAgICAgICAoSlNDOjpJZGVudGlmaWVyOjpjaGVja0N1cnJlbnRBdG9tU3RyaW5nVGFibGUp
OgorICAgICAgICAqIHJ1bnRpbWUvSWRlbnRpZmllci5oOgorICAgICAgICAoSlNDOjpJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKToKKyAgICAgICAgKEpTQzo6SWRlbnRpZmllcjo6Y3JlYXRlTENoYXJG
cm9tVUNoYXIpOgorICAgICAgICAoSlNDOjpJZGVudGlmaWVyOjpJZGVudGlmaWVyKToKKyAgICAg
ICAgKEpTQzo6SWRlbnRpZmllcjo6YWRkKToKKyAgICAgICAgKiBydW50aW1lL0lkZW50aWZpZXJJ
bmxpbmVzLmg6CisgICAgICAgIChKU0M6OklkZW50aWZpZXI6OmFkZCk6CisgICAgICAgIChKU0M6
OklkZW50aWZpZXI6OmZyb21VaWQpOgorICAgICAgICAoSlNDOjpJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKToKKyAgICAgICAgKEpTQzo6aWRlbnRpZmllclRvSlNWYWx1ZSk6CisgICAgICAgIChKU0M6
OmlkZW50aWZpZXJUb1NhZmVQdWJsaWNKU1ZhbHVlKToKKyAgICAgICAgKEpTQzo6SWRlbnRpZmll
cjo6SWRlbnRpZmllcik6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9JbnRlcm5hbEZ1bmN0
aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6SW50ZXJuYWxGdW5jdGlvbjo6ZmluaXNoQ3JlYXRpb24p
OgorICAgICAgICAqIHJ1bnRpbWUvSW50bENvbGxhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SW50
bENvbGxhdG9yOjpyZXNvbHZlZE9wdGlvbnMpOgorICAgICAgICAqIHJ1bnRpbWUvSW50bENvbGxh
dG9yUHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6SW50bENvbGxhdG9yUHJvdG90eXBlOjpm
aW5pc2hDcmVhdGlvbik6CisgICAgICAgICogcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXQuY3Bw
OgorICAgICAgICAoSlNDOjpJbnRsRFRGSW50ZXJuYWw6OnRvRGF0ZVRpbWVPcHRpb25zQW55RGF0
ZSk6CisgICAgICAgIChKU0M6OkludGxEYXRlVGltZUZvcm1hdDo6cmVzb2x2ZWRPcHRpb25zKToK
KyAgICAgICAgKEpTQzo6SW50bERhdGVUaW1lRm9ybWF0Ojpmb3JtYXQpOgorICAgICAgICAoSlND
OjpJbnRsRGF0ZVRpbWVGb3JtYXQ6OmZvcm1hdFRvUGFydHMpOgorICAgICAgICAqIHJ1bnRpbWUv
SW50bERhdGVUaW1lRm9ybWF0UHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6SW50bERhdGVU
aW1lRm9ybWF0UHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgICogcnVudGltZS9J
bnRsTnVtYmVyRm9ybWF0LmNwcDoKKyAgICAgICAgKEpTQzo6SW50bE51bWJlckZvcm1hdDo6aW5p
dGlhbGl6ZU51bWJlckZvcm1hdCk6CisgICAgICAgIChKU0M6OkludGxOdW1iZXJGb3JtYXQ6OmZv
cm1hdE51bWJlcik6CisgICAgICAgIChKU0M6OkludGxOdW1iZXJGb3JtYXQ6OnJlc29sdmVkT3B0
aW9ucyk6CisgICAgICAgIChKU0M6OkludGxOdW1iZXJGb3JtYXQ6OmZvcm1hdFRvUGFydHMpOgor
ICAgICAgICAqIHJ1bnRpbWUvSW50bE51bWJlckZvcm1hdFByb3RvdHlwZS5jcHA6CisgICAgICAg
IChKU0M6OkludGxOdW1iZXJGb3JtYXRQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKToKKyAgICAg
ICAgKiBydW50aW1lL0ludGxPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpsb29rdXBTdXBwb3J0
ZWRMb2NhbGVzKToKKyAgICAgICAgKEpTQzo6c3VwcG9ydGVkTG9jYWxlcyk6CisgICAgICAgIChK
U0M6OmludGxPYmplY3RGdW5jR2V0Q2Fub25pY2FsTG9jYWxlcyk6CisgICAgICAgICogcnVudGlt
ZS9JbnRsUGx1cmFsUnVsZXMuY3BwOgorICAgICAgICAoSlNDOjpJbnRsUGx1cmFsUnVsZXM6Omlu
aXRpYWxpemVQbHVyYWxSdWxlcyk6CisgICAgICAgIChKU0M6OkludGxQbHVyYWxSdWxlczo6cmVz
b2x2ZWRPcHRpb25zKToKKyAgICAgICAgKEpTQzo6SW50bFBsdXJhbFJ1bGVzOjpzZWxlY3QpOgor
ICAgICAgICAqIHJ1bnRpbWUvSW50bFBsdXJhbFJ1bGVzUHJvdG90eXBlLmNwcDoKKyAgICAgICAg
KEpTQzo6SW50bFBsdXJhbFJ1bGVzUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAg
ICogcnVudGltZS9KU0FycmF5Lmg6CisgICAgICAgIChKU0M6OmFzQXJyYXkpOgorICAgICAgICAo
SlNDOjppc0pTQXJyYXkpOgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheUJ1ZmZlclByb3RvdHlw
ZS5jcHA6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJQcm90b3R5cGU6OmZpbmlzaENyZWF0
aW9uKToKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmNwcDoKKyAgICAgICAg
KEpTQzo6SlNBcnJheUJ1ZmZlclZpZXc6OnNsb3dEb3duQW5kV2FzdGVNZW1vcnkpOgorICAgICAg
ICAqIHJ1bnRpbWUvSlNDSlNWYWx1ZS5jcHA6CisgICAgICAgIChKU0M6OkpTVmFsdWU6OnB1dFRv
UHJpbWl0aXZlQnlJbmRleCk6CisgICAgICAgIChKU0M6OkpTVmFsdWU6OmR1bXBGb3JCYWNrdHJh
Y2UgY29uc3QpOgorICAgICAgICAoSlNDOjpKU1ZhbHVlOjp0b1N0cmluZ1Nsb3dDYXNlIGNvbnN0
KToKKyAgICAgICAgKiBydW50aW1lL0pTQ0pTVmFsdWVJbmxpbmVzLmg6CisgICAgICAgIChKU0M6
OkpTVmFsdWU6OmdldCBjb25zdCk6CisgICAgICAgICogcnVudGltZS9KU0Nhc3QuaDoKKyAgICAg
ICAgKEpTQzo6anNDYXN0KToKKyAgICAgICAgKiBydW50aW1lL0pTQ2VsbC5jcHA6CisgICAgICAg
IChKU0M6OkpTQ2VsbDo6ZHVtcCBjb25zdCk6CisgICAgICAgIChKU0M6OkpTQ2VsbDo6ZHVtcFRv
U3RyZWFtKToKKyAgICAgICAgKEpTQzo6SlNDZWxsOjpwdXRCeUluZGV4KToKKyAgICAgICAgKiBy
dW50aW1lL0pTQ2VsbElubGluZXMuaDoKKyAgICAgICAgKEpTQzo6SlNDZWxsOjpzdHJ1Y3R1cmUg
Y29uc3QpOgorICAgICAgICAoSlNDOjpFeGVjU3RhdGU6OnZtIGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6dHJ5QWxsb2NhdGVDZWxsSGVscGVyKToKKyAgICAgICAgKiBydW50aW1lL0pTRGF0YVZpZXdQ
cm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpKU0RhdGFWaWV3UHJvdG90eXBlOjpmaW5pc2hD
cmVhdGlvbik6CisgICAgICAgICogcnVudGltZS9KU0ZpeGVkQXJyYXkuY3BwOgorICAgICAgICAo
SlNDOjpKU0ZpeGVkQXJyYXk6OmR1bXBUb1N0cmVhbSk6CisgICAgICAgICogcnVudGltZS9KU0Z1
bmN0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6SlNGdW5jdGlvbjo6ZmluaXNoQ3JlYXRpb24pOgor
ICAgICAgICAoSlNDOjpSZXRyaWV2ZUNhbGxlckZ1bmN0aW9uRnVuY3Rvcjo6b3BlcmF0b3IoKSBj
b25zdCk6CisgICAgICAgIChKU0M6OkpTRnVuY3Rpb246OnJlaWZ5TmFtZSk6CisgICAgICAgIChK
U0M6OkpTRnVuY3Rpb246OnJlaWZ5TGF6eUJvdW5kTmFtZUlmTmVlZGVkKToKKyAgICAgICAgKEpT
Qzo6SlNGdW5jdGlvbjo6YXNzZXJ0VHlwZUluZm9GbGFnSW52YXJpYW50cyk6CisgICAgICAgICog
cnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaDoKKyAgICAgICAgKEpTQzo6
SlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmRlbGV0ZVByb3BlcnR5QnlJbmRleCk6
CisgICAgICAgIChKU0M6OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpnZXRPd25Q
cm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcDoKKyAg
ICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OmluaXQpOgorICAgICAgICAoSlNDOjpKU0dsb2Jh
bE9iamVjdDo6ZXhwb3NlRG9sbGFyVk0pOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmpl
Y3RGdW5jdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjplbmNvZGUpOgorICAgICAgICAoSlNDOjpk
ZWNvZGUpOgorICAgICAgICAoSlNDOjpnbG9iYWxGdW5jRXNjYXBlKToKKyAgICAgICAgKEpTQzo6
Z2xvYmFsRnVuY1VuZXNjYXBlKToKKyAgICAgICAgKEpTQzo6Z2xvYmFsRnVuY0J1aWx0aW5EZXNj
cmliZSk6CisgICAgICAgICogcnVudGltZS9KU0xleGljYWxFbnZpcm9ubWVudC5jcHA6CisgICAg
ICAgIChKU0M6OkpTTGV4aWNhbEVudmlyb25tZW50OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFt
ZXMpOgorICAgICAgICAqIHJ1bnRpbWUvSlNNb2R1bGVFbnZpcm9ubWVudC5jcHA6CisgICAgICAg
IChKU0M6OkpTTW9kdWxlRW52aXJvbm1lbnQ6OmdldE93blByb3BlcnR5U2xvdCk6CisgICAgICAg
IChKU0M6OkpTTW9kdWxlRW52aXJvbm1lbnQ6OnB1dCk6CisgICAgICAgIChKU0M6OkpTTW9kdWxl
RW52aXJvbm1lbnQ6OmRlbGV0ZVByb3BlcnR5KToKKyAgICAgICAgKiBydW50aW1lL0pTTW9kdWxl
TG9hZGVyLmNwcDoKKyAgICAgICAgKEpTQzo6SlNNb2R1bGVMb2FkZXI6OmZpbmlzaENyZWF0aW9u
KToKKyAgICAgICAgKEpTQzo6SlNNb2R1bGVMb2FkZXI6OnJlcXVlc3RJbXBvcnRNb2R1bGUpOgor
ICAgICAgICAoSlNDOjptb2R1bGVMb2FkZXJQYXJzZU1vZHVsZSk6CisgICAgICAgIChKU0M6Om1v
ZHVsZUxvYWRlclJlcXVlc3RlZE1vZHVsZXMpOgorICAgICAgICAqIHJ1bnRpbWUvSlNNb2R1bGVO
YW1lc3BhY2VPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpKU01vZHVsZU5hbWVzcGFjZU9iamVj
dDo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpKU01vZHVsZU5hbWVzcGFjZU9iamVj
dDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleCk6CisgICAgICAgICogcnVudGltZS9KU01vZHVs
ZVJlY29yZC5jcHA6CisgICAgICAgIChKU0M6OkpTTW9kdWxlUmVjb3JkOjppbnN0YW50aWF0ZURl
Y2xhcmF0aW9ucyk6CisgICAgICAgICogcnVudGltZS9KU09OT2JqZWN0LmNwcDoKKyAgICAgICAg
KEpTQzo6SlNPTk9iamVjdDo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpQcm9wZXJ0
eU5hbWVGb3JGdW5jdGlvbkNhbGw6OnZhbHVlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6U3RyaW5n
aWZpZXI6OlN0cmluZ2lmaWVyKToKKyAgICAgICAgKEpTQzo6U3RyaW5naWZpZXI6OnN0cmluZ2lm
eSk6CisgICAgICAgIChKU0M6OlN0cmluZ2lmaWVyOjpIb2xkZXI6OmFwcGVuZE5leHRQcm9wZXJ0
eSk6CisgICAgICAgIChKU0M6OldhbGtlcjo6d2Fsayk6CisgICAgICAgICogcnVudGltZS9KU09i
amVjdC5jcHA6CisgICAgICAgIChKU0M6OmdldENsYXNzUHJvcGVydHlOYW1lcyk6CisgICAgICAg
IChKU0M6OkpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KToKKyAgICAgICAgKEpT
Qzo6SlNPYmplY3Q6OnB1dEJ5SW5kZXgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZGVsZXRl
UHJvcGVydHlCeUluZGV4KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnRvU3RyaW5nIGNvbnN0
KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnJlaWZ5QWxsU3RhdGljUHJvcGVydGllcyk6Cisg
ICAgICAgIChKU0M6OkpTT2JqZWN0OjpwdXREaXJlY3RJbmRleFNsb3dPckJleW9uZFZlY3Rvckxl
bmd0aCk6CisgICAgICAgICogcnVudGltZS9KU09iamVjdC5oOgorICAgICAgICAoSlNDOjpKU09i
amVjdDo6cHV0QnlJbmRleElubGluZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpidXR0ZXJm
bHlQcmVDYXBhY2l0eSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpidXR0ZXJmbHlUb3RhbFNp
emUpOgorICAgICAgICAoSlNDOjptYWtlSWRlbnRpZmllcik6CisgICAgICAgICogcnVudGltZS9K
U1Byb21pc2VQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpKU1Byb21pc2VQcm90b3R5cGU6
OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKiBydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVy
YXRvci5jcHA6CisgICAgICAgIChKU0M6OkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6ZmluaXNo
Q3JlYXRpb24pOgorICAgICAgICAqIHJ1bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmg6
CisgICAgICAgIChKU0M6OnByb3BlcnR5TmFtZUVudW1lcmF0b3IpOgorICAgICAgICAqIHJ1bnRp
bWUvSlNSdW5Mb29wVGltZXIuY3BwOgorICAgICAgICAoSlNDOjpKU1J1bkxvb3BUaW1lcjo6SlNS
dW5Mb29wVGltZXIpOgorICAgICAgICAqIHJ1bnRpbWUvSlNSdW5Mb29wVGltZXIuaDoKKyAgICAg
ICAgKiBydW50aW1lL0pTU3RyaW5nLmNwcDoKKyAgICAgICAgKEpTQzo6SlNTdHJpbmc6OmR1bXBU
b1N0cmVhbSk6CisgICAgICAgIChKU0M6OkpTUm9wZVN0cmluZzo6cmVzb2x2ZVJvcGVXaXRoRnVu
Y3Rpb24gY29uc3QpOgorICAgICAgICAoSlNDOjpqc1N0cmluZ1dpdGhDYWNoZVNsb3dDYXNlKToK
KyAgICAgICAgKiBydW50aW1lL0pTU3RyaW5nLmg6CisgICAgICAgIChKU0M6OmpzRW1wdHlTdHJp
bmcpOgorICAgICAgICAoSlNDOjpqc1NpbmdsZUNoYXJhY3RlclN0cmluZyk6CisgICAgICAgIChK
U0M6OmpzTm9udHJpdmlhbFN0cmluZyk6CisgICAgICAgIChKU0M6OkpTU3RyaW5nOjp0b0lkZW50
aWZpZXIgY29uc3QpOgorICAgICAgICAoSlNDOjpKU1N0cmluZzo6dG9BdG9tU3RyaW5nIGNvbnN0
KToKKyAgICAgICAgKEpTQzo6SlNTdHJpbmc6OnRvRXhpc3RpbmdBdG9tU3RyaW5nIGNvbnN0KToK
KyAgICAgICAgKEpTQzo6SlNTdHJpbmc6OnZhbHVlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6SlNT
dHJpbmc6OnRyeUdldFZhbHVlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6SlNTdHJpbmc6OmdldElu
ZGV4KToKKyAgICAgICAgKEpTQzo6anNTdHJpbmcpOgorICAgICAgICAoSlNDOjpqc1N1YnN0cmlu
Zyk6CisgICAgICAgIChKU0M6OmpzT3duZWRTdHJpbmcpOgorICAgICAgICAoSlNDOjpqc1N0cmlu
Z1dpdGhDYWNoZSk6CisgICAgICAgIChKU0M6OkpTUm9wZVN0cmluZzo6dW5zYWZlVmlldyBjb25z
dCk6CisgICAgICAgIChKU0M6OkpTUm9wZVN0cmluZzo6dmlld1dpdGhVbmRlcmx5aW5nU3RyaW5n
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6SlNTdHJpbmc6OnVuc2FmZVZpZXcgY29uc3QpOgorICAg
ICAgICAqIHJ1bnRpbWUvSlNTdHJpbmdJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OmpzTWFrZU5v
bnRyaXZpYWxTdHJpbmcpOgorICAgICAgICAoSlNDOjpyZXBlYXRDaGFyYWN0ZXIpOgorICAgICAg
ICAqIHJ1bnRpbWUvSlNTdHJpbmdKb2luZXIuY3BwOgorICAgICAgICAoSlNDOjpKU1N0cmluZ0pv
aW5lcjo6am9pbik6CisgICAgICAgICogcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmNwcDoK
KyAgICAgICAgKEpTQzo6SlNTeW1ib2xUYWJsZU9iamVjdDo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0
eU5hbWVzKToKKyAgICAgICAgKiBydW50aW1lL0pTVGVtcGxhdGVPYmplY3REZXNjcmlwdG9yLmNw
cDoKKyAgICAgICAgKEpTQzo6SlNUZW1wbGF0ZU9iamVjdERlc2NyaXB0b3I6OmNyZWF0ZVRlbXBs
YXRlT2JqZWN0KToKKyAgICAgICAgKiBydW50aW1lL0pTVHlwZWRBcnJheVZpZXdQcm90b3R5cGUu
Y3BwOgorICAgICAgICAoSlNDOjp0eXBlZEFycmF5Vmlld1Byb3RvR2V0dGVyRnVuY1RvU3RyaW5n
VGFnKToKKyAgICAgICAgKiBydW50aW1lL0xhenlDbGFzc1N0cnVjdHVyZS5jcHA6CisgICAgICAg
IChKU0M6OkxhenlDbGFzc1N0cnVjdHVyZTo6SW5pdGlhbGl6ZXI6OnNldENvbnN0cnVjdG9yKToK
KyAgICAgICAgKiBydW50aW1lL0xhenlQcm9wZXJ0eS5oOgorICAgICAgICAoSlNDOjpMYXp5UHJv
cGVydHk6OkluaXRpYWxpemVyOjpJbml0aWFsaXplcik6CisgICAgICAgICogcnVudGltZS9MaXRl
cmFsUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6TGl0ZXJhbFBhcnNlcjxDaGFyVHlwZT46OnRy
eUpTT05QUGFyc2UpOgorICAgICAgICAoSlNDOjpMaXRlcmFsUGFyc2VyPENoYXJUeXBlPjo6bWFr
ZUlkZW50aWZpZXIpOgorICAgICAgICAoSlNDOjpMaXRlcmFsUGFyc2VyPENoYXJUeXBlPjo6cGFy
c2UpOgorICAgICAgICAqIHJ1bnRpbWUvTG9va3VwLmg6CisgICAgICAgIChKU0M6OnJlaWZ5U3Rh
dGljUHJvcGVydGllcyk6CisgICAgICAgICogcnVudGltZS9NYXBJdGVyYXRvclByb3RvdHlwZS5j
cHA6CisgICAgICAgIChKU0M6Ok1hcEl0ZXJhdG9yUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbik6
CisgICAgICAgICogcnVudGltZS9NYXBQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpNYXBQ
cm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKiBydW50aW1lL01hdGhPYmplY3Qu
Y3BwOgorICAgICAgICAoSlNDOjpNYXRoT2JqZWN0OjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAg
ICogcnVudGltZS9OdW1iZXJDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6Ok51bWJlckNv
bnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgICogcnVudGltZS9OdW1iZXJQcm90
b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpudW1iZXJQcm90b0Z1bmNUb0V4cG9uZW50aWFsKToK
KyAgICAgICAgKEpTQzo6bnVtYmVyUHJvdG9GdW5jVG9GaXhlZCk6CisgICAgICAgIChKU0M6Om51
bWJlclByb3RvRnVuY1RvUHJlY2lzaW9uKToKKyAgICAgICAgKEpTQzo6aW50MzJUb1N0cmluZ0lu
dGVybmFsKToKKyAgICAgICAgKEpTQzo6bnVtYmVyVG9TdHJpbmdJbnRlcm5hbCk6CisgICAgICAg
IChKU0M6OmludDUyVG9TdHJpbmcpOgorICAgICAgICAqIHJ1bnRpbWUvT2JqZWN0Q29uc3RydWN0
b3IuY3BwOgorICAgICAgICAoSlNDOjpvYmplY3RDb25zdHJ1Y3RvckdldE93blByb3BlcnR5RGVz
Y3JpcHRvcnMpOgorICAgICAgICAoSlNDOjpvYmplY3RDb25zdHJ1Y3RvckFzc2lnbik6CisgICAg
ICAgIChKU0M6Om9iamVjdENvbnN0cnVjdG9yVmFsdWVzKToKKyAgICAgICAgKEpTQzo6ZGVmaW5l
UHJvcGVydGllcyk6CisgICAgICAgIChKU0M6OnNldEludGVncml0eUxldmVsKToKKyAgICAgICAg
KEpTQzo6dGVzdEludGVncml0eUxldmVsKToKKyAgICAgICAgKEpTQzo6b3duUHJvcGVydHlLZXlz
KToKKyAgICAgICAgKiBydW50aW1lL09iamVjdFByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6
Om9iamVjdFByb3RvRnVuY1RvU3RyaW5nKToKKyAgICAgICAgKiBydW50aW1lL09wZXJhdGlvbnMu
aDoKKyAgICAgICAgKEpTQzo6anNTdHJpbmcpOgorICAgICAgICAoSlNDOjpqc1N0cmluZ0Zyb21S
ZWdpc3RlckFycmF5KToKKyAgICAgICAgKEpTQzo6anNTdHJpbmdGcm9tQXJndW1lbnRzKToKKyAg
ICAgICAgKiBydW50aW1lL1Byb2dyYW1FeGVjdXRhYmxlLmNwcDoKKyAgICAgICAgKEpTQzo6UHJv
Z3JhbUV4ZWN1dGFibGU6OmluaXRpYWxpemVHbG9iYWxQcm9wZXJ0aWVzKToKKyAgICAgICAgKiBy
dW50aW1lL1Byb21pc2VEZWZlcnJlZFRpbWVyLmNwcDoKKyAgICAgICAgKEpTQzo6UHJvbWlzZURl
ZmVycmVkVGltZXI6OlByb21pc2VEZWZlcnJlZFRpbWVyKToKKyAgICAgICAgKEpTQzo6UHJvbWlz
ZURlZmVycmVkVGltZXI6Omhhc1BlbmRpbmdQcm9taXNlKToKKyAgICAgICAgKEpTQzo6UHJvbWlz
ZURlZmVycmVkVGltZXI6Omhhc0RlcGVuZGFuY3lJblBlbmRpbmdQcm9taXNlKToKKyAgICAgICAg
KEpTQzo6UHJvbWlzZURlZmVycmVkVGltZXI6OmNhbmNlbFBlbmRpbmdQcm9taXNlKToKKyAgICAg
ICAgKiBydW50aW1lL1Byb3BlcnR5TmFtZUFycmF5Lmg6CisgICAgICAgIChKU0M6OlByb3BlcnR5
TmFtZUFycmF5OjpQcm9wZXJ0eU5hbWVBcnJheSk6CisgICAgICAgIChKU0M6OlByb3BlcnR5TmFt
ZUFycmF5Ojp2bSk6CisgICAgICAgICogcnVudGltZS9Qcm9wZXJ0eVNsb3QuaDoKKyAgICAgICAg
KEpTQzo6UHJvcGVydHlTbG90OjpnZXRWYWx1ZSBjb25zdCk6CisgICAgICAgICogcnVudGltZS9Q
cm94eU9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OnBlcmZvcm1Qcm94eUdldCk6CisgICAgICAg
IChKU0M6OlByb3h5T2JqZWN0OjpwZXJmb3JtSW50ZXJuYWxNZXRob2RHZXRPd25Qcm9wZXJ0eSk6
CisgICAgICAgIChKU0M6OlByb3h5T2JqZWN0OjpwZXJmb3JtSGFzUHJvcGVydHkpOgorICAgICAg
ICAoSlNDOjpQcm94eU9iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleCk6CisgICAgICAg
IChKU0M6OlByb3h5T2JqZWN0OjpwZXJmb3JtUHV0KToKKyAgICAgICAgKEpTQzo6UHJveHlPYmpl
Y3Q6OnB1dEJ5SW5kZXhDb21tb24pOgorICAgICAgICAoSlNDOjpQcm94eU9iamVjdDo6cGVyZm9y
bURlbGV0ZSk6CisgICAgICAgIChKU0M6OlByb3h5T2JqZWN0OjpkZWxldGVQcm9wZXJ0eUJ5SW5k
ZXgpOgorICAgICAgICAoSlNDOjpQcm94eU9iamVjdDo6cGVyZm9ybURlZmluZU93blByb3BlcnR5
KToKKyAgICAgICAgKEpTQzo6UHJveHlPYmplY3Q6OnBlcmZvcm1HZXRPd25Qcm9wZXJ0eU5hbWVz
KToKKyAgICAgICAgKiBydW50aW1lL1JlZ0V4cEdsb2JhbERhdGEuY3BwOgorICAgICAgICAoSlND
OjpSZWdFeHBHbG9iYWxEYXRhOjpnZXRCYWNrcmVmKToKKyAgICAgICAgKEpTQzo6UmVnRXhwR2xv
YmFsRGF0YTo6Z2V0TGFzdFBhcmVuKToKKyAgICAgICAgKiBydW50aW1lL1JlZ0V4cE1hdGNoZXNB
cnJheS5jcHA6CisgICAgICAgIChKU0M6OmNyZWF0ZUVtcHR5UmVnRXhwTWF0Y2hlc0FycmF5KToK
KyAgICAgICAgKiBydW50aW1lL1JlZ0V4cE1hdGNoZXNBcnJheS5oOgorICAgICAgICAoSlNDOjpj
cmVhdGVSZWdFeHBNYXRjaGVzQXJyYXkpOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwUHJvdG90
eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6cmVnRXhwUHJvdG9HZXR0ZXJGbGFncyk6CisgICAgICAg
IChKU0M6OnJlZ0V4cFByb3RvR2V0dGVyU291cmNlSW50ZXJuYWwpOgorICAgICAgICAoSlNDOjpy
ZWdFeHBQcm90b0dldHRlclNvdXJjZSk6CisgICAgICAgICogcnVudGltZS9SZWdFeHBTdHJpbmdJ
dGVyYXRvclByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OlJlZ0V4cFN0cmluZ0l0ZXJhdG9y
UHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgICogcnVudGltZS9TYW1wbGluZ1By
b2ZpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6U2FtcGxpbmdQcm9maWxlcjo6cHJvY2Vzc1VudmVy
aWZpZWRTdGFja1RyYWNlcyk6CisgICAgICAgICogcnVudGltZS9TY3JpcHRFeGVjdXRhYmxlLmNw
cDoKKyAgICAgICAgKEpTQzo6U2NyaXB0RXhlY3V0YWJsZTo6aW5zdGFsbENvZGUpOgorICAgICAg
ICAoSlNDOjpTY3JpcHRFeGVjdXRhYmxlOjpuZXdDb2RlQmxvY2tGb3IpOgorICAgICAgICAoSlND
OjpTY3JpcHRFeGVjdXRhYmxlOjpuZXdSZXBsYWNlbWVudENvZGVCbG9ja0Zvcik6CisgICAgICAg
IChKU0M6OnNldHVwSklUKToKKyAgICAgICAgKiBydW50aW1lL1NldEl0ZXJhdG9yUHJvdG90eXBl
LmNwcDoKKyAgICAgICAgKEpTQzo6U2V0SXRlcmF0b3JQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9u
KToKKyAgICAgICAgKiBydW50aW1lL1NldFByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OlNl
dFByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAqIHJ1bnRpbWUvU3RhY2tGcmFt
ZS5jcHA6CisgICAgICAgIChKU0M6OlN0YWNrRnJhbWU6OmNvbXB1dGVMaW5lQW5kQ29sdW1uIGNv
bnN0KToKKyAgICAgICAgKiBydW50aW1lL1N0cmluZ0NvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAg
KEpTQzo6c3RyaW5nRnJvbUNoYXJDb2RlKToKKyAgICAgICAgKEpTQzo6c3RyaW5nRnJvbUNvZGVQ
b2ludCk6CisgICAgICAgIChKU0M6OnN0cmluZ0NvbnN0cnVjdG9yKToKKyAgICAgICAgKEpTQzo6
Y2FsbFN0cmluZ0NvbnN0cnVjdG9yKToKKyAgICAgICAgKiBydW50aW1lL1N0cmluZ0l0ZXJhdG9y
UHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6U3RyaW5nSXRlcmF0b3JQcm90b3R5cGU6OmZp
bmlzaENyZWF0aW9uKToKKyAgICAgICAgKiBydW50aW1lL1N0cmluZ09iamVjdC5jcHA6CisgICAg
ICAgIChKU0M6OlN0cmluZ09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleCk6CisgICAg
ICAgIChKU0M6OlN0cmluZ09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyk6CisgICAgICAgICog
cnVudGltZS9TdHJpbmdPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6U3RyaW5nT2JqZWN0OjpjcmVh
dGUpOgorICAgICAgICAoSlNDOjpqc1N0cmluZ1dpdGhSZXVzZSk6CisgICAgICAgIChKU0M6Ompz
U3Vic3RyaW5nKToKKyAgICAgICAgKiBydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHA6CisgICAg
ICAgIChKU0M6OlN0cmluZ1Byb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlND
OjpTdHJpbmdQcm90b3R5cGU6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OmpzU3BsaWNlU3Vic3Ry
aW5ncyk6CisgICAgICAgIChKU0M6OmpzU3BsaWNlU3Vic3RyaW5nc1dpdGhTZXBhcmF0b3JzKToK
KyAgICAgICAgKEpTQzo6cmVwbGFjZVVzaW5nUmVnRXhwU2VhcmNoKToKKyAgICAgICAgKEpTQzo6
b3BlcmF0aW9uU3RyaW5nUHJvdG9GdW5jUmVwbGFjZVJlZ0V4cEVtcHR5U3RyKToKKyAgICAgICAg
KEpTQzo6b3BlcmF0aW9uU3RyaW5nUHJvdG9GdW5jUmVwbGFjZVJlZ0V4cFN0cmluZyk6CisgICAg
ICAgIChKU0M6OnJlcGxhY2VVc2luZ1N0cmluZ1NlYXJjaCk6CisgICAgICAgIChKU0M6Om9wZXJh
dGlvblN0cmluZ1Byb3RvRnVuY1JlcGxhY2VHZW5lcmljKToKKyAgICAgICAgKEpTQzo6c3RyaW5n
UHJvdG9GdW5jQ2hhckF0KToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jU3BsaXRGYXN0
KToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jU3Vic3RyKToKKyAgICAgICAgKEpTQzo6
c3RyaW5nUHJvdG9GdW5jVG9Mb3dlckNhc2UpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1
bmNUb1VwcGVyQ2FzZSk6CisgICAgICAgIChKU0M6OnRvTG9jYWxlQ2FzZSk6CisgICAgICAgIChK
U0M6OnRyaW1TdHJpbmcpOgorICAgICAgICAoSlNDOjpub3JtYWxpemUpOgorICAgICAgICAqIHJ1
bnRpbWUvU3RyaW5nUHJvdG90eXBlSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpzdHJpbmdTbGlj
ZSk6CisgICAgICAgICogcnVudGltZS9TdHJpbmdSZWN1cnNpb25DaGVja2VyLmNwcDoKKyAgICAg
ICAgKEpTQzo6U3RyaW5nUmVjdXJzaW9uQ2hlY2tlcjo6ZW1wdHlTdHJpbmcpOgorICAgICAgICAq
IHJ1bnRpbWUvU3RydWN0dXJlLmNwcDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpkaWRUcmFu
c2l0aW9uRnJvbVRoaXNTdHJ1Y3R1cmUgY29uc3QpOgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0
dXJlSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmRpZFJlcGxhY2VQcm9wZXJ0
eSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6c2hvdWxkQ29udmVydFRvUG9seVByb3RvKToK
KyAgICAgICAgKiBydW50aW1lL1N5bWJvbENvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6
c3ltYm9sQ29uc3RydWN0b3JLZXlGb3IpOgorICAgICAgICAqIHJ1bnRpbWUvU3ltYm9sUHJvdG90
eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6U3ltYm9sUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbik6
CisgICAgICAgIChKU0M6OnN5bWJvbFByb3RvR2V0dGVyRGVzY3JpcHRpb24pOgorICAgICAgICAo
SlNDOjpzeW1ib2xQcm90b0Z1bmNUb1N0cmluZyk6CisgICAgICAgICogcnVudGltZS9TeW1ib2xU
YWJsZS5jcHA6CisgICAgICAgIChKU0M6OlN5bWJvbFRhYmxlOjpzZXRSYXJlRGF0YUNvZGVCbG9j
ayk6CisgICAgICAgICogcnVudGltZS9UZXN0UnVubmVyVXRpbHMuY3BwOgorICAgICAgICAoSlND
OjpnZXRFeGVjdXRhYmxlRm9yRnVuY3Rpb24pOgorICAgICAgICAqIHJ1bnRpbWUvVk0uY3BwOgor
ICAgICAgICAoSlNDOjpWTTo6Vk0pOgorICAgICAgICAoSlNDOjpWTTo6Z2V0SG9zdEZ1bmN0aW9u
KToKKyAgICAgICAgKEpTQzo6Vk06OmdldENUSUludGVybmFsRnVuY3Rpb25UcmFtcG9saW5lRm9y
KToKKyAgICAgICAgKEpTQzo6Vk06OnNocmlua0Zvb3RwcmludFdoZW5JZGxlKToKKyAgICAgICAg
KEpTQzo6bG9nU2FuaXRpemVTdGFjayk6CisgICAgICAgIChKU0M6OnNhbml0aXplU3RhY2tGb3JW
TSk6CisgICAgICAgIChKU0M6OlZNOjplbXB0eVByb3BlcnR5TmFtZUVudW1lcmF0b3JTbG93KToK
KyAgICAgICAgKiBydW50aW1lL1ZNLmg6CisgICAgICAgIChKU0M6OlZNOjpnZXRDVElTdHViKToK
KyAgICAgICAgKEpTQzo6V2Vha1NldDo6aGVhcCBjb25zdCk6CisgICAgICAgICogcnVudGltZS9W
TVRyYXBzLmNwcDoKKyAgICAgICAgKiBydW50aW1lL1dlYWtNYXBQcm90b3R5cGUuY3BwOgorICAg
ICAgICAoSlNDOjpXZWFrTWFwUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgICog
cnVudGltZS9XZWFrT2JqZWN0UmVmUHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6V2Vha09i
amVjdFJlZlByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAqIHJ1bnRpbWUvV2Vh
a1NldFByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OldlYWtTZXRQcm90b3R5cGU6OmZpbmlz
aENyZWF0aW9uKToKKyAgICAgICAgKiB0b29scy9IZWFwVmVyaWZpZXIuY3BwOgorICAgICAgICAo
SlNDOjpIZWFwVmVyaWZpZXI6OnByaW50VmVyaWZpY2F0aW9uSGVhZGVyKToKKyAgICAgICAgKEpT
Qzo6SGVhcFZlcmlmaWVyOjp2ZXJpZnlDZWxsTGlzdCk6CisgICAgICAgIChKU0M6OkhlYXBWZXJp
Zmllcjo6dmFsaWRhdGVKU0NlbGwpOgorICAgICAgICAoSlNDOjpIZWFwVmVyaWZpZXI6OnJlcG9y
dENlbGwpOgorICAgICAgICAqIHRvb2xzL0pTRG9sbGFyVk0uY3BwOgorICAgICAgICAoSlNDOjpK
U0RvbGxhclZNQ2FsbEZyYW1lOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OkpTRG9s
bGFyVk1DYWxsRnJhbWU6OmFkZFByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6Q3VzdG9tR2V0dGVy
OjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAoSlNDOjpDdXN0b21HZXR0ZXI6OmN1c3Rv
bUdldHRlcik6CisgICAgICAgIChKU0M6OkN1c3RvbUdldHRlcjo6Y3VzdG9tR2V0dGVyQWNlc3Nv
cik6CisgICAgICAgIChKU0M6OkRPTUpJVEdldHRlcjo6RE9NSklUQXR0cmlidXRlOjpzbG93Q2Fs
bCk6CisgICAgICAgIChKU0M6OkRPTUpJVEdldHRlcjo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAg
ICAoSlNDOjpET01KSVRHZXR0ZXJDb21wbGV4OjpET01KSVRBdHRyaWJ1dGU6OnNsb3dDYWxsKToK
KyAgICAgICAgKEpTQzo6RE9NSklUR2V0dGVyQ29tcGxleDo6ZmluaXNoQ3JlYXRpb24pOgorICAg
ICAgICAoSlNDOjpET01KSVRGdW5jdGlvbk9iamVjdDo6ZnVuY3Rpb25XaXRob3V0VHlwZUNoZWNr
KToKKyAgICAgICAgKEpTQzo6RE9NSklURnVuY3Rpb25PYmplY3Q6OmZpbmlzaENyZWF0aW9uKToK
KyAgICAgICAgKEpTQzo6RE9NSklUQ2hlY2tTdWJDbGFzc09iamVjdDo6ZnVuY3Rpb25XaXRob3V0
VHlwZUNoZWNrKToKKyAgICAgICAgKEpTQzo6RE9NSklUQ2hlY2tTdWJDbGFzc09iamVjdDo6Zmlu
aXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpET01KSVRHZXR0ZXJCYXNlSlNPYmplY3Q6OkRP
TUpJVEF0dHJpYnV0ZTo6c2xvd0NhbGwpOgorICAgICAgICAoSlNDOjpET01KSVRHZXR0ZXJCYXNl
SlNPYmplY3Q6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6Y3VzdG9tU2V0QWNjZXNz
b3IpOgorICAgICAgICAoSlNDOjpjdXN0b21TZXRWYWx1ZSk6CisgICAgICAgIChKU0M6OkpTVGVz
dEN1c3RvbUdldHRlclNldHRlcjo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpXYXNt
U3RyZWFtaW5nUGFyc2VyOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OmdldEV4ZWN1
dGFibGVGb3JGdW5jdGlvbik6CisgICAgICAgIChKU0M6OmZ1bmN0aW9uQ29kZUJsb2NrRm9yKToK
KyAgICAgICAgKEpTQzo6ZnVuY3Rpb25JbmRleGluZ01vZGUpOgorICAgICAgICAoSlNDOjpmdW5j
dGlvblZhbHVlKToKKyAgICAgICAgKEpTQzo6ZnVuY3Rpb25DcmVhdGVCdWlsdGluKToKKyAgICAg
ICAgKEpTQzo6ZnVuY3Rpb25HZXRQcml2YXRlUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpKU0Rv
bGxhclZNOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OkpTRG9sbGFyVk06OmFkZEZ1
bmN0aW9uKToKKyAgICAgICAgKEpTQzo6SlNEb2xsYXJWTTo6YWRkQ29uc3RydWN0aWJsZUZ1bmN0
aW9uKToKKyAgICAgICAgKiB0b29scy9WTUluc3BlY3Rvci5jcHA6CisgICAgICAgIChKU0M6OlZN
SW5zcGVjdG9yOjpkdW1wUmVnaXN0ZXJzKToKKyAgICAgICAgKEpTQzo6Vk1JbnNwZWN0b3I6OmR1
bXBDZWxsTWVtb3J5VG9TdHJlYW0pOgorICAgICAgICAqIHdhc20vV2FzbUluc3RhbmNlLmNwcDoK
KyAgICAgICAgKEpTQzo6V2FzbTo6SW5zdGFuY2U6OnNldEdsb2JhbCk6CisgICAgICAgIChKU0M6
Oldhc206Okluc3RhbmNlOjpzZXRGdW5jdGlvbldyYXBwZXIpOgorICAgICAgICAoSlNDOjpXYXNt
OjpzZXRXYXNtVGFibGVFbGVtZW50KToKKyAgICAgICAgKEpTQzo6V2FzbTo6ZG9XYXNtUmVmRnVu
Yyk6CisgICAgICAgICogd2FzbS9XYXNtVGFibGUuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpU
YWJsZTo6c2V0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6RnVuY1JlZlRhYmxlOjpzZXRGdW5jdGlv
bik6CisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5LmNwcDoKKyAgICAgICAgKEpTQzo6
cmVzb2x2ZSk6CisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuY3BwOgor
ICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmNyZWF0ZSk6CisgICAgICAgICog
d2FzbS9qcy9XYXNtVG9KUy5jcHA6CisgICAgICAgIChKU0M6Oldhc206OmhhbmRsZUJhZEk2NFVz
ZSk6CisgICAgICAgIChKU0M6Oldhc206Ondhc21Ub0pTKToKKyAgICAgICAgKEpTQzo6V2FzbTo6
d2FzbVRvSlNFeGNlcHRpb24pOgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlv
bi5jcHA6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5RnVuY3Rpb246OmpzQ2FsbEVudHJ5cG9p
bnRTbG93KToKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5TWVtb3J5Q29uc3RydWN0b3Iu
Y3BwOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RKU1dlYkFzc2VtYmx5TWVtb3J5KToKKyAgICAg
ICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAo
SlNDOjp3ZWJBc3NlbWJseU1vZHVsZUltcG9ydHMpOgorICAgICAgICAoSlNDOjp3ZWJBc3NlbWJs
eU1vZHVsZUV4cG9ydHMpOgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNv
cmQuY3BwOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6ZmluaXNoQ3Jl
YXRpb24pOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6bGluayk6Cisg
ICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseVRhYmxlQ29uc3RydWN0b3IuY3BwOgorICAgICAg
ICAoSlNDOjpjb25zdHJ1Y3RKU1dlYkFzc2VtYmx5VGFibGUpOgorCiAyMDE5LTA4LTI2ICBEZXZp
biBSb3Vzc28gIDxkcm91c3NvQGFwcGxlLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiB1
c2UgbW9yZSBDKysga2V5d29yZHMgZm9yIGRlZmluaW5nIGFnZW50cwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL0tleXdvcmRMb29rdXBHZW5lcmF0b3IucHkKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0tleXdvcmRMb29rdXBHZW5lcmF0b3IucHkJKHJldmlzaW9uIDI0
OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9LZXl3b3JkTG9va3VwR2VuZXJhdG9yLnB5
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDQgKzEsNCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMTEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxOSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAjIENvcHlyaWdodCAoQykgMjAxMiBTb255
IE5ldHdvcmsgRW50ZXJ0YWlubWVudC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICMKICMgUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CkBAIC0xNDQsNyArMTQ0LDcgQEAgY2xhc3MgVHJpZToKICAgICAgICAgICAgIHByaW50KHN0
ciArICJpZiAoIWlzSWRlbnRQYXJ0SW5jbHVkaW5nRXNjYXBlKGNvZGUgKyAlZCwgbV9jb2RlRW5k
KSkgeyIgJSAobGVuKHNlbGYuZnVsbFByZWZpeCkpKQogICAgICAgICAgICAgcHJpbnQoc3RyICsg
IiAgICBpbnRlcm5hbFNoaWZ0PCVkPigpOyIgJSBsZW4oc2VsZi5mdWxsUHJlZml4KSkKICAgICAg
ICAgICAgIHByaW50KHN0ciArICIgICAgaWYgKHNob3VsZENyZWF0ZUlkZW50aWZpZXIpIikKLSAg
ICAgICAgICAgIHByaW50KHN0ciArICgiICAgICAgICBkYXRhLT5pZGVudCA9ICZtX3ZtLT5wcm9w
ZXJ0eU5hbWVzLT4lc0tleXdvcmQ7IiAlIHNlbGYuZnVsbFByZWZpeCkpCisgICAgICAgICAgICBw
cmludChzdHIgKyAoIiAgICAgICAgZGF0YS0+aWRlbnQgPSAmbV92bS5wcm9wZXJ0eU5hbWVzLT4l
c0tleXdvcmQ7IiAlIHNlbGYuZnVsbFByZWZpeCkpCiAgICAgICAgICAgICBwcmludChzdHIgKyAi
ICAgIHJldHVybiAiICsgc2VsZi52YWx1ZSArICI7IikKICAgICAgICAgICAgIHByaW50KHN0ciAr
ICJ9IikKICAgICAgICAgcm9vdEluZGV4ID0gbGVuKHNlbGYuZnVsbFByZWZpeCkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9keW5iZW5jaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2R5bmJlbmNoLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2R5bmJlbmNoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC05MCwyMiArOTAsMjIgQEAg
aW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQogICAgIFdURjo6aW5pdGlhbGl6ZU1haW5U
aHJlYWQoKTsKICAgICBKU0M6OmluaXRpYWxpemVUaHJlYWRpbmcoKTsKIAotICAgIFZNKiB2bSA9
ICZWTTo6Y3JlYXRlKExhcmdlSGVhcCkubGVha1JlZigpOworICAgIFZNJiB2bSA9IFZNOjpjcmVh
dGUoTGFyZ2VIZWFwKS5sZWFrUmVmKCk7CiAgICAgewogICAgICAgICBKU0xvY2tIb2xkZXIgbG9j
a2VyKHZtKTsKIAogICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0KLSAgICAg
ICAgICAgIEpTR2xvYmFsT2JqZWN0OjpjcmVhdGUoKnZtLCBKU0dsb2JhbE9iamVjdDo6Y3JlYXRl
U3RydWN0dXJlKCp2bSwganNOdWxsKCkpKTsKKyAgICAgICAgICAgIEpTR2xvYmFsT2JqZWN0Ojpj
cmVhdGUodm0sIEpTR2xvYmFsT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUodm0sIGpzTnVsbCgpKSk7
CiAgICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwog
Ci0gICAgICAgIElkZW50aWZpZXIgaWRlbnRGID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVj
LCAiZiIpOwotICAgICAgICBJZGVudGlmaWVyIGlkZW50RyA9IElkZW50aWZpZXI6OmZyb21TdHJp
bmcoZXhlYywgImciKTsKKyAgICAgICAgSWRlbnRpZmllciBpZGVudEYgPSBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCAiZiIpOworICAgICAgICBJZGVudGlmaWVyIGlkZW50RyA9IElkZW50aWZp
ZXI6OmZyb21TdHJpbmcodm0sICJnIik7CiAKICAgICAgICAgU3RydWN0dXJlKiBvYmplY3RTdHJ1
Y3R1cmUgPQotICAgICAgICAgICAgSlNGaW5hbE9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKCp2bSwg
Z2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgpLCAyKTsKKyAgICAg
ICAgICAgIEpTRmluYWxPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgZ2xvYmFsT2JqZWN0LCBn
bG9iYWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgpLCAyKTsKIAogICAgICAgICAvLyBOb24tc3Ry
aWN0IGR5bmFtaWMgZ2V0IGJ5IGlkOgotICAgICAgICBKU1ZhbHVlIG9iamVjdCA9IEpTRmluYWxP
YmplY3Q6OmNyZWF0ZSgqdm0sIG9iamVjdFN0cnVjdHVyZSk7CisgICAgICAgIEpTVmFsdWUgb2Jq
ZWN0ID0gSlNGaW5hbE9iamVjdDo6Y3JlYXRlKHZtLCBvYmplY3RTdHJ1Y3R1cmUpOwogICAgICAg
ICB7CiAgICAgICAgICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChvYmplY3QsIGZhbHNlLCBQdXRQ
cm9wZXJ0eVNsb3Q6OlB1dEJ5SWQpOwogICAgICAgICAgICAgb2JqZWN0LnB1dElubGluZShleGVj
LCBpZGVudEYsIGpzTnVtYmVyKDQyKSwgc2xvdCk7CkBAIC0xMjcsNyArMTI3LDcgQEAgaW50IG1h
aW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQogICAgICAgICAgICAgfSk7CiAKICAgICAgICAgLy8g
Tm9uLXN0cmljdCBkeW5hbWljIHB1dCBieSBpZCByZXBsYWNlOgotICAgICAgICBvYmplY3QgPSBK
U0ZpbmFsT2JqZWN0OjpjcmVhdGUoKnZtLCBvYmplY3RTdHJ1Y3R1cmUpOworICAgICAgICBvYmpl
Y3QgPSBKU0ZpbmFsT2JqZWN0OjpjcmVhdGUodm0sIG9iamVjdFN0cnVjdHVyZSk7CiAgICAgICAg
IHsKICAgICAgICAgICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KG9iamVjdCwgZmFsc2UsIFB1dFBy
b3BlcnR5U2xvdDo6UHV0QnlJZCk7CiAgICAgICAgICAgICBvYmplY3QucHV0SW5saW5lKGV4ZWMs
IGlkZW50RiwganNOdW1iZXIoNDIpLCBzbG90KTsKQEAgLTE1OCw3ICsxNTgsNyBAQCBpbnQgbWFp
bihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCiAgICAgICAgICAgICAxMDAwMDAwLAogICAgICAgICAg
ICAgWyZdICh1bnNpZ25lZCBpdGVyYXRpb25Db3VudCkgewogICAgICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IGl0ZXJhdGlvbkNvdW50OyBpLS07KSB7Ci0gICAgICAgICAgICAgICAgICAg
IEpTVmFsdWUgb2JqZWN0ID0gSlNGaW5hbE9iamVjdDo6Y3JlYXRlKCp2bSwgb2JqZWN0U3RydWN0
dXJlKTsKKyAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZSBvYmplY3QgPSBKU0ZpbmFsT2JqZWN0
OjpjcmVhdGUodm0sIG9iamVjdFN0cnVjdHVyZSk7CiAgICAgICAgICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KG9iamVjdCwgZmFsc2Us
IFB1dFByb3BlcnR5U2xvdDo6UHV0QnlJZCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBvYmpl
Y3QucHV0SW5saW5lKGV4ZWMsIGlkZW50RiwganNOdW1iZXIoaSksIHNsb3QpOwpAQCAtMTcxLDcg
KzE3MSw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKICAgICAgICAgICAgIH0p
OwogCiAgICAgICAgIC8vIE5vbi1zdHJpY3QgZHluYW1pYyBnZXQgYnkgaWQgd2l0aCBkeW5hbWlj
IHN0b3JlIGNvbnRleHQ6Ci0gICAgICAgIG9iamVjdCA9IEpTRmluYWxPYmplY3Q6OmNyZWF0ZSgq
dm0sIG9iamVjdFN0cnVjdHVyZSk7CisgICAgICAgIG9iamVjdCA9IEpTRmluYWxPYmplY3Q6OmNy
ZWF0ZSh2bSwgb2JqZWN0U3RydWN0dXJlKTsKICAgICAgICAgewogICAgICAgICAgICAgUHV0UHJv
cGVydHlTbG90IHNsb3Qob2JqZWN0LCBmYWxzZSk7CiAgICAgICAgICAgICBvYmplY3QucHV0SW5s
aW5lKGV4ZWMsIGlkZW50RiwganNOdW1iZXIoNDIpLCBzbG90KTsKQEAgLTE5Myw3ICsxOTMsNyBA
QCBpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCiAgICAgICAgICAgICB9KTsKIAogICAg
ICAgICAvLyBOb24tc3RyaWN0IGR5bmFtaWMgcHV0IGJ5IGlkIHJlcGxhY2Ugd2l0aCBkeW5hbWlj
IHN0b3JlIGNvbnRleHQ6Ci0gICAgICAgIG9iamVjdCA9IEpTRmluYWxPYmplY3Q6OmNyZWF0ZSgq
dm0sIG9iamVjdFN0cnVjdHVyZSk7CisgICAgICAgIG9iamVjdCA9IEpTRmluYWxPYmplY3Q6OmNy
ZWF0ZSh2bSwgb2JqZWN0U3RydWN0dXJlKTsKICAgICAgICAgewogICAgICAgICAgICAgUHV0UHJv
cGVydHlTbG90IHNsb3Qob2JqZWN0LCBmYWxzZSk7CiAgICAgICAgICAgICBvYmplY3QucHV0SW5s
aW5lKGV4ZWMsIGlkZW50RiwganNOdW1iZXIoNDIpLCBzbG90KTsKQEAgLTIyNCw3ICsyMjQsNyBA
QCBpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCiAgICAgICAgICAgICAxMDAwMDAwLAog
ICAgICAgICAgICAgWyZdICh1bnNpZ25lZCBpdGVyYXRpb25Db3VudCkgewogICAgICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IGl0ZXJhdGlvbkNvdW50OyBpLS07KSB7Ci0gICAgICAgICAg
ICAgICAgICAgIEpTVmFsdWUgb2JqZWN0ID0gSlNGaW5hbE9iamVjdDo6Y3JlYXRlKCp2bSwgb2Jq
ZWN0U3RydWN0dXJlKTsKKyAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZSBvYmplY3QgPSBKU0Zp
bmFsT2JqZWN0OjpjcmVhdGUodm0sIG9iamVjdFN0cnVjdHVyZSk7CiAgICAgICAgICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KG9iamVj
dCwgZmFsc2UpOwogICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnB1dElubGluZShleGVj
LCBpZGVudEYsIGpzTnVtYmVyKGkpLCBzbG90KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qc2MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCShy
ZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTUxLDEyICs1NTEsMTIgQEAgcHJvdGVjdGVkOgogICAgICAgICBhZGRGdW5j
dGlvbih2bSwgImNsZWFyU2FtcGxpbmdGbGFncyIsIGZ1bmN0aW9uQ2xlYXJTYW1wbGluZ0ZsYWdz
LCAxKTsKICNlbmRpZgogCi0gICAgICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9uKHZtLCB0aGlz
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgIk9TUkV4aXQiKSwgMCwgZnVuY3Rpb25VbmRl
ZmluZWQxLCBPU1JFeGl0SW50cmluc2ljLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlB
dHRyaWJ1dGU6OkRvbnRFbnVtKSk7Ci0gICAgICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9uKHZt
LCB0aGlzLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImlzRmluYWxUaWVyIiksIDAsIGZ1
bmN0aW9uRmFsc2UsIElzRmluYWxUaWVySW50cmluc2ljLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7Ci0gICAgICAgIHB1dERpcmVjdE5hdGl2ZUZ1
bmN0aW9uKHZtLCB0aGlzLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgInByZWRpY3RJbnQz
MiIpLCAwLCBmdW5jdGlvblVuZGVmaW5lZDIsIFNldEludDMySGVhcFByZWRpY3Rpb25JbnRyaW5z
aWMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsK
LSAgICAgICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rpb24odm0sIHRoaXMsIElkZW50aWZpZXI6OmZy
b21TdHJpbmcoJnZtLCAiaXNJbnQzMiIpLCAwLCBmdW5jdGlvbklzSW50MzIsIENoZWNrSW50MzJJ
bnRyaW5zaWMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVu
dW0pKTsKLSAgICAgICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rpb24odm0sIHRoaXMsIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcoJnZtLCAiaXNQdXJlTmFOIiksIDAsIGZ1bmN0aW9uSXNQdXJlTmFOLCBD
aGVja0ludDMySW50cmluc2ljLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1
dGU6OkRvbnRFbnVtKSk7Ci0gICAgICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9uKHZtLCB0aGlz
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImZpYXRJbnQ1MiIpLCAwLCBmdW5jdGlvbklk
ZW50aXR5LCBGaWF0SW50NTJJbnRyaW5zaWMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0
eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKKyAgICAgICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rpb24o
dm0sIHRoaXMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJPU1JFeGl0IiksIDAsIGZ1bmN0
aW9uVW5kZWZpbmVkMSwgT1NSRXhpdEludHJpbnNpYywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFBy
b3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOworICAgICAgICBwdXREaXJlY3ROYXRpdmVGdW5j
dGlvbih2bSwgdGhpcywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImlzRmluYWxUaWVyIiks
IDAsIGZ1bmN0aW9uRmFsc2UsIElzRmluYWxUaWVySW50cmluc2ljLCBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7CisgICAgICAgIHB1dERpcmVjdE5h
dGl2ZUZ1bmN0aW9uKHZtLCB0aGlzLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAicHJlZGlj
dEludDMyIiksIDAsIGZ1bmN0aW9uVW5kZWZpbmVkMiwgU2V0SW50MzJIZWFwUHJlZGljdGlvbklu
dHJpbnNpYywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51
bSkpOworICAgICAgICBwdXREaXJlY3ROYXRpdmVGdW5jdGlvbih2bSwgdGhpcywgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZyh2bSwgImlzSW50MzIiKSwgMCwgZnVuY3Rpb25Jc0ludDMyLCBDaGVja0lu
dDMySW50cmluc2ljLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRv
bnRFbnVtKSk7CisgICAgICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9uKHZtLCB0aGlzLCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiaXNQdXJlTmFOIiksIDAsIGZ1bmN0aW9uSXNQdXJlTmFO
LCBDaGVja0ludDMySW50cmluc2ljLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRy
aWJ1dGU6OkRvbnRFbnVtKSk7CisgICAgICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9uKHZtLCB0
aGlzLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiZmlhdEludDUyIiksIDAsIGZ1bmN0aW9u
SWRlbnRpdHksIEZpYXRJbnQ1MkludHJpbnNpYywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3Bl
cnR5QXR0cmlidXRlOjpEb250RW51bSkpOwogICAgICAgICAKICAgICAgICAgYWRkRnVuY3Rpb24o
dm0sICJlZmZlY3RmdWw0MiIsIGZ1bmN0aW9uRWZmZWN0ZnVsNDIsIDApOwogICAgICAgICBhZGRG
dW5jdGlvbih2bSwgIm1ha2VNYXNxdWVyYWRlciIsIGZ1bmN0aW9uTWFrZU1hc3F1ZXJhZGVyLCAw
KTsKQEAgLTYwMCwyNiArNjAwLDI2IEBAIHByb3RlY3RlZDoKICAgICAgICAgaWYgKCFhcmd1bWVu
dHMuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBKU0FycmF5KiBhcnJheSA9IGNvbnN0cnVjdEVt
cHR5QXJyYXkoZ2xvYmFsRXhlYygpLCAwKTsKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgYXJndW1lbnRzLnNpemUoKTsgKytpKQotICAgICAgICAgICAgICAgIGFycmF5LT5wdXRE
aXJlY3RJbmRleChnbG9iYWxFeGVjKCksIGksIGpzU3RyaW5nKGdsb2JhbEV4ZWMoKSwgYXJndW1l
bnRzW2ldKSk7Ci0gICAgICAgICAgICBwdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJp
bmcoZ2xvYmFsRXhlYygpLCAiYXJndW1lbnRzIiksIGFycmF5KTsKKyAgICAgICAgICAgICAgICBh
cnJheS0+cHV0RGlyZWN0SW5kZXgoZ2xvYmFsRXhlYygpLCBpLCBqc1N0cmluZyh2bSwgYXJndW1l
bnRzW2ldKSk7CisgICAgICAgICAgICBwdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJp
bmcodm0sICJhcmd1bWVudHMiKSwgYXJyYXkpOwogICAgICAgICB9CiAKLSAgICAgICAgcHV0RGly
ZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGdsb2JhbEV4ZWMoKSwgImNvbnNvbGUiKSwg
anNVbmRlZmluZWQoKSk7CisgICAgICAgIHB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZyh2bSwgImNvbnNvbGUiKSwganNVbmRlZmluZWQoKSk7CiAgICAgICAgIAogICAgICAgICBT
dHJ1Y3R1cmUqIHBsYWluT2JqZWN0U3RydWN0dXJlID0gSlNGaW5hbE9iamVjdDo6Y3JlYXRlU3Ry
dWN0dXJlKHZtLCB0aGlzLCBvYmplY3RQcm90b3R5cGUoKSwgMCk7CiAgICAgICAgIAogICAgICAg
ICBKU09iamVjdCogZG9sbGFyID0gSlNGaW5hbE9iamVjdDo6Y3JlYXRlKHZtLCBwbGFpbk9iamVj
dFN0cnVjdHVyZSk7Ci0gICAgICAgIHB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
ZyhnbG9iYWxFeGVjKCksICIkIiksIGRvbGxhcik7Ci0gICAgICAgIHB1dERpcmVjdCh2bSwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZyhnbG9iYWxFeGVjKCksICIkMjYyIiksIGRvbGxhcik7CisgICAg
ICAgIHB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIiQiKSwgZG9sbGFy
KTsKKyAgICAgICAgcHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiJDI2
MiIpLCBkb2xsYXIpOwogICAgICAgICAKICAgICAgICAgYWRkRnVuY3Rpb24odm0sIGRvbGxhciwg
ImNyZWF0ZVJlYWxtIiwgZnVuY3Rpb25Eb2xsYXJDcmVhdGVSZWFsbSwgMCk7CiAgICAgICAgIGFk
ZEZ1bmN0aW9uKHZtLCBkb2xsYXIsICJkZXRhY2hBcnJheUJ1ZmZlciIsIGZ1bmN0aW9uRG9sbGFy
RGV0YWNoQXJyYXlCdWZmZXIsIDEpOwogICAgICAgICBhZGRGdW5jdGlvbih2bSwgZG9sbGFyLCAi
ZXZhbFNjcmlwdCIsIGZ1bmN0aW9uRG9sbGFyRXZhbFNjcmlwdCwgMSk7CiAgICAgICAgIAotICAg
ICAgICBkb2xsYXItPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhnbG9iYWxF
eGVjKCksICJnbG9iYWwiKSwgdGhpcyk7CisgICAgICAgIGRvbGxhci0+cHV0RGlyZWN0KHZtLCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiZ2xvYmFsIiksIHRoaXMpOwogICAgICAgICAKICAg
ICAgICAgSlNPYmplY3QqIGFnZW50ID0gSlNGaW5hbE9iamVjdDo6Y3JlYXRlKHZtLCBwbGFpbk9i
amVjdFN0cnVjdHVyZSk7Ci0gICAgICAgIGRvbGxhci0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKGdsb2JhbEV4ZWMoKSwgImFnZW50IiksIGFnZW50KTsKKyAgICAgICAgZG9s
bGFyLT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJhZ2VudCIpLCBh
Z2VudCk7CiAgICAgICAgIAogICAgICAgICAvLyBUaGUgdGVzdDI2MiBJTlRFUlBSRVRJTkcubWQg
ZG9jdW1lbnQgc2F5cyB0aGF0IHNvbWUgb2YgdGhlc2UgZnVuY3Rpb25zIGFyZSBqdXN0IGluIHRo
ZSBtYWluCiAgICAgICAgIC8vIHRocmVhZCBhbmQgc29tZSBhcmUgaW4gdGhlIG90aGVyIHRocmVh
ZHMuIFdlIGp1c3QgcHV0IHRoZW0gaW4gYWxsIHRocmVhZHMuCkBAIC02NDYsNyArNjQ2LDcgQEAg
cHJvdGVjdGVkOgogICAgIAogICAgIHZvaWQgYWRkRnVuY3Rpb24oVk0mIHZtLCBKU09iamVjdCog
b2JqZWN0LCBjb25zdCBjaGFyKiBuYW1lLCBOYXRpdmVGdW5jdGlvbiBmdW5jdGlvbiwgdW5zaWdu
ZWQgYXJndW1lbnRzKQogICAgIHsKLSAgICAgICAgSWRlbnRpZmllciBpZGVudGlmaWVyID0gSWRl
bnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIG5hbWUpOworICAgICAgICBJZGVudGlmaWVyIGlkZW50
aWZpZXIgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBuYW1lKTsKICAgICAgICAgb2JqZWN0
LT5wdXREaXJlY3Qodm0sIGlkZW50aWZpZXIsIEpTRnVuY3Rpb246OmNyZWF0ZSh2bSwgdGhpcywg
YXJndW1lbnRzLCBpZGVudGlmaWVyLnN0cmluZygpLCBmdW5jdGlvbikpOwogICAgIH0KIApAQCAt
ODQ0LDcgKzg0NCw3IEBAIEpTSW50ZXJuYWxQcm9taXNlKiBHbG9iYWxPYmplY3Q6Om1vZHVsZUwK
ICAgICBpZiAoIWRpcmVjdG9yeU5hbWUpCiAgICAgICAgIHJldHVybiByZWplY3QoY3JlYXRlRXJy
b3IoZXhlYywgbWFrZVN0cmluZygiQ291bGQgbm90IHJlc29sdmUgdGhlIHJlZmVycmVyIG5hbWUg
JyIsIFN0cmluZyhyZWZlcnJlci5pbXBsKCkpLCAiJy4iKSkpOwogCi0gICAgYXV0byByZXN1bHQg
PSBKU0M6OmltcG9ydE1vZHVsZShleGVjLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgcmVz
b2x2ZVBhdGgoZGlyZWN0b3J5TmFtZS52YWx1ZSgpLCBNb2R1bGVOYW1lKG1vZHVsZU5hbWUpKSks
IHBhcmFtZXRlcnMsIGpzVW5kZWZpbmVkKCkpOworICAgIGF1dG8gcmVzdWx0ID0gSlNDOjppbXBv
cnRNb2R1bGUoZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVzb2x2ZVBhdGgoZGly
ZWN0b3J5TmFtZS52YWx1ZSgpLCBNb2R1bGVOYW1lKG1vZHVsZU5hbWUpKSksIHBhcmFtZXRlcnMs
IGpzVW5kZWZpbmVkKCkpOwogICAgIGlmIChVTkxJS0VMWShjYXRjaFNjb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIHJlamVjdChjYXRjaFNjb3BlLmV4Y2VwdGlvbigpKTsKICAgICBy
ZXR1cm4gcmVzdWx0OwpAQCAtODY4LDcgKzg2OCw3IEBAIElkZW50aWZpZXIgR2xvYmFsT2JqZWN0
Ojptb2R1bGVMb2FkZXJSZXMKICAgICAgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHNjb3Bl
LCBjcmVhdGVFcnJvcihleGVjLCAiQ291bGQgbm90IHJlc29sdmUgdGhlIGN1cnJlbnQgd29ya2lu
ZyBkaXJlY3RvcnkuIl9zKSk7CiAgICAgICAgICAgICByZXR1cm4geyB9OwogICAgICAgICB9Ci0g
ICAgICAgIHJldHVybiBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgcmVzb2x2ZVBhdGgoZGly
ZWN0b3J5TmFtZS52YWx1ZSgpLCBNb2R1bGVOYW1lKGtleS5pbXBsKCkpKSk7CisgICAgICAgIHJl
dHVybiBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZXNvbHZlUGF0aChkaXJlY3RvcnlOYW1l
LnZhbHVlKCksIE1vZHVsZU5hbWUoa2V5LmltcGwoKSkpKTsKICAgICB9CiAKICAgICBjb25zdCBJ
ZGVudGlmaWVyIHJlZmVycmVyID0gcmVmZXJyZXJWYWx1ZS50b1Byb3BlcnR5S2V5KGV4ZWMpOwpA
QCAtODgwLDcgKzg4MCw3IEBAIElkZW50aWZpZXIgR2xvYmFsT2JqZWN0Ojptb2R1bGVMb2FkZXJS
ZXMKICAgICAgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHNjb3BlLCBjcmVhdGVFcnJvcihl
eGVjLCAiQ291bGQgbm90IHJlc29sdmUgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuIl9z
KSk7CiAgICAgICAgICAgICByZXR1cm4geyB9OwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgcmVzb2x2ZVBhdGgoZGlyZWN0b3J5TmFtZS52YWx1
ZSgpLCBNb2R1bGVOYW1lKGtleS5pbXBsKCkpKSk7CisgICAgICAgIHJldHVybiBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKHZtLCByZXNvbHZlUGF0aChkaXJlY3RvcnlOYW1lLnZhbHVlKCksIE1vZHVs
ZU5hbWUoa2V5LmltcGwoKSkpKTsKICAgICB9CiAKICAgICAvLyBJZiB0aGUgcmVmZXJyZXIgZXhp
c3RzLCB3ZSBhc3N1bWUgdGhhdCB0aGUgcmVmZXJyZXIgaXMgdGhlIGNvcnJlY3QgYWJzb2x1dGUg
cGF0aC4KQEAgLTg4OSw3ICs4ODksNyBAQCBJZGVudGlmaWVyIEdsb2JhbE9iamVjdDo6bW9kdWxl
TG9hZGVyUmVzCiAgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHNjb3BlLCBjcmVhdGVFcnJv
cihleGVjLCBtYWtlU3RyaW5nKCJDb3VsZCBub3QgcmVzb2x2ZSB0aGUgcmVmZXJyZXIgbmFtZSAn
IiwgU3RyaW5nKHJlZmVycmVyLmltcGwoKSksICInLiIpKSk7CiAgICAgICAgIHJldHVybiB7IH07
CiAgICAgfQotICAgIHJldHVybiBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgcmVzb2x2ZVBh
dGgoZGlyZWN0b3J5TmFtZS52YWx1ZSgpLCBNb2R1bGVOYW1lKGtleS5pbXBsKCkpKSk7CisgICAg
cmV0dXJuIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlc29sdmVQYXRoKGRpcmVjdG9yeU5h
bWUudmFsdWUoKSwgTW9kdWxlTmFtZShrZXkuaW1wbCgpKSkpOwogfQogCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBWZWN0b3I+CkBAIC05OTYsNyArOTk2LDcgQEAgcHVibGljOgogICAgICAgICBpZiAoIWNh
Y2hlRW5hYmxlZCgpIHx8ICFtX2NhY2hlZEJ5dGVjb2RlKQogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICBCeXRlY29kZUNhY2hlRXJyb3IgZXJyb3I7Ci0gICAgICAgIFJlZlB0cjxDYWNoZWRC
eXRlY29kZT4gY2FjaGVkQnl0ZWNvZGUgPSBlbmNvZGVGdW5jdGlvbkNvZGVCbG9jaygqZXhlY3V0
YWJsZS0+dm0oKSwgY29kZUJsb2NrLCBlcnJvcik7CisgICAgICAgIFJlZlB0cjxDYWNoZWRCeXRl
Y29kZT4gY2FjaGVkQnl0ZWNvZGUgPSBlbmNvZGVGdW5jdGlvbkNvZGVCbG9jayhleGVjdXRhYmxl
LT52bSgpLCBjb2RlQmxvY2ssIGVycm9yKTsKICAgICAgICAgaWYgKGNhY2hlZEJ5dGVjb2RlICYm
ICFlcnJvci5pc1ZhbGlkKCkpCiAgICAgICAgICAgICBtX2NhY2hlZEJ5dGVjb2RlLT5hZGRGdW5j
dGlvblVwZGF0ZShleGVjdXRhYmxlLCBraW5kLCAqY2FjaGVkQnl0ZWNvZGUpOwogICAgIH0KQEAg
LTEyMDgsNyArMTIwOCw3IEBAIEpTT2JqZWN0KiBHbG9iYWxPYmplY3Q6Om1vZHVsZUxvYWRlckNy
ZWEKICAgICBKU09iamVjdCogbWV0YVByb3BlcnRpZXMgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChl
eGVjLCBnbG9iYWxPYmplY3QtPm51bGxQcm90b3R5cGVPYmplY3RTdHJ1Y3R1cmUoKSk7CiAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAKLSAgICBtZXRhUHJvcGVydGll
cy0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImZpbGVuYW1lIiks
IGtleSk7CisgICAgbWV0YVByb3BlcnRpZXMtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyh2bSwgImZpbGVuYW1lIiksIGtleSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgbnVsbHB0cik7CiAKICAgICByZXR1cm4gbWV0YVByb3BlcnRpZXM7CkBAIC0xMjg0LDkg
KzEyODQsMTAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkRlYgogCiBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uRGVzY3JpYmUoRXhlY1N0YXRlKiBl
eGVjKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50
Q291bnQoKSA8IDEpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyhleGVjLCB0b1N0cmluZyhl
eGVjLT5hcmd1bWVudCgwKSkpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5n
KHZtLCB0b1N0cmluZyhleGVjLT5hcmd1bWVudCgwKSkpKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkRlc2NyaWJlQXJyYXkoRXhlY1N0YXRlKiBleGVjKQpAQCAt
MTI5Niw4ICsxMjk3LDggQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkRl
cwogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgSlNPYmplY3QqIG9iamVjdCA9IGpzRHlu
YW1pY0Nhc3Q8SlNPYmplY3QqPih2bSwgZXhlYy0+YXJndW1lbnQoMCkpOwogICAgIGlmICghb2Jq
ZWN0KQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTm9udHJpdmlhbFN0cmluZyhl
eGVjLCAiPG5vdCBvYmplY3Q+Il9zKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc05v
bnRyaXZpYWxTdHJpbmcoZXhlYywgdG9TdHJpbmcoIjxCdXR0ZXJmbHk6ICIsIFJhd1BvaW50ZXIo
b2JqZWN0LT5idXR0ZXJmbHkoKSksICI7IHB1YmxpYyBsZW5ndGg6ICIsIG9iamVjdC0+Z2V0QXJy
YXlMZW5ndGgoKSwgIjsgdmVjdG9yIGxlbmd0aDogIiwgb2JqZWN0LT5nZXRWZWN0b3JMZW5ndGgo
KSwgIj4iKSkpOworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTm9udHJpdmlhbFN0
cmluZyh2bSwgIjxub3Qgb2JqZWN0PiJfcykpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNOb250cml2aWFsU3RyaW5nKHZtLCB0b1N0cmluZygiPEJ1dHRlcmZseTogIiwgUmF3UG9pbnRl
cihvYmplY3QtPmJ1dHRlcmZseSgpKSwgIjsgcHVibGljIGxlbmd0aDogIiwgb2JqZWN0LT5nZXRB
cnJheUxlbmd0aCgpLCAiOyB2ZWN0b3IgbGVuZ3RoOiAiLCBvYmplY3QtPmdldFZlY3Rvckxlbmd0
aCgpLCAiPiIpKSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25T
bGVlcFNlY29uZHMoRXhlY1N0YXRlKiBleGVjKQpAQCAtMTQyMCw3ICsxNDIxLDcgQEAgcHVibGlj
OgogcHJpdmF0ZToKICAgICB2b2lkIGFkZFByb3BlcnR5KFZNJiB2bSwgY29uc3QgY2hhciogbmFt
ZSwgSlNWYWx1ZSB2YWx1ZSkKICAgICB7Ci0gICAgICAgIElkZW50aWZpZXIgaWRlbnRpZmllciA9
IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCBuYW1lKTsKKyAgICAgICAgSWRlbnRpZmllciBp
ZGVudGlmaWVyID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgbmFtZSk7CiAgICAgICAgIHB1
dERpcmVjdCh2bSwgaWRlbnRpZmllciwgdmFsdWUpOwogICAgIH0KIH07CkBAIC0xNDgwLDggKzE0
ODEsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUnVuCiAgICAgICAg
IGFycmF5LT5wdXREaXJlY3RJbmRleChnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwgaSAtIDEs
IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KGkpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgfQotICAgIGdsb2JhbE9iamVjdC0+cHV0
RGlyZWN0KAotICAgICAgICB2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhnbG9iYWxPYmplY3Qt
Pmdsb2JhbEV4ZWMoKSwgImFyZ3VtZW50cyIpLCBhcnJheSk7CisgICAgZ2xvYmFsT2JqZWN0LT5w
dXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJhcmd1bWVudHMiKSwgYXJy
YXkpOwogCiAgICAgTmFrZWRQdHI8RXhjZXB0aW9uPiBleGNlcHRpb247CiAgICAgU3RvcFdhdGNo
IHN0b3BXYXRjaDsKQEAgLTE1MTMsOCArMTUxMyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZnVuY3Rpb25SdW4KICAgICAgICAgYXJyYXktPnB1dERpcmVjdEluZGV4KGdsb2JhbE9i
amVjdC0+Z2xvYmFsRXhlYygpLCBpIC0gMSwgZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoaSkpOwog
ICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAg
ICB9Ci0gICAgZ2xvYmFsT2JqZWN0LT5wdXREaXJlY3QoCi0gICAgICAgIHZtLCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCAiYXJndW1lbnRzIiksIGFy
cmF5KTsKKyAgICBnbG9iYWxPYmplY3QtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZyh2bSwgImFyZ3VtZW50cyIpLCBhcnJheSk7CiAKICAgICBOYWtlZFB0cjxFeGNlcHRpb24+
IGV4Y2VwdGlvbjsKICAgICBldmFsdWF0ZShnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwganNj
U291cmNlKHNvdXJjZSwgZXhlYy0+Y2FsbGVyU291cmNlT3JpZ2luKCkpLCBKU1ZhbHVlKCksIGV4
Y2VwdGlvbik7CkBAIC0xNTg1LDcgKzE1ODQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGZ1bmN0aW9uUmVhCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgc2NvcGUs
ICJDb3VsZCBub3Qgb3BlbiBmaWxlLiIpOwogCiAgICAgaWYgKCFpc0JpbmFyeSkKLSAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyhleGVjLCBTdHJpbmc6OmZyb21VVEY4V2l0
aExhdGluMUZhbGxiYWNrKGNvbnRlbnQtPmRhdGEoKSwgY29udGVudC0+bGVuZ3RoKCkpKSk7Cisg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcodm0sIFN0cmluZzo6ZnJvbVVU
RjhXaXRoTGF0aW4xRmFsbGJhY2soY29udGVudC0+ZGF0YSgpLCBjb250ZW50LT5sZW5ndGgoKSkp
KTsKIAogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVj
dCgpLT50eXBlZEFycmF5U3RydWN0dXJlKFR5cGVVaW50OCk7CiAgICAgSlNPYmplY3QqIHJlc3Vs
dCA9IEpTVWludDhBcnJheTo6Y3JlYXRlKHZtLCBzdHJ1Y3R1cmUsIFdURk1vdmUoY29udGVudCkp
OwpAQCAtMTY3MSw3ICsxNjcwLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5j
dGlvbkNhbAogICAgIFNvdXJjZU9yaWdpbiBzb3VyY2VPcmlnaW4gPSBzdGF0ZS0+Y2FsbGVyU291
cmNlT3JpZ2luKCk7CiAgICAgaWYgKHNvdXJjZU9yaWdpbi5pc051bGwoKSkKICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc051bGwoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1N0cmluZyhzdGF0ZSwgc291cmNlT3JpZ2luLnN0cmluZygpKSk7CisgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1N0cmluZyhzdGF0ZS0+dm0oKSwgc291cmNlT3JpZ2luLnN0cmluZygp
KSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25SZWFkbGluZShF
eGVjU3RhdGUqIGV4ZWMpCkBAIC0xNjg1LDcgKzE2ODQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGZ1bmN0aW9uUmVhCiAgICAgICAgIGxpbmUuYXBwZW5kKGMpOwogICAgIH0KICAg
ICBsaW5lLmFwcGVuZCgnXDAnKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5n
KGV4ZWMsIGxpbmUuZGF0YSgpKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmlu
ZyhleGVjLT52bSgpLCBsaW5lLmRhdGEoKSkpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGZ1bmN0aW9uUHJlY2lzZVRpbWUoRXhlY1N0YXRlKikKQEAgLTE4NDMsNyArMTg0Miw3
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Eb2wKIHsKICAgICBWTSYg
dm0gPSBleGVjLT52bSgpOwogICAgIEdsb2JhbE9iamVjdCogcmVzdWx0ID0gR2xvYmFsT2JqZWN0
OjpjcmVhdGUodm0sIEdsb2JhbE9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKHZtLCBqc051bGwoKSks
IFZlY3RvcjxTdHJpbmc+KCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0LT5n
ZXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgIiQiKSkpOworICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0LT5nZXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZy
b21TdHJpbmcodm0sICIkIikpKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBm
dW5jdGlvbkRvbGxhckRldGFjaEFycmF5QnVmZmVyKEV4ZWNTdGF0ZSogZXhlYykKQEAgLTE4NjAs
NyArMTg1OSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Eb2wKICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICAKICAg
ICBHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGpzRHluYW1pY0Nhc3Q8R2xvYmFsT2JqZWN0
Kj4odm0sCi0gICAgICAgIGV4ZWMtPnRoaXNWYWx1ZSgpLmdldChleGVjLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKGV4ZWMsICJnbG9iYWwiKSkpOworICAgICAgICBleGVjLT50aGlzVmFsdWUoKS5n
ZXQoZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImdsb2JhbCIpKSk7CiAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgaWYgKCFnbG9i
YWxPYmplY3QpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24o
ZXhlYywgc2NvcGUsIGNyZWF0ZUVycm9yKGV4ZWMsICJFeHBlY3RlZCBnbG9iYWwgdG8gcG9pbnQg
dG8gYSBnbG9iYWwgb2JqZWN0Il9zKSkpOwpAQCAtMjAwNiw3ICsyMDA1LDcgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkRvbAogICAgIGlmICghc3RyaW5nKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKTsKICAgICAKLSAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKCZ2bSwgc3RyaW5nKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1N0cmluZyh2bSwgc3RyaW5nKSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZnVuY3Rpb25Eb2xsYXJBZ2VudExlYXZpbmcoRXhlY1N0YXRlKikKQEAgLTIwMzEs
NyArMjAzMCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25XYWkKICAg
ICBpZiAoIXN0cmluZykKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bGwoKSk7
CiAgICAgCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZygmdm0sIHN0cmluZykp
OworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcodm0sIHN0cmluZykpOwogfQog
CiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uSGVhcENhcGFjaXR5KEV4ZWNT
dGF0ZSogZXhlYykKQEAgLTIwOTcsNyArMjA5Niw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZnVuY3Rpb25KU0MKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIEpTT2JqZWN0
KiBvcHRpb25zT2JqZWN0ID0gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYyk7CiAjZGVmaW5lIEZP
Ul9FQUNIX09QVElPTih0eXBlXywgbmFtZV8sIGRlZmF1bHRWYWx1ZV8sIGF2YWlsYWJpbGl0eV8s
IGRlc2NyaXB0aW9uXykgXAotICAgIGFkZE9wdGlvbih2bSwgb3B0aW9uc09iamVjdCwgSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZyhleGVjLCAjbmFtZV8pLCBPcHRpb25zOjpuYW1lXygpKTsKKyAgICBh
ZGRPcHRpb24odm0sIG9wdGlvbnNPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICNu
YW1lXyksIE9wdGlvbnM6Om5hbWVfKCkpOwogICAgIEpTQ19PUFRJT05TKEZPUl9FQUNIX09QVElP
TikKICN1bmRlZiBGT1JfRUFDSF9PUFRJT04KICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKG9w
dGlvbnNPYmplY3QpOwpAQCAtMjI1NSw3ICsyMjU0LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBmdW5jdGlvbkNoZQogICAgIHN0b3BXYXRjaC5zdG9wKCk7CiAKICAgICBpZiAoIXZh
bGlkU3ludGF4KQotICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29wZSwganNOb250cml2
aWFsU3RyaW5nKGV4ZWMsIHRvU3RyaW5nKCJTeW50YXhFcnJvcjogIiwgZXJyb3IubWVzc2FnZSgp
LCAiOiIsIGVycm9yLmxpbmUoKSkpKTsKKyAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgc2Nv
cGUsIGpzTm9udHJpdmlhbFN0cmluZyh2bSwgdG9TdHJpbmcoIlN5bnRheEVycm9yOiAiLCBlcnJv
ci5tZXNzYWdlKCksICI6IiwgZXJyb3IubGluZSgpKSkpOwogICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNOdW1iZXIoc3RvcFdhdGNoLmdldEVsYXBzZWRNUygpKSk7CiB9CiAKQEAgLTIyOTgs
NyArMjI5Nyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25HZW4KICAg
ICAgICAganNvblN0cmluZyA9IHNuYXBzaG90QnVpbGRlci5qc29uKCk7CiAgICAgfQogICAgIHNj
b3BlLnJlbGVhc2VBc3NlcnROb0V4Y2VwdGlvbigpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNTdHJpbmcoJnZtLCBqc29uU3RyaW5nKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1N0cmluZyh2bSwganNvblN0cmluZykpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGZ1bmN0aW9uUmVzZXRTdXBlclNhbXBsZXJTdGF0ZShFeGVjU3RhdGUqKQpAQCAtMjM3
OCw5ICsyMzc3LDkgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuYwog
CiAgICAgaWYgKEpTT2JqZWN0KiBvYmplY3QgPSBleGVjLT5hcmd1bWVudCgwKS5nZXRPYmplY3Qo
KSkgewogICAgICAgICBpZiAoYXV0byogbWVtb3J5ID0ganNEeW5hbWljQ2FzdDxKU1dlYkFzc2Vt
Ymx5TWVtb3J5Kj4odm0sIG9iamVjdCkpCi0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzU3RyaW5nKCZ2bSwgbWFrZVN0cmluZyhtZW1vcnktPm1lbW9yeSgpLm1vZGUoKSkpKTsK
KyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcodm0sIG1ha2VTdHJp
bmcobWVtb3J5LT5tZW1vcnkoKS5tb2RlKCkpKSk7CiAgICAgICAgIGlmIChhdXRvKiBpbnN0YW5j
ZSA9IGpzRHluYW1pY0Nhc3Q8SlNXZWJBc3NlbWJseUluc3RhbmNlKj4odm0sIG9iamVjdCkpCi0g
ICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKCZ2bSwgbWFrZVN0cmlu
ZyhpbnN0YW5jZS0+bWVtb3J5TW9kZSgpKSkpOworICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1N0cmluZyh2bSwgbWFrZVN0cmluZyhpbnN0YW5jZS0+bWVtb3J5TW9kZSgpKSkp
OwogICAgIH0KIAogICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlLCAiV2Vi
QXNzZW1ibHlNZW1vcnlNb2RlIGV4cGVjdHMgZWl0aGVyIGEgV2ViQXNzZW1ibHkuTWVtb3J5IG9y
IFdlYkFzc2VtYmx5Lkluc3RhbmNlIl9zKTsKQEAgLTI1MTEsMTMgKzI1MTAsMTMgQEAgc3RhdGlj
IHZvaWQgZHVtcEV4Y2VwdGlvbihHbG9iYWxPYmplY3QqIAogICAgIGVsc2UKICAgICAgICAgcHJp
bnRmKCJFeGNlcHRpb246IDxvdXQgb2YgbWVtb3J5IHdoaWxlIGV4dHJhY3RpbmcgZXhjZXB0aW9u
IHN0cmluZz5cbiIpOwogCi0gICAgSWRlbnRpZmllciBuYW1lSUQgPSBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCAibmFtZSIpOworICAgIElkZW50aWZp
ZXIgbmFtZUlEID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIm5hbWUiKTsKICAgICBDSEVD
S19FWENFUFRJT04oKTsKLSAgICBJZGVudGlmaWVyIGZpbGVOYW1lSUQgPSBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCAic291cmNlVVJMIik7CisgICAg
SWRlbnRpZmllciBmaWxlTmFtZUlEID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInNvdXJj
ZVVSTCIpOwogICAgIENIRUNLX0VYQ0VQVElPTigpOwotICAgIElkZW50aWZpZXIgbGluZU51bWJl
cklEID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwg
ImxpbmUiKTsKKyAgICBJZGVudGlmaWVyIGxpbmVOdW1iZXJJRCA9IElkZW50aWZpZXI6OmZyb21T
dHJpbmcodm0sICJsaW5lIik7CiAgICAgQ0hFQ0tfRVhDRVBUSU9OKCk7Ci0gICAgSWRlbnRpZmll
ciBzdGFja0lEID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhnbG9iYWxPYmplY3QtPmdsb2JhbEV4
ZWMoKSwgInN0YWNrIik7CisgICAgSWRlbnRpZmllciBzdGFja0lEID0gSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyh2bSwgInN0YWNrIik7CiAgICAgQ0hFQ0tfRVhDRVBUSU9OKCk7CiAKICAgICBKU1Zh
bHVlIG5hbWVWYWx1ZSA9IGV4Y2VwdGlvbi5nZXQoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCks
IG5hbWVJRCk7CkBAIC0yNTU3LDcgKzI1NTYsNyBAQCBzdGF0aWMgYm9vbCBjaGVja1VuY2F1Z2h0
RXhjZXB0aW9uKFZNJiB2CiAgICAgfQogCiAgICAgRXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2Jq
ZWN0LT5nbG9iYWxFeGVjKCk7Ci0gICAgSlNWYWx1ZSBleGNlcHRpb25DbGFzcyA9IGdsb2JhbE9i
amVjdC0+Z2V0KGV4ZWMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgZXhwZWN0ZWRFeGNl
cHRpb25OYW1lKSk7CisgICAgSlNWYWx1ZSBleGNlcHRpb25DbGFzcyA9IGdsb2JhbE9iamVjdC0+
Z2V0KGV4ZWMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIGV4cGVjdGVkRXhjZXB0aW9uTmFt
ZSkpOwogICAgIGlmICghZXhjZXB0aW9uQ2xhc3MuaXNPYmplY3QoKSB8fCBzY29wZS5leGNlcHRp
b24oKSkgewogICAgICAgICBwcmludGYoIkV4cGVjdGVkIHVuY2F1Z2h0IGV4Y2VwdGlvbiB3aXRo
IG5hbWUgJyVzJyBidXQgZ2l2ZW4gZXhjZXB0aW9uIGNsYXNzIGlzIG5vdCBkZWZpbmVkXG4iLCBl
eHBlY3RlZEV4Y2VwdGlvbk5hbWUudXRmOCgpLmRhdGEoKSk7CiAgICAgICAgIHJldHVybiBmYWxz
ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvQVBJQ2FzdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvQVBJQ2FzdC5oCShyZXZpc2lvbiAyNDkxMjgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0FQSUNhc3QuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDE5IEFwcGxlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTExNCw3ICsxMTQsNyBAQCBpbmxpbmUgSlNDOjpKU09iamVjdCogdG9KUyhKU09iamVjdFJlZiBv
CiB7CiAgICAgSlNDOjpKU09iamVjdCogb2JqZWN0ID0gdW5jaGVja2VkVG9KUyhvKTsKICAgICBp
ZiAob2JqZWN0KQotICAgICAgICBSRUxFQVNFX0FTU0VSVChvYmplY3QtPm1ldGhvZFRhYmxlKCpv
YmplY3QtPnZtKCkpKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQob2JqZWN0LT5tZXRob2RUYWJs
ZShvYmplY3QtPnZtKCkpKTsKICAgICByZXR1cm4gb2JqZWN0OwogfQogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJR2xvYmFsT2JqZWN0Lm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElHbG9iYWxPYmplY3QubW0JKHJldmlzaW9uIDI0
OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElHbG9iYWxPYmplY3QubW0J
KHdvcmtpbmcgY29weSkKQEAgLTExNiw3ICsxMTYsNyBAQCBJZGVudGlmaWVyIEpTQVBJR2xvYmFs
T2JqZWN0Ojptb2R1bGVMb2FkCiAKICAgICBhdXRvIHJlc3VsdCA9IGNvbXB1dGVWYWxpZEltcG9y
dFNwZWNpZmllcihiYXNlLCBuYW1lKTsKICAgICBpZiAocmVzdWx0KQotICAgICAgICByZXR1cm4g
SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIHJlc3VsdC52YWx1ZSgpKTsKKyAgICAgICAgcmV0
dXJuIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlc3VsdC52YWx1ZSgpKTsKIAogICAgIHRo
cm93Vk1FcnJvcihleGVjLCBzY29wZSwgY3JlYXRlRXJyb3IoZXhlYywgcmVzdWx0LmVycm9yKCkp
KTsKICAgICByZXR1cm4geyB9OwpAQCAtMTM0LDcgKzEzNCw3IEBAIEpTSW50ZXJuYWxQcm9taXNl
KiBKU0FQSUdsb2JhbE9iamVjdDo6bW8KICAgICB9OwogCiAgICAgYXV0byBpbXBvcnQgPSBbJl0g
KFVSTCYgdXJsKSB7Ci0gICAgICAgIGF1dG8gcmVzdWx0ID0gaW1wb3J0TW9kdWxlKGV4ZWMsIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCB1cmwpLCBqc1VuZGVmaW5lZCgpLCBqc1VuZGVmaW5l
ZCgpKTsKKyAgICAgICAgYXV0byByZXN1bHQgPSBpbXBvcnRNb2R1bGUoZXhlYywgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZyh2bSwgdXJsKSwganNVbmRlZmluZWQoKSwganNVbmRlZmluZWQoKSk7CiAg
ICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1
cm4gcmVqZWN0KHNjb3BlLmV4Y2VwdGlvbigpKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKQEAg
LTIwMiw3ICsyMDIsNyBAQCBKU0ludGVybmFsUHJvbWlzZSogSlNBUElHbG9iYWxPYmplY3Q6Om1v
CiAKICAgICAgICAgTlNVUkwgKnNvdXJjZVVSTCA9IFtqc1NjcmlwdCBzb3VyY2VVUkxdOwogICAg
ICAgICBTdHJpbmcgb2xkTW9kdWxlS2V5IHsgW3NvdXJjZVVSTCBhYnNvbHV0ZVN0cmluZ10gfTsK
LSAgICAgICAgaWYgKFVOTElLRUxZKElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCBvbGRNb2R1
bGVLZXkpICE9IG1vZHVsZUtleSkpCisgICAgICAgIGlmIChVTkxJS0VMWShJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCBvbGRNb2R1bGVLZXkpICE9IG1vZHVsZUtleSkpCiAgICAgICAgICAgICBy
ZXR1cm4gcmVqZWN0UHJvbWlzZShtYWtlU3RyaW5nKCJUaGUgc2FtZSBKU1NjcmlwdCB3YXMgcHJv
dmlkZWQgZm9yIHR3byBkaWZmZXJlbnQgaWRlbnRpZmllcnMsIHByZXZpb3VzbHk6ICIsIG9sZE1v
ZHVsZUtleSwgIiBhbmQgbm93OiAiLCBtb2R1bGVLZXkuc3RyaW5nKCkpKTsKIAogICAgICAgICBh
cmdzLmFwcGVuZChzb3VyY2UpOwpAQCAtMjM0LDcgKzIzNCw3IEBAIEpTT2JqZWN0KiBKU0FQSUds
b2JhbE9iamVjdDo6bW9kdWxlTG9hZGUKICAgICBKU09iamVjdCogbWV0YVByb3BlcnRpZXMgPSBj
b25zdHJ1Y3RFbXB0eU9iamVjdChleGVjLCBnbG9iYWxPYmplY3QtPm51bGxQcm90b3R5cGVPYmpl
Y3RTdHJ1Y3R1cmUoKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7
CiAKLSAgICBtZXRhUHJvcGVydGllcy0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKCZ2bSwgImZpbGVuYW1lIiksIGtleSk7CisgICAgbWV0YVByb3BlcnRpZXMtPnB1dERpcmVj
dCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImZpbGVuYW1lIiksIGtleSk7CiAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAKICAgICByZXR1cm4gbWV0YVBy
b3BlcnRpZXM7CkBAIC0yNzQsNyArMjc0LDcgQEAgSlNWYWx1ZSBKU0FQSUdsb2JhbE9iamVjdDo6
bG9hZEFuZEV2YWx1YQogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbEV4ZWMoKTsKICAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAgICBJZGVudGlmaWVyIGtl
eSA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgU3RyaW5nIHsgW1tzY3JpcHQgc291cmNl
VVJMXSBhYnNvbHV0ZVN0cmluZ10gfSk7CisgICAgSWRlbnRpZmllciBrZXkgPSBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKHZtLCBTdHJpbmcgeyBbW3NjcmlwdCBzb3VyY2VVUkxdIGFic29sdXRlU3Ry
aW5nXSB9KTsKICAgICBKU0ludGVybmFsUHJvbWlzZSogcHJvbWlzZSA9IGltcG9ydE1vZHVsZShl
eGVjLCBrZXksIGpzVW5kZWZpbmVkKCksIGpzVW5kZWZpbmVkKCkpOwogICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgYXV0byByZXN1bHQgPSBKU1Byb21pc2VEZWZlcnJl
ZDo6dHJ5Q3JlYXRlKGV4ZWMsIHRoaXMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9KU0NhbGxiYWNrQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNDYWxsYmFja0NvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjQ5MTI4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrQ29uc3RydWN0b3IuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwg
MjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDYtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ4LDcgKzQ4LDcgQEAgSlNDYWxsYmFja0NvbnN0cnVj
dG9yOjpKU0NhbGxiYWNrQ29uc3RydQogdm9pZCBKU0NhbGxiYWNrQ29uc3RydWN0b3I6OmZpbmlz
aENyZWF0aW9uKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQ2xhc3NSZWYganNDbGFz
cykKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxPYmplY3QtPnZtKCkpOwotICAg
IEFTU0VSVChpbmhlcml0cygqdm0oKSwgaW5mbygpKSk7CisgICAgQVNTRVJUKGluaGVyaXRzKHZt
KCksIGluZm8oKSkpOwogICAgIGlmIChtX2NsYXNzKQogICAgICAgICBKU0NsYXNzUmV0YWluKGpz
Q2xhc3MpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2Jq
ZWN0RnVuY3Rpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9K
U0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmgJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdEZ1bmN0aW9ucy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwOCwgMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYt
MjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDcgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTQz
LDcgKzQzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiB0ZW1wbGF0ZSA8Y2xhc3MgUGFyZW50PgogaW5s
aW5lIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50PiogSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+Ojph
c0NhbGxiYWNrT2JqZWN0KEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgQVNTRVJUKGFzT2JqZWN0KHZh
bHVlKS0+aW5oZXJpdHMoKnZhbHVlLmdldE9iamVjdCgpLT52bSgpLCBpbmZvKCkpKTsKKyAgICBB
U1NFUlQoYXNPYmplY3QodmFsdWUpLT5pbmhlcml0cyh2YWx1ZS5nZXRPYmplY3QoKS0+dm0oKSwg
aW5mbygpKSk7CiAgICAgcmV0dXJuIGpzQ2FzdDxKU0NhbGxiYWNrT2JqZWN0Kj4oYXNPYmplY3Qo
dmFsdWUpKTsKIH0KIApAQCAtNTEsNyArNTEsNyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgUGFyZW50Pgog
aW5saW5lIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50PiogSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+
Ojphc0NhbGxiYWNrT2JqZWN0KEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICBK
U1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Ci0gICAgQVNTRVJU
KGFzT2JqZWN0KHZhbHVlKS0+aW5oZXJpdHMoKnZhbHVlLmdldE9iamVjdCgpLT52bSgpLCBpbmZv
KCkpKTsKKyAgICBBU1NFUlQoYXNPYmplY3QodmFsdWUpLT5pbmhlcml0cyh2YWx1ZS5nZXRPYmpl
Y3QoKS0+dm0oKSwgaW5mbygpKSk7CiAgICAgcmV0dXJuIGpzQ2FzdDxKU0NhbGxiYWNrT2JqZWN0
Kj4oYXNPYmplY3QodmFsdWUpKTsKIH0KIApAQCAtNzQsMTcgKzc0LDE3IEBAIEpTQ2FsbGJhY2tP
YmplY3Q8UGFyZW50Pjo6SlNDYWxsYmFja09iamUKIHRlbXBsYXRlIDxjbGFzcyBQYXJlbnQ+CiBK
U0NhbGxiYWNrT2JqZWN0PFBhcmVudD46On5KU0NhbGxiYWNrT2JqZWN0KCkKIHsKLSAgICBWTSog
dm0gPSB0aGlzLT5IZWFwQ2VsbDo6dm0oKTsKLSAgICB2bS0+Y3VycmVudGx5RGVzdHJ1Y3RpbmdD
YWxsYmFja09iamVjdCA9IHRoaXM7CisgICAgVk0mIHZtID0gdGhpcy0+SGVhcENlbGw6OnZtKCk7
CisgICAgdm0uY3VycmVudGx5RGVzdHJ1Y3RpbmdDYWxsYmFja09iamVjdCA9IHRoaXM7CiAgICAg
QVNTRVJUKG1fY2xhc3NJbmZvKTsKLSAgICB2bS0+Y3VycmVudGx5RGVzdHJ1Y3RpbmdDYWxsYmFj
a09iamVjdENsYXNzSW5mbyA9IG1fY2xhc3NJbmZvOworICAgIHZtLmN1cnJlbnRseURlc3RydWN0
aW5nQ2FsbGJhY2tPYmplY3RDbGFzc0luZm8gPSBtX2NsYXNzSW5mbzsKICAgICBKU09iamVjdFJl
ZiB0aGlzUmVmID0gdG9SZWYoc3RhdGljX2Nhc3Q8SlNPYmplY3QqPih0aGlzKSk7CiAgICAgZm9y
IChKU0NsYXNzUmVmIGpzQ2xhc3MgPSBjbGFzc1JlZigpOyBqc0NsYXNzOyBqc0NsYXNzID0ganND
bGFzcy0+cGFyZW50Q2xhc3MpIHsKICAgICAgICAgaWYgKEpTT2JqZWN0RmluYWxpemVDYWxsYmFj
ayBmaW5hbGl6ZSA9IGpzQ2xhc3MtPmZpbmFsaXplKQogICAgICAgICAgICAgZmluYWxpemUodGhp
c1JlZik7CiAgICAgfQotICAgIHZtLT5jdXJyZW50bHlEZXN0cnVjdGluZ0NhbGxiYWNrT2JqZWN0
ID0gbnVsbHB0cjsKLSAgICB2bS0+Y3VycmVudGx5RGVzdHJ1Y3RpbmdDYWxsYmFja09iamVjdENs
YXNzSW5mbyA9IG51bGxwdHI7CisgICAgdm0uY3VycmVudGx5RGVzdHJ1Y3RpbmdDYWxsYmFja09i
amVjdCA9IG51bGxwdHI7CisgICAgdm0uY3VycmVudGx5RGVzdHJ1Y3RpbmdDYWxsYmFja09iamVj
dENsYXNzSW5mbyA9IG51bGxwdHI7CiB9CiAgICAgCiB0ZW1wbGF0ZSA8Y2xhc3MgUGFyZW50PgpA
QCAtMjE1LDcgKzIxNSw4IEBAIGJvb2wgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+OjpnZXRPd25Q
cm8KIHRlbXBsYXRlIDxjbGFzcyBQYXJlbnQ+CiBib29sIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50
Pjo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUq
IGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQogewotICAg
IHJldHVybiBvYmplY3QtPm1ldGhvZFRhYmxlKGV4ZWMtPnZtKCkpLT5nZXRPd25Qcm9wZXJ0eVNs
b3Qob2JqZWN0LCBleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIHByb3BlcnR5TmFtZSksIHNs
b3QpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgcmV0dXJuIG9iamVjdC0+bWV0aG9k
VGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0eVNsb3Qob2JqZWN0LCBleGVjLCBJZGVudGlmaWVyOjpm
cm9tKHZtLCBwcm9wZXJ0eU5hbWUpLCBzbG90KTsKIH0KIAogdGVtcGxhdGUgPGNsYXNzIFBhcmVu
dD4KQEAgLTMyMCw3ICszMjEsNyBAQCBib29sIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6cHV0
QnlJbmRlCiAgICAgSlNPYmplY3RSZWYgdGhpc1JlZiA9IHRvUmVmKHRoaXNPYmplY3QpOwogICAg
IFJlZlB0cjxPcGFxdWVKU1N0cmluZz4gcHJvcGVydHlOYW1lUmVmOwogICAgIEpTVmFsdWVSZWYg
dmFsdWVSZWYgPSB0b1JlZihleGVjLCB2YWx1ZSk7Ci0gICAgSWRlbnRpZmllciBwcm9wZXJ0eU5h
bWUgPSBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIHByb3BlcnR5SW5kZXgpOworICAgIElkZW50aWZp
ZXIgcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbSh2bSwgcHJvcGVydHlJbmRleCk7CiAK
ICAgICBmb3IgKEpTQ2xhc3NSZWYganNDbGFzcyA9IHRoaXNPYmplY3QtPmNsYXNzUmVmKCk7IGpz
Q2xhc3M7IGpzQ2xhc3MgPSBqc0NsYXNzLT5wYXJlbnRDbGFzcykgewogICAgICAgICBpZiAoSlNP
YmplY3RTZXRQcm9wZXJ0eUNhbGxiYWNrIHNldFByb3BlcnR5ID0ganNDbGFzcy0+c2V0UHJvcGVy
dHkpIHsKQEAgLTQyMSw4ICs0MjIsOSBAQCBib29sIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6
ZGVsZXRlUHJvCiB0ZW1wbGF0ZSA8Y2xhc3MgUGFyZW50PgogYm9vbCBKU0NhbGxiYWNrT2JqZWN0
PFBhcmVudD46OmRlbGV0ZVByb3BlcnR5QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSog
ZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CiAgICAgSlNDYWxsYmFja09iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0NhbGxiYWNrT2Jq
ZWN0Kj4oY2VsbCk7Ci0gICAgcmV0dXJuIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKGV4ZWMtPnZt
KCkpLT5kZWxldGVQcm9wZXJ0eSh0aGlzT2JqZWN0LCBleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4
ZWMsIHByb3BlcnR5TmFtZSkpOworICAgIHJldHVybiB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSh2
bSktPmRlbGV0ZVByb3BlcnR5KHRoaXNPYmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20odm0s
IHByb3BlcnR5TmFtZSkpOwogfQogCiB0ZW1wbGF0ZSA8Y2xhc3MgUGFyZW50PgpAQCAtNTQ3LDYg
KzU0OSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50PjoKIHRlbXBs
YXRlIDxjbGFzcyBQYXJlbnQ+CiB2b2lkIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6Z2V0T3du
Tm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywg
UHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQog
eworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgSlNDYWxsYmFja09iamVjdCogdGhpc09i
amVjdCA9IGpzQ2FzdDxKU0NhbGxiYWNrT2JqZWN0Kj4ob2JqZWN0KTsKICAgICBKU0NvbnRleHRS
ZWYgZXhlY1JlZiA9IHRvUmVmKGV4ZWMpOwogICAgIEpTT2JqZWN0UmVmIHRoaXNSZWYgPSB0b1Jl
Zih0aGlzT2JqZWN0KTsKQEAgLTU2NSw3ICs1NjgsNyBAQCB2b2lkIEpTQ2FsbGJhY2tPYmplY3Q8
UGFyZW50Pjo6Z2V0T3duTm9uCiAgICAgICAgICAgICAgICAgU3RhdGljVmFsdWVFbnRyeSogZW50
cnkgPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgICAgICAgICAgaWYgKGVudHJ5LT5nZXRQcm9w
ZXJ0eSAmJiAoIShlbnRyeS0+YXR0cmlidXRlcyAmIGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udEVu
dW0pIHx8IG1vZGUuaW5jbHVkZURvbnRFbnVtUHJvcGVydGllcygpKSkgewogICAgICAgICAgICAg
ICAgICAgICBBU1NFUlQoIW5hbWUtPmlzU3ltYm9sKCkpOwotICAgICAgICAgICAgICAgICAgICBw
cm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsIFN0cmluZyhuYW1l
KSkpOworICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCBTdHJpbmcobmFtZSkpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KQEAgLTU3OCw3ICs1ODEsNyBAQCB2b2lkIEpTQ2FsbGJhY2tPYmpl
Y3Q8UGFyZW50Pjo6Z2V0T3duTm9uCiAgICAgICAgICAgICAgICAgU3RhdGljRnVuY3Rpb25FbnRy
eSogZW50cnkgPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgICAgICAgICAgaWYgKCEoZW50cnkt
PmF0dHJpYnV0ZXMgJiBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnRFbnVtKSB8fCBtb2RlLmluY2x1
ZGVEb250RW51bVByb3BlcnRpZXMoKSkgewogICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIW5h
bWUtPmlzU3ltYm9sKCkpOwotICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsIFN0cmluZyhuYW1lKSkpOworICAgICAgICAgICAg
ICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBTdHJp
bmcobmFtZSkpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0Lm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0Lm1tCShyZXZpc2lvbiAyNDkx
MjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dC5tbQkod29ya2luZyBj
b3B5KQpAQCAtMTU4LDcgKzE1OCw3IEBAIC0gKEpTVmFsdWUgKilkZXBlbmRlbmN5SWRlbnRpZmll
cnNGb3JNb2QKICAgICB9CiAKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2
bSk7Ci0gICAgSlNDOjpKU0FycmF5KiByZXN1bHQgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCktPm1vZHVsZUxvYWRlcigpLT5kZXBlbmRlbmN5S2V5c0lmRXZhbHVhdGVkKGV4ZWMsIEpTQzo6
anNTdHJpbmcoJnZtLCBbW3NjcmlwdCBzb3VyY2VVUkxdIGFic29sdXRlU3RyaW5nXSkpOworICAg
IEpTQzo6SlNBcnJheSogcmVzdWx0ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5tb2R1
bGVMb2FkZXIoKS0+ZGVwZW5kZW5jeUtleXNJZkV2YWx1YXRlZChleGVjLCBKU0M6OmpzU3RyaW5n
KHZtLCBbW3NjcmlwdCBzb3VyY2VVUkxdIGFic29sdXRlU3RyaW5nXSkpOwogICAgIGlmIChzY29w
ZS5leGNlcHRpb24oKSkgewogICAgICAgICBKU1ZhbHVlUmVmIGV4Y2VwdGlvblZhbHVlID0gdG9S
ZWYoZXhlYywgc2NvcGUuZXhjZXB0aW9uKCktPnZhbHVlKCkpOwogICAgICAgICBzY29wZS5jbGVh
ckV4Y2VwdGlvbigpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU09iamVjdFJl
Zi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU09iamVjdFJl
Zi5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNP
YmplY3RSZWYuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDcsMTIgKzE0NywxMiBAQCBKU09iamVj
dFJlZiBKU09iamVjdE1ha2VGdW5jdGlvbihKU0NvbnRlCiAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfQ0FUQ0hfU0NPUEUodm0pOwogCiAgICAgc3RhcnRpbmdMaW5lTnVtYmVyID0gc3RkOjptYXgo
MSwgc3RhcnRpbmdMaW5lTnVtYmVyKTsKLSAgICBJZGVudGlmaWVyIG5hbWVJRCA9IG5hbWUgPyBu
YW1lLT5pZGVudGlmaWVyKCZ2bSkgOiBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJhbm9u
eW1vdXMiKTsKKyAgICBJZGVudGlmaWVyIG5hbWVJRCA9IG5hbWUgPyBuYW1lLT5pZGVudGlmaWVy
KCZ2bSkgOiBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiYW5vbnltb3VzIik7CiAgICAgCiAg
ICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJnczsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgcGFyYW1ldGVyQ291bnQ7IGkrKykKLSAgICAgICAgYXJncy5hcHBlbmQoanNTdHJpbmcoZXhl
YywgcGFyYW1ldGVyTmFtZXNbaV0tPnN0cmluZygpKSk7Ci0gICAgYXJncy5hcHBlbmQoanNTdHJp
bmcoZXhlYywgYm9keS0+c3RyaW5nKCkpKTsKKyAgICAgICAgYXJncy5hcHBlbmQoanNTdHJpbmco
dm0sIHBhcmFtZXRlck5hbWVzW2ldLT5zdHJpbmcoKSkpOworICAgIGFyZ3MuYXBwZW5kKGpzU3Ry
aW5nKHZtLCBib2R5LT5zdHJpbmcoKSkpOwogICAgIGlmIChVTkxJS0VMWShhcmdzLmhhc092ZXJm
bG93ZWQoKSkpIHsKICAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CiAgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjLCB0aHJvd1Njb3BlKTsK
QEAgLTU0Niw3ICs1NDYsNyBAQCBib29sIEpTT2JqZWN0RGVsZXRlUHJvcGVydHkoSlNDb250ZXh0
UmVmCiAvLyBkdXJpbmcgZGVzdHJ1Y3Rpb24uCiBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvKiBjbGFz
c0luZm9Qcml2YXRlKEpTT2JqZWN0KiBqc09iamVjdCkKIHsKLSAgICBWTSYgdm0gPSAqanNPYmpl
Y3QtPnZtKCk7CisgICAgVk0mIHZtID0ganNPYmplY3QtPnZtKCk7CiAgICAgCiAgICAgaWYgKHZt
LmN1cnJlbnRseURlc3RydWN0aW5nQ2FsbGJhY2tPYmplY3QgIT0ganNPYmplY3QpCiAgICAgICAg
IHJldHVybiBqc09iamVjdC0+Y2xhc3NJbmZvKHZtKTsKQEAgLTU1Nyw3ICs1NTcsNyBAQCBzdGF0
aWMgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm9Qcml2YXRlCiB2b2lkKiBKU09iamVjdEdldFBy
aXZhdGUoSlNPYmplY3RSZWYgb2JqZWN0KQogewogICAgIEpTT2JqZWN0KiBqc09iamVjdCA9IHVu
Y2hlY2tlZFRvSlMob2JqZWN0KTsKLSAgICBWTSYgdm0gPSAqanNPYmplY3QtPnZtKCk7CisgICAg
Vk0mIHZtID0ganNPYmplY3QtPnZtKCk7CiAKICAgICBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5m
byA9IGNsYXNzSW5mb1ByaXZhdGUoanNPYmplY3QpOwogICAgIApAQCAtNTgyLDcgKzU4Miw3IEBA
IHZvaWQqIEpTT2JqZWN0R2V0UHJpdmF0ZShKU09iamVjdFJlZiBvYmoKIGJvb2wgSlNPYmplY3RT
ZXRQcml2YXRlKEpTT2JqZWN0UmVmIG9iamVjdCwgdm9pZCogZGF0YSkKIHsKICAgICBKU09iamVj
dCoganNPYmplY3QgPSB1bmNoZWNrZWRUb0pTKG9iamVjdCk7Ci0gICAgVk0mIHZtID0gKmpzT2Jq
ZWN0LT52bSgpOworICAgIFZNJiB2bSA9IGpzT2JqZWN0LT52bSgpOwogCiAgICAgY29uc3QgQ2xh
c3NJbmZvKiBjbGFzc0luZm8gPSBjbGFzc0luZm9Qcml2YXRlKGpzT2JqZWN0KTsKICAgICAKQEAg
LTgxMCwxMiArODEwLDEyIEBAIEpTUHJvcGVydHlOYW1lQXJyYXlSZWYgSlNPYmplY3RDb3B5UHJv
cGUKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSB0b0pTKGN0eCk7CiAgICAgSlNMb2NrSG9sZGVyIGxv
Y2tlcihleGVjKTsKIAotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CiAKICAgICBKU09iamVjdCoganNPYmplY3QgPSB0b0pTKG9iamVjdCk7Ci0gICAg
SlNQcm9wZXJ0eU5hbWVBcnJheVJlZiBwcm9wZXJ0eU5hbWVzID0gbmV3IE9wYXF1ZUpTUHJvcGVy
dHlOYW1lQXJyYXkodm0pOworICAgIEpTUHJvcGVydHlOYW1lQXJyYXlSZWYgcHJvcGVydHlOYW1l
cyA9IG5ldyBPcGFxdWVKU1Byb3BlcnR5TmFtZUFycmF5KCZ2bSk7CiAgICAgUHJvcGVydHlOYW1l
QXJyYXkgYXJyYXkodm0sIFByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3MsIFByaXZhdGVTeW1ib2xN
b2RlOjpFeGNsdWRlKTsKLSAgICBqc09iamVjdC0+bWV0aG9kVGFibGUoKnZtKS0+Z2V0UHJvcGVy
dHlOYW1lcyhqc09iamVjdCwgZXhlYywgYXJyYXksIEVudW1lcmF0aW9uTW9kZSgpKTsKKyAgICBq
c09iamVjdC0+bWV0aG9kVGFibGUodm0pLT5nZXRQcm9wZXJ0eU5hbWVzKGpzT2JqZWN0LCBleGVj
LCBhcnJheSwgRW51bWVyYXRpb25Nb2RlKCkpOwogCiAgICAgc2l6ZV90IHNpemUgPSBhcnJheS5z
aXplKCk7CiAgICAgcHJvcGVydHlOYW1lcy0+YXJyYXkucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShz
aXplKTsKQEAgLTg1Miw5ICs4NTIsOSBAQCBKU1N0cmluZ1JlZiBKU1Byb3BlcnR5TmFtZUFycmF5
R2V0TmFtZUF0CiB2b2lkIEpTUHJvcGVydHlOYW1lQWNjdW11bGF0b3JBZGROYW1lKEpTUHJvcGVy
dHlOYW1lQWNjdW11bGF0b3JSZWYgYXJyYXksIEpTU3RyaW5nUmVmIHByb3BlcnR5TmFtZSkKIHsK
ICAgICBQcm9wZXJ0eU5hbWVBcnJheSogcHJvcGVydHlOYW1lcyA9IHRvSlMoYXJyYXkpOwotICAg
IFZNKiB2bSA9IHByb3BlcnR5TmFtZXMtPnZtKCk7CisgICAgVk0mIHZtID0gcHJvcGVydHlOYW1l
cy0+dm0oKTsKICAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKHZtKTsKLSAgICBwcm9wZXJ0eU5hbWVz
LT5hZGQocHJvcGVydHlOYW1lLT5pZGVudGlmaWVyKHZtKSk7CisgICAgcHJvcGVydHlOYW1lcy0+
YWRkKHByb3BlcnR5TmFtZS0+aWRlbnRpZmllcigmdm0pKTsKIH0KIAogSlNPYmplY3RSZWYgSlNP
YmplY3RHZXRQcm94eVRhcmdldChKU09iamVjdFJlZiBvYmplY3RSZWYpCkBAIC04NjIsNyArODYy
LDcgQEAgSlNPYmplY3RSZWYgSlNPYmplY3RHZXRQcm94eVRhcmdldChKU09iagogICAgIEpTT2Jq
ZWN0KiBvYmplY3QgPSB0b0pTKG9iamVjdFJlZik7CiAgICAgaWYgKCFvYmplY3QpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwotICAgIFZNJiB2bSA9ICpvYmplY3QtPnZtKCk7CisgICAgVk0mIHZt
ID0gb2JqZWN0LT52bSgpOwogICAgIEpTTG9ja0hvbGRlciBsb2NrZXIodm0pOwogICAgIEpTT2Jq
ZWN0KiByZXN1bHQgPSBudWxscHRyOwogICAgIGlmIChKU1Byb3h5KiBwcm94eSA9IGpzRHluYW1p
Y0Nhc3Q8SlNQcm94eSo+KHZtLCBvYmplY3QpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9KU1NjcmlwdFJlZi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9KU1NjcmlwdFJlZi5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNTY3JpcHRSZWYuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTc1LDcgKzc1LDcgQEAg
cHJpdmF0ZToKIHN0YXRpYyBib29sIHBhcnNlU2NyaXB0KFZNJiB2bSwgY29uc3QgU291cmNlQ29k
ZSYgc291cmNlLCBQYXJzZXJFcnJvciYgZXJyb3IpCiB7CiAgICAgcmV0dXJuICEhSlNDOjpwYXJz
ZTxKU0M6OlByb2dyYW1Ob2RlPigKLSAgICAgICAgJnZtLCBzb3VyY2UsIElkZW50aWZpZXIoKSwg
SlNQYXJzZXJCdWlsdGluTW9kZTo6Tm90QnVpbHRpbiwKKyAgICAgICAgdm0sIHNvdXJjZSwgSWRl
bnRpZmllcigpLCBKU1BhcnNlckJ1aWx0aW5Nb2RlOjpOb3RCdWlsdGluLAogICAgICAgICBKU1Bh
cnNlclN0cmljdE1vZGU6Ok5vdFN0cmljdCwgSlNQYXJzZXJTY3JpcHRNb2RlOjpDbGFzc2ljLCBT
b3VyY2VQYXJzZU1vZGU6OlByb2dyYW1Nb2RlLCBTdXBlckJpbmRpbmc6Ok5vdE5lZWRlZCwKICAg
ICAgICAgZXJyb3IpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZhbHVl
UmVmLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmFsdWVS
ZWYuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pT
VmFsdWVSZWYuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAwNiwgMjAwNywgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM0Niw5ICszNDYsMTAgQEAg
SlNWYWx1ZVJlZiBKU1ZhbHVlTWFrZVN0cmluZyhKU0NvbnRleHRSZQogICAgICAgICByZXR1cm4g
MDsKICAgICB9CiAgICAgRXhlY1N0YXRlKiBleGVjID0gdG9KUyhjdHgpOwotICAgIEpTTG9ja0hv
bGRlciBsb2NrZXIoZXhlYyk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBKU0xvY2tI
b2xkZXIgbG9ja2VyKHZtKTsKIAotICAgIHJldHVybiB0b1JlZihleGVjLCBqc1N0cmluZyhleGVj
LCBzdHJpbmcgPyBzdHJpbmctPnN0cmluZygpIDogU3RyaW5nKCkpKTsKKyAgICByZXR1cm4gdG9S
ZWYoZXhlYywganNTdHJpbmcodm0sIHN0cmluZyA/IHN0cmluZy0+c3RyaW5nKCkgOiBTdHJpbmco
KSkpOwogfQogCiBKU1ZhbHVlUmVmIEpTVmFsdWVNYWtlRnJvbUpTT05TdHJpbmcoSlNDb250ZXh0
UmVmIGN0eCwgSlNTdHJpbmdSZWYgc3RyaW5nKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9PcGFxdWVKU1N0cmluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9PcGFxdWVKU1N0cmluZy5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvT3BhcXVlSlNTdHJpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTc4LDkg
Kzc4LDkgQEAgSWRlbnRpZmllciBPcGFxdWVKU1N0cmluZzo6aWRlbnRpZmllcihWTQogICAgICAg
ICByZXR1cm4gSWRlbnRpZmllcihJZGVudGlmaWVyOjpFbXB0eUlkZW50aWZpZXIpOwogCiAgICAg
aWYgKG1fc3RyaW5nLmlzOEJpdCgpKQotICAgICAgICByZXR1cm4gSWRlbnRpZmllcjo6ZnJvbVN0
cmluZyh2bSwgbV9zdHJpbmcuY2hhcmFjdGVyczgoKSwgbV9zdHJpbmcubGVuZ3RoKCkpOworICAg
ICAgICByZXR1cm4gSWRlbnRpZmllcjo6ZnJvbVN0cmluZygqdm0sIG1fc3RyaW5nLmNoYXJhY3Rl
cnM4KCksIG1fc3RyaW5nLmxlbmd0aCgpKTsKIAotICAgIHJldHVybiBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKHZtLCBtX3N0cmluZy5jaGFyYWN0ZXJzMTYoKSwgbV9zdHJpbmcubGVuZ3RoKCkpOwor
ICAgIHJldHVybiBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCp2bSwgbV9zdHJpbmcuY2hhcmFjdGVy
czE2KCksIG1fc3RyaW5nLmxlbmd0aCgpKTsKIH0KIAogY29uc3QgVUNoYXIqIE9wYXF1ZUpTU3Ry
aW5nOjpjaGFyYWN0ZXJzKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9K
U0NDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2ds
aWIvSlNDQ29udGV4dC5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvZ2xpYi9KU0NDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTUwLDExICs5
NTAsMTEgQEAgSlNDQ2hlY2tTeW50YXhSZXN1bHQganNjX2NvbnRleHRfY2hlY2tfcwogICAgIEpT
Qzo6UGFyc2VyRXJyb3IgZXJyb3I7CiAgICAgc3dpdGNoIChtb2RlKSB7CiAgICAgY2FzZSBKU0Nf
Q0hFQ0tfU1lOVEFYX01PREVfU0NSSVBUOgotICAgICAgICBzdWNjZXNzID0gISFKU0M6OnBhcnNl
PEpTQzo6UHJvZ3JhbU5vZGU+KCZ2bSwgc291cmNlLCBKU0M6OklkZW50aWZpZXIoKSwgSlNDOjpK
U1BhcnNlckJ1aWx0aW5Nb2RlOjpOb3RCdWlsdGluLAorICAgICAgICBzdWNjZXNzID0gISFKU0M6
OnBhcnNlPEpTQzo6UHJvZ3JhbU5vZGU+KHZtLCBzb3VyY2UsIEpTQzo6SWRlbnRpZmllcigpLCBK
U0M6OkpTUGFyc2VyQnVpbHRpbk1vZGU6Ok5vdEJ1aWx0aW4sCiAgICAgICAgICAgICBKU0M6OkpT
UGFyc2VyU3RyaWN0TW9kZTo6Tm90U3RyaWN0LCBKU0M6OkpTUGFyc2VyU2NyaXB0TW9kZTo6Q2xh
c3NpYywgSlNDOjpTb3VyY2VQYXJzZU1vZGU6OlByb2dyYW1Nb2RlLCBKU0M6OlN1cGVyQmluZGlu
Zzo6Tm90TmVlZGVkLCBlcnJvcik7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSlNDX0NIRUNL
X1NZTlRBWF9NT0RFX01PRFVMRToKLSAgICAgICAgc3VjY2VzcyA9ICEhSlNDOjpwYXJzZTxKU0M6
Ok1vZHVsZVByb2dyYW1Ob2RlPigmdm0sIHNvdXJjZSwgSlNDOjpJZGVudGlmaWVyKCksIEpTQzo6
SlNQYXJzZXJCdWlsdGluTW9kZTo6Tm90QnVpbHRpbiwKKyAgICAgICAgc3VjY2VzcyA9ICEhSlND
OjpwYXJzZTxKU0M6Ok1vZHVsZVByb2dyYW1Ob2RlPih2bSwgc291cmNlLCBKU0M6OklkZW50aWZp
ZXIoKSwgSlNDOjpKU1BhcnNlckJ1aWx0aW5Nb2RlOjpOb3RCdWlsdGluLAogICAgICAgICAgICAg
SlNDOjpKU1BhcnNlclN0cmljdE1vZGU6OlN0cmljdCwgSlNDOjpKU1BhcnNlclNjcmlwdE1vZGU6
Ok1vZHVsZSwgSlNDOjpTb3VyY2VQYXJzZU1vZGU6Ok1vZHVsZUFuYWx5emVNb2RlLCBKU0M6OlN1
cGVyQmluZGluZzo6Tm90TmVlZGVkLCBlcnJvcik7CiAgICAgICAgIGJyZWFrOwogICAgIH0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL3drYnVpbHRpbnMvYnVpbHRpbnNfZ2Vu
ZXJhdGVfd3JhcHBlcl9oZWFkZXIucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL1NjcmlwdHMvd2tidWlsdGlucy9idWlsdGluc19nZW5lcmF0ZV93cmFwcGVyX2hlYWRlci5w
eQkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvd2ti
dWlsdGlucy9idWlsdGluc19nZW5lcmF0ZV93cmFwcGVyX2hlYWRlci5weQkod29ya2luZyBjb3B5
KQpAQCAtMSw2ICsxLDYgQEAKICMhL3Vzci9iaW4vZW52IHB5dGhvbgogIwotIyBDb3B5cmlnaHQg
KGMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKGMp
IDIwMTYtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAjCiAjIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTkyLDcgKzkyLDcgQEAgY2xhc3MgQnVpbHRpbnNXcmFwcGVySGVh
ZGVyR2VuZXJhdG9yKEJ1aQogICAgICAgICBsaW5lcyA9IFsiICAgIGV4cGxpY2l0IEpTQnVpbHRp
bkZ1bmN0aW9ucyhKU0M6OlZNJiB2bSkiLAogICAgICAgICAgICAgICAgICAiICAgICAgICA6IG1f
dm0odm0pIl0KICAgICAgICAgZm9yIG9iamVjdCBpbiBzZWxmLm1vZGVsKCkub2JqZWN0czoKLSAg
ICAgICAgICAgIG1lbWJlcl9pbml0ID0gIiAgICAgICAgLCAlcygmbV92bSkiICUgc2VsZi5tZW1i
ZXJfbmFtZShvYmplY3QpCisgICAgICAgICAgICBtZW1iZXJfaW5pdCA9ICIgICAgICAgICwgJXMo
bV92bSkiICUgc2VsZi5tZW1iZXJfbmFtZShvYmplY3QpCiAgICAgICAgICAgICBsaW5lcy5hcHBl
bmQoQnVpbHRpbnNHZW5lcmF0b3Iud3JhcF93aXRoX2d1YXJkKG9iamVjdC5hbm5vdGF0aW9ucy5n
ZXQoJ2NvbmRpdGlvbmFsJyksIG1lbWJlcl9pbml0KSkKICAgICAgICAgbGluZXMuYXBwZW5kKCIg
ICAgeyIpCiAgICAgICAgIGZvciBvYmplY3QgaW4gc2VsZi5tb2RlbCgpLm9iamVjdHM6CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy93a2J1aWx0aW5zL2J1aWx0aW5zX3RlbXBs
YXRlcy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy93a2J1
aWx0aW5zL2J1aWx0aW5zX3RlbXBsYXRlcy5weQkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvd2tidWlsdGlucy9idWlsdGluc190ZW1wbGF0ZXMucHkJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAjIS91c3IvYmluL2VudiBweXRob24KICMK
LSMgQ29weXJpZ2h0IChjKSAyMDE0LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorIyBDb3B5cmlnaHQgKGMpIDIwMTQtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAjIENvcHlyaWdodCAoQykgMjAxNSBDYW5vbiBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAjCiAjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dApAQCAtMTI5LDggKzEyOSw4IEBAICR7bWFjcm9QcmVmaXh9X0ZPUkVB
Q0hfJHtvYmplY3RNYWNyb31fQlUKICAgICBTZXBhcmF0ZUhlYWRlcldyYXBwZXJCb2lsZXJwbGF0
ZSA9ICgKICAgICAiIiJjbGFzcyAke29iamVjdE5hbWV9QnVpbHRpbnNXcmFwcGVyIDogcHJpdmF0
ZSBKU0M6OldlYWtIYW5kbGVPd25lciB7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgJHtvYmplY3RO
YW1lfUJ1aWx0aW5zV3JhcHBlcihKU0M6OlZNKiB2bSkKLSAgICAgICAgOiBtX3ZtKCp2bSkKKyAg
ICBleHBsaWNpdCAke29iamVjdE5hbWV9QnVpbHRpbnNXcmFwcGVyKEpTQzo6Vk0mIHZtKQorICAg
ICAgICA6IG1fdm0odm0pCiAgICAgICAgICR7bWFjcm9QcmVmaXh9X0ZPUkVBQ0hfJHtvYmplY3RN
YWNyb31fQlVJTFRJTl9GVU5DVElPTl9OQU1FKElOSVRJQUxJWkVfQlVJTFRJTl9OQU1FUykKICNk
ZWZpbmUgSU5JVElBTElaRV9CVUlMVElOX1NPVVJDRV9NRU1CRVJTKG5hbWUsIGZ1bmN0aW9uTmFt
ZSwgb3ZlcnJpZGRlbk5hbWUsIGxlbmd0aCkgLCBtXyMjbmFtZSMjU291cmNlKEpTQzo6bWFrZVNv
dXJjZShTdHJpbmdJbXBsOjpjcmVhdGVGcm9tTGl0ZXJhbChzXyMjbmFtZSwgbGVuZ3RoKSwgeyB9
KSkKICAgICAgICAgJHttYWNyb1ByZWZpeH1fRk9SRUFDSF8ke29iamVjdE1hY3JvfV9CVUlMVElO
X0NPREUoSU5JVElBTElaRV9CVUlMVElOX1NPVVJDRV9NRU1CRVJTKQpAQCAtMTY3LDcgKzE2Nyw3
IEBAIGlubGluZSBKU0M6OlVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiAKICAgICBpZiAoIW1f
IyNuYW1lIyNFeGVjdXRhYmxlKSB7XFwKICAgICAgICAgSlNDOjpJZGVudGlmaWVyIGV4ZWN1dGFi
bGVOYW1lID0gZnVuY3Rpb25OYW1lIyNQdWJsaWNOYW1lKCk7XFwKICAgICAgICAgaWYgKG92ZXJy
aWRkZW5OYW1lKVxcCi0gICAgICAgICAgICBleGVjdXRhYmxlTmFtZSA9IEpTQzo6SWRlbnRpZmll
cjo6ZnJvbVN0cmluZygmbV92bSwgb3ZlcnJpZGRlbk5hbWUpO1xcCisgICAgICAgICAgICBleGVj
dXRhYmxlTmFtZSA9IEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyhtX3ZtLCBvdmVycmlkZGVu
TmFtZSk7XFwKICAgICAgICAgbV8jI25hbWUjI0V4ZWN1dGFibGUgPSBKU0M6OldlYWs8SlNDOjpV
bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZT4oSlNDOjpjcmVhdGVCdWlsdGluRXhlY3V0YWJsZSht
X3ZtLCBtXyMjbmFtZSMjU291cmNlLCBleGVjdXRhYmxlTmFtZSwgc18jI25hbWUjI0NvbnN0cnVj
dEFiaWxpdHkpLCB0aGlzLCAmbV8jI25hbWUjI0V4ZWN1dGFibGUpO1xcCiAgICAgfVxcCiAgICAg
cmV0dXJuIG1fIyNuYW1lIyNFeGVjdXRhYmxlLmdldCgpO1xcCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYmluZGluZ3MvU2NyaXB0RnVuY3Rpb25DYWxsLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvU2NyaXB0RnVuY3Rpb25DYWxsLmNwcAkocmV2
aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2JpbmRpbmdzL1NjcmlwdEZ1
bmN0aW9uQ2FsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENv
cHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dApAQCAtNDIsMTQgKzQyLDE2IEBAIG5hbWVzcGFjZSBEZXByZWNhdGVkIHsKIAog
dm9pZCBTY3JpcHRDYWxsQXJndW1lbnRIYW5kbGVyOjphcHBlbmRBcmd1bWVudChjb25zdCBTdHJp
bmcmIGFyZ3VtZW50KQogewotICAgIEpTTG9ja0hvbGRlciBsb2NrKG1fZXhlYyk7Ci0gICAgbV9h
cmd1bWVudHMuYXBwZW5kKGpzU3RyaW5nKG1fZXhlYywgYXJndW1lbnQpKTsKKyAgICBWTSYgdm0g
PSBtX2V4ZWMtPnZtKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAgIG1fYXJndW1l
bnRzLmFwcGVuZChqc1N0cmluZyh2bSwgYXJndW1lbnQpKTsKIH0KIAogdm9pZCBTY3JpcHRDYWxs
QXJndW1lbnRIYW5kbGVyOjphcHBlbmRBcmd1bWVudChjb25zdCBjaGFyKiBhcmd1bWVudCkKIHsK
LSAgICBKU0xvY2tIb2xkZXIgbG9jayhtX2V4ZWMpOwotICAgIG1fYXJndW1lbnRzLmFwcGVuZChq
c1N0cmluZyhtX2V4ZWMsIFN0cmluZyhhcmd1bWVudCkpKTsKKyAgICBWTSYgdm0gPSBtX2V4ZWMt
PnZtKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAgIG1fYXJndW1lbnRzLmFwcGVu
ZChqc1N0cmluZyh2bSwgU3RyaW5nKGFyZ3VtZW50KSkpOwogfQogCiB2b2lkIFNjcmlwdENhbGxB
cmd1bWVudEhhbmRsZXI6OmFwcGVuZEFyZ3VtZW50KEpTVmFsdWUgYXJndW1lbnQpCkBAIC0xMDgs
NyArMTEwLDcgQEAgSlNWYWx1ZSBTY3JpcHRGdW5jdGlvbkNhbGw6OmNhbGwoYm9vbCYgaAogICAg
IEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAKLSAgICBKU1ZhbHVlIGZ1bmN0aW9uID0gdGhpc09iamVjdC0+Z2V0KG1fZXhl
YywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhtX2V4ZWMsIG1fbmFtZSkpOworICAgIEpTVmFsdWUg
ZnVuY3Rpb24gPSB0aGlzT2JqZWN0LT5nZXQobV9leGVjLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KHZtLCBtX25hbWUpKTsKICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7CiAg
ICAgICAgIGhhZEV4Y2VwdGlvbiA9IHRydWU7CiAgICAgICAgIHJldHVybiB7IH07CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvU2NyaXB0VmFsdWUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9TY3JpcHRWYWx1ZS5jcHAJKHJldmlz
aW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9TY3JpcHRWYWx1
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDA2LCAyMDA3LCAyMDA4LCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqIENvcHlyaWdodCAoYykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dApAQCAtNzksNyArNzksNyBAQCBzdGF0aWMgUmVmUHRyPEpTT046
OlZhbHVlPiBqc1RvSW5zcGVjdG9yCiAgICAgICAgIFZNJiB2bSA9IHNjcmlwdFN0YXRlLnZtKCk7
CiAgICAgICAgIGF1dG8gaW5zcGVjdG9yT2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsK
ICAgICAgICAgYXV0byYgb2JqZWN0ID0gKnZhbHVlLmdldE9iamVjdCgpOwotICAgICAgICBQcm9w
ZXJ0eU5hbWVBcnJheSBwcm9wZXJ0eU5hbWVzKCZ2bSwgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5n
cywgUHJpdmF0ZVN5bWJvbE1vZGU6OkV4Y2x1ZGUpOworICAgICAgICBQcm9wZXJ0eU5hbWVBcnJh
eSBwcm9wZXJ0eU5hbWVzKHZtLCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzLCBQcml2YXRlU3lt
Ym9sTW9kZTo6RXhjbHVkZSk7CiAgICAgICAgIG9iamVjdC5tZXRob2RUYWJsZSh2bSktPmdldE93
blByb3BlcnR5TmFtZXMoJm9iamVjdCwgJnNjcmlwdFN0YXRlLCBwcm9wZXJ0eU5hbWVzLCBFbnVt
ZXJhdGlvbk1vZGUoKSk7CiAgICAgICAgIGZvciAoYXV0byYgbmFtZSA6IHByb3BlcnR5TmFtZXMp
IHsKICAgICAgICAgICAgIGF1dG8gaW5zcGVjdG9yVmFsdWUgPSBqc1RvSW5zcGVjdG9yVmFsdWUo
c2NyaXB0U3RhdGUsIG9iamVjdC5nZXQoJnNjcmlwdFN0YXRlLCBuYW1lKSwgbWF4RGVwdGgpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0J1aWx0aW5FeGVjdXRhYmxlcy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0J1aWx0aW5F
eGVjdXRhYmxlcy5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9idWlsdGlucy9CdWlsdGluRXhlY3V0YWJsZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjEz
LDcgKzIxMyw3IEBAIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBCdWlsdGluRXhlY3UKICAg
ICAgICAgUGFyc2VyRXJyb3IgZXJyb3I7CiAgICAgICAgIEpTUGFyc2VyQnVpbHRpbk1vZGUgYnVp
bHRpbk1vZGUgPSBpc0J1aWx0aW5EZWZhdWx0Q2xhc3NDb25zdHJ1Y3RvciA/IEpTUGFyc2VyQnVp
bHRpbk1vZGU6Ok5vdEJ1aWx0aW4gOiBKU1BhcnNlckJ1aWx0aW5Nb2RlOjpCdWlsdGluOwogICAg
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8UHJvZ3JhbU5vZGU+IHByb2dyYW0gPSBwYXJzZTxQcm9ncmFt
Tm9kZT4oCi0gICAgICAgICAgICAmdm0sIHNvdXJjZSwgSWRlbnRpZmllcigpLCBidWlsdGluTW9k
ZSwKKyAgICAgICAgICAgIHZtLCBzb3VyY2UsIElkZW50aWZpZXIoKSwgYnVpbHRpbk1vZGUsCiAg
ICAgICAgICAgICBKU1BhcnNlclN0cmljdE1vZGU6Ok5vdFN0cmljdCwgSlNQYXJzZXJTY3JpcHRN
b2RlOjpDbGFzc2ljLCBTb3VyY2VQYXJzZU1vZGU6OlByb2dyYW1Nb2RlLCBTdXBlckJpbmRpbmc6
Ok5vdE5lZWRlZCwgZXJyb3IsCiAgICAgICAgICAgICAmcG9zaXRpb25CZWZvcmVMYXN0TmV3bGlu
ZUZyb21QYXJzZXIsIGNvbnN0cnVjdG9yS2luZCk7CiAKQEAgLTI1NCw3ICsyNTQsNyBAQCBVbmxp
bmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogQnVpbHRpbkV4ZWN1CiAgICAgICAgIH0KICAgICB9CiAK
LSAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25FeGVjdXRhYmxlID0gVW5s
aW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OmNyZWF0ZSgmdm0sIHNvdXJjZSwgJm1ldGFkYXRhLCBr
aW5kLCBjb25zdHJ1Y3RBYmlsaXR5LCBKU1BhcnNlclNjcmlwdE1vZGU6OkNsYXNzaWMsIFdURjo6
bnVsbG9wdCwgRGVyaXZlZENvbnRleHRUeXBlOjpOb25lLCBpc0J1aWx0aW5EZWZhdWx0Q2xhc3ND
b25zdHJ1Y3Rvcik7CisgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhl
Y3V0YWJsZSA9IFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpjcmVhdGUodm0sIHNvdXJjZSwg
Jm1ldGFkYXRhLCBraW5kLCBjb25zdHJ1Y3RBYmlsaXR5LCBKU1BhcnNlclNjcmlwdE1vZGU6OkNs
YXNzaWMsIFdURjo6bnVsbG9wdCwgRGVyaXZlZENvbnRleHRUeXBlOjpOb25lLCBpc0J1aWx0aW5E
ZWZhdWx0Q2xhc3NDb25zdHJ1Y3Rvcik7CiAgICAgcmV0dXJuIGZ1bmN0aW9uRXhlY3V0YWJsZTsK
IH0KIApAQCAtMjc4LDcgKzI3OCw3IEBAIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBCdWls
dGluRXhlY3UKICAgICBpZiAoIW1fdW5saW5rZWRFeGVjdXRhYmxlc1tpbmRleF0pIHtcCiAgICAg
ICAgIElkZW50aWZpZXIgZXhlY3V0YWJsZU5hbWUgPSBtX3ZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0
aW5OYW1lcygpLmZ1bmN0aW9uTmFtZSMjUHVibGljTmFtZSgpO1wKICAgICAgICAgaWYgKG92ZXJy
aWRlTmFtZSlcCi0gICAgICAgICAgICBleGVjdXRhYmxlTmFtZSA9IElkZW50aWZpZXI6OmZyb21T
dHJpbmcoJm1fdm0sIG92ZXJyaWRlTmFtZSk7XAorICAgICAgICAgICAgZXhlY3V0YWJsZU5hbWUg
PSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKG1fdm0sIG92ZXJyaWRlTmFtZSk7XAogICAgICAgICBt
X3VubGlua2VkRXhlY3V0YWJsZXNbaW5kZXhdID0gY3JlYXRlQnVpbHRpbkV4ZWN1dGFibGUobmFt
ZSMjU291cmNlKCksIGV4ZWN1dGFibGVOYW1lLCBzXyMjbmFtZSMjQ29uc3RydWN0QWJpbGl0eSk7
XAogICAgIH1cCiAgICAgcmV0dXJuIG1fdW5saW5rZWRFeGVjdXRhYmxlc1tpbmRleF07XApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0J1aWx0aW5OYW1lcy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0J1aWx0aW5OYW1lcy5jcHAJ
KHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9CdWls
dGluTmFtZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHly
aWdodCAoQykgMjAxNyBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+LgorICog
Q29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzIsNyArNzMsNyBAQCBTeW1ib2xJbXBsOjpT
dGF0aWNTeW1ib2xJbXBsIHBvbHlQcm90b1ByCiAKIC8vIFdlIHRyZWF0IHRoZSBkb2xsYXJWTSBu
YW1lIGFzIGEgc3BlY2lhbCBjYXNlIGJlbG93IGZvciAkdm0gKGJlY2F1c2UgQ29tbW9uSWRlbnRp
ZmllcnMgZG9lcyBub3QKIC8vIHlldCBzdXBwb3J0IHRoZSAkIGNoYXJhY3RlcikuCi1CdWlsdGlu
TmFtZXM6OkJ1aWx0aW5OYW1lcyhWTSogdm0sIENvbW1vbklkZW50aWZpZXJzKiBjb21tb25JZGVu
dGlmaWVycykKK0J1aWx0aW5OYW1lczo6QnVpbHRpbk5hbWVzKFZNJiB2bSwgQ29tbW9uSWRlbnRp
ZmllcnMqIGNvbW1vbklkZW50aWZpZXJzKQogICAgIDogbV9lbXB0eUlkZW50aWZpZXIoY29tbW9u
SWRlbnRpZmllcnMtPmVtcHR5SWRlbnRpZmllcikKICAgICBKU0NfRk9SRUFDSF9CVUlMVElOX0ZV
TkNUSU9OX05BTUUoSU5JVElBTElaRV9CVUlMVElOX05BTUVTX0lOX0pTQykKICAgICBKU0NfQ09N
TU9OX1BSSVZBVEVfSURFTlRJRklFUlNfRUFDSF9QUk9QRVJUWV9OQU1FKElOSVRJQUxJWkVfQlVJ
TFRJTl9OQU1FU19JTl9KU0MpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMv
QnVpbHRpbk5hbWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0
aW5zL0J1aWx0aW5OYW1lcy5oCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnVpbHRpbnMvQnVpbHRpbk5hbWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTk4LDcg
KzE5OCw3IEBAIGNsYXNzIEJ1aWx0aW5OYW1lcyB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
QnVpbHRpbk5hbWVzKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgCiBwdWJsaWM6Ci0g
ICAgQnVpbHRpbk5hbWVzKFZNKiwgQ29tbW9uSWRlbnRpZmllcnMqKTsKKyAgICBCdWlsdGluTmFt
ZXMoVk0mLCBDb21tb25JZGVudGlmaWVycyopOwogCiAgICAgU3ltYm9sSW1wbCogbG9va1VwUHJp
dmF0ZU5hbWUoY29uc3QgSWRlbnRpZmllciYpIGNvbnN0OwogICAgIElkZW50aWZpZXIgZ2V0UHVi
bGljTmFtZShWTSYsIFN5bWJvbEltcGwqKSBjb25zdDsKQEAgLTIzNywxMCArMjM3LDEwIEBAIGlu
bGluZSBTeW1ib2xJbXBsKiBCdWlsdGluTmFtZXM6Omxvb2tVcFAKIGlubGluZSBJZGVudGlmaWVy
IEJ1aWx0aW5OYW1lczo6Z2V0UHVibGljTmFtZShWTSYgdm0sIFN5bWJvbEltcGwqIHN5bWJvbCkg
Y29uc3QKIHsKICAgICBpZiAoc3ltYm9sLT5pc1ByaXZhdGUoKSkKLSAgICAgICAgcmV0dXJuIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCBzeW1ib2wpOworICAgICAgICByZXR1cm4gSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZyh2bSwgc3ltYm9sKTsKICAgICAvLyBXZSBoYXZlIHNwZWNpYWwgaGFu
ZGxpbmcgZm9yIHdlbGwta25vd24gc3ltYm9scy4KICAgICBBU1NFUlQoc3ltYm9sLT5zdGFydHNX
aXRoKCJTeW1ib2wuIikpOwotICAgIHJldHVybiBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwg
bWFrZVN0cmluZyhTdHJpbmcoc3ltYm9sLT5zdWJzdHJpbmcoc3RybGVuKCJTeW1ib2wuIikpKSwg
IlN5bWJvbCIpKTsKKyAgICByZXR1cm4gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgbWFrZVN0
cmluZyhTdHJpbmcoc3ltYm9sLT5zdWJzdHJpbmcoc3RybGVuKCJTeW1ib2wuIikpKSwgIlN5bWJv
bCIpKTsKIH0KIAogaW5saW5lIHZvaWQgQnVpbHRpbk5hbWVzOjpjaGVja1B1YmxpY1RvUHJpdmF0
ZU1hcENvbnNpc3RlbmN5KFVuaXF1ZWRTdHJpbmdJbXBsKiBwdWJsaWNOYW1lLCBVbmlxdWVkU3Ry
aW5nSW1wbCogcHJpdmF0ZU5hbWUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQnl0ZWNvZGVEdW1wZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE3IFl1c3VrZSBTdXp1
a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtNDQsNyArNDQsNyBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIHRlbXBsYXRlPGNs
YXNzIEJsb2NrPgotVk0qIEJ5dGVjb2RlRHVtcGVyPEJsb2NrPjo6dm0oKSBjb25zdAorVk0mIEJ5
dGVjb2RlRHVtcGVyPEJsb2NrPjo6dm0oKSBjb25zdAogewogICAgIHJldHVybiBibG9jaygpLT52
bSgpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVt
cGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVj
b2RlRHVtcGVyLmgJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9CeXRlY29kZUR1bXBlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAog
LyoKICAqIENvcHlyaWdodCAoQykgMjAxNyBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFp
bC5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03MCw3ICs3MCw3IEBA
IHByaXZhdGU6CiAKICAgICBCbG9jayogYmxvY2soKSBjb25zdCB7IHJldHVybiBtX2Jsb2NrOyB9
CiAKLSAgICBBTFdBWVNfSU5MSU5FIFZNKiB2bSgpIGNvbnN0OworICAgIEFMV0FZU19JTkxJTkUg
Vk0mIHZtKCkgY29uc3Q7CiAKICAgICBDU3RyaW5nIHJlZ2lzdGVyTmFtZShpbnQgcikgY29uc3Q7
CiAgICAgQ1N0cmluZyBjb25zdGFudE5hbWUoaW50IGluZGV4KSBjb25zdDsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUdlbmVyYXRvcmlmaWNhdGlvbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlR2Vu
ZXJhdG9yaWZpY2F0aW9uLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlR2VuZXJhdG9yaWZpY2F0aW9uLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNjgsNyArNjgsNyBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9jb2RlQmxvY2soY29k
ZUJsb2NrKQogICAgICAgICAsIG1faW5zdHJ1Y3Rpb25zKGluc3RydWN0aW9ucykKICAgICAgICAg
LCBtX2dyYXBoKG1fY29kZUJsb2NrLCBtX2luc3RydWN0aW9ucykKLSAgICAgICAgLCBtX2dlbmVy
YXRvckZyYW1lU3ltYm9sVGFibGUoKmNvZGVCbG9jay0+dm0oKSwgZ2VuZXJhdG9yRnJhbWVTeW1i
b2xUYWJsZSkKKyAgICAgICAgLCBtX2dlbmVyYXRvckZyYW1lU3ltYm9sVGFibGUoY29kZUJsb2Nr
LT52bSgpLCBnZW5lcmF0b3JGcmFtZVN5bWJvbFRhYmxlKQogICAgICAgICAsIG1fZ2VuZXJhdG9y
RnJhbWVTeW1ib2xUYWJsZUluZGV4KGdlbmVyYXRvckZyYW1lU3ltYm9sVGFibGVJbmRleCkKICAg
ICB7CiAgICAgICAgIGZvciAoQnl0ZWNvZGVCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGgpIHsK
QEAgLTE1OCw3ICsxNTgsNyBAQCBwcml2YXRlOgogICAgICAgICBpZiAoT3B0aW9uYWw8U3RvcmFn
ZT4gc3RvcmFnZSA9IG1fc3RvcmFnZXNbaW5kZXhdKQogICAgICAgICAgICAgcmV0dXJuICpzdG9y
YWdlOwogCi0gICAgICAgIElkZW50aWZpZXIgaWRlbnRpZmllciA9IElkZW50aWZpZXI6OmZyb20o
JnZtLCBpbmRleCk7CisgICAgICAgIElkZW50aWZpZXIgaWRlbnRpZmllciA9IElkZW50aWZpZXI6
OmZyb20odm0sIGluZGV4KTsKICAgICAgICAgdW5zaWduZWQgaWRlbnRpZmllckluZGV4ID0gbV9j
b2RlQmxvY2stPm51bWJlck9mSWRlbnRpZmllcnMoKTsKICAgICAgICAgbV9jb2RlQmxvY2stPmFk
ZElkZW50aWZpZXIoaWRlbnRpZmllcik7CiAgICAgICAgIFNjb3BlT2Zmc2V0IHNjb3BlT2Zmc2V0
ID0gbV9nZW5lcmF0b3JGcmFtZVN5bWJvbFRhYmxlLT50YWtlTmV4dFNjb3BlT2Zmc2V0KE5vTG9j
a2luZ05lY2Vzc2FyeSk7CkBAIC0yMTEsNyArMjExLDcgQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRv
cmlmaWNhdGlvbjo6cnVuKCkKIHsKICAgICAvLyBXZSBjYWxjdWxhdGUgdGhlIGxpdmVuZXNzIGF0
IGVhY2ggbWVyZ2UgcG9pbnQuIFRoaXMgZ2l2ZXMgdXMgdGhlIGluZm9ybWF0aW9uIHdoaWNoIHJl
Z2lzdGVycyBzaG91bGQgYmUgc2F2ZWQgYW5kIHJlc3VtZWQgY29uc2VydmF0aXZlbHkuCiAKLSAg
ICBWTSYgdm0gPSAqbV9ieXRlY29kZUdlbmVyYXRvci52bSgpOworICAgIFZNJiB2bSA9IG1fYnl0
ZWNvZGVHZW5lcmF0b3Iudm0oKTsKICAgICB7CiAgICAgICAgIEdlbmVyYXRvckxpdmVuZXNzQW5h
bHlzaXMgcGFzcygqdGhpcyk7CiAgICAgICAgIHBhc3MucnVuKG1fY29kZUJsb2NrLCBtX2luc3Ry
dWN0aW9ucyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVJ
bnRyaW5zaWNSZWdpc3RyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0J5dGVjb2RlSW50cmluc2ljUmVnaXN0cnkuY3BwCShyZXZpc2lvbiAyNDkxMjgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVJbnRyaW5zaWNSZWdp
c3RyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0
IChDKSAyMDE1IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4uCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEwNCwxMiArMTA0LDEyIEBAIEJ5dGVj
b2RlSW50cmluc2ljTm9kZTo6RW1pdHRlclR5cGUgQnl0ZWMKIAogSlNWYWx1ZSBCeXRlY29kZUlu
dHJpbnNpY1JlZ2lzdHJ5OjpzZW50aW5lbE1hcEJ1Y2tldFZhbHVlKEJ5dGVjb2RlR2VuZXJhdG9y
JiBnZW5lcmF0b3IpCiB7Ci0gICAgcmV0dXJuIGdlbmVyYXRvci52bSgpLT5zZW50aW5lbE1hcEJ1
Y2tldCgpOworICAgIHJldHVybiBnZW5lcmF0b3Iudm0oKS5zZW50aW5lbE1hcEJ1Y2tldCgpOwog
fQogCiBKU1ZhbHVlIEJ5dGVjb2RlSW50cmluc2ljUmVnaXN0cnk6OnNlbnRpbmVsU2V0QnVja2V0
VmFsdWUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvcikKIHsKLSAgICByZXR1cm4gZ2VuZXJh
dG9yLnZtKCktPnNlbnRpbmVsU2V0QnVja2V0KCk7CisgICAgcmV0dXJuIGdlbmVyYXRvci52bSgp
LnNlbnRpbmVsU2V0QnVja2V0KCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxWYXJpYW50LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxWYXJpYW50LmgJKHJldmlzaW9uIDI0
OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsVmFyaWFudC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNC0y
MDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtODcsMjEgKzg3LDIxIEBAIHB1YmxpYzoKICAgICAKICAgICBJbnRl
cm5hbEZ1bmN0aW9uKiBpbnRlcm5hbEZ1bmN0aW9uKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJl
dHVybiBqc0R5bmFtaWNDYXN0PEludGVybmFsRnVuY3Rpb24qPigqbV9jYWxsZWUtPnZtKCksIG1f
Y2FsbGVlKTsKKyAgICAgICAgcmV0dXJuIGpzRHluYW1pY0Nhc3Q8SW50ZXJuYWxGdW5jdGlvbio+
KG1fY2FsbGVlLT52bSgpLCBtX2NhbGxlZSk7CiAgICAgfQogICAgIAogICAgIEpTRnVuY3Rpb24q
IGZ1bmN0aW9uKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBqc0R5bmFtaWNDYXN0PEpT
RnVuY3Rpb24qPigqbV9jYWxsZWUtPnZtKCksIG1fY2FsbGVlKTsKKyAgICAgICAgcmV0dXJuIGpz
RHluYW1pY0Nhc3Q8SlNGdW5jdGlvbio+KG1fY2FsbGVlLT52bSgpLCBtX2NhbGxlZSk7CiAgICAg
fQogICAgIAotICAgIGJvb2wgaXNDbG9zdXJlQ2FsbCgpIGNvbnN0IHsgcmV0dXJuICEhanNEeW5h
bWljQ2FzdDxFeGVjdXRhYmxlQmFzZSo+KCptX2NhbGxlZS0+dm0oKSwgbV9jYWxsZWUpOyB9Cisg
ICAgYm9vbCBpc0Nsb3N1cmVDYWxsKCkgY29uc3QgeyByZXR1cm4gISFqc0R5bmFtaWNDYXN0PEV4
ZWN1dGFibGVCYXNlKj4obV9jYWxsZWUtPnZtKCksIG1fY2FsbGVlKTsgfQogICAgIAogICAgIEV4
ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlKCkgY29uc3QKICAgICB7CiAgICAgICAgIGlmIChKU0Z1
bmN0aW9uKiBmdW5jdGlvbiA9IHRoaXMtPmZ1bmN0aW9uKCkpCiAgICAgICAgICAgICByZXR1cm4g
ZnVuY3Rpb24tPmV4ZWN1dGFibGUoKTsKLSAgICAgICAgcmV0dXJuIGpzRHluYW1pY0Nhc3Q8RXhl
Y3V0YWJsZUJhc2UqPigqbV9jYWxsZWUtPnZtKCksIG1fY2FsbGVlKTsKKyAgICAgICAgcmV0dXJu
IGpzRHluYW1pY0Nhc3Q8RXhlY3V0YWJsZUJhc2UqPihtX2NhbGxlZS0+dm0oKSwgbV9jYWxsZWUp
OwogICAgIH0KICAgICAKICAgICBKU0NlbGwqIG5vbkV4ZWN1dGFibGVDYWxsZWUoKSBjb25zdApA
QCAtMTIwLDE0ICsxMjAsMTQgQEAgcHVibGljOgogICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVu
Y3Rpb25FeGVjdXRhYmxlKCkgY29uc3QKICAgICB7CiAgICAgICAgIGlmIChFeGVjdXRhYmxlQmFz
ZSogZXhlY3V0YWJsZSA9IHRoaXMtPmV4ZWN1dGFibGUoKSkKLSAgICAgICAgICAgIHJldHVybiBq
c0R5bmFtaWNDYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KCptX2NhbGxlZS0+dm0oKSwgZXhlY3V0
YWJsZSk7CisgICAgICAgICAgICByZXR1cm4ganNEeW5hbWljQ2FzdDxGdW5jdGlvbkV4ZWN1dGFi
bGUqPihtX2NhbGxlZS0+dm0oKSwgZXhlY3V0YWJsZSk7CiAgICAgICAgIHJldHVybiBudWxscHRy
OwogICAgIH0KIAogICAgIE5hdGl2ZUV4ZWN1dGFibGUqIG5hdGl2ZUV4ZWN1dGFibGUoKSBjb25z
dAogICAgIHsKICAgICAgICAgaWYgKEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlID0gdGhpcy0+
ZXhlY3V0YWJsZSgpKQotICAgICAgICAgICAgcmV0dXJuIGpzRHluYW1pY0Nhc3Q8TmF0aXZlRXhl
Y3V0YWJsZSo+KCptX2NhbGxlZS0+dm0oKSwgZXhlY3V0YWJsZSk7CisgICAgICAgICAgICByZXR1
cm4ganNEeW5hbWljQ2FzdDxOYXRpdmVFeGVjdXRhYmxlKj4obV9jYWxsZWUtPnZtKCksIGV4ZWN1
dGFibGUpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAyNDkxMjgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjI5LDcgKzIyOSw3IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wU291cmNlKFBy
aW50U3RyZWFtJiAKICAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4ZWN1dGFi
bGUgPSByZWludGVycHJldF9jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpOwog
ICAgICAgICBTdHJpbmdWaWV3IHNvdXJjZSA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+c291cmNlKCku
cHJvdmlkZXIoKS0+Z2V0UmFuZ2UoCiAgICAgICAgICAgICBmdW5jdGlvbkV4ZWN1dGFibGUtPnBh
cmFtZXRlcnNTdGFydE9mZnNldCgpLAotICAgICAgICAgICAgZnVuY3Rpb25FeGVjdXRhYmxlLT50
eXBlUHJvZmlsaW5nRW5kT2Zmc2V0KCp2bSgpKSArIDEpOyAvLyBUeXBlIHByb2ZpbGluZyBlbmQg
b2Zmc2V0IGlzIHRoZSBjaGFyYWN0ZXIgYmVmb3JlIHRoZSAnfScuCisgICAgICAgICAgICBmdW5j
dGlvbkV4ZWN1dGFibGUtPnR5cGVQcm9maWxpbmdFbmRPZmZzZXQodm0oKSkgKyAxKTsgLy8gVHlw
ZSBwcm9maWxpbmcgZW5kIG9mZnNldCBpcyB0aGUgY2hhcmFjdGVyIGJlZm9yZSB0aGUgJ30nLgog
ICAgICAgICAKICAgICAgICAgb3V0LnByaW50KCJmdW5jdGlvbiAiLCBpbmZlcnJlZE5hbWUoKSwg
c291cmNlKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMjgyLDggKzI4Miw4IEBAIHByaXZhdGU6CiAK
IH0gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQogCi1Db2RlQmxvY2s6OkNvZGVCbG9jayhWTSogdm0s
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBDb3B5UGFyc2VkQmxvY2tUYWcsIENvZGVCbG9jayYgb3Ro
ZXIpCi0gICAgOiBKU0NlbGwoKnZtLCBzdHJ1Y3R1cmUpCitDb2RlQmxvY2s6OkNvZGVCbG9jayhW
TSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBDb3B5UGFyc2VkQmxvY2tUYWcsIENvZGVCbG9j
ayYgb3RoZXIpCisgICAgOiBKU0NlbGwodm0sIHN0cnVjdHVyZSkKICAgICAsIG1fZ2xvYmFsT2Jq
ZWN0KG90aGVyLm1fZ2xvYmFsT2JqZWN0KQogICAgICwgbV9zaG91bGRBbHdheXNCZUlubGluZWQo
dHJ1ZSkKICNpZiBFTkFCTEUoSklUKQpAQCAtMzAxLDggKzMwMSw4IEBAIENvZGVCbG9jazo6Q29k
ZUJsb2NrKFZNKiB2bSwgU3RydWN0dXJlKiAKICAgICAsIG1fYnl0ZWNvZGVDb3N0KG90aGVyLm1f
Ynl0ZWNvZGVDb3N0KQogICAgICwgbV9zY29wZVJlZ2lzdGVyKG90aGVyLm1fc2NvcGVSZWdpc3Rl
cikKICAgICAsIG1faGFzaChvdGhlci5tX2hhc2gpCi0gICAgLCBtX3VubGlua2VkQ29kZSgqb3Ro
ZXIudm0oKSwgdGhpcywgb3RoZXIubV91bmxpbmtlZENvZGUuZ2V0KCkpCi0gICAgLCBtX293bmVy
RXhlY3V0YWJsZSgqb3RoZXIudm0oKSwgdGhpcywgb3RoZXIubV9vd25lckV4ZWN1dGFibGUuZ2V0
KCkpCisgICAgLCBtX3VubGlua2VkQ29kZShvdGhlci52bSgpLCB0aGlzLCBvdGhlci5tX3VubGlu
a2VkQ29kZS5nZXQoKSkKKyAgICAsIG1fb3duZXJFeGVjdXRhYmxlKG90aGVyLnZtKCksIHRoaXMs
IG90aGVyLm1fb3duZXJFeGVjdXRhYmxlLmdldCgpKQogICAgICwgbV92bShvdGhlci5tX3ZtKQog
ICAgICwgbV9pbnN0cnVjdGlvbnNSYXdQb2ludGVyKG90aGVyLm1faW5zdHJ1Y3Rpb25zUmF3UG9p
bnRlcikKICAgICAsIG1fY29uc3RhbnRSZWdpc3RlcnMob3RoZXIubV9jb25zdGFudFJlZ2lzdGVy
cykKQEAgLTMyMSw3ICszMjEsNyBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhWTSogdm0sIFN0cnVj
dHVyZSogCiAgICAgQVNTRVJUKHNvdXJjZSgpLnByb3ZpZGVyKCkpOwogICAgIHNldE51bVBhcmFt
ZXRlcnMob3RoZXIubnVtUGFyYW1ldGVycygpKTsKICAgICAKLSAgICB2bS0+aGVhcC5jb2RlQmxv
Y2tTZXQoKS5hZGQodGhpcyk7CisgICAgdm0uaGVhcC5jb2RlQmxvY2tTZXQoKS5hZGQodGhpcyk7
CiB9CiAKIHZvaWQgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIENvcHlQYXJzZWRC
bG9ja1RhZywgQ29kZUJsb2NrJiBvdGhlcikKQEAgLTM0MSw5ICszNDEsOSBAQCB2b2lkIENvZGVC
bG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBDCiAgICAgfQogfQogCi1Db2RlQmxvY2s6OkNv
ZGVCbG9jayhWTSogdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBTY3JpcHRFeGVjdXRhYmxlKiBv
d25lckV4ZWN1dGFibGUsIFVubGlua2VkQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9jaywgSlNT
Y29wZSogc2NvcGUpCi0gICAgOiBKU0NlbGwoKnZtLCBzdHJ1Y3R1cmUpCi0gICAgLCBtX2dsb2Jh
bE9iamVjdCgqdm0sIHRoaXMsIHNjb3BlLT5nbG9iYWxPYmplY3QoKnZtKSkKK0NvZGVCbG9jazo6
Q29kZUJsb2NrKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFNjcmlwdEV4ZWN1dGFibGUq
IG93bmVyRXhlY3V0YWJsZSwgVW5saW5rZWRDb2RlQmxvY2sqIHVubGlua2VkQ29kZUJsb2NrLCBK
U1Njb3BlKiBzY29wZSkKKyAgICA6IEpTQ2VsbCh2bSwgc3RydWN0dXJlKQorICAgICwgbV9nbG9i
YWxPYmplY3Qodm0sIHRoaXMsIHNjb3BlLT5nbG9iYWxPYmplY3Qodm0pKQogICAgICwgbV9zaG91
bGRBbHdheXNCZUlubGluZWQodHJ1ZSkKICNpZiBFTkFCTEUoSklUKQogICAgICwgbV9jYXBhYmls
aXR5TGV2ZWxTdGF0ZShERkc6OkNhcGFiaWxpdHlMZXZlbE5vdFNldCkKQEAgLTM1Nyw5ICszNTcs
OSBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhWTSogdm0sIFN0cnVjdHVyZSogCiAgICAgLCBtX3N0
ZXBwaW5nTW9kZShTdGVwcGluZ01vZGVEaXNhYmxlZCkKICAgICAsIG1fbnVtQnJlYWtwb2ludHMo
MCkKICAgICAsIG1fc2NvcGVSZWdpc3Rlcih1bmxpbmtlZENvZGVCbG9jay0+c2NvcGVSZWdpc3Rl
cigpKQotICAgICwgbV91bmxpbmtlZENvZGUoKnZtLCB0aGlzLCB1bmxpbmtlZENvZGVCbG9jaykK
LSAgICAsIG1fb3duZXJFeGVjdXRhYmxlKCp2bSwgdGhpcywgb3duZXJFeGVjdXRhYmxlKQotICAg
ICwgbV92bSh2bSkKKyAgICAsIG1fdW5saW5rZWRDb2RlKHZtLCB0aGlzLCB1bmxpbmtlZENvZGVC
bG9jaykKKyAgICAsIG1fb3duZXJFeGVjdXRhYmxlKHZtLCB0aGlzLCBvd25lckV4ZWN1dGFibGUp
CisgICAgLCBtX3ZtKCZ2bSkKICAgICAsIG1faW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcih1bmxpbmtl
ZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkucmF3UG9pbnRlcigpKQogICAgICwgbV9vc3JFeGl0
Q291bnRlcigwKQogICAgICwgbV9vcHRpbWl6YXRpb25EZWxheUNvdW50ZXIoMCkKQEAgLTM3Myw3
ICszNzMsNyBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhWTSogdm0sIFN0cnVjdHVyZSogCiAgICAg
QVNTRVJUKHNvdXJjZSgpLnByb3ZpZGVyKCkpOwogICAgIHNldE51bVBhcmFtZXRlcnModW5saW5r
ZWRDb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSk7CiAgICAgCi0gICAgdm0tPmhlYXAuY29kZUJs
b2NrU2V0KCkuYWRkKHRoaXMpOworICAgIHZtLmhlYXAuY29kZUJsb2NrU2V0KCkuYWRkKHRoaXMp
OwogfQogCiAvLyBUaGUgbWFpbiBwdXJwb3NlIG9mIHRoaXMgZnVuY3Rpb24gaXMgdG8gZ2VuZXJh
dGUgbGlua2VkIGJ5dGVjb2RlIGZyb20gdW5saW5rZWQgYnl0ZWNvZGUuIFRoZSBwcm9jZXNzCkBA
IC04ODAsNyArODgwLDcgQEAgdm9pZCBDb2RlQmxvY2s6OnNldENvbnN0YW50SWRlbnRpZmllclNl
dAogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogCiAgICAgICAg
IGZvciAoYXV0byBzZXRFbnRyeSA6IHNldCkgewotICAgICAgICAgICAgSlNTdHJpbmcqIGpzU3Ry
aW5nID0ganNPd25lZFN0cmluZygmdm0sIHNldEVudHJ5LmdldCgpKTsgCisgICAgICAgICAgICBK
U1N0cmluZyoganNTdHJpbmcgPSBqc093bmVkU3RyaW5nKHZtLCBzZXRFbnRyeS5nZXQoKSk7IAog
ICAgICAgICAgICAganNTZXQtPmFkZChleGVjLCBqc1N0cmluZyk7CiAgICAgICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogICAgICAgICB9CkBAIC05NDAsNyArOTQw
LDcgQEAgdm9pZCBDb2RlQmxvY2s6OnNldE51bVBhcmFtZXRlcnMoaW50IG5ldwogewogICAgIG1f
bnVtUGFyYW1ldGVycyA9IG5ld1ZhbHVlOwogCi0gICAgbV9hcmd1bWVudFZhbHVlUHJvZmlsZXMg
PSBSZWZDb3VudGVkQXJyYXk8VmFsdWVQcm9maWxlPih2bSgpLT5jYW5Vc2VKSVQoKSA/IG5ld1Zh
bHVlIDogMCk7CisgICAgbV9hcmd1bWVudFZhbHVlUHJvZmlsZXMgPSBSZWZDb3VudGVkQXJyYXk8
VmFsdWVQcm9maWxlPih2bSgpLmNhblVzZUpJVCgpID8gbmV3VmFsdWUgOiAwKTsKIH0KIAogQ29k
ZUJsb2NrKiBDb2RlQmxvY2s6OnNwZWNpYWxPU1JFbnRyeUJsb2NrT3JOdWxsKCkKQEAgLTEzNjUs
NyArMTM2NSw3IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZUJhc2VsaW5lSklUSW5saW4KIHsK
ICAgICBpZiAoYXV0byogaml0RGF0YSA9IG1faml0RGF0YS5nZXQoKSkgewogICAgICAgICBmb3Ig
KENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvIDogaml0RGF0YS0+bV9jYWxsTGlua0luZm9zKQot
ICAgICAgICAgICAgY2FsbExpbmtJbmZvLT52aXNpdFdlYWsoKnZtKCkpOworICAgICAgICAgICAg
Y2FsbExpbmtJbmZvLT52aXNpdFdlYWsodm0oKSk7CiAKICAgICAgICAgZm9yIChTdHJ1Y3R1cmVT
dHViSW5mbyogc3R1YkluZm8gOiBqaXREYXRhLT5tX3N0dWJJbmZvcykKICAgICAgICAgICAgIHN0
dWJJbmZvLT52aXNpdFdlYWtSZWZlcmVuY2VzKHRoaXMpOwpAQCAtMTkzNiw5ICsxOTM2LDkgQEAg
dm9pZCBDb2RlQmxvY2s6OnVubGlua0luY29taW5nQ2FsbHMoKQogICAgIH0KICAgICBpZiAoaml0
RGF0YSkgewogICAgICAgICB3aGlsZSAoaml0RGF0YS0+bV9pbmNvbWluZ0NhbGxzLmJlZ2luKCkg
IT0gaml0RGF0YS0+bV9pbmNvbWluZ0NhbGxzLmVuZCgpKQotICAgICAgICAgICAgaml0RGF0YS0+
bV9pbmNvbWluZ0NhbGxzLmJlZ2luKCktPnVubGluaygqdm0oKSk7CisgICAgICAgICAgICBqaXRE
YXRhLT5tX2luY29taW5nQ2FsbHMuYmVnaW4oKS0+dW5saW5rKHZtKCkpOwogICAgICAgICB3aGls
ZSAoaml0RGF0YS0+bV9pbmNvbWluZ1BvbHltb3JwaGljQ2FsbHMuYmVnaW4oKSAhPSBqaXREYXRh
LT5tX2luY29taW5nUG9seW1vcnBoaWNDYWxscy5lbmQoKSkKLSAgICAgICAgICAgIGppdERhdGEt
Pm1faW5jb21pbmdQb2x5bW9ycGhpY0NhbGxzLmJlZ2luKCktPnVubGluaygqdm0oKSk7CisgICAg
ICAgICAgICBqaXREYXRhLT5tX2luY29taW5nUG9seW1vcnBoaWNDYWxscy5iZWdpbigpLT51bmxp
bmsodm0oKSk7CiAgICAgfQogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiB9CkBAIC0xOTU3LDcgKzE5
NTcsNyBAQCBDb2RlQmxvY2sqIENvZGVCbG9jazo6bmV3UmVwbGFjZW1lbnQoKQogI2lmIEVOQUJM
RShKSVQpCiBDb2RlQmxvY2sqIENvZGVCbG9jazo6cmVwbGFjZW1lbnQoKQogewotICAgIGNvbnN0
IENsYXNzSW5mbyogY2xhc3NJbmZvID0gdGhpcy0+Y2xhc3NJbmZvKCp2bSgpKTsKKyAgICBjb25z
dCBDbGFzc0luZm8qIGNsYXNzSW5mbyA9IHRoaXMtPmNsYXNzSW5mbyh2bSgpKTsKIAogICAgIGlm
IChjbGFzc0luZm8gPT0gRnVuY3Rpb25Db2RlQmxvY2s6OmluZm8oKSkKICAgICAgICAgcmV0dXJu
IGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihvd25lckV4ZWN1dGFibGUoKSktPmNvZGVCbG9j
a0Zvcihpc0NvbnN0cnVjdG9yKCkgPyBDb2RlRm9yQ29uc3RydWN0IDogQ29kZUZvckNhbGwpOwpA
QCAtMTk3Nyw3ICsxOTc3LDcgQEAgQ29kZUJsb2NrKiBDb2RlQmxvY2s6OnJlcGxhY2VtZW50KCkK
IAogREZHOjpDYXBhYmlsaXR5TGV2ZWwgQ29kZUJsb2NrOjpjb21wdXRlQ2FwYWJpbGl0eUxldmVs
KCkKIHsKLSAgICBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbyA9IHRoaXMtPmNsYXNzSW5mbygq
dm0oKSk7CisgICAgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8gPSB0aGlzLT5jbGFzc0luZm8o
dm0oKSk7CiAKICAgICBpZiAoY2xhc3NJbmZvID09IEZ1bmN0aW9uQ29kZUJsb2NrOjppbmZvKCkp
IHsKICAgICAgICAgaWYgKGlzQ29uc3RydWN0b3IoKSkKQEAgLTIyMzEsNyArMjIzMSw3IEBAIHZv
aWQgQ29kZUJsb2NrOjpub3RpY2VJbmNvbWluZ0NhbGwoRXhlY1MKIAogICAgIC8vIFJlY3Vyc2l2
ZSBjYWxscyB3b24ndCBiZSBpbmxpbmVkLgogICAgIFJlY3Vyc2lvbkNoZWNrRnVuY3RvciBmdW5j
dG9yKGNhbGxlckZyYW1lLCB0aGlzLCBPcHRpb25zOjptYXhpbXVtSW5saW5pbmdEZXB0aCgpKTsK
LSAgICB2bSgpLT50b3BDYWxsRnJhbWUtPml0ZXJhdGUoZnVuY3Rvcik7CisgICAgdm0oKS50b3BD
YWxsRnJhbWUtPml0ZXJhdGUoZnVuY3Rvcik7CiAKICAgICBpZiAoZnVuY3Rvci5kaWRSZWN1cnNl
KCkpIHsKICAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VDYWxsTGluaygpKQpAQCAtMjk0OCw3
ICsyOTQ4LDcgQEAgU3RyaW5nIENvZGVCbG9jazo6bmFtZUZvclJlZ2lzdGVyKFZpcnR1YQogICAg
IGZvciAoYXV0byYgY29uc3RhbnRSZWdpc3RlciA6IG1fY29uc3RhbnRSZWdpc3RlcnMpIHsKICAg
ICAgICAgaWYgKGNvbnN0YW50UmVnaXN0ZXIuZ2V0KCkuaXNFbXB0eSgpKQogICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIGlmIChTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUgPSBqc0R5bmFt
aWNDYXN0PFN5bWJvbFRhYmxlKj4oKnZtKCksIGNvbnN0YW50UmVnaXN0ZXIuZ2V0KCkpKSB7Cisg
ICAgICAgIGlmIChTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUgPSBqc0R5bmFtaWNDYXN0PFN5bWJv
bFRhYmxlKj4odm0oKSwgY29uc3RhbnRSZWdpc3Rlci5nZXQoKSkpIHsKICAgICAgICAgICAgIENv
bmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoc3ltYm9sVGFibGUtPm1fbG9jayk7CiAgICAgICAgICAg
ICBhdXRvIGVuZCA9IHN5bWJvbFRhYmxlLT5lbmQobG9ja2VyKTsKICAgICAgICAgICAgIGZvciAo
YXV0byBwdHIgPSBzeW1ib2xUYWJsZS0+YmVnaW4obG9ja2VyKTsgcHRyICE9IGVuZDsgKytwdHIp
IHsKQEAgLTMxNzQsMTEgKzMxNzQsMTEgQEAgdm9pZCBDb2RlQmxvY2s6Omluc2VydEJhc2ljQmxv
Y2tCb3VuZGFyaQogICAgICAgICAvLyBtOiBvcF9wcm9maWxlX2NvbnRyb2xfZmxvdwogICAgICAg
ICBpZiAoYmFzaWNCbG9ja0VuZE9mZnNldCA8IGJhc2ljQmxvY2tTdGFydE9mZnNldCkgewogICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaSArIDEgPCBvZmZzZXRzTGVuZ3RoKTsgLy8gV2Ugc2hv
dWxkIG5ldmVyIGVuY291bnRlciBkdW1teSBibG9ja3MgYXQgdGhlIGVuZCBvZiBhIENvZGVCbG9j
ay4KLSAgICAgICAgICAgIG1ldGFkYXRhLm1fYmFzaWNCbG9ja0xvY2F0aW9uID0gdm0oKS0+Y29u
dHJvbEZsb3dQcm9maWxlcigpLT5kdW1teUJhc2ljQmxvY2soKTsKKyAgICAgICAgICAgIG1ldGFk
YXRhLm1fYmFzaWNCbG9ja0xvY2F0aW9uID0gdm0oKS5jb250cm9sRmxvd1Byb2ZpbGVyKCktPmR1
bW15QmFzaWNCbG9jaygpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAg
ICAgICBCYXNpY0Jsb2NrTG9jYXRpb24qIGJhc2ljQmxvY2tMb2NhdGlvbiA9IHZtKCktPmNvbnRy
b2xGbG93UHJvZmlsZXIoKS0+Z2V0QmFzaWNCbG9ja0xvY2F0aW9uKG93bmVyRXhlY3V0YWJsZSgp
LT5zb3VyY2VJRCgpLCBiYXNpY0Jsb2NrU3RhcnRPZmZzZXQsIGJhc2ljQmxvY2tFbmRPZmZzZXQp
OworICAgICAgICBCYXNpY0Jsb2NrTG9jYXRpb24qIGJhc2ljQmxvY2tMb2NhdGlvbiA9IHZtKCku
Y29udHJvbEZsb3dQcm9maWxlcigpLT5nZXRCYXNpY0Jsb2NrTG9jYXRpb24ob3duZXJFeGVjdXRh
YmxlKCktPnNvdXJjZUlEKCksIGJhc2ljQmxvY2tTdGFydE9mZnNldCwgYmFzaWNCbG9ja0VuZE9m
ZnNldCk7CiAKICAgICAgICAgLy8gRmluZCBhbGwgZnVuY3Rpb25zIHRoYXQgYXJlIGVuY2xvc2Vk
IHdpdGhpbiB0aGUgcmFuZ2U6IFtiYXNpY0Jsb2NrU3RhcnRPZmZzZXQsIGJhc2ljQmxvY2tFbmRP
ZmZzZXRdCiAgICAgICAgIC8vIGFuZCBpbnNlcnQgdGhlc2UgZnVuY3Rpb25zJyBzdGFydC9lbmQg
b2Zmc2V0cyBhcyBnYXBzIGluIHRoZSBjdXJyZW50IEJhc2ljQmxvY2tMb2NhdGlvbi4KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDI0
OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29y
a2luZyBjb3B5KQpAQCAtMTIwLDggKzEyMCw4IEBAIHB1YmxpYzoKICAgICBERUNMQVJFX0lORk87
CiAKIHByb3RlY3RlZDoKLSAgICBDb2RlQmxvY2soVk0qLCBTdHJ1Y3R1cmUqLCBDb3B5UGFyc2Vk
QmxvY2tUYWcsIENvZGVCbG9jayYgb3RoZXIpOwotICAgIENvZGVCbG9jayhWTSosIFN0cnVjdHVy
ZSosIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rZWRDb2RlQmxvY2sq
LCBKU1Njb3BlKik7CisgICAgQ29kZUJsb2NrKFZNJiwgU3RydWN0dXJlKiwgQ29weVBhcnNlZEJs
b2NrVGFnLCBDb2RlQmxvY2smIG90aGVyKTsKKyAgICBDb2RlQmxvY2soVk0mLCBTdHJ1Y3R1cmUq
LCBTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGlua2VkQ29kZUJsb2NrKiwg
SlNTY29wZSopOwogCiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIENvcHlQYXJzZWRCbG9j
a1RhZywgQ29kZUJsb2NrJiBvdGhlcik7CiAgICAgYm9vbCBmaW5pc2hDcmVhdGlvbihWTSYsIFNj
cmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rZWRDb2RlQmxvY2sqLCBKU1Nj
b3BlKik7CkBAIC00MzYsNyArNDM2LDcgQEAgcHVibGljOgogICAgIAogICAgIEV4ZWN1dGFibGVU
b0NvZGVCbG9ja0VkZ2UqIG93bmVyRWRnZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3duZXJFZGdlLmdl
dCgpOyB9CiAKLSAgICBWTSogdm0oKSBjb25zdCB7IHJldHVybiBtX3ZtOyB9CisgICAgVk0mIHZt
KCkgY29uc3QgeyByZXR1cm4gKm1fdm07IH0KIAogICAgIFZpcnR1YWxSZWdpc3RlciB0aGlzUmVn
aXN0ZXIoKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+dGhpc1JlZ2lzdGVyKCk7IH0K
IApAQCAtNDcyLDEzICs0NzIsMTMgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIG51bWJlck9mQXJn
dW1lbnRWYWx1ZVByb2ZpbGVzKCkKICAgICB7CiAgICAgICAgIEFTU0VSVChtX251bVBhcmFtZXRl
cnMgPj0gMCk7Ci0gICAgICAgIEFTU0VSVChtX2FyZ3VtZW50VmFsdWVQcm9maWxlcy5zaXplKCkg
PT0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fbnVtUGFyYW1ldGVycykgfHwgIXZtKCktPmNhblVz
ZUpJVCgpKTsKKyAgICAgICAgQVNTRVJUKG1fYXJndW1lbnRWYWx1ZVByb2ZpbGVzLnNpemUoKSA9
PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9udW1QYXJhbWV0ZXJzKSB8fCAhdm0oKS5jYW5Vc2VK
SVQoKSk7CiAgICAgICAgIHJldHVybiBtX2FyZ3VtZW50VmFsdWVQcm9maWxlcy5zaXplKCk7CiAg
ICAgfQogCiAgICAgVmFsdWVQcm9maWxlJiB2YWx1ZVByb2ZpbGVGb3JBcmd1bWVudCh1bnNpZ25l
ZCBhcmd1bWVudEluZGV4KQogICAgIHsKLSAgICAgICAgQVNTRVJUKHZtKCktPmNhblVzZUpJVCgp
KTsgLy8gVGhpcyBpcyBvbmx5IGNhbGxlZCBmcm9tIHRoZSB2YXJpb3VzIEpJVCBjb21waWxlcnMg
b3IgcGxhY2VzIHRoYXQgZmlyc3QgY2hlY2sgbnVtYmVyT2ZBcmd1bWVudFZhbHVlUHJvZmlsZXMg
YmVmb3JlIGNhbGxpbmcgdGhpcy4KKyAgICAgICAgQVNTRVJUKHZtKCkuY2FuVXNlSklUKCkpOyAv
LyBUaGlzIGlzIG9ubHkgY2FsbGVkIGZyb20gdGhlIHZhcmlvdXMgSklUIGNvbXBpbGVycyBvciBw
bGFjZXMgdGhhdCBmaXJzdCBjaGVjayBudW1iZXJPZkFyZ3VtZW50VmFsdWVQcm9maWxlcyBiZWZv
cmUgY2FsbGluZyB0aGlzLgogICAgICAgICBWYWx1ZVByb2ZpbGUmIHJlc3VsdCA9IG1fYXJndW1l
bnRWYWx1ZVByb2ZpbGVzW2FyZ3VtZW50SW5kZXhdOwogICAgICAgICByZXR1cm4gcmVzdWx0Owog
ICAgIH0KQEAgLTk3Miw2ICs5NzIsOCBAQCBwcml2YXRlOgogICAgIFdyaXRlQmFycmllcjxVbmxp
bmtlZENvZGVCbG9jaz4gbV91bmxpbmtlZENvZGU7CiAgICAgV3JpdGVCYXJyaWVyPFNjcmlwdEV4
ZWN1dGFibGU+IG1fb3duZXJFeGVjdXRhYmxlOwogICAgIFdyaXRlQmFycmllcjxFeGVjdXRhYmxl
VG9Db2RlQmxvY2tFZGdlPiBtX293bmVyRWRnZTsKKyAgICAvLyBtX3ZtIG11c3QgYmUgYSBwb2lu
dGVyIChpbnN0ZWFkIG9mIGEgcmVmZXJlbmNlKSBiZWNhdXNlIHRoZSBKU0NMTEludE9mZnNldHNF
eHRyYWN0b3IKKyAgICAvLyBjYW5ub3QgaGFuZGxlIGl0IGJlaW5nIGEgcmVmZXJlbmNlLgogICAg
IFZNKiBtX3ZtOwogCiAgICAgY29uc3Qgdm9pZCogbV9pbnN0cnVjdGlvbnNSYXdQb2ludGVyIHsg
bnVsbHB0ciB9OwpAQCAtMTA2MSw3ICsxMDYzLDcgQEAgRXhjZXB0aW9uKiBTY3JpcHRFeGVjdXRh
YmxlOjpwcmVwYXJlRm9yRQogI2RlZmluZSBDT0RFQkxPQ0tfTE9HX0VWRU5UKGNvZGVCbG9jaywg
c3VtbWFyeSwgZGV0YWlscykgXAogICAgIGRvIHsgXAogICAgICAgICBpZiAoY29kZUJsb2NrKSBc
Ci0gICAgICAgICAgICAoY29kZUJsb2NrLT52bSgpLT5sb2dFdmVudChjb2RlQmxvY2ssIHN1bW1h
cnksIFsmXSAoKSB7IHJldHVybiB0b0NTdHJpbmcgZGV0YWlsczsgfSkpOyBcCisgICAgICAgICAg
ICAoY29kZUJsb2NrLT52bSgpLmxvZ0V2ZW50KGNvZGVCbG9jaywgc3VtbWFyeSwgWyZdICgpIHsg
cmV0dXJuIHRvQ1N0cmluZyBkZXRhaWxzOyB9KSk7IFwKICAgICB9IHdoaWxlICgwKQogCiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EZWZlcnJlZFNvdXJjZUR1bXAuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EZWZlcnJlZFNv
dXJjZUR1bXAuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvRGVmZXJyZWRTb3VyY2VEdW1wLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMzLDE0
ICszMywxNCBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIERlZmVycmVkU291cmNlRHVtcDo6RGVmZXJy
ZWRTb3VyY2VEdW1wKENvZGVCbG9jayogY29kZUJsb2NrKQotICAgIDogbV9jb2RlQmxvY2soKmNv
ZGVCbG9jay0+dm0oKSwgY29kZUJsb2NrKQorICAgIDogbV9jb2RlQmxvY2soY29kZUJsb2NrLT52
bSgpLCBjb2RlQmxvY2spCiAgICAgLCBtX3Jvb3RKSVRUeXBlKEpJVFR5cGU6Ok5vbmUpCiB7CiB9
CiAKIERlZmVycmVkU291cmNlRHVtcDo6RGVmZXJyZWRTb3VyY2VEdW1wKENvZGVCbG9jayogY29k
ZUJsb2NrLCBDb2RlQmxvY2sqIHJvb3RDb2RlQmxvY2ssIEpJVFR5cGUgcm9vdEpJVFR5cGUsIHVu
c2lnbmVkIGNhbGxlckJ5dGVjb2RlSW5kZXgpCi0gICAgOiBtX2NvZGVCbG9jaygqY29kZUJsb2Nr
LT52bSgpLCBjb2RlQmxvY2spCi0gICAgLCBtX3Jvb3RDb2RlQmxvY2soKmNvZGVCbG9jay0+dm0o
KSwgcm9vdENvZGVCbG9jaykKKyAgICA6IG1fY29kZUJsb2NrKGNvZGVCbG9jay0+dm0oKSwgY29k
ZUJsb2NrKQorICAgICwgbV9yb290Q29kZUJsb2NrKGNvZGVCbG9jay0+dm0oKSwgcm9vdENvZGVC
bG9jaykKICAgICAsIG1fcm9vdEpJVFR5cGUocm9vdEpJVFR5cGUpCiAgICAgLCBtX2NhbGxlckJ5
dGVjb2RlSW5kZXgoY2FsbGVyQnl0ZWNvZGVJbmRleCkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9FdmFsQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V2YWxDb2RlQmxvY2suaAkocmV2aXNpb24gMjQ5MTI4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V2YWxDb2RlQmxvY2suaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAx
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDgg
Q2FtZXJvbiBad2FyaWNoIDxjd3p3YXJpY2hAdXdhdGVybG9vLmNhPgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dApAQCAtNDQsMTkgKzQ0LDE5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuICZ2bS5jb2RlQmxv
Y2tTcGFjZS5zcGFjZTsKICAgICB9CiAKLSAgICBzdGF0aWMgRXZhbENvZGVCbG9jayogY3JlYXRl
KFZNKiB2bSwgQ29weVBhcnNlZEJsb2NrVGFnLCBFdmFsQ29kZUJsb2NrJiBvdGhlcikKKyAgICBz
dGF0aWMgRXZhbENvZGVCbG9jayogY3JlYXRlKFZNJiB2bSwgQ29weVBhcnNlZEJsb2NrVGFnLCBF
dmFsQ29kZUJsb2NrJiBvdGhlcikKICAgICB7Ci0gICAgICAgIEV2YWxDb2RlQmxvY2sqIGluc3Rh
bmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8RXZhbENvZGVCbG9jaz4odm0tPmhlYXAp
KQotICAgICAgICAgICAgRXZhbENvZGVCbG9jayh2bSwgdm0tPmV2YWxDb2RlQmxvY2tTdHJ1Y3R1
cmUuZ2V0KCksIENvcHlQYXJzZWRCbG9jaywgb3RoZXIpOwotICAgICAgICBpbnN0YW5jZS0+Zmlu
aXNoQ3JlYXRpb24oKnZtLCBDb3B5UGFyc2VkQmxvY2ssIG90aGVyKTsKKyAgICAgICAgRXZhbENv
ZGVCbG9jayogaW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxFdmFsQ29kZUJs
b2NrPih2bS5oZWFwKSkKKyAgICAgICAgICAgIEV2YWxDb2RlQmxvY2sodm0sIHZtLmV2YWxDb2Rl
QmxvY2tTdHJ1Y3R1cmUuZ2V0KCksIENvcHlQYXJzZWRCbG9jaywgb3RoZXIpOworICAgICAgICBp
bnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24odm0sIENvcHlQYXJzZWRCbG9jaywgb3RoZXIpOwogICAg
ICAgICByZXR1cm4gaW5zdGFuY2U7CiAgICAgfQogCi0gICAgc3RhdGljIEV2YWxDb2RlQmxvY2sq
IGNyZWF0ZShWTSogdm0sIEV2YWxFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGlua2Vk
RXZhbENvZGVCbG9jayogdW5saW5rZWRDb2RlQmxvY2ssIEpTU2NvcGUqIHNjb3BlKQorICAgIHN0
YXRpYyBFdmFsQ29kZUJsb2NrKiBjcmVhdGUoVk0mIHZtLCBFdmFsRXhlY3V0YWJsZSogb3duZXJF
eGVjdXRhYmxlLCBVbmxpbmtlZEV2YWxDb2RlQmxvY2sqIHVubGlua2VkQ29kZUJsb2NrLCBKU1Nj
b3BlKiBzY29wZSkKICAgICB7Ci0gICAgICAgIEV2YWxDb2RlQmxvY2sqIGluc3RhbmNlID0gbmV3
IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8RXZhbENvZGVCbG9jaz4odm0tPmhlYXApKQotICAgICAg
ICAgICAgRXZhbENvZGVCbG9jayh2bSwgdm0tPmV2YWxDb2RlQmxvY2tTdHJ1Y3R1cmUuZ2V0KCks
IG93bmVyRXhlY3V0YWJsZSwgdW5saW5rZWRDb2RlQmxvY2ssIHNjb3BlKTsKLSAgICAgICAgaWYg
KCFpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24oKnZtLCBvd25lckV4ZWN1dGFibGUsIHVubGlua2Vk
Q29kZUJsb2NrLCBzY29wZSkpCisgICAgICAgIEV2YWxDb2RlQmxvY2sqIGluc3RhbmNlID0gbmV3
IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8RXZhbENvZGVCbG9jaz4odm0uaGVhcCkpCisgICAgICAg
ICAgICBFdmFsQ29kZUJsb2NrKHZtLCB2bS5ldmFsQ29kZUJsb2NrU3RydWN0dXJlLmdldCgpLCBv
d25lckV4ZWN1dGFibGUsIHVubGlua2VkQ29kZUJsb2NrLCBzY29wZSk7CisgICAgICAgIGlmICgh
aW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKHZtLCBvd25lckV4ZWN1dGFibGUsIHVubGlua2VkQ29k
ZUJsb2NrLCBzY29wZSkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgcmV0
dXJuIGluc3RhbmNlOwogICAgIH0KQEAgLTY5LDEyICs2OSwxMiBAQCBwdWJsaWM6CiAgICAgVW5s
aW5rZWRFdmFsQ29kZUJsb2NrKiB1bmxpbmtlZEV2YWxDb2RlQmxvY2soKSBjb25zdCB7IHJldHVy
biBqc0Nhc3Q8VW5saW5rZWRFdmFsQ29kZUJsb2NrKj4odW5saW5rZWRDb2RlQmxvY2soKSk7IH0K
IAogcHJpdmF0ZToKLSAgICBFdmFsQ29kZUJsb2NrKFZNKiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIENvcHlQYXJzZWRCbG9ja1RhZywgRXZhbENvZGVCbG9jayYgb3RoZXIpCisgICAgRXZhbENv
ZGVCbG9jayhWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBDb3B5UGFyc2VkQmxvY2tUYWcs
IEV2YWxDb2RlQmxvY2smIG90aGVyKQogICAgICAgICA6IEdsb2JhbENvZGVCbG9jayh2bSwgc3Ry
dWN0dXJlLCBDb3B5UGFyc2VkQmxvY2ssIG90aGVyKQogICAgIHsKICAgICB9CiAgICAgICAgIAot
ICAgIEV2YWxDb2RlQmxvY2soVk0qIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgRXZhbEV4ZWN1
dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rZWRFdmFsQ29kZUJsb2NrKiB1bmxpbmtlZENv
ZGVCbG9jaywgSlNTY29wZSogc2NvcGUpCisgICAgRXZhbENvZGVCbG9jayhWTSYgdm0sIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBFdmFsRXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmtl
ZEV2YWxDb2RlQmxvY2sqIHVubGlua2VkQ29kZUJsb2NrLCBKU1Njb3BlKiBzY29wZSkKICAgICAg
ICAgOiBHbG9iYWxDb2RlQmxvY2sodm0sIHN0cnVjdHVyZSwgb3duZXJFeGVjdXRhYmxlLCB1bmxp
bmtlZENvZGVCbG9jaywgc2NvcGUpCiAgICAgewogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9GdW5jdGlvbkNvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9GdW5jdGlvbkNvZGVCbG9jay5oCShyZXZpc2lvbiAy
NDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRnVuY3Rpb25Db2RlQmxv
Y2suaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDgtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDgtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmln
aHQgKEMpIDIwMDggQ2FtZXJvbiBad2FyaWNoIDxjd3p3YXJpY2hAdXdhdGVybG9vLmNhPgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dApAQCAtNDUsMTkgKzQ1LDE5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJu
ICZ2bS5jb2RlQmxvY2tTcGFjZS5zcGFjZTsKICAgICB9CiAKLSAgICBzdGF0aWMgRnVuY3Rpb25D
b2RlQmxvY2sqIGNyZWF0ZShWTSogdm0sIENvcHlQYXJzZWRCbG9ja1RhZywgRnVuY3Rpb25Db2Rl
QmxvY2smIG90aGVyKQorICAgIHN0YXRpYyBGdW5jdGlvbkNvZGVCbG9jayogY3JlYXRlKFZNJiB2
bSwgQ29weVBhcnNlZEJsb2NrVGFnLCBGdW5jdGlvbkNvZGVCbG9jayYgb3RoZXIpCiAgICAgewot
ICAgICAgICBGdW5jdGlvbkNvZGVCbG9jayogaW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFsbG9j
YXRlQ2VsbDxGdW5jdGlvbkNvZGVCbG9jaz4odm0tPmhlYXApKQotICAgICAgICAgICAgRnVuY3Rp
b25Db2RlQmxvY2sodm0sIHZtLT5mdW5jdGlvbkNvZGVCbG9ja1N0cnVjdHVyZS5nZXQoKSwgQ29w
eVBhcnNlZEJsb2NrLCBvdGhlcik7Ci0gICAgICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbigq
dm0sIENvcHlQYXJzZWRCbG9jaywgb3RoZXIpOworICAgICAgICBGdW5jdGlvbkNvZGVCbG9jayog
aW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxGdW5jdGlvbkNvZGVCbG9jaz4o
dm0uaGVhcCkpCisgICAgICAgICAgICBGdW5jdGlvbkNvZGVCbG9jayh2bSwgdm0uZnVuY3Rpb25D
b2RlQmxvY2tTdHJ1Y3R1cmUuZ2V0KCksIENvcHlQYXJzZWRCbG9jaywgb3RoZXIpOworICAgICAg
ICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24odm0sIENvcHlQYXJzZWRCbG9jaywgb3RoZXIpOwog
ICAgICAgICByZXR1cm4gaW5zdGFuY2U7CiAgICAgfQogCi0gICAgc3RhdGljIEZ1bmN0aW9uQ29k
ZUJsb2NrKiBjcmVhdGUoVk0qIHZtLCBGdW5jdGlvbkV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJs
ZSwgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayogdW5saW5rZWRDb2RlQmxvY2ssIEpTU2NvcGUq
IHNjb3BlKQorICAgIHN0YXRpYyBGdW5jdGlvbkNvZGVCbG9jayogY3JlYXRlKFZNJiB2bSwgRnVu
Y3Rpb25FeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGlua2VkRnVuY3Rpb25Db2RlQmxv
Y2sqIHVubGlua2VkQ29kZUJsb2NrLCBKU1Njb3BlKiBzY29wZSkKICAgICB7Ci0gICAgICAgIEZ1
bmN0aW9uQ29kZUJsb2NrKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEZ1
bmN0aW9uQ29kZUJsb2NrPih2bS0+aGVhcCkpCi0gICAgICAgICAgICBGdW5jdGlvbkNvZGVCbG9j
ayh2bSwgdm0tPmZ1bmN0aW9uQ29kZUJsb2NrU3RydWN0dXJlLmdldCgpLCBvd25lckV4ZWN1dGFi
bGUsIHVubGlua2VkQ29kZUJsb2NrLCBzY29wZSk7Ci0gICAgICAgIGlmICghaW5zdGFuY2UtPmZp
bmlzaENyZWF0aW9uKCp2bSwgb3duZXJFeGVjdXRhYmxlLCB1bmxpbmtlZENvZGVCbG9jaywgc2Nv
cGUpKQorICAgICAgICBGdW5jdGlvbkNvZGVCbG9jayogaW5zdGFuY2UgPSBuZXcgKE5vdE51bGws
IGFsbG9jYXRlQ2VsbDxGdW5jdGlvbkNvZGVCbG9jaz4odm0uaGVhcCkpCisgICAgICAgICAgICBG
dW5jdGlvbkNvZGVCbG9jayh2bSwgdm0uZnVuY3Rpb25Db2RlQmxvY2tTdHJ1Y3R1cmUuZ2V0KCks
IG93bmVyRXhlY3V0YWJsZSwgdW5saW5rZWRDb2RlQmxvY2ssIHNjb3BlKTsKKyAgICAgICAgaWYg
KCFpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24odm0sIG93bmVyRXhlY3V0YWJsZSwgdW5saW5rZWRD
b2RlQmxvY2ssIHNjb3BlKSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICBy
ZXR1cm4gaW5zdGFuY2U7CiAgICAgfQpAQCAtNjgsMTIgKzY4LDEyIEBAIHB1YmxpYzoKICAgICB9
CiAKIHByaXZhdGU6Ci0gICAgRnVuY3Rpb25Db2RlQmxvY2soVk0qIHZtLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgQ29weVBhcnNlZEJsb2NrVGFnLCBGdW5jdGlvbkNvZGVCbG9jayYgb3RoZXIpCisg
ICAgRnVuY3Rpb25Db2RlQmxvY2soVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQ29weVBh
cnNlZEJsb2NrVGFnLCBGdW5jdGlvbkNvZGVCbG9jayYgb3RoZXIpCiAgICAgICAgIDogQ29kZUJs
b2NrKHZtLCBzdHJ1Y3R1cmUsIENvcHlQYXJzZWRCbG9jaywgb3RoZXIpCiAgICAgewogICAgIH0K
IAotICAgIEZ1bmN0aW9uQ29kZUJsb2NrKFZNKiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEZ1
bmN0aW9uRXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJs
b2NrKiB1bmxpbmtlZENvZGVCbG9jaywgSlNTY29wZSogc2NvcGUpCisgICAgRnVuY3Rpb25Db2Rl
QmxvY2soVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgRnVuY3Rpb25FeGVjdXRhYmxlKiBv
d25lckV4ZWN1dGFibGUsIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2sqIHVubGlua2VkQ29kZUJs
b2NrLCBKU1Njb3BlKiBzY29wZSkKICAgICAgICAgOiBDb2RlQmxvY2sodm0sIHN0cnVjdHVyZSwg
b3duZXJFeGVjdXRhYmxlLCB1bmxpbmtlZENvZGVCbG9jaywgc2NvcGUpCiAgICAgewogICAgIH0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1
cy5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9HZXRCeUlkU3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQsNyArNTQsNyBAQCBib29s
IEdldEJ5SWRTdGF0dXM6OmFwcGVuZFZhcmlhbnQoY29uc3QgCiAKIEdldEJ5SWRTdGF0dXMgR2V0
QnlJZFN0YXR1czo6Y29tcHV0ZUZyb21MTEludChDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIHVu
c2lnbmVkIGJ5dGVjb2RlSW5kZXgsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCiB7Ci0gICAgVk0m
IHZtID0gKnByb2ZpbGVkQmxvY2stPnZtKCk7CisgICAgVk0mIHZtID0gcHJvZmlsZWRCbG9jay0+
dm0oKTsKICAgICAKICAgICBhdXRvIGluc3RydWN0aW9uID0gcHJvZmlsZWRCbG9jay0+aW5zdHJ1
Y3Rpb25zKCkuYXQoYnl0ZWNvZGVJbmRleCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9HbG9iYWxDb2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvR2xvYmFsQ29kZUJsb2NrLmgJKHJldmlzaW9uIDI0OTEyOCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HbG9iYWxDb2RlQmxvY2suaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAx
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDgg
Q2FtZXJvbiBad2FyaWNoIDxjd3p3YXJpY2hAdXdhdGVybG9vLmNhPgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dApAQCAtNDAsMTIgKzQwLDEyIEBAIGNsYXNzIEdsb2JhbENvZGVCbG9jayA6IHB1YmxpYyBDb2Rl
QmxvY2sKICAgICB0eXBlZGVmIENvZGVCbG9jayBCYXNlOwogCiBwcm90ZWN0ZWQ6Ci0gICAgR2xv
YmFsQ29kZUJsb2NrKFZNKiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIENvcHlQYXJzZWRCbG9j
a1RhZywgR2xvYmFsQ29kZUJsb2NrJiBvdGhlcikKKyAgICBHbG9iYWxDb2RlQmxvY2soVk0mIHZt
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQ29weVBhcnNlZEJsb2NrVGFnLCBHbG9iYWxDb2RlQmxv
Y2smIG90aGVyKQogICAgICAgICA6IENvZGVCbG9jayh2bSwgc3RydWN0dXJlLCBDb3B5UGFyc2Vk
QmxvY2ssIG90aGVyKQogICAgIHsKICAgICB9CiAKLSAgICBHbG9iYWxDb2RlQmxvY2soVk0qIHZt
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxl
LCBVbmxpbmtlZENvZGVCbG9jayogdW5saW5rZWRDb2RlQmxvY2ssIEpTU2NvcGUqIHNjb3BlKQor
ICAgIEdsb2JhbENvZGVCbG9jayhWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBTY3JpcHRF
eGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGlua2VkQ29kZUJsb2NrKiB1bmxpbmtlZENv
ZGVCbG9jaywgSlNTY29wZSogc2NvcGUpCiAgICAgICAgIDogQ29kZUJsb2NrKHZtLCBzdHJ1Y3R1
cmUsIG93bmVyRXhlY3V0YWJsZSwgdW5saW5rZWRDb2RlQmxvY2ssIHNjb3BlKQogICAgIHsKICAg
ICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTW9kdWxlUHJvZ3JhbUNv
ZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9N
b2R1bGVQcm9ncmFtQ29kZUJsb2NrLmgJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Nb2R1bGVQcm9ncmFtQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTkgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA4IENhbWVy
b24gWndhcmljaCA8Y3d6d2FyaWNoQHV3YXRlcmxvby5jYT4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAg
LTQ1LDE5ICs0NSwxOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiAmdm0uY29kZUJsb2NrU3Bh
Y2Uuc3BhY2U7CiAgICAgfQogCi0gICAgc3RhdGljIE1vZHVsZVByb2dyYW1Db2RlQmxvY2sqIGNy
ZWF0ZShWTSogdm0sIENvcHlQYXJzZWRCbG9ja1RhZywgTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayYg
b3RoZXIpCisgICAgc3RhdGljIE1vZHVsZVByb2dyYW1Db2RlQmxvY2sqIGNyZWF0ZShWTSYgdm0s
IENvcHlQYXJzZWRCbG9ja1RhZywgTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayYgb3RoZXIpCiAgICAg
ewotICAgICAgICBNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVs
bCwgYWxsb2NhdGVDZWxsPE1vZHVsZVByb2dyYW1Db2RlQmxvY2s+KHZtLT5oZWFwKSkKLSAgICAg
ICAgICAgIE1vZHVsZVByb2dyYW1Db2RlQmxvY2sodm0sIHZtLT5tb2R1bGVQcm9ncmFtQ29kZUJs
b2NrU3RydWN0dXJlLmdldCgpLCBDb3B5UGFyc2VkQmxvY2ssIG90aGVyKTsKLSAgICAgICAgaW5z
dGFuY2UtPmZpbmlzaENyZWF0aW9uKCp2bSwgQ29weVBhcnNlZEJsb2NrLCBvdGhlcik7CisgICAg
ICAgIE1vZHVsZVByb2dyYW1Db2RlQmxvY2sqIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxv
Y2F0ZUNlbGw8TW9kdWxlUHJvZ3JhbUNvZGVCbG9jaz4odm0uaGVhcCkpCisgICAgICAgICAgICBN
b2R1bGVQcm9ncmFtQ29kZUJsb2NrKHZtLCB2bS5tb2R1bGVQcm9ncmFtQ29kZUJsb2NrU3RydWN0
dXJlLmdldCgpLCBDb3B5UGFyc2VkQmxvY2ssIG90aGVyKTsKKyAgICAgICAgaW5zdGFuY2UtPmZp
bmlzaENyZWF0aW9uKHZtLCBDb3B5UGFyc2VkQmxvY2ssIG90aGVyKTsKICAgICAgICAgcmV0dXJu
IGluc3RhbmNlOwogICAgIH0KIAotICAgIHN0YXRpYyBNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKiBj
cmVhdGUoVk0qIHZtLCBNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBV
bmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2sqIHVubGlua2VkQ29kZUJsb2NrLCBKU1Njb3Bl
KiBzY29wZSkKKyAgICBzdGF0aWMgTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayogY3JlYXRlKFZNJiB2
bSwgTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rZWRNb2R1
bGVQcm9ncmFtQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9jaywgSlNTY29wZSogc2NvcGUpCiAg
ICAgewotICAgICAgICBNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKiBpbnN0YW5jZSA9IG5ldyAoTm90
TnVsbCwgYWxsb2NhdGVDZWxsPE1vZHVsZVByb2dyYW1Db2RlQmxvY2s+KHZtLT5oZWFwKSkKLSAg
ICAgICAgICAgIE1vZHVsZVByb2dyYW1Db2RlQmxvY2sodm0sIHZtLT5tb2R1bGVQcm9ncmFtQ29k
ZUJsb2NrU3RydWN0dXJlLmdldCgpLCBvd25lckV4ZWN1dGFibGUsIHVubGlua2VkQ29kZUJsb2Nr
LCBzY29wZSk7Ci0gICAgICAgIGlmICghaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKCp2bSwgb3du
ZXJFeGVjdXRhYmxlLCB1bmxpbmtlZENvZGVCbG9jaywgc2NvcGUpKQorICAgICAgICBNb2R1bGVQ
cm9ncmFtQ29kZUJsb2NrKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPE1v
ZHVsZVByb2dyYW1Db2RlQmxvY2s+KHZtLmhlYXApKQorICAgICAgICAgICAgTW9kdWxlUHJvZ3Jh
bUNvZGVCbG9jayh2bSwgdm0ubW9kdWxlUHJvZ3JhbUNvZGVCbG9ja1N0cnVjdHVyZS5nZXQoKSwg
b3duZXJFeGVjdXRhYmxlLCB1bmxpbmtlZENvZGVCbG9jaywgc2NvcGUpOworICAgICAgICBpZiAo
IWluc3RhbmNlLT5maW5pc2hDcmVhdGlvbih2bSwgb3duZXJFeGVjdXRhYmxlLCB1bmxpbmtlZENv
ZGVCbG9jaywgc2NvcGUpKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIHJl
dHVybiBpbnN0YW5jZTsKICAgICB9CkBAIC02OCwxMiArNjgsMTIgQEAgcHVibGljOgogICAgIH0K
IAogcHJpdmF0ZToKLSAgICBNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKFZNKiB2bSwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIENvcHlQYXJzZWRCbG9ja1RhZywgTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayYg
b3RoZXIpCisgICAgTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayhWTSYgdm0sIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBDb3B5UGFyc2VkQmxvY2tUYWcsIE1vZHVsZVByb2dyYW1Db2RlQmxvY2smIG90aGVy
KQogICAgICAgICA6IEdsb2JhbENvZGVCbG9jayh2bSwgc3RydWN0dXJlLCBDb3B5UGFyc2VkQmxv
Y2ssIG90aGVyKQogICAgIHsKICAgICB9CiAKLSAgICBNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKFZN
KiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlKiBvd25l
ckV4ZWN1dGFibGUsIFVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayogdW5saW5rZWRDb2Rl
QmxvY2ssIEpTU2NvcGUqIHNjb3BlKQorICAgIE1vZHVsZVByb2dyYW1Db2RlQmxvY2soVk0mIHZt
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUqIG93bmVyRXhl
Y3V0YWJsZSwgVW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9j
aywgSlNTY29wZSogc2NvcGUpCiAgICAgICAgIDogR2xvYmFsQ29kZUJsb2NrKHZtLCBzdHJ1Y3R1
cmUsIG93bmVyRXhlY3V0YWJsZSwgdW5saW5rZWRDb2RlQmxvY2ssIHNjb3BlKQogICAgIHsKICAg
ICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0QWxsb2NhdGlv
blByb2ZpbGVJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL09iamVjdEFsbG9jYXRpb25Qcm9maWxlSW5saW5lcy5oCShyZXZpc2lvbiAyNDkxMjgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0QWxsb2NhdGlvblByb2Zp
bGVJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTQ2LDcgKzE0Niw3IEBAIEFMV0FZU19JTkxJTkUg
dW5zaWduZWQgT2JqZWN0QWxsb2NhdGlvblAKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBzaXpl
X3QgY291bnQgPSAwOwotICAgIFByb3BlcnR5TmFtZUFycmF5IHByb3BlcnR5TmFtZUFycmF5KCZ2
bSwgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5nc0FuZFN5bWJvbHMsIFByaXZhdGVTeW1ib2xNb2Rl
OjpJbmNsdWRlKTsKKyAgICBQcm9wZXJ0eU5hbWVBcnJheSBwcm9wZXJ0eU5hbWVBcnJheSh2bSwg
UHJvcGVydHlOYW1lTW9kZTo6U3RyaW5nc0FuZFN5bWJvbHMsIFByaXZhdGVTeW1ib2xNb2RlOjpJ
bmNsdWRlKTsKICAgICBwcm90b3R5cGUtPnN0cnVjdHVyZSh2bSktPmdldFByb3BlcnR5TmFtZXNG
cm9tU3RydWN0dXJlKHZtLCBwcm9wZXJ0eU5hbWVBcnJheSwgRW51bWVyYXRpb25Nb2RlKCkpOwog
ICAgIFByb3BlcnR5TmFtZUFycmF5RGF0YTo6UHJvcGVydHlOYW1lVmVjdG9yJiBwcm9wZXJ0eU5h
bWVWZWN0b3IgPSBwcm9wZXJ0eU5hbWVBcnJheS5kYXRhKCktPnByb3BlcnR5TmFtZVZlY3Rvcigp
OwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcHJvcGVydHlOYW1lVmVjdG9yLnNpemUoKTsg
KytpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seVByb3RvQWNj
ZXNzQ2hhaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Qb2x5UHJvdG9BY2Nlc3NDaGFpbi5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5UHJvdG9BY2Nlc3NDaGFpbi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtNDAsNyArNDAsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8UG9seVByb3RvQWNjZXNzQ2hhaW4+
IFBvCiBzdGQ6OnVuaXF1ZV9wdHI8UG9seVByb3RvQWNjZXNzQ2hhaW4+IFBvbHlQcm90b0FjY2Vz
c0NoYWluOjpjcmVhdGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDZWxsKiBiYXNl
LCBKU09iamVjdCogdGFyZ2V0LCBib29sJiB1c2VzUG9seVByb3RvKQogewogICAgIEpTQ2VsbCog
Y3VycmVudCA9IGJhc2U7Ci0gICAgVk0mIHZtID0gKmJhc2UtPnZtKCk7CisgICAgVk0mIHZtID0g
YmFzZS0+dm0oKTsKIAogICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Byb2dyYW1Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJvZ3JhbUNvZGVCbG9jay5oCShyZXZpc2lv
biAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJvZ3JhbUNvZGVC
bG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwOC0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwOC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHly
aWdodCAoQykgMjAwOCBDYW1lcm9uIFp3YXJpY2ggPGN3endhcmljaEB1d2F0ZXJsb28uY2E+CiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CkBAIC00NSwxOSArNDUsMTkgQEAgcHVibGljOgogICAgICAgICByZXR1
cm4gJnZtLmNvZGVCbG9ja1NwYWNlLnNwYWNlOwogICAgIH0KIAotICAgIHN0YXRpYyBQcm9ncmFt
Q29kZUJsb2NrKiBjcmVhdGUoVk0qIHZtLCBDb3B5UGFyc2VkQmxvY2tUYWcsIFByb2dyYW1Db2Rl
QmxvY2smIG90aGVyKQorICAgIHN0YXRpYyBQcm9ncmFtQ29kZUJsb2NrKiBjcmVhdGUoVk0mIHZt
LCBDb3B5UGFyc2VkQmxvY2tUYWcsIFByb2dyYW1Db2RlQmxvY2smIG90aGVyKQogICAgIHsKLSAg
ICAgICAgUHJvZ3JhbUNvZGVCbG9jayogaW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRl
Q2VsbDxQcm9ncmFtQ29kZUJsb2NrPih2bS0+aGVhcCkpCi0gICAgICAgICAgICBQcm9ncmFtQ29k
ZUJsb2NrKHZtLCB2bS0+cHJvZ3JhbUNvZGVCbG9ja1N0cnVjdHVyZS5nZXQoKSwgQ29weVBhcnNl
ZEJsb2NrLCBvdGhlcik7Ci0gICAgICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbigqdm0sIENv
cHlQYXJzZWRCbG9jaywgb3RoZXIpOworICAgICAgICBQcm9ncmFtQ29kZUJsb2NrKiBpbnN0YW5j
ZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFByb2dyYW1Db2RlQmxvY2s+KHZtLmhlYXAp
KQorICAgICAgICAgICAgUHJvZ3JhbUNvZGVCbG9jayh2bSwgdm0ucHJvZ3JhbUNvZGVCbG9ja1N0
cnVjdHVyZS5nZXQoKSwgQ29weVBhcnNlZEJsb2NrLCBvdGhlcik7CisgICAgICAgIGluc3RhbmNl
LT5maW5pc2hDcmVhdGlvbih2bSwgQ29weVBhcnNlZEJsb2NrLCBvdGhlcik7CiAgICAgICAgIHJl
dHVybiBpbnN0YW5jZTsKICAgICB9CiAKLSAgICBzdGF0aWMgUHJvZ3JhbUNvZGVCbG9jayogY3Jl
YXRlKFZNKiB2bSwgUHJvZ3JhbUV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rZWRQ
cm9ncmFtQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9jaywgSlNTY29wZSogc2NvcGUpCisgICAg
c3RhdGljIFByb2dyYW1Db2RlQmxvY2sqIGNyZWF0ZShWTSYgdm0sIFByb2dyYW1FeGVjdXRhYmxl
KiBvd25lckV4ZWN1dGFibGUsIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jayogdW5saW5rZWRDb2Rl
QmxvY2ssIEpTU2NvcGUqIHNjb3BlKQogICAgIHsKLSAgICAgICAgUHJvZ3JhbUNvZGVCbG9jayog
aW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxQcm9ncmFtQ29kZUJsb2NrPih2
bS0+aGVhcCkpCi0gICAgICAgICAgICBQcm9ncmFtQ29kZUJsb2NrKHZtLCB2bS0+cHJvZ3JhbUNv
ZGVCbG9ja1N0cnVjdHVyZS5nZXQoKSwgb3duZXJFeGVjdXRhYmxlLCB1bmxpbmtlZENvZGVCbG9j
aywgc2NvcGUpOwotICAgICAgICBpZiAoIWluc3RhbmNlLT5maW5pc2hDcmVhdGlvbigqdm0sIG93
bmVyRXhlY3V0YWJsZSwgdW5saW5rZWRDb2RlQmxvY2ssIHNjb3BlKSkKKyAgICAgICAgUHJvZ3Jh
bUNvZGVCbG9jayogaW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxQcm9ncmFt
Q29kZUJsb2NrPih2bS5oZWFwKSkKKyAgICAgICAgICAgIFByb2dyYW1Db2RlQmxvY2sodm0sIHZt
LnByb2dyYW1Db2RlQmxvY2tTdHJ1Y3R1cmUuZ2V0KCksIG93bmVyRXhlY3V0YWJsZSwgdW5saW5r
ZWRDb2RlQmxvY2ssIHNjb3BlKTsKKyAgICAgICAgaWYgKCFpbnN0YW5jZS0+ZmluaXNoQ3JlYXRp
b24odm0sIG93bmVyRXhlY3V0YWJsZSwgdW5saW5rZWRDb2RlQmxvY2ssIHNjb3BlKSkKICAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICByZXR1cm4gaW5zdGFuY2U7CiAgICAgfQpA
QCAtNjgsMTIgKzY4LDEyIEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgUHJvZ3Jh
bUNvZGVCbG9jayhWTSogdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBDb3B5UGFyc2VkQmxvY2tU
YWcsIFByb2dyYW1Db2RlQmxvY2smIG90aGVyKQorICAgIFByb2dyYW1Db2RlQmxvY2soVk0mIHZt
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQ29weVBhcnNlZEJsb2NrVGFnLCBQcm9ncmFtQ29kZUJs
b2NrJiBvdGhlcikKICAgICAgICAgOiBHbG9iYWxDb2RlQmxvY2sodm0sIHN0cnVjdHVyZSwgQ29w
eVBhcnNlZEJsb2NrLCBvdGhlcikKICAgICB7CiAgICAgfQogCi0gICAgUHJvZ3JhbUNvZGVCbG9j
ayhWTSogdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9ncmFtRXhlY3V0YWJsZSogb3duZXJF
eGVjdXRhYmxlLCBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2sqIHVubGlua2VkQ29kZUJsb2NrLCBK
U1Njb3BlKiBzY29wZSkKKyAgICBQcm9ncmFtQ29kZUJsb2NrKFZNJiB2bSwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIFByb2dyYW1FeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGlua2VkUHJv
Z3JhbUNvZGVCbG9jayogdW5saW5rZWRDb2RlQmxvY2ssIEpTU2NvcGUqIHNjb3BlKQogICAgICAg
ICA6IEdsb2JhbENvZGVCbG9jayh2bSwgc3RydWN0dXJlLCBvd25lckV4ZWN1dGFibGUsIHVubGlu
a2VkQ29kZUJsb2NrLCBzY29wZSkKICAgICB7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1Byb3BlcnR5Q29uZGl0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJvcGVydHlDb25kaXRpb24uY3BwCShyZXZpc2lv
biAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJvcGVydHlDb25k
aXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNS0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzIwLDggKzMyMCw3IEBAIGJvb2wgUHJvcGVy
dHlDb25kaXRpb246OmlzV2F0Y2hhYmxlV2hlblYKICAgICAgICAgICAgIHNldCA9IHN0cnVjdHVy
ZS0+cHJvcGVydHlSZXBsYWNlbWVudFdhdGNocG9pbnRTZXQob2Zmc2V0KTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBjYXNlIEVuc3VyZVdhdGNoYWJpbGl0eToKLSAgICAgICAgICAgIHNl
dCA9IHN0cnVjdHVyZS0+ZW5zdXJlUHJvcGVydHlSZXBsYWNlbWVudFdhdGNocG9pbnRTZXQoCi0g
ICAgICAgICAgICAgICAgKnN0cnVjdHVyZS0+dm0oKSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIHNl
dCA9IHN0cnVjdHVyZS0+ZW5zdXJlUHJvcGVydHlSZXBsYWNlbWVudFdhdGNocG9pbnRTZXQoc3Ry
dWN0dXJlLT52bSgpLCBvZmZzZXQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAg
ICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5
SWRTdGF0dXMuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDcg
QEAgYm9vbCBQdXRCeUlkU3RhdHVzOjphcHBlbmRWYXJpYW50KGNvbnN0IAogCiBQdXRCeUlkU3Rh
dHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGcm9tTExJbnQoQ29kZUJsb2NrKiBwcm9maWxlZEJs
b2NrLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQogewot
ICAgIFZNJiB2bSA9ICpwcm9maWxlZEJsb2NrLT52bSgpOworICAgIFZNJiB2bSA9IHByb2ZpbGVk
QmxvY2stPnZtKCk7CiAgICAgCiAgICAgYXV0byBpbnN0cnVjdGlvbiA9IHByb2ZpbGVkQmxvY2st
Pmluc3RydWN0aW9ucygpLmF0KGJ5dGVjb2RlSW5kZXgpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBp
bnN0cnVjdGlvbi0+YXM8T3BQdXRCeUlkPigpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCShyZXZpc2lvbiAyNDkx
MjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwOCwgMjAxNC0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwOC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjQsNyArNjQsNyBAQCB2b2lkIFN0cnVjdHVy
ZVN0dWJJbmZvOjppbml0R2V0QnlJZFNlbGYoCiAgICAgY2FjaGVUeXBlID0gQ2FjaGVUeXBlOjpH
ZXRCeUlkU2VsZjsKICAgICAKICAgICB1LmJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUuc2V0
KAotICAgICAgICAqY29kZUJsb2NrLT52bSgpLCBjb2RlQmxvY2ssIGJhc2VPYmplY3RTdHJ1Y3R1
cmUpOworICAgICAgICBjb2RlQmxvY2stPnZtKCksIGNvZGVCbG9jaywgYmFzZU9iamVjdFN0cnVj
dHVyZSk7CiAgICAgdS5ieUlkU2VsZi5vZmZzZXQgPSBvZmZzZXQ7CiB9CiAKQEAgLTgzLDcgKzgz
LDcgQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6aW5pdFB1dEJ5SWRSZXBsYQogICAgIGNhY2hl
VHlwZSA9IENhY2hlVHlwZTo6UHV0QnlJZFJlcGxhY2U7CiAgICAgCiAgICAgdS5ieUlkU2VsZi5i
YXNlT2JqZWN0U3RydWN0dXJlLnNldCgKLSAgICAgICAgKmNvZGVCbG9jay0+dm0oKSwgY29kZUJs
b2NrLCBiYXNlT2JqZWN0U3RydWN0dXJlKTsKKyAgICAgICAgY29kZUJsb2NrLT52bSgpLCBjb2Rl
QmxvY2ssIGJhc2VPYmplY3RTdHJ1Y3R1cmUpOwogICAgIHUuYnlJZFNlbGYub2Zmc2V0ID0gb2Zm
c2V0OwogfQogCkBAIC05Miw3ICs5Miw3IEBAIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OmluaXRJ
bkJ5SWRTZWxmKEMKICAgICBjYWNoZVR5cGUgPSBDYWNoZVR5cGU6OkluQnlJZFNlbGY7CiAKICAg
ICB1LmJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUuc2V0KAotICAgICAgICAqY29kZUJsb2Nr
LT52bSgpLCBjb2RlQmxvY2ssIGJhc2VPYmplY3RTdHJ1Y3R1cmUpOworICAgICAgICBjb2RlQmxv
Y2stPnZtKCksIGNvZGVCbG9jaywgYmFzZU9iamVjdFN0cnVjdHVyZSk7CiAgICAgdS5ieUlkU2Vs
Zi5vZmZzZXQgPSBvZmZzZXQ7CiB9CiAKQEAgLTEzNSw3ICsxMzUsNyBAQCB2b2lkIFN0cnVjdHVy
ZVN0dWJJbmZvOjphYm91dFRvRGllKCkKIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgU3RydWN0dXJl
U3R1YkluZm86OmFkZEFjY2Vzc0Nhc2UoCiAgICAgY29uc3QgR0NTYWZlQ29uY3VycmVudEpTTG9j
a2VyJiBsb2NrZXIsIENvZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBJZGVudGlmaWVyJiBpZGVu
dCwgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IGFjY2Vzc0Nhc2UpCiB7Ci0gICAgVk0mIHZt
ID0gKmNvZGVCbG9jay0+dm0oKTsKKyAgICBWTSYgdm0gPSBjb2RlQmxvY2stPnZtKCk7CiAgICAg
QVNTRVJUKHZtLmhlYXAuaXNEZWZlcnJlZCgpKTsKICAgICBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0
IHJlc3VsdCA9IChbJl0gKCkgLT4gQWNjZXNzR2VuZXJhdGlvblJlc3VsdCB7CiAgICAgICAgIGlm
IChTdHJ1Y3R1cmVTdHViSW5mb0ludGVybmFsOjp2ZXJib3NlKQpAQCAtMjcyLDcgKzI3Miw3IEBA
IHZvaWQgU3RydWN0dXJlU3R1YkluZm86OnJlc2V0KENvZGVCbG9jayoKIAogdm9pZCBTdHJ1Y3R1
cmVTdHViSW5mbzo6dmlzaXRXZWFrUmVmZXJlbmNlcyhDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsK
LSAgICBWTSYgdm0gPSAqY29kZUJsb2NrLT52bSgpOworICAgIFZNJiB2bSA9IGNvZGVCbG9jay0+
dm0oKTsKICAgICAKICAgICBidWZmZXJlZFN0cnVjdHVyZXMuZ2VuZXJpY0ZpbHRlcigKICAgICAg
ICAgWyZdIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgLT4gYm9vbCB7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAJKHJl
dmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxpbmtl
ZENvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0LDggKzU0LDggQEAgbmFtZXNwYWNl
IEpTQyB7CiAKIGNvbnN0IENsYXNzSW5mbyBVbmxpbmtlZENvZGVCbG9jazo6c19pbmZvID0geyAi
VW5saW5rZWRDb2RlQmxvY2siLCBudWxscHRyLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVU
SE9EX1RBQkxFKFVubGlua2VkQ29kZUJsb2NrKSB9OwogCi1VbmxpbmtlZENvZGVCbG9jazo6VW5s
aW5rZWRDb2RlQmxvY2soVk0qIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQ29kZVR5cGUgY29k
ZVR5cGUsIGNvbnN0IEV4ZWN1dGFibGVJbmZvJiBpbmZvLCBPcHRpb25TZXQ8Q29kZUdlbmVyYXRp
b25Nb2RlPiBjb2RlR2VuZXJhdGlvbk1vZGUpCi0gICAgOiBCYXNlKCp2bSwgc3RydWN0dXJlKQor
VW5saW5rZWRDb2RlQmxvY2s6OlVubGlua2VkQ29kZUJsb2NrKFZNJiB2bSwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIENvZGVUeXBlIGNvZGVUeXBlLCBjb25zdCBFeGVjdXRhYmxlSW5mbyYgaW5mbywg
T3B0aW9uU2V0PENvZGVHZW5lcmF0aW9uTW9kZT4gY29kZUdlbmVyYXRpb25Nb2RlKQorICAgIDog
QmFzZSh2bSwgc3RydWN0dXJlKQogICAgICwgbV91c2VzRXZhbChpbmZvLnVzZXNFdmFsKCkpCiAg
ICAgLCBtX2lzU3RyaWN0TW9kZShpbmZvLmlzU3RyaWN0TW9kZSgpKQogICAgICwgbV9pc0NvbnN0
cnVjdG9yKGluZm8uaXNDb25zdHJ1Y3RvcigpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgJKHJldmlzaW9uIDI0OTEyOCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0y
MDE2IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
Mi0yMDE5IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMTYzLDcgKzE2Myw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGFkZFNl
dENvbnN0YW50KElkZW50aWZpZXJTZXQmIHNldCkKICAgICB7CiAgICAgICAgIGNyZWF0ZVJhcmVE
YXRhSWZOZWNlc3NhcnkoKTsKLSAgICAgICAgVk0mIHZtID0gKnRoaXMtPnZtKCk7CisgICAgICAg
IFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgICAgIGF1dG8gbG9ja2VyID0gbG9ja0R1cmluZ01h
cmtpbmcodm0uaGVhcCwgY2VsbExvY2soKSk7CiAgICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9IG1f
Y29uc3RhbnRSZWdpc3RlcnMuc2l6ZSgpOwogICAgICAgICBtX2NvbnN0YW50UmVnaXN0ZXJzLmFw
cGVuZChXcml0ZUJhcnJpZXI8VW5rbm93bj4oKSk7CkBAIC0xNzMsNyArMTczLDcgQEAgcHVibGlj
OgogCiAgICAgdW5zaWduZWQgYWRkQ29uc3RhbnQoSlNWYWx1ZSB2LCBTb3VyY2VDb2RlUmVwcmVz
ZW50YXRpb24gc291cmNlQ29kZVJlcHJlc2VudGF0aW9uID0gU291cmNlQ29kZVJlcHJlc2VudGF0
aW9uOjpPdGhlcikKICAgICB7Ci0gICAgICAgIFZNJiB2bSA9ICp0aGlzLT52bSgpOworICAgICAg
ICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgICAgICBhdXRvIGxvY2tlciA9IGxvY2tEdXJpbmdN
YXJraW5nKHZtLmhlYXAsIGNlbGxMb2NrKCkpOwogICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSBt
X2NvbnN0YW50UmVnaXN0ZXJzLnNpemUoKTsKICAgICAgICAgbV9jb25zdGFudFJlZ2lzdGVycy5h
cHBlbmQoV3JpdGVCYXJyaWVyPFVua25vd24+KCkpOwpAQCAtMTgzLDcgKzE4Myw3IEBAIHB1Ymxp
YzoKICAgICB9CiAgICAgdW5zaWduZWQgYWRkQ29uc3RhbnQoTGlua1RpbWVDb25zdGFudCB0eXBl
KQogICAgIHsKLSAgICAgICAgVk0mIHZtID0gKnRoaXMtPnZtKCk7CisgICAgICAgIFZNJiB2bSA9
IHRoaXMtPnZtKCk7CiAgICAgICAgIGF1dG8gbG9ja2VyID0gbG9ja0R1cmluZ01hcmtpbmcodm0u
aGVhcCwgY2VsbExvY2soKSk7CiAgICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9IG1fY29uc3RhbnRS
ZWdpc3RlcnMuc2l6ZSgpOwogICAgICAgICBBU1NFUlQocmVzdWx0KTsKQEAgLTI0Niw3ICsyNDYs
NyBAQCBwdWJsaWM6CiAKICAgICB1bnNpZ25lZCBhZGRGdW5jdGlvbkRlY2woVW5saW5rZWRGdW5j
dGlvbkV4ZWN1dGFibGUqIG4pCiAgICAgewotICAgICAgICBWTSYgdm0gPSAqdGhpcy0+dm0oKTsK
KyAgICAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICAgICAgYXV0byBsb2NrZXIgPSBsb2Nr
RHVyaW5nTWFya2luZyh2bS5oZWFwLCBjZWxsTG9jaygpKTsKICAgICAgICAgdW5zaWduZWQgc2l6
ZSA9IG1fZnVuY3Rpb25EZWNscy5zaXplKCk7CiAgICAgICAgIG1fZnVuY3Rpb25EZWNscy5hcHBl
bmQoV3JpdGVCYXJyaWVyPFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlPigpKTsKQEAgLTI1Nyw3
ICsyNTcsNyBAQCBwdWJsaWM6CiAgICAgc2l6ZV90IG51bWJlck9mRnVuY3Rpb25EZWNscygpIHsg
cmV0dXJuIG1fZnVuY3Rpb25EZWNscy5zaXplKCk7IH0KICAgICB1bnNpZ25lZCBhZGRGdW5jdGlv
bkV4cHIoVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIG4pCiAgICAgewotICAgICAgICBWTSYg
dm0gPSAqdGhpcy0+dm0oKTsKKyAgICAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICAgICAg
YXV0byBsb2NrZXIgPSBsb2NrRHVyaW5nTWFya2luZyh2bS5oZWFwLCBjZWxsTG9jaygpKTsKICAg
ICAgICAgdW5zaWduZWQgc2l6ZSA9IG1fZnVuY3Rpb25FeHBycy5zaXplKCk7CiAgICAgICAgIG1f
ZnVuY3Rpb25FeHBycy5hcHBlbmQoV3JpdGVCYXJyaWVyPFVubGlua2VkRnVuY3Rpb25FeGVjdXRh
YmxlPigpKTsKQEAgLTM3Nyw3ICszNzcsNyBAQCBwdWJsaWM6CiAKIAogcHJvdGVjdGVkOgotICAg
IFVubGlua2VkQ29kZUJsb2NrKFZNKiwgU3RydWN0dXJlKiwgQ29kZVR5cGUsIGNvbnN0IEV4ZWN1
dGFibGVJbmZvJiwgT3B0aW9uU2V0PENvZGVHZW5lcmF0aW9uTW9kZT4pOworICAgIFVubGlua2Vk
Q29kZUJsb2NrKFZNJiwgU3RydWN0dXJlKiwgQ29kZVR5cGUsIGNvbnN0IEV4ZWN1dGFibGVJbmZv
JiwgT3B0aW9uU2V0PENvZGVHZW5lcmF0aW9uTW9kZT4pOwogCiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgQ29kZUJsb2NrVHlwZT4KICAgICBVbmxpbmtlZENvZGVCbG9jayhEZWNvZGVyJiwgU3RydWN0
dXJlKiwgY29uc3QgQ2FjaGVkQ29kZUJsb2NrPENvZGVCbG9ja1R5cGU+Jik7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRFdmFsQ29kZUJsb2NrLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRXZhbENvZGVC
bG9jay5oCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvVW5saW5rZWRFdmFsQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTYgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTkgQXBwbGUgSW5jLiBBbGwgUmlnaHRz
IFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNiwxMCArMzYs
MTAgQEAgcHVibGljOgogICAgIHR5cGVkZWYgVW5saW5rZWRHbG9iYWxDb2RlQmxvY2sgQmFzZTsK
ICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1
cmVGbGFncyB8IFN0cnVjdHVyZUlzSW1tb3J0YWw7CiAKLSAgICBzdGF0aWMgVW5saW5rZWRFdmFs
Q29kZUJsb2NrKiBjcmVhdGUoVk0qIHZtLCBjb25zdCBFeGVjdXRhYmxlSW5mbyYgaW5mbywgT3B0
aW9uU2V0PENvZGVHZW5lcmF0aW9uTW9kZT4gY29kZUdlbmVyYXRpb25Nb2RlKQorICAgIHN0YXRp
YyBVbmxpbmtlZEV2YWxDb2RlQmxvY2sqIGNyZWF0ZShWTSYgdm0sIGNvbnN0IEV4ZWN1dGFibGVJ
bmZvJiBpbmZvLCBPcHRpb25TZXQ8Q29kZUdlbmVyYXRpb25Nb2RlPiBjb2RlR2VuZXJhdGlvbk1v
ZGUpCiAgICAgewotICAgICAgICBVbmxpbmtlZEV2YWxDb2RlQmxvY2sqIGluc3RhbmNlID0gbmV3
IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8VW5saW5rZWRFdmFsQ29kZUJsb2NrPih2bS0+aGVhcCkp
IFVubGlua2VkRXZhbENvZGVCbG9jayh2bSwgdm0tPnVubGlua2VkRXZhbENvZGVCbG9ja1N0cnVj
dHVyZS5nZXQoKSwgaW5mbywgY29kZUdlbmVyYXRpb25Nb2RlKTsKLSAgICAgICAgaW5zdGFuY2Ut
PmZpbmlzaENyZWF0aW9uKCp2bSk7CisgICAgICAgIFVubGlua2VkRXZhbENvZGVCbG9jayogaW5z
dGFuY2UgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxVbmxpbmtlZEV2YWxDb2RlQmxvY2s+
KHZtLmhlYXApKSBVbmxpbmtlZEV2YWxDb2RlQmxvY2sodm0sIHZtLnVubGlua2VkRXZhbENvZGVC
bG9ja1N0cnVjdHVyZS5nZXQoKSwgaW5mbywgY29kZUdlbmVyYXRpb25Nb2RlKTsKKyAgICAgICAg
aW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICAgICAgcmV0dXJuIGluc3RhbmNlOwog
ICAgIH0KIApAQCAtNjMsNyArNjMsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIGZyaWVuZCBD
YWNoZWRFdmFsQ29kZUJsb2NrOwogCi0gICAgVW5saW5rZWRFdmFsQ29kZUJsb2NrKFZNKiB2bSwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IEV4ZWN1dGFibGVJbmZvJiBpbmZvLCBPcHRpb25T
ZXQ8Q29kZUdlbmVyYXRpb25Nb2RlPiBjb2RlR2VuZXJhdGlvbk1vZGUpCisgICAgVW5saW5rZWRF
dmFsQ29kZUJsb2NrKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IEV4ZWN1dGFi
bGVJbmZvJiBpbmZvLCBPcHRpb25TZXQ8Q29kZUdlbmVyYXRpb25Nb2RlPiBjb2RlR2VuZXJhdGlv
bk1vZGUpCiAgICAgICAgIDogQmFzZSh2bSwgc3RydWN0dXJlLCBFdmFsQ29kZSwgaW5mbywgY29k
ZUdlbmVyYXRpb25Nb2RlKQogICAgIHsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrLmgJ
KHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxp
bmtlZEZ1bmN0aW9uQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTYgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNiwxMCArMzYsMTAg
QEAgcHVibGljOgogICAgIHR5cGVkZWYgVW5saW5rZWRDb2RlQmxvY2sgQmFzZTsKICAgICBzdGF0
aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8
IFN0cnVjdHVyZUlzSW1tb3J0YWw7CiAKLSAgICBzdGF0aWMgVW5saW5rZWRGdW5jdGlvbkNvZGVC
bG9jayogY3JlYXRlKFZNKiB2bSwgQ29kZVR5cGUgY29kZVR5cGUsIGNvbnN0IEV4ZWN1dGFibGVJ
bmZvJiBpbmZvLCBPcHRpb25TZXQ8Q29kZUdlbmVyYXRpb25Nb2RlPiBjb2RlR2VuZXJhdGlvbk1v
ZGUpCisgICAgc3RhdGljIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2sqIGNyZWF0ZShWTSYgdm0s
IENvZGVUeXBlIGNvZGVUeXBlLCBjb25zdCBFeGVjdXRhYmxlSW5mbyYgaW5mbywgT3B0aW9uU2V0
PENvZGVHZW5lcmF0aW9uTW9kZT4gY29kZUdlbmVyYXRpb25Nb2RlKQogICAgIHsKLSAgICAgICAg
VW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayogaW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFsbG9j
YXRlQ2VsbDxVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrPih2bS0+aGVhcCkpIFVubGlua2VkRnVu
Y3Rpb25Db2RlQmxvY2sodm0sIHZtLT51bmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrU3RydWN0dXJl
LmdldCgpLCBjb2RlVHlwZSwgaW5mbywgY29kZUdlbmVyYXRpb25Nb2RlKTsKLSAgICAgICAgaW5z
dGFuY2UtPmZpbmlzaENyZWF0aW9uKCp2bSk7CisgICAgICAgIFVubGlua2VkRnVuY3Rpb25Db2Rl
QmxvY2sqIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8VW5saW5rZWRGdW5j
dGlvbkNvZGVCbG9jaz4odm0uaGVhcCkpIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2sodm0sIHZt
LnVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2tTdHJ1Y3R1cmUuZ2V0KCksIGNvZGVUeXBlLCBpbmZv
LCBjb2RlR2VuZXJhdGlvbk1vZGUpOworICAgICAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24o
dm0pOwogICAgICAgICByZXR1cm4gaW5zdGFuY2U7CiAgICAgfQogCkBAIC00OCw3ICs0OCw3IEBA
IHB1YmxpYzoKIHByaXZhdGU6CiAgICAgZnJpZW5kIENhY2hlZEZ1bmN0aW9uQ29kZUJsb2NrOwog
Ci0gICAgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayhWTSogdm0sIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBDb2RlVHlwZSBjb2RlVHlwZSwgY29uc3QgRXhlY3V0YWJsZUluZm8mIGluZm8sIE9wdGlv
blNldDxDb2RlR2VuZXJhdGlvbk1vZGU+IGNvZGVHZW5lcmF0aW9uTW9kZSkKKyAgICBVbmxpbmtl
ZEZ1bmN0aW9uQ29kZUJsb2NrKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIENvZGVUeXBl
IGNvZGVUeXBlLCBjb25zdCBFeGVjdXRhYmxlSW5mbyYgaW5mbywgT3B0aW9uU2V0PENvZGVHZW5l
cmF0aW9uTW9kZT4gY29kZUdlbmVyYXRpb25Nb2RlKQogICAgICAgICA6IEJhc2Uodm0sIHN0cnVj
dHVyZSwgY29kZVR5cGUsIGluZm8sIGNvZGVHZW5lcmF0aW9uTW9kZSkKICAgICB7CiAgICAgfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVj
dXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
Mi0yMDE4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMi0yMDE5IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtNTgsNyArNTgsNyBAQCBzdGF0aWMgVW5saW5rZWRGdW5jdGlv
bkNvZGVCbG9jayogZ2VuZXJhCiAgICAgSlNQYXJzZXJTY3JpcHRNb2RlIHNjcmlwdE1vZGUgPSBl
eGVjdXRhYmxlLT5zY3JpcHRNb2RlKCk7CiAgICAgQVNTRVJUKGlzRnVuY3Rpb25QYXJzZU1vZGUo
ZXhlY3V0YWJsZS0+cGFyc2VNb2RlKCkpKTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8RnVuY3Rpb25O
b2RlPiBmdW5jdGlvbiA9IHBhcnNlPEZ1bmN0aW9uTm9kZT4oCi0gICAgICAgICZ2bSwgc291cmNl
LCBleGVjdXRhYmxlLT5uYW1lKCksIGJ1aWx0aW5Nb2RlLCBzdHJpY3RNb2RlLCBzY3JpcHRNb2Rl
LCBleGVjdXRhYmxlLT5wYXJzZU1vZGUoKSwgZXhlY3V0YWJsZS0+c3VwZXJCaW5kaW5nKCksIGVy
cm9yLCBudWxscHRyKTsKKyAgICAgICAgdm0sIHNvdXJjZSwgZXhlY3V0YWJsZS0+bmFtZSgpLCBi
dWlsdGluTW9kZSwgc3RyaWN0TW9kZSwgc2NyaXB0TW9kZSwgZXhlY3V0YWJsZS0+cGFyc2VNb2Rl
KCksIGV4ZWN1dGFibGUtPnN1cGVyQmluZGluZygpLCBlcnJvciwgbnVsbHB0cik7CiAKICAgICBp
ZiAoIWZ1bmN0aW9uKSB7CiAgICAgICAgIEFTU0VSVChlcnJvci5pc1ZhbGlkKCkpOwpAQCAtNzAs
NyArNzAsNyBAQCBzdGF0aWMgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayogZ2VuZXJhCiAKICAg
ICBib29sIGlzQ2xhc3NDb250ZXh0ID0gZXhlY3V0YWJsZS0+c3VwZXJCaW5kaW5nKCkgPT0gU3Vw
ZXJCaW5kaW5nOjpOZWVkZWQ7CiAKLSAgICBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKiByZXN1
bHQgPSBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrOjpjcmVhdGUoJnZtLCBGdW5jdGlvbkNvZGUs
IEV4ZWN1dGFibGVJbmZvKGZ1bmN0aW9uLT51c2VzRXZhbCgpLCBmdW5jdGlvbi0+aXNTdHJpY3RN
b2RlKCksIGtpbmQgPT0gQ29kZUZvckNvbnN0cnVjdCwgZnVuY3Rpb25LaW5kID09IFVubGlua2Vk
QnVpbHRpbkZ1bmN0aW9uLCBleGVjdXRhYmxlLT5jb25zdHJ1Y3RvcktpbmQoKSwgc2NyaXB0TW9k
ZSwgZXhlY3V0YWJsZS0+c3VwZXJCaW5kaW5nKCksIHBhcnNlTW9kZSwgZXhlY3V0YWJsZS0+ZGVy
aXZlZENvbnRleHRUeXBlKCksIGZhbHNlLCBpc0NsYXNzQ29udGV4dCwgRXZhbENvbnRleHRUeXBl
OjpGdW5jdGlvbkV2YWxDb250ZXh0KSwgY29kZUdlbmVyYXRpb25Nb2RlKTsKKyAgICBVbmxpbmtl
ZEZ1bmN0aW9uQ29kZUJsb2NrKiByZXN1bHQgPSBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrOjpj
cmVhdGUodm0sIEZ1bmN0aW9uQ29kZSwgRXhlY3V0YWJsZUluZm8oZnVuY3Rpb24tPnVzZXNFdmFs
KCksIGZ1bmN0aW9uLT5pc1N0cmljdE1vZGUoKSwga2luZCA9PSBDb2RlRm9yQ29uc3RydWN0LCBm
dW5jdGlvbktpbmQgPT0gVW5saW5rZWRCdWlsdGluRnVuY3Rpb24sIGV4ZWN1dGFibGUtPmNvbnN0
cnVjdG9yS2luZCgpLCBzY3JpcHRNb2RlLCBleGVjdXRhYmxlLT5zdXBlckJpbmRpbmcoKSwgcGFy
c2VNb2RlLCBleGVjdXRhYmxlLT5kZXJpdmVkQ29udGV4dFR5cGUoKSwgZmFsc2UsIGlzQ2xhc3ND
b250ZXh0LCBFdmFsQ29udGV4dFR5cGU6OkZ1bmN0aW9uRXZhbENvbnRleHQpLCBjb2RlR2VuZXJh
dGlvbk1vZGUpOwogCiAgICAgVmFyaWFibGVFbnZpcm9ubWVudCBwYXJlbnRTY29wZVREWlZhcmlh
YmxlcyA9IGV4ZWN1dGFibGUtPnBhcmVudFNjb3BlVERaVmFyaWFibGVzKCk7CiAgICAgZXJyb3Ig
PSBCeXRlY29kZUdlbmVyYXRvcjo6Z2VuZXJhdGUodm0sIGZ1bmN0aW9uLmdldCgpLCBzb3VyY2Us
IHJlc3VsdCwgY29kZUdlbmVyYXRpb25Nb2RlLCAmcGFyZW50U2NvcGVURFpWYXJpYWJsZXMpOwpA
QCAtODEsOCArODEsOCBAQCBzdGF0aWMgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayogZ2VuZXJh
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OlVu
bGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKFZNKiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNv
bnN0IFNvdXJjZUNvZGUmIHBhcmVudFNvdXJjZSwgRnVuY3Rpb25NZXRhZGF0YU5vZGUqIG5vZGUs
IFVubGlua2VkRnVuY3Rpb25LaW5kIGtpbmQsIENvbnN0cnVjdEFiaWxpdHkgY29uc3RydWN0QWJp
bGl0eSwgSlNQYXJzZXJTY3JpcHRNb2RlIHNjcmlwdE1vZGUsIE9wdGlvbmFsPENvbXBhY3RWYXJp
YWJsZU1hcDo6SGFuZGxlPiBwYXJlbnRTY29wZVREWlZhcmlhYmxlcywgRGVyaXZlZENvbnRleHRU
eXBlIGRlcml2ZWRDb250ZXh0VHlwZSwgYm9vbCBpc0J1aWx0aW5EZWZhdWx0Q2xhc3NDb25zdHJ1
Y3RvcikKLSAgICA6IEJhc2UoKnZtLCBzdHJ1Y3R1cmUpCitVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0
YWJsZTo6VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgY29uc3QgU291cmNlQ29kZSYgcGFyZW50U291cmNlLCBGdW5jdGlvbk1ldGFkYXRhTm9k
ZSogbm9kZSwgVW5saW5rZWRGdW5jdGlvbktpbmQga2luZCwgQ29uc3RydWN0QWJpbGl0eSBjb25z
dHJ1Y3RBYmlsaXR5LCBKU1BhcnNlclNjcmlwdE1vZGUgc2NyaXB0TW9kZSwgT3B0aW9uYWw8Q29t
cGFjdFZhcmlhYmxlTWFwOjpIYW5kbGU+IHBhcmVudFNjb3BlVERaVmFyaWFibGVzLCBEZXJpdmVk
Q29udGV4dFR5cGUgZGVyaXZlZENvbnRleHRUeXBlLCBib29sIGlzQnVpbHRpbkRlZmF1bHRDbGFz
c0NvbnN0cnVjdG9yKQorICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQogICAgICwgbV9maXJzdExp
bmVPZmZzZXQobm9kZS0+Zmlyc3RMaW5lKCkgLSBwYXJlbnRTb3VyY2UuZmlyc3RMaW5lKCkub25l
QmFzZWRJbnQoKSkKICAgICAsIG1faXNJblN0cmljdENvbnRleHQobm9kZS0+aXNJblN0cmljdENv
bnRleHQoKSkKICAgICAsIG1fbGluZUNvdW50KG5vZGUtPmxhc3RMaW5lKCkgLSBub2RlLT5maXJz
dExpbmUoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1
bmN0aW9uRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5oCShyZXZpc2lvbiAyNDkxMjgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFi
bGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTItMjAxOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTItMjAxOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY4LDExICs2OCwxMSBAQCBwdWJsaWM6CiAgICAgICAg
IHJldHVybiAmdm0udW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGVTcGFjZS5zcGFjZTsKICAgICB9
CiAKLSAgICBzdGF0aWMgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIGNyZWF0ZShWTSogdm0s
IGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgRnVuY3Rpb25NZXRhZGF0YU5vZGUqIG5vZGUsIFVu
bGlua2VkRnVuY3Rpb25LaW5kIHVubGlua2VkRnVuY3Rpb25LaW5kLCBDb25zdHJ1Y3RBYmlsaXR5
IGNvbnN0cnVjdEFiaWxpdHksIEpTUGFyc2VyU2NyaXB0TW9kZSBzY3JpcHRNb2RlLCBPcHRpb25h
bDxDb21wYWN0VmFyaWFibGVNYXA6OkhhbmRsZT4gcGFyZW50U2NvcGVURFpWYXJpYWJsZXMsIERl
cml2ZWRDb250ZXh0VHlwZSBkZXJpdmVkQ29udGV4dFR5cGUsIGJvb2wgaXNCdWlsdGluRGVmYXVs
dENsYXNzQ29uc3RydWN0b3IgPSBmYWxzZSkKKyAgICBzdGF0aWMgVW5saW5rZWRGdW5jdGlvbkV4
ZWN1dGFibGUqIGNyZWF0ZShWTSYgdm0sIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgRnVuY3Rp
b25NZXRhZGF0YU5vZGUqIG5vZGUsIFVubGlua2VkRnVuY3Rpb25LaW5kIHVubGlua2VkRnVuY3Rp
b25LaW5kLCBDb25zdHJ1Y3RBYmlsaXR5IGNvbnN0cnVjdEFiaWxpdHksIEpTUGFyc2VyU2NyaXB0
TW9kZSBzY3JpcHRNb2RlLCBPcHRpb25hbDxDb21wYWN0VmFyaWFibGVNYXA6OkhhbmRsZT4gcGFy
ZW50U2NvcGVURFpWYXJpYWJsZXMsIERlcml2ZWRDb250ZXh0VHlwZSBkZXJpdmVkQ29udGV4dFR5
cGUsIGJvb2wgaXNCdWlsdGluRGVmYXVsdENsYXNzQ29uc3RydWN0b3IgPSBmYWxzZSkKICAgICB7
Ci0gICAgICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBpbnN0YW5jZSA9IG5ldyAoTm90
TnVsbCwgYWxsb2NhdGVDZWxsPFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlPih2bS0+aGVhcCkp
Ci0gICAgICAgICAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSh2bSwgdm0tPnVubGlua2Vk
RnVuY3Rpb25FeGVjdXRhYmxlU3RydWN0dXJlLmdldCgpLCBzb3VyY2UsIG5vZGUsIHVubGlua2Vk
RnVuY3Rpb25LaW5kLCBjb25zdHJ1Y3RBYmlsaXR5LCBzY3JpcHRNb2RlLCBXVEZNb3ZlKHBhcmVu
dFNjb3BlVERaVmFyaWFibGVzKSwgZGVyaXZlZENvbnRleHRUeXBlLCBpc0J1aWx0aW5EZWZhdWx0
Q2xhc3NDb25zdHJ1Y3Rvcik7Ci0gICAgICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbigqdm0p
OworICAgICAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogaW5zdGFuY2UgPSBuZXcgKE5v
dE51bGwsIGFsbG9jYXRlQ2VsbDxVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZT4odm0uaGVhcCkp
CisgICAgICAgICAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSh2bSwgdm0udW5saW5rZWRG
dW5jdGlvbkV4ZWN1dGFibGVTdHJ1Y3R1cmUuZ2V0KCksIHNvdXJjZSwgbm9kZSwgdW5saW5rZWRG
dW5jdGlvbktpbmQsIGNvbnN0cnVjdEFiaWxpdHksIHNjcmlwdE1vZGUsIFdURk1vdmUocGFyZW50
U2NvcGVURFpWYXJpYWJsZXMpLCBkZXJpdmVkQ29udGV4dFR5cGUsIGlzQnVpbHRpbkRlZmF1bHRD
bGFzc0NvbnN0cnVjdG9yKTsKKyAgICAgICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKHZtKTsK
ICAgICAgICAgcmV0dXJuIGluc3RhbmNlOwogICAgIH0KIApAQCAtMjAwLDcgKzIwMCw3IEBAIHB1
YmxpYzoKICAgICB9OwogCiBwcml2YXRlOgotICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxl
KFZNKiwgU3RydWN0dXJlKiwgY29uc3QgU291cmNlQ29kZSYsIEZ1bmN0aW9uTWV0YWRhdGFOb2Rl
KiwgVW5saW5rZWRGdW5jdGlvbktpbmQsIENvbnN0cnVjdEFiaWxpdHksIEpTUGFyc2VyU2NyaXB0
TW9kZSwgT3B0aW9uYWw8Q29tcGFjdFZhcmlhYmxlTWFwOjpIYW5kbGU+LCAgSlNDOjpEZXJpdmVk
Q29udGV4dFR5cGUsIGJvb2wgaXNCdWlsdGluRGVmYXVsdENsYXNzQ29uc3RydWN0b3IpOworICAg
IFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKFZNJiwgU3RydWN0dXJlKiwgY29uc3QgU291cmNl
Q29kZSYsIEZ1bmN0aW9uTWV0YWRhdGFOb2RlKiwgVW5saW5rZWRGdW5jdGlvbktpbmQsIENvbnN0
cnVjdEFiaWxpdHksIEpTUGFyc2VyU2NyaXB0TW9kZSwgT3B0aW9uYWw8Q29tcGFjdFZhcmlhYmxl
TWFwOjpIYW5kbGU+LCAgSlNDOjpEZXJpdmVkQ29udGV4dFR5cGUsIGJvb2wgaXNCdWlsdGluRGVm
YXVsdENsYXNzQ29uc3RydWN0b3IpOwogICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKERl
Y29kZXImLCBjb25zdCBDYWNoZWRGdW5jdGlvbkV4ZWN1dGFibGUmKTsKIAogICAgIHZvaWQgZGVj
b2RlQ2FjaGVkQ29kZUJsb2NrcyhWTSYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1VubGlua2VkR2xvYmFsQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkR2xvYmFsQ29kZUJsb2NrLmgJKHJldmlzaW9u
IDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEdsb2Jh
bENvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMi0yMDE2IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMi0yMDE5IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzQsNyArMzQsNyBAQCBwdWJsaWM6CiAg
ICAgdHlwZWRlZiBVbmxpbmtlZENvZGVCbG9jayBCYXNlOwogCiBwcm90ZWN0ZWQ6Ci0gICAgVW5s
aW5rZWRHbG9iYWxDb2RlQmxvY2soVk0qIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQ29kZVR5
cGUgY29kZVR5cGUsIGNvbnN0IEV4ZWN1dGFibGVJbmZvJiBpbmZvLCBPcHRpb25TZXQ8Q29kZUdl
bmVyYXRpb25Nb2RlPiBjb2RlR2VuZXJhdGlvbk1vZGUpCisgICAgVW5saW5rZWRHbG9iYWxDb2Rl
QmxvY2soVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQ29kZVR5cGUgY29kZVR5cGUsIGNv
bnN0IEV4ZWN1dGFibGVJbmZvJiBpbmZvLCBPcHRpb25TZXQ8Q29kZUdlbmVyYXRpb25Nb2RlPiBj
b2RlR2VuZXJhdGlvbk1vZGUpCiAgICAgICAgIDogQmFzZSh2bSwgc3RydWN0dXJlLCBjb2RlVHlw
ZSwgaW5mbywgY29kZUdlbmVyYXRpb25Nb2RlKQogICAgIHsKICAgICB9CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkTW9k
dWxlUHJvZ3JhbUNvZGVCbG9jay5oCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTcg
QXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIw
MTkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0zNywxMCArMzcsMTAgQEAgcHVibGljOgogICAgIHR5cGVkZWYgVW5saW5r
ZWRHbG9iYWxDb2RlQmxvY2sgQmFzZTsKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0
dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IFN0cnVjdHVyZUlzSW1tb3J0YWw7CiAK
LSAgICBzdGF0aWMgVW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKiBjcmVhdGUoVk0qIHZt
LCBjb25zdCBFeGVjdXRhYmxlSW5mbyYgaW5mbywgT3B0aW9uU2V0PENvZGVHZW5lcmF0aW9uTW9k
ZT4gY29kZUdlbmVyYXRpb25Nb2RlKQorICAgIHN0YXRpYyBVbmxpbmtlZE1vZHVsZVByb2dyYW1D
b2RlQmxvY2sqIGNyZWF0ZShWTSYgdm0sIGNvbnN0IEV4ZWN1dGFibGVJbmZvJiBpbmZvLCBPcHRp
b25TZXQ8Q29kZUdlbmVyYXRpb25Nb2RlPiBjb2RlR2VuZXJhdGlvbk1vZGUpCiAgICAgewotICAg
ICAgICBVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2sqIGluc3RhbmNlID0gbmV3IChOb3RO
dWxsLCBhbGxvY2F0ZUNlbGw8VW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrPih2bS0+aGVh
cCkpIFVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayh2bSwgdm0tPnVubGlua2VkTW9kdWxl
UHJvZ3JhbUNvZGVCbG9ja1N0cnVjdHVyZS5nZXQoKSwgaW5mbywgY29kZUdlbmVyYXRpb25Nb2Rl
KTsKLSAgICAgICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKCp2bSk7CisgICAgICAgIFVubGlu
a2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayogaW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFsbG9j
YXRlQ2VsbDxVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2s+KHZtLmhlYXApKSBVbmxpbmtl
ZE1vZHVsZVByb2dyYW1Db2RlQmxvY2sodm0sIHZtLnVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVC
bG9ja1N0cnVjdHVyZS5nZXQoKSwgaW5mbywgY29kZUdlbmVyYXRpb25Nb2RlKTsKKyAgICAgICAg
aW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICAgICAgcmV0dXJuIGluc3RhbmNlOwog
ICAgIH0KIApAQCAtNzksNyArNzksNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIGZyaWVuZCBD
YWNoZWRNb2R1bGVDb2RlQmxvY2s7CiAKLSAgICBVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxv
Y2soVk0qIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgRXhlY3V0YWJsZUluZm8mIGlu
Zm8sIE9wdGlvblNldDxDb2RlR2VuZXJhdGlvbk1vZGU+IGNvZGVHZW5lcmF0aW9uTW9kZSkKKyAg
ICBVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2soVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgY29uc3QgRXhlY3V0YWJsZUluZm8mIGluZm8sIE9wdGlvblNldDxDb2RlR2VuZXJhdGlv
bk1vZGU+IGNvZGVHZW5lcmF0aW9uTW9kZSkKICAgICAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUs
IE1vZHVsZUNvZGUsIGluZm8sIGNvZGVHZW5lcmF0aW9uTW9kZSkKICAgICB7CiAgICAgfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkUHJvZ3JhbUNvZGVCbG9j
ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxpbmtl
ZFByb2dyYW1Db2RlQmxvY2suaAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1VubGlua2VkUHJvZ3JhbUNvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE3IEFwcGxlIElu
Yy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE5IEFwcGxl
IEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMzYsMTAgKzM2LDEwIEBAIHB1YmxpYzoKICAgICB0eXBlZGVmIFVubGlua2VkR2xvYmFs
Q29kZUJsb2NrIEJhc2U7CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdz
ID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBTdHJ1Y3R1cmVJc0ltbW9ydGFsOwogCi0gICAgc3Rh
dGljIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jayogY3JlYXRlKFZNKiB2bSwgY29uc3QgRXhlY3V0
YWJsZUluZm8mIGluZm8sIE9wdGlvblNldDxDb2RlR2VuZXJhdGlvbk1vZGU+IGNvZGVHZW5lcmF0
aW9uTW9kZSkKKyAgICBzdGF0aWMgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrKiBjcmVhdGUoVk0m
IHZtLCBjb25zdCBFeGVjdXRhYmxlSW5mbyYgaW5mbywgT3B0aW9uU2V0PENvZGVHZW5lcmF0aW9u
TW9kZT4gY29kZUdlbmVyYXRpb25Nb2RlKQogICAgIHsKLSAgICAgICAgVW5saW5rZWRQcm9ncmFt
Q29kZUJsb2NrKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFVubGlua2Vk
UHJvZ3JhbUNvZGVCbG9jaz4odm0tPmhlYXApKSBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2sodm0s
IHZtLT51bmxpbmtlZFByb2dyYW1Db2RlQmxvY2tTdHJ1Y3R1cmUuZ2V0KCksIGluZm8sIGNvZGVH
ZW5lcmF0aW9uTW9kZSk7Ci0gICAgICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbigqdm0pOwor
ICAgICAgICBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2sqIGluc3RhbmNlID0gbmV3IChOb3ROdWxs
LCBhbGxvY2F0ZUNlbGw8VW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrPih2bS5oZWFwKSkgVW5saW5r
ZWRQcm9ncmFtQ29kZUJsb2NrKHZtLCB2bS51bmxpbmtlZFByb2dyYW1Db2RlQmxvY2tTdHJ1Y3R1
cmUuZ2V0KCksIGluZm8sIGNvZGVHZW5lcmF0aW9uTW9kZSk7CisgICAgICAgIGluc3RhbmNlLT5m
aW5pc2hDcmVhdGlvbih2bSk7CiAgICAgICAgIHJldHVybiBpbnN0YW5jZTsKICAgICB9CiAKQEAg
LTU0LDcgKzU0LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBmcmllbmQgQ2FjaGVkUHJvZ3Jh
bUNvZGVCbG9jazsKIAotICAgIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jayhWTSogdm0sIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBjb25zdCBFeGVjdXRhYmxlSW5mbyYgaW5mbywgT3B0aW9uU2V0PENv
ZGVHZW5lcmF0aW9uTW9kZT4gY29kZUdlbmVyYXRpb25Nb2RlKQorICAgIFVubGlua2VkUHJvZ3Jh
bUNvZGVCbG9jayhWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBFeGVjdXRhYmxl
SW5mbyYgaW5mbywgT3B0aW9uU2V0PENvZGVHZW5lcmF0aW9uTW9kZT4gY29kZUdlbmVyYXRpb25N
b2RlKQogICAgICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSwgR2xvYmFsQ29kZSwgaW5mbywgY29k
ZUdlbmVyYXRpb25Nb2RlKQogICAgIHsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkocmV2
aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRl
Y29kZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzNiw3ICszMzYsNyBAQCBCeXRl
Y29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoVk0mCiAgICAgLCBtX2NvZGVCbG9jayh2
bSwgY29kZUJsb2NrKQogICAgICwgbV90aGlzUmVnaXN0ZXIoQ2FsbEZyYW1lOjp0aGlzQXJndW1l
bnRPZmZzZXQoKSkKICAgICAsIG1fY29kZVR5cGUoR2xvYmFsQ29kZSkKLSAgICAsIG1fdm0oJnZt
KQorICAgICwgbV92bSh2bSkKICAgICAsIG1fbmVlZHNUb1VwZGF0ZUFycm93RnVuY3Rpb25Db250
ZXh0KHByb2dyYW1Ob2RlLT51c2VzQXJyb3dGdW5jdGlvbigpIHx8IHByb2dyYW1Ob2RlLT51c2Vz
RXZhbCgpKQogewogICAgIEFTU0VSVF9VTlVTRUQocGFyZW50U2NvcGVURFpWYXJpYWJsZXMsICFw
YXJlbnRTY29wZVREWlZhcmlhYmxlcy0+c2l6ZSgpKTsKQEAgLTM4MSw3ICszODEsNyBAQCBCeXRl
Y29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoVk0mCiAgICAgLCBtX3Njb3BlTm9kZShm
dW5jdGlvbk5vZGUpCiAgICAgLCBtX2NvZGVCbG9jayh2bSwgY29kZUJsb2NrKQogICAgICwgbV9j
b2RlVHlwZShGdW5jdGlvbkNvZGUpCi0gICAgLCBtX3ZtKCZ2bSkKKyAgICAsIG1fdm0odm0pCiAg
ICAgLCBtX2lzQnVpbHRpbkZ1bmN0aW9uKGNvZGVCbG9jay0+aXNCdWlsdGluRnVuY3Rpb24oKSkK
ICAgICAsIG1fdXNlc05vblN0cmljdEV2YWwoY29kZUJsb2NrLT51c2VzRXZhbCgpICYmICFjb2Rl
QmxvY2stPmlzU3RyaWN0TW9kZSgpKQogICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYmUgYWJsZSB0
byBoYXZlIHRhaWwgY2FsbCBlbGltaW5hdGlvbiB3aXRoIHRoZSBwcm9maWxlcgpAQCAtMzk4LDcg
KzM5OCw3IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihWTSYKIAogICAg
IGFsbG9jYXRlQ2FsbGVlU2F2ZVNwYWNlKCk7CiAgICAgCi0gICAgU3ltYm9sVGFibGUqIGZ1bmN0
aW9uU3ltYm9sVGFibGUgPSBTeW1ib2xUYWJsZTo6Y3JlYXRlKCptX3ZtKTsKKyAgICBTeW1ib2xU
YWJsZSogZnVuY3Rpb25TeW1ib2xUYWJsZSA9IFN5bWJvbFRhYmxlOjpjcmVhdGUobV92bSk7CiAg
ICAgZnVuY3Rpb25TeW1ib2xUYWJsZS0+c2V0VXNlc05vblN0cmljdEV2YWwobV91c2VzTm9uU3Ry
aWN0RXZhbCk7CiAgICAgaW50IHN5bWJvbFRhYmxlQ29uc3RhbnRJbmRleCA9IDA7CiAKQEAgLTU1
MCw3ICs1NTAsNyBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoVk0mCiAg
ICAgICAgICAgICAgICAgICAgIC8vIG5vdGlmeVdyaXRlKCksIHNpbmNlIHRoYXQgd291bGQgYmUg
Y3VtYmVyc29tZS4gQWxzbywgd2F0Y2hpbmcgZm9ybWFsCiAgICAgICAgICAgICAgICAgICAgIC8v
IHBhcmFtZXRlcnMgd2hlbiAiYXJndW1lbnRzIiBpcyBpbiBwbGF5IGlzIHVubGlrZWx5IHRvIGJl
IHN1cGVyIHByb2ZpdGFibGUuCiAgICAgICAgICAgICAgICAgICAgIC8vIFNvLCB3ZSBqdXN0IGRp
c2FibGUgaXQuCi0gICAgICAgICAgICAgICAgICAgIGVudHJ5LmRpc2FibGVXYXRjaGluZygqbV92
bSk7CisgICAgICAgICAgICAgICAgICAgIGVudHJ5LmRpc2FibGVXYXRjaGluZyhtX3ZtKTsKICAg
ICAgICAgICAgICAgICAgICAgZnVuY3Rpb25TeW1ib2xUYWJsZS0+c2V0KE5vTG9ja2luZ05lY2Vz
c2FyeSwgbmFtZSwgZW50cnkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBP
cFB1dFRvU2NvcGU6OmVtaXQodGhpcywgbV9sZXhpY2FsRW52aXJvbm1lbnRSZWdpc3RlciwgVUlO
VF9NQVgsIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEgKyBpKSwgR2V0UHV0SW5mbyhUaHJv
d0lmTm90Rm91bmQsIExvY2FsQ2xvc3VyZVZhciwgSW5pdGlhbGl6YXRpb25Nb2RlOjpOb3RJbml0
aWFsaXphdGlvbiksIFN5bWJvbFRhYmxlT3JTY29wZURlcHRoOjpzeW1ib2xUYWJsZShWaXJ0dWFs
UmVnaXN0ZXIgeyBzeW1ib2xUYWJsZUNvbnN0YW50SW5kZXggfSksIG9mZnNldC5vZmZzZXQoKSk7
CkBAIC04MDgsNyArODA4LDcgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9y
KFZNJgogICAgICAgICBlbWl0T3V0T2ZMaW5lQ2F0Y2hIYW5kbGVyKHRocm93blZhbHVlLmdldCgp
LCBudWxscHRyLCB0cnlGb3JtYWxQYXJhbWV0ZXJzRGF0YSk7CiAKICAgICAgICAgLy8gcmV0dXJu
IHByb21pc2VDYXBhYmlsaXR5LkByZWplY3QodGhyb3duVmFsdWUpCi0gICAgICAgIFJlZlB0cjxS
ZWdpc3RlcklEPiByZWplY3QgPSBlbWl0R2V0QnlJZChuZXdUZW1wb3JhcnkoKSwgcHJvbWlzZUNh
cGFiaWxpdHlSZWdpc3RlcigpLCBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5y
ZWplY3RQcml2YXRlTmFtZSgpKTsKKyAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHJlamVjdCA9
IGVtaXRHZXRCeUlkKG5ld1RlbXBvcmFyeSgpLCBwcm9taXNlQ2FwYWJpbGl0eVJlZ2lzdGVyKCks
IG1fdm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkucmVqZWN0UHJpdmF0ZU5hbWUoKSk7
CiAKICAgICAgICAgQ2FsbEFyZ3VtZW50cyBhcmdzKCp0aGlzLCBudWxscHRyLCAxKTsKICAgICAg
ICAgZW1pdExvYWQoYXJncy50aGlzUmVnaXN0ZXIoKSwganNVbmRlZmluZWQoKSk7CkBAIC04MTcs
NyArODE3LDcgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJgogICAg
ICAgICBKU1RleHRQb3NpdGlvbiBkaXZvdChmdW5jdGlvbk5vZGUtPmZpcnN0TGluZSgpLCBmdW5j
dGlvbk5vZGUtPnN0YXJ0T2Zmc2V0KCksIGZ1bmN0aW9uTm9kZS0+bGluZVN0YXJ0T2Zmc2V0KCkp
OwogCiAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZXN1bHQgPSBlbWl0Q2FsbChuZXdUZW1w
b3JhcnkoKSwgcmVqZWN0LmdldCgpLCBOb0V4cGVjdGVkRnVuY3Rpb24sIGFyZ3MsIGRpdm90LCBk
aXZvdCwgZGl2b3QsIERlYnVnZ2FibGVDYWxsOjpObyk7Ci0gICAgICAgIGVtaXRSZXR1cm4oZW1p
dEdldEJ5SWQobmV3VGVtcG9yYXJ5KCksIHByb21pc2VDYXBhYmlsaXR5UmVnaXN0ZXIoKSwgbV92
bS0+cHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkucHJvbWlzZVByaXZhdGVOYW1lKCkpKTsK
KyAgICAgICAgZW1pdFJldHVybihlbWl0R2V0QnlJZChuZXdUZW1wb3JhcnkoKSwgcHJvbWlzZUNh
cGFiaWxpdHlSZWdpc3RlcigpLCBtX3ZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLnBy
b21pc2VQcml2YXRlTmFtZSgpKSk7CiAKICAgICAgICAgZW1pdExhYmVsKGRpZE5vdFRocm93Lmdl
dCgpKTsKICAgICB9CkBAIC04MzYsNyArODM2LDcgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVj
b2RlR2VuZXJhdG9yKFZNJgogICAgIC8vIFNldCB1cCB0aGUgbGV4aWNhbCBlbnZpcm9ubWVudCBz
Y29wZSBhcyB0aGUgZ2VuZXJhdG9yIGZyYW1lLiBXZSBzdG9yZSB0aGUgc2F2ZWQgYW5kIHJlc3Vt
ZWQgZ2VuZXJhdG9yIHJlZ2lzdGVycyBpbnRvIHRoaXMgc2NvcGUgd2l0aCB0aGUgc3ltYm9sIGtl
eXMuCiAgICAgLy8gU2luY2UgdGhleSBhcmUgc3ltYm9sIGtleWVkLCB0aGVzZSB2YXJpYWJsZXMg
Y2Fubm90IGJlIHJlYWNoZWQgZnJvbSB0aGUgdXN1YWwgY29kZS4KICAgICBpZiAoaXNHZW5lcmF0
b3JPckFzeW5jRnVuY3Rpb25Cb2R5UGFyc2VNb2RlKHBhcnNlTW9kZSkpIHsKLSAgICAgICAgbV9n
ZW5lcmF0b3JGcmFtZVN5bWJvbFRhYmxlLnNldCgqbV92bSwgZnVuY3Rpb25TeW1ib2xUYWJsZSk7
CisgICAgICAgIG1fZ2VuZXJhdG9yRnJhbWVTeW1ib2xUYWJsZS5zZXQobV92bSwgZnVuY3Rpb25T
eW1ib2xUYWJsZSk7CiAgICAgICAgIG1fZ2VuZXJhdG9yRnJhbWVTeW1ib2xUYWJsZUluZGV4ID0g
c3ltYm9sVGFibGVDb25zdGFudEluZGV4OwogICAgICAgICBpZiAobV9sZXhpY2FsRW52aXJvbm1l
bnRSZWdpc3RlcikKICAgICAgICAgICAgIG1vdmUoZ2VuZXJhdG9yRnJhbWVSZWdpc3RlcigpLCBt
X2xleGljYWxFbnZpcm9ubWVudFJlZ2lzdGVyKTsKQEAgLTg2MCw3ICs4NjAsNyBAQCBCeXRlY29k
ZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoVk0mCiAgICAgLCBtX2NvZGVCbG9jayh2bSwg
Y29kZUJsb2NrKQogICAgICwgbV90aGlzUmVnaXN0ZXIoQ2FsbEZyYW1lOjp0aGlzQXJndW1lbnRP
ZmZzZXQoKSkKICAgICAsIG1fY29kZVR5cGUoRXZhbENvZGUpCi0gICAgLCBtX3ZtKCZ2bSkKKyAg
ICAsIG1fdm0odm0pCiAgICAgLCBtX3VzZXNOb25TdHJpY3RFdmFsKGNvZGVCbG9jay0+dXNlc0V2
YWwoKSAmJiAhY29kZUJsb2NrLT5pc1N0cmljdE1vZGUoKSkKICAgICAsIG1fbmVlZHNUb1VwZGF0
ZUFycm93RnVuY3Rpb25Db250ZXh0KGV2YWxOb2RlLT51c2VzQXJyb3dGdW5jdGlvbigpIHx8IGV2
YWxOb2RlLT51c2VzRXZhbCgpKQogICAgICwgbV9kZXJpdmVkQ29udGV4dFR5cGUoY29kZUJsb2Nr
LT5kZXJpdmVkQ29udGV4dFR5cGUoKSkKQEAgLTkyMyw3ICs5MjMsNyBAQCBCeXRlY29kZUdlbmVy
YXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoVk0mCiAgICAgLCBtX2NvZGVCbG9jayh2bSwgY29kZUJs
b2NrKQogICAgICwgbV90aGlzUmVnaXN0ZXIoQ2FsbEZyYW1lOjp0aGlzQXJndW1lbnRPZmZzZXQo
KSkKICAgICAsIG1fY29kZVR5cGUoTW9kdWxlQ29kZSkKLSAgICAsIG1fdm0oJnZtKQorICAgICwg
bV92bSh2bSkKICAgICAsIG1fdXNlc05vblN0cmljdEV2YWwoZmFsc2UpCiAgICAgLCBtX25lZWRz
VG9VcGRhdGVBcnJvd0Z1bmN0aW9uQ29udGV4dChtb2R1bGVQcm9ncmFtTm9kZS0+dXNlc0Fycm93
RnVuY3Rpb24oKSB8fCBtb2R1bGVQcm9ncmFtTm9kZS0+dXNlc0V2YWwoKSkKIHsKQEAgLTkzNCw3
ICs5MzQsNyBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoVk0mCiAKICAg
ICBhbGxvY2F0ZUNhbGxlZVNhdmVTcGFjZSgpOwogCi0gICAgU3ltYm9sVGFibGUqIG1vZHVsZUVu
dmlyb25tZW50U3ltYm9sVGFibGUgPSBTeW1ib2xUYWJsZTo6Y3JlYXRlKCptX3ZtKTsKKyAgICBT
eW1ib2xUYWJsZSogbW9kdWxlRW52aXJvbm1lbnRTeW1ib2xUYWJsZSA9IFN5bWJvbFRhYmxlOjpj
cmVhdGUobV92bSk7CiAgICAgbW9kdWxlRW52aXJvbm1lbnRTeW1ib2xUYWJsZS0+c2V0VXNlc05v
blN0cmljdEV2YWwobV91c2VzTm9uU3RyaWN0RXZhbCk7CiAgICAgbW9kdWxlRW52aXJvbm1lbnRT
eW1ib2xUYWJsZS0+c2V0U2NvcGVUeXBlKFN5bWJvbFRhYmxlOjpTY29wZVR5cGU6OkxleGljYWxT
Y29wZSk7CiAKQEAgLTk3Miw3ICs5NzIsNyBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVH
ZW5lcmF0b3IoVk0mCiAKICAgICAvLyBOb3cgZGVjbGFyZSBhbGwgdmFyaWFibGVzLgogCi0gICAg
Y3JlYXRlVmFyaWFibGUobV92bS0+cHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkubWV0YVBy
aXZhdGVOYW1lKCksIFZhcktpbmQ6OlNjb3BlLCBtb2R1bGVFbnZpcm9ubWVudFN5bWJvbFRhYmxl
LCBWZXJpZnlFeGlzdGluZyk7CisgICAgY3JlYXRlVmFyaWFibGUobV92bS5wcm9wZXJ0eU5hbWVz
LT5idWlsdGluTmFtZXMoKS5tZXRhUHJpdmF0ZU5hbWUoKSwgVmFyS2luZDo6U2NvcGUsIG1vZHVs
ZUVudmlyb25tZW50U3ltYm9sVGFibGUsIFZlcmlmeUV4aXN0aW5nKTsKIAogICAgIGZvciAoYXV0
byYgZW50cnkgOiBtb2R1bGVQcm9ncmFtTm9kZS0+dmFyRGVjbGFyYXRpb25zKCkpIHsKICAgICAg
ICAgQVNTRVJUKCFlbnRyeS52YWx1ZS5pc0xldCgpICYmICFlbnRyeS52YWx1ZS5pc0NvbnN0KCkp
OwpAQCAtOTk0LDcgKzk5NCw3IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRv
cihWTSYKICAgICBpZiAoc2hvdWxkRW1pdFR5cGVQcm9maWxlckhvb2tzKCkpCiAgICAgICAgIGNv
bnN0YW50U3ltYm9sVGFibGUgPSBhZGRDb25zdGFudFZhbHVlKG1vZHVsZUVudmlyb25tZW50U3lt
Ym9sVGFibGUpOwogICAgIGVsc2UKLSAgICAgICAgY29uc3RhbnRTeW1ib2xUYWJsZSA9IGFkZENv
bnN0YW50VmFsdWUobW9kdWxlRW52aXJvbm1lbnRTeW1ib2xUYWJsZS0+Y2xvbmVTY29wZVBhcnQo
Km1fdm0pKTsKKyAgICAgICAgY29uc3RhbnRTeW1ib2xUYWJsZSA9IGFkZENvbnN0YW50VmFsdWUo
bW9kdWxlRW52aXJvbm1lbnRTeW1ib2xUYWJsZS0+Y2xvbmVTY29wZVBhcnQobV92bSkpOwogCiAg
ICAgcHVzaFREWlZhcmlhYmxlcyhsZXhpY2FsVmFyaWFibGVzLCBURFpDaGVja09wdGltaXphdGlv
bjo6T3B0aW1pemUsIFREWlJlcXVpcmVtZW50OjpVbmRlclREWik7CiAgICAgYm9vbCBpc1dpdGhT
Y29wZSA9IGZhbHNlOwpAQCAtMjAxNyw3ICsyMDE3LDcgQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRv
cjo6cHVzaExleGljYWxTY29wZQogICAgIGlmIChzaG91bGRFbWl0RGVidWdIb29rcygpKQogICAg
ICAgICBlbnZpcm9ubWVudC5tYXJrQWxsVmFyaWFibGVzQXNDYXB0dXJlZCgpOwogCi0gICAgU3lt
Ym9sVGFibGUqIHN5bWJvbFRhYmxlID0gU3ltYm9sVGFibGU6OmNyZWF0ZSgqbV92bSk7CisgICAg
U3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0gU3ltYm9sVGFibGU6OmNyZWF0ZShtX3ZtKTsKICAg
ICBzd2l0Y2ggKHNjb3BlVHlwZSkgewogICAgIGNhc2UgU2NvcGVUeXBlOjpDYXRjaFNjb3BlOgog
ICAgICAgICBzeW1ib2xUYWJsZS0+c2V0U2NvcGVUeXBlKFN5bWJvbFRhYmxlOjpTY29wZVR5cGU6
OkNhdGNoU2NvcGUpOwpAQCAtMjA1NCw3ICsyMDU0LDcgQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRv
cjo6cHVzaExleGljYWxTY29wZQogICAgICAgICAgICAgbmV3U2NvcGUgPSBhZGRWYXIoKTsKICAg
ICAgICAgaWYgKCFjb25zdGFudFN5bWJvbFRhYmxlKSB7CiAgICAgICAgICAgICBBU1NFUlQoIXNo
b3VsZEVtaXRUeXBlUHJvZmlsZXJIb29rcygpKTsKLSAgICAgICAgICAgIGNvbnN0YW50U3ltYm9s
VGFibGUgPSBhZGRDb25zdGFudFZhbHVlKHN5bWJvbFRhYmxlLT5jbG9uZVNjb3BlUGFydCgqbV92
bSkpOworICAgICAgICAgICAgY29uc3RhbnRTeW1ib2xUYWJsZSA9IGFkZENvbnN0YW50VmFsdWUo
c3ltYm9sVGFibGUtPmNsb25lU2NvcGVQYXJ0KG1fdm0pKTsKICAgICAgICAgICAgIHN5bWJvbFRh
YmxlQ29uc3RhbnRJbmRleCA9IGNvbnN0YW50U3ltYm9sVGFibGUtPmluZGV4KCk7CiAgICAgICAg
IH0KICAgICAgICAgaWYgKGNvbnN0YW50U3ltYm9sVGFibGVSZXN1bHQpCkBAIC0yNjQ1LDcgKzI2
NDUsNyBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdERpcmVjCiAKICAgICBt
X3N0YXRpY1Byb3BlcnR5QW5hbHl6ZXIucHV0QnlJZChiYXNlLCBwcm9wZXJ0eUluZGV4KTsKIAot
ICAgIFB1dEJ5SWRGbGFncyB0eXBlID0gKHB1dFR5cGUgPT0gUHJvcGVydHlOb2RlOjpLbm93bkRp
cmVjdCB8fCBwcm9wZXJ0eSAhPSBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT51bmRlcnNjb3JlUHJvdG8p
ID8gUHV0QnlJZElzRGlyZWN0IDogUHV0QnlJZE5vbmU7CisgICAgUHV0QnlJZEZsYWdzIHR5cGUg
PSAocHV0VHlwZSA9PSBQcm9wZXJ0eU5vZGU6Oktub3duRGlyZWN0IHx8IHByb3BlcnR5ICE9IG1f
dm0ucHJvcGVydHlOYW1lcy0+dW5kZXJzY29yZVByb3RvKSA/IFB1dEJ5SWRJc0RpcmVjdCA6IFB1
dEJ5SWROb25lOwogICAgIE9wUHV0QnlJZDo6ZW1pdCh0aGlzLCBiYXNlLCBwcm9wZXJ0eUluZGV4
LCB2YWx1ZSwgdHlwZSk7CiAgICAgbV9jb2RlQmxvY2stPmFkZFByb3BlcnR5QWNjZXNzSW5zdHJ1
Y3Rpb24obV9sYXN0SW5zdHJ1Y3Rpb24ub2Zmc2V0KCkpOwogICAgIHJldHVybiB2YWx1ZTsKQEAg
LTI5MjYsNyArMjkyNiw3IEBAIE9wdGlvbmFsPENvbXBhY3RWYXJpYWJsZU1hcDo6SGFuZGxlPiBC
eXQKICAgICAgICAgfQogICAgIH0KIAotICAgIG1fY2FjaGVkVmFyaWFibGVzVW5kZXJURFogPSBt
X3ZtLT5tX2NvbXBhY3RWYXJpYWJsZU1hcC0+Z2V0KGVudmlyb25tZW50KTsKKyAgICBtX2NhY2hl
ZFZhcmlhYmxlc1VuZGVyVERaID0gbV92bS5tX2NvbXBhY3RWYXJpYWJsZU1hcC0+Z2V0KGVudmly
b25tZW50KTsKICAgICBtX2hhc0NhY2hlZFZhcmlhYmxlc1VuZGVyVERaID0gIWVudmlyb25tZW50
LmlzRW1wdHkoKTsKICAgICBpZiAoIW1faGFzQ2FjaGVkVmFyaWFibGVzVW5kZXJURFopCiAgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CkBAIC0yOTU2LDkgKzI5NTYsOSBAQCBSZWdpc3RlcklE
KiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdE5ld09iCiBKU1ZhbHVlIEJ5dGVjb2RlR2VuZXJhdG9y
OjphZGRCaWdJbnRDb25zdGFudChjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyLCB1aW50OF90
IHJhZGl4LCBib29sIHNpZ24pCiB7CiAgICAgcmV0dXJuIG1fYmlnSW50TWFwLmVuc3VyZShCaWdJ
bnRNYXBFbnRyeShpZGVudGlmaWVyLmltcGwoKSwgcmFkaXgsIHNpZ24pLCBbJl0gewotICAgICAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSgqdm0oKSk7CisgICAgICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKCkpOwogICAgICAgICBhdXRvIHBhcnNlSW50
U2lnbiA9IHNpZ24gPyBKU0JpZ0ludDo6UGFyc2VJbnRTaWduOjpTaWduZWQgOiBKU0JpZ0ludDo6
UGFyc2VJbnRTaWduOjpVbnNpZ25lZDsKLSAgICAgICAgSlNCaWdJbnQqIGJpZ0ludEluTWFwID0g
SlNCaWdJbnQ6OnBhcnNlSW50KG51bGxwdHIsICp2bSgpLCBpZGVudGlmaWVyLnN0cmluZygpLCBy
YWRpeCwgSlNCaWdJbnQ6OkVycm9yUGFyc2VNb2RlOjpUaHJvd0V4Y2VwdGlvbnMsIHBhcnNlSW50
U2lnbik7CisgICAgICAgIEpTQmlnSW50KiBiaWdJbnRJbk1hcCA9IEpTQmlnSW50OjpwYXJzZUlu
dChudWxscHRyLCB2bSgpLCBpZGVudGlmaWVyLnN0cmluZygpLCByYWRpeCwgSlNCaWdJbnQ6OkVy
cm9yUGFyc2VNb2RlOjpUaHJvd0V4Y2VwdGlvbnMsIHBhcnNlSW50U2lnbik7CiAgICAgICAgIC8v
IEZJWE1FOiBbRVNOZXh0XSBFbmFibGVzIGEgd2F5IHRvIHRocm93IGFuIGVycm9yIG9uIEJ5dGVD
b2RlR2VuZXJhdG9yIHN0ZXAKICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE4MDEzOQogICAgICAgICBzY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwpA
QCAtMjk4Myw3ICsyOTgzLDcgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmFkZFRl
bXBsYQogewogICAgIGF1dG8gcmVzdWx0ID0gbV90ZW1wbGF0ZU9iamVjdERlc2NyaXB0b3JTZXQu
YWRkKFdURk1vdmUoZGVzY3JpcHRvcikpOwogICAgIEpTVGVtcGxhdGVPYmplY3REZXNjcmlwdG9y
KiBkZXNjcmlwdG9yVmFsdWUgPSBtX3RlbXBsYXRlRGVzY3JpcHRvck1hcC5lbnN1cmUoZW5kT2Zm
c2V0LCBbJl0gewotICAgICAgICByZXR1cm4gSlNUZW1wbGF0ZU9iamVjdERlc2NyaXB0b3I6OmNy
ZWF0ZSgqdm0oKSwgcmVzdWx0Lml0ZXJhdG9yLT5jb3B5UmVmKCksIGVuZE9mZnNldCk7CisgICAg
ICAgIHJldHVybiBKU1RlbXBsYXRlT2JqZWN0RGVzY3JpcHRvcjo6Y3JlYXRlKHZtKCksIHJlc3Vs
dC5pdGVyYXRvci0+Y29weVJlZigpLCBlbmRPZmZzZXQpOwogICAgIH0pLml0ZXJhdG9yLT52YWx1
ZTsKICAgICBpbnQgaW5kZXggPSBhZGRDb25zdGFudEluZGV4KCk7CiAgICAgbV9jb2RlQmxvY2st
PmFkZENvbnN0YW50KGRlc2NyaXB0b3JWYWx1ZSk7CkBAIC0zMTA5LDcgKzMxMDksNyBAQCBSZWdp
c3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdE5ld01lCiBSZWdpc3RlcklEKiBCeXRlY29k
ZUdlbmVyYXRvcjo6ZW1pdE5ld0RlZmF1bHRDb25zdHJ1Y3RvcihSZWdpc3RlcklEKiBkc3QsIENv
bnN0cnVjdG9yS2luZCBjb25zdHJ1Y3RvcktpbmQsIGNvbnN0IElkZW50aWZpZXImIG5hbWUsCiAg
ICAgY29uc3QgSWRlbnRpZmllciYgZWNtYU5hbWUsIGNvbnN0IFNvdXJjZUNvZGUmIGNsYXNzU291
cmNlKQogewotICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gbV92
bS0+YnVpbHRpbkV4ZWN1dGFibGVzKCktPmNyZWF0ZURlZmF1bHRDb25zdHJ1Y3Rvcihjb25zdHJ1
Y3RvcktpbmQsIG5hbWUpOworICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRh
YmxlID0gbV92bS5idWlsdGluRXhlY3V0YWJsZXMoKS0+Y3JlYXRlRGVmYXVsdENvbnN0cnVjdG9y
KGNvbnN0cnVjdG9yS2luZCwgbmFtZSk7CiAgICAgZXhlY3V0YWJsZS0+c2V0SW52YWxpZFR5cGVQ
cm9maWxpbmdPZmZzZXRzKCk7CiAgICAgZXhlY3V0YWJsZS0+c2V0RWNtYU5hbWUoZWNtYU5hbWUp
OwogICAgIGV4ZWN1dGFibGUtPnNldENsYXNzU291cmNlKGNsYXNzU291cmNlKTsKQEAgLTMxNDQs
NyArMzE0NCw3IEBAIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRTZXRGdW5jdGlvbk4KICAg
ICAgICAgQ2xhc3NFeHByTm9kZSogY2xhc3NFeHByTm9kZSA9IHN0YXRpY19jYXN0PENsYXNzRXhw
ck5vZGUqPih2YWx1ZU5vZGUpOwogICAgICAgICBpZiAoIWNsYXNzRXhwck5vZGUtPmVjbWFOYW1l
KCkuaXNOdWxsKCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmIChjbGFzc0V4cHJO
b2RlLT5oYXNTdGF0aWNQcm9wZXJ0eShtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5uYW1lKSkKKyAgICAg
ICAgaWYgKGNsYXNzRXhwck5vZGUtPmhhc1N0YXRpY1Byb3BlcnR5KG1fdm0ucHJvcGVydHlOYW1l
cy0+bmFtZSkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfSBlbHNlCiAgICAgICAgIHJldHVy
bjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5l
cmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVy
L0J5dGVjb2RlR2VuZXJhdG9yLmgJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpA
QCAtMzc5LDkgKzM3OSw5IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIH5CeXRlY29kZUdl
bmVyYXRvcigpOwogICAgICAgICAKLSAgICAgICAgVk0qIHZtKCkgY29uc3QgeyByZXR1cm4gbV92
bTsgfQorICAgICAgICBWTSYgdm0oKSBjb25zdCB7IHJldHVybiBtX3ZtOyB9CiAgICAgICAgIFBh
cnNlckFyZW5hJiBwYXJzZXJBcmVuYSgpIGNvbnN0IHsgcmV0dXJuIG1fc2NvcGVOb2RlLT5wYXJz
ZXJBcmVuYSgpOyB9Ci0gICAgICAgIGNvbnN0IENvbW1vbklkZW50aWZpZXJzJiBwcm9wZXJ0eU5h
bWVzKCkgY29uc3QgeyByZXR1cm4gKm1fdm0tPnByb3BlcnR5TmFtZXM7IH0KKyAgICAgICAgY29u
c3QgQ29tbW9uSWRlbnRpZmllcnMmIHByb3BlcnR5TmFtZXMoKSBjb25zdCB7IHJldHVybiAqbV92
bS5wcm9wZXJ0eU5hbWVzOyB9CiAKICAgICAgICAgYm9vbCBpc0NvbnN0cnVjdG9yKCkgY29uc3Qg
eyByZXR1cm4gbV9jb2RlQmxvY2stPmlzQ29uc3RydWN0b3IoKTsgfQogICAgICAgICBEZXJpdmVk
Q29udGV4dFR5cGUgZGVyaXZlZENvbnRleHRUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9kZXJpdmVk
Q29udGV4dFR5cGU7IH0KQEAgLTUwMCw3ICs1MDAsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgewogICAgICAgICAgICAgLy8gTm9kZTo6ZW1pdENvZGUgYXNzdW1lcyB0aGF0IGRzdCwgaWYg
cHJvdmlkZWQsIGlzIGVpdGhlciBhIGxvY2FsIG9yIGEgcmVmZXJlbmNlZCB0ZW1wb3JhcnkuCiAg
ICAgICAgICAgICBBU1NFUlQoIWRzdCB8fCBkc3QgPT0gaWdub3JlZFJlc3VsdCgpIHx8ICFkc3Qt
PmlzVGVtcG9yYXJ5KCkgfHwgZHN0LT5yZWZDb3VudCgpKTsKLSAgICAgICAgICAgIGlmIChVTkxJ
S0VMWSghbV92bS0+aXNTYWZlVG9SZWN1cnNlKCkpKSB7CisgICAgICAgICAgICBpZiAoVU5MSUtF
TFkoIW1fdm0uaXNTYWZlVG9SZWN1cnNlKCkpKSB7CiAgICAgICAgICAgICAgICAgZW1pdFRocm93
RXhwcmVzc2lvblRvb0RlZXBFeGNlcHRpb24oKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgICAgICB9CkBAIC01MzYsNyArNTM2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IHsKICAgICAgICAgICAgIC8vIE5vZGU6OmVtaXRDb2RlIGFzc3VtZXMgdGhhdCBkc3QsIGlmIHBy
b3ZpZGVkLCBpcyBlaXRoZXIgYSBsb2NhbCBvciBhIHJlZmVyZW5jZWQgdGVtcG9yYXJ5LgogICAg
ICAgICAgICAgQVNTRVJUKCFkc3QgfHwgZHN0ID09IGlnbm9yZWRSZXN1bHQoKSB8fCAhZHN0LT5p
c1RlbXBvcmFyeSgpIHx8IGRzdC0+cmVmQ291bnQoKSk7Ci0gICAgICAgICAgICBpZiAoVU5MSUtF
TFkoIW1fdm0tPmlzU2FmZVRvUmVjdXJzZSgpKSkKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWSgh
bV92bS5pc1NhZmVUb1JlY3Vyc2UoKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGVtaXRUaHJv
d0V4cHJlc3Npb25Ub29EZWVwRXhjZXB0aW9uKCk7CiAgICAgICAgICAgICBpZiAoVU5MSUtFTFko
bi0+bmVlZHNEZWJ1Z0hvb2soKSkpCiAgICAgICAgICAgICAgICAgZW1pdERlYnVnSG9vayhuKTsK
QEAgLTU1Niw3ICs1NTYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgUmVnaXN0ZXJJRCog
ZW1pdERlZmluZUNsYXNzRWxlbWVudHMoUHJvcGVydHlMaXN0Tm9kZSogbiwgUmVnaXN0ZXJJRCog
Y29uc3RydWN0b3IsIFJlZ2lzdGVySUQqIHByb3RvdHlwZSkKICAgICAgICAgewogICAgICAgICAg
ICAgQVNTRVJUKGNvbnN0cnVjdG9yLT5yZWZDb3VudCgpICYmIHByb3RvdHlwZS0+cmVmQ291bnQo
KSk7Ci0gICAgICAgICAgICBpZiAoVU5MSUtFTFkoIW1fdm0tPmlzU2FmZVRvUmVjdXJzZSgpKSkK
KyAgICAgICAgICAgIGlmIChVTkxJS0VMWSghbV92bS5pc1NhZmVUb1JlY3Vyc2UoKSkpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGVtaXRUaHJvd0V4cHJlc3Npb25Ub29EZWVwRXhjZXB0aW9uKCk7
CiAgICAgICAgICAgICBpZiAoVU5MSUtFTFkobi0+bmVlZHNEZWJ1Z0hvb2soKSkpCiAgICAgICAg
ICAgICAgICAgZW1pdERlYnVnSG9vayhuKTsKQEAgLTU3OSw3ICs1NzksNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKIAogICAgICAgICB2b2lkIGVtaXROb2RlSW5Db25kaXRpb25Db250ZXh0KEV4cHJlc3Np
b25Ob2RlKiBuLCBMYWJlbCYgdHJ1ZVRhcmdldCwgTGFiZWwmIGZhbHNlVGFyZ2V0LCBGYWxsVGhy
b3VnaE1vZGUgZmFsbFRocm91Z2hNb2RlKQogICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoVU5M
SUtFTFkoIW1fdm0tPmlzU2FmZVRvUmVjdXJzZSgpKSkgeworICAgICAgICAgICAgaWYgKFVOTElL
RUxZKCFtX3ZtLmlzU2FmZVRvUmVjdXJzZSgpKSkgewogICAgICAgICAgICAgICAgIGVtaXRUaHJv
d0V4cHJlc3Npb25Ub29EZWVwRXhjZXB0aW9uKCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAgICAgfQpAQCAtMTI5MCw3ICsxMjkwLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAg
ICAgICAgU3RhdGljUHJvcGVydHlBbmFseXplciBtX3N0YXRpY1Byb3BlcnR5QW5hbHl6ZXI7CiAK
LSAgICAgICAgVk0qIG1fdm07CisgICAgICAgIFZNJiBtX3ZtOwogCiAgICAgICAgIE9wY29kZUlE
IG1fbGFzdE9wY29kZUlEID0gb3BfZW5kOwogICAgICAgICBJbnN0cnVjdGlvblN0cmVhbTo6TXV0
YWJsZVJlZiBtX2xhc3RJbnN0cnVjdGlvbiB7IG1fd3JpdGVyLnJlZigpIH07CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3Bw
CShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVy
L05vZGVzQ29kZWdlbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0Niw3ICsxNDYsNyBAQCBSZWdp
c3RlcklEKiBSZWdFeHBOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0CiAKICAgICBhdXRvIGZsYWdzID0g
WWFycjo6cGFyc2VGbGFncyhtX2ZsYWdzLnN0cmluZygpKTsKICAgICBBU1NFUlQoZmxhZ3MuaGFz
VmFsdWUoKSk7Ci0gICAgUmVnRXhwKiByZWdFeHAgPSBSZWdFeHA6OmNyZWF0ZSgqZ2VuZXJhdG9y
LnZtKCksIG1fcGF0dGVybi5zdHJpbmcoKSwgZmxhZ3MudmFsdWUoKSk7CisgICAgUmVnRXhwKiBy
ZWdFeHAgPSBSZWdFeHA6OmNyZWF0ZShnZW5lcmF0b3Iudm0oKSwgbV9wYXR0ZXJuLnN0cmluZygp
LCBmbGFncy52YWx1ZSgpKTsKICAgICBpZiAocmVnRXhwLT5pc1ZhbGlkKCkpCiAgICAgICAgIHJl
dHVybiBnZW5lcmF0b3IuZW1pdE5ld1JlZ0V4cChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihk
c3QpLCByZWdFeHApOwogCkBAIC00MTAsMTIgKzQxMCwxMiBAQCBSZWdpc3RlcklEKiBBcnJheU5v
ZGU6OmVtaXRCeXRlY29kZShCeXRlCiAgICAgYXV0byBuZXdBcnJheSA9IFsmXSAoUmVnaXN0ZXJJ
RCogZHN0LCBFbGVtZW50Tm9kZSogZWxlbWVudHMsIHVuc2lnbmVkIGxlbmd0aCwgYm9vbCBoYWRW
YXJpYWJsZUV4cHJlc3Npb24pIHsKICAgICAgICAgaWYgKGxlbmd0aCAmJiAhaGFkVmFyaWFibGVF
eHByZXNzaW9uKSB7CiAgICAgICAgICAgICByZWNvbW1lbmRlZEluZGV4aW5nVHlwZSB8PSBDb3B5
T25Xcml0ZTsKLSAgICAgICAgICAgIEFTU0VSVChnZW5lcmF0b3Iudm0oKS0+aGVhcC5pc0RlZmVy
cmVkKCkpOyAvLyBXZSBydW4gYnl0ZWNvZGUgZ2VuZXJhdG9yIHVuZGVyIGEgRGVmZXJHQy4gSWYg
d2Ugc3RvcHBlZCBkb2luZyB0aGF0LCB3ZSdkIG5lZWQgdG8gcHV0IGEgRGVmZXJHQyBoZXJlIGFz
IHdlIGZpbGxlZCBpbiB0aGVzZSBzbG90cy4KLSAgICAgICAgICAgIGF1dG8qIGFycmF5ID0gSlNJ
bW11dGFibGVCdXR0ZXJmbHk6OmNyZWF0ZSgqZ2VuZXJhdG9yLnZtKCksIHJlY29tbWVuZGVkSW5k
ZXhpbmdUeXBlLCBsZW5ndGgpOworICAgICAgICAgICAgQVNTRVJUKGdlbmVyYXRvci52bSgpLmhl
YXAuaXNEZWZlcnJlZCgpKTsgLy8gV2UgcnVuIGJ5dGVjb2RlIGdlbmVyYXRvciB1bmRlciBhIERl
ZmVyR0MuIElmIHdlIHN0b3BwZWQgZG9pbmcgdGhhdCwgd2UnZCBuZWVkIHRvIHB1dCBhIERlZmVy
R0MgaGVyZSBhcyB3ZSBmaWxsZWQgaW4gdGhlc2Ugc2xvdHMuCisgICAgICAgICAgICBhdXRvKiBh
cnJheSA9IEpTSW1tdXRhYmxlQnV0dGVyZmx5OjpjcmVhdGUoZ2VuZXJhdG9yLnZtKCksIHJlY29t
bWVuZGVkSW5kZXhpbmdUeXBlLCBsZW5ndGgpOwogICAgICAgICAgICAgdW5zaWduZWQgaW5kZXgg
PSAwOwogICAgICAgICAgICAgZm9yIChFbGVtZW50Tm9kZSogZWxlbWVudCA9IGVsZW1lbnRzOyBp
bmRleCA8IGxlbmd0aDsgZWxlbWVudCA9IGVsZW1lbnQtPm5leHQoKSkgewogICAgICAgICAgICAg
ICAgIEFTU0VSVChlbGVtZW50LT52YWx1ZSgpLT5pc0NvbnN0YW50KCkpOwotICAgICAgICAgICAg
ICAgIGFycmF5LT5zZXRJbmRleCgqZ2VuZXJhdG9yLnZtKCksIGluZGV4KyssIHN0YXRpY19jYXN0
PENvbnN0YW50Tm9kZSo+KGVsZW1lbnQtPnZhbHVlKCkpLT5qc1ZhbHVlKGdlbmVyYXRvcikpOwor
ICAgICAgICAgICAgICAgIGFycmF5LT5zZXRJbmRleChnZW5lcmF0b3Iudm0oKSwgaW5kZXgrKywg
c3RhdGljX2Nhc3Q8Q29uc3RhbnROb2RlKj4oZWxlbWVudC0+dmFsdWUoKSktPmpzVmFsdWUoZ2Vu
ZXJhdG9yKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLmVt
aXROZXdBcnJheUJ1ZmZlcihkc3QsIGFycmF5LCByZWNvbW1lbmRlZEluZGV4aW5nVHlwZSk7CiAg
ICAgICAgIH0KQEAgLTkzOSw3ICs5MzksNyBAQCBSZWdpc3RlcklEKiBGdW5jdGlvbkNhbGxWYWx1
ZU5vZGU6OmVtaXRCCiAKIFJlZ2lzdGVySUQqIEZ1bmN0aW9uQ2FsbFJlc29sdmVOb2RlOjplbWl0
Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQog
ewotICAgIGlmIChVTkxJS0VMWShtX2lkZW50ID09IGdlbmVyYXRvci52bSgpLT5wcm9wZXJ0eU5h
bWVzLT5idWlsdGluTmFtZXMoKS5hc3NlcnRQcml2YXRlTmFtZSgpKSkgeworICAgIGlmIChVTkxJ
S0VMWShtX2lkZW50ID09IGdlbmVyYXRvci52bSgpLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1l
cygpLmFzc2VydFByaXZhdGVOYW1lKCkpKSB7CiAgICAgICAgIGlmIChBU1NFUlRfRElTQUJMRUQp
CiAgICAgICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLm1vdmUoZHN0LCBnZW5lcmF0b3IuZW1pdExv
YWQobnVsbHB0ciwganNVbmRlZmluZWQoKSkpOwogICAgIH0KQEAgLTEwMDQsNyArMTAwNCw3IEBA
IFJlZ2lzdGVySUQqIEJ5dGVjb2RlSW50cmluc2ljTm9kZTo6ZW1pdF8KICAgICBSZWZQdHI8UmVn
aXN0ZXJJRD4gYmFzZSA9IGdlbmVyYXRvci5lbWl0Tm9kZShub2RlKTsKICAgICBub2RlID0gbm9k
ZS0+bV9uZXh0OwogICAgIEFTU0VSVChub2RlLT5tX2V4cHItPmlzU3RyaW5nKCkpOwotICAgIFN5
bWJvbEltcGwqIHN5bWJvbCA9IGdlbmVyYXRvci52bSgpLT5wcm9wZXJ0eU5hbWVzLT5sb29rVXBQ
cml2YXRlTmFtZShzdGF0aWNfY2FzdDxTdHJpbmdOb2RlKj4obm9kZS0+bV9leHByKS0+dmFsdWUo
KSk7CisgICAgU3ltYm9sSW1wbCogc3ltYm9sID0gZ2VuZXJhdG9yLnZtKCkucHJvcGVydHlOYW1l
cy0+bG9va1VwUHJpdmF0ZU5hbWUoc3RhdGljX2Nhc3Q8U3RyaW5nTm9kZSo+KG5vZGUtPm1fZXhw
ciktPnZhbHVlKCkpOwogICAgIEFTU0VSVChzeW1ib2wpOwogICAgIEFTU0VSVCghbm9kZS0+bV9u
ZXh0KTsKICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXREaXJlY3RHZXRCeUlkKGdlbmVyYXRvci5m
aW5hbERlc3RpbmF0aW9uKGRzdCksIGJhc2UuZ2V0KCksIGdlbmVyYXRvci5wYXJzZXJBcmVuYSgp
LmlkZW50aWZpZXJBcmVuYSgpLm1ha2VJZGVudGlmaWVyKGdlbmVyYXRvci52bSgpLCBzeW1ib2wp
KTsKQEAgLTEwNTUsNyArMTA1NSw3IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlSW50cmluc2ljTm9k
ZTo6ZW1pdF8KICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9IGdlbmVyYXRvci5lbWl0Tm9k
ZShub2RlKTsKICAgICBub2RlID0gbm9kZS0+bV9uZXh0OwogICAgIEFTU0VSVChub2RlLT5tX2V4
cHItPmlzU3RyaW5nKCkpOwotICAgIFN5bWJvbEltcGwqIHN5bWJvbCA9IGdlbmVyYXRvci52bSgp
LT5wcm9wZXJ0eU5hbWVzLT5sb29rVXBQcml2YXRlTmFtZShzdGF0aWNfY2FzdDxTdHJpbmdOb2Rl
Kj4obm9kZS0+bV9leHByKS0+dmFsdWUoKSk7CisgICAgU3ltYm9sSW1wbCogc3ltYm9sID0gZ2Vu
ZXJhdG9yLnZtKCkucHJvcGVydHlOYW1lcy0+bG9va1VwUHJpdmF0ZU5hbWUoc3RhdGljX2Nhc3Q8
U3RyaW5nTm9kZSo+KG5vZGUtPm1fZXhwciktPnZhbHVlKCkpOwogICAgIEFTU0VSVChzeW1ib2wp
OwogICAgIG5vZGUgPSBub2RlLT5tX25leHQ7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHZhbHVl
ID0gZ2VuZXJhdG9yLmVtaXROb2RlKG5vZGUpOwpAQCAtMTE3NCw3ICsxMTc0LDcgQEAgUmVnaXN0
ZXJJRCogQnl0ZWNvZGVJbnRyaW5zaWNOb2RlOjplbWl0XwogICAgICAgICBBU1NFUlQoIW5vZGUt
Pm1fbmV4dCk7CiAgICAgICAgIHJldHVybiBnZW5lcmF0b3IubW92ZShkc3QsIGdlbmVyYXRvci5l
bWl0VG9PYmplY3QodGVtcC5nZXQoKSwgc3JjLmdldCgpLCBtZXNzYWdlKSk7CiAgICAgfQotICAg
IHJldHVybiBnZW5lcmF0b3IubW92ZShkc3QsIGdlbmVyYXRvci5lbWl0VG9PYmplY3QodGVtcC5n
ZXQoKSwgc3JjLmdldCgpLCBnZW5lcmF0b3Iudm0oKS0+cHJvcGVydHlOYW1lcy0+ZW1wdHlJZGVu
dGlmaWVyKSk7CisgICAgcmV0dXJuIGdlbmVyYXRvci5tb3ZlKGRzdCwgZ2VuZXJhdG9yLmVtaXRU
b09iamVjdCh0ZW1wLmdldCgpLCBzcmMuZ2V0KCksIGdlbmVyYXRvci52bSgpLnByb3BlcnR5TmFt
ZXMtPmVtcHR5SWRlbnRpZmllcikpOwogfQogCiBSZWdpc3RlcklEKiBCeXRlY29kZUludHJpbnNp
Y05vZGU6OmVtaXRfaW50cmluc2ljX2lkV2l0aFByb2ZpbGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdl
bmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQpAQCAtMTI5Nyw3ICsxMjk3LDcgQEAgUmVnaXN0ZXJJ
RCogQnl0ZWNvZGVJbnRyaW5zaWNOb2RlOjplbWl0XwogICAgICAgICBBU1NFUlQodHlwZSgpID09
IFR5cGU6OkNvbnN0YW50KTsgXAogICAgICAgICBpZiAoZHN0ID09IGdlbmVyYXRvci5pZ25vcmVk
UmVzdWx0KCkpIFwKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOyBcCi0gICAgICAgIHJldHVy
biBnZW5lcmF0b3IuZW1pdExvYWQoZHN0LCBnZW5lcmF0b3Iudm0oKS0+Ynl0ZWNvZGVJbnRyaW5z
aWNSZWdpc3RyeSgpLm5hbWUjI1ZhbHVlKGdlbmVyYXRvcikpOyBcCisgICAgICAgIHJldHVybiBn
ZW5lcmF0b3IuZW1pdExvYWQoZHN0LCBnZW5lcmF0b3Iudm0oKS5ieXRlY29kZUludHJpbnNpY1Jl
Z2lzdHJ5KCkubmFtZSMjVmFsdWUoZ2VuZXJhdG9yKSk7IFwKICAgICB9CiAgICAgSlNDX0NPTU1P
Tl9CWVRFQ09ERV9JTlRSSU5TSUNfQ09OU1RBTlRTX0VBQ0hfTkFNRShKU0NfREVDTEFSRV9CWVRF
Q09ERV9JTlRSSU5TSUNfQ09OU1RBTlRfR0VORVJBVE9SUykKICN1bmRlZiBKU0NfREVDTEFSRV9C
WVRFQ09ERV9JTlRSSU5TSUNfQ09OU1RBTlRfR0VORVJBVE9SUwpAQCAtMjMyNCw3ICsyMzI0LDcg
QEAgUmVnaXN0ZXJJRCogSW5zdGFuY2VPZk5vZGU6OmVtaXRCeXRlY29kZQogICAgIGdlbmVyYXRv
ci5lbWl0SnVtcElmRmFsc2UoaXNPYmplY3QuZ2V0KCksIHR5cGVFcnJvci5nZXQoKSk7CiAKICAg
ICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2
b3RFbmQoKSk7Ci0gICAgZ2VuZXJhdG9yLmVtaXRHZXRCeUlkKGhhc0luc3RhbmNlVmFsdWUuZ2V0
KCksIGNvbnN0cnVjdG9yLmdldCgpLCBnZW5lcmF0b3Iudm0oKS0+cHJvcGVydHlOYW1lcy0+aGFz
SW5zdGFuY2VTeW1ib2wpOworICAgIGdlbmVyYXRvci5lbWl0R2V0QnlJZChoYXNJbnN0YW5jZVZh
bHVlLmdldCgpLCBjb25zdHJ1Y3Rvci5nZXQoKSwgZ2VuZXJhdG9yLnZtKCkucHJvcGVydHlOYW1l
cy0+aGFzSW5zdGFuY2VTeW1ib2wpOwogCiAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5m
byhkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAgIGdlbmVyYXRvci5lbWl0
T3ZlcnJpZGVzSGFzSW5zdGFuY2UoaXNDdXN0b20uZ2V0KCksIGNvbnN0cnVjdG9yLmdldCgpLCBo
YXNJbnN0YW5jZVZhbHVlLmdldCgpKTsKQEAgLTIzMzMsNyArMjMzMyw3IEBAIFJlZ2lzdGVySUQq
IEluc3RhbmNlT2ZOb2RlOjplbWl0Qnl0ZWNvZGUKICAgICBnZW5lcmF0b3IuZW1pdEp1bXBJZlRy
dWUoaXNDdXN0b20uZ2V0KCksIGN1c3RvbS5nZXQoKSk7CiAKICAgICBnZW5lcmF0b3IuZW1pdEV4
cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7Ci0gICAgZ2Vu
ZXJhdG9yLmVtaXRHZXRCeUlkKHByb3RvdHlwZS5nZXQoKSwgY29uc3RydWN0b3IuZ2V0KCksIGdl
bmVyYXRvci52bSgpLT5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUpOworICAgIGdlbmVyYXRvci5l
bWl0R2V0QnlJZChwcm90b3R5cGUuZ2V0KCksIGNvbnN0cnVjdG9yLmdldCgpLCBnZW5lcmF0b3Iu
dm0oKS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUpOwogCiAgICAgZ2VuZXJhdG9yLmVtaXRFeHBy
ZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAgIGdlbmVy
YXRvci5lbWl0SW5zdGFuY2VPZihkc3RSZWcuZ2V0KCksIHZhbHVlLmdldCgpLCBwcm90b3R5cGUu
Z2V0KCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIu
Y3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIv
RGVidWdnZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqICBDb3B5
cmlnaHQgKEMpIDIwMDgtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAg
Q29weXJpZ2h0IChDKSAyMDA4LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAxIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcp
CiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCiAgKgpA
QCAtNTYsNyArNTYsNyBAQCBzdHJ1Y3QgR2F0aGVyU291cmNlUHJvdmlkZXJzIDogcHVibGljIE1h
CiAgICAgICAgIAogICAgICAgICBKU0NlbGwqIGNlbGwgPSBzdGF0aWNfY2FzdDxKU0NlbGwqPiho
ZWFwQ2VsbCk7CiAgICAgICAgIAotICAgICAgICBKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IGpzRHlu
YW1pY0Nhc3Q8SlNGdW5jdGlvbio+KCpjZWxsLT52bSgpLCBjZWxsKTsKKyAgICAgICAgSlNGdW5j
dGlvbiogZnVuY3Rpb24gPSBqc0R5bmFtaWNDYXN0PEpTRnVuY3Rpb24qPihjZWxsLT52bSgpLCBj
ZWxsKTsKICAgICAgICAgaWYgKCFmdW5jdGlvbikKICAgICAgICAgICAgIHJldHVybiBJdGVyYXRp
b25TdGF0dXM6OkNvbnRpbnVlOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdn
ZXIvRGVidWdnZXJQYXJzZURhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlclBhcnNlRGF0YS5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlclBhcnNlRGF0YS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMTU0LDcgKzE1NCw3IEBAIGJvb2wgZ2F0aGVyRGVidWdnZXJQYXJzZURhdGEo
Vk0mIHZtLCBjb24KICAgICBKU1BhcnNlclNjcmlwdE1vZGUgc2NyaXB0TW9kZSA9IERlYnVnZ2Vy
UGFyc2VJbmZvPFQ+OjpzY3JpcHRNb2RlOwogCiAgICAgUGFyc2VyRXJyb3IgZXJyb3I7Ci0gICAg
c3RkOjp1bmlxdWVfcHRyPFJvb3ROb2RlPiByb290Tm9kZSA9IHBhcnNlPFJvb3ROb2RlPigmdm0s
IHNvdXJjZSwgSWRlbnRpZmllcigpLAorICAgIHN0ZDo6dW5pcXVlX3B0cjxSb290Tm9kZT4gcm9v
dE5vZGUgPSBwYXJzZTxSb290Tm9kZT4odm0sIHNvdXJjZSwgSWRlbnRpZmllcigpLAogICAgICAg
ICBKU1BhcnNlckJ1aWx0aW5Nb2RlOjpOb3RCdWlsdGluLCBzdHJpY3RNb2RlLCBzY3JpcHRNb2Rl
LCBwYXJzZU1vZGUsIFN1cGVyQmluZGluZzo6Tm90TmVlZGVkLAogICAgICAgICBlcnJvciwgbnVs
bHB0ciwgQ29uc3RydWN0b3JLaW5kOjpOb25lLCBEZXJpdmVkQ29udGV4dFR5cGU6Ok5vbmUsIEV2
YWxDb250ZXh0VHlwZTo6Tm9uZSwKICAgICAgICAgJmRlYnVnZ2VyUGFyc2VEYXRhKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlclNjb3BlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJTY29wZS5jcHAJ
KHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1
Z2dlclNjb3BlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDgtMjAwOSwgMjAxNCwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE2Myw3ICsxNjMs
NyBAQCBEZWJ1Z2dlclNjb3BlKiBEZWJ1Z2dlclNjb3BlOjpuZXh0KCkKIHsKICAgICBBU1NFUlQo
aXNWYWxpZCgpKTsKICAgICBpZiAoIW1fbmV4dCAmJiBtX3Njb3BlLT5uZXh0KCkpIHsKLSAgICAg
ICAgVk0mIHZtID0gKm1fc2NvcGUtPnZtKCk7CisgICAgICAgIFZNJiB2bSA9IG1fc2NvcGUtPnZt
KCk7CiAgICAgICAgIERlYnVnZ2VyU2NvcGUqIG5leHRTY29wZSA9IGNyZWF0ZSh2bSwgbV9zY29w
ZS0+bmV4dCgpKTsKICAgICAgICAgbV9uZXh0LnNldCh2bSwgdGhpcywgbmV4dFNjb3BlKTsKICAg
ICB9CkBAIC0yMjQsNyArMjI0LDcgQEAgYm9vbCBEZWJ1Z2dlclNjb3BlOjppc05lc3RlZExleGlj
YWxTY29wZQogCiBTdHJpbmcgRGVidWdnZXJTY29wZTo6bmFtZSgpIGNvbnN0CiB7Ci0gICAgU3lt
Ym9sVGFibGUqIHN5bWJvbFRhYmxlID0gbV9zY29wZS0+c3ltYm9sVGFibGUoKnZtKCkpOworICAg
IFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSA9IG1fc2NvcGUtPnN5bWJvbFRhYmxlKHZtKCkpOwog
ICAgIGlmICghc3ltYm9sVGFibGUpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKIApAQCAtMjM3
LDcgKzIzNyw3IEBAIFN0cmluZyBEZWJ1Z2dlclNjb3BlOjpuYW1lKCkgY29uc3QKIAogRGVidWdn
ZXJMb2NhdGlvbiBEZWJ1Z2dlclNjb3BlOjpsb2NhdGlvbigpIGNvbnN0CiB7Ci0gICAgU3ltYm9s
VGFibGUqIHN5bWJvbFRhYmxlID0gbV9zY29wZS0+c3ltYm9sVGFibGUoKnZtKCkpOworICAgIFN5
bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSA9IG1fc2NvcGUtPnN5bWJvbFRhYmxlKHZtKCkpOwogICAg
IGlmICghc3ltYm9sVGFibGUpCiAgICAgICAgIHJldHVybiBEZWJ1Z2dlckxvY2F0aW9uKCk7CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZElkZW50aWZpZXJzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRJZGVu
dGlmaWVycy5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRGVzaXJlZElkZW50aWZpZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTg5LDcgKzg5
LDcgQEAgdm9pZCBEZXNpcmVkSWRlbnRpZmllcnM6OnJlYWxseUFkZChWTSYgdgogewogICAgIGZv
ciAoYXV0byByZXAgOiBtX2FkZGVkSWRlbnRpZmllcnMpIHsKICAgICAgICAgQVNTRVJUKHJlcC0+
aGFzQXRMZWFzdE9uZVJlZigpKTsKLSAgICAgICAgY29tbW9uRGF0YS0+ZGZnSWRlbnRpZmllcnMu
YXBwZW5kKElkZW50aWZpZXI6OmZyb21VaWQoJnZtLCByZXApKTsKKyAgICAgICAgY29tbW9uRGF0
YS0+ZGZnSWRlbnRpZmllcnMuYXBwZW5kKElkZW50aWZpZXI6OmZyb21VaWQodm0sIHJlcCkpOwog
ICAgIH0KIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0
Y2hwb2ludHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
RGVzaXJlZFdhdGNocG9pbnRzLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zOCw3ICszOCw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIHZvaWQgQXJy
YXlCdWZmZXJWaWV3V2F0Y2hwb2ludEFkYXB0b3I6OmFkZCgKICAgICBDb2RlQmxvY2sqIGNvZGVC
bG9jaywgSlNBcnJheUJ1ZmZlclZpZXcqIHZpZXcsIENvbW1vbkRhdGEmIGNvbW1vbikKIHsKLSAg
ICBWTSYgdm0gPSAqY29kZUJsb2NrLT52bSgpOworICAgIFZNJiB2bSA9IGNvZGVCbG9jay0+dm0o
KTsKICAgICBXYXRjaHBvaW50KiB3YXRjaHBvaW50ID0gY29tbW9uLndhdGNocG9pbnRzLmFkZChj
b2RlQmxvY2spOwogICAgIEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludFNldCogbmV1dGVy
aW5nV2F0Y2hwb2ludCA9CiAgICAgICAgIEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludFNl
dDo6Y3JlYXRlKHZtKTsKQEAgLTY2LDcgKzY2LDcgQEAgdm9pZCBGdW5jdGlvbkV4ZWN1dGFibGVB
ZGFwdG9yOjphZGQoCiB2b2lkIEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludEFkYXB0b3I6OmFk
ZCgKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRp
b24mIGtleSwgQ29tbW9uRGF0YSYgY29tbW9uKQogewotICAgIFZNJiB2bSA9ICpjb2RlQmxvY2st
PnZtKCk7CisgICAgVk0mIHZtID0gY29kZUJsb2NrLT52bSgpOwogICAgIHN3aXRjaCAoa2V5Lmtp
bmQoKSkgewogICAgIGNhc2UgUHJvcGVydHlDb25kaXRpb246OkVxdWl2YWxlbmNlOgogICAgICAg
ICBjb21tb24uYWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50cy5hZGQoa2V5
LCBjb2RlQmxvY2spLT5pbnN0YWxsKHZtKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRnJvemVuVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Zyb3plblZhbHVlLmgJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRnJvemVuVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU4LDcgKzU4
LDcgQEAgcHVibGljOgogICAgICAgICAsIG1fc3RyZW5ndGgoc3RyZW5ndGgpCiAgICAgewogICAg
ICAgICBBU1NFUlQoKCEhdmFsdWUgJiYgdmFsdWUuaXNDZWxsKCkpID09ICEhc3RydWN0dXJlKTsK
LSAgICAgICAgQVNTRVJUKCF2YWx1ZSB8fCAhdmFsdWUuaXNDZWxsKCkgfHwgdmFsdWUuYXNDZWxs
KCktPmNsYXNzSW5mbygqdmFsdWUuYXNDZWxsKCktPnZtKCkpID09IHN0cnVjdHVyZS0+Y2xhc3NJ
bmZvKCkpOworICAgICAgICBBU1NFUlQoIXZhbHVlIHx8ICF2YWx1ZS5pc0NlbGwoKSB8fCB2YWx1
ZS5hc0NlbGwoKS0+Y2xhc3NJbmZvKHZhbHVlLmFzQ2VsbCgpLT52bSgpKSA9PSBzdHJ1Y3R1cmUt
PmNsYXNzSW5mbygpKTsKICAgICAgICAgQVNTRVJUKCEhc3RydWN0dXJlIHx8IChzdHJlbmd0aCA9
PSBXZWFrVmFsdWUpKTsKICAgICB9CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0dyYXBoLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3MjUsNyArMTcyNSw3IEBAIGJv
b2wgR3JhcGg6OmNhbk9wdGltaXplU3RyaW5nT2JqZWN0QWNjZXMKICAgICBTdHJ1Y3R1cmUqIHN0
cmluZ09iamVjdFN0cnVjdHVyZSA9IGdsb2JhbE9iamVjdEZvcihjb2RlT3JpZ2luKS0+c3RyaW5n
T2JqZWN0U3RydWN0dXJlKCk7CiAgICAgcmVnaXN0ZXJTdHJ1Y3R1cmUoc3RyaW5nT2JqZWN0U3Ry
dWN0dXJlKTsKICAgICBBU1NFUlQoc3RyaW5nT2JqZWN0U3RydWN0dXJlLT5zdG9yZWRQcm90b3R5
cGUoKS5pc09iamVjdCgpKTsKLSAgICBBU1NFUlQoc3RyaW5nT2JqZWN0U3RydWN0dXJlLT5zdG9y
ZWRQcm90b3R5cGUoKS5hc0NlbGwoKS0+Y2xhc3NJbmZvKCpzdHJpbmdPYmplY3RTdHJ1Y3R1cmUt
PnN0b3JlZFByb3RvdHlwZSgpLmFzQ2VsbCgpLT52bSgpKSA9PSBTdHJpbmdQcm90b3R5cGU6Omlu
Zm8oKSk7CisgICAgQVNTRVJUKHN0cmluZ09iamVjdFN0cnVjdHVyZS0+c3RvcmVkUHJvdG90eXBl
KCkuYXNDZWxsKCktPmNsYXNzSW5mbyhzdHJpbmdPYmplY3RTdHJ1Y3R1cmUtPnN0b3JlZFByb3Rv
dHlwZSgpLmFzQ2VsbCgpLT52bSgpKSA9PSBTdHJpbmdQcm90b3R5cGU6OmluZm8oKSk7CiAKICAg
ICBpZiAoIXdhdGNoQ29uZGl0aW9ucyhnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eU1pc3ND
b25jdXJyZW50bHkobV92bSwgZ2xvYmFsT2JqZWN0LCBzdHJpbmdPYmplY3RTdHJ1Y3R1cmUsIG1f
dm0ucHJvcGVydHlOYW1lcy0+dG9QcmltaXRpdmVTeW1ib2wuaW1wbCgpKSkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGls
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29t
cGlsZXIuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0pJVENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTg1LDcgKzg1LDcgQEAgdm9p
ZCBKSVRDb21waWxlcjo6bGlua09TUkV4aXRzKCkKICAgICAgICAgfQogICAgIH0KICAgICAKLSAg
ICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9zckV4aXRUaHVuayA9IHZt
KCktPmdldENUSVN0dWIob3NyRXhpdFRodW5rR2VuZXJhdG9yKTsKKyAgICBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9zckV4aXRUaHVuayA9IHZtKCkuZ2V0Q1RJU3R1Yihv
c3JFeGl0VGh1bmtHZW5lcmF0b3IpOwogICAgIGF1dG8gb3NyRXhpdFRodW5rTGFiZWwgPSBDb2Rl
TG9jYXRpb25MYWJlbDxKSVRUaHVua1B0clRhZz4ob3NyRXhpdFRodW5rLmNvZGUoKSk7CiAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1faml0Q29kZS0+b3NyRXhpdC5zaXplKCk7ICsraSkg
ewogICAgICAgICBPU1JFeGl0Q29tcGlsYXRpb25JbmZvJiBpbmZvID0gbV9leGl0Q29tcGlsYXRp
b25JbmZvW2ldOwpAQCAtOTYsNyArOTYsNyBAQCB2b2lkIEpJVENvbXBpbGVyOjpsaW5rT1NSRXhp
dHMoKQogICAgICAgICAgICAgaW5mby5tX3JlcGxhY2VtZW50RGVzdGluYXRpb24gPSBsYWJlbCgp
OwogCiAgICAgICAgIGppdEFzc2VydEhhc1ZhbGlkQ2FsbEZyYW1lKCk7Ci0gICAgICAgIHN0b3Jl
MzIoVHJ1c3RlZEltbTMyKGkpLCAmdm0oKS0+b3NyRXhpdEluZGV4KTsKKyAgICAgICAgc3RvcmUz
MihUcnVzdGVkSW1tMzIoaSksICZ2bSgpLm9zckV4aXRJbmRleCk7CiAgICAgICAgIGlmIChPcHRp
b25zOjp1c2VQcm9iZU9TUkV4aXQoKSkgewogICAgICAgICAgICAgSnVtcCB0YXJnZXQgPSBqdW1w
KCk7CiAgICAgICAgICAgICBhZGRMaW5rVGFzayhbdGFyZ2V0LCBvc3JFeGl0VGh1bmtMYWJlbF0g
KExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKQEAgLTE0NywxMCArMTQ3LDEwIEBAIHZvaWQgSklU
Q29tcGlsZXI6OmNvbXBpbGVFeGNlcHRpb25IYW5kbGUKICAgICBpZiAoIW1fZXhjZXB0aW9uQ2hl
Y2tzV2l0aENhbGxGcmFtZVJvbGxiYWNrLmVtcHR5KCkpIHsKICAgICAgICAgbV9leGNlcHRpb25D
aGVja3NXaXRoQ2FsbEZyYW1lUm9sbGJhY2subGluayh0aGlzKTsKIAotICAgICAgICBjb3B5Q2Fs
bGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgpLT50b3BFbnRyeUZyYW1l
KTsKKyAgICAgICAgY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIo
dm0oKS50b3BFbnRyeUZyYW1lKTsKIAogICAgICAgICAvLyBsb29rdXBFeGNlcHRpb25IYW5kbGVy
RnJvbUNhbGxlckZyYW1lIGlzIHBhc3NlZCB0d28gYXJndW1lbnRzLCB0aGUgVk0gYW5kIHRoZSBl
eGVjICh0aGUgQ2FsbEZyYW1lKikuCi0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cih2bSgpKSwg
R1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKCZ2bSgp
KSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKICAgICAgICAgbW92ZShHUFJJbmZvOjpjYWxsRnJh
bWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKICAgICAgICAgYWRkUHRyKFRydXN0
ZWRJbW0zMihtX2dyYXBoLnN0YWNrUG9pbnRlck9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSks
IEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAKQEAg
LTE2MSwxNiArMTYxLDE2IEBAIHZvaWQgSklUQ29tcGlsZXI6OmNvbXBpbGVFeGNlcHRpb25IYW5k
bGUKICNlbmRpZgogICAgICAgICBtX2NhbGxzLmFwcGVuZChDYWxsTGlua1JlY29yZChjYWxsKE9w
ZXJhdGlvblB0clRhZyksIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4obG9va3VwRXhjZXB0
aW9uSGFuZGxlckZyb21DYWxsZXJGcmFtZSkpKTsKIAotICAgICAgICBqdW1wVG9FeGNlcHRpb25I
YW5kbGVyKCp2bSgpKTsKKyAgICAgICAganVtcFRvRXhjZXB0aW9uSGFuZGxlcih2bSgpKTsKICAg
ICB9CiAKICAgICBpZiAoIW1fZXhjZXB0aW9uQ2hlY2tzLmVtcHR5KCkpIHsKICAgICAgICAgbV9l
eGNlcHRpb25DaGVja3MubGluayh0aGlzKTsKIAotICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNUb0Vu
dHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgpLT50b3BFbnRyeUZyYW1lKTsKKyAgICAgICAg
Y29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0oKS50b3BFbnRy
eUZyYW1lKTsKIAogICAgICAgICAvLyBsb29rdXBFeGNlcHRpb25IYW5kbGVyIGlzIHBhc3NlZCB0
d28gYXJndW1lbnRzLCB0aGUgVk0gYW5kIHRoZSBleGVjICh0aGUgQ2FsbEZyYW1lKikuCi0gICAg
ICAgIG1vdmUoVHJ1c3RlZEltbVB0cih2bSgpKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAg
ICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKCZ2bSgpKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsK
ICAgICAgICAgbW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1l
bnRHUFIxKTsKIAogI2lmIENQVShYODYpCkBAIC0xODAsNyArMTgwLDcgQEAgdm9pZCBKSVRDb21w
aWxlcjo6Y29tcGlsZUV4Y2VwdGlvbkhhbmRsZQogI2VuZGlmCiAgICAgICAgIG1fY2FsbHMuYXBw
ZW5kKENhbGxMaW5rUmVjb3JkKGNhbGwoT3BlcmF0aW9uUHRyVGFnKSwgRnVuY3Rpb25QdHI8T3Bl
cmF0aW9uUHRyVGFnPihsb29rdXBFeGNlcHRpb25IYW5kbGVyKSkpOwogCi0gICAgICAgIGp1bXBU
b0V4Y2VwdGlvbkhhbmRsZXIoKnZtKCkpOworICAgICAgICBqdW1wVG9FeGNlcHRpb25IYW5kbGVy
KHZtKCkpOwogICAgIH0KIH0KIApAQCAtMjY2LDcgKzI2Niw3IEBAIHZvaWQgSklUQ29tcGlsZXI6
OmxpbmsoTGlua0J1ZmZlciYgbGlua0IKICAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2luQnlJ
ZHMsIGxpbmtCdWZmZXIpOwogICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1faW5zdGFuY2VPZnMs
IGxpbmtCdWZmZXIpOwogCi0gICAgYXV0byBsaW5rQ2FsbFRodW5rID0gRnVuY3Rpb25QdHI8Tm9Q
dHJUYWc+KHZtKCktPmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikucmV0YWdnZWRD
b2RlPE5vUHRyVGFnPigpKTsKKyAgICBhdXRvIGxpbmtDYWxsVGh1bmsgPSBGdW5jdGlvblB0cjxO
b1B0clRhZz4odm0oKS5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLnJldGFnZ2Vk
Q29kZTxOb1B0clRhZz4oKSk7CiAgICAgZm9yIChhdXRvJiByZWNvcmQgOiBtX2pzQ2FsbHMpIHsK
ICAgICAgICAgQ2FsbExpbmtJbmZvJiBpbmZvID0gKnJlY29yZC5pbmZvOwogICAgICAgICBsaW5r
QnVmZmVyLmxpbmsocmVjb3JkLnNsb3dDYWxsLCBsaW5rQ2FsbFRodW5rKTsKQEAgLTI5Myw3ICsy
OTMsNyBAQCB2b2lkIEpJVENvbXBpbGVyOjpsaW5rKExpbmtCdWZmZXImIGxpbmtCCiAgICAgICAg
ICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFnPihyZWNv
cmQuY2FsbCkpOwogICAgIH0KICAgICAKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IG9zckV4aXRUaHVuayA9IHZtKCktPmdldENUSVN0dWIob3NyRXhpdEdlbmVyYXRp
b25UaHVua0dlbmVyYXRvcik7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBvc3JFeGl0VGh1bmsgPSB2bSgpLmdldENUSVN0dWIob3NyRXhpdEdlbmVyYXRpb25UaHVu
a0dlbmVyYXRvcik7CiAgICAgYXV0byB0YXJnZXQgPSBDb2RlTG9jYXRpb25MYWJlbDxKSVRUaHVu
a1B0clRhZz4ob3NyRXhpdFRodW5rLmNvZGUoKSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG1faml0Q29kZS0+b3NyRXhpdC5zaXplKCk7ICsraSkgewogICAgICAgICBPU1JFeGl0Q29t
cGlsYXRpb25JbmZvJiBpbmZvID0gbV9leGl0Q29tcGlsYXRpb25JbmZvW2ldOwpAQCAtMzU0LDcg
KzM1NCw3IEBAIHN0YXRpYyB2b2lkIGVtaXRTdGFja092ZXJmbG93Q2hlY2soSklUQ28KICAgICBq
aXQuYWRkUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoZnJhbWVUb3BPZmZzZXQpLCBH
UFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6cmVnVDEpOwogICAgIGlmIChVTkxJ
S0VMWShtYXhGcmFtZVNpemUgPiBPcHRpb25zOjpyZXNlcnZlZFpvbmVTaXplKCkpKQogICAgICAg
ICBzdGFja092ZXJmbG93LmFwcGVuZChqaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpBYm92
ZSwgR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKSk7Ci0gICAgc3Rh
Y2tPdmVyZmxvdy5hcHBlbmQoaml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6QWJvdmUsIE1h
Y3JvQXNzZW1ibGVyOjpBYnNvbHV0ZUFkZHJlc3Moaml0LnZtKCktPmFkZHJlc3NPZlNvZnRTdGFj
a0xpbWl0KCkpLCBHUFJJbmZvOjpyZWdUMSkpOworICAgIHN0YWNrT3ZlcmZsb3cuYXBwZW5kKGpp
dC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlLCBNYWNyb0Fzc2VtYmxlcjo6QWJzb2x1
dGVBZGRyZXNzKGppdC52bSgpLmFkZHJlc3NPZlNvZnRTdGFja0xpbWl0KCkpLCBHUFJJbmZvOjpy
ZWdUMSkpOwogfQogCiB2b2lkIEpJVENvbXBpbGVyOjpjb21waWxlKCkKQEAgLTUxOSw3ICs1MTks
NyBAQCB2b2lkIEpJVENvbXBpbGVyOjpjb21waWxlRnVuY3Rpb24oKQogICAgIGNvZGVCbG9jaygp
LT5zaHJpbmtUb0ZpdChDb2RlQmxvY2s6OkxhdGVTaHJpbmspOwogCiAgICAgaWYgKHJlcXVpcmVz
QXJpdHlGaXh1cCkKLSAgICAgICAgbGlua0J1ZmZlci0+bGluayhjYWxsQXJpdHlGaXh1cCwgRnVu
Y3Rpb25QdHI8SklUVGh1bmtQdHJUYWc+KHZtKCktPmdldENUSVN0dWIoYXJpdHlGaXh1cEdlbmVy
YXRvcikuY29kZSgpKSk7CisgICAgICAgIGxpbmtCdWZmZXItPmxpbmsoY2FsbEFyaXR5Rml4dXAs
IEZ1bmN0aW9uUHRyPEpJVFRodW5rUHRyVGFnPih2bSgpLmdldENUSVN0dWIoYXJpdHlGaXh1cEdl
bmVyYXRvcikuY29kZSgpKSk7CiAKICAgICBkaXNhc3NlbWJsZSgqbGlua0J1ZmZlcik7CiAKQEAg
LTY1MywxMSArNjUzLDExIEBAIHZvaWQgSklUQ29tcGlsZXI6OmV4Y2VwdGlvbkNoZWNrKCkKICAg
ICBib29sIHdpbGxDYXRjaEV4Y2VwdGlvbiA9IG1fZ3JhcGgud2lsbENhdGNoRXhjZXB0aW9uSW5N
YWNoaW5lRnJhbWUobV9zcGVjdWxhdGl2ZS0+bV9jdXJyZW50Tm9kZS0+b3JpZ2luLmZvckV4aXQs
IG9wQ2F0Y2hPcmlnaW4sIGV4Y2VwdGlvbkhhbmRsZXIpOyAKICAgICBpZiAod2lsbENhdGNoRXhj
ZXB0aW9uKSB7CiAgICAgICAgIHVuc2lnbmVkIHN0cmVhbUluZGV4ID0gbV9zcGVjdWxhdGl2ZS0+
bV9vdXRPZkxpbmVTdHJlYW1JbmRleCA/ICptX3NwZWN1bGF0aXZlLT5tX291dE9mTGluZVN0cmVh
bUluZGV4IDogbV9zcGVjdWxhdGl2ZS0+bV9zdHJlYW0tPnNpemUoKTsKLSAgICAgICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXAgaGFkRXhjZXB0aW9uID0gZW1pdE5vblBhdGNoYWJsZUV4Y2VwdGlvbkNo
ZWNrKCp2bSgpKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgaGFkRXhjZXB0aW9uID0g
ZW1pdE5vblBhdGNoYWJsZUV4Y2VwdGlvbkNoZWNrKHZtKCkpOwogICAgICAgICAvLyBXZSBhc3N1
bWUgaGVyZSB0aGF0IHRoaXMgaXMgY2FsbGVkIGFmdGVyIGNhbGxPcGVhcnRpb24oKS9hcHBlbmRD
YWxsKCkgaXMgY2FsbGVkLgogICAgICAgICBhcHBlbmRFeGNlcHRpb25IYW5kbGluZ09TUkV4aXQo
RXhjZXB0aW9uQ2hlY2ssIHN0cmVhbUluZGV4LCBvcENhdGNoT3JpZ2luLCBleGNlcHRpb25IYW5k
bGVyLCBtX2ppdENvZGUtPmNvbW1vbi5sYXN0Q2FsbFNpdGUoKSwgaGFkRXhjZXB0aW9uKTsKICAg
ICB9IGVsc2UKLSAgICAgICAgbV9leGNlcHRpb25DaGVja3MuYXBwZW5kKGVtaXRFeGNlcHRpb25D
aGVjaygqdm0oKSkpOworICAgICAgICBtX2V4Y2VwdGlvbkNoZWNrcy5hcHBlbmQoZW1pdEV4Y2Vw
dGlvbkNoZWNrKHZtKCkpKTsKIH0KIAogQ2FsbFNpdGVJbmRleCBKSVRDb21waWxlcjo6cmVjb3Jk
Q2FsbFNpdGVBbmRHZW5lcmF0ZUV4Y2VwdGlvbkhhbmRsaW5nT1NSRXhpdElmTmVlZGVkKGNvbnN0
IENvZGVPcmlnaW4mIGNhbGxTaXRlQ29kZU9yaWdpbiwgdW5zaWduZWQgZXZlbnRTdHJlYW1JbmRl
eCkKQEAgLTY5MSw3ICs2OTEsNyBAQCB2b2lkIEpJVENvbXBpbGVyOjptYWtlQ2F0Y2hPU1JFbnRy
eUJ1ZmZlCiB7CiAgICAgaWYgKG1fZ3JhcGgubV9tYXhMb2NhbHNGb3JDYXRjaE9TUkVudHJ5KSB7
CiAgICAgICAgIHVpbnQzMl90IG51bWJlck9mTGl2ZUxvY2FscyA9IHN0ZDo6bWF4KCptX2dyYXBo
Lm1fbWF4TG9jYWxzRm9yQ2F0Y2hPU1JFbnRyeSwgMXUpOyAvLyBNYWtlIHN1cmUgd2UgYWx3YXlz
IGFsbG9jYXRlIGEgbm9uLW51bGwgY2F0Y2hPU1JFbnRyeUJ1ZmZlci4KLSAgICAgICAgbV9qaXRD
b2RlLT5jb21tb24uY2F0Y2hPU1JFbnRyeUJ1ZmZlciA9IHZtKCktPnNjcmF0Y2hCdWZmZXJGb3JT
aXplKHNpemVvZihKU1ZhbHVlKSAqIG51bWJlck9mTGl2ZUxvY2Fscyk7CisgICAgICAgIG1faml0
Q29kZS0+Y29tbW9uLmNhdGNoT1NSRW50cnlCdWZmZXIgPSB2bSgpLnNjcmF0Y2hCdWZmZXJGb3JT
aXplKHNpemVvZihKU1ZhbHVlKSAqIG51bWJlck9mTGl2ZUxvY2Fscyk7CiAgICAgfQogfQogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCShyZXZpc2lv
biAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEx
LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDExLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0xNTAsMTMgKzE1MCwxMyBAQCBwdWJsaWM6CiAKICAgICB2b2lk
IGV4Y2VwdGlvbkNoZWNrV2l0aENhbGxGcmFtZVJvbGxiYWNrKCkKICAgICB7Ci0gICAgICAgIG1f
ZXhjZXB0aW9uQ2hlY2tzV2l0aENhbGxGcmFtZVJvbGxiYWNrLmFwcGVuZChlbWl0RXhjZXB0aW9u
Q2hlY2soKnZtKCkpKTsKKyAgICAgICAgbV9leGNlcHRpb25DaGVja3NXaXRoQ2FsbEZyYW1lUm9s
bGJhY2suYXBwZW5kKGVtaXRFeGNlcHRpb25DaGVjayh2bSgpKSk7CiAgICAgfQogCiAgICAgLy8g
QWRkIGEgY2FsbCBvdXQgZnJvbSBKSVQgY29kZSwgd2l0aCBhIGZhc3QgZXhjZXB0aW9uIGNoZWNr
IHRoYXQgdGVzdHMgaWYgdGhlIHJldHVybiB2YWx1ZSBpcyB6ZXJvLgogICAgIHZvaWQgZmFzdEV4
Y2VwdGlvbkNoZWNrKCkKICAgICB7Ci0gICAgICAgIGNhbGxFeGNlcHRpb25GdXp6KCp2bSgpKTsK
KyAgICAgICAgY2FsbEV4Y2VwdGlvbkZ1enoodm0oKSk7CiAgICAgICAgIG1fZXhjZXB0aW9uQ2hl
Y2tzLmFwcGVuZChicmFuY2hUZXN0UHRyKFplcm8sIEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7
CiAgICAgfQogICAgIApAQCAtMjU0LDcgKzI1NCw3IEBAIHB1YmxpYzoKIAogICAgIFBDVG9Db2Rl
T3JpZ2luTWFwQnVpbGRlciYgcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyKCkgeyByZXR1cm4gbV9w
Y1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXI7IH0KIAotICAgIFZNKiB2bSgpIHsgcmV0dXJuICZtX2dy
YXBoLm1fdm07IH0KKyAgICBWTSYgdm0oKSB7IHJldHVybiBtX2dyYXBoLm1fdm07IH0KIAogcHJp
dmF0ZToKICAgICBmcmllbmQgY2xhc3MgT1NSRXhpdEp1bXBQbGFjZWhvbGRlcjsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTGF6eUpTVmFsdWUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTGF6eUpTVmFsdWUuY3BwCShyZXZpc2lvbiAy
NDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xhenlKU1ZhbHVlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMs
IDIwMTQsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00OSwxMSArNDksMTEgQEAgSlNWYWx1ZSBMYXp5SlNW
YWx1ZTo6Z2V0VmFsdWUoVk0mIHZtKSBjbwogICAgIGNhc2UgS25vd25WYWx1ZToKICAgICAgICAg
cmV0dXJuIHZhbHVlKCktPnZhbHVlKCk7CiAgICAgY2FzZSBTaW5nbGVDaGFyYWN0ZXJTdHJpbmc6
Ci0gICAgICAgIHJldHVybiBqc1NpbmdsZUNoYXJhY3RlclN0cmluZygmdm0sIHUuY2hhcmFjdGVy
KTsKKyAgICAgICAgcmV0dXJuIGpzU2luZ2xlQ2hhcmFjdGVyU3RyaW5nKHZtLCB1LmNoYXJhY3Rl
cik7CiAgICAgY2FzZSBLbm93blN0cmluZ0ltcGw6Ci0gICAgICAgIHJldHVybiBqc1N0cmluZygm
dm0sIHUuc3RyaW5nSW1wbCk7CisgICAgICAgIHJldHVybiBqc1N0cmluZyh2bSwgdS5zdHJpbmdJ
bXBsKTsKICAgICBjYXNlIE5ld1N0cmluZ0ltcGw6Ci0gICAgICAgIHJldHVybiBqc1N0cmluZygm
dm0sIEF0b21TdHJpbmdJbXBsOjphZGQodS5zdHJpbmdJbXBsKSk7CisgICAgICAgIHJldHVybiBq
c1N0cmluZyh2bSwgQXRvbVN0cmluZ0ltcGw6OmFkZCh1LnN0cmluZ0ltcGwpKTsKICAgICB9CiAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4gSlNWYWx1ZSgpOwpA
QCAtMjUxLDcgKzI1MSw3IEBAIHZvaWQgTGF6eUpTVmFsdWU6OmVtaXQoQ0NhbGxIZWxwZXJzJiBq
aXQKICAgICAKICAgICBqaXQuYWRkTGlua1Rhc2soCiAgICAgICAgIFtjb2RlQmxvY2ssIGxhYmVs
LCB0aGlzVmFsdWVdIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICBKU1Zh
bHVlIHJlYWxWYWx1ZSA9IHRoaXNWYWx1ZS5nZXRWYWx1ZSgqY29kZUJsb2NrLT52bSgpKTsKKyAg
ICAgICAgICAgIEpTVmFsdWUgcmVhbFZhbHVlID0gdGhpc1ZhbHVlLmdldFZhbHVlKGNvZGVCbG9j
ay0+dm0oKSk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChyZWFsVmFsdWUuaXNDZWxsKCkp
OwogCiAgICAgICAgICAgICBjb2RlQmxvY2stPmFkZENvbnN0YW50KHJlYWxWYWx1ZSk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAkocmV2aXNpb24gMjQ5
MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEwOSw3ICsxMDksNyBAQCB2b2lkKiBwcmVwYXJlT1NSRW50cnkoRXhlY1N0
YXRlKiBleGVjLCBDCiAgICAgICAgICAgICAiIGZyb20gYmMjIiwgYnl0ZWNvZGVJbmRleCwgIlxu
Iik7CiAgICAgfQogICAgIAotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7CiAKICAgICBzYW5pdGl6ZVN0YWNrRm9yVk0odm0pOwogICAgIApAQCAtMjM4
LDcgKzIzOCw3IEBAIHZvaWQqIHByZXBhcmVPU1JFbnRyeShFeGVjU3RhdGUqIGV4ZWMsIEMKICAg
ICAvLyAgICB3b3VsZCBoYXZlIG90aGVyd2lzZSBqdXN0IGtlcHQgcnVubmluZyBhbGJlaXQgbGVz
cyBxdWlja2x5LgogICAgIAogICAgIHVuc2lnbmVkIGZyYW1lU2l6ZUZvckNoZWNrID0gaml0Q29k
ZS0+Y29tbW9uLnJlcXVpcmVkUmVnaXN0ZXJDb3VudEZvckV4ZWN1dGlvbkFuZEV4aXQoKTsKLSAg
ICBpZiAoVU5MSUtFTFkoIXZtLT5lbnN1cmVTdGFja0NhcGFjaXR5Rm9yKCZleGVjLT5yZWdpc3Rl
cnMoKVt2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChmcmFtZVNpemVGb3JDaGVjayAtIDEpLm9mZnNl
dCgpXSkpKSB7CisgICAgaWYgKFVOTElLRUxZKCF2bS5lbnN1cmVTdGFja0NhcGFjaXR5Rm9yKCZl
eGVjLT5yZWdpc3RlcnMoKVt2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChmcmFtZVNpemVGb3JDaGVj
ayAtIDEpLm9mZnNldCgpXSkpKSB7CiAgICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkp
CiAgICAgICAgICAgICBkYXRhTG9nRigiICAgIE9TUiBmYWlsZWQgYmVjYXVzZSBzdGFjayBncm93
dGggZmFpbGVkLlxuIik7CiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtMjU4LDcgKzI1OCw3
IEBAIHZvaWQqIHByZXBhcmVPU1JFbnRyeShFeGVjU3RhdGUqIGV4ZWMsIEMKICAgICB1bnNpZ25l
ZCBiYXNlbGluZUZyYW1lU2l6ZSA9IGVudHJ5LT5tX2V4cGVjdGVkVmFsdWVzLm51bWJlck9mTG9j
YWxzKCk7CiAgICAgdW5zaWduZWQgbWF4RnJhbWVTaXplID0gc3RkOjptYXgoZnJhbWVTaXplLCBi
YXNlbGluZUZyYW1lU2l6ZSk7CiAKLSAgICBSZWdpc3Rlciogc2NyYXRjaCA9IGJpdHdpc2VfY2Fz
dDxSZWdpc3Rlcio+KHZtLT5zY3JhdGNoQnVmZmVyRm9yU2l6ZShzaXplb2YoUmVnaXN0ZXIpICog
KDIgKyBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycyArIG1heEZyYW1lU2l6ZSkpLT5k
YXRhQnVmZmVyKCkpOworICAgIFJlZ2lzdGVyKiBzY3JhdGNoID0gYml0d2lzZV9jYXN0PFJlZ2lz
dGVyKj4odm0uc2NyYXRjaEJ1ZmZlckZvclNpemUoc2l6ZW9mKFJlZ2lzdGVyKSAqICgyICsgQ2Fs
bEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMgKyBtYXhGcmFtZVNpemUpKS0+ZGF0YUJ1ZmZl
cigpKTsKICAgICAKICAgICAqYml0d2lzZV9jYXN0PHNpemVfdCo+KHNjcmF0Y2ggKyAwKSA9IGZy
YW1lU2l6ZTsKICAgICAKQEAgLTMxMSw3ICszMTEsNyBAQCB2b2lkKiBwcmVwYXJlT1NSRW50cnko
RXhlY1N0YXRlKiBleGVjLCBDCiAgICAgUmVnaXN0ZXJTZXQgZG9udFNhdmVSZWdpc3RlcnMgPSBS
ZWdpc3RlclNldChSZWdpc3RlclNldDo6c3RhY2tSZWdpc3RlcnMoKSwgUmVnaXN0ZXJTZXQ6OmFs
bEZQUnMoKSk7CiAKICAgICB1bnNpZ25lZCByZWdpc3RlckNvdW50ID0gcmVnaXN0ZXJTYXZlTG9j
YXRpb25zLT5zaXplKCk7Ci0gICAgVk1FbnRyeVJlY29yZCogcmVjb3JkID0gdm1FbnRyeVJlY29y
ZCh2bS0+dG9wRW50cnlGcmFtZSk7CisgICAgVk1FbnRyeVJlY29yZCogcmVjb3JkID0gdm1FbnRy
eVJlY29yZCh2bS50b3BFbnRyeUZyYW1lKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
cmVnaXN0ZXJDb3VudDsgaSsrKSB7CiAgICAgICAgIFJlZ2lzdGVyQXRPZmZzZXQgY3VycmVudEVu
dHJ5ID0gcmVnaXN0ZXJTYXZlTG9jYXRpb25zLT5hdChpKTsKICAgICAgICAgaWYgKGRvbnRTYXZl
UmVnaXN0ZXJzLmdldChjdXJyZW50RW50cnkucmVnKCkpKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIxLDE3
ICsxMDIxLDE3IEBAIHZvaWQgT1NSRXhpdDo6ZW1pdFJlc3RvcmVBcmd1bWVudHMoQ0NhbGwKIAog
dm9pZCBKSVRfT1BFUkFUSU9OIE9TUkV4aXQ6OmNvbXBpbGVPU1JFeGl0KEV4ZWNTdGF0ZSogZXhl
YykKIHsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSgqdm0pOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgaWYgKHZhbGlkYXRlREZHRG9l
c0dDKSB7CiAgICAgICAgIC8vIFdlJ3JlIGFib3V0IHRvIGV4aXQgb3B0aW1pemVkIGNvZGUuIFNv
LCB0aGVyZSdzIG5vIGxvbmdlciBhbnkgb3B0aW1pemVkCiAgICAgICAgIC8vIGNvZGUgcnVubmlu
ZyB0aGF0IGV4cGVjdHMgbm8gR0MuCi0gICAgICAgIHZtLT5oZWFwLnNldEV4cGVjdERvZXNHQyh0
cnVlKTsKKyAgICAgICAgdm0uaGVhcC5zZXRFeHBlY3REb2VzR0ModHJ1ZSk7CiAgICAgfQogCi0g
ICAgaWYgKHZtLT5jYWxsRnJhbWVGb3JDYXRjaCkKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQodm0t
PmNhbGxGcmFtZUZvckNhdGNoID09IGV4ZWMpOworICAgIGlmICh2bS5jYWxsRnJhbWVGb3JDYXRj
aCkKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQodm0uY2FsbEZyYW1lRm9yQ2F0Y2ggPT0gZXhlYyk7
CiAKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOwogICAgIEFT
U0VSVChjb2RlQmxvY2spOwpAQCAtMTAzOSwxMiArMTAzOSwxMiBAQCB2b2lkIEpJVF9PUEVSQVRJ
T04gT1NSRXhpdDo6Y29tcGlsZU9TUkV4CiAKICAgICAvLyBJdCdzIHNvcnQgb2YgcHJlZmVyYWJs
ZSB0aGF0IHdlIGRvbid0IEdDIHdoaWxlIGluIGhlcmUuIEFueXdheXMsIGRvaW5nIHNvIHdvdWxk
bid0CiAgICAgLy8gcmVhbGx5IGJlIHByb2ZpdGFibGUuCi0gICAgRGVmZXJHQ0ZvckFXaGlsZSBk
ZWZlckdDKHZtLT5oZWFwKTsKKyAgICBEZWZlckdDRm9yQVdoaWxlIGRlZmVyR0Modm0uaGVhcCk7
CiAKLSAgICB1aW50MzJfdCBleGl0SW5kZXggPSB2bS0+b3NyRXhpdEluZGV4OworICAgIHVpbnQz
Ml90IGV4aXRJbmRleCA9IHZtLm9zckV4aXRJbmRleDsKICAgICBPU1JFeGl0JiBleGl0ID0gY29k
ZUJsb2NrLT5qaXRDb2RlKCktPmRmZygpLT5vc3JFeGl0W2V4aXRJbmRleF07CiAKLSAgICBBU1NF
UlQoIXZtLT5jYWxsRnJhbWVGb3JDYXRjaCB8fCBleGl0Lm1fa2luZCA9PSBHZW5lcmljVW53aW5k
KTsKKyAgICBBU1NFUlQoIXZtLmNhbGxGcmFtZUZvckNhdGNoIHx8IGV4aXQubV9raW5kID09IEdl
bmVyaWNVbndpbmQpOwogICAgIEVYQ0VQVElPTl9BU1NFUlRfVU5VU0VEKHNjb3BlLCAhIXNjb3Bl
LmV4Y2VwdGlvbigpIHx8ICFleGl0LmlzRXhjZXB0aW9uSGFuZGxlcigpKTsKICAgICAKICAgICBw
cmVwYXJlQ29kZU9yaWdpbkZvck9TUkV4aXQoZXhlYywgZXhpdC5tX2NvZGVPcmlnaW4pOwpAQCAt
MTA2Myw4ICsxMDYzLDggQEAgdm9pZCBKSVRfT1BFUkFUSU9OIE9TUkV4aXQ6OmNvbXBpbGVPU1JF
eAogICAgICAgICBpZiAoZXhpdC5tX2tpbmQgPT0gR2VuZXJpY1Vud2luZCkgewogICAgICAgICAg
ICAgLy8gV2UgYXJlIGFjdGluZyBhcyBhIGRlZmFjdG8gb3BfY2F0Y2ggYmVjYXVzZSB3ZSBhcnJp
dmUgaGVyZSBmcm9tIGdlbmVyaWNVbndpbmQoKS4KICAgICAgICAgICAgIC8vIFNvLCB3ZSBtdXN0
IHJlc3RvcmUgb3VyIGNhbGwgZnJhbWUgYW5kIHN0YWNrIHBvaW50ZXIuCi0gICAgICAgICAgICBq
aXQucmVzdG9yZUNhbGxlZVNhdmVzRnJvbUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bS0+
dG9wRW50cnlGcmFtZSk7Ci0gICAgICAgICAgICBqaXQubG9hZFB0cih2bS0+YWRkcmVzc09mQ2Fs
bEZyYW1lRm9yQ2F0Y2goKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOworICAgICAgICAg
ICAgaml0LnJlc3RvcmVDYWxsZWVTYXZlc0Zyb21FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIo
dm0udG9wRW50cnlGcmFtZSk7CisgICAgICAgICAgICBqaXQubG9hZFB0cih2bS5hZGRyZXNzT2ZD
YWxsRnJhbWVGb3JDYXRjaCgpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CiAgICAgICAg
IH0KICAgICAgICAgaml0LmFkZFB0cigKICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbTMyKGNvZGVCbG9jay0+c3RhY2tQb2ludGVyT2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIp
KSwKQEAgLTEwNzIsOCArMTA3Miw4IEBAIHZvaWQgSklUX09QRVJBVElPTiBPU1JFeGl0Ojpjb21w
aWxlT1NSRXgKIAogICAgICAgICBqaXQuaml0QXNzZXJ0SGFzVmFsaWRDYWxsRnJhbWUoKTsKIAot
ICAgICAgICBpZiAoVU5MSUtFTFkodm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlciAmJiBjb2RlQmxv
Y2stPmppdENvZGUoKS0+ZGZnQ29tbW9uKCktPmNvbXBpbGF0aW9uKSkgewotICAgICAgICAgICAg
UHJvZmlsZXI6OkRhdGFiYXNlJiBkYXRhYmFzZSA9ICp2bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVy
OworICAgICAgICBpZiAoVU5MSUtFTFkodm0ubV9wZXJCeXRlY29kZVByb2ZpbGVyICYmIGNvZGVC
bG9jay0+aml0Q29kZSgpLT5kZmdDb21tb24oKS0+Y29tcGlsYXRpb24pKSB7CisgICAgICAgICAg
ICBQcm9maWxlcjo6RGF0YWJhc2UmIGRhdGFiYXNlID0gKnZtLm1fcGVyQnl0ZWNvZGVQcm9maWxl
cjsKICAgICAgICAgICAgIFByb2ZpbGVyOjpDb21waWxhdGlvbiogY29tcGlsYXRpb24gPSBjb2Rl
QmxvY2stPmppdENvZGUoKS0+ZGZnQ29tbW9uKCktPmNvbXBpbGF0aW9uLmdldCgpOwogCiAgICAg
ICAgICAgICBQcm9maWxlcjo6T1NSRXhpdCogcHJvZmlsZXJFeGl0ID0gY29tcGlsYXRpb24tPmFk
ZE9TUkV4aXQoCkBAIC0xMDgyLDcgKzEwODIsNyBAQCB2b2lkIEpJVF9PUEVSQVRJT04gT1NSRXhp
dDo6Y29tcGlsZU9TUkV4CiAgICAgICAgICAgICBqaXQuYWRkNjQoQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tMzIoMSksIENDYWxsSGVscGVyczo6QWJzb2x1dGVBZGRyZXNzKHByb2ZpbGVyRXhpdC0+
Y291bnRlckFkZHJlc3MoKSkpOwogICAgICAgICB9CiAKLSAgICAgICAgY29tcGlsZUV4aXQoaml0
LCAqdm0sIGV4aXQsIG9wZXJhbmRzLCByZWNvdmVyeSk7CisgICAgICAgIGNvbXBpbGVFeGl0KGpp
dCwgdm0sIGV4aXQsIG9wZXJhbmRzLCByZWNvdmVyeSk7CiAKICAgICAgICAgTGlua0J1ZmZlciBw
YXRjaEJ1ZmZlcihqaXQsIGNvZGVCbG9jayk7CiAgICAgICAgIGV4aXQubV9jb2RlID0gRklOQUxJ
WkVfQ09ERV9JRigKQEAgLTEwOTYsNyArMTA5Niw3IEBAIHZvaWQgSklUX09QRVJBVElPTiBPU1JF
eGl0Ojpjb21waWxlT1NSRXgKIAogICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVtcChleGl0
LmNvZGVMb2NhdGlvbkZvclJlcGF0Y2goKSwgQ29kZUxvY2F0aW9uTGFiZWw8T1NSRXhpdFB0clRh
Zz4oZXhpdC5tX2NvZGUuY29kZSgpKSk7CiAKLSAgICB2bS0+b3NyRXhpdEp1bXBEZXN0aW5hdGlv
biA9IGV4aXQubV9jb2RlLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOworICAgIHZtLm9zckV4
aXRKdW1wRGVzdGluYXRpb24gPSBleGl0Lm1fY29kZS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3Mo
KTsKIH0KIAogdm9pZCBPU1JFeGl0Ojpjb21waWxlRXhpdChDQ2FsbEhlbHBlcnMmIGppdCwgVk0m
IHZtLCBjb25zdCBPU1JFeGl0JiBleGl0LCBjb25zdCBPcGVyYW5kczxWYWx1ZVJlY292ZXJ5PiYg
b3BlcmFuZHMsIFNwZWN1bGF0aW9uUmVjb3ZlcnkqIHJlY292ZXJ5KQpAQCAtMTY0NywxNCArMTY0
NywxNCBAQCB2b2lkIE9TUkV4aXQ6OmNvbXBpbGVFeGl0KENDYWxsSGVscGVycyYgCiAKIHZvaWQg
SklUX09QRVJBVElPTiBPU1JFeGl0OjpkZWJ1Z09wZXJhdGlvblByaW50U3BlY3VsYXRpb25GYWls
dXJlKEV4ZWNTdGF0ZSogZXhlYywgdm9pZCogZGVidWdJbmZvUmF3LCB2b2lkKiBzY3JhdGNoKQog
ewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAg
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAKICAgICBTcGVjdWxh
dGlvbkZhaWx1cmVEZWJ1Z0luZm8qIGRlYnVnSW5mbyA9IHN0YXRpY19jYXN0PFNwZWN1bGF0aW9u
RmFpbHVyZURlYnVnSW5mbyo+KGRlYnVnSW5mb1Jhdyk7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxv
Y2sgPSBkZWJ1Z0luZm8tPmNvZGVCbG9jazsKICAgICBDb2RlQmxvY2sqIGFsdGVybmF0aXZlID0g
Y29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpOwogICAgIGRhdGFMb2coIlNwZWN1bGF0aW9uIGZhaWx1
cmUgaW4gIiwgKmNvZGVCbG9jayk7Ci0gICAgZGF0YUxvZygiIEAgZXhpdCAjIiwgdm0tPm9zckV4
aXRJbmRleCwgIiAoYmMjIiwgZGVidWdJbmZvLT5ieXRlY29kZU9mZnNldCwgIiwgIiwgZXhpdEtp
bmRUb1N0cmluZyhkZWJ1Z0luZm8tPmtpbmQpLCAiKSB3aXRoICIpOworICAgIGRhdGFMb2coIiBA
IGV4aXQgIyIsIHZtLm9zckV4aXRJbmRleCwgIiAoYmMjIiwgZGVidWdJbmZvLT5ieXRlY29kZU9m
ZnNldCwgIiwgIiwgZXhpdEtpbmRUb1N0cmluZyhkZWJ1Z0luZm8tPmtpbmQpLCAiKSB3aXRoICIp
OwogICAgIGlmIChhbHRlcm5hdGl2ZSkgewogICAgICAgICBkYXRhTG9nKAogICAgICAgICAgICAg
ImV4ZWN1dGVDb3VudGVyID0gIiwgYWx0ZXJuYXRpdmUtPmppdEV4ZWN1dGVDb3VudGVyKCksCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBp
bGVyQ29tbW9uLmgJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQx
LDcgQEAgdm9pZCByZWlmeUlubGluZWRDYWxsRnJhbWVzKENDYWxsSGVscGVycwogdm9pZCBhZGp1
c3RBbmRKdW1wVG9UYXJnZXQoVk0mLCBDQ2FsbEhlbHBlcnMmLCBjb25zdCBPU1JFeGl0QmFzZSYp
OwogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgSklUQ29kZVR5cGU+Ci12b2lkIGFkanVzdEZyYW1lQW5k
U3RhY2tJbk9TUkV4aXRDb21waWxlclRodW5rKE1hY3JvQXNzZW1ibGVyJiBqaXQsIFZNKiB2bSwg
SklUVHlwZSBqaXRUeXBlKQordm9pZCBhZGp1c3RGcmFtZUFuZFN0YWNrSW5PU1JFeGl0Q29tcGls
ZXJUaHVuayhNYWNyb0Fzc2VtYmxlciYgaml0LCBWTSYgdm0sIEpJVFR5cGUgaml0VHlwZSkKIHsK
ICAgICBBU1NFUlQoaml0VHlwZSA9PSBKSVRUeXBlOjpERkdKSVQgfHwgaml0VHlwZSA9PSBKSVRU
eXBlOjpGVExKSVQpOwogCkBAIC01OCw3ICs1OCw3IEBAIHZvaWQgYWRqdXN0RnJhbWVBbmRTdGFj
a0luT1NSRXhpdENvbXBpbGUKICAgICBpZiAoaXNGVExPU1JFeGl0KQogICAgICAgICBzY3JhdGNo
U2l6ZSArPSBzaXplb2Yodm9pZCopOwogCi0gICAgU2NyYXRjaEJ1ZmZlciogc2NyYXRjaEJ1ZmZl
ciA9IHZtLT5zY3JhdGNoQnVmZmVyRm9yU2l6ZShzY3JhdGNoU2l6ZSk7CisgICAgU2NyYXRjaEJ1
ZmZlciogc2NyYXRjaEJ1ZmZlciA9IHZtLnNjcmF0Y2hCdWZmZXJGb3JTaXplKHNjcmF0Y2hTaXpl
KTsKICAgICBjaGFyKiBidWZmZXIgPSBzdGF0aWNfY2FzdDxjaGFyKj4oc2NyYXRjaEJ1ZmZlci0+
ZGF0YUJ1ZmZlcigpKTsKIAogICAgIGppdC5wdXNoVG9TYXZlKEdQUkluZm86OnJlZ1QxKTsKQEAg
LTgwLDcgKzgwLDcgQEAgdm9pZCBhZGp1c3RGcmFtZUFuZFN0YWNrSW5PU1JFeGl0Q29tcGlsZQog
ICAgIGppdC5wb3BUb1Jlc3RvcmUoR1BSSW5mbzo6cmVnVDEpOwogCiAgICAgLy8gV2UgbmVlZCB0
byByZXNldCBGUCBpbiB0aGUgY2FzZSBvZiBhbiBleGNlcHRpb24uCi0gICAgaml0LmxvYWRQdHIo
dm0tPmFkZHJlc3NPZkNhbGxGcmFtZUZvckNhdGNoKCksIEdQUkluZm86OnJlZ1QwKTsKKyAgICBq
aXQubG9hZFB0cih2bS5hZGRyZXNzT2ZDYWxsRnJhbWVGb3JDYXRjaCgpLCBHUFJJbmZvOjpyZWdU
MCk7CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZGlkTm90SGF2ZUV4Y2VwdGlvbiA9IGppdC5i
cmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBHUFJJbmZvOjpyZWdUMCk7CiAgICAg
aml0Lm1vdmUoR1BSSW5mbzo6cmVnVDAsIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKICAg
ICBkaWROb3RIYXZlRXhjZXB0aW9uLmxpbmsoJmppdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE4OSw3ICsxODksNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBWaWV3Q2xhc3M+CiBjaGFyKiBuZXdU
eXBlZEFycmF5V2l0aFNpemUoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
aW50MzJfdCBzaXplLCBjaGFyKiB2ZWN0b3IpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsK
LSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZl
Q2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgaWYgKHNpemUgPCAwKSB7CkBAIC0yMTYsOSArMjE2
LDkgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgdm9pZCBwdXRXaXRoVGhpcyhFeAogdGVtcGxhdGU8
dHlwZW5hbWUgQmlnSW50T3BlcmF0aW9uLCB0eXBlbmFtZSBOdW1iZXJPcGVyYXRpb24+CiBzdGF0
aWMgQUxXQVlTX0lOTElORSBFbmNvZGVkSlNWYWx1ZSBiaW5hcnlPcChFeGVjU3RhdGUqIGV4ZWMs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIsIEJp
Z0ludE9wZXJhdGlvbiYmIGJpZ0ludE9wLCBOdW1iZXJPcGVyYXRpb24mJiBudW1iZXJPcCwgY29u
c3QgY2hhciogZXJyb3JNZXNzYWdlKQogewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2
bSwgZXhlYyk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKKyAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBKU1ZhbHVlIG9w
MSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AxKTsKICAgICBKU1ZhbHVlIG9wMiA9IEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkT3AyKTsKQEAgLTI0Myw5ICsyNDMsOSBAQCBzdGF0aWMgQUxXQVlT
X0lOTElORSBFbmNvZGVkSlNWYWx1ZSBiaW5hCiB0ZW1wbGF0ZTx0eXBlbmFtZSBCaWdJbnRPcGVy
YXRpb24sIHR5cGVuYW1lIEludDMyT3BlcmF0aW9uPgogc3RhdGljIEFMV0FZU19JTkxJTkUgRW5j
b2RlZEpTVmFsdWUgYml0d2lzZUJpbmFyeU9wKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMiwgQmlnSW50T3BlcmF0aW9u
JiYgYmlnSW50T3AsIEludDMyT3BlcmF0aW9uJiYgaW50MzJPcCwgY29uc3QgY2hhciogZXJyb3JN
ZXNzYWdlKQogewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0gICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKKyAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBKU1ZhbHVlIG9wMSA9IEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkT3AxKTsKICAgICBKU1ZhbHVlIG9wMiA9IEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkT3AyKTsKQEAgLTI4OSw3ICsyODksNyBAQCBleHRlcm4gIkMiIHsKIAogRW5jb2RlZEpTVmFs
dWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25Ub1RoaXMoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkT3ApCiB7Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBl
eGVjKTsKIAogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRPcCkudG9UaGlzKGV4ZWMsIE5vdFN0cmljdE1vZGUpKTsKQEAgLTI5Nyw3ICsyOTcsNyBAQCBF
bmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRvCiAKIEVuY29kZWRKU1ZhbHVl
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVG9UaGlzU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZE9wKQogewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2
bSwgZXhlYyk7CiAKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWU6OmRlY29kZShl
bmNvZGVkT3ApLnRvVGhpcyhleGVjLCBTdHJpY3RNb2RlKSk7CkBAIC0zMDYsNyArMzA2LDcgQEAg
RW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25UbwogSlNBcnJheSogSklUX09Q
RVJBVElPTiBvcGVyYXRpb25PYmplY3RLZXlzKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZE9iamVjdCkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVU
cmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAKICAgICBKU09iamVjdCogb2JqZWN0ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRPYmplY3QpLnRvT2JqZWN0KGV4ZWMpOwpAQCAtMzE4LDE0ICszMTgsMTQgQEAgSlNBcnJheSog
SklUX09QRVJBVElPTiBvcGVyYXRpb25PYmplY3RLZQogSlNBcnJheSogSklUX09QRVJBVElPTiBv
cGVyYXRpb25PYmplY3RLZXlzT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9iamVj
dCkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZt
LCBleGVjKTsKICAgICByZXR1cm4gb3duUHJvcGVydHlLZXlzKGV4ZWMsIG9iamVjdCwgUHJvcGVy
dHlOYW1lTW9kZTo6U3RyaW5ncywgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6RXhjbHVkZSk7CiB9
CiAKIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25PYmplY3RDcmVhdGUoRXhlY1N0YXRl
KiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvdG90eXBlKQogewogICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMp
OworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEpTVmFsdWUgcHJvdG90eXBl
ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRQcm90b3R5cGUpOwpAQCAtMzQzLDE0ICszNDMsMTQg
QEAgSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk9iamVjdENyZQogSlNDZWxsKiBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbk9iamVjdENyZWF0ZU9iamVjdChFeGVjU3RhdGUqIGV4ZWMsIEpT
T2JqZWN0KiBwcm90b3R5cGUpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgcmV0dXJuIGNvbnN0cnVjdEVtcHR5T2JqZWN0
KGV4ZWMsIHByb3RvdHlwZSk7CiB9CiAKIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25D
cmVhdGVUaGlzKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGNvbnN0cnVjdG9yLCB1aW50MzJf
dCBpbmxpbmVDYXBhY2l0eSkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVU
cmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAgICAgaWYgKGNvbnN0cnVjdG9yLT50eXBlKCkgPT0gSlNGdW5jdGlvblR5cGUg
JiYganNDYXN0PEpTRnVuY3Rpb24qPihjb25zdHJ1Y3RvciktPmNhblVzZUFsbG9jYXRpb25Qcm9m
aWxlKCkpIHsKICAgICAgICAgYXV0byByYXJlRGF0YSA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY29u
c3RydWN0b3IpLT5lbnN1cmVSYXJlRGF0YUFuZEFsbG9jYXRpb25Qcm9maWxlKGV4ZWMsIGlubGlu
ZUNhcGFjaXR5KTsKQEAgLTM3Nyw3ICszNzcsNyBAQCBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uQ3JlYXRlVGhpCiAKIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25DYWxsT2Jq
ZWN0Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVGFyZ2V0KQogewotICAgIFZNKiB2bSA9ICZleGVj
LT52bSgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcih2bSwgZXhlYyk7CiAKICAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVj
b2RlKGVuY29kZWRUYXJnZXQpOwpAQCAtMzkwLDkgKzM5MCw5IEBAIEpTQ2VsbCogSklUX09QRVJB
VElPTiBvcGVyYXRpb25DYWxsT2JqZWMKIAogSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
blRvT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFRhcmdldCwgVW5pcXVlZFN0cmluZ0ltcGwqIGVycm9yTWVz
c2FnZSkKIHsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBleGVjLT52
bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwotICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7CisgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkVGFyZ2V0KTsKICAgICBBU1NFUlQoIXZhbHVlLmlzT2JqZWN0KCkpOwpAQCAt
NDIyLDkgKzQyMiw5IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmEK
IAogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25WYWx1ZUJpdE5vdChFeGVj
U3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEpCiB7Ci0gICAgVk0qIHZtID0g
JmV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSgqdm0pOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
IAogICAgIEpTVmFsdWUgb3AxID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDEpOwogCkBAIC00
OTEsOSArNDkxLDkgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25WYQog
CiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZhbHVlQml0UlNoaWZ0KEV4
ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZE9wMikKIHsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwot
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7CisgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgSlNWYWx1ZSBvcDEgPSBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZE9wMSk7CiAgICAgSlNWYWx1ZSBvcDIgPSBKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZE9wMik7CkBAIC01MDcsOSArNTA3LDkgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJB
VElPTiBvcGVyYXRpb25WYQogCiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
blZhbHVlQml0VVJTaGlmdChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRP
cDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpCiB7Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZt
KCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIg
dHJhY2VyKHZtLCBleGVjKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSgq
dm0pOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEpT
VmFsdWUgb3AxID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDEpOwogICAgIEpTVmFsdWUgb3Ay
ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDIpOwpAQCAtNTIzLDcgKzUyMyw3IEBAIEVuY29k
ZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmEKIAogRW5jb2RlZEpTVmFsdWUgSklU
X09QRVJBVElPTiBvcGVyYXRpb25WYWx1ZUFkZE5vdE51bWJlcihFeGVjU3RhdGUqIGV4ZWMsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpCiB7Ci0g
ICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICAKICAgICBKU1ZhbHVl
IG9wMSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AxKTsKQEAgLTU2MCw5ICs1NjAsOSBAQCBF
bmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZhCiAKIGRvdWJsZSBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbkFyaXRoQWJzKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZE9wMSkKIHsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwot
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7CisgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgSlNWYWx1ZSBvcDEgPSBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZE9wMSk7CiAgICAgZG91YmxlIGEgPSBvcDEudG9OdW1iZXIoZXhlYyk7
CkBAIC01NzIsOSArNTcyLDkgQEAgZG91YmxlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXJpdGhB
YnMoRQogCiB1aW50MzJfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFyaXRoQ2x6MzIoRXhlY1N0
YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxKQogewotICAgIFZNKiB2bSA9ICZl
eGVjLT52bSgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUoKnZtKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAK
ICAgICBKU1ZhbHVlIG9wMSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AxKTsKICAgICB1aW50
MzJfdCB2YWx1ZSA9IG9wMS50b1VJbnQzMihleGVjKTsKQEAgLTU4NCw5ICs1ODQsOSBAQCB1aW50
MzJfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFyaXRoQ2x6CiAKIGRvdWJsZSBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvbkFyaXRoRlJvdW5kKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZE9wMSkKIHsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwot
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7CisgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgSlNWYWx1ZSBvcDEgPSBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZE9wMSk7CiAgICAgZG91YmxlIGEgPSBvcDEudG9OdW1iZXIoZXhlYyk7
CkBAIC01OTcsOSArNTk3LDkgQEAgZG91YmxlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXJpdGhG
Um91bgogI2RlZmluZSBERkdfQVJJVEhfVU5BUlkoY2FwaXRhbGl6ZWROYW1lLCBsb3dlck5hbWUp
IFwKIGRvdWJsZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFyaXRoIyNjYXBpdGFsaXplZE5hbWUo
RXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxKSBcCiB7IFwKLSAgICBW
TSogdm0gPSAmZXhlYy0+dm0oKTsgXAorICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7IFwKICAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsgXAotICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7IFwKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7IFwKICAgICBKU1ZhbHVlIG9wMSA9IEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkT3AxKTsgXAogICAgIGRvdWJsZSByZXN1bHQgPSBvcDEudG9OdW1iZXIoZXhlYyk7IFwKICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBQTmFOKTsgXApAQCAtNjEwLDkgKzYxMCw5IEBA
IGRvdWJsZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFyaXRoIyNjYXAKIAogZG91YmxlIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uQXJpdGhTcXJ0KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZE9wMSkKIHsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0g
PSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMp
OwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7CisgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgSlNWYWx1ZSBvcDEgPSBKU1Zh
bHVlOjpkZWNvZGUoZW5jb2RlZE9wMSk7CiAgICAgZG91YmxlIGEgPSBvcDEudG9OdW1iZXIoZXhl
Yyk7CkBAIC02MjIsOSArNjIyLDkgQEAgZG91YmxlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXJp
dGhTcXJ0KAogCiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFyaXRoUm91
bmQoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQXJndW1lbnQpCiB7Ci0g
ICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLSAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSgqdm0pOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKIAogICAgIEpTVmFsdWUgYXJndW1lbnQgPSBKU1ZhbHVlOjpkZWNvZGUoZW5j
b2RlZEFyZ3VtZW50KTsKICAgICBkb3VibGUgdmFsdWVPZkFyZ3VtZW50ID0gYXJndW1lbnQudG9O
dW1iZXIoZXhlYyk7CkBAIC02MzQsOSArNjM0LDkgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJB
VElPTiBvcGVyYXRpb25BcgogCiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
bkFyaXRoRmxvb3IoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQXJndW1l
bnQpCiB7Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLSAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSgqdm0pOworICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEpTVmFsdWUgYXJndW1lbnQgPSBKU1ZhbHVlOjpk
ZWNvZGUoZW5jb2RlZEFyZ3VtZW50KTsKICAgICBkb3VibGUgdmFsdWVPZkFyZ3VtZW50ID0gYXJn
dW1lbnQudG9OdW1iZXIoZXhlYyk7CkBAIC02NDYsOSArNjQ2LDkgQEAgRW5jb2RlZEpTVmFsdWUg
SklUX09QRVJBVElPTiBvcGVyYXRpb25BcgogCiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvbkFyaXRoQ2VpbChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRBcmd1bWVudCkKIHsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwot
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7CisgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgSlNWYWx1ZSBhcmd1bWVudCA9IEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkQXJndW1lbnQpOwogICAgIGRvdWJsZSB2YWx1ZU9mQXJndW1l
bnQgPSBhcmd1bWVudC50b051bWJlcihleGVjKTsKQEAgLTY1OCw5ICs2NTgsOSBAQCBFbmNvZGVk
SlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFyCiAKIEVuY29kZWRKU1ZhbHVlIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uQXJpdGhUcnVuYyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRBcmd1bWVudCkKIHsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBW
TSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0s
IGV4ZWMpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7CisgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgSlNWYWx1ZSBhcmd1
bWVudCA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQXJndW1lbnQpOwogICAgIGRvdWJsZSB0cnVu
Y2F0ZWRWYWx1ZU9mQXJndW1lbnQgPSBhcmd1bWVudC50b0ludGVnZXJQcmVzZXJ2ZU5hTihleGVj
KTsKQEAgLTY3MSw3ICs2NzEsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbkFyCiBzdGF0aWMgQUxXQVlTX0lOTElORSBFbmNvZGVkSlNWYWx1ZSBnZXRCeVZhbChFeGVj
U3RhdGUqIGV4ZWMsIEpTQ2VsbCogYmFzZSwgdWludDMyX3QgaW5kZXgpCiB7CiAgICAgVk0mIHZt
ID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhl
Yyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgCiAg
ICAgaWYgKGJhc2UtPmlzT2JqZWN0KCkpIHsKICAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9IGFz
T2JqZWN0KGJhc2UpOwpAQCAtNjg4LDcgKzY4OCw3IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEVu
Y29kZWRKU1ZhbHVlIGdldEIKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
R2V0QnlWYWwoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFByb3BlcnR5KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6
ZGVjb2RlKGVuY29kZWRCYXNlKTsKQEAgLTcyOSw3ICs3MjksNyBAQCBFbmNvZGVkSlNWYWx1ZSBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdlCiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbkdldEJ5VmFsQ2VsbChFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogYmFzZSwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZFByb3BlcnR5KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0g
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEpTVmFsdWUgcHJvcGVydHkgPSBKU1ZhbHVlOjpkZWNv
ZGUoZW5jb2RlZFByb3BlcnR5KTsKQEAgLTc2MiwxMiArNzYyLDEyIEBAIEVuY29kZWRKU1ZhbHVl
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2UKIAogQUxXQVlTX0lOTElORSBFbmNvZGVkSlNWYWx1
ZSBnZXRCeVZhbENlbGxJbnQoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGJhc2UsIGludDMyX3Qg
aW5kZXgpCiB7Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICAK
ICAgICBpZiAoaW5kZXggPCAwKSB7CiAgICAgICAgIC8vIEdvIHRoZSBzbG93ZXN0IHdheSBwb3Nz
aWJsZSBiZWNhdXNlIG5lZ2F0aXZlIGluZGljZXMgZG9uJ3QgdXNlIGluZGV4ZWQgc3RvcmFnZS4K
LSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKGJhc2UpLmdldChleGVjLCBJ
ZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGluZGV4KSkpOworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKEpTVmFsdWUoYmFzZSkuZ2V0KGV4ZWMsIElkZW50aWZpZXI6OmZyb20odm0sIGluZGV4
KSkpOwogICAgIH0KIAogICAgIC8vIFVzZSB0aGlzIHNpbmNlIHdlIGtub3cgdGhhdCB0aGUgdmFs
dWUgaXMgb3V0IG9mIGJvdW5kcy4KQEAgLTc4Nyw3ICs3ODcsNyBAQCBFbmNvZGVkSlNWYWx1ZSBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdlCiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbkdldEJ5VmFsT2JqZWN0U3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBiYXNl
LCBKU0NlbGwqIHN0cmluZykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVU
cmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKIAogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKIApAQCAtODAwLDcgKzgwMCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uR2UKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
R2V0QnlWYWxPYmplY3RTeW1ib2woRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGJhc2UsIEpTQ2Vs
bCogc3ltYm9sKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIodm0sIGV4ZWMpOwogCiAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBhc1N5bWJvbChzeW1i
b2wpLT5wcml2YXRlTmFtZSgpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoZ2V0QnlWYWxP
YmplY3QoZXhlYywgdm0sIGFzT2JqZWN0KGJhc2UpLCBwcm9wZXJ0eU5hbWUpKTsKQEAgLTgwOSw3
ICs4MDksNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdlCiB2b2lk
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFByb3BlcnR5
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgCiAgICAgcHV0QnlWYWxJ
bnRlcm5hbDx0cnVlLCBmYWxzZT4oZXhlYywgdm0sIGVuY29kZWRCYXNlLCBlbmNvZGVkUHJvcGVy
dHksIGVuY29kZWRWYWx1ZSk7CiB9CkBAIC04MTcsNyArODE3LDcgQEAgdm9pZCBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvblB1dEJ5VmFsU3RyaQogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1
dEJ5VmFsTm9uU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJh
c2UsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRQcm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFZhbHVlKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIodm0sIGV4ZWMpOwogICAgIAogICAgIHB1dEJ5VmFsSW50ZXJuYWw8ZmFsc2UsIGZhbHNlPihl
eGVjLCB2bSwgZW5jb2RlZEJhc2UsIGVuY29kZWRQcm9wZXJ0eSwgZW5jb2RlZFZhbHVlKTsKIH0K
QEAgLTgyNSw3ICs4MjUsNyBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxO
b25TCiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxDZWxsU3RyaWN0KEV4ZWNT
dGF0ZSogZXhlYywgSlNDZWxsKiBjZWxsLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvcGVydHks
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgp
OwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICAKICAgICBwdXRCeVZhbElu
dGVybmFsPHRydWUsIGZhbHNlPihleGVjLCB2bSwgSlNWYWx1ZTo6ZW5jb2RlKGNlbGwpLCBlbmNv
ZGVkUHJvcGVydHksIGVuY29kZWRWYWx1ZSk7CiB9CkBAIC04MzMsNyArODMzLDcgQEAgdm9pZCBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQ2VsbAogdm9pZCBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvblB1dEJ5VmFsQ2VsbE5vblN0cmljdChFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogY2Vs
bCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFByb3BlcnR5LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
VmFsdWUpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVU
cmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cih2bSwgZXhlYyk7CiAgICAgCiAgICAgcHV0QnlWYWxJbnRlcm5hbDxmYWxzZSwgZmFsc2U+KGV4
ZWMsIHZtLCBKU1ZhbHVlOjplbmNvZGUoY2VsbCksIGVuY29kZWRQcm9wZXJ0eSwgZW5jb2RlZFZh
bHVlKTsKIH0KQEAgLTg0MSw3ICs4NDEsNyBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
UHV0QnlWYWxDZWxsCiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxDZWxsU3Ry
aW5nU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBjZWxsLCBKU0NlbGwqIHN0cmluZywg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogCiAgICAgcHV0QnlWYWxDZWxsU3Ry
aW5nSW50ZXJuYWw8dHJ1ZSwgZmFsc2U+KGV4ZWMsIHZtLCBjZWxsLCBhc1N0cmluZyhzdHJpbmcp
LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSk7CiB9CkBAIC04NDksNyArODQ5LDcgQEAg
dm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQ2VsbAogdm9pZCBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvblB1dEJ5VmFsQ2VsbFN0cmluZ05vblN0cmljdChFeGVjU3RhdGUqIGV4ZWMs
IEpTQ2VsbCogY2VsbCwgSlNDZWxsKiBzdHJpbmcsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1
ZSkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZt
LCBleGVjKTsKIAogICAgIHB1dEJ5VmFsQ2VsbFN0cmluZ0ludGVybmFsPGZhbHNlLCBmYWxzZT4o
ZXhlYywgdm0sIGNlbGwsIGFzU3RyaW5nKHN0cmluZyksIEpTVmFsdWU6OmRlY29kZShlbmNvZGVk
VmFsdWUpKTsKIH0KQEAgLTg1Nyw3ICs4NTcsNyBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uUHV0QnlWYWxDZWxsCiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxDZWxs
U3ltYm9sU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBjZWxsLCBKU0NlbGwqIHN5bWJv
bCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogCiAgICAgYXV0byBwcm9wZXJ0
eU5hbWUgPSBhc1N5bWJvbChzeW1ib2wpLT5wcml2YXRlTmFtZSgpOwogICAgIHB1dEJ5VmFsQ2Vs
bEludGVybmFsPHRydWUsIGZhbHNlPihleGVjLCB2bSwgY2VsbCwgcHJvcGVydHlOYW1lLCBKU1Zh
bHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSk7CkBAIC04NjYsNyArODY2LDcgQEAgdm9pZCBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQ2VsbAogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvblB1dEJ5VmFsQ2VsbFN5bWJvbE5vblN0cmljdChFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCog
Y2VsbCwgSlNDZWxsKiBzeW1ib2wsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
JnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsK
IAogICAgIGF1dG8gcHJvcGVydHlOYW1lID0gYXNTeW1ib2woc3ltYm9sKS0+cHJpdmF0ZU5hbWUo
KTsKICAgICBwdXRCeVZhbENlbGxJbnRlcm5hbDxmYWxzZSwgZmFsc2U+KGV4ZWMsIHZtLCBjZWxs
LCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpKTsKQEAgLTg3NSw3
ICs4NzUsNyBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxDZWxsCiB2b2lk
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxCZXlvbmRBcnJheUJvdW5kc1N0cmljdChF
eGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvYmplY3QsIGludDMyX3QgaW5kZXgsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICAKICAgICBpZiAoaW5kZXggPj0gMCkgewog
ICAgICAgICBvYmplY3QtPnB1dEJ5SW5kZXhJbmxpbmUoZXhlYywgaW5kZXgsIEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkVmFsdWUpLCB0cnVlKTsKQEAgLTg4NCwxMiArODg0LDEyIEBAIHZvaWQgSklU
X09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbEJleW8KICAgICAKICAgICBQdXRQcm9wZXJ0eVNs
b3Qgc2xvdChvYmplY3QsIHRydWUpOwogICAgIG9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5wdXQo
Ci0gICAgICAgIG9iamVjdCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpbmRleCksIEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCBzbG90KTsKKyAgICAgICAgb2JqZWN0LCBleGVj
LCBJZGVudGlmaWVyOjpmcm9tKHZtLCBpbmRleCksIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFs
dWUpLCBzbG90KTsKIH0KIAogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQmV5
b25kQXJyYXlCb3VuZHNOb25TdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogb2JqZWN0
LCBpbnQzMl90IGluZGV4LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgVk0q
IHZtID0gJmV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICAKICAgICBpZiAoaW5kZXggPj0g
MCkgewpAQCAtODk4LDEzICs4OTgsMTMgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1
dEJ5VmFsQmV5bwogICAgIH0KICAgICAKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChvYmplY3Qs
IGZhbHNlKTsKLSAgICBvYmplY3QtPm1ldGhvZFRhYmxlKCp2bSktPnB1dCgKLSAgICAgICAgb2Jq
ZWN0LCBleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGluZGV4KSwgSlNWYWx1ZTo6ZGVjb2Rl
KGVuY29kZWRWYWx1ZSksIHNsb3QpOworICAgIG9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5wdXQo
CisgICAgICAgIG9iamVjdCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbSh2bSwgaW5kZXgpLCBKU1Zh
bHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwgc2xvdCk7CiB9CiAKIHZvaWQgSklUX09QRVJBVElP
TiBvcGVyYXRpb25QdXREb3VibGVCeVZhbEJleW9uZEFycmF5Qm91bmRzU3RyaWN0KEV4ZWNTdGF0
ZSogZXhlYywgSlNPYmplY3QqIG9iamVjdCwgaW50MzJfdCBpbmRleCwgZG91YmxlIHZhbHVlKQog
ewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAg
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgCiAgICAgSlNW
YWx1ZSBqc1ZhbHVlID0gSlNWYWx1ZShKU1ZhbHVlOjpFbmNvZGVBc0RvdWJsZSwgdmFsdWUpOwpA
QCAtOTE1LDEzICs5MTUsMTMgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dERvdWJs
ZUJ5VgogICAgIH0KICAgICAKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChvYmplY3QsIHRydWUp
OwotICAgIG9iamVjdC0+bWV0aG9kVGFibGUoKnZtKS0+cHV0KAotICAgICAgICBvYmplY3QsIGV4
ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgaW5kZXgpLCBqc1ZhbHVlLCBzbG90KTsKKyAgICBv
YmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+cHV0KAorICAgICAgICBvYmplY3QsIGV4ZWMsIElkZW50
aWZpZXI6OmZyb20odm0sIGluZGV4KSwganNWYWx1ZSwgc2xvdCk7CiB9CiAKIHZvaWQgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25QdXREb3VibGVCeVZhbEJleW9uZEFycmF5Qm91bmRzTm9uU3RyaWN0
KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9iamVjdCwgaW50MzJfdCBpbmRleCwgZG91Ymxl
IHZhbHVlKQogewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAg
CiAgICAgSlNWYWx1ZSBqc1ZhbHVlID0gSlNWYWx1ZShKU1ZhbHVlOjpFbmNvZGVBc0RvdWJsZSwg
dmFsdWUpOwpAQCAtOTMyLDE0ICs5MzIsMTQgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
blB1dERvdWJsZUJ5VgogICAgIH0KICAgICAKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChvYmpl
Y3QsIGZhbHNlKTsKLSAgICBvYmplY3QtPm1ldGhvZFRhYmxlKCp2bSktPnB1dCgKLSAgICAgICAg
b2JqZWN0LCBleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGluZGV4KSwganNWYWx1ZSwgc2xv
dCk7CisgICAgb2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPnB1dCgKKyAgICAgICAgb2JqZWN0LCBl
eGVjLCBJZGVudGlmaWVyOjpmcm9tKHZtLCBpbmRleCksIGpzVmFsdWUsIHNsb3QpOwogfQogCiB2
b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0RG91YmxlQnlWYWxEaXJlY3RCZXlvbmRBcnJh
eUJvdW5kc1N0cmljdChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvYmplY3QsIGludDMyX3Qg
aW5kZXgsIGRvdWJsZSB2YWx1ZSkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKIAogICAgIEpTVmFsdWUganNWYWx1ZSA9IEpTVmFs
dWUoSlNWYWx1ZTo6RW5jb2RlQXNEb3VibGUsIHZhbHVlKTsKIApAQCAtOTQ5LDEzICs5NDksMTMg
QEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dERvdWJsZUJ5VgogICAgIH0KIAogICAg
IFB1dFByb3BlcnR5U2xvdCBzbG90KG9iamVjdCwgdHJ1ZSk7Ci0gICAgQ29tbW9uU2xvd1BhdGhz
OjpwdXREaXJlY3RXaXRoUmVpZnkodm0sIGV4ZWMsIG9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbShl
eGVjLCBpbmRleCksIGpzVmFsdWUsIHNsb3QpOworICAgIENvbW1vblNsb3dQYXRoczo6cHV0RGly
ZWN0V2l0aFJlaWZ5KHZtLCBleGVjLCBvYmplY3QsIElkZW50aWZpZXI6OmZyb20odm0sIGluZGV4
KSwganNWYWx1ZSwgc2xvdCk7CiB9CiAKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRE
b3VibGVCeVZhbERpcmVjdEJleW9uZEFycmF5Qm91bmRzTm9uU3RyaWN0KEV4ZWNTdGF0ZSogZXhl
YywgSlNPYmplY3QqIG9iamVjdCwgaW50MzJfdCBpbmRleCwgZG91YmxlIHZhbHVlKQogewogICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigm
dm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwog
CiAgICAgSlNWYWx1ZSBqc1ZhbHVlID0gSlNWYWx1ZShKU1ZhbHVlOjpFbmNvZGVBc0RvdWJsZSwg
dmFsdWUpOwogCkBAIC05NjUsMTMgKzk2NSwxMyBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uUHV0RG91YmxlQnlWCiAgICAgfQogCiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3Qob2JqZWN0
LCBmYWxzZSk7Ci0gICAgQ29tbW9uU2xvd1BhdGhzOjpwdXREaXJlY3RXaXRoUmVpZnkodm0sIGV4
ZWMsIG9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpbmRleCksIGpzVmFsdWUsIHNsb3Qp
OworICAgIENvbW1vblNsb3dQYXRoczo6cHV0RGlyZWN0V2l0aFJlaWZ5KHZtLCBleGVjLCBvYmpl
Y3QsIElkZW50aWZpZXI6OmZyb20odm0sIGluZGV4KSwganNWYWx1ZSwgc2xvdCk7CiB9CiAKIHZv
aWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbERpcmVjdFN0cmljdChFeGVjU3RhdGUq
IGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
UHJvcGVydHksIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsK
KyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICAKICAgICBw
dXRCeVZhbEludGVybmFsPHRydWUsIHRydWU+KGV4ZWMsIHZtLCBlbmNvZGVkQmFzZSwgZW5jb2Rl
ZFByb3BlcnR5LCBlbmNvZGVkVmFsdWUpOwogfQpAQCAtOTc5LDcgKzk3OSw3IEBAIHZvaWQgSklU
X09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbERpcmUKIHZvaWQgSklUX09QRVJBVElPTiBvcGVy
YXRpb25QdXRCeVZhbERpcmVjdE5vblN0cmljdChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRCYXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvcGVydHksIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICAKICAgICBwdXRCeVZhbEludGVybmFsPGZh
bHNlLCB0cnVlPihleGVjLCB2bSwgZW5jb2RlZEJhc2UsIGVuY29kZWRQcm9wZXJ0eSwgZW5jb2Rl
ZFZhbHVlKTsKIH0KQEAgLTk4Nyw3ICs5ODcsNyBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uUHV0QnlWYWxEaXJlCiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxEaXJl
Y3RDZWxsU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBjZWxsLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkUHJvcGVydHksIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICBW
TSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZt
LCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAg
ICAKICAgICBwdXRCeVZhbEludGVybmFsPHRydWUsIHRydWU+KGV4ZWMsIHZtLCBKU1ZhbHVlOjpl
bmNvZGUoY2VsbCksIGVuY29kZWRQcm9wZXJ0eSwgZW5jb2RlZFZhbHVlKTsKIH0KQEAgLTk5NSw3
ICs5OTUsNyBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxEaXJlCiB2b2lk
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxEaXJlY3RDZWxsTm9uU3RyaWN0KEV4ZWNT
dGF0ZSogZXhlYywgSlNDZWxsKiBjZWxsLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvcGVydHks
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgp
OwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICAKICAgICBwdXRCeVZhbElu
dGVybmFsPGZhbHNlLCB0cnVlPihleGVjLCB2bSwgSlNWYWx1ZTo6ZW5jb2RlKGNlbGwpLCBlbmNv
ZGVkUHJvcGVydHksIGVuY29kZWRWYWx1ZSk7CiB9CkBAIC0xMDAzLDcgKzEwMDMsNyBAQCB2b2lk
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxEaXJlCiB2b2lkIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uUHV0QnlWYWxEaXJlY3RDZWxsU3RyaW5nU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywg
SlNDZWxsKiBjZWxsLCBKU0NlbGwqIHN0cmluZywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVl
KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0s
IGV4ZWMpOwogCiAgICAgcHV0QnlWYWxDZWxsU3RyaW5nSW50ZXJuYWw8dHJ1ZSwgdHJ1ZT4oZXhl
Yywgdm0sIGNlbGwsIGFzU3RyaW5nKHN0cmluZyksIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFs
dWUpKTsKIH0KQEAgLTEwMTEsNyArMTAxMSw3IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRp
b25QdXRCeVZhbERpcmUKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbERpcmVj
dENlbGxTdHJpbmdOb25TdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGNlbGwsIEpTQ2Vs
bCogc3RyaW5nLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7
CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAKICAgICBwdXRC
eVZhbENlbGxTdHJpbmdJbnRlcm5hbDxmYWxzZSwgdHJ1ZT4oZXhlYywgdm0sIGNlbGwsIGFzU3Ry
aW5nKHN0cmluZyksIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpKTsKIH0KQEAgLTEwMTks
NyArMTAxOSw3IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbERpcmUKIHZv
aWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbERpcmVjdENlbGxTeW1ib2xTdHJpY3Qo
RXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGNlbGwsIEpTQ2VsbCogc3ltYm9sLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAKICAgICBhdXRvIHByb3BlcnR5TmFtZSA9IGFzU3lt
Ym9sKHN5bWJvbCktPnByaXZhdGVOYW1lKCk7CiAgICAgcHV0QnlWYWxDZWxsSW50ZXJuYWw8dHJ1
ZSwgdHJ1ZT4oZXhlYywgdm0sIGNlbGwsIHByb3BlcnR5TmFtZSwgSlNWYWx1ZTo6ZGVjb2RlKGVu
Y29kZWRWYWx1ZSkpOwpAQCAtMTAyOCw3ICsxMDI4LDcgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvblB1dEJ5VmFsRGlyZQogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFs
RGlyZWN0Q2VsbFN5bWJvbE5vblN0cmljdChFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogY2VsbCwg
SlNDZWxsKiBzeW1ib2wsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICBWTSYg
dm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBl
eGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKIAogICAg
IGF1dG8gcHJvcGVydHlOYW1lID0gYXNTeW1ib2woc3ltYm9sKS0+cHJpdmF0ZU5hbWUoKTsKICAg
ICBwdXRCeVZhbENlbGxJbnRlcm5hbDxmYWxzZSwgdHJ1ZT4oZXhlYywgdm0sIGNlbGwsIHByb3Bl
cnR5TmFtZSwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSkpOwpAQCAtMTAzNywyMCArMTAz
NywyMCBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxEaXJlCiB2b2lkIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxEaXJlY3RCZXlvbmRBcnJheUJvdW5kc1N0cmlj
dChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvYmplY3QsIGludDMyX3QgaW5kZXgsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICBpZiAoaW5kZXggPj0gMCkgewogICAg
ICAgICBvYmplY3QtPnB1dERpcmVjdEluZGV4KGV4ZWMsIGluZGV4LCBKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZFZhbHVlKSwgMCwgUHV0RGlyZWN0SW5kZXhTaG91bGRUaHJvdyk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAgICAgCiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3Qob2JqZWN0LCB0cnVl
KTsKLSAgICBDb21tb25TbG93UGF0aHM6OnB1dERpcmVjdFdpdGhSZWlmeSh2bSwgZXhlYywgb2Jq
ZWN0LCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGluZGV4KSwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRWYWx1ZSksIHNsb3QpOworICAgIENvbW1vblNsb3dQYXRoczo6cHV0RGlyZWN0V2l0aFJlaWZ5
KHZtLCBleGVjLCBvYmplY3QsIElkZW50aWZpZXI6OmZyb20odm0sIGluZGV4KSwgSlNWYWx1ZTo6
ZGVjb2RlKGVuY29kZWRWYWx1ZSksIHNsb3QpOwogfQogCiB2b2lkIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uUHV0QnlWYWxEaXJlY3RCZXlvbmRBcnJheUJvdW5kc05vblN0cmljdChFeGVjU3RhdGUq
IGV4ZWMsIEpTT2JqZWN0KiBvYmplY3QsIGludDMyX3QgaW5kZXgsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRWYWx1ZSkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxG
cmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIg
dHJhY2VyKHZtLCBleGVjKTsKIAogICAgIGlmIChpbmRleCA+PSAwKSB7CiAgICAgICAgIG9iamVj
dC0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaW5kZXgsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFs
dWUpKTsKQEAgLTEwNTgsMTIgKzEwNTgsMTIgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
blB1dEJ5VmFsRGlyZQogICAgIH0KICAgICAKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChvYmpl
Y3QsIGZhbHNlKTsKLSAgICBDb21tb25TbG93UGF0aHM6OnB1dERpcmVjdFdpdGhSZWlmeSh2bSwg
ZXhlYywgb2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGluZGV4KSwgSlNWYWx1ZTo6ZGVj
b2RlKGVuY29kZWRWYWx1ZSksIHNsb3QpOworICAgIENvbW1vblNsb3dQYXRoczo6cHV0RGlyZWN0
V2l0aFJlaWZ5KHZtLCBleGVjLCBvYmplY3QsIElkZW50aWZpZXI6OmZyb20odm0sIGluZGV4KSwg
SlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSksIHNsb3QpOwogfQogCiBFbmNvZGVkSlNWYWx1
ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFycmF5UHVzaChFeGVjU3RhdGUqIGV4ZWMsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNBcnJheSogYXJyYXkpCiB7Ci0gICAgVk0qIHZtID0g
JmV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICAKICAgICBhcnJheS0+cHVzaElubGluZShl
eGVjLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSk7CkBAIC0xMDcyLDcgKzEwNzIsNyBA
QCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFyCiAKIEVuY29kZWRKU1Zh
bHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXJyYXlQdXNoRG91YmxlKEV4ZWNTdGF0ZSogZXhl
YywgZG91YmxlIHZhbHVlLCBKU0FycmF5KiBhcnJheSkKIHsKLSAgICBWTSogdm0gPSAmZXhlYy0+
dm0oKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIAogICAgIGFycmF5LT5wdXNoSW5saW5lKGV4ZWMsIEpT
VmFsdWUoSlNWYWx1ZTo6RW5jb2RlQXNEb3VibGUsIHZhbHVlKSk7CkBAIC0xMDgyLDcgKzEwODIs
NyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFyCiBFbmNvZGVkSlNW
YWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFycmF5UHVzaE11bHRpcGxlKEV4ZWNTdGF0ZSog
ZXhlYywgSlNBcnJheSogYXJyYXksIHZvaWQqIGJ1ZmZlciwgaW50MzJfdCBlbGVtZW50Q291bnQp
CiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIg
dHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwg
ZXhlYyk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAg
Ly8gV2UgYXNzdW1lIHRoYXQgbXVsdGlwbGUgSlNBcnJheTo6cHVzaCBjYWxscyB3aXRoIEFycmF5
V2l0aEludDMyL0FycmF5V2l0aENvbnRpZ3VvdXMgZG8gbm90IGNhdXNlIEpTIHRyYXBzLgpAQCAt
MTEwNiw3ICsxMTA2LDcgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25B
cgogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25BcnJheVB1c2hEb3VibGVN
dWx0aXBsZShFeGVjU3RhdGUqIGV4ZWMsIEpTQXJyYXkqIGFycmF5LCB2b2lkKiBidWZmZXIsIGlu
dDMyX3QgZWxlbWVudENvdW50KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKIAogICAgIC8vIFdlIGFzc3VtZSB0aGF0IG11bHRpcGxlIEpTQXJyYXk6OnB1
c2ggY2FsbHMgd2l0aCBBcnJheVdpdGhEb3VibGUgZG8gbm90IGNhdXNlIEpTIHRyYXBzLgpAQCAt
MTEyNSw3ICsxMTI1LDcgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25B
cgogCiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFycmF5UG9wKEV4ZWNT
dGF0ZSogZXhlYywgSlNBcnJheSogYXJyYXkpCiB7Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7
CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKHZtLCBleGVjKTsKICAgICAKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFycmF5LT5w
b3AoZXhlYykpOwpAQCAtMTEzMyw3ICsxMTMzLDcgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJB
VElPTiBvcGVyYXRpb25BcgogICAgICAgICAKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uQXJyYXlQb3BBbmRSZWNvdmVyTGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywgSlNBcnJh
eSogYXJyYXkpCiB7Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAg
ICAKICAgICBhcnJheS0+YnV0dGVyZmx5KCktPnNldFB1YmxpY0xlbmd0aChhcnJheS0+YnV0dGVy
Zmx5KCktPnB1YmxpY0xlbmd0aCgpICsgMSk7CkBAIC0xMTQ2LDcgKzExNDYsNyBAQCBFbmNvZGVk
SlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblJlCiAgICAgU3VwZXJTYW1wbGVyU2NvcGUg
c3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwogICAgIAogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVj
dC0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7Cisg
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgCiAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShyZWdFeHBPYmplY3QtPmV4ZWNJbmxpbmUoZXhlYywgZ2xvYmFs
T2JqZWN0LCBhcmd1bWVudCkpOwogfQpAQCAtMTE1Niw3ICsxMTU2LDcgQEAgRW5jb2RlZEpTVmFs
dWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25SZQogICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVy
U2FtcGxlclNjb3BlKGZhbHNlKTsKICAgICAKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZt
KCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICAKICAgICBKU1ZhbHVlIGFyZ3VtZW50ID0gSlNW
YWx1ZTo6ZGVjb2RlKGVuY29kZWRBcmd1bWVudCk7CkBAIC0xMTczLDcgKzExNzMsNyBAQCBFbmNv
ZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblJlCiAgICAgU3VwZXJTYW1wbGVyU2Nv
cGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwogICAgIAogICAgIFZNJiB2bSA9IGdsb2JhbE9i
amVjdC0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7
CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgSlNWYWx1ZSBiYXNlID0gSlNW
YWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNlKTsKQEAgLTExOTUsNyArMTE5NSw3IEBAIEVuY29kZWRK
U1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUmUKICAgICBTdXBlclNhbXBsZXJTY29wZSBz
dXBlclNhbXBsZXJTY29wZShmYWxzZSk7CiAKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZt
KCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogCiAgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCkBAIC0xMjIwLDcgKzEyMjAsNyBAQCBFbmNvZGVk
SlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblJlCiAgICAgU3VwZXJTYW1wbGVyU2NvcGUg
c3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwogCiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52
bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKIAogICAgIGlmICghcmVnRXhw
T2JqZWN0LT5yZWdFeHAoKS0+Z2xvYmFsKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUocmVnRXhwT2JqZWN0LT5leGVjSW5saW5lKGV4ZWMsIGdsb2JhbE9iamVjdCwgYXJndW1lbnQp
KTsKQEAgLTEyMzIsNyArMTIzMiw3IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uUmUKICAgICBTdXBlclNhbXBsZXJTY29wZSBzdXBlclNhbXBsZXJTY29wZShmYWxzZSk7
CiAKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIodm0sIGV4ZWMpOwogCiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwogCkBAIC0xMjYwLDcgKzEyNjAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvblJlCiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblBhcnNlSW50
Tm9SYWRpeEdlbmVyaWMoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSB2YWx1ZSkKIHsK
ICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVj
KTsKIAogICAgIHJldHVybiB0b1N0cmluZ1ZpZXcoZXhlYywgSlNWYWx1ZTo6ZGVjb2RlKHZhbHVl
KSwgWyZdIChTdHJpbmdWaWV3IHZpZXcpIHsKICAgICAgICAgLy8gVGhpcyB2ZXJzaW9uIGlzIGFz
IGlmIHJhZGl4IHdhcyB1bmRlZmluZWQuIEhlbmNlLCB1bmRlZmluZWQudG9OdW1iZXIoKSA9PT0g
MC4KQEAgLTEyNzEsNyArMTI3MSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uUGEKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUGFyc2VJbnRT
dHJpbmdOb1JhZGl4KEV4ZWNTdGF0ZSogZXhlYywgSlNTdHJpbmcqIHN0cmluZykKIHsKICAgICBW
TSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZt
LCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBhdXRvIHZpZXdX
aXRoU3RyaW5nID0gc3RyaW5nLT52aWV3V2l0aFVuZGVybHlpbmdTdHJpbmcoZXhlYyk7CkBAIC0x
Mjg0LDcgKzEyODQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblBh
CiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblBhcnNlSW50U3RyaW5nKEV4
ZWNTdGF0ZSogZXhlYywgSlNTdHJpbmcqIHN0cmluZywgaW50MzJfdCByYWRpeCkKIHsKICAgICBW
TSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZt
LCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBhdXRvIHZpZXdX
aXRoU3RyaW5nID0gc3RyaW5nLT52aWV3V2l0aFVuZGVybHlpbmdTdHJpbmcoZXhlYyk7CkBAIC0x
Mjk2LDcgKzEyOTYsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblBh
CiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblBhcnNlSW50R2VuZXJpYyhF
eGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIHZhbHVlLCBpbnQzMl90IHJhZGl4KQogewog
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMp
OwogCiAgICAgcmV0dXJuIHRvU3RyaW5nVmlldyhleGVjLCBKU1ZhbHVlOjpkZWNvZGUodmFsdWUp
LCBbJl0gKFN0cmluZ1ZpZXcgdmlldykgewogICAgICAgICByZXR1cm4gcGFyc2VJbnRSZXN1bHQo
cGFyc2VJbnQodmlldywgcmFkaXgpKTsKQEAgLTEzMDgsNyArMTMwOCw3IEBAIHNpemVfdCBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvblJlZ0V4cFRlc3QKICAgICBTdXBlclNhbXBsZXJTY29wZSBzdXBl
clNhbXBsZXJTY29wZShmYWxzZSk7CiAgICAgCiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52
bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKIAogICAgIHJldHVybiByZWdF
eHBPYmplY3QtPnRlc3RJbmxpbmUoZXhlYywgZ2xvYmFsT2JqZWN0LCBpbnB1dCk7CiB9CkBAIC0x
MzE4LDcgKzEzMTgsNyBAQCBzaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25SZWdFeHBUZXN0
CiAgICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwogICAgIAog
ICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFj
ZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2
bSwgZXhlYyk7CiAKICAgICBKU1ZhbHVlIGFyZ3VtZW50ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRBcmd1bWVudCk7CiAKQEAgLTEzMzMsNyArMTMzMyw3IEBAIHNpemVfdCBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvblJlZ0V4cFRlc3QKICAgICBTdXBlclNhbXBsZXJTY29wZSBzdXBlclNhbXBsZXJT
Y29wZShmYWxzZSk7CiAgICAgCiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwotICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CiAKICAgICBKU1ZhbHVlIGJhc2UgPSBKU1ZhbHVlOjpkZWNvZGUoZW5j
b2RlZEJhc2UpOwpAQCAtMTM1NCw3ICsxMzU0LDcgQEAgc2l6ZV90IEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uUmVnRXhwVGVzdAogCiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uU3ViQmln
SW50KEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBvcDEsIEpTQ2VsbCogb3AyKQogewotICAgIFZN
KiB2bSA9ICZleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZl
Q2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgCiAgICAgSlNCaWdJbnQqIGxl
ZnRPcGVyYW5kID0ganNDYXN0PEpTQmlnSW50Kj4ob3AxKTsKQEAgLTEzNjUsNyArMTM2NSw3IEBA
IEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25TdWJCaWdJbnQKIAogSlNDZWxsKiBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbkJpdE5vdEJpZ0ludChFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCog
b3AxKQogewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAKICAgICBK
U0JpZ0ludCogb3BlcmFuZCA9IGpzQ2FzdDxKU0JpZ0ludCo+KG9wMSk7CkBAIC0xMzc1LDcgKzEz
NzUsNyBAQCBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQml0Tm90QmlnCiAKIEpTQ2Vs
bCogSklUX09QRVJBVElPTiBvcGVyYXRpb25NdWxCaWdJbnQoRXhlY1N0YXRlKiBleGVjLCBKU0Nl
bGwqIG9wMSwgSlNDZWxsKiBvcDIpCiB7Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZt
LCBleGVjKTsKIAogICAgIEpTQmlnSW50KiBsZWZ0T3BlcmFuZCA9IGpzQ2FzdDxKU0JpZ0ludCo+
KG9wMSk7CkBAIC0xMzg2LDcgKzEzODYsNyBAQCBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uTXVsQmlnSW50CiAgICAgCiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTW9kQmln
SW50KEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBvcDEsIEpTQ2VsbCogb3AyKQogewotICAgIFZN
KiB2bSA9ICZleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZl
Q2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgCiAgICAgSlNCaWdJbnQqIGxl
ZnRPcGVyYW5kID0ganNDYXN0PEpTQmlnSW50Kj4ob3AxKTsKQEAgLTEzOTcsNyArMTM5Nyw3IEBA
IEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25Nb2RCaWdJbnQKIAogSlNDZWxsKiBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbkRpdkJpZ0ludChFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogb3Ax
LCBKU0NlbGwqIG9wMikKIHsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0g
PSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMp
OwogICAgIAogICAgIEpTQmlnSW50KiBsZWZ0T3BlcmFuZCA9IGpzQ2FzdDxKU0JpZ0ludCo+KG9w
MSk7CkBAIC0xNDA4LDcgKzE0MDgsNyBAQCBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
RGl2QmlnSW50CiAKIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25Qb3dCaWdJbnQoRXhl
Y1N0YXRlKiBleGVjLCBKU0NlbGwqIG9wMSwgSlNDZWxsKiBvcDIpCiB7Ci0gICAgVk0qIHZtID0g
JmV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICAKICAgICBKU0JpZ0ludCogbGVmdE9wZXJh
bmQgPSBqc0Nhc3Q8SlNCaWdJbnQqPihvcDEpOwpAQCAtMTQxOSw3ICsxNDE5LDcgQEAgSlNDZWxs
KiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblBvd0JpZ0ludAogCiBKU0NlbGwqIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uQml0QW5kQmlnSW50KEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBvcDEsIEpT
Q2VsbCogb3AyKQogewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAK
ICAgICBKU0JpZ0ludCogbGVmdE9wZXJhbmQgPSBqc0Nhc3Q8SlNCaWdJbnQqPihvcDEpOwpAQCAt
MTQzMCw3ICsxNDMwLDcgQEAgSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkJpdEFuZEJp
ZwogCiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQml0TFNoaWZ0QmlnSW50KEV4ZWNT
dGF0ZSogZXhlYywgSlNDZWxsKiBvcDEsIEpTQ2VsbCogb3AyKQogewotICAgIFZNKiB2bSA9ICZl
eGVjLT52bSgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAKICAgICBKU0JpZ0ludCogbGVmdE9wZXJhbmQgPSBq
c0Nhc3Q8SlNCaWdJbnQqPihvcDEpOwpAQCAtMTQ0MSw3ICsxNDQxLDcgQEAgSlNDZWxsKiBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbkJpdExTaGlmdAogCiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uQWRkQmlnSW50KEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBvcDEsIEpTQ2VsbCogb3Ay
KQogewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgCiAgICAg
SlNCaWdJbnQqIGxlZnRPcGVyYW5kID0ganNDYXN0PEpTQmlnSW50Kj4ob3AxKTsKQEAgLTE0NTIs
NyArMTQ1Miw3IEBAIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25BZGRCaWdJbnQKIAog
SlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkJpdE9yQmlnSW50KEV4ZWNTdGF0ZSogZXhl
YywgSlNDZWxsKiBvcDEsIEpTQ2VsbCogb3AyKQogewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgp
OworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcih2bSwgZXhlYyk7CiAgICAgCiAgICAgSlNCaWdJbnQqIGxlZnRPcGVyYW5kID0ganNDYXN0
PEpTQmlnSW50Kj4ob3AxKTsKQEAgLTE0NjMsNyArMTQ2Myw3IEBAIEpTQ2VsbCogSklUX09QRVJB
VElPTiBvcGVyYXRpb25CaXRPckJpZ0kKIAogSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
bkJpdFhvckJpZ0ludChFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogb3AxLCBKU0NlbGwqIG9wMikK
IHsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwog
ICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogCiAgICAgSlNCaWdJ
bnQqIGxlZnRPcGVyYW5kID0ganNDYXN0PEpTQmlnSW50Kj4ob3AxKTsKQEAgLTE0NzQsNyArMTQ3
NCw3IEBAIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25CaXRYb3JCaWcKIAogc2l6ZV90
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxQ2VsbChFeGVjU3RhdGUqIGV4
ZWMsIEpTQ2VsbCogb3AxLCBKU0NlbGwqIG9wMikKIHsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0o
KTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIodm0sIGV4ZWMpOwogICAgIAogICAgIHJldHVybiBKU1ZhbHVlOjpzdHJpY3RFcXVhbFNs
b3dDYXNlSW5saW5lKGV4ZWMsIG9wMSwgb3AyKTsKQEAgLTE0ODMsMTQgKzE0ODMsMTQgQEAgc2l6
ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZVN0cgogc2l6ZV90IEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uU2FtZVZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgYXJn
MSwgRW5jb2RlZEpTVmFsdWUgYXJnMikKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKIAogICAgIHJldHVybiBzYW1lVmFsdWUoZXhl
YywgSlNWYWx1ZTo6ZGVjb2RlKGFyZzEpLCBKU1ZhbHVlOjpkZWNvZGUoYXJnMikpOwogfQogCiBF
bmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRvUHJpbWl0aXZlKEV4ZWNTdGF0
ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZt
KCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIg
dHJhY2VyKHZtLCBleGVjKTsKICAgICAKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFs
dWU6OmRlY29kZSh2YWx1ZSkudG9QcmltaXRpdmUoZXhlYykpOwpAQCAtMTQ5OCw3ICsxNDk4LDcg
QEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25UbwogCiBFbmNvZGVkSlNW
YWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRvTnVtYmVyKEV4ZWNTdGF0ZSogZXhlYywgRW5j
b2RlZEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBl
eGVjKTsKIAogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoSlNWYWx1ZTo6ZGVj
b2RlKHZhbHVlKS50b051bWJlcihleGVjKSkpOwpAQCAtMTUwNyw3ICsxNTA3LDcgQEAgRW5jb2Rl
ZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25UbwogRW5jb2RlZEpTVmFsdWUgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25HZXRCeVZhbFdpdGhUaGlzKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZEJhc2UsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRUaGlzLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkU3Vic2NyaXB0KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0g
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6ZGVj
b2RlKGVuY29kZWRCYXNlKTsKQEAgLTE1NDYsMjMgKzE1NDYsMjMgQEAgRW5jb2RlZEpTVmFsdWUg
SklUX09QRVJBVElPTiBvcGVyYXRpb25HZQogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1
dEJ5SWRXaXRoVGhpc1N0cmljdChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRCYXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVGhpcywgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFZhbHVlLCBVbmlxdWVkU3RyaW5nSW1wbCogaW1wbCkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52
bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKIAotICAgIHB1dFdpdGhUaGlz
PHRydWU+KGV4ZWMsIGVuY29kZWRCYXNlLCBlbmNvZGVkVGhpcywgZW5jb2RlZFZhbHVlLCBJZGVu
dGlmaWVyOjpmcm9tVWlkKGV4ZWMsIGltcGwpKTsKKyAgICBwdXRXaXRoVGhpczx0cnVlPihleGVj
LCBlbmNvZGVkQmFzZSwgZW5jb2RlZFRoaXMsIGVuY29kZWRWYWx1ZSwgSWRlbnRpZmllcjo6ZnJv
bVVpZCh2bSwgaW1wbCkpOwogfQogCiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJ
ZFdpdGhUaGlzKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRUaGlzLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIFVu
aXF1ZWRTdHJpbmdJbXBsKiBpbXBsKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxG
cmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogCi0gICAgcHV0V2l0aFRoaXM8ZmFsc2U+KGV4
ZWMsIGVuY29kZWRCYXNlLCBlbmNvZGVkVGhpcywgZW5jb2RlZFZhbHVlLCBJZGVudGlmaWVyOjpm
cm9tVWlkKGV4ZWMsIGltcGwpKTsKKyAgICBwdXRXaXRoVGhpczxmYWxzZT4oZXhlYywgZW5jb2Rl
ZEJhc2UsIGVuY29kZWRUaGlzLCBlbmNvZGVkVmFsdWUsIElkZW50aWZpZXI6OmZyb21VaWQodm0s
IGltcGwpKTsKIH0KIAogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsV2l0aFRo
aXNTdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFRoaXMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3JpcHQs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgp
OwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBJZGVudGlmaWVyIHByb3BlcnR5ID0gSlNWYWx1
ZTo6ZGVjb2RlKGVuY29kZWRTdWJzY3JpcHQpLnRvUHJvcGVydHlLZXkoZXhlYyk7CkBAIC0xNTc0
LDcgKzE1NzQsNyBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxXaXRoCiB2
b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxXaXRoVGhpcyhFeGVjU3RhdGUqIGV4
ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVGhp
cywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFN1YnNjcmlwdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFZhbHVlKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIodm0sIGV4ZWMpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
IAogICAgIElkZW50aWZpZXIgcHJvcGVydHkgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFN1YnNj
cmlwdCkudG9Qcm9wZXJ0eUtleShleGVjKTsKQEAgLTE1OTYsNyArMTU5Niw3IEBAIEFMV0FZU19J
TkxJTkUgc3RhdGljIHZvaWQgZGVmaW5lRGF0YVByb3AKIHZvaWQgSklUX09QRVJBVElPTiBvcGVy
YXRpb25EZWZpbmVEYXRhUHJvcGVydHkoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYmFzZSwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFByb3BlcnR5LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFs
dWUsIGludDMyX3QgYXR0cmlidXRlcykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CiAKICAgICBJZGVudGlmaWVyIHByb3BlcnR5TmFtZSA9IEpTVmFsdWU6
OmRlY29kZShlbmNvZGVkUHJvcGVydHkpLnRvUHJvcGVydHlLZXkoZXhlYyk7CkBAIC0xNjA4LDcg
KzE2MDgsNyBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRGVmaW5lRGF0YVByCiB2b2lk
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRGVmaW5lRGF0YVByb3BlcnR5U3RyaW5nKEV4ZWNTdGF0
ZSogZXhlYywgSlNPYmplY3QqIGJhc2UsIEpTU3RyaW5nKiBwcm9wZXJ0eSwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFZhbHVlLCBpbnQzMl90IGF0dHJpYnV0ZXMpCiB7CiAgICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7Cisg
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgSWRlbnRpZmllciBwcm9wZXJ0eU5h
bWUgPSBwcm9wZXJ0eS0+dG9JZGVudGlmaWVyKGV4ZWMpOwpAQCAtMTYyMCwxNCArMTYyMCwxNCBA
QCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRGVmaW5lRGF0YVByCiB2b2lkIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uRGVmaW5lRGF0YVByb3BlcnR5U3RyaW5nSWRlbnQoRXhlY1N0YXRlKiBl
eGVjLCBKU09iamVjdCogYmFzZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHByb3BlcnR5LCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkVmFsdWUsIGludDMyX3QgYXR0cmlidXRlcykKIHsKICAgICBWTSYgdm0g
PSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVj
KTsKLSAgICBkZWZpbmVEYXRhUHJvcGVydHkoZXhlYywgdm0sIGJhc2UsIElkZW50aWZpZXI6OmZy
b21VaWQoJnZtLCBwcm9wZXJ0eSksIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCBhdHRy
aWJ1dGVzKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAg
ICBkZWZpbmVEYXRhUHJvcGVydHkoZXhlYywgdm0sIGJhc2UsIElkZW50aWZpZXI6OmZyb21VaWQo
dm0sIHByb3BlcnR5KSwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSksIGF0dHJpYnV0ZXMp
OwogfQogCiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRGVmaW5lRGF0YVByb3BlcnR5U3lt
Ym9sKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGJhc2UsIFN5bWJvbCogcHJvcGVydHksIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgaW50MzJfdCBhdHRyaWJ1dGVzKQogewogICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0s
IGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAg
IGRlZmluZURhdGFQcm9wZXJ0eShleGVjLCB2bSwgYmFzZSwgSWRlbnRpZmllcjo6ZnJvbVVpZChw
cm9wZXJ0eS0+cHJpdmF0ZU5hbWUoKSksIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCBh
dHRyaWJ1dGVzKTsKIH0KIApAQCAtMTY0NCw3ICsxNjQ0LDcgQEAgQUxXQVlTX0lOTElORSBzdGF0
aWMgdm9pZCBkZWZpbmVBY2Nlc3Nvcgogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkRlZmlu
ZUFjY2Vzc29yUHJvcGVydHkoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYmFzZSwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZFByb3BlcnR5LCBKU09iamVjdCogZ2V0dGVyLCBKU09iamVjdCogc2V0
dGVyLCBpbnQzMl90IGF0dHJpYnV0ZXMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwogCiAgICAgSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUgPSBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZFByb3BlcnR5KS50b1Byb3BlcnR5S2V5KGV4ZWMpOwpAQCAtMTY1NSw3
ICsxNjU1LDcgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkRlZmluZUFjY2Vzcwogdm9p
ZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkRlZmluZUFjY2Vzc29yUHJvcGVydHlTdHJpbmcoRXhl
Y1N0YXRlKiBleGVjLCBKU09iamVjdCogYmFzZSwgSlNTdHJpbmcqIHByb3BlcnR5LCBKU09iamVj
dCogZ2V0dGVyLCBKU09iamVjdCogc2V0dGVyLCBpbnQzMl90IGF0dHJpYnV0ZXMpCiB7CiAgICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2
bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgSWRlbnRpZmll
ciBwcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eS0+dG9JZGVudGlmaWVyKGV4ZWMpOwpAQCAtMTY2Niwy
MCArMTY2NiwyMCBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRGVmaW5lQWNjZXNzCiB2
b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRGVmaW5lQWNjZXNzb3JQcm9wZXJ0eVN0cmluZ0lk
ZW50KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGJhc2UsIFVuaXF1ZWRTdHJpbmdJbXBsKiBw
cm9wZXJ0eSwgSlNPYmplY3QqIGdldHRlciwgSlNPYmplY3QqIHNldHRlciwgaW50MzJfdCBhdHRy
aWJ1dGVzKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwotICAgIGRlZmluZUFjY2Vzc29yUHJvcGVydHkoZXhl
Yywgdm0sIGJhc2UsIElkZW50aWZpZXI6OmZyb21VaWQoJnZtLCBwcm9wZXJ0eSksIGdldHRlciwg
c2V0dGVyLCBhdHRyaWJ1dGVzKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZt
LCBleGVjKTsKKyAgICBkZWZpbmVBY2Nlc3NvclByb3BlcnR5KGV4ZWMsIHZtLCBiYXNlLCBJZGVu
dGlmaWVyOjpmcm9tVWlkKHZtLCBwcm9wZXJ0eSksIGdldHRlciwgc2V0dGVyLCBhdHRyaWJ1dGVz
KTsKIH0KIAogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkRlZmluZUFjY2Vzc29yUHJvcGVy
dHlTeW1ib2woRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYmFzZSwgU3ltYm9sKiBwcm9wZXJ0
eSwgSlNPYmplY3QqIGdldHRlciwgSlNPYmplY3QqIHNldHRlciwgaW50MzJfdCBhdHRyaWJ1dGVz
KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0s
IGV4ZWMpOwogICAgIGRlZmluZUFjY2Vzc29yUHJvcGVydHkoZXhlYywgdm0sIGJhc2UsIElkZW50
aWZpZXI6OmZyb21VaWQocHJvcGVydHktPnByaXZhdGVOYW1lKCkpLCBnZXR0ZXIsIHNldHRlciwg
YXR0cmlidXRlcyk7CiB9CiAKIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3QXJyYXko
RXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIGFycmF5U3RydWN0dXJlLCB2b2lkKiBidWZmZXIs
IHNpemVfdCBzaXplKQogewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7
CiAgICAgCiAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxjaGFyKj4oY29uc3RydWN0QXJyYXkoZXhl
YywgYXJyYXlTdHJ1Y3R1cmUsIHN0YXRpY19jYXN0PEpTVmFsdWUqPihidWZmZXIpLCBzaXplKSk7
CkBAIC0xNjg3LDE2ICsxNjg3LDE2IEBAIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3
QXJyYXkoRXgKIAogY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdFbXB0eUFycmF5KEV4
ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBhcnJheVN0cnVjdHVyZSkKIHsKLSAgICBWTSogdm0g
PSAmZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxG
cmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIAotICAgIHJldHVybiBiaXR3aXNlX2Nh
c3Q8Y2hhcio+KEpTQXJyYXk6OmNyZWF0ZSgqdm0sIGFycmF5U3RydWN0dXJlKSk7CisgICAgcmV0
dXJuIGJpdHdpc2VfY2FzdDxjaGFyKj4oSlNBcnJheTo6Y3JlYXRlKHZtLCBhcnJheVN0cnVjdHVy
ZSkpOwogfQogCiBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemUo
RXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIGFycmF5U3RydWN0dXJlLCBpbnQzMl90IHNpemUs
IEJ1dHRlcmZseSogYnV0dGVyZmx5KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxG
cmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKIAogICAgIGlmIChVTkxJS0VMWShzaXplIDwgMCkpCkBAIC0xNzEzLDcg
KzE3MTMsNyBAQCBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0FycmF5V2l0CiBjaGFy
KiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVBbmRIaW50KEV4ZWNTdGF0
ZSogZXhlYywgU3RydWN0dXJlKiBhcnJheVN0cnVjdHVyZSwgaW50MzJfdCBzaXplLCBpbnQzMl90
IHZlY3Rvckxlbmd0aEhpbnQsIEJ1dHRlcmZseSogYnV0dGVyZmx5KQogewogICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMp
OworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIGlmIChVTkxJS0VMWShzaXpl
IDwgMCkpCkBAIC0xNzMyLDcgKzE3MzIsNyBAQCBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
bk5ld0FycmF5V2l0CiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3QXJyYXlCdWZm
ZXIoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIGFycmF5U3RydWN0dXJlLCBKU0NlbGwqIGlt
bXV0YWJsZUJ1dHRlcmZseUNlbGwpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgQVNTRVJUKCFhcnJheVN0cnVjdHVyZS0+
b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CiAgICAgYXV0byogaW1tdXRhYmxlQnV0dGVyZmx5ID0ganND
YXN0PEpTSW1tdXRhYmxlQnV0dGVyZmx5Kj4oaW1tdXRhYmxlQnV0dGVyZmx5Q2VsbCk7CiAgICAg
QVNTRVJUKGFycmF5U3RydWN0dXJlLT5pbmRleGluZ01vZGUoKSA9PSBpbW11dGFibGVCdXR0ZXJm
bHktPmluZGV4aW5nTW9kZSgpIHx8IGhhc0FueUFycmF5U3RvcmFnZShhcnJheVN0cnVjdHVyZS0+
aW5kZXhpbmdNb2RlKCkpKTsKQEAgLTE3NTIsNyArMTc1Miw3IEBAIGNoYXIqIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uTmV3SW50OEFycmEKICAgICBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSog
c3RydWN0dXJlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7
CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgcmV0dXJu
IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGNvbnN0cnVjdEdlbmVyaWNUeXBlZEFycmF5Vmlld1dp
dGhBcmd1bWVudHM8SlNJbnQ4QXJyYXk+KGV4ZWMsIHN0cnVjdHVyZSwgZW5jb2RlZFZhbHVlLCAw
LCBXVEY6Om51bGxvcHQpKTsKIH0KIApAQCAtMTc2Niw3ICsxNzY2LDcgQEAgY2hhciogSklUX09Q
RVJBVElPTiBvcGVyYXRpb25OZXdJbnQxNkFycgogICAgIEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICBWTSYg
dm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBl
eGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICBy
ZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oY29uc3RydWN0R2VuZXJpY1R5cGVkQXJyYXlW
aWV3V2l0aEFyZ3VtZW50czxKU0ludDE2QXJyYXk+KGV4ZWMsIHN0cnVjdHVyZSwgZW5jb2RlZFZh
bHVlLCAwLCBXVEY6Om51bGxvcHQpKTsKIH0KIApAQCAtMTc4MCw3ICsxNzgwLDcgQEAgY2hhciog
SklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdJbnQzMkFycgogICAgIEV4ZWNTdGF0ZSogZXhlYywg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
JnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsK
ICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oY29uc3RydWN0R2VuZXJpY1R5cGVk
QXJyYXlWaWV3V2l0aEFyZ3VtZW50czxKU0ludDMyQXJyYXk+KGV4ZWMsIHN0cnVjdHVyZSwgZW5j
b2RlZFZhbHVlLCAwLCBXVEY6Om51bGxvcHQpKTsKIH0KIApAQCAtMTc5NCw3ICsxNzk0LDcgQEAg
Y2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdVaW50OEFycgogICAgIEV4ZWNTdGF0ZSog
ZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkK
IHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBl
eGVjKTsKICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oY29uc3RydWN0R2VuZXJp
Y1R5cGVkQXJyYXlWaWV3V2l0aEFyZ3VtZW50czxKU1VpbnQ4QXJyYXk+KGV4ZWMsIHN0cnVjdHVy
ZSwgZW5jb2RlZFZhbHVlLCAwLCBXVEY6Om51bGxvcHQpKTsKIH0KIApAQCAtMTgwOCw3ICsxODA4
LDcgQEAgY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdVaW50OENsYQogICAgIEV4ZWNT
dGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRW
YWx1ZSkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRy
YWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KHZtLCBleGVjKTsKICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oY29uc3RydWN0
R2VuZXJpY1R5cGVkQXJyYXlWaWV3V2l0aEFyZ3VtZW50czxKU1VpbnQ4Q2xhbXBlZEFycmF5Pihl
eGVjLCBzdHJ1Y3R1cmUsIGVuY29kZWRWYWx1ZSwgMCwgV1RGOjpudWxsb3B0KSk7CiB9CiAKQEAg
LTE4MjIsNyArMTgyMiw3IEBAIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3VWludDE2
QXIKICAgICBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hh
cio+KGNvbnN0cnVjdEdlbmVyaWNUeXBlZEFycmF5Vmlld1dpdGhBcmd1bWVudHM8SlNVaW50MTZB
cnJheT4oZXhlYywgc3RydWN0dXJlLCBlbmNvZGVkVmFsdWUsIDAsIFdURjo6bnVsbG9wdCkpOwog
fQogCkBAIC0xODM2LDcgKzE4MzYsNyBAQCBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5l
d1VpbnQzMkFyCiAgICAgRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0g
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIHJldHVybiByZWludGVycHJldF9j
YXN0PGNoYXIqPihjb25zdHJ1Y3RHZW5lcmljVHlwZWRBcnJheVZpZXdXaXRoQXJndW1lbnRzPEpT
VWludDMyQXJyYXk+KGV4ZWMsIHN0cnVjdHVyZSwgZW5jb2RlZFZhbHVlLCAwLCBXVEY6Om51bGxv
cHQpKTsKIH0KIApAQCAtMTg1MCw3ICsxODUwLDcgQEAgY2hhciogSklUX09QRVJBVElPTiBvcGVy
YXRpb25OZXdGbG9hdDMyQQogICAgIEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52
bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDxjaGFyKj4oY29uc3RydWN0R2VuZXJpY1R5cGVkQXJyYXlWaWV3V2l0aEFyZ3Vt
ZW50czxKU0Zsb2F0MzJBcnJheT4oZXhlYywgc3RydWN0dXJlLCBlbmNvZGVkVmFsdWUsIDAsIFdU
Rjo6bnVsbG9wdCkpOwogfQogCkBAIC0xODY0LDIzICsxODY0LDIzIEBAIGNoYXIqIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uTmV3RmxvYXQ2NEEKICAgICBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVy
ZSogc3RydWN0dXJlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgVk0mIHZt
ID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhl
Yyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgcmV0
dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGNvbnN0cnVjdEdlbmVyaWNUeXBlZEFycmF5Vmll
d1dpdGhBcmd1bWVudHM8SlNGbG9hdDY0QXJyYXk+KGV4ZWMsIHN0cnVjdHVyZSwgZW5jb2RlZFZh
bHVlLCAwLCBXVEY6Om51bGxvcHQpKTsKIH0KIAogSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbkNyZWF0ZUFjdGl2YXRpb25EaXJlY3QoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgSlNTY29wZSogc2NvcGUsIFN5bWJvbFRhYmxlKiB0YWJsZSwgRW5jb2RlZEpTVmFs
dWUgaW5pdGlhbFZhbHVlRW5jb2RlZCkKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIEpTVmFsdWUgaW5p
dGlhbFZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGluaXRpYWxWYWx1ZUVuY29kZWQpOwogICAgIEFT
U0VSVChpbml0aWFsVmFsdWUgPT0ganNVbmRlZmluZWQoKSB8fCBpbml0aWFsVmFsdWUgPT0ganNU
RFpWYWx1ZSgpKTsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKICAgICByZXR1cm4gSlNMZXhpY2FsRW52aXJvbm1l
bnQ6OmNyZWF0ZSh2bSwgc3RydWN0dXJlLCBzY29wZSwgdGFibGUsIGluaXRpYWxWYWx1ZSk7CiB9
CiAKIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25DcmVhdGVEaXJlY3RBcmd1bWVudHMo
RXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgdWludDMyX3QgbGVuZ3RoLCB1
aW50MzJfdCBtaW5DYXBhY2l0eSkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0YXJnZXQoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICBEaXJlY3RBcmd1bWVudHMqIHJlc3VsdCA9
IERpcmVjdEFyZ3VtZW50czo6Y3JlYXRlKAogICAgICAgICB2bSwgc3RydWN0dXJlLCBsZW5ndGgs
IHN0ZDo6bWF4KGxlbmd0aCwgbWluQ2FwYWNpdHkpKTsKICAgICAvLyBUaGUgY2FsbGVyIHdpbGwg
c3RvcmUgdG8gdGhpcyBvYmplY3Qgd2l0aG91dCBiYXJyaWVycy4gTW9zdCBsaWtlbHksIGF0IHRo
aXMgcG9pbnQsIHRoaXMgaXMKQEAgLTE4OTMsNyArMTg5Myw3IEBAIEpTQ2VsbCogSklUX09QRVJB
VElPTiBvcGVyYXRpb25DcmVhdGVEaXIKIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25D
cmVhdGVTY29wZWRBcmd1bWVudHMoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgUmVnaXN0ZXIqIGFyZ3VtZW50U3RhcnQsIHVpbnQzMl90IGxlbmd0aCwgSlNGdW5jdGlvbiog
Y2FsbGVlLCBKU0xleGljYWxFbnZpcm9ubWVudCogc2NvcGUpCiB7CiAgICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdGFyZ2V0KCZ2bSwgZXhlYyk7Cisg
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgCiAgICAgLy8g
V2UgY291bGQgcGFzcyB0aGUgU2NvcGVkQXJndW1lbnRzVGFibGUqIGFzIGFuIGFyZ3VtZW50LiBX
ZSBjdXJyZW50bHkgZG9uJ3QgYmVjYXVzZSBJCiAgICAgLy8gZGlkbid0IGZlZWwgbGlrZSBjaGFu
Z2luZyB0aGUgbWF4IG51bWJlciBvZiBhcmd1bWVudHMgZm9yIGEgc2xvdyBwYXRoIGNhbGwgZnJv
bSA2IHRvIDcuCkBAIC0xOTA2LDcgKzE5MDYsNyBAQCBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uQ3JlYXRlU2NvCiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRlQ2xv
bmVkQXJndW1lbnRzKEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFJlZ2lz
dGVyKiBhcmd1bWVudFN0YXJ0LCB1aW50MzJfdCBsZW5ndGgsIEpTRnVuY3Rpb24qIGNhbGxlZSkK
IHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
YXJnZXQoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBl
eGVjKTsKICAgICByZXR1cm4gQ2xvbmVkQXJndW1lbnRzOjpjcmVhdGVCeUNvcHlpbmdGcm9tKAog
ICAgICAgICBleGVjLCBzdHJ1Y3R1cmUsIGFyZ3VtZW50U3RhcnQsIGxlbmd0aCwgY2FsbGVlKTsK
IH0KQEAgLTE5MTQsNyArMTkxNCw3IEBAIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25D
cmVhdGVDbG8KIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25DcmVhdGVEaXJlY3RBcmd1
bWVudHNEdXJpbmdFeGl0KEV4ZWNTdGF0ZSogZXhlYywgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVD
YWxsRnJhbWUsIEpTRnVuY3Rpb24qIGNhbGxlZSwgdWludDMyX3QgYXJndW1lbnRDb3VudCkKIHsK
ICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0YXJn
ZXQoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVj
KTsKICAgICAKICAgICBEZWZlckdDRm9yQVdoaWxlIGRlZmVyR0Modm0uaGVhcCk7CiAgICAgCkBA
IC0xOTQzLDcgKzE5NDMsNyBAQCBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRl
RGlyCiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRlQ2xvbmVkQXJndW1lbnRz
RHVyaW5nRXhpdChFeGVjU3RhdGUqIGV4ZWMsIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZy
YW1lLCBKU0Z1bmN0aW9uKiBjYWxsZWUsIHVpbnQzMl90IGFyZ3VtZW50Q291bnQpCiB7CiAgICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdGFyZ2V0KCZ2
bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAg
ICAgCiAgICAgRGVmZXJHQ0ZvckFXaGlsZSBkZWZlckdDKHZtLmhlYXApOwogICAgIApAQCAtMTk2
OSw3ICsxOTY5LDcgQEAgSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZUNsbwog
CiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRlUmVzdChFeGVjU3RhdGUqIGV4
ZWMsIFJlZ2lzdGVyKiBhcmd1bWVudFN0YXJ0LCB1bnNpZ25lZCBudW1iZXJPZlBhcmFtc1RvU2tp
cCwgdW5zaWduZWQgYXJyYXlTaXplKQogewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2
bSwgZXhlYyk7CiAKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+bGV4
aWNhbEdsb2JhbE9iamVjdCgpOwpAQCAtMTk4Miw3ICsxOTgyLDcgQEAgSlNDZWxsKiBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbkNyZWF0ZVJlcwogc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
T2JqZWN0SXNPYmplY3QoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU0NlbGwqIG9iamVjdCkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKIAogICAgIEFTU0VSVChqc0R5bmFtaWNDYXN0PEpT
T2JqZWN0Kj4odm0sIG9iamVjdCkpOwogICAgIApAQCAtMTk5Niw3ICsxOTk2LDcgQEAgc2l6ZV90
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uT2JqZWN0SXNPYgogc2l6ZV90IEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uT2JqZWN0SXNGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTQ2VsbCogb2JqZWN0KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogCiAgICAgQVNTRVJUKGpzRHlu
YW1pY0Nhc3Q8SlNPYmplY3QqPih2bSwgb2JqZWN0KSk7CiAgICAgCkBAIC0yMDEwLDcgKzIwMTAs
NyBAQCBzaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25PYmplY3RJc0Z1CiBKU0NlbGwqIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uVHlwZU9mT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDZWxsKiBvYmplY3QpCiB7CiAgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7
CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAKICAgICBBU1NF
UlQoanNEeW5hbWljQ2FzdDxKU09iamVjdCo+KHZtLCBvYmplY3QpKTsKICAgICAKQEAgLTIwMjQs
NyArMjAyNCw3IEBAIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25UeXBlT2ZPYmoKIGlu
dDMyX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25UeXBlT2ZPYmplY3RBc1R5cGVvZlR5cGUoRXhl
Y1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0NlbGwqIG9iamVj
dCkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZt
LCBleGVjKTsKIAogICAgIEFTU0VSVChqc0R5bmFtaWNDYXN0PEpTT2JqZWN0Kj4odm0sIG9iamVj
dCkpOwogICAgIApAQCAtMjAzOCw3ICsyMDM4LDcgQEAgaW50MzJfdCBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvblR5cGVPZk9iagogY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25BbGxvY2F0ZVNp
bXBsZVByb3BlcnR5U3RvcmFnZVdpdGhJbml0aWFsQ2FwYWNpdHkoRXhlY1N0YXRlKiBleGVjKQog
ewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4
ZWMpOwogCiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KAogICAgICAgICBCdXR0
ZXJmbHk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQodm0sIDAsIDAsIGluaXRpYWxPdXRPZkxpbmVDYXBh
Y2l0eSwgZmFsc2UsIDApKTsKQEAgLTIwNDcsNyArMjA0Nyw3IEBAIGNoYXIqIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uQWxsb2NhdGVTaW0KIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQWxs
b2NhdGVTaW1wbGVQcm9wZXJ0eVN0b3JhZ2UoRXhlY1N0YXRlKiBleGVjLCBzaXplX3QgbmV3U2l6
ZSkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZt
LCBleGVjKTsKIAogICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPigKICAgICAgICAg
QnV0dGVyZmx5OjpjcmVhdGVVbmluaXRpYWxpemVkKHZtLCAwLCAwLCBuZXdTaXplLCBmYWxzZSwg
MCkpOwpAQCAtMjA1Niw3ICsyMDU2LDcgQEAgY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25B
bGxvY2F0ZVNpbQogY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25BbGxvY2F0ZUNvbXBsZXhQ
cm9wZXJ0eVN0b3JhZ2VXaXRoSW5pdGlhbENhcGFjaXR5KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmpl
Y3QqIG9iamVjdCkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxG
cmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIg
dHJhY2VyKHZtLCBleGVjKTsKIAogICAgIEFTU0VSVCghb2JqZWN0LT5zdHJ1Y3R1cmUodm0pLT5v
dXRPZkxpbmVDYXBhY2l0eSgpKTsKICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4o
CkBAIC0yMDY2LDcgKzIwNjYsNyBAQCBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFsbG9j
YXRlQ29tCiBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFsbG9jYXRlQ29tcGxleFByb3Bl
cnR5U3RvcmFnZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvYmplY3QsIHNpemVfdCBuZXdT
aXplKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
dm0sIGV4ZWMpOwogCiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KAogICAgICAg
ICBvYmplY3QtPmFsbG9jYXRlTW9yZU91dE9mTGluZVN0b3JhZ2Uodm0sIG9iamVjdC0+c3RydWN0
dXJlKHZtKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgbmV3U2l6ZSkpOwpAQCAtMjA3NSw3ICsyMDc1
LDcgQEAgY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25BbGxvY2F0ZUNvbQogY2hhciogSklU
X09QRVJBVElPTiBvcGVyYXRpb25FbnN1cmVJbnQzMihFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCog
Y2VsbCkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRy
YWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KHZtLCBleGVjKTsKICAgICAKICAgICBpZiAoIWNlbGwtPmlzT2JqZWN0KCkpCiAgICAgICAgIHJl
dHVybiAwOwpAQCAtMjA4OCw3ICsyMDg4LDcgQEAgY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRp
b25FbnN1cmVJbnQzMgogY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25FbnN1cmVEb3VibGUo
RXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGNlbGwpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgCiAgICAgaWYgKCFjZWxs
LT5pc09iamVjdCgpKQogICAgICAgICByZXR1cm4gMDsKQEAgLTIxMDEsNyArMjEwMSw3IEBAIGNo
YXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRW5zdXJlRG91YmwKIGNoYXIqIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uRW5zdXJlQ29udGlndW91cyhFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogY2Vs
bCkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZt
LCBleGVjKTsKICAgICAKICAgICBpZiAoIWNlbGwtPmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVy
biAwOwpAQCAtMjExNCw3ICsyMTE0LDcgQEAgY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25F
bnN1cmVDb250aQogY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25FbnN1cmVBcnJheVN0b3Jh
Z2UoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGNlbGwpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgCiAgICAgaWYgKCFj
ZWxsLT5pc09iamVjdCgpKQogICAgICAgICByZXR1cm4gMDsKQEAgLTIxMjcsNyArMjEyNyw3IEBA
IGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRW5zdXJlQXJyYXkKIEVuY29kZWRKU1ZhbHVl
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSGFzR2VuZXJpY1Byb3BlcnR5KEV4ZWNTdGF0ZSogZXhl
YywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2VWYWx1ZSwgSlNDZWxsKiBwcm9wZXJ0eSkKIHsK
ICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVj
KTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBKU1Zh
bHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQmFzZVZhbHVlKTsKQEAgLTIx
NDUsMTEgKzIxNDUsMTEgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25I
YQogc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSGFzSW5kZXhlZFByb3BlcnR5QnlJbnQo
RXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGJhc2VDZWxsLCBpbnQzMl90IHN1YnNjcmlwdCwgaW50
MzJfdCBpbnRlcm5hbE1ldGhvZFR5cGUpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgSlNPYmplY3QqIG9iamVjdCA9IGJh
c2VDZWxsLT50b09iamVjdChleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpOwogICAg
IGlmIChVTkxJS0VMWShzdWJzY3JpcHQgPCAwKSkgewogICAgICAgICAvLyBHbyB0aGUgc2xvd2Vz
dCB3YXkgcG9zc2libGUgYmVjYXVzZSBuZWdhdGl2ZSBpbmRpY2VzIGRvbid0IHVzZSBpbmRleGVk
IHN0b3JhZ2UuCi0gICAgICAgIHJldHVybiBvYmplY3QtPmhhc1Byb3BlcnR5R2VuZXJpYyhleGVj
LCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIHN1YnNjcmlwdCksIHN0YXRpY19jYXN0PFByb3BlcnR5
U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlPihpbnRlcm5hbE1ldGhvZFR5cGUpKTsKKyAgICAgICAg
cmV0dXJuIG9iamVjdC0+aGFzUHJvcGVydHlHZW5lcmljKGV4ZWMsIElkZW50aWZpZXI6OmZyb20o
dm0sIHN1YnNjcmlwdCksIHN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RU
eXBlPihpbnRlcm5hbE1ldGhvZFR5cGUpKTsKICAgICB9CiAgICAgcmV0dXJuIG9iamVjdC0+aGFz
UHJvcGVydHlHZW5lcmljKGV4ZWMsIHN1YnNjcmlwdCwgc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90
OjpJbnRlcm5hbE1ldGhvZFR5cGU+KGludGVybmFsTWV0aG9kVHlwZSkpOwogfQpAQCAtMjE1Nyw3
ICsyMTU3LDcgQEAgc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSGFzSW5kZXhlZAogSlND
ZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldFByb3BlcnR5RW51bWVyYXRvcihFeGVjU3Rh
dGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlKQogewogICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwor
ICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEpTVmFsdWUgYmFzZSA9IEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkQmFzZSk7CkBAIC0yMTczLDcgKzIxNzMsNyBAQCBKU0NlbGwqIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0UHJvcGVyCiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uR2V0UHJvcGVydHlFbnVtZXJhdG9yQ2VsbChFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCog
Y2VsbCkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRy
YWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KHZtLCBleGVjKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAK
ICAgICBKU09iamVjdCogYmFzZSA9IGNlbGwtPnRvT2JqZWN0KGV4ZWMsIGV4ZWMtPmxleGljYWxH
bG9iYWxPYmplY3QoKSk7CkBAIC0yMTg1LDE0ICsyMTg1LDE0IEBAIEpTQ2VsbCogSklUX09QRVJB
VElPTiBvcGVyYXRpb25HZXRQcm9wZXIKIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25U
b0luZGV4U3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgaW50MzJfdCBpbmRleCkKIHsKICAgICBWTSYg
dm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBl
eGVjKTsKLSAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBp
bmRleCkuc3RyaW5nKCkpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4
ZWMpOworICAgIHJldHVybiBqc1N0cmluZyh2bSwgSWRlbnRpZmllcjo6ZnJvbSh2bSwgaW5kZXgp
LnN0cmluZygpKTsKIH0KIAogSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1JlZ2V4
cFdpdGhMYXN0SW5kZXgoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIHJlZ2V4cFB0ciwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZExhc3RJbmRleCkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwot
ICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKIAogICAgIFJlZ0V4cCogcmVnZXhwID0g
c3RhdGljX2Nhc3Q8UmVnRXhwKj4ocmVnZXhwUHRyKTsKICAgICBBU1NFUlQocmVnZXhwLT5pc1Zh
bGlkKCkpOwpAQCAtMjIwMiw3ICsyMjAyLDcgQEAgSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbk5ld1JlZ2V4cAogU3RyaW5nSW1wbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25SZXNvbHZl
Um9wZShFeGVjU3RhdGUqIGV4ZWMsIEpTU3RyaW5nKiBzdHJpbmcpCiB7CiAgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7
CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAKICAgICByZXR1
cm4gc3RyaW5nLT52YWx1ZShleGVjKS5pbXBsKCk7CiB9CkBAIC0yMjEwLDcgKzIyMTAsNyBAQCBT
dHJpbmdJbXBsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblJlc29sCiBKU1N0cmluZyogSklUX09Q
RVJBVElPTiBvcGVyYXRpb25TdHJpbmdWYWx1ZU9mKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZEFyZ3VtZW50KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxG
cmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKIAogICAgIEpTVmFsdWUgYXJndW1lbnQgPSBKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZEFyZ3VtZW50KTsKQEAgLTIyMjgsNyArMjIyOCw3IEBAIEpTU3RyaW5nKiBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvblN0cmluZ1YKIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25T
dHJpbmdTdWJzdHIoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGNlbGwsIGludDMyX3QgZnJvbSwg
aW50MzJfdCBzcGFuKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIodm0sIGV4ZWMpOwogCiAgICAgcmV0dXJuIGpzU3Vic3RyaW5nKHZtLCBleGVjLCBq
c0Nhc3Q8SlNTdHJpbmcqPihjZWxsKSwgZnJvbSwgc3Bhbik7CiB9CkBAIC0yMjM2LDcgKzIyMzYs
NyBAQCBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uU3RyaW5nU3ViCiBKU0NlbGwqIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uU3RyaW5nU2xpY2UoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwq
IGNlbGwsIGludDMyX3Qgc3RhcnQsIGludDMyX3QgZW5kKQogewogICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogCiAgICAgSlNTdHJpbmcq
IHN0cmluZyA9IGFzU3RyaW5nKGNlbGwpOwogICAgIHN0YXRpY19hc3NlcnQoc3RhdGljX2Nhc3Q8
dWludDY0X3Q+KEpTU3RyaW5nOjpNYXhMZW5ndGgpIDw9IHN0YXRpY19jYXN0PHVpbnQ2NF90Pihz
dGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptYXgoKSksICIiKTsKQEAgLTIyNDYsNyArMjI0
Niw3IEBAIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25TdHJpbmdTbGkKIEpTU3RyaW5n
KiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRvTG93ZXJDYXNlKEV4ZWNTdGF0ZSogZXhlYywgSlNT
dHJpbmcqIHN0cmluZywgdWludDMyX3QgZmFpbGluZ0luZGV4KQogewogICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwor
ICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogCiAgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCkBAIC0yMjU4LDEzICsyMjU4LDEzIEBA
IEpTU3RyaW5nKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRvTG93ZXIKICAgICBTdHJpbmcgbG93
ZXJjYXNlZFN0cmluZyA9IGlucHV0U3RyaW5nLmlzOEJpdCgpID8gaW5wdXRTdHJpbmcuY29udmVy
dFRvTG93ZXJjYXNlV2l0aG91dExvY2FsZVN0YXJ0aW5nQXRGYWlsaW5nSW5kZXg4Qml0KGZhaWxp
bmdJbmRleCkgOiBpbnB1dFN0cmluZy5jb252ZXJ0VG9Mb3dlcmNhc2VXaXRob3V0TG9jYWxlKCk7
CiAgICAgaWYgKGxvd2VyY2FzZWRTdHJpbmcuaW1wbCgpID09IGlucHV0U3RyaW5nLmltcGwoKSkK
ICAgICAgICAgcmV0dXJuIHN0cmluZzsKLSAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGpz
U3RyaW5nKGV4ZWMsIGxvd2VyY2FzZWRTdHJpbmcpKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4o
c2NvcGUsIGpzU3RyaW5nKHZtLCBsb3dlcmNhc2VkU3RyaW5nKSk7CiB9CiAKIGNoYXIqIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uSW50MzJUb1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIGludDMyX3Qg
dmFsdWUsIGludDMyX3QgcmFkaXgpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CiAKQEAgLTIyNzksNyArMjI3OSw3IEBAIGNoYXIqIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uSW50MzJUb1N0cmkKIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSW50
NTJUb1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIGludDY0X3QgdmFsdWUsIGludDMyX3QgcmFkaXgp
CiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIg
dHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwg
ZXhlYyk7CiAKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKQEAg
LTIyOTQsNyArMjI5NCw3IEBAIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSW50NTJUb1N0
cmkKIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRG91YmxlVG9TdHJpbmcoRXhlY1N0YXRl
KiBleGVjLCBkb3VibGUgdmFsdWUsIGludDMyX3QgcmFkaXgpCiB7CiAgICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7Cisg
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAKICAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKQEAgLTIzMDksNyArMjMwOSw3IEBAIGNo
YXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRG91YmxlVG9TdHIKIGNoYXIqIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uSW50MzJUb1N0cmluZ1dpdGhWYWxpZFJhZGl4KEV4ZWNTdGF0ZSogZXhlYywg
aW50MzJfdCB2YWx1ZSwgaW50MzJfdCByYWRpeCkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgp
OwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKIAogICAgIHJldHVybiByZWludGVy
cHJldF9jYXN0PGNoYXIqPihpbnQzMlRvU3RyaW5nKHZtLCB2YWx1ZSwgcmFkaXgpKTsKIH0KQEAg
LTIzMTcsNyArMjMxNyw3IEBAIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSW50MzJUb1N0
cmkKIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSW50NTJUb1N0cmluZ1dpdGhWYWxpZFJh
ZGl4KEV4ZWNTdGF0ZSogZXhlYywgaW50NjRfdCB2YWx1ZSwgaW50MzJfdCByYWRpeCkKIHsKICAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
JnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsK
IAogICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPihpbnQ1MlRvU3RyaW5nKHZtLCB2
YWx1ZSwgcmFkaXgpKTsKIH0KQEAgLTIzMjUsNyArMjMyNSw3IEBAIGNoYXIqIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uSW50NTJUb1N0cmkKIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRG91
YmxlVG9TdHJpbmdXaXRoVmFsaWRSYWRpeChFeGVjU3RhdGUqIGV4ZWMsIGRvdWJsZSB2YWx1ZSwg
aW50MzJfdCByYWRpeCkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFj
ZXIgdHJhY2VyKHZtLCBleGVjKTsKIAogICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIq
PihudW1iZXJUb1N0cmluZyh2bSwgdmFsdWUsIHJhZGl4KSk7CiB9CkBAIC0yMzMzLDE1ICsyMzMz
LDE1IEBAIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRG91YmxlVG9TdHIKIEpTU3RyaW5n
KiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblNpbmdsZUNoYXJhY3RlclN0cmluZyhFeGVjU3RhdGUq
IGV4ZWMsIGludDMyX3QgY2hhcmFjdGVyKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0g
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIAotICAgIHJldHVybiBqc1Npbmds
ZUNoYXJhY3RlclN0cmluZyhleGVjLCBzdGF0aWNfY2FzdDxVQ2hhcj4oY2hhcmFjdGVyKSk7Cisg
ICAgcmV0dXJuIGpzU2luZ2xlQ2hhcmFjdGVyU3RyaW5nKHZtLCBzdGF0aWNfY2FzdDxVQ2hhcj4o
Y2hhcmFjdGVyKSk7CiB9CiAKIFN5bWJvbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdTeW1i
b2woRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogCiAgICAgcmV0dXJuIFN5bWJvbDo6Y3JlYXRlKHZt
KTsKIH0KQEAgLTIzNDksNyArMjM0OSw3IEBAIFN5bWJvbCogSklUX09QRVJBVElPTiBvcGVyYXRp
b25OZXdTeW1ib2wKIFN5bWJvbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdTeW1ib2xXaXRo
RGVzY3JpcHRpb24oRXhlY1N0YXRlKiBleGVjLCBKU1N0cmluZyogZGVzY3JpcHRpb24pCiB7CiAg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7
CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgU3RyaW5n
IHN0cmluZyA9IGRlc2NyaXB0aW9uLT52YWx1ZShleGVjKTsKQEAgLTIzNjEsNyArMjM2MSw3IEBA
IFN5bWJvbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdTeW1ib2wKIEpTQ2VsbCogSklUX09Q
RVJBVElPTiBvcGVyYXRpb25OZXdTdHJpbmdPYmplY3QoRXhlY1N0YXRlKiBleGVjLCBKU1N0cmlu
Zyogc3RyaW5nLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52
bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICAKICAgICByZXR1cm4g
U3RyaW5nT2JqZWN0OjpjcmVhdGUodm0sIHN0cnVjdHVyZSwgc3RyaW5nKTsKIH0KQEAgLTIzNjks
NyArMjM2OSw3IEBAIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdTdHJpbmcKIEpT
U3RyaW5nKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRvU3RyaW5nT25DZWxsKEV4ZWNTdGF0ZSog
ZXhlYywgSlNDZWxsKiBjZWxsKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIAogICAgIHJldHVybiBKU1ZhbHVlKGNlbGwp
LnRvU3RyaW5nKGV4ZWMpOwogfQpAQCAtMjM3Nyw3ICsyMzc3LDcgQEAgSlNTdHJpbmcqIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uVG9TdHJpbgogSlNTdHJpbmcqIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uVG9TdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSB2YWx1ZSkKIHsKICAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
JnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsK
IAogICAgIHJldHVybiBKU1ZhbHVlOjpkZWNvZGUodmFsdWUpLnRvU3RyaW5nKGV4ZWMpOwogfQpA
QCAtMjM4NSw3ICsyMzg1LDcgQEAgSlNTdHJpbmcqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVG9T
dHJpbgogSlNTdHJpbmcqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ2FsbFN0cmluZ0NvbnN0cnVj
dG9yT25DZWxsKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBjZWxsKQogewogICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMp
OworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogCiAgICAgcmV0
dXJuIHN0cmluZ0NvbnN0cnVjdG9yKGV4ZWMsIGNlbGwpOwogfQpAQCAtMjM5Myw3ICsyMzkzLDcg
QEAgSlNTdHJpbmcqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ2FsbFN0cgogSlNTdHJpbmcqIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uQ2FsbFN0cmluZ0NvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhl
YywgRW5jb2RlZEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAKICAgICByZXR1cm4gc3RyaW5nQ29uc3Ry
dWN0b3IoZXhlYywgSlNWYWx1ZTo6ZGVjb2RlKHZhbHVlKSk7CiB9CkBAIC0yNDAxLDcgKzI0MDEs
NyBAQCBKU1N0cmluZyogSklUX09QRVJBVElPTiBvcGVyYXRpb25DYWxsU3RyCiBKU1N0cmluZyog
SklUX09QRVJBVElPTiBvcGVyYXRpb25NYWtlUm9wZTIoRXhlY1N0YXRlKiBleGVjLCBKU1N0cmlu
ZyogbGVmdCwgSlNTdHJpbmcqIHJpZ2h0KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0g
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogCiAgICAgcmV0dXJuIGpzU3RyaW5nKGV4
ZWMsIGxlZnQsIHJpZ2h0KTsKIH0KQEAgLTI0MDksNyArMjQwOSw3IEBAIEpTU3RyaW5nKiBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbk1ha2VSb3AKIEpTU3RyaW5nKiBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbk1ha2VSb3BlMyhFeGVjU3RhdGUqIGV4ZWMsIEpTU3RyaW5nKiBhLCBKU1N0cmluZyogYiwg
SlNTdHJpbmcqIGMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcih2bSwgZXhlYyk7CiAKICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgYSwgYiwgYyk7
CiB9CkBAIC0yNDE3LDcgKzI0MTcsNyBAQCBKU1N0cmluZyogSklUX09QRVJBVElPTiBvcGVyYXRp
b25NYWtlUm9wCiBKU1N0cmluZyogSklUX09QRVJBVElPTiBvcGVyYXRpb25TdHJDYXQyKEV4ZWNT
dGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgYSwgRW5jb2RlZEpTVmFsdWUgYikKIHsKICAgICBW
TSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZt
LCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBBU1NFUlQoIUpT
VmFsdWU6OmRlY29kZShhKS5pc1N5bWJvbCgpKTsKQEAgLTI0MzMsNyArMjQzMyw3IEBAIEpTU3Ry
aW5nKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblN0ckNhdDIKIEpTU3RyaW5nKiBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvblN0ckNhdDMoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBhLCBF
bmNvZGVkSlNWYWx1ZSBiLCBFbmNvZGVkSlNWYWx1ZSBjKQogewogICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEFTU0VSVCghSlNWYWx1ZTo6ZGVjb2Rl
KGEpLmlzU3ltYm9sKCkpOwpAQCAtMjQ1Myw3ICsyNDUzLDcgQEAgY2hhciogSklUX09QRVJBVElP
TiBvcGVyYXRpb25GaW5kU3dpdGNoSQogICAgIEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFZhbHVlLCBzaXplX3QgdGFibGVJbmRleCkKIHsKICAgICBWTSYgdm0gPSBleGVj
LT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICBDb2RlQmxvY2sq
IGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOwogICAgIFNpbXBsZUp1bXBUYWJsZSYgdGFi
bGUgPSBjb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKICAgICBKU1ZhbHVl
IHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CkBAIC0yNDY4LDcgKzI0Njgs
NyBAQCBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkZpbmRTd2l0Y2hJCiBjaGFyKiBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvblN3aXRjaFN0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIHNpemVfdCB0
YWJsZUluZGV4LCBKU1N0cmluZyogc3RyaW5nKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgU3RyaW5nSW1wbCogc3RySW1wbCA9IHN0
cmluZy0+dmFsdWUoZXhlYykuaW1wbCgpOwpAQCAtMjQ4MSw3ICsyNDgxLDcgQEAgY2hhciogSklU
X09QRVJBVElPTiBvcGVyYXRpb25Td2l0Y2hTdHJpbgogaW50MzJfdCBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvblN3aXRjaFN0cmluZ0FuZEdldEJyYW5jaE9mZnNldChFeGVjU3RhdGUqIGV4ZWMsIHNp
emVfdCB0YWJsZUluZGV4LCBKU1N0cmluZyogc3RyaW5nKQogewogICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgU3RyaW5nSW1wbCogc3RySW1w
bCA9IHN0cmluZy0+dmFsdWUoZXhlYykuaW1wbCgpOwpAQCAtMjUxNCw3ICsyNTE0LDcgQEAgdWlu
dHB0cl90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZQogdWludHB0cl90IEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uQ29tcGFyZVN0cmluZ0xlc3MoRXhlY1N0YXRlKiBleGVjLCBKU1N0cmlu
ZyogYSwgSlNTdHJpbmcqIGIpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAKICAgICByZXR1cm4gY29kZVBvaW50Q29tcGFyZUxl
c3NUaGFuKGFzU3RyaW5nKGEpLT52YWx1ZShleGVjKSwgYXNTdHJpbmcoYiktPnZhbHVlKGV4ZWMp
KTsKIH0KQEAgLTI1MjIsNyArMjUyMiw3IEBAIHVpbnRwdHJfdCBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbkNvbXBhcmUKIHVpbnRwdHJfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVTdHJp
bmdMZXNzRXEoRXhlY1N0YXRlKiBleGVjLCBKU1N0cmluZyogYSwgSlNTdHJpbmcqIGIpCiB7CiAg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7
CiAKICAgICByZXR1cm4gIWNvZGVQb2ludENvbXBhcmVMZXNzVGhhbihhc1N0cmluZyhiKS0+dmFs
dWUoZXhlYyksIGFzU3RyaW5nKGEpLT52YWx1ZShleGVjKSk7CiB9CkBAIC0yNTMwLDcgKzI1MzAs
NyBAQCB1aW50cHRyX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlCiB1aW50cHRyX3Qg
SklUX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlU3RyaW5nR3JlYXRlcihFeGVjU3RhdGUqIGV4
ZWMsIEpTU3RyaW5nKiBhLCBKU1N0cmluZyogYikKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgp
OwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKIAogICAgIHJldHVybiBjb2RlUG9p
bnRDb21wYXJlTGVzc1RoYW4oYXNTdHJpbmcoYiktPnZhbHVlKGV4ZWMpLCBhc1N0cmluZyhhKS0+
dmFsdWUoZXhlYykpOwogfQpAQCAtMjUzOCw3ICsyNTM4LDcgQEAgdWludHB0cl90IEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uQ29tcGFyZQogdWludHB0cl90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
Q29tcGFyZVN0cmluZ0dyZWF0ZXJFcShFeGVjU3RhdGUqIGV4ZWMsIEpTU3RyaW5nKiBhLCBKU1N0
cmluZyogYikKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKHZtLCBleGVjKTsKIAogICAgIHJldHVybiAhY29kZVBvaW50Q29tcGFyZUxlc3NUaGFuKGFz
U3RyaW5nKGEpLT52YWx1ZShleGVjKSwgYXNTdHJpbmcoYiktPnZhbHVlKGV4ZWMpKTsKIH0KQEAg
LTI1NDYsNyArMjU0Niw3IEBAIHVpbnRwdHJfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBh
cmUKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25Ob3RpZnlXcml0ZShFeGVjU3RhdGUqIGV4
ZWMsIFdhdGNocG9pbnRTZXQqIHNldCkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKIAogICAgIHNldC0+dG91Y2godm0sICJFeGVj
dXRlZCBOb3RpZnlXcml0ZSIpOwogfQpAQCAtMjU1NCw3ICsyNTU0LDcgQEAgdm9pZCBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbk5vdGlmeVdyaXRlKAogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
blRocm93U3RhY2tPdmVyZmxvd0ZvclZhcmFyZ3MoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0s
IGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICB0aHJvd1N0YWNrT3Zl
cmZsb3dFcnJvcihleGVjLCBzY29wZSk7CiB9CkBAIC0yNTYyLDcgKzI1NjIsNyBAQCB2b2lkIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uVGhyb3dTdGFja092CiBpbnQzMl90IEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uU2l6ZU9mVmFyYXJncyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRBcmd1bWVudHMsIHVpbnQzMl90IGZpcnN0VmFyQXJnT2Zmc2V0KQogewogICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4
ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIEpT
VmFsdWUgYXJndW1lbnRzID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRBcmd1bWVudHMpOwogICAg
IAogICAgIHJldHVybiBzaXplT2ZWYXJhcmdzKGV4ZWMsIGFyZ3VtZW50cywgZmlyc3RWYXJBcmdP
ZmZzZXQpOwpAQCAtMjU3MSw3ICsyNTcxLDcgQEAgaW50MzJfdCBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvblNpemVPZlZhcgogaW50MzJfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkhhc093blByb3Bl
cnR5KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmplY3QsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRLZXkpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcih2bSwgZXhlYyk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogCiAgICAgSlNWYWx1ZSBrZXkgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEtleSk7CkBA
IC0yNTkxLDE0ICsyNTkxLDE0IEBAIGludDMyX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25IYXNP
d25Qcm8KIGludDMyX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25OdW1iZXJJc0ludGVnZXIoRXhl
Y1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBWTSYgdm0gPSBleGVj
LT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICByZXR1cm4gTnVt
YmVyQ29uc3RydWN0b3I6OmlzSW50ZWdlckltcGwoSlNWYWx1ZTo6ZGVjb2RlKHZhbHVlKSk7CiB9
CiAKIGludDMyX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25BcnJheUluZGV4T2ZTdHJpbmcoRXhl
Y1N0YXRlKiBleGVjLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSwgSlNTdHJpbmcqIHNlYXJjaEVsZW1l
bnQsIGludDMyX3QgaW5kZXgpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogCiAgICAgaW50MzJfdCBsZW5ndGggPSBidXR0ZXJmbHktPnB1YmxpY0xlbmd0
aCgpOwpAQCAtMjYyMiw3ICsyNjIyLDcgQEAgaW50MzJfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
bkFycmF5SW5kZQogaW50MzJfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFycmF5SW5kZXhPZlZh
bHVlSW50MzJPckNvbnRpZ3VvdXMoRXhlY1N0YXRlKiBleGVjLCBCdXR0ZXJmbHkqIGJ1dHRlcmZs
eSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBpbnQzMl90IGluZGV4KQogewogICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0s
IGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEpTVmFsdWUgc2Vh
cmNoRWxlbWVudCA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwpAQCAtMjY0NCw3ICsy
NjQ0LDcgQEAgaW50MzJfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFycmF5SW5kZQogaW50MzJf
dCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFycmF5SW5kZXhPZlZhbHVlRG91YmxlKEV4ZWNTdGF0
ZSogZXhlYywgQnV0dGVyZmx5KiBidXR0ZXJmbHksIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1
ZSwgaW50MzJfdCBpbmRleCkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVU
cmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKIAogICAgIEpTVmFsdWUgc2VhcmNoRWxlbWVudCA9IEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogCkBAIC0yNjY1LDcgKzI2NjUsNyBAQCBpbnQz
Ml90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXJyYXlJbmRlCiB2b2lkIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uTG9hZFZhcmFyZ3MoRXhlY1N0YXRlKiBleGVjLCBpbnQzMl90IGZpcnN0RWxlbWVu
dERlc3QsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRBcmd1bWVudHMsIHVpbnQzMl90IG9mZnNldCwg
dWludDMyX3QgbGVuZ3RoLCB1aW50MzJfdCBtYW5kYXRvcnlNaW5pbXVtKQogewogICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4
ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIEpT
VmFsdWUgYXJndW1lbnRzID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRBcmd1bWVudHMpOwogICAg
IAogICAgIGxvYWRWYXJhcmdzKGV4ZWMsIFZpcnR1YWxSZWdpc3RlcihmaXJzdEVsZW1lbnREZXN0
KSwgYXJndW1lbnRzLCBvZmZzZXQsIGxlbmd0aCk7CkBAIC0yNjg4LDE0ICsyNjg4LDE0IEBAIGRv
dWJsZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblJhbmRvbShKU0cKIAogSlNDZWxsKiBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvblN0cmluZ0Zyb21DaGFyQ29kZShFeGVjU3RhdGUqIGV4ZWMsIGludDMy
X3Qgb3AxKQogewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAg
cmV0dXJuIEpTQzo6c3RyaW5nRnJvbUNoYXJDb2RlKGV4ZWMsIG9wMSk7CiB9CiAKIEVuY29kZWRK
U1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uU3RyaW5nRnJvbUNoYXJDb2RlVW50eXBlZChF
eGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICBWTSog
dm0gPSAmZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIEpTVmFsdWUgY2hhclZhbHVlID0g
SlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgaW50MzJfdCBjaEludCA9IGNoYXJW
YWx1ZS50b1VJbnQzMihleGVjKTsKQEAgLTI3MTgsNyArMjcxOCw3IEBAIGludDY0X3QgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25Db252ZXJ0RG8KIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
TmV3UmF3T2JqZWN0KEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGludDMy
X3QgbGVuZ3RoLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52
bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKIAogICAgIGlmICghYnV0dGVy
Zmx5CiAgICAgICAgICYmIChzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgfHwgaGFzSW5k
ZXhlZFByb3BlcnRpZXMoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpKSB7CkBAIC0yNzQwLDcg
KzI3NDAsNyBAQCBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1Jhd09iamVjCiBKU0Nl
bGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3T2JqZWN0V2l0aEJ1dHRlcmZseShFeGVjU3Rh
dGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSkKIHsK
ICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVj
KTsKICAgICAKICAgICBpZiAoIWJ1dHRlcmZseSkgewogICAgICAgICBidXR0ZXJmbHkgPSBCdXR0
ZXJmbHk6OmNyZWF0ZSgKQEAgLTI3NTUsNyArMjc1NSw3IEBAIEpTQ2VsbCogSklUX09QRVJBVElP
TiBvcGVyYXRpb25OZXdPYmplY3QKIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdP
YmplY3RXaXRoQnV0dGVyZmx5V2l0aEluZGV4aW5nSGVhZGVyQW5kVmVjdG9yTGVuZ3RoKEV4ZWNT
dGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHVuc2lnbmVkIGxlbmd0aCwgQnV0dGVy
Zmx5KiBidXR0ZXJmbHkpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcih2bSwgZXhlYyk7CiAKICAgICBJbmRleGluZ0hlYWRlciBoZWFkZXI7CiAgICAg
aGVhZGVyLnNldFZlY3Rvckxlbmd0aChsZW5ndGgpOwpAQCAtMjc3Nyw3ICsyNzc3LDcgQEAgSlND
ZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld09iamVjdAogSlNDZWxsKiBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvbk5ld0FycmF5V2l0aFNwcmVhZFNsb3coRXhlY1N0YXRlKiBleGVjLCB2b2lk
KiBidWZmZXIsIHVpbnQzMl90IG51bUl0ZW1zKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEVuY29kZWRKU1ZhbHVlKiB2YWx1ZXMgPSBzdGF0
aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+KGJ1ZmZlcik7CkBAIC0yODM1LDcgKzI4MzUsNyBAQCBK
U0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3QXJyYXlXCiBKU0NlbGwqIG9wZXJhdGlv
bkNyZWF0ZUZpeGVkQXJyYXkoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7
CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgaWYgKEpT
Rml4ZWRBcnJheSogcmVzdWx0ID0gSlNGaXhlZEFycmF5Ojp0cnlDcmVhdGUodm0sIHZtLmZpeGVk
QXJyYXlTdHJ1Y3R1cmUuZ2V0KCksIGxlbmd0aCkpCkBAIC0yODQ4LDcgKzI4NDgsNyBAQCBKU0Nl
bGwqIG9wZXJhdGlvbkNyZWF0ZUZpeGVkQXJyYXkoRXhlY1N0CiBKU0NlbGwqIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uU3ByZWFkR2VuZXJpYyhFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogaXRlcmFi
bGUpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFj
ZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2
bSwgZXhlYyk7CiAKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKIApAQCAtMjg4Myw3ICsyODgzLDcgQEAgSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
blNwcmVhZEdlbgogSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblNwcmVhZEZhc3RBcnJh
eShFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogY2VsbCkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52
bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKIAogICAgIEFTU0VSVChpc0pT
QXJyYXkoY2VsbCkpOwogICAgIEpTQXJyYXkqIGFycmF5ID0ganNDYXN0PEpTQXJyYXkqPihjZWxs
KTsKQEAgLTI4OTUsNyArMjg5NSw3IEBAIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25T
cHJlYWRGYXMKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25Qcm9jZXNzVHlwZVByb2ZpbGVy
TG9nREZHKEV4ZWNTdGF0ZSogZXhlYykgCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAKICAgICB2bS50eXBlUHJvZmlsZXJMb2co
KS0+cHJvY2Vzc0xvZ0VudHJpZXModm0sICJMb2cgRnVsbCwgY2FsbGVkIGZyb20gaW5zaWRlIERG
Ry4iX3MpOwogfQpAQCAtMjkwMywyOCArMjkwMywyOCBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uUHJvY2Vzc1R5cGVQCiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
blJlc29sdmVTY29wZUZvckhvaXN0aW5nRnVuY0RlY2xJbkV2YWwoRXhlY1N0YXRlKiBleGVjLCBK
U1Njb3BlKiBzY29wZSwgVW5pcXVlZFN0cmluZ0ltcGwqIGltcGwpCiB7CiAgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7
CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgICAgIAot
ICAgIEpTVmFsdWUgcmVzb2x2ZWRTY29wZSA9IEpTU2NvcGU6OnJlc29sdmVTY29wZUZvckhvaXN0
aW5nRnVuY0RlY2xJbkV2YWwoZXhlYywgc2NvcGUsIElkZW50aWZpZXI6OmZyb21VaWQoZXhlYywg
aW1wbCkpOworICAgIEpTVmFsdWUgcmVzb2x2ZWRTY29wZSA9IEpTU2NvcGU6OnJlc29sdmVTY29w
ZUZvckhvaXN0aW5nRnVuY0RlY2xJbkV2YWwoZXhlYywgc2NvcGUsIElkZW50aWZpZXI6OmZyb21V
aWQodm0sIGltcGwpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc29sdmVkU2NvcGUp
OwogfQogICAgIAogSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblJlc29sdmVTY29wZShF
eGVjU3RhdGUqIGV4ZWMsIEpTU2NvcGUqIHNjb3BlLCBVbmlxdWVkU3RyaW5nSW1wbCogaW1wbCkK
IHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBl
eGVjKTsKIAotICAgIEpTT2JqZWN0KiByZXNvbHZlZFNjb3BlID0gSlNTY29wZTo6cmVzb2x2ZShl
eGVjLCBzY29wZSwgSWRlbnRpZmllcjo6ZnJvbVVpZChleGVjLCBpbXBsKSk7CisgICAgSlNPYmpl
Y3QqIHJlc29sdmVkU2NvcGUgPSBKU1Njb3BlOjpyZXNvbHZlKGV4ZWMsIHNjb3BlLCBJZGVudGlm
aWVyOjpmcm9tVWlkKHZtLCBpbXBsKSk7CiAgICAgcmV0dXJuIHJlc29sdmVkU2NvcGU7CiB9CiAK
IEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0RHluYW1pY1ZhcihFeGVj
U3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBzY29wZSwgVW5pcXVlZFN0cmluZ0ltcGwqIGltcGwsIHVu
c2lnbmVkIGdldFB1dEluZm9CaXRzKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxG
cmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgSWRlbnRpZmllciBpZGVudCA9IElkZW50aWZpZXI6
OmZyb21VaWQoZXhlYywgaW1wbCk7CisgICAgSWRlbnRpZmllciBpZGVudCA9IElkZW50aWZpZXI6
OmZyb21VaWQodm0sIGltcGwpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBK
U1ZhbHVlOjplbmNvZGUoc2NvcGUtPmdldFByb3BlcnR5U2xvdChleGVjLCBpZGVudCwgWyZdIChi
b29sIGZvdW5kLCBQcm9wZXJ0eVNsb3QmIHNsb3QpIC0+IEpTVmFsdWUgewogICAgICAgICBpZiAo
IWZvdW5kKSB7CiAgICAgICAgICAgICBHZXRQdXRJbmZvIGdldFB1dEluZm8oZ2V0UHV0SW5mb0Jp
dHMpOwpAQCAtMjk1MSw3ICsyOTUxLDcgQEAgQUxXQVlTX0lOTElORSBzdGF0aWMgdm9pZCBwdXRE
eW5hbWljVmFyKAogewogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogCi0gICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBJZGVudGlmaWVyOjpmcm9tVWlk
KGV4ZWMsIGltcGwpOworICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gSWRlbnRpZmllcjo6
ZnJvbVVpZCh2bSwgaW1wbCk7CiAgICAgR2V0UHV0SW5mbyBnZXRQdXRJbmZvKGdldFB1dEluZm9C
aXRzKTsKICAgICBib29sIGhhc1Byb3BlcnR5ID0gc2NvcGUtPmhhc1Byb3BlcnR5KGV4ZWMsIGlk
ZW50KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHZvaWQoKSk7CkBAIC0y
OTgwLDcgKzI5ODAsNyBAQCBBTFdBWVNfSU5MSU5FIHN0YXRpYyB2b2lkIHB1dER5bmFtaWNWYXIo
CiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0RHluYW1pY1ZhclN0cmljdChFeGVjU3Rh
dGUqIGV4ZWMsIEpTT2JqZWN0KiBzY29wZSwgRW5jb2RlZEpTVmFsdWUgdmFsdWUsIFVuaXF1ZWRT
dHJpbmdJbXBsKiBpbXBsLCB1bnNpZ25lZCBnZXRQdXRJbmZvQml0cykKIHsKICAgICBWTSYgdm0g
PSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVj
KTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICBjb25z
dGV4cHIgYm9vbCBpc1N0cmljdE1vZGUgPSB0cnVlOwogICAgIHJldHVybiBwdXREeW5hbWljVmFy
KGV4ZWMsIHZtLCBzY29wZSwgdmFsdWUsIGltcGwsIGdldFB1dEluZm9CaXRzLCBpc1N0cmljdE1v
ZGUpOwogfQpAQCAtMjk4OCw3ICsyOTg4LDcgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
blB1dER5bmFtaWNWYQogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dER5bmFtaWNWYXJO
b25TdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogc2NvcGUsIEVuY29kZWRKU1ZhbHVl
IHZhbHVlLCBVbmlxdWVkU3RyaW5nSW1wbCogaW1wbCwgdW5zaWduZWQgZ2V0UHV0SW5mb0JpdHMp
CiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIg
dHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwg
ZXhlYyk7CiAgICAgY29uc3RleHByIGJvb2wgaXNTdHJpY3RNb2RlID0gZmFsc2U7CiAgICAgcmV0
dXJuIHB1dER5bmFtaWNWYXIoZXhlYywgdm0sIHNjb3BlLCB2YWx1ZSwgaW1wbCwgZ2V0UHV0SW5m
b0JpdHMsIGlzU3RyaWN0TW9kZSk7CiB9CkBAIC0yOTk2LDcgKzI5OTYsNyBAQCB2b2lkIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uUHV0RHluYW1pY1ZhCiBpbnQzMl90IEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uTWFwSGFzaChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGlucHV0KQogewog
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMp
OwogCiAgICAgcmV0dXJuIGpzTWFwSGFzaChleGVjLCB2bSwgSlNWYWx1ZTo6ZGVjb2RlKGlucHV0
KSk7CiB9CkBAIC0zMDA0LDcgKzMwMDQsNyBAQCBpbnQzMl90IEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uTWFwSGFzaChFCiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSlNNYXBGaW5kQnVj
a2V0KEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBtYXAsIEVuY29kZWRKU1ZhbHVlIGtleSwgaW50
MzJfdCBoYXNoKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIodm0sIGV4ZWMpOwogICAgIEpTTWFwOjpCdWNrZXRUeXBlKiogYnVja2V0ID0ganNDYXN0
PEpTTWFwKj4obWFwKS0+ZmluZEJ1Y2tldChleGVjLCBKU1ZhbHVlOjpkZWNvZGUoa2V5KSwgaGFz
aCk7CiAgICAgaWYgKCFidWNrZXQpCiAgICAgICAgIHJldHVybiB2bS5zZW50aW5lbE1hcEJ1Y2tl
dCgpOwpAQCAtMzAxNCw3ICszMDE0LDcgQEAgSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
bkpTTWFwRmluZAogSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkpTU2V0RmluZEJ1Y2tl
dChFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogbWFwLCBFbmNvZGVkSlNWYWx1ZSBrZXksIGludDMy
X3QgaGFzaCkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKHZtLCBleGVjKTsKICAgICBKU1NldDo6QnVja2V0VHlwZSoqIGJ1Y2tldCA9IGpzQ2FzdDxK
U1NldCo+KG1hcCktPmZpbmRCdWNrZXQoZXhlYywgSlNWYWx1ZTo6ZGVjb2RlKGtleSksIGhhc2gp
OwogICAgIGlmICghYnVja2V0KQogICAgICAgICByZXR1cm4gdm0uc2VudGluZWxTZXRCdWNrZXQo
KTsKQEAgLTMwMjQsNyArMzAyNCw3IEBAIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25K
U1NldEZpbmQKIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25TZXRBZGQoRXhlY1N0YXRl
KiBleGVjLCBKU0NlbGwqIHNldCwgRW5jb2RlZEpTVmFsdWUga2V5LCBpbnQzMl90IGhhc2gpCiB7
CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhl
Yyk7CiAgICAgYXV0byogYnVja2V0ID0ganNDYXN0PEpTU2V0Kj4oc2V0KS0+YWRkTm9ybWFsaXpl
ZChleGVjLCBKU1ZhbHVlOjpkZWNvZGUoa2V5KSwgSlNWYWx1ZSgpLCBoYXNoKTsKICAgICBpZiAo
IWJ1Y2tldCkKICAgICAgICAgcmV0dXJuIHZtLnNlbnRpbmVsU2V0QnVja2V0KCk7CkBAIC0zMDM0
LDcgKzMwMzQsNyBAQCBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uU2V0QWRkKEV4CiBK
U0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTWFwU2V0KEV4ZWNTdGF0ZSogZXhlYywgSlND
ZWxsKiBtYXAsIEVuY29kZWRKU1ZhbHVlIGtleSwgRW5jb2RlZEpTVmFsdWUgdmFsdWUsIGludDMy
X3QgaGFzaCkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKHZtLCBleGVjKTsKICAgICBhdXRvKiBidWNrZXQgPSBqc0Nhc3Q8SlNNYXAqPihtYXApLT5h
ZGROb3JtYWxpemVkKGV4ZWMsIEpTVmFsdWU6OmRlY29kZShrZXkpLCBKU1ZhbHVlOjpkZWNvZGUo
dmFsdWUpLCBoYXNoKTsKICAgICBpZiAoIWJ1Y2tldCkKICAgICAgICAgcmV0dXJuIHZtLnNlbnRp
bmVsTWFwQnVja2V0KCk7CkBAIC0zMDQ0LDI4ICszMDQ0LDI4IEBAIEpTQ2VsbCogSklUX09QRVJB
VElPTiBvcGVyYXRpb25NYXBTZXQoRXgKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25XZWFr
U2V0QWRkKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBzZXQsIEpTQ2VsbCoga2V5LCBpbnQzMl90
IGhhc2gpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVU
cmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cih2bSwgZXhlYyk7CiAgICAganNDYXN0PEpTV2Vha1NldCo+KHNldCktPmFkZCh2bSwgYXNPYmpl
Y3Qoa2V5KSwgSlNWYWx1ZSgpLCBoYXNoKTsKIH0KIAogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbldlYWtNYXBTZXQoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIG1hcCwgSlNDZWxsKiBrZXks
IEVuY29kZWRKU1ZhbHVlIHZhbHVlLCBpbnQzMl90IGhhc2gpCiB7CiAgICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7Cisg
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAganNDYXN0PEpT
V2Vha01hcCo+KG1hcCktPmFkZCh2bSwgYXNPYmplY3Qoa2V5KSwgSlNWYWx1ZTo6ZGVjb2RlKHZh
bHVlKSwgaGFzaCk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
R2V0UHJvdG90eXBlT2ZPYmplY3QoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iamVj
dCkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZt
LCBleGVjKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRoaXNPYmplY3QtPmdldFByb3Rv
dHlwZSh2bSwgZXhlYykpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbkdldFByb3RvdHlwZU9mKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFZhbHVlKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIodm0sIGV4ZWMpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
IAogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSku
dG9UaGlzKGV4ZWMsIFN0cmljdE1vZGUpOwpAQCAtMzA4Nyw3ICszMDg3LDcgQEAgRW5jb2RlZEpT
VmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZQogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvblRocm93REZHKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgdmFsdWVUb1Rocm93
KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0s
IGV4ZWMpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBz
Y29wZS50aHJvd0V4Y2VwdGlvbihleGVjLCBKU1ZhbHVlOjpkZWNvZGUodmFsdWVUb1Rocm93KSk7
CiB9CkBAIC0zMDk1LDcgKzMwOTUsNyBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVGhy
b3dERkcoRXhlCiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVGhyb3dTdGF0aWNFcnJvcihF
eGVjU3RhdGUqIGV4ZWMsIEpTU3RyaW5nKiBtZXNzYWdlLCB1aW50MzJfdCBlcnJvclR5cGUpCiB7
CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhl
Yyk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFN0cmlu
ZyBlcnJvck1lc3NhZ2UgPSBtZXNzYWdlLT52YWx1ZShleGVjKTsKICAgICBzY29wZS50aHJvd0V4
Y2VwdGlvbihleGVjLCBjcmVhdGVFcnJvcihleGVjLCBzdGF0aWNfY2FzdDxFcnJvclR5cGU+KGVy
cm9yVHlwZSksIGVycm9yTWVzc2FnZSkpOwpAQCAtMzEwNSw3ICszMTA1LDcgQEAgZXh0ZXJuICJD
IiB2b2lkIEpJVF9PUEVSQVRJT04gdHJpZ2dlclJlbwogewogICAgIC8vIEl0J3Mgc29ydCBvZiBw
cmVmZXJhYmxlIHRoYXQgd2UgZG9uJ3QgR0Mgd2hpbGUgaW4gaGVyZS4gQW55d2F5cywgZG9pbmcg
c28gd291bGRuJ3QKICAgICAvLyByZWFsbHkgYmUgcHJvZml0YWJsZS4KLSAgICBEZWZlckdDRm9y
QVdoaWxlIGRlZmVyR0MoY29kZUJsb2NrLT52bSgpLT5oZWFwKTsKKyAgICBEZWZlckdDRm9yQVdo
aWxlIGRlZmVyR0MoY29kZUJsb2NrLT52bSgpLmhlYXApOwogICAgIAogICAgIHNhbml0aXplU3Rh
Y2tGb3JWTShjb2RlQmxvY2stPnZtKCkpOwogCkBAIC0zMTc4LDcgKzMxNzgsNyBAQCBzdGF0aWMg
Ym9vbCBzaG91bGRUcmlnZ2VyRlRMQ29tcGlsZShDb2RlCiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
LXN0YXRpYyB2b2lkIHRyaWdnZXJGVExSZXBsYWNlbWVudENvbXBpbGUoVk0qIHZtLCBDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgSklUQ29kZSogaml0Q29kZSkKK3N0YXRpYyB2b2lkIHRyaWdnZXJGVExS
ZXBsYWNlbWVudENvbXBpbGUoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUQ29kZSog
aml0Q29kZSkKIHsKICAgICBpZiAoY29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEdsb2JhbENvZGUp
IHsKICAgICAgICAgLy8gR2xvYmFsIGNvZGUgcnVucyBvbmNlLCBzbyB3ZSBkb24ndCB3YW50IHRv
IGRvIGFueXRoaW5nLiBXZSBkb24ndCB3YW50IHRvIGRlZmVyIGluZGVmaW5pdGVseSwKQEAgLTMx
OTEsNyArMzE5MSw3IEBAIHN0YXRpYyB2b2lkIHRyaWdnZXJGVExSZXBsYWNlbWVudENvbXBpbGUK
ICAgICBXb3JrbGlzdDo6U3RhdGUgd29ya2xpc3RTdGF0ZTsKICAgICBpZiAoV29ya2xpc3QqIHdv
cmtsaXN0ID0gZXhpc3RpbmdHbG9iYWxGVExXb3JrbGlzdE9yTnVsbCgpKSB7CiAgICAgICAgIHdv
cmtsaXN0U3RhdGUgPSB3b3JrbGlzdC0+Y29tcGxldGVBbGxSZWFkeVBsYW5zRm9yVk0oCi0gICAg
ICAgICAgICAqdm0sIENvbXBpbGF0aW9uS2V5KGNvZGVCbG9jay0+YmFzZWxpbmVWZXJzaW9uKCks
IEZUTE1vZGUpKTsKKyAgICAgICAgICAgIHZtLCBDb21waWxhdGlvbktleShjb2RlQmxvY2stPmJh
c2VsaW5lVmVyc2lvbigpLCBGVExNb2RlKSk7CiAgICAgfSBlbHNlCiAgICAgICAgIHdvcmtsaXN0
U3RhdGUgPSBXb3JrbGlzdDo6Tm90S25vd247CiAgICAgCkBAIC0zMjIyLDcgKzMyMjIsNyBAQCBz
dGF0aWMgdm9pZCB0cmlnZ2VyRlRMUmVwbGFjZW1lbnRDb21waWxlCiAgICAgQ09ERUJMT0NLX0xP
R19FVkVOVChjb2RlQmxvY2ssICJ0cmlnZ2VyRlRMUmVwbGFjZW1lbnQiLCAoKSk7CiAgICAgLy8g
V2UgbmVlZCB0byBjb21waWxlIHRoZSBjb2RlLgogICAgIGNvbXBpbGUoCi0gICAgICAgICp2bSwg
Y29kZUJsb2NrLT5uZXdSZXBsYWNlbWVudCgpLCBjb2RlQmxvY2ssIEZUTE1vZGUsIFVJTlRfTUFY
LAorICAgICAgICB2bSwgY29kZUJsb2NrLT5uZXdSZXBsYWNlbWVudCgpLCBjb2RlQmxvY2ssIEZU
TE1vZGUsIFVJTlRfTUFYLAogICAgICAgICBPcGVyYW5kczxPcHRpb25hbDxKU1ZhbHVlPj4oKSwg
VG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6OmNyZWF0ZSgpKTsKIAogICAgIC8vIElm
IHdlIHJlYWNoZWQgaGVyZSwgdGhlIGNvdW50ZXIgaGFzIG5vdCBiZSByZXNldC4gRG8gdGhhdCBu
b3cuCkBAIC0zMjMyLDkgKzMyMzIsOSBAQCBzdGF0aWMgdm9pZCB0cmlnZ2VyRlRMUmVwbGFjZW1l
bnRDb21waWxlCiAKIHZvaWQgSklUX09QRVJBVElPTiB0cmlnZ2VyVGllclVwTm93KEV4ZWNTdGF0
ZSogZXhlYykKIHsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBleGVj
LT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwotICAg
IERlZmVyR0NGb3JBV2hpbGUgZGVmZXJHQyh2bS0+aGVhcCk7CisgICAgRGVmZXJHQ0ZvckFXaGls
ZSBkZWZlckdDKHZtLmhlYXApOwogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29k
ZUJsb2NrKCk7CiAgICAgCiAgICAgc2FuaXRpemVTdGFja0ZvclZNKHZtKTsKQEAgLTMyNzcsMTQg
KzMyNzcsMTQgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIHRyaWdnZXJUaWVyVXBOb3coRXhlYwogCiBz
dGF0aWMgY2hhciogdGllclVwQ29tbW9uKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgb3JpZ2lu
Qnl0ZWNvZGVJbmRleCwgYm9vbCBjYW5PU1JFbnRlckhlcmUpCiB7Ci0gICAgVk0qIHZtID0gJmV4
ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBDb2RlQmxvY2sqIGNvZGVC
bG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOwogCiAgICAgLy8gUmVzb2x2ZSBhbnkgcGVuZGluZyBw
bGFuIGZvciBPU1IgRW50ZXIgb24gdGhpcyBmdW5jdGlvbi4KICAgICBXb3JrbGlzdDo6U3RhdGUg
d29ya2xpc3RTdGF0ZTsKICAgICBpZiAoV29ya2xpc3QqIHdvcmtsaXN0ID0gZXhpc3RpbmdHbG9i
YWxGVExXb3JrbGlzdE9yTnVsbCgpKSB7CiAgICAgICAgIHdvcmtsaXN0U3RhdGUgPSB3b3JrbGlz
dC0+Y29tcGxldGVBbGxSZWFkeVBsYW5zRm9yVk0oCi0gICAgICAgICAgICAqdm0sIENvbXBpbGF0
aW9uS2V5KGNvZGVCbG9jay0+YmFzZWxpbmVWZXJzaW9uKCksIEZUTEZvck9TUkVudHJ5TW9kZSkp
OworICAgICAgICAgICAgdm0sIENvbXBpbGF0aW9uS2V5KGNvZGVCbG9jay0+YmFzZWxpbmVWZXJz
aW9uKCksIEZUTEZvck9TUkVudHJ5TW9kZSkpOwogICAgIH0gZWxzZQogICAgICAgICB3b3JrbGlz
dFN0YXRlID0gV29ya2xpc3Q6Ok5vdEtub3duOwogCkBAIC0zNDY0LDcgKzM0NjQsNyBAQCBzdGF0
aWMgY2hhciogdGllclVwQ29tbW9uKEV4ZWNTdGF0ZSogZXhlCiAKICAgICBDT0RFQkxPQ0tfTE9H
X0VWRU5UKGNvZGVCbG9jaywgInRyaWdnZXJGVExPU1IiLCAoKSk7CiAgICAgQ29tcGlsYXRpb25S
ZXN1bHQgZm9yRW50cnlSZXN1bHQgPSBjb21waWxlKAotICAgICAgICAqdm0sIHJlcGxhY2VtZW50
Q29kZUJsb2NrLCBjb2RlQmxvY2ssIEZUTEZvck9TUkVudHJ5TW9kZSwgb3JpZ2luQnl0ZWNvZGVJ
bmRleCwKKyAgICAgICAgdm0sIHJlcGxhY2VtZW50Q29kZUJsb2NrLCBjb2RlQmxvY2ssIEZUTEZv
ck9TUkVudHJ5TW9kZSwgb3JpZ2luQnl0ZWNvZGVJbmRleCwKICAgICAgICAgbXVzdEhhbmRsZVZh
bHVlcywgVG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6Y3JlYXRl
KHRyaWdnZXJBZGRyZXNzKSk7CiAKICAgICBpZiAoaml0Q29kZS0+bmV2ZXJFeGVjdXRlZEVudHJ5
KQpAQCAtMzQ5Myw5ICszNDkzLDkgQEAgc3RhdGljIGNoYXIqIHRpZXJVcENvbW1vbihFeGVjU3Rh
dGUqIGV4ZQogCiB2b2lkIEpJVF9PUEVSQVRJT04gdHJpZ2dlclRpZXJVcE5vd0luTG9vcChFeGVj
U3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCiB7Ci0gICAgVk0qIHZtID0gJmV4
ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVU
cmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLSAgICBEZWZlckdDRm9yQVdoaWxlIGRlZmVyR0Modm0t
PmhlYXApOworICAgIERlZmVyR0NGb3JBV2hpbGUgZGVmZXJHQyh2bS5oZWFwKTsKICAgICBDb2Rl
QmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOwogCiAgICAgc2FuaXRpemVTdGFj
a0ZvclZNKHZtKTsKQEAgLTM1MjcsOSArMzUyNyw5IEBAIHZvaWQgSklUX09QRVJBVElPTiB0cmln
Z2VyVGllclVwTm93SW5Mb28KIAogY2hhciogSklUX09QRVJBVElPTiB0cmlnZ2VyT1NSRW50cnlO
b3coRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KQogewotICAgIFZNKiB2
bSA9ICZleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0gICAgRGVmZXJHQ0ZvckFXaGlsZSBkZWZl
ckdDKHZtLT5oZWFwKTsKKyAgICBEZWZlckdDRm9yQVdoaWxlIGRlZmVyR0Modm0uaGVhcCk7CiAg
ICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKIAogICAgIHNhbml0
aXplU3RhY2tGb3JWTSh2bSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Bs
YW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5j
cHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxh
bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMzcsNyArMTM3LDcgQEAgUGxhbjo6UGxhbihDb2Rl
QmxvY2sqIHBhc3NlZENvZGVCbG9jaywgQwogICAgIENvbXBpbGF0aW9uTW9kZSBtb2RlLCB1bnNp
Z25lZCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgsCiAgICAgY29uc3QgT3BlcmFuZHM8T3B0aW9uYWw8
SlNWYWx1ZT4+JiBtdXN0SGFuZGxlVmFsdWVzKQogICAgIDogbV9tb2RlKG1vZGUpCi0gICAgLCBt
X3ZtKHBhc3NlZENvZGVCbG9jay0+dm0oKSkKKyAgICAsIG1fdm0oJnBhc3NlZENvZGVCbG9jay0+
dm0oKSkKICAgICAsIG1fY29kZUJsb2NrKHBhc3NlZENvZGVCbG9jaykKICAgICAsIG1fcHJvZmls
ZWRERkdDb2RlQmxvY2socHJvZmlsZWRERkdDb2RlQmxvY2spCiAgICAgLCBtX211c3RIYW5kbGVW
YWx1ZXMobXVzdEhhbmRsZVZhbHVlcykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMjQ5MTI4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEt
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMTEgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CkBAIC01ODgsNyArNTg4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwo
Tm9kZSogbm9kZQogICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25FeGVjdXRhYmxlID0g
bnVsbHB0cjsKICAgICBpZiAoaXNEaXJlY3QpIHsKICAgICAgICAgZXhlY3V0YWJsZSA9IG5vZGUt
PmNhc3RPcGVyYW5kPEV4ZWN1dGFibGVCYXNlKj4oKTsKLSAgICAgICAgZnVuY3Rpb25FeGVjdXRh
YmxlID0ganNEeW5hbWljQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPigqbV9qaXQudm0oKSwgZXhl
Y3V0YWJsZSk7CisgICAgICAgIGZ1bmN0aW9uRXhlY3V0YWJsZSA9IGpzRHluYW1pY0Nhc3Q8RnVu
Y3Rpb25FeGVjdXRhYmxlKj4odm0oKSwgZXhlY3V0YWJsZSk7CiAgICAgfQogICAgIAogICAgIHVu
c2lnbmVkIG51bVBhc3NlZEFyZ3MgPSAwOwpAQCAtNjIyLDcgKzYyMiw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUKICAgICAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgICAgICBpbmxpbmVDYWxsRnJhbWUgPSBub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2Fs
bEZyYW1lKCk7CiAgICAgICAgICAgICAvLyBlbWl0U2V0dXBWYXJhcmdzRnJhbWVGYXN0Q2FzZSBt
b2RpZmllcyB0aGUgc3RhY2sgcG9pbnRlciBpZiBpdCBzdWNjZWVkcy4KLSAgICAgICAgICAgIGVt
aXRTZXR1cFZhcmFyZ3NGcmFtZUZhc3RDYXNlKCptX2ppdC52bSgpLCBtX2ppdCwgc2NyYXRjaEdQ
UjIsIHNjcmF0Y2hHUFIxLCBzY3JhdGNoR1BSMiwgc2NyYXRjaEdQUjMsIGlubGluZUNhbGxGcmFt
ZSwgZGF0YS0+Zmlyc3RWYXJBcmdPZmZzZXQsIHNsb3dDYXNlKTsKKyAgICAgICAgICAgIGVtaXRT
ZXR1cFZhcmFyZ3NGcmFtZUZhc3RDYXNlKHZtKCksIG1faml0LCBzY3JhdGNoR1BSMiwgc2NyYXRj
aEdQUjEsIHNjcmF0Y2hHUFIyLCBzY3JhdGNoR1BSMywgaW5saW5lQ2FsbEZyYW1lLCBkYXRhLT5m
aXJzdFZhckFyZ09mZnNldCwgc2xvd0Nhc2UpOwogICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1
bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKICAgICAgICAgICAgIHNsb3dDYXNlLmxpbmsoJm1faml0
KTsKICAgICAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVGhyb3dTdGFja092ZXJmbG93
Rm9yVmFyYXJncyk7CkBAIC04MTcsNyArODE3LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1p
dENhbGwoTm9kZSogbm9kZQogICAgICAgICBtX2ppdC5hZGRQdHIoVHJ1c3RlZEltbTMyKHJlcXVp
cmVkQnl0ZXMpLCBKSVRDb21waWxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgICAgICBt
X2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OmNhbGxlZUZyYW1lU2xvdChDYWxsRnJhbWVTbG90Ojpj
YWxsZWUpLndpdGhPZmZzZXQoUGF5bG9hZE9mZnNldCksIEdQUkluZm86OnJlZ1QwKTsKICAgICAg
ICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpjYWxsZWVGcmFtZVNsb3QoQ2FsbEZyYW1lU2xv
dDo6Y2FsbGVlKS53aXRoT2Zmc2V0KFRhZ09mZnNldCksIEdQUkluZm86OnJlZ1QxKTsKLSAgICAg
ICAgbV9qaXQuZW1pdER1bWJWaXJ0dWFsQ2FsbCgqbV9qaXQudm0oKSwgaW5mbyk7CisgICAgICAg
IG1faml0LmVtaXREdW1iVmlydHVhbENhbGwodm0oKSwgaW5mbyk7CiAgICAgICAgIAogICAgICAg
ICBkb25lLmxpbmsoJm1faml0KTsKICAgICAgICAgc2V0UmVzdWx0QW5kUmVzZXRTdGFjaygpOwpA
QCAtMTU3MCw3ICsxNTcwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUxvZ2ljYWxO
b3QoTgogICAgICAgICBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9ICFt
YXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludElzU3RpbGxWYWxpZCgpOwogICAgICAgICBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RG
b3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKICAgICAgICAgYm9vbCBuZWdhdGVSZXN1bHQgPSB0
cnVlOwotICAgICAgICBtX2ppdC5lbWl0Q29udmVydFZhbHVlVG9Cb29sZWFuKCptX2ppdC52bSgp
LCBhcmcxLmpzVmFsdWVSZWdzKCksIHJlc3VsdEdQUiwgdGVtcC5ncHIoKSwgdmFsdWVGUFIuZnBy
KCksIHRlbXBGUFIuZnByKCksIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgZ2xv
YmFsT2JqZWN0LCBuZWdhdGVSZXN1bHQpOworICAgICAgICBtX2ppdC5lbWl0Q29udmVydFZhbHVl
VG9Cb29sZWFuKHZtKCksIGFyZzEuanNWYWx1ZVJlZ3MoKSwgcmVzdWx0R1BSLCB0ZW1wLmdwcigp
LCB2YWx1ZUZQUi5mcHIoKSwgdGVtcEZQUi5mcHIoKSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkLCBnbG9iYWxPYmplY3QsIG5lZ2F0ZVJlc3VsdCk7CiAgICAgICAgIGJvb2xlYW5S
ZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTE3MTUs
NyArMTcxNSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRCcmFuY2goTm9kZSogbm8KIAog
ICAgICAgICBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9ICFtYXNxdWVy
YWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludElzU3RpbGxWYWxpZCgpOwogICAgICAgICBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3Iobm9k
ZS0+b3JpZ2luLnNlbWFudGljKTsKLSAgICAgICAgYXV0byBmYWxzZXkgPSBtX2ppdC5icmFuY2hJ
ZkZhbHNleSgqbV9qaXQudm0oKSwgdmFsdWVSZWdzLCByZXN1bHRHUFIsIHRlbXAuZ3ByKCksIHZh
bHVlRlBSLmZwcigpLCB0ZW1wRlBSLmZwcigpLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQsIGdsb2JhbE9iamVjdCk7CisgICAgICAgIGF1dG8gZmFsc2V5ID0gbV9qaXQuYnJhbmNo
SWZGYWxzZXkodm0oKSwgdmFsdWVSZWdzLCByZXN1bHRHUFIsIHRlbXAuZ3ByKCksIHZhbHVlRlBS
LmZwcigpLCB0ZW1wRlBSLmZwcigpLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQs
IGdsb2JhbE9iamVjdCk7CiAgICAgICAgIGFkZEJyYW5jaChmYWxzZXksIG5vdFRha2VuKTsKICAg
ICAgICAganVtcCh0YWtlbiwgRm9yY2VKdW1wKTsKIApAQCAtMzkzOSw4ICszOTM5LDggQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBtX2ppdC5hZGQz
MihzdHJ1Y3R1cmVJREdQUiwgaGFzaEdQUik7CiAgICAgICAgIG1faml0LmFuZDMyKFRydXN0ZWRJ
bW0zMihIYXNPd25Qcm9wZXJ0eUNhY2hlOjptYXNrKSwgaGFzaEdQUik7CiAgICAgICAgIG1faml0
Lm11bDMyKFRydXN0ZWRJbW0zMihzaXplb2YoSGFzT3duUHJvcGVydHlDYWNoZTo6RW50cnkpKSwg
aGFzaEdQUiwgaGFzaEdQUik7Ci0gICAgICAgIEFTU0VSVChtX2ppdC52bSgpLT5oYXNPd25Qcm9w
ZXJ0eUNhY2hlKCkpOwotICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIobV9qaXQudm0o
KS0+aGFzT3duUHJvcGVydHlDYWNoZSgpKSwgdGVtcEdQUik7CisgICAgICAgIEFTU0VSVCh2bSgp
Lmhhc093blByb3BlcnR5Q2FjaGUoKSk7CisgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0
cih2bSgpLmhhc093blByb3BlcnR5Q2FjaGUoKSksIHRlbXBHUFIpOwogICAgICAgICBzbG93UGF0
aC5hcHBlbmQobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgCiAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHRlbXBHUFIsIGhhc2hHUFIsIE1hY3Jv
QXNzZW1ibGVyOjpUaW1lc09uZSwgSGFzT3duUHJvcGVydHlDYWNoZTo6RW50cnk6Om9mZnNldE9m
SW1wbCgpKSwgaW1wbEdQUikpOwogICAgICAgICBtX2ppdC5sb2FkOChNYWNyb0Fzc2VtYmxlcjo6
QmFzZUluZGV4KHRlbXBHUFIsIGhhc2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc09uZSwgSGFz
T3duUHJvcGVydHlDYWNoZTo6RW50cnk6Om9mZnNldE9mUmVzdWx0KCkpLCByZXN1bHRHUFIpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
NjQuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDcsNyArMjQ3LDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVOb25QZQogICAgICAgICBHUFJSZWcg
bG9jYWxHbG9iYWxPYmplY3RHUFIgPSBsb2NhbEdsb2JhbE9iamVjdC5ncHIoKTsKICAgICAgICAg
R1BSUmVnIHJlbW90ZUdsb2JhbE9iamVjdEdQUiA9IHJlbW90ZUdsb2JhbE9iamVjdC5ncHIoKTsK
ICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2ppdC5ncmFw
aCgpLCBtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihtX2N1cnJlbnROb2RlLT5vcmlnaW4u
c2VtYW50aWMpKSwgbG9jYWxHbG9iYWxPYmplY3RHUFIpOwotICAgICAgICBtX2ppdC5lbWl0TG9h
ZFN0cnVjdHVyZSgqbV9qaXQudm0oKSwgYXJnR1BSLCByZXN1bHRHUFIsIHNjcmF0Y2guZ3ByKCkp
OworICAgICAgICBtX2ppdC5lbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCBhcmdHUFIsIHJlc3VsdEdQ
Uiwgc2NyYXRjaC5ncHIoKSk7CiAgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFk
ZHJlc3MocmVzdWx0R1BSLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVtb3Rl
R2xvYmFsT2JqZWN0R1BSKTsKICAgICAgICAgbV9qaXQuY29tcGFyZVB0cihKSVRDb21waWxlcjo6
RXF1YWwsIGxvY2FsR2xvYmFsT2JqZWN0R1BSLCByZW1vdGVHbG9iYWxPYmplY3RHUFIsIHJlc3Vs
dEdQUik7CiAgICAgICAgIGRvbmUuYXBwZW5kKG1faml0Lmp1bXAoKSk7CkBAIC0zMDAsNyArMzAw
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaAogICAgICAgICBH
UFJSZWcgbG9jYWxHbG9iYWxPYmplY3RHUFIgPSBsb2NhbEdsb2JhbE9iamVjdC5ncHIoKTsKICAg
ICAgICAgR1BSUmVnIHJlbW90ZUdsb2JhbE9iamVjdEdQUiA9IHJlbW90ZUdsb2JhbE9iamVjdC5n
cHIoKTsKICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2pp
dC5ncmFwaCgpLCBtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihtX2N1cnJlbnROb2RlLT5v
cmlnaW4uc2VtYW50aWMpKSwgbG9jYWxHbG9iYWxPYmplY3RHUFIpOwotICAgICAgICBtX2ppdC5l
bWl0TG9hZFN0cnVjdHVyZSgqbV9qaXQudm0oKSwgYXJnR1BSLCByZXN1bHRHUFIsIHNjcmF0Y2gu
Z3ByKCkpOworICAgICAgICBtX2ppdC5lbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCBhcmdHUFIsIHJl
c3VsdEdQUiwgc2NyYXRjaC5ncHIoKSk7CiAgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGls
ZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwg
cmVtb3RlR2xvYmFsT2JqZWN0R1BSKTsKICAgICAgICAgYnJhbmNoUHRyKEpJVENvbXBpbGVyOjpF
cXVhbCwgbG9jYWxHbG9iYWxPYmplY3RHUFIsIHJlbW90ZUdsb2JhbE9iamVjdEdQUiwgdGFrZW4p
OwogCkBAIC01NDcsNyArNTQ3LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9k
ZSogbm9kZQogICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25FeGVjdXRhYmxlID0gbnVs
bHB0cjsKICAgICBpZiAoaXNEaXJlY3QpIHsKICAgICAgICAgZXhlY3V0YWJsZSA9IG5vZGUtPmNh
c3RPcGVyYW5kPEV4ZWN1dGFibGVCYXNlKj4oKTsKLSAgICAgICAgZnVuY3Rpb25FeGVjdXRhYmxl
ID0ganNEeW5hbWljQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPigqbV9qaXQudm0oKSwgZXhlY3V0
YWJsZSk7CisgICAgICAgIGZ1bmN0aW9uRXhlY3V0YWJsZSA9IGpzRHluYW1pY0Nhc3Q8RnVuY3Rp
b25FeGVjdXRhYmxlKj4odm0oKSwgZXhlY3V0YWJsZSk7CiAgICAgfQogICAgIAogICAgIHVuc2ln
bmVkIG51bVBhc3NlZEFyZ3MgPSAwOwpAQCAtNTgxLDcgKzU4MSw3IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAg
ICAgICBpbmxpbmVDYWxsRnJhbWUgPSBub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZy
YW1lKCk7CiAgICAgICAgICAgICAvLyBlbWl0U2V0dXBWYXJhcmdzRnJhbWVGYXN0Q2FzZSBtb2Rp
ZmllcyB0aGUgc3RhY2sgcG9pbnRlciBpZiBpdCBzdWNjZWVkcy4KLSAgICAgICAgICAgIGVtaXRT
ZXR1cFZhcmFyZ3NGcmFtZUZhc3RDYXNlKCptX2ppdC52bSgpLCBtX2ppdCwgc2NyYXRjaEdQUjIs
IHNjcmF0Y2hHUFIxLCBzY3JhdGNoR1BSMiwgc2NyYXRjaEdQUjMsIGlubGluZUNhbGxGcmFtZSwg
ZGF0YS0+Zmlyc3RWYXJBcmdPZmZzZXQsIHNsb3dDYXNlKTsKKyAgICAgICAgICAgIGVtaXRTZXR1
cFZhcmFyZ3NGcmFtZUZhc3RDYXNlKHZtKCksIG1faml0LCBzY3JhdGNoR1BSMiwgc2NyYXRjaEdQ
UjEsIHNjcmF0Y2hHUFIyLCBzY3JhdGNoR1BSMywgaW5saW5lQ2FsbEZyYW1lLCBkYXRhLT5maXJz
dFZhckFyZ09mZnNldCwgc2xvd0Nhc2UpOwogICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAg
ZG9uZSA9IG1faml0Lmp1bXAoKTsKICAgICAgICAgICAgIHNsb3dDYXNlLmxpbmsoJm1faml0KTsK
ICAgICAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVGhyb3dTdGFja092ZXJmbG93Rm9y
VmFyYXJncyk7CkBAIC03NjcsNyArNzY3LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENh
bGwoTm9kZSogbm9kZQogICAgICAgICAvLyBUaGlzIGlzIHRoZSBwYXJ0IHdoZXJlIHdlIG1lYW50
IHRvIG1ha2UgYSBub3JtYWwgY2FsbC4gT29wcy4KICAgICAgICAgbV9qaXQuYWRkUHRyKFRydXN0
ZWRJbW0zMihyZXF1aXJlZEJ5dGVzKSwgSklUQ29tcGlsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVy
KTsKICAgICAgICAgbV9qaXQubG9hZDY0KEpJVENvbXBpbGVyOjpjYWxsZWVGcmFtZVNsb3QoQ2Fs
bEZyYW1lU2xvdDo6Y2FsbGVlKSwgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICBtX2ppdC5lbWl0
RHVtYlZpcnR1YWxDYWxsKCptX2ppdC52bSgpLCBjYWxsTGlua0luZm8pOworICAgICAgICBtX2pp
dC5lbWl0RHVtYlZpcnR1YWxDYWxsKHZtKCksIGNhbGxMaW5rSW5mbyk7CiAgICAgICAgIAogICAg
ICAgICBkb25lLmxpbmsoJm1faml0KTsKICAgICAgICAgc2V0UmVzdWx0QW5kUmVzZXRTdGFjaygp
OwpAQCAtMTYwMyw3ICsxNjAzLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVj
dE9yT3RoZQogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHZhbHVlR1BS
LCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIAogICAgICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOwogCi0gICAg
ICAgIG1faml0LmVtaXRMb2FkU3RydWN0dXJlKCptX2ppdC52bSgpLCB2YWx1ZUdQUiwgc3RydWN0
dXJlR1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgbV9qaXQuZW1pdExvYWRTdHJ1Y3R1cmUodm0o
KSwgdmFsdWVHUFIsIHN0cnVjdHVyZUdQUiwgc2NyYXRjaEdQUik7CiAgICAgICAgIHNwZWN1bGF0
aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBub2RlVXNlLCAKICAgICAg
ICAgICAgIG1faml0LmJyYW5jaFB0cigKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
RXF1YWwsIApAQCAtMTcwOSw3ICsxNzA5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZUxvZ2ljYWxOb3QoTgogICAgICAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2gtPmdwcigpOwog
ICAgICAgICB9CiAgICAgICAgIGJvb2wgbmVnYXRlUmVzdWx0ID0gdHJ1ZTsKLSAgICAgICAgbV9q
aXQuZW1pdENvbnZlcnRWYWx1ZVRvQm9vbGVhbigqbV9qaXQudm0oKSwgSlNWYWx1ZVJlZ3MoYXJn
MUdQUiksIHJlc3VsdEdQUiwgc2NyYXRjaEdQUiwgdmFsdWVGUFIuZnByKCksIHRlbXBGUFIuZnBy
KCksIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgZ2xvYmFsT2JqZWN0LCBuZWdh
dGVSZXN1bHQpOworICAgICAgICBtX2ppdC5lbWl0Q29udmVydFZhbHVlVG9Cb29sZWFuKHZtKCks
IEpTVmFsdWVSZWdzKGFyZzFHUFIpLCByZXN1bHRHUFIsIHNjcmF0Y2hHUFIsIHZhbHVlRlBSLmZw
cigpLCB0ZW1wRlBSLmZwcigpLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIGds
b2JhbE9iamVjdCwgbmVnYXRlUmVzdWx0KTsKICAgICAgICAgbV9qaXQub3IzMihUcnVzdGVkSW1t
MzIoVmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CiAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0
R1BSLCBub2RlLCBEYXRhRm9ybWF0SlNCb29sZWFuKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMTc1
NCw3ICsxNzU0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdE9iamVjdE9yT3RoZXJCcgog
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModmFsdWVHUFIsIEpTQ2VsbDo6dHlw
ZUluZm9GbGFnc09mZnNldCgpKSwgCiAgICAgICAgICAgICBUcnVzdGVkSW1tMzIoTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCkpOwogCi0gICAgICAgIG1faml0LmVtaXRMb2FkU3RydWN0dXJlKCptX2pp
dC52bSgpLCB2YWx1ZUdQUiwgc3RydWN0dXJlR1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgbV9q
aXQuZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgdmFsdWVHUFIsIHN0cnVjdHVyZUdQUiwgc2NyYXRj
aEdQUik7CiAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3ModmFs
dWVHUFIpLCBub2RlVXNlLAogICAgICAgICAgICAgbV9qaXQuYnJhbmNoUHRyKAogICAgICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCkBAIC0xODgyLDcgKzE4ODIsNyBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjplbWl0QnJhbmNoKE5vZGUqIG5vCiAgICAgICAgICAgICB2YWx1ZS51
c2UoKTsKIAogICAgICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1faml0
LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7Ci0gICAgICAg
ICAgICBhdXRvIHRydXRoeSA9IG1faml0LmJyYW5jaElmVHJ1dGh5KCptX2ppdC52bSgpLCBKU1Zh
bHVlUmVncyh2YWx1ZUdQUiksIHJlc3VsdEdQUiwgc2NyYXRjaEdQUiwgdmFsdWVGUFIsIHRlbXBG
UFIsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgZ2xvYmFsT2JqZWN0KTsKKyAg
ICAgICAgICAgIGF1dG8gdHJ1dGh5ID0gbV9qaXQuYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1
ZVJlZ3ModmFsdWVHUFIpLCByZXN1bHRHUFIsIHNjcmF0Y2hHUFIsIHZhbHVlRlBSLCB0ZW1wRlBS
LCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIGdsb2JhbE9iamVjdCk7CiAgICAg
ICAgICAgICBhZGRCcmFuY2godHJ1dGh5LCB0YWtlbik7CiAgICAgICAgICAgICBqdW1wKG5vdFRh
a2VuKTsKICAgICAgICAgfQpAQCAtMTkwMiw3ICsxOTAyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlKiBub2RlKQogCiAgICAgaWYgKHZhbGlkYXRlREZHRG9lc0dDKSB7CiAg
ICAgICAgIGJvb2wgZXhwZWN0RG9lc0dDID0gZG9lc0dDKG1faml0LmdyYXBoKCksIG5vZGUpOwot
ICAgICAgICBtX2ppdC5zdG9yZTgoVHJ1c3RlZEltbTMyKGV4cGVjdERvZXNHQyksIG1faml0LnZt
KCktPmhlYXAuYWRkcmVzc09mRXhwZWN0RG9lc0dDKCkpOworICAgICAgICBtX2ppdC5zdG9yZTgo
VHJ1c3RlZEltbTMyKGV4cGVjdERvZXNHQyksIHZtKCkuaGVhcC5hZGRyZXNzT2ZFeHBlY3REb2Vz
R0MoKSk7CiAgICAgfQogCiAjaWYgRU5BQkxFKERGR19SRUdJU1RFUl9BTExPQ0FUSU9OX1ZBTElE
QVRJT04pCkBAIC0zOTEyLDcgKzM5MTIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
KE5vZGUqIG5vZGUpCiAgICAgICAgICAgICBHUFJSZWcgbG9jYWxHbG9iYWxPYmplY3RHUFIgPSBs
b2NhbEdsb2JhbE9iamVjdC5ncHIoKTsKICAgICAgICAgICAgIEdQUlJlZyByZW1vdGVHbG9iYWxP
YmplY3RHUFIgPSByZW1vdGVHbG9iYWxPYmplY3QuZ3ByKCk7CiAgICAgICAgICAgICBtX2ppdC5t
b3ZlKFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1faml0LmdyYXBoKCksIG1faml0Lmdsb2Jh
bE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgbG9jYWxHbG9iYWxPYmplY3RHUFIp
OwotICAgICAgICAgICAgbV9qaXQuZW1pdExvYWRTdHJ1Y3R1cmUoKm1faml0LnZtKCksIHZhbHVl
LmdwcigpLCByZXN1bHQuZ3ByKCksIHNjcmF0Y2guZ3ByKCkpOworICAgICAgICAgICAgbV9qaXQu
ZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgdmFsdWUuZ3ByKCksIHJlc3VsdC5ncHIoKSwgc2NyYXRj
aC5ncHIoKSk7CiAgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNz
KHJlc3VsdC5ncHIoKSwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlbW90ZUds
b2JhbE9iamVjdEdQUik7IAogICAgICAgICAgICAgbV9qaXQuY29tcGFyZVB0cihKSVRDb21waWxl
cjo6RXF1YWwsIGxvY2FsR2xvYmFsT2JqZWN0R1BSLCByZW1vdGVHbG9iYWxPYmplY3RHUFIsIHJl
c3VsdC5ncHIoKSk7CiAgICAgICAgIH0KQEAgLTQyMzQsOSArNDIzNCw5IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKIAogICAgICAgICBub3RQcmVzZW50SW5UYWJs
ZS5saW5rKCZtX2ppdCk7CiAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0g
TWFwT2JqZWN0VXNlKQotICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyOjp3ZWFr
UG9pbnRlcihtX2ppdC5ncmFwaCgpLCBtX2ppdC52bSgpLT5zZW50aW5lbE1hcEJ1Y2tldCgpKSwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cjo6d2Vha1Bv
aW50ZXIobV9qaXQuZ3JhcGgoKSwgdm0oKS5zZW50aW5lbE1hcEJ1Y2tldCgpKSwgcmVzdWx0R1BS
KTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyOjp3
ZWFrUG9pbnRlcihtX2ppdC5ncmFwaCgpLCBtX2ppdC52bSgpLT5zZW50aW5lbFNldEJ1Y2tldCgp
KSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cjo6d2Vh
a1BvaW50ZXIobV9qaXQuZ3JhcGgoKSwgdm0oKS5zZW50aW5lbFNldEJ1Y2tldCgpKSwgcmVzdWx0
R1BSKTsKICAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CiAgICAgICAgIGNlbGxSZXN1bHQocmVz
dWx0R1BSLCBub2RlKTsKICAgICAgICAgYnJlYWs7CkBAIC00NTA5LDggKzQ1MDksOCBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICBtX2ppdC5s
c2hpZnQzMihUcnVzdGVkSW1tMzIoZ2V0TFNCU2V0KHNpemVvZihIYXNPd25Qcm9wZXJ0eUNhY2hl
OjpFbnRyeSkpKSwgaGFzaEdQUik7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG1faml0Lm11
bDMyKFRydXN0ZWRJbW0zMihzaXplb2YoSGFzT3duUHJvcGVydHlDYWNoZTo6RW50cnkpKSwgaGFz
aEdQUiwgaGFzaEdQUik7Ci0gICAgICAgIEFTU0VSVChtX2ppdC52bSgpLT5oYXNPd25Qcm9wZXJ0
eUNhY2hlKCkpOwotICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIobV9qaXQudm0oKS0+
aGFzT3duUHJvcGVydHlDYWNoZSgpKSwgdGVtcEdQUik7CisgICAgICAgIEFTU0VSVCh2bSgpLmhh
c093blByb3BlcnR5Q2FjaGUoKSk7CisgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cih2
bSgpLmhhc093blByb3BlcnR5Q2FjaGUoKSksIHRlbXBHUFIpOwogICAgICAgICBzbG93UGF0aC5h
cHBlbmQobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgCiAgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHRlbXBHUFIsIGhhc2hHUFIsIE1hY3JvQXNz
ZW1ibGVyOjpUaW1lc09uZSwgSGFzT3duUHJvcGVydHlDYWNoZTo6RW50cnk6Om9mZnNldE9mSW1w
bCgpKSwgaW1wbEdQUikpOwogICAgICAgICBtX2ppdC5sb2FkOChNYWNyb0Fzc2VtYmxlcjo6QmFz
ZUluZGV4KHRlbXBHUFIsIGhhc2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc09uZSwgSGFzT3du
UHJvcGVydHlDYWNoZTo6RW50cnk6Om9mZnNldE9mUmVzdWx0KCkpLCByZXN1bHRHUFIpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJ
KHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTYsOCArMTE2LDkgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6ZW1pdEFsbG9jYXRlUmF3T2JqZQogCiAgICAgbV9qaXQubW92ZShUcnVzdGVk
SW1tUHRyKG51bGxwdHIpLCBzdG9yYWdlR1BSKTsKIAorICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7
CiAgICAgaWYgKHNpemUpIHsKLSAgICAgICAgaWYgKEFsbG9jYXRvciBhbGxvY2F0b3IgPSBtX2pp
dC52bSgpLT5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0b3JGb3JOb25WaXJ0
dWFsKHNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKSkgeworICAgICAg
ICBpZiAoQWxsb2NhdG9yIGFsbG9jYXRvciA9IHZtLmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNw
YWNlLmFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2Nh
dG9ySWZFeGlzdHMpKSB7CiAgICAgICAgICAgICBtX2ppdC5lbWl0QWxsb2NhdGUoc3RvcmFnZUdQ
UiwgSklUQWxsb2NhdG9yOjpjb25zdGFudChhbGxvY2F0b3IpLCBzY3JhdGNoR1BSLCBzY3JhdGNo
MkdQUiwgc2xvd0Nhc2VzKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgbV9qaXQuYWRkUHRy
KApAQCAtMTMxLDcgKzEzMiw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRBbGxvY2F0ZVJh
d09iamUKICAgICB9CiAKICAgICBzaXplX3QgYWxsb2NhdGlvblNpemUgPSBKU0ZpbmFsT2JqZWN0
OjphbGxvY2F0aW9uU2l6ZShpbmxpbmVDYXBhY2l0eSk7Ci0gICAgQWxsb2NhdG9yIGFsbG9jYXRv
ciA9IGFsbG9jYXRvckZvck5vblZpcnR1YWxDb25jdXJyZW50bHk8SlNGaW5hbE9iamVjdD4oKm1f
aml0LnZtKCksIGFsbG9jYXRpb25TaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4
aXN0cyk7CisgICAgQWxsb2NhdG9yIGFsbG9jYXRvciA9IGFsbG9jYXRvckZvck5vblZpcnR1YWxD
b25jdXJyZW50bHk8SlNGaW5hbE9iamVjdD4odm0sIGFsbG9jYXRpb25TaXplLCBBbGxvY2F0b3JG
b3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CiAgICAgaWYgKGFsbG9jYXRvcikgewogICAgICAg
ICBlbWl0QWxsb2NhdGVKU09iamVjdChyZXN1bHRHUFIsIEpJVEFsbG9jYXRvcjo6Y29uc3RhbnQo
YWxsb2NhdG9yKSwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBzdG9yYWdl
R1BSLCBzY3JhdGNoMkdQUiwgc2xvd0Nhc2VzKTsKICAgICAgICAgbV9qaXQuZW1pdEluaXRpYWxp
emVJbmxpbmVTdG9yYWdlKHJlc3VsdEdQUiwgc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsK
QEAgLTE3MSw3ICsxNzIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0QWxsb2NhdGVSYXdP
YmplCiAgICAgCiAgICAgbV9qaXQuZW1pdEluaXRpYWxpemVPdXRPZkxpbmVTdG9yYWdlKHN0b3Jh
Z2VHUFIsIHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CiAgICAgCi0gICAgbV9qaXQu
bXV0YXRvckZlbmNlKCptX2ppdC52bSgpKTsKKyAgICBtX2ppdC5tdXRhdG9yRmVuY2Uodm0pOwog
fQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0R2V0TGVuZ3RoKElubGluZUNhbGxGcmFtZSog
aW5saW5lQ2FsbEZyYW1lLCBHUFJSZWcgbGVuZ3RoR1BSLCBib29sIGluY2x1ZGVUaGlzKQpAQCAt
MTU3MSw4ICsxNTcyLDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVN0cmluZ1NsaWNl
KAogICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgZG9uZUNhc2VzOwogICAgIENDYWxsSGVscGVy
czo6SnVtcExpc3Qgc2xvd0Nhc2VzOwogCisgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICBh
dXRvIG5vbkVtcHR5Q2FzZSA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpCZWxvdywg
c3RhcnRJbmRleEdQUiwgdGVtcEdQUik7Ci0gICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyOjp3
ZWFrUG9pbnRlcihtX2ppdC5ncmFwaCgpLCBqc0VtcHR5U3RyaW5nKCZ2bSgpKSksIHRlbXBHUFIp
OworICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9qaXQuZ3JhcGgo
KSwganNFbXB0eVN0cmluZyh2bSkpLCB0ZW1wR1BSKTsKICAgICBkb25lQ2FzZXMuYXBwZW5kKG1f
aml0Lmp1bXAoKSk7CiAKICAgICBub25FbXB0eUNhc2UubGluaygmbV9qaXQpOwpAQCAtMTU5OSw3
ICsxNjAxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVN0cmluZ1NsaWNlKAogICAg
IGNvbnQ4Qml0LmxpbmsoJm1faml0KTsKIAogICAgIG1faml0LmxzaGlmdDMyKE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tMzIoc2l6ZW9mKHZvaWQqKSA9PSA0ID8gMiA6IDMpLCB0ZW1wR1BSKTsK
LSAgICBtX2ppdC5hZGRQdHIoVHJ1c3RlZEltbVB0cihtX2ppdC52bSgpLT5zbWFsbFN0cmluZ3Mu
c2luZ2xlQ2hhcmFjdGVyU3RyaW5ncygpKSwgdGVtcEdQUik7CisgICAgbV9qaXQuYWRkUHRyKFRy
dXN0ZWRJbW1QdHIodm0uc21hbGxTdHJpbmdzLnNpbmdsZUNoYXJhY3RlclN0cmluZ3MoKSksIHRl
bXBHUFIpOwogICAgIG1faml0LmxvYWRQdHIodGVtcEdQUiwgdGVtcEdQUik7CiAKICAgICBhZGRT
bG93UGF0aEdlbmVyYXRvcihzbG93UGF0aENhbGwoYmlnQ2hhcmFjdGVyLCB0aGlzLCBvcGVyYXRp
b25TaW5nbGVDaGFyYWN0ZXJTdHJpbmcsIHRlbXBHUFIsIHRlbXBHUFIpKTsKQEAgLTE4NjksNyAr
MTg3MSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDdXJyZW50QmxvY2sKICAgICAg
ICAgfQogCiAgICAgICAgIGlmIChPcHRpb25zOjp2YWxpZGF0ZURGR0V4Y2VwdGlvbkhhbmRsaW5n
KCkgJiYgKG1heUV4aXQobV9qaXQuZ3JhcGgoKSwgbV9jdXJyZW50Tm9kZSkgIT0gRG9lc05vdEV4
aXQgfHwgbV9jdXJyZW50Tm9kZS0+aXNUZXJtaW5hbCgpKSkKLSAgICAgICAgICAgIG1faml0Lmpp
dFJlbGVhc2VBc3NlcnROb0V4Y2VwdGlvbigqbV9qaXQudm0oKSk7CisgICAgICAgICAgICBtX2pp
dC5qaXRSZWxlYXNlQXNzZXJ0Tm9FeGNlcHRpb24obV9qaXQudm0oKSk7CiAKICAgICAgICAgbV9q
aXQucGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyKCkuYXBwZW5kSXRlbShtX2ppdC5sYWJlbElnbm9y
aW5nV2F0Y2hwb2ludHMoKSwgbV9vcmlnaW4uc2VtYW50aWMpOwogCkBAIC0yMDQ5LDcgKzIwNTEs
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ2hlY2tUcmFwcyhOCiAgICAgR1BSUmVn
IHVudXNlZEdQUiA9IHVudXNlZC5ncHIoKTsKIAogICAgIEpJVENvbXBpbGVyOjpKdW1wIG5lZWRU
cmFwSGFuZGxpbmcgPSBtX2ppdC5icmFuY2hUZXN0OChKSVRDb21waWxlcjo6Tm9uWmVybywKLSAg
ICAgICAgSklUQ29tcGlsZXI6OkFic29sdXRlQWRkcmVzcyhtX2ppdC52bSgpLT5uZWVkVHJhcEhh
bmRsaW5nQWRkcmVzcygpKSk7CisgICAgICAgIEpJVENvbXBpbGVyOjpBYnNvbHV0ZUFkZHJlc3Mo
bV9qaXQudm0oKS5uZWVkVHJhcEhhbmRsaW5nQWRkcmVzcygpKSk7CiAKICAgICBhZGRTbG93UGF0
aEdlbmVyYXRvcihzbG93UGF0aENhbGwobmVlZFRyYXBIYW5kbGluZywgdGhpcywgb3BlcmF0aW9u
SGFuZGxlVHJhcHMsIHVudXNlZEdQUikpOwogICAgIG5vUmVzdWx0KG5vZGUpOwpAQCAtMjIxNCw4
ICsyMjE2LDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25TdAogICAg
IC8vIDggYml0IHN0cmluZyB2YWx1ZXMgZG9uJ3QgbmVlZCB0aGUgaXNBU0NJSSBjaGVjay4KICAg
ICBjb250OEJpdC5saW5rKCZtX2ppdCk7CiAKKyAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAg
IG1faml0LmxzaGlmdDMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoc2l6ZW9mKHZvaWQq
KSA9PSA0ID8gMiA6IDMpLCBzY3JhdGNoUmVnKTsKLSAgICBtX2ppdC5hZGRQdHIoVHJ1c3RlZElt
bVB0cihtX2ppdC52bSgpLT5zbWFsbFN0cmluZ3Muc2luZ2xlQ2hhcmFjdGVyU3RyaW5ncygpKSwg
c2NyYXRjaFJlZyk7CisgICAgbV9qaXQuYWRkUHRyKFRydXN0ZWRJbW1QdHIodm0uc21hbGxTdHJp
bmdzLnNpbmdsZUNoYXJhY3RlclN0cmluZ3MoKSksIHNjcmF0Y2hSZWcpOwogICAgIG1faml0Lmxv
YWRQdHIoc2NyYXRjaFJlZywgc2NyYXRjaFJlZyk7CiAKICAgICBhZGRTbG93UGF0aEdlbmVyYXRv
cigKQEAgLTIyMzYsOCArMjIzOSw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRC
eVZhbE9uU3QKICAgICAgICAgICAgIC8vIG9uIGEgc3RyaW5nUHJvdG90eXBlQ2hhaW5Jc1NhbmUo
KSBndWFyYW50ZWVpbmcgdGhhdCB0aGUgcHJvdG90eXBlcyBoYXZlIG5vIG5lZ2F0aXZlCiAgICAg
ICAgICAgICAvLyBpbmRleGVkIHByb3BlcnRpZXMgZWl0aGVyLgogICAgICAgICAgICAgLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NDY2OAotICAgICAgICAgICAg
bV9qaXQuZ3JhcGgoKS5yZWdpc3RlckFuZFdhdGNoU3RydWN0dXJlVHJhbnNpdGlvbihnbG9iYWxP
YmplY3QtPnN0cmluZ1Byb3RvdHlwZSgpLT5zdHJ1Y3R1cmUoKm1faml0LnZtKCkpKTsKLSAgICAg
ICAgICAgIG1faml0LmdyYXBoKCkucmVnaXN0ZXJBbmRXYXRjaFN0cnVjdHVyZVRyYW5zaXRpb24o
Z2xvYmFsT2JqZWN0LT5vYmplY3RQcm90b3R5cGUoKS0+c3RydWN0dXJlKCptX2ppdC52bSgpKSk7
CisgICAgICAgICAgICBtX2ppdC5ncmFwaCgpLnJlZ2lzdGVyQW5kV2F0Y2hTdHJ1Y3R1cmVUcmFu
c2l0aW9uKGdsb2JhbE9iamVjdC0+c3RyaW5nUHJvdG90eXBlKCktPnN0cnVjdHVyZSh2bSkpOwor
ICAgICAgICAgICAgbV9qaXQuZ3JhcGgoKS5yZWdpc3RlckFuZFdhdGNoU3RydWN0dXJlVHJhbnNp
dGlvbihnbG9iYWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgpLT5zdHJ1Y3R1cmUodm0pKTsKICAg
ICAgICAgICAgIHByb3RvdHlwZUNoYWluSXNTYW5lID0gZ2xvYmFsT2JqZWN0LT5zdHJpbmdQcm90
b3R5cGVDaGFpbklzU2FuZSgpOwogICAgICAgICB9CiAgICAgICAgIGlmIChwcm90b3R5cGVDaGFp
bklzU2FuZSkgewpAQCAtMjI5OCw3ICsyMzAxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUZyb21DaGFyQ29kZQogCiAgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsK
ICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92
ZSwgcHJvcGVydHlSZWcsIFRydXN0ZWRJbW0zMihtYXhTaW5nbGVDaGFyYWN0ZXJTdHJpbmcpKSk7
Ci0gICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKG1faml0LnZtKCktPnNtYWxsU3RyaW5ncy5z
aW5nbGVDaGFyYWN0ZXJTdHJpbmdzKCkpLCBzbWFsbFN0cmluZ3NSZWcpOworICAgIG1faml0Lm1v
dmUoVHJ1c3RlZEltbVB0cih2bSgpLnNtYWxsU3RyaW5ncy5zaW5nbGVDaGFyYWN0ZXJTdHJpbmdz
KCkpLCBzbWFsbFN0cmluZ3NSZWcpOwogICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6
OkJhc2VJbmRleChzbWFsbFN0cmluZ3NSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6
U2NhbGVQdHIsIDApLCBzY3JhdGNoUmVnKTsKIAogICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQu
YnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBzY3JhdGNoUmVnKSk7CkBAIC02NzA1
LDcgKzY3MDgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlU3RyaW5nWmVyb0xlCiAg
ICAgR1BSVGVtcG9yYXJ5IGVxKHRoaXMpOwogICAgIEdQUlJlZyBlcUdQUiA9IGVxLmdwcigpOwog
Ci0gICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2ppdC5ncmFwaCgp
LCBqc0VtcHR5U3RyaW5nKG1faml0LnZtKCkpKSwgZXFHUFIpOworICAgIG1faml0Lm1vdmUoVHJ1
c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9qaXQuZ3JhcGgoKSwganNFbXB0eVN0cmluZyh2bSgp
KSksIGVxR1BSKTsKICAgICBtX2ppdC5jb21wYXJlUHRyKENDYWxsSGVscGVyczo6RXF1YWwsIHN0
ckdQUiwgZXFHUFIsIGVxR1BSKTsKICAgICB1bmJsZXNzZWRCb29sZWFuUmVzdWx0KGVxR1BSLCBu
b2RlKTsKIH0KQEAgLTY3MjIsNyArNjcyNSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVMb2dpY2FsTm90U3QKICAgICBERkdfVFlQRV9DSEVDSygKICAgICAgICAgdmFsdWVSZWdzLCBu
b2RlLT5jaGlsZDEoKSwgKH5TcGVjQ2VsbENoZWNrKSB8IFNwZWNTdHJpbmcsIG1faml0LmJyYW5j
aElmTm90U3RyaW5nKGNlbGxHUFIpKTsKIAotICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cjo6
d2Vha1BvaW50ZXIobV9qaXQuZ3JhcGgoKSwganNFbXB0eVN0cmluZyhtX2ppdC52bSgpKSksIHRl
bXBHUFIpOworICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9qaXQu
Z3JhcGgoKSwganNFbXB0eVN0cmluZyh2bSgpKSksIHRlbXBHUFIpOwogICAgIG1faml0LmNvbXBh
cmVQdHIoQ0NhbGxIZWxwZXJzOjpFcXVhbCwgY2VsbEdQUiwgdGVtcEdQUiwgdGVtcEdQUik7CiAg
ICAgYXV0byBkb25lID0gbV9qaXQuanVtcCgpOwogCkBAIC02NzQ0LDcgKzY3NDcsNyBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjplbWl0U3RyaW5nQnJhbmNoKEVkCiAKICAgICBzcGVjdWxhdGVTdHJp
bmcobm9kZVVzZSwgc3RyR1BSKTsKIAotICAgIGJyYW5jaFB0cihDQ2FsbEhlbHBlcnM6OkVxdWFs
LCBzdHJHUFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1faml0LmdyYXBoKCksIGpzRW1w
dHlTdHJpbmcobV9qaXQudm0oKSkpLCBub3RUYWtlbik7CisgICAgYnJhbmNoUHRyKENDYWxsSGVs
cGVyczo6RXF1YWwsIHN0ckdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9qaXQuZ3Jh
cGgoKSwganNFbXB0eVN0cmluZyh2bSgpKSksIG5vdFRha2VuKTsKICAgICBqdW1wKHRha2VuKTsK
IAogICAgIG5vUmVzdWx0KG1fY3VycmVudE5vZGUpOwpAQCAtNjc2MSw3ICs2NzY0LDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdFN0cmluZ09yT3RoZXJCcgogICAgIEdQUlJlZyBjZWxsR1BS
ID0gdmFsdWVSZWdzLnBheWxvYWRHUFIoKTsKICAgICBERkdfVFlQRV9DSEVDSyh2YWx1ZVJlZ3Ms
IG5vZGVVc2UsICh+U3BlY0NlbGxDaGVjaykgfCBTcGVjU3RyaW5nLCBtX2ppdC5icmFuY2hJZk5v
dFN0cmluZyhjZWxsR1BSKSk7CiAKLSAgICBicmFuY2hQdHIoQ0NhbGxIZWxwZXJzOjpFcXVhbCwg
Y2VsbEdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9qaXQuZ3JhcGgoKSwganNFbXB0
eVN0cmluZyhtX2ppdC52bSgpKSksIG5vdFRha2VuKTsKKyAgICBicmFuY2hQdHIoQ0NhbGxIZWxw
ZXJzOjpFcXVhbCwgY2VsbEdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9qaXQuZ3Jh
cGgoKSwganNFbXB0eVN0cmluZyh2bSgpKSksIG5vdFRha2VuKTsKICAgICBqdW1wKHRha2VuLCBG
b3JjZUp1bXApOwogCiAgICAgbm90Q2VsbC5saW5rKCZtX2ppdCk7CkBAIC02Nzk0LDggKzY3OTcs
OSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjYWdlVHlwZWRBcnJheVN0b3JhCiAgICAgICAgIHJl
dHVybjsKICAgICAKICAgICBpZiAoR2lnYWNhZ2U6OmNhblByaW1pdGl2ZUdpZ2FjYWdlQmVEaXNh
YmxlZCgpKSB7Ci0gICAgICAgIGlmIChtX2ppdC52bSgpLT5wcmltaXRpdmVHaWdhY2FnZUVuYWJs
ZWQoKS5pc1N0aWxsVmFsaWQoKSkKLSAgICAgICAgICAgIG1faml0LmdyYXBoKCkud2F0Y2hwb2lu
dHMoKS5hZGRMYXppbHkobV9qaXQudm0oKS0+cHJpbWl0aXZlR2lnYWNhZ2VFbmFibGVkKCkpOwor
ICAgICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOworICAgICAgICBpZiAodm0ucHJpbWl0aXZlR2ln
YWNhZ2VFbmFibGVkKCkuaXNTdGlsbFZhbGlkKCkpCisgICAgICAgICAgICBtX2ppdC5ncmFwaCgp
LndhdGNocG9pbnRzKCkuYWRkTGF6aWx5KHZtLnByaW1pdGl2ZUdpZ2FjYWdlRW5hYmxlZCgpKTsK
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTcwMzIsNyArNzAz
Niw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRHbG9iYWxPYmoKICAgICBTcGVj
dWxhdGVDZWxsT3BlcmFuZCBvYmplY3QodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgIEdQUlRl
bXBvcmFyeSByZXN1bHQodGhpcyk7CiAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7Ci0g
ICAgbV9qaXQuZW1pdExvYWRTdHJ1Y3R1cmUoKm1faml0LnZtKCksIG9iamVjdC5ncHIoKSwgcmVz
dWx0LmdwcigpLCBzY3JhdGNoLmdwcigpKTsKKyAgICBtX2ppdC5lbWl0TG9hZFN0cnVjdHVyZSh2
bSgpLCBvYmplY3QuZ3ByKCksIHJlc3VsdC5ncHIoKSwgc2NyYXRjaC5ncHIoKSk7CiAgICAgbV9q
aXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhyZXN1bHQuZ3ByKCksIFN0cnVjdHVyZTo6
Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZXN1bHQuZ3ByKCkpOwogICAgIGNlbGxSZXN1bHQocmVz
dWx0LmdwcigpLCBub2RlKTsKIH0KQEAgLTcyMDQsNyArNzIwOCw3IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVOZXdGdW5jdGlvbkMKICAgICBtX2ppdC5zdG9yZVB0cihUcnVzdGVkSW1t
UHRyKG51bGxwdHIpLCBKSVRDb21waWxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIEpTRnVuY3Rpb246
Om9mZnNldE9mUmFyZURhdGEoKSkpOwogICAgIAogICAgIGlmIChleGVjdXRhYmxlLT5pc0Fub255
bW91c0J1aWx0aW5GdW5jdGlvbigpKSB7Ci0gICAgICAgIFZNJiB2bSA9ICptX2ppdC52bSgpOwor
ICAgICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgICAgICBtX2ppdC5tdXRhdG9yRmVuY2Uo
dm0pOwogICAgICAgICBHUFJUZW1wb3JhcnkgYWxsb2NhdG9yKHRoaXMpOwogICAgICAgICBBbGxv
Y2F0b3IgYWxsb2NhdG9yVmFsdWUgPSBhbGxvY2F0b3JGb3JOb25WaXJ0dWFsQ29uY3VycmVudGx5
PEZ1bmN0aW9uUmFyZURhdGE+KHZtLCBzaXplb2YoRnVuY3Rpb25SYXJlRGF0YSksIEFsbG9jYXRv
ckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKQEAgLTcyMjMsNyArNzIyNyw3IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVOZXdGdW5jdGlvbkMKICAgICAgICAgbV9qaXQubXV0YXRv
ckZlbmNlKHZtKTsKICAgICAgICAgbV9qaXQuc3RvcmVQdHIoc2NyYXRjaDFHUFIsIEpJVENvbXBp
bGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZSYXJlRGF0YSgpKSk7
CiAgICAgfSBlbHNlCi0gICAgICAgIG1faml0Lm11dGF0b3JGZW5jZSgqbV9qaXQudm0oKSk7Cisg
ICAgICAgIG1faml0Lm11dGF0b3JGZW5jZSh2bSgpKTsKIAogfQogCkBAIC03NTEyLDcgKzc1MTYs
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ3JlYXRlQWN0aXZhCiAgICAgICAgICAg
ICAgICAgcmVzdWx0R1BSLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZShT
Y29wZU9mZnNldChpKSkpKTsKICAgICB9CiAgICAgCi0gICAgbV9qaXQubXV0YXRvckZlbmNlKCpt
X2ppdC52bSgpKTsKKyAgICBtX2ppdC5tdXRhdG9yRmVuY2Uodm0oKSk7CiAKICNpZiBVU0UoSlNW
QUxVRTY0KQogICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKApAQCAtNzY3Nyw3ICs3NjgxLDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNyZWF0ZURpcmVjdAogICAgICAgICAgICAgZG9u
ZS5saW5rKCZtX2ppdCk7CiAgICAgfQogICAgICAgICAKLSAgICBtX2ppdC5tdXRhdG9yRmVuY2Uo
Km1faml0LnZtKCkpOworICAgIG1faml0Lm11dGF0b3JGZW5jZSh2bSgpKTsKICAgICAgICAgCiAg
ICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOwogfQpAQCAtNzg5Nyw3ICs3OTAxLDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVNwcmVhZChOb2RlKgogICAgICAgICBtX2ppdC5s
c2hpZnQzMihUcnVzdGVkSW1tMzIoMyksIHNjcmF0Y2gxR1BSKTsKICAgICAgICAgbV9qaXQuYWRk
MzIoVHJ1c3RlZEltbTMyKEpTRml4ZWRBcnJheTo6b2Zmc2V0T2ZEYXRhKCkpLCBzY3JhdGNoMUdQ
Uik7CiAKLSAgICAgICAgbV9qaXQuZW1pdEFsbG9jYXRlVmFyaWFibGVTaXplZENlbGw8SlNGaXhl
ZEFycmF5PigqbV9qaXQudm0oKSwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyKG1faml0LmdyYXBo
KCkucmVnaXN0ZXJTdHJ1Y3R1cmUobV9qaXQuZ3JhcGgoKS5tX3ZtLmZpeGVkQXJyYXlTdHJ1Y3R1
cmUuZ2V0KCkpKSwgc2NyYXRjaDFHUFIsIHNjcmF0Y2gxR1BSLCBzY3JhdGNoMkdQUiwgc2xvd1Bh
dGgpOworICAgICAgICBtX2ppdC5lbWl0QWxsb2NhdGVWYXJpYWJsZVNpemVkQ2VsbDxKU0ZpeGVk
QXJyYXk+KHZtKCksIHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cihtX2ppdC5ncmFwaCgpLnJlZ2lz
dGVyU3RydWN0dXJlKG1faml0LmdyYXBoKCkubV92bS5maXhlZEFycmF5U3RydWN0dXJlLmdldCgp
KSksIHNjcmF0Y2gxR1BSLCBzY3JhdGNoMUdQUiwgc2NyYXRjaDJHUFIsIHNsb3dQYXRoKTsKICAg
ICAgICAgbV9qaXQuc3RvcmUzMihsZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJl
c3VsdEdQUiwgSlNGaXhlZEFycmF5OjpvZmZzZXRPZlNpemUoKSkpOwogCiAgICAgICAgIG1faml0
LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYXJndW1lbnQsIEpTT2JqZWN0OjpidXR0
ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2gxR1BSKTsKQEAgLTc5MzgsNyArNzk0Miw3IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTcHJlYWQoTm9kZSoKICAgICAgICAgICAgIGRvbmUuYXBw
ZW5kKG1faml0Lmp1bXAoKSk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIG1faml0Lm11
dGF0b3JGZW5jZSgqbV9qaXQudm0oKSk7CisgICAgICAgIG1faml0Lm11dGF0b3JGZW5jZSh2bSgp
KTsKIAogICAgICAgICBzbG93UGF0aC5saW5rKCZtX2ppdCk7CiAgICAgICAgIGFkZFNsb3dQYXRo
R2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChtX2ppdC5qdW1wKCksIHRoaXMsIG9wZXJhdGlvblNwcmVh
ZEZhc3RBcnJheSwgcmVzdWx0R1BSLCBhcmd1bWVudCkpOwpAQCAtODA0OSw3ICs4MDUzLDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5ld0FycmF5KE5vZAogICAgIH0KIAogICAgIHNp
emVfdCBzY3JhdGNoU2l6ZSA9IHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKiBub2RlLT5udW1DaGls
ZHJlbigpOwotICAgIFNjcmF0Y2hCdWZmZXIqIHNjcmF0Y2hCdWZmZXIgPSBtX2ppdC52bSgpLT5z
Y3JhdGNoQnVmZmVyRm9yU2l6ZShzY3JhdGNoU2l6ZSk7CisgICAgU2NyYXRjaEJ1ZmZlciogc2Ny
YXRjaEJ1ZmZlciA9IHZtKCkuc2NyYXRjaEJ1ZmZlckZvclNpemUoc2NyYXRjaFNpemUpOwogICAg
IEVuY29kZWRKU1ZhbHVlKiBidWZmZXIgPSBzY3JhdGNoQnVmZmVyID8gc3RhdGljX2Nhc3Q8RW5j
b2RlZEpTVmFsdWUqPihzY3JhdGNoQnVmZmVyLT5kYXRhQnVmZmVyKCkpIDogbnVsbHB0cjsKIAog
ICAgIGZvciAodW5zaWduZWQgb3BlcmFuZElkeCA9IDA7IG9wZXJhbmRJZHggPCBub2RlLT5udW1D
aGlsZHJlbigpOyArK29wZXJhbmRJZHgpIHsKQEAgLTgyMjEsNyArODIyNSw3IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVOZXdBcnJheVdpdGgKIAogICAgIEFTU0VSVChub2RlLT5udW1D
aGlsZHJlbigpKTsKICAgICBzaXplX3Qgc2NyYXRjaFNpemUgPSBzaXplb2YoRW5jb2RlZEpTVmFs
dWUpICogbm9kZS0+bnVtQ2hpbGRyZW4oKTsKLSAgICBTY3JhdGNoQnVmZmVyKiBzY3JhdGNoQnVm
ZmVyID0gbV9qaXQudm0oKS0+c2NyYXRjaEJ1ZmZlckZvclNpemUoc2NyYXRjaFNpemUpOworICAg
IFNjcmF0Y2hCdWZmZXIqIHNjcmF0Y2hCdWZmZXIgPSB2bSgpLnNjcmF0Y2hCdWZmZXJGb3JTaXpl
KHNjcmF0Y2hTaXplKTsKICAgICBFbmNvZGVkSlNWYWx1ZSogYnVmZmVyID0gc3RhdGljX2Nhc3Q8
RW5jb2RlZEpTVmFsdWUqPihzY3JhdGNoQnVmZmVyLT5kYXRhQnVmZmVyKCkpOwogCiAgICAgQml0
VmVjdG9yKiBiaXRWZWN0b3IgPSBub2RlLT5iaXRWZWN0b3IoKTsKQEAgLTg0MzQsNyArODQzOCw3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcnJheVNsaWNlKE4KICAgICAgICAgICAg
IGVtaXRBbGxvY2F0ZUJ1dHRlcmZseShzdG9yYWdlUmVzdWx0R1BSLCBzaXplR1BSLCBzY3JhdGNo
R1BSLCBzY3JhdGNoMkdQUiwgcmVzdWx0R1BSLCBzbG93Q2FzZXMpOwogICAgICAgICAgICAgZW1p
dEluaXRpYWxpemVCdXR0ZXJmbHkoc3RvcmFnZVJlc3VsdEdQUiwgc2l6ZUdQUiwgZW1wdHlWYWx1
ZVJlZ3MsIHNjcmF0Y2hHUFIpOwogICAgICAgICAgICAgZW1pdEFsbG9jYXRlSlNPYmplY3Q8SlNB
cnJheT4ocmVzdWx0R1BSLCB0ZW1wVmFsdWUsIHN0b3JhZ2VSZXN1bHRHUFIsIHNjcmF0Y2hHUFIs
IHNjcmF0Y2gyR1BSLCBzbG93Q2FzZXMpOwotICAgICAgICAgICAgbV9qaXQubXV0YXRvckZlbmNl
KCptX2ppdC52bSgpKTsKKyAgICAgICAgICAgIG1faml0Lm11dGF0b3JGZW5jZSh2bSgpKTsKICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuanVtcCgp
KTsKICAgICAgICAgfQpAQCAtODc3OCw3ICs4NzgyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZUFycmF5UHVzaChObwogICAgICAgICBzbG93UGF0aC5saW5rKCZtX2ppdCk7CiAKICAg
ICAgICAgc2l6ZV90IHNjcmF0Y2hTaXplID0gc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSAqIGVsZW1l
bnRDb3VudDsKLSAgICAgICAgU2NyYXRjaEJ1ZmZlciogc2NyYXRjaEJ1ZmZlciA9IG1faml0LnZt
KCktPnNjcmF0Y2hCdWZmZXJGb3JTaXplKHNjcmF0Y2hTaXplKTsKKyAgICAgICAgU2NyYXRjaEJ1
ZmZlciogc2NyYXRjaEJ1ZmZlciA9IHZtKCkuc2NyYXRjaEJ1ZmZlckZvclNpemUoc2NyYXRjaFNp
emUpOwogICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIoc3RhdGljX2Nhc3Q8RW5jb2Rl
ZEpTVmFsdWUqPihzY3JhdGNoQnVmZmVyLT5kYXRhQnVmZmVyKCkpKSwgYnVmZmVyR1BSKTsKICAg
ICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKHNjcmF0Y2hCdWZmZXItPmFkZHJlc3NPZkFj
dGl2ZUxlbmd0aCgpKSwgc3RvcmFnZUxlbmd0aEdQUik7CiAgICAgICAgIG1faml0LnN0b3JlUHRy
KFRydXN0ZWRJbW1QdHIoc2NyYXRjaFNpemUpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9y
YWdlTGVuZ3RoR1BSKSk7CkBAIC04ODUyLDcgKzg4NTYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlQXJyYXlQdXNoKE5vCiAgICAgICAgIHNsb3dQYXRoLmxpbmsoJm1faml0KTsKIAog
ICAgICAgICBzaXplX3Qgc2NyYXRjaFNpemUgPSBzaXplb2YoZG91YmxlKSAqIGVsZW1lbnRDb3Vu
dDsKLSAgICAgICAgU2NyYXRjaEJ1ZmZlciogc2NyYXRjaEJ1ZmZlciA9IG1faml0LnZtKCktPnNj
cmF0Y2hCdWZmZXJGb3JTaXplKHNjcmF0Y2hTaXplKTsKKyAgICAgICAgU2NyYXRjaEJ1ZmZlciog
c2NyYXRjaEJ1ZmZlciA9IHZtKCkuc2NyYXRjaEJ1ZmZlckZvclNpemUoc2NyYXRjaFNpemUpOwog
ICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIoc3RhdGljX2Nhc3Q8RW5jb2RlZEpTVmFs
dWUqPihzY3JhdGNoQnVmZmVyLT5kYXRhQnVmZmVyKCkpKSwgYnVmZmVyR1BSKTsKICAgICAgICAg
bV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKHNjcmF0Y2hCdWZmZXItPmFkZHJlc3NPZkFjdGl2ZUxl
bmd0aCgpKSwgc3RvcmFnZUxlbmd0aEdQUik7CiAgICAgICAgIG1faml0LnN0b3JlUHRyKFRydXN0
ZWRJbW1QdHIoc2NyYXRjaFNpemUpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlTGVu
Z3RoR1BSKSk7CkBAIC04OTMzLDcgKzg5MzcsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlQXJyYXlQdXNoKE5vCiAgICAgICAgIHNsb3dQYXRoLmxpbmsoJm1faml0KTsKIAogICAgICAg
ICBzaXplX3Qgc2NyYXRjaFNpemUgPSBzaXplb2YoRW5jb2RlZEpTVmFsdWUpICogZWxlbWVudENv
dW50OwotICAgICAgICBTY3JhdGNoQnVmZmVyKiBzY3JhdGNoQnVmZmVyID0gbV9qaXQudm0oKS0+
c2NyYXRjaEJ1ZmZlckZvclNpemUoc2NyYXRjaFNpemUpOworICAgICAgICBTY3JhdGNoQnVmZmVy
KiBzY3JhdGNoQnVmZmVyID0gdm0oKS5zY3JhdGNoQnVmZmVyRm9yU2l6ZShzY3JhdGNoU2l6ZSk7
CiAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cihzdGF0aWNfY2FzdDxFbmNvZGVkSlNW
YWx1ZSo+KHNjcmF0Y2hCdWZmZXItPmRhdGFCdWZmZXIoKSkpLCBidWZmZXJHUFIpOwogICAgICAg
ICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIoc2NyYXRjaEJ1ZmZlci0+YWRkcmVzc09mQWN0aXZl
TGVuZ3RoKCkpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKICAgICAgICAgbV9qaXQuc3RvcmVQdHIoVHJ1
c3RlZEltbVB0cihzY3JhdGNoU2l6ZSksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VM
ZW5ndGhHUFIpKTsKQEAgLTkxMDIsNyArOTEwNiw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVUeXBlT2YoTm9kZSoKICAgICBtX2ppdC5lbWl0VHlwZU9mKAogICAgICAgICB2YWx1ZVJl
Z3MsIHJlc3VsdEdQUiwKICAgICAgICAgWyZdIChUeXBlb2ZUeXBlIHR5cGUsIGJvb2wgZmFsbHNU
aHJvdWdoKSB7Ci0gICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHI6OndlYWtQb2lu
dGVyKG1faml0LmdyYXBoKCksIG1faml0LnZtKCktPnNtYWxsU3RyaW5ncy50eXBlU3RyaW5nKHR5
cGUpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cjo6
d2Vha1BvaW50ZXIobV9qaXQuZ3JhcGgoKSwgdm0oKS5zbWFsbFN0cmluZ3MudHlwZVN0cmluZyh0
eXBlKSksIHJlc3VsdEdQUik7CiAgICAgICAgICAgICBpZiAoIWZhbGxzVGhyb3VnaCkKICAgICAg
ICAgICAgICAgICBkb25lLmFwcGVuZChtX2ppdC5qdW1wKCkpOwogICAgICAgICB9LApAQCAtOTIx
Niw3ICs5MjIwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFsbG9jYXRlUHJvcAog
ICAgIAogICAgIHNpemVfdCBzaXplID0gaW5pdGlhbE91dE9mTGluZUNhcGFjaXR5ICogc2l6ZW9m
KEpTVmFsdWUpOwogCi0gICAgQWxsb2NhdG9yIGFsbG9jYXRvciA9IG1faml0LnZtKCktPmpzVmFs
dWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLmFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZSwgQWxs
b2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOworICAgIEFsbG9jYXRvciBhbGxvY2F0
b3IgPSB2bSgpLmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLmFsbG9jYXRvckZvck5vblZp
cnR1YWwoc2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOwogCiAgICAg
aWYgKCFhbGxvY2F0b3IgfHwgbm9kZS0+dHJhbnNpdGlvbigpLT5wcmV2aW91cy0+Y291bGRIYXZl
SW5kZXhpbmdIZWFkZXIoKSkgewogICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRo
aXMsIG5vZGUtPmNoaWxkMSgpKTsKQEAgLTkyNjAsNyArOTI2NCw3IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVSZWFsbG9jYXRlUHIKICAgICBzaXplX3QgbmV3U2l6ZSA9IG9sZFNpemUg
KiBvdXRPZkxpbmVHcm93dGhGYWN0b3I7CiAgICAgQVNTRVJUKG5ld1NpemUgPT0gbm9kZS0+dHJh
bnNpdGlvbigpLT5uZXh0LT5vdXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpKTsK
ICAgICAKLSAgICBBbGxvY2F0b3IgYWxsb2NhdG9yID0gbV9qaXQudm0oKS0+anNWYWx1ZUdpZ2Fj
YWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdG9yRm9yTm9uVmlydHVhbChuZXdTaXplLCBBbGxvY2F0
b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CisgICAgQWxsb2NhdG9yIGFsbG9jYXRvciA9
IHZtKCkuanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdG9yRm9yTm9uVmlydHVh
bChuZXdTaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CiAKICAgICBp
ZiAoIWFsbG9jYXRvciB8fCBub2RlLT50cmFuc2l0aW9uKCktPnByZXZpb3VzLT5jb3VsZEhhdmVJ
bmRleGluZ0hlYWRlcigpKSB7CiAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhp
cywgbm9kZS0+Y2hpbGQxKCkpOwpAQCAtOTMxNSw3ICs5MzE5LDcgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZU51a2VTdHJ1Y3R1cgogICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIo
KTsKICAgICBHUFJSZWcgc3RvcmFnZUdQUiA9IHN0b3JhZ2UuZ3ByKCk7CiAKLSAgICBtX2ppdC5u
dWtlU3RydWN0dXJlQW5kU3RvcmVCdXR0ZXJmbHkoKm1faml0LnZtKCksIHN0b3JhZ2VHUFIsIGJh
c2VHUFIpOworICAgIG1faml0Lm51a2VTdHJ1Y3R1cmVBbmRTdG9yZUJ1dHRlcmZseSh2bSgpLCBz
dG9yYWdlR1BSLCBiYXNlR1BSKTsKICAgICAKICAgICBub1Jlc3VsdChub2RlKTsKIH0KQEAgLTk0
NDUsNyArOTQ0OSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDYWxsRE9NR2V0dGUK
IAogICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50
czxKX0pJVE9wZXJhdGlvbl9FSkk+KENDYWxsSGVscGVyczo6Q2VsbFZhbHVlKGJhc2VHUFIpLCBp
ZGVudGlmaWVyVUlEKG5vZGUtPmNhbGxET01HZXR0ZXJEYXRhKCktPmlkZW50aWZpZXJOdW1iZXIp
KTsKLSAgICAgICAgbV9qaXQuc3RvcmVQdHIoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsICZt
X2ppdC52bSgpLT50b3BDYWxsRnJhbWUpOworICAgICAgICBtX2ppdC5zdG9yZVB0cihHUFJJbmZv
OjpjYWxsRnJhbWVSZWdpc3RlciwgJnZtKCkudG9wQ2FsbEZyYW1lKTsKICAgICAgICAgbV9qaXQu
ZW1pdFN0b3JlQ29kZU9yaWdpbihtX2N1cnJlbnROb2RlLT5vcmlnaW4uc2VtYW50aWMpOwogICAg
ICAgICBtX2ppdC5hcHBlbmRDYWxsKGdldHRlci5yZXRhZ2dlZDxDRnVuY3Rpb25QdHJUYWc+KCkp
OwogICAgICAgICBtX2ppdC5zZXR1cFJlc3VsdHMocmVzdWx0UmVncyk7CkBAIC05NDkzLDcgKzk0
OTcsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ2hlY2tTdWJDbGFzCiAgICAgICAg
IEdQUlJlZyBvdGhlckdQUiA9IG90aGVyLmdwcigpOwogICAgICAgICBHUFJSZWcgc3BlY2lmaWVk
R1BSID0gc3BlY2lmaWVkLmdwcigpOwogCi0gICAgICAgIG1faml0LmVtaXRMb2FkU3RydWN0dXJl
KCptX2ppdC52bSgpLCBiYXNlR1BSLCBvdGhlckdQUiwgc3BlY2lmaWVkR1BSKTsKKyAgICAgICAg
bV9qaXQuZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgYmFzZUdQUiwgb3RoZXJHUFIsIHNwZWNpZmll
ZEdQUik7CiAgICAgICAgIG1faml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG90aGVy
R1BSLCBTdHJ1Y3R1cmU6OmNsYXNzSW5mb09mZnNldCgpKSwgb3RoZXJHUFIpOwogICAgICAgICBt
X2ppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihub2RlLT5jbGFzc0luZm8oKSks
IHNwZWNpZmllZEdQUik7CiAKQEAgLTk4MDIsNyArOTgwNiw3IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVOZXdTdHJpbmdPYmoKICAgICAgICAgSklUQ29tcGlsZXI6OkFkZHJlc3MocmVz
dWx0R1BSLCBKU1dyYXBwZXJPYmplY3Q6OmludGVybmFsVmFsdWVPZmZzZXQoKSArIE9CSkVDVF9P
RkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSkpOwogI2VuZGlmCiAgICAgCi0gICAg
bV9qaXQubXV0YXRvckZlbmNlKCptX2ppdC52bSgpKTsKKyAgICBtX2ppdC5tdXRhdG9yRmVuY2Uo
dm0oKSk7CiAgICAgCiAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKAogICAg
ICAgICBzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9uTmV3U3RyaW5nT2JqZWN0LCByZXN1bHRHUFIs
IG9wZXJhbmRHUFIsIG5vZGUtPnN0cnVjdHVyZSgpKSk7CkBAIC05ODY5LDcgKzk4NzMsNyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTmV3VHlwZWRBcnJhCiAgICAgICAgIG1faml0LmFu
ZDMyKFRydXN0ZWRJbW0zMih+NyksIHNjcmF0Y2hHUFIpOwogICAgIH0KICAgICBtX2ppdC5lbWl0
QWxsb2NhdGVWYXJpYWJsZVNpemVkKAotICAgICAgICBzdG9yYWdlR1BSLCBtX2ppdC52bSgpLT5w
cmltaXRpdmVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLCBzY3JhdGNoR1BSLCBzY3JhdGNoR1BSLAor
ICAgICAgICBzdG9yYWdlR1BSLCB2bSgpLnByaW1pdGl2ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2Us
IHNjcmF0Y2hHUFIsIHNjcmF0Y2hHUFIsCiAgICAgICAgIHNjcmF0Y2hHUFIyLCBzbG93Q2FzZXMp
OwogICAgIAogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5icmFuY2hUZXN0
MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHNpemVHUFIpOwpAQCAtOTkxMiw3ICs5OTE2LDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5ld1R5cGVkQXJyYQogICAgICAgICBUcnVzdGVk
SW1tMzIoRmFzdFR5cGVkQXJyYXkpLAogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhy
ZXN1bHRHUFIsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZk1vZGUoKSkpOwogICAgIAotICAg
IG1faml0Lm11dGF0b3JGZW5jZSgqbV9qaXQudm0oKSk7CisgICAgbV9qaXQubXV0YXRvckZlbmNl
KHZtKCkpOwogICAgIAogICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbCgKICAg
ICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25OZXdUeXBlZEFycmF5V2l0aFNpemVGb3JU
eXBlKHR5cGVkQXJyYXlUeXBlKSwKQEAgLTk5NDUsNyArOTk0OSw3IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVOZXdSZWdleHAoTm8KICAgICAgICAgVHJ1c3RlZEltbVB0cihub2RlLT5j
ZWxsT3BlcmFuZCgpKSwKICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHJlc3VsdEdQUiwg
UmVnRXhwT2JqZWN0OjpvZmZzZXRPZlJlZ0V4cEFuZExhc3RJbmRleElzTm90V3JpdGFibGVGbGFn
KCkpKTsKICAgICBtX2ppdC5zdG9yZVZhbHVlKGxhc3RJbmRleFJlZ3MsIENDYWxsSGVscGVyczo6
QWRkcmVzcyhyZXN1bHRHUFIsIFJlZ0V4cE9iamVjdDo6b2Zmc2V0T2ZMYXN0SW5kZXgoKSkpOwot
ICAgIG1faml0Lm11dGF0b3JGZW5jZSgqbV9qaXQudm0oKSk7CisgICAgbV9qaXQubXV0YXRvckZl
bmNlKHZtKCkpOwogCiAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKHNsb3dQ
YXRoLCB0aGlzLCBvcGVyYXRpb25OZXdSZWdleHBXaXRoTGFzdEluZGV4LCByZXN1bHRHUFIsIHJl
Z2V4cCwgbGFzdEluZGV4UmVncykpOwogCkBAIC0xMTA4Nyw5ICsxMTA5MSw5IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVTdG9yZUJhcnJpZXIKICAgICBKSVRDb21waWxlcjo6SnVtcExp
c3Qgb2s7CiAgICAgCiAgICAgaWYgKGlzRmVuY2VkKSB7Ci0gICAgICAgIG9rLmFwcGVuZChtX2pp
dC5iYXJyaWVyQnJhbmNoKCptX2ppdC52bSgpLCBiYXNlR1BSLCBzY3JhdGNoMUdQUikpOworICAg
ICAgICBvay5hcHBlbmQobV9qaXQuYmFycmllckJyYW5jaCh2bSgpLCBiYXNlR1BSLCBzY3JhdGNo
MUdQUikpOwogICAgICAgICAKLSAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm9GZW5jZSA9IG1f
aml0Lmp1bXBJZk11dGF0b3JGZW5jZU5vdE5lZWRlZCgqbV9qaXQudm0oKSk7CisgICAgICAgIEpJ
VENvbXBpbGVyOjpKdW1wIG5vRmVuY2UgPSBtX2ppdC5qdW1wSWZNdXRhdG9yRmVuY2VOb3ROZWVk
ZWQodm0oKSk7CiAgICAgICAgIG1faml0Lm1lbW9yeUZlbmNlKCk7CiAgICAgICAgIG9rLmFwcGVu
ZChtX2ppdC5iYXJyaWVyQnJhbmNoV2l0aG91dEZlbmNlKGJhc2VHUFIpKTsKICAgICAgICAgbm9G
ZW5jZS5saW5rKCZtX2ppdCk7CkBAIC0xMTQyMCw3ICsxMTQyNCw3IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVTdHJpbmdSZXBsYWMKICAgICBpZiAobm9kZS0+Y2hpbGQxKCkudXNlS2lu
ZCgpID09IFN0cmluZ1VzZQogICAgICAgICAmJiBub2RlLT5jaGlsZDIoKS51c2VLaW5kKCkgPT0g
UmVnRXhwT2JqZWN0VXNlCiAgICAgICAgICYmIG5vZGUtPmNoaWxkMygpLnVzZUtpbmQoKSA9PSBT
dHJpbmdVc2UpIHsKLSAgICAgICAgaWYgKEpTU3RyaW5nKiByZXBsYWNlID0gbm9kZS0+Y2hpbGQz
KCktPmR5bmFtaWNDYXN0Q29uc3RhbnQ8SlNTdHJpbmcqPigqbV9qaXQudm0oKSkpIHsKKyAgICAg
ICAgaWYgKEpTU3RyaW5nKiByZXBsYWNlID0gbm9kZS0+Y2hpbGQzKCktPmR5bmFtaWNDYXN0Q29u
c3RhbnQ8SlNTdHJpbmcqPih2bSgpKSkgewogICAgICAgICAgICAgaWYgKCFyZXBsYWNlLT5sZW5n
dGgoKSkgewogICAgICAgICAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIHN0cmluZyh0aGlz
LCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQg
cmVnRXhwKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKQEAgLTExNTU0LDcgKzExNTU4LDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUxhenlKU0NvbnN0YQogdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZU1hdGVyaWFsaXplTmV3T2JqZWN0KE5vZGUqIG5vZGUpCiB7CiAgICAgUmVnaXN0
ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmUgPSBub2RlLT5zdHJ1Y3R1cmVTZXQoKS5hdCgwKTsKLSAg
ICBBU1NFUlQobV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAwKS0+ZHluYW1pY0Nhc3RD
b25zdGFudDxTdHJ1Y3R1cmUqPigqbV9qaXQudm0oKSkgPT0gc3RydWN0dXJlLmdldCgpKTsKKyAg
ICBBU1NFUlQobV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAwKS0+ZHluYW1pY0Nhc3RD
b25zdGFudDxTdHJ1Y3R1cmUqPih2bSgpKSA9PSBzdHJ1Y3R1cmUuZ2V0KCkpOwogCiAgICAgT2Jq
ZWN0TWF0ZXJpYWxpemF0aW9uRGF0YSYgZGF0YSA9IG5vZGUtPm9iamVjdE1hdGVyaWFsaXphdGlv
bkRhdGEoKTsKICAgICAgICAgCkBAIC0xMTg0Miw3ICsxMTg0Niw3IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmVtaXRBbGxvY2F0ZUJ1dHRlcmYKICAgICBkaWROb3RPdmVyZmxvdy5saW5rKCZtX2pp
dCk7CiAjZW5kaWYKICAgICBtX2ppdC5lbWl0QWxsb2NhdGVWYXJpYWJsZVNpemVkKAotICAgICAg
ICBzdG9yYWdlUmVzdWx0R1BSLCBtX2ppdC52bSgpLT5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlT
cGFjZSwgc2NyYXRjaDIsIHNjcmF0Y2gxLCBzY3JhdGNoMywgc2xvd0Nhc2VzKTsKKyAgICAgICAg
c3RvcmFnZVJlc3VsdEdQUiwgdm0oKS5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZSwgc2Ny
YXRjaDIsIHNjcmF0Y2gxLCBzY3JhdGNoMywgc2xvd0Nhc2VzKTsKICAgICBtX2ppdC5hZGRQdHIo
VHJ1c3RlZEltbTMyKHNpemVvZihJbmRleGluZ0hlYWRlcikpLCBzdG9yYWdlUmVzdWx0R1BSKTsK
IAogICAgIG1faml0LnN0b3JlMzIoc2l6ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3Rv
cmFnZVJlc3VsdEdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSk7CkBAIC0x
MTkzOSwxMCArMTE5NDMsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldE1hcEJ1
Y2tldAogICAgIG5vdEJ1Y2tldC5saW5rKCZtX2ppdCk7CiAgICAgSlNDZWxsKiBzZW50aW5lbCA9
IG51bGxwdHI7CiAgICAgaWYgKG5vZGUtPmJ1Y2tldE93bmVyVHlwZSgpID09IEJ1Y2tldE93bmVy
VHlwZTo6TWFwKQotICAgICAgICBzZW50aW5lbCA9IG1faml0LnZtKCktPnNlbnRpbmVsTWFwQnVj
a2V0KCk7CisgICAgICAgIHNlbnRpbmVsID0gdm0oKS5zZW50aW5lbE1hcEJ1Y2tldCgpOwogICAg
IGVsc2UgewogICAgICAgICBBU1NFUlQobm9kZS0+YnVja2V0T3duZXJUeXBlKCkgPT0gQnVja2V0
T3duZXJUeXBlOjpTZXQpOwotICAgICAgICBzZW50aW5lbCA9IG1faml0LnZtKCktPnNlbnRpbmVs
U2V0QnVja2V0KCk7CisgICAgICAgIHNlbnRpbmVsID0gdm0oKS5zZW50aW5lbFNldEJ1Y2tldCgp
OwogICAgIH0KICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1faml0
LmdyYXBoKCksIHNlbnRpbmVsKSwgcmVzdWx0R1BSKTsKICAgICBkb25lLmxpbmsoJm1faml0KTsK
QEAgLTEyNTE2LDExICsxMjUyMCwxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2Jq
ZWN0S2V5cyhOCiAgICAgICAgICAgICBzcGVjdWxhdGVPYmplY3Qobm9kZS0+Y2hpbGQxKCksIG9i
amVjdEdQUik7CiAKICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd0Nhc2Vz
OwotICAgICAgICAgICAgbV9qaXQuZW1pdExvYWRTdHJ1Y3R1cmUoKm1faml0LnZtKCksIG9iamVj
dEdQUiwgc3RydWN0dXJlR1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIG1faml0LmVtaXRM
b2FkU3RydWN0dXJlKHZtKCksIG9iamVjdEdQUiwgc3RydWN0dXJlR1BSLCBzY3JhdGNoR1BSKTsK
ICAgICAgICAgICAgIG1faml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0cnVjdHVy
ZUdQUiwgU3RydWN0dXJlOjpwcmV2aW91c09yUmFyZURhdGFPZmZzZXQoKSksIHNjcmF0Y2hHUFIp
OwogCiAgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaFRlc3RQdHIoQ0Nh
bGxIZWxwZXJzOjpaZXJvLCBzY3JhdGNoR1BSKSk7Ci0gICAgICAgICAgICBzbG93Q2FzZXMuYXBw
ZW5kKG1faml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6RXF1YWwsIENDYWxsSGVscGVyczo6QWRk
cmVzcyhzY3JhdGNoR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBUcnVzdGVkSW1t
MzIoYml0d2lzZV9jYXN0PGludDMyX3Q+KG1faml0LnZtKCktPnN0cnVjdHVyZVN0cnVjdHVyZS0+
c3RydWN0dXJlSUQoKSkpKSk7CisgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJy
YW5jaDMyKENDYWxsSGVscGVyczo6RXF1YWwsIENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNo
R1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoYml0d2lzZV9j
YXN0PGludDMyX3Q+KHZtKCkuc3RydWN0dXJlU3RydWN0dXJlLT5zdHJ1Y3R1cmVJRCgpKSkpKTsK
IAogICAgICAgICAgICAgbV9qaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRj
aEdQUiwgU3RydWN0dXJlUmFyZURhdGE6Om9mZnNldE9mQ2FjaGVkT3duS2V5cygpKSwgc2NyYXRj
aEdQUik7CiAKQEAgLTEyNjYwLDcgKzEyNjY0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUNyZWF0ZVRoaXMoTgogCiAgICAgbV9qaXQubG9hZDgoSklUQ29tcGlsZXI6OkFkZHJlc3Mo
c3RydWN0dXJlR1BSLCBTdHJ1Y3R1cmU6OmlubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCBpbmxpbmVD
YXBhY2l0eUdQUik7CiAgICAgbV9qaXQuZW1pdEluaXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3Vs
dEdQUiwgaW5saW5lQ2FwYWNpdHlHUFIpOwotICAgIG1faml0Lm11dGF0b3JGZW5jZSgqbV9qaXQu
dm0oKSk7CisgICAgbV9qaXQubXV0YXRvckZlbmNlKHZtKCkpOwogCiAgICAgYWRkU2xvd1BhdGhH
ZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRpb25DcmVhdGVUaGlz
LCByZXN1bHRHUFIsIGNhbGxlZUdQUiwgbm9kZS0+aW5saW5lQ2FwYWNpdHkoKSkpOwogCkBAIC0x
MjY4MSwxNCArMTI2ODUsMTQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5ld09iamVj
dChObwogCiAgICAgUmVnaXN0ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmUgPSBub2RlLT5zdHJ1Y3R1
cmUoKTsKICAgICBzaXplX3QgYWxsb2NhdGlvblNpemUgPSBKU0ZpbmFsT2JqZWN0OjphbGxvY2F0
aW9uU2l6ZShzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwotICAgIEFsbG9jYXRvciBhbGxv
Y2F0b3JWYWx1ZSA9IGFsbG9jYXRvckZvck5vblZpcnR1YWxDb25jdXJyZW50bHk8SlNGaW5hbE9i
amVjdD4oKm1faml0LnZtKCksIGFsbG9jYXRpb25TaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxv
Y2F0b3JJZkV4aXN0cyk7CisgICAgQWxsb2NhdG9yIGFsbG9jYXRvclZhbHVlID0gYWxsb2NhdG9y
Rm9yTm9uVmlydHVhbENvbmN1cnJlbnRseTxKU0ZpbmFsT2JqZWN0Pih2bSgpLCBhbGxvY2F0aW9u
U2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOwogICAgIGlmICghYWxs
b2NhdG9yVmFsdWUpCiAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChtX2ppdC5qdW1wKCkpOwogICAg
IGVsc2UgewogICAgICAgICBhdXRvIGJ1dHRlcmZseSA9IFRydXN0ZWRJbW1QdHIobnVsbHB0cik7
CiAgICAgICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KHJlc3VsdEdQUiwgSklUQWxsb2NhdG9yOjpj
b25zdGFudChhbGxvY2F0b3JWYWx1ZSksIGFsbG9jYXRvckdQUiwgVHJ1c3RlZEltbVB0cihzdHJ1
Y3R1cmUpLCBidXR0ZXJmbHksIHNjcmF0Y2hHUFIsIHNsb3dQYXRoKTsKICAgICAgICAgbV9qaXQu
ZW1pdEluaXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3VsdEdQUiwgc3RydWN0dXJlLT5pbmxpbmVD
YXBhY2l0eSgpKTsKLSAgICAgICAgbV9qaXQubXV0YXRvckZlbmNlKCptX2ppdC52bSgpKTsKKyAg
ICAgICAgbV9qaXQubXV0YXRvckZlbmNlKHZtKCkpOwogICAgIH0KIAogICAgIGFkZFNsb3dQYXRo
R2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9uTmV3T2JqZWN0
LCByZXN1bHRHUFIsIHN0cnVjdHVyZSkpOwpAQCAtMTI3MzEsNyArMTI3MzUsNyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlTG9nU2hhZG93Q2hpCiAgICAgR1BSVGVtcG9yYXJ5IHNoYWRv
d1BhY2tldCh0aGlzKTsKICAgICBHUFJSZWcgc2hhZG93UGFja2V0UmVnID0gc2hhZG93UGFja2V0
LmdwcigpOwogCi0gICAgbV9qaXQuZW5zdXJlU2hhZG93Q2hpY2tlblBhY2tldCgqbV9qaXQudm0o
KSwgc2hhZG93UGFja2V0UmVnLCBzY3JhdGNoMVJlZywgc2NyYXRjaDJSZWcpOworICAgIG1faml0
LmVuc3VyZVNoYWRvd0NoaWNrZW5QYWNrZXQodm0oKSwgc2hhZG93UGFja2V0UmVnLCBzY3JhdGNo
MVJlZywgc2NyYXRjaDJSZWcpOwogCiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgc2NvcGUodGhp
cywgbm9kZS0+Y2hpbGQxKCkpOwogICAgIEdQUlJlZyBzY29wZVJlZyA9IHNjb3BlLmdwcigpOwpA
QCAtMTI3NTMsNyArMTI3NTcsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTG9nU2hh
ZG93Q2hpCiAgICAgR1BSVGVtcG9yYXJ5IHNoYWRvd1BhY2tldCh0aGlzKTsKICAgICBHUFJSZWcg
c2hhZG93UGFja2V0UmVnID0gc2hhZG93UGFja2V0LmdwcigpOwogCi0gICAgbV9qaXQuZW5zdXJl
U2hhZG93Q2hpY2tlblBhY2tldCgqbV9qaXQudm0oKSwgc2hhZG93UGFja2V0UmVnLCBzY3JhdGNo
MVJlZywgc2NyYXRjaDJSZWcpOworICAgIG1faml0LmVuc3VyZVNoYWRvd0NoaWNrZW5QYWNrZXQo
dm0oKSwgc2hhZG93UGFja2V0UmVnLCBzY3JhdGNoMVJlZywgc2NyYXRjaDJSZWcpOwogCiAgICAg
SlNWYWx1ZU9wZXJhbmQgdGhpc1ZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICBKU1Zh
bHVlUmVncyB0aGlzUmVncyA9IHRoaXNWYWx1ZS5qc1ZhbHVlUmVncygpOwpAQCAtMTI5NzMsNyAr
MTI5NzcsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0UHJvdG90eXBlCiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogCi0gICAgICAgIG1faml0LmVtaXRMb2FkU3RydWN0
dXJlKCptX2ppdC52bSgpLCBvYmplY3RHUFIsIHRlbXBHUFIsIHRlbXAyR1BSKTsKKyAgICAgICAg
bV9qaXQuZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgb2JqZWN0R1BSLCB0ZW1wR1BSLCB0ZW1wMkdQ
Uik7CiAKICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBtX3N0YXRlLmZvck5vZGUobm9k
ZS0+Y2hpbGQxKCkpOwogICAgICAgICBpZiAoKHZhbHVlLm1fdHlwZSAmJiAhKHZhbHVlLm1fdHlw
ZSAmIH5TcGVjT2JqZWN0KSkgJiYgdmFsdWUubV9zdHJ1Y3R1cmUuaXNGaW5pdGUoKSkgewpAQCAt
MTMxNzQsNyArMTMxNzgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQWxsb2NhdGVO
ZXdBCiAKICAgICBlbWl0QWxsb2NhdGVKU09iamVjdDxKU0FycmF5PihyZXN1bHRHUFIsIFRydXN0
ZWRJbW1QdHIoc3RydWN0dXJlKSwgc3RvcmFnZUdQUiwgc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIs
IHNsb3dDYXNlcyk7CiAKLSAgICBtX2ppdC5tdXRhdG9yRmVuY2UoKm1faml0LnZtKCkpOworICAg
IG1faml0Lm11dGF0b3JGZW5jZSh2bSgpKTsKIAogICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKG1h
a2VVbmlxdWU8Q2FsbEFycmF5QWxsb2NhdG9yV2l0aFZhcmlhYmxlU2l6ZVNsb3dQYXRoR2VuZXJh
dG9yPigKICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25OZXdBcnJheVdpdGhTaXpl
LCByZXN1bHRHUFIsCkBAIC0xMzQwMSw3ICsxMzQwNSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVQcm9maWxlVHlwZSgKICAgICB9CiAKICAgICAvLyBMb2FkIHRoZSBUeXBlUHJvZmls
ZXJMb2cgaW50byBTY3JhdGNoMi4KLSAgICBUeXBlUHJvZmlsZXJMb2cqIGNhY2hlZFR5cGVQcm9m
aWxlckxvZyA9IG1faml0LnZtKCktPnR5cGVQcm9maWxlckxvZygpOworICAgIFR5cGVQcm9maWxl
ckxvZyogY2FjaGVkVHlwZVByb2ZpbGVyTG9nID0gdm0oKS50eXBlUHJvZmlsZXJMb2coKTsKICAg
ICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIoY2FjaGVkVHlwZVByb2ZpbGVyTG9nKSwgc2NyYXRj
aDJHUFIpOwogCiAgICAgLy8gTG9hZCB0aGUgbmV4dCBMb2dFbnRyeSBpbnRvIFNjcmF0Y2gxLgpA
QCAtMTM2NTEsMTQgKzEzNjU1LDE0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVNYWtl
Um9wZShOb2QKICAgICBHUFJSZWcgc2NyYXRjaDJHUFIgPSBzY3JhdGNoMi5ncHIoKTsKIAogICAg
IENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd1BhdGg7Ci0gICAgQWxsb2NhdG9yIGFsbG9jYXRv
clZhbHVlID0gYWxsb2NhdG9yRm9yTm9uVmlydHVhbENvbmN1cnJlbnRseTxKU1JvcGVTdHJpbmc+
KCptX2ppdC52bSgpLCBzaXplb2YoSlNSb3BlU3RyaW5nKSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxs
b2NhdG9ySWZFeGlzdHMpOwotICAgIGVtaXRBbGxvY2F0ZUpTQ2VsbChyZXN1bHRHUFIsIEpJVEFs
bG9jYXRvcjo6Y29uc3RhbnQoYWxsb2NhdG9yVmFsdWUpLCBhbGxvY2F0b3JHUFIsIFRydXN0ZWRJ
bW1QdHIobV9qaXQuZ3JhcGgoKS5yZWdpc3RlclN0cnVjdHVyZShtX2ppdC52bSgpLT5zdHJpbmdT
dHJ1Y3R1cmUuZ2V0KCkpKSwgc2NyYXRjaEdQUiwgc2xvd1BhdGgpOworICAgIEFsbG9jYXRvciBh
bGxvY2F0b3JWYWx1ZSA9IGFsbG9jYXRvckZvck5vblZpcnR1YWxDb25jdXJyZW50bHk8SlNSb3Bl
U3RyaW5nPih2bSgpLCBzaXplb2YoSlNSb3BlU3RyaW5nKSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxs
b2NhdG9ySWZFeGlzdHMpOworICAgIGVtaXRBbGxvY2F0ZUpTQ2VsbChyZXN1bHRHUFIsIEpJVEFs
bG9jYXRvcjo6Y29uc3RhbnQoYWxsb2NhdG9yVmFsdWUpLCBhbGxvY2F0b3JHUFIsIFRydXN0ZWRJ
bW1QdHIobV9qaXQuZ3JhcGgoKS5yZWdpc3RlclN0cnVjdHVyZSh2bSgpLnN0cmluZ1N0cnVjdHVy
ZS5nZXQoKSkpLCBzY3JhdGNoR1BSLCBzbG93UGF0aCk7CiAKICAgICAvLyBUaGlzIHB1dHMgbnVs
bHB0ciBmb3IgdGhlIGZpcnN0IGZpYmVyLiBJdCBtYWtlcyB2aXNpdENoaWxkcmVuIHNhZmUgZXZl
biBpZiB0aGlzIEpTUm9wZVN0cmluZyBpcyBkaXNjYXJkZWQgZHVlIHRvIHRoZSBzcGVjdWxhdGlv
biBmYWlsdXJlIGluIHRoZSBmb2xsb3dpbmcgcGF0aC4KICAgICBtX2ppdC5zdG9yZVB0cihUcnVz
dGVkSW1tUHRyKEpTU3RyaW5nOjppc1JvcGVJblBvaW50ZXIpLCBDQ2FsbEhlbHBlcnM6OkFkZHJl
c3MocmVzdWx0R1BSLCBKU1JvcGVTdHJpbmc6Om9mZnNldE9mRmliZXIwKCkpKTsKIAogICAgIHsK
LSAgICAgICAgaWYgKEpTU3RyaW5nKiBzdHJpbmcgPSBlZGdlc1swXS0+ZHluYW1pY0Nhc3RDb25z
dGFudDxKU1N0cmluZyo+KCptX2ppdC52bSgpKSkgeworICAgICAgICBpZiAoSlNTdHJpbmcqIHN0
cmluZyA9IGVkZ2VzWzBdLT5keW5hbWljQ2FzdENvbnN0YW50PEpTU3RyaW5nKj4odm0oKSkpIHsK
ICAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKHN0cmluZy0+aXM4Qml0KCkgPyBT
dHJpbmdJbXBsOjpmbGFnSXM4Qml0KCkgOiAwKSwgc2NyYXRjaEdQUik7CiAgICAgICAgICAgICBt
X2ppdC5tb3ZlKFRydXN0ZWRJbW0zMihzdHJpbmctPmxlbmd0aCgpKSwgYWxsb2NhdG9yR1BSKTsK
ICAgICAgICAgfSBlbHNlIHsKQEAgLTEzNjkwLDcgKzEzNjk0LDcgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZU1ha2VSb3BlKE5vZAogICAgIH0KIAogICAgIGZvciAodW5zaWduZWQgaSA9
IDE7IGkgPCBudW1PcEdQUnM7ICsraSkgewotICAgICAgICBpZiAoSlNTdHJpbmcqIHN0cmluZyA9
IGVkZ2VzW2ldLT5keW5hbWljQ2FzdENvbnN0YW50PEpTU3RyaW5nKj4oKm1faml0LnZtKCkpKSB7
CisgICAgICAgIGlmIChKU1N0cmluZyogc3RyaW5nID0gZWRnZXNbaV0tPmR5bmFtaWNDYXN0Q29u
c3RhbnQ8SlNTdHJpbmcqPih2bSgpKSkgewogICAgICAgICAgICAgbV9qaXQuYW5kMzIoVHJ1c3Rl
ZEltbTMyKHN0cmluZy0+aXM4Qml0KCkgPyBTdHJpbmdJbXBsOjpmbGFnSXM4Qml0KCkgOiAwKSwg
c2NyYXRjaEdQUik7CiAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAogICAgICAgICAgICAg
ICAgIFVuY291bnRhYmxlLCBKU1ZhbHVlU291cmNlKCksIG51bGxwdHIsCkBAIC0xMzc1OCwxMCAr
MTM3NjIsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU1ha2VSb3BlKE5vZAogCiAg
ICAgYXV0byBpc05vbkVtcHR5U3RyaW5nID0gbV9qaXQuYnJhbmNoVGVzdDMyKENDYWxsSGVscGVy
czo6Tm9uWmVybywgYWxsb2NhdG9yR1BSKTsKIAotICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0
cjo6d2Vha1BvaW50ZXIobV9qaXQuZ3JhcGgoKSwganNFbXB0eVN0cmluZygmbV9qaXQuZ3JhcGgo
KS5tX3ZtKSksIHJlc3VsdEdQUik7CisgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyOjp3ZWFr
UG9pbnRlcihtX2ppdC5ncmFwaCgpLCBqc0VtcHR5U3RyaW5nKG1faml0LmdyYXBoKCkubV92bSkp
LCByZXN1bHRHUFIpOwogCiAgICAgaXNOb25FbXB0eVN0cmluZy5saW5rKCZtX2ppdCk7Ci0gICAg
bV9qaXQubXV0YXRvckZlbmNlKCptX2ppdC52bSgpKTsKKyAgICBtX2ppdC5tdXRhdG9yRmVuY2Uo
dm0oKSk7CiAKICAgICBzd2l0Y2ggKG51bU9wR1BScykgewogICAgIGNhc2UgMjoKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlzaW9u
IDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
aAkod29ya2luZyBjb3B5KQpAQCAtMTEzLDcgKzExMyw3IEBAIHB1YmxpYzoKIAogICAgIFZNJiB2
bSgpCiAgICAgewotICAgICAgICByZXR1cm4gKm1faml0LnZtKCk7CisgICAgICAgIHJldHVybiBt
X2ppdC52bSgpOwogICAgIH0KIAogICAgIHN0cnVjdCBUcnVzdGVkSW1tUHRyIHsKQEAgLTk5MSw3
ICs5OTEsNyBAQCBwdWJsaWM6CiAgICAgICAgIC8vIGFueXdheSBzaW5jZSBpdCB3YXMgbm90IGJl
aW5nIHVwZGF0ZWQgYnkgSklUJ2VkIGNvZGUgYnkgZGVzaWduLgogCiAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBzaXplb2Yodm9pZCopIC8gNDsgaSsrKQotICAgICAgICAgICAgbV9q
aXQuc3RvcmUzMihUcnVzdGVkSW1tMzIoMHhiYWRiZWVmKSwgcmVpbnRlcnByZXRfY2FzdDxjaGFy
Kj4oJm1faml0LnZtKCktPnRvcENhbGxGcmFtZSkgKyBpICogNCk7CisgICAgICAgICAgICBtX2pp
dC5zdG9yZTMyKFRydXN0ZWRJbW0zMigweGJhZGJlZWYpLCByZWludGVycHJldF9jYXN0PGNoYXIq
Pigmdm0oKS50b3BDYWxsRnJhbWUpICsgaSAqIDQpOwogICAgIH0KICNlbHNlCiAgICAgdm9pZCBw
cmVwYXJlRm9yRXh0ZXJuYWxDYWxsKCkgeyB9CkBAIC0xNTE4LDcgKzE1MTgsNyBAQCBwdWJsaWM6
CiAgICAgICAgIEdQUlJlZyByZXN1bHRHUFIsIFN0cnVjdHVyZVR5cGUgc3RydWN0dXJlLCBTdG9y
YWdlVHlwZSBzdG9yYWdlLCBHUFJSZWcgc2NyYXRjaEdQUjEsCiAgICAgICAgIEdQUlJlZyBzY3Jh
dGNoR1BSMiwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBzbG93UGF0aCwgc2l6ZV90IHNpemUp
CiAgICAgewotICAgICAgICBtX2ppdC5lbWl0QWxsb2NhdGVKU09iamVjdFdpdGhLbm93blNpemU8
Q2xhc3NUeXBlPigqbV9qaXQudm0oKSwgcmVzdWx0R1BSLCBzdHJ1Y3R1cmUsIHN0b3JhZ2UsIHNj
cmF0Y2hHUFIxLCBzY3JhdGNoR1BSMiwgc2xvd1BhdGgsIHNpemUpOworICAgICAgICBtX2ppdC5l
bWl0QWxsb2NhdGVKU09iamVjdFdpdGhLbm93blNpemU8Q2xhc3NUeXBlPih2bSgpLCByZXN1bHRH
UFIsIHN0cnVjdHVyZSwgc3RvcmFnZSwgc2NyYXRjaEdQUjEsIHNjcmF0Y2hHUFIyLCBzbG93UGF0
aCwgc2l6ZSk7CiAgICAgfQogCiAgICAgLy8gQ29udmVuaWVuY2UgYWxsb2NhdG9yIGZvciBhIGJ1
aWx0LWluIG9iamVjdC4KQEAgLTE1MjYsMjAgKzE1MjYsMjAgQEAgcHVibGljOgogICAgIHZvaWQg
ZW1pdEFsbG9jYXRlSlNPYmplY3QoR1BSUmVnIHJlc3VsdEdQUiwgU3RydWN0dXJlVHlwZSBzdHJ1
Y3R1cmUsIFN0b3JhZ2VUeXBlIHN0b3JhZ2UsCiAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSMSwg
R1BSUmVnIHNjcmF0Y2hHUFIyLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QmIHNsb3dQYXRoKQog
ICAgIHsKLSAgICAgICAgbV9qaXQuZW1pdEFsbG9jYXRlSlNPYmplY3Q8Q2xhc3NUeXBlPigqbV9q
aXQudm0oKSwgcmVzdWx0R1BSLCBzdHJ1Y3R1cmUsIHN0b3JhZ2UsIHNjcmF0Y2hHUFIxLCBzY3Jh
dGNoR1BSMiwgc2xvd1BhdGgpOworICAgICAgICBtX2ppdC5lbWl0QWxsb2NhdGVKU09iamVjdDxD
bGFzc1R5cGU+KHZtKCksIHJlc3VsdEdQUiwgc3RydWN0dXJlLCBzdG9yYWdlLCBzY3JhdGNoR1BS
MSwgc2NyYXRjaEdQUjIsIHNsb3dQYXRoKTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgQ2xhc3NUeXBlLCB0eXBlbmFtZSBTdHJ1Y3R1cmVUeXBlPiAvLyBTdHJ1Y3R1cmVUeXBlIGFu
ZCBTdG9yYWdlVHlwZSBjYW4gYmUgR1BSIG9yIEltbVB0ci4KICAgICB2b2lkIGVtaXRBbGxvY2F0
ZVZhcmlhYmxlU2l6ZWRKU09iamVjdChHUFJSZWcgcmVzdWx0R1BSLCBTdHJ1Y3R1cmVUeXBlIHN0
cnVjdHVyZSwgR1BSUmVnIGFsbG9jYXRpb25TaXplLCBHUFJSZWcgc2NyYXRjaEdQUjEsIEdQUlJl
ZyBzY3JhdGNoR1BSMiwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBzbG93UGF0aCkKICAgICB7
Ci0gICAgICAgIG1faml0LmVtaXRBbGxvY2F0ZVZhcmlhYmxlU2l6ZWRKU09iamVjdDxDbGFzc1R5
cGU+KCptX2ppdC52bSgpLCByZXN1bHRHUFIsIHN0cnVjdHVyZSwgYWxsb2NhdGlvblNpemUsIHNj
cmF0Y2hHUFIxLCBzY3JhdGNoR1BSMiwgc2xvd1BhdGgpOworICAgICAgICBtX2ppdC5lbWl0QWxs
b2NhdGVWYXJpYWJsZVNpemVkSlNPYmplY3Q8Q2xhc3NUeXBlPih2bSgpLCByZXN1bHRHUFIsIHN0
cnVjdHVyZSwgYWxsb2NhdGlvblNpemUsIHNjcmF0Y2hHUFIxLCBzY3JhdGNoR1BSMiwgc2xvd1Bh
dGgpOwogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENsYXNzVHlwZT4KICAgICB2b2lk
IGVtaXRBbGxvY2F0ZURlc3RydWN0aWJsZU9iamVjdChHUFJSZWcgcmVzdWx0R1BSLCBSZWdpc3Rl
cmVkU3RydWN0dXJlIHN0cnVjdHVyZSwgCiAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSMSwgR1BS
UmVnIHNjcmF0Y2hHUFIyLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QmIHNsb3dQYXRoKQogICAg
IHsKLSAgICAgICAgbV9qaXQuZW1pdEFsbG9jYXRlRGVzdHJ1Y3RpYmxlT2JqZWN0PENsYXNzVHlw
ZT4oKm1faml0LnZtKCksIHJlc3VsdEdQUiwgc3RydWN0dXJlLmdldCgpLCBzY3JhdGNoR1BSMSwg
c2NyYXRjaEdQUjIsIHNsb3dQYXRoKTsKKyAgICAgICAgbV9qaXQuZW1pdEFsbG9jYXRlRGVzdHJ1
Y3RpYmxlT2JqZWN0PENsYXNzVHlwZT4odm0oKSwgcmVzdWx0R1BSLCBzdHJ1Y3R1cmUuZ2V0KCks
IHNjcmF0Y2hHUFIxLCBzY3JhdGNoR1BSMiwgc2xvd1BhdGgpOwogICAgIH0KIAogICAgIHZvaWQg
ZW1pdEFsbG9jYXRlUmF3T2JqZWN0KEdQUlJlZyByZXN1bHRHUFIsIFJlZ2lzdGVyZWRTdHJ1Y3R1
cmUsIEdQUlJlZyBzdG9yYWdlR1BSLCB1bnNpZ25lZCBudW1FbGVtZW50cywgdW5zaWduZWQgdmVj
dG9yTGVuZ3RoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5jcHAJ
KHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTEtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQwLDE1ICs0MCwxNSBAQAogCiBuYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIERGRyB7CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gb3NyRXhpdFRodW5rR2VuZXJhdG9yKFZNKiB2bSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gb3NyRXhpdFRodW5rR2VuZXJhdG9yKFZNJiB2bSkKIHsKICAgICBNYWNy
b0Fzc2VtYmxlciBqaXQ7Ci0gICAgaml0LnByb2JlKE9TUkV4aXQ6OmV4ZWN1dGVPU1JFeGl0LCB2
bSk7CisgICAgaml0LnByb2JlKE9TUkV4aXQ6OmV4ZWN1dGVPU1JFeGl0LCAmdm0pOwogICAgIExp
bmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQpOwogICAgIHJldHVybiBG
SU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgIkRGRyBPU1IgZXhpdCB0
aHVuayIpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9zckV4
aXRHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPiBvc3JFeGl0R2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKFZNJiB2bSkK
IHsKICAgICBNYWNyb0Fzc2VtYmxlciBqaXQ7CiAKQEAgLTU2LDcgKzU2LDcgQEAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvcwogICAgIGFkanVzdEZyYW1lQW5kU3RhY2tJ
bk9TUkV4aXRDb21waWxlclRodW5rPERGRzo6SklUQ29kZT4oaml0LCB2bSwgSklUVHlwZTo6REZH
SklUKTsKICAgICAKICAgICBzaXplX3Qgc2NyYXRjaFNpemUgPSBzaXplb2YoRW5jb2RlZEpTVmFs
dWUpICogKEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzICsgRlBSSW5mbzo6bnVtYmVyT2ZSZWdp
c3RlcnMpOwotICAgIFNjcmF0Y2hCdWZmZXIqIHNjcmF0Y2hCdWZmZXIgPSB2bS0+c2NyYXRjaEJ1
ZmZlckZvclNpemUoc2NyYXRjaFNpemUpOworICAgIFNjcmF0Y2hCdWZmZXIqIHNjcmF0Y2hCdWZm
ZXIgPSB2bS5zY3JhdGNoQnVmZmVyRm9yU2l6ZShzY3JhdGNoU2l6ZSk7CiAgICAgRW5jb2RlZEpT
VmFsdWUqIGJ1ZmZlciA9IHN0YXRpY19jYXN0PEVuY29kZWRKU1ZhbHVlKj4oc2NyYXRjaEJ1ZmZl
ci0+ZGF0YUJ1ZmZlcigpKTsKICAgICAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgR1BS
SW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7ICsraSkgewpAQCAtOTksNyArOTksNyBAQCBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9zCiAjZW5kaWYKICAgICB9CiAKLSAgICBq
aXQuZmFySnVtcChNYWNyb0Fzc2VtYmxlcjo6QWJzb2x1dGVBZGRyZXNzKCZ2bS0+b3NyRXhpdEp1
bXBEZXN0aW5hdGlvbiksIE9TUkV4aXRQdHJUYWcpOworICAgIGppdC5mYXJKdW1wKE1hY3JvQXNz
ZW1ibGVyOjpBYnNvbHV0ZUFkZHJlc3MoJnZtLm9zckV4aXRKdW1wRGVzdGluYXRpb24pLCBPU1JF
eGl0UHRyVGFnKTsKIAogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhV
TktfSUQpOwogICAgIApAQCAtMTA4LDcgKzEwOCw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gb3MKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwg
SklUVGh1bmtQdHJUYWcsICJERkcgT1NSIGV4aXQgZ2VuZXJhdGlvbiB0aHVuayIpOwogfQogCi1N
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9zckVudHJ5VGh1bmtHZW5lcmF0
b3IoVk0qIHZtKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvc3JFbnRy
eVRodW5rR2VuZXJhdG9yKFZNJiB2bSkKIHsKICAgICBBc3NlbWJseUhlbHBlcnMgaml0KG51bGxw
dHIpOwogCkBAIC0xNDEsNyArMTQxLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiBvcwogICAgIGppdC5hYm9ydFdpdGhSZWFzb24oREZHVW5yZWFzb25hYmxlT1NSRW50
cnlKdW1wRGVzdGluYXRpb24pOwogCiAgICAgb2subGluaygmaml0KTsKLSAgICBqaXQucmVzdG9y
ZUNhbGxlZVNhdmVzRnJvbUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bS0+dG9wRW50cnlG
cmFtZSk7CisgICAgaml0LnJlc3RvcmVDYWxsZWVTYXZlc0Zyb21FbnRyeUZyYW1lQ2FsbGVlU2F2
ZXNCdWZmZXIodm0udG9wRW50cnlGcmFtZSk7CiAgICAgaml0LmVtaXRNYXRlcmlhbGl6ZVRhZ0No
ZWNrUmVnaXN0ZXJzKCk7CiAKICAgICBqaXQuZmFySnVtcChHUFJJbmZvOjpyZWdUMSwgR1BSSW5m
bzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdUaHVua3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Ro
dW5rcy5oCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1RodW5rcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMS0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzUsOSArMzUsOSBAQCBjbGFzcyBWTTsKIAog
bmFtZXNwYWNlIERGRyB7CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
b3NyRXhpdFRodW5rR2VuZXJhdG9yKFZNKik7Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IG9zckV4aXRHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IoVk0qKTsKLU1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3NyRW50cnlUaHVua0dlbmVyYXRvcihWTSop
OworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvc3JFeGl0VGh1bmtHZW5l
cmF0b3IoVk0mKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3NyRXhp
dEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcihWTSYpOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBvc3JFbnRyeVRodW5rR2VuZXJhdG9yKFZNJik7CiAKIH0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpERkcKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUb0ZU
TEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENv
bXBpbGF0aW9uQ2FsbGJhY2suY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJh
Y2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTc0LDcgKzc0LDcgQEAgdm9pZCBUb0ZUTEZvck9TUkVudHJ5
RGVmZXJyZWRDb21waWxhdGlvbgogICAgICAgICAKICAgICBzd2l0Y2ggKHJlc3VsdCkgewogICAg
IGNhc2UgQ29tcGlsYXRpb25TdWNjZXNzZnVsOiB7Ci0gICAgICAgIGppdENvZGUtPnNldE9TUkVu
dHJ5QmxvY2soKmNvZGVCbG9jay0+dm0oKSwgcHJvZmlsZWRERkdDb2RlQmxvY2ssIGNvZGVCbG9j
ayk7CisgICAgICAgIGppdENvZGUtPnNldE9TUkVudHJ5QmxvY2soY29kZUJsb2NrLT52bSgpLCBw
cm9maWxlZERGR0NvZGVCbG9jaywgY29kZUJsb2NrKTsKICAgICAgICAgdW5zaWduZWQgb3NyRW50
cnlCeXRlY29kZSA9IGNvZGVCbG9jay0+aml0Q29kZSgpLT5mdGxGb3JPU1JFbnRyeSgpLT5ieXRl
Y29kZUluZGV4KCk7CiAgICAgICAgIGppdENvZGUtPnRpZXJVcEVudHJ5VHJpZ2dlcnMuc2V0KG9z
ckVudHJ5Qnl0ZWNvZGUsIEpJVENvZGU6OlRyaWdnZXJSZWFzb246OkNvbXBpbGF0aW9uRG9uZSk7
CiAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3Jr
bGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3Jr
bGlzdC5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHV29ya2xpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzgwLDcgKzM4MCw3IEBAIHZvaWQg
V29ya2xpc3Q6OnJlc3VtZUFsbFRocmVhZHMoKQogCiB2b2lkIFdvcmtsaXN0Ojp2aXNpdFdlYWtS
ZWZlcmVuY2VzKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewotICAgIFZNKiB2bSA9IHZpc2l0b3Iu
aGVhcCgpLT52bSgpOworICAgIFZNKiB2bSA9ICZ2aXNpdG9yLmhlYXAoKS0+dm0oKTsKICAgICB7
CiAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKCptX2xvY2spOwogICAgICAgICBmb3IgKFBsYW5N
YXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX3BsYW5zLmJlZ2luKCk7IGl0ZXIgIT0gbV9wbGFucy5lbmQo
KTsgKytpdGVyKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZH
VG9CMy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dl
ckRGR1RvQjMuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY4NjksNyArNjg2OSw3
IEBAIHByaXZhdGU6CiAgICAgICAgIG1fb3V0LmJyYW5jaChtX291dC5pc1plcm8zMihmbGFnc0Fu
ZExlbmd0aC5sZW5ndGgpLCByYXJlbHkoZW1wdHlDYXNlKSwgdXN1YWxseShjb250aW51YXRpb24p
KTsKIAogICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGVtcHR5
Q2FzZSwgc2xvd1BhdGgpOwotICAgICAgICBWYWx1ZUZyb21CbG9jayBlbXB0eVJlc3VsdCA9IG1f
b3V0LmFuY2hvcih3ZWFrUG9pbnRlcihqc0VtcHR5U3RyaW5nKCZtX2dyYXBoLm1fdm0pKSk7Cisg
ICAgICAgIFZhbHVlRnJvbUJsb2NrIGVtcHR5UmVzdWx0ID0gbV9vdXQuYW5jaG9yKHdlYWtQb2lu
dGVyKGpzRW1wdHlTdHJpbmcobV9ncmFwaC5tX3ZtKSkpOwogICAgICAgICBtX291dC5qdW1wKGNv
bnRpbnVhdGlvbik7CiAgICAgICAgIAogICAgICAgICBtX291dC5hcHBlbmRUbyhzbG93UGF0aCwg
Y29udGludWF0aW9uKTsKQEAgLTEyMjgyLDcgKzEyMjgyLDcgQEAgcHJpdmF0ZToKICAgICAgICAg
VmVjdG9yPFZhbHVlRnJvbUJsb2NrLCA1PiByZXN1bHRzOwogCiAgICAgICAgIG1fb3V0LmFwcGVu
ZFRvKGVtcHR5Q2FzZSwgbm90RW1wdHlDYXNlKTsKLSAgICAgICAgcmVzdWx0cy5hcHBlbmQobV9v
dXQuYW5jaG9yKHdlYWtQb2ludGVyKGpzRW1wdHlTdHJpbmcoJnZtKCkpKSkpOworICAgICAgICBy
ZXN1bHRzLmFwcGVuZChtX291dC5hbmNob3Iod2Vha1BvaW50ZXIoanNFbXB0eVN0cmluZyh2bSgp
KSkpKTsKICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwogCiAgICAgICAgIG1fb3V0
LmFwcGVuZFRvKG5vdEVtcHR5Q2FzZSwgb25lQ2hhckNhc2UpOwpAQCAtMTM4ODAsNyArMTM4ODAs
NyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBlZGdlLCBDZWxsQ2FzZVNwZWN1bGF0
ZXNPYmplY3QsIFNwZWN1bGF0ZU51bGxPclVuZGVmaW5lZCwKICAgICAgICAgICAgICAgICAgICAg
TWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKSk7CiAgICAgICAgIGNhc2UgU3RyaW5nVXNlOgotICAg
ICAgICAgICAgcmV0dXJuIG1fb3V0Lm5vdEVxdWFsKGxvd1N0cmluZyhlZGdlKSwgd2Vha1BvaW50
ZXIoanNFbXB0eVN0cmluZygmbV9ncmFwaC5tX3ZtKSkpOworICAgICAgICAgICAgcmV0dXJuIG1f
b3V0Lm5vdEVxdWFsKGxvd1N0cmluZyhlZGdlKSwgd2Vha1BvaW50ZXIoanNFbXB0eVN0cmluZyht
X2dyYXBoLm1fdm0pKSk7CiAgICAgICAgIGNhc2UgU3RyaW5nT3JPdGhlclVzZTogewogICAgICAg
ICAgICAgTFZhbHVlIHZhbHVlID0gbG93SlNWYWx1ZShlZGdlLCBNYW51YWxPcGVyYW5kU3BlY3Vs
YXRpb24pOwogCkBAIC0xMzg5Miw3ICsxMzg5Miw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAK
ICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oY2VsbENh
c2UsIG5vdENlbGxDYXNlKTsKICAgICAgICAgICAgIEZUTF9UWVBFX0NIRUNLKGpzVmFsdWVWYWx1
ZSh2YWx1ZSksIGVkZ2UsICh+U3BlY0NlbGxDaGVjaykgfCBTcGVjU3RyaW5nLCBpc05vdFN0cmlu
Zyh2YWx1ZSkpOwotICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgc3RyaW5nUmVzdWx0ID0gbV9v
dXQuYW5jaG9yKG1fb3V0Lm5vdEVxdWFsKHZhbHVlLCB3ZWFrUG9pbnRlcihqc0VtcHR5U3RyaW5n
KCZtX2dyYXBoLm1fdm0pKSkpOworICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgc3RyaW5nUmVz
dWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0Lm5vdEVxdWFsKHZhbHVlLCB3ZWFrUG9pbnRlcihqc0Vt
cHR5U3RyaW5nKG1fZ3JhcGgubV92bSkpKSk7CiAgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRp
bnVhdGlvbik7CiAKICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKG5vdENlbGxDYXNlLCBjb250
aW51YXRpb24pOwpAQCAtMTM5NDksNyArMTM5NDksNyBAQCBwcml2YXRlOgogICAgICAgICAgICAg
ICAgIHVuc3VyZShiaWdJbnRDYXNlKSwgdW5zdXJlKG5vdFN0cmluZ09yQmlnSW50Q2FzZSkpOwog
CiAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhzdHJpbmdDYXNlLCBiaWdJbnRDYXNlKTsKLSAg
ICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKG1fb3V0LmFuY2hvcihtX291dC5ub3RFcXVhbCh2YWx1
ZSwgd2Vha1BvaW50ZXIoanNFbXB0eVN0cmluZygmbV9ncmFwaC5tX3ZtKSkpKSk7CisgICAgICAg
ICAgICByZXN1bHRzLmFwcGVuZChtX291dC5hbmNob3IobV9vdXQubm90RXF1YWwodmFsdWUsIHdl
YWtQb2ludGVyKGpzRW1wdHlTdHJpbmcobV9ncmFwaC5tX3ZtKSkpKSk7CiAgICAgICAgICAgICBt
X291dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAKICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGJp
Z0ludENhc2UsIG5vdFN0cmluZ09yQmlnSW50Q2FzZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTFRodW5rcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExUaHVua3MuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTFRodW5rcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3LDcg
QEAgZW51bSBjbGFzcyBGcmFtZUFuZFN0YWNrQWRqdXN0bWVudFJlcXVpcgogfTsKIAogc3RhdGlj
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gZ2VuZXJpY0dlbmVyYXRpb25U
aHVua0dlbmVyYXRvcigKLSAgICBWTSogdm0sIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4g
Z2VuZXJhdGlvbkZ1bmN0aW9uLCBQdHJUYWcgcmVzdWx0VGFnLCBjb25zdCBjaGFyKiBuYW1lLCB1
bnNpZ25lZCBleHRyYVBvcHNUb1Jlc3RvcmUsIEZyYW1lQW5kU3RhY2tBZGp1c3RtZW50UmVxdWly
ZW1lbnQgZnJhbWVBbmRTdGFja0FkanVzdG1lbnRSZXF1aXJlbWVudCkKKyAgICBWTSYgdm0sIEZ1
bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZ2VuZXJhdGlvbkZ1bmN0aW9uLCBQdHJUYWcgcmVz
dWx0VGFnLCBjb25zdCBjaGFyKiBuYW1lLCB1bnNpZ25lZCBleHRyYVBvcHNUb1Jlc3RvcmUsIEZy
YW1lQW5kU3RhY2tBZGp1c3RtZW50UmVxdWlyZW1lbnQgZnJhbWVBbmRTdGFja0FkanVzdG1lbnRS
ZXF1aXJlbWVudCkKIHsKICAgICBBc3NlbWJseUhlbHBlcnMgaml0KG51bGxwdHIpOwogCkBAIC03
Myw3ICs3Myw3IEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHIKICAg
ICAgICAgbnVtYmVyT2ZSZXF1aXJlZFBvcHMrKzsKICAgICB9IHdoaWxlIChzdGFja01pc2FsaWdu
bWVudCAlIHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSk7CiAgICAgCi0gICAgU2NyYXRjaEJ1ZmZlciog
c2NyYXRjaEJ1ZmZlciA9IHZtLT5zY3JhdGNoQnVmZmVyRm9yU2l6ZShyZXF1aXJlZFNjcmF0Y2hN
ZW1vcnlTaXplSW5CeXRlcygpKTsKKyAgICBTY3JhdGNoQnVmZmVyKiBzY3JhdGNoQnVmZmVyID0g
dm0uc2NyYXRjaEJ1ZmZlckZvclNpemUocmVxdWlyZWRTY3JhdGNoTWVtb3J5U2l6ZUluQnl0ZXMo
KSk7CiAgICAgY2hhciogYnVmZmVyID0gc3RhdGljX2Nhc3Q8Y2hhcio+KHNjcmF0Y2hCdWZmZXIt
PmRhdGFCdWZmZXIoKSk7CiAgICAgCiAgICAgc2F2ZUFsbFJlZ2lzdGVycyhqaXQsIGJ1ZmZlcik7
CkBAIC0xMjgsMTQgKzEyOCwxNCBAQCBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyCiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRy
VGFnLCAiJXMiLCBuYW1lKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBvc3JFeGl0R2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKFZNKiB2bSkKK01hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3NyRXhpdEdlbmVyYXRpb25UaHVua0dlbmVyYXRv
cihWTSYgdm0pCiB7CiAgICAgdW5zaWduZWQgZXh0cmFQb3BzVG9SZXN0b3JlID0gMDsKICAgICBy
ZXR1cm4gZ2VuZXJpY0dlbmVyYXRpb25UaHVua0dlbmVyYXRvcigKICAgICAgICAgdm0sIGNvbXBp
bGVGVExPU1JFeGl0LCBPU1JFeGl0UHRyVGFnLCAiRlRMIE9TUiBleGl0IGdlbmVyYXRpb24gdGh1
bmsiLCBleHRyYVBvcHNUb1Jlc3RvcmUsIEZyYW1lQW5kU3RhY2tBZGp1c3RtZW50UmVxdWlyZW1l
bnQ6Ok5lZWRlZCk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
bGF6eVNsb3dQYXRoR2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKFZNKiB2bSkKK01hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gbGF6eVNsb3dQYXRoR2VuZXJhdGlvblRodW5rR2Vu
ZXJhdG9yKFZNJiB2bSkKIHsKICAgICB1bnNpZ25lZCBleHRyYVBvcHNUb1Jlc3RvcmUgPSAxOwog
ICAgIHJldHVybiBnZW5lcmljR2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExUaHVua3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTFRodW5rcy5oCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTFRodW5rcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzgsOCAr
MzgsOCBAQCBjbGFzcyBWTTsKIAogbmFtZXNwYWNlIEZUTCB7CiAKLU1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gb3NyRXhpdEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcihWTSop
OwotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBsYXp5U2xvd1BhdGhHZW5l
cmF0aW9uVGh1bmtHZW5lcmF0b3IoVk0qKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gb3NyRXhpdEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcihWTSYpOworTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBsYXp5U2xvd1BhdGhHZW5lcmF0aW9uVGh1bmtH
ZW5lcmF0b3IoVk0mKTsKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gc2xv
d1BhdGhDYWxsVGh1bmtHZW5lcmF0b3IoY29uc3QgU2xvd1BhdGhDYWxsS2V5Jik7CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIEtleVR5cGVBcmd1bWVudD4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0NlbGxDb250YWluZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9DZWxsQ29udGFpbmVyLmgJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0NlbGxDb250YWluZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01OCw3ICs1OCw3
IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogICAgIAotICAgIFZNKiB2bSgpIGNvbnN0OworICAg
IFZNJiB2bSgpIGNvbnN0OwogICAgIEhlYXAqIGhlYXAoKSBjb25zdDsKICAgICAKICAgICBleHBs
aWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gISFtX2VuY29kZWRQb2ludGVyOyB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9DZWxsQ29udGFpbmVySW5saW5lcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NlbGxDb250YWluZXJJ
bmxpbmVzLmgJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0NlbGxDb250YWluZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzMsNyArMzMsNyBAQAogCiBu
YW1lc3BhY2UgSlNDIHsKIAotaW5saW5lIFZNKiBDZWxsQ29udGFpbmVyOjp2bSgpIGNvbnN0Citp
bmxpbmUgVk0mIENlbGxDb250YWluZXI6OnZtKCkgY29uc3QKIHsKICAgICBpZiAoaXNMYXJnZUFs
bG9jYXRpb24oKSkKICAgICAgICAgcmV0dXJuIGxhcmdlQWxsb2NhdGlvbigpLnZtKCk7CkBAIC00
Miw3ICs0Miw3IEBAIGlubGluZSBWTSogQ2VsbENvbnRhaW5lcjo6dm0oKSBjb25zdAogCiBpbmxp
bmUgSGVhcCogQ2VsbENvbnRhaW5lcjo6aGVhcCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuICZ2bSgp
LT5oZWFwOworICAgIHJldHVybiAmdm0oKS5oZWFwOwogfQogCiBpbmxpbmUgYm9vbCBDZWxsQ29u
dGFpbmVyOjppc01hcmtlZChIZWFwQ2VsbCogY2VsbCkgY29uc3QKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0NvbXBsZXRlU3Vic3BhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbXBsZXRlU3Vic3BhY2UuY3BwCShyZXZpc2lvbiAyNDkx
MjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db21wbGV0ZVN1YnNwYWNlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTI1LDcgKzEyNSw3IEBAIHZvaWQqIENvbXBsZXRlU3Vic3BhY2U6
OnRyeUFsbG9jYXRlU2xvdygKICAgICBpZiAodmFsaWRhdGVERkdEb2VzR0MpCiAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKHZtLmhlYXAuZXhwZWN0RG9lc0dDKCkpOwogCi0gICAgc2FuaXRpemVTdGFj
a0ZvclZNKCZ2bSk7CisgICAgc2FuaXRpemVTdGFja0ZvclZNKHZtKTsKICAgICAKICAgICBpZiAo
QWxsb2NhdG9yIGFsbG9jYXRvciA9IGFsbG9jYXRvckZvcihzaXplLCBBbGxvY2F0b3JGb3JNb2Rl
OjpFbnN1cmVBbGxvY2F0b3IpKQogICAgICAgICByZXR1cm4gYWxsb2NhdG9yLmFsbG9jYXRlKGRl
ZmVycmFsQ29udGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpSZXR1cm5OdWxsKTsKQEAgLTE2
OSw3ICsxNjksNyBAQCB2b2lkKiBDb21wbGV0ZVN1YnNwYWNlOjpyZWFsbG9jYXRlTGFyZ2VBCiAg
ICAgQVNTRVJUKG9sZEFsbG9jYXRpb24tPmF0dHJpYnV0ZXMoKS5jZWxsS2luZCA9PSBIZWFwQ2Vs
bDo6QXV4aWxpYXJ5KTsKICAgICBBU1NFUlQoc2l6ZSA+IE1hcmtlZFNwYWNlOjpsYXJnZUN1dG9m
Zik7CiAKLSAgICBzYW5pdGl6ZVN0YWNrRm9yVk0oJnZtKTsKKyAgICBzYW5pdGl6ZVN0YWNrRm9y
Vk0odm0pOwogCiAgICAgaWYgKHNpemUgPD0gT3B0aW9uczo6bGFyZ2VBbGxvY2F0aW9uQ3V0b2Zm
KCkKICAgICAgICAgJiYgc2l6ZSA8PSBNYXJrZWRTcGFjZTo6bGFyZ2VDdXRvZmYpIHsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDQWN0aXZpdHlDYWxsYmFjay5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDQWN0aXZpdHlDYWxsYmFjay5oCShy
ZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0FjdGl2aXR5
Q2FsbGJhY2suaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTAsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEwLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02NSw3ICs2NSw3IEBAIHByb3RlY3RlZDoK
ICAgICB2aXJ0dWFsIGRvdWJsZSBnY1RpbWVTbGljZShzaXplX3QgYnl0ZXMpID0gMDsKICAgICB2
aXJ0dWFsIGRvdWJsZSBkZWF0aFJhdGUoSGVhcCYpID0gMDsKIAotICAgIEdDQWN0aXZpdHlDYWxs
YmFjayhWTSogdm0pCisgICAgR0NBY3Rpdml0eUNhbGxiYWNrKFZNJiB2bSkKICAgICAgICAgOiBC
YXNlKHZtKQogICAgICAgICAsIG1fZW5hYmxlZCh0cnVlKQogICAgICAgICAsIG1fZGVsYXkoc19k
ZWNhZGUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0Fzc2VydGlvbnMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0Fzc2VydGlvbnMuaAko
cmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NBc3NlcnRp
b25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAo
QykgMjAxNSBJZ2FsaWEgUy5MLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMzcsNyArMzcsNyBAQAog
CiAjZGVmaW5lIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMob2JqZWN0LCBjbGFzc0luZm8pIGRv
IHtcCiAgICAgQVNTRVJUX0dDX09CSkVDVF9MT09LU19WQUxJRChvYmplY3QpOyBcCi0gICAgUkVM
RUFTRV9BU1NFUlQob2JqZWN0LT5pbmhlcml0cygqb2JqZWN0LT5KU0M6OkpTQ2VsbDo6dm0oKSwg
Y2xhc3NJbmZvKSk7IFwKKyAgICBSRUxFQVNFX0FTU0VSVChvYmplY3QtPmluaGVyaXRzKG9iamVj
dC0+SlNDOjpKU0NlbGw6OnZtKCksIGNsYXNzSW5mbykpOyBcCiB9IHdoaWxlICgwKQogCiAvLyBV
c2VkIHRvIGF2b2lkIHRyaWdnZXJpbmcgLVd1bmRlZmluZWQtYm9vbC1jb252ZXJzaW9uLgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGFuZGxlU2V0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IYW5kbGVTZXQuY3BwCShyZXZpc2lvbiAyNDkx
MjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IYW5kbGVTZXQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMzQsNyArMzQsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotSGFuZGxlU2V0
OjpIYW5kbGVTZXQoVk0qIHZtKQorSGFuZGxlU2V0OjpIYW5kbGVTZXQoVk0mIHZtKQogICAgIDog
bV92bSh2bSkKIHsKICAgICBncm93KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9IYW5kbGVTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9I
YW5kbGVTZXQuaAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSGFuZGxlU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDExLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjUsMTAgKzY1LDEwIEBAIGNsYXNz
IEhhbmRsZVNldCB7CiBwdWJsaWM6CiAgICAgc3RhdGljIEhhbmRsZVNldCogaGVhcEZvcihIYW5k
bGVTbG90KTsKIAotICAgIEhhbmRsZVNldChWTSopOworICAgIEhhbmRsZVNldChWTSYpOwogICAg
IH5IYW5kbGVTZXQoKTsKIAotICAgIFZNKiB2bSgpOworICAgIFZNJiB2bSgpOwogCiAgICAgSGFu
ZGxlU2xvdCBhbGxvY2F0ZSgpOwogICAgIHZvaWQgZGVhbGxvY2F0ZShIYW5kbGVTbG90KTsKQEAg
LTkyLDcgKzkyLDcgQEAgcHJpdmF0ZToKICAgICBib29sIGlzTGl2ZU5vZGUoTm9kZSopOwogI2Vu
ZGlmCiAKLSAgICBWTSogbV92bTsKKyAgICBWTSYgbV92bTsKICAgICBEb3VibHlMaW5rZWRMaXN0
PEhhbmRsZUJsb2NrPiBtX2Jsb2NrTGlzdDsKIAogICAgIFNlbnRpbmVsTGlua2VkTGlzdDxOb2Rl
PiBtX3N0cm9uZ0xpc3Q7CkBAIC0xMDUsNyArMTA1LDcgQEAgaW5saW5lIEhhbmRsZVNldCogSGFu
ZGxlU2V0OjpoZWFwRm9yKEhhbgogICAgIHJldHVybiB0b05vZGUoaGFuZGxlKS0+aGFuZGxlU2V0
KCk7CiB9CiAKLWlubGluZSBWTSogSGFuZGxlU2V0Ojp2bSgpCitpbmxpbmUgVk0mIEhhbmRsZVNl
dDo6dm0oKQogewogICAgIHJldHVybiBtX3ZtOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSGVhcC5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDQsMTcgKzE0NCwxNyBAQCBzaXplX3Qg
cHJvcG9ydGlvbmFsSGVhcFNpemUoc2l6ZV90IGhlYXBTCiAgICAgcmV0dXJuIE9wdGlvbnM6Omxh
cmdlSGVhcEdyb3d0aEZhY3RvcigpICogaGVhcFNpemU7CiB9CiAKLWJvb2wgaXNWYWxpZFNoYXJl
ZEluc3RhbmNlVGhyZWFkU3RhdGUoVk0qIHZtKQorYm9vbCBpc1ZhbGlkU2hhcmVkSW5zdGFuY2VU
aHJlYWRTdGF0ZShWTSYgdm0pCiB7Ci0gICAgcmV0dXJuIHZtLT5jdXJyZW50VGhyZWFkSXNIb2xk
aW5nQVBJTG9jaygpOworICAgIHJldHVybiB2bS5jdXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9j
aygpOwogfQogCi1ib29sIGlzVmFsaWRUaHJlYWRTdGF0ZShWTSogdm0pCitib29sIGlzVmFsaWRU
aHJlYWRTdGF0ZShWTSYgdm0pCiB7Ci0gICAgaWYgKHZtLT5hdG9tU3RyaW5nVGFibGUoKSAhPSBU
aHJlYWQ6OmN1cnJlbnQoKS5hdG9tU3RyaW5nVGFibGUoKSkKKyAgICBpZiAodm0uYXRvbVN0cmlu
Z1RhYmxlKCkgIT0gVGhyZWFkOjpjdXJyZW50KCkuYXRvbVN0cmluZ1RhYmxlKCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIGlmICh2bS0+aXNTaGFyZWRJbnN0YW5jZSgpICYmICFpc1Zh
bGlkU2hhcmVkSW5zdGFuY2VUaHJlYWRTdGF0ZSh2bSkpCisgICAgaWYgKHZtLmlzU2hhcmVkSW5z
dGFuY2UoKSAmJiAhaXNWYWxpZFNoYXJlZEluc3RhbmNlVGhyZWFkU3RhdGUodm0pKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTI4Miw3ICsyODIsNyBAQCBw
cml2YXRlOgogICAgIEhlYXAmIG1faGVhcDsKIH07CiAKLUhlYXA6OkhlYXAoVk0qIHZtLCBIZWFw
VHlwZSBoZWFwVHlwZSkKK0hlYXA6OkhlYXAoVk0mIHZtLCBIZWFwVHlwZSBoZWFwVHlwZSkKICAg
ICA6IG1faGVhcFR5cGUoaGVhcFR5cGUpCiAgICAgLCBtX3JhbVNpemUoT3B0aW9uczo6Zm9yY2VS
QU1TaXplKCkgPyBPcHRpb25zOjpmb3JjZVJBTVNpemUoKSA6IHJhbVNpemUoKSkKICAgICAsIG1f
bWluQnl0ZXNQZXJDeWNsZShtaW5IZWFwU2l6ZShtX2hlYXBUeXBlLCBtX3JhbVNpemUpKQpAQCAt
NDAyLDcgKzQwMiw3IEBAIHZvaWQgSGVhcDo6bGFzdENoYW5jZVRvRmluYWxpemUoKQogICAgIAog
ICAgIG1faXNTaHV0dGluZ0Rvd24gPSB0cnVlOwogICAgIAotICAgIFJFTEVBU0VfQVNTRVJUKCFt
X3ZtLT5lbnRyeVNjb3BlKTsKKyAgICBSRUxFQVNFX0FTU0VSVCghbV92bS5lbnRyeVNjb3BlKTsK
ICAgICBSRUxFQVNFX0FTU0VSVChtX211dGF0b3JTdGF0ZSA9PSBNdXRhdG9yU3RhdGU6OlJ1bm5p
bmcpOwogICAgIAogICAgIGlmIChtX2NvbGxlY3RDb250aW51b3VzbHlUaHJlYWQpIHsKQEAgLTQ5
OCw3ICs0OTgsNyBAQCB2b2lkIEhlYXA6OnJlbGVhc2VEZWxheWVkUmVsZWFzZWRPYmplY3RzCiAg
ICAgLy8gYW5kIHVzZSBhIHRlbXAgVmVjdG9yIGZvciB0aGUgYWN0dWFsIHJlbGVhc2luZy4KICAg
ICBpZiAoIW1fZGVsYXllZFJlbGVhc2VSZWN1cnNpb25Db3VudCsrKSB7CiAgICAgICAgIHdoaWxl
ICghbV9kZWxheWVkUmVsZWFzZU9iamVjdHMuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBBU1NF
UlQobV92bS0+Y3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7CisgICAgICAgICAgICBB
U1NFUlQobV92bS5jdXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsKIAogICAgICAgICAg
ICAgYXV0byBvYmplY3RzVG9SZWxlYXNlID0gV1RGTW92ZShtX2RlbGF5ZWRSZWxlYXNlT2JqZWN0
cyk7CiAKQEAgLTU3MSw3ICs1NzEsNyBAQCB2b2lkIEhlYXA6OnJlcG9ydEFiYW5kb25lZE9iamVj
dEdyYXBoKCkKIHZvaWQgSGVhcDo6cHJvdGVjdChKU1ZhbHVlIGspCiB7CiAgICAgQVNTRVJUKGsp
OwotICAgIEFTU0VSVChtX3ZtLT5jdXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsKKyAg
ICBBU1NFUlQobV92bS5jdXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsKIAogICAgIGlm
ICghay5pc0NlbGwoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNTgyLDcgKzU4Miw3IEBAIHZvaWQg
SGVhcDo6cHJvdGVjdChKU1ZhbHVlIGspCiBib29sIEhlYXA6OnVucHJvdGVjdChKU1ZhbHVlIGsp
CiB7CiAgICAgQVNTRVJUKGspOwotICAgIEFTU0VSVChtX3ZtLT5jdXJyZW50VGhyZWFkSXNIb2xk
aW5nQVBJTG9jaygpKTsKKyAgICBBU1NFUlQobV92bS5jdXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJ
TG9jaygpKTsKIAogICAgIGlmICghay5pc0NlbGwoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpA
QCAtNjAzLDM0ICs2MDMsMzQgQEAgdm9pZCBIZWFwOjpmaW5hbGl6ZU1hcmtlZFVuY29uZGl0aW9u
YWxGaQogewogICAgIGNlbGxTZXQuZm9yRWFjaE1hcmtlZENlbGwoCiAgICAgICAgIFsmXSAoSGVh
cENlbGwqIGNlbGwsIEhlYXBDZWxsOjpLaW5kKSB7Ci0gICAgICAgICAgICBzdGF0aWNfY2FzdDxD
ZWxsVHlwZSo+KGNlbGwpLT5maW5hbGl6ZVVuY29uZGl0aW9uYWxseSgqdm0oKSk7CisgICAgICAg
ICAgICBzdGF0aWNfY2FzdDxDZWxsVHlwZSo+KGNlbGwpLT5maW5hbGl6ZVVuY29uZGl0aW9uYWxs
eSh2bSgpKTsKICAgICAgICAgfSk7CiB9CiAKIHZvaWQgSGVhcDo6ZmluYWxpemVVbmNvbmRpdGlv
bmFsRmluYWxpemVycygpCiB7Ci0gICAgdm0oKS0+YnVpbHRpbkV4ZWN1dGFibGVzKCktPmZpbmFs
aXplVW5jb25kaXRpb25hbGx5KCk7Ci0gICAgZmluYWxpemVNYXJrZWRVbmNvbmRpdGlvbmFsRmlu
YWxpemVyczxGdW5jdGlvbkV4ZWN1dGFibGU+KHZtKCktPmZ1bmN0aW9uRXhlY3V0YWJsZVNwYWNl
LnNwYWNlKTsKLSAgICBmaW5hbGl6ZU1hcmtlZFVuY29uZGl0aW9uYWxGaW5hbGl6ZXJzPFN5bWJv
bFRhYmxlPih2bSgpLT5zeW1ib2xUYWJsZVNwYWNlKTsKLSAgICB2bSgpLT5mb3JFYWNoQ29kZUJs
b2NrU3BhY2UoCisgICAgdm0oKS5idWlsdGluRXhlY3V0YWJsZXMoKS0+ZmluYWxpemVVbmNvbmRp
dGlvbmFsbHkoKTsKKyAgICBmaW5hbGl6ZU1hcmtlZFVuY29uZGl0aW9uYWxGaW5hbGl6ZXJzPEZ1
bmN0aW9uRXhlY3V0YWJsZT4odm0oKS5mdW5jdGlvbkV4ZWN1dGFibGVTcGFjZS5zcGFjZSk7Cisg
ICAgZmluYWxpemVNYXJrZWRVbmNvbmRpdGlvbmFsRmluYWxpemVyczxTeW1ib2xUYWJsZT4odm0o
KS5zeW1ib2xUYWJsZVNwYWNlKTsKKyAgICB2bSgpLmZvckVhY2hDb2RlQmxvY2tTcGFjZSgKICAg
ICAgICAgWyZdIChhdXRvJiBzcGFjZSkgewogICAgICAgICAgICAgdGhpcy0+ZmluYWxpemVNYXJr
ZWRVbmNvbmRpdGlvbmFsRmluYWxpemVyczxDb2RlQmxvY2s+KHNwYWNlLnNldCk7CiAgICAgICAg
IH0pOwotICAgIGZpbmFsaXplTWFya2VkVW5jb25kaXRpb25hbEZpbmFsaXplcnM8RXhlY3V0YWJs
ZVRvQ29kZUJsb2NrRWRnZT4odm0oKS0+ZXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZXNXaXRoRmlu
YWxpemVycyk7Ci0gICAgZmluYWxpemVNYXJrZWRVbmNvbmRpdGlvbmFsRmluYWxpemVyczxTdHJ1
Y3R1cmVSYXJlRGF0YT4odm0oKS0+c3RydWN0dXJlUmFyZURhdGFTcGFjZSk7Ci0gICAgZmluYWxp
emVNYXJrZWRVbmNvbmRpdGlvbmFsRmluYWxpemVyczxVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJs
ZT4odm0oKS0+dW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGVTcGFjZS5zZXQpOwotICAgIGlmICh2
bSgpLT5tX3dlYWtTZXRTcGFjZSkKLSAgICAgICAgZmluYWxpemVNYXJrZWRVbmNvbmRpdGlvbmFs
RmluYWxpemVyczxKU1dlYWtTZXQ+KCp2bSgpLT5tX3dlYWtTZXRTcGFjZSk7Ci0gICAgaWYgKHZt
KCktPm1fd2Vha01hcFNwYWNlKQotICAgICAgICBmaW5hbGl6ZU1hcmtlZFVuY29uZGl0aW9uYWxG
aW5hbGl6ZXJzPEpTV2Vha01hcD4oKnZtKCktPm1fd2Vha01hcFNwYWNlKTsKLSAgICBpZiAodm0o
KS0+bV93ZWFrT2JqZWN0UmVmU3BhY2UpCi0gICAgICAgIGZpbmFsaXplTWFya2VkVW5jb25kaXRp
b25hbEZpbmFsaXplcnM8SlNXZWFrT2JqZWN0UmVmPigqdm0oKS0+bV93ZWFrT2JqZWN0UmVmU3Bh
Y2UpOwotICAgIGlmICh2bSgpLT5tX2Vycm9ySW5zdGFuY2VTcGFjZSkKLSAgICAgICAgZmluYWxp
emVNYXJrZWRVbmNvbmRpdGlvbmFsRmluYWxpemVyczxFcnJvckluc3RhbmNlPigqdm0oKS0+bV9l
cnJvckluc3RhbmNlU3BhY2UpOworICAgIGZpbmFsaXplTWFya2VkVW5jb25kaXRpb25hbEZpbmFs
aXplcnM8RXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZT4odm0oKS5leGVjdXRhYmxlVG9Db2RlQmxv
Y2tFZGdlc1dpdGhGaW5hbGl6ZXJzKTsKKyAgICBmaW5hbGl6ZU1hcmtlZFVuY29uZGl0aW9uYWxG
aW5hbGl6ZXJzPFN0cnVjdHVyZVJhcmVEYXRhPih2bSgpLnN0cnVjdHVyZVJhcmVEYXRhU3BhY2Up
OworICAgIGZpbmFsaXplTWFya2VkVW5jb25kaXRpb25hbEZpbmFsaXplcnM8VW5saW5rZWRGdW5j
dGlvbkV4ZWN1dGFibGU+KHZtKCkudW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGVTcGFjZS5zZXQp
OworICAgIGlmICh2bSgpLm1fd2Vha1NldFNwYWNlKQorICAgICAgICBmaW5hbGl6ZU1hcmtlZFVu
Y29uZGl0aW9uYWxGaW5hbGl6ZXJzPEpTV2Vha1NldD4oKnZtKCkubV93ZWFrU2V0U3BhY2UpOwor
ICAgIGlmICh2bSgpLm1fd2Vha01hcFNwYWNlKQorICAgICAgICBmaW5hbGl6ZU1hcmtlZFVuY29u
ZGl0aW9uYWxGaW5hbGl6ZXJzPEpTV2Vha01hcD4oKnZtKCkubV93ZWFrTWFwU3BhY2UpOworICAg
IGlmICh2bSgpLm1fd2Vha09iamVjdFJlZlNwYWNlKQorICAgICAgICBmaW5hbGl6ZU1hcmtlZFVu
Y29uZGl0aW9uYWxGaW5hbGl6ZXJzPEpTV2Vha09iamVjdFJlZj4oKnZtKCkubV93ZWFrT2JqZWN0
UmVmU3BhY2UpOworICAgIGlmICh2bSgpLm1fZXJyb3JJbnN0YW5jZVNwYWNlKQorICAgICAgICBm
aW5hbGl6ZU1hcmtlZFVuY29uZGl0aW9uYWxGaW5hbGl6ZXJzPEVycm9ySW5zdGFuY2U+KCp2bSgp
Lm1fZXJyb3JJbnN0YW5jZVNwYWNlKTsKIAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKLSAgICBp
ZiAodm0oKS0+bV93ZWJBc3NlbWJseUNvZGVCbG9ja1NwYWNlKQotICAgICAgICBmaW5hbGl6ZU1h
cmtlZFVuY29uZGl0aW9uYWxGaW5hbGl6ZXJzPEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s+KCp2bSgp
LT5tX3dlYkFzc2VtYmx5Q29kZUJsb2NrU3BhY2UpOworICAgIGlmICh2bSgpLm1fd2ViQXNzZW1i
bHlDb2RlQmxvY2tTcGFjZSkKKyAgICAgICAgZmluYWxpemVNYXJrZWRVbmNvbmRpdGlvbmFsRmlu
YWxpemVyczxKU1dlYkFzc2VtYmx5Q29kZUJsb2NrPigqdm0oKS5tX3dlYkFzc2VtYmx5Q29kZUJs
b2NrU3BhY2UpOwogI2VuZGlmCiB9CiAKQEAgLTY0OSw5ICs2NDksOSBAQCB2b2lkIEhlYXA6OmNv
bXBsZXRlQWxsSklUUGxhbnMoKQogICAgIGlmICghVk06OmNhblVzZUpJVCgpKQogICAgICAgICBy
ZXR1cm47CiAjaWYgRU5BQkxFKEpJVCkKLSAgICBKSVRXb3JrbGlzdDo6ZW5zdXJlR2xvYmFsV29y
a2xpc3QoKS5jb21wbGV0ZUFsbEZvclZNKCptX3ZtKTsKKyAgICBKSVRXb3JrbGlzdDo6ZW5zdXJl
R2xvYmFsV29ya2xpc3QoKS5jb21wbGV0ZUFsbEZvclZNKG1fdm0pOwogI2VuZGlmIC8vIEVOQUJM
RShKSVQpCi0gICAgREZHOjpjb21wbGV0ZUFsbFBsYW5zRm9yVk0oKm1fdm0pOworICAgIERGRzo6
Y29tcGxldGVBbGxQbGFuc0ZvclZNKG1fdm0pOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
PgpAQCAtNjU5LDcgKzY1OSw3IEBAIHZvaWQgSGVhcDo6aXRlcmF0ZUV4ZWN1dGluZ0FuZENvbXBp
bGluZ0MKIHsKICAgICBtX2NvZGVCbG9ja3MtPml0ZXJhdGVDdXJyZW50bHlFeGVjdXRpbmcoZnVu
Yyk7CiAgICAgaWYgKFZNOjpjYW5Vc2VKSVQoKSkKLSAgICAgICAgREZHOjppdGVyYXRlQ29kZUJs
b2Nrc0ZvckdDKCptX3ZtLCBmdW5jKTsKKyAgICAgICAgREZHOjppdGVyYXRlQ29kZUJsb2Nrc0Zv
ckdDKG1fdm0sIGZ1bmMpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgpAQCAtNzA4LDcg
KzcwOCw3IEBAIHZvaWQgSGVhcDo6Z2F0aGVyU3RhY2tSb290cyhDb25zZXJ2YXRpdmUKIHZvaWQg
SGVhcDo6Z2F0aGVySlNTdGFja1Jvb3RzKENvbnNlcnZhdGl2ZVJvb3RzJiByb290cykKIHsKICNp
ZiBFTkFCTEUoQ19MT09QKQotICAgIG1fdm0tPmludGVycHJldGVyLT5jbG9vcFN0YWNrKCkuZ2F0
aGVyQ29uc2VydmF0aXZlUm9vdHMocm9vdHMsICptX2ppdFN0dWJSb3V0aW5lcywgKm1fY29kZUJs
b2Nrcyk7CisgICAgbV92bS5pbnRlcnByZXRlci0+Y2xvb3BTdGFjaygpLmdhdGhlckNvbnNlcnZh
dGl2ZVJvb3RzKHJvb3RzLCAqbV9qaXRTdHViUm91dGluZXMsICptX2NvZGVCbG9ja3MpOwogI2Vs
c2UKICAgICBVTlVTRURfUEFSQU0ocm9vdHMpOwogI2VuZGlmCkBAIC03MTksNyArNzE5LDcgQEAg
dm9pZCBIZWFwOjpnYXRoZXJTY3JhdGNoQnVmZmVyUm9vdHMoQ29ucwogI2lmIEVOQUJMRShERkdf
SklUKQogICAgIGlmICghVk06OmNhblVzZUpJVCgpKQogICAgICAgICByZXR1cm47Ci0gICAgbV92
bS0+Z2F0aGVyU2NyYXRjaEJ1ZmZlclJvb3RzKHJvb3RzKTsKKyAgICBtX3ZtLmdhdGhlclNjcmF0
Y2hCdWZmZXJSb290cyhyb290cyk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShyb290cyk7CiAj
ZW5kaWYKQEAgLTczOSwxMyArNzM5LDEzIEBAIHZvaWQgSGVhcDo6cmVtb3ZlRGVhZENvbXBpbGVy
V29ya2xpc3RFbnQKICAgICBpZiAoIVZNOjpjYW5Vc2VKSVQoKSkKICAgICAgICAgcmV0dXJuOwog
ICAgIGZvciAodW5zaWduZWQgaSA9IERGRzo6bnVtYmVyT2ZXb3JrbGlzdHMoKTsgaS0tOykKLSAg
ICAgICAgREZHOjpleGlzdGluZ1dvcmtsaXN0Rm9ySW5kZXgoaSkucmVtb3ZlRGVhZFBsYW5zKCpt
X3ZtKTsKKyAgICAgICAgREZHOjpleGlzdGluZ1dvcmtsaXN0Rm9ySW5kZXgoaSkucmVtb3ZlRGVh
ZFBsYW5zKG1fdm0pOwogI2VuZGlmCiB9CiAKIGJvb2wgSGVhcDo6aXNBbmFseXppbmdIZWFwKCkg
Y29uc3QKIHsKLSAgICBIZWFwUHJvZmlsZXIqIGhlYXBQcm9maWxlciA9IG1fdm0tPmhlYXBQcm9m
aWxlcigpOworICAgIEhlYXBQcm9maWxlciogaGVhcFByb2ZpbGVyID0gbV92bS5oZWFwUHJvZmls
ZXIoKTsKICAgICBpZiAoVU5MSUtFTFkoaGVhcFByb2ZpbGVyKSkKICAgICAgICAgcmV0dXJuIGhl
YXBQcm9maWxlci0+YWN0aXZlSGVhcEFuYWx5emVyKCk7CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAt
Nzc1LDcgKzc3NSw3IEBAIHZvaWQgSGVhcDo6Z2F0aGVyRXh0cmFIZWFwRGF0YShIZWFwUHJvZmkK
IHsKICAgICBpZiAoYXV0byogYW5hbHl6ZXIgPSBoZWFwUHJvZmlsZXIuYWN0aXZlSGVhcEFuYWx5
emVyKCkpIHsKICAgICAgICAgSGVhcEl0ZXJhdGlvblNjb3BlIGhlYXBJdGVyYXRpb25TY29wZSgq
dGhpcyk7Ci0gICAgICAgIEdhdGhlckV4dHJhSGVhcERhdGEgZnVuY3RvcigqbV92bSwgKmFuYWx5
emVyKTsKKyAgICAgICAgR2F0aGVyRXh0cmFIZWFwRGF0YSBmdW5jdG9yKG1fdm0sICphbmFseXpl
cik7CiAgICAgICAgIG1fb2JqZWN0U3BhY2UuZm9yRWFjaExpdmVDZWxsKGhlYXBJdGVyYXRpb25T
Y29wZSwgZnVuY3Rvcik7CiAgICAgfQogfQpAQCAtOTAyLDcgKzkwMiw3IEBAIHN0ZDo6dW5pcXVl
X3B0cjxUeXBlQ291bnRTZXQ+IEhlYXA6OnByb3QKICAgICBzdGQ6OnVuaXF1ZV9wdHI8VHlwZUNv
dW50U2V0PiByZXN1bHQgPSBtYWtlVW5pcXVlPFR5cGVDb3VudFNldD4oKTsKICAgICBmb3JFYWNo
UHJvdGVjdGVkQ2VsbCgKICAgICAgICAgWyZdIChKU0NlbGwqIGNlbGwpIHsKLSAgICAgICAgICAg
IHJlY29yZFR5cGUoKnZtKCksICpyZXN1bHQsIGNlbGwpOworICAgICAgICAgICAgcmVjb3JkVHlw
ZSh2bSgpLCAqcmVzdWx0LCBjZWxsKTsKICAgICAgICAgfSk7CiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KQEAgLTkxNSw3ICs5MTUsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8VHlwZUNvdW50U2V0PiBIZWFw
OjpvYmplCiAgICAgICAgIGl0ZXJhdGlvblNjb3BlLAogICAgICAgICBbJl0gKEhlYXBDZWxsKiBj
ZWxsLCBIZWFwQ2VsbDo6S2luZCBraW5kKSAtPiBJdGVyYXRpb25TdGF0dXMgewogICAgICAgICAg
ICAgaWYgKGlzSlNDZWxsS2luZChraW5kKSkKLSAgICAgICAgICAgICAgICByZWNvcmRUeXBlKCp2
bSgpLCAqcmVzdWx0LCBzdGF0aWNfY2FzdDxKU0NlbGwqPihjZWxsKSk7CisgICAgICAgICAgICAg
ICAgcmVjb3JkVHlwZSh2bSgpLCAqcmVzdWx0LCBzdGF0aWNfY2FzdDxKU0NlbGwqPihjZWxsKSk7
CiAgICAgICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpDb250aW51ZTsKICAgICAgICAg
fSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTkyNiw3ICs5MjYsNyBAQCB2b2lkIEhlYXA6OmRl
bGV0ZUFsbENvZGVCbG9ja3MoRGVsZXRlQWxsCiAgICAgaWYgKG1fY29sbGVjdGlvblNjb3BlICYm
IGVmZm9ydCA9PSBEZWxldGVBbGxDb2RlSWZOb3RDb2xsZWN0aW5nKQogICAgICAgICByZXR1cm47
CiAKLSAgICBWTSYgdm0gPSAqbV92bTsKKyAgICBWTSYgdm0gPSBtX3ZtOwogICAgIFByZXZlbnRD
b2xsZWN0aW9uU2NvcGUgcHJldmVudENvbGxlY3Rpb25TY29wZSgqdGhpcyk7CiAgICAgCiAgICAg
Ly8gSWYgSmF2YVNjcmlwdCBpcyBydW5uaW5nLCBpdCdzIG5vdCBzYWZlIHRvIGRlbGV0ZSBhbGwg
SmF2YVNjcmlwdCBjb2RlLCBzaW5jZQpAQCAtOTcxLDcgKzk3MSw3IEBAIHZvaWQgSGVhcDo6ZGVs
ZXRlQWxsVW5saW5rZWRDb2RlQmxvY2tzKEQKICAgICBpZiAobV9jb2xsZWN0aW9uU2NvcGUgJiYg
ZWZmb3J0ID09IERlbGV0ZUFsbENvZGVJZk5vdENvbGxlY3RpbmcpCiAgICAgICAgIHJldHVybjsK
IAotICAgIFZNJiB2bSA9ICptX3ZtOworICAgIFZNJiB2bSA9IG1fdm07CiAgICAgUHJldmVudENv
bGxlY3Rpb25TY29wZSBwcmV2ZW50Q29sbGVjdGlvblNjb3BlKCp0aGlzKTsKIAogICAgIFJFTEVB
U0VfQVNTRVJUKCFtX2NvbGxlY3Rpb25TY29wZSk7CkBAIC05ODYsOCArOTg2LDggQEAgdm9pZCBI
ZWFwOjpkZWxldGVBbGxVbmxpbmtlZENvZGVCbG9ja3MoRAogCiB2b2lkIEhlYXA6OmRlbGV0ZVVu
bWFya2VkQ29tcGlsZWRDb2RlKCkKIHsKLSAgICB2bSgpLT5mb3JFYWNoU2NyaXB0RXhlY3V0YWJs
ZVNwYWNlKFtdIChhdXRvJiBzcGFjZSkgeyBzcGFjZS5zcGFjZS5zd2VlcCgpOyB9KTsKLSAgICB2
bSgpLT5mb3JFYWNoQ29kZUJsb2NrU3BhY2UoW10gKGF1dG8mIHNwYWNlKSB7IHNwYWNlLnNwYWNl
LnN3ZWVwKCk7IH0pOyAvLyBTd2VlcGluZyBtdXN0IG9jY3VyIGJlZm9yZSBkZWxldGluZyBzdHVi
cywgb3RoZXJ3aXNlIHRoZSBzdHVicyBtaWdodCBzdGlsbCB0aGluayB0aGV5J3JlIGFsaXZlIGFz
IHRoZXkgZ2V0IGRlbGV0ZWQuCisgICAgdm0oKS5mb3JFYWNoU2NyaXB0RXhlY3V0YWJsZVNwYWNl
KFtdIChhdXRvJiBzcGFjZSkgeyBzcGFjZS5zcGFjZS5zd2VlcCgpOyB9KTsKKyAgICB2bSgpLmZv
ckVhY2hDb2RlQmxvY2tTcGFjZShbXSAoYXV0byYgc3BhY2UpIHsgc3BhY2Uuc3BhY2Uuc3dlZXAo
KTsgfSk7IC8vIFN3ZWVwaW5nIG11c3Qgb2NjdXIgYmVmb3JlIGRlbGV0aW5nIHN0dWJzLCBvdGhl
cndpc2UgdGhlIHN0dWJzIG1pZ2h0IHN0aWxsIHRoaW5rIHRoZXkncmUgYWxpdmUgYXMgdGhleSBn
ZXQgZGVsZXRlZC4KICAgICBtX2ppdFN0dWJSb3V0aW5lcy0+ZGVsZXRlVW5tYXJrZWRKZXR0aXNv
bmVkU3R1YlJvdXRpbmVzKCk7CiB9CiAKQEAgLTExODEsMTAgKzExODEsMTAgQEAgdm9pZCBIZWFw
OjpjaGVja0Nvbm4oR0NDb25kdWN0b3IgY29ubikKICAgICB1bnNpZ25lZCB3b3JsZFN0YXRlID0g
bV93b3JsZFN0YXRlLmxvYWQoKTsKICAgICBzd2l0Y2ggKGNvbm4pIHsKICAgICBjYXNlIEdDQ29u
ZHVjdG9yOjpNdXRhdG9yOgotICAgICAgICBSRUxFQVNFX0FTU0VSVCh3b3JsZFN0YXRlICYgbXV0
YXRvckhhc0Nvbm5CaXQsIHdvcmxkU3RhdGUsIGFzSW50KG1fbGFzdFBoYXNlKSwgYXNJbnQobV9j
dXJyZW50UGhhc2UpLCBhc0ludChtX25leHRQaGFzZSksIHZtKCktPmlkKCksIFZNOjpudW1iZXJP
ZklEcygpLCB2bSgpLT5pc0VudGVyZWQoKSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHdvcmxk
U3RhdGUgJiBtdXRhdG9ySGFzQ29ubkJpdCwgd29ybGRTdGF0ZSwgYXNJbnQobV9sYXN0UGhhc2Up
LCBhc0ludChtX2N1cnJlbnRQaGFzZSksIGFzSW50KG1fbmV4dFBoYXNlKSwgdm0oKS5pZCgpLCBW
TTo6bnVtYmVyT2ZJRHMoKSwgdm0oKS5pc0VudGVyZWQoKSk7CiAgICAgICAgIHJldHVybjsKICAg
ICBjYXNlIEdDQ29uZHVjdG9yOjpDb2xsZWN0b3I6Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKCEo
d29ybGRTdGF0ZSAmIG11dGF0b3JIYXNDb25uQml0KSwgd29ybGRTdGF0ZSwgYXNJbnQobV9sYXN0
UGhhc2UpLCBhc0ludChtX2N1cnJlbnRQaGFzZSksIGFzSW50KG1fbmV4dFBoYXNlKSwgdm0oKS0+
aWQoKSwgVk06Om51bWJlck9mSURzKCksIHZtKCktPmlzRW50ZXJlZCgpKTsKKyAgICAgICAgUkVM
RUFTRV9BU1NFUlQoISh3b3JsZFN0YXRlICYgbXV0YXRvckhhc0Nvbm5CaXQpLCB3b3JsZFN0YXRl
LCBhc0ludChtX2xhc3RQaGFzZSksIGFzSW50KG1fY3VycmVudFBoYXNlKSwgYXNJbnQobV9uZXh0
UGhhc2UpLCB2bSgpLmlkKCksIFZNOjpudW1iZXJPZklEcygpLCB2bSgpLmlzRW50ZXJlZCgpKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwpAQCAtMTUwOCw4ICsxNTA4LDggQEAgTkVWRVJfSU5MSU5FIGJvb2wgSGVhcDo6cnVuRW5kUGhh
c2UoR0NDbwogICAgICAgICBtX3ZlcmlmaWVyLT52ZXJpZnkoSGVhcFZlcmlmaWVyOjpQaGFzZTo6
QWZ0ZXJNYXJraW5nKTsKICAgICB9CiAgICAgICAgIAotICAgIGlmICh2bSgpLT50eXBlUHJvZmls
ZXIoKSkKLSAgICAgICAgdm0oKS0+dHlwZVByb2ZpbGVyKCktPmludmFsaWRhdGVUeXBlU2V0Q2Fj
aGUoKnZtKCkpOworICAgIGlmICh2bSgpLnR5cGVQcm9maWxlcigpKQorICAgICAgICB2bSgpLnR5
cGVQcm9maWxlcigpLT5pbnZhbGlkYXRlVHlwZVNldENhY2hlKHZtKCkpOwogCiAgICAgcmVhcFdl
YWtIYW5kbGVzKCk7CiAgICAgcHJ1bmVTdGFsZUVudHJpZXNGcm9tV2Vha0dDTWFwcygpOwpAQCAt
MTY0OCwxNSArMTY0OCwxNSBAQCB2b2lkIEhlYXA6OnN0b3BUaGVQZXJpcGhlcnkoR0NDb25kdWN0
b3IgCiAjaWYgRU5BQkxFKEpJVCkKICAgICBpZiAoVk06OmNhblVzZUpJVCgpKSB7CiAgICAgICAg
IERlZmVyR0NGb3JBV2hpbGUgYXdoaWxlKCp0aGlzKTsKLSAgICAgICAgaWYgKEpJVFdvcmtsaXN0
OjplbnN1cmVHbG9iYWxXb3JrbGlzdCgpLmNvbXBsZXRlQWxsRm9yVk0oKm1fdm0pCisgICAgICAg
IGlmIChKSVRXb3JrbGlzdDo6ZW5zdXJlR2xvYmFsV29ya2xpc3QoKS5jb21wbGV0ZUFsbEZvclZN
KG1fdm0pCiAgICAgICAgICAgICAmJiBjb25uID09IEdDQ29uZHVjdG9yOjpDb2xsZWN0b3IpCiAg
ICAgICAgICAgICBzZXRHQ0RpZEpJVCgpOwogICAgIH0KICNlbmRpZiAvLyBFTkFCTEUoSklUKQog
ICAgIFVOVVNFRF9QQVJBTShjb25uKTsKICAgICAKLSAgICBpZiAoYXV0byogc2hhZG93Q2hpY2tl
biA9IHZtKCktPnNoYWRvd0NoaWNrZW4oKSkKLSAgICAgICAgc2hhZG93Q2hpY2tlbi0+dXBkYXRl
KCp2bSgpLCB2bSgpLT50b3BDYWxsRnJhbWUpOworICAgIGlmIChhdXRvKiBzaGFkb3dDaGlja2Vu
ID0gdm0oKS5zaGFkb3dDaGlja2VuKCkpCisgICAgICAgIHNoYWRvd0NoaWNrZW4tPnVwZGF0ZSh2
bSgpLCB2bSgpLnRvcENhbGxGcmFtZSk7CiAgICAgCiAgICAgbV9zdHJ1Y3R1cmVJRFRhYmxlLmZs
dXNoT2xkVGFibGVzKCk7CiAgICAgbV9vYmplY3RTcGFjZS5zdG9wQWxsb2NhdGluZygpOwpAQCAt
MjA5NywxMyArMjA5NywxMyBAQCB2b2lkIEhlYXA6OmZpbmFsaXplKCkKICAgICAgICAgc3dlZXBJ
bkZpbmFsaXplKCk7CiAgICAgfQogICAgIAotICAgIGlmIChIYXNPd25Qcm9wZXJ0eUNhY2hlKiBj
YWNoZSA9IHZtKCktPmhhc093blByb3BlcnR5Q2FjaGUoKSkKKyAgICBpZiAoSGFzT3duUHJvcGVy
dHlDYWNoZSogY2FjaGUgPSB2bSgpLmhhc093blByb3BlcnR5Q2FjaGUoKSkKICAgICAgICAgY2Fj
aGUtPmNsZWFyKCk7CiAKICAgICBpbW11dGFibGVCdXR0ZXJmbHlUb1N0cmluZ0NhY2hlLmNsZWFy
KCk7CiAgICAgCiAgICAgZm9yIChjb25zdCBIZWFwRmluYWxpemVyQ2FsbGJhY2smIGNhbGxiYWNr
IDogbV9oZWFwRmluYWxpemVyQ2FsbGJhY2tzKQotICAgICAgICBjYWxsYmFjay5ydW4oKnZtKCkp
OworICAgICAgICBjYWxsYmFjay5ydW4odm0oKSk7CiAgICAgCiAgICAgaWYgKHNob3VsZFN3ZWVw
U3luY2hyb25vdXNseSgpKQogICAgICAgICBzd2VlcFN5bmNocm9ub3VzbHkoKTsKQEAgLTIxMTgs
OCArMjExOCw4IEBAIEhlYXA6OlRpY2tldCBIZWFwOjpyZXF1ZXN0Q29sbGVjdGlvbihHQ1IKIHsK
ICAgICBzdG9wSWZOZWNlc3NhcnkoKTsKICAgICAKLSAgICBBU1NFUlQodm0oKS0+Y3VycmVudFRo
cmVhZElzSG9sZGluZ0FQSUxvY2soKSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQodm0oKS0+YXRvbVN0
cmluZ1RhYmxlKCkgPT0gVGhyZWFkOjpjdXJyZW50KCkuYXRvbVN0cmluZ1RhYmxlKCkpOworICAg
IEFTU0VSVCh2bSgpLmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOworICAgIFJFTEVB
U0VfQVNTRVJUKHZtKCkuYXRvbVN0cmluZ1RhYmxlKCkgPT0gVGhyZWFkOjpjdXJyZW50KCkuYXRv
bVN0cmluZ1RhYmxlKCkpOwogICAgIAogICAgIExvY2tIb2xkZXIgbG9ja2VyKCptX3RocmVhZExv
Y2spOwogICAgIC8vIFdlIG1heSBiZSBhYmxlIHRvIHN0ZWFsIHRoZSBjb25uLiBUaGF0IG9ubHkg
d29ya3MgaWYgdGhlIGNvbGxlY3RvciBpcyBkZWZpbml0ZWx5IG5vdCBydW5uaW5nCkBAIC0yMTUw
LDcgKzIxNTAsNyBAQCB2b2lkIEhlYXA6OndhaXRGb3JDb2xsZWN0aW9uKFRpY2tldCB0aWNrCiB2
b2lkIEhlYXA6OnN3ZWVwSW5GaW5hbGl6ZSgpCiB7CiAgICAgbV9vYmplY3RTcGFjZS5zd2VlcExh
cmdlQWxsb2NhdGlvbnMoKTsKLSAgICB2bSgpLT5lYWdlcmx5U3dlcHREZXN0cnVjdGlibGVPYmpl
Y3RTcGFjZS5zd2VlcCgpOworICAgIHZtKCkuZWFnZXJseVN3ZXB0RGVzdHJ1Y3RpYmxlT2JqZWN0
U3BhY2Uuc3dlZXAoKTsKIH0KIAogdm9pZCBIZWFwOjpzdXNwZW5kQ29tcGlsZXJUaHJlYWRzKCkK
QEAgLTIyMjcsNyArMjIyNyw3IEBAIHZvaWQgSGVhcDo6cHJ1bmVTdGFsZUVudHJpZXNGcm9tV2Vh
a0dDTWEKIAogdm9pZCBIZWFwOjpzd2VlcEFycmF5QnVmZmVycygpCiB7Ci0gICAgbV9hcnJheUJ1
ZmZlcnMuc3dlZXAoKnZtKCkpOworICAgIG1fYXJyYXlCdWZmZXJzLnN3ZWVwKHZtKCkpOwogfQog
CiB2b2lkIEhlYXA6OnNuYXBzaG90VW5zd2VwdCgpCkBAIC0yMjM5LDcgKzIyMzksNyBAQCB2b2lk
IEhlYXA6OnNuYXBzaG90VW5zd2VwdCgpCiB2b2lkIEhlYXA6OmRlbGV0ZVNvdXJjZVByb3ZpZGVy
Q2FjaGVzKCkKIHsKICAgICBpZiAobV9sYXN0Q29sbGVjdGlvblNjb3BlICYmIG1fbGFzdENvbGxl
Y3Rpb25TY29wZS52YWx1ZSgpID09IENvbGxlY3Rpb25TY29wZTo6RnVsbCkKLSAgICAgICAgbV92
bS0+Y2xlYXJTb3VyY2VQcm92aWRlckNhY2hlcygpOworICAgICAgICBtX3ZtLmNsZWFyU291cmNl
UHJvdmlkZXJDYWNoZXMoKTsKIH0KIAogdm9pZCBIZWFwOjpub3RpZnlJbmNyZW1lbnRhbFN3ZWVw
ZXIoKQpAQCAtMjM1OSw3ICsyMzU5LDcgQEAgdm9pZCBIZWFwOjpkaWRGaW5pc2hDb2xsZWN0aW9u
KCkKICAgICBBU1NFUlQoZXh0ZXJuYWxNZW1vcnlTaXplKCkgPD0gZXh0cmFNZW1vcnlTaXplKCkp
OwogI2VuZGlmCiAKLSAgICBpZiAoSGVhcFByb2ZpbGVyKiBoZWFwUHJvZmlsZXIgPSBtX3ZtLT5o
ZWFwUHJvZmlsZXIoKSkgeworICAgIGlmIChIZWFwUHJvZmlsZXIqIGhlYXBQcm9maWxlciA9IG1f
dm0uaGVhcFByb2ZpbGVyKCkpIHsKICAgICAgICAgZ2F0aGVyRXh0cmFIZWFwRGF0YSgqaGVhcFBy
b2ZpbGVyKTsKICAgICAgICAgcmVtb3ZlRGVhZEhlYXBTbmFwc2hvdE5vZGVzKCpoZWFwUHJvZmls
ZXIpOwogICAgIH0KQEAgLTI3MjksMTEgKzI3MjksMTEgQEAgdm9pZCBIZWFwOjphZGRDb3JlQ29u
c3RyYWludHMoKQogICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikgewog
CiAjaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKLSAgICAgICAgICAgIHNjYW5FeHRlcm5hbFJlbWVt
YmVyZWRTZXQoKm1fdm0sIHNsb3RWaXNpdG9yKTsKKyAgICAgICAgICAgIHNjYW5FeHRlcm5hbFJl
bWVtYmVyZWRTZXQobV92bSwgc2xvdFZpc2l0b3IpOwogI2VuZGlmCi0gICAgICAgICAgICBpZiAo
bV92bS0+c21hbGxTdHJpbmdzLm5lZWRzVG9CZVZpc2l0ZWQoKm1fY29sbGVjdGlvblNjb3BlKSkg
eworICAgICAgICAgICAgaWYgKG1fdm0uc21hbGxTdHJpbmdzLm5lZWRzVG9CZVZpc2l0ZWQoKm1f
Y29sbGVjdGlvblNjb3BlKSkgewogICAgICAgICAgICAgICAgIFNldFJvb3RNYXJrUmVhc29uU2Nv
cGUgcm9vdFNjb3BlKHNsb3RWaXNpdG9yLCBTbG90VmlzaXRvcjo6Um9vdE1hcmtSZWFzb246OlN0
cm9uZ1JlZmVyZW5jZXMpOwotICAgICAgICAgICAgICAgIG1fdm0tPnNtYWxsU3RyaW5ncy52aXNp
dFN0cm9uZ1JlZmVyZW5jZXMoc2xvdFZpc2l0b3IpOworICAgICAgICAgICAgICAgIG1fdm0uc21h
bGxTdHJpbmdzLnZpc2l0U3Ryb25nUmVmZXJlbmNlcyhzbG90VmlzaXRvcik7CiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIHsKQEAgLTI3NDksOCArMjc0OSw4IEBAIHZv
aWQgSGVhcDo6YWRkQ29yZUNvbnN0cmFpbnRzKCkKIAogICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgIFNldFJvb3RNYXJrUmVhc29uU2NvcGUgcm9vdFNjb3BlKHNsb3RWaXNpdG9yLCBTbG90
VmlzaXRvcjo6Um9vdE1hcmtSZWFzb246OlZNRXhjZXB0aW9ucyk7Ci0gICAgICAgICAgICAgICAg
c2xvdFZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQobV92bS0+ZXhjZXB0aW9uKCkpOwotICAgICAg
ICAgICAgICAgIHNsb3RWaXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKG1fdm0tPmxhc3RFeGNlcHRp
b24oKSk7CisgICAgICAgICAgICAgICAgc2xvdFZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQobV92
bS5leGNlcHRpb24oKSk7CisgICAgICAgICAgICAgICAgc2xvdFZpc2l0b3IuYXBwZW5kVW5iYXJy
aWVyZWQobV92bS5sYXN0RXhjZXB0aW9uKCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9LAog
ICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlFeGVjdXRpb24pOwpAQCAtMjc2
OSw3ICsyNzY5LDcgQEAgdm9pZCBIZWFwOjphZGRDb3JlQ29uc3RyYWludHMoKQogICAgICAgICAg
ICAgU2V0Um9vdE1hcmtSZWFzb25TY29wZSByb290U2NvcGUoc2xvdFZpc2l0b3IsIFNsb3RWaXNp
dG9yOjpSb290TWFya1JlYXNvbjo6RGVidWdnZXIpOwogCiAjaWYgRU5BQkxFKFNBTVBMSU5HX1BS
T0ZJTEVSKQotICAgICAgICAgICAgaWYgKFNhbXBsaW5nUHJvZmlsZXIqIHNhbXBsaW5nUHJvZmls
ZXIgPSBtX3ZtLT5zYW1wbGluZ1Byb2ZpbGVyKCkpIHsKKyAgICAgICAgICAgIGlmIChTYW1wbGlu
Z1Byb2ZpbGVyKiBzYW1wbGluZ1Byb2ZpbGVyID0gbV92bS5zYW1wbGluZ1Byb2ZpbGVyKCkpIHsK
ICAgICAgICAgICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihzYW1wbGluZ1Byb2ZpbGVyLT5nZXRM
b2NrKCkpOwogICAgICAgICAgICAgICAgIHNhbXBsaW5nUHJvZmlsZXItPnByb2Nlc3NVbnZlcmlm
aWVkU3RhY2tUcmFjZXMoKTsKICAgICAgICAgICAgICAgICBzYW1wbGluZ1Byb2ZpbGVyLT52aXNp
dChzbG90VmlzaXRvcik7CkBAIC0yNzc4LDEwICsyNzc4LDEwIEBAIHZvaWQgSGVhcDo6YWRkQ29y
ZUNvbnN0cmFpbnRzKCkKICAgICAgICAgICAgIH0KICNlbmRpZiAvLyBFTkFCTEUoU0FNUExJTkdf
UFJPRklMRVIpCiAKLSAgICAgICAgICAgIGlmIChtX3ZtLT50eXBlUHJvZmlsZXIoKSkKLSAgICAg
ICAgICAgICAgICBtX3ZtLT50eXBlUHJvZmlsZXJMb2coKS0+dmlzaXQoc2xvdFZpc2l0b3IpOwor
ICAgICAgICAgICAgaWYgKG1fdm0udHlwZVByb2ZpbGVyKCkpCisgICAgICAgICAgICAgICAgbV92
bS50eXBlUHJvZmlsZXJMb2coKS0+dmlzaXQoc2xvdFZpc2l0b3IpOwogICAgICAgICAgICAgCi0g
ICAgICAgICAgICBpZiAoYXV0byogc2hhZG93Q2hpY2tlbiA9IG1fdm0tPnNoYWRvd0NoaWNrZW4o
KSkKKyAgICAgICAgICAgIGlmIChhdXRvKiBzaGFkb3dDaGlja2VuID0gbV92bS5zaGFkb3dDaGlj
a2VuKCkpCiAgICAgICAgICAgICAgICAgc2hhZG93Q2hpY2tlbi0+dmlzaXRDaGlsZHJlbihzbG90
VmlzaXRvcik7CiAgICAgICAgIH0sCiAgICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5
ZWRCeUV4ZWN1dGlvbik7CkBAIC0yODMwLDcgKzI4MzAsNyBAQCB2b2lkIEhlYXA6OmFkZENvcmVD
b25zdHJhaW50cygpCiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgaXMgYWxtb3N0IGNl
cnRhaW5seSB1bm5lY2Vzc2FyeS4KICAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2ODI5CiAgICAgICAgICAgICAgICAgREZHOjppdGVy
YXRlQ29kZUJsb2Nrc0ZvckdDKAotICAgICAgICAgICAgICAgICAgICAqbV92bSwKKyAgICAgICAg
ICAgICAgICAgICAgbV92bSwKICAgICAgICAgICAgICAgICAgICAgWyZdIChDb2RlQmxvY2sqIGNv
ZGVCbG9jaykgewogICAgICAgICAgICAgICAgICAgICAgICAgc2xvdFZpc2l0b3IuYXBwZW5kVW5i
YXJyaWVyZWQoY29kZUJsb2NrKTsKICAgICAgICAgICAgICAgICAgICAgfSk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSGVhcC5oCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzOSwxMiArMTM5LDEyIEBA
IHB1YmxpYzoKICAgICAvLyBUYWtlIHRoaXMgaWYgeW91IGtub3cgdGhhdCBmcm9tLT5jZWxsU3Rh
dGUoKSA8IGJhcnJpZXJUaHJlc2hvbGQuCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCB3cml0
ZUJhcnJpZXJTbG93UGF0aChjb25zdCBKU0NlbGwqIGZyb20pOwogCi0gICAgSGVhcChWTSosIEhl
YXBUeXBlKTsKKyAgICBIZWFwKFZNJiwgSGVhcFR5cGUpOwogICAgIH5IZWFwKCk7CiAgICAgdm9p
ZCBsYXN0Q2hhbmNlVG9GaW5hbGl6ZSgpOwogICAgIHZvaWQgcmVsZWFzZURlbGF5ZWRSZWxlYXNl
ZE9iamVjdHMoKTsKIAotICAgIFZNKiB2bSgpIGNvbnN0OworICAgIFZNJiB2bSgpIGNvbnN0Owog
CiAgICAgTWFya2VkU3BhY2UmIG9iamVjdFNwYWNlKCkgeyByZXR1cm4gbV9vYmplY3RTcGFjZTsg
fQogICAgIE1hY2hpbmVUaHJlYWRzJiBtYWNoaW5lVGhyZWFkcygpIHsgcmV0dXJuICptX21hY2hp
bmVUaHJlYWRzOyB9CkBAIC02NDIsNyArNjQyLDcgQEAgcHJpdmF0ZToKIAogICAgIHVuc2lnbmVk
IG1fYmFycmllclRocmVzaG9sZCB7IE9wdGlvbnM6OmZvcmNlRmVuY2VkQmFycmllcigpID8gdGF1
dG9sb2dpY2FsVGhyZXNob2xkIDogYmxhY2tUaHJlc2hvbGQgfTsKIAotICAgIFZNKiBtX3ZtOwor
ICAgIFZNJiBtX3ZtOwogICAgIFNlY29uZHMgbV9sYXN0RnVsbEdDTGVuZ3RoIHsgMTBfbXMgfTsK
ICAgICBTZWNvbmRzIG1fbGFzdEVkZW5HQ0xlbmd0aCB7IDEwX21zIH07CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBDZWxsLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSGVhcENlbGwuaAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcENlbGwuaAkod29ya2luZyBjb3B5KQpAQCAtNzMsNyAr
NzMsNyBAQCBwdWJsaWM6CiAgICAgLy8gcmVjb21tZW5kZWQgdG8gdXNlIGl0IGZvciB0b28gbWFu
eSBvdGhlciB0aGluZ3MsIHNpbmNlIHRoZSBsYXJnZSBhbGxvY2F0aW9uIGN1dG9mZiBpcwogICAg
IC8vIGEgcnVudGltZSBvcHRpb24gYW5kIGl0cyBkZWZhdWx0IHZhbHVlIGlzIHNtYWxsICg0MDAg
Ynl0ZXMpLgogICAgIEhlYXAqIGhlYXAoKSBjb25zdDsKLSAgICBWTSogdm0oKSBjb25zdDsKKyAg
ICBWTSYgdm0oKSBjb25zdDsKICAgICAKICAgICBzaXplX3QgY2VsbFNpemUoKSBjb25zdDsKICAg
ICBDZWxsQXR0cmlidXRlcyBjZWxsQXR0cmlidXRlcygpIGNvbnN0OwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSGVhcENlbGxJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcENlbGxJbmxpbmVzLmgJKHJldmlzaW9uIDI0OTEyOCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBDZWxsSW5saW5lcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtNTYsMTAgKzU2LDEwIEBAIEFMV0FZU19JTkxJTkUgTGFyZ2VBbGxvY2F0aW9u
JiBIZWFwQ2VsbDoKIAogQUxXQVlTX0lOTElORSBIZWFwKiBIZWFwQ2VsbDo6aGVhcCgpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuICZ2bSgpLT5oZWFwOworICAgIHJldHVybiAmdm0oKS5oZWFwOwogfQog
Ci1BTFdBWVNfSU5MSU5FIFZNKiBIZWFwQ2VsbDo6dm0oKSBjb25zdAorQUxXQVlTX0lOTElORSBW
TSYgSGVhcENlbGw6OnZtKCkgY29uc3QKIHsKICAgICBpZiAoaXNMYXJnZUFsbG9jYXRpb24oKSkK
ICAgICAgICAgcmV0dXJuIGxhcmdlQWxsb2NhdGlvbigpLnZtKCk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0hlYXBJbmxpbmVzLmgJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0z
OCw5ICszOCw5IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1BTFdBWVNfSU5MSU5FIFZNKiBIZWFw
Ojp2bSgpIGNvbnN0CitBTFdBWVNfSU5MSU5FIFZNJiBIZWFwOjp2bSgpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIGJpdHdpc2VfY2FzdDxWTSo+KGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHRoaXMpIC0g
T0JKRUNUX09GRlNFVE9GKFZNLCBoZWFwKSk7CisgICAgcmV0dXJuICpiaXR3aXNlX2Nhc3Q8Vk0q
PihiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pih0aGlzKSAtIE9CSkVDVF9PRkZTRVRPRihWTSwgaGVh
cCkpOwogfQogCiBBTFdBWVNfSU5MSU5FIEhlYXAqIEhlYXA6OmhlYXAoY29uc3QgSGVhcENlbGwq
IGNlbGwpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29TdWJzcGFjZVBlclZN
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29TdWJzcGFj
ZVBlclZNLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSXNvU3Vic3BhY2VQZXJWTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDEsNyArNDEsNyBAQCBwdWJs
aWM6CiAgICAgfkF1dG9yZW1vdmluZ0lzb1N1YnNwYWNlKCkKICAgICB7CiAgICAgICAgIGF1dG8g
bG9ja2VyID0gaG9sZExvY2sobV9wZXJWTS5tX2xvY2spOwotICAgICAgICBtX3BlclZNLm1fc3Vi
c3BhY2VQZXJWTS5yZW1vdmUoc3BhY2UoKS5oZWFwKCktPnZtKCkpOworICAgICAgICBtX3BlclZN
Lm1fc3Vic3BhY2VQZXJWTS5yZW1vdmUoJnNwYWNlKCkuaGVhcCgpLT52bSgpKTsKICAgICB9CiAK
IHByaXZhdGU6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9MYXJnZUFsbG9jYXRp
b24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xhcmdlQWxs
b2NhdGlvbi5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0xhcmdlQWxsb2NhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNzcsNyArMTc3LDcg
QEAgdm9pZCBMYXJnZUFsbG9jYXRpb246OnN3ZWVwKCkKICAgICAKICAgICBpZiAobV9oYXNWYWxp
ZENlbGwgJiYgIWlzTGl2ZSgpKSB7CiAgICAgICAgIGlmIChtX2F0dHJpYnV0ZXMuZGVzdHJ1Y3Rp
b24gPT0gTmVlZHNEZXN0cnVjdGlvbikKLSAgICAgICAgICAgIG1fc3Vic3BhY2UtPmRlc3Ryb3ko
KnZtKCksIHN0YXRpY19jYXN0PEpTQ2VsbCo+KGNlbGwoKSkpOworICAgICAgICAgICAgbV9zdWJz
cGFjZS0+ZGVzdHJveSh2bSgpLCBzdGF0aWNfY2FzdDxKU0NlbGwqPihjZWxsKCkpKTsKICAgICAg
ICAgbV9oYXNWYWxpZENlbGwgPSBmYWxzZTsKICAgICB9CiB9CkBAIC0xOTgsNyArMTk4LDcgQEAg
dm9pZCBMYXJnZUFsbG9jYXRpb246OmR1bXAoUHJpbnRTdHJlYW0mIAogI2lmICFBU1NFUlRfRElT
QUJMRUQKIHZvaWQgTGFyZ2VBbGxvY2F0aW9uOjphc3NlcnRWYWxpZENlbGwoVk0mIHZtLCBIZWFw
Q2VsbCogY2VsbCkgY29uc3QKIHsKLSAgICBBU1NFUlQoJnZtID09IHRoaXMtPnZtKCkpOworICAg
IEFTU0VSVCgmdm0gPT0gJnRoaXMtPnZtKCkpOwogICAgIEFTU0VSVChjZWxsID09IHRoaXMtPmNl
bGwoKSk7CiAgICAgQVNTRVJUKG1faGFzVmFsaWRDZWxsKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0xhcmdlQWxsb2NhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0xhcmdlQWxsb2NhdGlvbi5oCShyZXZpc2lvbiAyNDkxMjgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9MYXJnZUFsbG9jYXRpb24uaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTY1LDcgKzY1LDcgQEAgcHVibGljOgogICAgIHZvaWQgbGFzdENoYW5jZVRvRmlu
YWxpemUoKTsKICAgICAKICAgICBIZWFwKiBoZWFwKCkgY29uc3QgeyByZXR1cm4gbV93ZWFrU2V0
LmhlYXAoKTsgfQotICAgIFZNKiB2bSgpIGNvbnN0IHsgcmV0dXJuIG1fd2Vha1NldC52bSgpOyB9
CisgICAgVk0mIHZtKCkgY29uc3QgeyByZXR1cm4gbV93ZWFrU2V0LnZtKCk7IH0KICAgICBXZWFr
U2V0JiB3ZWFrU2V0KCkgeyByZXR1cm4gbV93ZWFrU2V0OyB9CiAKICAgICB1bnNpZ25lZCBpbmRl
eEluU3BhY2UoKSB7IHJldHVybiBtX2luZGV4SW5TcGFjZTsgfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvTG9jYWxBbGxvY2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0xvY2FsQWxsb2NhdG9yLmNwcAkocmV2aXNpb24gMjQ5MTI4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTG9jYWxBbGxvY2F0b3IuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMTQsNyArMTE0LDcgQEAgdm9pZCogTG9jYWxBbGxvY2F0b3I6OmFsbG9jYXRl
U2xvd0Nhc2UoRwogewogICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZh
bHNlKTsKICAgICBIZWFwJiBoZWFwID0gKm1fZGlyZWN0b3J5LT5tX2hlYXA7Ci0gICAgQVNTRVJU
KGhlYXAudm0oKS0+Y3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7CisgICAgQVNTRVJU
KGhlYXAudm0oKS5jdXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsKICAgICBkb1Rlc3RD
b2xsZWN0aW9uc0lmTmVlZGVkKGRlZmVycmFsQ29udGV4dCk7CiAKICAgICBBU1NFUlQoIW1fZGly
ZWN0b3J5LT5tYXJrZWRTcGFjZSgpLmlzSXRlcmF0aW5nKCkpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02Niw3ICs2Niw3IEBAIE1hcmtlZEJsb2NrOjpIYW5kbGU6OkhhbmRsZShIZWFwJiBoZWFwLCAK
ICAgICA6IG1fYWxpZ25lZE1lbW9yeUFsbG9jYXRvcihhbGlnbmVkTWVtb3J5QWxsb2NhdG9yKQog
ICAgICwgbV93ZWFrU2V0KGhlYXAudm0oKSwgQ2VsbENvbnRhaW5lcigpKQogewotICAgIG1fYmxv
Y2sgPSBuZXcgKE5vdE51bGwsIGJsb2NrU3BhY2UpIE1hcmtlZEJsb2NrKCpoZWFwLnZtKCksICp0
aGlzKTsKKyAgICBtX2Jsb2NrID0gbmV3IChOb3ROdWxsLCBibG9ja1NwYWNlKSBNYXJrZWRCbG9j
ayhoZWFwLnZtKCksICp0aGlzKTsKICAgICAKICAgICBtX3dlYWtTZXQuc2V0Q29udGFpbmVyKCpt
X2Jsb2NrKTsKICAgICAKQEAgLTIwNyw3ICsyMDcsNyBAQCB2b2lkIE1hcmtlZEJsb2NrOjpIYW5k
bGU6OnJlc3VtZUFsbG9jYXRpCiAKIHZvaWQgTWFya2VkQmxvY2s6OmFib3V0VG9NYXJrU2xvdyhI
ZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbikKIHsKLSAgICBBU1NFUlQodm0oKS0+aGVhcC5vYmpl
Y3RTcGFjZSgpLmlzTWFya2luZygpKTsKKyAgICBBU1NFUlQodm0oKS5oZWFwLm9iamVjdFNwYWNl
KCkuaXNNYXJraW5nKCkpOwogICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2soZm9vdGVyKCkubV9s
b2NrKTsKICAgICAKICAgICBpZiAoIWFyZU1hcmtzU3RhbGUobWFya2luZ1ZlcnNpb24pKQpAQCAt
Mjc1LDEzICsyNzUsMTMgQEAgdm9pZCBNYXJrZWRCbG9jazo6cmVzZXRNYXJrcygpCiAjaWYgIUFT
U0VSVF9ESVNBQkxFRAogdm9pZCBNYXJrZWRCbG9jazo6YXNzZXJ0TWFya3NOb3RTdGFsZSgpCiB7
Ci0gICAgQVNTRVJUKGZvb3RlcigpLm1fbWFya2luZ1ZlcnNpb24gPT0gdm0oKS0+aGVhcC5vYmpl
Y3RTcGFjZSgpLm1hcmtpbmdWZXJzaW9uKCkpOworICAgIEFTU0VSVChmb290ZXIoKS5tX21hcmtp
bmdWZXJzaW9uID09IHZtKCkuaGVhcC5vYmplY3RTcGFjZSgpLm1hcmtpbmdWZXJzaW9uKCkpOwog
fQogI2VuZGlmIC8vICFBU1NFUlRfRElTQUJMRUQKIAogYm9vbCBNYXJrZWRCbG9jazo6YXJlTWFy
a3NTdGFsZSgpCiB7Ci0gICAgcmV0dXJuIGFyZU1hcmtzU3RhbGUodm0oKS0+aGVhcC5vYmplY3RT
cGFjZSgpLm1hcmtpbmdWZXJzaW9uKCkpOworICAgIHJldHVybiBhcmVNYXJrc1N0YWxlKHZtKCku
aGVhcC5vYmplY3RTcGFjZSgpLm1hcmtpbmdWZXJzaW9uKCkpOwogfQogCiBib29sIE1hcmtlZEJs
b2NrOjpIYW5kbGU6OmFyZU1hcmtzU3RhbGUoKQpAQCAtMjkxLDcgKzI5MSw3IEBAIGJvb2wgTWFy
a2VkQmxvY2s6OkhhbmRsZTo6YXJlTWFya3NTdGFsZSgKIAogYm9vbCBNYXJrZWRCbG9jazo6aXNN
YXJrZWQoY29uc3Qgdm9pZCogcCkKIHsKLSAgICByZXR1cm4gaXNNYXJrZWQodm0oKS0+aGVhcC5v
YmplY3RTcGFjZSgpLm1hcmtpbmdWZXJzaW9uKCksIHApOworICAgIHJldHVybiBpc01hcmtlZCh2
bSgpLmhlYXAub2JqZWN0U3BhY2UoKS5tYXJraW5nVmVyc2lvbigpLCBwKTsKIH0KIAogdm9pZCBN
YXJrZWRCbG9jazo6SGFuZGxlOjpkaWRDb25zdW1lRnJlZUxpc3QoKQpAQCAtMzcxLDcgKzM3MSw3
IEBAIHZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6ZGlkUmVtb3ZlRnJvbUQKICNpZiAhQVNTRVJU
X0RJU0FCTEVECiB2b2lkIE1hcmtlZEJsb2NrOjphc3NlcnRWYWxpZENlbGwoVk0mIHZtLCBIZWFw
Q2VsbCogY2VsbCkgY29uc3QKIHsKLSAgICBSRUxFQVNFX0FTU0VSVCgmdm0gPT0gdGhpcy0+dm0o
KSk7CisgICAgUkVMRUFTRV9BU1NFUlQoJnZtID09ICZ0aGlzLT52bSgpKTsKICAgICBSRUxFQVNF
X0FTU0VSVChjb25zdF9jYXN0PE1hcmtlZEJsb2NrKj4odGhpcyktPmhhbmRsZSgpLmNlbGxBbGln
bihjZWxsKSA9PSBjZWxsKTsKIH0KICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTWFya2VkQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9NYXJrZWRCbG9jay5oCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjQsNyArMTI0LDcg
QEAgcHVibGljOgogICAgICAgICBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKiBhbGlnbmVkTWVtb3J5
QWxsb2NhdG9yKCkgY29uc3Q7CiAgICAgICAgIEhlYXAqIGhlYXAoKSBjb25zdDsKICAgICAgICAg
aW5saW5lIE1hcmtlZFNwYWNlKiBzcGFjZSgpIGNvbnN0OwotICAgICAgICBWTSogdm0oKSBjb25z
dDsKKyAgICAgICAgVk0mIHZtKCkgY29uc3Q7CiAgICAgICAgIFdlYWtTZXQmIHdlYWtTZXQoKTsK
ICAgICAgICAgICAgIAogICAgICAgICBlbnVtIFN3ZWVwTW9kZSB7IFN3ZWVwT25seSwgU3dlZXBU
b0ZyZWVMaXN0IH07CkBAIC0yNTcsNiArMjU3LDggQEAgcHVibGljOgogICAgICAgICBmcmllbmQg
Y2xhc3MgTWFya2VkQmxvY2s7CiAgICAgICAgIAogICAgICAgICBIYW5kbGUmIG1faGFuZGxlOwor
ICAgICAgICAvLyBtX3ZtIG11c3QgcmVtYWluIGEgcG9pbnRlciAoaW5zdGVhZCBvZiBhIHJlZmVy
ZW5jZSkgYmVjYXVzZSBKU0NMTEludE9mZnNldHNFeHRyYWN0b3IKKyAgICAgICAgLy8gd2lsbCBm
YWlsIG90aGVyd2lzZS4KICAgICAgICAgVk0qIG1fdm07CiAgICAgICAgIFN1YnNwYWNlKiBtX3N1
YnNwYWNlOwogCkBAIC0zMTUsNyArMzE3LDcgQEAgcHVibGljOgogICAgIEhhbmRsZSYgaGFuZGxl
KCk7CiAgICAgY29uc3QgSGFuZGxlJiBoYW5kbGUoKSBjb25zdDsKICAgICAgICAgCi0gICAgVk0q
IHZtKCkgY29uc3Q7CisgICAgVk0mIHZtKCkgY29uc3Q7CiAgICAgaW5saW5lIEhlYXAqIGhlYXAo
KSBjb25zdDsKICAgICBpbmxpbmUgTWFya2VkU3BhY2UqIHNwYWNlKCkgY29uc3Q7CiAKQEAgLTQ3
MSwxNCArNDczLDE0IEBAIGlubGluZSBIZWFwKiBNYXJrZWRCbG9jazo6SGFuZGxlOjpoZWFwKCkK
ICAgICByZXR1cm4gbV93ZWFrU2V0LmhlYXAoKTsKIH0KIAotaW5saW5lIFZNKiBNYXJrZWRCbG9j
azo6SGFuZGxlOjp2bSgpIGNvbnN0CitpbmxpbmUgVk0mIE1hcmtlZEJsb2NrOjpIYW5kbGU6OnZt
KCkgY29uc3QKIHsKICAgICByZXR1cm4gbV93ZWFrU2V0LnZtKCk7CiB9CiAKLWlubGluZSBWTSog
TWFya2VkQmxvY2s6OnZtKCkgY29uc3QKK2lubGluZSBWTSYgTWFya2VkQmxvY2s6OnZtKCkgY29u
c3QKIHsKLSAgICByZXR1cm4gZm9vdGVyKCkubV92bTsKKyAgICByZXR1cm4gKmZvb3RlcigpLm1f
dm07CiB9CiAKIGlubGluZSBXZWFrU2V0JiBNYXJrZWRCbG9jazo6SGFuZGxlOjp3ZWFrU2V0KCkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrSW5saW5lcy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrSW5saW5l
cy5oCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJr
ZWRCbG9ja0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNTIsNyArNTIsNyBAQCBpbmxpbmUg
Ym9vbCBNYXJrZWRCbG9jazo6aGFzQW55TmV3bHlBbGxvCiAKIGlubGluZSBIZWFwKiBNYXJrZWRC
bG9jazo6aGVhcCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuICZ2bSgpLT5oZWFwOworICAgIHJldHVy
biAmdm0oKS5oZWFwOwogfQogCiBpbmxpbmUgTWFya2VkU3BhY2UqIE1hcmtlZEJsb2NrOjpzcGFj
ZSgpIGNvbnN0CkBAIC0yNTMsNyArMjUzLDcgQEAgdm9pZCBNYXJrZWRCbG9jazo6SGFuZGxlOjpz
cGVjaWFsaXplZFN3ZQogICAgIAogICAgIHVuc2lnbmVkIGNlbGxTaXplID0gdGhpcy0+Y2VsbFNp
emUoKTsKICAgICAKLSAgICBWTSYgdm0gPSAqdGhpcy0+dm0oKTsKKyAgICBWTSYgdm0gPSB0aGlz
LT52bSgpOwogICAgIGF1dG8gZGVzdHJveSA9IFsmXSAodm9pZCogY2VsbCkgewogICAgICAgICBK
U0NlbGwqIGpzQ2VsbCA9IHN0YXRpY19jYXN0PEpTQ2VsbCo+KGNlbGwpOwogICAgICAgICBpZiAo
IWpzQ2VsbC0+aXNaYXBwZWQoKSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
U2xvdFZpc2l0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L1Nsb3RWaXNpdG9yLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MCw3ICs2MCw3IEBA
IHN0YXRpYyB2b2lkIHZhbGlkYXRlKEpTQ2VsbCogY2VsbCkKIAogICAgIC8vIEJvdGggdGhlIGNl
bGwncyBzdHJ1Y3R1cmUsIGFuZCB0aGUgY2VsbCdzIHN0cnVjdHVyZSdzIHN0cnVjdHVyZSBzaG91
bGQgYmUgdGhlIFN0cnVjdHVyZSBTdHJ1Y3R1cmUuCiAgICAgLy8gSSBoYXRlIHRoaXMgc2VudGVu
Y2UuCi0gICAgVk0mIHZtID0gKmNlbGwtPnZtKCk7CisgICAgVk0mIHZtID0gY2VsbC0+dm0oKTsK
ICAgICBpZiAoY2VsbC0+c3RydWN0dXJlKCktPnN0cnVjdHVyZSgpLT5KU0NlbGw6OmNsYXNzSW5m
byh2bSkgIT0gY2VsbC0+c3RydWN0dXJlKCktPkpTQ2VsbDo6Y2xhc3NJbmZvKHZtKSkgewogICAg
ICAgICBjb25zdCBjaGFyKiBwYXJlbnRDbGFzc05hbWUgPSAwOwogICAgICAgICBjb25zdCBjaGFy
KiBvdXJDbGFzc05hbWUgPSAwOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xv
dFZpc2l0b3JJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE5IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MTc2LDEyICsxNzYsMTIgQEAgaW5saW5lIEhlYXAqIFNsb3RWaXNpdG9yOjpoZWFwKCkgY29uc3QK
IAogaW5saW5lIFZNJiBTbG90VmlzaXRvcjo6dm0oKQogewotICAgIHJldHVybiAqbV9oZWFwLnZt
KCk7CisgICAgcmV0dXJuIG1faGVhcC52bSgpOwogfQogCiBpbmxpbmUgY29uc3QgVk0mIFNsb3RW
aXNpdG9yOjp2bSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuICptX2hlYXAudm0oKTsKKyAgICByZXR1
cm4gbV9oZWFwLnZtKCk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdG9wSWZOZWNlc3NhcnlUaW1lci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3RvcElmTmVjZXNzYXJ5VGltZXIuY3Bw
CShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdG9wSWZO
ZWNlc3NhcnlUaW1lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDE2LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMCw3ICszMCw3IEBACiAKIG5h
bWVzcGFjZSBKU0MgewogCi1TdG9wSWZOZWNlc3NhcnlUaW1lcjo6U3RvcElmTmVjZXNzYXJ5VGlt
ZXIoVk0qIHZtKQorU3RvcElmTmVjZXNzYXJ5VGltZXI6OlN0b3BJZk5lY2Vzc2FyeVRpbWVyKFZN
JiB2bSkKICAgICA6IEJhc2Uodm0pCiB7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9TdG9wSWZOZWNlc3NhcnlUaW1lci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL1N0b3BJZk5lY2Vzc2FyeVRpbWVyLmgJKHJldmlzaW9uIDI0OTEyOCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N0b3BJZk5lY2Vzc2FyeVRpbWVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMzQsNyArMzQsNyBAQCBjbGFzcyBIZWFwOwogY2xhc3MgU3RvcElmTmVjZXNzYXJ5
VGltZXIgOiBwdWJsaWMgSlNSdW5Mb29wVGltZXIgewogcHVibGljOgogICAgIHVzaW5nIEJhc2Ug
PSBKU1J1bkxvb3BUaW1lcjsKLSAgICBleHBsaWNpdCBTdG9wSWZOZWNlc3NhcnlUaW1lcihWTSop
OworICAgIGV4cGxpY2l0IFN0b3BJZk5lY2Vzc2FyeVRpbWVyKFZNJik7CiAgICAgCiAgICAgdm9p
ZCBkb1dvcmsoVk0mKSBvdmVycmlkZTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL1N0cm9uZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L1N0cm9uZy5oCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9TdHJvbmcuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDExLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMTIsNyArMTEyLDcgQEAgcHVibGljOgogICAgICAg
ICAgICAgcmV0dXJuICp0aGlzOwogICAgICAgICB9CiAKLSAgICAgICAgc2V0KCpIYW5kbGVTZXQ6
OmhlYXBGb3Iob3RoZXIuc2xvdCgpKS0+dm0oKSwgb3RoZXIuZ2V0KCkpOworICAgICAgICBzZXQo
SGFuZGxlU2V0OjpoZWFwRm9yKG90aGVyLnNsb3QoKSktPnZtKCksIG90aGVyLmdldCgpKTsKICAg
ICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvV2Vha1NldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L1dlYWtTZXQuaAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvV2Vha1NldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDEsNyArNDEsNyBAQCBwdWJsaWM6CiAg
ICAgc3RhdGljIFdlYWtJbXBsKiBhbGxvY2F0ZShKU1ZhbHVlLCBXZWFrSGFuZGxlT3duZXIqID0g
MCwgdm9pZCogY29udGV4dCA9IDApOwogICAgIHN0YXRpYyB2b2lkIGRlYWxsb2NhdGUoV2Vha0lt
cGwqKTsKIAotICAgIFdlYWtTZXQoVk0qLCBDZWxsQ29udGFpbmVyKTsKKyAgICBXZWFrU2V0KFZN
JiwgQ2VsbENvbnRhaW5lcik7CiAgICAgfldlYWtTZXQoKTsKICAgICB2b2lkIGxhc3RDaGFuY2VU
b0ZpbmFsaXplKCk7CiAgICAgCkBAIC00OSw3ICs0OSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNl
dENvbnRhaW5lcihDZWxsQ29udGFpbmVyIGNvbnRhaW5lcikgeyBtX2NvbnRhaW5lciA9IGNvbnRh
aW5lcjsgfQogCiAgICAgSGVhcCogaGVhcCgpIGNvbnN0OwotICAgIFZNKiB2bSgpIGNvbnN0Owor
ICAgIFZNJiB2bSgpIGNvbnN0OwogCiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3Q7CiAgICAgYm9v
bCBpc1RyaXZpYWxseURlc3RydWN0aWJsZSgpIGNvbnN0OwpAQCAtNzAsMTEgKzcwLDExIEBAIHBy
aXZhdGU6CiAgICAgV2Vha0Jsb2NrOjpGcmVlQ2VsbCogbV9hbGxvY2F0b3I7CiAgICAgV2Vha0Js
b2NrKiBtX25leHRBbGxvY2F0b3I7CiAgICAgRG91Ymx5TGlua2VkTGlzdDxXZWFrQmxvY2s+IG1f
YmxvY2tzOwotICAgIFZNKiBtX3ZtOworICAgIFZNJiBtX3ZtOwogICAgIENlbGxDb250YWluZXIg
bV9jb250YWluZXI7CiB9OwogCi1pbmxpbmUgV2Vha1NldDo6V2Vha1NldChWTSogdm0sIENlbGxD
b250YWluZXIgY29udGFpbmVyKQoraW5saW5lIFdlYWtTZXQ6OldlYWtTZXQoVk0mIHZtLCBDZWxs
Q29udGFpbmVyIGNvbnRhaW5lcikKICAgICA6IG1fYWxsb2NhdG9yKDApCiAgICAgLCBtX25leHRB
bGxvY2F0b3IoMCkKICAgICAsIG1fdm0odm0pCkBAIC04Miw3ICs4Miw3IEBAIGlubGluZSBXZWFr
U2V0OjpXZWFrU2V0KFZNKiB2bSwgQ2VsbENvbnQKIHsKIH0KIAotaW5saW5lIFZNKiBXZWFrU2V0
Ojp2bSgpIGNvbnN0CitpbmxpbmUgVk0mIFdlYWtTZXQ6OnZtKCkgY29uc3QKIHsKICAgICByZXR1
cm4gbV92bTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNJbmpl
Y3RlZFNjcmlwdEhvc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3IvSlNJbmplY3RlZFNjcmlwdEhvc3QuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTSW5qZWN0ZWRTY3JpcHRIb3N0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMs
IDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEyMCw3ICsxMjAsNyBAQCBKU1ZhbHVlIEpTSW5qZWN0
ZWRTY3JpcHRIb3N0OjpzYXZlZFJlc3VsCiAgICAgYXV0byBzYXZlZFJlc3VsdEFsaWFzID0gaW1w
bCgpLnNhdmVkUmVzdWx0QWxpYXMoKTsKICAgICBpZiAoIXNhdmVkUmVzdWx0QWxpYXMpCiAgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBzYXZl
ZFJlc3VsdEFsaWFzLnZhbHVlKCkpOworICAgIHJldHVybiBqc1N0cmluZyhleGVjLT52bSgpLCBz
YXZlZFJlc3VsdEFsaWFzLnZhbHVlKCkpOwogfQogCiBKU1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRI
b3N0OjpldmFsdWF0ZVdpdGhTY29wZUV4dGVuc2lvbihFeGVjU3RhdGUqIGV4ZWMpCkBAIC0xNDks
OCArMTQ5LDkgQEAgSlNWYWx1ZSBKU0luamVjdGVkU2NyaXB0SG9zdDo6aW50ZXJuYWxDbwogICAg
IGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAxKQogICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKIAorICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgSlNPYmplY3QqIG9iamVjdCA9
IGpzQ2FzdDxKU09iamVjdCo+KGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvVGhpcyhleGVj
LCBOb3RTdHJpY3RNb2RlKSk7Ci0gICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIEpTT2JqZWN0Ojpj
YWxjdWxhdGVkQ2xhc3NOYW1lKG9iamVjdCkpOworICAgIHJldHVybiBqc1N0cmluZyh2bSwgSlNP
YmplY3Q6OmNhbGN1bGF0ZWRDbGFzc05hbWUob2JqZWN0KSk7CiB9CiAKIEpTVmFsdWUgSlNJbmpl
Y3RlZFNjcmlwdEhvc3Q6OmlzSFRNTEFsbENvbGxlY3Rpb24oRXhlY1N0YXRlKiBleGVjKQpAQCAt
MTk2LDQxICsxOTcsNDEgQEAgSlNWYWx1ZSBKU0luamVjdGVkU2NyaXB0SG9zdDo6c3VidHlwZShF
eAogCiAgICAgaWYgKGF1dG8qIG9iamVjdCA9IGpzRHluYW1pY0Nhc3Q8SlNPYmplY3QqPih2bSwg
dmFsdWUpKSB7CiAgICAgICAgIGlmIChvYmplY3QtPmlzRXJyb3JJbnN0YW5jZSgpKQotICAgICAg
ICAgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyhleGVjLCAiZXJyb3IiX3MpOworICAgICAg
ICAgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyh2bSwgImVycm9yIl9zKTsKIAogICAgICAg
ICAvLyBDb25zaWRlciBjbGFzcyBjb25zdHJ1Y3RvciBmdW5jdGlvbnMgY2xhc3Mgb2JqZWN0cy4K
ICAgICAgICAgSlNGdW5jdGlvbiogZnVuY3Rpb24gPSBqc0R5bmFtaWNDYXN0PEpTRnVuY3Rpb24q
Pih2bSwgdmFsdWUpOwogICAgICAgICBpZiAoZnVuY3Rpb24gJiYgZnVuY3Rpb24tPmlzQ2xhc3ND
b25zdHJ1Y3RvckZ1bmN0aW9uKCkpCi0gICAgICAgICAgICByZXR1cm4ganNOb250cml2aWFsU3Ry
aW5nKGV4ZWMsICJjbGFzcyJfcyk7CisgICAgICAgICAgICByZXR1cm4ganNOb250cml2aWFsU3Ry
aW5nKHZtLCAiY2xhc3MiX3MpOwogCiAgICAgICAgIGlmIChvYmplY3QtPmluaGVyaXRzPEpTQXJy
YXk+KHZtKSkKLSAgICAgICAgICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywgImFy
cmF5Il9zKTsKKyAgICAgICAgICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcodm0sICJhcnJh
eSJfcyk7CiAgICAgICAgIGlmIChvYmplY3QtPmluaGVyaXRzPERpcmVjdEFyZ3VtZW50cz4odm0p
IHx8IG9iamVjdC0+aW5oZXJpdHM8U2NvcGVkQXJndW1lbnRzPih2bSkpCi0gICAgICAgICAgICBy
ZXR1cm4ganNOb250cml2aWFsU3RyaW5nKGV4ZWMsICJhcnJheSJfcyk7CisgICAgICAgICAgICBy
ZXR1cm4ganNOb250cml2aWFsU3RyaW5nKHZtLCAiYXJyYXkiX3MpOwogCiAgICAgICAgIGlmIChv
YmplY3QtPmluaGVyaXRzPERhdGVJbnN0YW5jZT4odm0pKQotICAgICAgICAgICAgcmV0dXJuIGpz
Tm9udHJpdmlhbFN0cmluZyhleGVjLCAiZGF0ZSJfcyk7CisgICAgICAgICAgICByZXR1cm4ganNO
b250cml2aWFsU3RyaW5nKHZtLCAiZGF0ZSJfcyk7CiAgICAgICAgIGlmIChvYmplY3QtPmluaGVy
aXRzPFJlZ0V4cE9iamVjdD4odm0pKQotICAgICAgICAgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0
cmluZyhleGVjLCAicmVnZXhwIl9zKTsKKyAgICAgICAgICAgIHJldHVybiBqc05vbnRyaXZpYWxT
dHJpbmcodm0sICJyZWdleHAiX3MpOwogICAgICAgICBpZiAob2JqZWN0LT5pbmhlcml0czxQcm94
eU9iamVjdD4odm0pKQotICAgICAgICAgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyhleGVj
LCAicHJveHkiX3MpOworICAgICAgICAgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyh2bSwg
InByb3h5Il9zKTsKIAogICAgICAgICBpZiAob2JqZWN0LT5pbmhlcml0czxKU01hcD4odm0pKQot
ICAgICAgICAgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyhleGVjLCAibWFwIl9zKTsKKyAg
ICAgICAgICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcodm0sICJtYXAiX3MpOwogICAgICAg
ICBpZiAob2JqZWN0LT5pbmhlcml0czxKU1NldD4odm0pKQotICAgICAgICAgICAgcmV0dXJuIGpz
Tm9udHJpdmlhbFN0cmluZyhleGVjLCAic2V0Il9zKTsKKyAgICAgICAgICAgIHJldHVybiBqc05v
bnRyaXZpYWxTdHJpbmcodm0sICJzZXQiX3MpOwogICAgICAgICBpZiAob2JqZWN0LT5pbmhlcml0
czxKU1dlYWtNYXA+KHZtKSkKLSAgICAgICAgICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmco
ZXhlYywgIndlYWttYXAiX3MpOworICAgICAgICAgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmlu
Zyh2bSwgIndlYWttYXAiX3MpOwogICAgICAgICBpZiAob2JqZWN0LT5pbmhlcml0czxKU1dlYWtT
ZXQ+KHZtKSkKLSAgICAgICAgICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywgIndl
YWtzZXQiX3MpOworICAgICAgICAgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyh2bSwgIndl
YWtzZXQiX3MpOwogCiAgICAgICAgIGlmIChvYmplY3QtPmluaGVyaXRzPEpTU3RyaW5nSXRlcmF0
b3I+KHZtKSkKLSAgICAgICAgICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywgIml0
ZXJhdG9yIl9zKTsKKyAgICAgICAgICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcodm0sICJp
dGVyYXRvciJfcyk7CiAKICAgICAgICAgaWYgKG9iamVjdC0+Z2V0RGlyZWN0KHZtLCB2bS5wcm9w
ZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5hcnJheUl0ZXJhdG9yTmV4dEluZGV4UHJpdmF0ZU5h
bWUoKSkKICAgICAgICAgICAgIHx8IG9iamVjdC0+Z2V0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5h
bWVzLT5idWlsdGluTmFtZXMoKS5tYXBCdWNrZXRQcml2YXRlTmFtZSgpKQogICAgICAgICAgICAg
fHwgb2JqZWN0LT5nZXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygp
LnNldEJ1Y2tldFByaXZhdGVOYW1lKCkpKQotICAgICAgICAgICAgcmV0dXJuIGpzTm9udHJpdmlh
bFN0cmluZyhleGVjLCAiaXRlcmF0b3IiX3MpOworICAgICAgICAgICAgcmV0dXJuIGpzTm9udHJp
dmlhbFN0cmluZyh2bSwgIml0ZXJhdG9yIl9zKTsKIAogICAgICAgICBpZiAob2JqZWN0LT5pbmhl
cml0czxKU0ludDhBcnJheT4odm0pCiAgICAgICAgICAgICB8fCBvYmplY3QtPmluaGVyaXRzPEpT
SW50MTZBcnJheT4odm0pCkBAIC0yNDEsNyArMjQyLDcgQEAgSlNWYWx1ZSBKU0luamVjdGVkU2Ny
aXB0SG9zdDo6c3VidHlwZShFeAogICAgICAgICAgICAgfHwgb2JqZWN0LT5pbmhlcml0czxKU1Vp
bnQzMkFycmF5Pih2bSkKICAgICAgICAgICAgIHx8IG9iamVjdC0+aW5oZXJpdHM8SlNGbG9hdDMy
QXJyYXk+KHZtKQogICAgICAgICAgICAgfHwgb2JqZWN0LT5pbmhlcml0czxKU0Zsb2F0NjRBcnJh
eT4odm0pKQotICAgICAgICAgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyhleGVjLCAiYXJy
YXkiX3MpOworICAgICAgICAgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyh2bSwgImFycmF5
Il9zKTsKICAgICB9CiAKICAgICByZXR1cm4gaW1wbCgpLnN1YnR5cGUoZXhlYywgdmFsdWUpOwpA
QCAtMjc2LDIwICsyNzcsMjAgQEAgSlNWYWx1ZSBKU0luamVjdGVkU2NyaXB0SG9zdDo6ZnVuY3Rp
b25EZQogCiAgICAgU3RyaW5nIHNjcmlwdElEID0gU3RyaW5nOjpudW1iZXIoc291cmNlQ29kZS0+
cHJvdmlkZXIoKS0+YXNJRCgpKTsKICAgICBKU09iamVjdCogbG9jYXRpb24gPSBjb25zdHJ1Y3RF
bXB0eU9iamVjdChleGVjKTsKLSAgICBsb2NhdGlvbi0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKGV4ZWMsICJzY3JpcHRJZCIpLCBqc1N0cmluZyhleGVjLCBzY3JpcHRJRCkp
OwotICAgIGxvY2F0aW9uLT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhl
YywgImxpbmVOdW1iZXIiKSwganNOdW1iZXIobGluZU51bWJlcikpOwotICAgIGxvY2F0aW9uLT5w
dXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgImNvbHVtbk51bWJlciIp
LCBqc051bWJlcihjb2x1bW5OdW1iZXIpKTsKKyAgICBsb2NhdGlvbi0+cHV0RGlyZWN0KHZtLCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAic2NyaXB0SWQiKSwganNTdHJpbmcodm0sIHNjcmlw
dElEKSk7CisgICAgbG9jYXRpb24tPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zyh2bSwgImxpbmVOdW1iZXIiKSwganNOdW1iZXIobGluZU51bWJlcikpOworICAgIGxvY2F0aW9u
LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJjb2x1bW5OdW1iZXIi
KSwganNOdW1iZXIoY29sdW1uTnVtYmVyKSk7CiAKICAgICBKU09iamVjdCogcmVzdWx0ID0gY29u
c3RydWN0RW1wdHlPYmplY3QoZXhlYyk7Ci0gICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50
aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgImxvY2F0aW9uIiksIGxvY2F0aW9uKTsKKyAgICByZXN1
bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImxvY2F0aW9uIiks
IGxvY2F0aW9uKTsKIAogICAgIFN0cmluZyBuYW1lID0gZnVuY3Rpb24tPm5hbWUodm0pOwogICAg
IGlmICghbmFtZS5pc0VtcHR5KCkpCi0gICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJuYW1lIiksIGpzU3RyaW5nKGV4ZWMsIG5hbWUpKTsK
KyAgICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0s
ICJuYW1lIiksIGpzU3RyaW5nKHZtLCBuYW1lKSk7CiAKICAgICBTdHJpbmcgZGlzcGxheU5hbWUg
PSBmdW5jdGlvbi0+ZGlzcGxheU5hbWUodm0pOwogICAgIGlmICghZGlzcGxheU5hbWUuaXNFbXB0
eSgpKQotICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
ZyhleGVjLCAiZGlzcGxheU5hbWUiKSwganNTdHJpbmcoZXhlYywgZGlzcGxheU5hbWUpKTsKKyAg
ICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJk
aXNwbGF5TmFtZSIpLCBqc1N0cmluZyh2bSwgZGlzcGxheU5hbWUpKTsKIAogICAgIHJldHVybiBy
ZXN1bHQ7CiB9CkBAIC0yOTgsOCArMjk5LDggQEAgc3RhdGljIEpTT2JqZWN0KiBjb25zdHJ1Y3RJ
bnRlcm5hbFByb3BlcgogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgSlNPYmplY3Qq
IHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMpOwotICAgIHJlc3VsdC0+cHV0RGly
ZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJuYW1lIiksIGpzU3RyaW5nKGV4
ZWMsIG5hbWUpKTsKLSAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZyhleGVjLCAidmFsdWUiKSwgdmFsdWUpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAibmFtZSIpLCBqc1N0cmluZyh2bSwgbmFtZSkpOwor
ICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAidmFs
dWUiKSwgdmFsdWUpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTMyMywxNiArMzI0LDE2
IEBAIEpTVmFsdWUgSlNJbmplY3RlZFNjcmlwdEhvc3Q6OmdldEludGVybmEKICAgICAgICAgc3dp
dGNoIChwcm9taXNlLT5zdGF0dXModm0pKSB7CiAgICAgICAgIGNhc2UgSlNQcm9taXNlOjpTdGF0
dXM6OlBlbmRpbmc6CiAgICAgICAgICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgICAgICAgICBh
cnJheS0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaW5kZXgrKywgY29uc3RydWN0SW50ZXJuYWxQcm9w
ZXJ0eShleGVjLCAic3RhdHVzIl9zLCBqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywgInBlbmRpbmci
X3MpKSk7CisgICAgICAgICAgICBhcnJheS0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaW5kZXgrKywg
Y29uc3RydWN0SW50ZXJuYWxQcm9wZXJ0eShleGVjLCAic3RhdHVzIl9zLCBqc05vbnRyaXZpYWxT
dHJpbmcodm0sICJwZW5kaW5nIl9zKSkpOwogICAgICAgICAgICAgcmV0dXJuIGFycmF5OwogICAg
ICAgICBjYXNlIEpTUHJvbWlzZTo6U3RhdHVzOjpGdWxmaWxsZWQ6Ci0gICAgICAgICAgICBhcnJh
eS0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaW5kZXgrKywgY29uc3RydWN0SW50ZXJuYWxQcm9wZXJ0
eShleGVjLCAic3RhdHVzIl9zLCBqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywgInJlc29sdmVkIl9z
KSkpOworICAgICAgICAgICAgYXJyYXktPnB1dERpcmVjdEluZGV4KGV4ZWMsIGluZGV4KyssIGNv
bnN0cnVjdEludGVybmFsUHJvcGVydHkoZXhlYywgInN0YXR1cyJfcywganNOb250cml2aWFsU3Ry
aW5nKHZtLCAicmVzb2x2ZWQiX3MpKSk7CiAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCBKU1ZhbHVlKCkpOwogICAgICAgICAgICAgc2NvcGUucmVsZWFzZSgpOwogICAgICAg
ICAgICAgYXJyYXktPnB1dERpcmVjdEluZGV4KGV4ZWMsIGluZGV4KyssIGNvbnN0cnVjdEludGVy
bmFsUHJvcGVydHkoZXhlYywgInJlc3VsdCJfcywgcHJvbWlzZS0+cmVzdWx0KHZtKSkpOwogICAg
ICAgICAgICAgcmV0dXJuIGFycmF5OwogICAgICAgICBjYXNlIEpTUHJvbWlzZTo6U3RhdHVzOjpS
ZWplY3RlZDoKLSAgICAgICAgICAgIGFycmF5LT5wdXREaXJlY3RJbmRleChleGVjLCBpbmRleCsr
LCBjb25zdHJ1Y3RJbnRlcm5hbFByb3BlcnR5KGV4ZWMsICJzdGF0dXMiX3MsIGpzTm9udHJpdmlh
bFN0cmluZyhleGVjLCAicmVqZWN0ZWQiX3MpKSk7CisgICAgICAgICAgICBhcnJheS0+cHV0RGly
ZWN0SW5kZXgoZXhlYywgaW5kZXgrKywgY29uc3RydWN0SW50ZXJuYWxQcm9wZXJ0eShleGVjLCAi
c3RhdHVzIl9zLCBqc05vbnRyaXZpYWxTdHJpbmcodm0sICJyZWplY3RlZCJfcykpKTsKICAgICAg
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTVmFsdWUoKSk7CiAgICAgICAgICAg
ICBzY29wZS5yZWxlYXNlKCk7CiAgICAgICAgICAgICBhcnJheS0+cHV0RGlyZWN0SW5kZXgoZXhl
YywgaW5kZXgrKywgY29uc3RydWN0SW50ZXJuYWxQcm9wZXJ0eShleGVjLCAicmVzdWx0Il9zLCBw
cm9taXNlLT5yZXN1bHQodm0pKSk7CkBAIC00MDQsNyArNDA1LDcgQEAgSlNWYWx1ZSBKU0luamVj
dGVkU2NyaXB0SG9zdDo6Z2V0SW50ZXJuYQogICAgICAgICAgICAgYXJyYXktPnB1dERpcmVjdElu
ZGV4KGV4ZWMsIGluZGV4KyssIGNvbnN0cnVjdEludGVybmFsUHJvcGVydHkoZXhlYywgIm1hcCIs
IGl0ZXJhdGVkVmFsdWUpKTsKICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IEpTVmFsdWUoKSk7CiAgICAgICAgICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgICAgICAgICBh
cnJheS0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaW5kZXgrKywgY29uc3RydWN0SW50ZXJuYWxQcm9w
ZXJ0eShleGVjLCAia2luZCIsIGpzTm9udHJpdmlhbFN0cmluZyhleGVjLCBraW5kKSkpOworICAg
ICAgICAgICAgYXJyYXktPnB1dERpcmVjdEluZGV4KGV4ZWMsIGluZGV4KyssIGNvbnN0cnVjdElu
dGVybmFsUHJvcGVydHkoZXhlYywgImtpbmQiLCBqc05vbnRyaXZpYWxTdHJpbmcodm0sIGtpbmQp
KSk7CiAgICAgICAgICAgICByZXR1cm4gYXJyYXk7CiAgICAgICAgIH0KIApAQCAtNDI4LDcgKzQy
OSw3IEBAIEpTVmFsdWUgSlNJbmplY3RlZFNjcmlwdEhvc3Q6OmdldEludGVybmEKICAgICAgICAg
ICAgIGFycmF5LT5wdXREaXJlY3RJbmRleChleGVjLCBpbmRleCsrLCBjb25zdHJ1Y3RJbnRlcm5h
bFByb3BlcnR5KGV4ZWMsICJzZXQiLCBpdGVyYXRlZFZhbHVlKSk7CiAgICAgICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkpOwogICAgICAgICAgICAgc2NvcGUucmVs
ZWFzZSgpOwotICAgICAgICAgICAgYXJyYXktPnB1dERpcmVjdEluZGV4KGV4ZWMsIGluZGV4Kyss
IGNvbnN0cnVjdEludGVybmFsUHJvcGVydHkoZXhlYywgImtpbmQiLCBqc05vbnRyaXZpYWxTdHJp
bmcoZXhlYywga2luZCkpKTsKKyAgICAgICAgICAgIGFycmF5LT5wdXREaXJlY3RJbmRleChleGVj
LCBpbmRleCsrLCBjb25zdHJ1Y3RJbnRlcm5hbFByb3BlcnR5KGV4ZWMsICJraW5kIiwganNOb250
cml2aWFsU3RyaW5nKHZtLCBraW5kKSkpOwogICAgICAgICAgICAgcmV0dXJuIGFycmF5OwogICAg
ICAgICB9CiAgICAgfQpAQCAtNTA0LDggKzUwNSw4IEBAIEpTVmFsdWUgSlNJbmplY3RlZFNjcmlw
dEhvc3Q6OndlYWtNYXBFbnQKIAogICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8
IGJ1ZmZlci5zaXplKCk7IGluZGV4ICs9IDIpIHsKICAgICAgICAgSlNPYmplY3QqIGVudHJ5ID0g
Y29uc3RydWN0RW1wdHlPYmplY3QoZXhlYyk7Ci0gICAgICAgIGVudHJ5LT5wdXREaXJlY3Qodm0s
IElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgImtleSIpLCBidWZmZXIuYXQoaW5kZXgpKTsK
LSAgICAgICAgZW50cnktPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVj
LCAidmFsdWUiKSwgYnVmZmVyLmF0KGluZGV4ICsgMSkpOworICAgICAgICBlbnRyeS0+cHV0RGly
ZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAia2V5IiksIGJ1ZmZlci5hdChpbmRl
eCkpOworICAgICAgICBlbnRyeS0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KHZtLCAidmFsdWUiKSwgYnVmZmVyLmF0KGluZGV4ICsgMSkpOwogICAgICAgICBhcnJheS0+cHV0
RGlyZWN0SW5kZXgoZXhlYywgaW5kZXggLyAyLCBlbnRyeSk7CiAgICAgICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIEpTVmFsdWUoKSk7CiAgICAgfQpAQCAtNTU0LDcgKzU1NSw3IEBAIEpT
VmFsdWUgSlNJbmplY3RlZFNjcmlwdEhvc3Q6OndlYWtTZXRFbnQKIAogICAgIGZvciAodW5zaWdu
ZWQgaW5kZXggPSAwOyBpbmRleCA8IGJ1ZmZlci5zaXplKCk7ICsraW5kZXgpIHsKICAgICAgICAg
SlNPYmplY3QqIGVudHJ5ID0gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYyk7Ci0gICAgICAgIGVu
dHJ5LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgInZhbHVlIiks
IGJ1ZmZlci5hdChpbmRleCkpOworICAgICAgICBlbnRyeS0+cHV0RGlyZWN0KHZtLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKHZtLCAidmFsdWUiKSwgYnVmZmVyLmF0KGluZGV4KSk7CiAgICAgICAg
IGFycmF5LT5wdXREaXJlY3RJbmRleChleGVjLCBpbmRleCwgZW50cnkpOwogICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkpOwogICAgIH0KQEAgLTY1Myw3ICs2NTQs
NyBAQCBKU1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRIb3N0OjppdGVyYXRvckVuCiAgICAgICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKICAgICAgICAgSlNPYmplY3QqIGVudHJ5
ID0gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYyk7Ci0gICAgICAgIGVudHJ5LT5wdXREaXJlY3Qo
dm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgInZhbHVlIiksIG5leHRWYWx1ZSk7Cisg
ICAgICAgIGVudHJ5LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJ2
YWx1ZSIpLCBuZXh0VmFsdWUpOwogICAgICAgICBhcnJheS0+cHV0RGlyZWN0SW5kZXgoZXhlYywg
aSwgZW50cnkpOwogICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7CiAg
ICAgICAgICAgICBzY29wZS5yZWxlYXNlKCk7CkBAIC03MjIsNyArNzIzLDcgQEAgSlNWYWx1ZSBK
U0luamVjdGVkU2NyaXB0SG9zdDo6cXVlcnlJbnN0YQogICAgIGlmIChjaGVja0ZvcmJpZGRlblBy
b3RvdHlwZShleGVjLCBvYmplY3QsIGxleGljYWxHbG9iYWxPYmplY3QtPnByb21pc2VQcm90b3R5
cGUoKSkpCiAgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwgInF1ZXJ5
SW5zdGFuY2VzIGNhbm5vdCBiZSBjYWxsZWQgd2l0aCBQcm9taXNlLiJfcyk7CiAKLSAgICBzYW5p
dGl6ZVN0YWNrRm9yVk0oJnZtKTsKKyAgICBzYW5pdGl6ZVN0YWNrRm9yVk0odm0pOwogICAgIHZt
LmhlYXAuY29sbGVjdE5vdyhTeW5jLCBDb2xsZWN0aW9uU2NvcGU6OkZ1bGwpOwogCiAgICAgSlNB
cnJheSogYXJyYXkgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIG51bGxwdHIpOwpAQCAtODAw
LDcgKzgwMSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGFuYWx5emVFZGdlKEpTQ2VsbCogZnJvbSwg
SlNDZWxsKiB0bywgU2xvdFZpc2l0b3I6OlJvb3RNYXJrUmVhc29uIHJlYXNvbikKICAgICB7CiAg
ICAgICAgIEFTU0VSVCh0byk7Ci0gICAgICAgIEFTU0VSVCh0by0+dm0oKS0+aGVhcFByb2ZpbGVy
KCktPmFjdGl2ZUhlYXBBbmFseXplcigpID09IHRoaXMpOworICAgICAgICBBU1NFUlQodG8tPnZt
KCkuaGVhcFByb2ZpbGVyKCktPmFjdGl2ZUhlYXBBbmFseXplcigpID09IHRoaXMpOwogCiAgICAg
ICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9tdXRleCk7CiAKQEAgLTkwMCw3ICs5MDEsNyBA
QCBKU1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRIb3N0OjpxdWVyeUhvbGRlCiAgICAgewogICAgICAg
ICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CiAgICAgICAgIFByZXZlbnRDb2xsZWN0aW9uU2Nv
cGUgcHJldmVudENvbGxlY3Rpb25TY29wZSh2bS5oZWFwKTsKLSAgICAgICAgc2FuaXRpemVTdGFj
a0ZvclZNKCZ2bSk7CisgICAgICAgIHNhbml0aXplU3RhY2tGb3JWTSh2bSk7CiAKICAgICAgICAg
SGVhcEhvbGRlckZpbmRlciBob2xkZXJGaW5kZXIodm0uZW5zdXJlSGVhcFByb2ZpbGVyKCksIHRh
cmdldC5hc0NlbGwoKSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
SlNKYXZhU2NyaXB0Q2FsbEZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL0pTSmF2YVNjcmlwdENhbGxGcmFtZS5jcHAJKHJldmlzaW9uIDI0OTEy
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNKYXZhU2NyaXB0Q2FsbEZy
YW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEyMSw5ICsxMjEsOSBAQCBzdGF0aWMgSlNWYWx1
ZSB2YWx1ZUZvclNjb3BlTG9jYXRpb24oRXhlCiAgICAgLy8gRGVidWdnZXIuTG9jYXRpb24gcHJv
dG9jb2wgb2JqZWN0LgogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgSlNPYmplY3QqIHJl
c3VsdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0
KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJzY3JpcHRJZCIpLCBqc1N0cmluZyhl
eGVjLCBTdHJpbmc6Om51bWJlcihsb2NhdGlvbi5zb3VyY2VJRCkpKTsKLSAgICByZXN1bHQtPnB1
dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCAibGluZU51bWJlciIpLCBq
c051bWJlcihsb2NhdGlvbi5saW5lKSk7Ci0gICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50
aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgImNvbHVtbk51bWJlciIpLCBqc051bWJlcihsb2NhdGlv
bi5jb2x1bW4pKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZyh2bSwgInNjcmlwdElkIiksIGpzU3RyaW5nKHZtLCBTdHJpbmc6Om51bWJlcihsb2NhdGlv
bi5zb3VyY2VJRCkpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyh2bSwgImxpbmVOdW1iZXIiKSwganNOdW1iZXIobG9jYXRpb24ubGluZSkpOworICAg
IHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiY29sdW1u
TnVtYmVyIiksIGpzTnVtYmVyKGxvY2F0aW9uLmNvbHVtbikpOwogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKQEAgLTE0Myw5ICsxNDMsOSBAQCBKU1ZhbHVlIEpTSmF2YVNjcmlwdENhbGxGcmFtZTo6
c2NvcGVEZXNjCiAgICAgZm9yIChEZWJ1Z2dlclNjb3BlOjppdGVyYXRvciBpdGVyID0gc2NvcGVD
aGFpbi0+YmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgewogICAgICAgICBEZWJ1Z2dlclNj
b3BlKiBzY29wZSA9IGl0ZXIuZ2V0KCk7CiAgICAgICAgIEpTT2JqZWN0KiBkZXNjcmlwdGlvbiA9
IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMpOwotICAgICAgICBkZXNjcmlwdGlvbi0+cHV0RGly
ZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJ0eXBlIiksIHZhbHVlRm9yU2Nv
cGVUeXBlKHNjb3BlKSk7Ci0gICAgICAgIGRlc2NyaXB0aW9uLT5wdXREaXJlY3Qodm0sIElkZW50
aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgIm5hbWUiKSwganNTdHJpbmcoZXhlYywgc2NvcGUtPm5h
bWUoKSkpOwotICAgICAgICBkZXNjcmlwdGlvbi0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKGV4ZWMsICJsb2NhdGlvbiIpLCB2YWx1ZUZvclNjb3BlTG9jYXRpb24oZXhlYywg
c2NvcGUtPmxvY2F0aW9uKCkpKTsKKyAgICAgICAgZGVzY3JpcHRpb24tPnB1dERpcmVjdCh2bSwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInR5cGUiKSwgdmFsdWVGb3JTY29wZVR5cGUoc2Nv
cGUpKTsKKyAgICAgICAgZGVzY3JpcHRpb24tPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyh2bSwgIm5hbWUiKSwganNTdHJpbmcodm0sIHNjb3BlLT5uYW1lKCkpKTsKKyAgICAg
ICAgZGVzY3JpcHRpb24tPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwg
ImxvY2F0aW9uIiksIHZhbHVlRm9yU2NvcGVMb2NhdGlvbihleGVjLCBzY29wZS0+bG9jYXRpb24o
KSkpOwogICAgICAgICBhcnJheS0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaW5kZXgrKywgZGVzY3Jp
cHRpb24pOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIEpTVmFsdWUo
KSk7CiAgICAgfQpAQCAtMTc1LDcgKzE3NSw3IEBAIEpTVmFsdWUgSlNKYXZhU2NyaXB0Q2FsbEZy
YW1lOjpjb2x1bW4oRXgKIAogSlNWYWx1ZSBKU0phdmFTY3JpcHRDYWxsRnJhbWU6OmZ1bmN0aW9u
TmFtZShFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMs
IGltcGwoKS5mdW5jdGlvbk5hbWUoKSk7CisgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMtPnZtKCks
IGltcGwoKS5mdW5jdGlvbk5hbWUoKSk7CiB9CiAKIEpTVmFsdWUgSlNKYXZhU2NyaXB0Q2FsbEZy
YW1lOjpzY29wZUNoYWluKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKQEAgLTIxOCwxMSArMjE4LDEy
IEBAIEpTVmFsdWUgSlNKYXZhU2NyaXB0Q2FsbEZyYW1lOjppc1RhaWxEZWwKIAogSlNWYWx1ZSBK
U0phdmFTY3JpcHRDYWxsRnJhbWU6OnR5cGUoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogeworICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgc3dpdGNoIChpbXBsKCkudHlwZSgpKSB7CiAgICAg
Y2FzZSBEZWJ1Z2dlckNhbGxGcmFtZTo6RnVuY3Rpb25UeXBlOgotICAgICAgICByZXR1cm4ganNO
b250cml2aWFsU3RyaW5nKGV4ZWMsICJmdW5jdGlvbiJfcyk7CisgICAgICAgIHJldHVybiBqc05v
bnRyaXZpYWxTdHJpbmcodm0sICJmdW5jdGlvbiJfcyk7CiAgICAgY2FzZSBEZWJ1Z2dlckNhbGxG
cmFtZTo6UHJvZ3JhbVR5cGU6Ci0gICAgICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcoZXhl
YywgInByb2dyYW0iX3MpOworICAgICAgICByZXR1cm4ganNOb250cml2aWFsU3RyaW5nKHZtLCAi
cHJvZ3JhbSJfcyk7CiAgICAgfQogCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL1NjcmlwdENhbGxTdGFja0ZhY3RvcnkuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvU2NyaXB0Q2Fs
bFN0YWNrRmFjdG9yeS5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3IvU2NyaXB0Q2FsbFN0YWNrRmFjdG9yeS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoYykgMjAxMCBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDEyIFJlc2VhcmNo
IEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKQEAgLTEyOSw5ICsx
MjksOSBAQCBzdGF0aWMgYm9vbCBleHRyYWN0U291cmNlSW5mb3JtYXRpb25Gcm9tCiAgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogCiAgICAgLy8gRklYTUU6IDxodHRw
Oi8vd2Via2l0Lm9yZy9iLzExNTA4Nz4gV2ViIEluc3BlY3RvcjogU2hvdWxkIG5vdCBuZWVkIHRv
IGV2YWx1YXRlIEphdmFTY3JpcHQgaGFuZGxpbmcgZXhjZXB0aW9ucwotICAgIEpTVmFsdWUgbGlu
ZVZhbHVlID0gZXhjZXB0aW9uT2JqZWN0LT5nZXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21T
dHJpbmcoZXhlYywgImxpbmUiKSk7Ci0gICAgSlNWYWx1ZSBjb2x1bW5WYWx1ZSA9IGV4Y2VwdGlv
bk9iamVjdC0+Z2V0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJjb2x1
bW4iKSk7Ci0gICAgSlNWYWx1ZSBzb3VyY2VVUkxWYWx1ZSA9IGV4Y2VwdGlvbk9iamVjdC0+Z2V0
RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJzb3VyY2VVUkwiKSk7Cisg
ICAgSlNWYWx1ZSBsaW5lVmFsdWUgPSBleGNlcHRpb25PYmplY3QtPmdldERpcmVjdCh2bSwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImxpbmUiKSk7CisgICAgSlNWYWx1ZSBjb2x1bW5WYWx1
ZSA9IGV4Y2VwdGlvbk9iamVjdC0+Z2V0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KHZtLCAiY29sdW1uIikpOworICAgIEpTVmFsdWUgc291cmNlVVJMVmFsdWUgPSBleGNlcHRpb25P
YmplY3QtPmdldERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInNvdXJjZVVS
TCIpKTsKICAgICAKICAgICBib29sIHJlc3VsdCA9IGZhbHNlOwogICAgIGlmIChsaW5lVmFsdWUg
JiYgbGluZVZhbHVlLmlzTnVtYmVyKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3IvYWdlbnRzL0luc3BlY3RvckF1ZGl0QWdlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckF1ZGl0QWdlbnQuY3Bw
CShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2Fn
ZW50cy9JbnNwZWN0b3JBdWRpdEFnZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM2LDkgKzEz
NiwxMCBAQCB2b2lkIEluc3BlY3RvckF1ZGl0QWdlbnQ6OnBvcHVsYXRlQXVkaXRPCiAgICAgaWYg
KCFleGVjU3RhdGUpCiAgICAgICAgIHJldHVybjsKIAotICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxv
Y2soZXhlY1N0YXRlKTsKKyAgICBKU0M6OlZNJiB2bSA9IGV4ZWNTdGF0ZS0+dm0oKTsKKyAgICBK
U0M6OkpTTG9ja0hvbGRlciBsb2NrKHZtKTsKIAotICAgIGF1ZGl0T2JqZWN0LT5wdXREaXJlY3Qo
ZXhlY1N0YXRlLT52bSgpLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlY1N0YXRlLCAi
VmVyc2lvbiIpLCBKU0M6OkpTVmFsdWUoSW5zcGVjdG9yOjpQcm90b2NvbDo6QXVkaXQ6OlZFUlNJ
T04pKTsKKyAgICBhdWRpdE9iamVjdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZy
b21TdHJpbmcodm0sICJWZXJzaW9uIiksIEpTQzo6SlNWYWx1ZShJbnNwZWN0b3I6OlByb3RvY29s
OjpBdWRpdDo6VkVSU0lPTikpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckhlYXBBZ2Vu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2Vu
dHMvSW5zcGVjdG9ySGVhcEFnZW50LmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9ySGVhcEFnZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUt
MjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTkwLDcgKzkwLDcgQEAgdm9pZCBJbnNwZWN0b3JIZWFwQWdlbnQ6Omdj
KEVycm9yU3RyaW5nJgogewogICAgIFZNJiB2bSA9IG1fZW52aXJvbm1lbnQudm0oKTsKICAgICBK
U0xvY2tIb2xkZXIgbG9jayh2bSk7Ci0gICAgc2FuaXRpemVTdGFja0ZvclZNKCZ2bSk7CisgICAg
c2FuaXRpemVTdGFja0ZvclZNKHZtKTsKICAgICB2bS5oZWFwLmNvbGxlY3ROb3coU3luYywgQ29s
bGVjdGlvblNjb3BlOjpGdWxsKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
dGVycHJldGVyL0ZyYW1lVHJhY2Vycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnRlcnByZXRlci9GcmFtZVRyYWNlcnMuaAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ZyYW1lVHJhY2Vycy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtODMsMTMgKzgzLDEzIEBAIEFMV0FZU19JTkxJTkUgc3RhdGljIHZvaWQgYXNzZXJ0
U3RhY2tQb2kKIAogY2xhc3MgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHsKIHB1YmxpYzoKLSAgICBB
TFdBWVNfSU5MSU5FIE5hdGl2ZUNhbGxGcmFtZVRyYWNlcihWTSogdm0sIENhbGxGcmFtZSogY2Fs
bEZyYW1lKQorICAgIEFMV0FZU19JTkxJTkUgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyKFZNJiB2bSwg
Q2FsbEZyYW1lKiBjYWxsRnJhbWUpCiAgICAgewotICAgICAgICBBU1NFUlQodm0pOworICAgICAg
ICBBU1NFUlQoJnZtKTsKICAgICAgICAgQVNTRVJUKGNhbGxGcmFtZSk7Ci0gICAgICAgIEFTU0VS
VChyZWludGVycHJldF9jYXN0PHZvaWQqPihjYWxsRnJhbWUpIDwgcmVpbnRlcnByZXRfY2FzdDx2
b2lkKj4odm0tPnRvcEVudHJ5RnJhbWUpKTsKKyAgICAgICAgQVNTRVJUKHJlaW50ZXJwcmV0X2Nh
c3Q8dm9pZCo+KGNhbGxGcmFtZSkgPCByZWludGVycHJldF9jYXN0PHZvaWQqPih2bS50b3BFbnRy
eUZyYW1lKSk7CiAgICAgICAgIGFzc2VydFN0YWNrUG9pbnRlcklzQWxpZ25lZCgpOwotICAgICAg
ICB2bS0+dG9wQ2FsbEZyYW1lID0gY2FsbEZyYW1lOworICAgICAgICB2bS50b3BDYWxsRnJhbWUg
PSBjYWxsRnJhbWU7CiAgICAgfQogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
dGVycHJldGVyL0ludGVycHJldGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02NjIsNyArNjYyLDcgQEAgdm9pZCBJbnRlcnByZXRlcjo6bm90aWZ5RGVidWdn
ZXJPZkV4Y2VwdAogSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZVByb2dyYW0oY29uc3QgU291
cmNlQ29kZSYgc291cmNlLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNPYmplY3QqIHRoaXNPYmop
CiB7CiAgICAgSlNTY29wZSogc2NvcGUgPSB0aGlzT2JqLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFs
U2NvcGUoKTsKLSAgICBWTSYgdm0gPSAqc2NvcGUtPnZtKCk7CisgICAgVk0mIHZtID0gc2NvcGUt
PnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAK
ICAgICBQcm9ncmFtRXhlY3V0YWJsZSogcHJvZ3JhbSA9IFByb2dyYW1FeGVjdXRhYmxlOjpjcmVh
dGUoY2FsbEZyYW1lLCBzb3VyY2UpOwpAQCAtOTg3LDcgKzk4Nyw3IEBAIEpTT2JqZWN0KiBJbnRl
cnByZXRlcjo6ZXhlY3V0ZUNvbnN0cnVjdCgKIAogQ2FsbEZyYW1lQ2xvc3VyZSBJbnRlcnByZXRl
cjo6cHJlcGFyZUZvclJlcGVhdENhbGwoRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4ZWN1
dGFibGUsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBQcm90b0NhbGxGcmFtZSogcHJvdG9DYWxsRnJh
bWUsIEpTRnVuY3Rpb24qIGZ1bmN0aW9uLCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMs
IEpTU2NvcGUqIHNjb3BlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewotICAgIFZNJiB2bSA9ICpz
Y29wZS0+dm0oKTsKKyAgICBWTSYgdm0gPSBzY29wZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICB0aHJvd1Njb3BlLmFzc2VydE5vRXhj
ZXB0aW9uKCk7CiAgICAgCkBAIC0xMDEyLDcgKzEwMTIsNyBAQCBDYWxsRnJhbWVDbG9zdXJlIElu
dGVycHJldGVyOjpwcmVwYXJlRm9yCiAKIEpTVmFsdWUgSW50ZXJwcmV0ZXI6OmV4ZWN1dGUoRXZh
bEV4ZWN1dGFibGUqIGV2YWwsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU1ZhbHVlIHRoaXNWYWx1
ZSwgSlNTY29wZSogc2NvcGUpCiB7Ci0gICAgVk0mIHZtID0gKnNjb3BlLT52bSgpOworICAgIFZN
JiB2bSA9IHNjb3BlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogCiAgICAgQVNTRVJUKCZ2bSA9PSAmY2FsbEZyYW1lLT52bSgpKTsKQEAgLTEx
NjEsNyArMTE2MSw3IEBAIEpTVmFsdWUgSW50ZXJwcmV0ZXI6OmV4ZWN1dGUoRXZhbEV4ZWN1dGEK
IAogSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZU1vZHVsZVByb2dyYW0oTW9kdWxlUHJvZ3Jh
bUV4ZWN1dGFibGUqIGV4ZWN1dGFibGUsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU01vZHVsZUVu
dmlyb25tZW50KiBzY29wZSkKIHsKLSAgICBWTSYgdm0gPSAqc2NvcGUtPnZtKCk7CisgICAgVk0m
IHZtID0gc2NvcGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAKICAgICBBU1NFUlQoJnZtID09ICZjYWxsRnJhbWUtPnZtKCkpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlzaXRvci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlzaXRvci5j
cHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9TdGFja1Zpc2l0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjc0LDcgKzI3NCw3IEBAIE9w
dGlvbmFsPFJlZ2lzdGVyQXRPZmZzZXRMaXN0PiBTdGFja1Zpc2kKICAgICB9CiAKICAgICBpZiAo
Y2FsbGVlKCkuaXNDZWxsKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIGpzVG9XYXNtSUNDYWxsZWUg
PSBqc0R5bmFtaWNDYXN0PEpTVG9XYXNtSUNDYWxsZWUqPigqY2FsbGVlKCkuYXNDZWxsKCktPnZt
KCksIGNhbGxlZSgpLmFzQ2VsbCgpKSkKKyAgICAgICAgaWYgKGF1dG8qIGpzVG9XYXNtSUNDYWxs
ZWUgPSBqc0R5bmFtaWNDYXN0PEpTVG9XYXNtSUNDYWxsZWUqPihjYWxsZWUoKS5hc0NlbGwoKS0+
dm0oKSwgY2FsbGVlKCkuYXNDZWxsKCkpKQogICAgICAgICAgICAgcmV0dXJuIGpzVG9XYXNtSUND
YWxsZWUtPmZ1bmN0aW9uKCktPnVzZWRDYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CiAgICAgfQogI2Vu
ZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKQEAgLTQxNCw3ICs0MTQsNyBAQCB2b2lkIFN0YWNr
VmlzaXRvcjo6RnJhbWU6OmNvbXB1dGVMaW5lQW5kCiAgICAgbGluZSA9IGRpdm90TGluZSArIGNv
ZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCktPmZpcnN0TGluZSgpOwogICAgIGNvbHVtbiA9IGRp
dm90Q29sdW1uICsgKGRpdm90TGluZSA/IDEgOiBjb2RlQmxvY2stPmZpcnN0TGluZUNvbHVtbk9m
ZnNldCgpKTsKIAotICAgIGlmIChPcHRpb25hbDxpbnQ+IG92ZXJyaWRlTGluZU51bWJlciA9IGNv
ZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCktPm92ZXJyaWRlTGluZU51bWJlcigqY29kZUJsb2Nr
LT52bSgpKSkKKyAgICBpZiAoT3B0aW9uYWw8aW50PiBvdmVycmlkZUxpbmVOdW1iZXIgPSBjb2Rl
QmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLT5vdmVycmlkZUxpbmVOdW1iZXIoY29kZUJsb2NrLT52
bSgpKSkKICAgICAgICAgbGluZSA9IG92ZXJyaWRlTGluZU51bWJlci52YWx1ZSgpOwogfQogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCShy
ZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVs
cGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzNCw3ICs2MzQsNyBAQCB2b2lkIEFzc2VtYmx5
SGVscGVyczo6ZW1pdER1bWJWaXJ0dWFsQ2FsCiAgICAgQ2FsbCBjYWxsID0gbmVhckNhbGwoKTsK
ICAgICBhZGRMaW5rVGFzaygKICAgICAgICAgWz0sICZ2bV0gKExpbmtCdWZmZXImIGxpbmtCdWZm
ZXIpIHsKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91dGluZVB0
clRhZz4gdmlydHVhbFRodW5rID0gdmlydHVhbFRodW5rRm9yKCZ2bSwgKmluZm8pOworICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiB2aXJ0dWFs
VGh1bmsgPSB2aXJ0dWFsVGh1bmtGb3Iodm0sICppbmZvKTsKICAgICAgICAgICAgIGluZm8tPnNl
dFNsb3dTdHViKGNyZWF0ZUpJVFN0dWJSb3V0aW5lKHZpcnR1YWxUaHVuaywgdm0sIG51bGxwdHIs
IHRydWUpKTsKICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBDb2RlTG9jYXRpb25M
YWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4odmlydHVhbFRodW5rLmNvZGUoKSkpOwogICAgICAg
ICB9KTsKQEAgLTcyNyw3ICs3MjcsNyBAQCB2b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1pdENvbnZl
cnRWYWx1ZVRvCiAgICAgZG9uZS5hcHBlbmQoanVtcCgpKTsKIAogICAgIGlzU3RyaW5nLmxpbmso
dGhpcyk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGpzRW1wdHlTdHJpbmcoJnZtKSksIHJlc3Vs
dCk7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKGpzRW1wdHlTdHJpbmcodm0pKSwgcmVzdWx0KTsK
ICAgICBjb21wYXJlUHRyKGludmVydCA/IEVxdWFsIDogTm90RXF1YWwsIHZhbHVlLnBheWxvYWRH
UFIoKSwgcmVzdWx0LCByZXN1bHQpOwogICAgIGRvbmUuYXBwZW5kKGp1bXAoKSk7CiAKQEAgLTgx
Nyw3ICs4MTcsNyBAQCBBc3NlbWJseUhlbHBlcnM6Okp1bXBMaXN0IEFzc2VtYmx5SGVscGVyCiAg
ICAgfQogCiAgICAgaXNTdHJpbmcubGluayh0aGlzKTsKLSAgICB0cnV0aHkuYXBwZW5kKGJyYW5j
aFB0cihpbnZlcnQgPyBFcXVhbCA6IE5vdEVxdWFsLCB2YWx1ZS5wYXlsb2FkR1BSKCksIFRydXN0
ZWRJbW1QdHIoanNFbXB0eVN0cmluZygmdm0pKSkpOworICAgIHRydXRoeS5hcHBlbmQoYnJhbmNo
UHRyKGludmVydCA/IEVxdWFsIDogTm90RXF1YWwsIHZhbHVlLnBheWxvYWRHUFIoKSwgVHJ1c3Rl
ZEltbVB0cihqc0VtcHR5U3RyaW5nKHZtKSkpKTsKICAgICBkb25lLmFwcGVuZChqdW1wKCkpOwog
CiAgICAgaXNCaWdJbnQubGluayh0aGlzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvQXNzZW1ibHlIZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtNjIsNyAr
NjIsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2soKSB7IHJl
dHVybiBtX2NvZGVCbG9jazsgfQotICAgIFZNJiB2bSgpIHsgcmV0dXJuICptX2NvZGVCbG9jay0+
dm0oKTsgfQorICAgIFZNJiB2bSgpIHsgcmV0dXJuIG1fY29kZUJsb2NrLT52bSgpOyB9CiAgICAg
QXNzZW1ibGVyVHlwZV9UJiBhc3NlbWJsZXIoKSB7IHJldHVybiBtX2Fzc2VtYmxlcjsgfQogCiAg
ICAgdm9pZCBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVQuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDA4LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA4LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03NCwxMiArNzQsMTIgQEAgdm9pZCBjdGlQ
YXRjaENhbGxCeVJldHVybkFkZHJlc3MoUmV0dXJuQQogICAgICAgICBuZXdDYWxsZWVGdW5jdGlv
bi5yZXRhZ2dlZDxPcGVyYXRpb25QdHJUYWc+KCkpOwogfQogCi1KSVQ6OkpJVChWTSogdm0sIENv
ZGVCbG9jayogY29kZUJsb2NrLCB1bnNpZ25lZCBsb29wT1NSRW50cnlCeXRlY29kZU9mZnNldCkK
LSAgICA6IEpTSW50ZXJmYWNlSklUKHZtLCBjb2RlQmxvY2spCi0gICAgLCBtX2ludGVycHJldGVy
KHZtLT5pbnRlcnByZXRlcikKK0pJVDo6SklUKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IHVuc2lnbmVkIGxvb3BPU1JFbnRyeUJ5dGVjb2RlT2Zmc2V0KQorICAgIDogSlNJbnRlcmZhY2VK
SVQoJnZtLCBjb2RlQmxvY2spCisgICAgLCBtX2ludGVycHJldGVyKHZtLmludGVycHJldGVyKQog
ICAgICwgbV9sYWJlbHMoY29kZUJsb2NrID8gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXpl
KCkgOiAwKQogICAgICwgbV9ieXRlY29kZU9mZnNldChzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2ln
bmVkPjo6bWF4KCkpCi0gICAgLCBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlcigqdm0pCisgICAg
LCBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlcih2bSkKICAgICAsIG1fY2FuQmVPcHRpbWl6ZWQo
ZmFsc2UpCiAgICAgLCBtX3Nob3VsZEVtaXRQcm9maWxpbmcoZmFsc2UpCiAgICAgLCBtX3Nob3Vs
ZFVzZUluZGV4TWFza2luZyhPcHRpb25zOjplbmFibGVTcGVjdHJlTWl0aWdhdGlvbnMoKSkKQEAg
LTEwMiw3ICsxMDIsNyBAQCB2b2lkIEpJVDo6ZW1pdEVudGVyT3B0aW1pemF0aW9uQ2hlY2soKQog
ICAgIHNraXBPcHRpbWl6ZS5hcHBlbmQoYnJhbmNoQWRkMzIoU2lnbmVkLCBUcnVzdGVkSW1tMzIo
T3B0aW9uczo6ZXhlY3V0aW9uQ291bnRlckluY3JlbWVudEZvckVudHJ5KCkpLCBBYnNvbHV0ZUFk
ZHJlc3MobV9jb2RlQmxvY2stPmFkZHJlc3NPZkpJVEV4ZWN1dGVDb3VudGVyKCkpKSk7CiAgICAg
QVNTRVJUKCFtX2J5dGVjb2RlT2Zmc2V0KTsKIAotICAgIGNvcHlDYWxsZWVTYXZlc0Zyb21GcmFt
ZU9yUmVnaXN0ZXJUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgpLT50b3BFbnRyeUZy
YW1lKTsKKyAgICBjb3B5Q2FsbGVlU2F2ZXNGcm9tRnJhbWVPclJlZ2lzdGVyVG9FbnRyeUZyYW1l
Q2FsbGVlU2F2ZXNCdWZmZXIodm0oKS50b3BFbnRyeUZyYW1lKTsKIAogICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uT3B0aW1pemUsIG1fYnl0ZWNvZGVPZmZzZXQpOwogICAgIHNraXBPcHRpbWl6
ZS5hcHBlbmQoYnJhbmNoVGVzdFB0cihaZXJvLCByZXR1cm5WYWx1ZUdQUikpOwpAQCAtMTkxLDcg
KzE5MSw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKIAogICAgIG1fY2Fs
bExpbmtJbmZvSW5kZXggPSAwOwogCi0gICAgVk0mIHZtID0gKm1fY29kZUJsb2NrLT52bSgpOwor
ICAgIFZNJiB2bSA9IG1fY29kZUJsb2NrLT52bSgpOwogICAgIHVuc2lnbmVkIHN0YXJ0Qnl0ZWNv
ZGVPZmZzZXQgPSAwOwogICAgIGlmIChtX2xvb3BPU1JFbnRyeUJ5dGVjb2RlT2Zmc2V0ICYmICht
X2NvZGVCbG9jay0+aW5oZXJpdHM8UHJvZ3JhbUNvZGVCbG9jaz4odm0pIHx8IG1fY29kZUJsb2Nr
LT5pbmhlcml0czxNb2R1bGVQcm9ncmFtQ29kZUJsb2NrPih2bSkpKSB7CiAgICAgICAgIC8vIFdl
IGNhbiBvbmx5IGRvIHRoaXMgb3B0aW1pemF0aW9uIGJlY2F1c2Ugd2UgZXhlY3V0ZSBQcm9ncmFt
Q29kZUJsb2NrJ3MgZXhhY3RseSBvbmNlLgpAQCAtOTMzLDExICs5MzMsMTEgQEAgdm9pZCBKSVQ6
OnByaXZhdGVDb21waWxlRXhjZXB0aW9uSGFuZGxlcgogICAgIGlmICghbV9leGNlcHRpb25DaGVj
a3NXaXRoQ2FsbEZyYW1lUm9sbGJhY2suZW1wdHkoKSkgewogICAgICAgICBtX2V4Y2VwdGlvbkNo
ZWNrc1dpdGhDYWxsRnJhbWVSb2xsYmFjay5saW5rKHRoaXMpOwogCi0gICAgICAgIGNvcHlDYWxs
ZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCktPnRvcEVudHJ5RnJhbWUp
OworICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2
bSgpLnRvcEVudHJ5RnJhbWUpOwogCiAgICAgICAgIC8vIGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXJG
cm9tQ2FsbGVyRnJhbWUgaXMgcGFzc2VkIHR3byBhcmd1bWVudHMsIHRoZSBWTSBhbmQgdGhlIGV4
ZWMgKHRoZSBDYWxsRnJhbWUqKS4KIAotICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIodm0oKSks
IEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cigmdm0o
KSksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CiAgICAgICAgIG1vdmUoR1BSSW5mbzo6Y2FsbEZy
YW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CiAKICNpZiBDUFUoWDg2KQpAQCAt
OTQ2LDE3ICs5NDYsMTcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlRXhjZXB0aW9uSGFuZGxl
cgogICAgICAgICBwb2tlKEdQUkluZm86OmFyZ3VtZW50R1BSMSwgMSk7CiAjZW5kaWYKICAgICAg
ICAgbV9jYWxscy5hcHBlbmQoQ2FsbFJlY29yZChjYWxsKE9wZXJhdGlvblB0clRhZyksIHN0ZDo6
bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRy
VGFnPihsb29rdXBFeGNlcHRpb25IYW5kbGVyRnJvbUNhbGxlckZyYW1lKSkpOwotICAgICAgICBq
dW1wVG9FeGNlcHRpb25IYW5kbGVyKCp2bSgpKTsKKyAgICAgICAganVtcFRvRXhjZXB0aW9uSGFu
ZGxlcih2bSgpKTsKICAgICB9CiAKICAgICBpZiAoIW1fZXhjZXB0aW9uQ2hlY2tzLmVtcHR5KCkg
fHwgbV9ieVZhbENvbXBpbGF0aW9uSW5mby5zaXplKCkpIHsKICAgICAgICAgbV9leGNlcHRpb25I
YW5kbGVyID0gbGFiZWwoKTsKICAgICAgICAgbV9leGNlcHRpb25DaGVja3MubGluayh0aGlzKTsK
IAotICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2
bSgpLT50b3BFbnRyeUZyYW1lKTsKKyAgICAgICAgY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1l
Q2FsbGVlU2F2ZXNCdWZmZXIodm0oKS50b3BFbnRyeUZyYW1lKTsKIAogICAgICAgICAvLyBsb29r
dXBFeGNlcHRpb25IYW5kbGVyIGlzIHBhc3NlZCB0d28gYXJndW1lbnRzLCB0aGUgVk0gYW5kIHRo
ZSBleGVjICh0aGUgQ2FsbEZyYW1lKikuCi0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cih2bSgp
KSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKCZ2
bSgpKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKICAgICAgICAgbW92ZShHUFJJbmZvOjpjYWxs
RnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKIAogI2lmIENQVShYODYpCkBA
IC05NjUsNyArOTY1LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlRXhjZXB0aW9uSGFuZGxl
cgogICAgICAgICBwb2tlKEdQUkluZm86OmFyZ3VtZW50R1BSMSwgMSk7CiAjZW5kaWYKICAgICAg
ICAgbV9jYWxscy5hcHBlbmQoQ2FsbFJlY29yZChjYWxsKE9wZXJhdGlvblB0clRhZyksIHN0ZDo6
bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRy
VGFnPihsb29rdXBFeGNlcHRpb25IYW5kbGVyKSkpOwotICAgICAgICBqdW1wVG9FeGNlcHRpb25I
YW5kbGVyKCp2bSgpKTsKKyAgICAgICAganVtcFRvRXhjZXB0aW9uSGFuZGxlcih2bSgpKTsKICAg
ICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24gMjQ5MTI4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE5
Miw0MSArMTkyLDQzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGF0aWMgY29uc3QgaW50
IHBhdGNoUHV0QnlJZERlZmF1bHRPZmZzZXQgPSAyNTY7CiAKICAgICBwdWJsaWM6Ci0gICAgICAg
IEpJVChWTSosIENvZGVCbG9jayogPSAwLCB1bnNpZ25lZCBsb29wT1NSRW50cnlCeXRlY29kZU9m
ZnNldCA9IDApOworICAgICAgICBKSVQoVk0mLCBDb2RlQmxvY2sqID0gMCwgdW5zaWduZWQgbG9v
cE9TUkVudHJ5Qnl0ZWNvZGVPZmZzZXQgPSAwKTsKICAgICAgICAgfkpJVCgpOwogCisgICAgICAg
IFZNJiB2bSgpIHsgcmV0dXJuICpKU0ludGVyZmFjZUpJVDo6dm0oKTsgfQorCiAgICAgICAgIHZv
aWQgY29tcGlsZVdpdGhvdXRMaW5raW5nKEpJVENvbXBpbGF0aW9uRWZmb3J0KTsKICAgICAgICAg
Q29tcGlsYXRpb25SZXN1bHQgbGluaygpOwogCiAgICAgICAgIHZvaWQgZG9NYWluVGhyZWFkUHJl
cGFyYXRpb25CZWZvcmVDb21waWxlKCk7CiAgICAgICAgIAotICAgICAgICBzdGF0aWMgQ29tcGls
YXRpb25SZXN1bHQgY29tcGlsZShWTSogdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRDb21w
aWxhdGlvbkVmZm9ydCBlZmZvcnQsIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gMCkKKyAgICAg
ICAgc3RhdGljIENvbXBpbGF0aW9uUmVzdWx0IGNvbXBpbGUoVk0mIHZtLCBDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0LCB1bnNpZ25lZCBieXRlY29kZU9m
ZnNldCA9IDApCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBKSVQodm0sIGNvZGVCbG9j
aywgYnl0ZWNvZGVPZmZzZXQpLnByaXZhdGVDb21waWxlKGVmZm9ydCk7CiAgICAgICAgIH0KICAg
ICAgICAgCi0gICAgICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVHZXRCeVZhbChjb25zdCBDb25jdXJy
ZW50SlNMb2NrZXImIGxvY2tlciwgVk0qIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnlWYWxJ
bmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlN
b2RlIGFycmF5TW9kZSkKKyAgICAgICAgc3RhdGljIHZvaWQgY29tcGlsZUdldEJ5VmFsKGNvbnN0
IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2Nr
LCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBK
SVRBcnJheU1vZGUgYXJyYXlNb2RlKQogICAgICAgICB7CiAgICAgICAgICAgICBKSVQgaml0KHZt
LCBjb2RlQmxvY2spOwogICAgICAgICAgICAgaml0Lm1fYnl0ZWNvZGVPZmZzZXQgPSBieVZhbElu
Zm8tPmJ5dGVjb2RlSW5kZXg7CiAgICAgICAgICAgICBqaXQucHJpdmF0ZUNvbXBpbGVHZXRCeVZh
bChsb2NrZXIsIGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywgYXJyYXlNb2RlKTsKICAgICAgICAg
fQogCi0gICAgICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVHZXRCeVZhbFdpdGhDYWNoZWRJZChWTSog
dm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRk
cmVzc1B0ciByZXR1cm5BZGRyZXNzLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpCisg
ICAgICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVHZXRCeVZhbFdpdGhDYWNoZWRJZChWTSYgdm0sIENv
ZGVCbG9jayogY29kZUJsb2NrLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0
ciByZXR1cm5BZGRyZXNzLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpCiAgICAgICAg
IHsKICAgICAgICAgICAgIEpJVCBqaXQodm0sIGNvZGVCbG9jayk7CiAgICAgICAgICAgICBqaXQu
bV9ieXRlY29kZU9mZnNldCA9IGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleDsKICAgICAgICAgICAg
IGppdC5wcml2YXRlQ29tcGlsZUdldEJ5VmFsV2l0aENhY2hlZElkKGJ5VmFsSW5mbywgcmV0dXJu
QWRkcmVzcywgcHJvcGVydHlOYW1lKTsKICAgICAgICAgfQogCi0gICAgICAgIHN0YXRpYyB2b2lk
IGNvbXBpbGVQdXRCeVZhbChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImIGxvY2tlciwgVk0qIHZt
LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJl
c3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlNb2RlIGFycmF5TW9kZSkKKyAgICAgICAgc3Rh
dGljIHZvaWQgY29tcGlsZVB1dEJ5VmFsKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2Vy
LCBWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0
dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBKSVRBcnJheU1vZGUgYXJyYXlNb2RlKQogICAg
ICAgICB7CiAgICAgICAgICAgICBKSVQgaml0KHZtLCBjb2RlQmxvY2spOwogICAgICAgICAgICAg
aml0Lm1fYnl0ZWNvZGVPZmZzZXQgPSBieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXg7CiAgICAgICAg
ICAgICBqaXQucHJpdmF0ZUNvbXBpbGVQdXRCeVZhbDxPcFB1dEJ5VmFsPihsb2NrZXIsIGJ5VmFs
SW5mbywgcmV0dXJuQWRkcmVzcywgYXJyYXlNb2RlKTsKICAgICAgICAgfQogICAgICAgICAKLSAg
ICAgICAgc3RhdGljIHZvaWQgY29tcGlsZURpcmVjdFB1dEJ5VmFsKGNvbnN0IENvbmN1cnJlbnRK
U0xvY2tlciYgbG9ja2VyLCBWTSogdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBCeVZhbEluZm8q
IGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBKSVRBcnJheU1vZGUg
YXJyYXlNb2RlKQorICAgICAgICBzdGF0aWMgdm9pZCBjb21waWxlRGlyZWN0UHV0QnlWYWwoY29u
c3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIsIFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3Ms
IEpJVEFycmF5TW9kZSBhcnJheU1vZGUpCiAgICAgICAgIHsKICAgICAgICAgICAgIEpJVCBqaXQo
dm0sIGNvZGVCbG9jayk7CiAgICAgICAgICAgICBqaXQubV9ieXRlY29kZU9mZnNldCA9IGJ5VmFs
SW5mby0+Ynl0ZWNvZGVJbmRleDsKQEAgLTIzNCwxNCArMjM2LDE0IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICB9CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIHN0
YXRpYyB2b2lkIGNvbXBpbGVQdXRCeVZhbFdpdGhDYWNoZWRJZChWTSogdm0sIENvZGVCbG9jayog
Y29kZUJsb2NrLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5B
ZGRyZXNzLCBQdXRLaW5kIHB1dEtpbmQsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkK
KyAgICAgICAgc3RhdGljIHZvaWQgY29tcGlsZVB1dEJ5VmFsV2l0aENhY2hlZElkKFZNJiB2bSwg
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNz
UHRyIHJldHVybkFkZHJlc3MsIFB1dEtpbmQgcHV0S2luZCwgY29uc3QgSWRlbnRpZmllciYgcHJv
cGVydHlOYW1lKQogICAgICAgICB7CiAgICAgICAgICAgICBKSVQgaml0KHZtLCBjb2RlQmxvY2sp
OwogICAgICAgICAgICAgaml0Lm1fYnl0ZWNvZGVPZmZzZXQgPSBieVZhbEluZm8tPmJ5dGVjb2Rl
SW5kZXg7CiAgICAgICAgICAgICBqaXQucHJpdmF0ZUNvbXBpbGVQdXRCeVZhbFdpdGhDYWNoZWRJ
ZDxPcD4oYnlWYWxJbmZvLCByZXR1cm5BZGRyZXNzLCBwdXRLaW5kLCBwcm9wZXJ0eU5hbWUpOwog
ICAgICAgICB9CiAKLSAgICAgICAgc3RhdGljIHZvaWQgY29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0
eShWTSogdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0
dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBKSVRBcnJheU1vZGUgYXJyYXlNb2RlKQorICAg
ICAgICBzdGF0aWMgdm9pZCBjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KFZNJiB2bSwgQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJl
dHVybkFkZHJlc3MsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUpCiAgICAgICAgIHsKICAgICAgICAg
ICAgIEpJVCBqaXQodm0sIGNvZGVCbG9jayk7CiAgICAgICAgICAgICBqaXQubV9ieXRlY29kZU9m
ZnNldCA9IGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleDsKQEAgLTI5NSwxMiArMjk3LDEyIEBAIG5h
bWVzcGFjZSBKU0MgewogCiAgICAgICAgIHZvaWQgZXhjZXB0aW9uQ2hlY2soKQogICAgICAgICB7
Ci0gICAgICAgICAgICBtX2V4Y2VwdGlvbkNoZWNrcy5hcHBlbmQoZW1pdEV4Y2VwdGlvbkNoZWNr
KCp2bSgpKSk7CisgICAgICAgICAgICBtX2V4Y2VwdGlvbkNoZWNrcy5hcHBlbmQoZW1pdEV4Y2Vw
dGlvbkNoZWNrKHZtKCkpKTsKICAgICAgICAgfQogCiAgICAgICAgIHZvaWQgZXhjZXB0aW9uQ2hl
Y2tXaXRoQ2FsbEZyYW1lUm9sbGJhY2soKQogICAgICAgICB7Ci0gICAgICAgICAgICBtX2V4Y2Vw
dGlvbkNoZWNrc1dpdGhDYWxsRnJhbWVSb2xsYmFjay5hcHBlbmQoZW1pdEV4Y2VwdGlvbkNoZWNr
KCp2bSgpKSk7CisgICAgICAgICAgICBtX2V4Y2VwdGlvbkNoZWNrc1dpdGhDYWxsRnJhbWVSb2xs
YmFjay5hcHBlbmQoZW1pdEV4Y2VwdGlvbkNoZWNrKHZtKCkpKTsKICAgICAgICAgfQogCiAgICAg
ICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVFeGNlcHRpb25IYW5kbGVycygpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjIsNyAr
MTYyLDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IAogICAgIGFk
ZFB0cihUcnVzdGVkSW1tMzIocmVnaXN0ZXJPZmZzZXQgKiBzaXplb2YoUmVnaXN0ZXIpICsgc2l6
ZW9mKENhbGxlckZyYW1lQW5kUEMpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJl
Z2lzdGVyKTsKIAogICAgIGxvYWQ2NChBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBzaXpl
b2YoUmVnaXN0ZXIpICogQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlIC0gc2l6ZW9mKENhbGxlckZyYW1l
QW5kUEMpKSwgcmVnVDApOwotICAgIGVtaXREdW1iVmlydHVhbENhbGwoKnZtKCksIGluZm8pOwor
ICAgIGVtaXREdW1iVmlydHVhbENhbGwodm0oKSwgaW5mbyk7CiAgICAgYWRkUHRyKFRydXN0ZWRJ
bW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVy
KSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tT
dGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRFeGNlcHRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVEV4Y2VwdGlvbnMuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVEV4Y2VwdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDMsMjIg
KzQzLDIyIEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi12b2lkIGdlbmVyaWNVbndpbmQoVk0qIHZt
LCBFeGVjU3RhdGUqIGNhbGxGcmFtZSkKK3ZvaWQgZ2VuZXJpY1Vud2luZChWTSYgdm0sIEV4ZWNT
dGF0ZSogY2FsbEZyYW1lKQogewotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BF
KCp2bSk7Ci0gICAgQ2FsbEZyYW1lKiB0b3BKU0NhbGxGcmFtZSA9IHZtLT50b3BKU0NhbGxGcmFt
ZSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKyAgICBDYWxs
RnJhbWUqIHRvcEpTQ2FsbEZyYW1lID0gdm0udG9wSlNDYWxsRnJhbWUoKTsKICAgICBpZiAoT3B0
aW9uczo6YnJlYWtPblRocm93KCkpIHsKICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSB0
b3BKU0NhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CiAgICAgICAgIGRhdGFMb2coIkluIGNhbGwgZnJh
bWUgIiwgUmF3UG9pbnRlcih0b3BKU0NhbGxGcmFtZSksICIgZm9yIGNvZGUgYmxvY2sgIiwgY29k
ZUJsb2NrLCAiXG4iKTsKICAgICAgICAgQ1JBU0goKTsKICAgICB9CiAgICAgCi0gICAgaWYgKGF1
dG8qIHNoYWRvd0NoaWNrZW4gPSB2bS0+c2hhZG93Q2hpY2tlbigpKQotICAgICAgICBzaGFkb3dD
aGlja2VuLT5sb2coKnZtLCB0b3BKU0NhbGxGcmFtZSwgU2hhZG93Q2hpY2tlbjo6UGFja2V0Ojp0
aHJvd1BhY2tldCgpKTsKKyAgICBpZiAoYXV0byogc2hhZG93Q2hpY2tlbiA9IHZtLnNoYWRvd0No
aWNrZW4oKSkKKyAgICAgICAgc2hhZG93Q2hpY2tlbi0+bG9nKHZtLCB0b3BKU0NhbGxGcmFtZSwg
U2hhZG93Q2hpY2tlbjo6UGFja2V0Ojp0aHJvd1BhY2tldCgpKTsKIAogICAgIEV4Y2VwdGlvbiog
ZXhjZXB0aW9uID0gc2NvcGUuZXhjZXB0aW9uKCk7CiAgICAgUkVMRUFTRV9BU1NFUlQoZXhjZXB0
aW9uKTsKLSAgICBIYW5kbGVySW5mbyogaGFuZGxlciA9IHZtLT5pbnRlcnByZXRlci0+dW53aW5k
KCp2bSwgY2FsbEZyYW1lLCBleGNlcHRpb24pOyAvLyBUaGlzIG1heSB1cGRhdGUgY2FsbEZyYW1l
LgorICAgIEhhbmRsZXJJbmZvKiBoYW5kbGVyID0gdm0uaW50ZXJwcmV0ZXItPnVud2luZCh2bSwg
Y2FsbEZyYW1lLCBleGNlcHRpb24pOyAvLyBUaGlzIG1heSB1cGRhdGUgY2FsbEZyYW1lLgogCiAg
ICAgdm9pZCogY2F0Y2hSb3V0aW5lOwogICAgIGNvbnN0IEluc3RydWN0aW9uKiBjYXRjaFBDRm9y
SW50ZXJwcmV0ZXIgPSBudWxscHRyOwpAQCAtODQsMTIgKzg0LDEyIEBAIHZvaWQgZ2VuZXJpY1Vu
d2luZChWTSogdm0sIEV4ZWNTdGF0ZSogY2EKICAgICB9IGVsc2UKICAgICAgICAgY2F0Y2hSb3V0
aW5lID0gTExJbnQ6OmdldENvZGVQdHI8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4oaGFuZGxlVW5j
YXVnaHRFeGNlcHRpb24pLmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAKLSAgICBBU1NFUlQoYml0d2lz
ZV9jYXN0PHVpbnRwdHJfdD4oY2FsbEZyYW1lKSA8IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHZt
LT50b3BFbnRyeUZyYW1lKSk7CisgICAgQVNTRVJUKGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGNh
bGxGcmFtZSkgPCBiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pih2bS50b3BFbnRyeUZyYW1lKSk7CiAK
ICAgICBhc3NlcnRJc1RhZ2dlZFdpdGgoY2F0Y2hSb3V0aW5lLCBFeGNlcHRpb25IYW5kbGVyUHRy
VGFnKTsKLSAgICB2bS0+Y2FsbEZyYW1lRm9yQ2F0Y2ggPSBjYWxsRnJhbWU7Ci0gICAgdm0tPnRh
cmdldE1hY2hpbmVQQ0ZvclRocm93ID0gY2F0Y2hSb3V0aW5lOwotICAgIHZtLT50YXJnZXRJbnRl
cnByZXRlclBDRm9yVGhyb3cgPSBjYXRjaFBDRm9ySW50ZXJwcmV0ZXI7CisgICAgdm0uY2FsbEZy
YW1lRm9yQ2F0Y2ggPSBjYWxsRnJhbWU7CisgICAgdm0udGFyZ2V0TWFjaGluZVBDRm9yVGhyb3cg
PSBjYXRjaFJvdXRpbmU7CisgICAgdm0udGFyZ2V0SW50ZXJwcmV0ZXJQQ0ZvclRocm93ID0gY2F0
Y2hQQ0ZvckludGVycHJldGVyOwogICAgIAogICAgIFJFTEVBU0VfQVNTRVJUKGNhdGNoUm91dGlu
ZSk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEV4Y2VwdGlvbnMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEV4Y2VwdGlvbnMuaAko
cmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRFeGNlcHRp
b25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDEyLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEyLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMCw2ICszMCw2IEBAIG5hbWVzcGFjZSBKU0Mgewog
Y2xhc3MgRXhlY1N0YXRlOwogY2xhc3MgVk07CiAKLXZvaWQgZ2VuZXJpY1Vud2luZChWTSosIEV4
ZWNTdGF0ZSopOwordm9pZCBnZW5lcmljVW53aW5kKFZNJiwgRXhlY1N0YXRlKik7CiAKIH0gLy8g
bmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVD
YWNoZUdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMTA1LDcgKzEwNSw3IEBAIEpJVEdldEJ5SWRHZW5lcmF0b3I6OkpJVEdldEJ5
SWRHZW5lcmF0b3IKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29kZU9yaWdpbiBjb2RlT3Jp
Z2luLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlLCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lz
dGVycywKICAgICBVbmlxdWVkU3RyaW5nSW1wbCogcHJvcGVydHlOYW1lLCBKU1ZhbHVlUmVncyBi
YXNlLCBKU1ZhbHVlUmVncyB2YWx1ZSwgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlKQogICAgIDogSklU
QnlJZEdlbmVyYXRvcihjb2RlQmxvY2ssIGNvZGVPcmlnaW4sIGNhbGxTaXRlLCBhY2Nlc3NUeXBl
LCB1c2VkUmVnaXN0ZXJzLCBiYXNlLCB2YWx1ZSkKLSAgICAsIG1faXNMZW5ndGhBY2Nlc3MocHJv
cGVydHlOYW1lID09IGNvZGVCbG9jay0+dm0oKS0+cHJvcGVydHlOYW1lcy0+bGVuZ3RoLmltcGwo
KSkKKyAgICAsIG1faXNMZW5ndGhBY2Nlc3MocHJvcGVydHlOYW1lID09IGNvZGVCbG9jay0+dm0o
KS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGguaW1wbCgpKQogewogICAgIFJFTEVBU0VfQVNTRVJUKGJh
c2UucGF5bG9hZEdQUigpICE9IHZhbHVlLnRhZ0dQUigpKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHJldmlzaW9uIDI0OTEyOCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzgwLDcgKzM4MCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2pmYWxzZShjb25z
dCBJbnN0cnVjdGkKICAgICBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMjsKICAgICBHUFJSZWcgc2Ny
YXRjaDIgPSByZWdUMzsKICAgICBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCA9IHRydWU7Ci0gICAgYWRkSnVtcChicmFuY2hJZkZhbHNleSgqdm0oKSwgdmFsdWUsIHNjcmF0
Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOworICAgIGFk
ZEp1bXAoYnJhbmNoSWZGYWxzZXkodm0oKSwgdmFsdWUsIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBS
ZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9q
dHJ1ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMzk0LDcgKzM5
NCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2p0cnVlKGNvbnN0IEluc3RydWN0aW8KICAgICBKU1Zh
bHVlUmVncyB2YWx1ZShyZWdUMSwgcmVnVDApOwogICAgIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1Qy
OwogICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QzOwotICAgIGFkZEp1bXAoYnJhbmNoSWZUcnV0
aHkoKnZtKCksIHZhbHVlLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNo
b3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgdGFyZ2V0KTsKKyAgICBhZGRKdW1wKGJyYW5jaElmVHJ1dGh5KHZtKCksIHZhbHVlLCBz
Y3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3BfamVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKQEAgLTgxNSwxMCArODE1LDEwIEBAIHZvaWQgSklUOjplbWl0X29wX3Rocm93
KGNvbnN0IEluc3RydWN0aW8KIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcFRocm93PigpOwogICAgIEFTU0VSVChyZWdUMCA9PSByZXR1cm5WYWx1ZUdQUik7
Ci0gICAgY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0oKS0+
dG9wRW50cnlGcmFtZSk7CisgICAgY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2
ZXNCdWZmZXIodm0oKS50b3BFbnRyeUZyYW1lKTsKICAgICBlbWl0TG9hZChieXRlY29kZS5tX3Zh
bHVlLm9mZnNldCgpLCByZWdUMSwgcmVnVDApOwogICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlv
bkNoZWNrKG9wZXJhdGlvblRocm93LCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKLSAgICBq
dW1wVG9FeGNlcHRpb25IYW5kbGVyKCp2bSgpKTsKKyAgICBqdW1wVG9FeGNlcHRpb25IYW5kbGVy
KHZtKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19udW1iZXIoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTg3Myw3ICs4NzMsNyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9jYXRjaChjb25zdCBJbnN0cnVjdGlvCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BDYXRjaD4oKTsKIAotICAgIHJlc3RvcmVDYWxsZWVTYXZlc0Zy
b21FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0oKS0+dG9wRW50cnlGcmFtZSk7CisgICAg
cmVzdG9yZUNhbGxlZVNhdmVzRnJvbUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgpLnRv
cEVudHJ5RnJhbWUpOwogCiAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fdm0pLCByZWdUMyk7CiAg
ICAgLy8gb3BlcmF0aW9uVGhyb3cgcmV0dXJucyB0aGUgY2FsbEZyYW1lIGZvciB0aGUgaGFuZGxl
ci4KQEAgLTg4NCw3ICs4ODQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChjb25zdCBJbnN0
cnVjdGlvCiAKICAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25DaGVj
a0lmRXhjZXB0aW9uSXNVbmNhdGNoYWJsZUFuZE5vdGlmeVByb2ZpbGVyKTsKICAgICBKdW1wIGlz
Q2F0Y2hhYmxlRXhjZXB0aW9uID0gYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BSKTsK
LSAgICBqdW1wVG9FeGNlcHRpb25IYW5kbGVyKCp2bSgpKTsKKyAgICBqdW1wVG9FeGNlcHRpb25I
YW5kbGVyKHZtKCkpOwogICAgIGlzQ2F0Y2hhYmxlRXhjZXB0aW9uLmxpbmsodGhpcyk7CiAKICAg
ICBtb3ZlKFRydXN0ZWRJbW1QdHIobV92bSksIHJlZ1QzKTsKQEAgLTEzNTgsMTQgKzEzNTgsMTQg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBlKGNvbnN0IElucwogCiB2b2lkIEpJVDo6
ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fcHJvbG9ndWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBSRUxFQVNFX0FTU0VSVCh2bSgpLT5zaGFkb3dDaGlj
a2VuKCkpOworICAgIFJFTEVBU0VfQVNTRVJUKHZtKCkuc2hhZG93Q2hpY2tlbigpKTsKICAgICB1
cGRhdGVUb3BDYWxsRnJhbWUoKTsKICAgICBzdGF0aWNfYXNzZXJ0KG5vbkFyZ0dQUjAgIT0gcmVn
VDAgJiYgbm9uQXJnR1BSMCAhPSByZWdUMiwgIndlIHdpbGwgaGF2ZSBwcm9ibGVtcyBpZiB0aGlz
IGlzIHRydWUuIik7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BMb2dTaGFkb3dDaGlja2VuUHJvbG9ndWU+KCk7CiAgICAgR1BSUmVnIHNoYWRvd1BhY2tldFJl
ZyA9IHJlZ1QwOwogICAgIEdQUlJlZyBzY3JhdGNoMVJlZyA9IG5vbkFyZ0dQUjA7IC8vIFRoaXMg
bXVzdCBiZSBhIG5vbi1hcmd1bWVudCByZWdpc3Rlci4KICAgICBHUFJSZWcgc2NyYXRjaDJSZWcg
PSByZWdUMjsKLSAgICBlbnN1cmVTaGFkb3dDaGlja2VuUGFja2V0KCp2bSgpLCBzaGFkb3dQYWNr
ZXRSZWcsIHNjcmF0Y2gxUmVnLCBzY3JhdGNoMlJlZyk7CisgICAgZW5zdXJlU2hhZG93Q2hpY2tl
blBhY2tldCh2bSgpLCBzaGFkb3dQYWNrZXRSZWcsIHNjcmF0Y2gxUmVnLCBzY3JhdGNoMlJlZyk7
CiAKICAgICBzY3JhdGNoMVJlZyA9IHJlZ1Q0OwogICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29k
ZS5tX3Njb3BlLm9mZnNldCgpLCByZWdUMyk7CkBAIC0xMzc0LDE0ICsxMzc0LDE0IEBAIHZvaWQg
SklUOjplbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl9wcm8KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
bG9nX3NoYWRvd19jaGlja2VuX3RhaWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKLSAgICBSRUxFQVNFX0FTU0VSVCh2bSgpLT5zaGFkb3dDaGlja2VuKCkpOworICAg
IFJFTEVBU0VfQVNTRVJUKHZtKCkuc2hhZG93Q2hpY2tlbigpKTsKICAgICB1cGRhdGVUb3BDYWxs
RnJhbWUoKTsKICAgICBzdGF0aWNfYXNzZXJ0KG5vbkFyZ0dQUjAgIT0gcmVnVDAgJiYgbm9uQXJn
R1BSMCAhPSByZWdUMiwgIndlIHdpbGwgaGF2ZSBwcm9ibGVtcyBpZiB0aGlzIGlzIHRydWUuIik7
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BMb2dTaGFkb3dD
aGlja2VuVGFpbD4oKTsKICAgICBHUFJSZWcgc2hhZG93UGFja2V0UmVnID0gcmVnVDA7CiAgICAg
R1BSUmVnIHNjcmF0Y2gxUmVnID0gbm9uQXJnR1BSMDsgLy8gVGhpcyBtdXN0IGJlIGEgbm9uLWFy
Z3VtZW50IHJlZ2lzdGVyLgogICAgIEdQUlJlZyBzY3JhdGNoMlJlZyA9IHJlZ1QyOwotICAgIGVu
c3VyZVNoYWRvd0NoaWNrZW5QYWNrZXQoKnZtKCksIHNoYWRvd1BhY2tldFJlZywgc2NyYXRjaDFS
ZWcsIHNjcmF0Y2gyUmVnKTsKKyAgICBlbnN1cmVTaGFkb3dDaGlja2VuUGFja2V0KHZtKCksIHNo
YWRvd1BhY2tldFJlZywgc2NyYXRjaDFSZWcsIHNjcmF0Y2gyUmVnKTsKICAgICBlbWl0TG9hZFBh
eWxvYWQoYnl0ZWNvZGUubV90aGlzVmFsdWUub2Zmc2V0KCksIHJlZ1QyKTsKICAgICBlbWl0TG9h
ZFRhZyhieXRlY29kZS5tX3RoaXNWYWx1ZS5vZmZzZXQoKSwgcmVnVDEpOwogICAgIEpTVmFsdWVS
ZWdzIHRoaXNSZWdzKHJlZ1QxLCByZWdUMik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE9wY29kZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3Bjb2Rlcy5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzMiw3ICsyMzIsNyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9pc191bmRlZmluZWQoY29uc3QgSW5zCiAgICAgSnVtcCBub3RN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOwogCiAgICAgaXNNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkLmxpbmsodGhpcyk7Ci0gICAgZW1pdExvYWRTdHJ1Y3R1cmUoKnZtKCksIHJlZ1QwLCBy
ZWdUMSwgcmVnVDIpOworICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMSwg
cmVnVDIpOwogICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCByZWdUMCk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6Omdsb2Jh
bE9iamVjdE9mZnNldCgpKSwgcmVnVDEpOwogICAgIGNvbXBhcmVQdHIoRXF1YWwsIHJlZ1QwLCBy
ZWdUMSwgcmVnVDApOwpAQCAtMzkxLDcgKzM5MSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2pmYWxz
ZShjb25zdCBJbnN0cnVjdGkKICAgICBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCA9IHRydWU7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fY29u
ZGl0aW9uLm9mZnNldCgpLCB2YWx1ZSk7Ci0gICAgYWRkSnVtcChicmFuY2hJZkZhbHNleSgqdm0o
KSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVn
VDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAgICBhZGRKdW1wKGJyYW5jaElmRmFsc2V5KHZtKCksIEpT
VmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBz
aG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHRhcmdldCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2plcV9udWxsKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC00MDUsNyArNDA1LDcgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfamVxX251bGwoY29uc3QgSW5zdHJ1YwogCiAgICAgLy8gRmlyc3QsIGhhbmRs
ZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUg
c3RydWN0dXJlLgogICAgIEp1bXAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNo
VGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkp
LCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOwotICAgIGVtaXRMb2FkU3Ry
dWN0dXJlKCp2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKKyAgICBlbWl0TG9hZFN0cnVjdHVy
ZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwogICAgIGFkZEp1bXAoYnJhbmNoUHRy
KEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwg
cmVnVDApLCB0YXJnZXQpOwogICAgIEp1bXAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVp
Z24gPSBqdW1wKCk7CkBAIC00MjksNyArNDI5LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9u
dWxsKGNvbnN0IEluc3RydQogCiAgICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBj
aGVjayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgogICAgIGFk
ZEp1bXAoYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0Zs
YWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpLCB0YXJn
ZXQpOwotICAgIGVtaXRMb2FkU3RydWN0dXJlKCp2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsK
KyAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKICAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwog
ICAgIGFkZEp1bXAoYnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6
Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDApLCB0YXJnZXQpOwogICAgIEp1bXAgd2FzTm90
SW1tZWRpYXRlID0ganVtcCgpOwpAQCAtNTEwLDcgKzUxMCw3IEBAIHZvaWQgSklUOjplbWl0X29w
X2p0cnVlKGNvbnN0IEluc3RydWN0aW8KICAgICBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMjsKICAg
ICBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7CiAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2NvbmRpdGlvbi5vZmZzZXQoKSwgdmFsdWUp
OwotICAgIGFkZEp1bXAoYnJhbmNoSWZUcnV0aHkoKnZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwg
c2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7Cisg
ICAgYWRkSnVtcChicmFuY2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0
Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOwogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKQEAgLTUzNywxMCArNTM3LDEwIEBAIHZvaWQgSklUOjplbWl0X29wX3Rocm93KGNvbnN0IElu
c3RydWN0aW8KIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cFRocm93PigpOwogICAgIEFTU0VSVChyZWdUMCA9PSByZXR1cm5WYWx1ZUdQUik7Ci0gICAgY29w
eUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0oKS0+dG9wRW50cnlG
cmFtZSk7CisgICAgY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIo
dm0oKS50b3BFbnRyeUZyYW1lKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fdmFsdWUub2Zmc2V0KCksIHJlZ1QwKTsKICAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25D
aGVjayhvcGVyYXRpb25UaHJvdywgcmVnVDApOwotICAgIGp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIo
KnZtKCkpOworICAgIGp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIodm0oKSk7CiB9CiAKIHRlbXBsYXRl
PHR5cGVuYW1lIE9wPgpAQCAtNjkxLDcgKzY5MSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2NhdGNo
KGNvbnN0IEluc3RydWN0aW8KIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcENhdGNoPigpOwogCi0gICAgcmVzdG9yZUNhbGxlZVNhdmVzRnJvbUVudHJ5RnJh
bWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgpLT50b3BFbnRyeUZyYW1lKTsKKyAgICByZXN0b3JlQ2Fs
bGVlU2F2ZXNGcm9tRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCkudG9wRW50cnlGcmFt
ZSk7CiAKICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV92bSksIHJlZ1QzKTsKICAgICBsb2FkNjQo
QWRkcmVzcyhyZWdUMywgVk06OmNhbGxGcmFtZUZvckNhdGNoT2Zmc2V0KCkpLCBjYWxsRnJhbWVS
ZWdpc3Rlcik7CkBAIC03MDEsNyArNzAxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goY29u
c3QgSW5zdHJ1Y3RpbwogCiAgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0
aW9uQ2hlY2tJZkV4Y2VwdGlvbklzVW5jYXRjaGFibGVBbmROb3RpZnlQcm9maWxlcik7CiAgICAg
SnVtcCBpc0NhdGNoYWJsZUV4Y2VwdGlvbiA9IGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1
ZUdQUik7Ci0gICAganVtcFRvRXhjZXB0aW9uSGFuZGxlcigqdm0oKSk7CisgICAganVtcFRvRXhj
ZXB0aW9uSGFuZGxlcih2bSgpKTsKICAgICBpc0NhdGNoYWJsZUV4Y2VwdGlvbi5saW5rKHRoaXMp
OwogCiAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fdm0pLCByZWdUMyk7CkBAIC04MjQsNyArODI0
LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZXFfbnVsbChjb25zdCBJbnN0cnVjdAogICAgIEp1bXAg
d2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKIAogICAgIGlzTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwotICAgIGVtaXRMb2FkU3RydWN0dXJlKCp2bSgpLCBy
ZWdUMCwgcmVnVDIsIHJlZ1QxKTsKKyAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwg
cmVnVDIsIHJlZ1QxKTsKICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgcmVnVDApOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJl
OjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QyKTsKICAgICBjb21wYXJlUHRyKEVxdWFsLCBy
ZWdUMCwgcmVnVDIsIHJlZ1QwKTsKQEAgLTg1Nyw3ICs4NTcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9uZXFfbnVsbChjb25zdCBJbnN0cnVjCiAgICAgSnVtcCB3YXNOb3RNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkID0ganVtcCgpOwogCiAgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhp
cyk7Ci0gICAgZW1pdExvYWRTdHJ1Y3R1cmUoKnZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwor
ICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwogICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CiAg
ICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgp
KSwgcmVnVDIpOwogICAgIGNvbXBhcmVQdHIoTm90RXF1YWwsIHJlZ1QwLCByZWdUMiwgcmVnVDAp
OwpAQCAtMTAzNCw3ICsxMDM0LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2xvb3BfaGludChj
b25zdCBJbgogICAgIGlmIChjYW5CZU9wdGltaXplZCgpKSB7CiAgICAgICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7CiAKLSAgICAgICAgY29weUNhbGxlZVNhdmVzRnJvbUZyYW1lT3JSZWdpc3Rl
clRvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCktPnRvcEVudHJ5RnJhbWUpOworICAg
ICAgICBjb3B5Q2FsbGVlU2F2ZXNGcm9tRnJhbWVPclJlZ2lzdGVyVG9FbnRyeUZyYW1lQ2FsbGVl
U2F2ZXNCdWZmZXIodm0oKS50b3BFbnRyeUZyYW1lKTsKIAogICAgICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbk9wdGltaXplLCBtX2J5dGVjb2RlT2Zmc2V0KTsKICAgICAgICAgSnVtcCBub09w
dGltaXplZEVudHJ5ID0gYnJhbmNoVGVzdFB0cihaZXJvLCByZXR1cm5WYWx1ZUdQUik7CkBAIC0x
NDgwLDI4ICsxNDgwLDI4IEBAIHZvaWQgSklUOjplbWl0X29wX3Byb2ZpbGVfdHlwZShjb25zdCBJ
bnMKIAogdm9pZCBKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3Byb2xvZ3VlKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQo
dm0oKS0+c2hhZG93Q2hpY2tlbigpKTsKKyAgICBSRUxFQVNFX0FTU0VSVCh2bSgpLnNoYWRvd0No
aWNrZW4oKSk7CiAgICAgdXBkYXRlVG9wQ2FsbEZyYW1lKCk7CiAgICAgc3RhdGljX2Fzc2VydChu
b25BcmdHUFIwICE9IHJlZ1QwICYmIG5vbkFyZ0dQUjAgIT0gcmVnVDIsICJ3ZSB3aWxsIGhhdmUg
cHJvYmxlbXMgaWYgdGhpcyBpcyB0cnVlLiIpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wTG9nU2hhZG93Q2hpY2tlblByb2xvZ3VlPigpOwogICAgIEdQUlJl
ZyBzaGFkb3dQYWNrZXRSZWcgPSByZWdUMDsKICAgICBHUFJSZWcgc2NyYXRjaDFSZWcgPSBub25B
cmdHUFIwOyAvLyBUaGlzIG11c3QgYmUgYSBub24tYXJndW1lbnQgcmVnaXN0ZXIuCiAgICAgR1BS
UmVnIHNjcmF0Y2gyUmVnID0gcmVnVDI7Ci0gICAgZW5zdXJlU2hhZG93Q2hpY2tlblBhY2tldCgq
dm0oKSwgc2hhZG93UGFja2V0UmVnLCBzY3JhdGNoMVJlZywgc2NyYXRjaDJSZWcpOworICAgIGVu
c3VyZVNoYWRvd0NoaWNrZW5QYWNrZXQodm0oKSwgc2hhZG93UGFja2V0UmVnLCBzY3JhdGNoMVJl
Zywgc2NyYXRjaDJSZWcpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9z
Y29wZS5vZmZzZXQoKSwgcmVnVDMpOwogICAgIGxvZ1NoYWRvd0NoaWNrZW5Qcm9sb2d1ZVBhY2tl
dChzaGFkb3dQYWNrZXRSZWcsIHNjcmF0Y2gxUmVnLCByZWdUMyk7CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWlsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQodm0oKS0+c2hhZG93Q2hpY2tlbigp
KTsKKyAgICBSRUxFQVNFX0FTU0VSVCh2bSgpLnNoYWRvd0NoaWNrZW4oKSk7CiAgICAgdXBkYXRl
VG9wQ2FsbEZyYW1lKCk7CiAgICAgc3RhdGljX2Fzc2VydChub25BcmdHUFIwICE9IHJlZ1QwICYm
IG5vbkFyZ0dQUjAgIT0gcmVnVDIsICJ3ZSB3aWxsIGhhdmUgcHJvYmxlbXMgaWYgdGhpcyBpcyB0
cnVlLiIpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTG9n
U2hhZG93Q2hpY2tlblRhaWw+KCk7CiAgICAgR1BSUmVnIHNoYWRvd1BhY2tldFJlZyA9IHJlZ1Qw
OwogICAgIEdQUlJlZyBzY3JhdGNoMVJlZyA9IG5vbkFyZ0dQUjA7IC8vIFRoaXMgbXVzdCBiZSBh
IG5vbi1hcmd1bWVudCByZWdpc3Rlci4KICAgICBHUFJSZWcgc2NyYXRjaDJSZWcgPSByZWdUMjsK
LSAgICBlbnN1cmVTaGFkb3dDaGlja2VuUGFja2V0KCp2bSgpLCBzaGFkb3dQYWNrZXRSZWcsIHNj
cmF0Y2gxUmVnLCBzY3JhdGNoMlJlZyk7CisgICAgZW5zdXJlU2hhZG93Q2hpY2tlblBhY2tldCh2
bSgpLCBzaGFkb3dQYWNrZXRSZWcsIHNjcmF0Y2gxUmVnLCBzY3JhdGNoMlJlZyk7CiAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3RoaXNWYWx1ZS5vZmZzZXQoKSwgcmVnVDIp
OwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZS5vZmZzZXQoKSwg
cmVnVDMpOwogICAgIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KHNoYWRvd1BhY2tldFJlZywg
SlNWYWx1ZVJlZ3MocmVnVDIpLCByZWdUMywgbV9jb2RlQmxvY2ssIENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZU9mZnNldCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVy
YXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9w
ZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE9wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Myw3ICs5Myw3IEBAIHZv
aWQgKiBfUmV0dXJuQWRkcmVzcyh2b2lkKTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKE9QQ09ERV9T
QU1QTElORykKLSNkZWZpbmUgQ1RJX1NBTVBMRVIgdm0tPmludGVycHJldGVyLT5zYW1wbGVyKCkK
KyNkZWZpbmUgQ1RJX1NBTVBMRVIgdm0uaW50ZXJwcmV0ZXItPnNhbXBsZXIoKQogI2Vsc2UKICNk
ZWZpbmUgQ1RJX1NBTVBMRVIgMAogI2VuZGlmCkBAIC0xMDIsMzMgKzEwMiwzNCBAQCB2b2lkICog
X1JldHVybkFkZHJlc3Modm9pZCk7CiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVGhyb3dT
dGFja092ZXJmbG93RXJyb3IoRXhlY1N0YXRlKiBleGVjLCBDb2RlQmxvY2sqIGNvZGVCbG9jaykK
IHsKICAgICAvLyBXZSBwYXNzIGluIG91ciBvd24gY29kZSBibG9jaywgYmVjYXVzZSB0aGUgY2Fs
bGZyYW1lIGhhc24ndCBiZWVuIHBvcHVsYXRlZC4KLSAgICBWTSogdm0gPSBjb2RlQmxvY2stPnZt
KCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKLSAgICBleGVj
LT5jb252ZXJ0VG9TdGFja092ZXJmbG93RnJhbWUoKnZtLCBjb2RlQmxvY2spOworICAgIFZNJiB2
bSA9IGNvZGVCbG9jay0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CisgICAgZXhlYy0+Y29udmVydFRvU3RhY2tPdmVyZmxvd0ZyYW1lKHZtLCBjb2RlQmxv
Y2spOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIHRo
cm93U3RhY2tPdmVyZmxvd0Vycm9yKGV4ZWMsIHNjb3BlKTsKIH0KIAotdm9pZCBKSVRfT1BFUkFU
SU9OIHRocm93U3RhY2tPdmVyZmxvd0Vycm9yRnJvbVRodW5rKFZNKiB2bSwgRXhlY1N0YXRlKiBl
eGVjKQordm9pZCBKSVRfT1BFUkFUSU9OIHRocm93U3RhY2tPdmVyZmxvd0Vycm9yRnJvbVRodW5r
KFZNKiB2bVBvaW50ZXIsIEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSgqdm0pOworICAgIFZNJiB2bSA9ICp2bVBvaW50ZXI7CisgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRy
YWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIHRocm93U3RhY2tPdmVyZmxvd0Vycm9yKGV4ZWMs
IHNjb3BlKTsKICAgICBnZW5lcmljVW53aW5kKHZtLCBleGVjKTsKLSAgICBBU1NFUlQodm0tPnRh
cmdldE1hY2hpbmVQQ0ZvclRocm93KTsKKyAgICBBU1NFUlQodm0udGFyZ2V0TWFjaGluZVBDRm9y
VGhyb3cpOwogfQogCiBpbnQzMl90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ2FsbEFyaXR5Q2hl
Y2soRXhlY1N0YXRlKiBleGVjKQogewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7CisgICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAgICBp
bnQzMl90IG1pc3NpbmdBcmdDb3VudCA9IENvbW1vblNsb3dQYXRoczo6YXJpdHlDaGVja0Zvcihl
eGVjLCAqdm0sIENvZGVGb3JDYWxsKTsKKyAgICBpbnQzMl90IG1pc3NpbmdBcmdDb3VudCA9IENv
bW1vblNsb3dQYXRoczo6YXJpdHlDaGVja0ZvcihleGVjLCB2bSwgQ29kZUZvckNhbGwpOwogICAg
IGlmIChVTkxJS0VMWShtaXNzaW5nQXJnQ291bnQgPCAwKSkgewogICAgICAgICBDb2RlQmxvY2sq
IGNvZGVCbG9jayA9IENvbW1vblNsb3dQYXRoczo6Y29kZUJsb2NrRnJvbUNhbGxGcmFtZUNhbGxl
ZShleGVjLCBDb2RlRm9yQ2FsbCk7Ci0gICAgICAgIGV4ZWMtPmNvbnZlcnRUb1N0YWNrT3ZlcmZs
b3dGcmFtZSgqdm0sIGNvZGVCbG9jayk7CisgICAgICAgIGV4ZWMtPmNvbnZlcnRUb1N0YWNrT3Zl
cmZsb3dGcmFtZSh2bSwgY29kZUJsb2NrKTsKICAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcih2bSwgZXhlYyk7Ci0gICAgICAgIHRocm93U3RhY2tPdmVyZmxvd0Vycm9yKHZtLT50
b3BDYWxsRnJhbWUsIHNjb3BlKTsKKyAgICAgICAgdGhyb3dTdGFja092ZXJmbG93RXJyb3Iodm0u
dG9wQ2FsbEZyYW1lLCBzY29wZSk7CiAgICAgfQogCiAgICAgcmV0dXJuIG1pc3NpbmdBcmdDb3Vu
dDsKQEAgLTEzNiwxNSArMTM3LDE1IEBAIGludDMyX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25D
YWxsQXJpdHkKIAogaW50MzJfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbnN0cnVjdEFyaXR5
Q2hlY2soRXhlY1N0YXRlKiBleGVjKQogewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7CisgICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAg
ICBpbnQzMl90IG1pc3NpbmdBcmdDb3VudCA9IENvbW1vblNsb3dQYXRoczo6YXJpdHlDaGVja0Zv
cihleGVjLCAqdm0sIENvZGVGb3JDb25zdHJ1Y3QpOworICAgIGludDMyX3QgbWlzc2luZ0FyZ0Nv
dW50ID0gQ29tbW9uU2xvd1BhdGhzOjphcml0eUNoZWNrRm9yKGV4ZWMsIHZtLCBDb2RlRm9yQ29u
c3RydWN0KTsKICAgICBpZiAoVU5MSUtFTFkobWlzc2luZ0FyZ0NvdW50IDwgMCkpIHsKICAgICAg
ICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBDb21tb25TbG93UGF0aHM6OmNvZGVCbG9ja0Zyb21D
YWxsRnJhbWVDYWxsZWUoZXhlYywgQ29kZUZvckNvbnN0cnVjdCk7Ci0gICAgICAgIGV4ZWMtPmNv
bnZlcnRUb1N0YWNrT3ZlcmZsb3dGcmFtZSgqdm0sIGNvZGVCbG9jayk7CisgICAgICAgIGV4ZWMt
PmNvbnZlcnRUb1N0YWNrT3ZlcmZsb3dGcmFtZSh2bSwgY29kZUJsb2NrKTsKICAgICAgICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0gICAgICAgIHRocm93U3RhY2tP
dmVyZmxvd0Vycm9yKHZtLT50b3BDYWxsRnJhbWUsIHNjb3BlKTsKKyAgICAgICAgdGhyb3dTdGFj
a092ZXJmbG93RXJyb3Iodm0udG9wQ2FsbEZyYW1lLCBzY29wZSk7CiAgICAgfQogCiAgICAgcmV0
dXJuIG1pc3NpbmdBcmdDb3VudDsKQEAgLTE1Miw3ICsxNTMsNyBAQCBpbnQzMl90IEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uQ29uc3RydWN0CiAKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uVHJ5R2V0QnlJZChFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZVN0dWJJbmZvKiBz
dHViSW5mbywgRW5jb2RlZEpTVmFsdWUgYmFzZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKIHsK
LSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIElkZW50aWZpZXIg
aWRlbnQgPSBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCB1aWQpOwogICAgIHN0dWJJbmZvLT50b29r
U2xvd1BhdGggPSB0cnVlOwpAQCAtMTY3LDcgKzE2OCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uVHIKIAogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVy
YXRpb25UcnlHZXRCeUlkR2VuZXJpYyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGJh
c2UsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCiB7Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7
CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKHZtLCBleGVjKTsKICAgICBJZGVudGlmaWVyIGlkZW50ID0gSWRlbnRpZmllcjo6ZnJvbVVp
ZCh2bSwgdWlkKTsKIApAQCAtMTgwLDkgKzE4MSw5IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uVHIKIAogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRp
b25UcnlHZXRCeUlkT3B0aW1pemUoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmVTdHViSW5mbyog
c3R1YkluZm8sIEVuY29kZWRKU1ZhbHVlIGJhc2UsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCiB7
Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLSAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSgqdm0pOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKICAgICBJZGVudGlmaWVyIGlkZW50ID0gSWRlbnRpZmllcjo6ZnJvbVVp
ZCh2bSwgdWlkKTsKIAogICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGJh
c2UpOwpAQCAtMTkxLDcgKzE5Miw3IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uVHIKICAgICBiYXNlVmFsdWUuZ2V0UHJvcGVydHlTbG90KGV4ZWMsIGlkZW50LCBzbG90
KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKIAot
ICAgIGlmIChzdHViSW5mby0+Y29uc2lkZXJDYWNoaW5nKCp2bSwgZXhlYy0+Y29kZUJsb2NrKCks
IGJhc2VWYWx1ZS5zdHJ1Y3R1cmVPck51bGwoKSkgJiYgIXNsb3QuaXNUYWludGVkQnlPcGFxdWVP
YmplY3QoKSAmJiAoc2xvdC5pc0NhY2hlYWJsZVZhbHVlKCkgfHwgc2xvdC5pc0NhY2hlYWJsZUdl
dHRlcigpIHx8IHNsb3QuaXNVbnNldCgpKSkKKyAgICBpZiAoc3R1YkluZm8tPmNvbnNpZGVyQ2Fj
aGluZyh2bSwgZXhlYy0+Y29kZUJsb2NrKCksIGJhc2VWYWx1ZS5zdHJ1Y3R1cmVPck51bGwoKSkg
JiYgIXNsb3QuaXNUYWludGVkQnlPcGFxdWVPYmplY3QoKSAmJiAoc2xvdC5pc0NhY2hlYWJsZVZh
bHVlKCkgfHwgc2xvdC5pc0NhY2hlYWJsZUdldHRlcigpIHx8IHNsb3QuaXNVbnNldCgpKSkKICAg
ICAgICAgcmVwYXRjaEdldEJ5SUQoZXhlYywgYmFzZVZhbHVlLCBpZGVudCwgc2xvdCwgKnN0dWJJ
bmZvLCBHZXRCeUlES2luZDo6VHJ5KTsKIAogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoc2xv
dC5nZXRQdXJlUmVzdWx0KCkpOwpAQCAtMjAwLDkgKzIwMSw5IEBAIEVuY29kZWRKU1ZhbHVlIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uVHIKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uR2V0QnlJZERpcmVjdChFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZVN0dWJJbmZvKiBz
dHViSW5mbywgRW5jb2RlZEpTVmFsdWUgYmFzZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKIHsK
ICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVj
KTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgSWRlbnRp
ZmllciBpZGVudCA9IElkZW50aWZpZXI6OmZyb21VaWQoJnZtLCB1aWQpOworICAgIElkZW50aWZp
ZXIgaWRlbnQgPSBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCB1aWQpOwogICAgIHN0dWJJbmZvLT50
b29rU2xvd1BhdGggPSB0cnVlOwogCiAgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpk
ZWNvZGUoYmFzZSk7CkBAIC0yMTcsOSArMjE4LDkgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJB
VElPTiBvcGVyYXRpb25HZQogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25H
ZXRCeUlkRGlyZWN0R2VuZXJpYyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGJhc2Us
IFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwotICAgIElkZW50aWZpZXIgaWRlbnQgPSBJZGVudGlmaWVyOjpmcm9t
VWlkKCZ2bSwgdWlkKTsKKyAgICBJZGVudGlmaWVyIGlkZW50ID0gSWRlbnRpZmllcjo6ZnJvbVVp
ZCh2bSwgdWlkKTsKIAogICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGJh
c2UpOwogICAgIFByb3BlcnR5U2xvdCBzbG90KGJhc2VWYWx1ZSwgUHJvcGVydHlTbG90OjpJbnRl
cm5hbE1ldGhvZFR5cGU6OkdldE93blByb3BlcnR5KTsKQEAgLTIzMyw5ICsyMzQsOSBAQCBFbmNv
ZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdlCiBFbmNvZGVkSlNWYWx1ZSBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZShFeGVjU3RhdGUqIGV4ZWMs
IFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgRW5jb2RlZEpTVmFsdWUgYmFzZSwgVW5pcXVl
ZFN0cmluZ0ltcGwqIHVpZCkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVU
cmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7Ci0gICAgSWRlbnRpZmllciBpZGVudCA9IElkZW50aWZpZXI6OmZyb21VaWQoJnZt
LCB1aWQpOworICAgIElkZW50aWZpZXIgaWRlbnQgPSBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCB1
aWQpOwogCiAgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoYmFzZSk7CiAg
ICAgUHJvcGVydHlTbG90IHNsb3QoYmFzZVZhbHVlLCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0
aG9kVHlwZTo6R2V0T3duUHJvcGVydHkpOwpAQCAtMjUzLDcgKzI1NCw3IEBAIEVuY29kZWRKU1Zh
bHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2UKIHsKICAgICBTdXBlclNhbXBsZXJTY29wZSBz
dXBlclNhbXBsZXJTY29wZShmYWxzZSk7CiAgICAgCi0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7
CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKHZtLCBleGVjKTsKICAgICAKICAgICBzdHViSW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsK
QEAgLTI2Myw3ICsyNjQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
bkdlCiAgICAgSWRlbnRpZmllciBpZGVudCA9IElkZW50aWZpZXI6OmZyb21VaWQodm0sIHVpZCk7
CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBiYXNlVmFsdWUuZ2V0KGV4ZWMsIGlkZW50LCBzbG90KTsK
IAotICAgIExPR19JQygoSUNFdmVudDo6T3BlcmF0aW9uR2V0QnlJZCwgYmFzZVZhbHVlLmNsYXNz
SW5mb09yTnVsbCgqdm0pLCBpZGVudCwgYmFzZVZhbHVlID09IHNsb3Quc2xvdEJhc2UoKSkpOwor
ICAgIExPR19JQygoSUNFdmVudDo6T3BlcmF0aW9uR2V0QnlJZCwgYmFzZVZhbHVlLmNsYXNzSW5m
b09yTnVsbCh2bSksIGlkZW50LCBiYXNlVmFsdWUgPT0gc2xvdC5zbG90QmFzZSgpKSk7CiAKICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CkBAIC0yNzIsNyArMjczLDcgQEAg
RW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZQogewogICAgIFN1cGVyU2Ft
cGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKICAgICAKLSAgICBWTSogdm0gPSAm
ZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIAogICAgIEpTVmFsdWUgYmFzZVZhbHVlID0g
SlNWYWx1ZTo6ZGVjb2RlKGJhc2UpOwpAQCAtMjgwLDcgKzI4MSw3IEBAIEVuY29kZWRKU1ZhbHVl
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2UKICAgICBJZGVudGlmaWVyIGlkZW50ID0gSWRlbnRp
Zmllcjo6ZnJvbVVpZCh2bSwgdWlkKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGJhc2VWYWx1ZS5n
ZXQoZXhlYywgaWRlbnQsIHNsb3QpOwogICAgIAotICAgIExPR19JQygoSUNFdmVudDo6T3BlcmF0
aW9uR2V0QnlJZEdlbmVyaWMsIGJhc2VWYWx1ZS5jbGFzc0luZm9Pck51bGwoKnZtKSwgaWRlbnQs
IGJhc2VWYWx1ZSA9PSBzbG90LnNsb3RCYXNlKCkpKTsKKyAgICBMT0dfSUMoKElDRXZlbnQ6Ok9w
ZXJhdGlvbkdldEJ5SWRHZW5lcmljLCBiYXNlVmFsdWUuY2xhc3NJbmZvT3JOdWxsKHZtKSwgaWRl
bnQsIGJhc2VWYWx1ZSA9PSBzbG90LnNsb3RCYXNlKCkpKTsKICAgICAKICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CkBAIC0yODksNyArMjkwLDcgQEAgRW5jb2RlZEpTVmFs
dWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZQogewogICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1
cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKICAgICAKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsK
KyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIodm0sIGV4ZWMpOwogICAgIElkZW50aWZpZXIgaWRlbnQgPSBJZGVudGlmaWVyOjpmcm9tVWlk
KHZtLCB1aWQpOwogCkBAIC0yOTcsOSArMjk4LDkgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJB
VElPTiBvcGVyYXRpb25HZQogCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShiYXNlVmFsdWUu
Z2V0UHJvcGVydHlTbG90KGV4ZWMsIGlkZW50LCBbJl0gKGJvb2wgZm91bmQsIFByb3BlcnR5U2xv
dCYgc2xvdCkgLT4gSlNWYWx1ZSB7CiAgICAgICAgIAotICAgICAgICBMT0dfSUMoKElDRXZlbnQ6
Ok9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgYmFzZVZhbHVlLmNsYXNzSW5mb09yTnVsbCgqdm0p
LCBpZGVudCwgYmFzZVZhbHVlID09IHNsb3Quc2xvdEJhc2UoKSkpOworICAgICAgICBMT0dfSUMo
KElDRXZlbnQ6Ok9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgYmFzZVZhbHVlLmNsYXNzSW5mb09y
TnVsbCh2bSksIGlkZW50LCBiYXNlVmFsdWUgPT0gc2xvdC5zbG90QmFzZSgpKSk7CiAgICAgICAg
IAotICAgICAgICBpZiAoc3R1YkluZm8tPmNvbnNpZGVyQ2FjaGluZygqdm0sIGV4ZWMtPmNvZGVC
bG9jaygpLCBiYXNlVmFsdWUuc3RydWN0dXJlT3JOdWxsKCkpKQorICAgICAgICBpZiAoc3R1Yklu
Zm8tPmNvbnNpZGVyQ2FjaGluZyh2bSwgZXhlYy0+Y29kZUJsb2NrKCksIGJhc2VWYWx1ZS5zdHJ1
Y3R1cmVPck51bGwoKSkpCiAgICAgICAgICAgICByZXBhdGNoR2V0QnlJRChleGVjLCBiYXNlVmFs
dWUsIGlkZW50LCBzbG90LCAqc3R1YkluZm8sIEdldEJ5SURLaW5kOjpOb3JtYWwpOwogICAgICAg
ICByZXR1cm4gZm91bmQgPyBzbG90LmdldFZhbHVlKGV4ZWMsIGlkZW50KSA6IGpzVW5kZWZpbmVk
KCk7CiAgICAgfSkpOwpAQCAtMzA5LDcgKzMxMCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uR2UKIHsKICAgICBTdXBlclNhbXBsZXJTY29wZSBzdXBlclNhbXBsZXJT
Y29wZShmYWxzZSk7CiAKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwog
ICAgIElkZW50aWZpZXIgaWRlbnQgPSBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCB1aWQpOwogCkBA
IC0zMjYsNyArMzI3LDcgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25H
ZQogewogICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKIAot
ICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgSWRlbnRpZmllciBp
ZGVudCA9IElkZW50aWZpZXI6OmZyb21VaWQodm0sIHVpZCk7CiAKQEAgLTM0MSw3ICszNDIsNyBA
QCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdlCiB7CiAgICAgU3VwZXJT
YW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwogICAgIAotICAgIFZNKiB2bSA9
ICZleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgSWRlbnRpZmllciBpZGVudCA9IElkZW50
aWZpZXI6OmZyb21VaWQodm0sIHVpZCk7CiAKQEAgLTM1MCw5ICszNTEsOSBAQCBFbmNvZGVkSlNW
YWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdlCiAKICAgICBQcm9wZXJ0eVNsb3Qgc2xvdCh0
aGlzVmFsdWUsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpHZXQpOwogICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoYmFzZVZhbHVlLmdldFByb3BlcnR5U2xvdChleGVjLCBpZGVu
dCwgc2xvdCwgWyZdIChib29sIGZvdW5kLCBQcm9wZXJ0eVNsb3QmIHNsb3QpIC0+IEpTVmFsdWUg
ewotICAgICAgICBMT0dfSUMoKElDRXZlbnQ6Ok9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09wdGlt
aXplLCBiYXNlVmFsdWUuY2xhc3NJbmZvT3JOdWxsKCp2bSksIGlkZW50LCBiYXNlVmFsdWUgPT0g
c2xvdC5zbG90QmFzZSgpKSk7CisgICAgICAgIExPR19JQygoSUNFdmVudDo6T3BlcmF0aW9uR2V0
QnlJZFdpdGhUaGlzT3B0aW1pemUsIGJhc2VWYWx1ZS5jbGFzc0luZm9Pck51bGwodm0pLCBpZGVu
dCwgYmFzZVZhbHVlID09IHNsb3Quc2xvdEJhc2UoKSkpOwogICAgICAgICAKLSAgICAgICAgaWYg
KHN0dWJJbmZvLT5jb25zaWRlckNhY2hpbmcoKnZtLCBleGVjLT5jb2RlQmxvY2soKSwgYmFzZVZh
bHVlLnN0cnVjdHVyZU9yTnVsbCgpKSkKKyAgICAgICAgaWYgKHN0dWJJbmZvLT5jb25zaWRlckNh
Y2hpbmcodm0sIGV4ZWMtPmNvZGVCbG9jaygpLCBiYXNlVmFsdWUuc3RydWN0dXJlT3JOdWxsKCkp
KQogICAgICAgICAgICAgcmVwYXRjaEdldEJ5SUQoZXhlYywgYmFzZVZhbHVlLCBpZGVudCwgc2xv
dCwgKnN0dWJJbmZvLCBHZXRCeUlES2luZDo6V2l0aFRoaXMpOwogICAgICAgICByZXR1cm4gZm91
bmQgPyBzbG90LmdldFZhbHVlKGV4ZWMsIGlkZW50KSA6IGpzVW5kZWZpbmVkKCk7CiAgICAgfSkp
OwpAQCAtMzYzLDEyICszNjQsMTIgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVy
YXRpb25JbgogICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsK
IAogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4
ZWMpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIHN0
dWJJbmZvLT50b29rU2xvd1BhdGggPSB0cnVlOwogCi0gICAgSWRlbnRpZmllciBpZGVudCA9IElk
ZW50aWZpZXI6OmZyb21VaWQoJnZtLCB1aWQpOworICAgIElkZW50aWZpZXIgaWRlbnQgPSBJZGVu
dGlmaWVyOjpmcm9tVWlkKHZtLCB1aWQpOwogCiAgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1Zh
bHVlOjpkZWNvZGUoYmFzZSk7CiAgICAgaWYgKCFiYXNlVmFsdWUuaXNPYmplY3QoKSkgewpAQCAt
Mzg5LDEwICszOTAsMTAgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25J
bgogICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKIAogICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigm
dm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwog
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIElkZW50aWZp
ZXIgaWRlbnQgPSBJZGVudGlmaWVyOjpmcm9tVWlkKCZ2bSwgdWlkKTsKKyAgICBJZGVudGlmaWVy
IGlkZW50ID0gSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgdWlkKTsKIAogICAgIEpTVmFsdWUgYmFz
ZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGJhc2UpOwogICAgIGlmICghYmFzZVZhbHVlLmlzT2Jq
ZWN0KCkpIHsKQEAgLTQxMywxMCArNDE0LDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uSW4KICAgICBTdXBlclNhbXBsZXJTY29wZSBzdXBlclNhbXBsZXJTY29wZShm
YWxzZSk7CiAKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRy
YWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KHZtLCBleGVjKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAK
LSAgICBJZGVudGlmaWVyIGlkZW50ID0gSWRlbnRpZmllcjo6ZnJvbVVpZCgmdm0sIHVpZCk7Cisg
ICAgSWRlbnRpZmllciBpZGVudCA9IElkZW50aWZpZXI6OmZyb21VaWQodm0sIHVpZCk7CiAKICAg
ICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShiYXNlKTsKICAgICBpZiAoIWJh
c2VWYWx1ZS5pc09iamVjdCgpKSB7CkBAIC00MzksNyArNDQwLDcgQEAgRW5jb2RlZEpTVmFsdWUg
SklUX09QRVJBVElPTiBvcGVyYXRpb25JbgogewogICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVy
U2FtcGxlclNjb3BlKGZhbHNlKTsKICAgICAKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
dm0sIGV4ZWMpOwogCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oQ29tbW9u
U2xvd1BhdGhzOjpvcEluQnlWYWwoZXhlYywgYmFzZSwgSlNWYWx1ZTo6ZGVjb2RlKGtleSkpKSk7
CkBAIC00NDksNyArNDUwLDcgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWRT
dHJpYwogewogICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsK
ICAgICAKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgp
OwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIAogICAg
IHN0dWJJbmZvLT50b29rU2xvd1BhdGggPSB0cnVlOwpAQCAtNDU5LDE0ICs0NjAsMTQgQEAgdm9p
ZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWRTdHJpYwogICAgIFB1dFByb3BlcnR5U2xv
dCBzbG90KGJhc2VWYWx1ZSwgdHJ1ZSwgZXhlYy0+Y29kZUJsb2NrKCktPnB1dEJ5SWRDb250ZXh0
KCkpOwogICAgIGJhc2VWYWx1ZS5wdXRJbmxpbmUoZXhlYywgaWRlbnQsIEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkVmFsdWUpLCBzbG90KTsKICAgICAKLSAgICBMT0dfSUMoKElDRXZlbnQ6Ok9wZXJh
dGlvblB1dEJ5SWRTdHJpY3QsIGJhc2VWYWx1ZS5jbGFzc0luZm9Pck51bGwoKnZtKSwgaWRlbnQs
IHNsb3QuYmFzZSgpID09IGJhc2VWYWx1ZSkpOworICAgIExPR19JQygoSUNFdmVudDo6T3BlcmF0
aW9uUHV0QnlJZFN0cmljdCwgYmFzZVZhbHVlLmNsYXNzSW5mb09yTnVsbCh2bSksIGlkZW50LCBz
bG90LmJhc2UoKSA9PSBiYXNlVmFsdWUpKTsKIH0KIAogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvblB1dEJ5SWROb25TdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmVTdHViSW5mbyog
c3R1YkluZm8sIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZEJhc2UsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCiB7CiAgICAgU3VwZXJTYW1wbGVyU2Nv
cGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwogICAgIAotICAgIFZNKiB2bSA9ICZleGVjLT52
bSgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcih2bSwgZXhlYyk7CiAgICAgCiAgICAgc3R1YkluZm8tPnRvb2tTbG93UGF0aCA9IHRy
dWU7CkBAIC00NzYsNyArNDc3LDcgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5
SWROb25TdAogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KGJhc2VWYWx1ZSwgZmFsc2UsIGV4ZWMt
PmNvZGVCbG9jaygpLT5wdXRCeUlkQ29udGV4dCgpKTsKICAgICBiYXNlVmFsdWUucHV0SW5saW5l
KGV4ZWMsIGlkZW50LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwgc2xvdCk7CiAKLSAg
ICBMT0dfSUMoKElDRXZlbnQ6Ok9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3QsIGJhc2VWYWx1ZS5j
bGFzc0luZm9Pck51bGwoKnZtKSwgaWRlbnQsIHNsb3QuYmFzZSgpID09IGJhc2VWYWx1ZSkpOwor
ICAgIExPR19JQygoSUNFdmVudDo6T3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdCwgYmFzZVZhbHVl
LmNsYXNzSW5mb09yTnVsbCh2bSksIGlkZW50LCBzbG90LmJhc2UoKSA9PSBiYXNlVmFsdWUpKTsK
IH0KIAogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3QoRXhl
Y1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIFVuaXF1ZWRTdHJpbmdJ
bXBsKiB1aWQpCkBAIC00ODQsMTIgKzQ4NSwxMiBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uUHV0QnlJZERpcmVjCiAgICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUo
ZmFsc2UpOwogICAgIAogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIodm0sIGV4ZWMpOwogICAgIAogICAgIHN0dWJJbmZvLT50b29rU2xvd1BhdGggPSB0cnVl
OwogICAgIAogICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRC
YXNlKTsKLSAgICBJZGVudGlmaWVyIGlkZW50ID0gSWRlbnRpZmllcjo6ZnJvbVVpZCgmdm0sIHVp
ZCk7CisgICAgSWRlbnRpZmllciBpZGVudCA9IElkZW50aWZpZXI6OmZyb21VaWQodm0sIHVpZCk7
CiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3QoYmFzZVZhbHVlLCB0cnVlLCBleGVjLT5jb2RlQmxv
Y2soKS0+cHV0QnlJZENvbnRleHQoKSk7CiAgICAgQ29tbW9uU2xvd1BhdGhzOjpwdXREaXJlY3RX
aXRoUmVpZnkodm0sIGV4ZWMsIGFzT2JqZWN0KGJhc2VWYWx1ZSksIGlkZW50LCBKU1ZhbHVlOjpk
ZWNvZGUoZW5jb2RlZFZhbHVlKSwgc2xvdCk7CiAKQEAgLTUwMSwxMiArNTAyLDEyIEBAIHZvaWQg
SklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkRGlyZWMKICAgICBTdXBlclNhbXBsZXJTY29w
ZSBzdXBlclNhbXBsZXJTY29wZShmYWxzZSk7CiAgICAgCiAgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgCiAgICAgc3R1YkluZm8t
PnRvb2tTbG93UGF0aCA9IHRydWU7CiAgICAgCiAgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1Zh
bHVlOjpkZWNvZGUoZW5jb2RlZEJhc2UpOwotICAgIElkZW50aWZpZXIgaWRlbnQgPSBJZGVudGlm
aWVyOjpmcm9tVWlkKCZ2bSwgdWlkKTsKKyAgICBJZGVudGlmaWVyIGlkZW50ID0gSWRlbnRpZmll
cjo6ZnJvbVVpZCh2bSwgdWlkKTsKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFsdWUs
IGZhbHNlLCBleGVjLT5jb2RlQmxvY2soKS0+cHV0QnlJZENvbnRleHQoKSk7CiAgICAgQ29tbW9u
U2xvd1BhdGhzOjpwdXREaXJlY3RXaXRoUmVpZnkodm0sIGV4ZWMsIGFzT2JqZWN0KGJhc2VWYWx1
ZSksIGlkZW50LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwgc2xvdCk7CiAKQEAgLTUx
Nyw5ICs1MTgsOSBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZFN0cmljCiB7
CiAgICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwogICAgIAot
ICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0gICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CiAKICAgICBJZGVudGlmaWVyIGlkZW50ID0gSWRlbnRpZmllcjo6ZnJvbVVp
ZCh2bSwgdWlkKTsKICAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUgPSBzdGF0aWNfY2FzdDxBY2Nl
c3NUeXBlPihzdHViSW5mby0+YWNjZXNzVHlwZSk7CkBAIC01MjksMTcgKzUzMCwxNyBAQCB2b2lk
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZFN0cmljCiAgICAgQ29kZUJsb2NrKiBjb2Rl
QmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChiYXNl
VmFsdWUsIHRydWUsIGNvZGVCbG9jay0+cHV0QnlJZENvbnRleHQoKSk7CiAKLSAgICBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSA9IGJhc2VWYWx1ZS5pc0NlbGwoKSA/IGJhc2VWYWx1ZS5hc0NlbGwoKS0+
c3RydWN0dXJlKCp2bSkgOiBudWxscHRyOworICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFz
ZVZhbHVlLmlzQ2VsbCgpID8gYmFzZVZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUodm0pIDogbnVs
bHB0cjsKICAgICBiYXNlVmFsdWUucHV0SW5saW5lKGV4ZWMsIGlkZW50LCB2YWx1ZSwgc2xvdCk7
CiAKLSAgICBMT0dfSUMoKElDRXZlbnQ6Ok9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZSwg
YmFzZVZhbHVlLmNsYXNzSW5mb09yTnVsbCgqdm0pLCBpZGVudCwgc2xvdC5iYXNlKCkgPT0gYmFz
ZVZhbHVlKSk7CisgICAgTE9HX0lDKChJQ0V2ZW50OjpPcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0
aW1pemUsIGJhc2VWYWx1ZS5jbGFzc0luZm9Pck51bGwodm0pLCBpZGVudCwgc2xvdC5iYXNlKCkg
PT0gYmFzZVZhbHVlKSk7CiAKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkp
OwogCiAgICAgaWYgKGFjY2Vzc1R5cGUgIT0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1Yklu
Zm8tPmFjY2Vzc1R5cGUpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgaWYgKHN0dWJJbmZv
LT5jb25zaWRlckNhY2hpbmcoKnZtLCBjb2RlQmxvY2ssIHN0cnVjdHVyZSkpCisgICAgaWYgKHN0
dWJJbmZvLT5jb25zaWRlckNhY2hpbmcodm0sIGNvZGVCbG9jaywgc3RydWN0dXJlKSkKICAgICAg
ICAgcmVwYXRjaFB1dEJ5SUQoZXhlYywgYmFzZVZhbHVlLCBzdHJ1Y3R1cmUsIGlkZW50LCBzbG90
LCAqc3R1YkluZm8sIE5vdERpcmVjdCk7CiB9CiAKQEAgLTU0Nyw5ICs1NDgsOSBAQCB2b2lkIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZE5vblN0CiB7CiAgICAgU3VwZXJTYW1wbGVyU2Nv
cGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwogICAgIAotICAgIFZNKiB2bSA9ICZleGVjLT52
bSgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcih2bSwgZXhlYyk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
KnZtKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBJ
ZGVudGlmaWVyIGlkZW50ID0gSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgdWlkKTsKICAgICBBY2Nl
c3NUeXBlIGFjY2Vzc1R5cGUgPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby0+YWNj
ZXNzVHlwZSk7CkBAIC01NTksMTcgKzU2MCwxNyBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uUHV0QnlJZE5vblN0CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxv
Y2soKTsKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFsdWUsIGZhbHNlLCBjb2RlQmxv
Y2stPnB1dEJ5SWRDb250ZXh0KCkpOwogCi0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNl
VmFsdWUuaXNDZWxsKCkgPyBiYXNlVmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSgqdm0pIDogbnVs
bHB0cjsgICAgCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlVmFsdWUuaXNDZWxsKCkg
PyBiYXNlVmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSh2bSkgOiBudWxscHRyOwogICAgIGJhc2VW
YWx1ZS5wdXRJbmxpbmUoZXhlYywgaWRlbnQsIHZhbHVlLCBzbG90KTsKIAotICAgIExPR19JQygo
SUNFdmVudDo6T3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplLCBiYXNlVmFsdWUuY2xh
c3NJbmZvT3JOdWxsKCp2bSksIGlkZW50LCBzbG90LmJhc2UoKSA9PSBiYXNlVmFsdWUpKTsKKyAg
ICBMT0dfSUMoKElDRXZlbnQ6Ok9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZSwgYmFz
ZVZhbHVlLmNsYXNzSW5mb09yTnVsbCh2bSksIGlkZW50LCBzbG90LmJhc2UoKSA9PSBiYXNlVmFs
dWUpKTsKIAogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAKICAgICBp
ZiAoYWNjZXNzVHlwZSAhPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby0+YWNjZXNz
VHlwZSkpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBpZiAoc3R1YkluZm8tPmNvbnNpZGVy
Q2FjaGluZygqdm0sIGNvZGVCbG9jaywgc3RydWN0dXJlKSkKKyAgICBpZiAoc3R1YkluZm8tPmNv
bnNpZGVyQ2FjaGluZyh2bSwgY29kZUJsb2NrLCBzdHJ1Y3R1cmUpKQogICAgICAgICByZXBhdGNo
UHV0QnlJRChleGVjLCBiYXNlVmFsdWUsIHN0cnVjdHVyZSwgaWRlbnQsIHNsb3QsICpzdHViSW5m
bywgTm90RGlyZWN0KTsKIH0KIApAQCAtNTc4LDEwICs1NzksMTAgQEAgdm9pZCBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvblB1dEJ5SWREaXJlYwogICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2Ft
cGxlclNjb3BlKGZhbHNlKTsKICAgICAKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CiAgICAgCi0gICAgSWRlbnRpZmllciBpZGVudCA9IElkZW50aWZpZXI6OmZy
b21VaWQoJnZtLCB1aWQpOworICAgIElkZW50aWZpZXIgaWRlbnQgPSBJZGVudGlmaWVyOjpmcm9t
VWlkKHZtLCB1aWQpOwogICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSA9IHN0YXRpY19jYXN0PEFj
Y2Vzc1R5cGU+KHN0dWJJbmZvLT5hY2Nlc3NUeXBlKTsKIAogICAgIEpTVmFsdWUgdmFsdWUgPSBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKQEAgLTYwNywxMCArNjA4LDEwIEBAIHZvaWQg
SklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkRGlyZWMKICAgICBTdXBlclNhbXBsZXJTY29w
ZSBzdXBlclNhbXBsZXJTY29wZShmYWxzZSk7CiAgICAgCiAgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIAotICAgIElkZW50aWZpZXIgaWRlbnQgPSBJZGVu
dGlmaWVyOjpmcm9tVWlkKCZ2bSwgdWlkKTsKKyAgICBJZGVudGlmaWVyIGlkZW50ID0gSWRlbnRp
Zmllcjo6ZnJvbVVpZCh2bSwgdWlkKTsKICAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUgPSBzdGF0
aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby0+YWNjZXNzVHlwZSk7CiAKICAgICBKU1ZhbHVl
IHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CkBAIC03NjksNyArNzcwLDcg
QEAgc3RhdGljIE9wdGltaXphdGlvblJlc3VsdCB0cnlQdXRCeVZhbE9wdAogICAgICAgICAgICAg
ICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7CiAgICAgICAgICAg
ICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jayk7CiAgICAg
ICAgICAgICAgICAgYnlWYWxJbmZvLT5hcnJheVByb2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJlZGlj
dGlvbihsb2NrZXIsIGNvZGVCbG9jaywgc3RydWN0dXJlKTsKLSAgICAgICAgICAgICAgICBKSVQ6
OmNvbXBpbGVQdXRCeVZhbChsb2NrZXIsICZ2bSwgY29kZUJsb2NrLCBieVZhbEluZm8sIHJldHVy
bkFkZHJlc3MsIGFycmF5TW9kZSk7CisgICAgICAgICAgICAgICAgSklUOjpjb21waWxlUHV0QnlW
YWwobG9ja2VyLCB2bSwgY29kZUJsb2NrLCBieVZhbEluZm8sIHJldHVybkFkZHJlc3MsIGFycmF5
TW9kZSk7CiAgICAgICAgICAgICAgICAgb3B0aW1pemF0aW9uUmVzdWx0ID0gT3B0aW1pemF0aW9u
UmVzdWx0OjpPcHRpbWl6ZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTc4Nyw3ICs3
ODgsNyBAQCBzdGF0aWMgT3B0aW1pemF0aW9uUmVzdWx0IHRyeVB1dEJ5VmFsT3B0CiAgICAgICAg
ICAgICBBU1NFUlQoIWJ5VmFsSW5mby0+c3R1YlJvdXRpbmUpOwogICAgICAgICAgICAgaWYgKGJ5
VmFsSW5mby0+c2VlbikgewogICAgICAgICAgICAgICAgIGlmIChieVZhbEluZm8tPmNhY2hlZElk
ID09IHByb3BlcnR5TmFtZSkgewotICAgICAgICAgICAgICAgICAgICBKSVQ6OmNvbXBpbGVQdXRC
eVZhbFdpdGhDYWNoZWRJZDxPcFB1dEJ5VmFsPigmdm0sIGV4ZWMtPmNvZGVCbG9jaygpLCBieVZh
bEluZm8sIHJldHVybkFkZHJlc3MsIE5vdERpcmVjdCwgcHJvcGVydHlOYW1lKTsKKyAgICAgICAg
ICAgICAgICAgICAgSklUOjpjb21waWxlUHV0QnlWYWxXaXRoQ2FjaGVkSWQ8T3BQdXRCeVZhbD4o
dm0sIGV4ZWMtPmNvZGVCbG9jaygpLCBieVZhbEluZm8sIHJldHVybkFkZHJlc3MsIE5vdERpcmVj
dCwgcHJvcGVydHlOYW1lKTsKICAgICAgICAgICAgICAgICAgICAgb3B0aW1pemF0aW9uUmVzdWx0
ID0gT3B0aW1pemF0aW9uUmVzdWx0OjpPcHRpbWl6ZWQ7CiAgICAgICAgICAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgICAgICAgICAgLy8gU2VlbSBsaWtlIGEgZ2VuZXJpYyBwcm9wZXJ0eSBh
Y2Nlc3Mgc2l0ZS4KQEAgLTgyMSw3ICs4MjIsNyBAQCBzdGF0aWMgT3B0aW1pemF0aW9uUmVzdWx0
IHRyeVB1dEJ5VmFsT3B0CiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxPcHRp
bWl6ZShFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlVmFsdWUsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3JpcHQsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1
ZSwgQnlWYWxJbmZvKiBieVZhbEluZm8pCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwogCiAgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNv
ZGUoZW5jb2RlZEJhc2VWYWx1ZSk7CkBAIC04NTgsNyArODU5LDcgQEAgc3RhdGljIE9wdGltaXph
dGlvblJlc3VsdCB0cnlEaXJlY3RQdXRCeQogICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xv
Y2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2spOwogICAgICAgICAgICAgICAgIGJ5VmFsSW5m
by0+YXJyYXlQcm9maWxlLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obG9ja2VyLCBjb2RlQmxv
Y2ssIHN0cnVjdHVyZSk7CiAKLSAgICAgICAgICAgICAgICBKSVQ6OmNvbXBpbGVEaXJlY3RQdXRC
eVZhbChsb2NrZXIsICZ2bSwgY29kZUJsb2NrLCBieVZhbEluZm8sIHJldHVybkFkZHJlc3MsIGFy
cmF5TW9kZSk7CisgICAgICAgICAgICAgICAgSklUOjpjb21waWxlRGlyZWN0UHV0QnlWYWwobG9j
a2VyLCB2bSwgY29kZUJsb2NrLCBieVZhbEluZm8sIHJldHVybkFkZHJlc3MsIGFycmF5TW9kZSk7
CiAgICAgICAgICAgICAgICAgb3B0aW1pemF0aW9uUmVzdWx0ID0gT3B0aW1pemF0aW9uUmVzdWx0
OjpPcHRpbWl6ZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTg3NCw3ICs4NzUsNyBA
QCBzdGF0aWMgT3B0aW1pemF0aW9uUmVzdWx0IHRyeURpcmVjdFB1dEJ5CiAgICAgICAgICAgICBB
U1NFUlQoIWJ5VmFsSW5mby0+c3R1YlJvdXRpbmUpOwogICAgICAgICAgICAgaWYgKGJ5VmFsSW5m
by0+c2VlbikgewogICAgICAgICAgICAgICAgIGlmIChieVZhbEluZm8tPmNhY2hlZElkID09IHBy
b3BlcnR5TmFtZSkgewotICAgICAgICAgICAgICAgICAgICBKSVQ6OmNvbXBpbGVQdXRCeVZhbFdp
dGhDYWNoZWRJZDxPcFB1dEJ5VmFsRGlyZWN0Pigmdm0sIGV4ZWMtPmNvZGVCbG9jaygpLCBieVZh
bEluZm8sIHJldHVybkFkZHJlc3MsIERpcmVjdCwgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgICAg
ICAgICAgICAgSklUOjpjb21waWxlUHV0QnlWYWxXaXRoQ2FjaGVkSWQ8T3BQdXRCeVZhbERpcmVj
dD4odm0sIGV4ZWMtPmNvZGVCbG9jaygpLCBieVZhbEluZm8sIHJldHVybkFkZHJlc3MsIERpcmVj
dCwgcHJvcGVydHlOYW1lKTsKICAgICAgICAgICAgICAgICAgICAgb3B0aW1pemF0aW9uUmVzdWx0
ID0gT3B0aW1pemF0aW9uUmVzdWx0OjpPcHRpbWl6ZWQ7CiAgICAgICAgICAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgICAgICAgICAgLy8gU2VlbSBsaWtlIGEgZ2VuZXJpYyBwcm9wZXJ0eSBh
Y2Nlc3Mgc2l0ZS4KQEAgLTkwOCw3ICs5MDksNyBAQCBzdGF0aWMgT3B0aW1pemF0aW9uUmVzdWx0
IHRyeURpcmVjdFB1dEJ5CiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRGlyZWN0UHV0QnlW
YWxPcHRpbWl6ZShFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlVmFs
dWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3JpcHQsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRWYWx1ZSwgQnlWYWxJbmZvKiBieVZhbEluZm8pCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZEJhc2VWYWx1ZSk7CkBAIC05MzAsNyArOTMxLDcgQEAgdm9pZCBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbkRpcmVjdFB1dEJ5Vgogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvblB1dEJ5VmFsR2VuZXJpYyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRCYXNlVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3JpcHQsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRWYWx1ZSwgQnlWYWxJbmZvKiBieVZhbEluZm8pCiB7CiAgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7
CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgCiAgICAg
SlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2VWYWx1ZSk7CiAg
ICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFN1YnNjcmlwdCk7
CkBAIC05NDMsNyArOTQ0LDcgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFs
R2VuZQogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsR2VuZXJpYyhF
eGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlVmFsdWUsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRTdWJzY3JpcHQsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgQnlW
YWxJbmZvKiBieVZhbEluZm8pCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgCiAgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2VWYWx1ZSk7CiAgICAgSlNWYWx1ZSBzdWJzY3JpcHQg
PSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFN1YnNjcmlwdCk7CkBAIC05NTQsOCArOTU1LDggQEAg
dm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkRpcmVjdFB1dEJ5VgogCiBFbmNvZGVkSlNWYWx1
ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNhbGxFdmFsKEV4ZWNTdGF0ZSogZXhlYywgRXhlY1N0
YXRlKiBleGVjQ2FsbGVlKQogewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBleGVj
Q2FsbGVlLT5zZXRDb2RlQmxvY2soMCk7CiAgICAgCkBAIC05NzEsMjQgKzk3MiwyNCBAQCBFbmNv
ZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNhCiBzdGF0aWMgU2xvd1BhdGhSZXR1
cm5UeXBlIGhhbmRsZUhvc3RDYWxsKEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSwgSlNWYWx1ZSBjYWxs
ZWUsIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvKQogewogICAgIEV4ZWNTdGF0ZSogZXhlYyA9
IGV4ZWNDYWxsZWUtPmNhbGxlckZyYW1lKCk7Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0g
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKKyAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAog
ICAgIGV4ZWNDYWxsZWUtPnNldENvZGVCbG9jaygwKTsKIAogICAgIGlmIChjYWxsTGlua0luZm8t
PnNwZWNpYWxpemF0aW9uS2luZCgpID09IENvZGVGb3JDYWxsKSB7CiAgICAgICAgIENhbGxEYXRh
IGNhbGxEYXRhOwotICAgICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGdldENhbGxEYXRhKCp2bSwg
Y2FsbGVlLCBjYWxsRGF0YSk7CisgICAgICAgIENhbGxUeXBlIGNhbGxUeXBlID0gZ2V0Q2FsbERh
dGEodm0sIGNhbGxlZSwgY2FsbERhdGEpOwogICAgIAogICAgICAgICBBU1NFUlQoY2FsbFR5cGUg
IT0gQ2FsbFR5cGU6OkpTKTsKICAgICAKICAgICAgICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBl
OjpIb3N0KSB7CiAgICAgICAgICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBl
eGVjQ2FsbGVlKTsKICAgICAgICAgICAgIGV4ZWNDYWxsZWUtPnNldENhbGxlZShhc09iamVjdChj
YWxsZWUpKTsKLSAgICAgICAgICAgIHZtLT5ob3N0Q2FsbFJldHVyblZhbHVlID0gSlNWYWx1ZTo6
ZGVjb2RlKGNhbGxEYXRhLm5hdGl2ZS5mdW5jdGlvbihleGVjQ2FsbGVlKSk7CisgICAgICAgICAg
ICB2bS5ob3N0Q2FsbFJldHVyblZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGNhbGxEYXRhLm5hdGl2
ZS5mdW5jdGlvbihleGVjQ2FsbGVlKSk7CiAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdCgKLSAg
ICAgICAgICAgICAgICAgICAgdm0tPmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNs
b3dQYXRoR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8SlNFbnRyeVB0clRhZz4oKS5leGVjdXRhYmxl
QWRkcmVzcygpLAorICAgICAgICAgICAgICAgICAgICB2bS5nZXRDVElTdHViKHRocm93RXhjZXB0
aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPEpTRW50cnlQdHJUYWc+
KCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwKICAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRf
Y2FzdDx2b2lkKj4oS2VlcFRoZUZyYW1lKSk7CiAgICAgICAgICAgICB9CiAKQEAgLTEwMDAsMjQg
KzEwMDEsMjQgQEAgc3RhdGljIFNsb3dQYXRoUmV0dXJuVHlwZSBoYW5kbGVIb3N0Q2FsbAogICAg
ICAgICBBU1NFUlQoY2FsbFR5cGUgPT0gQ2FsbFR5cGU6Ok5vbmUpOwogICAgICAgICB0aHJvd0V4
Y2VwdGlvbihleGVjLCBzY29wZSwgY3JlYXRlTm90QUZ1bmN0aW9uRXJyb3IoZXhlYywgY2FsbGVl
KSk7CiAgICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQoCi0gICAgICAgICAgICB2bS0+Z2V0Q1RJ
U3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLnJldGFnZ2VkQ29k
ZTxKU0VudHJ5UHRyVGFnPigpLmV4ZWN1dGFibGVBZGRyZXNzKCksCisgICAgICAgICAgICB2bS5n
ZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcikucmV0YWdn
ZWRDb2RlPEpTRW50cnlQdHJUYWc+KCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwKICAgICAgICAgICAg
IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEtlZXBUaGVGcmFtZSkpOwogICAgIH0KIAogICAgIEFT
U0VSVChjYWxsTGlua0luZm8tPnNwZWNpYWxpemF0aW9uS2luZCgpID09IENvZGVGb3JDb25zdHJ1
Y3QpOwogICAgIAogICAgIENvbnN0cnVjdERhdGEgY29uc3RydWN0RGF0YTsKLSAgICBDb25zdHJ1
Y3RUeXBlIGNvbnN0cnVjdFR5cGUgPSBnZXRDb25zdHJ1Y3REYXRhKCp2bSwgY2FsbGVlLCBjb25z
dHJ1Y3REYXRhKTsKKyAgICBDb25zdHJ1Y3RUeXBlIGNvbnN0cnVjdFR5cGUgPSBnZXRDb25zdHJ1
Y3REYXRhKHZtLCBjYWxsZWUsIGNvbnN0cnVjdERhdGEpOwogICAgIAogICAgIEFTU0VSVChjb25z
dHJ1Y3RUeXBlICE9IENvbnN0cnVjdFR5cGU6OkpTKTsKICAgICAKICAgICBpZiAoY29uc3RydWN0
VHlwZSA9PSBDb25zdHJ1Y3RUeXBlOjpIb3N0KSB7CiAgICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRy
YWNlciB0cmFjZXIodm0sIGV4ZWNDYWxsZWUpOwogICAgICAgICBleGVjQ2FsbGVlLT5zZXRDYWxs
ZWUoYXNPYmplY3QoY2FsbGVlKSk7Ci0gICAgICAgIHZtLT5ob3N0Q2FsbFJldHVyblZhbHVlID0g
SlNWYWx1ZTo6ZGVjb2RlKGNvbnN0cnVjdERhdGEubmF0aXZlLmZ1bmN0aW9uKGV4ZWNDYWxsZWUp
KTsKKyAgICAgICAgdm0uaG9zdENhbGxSZXR1cm5WYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShjb25z
dHJ1Y3REYXRhLm5hdGl2ZS5mdW5jdGlvbihleGVjQ2FsbGVlKSk7CiAgICAgICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpIHsKICAgICAgICAgICAgIHJldHVybiBlbmNvZGVSZXN1
bHQoCi0gICAgICAgICAgICAgICAgdm0tPmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2Fs
bFNsb3dQYXRoR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8SlNFbnRyeVB0clRhZz4oKS5leGVjdXRh
YmxlQWRkcmVzcygpLAorICAgICAgICAgICAgICAgIHZtLmdldENUSVN0dWIodGhyb3dFeGNlcHRp
b25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8SlNFbnRyeVB0clRhZz4o
KS5leGVjdXRhYmxlQWRkcmVzcygpLAogICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCo+KEtlZXBUaGVGcmFtZSkpOwogICAgICAgICB9CiAKQEAgLTEwMjcsMTUgKzEwMjgsMTUg
QEAgc3RhdGljIFNsb3dQYXRoUmV0dXJuVHlwZSBoYW5kbGVIb3N0Q2FsbAogICAgIEFTU0VSVChj
b25zdHJ1Y3RUeXBlID09IENvbnN0cnVjdFR5cGU6Ok5vbmUpOwogICAgIHRocm93RXhjZXB0aW9u
KGV4ZWMsIHNjb3BlLCBjcmVhdGVOb3RBQ29uc3RydWN0b3JFcnJvcihleGVjLCBjYWxsZWUpKTsK
ICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KAotICAgICAgICB2bS0+Z2V0Q1RJU3R1Yih0aHJvd0V4
Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxKU0VudHJ5UHRy
VGFnPigpLmV4ZWN1dGFibGVBZGRyZXNzKCksCisgICAgICAgIHZtLmdldENUSVN0dWIodGhyb3dF
eGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8SlNFbnRyeVB0
clRhZz4oKS5leGVjdXRhYmxlQWRkcmVzcygpLAogICAgICAgICByZWludGVycHJldF9jYXN0PHZv
aWQqPihLZWVwVGhlRnJhbWUpKTsKIH0KIAogU2xvd1BhdGhSZXR1cm5UeXBlIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uTGlua0NhbGwoRXhlY1N0YXRlKiBleGVjQ2FsbGVlLCBDYWxsTGlua0luZm8q
IGNhbGxMaW5rSW5mbykKIHsKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBleGVjQ2FsbGVlLT5jYWxs
ZXJGcmFtZSgpOwotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwor
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgQ29k
ZVNwZWNpYWxpemF0aW9uS2luZCBraW5kID0gY2FsbExpbmtJbmZvLT5zcGVjaWFsaXphdGlvbktp
bmQoKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKQEAgLTEw
NDUsOCArMTA0Niw4IEBAIFNsb3dQYXRoUmV0dXJuVHlwZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGkK
ICAgICBKU1ZhbHVlIGNhbGxlZUFzVmFsdWUgPSBleGVjQ2FsbGVlLT5ndWFyYW50ZWVkSlNWYWx1
ZUNhbGxlZSgpOwogICAgIEpTQ2VsbCogY2FsbGVlQXNGdW5jdGlvbkNlbGwgPSBnZXRKU0Z1bmN0
aW9uKGNhbGxlZUFzVmFsdWUpOwogICAgIGlmICghY2FsbGVlQXNGdW5jdGlvbkNlbGwpIHsKLSAg
ICAgICAgaWYgKGF1dG8qIGludGVybmFsRnVuY3Rpb24gPSBqc0R5bmFtaWNDYXN0PEludGVybmFs
RnVuY3Rpb24qPigqdm0sIGNhbGxlZUFzVmFsdWUpKSB7Ci0gICAgICAgICAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0ciA9IHZtLT5nZXRDVElJbnRlcm5hbEZ1
bmN0aW9uVHJhbXBvbGluZUZvcihraW5kKTsKKyAgICAgICAgaWYgKGF1dG8qIGludGVybmFsRnVu
Y3Rpb24gPSBqc0R5bmFtaWNDYXN0PEludGVybmFsRnVuY3Rpb24qPih2bSwgY2FsbGVlQXNWYWx1
ZSkpIHsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBj
b2RlUHRyID0gdm0uZ2V0Q1RJSW50ZXJuYWxGdW5jdGlvblRyYW1wb2xpbmVGb3Ioa2luZCk7CiAg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghIWNvZGVQdHIpOwogCiAgICAgICAgICAgICBpZiAo
IWNhbGxMaW5rSW5mby0+c2Vlbk9uY2UoKSkKQEAgLTEwNjcsMTQgKzEwNjgsMTQgQEAgU2xvd1Bh
dGhSZXR1cm5UeXBlIEpJVF9PUEVSQVRJT04gb3BlcmF0aQogICAgIE1hY3JvQXNzZW1ibGVyQ29k
ZVB0cjxKU0VudHJ5UHRyVGFnPiBjb2RlUHRyOwogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0g
bnVsbHB0cjsKICAgICBpZiAoZXhlY3V0YWJsZS0+aXNIb3N0RnVuY3Rpb24oKSkgewotICAgICAg
ICBjb2RlUHRyID0ganNUb1dhc21JQ0NvZGVQdHIoKnZtLCBraW5kLCBjYWxsZWUpOworICAgICAg
ICBjb2RlUHRyID0ganNUb1dhc21JQ0NvZGVQdHIodm0sIGtpbmQsIGNhbGxlZSk7CiAgICAgICAg
IGlmICghY29kZVB0cikKICAgICAgICAgICAgIGNvZGVQdHIgPSBleGVjdXRhYmxlLT5lbnRyeXBv
aW50Rm9yKGtpbmQsIE11c3RDaGVja0FyaXR5KTsKICAgICB9IGVsc2UgewogICAgICAgICBGdW5j
dGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhlY3V0YWJsZSA9IHN0YXRpY19jYXN0PEZ1bmN0aW9u
RXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpOwogCiAgICAgICAgIGF1dG8gaGFuZGxlVGhyb3dFeGNl
cHRpb24gPSBbJl0gKCkgewotICAgICAgICAgICAgdm9pZCogdGhyb3dUYXJnZXQgPSB2bS0+Z2V0
Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLnJldGFnZ2Vk
Q29kZTxKU0VudHJ5UHRyVGFnPigpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgICAgICAgICB2
b2lkKiB0aHJvd1RhcmdldCA9IHZtLmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNs
b3dQYXRoR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8SlNFbnRyeVB0clRhZz4oKS5leGVjdXRhYmxl
QWRkcmVzcygpOwogICAgICAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdCh0aHJvd1RhcmdldCwg
cmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oS2VlcFRoZUZyYW1lKSk7CiAgICAgICAgIH07CiAKQEAg
LTEwODQsNyArMTA4NSw3IEBAIFNsb3dQYXRoUmV0dXJuVHlwZSBKSVRfT1BFUkFUSU9OIG9wZXJh
dGkKICAgICAgICAgfQogCiAgICAgICAgIENvZGVCbG9jayoqIGNvZGVCbG9ja1Nsb3QgPSBleGVj
Q2FsbGVlLT5hZGRyZXNzT2ZDb2RlQmxvY2soKTsKLSAgICAgICAgRXhjZXB0aW9uKiBlcnJvciA9
IGZ1bmN0aW9uRXhlY3V0YWJsZS0+cHJlcGFyZUZvckV4ZWN1dGlvbjxGdW5jdGlvbkV4ZWN1dGFi
bGU+KCp2bSwgY2FsbGVlLCBzY29wZSwga2luZCwgKmNvZGVCbG9ja1Nsb3QpOworICAgICAgICBF
eGNlcHRpb24qIGVycm9yID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5wcmVwYXJlRm9yRXhlY3V0aW9u
PEZ1bmN0aW9uRXhlY3V0YWJsZT4odm0sIGNhbGxlZSwgc2NvcGUsIGtpbmQsICpjb2RlQmxvY2tT
bG90KTsKICAgICAgICAgRVhDRVBUSU9OX0FTU0VSVCh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpID09
IGVycm9yKTsKICAgICAgICAgaWYgKFVOTElLRUxZKGVycm9yKSkKICAgICAgICAgICAgIHJldHVy
biBoYW5kbGVUaHJvd0V4Y2VwdGlvbigpOwpAQCAtMTEwNyw4ICsxMTA4LDggQEAgU2xvd1BhdGhS
ZXR1cm5UeXBlIEpJVF9PUEVSQVRJT04gb3BlcmF0aQogCiB2b2lkIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uTGlua0RpcmVjdENhbGwoRXhlY1N0YXRlKiBleGVjLCBDYWxsTGlua0luZm8qIGNhbGxM
aW5rSW5mbywgSlNGdW5jdGlvbiogY2FsbGVlKQogewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgp
OwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKKyAgICBW
TSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogCiAgICAgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kID0gY2FsbExpbmtJ
bmZvLT5zcGVjaWFsaXphdGlvbktpbmQoKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKHZtLCBleGVjKTsKQEAgLTExNDEsNyArMTE0Miw3IEBAIHZvaWQgSklUX09QRVJBVElPTiBv
cGVyYXRpb25MaW5rRGlyZWN0Q2EKIAogICAgICAgICBSRUxFQVNFX0FTU0VSVChpc0NhbGwoa2lu
ZCkgfHwgZnVuY3Rpb25FeGVjdXRhYmxlLT5jb25zdHJ1Y3RBYmlsaXR5KCkgIT0gQ29uc3RydWN0
QWJpbGl0eTo6Q2Fubm90Q29uc3RydWN0KTsKICAgICAgICAgCi0gICAgICAgIEV4Y2VwdGlvbiog
ZXJyb3IgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPnByZXBhcmVGb3JFeGVjdXRpb248RnVuY3Rpb25F
eGVjdXRhYmxlPigqdm0sIGNhbGxlZSwgc2NvcGUsIGtpbmQsIGNvZGVCbG9jayk7CisgICAgICAg
IEV4Y2VwdGlvbiogZXJyb3IgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPnByZXBhcmVGb3JFeGVjdXRp
b248RnVuY3Rpb25FeGVjdXRhYmxlPih2bSwgY2FsbGVlLCBzY29wZSwga2luZCwgY29kZUJsb2Nr
KTsKICAgICAgICAgRVhDRVBUSU9OX0FTU0VSVF9VTlVTRUQodGhyb3dTY29wZSwgdGhyb3dTY29w
ZS5leGNlcHRpb24oKSA9PSBlcnJvcik7CiAgICAgICAgIGlmIChVTkxJS0VMWShlcnJvcikpCiAg
ICAgICAgICAgICByZXR1cm47CkBAIC0xMTU5LDggKzExNjAsOCBAQCBpbmxpbmUgU2xvd1BhdGhS
ZXR1cm5UeXBlIHZpcnR1YWxGb3JXaXRoCiAgICAgRXhlY1N0YXRlKiBleGVjQ2FsbGVlLCBDYWxs
TGlua0luZm8qIGNhbGxMaW5rSW5mbywgSlNDZWxsKiYgY2FsbGVlQXNGdW5jdGlvbkNlbGwpCiB7
CiAgICAgRXhlY1N0YXRlKiBleGVjID0gZXhlY0NhbGxlZS0+Y2FsbGVyRnJhbWUoKTsKLSAgICBW
TSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKCp2bSk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIENvZGVTcGVjaWFsaXphdGlvbktp
bmQga2luZCA9IGNhbGxMaW5rSW5mby0+c3BlY2lhbGl6YXRpb25LaW5kKCk7CiAgICAgTmF0aXZl
Q2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CkBAIC0xMTY4LDggKzExNjksOCBAQCBp
bmxpbmUgU2xvd1BhdGhSZXR1cm5UeXBlIHZpcnR1YWxGb3JXaXRoCiAgICAgSlNWYWx1ZSBjYWxs
ZWVBc1ZhbHVlID0gZXhlY0NhbGxlZS0+Z3VhcmFudGVlZEpTVmFsdWVDYWxsZWUoKTsKICAgICBj
YWxsZWVBc0Z1bmN0aW9uQ2VsbCA9IGdldEpTRnVuY3Rpb24oY2FsbGVlQXNWYWx1ZSk7CiAgICAg
aWYgKFVOTElLRUxZKCFjYWxsZWVBc0Z1bmN0aW9uQ2VsbCkpIHsKLSAgICAgICAgaWYgKGpzRHlu
YW1pY0Nhc3Q8SW50ZXJuYWxGdW5jdGlvbio+KCp2bSwgY2FsbGVlQXNWYWx1ZSkpIHsKLSAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBjb2RlUHRyID0gdm0t
PmdldENUSUludGVybmFsRnVuY3Rpb25UcmFtcG9saW5lRm9yKGtpbmQpOworICAgICAgICBpZiAo
anNEeW5hbWljQ2FzdDxJbnRlcm5hbEZ1bmN0aW9uKj4odm0sIGNhbGxlZUFzVmFsdWUpKSB7Cisg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0ciA9
IHZtLmdldENUSUludGVybmFsRnVuY3Rpb25UcmFtcG9saW5lRm9yKGtpbmQpOwogICAgICAgICAg
ICAgQVNTRVJUKCEhY29kZVB0cik7CiAgICAgICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KGNv
ZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oY2FsbExp
bmtJbmZvLT5jYWxsTW9kZSgpID09IENhbGxNb2RlOjpUYWlsID8gUmV1c2VUaGVGcmFtZSA6IEtl
ZXBUaGVGcmFtZSkpOwogICAgICAgICB9CkBAIC0xMTg1LDE2ICsxMTg2LDE2IEBAIGlubGluZSBT
bG93UGF0aFJldHVyblR5cGUgdmlydHVhbEZvcldpdGgKICAgICAgICAgaWYgKCFpc0NhbGwoa2lu
ZCkgJiYgZnVuY3Rpb25FeGVjdXRhYmxlLT5jb25zdHJ1Y3RBYmlsaXR5KCkgPT0gQ29uc3RydWN0
QWJpbGl0eTo6Q2Fubm90Q29uc3RydWN0KSB7CiAgICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihl
eGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RBQ29uc3RydWN0b3JFcnJvcihleGVjLCBmdW5jdGlv
bikpOwogICAgICAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdCgKLSAgICAgICAgICAgICAgICB2
bS0+Z2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLnJl
dGFnZ2VkQ29kZTxKU0VudHJ5UHRyVGFnPigpLmV4ZWN1dGFibGVBZGRyZXNzKCksCisgICAgICAg
ICAgICAgICAgdm0uZ2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5l
cmF0b3IpLnJldGFnZ2VkQ29kZTxKU0VudHJ5UHRyVGFnPigpLmV4ZWN1dGFibGVBZGRyZXNzKCks
CiAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oS2VlcFRoZUZyYW1lKSk7
CiAgICAgICAgIH0KIAogICAgICAgICBDb2RlQmxvY2sqKiBjb2RlQmxvY2tTbG90ID0gZXhlY0Nh
bGxlZS0+YWRkcmVzc09mQ29kZUJsb2NrKCk7Ci0gICAgICAgIEV4Y2VwdGlvbiogZXJyb3IgPSBm
dW5jdGlvbkV4ZWN1dGFibGUtPnByZXBhcmVGb3JFeGVjdXRpb248RnVuY3Rpb25FeGVjdXRhYmxl
Pigqdm0sIGZ1bmN0aW9uLCBzY29wZSwga2luZCwgKmNvZGVCbG9ja1Nsb3QpOworICAgICAgICBF
eGNlcHRpb24qIGVycm9yID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5wcmVwYXJlRm9yRXhlY3V0aW9u
PEZ1bmN0aW9uRXhlY3V0YWJsZT4odm0sIGZ1bmN0aW9uLCBzY29wZSwga2luZCwgKmNvZGVCbG9j
a1Nsb3QpOwogICAgICAgICBFWENFUFRJT05fQVNTRVJUKHRocm93U2NvcGUuZXhjZXB0aW9uKCkg
PT0gZXJyb3IpOwogICAgICAgICBpZiAoVU5MSUtFTFkoZXJyb3IpKSB7CiAgICAgICAgICAgICBy
ZXR1cm4gZW5jb2RlUmVzdWx0KAotICAgICAgICAgICAgICAgIHZtLT5nZXRDVElTdHViKHRocm93
RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPEpTRW50cnlQ
dHJUYWc+KCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwKKyAgICAgICAgICAgICAgICB2bS5nZXRDVElT
dHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcikucmV0YWdnZWRDb2Rl
PEpTRW50cnlQdHJUYWc+KCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwKICAgICAgICAgICAgICAgICBy
ZWludGVycHJldF9jYXN0PHZvaWQqPihLZWVwVGhlRnJhbWUpKTsKICAgICAgICAgfQogICAgIH0K
QEAgLTEyMjIsNyArMTIyMyw3IEBAIFNsb3dQYXRoUmV0dXJuVHlwZSBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGkKIAogc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZUxlc3MoRXhlY1N0
YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkT3AyKQogewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAg
CiAgICAgcmV0dXJuIGpzTGVzczx0cnVlPihleGVjLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9w
MSksIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AyKSk7CkBAIC0xMjMwLDcgKzEyMzEsNyBAQCBz
aXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlTGVzCiAKIHNpemVfdCBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVMZXNzRXEoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKQogewotICAgIFZNKiB2
bSA9ICZleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAKICAgICByZXR1cm4ganNMZXNzRXE8dHJ1
ZT4oZXhlYywgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDEpLCBKU1ZhbHVlOjpkZWNvZGUoZW5j
b2RlZE9wMikpOwpAQCAtMTIzOCw3ICsxMjM5LDcgQEAgc2l6ZV90IEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uQ29tcGFyZUxlcwogCiBzaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJl
R3JlYXRlcihFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRPcDIpCiB7Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZt
LCBleGVjKTsKIAogICAgIHJldHVybiBqc0xlc3M8ZmFsc2U+KGV4ZWMsIEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkT3AyKSwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDEpKTsKQEAgLTEyNDYsNyAr
MTI0Nyw3IEBAIHNpemVfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVHcmUKIAogc2l6
ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXJFcShFeGVjU3RhdGUqIGV4
ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIp
CiB7Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsK
ICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKIAogICAgIHJldHVy
biBqc0xlc3NFcTxmYWxzZT4oZXhlYywgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDIpLCBKU1Zh
bHVlOjpkZWNvZGUoZW5jb2RlZE9wMSkpOwpAQCAtMTI1NCw3ICsxMjU1LDcgQEAgc2l6ZV90IEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZUdyZQogCiBzaXplX3QgSklUX09QRVJBVElPTiBv
cGVyYXRpb25Db21wYXJlRXEoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
T3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKQogewotICAgIFZNKiB2bSA9ICZleGVjLT52
bSgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcih2bSwgZXhlYyk7CiAKICAgICByZXR1cm4gSlNWYWx1ZTo6ZXF1YWxTbG93Q2FzZUlu
bGluZShleGVjLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMSksIEpTVmFsdWU6OmRlY29kZShl
bmNvZGVkT3AyKSk7CkBAIC0xMjY2LDcgKzEyNjcsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbkNvCiBzaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJl
U3RyaW5nRXEoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGxlZnQsIEpTQ2VsbCogcmlnaHQpCiAj
ZW5kaWYKIHsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBleGVjLT52
bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogCiAgICAg
Ym9vbCByZXN1bHQgPSBhc1N0cmluZyhsZWZ0KS0+ZXF1YWwoZXhlYywgYXNTdHJpbmcocmlnaHQp
KTsKQEAgLTEyNzksNyArMTI4MCw3IEBAIHNpemVfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNv
bXBhcmVTdHIKIAogc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZVN0cmljdEVx
KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZE9wMikKIHsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0g
PSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMp
OwogCiAgICAgSlNWYWx1ZSBzcmMxID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDEpOwpAQCAt
MTI5MCwxNCArMTI5MSwxNCBAQCBzaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJl
U3RyCiAKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3QXJyYXlXaXRo
UHJvZmlsZShFeGVjU3RhdGUqIGV4ZWMsIEFycmF5QWxsb2NhdGlvblByb2ZpbGUqIHByb2ZpbGUs
IGNvbnN0IEpTVmFsdWUqIHZhbHVlcywgaW50IHNpemUpCiB7Ci0gICAgVk0qIHZtID0gJmV4ZWMt
PnZtKCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFj
ZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNvbnN0cnVj
dEFycmF5TmVnYXRpdmVJbmRleGVkKGV4ZWMsIHByb2ZpbGUsIHZhbHVlcywgc2l6ZSkpOwogfQog
CiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVB
bmRQcm9maWxlKEV4ZWNTdGF0ZSogZXhlYywgQXJyYXlBbGxvY2F0aW9uUHJvZmlsZSogcHJvZmls
ZSwgRW5jb2RlZEpTVmFsdWUgc2l6ZSkKIHsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
dm0sIGV4ZWMpOwogICAgIEpTVmFsdWUgc2l6ZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKHNpemUp
OwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY29uc3RydWN0QXJyYXlXaXRoU2l6ZVF1aXJr
KGV4ZWMsIHByb2ZpbGUsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgc2l6ZVZhbHVlKSk7
CkBAIC0xMzEwLDcgKzEzMTEsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgb3BlcmF0aW9uTmV3
RnVuY3RpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBBU1NFUlQoZnVuY3Rpb25F
eGVjdXRhYmxlLT5pbmhlcml0czxGdW5jdGlvbkV4ZWN1dGFibGU+KHZtKSk7Ci0gICAgTmF0aXZl
Q2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRy
YWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIGlmIChpc0ludmFsaWRhdGVkKQogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEZ1bmN0aW9uVHlwZTo6Y3JlYXRlV2l0aEludmFsaWRhdGVk
UmVhbGxvY2F0aW9uV2F0Y2hwb2ludCh2bSwgc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxl
Kj4oZnVuY3Rpb25FeGVjdXRhYmxlKSwgc2NvcGUpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKEZ1bmN0aW9uVHlwZTo6Y3JlYXRlKHZtLCBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFi
bGUqPihmdW5jdGlvbkV4ZWN1dGFibGUpLCBzY29wZSkpOwpAQCAtMTM2MCw3ICsxMzYxLDcgQEAg
RW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25OZQogICAgIAogdm9pZCBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvblNldEZ1bmN0aW9uTmFtZShFeGVjU3RhdGUqIGV4ZWMsIEpTQ2Vs
bCogZnVuY0NlbGwsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWROYW1lKQogewotICAgIFZNKiB2bSA9
ICZleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAKICAgICBKU0Z1bmN0aW9uKiBmdW5jID0ganND
YXN0PEpTRnVuY3Rpb24qPihmdW5jQ2VsbCk7CkBAIC0xMzcwLDcgKzEzNzEsNyBAQCB2b2lkIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uU2V0RnVuY3Rpb25OCiAKIEpTQ2VsbCogSklUX09QRVJBVElP
TiBvcGVyYXRpb25OZXdPYmplY3QoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSkKIHsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgp
OwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogCiAgICAgcmV0
dXJuIGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMsIHN0cnVjdHVyZSk7CkBAIC0xMzgwLDcgKzEz
ODEsNyBAQCBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3UmVnZXhwCiB7CiAgICAg
U3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwogICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMp
OworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogCiAgICAgUmVn
RXhwKiByZWdleHAgPSBzdGF0aWNfY2FzdDxSZWdFeHAqPihyZWdleHBQdHIpOwogICAgIEFTU0VS
VChyZWdleHAtPmlzVmFsaWQoKSk7CkBAIC0xMzk0LDcgKzEzOTUsNyBAQCBKU0NlbGwqIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uTmV3UmVnZXhwCiBVbnVzZWRQdHIgSklUX09QRVJBVElPTiBvcGVy
YXRpb25IYW5kbGVUcmFwcyhFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgQVNTRVJUKHZtLm5l
ZWRUcmFwSGFuZGxpbmcoKSk7CiAgICAgdm0uaGFuZGxlVHJhcHMoZXhlYyk7CiAgICAgcmV0dXJu
IG51bGxwdHI7CkBAIC0xNDAzLDcgKzE0MDQsNyBAQCBVbnVzZWRQdHIgSklUX09QRVJBVElPTiBv
cGVyYXRpb25IYW5kbGVUCiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRGVidWcoRXhlY1N0
YXRlKiBleGVjLCBpbnQzMl90IGRlYnVnSG9va1R5cGUpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAKICAgICB2bS5pbnRlcnBy
ZXRlci0+ZGVidWcoZXhlYywgc3RhdGljX2Nhc3Q8RGVidWdIb29rVHlwZT4oZGVidWdIb29rVHlw
ZSkpOwogfQpAQCAtMTQxOCw3ICsxNDE5LDcgQEAgc3RhdGljIHZvaWQgdXBkYXRlQWxsUHJlZGlj
dGlvbnNBbmRPcHRpbQogU2xvd1BhdGhSZXR1cm5UeXBlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
T3B0aW1pemUoRXhlY1N0YXRlKiBleGVjLCB1aW50MzJfdCBieXRlY29kZUluZGV4KQogewogICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigm
dm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwog
CiAgICAgLy8gRGVmZXIgR0MgZm9yIGEgd2hpbGUgc28gdGhhdCBpdCBkb2Vzbid0IHJ1biBiZXR3
ZWVuIHdoZW4gd2UgZW50ZXIgaW50byB0aGlzCiAgICAgLy8gc2xvdyBwYXRoIGFuZCB3aGVuIHdl
IGZpZ3VyZSBvdXQgdGhlIHN0YXRlIG9mIG91ciBjb2RlIGJsb2NrLiBUaGlzIHByZXZlbnRzCkBA
IC0xNjYzLDcgKzE2NjQsNyBAQCBTbG93UGF0aFJldHVyblR5cGUgSklUX09QRVJBVElPTiBvcGVy
YXRpCiBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRyeU9TUkVudGVyQXRDYXRjaChFeGVj
U3RhdGUqIGV4ZWMsIHVpbnQzMl90IGJ5dGVjb2RlSW5kZXgpCiB7CiAgICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7Cisg
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAKICAgICBDb2RlQmxv
Y2sqIG9wdGltaXplZFJlcGxhY2VtZW50ID0gZXhlYy0+Y29kZUJsb2NrKCktPnJlcGxhY2VtZW50
KCk7CiAgICAgaWYgKFVOTElLRUxZKCFvcHRpbWl6ZWRSZXBsYWNlbWVudCkpCkBAIC0xNjg0LDcg
KzE2ODUsNyBAQCBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRyeU9TUkVudGVyCiBjaGFy
KiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRyeU9TUkVudGVyQXRDYXRjaEFuZFZhbHVlUHJvZmls
ZShFeGVjU3RhdGUqIGV4ZWMsIHVpbnQzMl90IGJ5dGVjb2RlSW5kZXgpCiB7CiAgICAgVk0mIHZt
ID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhl
Yyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAKICAgICBD
b2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOwogICAgIENvZGVCbG9jayog
b3B0aW1pemVkUmVwbGFjZW1lbnQgPSBjb2RlQmxvY2stPnJlcGxhY2VtZW50KCk7CkBAIC0xNzE2
LDcgKzE3MTcsNyBAQCBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRyeU9TUkVudGVyCiB2
b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJbmRleChFeGVjU3RhdGUqIGV4ZWMsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRBcnJheVZhbHVlLCBpbnQzMl90IGluZGV4LCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAKICAgICBKU1ZhbHVlIGFycmF5VmFsdWUgPSBKU1Zh
bHVlOjpkZWNvZGUoZW5jb2RlZEFycmF5VmFsdWUpOwogICAgIEFTU0VSVChpc0pTQXJyYXkoYXJy
YXlWYWx1ZSkpOwpAQCAtMTc0NSw3ICsxNzQ2LDcgQEAgc3RhdGljIHZvaWQgcHV0QWNjZXNzb3JC
eVZhbChFeGVjU3RhdGUqIAogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEdldHRlckJ5
SWQoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIG9iamVjdCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVp
ZCwgaW50MzJfdCBvcHRpb25zLCBKU0NlbGwqIGdldHRlcikKIHsKICAgICBWTSYgdm0gPSBleGVj
LT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKIAogICAgIEFTU0VSVChv
YmplY3QgJiYgb2JqZWN0LT5pc09iamVjdCgpKTsKICAgICBKU09iamVjdCogYmFzZU9iaiA9IG9i
amVjdC0+Z2V0T2JqZWN0KCk7CkBAIC0xNzU3LDcgKzE3NTgsNyBAQCB2b2lkIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uUHV0R2V0dGVyQnlJCiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0
U2V0dGVyQnlJZChFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogb2JqZWN0LCBVbmlxdWVkU3RyaW5n
SW1wbCogdWlkLCBpbnQzMl90IG9wdGlvbnMsIEpTQ2VsbCogc2V0dGVyKQogewogICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4
ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogCiAgICAg
QVNTRVJUKG9iamVjdCAmJiBvYmplY3QtPmlzT2JqZWN0KCkpOwogICAgIEpTT2JqZWN0KiBiYXNl
T2JqID0gb2JqZWN0LT5nZXRPYmplY3QoKTsKQEAgLTE3NjksNyArMTc3MCw3IEBAIHZvaWQgSklU
X09QRVJBVElPTiBvcGVyYXRpb25QdXRTZXR0ZXJCeUkKIHZvaWQgSklUX09QRVJBVElPTiBvcGVy
YXRpb25QdXRHZXR0ZXJCeVZhbChFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogYmFzZSwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZFN1YnNjcmlwdCwgaW50MzJfdCBhdHRyaWJ1dGUsIEpTQ2VsbCogZ2V0
dGVyKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
dm0sIGV4ZWMpOwogCiAgICAgcHV0QWNjZXNzb3JCeVZhbChleGVjLCBhc09iamVjdChiYXNlKSwg
SlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRTdWJzY3JpcHQpLCBhdHRyaWJ1dGUsIGFzT2JqZWN0KGdl
dHRlciksIEFjY2Vzc29yVHlwZTo6R2V0dGVyKTsKIH0KQEAgLTE3NzcsNyArMTc3OCw3IEBAIHZv
aWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRHZXR0ZXJCeVYKIHZvaWQgSklUX09QRVJBVElP
TiBvcGVyYXRpb25QdXRTZXR0ZXJCeVZhbChFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogYmFzZSwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFN1YnNjcmlwdCwgaW50MzJfdCBhdHRyaWJ1dGUsIEpTQ2Vs
bCogc2V0dGVyKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIodm0sIGV4ZWMpOwogCiAgICAgcHV0QWNjZXNzb3JCeVZhbChleGVjLCBhc09iamVjdChi
YXNlKSwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRTdWJzY3JpcHQpLCBhdHRyaWJ1dGUsIGFzT2Jq
ZWN0KHNldHRlciksIEFjY2Vzc29yVHlwZTo6U2V0dGVyKTsKIH0KQEAgLTE3ODYsNyArMTc4Nyw3
IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRTZXR0ZXJCeVYKIHZvaWQgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25QdXRHZXR0ZXJTZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwq
IG9iamVjdCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgaW50MzJfdCBhdHRyaWJ1dGUsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRHZXR0ZXJWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFNldHRl
clZhbHVlKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIodm0sIGV4ZWMpOwogCiAgICAgQVNTRVJUKG9iamVjdCAmJiBvYmplY3QtPmlzT2JqZWN0KCkp
OwogICAgIEpTT2JqZWN0KiBiYXNlT2JqZWN0ID0gYXNPYmplY3Qob2JqZWN0KTsKQEAgLTE4MDIs
NyArMTgwMyw3IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRHZXR0ZXJTZXQKIHZv
aWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRHZXR0ZXJTZXR0ZXIoRXhlY1N0YXRlKiBleGVj
LCBKU0NlbGwqIG9iamVjdCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgaW50MzJfdCBhdHRyaWJ1
dGUsIEpTQ2VsbCogZ2V0dGVyQ2VsbCwgSlNDZWxsKiBzZXR0ZXJDZWxsKQogewogICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4
ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogCiAgICAg
QVNTRVJUKG9iamVjdCAmJiBvYmplY3QtPmlzT2JqZWN0KCkpOwogICAgIEpTT2JqZWN0KiBiYXNl
T2JqZWN0ID0gYXNPYmplY3Qob2JqZWN0KTsKQEAgLTE4MTgsNyArMTgxOSw3IEBAIHZvaWQgSklU
X09QRVJBVElPTiBvcGVyYXRpb25QdXRHZXR0ZXJTZXQKIHZvaWQgSklUX09QRVJBVElPTiBvcGVy
YXRpb25Qb3BTY29wZShFeGVjU3RhdGUqIGV4ZWMsIGludDMyX3Qgc2NvcGVSZWcpCiB7CiAgICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2
bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAK
ICAgICBKU1Njb3BlKiBzY29wZSA9IGV4ZWMtPnVuY2hlY2tlZFIoc2NvcGVSZWcpLlJlZ2lzdGVy
OjpzY29wZSgpOwogICAgIGV4ZWMtPnVuY2hlY2tlZFIoc2NvcGVSZWcpID0gc2NvcGUtPm5leHQo
KTsKQEAgLTE4MjcsNyArMTgyOCw3IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25Qb3BT
Y29wZShFeGUKIGludDMyX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25JbnN0YW5jZU9mQ3VzdG9t
KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU09iamVjdCog
Y29uc3RydWN0b3IsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRIYXNJbnN0YW5jZSkKIHsKICAgICBW
TSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZt
LCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKIAog
ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBK
U1ZhbHVlIGhhc0luc3RhbmNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEhhc0luc3Rh
bmNlKTsKQEAgLTE5MzQsNyArMTkzNSw3IEBAIHN0YXRpYyBPcHRpbWl6YXRpb25SZXN1bHQgdHJ5
R2V0QnlWYWxPcHQKICAgICAgICAgICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNv
ZGVCbG9jay0+bV9sb2NrKTsKICAgICAgICAgICAgICAgICBieVZhbEluZm8tPmFycmF5UHJvZmls
ZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlciwgY29kZUJsb2NrLCBzdHJ1Y3R1cmUp
OwogCi0gICAgICAgICAgICAgICAgSklUOjpjb21waWxlR2V0QnlWYWwobG9ja2VyLCAmdm0sIGNv
ZGVCbG9jaywgYnlWYWxJbmZvLCByZXR1cm5BZGRyZXNzLCBhcnJheU1vZGUpOworICAgICAgICAg
ICAgICAgIEpJVDo6Y29tcGlsZUdldEJ5VmFsKGxvY2tlciwgdm0sIGNvZGVCbG9jaywgYnlWYWxJ
bmZvLCByZXR1cm5BZGRyZXNzLCBhcnJheU1vZGUpOwogICAgICAgICAgICAgICAgIG9wdGltaXph
dGlvblJlc3VsdCA9IE9wdGltaXphdGlvblJlc3VsdDo6T3B0aW1pemVkOwogICAgICAgICAgICAg
fQogICAgICAgICB9CkBAIC0xOTUyLDcgKzE5NTMsNyBAQCBzdGF0aWMgT3B0aW1pemF0aW9uUmVz
dWx0IHRyeUdldEJ5VmFsT3B0CiAgICAgICAgICAgICBBU1NFUlQoIWJ5VmFsSW5mby0+c3R1YlJv
dXRpbmUpOwogICAgICAgICAgICAgaWYgKGJ5VmFsSW5mby0+c2VlbikgewogICAgICAgICAgICAg
ICAgIGlmIChieVZhbEluZm8tPmNhY2hlZElkID09IHByb3BlcnR5TmFtZSkgewotICAgICAgICAg
ICAgICAgICAgICBKSVQ6OmNvbXBpbGVHZXRCeVZhbFdpdGhDYWNoZWRJZCgmdm0sIGV4ZWMtPmNv
ZGVCbG9jaygpLCBieVZhbEluZm8sIHJldHVybkFkZHJlc3MsIHByb3BlcnR5TmFtZSk7CisgICAg
ICAgICAgICAgICAgICAgIEpJVDo6Y29tcGlsZUdldEJ5VmFsV2l0aENhY2hlZElkKHZtLCBleGVj
LT5jb2RlQmxvY2soKSwgYnlWYWxJbmZvLCByZXR1cm5BZGRyZXNzLCBwcm9wZXJ0eU5hbWUpOwog
ICAgICAgICAgICAgICAgICAgICBvcHRpbWl6YXRpb25SZXN1bHQgPSBPcHRpbWl6YXRpb25SZXN1
bHQ6Ok9wdGltaXplZDsKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAg
ICAgICAvLyBTZWVtIGxpa2UgYSBnZW5lcmljIHByb3BlcnR5IGFjY2VzcyBzaXRlLgpAQCAtMTk4
OCw3ICsxOTg5LDcgQEAgZXh0ZXJuICJDIiB7CiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvbkdldEJ5VmFsR2VuZXJpYyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRCYXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkU3Vic2NyaXB0LCBCeVZhbEluZm8q
IGJ5VmFsSW5mbykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxG
cmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIg
dHJhY2VyKHZtLCBleGVjKTsKICAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkQmFzZSk7CiAgICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZFN1YnNjcmlwdCk7CiAKQEAgLTE5OTksNyArMjAwMCw3IEBAIEVuY29kZWRKU1ZhbHVl
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2UKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZShFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRCYXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkU3Vic2NyaXB0LCBCeVZhbEluZm8q
IGJ5VmFsSW5mbykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxG
cmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIg
dHJhY2VyKHZtLCBleGVjKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CiAKICAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQmFz
ZSk7CkBAIC0yMDE5LDcgKzIwMjAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbkdlCiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkhhc0luZGV4
ZWRQcm9wZXJ0eURlZmF1bHQoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
QmFzZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFN1YnNjcmlwdCwgQnlWYWxJbmZvKiBieVZhbElu
Zm8pCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFj
ZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2
bSwgZXhlYyk7CiAgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2Rl
ZEJhc2UpOwogICAgIEpTVmFsdWUgc3Vic2NyaXB0ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRT
dWJzY3JpcHQpOwogICAgIApAQCAtMjAzNiw3ICsyMDM3LDcgQEAgRW5jb2RlZEpTVmFsdWUgSklU
X09QRVJBVElPTiBvcGVyYXRpb25IYQogICAgICAgICAvLyBBdHRlbXB0IHRvIG9wdGltaXplLgog
ICAgICAgICBKSVRBcnJheU1vZGUgYXJyYXlNb2RlID0gaml0QXJyYXlNb2RlRm9yU3RydWN0dXJl
KG9iamVjdC0+c3RydWN0dXJlKHZtKSk7CiAgICAgICAgIGlmIChhcnJheU1vZGUgIT0gYnlWYWxJ
bmZvLT5hcnJheU1vZGUpIHsKLSAgICAgICAgICAgIEpJVDo6Y29tcGlsZUhhc0luZGV4ZWRQcm9w
ZXJ0eSgmdm0sIGV4ZWMtPmNvZGVCbG9jaygpLCBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIo
T1VSX1JFVFVSTl9BRERSRVNTKSwgYXJyYXlNb2RlKTsKKyAgICAgICAgICAgIEpJVDo6Y29tcGls
ZUhhc0luZGV4ZWRQcm9wZXJ0eSh2bSwgZXhlYy0+Y29kZUJsb2NrKCksIGJ5VmFsSW5mbywgUmV0
dXJuQWRkcmVzc1B0cihPVVJfUkVUVVJOX0FERFJFU1MpLCBhcnJheU1vZGUpOwogICAgICAgICAg
ICAgZGlkT3B0aW1pemUgPSB0cnVlOwogICAgICAgICB9CiAgICAgfQpAQCAtMjA2Niw3ICsyMDY3
LDcgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25IYQogRW5jb2RlZEpT
VmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25IYXNJbmRleGVkUHJvcGVydHlHZW5lcmljKEV4
ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRTdWJzY3JpcHQsIEJ5VmFsSW5mbyogYnlWYWxJbmZvKQogewogICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMp
OworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIEpTVmFs
dWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNlKTsKICAgICBKU1ZhbHVl
IHN1YnNjcmlwdCA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkU3Vic2NyaXB0KTsKICAgICAKQEAg
LTIwODYsNyArMjA4Nyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
SGEKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0QnlWYWxTdHJpbmco
RXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFN1YnNjcmlwdCwgQnlWYWxJbmZvKiBieVZhbEluZm8pCiB7CiAgICAgVk0mIHZt
ID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhl
Yyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTVmFsdWUgYmFzZVZhbHVl
ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNlKTsKICAgICBKU1ZhbHVlIHN1YnNjcmlwdCA9
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkU3Vic2NyaXB0KTsKQEAgLTIxMjQsMTQgKzIxMjUsMTQg
QEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25EZQogc2l6ZV90IEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uRGVsZXRlQnlJZChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRCYXNlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQogewogICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMp
OworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEpTT2JqZWN0KiBiYXNlT2Jq
ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNlKS50b09iamVjdChleGVjKTsKICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7CiAgICAgaWYgKCFiYXNlT2JqKQogICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgYm9vbCBjb3VsZERlbGV0ZSA9IGJhc2VPYmotPm1ldGhvZFRh
YmxlKHZtKS0+ZGVsZXRlUHJvcGVydHkoYmFzZU9iaiwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbVVp
ZCgmdm0sIHVpZCkpOworICAgIGJvb2wgY291bGREZWxldGUgPSBiYXNlT2JqLT5tZXRob2RUYWJs
ZSh2bSktPmRlbGV0ZVByb3BlcnR5KGJhc2VPYmosIGV4ZWMsIElkZW50aWZpZXI6OmZyb21VaWQo
dm0sIHVpZCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKICAgICBp
ZiAoIWNvdWxkRGVsZXRlICYmIGV4ZWMtPmNvZGVCbG9jaygpLT5pc1N0cmljdE1vZGUoKSkKICAg
ICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIFVuYWJsZVRvRGVsZXRlUHJvcGVydHlF
cnJvcik7CkBAIC0yMTQ2LDcgKzIxNDcsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvbkRlCiBzaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25EZWxldGVCeVZhbChF
eGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkS2V5KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKIAogICAgIEpTT2JqZWN0KiBiYXNlT2JqID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRC
YXNlKS50b09iamVjdChleGVjKTsKQEAgLTIxNzMsNyArMjE3NCw3IEBAIHNpemVfdCBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbkRlbGV0ZUJ5VmEKIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRp
b25QdXNoV2l0aFNjb3BlKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBjdXJyZW50U2NvcGVDZWxs
LCBFbmNvZGVkSlNWYWx1ZSBvYmplY3RWYWx1ZSkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgp
OwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBKU09iamVjdCogb2JqZWN0ID0gSlNWYWx1ZTo6
ZGVjb2RlKG9iamVjdFZhbHVlKS50b09iamVjdChleGVjKTsKQEAgLTIxODcsNyArMjE4OCw3IEBA
IEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXNoV2l0aFMKIEpTQ2VsbCogSklUX09Q
RVJBVElPTiBvcGVyYXRpb25QdXNoV2l0aFNjb3BlT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYywgSlND
ZWxsKiBjdXJyZW50U2NvcGVDZWxsLCBKU09iamVjdCogb2JqZWN0KQogewogICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMp
OworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIEpTU2Nv
cGUqIGN1cnJlbnRTY29wZSA9IGpzQ2FzdDxKU1Njb3BlKj4oY3VycmVudFNjb3BlQ2VsbCk7CiAg
ICAgcmV0dXJuIEpTV2l0aFNjb3BlOjpjcmVhdGUodm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmpl
Y3QoKSwgY3VycmVudFNjb3BlLCBvYmplY3QpOwogfQpAQCAtMjE5NSw3ICsyMTk2LDcgQEAgSlND
ZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1c2hXaXRoUwogRW5jb2RlZEpTVmFsdWUgSklU
X09QRVJBVElPTiBvcGVyYXRpb25JbnN0YW5jZU9mKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZFZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvdG8pCiB7CiAgICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2
bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAg
ICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIEpT
VmFsdWUgcHJvdG8gPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFByb3RvKTsKICAgICAKQEAgLTIy
MDYsNyArMjIwNyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSW4K
IEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSW5zdGFuY2VPZkdlbmVyaWMo
RXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFByb3RvKQogewogICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0s
IGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAg
IEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBKU1Zh
bHVlIHByb3RvID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRQcm90byk7CiAgICAgCkBAIC0yMjE5
LDcgKzIyMjAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkluCiBF
bmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6ZShF
eGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvdG8pCiB7CiAgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwg
ZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTVmFsdWUgdmFsdWUg
PSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBKU1ZhbHVlIHByb3RvID0gSlNW
YWx1ZTo6ZGVjb2RlKGVuY29kZWRQcm90byk7CkBAIC0yMjM2LDE0ICsyMjM3LDE0IEBAIEVuY29k
ZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSW4KIGludDMyX3QgSklUX09QRVJBVElP
TiBvcGVyYXRpb25TaXplRnJhbWVGb3JGb3J3YXJkQXJndW1lbnRzKEV4ZWNTdGF0ZSogZXhlYywg
RW5jb2RlZEpTVmFsdWUsIGludDMyX3QgbnVtVXNlZFN0YWNrU2xvdHMsIGludDMyX3QpCiB7CiAg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7
CiAgICAgcmV0dXJuIHNpemVGcmFtZUZvckZvcndhcmRBcmd1bWVudHMoZXhlYywgdm0sIG51bVVz
ZWRTdGFja1Nsb3RzKTsKIH0KIAogaW50MzJfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblNpemVG
cmFtZUZvclZhcmFyZ3MoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQXJn
dW1lbnRzLCBpbnQzMl90IG51bVVzZWRTdGFja1Nsb3RzLCBpbnQzMl90IGZpcnN0VmFyQXJnT2Zm
c2V0KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
dm0sIGV4ZWMpOwogICAgIEpTVmFsdWUgYXJndW1lbnRzID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRBcmd1bWVudHMpOwogICAgIHJldHVybiBzaXplRnJhbWVGb3JWYXJhcmdzKGV4ZWMsIHZtLCBh
cmd1bWVudHMsIG51bVVzZWRTdGFja1Nsb3RzLCBmaXJzdFZhckFyZ09mZnNldCk7CiB9CkBAIC0y
MjUxLDcgKzIyNTIsNyBAQCBpbnQzMl90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uU2l6ZUZyYW1l
CiBDYWxsRnJhbWUqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uU2V0dXBGb3J3YXJkQXJndW1lbnRz
RnJhbWUoRXhlY1N0YXRlKiBleGVjLCBDYWxsRnJhbWUqIG5ld0NhbGxGcmFtZSwgRW5jb2RlZEpT
VmFsdWUsIGludDMyX3QsIGludDMyX3QgbGVuZ3RoKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIHNldHVwRm9yd2FyZEFy
Z3VtZW50c0ZyYW1lKGV4ZWMsIG5ld0NhbGxGcmFtZSwgbGVuZ3RoKTsKICAgICByZXR1cm4gbmV3
Q2FsbEZyYW1lOwogfQpAQCAtMjI1OSw3ICsyMjYwLDcgQEAgQ2FsbEZyYW1lKiBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvblNldHVwRgogQ2FsbEZyYW1lKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblNl
dHVwVmFyYXJnc0ZyYW1lKEV4ZWNTdGF0ZSogZXhlYywgQ2FsbEZyYW1lKiBuZXdDYWxsRnJhbWUs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRBcmd1bWVudHMsIGludDMyX3QgZmlyc3RWYXJBcmdPZmZz
ZXQsIGludDMyX3QgbGVuZ3RoKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIEpTVmFsdWUgYXJndW1lbnRzID0gSlNWYWx1
ZTo6ZGVjb2RlKGVuY29kZWRBcmd1bWVudHMpOwogICAgIHNldHVwVmFyYXJnc0ZyYW1lKGV4ZWMs
IG5ld0NhbGxGcmFtZSwgYXJndW1lbnRzLCBmaXJzdFZhckFyZ09mZnNldCwgbGVuZ3RoKTsKICAg
ICByZXR1cm4gbmV3Q2FsbEZyYW1lOwpAQCAtMjI2OCw3ICsyMjY5LDcgQEAgQ2FsbEZyYW1lKiBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvblNldHVwVgogY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRp
b25Td2l0Y2hDaGFyV2l0aFVua25vd25LZXlUeXBlKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZEtleSwgc2l6ZV90IHRhYmxlSW5kZXgpCiB7CiAgICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7Cisg
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgSlNWYWx1ZSBr
ZXkgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEtleSk7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxv
Y2sgPSBleGVjLT5jb2RlQmxvY2soKTsKIApAQCAtMjI4OCw3ICsyMjg5LDcgQEAgY2hhciogSklU
X09QRVJBVElPTiBvcGVyYXRpb25Td2l0Y2hDaGFyVwogY2hhciogSklUX09QRVJBVElPTiBvcGVy
YXRpb25Td2l0Y2hJbW1XaXRoVW5rbm93bktleVR5cGUoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkS2V5LCBzaXplX3QgdGFibGVJbmRleCkKIHsKICAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsK
KyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICBKU1ZhbHVl
IGtleSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkS2V5KTsKICAgICBDb2RlQmxvY2sqIGNvZGVC
bG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOwogCkBAIC0yMzA3LDcgKzIzMDgsNyBAQCBjaGFyKiBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvblN3aXRjaEltbVdpCiBjaGFyKiBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvblN3aXRjaFN0cmluZ1dpdGhVbmtub3duS2V5VHlwZShFeGVjU3RhdGUqIGV4ZWMsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRLZXksIHNpemVfdCB0YWJsZUluZGV4KQogewogICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4
ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIEpT
VmFsdWUga2V5ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRLZXkpOwogICAgIENvZGVCbG9jayog
Y29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC0yMzMxLDcgKzIzMzIsNyBAQCBjaGFyKiBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvblN3aXRjaFN0cmluCiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvbkdldEZyb21TY29wZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEluc3RydWN0aW9u
KiBwYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRy
YWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KHZtLCBleGVjKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKIAogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7CkBAIC0y
MzcyLDcgKzIzNzMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdl
CiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0VG9TY29wZShFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IEluc3RydWN0aW9uKiBwYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+
Y29kZUJsb2NrKCk7CkBAIC0yNDI0LDkgKzI0MjUsOSBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uUHV0VG9TY29wZShFCiAKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25UaHJvdyhF
eGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRFeGNlcHRpb25WYWx1ZSkKIHsK
LSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwotICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwogCiAgICAgSlNWYWx1ZSBleGNlcHRpb25WYWx1ZSA9IEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkRXhjZXB0aW9uVmFsdWUpOwogICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHNj
b3BlLCBleGNlcHRpb25WYWx1ZSk7CkBAIC0yNDM4LDcgKzI0MzksNyBAQCB2b2lkIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uVGhyb3coRXhlY1N0CiBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
blJlYWxsb2NhdGVCdXR0ZXJmbHlUb0hhdmVQcm9wZXJ0eVN0b3JhZ2VXaXRoSW5pdGlhbENhcGFj
aXR5KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9iamVjdCkKIHsKICAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsK
KyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKIAogICAgIEFTU0VS
VCghb2JqZWN0LT5zdHJ1Y3R1cmUodm0pLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKICAgICBCdXR0
ZXJmbHkqIHJlc3VsdCA9IG9iamVjdC0+YWxsb2NhdGVNb3JlT3V0T2ZMaW5lU3RvcmFnZSh2bSwg
MCwgaW5pdGlhbE91dE9mTGluZUNhcGFjaXR5KTsKQEAgLTI0NDksNyArMjQ1MCw3IEBAIGNoYXIq
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUmVhbGxvY2F0ZUIKIGNoYXIqIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uUmVhbGxvY2F0ZUJ1dHRlcmZseVRvR3Jvd1Byb3BlcnR5U3RvcmFnZShFeGVjU3Rh
dGUqIGV4ZWMsIEpTT2JqZWN0KiBvYmplY3QsIHNpemVfdCBuZXdTaXplKQogewogICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4
ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogCiAgICAg
QnV0dGVyZmx5KiByZXN1bHQgPSBvYmplY3QtPmFsbG9jYXRlTW9yZU91dE9mTGluZVN0b3JhZ2Uo
dm0sIG9iamVjdC0+c3RydWN0dXJlKHZtKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgbmV3U2l6ZSk7
CiAgICAgb2JqZWN0LT5udWtlU3RydWN0dXJlQW5kU2V0QnV0dGVyZmx5KHZtLCBvYmplY3QtPnN0
cnVjdHVyZUlEKCksIHJlc3VsdCk7CkBAIC0yNDU4LDIzICsyNDU5LDI0IEBAIGNoYXIqIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uUmVhbGxvY2F0ZUIKIAogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbk9TUldyaXRlQmFycmllcihFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogY2VsbCkKIHsKLSAg
ICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwotICAgIHZtLT5oZWFwLndyaXRl
QmFycmllcihjZWxsKTsKKyAgICB2bS5oZWFwLndyaXRlQmFycmllcihjZWxsKTsKIH0KIAogdm9p
ZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbldyaXRlQmFycmllclNsb3dQYXRoKEV4ZWNTdGF0ZSog
ZXhlYywgSlNDZWxsKiBjZWxsKQogewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwg
ZXhlYyk7Ci0gICAgdm0tPmhlYXAud3JpdGVCYXJyaWVyU2xvd1BhdGgoY2VsbCk7CisgICAgdm0u
aGVhcC53cml0ZUJhcnJpZXJTbG93UGF0aChjZWxsKTsKIH0KIAotdm9pZCBKSVRfT1BFUkFUSU9O
IGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIoVk0qIHZtLCBFeGVjU3RhdGUqIGV4ZWMpCit2b2lkIEpJ
VF9PUEVSQVRJT04gbG9va3VwRXhjZXB0aW9uSGFuZGxlcihWTSogdm1Qb2ludGVyLCBFeGVjU3Rh
dGUqIGV4ZWMpCiB7CisgICAgVk0mIHZtID0gKnZtUG9pbnRlcjsKICAgICBOYXRpdmVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICBnZW5lcmljVW53aW5kKHZtLCBleGVjKTsK
LSAgICBBU1NFUlQodm0tPnRhcmdldE1hY2hpbmVQQ0ZvclRocm93KTsKKyAgICBBU1NFUlQodm0u
dGFyZ2V0TWFjaGluZVBDRm9yVGhyb3cpOwogfQogCiB2b2lkIEpJVF9PUEVSQVRJT04gbG9va3Vw
RXhjZXB0aW9uSGFuZGxlckZyb21DYWxsZXJGcmFtZShWTSogdm0sIEV4ZWNTdGF0ZSogZXhlYykK
QEAgLTI0ODYsNyArMjQ4OCw3IEBAIHZvaWQgSklUX09QRVJBVElPTiBsb29rdXBFeGNlcHRpb25I
YW5kbGUKIAogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZNSGFuZGxlRXhjZXB0aW9uKEV4
ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0g
PSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMp
OwogICAgIGdlbmVyaWNVbndpbmQodm0sIGV4ZWMpOwogfQpAQCAtMjQ5OCw5ICsyNTAwLDkgQEAg
dm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZNSGFuZGxlRXhjZQogLy8gdGVzdGluZy4KIHZv
aWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25FeGNlcHRpb25GdXp6KEV4ZWNTdGF0ZSogZXhlYykK
IHsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwog
ICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwotICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTShzY29wZSk7CiAjaWYgQ09NUElMRVIo
R0NDX0NPTVBBVElCTEUpCiAgICAgdm9pZCogcmV0dXJuUEMgPSBfX2J1aWx0aW5fcmV0dXJuX2Fk
ZHJlc3MoMCk7CkBAIC0yNTEwLDcgKzI1MTIsNyBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uRXhjZXB0aW9uRnV6CiAKIEFMV0FZU19JTkxJTkUgc3RhdGljIEVuY29kZWRKU1ZhbHVlIHVu
cHJvZmlsZWRBZGQoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKQogewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwor
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cih2bSwgZXhlYyk7CiAgICAgCiAgICAgSlNWYWx1ZSBvcDEgPSBKU1ZhbHVlOjpkZWNvZGUoZW5j
b2RlZE9wMSk7CkBAIC0yNTIxLDcgKzI1MjMsNyBAQCBBTFdBWVNfSU5MSU5FIHN0YXRpYyBFbmNv
ZGVkSlNWYWx1ZSB1bnByCiAKIEFMV0FZU19JTkxJTkUgc3RhdGljIEVuY29kZWRKU1ZhbHVlIHBy
b2ZpbGVkQWRkKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZE9wMiwgQXJpdGhQcm9maWxlJiBhcml0aFByb2ZpbGUpCiB7Ci0g
ICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICAKICAgICBKU1ZhbHVl
IG9wMSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AxKTsKQEAgLTI1NDcsNyArMjU0OSw3IEBA
IEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmEKIAogRW5jb2RlZEpTVmFs
dWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkT3B0aW1pemUoRXhlY1N0
YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkT3AyLCBKSVRBZGRJQyogYWRkSUMpCiB7Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Cisg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KHZtLCBleGVjKTsKICAgICAKICAgICBKU1ZhbHVlIG9wMSA9IEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkT3AxKTsKQEAgLTI1NzEsNyArMjU3Myw3IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uVmEKIAogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25W
YWx1ZUFkZFByb2ZpbGVkTm9PcHRpbWl6ZShFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIsIEpJVEFkZElDKiBhZGRJQykK
IHsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwog
ICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogCiAgICAgQXJpdGhQ
cm9maWxlKiBhcml0aFByb2ZpbGUgPSBhZGRJQy0+YXJpdGhQcm9maWxlKCk7CkBAIC0yNTgxLDcg
KzI1ODMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZhCiAKIEVu
Y29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmFsdWVBZGRPcHRpbWl6ZShFeGVj
U3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRPcDIsIEpJVEFkZElDKiBhZGRJQykKIHsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsK
KyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIodm0sIGV4ZWMpOwogCiAgICAgSlNWYWx1ZSBvcDEgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2Rl
ZE9wMSk7CkBAIC0yNjAxLDcgKzI2MDMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvblZhCiAKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmFs
dWVBZGROb09wdGltaXplKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9w
MSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMiwgSklUQWRkSUMqKQogewotICAgIFZNKiB2bSA9
ICZleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgCiAgICAgSlNWYWx1ZSBvcDEgPSBKU1Zh
bHVlOjpkZWNvZGUoZW5jb2RlZE9wMSk7CkBAIC0yNjM4LDcgKzI2NDAsNyBAQCBBTFdBWVNfSU5M
SU5FIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBwcm9mCiAKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uVmFsdWVNdWwoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKQogewotICAgIFZNKiB2bSA9ICZl
eGVjLT52bSgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAKICAgICByZXR1cm4gdW5wcm9maWxlZE11bChleGVj
LCBlbmNvZGVkT3AxLCBlbmNvZGVkT3AyKTsKQEAgLTI2NDYsNyArMjY0OCw3IEBAIEVuY29kZWRK
U1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmEKIAogRW5jb2RlZEpTVmFsdWUgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25WYWx1ZU11bE5vT3B0aW1pemUoRXhlY1N0YXRlKiBleGVjLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyLCBKSVRNdWxJ
QyopCiB7Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKIAogICAgIHJl
dHVybiB1bnByb2ZpbGVkTXVsKGV4ZWMsIGVuY29kZWRPcDEsIGVuY29kZWRPcDIpOwpAQCAtMjY1
NCw3ICsyNjU2LDcgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25WYQog
CiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZhbHVlTXVsT3B0aW1pemUo
RXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkT3AyLCBKSVRNdWxJQyogbXVsSUMpCiB7Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZt
KCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIg
dHJhY2VyKHZtLCBleGVjKTsKIAogICAgIGF1dG8gbm9uT3B0aW1pemVWYXJpYW50ID0gb3BlcmF0
aW9uVmFsdWVNdWxOb09wdGltaXplOwpAQCAtMjY3MSw3ICsyNjczLDcgQEAgRW5jb2RlZEpTVmFs
dWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25WYQogCiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvblZhbHVlTXVsUHJvZmlsZWQoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyLCBBcml0aFByb2ZpbGUq
IGFyaXRoUHJvZmlsZSkKIHsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0g
PSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMp
OwogCiAgICAgQVNTRVJUKGFyaXRoUHJvZmlsZSk7CkBAIC0yNjgwLDcgKzI2ODIsNyBAQCBFbmNv
ZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZhCiAKIEVuY29kZWRKU1ZhbHVlIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uVmFsdWVNdWxQcm9maWxlZE9wdGltaXplKEV4ZWNTdGF0ZSog
ZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9w
MiwgSklUTXVsSUMqIG11bElDKQogewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwg
ZXhlYyk7CiAKICAgICBBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG11bElDLT5hcml0aFBy
b2ZpbGUoKTsKQEAgLTI2OTgsNyArMjcwMCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uVmEKIAogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25W
YWx1ZU11bFByb2ZpbGVkTm9PcHRpbWl6ZShFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIsIEpJVE11bElDKiBtdWxJQykK
IHsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwog
ICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogCiAgICAgQXJpdGhQ
cm9maWxlKiBhcml0aFByb2ZpbGUgPSBtdWxJQy0+YXJpdGhQcm9maWxlKCk7CkBAIC0yNzEwLDcg
KzI3MTIsNyBAQCBBTFdBWVNfSU5MSU5FIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSB1bnByCiB7CiAg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwor
ICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIAogICAgIEpT
VmFsdWUgb3BlcmFuZCA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3BlcmFuZCk7CiAgICAgCkBA
IC0yNzI5LDcgKzI3MzEsNyBAQCBBTFdBWVNfSU5MSU5FIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBw
cm9mCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0s
IGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogCiAg
ICAgSlNWYWx1ZSBvcGVyYW5kID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcGVyYW5kKTsKICAg
ICBhcml0aFByb2ZpbGUub2JzZXJ2ZUxIUyhvcGVyYW5kKTsKQEAgLTI3NjYsNyArMjc2OCw3IEBA
IEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXIKIHsKICAgICBWTSYgdm0g
PSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
LSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZl
Q2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgCiAgICAgSlNWYWx1ZSBvcGVy
YW5kID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcGVyYW5kKTsKIApAQCAtMjc5OSw3ICsyODAx
LDcgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25BcgogewogICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKIAogICAgIEpTVmFsdWUgb3Bl
cmFuZCA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3BlcmFuZCk7CiAKQEAgLTI4NDgsNyArMjg1
MCw3IEBAIEFMV0FZU19JTkxJTkUgc3RhdGljIEVuY29kZWRKU1ZhbHVlIHByb2YKIAogRW5jb2Rl
ZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25WYWx1ZVN1YihFeGVjU3RhdGUqIGV4ZWMs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpCiB7
Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICByZXR1cm4gdW5w
cm9maWxlZFN1YihleGVjLCBlbmNvZGVkT3AxLCBlbmNvZGVkT3AyKTsKIH0KQEAgLTI4NTcsMTUg
KzI4NTksMTUgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25WYQogewog
ICAgIEFTU0VSVChhcml0aFByb2ZpbGUpOwogCi0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Cisg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KHZtLCBleGVjKTsKIAotICAgIHJldHVybiBwcm9maWxlZFN1Yigqdm0sIGV4ZWMsIGVuY29kZWRP
cDEsIGVuY29kZWRPcDIsICphcml0aFByb2ZpbGUpOworICAgIHJldHVybiBwcm9maWxlZFN1Yih2
bSwgZXhlYywgZW5jb2RlZE9wMSwgZW5jb2RlZE9wMiwgKmFyaXRoUHJvZmlsZSk7CiB9CiAKIEVu
Y29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmFsdWVTdWJPcHRpbWl6ZShFeGVj
U3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRPcDIsIEpJVFN1YklDKiBzdWJJQykKIHsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsK
KyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIodm0sIGV4ZWMpOwogCiAgICAgYXV0byBub25PcHRpbWl6ZVZhcmlhbnQgPSBvcGVyYXRpb25W
YWx1ZVN1Yk5vT3B0aW1pemU7CkBAIC0yODgyLDcgKzI4ODQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvblZhCiAKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uVmFsdWVTdWJOb09wdGltaXplKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMiwgSklUU3ViSUMqKQogewot
ICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAKICAgICByZXR1cm4gdW5w
cm9maWxlZFN1YihleGVjLCBlbmNvZGVkT3AxLCBlbmNvZGVkT3AyKTsKQEAgLTI4OTAsNyArMjg5
Miw3IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmEKIAogRW5jb2Rl
ZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25WYWx1ZVN1YlByb2ZpbGVkT3B0aW1pemUo
RXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkT3AyLCBKSVRTdWJJQyogc3ViSUMpCiB7Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZt
KCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIg
dHJhY2VyKHZtLCBleGVjKTsKIAogICAgIEFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gc3Vi
SUMtPmFyaXRoUHJvZmlsZSgpOwpAQCAtMjkwMywzMCArMjkwNSwzMCBAQCBFbmNvZGVkSlNWYWx1
ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZhCiAgICAgZXhlYy0+Y29kZUJsb2NrKCktPmR1bXBN
YXRoSUNTdGF0cygpOwogI2VuZGlmCiAKLSAgICByZXR1cm4gcHJvZmlsZWRTdWIoKnZtLCBleGVj
LCBlbmNvZGVkT3AxLCBlbmNvZGVkT3AyLCAqYXJpdGhQcm9maWxlLCBmYWxzZSk7CisgICAgcmV0
dXJuIHByb2ZpbGVkU3ViKHZtLCBleGVjLCBlbmNvZGVkT3AxLCBlbmNvZGVkT3AyLCAqYXJpdGhQ
cm9maWxlLCBmYWxzZSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uVmFsdWVTdWJQcm9maWxlZE5vT3B0aW1pemUoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyLCBKSVRTdWJJQyogc3Vi
SUMpCiB7Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKIAogICAgIEFy
aXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gc3ViSUMtPmFyaXRoUHJvZmlsZSgpOwogICAgIEFT
U0VSVChhcml0aFByb2ZpbGUpOwotICAgIHJldHVybiBwcm9maWxlZFN1Yigqdm0sIGV4ZWMsIGVu
Y29kZWRPcDEsIGVuY29kZWRPcDIsICphcml0aFByb2ZpbGUpOworICAgIHJldHVybiBwcm9maWxl
ZFN1Yih2bSwgZXhlYywgZW5jb2RlZE9wMSwgZW5jb2RlZE9wMiwgKmFyaXRoUHJvZmlsZSk7CiB9
CiAKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25Qcm9jZXNzVHlwZVByb2ZpbGVyTG9nKEV4
ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFj
ZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICB2bS50eXBlUHJvZmlsZXJMb2coKS0+cHJvY2Vzc0xv
Z0VudHJpZXModm0sICJMb2cgRnVsbCwgY2FsbGVkIGZyb20gaW5zaWRlIGJhc2VsaW5lIEpJVCJf
cyk7CiB9CiAKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25Qcm9jZXNzU2hhZG93Q2hpY2tl
bkxvZyhFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgUkVMRUFTRV9BU1NFUlQodm0uc2hhZG93
Q2hpY2tlbigpKTsKICAgICB2bS5zaGFkb3dDaGlja2VuKCktPnVwZGF0ZSh2bSwgZXhlYyk7CiB9
CkBAIC0yOTM0LDEyICsyOTM2LDEyIEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25Qcm9j
ZXNzU2hhZG8KIGludDMyX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25DaGVja0lmRXhjZXB0aW9u
SXNVbmNhdGNoYWJsZUFuZE5vdGlmeVByb2ZpbGVyKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBW
TSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZt
LCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgUkVMRUFTRV9BU1NF
UlQoISFzY29wZS5leGNlcHRpb24oKSk7CiAKICAgICBpZiAoaXNUZXJtaW5hdGVkRXhlY3V0aW9u
RXhjZXB0aW9uKHZtLCBzY29wZS5leGNlcHRpb24oKSkpIHsKLSAgICAgICAgZ2VuZXJpY1Vud2lu
ZCgmdm0sIGV4ZWMpOworICAgICAgICBnZW5lcmljVW53aW5kKHZtLCBleGVjKTsKICAgICAgICAg
cmV0dXJuIDE7CiAgICAgfQogICAgIHJldHVybiAwOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMjEyLDcgKzEyMTIsNyBAQCB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcih1
bnNpZ25lZCBvd25lCiAgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlIHx8
IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZSkKICAgICAgICAgb3duZXJOb3RDZWxsID0gYnJhbmNo
SWZOb3RDZWxsKHJlZ1QwKTsKIAotICAgIEp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9
IGJhcnJpZXJCcmFuY2goKnZtKCksIHJlZ1QwLCByZWdUMSk7CisgICAgSnVtcCBvd25lcklzUmVt
ZW1iZXJlZE9ySW5FZGVuID0gYmFycmllckJyYW5jaCh2bSgpLCByZWdUMCwgcmVnVDEpOwogICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uV3JpdGVCYXJyaWVyU2xvd1BhdGgsIHJlZ1QwKTsKICAg
ICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuLmxpbmsodGhpcyk7CiAKQEAgLTEyNzgsNyArMTI3
OCw3IEBAIHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIKIAogdm9pZCBK
SVQ6OmVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lcikKIHsKLSAgICBKdW1wIG93bmVySXNS
ZW1lbWJlcmVkT3JJbkVkZW4gPSBiYXJyaWVyQnJhbmNoKCp2bSgpLCBvd25lciwgcmVnVDApOwor
ICAgIEp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IGJhcnJpZXJCcmFuY2godm0oKSwg
b3duZXIsIHJlZ1QwKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbldyaXRlQmFycmllclNs
b3dQYXRoLCBvd25lcik7CiAgICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5saW5rKHRoaXMp
OwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRUaHVua3MuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUVGh1bmtzLmNwcAkocmV2aXNp
b24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRUaHVua3MuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0y
MDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
Mi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtNDUsNDMgKzQ1LDQzIEBAIEpJVFRodW5rczo6fkpJVFRodW5rcygp
CiB7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRUaHVua1B0clRhZz4gSklUVGh1bmtz
OjpjdGlOYXRpdmVDYWxsKFZNKiB2bSkKK01hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRUaHVua1B0
clRhZz4gSklUVGh1bmtzOjpjdGlOYXRpdmVDYWxsKFZNJiB2bSkKIHsKICAgICBBU1NFUlQoVk06
OmNhblVzZUpJVCgpKTsKICAgICByZXR1cm4gY3RpU3R1Yih2bSwgbmF0aXZlQ2FsbEdlbmVyYXRv
cikuY29kZSgpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+IEpJ
VFRodW5rczo6Y3RpTmF0aXZlQ29uc3RydWN0KFZNKiB2bSkKK01hY3JvQXNzZW1ibGVyQ29kZVB0
cjxKSVRUaHVua1B0clRhZz4gSklUVGh1bmtzOjpjdGlOYXRpdmVDb25zdHJ1Y3QoVk0mIHZtKQog
ewogICAgIEFTU0VSVChWTTo6Y2FuVXNlSklUKCkpOwogICAgIHJldHVybiBjdGlTdHViKHZtLCBu
YXRpdmVDb25zdHJ1Y3RHZW5lcmF0b3IpLmNvZGUoKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyPEpJVFRodW5rUHRyVGFnPiBKSVRUaHVua3M6OmN0aU5hdGl2ZVRhaWxDYWxsKFZNKiB2bSkK
K01hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRUaHVua1B0clRhZz4gSklUVGh1bmtzOjpjdGlOYXRp
dmVUYWlsQ2FsbChWTSYgdm0pCiB7CiAgICAgQVNTRVJUKFZNOjpjYW5Vc2VKSVQoKSk7CiAgICAg
cmV0dXJuIGN0aVN0dWIodm0sIG5hdGl2ZVRhaWxDYWxsR2VuZXJhdG9yKS5jb2RlKCk7CiB9CiAK
LU1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRUaHVua1B0clRhZz4gSklUVGh1bmtzOjpjdGlOYXRp
dmVUYWlsQ2FsbFdpdGhvdXRTYXZlZFRhZ3MoVk0qIHZtKQorTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
PEpJVFRodW5rUHRyVGFnPiBKSVRUaHVua3M6OmN0aU5hdGl2ZVRhaWxDYWxsV2l0aG91dFNhdmVk
VGFncyhWTSYgdm0pCiB7CiAgICAgQVNTRVJUKFZNOjpjYW5Vc2VKSVQoKSk7CiAgICAgcmV0dXJu
IGN0aVN0dWIodm0sIG5hdGl2ZVRhaWxDYWxsV2l0aG91dFNhdmVkVGFnc0dlbmVyYXRvcikuY29k
ZSgpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+IEpJVFRodW5r
czo6Y3RpSW50ZXJuYWxGdW5jdGlvbkNhbGwoVk0qIHZtKQorTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
PEpJVFRodW5rUHRyVGFnPiBKSVRUaHVua3M6OmN0aUludGVybmFsRnVuY3Rpb25DYWxsKFZNJiB2
bSkKIHsKICAgICBBU1NFUlQoVk06OmNhblVzZUpJVCgpKTsKICAgICByZXR1cm4gY3RpU3R1Yih2
bSwgaW50ZXJuYWxGdW5jdGlvbkNhbGxHZW5lcmF0b3IpLmNvZGUoKTsKIH0KIAotTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFnPiBKSVRUaHVua3M6OmN0aUludGVybmFsRnVuY3Rp
b25Db25zdHJ1Y3QoVk0qIHZtKQorTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFn
PiBKSVRUaHVua3M6OmN0aUludGVybmFsRnVuY3Rpb25Db25zdHJ1Y3QoVk0mIHZtKQogewogICAg
IEFTU0VSVChWTTo6Y2FuVXNlSklUKCkpOwogICAgIHJldHVybiBjdGlTdHViKHZtLCBpbnRlcm5h
bEZ1bmN0aW9uQ29uc3RydWN0R2VuZXJhdG9yKS5jb2RlKCk7CiB9CiAKLU1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUVGh1bmtzOjpjdGlTdHViKFZNKiB2bSwgVGh1bmtH
ZW5lcmF0b3IgZ2VuZXJhdG9yKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiBKSVRUaHVua3M6OmN0aVN0dWIoVk0mIHZtLCBUaHVua0dlbmVyYXRvciBnZW5lcmF0b3IpCiB7
CiAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9sb2NrKTsKICAgICBDVElTdHViTWFwOjpBZGRSZXN1
bHQgZW50cnkgPSBtX2N0aVN0dWJNYXAuYWRkKGdlbmVyYXRvciwgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPigpKTsKQEAgLTEwOCwxMiArMTA4LDEyIEBAIHZvaWQgSklUVGh1
bmtzOjpmaW5hbGl6ZShIYW5kbGU8VW5rbm93bj4KICAgICB3ZWFrUmVtb3ZlKCptX2hvc3RGdW5j
dGlvblN0dWJNYXAsIHN0ZDo6bWFrZV90dXBsZShuYXRpdmVFeGVjdXRhYmxlLT5mdW5jdGlvbigp
LCBuYXRpdmVFeGVjdXRhYmxlLT5jb25zdHJ1Y3RvcigpLCBuYXRpdmVFeGVjdXRhYmxlLT5uYW1l
KCkpLCBuYXRpdmVFeGVjdXRhYmxlKTsKIH0KIAotTmF0aXZlRXhlY3V0YWJsZSogSklUVGh1bmtz
Ojpob3N0RnVuY3Rpb25TdHViKFZNKiB2bSwgVGFnZ2VkTmF0aXZlRnVuY3Rpb24gZnVuY3Rpb24s
IFRhZ2dlZE5hdGl2ZUZ1bmN0aW9uIGNvbnN0cnVjdG9yLCBjb25zdCBTdHJpbmcmIG5hbWUpCitO
YXRpdmVFeGVjdXRhYmxlKiBKSVRUaHVua3M6Omhvc3RGdW5jdGlvblN0dWIoVk0mIHZtLCBUYWdn
ZWROYXRpdmVGdW5jdGlvbiBmdW5jdGlvbiwgVGFnZ2VkTmF0aXZlRnVuY3Rpb24gY29uc3RydWN0
b3IsIGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKICAgICByZXR1cm4gaG9zdEZ1bmN0aW9uU3R1Yih2
bSwgZnVuY3Rpb24sIGNvbnN0cnVjdG9yLCBudWxscHRyLCBOb0ludHJpbnNpYywgbnVsbHB0ciwg
bmFtZSk7CiB9CiAKLU5hdGl2ZUV4ZWN1dGFibGUqIEpJVFRodW5rczo6aG9zdEZ1bmN0aW9uU3R1
YihWTSogdm0sIFRhZ2dlZE5hdGl2ZUZ1bmN0aW9uIGZ1bmN0aW9uLCBUYWdnZWROYXRpdmVGdW5j
dGlvbiBjb25zdHJ1Y3RvciwgVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yLCBJbnRyaW5zaWMgaW50
cmluc2ljLCBjb25zdCBET01KSVQ6OlNpZ25hdHVyZSogc2lnbmF0dXJlLCBjb25zdCBTdHJpbmcm
IG5hbWUpCitOYXRpdmVFeGVjdXRhYmxlKiBKSVRUaHVua3M6Omhvc3RGdW5jdGlvblN0dWIoVk0m
IHZtLCBUYWdnZWROYXRpdmVGdW5jdGlvbiBmdW5jdGlvbiwgVGFnZ2VkTmF0aXZlRnVuY3Rpb24g
Y29uc3RydWN0b3IsIFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvciwgSW50cmluc2ljIGludHJpbnNp
YywgY29uc3QgRE9NSklUOjpTaWduYXR1cmUqIHNpZ25hdHVyZSwgY29uc3QgU3RyaW5nJiBuYW1l
KQogewogICAgIEFTU0VSVCghaXNDb21waWxhdGlvblRocmVhZCgpKTsgICAgCiAgICAgQVNTRVJU
KFZNOjpjYW5Vc2VKSVQoKSk7CkBAIC0xMzIsMTIgKzEzMiwxMiBAQCBOYXRpdmVFeGVjdXRhYmxl
KiBKSVRUaHVua3M6Omhvc3RGdW5jdGlvCiAgICAgCiAgICAgUmVmPEpJVENvZGU+IGZvckNvbnN0
cnVjdCA9IGFkb3B0UmVmKCpuZXcgTmF0aXZlSklUQ29kZShNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SlNFbnRyeVB0clRhZz46OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihjdGlOYXRpdmVDb25zdHJ1
Y3Qodm0pLnJldGFnZ2VkPEpTRW50cnlQdHJUYWc+KCkpLCBKSVRUeXBlOjpIb3N0Q2FsbFRodW5r
LCBOb0ludHJpbnNpYykpOwogICAgIAotICAgIE5hdGl2ZUV4ZWN1dGFibGUqIG5hdGl2ZUV4ZWN1
dGFibGUgPSBOYXRpdmVFeGVjdXRhYmxlOjpjcmVhdGUoKnZtLCBmb3JDYWxsLnJlbGVhc2VOb25O
dWxsKCksIGZ1bmN0aW9uLCBXVEZNb3ZlKGZvckNvbnN0cnVjdCksIGNvbnN0cnVjdG9yLCBuYW1l
KTsKKyAgICBOYXRpdmVFeGVjdXRhYmxlKiBuYXRpdmVFeGVjdXRhYmxlID0gTmF0aXZlRXhlY3V0
YWJsZTo6Y3JlYXRlKHZtLCBmb3JDYWxsLnJlbGVhc2VOb25OdWxsKCksIGZ1bmN0aW9uLCBXVEZN
b3ZlKGZvckNvbnN0cnVjdCksIGNvbnN0cnVjdG9yLCBuYW1lKTsKICAgICB3ZWFrQWRkKCptX2hv
c3RGdW5jdGlvblN0dWJNYXAsIHN0ZDo6bWFrZV90dXBsZShmdW5jdGlvbiwgY29uc3RydWN0b3Is
IG5hbWUpLCBXZWFrPE5hdGl2ZUV4ZWN1dGFibGU+KG5hdGl2ZUV4ZWN1dGFibGUsIHRoaXMpKTsK
ICAgICByZXR1cm4gbmF0aXZlRXhlY3V0YWJsZTsKIH0KIAotTmF0aXZlRXhlY3V0YWJsZSogSklU
VGh1bmtzOjpob3N0RnVuY3Rpb25TdHViKFZNKiB2bSwgVGFnZ2VkTmF0aXZlRnVuY3Rpb24gZnVu
Y3Rpb24sIFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvciwgSW50cmluc2ljIGludHJpbnNpYywgY29u
c3QgU3RyaW5nJiBuYW1lKQorTmF0aXZlRXhlY3V0YWJsZSogSklUVGh1bmtzOjpob3N0RnVuY3Rp
b25TdHViKFZNJiB2bSwgVGFnZ2VkTmF0aXZlRnVuY3Rpb24gZnVuY3Rpb24sIFRodW5rR2VuZXJh
dG9yIGdlbmVyYXRvciwgSW50cmluc2ljIGludHJpbnNpYywgY29uc3QgU3RyaW5nJiBuYW1lKQog
ewogICAgIHJldHVybiBob3N0RnVuY3Rpb25TdHViKHZtLCBmdW5jdGlvbiwgY2FsbEhvc3RGdW5j
dGlvbkFzQ29uc3RydWN0b3IsIGdlbmVyYXRvciwgaW50cmluc2ljLCBudWxscHRyLCBuYW1lKTsK
IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUVGh1bmtzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRUaHVua3MuaAkocmV2aXNpb24gMjQ5
MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRUaHVua3MuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTUxLDE5ICs1MSwxOSBAQCBwdWJsaWM6CiAgICAgSklUVGh1bmtzKCk7CiAgICAg
dmlydHVhbCB+SklUVGh1bmtzKCk7CiAKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUVGh1
bmtQdHJUYWc+IGN0aU5hdGl2ZUNhbGwoVk0qKTsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8
SklUVGh1bmtQdHJUYWc+IGN0aU5hdGl2ZUNvbnN0cnVjdChWTSopOwotICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVB0cjxKSVRUaHVua1B0clRhZz4gY3RpTmF0aXZlVGFpbENhbGwoVk0qKTsKLSAgICBN
YWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+IGN0aU5hdGl2ZVRhaWxDYWxsV2l0
aG91dFNhdmVkVGFncyhWTSopOwotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRUaHVua1B0
clRhZz4gY3RpSW50ZXJuYWxGdW5jdGlvbkNhbGwoVk0qKTsKLSAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHI8SklUVGh1bmtQdHJUYWc+IGN0aUludGVybmFsRnVuY3Rpb25Db25zdHJ1Y3QoVk0qKTsK
KyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+IGN0aU5hdGl2ZUNhbGwo
Vk0mKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+IGN0aU5hdGl2
ZUNvbnN0cnVjdChWTSYpOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRUaHVua1B0clRh
Zz4gY3RpTmF0aXZlVGFpbENhbGwoVk0mKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklU
VGh1bmtQdHJUYWc+IGN0aU5hdGl2ZVRhaWxDYWxsV2l0aG91dFNhdmVkVGFncyhWTSYpOworICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRUaHVua1B0clRhZz4gY3RpSW50ZXJuYWxGdW5jdGlv
bkNhbGwoVk0mKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+IGN0
aUludGVybmFsRnVuY3Rpb25Db25zdHJ1Y3QoVk0mKTsKIAotICAgIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gY3RpU3R1YihWTSosIFRodW5rR2VuZXJhdG9yKTsKKyAgICBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGN0aVN0dWIoVk0mLCBUaHVua0dl
bmVyYXRvcik7CiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBleGlz
dGluZ0NUSVN0dWIoVGh1bmtHZW5lcmF0b3IpOwogCi0gICAgTmF0aXZlRXhlY3V0YWJsZSogaG9z
dEZ1bmN0aW9uU3R1YihWTSosIFRhZ2dlZE5hdGl2ZUZ1bmN0aW9uLCBUYWdnZWROYXRpdmVGdW5j
dGlvbiBjb25zdHJ1Y3RvciwgY29uc3QgU3RyaW5nJiBuYW1lKTsKLSAgICBOYXRpdmVFeGVjdXRh
YmxlKiBob3N0RnVuY3Rpb25TdHViKFZNKiwgVGFnZ2VkTmF0aXZlRnVuY3Rpb24sIFRhZ2dlZE5h
dGl2ZUZ1bmN0aW9uIGNvbnN0cnVjdG9yLCBUaHVua0dlbmVyYXRvciwgSW50cmluc2ljLCBjb25z
dCBET01KSVQ6OlNpZ25hdHVyZSosIGNvbnN0IFN0cmluZyYgbmFtZSk7Ci0gICAgTmF0aXZlRXhl
Y3V0YWJsZSogaG9zdEZ1bmN0aW9uU3R1YihWTSosIFRhZ2dlZE5hdGl2ZUZ1bmN0aW9uLCBUaHVu
a0dlbmVyYXRvciwgSW50cmluc2ljLCBjb25zdCBTdHJpbmcmIG5hbWUpOworICAgIE5hdGl2ZUV4
ZWN1dGFibGUqIGhvc3RGdW5jdGlvblN0dWIoVk0mLCBUYWdnZWROYXRpdmVGdW5jdGlvbiwgVGFn
Z2VkTmF0aXZlRnVuY3Rpb24gY29uc3RydWN0b3IsIGNvbnN0IFN0cmluZyYgbmFtZSk7CisgICAg
TmF0aXZlRXhlY3V0YWJsZSogaG9zdEZ1bmN0aW9uU3R1YihWTSYsIFRhZ2dlZE5hdGl2ZUZ1bmN0
aW9uLCBUYWdnZWROYXRpdmVGdW5jdGlvbiBjb25zdHJ1Y3RvciwgVGh1bmtHZW5lcmF0b3IsIElu
dHJpbnNpYywgY29uc3QgRE9NSklUOjpTaWduYXR1cmUqLCBjb25zdCBTdHJpbmcmIG5hbWUpOwor
ICAgIE5hdGl2ZUV4ZWN1dGFibGUqIGhvc3RGdW5jdGlvblN0dWIoVk0mLCBUYWdnZWROYXRpdmVG
dW5jdGlvbiwgVGh1bmtHZW5lcmF0b3IsIEludHJpbnNpYywgY29uc3QgU3RyaW5nJiBuYW1lKTsK
IAogICAgIHZvaWQgY2xlYXJIb3N0RnVuY3Rpb25TdHVicygpOwogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFdvcmtsaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFdvcmtsaXN0LmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRXb3JrbGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzUs
NyArNzUsNyBAQCBwdWJsaWM6CiAgICAgfQogICAgIAogICAgIENvZGVCbG9jayogY29kZUJsb2Nr
KCkgeyByZXR1cm4gbV9jb2RlQmxvY2s7IH0KLSAgICBWTSogdm0oKSB7IHJldHVybiBtX2NvZGVC
bG9jay0+dm0oKTsgfQorICAgIFZNJiB2bSgpIHsgcmV0dXJuIG1fY29kZUJsb2NrLT52bSgpOyB9
CiAgICAgCiAgICAgYm9vbCBpc0ZpbmlzaGVkQ29tcGlsaW5nKCkKICAgICB7CkBAIC0xNzksNyAr
MTc5LDcgQEAgYm9vbCBKSVRXb3JrbGlzdDo6Y29tcGxldGVBbGxGb3JWTShWTSYgdgogICAgICAg
ICAgICAgICAgIGJvb2wgZGlkRmluZFVuZmluaXNoZWRQbGFuID0gZmFsc2U7CiAgICAgICAgICAg
ICAgICAgbV9wbGFucy5yZW1vdmVBbGxNYXRjaGluZygKICAgICAgICAgICAgICAgICAgICAgWyZd
IChSZWZQdHI8UGxhbj4mIHBsYW4pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwbGFu
LT52bSgpICE9ICZ2bSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgmcGxhbi0+dm0oKSAh
PSAmdm0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCFwbGFuLT5pc0ZpbmlzaGVkQ29tcGlsaW5nKCkpIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBkaWRGaW5kVW5maW5pc2hlZFBsYW4gPSB0cnVlOwpA
QCAtMjE2LDcgKzIxNiw3IEBAIHZvaWQgSklUV29ya2xpc3Q6OnBvbGwoVk0mIHZtKQogICAgICAg
ICBMb2NrSG9sZGVyIGxvY2tlcigqbV9sb2NrKTsKICAgICAgICAgbV9wbGFucy5yZW1vdmVBbGxN
YXRjaGluZygKICAgICAgICAgICAgIFsmXSAoUmVmUHRyPFBsYW4+JiBwbGFuKSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKHBsYW4tPnZtKCkgIT0gJnZtKQorICAgICAgICAgICAgICAgIGlmICgmcGxh
bi0+dm0oKSAhPSAmdm0pCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgICAgICAgICBpZiAoIXBsYW4tPmlzRmluaXNoZWRDb21waWxpbmcoKSkKICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjMwLDcgKzIzMCw3IEBAIHZvaWQgSklUV29ya2xp
c3Q6OnBvbGwoVk0mIHZtKQogCiB2b2lkIEpJVFdvcmtsaXN0Ojpjb21waWxlTGF0ZXIoQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIHVuc2lnbmVkIGxvb3BPU1JFbnRyeUJ5dGVjb2RlT2Zmc2V0KQogewot
ICAgIERlZmVyR0MgZGVmZXJHQyhjb2RlQmxvY2stPnZtKCktPmhlYXApOworICAgIERlZmVyR0Mg
ZGVmZXJHQyhjb2RlQmxvY2stPnZtKCkuaGVhcCk7CiAgICAgUkVMRUFTRV9BU1NFUlQoY29kZUJs
b2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuayk7CiAgICAgCiAgICAg
aWYgKGNvZGVCbG9jay0+bV9kaWRGYWlsSklUQ29tcGlsYXRpb24pIHsKQEAgLTI4Miw4ICsyODIs
OCBAQCB2b2lkIEpJVFdvcmtsaXN0Ojpjb21waWxlTGF0ZXIoQ29kZUJsb2NrCiAKIHZvaWQgSklU
V29ya2xpc3Q6OmNvbXBpbGVOb3coQ29kZUJsb2NrKiBjb2RlQmxvY2ssIHVuc2lnbmVkIGxvb3BP
U1JFbnRyeUJ5dGVjb2RlT2Zmc2V0KQogewotICAgIFZNKiB2bSA9IGNvZGVCbG9jay0+dm0oKTsK
LSAgICBEZWZlckdDIGRlZmVyR0Modm0tPmhlYXApOworICAgIFZNJiB2bSA9IGNvZGVCbG9jay0+
dm0oKTsKKyAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CiAgICAgaWYgKGNvZGVCbG9jay0+
aml0VHlwZSgpICE9IEpJVFR5cGU6OkludGVycHJldGVyVGh1bmspCiAgICAgICAgIHJldHVybjsK
ICAgICAKQEAgLTI5Niw3ICsyOTYsNyBAQCB2b2lkIEpJVFdvcmtsaXN0Ojpjb21waWxlTm93KENv
ZGVCbG9jayogCiAgICAgaWYgKGlzUGxhbm5lZCkgewogICAgICAgICBSRUxFQVNFX0FTU0VSVChP
cHRpb25zOjp1c2VDb25jdXJyZW50SklUKCkpOwogICAgICAgICAvLyBUaGlzIGlzIGV4cGVuc2l2
ZSwgYnV0IHByb2JhYmx5IGdvb2QgZW5vdWdoLgotICAgICAgICBjb21wbGV0ZUFsbEZvclZNKCp2
bSk7CisgICAgICAgIGNvbXBsZXRlQWxsRm9yVk0odm0pOwogICAgIH0KICAgICAKICAgICAvLyBO
b3cgaXQgbWlnaHQgYmUgY29tcGlsZWQhCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1JlcGF0Y2guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVw
YXRjaC5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
UmVwYXRjaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc3LDcgKzc3LDcgQEAgc3RhdGljIEZ1bmN0
aW9uUHRyPENGdW5jdGlvblB0clRhZz4gcmVhZAogI2lmIEVOQUJMRShGVExfSklUKQogICAgIGlm
IChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpGVExKSVQpIHsKICAgICAgICAgTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFnPiB0aHVuayA9IE1hY3JvQXNzZW1ibGVy
Q29kZVB0cjxPcGVyYXRpb25QdHJUYWc+OjpjcmVhdGVGcm9tRXhlY3V0YWJsZUFkZHJlc3ModGFy
Z2V0LmV4ZWN1dGFibGVBZGRyZXNzKCkpLnJldGFnZ2VkPEpJVFRodW5rUHRyVGFnPigpOwotICAg
ICAgICByZXR1cm4gY29kZUJsb2NrLT52bSgpLT5mdGxUaHVua3MtPmtleUZvclNsb3dQYXRoQ2Fs
bFRodW5rKHRodW5rKS5jYWxsVGFyZ2V0KCkucmV0YWdnZWQ8Q0Z1bmN0aW9uUHRyVGFnPigpOwor
ICAgICAgICByZXR1cm4gY29kZUJsb2NrLT52bSgpLmZ0bFRodW5rcy0+a2V5Rm9yU2xvd1BhdGhD
YWxsVGh1bmsodGh1bmspLmNhbGxUYXJnZXQoKS5yZXRhZ2dlZDxDRnVuY3Rpb25QdHJUYWc+KCk7
CiAgICAgfQogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oY29kZUJsb2NrKTsKQEAgLTg5LDcgKzg5
LDcgQEAgdm9pZCBmdGxUaHVua0F3YXJlUmVwYXRjaENhbGwoQ29kZUJsb2NrKgogewogI2lmIEVO
QUJMRShGVExfSklUKQogICAgIGlmIChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpG
VExKSVQpIHsKLSAgICAgICAgVk0mIHZtID0gKmNvZGVCbG9jay0+dm0oKTsKKyAgICAgICAgVk0m
IHZtID0gY29kZUJsb2NrLT52bSgpOwogICAgICAgICBGVEw6OlRodW5rcyYgdGh1bmtzID0gKnZt
LmZ0bFRodW5rczsKICAgICAgICAgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPiB0YXJnZXQg
PSBNYWNyb0Fzc2VtYmxlcjo6cmVhZENhbGxUYXJnZXQ8T3BlcmF0aW9uUHRyVGFnPihjYWxsKTsK
ICAgICAgICAgYXV0byBzbG93UGF0aFRodW5rID0gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFRo
dW5rUHRyVGFnPjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKHRhcmdldC5yZXRhZ2dlZEV4
ZWN1dGFibGVBZGRyZXNzPEpJVFRodW5rUHRyVGFnPigpKTsKQEAgLTc5OSwyMSArNzk5LDIxIEBA
IHZvaWQgcmVwYXRjaEluc3RhbmNlT2YoCiAgICAgICAgIGZ0bFRodW5rQXdhcmVSZXBhdGNoQ2Fs
bChleGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8uc2xvd1BhdGhDYWxsTG9jYXRpb24oKSwgb3Bl
cmF0aW9uSW5zdGFuY2VPZkdlbmVyaWMpOwogfQogCi1zdGF0aWMgdm9pZCBsaW5rU2xvd0ZvcihW
TSosIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
U3R1YlJvdXRpbmVQdHJUYWc+IGNvZGVSZWYpCitzdGF0aWMgdm9pZCBsaW5rU2xvd0ZvcihWTSYs
IENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1
YlJvdXRpbmVQdHJUYWc+IGNvZGVSZWYpCiB7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hO
ZWFyQ2FsbChjYWxsTGlua0luZm8uY2FsbFJldHVybkxvY2F0aW9uKCksIENvZGVMb2NhdGlvbkxh
YmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihjb2RlUmVmLmNvZGUoKSkpOwogfQogCi1zdGF0aWMg
dm9pZCBsaW5rU2xvd0ZvcihWTSogdm0sIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBUaHVu
a0dlbmVyYXRvciBnZW5lcmF0b3IpCitzdGF0aWMgdm9pZCBsaW5rU2xvd0ZvcihWTSYgdm0sIENh
bGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBUaHVua0dlbmVyYXRvciBnZW5lcmF0b3IpCiB7Ci0g
ICAgbGlua1Nsb3dGb3Iodm0sIGNhbGxMaW5rSW5mbywgdm0tPmdldENUSVN0dWIoZ2VuZXJhdG9y
KS5yZXRhZ2dlZDxKSVRTdHViUm91dGluZVB0clRhZz4oKSk7CisgICAgbGlua1Nsb3dGb3Iodm0s
IGNhbGxMaW5rSW5mbywgdm0uZ2V0Q1RJU3R1YihnZW5lcmF0b3IpLnJldGFnZ2VkPEpJVFN0dWJS
b3V0aW5lUHRyVGFnPigpKTsKIH0KIAotc3RhdGljIHZvaWQgbGlua1Nsb3dGb3IoVk0qIHZtLCBD
YWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykKK3N0YXRpYyB2b2lkIGxpbmtTbG93Rm9yKFZNJiB2
bSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8pCiB7CiAgICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiB2aXJ0dWFsVGh1bmsgPSB2aXJ0dWFsVGh1bmtGb3Io
dm0sIGNhbGxMaW5rSW5mbyk7CiAgICAgbGlua1Nsb3dGb3Iodm0sIGNhbGxMaW5rSW5mbywgdmly
dHVhbFRodW5rKTsKLSAgICBjYWxsTGlua0luZm8uc2V0U2xvd1N0dWIoY3JlYXRlSklUU3R1YlJv
dXRpbmUodmlydHVhbFRodW5rLCAqdm0sIG51bGxwdHIsIHRydWUpKTsKKyAgICBjYWxsTGlua0lu
Zm8uc2V0U2xvd1N0dWIoY3JlYXRlSklUU3R1YlJvdXRpbmUodmlydHVhbFRodW5rLCB2bSwgbnVs
bHB0ciwgdHJ1ZSkpOwogfQogCiBzdGF0aWMgSlNDZWxsKiB3ZWJBc3NlbWJseU93bmVyKEpTQ2Vs
bCogY2FsbGVlKQpAQCAtODU5LDExICs4NTksMTEgQEAgdm9pZCBsaW5rRm9yKAogICAgICAgICBj
YWxsZWVDb2RlQmxvY2stPmxpbmtJbmNvbWluZ0NhbGwoY2FsbGVyRnJhbWUsICZjYWxsTGlua0lu
Zm8pOwogCiAgICAgaWYgKGNhbGxMaW5rSW5mby5zcGVjaWFsaXphdGlvbktpbmQoKSA9PSBDb2Rl
Rm9yQ2FsbCAmJiBjYWxsTGlua0luZm8uYWxsb3dTdHVicygpKSB7Ci0gICAgICAgIGxpbmtTbG93
Rm9yKCZ2bSwgY2FsbExpbmtJbmZvLCBsaW5rUG9seW1vcnBoaWNDYWxsVGh1bmtHZW5lcmF0b3Ip
OworICAgICAgICBsaW5rU2xvd0Zvcih2bSwgY2FsbExpbmtJbmZvLCBsaW5rUG9seW1vcnBoaWND
YWxsVGh1bmtHZW5lcmF0b3IpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIGxp
bmtTbG93Rm9yKCZ2bSwgY2FsbExpbmtJbmZvKTsKKyAgICBsaW5rU2xvd0Zvcih2bSwgY2FsbExp
bmtJbmZvKTsKIH0KIAogdm9pZCBsaW5rRGlyZWN0Rm9yKApAQCAtODc0LDEwICs4NzQsMTAgQEAg
dm9pZCBsaW5rRGlyZWN0Rm9yKAogICAgIAogICAgIENvZGVCbG9jayogY2FsbGVyQ29kZUJsb2Nr
ID0gZXhlYy0+Y29kZUJsb2NrKCk7CiAKLSAgICBWTSogdm0gPSBjYWxsZXJDb2RlQmxvY2stPnZt
KCk7CisgICAgVk0mIHZtID0gY2FsbGVyQ29kZUJsb2NrLT52bSgpOwogICAgIAogICAgIEFTU0VS
VCghY2FsbExpbmtJbmZvLmlzTGlua2VkKCkpOwotICAgIGNhbGxMaW5rSW5mby5zZXRDb2RlQmxv
Y2soKnZtLCBjYWxsZXJDb2RlQmxvY2ssIGpzQ2FzdDxGdW5jdGlvbkNvZGVCbG9jayo+KGNhbGxl
ZUNvZGVCbG9jaykpOworICAgIGNhbGxMaW5rSW5mby5zZXRDb2RlQmxvY2sodm0sIGNhbGxlckNv
ZGVCbG9jaywganNDYXN0PEZ1bmN0aW9uQ29kZUJsb2NrKj4oY2FsbGVlQ29kZUJsb2NrKSk7CiAg
ICAgaWYgKHNob3VsZER1bXBEaXNhc3NlbWJseUZvcihjYWxsZXJDb2RlQmxvY2spKQogICAgICAg
ICBkYXRhTG9nKCJMaW5raW5nIGNhbGwgaW4gIiwgRnVsbENvZGVPcmlnaW4oY2FsbGVyQ29kZUJs
b2NrLCBjYWxsTGlua0luZm8uY29kZU9yaWdpbigpKSwgIiB0byAiLCBwb2ludGVyRHVtcChjYWxs
ZWVDb2RlQmxvY2spLCAiLCBlbnRyeXBvaW50IGF0ICIsIGNvZGVQdHIsICJcbiIpOwogCkBAIC04
OTMsMTIgKzg5MywxMiBAQCB2b2lkIGxpbmtTbG93Rm9yKAogICAgIEV4ZWNTdGF0ZSogZXhlYywg
Q2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8pCiB7CiAgICAgQ29kZUJsb2NrKiBjYWxsZXJDb2Rl
QmxvY2sgPSBleGVjLT5jYWxsZXJGcmFtZSgpLT5jb2RlQmxvY2soKTsKLSAgICBWTSogdm0gPSBj
YWxsZXJDb2RlQmxvY2stPnZtKCk7CisgICAgVk0mIHZtID0gY2FsbGVyQ29kZUJsb2NrLT52bSgp
OwogICAgIAogICAgIGxpbmtTbG93Rm9yKHZtLCBjYWxsTGlua0luZm8pOwogfQogCi1zdGF0aWMg
dm9pZCByZXZlcnRDYWxsKFZNKiB2bSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8sIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91dGluZVB0clRhZz4gY29kZVJlZikKK3N0YXRpYyB2
b2lkIHJldmVydENhbGwoVk0mIHZtLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiBjb2RlUmVmKQogewogICAgIGlm
IChjYWxsTGlua0luZm8uaXNEaXJlY3QoKSkgewogICAgICAgICBjYWxsTGlua0luZm8uY2xlYXJD
b2RlQmxvY2soKTsKQEAgLTkzMCw3ICs5MzAsNyBAQCB2b2lkIHVubGlua0ZvcihWTSYgdm0sIENh
bGxMaW5rSW5mbyYgY2FsCiAgICAgaWYgKE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpKQogICAg
ICAgICBkYXRhTG9nKCJVbmxpbmtpbmcgY2FsbCBhdCAiLCBjYWxsTGlua0luZm8uaG90UGF0aE90
aGVyKCksICJcbiIpOwogICAgIAotICAgIHJldmVydENhbGwoJnZtLCBjYWxsTGlua0luZm8sIHZt
LmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikucmV0YWdnZWQ8SklUU3R1YlJvdXRp
bmVQdHJUYWc+KCkpOworICAgIHJldmVydENhbGwodm0sIGNhbGxMaW5rSW5mbywgdm0uZ2V0Q1RJ
U3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5yZXRhZ2dlZDxKSVRTdHViUm91dGluZVB0clRh
Zz4oKSk7CiB9CiAKIHN0YXRpYyB2b2lkIGxpbmtWaXJ0dWFsRm9yKEV4ZWNTdGF0ZSogZXhlYywg
Q2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8pCkBAIC05NDIsOCArOTQyLDggQEAgc3RhdGljIHZv
aWQgbGlua1ZpcnR1YWxGb3IoRXhlY1N0YXRlKiBleAogICAgIGlmIChzaG91bGREdW1wRGlzYXNz
ZW1ibHlGb3IoY2FsbGVyQ29kZUJsb2NrKSkKICAgICAgICAgZGF0YUxvZygiTGlua2luZyB2aXJ0
dWFsIGNhbGwgYXQgIiwgRnVsbENvZGVPcmlnaW4oY2FsbGVyQ29kZUJsb2NrLCBjYWxsZXJGcmFt
ZS0+Y29kZU9yaWdpbigpKSwgIlxuIik7CiAKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
U3R1YlJvdXRpbmVQdHJUYWc+IHZpcnR1YWxUaHVuayA9IHZpcnR1YWxUaHVua0Zvcigmdm0sIGNh
bGxMaW5rSW5mbyk7Ci0gICAgcmV2ZXJ0Q2FsbCgmdm0sIGNhbGxMaW5rSW5mbywgdmlydHVhbFRo
dW5rKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHZp
cnR1YWxUaHVuayA9IHZpcnR1YWxUaHVua0Zvcih2bSwgY2FsbExpbmtJbmZvKTsKKyAgICByZXZl
cnRDYWxsKHZtLCBjYWxsTGlua0luZm8sIHZpcnR1YWxUaHVuayk7CiAgICAgY2FsbExpbmtJbmZv
LnNldFNsb3dTdHViKGNyZWF0ZUpJVFN0dWJSb3V0aW5lKHZpcnR1YWxUaHVuaywgdm0sIG51bGxw
dHIsIHRydWUpKTsKICAgICBjYWxsTGlua0luZm8uc2V0Q2xlYXJlZEJ5VmlydHVhbCgpOwogfQpA
QCAtMTI0NCw3ICsxMjQ0LDcgQEAgdm9pZCBsaW5rUG9seW1vcnBoaWNDYWxsKAogICAgIC8vIFRo
ZSBvcmlnaW5hbCBzbG93IHBhdGggaXMgdW5yZWFjaGFibGUgb24gNjQtYml0cywgYnV0IHN0aWxs
CiAgICAgLy8gcmVhY2hhYmxlIG9uIDMyLWJpdHMgc2luY2UgYSBub24tY2VsbCBjYWxsZWUgd2ls
bCBhbHdheXMKICAgICAvLyB0cmlnZ2VyIHRoZSBzbG93IHBhdGgKLSAgICBsaW5rU2xvd0Zvcigm
dm0sIGNhbGxMaW5rSW5mbyk7CisgICAgbGlua1Nsb3dGb3Iodm0sIGNhbGxMaW5rSW5mbyk7CiAg
ICAgCiAgICAgLy8gSWYgdGhlcmUgaGFkIGJlZW4gYSBwcmV2aW91cyBzdHViIHJvdXRpbmUsIHRo
YXQgb25lIHdpbGwgZGllIGFzIHNvb24gYXMgdGhlIEdDIHJ1bnMgYW5kIHNlZXMKICAgICAvLyB0
aGF0IGl0J3Mgbm8gbG9uZ2VyIG9uIHN0YWNrLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9TcGVjaWFsaXplZFRodW5rSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9TcGVjaWFsaXplZFRodW5rSklULmgJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU3BlY2lhbGl6ZWRUaHVua0pJVC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zNyw4ICszNyw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIFNwZWNpYWxp
emVkVGh1bmtKSVQgOiBwdWJsaWMgSlNJbnRlcmZhY2VKSVQgewogICAgIHB1YmxpYzoKICAgICAg
ICAgc3RhdGljIGNvbnN0IGludCBUaGlzQXJndW1lbnQgPSAtMTsKLSAgICAgICAgU3BlY2lhbGl6
ZWRUaHVua0pJVChWTSogdm0sIGludCBleHBlY3RlZEFyZ0NvdW50KQotICAgICAgICAgICAgOiBK
U0ludGVyZmFjZUpJVCh2bSkKKyAgICAgICAgU3BlY2lhbGl6ZWRUaHVua0pJVChWTSYgdm0sIGlu
dCBleHBlY3RlZEFyZ0NvdW50KQorICAgICAgICAgICAgOiBKU0ludGVyZmFjZUpJVCgmdm0pCiAg
ICAgICAgIHsKICAgICAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKCk7CiAgICAgICAgICAg
ICBlbWl0U2F2ZVRoZW5NYXRlcmlhbGl6ZVRhZ1JlZ2lzdGVycygpOwpAQCAtNDYsOCArNDYsOCBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIG1fZmFpbHVyZXMuYXBwZW5kKGJyYW5jaDMy
KE5vdEVxdWFsLCBwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpLCBUcnVz
dGVkSW1tMzIoZXhwZWN0ZWRBcmdDb3VudCArIDEpKSk7CiAgICAgICAgIH0KICAgICAgICAgCi0g
ICAgICAgIGV4cGxpY2l0IFNwZWNpYWxpemVkVGh1bmtKSVQoVk0qIHZtKQotICAgICAgICAgICAg
OiBKU0ludGVyZmFjZUpJVCh2bSkKKyAgICAgICAgZXhwbGljaXQgU3BlY2lhbGl6ZWRUaHVua0pJ
VChWTSYgdm0pCisgICAgICAgICAgICA6IEpTSW50ZXJmYWNlSklUKCZ2bSkKICAgICAgICAgewog
ICAgICAgICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoKTsKICAgICAgICAgICAgIGVtaXRTYXZl
VGhlbk1hdGVyaWFsaXplVGFnUmVnaXN0ZXJzKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L1RodW5rR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9UaHVua0dlbmVyYXRvci5oCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMyw3
ICszMyw3IEBAIG5hbWVzcGFjZSBKU0MgewogY2xhc3MgVk07CiB0ZW1wbGF0ZTxQdHJUYWc+IGNs
YXNzIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjsKIAotdXNpbmcgVGh1bmtHZW5lcmF0b3IgPSBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+ICgqKShWTSopOwordXNpbmcgVGh1bmtH
ZW5lcmF0b3IgPSBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+ICgqKShWTSYp
OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9UaHVua0dlbmVyYXRvcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
MCw3ICs2MCw3IEBAIGlubGluZSB2b2lkIGVtaXRQb2ludGVyVmFsaWRhdGlvbihDQ2FsbEgKIAog
Ly8gV2Ugd2lsbCBqdW1wIGhlcmUgaWYgdGhlIEpJVCBjb2RlIHRyaWVzIHRvIG1ha2UgYSBjYWxs
LCBidXQgdGhlCiAvLyBsaW5raW5nIGhlbHBlciAoQysrIGNvZGUpIGRlY2lkZXMgdG8gdGhyb3cg
YW4gZXhjZXB0aW9uIGluc3RlYWQuCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcihWTSogdm0pCitNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHRocm93RXhjZXB0aW9uRnJvbUNhbGxT
bG93UGF0aEdlbmVyYXRvcihWTSYgdm0pCiB7CiAgICAgQ0NhbGxIZWxwZXJzIGppdDsKICAgICAK
QEAgLTY4LDIzICs2OCwyMyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
IHRoCiAgICAgLy8gZXZlbiB0aG91Z2ggd2Ugd29uJ3QgdXNlIGl0LgogICAgIGppdC5wcmVzZXJ2
ZVJldHVybkFkZHJlc3NBZnRlckNhbGwoR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BS
KTsKIAotICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZl
cih2bS0+dG9wRW50cnlGcmFtZSk7CisgICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFt
ZUNhbGxlZVNhdmVzQnVmZmVyKHZtLnRvcEVudHJ5RnJhbWUpOwogCi0gICAgaml0LnNldHVwQXJn
dW1lbnRzPGRlY2x0eXBlKGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIpPihDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW1QdHIodm0pLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CisgICAgaml0LnNl
dHVwQXJndW1lbnRzPGRlY2x0eXBlKGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIpPihDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW1QdHIoJnZtKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOwogICAg
IGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih0YWdDRnVuY3Rpb25QdHI8T3Bl
cmF0aW9uUHRyVGFnPihsb29rdXBFeGNlcHRpb25IYW5kbGVyKSksIEdQUkluZm86Om5vbkFyZ0dQ
UjApOwogICAgIGVtaXRQb2ludGVyVmFsaWRhdGlvbihqaXQsIEdQUkluZm86Om5vbkFyZ0dQUjAs
IE9wZXJhdGlvblB0clRhZyk7CiAgICAgaml0LmNhbGwoR1BSSW5mbzo6bm9uQXJnR1BSMCwgT3Bl
cmF0aW9uUHRyVGFnKTsKLSAgICBqaXQuanVtcFRvRXhjZXB0aW9uSGFuZGxlcigqdm0pOworICAg
IGppdC5qdW1wVG9FeGNlcHRpb25IYW5kbGVyKHZtKTsKIAogICAgIExpbmtCdWZmZXIgcGF0Y2hC
dWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQpOwogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBh
dGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgIlRocm93IGV4Y2VwdGlvbiBmcm9tIGNhbGwgc2xv
dyBwYXRoIHRodW5rIik7CiB9CiAKLXN0YXRpYyB2b2lkIHNsb3dQYXRoRm9yKENDYWxsSGVscGVy
cyYgaml0LCBWTSogdm0sIFNwcnRfSklUT3BlcmF0aW9uX0VDbGkgc2xvd1BhdGhGdW5jdGlvbikK
K3N0YXRpYyB2b2lkIHNsb3dQYXRoRm9yKENDYWxsSGVscGVycyYgaml0LCBWTSYgdm0sIFNwcnRf
SklUT3BlcmF0aW9uX0VDbGkgc2xvd1BhdGhGdW5jdGlvbikKIHsKLSAgICBqaXQuc2FuaXRpemVT
dGFja0lubGluZSgqdm0sIEdQUkluZm86Om5vbkFyZ0dQUjApOworICAgIGppdC5zYW5pdGl6ZVN0
YWNrSW5saW5lKHZtLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKICAgICBqaXQuZW1pdEZ1bmN0aW9u
UHJvbG9ndWUoKTsKLSAgICBqaXQuc3RvcmVQdHIoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIs
ICZ2bS0+dG9wQ2FsbEZyYW1lKTsKKyAgICBqaXQuc3RvcmVQdHIoR1BSSW5mbzo6Y2FsbEZyYW1l
UmVnaXN0ZXIsICZ2bS50b3BDYWxsRnJhbWUpOwogI2lmIE9TKFdJTkRPV1MpICYmIENQVShYODZf
NjQpCiAgICAgLy8gV2luZG93cyBYODZfNjQgbmVlZHMgc29tZSBzcGFjZSBwb2ludGVkIHRvIGJ5
IGFyZzAgZm9yIHJldHVybiB0eXBlcyBsYXJnZXIgdGhhbiA2NCBiaXRzLgogICAgIC8vIE90aGVy
IGFyZ3VtZW50IHZhbHVlcyBhcmUgc2hpZnQgYnkgMS4gVXNlIHNwYWNlIG9uIHRoZSBzdGFjayBm
b3Igb3VyIHR3byByZXR1cm4gdmFsdWVzLgpAQCAtMTMxLDcgKzEzMSw3IEBAIHN0YXRpYyB2b2lk
IHNsb3dQYXRoRm9yKENDYWxsSGVscGVycyYgamkKICAgICBqaXQuZmFySnVtcChHUFJJbmZvOjpy
ZXR1cm5WYWx1ZUdQUiwgSlNFbnRyeVB0clRhZyk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz4gbGlua0NhbGxUaHVua0dlbmVyYXRvcihWTSogdm0pCitNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IoVk0m
IHZtKQogewogICAgIC8vIFRoZSByZXR1cm4gYWRkcmVzcyBpcyBvbiB0aGUgc3RhY2sgb3IgaW4g
dGhlIGxpbmsgcmVnaXN0ZXIuIFdlIHdpbGwgaGVuY2UKICAgICAvLyBzYXZlIHRoZSByZXR1cm4g
YWRkcmVzcyB0byB0aGUgY2FsbCBmcmFtZSB3aGlsZSB3ZSBtYWtlIGEgQysrIGZ1bmN0aW9uIGNh
bGwKQEAgLTE0OCw3ICsxNDgsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IGxpCiAKIC8vIEZvciBjbG9zdXJlIG9wdGltaXphdGlvbnMsIHdlIG9ubHkgaW5jbHVkZSBj
YWxscywgc2luY2UgaWYgeW91J3JlIHVzaW5nIGNsb3N1cmVzIGZvcgogLy8gb2JqZWN0IGNvbnN0
cnVjdGlvbiB0aGVuIHlvdSdyZSBnb2luZyB0byBsb3NlIGJpZyB0aW1lIGFueXdheS4KLU1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gbGlua1BvbHltb3JwaGljQ2FsbFRodW5r
R2VuZXJhdG9yKFZNKiB2bSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
bGlua1BvbHltb3JwaGljQ2FsbFRodW5rR2VuZXJhdG9yKFZNJiB2bSkKIHsKICAgICBDQ2FsbEhl
bHBlcnMgaml0OwogCkBAIC0xNjIsNyArMTYyLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBsaQogLy8gcGF0aCB2aXJ0dWFsIGNhbGwgc28gdGhhdCB3ZSBjYW4gZW5h
YmxlIGZhc3QgdGFpbCBjYWxscyBmb3IgbWVnYW1vcnBoaWMKIC8vIHZpcnR1YWwgY2FsbHMgYnkg
dXNpbmcgdGhlIHNodWZmbGVyLgogLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE0ODgzMQotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFn
PiB2aXJ0dWFsVGh1bmtGb3IoVk0qIHZtLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykKK01h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91dGluZVB0clRhZz4gdmlydHVhbFRodW5rRm9y
KFZNJiB2bSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8pCiB7CiAgICAgLy8gVGhlIGNhbGxl
ZSBpcyBpbiByZWdUMCAoZm9yIEpTVkFMVUUzMl82NCwgdGhlIHRhZyBpcyBpbiByZWdUMSkuCiAg
ICAgLy8gVGhlIHJldHVybiBhZGRyZXNzIGlzIG9uIHRoZSBzdGFjaywgb3IgaW4gdGhlIGxpbmsg
cmVnaXN0ZXIuIFdlIHdpbGwgaGVuY2UKQEAgLTIyMSw3ICsyMjEsNyBAQCBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUCiAKICAgICBub3RKU0Z1bmN0aW9uLmxpbmsoJmpp
dCk7CiAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2hJZk5vdFR5cGUoR1BSSW5mbzo6cmVn
VDAsIEludGVybmFsRnVuY3Rpb25UeXBlKSk7Ci0gICAgdm9pZCogZXhlY3V0YWJsZUFkZHJlc3Mg
PSB2bS0+Z2V0Q1RJSW50ZXJuYWxGdW5jdGlvblRyYW1wb2xpbmVGb3IoY2FsbExpbmtJbmZvLnNw
ZWNpYWxpemF0aW9uS2luZCgpKS5leGVjdXRhYmxlQWRkcmVzcygpOworICAgIHZvaWQqIGV4ZWN1
dGFibGVBZGRyZXNzID0gdm0uZ2V0Q1RJSW50ZXJuYWxGdW5jdGlvblRyYW1wb2xpbmVGb3IoY2Fs
bExpbmtJbmZvLnNwZWNpYWxpemF0aW9uS2luZCgpKS5leGVjdXRhYmxlQWRkcmVzcygpOwogICAg
IGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihleGVjdXRhYmxlQWRkcmVzcyks
IEdQUkluZm86OnJlZ1Q0KTsKICAgICBqaXQuanVtcCgpLmxpbmtUbyhjYWxsQ29kZSwgJmppdCk7
CiAKQEAgLTI0MCwxNCArMjQwLDE0IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91
dGluZVB0clQKIGVudW0gVGh1bmtFbnRyeVR5cGUgeyBFbnRlclZpYUNhbGwsIEVudGVyVmlhSnVt
cFdpdGhTYXZlZFRhZ3MsIEVudGVyVmlhSnVtcFdpdGhvdXRTYXZlZFRhZ3MgfTsKIGVudW0gY2xh
c3MgVGh1bmtGdW5jdGlvblR5cGUgeyBKU0Z1bmN0aW9uLCBJbnRlcm5hbEZ1bmN0aW9uIH07CiAK
LXN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG5hdGl2ZUZvckdl
bmVyYXRvcihWTSogdm0sIFRodW5rRnVuY3Rpb25UeXBlIHRodW5rRnVuY3Rpb25UeXBlLCBDb2Rl
U3BlY2lhbGl6YXRpb25LaW5kIGtpbmQsIFRodW5rRW50cnlUeXBlIGVudHJ5VHlwZSA9IEVudGVy
VmlhQ2FsbCkKK3N0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG5h
dGl2ZUZvckdlbmVyYXRvcihWTSYgdm0sIFRodW5rRnVuY3Rpb25UeXBlIHRodW5rRnVuY3Rpb25U
eXBlLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQsIFRodW5rRW50cnlUeXBlIGVudHJ5VHlw
ZSA9IEVudGVyVmlhQ2FsbCkKIHsKICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgYWJsZSB0
byBsb2cgU2hhZG93Q2hpY2tlbiBwcm9sb2d1ZSBwYWNrZXRzLgogICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTU2ODkKICAgICAKICAgICBpbnQgZXhlY3V0
YWJsZU9mZnNldFRvRnVuY3Rpb24gPSBOYXRpdmVFeGVjdXRhYmxlOjpvZmZzZXRPZk5hdGl2ZUZ1
bmN0aW9uRm9yKGtpbmQpOwogICAgIAotICAgIEpTSW50ZXJmYWNlSklUIGppdCh2bSk7CisgICAg
SlNJbnRlcmZhY2VKSVQgaml0KCZ2bSk7CiAKICAgICBzd2l0Y2ggKGVudHJ5VHlwZSkgewogICAg
IGNhc2UgRW50ZXJWaWFDYWxsOgpAQCAtMjY2LDcgKzI2Niw3IEBAIHN0YXRpYyBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHIKICAgICB9CiAKICAgICBqaXQuZW1pdFB1dFRvQ2FsbEZy
YW1lSGVhZGVyKDAsIENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayk7Ci0gICAgaml0LnN0b3JlUHRy
KEpTSW50ZXJmYWNlSklUOjpjYWxsRnJhbWVSZWdpc3RlciwgJnZtLT50b3BDYWxsRnJhbWUpOwor
ICAgIGppdC5zdG9yZVB0cihKU0ludGVyZmFjZUpJVDo6Y2FsbEZyYW1lUmVnaXN0ZXIsICZ2bS50
b3BDYWxsRnJhbWUpOwogCiAjaWYgQ1BVKFg4NikKICAgICAvLyBDYWxsaW5nIGNvbnZlbnRpb246
ICAgICAgZihlY3gsIGVkeCwgLi4uKTsKQEAgLTM2MywxMiArMzYzLDEyIEBAIHN0YXRpYyBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHIKIAogICAgIC8vIENoZWNrIGZvciBhbiBleGNl
cHRpb24KICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGppdC5sb2FkNjQodm0tPmFkZHJlc3NPZkV4
Y2VwdGlvbigpLCBKU0ludGVyZmFjZUpJVDo6cmVnVDIpOworICAgIGppdC5sb2FkNjQodm0uYWRk
cmVzc09mRXhjZXB0aW9uKCksIEpTSW50ZXJmYWNlSklUOjpyZWdUMik7CiAgICAgSlNJbnRlcmZh
Y2VKSVQ6Okp1bXAgZXhjZXB0aW9uSGFuZGxlciA9IGppdC5icmFuY2hUZXN0NjQoSlNJbnRlcmZh
Y2VKSVQ6Ok5vblplcm8sIEpTSW50ZXJmYWNlSklUOjpyZWdUMik7CiAjZWxzZQogICAgIEpTSW50
ZXJmYWNlSklUOjpKdW1wIGV4Y2VwdGlvbkhhbmRsZXIgPSBqaXQuYnJhbmNoMzIoCiAgICAgICAg
IEpTSW50ZXJmYWNlSklUOjpOb3RFcXVhbCwKLSAgICAgICAgSlNJbnRlcmZhY2VKSVQ6OkFic29s
dXRlQWRkcmVzcyh2bS0+YWRkcmVzc09mRXhjZXB0aW9uKCkpLAorICAgICAgICBKU0ludGVyZmFj
ZUpJVDo6QWJzb2x1dGVBZGRyZXNzKHZtLmFkZHJlc3NPZkV4Y2VwdGlvbigpKSwKICAgICAgICAg
SlNJbnRlcmZhY2VKSVQ6OlRydXN0ZWRJbW0zMigwKSk7CiAjZW5kaWYKIApAQCAtMzc5LDggKzM3
OSw4IEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHIKICAgICAvLyBI
YW5kbGUgYW4gZXhjZXB0aW9uCiAgICAgZXhjZXB0aW9uSGFuZGxlci5saW5rKCZqaXQpOwogCi0g
ICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtLT50
b3BFbnRyeUZyYW1lKTsKLSAgICBqaXQuc3RvcmVQdHIoSlNJbnRlcmZhY2VKSVQ6OmNhbGxGcmFt
ZVJlZ2lzdGVyLCAmdm0tPnRvcENhbGxGcmFtZSk7CisgICAgaml0LmNvcHlDYWxsZWVTYXZlc1Rv
RW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtLnRvcEVudHJ5RnJhbWUpOworICAgIGppdC5z
dG9yZVB0cihKU0ludGVyZmFjZUpJVDo6Y2FsbEZyYW1lUmVnaXN0ZXIsICZ2bS50b3BDYWxsRnJh
bWUpOwogCiAjaWYgQ1BVKFg4NikgJiYgVVNFKEpTVkFMVUUzMl82NCkKICAgICBqaXQuc3ViUHRy
KEpTSW50ZXJmYWNlSklUOjpUcnVzdGVkSW1tMzIoNCksIEpTSW50ZXJmYWNlSklUOjpzdGFja1Bv
aW50ZXJSZWdpc3Rlcik7CkBAIC00MDEsNDUgKzQwMSw0NSBAQCBzdGF0aWMgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyCiAgICAgaml0LmFkZFB0cihKU0ludGVyZmFjZUpJVDo6VHJ1
c3RlZEltbTMyKDQgKiBzaXplb2YoaW50NjRfdCkpLCBKU0ludGVyZmFjZUpJVDo6c3RhY2tQb2lu
dGVyUmVnaXN0ZXIpOwogI2VuZGlmCiAKLSAgICBqaXQuanVtcFRvRXhjZXB0aW9uSGFuZGxlcigq
dm0pOworICAgIGppdC5qdW1wVG9FeGNlcHRpb25IYW5kbGVyKHZtKTsKIAogICAgIExpbmtCdWZm
ZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQpOwogICAgIHJldHVybiBGSU5BTEla
RV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgIiVzICVzJXMgdHJhbXBvbGluZSIs
IHRodW5rRnVuY3Rpb25UeXBlID09IFRodW5rRnVuY3Rpb25UeXBlOjpKU0Z1bmN0aW9uID8gIm5h
dGl2ZSIgOiAiaW50ZXJuYWwiLCBlbnRyeVR5cGUgPT0gRW50ZXJWaWFKdW1wV2l0aFNhdmVkVGFn
cyA/ICJUYWlsIFdpdGggU2F2ZWQgVGFncyAiIDogZW50cnlUeXBlID09IEVudGVyVmlhSnVtcFdp
dGhvdXRTYXZlZFRhZ3MgPyAiVGFpbCBXaXRob3V0IFNhdmVkIFRhZ3MgIiA6ICIiLCB0b0NTdHJp
bmcoa2luZCkuZGF0YSgpKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBuYXRpdmVDYWxsR2VuZXJhdG9yKFZNKiB2bSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gbmF0aXZlQ2FsbEdlbmVyYXRvcihWTSYgdm0pCiB7CiAgICAgcmV0dXJu
IG5hdGl2ZUZvckdlbmVyYXRvcih2bSwgVGh1bmtGdW5jdGlvblR5cGU6OkpTRnVuY3Rpb24sIENv
ZGVGb3JDYWxsKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBu
YXRpdmVUYWlsQ2FsbEdlbmVyYXRvcihWTSogdm0pCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IG5hdGl2ZVRhaWxDYWxsR2VuZXJhdG9yKFZNJiB2bSkKIHsKICAgICByZXR1
cm4gbmF0aXZlRm9yR2VuZXJhdG9yKHZtLCBUaHVua0Z1bmN0aW9uVHlwZTo6SlNGdW5jdGlvbiwg
Q29kZUZvckNhbGwsIEVudGVyVmlhSnVtcFdpdGhTYXZlZFRhZ3MpOwogfQogCi1NYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG5hdGl2ZVRhaWxDYWxsV2l0aG91dFNhdmVkVGFn
c0dlbmVyYXRvcihWTSogdm0pCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
IG5hdGl2ZVRhaWxDYWxsV2l0aG91dFNhdmVkVGFnc0dlbmVyYXRvcihWTSYgdm0pCiB7CiAgICAg
cmV0dXJuIG5hdGl2ZUZvckdlbmVyYXRvcih2bSwgVGh1bmtGdW5jdGlvblR5cGU6OkpTRnVuY3Rp
b24sIENvZGVGb3JDYWxsLCBFbnRlclZpYUp1bXBXaXRob3V0U2F2ZWRUYWdzKTsKIH0KIAotTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBuYXRpdmVDb25zdHJ1Y3RHZW5lcmF0
b3IoVk0qIHZtKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBuYXRpdmVD
b25zdHJ1Y3RHZW5lcmF0b3IoVk0mIHZtKQogewogICAgIHJldHVybiBuYXRpdmVGb3JHZW5lcmF0
b3Iodm0sIFRodW5rRnVuY3Rpb25UeXBlOjpKU0Z1bmN0aW9uLCBDb2RlRm9yQ29uc3RydWN0KTsK
IH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBpbnRlcm5hbEZ1bmN0
aW9uQ2FsbEdlbmVyYXRvcihWTSogdm0pCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IGludGVybmFsRnVuY3Rpb25DYWxsR2VuZXJhdG9yKFZNJiB2bSkKIHsKICAgICByZXR1
cm4gbmF0aXZlRm9yR2VuZXJhdG9yKHZtLCBUaHVua0Z1bmN0aW9uVHlwZTo6SW50ZXJuYWxGdW5j
dGlvbiwgQ29kZUZvckNhbGwpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IGludGVybmFsRnVuY3Rpb25Db25zdHJ1Y3RHZW5lcmF0b3IoVk0qIHZtKQorTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBpbnRlcm5hbEZ1bmN0aW9uQ29uc3RydWN0
R2VuZXJhdG9yKFZNJiB2bSkKIHsKICAgICByZXR1cm4gbmF0aXZlRm9yR2VuZXJhdG9yKHZtLCBU
aHVua0Z1bmN0aW9uVHlwZTo6SW50ZXJuYWxGdW5jdGlvbiwgQ29kZUZvckNvbnN0cnVjdCk7CiB9
CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gYXJpdHlGaXh1cEdlbmVy
YXRvcihWTSogdm0pCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGFyaXR5
Rml4dXBHZW5lcmF0b3IoVk0mIHZtKQogewotICAgIEpTSW50ZXJmYWNlSklUIGppdCh2bSk7Cisg
ICAgSlNJbnRlcmZhY2VKSVQgaml0KCZ2bSk7CiAKICAgICAvLyBXZSBlbnRlciB3aXRoIGZpeHVw
IGNvdW50IGluIGFyZ3VtZW50R1BSMAogICAgIC8vIFdlIGhhdmUgdGhlIGd1YXJhbnRlZSB0aGF0
IGEwLCBhMSwgYTIsIHQzLCB0NCBhbmQgdDUgKG9yIHQwIGZvciBXaW5kb3dzKSBhcmUgYWxsIGRp
c3RpbmN0IDotKQpAQCAtNTkwLDkgKzU5MCw5IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gYXIKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklU
VGh1bmtQdHJUYWcsICJmaXh1cCBhcml0eSIpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IHVucmVhY2hhYmxlR2VuZXJhdG9yKFZNKiB2bSkKK01hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gdW5yZWFjaGFibGVHZW5lcmF0b3IoVk0mIHZtKQog
ewotICAgIEpTSW50ZXJmYWNlSklUIGppdCh2bSk7CisgICAgSlNJbnRlcmZhY2VKSVQgaml0KCZ2
bSk7CiAKICAgICBqaXQuYnJlYWtwb2ludCgpOwogCkBAIC02MDAsNyArNjAwLDcgQEAgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiB1bgogICAgIHJldHVybiBGSU5BTElaRV9D
T0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgInVucmVhY2hhYmxlIHRodW5rIik7CiB9
CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gc3RyaW5nR2V0QnlWYWxH
ZW5lcmF0b3IoVk0qIHZtKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBz
dHJpbmdHZXRCeVZhbEdlbmVyYXRvcihWTSYgdm0pCiB7CiAgICAgLy8gcmVnVDAgaXMgSlNTdHJp
bmcqLCBhbmQgcmVnVDEgKDY0Yml0KSBvciByZWdUMiAoMzJiaXQpIGlzIGludCBpbmRleC4KICAg
ICAvLyBSZXR1cm4gcmVnVDAgPSByZXN1bHQgSlNTdHJpbmcqIGlmIHN1Y2NlZWRzLiBPdGhlcndp
c2UsIHJldHVybiByZWdUMCA9IDAuCkBAIC02MTQsNyArNjE0LDcgQEAgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiBzdAogICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gR1BSSW5m
bzo6cmVnVDE7CiAjZW5kaWYKIAotICAgIEpTSW50ZXJmYWNlSklUIGppdCh2bSk7CisgICAgSlNJ
bnRlcmZhY2VKSVQgaml0KCZ2bSk7CiAgICAgSlNJbnRlcmZhY2VKSVQ6Okp1bXBMaXN0IGZhaWx1
cmVzOwogICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CiAKQEAgLTY0MCw3ICs2NDAsNyBAQCBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHN0CiAgICAgY29udDhCaXQubGlu
aygmaml0KTsKIAogICAgIGZhaWx1cmVzLmFwcGVuZChqaXQuYnJhbmNoMzIoSlNJbnRlcmZhY2VK
SVQ6OkFib3ZlLCBzdHJpbmdHUFIsIEpTSW50ZXJmYWNlSklUOjpUcnVzdGVkSW1tMzIobWF4U2lu
Z2xlQ2hhcmFjdGVyU3RyaW5nKSkpOwotICAgIGppdC5tb3ZlKEpTSW50ZXJmYWNlSklUOjpUcnVz
dGVkSW1tUHRyKHZtLT5zbWFsbFN0cmluZ3Muc2luZ2xlQ2hhcmFjdGVyU3RyaW5ncygpKSwgaW5k
ZXhHUFIpOworICAgIGppdC5tb3ZlKEpTSW50ZXJmYWNlSklUOjpUcnVzdGVkSW1tUHRyKHZtLnNt
YWxsU3RyaW5ncy5zaW5nbGVDaGFyYWN0ZXJTdHJpbmdzKCkpLCBpbmRleEdQUik7CiAgICAgaml0
LmxvYWRQdHIoSlNJbnRlcmZhY2VKSVQ6OkJhc2VJbmRleChpbmRleEdQUiwgc3RyaW5nR1BSLCBK
U0ludGVyZmFjZUpJVDo6U2NhbGVQdHIsIDApLCBzdHJpbmdHUFIpOwogICAgIGppdC5yZXQoKTsK
IApAQCAtNjgyLDQyICs2ODIsNDIgQEAgc3RhdGljIHZvaWQgc3RyaW5nQ2hhckxvYWQoU3BlY2lh
bGl6ZWRUaAogICAgIGNvbnQ4Qml0LmxpbmsoJmppdCk7CiB9CiAKLXN0YXRpYyB2b2lkIGNoYXJU
b1N0cmluZyhTcGVjaWFsaXplZFRodW5rSklUJiBqaXQsIFZNKiB2bSwgTWFjcm9Bc3NlbWJsZXI6
OlJlZ2lzdGVySUQgc3JjLCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBkc3QsIE1hY3JvQXNz
ZW1ibGVyOjpSZWdpc3RlcklEIHNjcmF0Y2gpCitzdGF0aWMgdm9pZCBjaGFyVG9TdHJpbmcoU3Bl
Y2lhbGl6ZWRUaHVua0pJVCYgaml0LCBWTSYgdm0sIE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklE
IHNyYywgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgZHN0LCBNYWNyb0Fzc2VtYmxlcjo6UmVn
aXN0ZXJJRCBzY3JhdGNoKQogewogICAgIGppdC5hcHBlbmRGYWlsdXJlKGppdC5icmFuY2gzMihN
YWNyb0Fzc2VtYmxlcjo6QWJvdmUsIHNyYywgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMiht
YXhTaW5nbGVDaGFyYWN0ZXJTdHJpbmcpKSk7Ci0gICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW1QdHIodm0tPnNtYWxsU3RyaW5ncy5zaW5nbGVDaGFyYWN0ZXJTdHJpbmdzKCkp
LCBzY3JhdGNoKTsKKyAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cih2
bS5zbWFsbFN0cmluZ3Muc2luZ2xlQ2hhcmFjdGVyU3RyaW5ncygpKSwgc2NyYXRjaCk7CiAgICAg
aml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzY3JhdGNoLCBzcmMsIE1hY3Jv
QXNzZW1ibGVyOjpTY2FsZVB0ciwgMCksIGRzdCk7CiAgICAgaml0LmFwcGVuZEZhaWx1cmUoaml0
LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIGRzdCkpOwogfQogCi1NYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGNoYXJDb2RlQXRUaHVua0dlbmVyYXRvcihW
TSogdm0pCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGNoYXJDb2RlQXRU
aHVua0dlbmVyYXRvcihWTSYgdm0pCiB7CiAgICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQodm0s
IDEpOwogICAgIHN0cmluZ0NoYXJMb2FkKGppdCk7CiAgICAgaml0LnJldHVybkludDMyKFNwZWNp
YWxpemVkVGh1bmtKSVQ6OnJlZ1QwKTsKLSAgICByZXR1cm4gaml0LmZpbmFsaXplKHZtLT5qaXRT
dHVicy0+Y3RpTmF0aXZlVGFpbENhbGwodm0pLCAiY2hhckNvZGVBdCIpOworICAgIHJldHVybiBq
aXQuZmluYWxpemUodm0uaml0U3R1YnMtPmN0aU5hdGl2ZVRhaWxDYWxsKHZtKSwgImNoYXJDb2Rl
QXQiKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBjaGFyQXRU
aHVua0dlbmVyYXRvcihWTSogdm0pCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IGNoYXJBdFRodW5rR2VuZXJhdG9yKFZNJiB2bSkKIHsKICAgICBTcGVjaWFsaXplZFRodW5r
SklUIGppdCh2bSwgMSk7CiAgICAgc3RyaW5nQ2hhckxvYWQoaml0KTsKICAgICBjaGFyVG9TdHJp
bmcoaml0LCB2bSwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDAsIFNwZWNpYWxpemVkVGh1bmtK
SVQ6OnJlZ1QwLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMSk7CiAgICAgaml0LnJldHVybkpT
Q2VsbChTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCk7Ci0gICAgcmV0dXJuIGppdC5maW5hbGl6
ZSh2bS0+aml0U3R1YnMtPmN0aU5hdGl2ZVRhaWxDYWxsKHZtKSwgImNoYXJBdCIpOworICAgIHJl
dHVybiBqaXQuZmluYWxpemUodm0uaml0U3R1YnMtPmN0aU5hdGl2ZVRhaWxDYWxsKHZtKSwgImNo
YXJBdCIpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGZyb21D
aGFyQ29kZVRodW5rR2VuZXJhdG9yKFZNKiB2bSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gZnJvbUNoYXJDb2RlVGh1bmtHZW5lcmF0b3IoVk0mIHZtKQogewogICAgIFNw
ZWNpYWxpemVkVGh1bmtKSVQgaml0KHZtLCAxKTsKICAgICAvLyBsb2FkIGNoYXIgY29kZQogICAg
IGppdC5sb2FkSW50MzJBcmd1bWVudCgwLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCk7CiAg
ICAgY2hhclRvU3RyaW5nKGppdCwgdm0sIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwLCBTcGVj
aWFsaXplZFRodW5rSklUOjpyZWdUMCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDEpOwogICAg
IGppdC5yZXR1cm5KU0NlbGwoU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDApOwotICAgIHJldHVy
biBqaXQuZmluYWxpemUodm0tPmppdFN0dWJzLT5jdGlOYXRpdmVUYWlsQ2FsbCh2bSksICJmcm9t
Q2hhckNvZGUiKTsKKyAgICByZXR1cm4gaml0LmZpbmFsaXplKHZtLmppdFN0dWJzLT5jdGlOYXRp
dmVUYWlsQ2FsbCh2bSksICJmcm9tQ2hhckNvZGUiKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBjbHozMlRodW5rR2VuZXJhdG9yKFZNKiB2bSkKK01hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gY2x6MzJUaHVua0dlbmVyYXRvcihWTSYgdm0p
CiB7CiAgICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQodm0sIDEpOwogICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wIG5vbkludEFyZ0p1bXA7CkBAIC03MzUsMTkgKzczNSwxOSBAQCBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGNsCiAgICAgfSBlbHNlCiAgICAgICAgIGppdC5h
cHBlbmRGYWlsdXJlKG5vbkludEFyZ0p1bXApOwogCi0gICAgcmV0dXJuIGppdC5maW5hbGl6ZSh2
bS0+aml0U3R1YnMtPmN0aU5hdGl2ZVRhaWxDYWxsKHZtKSwgImNsejMyIik7CisgICAgcmV0dXJu
IGppdC5maW5hbGl6ZSh2bS5qaXRTdHVicy0+Y3RpTmF0aXZlVGFpbENhbGwodm0pLCAiY2x6MzIi
KTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBzcXJ0VGh1bmtH
ZW5lcmF0b3IoVk0qIHZtKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBz
cXJ0VGh1bmtHZW5lcmF0b3IoVk0mIHZtKQogewogICAgIFNwZWNpYWxpemVkVGh1bmtKSVQgaml0
KHZtLCAxKTsKICAgICBpZiAoIWppdC5zdXBwb3J0c0Zsb2F0aW5nUG9pbnRTcXJ0KCkpCi0gICAg
ICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+OjpjcmVhdGVT
ZWxmTWFuYWdlZENvZGVSZWYodm0tPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKHZtKSk7CisgICAg
ICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+OjpjcmVhdGVT
ZWxmTWFuYWdlZENvZGVSZWYodm0uaml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwodm0pKTsKIAogICAg
IGppdC5sb2FkRG91YmxlQXJndW1lbnQoMCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6ZnBSZWdUMCwg
U3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDApOwogICAgIGppdC5zcXJ0RG91YmxlKFNwZWNpYWxp
emVkVGh1bmtKSVQ6OmZwUmVnVDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OmZwUmVnVDApOwogICAg
IGppdC5yZXR1cm5Eb3VibGUoU3BlY2lhbGl6ZWRUaHVua0pJVDo6ZnBSZWdUMCk7Ci0gICAgcmV0
dXJuIGppdC5maW5hbGl6ZSh2bS0+aml0U3R1YnMtPmN0aU5hdGl2ZVRhaWxDYWxsKHZtKSwgInNx
cnQiKTsKKyAgICByZXR1cm4gaml0LmZpbmFsaXplKHZtLmppdFN0dWJzLT5jdGlOYXRpdmVUYWls
Q2FsbCh2bSksICJzcXJ0Iik7CiB9CiAKIApAQCAtODk4LDEyICs4OTgsMTIgQEAgZGVmaW5lVW5h
cnlEb3VibGVPcFdyYXBwZXIodHJ1bmMpOwogCiBzdGF0aWMgY29uc3QgZG91YmxlIGhhbGZDb25z
dGFudCA9IDAuNTsKICAgICAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
Zmxvb3JUaHVua0dlbmVyYXRvcihWTSogdm0pCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IGZsb29yVGh1bmtHZW5lcmF0b3IoVk0mIHZtKQogewogICAgIFNwZWNpYWxpemVk
VGh1bmtKSVQgaml0KHZtLCAxKTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub25JbnRKdW1w
OwogICAgIGlmICghVW5hcnlEb3VibGVPcFdyYXBwZXIoZmxvb3IpIHx8ICFqaXQuc3VwcG9ydHNG
bG9hdGluZ1BvaW50KCkpCi0gICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+OjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYodm0tPmppdFN0dWJzLT5jdGlO
YXRpdmVDYWxsKHZtKSk7CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+OjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYodm0uaml0U3R1YnMtPmN0aU5h
dGl2ZUNhbGwodm0pKTsKICAgICBqaXQubG9hZEludDMyQXJndW1lbnQoMCwgU3BlY2lhbGl6ZWRU
aHVua0pJVDo6cmVnVDAsIG5vbkludEp1bXApOwogICAgIGppdC5yZXR1cm5JbnQzMihTcGVjaWFs
aXplZFRodW5rSklUOjpyZWdUMCk7CiAgICAgbm9uSW50SnVtcC5saW5rKCZqaXQpOwpAQCAtOTE2
LDcgKzkxNiw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gZmwKICAg
ICAgICAgaml0LnJldHVybkludDMyKFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwKTsKICAgICAg
ICAgZG91YmxlUmVzdWx0LmxpbmsoJmppdCk7CiAgICAgICAgIGppdC5yZXR1cm5Eb3VibGUoU3Bl
Y2lhbGl6ZWRUaHVua0pJVDo6ZnBSZWdUMCk7Ci0gICAgICAgIHJldHVybiBqaXQuZmluYWxpemUo
dm0tPmppdFN0dWJzLT5jdGlOYXRpdmVUYWlsQ2FsbCh2bSksICJmbG9vciIpOworICAgICAgICBy
ZXR1cm4gaml0LmZpbmFsaXplKHZtLmppdFN0dWJzLT5jdGlOYXRpdmVUYWlsQ2FsbCh2bSksICJm
bG9vciIpOwogICAgIH0KIAogICAgIFNwZWNpYWxpemVkVGh1bmtKSVQ6Okp1bXAgaW50UmVzdWx0
OwpAQCAtOTM4LDE0ICs5MzgsMTQgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBmbAogICAgIGppdC5yZXR1cm5JbnQzMihTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCk7
CiAgICAgZG91YmxlUmVzdWx0LmxpbmsoJmppdCk7CiAgICAgaml0LnJldHVybkRvdWJsZShTcGVj
aWFsaXplZFRodW5rSklUOjpmcFJlZ1QwKTsKLSAgICByZXR1cm4gaml0LmZpbmFsaXplKHZtLT5q
aXRTdHVicy0+Y3RpTmF0aXZlVGFpbENhbGwodm0pLCAiZmxvb3IiKTsKKyAgICByZXR1cm4gaml0
LmZpbmFsaXplKHZtLmppdFN0dWJzLT5jdGlOYXRpdmVUYWlsQ2FsbCh2bSksICJmbG9vciIpOwog
fQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGNlaWxUaHVua0dlbmVy
YXRvcihWTSogdm0pCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGNlaWxU
aHVua0dlbmVyYXRvcihWTSYgdm0pCiB7CiAgICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQodm0s
IDEpOwogICAgIGlmICghVW5hcnlEb3VibGVPcFdyYXBwZXIoY2VpbCkgfHwgIWppdC5zdXBwb3J0
c0Zsb2F0aW5nUG9pbnQoKSkKLSAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz46OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZih2bS0+aml0U3R1YnMtPmN0
aU5hdGl2ZUNhbGwodm0pKTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz46OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZih2bS5qaXRTdHVicy0+Y3Rp
TmF0aXZlQ2FsbCh2bSkpOwogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vbkludEp1bXA7CiAg
ICAgaml0LmxvYWRJbnQzMkFyZ3VtZW50KDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwLCBu
b25JbnRKdW1wKTsKICAgICBqaXQucmV0dXJuSW50MzIoU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVn
VDApOwpAQCAtOTYxLDE0ICs5NjEsMTQgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiBjZQogICAgIGppdC5yZXR1cm5JbnQzMihTcGVjaWFsaXplZFRodW5rSklUOjpyZWdU
MCk7CiAgICAgZG91YmxlUmVzdWx0LmxpbmsoJmppdCk7CiAgICAgaml0LnJldHVybkRvdWJsZShT
cGVjaWFsaXplZFRodW5rSklUOjpmcFJlZ1QwKTsKLSAgICByZXR1cm4gaml0LmZpbmFsaXplKHZt
LT5qaXRTdHVicy0+Y3RpTmF0aXZlVGFpbENhbGwodm0pLCAiY2VpbCIpOworICAgIHJldHVybiBq
aXQuZmluYWxpemUodm0uaml0U3R1YnMtPmN0aU5hdGl2ZVRhaWxDYWxsKHZtKSwgImNlaWwiKTsK
IH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiB0cnVuY1RodW5rR2Vu
ZXJhdG9yKFZNKiB2bSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gdHJ1
bmNUaHVua0dlbmVyYXRvcihWTSYgdm0pCiB7CiAgICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQo
dm0sIDEpOwogICAgIGlmICghVW5hcnlEb3VibGVPcFdyYXBwZXIodHJ1bmMpIHx8ICFqaXQuc3Vw
cG9ydHNGbG9hdGluZ1BvaW50KCkpCi0gICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+OjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYodm0tPmppdFN0dWJz
LT5jdGlOYXRpdmVDYWxsKHZtKSk7CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+OjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYodm0uaml0U3R1YnMt
PmN0aU5hdGl2ZUNhbGwodm0pKTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub25JbnRKdW1w
OwogICAgIGppdC5sb2FkSW50MzJBcmd1bWVudCgwLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdU
MCwgbm9uSW50SnVtcCk7CiAgICAgaml0LnJldHVybkludDMyKFNwZWNpYWxpemVkVGh1bmtKSVQ6
OnJlZ1QwKTsKQEAgLTk4NCwxNCArOTg0LDE0IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gdHIKICAgICBqaXQucmV0dXJuSW50MzIoU3BlY2lhbGl6ZWRUaHVua0pJVDo6
cmVnVDApOwogICAgIGRvdWJsZVJlc3VsdC5saW5rKCZqaXQpOwogICAgIGppdC5yZXR1cm5Eb3Vi
bGUoU3BlY2lhbGl6ZWRUaHVua0pJVDo6ZnBSZWdUMCk7Ci0gICAgcmV0dXJuIGppdC5maW5hbGl6
ZSh2bS0+aml0U3R1YnMtPmN0aU5hdGl2ZVRhaWxDYWxsKHZtKSwgInRydW5jIik7CisgICAgcmV0
dXJuIGppdC5maW5hbGl6ZSh2bS5qaXRTdHVicy0+Y3RpTmF0aXZlVGFpbENhbGwodm0pLCAidHJ1
bmMiKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiByb3VuZFRo
dW5rR2VuZXJhdG9yKFZNKiB2bSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gcm91bmRUaHVua0dlbmVyYXRvcihWTSYgdm0pCiB7CiAgICAgU3BlY2lhbGl6ZWRUaHVua0pJ
VCBqaXQodm0sIDEpOwogICAgIGlmICghVW5hcnlEb3VibGVPcFdyYXBwZXIoanNSb3VuZCkgfHwg
IWppdC5zdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkKLSAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz46OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZih2bS0+
aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwodm0pKTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz46OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZih2bS5q
aXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCh2bSkpOwogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5v
bkludEp1bXA7CiAgICAgaml0LmxvYWRJbnQzMkFyZ3VtZW50KDAsIFNwZWNpYWxpemVkVGh1bmtK
SVQ6OnJlZ1QwLCBub25JbnRKdW1wKTsKICAgICBqaXQucmV0dXJuSW50MzIoU3BlY2lhbGl6ZWRU
aHVua0pJVDo6cmVnVDApOwpAQCAtMTAxOCw0MCArMTAxOCw0MCBAQCBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IHJvCiAgICAgaml0LnJldHVybkludDMyKFNwZWNpYWxpemVk
VGh1bmtKSVQ6OnJlZ1QwKTsKICAgICBkb3VibGVSZXN1bHQubGluaygmaml0KTsKICAgICBqaXQu
cmV0dXJuRG91YmxlKFNwZWNpYWxpemVkVGh1bmtKSVQ6OmZwUmVnVDApOwotICAgIHJldHVybiBq
aXQuZmluYWxpemUodm0tPmppdFN0dWJzLT5jdGlOYXRpdmVUYWlsQ2FsbCh2bSksICJyb3VuZCIp
OworICAgIHJldHVybiBqaXQuZmluYWxpemUodm0uaml0U3R1YnMtPmN0aU5hdGl2ZVRhaWxDYWxs
KHZtKSwgInJvdW5kIik7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gZXhwVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiBleHBUaHVua0dlbmVyYXRvcihWTSYgdm0pCiB7CiAgICAgaWYgKCFVbmFyeURv
dWJsZU9wV3JhcHBlcihleHApKQotICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKHZtLT5qaXRTdHVicy0+
Y3RpTmF0aXZlQ2FsbCh2bSkpOworICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKHZtLmppdFN0dWJzLT5j
dGlOYXRpdmVDYWxsKHZtKSk7CiAgICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQodm0sIDEpOwog
ICAgIGlmICghaml0LnN1cHBvcnRzRmxvYXRpbmdQb2ludCgpKQotICAgICAgICByZXR1cm4gTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2Rl
UmVmKHZtLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCh2bSkpOworICAgICAgICByZXR1cm4gTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2Rl
UmVmKHZtLmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKHZtKSk7CiAgICAgaml0LmxvYWREb3VibGVB
cmd1bWVudCgwLCBTcGVjaWFsaXplZFRodW5rSklUOjpmcFJlZ1QwLCBTcGVjaWFsaXplZFRodW5r
SklUOjpyZWdUMCk7CiAgICAgaml0LmNhbGxEb3VibGVUb0RvdWJsZVByZXNlcnZpbmdSZXR1cm4o
VW5hcnlEb3VibGVPcFdyYXBwZXIoZXhwKSk7CiAgICAgaml0LnJldHVybkRvdWJsZShTcGVjaWFs
aXplZFRodW5rSklUOjpmcFJlZ1QwKTsKLSAgICByZXR1cm4gaml0LmZpbmFsaXplKHZtLT5qaXRT
dHVicy0+Y3RpTmF0aXZlVGFpbENhbGwodm0pLCAiZXhwIik7CisgICAgcmV0dXJuIGppdC5maW5h
bGl6ZSh2bS5qaXRTdHVicy0+Y3RpTmF0aXZlVGFpbENhbGwodm0pLCAiZXhwIik7CiB9CiAKLU1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gbG9nVGh1bmtHZW5lcmF0b3IoVk0q
IHZtKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBsb2dUaHVua0dlbmVy
YXRvcihWTSYgdm0pCiB7CiAgICAgaWYgKCFVbmFyeURvdWJsZU9wV3JhcHBlcihsb2cpKQotICAg
ICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPjo6Y3JlYXRl
U2VsZk1hbmFnZWRDb2RlUmVmKHZtLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCh2bSkpOworICAg
ICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPjo6Y3JlYXRl
U2VsZk1hbmFnZWRDb2RlUmVmKHZtLmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKHZtKSk7CiAgICAg
U3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQodm0sIDEpOwogICAgIGlmICghaml0LnN1cHBvcnRzRmxv
YXRpbmdQb2ludCgpKQotICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKHZtLT5qaXRTdHVicy0+Y3RpTmF0
aXZlQ2FsbCh2bSkpOworICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKHZtLmppdFN0dWJzLT5jdGlOYXRp
dmVDYWxsKHZtKSk7CiAgICAgaml0LmxvYWREb3VibGVBcmd1bWVudCgwLCBTcGVjaWFsaXplZFRo
dW5rSklUOjpmcFJlZ1QwLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCk7CiAgICAgaml0LmNh
bGxEb3VibGVUb0RvdWJsZVByZXNlcnZpbmdSZXR1cm4oVW5hcnlEb3VibGVPcFdyYXBwZXIobG9n
KSk7CiAgICAgaml0LnJldHVybkRvdWJsZShTcGVjaWFsaXplZFRodW5rSklUOjpmcFJlZ1QwKTsK
LSAgICByZXR1cm4gaml0LmZpbmFsaXplKHZtLT5qaXRTdHVicy0+Y3RpTmF0aXZlVGFpbENhbGwo
dm0pLCAibG9nIik7CisgICAgcmV0dXJuIGppdC5maW5hbGl6ZSh2bS5qaXRTdHVicy0+Y3RpTmF0
aXZlVGFpbENhbGwodm0pLCAibG9nIik7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gYWJzVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQorTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBhYnNUaHVua0dlbmVyYXRvcihWTSYgdm0pCiB7CiAgICAgU3Bl
Y2lhbGl6ZWRUaHVua0pJVCBqaXQodm0sIDEpOwogICAgIGlmICghaml0LnN1cHBvcnRzRmxvYXRp
bmdQb2ludEFicygpKQotICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKHZtLT5qaXRTdHVicy0+Y3RpTmF0
aXZlQ2FsbCh2bSkpOworICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKHZtLmppdFN0dWJzLT5jdGlOYXRp
dmVDYWxsKHZtKSk7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIHVuc2lnbmVkIHZpcnR1YWxS
ZWdpc3RlckluZGV4ID0gQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldCgwKTsKQEAgLTExMDEsMTAg
KzExMDEsMTAgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBhYgogICAg
IGppdC5hYnNEb3VibGUoU3BlY2lhbGl6ZWRUaHVua0pJVDo6ZnBSZWdUMCwgU3BlY2lhbGl6ZWRU
aHVua0pJVDo6ZnBSZWdUMSk7CiAgICAgaml0LnJldHVybkRvdWJsZShTcGVjaWFsaXplZFRodW5r
SklUOjpmcFJlZ1QxKTsKICNlbmRpZgotICAgIHJldHVybiBqaXQuZmluYWxpemUodm0tPmppdFN0
dWJzLT5jdGlOYXRpdmVUYWlsQ2FsbCh2bSksICJhYnMiKTsKKyAgICByZXR1cm4gaml0LmZpbmFs
aXplKHZtLmppdFN0dWJzLT5jdGlOYXRpdmVUYWlsQ2FsbCh2bSksICJhYnMiKTsKIH0KIAotTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBpbXVsVGh1bmtHZW5lcmF0b3IoVk0q
IHZtKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBpbXVsVGh1bmtHZW5l
cmF0b3IoVk0mIHZtKQogewogICAgIFNwZWNpYWxpemVkVGh1bmtKSVQgaml0KHZtLCAyKTsKICAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub25JbnRBcmcwSnVtcDsKQEAgLTExMzIsMjYgKzExMzIs
MjYgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBpbQogICAgIH0gZWxz
ZQogICAgICAgICBqaXQuYXBwZW5kRmFpbHVyZShub25JbnRBcmcxSnVtcCk7CiAKLSAgICByZXR1
cm4gaml0LmZpbmFsaXplKHZtLT5qaXRTdHVicy0+Y3RpTmF0aXZlVGFpbENhbGwodm0pLCAiaW11
bCIpOworICAgIHJldHVybiBqaXQuZmluYWxpemUodm0uaml0U3R1YnMtPmN0aU5hdGl2ZVRhaWxD
YWxsKHZtKSwgImltdWwiKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiByYW5kb21UaHVua0dlbmVyYXRvcihWTSogdm0pCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IHJhbmRvbVRodW5rR2VuZXJhdG9yKFZNJiB2bSkKIHsKICAgICBTcGVj
aWFsaXplZFRodW5rSklUIGppdCh2bSwgMCk7CiAgICAgaWYgKCFqaXQuc3VwcG9ydHNGbG9hdGlu
Z1BvaW50KCkpCi0gICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+OjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYodm0tPmppdFN0dWJzLT5jdGlOYXRpdmVD
YWxsKHZtKSk7CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+OjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYodm0uaml0U3R1YnMtPmN0aU5hdGl2ZUNh
bGwodm0pKTsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgaml0LmVtaXRSYW5kb21UaHVuaygq
dm0sIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdU
MSwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDIsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1Qz
LCBTcGVjaWFsaXplZFRodW5rSklUOjpmcFJlZ1QwKTsKKyAgICBqaXQuZW1pdFJhbmRvbVRodW5r
KHZtLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVn
VDEsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QyLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdU
MywgU3BlY2lhbGl6ZWRUaHVua0pJVDo6ZnBSZWdUMCk7CiAgICAgaml0LnJldHVybkRvdWJsZShT
cGVjaWFsaXplZFRodW5rSklUOjpmcFJlZ1QwKTsKIAotICAgIHJldHVybiBqaXQuZmluYWxpemUo
dm0tPmppdFN0dWJzLT5jdGlOYXRpdmVUYWlsQ2FsbCh2bSksICJyYW5kb20iKTsKKyAgICByZXR1
cm4gaml0LmZpbmFsaXplKHZtLmppdFN0dWJzLT5jdGlOYXRpdmVUYWlsQ2FsbCh2bSksICJyYW5k
b20iKTsKICNlbHNlCi0gICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz46OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZih2bS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNh
bGwodm0pKTsKKyAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
Pjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKHZtLmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKHZt
KSk7CiAjZW5kaWYKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBi
b3VuZFRoaXNOb0FyZ3NGdW5jdGlvbkNhbGxHZW5lcmF0b3IoVk0qIHZtKQorTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBib3VuZFRoaXNOb0FyZ3NGdW5jdGlvbkNhbGxHZW5l
cmF0b3IoVk0mIHZtKQogewogICAgIENDYWxsSGVscGVycyBqaXQ7CiAgICAgCkBAIC0xMTk0LDE1
ICsxMTk0LDE1IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gYm8KICAg
ICAKICAgICBqaXQubmVnUHRyKEdQUkluZm86OnJlZ1QyKTsKICAgICBqaXQuYWRkUHRyKENDYWxs
SGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIEdQUkluZm86OnJlZ1QyKTsKLSAgICBDQ2Fs
bEhlbHBlcnM6Okp1bXAgaGF2ZVN0YWNrU3BhY2UgPSBqaXQuYnJhbmNoUHRyKENDYWxsSGVscGVy
czo6QmVsb3dPckVxdWFsLCBDQ2FsbEhlbHBlcnM6OkFic29sdXRlQWRkcmVzcyh2bS0+YWRkcmVz
c09mU29mdFN0YWNrTGltaXQoKSksIEdQUkluZm86OnJlZ1QyKTsKKyAgICBDQ2FsbEhlbHBlcnM6
Okp1bXAgaGF2ZVN0YWNrU3BhY2UgPSBqaXQuYnJhbmNoUHRyKENDYWxsSGVscGVyczo6QmVsb3dP
ckVxdWFsLCBDQ2FsbEhlbHBlcnM6OkFic29sdXRlQWRkcmVzcyh2bS5hZGRyZXNzT2ZTb2Z0U3Rh
Y2tMaW1pdCgpKSwgR1BSSW5mbzo6cmVnVDIpOwogCiAgICAgLy8gVGhyb3cgU3RhY2sgT3ZlcmZs
b3cgZXhjZXB0aW9uCi0gICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNh
dmVzQnVmZmVyKHZtLT50b3BFbnRyeUZyYW1lKTsKLSAgICBqaXQuc2V0dXBBcmd1bWVudHM8ZGVj
bHR5cGUodGhyb3dTdGFja092ZXJmbG93RXJyb3JGcm9tVGh1bmspPihDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW1QdHIodm0pLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CisgICAgaml0LmNv
cHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtLnRvcEVudHJ5RnJh
bWUpOworICAgIGppdC5zZXR1cEFyZ3VtZW50czxkZWNsdHlwZSh0aHJvd1N0YWNrT3ZlcmZsb3dF
cnJvckZyb21UaHVuayk+KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigmdm0pLCBHUFJJbmZv
OjpjYWxsRnJhbWVSZWdpc3Rlcik7CiAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tUHRyKHRhZ0NGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KHRocm93U3RhY2tPdmVyZmxv
d0Vycm9yRnJvbVRodW5rKSksIEdQUkluZm86Om5vbkFyZ0dQUjApOwogICAgIGVtaXRQb2ludGVy
VmFsaWRhdGlvbihqaXQsIEdQUkluZm86Om5vbkFyZ0dQUjAsIE9wZXJhdGlvblB0clRhZyk7CiAg
ICAgaml0LmNhbGwoR1BSSW5mbzo6bm9uQXJnR1BSMCwgT3BlcmF0aW9uUHRyVGFnKTsKLSAgICBq
aXQuanVtcFRvRXhjZXB0aW9uSGFuZGxlcigqdm0pOworICAgIGppdC5qdW1wVG9FeGNlcHRpb25I
YW5kbGVyKHZtKTsKIAogICAgIGhhdmVTdGFja1NwYWNlLmxpbmsoJmppdCk7CiAgICAgaml0Lm1v
dmUoR1BSSW5mbzo6cmVnVDIsIENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwpA
QCAtMTI1MCw3ICsxMjUwLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiBibwogICAgIGppdC5yZXQoKTsKICAgICAKICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoaml0
LCBHTE9CQUxfVEhVTktfSUQpOwotICAgIGxpbmtCdWZmZXIubGluayhub0NvZGUsIENvZGVMb2Nh
dGlvbkxhYmVsPEpJVFRodW5rUHRyVGFnPih2bS0+aml0U3R1YnMtPmN0aU5hdGl2ZVRhaWxDYWxs
V2l0aG91dFNhdmVkVGFncyh2bSkpKTsKKyAgICBsaW5rQnVmZmVyLmxpbmsobm9Db2RlLCBDb2Rl
TG9jYXRpb25MYWJlbDxKSVRUaHVua1B0clRhZz4odm0uaml0U3R1YnMtPmN0aU5hdGl2ZVRhaWxD
YWxsV2l0aG91dFNhdmVkVGFncyh2bSkpKTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERSgKICAg
ICAgICAgbGlua0J1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJTcGVjaWFsaXplZCB0aHVuayBmb3Ig
Ym91bmQgZnVuY3Rpb24gY2FsbHMgd2l0aCBubyBhcmd1bWVudHMiKTsKIH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuaAkocmV2aXNpb24gMjQ5MTI4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAx
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTM1LDM5ICszNSwzOSBAQCBjbGFzcyBDYWxsTGlua0luZm87CiB0ZW1wbGF0
ZTxQdHJUYWc+IGNsYXNzIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjsKIGNsYXNzIFZNOwogCi1NYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHRocm93RXhjZXB0aW9uRnJvbUNhbGxT
bG93UGF0aEdlbmVyYXRvcihWTSopOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiB0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IoVk0mKTsKIAogTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBsaW5rQ2FsbFRodW5rKFZNKiwgQ2Fs
bExpbmtJbmZvJiwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCk7Ci1NYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IoVk0qKTsKLU1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gbGlua1BvbHltb3JwaGljQ2FsbFRodW5rR2Vu
ZXJhdG9yKFZNKik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGxpbmtD
YWxsVGh1bmtHZW5lcmF0b3IoVk0mKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gbGlua1BvbHltb3JwaGljQ2FsbFRodW5rR2VuZXJhdG9yKFZNJik7CiAKLU1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91dGluZVB0clRhZz4gdmlydHVhbFRodW5rRm9yKFZNKiwg
Q2FsbExpbmtJbmZvJik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJU
YWc+IHZpcnR1YWxUaHVua0ZvcihWTSYsIENhbGxMaW5rSW5mbyYpOwogCi1NYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG5hdGl2ZUNhbGxHZW5lcmF0b3IoVk0qKTsKLU1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gbmF0aXZlQ29uc3RydWN0R2VuZXJhdG9y
KFZNKik7Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG5hdGl2ZVRhaWxD
YWxsR2VuZXJhdG9yKFZNKik7Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
IG5hdGl2ZVRhaWxDYWxsV2l0aG91dFNhdmVkVGFnc0dlbmVyYXRvcihWTSopOwotTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBpbnRlcm5hbEZ1bmN0aW9uQ2FsbEdlbmVyYXRv
cihWTSopOwotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBpbnRlcm5hbEZ1
bmN0aW9uQ29uc3RydWN0R2VuZXJhdG9yKFZNKik7Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IGFyaXR5Rml4dXBHZW5lcmF0b3IoVk0qKTsKLU1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gdW5yZWFjaGFibGVHZW5lcmF0b3IoVk0qKTsKLU1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gc3RyaW5nR2V0QnlWYWxHZW5lcmF0b3IoVk0q
KTsKLQotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBjaGFyQ29kZUF0VGh1
bmtHZW5lcmF0b3IoVk0qKTsKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
Y2hhckF0VGh1bmtHZW5lcmF0b3IoVk0qKTsKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gY2x6MzJUaHVua0dlbmVyYXRvcihWTSopOwotTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPiBmcm9tQ2hhckNvZGVUaHVua0dlbmVyYXRvcihWTSopOwotTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBhYnNUaHVua0dlbmVyYXRvcihWTSopOwot
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBjZWlsVGh1bmtHZW5lcmF0b3Io
Vk0qKTsKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gZXhwVGh1bmtHZW5l
cmF0b3IoVk0qKTsKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gZmxvb3JU
aHVua0dlbmVyYXRvcihWTSopOwotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiBsb2dUaHVua0dlbmVyYXRvcihWTSopOwotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiByb3VuZFRodW5rR2VuZXJhdG9yKFZNKik7Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IHNxcnRUaHVua0dlbmVyYXRvcihWTSopOwotTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiBpbXVsVGh1bmtHZW5lcmF0b3IoVk0qKTsKLU1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gcmFuZG9tVGh1bmtHZW5lcmF0b3IoVk0qKTsK
LU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gdHJ1bmNUaHVua0dlbmVyYXRv
cihWTSopOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBuYXRpdmVDYWxs
R2VuZXJhdG9yKFZNJik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG5h
dGl2ZUNvbnN0cnVjdEdlbmVyYXRvcihWTSYpOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiBuYXRpdmVUYWlsQ2FsbEdlbmVyYXRvcihWTSYpOworTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiBuYXRpdmVUYWlsQ2FsbFdpdGhvdXRTYXZlZFRhZ3NHZW5l
cmF0b3IoVk0mKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gaW50ZXJu
YWxGdW5jdGlvbkNhbGxHZW5lcmF0b3IoVk0mKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gaW50ZXJuYWxGdW5jdGlvbkNvbnN0cnVjdEdlbmVyYXRvcihWTSYpOworTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBhcml0eUZpeHVwR2VuZXJhdG9yKFZN
Jik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHVucmVhY2hhYmxlR2Vu
ZXJhdG9yKFZNJik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHN0cmlu
Z0dldEJ5VmFsR2VuZXJhdG9yKFZNJik7CisKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gY2hhckNvZGVBdFRodW5rR2VuZXJhdG9yKFZNJik7CitNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IGNoYXJBdFRodW5rR2VuZXJhdG9yKFZNJik7CitNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGNsejMyVGh1bmtHZW5lcmF0b3IoVk0mKTsK
K01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gZnJvbUNoYXJDb2RlVGh1bmtH
ZW5lcmF0b3IoVk0mKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gYWJz
VGh1bmtHZW5lcmF0b3IoVk0mKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gY2VpbFRodW5rR2VuZXJhdG9yKFZNJik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IGV4cFRodW5rR2VuZXJhdG9yKFZNJik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IGZsb29yVGh1bmtHZW5lcmF0b3IoVk0mKTsKK01hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz4gbG9nVGh1bmtHZW5lcmF0b3IoVk0mKTsKK01hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gcm91bmRUaHVua0dlbmVyYXRvcihWTSYpOwor
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBzcXJ0VGh1bmtHZW5lcmF0b3Io
Vk0mKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gaW11bFRodW5rR2Vu
ZXJhdG9yKFZNJik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHJhbmRv
bVRodW5rR2VuZXJhdG9yKFZNJik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IHRydW5jVGh1bmtHZW5lcmF0b3IoVk0mKTsKIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBib3VuZFRoaXNOb0FyZ3NGdW5jdGlvbkNhbGxHZW5lcmF0b3IoVk0qKTsK
K01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gYm91bmRUaGlzTm9BcmdzRnVu
Y3Rpb25DYWxsR2VuZXJhdG9yKFZNJik7CiB9CiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkocmV2
aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1Bh
dGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzcsNyArNzcsNyBAQCBuYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIExMSW50IHsKIAogI2RlZmluZSBMTElOVF9CRUdJTl9OT19TRVRfUEMoKSBcCiAg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsgICAgICBcCi0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcigmdm0sIGV4ZWMpOyBcCisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2
bSwgZXhlYyk7IFwKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KQogCiAjaWZuZGVmIE5ERUJVRwpAQCAtNTI5LDcgKzUyOSw3IEBAIExMSU5UX1NMT1dfUEFUSF9E
RUNMKHN0YWNrX2NoZWNrKQogICAgIC8vIEl0J3Mgb2sgdG8gY3JlYXRlIHRoZSBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgaGVyZSBiZWZvcmUgd2UKICAgICAvLyBjb252ZXJ0VG9TdGFja092ZXJmbG93
RnJhbWUoKSBiZWNhdXNlIHRoaXMgZnVuY3Rpb24gaXMgYWx3YXlzIGNhbGxlZAogICAgIC8vIGFm
dGVyIHRoZSBmcmFtZSBoYXMgYmVlbiBwcm9wdWxhdGVkIHdpdGggYSBwcm9wZXIgQ29kZUJsb2Nr
IGFuZCBjYWxsZWUuCi0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMp
OworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogCiAgICAgTExJ
TlRfU0VUX1BDX0ZPUl9TVFVCUygpOwogCkBAIC0xNDQxLDcgKzE0NDEsNyBAQCBzdGF0aWMgU2xv
d1BhdGhSZXR1cm5UeXBlIGhhbmRsZUhvc3RDYWxsCiAgICAgICAgIEFTU0VSVChjYWxsVHlwZSAh
PSBDYWxsVHlwZTo6SlMpOwogICAgIAogICAgICAgICBpZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGU6
Okhvc3QpIHsKLSAgICAgICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBl
eGVjQ2FsbGVlKTsKKyAgICAgICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0s
IGV4ZWNDYWxsZWUpOwogICAgICAgICAgICAgZXhlY0NhbGxlZS0+c2V0Q2FsbGVlKGFzT2JqZWN0
KGNhbGxlZSkpOwogICAgICAgICAgICAgdm0uaG9zdENhbGxSZXR1cm5WYWx1ZSA9IEpTVmFsdWU6
OmRlY29kZShjYWxsRGF0YS5uYXRpdmUuZnVuY3Rpb24oZXhlY0NhbGxlZSkpOwogICAgICAgICAg
ICAgTExJTlRfQ0FMTF9SRVRVUk4oZXhlY0NhbGxlZSwgZXhlY0NhbGxlZSwgTExJbnQ6OmdldENv
ZGVQdHIoZ2V0SG9zdENhbGxSZXR1cm5WYWx1ZSksIENGdW5jdGlvblB0clRhZyk7CkBAIC0xNDYx
LDcgKzE0NjEsNyBAQCBzdGF0aWMgU2xvd1BhdGhSZXR1cm5UeXBlIGhhbmRsZUhvc3RDYWxsCiAg
ICAgQVNTRVJUKGNvbnN0cnVjdFR5cGUgIT0gQ29uc3RydWN0VHlwZTo6SlMpOwogICAgIAogICAg
IGlmIChjb25zdHJ1Y3RUeXBlID09IENvbnN0cnVjdFR5cGU6Okhvc3QpIHsKLSAgICAgICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWNDYWxsZWUpOworICAgICAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjQ2FsbGVlKTsKICAgICAgICAgZXhlY0Nh
bGxlZS0+c2V0Q2FsbGVlKGFzT2JqZWN0KGNhbGxlZSkpOwogICAgICAgICB2bS5ob3N0Q2FsbFJl
dHVyblZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGNvbnN0cnVjdERhdGEubmF0aXZlLmZ1bmN0aW9u
KGV4ZWNDYWxsZWUpKTsKICAgICAgICAgTExJTlRfQ0FMTF9SRVRVUk4oZXhlY0NhbGxlZSwgZXhl
Y0NhbGxlZSwgTExJbnQ6OmdldENvZGVQdHIoZ2V0SG9zdENhbGxSZXR1cm5WYWx1ZSksIENGdW5j
dGlvblB0clRhZyk7CkBAIC0xNzc3LDcgKzE3NzcsNyBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChz
bG93X3BhdGhfaGFuZGxlX2V4CiB7CiAgICAgTExJTlRfQkVHSU5fTk9fU0VUX1BDKCk7CiAgICAg
VU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIGdlbmVyaWNVbndpbmQoJnZtLCBleGVjKTsK
KyAgICBnZW5lcmljVW53aW5kKHZtLCBleGVjKTsKICAgICBMTElOVF9FTkRfSU1QTCgpOwogfQog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0FTVEJ1aWxkZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0FTVEJ1aWxkZXIuaAkocmV2aXNp
b24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9BU1RCdWlsZGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEw
LCAyMDEzLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzgsNyArNzgsNyBAQCBjbGFzcyBBU1RCdWlsZGVy
IHsKICAgICAgICAgT3BlcmF0b3IgbV9vcDsKICAgICB9OwogcHVibGljOgotICAgIEFTVEJ1aWxk
ZXIoVk0qIHZtLCBQYXJzZXJBcmVuYSYgcGFyc2VyQXJlbmEsIFNvdXJjZUNvZGUqIHNvdXJjZUNv
ZGUpCisgICAgQVNUQnVpbGRlcihWTSYgdm0sIFBhcnNlckFyZW5hJiBwYXJzZXJBcmVuYSwgU291
cmNlQ29kZSogc291cmNlQ29kZSkKICAgICAgICAgOiBtX3ZtKHZtKQogICAgICAgICAsIG1fcGFy
c2VyQXJlbmEocGFyc2VyQXJlbmEpCiAgICAgICAgICwgbV9zb3VyY2VDb2RlKHNvdXJjZUNvZGUp
CkBAIC0xOTYsMTEgKzE5NiwxMSBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0ltcG9ydE1ldGEoRXhw
cmVzc2lvbk5vZGUqIG5vZGUpIHsgcmV0dXJuIG5vZGUtPmlzSW1wb3J0TWV0YSgpOyB9CiAgICAg
RXhwcmVzc2lvbk5vZGUqIGNyZWF0ZVJlc29sdmUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2Nh
dGlvbiwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBzdGFy
dCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGVuZCkKICAgICB7Ci0gICAgICAgIGlmIChtX3ZtLT5w
cm9wZXJ0eU5hbWVzLT5hcmd1bWVudHMgPT0gaWRlbnQpCisgICAgICAgIGlmIChtX3ZtLnByb3Bl
cnR5TmFtZXMtPmFyZ3VtZW50cyA9PSBpZGVudCkKICAgICAgICAgICAgIHVzZXNBcmd1bWVudHMo
KTsKIAogICAgICAgICBpZiAoaWRlbnQuaXNTeW1ib2woKSkgewotICAgICAgICAgICAgaWYgKEJ5
dGVjb2RlSW50cmluc2ljTm9kZTo6RW1pdHRlclR5cGUgZW1pdHRlciA9IG1fdm0tPmJ5dGVjb2Rl
SW50cmluc2ljUmVnaXN0cnkoKS5sb29rdXAoaWRlbnQpKQorICAgICAgICAgICAgaWYgKEJ5dGVj
b2RlSW50cmluc2ljTm9kZTo6RW1pdHRlclR5cGUgZW1pdHRlciA9IG1fdm0uYnl0ZWNvZGVJbnRy
aW5zaWNSZWdpc3RyeSgpLmxvb2t1cChpZGVudCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG5l
dyAobV9wYXJzZXJBcmVuYSkgQnl0ZWNvZGVJbnRyaW5zaWNOb2RlKEJ5dGVjb2RlSW50cmluc2lj
Tm9kZTo6VHlwZTo6Q29uc3RhbnQsIGxvY2F0aW9uLCBlbWl0dGVyLCBpZGVudCwgbnVsbHB0ciwg
c3RhcnQsIHN0YXJ0LCBlbmQpOwogICAgICAgICB9CiAKQEAgLTQ4Miw3ICs0ODIsNyBAQCBwdWJs
aWM6CiAgICAgICAgIGZ1bmN0aW9uSW5mby5ib2R5LT5zZXRMb2MoZnVuY3Rpb25JbmZvLnN0YXJ0
TGluZSwgZnVuY3Rpb25JbmZvLmVuZExpbmUsIGxvY2F0aW9uLnN0YXJ0T2Zmc2V0LCBsb2NhdGlv
bi5saW5lU3RhcnRPZmZzZXQpOwogICAgICAgICBmdW5jdGlvbkluZm8uYm9keS0+c2V0RWNtYU5h
bWUoKm5hbWUpOwogICAgICAgICBTb3VyY2VDb2RlIHNvdXJjZSA9IG1fc291cmNlQ29kZS0+c3Vi
RXhwcmVzc2lvbihmdW5jdGlvbkluZm8uc3RhcnRPZmZzZXQsIGZ1bmN0aW9uSW5mby5lbmRPZmZz
ZXQsIGZ1bmN0aW9uSW5mby5zdGFydExpbmUsIGZ1bmN0aW9uSW5mby5wYXJhbWV0ZXJzU3RhcnRD
b2x1bW4pOwotICAgICAgICBNZXRob2REZWZpbml0aW9uTm9kZSogbWV0aG9kRGVmID0gbmV3ICht
X3BhcnNlckFyZW5hKSBNZXRob2REZWZpbml0aW9uTm9kZShsb2NhdGlvbiwgbV92bS0+cHJvcGVy
dHlOYW1lcy0+bnVsbElkZW50aWZpZXIsIGZ1bmN0aW9uSW5mby5ib2R5LCBzb3VyY2UpOworICAg
ICAgICBNZXRob2REZWZpbml0aW9uTm9kZSogbWV0aG9kRGVmID0gbmV3IChtX3BhcnNlckFyZW5h
KSBNZXRob2REZWZpbml0aW9uTm9kZShsb2NhdGlvbiwgbV92bS5wcm9wZXJ0eU5hbWVzLT5udWxs
SWRlbnRpZmllciwgZnVuY3Rpb25JbmZvLmJvZHksIHNvdXJjZSk7CiAgICAgICAgIHJldHVybiBu
ZXcgKG1fcGFyc2VyQXJlbmEpIFByb3BlcnR5Tm9kZSgqbmFtZSwgbWV0aG9kRGVmLCB0eXBlLCBQ
cm9wZXJ0eU5vZGU6OlVua25vd24sIFN1cGVyQmluZGluZzo6TmVlZGVkLCB0YWcpOwogICAgIH0K
IApAQCAtNDkyLDE3ICs0OTIsMTcgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQobmFtZSk7CiAg
ICAgICAgIGZ1bmN0aW9uSW5mby5ib2R5LT5zZXRMb2MoZnVuY3Rpb25JbmZvLnN0YXJ0TGluZSwg
ZnVuY3Rpb25JbmZvLmVuZExpbmUsIGxvY2F0aW9uLnN0YXJ0T2Zmc2V0LCBsb2NhdGlvbi5saW5l
U3RhcnRPZmZzZXQpOwogICAgICAgICBTb3VyY2VDb2RlIHNvdXJjZSA9IG1fc291cmNlQ29kZS0+
c3ViRXhwcmVzc2lvbihmdW5jdGlvbkluZm8uc3RhcnRPZmZzZXQsIGZ1bmN0aW9uSW5mby5lbmRP
ZmZzZXQsIGZ1bmN0aW9uSW5mby5zdGFydExpbmUsIGZ1bmN0aW9uSW5mby5wYXJhbWV0ZXJzU3Rh
cnRDb2x1bW4pOwotICAgICAgICBNZXRob2REZWZpbml0aW9uTm9kZSogbWV0aG9kRGVmID0gbmV3
IChtX3BhcnNlckFyZW5hKSBNZXRob2REZWZpbml0aW9uTm9kZShsb2NhdGlvbiwgbV92bS0+cHJv
cGVydHlOYW1lcy0+bnVsbElkZW50aWZpZXIsIGZ1bmN0aW9uSW5mby5ib2R5LCBzb3VyY2UpOwor
ICAgICAgICBNZXRob2REZWZpbml0aW9uTm9kZSogbWV0aG9kRGVmID0gbmV3IChtX3BhcnNlckFy
ZW5hKSBNZXRob2REZWZpbml0aW9uTm9kZShsb2NhdGlvbiwgbV92bS5wcm9wZXJ0eU5hbWVzLT5u
dWxsSWRlbnRpZmllciwgZnVuY3Rpb25JbmZvLmJvZHksIHNvdXJjZSk7CiAgICAgICAgIHJldHVy
biBuZXcgKG1fcGFyc2VyQXJlbmEpIFByb3BlcnR5Tm9kZShuYW1lLCBtZXRob2REZWYsIHR5cGUs
IFByb3BlcnR5Tm9kZTo6VW5rbm93biwgU3VwZXJCaW5kaW5nOjpOZWVkZWQsIHRhZyk7CiAgICAg
fQogCi0gICAgTkVWRVJfSU5MSU5FIFByb3BlcnR5Tm9kZSogY3JlYXRlR2V0dGVyT3JTZXR0ZXJQ
cm9wZXJ0eShWTSogdm0sIFBhcnNlckFyZW5hJiBwYXJzZXJBcmVuYSwgY29uc3QgSlNUb2tlbkxv
Y2F0aW9uJiBsb2NhdGlvbiwgUHJvcGVydHlOb2RlOjpUeXBlIHR5cGUsIGJvb2wsCisgICAgTkVW
RVJfSU5MSU5FIFByb3BlcnR5Tm9kZSogY3JlYXRlR2V0dGVyT3JTZXR0ZXJQcm9wZXJ0eShWTSYg
dm0sIFBhcnNlckFyZW5hJiBwYXJzZXJBcmVuYSwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2Nh
dGlvbiwgUHJvcGVydHlOb2RlOjpUeXBlIHR5cGUsIGJvb2wsCiAgICAgICAgIGRvdWJsZSBuYW1l
LCBjb25zdCBQYXJzZXJGdW5jdGlvbkluZm88QVNUQnVpbGRlcj4mIGZ1bmN0aW9uSW5mbywgQ2xh
c3NFbGVtZW50VGFnIHRhZykKICAgICB7CiAgICAgICAgIGZ1bmN0aW9uSW5mby5ib2R5LT5zZXRM
b2MoZnVuY3Rpb25JbmZvLnN0YXJ0TGluZSwgZnVuY3Rpb25JbmZvLmVuZExpbmUsIGxvY2F0aW9u
LnN0YXJ0T2Zmc2V0LCBsb2NhdGlvbi5saW5lU3RhcnRPZmZzZXQpOwogICAgICAgICBjb25zdCBJ
ZGVudGlmaWVyJiBpZGVudCA9IHBhcnNlckFyZW5hLmlkZW50aWZpZXJBcmVuYSgpLm1ha2VOdW1l
cmljSWRlbnRpZmllcih2bSwgbmFtZSk7CiAgICAgICAgIFNvdXJjZUNvZGUgc291cmNlID0gbV9z
b3VyY2VDb2RlLT5zdWJFeHByZXNzaW9uKGZ1bmN0aW9uSW5mby5zdGFydE9mZnNldCwgZnVuY3Rp
b25JbmZvLmVuZE9mZnNldCwgZnVuY3Rpb25JbmZvLnN0YXJ0TGluZSwgZnVuY3Rpb25JbmZvLnBh
cmFtZXRlcnNTdGFydENvbHVtbik7Ci0gICAgICAgIE1ldGhvZERlZmluaXRpb25Ob2RlKiBtZXRo
b2REZWYgPSBuZXcgKG1fcGFyc2VyQXJlbmEpIE1ldGhvZERlZmluaXRpb25Ob2RlKGxvY2F0aW9u
LCB2bS0+cHJvcGVydHlOYW1lcy0+bnVsbElkZW50aWZpZXIsIGZ1bmN0aW9uSW5mby5ib2R5LCBz
b3VyY2UpOworICAgICAgICBNZXRob2REZWZpbml0aW9uTm9kZSogbWV0aG9kRGVmID0gbmV3ICht
X3BhcnNlckFyZW5hKSBNZXRob2REZWZpbml0aW9uTm9kZShsb2NhdGlvbiwgdm0ucHJvcGVydHlO
YW1lcy0+bnVsbElkZW50aWZpZXIsIGZ1bmN0aW9uSW5mby5ib2R5LCBzb3VyY2UpOwogICAgICAg
ICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBQcm9wZXJ0eU5vZGUoaWRlbnQsIG1ldGhvZERl
ZiwgdHlwZSwgUHJvcGVydHlOb2RlOjpVbmtub3duLCBTdXBlckJpbmRpbmc6Ok5lZWRlZCwgdGFn
KTsKICAgICB9CiAKQEAgLTUyMSw3ICs1MjEsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBy
ZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBQcm9wZXJ0eU5vZGUobm9kZSwgdHlwZSwgcHV0VHlw
ZSwgc3VwZXJCaW5kaW5nLCB0YWcpOwogICAgIH0KLSAgICBQcm9wZXJ0eU5vZGUqIGNyZWF0ZVBy
b3BlcnR5KFZNKiB2bSwgUGFyc2VyQXJlbmEmIHBhcnNlckFyZW5hLCBkb3VibGUgcHJvcGVydHlO
YW1lLCBFeHByZXNzaW9uTm9kZSogbm9kZSwgUHJvcGVydHlOb2RlOjpUeXBlIHR5cGUsIFByb3Bl
cnR5Tm9kZTo6UHV0VHlwZSBwdXRUeXBlLCBib29sLCBTdXBlckJpbmRpbmcgc3VwZXJCaW5kaW5n
LCBDbGFzc0VsZW1lbnRUYWcgdGFnKQorICAgIFByb3BlcnR5Tm9kZSogY3JlYXRlUHJvcGVydHko
Vk0mIHZtLCBQYXJzZXJBcmVuYSYgcGFyc2VyQXJlbmEsIGRvdWJsZSBwcm9wZXJ0eU5hbWUsIEV4
cHJlc3Npb25Ob2RlKiBub2RlLCBQcm9wZXJ0eU5vZGU6OlR5cGUgdHlwZSwgUHJvcGVydHlOb2Rl
OjpQdXRUeXBlIHB1dFR5cGUsIGJvb2wsIFN1cGVyQmluZGluZyBzdXBlckJpbmRpbmcsIENsYXNz
RWxlbWVudFRhZyB0YWcpCiAgICAgewogICAgICAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5h
KSBQcm9wZXJ0eU5vZGUocGFyc2VyQXJlbmEuaWRlbnRpZmllckFyZW5hKCkubWFrZU51bWVyaWNJ
ZGVudGlmaWVyKHZtLCBwcm9wZXJ0eU5hbWUpLCBub2RlLCB0eXBlLCBwdXRUeXBlLCBzdXBlckJp
bmRpbmcsIHRhZyk7CiAgICAgfQpAQCAtNTU4LDcgKzU1OCw3IEBAIHB1YmxpYzoKICAgICB7CiAg
ICAgICAgIEZ1bmNEZWNsTm9kZSogZGVjbCA9IG5ldyAobV9wYXJzZXJBcmVuYSkgRnVuY0RlY2xO
b2RlKGxvY2F0aW9uLCAqZnVuY3Rpb25JbmZvLm5hbWUsIGZ1bmN0aW9uSW5mby5ib2R5LAogICAg
ICAgICAgICAgbV9zb3VyY2VDb2RlLT5zdWJFeHByZXNzaW9uKGZ1bmN0aW9uSW5mby5zdGFydE9m
ZnNldCwgZnVuY3Rpb25JbmZvLmVuZE9mZnNldCwgZnVuY3Rpb25JbmZvLnN0YXJ0TGluZSwgZnVu
Y3Rpb25JbmZvLnBhcmFtZXRlcnNTdGFydENvbHVtbikpOwotICAgICAgICBpZiAoKmZ1bmN0aW9u
SW5mby5uYW1lID09IG1fdm0tPnByb3BlcnR5TmFtZXMtPmFyZ3VtZW50cykKKyAgICAgICAgaWYg
KCpmdW5jdGlvbkluZm8ubmFtZSA9PSBtX3ZtLnByb3BlcnR5TmFtZXMtPmFyZ3VtZW50cykKICAg
ICAgICAgICAgIHVzZXNBcmd1bWVudHMoKTsKICAgICAgICAgZnVuY3Rpb25JbmZvLmJvZHktPnNl
dExvYyhmdW5jdGlvbkluZm8uc3RhcnRMaW5lLCBmdW5jdGlvbkluZm8uZW5kTGluZSwgbG9jYXRp
b24uc3RhcnRPZmZzZXQsIGxvY2F0aW9uLmxpbmVTdGFydE9mZnNldCk7CiAgICAgICAgIHJldHVy
biBkZWNsOwpAQCAtMTEzMyw3ICsxMTMzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHN0YXRp
Y19jYXN0PENsYXNzRXhwck5vZGUqPihkZWZhdWx0VmFsdWUpLT5zZXRFY21hTmFtZShpZGVudCk7
CiAgICAgfQogCi0gICAgVk0qIG1fdm07CisgICAgVk0mIG1fdm07CiAgICAgUGFyc2VyQXJlbmEm
IG1fcGFyc2VyQXJlbmE7CiAgICAgU291cmNlQ29kZSogbV9zb3VyY2VDb2RlOwogICAgIFNjb3Bl
IG1fc2NvcGU7CkBAIC0xNDA1LDcgKzE0MDUsNyBAQCBFeHByZXNzaW9uTm9kZSogQVNUQnVpbGRl
cjo6bWFrZUZ1bmN0aW9uCiAgICAgaWYgKGZ1bmMtPmlzUmVzb2x2ZU5vZGUoKSkgewogICAgICAg
ICBSZXNvbHZlTm9kZSogcmVzb2x2ZSA9IHN0YXRpY19jYXN0PFJlc29sdmVOb2RlKj4oZnVuYyk7
CiAgICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIgPSByZXNvbHZlLT5pZGVudGlm
aWVyKCk7Ci0gICAgICAgIGlmIChpZGVudGlmaWVyID09IG1fdm0tPnByb3BlcnR5TmFtZXMtPmV2
YWwpIHsKKyAgICAgICAgaWYgKGlkZW50aWZpZXIgPT0gbV92bS5wcm9wZXJ0eU5hbWVzLT5ldmFs
KSB7CiAgICAgICAgICAgICB1c2VzRXZhbCgpOwogICAgICAgICAgICAgcmV0dXJuIG5ldyAobV9w
YXJzZXJBcmVuYSkgRXZhbEZ1bmN0aW9uQ2FsbE5vZGUobG9jYXRpb24sIGFyZ3MsIGRpdm90LCBk
aXZvdFN0YXJ0LCBkaXZvdEVuZCk7CiAgICAgICAgIH0KQEAgLTE0MjAsOSArMTQyMCw5IEBAIEV4
cHJlc3Npb25Ob2RlKiBBU1RCdWlsZGVyOjptYWtlRnVuY3Rpb24KICAgICBBU1NFUlQoZnVuYy0+
aXNEb3RBY2Nlc3Nvck5vZGUoKSk7CiAgICAgRG90QWNjZXNzb3JOb2RlKiBkb3QgPSBzdGF0aWNf
Y2FzdDxEb3RBY2Nlc3Nvck5vZGUqPihmdW5jKTsKICAgICBGdW5jdGlvbkNhbGxEb3ROb2RlKiBu
b2RlID0gbnVsbHB0cjsKLSAgICBpZiAoIXByZXZpb3VzQmFzZVdhc1N1cGVyICYmIChkb3QtPmlk
ZW50aWZpZXIoKSA9PSBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5jYWxsUHVi
bGljTmFtZSgpIHx8IGRvdC0+aWRlbnRpZmllcigpID09IG1fdm0tPnByb3BlcnR5TmFtZXMtPmJ1
aWx0aW5OYW1lcygpLmNhbGxQcml2YXRlTmFtZSgpKSkKKyAgICBpZiAoIXByZXZpb3VzQmFzZVdh
c1N1cGVyICYmIChkb3QtPmlkZW50aWZpZXIoKSA9PSBtX3ZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0
aW5OYW1lcygpLmNhbGxQdWJsaWNOYW1lKCkgfHwgZG90LT5pZGVudGlmaWVyKCkgPT0gbV92bS5w
cm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5jYWxsUHJpdmF0ZU5hbWUoKSkpCiAgICAgICAg
IG5vZGUgPSBuZXcgKG1fcGFyc2VyQXJlbmEpIENhbGxGdW5jdGlvbkNhbGxEb3ROb2RlKGxvY2F0
aW9uLCBkb3QtPmJhc2UoKSwgZG90LT5pZGVudGlmaWVyKCksIGFyZ3MsIGRpdm90LCBkaXZvdFN0
YXJ0LCBkaXZvdEVuZCwgY2FsbE9yQXBwbHlDaGlsZERlcHRoKTsKLSAgICBlbHNlIGlmICghcHJl
dmlvdXNCYXNlV2FzU3VwZXIgJiYgKGRvdC0+aWRlbnRpZmllcigpID09IG1fdm0tPnByb3BlcnR5
TmFtZXMtPmJ1aWx0aW5OYW1lcygpLmFwcGx5UHVibGljTmFtZSgpIHx8IGRvdC0+aWRlbnRpZmll
cigpID09IG1fdm0tPnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLmFwcGx5UHJpdmF0ZU5h
bWUoKSkpIHsKKyAgICBlbHNlIGlmICghcHJldmlvdXNCYXNlV2FzU3VwZXIgJiYgKGRvdC0+aWRl
bnRpZmllcigpID09IG1fdm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkuYXBwbHlQdWJs
aWNOYW1lKCkgfHwgZG90LT5pZGVudGlmaWVyKCkgPT0gbV92bS5wcm9wZXJ0eU5hbWVzLT5idWls
dGluTmFtZXMoKS5hcHBseVByaXZhdGVOYW1lKCkpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBUaGlz
IGNoZWNrIGlzIG9ubHkgbmVlZGVkIGJlY2F1c2Ugd2UgaGF2ZW4ndCB0YXVnaHQgdGhlIGJ5dGVj
b2RlIGdlbmVyYXRvciB0byBpbmxpbmUKICAgICAgICAgLy8gUmVmbGVjdC5hcHBseSB5ZXQuIFNl
ZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkwNjY4LgogICAgICAg
ICBpZiAoIWRvdC0+YmFzZSgpLT5pc1Jlc29sdmVOb2RlKCkgfHwgc3RhdGljX2Nhc3Q8UmVzb2x2
ZU5vZGUqPihkb3QtPmJhc2UoKSktPmlkZW50aWZpZXIoKSAhPSAiUmVmbGVjdCIpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0xleGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0xleGVyLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9MZXhlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRl
biAocG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTcgQXBwbGUgSW5j
LiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE5IEFwcGxl
IEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgQ2FtZXJv
biBad2FyaWNoIChjd3p3YXJpY2hAdXdhdGVybG9vLmNhKQogICogIENvcHlyaWdodCAoQykgMjAx
MCBab2x0YW4gSGVyY3plZyAoemhlcmN6ZWdAaW5mLnUtc3plZ2VkLmh1KQogICogIENvcHlyaWdo
dCAoQykgMjAxMiBNYXRoaWFzIEJ5bmVucyAobWF0aGlhc0BxaXdpLmJlKQpAQCAtNDkzLDcgKzQ5
Myw3IEBAIHN0YXRpYyBjb25zdGV4cHIgY29uc3QgTENoYXIgc2luZ2xlQ2hhcmEKIH07CiAKIHRl
bXBsYXRlIDx0eXBlbmFtZSBUPgotTGV4ZXI8VD46OkxleGVyKFZNKiB2bSwgSlNQYXJzZXJCdWls
dGluTW9kZSBidWlsdGluTW9kZSwgSlNQYXJzZXJTY3JpcHRNb2RlIHNjcmlwdE1vZGUpCitMZXhl
cjxUPjo6TGV4ZXIoVk0mIHZtLCBKU1BhcnNlckJ1aWx0aW5Nb2RlIGJ1aWx0aW5Nb2RlLCBKU1Bh
cnNlclNjcmlwdE1vZGUgc2NyaXB0TW9kZSkKICAgICA6IG1faXNSZXBhcnNpbmdGdW5jdGlvbihm
YWxzZSkKICAgICAsIG1fdm0odm0pCiAgICAgLCBtX3BhcnNpbmdCdWlsdGluRnVuY3Rpb24oYnVp
bHRpbk1vZGUgPT0gSlNQYXJzZXJCdWlsdGluTW9kZTo6QnVpbHRpbikKQEAgLTk2MCwxNCArOTYw
LDE0IEBAIHRlbXBsYXRlIDxib29sIHNob3VsZENyZWF0ZUlkZW50aWZpZXI+IEEKICAgICAgICAg
aW50IGlkZW50aWZpZXJMZW5ndGggPSBjdXJyZW50U291cmNlUHRyKCkgLSBpZGVudGlmaWVyU3Rh
cnQ7CiAgICAgICAgIGlkZW50ID0gbWFrZUlkZW50aWZpZXIoaWRlbnRpZmllclN0YXJ0LCBpZGVu
dGlmaWVyTGVuZ3RoKTsKICAgICAgICAgaWYgKG1fcGFyc2luZ0J1aWx0aW5GdW5jdGlvbikgewot
ICAgICAgICAgICAgaWYgKCFpc1NhZmVCdWlsdGluSWRlbnRpZmllcigqbV92bSwgaWRlbnQpICYm
ICFpc1ByaXZhdGVOYW1lKSB7CisgICAgICAgICAgICBpZiAoIWlzU2FmZUJ1aWx0aW5JZGVudGlm
aWVyKG1fdm0sIGlkZW50KSAmJiAhaXNQcml2YXRlTmFtZSkgewogICAgICAgICAgICAgICAgIG1f
bGV4RXJyb3JNZXNzYWdlID0gbWFrZVN0cmluZygiVGhlIHVzZSBvZiAnIiwgaWRlbnQtPnN0cmlu
ZygpLCAiJyBpcyBkaXNhbGxvd2VkIGluIGJ1aWx0aW4gZnVuY3Rpb25zLiIpOwogICAgICAgICAg
ICAgICAgIHJldHVybiBFUlJPUlRPSzsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChp
c1ByaXZhdGVOYW1lKQotICAgICAgICAgICAgICAgIGlkZW50ID0gJm1fYXJlbmEtPm1ha2VJZGVu
dGlmaWVyKG1fdm0sIG1fdm0tPnByb3BlcnR5TmFtZXMtPmxvb2tVcFByaXZhdGVOYW1lKCppZGVu
dCkpOwotICAgICAgICAgICAgZWxzZSBpZiAoKmlkZW50ID09IG1fdm0tPnByb3BlcnR5TmFtZXMt
PnVuZGVmaW5lZEtleXdvcmQpCi0gICAgICAgICAgICAgICAgdG9rZW5EYXRhLT5pZGVudCA9ICZt
X3ZtLT5wcm9wZXJ0eU5hbWVzLT51bmRlZmluZWRQcml2YXRlTmFtZTsKKyAgICAgICAgICAgICAg
ICBpZGVudCA9ICZtX2FyZW5hLT5tYWtlSWRlbnRpZmllcihtX3ZtLCBtX3ZtLnByb3BlcnR5TmFt
ZXMtPmxvb2tVcFByaXZhdGVOYW1lKCppZGVudCkpOworICAgICAgICAgICAgZWxzZSBpZiAoKmlk
ZW50ID09IG1fdm0ucHJvcGVydHlOYW1lcy0+dW5kZWZpbmVkS2V5d29yZCkKKyAgICAgICAgICAg
ICAgICB0b2tlbkRhdGEtPmlkZW50ID0gJm1fdm0ucHJvcGVydHlOYW1lcy0+dW5kZWZpbmVkUHJp
dmF0ZU5hbWU7CiAgICAgICAgICAgICBpZiAoIWlkZW50KQogICAgICAgICAgICAgICAgIHJldHVy
biBJTlZBTElEX1BSSVZBVEVfTkFNRV9FUlJPUlRPSzsKICAgICAgICAgfQpAQCAtMTAzOCwxNCAr
MTAzOCwxNCBAQCB0ZW1wbGF0ZSA8Ym9vbCBzaG91bGRDcmVhdGVJZGVudGlmaWVyPiBBCiAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgIGlkZW50ID0gbWFrZUlkZW50aWZpZXIoaWRlbnRpZmllclN0
YXJ0LCBpZGVudGlmaWVyTGVuZ3RoKTsKICAgICAgICAgaWYgKG1fcGFyc2luZ0J1aWx0aW5GdW5j
dGlvbikgewotICAgICAgICAgICAgaWYgKCFpc1NhZmVCdWlsdGluSWRlbnRpZmllcigqbV92bSwg
aWRlbnQpICYmICFpc1ByaXZhdGVOYW1lKSB7CisgICAgICAgICAgICBpZiAoIWlzU2FmZUJ1aWx0
aW5JZGVudGlmaWVyKG1fdm0sIGlkZW50KSAmJiAhaXNQcml2YXRlTmFtZSkgewogICAgICAgICAg
ICAgICAgIG1fbGV4RXJyb3JNZXNzYWdlID0gbWFrZVN0cmluZygiVGhlIHVzZSBvZiAnIiwgaWRl
bnQtPnN0cmluZygpLCAiJyBpcyBkaXNhbGxvd2VkIGluIGJ1aWx0aW4gZnVuY3Rpb25zLiIpOwog
ICAgICAgICAgICAgICAgIHJldHVybiBFUlJPUlRPSzsKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIGlmIChpc1ByaXZhdGVOYW1lKQotICAgICAgICAgICAgICAgIGlkZW50ID0gJm1fYXJlbmEt
Pm1ha2VJZGVudGlmaWVyKG1fdm0sIG1fdm0tPnByb3BlcnR5TmFtZXMtPmxvb2tVcFByaXZhdGVO
YW1lKCppZGVudCkpOwotICAgICAgICAgICAgZWxzZSBpZiAoKmlkZW50ID09IG1fdm0tPnByb3Bl
cnR5TmFtZXMtPnVuZGVmaW5lZEtleXdvcmQpCi0gICAgICAgICAgICAgICAgdG9rZW5EYXRhLT5p
ZGVudCA9ICZtX3ZtLT5wcm9wZXJ0eU5hbWVzLT51bmRlZmluZWRQcml2YXRlTmFtZTsKKyAgICAg
ICAgICAgICAgICBpZGVudCA9ICZtX2FyZW5hLT5tYWtlSWRlbnRpZmllcihtX3ZtLCBtX3ZtLnBy
b3BlcnR5TmFtZXMtPmxvb2tVcFByaXZhdGVOYW1lKCppZGVudCkpOworICAgICAgICAgICAgZWxz
ZSBpZiAoKmlkZW50ID09IG1fdm0ucHJvcGVydHlOYW1lcy0+dW5kZWZpbmVkS2V5d29yZCkKKyAg
ICAgICAgICAgICAgICB0b2tlbkRhdGEtPmlkZW50ID0gJm1fdm0ucHJvcGVydHlOYW1lcy0+dW5k
ZWZpbmVkUHJpdmF0ZU5hbWU7CiAgICAgICAgICAgICBpZiAoIWlkZW50KQogICAgICAgICAgICAg
ICAgIHJldHVybiBJTlZBTElEX1BSSVZBVEVfTkFNRV9FUlJPUlRPSzsKICAgICAgICAgfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9MZXhlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTGV4ZXIuaAkocmV2aXNpb24gMjQ5MTI4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9MZXhlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4g
KHBvcnRlbkBrZGUub3JnKQotICogIENvcHlyaWdodCAoQykgMjAwMiwgMjAwMywgMjAwNCwgMjAw
NSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMSwgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAyLTIwMTkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogIENvcHlyaWdodCAoQykgMjAxMCBab2x0YW4gSGVy
Y3plZyAoemhlcmN6ZWdAaW5mLnUtc3plZ2VkLmh1KQogICoKICAqICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC01MCw3ICs1
MCw3IEBAIGNsYXNzIExleGVyIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIAogcHVi
bGljOgotICAgIExleGVyKFZNKiwgSlNQYXJzZXJCdWlsdGluTW9kZSwgSlNQYXJzZXJTY3JpcHRN
b2RlKTsKKyAgICBMZXhlcihWTSYsIEpTUGFyc2VyQnVpbHRpbk1vZGUsIEpTUGFyc2VyU2NyaXB0
TW9kZSk7CiAgICAgfkxleGVyKCk7CiAKICAgICAvLyBDaGFyYWN0ZXIgbWFuaXB1bGF0aW9uIGZ1
bmN0aW9ucy4KQEAgLTIyNyw3ICsyMjcsNyBAQCBwcml2YXRlOgogCiAgICAgSWRlbnRpZmllckFy
ZW5hKiBtX2FyZW5hOwogCi0gICAgVk0qIG1fdm07CisgICAgVk0mIG1fdm07CiAgICAgYm9vbCBt
X3BhcnNpbmdCdWlsdGluRnVuY3Rpb247CiAgICAgSlNQYXJzZXJTY3JpcHRNb2RlIG1fc2NyaXB0
TW9kZTsKIH07CkBAIC0zOTIsNyArMzkyLDcgQEAgQUxXQVlTX0lOTElORSBKU1Rva2VuVHlwZSBM
ZXhlcjxUPjo6bGV4RQogICAgIHRva2VuUmVjb3JkLT5tX2VuZFBvc2l0aW9uID0gY3VycmVudFBv
c2l0aW9uKCk7CiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogICAgIGlmIChtX3BhcnNpbmdCdWlsdGlu
RnVuY3Rpb24pIHsKLSAgICAgICAgaWYgKCFpc1NhZmVCdWlsdGluSWRlbnRpZmllcigqbV92bSwg
dG9rZW5EYXRhLT5pZGVudCkpCisgICAgICAgIGlmICghaXNTYWZlQnVpbHRpbklkZW50aWZpZXIo
bV92bSwgdG9rZW5EYXRhLT5pZGVudCkpCiAgICAgICAgICAgICByZXR1cm4gRVJST1JUT0s7CiAg
ICAgfQogI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL01vZHVsZUFu
YWx5emVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL01v
ZHVsZUFuYWx5emVyLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3BhcnNlci9Nb2R1bGVBbmFseXplci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNiw4ICsz
Niw4IEBAIG5hbWVzcGFjZSBKU0MgewogCiAKIE1vZHVsZUFuYWx5emVyOjpNb2R1bGVBbmFseXpl
cihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIG1vZHVsZUtleSwgY29uc3QgU291
cmNlQ29kZSYgc291cmNlQ29kZSwgY29uc3QgVmFyaWFibGVFbnZpcm9ubWVudCYgZGVjbGFyZWRW
YXJpYWJsZXMsIGNvbnN0IFZhcmlhYmxlRW52aXJvbm1lbnQmIGxleGljYWxWYXJpYWJsZXMpCi0g
ICAgOiBtX3ZtKCZleGVjLT52bSgpKQotICAgICwgbV9tb2R1bGVSZWNvcmQoKm1fdm0sIEpTTW9k
dWxlUmVjb3JkOjpjcmVhdGUoZXhlYywgKm1fdm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3Qo
KS0+bW9kdWxlUmVjb3JkU3RydWN0dXJlKCksIG1vZHVsZUtleSwgc291cmNlQ29kZSwgZGVjbGFy
ZWRWYXJpYWJsZXMsIGxleGljYWxWYXJpYWJsZXMpKQorICAgIDogbV92bShleGVjLT52bSgpKQor
ICAgICwgbV9tb2R1bGVSZWNvcmQobV92bSwgSlNNb2R1bGVSZWNvcmQ6OmNyZWF0ZShleGVjLCBt
X3ZtLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPm1vZHVsZVJlY29yZFN0cnVjdHVyZSgp
LCBtb2R1bGVLZXksIHNvdXJjZUNvZGUsIGRlY2xhcmVkVmFyaWFibGVzLCBsZXhpY2FsVmFyaWFi
bGVzKSkKIHsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Nb2R1bGVB
bmFseXplci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTW9k
dWxlQW5hbHl6ZXIuaAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3BhcnNlci9Nb2R1bGVBbmFseXplci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM5LDE0ICszOSwxNCBAQCBw
dWJsaWM6CiAKICAgICBKU01vZHVsZVJlY29yZCogYW5hbHl6ZShNb2R1bGVQcm9ncmFtTm9kZSYp
OwogCi0gICAgVk0mIHZtKCkgeyByZXR1cm4gKm1fdm07IH0KKyAgICBWTSYgdm0oKSB7IHJldHVy
biBtX3ZtOyB9CiAKICAgICBKU01vZHVsZVJlY29yZCogbW9kdWxlUmVjb3JkKCkgeyByZXR1cm4g
bV9tb2R1bGVSZWNvcmQuZ2V0KCk7IH0KIAogcHJpdmF0ZToKICAgICB2b2lkIGV4cG9ydFZhcmlh
YmxlKE1vZHVsZVByb2dyYW1Ob2RlJiwgY29uc3QgUmVmUHRyPFVuaXF1ZWRTdHJpbmdJbXBsPiYs
IGNvbnN0IFZhcmlhYmxlRW52aXJvbm1lbnRFbnRyeSYpOwogCi0gICAgVk0qIG1fdm07CisgICAg
Vk0mIG1fdm07CiAgICAgU3Ryb25nPEpTTW9kdWxlUmVjb3JkPiBtX21vZHVsZVJlY29yZDsKIH07
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5jcHAJKHJldmlzaW9u
IDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTI2LDcgKzEyNiw3IEBAIHZvaWQgUGFyc2VyPExleGVyVHlwZT46Omxv
Z0Vycm9yKGJvb2wgc2gKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIExleGVyVHlwZT4KLVBhcnNl
cjxMZXhlclR5cGU+OjpQYXJzZXIoVk0qIHZtLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIEpT
UGFyc2VyQnVpbHRpbk1vZGUgYnVpbHRpbk1vZGUsIEpTUGFyc2VyU3RyaWN0TW9kZSBzdHJpY3RN
b2RlLCBKU1BhcnNlclNjcmlwdE1vZGUgc2NyaXB0TW9kZSwgU291cmNlUGFyc2VNb2RlIHBhcnNl
TW9kZSwgU3VwZXJCaW5kaW5nIHN1cGVyQmluZGluZywgQ29uc3RydWN0b3JLaW5kIGRlZmF1bHRD
b25zdHJ1Y3RvcktpbmQsIERlcml2ZWRDb250ZXh0VHlwZSBkZXJpdmVkQ29udGV4dFR5cGUsIGJv
b2wgaXNFdmFsQ29udGV4dCwgRXZhbENvbnRleHRUeXBlIGV2YWxDb250ZXh0VHlwZSwgRGVidWdn
ZXJQYXJzZURhdGEqIGRlYnVnZ2VyUGFyc2VEYXRhKQorUGFyc2VyPExleGVyVHlwZT46OlBhcnNl
cihWTSYgdm0sIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgSlNQYXJzZXJCdWlsdGluTW9kZSBi
dWlsdGluTW9kZSwgSlNQYXJzZXJTdHJpY3RNb2RlIHN0cmljdE1vZGUsIEpTUGFyc2VyU2NyaXB0
TW9kZSBzY3JpcHRNb2RlLCBTb3VyY2VQYXJzZU1vZGUgcGFyc2VNb2RlLCBTdXBlckJpbmRpbmcg
c3VwZXJCaW5kaW5nLCBDb25zdHJ1Y3RvcktpbmQgZGVmYXVsdENvbnN0cnVjdG9yS2luZCwgRGVy
aXZlZENvbnRleHRUeXBlIGRlcml2ZWRDb250ZXh0VHlwZSwgYm9vbCBpc0V2YWxDb250ZXh0LCBF
dmFsQ29udGV4dFR5cGUgZXZhbENvbnRleHRUeXBlLCBEZWJ1Z2dlclBhcnNlRGF0YSogZGVidWdn
ZXJQYXJzZURhdGEpCiAgICAgOiBtX3ZtKHZtKQogICAgICwgbV9zb3VyY2UoJnNvdXJjZSkKICAg
ICAsIG1faGFzU3RhY2tPdmVyZmxvdyhmYWxzZSkKQEAgLTE0Niw3ICsxNDYsNyBAQCBQYXJzZXI8
TGV4ZXJUeXBlPjo6UGFyc2VyKFZNKiB2bSwgY29uc3QgCiAgICAgbV90b2tlbi5tX2xvY2F0aW9u
LnN0YXJ0T2Zmc2V0ID0gc291cmNlLnN0YXJ0T2Zmc2V0KCk7CiAgICAgbV90b2tlbi5tX2xvY2F0
aW9uLmVuZE9mZnNldCA9IHNvdXJjZS5zdGFydE9mZnNldCgpOwogICAgIG1fdG9rZW4ubV9sb2Nh
dGlvbi5saW5lU3RhcnRPZmZzZXQgPSBzb3VyY2Uuc3RhcnRPZmZzZXQoKTsKLSAgICBtX2Z1bmN0
aW9uQ2FjaGUgPSB2bS0+YWRkU291cmNlUHJvdmlkZXJDYWNoZShzb3VyY2UucHJvdmlkZXIoKSk7
CisgICAgbV9mdW5jdGlvbkNhY2hlID0gdm0uYWRkU291cmNlUHJvdmlkZXJDYWNoZShzb3VyY2Uu
cHJvdmlkZXIoKSk7CiAgICAgbV9leHByZXNzaW9uRXJyb3JDbGFzc2lmaWVyID0gbnVsbHB0cjsK
IAogICAgIFNjb3BlUmVmIHNjb3BlID0gcHVzaFNjb3BlKCk7CkBAIC0yMTIsNyArMjEyLDcgQEAg
U3RyaW5nIFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUlubmVyKGNvbgogewogICAgIFN0cmluZyBw
YXJzZUVycm9yID0gU3RyaW5nKCk7CiAKLSAgICBBU1RCdWlsZGVyIGNvbnRleHQoY29uc3RfY2Fz
dDxWTSo+KG1fdm0pLCBtX3BhcnNlckFyZW5hLCBjb25zdF9jYXN0PFNvdXJjZUNvZGUqPihtX3Nv
dXJjZSkpOworICAgIEFTVEJ1aWxkZXIgY29udGV4dChjb25zdF9jYXN0PFZNJj4obV92bSksIG1f
cGFyc2VyQXJlbmEsIGNvbnN0X2Nhc3Q8U291cmNlQ29kZSo+KG1fc291cmNlKSk7CiAgICAgU2Nv
cGVSZWYgc2NvcGUgPSBjdXJyZW50U2NvcGUoKTsKICAgICBzY29wZS0+c2V0SXNMZXhpY2FsU2Nv
cGUoKTsKICAgICBTZXRGb3JTY29wZTxGdW5jdGlvblBhcnNlUGhhc2U+IGZ1bmN0aW9uUGFyc2VQ
aGFzZVBvaXNvbmVyKG1fcGFyc2VyU3RhdGUuZnVuY3Rpb25QYXJzZVBoYXNlLCBGdW5jdGlvblBh
cnNlUGhhc2U6OkJvZHkpOwpAQCAtMjc2LDcgKzI3Niw3IEBAIFN0cmluZyBQYXJzZXI8TGV4ZXJU
eXBlPjo6cGFyc2VJbm5lcihjb24KICAgICAgICAgdmFyRGVjbGFyYXRpb25zLm1hcmtWYXJpYWJs
ZUFzQ2FwdHVyZWQoZW50cnkpOwogCiAgICAgaWYgKGlzR2VuZXJhdG9yV3JhcHBlclBhcnNlTW9k
ZShwYXJzZU1vZGUpIHx8IGlzQXN5bmNGdW5jdGlvbk9yQXN5bmNHZW5lcmF0b3JXcmFwcGVyUGFy
c2VNb2RlKHBhcnNlTW9kZSkpIHsKLSAgICAgICAgaWYgKHNjb3BlLT51c2VkVmFyaWFibGVzQ29u
dGFpbnMobV92bS0+cHJvcGVydHlOYW1lcy0+YXJndW1lbnRzLmltcGwoKSkpCisgICAgICAgIGlm
IChzY29wZS0+dXNlZFZhcmlhYmxlc0NvbnRhaW5zKG1fdm0ucHJvcGVydHlOYW1lcy0+YXJndW1l
bnRzLmltcGwoKSkpCiAgICAgICAgICAgICBjb250ZXh0LnByb3BhZ2F0ZUFyZ3VtZW50c1VzZSgp
OwogICAgIH0KIApAQCAtMjk0LDcgKzI5NCw3IEBAIFN0cmluZyBQYXJzZXI8TGV4ZXJUeXBlPjo6
cGFyc2VJbm5lcihjb24KICAgICAgICAgY29uc3QgSGFzaFNldDxVbmlxdWVkU3RyaW5nSW1wbCo+
JiBjbG9zZWRWYXJpYWJsZUNhbmRpZGF0ZXMgPSBzY29wZS0+Y2xvc2VkVmFyaWFibGVDYW5kaWRh
dGVzKCk7CiAgICAgICAgIGZvciAoVW5pcXVlZFN0cmluZ0ltcGwqIGNhbmRpZGF0ZSA6IGNsb3Nl
ZFZhcmlhYmxlQ2FuZGlkYXRlcykgewogICAgICAgICAgICAgLy8gRklYTUU6IFdlIGFsbG93IGFz
eW5jIHRvIGxlYWsgYmVjYXVzZSBpdCBhcHBlYXJpbmcgYXMgYSBjbG9zZWQgdmFyaWFibGUgaXMg
YSBzaWRlIGVmZmVjdCBvZiB0cnlpbmcgdG8gcGFyc2UgYXN5bmMgYXJyb3cgZnVuY3Rpb25zLgot
ICAgICAgICAgICAgaWYgKCFsZXhpY2FsVmFyaWFibGVzLmNvbnRhaW5zKGNhbmRpZGF0ZSkgJiYg
IXZhckRlY2xhcmF0aW9ucy5jb250YWlucyhjYW5kaWRhdGUpICYmICFjYW5kaWRhdGUtPmlzU3lt
Ym9sKCkgJiYgY2FuZGlkYXRlICE9IG1fdm0tPnByb3BlcnR5TmFtZXMtPmFzeW5jLmltcGwoKSkg
eworICAgICAgICAgICAgaWYgKCFsZXhpY2FsVmFyaWFibGVzLmNvbnRhaW5zKGNhbmRpZGF0ZSkg
JiYgIXZhckRlY2xhcmF0aW9ucy5jb250YWlucyhjYW5kaWRhdGUpICYmICFjYW5kaWRhdGUtPmlz
U3ltYm9sKCkgJiYgY2FuZGlkYXRlICE9IG1fdm0ucHJvcGVydHlOYW1lcy0+YXN5bmMuaW1wbCgp
KSB7CiAgICAgICAgICAgICAgICAgZGF0YUxvZygiQmFkIGdsb2JhbCBjYXB0dXJlIGluIGJ1aWx0
aW46ICciLCBjYW5kaWRhdGUsICInXG4iKTsKICAgICAgICAgICAgICAgICBkYXRhTG9nKG1fc291
cmNlLT52aWV3KCkpOwogICAgICAgICAgICAgICAgIENSQVNIKCk7CkBAIC0zMzAsNyArMzMwLDcg
QEAgYm9vbCBQYXJzZXI8TGV4ZXJUeXBlPjo6aXNBcnJvd0Z1bmN0aW9uUAogICAgICAgICAgICAg
bmV4dCgpOwogICAgICAgICAgICAgaXNBcnJvd0Z1bmN0aW9uID0gbWF0Y2goQVJST1dGVU5DVElP
Tik7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBTeW50YXhDaGVja2VyIHN5bnRheENo
ZWNrZXIoY29uc3RfY2FzdDxWTSo+KG1fdm0pLCBtX2xleGVyLmdldCgpKTsKKyAgICAgICAgICAg
IFN5bnRheENoZWNrZXIgc3ludGF4Q2hlY2tlcihjb25zdF9jYXN0PFZNJj4obV92bSksIG1fbGV4
ZXIuZ2V0KCkpOwogICAgICAgICAgICAgLy8gV2UgbWFrZSBmYWtlIHNjb3BlLCBvdGhlcndpc2Ug
cGFyc2VGb3JtYWxQYXJhbWV0ZXJzIHdpbGwgYWRkIHZhcmlhYmxlIHRvIGN1cnJlbnQgc2NvcGUg
dGhhdCBsZWFkIHRvIGVycm9ycwogICAgICAgICAgICAgQXV0b1BvcFNjb3BlUmVmIGZha2VTY29w
ZSh0aGlzLCBwdXNoU2NvcGUoKSk7CiAgICAgICAgICAgICBmYWtlU2NvcGUtPnNldFNvdXJjZVBh
cnNlTW9kZShTb3VyY2VQYXJzZU1vZGU6OkFycm93RnVuY3Rpb25Nb2RlKTsKQEAgLTM3NywxOSAr
Mzc3LDE5IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVNvdXJjZUUKICAgICAg
ICAgaWYgKHNob3VsZENoZWNrRm9yVXNlU3RyaWN0KSB7CiAgICAgICAgICAgICBpZiAoZGlyZWN0
aXZlKSB7CiAgICAgICAgICAgICAgICAgLy8gInVzZSBzdHJpY3QiIG11c3QgYmUgdGhlIGV4YWN0
IGxpdGVyYWwgd2l0aG91dCBlc2NhcGUgc2VxdWVuY2VzIG9yIGxpbmUgY29udGludWF0aW9uLgot
ICAgICAgICAgICAgICAgIGlmIChkaXJlY3RpdmVMaXRlcmFsTGVuZ3RoID09IGxlbmd0aE9mVXNl
U3RyaWN0TGl0ZXJhbCAmJiBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT51c2VTdHJpY3RJZGVudGlmaWVy
ID09ICpkaXJlY3RpdmUpIHsKKyAgICAgICAgICAgICAgICBpZiAoZGlyZWN0aXZlTGl0ZXJhbExl
bmd0aCA9PSBsZW5ndGhPZlVzZVN0cmljdExpdGVyYWwgJiYgbV92bS5wcm9wZXJ0eU5hbWVzLT51
c2VTdHJpY3RJZGVudGlmaWVyID09ICpkaXJlY3RpdmUpIHsKICAgICAgICAgICAgICAgICAgICAg
c2V0U3RyaWN0TW9kZSgpOwogICAgICAgICAgICAgICAgICAgICBzaG91bGRDaGVja0ZvclVzZVN0
cmljdCA9IGZhbHNlOyAvLyBXZSBzYXcgInVzZSBzdHJpY3QiLCB0aGVyZSBpcyBubyBuZWVkIHRv
IGtlZXAgY2hlY2tpbmcgZm9yIGl0LgogICAgICAgICAgICAgICAgICAgICBpZiAoIWlzVmFsaWRT
dHJpY3RNb2RlKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX3BhcnNlclN0YXRl
Lmxhc3RGdW5jdGlvbk5hbWUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobV92
bS0+cHJvcGVydHlOYW1lcy0+YXJndW1lbnRzID09ICptX3BhcnNlclN0YXRlLmxhc3RGdW5jdGlv
bk5hbWUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1fdm0ucHJvcGVydHlOYW1l
cy0+YXJndW1lbnRzID09ICptX3BhcnNlclN0YXRlLmxhc3RGdW5jdGlvbk5hbWUpCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNlbWFudGljRmFpbCgiQ2Fubm90IG5hbWUgYSBmdW5j
dGlvbiAnYXJndW1lbnRzJyBpbiBzdHJpY3QgbW9kZSIpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5ldmFsID09ICptX3BhcnNlclN0YXRlLmxh
c3RGdW5jdGlvbk5hbWUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1fdm0ucHJv
cGVydHlOYW1lcy0+ZXZhbCA9PSAqbV9wYXJzZXJTdGF0ZS5sYXN0RnVuY3Rpb25OYW1lKQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZW1hbnRpY0ZhaWwoIkNhbm5vdCBuYW1lIGEg
ZnVuY3Rpb24gJ2V2YWwnIGluIHN0cmljdCBtb2RlIik7CiAgICAgICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzRGVjbGFyZWRWYXJpYWJsZShtX3Zt
LT5wcm9wZXJ0eU5hbWVzLT5hcmd1bWVudHMpKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KGhhc0RlY2xhcmVkVmFyaWFibGUobV92bS5wcm9wZXJ0eU5hbWVzLT5hcmd1bWVudHMpKQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNlbWFudGljRmFpbCgiQ2Fubm90IGRlY2xhcmUgYSB2
YXJpYWJsZSBuYW1lZCAnYXJndW1lbnRzJyBpbiBzdHJpY3QgbW9kZSIpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKGhhc0RlY2xhcmVkVmFyaWFibGUobV92bS0+cHJvcGVydHlOYW1lcy0+
ZXZhbCkpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzRGVjbGFyZWRWYXJpYWJsZSht
X3ZtLnByb3BlcnR5TmFtZXMtPmV2YWwpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNl
bWFudGljRmFpbCgiQ2Fubm90IGRlY2xhcmUgYSB2YXJpYWJsZSBuYW1lZCAnZXZhbCcgaW4gc3Ry
aWN0IG1vZGUiKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHNlbWFudGljRmFpbElmVHJ1ZShj
dXJyZW50U2NvcGUoKS0+aGFzTm9uU2ltcGxlUGFyYW1ldGVyTGlzdCgpLCAiJ3VzZSBzdHJpY3Qn
IGRpcmVjdGl2ZSBub3QgYWxsb3dlZCBpbnNpZGUgYSBmdW5jdGlvbiB3aXRoIGEgbm9uLXNpbXBs
ZSBwYXJhbWV0ZXIgbGlzdCIpOwogICAgICAgICAgICAgICAgICAgICAgICAgc2VtYW50aWNGYWls
SWZGYWxzZShpc1ZhbGlkU3RyaWN0TW9kZSgpLCAiSW52YWxpZCBwYXJhbWV0ZXJzIG9yIGZ1bmN0
aW9uIG5hbWUgaW4gc3RyaWN0IG1vZGUiKTsKQEAgLTQyMSw3ICs0MjEsNyBAQCB0ZW1wbGF0ZSA8
dHlwZW5hbWUgTGV4ZXJUeXBlPgogdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU291
cmNlRWxlbWVudHMgUGFyc2VyPExleGVyVHlwZT46OnBhcnNlTW9kdWxlU291cmNlRWxlbWVudHMo
VHJlZUJ1aWxkZXImIGNvbnRleHQsIFNvdXJjZVBhcnNlTW9kZSBwYXJzZU1vZGUpCiB7CiAgICAg
VHJlZVNvdXJjZUVsZW1lbnRzIHNvdXJjZUVsZW1lbnRzID0gY29udGV4dC5jcmVhdGVTb3VyY2VF
bGVtZW50cygpOwotICAgIFN5bnRheENoZWNrZXIgc3ludGF4Q2hlY2tlcihjb25zdF9jYXN0PFZN
Kj4obV92bSksIG1fbGV4ZXIuZ2V0KCkpOworICAgIFN5bnRheENoZWNrZXIgc3ludGF4Q2hlY2tl
cihjb25zdF9jYXN0PFZNJj4obV92bSksIG1fbGV4ZXIuZ2V0KCkpOwogCiAgICAgd2hpbGUgKHRy
dWUpIHsKICAgICAgICAgVHJlZVN0YXRlbWVudCBzdGF0ZW1lbnQgPSAwOwpAQCAtNTAwLDcgKzUw
MCw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVNvdXJjZUUKICAgICBpbnQg
cGFyYW1ldGVyc1N0YXJ0ID0gbV90b2tlbi5tX2xvY2F0aW9uLnN0YXJ0T2Zmc2V0OwogCiAgICAg
UGFyc2VyRnVuY3Rpb25JbmZvPFRyZWVCdWlsZGVyPiBpbmZvOwotICAgIGluZm8ubmFtZSA9ICZt
X3ZtLT5wcm9wZXJ0eU5hbWVzLT5udWxsSWRlbnRpZmllcjsKKyAgICBpbmZvLm5hbWUgPSAmbV92
bS5wcm9wZXJ0eU5hbWVzLT5udWxsSWRlbnRpZmllcjsKICAgICBjcmVhdGVHZW5lcmF0b3JQYXJh
bWV0ZXJzKGNvbnRleHQsIGluZm8ucGFyYW1ldGVyQ291bnQpOwogICAgIGluZm8uc3RhcnRPZmZz
ZXQgPSBwYXJhbWV0ZXJzU3RhcnQ7CiAgICAgaW5mby5zdGFydExpbmUgPSB0b2tlbkxpbmUoKTsK
QEAgLTUxMSw3ICs1MTEsNyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTb3Vy
Y2VFCiAgICAgICAgIGdlbmVyYXRvckJvZHlTY29wZS0+c2V0Q29uc3RydWN0b3JLaW5kKENvbnN0
cnVjdG9yS2luZDo6Tm9uZSk7CiAgICAgICAgIGdlbmVyYXRvckJvZHlTY29wZS0+c2V0RXhwZWN0
ZWRTdXBlckJpbmRpbmcobV9zdXBlckJpbmRpbmcpOwogCi0gICAgICAgIFN5bnRheENoZWNrZXIg
Z2VuZXJhdG9yRnVuY3Rpb25Db250ZXh0KGNvbnN0X2Nhc3Q8Vk0qPihtX3ZtKSwgbV9sZXhlci5n
ZXQoKSk7CisgICAgICAgIFN5bnRheENoZWNrZXIgZ2VuZXJhdG9yRnVuY3Rpb25Db250ZXh0KGNv
bnN0X2Nhc3Q8Vk0mPihtX3ZtKSwgbV9sZXhlci5nZXQoKSk7CiAgICAgICAgIGZhaWxJZkZhbHNl
KHBhcnNlU291cmNlRWxlbWVudHMoZ2VuZXJhdG9yRnVuY3Rpb25Db250ZXh0LCBtb2RlKSwgIkNh
bm5vdCBwYXJzZSB0aGUgYm9keSBvZiBhIGdlbmVyYXRvciIpOwogICAgICAgICBwb3BTY29wZShn
ZW5lcmF0b3JCb2R5U2NvcGUsIFRyZWVCdWlsZGVyOjpOZWVkc0ZyZWVWYXJpYWJsZUluZm8pOwog
ICAgIH0KQEAgLTU0Miw3ICs1NDIsNyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRy
ZWVTb3VyY2VFCiAgICAgaW50IHBhcmFtZXRlcnNTdGFydCA9IG1fdG9rZW4ubV9sb2NhdGlvbi5z
dGFydE9mZnNldDsKIAogICAgIFBhcnNlckZ1bmN0aW9uSW5mbzxUcmVlQnVpbGRlcj4gaW5mbzsK
LSAgICBpbmZvLm5hbWUgPSAmbV92bS0+cHJvcGVydHlOYW1lcy0+bnVsbElkZW50aWZpZXI7Cisg
ICAgaW5mby5uYW1lID0gJm1fdm0ucHJvcGVydHlOYW1lcy0+bnVsbElkZW50aWZpZXI7CiAgICAg
Y3JlYXRlR2VuZXJhdG9yUGFyYW1ldGVycyhjb250ZXh0LCBpbmZvLnBhcmFtZXRlckNvdW50KTsK
ICAgICBpbmZvLnN0YXJ0T2Zmc2V0ID0gcGFyYW1ldGVyc1N0YXJ0OwogICAgIGluZm8uc3RhcnRM
aW5lID0gdG9rZW5MaW5lKCk7CkBAIC01NTIsNyArNTUyLDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRy
ZWVCdWlsZGVyPiBUcmVlU291cmNlRQogICAgIHsKICAgICAgICAgQXV0b1BvcFNjb3BlUmVmIGFz
eW5jRnVuY3Rpb25Cb2R5U2NvcGUodGhpcywgcHVzaFNjb3BlKCkpOwogICAgICAgICBhc3luY0Z1
bmN0aW9uQm9keVNjb3BlLT5zZXRTb3VyY2VQYXJzZU1vZGUoaW5uZXJQYXJzZU1vZGUpOwotICAg
ICAgICBTeW50YXhDaGVja2VyIHN5bnRheENoZWNrZXIoY29uc3RfY2FzdDxWTSo+KG1fdm0pLCBt
X2xleGVyLmdldCgpKTsKKyAgICAgICAgU3ludGF4Q2hlY2tlciBzeW50YXhDaGVja2VyKGNvbnN0
X2Nhc3Q8Vk0mPihtX3ZtKSwgbV9sZXhlci5nZXQoKSk7CiAgICAgICAgIGlmIChpc0Fycm93RnVu
Y3Rpb25Cb2R5RXhwcmVzc2lvbikgewogICAgICAgICAgICAgaWYgKG1fZGVidWdnZXJQYXJzZURh
dGEpCiAgICAgICAgICAgICAgICAgZmFpbElmRmFsc2UocGFyc2VBcnJvd0Z1bmN0aW9uU2luZ2xl
RXhwcmVzc2lvbkJvZHlTb3VyY2VFbGVtZW50cyhjb250ZXh0KSwgIkNhbm5vdCBwYXJzZSB0aGUg
Ym9keSBvZiBhc3luYyBhcnJvdyBmdW5jdGlvbiIpOwpAQCAtNTkzLDcgKzU5Myw3IEBAIHRlbXBs
YXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVNvdXJjZUUKICAgICBpbnQgcGFyYW1ldGVyc1N0
YXJ0ID0gbV90b2tlbi5tX2xvY2F0aW9uLnN0YXJ0T2Zmc2V0OwogICAgIAogICAgIFBhcnNlckZ1
bmN0aW9uSW5mbzxUcmVlQnVpbGRlcj4gaW5mbzsKLSAgICBpbmZvLm5hbWUgPSAmbV92bS0+cHJv
cGVydHlOYW1lcy0+bnVsbElkZW50aWZpZXI7CisgICAgaW5mby5uYW1lID0gJm1fdm0ucHJvcGVy
dHlOYW1lcy0+bnVsbElkZW50aWZpZXI7CiAgICAgY3JlYXRlR2VuZXJhdG9yUGFyYW1ldGVycyhj
b250ZXh0LCBpbmZvLnBhcmFtZXRlckNvdW50KTsKICAgICBpbmZvLnN0YXJ0T2Zmc2V0ID0gcGFy
YW1ldGVyc1N0YXJ0OwogICAgIGluZm8uc3RhcnRMaW5lID0gdG9rZW5MaW5lKCk7CkBAIC02MDEs
NyArNjAxLDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU291cmNlRQogICAg
IHsKICAgICAgICAgQXV0b1BvcFNjb3BlUmVmIGFzeW5jRnVuY3Rpb25Cb2R5U2NvcGUodGhpcywg
cHVzaFNjb3BlKCkpOwogICAgICAgICBhc3luY0Z1bmN0aW9uQm9keVNjb3BlLT5zZXRTb3VyY2VQ
YXJzZU1vZGUoaW5uZXJQYXJzZU1vZGUpOwotICAgICAgICBTeW50YXhDaGVja2VyIHN5bnRheENo
ZWNrZXIoY29uc3RfY2FzdDxWTSo+KG1fdm0pLCBtX2xleGVyLmdldCgpKTsKKyAgICAgICAgU3lu
dGF4Q2hlY2tlciBzeW50YXhDaGVja2VyKGNvbnN0X2Nhc3Q8Vk0mPihtX3ZtKSwgbV9sZXhlci5n
ZXQoKSk7CiAgICAgICAgIGlmIChpc0Fycm93RnVuY3Rpb25Cb2R5RXhwcmVzc2lvbikgewogICAg
ICAgICAgICAgaWYgKG1fZGVidWdnZXJQYXJzZURhdGEpCiAgICAgICAgICAgICAgICAgZmFpbElm
RmFsc2UocGFyc2VBcnJvd0Z1bmN0aW9uU2luZ2xlRXhwcmVzc2lvbkJvZHlTb3VyY2VFbGVtZW50
cyhjb250ZXh0KSwgIkNhbm5vdCBwYXJzZSB0aGUgYm9keSBvZiBhc3luYyBhcnJvdyBmdW5jdGlv
biIpOwpAQCAtNjM4LDcgKzYzOCw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJl
ZVNvdXJjZUUKICAgICAgICAgc3RhdGVtZW50ID0gcGFyc2VGdW5jdGlvbkRlY2xhcmF0aW9uKGNv
bnRleHQsIEV4cG9ydFR5cGU6Ok5vdEV4cG9ydGVkLCBEZWNsYXJhdGlvbkRlZmF1bHRDb250ZXh0
OjpTdGFuZGFyZCwgZnVuY3Rpb25Db25zdHJ1Y3RvclBhcmFtZXRlcnNFbmRQb3NpdGlvbik7CiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgSURFTlQ6Ci0gICAgICAgIGlmICgqbV90b2tlbi5tX2Rh
dGEuaWRlbnQgPT0gbV92bS0+cHJvcGVydHlOYW1lcy0+YXN5bmMgJiYgIW1fdG9rZW4ubV9kYXRh
LmVzY2FwZWQpIHsKKyAgICAgICAgaWYgKCptX3Rva2VuLm1fZGF0YS5pZGVudCA9PSBtX3ZtLnBy
b3BlcnR5TmFtZXMtPmFzeW5jICYmICFtX3Rva2VuLm1fZGF0YS5lc2NhcGVkKSB7CiAgICAgICAg
ICAgICBuZXh0KCk7CiAgICAgICAgICAgICBmYWlsSWZGYWxzZShtYXRjaChGVU5DVElPTikgJiYg
IW1fbGV4ZXItPmhhc0xpbmVUZXJtaW5hdG9yQmVmb3JlVG9rZW4oKSwgIkNhbm5vdCBwYXJzZSB0
aGUgYXN5bmMgZnVuY3Rpb24iKTsKICAgICAgICAgICAgIHN0YXRlbWVudCA9IHBhcnNlQXN5bmNG
dW5jdGlvbkRlY2xhcmF0aW9uKGNvbnRleHQsIEV4cG9ydFR5cGU6Ok5vdEV4cG9ydGVkLCBEZWNs
YXJhdGlvbkRlZmF1bHRDb250ZXh0OjpTdGFuZGFyZCwgZnVuY3Rpb25Db25zdHJ1Y3RvclBhcmFt
ZXRlcnNFbmRQb3NpdGlvbik7CkBAIC03MDcsNyArNzA3LDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRy
ZWVCdWlsZGVyPiBUcmVlU3RhdGVtZQogICAgICAgICByZXN1bHQgPSBwYXJzZUZ1bmN0aW9uRGVj
bGFyYXRpb24oY29udGV4dCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSURFTlQ6Ci0gICAg
ICAgIGlmIChVTkxJS0VMWSgqbV90b2tlbi5tX2RhdGEuaWRlbnQgPT0gbV92bS0+cHJvcGVydHlO
YW1lcy0+YXN5bmMgJiYgIW1fdG9rZW4ubV9kYXRhLmVzY2FwZWQpKSB7CisgICAgICAgIGlmIChV
TkxJS0VMWSgqbV90b2tlbi5tX2RhdGEuaWRlbnQgPT0gbV92bS5wcm9wZXJ0eU5hbWVzLT5hc3lu
YyAmJiAhbV90b2tlbi5tX2RhdGEuZXNjYXBlZCkpIHsKICAgICAgICAgICAgIC8vIEVhZ2VybHkg
cGFyc2UgYXMgQXN5bmNGdW5jdGlvbkRlY2xhcmF0aW9uLiBUaGlzIGlzIHRoZSB1bmNvbW1vbiBj
YXNlLAogICAgICAgICAgICAgLy8gYnV0IGNvdWxkIGJlIG1pc3Rha2VubHkgcGFyc2VkIGFzIGFu
IEFzeW5jRnVuY3Rpb25FeHByZXNzaW9uLgogICAgICAgICAgICAgU2F2ZVBvaW50IHNhdmVQb2lu
dCA9IGNyZWF0ZVNhdmVQb2ludCgpOwpAQCAtMTA0MCw3ICsxMDQwLDcgQEAgdGVtcGxhdGUgPGNs
YXNzIFRyZWVCdWlsZGVyPiBUcmVlRGVzdHJ1YwogICAgIH0KIAogICAgIGlmIChzdHJpY3RNb2Rl
KCkgJiYgbV9wYXJzZXJTdGF0ZS5sYXN0SWRlbnRpZmllciAmJiBjb250ZXh0LmlzUmVzb2x2ZShl
bGVtZW50KSkgewotICAgICAgICBib29sIGlzRXZhbE9yQXJndW1lbnRzID0gbV92bS0+cHJvcGVy
dHlOYW1lcy0+ZXZhbCA9PSAqbV9wYXJzZXJTdGF0ZS5sYXN0SWRlbnRpZmllciB8fCBtX3ZtLT5w
cm9wZXJ0eU5hbWVzLT5hcmd1bWVudHMgPT0gKm1fcGFyc2VyU3RhdGUubGFzdElkZW50aWZpZXI7
CisgICAgICAgIGJvb2wgaXNFdmFsT3JBcmd1bWVudHMgPSBtX3ZtLnByb3BlcnR5TmFtZXMtPmV2
YWwgPT0gKm1fcGFyc2VyU3RhdGUubGFzdElkZW50aWZpZXIgfHwgbV92bS5wcm9wZXJ0eU5hbWVz
LT5hcmd1bWVudHMgPT0gKm1fcGFyc2VyU3RhdGUubGFzdElkZW50aWZpZXI7CiAgICAgICAgIGlm
IChpc0V2YWxPckFyZ3VtZW50cyAmJiBzdHJpY3RNb2RlKCkpCiAgICAgICAgICAgICByZWNsYXNz
aWZ5RXhwcmVzc2lvbkVycm9yKEVycm9ySW5kaWNhdGVzUGF0dGVybiwgRXJyb3JJbmRpY2F0ZXNO
b3RoaW5nKTsKICAgICAgICAgZmFpbElmVHJ1ZUlmU3RyaWN0KGlzRXZhbE9yQXJndW1lbnRzLCAi
Q2Fubm90IG1vZGlmeSAnIiwgbV9wYXJzZXJTdGF0ZS5sYXN0SWRlbnRpZmllci0+aW1wbCgpLCAi
JyBpbiBzdHJpY3QgbW9kZSIpOwpAQCAtMTA2OCw3ICsxMDY4LDcgQEAgdGVtcGxhdGUgPGNsYXNz
IFRyZWVCdWlsZGVyPiBUcmVlRGVzdHJ1YwogICAgIHNlbWFudGljRmFpbElmRmFsc2UoZWxlbWVu
dCAmJiBjb250ZXh0LmlzQXNzaWdubWVudExvY2F0aW9uKGVsZW1lbnQpLCAiSW52YWxpZCBkZXN0
cnVjdHVyaW5nIGFzc2lnbm1lbnQgdGFyZ2V0Iik7CiAKICAgICBpZiAoc3RyaWN0TW9kZSgpICYm
IG1fcGFyc2VyU3RhdGUubGFzdElkZW50aWZpZXIgJiYgY29udGV4dC5pc1Jlc29sdmUoZWxlbWVu
dCkpIHsKLSAgICAgICAgYm9vbCBpc0V2YWxPckFyZ3VtZW50cyA9IG1fdm0tPnByb3BlcnR5TmFt
ZXMtPmV2YWwgPT0gKm1fcGFyc2VyU3RhdGUubGFzdElkZW50aWZpZXIgfHwgbV92bS0+cHJvcGVy
dHlOYW1lcy0+YXJndW1lbnRzID09ICptX3BhcnNlclN0YXRlLmxhc3RJZGVudGlmaWVyOworICAg
ICAgICBib29sIGlzRXZhbE9yQXJndW1lbnRzID0gbV92bS5wcm9wZXJ0eU5hbWVzLT5ldmFsID09
ICptX3BhcnNlclN0YXRlLmxhc3RJZGVudGlmaWVyIHx8IG1fdm0ucHJvcGVydHlOYW1lcy0+YXJn
dW1lbnRzID09ICptX3BhcnNlclN0YXRlLmxhc3RJZGVudGlmaWVyOwogICAgICAgICBmYWlsSWZU
cnVlSWZTdHJpY3QoaXNFdmFsT3JBcmd1bWVudHMsICJDYW5ub3QgbW9kaWZ5ICciLCBtX3BhcnNl
clN0YXRlLmxhc3RJZGVudGlmaWVyLT5pbXBsKCksICInIGluIHN0cmljdCBtb2RlIik7CiAgICAg
fQogCkBAIC0xMTk2LDcgKzExOTYsNyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRy
ZWVEZXN0cnVjCiAgICAgICAgICAgICAgICAgcHJvcGFnYXRlRXJyb3IoKTsKICAgICAgICAgICAg
ICAgICBpZiAoIWlubmVyUGF0dGVybikKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgICAgICAgICAgICAgY29udGV4dC5hcHBlbmRPYmplY3RQYXR0ZXJuUmVzdEVudHJ5KCptX3Zt
LCBvYmplY3RQYXR0ZXJuLCBsb2NhdGlvbiwgaW5uZXJQYXR0ZXJuKTsKKyAgICAgICAgICAgICAg
ICBjb250ZXh0LmFwcGVuZE9iamVjdFBhdHRlcm5SZXN0RW50cnkobV92bSwgb2JqZWN0UGF0dGVy
biwgbG9jYXRpb24sIGlubmVyUGF0dGVybik7CiAgICAgICAgICAgICAgICAgcmVzdEVsZW1lbnRX
YXNGb3VuZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgY29udGV4dC5zZXRDb250YWluc09iamVj
dFJlc3RFbGVtZW50KG9iamVjdFBhdHRlcm4sIHJlc3RFbGVtZW50V2FzRm91bmQpOwogICAgICAg
ICAgICAgICAgIGJyZWFrOwpAQCAtMTIxNSw3ICsxMjE1LDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRy
ZWVCdWlsZGVyPiBUcmVlRGVzdHJ1YwogICAgICAgICAgICAgICAgICAgICBpbm5lclBhdHRlcm4g
PSBwYXJzZUJpbmRpbmdPckFzc2lnbm1lbnRFbGVtZW50KGNvbnRleHQsIGtpbmQsIGV4cG9ydFR5
cGUsIGR1cGxpY2F0ZUlkZW50aWZpZXIsIGhhc0Rlc3RydWN0dXJpbmdQYXR0ZXJuLCBiaW5kaW5n
Q29udGV4dCwgZGVwdGggKyAxKTsKICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAg
ICAgICAgICAgaWYgKGtpbmQgPT0gRGVzdHJ1Y3R1cmluZ0tpbmQ6OkRlc3RydWN0dXJlVG9FeHBy
ZXNzaW9ucykgewotICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpc0V2YWxPckFyZ3VtZW50
cyA9IG1fdm0tPnByb3BlcnR5TmFtZXMtPmV2YWwgPT0gKnByb3BlcnR5TmFtZSB8fCBtX3ZtLT5w
cm9wZXJ0eU5hbWVzLT5hcmd1bWVudHMgPT0gKnByb3BlcnR5TmFtZTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGJvb2wgaXNFdmFsT3JBcmd1bWVudHMgPSBtX3ZtLnByb3BlcnR5TmFtZXMtPmV2
YWwgPT0gKnByb3BlcnR5TmFtZSB8fCBtX3ZtLnByb3BlcnR5TmFtZXMtPmFyZ3VtZW50cyA9PSAq
cHJvcGVydHlOYW1lOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzRXZhbE9yQXJndW1l
bnRzICYmIHN0cmljdE1vZGUoKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNsYXNz
aWZ5RXhwcmVzc2lvbkVycm9yKEVycm9ySW5kaWNhdGVzUGF0dGVybiwgRXJyb3JJbmRpY2F0ZXNO
b3RoaW5nKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGZhaWxJZlRydWVJZlN0cmljdChpc0V2
YWxPckFyZ3VtZW50cywgIkNhbm5vdCBtb2RpZnkgJyIsIHByb3BlcnR5TmFtZS0+aW1wbCgpLCAi
JyBpbiBzdHJpY3QgbW9kZSIpOwpAQCAtMTIyOCw3ICsxMjI4LDcgQEAgdGVtcGxhdGUgPGNsYXNz
IFRyZWVCdWlsZGVyPiBUcmVlRGVzdHJ1YwogICAgICAgICAgICAgICAgIHN3aXRjaCAobV90b2tl
bi5tX3R5cGUpIHsKICAgICAgICAgICAgICAgICBjYXNlIERPVUJMRToKICAgICAgICAgICAgICAg
ICBjYXNlIElOVEVHRVI6Ci0gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZSA9ICZtX3Bh
cnNlckFyZW5hLmlkZW50aWZpZXJBcmVuYSgpLm1ha2VOdW1lcmljSWRlbnRpZmllcihjb25zdF9j
YXN0PFZNKj4obV92bSksIG1fdG9rZW4ubV9kYXRhLmRvdWJsZVZhbHVlKTsKKyAgICAgICAgICAg
ICAgICAgICAgcHJvcGVydHlOYW1lID0gJm1fcGFyc2VyQXJlbmEuaWRlbnRpZmllckFyZW5hKCku
bWFrZU51bWVyaWNJZGVudGlmaWVyKGNvbnN0X2Nhc3Q8Vk0mPihtX3ZtKSwgbV90b2tlbi5tX2Rh
dGEuZG91YmxlVmFsdWUpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICBjYXNlIFNUUklORzoKICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lID0gbV90
b2tlbi5tX2RhdGEuaWRlbnQ7CkBAIC0xMjY3LDcgKzEyNjcsNyBAQCB0ZW1wbGF0ZSA8Y2xhc3Mg
VHJlZUJ1aWxkZXI+IFRyZWVEZXN0cnVjCiAgICAgICAgICAgICBUcmVlRXhwcmVzc2lvbiBkZWZh
dWx0VmFsdWUgPSBwYXJzZURlZmF1bHRWYWx1ZUZvckRlc3RydWN0dXJpbmdQYXR0ZXJuKGNvbnRl
eHQpOwogICAgICAgICAgICAgcHJvcGFnYXRlRXJyb3IoKTsKICAgICAgICAgICAgIGlmIChwcm9w
ZXJ0eUV4cHJlc3Npb24pIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LmFwcGVuZE9iamVjdFBh
dHRlcm5FbnRyeSgqbV92bSwgb2JqZWN0UGF0dGVybiwgbG9jYXRpb24sIHByb3BlcnR5RXhwcmVz
c2lvbiwgaW5uZXJQYXR0ZXJuLCBkZWZhdWx0VmFsdWUpOworICAgICAgICAgICAgICAgIGNvbnRl
eHQuYXBwZW5kT2JqZWN0UGF0dGVybkVudHJ5KG1fdm0sIG9iamVjdFBhdHRlcm4sIGxvY2F0aW9u
LCBwcm9wZXJ0eUV4cHJlc3Npb24sIGlubmVyUGF0dGVybiwgZGVmYXVsdFZhbHVlKTsKICAgICAg
ICAgICAgICAgICBjb250ZXh0LnNldENvbnRhaW5zQ29tcHV0ZWRQcm9wZXJ0eShvYmplY3RQYXR0
ZXJuLCB0cnVlKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgQVNTRVJU
KHByb3BlcnR5TmFtZSk7CkBAIC0xMzk4LDcgKzEzOTgsNyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJl
ZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lCiAgICAgICAgIEpTVGV4dFBvc2l0aW9uIGluTG9jYXRpb24g
PSB0b2tlblN0YXJ0UG9zaXRpb24oKTsKICAgICAgICAgYm9vbCBpc09mRW51bWVyYXRpb24gPSBm
YWxzZTsKICAgICAgICAgaWYgKCFtYXRjaChJTlRPS0VOKSkgewotICAgICAgICAgICAgZmFpbElm
RmFsc2UobWF0Y2hDb250ZXh0dWFsS2V5d29yZChtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5vZiksICJF
eHBlY3RlZCBlaXRoZXIgJ2luJyBvciAnb2YnIGluIGVudW1lcmF0aW9uIHN5bnRheCIpOworICAg
ICAgICAgICAgZmFpbElmRmFsc2UobWF0Y2hDb250ZXh0dWFsS2V5d29yZChtX3ZtLnByb3BlcnR5
TmFtZXMtPm9mKSwgIkV4cGVjdGVkIGVpdGhlciAnaW4nIG9yICdvZicgaW4gZW51bWVyYXRpb24g
c3ludGF4Iik7CiAgICAgICAgICAgICBpc09mRW51bWVyYXRpb24gPSB0cnVlOwogICAgICAgICAg
ICAgbmV4dCgpOwogICAgICAgICB9IGVsc2UgewpAQCAtMTQ0OCw3ICsxNDQ4LDcgQEAgdGVtcGxh
dGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZQogICAgICAgICAgICAgZGVjbHNTdGFy
dCA9IHRva2VuU3RhcnRQb3NpdGlvbigpOwogICAgICAgICAgICAgcGF0dGVybiA9IHRyeVBhcnNl
RGVzdHJ1Y3R1cmluZ1BhdHRlcm5FeHByZXNzaW9uKGNvbnRleHQsIEFzc2lnbm1lbnRDb250ZXh0
OjpEZWNsYXJhdGlvblN0YXRlbWVudCk7CiAgICAgICAgICAgICBkZWNsc0VuZCA9IGxhc3RUb2tl
bkVuZFBvc2l0aW9uKCk7Ci0gICAgICAgICAgICBpZiAocGF0dGVybiAmJiAobWF0Y2goSU5UT0tF
TikgfHwgbWF0Y2hDb250ZXh0dWFsS2V5d29yZChtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5vZikpKQor
ICAgICAgICAgICAgaWYgKHBhdHRlcm4gJiYgKG1hdGNoKElOVE9LRU4pIHx8IG1hdGNoQ29udGV4
dHVhbEtleXdvcmQobV92bS5wcm9wZXJ0eU5hbWVzLT5vZikpKQogICAgICAgICAgICAgICAgIGdv
dG8gZW51bWVyYXRpb25Mb29wOwogICAgICAgICAgICAgcGF0dGVybiA9IFRyZWVEZXN0cnVjdHVy
aW5nUGF0dGVybigwKTsKICAgICAgICAgICAgIHJlc3RvcmVTYXZlUG9pbnQoc2F2ZVBvaW50KTsK
QEAgLTE1MDMsNyArMTUwMyw3IEBAIGVudW1lcmF0aW9uTG9vcDoKICAgICBmYWlsSWZGYWxzZShu
b25MSFNDb3VudCA9PSBtX3BhcnNlclN0YXRlLm5vbkxIU0NvdW50LCAiRXhwZWN0ZWQgYSByZWZl
cmVuY2Ugb24gdGhlIGxlZnQgaGFuZCBzaWRlIG9mIGFuIGVudW1lcmF0aW9uIHN0YXRlbWVudCIp
OwogICAgIGJvb2wgaXNPZkVudW1lcmF0aW9uID0gZmFsc2U7CiAgICAgaWYgKCFtYXRjaChJTlRP
S0VOKSkgewotICAgICAgICBmYWlsSWZGYWxzZShtYXRjaENvbnRleHR1YWxLZXl3b3JkKG1fdm0t
PnByb3BlcnR5TmFtZXMtPm9mKSwgIkV4cGVjdGVkIGVpdGhlciAnaW4nIG9yICdvZicgaW4gZW51
bWVyYXRpb24gc3ludGF4Iik7CisgICAgICAgIGZhaWxJZkZhbHNlKG1hdGNoQ29udGV4dHVhbEtl
eXdvcmQobV92bS5wcm9wZXJ0eU5hbWVzLT5vZiksICJFeHBlY3RlZCBlaXRoZXIgJ2luJyBvciAn
b2YnIGluIGVudW1lcmF0aW9uIHN5bnRheCIpOwogICAgICAgICBpc09mRW51bWVyYXRpb24gPSB0
cnVlOwogICAgICAgICBuZXh0KCk7CiAgICAgfSBlbHNlIHsKQEAgLTE1NTgsNyArMTU1OCw3IEBA
IHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWUKICAgICAKICAgICBpZiAo
YXV0b1NlbWlDb2xvbigpKSB7CiAgICAgICAgIHNlbWFudGljRmFpbElmRmFsc2UoYnJlYWtJc1Zh
bGlkKCksICInYnJlYWsnIGlzIG9ubHkgdmFsaWQgaW5zaWRlIGEgc3dpdGNoIG9yIGxvb3Agc3Rh
dGVtZW50Iik7Ci0gICAgICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUJyZWFrU3RhdGVtZW50KGxv
Y2F0aW9uLCAmbV92bS0+cHJvcGVydHlOYW1lcy0+bnVsbElkZW50aWZpZXIsIHN0YXJ0LCBlbmQp
OworICAgICAgICByZXR1cm4gY29udGV4dC5jcmVhdGVCcmVha1N0YXRlbWVudChsb2NhdGlvbiwg
Jm1fdm0ucHJvcGVydHlOYW1lcy0+bnVsbElkZW50aWZpZXIsIHN0YXJ0LCBlbmQpOwogICAgIH0K
ICAgICBmYWlsSWZGYWxzZShtYXRjaFNwZWNJZGVudGlmaWVyKCksICJFeHBlY3RlZCBhbiBpZGVu
dGlmaWVyIGFzIHRoZSB0YXJnZXQgZm9yIGEgYnJlYWsgc3RhdGVtZW50Iik7CiAgICAgY29uc3Qg
SWRlbnRpZmllciogaWRlbnQgPSBtX3Rva2VuLm1fZGF0YS5pZGVudDsKQEAgLTE1ODAsNyArMTU4
MCw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWUKICAgICAKICAg
ICBpZiAoYXV0b1NlbWlDb2xvbigpKSB7CiAgICAgICAgIHNlbWFudGljRmFpbElmRmFsc2UoY29u
dGludWVJc1ZhbGlkKCksICInY29udGludWUnIGlzIG9ubHkgdmFsaWQgaW5zaWRlIGEgbG9vcCBz
dGF0ZW1lbnQiKTsKLSAgICAgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlQ29udGludWVTdGF0ZW1l
bnQobG9jYXRpb24sICZtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5udWxsSWRlbnRpZmllciwgc3RhcnQs
IGVuZCk7CisgICAgICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUNvbnRpbnVlU3RhdGVtZW50KGxv
Y2F0aW9uLCAmbV92bS5wcm9wZXJ0eU5hbWVzLT5udWxsSWRlbnRpZmllciwgc3RhcnQsIGVuZCk7
CiAgICAgfQogICAgIGZhaWxJZkZhbHNlKG1hdGNoU3BlY0lkZW50aWZpZXIoKSwgIkV4cGVjdGVk
IGFuIGlkZW50aWZpZXIgYXMgdGhlIHRhcmdldCBmb3IgYSBjb250aW51ZSBzdGF0ZW1lbnQiKTsK
ICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9IG1fdG9rZW4ubV9kYXRhLmlkZW50OwpAQCAt
MTk1MCw3ICsxOTUwLDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVt
ZQogICAgICAgICBnb3RvIGRlZmF1bHRDYXNlOwogICAgIH0KICAgICBjYXNlIElERU5UOgotICAg
ICAgICBpZiAoVU5MSUtFTFkoKm1fdG9rZW4ubV9kYXRhLmlkZW50ID09IG1fdm0tPnByb3BlcnR5
TmFtZXMtPmFzeW5jICYmICFtX3Rva2VuLm1fZGF0YS5lc2NhcGVkKSkgeworICAgICAgICBpZiAo
VU5MSUtFTFkoKm1fdG9rZW4ubV9kYXRhLmlkZW50ID09IG1fdm0ucHJvcGVydHlOYW1lcy0+YXN5
bmMgJiYgIW1fdG9rZW4ubV9kYXRhLmVzY2FwZWQpKSB7CiAgICAgICAgICAgICBpZiAobWF5YmVQ
YXJzZUFzeW5jRnVuY3Rpb25EZWNsYXJhdGlvblN0YXRlbWVudChjb250ZXh0LCByZXN1bHQsIHBh
cmVudEFsbG93c0Z1bmN0aW9uRGVjbGFyYXRpb25Bc1N0YXRlbWVudCkpCiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTIwMzksNyArMjAzOSw3IEBAIHRlbXBsYXRlIDxjbGFz
cyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWUKIHRlbXBsYXRlIDx0eXBlbmFtZSBMZXhlclR5cGU+
CiB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IGJvb2wgUGFyc2VyPExleGVyVHlwZT46Om1h
eWJlUGFyc2VBc3luY0Z1bmN0aW9uRGVjbGFyYXRpb25TdGF0ZW1lbnQoVHJlZUJ1aWxkZXImIGNv
bnRleHQsIFRyZWVTdGF0ZW1lbnQmIHJlc3VsdCwgYm9vbCBwYXJlbnRBbGxvd3NGdW5jdGlvbkRl
Y2xhcmF0aW9uQXNTdGF0ZW1lbnQpCiB7Ci0gICAgQVNTRVJUKG1hdGNoQ29udGV4dHVhbEtleXdv
cmQobV92bS0+cHJvcGVydHlOYW1lcy0+YXN5bmMpKTsKKyAgICBBU1NFUlQobWF0Y2hDb250ZXh0
dWFsS2V5d29yZChtX3ZtLnByb3BlcnR5TmFtZXMtPmFzeW5jKSk7CiAgICAgU2F2ZVBvaW50IHNh
dmVQb2ludCA9IGNyZWF0ZVNhdmVQb2ludCgpOwogICAgIG5leHQoKTsKICAgICBpZiAobWF0Y2go
RlVOQ1RJT04pICYmICFtX2xleGVyLT5oYXNMaW5lVGVybWluYXRvckJlZm9yZVRva2VuKCkpIHsK
QEAgLTIzMDAsMTUgKzIzMDAsMTUgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiB0eXBl
bmFtZSBUcgogICAgIH07CiAKICAgICAvLyBAZ2VuZXJhdG9yCi0gICAgYWRkUGFyYW1ldGVyKG1f
dm0tPnByb3BlcnR5TmFtZXMtPmdlbmVyYXRvclByaXZhdGVOYW1lKTsKKyAgICBhZGRQYXJhbWV0
ZXIobV92bS5wcm9wZXJ0eU5hbWVzLT5nZW5lcmF0b3JQcml2YXRlTmFtZSk7CiAgICAgLy8gQGdl
bmVyYXRvclN0YXRlCi0gICAgYWRkUGFyYW1ldGVyKG1fdm0tPnByb3BlcnR5TmFtZXMtPmdlbmVy
YXRvclN0YXRlUHJpdmF0ZU5hbWUpOworICAgIGFkZFBhcmFtZXRlcihtX3ZtLnByb3BlcnR5TmFt
ZXMtPmdlbmVyYXRvclN0YXRlUHJpdmF0ZU5hbWUpOwogICAgIC8vIEBnZW5lcmF0b3JWYWx1ZQot
ICAgIGFkZFBhcmFtZXRlcihtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5nZW5lcmF0b3JWYWx1ZVByaXZh
dGVOYW1lKTsKKyAgICBhZGRQYXJhbWV0ZXIobV92bS5wcm9wZXJ0eU5hbWVzLT5nZW5lcmF0b3JW
YWx1ZVByaXZhdGVOYW1lKTsKICAgICAvLyBAZ2VuZXJhdG9yUmVzdW1lTW9kZQotICAgIGFkZFBh
cmFtZXRlcihtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5nZW5lcmF0b3JSZXN1bWVNb2RlUHJpdmF0ZU5h
bWUpOworICAgIGFkZFBhcmFtZXRlcihtX3ZtLnByb3BlcnR5TmFtZXMtPmdlbmVyYXRvclJlc3Vt
ZU1vZGVQcml2YXRlTmFtZSk7CiAgICAgLy8gQGdlbmVyYXRvckZyYW1lCi0gICAgYWRkUGFyYW1l
dGVyKG1fdm0tPnByb3BlcnR5TmFtZXMtPmdlbmVyYXRvckZyYW1lUHJpdmF0ZU5hbWUpOworICAg
IGFkZFBhcmFtZXRlcihtX3ZtLnByb3BlcnR5TmFtZXMtPmdlbmVyYXRvckZyYW1lUHJpdmF0ZU5h
bWUpOwogCiAgICAgcmV0dXJuIHBhcmFtZXRlcnM7CiB9CkBAIC0yNDEyLDcgKzI0MTIsNyBAQCB0
ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IGJvb2wgUGFyc2VyCiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9OwogCi0gICAgU3ludGF4Q2hlY2tlciBzeW50YXhDaGVja2VyKGNvbnN0X2Nh
c3Q8Vk0qPihtX3ZtKSwgbV9sZXhlci5nZXQoKSk7CisgICAgU3ludGF4Q2hlY2tlciBzeW50YXhD
aGVja2VyKGNvbnN0X2Nhc3Q8Vk0mPihtX3ZtKSwgbV9sZXhlci5nZXQoKSk7CiAKICAgICBpZiAo
VU5MSUtFTFkoKFNvdXJjZVBhcnNlTW9kZVNldChTb3VyY2VQYXJzZU1vZGU6OkFycm93RnVuY3Rp
b25Nb2RlLCBTb3VyY2VQYXJzZU1vZGU6OkFzeW5jQXJyb3dGdW5jdGlvbk1vZGUpLmNvbnRhaW5z
KG1vZGUpKSkpIHsKICAgICAgICAgc3RhcnRMb2NhdGlvbiA9IHRva2VuTG9jYXRpb24oKTsKQEAg
LTI1ODksOCArMjU4OSw4IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gYm9vbCBQYXJz
ZXIKICAgICBpZiAoZnVuY3Rpb25TY29wZS0+c3RyaWN0TW9kZSgpICYmIHJlcXVpcmVtZW50cyAh
PSBGdW5jdGlvbk5hbWVSZXF1aXJlbWVudHM6OlVubmFtZWQpIHsKICAgICAgICAgQVNTRVJUKGZ1
bmN0aW9uSW5mby5uYW1lKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoU291cmNlUGFyc2VNb2Rl
U2V0KFNvdXJjZVBhcnNlTW9kZTo6Tm9ybWFsRnVuY3Rpb25Nb2RlLCBTb3VyY2VQYXJzZU1vZGU6
Ok1ldGhvZE1vZGUsIFNvdXJjZVBhcnNlTW9kZTo6QXJyb3dGdW5jdGlvbk1vZGUsIFNvdXJjZVBh
cnNlTW9kZTo6R2VuZXJhdG9yQm9keU1vZGUsIFNvdXJjZVBhcnNlTW9kZTo6R2VuZXJhdG9yV3Jh
cHBlckZ1bmN0aW9uTW9kZSkuY29udGFpbnMobW9kZSkgfHwgaXNBc3luY0Z1bmN0aW9uT3JBc3lu
Y0dlbmVyYXRvcldyYXBwZXJQYXJzZU1vZGUobW9kZSkpOwotICAgICAgICBzZW1hbnRpY0ZhaWxJ
ZlRydWUobV92bS0+cHJvcGVydHlOYW1lcy0+YXJndW1lbnRzID09ICpmdW5jdGlvbkluZm8ubmFt
ZSwgIiciLCBmdW5jdGlvbkluZm8ubmFtZS0+aW1wbCgpLCAiJyBpcyBub3QgYSB2YWxpZCBmdW5j
dGlvbiBuYW1lIGluIHN0cmljdCBtb2RlIik7Ci0gICAgICAgIHNlbWFudGljRmFpbElmVHJ1ZSht
X3ZtLT5wcm9wZXJ0eU5hbWVzLT5ldmFsID09ICpmdW5jdGlvbkluZm8ubmFtZSwgIiciLCBmdW5j
dGlvbkluZm8ubmFtZS0+aW1wbCgpLCAiJyBpcyBub3QgYSB2YWxpZCBmdW5jdGlvbiBuYW1lIGlu
IHN0cmljdCBtb2RlIik7CisgICAgICAgIHNlbWFudGljRmFpbElmVHJ1ZShtX3ZtLnByb3BlcnR5
TmFtZXMtPmFyZ3VtZW50cyA9PSAqZnVuY3Rpb25JbmZvLm5hbWUsICInIiwgZnVuY3Rpb25JbmZv
Lm5hbWUtPmltcGwoKSwgIicgaXMgbm90IGEgdmFsaWQgZnVuY3Rpb24gbmFtZSBpbiBzdHJpY3Qg
bW9kZSIpOworICAgICAgICBzZW1hbnRpY0ZhaWxJZlRydWUobV92bS5wcm9wZXJ0eU5hbWVzLT5l
dmFsID09ICpmdW5jdGlvbkluZm8ubmFtZSwgIiciLCBmdW5jdGlvbkluZm8ubmFtZS0+aW1wbCgp
LCAiJyBpcyBub3QgYSB2YWxpZCBmdW5jdGlvbiBuYW1lIGluIHN0cmljdCBtb2RlIik7CiAgICAg
fQogCiAgICAgSlNUb2tlbkxvY2F0aW9uIGxvY2F0aW9uID0gSlNUb2tlbkxvY2F0aW9uKG1fdG9r
ZW4ubV9sb2NhdGlvbik7CkBAIC0yNjkyLDcgKzI2OTIsNyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJl
ZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lCiAgICAgICAgIC8vCiAgICAgICAgIC8vIEluIHRoaXMgY2Fz
ZSwgd2UgdXNlICIqZGVmYXVsdCoiIGFzIHRoaXMgZnVuY3Rpb24gZGVjbGFyYXRpb24ncyBuYW1l
LgogICAgICAgICByZXF1aXJlbWVudHMgPSBGdW5jdGlvbk5hbWVSZXF1aXJlbWVudHM6Ok5vbmU7
Ci0gICAgICAgIGZ1bmN0aW9uSW5mby5uYW1lID0gJm1fdm0tPnByb3BlcnR5TmFtZXMtPnN0YXJE
ZWZhdWx0UHJpdmF0ZU5hbWU7CisgICAgICAgIGZ1bmN0aW9uSW5mby5uYW1lID0gJm1fdm0ucHJv
cGVydHlOYW1lcy0+c3RhckRlZmF1bHRQcml2YXRlTmFtZTsKICAgICB9CiAKICAgICBmYWlsSWZG
YWxzZSgocGFyc2VGdW5jdGlvbkluZm8oY29udGV4dCwgcmVxdWlyZW1lbnRzLCBwYXJzZU1vZGUs
IHRydWUsIENvbnN0cnVjdG9yS2luZDo6Tm9uZSwgU3VwZXJCaW5kaW5nOjpOb3ROZWVkZWQsIGZ1
bmN0aW9uS2V5d29yZFN0YXJ0LCBmdW5jdGlvbkluZm8sIEZ1bmN0aW9uRGVmaW5pdGlvblR5cGU6
OkRlY2xhcmF0aW9uLCBmdW5jdGlvbkNvbnN0cnVjdG9yUGFyYW1ldGVyc0VuZFBvc2l0aW9uKSks
ICJDYW5ub3QgcGFyc2UgdGhpcyBmdW5jdGlvbiIpOwpAQCAtMjc1MCw3ICsyNzUwLDcgQEAgdGVt
cGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZQogICAgICAgICAvLwogICAgICAg
ICAvLyBJbiB0aGlzIGNhc2UsIHdlIHVzZSAiKmRlZmF1bHQqIiBhcyB0aGlzIGZ1bmN0aW9uIGRl
Y2xhcmF0aW9uJ3MgbmFtZS4KICAgICAgICAgcmVxdWlyZW1lbnRzID0gRnVuY3Rpb25OYW1lUmVx
dWlyZW1lbnRzOjpOb25lOwotICAgICAgICBmdW5jdGlvbkluZm8ubmFtZSA9ICZtX3ZtLT5wcm9w
ZXJ0eU5hbWVzLT5zdGFyRGVmYXVsdFByaXZhdGVOYW1lOworICAgICAgICBmdW5jdGlvbkluZm8u
bmFtZSA9ICZtX3ZtLnByb3BlcnR5TmFtZXMtPnN0YXJEZWZhdWx0UHJpdmF0ZU5hbWU7CiAgICAg
fQogCiAgICAgZmFpbElmRmFsc2UoKHBhcnNlRnVuY3Rpb25JbmZvKGNvbnRleHQsIHJlcXVpcmVt
ZW50cywgcGFyc2VNb2RlLCB0cnVlLCBDb25zdHJ1Y3RvcktpbmQ6Ok5vbmUsIFN1cGVyQmluZGlu
Zzo6Tm90TmVlZGVkLCBmdW5jdGlvbktleXdvcmRTdGFydCwgZnVuY3Rpb25JbmZvLCBGdW5jdGlv
bkRlZmluaXRpb25UeXBlOjpEZWNsYXJhdGlvbiwgZnVuY3Rpb25Db25zdHJ1Y3RvclBhcmFtZXRl
cnNFbmRQb3NpdGlvbikpLCAiQ2Fubm90IHBhcnNlIHRoaXMgYXN5bmMgZnVuY3Rpb24iKTsKQEAg
LTI3OTYsNyArMjc5Niw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRl
bWUKICAgICAgICAgLy8KICAgICAgICAgLy8gSW4gdGhpcyBjYXNlLCB3ZSB1c2UgIipkZWZhdWx0
KiIgYXMgdGhpcyBjbGFzcyBkZWNsYXJhdGlvbidzIG5hbWUuCiAgICAgICAgIHJlcXVpcmVtZW50
cyA9IEZ1bmN0aW9uTmFtZVJlcXVpcmVtZW50czo6Tm9uZTsKLSAgICAgICAgaW5mby5jbGFzc05h
bWUgPSAmbV92bS0+cHJvcGVydHlOYW1lcy0+c3RhckRlZmF1bHRQcml2YXRlTmFtZTsKKyAgICAg
ICAgaW5mby5jbGFzc05hbWUgPSAmbV92bS5wcm9wZXJ0eU5hbWVzLT5zdGFyRGVmYXVsdFByaXZh
dGVOYW1lOwogICAgIH0KIAogICAgIFRyZWVDbGFzc0V4cHJlc3Npb24gY2xhc3NFeHByID0gcGFy
c2VDbGFzcyhjb250ZXh0LCByZXF1aXJlbWVudHMsIGluZm8pOwpAQCAtMjg3MCw3ICsyODcwLDcg
QEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlQ2xhc3NFeAogCiAgICAgICAgIC8v
IEZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSwgInN0YXRpYyIgaXMgYSBub24tcmVzZXJ2ZWQg
a2V5d29yZCBpbiBub24tc3RyaWN0IG1vZGUuCiAgICAgICAgIENsYXNzRWxlbWVudFRhZyB0YWcg
PSBDbGFzc0VsZW1lbnRUYWc6Okluc3RhbmNlOwotICAgICAgICBpZiAobWF0Y2goUkVTRVJWRURf
SUZfU1RSSUNUKSAmJiAqbV90b2tlbi5tX2RhdGEuaWRlbnQgPT0gbV92bS0+cHJvcGVydHlOYW1l
cy0+c3RhdGljS2V5d29yZCkgeworICAgICAgICBpZiAobWF0Y2goUkVTRVJWRURfSUZfU1RSSUNU
KSAmJiAqbV90b2tlbi5tX2RhdGEuaWRlbnQgPT0gbV92bS5wcm9wZXJ0eU5hbWVzLT5zdGF0aWNL
ZXl3b3JkKSB7CiAgICAgICAgICAgICBTYXZlUG9pbnQgc2F2ZVBvaW50ID0gY3JlYXRlU2F2ZVBv
aW50KCk7CiAgICAgICAgICAgICBuZXh0KCk7CiAgICAgICAgICAgICBpZiAobWF0Y2goT1BFTlBB
UkVOKSkgewpAQCAtMjg4MSw3ICsyODgxLDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVy
PiBUcmVlQ2xhc3NFeAogICAgICAgICB9CiAKICAgICAgICAgLy8gRklYTUU6IEZpZ3VyZSBvdXQg
YSB3YXkgdG8gc2hhcmUgbW9yZSBjb2RlIHdpdGggcGFyc2VQcm9wZXJ0eS4KLSAgICAgICAgY29u
c3QgQ29tbW9uSWRlbnRpZmllcnMmIHByb3BlcnR5TmFtZXMgPSAqbV92bS0+cHJvcGVydHlOYW1l
czsKKyAgICAgICAgY29uc3QgQ29tbW9uSWRlbnRpZmllcnMmIHByb3BlcnR5TmFtZXMgPSAqbV92
bS5wcm9wZXJ0eU5hbWVzOwogICAgICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICZwcm9w
ZXJ0eU5hbWVzLm51bGxJZGVudGlmaWVyOwogICAgICAgICBUcmVlRXhwcmVzc2lvbiBjb21wdXRl
ZFByb3BlcnR5TmFtZSA9IDA7CiAgICAgICAgIGJvb2wgaXNHZXR0ZXIgPSBmYWxzZTsKQEAgLTI4
OTksNyArMjg5OSw3IEBAIHBhcnNlTWV0aG9kOgogICAgICAgICAgICAgbmV4dCgpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgSURFTlQ6Ci0gICAgICAgICAgICBpZiAoVU5MSUtF
TFkoKm1fdG9rZW4ubV9kYXRhLmlkZW50ID09IG1fdm0tPnByb3BlcnR5TmFtZXMtPmFzeW5jICYm
ICFtX3Rva2VuLm1fZGF0YS5lc2NhcGVkKSkgeworICAgICAgICAgICAgaWYgKFVOTElLRUxZKCpt
X3Rva2VuLm1fZGF0YS5pZGVudCA9PSBtX3ZtLnByb3BlcnR5TmFtZXMtPmFzeW5jICYmICFtX3Rv
a2VuLm1fZGF0YS5lc2NhcGVkKSkgewogICAgICAgICAgICAgICAgIGlmICghaXNHZW5lcmF0b3JN
ZXRob2RQYXJzZU1vZGUocGFyc2VNb2RlKSAmJiAhaXNBc3luY01ldGhvZFBhcnNlTW9kZShwYXJz
ZU1vZGUpKSB7CiAgICAgICAgICAgICAgICAgICAgIGlkZW50ID0gbV90b2tlbi5tX2RhdGEuaWRl
bnQ7CiAgICAgICAgICAgICAgICAgICAgIG5leHQoKTsKQEAgLTI5MjQsNyArMjkyNCw3IEBAIHBh
cnNlTWV0aG9kOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRE9VQkxFOgogICAg
ICAgICBjYXNlIElOVEVHRVI6Ci0gICAgICAgICAgICBpZGVudCA9ICZtX3BhcnNlckFyZW5hLmlk
ZW50aWZpZXJBcmVuYSgpLm1ha2VOdW1lcmljSWRlbnRpZmllcihjb25zdF9jYXN0PFZNKj4obV92
bSksIG1fdG9rZW4ubV9kYXRhLmRvdWJsZVZhbHVlKTsKKyAgICAgICAgICAgIGlkZW50ID0gJm1f
cGFyc2VyQXJlbmEuaWRlbnRpZmllckFyZW5hKCkubWFrZU51bWVyaWNJZGVudGlmaWVyKGNvbnN0
X2Nhc3Q8Vk0mPihtX3ZtKSwgbV90b2tlbi5tX2RhdGEuZG91YmxlVmFsdWUpOwogICAgICAgICAg
ICAgQVNTRVJUKGlkZW50KTsKICAgICAgICAgICAgIG5leHQoKTsKICAgICAgICAgICAgIGJyZWFr
OwpAQCAtMjk1MSw4ICsyOTUxLDggQEAgcGFyc2VNZXRob2Q6CiAgICAgICAgICAgICBib29sIGlz
Q29uc3RydWN0b3IgPSB0YWcgPT0gQ2xhc3NFbGVtZW50VGFnOjpJbnN0YW5jZSAmJiAqaWRlbnQg
PT0gcHJvcGVydHlOYW1lcy5jb25zdHJ1Y3RvcjsKICAgICAgICAgICAgIGlmIChpc0FzeW5jTWV0
aG9kUGFyc2VNb2RlKHBhcnNlTW9kZSkgfHwgaXNBc3luY0dlbmVyYXRvck1ldGhvZFBhcnNlTW9k
ZShwYXJzZU1vZGUpIHx8IGlzR2VuZXJhdG9yTWV0aG9kUGFyc2VNb2RlKHBhcnNlTW9kZSkpIHsK
ICAgICAgICAgICAgICAgICBpc0NvbnN0cnVjdG9yID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAg
c2VtYW50aWNGYWlsSWZUcnVlKCppZGVudCA9PSBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5
cGUsICJDYW5ub3QgZGVjbGFyZSAiLCBzdHJpbmdBcnRpY2xlRm9yRnVuY3Rpb25Nb2RlKHBhcnNl
TW9kZSksIHN0cmluZ0ZvckZ1bmN0aW9uTW9kZShwYXJzZU1vZGUpLCAiIG5hbWVkICdwcm90b3R5
cGUnIik7Ci0gICAgICAgICAgICAgICAgc2VtYW50aWNGYWlsSWZUcnVlKCppZGVudCA9PSBtX3Zt
LT5wcm9wZXJ0eU5hbWVzLT5jb25zdHJ1Y3RvciwgIkNhbm5vdCBkZWNsYXJlICIsIHN0cmluZ0Fy
dGljbGVGb3JGdW5jdGlvbk1vZGUocGFyc2VNb2RlKSwgc3RyaW5nRm9yRnVuY3Rpb25Nb2RlKHBh
cnNlTW9kZSksICIgbmFtZWQgJ2NvbnN0cnVjdG9yJyIpOworICAgICAgICAgICAgICAgIHNlbWFu
dGljRmFpbElmVHJ1ZSgqaWRlbnQgPT0gbV92bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsICJD
YW5ub3QgZGVjbGFyZSAiLCBzdHJpbmdBcnRpY2xlRm9yRnVuY3Rpb25Nb2RlKHBhcnNlTW9kZSks
IHN0cmluZ0ZvckZ1bmN0aW9uTW9kZShwYXJzZU1vZGUpLCAiIG5hbWVkICdwcm90b3R5cGUnIik7
CisgICAgICAgICAgICAgICAgc2VtYW50aWNGYWlsSWZUcnVlKCppZGVudCA9PSBtX3ZtLnByb3Bl
cnR5TmFtZXMtPmNvbnN0cnVjdG9yLCAiQ2Fubm90IGRlY2xhcmUgIiwgc3RyaW5nQXJ0aWNsZUZv
ckZ1bmN0aW9uTW9kZShwYXJzZU1vZGUpLCBzdHJpbmdGb3JGdW5jdGlvbk1vZGUocGFyc2VNb2Rl
KSwgIiBuYW1lZCAnY29uc3RydWN0b3InIik7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAg
IG1ldGhvZEluZm8ubmFtZSA9IGlzQ29uc3RydWN0b3IgPyBpbmZvLmNsYXNzTmFtZSA6IGlkZW50
OwpAQCAtMzIxOCwxMCArMzIxOCwxMCBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IHR5
cGVuYW1lIFRyCiAgICAgICAgIC8vIGUuZy4KICAgICAgICAgLy8gICAgICogYXMgbmFtZXNwYWNl
CiAgICAgICAgIEFTU0VSVChtYXRjaChUSU1FUykpOwotICAgICAgICBpbXBvcnRlZE5hbWUgPSAm
bV92bS0+cHJvcGVydHlOYW1lcy0+dGltZXNJZGVudGlmaWVyOworICAgICAgICBpbXBvcnRlZE5h
bWUgPSAmbV92bS5wcm9wZXJ0eU5hbWVzLT50aW1lc0lkZW50aWZpZXI7CiAgICAgICAgIG5leHQo
KTsKIAotICAgICAgICBmYWlsSWZGYWxzZShtYXRjaENvbnRleHR1YWxLZXl3b3JkKG1fdm0tPnBy
b3BlcnR5TmFtZXMtPmFzKSwgIkV4cGVjdGVkICdhcycgYmVmb3JlIGltcG9ydGVkIGJpbmRpbmcg
bmFtZSIpOworICAgICAgICBmYWlsSWZGYWxzZShtYXRjaENvbnRleHR1YWxLZXl3b3JkKG1fdm0u
cHJvcGVydHlOYW1lcy0+YXMpLCAiRXhwZWN0ZWQgJ2FzJyBiZWZvcmUgaW1wb3J0ZWQgYmluZGlu
ZyBuYW1lIik7CiAgICAgICAgIG5leHQoKTsKIAogICAgICAgICBmYWlsSWZGYWxzZShtYXRjaFNw
ZWNJZGVudGlmaWVyKCksICJFeHBlY3RlZCBhIHZhcmlhYmxlIG5hbWUgZm9yIHRoZSBpbXBvcnQg
ZGVjbGFyYXRpb24iKTsKQEAgLTMyNDQsNyArMzI0NCw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVl
QnVpbGRlcj4gdHlwZW5hbWUgVHIKICAgICAgICAgaW1wb3J0ZWROYW1lID0gbG9jYWxOYW1lOwog
ICAgICAgICBuZXh0KCk7CiAKLSAgICAgICAgaWYgKG1hdGNoQ29udGV4dHVhbEtleXdvcmQobV92
bS0+cHJvcGVydHlOYW1lcy0+YXMpKSB7CisgICAgICAgIGlmIChtYXRjaENvbnRleHR1YWxLZXl3
b3JkKG1fdm0ucHJvcGVydHlOYW1lcy0+YXMpKSB7CiAgICAgICAgICAgICBuZXh0KCk7CiAgICAg
ICAgICAgICBmYWlsSWZGYWxzZShtYXRjaFNwZWNJZGVudGlmaWVyKCksICJFeHBlY3RlZCBhIHZh
cmlhYmxlIG5hbWUgZm9yIHRoZSBpbXBvcnQgZGVjbGFyYXRpb24iKTsKICAgICAgICAgICAgIGxv
Y2FsTmFtZVRva2VuID0gbV90b2tlbjsKQEAgLTMyNjAsNyArMzI2MCw3IEBAIHRlbXBsYXRlIDxj
bGFzcyBUcmVlQnVpbGRlcj4gdHlwZW5hbWUgVHIKICAgICAgICAgQVNTRVJUKG1hdGNoU3BlY0lk
ZW50aWZpZXIoKSk7CiAgICAgICAgIGxvY2FsTmFtZVRva2VuID0gbV90b2tlbjsKICAgICAgICAg
bG9jYWxOYW1lID0gbV90b2tlbi5tX2RhdGEuaWRlbnQ7Ci0gICAgICAgIGltcG9ydGVkTmFtZSA9
ICZtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5kZWZhdWx0S2V5d29yZDsKKyAgICAgICAgaW1wb3J0ZWRO
YW1lID0gJm1fdm0ucHJvcGVydHlOYW1lcy0+ZGVmYXVsdEtleXdvcmQ7CiAgICAgICAgIG5leHQo
KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMzMzOCw3ICszMzM4LDcgQEAgdGVtcGxhdGUg
PGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZQogICAgIC8vIEZyb21DbGF1c2UgOgogICAg
IC8vIGZyb20gTW9kdWxlU3BlY2lmaWVyCiAKLSAgICBmYWlsSWZGYWxzZShtYXRjaENvbnRleHR1
YWxLZXl3b3JkKG1fdm0tPnByb3BlcnR5TmFtZXMtPmZyb20pLCAiRXhwZWN0ZWQgJ2Zyb20nIGJl
Zm9yZSBpbXBvcnRlZCBtb2R1bGUgbmFtZSIpOworICAgIGZhaWxJZkZhbHNlKG1hdGNoQ29udGV4
dHVhbEtleXdvcmQobV92bS5wcm9wZXJ0eU5hbWVzLT5mcm9tKSwgIkV4cGVjdGVkICdmcm9tJyBi
ZWZvcmUgaW1wb3J0ZWQgbW9kdWxlIG5hbWUiKTsKICAgICBuZXh0KCk7CiAKICAgICBhdXRvIG1v
ZHVsZU5hbWUgPSBwYXJzZU1vZHVsZU5hbWUoY29udGV4dCk7CkBAIC0zMzYzLDcgKzMzNjMsNyBA
QCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IHR5cGVuYW1lIFRyCiAgICAgY29uc3QgSWRl
bnRpZmllciogZXhwb3J0ZWROYW1lID0gbG9jYWxOYW1lOwogICAgIG5leHQoKTsKIAotICAgIGlm
IChtYXRjaENvbnRleHR1YWxLZXl3b3JkKG1fdm0tPnByb3BlcnR5TmFtZXMtPmFzKSkgeworICAg
IGlmIChtYXRjaENvbnRleHR1YWxLZXl3b3JkKG1fdm0ucHJvcGVydHlOYW1lcy0+YXMpKSB7CiAg
ICAgICAgIG5leHQoKTsKICAgICAgICAgZmFpbElmRmFsc2UobWF0Y2hJZGVudGlmaWVyT3JLZXl3
b3JkKCksICJFeHBlY3RlZCBhbiBleHBvcnRlZCBuYW1lIGZvciB0aGUgZXhwb3J0IGRlY2xhcmF0
aW9uIik7CiAgICAgICAgIGV4cG9ydGVkTmFtZSA9IG1fdG9rZW4ubV9kYXRhLmlkZW50OwpAQCAt
MzM4OCw3ICszMzg4LDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVt
ZQogICAgICAgICAvLyBleHBvcnQgKiBGcm9tQ2xhdXNlIDsKICAgICAgICAgbmV4dCgpOwogCi0g
ICAgICAgIGZhaWxJZkZhbHNlKG1hdGNoQ29udGV4dHVhbEtleXdvcmQobV92bS0+cHJvcGVydHlO
YW1lcy0+ZnJvbSksICJFeHBlY3RlZCAnZnJvbScgYmVmb3JlIGV4cG9ydGVkIG1vZHVsZSBuYW1l
Iik7CisgICAgICAgIGZhaWxJZkZhbHNlKG1hdGNoQ29udGV4dHVhbEtleXdvcmQobV92bS5wcm9w
ZXJ0eU5hbWVzLT5mcm9tKSwgIkV4cGVjdGVkICdmcm9tJyBiZWZvcmUgZXhwb3J0ZWQgbW9kdWxl
IG5hbWUiKTsKICAgICAgICAgbmV4dCgpOwogICAgICAgICBhdXRvIG1vZHVsZU5hbWUgPSBwYXJz
ZU1vZHVsZU5hbWUoY29udGV4dCk7CiAgICAgICAgIGZhaWxJZkZhbHNlKG1vZHVsZU5hbWUsICJD
YW5ub3QgcGFyc2UgdGhlICdmcm9tJyBjbGF1c2UiKTsKQEAgLTM0MjAsNyArMzQyMCw3IEBAIHRl
bXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWUKICAgICAgICAgICAgIGlmICht
YXRjaChJREVOVCkpCiAgICAgICAgICAgICAgICAgbG9jYWxOYW1lID0gbV90b2tlbi5tX2RhdGEu
aWRlbnQ7CiAgICAgICAgICAgICByZXN0b3JlU2F2ZVBvaW50KHNhdmVQb2ludCk7Ci0gICAgICAg
IH0gZWxzZSBpZiAobWF0Y2hDb250ZXh0dWFsS2V5d29yZChtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5h
c3luYykpIHsKKyAgICAgICAgfSBlbHNlIGlmIChtYXRjaENvbnRleHR1YWxLZXl3b3JkKG1fdm0u
cHJvcGVydHlOYW1lcy0+YXN5bmMpKSB7CiAgICAgICAgICAgICBTYXZlUG9pbnQgc2F2ZVBvaW50
ID0gY3JlYXRlU2F2ZVBvaW50KCk7CiAgICAgICAgICAgICBuZXh0KCk7CiAgICAgICAgICAgICBp
ZiAobWF0Y2goRlVOQ1RJT04pICYmICFtX2xleGVyLT5oYXNMaW5lVGVybWluYXRvckJlZm9yZVRv
a2VuKCkpIHsKQEAgLTM0MzMsNyArMzQzMyw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRl
cj4gVHJlZVN0YXRlbWUKICAgICAgICAgfQogCiAgICAgICAgIGlmICghbG9jYWxOYW1lKQotICAg
ICAgICAgICAgbG9jYWxOYW1lID0gJm1fdm0tPnByb3BlcnR5TmFtZXMtPnN0YXJEZWZhdWx0UHJp
dmF0ZU5hbWU7CisgICAgICAgICAgICBsb2NhbE5hbWUgPSAmbV92bS5wcm9wZXJ0eU5hbWVzLT5z
dGFyRGVmYXVsdFByaXZhdGVOYW1lOwogCiAgICAgICAgIGlmIChpc0Z1bmN0aW9uT3JDbGFzc0Rl
Y2xhcmF0aW9uKSB7CiAgICAgICAgICAgICBpZiAoc3RhcnRzV2l0aEZ1bmN0aW9uKSB7CkBAIC0z
NDQ0LDcgKzM0NDQsNyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1l
CiAgICAgICAgICAgICB9IGVsc2UgaWYgKG1hdGNoKENMQVNTVE9LRU4pKSB7CiAgICAgICAgICAg
ICAgICAgcmVzdWx0ID0gcGFyc2VDbGFzc0RlY2xhcmF0aW9uKGNvbnRleHQsIEV4cG9ydFR5cGU6
Ok5vdEV4cG9ydGVkLCBEZWNsYXJhdGlvbkRlZmF1bHRDb250ZXh0OjpFeHBvcnREZWZhdWx0KTsK
ICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKG1hdGNoQ29udGV4
dHVhbEtleXdvcmQobV92bS0+cHJvcGVydHlOYW1lcy0+YXN5bmMpKTsKKyAgICAgICAgICAgICAg
ICBBU1NFUlQobWF0Y2hDb250ZXh0dWFsS2V5d29yZChtX3ZtLnByb3BlcnR5TmFtZXMtPmFzeW5j
KSk7CiAgICAgICAgICAgICAgICAgbmV4dCgpOwogICAgICAgICAgICAgICAgIERlcHRoTWFuYWdl
ciBzdGF0ZW1lbnREZXB0aCgmbV9zdGF0ZW1lbnREZXB0aCk7CiAgICAgICAgICAgICAgICAgbV9z
dGF0ZW1lbnREZXB0aCA9IDE7CkBAIC0zNDY1LDE4ICszNDY1LDE4IEBAIHRlbXBsYXRlIDxjbGFz
cyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWUKICAgICAgICAgICAgIFRyZWVFeHByZXNzaW9uIGV4
cHJlc3Npb24gPSBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKGNvbnRleHQpOwogICAgICAgICAg
ICAgZmFpbElmRmFsc2UoZXhwcmVzc2lvbiwgIkNhbm5vdCBwYXJzZSBleHByZXNzaW9uIik7CiAK
LSAgICAgICAgICAgIERlY2xhcmF0aW9uUmVzdWx0TWFzayBkZWNsYXJhdGlvblJlc3VsdCA9IGRl
Y2xhcmVWYXJpYWJsZSgmbV92bS0+cHJvcGVydHlOYW1lcy0+c3RhckRlZmF1bHRQcml2YXRlTmFt
ZSwgRGVjbGFyYXRpb25UeXBlOjpDb25zdERlY2xhcmF0aW9uKTsKKyAgICAgICAgICAgIERlY2xh
cmF0aW9uUmVzdWx0TWFzayBkZWNsYXJhdGlvblJlc3VsdCA9IGRlY2xhcmVWYXJpYWJsZSgmbV92
bS5wcm9wZXJ0eU5hbWVzLT5zdGFyRGVmYXVsdFByaXZhdGVOYW1lLCBEZWNsYXJhdGlvblR5cGU6
OkNvbnN0RGVjbGFyYXRpb24pOwogICAgICAgICAgICAgaWYgKGRlY2xhcmF0aW9uUmVzdWx0ICYg
RGVjbGFyYXRpb25SZXN1bHQ6OkludmFsaWREdXBsaWNhdGVEZWNsYXJhdGlvbikKICAgICAgICAg
ICAgICAgICBpbnRlcm5hbEZhaWxXaXRoTWVzc2FnZShmYWxzZSwgIk9ubHkgb25lICdkZWZhdWx0
JyBleHBvcnQgaXMgYWxsb3dlZCIpOwogCi0gICAgICAgICAgICBUcmVlRXhwcmVzc2lvbiBhc3Np
Z25tZW50ID0gY29udGV4dC5jcmVhdGVBc3NpZ25SZXNvbHZlKGxvY2F0aW9uLCBtX3ZtLT5wcm9w
ZXJ0eU5hbWVzLT5zdGFyRGVmYXVsdFByaXZhdGVOYW1lLCBleHByZXNzaW9uLCBzdGFydCwgc3Rh
cnQsIHRva2VuRW5kUG9zaXRpb24oKSwgQXNzaWdubWVudENvbnRleHQ6OkNvbnN0RGVjbGFyYXRp
b25TdGF0ZW1lbnQpOworICAgICAgICAgICAgVHJlZUV4cHJlc3Npb24gYXNzaWdubWVudCA9IGNv
bnRleHQuY3JlYXRlQXNzaWduUmVzb2x2ZShsb2NhdGlvbiwgbV92bS5wcm9wZXJ0eU5hbWVzLT5z
dGFyRGVmYXVsdFByaXZhdGVOYW1lLCBleHByZXNzaW9uLCBzdGFydCwgc3RhcnQsIHRva2VuRW5k
UG9zaXRpb24oKSwgQXNzaWdubWVudENvbnRleHQ6OkNvbnN0RGVjbGFyYXRpb25TdGF0ZW1lbnQp
OwogICAgICAgICAgICAgcmVzdWx0ID0gY29udGV4dC5jcmVhdGVFeHByU3RhdGVtZW50KGxvY2F0
aW9uLCBhc3NpZ25tZW50LCBzdGFydCwgdG9rZW5FbmRQb3NpdGlvbigpKTsKICAgICAgICAgICAg
IGZhaWxJZkZhbHNlKGF1dG9TZW1pQ29sb24oKSwgIkV4cGVjdGVkIGEgJzsnIGZvbGxvd2luZyBh
IHRhcmdldGVkIGV4cG9ydCBkZWNsYXJhdGlvbiIpOwogICAgICAgICB9CiAgICAgICAgIGZhaWxJ
ZkZhbHNlKHJlc3VsdCwgIkNhbm5vdCBwYXJzZSB0aGUgZGVjbGFyYXRpb24iKTsKIAotICAgICAg
ICBzZW1hbnRpY0ZhaWxJZkZhbHNlKGV4cG9ydE5hbWUobV92bS0+cHJvcGVydHlOYW1lcy0+ZGVm
YXVsdEtleXdvcmQpLCAiT25seSBvbmUgJ2RlZmF1bHQnIGV4cG9ydCBpcyBhbGxvd2VkIik7Ci0g
ICAgICAgIG1fbW9kdWxlU2NvcGVEYXRhLT5leHBvcnRCaW5kaW5nKCpsb2NhbE5hbWUsIG1fdm0t
PnByb3BlcnR5TmFtZXMtPmRlZmF1bHRLZXl3b3JkKTsKKyAgICAgICAgc2VtYW50aWNGYWlsSWZG
YWxzZShleHBvcnROYW1lKG1fdm0ucHJvcGVydHlOYW1lcy0+ZGVmYXVsdEtleXdvcmQpLCAiT25s
eSBvbmUgJ2RlZmF1bHQnIGV4cG9ydCBpcyBhbGxvd2VkIik7CisgICAgICAgIG1fbW9kdWxlU2Nv
cGVEYXRhLT5leHBvcnRCaW5kaW5nKCpsb2NhbE5hbWUsIG1fdm0ucHJvcGVydHlOYW1lcy0+ZGVm
YXVsdEtleXdvcmQpOwogICAgICAgICByZXR1cm4gY29udGV4dC5jcmVhdGVFeHBvcnREZWZhdWx0
RGVjbGFyYXRpb24oZXhwb3J0TG9jYXRpb24sIHJlc3VsdCwgKmxvY2FsTmFtZSk7CiAgICAgfQog
CkBAIC0zNTEwLDcgKzM1MTAsNyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVT
dGF0ZW1lCiAgICAgICAgIGhhbmRsZVByb2R1Y3Rpb25PckZhaWwyKENMT1NFQlJBQ0UsICJ9Iiwg
ImVuZCIsICJleHBvcnQgbGlzdCIpOwogCiAgICAgICAgIHR5cGVuYW1lIFRyZWVCdWlsZGVyOjpN
b2R1bGVOYW1lIG1vZHVsZU5hbWUgPSAwOwotICAgICAgICBpZiAobWF0Y2hDb250ZXh0dWFsS2V5
d29yZChtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5mcm9tKSkgeworICAgICAgICBpZiAobWF0Y2hDb250
ZXh0dWFsS2V5d29yZChtX3ZtLnByb3BlcnR5TmFtZXMtPmZyb20pKSB7CiAgICAgICAgICAgICBu
ZXh0KCk7CiAgICAgICAgICAgICBtb2R1bGVOYW1lID0gcGFyc2VNb2R1bGVOYW1lKGNvbnRleHQp
OwogICAgICAgICAgICAgZmFpbElmRmFsc2UobW9kdWxlTmFtZSwgIkNhbm5vdCBwYXJzZSB0aGUg
J2Zyb20nIGNsYXVzZSIpOwpAQCAtMzU2Niw3ICszNTY2LDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRy
ZWVCdWlsZGVyPiBUcmVlU3RhdGVtZQogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2Fz
ZSBJREVOVDoKLSAgICAgICAgICAgIGlmICgqbV90b2tlbi5tX2RhdGEuaWRlbnQgPT0gbV92bS0+
cHJvcGVydHlOYW1lcy0+YXN5bmMgJiYgIW1fdG9rZW4ubV9kYXRhLmVzY2FwZWQpIHsKKyAgICAg
ICAgICAgIGlmICgqbV90b2tlbi5tX2RhdGEuaWRlbnQgPT0gbV92bS5wcm9wZXJ0eU5hbWVzLT5h
c3luYyAmJiAhbV90b2tlbi5tX2RhdGEuZXNjYXBlZCkgewogICAgICAgICAgICAgICAgIG5leHQo
KTsKICAgICAgICAgICAgICAgICBzZW1hbnRpY0ZhaWxJZkZhbHNlKG1hdGNoKEZVTkNUSU9OKSAm
JiAhbV9sZXhlci0+aGFzTGluZVRlcm1pbmF0b3JCZWZvcmVUb2tlbigpLCAiRXhwZWN0ZWQgJ2Z1
bmN0aW9uJyBrZXl3b3JkIGZvbGxvd2luZyAnYXN5bmMnIGtleXdvcmQgd2l0aCBubyBwcmVjZWRp
bmcgbGluZSB0ZXJtaW5hdG9yIik7CiAgICAgICAgICAgICAgICAgRGVwdGhNYW5hZ2VyIHN0YXRl
bWVudERlcHRoKCZtX3N0YXRlbWVudERlcHRoKTsKQEAgLTM2OTIsNyArMzY5Miw3IEBAIHRlbXBs
YXRlIDx0eXBlbmFtZSBUcmVlQnVpbGRlcj4gVHJlZUV4cHIKICAgICAgICAgICAgIHJlc3RvcmVT
YXZlUG9pbnQoc2F2ZVBvaW50KTsKICAgICAgICAgICAgIGJvb2wgaXNBc3luY0Fycm93ID0gZmFs
c2U7CiAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoY2xhc3NpZmllci5pbmRpY2F0ZXNQb3NzaWJs
ZUFzeW5jQXJyb3dGdW5jdGlvbigpKSkgewotICAgICAgICAgICAgICAgIGlmIChtYXRjaENvbnRl
eHR1YWxLZXl3b3JkKG1fdm0tPnByb3BlcnR5TmFtZXMtPmFzeW5jKSkgeworICAgICAgICAgICAg
ICAgIGlmIChtYXRjaENvbnRleHR1YWxLZXl3b3JkKG1fdm0ucHJvcGVydHlOYW1lcy0+YXN5bmMp
KSB7CiAgICAgICAgICAgICAgICAgICAgIG5leHQoKTsKICAgICAgICAgICAgICAgICAgICAgaXNB
c3luY0Fycm93ID0gIW1fbGV4ZXItPmhhc0xpbmVUZXJtaW5hdG9yQmVmb3JlVG9rZW4oKTsKICAg
ICAgICAgICAgICAgICB9CkBAIC0zNzY3LDggKzM3NjcsOCBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUg
VHJlZUJ1aWxkZXI+IFRyZWVFeHByCiAgICAgICAgIG1fcGFyc2VyU3RhdGUuYXNzaWdubWVudENv
dW50Kys7CiAgICAgICAgIG5leHQoVHJlZUJ1aWxkZXI6OkRvbnRCdWlsZFN0cmluZ3MpOwogICAg
ICAgICBpZiAoc3RyaWN0TW9kZSgpICYmIG1fcGFyc2VyU3RhdGUubGFzdElkZW50aWZpZXIgJiYg
Y29udGV4dC5pc1Jlc29sdmUobGhzKSkgewotICAgICAgICAgICAgZmFpbElmVHJ1ZUlmU3RyaWN0
KG1fdm0tPnByb3BlcnR5TmFtZXMtPmV2YWwgPT0gKm1fcGFyc2VyU3RhdGUubGFzdElkZW50aWZp
ZXIsICJDYW5ub3QgbW9kaWZ5ICdldmFsJyBpbiBzdHJpY3QgbW9kZSIpOwotICAgICAgICAgICAg
ZmFpbElmVHJ1ZUlmU3RyaWN0KG1fdm0tPnByb3BlcnR5TmFtZXMtPmFyZ3VtZW50cyA9PSAqbV9w
YXJzZXJTdGF0ZS5sYXN0SWRlbnRpZmllciwgIkNhbm5vdCBtb2RpZnkgJ2FyZ3VtZW50cycgaW4g
c3RyaWN0IG1vZGUiKTsKKyAgICAgICAgICAgIGZhaWxJZlRydWVJZlN0cmljdChtX3ZtLnByb3Bl
cnR5TmFtZXMtPmV2YWwgPT0gKm1fcGFyc2VyU3RhdGUubGFzdElkZW50aWZpZXIsICJDYW5ub3Qg
bW9kaWZ5ICdldmFsJyBpbiBzdHJpY3QgbW9kZSIpOworICAgICAgICAgICAgZmFpbElmVHJ1ZUlm
U3RyaWN0KG1fdm0ucHJvcGVydHlOYW1lcy0+YXJndW1lbnRzID09ICptX3BhcnNlclN0YXRlLmxh
c3RJZGVudGlmaWVyLCAiQ2Fubm90IG1vZGlmeSAnYXJndW1lbnRzJyBpbiBzdHJpY3QgbW9kZSIp
OwogICAgICAgICAgICAgbV9wYXJzZXJTdGF0ZS5sYXN0SWRlbnRpZmllciA9IDA7CiAgICAgICAg
IH0KICAgICAgICAgbGhzID0gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbihjb250ZXh0KTsKQEAg
LTM5NzEsNyArMzk3MSw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVByb3Bl
cnQKIHBhcnNlUHJvcGVydHk6CiAgICAgc3dpdGNoIChtX3Rva2VuLm1fdHlwZSkgewogICAgIGNh
c2UgSURFTlQ6Ci0gICAgICAgIGlmIChVTkxJS0VMWSgqbV90b2tlbi5tX2RhdGEuaWRlbnQgPT0g
bV92bS0+cHJvcGVydHlOYW1lcy0+YXN5bmMgJiYgIW1fdG9rZW4ubV9kYXRhLmVzY2FwZWQpKSB7
CisgICAgICAgIGlmIChVTkxJS0VMWSgqbV90b2tlbi5tX2RhdGEuaWRlbnQgPT0gbV92bS5wcm9w
ZXJ0eU5hbWVzLT5hc3luYyAmJiAhbV90b2tlbi5tX2RhdGEuZXNjYXBlZCkpIHsKICAgICAgICAg
ICAgIGlmIChwYXJzZU1vZGUgPT0gU291cmNlUGFyc2VNb2RlOjpNZXRob2RNb2RlKSB7CiAgICAg
ICAgICAgICAgICAgU2F2ZVBvaW50IHNhdmVQb2ludCA9IGNyZWF0ZVNhdmVQb2ludCgpOwogICAg
ICAgICAgICAgICAgIG5leHQoKTsKQEAgLTQwMDEsNyArNDAwMSw3IEBAIG5hbWVkUHJvcGVydHk6
CiAgICAgICAgIHVuc2lnbmVkIGdldHRlck9yU2V0dGVyU3RhcnRPZmZzZXQgPSB0b2tlblN0YXJ0
KCk7CiAgICAgICAgIEpTVG9rZW4gaWRlbnRUb2tlbiA9IG1fdG9rZW47CiAKLSAgICAgICAgaWYg
KGNvbXBsZXRlIHx8ICh3YXNJZGVudCAmJiAhaXNHZW5lcmF0b3JNZXRob2RQYXJzZU1vZGUocGFy
c2VNb2RlKSAgJiYgKCppZGVudCA9PSBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5nZXQgfHwgKmlkZW50
ID09IG1fdm0tPnByb3BlcnR5TmFtZXMtPnNldCkpKQorICAgICAgICBpZiAoY29tcGxldGUgfHwg
KHdhc0lkZW50ICYmICFpc0dlbmVyYXRvck1ldGhvZFBhcnNlTW9kZShwYXJzZU1vZGUpICAmJiAo
KmlkZW50ID09IG1fdm0ucHJvcGVydHlOYW1lcy0+Z2V0IHx8ICppZGVudCA9PSBtX3ZtLnByb3Bl
cnR5TmFtZXMtPnNldCkpKQogICAgICAgICAgICAgbmV4dEV4cGVjdElkZW50aWZpZXIoTGV4ZXJG
bGFnc0lnbm9yZVJlc2VydmVkV29yZHMpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBuZXh0
RXhwZWN0SWRlbnRpZmllcihMZXhlckZsYWdzSWdub3JlUmVzZXJ2ZWRXb3JkcyB8IFRyZWVCdWls
ZGVyOjpEb250QnVpbGRLZXl3b3Jkcyk7CkBAIC00MDExLDcgKzQwMTEsNyBAQCBuYW1lZFByb3Bl
cnR5OgogICAgICAgICAgICAgVHJlZUV4cHJlc3Npb24gbm9kZSA9IHBhcnNlQXNzaWdubWVudEV4
cHJlc3Npb25PclByb3BhZ2F0ZUVycm9yQ2xhc3MoY29udGV4dCk7CiAgICAgICAgICAgICBmYWls
SWZGYWxzZShub2RlLCAiQ2Fubm90IHBhcnNlIGV4cHJlc3Npb24gZm9yIHByb3BlcnR5IGRlY2xh
cmF0aW9uIik7CiAgICAgICAgICAgICBjb250ZXh0LnNldEVuZE9mZnNldChub2RlLCBtX2xleGVy
LT5jdXJyZW50T2Zmc2V0KCkpOwotICAgICAgICAgICAgSW5mZXJOYW1lIGluZmVyTmFtZSA9IGlk
ZW50ICYmICppZGVudCA9PSBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT51bmRlcnNjb3JlUHJvdG8gPyBJ
bmZlck5hbWU6OkRpc2FsbG93ZWQgOiBJbmZlck5hbWU6OkFsbG93ZWQ7CisgICAgICAgICAgICBJ
bmZlck5hbWUgaW5mZXJOYW1lID0gaWRlbnQgJiYgKmlkZW50ID09IG1fdm0ucHJvcGVydHlOYW1l
cy0+dW5kZXJzY29yZVByb3RvID8gSW5mZXJOYW1lOjpEaXNhbGxvd2VkIDogSW5mZXJOYW1lOjpB
bGxvd2VkOwogICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlUHJvcGVydHkoaWRlbnQs
IG5vZGUsIFByb3BlcnR5Tm9kZTo6Q29uc3RhbnQsIFByb3BlcnR5Tm9kZTo6VW5rbm93biwgY29t
cGxldGUsIFN1cGVyQmluZGluZzo6Tm90TmVlZGVkLCBpbmZlck5hbWUsIENsYXNzRWxlbWVudFRh
Zzo6Tm8pOwogICAgICAgICB9CiAKQEAgLTQwMjgsNyArNDAyOCw3IEBAIG5hbWVkUHJvcGVydHk6
CiAgICAgICAgICAgICBzZW1hbnRpY0ZhaWx1cmVEdWVUb0tleXdvcmRDaGVja2luZ1Rva2VuKGlk
ZW50VG9rZW4sICJzaG9ydGhhbmQgcHJvcGVydHkgbmFtZSIpOwogICAgICAgICAgICAgSlNUZXh0
UG9zaXRpb24gc3RhcnQgPSB0b2tlblN0YXJ0UG9zaXRpb24oKTsKICAgICAgICAgICAgIEpTVG9r
ZW5Mb2NhdGlvbiBsb2NhdGlvbih0b2tlbkxvY2F0aW9uKCkpOwotICAgICAgICAgICAgY3VycmVu
dFNjb3BlKCktPnVzZVZhcmlhYmxlKGlkZW50LCBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5ldmFsID09
ICppZGVudCk7CisgICAgICAgICAgICBjdXJyZW50U2NvcGUoKS0+dXNlVmFyaWFibGUoaWRlbnQs
IG1fdm0ucHJvcGVydHlOYW1lcy0+ZXZhbCA9PSAqaWRlbnQpOwogICAgICAgICAgICAgaWYgKGN1
cnJlbnRTY29wZSgpLT5pc0Fycm93RnVuY3Rpb24oKSkKICAgICAgICAgICAgICAgICBjdXJyZW50
U2NvcGUoKS0+c2V0SW5uZXJBcnJvd0Z1bmN0aW9uVXNlc0V2YWwoKTsKICAgICAgICAgICAgIFRy
ZWVFeHByZXNzaW9uIG5vZGUgPSBjb250ZXh0LmNyZWF0ZVJlc29sdmUobG9jYXRpb24sICppZGVu
dCwgc3RhcnQsIGxhc3RUb2tlbkVuZFBvc2l0aW9uKCkpOwpAQCAtNDAzOSw5ICs0MDM5LDkgQEAg
bmFtZWRQcm9wZXJ0eToKICAgICAgICAgICAgIGNsYXNzaWZ5RXhwcmVzc2lvbkVycm9yKEVycm9y
SW5kaWNhdGVzUGF0dGVybik7CiAKICAgICAgICAgUHJvcGVydHlOb2RlOjpUeXBlIHR5cGU7Ci0g
ICAgICAgIGlmICgqaWRlbnQgPT0gbV92bS0+cHJvcGVydHlOYW1lcy0+Z2V0KQorICAgICAgICBp
ZiAoKmlkZW50ID09IG1fdm0ucHJvcGVydHlOYW1lcy0+Z2V0KQogICAgICAgICAgICAgdHlwZSA9
IFByb3BlcnR5Tm9kZTo6R2V0dGVyOwotICAgICAgICBlbHNlIGlmICgqaWRlbnQgPT0gbV92bS0+
cHJvcGVydHlOYW1lcy0+c2V0KQorICAgICAgICBlbHNlIGlmICgqaWRlbnQgPT0gbV92bS5wcm9w
ZXJ0eU5hbWVzLT5zZXQpCiAgICAgICAgICAgICB0eXBlID0gUHJvcGVydHlOb2RlOjpTZXR0ZXI7
CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGZhaWxXaXRoTWVzc2FnZSgiRXhwZWN0ZWQgYSAn
OicgZm9sbG93aW5nIHRoZSBwcm9wZXJ0eSBuYW1lICciLCBpZGVudC0+aW1wbCgpLCAiJyIpOwpA
QCAtNDA1Myw3ICs0MDUzLDcgQEAgbmFtZWRQcm9wZXJ0eToKICAgICAgICAgbmV4dCgpOwogCiAg
ICAgICAgIGlmIChtYXRjaChPUEVOUEFSRU4pKSB7Ci0gICAgICAgICAgICBjb25zdCBJZGVudGlm
aWVyJiBpZGVudCA9IG1fcGFyc2VyQXJlbmEuaWRlbnRpZmllckFyZW5hKCkubWFrZU51bWVyaWNJ
ZGVudGlmaWVyKGNvbnN0X2Nhc3Q8Vk0qPihtX3ZtKSwgcHJvcGVydHlOYW1lKTsKKyAgICAgICAg
ICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gbV9wYXJzZXJBcmVuYS5pZGVudGlmaWVyQXJl
bmEoKS5tYWtlTnVtZXJpY0lkZW50aWZpZXIoY29uc3RfY2FzdDxWTSY+KG1fdm0pLCBwcm9wZXJ0
eU5hbWUpOwogICAgICAgICAgICAgYXV0byBtZXRob2QgPSBwYXJzZVByb3BlcnR5TWV0aG9kKGNv
bnRleHQsICZpZGVudCwgcGFyc2VNb2RlKTsKICAgICAgICAgICAgIHByb3BhZ2F0ZUVycm9yKCk7
CiAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5jcmVhdGVQcm9wZXJ0eSgmaWRlbnQsIG1ldGhv
ZCwgUHJvcGVydHlOb2RlOjpDb25zdGFudCwgUHJvcGVydHlOb2RlOjpVbmtub3duLCBjb21wbGV0
ZSwgU3VwZXJCaW5kaW5nOjpOZWVkZWQsIEluZmVyTmFtZTo6QWxsb3dlZCwgQ2xhc3NFbGVtZW50
VGFnOjpObyk7CkBAIC00MDY0LDcgKzQwNjQsNyBAQCBuYW1lZFByb3BlcnR5OgogICAgICAgICBU
cmVlRXhwcmVzc2lvbiBub2RlID0gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbihjb250ZXh0KTsK
ICAgICAgICAgZmFpbElmRmFsc2Uobm9kZSwgIkNhbm5vdCBwYXJzZSBleHByZXNzaW9uIGZvciBw
cm9wZXJ0eSBkZWNsYXJhdGlvbiIpOwogICAgICAgICBjb250ZXh0LnNldEVuZE9mZnNldChub2Rl
LCBtX2xleGVyLT5jdXJyZW50T2Zmc2V0KCkpOwotICAgICAgICByZXR1cm4gY29udGV4dC5jcmVh
dGVQcm9wZXJ0eShjb25zdF9jYXN0PFZNKj4obV92bSksIG1fcGFyc2VyQXJlbmEsIHByb3BlcnR5
TmFtZSwgbm9kZSwgUHJvcGVydHlOb2RlOjpDb25zdGFudCwgUHJvcGVydHlOb2RlOjpVbmtub3du
LCBjb21wbGV0ZSwgU3VwZXJCaW5kaW5nOjpOb3ROZWVkZWQsIENsYXNzRWxlbWVudFRhZzo6Tm8p
OworICAgICAgICByZXR1cm4gY29udGV4dC5jcmVhdGVQcm9wZXJ0eShjb25zdF9jYXN0PFZNJj4o
bV92bSksIG1fcGFyc2VyQXJlbmEsIHByb3BlcnR5TmFtZSwgbm9kZSwgUHJvcGVydHlOb2RlOjpD
b25zdGFudCwgUHJvcGVydHlOb2RlOjpVbmtub3duLCBjb21wbGV0ZSwgU3VwZXJCaW5kaW5nOjpO
b3ROZWVkZWQsIENsYXNzRWxlbWVudFRhZzo6Tm8pOwogICAgIH0KICAgICBjYXNlIE9QRU5CUkFD
S0VUOiB7CiAgICAgICAgIG5leHQoKTsKQEAgLTQwNzMsNyArNDA3Myw3IEBAIG5hbWVkUHJvcGVy
dHk6CiAgICAgICAgIGhhbmRsZVByb2R1Y3Rpb25PckZhaWwoQ0xPU0VCUkFDS0VULCAiXSIsICJl
bmQiLCAiY29tcHV0ZWQgcHJvcGVydHkgbmFtZSIpOwogCiAgICAgICAgIGlmIChtYXRjaChPUEVO
UEFSRU4pKSB7Ci0gICAgICAgICAgICBhdXRvIG1ldGhvZCA9IHBhcnNlUHJvcGVydHlNZXRob2Qo
Y29udGV4dCwgJm1fdm0tPnByb3BlcnR5TmFtZXMtPm51bGxJZGVudGlmaWVyLCBwYXJzZU1vZGUp
OworICAgICAgICAgICAgYXV0byBtZXRob2QgPSBwYXJzZVByb3BlcnR5TWV0aG9kKGNvbnRleHQs
ICZtX3ZtLnByb3BlcnR5TmFtZXMtPm51bGxJZGVudGlmaWVyLCBwYXJzZU1vZGUpOwogICAgICAg
ICAgICAgcHJvcGFnYXRlRXJyb3IoKTsKICAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmNyZWF0
ZVByb3BlcnR5KHByb3BlcnR5TmFtZSwgbWV0aG9kLCBzdGF0aWNfY2FzdDxQcm9wZXJ0eU5vZGU6
OlR5cGU+KFByb3BlcnR5Tm9kZTo6Q29uc3RhbnQgfCBQcm9wZXJ0eU5vZGU6OkNvbXB1dGVkKSwg
UHJvcGVydHlOb2RlOjpLbm93bkRpcmVjdCwgY29tcGxldGUsIFN1cGVyQmluZGluZzo6TmVlZGVk
LCBDbGFzc0VsZW1lbnRUYWc6Ok5vKTsKICAgICAgICAgfQpAQCAtNDEyNiw5ICs0MTI2LDkgQEAg
dGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlUHJvcGVydAogCiAgICAgaWYgKG1hdGNo
U3BlY0lkZW50aWZpZXIoKSB8fCBtYXRjaChTVFJJTkcpIHx8IG1fdG9rZW4ubV90eXBlICYgS2V5
d29yZFRva2VuRmxhZykgewogICAgICAgICBzdHJpbmdQcm9wZXJ0eU5hbWUgPSBtX3Rva2VuLm1f
ZGF0YS5pZGVudDsKLSAgICAgICAgc2VtYW50aWNGYWlsSWZUcnVlKHRhZyA9PSBDbGFzc0VsZW1l
bnRUYWc6OlN0YXRpYyAmJiAqc3RyaW5nUHJvcGVydHlOYW1lID09IG1fdm0tPnByb3BlcnR5TmFt
ZXMtPnByb3RvdHlwZSwKKyAgICAgICAgc2VtYW50aWNGYWlsSWZUcnVlKHRhZyA9PSBDbGFzc0Vs
ZW1lbnRUYWc6OlN0YXRpYyAmJiAqc3RyaW5nUHJvcGVydHlOYW1lID09IG1fdm0ucHJvcGVydHlO
YW1lcy0+cHJvdG90eXBlLAogICAgICAgICAgICAgIkNhbm5vdCBkZWNsYXJlIGEgc3RhdGljIG1l
dGhvZCBuYW1lZCAncHJvdG90eXBlJyIpOwotICAgICAgICBzZW1hbnRpY0ZhaWxJZlRydWUodGFn
ID09IENsYXNzRWxlbWVudFRhZzo6SW5zdGFuY2UgJiYgKnN0cmluZ1Byb3BlcnR5TmFtZSA9PSBt
X3ZtLT5wcm9wZXJ0eU5hbWVzLT5jb25zdHJ1Y3RvciwKKyAgICAgICAgc2VtYW50aWNGYWlsSWZU
cnVlKHRhZyA9PSBDbGFzc0VsZW1lbnRUYWc6Okluc3RhbmNlICYmICpzdHJpbmdQcm9wZXJ0eU5h
bWUgPT0gbV92bS5wcm9wZXJ0eU5hbWVzLT5jb25zdHJ1Y3RvciwKICAgICAgICAgICAgICJDYW5u
b3QgZGVjbGFyZSBhIGdldHRlciBvciBzZXR0ZXIgbmFtZWQgJ2NvbnN0cnVjdG9yJyIpOwogICAg
ICAgICBuZXh0KCk7CiAgICAgfSBlbHNlIGlmIChtYXRjaChET1VCTEUpIHx8IG1hdGNoKElOVEVH
RVIpKSB7CkBAIC00MTU3LDcgKzQxNTcsNyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+
IFRyZWVQcm9wZXJ0CiAgICAgaWYgKGNvbXB1dGVkUHJvcGVydHlOYW1lKQogICAgICAgICByZXR1
cm4gY29udGV4dC5jcmVhdGVHZXR0ZXJPclNldHRlclByb3BlcnR5KGxvY2F0aW9uLCBzdGF0aWNf
Y2FzdDxQcm9wZXJ0eU5vZGU6OlR5cGU+KHR5cGUgfCBQcm9wZXJ0eU5vZGU6OkNvbXB1dGVkKSwg
c3RyaWN0LCBjb21wdXRlZFByb3BlcnR5TmFtZSwgaW5mbywgdGFnKTsKIAotICAgIHJldHVybiBj
b250ZXh0LmNyZWF0ZUdldHRlck9yU2V0dGVyUHJvcGVydHkoY29uc3RfY2FzdDxWTSo+KG1fdm0p
LCBtX3BhcnNlckFyZW5hLCBsb2NhdGlvbiwgdHlwZSwgc3RyaWN0LCBudW1lcmljUHJvcGVydHlO
YW1lLCBpbmZvLCB0YWcpOworICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUdldHRlck9yU2V0dGVy
UHJvcGVydHkoY29uc3RfY2FzdDxWTSY+KG1fdm0pLCBtX3BhcnNlckFyZW5hLCBsb2NhdGlvbiwg
dHlwZSwgc3RyaWN0LCBudW1lcmljUHJvcGVydHlOYW1lLCBpbmZvLCB0YWcpOwogfQogCiB0ZW1w
bGF0ZSA8dHlwZW5hbWUgTGV4ZXJUeXBlPgpAQCAtNDIyNCw3ICs0MjI0LDcgQEAgdGVtcGxhdGUg
PGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzcwogCiAgICAgYm9vbCBzZWVuVW5kZXJzY29y
ZVByb3RvID0gZmFsc2U7CiAgICAgaWYgKHNob3VsZENoZWNrUHJvcGVydHlGb3JVbmRlcnNjb3Jl
UHJvdG9EdXBsaWNhdGUoY29udGV4dCwgcHJvcGVydHkpKQotICAgICAgICBzZWVuVW5kZXJzY29y
ZVByb3RvID0gKmNvbnRleHQuZ2V0TmFtZShwcm9wZXJ0eSkgPT0gbV92bS0+cHJvcGVydHlOYW1l
cy0+dW5kZXJzY29yZVByb3RvOworICAgICAgICBzZWVuVW5kZXJzY29yZVByb3RvID0gKmNvbnRl
eHQuZ2V0TmFtZShwcm9wZXJ0eSkgPT0gbV92bS5wcm9wZXJ0eU5hbWVzLT51bmRlcnNjb3JlUHJv
dG87CiAKICAgICBUcmVlUHJvcGVydHlMaXN0IHByb3BlcnR5TGlzdCA9IGNvbnRleHQuY3JlYXRl
UHJvcGVydHlMaXN0KGxvY2F0aW9uLCBwcm9wZXJ0eSk7CiAgICAgVHJlZVByb3BlcnR5TGlzdCB0
YWlsID0gcHJvcGVydHlMaXN0OwpAQCAtNDI0MCw3ICs0MjQwLDcgQEAgdGVtcGxhdGUgPGNsYXNz
IFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzcwogICAgICAgICAgICAgcmV0dXJuIHBhcnNlU3RyaWN0
T2JqZWN0TGl0ZXJhbChjb250ZXh0KTsKICAgICAgICAgfQogICAgICAgICBpZiAoc2hvdWxkQ2hl
Y2tQcm9wZXJ0eUZvclVuZGVyc2NvcmVQcm90b0R1cGxpY2F0ZShjb250ZXh0LCBwcm9wZXJ0eSkp
IHsKLSAgICAgICAgICAgIGlmICgqY29udGV4dC5nZXROYW1lKHByb3BlcnR5KSA9PSBtX3ZtLT5w
cm9wZXJ0eU5hbWVzLT51bmRlcnNjb3JlUHJvdG8pIHsKKyAgICAgICAgICAgIGlmICgqY29udGV4
dC5nZXROYW1lKHByb3BlcnR5KSA9PSBtX3ZtLnByb3BlcnR5TmFtZXMtPnVuZGVyc2NvcmVQcm90
bykgewogICAgICAgICAgICAgICAgIHNlbWFudGljRmFpbElmVHJ1ZShzZWVuVW5kZXJzY29yZVBy
b3RvLCAiQXR0ZW1wdGVkIHRvIHJlZGVmaW5lIF9fcHJvdG9fXyBwcm9wZXJ0eSIpOwogICAgICAg
ICAgICAgICAgIHNlZW5VbmRlcnNjb3JlUHJvdG8gPSB0cnVlOwogICAgICAgICAgICAgfQpAQCAt
NDI3NCw3ICs0Mjc0LDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVz
cwogCiAgICAgYm9vbCBzZWVuVW5kZXJzY29yZVByb3RvID0gZmFsc2U7CiAgICAgaWYgKHNob3Vs
ZENoZWNrUHJvcGVydHlGb3JVbmRlcnNjb3JlUHJvdG9EdXBsaWNhdGUoY29udGV4dCwgcHJvcGVy
dHkpKQotICAgICAgICBzZWVuVW5kZXJzY29yZVByb3RvID0gKmNvbnRleHQuZ2V0TmFtZShwcm9w
ZXJ0eSkgPT0gbV92bS0+cHJvcGVydHlOYW1lcy0+dW5kZXJzY29yZVByb3RvOworICAgICAgICBz
ZWVuVW5kZXJzY29yZVByb3RvID0gKmNvbnRleHQuZ2V0TmFtZShwcm9wZXJ0eSkgPT0gbV92bS5w
cm9wZXJ0eU5hbWVzLT51bmRlcnNjb3JlUHJvdG87CiAKICAgICBUcmVlUHJvcGVydHlMaXN0IHBy
b3BlcnR5TGlzdCA9IGNvbnRleHQuY3JlYXRlUHJvcGVydHlMaXN0KGxvY2F0aW9uLCBwcm9wZXJ0
eSk7CiAgICAgVHJlZVByb3BlcnR5TGlzdCB0YWlsID0gcHJvcGVydHlMaXN0OwpAQCAtNDI4Niw3
ICs0Mjg2LDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzcwogICAg
ICAgICBwcm9wZXJ0eSA9IHBhcnNlUHJvcGVydHkoY29udGV4dCwgdHJ1ZSk7CiAgICAgICAgIGZh
aWxJZkZhbHNlKHByb3BlcnR5LCAiQ2Fubm90IHBhcnNlIG9iamVjdCBsaXRlcmFsIHByb3BlcnR5
Iik7CiAgICAgICAgIGlmIChzaG91bGRDaGVja1Byb3BlcnR5Rm9yVW5kZXJzY29yZVByb3RvRHVw
bGljYXRlKGNvbnRleHQsIHByb3BlcnR5KSkgewotICAgICAgICAgICAgaWYgKCpjb250ZXh0Lmdl
dE5hbWUocHJvcGVydHkpID09IG1fdm0tPnByb3BlcnR5TmFtZXMtPnVuZGVyc2NvcmVQcm90bykg
eworICAgICAgICAgICAgaWYgKCpjb250ZXh0LmdldE5hbWUocHJvcGVydHkpID09IG1fdm0ucHJv
cGVydHlOYW1lcy0+dW5kZXJzY29yZVByb3RvKSB7CiAgICAgICAgICAgICAgICAgc2VtYW50aWNG
YWlsSWZUcnVlKHNlZW5VbmRlcnNjb3JlUHJvdG8sICJBdHRlbXB0ZWQgdG8gcmVkZWZpbmUgX19w
cm90b19fIHByb3BlcnR5Iik7CiAgICAgICAgICAgICAgICAgc2VlblVuZGVyc2NvcmVQcm90byA9
IHRydWU7CiAgICAgICAgICAgICB9CkBAIC00MzgxLDcgKzQzODEsNyBAQCB0ZW1wbGF0ZSA8Y2xh
c3MgVHJlZUJ1aWxkZXI+IFRyZWVDbGFzc0V4CiB7CiAgICAgQVNTRVJUKG1hdGNoKENMQVNTVE9L
RU4pKTsKICAgICBQYXJzZXJDbGFzc0luZm88VHJlZUJ1aWxkZXI+IGluZm87Ci0gICAgaW5mby5j
bGFzc05hbWUgPSAmbV92bS0+cHJvcGVydHlOYW1lcy0+bnVsbElkZW50aWZpZXI7CisgICAgaW5m
by5jbGFzc05hbWUgPSAmbV92bS5wcm9wZXJ0eU5hbWVzLT5udWxsSWRlbnRpZmllcjsKICAgICBy
ZXR1cm4gcGFyc2VDbGFzcyhjb250ZXh0LCBGdW5jdGlvbk5hbWVSZXF1aXJlbWVudHM6Ok5vbmUs
IGluZm8pOwogfQogCkBAIC00MzkzLDcgKzQzOTMsNyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1
aWxkZXI+IFRyZWVFeHByZXNzCiAgICAgdW5zaWduZWQgZnVuY3Rpb25LZXl3b3JkU3RhcnQgPSB0
b2tlblN0YXJ0KCk7CiAgICAgbmV4dCgpOwogICAgIFBhcnNlckZ1bmN0aW9uSW5mbzxUcmVlQnVp
bGRlcj4gZnVuY3Rpb25JbmZvOwotICAgIGZ1bmN0aW9uSW5mby5uYW1lID0gJm1fdm0tPnByb3Bl
cnR5TmFtZXMtPm51bGxJZGVudGlmaWVyOworICAgIGZ1bmN0aW9uSW5mby5uYW1lID0gJm1fdm0u
cHJvcGVydHlOYW1lcy0+bnVsbElkZW50aWZpZXI7CiAgICAgU291cmNlUGFyc2VNb2RlIHBhcnNl
TW9kZSA9IFNvdXJjZVBhcnNlTW9kZTo6Tm9ybWFsRnVuY3Rpb25Nb2RlOwogICAgIGlmIChjb25z
dW1lKFRJTUVTKSkKICAgICAgICAgcGFyc2VNb2RlID0gU291cmNlUGFyc2VNb2RlOjpHZW5lcmF0
b3JXcmFwcGVyRnVuY3Rpb25Nb2RlOwpAQCAtNDQxNCw3ICs0NDE0LDcgQEAgdGVtcGxhdGUgPGNs
YXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzcwogICAgICAgICBwYXJzZU1vZGUgPSBTb3VyY2VQ
YXJzZU1vZGU6OkFzeW5jR2VuZXJhdG9yV3JhcHBlckZ1bmN0aW9uTW9kZTsKIAogICAgIFBhcnNl
ckZ1bmN0aW9uSW5mbzxUcmVlQnVpbGRlcj4gZnVuY3Rpb25JbmZvOwotICAgIGZ1bmN0aW9uSW5m
by5uYW1lID0gJm1fdm0tPnByb3BlcnR5TmFtZXMtPm51bGxJZGVudGlmaWVyOworICAgIGZ1bmN0
aW9uSW5mby5uYW1lID0gJm1fdm0ucHJvcGVydHlOYW1lcy0+bnVsbElkZW50aWZpZXI7CiAgICAg
ZmFpbElmRmFsc2UocGFyc2VGdW5jdGlvbkluZm8oY29udGV4dCwgRnVuY3Rpb25OYW1lUmVxdWly
ZW1lbnRzOjpOb25lLCBwYXJzZU1vZGUsIGZhbHNlLCBDb25zdHJ1Y3RvcktpbmQ6Ok5vbmUsIFN1
cGVyQmluZGluZzo6Tm90TmVlZGVkLCBmdW5jdGlvbktleXdvcmRTdGFydCwgZnVuY3Rpb25JbmZv
LCBGdW5jdGlvbkRlZmluaXRpb25UeXBlOjpFeHByZXNzaW9uKSwgcGFyc2VNb2RlID09IFNvdXJj
ZVBhcnNlTW9kZTo6QXN5bmNGdW5jdGlvbk1vZGUgPyAiQ2Fubm90IHBhcnNlIGFzeW5jIGZ1bmN0
aW9uIGV4cHJlc3Npb24iIDogIkNhbm5vdCBwYXJzZSBhc3luYyBnZW5lcmF0b3IgZnVuY3Rpb24g
ZXhwcmVzc2lvbiIpOwogICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUZ1bmN0aW9uRXhwcihsb2Nh
dGlvbiwgZnVuY3Rpb25JbmZvKTsKIH0KQEAgLTQ1MjYsNyArNDUyNiw3IEBAIHRlbXBsYXRlIDxj
bGFzcyBUcmVlQnVpbGRlcj4gVHJlZUV4cHJlc3MKIAogICAgICAgICBnb3RvIGlkZW50aWZpZXJF
eHByZXNzaW9uOwogICAgIGNhc2UgSURFTlQ6IHsKLSAgICAgICAgaWYgKFVOTElLRUxZKCptX3Rv
a2VuLm1fZGF0YS5pZGVudCA9PSBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5hc3luYyAmJiAhbV90b2tl
bi5tX2RhdGEuZXNjYXBlZCkpIHsKKyAgICAgICAgaWYgKFVOTElLRUxZKCptX3Rva2VuLm1fZGF0
YS5pZGVudCA9PSBtX3ZtLnByb3BlcnR5TmFtZXMtPmFzeW5jICYmICFtX3Rva2VuLm1fZGF0YS5l
c2NhcGVkKSkgewogICAgICAgICAgICAgSlNUZXh0UG9zaXRpb24gc3RhcnQgPSB0b2tlblN0YXJ0
UG9zaXRpb24oKTsKICAgICAgICAgICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gbV90b2tl
bi5tX2RhdGEuaWRlbnQ7CiAgICAgICAgICAgICBKU1Rva2VuTG9jYXRpb24gbG9jYXRpb24odG9r
ZW5Mb2NhdGlvbigpKTsKQEAgLTQ1NTEsNyArNDU1MSw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVl
QnVpbGRlcj4gVHJlZUV4cHJlc3MKICAgICAgICAgaWYgKFVOTElLRUxZKG1hdGNoKEFSUk9XRlVO
Q1RJT04pKSkKICAgICAgICAgICAgIHJldHVybiAwOwogCi0gICAgICAgIHJldHVybiBjcmVhdGVS
ZXNvbHZlQW5kVXNlVmFyaWFibGUoY29udGV4dCwgaWRlbnQsICppZGVudCA9PSBtX3ZtLT5wcm9w
ZXJ0eU5hbWVzLT5ldmFsLCBzdGFydCwgbG9jYXRpb24pOworICAgICAgICByZXR1cm4gY3JlYXRl
UmVzb2x2ZUFuZFVzZVZhcmlhYmxlKGNvbnRleHQsIGlkZW50LCAqaWRlbnQgPT0gbV92bS5wcm9w
ZXJ0eU5hbWVzLT5ldmFsLCBzdGFydCwgbG9jYXRpb24pOwogICAgIH0KICAgICBjYXNlIEJJR0lO
VDogewogICAgICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9IG1fdG9rZW4ubV9kYXRhLmJp
Z0ludFN0cmluZzsKQEAgLTQ3MzYsNyArNDczNiw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVp
bGRlcj4gVHJlZUV4cHJlc3MKICAgICBib29sIGJhc2VJc05ld1RhcmdldCA9IGZhbHNlOwogICAg
IGlmIChuZXdDb3VudCAmJiBtYXRjaChET1QpKSB7CiAgICAgICAgIG5leHQoKTsKLSAgICAgICAg
aWYgKG1hdGNoQ29udGV4dHVhbEtleXdvcmQobV92bS0+cHJvcGVydHlOYW1lcy0+dGFyZ2V0KSkg
eworICAgICAgICBpZiAobWF0Y2hDb250ZXh0dWFsS2V5d29yZChtX3ZtLnByb3BlcnR5TmFtZXMt
PnRhcmdldCkpIHsKICAgICAgICAgICAgIFNjb3BlUmVmIGNsb3Nlc3RPcmRpbmFyeUZ1bmN0aW9u
U2NvcGUgPSBjbG9zZXN0UGFyZW50T3JkaW5hcnlGdW5jdGlvbk5vbkxleGljYWxTY29wZSgpOwog
ICAgICAgICAgICAgc2VtYW50aWNGYWlsSWZGYWxzZShjdXJyZW50U2NvcGUoKS0+aXNGdW5jdGlv
bigpIHx8IGNsb3Nlc3RPcmRpbmFyeUZ1bmN0aW9uU2NvcGUtPmV2YWxDb250ZXh0VHlwZSgpID09
IEV2YWxDb250ZXh0VHlwZTo6RnVuY3Rpb25FdmFsQ29udGV4dCwgIm5ldy50YXJnZXQgaXMgb25s
eSB2YWxpZCBpbnNpZGUgZnVuY3Rpb25zIik7CiAgICAgICAgICAgICBiYXNlSXNOZXdUYXJnZXQg
PSB0cnVlOwpAQCAtNDc3Nyw5ICs0Nzc3LDkgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVy
PiBUcmVlRXhwcmVzcwogICAgICAgICBuZXh0KCk7CiAgICAgICAgIEpTVGV4dFBvc2l0aW9uIGV4
cHJlc3Npb25FbmQgPSBsYXN0VG9rZW5FbmRQb3NpdGlvbigpOwogICAgICAgICBpZiAoY29uc3Vt
ZShET1QpKSB7Ci0gICAgICAgICAgICBpZiAobWF0Y2hDb250ZXh0dWFsS2V5d29yZChtX3ZtLT5w
cm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5tZXRhUHVibGljTmFtZSgpKSkgeworICAgICAg
ICAgICAgaWYgKG1hdGNoQ29udGV4dHVhbEtleXdvcmQobV92bS5wcm9wZXJ0eU5hbWVzLT5idWls
dGluTmFtZXMoKS5tZXRhUHVibGljTmFtZSgpKSkgewogICAgICAgICAgICAgICAgIHNlbWFudGlj
RmFpbElmRmFsc2UobV9zY3JpcHRNb2RlID09IEpTUGFyc2VyU2NyaXB0TW9kZTo6TW9kdWxlLCAi
aW1wb3J0Lm1ldGEgaXMgb25seSB2YWxpZCBpbnNpZGUgbW9kdWxlcyIpOwotICAgICAgICAgICAg
ICAgIGJhc2UgPSBjb250ZXh0LmNyZWF0ZUltcG9ydE1ldGFFeHByKGxvY2F0aW9uLCBjcmVhdGVS
ZXNvbHZlQW5kVXNlVmFyaWFibGUoY29udGV4dCwgJm1fdm0tPnByb3BlcnR5TmFtZXMtPm1ldGFQ
cml2YXRlTmFtZSwgZmFsc2UsIGV4cHJlc3Npb25TdGFydCwgbG9jYXRpb24pKTsKKyAgICAgICAg
ICAgICAgICBiYXNlID0gY29udGV4dC5jcmVhdGVJbXBvcnRNZXRhRXhwcihsb2NhdGlvbiwgY3Jl
YXRlUmVzb2x2ZUFuZFVzZVZhcmlhYmxlKGNvbnRleHQsICZtX3ZtLnByb3BlcnR5TmFtZXMtPm1l
dGFQcml2YXRlTmFtZSwgZmFsc2UsIGV4cHJlc3Npb25TdGFydCwgbG9jYXRpb24pKTsKICAgICAg
ICAgICAgICAgICBuZXh0KCk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAg
IGZhaWxJZlRydWUobWF0Y2goSURFTlQpLCAiXCJpbXBvcnQuXCIgY2FuIG9ubHkgZm9sbG93ZWQg
d2l0aCBtZXRhIik7CkBAIC00NzkzLDcgKzQ3OTMsNyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1
aWxkZXI+IFRyZWVFeHByZXNzCiAgICAgICAgICAgICBiYXNlID0gY29udGV4dC5jcmVhdGVJbXBv
cnRFeHByKGxvY2F0aW9uLCBleHByLCBleHByZXNzaW9uU3RhcnQsIGV4cHJlc3Npb25FbmQsIGxh
c3RUb2tlbkVuZFBvc2l0aW9uKCkpOwogICAgICAgICB9CiAgICAgfSBlbHNlIGlmICghYmFzZUlz
TmV3VGFyZ2V0KSB7Ci0gICAgICAgIGNvbnN0IGJvb2wgaXNBc3luYyA9IG1hdGNoQ29udGV4dHVh
bEtleXdvcmQobV92bS0+cHJvcGVydHlOYW1lcy0+YXN5bmMpOworICAgICAgICBjb25zdCBib29s
IGlzQXN5bmMgPSBtYXRjaENvbnRleHR1YWxLZXl3b3JkKG1fdm0ucHJvcGVydHlOYW1lcy0+YXN5
bmMpOwogCiAgICAgICAgIGJhc2UgPSBwYXJzZVByaW1hcnlFeHByZXNzaW9uKGNvbnRleHQpOwog
ICAgICAgICBmYWlsSWZGYWxzZShiYXNlLCAiQ2Fubm90IHBhcnNlIGJhc2UgZXhwcmVzc2lvbiIp
OwpAQCAtNDg2Myw3ICs0ODYzLDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVl
RXhwcmVzcwogICAgICAgICAgICAgICAgICAgICBzaXplX3QgdXNlZFZhcmlhYmxlc1NpemUgPSBj
dXJyZW50U2NvcGUoKS0+Y3VycmVudFVzZWRWYXJpYWJsZXNTaXplKCk7CiAgICAgICAgICAgICAg
ICAgICAgIEpTVGV4dFBvc2l0aW9uIGV4cHJlc3Npb25FbmQgPSBsYXN0VG9rZW5FbmRQb3NpdGlv
bigpOwogICAgICAgICAgICAgICAgICAgICBPcHRpb25hbDxDYWxsT3JBcHBseURlcHRoU2NvcGU+
IGNhbGxPckFwcGx5RGVwdGhTY29wZTsKLSAgICAgICAgICAgICAgICAgICAgcmVjb3JkQ2FsbE9y
QXBwbHlEZXB0aDxUcmVlQnVpbGRlcj4odGhpcywgKm1fdm0sIGNhbGxPckFwcGx5RGVwdGhTY29w
ZSwgYmFzZSk7CisgICAgICAgICAgICAgICAgICAgIHJlY29yZENhbGxPckFwcGx5RGVwdGg8VHJl
ZUJ1aWxkZXI+KHRoaXMsIG1fdm0sIGNhbGxPckFwcGx5RGVwdGhTY29wZSwgYmFzZSk7CiAKICAg
ICAgICAgICAgICAgICAgICAgVHJlZUFyZ3VtZW50cyBhcmd1bWVudHMgPSBwYXJzZUFyZ3VtZW50
cyhjb250ZXh0KTsKIApAQCAtNDk1Miw3ICs0OTUyLDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVC
dWlsZGVyPiBUcmVlRXhwcmVzcwogICAgIHVuc2lnbmVkIGZ1bmN0aW9uS2V5d29yZFN0YXJ0ID0g
dG9rZW5TdGFydCgpOwogICAgIGxvY2F0aW9uID0gdG9rZW5Mb2NhdGlvbigpOwogICAgIFBhcnNl
ckZ1bmN0aW9uSW5mbzxUcmVlQnVpbGRlcj4gaW5mbzsKLSAgICBpbmZvLm5hbWUgPSAmbV92bS0+
cHJvcGVydHlOYW1lcy0+bnVsbElkZW50aWZpZXI7CisgICAgaW5mby5uYW1lID0gJm1fdm0ucHJv
cGVydHlOYW1lcy0+bnVsbElkZW50aWZpZXI7CiAKICAgICBTb3VyY2VQYXJzZU1vZGUgcGFyc2VN
b2RlID0gaXNBc3luYyA/IFNvdXJjZVBhcnNlTW9kZTo6QXN5bmNBcnJvd0Z1bmN0aW9uTW9kZSA6
IFNvdXJjZVBhcnNlTW9kZTo6QXJyb3dGdW5jdGlvbk1vZGU7CiAgICAgZmFpbElmRmFsc2UoKHBh
cnNlRnVuY3Rpb25JbmZvKGNvbnRleHQsIEZ1bmN0aW9uTmFtZVJlcXVpcmVtZW50czo6VW5uYW1l
ZCwgcGFyc2VNb2RlLCB0cnVlLCBDb25zdHJ1Y3RvcktpbmQ6Ok5vbmUsIFN1cGVyQmluZGluZzo6
Tm90TmVlZGVkLCBmdW5jdGlvbktleXdvcmRTdGFydCwgaW5mbywgRnVuY3Rpb25EZWZpbml0aW9u
VHlwZTo6RXhwcmVzc2lvbikpLCAiQ2Fubm90IHBhcnNlIGFycm93IGZ1bmN0aW9uIGV4cHJlc3Np
b24iKTsKQEAgLTUwMzgsNyArNTAzOCw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4g
VHJlZUV4cHJlc3MKICAgICBib29sIGlzRXZhbE9yQXJndW1lbnRzID0gZmFsc2U7CiAgICAgaWYg
KHN0cmljdE1vZGUoKSkgewogICAgICAgICBpZiAoY29udGV4dC5pc1Jlc29sdmUoZXhwcikpCi0g
ICAgICAgICAgICBpc0V2YWxPckFyZ3VtZW50cyA9ICptX3BhcnNlclN0YXRlLmxhc3RJZGVudGlm
aWVyID09IG1fdm0tPnByb3BlcnR5TmFtZXMtPmV2YWwgfHwgKm1fcGFyc2VyU3RhdGUubGFzdElk
ZW50aWZpZXIgPT0gbV92bS0+cHJvcGVydHlOYW1lcy0+YXJndW1lbnRzOworICAgICAgICAgICAg
aXNFdmFsT3JBcmd1bWVudHMgPSAqbV9wYXJzZXJTdGF0ZS5sYXN0SWRlbnRpZmllciA9PSBtX3Zt
LnByb3BlcnR5TmFtZXMtPmV2YWwgfHwgKm1fcGFyc2VyU3RhdGUubGFzdElkZW50aWZpZXIgPT0g
bV92bS5wcm9wZXJ0eU5hbWVzLT5hcmd1bWVudHM7CiAgICAgfQogICAgIGZhaWxJZlRydWVJZlN0
cmljdChpc0V2YWxPckFyZ3VtZW50cyAmJiBoYXNQcmVmaXhVcGRhdGVPcCwgIkNhbm5vdCBtb2Rp
ZnkgJyIsIG1fcGFyc2VyU3RhdGUubGFzdElkZW50aWZpZXItPmltcGwoKSwgIicgaW4gc3RyaWN0
IG1vZGUiKTsKICAgICBzd2l0Y2ggKG1fdG9rZW4ubV90eXBlKSB7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9wYXJzZXIvUGFyc2VyLmgJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBA
CiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAxIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtk
ZS5vcmcpCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20p
Ci0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAy
MDExLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQg
KEMpIDIwMDMtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYwpAQCAtMTE3LDE1ICsxMTcsMTUgQEAgc3RydWN0IFNjb3BlTGFiZWxJbmZvIHsK
ICAgICBib29sIGlzTG9vcDsKIH07CiAKLUFMV0FZU19JTkxJTkUgc3RhdGljIGJvb2wgaXNBcmd1
bWVudHMoY29uc3QgVk0qIHZtLCBjb25zdCBJZGVudGlmaWVyKiBpZGVudCkKK0FMV0FZU19JTkxJ
TkUgc3RhdGljIGJvb2wgaXNBcmd1bWVudHMoY29uc3QgVk0mIHZtLCBjb25zdCBJZGVudGlmaWVy
KiBpZGVudCkKIHsKLSAgICByZXR1cm4gdm0tPnByb3BlcnR5TmFtZXMtPmFyZ3VtZW50cyA9PSAq
aWRlbnQ7CisgICAgcmV0dXJuIHZtLnByb3BlcnR5TmFtZXMtPmFyZ3VtZW50cyA9PSAqaWRlbnQ7
CiB9Ci1BTFdBWVNfSU5MSU5FIHN0YXRpYyBib29sIGlzRXZhbChjb25zdCBWTSogdm0sIGNvbnN0
IElkZW50aWZpZXIqIGlkZW50KQorQUxXQVlTX0lOTElORSBzdGF0aWMgYm9vbCBpc0V2YWwoY29u
c3QgVk0mIHZtLCBjb25zdCBJZGVudGlmaWVyKiBpZGVudCkKIHsKLSAgICByZXR1cm4gdm0tPnBy
b3BlcnR5TmFtZXMtPmV2YWwgPT0gKmlkZW50OworICAgIHJldHVybiB2bS5wcm9wZXJ0eU5hbWVz
LT5ldmFsID09ICppZGVudDsKIH0KLUFMV0FZU19JTkxJTkUgc3RhdGljIGJvb2wgaXNFdmFsT3JB
cmd1bWVudHNJZGVudGlmaWVyKGNvbnN0IFZNKiB2bSwgY29uc3QgSWRlbnRpZmllciogaWRlbnQp
CitBTFdBWVNfSU5MSU5FIHN0YXRpYyBib29sIGlzRXZhbE9yQXJndW1lbnRzSWRlbnRpZmllcihj
b25zdCBWTSYgdm0sIGNvbnN0IElkZW50aWZpZXIqIGlkZW50KQogewogICAgIHJldHVybiBpc0V2
YWwodm0sIGlkZW50KSB8fCBpc0FyZ3VtZW50cyh2bSwgaWRlbnQpOwogfQpAQCAtMTU2LDcgKzE1
Niw3IEBAIHN0cnVjdCBTY29wZSB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU2NvcGUpOwog
CiBwdWJsaWM6Ci0gICAgU2NvcGUoY29uc3QgVk0qIHZtLCBib29sIGlzRnVuY3Rpb24sIGJvb2wg
aXNHZW5lcmF0b3IsIGJvb2wgc3RyaWN0TW9kZSwgYm9vbCBpc0Fycm93RnVuY3Rpb24sIGJvb2wg
aXNBc3luY0Z1bmN0aW9uKQorICAgIFNjb3BlKGNvbnN0IFZNJiB2bSwgYm9vbCBpc0Z1bmN0aW9u
LCBib29sIGlzR2VuZXJhdG9yLCBib29sIHN0cmljdE1vZGUsIGJvb2wgaXNBcnJvd0Z1bmN0aW9u
LCBib29sIGlzQXN5bmNGdW5jdGlvbikKICAgICAgICAgOiBtX3ZtKHZtKQogICAgICAgICAsIG1f
c2hhZG93c0FyZ3VtZW50cyhmYWxzZSkKICAgICAgICAgLCBtX3VzZXNFdmFsKGZhbHNlKQpAQCAt
NDg5LDcgKzQ4OSw3IEBAIHB1YmxpYzoKICAgICAgICAgYm9vbCBpc0FyZ3VtZW50c0lkZW50ID0g
aXNBcmd1bWVudHMobV92bSwgaWRlbnQpOwogICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fZGVj
bGFyZWRWYXJpYWJsZXMuYWRkKGlkZW50LT5pbXBsKCkpOwogICAgICAgICBib29sIGlzVmFsaWRT
dHJpY3RNb2RlID0gKGFkZFJlc3VsdC5pc05ld0VudHJ5IHx8ICFhZGRSZXN1bHQuaXRlcmF0b3It
PnZhbHVlLmlzUGFyYW1ldGVyKCkpCi0gICAgICAgICAgICAmJiBtX3ZtLT5wcm9wZXJ0eU5hbWVz
LT5ldmFsICE9ICppZGVudCAmJiAhaXNBcmd1bWVudHNJZGVudDsKKyAgICAgICAgICAgICYmIG1f
dm0ucHJvcGVydHlOYW1lcy0+ZXZhbCAhPSAqaWRlbnQgJiYgIWlzQXJndW1lbnRzSWRlbnQ7CiAg
ICAgICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUuY2xlYXJJc1ZhcigpOwogICAgICAgICBh
ZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlLnNldElzUGFyYW1ldGVyKCk7CiAgICAgICAgIG1faXNW
YWxpZFN0cmljdE1vZGUgPSBtX2lzVmFsaWRTdHJpY3RNb2RlICYmIGlzVmFsaWRTdHJpY3RNb2Rl
OwpAQCAtNTczLDcgKzU3Myw3IEBAIHB1YmxpYzoKICAgICAgICAgaWYgKG1fdXNlc0V2YWwpCiAg
ICAgICAgICAgICBzZXRJbm5lckFycm93RnVuY3Rpb25Vc2VzRXZhbCgpOwogICAgICAgICAKLSAg
ICAgICAgaWYgKHVzZWRWYXJpYWJsZXNDb250YWlucyhtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5hcmd1
bWVudHMuaW1wbCgpKSkKKyAgICAgICAgaWYgKHVzZWRWYXJpYWJsZXNDb250YWlucyhtX3ZtLnBy
b3BlcnR5TmFtZXMtPmFyZ3VtZW50cy5pbXBsKCkpKQogICAgICAgICAgICAgc2V0SW5uZXJBcnJv
d0Z1bmN0aW9uVXNlc0FyZ3VtZW50cygpOwogICAgIH0KIApAQCAtNTk1LDcgKzU5NSw3IEBAIHB1
YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgICAgICAg
ICAgICAgIC8vICJhcmd1bWVudHMiIHJlZmVyZW5jZSBzaG91bGQgYmUgcmVzb2x2ZWQgYXQgZnVu
Y3Rpb24gYm91ZGFyeS4KLSAgICAgICAgICAgICAgICAgICAgaWYgKG5lc3RlZFNjb3BlLT5pc0Z1
bmN0aW9uQm91bmRhcnkoKSAmJiBuZXN0ZWRTY29wZS0+aGFzQXJndW1lbnRzKCkgJiYgaW1wbCA9
PSBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5hcmd1bWVudHMuaW1wbCgpICYmICFuZXN0ZWRTY29wZS0+
aXNBcnJvd0Z1bmN0aW9uQm91bmRhcnkoKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5lc3Rl
ZFNjb3BlLT5pc0Z1bmN0aW9uQm91bmRhcnkoKSAmJiBuZXN0ZWRTY29wZS0+aGFzQXJndW1lbnRz
KCkgJiYgaW1wbCA9PSBtX3ZtLnByb3BlcnR5TmFtZXMtPmFyZ3VtZW50cy5pbXBsKCkgJiYgIW5l
c3RlZFNjb3BlLT5pc0Fycm93RnVuY3Rpb25Cb3VuZGFyeSgpKQogICAgICAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CiAKICAgICAgICAgICAgICAgICAgICAgZGVzdGluYXRpb25TZXQuYWRk
KGltcGwpOwpAQCAtNzk1LDcgKzc5NSw3IEBAIHByaXZhdGU6CiAgICAgICAgIG1faXNBc3luY0Z1
bmN0aW9uQm91bmRhcnkgPSB0cnVlOwogICAgIH0KIAotICAgIGNvbnN0IFZNKiBtX3ZtOworICAg
IGNvbnN0IFZNJiBtX3ZtOwogICAgIGJvb2wgbV9zaGFkb3dzQXJndW1lbnRzOwogICAgIGJvb2wg
bV91c2VzRXZhbDsKICAgICBib29sIG1fbmVlZHNGdWxsQWN0aXZhdGlvbjsKQEAgLTg4NSw3ICs4
ODUsNyBAQCBjbGFzcyBQYXJzZXIgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogCiBw
dWJsaWM6Ci0gICAgUGFyc2VyKFZNKiwgY29uc3QgU291cmNlQ29kZSYsIEpTUGFyc2VyQnVpbHRp
bk1vZGUsIEpTUGFyc2VyU3RyaWN0TW9kZSwgSlNQYXJzZXJTY3JpcHRNb2RlLCBTb3VyY2VQYXJz
ZU1vZGUsIFN1cGVyQmluZGluZywgQ29uc3RydWN0b3JLaW5kIGRlZmF1bHRDb25zdHJ1Y3Rvcktp
bmQgPSBDb25zdHJ1Y3RvcktpbmQ6Ok5vbmUsIERlcml2ZWRDb250ZXh0VHlwZSA9IERlcml2ZWRD
b250ZXh0VHlwZTo6Tm9uZSwgYm9vbCBpc0V2YWxDb250ZXh0ID0gZmFsc2UsIEV2YWxDb250ZXh0
VHlwZSA9IEV2YWxDb250ZXh0VHlwZTo6Tm9uZSwgRGVidWdnZXJQYXJzZURhdGEqID0gbnVsbHB0
cik7CisgICAgUGFyc2VyKFZNJiwgY29uc3QgU291cmNlQ29kZSYsIEpTUGFyc2VyQnVpbHRpbk1v
ZGUsIEpTUGFyc2VyU3RyaWN0TW9kZSwgSlNQYXJzZXJTY3JpcHRNb2RlLCBTb3VyY2VQYXJzZU1v
ZGUsIFN1cGVyQmluZGluZywgQ29uc3RydWN0b3JLaW5kIGRlZmF1bHRDb25zdHJ1Y3RvcktpbmQg
PSBDb25zdHJ1Y3RvcktpbmQ6Ok5vbmUsIERlcml2ZWRDb250ZXh0VHlwZSA9IERlcml2ZWRDb250
ZXh0VHlwZTo6Tm9uZSwgYm9vbCBpc0V2YWxDb250ZXh0ID0gZmFsc2UsIEV2YWxDb250ZXh0VHlw
ZSA9IEV2YWxDb250ZXh0VHlwZTo6Tm9uZSwgRGVidWdnZXJQYXJzZURhdGEqID0gbnVsbHB0cik7
CiAgICAgflBhcnNlcigpOwogCiAgICAgdGVtcGxhdGUgPGNsYXNzIFBhcnNlZE5vZGU+CkBAIC0x
NjgzLDcgKzE2ODMsNyBAQCBwcml2YXRlOgogICAgIAogICAgIGJvb2wgY2FuUmVjdXJzZSgpCiAg
ICAgewotICAgICAgICByZXR1cm4gbV92bS0+aXNTYWZlVG9SZWN1cnNlKCk7CisgICAgICAgIHJl
dHVybiBtX3ZtLmlzU2FmZVRvUmVjdXJzZSgpOwogICAgIH0KICAgICAKICAgICBjb25zdCBKU1Rl
eHRQb3NpdGlvbiYgbGFzdFRva2VuRW5kUG9zaXRpb24oKSBjb25zdApAQCAtMTg2Niw3ICsxODY2
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgbV9lcnJvck1lc3NhZ2UgPSBTdHJpbmcoKTsKICAgICB9
CiAKLSAgICBWTSogbV92bTsKKyAgICBWTSYgbV92bTsKICAgICBjb25zdCBTb3VyY2VDb2RlKiBt
X3NvdXJjZTsKICAgICBQYXJzZXJBcmVuYSBtX3BhcnNlckFyZW5hOwogICAgIHN0ZDo6dW5pcXVl
X3B0cjxMZXhlclR5cGU+IG1fbGV4ZXI7CkBAIC0xOTk3LDcgKzE5OTcsNyBAQCBzdGQ6OnVuaXF1
ZV9wdHI8UGFyc2VkTm9kZT4gUGFyc2VyPExleGVyCiAKIHRlbXBsYXRlIDxjbGFzcyBQYXJzZWRO
b2RlPgogc3RkOjp1bmlxdWVfcHRyPFBhcnNlZE5vZGU+IHBhcnNlKAotICAgIFZNKiB2bSwgY29u
c3QgU291cmNlQ29kZSYgc291cmNlLAorICAgIFZNJiB2bSwgY29uc3QgU291cmNlQ29kZSYgc291
cmNlLAogICAgIGNvbnN0IElkZW50aWZpZXImIG5hbWUsIEpTUGFyc2VyQnVpbHRpbk1vZGUgYnVp
bHRpbk1vZGUsCiAgICAgSlNQYXJzZXJTdHJpY3RNb2RlIHN0cmljdE1vZGUsIEpTUGFyc2VyU2Ny
aXB0TW9kZSBzY3JpcHRNb2RlLCBTb3VyY2VQYXJzZU1vZGUgcGFyc2VNb2RlLCBTdXBlckJpbmRp
bmcgc3VwZXJCaW5kaW5nLAogICAgIFBhcnNlckVycm9yJiBlcnJvciwgSlNUZXh0UG9zaXRpb24q
IHBvc2l0aW9uQmVmb3JlTGFzdE5ld2xpbmUgPSBudWxscHRyLApAQCAtMjA1NywxMiArMjA1Nywx
MiBAQCBpbmxpbmUgc3RkOjp1bmlxdWVfcHRyPFByb2dyYW1Ob2RlPiBwYXJzCiAgICAgYm9vbCBp
c0V2YWxOb2RlID0gZmFsc2U7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFByb2dyYW1Ob2RlPiByZXN1
bHQ7CiAgICAgaWYgKHNvdXJjZS5wcm92aWRlcigpLT5zb3VyY2UoKS5pczhCaXQoKSkgewotICAg
ICAgICBQYXJzZXI8TGV4ZXI8TENoYXI+PiBwYXJzZXIoJnZtLCBzb3VyY2UsIEpTUGFyc2VyQnVp
bHRpbk1vZGU6Ok5vdEJ1aWx0aW4sIEpTUGFyc2VyU3RyaWN0TW9kZTo6Tm90U3RyaWN0LCBKU1Bh
cnNlclNjcmlwdE1vZGU6OkNsYXNzaWMsIFNvdXJjZVBhcnNlTW9kZTo6UHJvZ3JhbU1vZGUsIFN1
cGVyQmluZGluZzo6Tm90TmVlZGVkLCBDb25zdHJ1Y3RvcktpbmQ6Ok5vbmUsIERlcml2ZWRDb250
ZXh0VHlwZTo6Tm9uZSwgaXNFdmFsTm9kZSwgRXZhbENvbnRleHRUeXBlOjpOb25lLCBudWxscHRy
KTsKKyAgICAgICAgUGFyc2VyPExleGVyPExDaGFyPj4gcGFyc2VyKHZtLCBzb3VyY2UsIEpTUGFy
c2VyQnVpbHRpbk1vZGU6Ok5vdEJ1aWx0aW4sIEpTUGFyc2VyU3RyaWN0TW9kZTo6Tm90U3RyaWN0
LCBKU1BhcnNlclNjcmlwdE1vZGU6OkNsYXNzaWMsIFNvdXJjZVBhcnNlTW9kZTo6UHJvZ3JhbU1v
ZGUsIFN1cGVyQmluZGluZzo6Tm90TmVlZGVkLCBDb25zdHJ1Y3RvcktpbmQ6Ok5vbmUsIERlcml2
ZWRDb250ZXh0VHlwZTo6Tm9uZSwgaXNFdmFsTm9kZSwgRXZhbENvbnRleHRUeXBlOjpOb25lLCBu
dWxscHRyKTsKICAgICAgICAgcmVzdWx0ID0gcGFyc2VyLnBhcnNlPFByb2dyYW1Ob2RlPihlcnJv
ciwgbmFtZSwgU291cmNlUGFyc2VNb2RlOjpQcm9ncmFtTW9kZSwgUGFyc2luZ0NvbnRleHQ6OkZ1
bmN0aW9uQ29uc3RydWN0b3IsIGZ1bmN0aW9uQ29uc3RydWN0b3JQYXJhbWV0ZXJzRW5kUG9zaXRp
b24pOwogICAgICAgICBpZiAocG9zaXRpb25CZWZvcmVMYXN0TmV3bGluZSkKICAgICAgICAgICAg
ICpwb3NpdGlvbkJlZm9yZUxhc3ROZXdsaW5lID0gcGFyc2VyLnBvc2l0aW9uQmVmb3JlTGFzdE5l
d2xpbmUoKTsKICAgICB9IGVsc2UgewotICAgICAgICBQYXJzZXI8TGV4ZXI8VUNoYXI+PiBwYXJz
ZXIoJnZtLCBzb3VyY2UsIEpTUGFyc2VyQnVpbHRpbk1vZGU6Ok5vdEJ1aWx0aW4sIEpTUGFyc2Vy
U3RyaWN0TW9kZTo6Tm90U3RyaWN0LCBKU1BhcnNlclNjcmlwdE1vZGU6OkNsYXNzaWMsIFNvdXJj
ZVBhcnNlTW9kZTo6UHJvZ3JhbU1vZGUsIFN1cGVyQmluZGluZzo6Tm90TmVlZGVkLCBDb25zdHJ1
Y3RvcktpbmQ6Ok5vbmUsIERlcml2ZWRDb250ZXh0VHlwZTo6Tm9uZSwgaXNFdmFsTm9kZSwgRXZh
bENvbnRleHRUeXBlOjpOb25lLCBudWxscHRyKTsKKyAgICAgICAgUGFyc2VyPExleGVyPFVDaGFy
Pj4gcGFyc2VyKHZtLCBzb3VyY2UsIEpTUGFyc2VyQnVpbHRpbk1vZGU6Ok5vdEJ1aWx0aW4sIEpT
UGFyc2VyU3RyaWN0TW9kZTo6Tm90U3RyaWN0LCBKU1BhcnNlclNjcmlwdE1vZGU6OkNsYXNzaWMs
IFNvdXJjZVBhcnNlTW9kZTo6UHJvZ3JhbU1vZGUsIFN1cGVyQmluZGluZzo6Tm90TmVlZGVkLCBD
b25zdHJ1Y3RvcktpbmQ6Ok5vbmUsIERlcml2ZWRDb250ZXh0VHlwZTo6Tm9uZSwgaXNFdmFsTm9k
ZSwgRXZhbENvbnRleHRUeXBlOjpOb25lLCBudWxscHRyKTsKICAgICAgICAgcmVzdWx0ID0gcGFy
c2VyLnBhcnNlPFByb2dyYW1Ob2RlPihlcnJvciwgbmFtZSwgU291cmNlUGFyc2VNb2RlOjpQcm9n
cmFtTW9kZSwgUGFyc2luZ0NvbnRleHQ6OkZ1bmN0aW9uQ29uc3RydWN0b3IsIGZ1bmN0aW9uQ29u
c3RydWN0b3JQYXJhbWV0ZXJzRW5kUG9zaXRpb24pOwogICAgICAgICBpZiAocG9zaXRpb25CZWZv
cmVMYXN0TmV3bGluZSkKICAgICAgICAgICAgICpwb3NpdGlvbkJlZm9yZUxhc3ROZXdsaW5lID0g
cGFyc2VyLnBvc2l0aW9uQmVmb3JlTGFzdE5ld2xpbmUoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9wYXJzZXIvUGFyc2VyQXJlbmEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcGFyc2VyL1BhcnNlckFyZW5hLmgJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyQXJlbmEuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxOCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTQ0LDEyICs0NCwxMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogCiAgICAgICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBUPgotICAgICAgICBBTFdBWVNfSU5MSU5FIGNvbnN0IElkZW50aWZp
ZXImIG1ha2VJZGVudGlmaWVyKFZNKiwgY29uc3QgVCogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0
aCk7Ci0gICAgICAgIEFMV0FZU19JTkxJTkUgY29uc3QgSWRlbnRpZmllciYgbWFrZUVtcHR5SWRl
bnRpZmllcihWTSopOwotICAgICAgICBBTFdBWVNfSU5MSU5FIGNvbnN0IElkZW50aWZpZXImIG1h
a2VJZGVudGlmaWVyTENoYXJGcm9tVUNoYXIoVk0qLCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywg
c2l6ZV90IGxlbmd0aCk7Ci0gICAgICAgIEFMV0FZU19JTkxJTkUgY29uc3QgSWRlbnRpZmllciYg
bWFrZUlkZW50aWZpZXIoVk0qLCBTeW1ib2xJbXBsKik7CisgICAgICAgIEFMV0FZU19JTkxJTkUg
Y29uc3QgSWRlbnRpZmllciYgbWFrZUlkZW50aWZpZXIoVk0mLCBjb25zdCBUKiBjaGFyYWN0ZXJz
LCBzaXplX3QgbGVuZ3RoKTsKKyAgICAgICAgQUxXQVlTX0lOTElORSBjb25zdCBJZGVudGlmaWVy
JiBtYWtlRW1wdHlJZGVudGlmaWVyKFZNJik7CisgICAgICAgIEFMV0FZU19JTkxJTkUgY29uc3Qg
SWRlbnRpZmllciYgbWFrZUlkZW50aWZpZXJMQ2hhckZyb21VQ2hhcihWTSYsIGNvbnN0IFVDaGFy
KiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoKTsKKyAgICAgICAgQUxXQVlTX0lOTElORSBjb25z
dCBJZGVudGlmaWVyJiBtYWtlSWRlbnRpZmllcihWTSYsIFN5bWJvbEltcGwqKTsKIAotICAgICAg
ICBjb25zdCBJZGVudGlmaWVyJiBtYWtlTnVtZXJpY0lkZW50aWZpZXIoVk0qLCBkb3VibGUgbnVt
YmVyKTsKKyAgICAgICAgY29uc3QgSWRlbnRpZmllciYgbWFrZU51bWVyaWNJZGVudGlmaWVyKFZN
JiwgZG91YmxlIG51bWJlcik7CiAKICAgICBwdWJsaWM6CiAgICAgICAgIHN0YXRpYyBjb25zdCBp
bnQgTWF4aW11bUNhY2hhYmxlQ2hhcmFjdGVyID0gMTI4OwpAQCAtNzAsMTAgKzcwLDEwIEBAIG5h
bWVzcGFjZSBKU0MgewogICAgIH07CiAKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLSAgICBB
TFdBWVNfSU5MSU5FIGNvbnN0IElkZW50aWZpZXImIElkZW50aWZpZXJBcmVuYTo6bWFrZUlkZW50
aWZpZXIoVk0qIHZtLCBjb25zdCBUKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoKQorICAgIEFM
V0FZU19JTkxJTkUgY29uc3QgSWRlbnRpZmllciYgSWRlbnRpZmllckFyZW5hOjptYWtlSWRlbnRp
ZmllcihWTSYgdm0sIGNvbnN0IFQqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgpCiAgICAgewog
ICAgICAgICBpZiAoIWxlbmd0aCkKLSAgICAgICAgICAgIHJldHVybiB2bS0+cHJvcGVydHlOYW1l
cy0+ZW1wdHlJZGVudGlmaWVyOworICAgICAgICAgICAgcmV0dXJuIHZtLnByb3BlcnR5TmFtZXMt
PmVtcHR5SWRlbnRpZmllcjsKICAgICAgICAgaWYgKGNoYXJhY3RlcnNbMF0gPj0gTWF4aW11bUNh
Y2hhYmxlQ2hhcmFjdGVyKSB7CiAgICAgICAgICAgICBtX2lkZW50aWZpZXJzLmFwcGVuZChJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBjaGFyYWN0ZXJzLCBsZW5ndGgpKTsKICAgICAgICAgICAg
IHJldHVybiBtX2lkZW50aWZpZXJzLmxhc3QoKTsKQEAgLTkzLDIyICs5MywyMiBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgcmV0dXJuIG1faWRlbnRpZmllcnMubGFzdCgpOwogICAgIH0KIAot
ICAgIEFMV0FZU19JTkxJTkUgY29uc3QgSWRlbnRpZmllciYgSWRlbnRpZmllckFyZW5hOjptYWtl
SWRlbnRpZmllcihWTSosIFN5bWJvbEltcGwqIHN5bWJvbCkKKyAgICBBTFdBWVNfSU5MSU5FIGNv
bnN0IElkZW50aWZpZXImIElkZW50aWZpZXJBcmVuYTo6bWFrZUlkZW50aWZpZXIoVk0mLCBTeW1i
b2xJbXBsKiBzeW1ib2wpCiAgICAgewogICAgICAgICBBU1NFUlQoc3ltYm9sKTsKICAgICAgICAg
bV9pZGVudGlmaWVycy5hcHBlbmQoSWRlbnRpZmllcjo6ZnJvbVVpZCgqc3ltYm9sKSk7CiAgICAg
ICAgIHJldHVybiBtX2lkZW50aWZpZXJzLmxhc3QoKTsKICAgICB9CiAKLSAgICBBTFdBWVNfSU5M
SU5FIGNvbnN0IElkZW50aWZpZXImIElkZW50aWZpZXJBcmVuYTo6bWFrZUVtcHR5SWRlbnRpZmll
cihWTSogdm0pCisgICAgQUxXQVlTX0lOTElORSBjb25zdCBJZGVudGlmaWVyJiBJZGVudGlmaWVy
QXJlbmE6Om1ha2VFbXB0eUlkZW50aWZpZXIoVk0mIHZtKQogICAgIHsKLSAgICAgICAgcmV0dXJu
IHZtLT5wcm9wZXJ0eU5hbWVzLT5lbXB0eUlkZW50aWZpZXI7CisgICAgICAgIHJldHVybiB2bS5w
cm9wZXJ0eU5hbWVzLT5lbXB0eUlkZW50aWZpZXI7CiAgICAgfQogCi0gICAgQUxXQVlTX0lOTElO
RSBjb25zdCBJZGVudGlmaWVyJiBJZGVudGlmaWVyQXJlbmE6Om1ha2VJZGVudGlmaWVyTENoYXJG
cm9tVUNoYXIoVk0qIHZtLCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCkK
KyAgICBBTFdBWVNfSU5MSU5FIGNvbnN0IElkZW50aWZpZXImIElkZW50aWZpZXJBcmVuYTo6bWFr
ZUlkZW50aWZpZXJMQ2hhckZyb21VQ2hhcihWTSYgdm0sIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJz
LCBzaXplX3QgbGVuZ3RoKQogICAgIHsKICAgICAgICAgaWYgKCFsZW5ndGgpCi0gICAgICAgICAg
ICByZXR1cm4gdm0tPnByb3BlcnR5TmFtZXMtPmVtcHR5SWRlbnRpZmllcjsKKyAgICAgICAgICAg
IHJldHVybiB2bS5wcm9wZXJ0eU5hbWVzLT5lbXB0eUlkZW50aWZpZXI7CiAgICAgICAgIGlmIChj
aGFyYWN0ZXJzWzBdID49IE1heGltdW1DYWNoYWJsZUNoYXJhY3RlcikgewogICAgICAgICAgICAg
bV9pZGVudGlmaWVycy5hcHBlbmQoSWRlbnRpZmllcjo6Y3JlYXRlTENoYXJGcm9tVUNoYXIodm0s
IGNoYXJhY3RlcnMsIGxlbmd0aCkpOwogICAgICAgICAgICAgcmV0dXJuIG1faWRlbnRpZmllcnMu
bGFzdCgpOwpAQCAtMTI4LDcgKzEyOCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICByZXR1
cm4gbV9pZGVudGlmaWVycy5sYXN0KCk7CiAgICAgfQogICAgIAotICAgIGlubGluZSBjb25zdCBJ
ZGVudGlmaWVyJiBJZGVudGlmaWVyQXJlbmE6Om1ha2VOdW1lcmljSWRlbnRpZmllcihWTSogdm0s
IGRvdWJsZSBudW1iZXIpCisgICAgaW5saW5lIGNvbnN0IElkZW50aWZpZXImIElkZW50aWZpZXJB
cmVuYTo6bWFrZU51bWVyaWNJZGVudGlmaWVyKFZNJiB2bSwgZG91YmxlIG51bWJlcikKICAgICB7
CiAgICAgICAgIC8vIEZJWE1FOiBXaHkgZG9lc24ndCB0aGlzIHVzZSB0aGUgSWRlbnRpZmllcjo6
ZnJvbSBvdmVybG9hZCB0aGF0IHRha2VzIGEgZG91YmxlPwogICAgICAgICAvLyBTZWVtcyB3ZSBh
cmUgbWlzc2luZyBvdXQgb24gbXVsdGlwbGUgb3B0aW1pemF0aW9ucyBieSBub3QgdXNpbmcgaXQu
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1N5bnRheENoZWNrZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1N5bnRheENoZWNrZXIuaAko
cmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9TeW50YXhD
aGVja2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDEwLCAyMDEzLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjQsNyArNjQsNyBAQCBwdWJsaWM6
CiAgICAgICAgIFN5bnRheENoZWNrZXIqIG1fY29udGV4dDsKICAgICB9OwogICAgIAotICAgIFN5
bnRheENoZWNrZXIoVk0qICwgdm9pZCopCisgICAgU3ludGF4Q2hlY2tlcihWTSYgLCB2b2lkKikK
ICAgICB7CiAgICAgfQogCkBAIC0yMjYsNyArMjI2LDcgQEAgcHVibGljOgogICAgIHsKICAgICAg
ICAgcmV0dXJuIFByb3BlcnR5KHR5cGUpOwogICAgIH0KLSAgICBQcm9wZXJ0eSBjcmVhdGVQcm9w
ZXJ0eShWTSogdm0sIFBhcnNlckFyZW5hJiBwYXJzZXJBcmVuYSwgZG91YmxlIG5hbWUsIGludCwg
UHJvcGVydHlOb2RlOjpUeXBlIHR5cGUsIFByb3BlcnR5Tm9kZTo6UHV0VHlwZSwgYm9vbCBjb21w
bGV0ZSwgU3VwZXJCaW5kaW5nLCBDbGFzc0VsZW1lbnRUYWcpCisgICAgUHJvcGVydHkgY3JlYXRl
UHJvcGVydHkoVk0mIHZtLCBQYXJzZXJBcmVuYSYgcGFyc2VyQXJlbmEsIGRvdWJsZSBuYW1lLCBp
bnQsIFByb3BlcnR5Tm9kZTo6VHlwZSB0eXBlLCBQcm9wZXJ0eU5vZGU6OlB1dFR5cGUsIGJvb2wg
Y29tcGxldGUsIFN1cGVyQmluZGluZywgQ2xhc3NFbGVtZW50VGFnKQogICAgIHsKICAgICAgICAg
aWYgKCFjb21wbGV0ZSkKICAgICAgICAgICAgIHJldHVybiBQcm9wZXJ0eSh0eXBlKTsKQEAgLTI5
Nyw3ICsyOTcsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4gUHJvcGVydHkodHlw
ZSk7CiAgICAgfQotICAgIFByb3BlcnR5IGNyZWF0ZUdldHRlck9yU2V0dGVyUHJvcGVydHkoVk0q
IHZtLCBQYXJzZXJBcmVuYSYgcGFyc2VyQXJlbmEsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIFBy
b3BlcnR5Tm9kZTo6VHlwZSB0eXBlLCBib29sIHN0cmljdCwgZG91YmxlIG5hbWUsIGNvbnN0IFBh
cnNlckZ1bmN0aW9uSW5mbzxTeW50YXhDaGVja2VyPiYsIENsYXNzRWxlbWVudFRhZykKKyAgICBQ
cm9wZXJ0eSBjcmVhdGVHZXR0ZXJPclNldHRlclByb3BlcnR5KFZNJiB2bSwgUGFyc2VyQXJlbmEm
IHBhcnNlckFyZW5hLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBQcm9wZXJ0eU5vZGU6OlR5cGUg
dHlwZSwgYm9vbCBzdHJpY3QsIGRvdWJsZSBuYW1lLCBjb25zdCBQYXJzZXJGdW5jdGlvbkluZm88
U3ludGF4Q2hlY2tlcj4mLCBDbGFzc0VsZW1lbnRUYWcpCiAgICAgewogICAgICAgICBpZiAoIXN0
cmljdCkKICAgICAgICAgICAgIHJldHVybiBQcm9wZXJ0eSh0eXBlKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlckJ5dGVjb2RlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJCeXRlY29kZS5jcHAJKHJl
dmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxl
ckJ5dGVjb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEyLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zOCw4ICszOCw4IEBAIEpTVmFsdWUgQnl0ZWNv
ZGU6OnRvSlMoRXhlY1N0YXRlKiBleGVjKSAKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAg
IEpTT2JqZWN0KiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjKTsKICAgICByZXN1
bHQtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+Ynl0ZWNvZGVJbmRleCwganNOdW1i
ZXIobV9ieXRlY29kZUluZGV4KSk7Ci0gICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIHZtLnByb3Bl
cnR5TmFtZXMtPm9wY29kZSwganNTdHJpbmcoZXhlYywgU3RyaW5nOjpmcm9tVVRGOChvcGNvZGVO
YW1lc1ttX29wY29kZUlEXSkpKTsKLSAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVy
dHlOYW1lcy0+ZGVzY3JpcHRpb24sIGpzU3RyaW5nKGV4ZWMsIFN0cmluZzo6ZnJvbVVURjgobV9k
ZXNjcmlwdGlvbikpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1l
cy0+b3Bjb2RlLCBqc1N0cmluZyh2bSwgU3RyaW5nOjpmcm9tVVRGOChvcGNvZGVOYW1lc1ttX29w
Y29kZUlEXSkpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+
ZGVzY3JpcHRpb24sIGpzU3RyaW5nKHZtLCBTdHJpbmc6OmZyb21VVEY4KG1fZGVzY3JpcHRpb24p
KSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3Byb2ZpbGVyL1Byb2ZpbGVyQnl0ZWNvZGVTZXF1ZW5jZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyQnl0ZWNvZGVTZXF1ZW5jZS5jcHAJ
KHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9m
aWxlckJ5dGVjb2RlU2VxdWVuY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODMsNyArODMsNyBA
QCB2b2lkIEJ5dGVjb2RlU2VxdWVuY2U6OmFkZFNlcXVlbmNlUHJvcGVyCiAgICAgSlNBcnJheSog
aGVhZGVyID0gY29uc3RydWN0RW1wdHlBcnJheShleGVjLCAwKTsKICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2hl
YWRlci5zaXplKCk7ICsraSkgewotICAgICAgICBoZWFkZXItPnB1dERpcmVjdEluZGV4KGV4ZWMs
IGksIGpzU3RyaW5nKGV4ZWMsIFN0cmluZzo6ZnJvbVVURjgobV9oZWFkZXJbaV0pKSk7CisgICAg
ICAgIGhlYWRlci0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaSwganNTdHJpbmcodm0sIFN0cmluZzo6
ZnJvbVVURjgobV9oZWFkZXJbaV0pKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIHZvaWQoKSk7CiAgICAgfQogICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0
eU5hbWVzLT5oZWFkZXIsIGhlYWRlcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJv
ZmlsZXIvUHJvZmlsZXJCeXRlY29kZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9wcm9maWxlci9Qcm9maWxlckJ5dGVjb2Rlcy5jcHAJKHJldmlzaW9uIDI0OTEyOCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlckJ5dGVjb2Rlcy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEy
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0y
MDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtNTcsOSArNTcsOSBAQCBKU1ZhbHVlIEJ5dGVjb2Rlczo6dG9KUyhFeGVj
U3RhdGUqIGV4ZWMpCiAgICAgSlNPYmplY3QqIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0
KGV4ZWMpOwogICAgIAogICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVz
LT5ieXRlY29kZXNJRCwganNOdW1iZXIobV9pZCkpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZt
LCB2bS5wcm9wZXJ0eU5hbWVzLT5pbmZlcnJlZE5hbWUsIGpzU3RyaW5nKGV4ZWMsIFN0cmluZzo6
ZnJvbVVURjgobV9pbmZlcnJlZE5hbWUpKSk7Ci0gICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIHZt
LnByb3BlcnR5TmFtZXMtPnNvdXJjZUNvZGUsIGpzU3RyaW5nKGV4ZWMsIFN0cmluZzo6ZnJvbVVU
RjgobV9zb3VyY2VDb2RlKSkpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0
eU5hbWVzLT5oYXNoLCBqc1N0cmluZyhleGVjLCBTdHJpbmc6OmZyb21VVEY4KHRvQ1N0cmluZyht
X2hhc2gpKSkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5p
bmZlcnJlZE5hbWUsIGpzU3RyaW5nKHZtLCBTdHJpbmc6OmZyb21VVEY4KG1faW5mZXJyZWROYW1l
KSkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5zb3VyY2VD
b2RlLCBqc1N0cmluZyh2bSwgU3RyaW5nOjpmcm9tVVRGOChtX3NvdXJjZUNvZGUpKSk7CisgICAg
cmVzdWx0LT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmhhc2gsIGpzU3RyaW5nKHZt
LCBTdHJpbmc6OmZyb21VVEY4KHRvQ1N0cmluZyhtX2hhc2gpKSkpOwogICAgIHJlc3VsdC0+cHV0
RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5pbnN0cnVjdGlvbkNvdW50LCBqc051bWJlciht
X2luc3RydWN0aW9uQ291bnQpKTsKICAgICBhZGRTZXF1ZW5jZVByb3BlcnRpZXMoZXhlYywgcmVz
dWx0KTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxl
ckNvbXBpbGF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJv
ZmlsZXIvUHJvZmlsZXJDb21waWxhdGlvbi5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlckNvbXBpbGF0aW9uLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAx
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTExOSw3ICsxMTksNyBAQCBKU1ZhbHVlIENvbXBpbGF0aW9uOjp0b0pTKEV4
ZWNTdGF0ZSogZXhlCiAgICAgSlNPYmplY3QqIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0
KGV4ZWMpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgcmVzdWx0
LT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmJ5dGVjb2Rlc0lELCBqc051bWJlciht
X2J5dGVjb2Rlcy0+aWQoKSkpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0
eU5hbWVzLT5jb21waWxhdGlvbktpbmQsIGpzU3RyaW5nKGV4ZWMsIFN0cmluZzo6ZnJvbVVURjgo
dG9DU3RyaW5nKG1fa2luZCkpKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIHZtLnByb3Bl
cnR5TmFtZXMtPmNvbXBpbGF0aW9uS2luZCwganNTdHJpbmcodm0sIFN0cmluZzo6ZnJvbVVURjgo
dG9DU3RyaW5nKG1fa2luZCkpKSk7CiAgICAgCiAgICAgSlNBcnJheSogcHJvZmlsZWRCeXRlY29k
ZXMgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIDApOwogICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIHsgfSk7CkBAIC0xNzYsOSArMTc2LDkgQEAgSlNWYWx1ZSBDb21waWxhdGlvbjo6
dG9KUyhFeGVjU3RhdGUqIGV4ZQogICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0
eU5hbWVzLT5udW1JbmxpbmVkR2V0QnlJZHMsIGpzTnVtYmVyKG1fbnVtSW5saW5lZEdldEJ5SWRz
KSk7CiAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm51bUlubGlu
ZWRQdXRCeUlkcywganNOdW1iZXIobV9udW1JbmxpbmVkUHV0QnlJZHMpKTsKICAgICByZXN1bHQt
PnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bnVtSW5saW5lZENhbGxzLCBqc051bWJl
cihtX251bUlubGluZWRDYWxscykpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCB2bS5wcm9w
ZXJ0eU5hbWVzLT5qZXR0aXNvblJlYXNvbiwganNTdHJpbmcoZXhlYywgU3RyaW5nOjpmcm9tVVRG
OCh0b0NTdHJpbmcobV9qZXR0aXNvblJlYXNvbikpKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qo
dm0sIHZtLnByb3BlcnR5TmFtZXMtPmpldHRpc29uUmVhc29uLCBqc1N0cmluZyh2bSwgU3RyaW5n
Ojpmcm9tVVRGOCh0b0NTdHJpbmcobV9qZXR0aXNvblJlYXNvbikpKSk7CiAgICAgaWYgKCFtX2Fk
ZGl0aW9uYWxKZXR0aXNvblJlYXNvbi5pc051bGwoKSkKLSAgICAgICAgcmVzdWx0LT5wdXREaXJl
Y3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmFkZGl0aW9uYWxKZXR0aXNvblJlYXNvbiwganNTdHJp
bmcoZXhlYywgU3RyaW5nOjpmcm9tVVRGOChtX2FkZGl0aW9uYWxKZXR0aXNvblJlYXNvbikpKTsK
KyAgICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmFkZGl0aW9u
YWxKZXR0aXNvblJlYXNvbiwganNTdHJpbmcodm0sIFN0cmluZzo6ZnJvbVVURjgobV9hZGRpdGlv
bmFsSmV0dGlzb25SZWFzb24pKSk7CiAgICAgCiAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIHZt
LnByb3BlcnR5TmFtZXMtPnVpZCwgbV91aWQudG9KUyhleGVjKSk7CiAgICAgCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJDb21waWxlZEJ5dGVjb2RlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJDb21w
aWxlZEJ5dGVjb2RlLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3Byb2ZpbGVyL1Byb2ZpbGVyQ29tcGlsZWRCeXRlY29kZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE5IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NDgsNyArNDgsNyBAQCBKU1ZhbHVlIENvbXBpbGVkQnl0ZWNvZGU6OnRvSlMoRXhlY1N0YXRlCiAg
ICAgSlNPYmplY3QqIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMpOwogICAgIAog
ICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5vcmlnaW4sIG1fb3Jp
Z2luLnRvSlMoZXhlYykpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5h
bWVzLT5kZXNjcmlwdGlvbiwganNTdHJpbmcoZXhlYywgU3RyaW5nOjpmcm9tVVRGOChtX2Rlc2Ny
aXB0aW9uKSkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5k
ZXNjcmlwdGlvbiwganNTdHJpbmcodm0sIFN0cmluZzo6ZnJvbVVURjgobV9kZXNjcmlwdGlvbikp
KTsKICAgICAKICAgICByZXR1cm4gcmVzdWx0OwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3Byb2ZpbGVyL1Byb2ZpbGVyRXZlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlckV2ZW50LmNwcAkocmV2aXNpb24gMjQ5MTI4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyRXZlbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTUzLDkgKzUzLDkgQEAgSlNWYWx1ZSBFdmVudDo6dG9KUyhFeGVjU3RhdGUqIGV4
ZWMpIGNvbgogICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5ieXRl
Y29kZXNJRCwganNOdW1iZXIobV9ieXRlY29kZXMtPmlkKCkpKTsKICAgICBpZiAobV9jb21waWxh
dGlvbikKICAgICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmNv
bXBpbGF0aW9uVUlELCBtX2NvbXBpbGF0aW9uLT51aWQoKS50b0pTKGV4ZWMpKTsKLSAgICByZXN1
bHQtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+c3VtbWFyeSwganNTdHJpbmcoZXhl
YywgU3RyaW5nOjpmcm9tVVRGOChtX3N1bW1hcnkpKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qo
dm0sIHZtLnByb3BlcnR5TmFtZXMtPnN1bW1hcnksIGpzU3RyaW5nKHZtLCBTdHJpbmc6OmZyb21V
VEY4KG1fc3VtbWFyeSkpKTsKICAgICBpZiAobV9kZXRhaWwubGVuZ3RoKCkpCi0gICAgICAgIHJl
c3VsdC0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5kZXRhaWwsIGpzU3RyaW5nKGV4
ZWMsIFN0cmluZzo6ZnJvbVVURjgobV9kZXRhaWwpKSk7CisgICAgICAgIHJlc3VsdC0+cHV0RGly
ZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5kZXRhaWwsIGpzU3RyaW5nKHZtLCBTdHJpbmc6OmZy
b21VVEY4KG1fZGV0YWlsKSkpOwogICAgIAogICAgIHJldHVybiByZXN1bHQ7CiB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJPU1JFeGl0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJPU1JFeGl0LmNw
cAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1By
b2ZpbGVyT1NSRXhpdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTEsNyArNTEsNyBAQCBKU1ZhbHVlIE9T
UkV4aXQ6OnRvSlMoRXhlY1N0YXRlKiBleGVjKSBjCiAgICAgSlNPYmplY3QqIHJlc3VsdCA9IGNv
bnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMpOwogICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCB2bS5w
cm9wZXJ0eU5hbWVzLT5pZCwganNOdW1iZXIobV9pZCkpOwogICAgIHJlc3VsdC0+cHV0RGlyZWN0
KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5vcmlnaW4sIG1fb3JpZ2luLnRvSlMoZXhlYykpOwotICAg
IHJlc3VsdC0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5leGl0S2luZCwganNTdHJp
bmcoZXhlYywgZXhpdEtpbmRUb1N0cmluZyhtX2V4aXRLaW5kKSkpOworICAgIHJlc3VsdC0+cHV0
RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5leGl0S2luZCwganNTdHJpbmcodm0sIGV4aXRL
aW5kVG9TdHJpbmcobV9leGl0S2luZCkpKTsKICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgdm0u
cHJvcGVydHlOYW1lcy0+aXNXYXRjaHBvaW50LCBqc0Jvb2xlYW4obV9pc1dhdGNocG9pbnQpKTsK
ICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+Y291bnQsIGpzTnVt
YmVyKG1fY291bnRlcikpOwogICAgIHJldHVybiByZXN1bHQ7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJPU1JFeGl0U2l0ZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyT1NSRXhpdFNpdGUuY3BwCShy
ZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmls
ZXJPU1JFeGl0U2l0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDEyLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MSw3ICs0MSw3IEBAIEpTVmFs
dWUgT1NSRXhpdFNpdGU6OnRvSlMoRXhlY1N0YXRlKiBleGUKICAgICBKU0FycmF5KiByZXN1bHQg
PSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIDApOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIHsgfSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fY29kZUFkZHJlc3Nl
cy5zaXplKCk7ICsraSkgewotICAgICAgICByZXN1bHQtPnB1dERpcmVjdEluZGV4KGV4ZWMsIGks
IGpzU3RyaW5nKGV4ZWMsIHRvU3RyaW5nKFJhd1BvaW50ZXIobV9jb2RlQWRkcmVzc2VzW2ldLmRh
dGFMb2NhdGlvbigpKSkpKTsKKyAgICAgICAgcmVzdWx0LT5wdXREaXJlY3RJbmRleChleGVjLCBp
LCBqc1N0cmluZyh2bSwgdG9TdHJpbmcoUmF3UG9pbnRlcihtX2NvZGVBZGRyZXNzZXNbaV0uZGF0
YUxvY2F0aW9uKCkpKSkpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0p
OwogICAgIH0KICAgICByZXR1cm4gcmVzdWx0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3Byb2ZpbGVyL1Byb2ZpbGVyVUlELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcHJvZmlsZXIvUHJvZmlsZXJVSUQuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJVSUQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTQ5LDcgKzQ5LDcgQEAgdm9pZCBVSUQ6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIAog
SlNWYWx1ZSBVSUQ6OnRvSlMoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogewotICAgIHJldHVybiBq
c1N0cmluZyhleGVjLCB0b1N0cmluZygqdGhpcykpOworICAgIHJldHVybiBqc1N0cmluZyhleGVj
LT52bSgpLCB0b1N0cmluZygqdGhpcykpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6UHJv
ZmlsZXIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Fic3RyYWN0TW9kdWxl
UmVjb3JkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9B
YnN0cmFjdE1vZHVsZVJlY29yZC5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0Fic3RyYWN0TW9kdWxlUmVjb3JkLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTY1LDcgKzY1LDcgQEAgdm9pZCBBYnN0cmFjdE1vZHVsZVJlY29yZDo6ZmluaXNoQ3Jl
YXRpbwogICAgIEpTTWFwKiBtYXAgPSBKU01hcDo6Y3JlYXRlKGV4ZWMsIHZtLCBnbG9iYWxPYmpl
Y3Qodm0pLT5tYXBTdHJ1Y3R1cmUoKSk7CiAgICAgc2NvcGUucmVsZWFzZUFzc2VydE5vRXhjZXB0
aW9uKCk7CiAgICAgbV9kZXBlbmRlbmNpZXNNYXAuc2V0KHZtLCB0aGlzLCBtYXApOwotICAgIHB1
dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJkZXBlbmRlbmNpZXNNYXAi
X3MpLCBtX2RlcGVuZGVuY2llc01hcC5nZXQoKSk7CisgICAgcHV0RGlyZWN0KHZtLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKHZtLCAiZGVwZW5kZW5jaWVzTWFwIl9zKSwgbV9kZXBlbmRlbmNpZXNN
YXAuZ2V0KCkpOwogfQogCiB2b2lkIEFic3RyYWN0TW9kdWxlUmVjb3JkOjp2aXNpdENoaWxkcmVu
KEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCkBAIC0xNDgsNyArMTQ4LDcgQEAg
QWJzdHJhY3RNb2R1bGVSZWNvcmQqIEFic3RyYWN0TW9kdWxlUmVjbwogICAgIEpTVmFsdWUgbW9k
dWxlTmFtZVZhbHVlID0gaWRlbnRpZmllclRvSlNWYWx1ZSh2bSwgbW9kdWxlTmFtZSk7CiAgICAg
SlNWYWx1ZSBlbnRyeSA9IG1fZGVwZW5kZW5jaWVzTWFwLT5KU01hcDo6Z2V0KGV4ZWMsIG1vZHVs
ZU5hbWVWYWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7Ci0g
ICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBqc0Nhc3Q8QWJzdHJhY3RNb2R1bGVSZWNvcmQq
PihlbnRyeS5nZXQoZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCAibW9kdWxlIikp
KSk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBqc0Nhc3Q8QWJzdHJhY3RNb2R1bGVS
ZWNvcmQqPihlbnRyeS5nZXQoZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIm1vZHVs
ZSIpKSkpOwogfQogCiBhdXRvIEFic3RyYWN0TW9kdWxlUmVjb3JkOjpyZXNvbHZlSW1wb3J0KEV4
ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgbG9jYWxOYW1lKSAtPiBSZXNvbHV0aW9u
CkBAIC01NDEsNyArNTQxLDcgQEAgYXV0byBBYnN0cmFjdE1vZHVsZVJlY29yZDo6cmVzb2x2ZUV4
cG9ydAogICAgICAgICAvLyBFbnF1ZXVlIHRoZSB0YXNrcyBpbiByZXZlcnNlIG9yZGVyLgogICAg
ICAgICBmb3IgKGF1dG8gaXRlcmF0b3IgPSBxdWVyeS5tb2R1bGVSZWNvcmQtPnN0YXJFeHBvcnRF
bnRyaWVzKCkucmJlZ2luKCksIGVuZCA9IHF1ZXJ5Lm1vZHVsZVJlY29yZC0+c3RhckV4cG9ydEVu
dHJpZXMoKS5yZW5kKCk7IGl0ZXJhdG9yICE9IGVuZDsgKytpdGVyYXRvcikgewogICAgICAgICAg
ICAgY29uc3QgUmVmUHRyPFVuaXF1ZWRTdHJpbmdJbXBsPiYgc3Rhck1vZHVsZU5hbWUgPSAqaXRl
cmF0b3I7Ci0gICAgICAgICAgICBBYnN0cmFjdE1vZHVsZVJlY29yZCogaW1wb3J0ZWRNb2R1bGVS
ZWNvcmQgPSBxdWVyeS5tb2R1bGVSZWNvcmQtPmhvc3RSZXNvbHZlSW1wb3J0ZWRNb2R1bGUoZXhl
YywgSWRlbnRpZmllcjo6ZnJvbVVpZChleGVjLCBzdGFyTW9kdWxlTmFtZS5nZXQoKSkpOworICAg
ICAgICAgICAgQWJzdHJhY3RNb2R1bGVSZWNvcmQqIGltcG9ydGVkTW9kdWxlUmVjb3JkID0gcXVl
cnkubW9kdWxlUmVjb3JkLT5ob3N0UmVzb2x2ZUltcG9ydGVkTW9kdWxlKGV4ZWMsIElkZW50aWZp
ZXI6OmZyb21VaWQodm0sIHN0YXJNb2R1bGVOYW1lLmdldCgpKSk7CiAgICAgICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7CiAgICAgICAgICAgICBwZW5kaW5nVGFza3Mu
YXBwZW5kKFRhc2sgeyBSZXNvbHZlUXVlcnkoaW1wb3J0ZWRNb2R1bGVSZWNvcmQsIHF1ZXJ5LmV4
cG9ydE5hbWUuZ2V0KCkpLCBUeXBlOjpRdWVyeSB9KTsKICAgICAgICAgfQpAQCAtNzIwLDcgKzcy
MCw3IEBAIHN0YXRpYyB2b2lkIGdldEV4cG9ydGVkTmFtZXMoRXhlY1N0YXRlKiAKICAgICAgICAg
fQogCiAgICAgICAgIGZvciAoY29uc3QgYXV0byYgc3Rhck1vZHVsZU5hbWUgOiBtb2R1bGVSZWNv
cmQtPnN0YXJFeHBvcnRFbnRyaWVzKCkpIHsKLSAgICAgICAgICAgIEFic3RyYWN0TW9kdWxlUmVj
b3JkKiByZXF1ZXN0ZWRNb2R1bGVSZWNvcmQgPSBtb2R1bGVSZWNvcmQtPmhvc3RSZXNvbHZlSW1w
b3J0ZWRNb2R1bGUoZXhlYywgSWRlbnRpZmllcjo6ZnJvbVVpZChleGVjLCBzdGFyTW9kdWxlTmFt
ZS5nZXQoKSkpOworICAgICAgICAgICAgQWJzdHJhY3RNb2R1bGVSZWNvcmQqIHJlcXVlc3RlZE1v
ZHVsZVJlY29yZCA9IG1vZHVsZVJlY29yZC0+aG9zdFJlc29sdmVJbXBvcnRlZE1vZHVsZShleGVj
LCBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCBzdGFyTW9kdWxlTmFtZS5nZXQoKSkpOwogICAgICAg
ICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKICAgICAgICAgICAgIHBl
bmRpbmdNb2R1bGVzLmFwcGVuZChyZXF1ZXN0ZWRNb2R1bGVSZWNvcmQpOwogICAgICAgICB9CkBA
IC03NDMsNyArNzQzLDcgQEAgSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QqIEFic3RyYWN0TW9kdWxl
UgogCiAgICAgVmVjdG9yPHN0ZDo6cGFpcjxJZGVudGlmaWVyLCBSZXNvbHV0aW9uPj4gcmVzb2x1
dGlvbnM7CiAgICAgZm9yIChhdXRvJiBuYW1lIDogZXhwb3J0ZWROYW1lcykgewotICAgICAgICBJ
ZGVudGlmaWVyIGlkZW50ID0gSWRlbnRpZmllcjo6ZnJvbVVpZChleGVjLCBuYW1lLmdldCgpKTsK
KyAgICAgICAgSWRlbnRpZmllciBpZGVudCA9IElkZW50aWZpZXI6OmZyb21VaWQodm0sIG5hbWUu
Z2V0KCkpOwogICAgICAgICBjb25zdCBSZXNvbHV0aW9uIHJlc29sdXRpb24gPSByZXNvbHZlRXhw
b3J0KGV4ZWMsIGlkZW50KTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVs
bHB0cik7CiAgICAgICAgIHN3aXRjaCAocmVzb2x1dGlvbi50eXBlKSB7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUJ1ZmZlck5ldXRlcmluZ1dhdGNocG9pbnRTZXQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5QnVm
ZmVyTmV1dGVyaW5nV2F0Y2hwb2ludFNldC5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludFNl
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtNjIsNyArNjIsNyBAQCBTdHJ1Y3R1cmUqIEFycmF5QnVmZmVy
TmV1dGVyaW5nV2F0Y2hwb2luCiAKIHZvaWQgQXJyYXlCdWZmZXJOZXV0ZXJpbmdXYXRjaHBvaW50
U2V0OjpmaXJlQWxsKCkKIHsKLSAgICBtX3NldC0+ZmlyZUFsbCgqdm0oKSwgIkFycmF5IGJ1ZmZl
ciB3YXMgbmV1dGVyZWQiKTsKKyAgICBtX3NldC0+ZmlyZUFsbCh2bSgpLCAiQXJyYXkgYnVmZmVy
IHdhcyBuZXV0ZXJlZCIpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5SXRlcmF0b3JQcm90b3R5cGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5SXRlcmF0b3JQcm90b3R5
cGUuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9BcnJheUl0ZXJhdG9yUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE5IEFwcGxlLCBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQzLDcgKzQzLDcg
QEAgdm9pZCBBcnJheUl0ZXJhdG9yUHJvdG90eXBlOjpmaW5pc2hDcmVhdAogewogICAgIEJhc2U6
OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOwot
ICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT50b1N0
cmluZ1RhZ1N5bWJvbCwganNTdHJpbmcoJnZtLCAiQXJyYXkgSXRlcmF0b3IiKSwgUHJvcGVydHlB
dHRyaWJ1dGU6OkRvbnRFbnVtIHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KTsKKyAgICBw
dXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+dG9TdHJpbmdU
YWdTeW1ib2wsIGpzU3RyaW5nKHZtLCAiQXJyYXkgSXRlcmF0b3IiKSwgUHJvcGVydHlBdHRyaWJ1
dGU6OkRvbnRFbnVtIHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KTsKICAgICBKU0NfQlVJ
TFRJTl9GVU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJT04odm0ucHJvcGVydHlOYW1lcy0+bmV4dCwg
YXJyYXlJdGVyYXRvclByb3RvdHlwZU5leHRDb2RlR2VuZXJhdG9yLCBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAJKHJldmlzaW9u
IDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChD
KSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmlnaHQg
KEMpIDIwMDMtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJp
Z2h0IChDKSAyMDAzLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogIENv
cHlyaWdodCAoQykgMjAwMyBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQogICogIENvcHlyaWdo
dCAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IChhcEBueXBvcC5jb20pCiAgKgpAQCAtNTMz
LDE5ICs1MzMsMTkgQEAgaW5saW5lIEpTVmFsdWUgZmFzdEpvaW4oRXhlY1N0YXRlJiBzdGF0ZQog
ICAgICAgICAgICAgZ290byBnZW5lcmFsQ2FzZTsKICAgICAgICAgc3dpdGNoIChzZXBhcmF0b3Iu
bGVuZ3RoKCkpIHsKICAgICAgICAgY2FzZSAwOgotICAgICAgICAgICAgUkVMRUFTRV9BTkRfUkVU
VVJOKHNjb3BlLCBqc0VtcHR5U3RyaW5nKCZzdGF0ZSkpOworICAgICAgICAgICAgUkVMRUFTRV9B
TkRfUkVUVVJOKHNjb3BlLCBqc0VtcHR5U3RyaW5nKHZtKSk7CiAgICAgICAgIGNhc2UgMTogewog
ICAgICAgICAgICAgaWYgKGxlbmd0aCA8PSAxKQotICAgICAgICAgICAgICAgIFJFTEVBU0VfQU5E
X1JFVFVSTihzY29wZSwganNFbXB0eVN0cmluZygmc3RhdGUpKTsKKyAgICAgICAgICAgICAgICBS
RUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGpzRW1wdHlTdHJpbmcodm0pKTsKICAgICAgICAgICAg
IGlmIChzZXBhcmF0b3IuaXM4Qml0KCkpCiAgICAgICAgICAgICAgICAgUkVMRUFTRV9BTkRfUkVU
VVJOKHNjb3BlLCByZXBlYXRDaGFyYWN0ZXIoc3RhdGUsIHNlcGFyYXRvci5jaGFyYWN0ZXJzOCgp
WzBdLCBsZW5ndGggLSAxKSk7CiAgICAgICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUs
IHJlcGVhdENoYXJhY3RlcihzdGF0ZSwgc2VwYXJhdG9yLmNoYXJhY3RlcnMxNigpWzBdLCBsZW5n
dGggLSAxKSk7CiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBKU1N0cmluZyogcmVzdWx0
ID0ganNFbXB0eVN0cmluZygmc3RhdGUpOworICAgICAgICAgICAgSlNTdHJpbmcqIHJlc3VsdCA9
IGpzRW1wdHlTdHJpbmcodm0pOwogICAgICAgICAgICAgaWYgKGxlbmd0aCA8PSAxKQogICAgICAg
ICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAKLSAgICAgICAgICAgIEpTU3RyaW5nKiBvcGVyYW5k
ID0ganNTdHJpbmcoJnZtLCBzZXBhcmF0b3IudG9TdHJpbmcoKSk7CisgICAgICAgICAgICBKU1N0
cmluZyogb3BlcmFuZCA9IGpzU3RyaW5nKHZtLCBzZXBhcmF0b3IudG9TdHJpbmcoKSk7CiAgICAg
ICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgICAgICAgICAgdW5z
aWduZWQgY291bnQgPSBsZW5ndGggLSAxOwogICAgICAgICAgICAgZm9yICg7OykgewpAQCAtNjk5
LDcgKzY5OSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAg
ICAgICAgSlNWYWx1ZSBlbGVtZW50ID0gdGhpc09iamVjdC0+Z2V0SW5kZXgoZXhlYywgaSk7CiAg
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAg
ICAgICBpZiAoZWxlbWVudC5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICAgICAgZWxlbWVu
dCA9IGpzRW1wdHlTdHJpbmcoZXhlYyk7CisgICAgICAgICAgICBlbGVtZW50ID0ganNFbXB0eVN0
cmluZyh2bSk7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgSlNWYWx1ZSBjb252ZXJzaW9u
RnVuY3Rpb24gPSBlbGVtZW50LmdldChleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT50b0xvY2FsZVN0
cmluZyk7CiAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNW
YWx1ZSgpKTsKQEAgLTcyOCw3ICs3MjgsNyBAQCBzdGF0aWMgSlNWYWx1ZSBzbG93Sm9pbihFeGVj
U3RhdGUmIGV4ZWMsCiAKICAgICAvLyA1LiBJZiBsZW4gaXMgemVybywgcmV0dXJuIHRoZSBlbXB0
eSBTdHJpbmcuCiAgICAgaWYgKCFsZW5ndGgpCi0gICAgICAgIHJldHVybiBqc0VtcHR5U3RyaW5n
KCZleGVjKTsKKyAgICAgICAgcmV0dXJuIGpzRW1wdHlTdHJpbmcodm0pOwogCiAgICAgLy8gNi4g
TGV0IGVsZW1lbnQwIGJlIEdldChPLCAiMCIpLgogICAgIEpTVmFsdWUgZWxlbWVudDAgPSB0aGlz
T2JqZWN0LT5nZXRJbmRleCgmZXhlYywgMCk7CkBAIC03MzcsNyArNzM3LDcgQEAgc3RhdGljIEpT
VmFsdWUgc2xvd0pvaW4oRXhlY1N0YXRlJiBleGVjLAogICAgIC8vIDcuIElmIGVsZW1lbnQwIGlz
IHVuZGVmaW5lZCBvciBudWxsLCBsZXQgUiBiZSB0aGUgZW1wdHkgU3RyaW5nOyBvdGhlcndpc2Us
IGxldCBSIGJlID8gVG9TdHJpbmcoZWxlbWVudDApLgogICAgIEpTU3RyaW5nKiByID0gbnVsbHB0
cjsKICAgICBpZiAoZWxlbWVudDAuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgciA9IGpz
RW1wdHlTdHJpbmcoJmV4ZWMpOworICAgICAgICByID0ganNFbXB0eVN0cmluZyh2bSk7CiAgICAg
ZWxzZQogICAgICAgICByID0gZWxlbWVudDAudG9TdHJpbmcoJmV4ZWMpOwogICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CkBAIC03NDcsNyArNzQ3LDcgQEAgc3RhdGljIEpTVmFs
dWUgc2xvd0pvaW4oRXhlY1N0YXRlJiBleGVjLAogICAgIC8vIDkuZSBJbmNyZWFzZSBrIGJ5IDEu
LgogICAgIGZvciAodWludDY0X3QgayA9IDE7IGsgPCBsZW5ndGg7ICsraykgewogICAgICAgICAv
LyBiLiBMZXQgZWxlbWVudCBiZSA/IEdldChPLCAhIFRvU3RyaW5nKGspKS4KLSAgICAgICAgSlNW
YWx1ZSBlbGVtZW50ID0gdGhpc09iamVjdC0+Z2V0KCZleGVjLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKCZleGVjLCBBdG9tU3RyaW5nOjpudW1iZXIoaykpKTsKKyAgICAgICAgSlNWYWx1ZSBlbGVt
ZW50ID0gdGhpc09iamVjdC0+Z2V0KCZleGVjLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBB
dG9tU3RyaW5nOjpudW1iZXIoaykpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgeyB9KTsKIAogICAgICAgICAvLyBjLiBJZiBlbGVtZW50IGlzIHVuZGVmaW5lZCBvciBudWxs
LCBsZXQgbmV4dCBiZSB0aGUgZW1wdHkgU3RyaW5nOyBvdGhlcndpc2UsIGxldCBuZXh0IGJlID8g
VG9TdHJpbmcoZWxlbWVudCkuCkBAIC03NTUsNyArNzU1LDcgQEAgc3RhdGljIEpTVmFsdWUgc2xv
d0pvaW4oRXhlY1N0YXRlJiBleGVjLAogICAgICAgICBpZiAoZWxlbWVudC5pc1VuZGVmaW5lZE9y
TnVsbCgpKSB7CiAgICAgICAgICAgICBpZiAoIXNlcGFyYXRvci0+bGVuZ3RoKCkpCiAgICAgICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBuZXh0ID0ganNFbXB0eVN0cmluZygmZXhl
Yyk7CisgICAgICAgICAgICBuZXh0ID0ganNFbXB0eVN0cmluZyh2bSk7CiAgICAgICAgIH0gZWxz
ZQogICAgICAgICAgICAgbmV4dCA9IGVsZW1lbnQudG9TdHJpbmcoJmV4ZWMpOwogICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwpAQCAtNzk3LDcgKzc5Nyw3IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICAgICAgaWYgKFVOTElLRUxZ
KGxlbmd0aCA+IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSB8fCAhY2FuVXNl
RmFzdEpvaW4odGhpc09iamVjdCkpKSB7CiAgICAgICAgICAgICB1aW50NjRfdCBsZW5ndGg2NCA9
IHN0YXRpY19jYXN0PHVpbnQ2NF90PihsZW5ndGgpOwogICAgICAgICAgICAgQVNTRVJUKHN0YXRp
Y19jYXN0PGRvdWJsZT4obGVuZ3RoNjQpID09IGxlbmd0aCk7Ci0gICAgICAgICAgICBKU1N0cmlu
ZyoganNTZXBhcmF0b3IgPSBqc1NpbmdsZUNoYXJhY3RlclN0cmluZyhleGVjLCBjb21tYSk7Cisg
ICAgICAgICAgICBKU1N0cmluZyoganNTZXBhcmF0b3IgPSBqc1NpbmdsZUNoYXJhY3RlclN0cmlu
Zyh2bSwgY29tbWEpOwogICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5j
b2RlZEpTVmFsdWUoKSk7CiAKICAgICAgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwg
SlNWYWx1ZTo6ZW5jb2RlKHNsb3dKb2luKCpleGVjLCB0aGlzT2JqZWN0LCBqc1NlcGFyYXRvciwg
bGVuZ3RoNjQpKSk7CkBAIC04ODgsNyArODg4LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBhcnJheVByb3RvRgogICAgICAgICAgICAgdGhpc09iai0+bWV0aG9kVGFibGUodm0pLT5w
dXRCeUluZGV4KHRoaXNPYmosIGV4ZWMsIGxlbmd0aCArIG4sIGV4ZWMtPnVuY2hlY2tlZEFyZ3Vt
ZW50KG4pLCB0cnVlKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBQdXRQcm9wZXJ0eVNs
b3Qgc2xvdCh0aGlzT2JqKTsKLSAgICAgICAgICAgIElkZW50aWZpZXIgcHJvcGVydHlOYW1lID0g
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCBKU1ZhbHVlKHN0YXRpY19jYXN0PGludDY0X3Q+
KGxlbmd0aCkgKyBzdGF0aWNfY2FzdDxpbnQ2NF90PihuKSkudG9XVEZTdHJpbmcoZXhlYykpOwor
ICAgICAgICAgICAgSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKHZtLCBKU1ZhbHVlKHN0YXRpY19jYXN0PGludDY0X3Q+KGxlbmd0aCkgKyBzdGF0aWNfY2Fz
dDxpbnQ2NF90PihuKSkudG9XVEZTdHJpbmcoZXhlYykpOwogICAgICAgICAgICAgdGhpc09iai0+
bWV0aG9kVGFibGUodm0pLT5wdXQodGhpc09iaiwgZXhlYywgcHJvcGVydHlOYW1lLCBleGVjLT51
bmNoZWNrZWRBcmd1bWVudChuKSwgc2xvdCk7CiAgICAgICAgIH0KICAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Bc3luY0Z1bmN0aW9uUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Bc3luY0Z1bmN0aW9uUHJvdG90eXBlLmNw
cAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXN5
bmNGdW5jdGlvblByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAv
KgogICogQ29weXJpZ2h0IChDKSAyMDE2IENhaXRsaW4gUG90dGVyIDxjYWl0cEBpZ2FsaWEuY29t
Pi4KKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ5LDcgKzUwLDcgQEAgdm9pZCBB
c3luY0Z1bmN0aW9uUHJvdG90eXBlOjpmaW5pc2hDcmVhdAogICAgIEJhc2U6OmZpbmlzaENyZWF0
aW9uKHZtKTsKICAgICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOwogICAgIHB1dERpcmVj
dFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVy
KDApLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IFByb3BlcnR5QXR0cmlidXRlOjpS
ZWFkT25seSB8IFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7Ci0gICAgcHV0RGlyZWN0V2l0
aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPnRvU3RyaW5nVGFnU3ltYm9sLCBq
c1N0cmluZygmdm0sICJBc3luY0Z1bmN0aW9uIiksIFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51
bSB8IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSk7CisgICAgcHV0RGlyZWN0V2l0aG91dFRy
YW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPnRvU3RyaW5nVGFnU3ltYm9sLCBqc1N0cmlu
Zyh2bSwgIkFzeW5jRnVuY3Rpb24iKSwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtIHwgUHJv
cGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Bc3luY0dlbmVyYXRvckZ1bmN0aW9uUHJv
dG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9B
c3luY0dlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXN5bmNHZW5lcmF0b3JGdW5jdGlvblByb3Rv
dHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0
IChDKSAyMDE3IE9sZWtzYW5kciBTa2FjaGtvdiA8Z3NrYWNoa292QGdtYWlsLmNvbT4uCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00OSw3ICs1MCw3IEBAIHZvaWQgQXN5bmNHZW5l
cmF0b3JGdW5jdGlvblByb3RvdHlwZTo6ZmkKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7
CiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKICAgICBwdXREaXJlY3RXaXRob3V0
VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigwKSwgUHJv
cGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUgfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkg
fCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwotICAgIHB1dERpcmVjdFdpdGhvdXRUcmFu
c2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT50b1N0cmluZ1RhZ1N5bWJvbCwganNTdHJpbmco
JnZtLCAiQXN5bmNHZW5lcmF0b3JGdW5jdGlvbiIpLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVu
dW0gfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpOworICAgIHB1dERpcmVjdFdpdGhvdXRU
cmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT50b1N0cmluZ1RhZ1N5bWJvbCwganNTdHJp
bmcodm0sICJBc3luY0dlbmVyYXRvckZ1bmN0aW9uIiksIFByb3BlcnR5QXR0cmlidXRlOjpEb250
RW51bSB8IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXN5bmNHZW5lcmF0b3JQ
cm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0FzeW5jR2VuZXJhdG9yUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXN5bmNHZW5lcmF0b3JQcm90b3R5cGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxNyBPbGVr
c2FuZHIgU2thY2hrb3YgPGdza2FjaGtvdkBnbWFpbC5jb20+LgorICogQ29weXJpZ2h0IChDKSAy
MDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtNDgsNyArNDksNyBAQCB2b2lkIEFzeW5jR2VuZXJhdG9yUHJvdG90eXBl
OjpmaW5pc2hDcmVhCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIEFTU0VS
VChpbmhlcml0cyh2bSwgaW5mbygpKSk7Ci0gICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24o
dm0sIHZtLnByb3BlcnR5TmFtZXMtPnRvU3RyaW5nVGFnU3ltYm9sLCBqc1N0cmluZygmdm0sICJB
c3luY0dlbmVyYXRvciIpLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBQcm9wZXJ0eUF0
dHJpYnV0ZTo6UmVhZE9ubHkpOworICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2
bS5wcm9wZXJ0eU5hbWVzLT50b1N0cmluZ1RhZ1N5bWJvbCwganNTdHJpbmcodm0sICJBc3luY0dl
bmVyYXRvciIpLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBQcm9wZXJ0eUF0dHJpYnV0
ZTo6UmVhZE9ubHkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0F0b21pY3NPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0F0b21pY3NPYmplY3QuY3BwCShyZXZpc2lvbiAyNDkx
MjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BdG9taWNzT2JqZWN0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYt
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTYtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTgxLDcgKzgxLDcgQEAgdm9pZCBBdG9taWNzT2JqZWN0OjpmaW5p
c2hDcmVhdGlvbihWTSYgdgogICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7CiAgICAg
CiAjZGVmaW5lIFBVVF9ESVJFQ1RfTkFUSVZFX0ZVTkMobG93ZXJOYW1lLCB1cHBlck5hbWUsIGNv
dW50KSBcCi0gICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbih2bSwg
Z2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgI2xvd2VyTmFtZSksIGNv
dW50LCBhdG9taWNzRnVuYyAjIyB1cHBlck5hbWUsIEF0b21pY3MgIyMgdXBwZXJOYW1lICMjIElu
dHJpbnNpYywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51
bSkpOworICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9uV2l0aG91dFRyYW5zaXRpb24odm0sIGds
b2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgI2xvd2VyTmFtZSksIGNvdW50
LCBhdG9taWNzRnVuYyAjIyB1cHBlck5hbWUsIEF0b21pY3MgIyMgdXBwZXJOYW1lICMjIEludHJp
bnNpYywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkp
OwogICAgIEZPUl9FQUNIX0FUT01JQ1NfRlVOQyhQVVRfRElSRUNUX05BVElWRV9GVU5DKQogI3Vu
ZGVmIFBVVF9ESVJFQ1RfTkFUSVZFX0ZVTkMKIH0KQEAgLTQyNSw3ICs0MjUsNyBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGF0b21pY3NGdW5jCiAgICAgICAgIHJlc3VsdFN0cmluZyA9
ICJ0aW1lZC1vdXQiOwogICAgIGVsc2UKICAgICAgICAgcmVzdWx0U3RyaW5nID0gIm9rIjsKLSAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKGV4ZWMsIHJlc3VsdFN0cmluZykpOwor
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcodm0sIHJlc3VsdFN0cmluZykpOwog
fQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGF0b21pY3NGdW5jV2FrZShFeGVjU3Rh
dGUqIGV4ZWMpCkBAIC00NjgsNyArNDY4LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBhdG9taWNzRnVuYwogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25BdG9t
aWNzQWRkKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgYmFzZSwgRW5jb2RlZEpTVmFs
dWUgaW5kZXgsIEVuY29kZWRKU1ZhbHVlIG9wZXJhbmQpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgSlNWYWx1ZSBhcmdz
W10gPSB7SlNWYWx1ZTo6ZGVjb2RlKGJhc2UpLCBKU1ZhbHVlOjpkZWNvZGUoaW5kZXgpLCBKU1Zh
bHVlOjpkZWNvZGUob3BlcmFuZCl9OwogICAgIHJldHVybiBhdG9taWNPcGVyYXRpb25XaXRoQXJn
cyh2bSwgZXhlYywgYXJncywgQWRkRnVuYygpKTsKIH0KQEAgLTQ3Niw3ICs0NzYsNyBAQCBFbmNv
ZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkF0CiBFbmNvZGVkSlNWYWx1ZSBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbkF0b21pY3NBbmQoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNW
YWx1ZSBiYXNlLCBFbmNvZGVkSlNWYWx1ZSBpbmRleCwgRW5jb2RlZEpTVmFsdWUgb3BlcmFuZCkK
IHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBl
eGVjKTsKICAgICBKU1ZhbHVlIGFyZ3NbXSA9IHtKU1ZhbHVlOjpkZWNvZGUoYmFzZSksIEpTVmFs
dWU6OmRlY29kZShpbmRleCksIEpTVmFsdWU6OmRlY29kZShvcGVyYW5kKX07CiAgICAgcmV0dXJu
IGF0b21pY09wZXJhdGlvbldpdGhBcmdzKHZtLCBleGVjLCBhcmdzLCBBbmRGdW5jKCkpOwogfQpA
QCAtNDg0LDcgKzQ4NCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
QXQKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXRvbWljc0NvbXBhcmVF
eGNoYW5nZShFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGJhc2UsIEVuY29kZWRKU1Zh
bHVlIGluZGV4LCBFbmNvZGVkSlNWYWx1ZSBleHBlY3RlZCwgRW5jb2RlZEpTVmFsdWUgbmV3VmFs
dWUpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFj
ZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2
bSwgZXhlYyk7CiAgICAgSlNWYWx1ZSBhcmdzW10gPSB7SlNWYWx1ZTo6ZGVjb2RlKGJhc2UpLCBK
U1ZhbHVlOjpkZWNvZGUoaW5kZXgpLCBKU1ZhbHVlOjpkZWNvZGUoZXhwZWN0ZWQpLCBKU1ZhbHVl
OjpkZWNvZGUobmV3VmFsdWUpfTsKICAgICByZXR1cm4gYXRvbWljT3BlcmF0aW9uV2l0aEFyZ3Mo
dm0sIGV4ZWMsIGFyZ3MsIENvbXBhcmVFeGNoYW5nZUZ1bmMoKSk7CiB9CkBAIC00OTIsNyArNDky
LDcgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25BdAogRW5jb2RlZEpT
VmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25BdG9taWNzRXhjaGFuZ2UoRXhlY1N0YXRlKiBl
eGVjLCBFbmNvZGVkSlNWYWx1ZSBiYXNlLCBFbmNvZGVkSlNWYWx1ZSBpbmRleCwgRW5jb2RlZEpT
VmFsdWUgb3BlcmFuZCkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFj
ZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICBKU1ZhbHVlIGFyZ3NbXSA9IHtKU1ZhbHVlOjpkZWNv
ZGUoYmFzZSksIEpTVmFsdWU6OmRlY29kZShpbmRleCksIEpTVmFsdWU6OmRlY29kZShvcGVyYW5k
KX07CiAgICAgcmV0dXJuIGF0b21pY09wZXJhdGlvbldpdGhBcmdzKHZtLCBleGVjLCBhcmdzLCBF
eGNoYW5nZUZ1bmMoKSk7CiB9CkBAIC01MDAsMTQgKzUwMCwxNCBAQCBFbmNvZGVkSlNWYWx1ZSBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbkF0CiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbkF0b21pY3NJc0xvY2tGcmVlKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUg
c2l6ZSkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRy
YWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KHZtLCBleGVjKTsKICAgICByZXR1cm4gaXNMb2NrRnJlZShleGVjLCBKU1ZhbHVlOjpkZWNvZGUo
c2l6ZSkpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkF0b21p
Y3NMb2FkKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgYmFzZSwgRW5jb2RlZEpTVmFs
dWUgaW5kZXgpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcih2bSwgZXhlYyk7CiAgICAgSlNWYWx1ZSBhcmdzW10gPSB7SlNWYWx1ZTo6ZGVjb2RlKGJh
c2UpLCBKU1ZhbHVlOjpkZWNvZGUoaW5kZXgpfTsKICAgICByZXR1cm4gYXRvbWljT3BlcmF0aW9u
V2l0aEFyZ3Modm0sIGV4ZWMsIGFyZ3MsIExvYWRGdW5jKCkpOwogfQpAQCAtNTE1LDcgKzUxNSw3
IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXQKIEVuY29kZWRKU1Zh
bHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXRvbWljc09yKEV4ZWNTdGF0ZSogZXhlYywgRW5j
b2RlZEpTVmFsdWUgYmFzZSwgRW5jb2RlZEpTVmFsdWUgaW5kZXgsIEVuY29kZWRKU1ZhbHVlIG9w
ZXJhbmQpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVU
cmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cih2bSwgZXhlYyk7CiAgICAgSlNWYWx1ZSBhcmdzW10gPSB7SlNWYWx1ZTo6ZGVjb2RlKGJhc2Up
LCBKU1ZhbHVlOjpkZWNvZGUoaW5kZXgpLCBKU1ZhbHVlOjpkZWNvZGUob3BlcmFuZCl9OwogICAg
IHJldHVybiBhdG9taWNPcGVyYXRpb25XaXRoQXJncyh2bSwgZXhlYywgYXJncywgT3JGdW5jKCkp
OwogfQpAQCAtNTIzLDcgKzUyMyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uQXQKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXRvbWljc1N0
b3JlKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgYmFzZSwgRW5jb2RlZEpTVmFsdWUg
aW5kZXgsIEVuY29kZWRKU1ZhbHVlIG9wZXJhbmQpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgSlNWYWx1ZSBhcmdzW10g
PSB7SlNWYWx1ZTo6ZGVjb2RlKGJhc2UpLCBKU1ZhbHVlOjpkZWNvZGUoaW5kZXgpLCBKU1ZhbHVl
OjpkZWNvZGUob3BlcmFuZCl9OwogICAgIHJldHVybiBhdG9taWNPcGVyYXRpb25XaXRoQXJncyh2
bSwgZXhlYywgYXJncywgU3RvcmVGdW5jKCkpOwogfQpAQCAtNTMxLDcgKzUzMSw3IEBAIEVuY29k
ZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXQKIEVuY29kZWRKU1ZhbHVlIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uQXRvbWljc1N1YihFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1Zh
bHVlIGJhc2UsIEVuY29kZWRKU1ZhbHVlIGluZGV4LCBFbmNvZGVkSlNWYWx1ZSBvcGVyYW5kKQog
ewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4
ZWMpOwogICAgIEpTVmFsdWUgYXJnc1tdID0ge0pTVmFsdWU6OmRlY29kZShiYXNlKSwgSlNWYWx1
ZTo6ZGVjb2RlKGluZGV4KSwgSlNWYWx1ZTo6ZGVjb2RlKG9wZXJhbmQpfTsKICAgICByZXR1cm4g
YXRvbWljT3BlcmF0aW9uV2l0aEFyZ3Modm0sIGV4ZWMsIGFyZ3MsIFN1YkZ1bmMoKSk7CiB9CkBA
IC01MzksNyArNTM5LDcgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25B
dAogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25BdG9taWNzWG9yKEV4ZWNT
dGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgYmFzZSwgRW5jb2RlZEpTVmFsdWUgaW5kZXgsIEVu
Y29kZWRKU1ZhbHVlIG9wZXJhbmQpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgSlNWYWx1ZSBhcmdzW10gPSB7SlNWYWx1
ZTo6ZGVjb2RlKGJhc2UpLCBKU1ZhbHVlOjpkZWNvZGUoaW5kZXgpLCBKU1ZhbHVlOjpkZWNvZGUo
b3BlcmFuZCl9OwogICAgIHJldHVybiBhdG9taWNPcGVyYXRpb25XaXRoQXJncyh2bSwgZXhlYywg
YXJncywgWG9yRnVuYygpKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0JpZ0ludFByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQmlnSW50UHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQmlnSW50UHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQ2FpbyBMaW1hIDx0
aWNhaW9saW1hQGdtYWlsLmNvbT4uCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMTkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC03Miw3ICs3Miw3IEBAIHZvaWQgQmlnSW50UHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYK
IHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKHZt
LCBpbmZvKCkpKTsKLSAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVy
dHlOYW1lcy0+dG9TdHJpbmdUYWdTeW1ib2wsIGpzU3RyaW5nKCZ2bSwgIkJpZ0ludCIpLCBQcm9w
ZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpOwor
ICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT50b1N0
cmluZ1RhZ1N5bWJvbCwganNTdHJpbmcodm0sICJCaWdJbnQiKSwgUHJvcGVydHlBdHRyaWJ1dGU6
OkRvbnRFbnVtIHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KTsKIH0KIAogLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KQEAgLTExMCw3ICsxMTAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGJp
Z0ludFByb3RvCiAgICAgaWYgKHJlc3VsdFN0cmluZy5sZW5ndGgoKSA9PSAxKQogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHZtLnNtYWxsU3RyaW5ncy5zaW5nbGVDaGFyYWN0ZXJTdHJp
bmcocmVzdWx0U3RyaW5nWzBdKSk7CiAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTm9u
dHJpdmlhbFN0cmluZygmdm0sIHJlc3VsdFN0cmluZykpOworICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNOb250cml2aWFsU3RyaW5nKHZtLCByZXN1bHRTdHJpbmcpKTsKIH0KIAogRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBiaWdJbnRQcm90b0Z1bmNUb0xvY2FsZVN0cmluZyhFeGVj
U3RhdGUqIHN0YXRlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVk
VHlwZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nh
Y2hlZFR5cGVzLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQ2FjaGVkVHlwZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MTEsNyArNzExLDcg
QEAgcHVibGljOgogICAgICAgICAgICAgaWYgKCFtX2lzU3ltYm9sKQogICAgICAgICAgICAgICAg
IHJldHVybiBBdG9tU3RyaW5nSW1wbDo6YWRkKGJ1ZmZlciwgbV9sZW5ndGgpLmxlYWtSZWYoKTsK
IAotICAgICAgICAgICAgSWRlbnRpZmllciBpZGVudCA9IElkZW50aWZpZXI6OmZyb21TdHJpbmco
JmRlY29kZXIudm0oKSwgYnVmZmVyLCBtX2xlbmd0aCk7CisgICAgICAgICAgICBJZGVudGlmaWVy
IGlkZW50ID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhkZWNvZGVyLnZtKCksIGJ1ZmZlciwgbV9s
ZW5ndGgpOwogICAgICAgICAgICAgU3RyaW5nIHN0ciA9IGRlY29kZXIudm0oKS5wcm9wZXJ0eU5h
bWVzLT5sb29rVXBQcml2YXRlTmFtZShpZGVudCk7CiAgICAgICAgICAgICBTdHJpbmdJbXBsKiBp
bXBsID0gc3RyLnJlbGVhc2VJbXBsKCkuZ2V0KCk7CiAgICAgICAgICAgICBBU1NFUlQoaW1wbC0+
aXNTeW1ib2woKSk7CkBAIC03NzMsNyArNzczLDcgQEAgcHVibGljOgogICAgICAgICBpZiAoc3Ry
LmlzTnVsbCgpKQogICAgICAgICAgICAgcmV0dXJuIElkZW50aWZpZXIoKTsKIAotICAgICAgICBy
ZXR1cm4gSWRlbnRpZmllcjo6ZnJvbVVpZCgmZGVjb2Rlci52bSgpLCAoVW5pcXVlZFN0cmluZ0lt
cGwqKXN0ci5pbXBsKCkpOworICAgICAgICByZXR1cm4gSWRlbnRpZmllcjo6ZnJvbVVpZChkZWNv
ZGVyLnZtKCksIChVbmlxdWVkU3RyaW5nSW1wbCopc3RyLmltcGwoKSk7CiAgICAgfQogCiAgICAg
dm9pZCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgSWRlbnRpZmllciYgaWRlbnQpIGNvbnN0CkBA
IC0xMzE0LDcgKzEzMTQsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
Y2FzZSBFbmNvZGVkVHlwZTo6U3RyaW5nOiB7CiAgICAgICAgICAgICBTdHJpbmdJbXBsKiBpbXBs
ID0gdGhpcy0+YnVmZmVyPENhY2hlZFVuaXF1ZWRTdHJpbmdJbXBsPigpLT5kZWNvZGUoZGVjb2Rl
cik7Ci0gICAgICAgICAgICB2ID0ganNTdHJpbmcoJmRlY29kZXIudm0oKSwgYWRvcHRSZWYoKmlt
cGwpKTsKKyAgICAgICAgICAgIHYgPSBqc1N0cmluZyhkZWNvZGVyLnZtKCksIGFkb3B0UmVmKCpp
bXBsKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEVuY29k
ZWRUeXBlOjpJbW11dGFibGVCdXR0ZXJmbHk6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Db2RlQ2FjaGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NvZGVDYWNoZS5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0NvZGVDYWNoZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcg
KzQ1LDcgQEAgdm9pZCBDb2RlQ2FjaGVNYXA6OnBydW5lU2xvd0Nhc2UoKQogICAgIHdoaWxlICht
X3NpemUgPiBtX2NhcGFjaXR5IHx8ICFjYW5QcnVuZVF1aWNrbHkoKSkgewogICAgICAgICBNYXBU
eXBlOjppdGVyYXRvciBpdCA9IG1fbWFwLmJlZ2luKCk7CiAKLSAgICAgICAgd3JpdGVDb2RlQmxv
Y2soKml0LT52YWx1ZS5jZWxsLT52bSgpLCBpdC0+a2V5LCBpdC0+dmFsdWUpOworICAgICAgICB3
cml0ZUNvZGVCbG9jayhpdC0+dmFsdWUuY2VsbC0+dm0oKSwgaXQtPmtleSwgaXQtPnZhbHVlKTsK
IAogICAgICAgICBtX3NpemUgLT0gaXQtPmtleS5sZW5ndGgoKTsKICAgICAgICAgbV9tYXAucmVt
b3ZlKGl0KTsKQEAgLTE1MSw3ICsxNTEsNyBAQCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSog
Q29kZUNhY2hlOjpnCiAgICAgLy8gVGhlIEZ1bmN0aW9uIGNvbnN0cnVjdG9yIG9ubHkgaGFzIGFj
Y2VzcyB0byBnbG9iYWwgdmFyaWFibGVzLCBzbyBubyB2YXJpYWJsZXMgd2lsbCBiZSB1bmRlciBU
RFogdW5sZXNzIHRoZXkncmUKICAgICAvLyBpbiB0aGUgZ2xvYmFsIGxleGljYWwgZW52aXJvbm1l
bnQsIHdoaWNoIHdlIGFsd2F5cyBURFogY2hlY2sgYWNjZXNzZXMgZnJvbS4KICAgICBDb25zdHJ1
Y3RBYmlsaXR5IGNvbnN0cnVjdEFiaWxpdHkgPSBjb25zdHJ1Y3RBYmlsaXR5Rm9yUGFyc2VNb2Rl
KG1ldGFkYXRhLT5wYXJzZU1vZGUoKSk7Ci0gICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUq
IGZ1bmN0aW9uRXhlY3V0YWJsZSA9IFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpjcmVhdGUo
JnZtLCBzb3VyY2UsIG1ldGFkYXRhLCBVbmxpbmtlZE5vcm1hbEZ1bmN0aW9uLCBjb25zdHJ1Y3RB
YmlsaXR5LCBKU1BhcnNlclNjcmlwdE1vZGU6OkNsYXNzaWMsIFdURjo6bnVsbG9wdCwgRGVyaXZl
ZENvbnRleHRUeXBlOjpOb25lKTsKKyAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVu
Y3Rpb25FeGVjdXRhYmxlID0gVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OmNyZWF0ZSh2bSwg
c291cmNlLCBtZXRhZGF0YSwgVW5saW5rZWROb3JtYWxGdW5jdGlvbiwgY29uc3RydWN0QWJpbGl0
eSwgSlNQYXJzZXJTY3JpcHRNb2RlOjpDbGFzc2ljLCBXVEY6Om51bGxvcHQsIERlcml2ZWRDb250
ZXh0VHlwZTo6Tm9uZSk7CiAKICAgICBpZiAoIXNvdXJjZS5wcm92aWRlcigpLT5zb3VyY2VVUkxE
aXJlY3RpdmUoKS5pc051bGwoKSkKICAgICAgICAgZnVuY3Rpb25FeGVjdXRhYmxlLT5zZXRTb3Vy
Y2VVUkxEaXJlY3RpdmUoc291cmNlLnByb3ZpZGVyKCktPnNvdXJjZVVSTERpcmVjdGl2ZSgpKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvZGVDYWNoZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvZGVDYWNoZS5oCShyZXZpc2lv
biAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2RlQ2FjaGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMjY0LDcgKzI2NCw3IEBAIFVubGlua2VkQ29kZUJsb2NrVHlwZSog
Z2VuZXJhdGVVbmxpbmtlZEMKIHsKICAgICB0eXBlZGVmIHR5cGVuYW1lIENhY2hlVHlwZXM8VW5s
aW5rZWRDb2RlQmxvY2tUeXBlPjo6Um9vdE5vZGUgUm9vdE5vZGU7CiAgICAgc3RkOjp1bmlxdWVf
cHRyPFJvb3ROb2RlPiByb290Tm9kZSA9IHBhcnNlPFJvb3ROb2RlPigKLSAgICAgICAgJnZtLCBz
b3VyY2UsIElkZW50aWZpZXIoKSwgSlNQYXJzZXJCdWlsdGluTW9kZTo6Tm90QnVpbHRpbiwgc3Ry
aWN0TW9kZSwgc2NyaXB0TW9kZSwgQ2FjaGVUeXBlczxVbmxpbmtlZENvZGVCbG9ja1R5cGU+Ojpw
YXJzZU1vZGUsIFN1cGVyQmluZGluZzo6Tm90TmVlZGVkLCBlcnJvciwgbnVsbHB0ciwgQ29uc3Ry
dWN0b3JLaW5kOjpOb25lLCBkZXJpdmVkQ29udGV4dFR5cGUsIGV2YWxDb250ZXh0VHlwZSk7Cisg
ICAgICAgIHZtLCBzb3VyY2UsIElkZW50aWZpZXIoKSwgSlNQYXJzZXJCdWlsdGluTW9kZTo6Tm90
QnVpbHRpbiwgc3RyaWN0TW9kZSwgc2NyaXB0TW9kZSwgQ2FjaGVUeXBlczxVbmxpbmtlZENvZGVC
bG9ja1R5cGU+OjpwYXJzZU1vZGUsIFN1cGVyQmluZGluZzo6Tm90TmVlZGVkLCBlcnJvciwgbnVs
bHB0ciwgQ29uc3RydWN0b3JLaW5kOjpOb25lLCBkZXJpdmVkQ29udGV4dFR5cGUsIGV2YWxDb250
ZXh0VHlwZSk7CiAgICAgaWYgKCFyb290Tm9kZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAK
QEAgLTI4MSw3ICsyODEsNyBAQCBVbmxpbmtlZENvZGVCbG9ja1R5cGUqIGdlbmVyYXRlVW5saW5r
ZWRDCiAgICAgYm9vbCBpc1N0cmljdE1vZGUgPSByb290Tm9kZS0+ZmVhdHVyZXMoKSAmIFN0cmlj
dE1vZGVGZWF0dXJlOwogICAgIEV4ZWN1dGFibGVJbmZvIGV4ZWN1dGFibGVJbmZvKHVzZXNFdmFs
LCBpc1N0cmljdE1vZGUsIGZhbHNlLCBmYWxzZSwgQ29uc3RydWN0b3JLaW5kOjpOb25lLCBzY3Jp
cHRNb2RlLCBTdXBlckJpbmRpbmc6Ok5vdE5lZWRlZCwgQ2FjaGVUeXBlczxVbmxpbmtlZENvZGVC
bG9ja1R5cGU+OjpwYXJzZU1vZGUsIGRlcml2ZWRDb250ZXh0VHlwZSwgaXNBcnJvd0Z1bmN0aW9u
Q29udGV4dCwgZmFsc2UsIGV2YWxDb250ZXh0VHlwZSk7CiAKLSAgICBVbmxpbmtlZENvZGVCbG9j
a1R5cGUqIHVubGlua2VkQ29kZUJsb2NrID0gVW5saW5rZWRDb2RlQmxvY2tUeXBlOjpjcmVhdGUo
JnZtLCBleGVjdXRhYmxlSW5mbywgY29kZUdlbmVyYXRpb25Nb2RlKTsKKyAgICBVbmxpbmtlZENv
ZGVCbG9ja1R5cGUqIHVubGlua2VkQ29kZUJsb2NrID0gVW5saW5rZWRDb2RlQmxvY2tUeXBlOjpj
cmVhdGUodm0sIGV4ZWN1dGFibGVJbmZvLCBjb2RlR2VuZXJhdGlvbk1vZGUpOwogICAgIHVubGlu
a2VkQ29kZUJsb2NrLT5yZWNvcmRQYXJzZShyb290Tm9kZS0+ZmVhdHVyZXMoKSwgcm9vdE5vZGUt
Pmhhc0NhcHR1cmVkVmFyaWFibGVzKCksIGxpbmVDb3VudCwgdW5saW5rZWRFbmRDb2x1bW4pOwog
ICAgIGlmICghc291cmNlLnByb3ZpZGVyKCktPnNvdXJjZVVSTERpcmVjdGl2ZSgpLmlzTnVsbCgp
KQogICAgICAgICB1bmxpbmtlZENvZGVCbG9jay0+c2V0U291cmNlVVJMRGlyZWN0aXZlKHNvdXJj
ZS5wcm92aWRlcigpLT5zb3VyY2VVUkxEaXJlY3RpdmUoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Db21tb25JZGVudGlmaWVycy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uSWRlbnRpZmllcnMuY3BwCShyZXZpc2lv
biAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25JZGVudGlm
aWVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogIENvcHlyaWdo
dCAoQykgMjAwMywgMjAwNywgMjAwOSwgMjAxMiwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTMzLDcgKzMzLDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAjZGVmaW5lIElOSVRJQUxJWkVfUFJJVkFURV9OQU1FKG5hbWUpICwgbmFt
ZSMjUHJpdmF0ZU5hbWUobV9idWlsdGluTmFtZXMtPm5hbWUjI1ByaXZhdGVOYW1lKCkpCiAjZGVm
aW5lIElOSVRJQUxJWkVfU1lNQk9MKG5hbWUpICwgbmFtZSMjU3ltYm9sKG1fYnVpbHRpbk5hbWVz
LT5uYW1lIyNTeW1ib2woKSkKIAotQ29tbW9uSWRlbnRpZmllcnM6OkNvbW1vbklkZW50aWZpZXJz
KFZNKiB2bSkKK0NvbW1vbklkZW50aWZpZXJzOjpDb21tb25JZGVudGlmaWVycyhWTSYgdm0pCiAg
ICAgOiBudWxsSWRlbnRpZmllcigpCiAgICAgLCBlbXB0eUlkZW50aWZpZXIoSWRlbnRpZmllcjo6
RW1wdHlJZGVudGlmaWVyKQogICAgICwgdW5kZXJzY29yZVByb3RvKElkZW50aWZpZXI6OmZyb21T
dHJpbmcodm0sICJfX3Byb3RvX18iKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0NvbW1vbklkZW50aWZpZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ29tbW9uSWRlbnRpZmllcnMuaAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uSWRlbnRpZmllcnMuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDE5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBA
IC0yODIsNyArMjgyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgQ29tbW9uSWRlbnRp
ZmllcnMgewogICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDb21tb25JZGVudGlmaWVycyk7
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogICAgIHByaXZhdGU6Ci0gICAgICAgIENvbW1vbklk
ZW50aWZpZXJzKFZNKik7CisgICAgICAgIENvbW1vbklkZW50aWZpZXJzKFZNJik7CiAgICAgICAg
IH5Db21tb25JZGVudGlmaWVycygpOwogICAgICAgICBmcmllbmQgY2xhc3MgVk07CiAgICAgICAg
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93
UGF0aHMuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Db21tb25TbG93UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Miw3ICs3Miw3IEBA
IG5hbWVzcGFjZSBKU0MgewogCiAjZGVmaW5lIEJFR0lOX05PX1NFVF9QQygpIFwKICAgICBWTSYg
dm0gPSBleGVjLT52bSgpOyAgICAgIFwKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KCZ2bSwgZXhlYyk7IFwKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVj
KTsgXAogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOyBcCiAg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpCiAKQEAgLTE4MCw3ICsxODAsNyBAQCBTTE9XX1BB
VEhfREVDTChzbG93X3BhdGhfY2FsbF9hcml0eUNoZWNrCiAgICAgaWYgKFVOTElLRUxZKHNsb3Rz
VG9BZGQgPCAwKSkgewogICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IENvbW1vblNsb3dQ
YXRoczo6Y29kZUJsb2NrRnJvbUNhbGxGcmFtZUNhbGxlZShleGVjLCBDb2RlRm9yQ2FsbCk7CiAg
ICAgICAgIGV4ZWMtPmNvbnZlcnRUb1N0YWNrT3ZlcmZsb3dGcmFtZSh2bSwgY29kZUJsb2NrKTsK
LSAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgICAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICAgICAgRXJyb3JI
YW5kbGluZ1Njb3BlIGVycm9yU2NvcGUodm0pOwogICAgICAgICB0aHJvd1Njb3BlLnJlbGVhc2Uo
KTsKICAgICAgICAgdGhyb3dBcml0eUNoZWNrU3RhY2tPdmVyZmxvd0Vycm9yKGV4ZWMsIHRocm93
U2NvcGUpOwpAQCAtMTk2LDcgKzE5Niw3IEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9jb25z
dHJ1Y3RfYXJpdHkKICAgICBpZiAoVU5MSUtFTFkoc2xvdHNUb0FkZCA8IDApKSB7CiAgICAgICAg
IENvZGVCbG9jayogY29kZUJsb2NrID0gQ29tbW9uU2xvd1BhdGhzOjpjb2RlQmxvY2tGcm9tQ2Fs
bEZyYW1lQ2FsbGVlKGV4ZWMsIENvZGVGb3JDb25zdHJ1Y3QpOwogICAgICAgICBleGVjLT5jb252
ZXJ0VG9TdGFja092ZXJmbG93RnJhbWUodm0sIGNvZGVCbG9jayk7Ci0gICAgICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICAgICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgICAgIEVycm9ySGFuZGxpbmdTY29wZSBlcnJv
clNjb3BlKHZtKTsKICAgICAgICAgdGhyb3dBcml0eUNoZWNrU3RhY2tPdmVyZmxvd0Vycm9yKGV4
ZWMsIHRocm93U2NvcGUpOwogICAgICAgICBSRVRVUk5fVFdPKGJpdHdpc2VfY2FzdDx2b2lkKj4o
c3RhdGljX2Nhc3Q8dWludHB0cl90PigxKSksIGV4ZWMpOwpAQCAtMTAxMiw3ICsxMDEyLDcgQEAg
U0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3RvX2luZGV4X3N0cmluZwogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBwYy0+YXM8T3BUb0luZGV4U3RyaW5nPigpOwogICAgIEpTVmFsdWUgaW5kZXhWYWx1ZSA9
IEdFVChieXRlY29kZS5tX2luZGV4KS5qc1ZhbHVlKCk7CiAgICAgQVNTRVJUKGluZGV4VmFsdWUu
aXNVSW50MzJBc0FueUludCgpKTsKLSAgICBSRVRVUk4oanNTdHJpbmcoZXhlYywgSWRlbnRpZmll
cjo6ZnJvbShleGVjLCBpbmRleFZhbHVlLmFzVUludDMyQXNBbnlJbnQoKSkuc3RyaW5nKCkpKTsK
KyAgICBSRVRVUk4oanNTdHJpbmcodm0sIElkZW50aWZpZXI6OmZyb20odm0sIGluZGV4VmFsdWUu
YXNVSW50MzJBc0FueUludCgpKS5zdHJpbmcoKSkpOwogfQogCiBTTE9XX1BBVEhfREVDTChzbG93
X3BhdGhfcHJvZmlsZV90eXBlX2NsZWFyX2xvZykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NvbXBsZXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0NvbXBsZXRpb24uY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21wbGV0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDksNyArNDksNyBAQCBuYW1lc3BhY2UgSlNDIHsKIHN0YXRpYyBpbmxpbmUgYm9vbCBjaGVja1N5
bnRheEludGVybmFsKFZNJiB2bSwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBQYXJzZXJFcnJv
ciYgZXJyb3IpCiB7CiAgICAgcmV0dXJuICEhcGFyc2U8UHJvZ3JhbU5vZGU+KAotICAgICAgICAm
dm0sIHNvdXJjZSwgSWRlbnRpZmllcigpLCBKU1BhcnNlckJ1aWx0aW5Nb2RlOjpOb3RCdWlsdGlu
LAorICAgICAgICB2bSwgc291cmNlLCBJZGVudGlmaWVyKCksIEpTUGFyc2VyQnVpbHRpbk1vZGU6
Ok5vdEJ1aWx0aW4sCiAgICAgICAgIEpTUGFyc2VyU3RyaWN0TW9kZTo6Tm90U3RyaWN0LCBKU1Bh
cnNlclNjcmlwdE1vZGU6OkNsYXNzaWMsIFNvdXJjZVBhcnNlTW9kZTo6UHJvZ3JhbU1vZGUsIFN1
cGVyQmluZGluZzo6Tm90TmVlZGVkLCBlcnJvcik7CiB9CiAKQEAgLTgxLDcgKzgxLDcgQEAgYm9v
bCBjaGVja01vZHVsZVN5bnRheChFeGVjU3RhdGUqIGV4ZWMsIAogICAgIEpTTG9ja0hvbGRlciBs
b2NrKHZtKTsKICAgICBSRUxFQVNFX0FTU0VSVCh2bS5hdG9tU3RyaW5nVGFibGUoKSA9PSBUaHJl
YWQ6OmN1cnJlbnQoKS5hdG9tU3RyaW5nVGFibGUoKSk7CiAgICAgc3RkOjp1bmlxdWVfcHRyPE1v
ZHVsZVByb2dyYW1Ob2RlPiBtb2R1bGVQcm9ncmFtTm9kZSA9IHBhcnNlPE1vZHVsZVByb2dyYW1O
b2RlPigKLSAgICAgICAgJnZtLCBzb3VyY2UsIElkZW50aWZpZXIoKSwgSlNQYXJzZXJCdWlsdGlu
TW9kZTo6Tm90QnVpbHRpbiwKKyAgICAgICAgdm0sIHNvdXJjZSwgSWRlbnRpZmllcigpLCBKU1Bh
cnNlckJ1aWx0aW5Nb2RlOjpOb3RCdWlsdGluLAogICAgICAgICBKU1BhcnNlclN0cmljdE1vZGU6
OlN0cmljdCwgSlNQYXJzZXJTY3JpcHRNb2RlOjpNb2R1bGUsIFNvdXJjZVBhcnNlTW9kZTo6TW9k
dWxlQW5hbHl6ZU1vZGUsIFN1cGVyQmluZGluZzo6Tm90TmVlZGVkLCBlcnJvcik7CiAgICAgaWYg
KCFtb2R1bGVQcm9ncmFtTm9kZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjE5LDcgKzIx
OSw3IEBAIEpTSW50ZXJuYWxQcm9taXNlKiBsb2FkQW5kRXZhbHVhdGVNb2R1bGUKICAgICBSRUxF
QVNFX0FTU0VSVCh2bS5hdG9tU3RyaW5nVGFibGUoKSA9PSBUaHJlYWQ6OmN1cnJlbnQoKS5hdG9t
U3RyaW5nVGFibGUoKSk7CiAgICAgUkVMRUFTRV9BU1NFUlQoIXZtLmlzQ29sbGVjdG9yQnVzeU9u
Q3VycmVudFRocmVhZCgpKTsKIAotICAgIHJldHVybiB2bS52bUVudHJ5R2xvYmFsT2JqZWN0KGV4
ZWMpLT5tb2R1bGVMb2FkZXIoKS0+bG9hZEFuZEV2YWx1YXRlTW9kdWxlKGV4ZWMsIGlkZW50aWZp
ZXJUb0pTVmFsdWUodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgbW9kdWxlTmFtZSkp
LCBwYXJhbWV0ZXJzLCBzY3JpcHRGZXRjaGVyKTsKKyAgICByZXR1cm4gdm0udm1FbnRyeUdsb2Jh
bE9iamVjdChleGVjKS0+bW9kdWxlTG9hZGVyKCktPmxvYWRBbmRFdmFsdWF0ZU1vZHVsZShleGVj
LCBpZGVudGlmaWVyVG9KU1ZhbHVlKHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBtb2R1
bGVOYW1lKSksIHBhcmFtZXRlcnMsIHNjcmlwdEZldGNoZXIpOwogfQogCiBKU0ludGVybmFsUHJv
bWlzZSogbG9hZEFuZEV2YWx1YXRlTW9kdWxlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU291cmNl
Q29kZSYgc291cmNlLCBKU1ZhbHVlIHNjcmlwdEZldGNoZXIpCkBAIC0yNDgsNyArMjQ4LDcgQEAg
SlNJbnRlcm5hbFByb21pc2UqIGxvYWRNb2R1bGUoRXhlY1N0YXRlKgogICAgIFJFTEVBU0VfQVNT
RVJUKHZtLmF0b21TdHJpbmdUYWJsZSgpID09IFRocmVhZDo6Y3VycmVudCgpLmF0b21TdHJpbmdU
YWJsZSgpKTsKICAgICBSRUxFQVNFX0FTU0VSVCghdm0uaXNDb2xsZWN0b3JCdXN5T25DdXJyZW50
VGhyZWFkKCkpOwogCi0gICAgcmV0dXJuIHZtLnZtRW50cnlHbG9iYWxPYmplY3QoZXhlYyktPm1v
ZHVsZUxvYWRlcigpLT5sb2FkTW9kdWxlKGV4ZWMsIGlkZW50aWZpZXJUb0pTVmFsdWUodm0sIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgbW9kdWxlTmFtZSkpLCBwYXJhbWV0ZXJzLCBzY3Jp
cHRGZXRjaGVyKTsKKyAgICByZXR1cm4gdm0udm1FbnRyeUdsb2JhbE9iamVjdChleGVjKS0+bW9k
dWxlTG9hZGVyKCktPmxvYWRNb2R1bGUoZXhlYywgaWRlbnRpZmllclRvSlNWYWx1ZSh2bSwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgbW9kdWxlTmFtZSkpLCBwYXJhbWV0ZXJzLCBzY3JpcHRG
ZXRjaGVyKTsKIH0KIAogSlNJbnRlcm5hbFByb21pc2UqIGxvYWRNb2R1bGUoRXhlY1N0YXRlKiBl
eGVjLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIEpTVmFsdWUgc2NyaXB0RmV0Y2hlcikKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVDb25zdHJ1Y3Rvci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZUNvbnN0cnVjdG9y
LmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RGF0ZUNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAg
KiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykK
LSAqICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtMTYwLDcgKzE2MCw3IEBAIHN0YXRpYyBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGwKICAgICBWTSYgdm0gPSBleGVjLT52bSgp
OwogICAgIEdyZWdvcmlhbkRhdGVUaW1lIHRzOwogICAgIG1zVG9HcmVnb3JpYW5EYXRlVGltZSh2
bSwgV2FsbFRpbWU6Om5vdygpLnNlY29uZHNTaW5jZUVwb2NoKCkubWlsbGlzZWNvbmRzKCksIFdU
Rjo6TG9jYWxUaW1lLCB0cyk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc05vbnRyaXZp
YWxTdHJpbmcoJnZtLCBmb3JtYXREYXRlVGltZSh0cywgRGF0ZVRpbWVGb3JtYXREYXRlQW5kVGlt
ZSwgZmFsc2UpKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc05vbnRyaXZpYWxTdHJp
bmcodm0sIGZvcm1hdERhdGVUaW1lKHRzLCBEYXRlVGltZUZvcm1hdERhdGVBbmRUaW1lLCBmYWxz
ZSkpKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUGFyc2UoRXhlY1N0
YXRlKiBleGVjKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZVByb3Rv
dHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0
ZVByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0RhdGVQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBA
QAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBr
ZGUub3JnKQotICogIENvcHlyaWdodCAoQykgMjAwNC0yMDA4LCAyMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IFRvcmNo
IE1vYmlsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogIENvcHlyaWdodCAoQykgMjAx
MCBUb3JjaCBNb2JpbGUgKEJlaWppbmcpIENvLiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgpAQCAtMTQ0LDYgKzE0NCw3IEBAIHN0YXRpYyBDRkRhdGVGb3JtYXR0ZXJTdHlsZSBzdHlsZUZy
b21BcmcKIAogc3RhdGljIEpTQ2VsbCogZm9ybWF0TG9jYWxlRGF0ZShFeGVjU3RhdGUqIGV4ZWMs
IERhdGVJbnN0YW5jZSosIGRvdWJsZSB0aW1lSW5NaWxsaXNlY29uZHMsIExvY2FsZURhdGVUaW1l
Rm9ybWF0IGZvcm1hdCkKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIENGRGF0ZUZv
cm1hdHRlclN0eWxlIGRhdGVTdHlsZSA9IChmb3JtYXQgIT0gTG9jYWxlVGltZSA/IGtDRkRhdGVG
b3JtYXR0ZXJMb25nU3R5bGUgOiBrQ0ZEYXRlRm9ybWF0dGVyTm9TdHlsZSk7CiAgICAgQ0ZEYXRl
Rm9ybWF0dGVyU3R5bGUgdGltZVN0eWxlID0gKGZvcm1hdCAhPSBMb2NhbGVEYXRlID8ga0NGRGF0
ZUZvcm1hdHRlckxvbmdTdHlsZSA6IGtDRkRhdGVGb3JtYXR0ZXJOb1N0eWxlKTsKIApAQCAtMTY3
LDM1ICsxNjgsMzcgQEAgc3RhdGljIEpTQ2VsbCogZm9ybWF0TG9jYWxlRGF0ZShFeGVjU3RhdAog
ICAgIGF1dG8gZm9ybWF0dGVyID0gYWRvcHRDRihDRkRhdGVGb3JtYXR0ZXJDcmVhdGUoa0NGQWxs
b2NhdG9yRGVmYXVsdCwgYWRvcHRDRihDRkxvY2FsZUNvcHlDdXJyZW50KCkpLmdldCgpLCBkYXRl
U3R5bGUsIHRpbWVTdHlsZSkpOwogICAgIGlmICh1c2VDdXN0b21Gb3JtYXQpCiAgICAgICAgIENG
RGF0ZUZvcm1hdHRlclNldEZvcm1hdChmb3JtYXR0ZXIuZ2V0KCksIGN1c3RvbUZvcm1hdFN0cmlu
Zy5jcmVhdGVDRlN0cmluZygpLmdldCgpKTsKLSAgICByZXR1cm4ganNOb250cml2aWFsU3RyaW5n
KGV4ZWMsIGFkb3B0Q0YoQ0ZEYXRlRm9ybWF0dGVyQ3JlYXRlU3RyaW5nV2l0aEFic29sdXRlVGlt
ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBmb3JtYXR0ZXIuZ2V0KCksIGFic29sdXRlVGltZSkpLmdl
dCgpKTsKKyAgICByZXR1cm4ganNOb250cml2aWFsU3RyaW5nKHZtLCBhZG9wdENGKENGRGF0ZUZv
cm1hdHRlckNyZWF0ZVN0cmluZ1dpdGhBYnNvbHV0ZVRpbWUoa0NGQWxsb2NhdG9yRGVmYXVsdCwg
Zm9ybWF0dGVyLmdldCgpLCBhYnNvbHV0ZVRpbWUpKS5nZXQoKSk7CiB9CiAKICNlbGlmICFVQ09O
RklHX05PX0ZPUk1BVFRJTkcKIAogc3RhdGljIEpTQ2VsbCogZm9ybWF0TG9jYWxlRGF0ZShFeGVj
U3RhdGUqIGV4ZWMsIERhdGVJbnN0YW5jZSosIGRvdWJsZSB0aW1lSW5NaWxsaXNlY29uZHMsIExv
Y2FsZURhdGVUaW1lRm9ybWF0IGZvcm1hdCkKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwog
ICAgIFVEYXRlRm9ybWF0U3R5bGUgdGltZVN0eWxlID0gKGZvcm1hdCAhPSBMb2NhbGVEYXRlID8g
VURBVF9MT05HIDogVURBVF9OT05FKTsKICAgICBVRGF0ZUZvcm1hdFN0eWxlIGRhdGVTdHlsZSA9
IChmb3JtYXQgIT0gTG9jYWxlVGltZSA/IFVEQVRfTE9ORyA6IFVEQVRfTk9ORSk7CiAKICAgICBV
RXJyb3JDb2RlIHN0YXR1cyA9IFVfWkVST19FUlJPUjsKICAgICBVRGF0ZUZvcm1hdCogZGYgPSB1
ZGF0X29wZW4odGltZVN0eWxlLCBkYXRlU3R5bGUsIDAsIDAsIC0xLCAwLCAwLCAmc3RhdHVzKTsK
ICAgICBpZiAoIWRmKQotICAgICAgICByZXR1cm4ganNFbXB0eVN0cmluZyhleGVjKTsKKyAgICAg
ICAgcmV0dXJuIGpzRW1wdHlTdHJpbmcodm0pOwogCiAgICAgVUNoYXIgYnVmZmVyWzEyOF07CiAg
ICAgaW50MzJfdCBsZW5ndGg7CiAgICAgbGVuZ3RoID0gdWRhdF9mb3JtYXQoZGYsIHRpbWVJbk1p
bGxpc2Vjb25kcywgYnVmZmVyLCAxMjgsIDAsICZzdGF0dXMpOwogICAgIHVkYXRfY2xvc2UoZGYp
OwogICAgIGlmIChzdGF0dXMgIT0gVV9aRVJPX0VSUk9SKQotICAgICAgICByZXR1cm4ganNFbXB0
eVN0cmluZyhleGVjKTsKKyAgICAgICAgcmV0dXJuIGpzRW1wdHlTdHJpbmcodm0pOwogCi0gICAg
cmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyhleGVjLCBTdHJpbmcoYnVmZmVyLCBsZW5ndGgpKTsK
KyAgICByZXR1cm4ganNOb250cml2aWFsU3RyaW5nKHZtLCBTdHJpbmcoYnVmZmVyLCBsZW5ndGgp
KTsKIH0KIAogI2Vsc2UKIAogc3RhdGljIEpTQ2VsbCogZm9ybWF0TG9jYWxlRGF0ZShFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IEdyZWdvcmlhbkRhdGVUaW1lJiBnZHQsIExvY2FsZURhdGVUaW1lRm9y
bWF0IGZvcm1hdCkKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogI2lmIE9TKFdJTkRPV1Mp
CiAgICAgU1lTVEVNVElNRSBzeXN0ZW1UaW1lOwogICAgIG1lbXNldCgmc3lzdGVtVGltZSwgMCwg
c2l6ZW9mKHN5c3RlbVRpbWUpKTsKQEAgLTIzMCw3ICsyMzMsNyBAQCBzdGF0aWMgSlNDZWxsKiBm
b3JtYXRMb2NhbGVEYXRlKEV4ZWNTdGF0CiAgICAgaWYgKGxlbmd0aCkKICAgICAgICAgbGVuZ3Ro
LS07CiAKLSAgICByZXR1cm4ganNOb250cml2aWFsU3RyaW5nKGV4ZWMsIFN0cmluZyhidWZmZXIu
ZGF0YSgpLCBsZW5ndGgpKTsKKyAgICByZXR1cm4ganNOb250cml2aWFsU3RyaW5nKHZtLCBTdHJp
bmcoYnVmZmVyLmRhdGEoKSwgbGVuZ3RoKSk7CiAKICNlbHNlIC8vIE9TKFdJTkRPV1MpCiAKQEAg
LTI2OSw3ICsyNzIsNyBAQCBzdGF0aWMgSlNDZWxsKiBmb3JtYXRMb2NhbGVEYXRlKEV4ZWNTdGF0
CiAjZW5kaWYKIAogICAgIGlmIChyZXQgPT0gMCkKLSAgICAgICAgcmV0dXJuIGpzRW1wdHlTdHJp
bmcoZXhlYyk7CisgICAgICAgIHJldHVybiBqc0VtcHR5U3RyaW5nKHZtKTsKIAogICAgIC8vIENv
cHkgb3JpZ2luYWwgaW50byB0aGUgYnVmZmVyCiAgICAgaWYgKHllYXJOZWVkc09mZnNldCAmJiBm
b3JtYXQgIT0gTG9jYWxlVGltZSkgewpAQCAtMjk5LDE5ICszMDIsMjAgQEAgc3RhdGljIEpTQ2Vs
bCogZm9ybWF0TG9jYWxlRGF0ZShFeGVjU3RhdAogICAgIGlmIChsZW5ndGggIT0gc3RhdGljX2Nh
c3Q8c2l6ZV90PigtMSkpIHsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7
ICsraSkKICAgICAgICAgICAgIGJ1ZmZlcltpXSA9IHN0YXRpY19jYXN0PFVDaGFyPih0ZW1wYnVm
ZmVyW2ldKTsKLSAgICAgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyhleGVjLCBTdHJpbmco
YnVmZmVyLCBsZW5ndGgpKTsKKyAgICAgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyh2bSwg
U3RyaW5nKGJ1ZmZlciwgbGVuZ3RoKSk7CiAgICAgfQogI2VuZGlmCiAKLSAgICByZXR1cm4ganNO
b250cml2aWFsU3RyaW5nKGV4ZWMsIHRpbWVidWZmZXIpOworICAgIHJldHVybiBqc05vbnRyaXZp
YWxTdHJpbmcodm0sIHRpbWVidWZmZXIpOwogI2VuZGlmIC8vIE9TKFdJTkRPV1MpCiB9CiAKIHN0
YXRpYyBKU0NlbGwqIGZvcm1hdExvY2FsZURhdGUoRXhlY1N0YXRlKiBleGVjLCBEYXRlSW5zdGFu
Y2UqIGRhdGVPYmplY3QsIGRvdWJsZSwgTG9jYWxlRGF0ZVRpbWVGb3JtYXQgZm9ybWF0KQogewor
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgY29uc3QgR3JlZ29yaWFuRGF0ZVRpbWUqIGdy
ZWdvcmlhbkRhdGVUaW1lID0gZGF0ZU9iamVjdC0+Z3JlZ29yaWFuRGF0ZVRpbWUoZXhlYyk7CiAg
ICAgaWYgKCFncmVnb3JpYW5EYXRlVGltZSkKLSAgICAgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0
cmluZyhleGVjLCAiSW52YWxpZCBEYXRlIl9zKTsKKyAgICAgICAgcmV0dXJuIGpzTm9udHJpdmlh
bFN0cmluZyh2bSwgIkludmFsaWQgRGF0ZSJfcyk7CiAgICAgcmV0dXJuIGZvcm1hdExvY2FsZURh
dGUoZXhlYywgKmdyZWdvcmlhbkRhdGVUaW1lLCBmb3JtYXQpOwogfQogCkBAIC0zMzAsOSArMzM0
LDkgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIGZvcm1hdGVEYXRlSW5zdGFuYwogICAgICAgICA/
IHRoaXNEYXRlT2JqLT5ncmVnb3JpYW5EYXRlVGltZVVUQyhleGVjKQogICAgICAgICA6IHRoaXNE
YXRlT2JqLT5ncmVnb3JpYW5EYXRlVGltZShleGVjKTsKICAgICBpZiAoIWdyZWdvcmlhbkRhdGVU
aW1lKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTm9udHJpdmlhbFN0cmluZyhl
eGVjLCBTdHJpbmcoIkludmFsaWQgRGF0ZSJfcykpKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc05vbnRyaXZpYWxTdHJpbmcodm0sIFN0cmluZygiSW52YWxpZCBEYXRlIl9zKSkp
OwogCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywg
Zm9ybWF0RGF0ZVRpbWUoKmdyZWdvcmlhbkRhdGVUaW1lLCBmb3JtYXQsIGFzVVRDVmFyaWFudCkp
KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTm9udHJpdmlhbFN0cmluZyh2bSwgZm9y
bWF0RGF0ZVRpbWUoKmdyZWdvcmlhbkRhdGVUaW1lLCBmb3JtYXQsIGFzVVRDVmFyaWFudCkpKTsK
IH0KIAogLy8gQ29udmVydHMgYSBsaXN0IG9mIGFyZ3VtZW50cyBzZW50IHRvIGEgRGF0ZSBtZW1i
ZXIgZnVuY3Rpb24gaW50byBtaWxsaXNlY29uZHMsIHVwZGF0aW5nCkBAIC01MDIsMTAgKzUwNiwx
MCBAQCB2b2lkIERhdGVQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2CiAgICAgQmFzZTo6
ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7CiAK
LSAgICBJZGVudGlmaWVyIHRvVVRDU3RyaW5nTmFtZSA9IElkZW50aWZpZXI6OmZyb21TdHJpbmco
JnZtLCAidG9VVENTdHJpbmciX3MpOworICAgIElkZW50aWZpZXIgdG9VVENTdHJpbmdOYW1lID0g
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInRvVVRDU3RyaW5nIl9zKTsKICAgICBKU0Z1bmN0
aW9uKiB0b1VUQ1N0cmluZ0Z1bmN0aW9uID0gSlNGdW5jdGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxP
YmplY3QsIDAsIHRvVVRDU3RyaW5nTmFtZS5zdHJpbmcoKSwgZGF0ZVByb3RvRnVuY1RvVVRDU3Ry
aW5nKTsKICAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdG9VVENTdHJpbmdOYW1l
LCB0b1VUQ1N0cmluZ0Z1bmN0aW9uLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRy
aWJ1dGU6OkRvbnRFbnVtKSk7Ci0gICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAidG9HTVRTdHJpbmciX3MpLCB0b1VUQ1N0cmluZ0Z1
bmN0aW9uLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVt
KSk7CisgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIElkZW50aWZpZXI6OmZyb21T
dHJpbmcodm0sICJ0b0dNVFN0cmluZyJfcyksIHRvVVRDU3RyaW5nRnVuY3Rpb24sIHN0YXRpY19j
YXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKIAogI2lmIEVOQUJM
RShJTlRMKQogICAgIEpTQ19CVUlMVElOX0ZVTkNUSU9OX1dJVEhPVVRfVFJBTlNJVElPTigidG9M
b2NhbGVTdHJpbmciLCBkYXRlUHJvdG90eXBlVG9Mb2NhbGVTdHJpbmdDb2RlR2VuZXJhdG9yLCBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7CkBAIC01
NDcsNyArNTUxLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdQog
CiAgICAgY29uc3QgR3JlZ29yaWFuRGF0ZVRpbWUqIGdyZWdvcmlhbkRhdGVUaW1lID0gdGhpc0Rh
dGVPYmotPmdyZWdvcmlhbkRhdGVUaW1lVVRDKGV4ZWMpOwogICAgIGlmICghZ3JlZ29yaWFuRGF0
ZVRpbWUpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOb250cml2aWFsU3RyaW5n
KGV4ZWMsIFN0cmluZygiSW52YWxpZCBEYXRlIl9zKSkpOworICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzTm9udHJpdmlhbFN0cmluZyh2bSwgU3RyaW5nKCJJbnZhbGlkIERhdGUiX3Mp
KSk7CiAgICAgLy8gTWF4aW11bSBhbW91bnQgb2Ygc3BhY2Ugd2UgbmVlZCBpbiBidWZmZXI6IDcg
KG1heC4gZGlnaXRzIGluIHllYXIpICsgMiAqIDUgKDIgY2hhcmFjdGVycyBlYWNoIGZvciBtb250
aCwgZGF5LCBob3VyLCBtaW51dGUsIHNlY29uZCkgKyA0ICguICsgMyBkaWdpdHMgZm9yIG1pbGxp
c2Vjb25kcykKICAgICAvLyA2IGZvciBmb3JtYXR0aW5nIGFuZCBvbmUgZm9yIG51bGwgdGVybWlu
YXRpb24gPSAyOC4gV2UgYWRkIG9uZSBleHRyYSBjaGFyYWN0ZXIgdG8gYWxsb3cgdXMgdG8gZm9y
Y2UgbnVsbCB0ZXJtaW5hdGlvbi4KICAgICBjaGFyIGJ1ZmZlclsyOF07CkBAIC01NjQsOSArNTY4
LDkgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdQogCiAgICAgQVNT
RVJUKGNoYXJhY3RlcnNXcml0dGVuID4gMCAmJiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY2hhcmFj
dGVyc1dyaXR0ZW4pIDwgc2l6ZW9mKGJ1ZmZlcikpOwogICAgIGlmIChzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oY2hhcmFjdGVyc1dyaXR0ZW4pID49IHNpemVvZihidWZmZXIpKQotICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzRW1wdHlTdHJpbmcoZXhlYykpOworICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzRW1wdHlTdHJpbmcodm0pKTsKIAotICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNOb250cml2aWFsU3RyaW5nKGV4ZWMsIFN0cmluZyhidWZmZXIsIGNoYXJhY3Rl
cnNXcml0dGVuKSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOb250cml2aWFsU3Ry
aW5nKHZtLCBTdHJpbmcoYnVmZmVyLCBjaGFyYWN0ZXJzV3JpdHRlbikpKTsKIH0KIAogRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jVG9EYXRlU3RyaW5nKEV4ZWNTdGF0
ZSogZXhlYykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvci5jcHAJKHJl
dmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjI2LDkgKzIyNiw5IEBAIGJvb2wgYWRkRXJyb3JJbmZvKFZN
JiB2bSwgVmVjdG9yPFN0YWNrRnIKICAgICAgICAgb2JqLT5wdXREaXJlY3Qodm0sIHZtLnByb3Bl
cnR5TmFtZXMtPmxpbmUsIGpzTnVtYmVyKGxpbmUpKTsKICAgICAgICAgb2JqLT5wdXREaXJlY3Qo
dm0sIHZtLnByb3BlcnR5TmFtZXMtPmNvbHVtbiwganNOdW1iZXIoY29sdW1uKSk7CiAgICAgICAg
IGlmICghc291cmNlVVJMLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIG9iai0+cHV0RGlyZWN0KHZt
LCB2bS5wcm9wZXJ0eU5hbWVzLT5zb3VyY2VVUkwsIGpzU3RyaW5nKCZ2bSwgc291cmNlVVJMKSk7
CisgICAgICAgICAgICBvYmotPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+c291cmNl
VVJMLCBqc1N0cmluZyh2bSwgc291cmNlVVJMKSk7CiAKLSAgICAgICAgb2JqLT5wdXREaXJlY3Qo
dm0sIHZtLnByb3BlcnR5TmFtZXMtPnN0YWNrLCBqc1N0cmluZygmdm0sIEludGVycHJldGVyOjpz
dGFja1RyYWNlQXNTdHJpbmcodm0sICpzdGFja1RyYWNlKSksIHN0YXRpY19jYXN0PHVuc2lnbmVk
PihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKKyAgICAgICAgb2JqLT5wdXREaXJlY3Qo
dm0sIHZtLnByb3BlcnR5TmFtZXMtPnN0YWNrLCBqc1N0cmluZyh2bSwgSW50ZXJwcmV0ZXI6OnN0
YWNrVHJhY2VBc1N0cmluZyh2bSwgKnN0YWNrVHJhY2UpKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOwogCiAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KQEAgLTI2NSw3ICsyNjUsNyBAQCBKU09iamVjdCogYWRkRXJyb3JJbmZvKENhbGxGcmFt
ZSogY2FsbEZyCiAgICAgaWYgKGxpbmUgIT0gLTEpCiAgICAgICAgIGVycm9yLT5wdXREaXJlY3Qo
dm0sIHZtLnByb3BlcnR5TmFtZXMtPmxpbmUsIGpzTnVtYmVyKGxpbmUpKTsKICAgICBpZiAoIXNv
dXJjZVVSTC5pc051bGwoKSkKLSAgICAgICAgZXJyb3ItPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVy
dHlOYW1lcy0+c291cmNlVVJMLCBqc1N0cmluZygmdm0sIHNvdXJjZVVSTCkpOworICAgICAgICBl
cnJvci0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5zb3VyY2VVUkwsIGpzU3RyaW5n
KHZtLCBzb3VyY2VVUkwpKTsKICAgICByZXR1cm4gZXJyb3I7CiB9CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9ySW5zdGFuY2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9ySW5zdGFuY2UuY3BwCShyZXZpc2lvbiAy
NDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvckluc3RhbmNlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAx
OTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmlnaHQgKEMp
IDIwMDMtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0
IChDKSAyMDAzLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYwpAQCAtODAsOCArODAsOCBAQCBzdGF0aWMgdm9pZCBhcHBlbmRTb3VyY2VUb0Vy
cm9yKENhbGxGcmFtCiAgICAgaWYgKCFleHByZXNzaW9uU3RvcCB8fCBleHByZXNzaW9uU3RhcnQg
PiBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZVN0cmluZy5sZW5ndGgoKSkpCiAgICAgICAgIHJldHVy
bjsKICAgICAKLSAgICBWTSogdm0gPSAmY2FsbEZyYW1lLT52bSgpOwotICAgIEpTVmFsdWUganNN
ZXNzYWdlID0gZXhjZXB0aW9uLT5nZXREaXJlY3QoKnZtLCB2bS0+cHJvcGVydHlOYW1lcy0+bWVz
c2FnZSk7CisgICAgVk0mIHZtID0gY2FsbEZyYW1lLT52bSgpOworICAgIEpTVmFsdWUganNNZXNz
YWdlID0gZXhjZXB0aW9uLT5nZXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm1lc3NhZ2Up
OwogICAgIGlmICghanNNZXNzYWdlIHx8ICFqc01lc3NhZ2UuaXNTdHJpbmcoKSkKICAgICAgICAg
cmV0dXJuOwogICAgIApAQCAtMTA1LDcgKzEwNSw3IEBAIHN0YXRpYyB2b2lkIGFwcGVuZFNvdXJj
ZVRvRXJyb3IoQ2FsbEZyYW0KICAgICAgICAgICAgIHN0b3AtLTsKICAgICAgICAgbWVzc2FnZSA9
IGFwcGVuZGVyKG1lc3NhZ2UsIGNvZGVCbG9jay0+c291cmNlKCkucHJvdmlkZXIoKS0+Z2V0UmFu
Z2Uoc3RhcnQsIHN0b3ApLnRvU3RyaW5nKCksIHR5cGUsIEVycm9ySW5zdGFuY2U6OkZvdW5kQXBw
cm94aW1hdGVTb3VyY2UpOwogICAgIH0KLSAgICBleGNlcHRpb24tPnB1dERpcmVjdCgqdm0sIHZt
LT5wcm9wZXJ0eU5hbWVzLT5tZXNzYWdlLCBqc1N0cmluZyh2bSwgbWVzc2FnZSkpOworICAgIGV4
Y2VwdGlvbi0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5tZXNzYWdlLCBqc1N0cmlu
Zyh2bSwgbWVzc2FnZSkpOwogCiB9CiAKQEAgLTExNCw3ICsxMTQsNyBAQCB2b2lkIEVycm9ySW5z
dGFuY2U6OmZpbmlzaENyZWF0aW9uKEV4ZWNTCiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0p
OwogICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7CiAgICAgaWYgKCFtZXNzYWdlLmlz
TnVsbCgpKQotICAgICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm1lc3NhZ2Us
IGpzU3RyaW5nKCZ2bSwgbWVzc2FnZSksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0
dHJpYnV0ZTo6RG9udEVudW0pKTsKKyAgICAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5h
bWVzLT5tZXNzYWdlLCBqc1N0cmluZyh2bSwgbWVzc2FnZSksIHN0YXRpY19jYXN0PHVuc2lnbmVk
PihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxW
ZWN0b3I8U3RhY2tGcmFtZT4+IHN0YWNrVHJhY2UgPSBnZXRTdGFja1RyYWNlKGV4ZWMsIHZtLCB0
aGlzLCB1c2VDdXJyZW50RnJhbWUpOwogICAgIHsKQEAgLTI0MSw5ICsyNDEsOSBAQCBib29sIEVy
cm9ySW5zdGFuY2U6Om1hdGVyaWFsaXplRXJyb3JJbmZvCiAgICAgICAgIHB1dERpcmVjdCh2bSwg
dm0ucHJvcGVydHlOYW1lcy0+bGluZSwganNOdW1iZXIobV9saW5lKSk7CiAgICAgICAgIHB1dERp
cmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+Y29sdW1uLCBqc051bWJlcihtX2NvbHVtbikpOwog
ICAgICAgICBpZiAoIW1fc291cmNlVVJMLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHB1dERpcmVj
dCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+c291cmNlVVJMLCBqc1N0cmluZygmdm0sIFdURk1vdmUo
bV9zb3VyY2VVUkwpKSk7CisgICAgICAgICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFt
ZXMtPnNvdXJjZVVSTCwganNTdHJpbmcodm0sIFdURk1vdmUobV9zb3VyY2VVUkwpKSk7CiAKLSAg
ICAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5zdGFjaywganNTdHJpbmcoJnZt
LCBXVEZNb3ZlKG1fc3RhY2tTdHJpbmcpKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5
QXR0cmlidXRlOjpEb250RW51bSkpOworICAgICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5
TmFtZXMtPnN0YWNrLCBqc1N0cmluZyh2bSwgV1RGTW92ZShtX3N0YWNrU3RyaW5nKSksIHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKICAgICB9CiAK
ICAgICBtX2Vycm9ySW5mb01hdGVyaWFsaXplZCA9IHRydWU7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9FcnJvclByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyNDkx
MjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvclByb3RvdHlwZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5
OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChDKSAy
MDAzLCAyMDA4LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5
cmlnaHQgKEMpIDIwMDMtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljCkBAIC02NCw4ICs2NCw4IEBAIHZvaWQgRXJyb3JQcm90b3R5cGU6OmZp
bmlzaENyZWF0aW9uKFZNJiAKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAg
QVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKLSAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNp
dGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNTdHJpbmcoJnZtLCBuYW1lKSwgc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOwotICAgIHB1
dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5tZXNzYWdlLCBq
c0VtcHR5U3RyaW5nKCZ2bSksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0
ZTo6RG9udEVudW0pKTsKKyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJv
cGVydHlOYW1lcy0+bmFtZSwganNTdHJpbmcodm0sIG5hbWUpLCBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7CisgICAgcHV0RGlyZWN0V2l0aG91dFRy
YW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPm1lc3NhZ2UsIGpzRW1wdHlTdHJpbmcodm0p
LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7CiB9
CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGdW5jdGlvbnMgLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xMjAsMTEgKzEyMCwxMSBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGVycm9yUHJvdG9GCiAKICAgICAvLyA4LiBJZiBuYW1lIGlzIHRoZSBlbXB0
eSBTdHJpbmcsIHJldHVybiBtc2cuCiAgICAgaWYgKCFuYW1lU3RyaW5nLmxlbmd0aCgpKQotICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKG1lc3NhZ2UuaXNTdHJpbmcoKSA/IG1lc3NhZ2Ug
OiBqc1N0cmluZyhleGVjLCBtZXNzYWdlU3RyaW5nKSk7CisgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUobWVzc2FnZS5pc1N0cmluZygpID8gbWVzc2FnZSA6IGpzU3RyaW5nKHZtLCBtZXNz
YWdlU3RyaW5nKSk7CiAKICAgICAvLyA5LiBJZiBtc2cgaXMgdGhlIGVtcHR5IFN0cmluZywgcmV0
dXJuIG5hbWUuCiAgICAgaWYgKCFtZXNzYWdlU3RyaW5nLmxlbmd0aCgpKQotICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKG5hbWUuaXNTdHJpbmcoKSA/IG5hbWUgOiBqc1N0cmluZyhleGVj
LCBuYW1lU3RyaW5nKSk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUobmFtZS5pc1N0
cmluZygpID8gbmFtZSA6IGpzU3RyaW5nKHZtLCBuYW1lU3RyaW5nKSk7CiAKICAgICAvLyAxMC4g
UmV0dXJuIHRoZSByZXN1bHQgb2YgY29uY2F0ZW5hdGluZyBuYW1lLCAiOiIsIGEgc2luZ2xlIHNw
YWNlIGNoYXJhY3RlciwgYW5kIG1zZy4KICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpT
VmFsdWU6OmVuY29kZShqc01ha2VOb250cml2aWFsU3RyaW5nKGV4ZWMsIG5hbWVTdHJpbmcsICI6
ICIsIG1lc3NhZ2VTdHJpbmcpKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9FeGNlcHRpb25IZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTUwLDcgKzUwLDcgQEAgY29uc3QgQ2xhc3NJbmZvIFRlcm1pbmF0ZWRFeGVjdXRp
b25FcnJvcgogSlNWYWx1ZSBUZXJtaW5hdGVkRXhlY3V0aW9uRXJyb3I6OmRlZmF1bHRWYWx1ZShj
b25zdCBKU09iamVjdCosIEV4ZWNTdGF0ZSogZXhlYywgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSBo
aW50KQogewogICAgIGlmIChoaW50ID09IFByZWZlclN0cmluZykKLSAgICAgICAgcmV0dXJuIGpz
Tm9udHJpdmlhbFN0cmluZyhleGVjLCBTdHJpbmcoIkphdmFTY3JpcHQgZXhlY3V0aW9uIHRlcm1p
bmF0ZWQuIl9zKSk7CisgICAgICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcoZXhlYy0+dm0o
KSwgU3RyaW5nKCJKYXZhU2NyaXB0IGV4ZWN1dGlvbiB0ZXJtaW5hdGVkLiJfcykpOwogICAgIHJl
dHVybiBKU1ZhbHVlKFBOYU4pOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9GdW5jdGlvblByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvblByb3RvdHlwZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0y
MDAxIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAz
LTIwMDksIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29w
eXJpZ2h0IChDKSAyMDAzLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYwpAQCAtODksNyArODksNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGZ1bmN0aW9uUHJvCiAKICAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRh
YmxlID0gZnVuY3Rpb24tPmpzRXhlY3V0YWJsZSgpOwogICAgICAgICBpZiAoZXhlY3V0YWJsZS0+
aXNDbGFzcygpKQotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyhl
eGVjLCBleGVjdXRhYmxlLT5jbGFzc1NvdXJjZSgpLnZpZXcoKS50b1N0cmluZygpKSk7CisgICAg
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKHZtLCBleGVjdXRhYmxlLT5j
bGFzc1NvdXJjZSgpLnZpZXcoKS50b1N0cmluZygpKSk7CiAKICAgICAgICAgU3RyaW5nIGZ1bmN0
aW9uSGVhZGVyOwogICAgICAgICBzd2l0Y2ggKGV4ZWN1dGFibGUtPnBhcnNlTW9kZSgpKSB7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvblJhcmVEYXRhLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvblJhcmVE
YXRhLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRnVuY3Rpb25SYXJlRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04OCw3ICs4OCw3IEBA
IHZvaWQgRnVuY3Rpb25SYXJlRGF0YTo6Y2xlYXIoY29uc3QgY2hhcioKIHsKICAgICBtX29iamVj
dEFsbG9jYXRpb25Qcm9maWxlLmNsZWFyKCk7CiAgICAgbV9pbnRlcm5hbEZ1bmN0aW9uQWxsb2Nh
dGlvblByb2ZpbGUuY2xlYXIoKTsKLSAgICBtX29iamVjdEFsbG9jYXRpb25Qcm9maWxlV2F0Y2hw
b2ludC5maXJlQWxsKCp2bSgpLCByZWFzb24pOworICAgIG1fb2JqZWN0QWxsb2NhdGlvblByb2Zp
bGVXYXRjaHBvaW50LmZpcmVBbGwodm0oKSwgcmVhc29uKTsKIH0KIAogdm9pZCBGdW5jdGlvblJh
cmVEYXRhOjpBbGxvY2F0aW9uUHJvZmlsZUNsZWFyaW5nV2F0Y2hwb2ludDo6ZmlyZUludGVybmFs
KFZNJiwgY29uc3QgRmlyZURldGFpbCYpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9HZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUuY3BwCShy
ZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmF0
b3JGdW5jdGlvblByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAv
KgogICogQ29weXJpZ2h0IChDKSAyMDE1IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4uCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01MSw3ICs1Miw3IEBAIHZv
aWQgR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGU6OmZpbmlzaEMKICAgICBCYXNlOjpmaW5pc2hD
cmVhdGlvbih2bSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKICAgICBwdXRE
aXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051
bWJlcigwKSwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgUHJvcGVydHlBdHRyaWJ1dGU6
OkRvbnRFbnVtKTsKLSAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVy
dHlOYW1lcy0+dG9TdHJpbmdUYWdTeW1ib2wsIGpzU3RyaW5nKCZ2bSwgIkdlbmVyYXRvckZ1bmN0
aW9uIiksIFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8IFByb3BlcnR5QXR0cmlidXRlOjpS
ZWFkT25seSk7CisgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5
TmFtZXMtPnRvU3RyaW5nVGFnU3ltYm9sLCBqc1N0cmluZyh2bSwgIkdlbmVyYXRvckZ1bmN0aW9u
IiksIFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8IFByb3BlcnR5QXR0cmlidXRlOjpSZWFk
T25seSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvR2VuZXJhdG9yUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmF0b3JQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAy
NDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmF0b3JQcm90b3R5
cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAo
QykgMjAxNSBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+LgorICogQ29weXJp
Z2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDgsNyArNDksNyBAQCB2b2lkIEdlbmVyYXRvclByb3Rv
dHlwZTo6ZmluaXNoQ3JlYXRpb24oCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwog
ICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7Ci0gICAgcHV0RGlyZWN0V2l0aG91dFRy
YW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPnRvU3RyaW5nVGFnU3ltYm9sLCBqc1N0cmlu
Zygmdm0sICJHZW5lcmF0b3IiKSwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtIHwgUHJvcGVy
dHlBdHRyaWJ1dGU6OlJlYWRPbmx5KTsKKyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2
bSwgdm0ucHJvcGVydHlOYW1lcy0+dG9TdHJpbmdUYWdTeW1ib2wsIGpzU3RyaW5nKHZtLCAiR2Vu
ZXJhdG9yIiksIFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8IFByb3BlcnR5QXR0cmlidXRl
OjpSZWFkT25seSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5o
CShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5l
cmljQXJndW1lbnRzSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtOTIsMTggKzkyLDE4IEBA
IGJvb2wgR2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6Z2V0T3duUHJvcGUKIHRlbXBsYXRlPHR5cGVu
YW1lIFR5cGU+CiB2b2lkIEdlbmVyaWNBcmd1bWVudHM8VHlwZT46OmdldE93blByb3BlcnR5TmFt
ZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYg
YXJyYXksIEVudW1lcmF0aW9uTW9kZSBtb2RlKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CiAgICAgVHlwZSogdGhpc09iamVjdCA9IGpzQ2FzdDxUeXBlKj4ob2JqZWN0KTsKIAogICAgIGlm
IChhcnJheS5pbmNsdWRlU3RyaW5nUHJvcGVydGllcygpKSB7CiAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCB0aGlzT2JqZWN0LT5pbnRlcm5hbExlbmd0aCgpOyArK2kpIHsKICAgICAg
ICAgICAgIGlmICghdGhpc09iamVjdC0+aXNNYXBwZWRBcmd1bWVudChpKSkKICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGFycmF5LmFkZChJZGVudGlmaWVyOjpmcm9tKGV4
ZWMsIGkpKTsKKyAgICAgICAgICAgIGFycmF5LmFkZChJZGVudGlmaWVyOjpmcm9tKHZtLCBpKSk7
CiAgICAgICAgIH0KICAgICB9CiAKICAgICBpZiAobW9kZS5pbmNsdWRlRG9udEVudW1Qcm9wZXJ0
aWVzKCkgJiYgIXRoaXNPYmplY3QtPm92ZXJyb2RlVGhpbmdzKCkpIHsKLSAgICAgICAgVk0mIHZt
ID0gZXhlYy0+dm0oKTsKICAgICAgICAgYXJyYXkuYWRkKHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0
aCk7CiAgICAgICAgIGFycmF5LmFkZCh2bS5wcm9wZXJ0eU5hbWVzLT5jYWxsZWUpOwogICAgICAg
ICBpZiAoYXJyYXkuaW5jbHVkZVN5bWJvbFByb3BlcnRpZXMoKSkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0dldHRlclNldHRlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0dldHRlclNldHRlci5oCShyZXZpc2lvbiAyNDkxMjgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZXR0ZXJTZXR0ZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEgSGFy
cmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIg
S2VsbHkgKHBta0Bwb3N0LmNvbSkKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUs
IDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC04Nyw4ICs4Nyw4IEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKLSAgICBib29sIGlzR2V0dGVyTnVsbCgp
IGNvbnN0IHsgcmV0dXJuICEhanNEeW5hbWljQ2FzdDxOdWxsR2V0dGVyRnVuY3Rpb24qPigqbV9n
ZXR0ZXIuZ2V0KCktPnZtKCksIG1fZ2V0dGVyLmdldCgpKTsgfQotICAgIGJvb2wgaXNTZXR0ZXJO
dWxsKCkgY29uc3QgeyByZXR1cm4gISFqc0R5bmFtaWNDYXN0PE51bGxTZXR0ZXJGdW5jdGlvbio+
KCptX3NldHRlci5nZXQoKS0+dm0oKSwgbV9zZXR0ZXIuZ2V0KCkpOyB9CisgICAgYm9vbCBpc0dl
dHRlck51bGwoKSBjb25zdCB7IHJldHVybiAhIWpzRHluYW1pY0Nhc3Q8TnVsbEdldHRlckZ1bmN0
aW9uKj4obV9nZXR0ZXIuZ2V0KCktPnZtKCksIG1fZ2V0dGVyLmdldCgpKTsgfQorICAgIGJvb2wg
aXNTZXR0ZXJOdWxsKCkgY29uc3QgeyByZXR1cm4gISFqc0R5bmFtaWNDYXN0PE51bGxTZXR0ZXJG
dW5jdGlvbio+KG1fc2V0dGVyLmdldCgpLT52bSgpLCBtX3NldHRlci5nZXQoKSk7IH0KIAogICAg
IEpTT2JqZWN0KiBzZXR0ZXIoKSBjb25zdCB7IHJldHVybiBtX3NldHRlci5nZXQoKTsgfQogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JZGVudGlmaWVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JZGVudGlmaWVyLmNwcAkocmV2
aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSWRlbnRpZmll
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogIENvcHlyaWdodCAo
QykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAxMiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTM1LDI4ICsz
NSwyMyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotUmVmPFN0cmluZ0ltcGw+IElkZW50aWZpZXI6
OmFkZChWTSogdm0sIGNvbnN0IGNoYXIqIGMpCitSZWY8U3RyaW5nSW1wbD4gSWRlbnRpZmllcjo6
YWRkKFZNJiB2bSwgY29uc3QgY2hhciogYykKIHsKICAgICBBU1NFUlQoYyk7CiAgICAgQVNTRVJU
KGNbMF0pOwogICAgIGlmICghY1sxXSkKLSAgICAgICAgcmV0dXJuIHZtLT5zbWFsbFN0cmluZ3Mu
c2luZ2xlQ2hhcmFjdGVyU3RyaW5nUmVwKGNbMF0pOworICAgICAgICByZXR1cm4gdm0uc21hbGxT
dHJpbmdzLnNpbmdsZUNoYXJhY3RlclN0cmluZ1JlcChjWzBdKTsKIAogICAgIHJldHVybiAqQXRv
bVN0cmluZ0ltcGw6OmFkZChjKTsKIH0KIAotUmVmPFN0cmluZ0ltcGw+IElkZW50aWZpZXI6OmFk
ZChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IGNoYXIqIGMpCi17Ci0gICAgcmV0dXJuIGFkZCgmZXhl
Yy0+dm0oKSwgYyk7Ci19Ci0KLVJlZjxTdHJpbmdJbXBsPiBJZGVudGlmaWVyOjphZGQ4KFZNKiB2
bSwgY29uc3QgVUNoYXIqIHMsIGludCBsZW5ndGgpCitSZWY8U3RyaW5nSW1wbD4gSWRlbnRpZmll
cjo6YWRkOChWTSYgdm0sIGNvbnN0IFVDaGFyKiBzLCBpbnQgbGVuZ3RoKQogewogICAgIGlmIChs
ZW5ndGggPT0gMSkgewogICAgICAgICBVQ2hhciBjID0gc1swXTsKICAgICAgICAgQVNTRVJUKGlz
TGF0aW4xKGMpKTsKICAgICAgICAgaWYgKGNhblVzZVNpbmdsZUNoYXJhY3RlclN0cmluZyhjKSkK
LSAgICAgICAgICAgIHJldHVybiB2bS0+c21hbGxTdHJpbmdzLnNpbmdsZUNoYXJhY3RlclN0cmlu
Z1JlcChjKTsKKyAgICAgICAgICAgIHJldHVybiB2bS5zbWFsbFN0cmluZ3Muc2luZ2xlQ2hhcmFj
dGVyU3RyaW5nUmVwKGMpOwogICAgIH0KICAgICBpZiAoIWxlbmd0aCkKICAgICAgICAgcmV0dXJu
ICpTdHJpbmdJbXBsOjplbXB0eSgpOwpAQCAtNjQsMzQgKzU5LDE5IEBAIFJlZjxTdHJpbmdJbXBs
PiBJZGVudGlmaWVyOjphZGQ4KFZNKiB2bSwKICAgICByZXR1cm4gKkF0b21TdHJpbmdJbXBsOjph
ZGQocywgbGVuZ3RoKTsKIH0KIAotSWRlbnRpZmllciBJZGVudGlmaWVyOjpmcm9tKEV4ZWNTdGF0
ZSogZXhlYywgdW5zaWduZWQgdmFsdWUpCi17Ci0gICAgcmV0dXJuIElkZW50aWZpZXIoZXhlYywg
ZXhlYy0+dm0oKS5udW1lcmljU3RyaW5ncy5hZGQodmFsdWUpKTsKLX0KLQotSWRlbnRpZmllciBJ
ZGVudGlmaWVyOjpmcm9tKEV4ZWNTdGF0ZSogZXhlYywgaW50IHZhbHVlKQorSWRlbnRpZmllciBJ
ZGVudGlmaWVyOjpmcm9tKFZNJiB2bSwgdW5zaWduZWQgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIElk
ZW50aWZpZXIoZXhlYywgZXhlYy0+dm0oKS5udW1lcmljU3RyaW5ncy5hZGQodmFsdWUpKTsKKyAg
ICByZXR1cm4gSWRlbnRpZmllcih2bSwgdm0ubnVtZXJpY1N0cmluZ3MuYWRkKHZhbHVlKSk7CiB9
CiAKLUlkZW50aWZpZXIgSWRlbnRpZmllcjo6ZnJvbShFeGVjU3RhdGUqIGV4ZWMsIGRvdWJsZSB2
YWx1ZSkKK0lkZW50aWZpZXIgSWRlbnRpZmllcjo6ZnJvbShWTSYgdm0sIGludCB2YWx1ZSkKIHsK
LSAgICByZXR1cm4gSWRlbnRpZmllcihleGVjLCBleGVjLT52bSgpLm51bWVyaWNTdHJpbmdzLmFk
ZCh2YWx1ZSkpOworICAgIHJldHVybiBJZGVudGlmaWVyKHZtLCB2bS5udW1lcmljU3RyaW5ncy5h
ZGQodmFsdWUpKTsKIH0KIAotSWRlbnRpZmllciBJZGVudGlmaWVyOjpmcm9tKFZNKiB2bSwgdW5z
aWduZWQgdmFsdWUpCitJZGVudGlmaWVyIElkZW50aWZpZXI6OmZyb20oVk0mIHZtLCBkb3VibGUg
dmFsdWUpCiB7Ci0gICAgcmV0dXJuIElkZW50aWZpZXIodm0sIHZtLT5udW1lcmljU3RyaW5ncy5h
ZGQodmFsdWUpKTsKLX0KLQotSWRlbnRpZmllciBJZGVudGlmaWVyOjpmcm9tKFZNKiB2bSwgaW50
IHZhbHVlKQotewotICAgIHJldHVybiBJZGVudGlmaWVyKHZtLCB2bS0+bnVtZXJpY1N0cmluZ3Mu
YWRkKHZhbHVlKSk7Ci19Ci0KLUlkZW50aWZpZXIgSWRlbnRpZmllcjo6ZnJvbShWTSogdm0sIGRv
dWJsZSB2YWx1ZSkKLXsKLSAgICByZXR1cm4gSWRlbnRpZmllcih2bSwgdm0tPm51bWVyaWNTdHJp
bmdzLmFkZCh2YWx1ZSkpOworICAgIHJldHVybiBJZGVudGlmaWVyKHZtLCB2bS5udW1lcmljU3Ry
aW5ncy5hZGQodmFsdWUpKTsKIH0KIAogdm9pZCBJZGVudGlmaWVyOjpkdW1wKFByaW50U3RyZWFt
JiBvdXQpIGNvbnN0CkBAIC0xMDksMjQgKzg5LDE4IEBAIHZvaWQgSWRlbnRpZmllcjo6ZHVtcChQ
cmludFN0cmVhbSYgb3V0KSAKIAogI2lmbmRlZiBOREVCVUcKIAotdm9pZCBJZGVudGlmaWVyOjpj
aGVja0N1cnJlbnRBdG9tU3RyaW5nVGFibGUoVk0qIHZtKQordm9pZCBJZGVudGlmaWVyOjpjaGVj
a0N1cnJlbnRBdG9tU3RyaW5nVGFibGUoVk0mIHZtKQogewogICAgIC8vIENoZWNrIHRoZSBpZGVu
dGlmaWVyIHRhYmxlIGFjY2Vzc2libGUgdGhyb3VnaCB0aGUgdGhyZWFkc3BlY2lmaWMgbWF0Y2hl
cyB0aGUKICAgICAvLyB2bSdzIGlkZW50aWZpZXIgdGFibGUuCi0gICAgQVNTRVJUX1VOVVNFRCh2
bSwgdm0tPmF0b21TdHJpbmdUYWJsZSgpID09IFRocmVhZDo6Y3VycmVudCgpLmF0b21TdHJpbmdU
YWJsZSgpKTsKLX0KLQotdm9pZCBJZGVudGlmaWVyOjpjaGVja0N1cnJlbnRBdG9tU3RyaW5nVGFi
bGUoRXhlY1N0YXRlKiBleGVjKQotewotICAgIGNoZWNrQ3VycmVudEF0b21TdHJpbmdUYWJsZSgm
ZXhlYy0+dm0oKSk7CisgICAgQVNTRVJUX1VOVVNFRCh2bSwgdm0uYXRvbVN0cmluZ1RhYmxlKCkg
PT0gVGhyZWFkOjpjdXJyZW50KCkuYXRvbVN0cmluZ1RhYmxlKCkpOwogfQogCiAjZWxzZQogCiAv
LyBUaGVzZSBvbmx5IGV4aXN0cyBzbyB0aGF0IG91ciBleHBvcnRzIGFyZSB0aGUgc2FtZSBmb3Ig
ZGVidWcgYW5kIHJlbGVhc2UgYnVpbGRzLgogLy8gVGhpcyB3b3VsZCBiZSBhbiBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpLCBidXQgd2UncmUgaW4gTkRFQlVHIG9ubHkgY29kZSBoZXJlIQot
Tk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2b2lkIElkZW50aWZpZXI6OmNoZWNrQ3VycmVudEF0b21T
dHJpbmdUYWJsZShWTSopIHsgQ1JBU0goKTsgfQotTk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2b2lk
IElkZW50aWZpZXI6OmNoZWNrQ3VycmVudEF0b21TdHJpbmdUYWJsZShFeGVjU3RhdGUqKSB7IENS
QVNIKCk7IH0KK05PX1JFVFVSTl9EVUVfVE9fQ1JBU0ggdm9pZCBJZGVudGlmaWVyOjpjaGVja0N1
cnJlbnRBdG9tU3RyaW5nVGFibGUoVk0mKSB7IENSQVNIKCk7IH0KIAogI2VuZGlmCiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lkZW50aWZpZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JZGVudGlmaWVyLmgJKHJldmlzaW9uIDI0
OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lkZW50aWZpZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAy
MDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMTExLDMxICsxMTEsMjMgQEAgcHVibGlj
OgogCiAgICAgLy8gT25seSB0byBiZSB1c2VkIHdpdGggc3RyaW5nIGxpdGVyYWxzLgogICAgIHRl
bXBsYXRlPHVuc2lnbmVkIGNoYXJhY3RlcnNDb3VudD4KLSAgICBzdGF0aWMgSWRlbnRpZmllciBm
cm9tU3RyaW5nKFZNKiwgY29uc3QgY2hhciAoJmNoYXJhY3RlcnMpW2NoYXJhY3RlcnNDb3VudF0p
OwotICAgIHRlbXBsYXRlPHVuc2lnbmVkIGNoYXJhY3RlcnNDb3VudD4KLSAgICBzdGF0aWMgSWRl
bnRpZmllciBmcm9tU3RyaW5nKEV4ZWNTdGF0ZSosIGNvbnN0IGNoYXIgKCZjaGFyYWN0ZXJzKVtj
aGFyYWN0ZXJzQ291bnRdKTsKLSAgICBzdGF0aWMgSWRlbnRpZmllciBmcm9tU3RyaW5nKFZNKiwg
Y29uc3QgTENoYXIqLCBpbnQgbGVuZ3RoKTsKLSAgICBzdGF0aWMgSWRlbnRpZmllciBmcm9tU3Ry
aW5nKFZNKiwgY29uc3QgVUNoYXIqLCBpbnQgbGVuZ3RoKTsKLSAgICBzdGF0aWMgSWRlbnRpZmll
ciBmcm9tU3RyaW5nKFZNKiwgY29uc3QgU3RyaW5nJik7Ci0gICAgc3RhdGljIElkZW50aWZpZXIg
ZnJvbVN0cmluZyhFeGVjU3RhdGUqLCBBdG9tU3RyaW5nSW1wbCopOwotICAgIHN0YXRpYyBJZGVu
dGlmaWVyIGZyb21TdHJpbmcoRXhlY1N0YXRlKiwgY29uc3QgQXRvbVN0cmluZyYpOwotICAgIHN0
YXRpYyBJZGVudGlmaWVyIGZyb21TdHJpbmcoRXhlY1N0YXRlKiwgY29uc3QgU3RyaW5nJik7Ci0g
ICAgc3RhdGljIElkZW50aWZpZXIgZnJvbVN0cmluZyhFeGVjU3RhdGUqLCBjb25zdCBjaGFyKik7
Ci0gICAgc3RhdGljIElkZW50aWZpZXIgZnJvbVN0cmluZyhWTSogdm0sIGNvbnN0IFZlY3RvcjxM
Q2hhcj4mIGNoYXJhY3RlcnMpIHsgcmV0dXJuIGZyb21TdHJpbmcodm0sIGNoYXJhY3RlcnMuZGF0
YSgpLCBjaGFyYWN0ZXJzLnNpemUoKSk7IH0KKyAgICBzdGF0aWMgSWRlbnRpZmllciBmcm9tU3Ry
aW5nKFZNJiwgY29uc3QgY2hhciAoJmNoYXJhY3RlcnMpW2NoYXJhY3RlcnNDb3VudF0pOworICAg
IHN0YXRpYyBJZGVudGlmaWVyIGZyb21TdHJpbmcoVk0mLCBBU0NJSUxpdGVyYWwpOworICAgIHN0
YXRpYyBJZGVudGlmaWVyIGZyb21TdHJpbmcoVk0mLCBjb25zdCBMQ2hhciosIGludCBsZW5ndGgp
OworICAgIHN0YXRpYyBJZGVudGlmaWVyIGZyb21TdHJpbmcoVk0mLCBjb25zdCBVQ2hhciosIGlu
dCBsZW5ndGgpOworICAgIHN0YXRpYyBJZGVudGlmaWVyIGZyb21TdHJpbmcoVk0mLCBjb25zdCBT
dHJpbmcmKTsKKyAgICBzdGF0aWMgSWRlbnRpZmllciBmcm9tU3RyaW5nKFZNJiwgY29uc3QgY2hh
ciopOworICAgIHN0YXRpYyBJZGVudGlmaWVyIGZyb21TdHJpbmcoVk0mIHZtLCBjb25zdCBWZWN0
b3I8TENoYXI+JiBjaGFyYWN0ZXJzKSB7IHJldHVybiBmcm9tU3RyaW5nKHZtLCBjaGFyYWN0ZXJz
LmRhdGEoKSwgY2hhcmFjdGVycy5zaXplKCkpOyB9CiAKLSAgICBzdGF0aWMgSWRlbnRpZmllciBm
cm9tVWlkKFZNKiwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCk7Ci0gICAgc3RhdGljIElkZW50aWZp
ZXIgZnJvbVVpZChFeGVjU3RhdGUqLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKTsKKyAgICBzdGF0
aWMgSWRlbnRpZmllciBmcm9tVWlkKFZNJiwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCk7CiAgICAg
c3RhdGljIElkZW50aWZpZXIgZnJvbVVpZChjb25zdCBQcml2YXRlTmFtZSYpOwogICAgIHN0YXRp
YyBJZGVudGlmaWVyIGZyb21VaWQoU3ltYm9sSW1wbCYpOwogCi0gICAgc3RhdGljIElkZW50aWZp
ZXIgY3JlYXRlTENoYXJGcm9tVUNoYXIoVk0qIHZtLCBjb25zdCBVQ2hhciogcywgaW50IGxlbmd0
aCkgeyByZXR1cm4gSWRlbnRpZmllcih2bSwgYWRkOCh2bSwgcywgbGVuZ3RoKSk7IH0KKyAgICBz
dGF0aWMgSWRlbnRpZmllciBjcmVhdGVMQ2hhckZyb21VQ2hhcihWTSYgdm0sIGNvbnN0IFVDaGFy
KiBzLCBpbnQgbGVuZ3RoKSB7IHJldHVybiBJZGVudGlmaWVyKHZtLCBhZGQ4KHZtLCBzLCBsZW5n
dGgpKTsgfQogCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIElkZW50aWZpZXIgZnJvbShF
eGVjU3RhdGUqLCB1bnNpZ25lZCB5KTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgSWRl
bnRpZmllciBmcm9tKEV4ZWNTdGF0ZSosIGludCB5KTsKLSAgICBzdGF0aWMgSWRlbnRpZmllciBm
cm9tKEV4ZWNTdGF0ZSosIGRvdWJsZSB5KTsKLSAgICBzdGF0aWMgSWRlbnRpZmllciBmcm9tKFZN
KiwgdW5zaWduZWQgeSk7Ci0gICAgc3RhdGljIElkZW50aWZpZXIgZnJvbShWTSosIGludCB5KTsK
LSAgICBzdGF0aWMgSWRlbnRpZmllciBmcm9tKFZNKiwgZG91YmxlIHkpOworICAgIEpTX0VYUE9S
VF9QUklWQVRFIHN0YXRpYyBJZGVudGlmaWVyIGZyb20oVk0mLCB1bnNpZ25lZCB5KTsKKyAgICBK
U19FWFBPUlRfUFJJVkFURSBzdGF0aWMgSWRlbnRpZmllciBmcm9tKFZNJiwgaW50IHkpOworICAg
IHN0YXRpYyBJZGVudGlmaWVyIGZyb20oVk0mLCBkb3VibGUgeSk7CiAKICAgICBib29sIGlzTnVs
bCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5nLmlzTnVsbCgpOyB9CiAgICAgYm9vbCBpc0VtcHR5
KCkgY29uc3QgeyByZXR1cm4gbV9zdHJpbmcuaXNFbXB0eSgpOyB9CkBAIC0xNTcsOCArMTQ5LDcg
QEAgcHVibGljOgogICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFN0cmluZ0ltcGwqIGEsIGNv
bnN0IFN0cmluZ0ltcGwqIGIpIHsgcmV0dXJuIDo6ZXF1YWwoYSwgYik7IH0KIAogICAgIC8vIE9u
bHkgdG8gYmUgdXNlZCB3aXRoIHN0cmluZyBsaXRlcmFscy4KLSAgICBKU19FWFBPUlRfUFJJVkFU
RSBzdGF0aWMgUmVmPFN0cmluZ0ltcGw+IGFkZChWTSosIGNvbnN0IGNoYXIqKTsKLSAgICBKU19F
WFBPUlRfUFJJVkFURSBzdGF0aWMgUmVmPFN0cmluZ0ltcGw+IGFkZChFeGVjU3RhdGUqLCBjb25z
dCBjaGFyKik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFJlZjxTdHJpbmdJbXBsPiBh
ZGQoVk0mLCBjb25zdCBjaGFyKik7CiAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25z
dDsKIApAQCAtMTY3LDE0ICsxNTgsMTIgQEAgcHJpdmF0ZToKIAogICAgIC8vIE9ubHkgdG8gYmUg
dXNlZCB3aXRoIHN0cmluZyBsaXRlcmFscy4KICAgICB0ZW1wbGF0ZTx1bnNpZ25lZCBjaGFyYWN0
ZXJzQ291bnQ+Ci0gICAgSWRlbnRpZmllcihWTSogdm0sIGNvbnN0IGNoYXIgKCZjaGFyYWN0ZXJz
KVtjaGFyYWN0ZXJzQ291bnRdKSA6IG1fc3RyaW5nKGFkZCh2bSwgY2hhcmFjdGVycykpIHsgQVNT
RVJUKG1fc3RyaW5nLmltcGwoKS0+aXNBdG9tKCkpOyB9CisgICAgSWRlbnRpZmllcihWTSYgdm0s
IGNvbnN0IGNoYXIgKCZjaGFyYWN0ZXJzKVtjaGFyYWN0ZXJzQ291bnRdKSA6IG1fc3RyaW5nKGFk
ZCh2bSwgY2hhcmFjdGVycykpIHsgQVNTRVJUKG1fc3RyaW5nLmltcGwoKS0+aXNBdG9tKCkpOyB9
CiAKLSAgICBJZGVudGlmaWVyKFZNKiB2bSwgY29uc3QgTENoYXIqIHMsIGludCBsZW5ndGgpIDog
bV9zdHJpbmcoYWRkKHZtLCBzLCBsZW5ndGgpKSB7IEFTU0VSVChtX3N0cmluZy5pbXBsKCktPmlz
QXRvbSgpKTsgfQotICAgIElkZW50aWZpZXIoVk0qIHZtLCBjb25zdCBVQ2hhciogcywgaW50IGxl
bmd0aCkgOiBtX3N0cmluZyhhZGQodm0sIHMsIGxlbmd0aCkpIHsgQVNTRVJUKG1fc3RyaW5nLmlt
cGwoKS0+aXNBdG9tKCkpOyB9Ci0gICAgSWRlbnRpZmllcihFeGVjU3RhdGUqLCBBdG9tU3RyaW5n
SW1wbCopOwotICAgIElkZW50aWZpZXIoRXhlY1N0YXRlKiwgY29uc3QgQXRvbVN0cmluZyYpOwot
ICAgIElkZW50aWZpZXIoVk0qIHZtLCBjb25zdCBTdHJpbmcmIHN0cmluZykgOiBtX3N0cmluZyhh
ZGQodm0sIHN0cmluZy5pbXBsKCkpKSB7IEFTU0VSVChtX3N0cmluZy5pbXBsKCktPmlzQXRvbSgp
KTsgfQotICAgIElkZW50aWZpZXIoVk0qIHZtLCBTdHJpbmdJbXBsKiByZXApIDogbV9zdHJpbmco
YWRkKHZtLCByZXApKSB7IEFTU0VSVChtX3N0cmluZy5pbXBsKCktPmlzQXRvbSgpKTsgfQorICAg
IElkZW50aWZpZXIoVk0mIHZtLCBjb25zdCBMQ2hhciogcywgaW50IGxlbmd0aCkgOiBtX3N0cmlu
ZyhhZGQodm0sIHMsIGxlbmd0aCkpIHsgQVNTRVJUKG1fc3RyaW5nLmltcGwoKS0+aXNBdG9tKCkp
OyB9CisgICAgSWRlbnRpZmllcihWTSYgdm0sIGNvbnN0IFVDaGFyKiBzLCBpbnQgbGVuZ3RoKSA6
IG1fc3RyaW5nKGFkZCh2bSwgcywgbGVuZ3RoKSkgeyBBU1NFUlQobV9zdHJpbmcuaW1wbCgpLT5p
c0F0b20oKSk7IH0KKyAgICBJZGVudGlmaWVyKFZNJiB2bSwgY29uc3QgU3RyaW5nJiBzdHJpbmcp
IDogbV9zdHJpbmcoYWRkKHZtLCBzdHJpbmcuaW1wbCgpKSkgeyBBU1NFUlQobV9zdHJpbmcuaW1w
bCgpLT5pc0F0b20oKSk7IH0KKyAgICBJZGVudGlmaWVyKFZNJiB2bSwgU3RyaW5nSW1wbCogcmVw
KSA6IG1fc3RyaW5nKGFkZCh2bSwgcmVwKSkgeyBBU1NFUlQobV9zdHJpbmcuaW1wbCgpLT5pc0F0
b20oKSk7IH0KIAogICAgIElkZW50aWZpZXIoU3ltYm9sSW1wbCYgdWlkKQogICAgICAgICA6IG1f
c3RyaW5nKCZ1aWQpCkBAIC0xODcsMTkgKzE3NiwxNiBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBi
b29sIGVxdWFsKGNvbnN0IElkZW50aWZpZXImIGEsIGNvbnN0IElkZW50aWZpZXImIGIpIHsgcmV0
dXJuIGEubV9zdHJpbmcuaW1wbCgpID09IGIubV9zdHJpbmcuaW1wbCgpOyB9CiAgICAgc3RhdGlj
IGJvb2wgZXF1YWwoY29uc3QgSWRlbnRpZmllciYgYSwgY29uc3QgTENoYXIqIGIpIHsgcmV0dXJu
IGVxdWFsKGEubV9zdHJpbmcuaW1wbCgpLCBiKTsgfQogCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1l
IFQ+IHN0YXRpYyBSZWY8U3RyaW5nSW1wbD4gYWRkKFZNKiwgY29uc3QgVCosIGludCBsZW5ndGgp
OwotICAgIHN0YXRpYyBSZWY8U3RyaW5nSW1wbD4gYWRkOChWTSosIGNvbnN0IFVDaGFyKiwgaW50
IGxlbmd0aCk7CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHN0YXRpYyBSZWY8U3RyaW5nSW1w
bD4gYWRkKFZNJiwgY29uc3QgVCosIGludCBsZW5ndGgpOworICAgIHN0YXRpYyBSZWY8U3RyaW5n
SW1wbD4gYWRkOChWTSYsIGNvbnN0IFVDaGFyKiwgaW50IGxlbmd0aCk7CiAgICAgdGVtcGxhdGUg
PHR5cGVuYW1lIFQ+IEFMV0FZU19JTkxJTkUgc3RhdGljIGJvb2wgY2FuVXNlU2luZ2xlQ2hhcmFj
dGVyU3RyaW5nKFQpOwogCi0gICAgc3RhdGljIFJlZjxTdHJpbmdJbXBsPiBhZGQoRXhlY1N0YXRl
KiwgU3RyaW5nSW1wbCopOwotICAgIHN0YXRpYyBSZWY8U3RyaW5nSW1wbD4gYWRkKFZNKiwgU3Ry
aW5nSW1wbCopOworICAgIHN0YXRpYyBSZWY8U3RyaW5nSW1wbD4gYWRkKFZNJiwgU3RyaW5nSW1w
bCopOwogCiAjaWZuZGVmIE5ERUJVRwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lk
IGNoZWNrQ3VycmVudEF0b21TdHJpbmdUYWJsZShFeGVjU3RhdGUqKTsKLSAgICBKU19FWFBPUlRf
UFJJVkFURSBzdGF0aWMgdm9pZCBjaGVja0N1cnJlbnRBdG9tU3RyaW5nVGFibGUoVk0qKTsKKyAg
ICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBjaGVja0N1cnJlbnRBdG9tU3RyaW5nVGFi
bGUoVk0mKTsKICNlbHNlCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgTk9fUkVUVVJOX0RVRV9UT19D
UkFTSCBzdGF0aWMgdm9pZCBjaGVja0N1cnJlbnRBdG9tU3RyaW5nVGFibGUoRXhlY1N0YXRlKik7
Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgTk9fUkVUVVJOX0RVRV9UT19DUkFTSCBzdGF0aWMgdm9p
ZCBjaGVja0N1cnJlbnRBdG9tU3RyaW5nVGFibGUoVk0qKTsKKyAgICBKU19FWFBPUlRfUFJJVkFU
RSBOT19SRVRVUk5fRFVFX1RPX0NSQVNIIHN0YXRpYyB2b2lkIGNoZWNrQ3VycmVudEF0b21TdHJp
bmdUYWJsZShWTSYpOwogI2VuZGlmCiB9OwogCkBAIC0yMTUsMTIgKzIwMSwxMiBAQCB0ZW1wbGF0
ZSA8PiBBTFdBWVNfSU5MSU5FIGJvb2wgSWRlbnRpZmllCiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFt
ZSBUPgotUmVmPFN0cmluZ0ltcGw+IElkZW50aWZpZXI6OmFkZChWTSogdm0sIGNvbnN0IFQqIHMs
IGludCBsZW5ndGgpCitSZWY8U3RyaW5nSW1wbD4gSWRlbnRpZmllcjo6YWRkKFZNJiB2bSwgY29u
c3QgVCogcywgaW50IGxlbmd0aCkKIHsKICAgICBpZiAobGVuZ3RoID09IDEpIHsKICAgICAgICAg
VCBjID0gc1swXTsKICAgICAgICAgaWYgKGNhblVzZVNpbmdsZUNoYXJhY3RlclN0cmluZyhjKSkK
LSAgICAgICAgICAgIHJldHVybiB2bS0+c21hbGxTdHJpbmdzLnNpbmdsZUNoYXJhY3RlclN0cmlu
Z1JlcChjKTsKKyAgICAgICAgICAgIHJldHVybiB2bS5zbWFsbFN0cmluZ3Muc2luZ2xlQ2hhcmFj
dGVyU3RyaW5nUmVwKGMpOwogICAgIH0KICAgICBpZiAoIWxlbmd0aCkKICAgICAgICAgcmV0dXJu
ICpTdHJpbmdJbXBsOjplbXB0eSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSWRlbnRpZmllcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JZGVudGlmaWVySW5saW5lcy5oCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JZGVudGlmaWVySW5saW5lcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTMxLDU4ICszMSwyMSBAQAogCiBuYW1lc3BhY2UgSlNDICB7CiAKLWlubGluZSBJZGVudGlm
aWVyOjpJZGVudGlmaWVyKEV4ZWNTdGF0ZSogZXhlYywgQXRvbVN0cmluZ0ltcGwqIHN0cmluZykK
LSAgICA6IG1fc3RyaW5nKHN0cmluZykKLXsKLSNpZm5kZWYgTkRFQlVHCi0gICAgY2hlY2tDdXJy
ZW50QXRvbVN0cmluZ1RhYmxlKGV4ZWMpOwotICAgIGlmIChzdHJpbmcpCi0gICAgICAgIEFTU0VS
VF9XSVRIX01FU1NBR0UoIXN0cmluZy0+bGVuZ3RoKCkgfHwgc3RyaW5nLT5pc1N5bWJvbCgpIHx8
IEF0b21TdHJpbmdJbXBsOjppc0luQXRvbVN0cmluZ1RhYmxlKHN0cmluZyksICJUaGUgYXRvbWlj
IHN0cmluZyBjb21lcyBmcm9tIGFuIG90aGVyIHRocmVhZCEiKTsKLSNlbHNlCi0gICAgVU5VU0VE
X1BBUkFNKGV4ZWMpOwotI2VuZGlmCi19Ci0KLWlubGluZSBJZGVudGlmaWVyOjpJZGVudGlmaWVy
KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXRvbVN0cmluZyYgc3RyaW5nKQotICAgIDogbV9zdHJp
bmcoc3RyaW5nLnN0cmluZygpKQotewotI2lmbmRlZiBOREVCVUcKLSAgICBjaGVja0N1cnJlbnRB
dG9tU3RyaW5nVGFibGUoZXhlYyk7Ci0gICAgaWYgKCFzdHJpbmcuaXNOdWxsKCkpCi0gICAgICAg
IEFTU0VSVF9XSVRIX01FU1NBR0UoIXN0cmluZy5sZW5ndGgoKSB8fCBzdHJpbmcuaW1wbCgpLT5p
c1N5bWJvbCgpIHx8IEF0b21TdHJpbmdJbXBsOjppc0luQXRvbVN0cmluZ1RhYmxlKHN0cmluZy5p
bXBsKCkpLCAiVGhlIGF0b21pYyBzdHJpbmcgY29tZXMgZnJvbSBhbiBvdGhlciB0aHJlYWQhIik7
Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShleGVjKTsKLSNlbmRpZgotfQotCi1pbmxpbmUgUmVm
PFN0cmluZ0ltcGw+IElkZW50aWZpZXI6OmFkZChFeGVjU3RhdGUqIGV4ZWMsIFN0cmluZ0ltcGwq
IHIpCi17Ci0jaWZuZGVmIE5ERUJVRwotICAgIGNoZWNrQ3VycmVudEF0b21TdHJpbmdUYWJsZShl
eGVjKTsKLSNlbmRpZgotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgcmV0dXJuICpBdG9t
U3RyaW5nSW1wbDo6YWRkV2l0aFN0cmluZ1RhYmxlUHJvdmlkZXIodm0sIHIpOwotfQotaW5saW5l
IFJlZjxTdHJpbmdJbXBsPiBJZGVudGlmaWVyOjphZGQoVk0qIHZtLCBTdHJpbmdJbXBsKiByKQor
aW5saW5lIFJlZjxTdHJpbmdJbXBsPiBJZGVudGlmaWVyOjphZGQoVk0mIHZtLCBTdHJpbmdJbXBs
KiByKQogewogI2lmbmRlZiBOREVCVUcKICAgICBjaGVja0N1cnJlbnRBdG9tU3RyaW5nVGFibGUo
dm0pOwogI2VuZGlmCi0gICAgcmV0dXJuICpBdG9tU3RyaW5nSW1wbDo6YWRkV2l0aFN0cmluZ1Rh
YmxlUHJvdmlkZXIoKnZtLCByKTsKKyAgICByZXR1cm4gKkF0b21TdHJpbmdJbXBsOjphZGRXaXRo
U3RyaW5nVGFibGVQcm92aWRlcih2bSwgcik7CiB9CiAKLWlubGluZSBJZGVudGlmaWVyIElkZW50
aWZpZXI6OmZyb21VaWQoVk0qIHZtLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQoraW5saW5lIElk
ZW50aWZpZXIgSWRlbnRpZmllcjo6ZnJvbVVpZChWTSYgdm0sIFVuaXF1ZWRTdHJpbmdJbXBsKiB1
aWQpCiB7CiAgICAgaWYgKCF1aWQgfHwgIXVpZC0+aXNTeW1ib2woKSkKICAgICAgICAgcmV0dXJu
IElkZW50aWZpZXIodm0sIHVpZCk7CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFN5bWJvbEltcGwm
PigqdWlkKTsKIH0KIAotaW5saW5lIElkZW50aWZpZXIgSWRlbnRpZmllcjo6ZnJvbVVpZChFeGVj
U3RhdGUqIGV4ZWMsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCi17Ci0gICAgcmV0dXJuIGZyb21V
aWQoJmV4ZWMtPnZtKCksIHVpZCk7Ci19Ci0KIGlubGluZSBJZGVudGlmaWVyIElkZW50aWZpZXI6
OmZyb21VaWQoY29uc3QgUHJpdmF0ZU5hbWUmIG5hbWUpCiB7CiAgICAgcmV0dXJuIG5hbWUudWlk
KCk7CkBAIC05NCw2NCArNTcsNDggQEAgaW5saW5lIElkZW50aWZpZXIgSWRlbnRpZmllcjo6ZnJv
bVVpZChTeQogfQogCiB0ZW1wbGF0ZTx1bnNpZ25lZCBjaGFyYWN0ZXJzQ291bnQ+Ci1pbmxpbmUg
SWRlbnRpZmllciBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKFZNKiB2bSwgY29uc3QgY2hhciAoJmNo
YXJhY3RlcnMpW2NoYXJhY3RlcnNDb3VudF0pCitpbmxpbmUgSWRlbnRpZmllciBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKFZNJiB2bSwgY29uc3QgY2hhciAoJmNoYXJhY3RlcnMpW2NoYXJhY3RlcnND
b3VudF0pCiB7Ci0gICAgcmV0dXJuIElkZW50aWZpZXIodm0sIGNoYXJhY3RlcnMpOworICAgIHJl
dHVybiBJZGVudGlmaWVyKCZ2bSwgY2hhcmFjdGVycyk7CiB9CiAKLXRlbXBsYXRlPHVuc2lnbmVk
IGNoYXJhY3RlcnNDb3VudD4KLWlubGluZSBJZGVudGlmaWVyIElkZW50aWZpZXI6OmZyb21TdHJp
bmcoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBjaGFyICgmY2hhcmFjdGVycylbY2hhcmFjdGVyc0Nv
dW50XSkKK2lubGluZSBJZGVudGlmaWVyIElkZW50aWZpZXI6OmZyb21TdHJpbmcoVk0mIHZtLCBB
U0NJSUxpdGVyYWwgcykKIHsKLSAgICByZXR1cm4gSWRlbnRpZmllcigmZXhlYy0+dm0oKSwgY2hh
cmFjdGVycyk7CisgICAgcmV0dXJuIElkZW50aWZpZXIodm0sIFN0cmluZyhzKSk7CiB9CiAKLWlu
bGluZSBJZGVudGlmaWVyIElkZW50aWZpZXI6OmZyb21TdHJpbmcoVk0qIHZtLCBjb25zdCBMQ2hh
ciogcywgaW50IGxlbmd0aCkKK2lubGluZSBJZGVudGlmaWVyIElkZW50aWZpZXI6OmZyb21TdHJp
bmcoVk0mIHZtLCBjb25zdCBMQ2hhciogcywgaW50IGxlbmd0aCkKIHsKICAgICByZXR1cm4gSWRl
bnRpZmllcih2bSwgcywgbGVuZ3RoKTsKIH0KIAotaW5saW5lIElkZW50aWZpZXIgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZyhWTSogdm0sIGNvbnN0IFVDaGFyKiBzLCBpbnQgbGVuZ3RoKQoraW5saW5l
IElkZW50aWZpZXIgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhWTSYgdm0sIGNvbnN0IFVDaGFyKiBz
LCBpbnQgbGVuZ3RoKQogewogICAgIHJldHVybiBJZGVudGlmaWVyKHZtLCBzLCBsZW5ndGgpOwog
fQogCi1pbmxpbmUgSWRlbnRpZmllciBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKFZNKiB2bSwgY29u
c3QgU3RyaW5nJiBzdHJpbmcpCitpbmxpbmUgSWRlbnRpZmllciBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKFZNJiB2bSwgY29uc3QgU3RyaW5nJiBzdHJpbmcpCiB7CiAgICAgcmV0dXJuIElkZW50aWZp
ZXIodm0sIHN0cmluZy5pbXBsKCkpOwogfQogCi1pbmxpbmUgSWRlbnRpZmllciBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU3RyaW5nJiBzdHJpbmcpCi17Ci0g
ICAgcmV0dXJuIElkZW50aWZpZXIoJmV4ZWMtPnZtKCksIHN0cmluZy5pbXBsKCkpOwotfQotCi1p
bmxpbmUgSWRlbnRpZmllciBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywg
QXRvbVN0cmluZ0ltcGwqIGF0b21TdHJpbmcpCi17Ci0gICAgcmV0dXJuIElkZW50aWZpZXIoZXhl
YywgYXRvbVN0cmluZyk7Ci19Ci0KLWlubGluZSBJZGVudGlmaWVyIElkZW50aWZpZXI6OmZyb21T
dHJpbmcoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBdG9tU3RyaW5nJiBhdG9tU3RyaW5nKQotewot
ICAgIHJldHVybiBJZGVudGlmaWVyKGV4ZWMsIGF0b21TdHJpbmcpOwotfQotCi1pbmxpbmUgSWRl
bnRpZmllciBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgY2hh
ciogcykKK2lubGluZSBJZGVudGlmaWVyIElkZW50aWZpZXI6OmZyb21TdHJpbmcoVk0mIHZtLCBj
b25zdCBjaGFyKiBzKQogewotICAgIHJldHVybiBJZGVudGlmaWVyKGV4ZWMsIEF0b21TdHJpbmco
cykpOworICAgIHJldHVybiBJZGVudGlmaWVyKHZtLCBBdG9tU3RyaW5nKHMpKTsKIH0KIAogaW5s
aW5lIEpTVmFsdWUgaWRlbnRpZmllclRvSlNWYWx1ZShWTSYgdm0sIGNvbnN0IElkZW50aWZpZXIm
IGlkZW50aWZpZXIpCiB7CiAgICAgaWYgKGlkZW50aWZpZXIuaXNTeW1ib2woKSkKICAgICAgICAg
cmV0dXJuIFN5bWJvbDo6Y3JlYXRlKHZtLCBzdGF0aWNfY2FzdDxTeW1ib2xJbXBsJj4oKmlkZW50
aWZpZXIuaW1wbCgpKSk7Ci0gICAgcmV0dXJuIGpzU3RyaW5nKCZ2bSwgaWRlbnRpZmllci5pbXBs
KCkpOworICAgIHJldHVybiBqc1N0cmluZyh2bSwgaWRlbnRpZmllci5pbXBsKCkpOwogfQogCiBp
bmxpbmUgSlNWYWx1ZSBpZGVudGlmaWVyVG9TYWZlUHVibGljSlNWYWx1ZShWTSYgdm0sIGNvbnN0
IElkZW50aWZpZXImIGlkZW50aWZpZXIpIAogewogICAgIGlmIChpZGVudGlmaWVyLmlzU3ltYm9s
KCkgJiYgIWlkZW50aWZpZXIuaXNQcml2YXRlTmFtZSgpKQogICAgICAgICByZXR1cm4gU3ltYm9s
OjpjcmVhdGUodm0sIHN0YXRpY19jYXN0PFN5bWJvbEltcGwmPigqaWRlbnRpZmllci5pbXBsKCkp
KTsKLSAgICByZXR1cm4ganNTdHJpbmcoJnZtLCBpZGVudGlmaWVyLmltcGwoKSk7CisgICAgcmV0
dXJuIGpzU3RyaW5nKHZtLCBpZGVudGlmaWVyLmltcGwoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZXJuYWxGdW5jdGlv
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZXJu
YWxGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0ludGVybmFsRnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Miw3ICs1
Miw3IEBAIHZvaWQgSW50ZXJuYWxGdW5jdGlvbjo6ZmluaXNoQ3JlYXRpb24oVk0KICAgICBBU1NF
UlQobWV0aG9kVGFibGUodm0pLT5nZXRDYWxsRGF0YSA9PSBJbnRlcm5hbEZ1bmN0aW9uOjppbmZv
KCktPm1ldGhvZFRhYmxlLmdldENhbGxEYXRhKTsKICAgICBBU1NFUlQobWV0aG9kVGFibGUodm0p
LT5nZXRDb25zdHJ1Y3REYXRhID09IEludGVybmFsRnVuY3Rpb246OmluZm8oKS0+bWV0aG9kVGFi
bGUuZ2V0Q29uc3RydWN0RGF0YSk7CiAgICAgQVNTRVJUKHR5cGUoKSA9PSBJbnRlcm5hbEZ1bmN0
aW9uVHlwZSk7Ci0gICAgSlNTdHJpbmcqIG5hbWVTdHJpbmcgPSBqc1N0cmluZygmdm0sIG5hbWUp
OworICAgIEpTU3RyaW5nKiBuYW1lU3RyaW5nID0ganNTdHJpbmcodm0sIG5hbWUpOwogICAgIG1f
b3JpZ2luYWxOYW1lLnNldCh2bSwgdGhpcywgbmFtZVN0cmluZyk7CiAgICAgaWYgKG5hbWVWaXNp
YmlsaXR5ID09IE5hbWVWaXNpYmlsaXR5OjpWaXNpYmxlKSB7CiAgICAgICAgIGlmIChuYW1lQWRk
aXRpb25Nb2RlID09IE5hbWVBZGRpdGlvbk1vZGU6OldpdGhTdHJ1Y3R1cmVUcmFuc2l0aW9uKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bENvbGxhdG9yLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsQ29sbGF0b3IuY3Bw
CShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRs
Q29sbGF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIENvcHly
aWdodCAoQykgMjAxNSBBbmR5IFZhbldhZ29uZXIgKGFuZHlAdmFud2Fnb25lci5mYW1pbHkpCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgU3Vrb2xzYWsgU2Frc2h1d29uZyAoc3Vrb2xzYWtAZ21haWwu
Y29tKQotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5jLiBBbGwgUmlnaHRz
IFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MTIsMTMgKzQx
MiwxMyBAQCBKU09iamVjdCogSW50bENvbGxhdG9yOjpyZXNvbHZlZE9wdGlvbnMoCiAgICAgfQog
CiAgICAgSlNPYmplY3QqIG9wdGlvbnMgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdCgmc3RhdGUpOwot
ICAgIG9wdGlvbnMtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bG9jYWxlLCBqc1N0
cmluZygmc3RhdGUsIG1fbG9jYWxlKSk7Ci0gICAgb3B0aW9ucy0+cHV0RGlyZWN0KHZtLCB2bS5w
cm9wZXJ0eU5hbWVzLT51c2FnZSwganNOb250cml2aWFsU3RyaW5nKCZzdGF0ZSwgdXNhZ2VTdHJp
bmcobV91c2FnZSkpKTsKLSAgICBvcHRpb25zLT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFt
ZXMtPnNlbnNpdGl2aXR5LCBqc05vbnRyaXZpYWxTdHJpbmcoJnN0YXRlLCBzZW5zaXRpdml0eVN0
cmluZyhtX3NlbnNpdGl2aXR5KSkpOworICAgIG9wdGlvbnMtPnB1dERpcmVjdCh2bSwgdm0ucHJv
cGVydHlOYW1lcy0+bG9jYWxlLCBqc1N0cmluZyh2bSwgbV9sb2NhbGUpKTsKKyAgICBvcHRpb25z
LT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnVzYWdlLCBqc05vbnRyaXZpYWxTdHJp
bmcodm0sIHVzYWdlU3RyaW5nKG1fdXNhZ2UpKSk7CisgICAgb3B0aW9ucy0+cHV0RGlyZWN0KHZt
LCB2bS5wcm9wZXJ0eU5hbWVzLT5zZW5zaXRpdml0eSwganNOb250cml2aWFsU3RyaW5nKHZtLCBz
ZW5zaXRpdml0eVN0cmluZyhtX3NlbnNpdGl2aXR5KSkpOwogICAgIG9wdGlvbnMtPnB1dERpcmVj
dCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+aWdub3JlUHVuY3R1YXRpb24sIGpzQm9vbGVhbihtX2ln
bm9yZVB1bmN0dWF0aW9uKSk7Ci0gICAgb3B0aW9ucy0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0
eU5hbWVzLT5jb2xsYXRpb24sIGpzU3RyaW5nKCZzdGF0ZSwgbV9jb2xsYXRpb24pKTsKKyAgICBv
cHRpb25zLT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmNvbGxhdGlvbiwganNTdHJp
bmcodm0sIG1fY29sbGF0aW9uKSk7CiAgICAgb3B0aW9ucy0+cHV0RGlyZWN0KHZtLCB2bS5wcm9w
ZXJ0eU5hbWVzLT5udW1lcmljLCBqc0Jvb2xlYW4obV9udW1lcmljKSk7Ci0gICAgb3B0aW9ucy0+
cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5jYXNlRmlyc3QsIGpzTm9udHJpdmlhbFN0
cmluZygmc3RhdGUsIGNhc2VGaXJzdFN0cmluZyhtX2Nhc2VGaXJzdCkpKTsKKyAgICBvcHRpb25z
LT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmNhc2VGaXJzdCwganNOb250cml2aWFs
U3RyaW5nKHZtLCBjYXNlRmlyc3RTdHJpbmcobV9jYXNlRmlyc3QpKSk7CiAgICAgcmV0dXJuIG9w
dGlvbnM7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xs
YXRvclByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSW50bENvbGxhdG9yUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bENvbGxhdG9yUHJvdG90eXBlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQW5k
eSBWYW5XYWdvbmVyIChhbmR5QHZhbndhZ29uZXIuZmFtaWx5KQotICogQ29weXJpZ2h0IChDKSAy
MDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE2LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC03NSw3ICs3NSw3IEBAIHZvaWQgSW50bENvbGxhdG9yUHJv
dG90eXBlOjpmaW5pc2hDcmVhdGkKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAK
LSAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+dG9T
dHJpbmdUYWdTeW1ib2wsIGpzU3RyaW5nKCZ2bSwgIk9iamVjdCIpLCBQcm9wZXJ0eUF0dHJpYnV0
ZTo6RG9udEVudW0gfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpOworICAgIHB1dERpcmVj
dFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT50b1N0cmluZ1RhZ1N5bWJv
bCwganNTdHJpbmcodm0sICJPYmplY3QiKSwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtIHwg
UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KTsKIH0KIAogc3RhdGljIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgSW50bENvbGxhdG9yRnVuY0NvbXBhcmUoRXhlY1N0YXRlKiBzdGF0ZSkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVU
aW1lRm9ybWF0LmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsx
LDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQW5keSBWYW5XYWdvbmVyIChhbmR5QHZh
bndhZ29uZXIuZmFtaWx5KQotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0zMTYsNyArMzE2LDcgQEAgc3RhdGljIEpTT2JqZWN0KiB0b0RhdGVUaW1lT3B0aW9uc0FueURh
dAogICAgICAgICAvLyBhLiBGb3IgZWFjaCBvZiB0aGUgcHJvcGVydHkgbmFtZXMgInllYXIiLCAi
bW9udGgiLCAiZGF5IjoKICAgICAgICAgLy8gaS4gTGV0IHN0YXR1cyBiZSBDcmVhdGVEYXRlUHJv
cGVydHlPclRocm93KG9wdGlvbnMsIHByb3AsICJudW1lcmljIikuCiAgICAgICAgIC8vIGlpLiBS
ZXR1cm5JZkFicnVwdChzdGF0dXMpLgotICAgICAgICBKU1N0cmluZyogbnVtZXJpYyA9IGpzTm9u
dHJpdmlhbFN0cmluZygmZXhlYywgIm51bWVyaWMiX3MpOworICAgICAgICBKU1N0cmluZyogbnVt
ZXJpYyA9IGpzTm9udHJpdmlhbFN0cmluZyh2bSwgIm51bWVyaWMiX3MpOwogCiAgICAgICAgIG9w
dGlvbnMtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+eWVhciwgbnVtZXJpYyk7CiAg
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwpAQCAtODQ4LDQyICs4
NDgsNDIgQEAgSlNPYmplY3QqIEludGxEYXRlVGltZUZvcm1hdDo6cmVzb2x2ZWRPcAogICAgIH0K
IAogICAgIEpTT2JqZWN0KiBvcHRpb25zID0gY29uc3RydWN0RW1wdHlPYmplY3QoJmV4ZWMpOwot
ICAgIG9wdGlvbnMtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bG9jYWxlLCBqc05v
bnRyaXZpYWxTdHJpbmcoJmV4ZWMsIG1fbG9jYWxlKSk7Ci0gICAgb3B0aW9ucy0+cHV0RGlyZWN0
KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5jYWxlbmRhciwganNOb250cml2aWFsU3RyaW5nKCZleGVj
LCBtX2NhbGVuZGFyKSk7Ci0gICAgb3B0aW9ucy0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5h
bWVzLT5udW1iZXJpbmdTeXN0ZW0sIGpzTm9udHJpdmlhbFN0cmluZygmZXhlYywgbV9udW1iZXJp
bmdTeXN0ZW0pKTsKLSAgICBvcHRpb25zLT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMt
PnRpbWVab25lLCBqc05vbnRyaXZpYWxTdHJpbmcoJmV4ZWMsIG1fdGltZVpvbmUpKTsKKyAgICBv
cHRpb25zLT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxvY2FsZSwganNOb250cml2
aWFsU3RyaW5nKHZtLCBtX2xvY2FsZSkpOworICAgIG9wdGlvbnMtPnB1dERpcmVjdCh2bSwgdm0u
cHJvcGVydHlOYW1lcy0+Y2FsZW5kYXIsIGpzTm9udHJpdmlhbFN0cmluZyh2bSwgbV9jYWxlbmRh
cikpOworICAgIG9wdGlvbnMtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bnVtYmVy
aW5nU3lzdGVtLCBqc05vbnRyaXZpYWxTdHJpbmcodm0sIG1fbnVtYmVyaW5nU3lzdGVtKSk7Cisg
ICAgb3B0aW9ucy0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT50aW1lWm9uZSwganNO
b250cml2aWFsU3RyaW5nKHZtLCBtX3RpbWVab25lKSk7CiAKICAgICBpZiAobV93ZWVrZGF5ICE9
IFdlZWtkYXk6Ok5vbmUpCi0gICAgICAgIG9wdGlvbnMtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVy
dHlOYW1lcy0+d2Vla2RheSwganNOb250cml2aWFsU3RyaW5nKCZleGVjLCB3ZWVrZGF5U3RyaW5n
KG1fd2Vla2RheSkpKTsKKyAgICAgICAgb3B0aW9ucy0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0
eU5hbWVzLT53ZWVrZGF5LCBqc05vbnRyaXZpYWxTdHJpbmcodm0sIHdlZWtkYXlTdHJpbmcobV93
ZWVrZGF5KSkpOwogCiAgICAgaWYgKG1fZXJhICE9IEVyYTo6Tm9uZSkKLSAgICAgICAgb3B0aW9u
cy0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5lcmEsIGpzTm9udHJpdmlhbFN0cmlu
ZygmZXhlYywgZXJhU3RyaW5nKG1fZXJhKSkpOworICAgICAgICBvcHRpb25zLT5wdXREaXJlY3Qo
dm0sIHZtLnByb3BlcnR5TmFtZXMtPmVyYSwganNOb250cml2aWFsU3RyaW5nKHZtLCBlcmFTdHJp
bmcobV9lcmEpKSk7CiAKICAgICBpZiAobV95ZWFyICE9IFllYXI6Ok5vbmUpCi0gICAgICAgIG9w
dGlvbnMtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+eWVhciwganNOb250cml2aWFs
U3RyaW5nKCZleGVjLCB5ZWFyU3RyaW5nKG1feWVhcikpKTsKKyAgICAgICAgb3B0aW9ucy0+cHV0
RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT55ZWFyLCBqc05vbnRyaXZpYWxTdHJpbmcodm0s
IHllYXJTdHJpbmcobV95ZWFyKSkpOwogCiAgICAgaWYgKG1fbW9udGggIT0gTW9udGg6Ok5vbmUp
Ci0gICAgICAgIG9wdGlvbnMtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bW9udGgs
IGpzTm9udHJpdmlhbFN0cmluZygmZXhlYywgbW9udGhTdHJpbmcobV9tb250aCkpKTsKKyAgICAg
ICAgb3B0aW9ucy0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5tb250aCwganNOb250
cml2aWFsU3RyaW5nKHZtLCBtb250aFN0cmluZyhtX21vbnRoKSkpOwogCiAgICAgaWYgKG1fZGF5
ICE9IERheTo6Tm9uZSkKLSAgICAgICAgb3B0aW9ucy0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0
eU5hbWVzLT5kYXksIGpzTm9udHJpdmlhbFN0cmluZygmZXhlYywgZGF5U3RyaW5nKG1fZGF5KSkp
OworICAgICAgICBvcHRpb25zLT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmRheSwg
anNOb250cml2aWFsU3RyaW5nKHZtLCBkYXlTdHJpbmcobV9kYXkpKSk7CiAKICAgICBpZiAobV9o
b3VyICE9IEhvdXI6Ok5vbmUpCi0gICAgICAgIG9wdGlvbnMtPnB1dERpcmVjdCh2bSwgdm0ucHJv
cGVydHlOYW1lcy0+aG91ciwganNOb250cml2aWFsU3RyaW5nKCZleGVjLCBob3VyU3RyaW5nKG1f
aG91cikpKTsKKyAgICAgICAgb3B0aW9ucy0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVz
LT5ob3VyLCBqc05vbnRyaXZpYWxTdHJpbmcodm0sIGhvdXJTdHJpbmcobV9ob3VyKSkpOwogCiAg
ICAgaWYgKCFtX2hvdXJDeWNsZS5pc051bGwoKSkgewotICAgICAgICBvcHRpb25zLT5wdXREaXJl
Y3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmhvdXJDeWNsZSwganNOb250cml2aWFsU3RyaW5nKCZl
eGVjLCBtX2hvdXJDeWNsZSkpOworICAgICAgICBvcHRpb25zLT5wdXREaXJlY3Qodm0sIHZtLnBy
b3BlcnR5TmFtZXMtPmhvdXJDeWNsZSwganNOb250cml2aWFsU3RyaW5nKHZtLCBtX2hvdXJDeWNs
ZSkpOwogICAgICAgICBvcHRpb25zLT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmhv
dXIxMiwganNCb29sZWFuKG1faG91ckN5Y2xlID09ICJoMTEiIHx8IG1faG91ckN5Y2xlID09ICJo
MTIiKSk7CiAgICAgfQogCiAgICAgaWYgKG1fbWludXRlICE9IE1pbnV0ZTo6Tm9uZSkKLSAgICAg
ICAgb3B0aW9ucy0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5taW51dGUsIGpzTm9u
dHJpdmlhbFN0cmluZygmZXhlYywgbWludXRlU3RyaW5nKG1fbWludXRlKSkpOworICAgICAgICBv
cHRpb25zLT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm1pbnV0ZSwganNOb250cml2
aWFsU3RyaW5nKHZtLCBtaW51dGVTdHJpbmcobV9taW51dGUpKSk7CiAKICAgICBpZiAobV9zZWNv
bmQgIT0gU2Vjb25kOjpOb25lKQotICAgICAgICBvcHRpb25zLT5wdXREaXJlY3Qodm0sIHZtLnBy
b3BlcnR5TmFtZXMtPnNlY29uZCwganNOb250cml2aWFsU3RyaW5nKCZleGVjLCBzZWNvbmRTdHJp
bmcobV9zZWNvbmQpKSk7CisgICAgICAgIG9wdGlvbnMtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVy
dHlOYW1lcy0+c2Vjb25kLCBqc05vbnRyaXZpYWxTdHJpbmcodm0sIHNlY29uZFN0cmluZyhtX3Nl
Y29uZCkpKTsKIAogICAgIGlmIChtX3RpbWVab25lTmFtZSAhPSBUaW1lWm9uZU5hbWU6Ok5vbmUp
Ci0gICAgICAgIG9wdGlvbnMtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+dGltZVpv
bmVOYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcoJmV4ZWMsIHRpbWVab25lTmFtZVN0cmluZyhtX3Rp
bWVab25lTmFtZSkpKTsKKyAgICAgICAgb3B0aW9ucy0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0
eU5hbWVzLT50aW1lWm9uZU5hbWUsIGpzTm9udHJpdmlhbFN0cmluZyh2bSwgdGltZVpvbmVOYW1l
U3RyaW5nKG1fdGltZVpvbmVOYW1lKSkpOwogCiAgICAgcmV0dXJuIG9wdGlvbnM7CiB9CkBAIC05
MTUsNyArOTE1LDcgQEAgSlNWYWx1ZSBJbnRsRGF0ZVRpbWVGb3JtYXQ6OmZvcm1hdChFeGVjUwog
ICAgIGlmIChVX0ZBSUxVUkUoc3RhdHVzKSkKICAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9y
KCZleGVjLCBzY29wZSwgImZhaWxlZCB0byBmb3JtYXQgZGF0ZSB2YWx1ZSJfcyk7CiAKLSAgICBy
ZXR1cm4ganNTdHJpbmcoJmV4ZWMsIFN0cmluZyhyZXN1bHQuZGF0YSgpLCByZXN1bHRMZW5ndGgp
KTsKKyAgICByZXR1cm4ganNTdHJpbmcodm0sIFN0cmluZyhyZXN1bHQuZGF0YSgpLCByZXN1bHRM
ZW5ndGgpKTsKIH0KIAogI2lmIEpTQ19JQ1VfSEFTX1VGSUVMRFBPU0lURVIKQEAgLTEwMTgsOCAr
MTAxOCw4IEBAIEpTVmFsdWUgSW50bERhdGVUaW1lRm9ybWF0Ojpmb3JtYXRUb1BhcnQKICAgICAg
ICAgcmV0dXJuIHRocm93T3V0T2ZNZW1vcnlFcnJvcigmZXhlYywgc2NvcGUpOwogCiAgICAgYXV0
byByZXN1bHRTdHJpbmcgPSBTdHJpbmcocmVzdWx0LmRhdGEoKSwgcmVzdWx0TGVuZ3RoKTsKLSAg
ICBhdXRvIHR5cGVQcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgInR5
cGUiKTsKLSAgICBhdXRvIGxpdGVyYWxTdHJpbmcgPSBqc1N0cmluZygmZXhlYywgImxpdGVyYWwi
X3MpOworICAgIGF1dG8gdHlwZVByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb21TdHJpbmco
dm0sICJ0eXBlIik7CisgICAgYXV0byBsaXRlcmFsU3RyaW5nID0ganNTdHJpbmcodm0sICJsaXRl
cmFsIl9zKTsKIAogICAgIGludDMyX3QgcHJldmlvdXNFbmRJbmRleCA9IDA7CiAgICAgaW50MzJf
dCBiZWdpbkluZGV4ID0gMDsKQEAgLTEwMzAsNyArMTAzMCw3IEBAIEpTVmFsdWUgSW50bERhdGVU
aW1lRm9ybWF0Ojpmb3JtYXRUb1BhcnQKICAgICAgICAgICAgIGJlZ2luSW5kZXggPSBlbmRJbmRl
eCA9IHJlc3VsdExlbmd0aDsKIAogICAgICAgICBpZiAocHJldmlvdXNFbmRJbmRleCA8IGJlZ2lu
SW5kZXgpIHsKLSAgICAgICAgICAgIGF1dG8gdmFsdWUgPSBqc1N0cmluZygmZXhlYywgcmVzdWx0
U3RyaW5nLnN1YnN0cmluZyhwcmV2aW91c0VuZEluZGV4LCBiZWdpbkluZGV4IC0gcHJldmlvdXNF
bmRJbmRleCkpOworICAgICAgICAgICAgYXV0byB2YWx1ZSA9IGpzU3RyaW5nKHZtLCByZXN1bHRT
dHJpbmcuc3Vic3RyaW5nKHByZXZpb3VzRW5kSW5kZXgsIGJlZ2luSW5kZXggLSBwcmV2aW91c0Vu
ZEluZGV4KSk7CiAgICAgICAgICAgICBKU09iamVjdCogcGFydCA9IGNvbnN0cnVjdEVtcHR5T2Jq
ZWN0KCZleGVjKTsKICAgICAgICAgICAgIHBhcnQtPnB1dERpcmVjdCh2bSwgdHlwZVByb3BlcnR5
TmFtZSwgbGl0ZXJhbFN0cmluZyk7CiAgICAgICAgICAgICBwYXJ0LT5wdXREaXJlY3Qodm0sIHZt
LnByb3BlcnR5TmFtZXMtPnZhbHVlLCB2YWx1ZSk7CkBAIC0xMDQwLDggKzEwNDAsOCBAQCBKU1Zh
bHVlIEludGxEYXRlVGltZUZvcm1hdDo6Zm9ybWF0VG9QYXJ0CiAgICAgICAgIHByZXZpb3VzRW5k
SW5kZXggPSBlbmRJbmRleDsKIAogICAgICAgICBpZiAoZmllbGRUeXBlID49IDApIHsKLSAgICAg
ICAgICAgIGF1dG8gdHlwZSA9IGpzU3RyaW5nKCZleGVjLCBwYXJ0VHlwZVN0cmluZyhVRGF0ZUZv
cm1hdEZpZWxkKGZpZWxkVHlwZSkpKTsKLSAgICAgICAgICAgIGF1dG8gdmFsdWUgPSBqc1N0cmlu
ZygmZXhlYywgcmVzdWx0U3RyaW5nLnN1YnN0cmluZyhiZWdpbkluZGV4LCBlbmRJbmRleCAtIGJl
Z2luSW5kZXgpKTsKKyAgICAgICAgICAgIGF1dG8gdHlwZSA9IGpzU3RyaW5nKHZtLCBwYXJ0VHlw
ZVN0cmluZyhVRGF0ZUZvcm1hdEZpZWxkKGZpZWxkVHlwZSkpKTsKKyAgICAgICAgICAgIGF1dG8g
dmFsdWUgPSBqc1N0cmluZyh2bSwgcmVzdWx0U3RyaW5nLnN1YnN0cmluZyhiZWdpbkluZGV4LCBl
bmRJbmRleCAtIGJlZ2luSW5kZXgpKTsKICAgICAgICAgICAgIEpTT2JqZWN0KiBwYXJ0ID0gY29u
c3RydWN0RW1wdHlPYmplY3QoJmV4ZWMpOwogICAgICAgICAgICAgcGFydC0+cHV0RGlyZWN0KHZt
LCB0eXBlUHJvcGVydHlOYW1lLCB0eXBlKTsKICAgICAgICAgICAgIHBhcnQtPnB1dERpcmVjdCh2
bSwgdm0ucHJvcGVydHlOYW1lcy0+dmFsdWUsIHZhbHVlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdFByb3RvdHlwZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0UHJv
dG90eXBlLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0UHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQW5keSBWYW5XYWdvbmVyIChh
bmR5QHZhbndhZ29uZXIuZmFtaWx5KQotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtODksNyArODksNyBAQCB2b2lkIEludGxEYXRlVGltZUZvcm1hdFByb3RvdHlwZTo6ZmluaXNo
CiAgICAgVU5VU0VEX1BBUkFNKGdsb2JhbE9iamVjdCk7CiAjZW5kaWYKIAotICAgIHB1dERpcmVj
dFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT50b1N0cmluZ1RhZ1N5bWJv
bCwganNTdHJpbmcoJnZtLCAiT2JqZWN0IiksIFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8
IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSk7CisgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5z
aXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPnRvU3RyaW5nVGFnU3ltYm9sLCBqc1N0cmluZyh2
bSwgIk9iamVjdCIpLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBQcm9wZXJ0eUF0dHJp
YnV0ZTo6UmVhZE9ubHkpOwogfQogCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBJbnRsRGF0ZVRpbWVGb3JtYXRGdW5jRm9ybWF0RGF0ZVRpbWUoRXhlY1N0YXRlKiBzdGF0ZSkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJG
b3JtYXQuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRsTnVtYmVyRm9ybWF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAK
IC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQW5keSBWYW5XYWdvbmVyIChhbmR5QHZhbndhZ29u
ZXIuZmFtaWx5KQogICogQ29weXJpZ2h0IChDKSAyMDE2IFN1a29sc2FrIFNha3NodXdvbmcgKHN1
a29sc2FrQGdtYWlsLmNvbSkKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMTk1LDcgKzE5NSw3IEBAIHZvaWQgSW50bE51bWJlckZvcm1hdDo6aW5pdGlhbGl6ZU51bWJl
ckYKIAogICAgIG1fbnVtYmVyaW5nU3lzdGVtID0gcmVzdWx0LmdldCgibnUiX3MpOwogCi0gICAg
U3RyaW5nIHN0eWxlU3RyaW5nID0gaW50bFN0cmluZ09wdGlvbihzdGF0ZSwgb3B0aW9ucywgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJzdHlsZSIpLCB7ICJkZWNpbWFsIiwgInBlcmNlbnQi
LCAiY3VycmVuY3kiIH0sICJzdHlsZSBtdXN0IGJlIGVpdGhlciBcImRlY2ltYWxcIiwgXCJwZXJj
ZW50XCIsIG9yIFwiY3VycmVuY3lcIiIsICJkZWNpbWFsIik7CisgICAgU3RyaW5nIHN0eWxlU3Ry
aW5nID0gaW50bFN0cmluZ09wdGlvbihzdGF0ZSwgb3B0aW9ucywgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZyh2bSwgInN0eWxlIiksIHsgImRlY2ltYWwiLCAicGVyY2VudCIsICJjdXJyZW5jeSIgfSwg
InN0eWxlIG11c3QgYmUgZWl0aGVyIFwiZGVjaW1hbFwiLCBcInBlcmNlbnRcIiwgb3IgXCJjdXJy
ZW5jeVwiIiwgImRlY2ltYWwiKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lk
KCkpOwogICAgIGlmIChzdHlsZVN0cmluZyA9PSAiZGVjaW1hbCIpCiAgICAgICAgIG1fc3R5bGUg
PSBTdHlsZTo6RGVjaW1hbDsKQEAgLTIwNiw3ICsyMDYsNyBAQCB2b2lkIEludGxOdW1iZXJGb3Jt
YXQ6OmluaXRpYWxpemVOdW1iZXJGCiAgICAgZWxzZQogICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKIAotICAgIFN0cmluZyBjdXJyZW5jeSA9IGludGxTdHJpbmdPcHRpb24oc3RhdGUsIG9w
dGlvbnMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiY3VycmVuY3kiKSwgeyB9LCBudWxs
cHRyLCBudWxscHRyKTsKKyAgICBTdHJpbmcgY3VycmVuY3kgPSBpbnRsU3RyaW5nT3B0aW9uKHN0
YXRlLCBvcHRpb25zLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiY3VycmVuY3kiKSwgeyB9
LCBudWxscHRyLCBudWxscHRyKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lk
KCkpOwogICAgIGlmICghY3VycmVuY3kuaXNOdWxsKCkpIHsKICAgICAgICAgaWYgKGN1cnJlbmN5
Lmxlbmd0aCgpICE9IDMgfHwgIWN1cnJlbmN5LmlzQWxsU3BlY2lhbENoYXJhY3RlcnM8aXNBU0NJ
SUFscGhhPigpKSB7CkBAIC0yMjcsNyArMjI3LDcgQEAgdm9pZCBJbnRsTnVtYmVyRm9ybWF0Ojpp
bml0aWFsaXplTnVtYmVyRgogICAgICAgICBjdXJyZW5jeURpZ2l0cyA9IGNvbXB1dGVDdXJyZW5j
eURpZ2l0cyhjdXJyZW5jeSk7CiAgICAgfQogCi0gICAgU3RyaW5nIGN1cnJlbmN5RGlzcGxheVN0
cmluZyA9IGludGxTdHJpbmdPcHRpb24oc3RhdGUsIG9wdGlvbnMsIElkZW50aWZpZXI6OmZyb21T
dHJpbmcoJnZtLCAiY3VycmVuY3lEaXNwbGF5IiksIHsgImNvZGUiLCAic3ltYm9sIiwgIm5hbWUi
IH0sICJjdXJyZW5jeURpc3BsYXkgbXVzdCBiZSBlaXRoZXIgXCJjb2RlXCIsIFwic3ltYm9sXCIs
IG9yIFwibmFtZVwiIiwgInN5bWJvbCIpOworICAgIFN0cmluZyBjdXJyZW5jeURpc3BsYXlTdHJp
bmcgPSBpbnRsU3RyaW5nT3B0aW9uKHN0YXRlLCBvcHRpb25zLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKHZtLCAiY3VycmVuY3lEaXNwbGF5IiksIHsgImNvZGUiLCAic3ltYm9sIiwgIm5hbWUiIH0s
ICJjdXJyZW5jeURpc3BsYXkgbXVzdCBiZSBlaXRoZXIgXCJjb2RlXCIsIFwic3ltYm9sXCIsIG9y
IFwibmFtZVwiIiwgInN5bWJvbCIpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZv
aWQoKSk7CiAgICAgaWYgKG1fc3R5bGUgPT0gU3R5bGU6OkN1cnJlbmN5KSB7CiAgICAgICAgIGlm
IChjdXJyZW5jeURpc3BsYXlTdHJpbmcgPT0gImNvZGUiKQpAQCAtMjQwLDEzICsyNDAsMTMgQEAg
dm9pZCBJbnRsTnVtYmVyRm9ybWF0Ojppbml0aWFsaXplTnVtYmVyRgogICAgICAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQogCi0gICAgdW5zaWduZWQgbWluaW11bUludGVnZXJE
aWdpdHMgPSBpbnRsTnVtYmVyT3B0aW9uKHN0YXRlLCBvcHRpb25zLCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKCZ2bSwgIm1pbmltdW1JbnRlZ2VyRGlnaXRzIiksIDEsIDIxLCAxKTsKKyAgICB1bnNp
Z25lZCBtaW5pbXVtSW50ZWdlckRpZ2l0cyA9IGludGxOdW1iZXJPcHRpb24oc3RhdGUsIG9wdGlv
bnMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJtaW5pbXVtSW50ZWdlckRpZ2l0cyIpLCAx
LCAyMSwgMSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKICAgICBt
X21pbmltdW1JbnRlZ2VyRGlnaXRzID0gbWluaW11bUludGVnZXJEaWdpdHM7CiAKICAgICB1bnNp
Z25lZCBtaW5pbXVtRnJhY3Rpb25EaWdpdHNEZWZhdWx0ID0gKG1fc3R5bGUgPT0gU3R5bGU6OkN1
cnJlbmN5KSA/IGN1cnJlbmN5RGlnaXRzIDogMDsKIAotICAgIHVuc2lnbmVkIG1pbmltdW1GcmFj
dGlvbkRpZ2l0cyA9IGludGxOdW1iZXJPcHRpb24oc3RhdGUsIG9wdGlvbnMsIElkZW50aWZpZXI6
OmZyb21TdHJpbmcoJnZtLCAibWluaW11bUZyYWN0aW9uRGlnaXRzIiksIDAsIDIwLCBtaW5pbXVt
RnJhY3Rpb25EaWdpdHNEZWZhdWx0KTsKKyAgICB1bnNpZ25lZCBtaW5pbXVtRnJhY3Rpb25EaWdp
dHMgPSBpbnRsTnVtYmVyT3B0aW9uKHN0YXRlLCBvcHRpb25zLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKHZtLCAibWluaW11bUZyYWN0aW9uRGlnaXRzIiksIDAsIDIwLCBtaW5pbXVtRnJhY3Rpb25E
aWdpdHNEZWZhdWx0KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwog
ICAgIG1fbWluaW11bUZyYWN0aW9uRGlnaXRzID0gbWluaW11bUZyYWN0aW9uRGlnaXRzOwogCkBA
IC0yNTgsMjcgKzI1OCwyNyBAQCB2b2lkIEludGxOdW1iZXJGb3JtYXQ6OmluaXRpYWxpemVOdW1i
ZXJGCiAgICAgZWxzZQogICAgICAgICBtYXhpbXVtRnJhY3Rpb25EaWdpdHNEZWZhdWx0ID0gc3Rk
OjptYXgobWluaW11bUZyYWN0aW9uRGlnaXRzLCAzdSk7CiAKLSAgICB1bnNpZ25lZCBtYXhpbXVt
RnJhY3Rpb25EaWdpdHMgPSBpbnRsTnVtYmVyT3B0aW9uKHN0YXRlLCBvcHRpb25zLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKCZ2bSwgIm1heGltdW1GcmFjdGlvbkRpZ2l0cyIpLCBtaW5pbXVtRnJh
Y3Rpb25EaWdpdHMsIDIwLCBtYXhpbXVtRnJhY3Rpb25EaWdpdHNEZWZhdWx0KTsKKyAgICB1bnNp
Z25lZCBtYXhpbXVtRnJhY3Rpb25EaWdpdHMgPSBpbnRsTnVtYmVyT3B0aW9uKHN0YXRlLCBvcHRp
b25zLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAibWF4aW11bUZyYWN0aW9uRGlnaXRzIiks
IG1pbmltdW1GcmFjdGlvbkRpZ2l0cywgMjAsIG1heGltdW1GcmFjdGlvbkRpZ2l0c0RlZmF1bHQp
OwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAgICAgbV9tYXhpbXVt
RnJhY3Rpb25EaWdpdHMgPSBtYXhpbXVtRnJhY3Rpb25EaWdpdHM7CiAKLSAgICBKU1ZhbHVlIG1p
bmltdW1TaWduaWZpY2FudERpZ2l0c1ZhbHVlID0gb3B0aW9ucy0+Z2V0KCZzdGF0ZSwgSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZygmdm0sICJtaW5pbXVtU2lnbmlmaWNhbnREaWdpdHMiKSk7CisgICAg
SlNWYWx1ZSBtaW5pbXVtU2lnbmlmaWNhbnREaWdpdHNWYWx1ZSA9IG9wdGlvbnMtPmdldCgmc3Rh
dGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJtaW5pbXVtU2lnbmlmaWNhbnREaWdpdHMi
KSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKIAotICAgIEpTVmFs
dWUgbWF4aW11bVNpZ25pZmljYW50RGlnaXRzVmFsdWUgPSBvcHRpb25zLT5nZXQoJnN0YXRlLCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgIm1heGltdW1TaWduaWZpY2FudERpZ2l0cyIpKTsK
KyAgICBKU1ZhbHVlIG1heGltdW1TaWduaWZpY2FudERpZ2l0c1ZhbHVlID0gb3B0aW9ucy0+Z2V0
KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIm1heGltdW1TaWduaWZpY2FudERp
Z2l0cyIpKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogCiAgICAg
aWYgKCFtaW5pbXVtU2lnbmlmaWNhbnREaWdpdHNWYWx1ZS5pc1VuZGVmaW5lZCgpIHx8ICFtYXhp
bXVtU2lnbmlmaWNhbnREaWdpdHNWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7Ci0gICAgICAgIHVuc2ln
bmVkIG1pbmltdW1TaWduaWZpY2FudERpZ2l0cyA9IGludGxEZWZhdWx0TnVtYmVyT3B0aW9uKHN0
YXRlLCBtaW5pbXVtU2lnbmlmaWNhbnREaWdpdHNWYWx1ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zygmdm0sICJtaW5pbXVtU2lnbmlmaWNhbnREaWdpdHMiKSwgMSwgMjEsIDEpOworICAgICAgICB1
bnNpZ25lZCBtaW5pbXVtU2lnbmlmaWNhbnREaWdpdHMgPSBpbnRsRGVmYXVsdE51bWJlck9wdGlv
bihzdGF0ZSwgbWluaW11bVNpZ25pZmljYW50RGlnaXRzVmFsdWUsIElkZW50aWZpZXI6OmZyb21T
dHJpbmcodm0sICJtaW5pbXVtU2lnbmlmaWNhbnREaWdpdHMiKSwgMSwgMjEsIDEpOwogICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwotICAgICAgICB1bnNpZ25lZCBt
YXhpbXVtU2lnbmlmaWNhbnREaWdpdHMgPSBpbnRsRGVmYXVsdE51bWJlck9wdGlvbihzdGF0ZSwg
bWF4aW11bVNpZ25pZmljYW50RGlnaXRzVmFsdWUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZt
LCAibWF4aW11bVNpZ25pZmljYW50RGlnaXRzIiksIG1pbmltdW1TaWduaWZpY2FudERpZ2l0cywg
MjEsIDIxKTsKKyAgICAgICAgdW5zaWduZWQgbWF4aW11bVNpZ25pZmljYW50RGlnaXRzID0gaW50
bERlZmF1bHROdW1iZXJPcHRpb24oc3RhdGUsIG1heGltdW1TaWduaWZpY2FudERpZ2l0c1ZhbHVl
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAibWF4aW11bVNpZ25pZmljYW50RGlnaXRzIiks
IG1pbmltdW1TaWduaWZpY2FudERpZ2l0cywgMjEsIDIxKTsKICAgICAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgdm9pZCgpKTsKICAgICAgICAgbV9taW5pbXVtU2lnbmlmaWNhbnREaWdp
dHMgPSBtaW5pbXVtU2lnbmlmaWNhbnREaWdpdHM7CiAgICAgICAgIG1fbWF4aW11bVNpZ25pZmlj
YW50RGlnaXRzID0gbWF4aW11bVNpZ25pZmljYW50RGlnaXRzOwogICAgIH0KIAogICAgIGJvb2wg
dXNlc0ZhbGxiYWNrOwotICAgIGJvb2wgdXNlR3JvdXBpbmcgPSBpbnRsQm9vbGVhbk9wdGlvbihz
dGF0ZSwgb3B0aW9ucywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJ1c2VHcm91cGluZyIp
LCB1c2VzRmFsbGJhY2spOworICAgIGJvb2wgdXNlR3JvdXBpbmcgPSBpbnRsQm9vbGVhbk9wdGlv
bihzdGF0ZSwgb3B0aW9ucywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInVzZUdyb3VwaW5n
IiksIHVzZXNGYWxsYmFjayk7CiAgICAgaWYgKHVzZXNGYWxsYmFjaykKICAgICAgICAgdXNlR3Jv
dXBpbmcgPSB0cnVlOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CkBA
IC0zNjQsNyArMzY0LDcgQEAgSlNWYWx1ZSBJbnRsTnVtYmVyRm9ybWF0Ojpmb3JtYXROdW1iZXIo
RQogICAgIGlmIChVX0ZBSUxVUkUoc3RhdHVzKSkKICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0
aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZUVycm9yKCZzdGF0ZSwgIkZhaWxlZCB0byBmb3JtYXQg
YSBudW1iZXIuIl9zKSk7CiAKLSAgICByZXR1cm4ganNTdHJpbmcoJnN0YXRlLCBTdHJpbmcoYnVm
ZmVyLmRhdGEoKSwgbGVuZ3RoKSk7CisgICAgcmV0dXJuIGpzU3RyaW5nKHZtLCBTdHJpbmcoYnVm
ZmVyLmRhdGEoKSwgbGVuZ3RoKSk7CiB9CiAKIEFTQ0lJTGl0ZXJhbCBJbnRsTnVtYmVyRm9ybWF0
OjpzdHlsZVN0cmluZyhTdHlsZSBzdHlsZSkKQEAgLTQxNSwyMiArNDE1LDIyIEBAIEpTT2JqZWN0
KiBJbnRsTnVtYmVyRm9ybWF0OjpyZXNvbHZlZE9wdGkKICAgICB9CiAKICAgICBKU09iamVjdCog
b3B0aW9ucyA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KCZzdGF0ZSk7Ci0gICAgb3B0aW9ucy0+cHV0
RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sb2NhbGUsIGpzU3RyaW5nKCZzdGF0ZSwgbV9s
b2NhbGUpKTsKLSAgICBvcHRpb25zLT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJp
bmcoJnZtLCAibnVtYmVyaW5nU3lzdGVtIiksIGpzU3RyaW5nKCZzdGF0ZSwgbV9udW1iZXJpbmdT
eXN0ZW0pKTsKLSAgICBvcHRpb25zLT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJp
bmcoJnZtLCAic3R5bGUiKSwganNOb250cml2aWFsU3RyaW5nKCZzdGF0ZSwgc3R5bGVTdHJpbmco
bV9zdHlsZSkpKTsKKyAgICBvcHRpb25zLT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMt
PmxvY2FsZSwganNTdHJpbmcodm0sIG1fbG9jYWxlKSk7CisgICAgb3B0aW9ucy0+cHV0RGlyZWN0
KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAibnVtYmVyaW5nU3lzdGVtIiksIGpzU3Ry
aW5nKHZtLCBtX251bWJlcmluZ1N5c3RlbSkpOworICAgIG9wdGlvbnMtPnB1dERpcmVjdCh2bSwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInN0eWxlIiksIGpzTm9udHJpdmlhbFN0cmluZyh2
bSwgc3R5bGVTdHJpbmcobV9zdHlsZSkpKTsKICAgICBpZiAobV9zdHlsZSA9PSBTdHlsZTo6Q3Vy
cmVuY3kpIHsKLSAgICAgICAgb3B0aW9ucy0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKCZ2bSwgImN1cnJlbmN5IiksIGpzTm9udHJpdmlhbFN0cmluZygmc3RhdGUsIG1fY3Vy
cmVuY3kpKTsKLSAgICAgICAgb3B0aW9ucy0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKCZ2bSwgImN1cnJlbmN5RGlzcGxheSIpLCBqc05vbnRyaXZpYWxTdHJpbmcoJnN0YXRl
LCBjdXJyZW5jeURpc3BsYXlTdHJpbmcobV9jdXJyZW5jeURpc3BsYXkpKSk7CisgICAgICAgIG9w
dGlvbnMtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImN1cnJlbmN5
IiksIGpzTm9udHJpdmlhbFN0cmluZyh2bSwgbV9jdXJyZW5jeSkpOworICAgICAgICBvcHRpb25z
LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJjdXJyZW5jeURpc3Bs
YXkiKSwganNOb250cml2aWFsU3RyaW5nKHZtLCBjdXJyZW5jeURpc3BsYXlTdHJpbmcobV9jdXJy
ZW5jeURpc3BsYXkpKSk7CiAgICAgfQotICAgIG9wdGlvbnMtPnB1dERpcmVjdCh2bSwgSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZygmdm0sICJtaW5pbXVtSW50ZWdlckRpZ2l0cyIpLCBqc051bWJlciht
X21pbmltdW1JbnRlZ2VyRGlnaXRzKSk7Ci0gICAgb3B0aW9ucy0+cHV0RGlyZWN0KHZtLCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgIm1pbmltdW1GcmFjdGlvbkRpZ2l0cyIpLCBqc051bWJl
cihtX21pbmltdW1GcmFjdGlvbkRpZ2l0cykpOwotICAgIG9wdGlvbnMtPnB1dERpcmVjdCh2bSwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJtYXhpbXVtRnJhY3Rpb25EaWdpdHMiKSwganNO
dW1iZXIobV9tYXhpbXVtRnJhY3Rpb25EaWdpdHMpKTsKKyAgICBvcHRpb25zLT5wdXREaXJlY3Qo
dm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJtaW5pbXVtSW50ZWdlckRpZ2l0cyIpLCBq
c051bWJlcihtX21pbmltdW1JbnRlZ2VyRGlnaXRzKSk7CisgICAgb3B0aW9ucy0+cHV0RGlyZWN0
KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAibWluaW11bUZyYWN0aW9uRGlnaXRzIiks
IGpzTnVtYmVyKG1fbWluaW11bUZyYWN0aW9uRGlnaXRzKSk7CisgICAgb3B0aW9ucy0+cHV0RGly
ZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAibWF4aW11bUZyYWN0aW9uRGlnaXRz
IiksIGpzTnVtYmVyKG1fbWF4aW11bUZyYWN0aW9uRGlnaXRzKSk7CiAgICAgaWYgKG1fbWluaW11
bVNpZ25pZmljYW50RGlnaXRzKSB7CiAgICAgICAgIEFTU0VSVChtX21heGltdW1TaWduaWZpY2Fu
dERpZ2l0cyk7Ci0gICAgICAgIG9wdGlvbnMtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZygmdm0sICJtaW5pbXVtU2lnbmlmaWNhbnREaWdpdHMiKSwganNOdW1iZXIobV9taW5p
bXVtU2lnbmlmaWNhbnREaWdpdHMpKTsKLSAgICAgICAgb3B0aW9ucy0+cHV0RGlyZWN0KHZtLCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgIm1heGltdW1TaWduaWZpY2FudERpZ2l0cyIpLCBq
c051bWJlcihtX21heGltdW1TaWduaWZpY2FudERpZ2l0cykpOworICAgICAgICBvcHRpb25zLT5w
dXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJtaW5pbXVtU2lnbmlmaWNh
bnREaWdpdHMiKSwganNOdW1iZXIobV9taW5pbXVtU2lnbmlmaWNhbnREaWdpdHMpKTsKKyAgICAg
ICAgb3B0aW9ucy0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAibWF4
aW11bVNpZ25pZmljYW50RGlnaXRzIiksIGpzTnVtYmVyKG1fbWF4aW11bVNpZ25pZmljYW50RGln
aXRzKSk7CiAgICAgfQotICAgIG9wdGlvbnMtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZygmdm0sICJ1c2VHcm91cGluZyIpLCBqc0Jvb2xlYW4obV91c2VHcm91cGluZykpOwor
ICAgIG9wdGlvbnMtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInVz
ZUdyb3VwaW5nIiksIGpzQm9vbGVhbihtX3VzZUdyb3VwaW5nKSk7CiAgICAgcmV0dXJuIG9wdGlv
bnM7CiB9CiAKQEAgLTUzNCw4ICs1MzQsOCBAQCBKU1ZhbHVlIEludGxOdW1iZXJGb3JtYXQ6OmZv
cm1hdFRvUGFydHMoCiAgICAgdW5zaWduZWQgaW5kZXggPSAwOwogCiAgICAgYXV0byByZXN1bHRT
dHJpbmcgPSBTdHJpbmcocmVzdWx0LmRhdGEoKSwgcmVzdWx0TGVuZ3RoKTsKLSAgICBhdXRvIHR5
cGVQcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgInR5cGUiKTsKLSAg
ICBhdXRvIGxpdGVyYWxTdHJpbmcgPSBqc1N0cmluZygmZXhlYywgImxpdGVyYWwiX3MpOworICAg
IGF1dG8gdHlwZVByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJ0eXBl
Iik7CisgICAgYXV0byBsaXRlcmFsU3RyaW5nID0ganNTdHJpbmcodm0sICJsaXRlcmFsIl9zKTsK
IAogICAgIGludDMyX3QgY3VycmVudEluZGV4ID0gMDsKICAgICB3aGlsZSAoY3VycmVudEluZGV4
IDwgcmVzdWx0TGVuZ3RoKSB7CkBAIC01NDMsOCArNTQzLDggQEAgSlNWYWx1ZSBJbnRsTnVtYmVy
Rm9ybWF0Ojpmb3JtYXRUb1BhcnRzKAogICAgICAgICBhdXRvIGZpZWxkVHlwZSA9IGZpZWxkc1tj
dXJyZW50SW5kZXhdLnR5cGU7CiAgICAgICAgIHdoaWxlIChjdXJyZW50SW5kZXggPCByZXN1bHRM
ZW5ndGggJiYgZmllbGRzW2N1cnJlbnRJbmRleF0udHlwZSA9PSBmaWVsZFR5cGUpCiAgICAgICAg
ICAgICArK2N1cnJlbnRJbmRleDsKLSAgICAgICAgYXV0byBwYXJ0VHlwZSA9IGZpZWxkVHlwZSA9
PSBsaXRlcmFsRmllbGRUeXBlID8gbGl0ZXJhbFN0cmluZyA6IGpzU3RyaW5nKCZleGVjLCBwYXJ0
VHlwZVN0cmluZyhVTnVtYmVyRm9ybWF0RmllbGRzKGZpZWxkVHlwZSksIHZhbHVlKSk7Ci0gICAg
ICAgIGF1dG8gcGFydFZhbHVlID0ganNTdWJzdHJpbmcoJnZtLCByZXN1bHRTdHJpbmcsIHN0YXJ0
SW5kZXgsIGN1cnJlbnRJbmRleCAtIHN0YXJ0SW5kZXgpOworICAgICAgICBhdXRvIHBhcnRUeXBl
ID0gZmllbGRUeXBlID09IGxpdGVyYWxGaWVsZFR5cGUgPyBsaXRlcmFsU3RyaW5nIDoganNTdHJp
bmcodm0sIHBhcnRUeXBlU3RyaW5nKFVOdW1iZXJGb3JtYXRGaWVsZHMoZmllbGRUeXBlKSwgdmFs
dWUpKTsKKyAgICAgICAgYXV0byBwYXJ0VmFsdWUgPSBqc1N1YnN0cmluZyh2bSwgcmVzdWx0U3Ry
aW5nLCBzdGFydEluZGV4LCBjdXJyZW50SW5kZXggLSBzdGFydEluZGV4KTsKICAgICAgICAgSlNP
YmplY3QqIHBhcnQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdCgmZXhlYyk7CiAgICAgICAgIHBhcnQt
PnB1dERpcmVjdCh2bSwgdHlwZVByb3BlcnR5TmFtZSwgcGFydFR5cGUpOwogICAgICAgICBwYXJ0
LT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnZhbHVlLCBwYXJ0VmFsdWUpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdFByb3RvdHlw
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51
bWJlckZvcm1hdFByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXRQcm90b3R5cGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxNSBBbmR5IFZh
bldhZ29uZXIgKGFuZHlAdmFud2Fnb25lci5mYW1pbHkpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIw
MTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC04Niw3ICs4Niw3IEBAIHZvaWQgSW50bE51bWJlckZvcm1hdFByb3RvdHlw
ZTo6ZmluaXNoQ3IKICAgICBVTlVTRURfUEFSQU0oZ2xvYmFsT2JqZWN0KTsKICNlbmRpZgogCi0g
ICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPnRvU3Ry
aW5nVGFnU3ltYm9sLCBqc1N0cmluZygmdm0sICJPYmplY3QiKSwgUHJvcGVydHlBdHRyaWJ1dGU6
OkRvbnRFbnVtIHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KTsKKyAgICBwdXREaXJlY3RX
aXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+dG9TdHJpbmdUYWdTeW1ib2ws
IGpzU3RyaW5nKHZtLCAiT2JqZWN0IiksIFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8IFBy
b3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSk7CiB9CiAKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIEludGxOdW1iZXJGb3JtYXRGdW5jRm9ybWF0TnVtYmVyKEV4ZWNTdGF0ZSog
c3RhdGUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsT2JqZWN0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsT2JqZWN0
LmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW50bE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFuZHkgVmFuV2Fnb25lciAoYW5keUB2YW53YWdvbmVyLmZhbWlseSkK
ICAqIENvcHlyaWdodCAoQykgMjAxNSBTdWtvbHNhayBTYWtzaHV3b25nIChzdWtvbHNha0BnbWFp
bC5jb20pCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04MjIsNyArODIyLDcg
QEAgc3RhdGljIEpTQXJyYXkqIGxvb2t1cFN1cHBvcnRlZExvY2FsZXMoRQogICAgICAgICBTdHJp
bmcgbm9FeHRlbnNpb25zTG9jYWxlID0gcmVtb3ZlVW5pY29kZUxvY2FsZUV4dGVuc2lvbihsb2Nh
bGUpOwogICAgICAgICBTdHJpbmcgYXZhaWxhYmxlTG9jYWxlID0gYmVzdEF2YWlsYWJsZUxvY2Fs
ZShhdmFpbGFibGVMb2NhbGVzLCBub0V4dGVuc2lvbnNMb2NhbGUpOwogICAgICAgICBpZiAoIWF2
YWlsYWJsZUxvY2FsZS5pc051bGwoKSkgewotICAgICAgICAgICAgc3Vic2V0LT5wdXREaXJlY3RJ
bmRleCgmc3RhdGUsIGluZGV4KyssIGpzU3RyaW5nKCZzdGF0ZSwgbG9jYWxlKSk7CisgICAgICAg
ICAgICBzdWJzZXQtPnB1dERpcmVjdEluZGV4KCZzdGF0ZSwgaW5kZXgrKywganNTdHJpbmcodm0s
IGxvY2FsZSkpOwogICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0
cik7CiAgICAgICAgIH0KICAgICB9CkBAIC04NTksNyArODU5LDcgQEAgSlNWYWx1ZSBzdXBwb3J0
ZWRMb2NhbGVzKEV4ZWNTdGF0ZSYgc3RhdAogICAgICAgICA6IGxvb2t1cFN1cHBvcnRlZExvY2Fs
ZXMoc3RhdGUsIGF2YWlsYWJsZUxvY2FsZXMsIHJlcXVlc3RlZExvY2FsZXMpOwogICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIEpTVmFsdWUoKSk7CiAKLSAgICBQcm9wZXJ0eU5hbWVBcnJh
eSBrZXlzKCZ2bSwgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5ncywgUHJpdmF0ZVN5bWJvbE1vZGU6
OkV4Y2x1ZGUpOworICAgIFByb3BlcnR5TmFtZUFycmF5IGtleXModm0sIFByb3BlcnR5TmFtZU1v
ZGU6OlN0cmluZ3MsIFByaXZhdGVTeW1ib2xNb2RlOjpFeGNsdWRlKTsKICAgICBzdXBwb3J0ZWRM
b2NhbGVzLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKHN1cHBvcnRlZExvY2FsZXMsICZzdGF0ZSwga2V5
cywgRW51bWVyYXRpb25Nb2RlKCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpT
VmFsdWUoKSk7CiAKQEAgLTkzNyw3ICs5MzcsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGludGxPYmplY3RGCiAgICAgfQogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5n
dGg7ICsraSkgewotICAgICAgICBsb2NhbGVBcnJheS0+cHV0RGlyZWN0SW5kZXgoc3RhdGUsIGks
IGpzU3RyaW5nKHN0YXRlLCBsb2NhbGVMaXN0W2ldKSk7CisgICAgICAgIGxvY2FsZUFycmF5LT5w
dXREaXJlY3RJbmRleChzdGF0ZSwgaSwganNTdHJpbmcodm0sIGxvY2FsZUxpc3RbaV0pKTsKICAg
ICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAg
fQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUobG9jYWxlQXJyYXkpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFBsdXJhbFJ1bGVzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUGx1cmFsUnVsZXMuY3BwCShyZXZp
c2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUGx1cmFs
UnVsZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzQsMzQgKzEzNCwzNCBAQCB2b2lkIEludGxQ
bHVyYWxSdWxlczo6aW5pdGlhbGl6ZVBsdXJhbFJ1CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBTdHJpbmcgdHlwZVN0cmluZyA9IGludGxTdHJpbmdPcHRpb24oZXhlYywgb3B0aW9ucywg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJ0eXBlIiksIHsgImNhcmRpbmFsIiwgIm9yZGlu
YWwiIH0sICJ0eXBlIG11c3QgYmUgXCJjYXJkaW5hbFwiIG9yIFwib3JkaW5hbFwiIiwgImNhcmRp
bmFsIik7CisgICAgU3RyaW5nIHR5cGVTdHJpbmcgPSBpbnRsU3RyaW5nT3B0aW9uKGV4ZWMsIG9w
dGlvbnMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJ0eXBlIiksIHsgImNhcmRpbmFsIiwg
Im9yZGluYWwiIH0sICJ0eXBlIG11c3QgYmUgXCJjYXJkaW5hbFwiIG9yIFwib3JkaW5hbFwiIiwg
ImNhcmRpbmFsIik7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKICAg
ICBtX3R5cGUgPSB0eXBlU3RyaW5nID09ICJvcmRpbmFsIiA/IFVQTFVSQUxfVFlQRV9PUkRJTkFM
IDogVVBMVVJBTF9UWVBFX0NBUkRJTkFMOwogCi0gICAgdW5zaWduZWQgbWluaW11bUludGVnZXJE
aWdpdHMgPSBpbnRsTnVtYmVyT3B0aW9uKGV4ZWMsIG9wdGlvbnMsIElkZW50aWZpZXI6OmZyb21T
dHJpbmcoJnZtLCAibWluaW11bUludGVnZXJEaWdpdHMiKSwgMSwgMjEsIDEpOworICAgIHVuc2ln
bmVkIG1pbmltdW1JbnRlZ2VyRGlnaXRzID0gaW50bE51bWJlck9wdGlvbihleGVjLCBvcHRpb25z
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAibWluaW11bUludGVnZXJEaWdpdHMiKSwgMSwg
MjEsIDEpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAgICAgbV9t
aW5pbXVtSW50ZWdlckRpZ2l0cyA9IG1pbmltdW1JbnRlZ2VyRGlnaXRzOwogCiAgICAgdW5zaWdu
ZWQgbWluaW11bUZyYWN0aW9uRGlnaXRzRGVmYXVsdCA9IDA7Ci0gICAgdW5zaWduZWQgbWluaW11
bUZyYWN0aW9uRGlnaXRzID0gaW50bE51bWJlck9wdGlvbihleGVjLCBvcHRpb25zLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKCZ2bSwgIm1pbmltdW1GcmFjdGlvbkRpZ2l0cyIpLCAwLCAyMCwgbWlu
aW11bUZyYWN0aW9uRGlnaXRzRGVmYXVsdCk7CisgICAgdW5zaWduZWQgbWluaW11bUZyYWN0aW9u
RGlnaXRzID0gaW50bE51bWJlck9wdGlvbihleGVjLCBvcHRpb25zLCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKHZtLCAibWluaW11bUZyYWN0aW9uRGlnaXRzIiksIDAsIDIwLCBtaW5pbXVtRnJhY3Rp
b25EaWdpdHNEZWZhdWx0KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkp
OwogICAgIG1fbWluaW11bUZyYWN0aW9uRGlnaXRzID0gbWluaW11bUZyYWN0aW9uRGlnaXRzOwog
CiAgICAgdW5zaWduZWQgbWF4aW11bUZyYWN0aW9uRGlnaXRzRGVmYXVsdCA9IHN0ZDo6bWF4KG1p
bmltdW1GcmFjdGlvbkRpZ2l0cywgM3UpOwotICAgIHVuc2lnbmVkIG1heGltdW1GcmFjdGlvbkRp
Z2l0cyA9IGludGxOdW1iZXJPcHRpb24oZXhlYywgb3B0aW9ucywgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZygmdm0sICJtYXhpbXVtRnJhY3Rpb25EaWdpdHMiKSwgbWluaW11bUZyYWN0aW9uRGlnaXRz
LCAyMCwgbWF4aW11bUZyYWN0aW9uRGlnaXRzRGVmYXVsdCk7CisgICAgdW5zaWduZWQgbWF4aW11
bUZyYWN0aW9uRGlnaXRzID0gaW50bE51bWJlck9wdGlvbihleGVjLCBvcHRpb25zLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKHZtLCAibWF4aW11bUZyYWN0aW9uRGlnaXRzIiksIG1pbmltdW1GcmFj
dGlvbkRpZ2l0cywgMjAsIG1heGltdW1GcmFjdGlvbkRpZ2l0c0RlZmF1bHQpOwogICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAgICAgbV9tYXhpbXVtRnJhY3Rpb25EaWdp
dHMgPSBtYXhpbXVtRnJhY3Rpb25EaWdpdHM7CiAKLSAgICBKU1ZhbHVlIG1pbmltdW1TaWduaWZp
Y2FudERpZ2l0c1ZhbHVlID0gb3B0aW9ucy0+Z2V0KCZleGVjLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKCZ2bSwgIm1pbmltdW1TaWduaWZpY2FudERpZ2l0cyIpKTsKKyAgICBKU1ZhbHVlIG1pbmlt
dW1TaWduaWZpY2FudERpZ2l0c1ZhbHVlID0gb3B0aW9ucy0+Z2V0KCZleGVjLCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKHZtLCAibWluaW11bVNpZ25pZmljYW50RGlnaXRzIikpOwogICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAKLSAgICBKU1ZhbHVlIG1heGltdW1TaWdu
aWZpY2FudERpZ2l0c1ZhbHVlID0gb3B0aW9ucy0+Z2V0KCZleGVjLCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKCZ2bSwgIm1heGltdW1TaWduaWZpY2FudERpZ2l0cyIpKTsKKyAgICBKU1ZhbHVlIG1h
eGltdW1TaWduaWZpY2FudERpZ2l0c1ZhbHVlID0gb3B0aW9ucy0+Z2V0KCZleGVjLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKHZtLCAibWF4aW11bVNpZ25pZmljYW50RGlnaXRzIikpOwogICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAKICAgICBpZiAoIW1pbmltdW1TaWdu
aWZpY2FudERpZ2l0c1ZhbHVlLmlzVW5kZWZpbmVkKCkgfHwgIW1heGltdW1TaWduaWZpY2FudERp
Z2l0c1ZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKLSAgICAgICAgdW5zaWduZWQgbWluaW11bVNpZ25p
ZmljYW50RGlnaXRzID0gaW50bE51bWJlck9wdGlvbihleGVjLCBvcHRpb25zLCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKCZ2bSwgIm1pbmltdW1TaWduaWZpY2FudERpZ2l0cyIpLCAxLCAyMSwgMSk7
CisgICAgICAgIHVuc2lnbmVkIG1pbmltdW1TaWduaWZpY2FudERpZ2l0cyA9IGludGxOdW1iZXJP
cHRpb24oZXhlYywgb3B0aW9ucywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIm1pbmltdW1T
aWduaWZpY2FudERpZ2l0cyIpLCAxLCAyMSwgMSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIHZvaWQoKSk7Ci0gICAgICAgIHVuc2lnbmVkIG1heGltdW1TaWduaWZpY2FudERp
Z2l0cyA9IGludGxOdW1iZXJPcHRpb24oZXhlYywgb3B0aW9ucywgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZygmdm0sICJtYXhpbXVtU2lnbmlmaWNhbnREaWdpdHMiKSwgbWluaW11bVNpZ25pZmljYW50
RGlnaXRzLCAyMSwgMjEpOworICAgICAgICB1bnNpZ25lZCBtYXhpbXVtU2lnbmlmaWNhbnREaWdp
dHMgPSBpbnRsTnVtYmVyT3B0aW9uKGV4ZWMsIG9wdGlvbnMsIElkZW50aWZpZXI6OmZyb21TdHJp
bmcodm0sICJtYXhpbXVtU2lnbmlmaWNhbnREaWdpdHMiKSwgbWluaW11bVNpZ25pZmljYW50RGln
aXRzLCAyMSwgMjEpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkp
OwogICAgICAgICBtX21pbmltdW1TaWduaWZpY2FudERpZ2l0cyA9IG1pbmltdW1TaWduaWZpY2Fu
dERpZ2l0czsKICAgICAgICAgbV9tYXhpbXVtU2lnbmlmaWNhbnREaWdpdHMgPSBtYXhpbXVtU2ln
bmlmaWNhbnREaWdpdHM7CkBAIC0yMDcsMTQgKzIwNywxNCBAQCBKU09iamVjdCogSW50bFBsdXJh
bFJ1bGVzOjpyZXNvbHZlZE9wdGlvCiAgICAgfQogCiAgICAgSlNPYmplY3QqIG9wdGlvbnMgPSBj
b25zdHJ1Y3RFbXB0eU9iamVjdCgmZXhlYyk7Ci0gICAgb3B0aW9ucy0+cHV0RGlyZWN0KHZtLCB2
bS5wcm9wZXJ0eU5hbWVzLT5sb2NhbGUsIGpzTm9udHJpdmlhbFN0cmluZygmZXhlYywgbV9sb2Nh
bGUpKTsKLSAgICBvcHRpb25zLT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmco
JnZtLCAidHlwZSIpLCBqc05vbnRyaXZpYWxTdHJpbmcoJmV4ZWMsIG1fdHlwZSA9PSBVUExVUkFM
X1RZUEVfT1JESU5BTCA/ICJvcmRpbmFsIl9zIDogImNhcmRpbmFsIl9zKSk7Ci0gICAgb3B0aW9u
cy0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgIm1pbmltdW1JbnRl
Z2VyRGlnaXRzIiksIGpzTnVtYmVyKG1fbWluaW11bUludGVnZXJEaWdpdHMpKTsKLSAgICBvcHRp
b25zLT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAibWluaW11bUZy
YWN0aW9uRGlnaXRzIiksIGpzTnVtYmVyKG1fbWluaW11bUZyYWN0aW9uRGlnaXRzKSk7Ci0gICAg
b3B0aW9ucy0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgIm1heGlt
dW1GcmFjdGlvbkRpZ2l0cyIpLCBqc051bWJlcihtX21heGltdW1GcmFjdGlvbkRpZ2l0cykpOwor
ICAgIG9wdGlvbnMtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bG9jYWxlLCBqc05v
bnRyaXZpYWxTdHJpbmcodm0sIG1fbG9jYWxlKSk7CisgICAgb3B0aW9ucy0+cHV0RGlyZWN0KHZt
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAidHlwZSIpLCBqc05vbnRyaXZpYWxTdHJpbmco
dm0sIG1fdHlwZSA9PSBVUExVUkFMX1RZUEVfT1JESU5BTCA/ICJvcmRpbmFsIl9zIDogImNhcmRp
bmFsIl9zKSk7CisgICAgb3B0aW9ucy0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKHZtLCAibWluaW11bUludGVnZXJEaWdpdHMiKSwganNOdW1iZXIobV9taW5pbXVtSW50ZWdl
ckRpZ2l0cykpOworICAgIG9wdGlvbnMtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZyh2bSwgIm1pbmltdW1GcmFjdGlvbkRpZ2l0cyIpLCBqc051bWJlcihtX21pbmltdW1GcmFj
dGlvbkRpZ2l0cykpOworICAgIG9wdGlvbnMtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyh2bSwgIm1heGltdW1GcmFjdGlvbkRpZ2l0cyIpLCBqc051bWJlcihtX21heGltdW1G
cmFjdGlvbkRpZ2l0cykpOwogICAgIGlmIChtX21pbmltdW1TaWduaWZpY2FudERpZ2l0cykgewot
ICAgICAgICBvcHRpb25zLT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZt
LCAibWluaW11bVNpZ25pZmljYW50RGlnaXRzIiksIGpzTnVtYmVyKG1fbWluaW11bVNpZ25pZmlj
YW50RGlnaXRzLnZhbHVlKCkpKTsKLSAgICAgICAgb3B0aW9ucy0+cHV0RGlyZWN0KHZtLCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgIm1heGltdW1TaWduaWZpY2FudERpZ2l0cyIpLCBqc051
bWJlcihtX21heGltdW1TaWduaWZpY2FudERpZ2l0cy52YWx1ZSgpKSk7CisgICAgICAgIG9wdGlv
bnMtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIm1pbmltdW1TaWdu
aWZpY2FudERpZ2l0cyIpLCBqc051bWJlcihtX21pbmltdW1TaWduaWZpY2FudERpZ2l0cy52YWx1
ZSgpKSk7CisgICAgICAgIG9wdGlvbnMtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZyh2bSwgIm1heGltdW1TaWduaWZpY2FudERpZ2l0cyIpLCBqc051bWJlcihtX21heGltdW1T
aWduaWZpY2FudERpZ2l0cy52YWx1ZSgpKSk7CiAgICAgfQogCiAjaWYgSEFWRShJQ1VfUExVUkFM
UlVMRVNfS0VZV09SRFMpCkBAIC0yMzQsMTAgKzIzNCwxMCBAQCBKU09iamVjdCogSW50bFBsdXJh
bFJ1bGVzOjpyZXNvbHZlZE9wdGlvCiAgICAgdW5zaWduZWQgaW5kZXggPSAwOwogICAgIHdoaWxl
IChjb25zdCBjaGFyKiByZXN1bHQgPSB1ZW51bV9uZXh0KGtleXdvcmRzLmdldCgpLCAmcmVzdWx0
TGVuZ3RoLCAmc3RhdHVzKSkgewogICAgICAgICBBU1NFUlQoVV9TVUNDRVNTKHN0YXR1cykpOwot
ICAgICAgICBjYXRlZ29yaWVzLT5wdXREaXJlY3RJbmRleCgmZXhlYywgaW5kZXgrKywganNOb250
cml2aWFsU3RyaW5nKCZleGVjLCBTdHJpbmcocmVzdWx0LCByZXN1bHRMZW5ndGgpKSk7CisgICAg
ICAgIGNhdGVnb3JpZXMtPnB1dERpcmVjdEluZGV4KCZleGVjLCBpbmRleCsrLCBqc05vbnRyaXZp
YWxTdHJpbmcodm0sIFN0cmluZyhyZXN1bHQsIHJlc3VsdExlbmd0aCkpKTsKICAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICB9Ci0gICAgb3B0aW9ucy0+cHV0RGly
ZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgInBsdXJhbENhdGVnb3JpZXMiKSwg
Y2F0ZWdvcmllcyk7CisgICAgb3B0aW9ucy0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKHZtLCAicGx1cmFsQ2F0ZWdvcmllcyIpLCBjYXRlZ29yaWVzKTsKICNlbmRpZgogCiAg
ICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBvcHRpb25zKTsKQEAgLTI1NCw3ICsyNTQsNyBA
QCBKU1ZhbHVlIEludGxQbHVyYWxSdWxlczo6c2VsZWN0KEV4ZWNTdGF0CiAgICAgICAgIHJldHVy
biB0aHJvd1R5cGVFcnJvcigmZXhlYywgc2NvcGUsICJJbnRsLlBsdXJhbFJ1bGVzLnByb3RvdHlw
ZS5zZWxlY3QgY2FsbGVkIG9uIHZhbHVlIHRoYXQncyBub3QgYW4gb2JqZWN0IGluaXRpYWxpemVk
IGFzIGEgUGx1cmFsUnVsZXMiX3MpOwogCiAgICAgaWYgKCFzdGQ6OmlzZmluaXRlKHZhbHVlKSkK
LSAgICAgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZygmZXhlYywgIm90aGVyIl9zKTsKKyAg
ICAgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyh2bSwgIm90aGVyIl9zKTsKIAogI2lmIEhB
VkUoSUNVX1BMVVJBTFJVTEVTX1dJVEhfRk9STUFUKQogICAgIFVFcnJvckNvZGUgc3RhdHVzID0g
VV9aRVJPX0VSUk9SOwpAQCAtMjg2LDcgKzI4Niw3IEBAIEpTVmFsdWUgSW50bFBsdXJhbFJ1bGVz
OjpzZWxlY3QoRXhlY1N0YXQKICAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKCZleGVjLCBz
Y29wZSwgImZhaWxlZCB0byBzZWxlY3QgcGx1cmFsIHZhbHVlIl9zKTsKICNlbmRpZgogCi0gICAg
cmV0dXJuIGpzU3RyaW5nKCZleGVjLCBTdHJpbmcocmVzdWx0LmRhdGEoKSwgbGVuZ3RoKSk7Cisg
ICAgcmV0dXJuIGpzU3RyaW5nKHZtLCBTdHJpbmcocmVzdWx0LmRhdGEoKSwgbGVuZ3RoKSk7CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSW50bFBsdXJhbFJ1bGVzUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUGx1cmFsUnVsZXNQcm90b3R5cGUuY3BwCShyZXZpc2lv
biAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUGx1cmFsUnVs
ZXNQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENv
cHlyaWdodCAoQykgMjAxOCBBbmR5IFZhbldhZ29uZXIgKGFuZHlAdmFud2Fnb25lci5mYW1pbHkp
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03NCw3ICs3NSw3IEBAIHZvaWQgSW50
bFBsdXJhbFJ1bGVzUHJvdG90eXBlOjpmaW5pc2hDcmUKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVh
dGlvbih2bSk7CiAKLSAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVy
dHlOYW1lcy0+dG9TdHJpbmdUYWdTeW1ib2wsIGpzU3RyaW5nKCZ2bSwgIk9iamVjdCIpLCBQcm9w
ZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpOwor
ICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT50b1N0
cmluZ1RhZ1N5bWJvbCwganNTdHJpbmcodm0sICJPYmplY3QiKSwgUHJvcGVydHlBdHRyaWJ1dGU6
OkRvbnRFbnVtIHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KTsKIH0KIAogRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBJbnRsUGx1cmFsUnVsZXNQcm90b3R5cGVGdW5jU2VsZWN0KEV4
ZWNTdGF0ZSogc3RhdGUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Fy
cmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJh
eS5oCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0FycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdo
dCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29weXJp
Z2h0IChDKSAyMDAzLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENv
cHlyaWdodCAoQykgMjAwMy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTI4OSw3ICsyODksNyBAQCBKU0FycmF5KiBhc0FycmF5KEpT
VmFsdWUpOwogCiBpbmxpbmUgSlNBcnJheSogYXNBcnJheShKU0NlbGwqIGNlbGwpCiB7Ci0gICAg
QVNTRVJUKGNlbGwtPmluaGVyaXRzPEpTQXJyYXk+KCpjZWxsLT52bSgpKSk7CisgICAgQVNTRVJU
KGNlbGwtPmluaGVyaXRzPEpTQXJyYXk+KGNlbGwtPnZtKCkpKTsKICAgICByZXR1cm4ganNDYXN0
PEpTQXJyYXkqPihjZWxsKTsKIH0KIApAQCAtMzAwLDcgKzMwMCw3IEBAIGlubGluZSBKU0FycmF5
KiBhc0FycmF5KEpTVmFsdWUgdmFsdWUpCiAKIGlubGluZSBib29sIGlzSlNBcnJheShKU0NlbGwq
IGNlbGwpCiB7Ci0gICAgQVNTRVJUKChjZWxsLT5jbGFzc0luZm8oKmNlbGwtPnZtKCkpID09IEpT
QXJyYXk6OmluZm8oKSkgPT0gKGNlbGwtPnR5cGUoKSA9PSBBcnJheVR5cGUpKTsKKyAgICBBU1NF
UlQoKGNlbGwtPmNsYXNzSW5mbyhjZWxsLT52bSgpKSA9PSBKU0FycmF5OjppbmZvKCkpID09IChj
ZWxsLT50eXBlKCkgPT0gQXJyYXlUeXBlKSk7CiAgICAgcmV0dXJuIGNlbGwtPnR5cGUoKSA9PSBB
cnJheVR5cGU7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJy
YXlCdWZmZXJQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyUHJvdG90eXBlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0xMTYsNyArMTE2LDcgQEAgdm9pZCBKU0FycmF5QnVmZmVy
UHJvdG90eXBlOjpmaW5pc2hDcmVhdAogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAg
ICAKICAgICBKU0NfTkFUSVZFX0ZVTkNUSU9OX1dJVEhPVVRfVFJBTlNJVElPTih2bS5wcm9wZXJ0
eU5hbWVzLT5zbGljZSwgYXJyYXlCdWZmZXJQcm90b0Z1bmNTbGljZSwgc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSksIDIpOwotICAgIHB1dERpcmVjdFdp
dGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT50b1N0cmluZ1RhZ1N5bWJvbCwg
anNTdHJpbmcoJnZtLCBhcnJheUJ1ZmZlclNoYXJpbmdNb2RlTmFtZShtX3NoYXJpbmdNb2RlKSks
IFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25s
eSk7CisgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMt
PnRvU3RyaW5nVGFnU3ltYm9sLCBqc1N0cmluZyh2bSwgYXJyYXlCdWZmZXJTaGFyaW5nTW9kZU5h
bWUobV9zaGFyaW5nTW9kZSkpLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBQcm9wZXJ0
eUF0dHJpYnV0ZTo6UmVhZE9ubHkpOwogICAgIGlmIChtX3NoYXJpbmdNb2RlID09IEFycmF5QnVm
ZmVyU2hhcmluZ01vZGU6OkRlZmF1bHQpCiAgICAgICAgIEpTQ19OQVRJVkVfR0VUVEVSX1dJVEhP
VVRfVFJBTlNJVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5ieXRlTGVuZ3RoLCBhcnJheUJ1ZmZlclBy
b3RvR2V0dGVyRnVuY0J5dGVMZW5ndGgsIFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8IFBy
b3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSk7CiAgICAgZWxzZQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmNwcAkocmV2aXNp
b24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZl
clZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTYsNyArMjU2LDcgQEAgQXJyYXlCdWZmZXIq
IEpTQXJyYXlCdWZmZXJWaWV3OjpzbG93RG93bgogICAgIC8vIHVwLiBCdXQgaWYgeW91IGRvICph
bnl0aGluZyogdG8gdHJpZ2dlciBhIEdDIHdhdGVybWFyayBjaGVjaywgaXQgd2lsbCBrbm93CiAg
ICAgLy8gdGhhdCB5b3UgKmhhZCogZG9uZSB0aG9zZSBhbGxvY2F0aW9ucyBhbmQgaXQgd2lsbCBH
QyBhcHByb3ByaWF0ZWx5LgogICAgIEhlYXAqIGhlYXAgPSBIZWFwOjpoZWFwKHRoaXMpOwotICAg
IFZNJiB2bSA9ICpoZWFwLT52bSgpOworICAgIFZNJiB2bSA9IGhlYXAtPnZtKCk7CiAgICAgRGVm
ZXJHQ0ZvckFXaGlsZSBkZWZlckdDKCpoZWFwKTsKIAogICAgIFJFTEVBU0VfQVNTRVJUKCFoYXNJ
bmRleGluZ0hlYWRlcih2bSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNDSlNWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNDSlNWYWx1ZS5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBA
QAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBr
ZGUub3JnKQogICogIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29t
KQotICogIENvcHlyaWdodCAoQykgMjAwMy0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjE1LDcgKzIxNSw3IEBAIGJvb2wg
SlNWYWx1ZTo6cHV0VG9QcmltaXRpdmVCeUluZGV4KEV4ZWMKIAogICAgIGlmIChwcm9wZXJ0eU5h
bWUgPiBNQVhfQVJSQVlfSU5ERVgpIHsKICAgICAgICAgUHV0UHJvcGVydHlTbG90IHNsb3QoKnRo
aXMsIHNob3VsZFRocm93KTsKLSAgICAgICAgcmV0dXJuIHB1dFRvUHJpbWl0aXZlKGV4ZWMsIElk
ZW50aWZpZXI6OmZyb20oZXhlYywgcHJvcGVydHlOYW1lKSwgdmFsdWUsIHNsb3QpOworICAgICAg
ICByZXR1cm4gcHV0VG9QcmltaXRpdmUoZXhlYywgSWRlbnRpZmllcjo6ZnJvbSh2bSwgcHJvcGVy
dHlOYW1lKSwgdmFsdWUsIHNsb3QpOwogICAgIH0KICAgICAKICAgICBKU09iamVjdCogcHJvdG90
eXBlID0gc3ludGhlc2l6ZVByb3RvdHlwZShleGVjKTsKQEAgLTMxNSw3ICszMTUsNyBAQCB2b2lk
IEpTVmFsdWU6OmR1bXBGb3JCYWNrdHJhY2UoUHJpbnRTdHJlCiAgICAgZWxzZSBpZiAoaXNEb3Vi
bGUoKSkKICAgICAgICAgb3V0LnByaW50ZigiJWxmIiwgYXNEb3VibGUoKSk7CiAgICAgZWxzZSBp
ZiAoaXNDZWxsKCkpIHsKLSAgICAgICAgVk0mIHZtID0gKmFzQ2VsbCgpLT52bSgpOworICAgICAg
ICBWTSYgdm0gPSBhc0NlbGwoKS0+dm0oKTsKICAgICAgICAgaWYgKGFzQ2VsbCgpLT5pbmhlcml0
czxKU1N0cmluZz4odm0pKSB7CiAgICAgICAgICAgICBKU1N0cmluZyogc3RyaW5nID0gYXNTdHJp
bmcoYXNDZWxsKCkpOwogICAgICAgICAgICAgY29uc3QgU3RyaW5nSW1wbCogaW1wbCA9IHN0cmlu
Zy0+dHJ5R2V0VmFsdWVJbXBsKCk7CkBAIC0zNjAsNyArMzYwLDcgQEAgSlNTdHJpbmcqIEpTVmFs
dWU6OnRvU3RyaW5nU2xvd0Nhc2UoRXhlYwogCiAgICAgYXV0byBlcnJvclZhbHVlID0gWyZdICgp
IC0+IEpTU3RyaW5nKiB7CiAgICAgICAgIGlmIChyZXR1cm5FbXB0eVN0cmluZ09uRXJyb3IpCi0g
ICAgICAgICAgICByZXR1cm4ganNFbXB0eVN0cmluZyhleGVjKTsKKyAgICAgICAgICAgIHJldHVy
biBqc0VtcHR5U3RyaW5nKHZtKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfTsKICAg
ICAKQEAgLTM2OSwxMCArMzY5LDEwIEBAIEpTU3RyaW5nKiBKU1ZhbHVlOjp0b1N0cmluZ1Nsb3dD
YXNlKEV4ZWMKICAgICAgICAgYXV0byBpbnRlZ2VyID0gYXNJbnQzMigpOwogICAgICAgICBpZiAo
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGludGVnZXIpIDw9IDkpCiAgICAgICAgICAgICByZXR1cm4g
dm0uc21hbGxTdHJpbmdzLnNpbmdsZUNoYXJhY3RlclN0cmluZyhpbnRlZ2VyICsgJzAnKTsKLSAg
ICAgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZygmdm0sIHZtLm51bWVyaWNTdHJpbmdzLmFk
ZChpbnRlZ2VyKSk7CisgICAgICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcodm0sIHZtLm51
bWVyaWNTdHJpbmdzLmFkZChpbnRlZ2VyKSk7CiAgICAgfQogICAgIGlmIChpc0RvdWJsZSgpKQot
ICAgICAgICByZXR1cm4ganNTdHJpbmcoJnZtLCB2bS5udW1lcmljU3RyaW5ncy5hZGQoYXNEb3Vi
bGUoKSkpOworICAgICAgICByZXR1cm4ganNTdHJpbmcodm0sIHZtLm51bWVyaWNTdHJpbmdzLmFk
ZChhc0RvdWJsZSgpKSk7CiAgICAgaWYgKGlzVHJ1ZSgpKQogICAgICAgICByZXR1cm4gdm0uc21h
bGxTdHJpbmdzLnRydWVTdHJpbmcoKTsKICAgICBpZiAoaXNGYWxzZSgpKQpAQCAtMzg5LDcgKzM4
OSw3IEBAIEpTU3RyaW5nKiBKU1ZhbHVlOjp0b1N0cmluZ1Nsb3dDYXNlKEV4ZWMKICAgICAgICAg
SlNCaWdJbnQqIGJpZ0ludCA9IGFzQmlnSW50KCp0aGlzKTsKICAgICAgICAgaWYgKGF1dG8gZGln
aXQgPSBiaWdJbnQtPnNpbmdsZURpZ2l0VmFsdWVGb3JTdHJpbmcoKSkKICAgICAgICAgICAgIHJl
dHVybiB2bS5zbWFsbFN0cmluZ3Muc2luZ2xlQ2hhcmFjdGVyU3RyaW5nKCpkaWdpdCArICcwJyk7
Ci0gICAgICAgIEpTU3RyaW5nKiByZXR1cm5TdHJpbmcgPSBqc05vbnRyaXZpYWxTdHJpbmcoJnZt
LCBiaWdJbnQtPnRvU3RyaW5nKGV4ZWMsIDEwKSk7CisgICAgICAgIEpTU3RyaW5nKiByZXR1cm5T
dHJpbmcgPSBqc05vbnRyaXZpYWxTdHJpbmcodm0sIGJpZ0ludC0+dG9TdHJpbmcoZXhlYywgMTAp
KTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZXJyb3JWYWx1ZSgpKTsKICAg
ICAgICAgcmV0dXJuIHJldHVyblN0cmluZzsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0NKU1ZhbHVlSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWVJbmxpbmVzLmgJKHJldmlzaW9uIDI0OTEy
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWVJbmxpbmVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEx
LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDExLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC05NjUsNyArOTY1LDcgQEAgQUxXQVlTX0lOTElORSBKU1ZhbHVl
IEpTVmFsdWU6OmdldChFeGVjUwogewogICAgIGlmIChMSUtFTFkocHJvcGVydHlOYW1lIDw9IHN0
ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSkpCiAgICAgICAgIHJldHVybiBnZXQo
ZXhlYywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHByb3BlcnR5TmFtZSkpOwotICAgIHJldHVybiBn
ZXQoZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBzdGF0aWNfY2FzdDxkb3VibGU+KHByb3Bl
cnR5TmFtZSkpKTsKKyAgICByZXR1cm4gZ2V0KGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYy0+
dm0oKSwgc3RhdGljX2Nhc3Q8ZG91YmxlPihwcm9wZXJ0eU5hbWUpKSk7CiB9CiAKIGlubGluZSBi
b29sIEpTVmFsdWU6OnB1dChFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5h
bWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2FzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQ2FzdC5oCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Nhc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyAr
MzMsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUbywgdHlwZW5hbWUgRnJvbT4KIGlubGluZSBUbyBq
c0Nhc3QoRnJvbSogZnJvbSkKIHsKICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZjxK
U0NlbGwsIHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX3BvaW50ZXI8VG8+Ojp0eXBlPjo6dmFsdWUgJiYg
c3RkOjppc19iYXNlX29mPEpTQ2VsbCwgdHlwZW5hbWUgc3RkOjpyZW1vdmVfcG9pbnRlcjxGcm9t
Pjo6dHlwZT46OnZhbHVlLCAiSlMgY2FzdGluZyBleHBlY3RzIHRoYXQgdGhlIHR5cGVzIHlvdSBh
cmUgY2FzdGluZyB0by9mcm9tIGFyZSBzdWJjbGFzc2VzIG9mIEpTQ2VsbCIpOwotICAgIEFTU0VS
VF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKCFmcm9tIHx8IGZyb20tPkpTQ2VsbDo6aW5oZXJp
dHMoKmZyb20tPkpTQ2VsbDo6dm0oKSwgc3RkOjpyZW1vdmVfcG9pbnRlcjxUbz46OnR5cGU6Omlu
Zm8oKSkpOworICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKCFmcm9tIHx8IGZy
b20tPkpTQ2VsbDo6aW5oZXJpdHMoZnJvbS0+SlNDZWxsOjp2bSgpLCBzdGQ6OnJlbW92ZV9wb2lu
dGVyPFRvPjo6dHlwZTo6aW5mbygpKSk7CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFRvPihmcm9t
KTsKIH0KIApAQCAtNDEsNyArNDEsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUbz4KIGlubGluZSBU
byBqc0Nhc3QoSlNWYWx1ZSBmcm9tKQogewogICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNl
X29mPEpTQ2VsbCwgdHlwZW5hbWUgc3RkOjpyZW1vdmVfcG9pbnRlcjxUbz46OnR5cGU+Ojp2YWx1
ZSwgIkpTIGNhc3RpbmcgZXhwZWN0cyB0aGF0IHRoZSB0eXBlcyB5b3UgYXJlIGNhc3RpbmcgdG8g
aXMgYSBzdWJjbGFzcyBvZiBKU0NlbGwiKTsKLSAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBM
SUNBVElPTihmcm9tLmlzQ2VsbCgpICYmIGZyb20uYXNDZWxsKCktPkpTQ2VsbDo6aW5oZXJpdHMo
KmZyb20uYXNDZWxsKCktPnZtKCksIHN0ZDo6cmVtb3ZlX3BvaW50ZXI8VG8+Ojp0eXBlOjppbmZv
KCkpKTsKKyAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihmcm9tLmlzQ2VsbCgp
ICYmIGZyb20uYXNDZWxsKCktPkpTQ2VsbDo6aW5oZXJpdHMoZnJvbS5hc0NlbGwoKS0+dm0oKSwg
c3RkOjpyZW1vdmVfcG9pbnRlcjxUbz46OnR5cGU6OmluZm8oKSkpOwogICAgIHJldHVybiBzdGF0
aWNfY2FzdDxUbz4oZnJvbS5hc0NlbGwoKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQ2VsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNDZWxsLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcg
QEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEgSGFycmkgUG9ydGVuIChwb3J0ZW5A
a2RlLm9yZykKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNv
bSkKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTQ2LDEyICs0NiwxMiBAQCB2b2lk
IEpTQ2VsbDo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCiAKIHZvaWQgSlNDZWxsOjpkdW1wKFByaW50
U3RyZWFtJiBvdXQpIGNvbnN0CiB7Ci0gICAgbWV0aG9kVGFibGUoKnZtKCkpLT5kdW1wVG9TdHJl
YW0odGhpcywgb3V0KTsKKyAgICBtZXRob2RUYWJsZSh2bSgpKS0+ZHVtcFRvU3RyZWFtKHRoaXMs
IG91dCk7CiB9CiAKIHZvaWQgSlNDZWxsOjpkdW1wVG9TdHJlYW0oY29uc3QgSlNDZWxsKiBjZWxs
LCBQcmludFN0cmVhbSYgb3V0KQogewotICAgIG91dC5wcmludGYoIjwlcCwgJXM+IiwgY2VsbCwg
Y2VsbC0+Y2xhc3NOYW1lKCpjZWxsLT52bSgpKSk7CisgICAgb3V0LnByaW50ZigiPCVwLCAlcz4i
LCBjZWxsLCBjZWxsLT5jbGFzc05hbWUoY2VsbC0+dm0oKSkpOwogfQogCiBzaXplX3QgSlNDZWxs
Ojplc3RpbWF0ZWRTaXplSW5CeXRlcyhWTSYgdm0pIGNvbnN0CkBAIC0xMTgsMTIgKzExOCwxMyBA
QCBib29sIEpTQ2VsbDo6cHV0KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlCiAKIGJvb2wgSlNDZWxs
OjpwdXRCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpZGVu
dGlmaWVyLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93KQogeworICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7CiAgICAgaWYgKGNlbGwtPmlzU3RyaW5nKCkgfHwgY2VsbC0+aXNTeW1ib2wo
KSB8fCBjZWxsLT5pc0JpZ0ludCgpKSB7CiAgICAgICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KGNl
bGwsIHNob3VsZFRocm93KTsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWUoY2VsbCkucHV0VG9Qcmlt
aXRpdmUoZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpZGVudGlmaWVyKSwgdmFsdWUsIHNs
b3QpOworICAgICAgICByZXR1cm4gSlNWYWx1ZShjZWxsKS5wdXRUb1ByaW1pdGl2ZShleGVjLCBJ
ZGVudGlmaWVyOjpmcm9tKHZtLCBpZGVudGlmaWVyKSwgdmFsdWUsIHNsb3QpOwogICAgIH0KICAg
ICBKU09iamVjdCogdGhpc09iamVjdCA9IGNlbGwtPnRvT2JqZWN0KGV4ZWMsIGV4ZWMtPmxleGlj
YWxHbG9iYWxPYmplY3QoKSk7Ci0gICAgcmV0dXJuIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKGV4
ZWMtPnZtKCkpLT5wdXRCeUluZGV4KHRoaXNPYmplY3QsIGV4ZWMsIGlkZW50aWZpZXIsIHZhbHVl
LCBzaG91bGRUaHJvdyk7CisgICAgcmV0dXJuIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+
cHV0QnlJbmRleCh0aGlzT2JqZWN0LCBleGVjLCBpZGVudGlmaWVyLCB2YWx1ZSwgc2hvdWxkVGhy
b3cpOwogfQogCiBib29sIEpTQ2VsbDo6ZGVsZXRlUHJvcGVydHkoSlNDZWxsKiBjZWxsLCBFeGVj
U3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBpZGVudGlmaWVyKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbElubGluZXMuaAkocmV2aXNpb24gMjQ5MTI4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsSW5saW5lcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xMjEsNyArMTIxLDcgQEAgaW5saW5lIEluZGV4aW5nVHlwZSBKU0NlbGw6Omlu
ZGV4aW5nTW9kZQogCiBBTFdBWVNfSU5MSU5FIFN0cnVjdHVyZSogSlNDZWxsOjpzdHJ1Y3R1cmUo
KSBjb25zdAogewotICAgIHJldHVybiBzdHJ1Y3R1cmUoKnZtKCkpOworICAgIHJldHVybiBzdHJ1
Y3R1cmUodm0oKSk7CiB9CiAKIEFMV0FZU19JTkxJTkUgU3RydWN0dXJlKiBKU0NlbGw6OnN0cnVj
dHVyZShWTSYgdm0pIGNvbnN0CkBAIC0xNDIsMTAgKzE0MiwxMCBAQCBBTFdBWVNfSU5MSU5FIFZN
JiBFeGVjU3RhdGU6OnZtKCkgY29uc3QKIHsKICAgICBKU0NlbGwqIGNhbGxlZSA9IHRoaXMtPmNh
bGxlZSgpLmFzQ2VsbCgpOwogICAgIEFTU0VSVChjYWxsZWUpOwotICAgIEFTU0VSVChjYWxsZWUt
PnZtKCkpOworICAgIEFTU0VSVCgmY2FsbGVlLT52bSgpKTsKICAgICBBU1NFUlQoIWNhbGxlZS0+
aXNMYXJnZUFsbG9jYXRpb24oKSk7CiAgICAgLy8gVGhpcyBpcyBhbiBpbXBvcnRhbnQgb3B0aW1p
emF0aW9uIHNpbmNlIHdlIGFjY2VzcyB0aGlzIHNvIG9mdGVuLgotICAgIHJldHVybiAqY2FsbGVl
LT5tYXJrZWRCbG9jaygpLnZtKCk7CisgICAgcmV0dXJuIGNhbGxlZS0+bWFya2VkQmxvY2soKS52
bSgpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+CkBA
IC0xNjcsNyArMTY3LDcgQEAgaW5saW5lIEFsbG9jYXRvciBhbGxvY2F0b3JGb3JOb25WaXJ0dWFs
QwogdGVtcGxhdGU8dHlwZW5hbWUgVD4KIEFMV0FZU19JTkxJTkUgdm9pZCogdHJ5QWxsb2NhdGVD
ZWxsSGVscGVyKEhlYXAmIGhlYXAsIHNpemVfdCBzaXplLCBHQ0RlZmVycmFsQ29udGV4dCogZGVm
ZXJyYWxDb250ZXh0LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUgZmFpbHVyZU1vZGUpCiB7Ci0gICAg
Vk0mIHZtID0gKmhlYXAudm0oKTsKKyAgICBWTSYgdm0gPSBoZWFwLnZtKCk7CiAgICAgQVNTRVJU
KGRlZmVycmFsQ29udGV4dCB8fCAhRGlzYWxsb3dHQzo6aXNJbkVmZmVjdE9uQ3VycmVudFRocmVh
ZCgpKTsKICAgICBBU1NFUlQoc2l6ZSA+PSBzaXplb2YoVCkpOwogICAgIEpTQ2VsbCogcmVzdWx0
ID0gc3RhdGljX2Nhc3Q8SlNDZWxsKj4oc3Vic3BhY2VGb3I8VD4odm0pLT5hbGxvY2F0ZU5vblZp
cnR1YWwodm0sIHNpemUsIGRlZmVycmFsQ29udGV4dCwgZmFpbHVyZU1vZGUpKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGF0YVZpZXdQcm90b3R5cGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGF0YVZpZXdQcm90b3R5
cGUuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0RhdGFWaWV3UHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMDksNyArMTA5
LDcgQEAgSlNEYXRhVmlld1Byb3RvdHlwZSogSlNEYXRhVmlld1Byb3RvdHlwZQogdm9pZCBKU0Rh
dGFWaWV3UHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbihKU0M6OlZNJiB2bSkKIHsKICAgICBCYXNl
OjpmaW5pc2hDcmVhdGlvbih2bSk7Ci0gICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0s
IHZtLnByb3BlcnR5TmFtZXMtPnRvU3RyaW5nVGFnU3ltYm9sLCBqc1N0cmluZygmdm0sICJEYXRh
VmlldyIpLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6
UmVhZE9ubHkpOworICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0
eU5hbWVzLT50b1N0cmluZ1RhZ1N5bWJvbCwganNTdHJpbmcodm0sICJEYXRhVmlldyIpLCBQcm9w
ZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpOwog
fQogCiBTdHJ1Y3R1cmUqIEpTRGF0YVZpZXdQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSgKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRml4ZWRBcnJheS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGaXhlZEFycmF5LmNwcAko
cmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGaXhl
ZEFycmF5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01NCw3ICs1NCw3IEBAIHZvaWQgSlNGaXhlZEFycmF5
Ojpjb3B5VG9Bcmd1bWVudHMoRXhlY1MKIAogdm9pZCBKU0ZpeGVkQXJyYXk6OmR1bXBUb1N0cmVh
bShjb25zdCBKU0NlbGwqIGNlbGwsIFByaW50U3RyZWFtJiBvdXQpCiB7Ci0gICAgVk0mIHZtID0g
KmNlbGwtPnZtKCk7CisgICAgVk0mIHZtID0gY2VsbC0+dm0oKTsKICAgICBjb25zdCBhdXRvKiB0
aGlzT2JqZWN0ID0ganNDYXN0PGNvbnN0IEpTRml4ZWRBcnJheSo+KGNlbGwpOwogICAgIG91dC5w
cmludGYoIjwlcCwgJXMsIFsldV0sIFsiLCB0aGlzT2JqZWN0LCB0aGlzT2JqZWN0LT5jbGFzc05h
bWUodm0pLCB0aGlzT2JqZWN0LT5sZW5ndGgoKSk7CiAgICAgQ29tbWFQcmludGVyIGNvbW1hOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAJKHJl
dmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rp
b24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBDb3B5cmlnaHQg
KEMpIDE5OTktMjAwMiBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICogIENvcHlyaWdo
dCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICogIENvcHlyaWdodCAoQykg
MjAwMy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQg
KEMpIDIwMDMtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAgQ29weXJp
Z2h0IChDKSAyMDA3IENhbWVyb24gWndhcmljaCAoY3d6d2FyaWNoQHV3YXRlcmxvby5jYSkKICAq
ICBDb3B5cmlnaHQgKEMpIDIwMDcgTWFrcyBPcmxvdmljaAogICogIENvcHlyaWdodCAoQykgMjAx
NSBDYW5vbiBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCkBAIC0xMzksNyArMTM5LDcgQEAgdm9p
ZCBKU0Z1bmN0aW9uOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIAogICAgIG1fZXhlY3V0YWJsZS5z
ZXQodm0sIHRoaXMsIGV4ZWN1dGFibGUpOwogICAgIC8vIFNvbWUgTmF0aXZlRXhlY3V0YWJsZSBm
dW5jdGlvbnMsIGxpa2UgSlNCb3VuZEZ1bmN0aW9uLCBkZWNpZGUgdG8gbGF6aWx5IGFsbG9jYXRl
IHRoZWlyIG5hbWUgc3RyaW5nLgogICAgIGlmICghbmFtZS5pc051bGwoKSkKLSAgICAgICAgcHV0
RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc1N0cmluZygmdm0sIG5hbWUpLCBQ
cm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0p
OworICAgICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzU3RyaW5n
KHZtLCBuYW1lKSwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgUHJvcGVydHlBdHRyaWJ1
dGU6OkRvbnRFbnVtKTsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0
aCwganNOdW1iZXIobGVuZ3RoKSwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgUHJvcGVy
dHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKIH0KIApAQCAtMzM0LDcgKzMzNCw3IEBAIHB1YmxpYzoK
IAogICAgICAgICBKU0NlbGwqIGNhbGxlZSA9IHZpc2l0b3ItPmNhbGxlZSgpLmFzQ2VsbCgpOwog
Ci0gICAgICAgIGlmIChjYWxsZWUgJiYgY2FsbGVlLT5pbmhlcml0czxKU0JvdW5kRnVuY3Rpb24+
KCpjYWxsZWUtPnZtKCkpKQorICAgICAgICBpZiAoY2FsbGVlICYmIGNhbGxlZS0+aW5oZXJpdHM8
SlNCb3VuZEZ1bmN0aW9uPihjYWxsZWUtPnZtKCkpKQogICAgICAgICAgICAgcmV0dXJuIFN0YWNr
VmlzaXRvcjo6Q29udGludWU7CiAKICAgICAgICAgaWYgKCFtX2hhc0ZvdW5kRnJhbWUgJiYgKGNh
bGxlZSAhPSBtX3RhcmdldENhbGxlZSkpCkBAIC03NTIsNyArNzUyLDcgQEAgdm9pZCBKU0Z1bmN0
aW9uOjpyZWlmeU5hbWUoVk0mIHZtLCBFeGVjUwogICAgICAgICBuYW1lID0gbWFrZVN0cmluZygi
c2V0ICIsIG5hbWUpOwogCiAgICAgcmFyZURhdGEtPnNldEhhc1JlaWZpZWROYW1lKCk7Ci0gICAg
cHV0RGlyZWN0KHZtLCBwcm9wSUQsIGpzU3RyaW5nKGV4ZWMsIG5hbWUpLCBpbml0aWFsQXR0cmli
dXRlcyk7CisgICAgcHV0RGlyZWN0KHZtLCBwcm9wSUQsIGpzU3RyaW5nKHZtLCBuYW1lKSwgaW5p
dGlhbEF0dHJpYnV0ZXMpOwogfQogCiBKU0Z1bmN0aW9uOjpQcm9wZXJ0eVN0YXR1cyBKU0Z1bmN0
aW9uOjpyZWlmeUxhenlQcm9wZXJ0eUlmTmVlZGVkKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBQ
cm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQpAQCAtODE5LDcgKzgxOSw3IEBAIEpTRnVuY3Rpb246
OlByb3BlcnR5U3RhdHVzIEpTRnVuY3Rpb246OnIKICAgICAgICAgU3RyaW5nIG5hbWUgPSBtYWtl
U3RyaW5nKCJib3VuZCAiLCBzdGF0aWNfY2FzdDxOYXRpdmVFeGVjdXRhYmxlKj4obV9leGVjdXRh
YmxlLmdldCgpKS0+bmFtZSgpKTsKICAgICAgICAgdW5zaWduZWQgaW5pdGlhbEF0dHJpYnV0ZXMg
PSBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9u
bHk7CiAgICAgICAgIHJhcmVEYXRhLT5zZXRIYXNSZWlmaWVkTmFtZSgpOwotICAgICAgICBwdXRE
aXJlY3Qodm0sIG5hbWVJZGVudCwganNTdHJpbmcoZXhlYywgbmFtZSksIGluaXRpYWxBdHRyaWJ1
dGVzKTsKKyAgICAgICAgcHV0RGlyZWN0KHZtLCBuYW1lSWRlbnQsIGpzU3RyaW5nKHZtLCBuYW1l
KSwgaW5pdGlhbEF0dHJpYnV0ZXMpOwogICAgIH0KICAgICByZXR1cm4gUHJvcGVydHlTdGF0dXM6
OlJlaWZpZWQ7CiB9CkBAIC04MjgsNyArODI4LDcgQEAgSlNGdW5jdGlvbjo6UHJvcGVydHlTdGF0
dXMgSlNGdW5jdGlvbjo6cgogdm9pZCBKU0Z1bmN0aW9uOjphc3NlcnRUeXBlSW5mb0ZsYWdJbnZh
cmlhbnRzKCkKIHsKICAgICAvLyBJZiB5b3UgY2hhbmdlIHRoaXMsIHlvdSdsbCBuZWVkIHRvIHVw
ZGF0ZSBzcGVjdWxhdGlvbkZyb21DbGFzc0luZm8uCi0gICAgY29uc3QgQ2xhc3NJbmZvKiBpbmZv
ID0gY2xhc3NJbmZvKCp2bSgpKTsKKyAgICBjb25zdCBDbGFzc0luZm8qIGluZm8gPSBjbGFzc0lu
Zm8odm0oKSk7CiAgICAgaWYgKCEoaW5saW5lVHlwZUZsYWdzKCkgJiBJbXBsZW1lbnRzRGVmYXVs
dEhhc0luc3RhbmNlKSkKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaW5mbyA9PSBKU0JvdW5kRnVu
Y3Rpb246OmluZm8oKSk7CiAgICAgZWxzZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVz
LmgJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00ODIsMTgg
KzQ4MiwyMCBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgogYm9vbCBKU0dlbmVyaWNUeXBl
ZEFycmF5VmlldzxBZGFwdG9yPjo6ZGVsZXRlUHJvcGVydHlCeUluZGV4KAogICAgIEpTQ2VsbCog
Y2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0
dXJuIGNlbGwtPm1ldGhvZFRhYmxlKGV4ZWMtPnZtKCkpLT5kZWxldGVQcm9wZXJ0eShjZWxsLCBl
eGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIHByb3BlcnR5TmFtZSkpOworICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7CisgICAgcmV0dXJuIGNlbGwtPm1ldGhvZFRhYmxlKHZtKS0+ZGVsZXRlUHJv
cGVydHkoY2VsbCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbSh2bSwgcHJvcGVydHlOYW1lKSk7CiB9
CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+CiB2b2lkIEpTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3PEFkYXB0b3I+OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKAogICAgIEpTT2JqZWN0KiBvYmplY3Qs
IEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIGFycmF5LCBFbnVtZXJhdGlvbk1v
ZGUgbW9kZSkKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIEpTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Kj4o
b2JqZWN0KTsKIAogICAgIGlmIChhcnJheS5pbmNsdWRlU3RyaW5nUHJvcGVydGllcygpKSB7CiAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0aGlzT2JqZWN0LT5tX2xlbmd0aDsgKytp
KQotICAgICAgICAgICAgYXJyYXkuYWRkKElkZW50aWZpZXI6OmZyb20oZXhlYywgaSkpOworICAg
ICAgICAgICAgYXJyYXkuYWRkKElkZW50aWZpZXI6OmZyb20odm0sIGkpKTsKICAgICB9CiAgICAg
CiAgICAgcmV0dXJuIEJhc2U6OmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBleGVjLCBhcnJh
eSwgbW9kZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9i
amVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNH
bG9iYWxPYmplY3QuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc2Niw3ICs3
NjYsNyBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0Ojppbml0KFZNJiB2bSkKICAgICBtX2FycmF5Q29u
c3RydWN0b3Iuc2V0KHZtLCB0aGlzLCBhcnJheUNvbnN0cnVjdG9yKTsKICAgICAKICAgICBSZWdF
eHBDb25zdHJ1Y3RvciogcmVnRXhwQ29uc3RydWN0b3IgPSBSZWdFeHBDb25zdHJ1Y3Rvcjo6Y3Jl
YXRlKHZtLCBSZWdFeHBDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKHZtLCB0aGlzLCBtX2Z1
bmN0aW9uUHJvdG90eXBlLmdldCgpKSwgbV9yZWdFeHBQcm90b3R5cGUuZ2V0KCksIG1fc3BlY2ll
c0dldHRlclNldHRlci5nZXQoKSk7Ci0gICAgbV9yZWdFeHBHbG9iYWxEYXRhLmNhY2hlZFJlc3Vs
dCgpLnJlY29yZCh2bSwgdGhpcywgbnVsbHB0ciwganNFbXB0eVN0cmluZygmdm0pLCBNYXRjaFJl
c3VsdCgwLCAwKSk7CisgICAgbV9yZWdFeHBHbG9iYWxEYXRhLmNhY2hlZFJlc3VsdCgpLnJlY29y
ZCh2bSwgdGhpcywgbnVsbHB0ciwganNFbXB0eVN0cmluZyh2bSksIE1hdGNoUmVzdWx0KDAsIDAp
KTsKICAgICAKICNpZiBFTkFCTEUoU0hBUkVEX0FSUkFZX0JVRkZFUikKICAgICBKU1NoYXJlZEFy
cmF5QnVmZmVyQ29uc3RydWN0b3IqIHNoYXJlZEFycmF5QnVmZmVyQ29uc3RydWN0b3IgPSBudWxs
cHRyOwpAQCAtODQ5LDcgKzg0OSw3IEBAIGNhcGl0YWxOYW1lICMjIENvbnN0cnVjdG9yKiBsb3dl
ck5hbWUgIyMKIAogI2lmIEVOQUJMRShTSEFSRURfQVJSQVlfQlVGRkVSKQogICAgIHB1dERpcmVj
dFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5TaGFyZWRBcnJheUJ1ZmZl
ciwgc2hhcmVkQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvciwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFBy
b3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOwotICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0
aW9uKHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJBdG9taWNzIiksIGF0b21pY3NP
YmplY3QsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0p
KTsKKyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZyh2bSwgIkF0b21pY3MiKSwgYXRvbWljc09iamVjdCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOwogI2VuZGlmCiAKICNkZWZpbmUgUFVUX0NP
TlNUUlVDVE9SX0ZPUl9TSU1QTEVfVFlQRShjYXBpdGFsTmFtZSwgbG93ZXJOYW1lLCBwcm9wZXJO
YW1lLCBpbnN0YW5jZVR5cGUsIGpzTmFtZSwgcHJvdG90eXBlQmFzZSwgZmVhdHVyZUZsYWcpIFwK
QEAgLTExMDMsNyArMTEwMyw3IEBAIGNhcGl0YWxOYW1lICMjIENvbnN0cnVjdG9yKiBsb3dlck5h
bWUgIyMKICAgICAgICAgICAgICAgICBpbml0LnNldChXZWJBc3NlbWJseVRvSlNDYWxsZWU6OmNy
ZWF0ZVN0cnVjdHVyZShpbml0LnZtLCBpbml0Lm93bmVyLCBqc051bGwoKSkpOwogICAgICAgICAg
ICAgfSk7CiAgICAgICAgIGF1dG8qIHdlYkFzc2VtYmx5ID0gSlNXZWJBc3NlbWJseTo6Y3JlYXRl
KHZtLCB0aGlzLCBKU1dlYkFzc2VtYmx5OjpjcmVhdGVTdHJ1Y3R1cmUodm0sIHRoaXMsIG1fb2Jq
ZWN0UHJvdG90eXBlLmdldCgpKSk7Ci0gICAgICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9u
KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJXZWJBc3NlbWJseSIpLCB3ZWJBc3Nl
bWJseSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkp
OworICAgICAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyh2bSwgIldlYkFzc2VtYmx5IiksIHdlYkFzc2VtYmx5LCBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7CiAKICNkZWZpbmUgQ1JFQVRFX1dF
QkFTU0VNQkxZX1BST1RPVFlQRShjYXBpdGFsTmFtZSwgbG93ZXJOYW1lLCBwcm9wZXJOYW1lLCBp
bnN0YW5jZVR5cGUsIGpzTmFtZSwgcHJvdG90eXBlQmFzZSwgZmVhdHVyZUZsYWcpIFwKICAgICBp
ZiAoZmVhdHVyZUZsYWcpIHtcCkBAIC0xODMxLDcgKzE4MzEsNyBAQCB2b2lkIEpTR2xvYmFsT2Jq
ZWN0OjpleHBvc2VEb2xsYXJWTShWTSYgCiAgICAgfTsKICAgICBhZGRTdGF0aWNHbG9iYWxzKGV4
dHJhU3RhdGljR2xvYmFscywgV1RGX0FSUkFZX0xFTkdUSChleHRyYVN0YXRpY0dsb2JhbHMpKTsK
IAotICAgIHB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhnbG9iYWxFeGVjKCks
ICIkdm0iKSwgZG9sbGFyVk0sIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0
ZTo6RG9udEVudW0pKTsKKyAgICBwdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmco
dm0sICIkdm0iKSwgZG9sbGFyVk0sIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJp
YnV0ZTo6RG9udEVudW0pKTsKIH0KIAogdm9pZCBKU0dsb2JhbE9iamVjdDo6YWRkU3RhdGljR2xv
YmFscyhHbG9iYWxQcm9wZXJ0eUluZm8qIGdsb2JhbHMsIGludCBjb3VudCkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdEZ1
bmN0aW9ucy5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3
ICsxLDcgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDIgSGFycmkgUG9ydGVuIChw
b3J0ZW5Aa2RlLm9yZykKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bw
b3N0LmNvbSkKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICogIENvcHlyaWdodCAoQykgMjAwNyBDYW1lcm9uIFp3YXJpY2gg
KGN3endhcmljaEB1d2F0ZXJsb28uY2EpCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3IE1ha3MgT3Js
b3ZpY2gKICAqCkBAIC0xNTIsNyArMTUyLDcgQEAgc3RhdGljIEpTVmFsdWUgZW5jb2RlKEV4ZWNT
dGF0ZSogZXhlYywgYwogCiAgICAgaWYgKFVOTElLRUxZKGJ1aWxkZXIuaGFzT3ZlcmZsb3dlZCgp
KSkKICAgICAgICAgcmV0dXJuIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjLCBzY29wZSk7Ci0g
ICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIGJ1aWxkZXIudG9TdHJpbmcoKSk7CisgICAgcmV0dXJu
IGpzU3RyaW5nKHZtLCBidWlsZGVyLnRvU3RyaW5nKCkpOwogfQogCiBzdGF0aWMgSlNWYWx1ZSBl
bmNvZGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBCaXRtYXA8MjU2PiYgZG9Ob3RFc2NhcGUpCkBA
IC0yNDEsNyArMjQxLDcgQEAgc3RhdGljIEpTVmFsdWUgZGVjb2RlKEV4ZWNTdGF0ZSogZXhlYywg
YwogICAgIH0KICAgICBpZiAoVU5MSUtFTFkoYnVpbGRlci5oYXNPdmVyZmxvd2VkKCkpKQogICAg
ICAgICByZXR1cm4gdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMsIHNjb3BlKTsKLSAgICBSRUxF
QVNFX0FORF9SRVRVUk4oc2NvcGUsIGpzU3RyaW5nKCZ2bSwgYnVpbGRlci50b1N0cmluZygpKSk7
CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBqc1N0cmluZyh2bSwgYnVpbGRlci50b1N0
cmluZygpKSk7CiB9CiAKIHN0YXRpYyBKU1ZhbHVlIGRlY29kZShFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IEJpdG1hcDwyNTY+JiBkb05vdFVuZXNjYXBlLCBib29sIHN0cmljdCkKQEAgLTYwMSw2ICs2
MDEsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNFCiAgICAgKTsK
IAogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9TdHJpbmdWaWV3KGV4ZWMsIGV4ZWMtPmFy
Z3VtZW50KDApLCBbJl0gKFN0cmluZ1ZpZXcgdmlldykgeworICAgICAgICBWTSYgdm0gPSBleGVj
LT52bSgpOwogICAgICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CiAgICAgICAgIGlmICh2aWV3
LmlzOEJpdCgpKSB7CiAgICAgICAgICAgICBjb25zdCBMQ2hhciogYyA9IHZpZXcuY2hhcmFjdGVy
czgoKTsKQEAgLTYxMyw3ICs2MTQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGds
b2JhbEZ1bmNFCiAgICAgICAgICAgICAgICAgICAgIGFwcGVuZEJ5dGVBc0hleCh1LCBidWlsZGVy
KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4g
anNTdHJpbmcoZXhlYywgYnVpbGRlci50b1N0cmluZygpKTsKKyAgICAgICAgICAgIHJldHVybiBq
c1N0cmluZyh2bSwgYnVpbGRlci50b1N0cmluZygpKTsKICAgICAgICAgfQogCiAgICAgICAgIGNv
bnN0IFVDaGFyKiBjID0gdmlldy5jaGFyYWN0ZXJzMTYoKTsKQEAgLTYzMSw3ICs2MzIsNyBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNFCiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KIAotICAgICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgYnVpbGRlci50b1N0cmlu
ZygpKTsKKyAgICAgICAgcmV0dXJuIGpzU3RyaW5nKHZtLCBidWlsZGVyLnRvU3RyaW5nKCkpOwog
ICAgIH0pKTsKIH0KIApAQCAtNjg3LDcgKzY4OCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZ2xvYmFsRnVuY1UKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIHJl
dHVybiBqc1N0cmluZyhleGVjLCBidWlsZGVyLnRvU3RyaW5nKCkpOworICAgICAgICByZXR1cm4g
anNTdHJpbmcoZXhlYy0+dm0oKSwgYnVpbGRlci50b1N0cmluZygpKTsKICAgICB9KSk7CiB9CiAK
QEAgLTgwNCw3ICs4MDUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1
bmNCCiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY0J1aWx0aW5EZXNj
cmliZShFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0
cmluZyhleGVjLCB0b1N0cmluZyhleGVjLT5hcmd1bWVudCgwKSkpKTsKKyAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKGV4ZWMtPnZtKCksIHRvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50
KDApKSkpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNJbXBv
cnRNb2R1bGUoRXhlY1N0YXRlKiBleGVjKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNMZXhpY2FsRW52aXJvbm1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTTGV4aWNhbEVudmlyb25tZW50LmNwcAkocmV2aXNpb24gMjQ5
MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMZXhpY2FsRW52aXJvbm1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwOCwgMjAwOSwgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTczLDYgKzczLDcgQEAgdm9p
ZCBKU0xleGljYWxFbnZpcm9ubWVudDo6Z2V0T3duTm9uSW5kZQogICAgIHsKICAgICAgICAgQ29u
Y3VycmVudEpTTG9ja2VyIGxvY2tlcih0aGlzT2JqZWN0LT5zeW1ib2xUYWJsZSgpLT5tX2xvY2sp
OwogICAgICAgICBTeW1ib2xUYWJsZTo6TWFwOjppdGVyYXRvciBlbmQgPSB0aGlzT2JqZWN0LT5z
eW1ib2xUYWJsZSgpLT5lbmQobG9ja2VyKTsKKyAgICAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsK
ICAgICAgICAgZm9yIChTeW1ib2xUYWJsZTo6TWFwOjppdGVyYXRvciBpdCA9IHRoaXNPYmplY3Qt
PnN5bWJvbFRhYmxlKCktPmJlZ2luKGxvY2tlcik7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAg
ICAgICAgaWYgKGl0LT52YWx1ZS5nZXRBdHRyaWJ1dGVzKCkgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6
RG9udEVudW0gJiYgIW1vZGUuaW5jbHVkZURvbnRFbnVtUHJvcGVydGllcygpKQogICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwpAQCAtODAsNyArODEsNyBAQCB2b2lkIEpTTGV4aWNhbEVudmlyb25t
ZW50OjpnZXRPd25Ob25JbmRlCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAg
ICBpZiAoaXQtPmtleS0+aXNTeW1ib2woKSAmJiAhcHJvcGVydHlOYW1lcy5pbmNsdWRlU3ltYm9s
UHJvcGVydGllcygpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgcHJv
cGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbVVpZChleGVjLCBpdC0+a2V5LmdldCgpKSk7
CisgICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCBp
dC0+a2V5LmdldCgpKSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgLy8gU2tpcCB0aGUgSlNTeW1i
b2xUYWJsZU9iamVjdCdzIGltcGxlbWVudGF0aW9uIG9mIGdldE93bk5vbkluZGV4UHJvcGVydHlO
YW1lcwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVFbnZpcm9u
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNN
b2R1bGVFbnZpcm9ubWVudC5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlRW52aXJvbm1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtODEsNyArODEsNyBAQCBib29sIEpTTW9kdWxlRW52aXJvbm1lbnQ6OmdldE93blByb3BlcnR5
CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CiAgICAgSlNNb2R1bGVFbnZpcm9ubWVudCogdGhpc09iamVjdCA9IGpzQ2Fz
dDxKU01vZHVsZUVudmlyb25tZW50Kj4oY2VsbCk7Ci0gICAgQWJzdHJhY3RNb2R1bGVSZWNvcmQ6
OlJlc29sdXRpb24gcmVzb2x1dGlvbiA9IHRoaXNPYmplY3QtPm1vZHVsZVJlY29yZCgpLT5yZXNv
bHZlSW1wb3J0KGV4ZWMsIElkZW50aWZpZXI6OmZyb21VaWQoZXhlYywgcHJvcGVydHlOYW1lLnVp
ZCgpKSk7CisgICAgQWJzdHJhY3RNb2R1bGVSZWNvcmQ6OlJlc29sdXRpb24gcmVzb2x1dGlvbiA9
IHRoaXNPYmplY3QtPm1vZHVsZVJlY29yZCgpLT5yZXNvbHZlSW1wb3J0KGV4ZWMsIElkZW50aWZp
ZXI6OmZyb21VaWQodm0sIHByb3BlcnR5TmFtZS51aWQoKSkpOwogICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIGZhbHNlKTsKICAgICBpZiAocmVzb2x1dGlvbi50eXBlID09IEFic3RyYWN0
TW9kdWxlUmVjb3JkOjpSZXNvbHV0aW9uOjpUeXBlOjpSZXNvbHZlZCkgewogICAgICAgICAvLyBX
aGVuIHJlc29sdmVJbXBvcnQgcmVzb2x2ZXMgdGhlIHJlc29sdXRpb24sIHRoZSBpbXBvcnRlZCBt
b2R1bGUgZW52aXJvbm1lbnQgbXVzdCBoYXZlIHRoZSBiaW5kaW5nLgpAQCAtMTE4LDcgKzExOCw3
IEBAIGJvb2wgSlNNb2R1bGVFbnZpcm9ubWVudDo6cHV0KEpTQ2VsbCogY2UKIAogICAgIEpTTW9k
dWxlRW52aXJvbm1lbnQqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNNb2R1bGVFbnZpcm9ubWVudCo+
KGNlbGwpOwogICAgIC8vIEFsbCBpbXBvcnRlZCBiaW5kaW5ncyBhcmUgaW1tdXRhYmxlLgotICAg
IEFic3RyYWN0TW9kdWxlUmVjb3JkOjpSZXNvbHV0aW9uIHJlc29sdXRpb24gPSB0aGlzT2JqZWN0
LT5tb2R1bGVSZWNvcmQoKS0+cmVzb2x2ZUltcG9ydChleGVjLCBJZGVudGlmaWVyOjpmcm9tVWlk
KGV4ZWMsIHByb3BlcnR5TmFtZS51aWQoKSkpOworICAgIEFic3RyYWN0TW9kdWxlUmVjb3JkOjpS
ZXNvbHV0aW9uIHJlc29sdXRpb24gPSB0aGlzT2JqZWN0LT5tb2R1bGVSZWNvcmQoKS0+cmVzb2x2
ZUltcG9ydChleGVjLCBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCBwcm9wZXJ0eU5hbWUudWlkKCkp
KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7CiAgICAgaWYgKHJlc29s
dXRpb24udHlwZSA9PSBBYnN0cmFjdE1vZHVsZVJlY29yZDo6UmVzb2x1dGlvbjo6VHlwZTo6UmVz
b2x2ZWQpIHsKICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIFJlYWRvbmx5UHJv
cGVydHlXcml0ZUVycm9yKTsKQEAgLTEzNCw3ICsxMzQsNyBAQCBib29sIEpTTW9kdWxlRW52aXJv
bm1lbnQ6OmRlbGV0ZVByb3BlcnR5CiAKICAgICBKU01vZHVsZUVudmlyb25tZW50KiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PEpTTW9kdWxlRW52aXJvbm1lbnQqPihjZWxsKTsKICAgICAvLyBBbGwgaW1w
b3J0ZWQgYmluZGluZ3MgYXJlIGltbXV0YWJsZS4KLSAgICBBYnN0cmFjdE1vZHVsZVJlY29yZDo6
UmVzb2x1dGlvbiByZXNvbHV0aW9uID0gdGhpc09iamVjdC0+bW9kdWxlUmVjb3JkKCktPnJlc29s
dmVJbXBvcnQoZXhlYywgSWRlbnRpZmllcjo6ZnJvbVVpZChleGVjLCBwcm9wZXJ0eU5hbWUudWlk
KCkpKTsKKyAgICBBYnN0cmFjdE1vZHVsZVJlY29yZDo6UmVzb2x1dGlvbiByZXNvbHV0aW9uID0g
dGhpc09iamVjdC0+bW9kdWxlUmVjb3JkKCktPnJlc29sdmVJbXBvcnQoZXhlYywgSWRlbnRpZmll
cjo6ZnJvbVVpZCh2bSwgcHJvcGVydHlOYW1lLnVpZCgpKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgZmFsc2UpOwogICAgIGlmIChyZXNvbHV0aW9uLnR5cGUgPT0gQWJzdHJhY3RN
b2R1bGVSZWNvcmQ6OlJlc29sdXRpb246OlR5cGU6OlJlc29sdmVkKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZUxvYWRl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1
bGVMb2FkZXIuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU01vZHVsZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTkgQXBwbGUgSW5jLiBBbGwgUmlnaHRz
IFJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDE2IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUu
dGVhQGdtYWlsLmNvbT4uCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0xMDksNyArMTA5LDcgQEAgdm9p
ZCBKU01vZHVsZUxvYWRlcjo6ZmluaXNoQ3JlYXRpb24oRXhlYwogICAgIEFTU0VSVChpbmhlcml0
cyh2bSwgaW5mbygpKSk7CiAgICAgSlNNYXAqIG1hcCA9IEpTTWFwOjpjcmVhdGUoZXhlYywgdm0s
IGdsb2JhbE9iamVjdC0+bWFwU3RydWN0dXJlKCkpOwogICAgIHNjb3BlLnJlbGVhc2VBc3NlcnRO
b0V4Y2VwdGlvbigpOwotICAgIHB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygm
dm0sICJyZWdpc3RyeSIpLCBtYXApOworICAgIHB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyh2bSwgInJlZ2lzdHJ5IiksIG1hcCk7CiB9CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSBGdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
QEAgLTI0MSw3ICsyNDEsNyBAQCBKU0ludGVybmFsUHJvbWlzZSogSlNNb2R1bGVMb2FkZXI6OnJl
cXVlCiAgICAgQVNTRVJUKGNhbGxUeXBlICE9IENhbGxUeXBlOjpOb25lKTsKIAogICAgIE1hcmtl
ZEFyZ3VtZW50QnVmZmVyIGFyZ3VtZW50czsKLSAgICBhcmd1bWVudHMuYXBwZW5kKGpzU3RyaW5n
KGV4ZWMsIG1vZHVsZUtleS5pbXBsKCkpKTsKKyAgICBhcmd1bWVudHMuYXBwZW5kKGpzU3RyaW5n
KHZtLCBtb2R1bGVLZXkuaW1wbCgpKSk7CiAgICAgYXJndW1lbnRzLmFwcGVuZChwYXJhbWV0ZXJz
KTsKICAgICBhcmd1bWVudHMuYXBwZW5kKHNjcmlwdEZldGNoZXIpOwogICAgIEFTU0VSVCghYXJn
dW1lbnRzLmhhc092ZXJmbG93ZWQoKSk7CkBAIC00MjAsNyArNDIwLDcgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBtb2R1bGVMb2FkZQogCiAgICAgUGFyc2VyRXJyb3IgZXJyb3I7CiAg
ICAgc3RkOjp1bmlxdWVfcHRyPE1vZHVsZVByb2dyYW1Ob2RlPiBtb2R1bGVQcm9ncmFtTm9kZSA9
IHBhcnNlPE1vZHVsZVByb2dyYW1Ob2RlPigKLSAgICAgICAgJnZtLCBzb3VyY2VDb2RlLCBJZGVu
dGlmaWVyKCksIEpTUGFyc2VyQnVpbHRpbk1vZGU6Ok5vdEJ1aWx0aW4sCisgICAgICAgIHZtLCBz
b3VyY2VDb2RlLCBJZGVudGlmaWVyKCksIEpTUGFyc2VyQnVpbHRpbk1vZGU6Ok5vdEJ1aWx0aW4s
CiAgICAgICAgIEpTUGFyc2VyU3RyaWN0TW9kZTo6U3RyaWN0LCBKU1BhcnNlclNjcmlwdE1vZGU6
Ok1vZHVsZSwgU291cmNlUGFyc2VNb2RlOjpNb2R1bGVBbmFseXplTW9kZSwgU3VwZXJCaW5kaW5n
OjpOb3ROZWVkZWQsIGVycm9yKTsKICAgICBpZiAoZXJyb3IuaXNWYWxpZCgpKQogICAgICAgICBy
ZXR1cm4gcmVqZWN0KGVycm9yLnRvRXJyb3JPYmplY3QoZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVj
dCgpLCBzb3VyY2VDb2RlKSk7CkBAIC00NDcsNyArNDQ3LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBtb2R1bGVMb2FkZQogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVu
Y29kZWRKU1ZhbHVlKCkpOwogICAgIHNpemVfdCBpID0gMDsKICAgICBmb3IgKGF1dG8mIGtleSA6
IG1vZHVsZVJlY29yZC0+cmVxdWVzdGVkTW9kdWxlcygpKSB7Ci0gICAgICAgIHJlc3VsdC0+cHV0
RGlyZWN0SW5kZXgoZXhlYywgaSsrLCBqc1N0cmluZyhleGVjLCBrZXkuZ2V0KCkpKTsKKyAgICAg
ICAgcmVzdWx0LT5wdXREaXJlY3RJbmRleChleGVjLCBpKyssIGpzU3RyaW5nKHZtLCBrZXkuZ2V0
KCkpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUo
KSk7CiAgICAgfQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlTmFtZXNwYWNlT2JqZWN0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZU5hbWVz
cGFjZU9iamVjdC5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTTW9kdWxlTmFtZXNwYWNlT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTczLDcgKzczLDcgQEAgdm9pZCBKU01vZHVsZU5hbWVzcGFjZU9iamVjdDo6ZmluaXNoQ3JlYQog
ICAgICAgICB9CiAgICAgfQogCi0gICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT50
b1N0cmluZ1RhZ1N5bWJvbCwganNTdHJpbmcoJnZtLCAiTW9kdWxlIiksIFByb3BlcnR5QXR0cmli
dXRlOjpEb250RW51bSB8IFByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgUHJvcGVydHlB
dHRyaWJ1dGU6OlJlYWRPbmx5KTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMt
PnRvU3RyaW5nVGFnU3ltYm9sLCBqc1N0cmluZyh2bSwgIk1vZHVsZSIpLCBQcm9wZXJ0eUF0dHJp
YnV0ZTo6RG9udEVudW0gfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IFByb3BlcnR5
QXR0cmlidXRlOjpSZWFkT25seSk7CiAKICAgICAvLyBodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRp
b25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtbW9kdWxlLW5hbWVzcGFjZS1leG90aWMtb2JqZWN0
cy1nZXRwcm90b3R5cGVvZgogICAgIC8vIGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9y
Zy9lY21hLTI2Mi82LjAvI3NlYy1tb2R1bGUtbmFtZXNwYWNlLWV4b3RpYy1vYmplY3RzLXNldHBy
b3RvdHlwZW9mLXYKQEAgLTE3Myw4ICsxNzMsOSBAQCBib29sIEpTTW9kdWxlTmFtZXNwYWNlT2Jq
ZWN0OjpnZXRPd25Qcm9wCiAKIGJvb2wgSlNNb2R1bGVOYW1lc3BhY2VPYmplY3Q6OmdldE93blBy
b3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmplY3QqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWdu
ZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CisgICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKICAgICBKU01vZHVsZU5hbWVzcGFjZU9iamVjdCogdGhpc09iamVjdCA9IGpzQ2Fz
dDxKU01vZHVsZU5hbWVzcGFjZU9iamVjdCo+KGNlbGwpOwotICAgIHJldHVybiB0aGlzT2JqZWN0
LT5nZXRPd25Qcm9wZXJ0eVNsb3RDb21tb24oZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBw
cm9wZXJ0eU5hbWUpLCBzbG90KTsKKyAgICByZXR1cm4gdGhpc09iamVjdC0+Z2V0T3duUHJvcGVy
dHlTbG90Q29tbW9uKGV4ZWMsIElkZW50aWZpZXI6OmZyb20odm0sIHByb3BlcnR5TmFtZSksIHNs
b3QpOwogfQogCiBib29sIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0OjpwdXQoSlNDZWxsKiwgRXhl
Y1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xv
dCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlUmVjb3JkLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZVJl
Y29yZC5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTTW9kdWxlUmVjb3JkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE4MCw3ICsxODAsNyBA
QCB2b2lkIEpTTW9kdWxlUmVjb3JkOjppbnN0YW50aWF0ZURlY2xhcmF0CiAgICAgICAgIFZhck9m
ZnNldCBvZmZzZXQgPSBlbnRyeS52YXJPZmZzZXQoKTsKICAgICAgICAgaWYgKCFvZmZzZXQuaXNT
dGFjaygpKSB7CiAgICAgICAgICAgICBib29sIHB1dFJlc3VsdCA9IGZhbHNlOwotICAgICAgICAg
ICAgc3ltYm9sVGFibGVQdXRUb3VjaFdhdGNocG9pbnRTZXQobW9kdWxlRW52aXJvbm1lbnQsIGV4
ZWMsIElkZW50aWZpZXI6OmZyb21VaWQoZXhlYywgdmFyaWFibGUua2V5LmdldCgpKSwganNVbmRl
ZmluZWQoKSwgLyogc2hvdWxkVGhyb3dSZWFkT25seUVycm9yICovIGZhbHNlLCAvKiBpZ25vcmVS
ZWFkT25seUVycm9ycyAqLyB0cnVlLCBwdXRSZXN1bHQpOworICAgICAgICAgICAgc3ltYm9sVGFi
bGVQdXRUb3VjaFdhdGNocG9pbnRTZXQobW9kdWxlRW52aXJvbm1lbnQsIGV4ZWMsIElkZW50aWZp
ZXI6OmZyb21VaWQodm0sIHZhcmlhYmxlLmtleS5nZXQoKSksIGpzVW5kZWZpbmVkKCksIC8qIHNo
b3VsZFRocm93UmVhZE9ubHlFcnJvciAqLyBmYWxzZSwgLyogaWdub3JlUmVhZE9ubHlFcnJvcnMg
Ki8gdHJ1ZSwgcHV0UmVzdWx0KTsKICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIHZvaWQoKSk7CiAgICAgICAgIH0KICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU09OT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU09OT2JqZWN0LmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPTk9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC02NCw3ICs2NCw3IEBAIHZvaWQgSlNPTk9iamVjdDo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQog
ICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBBU1NFUlQoaW5oZXJpdHModm0sIGlu
Zm8oKSkpOwogCi0gICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5
TmFtZXMtPnRvU3RyaW5nVGFnU3ltYm9sLCBqc1N0cmluZygmdm0sICJKU09OIiksIFByb3BlcnR5
QXR0cmlidXRlOjpEb250RW51bSB8IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSk7CisgICAg
cHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPnRvU3RyaW5n
VGFnU3ltYm9sLCBqc1N0cmluZyh2bSwgIkpTT04iKSwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRF
bnVtIHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KTsKIH0KIAogLy8gUHJvcGVydHlOYW1l
Rm9yRnVuY3Rpb25DYWxsIG9iamVjdHMgbXVzdCBiZSBvbiB0aGUgc3RhY2ssIHNpbmNlIHRoZSBK
U1ZhbHVlIHRoYXQgdGhleSBjcmVhdGUgaXMgbm90IG1hcmtlZC4KQEAgLTIwNSwxMyArMjA1LDEz
IEBAIGlubGluZSBQcm9wZXJ0eU5hbWVGb3JGdW5jdGlvbkNhbGw6OlByb3AKIEpTVmFsdWUgUHJv
cGVydHlOYW1lRm9yRnVuY3Rpb25DYWxsOjp2YWx1ZShFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiB7
CiAgICAgaWYgKCFtX3ZhbHVlKSB7CisgICAgICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAg
ICAgIGlmIChtX2lkZW50aWZpZXIpCi0gICAgICAgICAgICBtX3ZhbHVlID0ganNTdHJpbmcoZXhl
YywgbV9pZGVudGlmaWVyLT5zdHJpbmcoKSk7CisgICAgICAgICAgICBtX3ZhbHVlID0ganNTdHJp
bmcodm0sIG1faWRlbnRpZmllci0+c3RyaW5nKCkpOwogICAgICAgICBlbHNlIHsKLSAgICAgICAg
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgICAgICAgICBpZiAobV9udW1iZXIgPD0gOSkK
ICAgICAgICAgICAgICAgICByZXR1cm4gdm0uc21hbGxTdHJpbmdzLnNpbmdsZUNoYXJhY3RlclN0
cmluZyhtX251bWJlciArICcwJyk7Ci0gICAgICAgICAgICBtX3ZhbHVlID0ganNOb250cml2aWFs
U3RyaW5nKCZ2bSwgdm0ubnVtZXJpY1N0cmluZ3MuYWRkKG1fbnVtYmVyKSk7CisgICAgICAgICAg
ICBtX3ZhbHVlID0ganNOb250cml2aWFsU3RyaW5nKHZtLCB2bS5udW1lcmljU3RyaW5ncy5hZGQo
bV9udW1iZXIpKTsKICAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4gbV92YWx1ZTsKQEAgLTIy
Miw3ICsyMjIsNyBAQCBKU1ZhbHVlIFByb3BlcnR5TmFtZUZvckZ1bmN0aW9uQ2FsbDo6dmFsCiBT
dHJpbmdpZmllcjo6U3RyaW5naWZpZXIoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHJlcGxhY2Vy
LCBKU1ZhbHVlIHNwYWNlKQogICAgIDogbV9leGVjKGV4ZWMpCiAgICAgLCBtX3JlcGxhY2VyKHJl
cGxhY2VyKQotICAgICwgbV9hcnJheVJlcGxhY2VyUHJvcGVydHlOYW1lcygmZXhlYy0+dm0oKSwg
UHJvcGVydHlOYW1lTW9kZTo6U3RyaW5ncywgUHJpdmF0ZVN5bWJvbE1vZGU6OkV4Y2x1ZGUpCisg
ICAgLCBtX2FycmF5UmVwbGFjZXJQcm9wZXJ0eU5hbWVzKGV4ZWMtPnZtKCksIFByb3BlcnR5TmFt
ZU1vZGU6OlN0cmluZ3MsIFByaXZhdGVTeW1ib2xNb2RlOjpFeGNsdWRlKQogewogICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwpAQCAtMjg3LDcgKzI4Nyw3IEBAIEpTVmFsdWUgU3RyaW5naWZpZXI6OnN0cmluZ2lmeShKU1Zh
bHVlIHYKICAgICB9CiAgICAgaWYgKFVOTElLRUxZKHN0cmluZ2lmeVJlc3VsdCAhPSBTdHJpbmdp
ZnlTdWNjZWVkZWQpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICBSRUxFQVNF
X0FORF9SRVRVUk4oc2NvcGUsIGpzU3RyaW5nKG1fZXhlYywgcmVzdWx0LnRvU3RyaW5nKCkpKTsK
KyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGpzU3RyaW5nKHZtLCByZXN1bHQudG9TdHJp
bmcoKSkpOwogfQogCiBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgU3RyaW5naWZpZXI6OnRvSlNPTihK
U1ZhbHVlIGJhc2VWYWx1ZSwgY29uc3QgUHJvcGVydHlOYW1lRm9yRnVuY3Rpb25DYWxsJiBwcm9w
ZXJ0eU5hbWUpCkBAIC00OTYsNyArNDk2LDcgQEAgYm9vbCBTdHJpbmdpZmllcjo6SG9sZGVyOjph
cHBlbmROZXh0UHJvcAogICAgICAgICAgICAgaWYgKHN0cmluZ2lmaWVyLm1fdXNpbmdBcnJheVJl
cGxhY2VyKQogICAgICAgICAgICAgICAgIG1fcHJvcGVydHlOYW1lcyA9IHN0cmluZ2lmaWVyLm1f
YXJyYXlSZXBsYWNlclByb3BlcnR5TmFtZXMuZGF0YSgpOwogICAgICAgICAgICAgZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgUHJvcGVydHlOYW1lQXJyYXkgb2JqZWN0UHJvcGVydHlOYW1lcygmdm0s
IFByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3MsIFByaXZhdGVTeW1ib2xNb2RlOjpFeGNsdWRlKTsK
KyAgICAgICAgICAgICAgICBQcm9wZXJ0eU5hbWVBcnJheSBvYmplY3RQcm9wZXJ0eU5hbWVzKHZt
LCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzLCBQcml2YXRlU3ltYm9sTW9kZTo6RXhjbHVkZSk7
CiAgICAgICAgICAgICAgICAgbV9vYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVy
dHlOYW1lcyhtX29iamVjdCwgZXhlYywgb2JqZWN0UHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25N
b2RlKCkpOwogICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNl
KTsKICAgICAgICAgICAgICAgICBtX3Byb3BlcnR5TmFtZXMgPSBvYmplY3RQcm9wZXJ0eU5hbWVz
LnJlbGVhc2VEYXRhKCk7CkBAIC03MDUsNyArNzA1LDcgQEAgTkVWRVJfSU5MSU5FIEpTVmFsdWUg
V2Fsa2VyOjp3YWxrKEpTVmFsdQogICAgICAgICAgICAgfQogICAgICAgICAgICAgY2FzZSBBcnJh
eUVuZFZpc2l0TWVtYmVyOiB7CiAgICAgICAgICAgICAgICAgSlNBcnJheSogYXJyYXkgPSBqc0Nh
c3Q8SlNBcnJheSo+KG1hcmtlZFN0YWNrLmxhc3QoKSk7Ci0gICAgICAgICAgICAgICAgSlNWYWx1
ZSBmaWx0ZXJlZFZhbHVlID0gY2FsbFJldml2ZXIoYXJyYXksIGpzU3RyaW5nKG1fZXhlYywgU3Ry
aW5nOjpudW1iZXIoaW5kZXhTdGFjay5sYXN0KCkpKSwgb3V0VmFsdWUpOworICAgICAgICAgICAg
ICAgIEpTVmFsdWUgZmlsdGVyZWRWYWx1ZSA9IGNhbGxSZXZpdmVyKGFycmF5LCBqc1N0cmluZyh2
bSwgU3RyaW5nOjpudW1iZXIoaW5kZXhTdGFjay5sYXN0KCkpKSwgb3V0VmFsdWUpOwogICAgICAg
ICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgICAgICAgICAg
ICAgaWYgKGZpbHRlcmVkVmFsdWUuaXNVbmRlZmluZWQoKSkKICAgICAgICAgICAgICAgICAgICAg
YXJyYXktPm1ldGhvZFRhYmxlKHZtKS0+ZGVsZXRlUHJvcGVydHlCeUluZGV4KGFycmF5LCBtX2V4
ZWMsIGluZGV4U3RhY2subGFzdCgpKTsKQEAgLTcyNSw3ICs3MjUsNyBAQCBORVZFUl9JTkxJTkUg
SlNWYWx1ZSBXYWxrZXI6OndhbGsoSlNWYWx1CiAgICAgICAgICAgICAgICAgSlNPYmplY3QqIG9i
amVjdCA9IGFzT2JqZWN0KGluVmFsdWUpOwogICAgICAgICAgICAgICAgIG1hcmtlZFN0YWNrLmFw
cGVuZFdpdGhDcmFzaE9uT3ZlcmZsb3cob2JqZWN0KTsKICAgICAgICAgICAgICAgICBpbmRleFN0
YWNrLmFwcGVuZCgwKTsKLSAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0YWNrLmFwcGVuZChQcm9w
ZXJ0eU5hbWVBcnJheSgmdm0sIFByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3MsIFByaXZhdGVTeW1i
b2xNb2RlOjpFeGNsdWRlKSk7CisgICAgICAgICAgICAgICAgcHJvcGVydHlTdGFjay5hcHBlbmQo
UHJvcGVydHlOYW1lQXJyYXkodm0sIFByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3MsIFByaXZhdGVT
eW1ib2xNb2RlOjpFeGNsdWRlKSk7CiAgICAgICAgICAgICAgICAgb2JqZWN0LT5tZXRob2RUYWJs
ZSh2bSktPmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBtX2V4ZWMsIHByb3BlcnR5U3RhY2su
bGFzdCgpLCBFbnVtZXJhdGlvbk1vZGUoKSk7CiAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgeyB9KTsKICAgICAgICAgICAgIH0KQEAgLTc2Miw3ICs3NjIsNyBAQCBO
RVZFUl9JTkxJTkUgSlNWYWx1ZSBXYWxrZXI6OndhbGsoSlNWYWx1CiAgICAgICAgICAgICAgICAg
SlNPYmplY3QqIG9iamVjdCA9IGpzQ2FzdDxKU09iamVjdCo+KG1hcmtlZFN0YWNrLmxhc3QoKSk7
CiAgICAgICAgICAgICAgICAgSWRlbnRpZmllciBwcm9wID0gcHJvcGVydHlTdGFjay5sYXN0KClb
aW5kZXhTdGFjay5sYXN0KCldOwogICAgICAgICAgICAgICAgIFB1dFByb3BlcnR5U2xvdCBzbG90
KG9iamVjdCk7Ci0gICAgICAgICAgICAgICAgSlNWYWx1ZSBmaWx0ZXJlZFZhbHVlID0gY2FsbFJl
dml2ZXIob2JqZWN0LCBqc1N0cmluZyhtX2V4ZWMsIHByb3Auc3RyaW5nKCkpLCBvdXRWYWx1ZSk7
CisgICAgICAgICAgICAgICAgSlNWYWx1ZSBmaWx0ZXJlZFZhbHVlID0gY2FsbFJldml2ZXIob2Jq
ZWN0LCBqc1N0cmluZyh2bSwgcHJvcC5zdHJpbmcoKSksIG91dFZhbHVlKTsKICAgICAgICAgICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgICAgICAgICAgICAgIGlm
IChmaWx0ZXJlZFZhbHVlLmlzVW5kZWZpbmVkKCkpCiAgICAgICAgICAgICAgICAgICAgIG9iamVj
dC0+bWV0aG9kVGFibGUodm0pLT5kZWxldGVQcm9wZXJ0eShvYmplY3QsIG1fZXhlYywgcHJvcCk7
CkBAIC03OTMsNyArNzkzLDcgQEAgTkVWRVJfSU5MSU5FIEpTVmFsdWUgV2Fsa2VyOjp3YWxrKEpT
VmFsdQogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KGZpbmFsSG9sZGVyKTsKICAgICBmaW5hbEhv
bGRlci0+bWV0aG9kVGFibGUodm0pLT5wdXQoZmluYWxIb2xkZXIsIG1fZXhlYywgdm0ucHJvcGVy
dHlOYW1lcy0+ZW1wdHlJZGVudGlmaWVyLCBvdXRWYWx1ZSwgc2xvdCk7CiAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgeyB9KTsKLSAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGNh
bGxSZXZpdmVyKGZpbmFsSG9sZGVyLCBqc0VtcHR5U3RyaW5nKG1fZXhlYyksIG91dFZhbHVlKSk7
CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBjYWxsUmV2aXZlcihmaW5hbEhvbGRlciwg
anNFbXB0eVN0cmluZyh2bSksIG91dFZhbHVlKSk7CiB9CiAKIC8vIEVDTUEtMjYyIHY1IDE1LjEy
LjIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHJl
dmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChD
KSAxOTk5LTIwMDEgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKICAqICBDb3B5cmlnaHQg
KEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKLSAqICBDb3B5cmlnaHQgKEMpIDIw
MDMtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChD
KSAyMDAzLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogIENvcHlyaWdo
dCAoQykgMjAwNyBFcmljIFNlaWRlbCAoZXJpY0B3ZWJraXQub3JnKQogICoKICAqICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBA
IC04Nyw3ICs4Nyw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBnZXRDbGFzc1Byb3BlcnR5TmFtZXMK
IAogICAgICAgICBmb3IgKGF1dG8gaXRlciA9IHRhYmxlLT5iZWdpbigpOyBpdGVyICE9IHRhYmxl
LT5lbmQoKTsgKytpdGVyKSB7CiAgICAgICAgICAgICBpZiAoIShpdGVyLT5hdHRyaWJ1dGVzKCkg
JiBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pIHx8IG1vZGUuaW5jbHVkZURvbnRFbnVtUHJv
cGVydGllcygpKQotICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6
OmZyb21TdHJpbmcoJnZtLCBpdGVyLmtleSgpKSk7CisgICAgICAgICAgICAgICAgcHJvcGVydHlO
YW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgaXRlci5rZXkoKSkpOwogICAgICAg
ICB9CiAgICAgfQogfQpAQCAtNTk4LDEyICs1OTgsMTQgQEAgU3RyaW5nIEpTT2JqZWN0OjpjYWxj
dWxhdGVkQ2xhc3NOYW1lKEpTTwogCiBib29sIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RC
eUluZGV4KEpTT2JqZWN0KiB0aGlzT2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGks
IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworCiAgICAg
Ly8gTkIuIFRoZSBmYWN0IHRoYXQgd2UncmUgZGlyZWN0bHkgY29uc3VsdGluZyBvdXIgaW5kZXhl
ZCBzdG9yYWdlIGltcGxpZXMgdGhhdCBpdCBpcyBub3QKICAgICAvLyBsZWdhbCBmb3IgYW55b25l
IHRvIG92ZXJyaWRlIGdldE93blByb3BlcnR5U2xvdCgpIHdpdGhvdXQgYWxzbyBvdmVycmlkaW5n
CiAgICAgLy8gZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleCgpLgogICAgIAogICAgIGlmIChpID4g
TUFYX0FSUkFZX0lOREVYKQotICAgICAgICByZXR1cm4gdGhpc09iamVjdC0+bWV0aG9kVGFibGUo
ZXhlYy0+dm0oKSktPmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBleGVjLCBJZGVudGlm
aWVyOjpmcm9tKGV4ZWMsIGkpLCBzbG90KTsKKyAgICAgICAgcmV0dXJuIHRoaXNPYmplY3QtPm1l
dGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIElkZW50
aWZpZXI6OmZyb20odm0sIGkpLCBzbG90KTsKICAgICAKICAgICBzd2l0Y2ggKHRoaXNPYmplY3Qt
PmluZGV4aW5nVHlwZSgpKSB7CiAgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQRVM6CkBA
IC04NjIsNyArODY0LDcgQEAgYm9vbCBKU09iamVjdDo6cHV0QnlJbmRleChKU0NlbGwqIGNlbGws
IAogCiAgICAgaWYgKHByb3BlcnR5TmFtZSA+IE1BWF9BUlJBWV9JTkRFWCkgewogICAgICAgICBQ
dXRQcm9wZXJ0eVNsb3Qgc2xvdChjZWxsLCBzaG91bGRUaHJvdyk7Ci0gICAgICAgIHJldHVybiB0
aGlzT2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPnB1dCh0aGlzT2JqZWN0LCBleGVjLCBJZGVudGlm
aWVyOjpmcm9tKGV4ZWMsIHByb3BlcnR5TmFtZSksIHZhbHVlLCBzbG90KTsKKyAgICAgICAgcmV0
dXJuIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+cHV0KHRoaXNPYmplY3QsIGV4ZWMsIElk
ZW50aWZpZXI6OmZyb20odm0sIHByb3BlcnR5TmFtZSksIHZhbHVlLCBzbG90KTsKICAgICB9CiAK
ICAgICB0aGlzT2JqZWN0LT5lbnN1cmVXcml0YWJsZSh2bSk7CkBAIC0yMDIyLDcgKzIwMjQsNyBA
QCBib29sIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlNDCiAgICAgSlNPYmplY3Qq
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNPYmplY3QqPihjZWxsKTsKICAgICAKICAgICBpZiAoaSA+
IE1BWF9BUlJBWV9JTkRFWCkKLSAgICAgICAgcmV0dXJuIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxl
KHZtKS0+ZGVsZXRlUHJvcGVydHkodGhpc09iamVjdCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShl
eGVjLCBpKSk7CisgICAgICAgIHJldHVybiB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmRl
bGV0ZVByb3BlcnR5KHRoaXNPYmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20odm0sIGkpKTsK
ICAgICAKICAgICBzd2l0Y2ggKHRoaXNPYmplY3QtPmluZGV4aW5nTW9kZSgpKSB7CiAgICAgY2Fz
ZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQRVM6CkBAIC0yNDQ2LDcgKzI0NDgsNyBAQCBKU1N0cmlu
ZyogSlNPYmplY3Q6OnRvU3RyaW5nKEV4ZWNTdGF0ZSogCiAgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNWYWx1
ZSBwcmltaXRpdmUgPSB0b1ByaW1pdGl2ZShleGVjLCBQcmVmZXJTdHJpbmcpOwotICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIGpzRW1wdHlTdHJpbmcoZXhlYykpOworICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIGpzRW1wdHlTdHJpbmcodm0pKTsKICAgICBSRUxFQVNFX0FORF9S
RVRVUk4oc2NvcGUsIHByaW1pdGl2ZS50b1N0cmluZyhleGVjKSk7CiB9CiAKQEAgLTI1MTksNyAr
MjUyMSw3IEBAIHZvaWQgSlNPYmplY3Q6OnJlaWZ5QWxsU3RhdGljUHJvcGVydGllcygKIAogICAg
ICAgICBmb3IgKGF1dG8mIHZhbHVlIDogKmhhc2hUYWJsZSkgewogICAgICAgICAgICAgdW5zaWdu
ZWQgYXR0cmlidXRlczsKLSAgICAgICAgICAgIGF1dG8ga2V5ID0gSWRlbnRpZmllcjo6ZnJvbVN0
cmluZygmdm0sIHZhbHVlLm1fa2V5KTsKKyAgICAgICAgICAgIGF1dG8ga2V5ID0gSWRlbnRpZmll
cjo6ZnJvbVN0cmluZyh2bSwgdmFsdWUubV9rZXkpOwogICAgICAgICAgICAgUHJvcGVydHlPZmZz
ZXQgb2Zmc2V0ID0gZ2V0RGlyZWN0T2Zmc2V0KHZtLCBrZXksIGF0dHJpYnV0ZXMpOwogICAgICAg
ICAgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCiAgICAgICAgICAgICAgICAgcmVpZnlT
dGF0aWNQcm9wZXJ0eSh2bSwgaGFzaFRhYmxlLT5jbGFzc0ZvclRoaXMsIGtleSwgdmFsdWUsICp0
aGlzKTsKQEAgLTMwNjQsNyArMzA2Niw3IEBAIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdEluZGV4
U2xvd09yQmV5b24KICAgICBpZiAoIWNhbkRvRmFzdFB1dERpcmVjdEluZGV4KHZtLCB0aGlzKSkg
ewogICAgICAgICBQcm9wZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRvcjsKICAgICAgICAgZGVzY3Jp
cHRvci5zZXREZXNjcmlwdG9yKHZhbHVlLCBhdHRyaWJ1dGVzKTsKLSAgICAgICAgcmV0dXJuIG1l
dGhvZFRhYmxlKHZtKS0+ZGVmaW5lT3duUHJvcGVydHkodGhpcywgZXhlYywgSWRlbnRpZmllcjo6
ZnJvbShleGVjLCBpKSwgZGVzY3JpcHRvciwgbW9kZSA9PSBQdXREaXJlY3RJbmRleFNob3VsZFRo
cm93KTsKKyAgICAgICAgcmV0dXJuIG1ldGhvZFRhYmxlKHZtKS0+ZGVmaW5lT3duUHJvcGVydHko
dGhpcywgZXhlYywgSWRlbnRpZmllcjo6ZnJvbSh2bSwgaSksIGRlc2NyaXB0b3IsIG1vZGUgPT0g
UHV0RGlyZWN0SW5kZXhTaG91bGRUaHJvdyk7CiAgICAgfQogCiAgICAgLy8gaSBzaG91bGQgYmUg
YSB2YWxpZCBhcnJheSBpbmRleCB0aGF0IGlzIG91dHNpZGUgb2YgdGhlIGN1cnJlbnQgdmVjdG9y
LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCShyZXZpc2lv
biAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xOTgsMTEgKzE5OCwxMiBAQCBwdWJsaWM6CiAgICAgLy8gVGhpcyBw
ZXJmb3JtcyB0aGUgRUNNQVNjcmlwdCBTZXQoKSBvcGVyYXRpb24uCiAgICAgQUxXQVlTX0lOTElO
RSBib29sIHB1dEJ5SW5kZXhJbmxpbmUoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0
eU5hbWUsIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCiAgICAgeworICAgICAgICBW
TSYgdm0gPSBleGVjLT52bSgpOwogICAgICAgICBpZiAoY2FuU2V0SW5kZXhRdWlja2x5KHByb3Bl
cnR5TmFtZSwgdmFsdWUpKSB7Ci0gICAgICAgICAgICBzZXRJbmRleFF1aWNrbHkoZXhlYy0+dm0o
KSwgcHJvcGVydHlOYW1lLCB2YWx1ZSk7CisgICAgICAgICAgICBzZXRJbmRleFF1aWNrbHkodm0s
IHByb3BlcnR5TmFtZSwgdmFsdWUpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAg
IH0KLSAgICAgICAgcmV0dXJuIG1ldGhvZFRhYmxlKGV4ZWMtPnZtKCkpLT5wdXRCeUluZGV4KHRo
aXMsIGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNob3VsZFRocm93KTsKKyAgICAgICAgcmV0
dXJuIG1ldGhvZFRhYmxlKHZtKS0+cHV0QnlJbmRleCh0aGlzLCBleGVjLCBwcm9wZXJ0eU5hbWUs
IHZhbHVlLCBzaG91bGRUaHJvdyk7CiAgICAgfQogICAgICAgICAKICAgICAvLyBUaGlzIGlzIHNp
bWlsYXIgdG8gdGhlIHB1dERpcmVjdCogbWV0aG9kczoKQEAgLTE1NDksNyArMTU1MCw3IEBAIGlu
bGluZSBzaXplX3Qgb2Zmc2V0SW5CdXR0ZXJmbHkoUHJvcGVydHkKIAogaW5saW5lIHNpemVfdCBK
U09iamVjdDo6YnV0dGVyZmx5UHJlQ2FwYWNpdHkoKQogewotICAgIFZNJiB2bSA9ICp0aGlzLT52
bSgpOworICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgaWYgKFVOTElLRUxZKGhhc0luZGV4
aW5nSGVhZGVyKHZtKSkpCiAgICAgICAgIHJldHVybiBidXR0ZXJmbHkoKS0+aW5kZXhpbmdIZWFk
ZXIoKS0+cHJlQ2FwYWNpdHkoc3RydWN0dXJlKHZtKSk7CiAgICAgcmV0dXJuIDA7CkBAIC0xNTU3
LDcgKzE1NTgsNyBAQCBpbmxpbmUgc2l6ZV90IEpTT2JqZWN0OjpidXR0ZXJmbHlQcmVDYXBhCiAK
IGlubGluZSBzaXplX3QgSlNPYmplY3Q6OmJ1dHRlcmZseVRvdGFsU2l6ZSgpCiB7Ci0gICAgVk0m
IHZtID0gKnRoaXMtPnZtKCk7CisgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSA9IHRoaXMtPnN0cnVjdHVyZSh2bSk7CiAgICAgQnV0dGVyZmx5KiBidXR0
ZXJmbHkgPSB0aGlzLT5idXR0ZXJmbHkoKTsKICAgICBzaXplX3QgcHJlQ2FwYWNpdHk7CkBAIC0x
NjA2LDEyICsxNjA3LDEyIEBAIENPTVBJTEVfQVNTRVJUKCEoc2l6ZW9mKEpTT2JqZWN0KSAlIHNp
emUKIHRlbXBsYXRlPHVuc2lnbmVkIGNoYXJhY3RlcnNDb3VudD4KIEFMV0FZU19JTkxJTkUgSWRl
bnRpZmllciBtYWtlSWRlbnRpZmllcihWTSYgdm0sIGNvbnN0IGNoYXIgKCZjaGFyYWN0ZXJzKVtj
aGFyYWN0ZXJzQ291bnRdKQogewotICAgIHJldHVybiBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2
bSwgY2hhcmFjdGVycyk7CisgICAgcmV0dXJuIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIGNo
YXJhY3RlcnMpOwogfQogCiBBTFdBWVNfSU5MSU5FIElkZW50aWZpZXIgbWFrZUlkZW50aWZpZXIo
Vk0mIHZtLCBjb25zdCBjaGFyKiBuYW1lKQogewotICAgIHJldHVybiBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKCZ2bSwgbmFtZSk7CisgICAgcmV0dXJuIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0s
IG5hbWUpOwogfQogCiBBTFdBWVNfSU5MSU5FIElkZW50aWZpZXIgbWFrZUlkZW50aWZpZXIoVk0m
LCBjb25zdCBJZGVudGlmaWVyJiBuYW1lKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNQcm9taXNlUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1Byb21pc2VQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyNDkxMjgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb21pc2VQcm90b3R5cGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTc2LDcgKzc2LDcgQEAgSlNQcm9taXNlUHJvdG90eXBlOjpKU1Byb21p
c2VQcm90b3R5cGUoVgogdm9pZCBKU1Byb21pc2VQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZN
JiB2bSwgU3RydWN0dXJlKikKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7Ci0gICAg
cHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPnRvU3RyaW5n
VGFnU3ltYm9sLCBqc1N0cmluZygmdm0sICJQcm9taXNlIiksIFByb3BlcnR5QXR0cmlidXRlOjpE
b250RW51bSB8IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSk7CisgICAgcHV0RGlyZWN0V2l0
aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPnRvU3RyaW5nVGFnU3ltYm9sLCBq
c1N0cmluZyh2bSwgIlByb21pc2UiKSwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtIHwgUHJv
cGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KTsKIH0KIAogdm9pZCBKU1Byb21pc2VQcm90b3R5cGU6
OmFkZE93bkludGVybmFsU2xvdHMoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0y
MDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtNjgsNyArNjgsNyBAQCB2b2lkIEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
cjo6ZmluaXNoQ3JlCiAgICAgQVNTRVJUKG1fZW5kR2VuZXJpY1Byb3BlcnR5SW5kZXggPT0gdmVj
dG9yLnNpemUoKSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZlY3Rvci5zaXplKCk7
ICsraSkgewogICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyID0gdmVjdG9yW2ld
OwotICAgICAgICBtX3Byb3BlcnR5TmFtZXMuZ2V0KClbaV0uc2V0KHZtLCB0aGlzLCBqc1N0cmlu
Zygmdm0sIGlkZW50aWZpZXIuc3RyaW5nKCkpKTsKKyAgICAgICAgbV9wcm9wZXJ0eU5hbWVzLmdl
dCgpW2ldLnNldCh2bSwgdGhpcywganNTdHJpbmcodm0sIGlkZW50aWZpZXIuc3RyaW5nKCkpKTsK
ICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVy
dHlOYW1lRW51bWVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oCShyZXZpc2lvbiAyNDkxMjgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQt
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTExMCw3ICsxMTAsNyBAQCBpbmxpbmUgSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yKiBwcm9wZXJ0CiAKICAgICB1aW50MzJfdCBudW1iZXJTdHJ1Y3R1cmVQcm9wZXJ0
aWVzID0gMDsKIAotICAgIFByb3BlcnR5TmFtZUFycmF5IHByb3BlcnR5TmFtZXMoJnZtLCBQcm9w
ZXJ0eU5hbWVNb2RlOjpTdHJpbmdzLCBQcml2YXRlU3ltYm9sTW9kZTo6RXhjbHVkZSk7CisgICAg
UHJvcGVydHlOYW1lQXJyYXkgcHJvcGVydHlOYW1lcyh2bSwgUHJvcGVydHlOYW1lTW9kZTo6U3Ry
aW5ncywgUHJpdmF0ZVN5bWJvbE1vZGU6OkV4Y2x1ZGUpOwogCiAgICAgaWYgKHN0cnVjdHVyZS0+
Y2FuQWNjZXNzUHJvcGVydGllc1F1aWNrbHlGb3JFbnVtZXJhdGlvbigpICYmIGluZGV4ZWRMZW5n
dGggPT0gYmFzZS0+Z2V0QXJyYXlMZW5ndGgoKSkgewogICAgICAgICBiYXNlLT5tZXRob2RUYWJs
ZSh2bSktPmdldFN0cnVjdHVyZVByb3BlcnR5TmFtZXMoYmFzZSwgZXhlYywgcHJvcGVydHlOYW1l
cywgRW51bWVyYXRpb25Nb2RlKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNSdW5Mb29wVGltZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTUnVuTG9vcFRpbWVyLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNSdW5Mb29wVGltZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMzA3LDggKzMwNyw4IEBAIHZvaWQgSlNSdW5Mb29wVGltZXI6OnRpbWVyRGlkRmlyZSgp
CiAgICAgZG9Xb3JrKCp2bSk7CiB9CiAKLUpTUnVuTG9vcFRpbWVyOjpKU1J1bkxvb3BUaW1lcihW
TSogdm0pCi0gICAgOiBtX2FwaUxvY2sodm0tPmFwaUxvY2soKSkKK0pTUnVuTG9vcFRpbWVyOjpK
U1J1bkxvb3BUaW1lcihWTSYgdm0pCisgICAgOiBtX2FwaUxvY2sodm0uYXBpTG9jaygpKQogewog
fQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1J1bkxvb3BUaW1lci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUnVuTG9vcFRp
bWVyLmgJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTUnVuTG9vcFRpbWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDEyLCAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMDMsNyArMTAzLDcg
QEAgcHVibGljOgogICAgICAgICBIYXNoTWFwPFJlZjxKU0xvY2s+LCBzdGQ6OnVuaXF1ZV9wdHI8
UGVyVk1EYXRhPj4gbV9tYXBwaW5nOwogICAgIH07CiAKLSAgICBKU1J1bkxvb3BUaW1lcihWTSop
OworICAgIEpTUnVuTG9vcFRpbWVyKFZNJik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdmlydHVh
bCB+SlNSdW5Mb29wVGltZXIoKTsKICAgICB2aXJ0dWFsIHZvaWQgZG9Xb3JrKFZNJikgPSAwOwog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuY3BwCShyZXZp
c2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogIENvcHlyaWdodCAoQykg
MTk5OS0yMDAyIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCiAgKiAgQ29weXJpZ2h0IChD
KSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA0
LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykg
MjAwNC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgog
ICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCkBAIC03MSw3ICs3MSw3IEBAIHZvaWQgSlNTdHJpbmc6OmRlc3Ryb3koSlNDZWxsKiBj
ZWxsKQogCiB2b2lkIEpTU3RyaW5nOjpkdW1wVG9TdHJlYW0oY29uc3QgSlNDZWxsKiBjZWxsLCBQ
cmludFN0cmVhbSYgb3V0KQogewotICAgIFZNJiB2bSA9ICpjZWxsLT52bSgpOworICAgIFZNJiB2
bSA9IGNlbGwtPnZtKCk7CiAgICAgY29uc3QgSlNTdHJpbmcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
Y29uc3QgSlNTdHJpbmcqPihjZWxsKTsKICAgICBvdXQucHJpbnRmKCI8JXAsICVzLCBbJXVdLCAi
LCB0aGlzT2JqZWN0LCB0aGlzT2JqZWN0LT5jbGFzc05hbWUodm0pLCB0aGlzT2JqZWN0LT5sZW5n
dGgoKSk7CiAgICAgdWludHB0cl90IHBvaW50ZXIgPSB0aGlzT2JqZWN0LT5tX2ZpYmVyOwpAQCAt
Mjk0LDcgKzI5NCw3IEBAIGNvbnN0IFN0cmluZyYgSlNSb3BlU3RyaW5nOjpyZXNvbHZlUm9wZVcK
IHsKICAgICBBU1NFUlQoaXNSb3BlKCkpOwogICAgIAotICAgIFZNJiB2bSA9ICp0aGlzLT52bSgp
OworICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgaWYgKGlzU3Vic3RyaW5nKCkpIHsKICAg
ICAgICAgQVNTRVJUKCFzdWJzdHJpbmdCYXNlKCktPmlzUm9wZSgpKTsKICAgICAgICAgYXV0byBu
ZXdJbXBsID0gc3Vic3RyaW5nQmFzZSgpLT52YWx1ZUludGVybmFsKCkuc3Vic3RyaW5nU2hhcmlu
Z0ltcGwoc3Vic3RyaW5nT2Zmc2V0KCksIGxlbmd0aCgpKTsKQEAgLTUwMiw3ICs1MDIsNyBAQCBK
U1N0cmluZyoganNTdHJpbmdXaXRoQ2FjaGVTbG93Q2FzZShWTSYgCiAgICAgaWYgKEpTU3RyaW5n
KiBzdHJpbmcgPSB2bS5zdHJpbmdDYWNoZS5nZXQoJnN0cmluZ0ltcGwpKQogICAgICAgICByZXR1
cm4gc3RyaW5nOwogCi0gICAgSlNTdHJpbmcqIHN0cmluZyA9IGpzU3RyaW5nKCZ2bSwgU3RyaW5n
KHN0cmluZ0ltcGwpKTsKKyAgICBKU1N0cmluZyogc3RyaW5nID0ganNTdHJpbmcodm0sIFN0cmlu
ZyhzdHJpbmdJbXBsKSk7CiAgICAgdm0ubGFzdENhY2hlZFN0cmluZy5zZXQodm0sIHN0cmluZyk7
CiAgICAgcmV0dXJuIHN0cmluZzsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTU3RyaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNTdHJpbmcuaAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNTdHJpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsMjYgKzQxLDIxIEBAIGNs
YXNzIEpTU3RyaW5nOwogY2xhc3MgSlNSb3BlU3RyaW5nOwogY2xhc3MgTExJbnRPZmZzZXRzRXh0
cmFjdG9yOwogCi1KU1N0cmluZyoganNFbXB0eVN0cmluZyhWTSopOwotSlNTdHJpbmcqIGpzRW1w
dHlTdHJpbmcoRXhlY1N0YXRlKik7Ci1KU1N0cmluZyoganNTdHJpbmcoVk0qLCBjb25zdCBTdHJp
bmcmKTsgLy8gcmV0dXJucyBlbXB0eSBzdHJpbmcgaWYgcGFzc2VkIG51bGwgc3RyaW5nCi1KU1N0
cmluZyoganNTdHJpbmcoRXhlY1N0YXRlKiwgY29uc3QgU3RyaW5nJik7IC8vIHJldHVybnMgZW1w
dHkgc3RyaW5nIGlmIHBhc3NlZCBudWxsIHN0cmluZwotCi1KU1N0cmluZyoganNTaW5nbGVDaGFy
YWN0ZXJTdHJpbmcoVk0qLCBVQ2hhcik7Ci1KU1N0cmluZyoganNTaW5nbGVDaGFyYWN0ZXJTdHJp
bmcoRXhlY1N0YXRlKiwgVUNoYXIpOwotSlNTdHJpbmcqIGpzU3Vic3RyaW5nKFZNKiwgY29uc3Qg
U3RyaW5nJiwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOworSlNTdHJpbmcqIGpz
RW1wdHlTdHJpbmcoVk0mKTsKK0pTU3RyaW5nKiBqc1N0cmluZyhWTSYsIGNvbnN0IFN0cmluZyYp
OyAvLyByZXR1cm5zIGVtcHR5IHN0cmluZyBpZiBwYXNzZWQgbnVsbCBzdHJpbmcKKworSlNTdHJp
bmcqIGpzU2luZ2xlQ2hhcmFjdGVyU3RyaW5nKFZNJiwgVUNoYXIpOworSlNTdHJpbmcqIGpzU3Vi
c3RyaW5nKFZNJiwgY29uc3QgU3RyaW5nJiwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5n
dGgpOwogCiAvLyBOb24tdHJpdmlhbCBzdHJpbmdzIGFyZSB0d28gb3IgbW9yZSBjaGFyYWN0ZXJz
IGxvbmcuCiAvLyBUaGVzZSBmdW5jdGlvbnMgYXJlIGZhc3RlciB0aGFuIGp1c3QgY2FsbGluZyBq
c1N0cmluZy4KLUpTU3RyaW5nKiBqc05vbnRyaXZpYWxTdHJpbmcoVk0qLCBjb25zdCBTdHJpbmcm
KTsKLUpTU3RyaW5nKiBqc05vbnRyaXZpYWxTdHJpbmcoRXhlY1N0YXRlKiwgY29uc3QgU3RyaW5n
Jik7Ci1KU1N0cmluZyoganNOb250cml2aWFsU3RyaW5nKEV4ZWNTdGF0ZSosIFN0cmluZyYmKTsK
K0pTU3RyaW5nKiBqc05vbnRyaXZpYWxTdHJpbmcoVk0mLCBjb25zdCBTdHJpbmcmKTsKK0pTU3Ry
aW5nKiBqc05vbnRyaXZpYWxTdHJpbmcoVk0mLCBTdHJpbmcmJik7CiAKIC8vIFNob3VsZCBiZSB1
c2VkIGZvciBzdHJpbmdzIHRoYXQgYXJlIG93bmVkIGJ5IGFuIG9iamVjdCB0aGF0IHdpbGwKIC8v
IGxpa2VseSBvdXRsaXZlIHRoZSBKU1ZhbHVlIHRoaXMgbWFrZXMsIHN1Y2ggYXMgdGhlIHBhcnNl
IHRyZWUgb3IgYQogLy8gRE9NIG9iamVjdCB0aGF0IGNvbnRhaW5zIGEgU3RyaW5nCi1KU1N0cmlu
ZyoganNPd25lZFN0cmluZyhWTSosIGNvbnN0IFN0cmluZyYpOwotSlNTdHJpbmcqIGpzT3duZWRT
dHJpbmcoRXhlY1N0YXRlKiwgY29uc3QgU3RyaW5nJik7CitKU1N0cmluZyoganNPd25lZFN0cmlu
ZyhWTSYsIGNvbnN0IFN0cmluZyYpOwogCiBib29sIGlzSlNTdHJpbmcoSlNDZWxsKik7CiBib29s
IGlzSlNTdHJpbmcoSlNWYWx1ZSk7CkBAIC0yMzgsMjAgKzIzMywyMCBAQCBwcml2YXRlOgogCiAg
ICAgU3RyaW5nVmlldyB1bnNhZmVWaWV3KEV4ZWNTdGF0ZSopIGNvbnN0OwogCi0gICAgZnJpZW5k
IEpTU3RyaW5nKiBqc1N0cmluZyhWTSosIGNvbnN0IFN0cmluZyYpOworICAgIGZyaWVuZCBKU1N0
cmluZyoganNTdHJpbmcoVk0mLCBjb25zdCBTdHJpbmcmKTsKICAgICBmcmllbmQgSlNTdHJpbmcq
IGpzU3RyaW5nKEV4ZWNTdGF0ZSosIEpTU3RyaW5nKiwgSlNTdHJpbmcqKTsKICAgICBmcmllbmQg
SlNTdHJpbmcqIGpzU3RyaW5nKEV4ZWNTdGF0ZSosIGNvbnN0IFN0cmluZyYsIEpTU3RyaW5nKik7
CiAgICAgZnJpZW5kIEpTU3RyaW5nKiBqc1N0cmluZyhFeGVjU3RhdGUqLCBKU1N0cmluZyosIGNv
bnN0IFN0cmluZyYpOwogICAgIGZyaWVuZCBKU1N0cmluZyoganNTdHJpbmcoRXhlY1N0YXRlKiwg
Y29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJik7CiAgICAgZnJpZW5kIEpTU3RyaW5nKiBqc1N0
cmluZyhFeGVjU3RhdGUqLCBKU1N0cmluZyosIEpTU3RyaW5nKiwgSlNTdHJpbmcqKTsKICAgICBm
cmllbmQgSlNTdHJpbmcqIGpzU3RyaW5nKEV4ZWNTdGF0ZSosIGNvbnN0IFN0cmluZyYsIGNvbnN0
IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpOwotICAgIGZyaWVuZCBKU1N0cmluZyoganNTaW5nbGVD
aGFyYWN0ZXJTdHJpbmcoVk0qLCBVQ2hhcik7Ci0gICAgZnJpZW5kIEpTU3RyaW5nKiBqc05vbnRy
aXZpYWxTdHJpbmcoVk0qLCBjb25zdCBTdHJpbmcmKTsKLSAgICBmcmllbmQgSlNTdHJpbmcqIGpz
Tm9udHJpdmlhbFN0cmluZyhWTSosIFN0cmluZyYmKTsKLSAgICBmcmllbmQgSlNTdHJpbmcqIGpz
U3Vic3RyaW5nKFZNKiwgY29uc3QgU3RyaW5nJiwgdW5zaWduZWQsIHVuc2lnbmVkKTsKKyAgICBm
cmllbmQgSlNTdHJpbmcqIGpzU2luZ2xlQ2hhcmFjdGVyU3RyaW5nKFZNJiwgVUNoYXIpOworICAg
IGZyaWVuZCBKU1N0cmluZyoganNOb250cml2aWFsU3RyaW5nKFZNJiwgY29uc3QgU3RyaW5nJik7
CisgICAgZnJpZW5kIEpTU3RyaW5nKiBqc05vbnRyaXZpYWxTdHJpbmcoVk0mLCBTdHJpbmcmJik7
CisgICAgZnJpZW5kIEpTU3RyaW5nKiBqc1N1YnN0cmluZyhWTSYsIGNvbnN0IFN0cmluZyYsIHVu
c2lnbmVkLCB1bnNpZ25lZCk7CiAgICAgZnJpZW5kIEpTU3RyaW5nKiBqc1N1YnN0cmluZyhWTSYs
IEV4ZWNTdGF0ZSosIEpTU3RyaW5nKiwgdW5zaWduZWQsIHVuc2lnbmVkKTsKICAgICBmcmllbmQg
SlNTdHJpbmcqIGpzU3Vic3RyaW5nT2ZSZXNvbHZlZChWTSYsIEdDRGVmZXJyYWxDb250ZXh0Kiwg
SlNTdHJpbmcqLCB1bnNpZ25lZCwgdW5zaWduZWQpOwotICAgIGZyaWVuZCBKU1N0cmluZyoganNP
d25lZFN0cmluZyhWTSosIGNvbnN0IFN0cmluZyYpOworICAgIGZyaWVuZCBKU1N0cmluZyoganNP
d25lZFN0cmluZyhWTSYsIGNvbnN0IFN0cmluZyYpOwogfTsKIAogLy8gTk9URTogVGhpcyBjbGFz
cyBjYW5ub3Qgb3ZlcnJpZGUgSlNTdHJpbmcncyBkZXN0cnVjdG9yLiBKU1N0cmluZydzIGRlc3Ry
dWN0b3IgaXMgY2FsbGVkIGRpcmVjdGx5CkBAIC00MDIsNyArMzk3LDcgQEAgcHVibGljOgogICAg
ICAgICAgICAgc3dpdGNoIChtX3N0cmluZ3Muc2l6ZSgpKSB7CiAgICAgICAgICAgICBjYXNlIDA6
IHsKICAgICAgICAgICAgICAgICBBU1NFUlQoIW1fbGVuZ3RoKTsKLSAgICAgICAgICAgICAgICBy
ZXN1bHQgPSBqc0VtcHR5U3RyaW5nKCZtX3ZtKTsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBq
c0VtcHR5U3RyaW5nKG1fdm0pOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgY2FzZSAxOiB7CkBAIC03MTksNDEgKzcxNCw0MiBAQCBpbmxpbmUgSlNT
dHJpbmcqIGFzU3RyaW5nKEpTVmFsdWUgdmFsdWUpCiB9CiAKIC8vIFRoaXMgTVVTVCBOT1QgR0Mu
Ci1pbmxpbmUgSlNTdHJpbmcqIGpzRW1wdHlTdHJpbmcoVk0qIHZtKQoraW5saW5lIEpTU3RyaW5n
KiBqc0VtcHR5U3RyaW5nKFZNJiB2bSkKIHsKLSAgICByZXR1cm4gdm0tPnNtYWxsU3RyaW5ncy5l
bXB0eVN0cmluZygpOworICAgIHJldHVybiB2bS5zbWFsbFN0cmluZ3MuZW1wdHlTdHJpbmcoKTsK
IH0KIAotQUxXQVlTX0lOTElORSBKU1N0cmluZyoganNTaW5nbGVDaGFyYWN0ZXJTdHJpbmcoVk0q
IHZtLCBVQ2hhciBjKQorQUxXQVlTX0lOTElORSBKU1N0cmluZyoganNTaW5nbGVDaGFyYWN0ZXJT
dHJpbmcoVk0mIHZtLCBVQ2hhciBjKQogewogICAgIGlmICh2YWxpZGF0ZURGR0RvZXNHQykKLSAg
ICAgICAgUkVMRUFTRV9BU1NFUlQodm0tPmhlYXAuZXhwZWN0RG9lc0dDKCkpOworICAgICAgICBS
RUxFQVNFX0FTU0VSVCh2bS5oZWFwLmV4cGVjdERvZXNHQygpKTsKICAgICBpZiAoYyA8PSBtYXhT
aW5nbGVDaGFyYWN0ZXJTdHJpbmcpCi0gICAgICAgIHJldHVybiB2bS0+c21hbGxTdHJpbmdzLnNp
bmdsZUNoYXJhY3RlclN0cmluZyhjKTsKLSAgICByZXR1cm4gSlNTdHJpbmc6OmNyZWF0ZSgqdm0s
IFN0cmluZ0ltcGw6OmNyZWF0ZSgmYywgMSkpOworICAgICAgICByZXR1cm4gdm0uc21hbGxTdHJp
bmdzLnNpbmdsZUNoYXJhY3RlclN0cmluZyhjKTsKKyAgICByZXR1cm4gSlNTdHJpbmc6OmNyZWF0
ZSh2bSwgU3RyaW5nSW1wbDo6Y3JlYXRlKCZjLCAxKSk7CiB9CiAKLWlubGluZSBKU1N0cmluZyog
anNOb250cml2aWFsU3RyaW5nKFZNKiB2bSwgY29uc3QgU3RyaW5nJiBzKQoraW5saW5lIEpTU3Ry
aW5nKiBqc05vbnRyaXZpYWxTdHJpbmcoVk0mIHZtLCBjb25zdCBTdHJpbmcmIHMpCiB7CiAgICAg
QVNTRVJUKHMubGVuZ3RoKCkgPiAxKTsKLSAgICByZXR1cm4gSlNTdHJpbmc6OmNyZWF0ZSgqdm0s
ICpzLmltcGwoKSk7CisgICAgcmV0dXJuIEpTU3RyaW5nOjpjcmVhdGUodm0sICpzLmltcGwoKSk7
CiB9CiAKLWlubGluZSBKU1N0cmluZyoganNOb250cml2aWFsU3RyaW5nKFZNKiB2bSwgU3RyaW5n
JiYgcykKK2lubGluZSBKU1N0cmluZyoganNOb250cml2aWFsU3RyaW5nKFZNJiB2bSwgU3RyaW5n
JiYgcykKIHsKICAgICBBU1NFUlQocy5sZW5ndGgoKSA+IDEpOwotICAgIHJldHVybiBKU1N0cmlu
Zzo6Y3JlYXRlKCp2bSwgcy5yZWxlYXNlSW1wbCgpLnJlbGVhc2VOb25OdWxsKCkpOworICAgIHJl
dHVybiBKU1N0cmluZzo6Y3JlYXRlKHZtLCBzLnJlbGVhc2VJbXBsKCkucmVsZWFzZU5vbk51bGwo
KSk7CiB9CiAKIEFMV0FZU19JTkxJTkUgSWRlbnRpZmllciBKU1N0cmluZzo6dG9JZGVudGlmaWVy
KEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKIHsKLSAgICByZXR1cm4gSWRlbnRpZmllcjo6ZnJvbVN0
cmluZyhleGVjLCB0b0F0b21TdHJpbmcoZXhlYykpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CisgICAgcmV0dXJuIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHRvQXRvbVN0cmluZyhleGVj
KSk7CiB9CiAKIEFMV0FZU19JTkxJTkUgQXRvbVN0cmluZyBKU1N0cmluZzo6dG9BdG9tU3RyaW5n
KEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKIHsKICAgICBpZiAodmFsaWRhdGVERkdEb2VzR0MpCi0g
ICAgICAgIFJFTEVBU0VfQVNTRVJUKHZtKCktPmhlYXAuZXhwZWN0RG9lc0dDKCkpOworICAgICAg
ICBSRUxFQVNFX0FTU0VSVCh2bSgpLmhlYXAuZXhwZWN0RG9lc0dDKCkpOwogICAgIGlmIChpc1Jv
cGUoKSkKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IEpTUm9wZVN0cmluZyo+KHRo
aXMpLT5yZXNvbHZlUm9wZVRvQXRvbVN0cmluZyhleGVjKTsKICAgICByZXR1cm4gQXRvbVN0cmlu
Zyh2YWx1ZUludGVybmFsKCkpOwpAQCAtNzYyLDcgKzc1OCw3IEBAIEFMV0FZU19JTkxJTkUgQXRv
bVN0cmluZyBKU1N0cmluZzo6dG9BdG8KIEFMV0FZU19JTkxJTkUgUmVmUHRyPEF0b21TdHJpbmdJ
bXBsPiBKU1N0cmluZzo6dG9FeGlzdGluZ0F0b21TdHJpbmcoRXhlY1N0YXRlKiBleGVjKSBjb25z
dAogewogICAgIGlmICh2YWxpZGF0ZURGR0RvZXNHQykKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQo
dm0oKS0+aGVhcC5leHBlY3REb2VzR0MoKSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHZtKCku
aGVhcC5leHBlY3REb2VzR0MoKSk7CiAgICAgaWYgKGlzUm9wZSgpKQogICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8Y29uc3QgSlNSb3BlU3RyaW5nKj4odGhpcyktPnJlc29sdmVSb3BlVG9FeGlz
dGluZ0F0b21TdHJpbmcoZXhlYyk7CiAgICAgaWYgKHZhbHVlSW50ZXJuYWwoKS5pbXBsKCktPmlz
QXRvbSgpKQpAQCAtNzczLDcgKzc2OSw3IEBAIEFMV0FZU19JTkxJTkUgUmVmUHRyPEF0b21TdHJp
bmdJbXBsPiBKU1MKIGlubGluZSBjb25zdCBTdHJpbmcmIEpTU3RyaW5nOjp2YWx1ZShFeGVjU3Rh
dGUqIGV4ZWMpIGNvbnN0CiB7CiAgICAgaWYgKHZhbGlkYXRlREZHRG9lc0dDKQotICAgICAgICBS
RUxFQVNFX0FTU0VSVCh2bSgpLT5oZWFwLmV4cGVjdERvZXNHQygpKTsKKyAgICAgICAgUkVMRUFT
RV9BU1NFUlQodm0oKS5oZWFwLmV4cGVjdERvZXNHQygpKTsKICAgICBpZiAoaXNSb3BlKCkpCiAg
ICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBKU1JvcGVTdHJpbmcqPih0aGlzKS0+cmVz
b2x2ZVJvcGUoZXhlYyk7CiAgICAgcmV0dXJuIHZhbHVlSW50ZXJuYWwoKTsKQEAgLTc4Myw3ICs3
NzksNyBAQCBpbmxpbmUgY29uc3QgU3RyaW5nJiBKU1N0cmluZzo6dHJ5R2V0VmFsCiB7CiAgICAg
aWYgKGFsbG9jYXRpb25BbGxvd2VkKSB7CiAgICAgICAgIGlmICh2YWxpZGF0ZURGR0RvZXNHQykK
LSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHZtKCktPmhlYXAuZXhwZWN0RG9lc0dDKCkpOwor
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQodm0oKS5oZWFwLmV4cGVjdERvZXNHQygpKTsKICAg
ICAgICAgaWYgKGlzUm9wZSgpKSB7CiAgICAgICAgICAgICAvLyBQYXNzIG51bGxwdHIgZm9yIHRo
ZSBFeGVjU3RhdGUgc28gdGhhdCByZXNvbHZlUm9wZSBkb2VzIG5vdCB0aHJvdyBpbiB0aGUgZXZl
bnQgb2YgYW4gT09NIGVycm9yLgogICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0
IEpTUm9wZVN0cmluZyo+KHRoaXMpLT5yZXNvbHZlUm9wZShudWxscHRyKTsKQEAgLTgwMCwyMCAr
Nzk2LDIwIEBAIGlubGluZSBKU1N0cmluZyogSlNTdHJpbmc6OmdldEluZGV4KEV4ZWMKICAgICBB
U1NFUlQoY2FuR2V0SW5kZXgoaSkpOwogICAgIFN0cmluZ1ZpZXcgdmlldyA9IHVuc2FmZVZpZXco
ZXhlYyk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7Ci0gICAgcmV0
dXJuIGpzU2luZ2xlQ2hhcmFjdGVyU3RyaW5nKGV4ZWMsIHZpZXdbaV0pOworICAgIHJldHVybiBq
c1NpbmdsZUNoYXJhY3RlclN0cmluZyh2bSwgdmlld1tpXSk7CiB9CiAKLWlubGluZSBKU1N0cmlu
ZyoganNTdHJpbmcoVk0qIHZtLCBjb25zdCBTdHJpbmcmIHMpCitpbmxpbmUgSlNTdHJpbmcqIGpz
U3RyaW5nKFZNJiB2bSwgY29uc3QgU3RyaW5nJiBzKQogewogICAgIGludCBzaXplID0gcy5sZW5n
dGgoKTsKICAgICBpZiAoIXNpemUpCi0gICAgICAgIHJldHVybiB2bS0+c21hbGxTdHJpbmdzLmVt
cHR5U3RyaW5nKCk7CisgICAgICAgIHJldHVybiB2bS5zbWFsbFN0cmluZ3MuZW1wdHlTdHJpbmco
KTsKICAgICBpZiAoc2l6ZSA9PSAxKSB7CiAgICAgICAgIFVDaGFyIGMgPSBzLmNoYXJhY3RlckF0
KDApOwogICAgICAgICBpZiAoYyA8PSBtYXhTaW5nbGVDaGFyYWN0ZXJTdHJpbmcpCi0gICAgICAg
ICAgICByZXR1cm4gdm0tPnNtYWxsU3RyaW5ncy5zaW5nbGVDaGFyYWN0ZXJTdHJpbmcoYyk7Cisg
ICAgICAgICAgICByZXR1cm4gdm0uc21hbGxTdHJpbmdzLnNpbmdsZUNoYXJhY3RlclN0cmluZyhj
KTsKICAgICB9Ci0gICAgcmV0dXJuIEpTU3RyaW5nOjpjcmVhdGUoKnZtLCAqcy5pbXBsKCkpOwor
ICAgIHJldHVybiBKU1N0cmluZzo6Y3JlYXRlKHZtLCAqcy5pbXBsKCkpOwogfQogCiBpbmxpbmUg
SlNTdHJpbmcqIGpzU3Vic3RyaW5nKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBKU1N0cmluZyog
YmFzZSwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCkBAIC04NzIsNTAgKzg2OCw0
MyBAQCBpbmxpbmUgSlNTdHJpbmcqIGpzU3Vic3RyaW5nKEV4ZWNTdGF0ZSogCiAgICAgcmV0dXJu
IGpzU3Vic3RyaW5nKGV4ZWMtPnZtKCksIGV4ZWMsIHMsIG9mZnNldCwgbGVuZ3RoKTsKIH0KIAot
aW5saW5lIEpTU3RyaW5nKiBqc1N1YnN0cmluZyhWTSogdm0sIGNvbnN0IFN0cmluZyYgcywgdW5z
aWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCitpbmxpbmUgSlNTdHJpbmcqIGpzU3Vic3Ry
aW5nKFZNJiB2bSwgY29uc3QgU3RyaW5nJiBzLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxl
bmd0aCkKIHsKICAgICBBU1NFUlQob2Zmc2V0IDw9IHMubGVuZ3RoKCkpOwogICAgIEFTU0VSVChs
ZW5ndGggPD0gcy5sZW5ndGgoKSk7CiAgICAgQVNTRVJUKG9mZnNldCArIGxlbmd0aCA8PSBzLmxl
bmd0aCgpKTsKICAgICBpZiAoIWxlbmd0aCkKLSAgICAgICAgcmV0dXJuIHZtLT5zbWFsbFN0cmlu
Z3MuZW1wdHlTdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIHZtLnNtYWxsU3RyaW5ncy5lbXB0eVN0
cmluZygpOwogICAgIGlmIChsZW5ndGggPT0gMSkgewogICAgICAgICBVQ2hhciBjID0gcy5jaGFy
YWN0ZXJBdChvZmZzZXQpOwogICAgICAgICBpZiAoYyA8PSBtYXhTaW5nbGVDaGFyYWN0ZXJTdHJp
bmcpCi0gICAgICAgICAgICByZXR1cm4gdm0tPnNtYWxsU3RyaW5ncy5zaW5nbGVDaGFyYWN0ZXJT
dHJpbmcoYyk7CisgICAgICAgICAgICByZXR1cm4gdm0uc21hbGxTdHJpbmdzLnNpbmdsZUNoYXJh
Y3RlclN0cmluZyhjKTsKICAgICB9CiAgICAgYXV0byBpbXBsID0gU3RyaW5nSW1wbDo6Y3JlYXRl
U3Vic3RyaW5nU2hhcmluZ0ltcGwoKnMuaW1wbCgpLCBvZmZzZXQsIGxlbmd0aCk7CiAgICAgaWYg
KGltcGwtPmlzU3ViU3RyaW5nKCkpCi0gICAgICAgIHJldHVybiBKU1N0cmluZzo6Y3JlYXRlSGFz
T3RoZXJPd25lcigqdm0sIFdURk1vdmUoaW1wbCkpOwotICAgIHJldHVybiBKU1N0cmluZzo6Y3Jl
YXRlKCp2bSwgV1RGTW92ZShpbXBsKSk7CisgICAgICAgIHJldHVybiBKU1N0cmluZzo6Y3JlYXRl
SGFzT3RoZXJPd25lcih2bSwgV1RGTW92ZShpbXBsKSk7CisgICAgcmV0dXJuIEpTU3RyaW5nOjpj
cmVhdGUodm0sIFdURk1vdmUoaW1wbCkpOwogfQogCi1pbmxpbmUgSlNTdHJpbmcqIGpzT3duZWRT
dHJpbmcoVk0qIHZtLCBjb25zdCBTdHJpbmcmIHMpCitpbmxpbmUgSlNTdHJpbmcqIGpzT3duZWRT
dHJpbmcoVk0mIHZtLCBjb25zdCBTdHJpbmcmIHMpCiB7CiAgICAgaW50IHNpemUgPSBzLmxlbmd0
aCgpOwogICAgIGlmICghc2l6ZSkKLSAgICAgICAgcmV0dXJuIHZtLT5zbWFsbFN0cmluZ3MuZW1w
dHlTdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIHZtLnNtYWxsU3RyaW5ncy5lbXB0eVN0cmluZygp
OwogICAgIGlmIChzaXplID09IDEpIHsKICAgICAgICAgVUNoYXIgYyA9IHMuY2hhcmFjdGVyQXQo
MCk7CiAgICAgICAgIGlmIChjIDw9IG1heFNpbmdsZUNoYXJhY3RlclN0cmluZykKLSAgICAgICAg
ICAgIHJldHVybiB2bS0+c21hbGxTdHJpbmdzLnNpbmdsZUNoYXJhY3RlclN0cmluZyhjKTsKKyAg
ICAgICAgICAgIHJldHVybiB2bS5zbWFsbFN0cmluZ3Muc2luZ2xlQ2hhcmFjdGVyU3RyaW5nKGMp
OwogICAgIH0KLSAgICByZXR1cm4gSlNTdHJpbmc6OmNyZWF0ZUhhc090aGVyT3duZXIoKnZtLCAq
cy5pbXBsKCkpOworICAgIHJldHVybiBKU1N0cmluZzo6Y3JlYXRlSGFzT3RoZXJPd25lcih2bSwg
KnMuaW1wbCgpKTsKIH0KIAotaW5saW5lIEpTU3RyaW5nKiBqc0VtcHR5U3RyaW5nKEV4ZWNTdGF0
ZSogZXhlYykgeyByZXR1cm4ganNFbXB0eVN0cmluZygmZXhlYy0+dm0oKSk7IH0KLWlubGluZSBK
U1N0cmluZyoganNTdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcmIHMpIHsgcmV0
dXJuIGpzU3RyaW5nKCZleGVjLT52bSgpLCBzKTsgfQotaW5saW5lIEpTU3RyaW5nKiBqc1Npbmds
ZUNoYXJhY3RlclN0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIFVDaGFyIGMpIHsgcmV0dXJuIGpzU2lu
Z2xlQ2hhcmFjdGVyU3RyaW5nKCZleGVjLT52bSgpLCBjKTsgfQotaW5saW5lIEpTU3RyaW5nKiBq
c05vbnRyaXZpYWxTdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcmIHMpIHsgcmV0
dXJuIGpzTm9udHJpdmlhbFN0cmluZygmZXhlYy0+dm0oKSwgcyk7IH0KLWlubGluZSBKU1N0cmlu
ZyoganNOb250cml2aWFsU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgU3RyaW5nJiYgcykgeyByZXR1
cm4ganNOb250cml2aWFsU3RyaW5nKCZleGVjLT52bSgpLCBXVEZNb3ZlKHMpKTsgfQotaW5saW5l
IEpTU3RyaW5nKiBqc093bmVkU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU3RyaW5nJiBz
KSB7IHJldHVybiBqc093bmVkU3RyaW5nKCZleGVjLT52bSgpLCBzKTsgfQotCiBBTFdBWVNfSU5M
SU5FIEpTU3RyaW5nKiBqc1N0cmluZ1dpdGhDYWNoZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFN0
cmluZyYgcykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIFN0cmluZ0ltcGwqIHN0
cmluZ0ltcGwgPSBzLmltcGwoKTsKICAgICBpZiAoIXN0cmluZ0ltcGwgfHwgIXN0cmluZ0ltcGwt
Pmxlbmd0aCgpKQotICAgICAgICByZXR1cm4ganNFbXB0eVN0cmluZygmdm0pOworICAgICAgICBy
ZXR1cm4ganNFbXB0eVN0cmluZyh2bSk7CiAKICAgICBpZiAoc3RyaW5nSW1wbC0+bGVuZ3RoKCkg
PT0gMSkgewogICAgICAgICBVQ2hhciBzaW5nbGVDaGFyYWN0ZXIgPSAoKnN0cmluZ0ltcGwpWzB1
XTsKQEAgLTk4MCw3ICs5NjksNyBAQCBpbmxpbmUgYm9vbCBpc0pTU3RyaW5nKEpTVmFsdWUgdikK
IEFMV0FZU19JTkxJTkUgU3RyaW5nVmlldyBKU1JvcGVTdHJpbmc6OnVuc2FmZVZpZXcoRXhlY1N0
YXRlKiBleGVjKSBjb25zdAogewogICAgIGlmICh2YWxpZGF0ZURGR0RvZXNHQykKLSAgICAgICAg
UkVMRUFTRV9BU1NFUlQodm0oKS0+aGVhcC5leHBlY3REb2VzR0MoKSk7CisgICAgICAgIFJFTEVB
U0VfQVNTRVJUKHZtKCkuaGVhcC5leHBlY3REb2VzR0MoKSk7CiAgICAgaWYgKGlzU3Vic3RyaW5n
KCkpIHsKICAgICAgICAgYXV0byYgYmFzZSA9IHN1YnN0cmluZ0Jhc2UoKS0+dmFsdWVJbnRlcm5h
bCgpOwogICAgICAgICBpZiAoYmFzZS5pczhCaXQoKSkKQEAgLTk5Myw3ICs5ODIsNyBAQCBBTFdB
WVNfSU5MSU5FIFN0cmluZ1ZpZXcgSlNSb3BlU3RyaW5nOjp1CiBBTFdBWVNfSU5MSU5FIFN0cmlu
Z1ZpZXdXaXRoVW5kZXJseWluZ1N0cmluZyBKU1JvcGVTdHJpbmc6OnZpZXdXaXRoVW5kZXJseWlu
Z1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiB7CiAgICAgaWYgKHZhbGlkYXRlREZHRG9l
c0dDKQotICAgICAgICBSRUxFQVNFX0FTU0VSVCh2bSgpLT5oZWFwLmV4cGVjdERvZXNHQygpKTsK
KyAgICAgICAgUkVMRUFTRV9BU1NFUlQodm0oKS5oZWFwLmV4cGVjdERvZXNHQygpKTsKICAgICBp
ZiAoaXNTdWJzdHJpbmcoKSkgewogICAgICAgICBhdXRvJiBiYXNlID0gc3Vic3RyaW5nQmFzZSgp
LT52YWx1ZUludGVybmFsKCk7CiAgICAgICAgIGlmIChiYXNlLmlzOEJpdCgpKQpAQCAtMTAwNyw3
ICs5OTYsNyBAQCBBTFdBWVNfSU5MSU5FIFN0cmluZ1ZpZXdXaXRoVW5kZXJseWluZ1N0CiBBTFdB
WVNfSU5MSU5FIFN0cmluZ1ZpZXcgSlNTdHJpbmc6OnVuc2FmZVZpZXcoRXhlY1N0YXRlKiBleGVj
KSBjb25zdAogewogICAgIGlmICh2YWxpZGF0ZURGR0RvZXNHQykKLSAgICAgICAgUkVMRUFTRV9B
U1NFUlQodm0oKS0+aGVhcC5leHBlY3REb2VzR0MoKSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJU
KHZtKCkuaGVhcC5leHBlY3REb2VzR0MoKSk7CiAgICAgaWYgKGlzUm9wZSgpKQogICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgSlNSb3BlU3RyaW5nKj4odGhpcyktPnVuc2FmZVZpZXco
ZXhlYyk7CiAgICAgcmV0dXJuIHZhbHVlSW50ZXJuYWwoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSW5saW5lcy5oCShyZXZpc2lvbiAyNDkxMjgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZ0lubGluZXMuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAx
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYt
MjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTQ0LDkgKzQ0LDkgQEAgYm9vbCBKU1N0cmluZzo6ZXF1YWwoRXhlY1N0
YXRlKiBleGVjLCBKUwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBTdHJpbmdUeXBlPgotaW5saW5l
IEpTVmFsdWUganNNYWtlTm9udHJpdmlhbFN0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIFN0cmluZ1R5
cGUmJiBzdHJpbmcpCitpbmxpbmUgSlNWYWx1ZSBqc01ha2VOb250cml2aWFsU3RyaW5nKFZNJiB2
bSwgU3RyaW5nVHlwZSYmIHN0cmluZykKIHsKLSAgICByZXR1cm4ganNOb250cml2aWFsU3RyaW5n
KGV4ZWMsIHN0ZDo6Zm9yd2FyZDxTdHJpbmdUeXBlPihzdHJpbmcpKTsKKyAgICByZXR1cm4ganNO
b250cml2aWFsU3RyaW5nKHZtLCBzdGQ6OmZvcndhcmQ8U3RyaW5nVHlwZT4oc3RyaW5nKSk7CiB9
CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFN0cmluZ1R5cGUsIHR5cGVuYW1lLi4uIFN0cmluZ1R5cGVz
PgpAQCAtNTgsNyArNTgsNyBAQCBpbmxpbmUgSlNWYWx1ZSBqc01ha2VOb250cml2aWFsU3RyaW5n
KEV4CiAgICAgaWYgKFVOTElLRUxZKCFyZXN1bHQpKQogICAgICAgICByZXR1cm4gdGhyb3dPdXRP
Zk1lbW9yeUVycm9yKGV4ZWMsIHNjb3BlKTsKICAgICBBU1NFUlQocmVzdWx0Lmxlbmd0aCgpIDw9
IEpTU3RyaW5nOjpNYXhMZW5ndGgpOwotICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcoZXhl
YywgV1RGTW92ZShyZXN1bHQpKTsKKyAgICByZXR1cm4ganNOb250cml2aWFsU3RyaW5nKHZtLCBX
VEZNb3ZlKHJlc3VsdCkpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4K
QEAgLTc2LDcgKzc2LDcgQEAgaW5saW5lIEpTU3RyaW5nKiByZXBlYXRDaGFyYWN0ZXIoRXhlY1N0
YQogCiAgICAgc3RkOjpmaWxsX24oYnVmZmVyLCByZXBlYXRDb3VudCwgY2hhcmFjdGVyKTsKIAot
ICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwganNTdHJpbmcoJmV4ZWMsIFdURk1vdmUoaW1w
bCkpKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGpzU3RyaW5nKHZtLCBXVEZNb3Zl
KGltcGwpKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdKb2luZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSm9pbmVyLmNwcAkocmV2aXNpb24gMjQ5MTI4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdKb2luZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
Mi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMTExLDcgKzExMSw3IEBAIEpTVmFsdWUgSlNTdHJpbmdKb2luZXI6
OmpvaW4oRXhlY1N0YXRlJiAKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVl
KCkpOwogCiAgICAgaWYgKCFsZW5ndGgpCi0gICAgICAgIHJldHVybiBqc0VtcHR5U3RyaW5nKCZz
dGF0ZSk7CisgICAgICAgIHJldHVybiBqc0VtcHR5U3RyaW5nKHZtKTsKIAogICAgIFN0cmluZyBy
ZXN1bHQ7CiAgICAgaWYgKG1faXNBbGw4Qml0KQpAQCAtMTIyLDcgKzEyMiw3IEBAIEpTVmFsdWUg
SlNTdHJpbmdKb2luZXI6OmpvaW4oRXhlY1N0YXRlJiAKICAgICBpZiAocmVzdWx0LmlzTnVsbCgp
KQogICAgICAgICByZXR1cm4gdGhyb3dPdXRPZk1lbW9yeUVycm9yKCZzdGF0ZSwgc2NvcGUpOwog
Ci0gICAgcmV0dXJuIGpzU3RyaW5nKCZzdGF0ZSwgV1RGTW92ZShyZXN1bHQpKTsKKyAgICByZXR1
cm4ganNTdHJpbmcodm0sIFdURk1vdmUocmVzdWx0KSk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuY3Bw
CShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5
bWJvbFRhYmxlT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01NSw2ICs1NSw3IEBAIGJv
b2wgSlNTeW1ib2xUYWJsZU9iamVjdDo6ZGVsZXRlUHJvcGVydHkKIAogdm9pZCBKU1N5bWJvbFRh
YmxlT2JqZWN0OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwg
RXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVy
YXRpb25Nb2RlIG1vZGUpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBKU1N5bWJv
bFRhYmxlT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTU3ltYm9sVGFibGVPYmplY3QqPihv
YmplY3QpOwogICAgIHsKICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcih0aGlzT2Jq
ZWN0LT5zeW1ib2xUYWJsZSgpLT5tX2xvY2spOwpAQCAtNjMsNyArNjQsNyBAQCB2b2lkIEpTU3lt
Ym9sVGFibGVPYmplY3Q6OmdldE93bk5vbkluZGV4CiAgICAgICAgICAgICBpZiAoIShpdC0+dmFs
dWUuZ2V0QXR0cmlidXRlcygpICYgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSB8fCBtb2Rl
LmluY2x1ZGVEb250RW51bVByb3BlcnRpZXMoKSkgewogICAgICAgICAgICAgICAgIGlmIChpdC0+
a2V5LT5pc1N5bWJvbCgpICYmICFwcm9wZXJ0eU5hbWVzLmluY2x1ZGVTeW1ib2xQcm9wZXJ0aWVz
KCkpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIHByb3Bl
cnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb21VaWQoZXhlYywgaXQtPmtleS5nZXQoKSkpOwor
ICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb21VaWQodm0s
IGl0LT5rZXkuZ2V0KCkpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVGVtcGxhdGVPYmplY3REZXNjcmlwdG9y
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1RlbXBs
YXRlT2JqZWN0RGVzY3JpcHRvci5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTVGVtcGxhdGVPYmplY3REZXNjcmlwdG9yLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTUgWXVzdWtl
IFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPi4KLSAqIENvcHlyaWdodCAoQykgMjAxNiBB
cHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAx
OSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTY4LDEyICs2OCwxMiBAQCBKU0FycmF5KiBKU1RlbXBsYXRlT2JqZWN0RGVz
Y3JpcHRvcjo6Y3JlCiAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgY291bnQ7
ICsraW5kZXgpIHsKICAgICAgICAgYXV0byBjb29rZWQgPSBkZXNjcmlwdG9yKCkuY29va2VkU3Ry
aW5ncygpW2luZGV4XTsKICAgICAgICAgaWYgKGNvb2tlZCkKLSAgICAgICAgICAgIHRlbXBsYXRl
T2JqZWN0LT5wdXREaXJlY3RJbmRleChleGVjLCBpbmRleCwganNTdHJpbmcoZXhlYywgY29va2Vk
LnZhbHVlKCkpLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBQcm9wZXJ0eUF0dHJpYnV0
ZTo6RG9udERlbGV0ZSwgUHV0RGlyZWN0SW5kZXhMaWtlUHV0RGlyZWN0KTsKKyAgICAgICAgICAg
IHRlbXBsYXRlT2JqZWN0LT5wdXREaXJlY3RJbmRleChleGVjLCBpbmRleCwganNTdHJpbmcodm0s
IGNvb2tlZC52YWx1ZSgpKSwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgUHJvcGVydHlB
dHRyaWJ1dGU6OkRvbnREZWxldGUsIFB1dERpcmVjdEluZGV4TGlrZVB1dERpcmVjdCk7CiAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgIHRlbXBsYXRlT2JqZWN0LT5wdXREaXJlY3RJbmRleChleGVj
LCBpbmRleCwganNVbmRlZmluZWQoKSwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgUHJv
cGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUsIFB1dERpcmVjdEluZGV4TGlrZVB1dERpcmVjdCk7
CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwogCi0gICAgICAg
IHJhd09iamVjdC0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaW5kZXgsIGpzU3RyaW5nKGV4ZWMsIGRl
c2NyaXB0b3IoKS5yYXdTdHJpbmdzKClbaW5kZXhdKSwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRP
bmx5IHwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUsIFB1dERpcmVjdEluZGV4TGlrZVB1
dERpcmVjdCk7CisgICAgICAgIHJhd09iamVjdC0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaW5kZXgs
IGpzU3RyaW5nKHZtLCBkZXNjcmlwdG9yKCkucmF3U3RyaW5ncygpW2luZGV4XSksIFByb3BlcnR5
QXR0cmlidXRlOjpSZWFkT25seSB8IFByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlLCBQdXRE
aXJlY3RJbmRleExpa2VQdXREaXJlY3QpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCBudWxscHRyKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTVHlwZWRBcnJheVZpZXdQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZWRBcnJheVZpZXdQcm90b3R5cGUuY3BwCShyZXZp
c2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVkQXJy
YXlWaWV3UHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI1NywyMyArMjU3LDIzIEBA
IHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHR5cGUKICAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOwogICAgIHN3aXRjaCAodGhpc1ZhbHVlLmdldE9iamVjdCgpLT5jbGFzc0luZm8o
dm0pLT50eXBlZEFycmF5U3RvcmFnZVR5cGUpIHsKICAgICBjYXNlIFR5cGVVaW50OENsYW1wZWQ6
Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcoJnZtLCAiVWludDhDbGFt
cGVkQXJyYXkiKSk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcodm0s
ICJVaW50OENsYW1wZWRBcnJheSIpKTsKICAgICBjYXNlIFR5cGVJbnQzMjoKLSAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZygmdm0sICJJbnQzMkFycmF5IikpOworICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKHZtLCAiSW50MzJBcnJheSIpKTsKICAg
ICBjYXNlIFR5cGVVaW50MzI6Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdHJp
bmcoJnZtLCAiVWludDMyQXJyYXkiKSk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNTdHJpbmcodm0sICJVaW50MzJBcnJheSIpKTsKICAgICBjYXNlIFR5cGVGbG9hdDY0OgotICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKCZ2bSwgIkZsb2F0NjRBcnJheSIp
KTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyh2bSwgIkZsb2F0NjRB
cnJheSIpKTsKICAgICBjYXNlIFR5cGVGbG9hdDMyOgotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzU3RyaW5nKCZ2bSwgIkZsb2F0MzJBcnJheSIpKTsKKyAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1N0cmluZyh2bSwgIkZsb2F0MzJBcnJheSIpKTsKICAgICBjYXNlIFR5
cGVJbnQ4OgotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKCZ2bSwgIklu
dDhBcnJheSIpKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyh2bSwg
IkludDhBcnJheSIpKTsKICAgICBjYXNlIFR5cGVVaW50ODoKLSAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1N0cmluZygmdm0sICJVaW50OEFycmF5IikpOworICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKHZtLCAiVWludDhBcnJheSIpKTsKICAgICBjYXNlIFR5
cGVJbnQxNjoKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZygmdm0sICJJ
bnQxNkFycmF5IikpOworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKHZt
LCAiSW50MTZBcnJheSIpKTsKICAgICBjYXNlIFR5cGVVaW50MTY6Ci0gICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNTdHJpbmcoJnZtLCAiVWludDE2QXJyYXkiKSk7CisgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcodm0sICJVaW50MTZBcnJheSIpKTsKICAgICBj
YXNlIE5vdFR5cGVkQXJyYXk6CiAgICAgY2FzZSBUeXBlRGF0YVZpZXc6CiAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9MYXp5Q2xhc3NTdHJ1Y3R1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xhenlDbGFzc1N0cnVjdHVyZS5jcHAJKHJldmlzaW9u
IDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xhenlDbGFzc1N0cnVj
dHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODQsNyArODQsNyBAQCB2b2lkIExhenlDbGFzc1N0cnVj
dHVyZTo6SW5pdGlhbGl6ZXI6OnNlCiAgICAgZWxzZQogICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogICAgIAotICAgIHNldENvbnN0cnVjdG9yKElkZW50aWZpZXI6OmZyb21T
dHJpbmcoJnZtLCBuYW1lKSwgY29uc3RydWN0b3IpOworICAgIHNldENvbnN0cnVjdG9yKElkZW50
aWZpZXI6OmZyb21TdHJpbmcodm0sIG5hbWUpLCBjb25zdHJ1Y3Rvcik7CiB9CiAKIHZvaWQgTGF6
eUNsYXNzU3RydWN0dXJlOjp2aXNpdChTbG90VmlzaXRvciYgdmlzaXRvcikKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xhenlQcm9wZXJ0eS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xhenlQcm9wZXJ0eS5oCShyZXZpc2lvbiAyNDkx
MjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9MYXp5UHJvcGVydHkuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC00MCw3ICs0MCw3IEBAIGNsYXNzIExhenlQcm9wZXJ0eSB7CiBwdWJsaWM6CiAg
ICAgc3RydWN0IEluaXRpYWxpemVyIHsKICAgICAgICAgSW5pdGlhbGl6ZXIoT3duZXJUeXBlKiBv
d25lciwgTGF6eVByb3BlcnR5JiBwcm9wZXJ0eSkKLSAgICAgICAgICAgIDogdm0oKkhlYXA6Omhl
YXAob3duZXIpLT52bSgpKQorICAgICAgICAgICAgOiB2bShIZWFwOjpoZWFwKG93bmVyKS0+dm0o
KSkKICAgICAgICAgICAgICwgb3duZXIob3duZXIpCiAgICAgICAgICAgICAsIHByb3BlcnR5KHBy
b3BlcnR5KQogICAgICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9M
aXRlcmFsUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9MaXRlcmFsUGFyc2VyLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvTGl0ZXJhbFBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDEyIE1hdGhpYXMgQnluZW5z
IChtYXRoaWFzQHFpd2kuYmUpCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC01OSwxNyArNTksMTcgQEAg
Ym9vbCBMaXRlcmFsUGFyc2VyPENoYXJUeXBlPjo6dHJ5SlNPTlBQYQogICAgIGRvIHsKICAgICAg
ICAgVmVjdG9yPEpTT05QUGF0aEVudHJ5PiBwYXRoOwogICAgICAgICAvLyBVbmd1YXJkZWQgbmV4
dCB0byBzdGFydCBvZmYgdGhlIGxleGVyCi0gICAgICAgIElkZW50aWZpZXIgbmFtZSA9IElkZW50
aWZpZXI6OmZyb21TdHJpbmcoJnZtLCBtX2xleGVyLmN1cnJlbnRUb2tlbigpLT5zdGFydCwgbV9s
ZXhlci5jdXJyZW50VG9rZW4oKS0+ZW5kIC0gbV9sZXhlci5jdXJyZW50VG9rZW4oKS0+c3RhcnQp
OworICAgICAgICBJZGVudGlmaWVyIG5hbWUgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBt
X2xleGVyLmN1cnJlbnRUb2tlbigpLT5zdGFydCwgbV9sZXhlci5jdXJyZW50VG9rZW4oKS0+ZW5k
IC0gbV9sZXhlci5jdXJyZW50VG9rZW4oKS0+c3RhcnQpOwogICAgICAgICBKU09OUFBhdGhFbnRy
eSBlbnRyeTsKICAgICAgICAgaWYgKG5hbWUgPT0gdm0ucHJvcGVydHlOYW1lcy0+dmFyS2V5d29y
ZCkgewogICAgICAgICAgICAgaWYgKG1fbGV4ZXIubmV4dCgpICE9IFRva0lkZW50aWZpZXIpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgZW50cnkubV90eXBlID0g
SlNPTlBQYXRoRW50cnlUeXBlRGVjbGFyZVZhcjsKLSAgICAgICAgICAgIGVudHJ5Lm1fcGF0aEVu
dHJ5TmFtZSA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCBtX2xleGVyLmN1cnJlbnRUb2tl
bigpLT5zdGFydCwgbV9sZXhlci5jdXJyZW50VG9rZW4oKS0+ZW5kIC0gbV9sZXhlci5jdXJyZW50
VG9rZW4oKS0+c3RhcnQpOworICAgICAgICAgICAgZW50cnkubV9wYXRoRW50cnlOYW1lID0gSWRl
bnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgbV9sZXhlci5jdXJyZW50VG9rZW4oKS0+c3RhcnQsIG1f
bGV4ZXIuY3VycmVudFRva2VuKCktPmVuZCAtIG1fbGV4ZXIuY3VycmVudFRva2VuKCktPnN0YXJ0
KTsKICAgICAgICAgICAgIHBhdGguYXBwZW5kKGVudHJ5KTsKICAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICAgIGVudHJ5Lm1fdHlwZSA9IEpTT05QUGF0aEVudHJ5VHlwZURvdDsKLSAgICAgICAg
ICAgIGVudHJ5Lm1fcGF0aEVudHJ5TmFtZSA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCBt
X2xleGVyLmN1cnJlbnRUb2tlbigpLT5zdGFydCwgbV9sZXhlci5jdXJyZW50VG9rZW4oKS0+ZW5k
IC0gbV9sZXhlci5jdXJyZW50VG9rZW4oKS0+c3RhcnQpOworICAgICAgICAgICAgZW50cnkubV9w
YXRoRW50cnlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgbV9sZXhlci5jdXJyZW50
VG9rZW4oKS0+c3RhcnQsIG1fbGV4ZXIuY3VycmVudFRva2VuKCktPmVuZCAtIG1fbGV4ZXIuY3Vy
cmVudFRva2VuKCktPnN0YXJ0KTsKICAgICAgICAgICAgIHBhdGguYXBwZW5kKGVudHJ5KTsKICAg
ICAgICAgfQogICAgICAgICBpZiAoaXNMZXhlcktleXdvcmQoZW50cnkubV9wYXRoRW50cnlOYW1l
KSkKQEAgLTk2LDcgKzk2LDcgQEAgYm9vbCBMaXRlcmFsUGFyc2VyPENoYXJUeXBlPjo6dHJ5SlNP
TlBQYQogICAgICAgICAgICAgICAgIGVudHJ5Lm1fdHlwZSA9IEpTT05QUGF0aEVudHJ5VHlwZURv
dDsKICAgICAgICAgICAgICAgICBpZiAobV9sZXhlci5uZXh0KCkgIT0gVG9rSWRlbnRpZmllcikK
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIGVudHJ5
Lm1fcGF0aEVudHJ5TmFtZSA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCBtX2xleGVyLmN1
cnJlbnRUb2tlbigpLT5zdGFydCwgbV9sZXhlci5jdXJyZW50VG9rZW4oKS0+ZW5kIC0gbV9sZXhl
ci5jdXJyZW50VG9rZW4oKS0+c3RhcnQpOworICAgICAgICAgICAgICAgIGVudHJ5Lm1fcGF0aEVu
dHJ5TmFtZSA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIG1fbGV4ZXIuY3VycmVudFRva2Vu
KCktPnN0YXJ0LCBtX2xleGVyLmN1cnJlbnRUb2tlbigpLT5lbmQgLSBtX2xleGVyLmN1cnJlbnRU
b2tlbigpLT5zdGFydCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBjYXNlIFRva0xQYXJlbjogewpAQCAtMTM2LDQwICsxMzYsNDIgQEAgYm9vbCBM
aXRlcmFsUGFyc2VyPENoYXJUeXBlPjo6dHJ5SlNPTlBQYQogdGVtcGxhdGUgPHR5cGVuYW1lIENo
YXJUeXBlPgogQUxXQVlTX0lOTElORSBjb25zdCBJZGVudGlmaWVyIExpdGVyYWxQYXJzZXI8Q2hh
clR5cGU+OjptYWtlSWRlbnRpZmllcihjb25zdCBMQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxl
bmd0aCkKIHsKKyAgICBWTSYgdm0gPSBtX2V4ZWMtPnZtKCk7CiAgICAgaWYgKCFsZW5ndGgpCi0g
ICAgICAgIHJldHVybiBtX2V4ZWMtPnZtKCkucHJvcGVydHlOYW1lcy0+ZW1wdHlJZGVudGlmaWVy
OworICAgICAgICByZXR1cm4gdm0ucHJvcGVydHlOYW1lcy0+ZW1wdHlJZGVudGlmaWVyOwogICAg
IGlmIChjaGFyYWN0ZXJzWzBdID49IE1heGltdW1DYWNoYWJsZUNoYXJhY3RlcikKLSAgICAgICAg
cmV0dXJuIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJm1fZXhlYy0+dm0oKSwgY2hhcmFjdGVycywg
bGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIGNoYXJh
Y3RlcnMsIGxlbmd0aCk7CiAKICAgICBpZiAobGVuZ3RoID09IDEpIHsKICAgICAgICAgaWYgKCFt
X3Nob3J0SWRlbnRpZmllcnNbY2hhcmFjdGVyc1swXV0uaXNOdWxsKCkpCiAgICAgICAgICAgICBy
ZXR1cm4gbV9zaG9ydElkZW50aWZpZXJzW2NoYXJhY3RlcnNbMF1dOwotICAgICAgICBtX3Nob3J0
SWRlbnRpZmllcnNbY2hhcmFjdGVyc1swXV0gPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZtX2V4
ZWMtPnZtKCksIGNoYXJhY3RlcnMsIGxlbmd0aCk7CisgICAgICAgIG1fc2hvcnRJZGVudGlmaWVy
c1tjaGFyYWN0ZXJzWzBdXSA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIGNoYXJhY3RlcnMs
IGxlbmd0aCk7CiAgICAgICAgIHJldHVybiBtX3Nob3J0SWRlbnRpZmllcnNbY2hhcmFjdGVyc1sw
XV07CiAgICAgfQogICAgIGlmICghbV9yZWNlbnRJZGVudGlmaWVyc1tjaGFyYWN0ZXJzWzBdXS5p
c051bGwoKSAmJiBJZGVudGlmaWVyOjplcXVhbChtX3JlY2VudElkZW50aWZpZXJzW2NoYXJhY3Rl
cnNbMF1dLmltcGwoKSwgY2hhcmFjdGVycywgbGVuZ3RoKSkKICAgICAgICAgcmV0dXJuIG1fcmVj
ZW50SWRlbnRpZmllcnNbY2hhcmFjdGVyc1swXV07Ci0gICAgbV9yZWNlbnRJZGVudGlmaWVyc1tj
aGFyYWN0ZXJzWzBdXSA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJm1fZXhlYy0+dm0oKSwgY2hh
cmFjdGVycywgbGVuZ3RoKTsKKyAgICBtX3JlY2VudElkZW50aWZpZXJzW2NoYXJhY3RlcnNbMF1d
ID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgY2hhcmFjdGVycywgbGVuZ3RoKTsKICAgICBy
ZXR1cm4gbV9yZWNlbnRJZGVudGlmaWVyc1tjaGFyYWN0ZXJzWzBdXTsKIH0KIAogdGVtcGxhdGUg
PHR5cGVuYW1lIENoYXJUeXBlPgogQUxXQVlTX0lOTElORSBjb25zdCBJZGVudGlmaWVyIExpdGVy
YWxQYXJzZXI8Q2hhclR5cGU+OjptYWtlSWRlbnRpZmllcihjb25zdCBVQ2hhciogY2hhcmFjdGVy
cywgc2l6ZV90IGxlbmd0aCkKIHsKKyAgICBWTSYgdm0gPSBtX2V4ZWMtPnZtKCk7CiAgICAgaWYg
KCFsZW5ndGgpCi0gICAgICAgIHJldHVybiBtX2V4ZWMtPnZtKCkucHJvcGVydHlOYW1lcy0+ZW1w
dHlJZGVudGlmaWVyOworICAgICAgICByZXR1cm4gdm0ucHJvcGVydHlOYW1lcy0+ZW1wdHlJZGVu
dGlmaWVyOwogICAgIGlmIChjaGFyYWN0ZXJzWzBdID49IE1heGltdW1DYWNoYWJsZUNoYXJhY3Rl
cikKLSAgICAgICAgcmV0dXJuIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJm1fZXhlYy0+dm0oKSwg
Y2hhcmFjdGVycywgbGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIElkZW50aWZpZXI6OmZyb21TdHJp
bmcodm0sIGNoYXJhY3RlcnMsIGxlbmd0aCk7CiAKICAgICBpZiAobGVuZ3RoID09IDEpIHsKICAg
ICAgICAgaWYgKCFtX3Nob3J0SWRlbnRpZmllcnNbY2hhcmFjdGVyc1swXV0uaXNOdWxsKCkpCiAg
ICAgICAgICAgICByZXR1cm4gbV9zaG9ydElkZW50aWZpZXJzW2NoYXJhY3RlcnNbMF1dOwotICAg
ICAgICBtX3Nob3J0SWRlbnRpZmllcnNbY2hhcmFjdGVyc1swXV0gPSBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKCZtX2V4ZWMtPnZtKCksIGNoYXJhY3RlcnMsIGxlbmd0aCk7CisgICAgICAgIG1fc2hv
cnRJZGVudGlmaWVyc1tjaGFyYWN0ZXJzWzBdXSA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0s
IGNoYXJhY3RlcnMsIGxlbmd0aCk7CiAgICAgICAgIHJldHVybiBtX3Nob3J0SWRlbnRpZmllcnNb
Y2hhcmFjdGVyc1swXV07CiAgICAgfQogICAgIGlmICghbV9yZWNlbnRJZGVudGlmaWVyc1tjaGFy
YWN0ZXJzWzBdXS5pc051bGwoKSAmJiBJZGVudGlmaWVyOjplcXVhbChtX3JlY2VudElkZW50aWZp
ZXJzW2NoYXJhY3RlcnNbMF1dLmltcGwoKSwgY2hhcmFjdGVycywgbGVuZ3RoKSkKICAgICAgICAg
cmV0dXJuIG1fcmVjZW50SWRlbnRpZmllcnNbY2hhcmFjdGVyc1swXV07Ci0gICAgbV9yZWNlbnRJ
ZGVudGlmaWVyc1tjaGFyYWN0ZXJzWzBdXSA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJm1fZXhl
Yy0+dm0oKSwgY2hhcmFjdGVycywgbGVuZ3RoKTsKKyAgICBtX3JlY2VudElkZW50aWZpZXJzW2No
YXJhY3RlcnNbMF1dID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgY2hhcmFjdGVycywgbGVu
Z3RoKTsKICAgICByZXR1cm4gbV9yZWNlbnRJZGVudGlmaWVyc1tjaGFyYWN0ZXJzWzBdXTsKIH0K
IApAQCAtOTYxLDkgKzk2Myw5IEBAIEpTVmFsdWUgTGl0ZXJhbFBhcnNlcjxDaGFyVHlwZT46OnBh
cnNlKFAKICAgICAgICAgICAgICAgICAgICAgY2FzZSBUb2tTdHJpbmc6IHsKICAgICAgICAgICAg
ICAgICAgICAgICAgIHR5cGVuYW1lIExleGVyOjpMaXRlcmFsUGFyc2VyVG9rZW5QdHIgc3RyaW5n
VG9rZW4gPSBtX2xleGVyLmN1cnJlbnRUb2tlbigpOwogICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHN0cmluZ1Rva2VuLT5zdHJpbmdJczhCaXQpCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbGFzdFZhbHVlID0ganNTdHJpbmcobV9leGVjLCBtYWtlSWRlbnRpZmllcihzdHJpbmdUb2tl
bi0+c3RyaW5nVG9rZW44LCBzdHJpbmdUb2tlbi0+c3RyaW5nTGVuZ3RoKS5zdHJpbmcoKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdFZhbHVlID0ganNTdHJpbmcodm0sIG1ha2VJ
ZGVudGlmaWVyKHN0cmluZ1Rva2VuLT5zdHJpbmdUb2tlbjgsIHN0cmluZ1Rva2VuLT5zdHJpbmdM
ZW5ndGgpLnN0cmluZygpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBsYXN0VmFsdWUgPSBqc1N0cmluZyhtX2V4ZWMsIG1ha2VJZGVu
dGlmaWVyKHN0cmluZ1Rva2VuLT5zdHJpbmdUb2tlbjE2LCBzdHJpbmdUb2tlbi0+c3RyaW5nTGVu
Z3RoKS5zdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdFZhbHVlID0g
anNTdHJpbmcodm0sIG1ha2VJZGVudGlmaWVyKHN0cmluZ1Rva2VuLT5zdHJpbmdUb2tlbjE2LCBz
dHJpbmdUb2tlbi0+c3RyaW5nTGVuZ3RoKS5zdHJpbmcoKSk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBtX2xleGVyLm5leHQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9M
b29rdXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Mb29r
dXAuaAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
TG9va3VwLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdo
dCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29weXJp
Z2h0IChDKSAyMDAzLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENv
cHlyaWdodCAoQykgMjAwMy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTM5OSw3ICszOTksNyBAQCBpbmxpbmUgdm9pZCByZWlmeVN0
YXRpY1Byb3BlcnRpZXMoVk0mIHZtCiAgICAgZm9yIChhdXRvJiB2YWx1ZSA6IHZhbHVlcykgewog
ICAgICAgICBpZiAoIXZhbHVlLm1fa2V5KQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
IGF1dG8ga2V5ID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgTENoYXIqPih2YWx1ZS5tX2tleSksIHN0cmxlbih2YWx1ZS5tX2tleSkpOworICAgICAg
ICBhdXRvIGtleSA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgTENoYXIqPih2YWx1ZS5tX2tleSksIHN0cmxlbih2YWx1ZS5tX2tleSkpOwogICAgICAg
ICByZWlmeVN0YXRpY1Byb3BlcnR5KHZtLCBjbGFzc0luZm8sIGtleSwgdmFsdWUsIHRoaXNPYmop
OwogICAgIH0KIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcEl0ZXJh
dG9yUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9NYXBJdGVyYXRvclByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcEl0ZXJhdG9yUHJvdG90eXBlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTYg
QXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE5IEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTM4LDcgKzM4LDcgQEAgdm9pZCBNYXBJdGVyYXRvclByb3RvdHlwZTo6
ZmluaXNoQ3JlYXRpbwogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBBU1NFUlQo
aW5oZXJpdHModm0sIGluZm8oKSkpOwogCi0gICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24o
dm0sIHZtLnByb3BlcnR5TmFtZXMtPnRvU3RyaW5nVGFnU3ltYm9sLCBqc1N0cmluZygmdm0sICJN
YXAgSXRlcmF0b3IiKSwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtIHwgUHJvcGVydHlBdHRy
aWJ1dGU6OlJlYWRPbmx5KTsKKyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0u
cHJvcGVydHlOYW1lcy0+dG9TdHJpbmdUYWdTeW1ib2wsIGpzU3RyaW5nKHZtLCAiTWFwIEl0ZXJh
dG9yIiksIFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8IFByb3BlcnR5QXR0cmlidXRlOjpS
ZWFkT25seSk7CiAgICAgSlNDX0JVSUxUSU5fRlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lUSU9OKHZt
LnByb3BlcnR5TmFtZXMtPm5leHQsIG1hcEl0ZXJhdG9yUHJvdG90eXBlTmV4dENvZGVHZW5lcmF0
b3IsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsK
IH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwUHJvdG90eXBlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBQcm90b3R5
cGUuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9NYXBQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMywgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTczLDcgKzczLDcgQEAgdm9p
ZCBNYXBQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bQogICAgIEpTRnVuY3Rpb24qIGVu
dHJpZXMgPSBKU0Z1bmN0aW9uOjpjcmVhdGUodm0sIG1hcFByb3RvdHlwZUVudHJpZXNDb2RlR2Vu
ZXJhdG9yKHZtKSwgZ2xvYmFsT2JqZWN0KTsKICAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlv
bih2bSwgdm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkuZW50cmllc1B1YmxpY05hbWUo
KSwgZW50cmllcywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250
RW51bSkpOwogICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5h
bWVzLT5pdGVyYXRvclN5bWJvbCwgZW50cmllcywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3Bl
cnR5QXR0cmlidXRlOjpEb250RW51bSkpOwotICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9u
KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT50b1N0cmluZ1RhZ1N5bWJvbCwganNTdHJpbmcoJnZtLCAi
TWFwIiksIFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8IFByb3BlcnR5QXR0cmlidXRlOjpS
ZWFkT25seSk7CisgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5
TmFtZXMtPnRvU3RyaW5nVGFnU3ltYm9sLCBqc1N0cmluZyh2bSwgIk1hcCIpLCBQcm9wZXJ0eUF0
dHJpYnV0ZTo6RG9udEVudW0gfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpOwogCiAgICAg
SlNDX05BVElWRV9HRVRURVJfV0lUSE9VVF9UUkFOU0lUSU9OKHZtLnByb3BlcnR5TmFtZXMtPnNp
emUsIG1hcFByb3RvRnVuY1NpemUsIFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8IFByb3Bl
cnR5QXR0cmlidXRlOjpBY2Nlc3Nvcik7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9NYXRoT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9NYXRoT2JqZWN0LmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvTWF0aE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NiArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAo
cG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA3LTIwMDgsIDIwMTMsIDIwMTUt
MjAxNiBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAy
MDA3LTIwMTkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAg
KiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYwpAQCAtNzgsNTEgKzc4LDUxIEBAIHZvaWQgTWF0aE9iamVjdDo6ZmluaXNoQ3JlYXRpb24o
Vk0mIHZtLCAKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAgQVNTRVJUKGluaGVy
aXRzKHZtLCBpbmZvKCkpKTsKIAotICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgIkUiKSwganNOdW1iZXIoTWF0aDo6ZXhwKDEuMCkp
LCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IFByb3BlcnR5QXR0cmlidXRlOjpEb250
RW51bSB8IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSk7Ci0gICAgcHV0RGlyZWN0V2l0aG91
dFRyYW5zaXRpb24odm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiTE4yIiksIGpzTnVt
YmVyKE1hdGg6OmxvZygyLjApKSwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUgfCBQcm9w
ZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpOwot
ICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KCZ2bSwgIkxOMTAiKSwganNOdW1iZXIoTWF0aDo6bG9nKDEwLjApKSwgUHJvcGVydHlBdHRyaWJ1
dGU6OkRvbnREZWxldGUgfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBQcm9wZXJ0eUF0
dHJpYnV0ZTo6UmVhZE9ubHkpOwotICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgIkxPRzJFIiksIGpzTnVtYmVyKDEuMCAvIE1hdGg6
OmxvZygyLjApKSwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUgfCBQcm9wZXJ0eUF0dHJp
YnV0ZTo6RG9udEVudW0gfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpOwotICAgIHB1dERp
cmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgIkxP
RzEwRSIpLCBqc051bWJlcigwLjQzNDI5NDQ4MTkwMzI1MTgpLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6
RG9udERlbGV0ZSB8IFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8IFByb3BlcnR5QXR0cmli
dXRlOjpSZWFkT25seSk7Ci0gICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIElkZW50
aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiUEkiKSwganNOdW1iZXIocGlEb3VibGUpLCBQcm9wZXJ0
eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8IFBy
b3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSk7Ci0gICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRp
b24odm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiU1FSVDFfMiIpLCBqc051bWJlcihz
cXJ0KDAuNSkpLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IFByb3BlcnR5QXR0cmli
dXRlOjpEb250RW51bSB8IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSk7Ci0gICAgcHV0RGly
ZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiU1FS
VDIiKSwganNOdW1iZXIoc3FydCgyLjApKSwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUg
fCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9u
bHkpOwotICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVz
LT50b1N0cmluZ1RhZ1N5bWJvbCwganNTdHJpbmcoJnZtLCAiTWF0aCIpLCBQcm9wZXJ0eUF0dHJp
YnV0ZTo6RG9udEVudW0gfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpOwotCi0gICAgcHV0
RGlyZWN0TmF0aXZlRnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImFicyIpLCAxLCBtYXRoUHJvdG9GdW5jQWJzLCBB
YnNJbnRyaW5zaWMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9u
dEVudW0pKTsKLSAgICBwdXREaXJlY3ROYXRpdmVGdW5jdGlvbldpdGhvdXRUcmFuc2l0aW9uKHZt
LCBnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiYWNvcyIpLCAxLCBt
YXRoUHJvdG9GdW5jQUNvcywgQUNvc0ludHJpbnNpYywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFBy
b3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOwotICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9u
V2l0aG91dFRyYW5zaXRpb24odm0sIGdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zygmdm0sICJhc2luIiksIDEsIG1hdGhQcm90b0Z1bmNBU2luLCBBU2luSW50cmluc2ljLCBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7Ci0gICAgcHV0
RGlyZWN0TmF0aXZlRnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImF0YW4iKSwgMSwgbWF0aFByb3RvRnVuY0FUYW4s
IEFUYW5JbnRyaW5zaWMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6
RG9udEVudW0pKTsKLSAgICBwdXREaXJlY3ROYXRpdmVGdW5jdGlvbldpdGhvdXRUcmFuc2l0aW9u
KHZtLCBnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiYWNvc2giKSwg
MSwgbWF0aFByb3RvRnVuY0FDb3NoLCBBQ29zaEludHJpbnNpYywgc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOwotICAgIHB1dERpcmVjdE5hdGl2ZUZ1
bmN0aW9uV2l0aG91dFRyYW5zaXRpb24odm0sIGdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZygmdm0sICJhc2luaCIpLCAxLCBtYXRoUHJvdG9GdW5jQVNpbmgsIEFTaW5oSW50cmlu
c2ljLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7
Ci0gICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbih2bSwgZ2xvYmFs
T2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImF0YW5oIiksIDEsIG1hdGhQcm90
b0Z1bmNBVGFuaCwgQVRhbmhJbnRyaW5zaWMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0
eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKLSAgICBwdXREaXJlY3ROYXRpdmVGdW5jdGlvbldpdGhv
dXRUcmFuc2l0aW9uKHZtLCBnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZt
LCAiYXRhbjIiKSwgMiwgbWF0aFByb3RvRnVuY0FUYW4yLCBOb0ludHJpbnNpYywgc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOwotICAgIHB1dERpcmVj
dE5hdGl2ZUZ1bmN0aW9uV2l0aG91dFRyYW5zaXRpb24odm0sIGdsb2JhbE9iamVjdCwgSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZygmdm0sICJjYnJ0IiksIDEsIG1hdGhQcm90b0Z1bmNDYnJ0LCBDYnJ0
SW50cmluc2ljLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRF
bnVtKSk7Ci0gICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbih2bSwg
Z2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImNlaWwiKSwgMSwgbWF0
aFByb3RvRnVuY0NlaWwsIENlaWxJbnRyaW5zaWMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9w
ZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKLSAgICBwdXREaXJlY3ROYXRpdmVGdW5jdGlvbldp
dGhvdXRUcmFuc2l0aW9uKHZtLCBnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmco
JnZtLCAiY2x6MzIiKSwgMSwgbWF0aFByb3RvRnVuY0NsejMyLCBDbHozMkludHJpbnNpYywgc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOwotICAgIHB1
dERpcmVjdE5hdGl2ZUZ1bmN0aW9uV2l0aG91dFRyYW5zaXRpb24odm0sIGdsb2JhbE9iamVjdCwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJjb3MiKSwgMSwgbWF0aFByb3RvRnVuY0Nvcywg
Q29zSW50cmluc2ljLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRv
bnRFbnVtKSk7Ci0gICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbih2
bSwgZ2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImNvc2giKSwgMSwg
bWF0aFByb3RvRnVuY0Nvc2gsIENvc2hJbnRyaW5zaWMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQ
cm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKLSAgICBwdXREaXJlY3ROYXRpdmVGdW5jdGlv
bldpdGhvdXRUcmFuc2l0aW9uKHZtLCBnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJp
bmcoJnZtLCAiZXhwIiksIDEsIG1hdGhQcm90b0Z1bmNFeHAsIEV4cEludHJpbnNpYywgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOwotICAgIHB1dERp
cmVjdE5hdGl2ZUZ1bmN0aW9uV2l0aG91dFRyYW5zaXRpb24odm0sIGdsb2JhbE9iamVjdCwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJleHBtMSIpLCAxLCBtYXRoUHJvdG9GdW5jRXhwbTEs
IEV4cG0xSW50cmluc2ljLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6
OkRvbnRFbnVtKSk7Ci0gICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rpb25XaXRob3V0VHJhbnNpdGlv
bih2bSwgZ2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImZsb29yIiks
IDEsIG1hdGhQcm90b0Z1bmNGbG9vciwgRmxvb3JJbnRyaW5zaWMsIHN0YXRpY19jYXN0PHVuc2ln
bmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKLSAgICBwdXREaXJlY3ROYXRpdmVG
dW5jdGlvbldpdGhvdXRUcmFuc2l0aW9uKHZtLCBnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZy
b21TdHJpbmcoJnZtLCAiZnJvdW5kIiksIDEsIG1hdGhQcm90b0Z1bmNGcm91bmQsIEZSb3VuZElu
dHJpbnNpYywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51
bSkpOwotICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9uV2l0aG91dFRyYW5zaXRpb24odm0sIGds
b2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJoeXBvdCIpLCAyLCBtYXRo
UHJvdG9GdW5jSHlwb3QsIE5vSW50cmluc2ljLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVy
dHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7Ci0gICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rpb25XaXRo
b3V0VHJhbnNpdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2
bSwgImxvZyIpLCAxLCBtYXRoUHJvdG9GdW5jTG9nLCBMb2dJbnRyaW5zaWMsIHN0YXRpY19jYXN0
PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKLSAgICBwdXREaXJlY3RO
YXRpdmVGdW5jdGlvbldpdGhvdXRUcmFuc2l0aW9uKHZtLCBnbG9iYWxPYmplY3QsIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcoJnZtLCAibG9nMTAiKSwgMSwgbWF0aFByb3RvRnVuY0xvZzEwLCBMb2cx
MEludHJpbnNpYywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250
RW51bSkpOwotICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9uV2l0aG91dFRyYW5zaXRpb24odm0s
IGdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJsb2cxcCIpLCAxLCBt
YXRoUHJvdG9GdW5jTG9nMXAsIExvZzFwSW50cmluc2ljLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7Ci0gICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rp
b25XaXRob3V0VHJhbnNpdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKCZ2bSwgImxvZzIiKSwgMSwgbWF0aFByb3RvRnVuY0xvZzIsIExvZzJJbnRyaW5zaWMsIHN0
YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKLSAgICBw
dXREaXJlY3ROYXRpdmVGdW5jdGlvbldpdGhvdXRUcmFuc2l0aW9uKHZtLCBnbG9iYWxPYmplY3Qs
IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAibWF4IiksIDIsIG1hdGhQcm90b0Z1bmNNYXgs
IE1heEludHJpbnNpYywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpE
b250RW51bSkpOwotICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9uV2l0aG91dFRyYW5zaXRpb24o
dm0sIGdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJtaW4iKSwgMiwg
bWF0aFByb3RvRnVuY01pbiwgTWluSW50cmluc2ljLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJv
cGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7Ci0gICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rpb25X
aXRob3V0VHJhbnNpdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KCZ2bSwgInBvdyIpLCAyLCBtYXRoUHJvdG9GdW5jUG93LCBQb3dJbnRyaW5zaWMsIHN0YXRpY19j
YXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKLSAgICBwdXREaXJl
Y3ROYXRpdmVGdW5jdGlvbldpdGhvdXRUcmFuc2l0aW9uKHZtLCBnbG9iYWxPYmplY3QsIElkZW50
aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAicmFuZG9tIiksIDAsIG1hdGhQcm90b0Z1bmNSYW5kb20s
IFJhbmRvbUludHJpbnNpYywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRl
OjpEb250RW51bSkpOwotICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9uV2l0aG91dFRyYW5zaXRp
b24odm0sIGdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJyb3VuZCIp
LCAxLCBtYXRoUHJvdG9GdW5jUm91bmQsIFJvdW5kSW50cmluc2ljLCBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7Ci0gICAgcHV0RGlyZWN0TmF0aXZl
RnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKCZ2bSwgInNpZ24iKSwgMSwgbWF0aFByb3RvRnVuY1NpZ24sIE5vSW50cmluc2lj
LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7Ci0g
ICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbih2bSwgZ2xvYmFsT2Jq
ZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgInNpbiIpLCAxLCBtYXRoUHJvdG9GdW5j
U2luLCBTaW5JbnRyaW5zaWMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0
ZTo6RG9udEVudW0pKTsKLSAgICBwdXREaXJlY3ROYXRpdmVGdW5jdGlvbldpdGhvdXRUcmFuc2l0
aW9uKHZtLCBnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAic2luaCIp
LCAxLCBtYXRoUHJvdG9GdW5jU2luaCwgU2luaEludHJpbnNpYywgc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOwotICAgIHB1dERpcmVjdE5hdGl2ZUZ1
bmN0aW9uV2l0aG91dFRyYW5zaXRpb24odm0sIGdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZygmdm0sICJzcXJ0IiksIDEsIG1hdGhQcm90b0Z1bmNTcXJ0LCBTcXJ0SW50cmluc2lj
LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7Ci0g
ICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbih2bSwgZ2xvYmFsT2Jq
ZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgInRhbiIpLCAxLCBtYXRoUHJvdG9GdW5j
VGFuLCBUYW5JbnRyaW5zaWMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0
ZTo6RG9udEVudW0pKTsKLSAgICBwdXREaXJlY3ROYXRpdmVGdW5jdGlvbldpdGhvdXRUcmFuc2l0
aW9uKHZtLCBnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAidGFuaCIp
LCAxLCBtYXRoUHJvdG9GdW5jVGFuaCwgVGFuaEludHJpbnNpYywgc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOwotICAgIHB1dERpcmVjdE5hdGl2ZUZ1
bmN0aW9uV2l0aG91dFRyYW5zaXRpb24odm0sIGdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZygmdm0sICJ0cnVuYyIpLCAxLCBtYXRoUHJvdG9GdW5jVHJ1bmMsIFRydW5jSW50cmlu
c2ljLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7
Ci0gICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbih2bSwgZ2xvYmFs
T2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImltdWwiKSwgMiwgbWF0aFByb3Rv
RnVuY0lNdWwsIElNdWxJbnRyaW5zaWMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0
dHJpYnV0ZTo6RG9udEVudW0pKTsKKyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIkUiKSwganNOdW1iZXIoTWF0aDo6ZXhwKDEuMCkp
LCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IFByb3BlcnR5QXR0cmlidXRlOjpEb250
RW51bSB8IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSk7CisgICAgcHV0RGlyZWN0V2l0aG91
dFRyYW5zaXRpb24odm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJMTjIiKSwganNOdW1i
ZXIoTWF0aDo6bG9nKDIuMCkpLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IFByb3Bl
cnR5QXR0cmlidXRlOjpEb250RW51bSB8IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSk7Cisg
ICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmco
dm0sICJMTjEwIiksIGpzTnVtYmVyKE1hdGg6OmxvZygxMC4wKSksIFByb3BlcnR5QXR0cmlidXRl
OjpEb250RGVsZXRlIHwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtIHwgUHJvcGVydHlBdHRy
aWJ1dGU6OlJlYWRPbmx5KTsKKyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIkxPRzJFIiksIGpzTnVtYmVyKDEuMCAvIE1hdGg6Omxv
ZygyLjApKSwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUgfCBQcm9wZXJ0eUF0dHJpYnV0
ZTo6RG9udEVudW0gfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpOworICAgIHB1dERpcmVj
dFdpdGhvdXRUcmFuc2l0aW9uKHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiTE9HMTBF
IiksIGpzTnVtYmVyKDAuNDM0Mjk0NDgxOTAzMjUxOCksIFByb3BlcnR5QXR0cmlidXRlOjpEb250
RGVsZXRlIHwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtIHwgUHJvcGVydHlBdHRyaWJ1dGU6
OlJlYWRPbmx5KTsKKyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZyh2bSwgIlBJIiksIGpzTnVtYmVyKHBpRG91YmxlKSwgUHJvcGVydHlBdHRy
aWJ1dGU6OkRvbnREZWxldGUgfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBQcm9wZXJ0
eUF0dHJpYnV0ZTo6UmVhZE9ubHkpOworICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZt
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiU1FSVDFfMiIpLCBqc051bWJlcihzcXJ0KDAu
NSkpLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IFByb3BlcnR5QXR0cmlidXRlOjpE
b250RW51bSB8IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSk7CisgICAgcHV0RGlyZWN0V2l0
aG91dFRyYW5zaXRpb24odm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJTUVJUMiIpLCBq
c051bWJlcihzcXJ0KDIuMCkpLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IFByb3Bl
cnR5QXR0cmlidXRlOjpEb250RW51bSB8IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSk7Cisg
ICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPnRvU3Ry
aW5nVGFnU3ltYm9sLCBqc1N0cmluZyh2bSwgIk1hdGgiKSwgUHJvcGVydHlBdHRyaWJ1dGU6OkRv
bnRFbnVtIHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KTsKKworICAgIHB1dERpcmVjdE5h
dGl2ZUZ1bmN0aW9uV2l0aG91dFRyYW5zaXRpb24odm0sIGdsb2JhbE9iamVjdCwgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZyh2bSwgImFicyIpLCAxLCBtYXRoUHJvdG9GdW5jQWJzLCBBYnNJbnRyaW5z
aWMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsK
KyAgICBwdXREaXJlY3ROYXRpdmVGdW5jdGlvbldpdGhvdXRUcmFuc2l0aW9uKHZtLCBnbG9iYWxP
YmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJhY29zIiksIDEsIG1hdGhQcm90b0Z1
bmNBQ29zLCBBQ29zSW50cmluc2ljLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRy
aWJ1dGU6OkRvbnRFbnVtKSk7CisgICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rpb25XaXRob3V0VHJh
bnNpdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiYXNp
biIpLCAxLCBtYXRoUHJvdG9GdW5jQVNpbiwgQVNpbkludHJpbnNpYywgc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOworICAgIHB1dERpcmVjdE5hdGl2
ZUZ1bmN0aW9uV2l0aG91dFRyYW5zaXRpb24odm0sIGdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZyh2bSwgImF0YW4iKSwgMSwgbWF0aFByb3RvRnVuY0FUYW4sIEFUYW5JbnRyaW5z
aWMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsK
KyAgICBwdXREaXJlY3ROYXRpdmVGdW5jdGlvbldpdGhvdXRUcmFuc2l0aW9uKHZtLCBnbG9iYWxP
YmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJhY29zaCIpLCAxLCBtYXRoUHJvdG9G
dW5jQUNvc2gsIEFDb3NoSW50cmluc2ljLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlB
dHRyaWJ1dGU6OkRvbnRFbnVtKSk7CisgICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rpb25XaXRob3V0
VHJhbnNpdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAi
YXNpbmgiKSwgMSwgbWF0aFByb3RvRnVuY0FTaW5oLCBBU2luaEludHJpbnNpYywgc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOworICAgIHB1dERpcmVj
dE5hdGl2ZUZ1bmN0aW9uV2l0aG91dFRyYW5zaXRpb24odm0sIGdsb2JhbE9iamVjdCwgSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZyh2bSwgImF0YW5oIiksIDEsIG1hdGhQcm90b0Z1bmNBVGFuaCwgQVRh
bmhJbnRyaW5zaWMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9u
dEVudW0pKTsKKyAgICBwdXREaXJlY3ROYXRpdmVGdW5jdGlvbldpdGhvdXRUcmFuc2l0aW9uKHZt
LCBnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJhdGFuMiIpLCAyLCBt
YXRoUHJvdG9GdW5jQVRhbjIsIE5vSW50cmluc2ljLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJv
cGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7CisgICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rpb25X
aXRob3V0VHJhbnNpdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KHZtLCAiY2JydCIpLCAxLCBtYXRoUHJvdG9GdW5jQ2JydCwgQ2JydEludHJpbnNpYywgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOworICAgIHB1dERp
cmVjdE5hdGl2ZUZ1bmN0aW9uV2l0aG91dFRyYW5zaXRpb24odm0sIGdsb2JhbE9iamVjdCwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImNlaWwiKSwgMSwgbWF0aFByb3RvRnVuY0NlaWwsIENl
aWxJbnRyaW5zaWMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9u
dEVudW0pKTsKKyAgICBwdXREaXJlY3ROYXRpdmVGdW5jdGlvbldpdGhvdXRUcmFuc2l0aW9uKHZt
LCBnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJjbHozMiIpLCAxLCBt
YXRoUHJvdG9GdW5jQ2x6MzIsIENsejMySW50cmluc2ljLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7CisgICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rp
b25XaXRob3V0VHJhbnNpdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKHZtLCAiY29zIiksIDEsIG1hdGhQcm90b0Z1bmNDb3MsIENvc0ludHJpbnNpYywgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOworICAgIHB1dERp
cmVjdE5hdGl2ZUZ1bmN0aW9uV2l0aG91dFRyYW5zaXRpb24odm0sIGdsb2JhbE9iamVjdCwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImNvc2giKSwgMSwgbWF0aFByb3RvRnVuY0Nvc2gsIENv
c2hJbnRyaW5zaWMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9u
dEVudW0pKTsKKyAgICBwdXREaXJlY3ROYXRpdmVGdW5jdGlvbldpdGhvdXRUcmFuc2l0aW9uKHZt
LCBnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJleHAiKSwgMSwgbWF0
aFByb3RvRnVuY0V4cCwgRXhwSW50cmluc2ljLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVy
dHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7CisgICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rpb25XaXRo
b3V0VHJhbnNpdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZt
LCAiZXhwbTEiKSwgMSwgbWF0aFByb3RvRnVuY0V4cG0xLCBFeHBtMUludHJpbnNpYywgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOworICAgIHB1dERp
cmVjdE5hdGl2ZUZ1bmN0aW9uV2l0aG91dFRyYW5zaXRpb24odm0sIGdsb2JhbE9iamVjdCwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImZsb29yIiksIDEsIG1hdGhQcm90b0Z1bmNGbG9vciwg
Rmxvb3JJbnRyaW5zaWMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6
RG9udEVudW0pKTsKKyAgICBwdXREaXJlY3ROYXRpdmVGdW5jdGlvbldpdGhvdXRUcmFuc2l0aW9u
KHZtLCBnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJmcm91bmQiKSwg
MSwgbWF0aFByb3RvRnVuY0Zyb3VuZCwgRlJvdW5kSW50cmluc2ljLCBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7CisgICAgcHV0RGlyZWN0TmF0aXZl
RnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCAiaHlwb3QiKSwgMiwgbWF0aFByb3RvRnVuY0h5cG90LCBOb0ludHJpbnNp
Yywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOwor
ICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9uV2l0aG91dFRyYW5zaXRpb24odm0sIGdsb2JhbE9i
amVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImxvZyIpLCAxLCBtYXRoUHJvdG9GdW5j
TG9nLCBMb2dJbnRyaW5zaWMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0
ZTo6RG9udEVudW0pKTsKKyAgICBwdXREaXJlY3ROYXRpdmVGdW5jdGlvbldpdGhvdXRUcmFuc2l0
aW9uKHZtLCBnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJsb2cxMCIp
LCAxLCBtYXRoUHJvdG9GdW5jTG9nMTAsIExvZzEwSW50cmluc2ljLCBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7CisgICAgcHV0RGlyZWN0TmF0aXZl
RnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCAibG9nMXAiKSwgMSwgbWF0aFByb3RvRnVuY0xvZzFwLCBMb2cxcEludHJp
bnNpYywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkp
OworICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9uV2l0aG91dFRyYW5zaXRpb24odm0sIGdsb2Jh
bE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImxvZzIiKSwgMSwgbWF0aFByb3Rv
RnVuY0xvZzIsIExvZzJJbnRyaW5zaWMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0
dHJpYnV0ZTo6RG9udEVudW0pKTsKKyAgICBwdXREaXJlY3ROYXRpdmVGdW5jdGlvbldpdGhvdXRU
cmFuc2l0aW9uKHZtLCBnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJt
YXgiKSwgMiwgbWF0aFByb3RvRnVuY01heCwgTWF4SW50cmluc2ljLCBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7CisgICAgcHV0RGlyZWN0TmF0aXZl
RnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCAibWluIiksIDIsIG1hdGhQcm90b0Z1bmNNaW4sIE1pbkludHJpbnNpYywg
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOworICAg
IHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9uV2l0aG91dFRyYW5zaXRpb24odm0sIGdsb2JhbE9iamVj
dCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInBvdyIpLCAyLCBtYXRoUHJvdG9GdW5jUG93
LCBQb3dJbnRyaW5zaWMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6
RG9udEVudW0pKTsKKyAgICBwdXREaXJlY3ROYXRpdmVGdW5jdGlvbldpdGhvdXRUcmFuc2l0aW9u
KHZtLCBnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJyYW5kb20iKSwg
MCwgbWF0aFByb3RvRnVuY1JhbmRvbSwgUmFuZG9tSW50cmluc2ljLCBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7CisgICAgcHV0RGlyZWN0TmF0aXZl
RnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCAicm91bmQiKSwgMSwgbWF0aFByb3RvRnVuY1JvdW5kLCBSb3VuZEludHJp
bnNpYywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkp
OworICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9uV2l0aG91dFRyYW5zaXRpb24odm0sIGdsb2Jh
bE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInNpZ24iKSwgMSwgbWF0aFByb3Rv
RnVuY1NpZ24sIE5vSW50cmluc2ljLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRy
aWJ1dGU6OkRvbnRFbnVtKSk7CisgICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rpb25XaXRob3V0VHJh
bnNpdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAic2lu
IiksIDEsIG1hdGhQcm90b0Z1bmNTaW4sIFNpbkludHJpbnNpYywgc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOworICAgIHB1dERpcmVjdE5hdGl2ZUZ1
bmN0aW9uV2l0aG91dFRyYW5zaXRpb24odm0sIGdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyh2bSwgInNpbmgiKSwgMSwgbWF0aFByb3RvRnVuY1NpbmgsIFNpbmhJbnRyaW5zaWMs
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKKyAg
ICBwdXREaXJlY3ROYXRpdmVGdW5jdGlvbldpdGhvdXRUcmFuc2l0aW9uKHZtLCBnbG9iYWxPYmpl
Y3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJzcXJ0IiksIDEsIG1hdGhQcm90b0Z1bmNT
cXJ0LCBTcXJ0SW50cmluc2ljLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1
dGU6OkRvbnRFbnVtKSk7CisgICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rpb25XaXRob3V0VHJhbnNp
dGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAidGFuIiks
IDEsIG1hdGhQcm90b0Z1bmNUYW4sIFRhbkludHJpbnNpYywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOworICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0
aW9uV2l0aG91dFRyYW5zaXRpb24odm0sIGdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZyh2bSwgInRhbmgiKSwgMSwgbWF0aFByb3RvRnVuY1RhbmgsIFRhbmhJbnRyaW5zaWMsIHN0
YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKKyAgICBw
dXREaXJlY3ROYXRpdmVGdW5jdGlvbldpdGhvdXRUcmFuc2l0aW9uKHZtLCBnbG9iYWxPYmplY3Qs
IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJ0cnVuYyIpLCAxLCBtYXRoUHJvdG9GdW5jVHJ1
bmMsIFRydW5jSW50cmluc2ljLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1
dGU6OkRvbnRFbnVtKSk7CisgICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rpb25XaXRob3V0VHJhbnNp
dGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiaW11bCIp
LCAyLCBtYXRoUHJvdG9GdW5jSU11bCwgSU11bEludHJpbnNpYywgc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOwogfQogCiAvLyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0gRnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OdW1iZXJDb25zdHJ1Y3Rv
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVy
Q29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9OdW1iZXJDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiAr
MSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwLDIwMDMgSGFycmkgUG9ydGVu
IChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMTEsIDIw
MTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChD
KSAyMDA3LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYwpAQCAtNzAsMTkgKzcwLDE5IEBAIHZvaWQgTnVtYmVyQ29uc3RydWN0b3I6OmZpbmlz
aENyZWF0aW9uKFYKICAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVy
dHlOYW1lcy0+cHJvdG90eXBlLCBudW1iZXJQcm90b3R5cGUsIFByb3BlcnR5QXR0cmlidXRlOjpE
b250RW51bSB8IFByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgUHJvcGVydHlBdHRyaWJ1
dGU6OlJlYWRPbmx5KTsKICAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJv
cGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigxKSwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRP
bmx5IHwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKIAotICAgIHB1dERpcmVjdFdpdGhv
dXRUcmFuc2l0aW9uKHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgIkVQU0lMT04iKSwg
anNEb3VibGVOdW1iZXIoc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjplcHNpbG9uKCkpLCBQ
cm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51
bSB8IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSk7Ci0gICAgcHV0RGlyZWN0V2l0aG91dFRy
YW5zaXRpb24odm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiTUFYX1ZBTFVFIiksIGpz
RG91YmxlTnVtYmVyKDEuNzk3NjkzMTM0ODYyMzE1N0UrMzA4KSwgUHJvcGVydHlBdHRyaWJ1dGU6
OkRvbnREZWxldGUgfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBQcm9wZXJ0eUF0dHJp
YnV0ZTo6UmVhZE9ubHkpOwotICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgIk1JTl9WQUxVRSIpLCBqc0RvdWJsZU51bWJlcig1RS0z
MjQpLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IFByb3BlcnR5QXR0cmlidXRlOjpE
b250RW51bSB8IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSk7Ci0gICAgcHV0RGlyZWN0V2l0
aG91dFRyYW5zaXRpb24odm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiTUFYX1NBRkVf
SU5URUdFUiIpLCBqc0RvdWJsZU51bWJlcihtYXhTYWZlSW50ZWdlcigpKSwgUHJvcGVydHlBdHRy
aWJ1dGU6OkRvbnREZWxldGUgfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBQcm9wZXJ0
eUF0dHJpYnV0ZTo6UmVhZE9ubHkpOwotICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZt
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgIk1JTl9TQUZFX0lOVEVHRVIiKSwganNEb3Vi
bGVOdW1iZXIobWluU2FmZUludGVnZXIoKSksIFByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRl
IHwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtIHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRP
bmx5KTsKLSAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZygmdm0sICJORUdBVElWRV9JTkZJTklUWSIpLCBqc0RvdWJsZU51bWJlcigtc3RkOjpu
dW1lcmljX2xpbWl0czxkb3VibGU+OjppbmZpbml0eSgpKSwgUHJvcGVydHlBdHRyaWJ1dGU6OkRv
bnREZWxldGUgfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBQcm9wZXJ0eUF0dHJpYnV0
ZTo6UmVhZE9ubHkpOwotICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKCZ2bSwgIlBPU0lUSVZFX0lORklOSVRZIiksIGpzRG91YmxlTnVtYmVy
KHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6aW5maW5pdHkoKSksIFByb3BlcnR5QXR0cmli
dXRlOjpEb250RGVsZXRlIHwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtIHwgUHJvcGVydHlB
dHRyaWJ1dGU6OlJlYWRPbmx5KTsKKyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIkVQU0lMT04iKSwganNEb3VibGVOdW1iZXIoc3Rk
OjpudW1lcmljX2xpbWl0czxkb3VibGU+OjplcHNpbG9uKCkpLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6
RG9udERlbGV0ZSB8IFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8IFByb3BlcnR5QXR0cmli
dXRlOjpSZWFkT25seSk7CisgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIElkZW50
aWZpZXI6OmZyb21TdHJpbmcodm0sICJNQVhfVkFMVUUiKSwganNEb3VibGVOdW1iZXIoMS43OTc2
OTMxMzQ4NjIzMTU3RSszMDgpLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IFByb3Bl
cnR5QXR0cmlidXRlOjpEb250RW51bSB8IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSk7Cisg
ICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmco
dm0sICJNSU5fVkFMVUUiKSwganNEb3VibGVOdW1iZXIoNUUtMzI0KSwgUHJvcGVydHlBdHRyaWJ1
dGU6OkRvbnREZWxldGUgfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBQcm9wZXJ0eUF0
dHJpYnV0ZTo6UmVhZE9ubHkpOworICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiTUFYX1NBRkVfSU5URUdFUiIpLCBqc0RvdWJsZU51
bWJlcihtYXhTYWZlSW50ZWdlcigpKSwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUgfCBQ
cm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkp
OworICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKHZtLCAiTUlOX1NBRkVfSU5URUdFUiIpLCBqc0RvdWJsZU51bWJlcihtaW5TYWZlSW50ZWdl
cigpKSwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUgfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6
RG9udEVudW0gfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpOworICAgIHB1dERpcmVjdFdp
dGhvdXRUcmFuc2l0aW9uKHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiTkVHQVRJVkVf
SU5GSU5JVFkiKSwganNEb3VibGVOdW1iZXIoLXN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6
aW5maW5pdHkoKSksIFByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgUHJvcGVydHlBdHRy
aWJ1dGU6OkRvbnRFbnVtIHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KTsKKyAgICBwdXRE
aXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIlBP
U0lUSVZFX0lORklOSVRZIiksIGpzRG91YmxlTnVtYmVyKHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91
YmxlPjo6aW5maW5pdHkoKSksIFByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgUHJvcGVy
dHlBdHRyaWJ1dGU6OkRvbnRFbnVtIHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KTsKICAg
ICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+TmFOLCBq
c05hTigpLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IFByb3BlcnR5QXR0cmlidXRl
OjpEb250RW51bSB8IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSk7CiAKICAgICBwdXREaXJl
Y3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+cGFyc2VJbnQsIG51bWJl
clByb3RvdHlwZS0+Z2xvYmFsT2JqZWN0KHZtKS0+cGFyc2VJbnRGdW5jdGlvbigpLCBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7CiAgICAgcHV0RGly
ZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPnBhcnNlRmxvYXQsIG51
bWJlclByb3RvdHlwZS0+Z2xvYmFsT2JqZWN0KHZtKS0+cGFyc2VGbG9hdEZ1bmN0aW9uKCksIHN0
YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKIAotICAg
IEpTQ19OQVRJVkVfSU5UUklOU0lDX0ZVTkNUSU9OX1dJVEhPVVRfVFJBTlNJVElPTihJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKCZ2bSwgImlzSW50ZWdlciIpLCBudW1iZXJDb25zdHJ1Y3RvckZ1bmNJ
c0ludGVnZXIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVu
dW0pLCAxLCBOdW1iZXJJc0ludGVnZXJJbnRyaW5zaWMpOworICAgIEpTQ19OQVRJVkVfSU5UUklO
U0lDX0ZVTkNUSU9OX1dJVEhPVVRfVFJBTlNJVElPTihJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZt
LCAiaXNJbnRlZ2VyIiksIG51bWJlckNvbnN0cnVjdG9yRnVuY0lzSW50ZWdlciwgc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSksIDEsIE51bWJlcklzSW50
ZWdlckludHJpbnNpYyk7CiB9CiAKIC8vIEVDTUEgMTUuNy4xCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9OdW1iZXJQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlclByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDI0
OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlclByb3RvdHlwZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykg
MTk5OS0yMDAwLDIwMDMgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmln
aHQgKEMpIDIwMDcsIDIwMDgsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogIENvcHlyaWdodCAoQykgMjAwNy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTQyMiw3ICs0MjIsNyBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIG51bWJlclByb3RvCiAKICAgICAvLyBIYW5kbGUgTmFOIGFuZCBJbmZp
bml0eS4KICAgICBpZiAoIXN0ZDo6aXNmaW5pdGUoeCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNOb250cml2aWFsU3RyaW5nKGV4ZWMsIFN0cmluZzo6bnVtYmVyKHgpKSk7Cisg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOb250cml2aWFsU3RyaW5nKHZtLCBTdHJp
bmc6Om51bWJlcih4KSkpOwogCiAgICAgaWYgKCFpblJhbmdlKQogICAgICAgICByZXR1cm4gdGhy
b3dWTUVycm9yKGV4ZWMsIHNjb3BlLCBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsICJ0b0V4cG9uZW50
aWFsKCkgYXJndW1lbnQgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDIwIl9zKSk7CkBAIC00MzUsNyAr
NDM1LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBudW1iZXJQcm90bwogICAgIGlz
VW5kZWZpbmVkCiAgICAgICAgID8gY29udmVydGVyLlRvRXhwb25lbnRpYWwoeCwgLTEsICZidWls
ZGVyKQogICAgICAgICA6IGNvbnZlcnRlci5Ub0V4cG9uZW50aWFsKHgsIGRlY2ltYWxQbGFjZXNJ
bkV4cG9uZW50LCAmYnVpbGRlcik7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmlu
ZyhleGVjLCBidWlsZGVyLkZpbmFsaXplKCkpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzU3RyaW5nKHZtLCBidWlsZGVyLkZpbmFsaXplKCkpKTsKIH0KIAogLy8gdG9GaXhlZCBjb252
ZXJ0cyBhIG51bWJlciB0byBhIHN0cmluZywgYWx3YXlzIGZvcm1hdHRpbmcgYXMgYW4gYSBkZWNp
bWFsIGZyYWN0aW9uLgpAQCAtNDYzLDEzICs0NjMsMTMgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBudW1iZXJQcm90bwogICAgIC8vIFRoaXMgYWxzbyBjb3ZlcnMgSW5pbml0eSwgYW5k
IHN0cnVjdHVyZSB0aGUgY2hlY2sgc28gdGhhdCBOYU4KICAgICAvLyB2YWx1ZXMgYXJlIGFsc28g
aGFuZGxlZCBieSBudW1iZXJUb1N0cmluZwogICAgIGlmICghKGZhYnMoeCkgPCAxZSsyMSkpCi0g
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcoZXhlYywgU3RyaW5nOjpudW1i
ZXIoeCkpKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyh2bSwgU3Ry
aW5nOjpudW1iZXIoeCkpKTsKIAogICAgIC8vIFRoZSBjaGVjayBhYm92ZSB3aWxsIHJldHVybiBm
YWxzZSBmb3IgTmFOIG9yIEluZmluaXR5LCB0aGVzZSB3aWxsIGJlCiAgICAgLy8gaGFuZGxlZCBi
eSBudW1iZXJUb1N0cmluZy4KICAgICBBU1NFUlQoc3RkOjppc2Zpbml0ZSh4KSk7CiAKLSAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKGV4ZWMsIFN0cmluZzo6bnVtYmVyVG9TdHJp
bmdGaXhlZFdpZHRoKHgsIGRlY2ltYWxQbGFjZXMpKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1N0cmluZyh2bSwgU3RyaW5nOjpudW1iZXJUb1N0cmluZ0ZpeGVkV2lkdGgoeCwgZGVj
aW1hbFBsYWNlcykpKTsKIH0KIAogLy8gdG9QcmVjaXNpb24gY29udmVydHMgYSBudW1iZXIgdG8g
YSBzdHJpbmcsIHRha2luZyBhbiBhcmd1bWVudCBzcGVjaWZ5aW5nIGEKQEAgLTQ5NiwxNiArNDk2
LDE2IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbnVtYmVyUHJvdG8KIAogICAgIC8v
IFRvIHByZWNpc2lvbiBjYWxsZWQgd2l0aCBubyBhcmd1bWVudCBpcyB0cmVhdGVkIGFzIFRvU3Ry
aW5nLgogICAgIGlmIChpc1VuZGVmaW5lZCkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1N0cmluZyhleGVjLCBTdHJpbmc6Om51bWJlcih4KSkpOworICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKHZtLCBTdHJpbmc6Om51bWJlcih4KSkpOwogCiAgICAgLy8g
SGFuZGxlIE5hTiBhbmQgSW5maW5pdHkuCiAgICAgaWYgKCFzdGQ6OmlzZmluaXRlKHgpKQotICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTm9udHJpdmlhbFN0cmluZyhleGVjLCBTdHJp
bmc6Om51bWJlcih4KSkpOworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTm9udHJp
dmlhbFN0cmluZyh2bSwgU3RyaW5nOjpudW1iZXIoeCkpKTsKIAogICAgIGlmICghaW5SYW5nZSkK
ICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBzY29wZSwgY3JlYXRlUmFuZ2VFcnJv
cihleGVjLCAidG9QcmVjaXNpb24oKSBhcmd1bWVudCBtdXN0IGJlIGJldHdlZW4gMSBhbmQgMjEi
X3MpKTsKIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcoZXhlYywgU3RyaW5n
OjpudW1iZXJUb1N0cmluZ0ZpeGVkUHJlY2lzaW9uKHgsIHNpZ25pZmljYW50RmlndXJlcywgS2Vl
cFRyYWlsaW5nWmVyb3MpKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyh2
bSwgU3RyaW5nOjpudW1iZXJUb1N0cmluZ0ZpeGVkUHJlY2lzaW9uKHgsIHNpZ25pZmljYW50Rmln
dXJlcywgS2VlcFRyYWlsaW5nWmVyb3MpKSk7CiB9CiAKIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpT
U3RyaW5nKiBpbnQzMlRvU3RyaW5nSW50ZXJuYWwoVk0mIHZtLCBpbnQzMl90IHZhbHVlLCBpbnQz
Ml90IHJhZGl4KQpAQCAtNTE5LDkgKzUxOSw5IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpTU3Ry
aW5nKiBpbnQzMlRvU3QKICAgICB9CiAKICAgICBpZiAocmFkaXggPT0gMTApCi0gICAgICAgIHJl
dHVybiBqc05vbnRyaXZpYWxTdHJpbmcoJnZtLCB2bS5udW1lcmljU3RyaW5ncy5hZGQodmFsdWUp
KTsKKyAgICAgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyh2bSwgdm0ubnVtZXJpY1N0cmlu
Z3MuYWRkKHZhbHVlKSk7CiAKLSAgICByZXR1cm4ganNOb250cml2aWFsU3RyaW5nKCZ2bSwgdG9T
dHJpbmdXaXRoUmFkaXhJbnRlcm5hbCh2YWx1ZSwgcmFkaXgpKTsKKyAgICByZXR1cm4ganNOb250
cml2aWFsU3RyaW5nKHZtLCB0b1N0cmluZ1dpdGhSYWRpeEludGVybmFsKHZhbHVlLCByYWRpeCkp
OwogCiB9CiAKQEAgLTUzNCwxMyArNTM0LDEzIEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpTU3Ry
aW5nKiBudW1iZXJUb1MKICAgICAgICAgcmV0dXJuIGludDMyVG9TdHJpbmdJbnRlcm5hbCh2bSwg
aW50ZWdlclZhbHVlLCByYWRpeCk7CiAKICAgICBpZiAocmFkaXggPT0gMTApCi0gICAgICAgIHJl
dHVybiBqc1N0cmluZygmdm0sIHZtLm51bWVyaWNTdHJpbmdzLmFkZChkb3VibGVWYWx1ZSkpOwor
ICAgICAgICByZXR1cm4ganNTdHJpbmcodm0sIHZtLm51bWVyaWNTdHJpbmdzLmFkZChkb3VibGVW
YWx1ZSkpOwogCiAgICAgaWYgKCFzdGQ6OmlzZmluaXRlKGRvdWJsZVZhbHVlKSkKLSAgICAgICAg
cmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZygmdm0sIFN0cmluZzo6bnVtYmVyKGRvdWJsZVZhbHVl
KSk7CisgICAgICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcodm0sIFN0cmluZzo6bnVtYmVy
KGRvdWJsZVZhbHVlKSk7CiAKICAgICBSYWRpeEJ1ZmZlciBidWZmZXI7Ci0gICAgcmV0dXJuIGpz
U3RyaW5nKCZ2bSwgdG9TdHJpbmdXaXRoUmFkaXhJbnRlcm5hbChidWZmZXIsIGRvdWJsZVZhbHVl
LCByYWRpeCkpOworICAgIHJldHVybiBqc1N0cmluZyh2bSwgdG9TdHJpbmdXaXRoUmFkaXhJbnRl
cm5hbChidWZmZXIsIGRvdWJsZVZhbHVlLCByYWRpeCkpOwogfQogCiBKU1N0cmluZyogaW50MzJU
b1N0cmluZyhWTSYgdm0sIGludDMyX3QgdmFsdWUsIGludDMyX3QgcmFkaXgpCkBAIC01NTksNyAr
NTU5LDcgQEAgSlNTdHJpbmcqIGludDUyVG9TdHJpbmcoVk0mIHZtLCBpbnQ2NF90IAogICAgIH0K
IAogICAgIGlmIChyYWRpeCA9PSAxMCkKLSAgICAgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmlu
Zygmdm0sIHZtLm51bWVyaWNTdHJpbmdzLmFkZChzdGF0aWNfY2FzdDxkb3VibGU+KHZhbHVlKSkp
OworICAgICAgICByZXR1cm4ganNOb250cml2aWFsU3RyaW5nKHZtLCB2bS5udW1lcmljU3RyaW5n
cy5hZGQoc3RhdGljX2Nhc3Q8ZG91YmxlPih2YWx1ZSkpKTsKIAogICAgIC8vIFBvc2l0aW9uIHRo
ZSBkZWNpbWFsIHBvaW50IGF0IHRoZSBjZW50ZXIgb2YgdGhlIHN0cmluZywgc2V0CiAgICAgLy8g
dGhlIHN0YXJ0T2ZSZXN1bHRTdHJpbmcgcG9pbnRlciB0byBwb2ludCBhdCB0aGUgZGVjaW1hbCBw
b2ludC4KQEAgLTU2OCw3ICs1NjgsNyBAQCBKU1N0cmluZyogaW50NTJUb1N0cmluZyhWTSYgdm0s
IGludDY0X3QgCiAgICAgY2hhciogc3RhcnRPZlJlc3VsdFN0cmluZyA9IGRlY2ltYWxQb2ludDsK
ICAgICAqZGVjaW1hbFBvaW50ID0gJ1wwJzsKIAotICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJp
bmcoJnZtLCBpbnQ1MlRvU3RyaW5nV2l0aFJhZGl4KHN0YXJ0T2ZSZXN1bHRTdHJpbmcsIHZhbHVl
LCByYWRpeCkpOworICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcodm0sIGludDUyVG9TdHJp
bmdXaXRoUmFkaXgoc3RhcnRPZlJlc3VsdFN0cmluZywgdmFsdWUsIHJhZGl4KSk7CiB9CiAKIEpT
U3RyaW5nKiBudW1iZXJUb1N0cmluZyhWTSYgdm0sIGRvdWJsZSBkb3VibGVWYWx1ZSwgaW50MzJf
dCByYWRpeCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdENvbnN0
cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9P
YmplY3RDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVu
IChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4LTIwMTkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtMjA0LDcg
KzIwNCw3IEBAIEpTVmFsdWUgb2JqZWN0Q29uc3RydWN0b3JHZXRPd25Qcm9wZXJ0eUQKIHsKICAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKLSAgICBQcm9wZXJ0eU5hbWVBcnJheSBwcm9wZXJ0aWVzKCZ2bSwgUHJvcGVydHlO
YW1lTW9kZTo6U3RyaW5nc0FuZFN5bWJvbHMsIFByaXZhdGVTeW1ib2xNb2RlOjpFeGNsdWRlKTsK
KyAgICBQcm9wZXJ0eU5hbWVBcnJheSBwcm9wZXJ0aWVzKHZtLCBQcm9wZXJ0eU5hbWVNb2RlOjpT
dHJpbmdzQW5kU3ltYm9scywgUHJpdmF0ZVN5bWJvbE1vZGU6OkV4Y2x1ZGUpOwogICAgIG9iamVj
dC0+bWV0aG9kVGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgZXhlYywgcHJv
cGVydGllcywgRW51bWVyYXRpb25Nb2RlKERvbnRFbnVtUHJvcGVydGllc01vZGU6OkluY2x1ZGUp
KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCkBAIC0zNzMsNyArMzcz
LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdAogICAgICAgICAv
LyBGb3IgZXhhbXBsZSwgW1tHZXRdXSBvZiBzb3VyY2Ugb2JqZWN0IGNvdWxkIGNvbmZpZ3VyZSBz
ZXR0ZXIgdG8gdGFyZ2V0IG9iamVjdC4gU28gZGlzYWJsZSB0aGUgZmFzdCBwYXRoLgogICAgICAg
ICB0YXJnZXRDYW5QZXJmb3JtRmFzdFB1dCA9IGZhbHNlOwogCi0gICAgICAgIFByb3BlcnR5TmFt
ZUFycmF5IHByb3BlcnRpZXMoJnZtLCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzQW5kU3ltYm9s
cywgUHJpdmF0ZVN5bWJvbE1vZGU6OkV4Y2x1ZGUpOworICAgICAgICBQcm9wZXJ0eU5hbWVBcnJh
eSBwcm9wZXJ0aWVzKHZtLCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzQW5kU3ltYm9scywgUHJp
dmF0ZVN5bWJvbE1vZGU6OkV4Y2x1ZGUpOwogICAgICAgICBzb3VyY2UtPm1ldGhvZFRhYmxlKHZt
KS0+Z2V0T3duUHJvcGVydHlOYW1lcyhzb3VyY2UsIGV4ZWMsIHByb3BlcnRpZXMsIEVudW1lcmF0
aW9uTW9kZShEb250RW51bVByb3BlcnRpZXNNb2RlOjpJbmNsdWRlKSk7CiAgICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKQEAgLTQ0MCw3ICs0NDAsNyBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0CiAgICAgSlNBcnJheSogdmFsdWVzID0g
Y29uc3RydWN0RW1wdHlBcnJheShleGVjLCBudWxscHRyKTsKICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCB7IH0pOwogCi0gICAgUHJvcGVydHlOYW1lQXJyYXkgcHJvcGVydGllcygmdm0s
IFByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3MsIFByaXZhdGVTeW1ib2xNb2RlOjpFeGNsdWRlKTsK
KyAgICBQcm9wZXJ0eU5hbWVBcnJheSBwcm9wZXJ0aWVzKHZtLCBQcm9wZXJ0eU5hbWVNb2RlOjpT
dHJpbmdzLCBQcml2YXRlU3ltYm9sTW9kZTo6RXhjbHVkZSk7CiAgICAgdGFyZ2V0LT5tZXRob2RU
YWJsZSh2bSktPmdldE93blByb3BlcnR5TmFtZXModGFyZ2V0LCBleGVjLCBwcm9wZXJ0aWVzLCBF
bnVtZXJhdGlvbk1vZGUoRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6SW5jbHVkZSkpOwogICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKQEAgLTYwMCw3ICs2MDAsNyBAQCBzdGF0
aWMgSlNWYWx1ZSBkZWZpbmVQcm9wZXJ0aWVzKEV4ZWNTdGF0CiAgICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAgICBQ
cm9wZXJ0eU5hbWVBcnJheSBwcm9wZXJ0eU5hbWVzKCZ2bSwgUHJvcGVydHlOYW1lTW9kZTo6U3Ry
aW5nc0FuZFN5bWJvbHMsIFByaXZhdGVTeW1ib2xNb2RlOjpFeGNsdWRlKTsKKyAgICBQcm9wZXJ0
eU5hbWVBcnJheSBwcm9wZXJ0eU5hbWVzKHZtLCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzQW5k
U3ltYm9scywgUHJpdmF0ZVN5bWJvbE1vZGU6OkV4Y2x1ZGUpOwogICAgIGFzT2JqZWN0KHByb3Bl
cnRpZXMpLT5tZXRob2RUYWJsZSh2bSktPmdldE93blByb3BlcnR5TmFtZXMoYXNPYmplY3QocHJv
cGVydGllcyksIGV4ZWMsIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZShEb250RW51bVBy
b3BlcnRpZXNNb2RlOjpFeGNsdWRlKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
eyB9KTsKICAgICBzaXplX3QgbnVtUHJvcGVydGllcyA9IHByb3BlcnR5TmFtZXMuc2l6ZSgpOwpA
QCAtNjkxLDcgKzY5MSw3IEBAIGJvb2wgc2V0SW50ZWdyaXR5TGV2ZWwoRXhlY1N0YXRlKiBleGVj
LCAKICAgICBpZiAoVU5MSUtFTFkoIXN1Y2Nlc3MpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LSAgICBQcm9wZXJ0eU5hbWVBcnJheSBwcm9wZXJ0aWVzKCZ2bSwgUHJvcGVydHlOYW1lTW9kZTo6
U3RyaW5nc0FuZFN5bWJvbHMsIFByaXZhdGVTeW1ib2xNb2RlOjpFeGNsdWRlKTsKKyAgICBQcm9w
ZXJ0eU5hbWVBcnJheSBwcm9wZXJ0aWVzKHZtLCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzQW5k
U3ltYm9scywgUHJpdmF0ZVN5bWJvbE1vZGU6OkV4Y2x1ZGUpOwogICAgIG9iamVjdC0+bWV0aG9k
VGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgZXhlYywgcHJvcGVydGllcywg
RW51bWVyYXRpb25Nb2RlKERvbnRFbnVtUHJvcGVydGllc01vZGU6OkluY2x1ZGUpKTsKICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7CiAKQEAgLTczOCw3ICs3MzgsNyBAQCBi
b29sIHRlc3RJbnRlZ3JpdHlMZXZlbChFeGVjU3RhdGUqIGV4ZWMsCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAogICAgIC8vIDYuIExldCBrZXlzIGJlID8gTy5bW093blByb3BlcnR5S2V5c11dKCku
Ci0gICAgUHJvcGVydHlOYW1lQXJyYXkga2V5cygmdm0sIFByb3BlcnR5TmFtZU1vZGU6OlN0cmlu
Z3NBbmRTeW1ib2xzLCBQcml2YXRlU3ltYm9sTW9kZTo6RXhjbHVkZSk7CisgICAgUHJvcGVydHlO
YW1lQXJyYXkga2V5cyh2bSwgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5nc0FuZFN5bWJvbHMsIFBy
aXZhdGVTeW1ib2xNb2RlOjpFeGNsdWRlKTsKICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+
Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIGV4ZWMsIGtleXMsIEVudW1lcmF0aW9uTW9kZShE
b250RW51bVByb3BlcnRpZXNNb2RlOjpJbmNsdWRlKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgeyB9KTsKIApAQCAtOTE3LDcgKzkxNyw3IEBAIEpTQXJyYXkqIG93blByb3BlcnR5
S2V5cyhFeGVjU3RhdGUqIGV4ZWMKICAgICAgICAgfQogICAgIH0KIAotICAgIFByb3BlcnR5TmFt
ZUFycmF5IHByb3BlcnRpZXMoJnZtLCBwcm9wZXJ0eU5hbWVNb2RlLCBQcml2YXRlU3ltYm9sTW9k
ZTo6RXhjbHVkZSk7CisgICAgUHJvcGVydHlOYW1lQXJyYXkgcHJvcGVydGllcyh2bSwgcHJvcGVy
dHlOYW1lTW9kZSwgUHJpdmF0ZVN5bWJvbE1vZGU6OkV4Y2x1ZGUpOwogICAgIG9iamVjdC0+bWV0
aG9kVGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgZXhlYywgcHJvcGVydGll
cywgRW51bWVyYXRpb25Nb2RlKGRvbnRFbnVtUHJvcGVydGllc01vZGUpKTsKICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKIApAQCAtOTM1LDcgKzkzNSw3IEBAIEpTQXJy
YXkqIG93blByb3BlcnR5S2V5cyhFeGVjU3RhdGUqIGV4ZWMKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bVByb3BlcnRpZXM7IGkrKykgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhdXRvJiBpZGVudGlmaWVyID0gcHJv
cGVydGllc1tpXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFpZGVu
dGlmaWVyLmlzU3ltYm9sKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdC
dXR0ZXJmbHktPnNldEluZGV4KHZtLCBpLCBqc093bmVkU3RyaW5nKCZ2bSwgaWRlbnRpZmllci5z
dHJpbmcoKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdCdXR0ZXJmbHkt
PnNldEluZGV4KHZtLCBpLCBqc093bmVkU3RyaW5nKHZtLCBpZGVudGlmaWVyLnN0cmluZygpKSk7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3RydWN0dXJlLT5zZXRDYWNoZWRPd25LZXlzKHZtLCBuZXdCdXR0ZXJmbHkpOwpAQCAt
OTU1LDcgKzk1NSw3IEBAIEpTQXJyYXkqIG93blByb3BlcnR5S2V5cyhFeGVjU3RhdGUqIGV4ZWMK
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgYXV0byYgaWRlbnRpZmllciA9IHByb3BlcnRpZXNb
aV07CiAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0eU5hbWVNb2RlID09IFByb3BlcnR5
TmFtZU1vZGU6OlN0cmluZ3MpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghaWRl
bnRpZmllci5pc1N5bWJvbCgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcltpXS5z
ZXQodm0sIGtleXMsIGpzT3duZWRTdHJpbmcoJnZtLCBpZGVudGlmaWVyLnN0cmluZygpKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJbaV0uc2V0KHZtLCBrZXlzLCBqc093bmVkU3Ry
aW5nKHZtLCBpZGVudGlmaWVyLnN0cmluZygpKSk7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxz
ZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoaWRlbnRpZmllci5pc1N5bWJvbCgp
KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcltpXS5zZXQodm0sIGtleXMsIFN5bWJv
bDo6Y3JlYXRlKHZtLCBzdGF0aWNfY2FzdDxTeW1ib2xJbXBsJj4oKmlkZW50aWZpZXIuaW1wbCgp
KSkpOwpAQCAtOTgwLDcgKzk4MCw3IEBAIEpTQXJyYXkqIG93blByb3BlcnR5S2V5cyhFeGVjU3Rh
dGUqIGV4ZWMKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1Qcm9wZXJ0aWVzOyBp
KyspIHsKICAgICAgICAgICAgIGNvbnN0IGF1dG8mIGlkZW50aWZpZXIgPSBwcm9wZXJ0aWVzW2ld
OwogICAgICAgICAgICAgQVNTRVJUKCFpZGVudGlmaWVyLmlzU3ltYm9sKCkpOwotICAgICAgICAg
ICAgcHVzaERpcmVjdChleGVjLCBrZXlzLCBqc093bmVkU3RyaW5nKGV4ZWMsIGlkZW50aWZpZXIu
c3RyaW5nKCkpKTsKKyAgICAgICAgICAgIHB1c2hEaXJlY3QoZXhlYywga2V5cywganNPd25lZFN0
cmluZyh2bSwgaWRlbnRpZmllci5zdHJpbmcoKSkpOwogICAgICAgICAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CkBAIC0x
MDA5LDcgKzEwMDksNyBAQCBKU0FycmF5KiBvd25Qcm9wZXJ0eUtleXMoRXhlY1N0YXRlKiBleGVj
CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
IHB1c2hEaXJlY3QoZXhlYywga2V5cywganNPd25lZFN0cmluZyhleGVjLCBpZGVudGlmaWVyLnN0
cmluZygpKSk7CisgICAgICAgICAgICBwdXNoRGlyZWN0KGV4ZWMsIGtleXMsIGpzT3duZWRTdHJp
bmcodm0sIGlkZW50aWZpZXIuc3RyaW5nKCkpKTsKICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIG51bGxwdHIpOwogICAgICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL09iamVjdFByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjQ5
MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAx
OTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmlnaHQgKEMp
IDIwMDgtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0
IChDKSAyMDA4LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYwpAQCAtMzQ0LDcgKzM0NCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgb2JqZWN0UHJvdG8KICAgICAgICAgaWYgKCFuZXdTdHJpbmcpCiAgICAgICAgICAgICByZXR1
cm4gdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMsIHNjb3BlKTsKIAotICAgICAgICBhdXRvIHJl
c3VsdCA9IGpzTm9udHJpdmlhbFN0cmluZygmdm0sIG5ld1N0cmluZyk7CisgICAgICAgIGF1dG8g
cmVzdWx0ID0ganNOb250cml2aWFsU3RyaW5nKHZtLCBuZXdTdHJpbmcpOwogICAgICAgICB0aGlz
T2JqZWN0LT5zdHJ1Y3R1cmUodm0pLT5zZXRPYmplY3RUb1N0cmluZ1ZhbHVlKGV4ZWMsIHZtLCBy
ZXN1bHQsIHRvU3RyaW5nVGFnU2xvdCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfSkp
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wZXJhdGlvbnMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcGVyYXRpb25zLmgJKHJl
dmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wZXJhdGlv
bnMuaAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBAQCBBTFdBWVNfSU5MSU5FIEpTU3Ry
aW5nKiBqc1N0cmluZyhFeGVjU3RhCiAgICAgICAgIHJldHVybiBzMjsKICAgICB1bnNpZ25lZCBs
ZW5ndGgyID0gczItPmxlbmd0aCgpOwogICAgIGlmICghbGVuZ3RoMikKLSAgICAgICAgcmV0dXJu
IGpzU3RyaW5nKCZ2bSwgdTEpOworICAgICAgICByZXR1cm4ganNTdHJpbmcodm0sIHUxKTsKICAg
ICBzdGF0aWNfYXNzZXJ0KEpTU3RyaW5nOjpNYXhMZW5ndGggPT0gc3RkOjpudW1lcmljX2xpbWl0
czxpbnQzMl90Pjo6bWF4KCksICIiKTsKICAgICBpZiAoc3VtT3ZlcmZsb3dzPGludDMyX3Q+KGxl
bmd0aDEsIGxlbmd0aDIpKSB7CiAgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjLCBz
Y29wZSk7CkBAIC02MCw3ICs2MCw3IEBAIEFMV0FZU19JTkxJTkUgSlNTdHJpbmcqIGpzU3RyaW5n
KEV4ZWNTdGEKICAgICAvLyBXZSBjb25zZXJ2YXRpdmVseSBjb25zaWRlciB0aGUgY29zdCBvZiB1
MS4gQ3VycmVudGx5LCB3ZSBhcmUgbm90IGNvbnNpZGVyaW5nIGFib3V0IGlzOEJpdCgpIGNhc2Ug
YmVjYXVzZSAxNi1iaXQKICAgICAvLyBzdHJpbmdzIGFyZSByZWxhdGl2ZWx5IHJhcmUuIEJ1dCB3
ZSBjYW4gZG8gdGhhdCBpZiB3ZSBuZWVkIHRvIGNvbnNpZGVyIGl0LgogICAgIGlmIChzMi0+aXNS
b3BlKCkgfHwgKFN0cmluZ0ltcGw6OmhlYWRlclNpemU8TENoYXI+KCkgKyBsZW5ndGgxICsgbGVu
Z3RoMikgPj0gc2l6ZW9mKEpTUm9wZVN0cmluZykpCi0gICAgICAgIHJldHVybiBKU1JvcGVTdHJp
bmc6OmNyZWF0ZSh2bSwganNTdHJpbmcoJnZtLCB1MSksIHMyKTsKKyAgICAgICAgcmV0dXJuIEpT
Um9wZVN0cmluZzo6Y3JlYXRlKHZtLCBqc1N0cmluZyh2bSwgdTEpLCBzMik7CiAKICAgICBBU1NF
UlQoIXMyLT5pc1JvcGUoKSk7CiAgICAgY29uc3QgU3RyaW5nJiB1MiA9IHMyLT52YWx1ZShleGVj
KTsKQEAgLTgwLDcgKzgwLDcgQEAgQUxXQVlTX0lOTElORSBKU1N0cmluZyoganNTdHJpbmcoRXhl
Y1N0YQogCiAgICAgdW5zaWduZWQgbGVuZ3RoMSA9IHMxLT5sZW5ndGgoKTsKICAgICBpZiAoIWxl
bmd0aDEpCi0gICAgICAgIHJldHVybiBqc1N0cmluZygmdm0sIHUyKTsKKyAgICAgICAgcmV0dXJu
IGpzU3RyaW5nKHZtLCB1Mik7CiAgICAgdW5zaWduZWQgbGVuZ3RoMiA9IHUyLmxlbmd0aCgpOwog
ICAgIGlmICghbGVuZ3RoMikKICAgICAgICAgcmV0dXJuIHMxOwpAQCAtOTMsNyArOTMsNyBAQCBB
TFdBWVNfSU5MSU5FIEpTU3RyaW5nKiBqc1N0cmluZyhFeGVjU3RhCiAgICAgLy8gKDEpIENvc3Qg
b2YgbWFraW5nIEpTU3RyaW5nICAgIDogc2l6ZW9mKEpTU3RyaW5nKSAoZm9yIG5ldyBzdHJpbmcp
ICsgc2l6ZW9mKFN0cmluZ0ltcGwgaGVhZGVyKSArIGxlbmd0aDEgKyBsZW5ndGgyCiAgICAgLy8g
KDIpIENvc3Qgb2YgbWFraW5nIEpTUm9wZVN0cmluZzogc2l6ZW9mKEpTU3RyaW5nKSAoZm9yIHUy
KSArIHNpemVvZihKU1JvcGVTdHJpbmcpCiAgICAgaWYgKHMxLT5pc1JvcGUoKSB8fCAoU3RyaW5n
SW1wbDo6aGVhZGVyU2l6ZTxMQ2hhcj4oKSArIGxlbmd0aDEgKyBsZW5ndGgyKSA+PSBzaXplb2Yo
SlNSb3BlU3RyaW5nKSkKLSAgICAgICAgcmV0dXJuIEpTUm9wZVN0cmluZzo6Y3JlYXRlKHZtLCBz
MSwganNTdHJpbmcoJnZtLCB1MikpOworICAgICAgICByZXR1cm4gSlNSb3BlU3RyaW5nOjpjcmVh
dGUodm0sIHMxLCBqc1N0cmluZyh2bSwgdTIpKTsKIAogICAgIEFTU0VSVCghczEtPmlzUm9wZSgp
KTsKICAgICBjb25zdCBTdHJpbmcmIHUxID0gczEtPnZhbHVlKGV4ZWMpOwpAQCAtMTU5LDEwICsx
NTksMTAgQEAgQUxXQVlTX0lOTElORSBKU1N0cmluZyoganNTdHJpbmcoRXhlY1N0YQogCiAgICAg
dW5zaWduZWQgbGVuZ3RoMSA9IHUxLmxlbmd0aCgpOwogICAgIGlmICghbGVuZ3RoMSkKLSAgICAg
ICAgcmV0dXJuIGpzU3RyaW5nKCZ2bSwgdTIpOworICAgICAgICByZXR1cm4ganNTdHJpbmcodm0s
IHUyKTsKICAgICB1bnNpZ25lZCBsZW5ndGgyID0gdTIubGVuZ3RoKCk7CiAgICAgaWYgKCFsZW5n
dGgyKQotICAgICAgICByZXR1cm4ganNTdHJpbmcoJnZtLCB1MSk7CisgICAgICAgIHJldHVybiBq
c1N0cmluZyh2bSwgdTEpOwogICAgIHN0YXRpY19hc3NlcnQoSlNTdHJpbmc6Ok1heExlbmd0aCA9
PSBzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptYXgoKSwgIiIpOwogICAgIGlmIChzdW1P
dmVyZmxvd3M8aW50MzJfdD4obGVuZ3RoMSwgbGVuZ3RoMikpIHsKICAgICAgICAgdGhyb3dPdXRP
Zk1lbW9yeUVycm9yKGV4ZWMsIHNjb3BlKTsKQEAgLTE3Miw3ICsxNzIsNyBAQCBBTFdBWVNfSU5M
SU5FIEpTU3RyaW5nKiBqc1N0cmluZyhFeGVjU3RhCiAgICAgLy8gKDEpIENvc3Qgb2YgbWFraW5n
IEpTU3RyaW5nICAgIDogc2l6ZW9mKEpTU3RyaW5nKSAoZm9yIG5ldyBzdHJpbmcpICsgc2l6ZW9m
KFN0cmluZ0ltcGwgaGVhZGVyKSArIGxlbmd0aDEgKyBsZW5ndGgyCiAgICAgLy8gKDIpIENvc3Qg
b2YgbWFraW5nIEpTUm9wZVN0cmluZzogc2l6ZW9mKEpTU3RyaW5nKSAoZm9yIHUxKSArIHNpemVv
ZihKU1N0cmluZykgKGZvciB1MikgKyBzaXplb2YoSlNSb3BlU3RyaW5nKQogICAgIGlmICgoU3Ry
aW5nSW1wbDo6aGVhZGVyU2l6ZTxMQ2hhcj4oKSArIGxlbmd0aDEgKyBsZW5ndGgyKSA+PSAoc2l6
ZW9mKEpTUm9wZVN0cmluZykgKyBzaXplb2YoSlNTdHJpbmcpKSkKLSAgICAgICAgcmV0dXJuIEpT
Um9wZVN0cmluZzo6Y3JlYXRlKHZtLCBqc1N0cmluZygmdm0sIHUxKSwganNTdHJpbmcoJnZtLCB1
MikpOworICAgICAgICByZXR1cm4gSlNSb3BlU3RyaW5nOjpjcmVhdGUodm0sIGpzU3RyaW5nKHZt
LCB1MSksIGpzU3RyaW5nKHZtLCB1MikpOwogCiAgICAgU3RyaW5nIG5ld1N0cmluZyA9IHRyeU1h
a2VTdHJpbmcodTEsIHUyKTsKICAgICBpZiAoIW5ld1N0cmluZykgewpAQCAtMTg0LDggKzE4NCw4
IEBAIEFMV0FZU19JTkxJTkUgSlNTdHJpbmcqIGpzU3RyaW5nKEV4ZWNTdGEKIAogQUxXQVlTX0lO
TElORSBKU1N0cmluZyoganNTdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcmIHUx
LCBjb25zdCBTdHJpbmcmIHUyLCBjb25zdCBTdHJpbmcmIHUzKQogewotICAgIFZNKiB2bSA9ICZl
eGVjLT52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7Cisg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAKICAgICB1bnNpZ25lZCBsZW5ndGgxID0gdTEubGVuZ3RoKCk7CiAgICAgdW5z
aWduZWQgbGVuZ3RoMiA9IHUyLmxlbmd0aCgpOwpAQCAtMjEyLDIxICsyMTIsMjEgQEAgQUxXQVlT
X0lOTElORSBKU1N0cmluZyoganNTdHJpbmcoRXhlY1N0YQogICAgIC8vICgxKSBDb3N0IG9mIG1h
a2luZyBKU1N0cmluZyAgICA6IHNpemVvZihKU1N0cmluZykgKGZvciBuZXcgc3RyaW5nKSArIHNp
emVvZihTdHJpbmdJbXBsIGhlYWRlcikgKyBsZW5ndGgxICsgbGVuZ3RoMiArIGxlbmd0aDMKICAg
ICAvLyAoMikgQ29zdCBvZiBtYWtpbmcgSlNSb3BlU3RyaW5nOiBzaXplb2YoSlNTdHJpbmcpIChm
b3IgdTEpICsgc2l6ZW9mKEpTU3RyaW5nKSAoZm9yIHUyKSArIHNpemVvZihKU1N0cmluZykgKGZv
ciB1MykgKyBzaXplb2YoSlNSb3BlU3RyaW5nKQogICAgIGlmICgoU3RyaW5nSW1wbDo6aGVhZGVy
U2l6ZTxMQ2hhcj4oKSArIGxlbmd0aDEgKyBsZW5ndGgyICsgbGVuZ3RoMykgPj0gKHNpemVvZihK
U1JvcGVTdHJpbmcpICsgc2l6ZW9mKEpTU3RyaW5nKSAqIDIpKQotICAgICAgICByZXR1cm4gSlNS
b3BlU3RyaW5nOjpjcmVhdGUoKnZtLCBqc1N0cmluZyh2bSwgdTEpLCBqc1N0cmluZyh2bSwgdTIp
LCBqc1N0cmluZyh2bSwgdTMpKTsKKyAgICAgICAgcmV0dXJuIEpTUm9wZVN0cmluZzo6Y3JlYXRl
KHZtLCBqc1N0cmluZyh2bSwgdTEpLCBqc1N0cmluZyh2bSwgdTIpLCBqc1N0cmluZyh2bSwgdTMp
KTsKIAogICAgIFN0cmluZyBuZXdTdHJpbmcgPSB0cnlNYWtlU3RyaW5nKHUxLCB1MiwgdTMpOwog
ICAgIGlmICghbmV3U3RyaW5nKSB7CiAgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVj
LCBzY29wZSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KLSAgICByZXR1cm4gSlNT
dHJpbmc6OmNyZWF0ZSgqdm0sIG5ld1N0cmluZy5yZWxlYXNlSW1wbCgpLnJlbGVhc2VOb25OdWxs
KCkpOworICAgIHJldHVybiBKU1N0cmluZzo6Y3JlYXRlKHZtLCBuZXdTdHJpbmcucmVsZWFzZUlt
cGwoKS5yZWxlYXNlTm9uTnVsbCgpKTsKIH0KIAogQUxXQVlTX0lOTElORSBKU1ZhbHVlIGpzU3Ry
aW5nRnJvbVJlZ2lzdGVyQXJyYXkoRXhlY1N0YXRlKiBleGVjLCBSZWdpc3Rlciogc3RyaW5ncywg
dW5zaWduZWQgY291bnQpCiB7Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKLSAgICBKU1JvcGVTdHJpbmc6OlJvcGVC
dWlsZGVyPFJlY29yZE92ZXJmbG93PiByb3BlQnVpbGRlcigqdm0pOworICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAg
IEpTUm9wZVN0cmluZzo6Um9wZUJ1aWxkZXI8UmVjb3JkT3ZlcmZsb3c+IHJvcGVCdWlsZGVyKHZt
KTsKIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CiAgICAgICAg
IEpTVmFsdWUgdiA9IHN0cmluZ3NbLXN0YXRpY19jYXN0PGludD4oaSldLmpzVmFsdWUoKTsKQEAg
LTI0MSw5ICsyNDEsOSBAQCBBTFdBWVNfSU5MSU5FIEpTVmFsdWUganNTdHJpbmdGcm9tUmVnaXN0
CiAKIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBqc1N0cmluZ0Zyb21Bcmd1bWVudHMoRXhlY1N0YXRl
KiBleGVjLCBKU1ZhbHVlIHRoaXNWYWx1ZSkKIHsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsK
LSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSgqdm0pOwotICAgIEpTUm9wZVN0
cmluZzo6Um9wZUJ1aWxkZXI8UmVjb3JkT3ZlcmZsb3c+IHJvcGVCdWlsZGVyKCp2bSk7CisgICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CisgICAgSlNSb3BlU3RyaW5nOjpSb3BlQnVpbGRlcjxSZWNvcmRPdmVyZmxvdz4gcm9w
ZUJ1aWxkZXIodm0pOwogICAgIEpTU3RyaW5nKiBzdHIgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhl
Yyk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICByb3BlQnVpbGRl
ci5hcHBlbmQoc3RyKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb2dy
YW1FeGVjdXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Qcm9ncmFtRXhlY3V0YWJsZS5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb2dyYW1FeGVjdXRhYmxlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTc5LDcgKzE3OSw3IEBAIEpTT2JqZWN0KiBQcm9ncmFtRXhlY3V0YWJsZTo6aW5pdGlh
bGl6ZUcKIAogICAgIGZvciAoYXV0byYgZW50cnkgOiB2YXJpYWJsZURlY2xhcmF0aW9ucykgewog
ICAgICAgICBBU1NFUlQoZW50cnkudmFsdWUuaXNWYXIoKSk7Ci0gICAgICAgIGdsb2JhbE9iamVj
dC0+YWRkVmFyKGNhbGxGcmFtZSwgSWRlbnRpZmllcjo6ZnJvbVVpZCgmdm0sIGVudHJ5LmtleS5n
ZXQoKSkpOworICAgICAgICBnbG9iYWxPYmplY3QtPmFkZFZhcihjYWxsRnJhbWUsIElkZW50aWZp
ZXI6OmZyb21VaWQodm0sIGVudHJ5LmtleS5nZXQoKSkpOwogICAgICAgICB0aHJvd1Njb3BlLmFz
c2VydE5vRXhjZXB0aW9uKCk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Qcm9taXNlRGVmZXJyZWRUaW1lci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvbWlzZURlZmVycmVkVGltZXIuY3BwCShyZXZpc2lvbiAy
NDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9taXNlRGVmZXJyZWRU
aW1lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDE3LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE3LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zOSw3ICszOSw3IEBAIHN0YXRpYyBjb25zdCBi
b29sIHZlcmJvc2UgPSBmYWxzZTsKIH0KIAogUHJvbWlzZURlZmVycmVkVGltZXI6OlByb21pc2VE
ZWZlcnJlZFRpbWVyKFZNJiB2bSkKLSAgICA6IEJhc2UoJnZtKQorICAgIDogQmFzZSh2bSkKIHsK
IH0KIApAQCAtMTIxLDEzICsxMjEsMTMgQEAgdm9pZCBQcm9taXNlRGVmZXJyZWRUaW1lcjo6YWRk
UGVuZGluZ1BybwogCiBib29sIFByb21pc2VEZWZlcnJlZFRpbWVyOjpoYXNQZW5kaW5nUHJvbWlz
ZShKU1Byb21pc2VEZWZlcnJlZCogdGlja2V0KQogewotICAgIEFTU0VSVCh0aWNrZXQtPnZtKCkt
PmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOworICAgIEFTU0VSVCh0aWNrZXQtPnZt
KCkuY3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7CiAgICAgcmV0dXJuIG1fcGVuZGlu
Z1Byb21pc2VzLmNvbnRhaW5zKHRpY2tldCk7CiB9CiAKIGJvb2wgUHJvbWlzZURlZmVycmVkVGlt
ZXI6Omhhc0RlcGVuZGFuY3lJblBlbmRpbmdQcm9taXNlKEpTUHJvbWlzZURlZmVycmVkKiB0aWNr
ZXQsIEpTQ2VsbCogZGVwZW5kZW5jeSkKIHsKLSAgICBBU1NFUlQodGlja2V0LT52bSgpLT5jdXJy
ZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsKKyAgICBBU1NFUlQodGlja2V0LT52bSgpLmN1
cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOwogICAgIEFTU0VSVChtX3BlbmRpbmdQcm9t
aXNlcy5jb250YWlucyh0aWNrZXQpKTsKIAogICAgIGF1dG8gcmVzdWx0ID0gbV9wZW5kaW5nUHJv
bWlzZXMuZ2V0KHRpY2tldCk7CkBAIC0xMzYsNyArMTM2LDcgQEAgYm9vbCBQcm9taXNlRGVmZXJy
ZWRUaW1lcjo6aGFzRGVwZW5kYW5jeQogCiBib29sIFByb21pc2VEZWZlcnJlZFRpbWVyOjpjYW5j
ZWxQZW5kaW5nUHJvbWlzZShKU1Byb21pc2VEZWZlcnJlZCogdGlja2V0KQogewotICAgIEFTU0VS
VCh0aWNrZXQtPnZtKCktPmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOworICAgIEFT
U0VSVCh0aWNrZXQtPnZtKCkuY3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7CiAgICAg
Ym9vbCByZXN1bHQgPSBtX3BlbmRpbmdQcm9taXNlcy5yZW1vdmUodGlja2V0KTsKIAogICAgIGlm
IChyZXN1bHQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eU5h
bWVBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1By
b3BlcnR5TmFtZUFycmF5LmgJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1Byb3BlcnR5TmFtZUFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogIENvcHlyaWdodCAoQykgMjAwNiwgMjAwOCwgMjAxMiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTQ3LDcg
KzQ3LDcgQEAgcHJpdmF0ZToKIC8vIEZJWE1FOiBSZW5hbWUgdG8gUHJvcGVydHlOYW1lQXJyYXlC
dWlsZGVyLgogY2xhc3MgUHJvcGVydHlOYW1lQXJyYXkgewogcHVibGljOgotICAgIFByb3BlcnR5
TmFtZUFycmF5KFZNKiB2bSwgUHJvcGVydHlOYW1lTW9kZSBwcm9wZXJ0eU5hbWVNb2RlLCBQcml2
YXRlU3ltYm9sTW9kZSBwcml2YXRlU3ltYm9sTW9kZSkKKyAgICBQcm9wZXJ0eU5hbWVBcnJheShW
TSYgdm0sIFByb3BlcnR5TmFtZU1vZGUgcHJvcGVydHlOYW1lTW9kZSwgUHJpdmF0ZVN5bWJvbE1v
ZGUgcHJpdmF0ZVN5bWJvbE1vZGUpCiAgICAgICAgIDogbV9kYXRhKFByb3BlcnR5TmFtZUFycmF5
RGF0YTo6Y3JlYXRlKCkpCiAgICAgICAgICwgbV92bSh2bSkKICAgICAgICAgLCBtX3Byb3BlcnR5
TmFtZU1vZGUocHJvcGVydHlOYW1lTW9kZSkKQEAgLTU1LDcgKzU1LDcgQEAgcHVibGljOgogICAg
IHsKICAgICB9CiAKLSAgICBWTSogdm0oKSB7IHJldHVybiBtX3ZtOyB9CisgICAgVk0mIHZtKCkg
eyByZXR1cm4gbV92bTsgfQogCiAgICAgdm9pZCBhZGQodWludDMyX3QgaW5kZXgpCiAgICAgewpA
QCAtOTEsNyArOTEsNyBAQCBwcml2YXRlOgogCiAgICAgUmVmUHRyPFByb3BlcnR5TmFtZUFycmF5
RGF0YT4gbV9kYXRhOwogICAgIEhhc2hTZXQ8VW5pcXVlZFN0cmluZ0ltcGwqPiBtX3NldDsKLSAg
ICBWTSogbV92bTsKKyAgICBWTSYgbV92bTsKICAgICBQcm9wZXJ0eU5hbWVNb2RlIG1fcHJvcGVy
dHlOYW1lTW9kZTsKICAgICBQcml2YXRlU3ltYm9sTW9kZSBtX3ByaXZhdGVTeW1ib2xNb2RlOwog
fTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5U2xvdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5U2xvdC5o
CShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9w
ZXJ0eVNsb3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiAgQ29weXJp
Z2h0IChDKSAyMDA1LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENv
cHlyaWdodCAoQykgMjAwNS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCkBAIC00MTYsMTMgKzQxNiwxNCBAQCBBTFdBWVNfSU5MSU5FIEpT
VmFsdWUgUHJvcGVydHlTbG90OjpnZXRWCiAKIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBQcm9wZXJ0
eVNsb3Q6OmdldFZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lKSBj
b25zdAogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgaWYgKG1fcHJvcGVydHlUeXBl
ID09IFR5cGVWYWx1ZSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmRlY29kZShtX2RhdGEudmFs
dWUpOwogICAgIGlmIChtX3Byb3BlcnR5VHlwZSA9PSBUeXBlR2V0dGVyKQogICAgICAgICByZXR1
cm4gZnVuY3Rpb25HZXR0ZXIoZXhlYyk7CiAgICAgaWYgKG1fcHJvcGVydHlUeXBlID09IFR5cGVD
dXN0b21BY2Nlc3NvcikKLSAgICAgICAgcmV0dXJuIGN1c3RvbUFjY2Vzc29yR2V0dGVyKGV4ZWMs
IElkZW50aWZpZXI6OmZyb20oZXhlYywgcHJvcGVydHlOYW1lKSk7Ci0gICAgcmV0dXJuIGN1c3Rv
bUdldHRlcihleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIHByb3BlcnR5TmFtZSkpOworICAg
ICAgICByZXR1cm4gY3VzdG9tQWNjZXNzb3JHZXR0ZXIoZXhlYywgSWRlbnRpZmllcjo6ZnJvbSh2
bSwgcHJvcGVydHlOYW1lKSk7CisgICAgcmV0dXJuIGN1c3RvbUdldHRlcihleGVjLCBJZGVudGlm
aWVyOjpmcm9tKHZtLCBwcm9wZXJ0eU5hbWUpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eU9iamVjdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlPYmplY3QuY3BwCShy
ZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eU9i
amVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2Niw3ICsxNjYsNyBAQCBzdGF0aWMgSlNWYWx1
ZSBwZXJmb3JtUHJveHlHZXQoRXhlY1N0YXRlCiAKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBh
cmd1bWVudHM7CiAgICAgYXJndW1lbnRzLmFwcGVuZCh0YXJnZXQpOwotICAgIGFyZ3VtZW50cy5h
cHBlbmQoaWRlbnRpZmllclRvU2FmZVB1YmxpY0pTVmFsdWUodm0sIElkZW50aWZpZXI6OmZyb21V
aWQoJnZtLCBwcm9wZXJ0eU5hbWUudWlkKCkpKSk7CisgICAgYXJndW1lbnRzLmFwcGVuZChpZGVu
dGlmaWVyVG9TYWZlUHVibGljSlNWYWx1ZSh2bSwgSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgcHJv
cGVydHlOYW1lLnVpZCgpKSkpOwogICAgIGFyZ3VtZW50cy5hcHBlbmQocmVjZWl2ZXIpOwogICAg
IEFTU0VSVCghYXJndW1lbnRzLmhhc092ZXJmbG93ZWQoKSk7CiAgICAgSlNWYWx1ZSB0cmFwUmVz
dWx0ID0gY2FsbChleGVjLCBnZXRIYW5kbGVyLCBjYWxsVHlwZSwgY2FsbERhdGEsIGhhbmRsZXIs
IGFyZ3VtZW50cyk7CkBAIC0yMzgsNyArMjM4LDcgQEAgYm9vbCBQcm94eU9iamVjdDo6cGVyZm9y
bUludGVybmFsTWV0aG9kRwogCiAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJndW1lbnRzOwog
ICAgIGFyZ3VtZW50cy5hcHBlbmQodGFyZ2V0KTsKLSAgICBhcmd1bWVudHMuYXBwZW5kKGlkZW50
aWZpZXJUb1NhZmVQdWJsaWNKU1ZhbHVlKHZtLCBJZGVudGlmaWVyOjpmcm9tVWlkKCZ2bSwgcHJv
cGVydHlOYW1lLnVpZCgpKSkpOworICAgIGFyZ3VtZW50cy5hcHBlbmQoaWRlbnRpZmllclRvU2Fm
ZVB1YmxpY0pTVmFsdWUodm0sIElkZW50aWZpZXI6OmZyb21VaWQodm0sIHByb3BlcnR5TmFtZS51
aWQoKSkpKTsKICAgICBBU1NFUlQoIWFyZ3VtZW50cy5oYXNPdmVyZmxvd2VkKCkpOwogICAgIEpT
VmFsdWUgdHJhcFJlc3VsdCA9IGNhbGwoZXhlYywgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTWV0
aG9kLCBjYWxsVHlwZSwgY2FsbERhdGEsIGhhbmRsZXIsIGFyZ3VtZW50cyk7CiAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwpAQCAtMzQ3LDcgKzM0Nyw3IEBAIGJvb2wgUHJv
eHlPYmplY3Q6OnBlcmZvcm1IYXNQcm9wZXJ0eShFeGUKIAogICAgIE1hcmtlZEFyZ3VtZW50QnVm
ZmVyIGFyZ3VtZW50czsKICAgICBhcmd1bWVudHMuYXBwZW5kKHRhcmdldCk7Ci0gICAgYXJndW1l
bnRzLmFwcGVuZChpZGVudGlmaWVyVG9TYWZlUHVibGljSlNWYWx1ZSh2bSwgSWRlbnRpZmllcjo6
ZnJvbVVpZCgmdm0sIHByb3BlcnR5TmFtZS51aWQoKSkpKTsKKyAgICBhcmd1bWVudHMuYXBwZW5k
KGlkZW50aWZpZXJUb1NhZmVQdWJsaWNKU1ZhbHVlKHZtLCBJZGVudGlmaWVyOjpmcm9tVWlkKHZt
LCBwcm9wZXJ0eU5hbWUudWlkKCkpKSk7CiAgICAgQVNTRVJUKCFhcmd1bWVudHMuaGFzT3ZlcmZs
b3dlZCgpKTsKICAgICBKU1ZhbHVlIHRyYXBSZXN1bHQgPSBjYWxsKGV4ZWMsIGhhc01ldGhvZCwg
Y2FsbFR5cGUsIGNhbGxEYXRhLCBoYW5kbGVyLCBhcmd1bWVudHMpOwogICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIGZhbHNlKTsKQEAgLTQxMyw4ICs0MTMsOSBAQCBib29sIFByb3h5T2Jq
ZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPCiAKIGJvb2wgUHJveHlPYmplY3Q6OmdldE93blBy
b3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCB1bnNp
Z25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKKyAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOwogICAgIFByb3h5T2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PFByb3h5T2Jq
ZWN0Kj4ob2JqZWN0KTsKLSAgICBJZGVudGlmaWVyIGlkZW50ID0gSWRlbnRpZmllcjo6ZnJvbShl
eGVjLCBwcm9wZXJ0eU5hbWUpOyAKKyAgICBJZGVudGlmaWVyIGlkZW50ID0gSWRlbnRpZmllcjo6
ZnJvbSh2bSwgcHJvcGVydHlOYW1lKTsKICAgICByZXR1cm4gdGhpc09iamVjdC0+Z2V0T3duUHJv
cGVydHlTbG90Q29tbW9uKGV4ZWMsIGlkZW50LmltcGwoKSwgc2xvdCk7CiB9CiAKQEAgLTQ1MCw3
ICs0NTEsNyBAQCBib29sIFByb3h5T2JqZWN0OjpwZXJmb3JtUHV0KEV4ZWNTdGF0ZSogCiAKICAg
ICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmd1bWVudHM7CiAgICAgYXJndW1lbnRzLmFwcGVuZCh0
YXJnZXQpOwotICAgIGFyZ3VtZW50cy5hcHBlbmQoaWRlbnRpZmllclRvU2FmZVB1YmxpY0pTVmFs
dWUodm0sIElkZW50aWZpZXI6OmZyb21VaWQoJnZtLCBwcm9wZXJ0eU5hbWUudWlkKCkpKSk7Cisg
ICAgYXJndW1lbnRzLmFwcGVuZChpZGVudGlmaWVyVG9TYWZlUHVibGljSlNWYWx1ZSh2bSwgSWRl
bnRpZmllcjo6ZnJvbVVpZCh2bSwgcHJvcGVydHlOYW1lLnVpZCgpKSkpOwogICAgIGFyZ3VtZW50
cy5hcHBlbmQocHV0VmFsdWUpOwogICAgIGFyZ3VtZW50cy5hcHBlbmQodGhpc1ZhbHVlKTsKICAg
ICBBU1NFUlQoIWFyZ3VtZW50cy5oYXNPdmVyZmxvd2VkKCkpOwpAQCAtNDk4LDcgKzQ5OSw3IEBA
IGJvb2wgUHJveHlPYmplY3Q6OnB1dEJ5SW5kZXhDb21tb24oRXhlY1MKIHsKICAgICBWTSYgdm0g
PSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
LSAgICBJZGVudGlmaWVyIGlkZW50ID0gSWRlbnRpZmllcjo6ZnJvbShleGVjLCBwcm9wZXJ0eU5h
bWUpOworICAgIElkZW50aWZpZXIgaWRlbnQgPSBJZGVudGlmaWVyOjpmcm9tKHZtLCBwcm9wZXJ0
eU5hbWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKICAgICBhdXRv
IHBlcmZvcm1EZWZhdWx0UHV0ID0gWyZdICgpIHsKICAgICAgICAgSlNPYmplY3QqIHRhcmdldCA9
IHRoaXMtPnRhcmdldCgpOwpAQCAtNjUzLDcgKzY1NCw3IEBAIGJvb2wgUHJveHlPYmplY3Q6OnBl
cmZvcm1EZWxldGUoRXhlY1N0YXQKIAogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3VtZW50
czsKICAgICBhcmd1bWVudHMuYXBwZW5kKHRhcmdldCk7Ci0gICAgYXJndW1lbnRzLmFwcGVuZChp
ZGVudGlmaWVyVG9TYWZlUHVibGljSlNWYWx1ZSh2bSwgSWRlbnRpZmllcjo6ZnJvbVVpZCgmdm0s
IHByb3BlcnR5TmFtZS51aWQoKSkpKTsKKyAgICBhcmd1bWVudHMuYXBwZW5kKGlkZW50aWZpZXJU
b1NhZmVQdWJsaWNKU1ZhbHVlKHZtLCBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCBwcm9wZXJ0eU5h
bWUudWlkKCkpKSk7CiAgICAgQVNTRVJUKCFhcmd1bWVudHMuaGFzT3ZlcmZsb3dlZCgpKTsKICAg
ICBKU1ZhbHVlIHRyYXBSZXN1bHQgPSBjYWxsKGV4ZWMsIGRlbGV0ZVByb3BlcnR5TWV0aG9kLCBj
YWxsVHlwZSwgY2FsbERhdGEsIGhhbmRsZXIsIGFyZ3VtZW50cyk7CiAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgZmFsc2UpOwpAQCAtNjk3LDExICs2OTgsMTIgQEAgYm9vbCBQcm94eU9i
amVjdDo6ZGVsZXRlUHJvcGVydHkoSlNDZWxsKgogCiBib29sIFByb3h5T2JqZWN0OjpkZWxldGVQ
cm9wZXJ0eUJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHBy
b3BlcnR5TmFtZSkKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIFByb3h5T2JqZWN0
KiB0aGlzT2JqZWN0ID0ganNDYXN0PFByb3h5T2JqZWN0Kj4oY2VsbCk7Ci0gICAgSWRlbnRpZmll
ciBpZGVudCA9IElkZW50aWZpZXI6OmZyb20oZXhlYywgcHJvcGVydHlOYW1lKTsgCisgICAgSWRl
bnRpZmllciBpZGVudCA9IElkZW50aWZpZXI6OmZyb20odm0sIHByb3BlcnR5TmFtZSk7CiAgICAg
YXV0byBwZXJmb3JtRGVmYXVsdERlbGV0ZSA9IFsmXSAoKSAtPiBib29sIHsKICAgICAgICAgSlNP
YmplY3QqIHRhcmdldCA9IHRoaXNPYmplY3QtPnRhcmdldCgpOwotICAgICAgICByZXR1cm4gdGFy
Z2V0LT5tZXRob2RUYWJsZShleGVjLT52bSgpKS0+ZGVsZXRlUHJvcGVydHlCeUluZGV4KHRhcmdl
dCwgZXhlYywgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgcmV0dXJuIHRhcmdldC0+bWV0aG9kVGFi
bGUodm0pLT5kZWxldGVQcm9wZXJ0eUJ5SW5kZXgodGFyZ2V0LCBleGVjLCBwcm9wZXJ0eU5hbWUp
OwogICAgIH07CiAgICAgcmV0dXJuIHRoaXNPYmplY3QtPnBlcmZvcm1EZWxldGUoZXhlYywgaWRl
bnQuaW1wbCgpLCBwZXJmb3JtRGVmYXVsdERlbGV0ZSk7CiB9CkBAIC04NTUsNyArODU3LDcgQEAg
Ym9vbCBQcm94eU9iamVjdDo6cGVyZm9ybURlZmluZU93blByb3BlcgogCiAgICAgTWFya2VkQXJn
dW1lbnRCdWZmZXIgYXJndW1lbnRzOwogICAgIGFyZ3VtZW50cy5hcHBlbmQodGFyZ2V0KTsKLSAg
ICBhcmd1bWVudHMuYXBwZW5kKGlkZW50aWZpZXJUb1NhZmVQdWJsaWNKU1ZhbHVlKHZtLCBJZGVu
dGlmaWVyOjpmcm9tVWlkKCZ2bSwgcHJvcGVydHlOYW1lLnVpZCgpKSkpOworICAgIGFyZ3VtZW50
cy5hcHBlbmQoaWRlbnRpZmllclRvU2FmZVB1YmxpY0pTVmFsdWUodm0sIElkZW50aWZpZXI6OmZy
b21VaWQodm0sIHByb3BlcnR5TmFtZS51aWQoKSkpKTsKICAgICBhcmd1bWVudHMuYXBwZW5kKGRl
c2NyaXB0b3JPYmplY3QpOwogICAgIEFTU0VSVCghYXJndW1lbnRzLmhhc092ZXJmbG93ZWQoKSk7
CiAgICAgSlNWYWx1ZSB0cmFwUmVzdWx0ID0gY2FsbChleGVjLCBkZWZpbmVQcm9wZXJ0eU1ldGhv
ZCwgY2FsbFR5cGUsIGNhbGxEYXRhLCBoYW5kbGVyLCBhcmd1bWVudHMpOwpAQCAtOTUyLDcgKzk1
NCw3IEBAIHZvaWQgUHJveHlPYmplY3Q6OnBlcmZvcm1HZXRPd25Qcm9wZXJ0eU4KICAgICBKU1Zh
bHVlIGFycmF5TGlrZU9iamVjdCA9IGNhbGwoZXhlYywgb3duS2V5c01ldGhvZCwgY2FsbFR5cGUs
IGNhbGxEYXRhLCBoYW5kbGVyLCBhcmd1bWVudHMpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIHZvaWQoKSk7CiAKLSAgICBQcm9wZXJ0eU5hbWVBcnJheSB0cmFwUmVzdWx0KCZ2bSwg
cHJvcGVydHlOYW1lcy5wcm9wZXJ0eU5hbWVNb2RlKCksIHByb3BlcnR5TmFtZXMucHJpdmF0ZVN5
bWJvbE1vZGUoKSk7CisgICAgUHJvcGVydHlOYW1lQXJyYXkgdHJhcFJlc3VsdCh2bSwgcHJvcGVy
dHlOYW1lcy5wcm9wZXJ0eU5hbWVNb2RlKCksIHByb3BlcnR5TmFtZXMucHJpdmF0ZVN5bWJvbE1v
ZGUoKSk7CiAgICAgSGFzaFNldDxVbmlxdWVkU3RyaW5nSW1wbCo+IHVuY2hlY2tlZFJlc3VsdEtl
eXM7CiAgICAgewogICAgICAgICBIYXNoU2V0PFJlZlB0cjxVbmlxdWVkU3RyaW5nSW1wbD4+IHNl
ZW5LZXlzOwpAQCAtMTAwNiw3ICsxMDA4LDcgQEAgdm9pZCBQcm94eU9iamVjdDo6cGVyZm9ybUdl
dE93blByb3BlcnR5TgogICAgIGJvb2wgdGFyZ2V0SXNFeGVuc2libGUgPSB0YXJnZXQtPmlzRXh0
ZW5zaWJsZShleGVjKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwog
Ci0gICAgUHJvcGVydHlOYW1lQXJyYXkgdGFyZ2V0S2V5cygmdm0sIHByb3BlcnR5TmFtZXMucHJv
cGVydHlOYW1lTW9kZSgpLCBwcm9wZXJ0eU5hbWVzLnByaXZhdGVTeW1ib2xNb2RlKCkpOworICAg
IFByb3BlcnR5TmFtZUFycmF5IHRhcmdldEtleXModm0sIHByb3BlcnR5TmFtZXMucHJvcGVydHlO
YW1lTW9kZSgpLCBwcm9wZXJ0eU5hbWVzLnByaXZhdGVTeW1ib2xNb2RlKCkpOwogICAgIHRhcmdl
dC0+bWV0aG9kVGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRhcmdldCwgZXhlYywgdGFy
Z2V0S2V5cywgZW51bWVyYXRpb25Nb2RlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCB2b2lkKCkpOwogICAgIFZlY3RvcjxVbmlxdWVkU3RyaW5nSW1wbCo+IHRhcmdldENvbmZpZ3Vy
YWJsZUtleXM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBHbG9i
YWxEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9S
ZWdFeHBHbG9iYWxEYXRhLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvUmVnRXhwR2xvYmFsRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUx
LDcgKzUxLDcgQEAgSlNWYWx1ZSBSZWdFeHBHbG9iYWxEYXRhOjpnZXRCYWNrcmVmKEV4ZQogICAg
ICAgICBpZiAoIXJlc3VsdC5pc1VuZGVmaW5lZCgpKQogICAgICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKICAgICB9Ci0gICAgcmV0dXJuIGpzRW1wdHlTdHJpbmcoJnZtKTsKKyAgICByZXR1cm4ganNF
bXB0eVN0cmluZyh2bSk7CiB9CiAKIEpTVmFsdWUgUmVnRXhwR2xvYmFsRGF0YTo6Z2V0TGFzdFBh
cmVuKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIG93bmVyKQpAQCAtNzAsNyArNzAs
NyBAQCBKU1ZhbHVlIFJlZ0V4cEdsb2JhbERhdGE6OmdldExhc3RQYXJlbihFCiAgICAgICAgIGlm
ICghcmVzdWx0LmlzVW5kZWZpbmVkKCkpCiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAg
IH0KLSAgICByZXR1cm4ganNFbXB0eVN0cmluZygmdm0pOworICAgIHJldHVybiBqc0VtcHR5U3Ry
aW5nKHZtKTsKIH0KIAogSlNWYWx1ZSBSZWdFeHBHbG9iYWxEYXRhOjpnZXRMZWZ0Q29udGV4dChF
eGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBvd25lcikKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE1hdGNoZXNBcnJheS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwTWF0Y2hlc0FycmF5LmNwcAkocmV2
aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwTWF0
Y2hlc0FycmF5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTItMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTItMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ3LDcgKzQ3LDcgQEAgSlNBcnJheSog
Y3JlYXRlRW1wdHlSZWdFeHBNYXRjaGVzQXJyYXkoSgogICAgICAgICAvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY5Nzg2CiAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KGFycmF5KTsKIAotICAgICAgICBhcnJheS0+aW5pdGlhbGl6ZUluZGV4V2l0aG91dEJhcnJpZXIo
c2NvcGUsIDAsIGpzRW1wdHlTdHJpbmcoJnZtKSk7CisgICAgICAgIGFycmF5LT5pbml0aWFsaXpl
SW5kZXhXaXRob3V0QmFycmllcihzY29wZSwgMCwganNFbXB0eVN0cmluZyh2bSkpOwogICAgICAg
ICAKICAgICAgICAgaWYgKHVuc2lnbmVkIG51bVN1YnBhdHRlcm5zID0gcmVnRXhwLT5udW1TdWJw
YXR0ZXJucygpKSB7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDw9IG51bVN1
YnBhdHRlcm5zOyArK2kpCkBAIC01OCw3ICs1OCw3IEBAIEpTQXJyYXkqIGNyZWF0ZUVtcHR5UmVn
RXhwTWF0Y2hlc0FycmF5KEoKICAgICAgICAgYXJyYXkgPSB0cnlDcmVhdGVVbmluaXRpYWxpemVk
UmVnRXhwTWF0Y2hlc0FycmF5KHNjb3BlLCAmZGVmZXJyYWxDb250ZXh0LCBnbG9iYWxPYmplY3Qt
PnJlZ0V4cE1hdGNoZXNBcnJheVN0cnVjdHVyZSgpLCByZWdFeHAtPm51bVN1YnBhdHRlcm5zKCkg
KyAxKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoYXJyYXkpOwogICAgICAgICAKLSAgICAgICAg
YXJyYXktPmluaXRpYWxpemVJbmRleFdpdGhvdXRCYXJyaWVyKHNjb3BlLCAwLCBqc0VtcHR5U3Ry
aW5nKCZ2bSksIEFycmF5V2l0aENvbnRpZ3VvdXMpOworICAgICAgICBhcnJheS0+aW5pdGlhbGl6
ZUluZGV4V2l0aG91dEJhcnJpZXIoc2NvcGUsIDAsIGpzRW1wdHlTdHJpbmcodm0pLCBBcnJheVdp
dGhDb250aWd1b3VzKTsKICAgICAgICAgCiAgICAgICAgIGlmICh1bnNpZ25lZCBudW1TdWJwYXR0
ZXJucyA9IHJlZ0V4cC0+bnVtU3VicGF0dGVybnMoKSkgewogICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMTsgaSA8PSBudW1TdWJwYXR0ZXJuczsgKytpKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwTWF0Y2hlc0FycmF5LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwTWF0Y2hlc0FycmF5LmgJKHJldmlzaW9u
IDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE1hdGNoZXNB
cnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqICBDb3B5cmlnaHQg
KEMpIDIwMDgtMjAxOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiAgQ29weXJp
Z2h0IChDKSAyMDA4LTIwMTkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAq
ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBH
ZW5lcmFsIFB1YmxpYwpAQCAtMTU5LDcgKzE1OSw3IEBAIEFMV0FZU19JTkxJTkUgSlNBcnJheSog
Y3JlYXRlUmVnRXhwTWF0Y2gKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8PSBudW1T
dWJwYXR0ZXJuczsgKytpKSB7CiAgICAgICAgICAgICBTdHJpbmcgZ3JvdXBOYW1lID0gcmVnRXhw
LT5nZXRDYXB0dXJlR3JvdXBOYW1lKGkpOwogICAgICAgICAgICAgaWYgKCFncm91cE5hbWUuaXNF
bXB0eSgpKQotICAgICAgICAgICAgICAgIGdyb3Vwcy0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKCZ2bSwgZ3JvdXBOYW1lKSwgYXJyYXktPmdldEluZGV4UXVpY2tseShpKSk7
CisgICAgICAgICAgICAgICAgZ3JvdXBzLT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21T
dHJpbmcodm0sIGdyb3VwTmFtZSksIGFycmF5LT5nZXRJbmRleFF1aWNrbHkoaSkpOwogICAgICAg
ICB9CiAgICAgfQogICAgIHJldHVybiBhcnJheTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1JlZ0V4cFByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjQ5MTI4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwUHJvdG90eXBlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIw
MDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMt
MjAxNyBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAy
MDAzLTIwMTkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAg
KiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYwpAQCAtMzQ0LDcgKzM0NCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVn
RXhwUHJvdG8KICAgICBhdXRvIGZsYWdzID0gZmxhZ3NTdHJpbmcoZXhlYywgYXNPYmplY3QodGhp
c1ZhbHVlKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUo
KSk7CiAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKGV4ZWMsIGZsYWdzLmRh
dGEoKSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcodm0sIGZsYWdzLmRh
dGEoKSkpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KQEAgLTM3NSw2
ICszNzUsNyBAQCBpbmxpbmUgdm9pZCBhcHBlbmRMaW5lVGVybWluYXRvckVzY2FwZTxVCiB0ZW1w
bGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSByZWdF
eHBQcm90b0dldHRlclNvdXJjZUludGVybmFsKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU3RyaW5n
JiBwYXR0ZXJuLCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5n
dGgpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBib29sIHByZXZpb3VzQ2hhcmFj
dGVyV2FzQmFja3NsYXNoID0gZmFsc2U7CiAgICAgYm9vbCBpbkJyYWNrZXRzID0gZmFsc2U7CiAg
ICAgYm9vbCBzaG91bGRFc2NhcGUgPSBmYWxzZTsKQEAgLTM4NSw3ICszODYsNyBAQCBzdGF0aWMg
aW5saW5lIEpTVmFsdWUgcmVnRXhwUHJvdG9HZXR0ZXJTCiAgICAgLy8gc291cmNlIGNhbm5vdCBl
dmVyIHZhbGlkbHkgYmUgIiIuIElmIHRoZSBzb3VyY2UgaXMgZW1wdHksIHJldHVybiBhIGRpZmZl
cmVudCBQYXR0ZXJuCiAgICAgLy8gdGhhdCB3b3VsZCBtYXRjaCB0aGUgc2FtZSB0aGluZy4KICAg
ICBpZiAoIWxlbmd0aCkKLSAgICAgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyhleGVjLCAi
KD86KSJfcyk7CisgICAgICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcodm0sICIoPzopIl9z
KTsKIAogICAgIC8vIGVhcmx5IHJldHVybiBmb3Igc3RyaW5ncyB0aGF0IGRvbid0IGNvbnRhaW4g
YSBmb3J3YXJkcyBzbGFzaCBhbmQgTGluZVRlcm1pbmF0b3IKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKQEAgLTQxNiw3ICs0MTcsNyBAQCBzdGF0aWMgaW5saW5l
IEpTVmFsdWUgcmVnRXhwUHJvdG9HZXR0ZXJTCiAgICAgfQogCiAgICAgaWYgKCFzaG91bGRFc2Nh
cGUpCi0gICAgICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBwYXR0ZXJuKTsKKyAgICAgICAgcmV0
dXJuIGpzU3RyaW5nKHZtLCBwYXR0ZXJuKTsKIAogICAgIHByZXZpb3VzQ2hhcmFjdGVyV2FzQmFj
a3NsYXNoID0gZmFsc2U7CiAgICAgaW5CcmFja2V0cyA9IGZhbHNlOwpAQCAtNDUwLDcgKzQ1MSw3
IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSByZWdFeHBQcm90b0dldHRlclMKICAgICAgICAgICAg
IHByZXZpb3VzQ2hhcmFjdGVyV2FzQmFja3NsYXNoID0gY2ggPT0gJ1xcJzsKICAgICB9CiAKLSAg
ICByZXR1cm4ganNTdHJpbmcoZXhlYywgcmVzdWx0LnRvU3RyaW5nKCkpOworICAgIHJldHVybiBq
c1N0cmluZyh2bSwgcmVzdWx0LnRvU3RyaW5nKCkpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIHJlZ0V4cFByb3RvR2V0dGVyU291cmNlKEV4ZWNTdGF0ZSogZXhlYykKQEAgLTQ2
Miw3ICs0NjMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4cFByb3RvCiAg
ICAgYXV0byogcmVnZXhwID0ganNEeW5hbWljQ2FzdDxSZWdFeHBPYmplY3QqPih2bSwgdGhpc1Zh
bHVlKTsKICAgICBpZiAoVU5MSUtFTFkoIXJlZ2V4cCkpIHsKICAgICAgICAgaWYgKHRoaXNWYWx1
ZS5pbmhlcml0czxSZWdFeHBQcm90b3R5cGU+KHZtKSkKLSAgICAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNTdHJpbmcoZXhlYywgIig/OikiX3MpKTsKKyAgICAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcodm0sICIoPzopIl9zKSk7CiAgICAgICAgIHJldHVy
biB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlLCAiVGhlIFJlZ0V4cC5wcm90b3R5cGUuc291
cmNlIGdldHRlciBjYW4gb25seSBiZSBjYWxsZWQgb24gYSBSZWdFeHAgb2JqZWN0Il9zKTsKICAg
ICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cFN0cmluZ0l0
ZXJhdG9yUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9SZWdFeHBTdHJpbmdJdGVyYXRvclByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDI0OTEy
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cFN0cmluZ0l0ZXJhdG9y
UHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5
cmlnaHQgKEMpIDIwMTkgQWxleGV5IFNodmF5a2EgPHNodmFpa2FsZXNoQGdtYWlsLmNvbT4uCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00Myw3ICs0NCw3IEBAIHZvaWQgUmVnRXhw
U3RyaW5nSXRlcmF0b3JQcm90b3R5cGU6OmZpbmkKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlv
bih2bSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKLSAgICBwdXREaXJlY3RX
aXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+dG9TdHJpbmdUYWdTeW1ib2ws
IGpzU3RyaW5nKCZ2bSwgIlJlZ0V4cCBTdHJpbmcgSXRlcmF0b3IiKSwgUHJvcGVydHlBdHRyaWJ1
dGU6OkRvbnRFbnVtIHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KTsKKyAgICBwdXREaXJl
Y3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+dG9TdHJpbmdUYWdTeW1i
b2wsIGpzU3RyaW5nKHZtLCAiUmVnRXhwIFN0cmluZyBJdGVyYXRvciIpLCBQcm9wZXJ0eUF0dHJp
YnV0ZTo6RG9udEVudW0gfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpOwogICAgIEpTQ19C
VUlMVElOX0ZVTkNUSU9OX1dJVEhPVVRfVFJBTlNJVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5uZXh0
LCByZWdFeHBTdHJpbmdJdGVyYXRvclByb3RvdHlwZU5leHRDb2RlR2VuZXJhdG9yLCBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7CiB9CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIu
Y3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
YW1wbGluZ1Byb2ZpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQ5LDcgKzU0OSw3IEBAIHZv
aWQgU2FtcGxpbmdQcm9maWxlcjo6cHJvY2Vzc1VudmVyaWZpZWQKICAgICAgICAgICAgIH07CiAK
ICAgICAgICAgICAgIGlmIChjYWxsZWVDZWxsLT50eXBlKCkgIT0gSlNGdW5jdGlvblR5cGUpIHsK
LSAgICAgICAgICAgICAgICBpZiAoSlNPYmplY3QqIG9iamVjdCA9IGpzRHluYW1pY0Nhc3Q8SlNP
YmplY3QqPigqY2FsbGVlQ2VsbC0+dm0oKSwgY2FsbGVlQ2VsbCkpCisgICAgICAgICAgICAgICAg
aWYgKEpTT2JqZWN0KiBvYmplY3QgPSBqc0R5bmFtaWNDYXN0PEpTT2JqZWN0Kj4oY2FsbGVlQ2Vs
bC0+dm0oKSwgY2FsbGVlQ2VsbCkpCiAgICAgICAgICAgICAgICAgICAgIGFkZENhbGxlZShvYmpl
Y3QpOwogCiAgICAgICAgICAgICAgICAgaWYgKCFhbHJlYWR5SGFzRXhlY3V0YWJsZSkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NjcmlwdEV4ZWN1dGFibGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NjcmlwdEV4ZWN1dGFibGUu
Y3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
Y3JpcHRFeGVjdXRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEzLDcgKzExMyw3IEBAIHZv
aWQgU2NyaXB0RXhlY3V0YWJsZTo6Y2xlYXJDb2RlKElzb0NlbGwKIAogdm9pZCBTY3JpcHRFeGVj
dXRhYmxlOjppbnN0YWxsQ29kZShDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKLSAgICBpbnN0YWxs
Q29kZSgqY29kZUJsb2NrLT52bSgpLCBjb2RlQmxvY2ssIGNvZGVCbG9jay0+Y29kZVR5cGUoKSwg
Y29kZUJsb2NrLT5zcGVjaWFsaXphdGlvbktpbmQoKSk7CisgICAgaW5zdGFsbENvZGUoY29kZUJs
b2NrLT52bSgpLCBjb2RlQmxvY2ssIGNvZGVCbG9jay0+Y29kZVR5cGUoKSwgY29kZUJsb2NrLT5z
cGVjaWFsaXphdGlvbktpbmQoKSk7CiB9CiAKIHZvaWQgU2NyaXB0RXhlY3V0YWJsZTo6aW5zdGFs
bENvZGUoVk0mIHZtLCBDb2RlQmxvY2sqIGdlbmVyaWNDb2RlQmxvY2ssIENvZGVUeXBlIGNvZGVU
eXBlLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCkBAIC0yNDksMTYgKzI0OSwxNiBAQCBi
b29sIFNjcmlwdEV4ZWN1dGFibGU6Omhhc0NsZWFyYWJsZUNvZGUoCiBDb2RlQmxvY2sqIFNjcmlw
dEV4ZWN1dGFibGU6Om5ld0NvZGVCbG9ja0ZvcigKICAgICBDb2RlU3BlY2lhbGl6YXRpb25LaW5k
IGtpbmQsIEpTRnVuY3Rpb24qIGZ1bmN0aW9uLCBKU1Njb3BlKiBzY29wZSwgRXhjZXB0aW9uKiYg
ZXhjZXB0aW9uKQogewotICAgIFZNKiB2bSA9IHNjb3BlLT52bSgpOwotICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKKyAgICBWTSYgdm0gPSBzY29wZS0+dm0o
KTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAg
IEFTU0VSVCh2bS0+aGVhcC5pc0RlZmVycmVkKCkpOworICAgIEFTU0VSVCh2bS5oZWFwLmlzRGVm
ZXJyZWQoKSk7CiAgICAgQVNTRVJUKGVuZENvbHVtbigpICE9IFVJTlRfTUFYKTsKIAotICAgIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBzY29wZS0+Z2xvYmFsT2JqZWN0KCp2bSk7Cisg
ICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHNjb3BlLT5nbG9iYWxPYmplY3Qodm0p
OwogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwogCi0g
ICAgaWYgKGNsYXNzSW5mbygqdm0pID09IEV2YWxFeGVjdXRhYmxlOjppbmZvKCkpIHsKKyAgICBp
ZiAoY2xhc3NJbmZvKHZtKSA9PSBFdmFsRXhlY3V0YWJsZTo6aW5mbygpKSB7CiAgICAgICAgIEV2
YWxFeGVjdXRhYmxlKiBleGVjdXRhYmxlID0ganNDYXN0PEV2YWxFeGVjdXRhYmxlKj4odGhpcyk7
CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGtpbmQgPT0gQ29kZUZvckNhbGwpOwogICAgICAgICBS
RUxFQVNFX0FTU0VSVCghZXhlY3V0YWJsZS0+bV9ldmFsQ29kZUJsb2NrKTsKQEAgLTI3NSw3ICsy
NzUsNyBAQCBDb2RlQmxvY2sqIFNjcmlwdEV4ZWN1dGFibGU6Om5ld0NvZGVCbG9jCiAgICAgICAg
IHJldHVybiBjb2RlQmxvY2s7CiAgICAgfQogICAgIAotICAgIGlmIChjbGFzc0luZm8oKnZtKSA9
PSBQcm9ncmFtRXhlY3V0YWJsZTo6aW5mbygpKSB7CisgICAgaWYgKGNsYXNzSW5mbyh2bSkgPT0g
UHJvZ3JhbUV4ZWN1dGFibGU6OmluZm8oKSkgewogICAgICAgICBQcm9ncmFtRXhlY3V0YWJsZSog
ZXhlY3V0YWJsZSA9IGpzQ2FzdDxQcm9ncmFtRXhlY3V0YWJsZSo+KHRoaXMpOwogICAgICAgICBS
RUxFQVNFX0FTU0VSVChraW5kID09IENvZGVGb3JDYWxsKTsKICAgICAgICAgUkVMRUFTRV9BU1NF
UlQoIWV4ZWN1dGFibGUtPm1fcHJvZ3JhbUNvZGVCbG9jayk7CkBAIC0yOTIsNyArMjkyLDcgQEAg
Q29kZUJsb2NrKiBTY3JpcHRFeGVjdXRhYmxlOjpuZXdDb2RlQmxvYwogICAgICAgICByZXR1cm4g
Y29kZUJsb2NrOwogICAgIH0KIAotICAgIGlmIChjbGFzc0luZm8oKnZtKSA9PSBNb2R1bGVQcm9n
cmFtRXhlY3V0YWJsZTo6aW5mbygpKSB7CisgICAgaWYgKGNsYXNzSW5mbyh2bSkgPT0gTW9kdWxl
UHJvZ3JhbUV4ZWN1dGFibGU6OmluZm8oKSkgewogICAgICAgICBNb2R1bGVQcm9ncmFtRXhlY3V0
YWJsZSogZXhlY3V0YWJsZSA9IGpzQ2FzdDxNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZSo+KHRoaXMp
OwogICAgICAgICBSRUxFQVNFX0FTU0VSVChraW5kID09IENvZGVGb3JDYWxsKTsKICAgICAgICAg
UkVMRUFTRV9BU1NFUlQoIWV4ZWN1dGFibGUtPm1fbW9kdWxlUHJvZ3JhbUNvZGVCbG9jayk7CkBA
IC0zMDksNyArMzA5LDcgQEAgQ29kZUJsb2NrKiBTY3JpcHRFeGVjdXRhYmxlOjpuZXdDb2RlQmxv
YwogICAgICAgICByZXR1cm4gY29kZUJsb2NrOwogICAgIH0KIAotICAgIFJFTEVBU0VfQVNTRVJU
KGNsYXNzSW5mbygqdm0pID09IEZ1bmN0aW9uRXhlY3V0YWJsZTo6aW5mbygpKTsKKyAgICBSRUxF
QVNFX0FTU0VSVChjbGFzc0luZm8odm0pID09IEZ1bmN0aW9uRXhlY3V0YWJsZTo6aW5mbygpKTsK
ICAgICBSRUxFQVNFX0FTU0VSVChmdW5jdGlvbik7CiAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBl
eGVjdXRhYmxlID0ganNDYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KHRoaXMpOwogICAgIFJFTEVB
U0VfQVNTRVJUKCFleGVjdXRhYmxlLT5jb2RlQmxvY2tGb3Ioa2luZCkpOwpAQCAtMzI2LDcgKzMy
Niw3IEBAIENvZGVCbG9jayogU2NyaXB0RXhlY3V0YWJsZTo6bmV3Q29kZUJsb2MKICAgICB9CiAg
ICAgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayogdW5saW5rZWRDb2RlQmxvY2sgPSAKICAgICAg
ICAgZXhlY3V0YWJsZS0+bV91bmxpbmtlZEV4ZWN1dGFibGUtPnVubGlua2VkQ29kZUJsb2NrRm9y
KAotICAgICAgICAgICAgKnZtLCBleGVjdXRhYmxlLT5zb3VyY2UoKSwga2luZCwgY29kZUdlbmVy
YXRpb25Nb2RlLCBlcnJvciwgCisgICAgICAgICAgICB2bSwgZXhlY3V0YWJsZS0+c291cmNlKCks
IGtpbmQsIGNvZGVHZW5lcmF0aW9uTW9kZSwgZXJyb3IsIAogICAgICAgICAgICAgZXhlY3V0YWJs
ZS0+cGFyc2VNb2RlKCkpOwogICAgIHJlY29yZFBhcnNlKAogICAgICAgICBleGVjdXRhYmxlLT5t
X3VubGlua2VkRXhlY3V0YWJsZS0+ZmVhdHVyZXMoKSwgCkBAIC0zNDUsMTMgKzM0NSwxMyBAQCBD
b2RlQmxvY2sqIFNjcmlwdEV4ZWN1dGFibGU6Om5ld0NvZGVCbG9jCiBDb2RlQmxvY2sqIFNjcmlw
dEV4ZWN1dGFibGU6Om5ld1JlcGxhY2VtZW50Q29kZUJsb2NrRm9yKAogICAgIENvZGVTcGVjaWFs
aXphdGlvbktpbmQga2luZCkKIHsKLSAgICBWTSYgdm0gPSAqdGhpcy0+dm0oKTsKKyAgICBWTSYg
dm0gPSB0aGlzLT52bSgpOwogICAgIGlmIChjbGFzc0luZm8odm0pID09IEV2YWxFeGVjdXRhYmxl
OjppbmZvKCkpIHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoa2luZCA9PSBDb2RlRm9yQ2FsbCk7
CiAgICAgICAgIEV2YWxFeGVjdXRhYmxlKiBleGVjdXRhYmxlID0ganNDYXN0PEV2YWxFeGVjdXRh
YmxlKj4odGhpcyk7CiAgICAgICAgIEV2YWxDb2RlQmxvY2sqIGJhc2VsaW5lID0gc3RhdGljX2Nh
c3Q8RXZhbENvZGVCbG9jayo+KAogICAgICAgICAgICAgZXhlY3V0YWJsZS0+Y29kZUJsb2NrKCkt
PmJhc2VsaW5lVmVyc2lvbigpKTsKLSAgICAgICAgRXZhbENvZGVCbG9jayogcmVzdWx0ID0gRXZh
bENvZGVCbG9jazo6Y3JlYXRlKCZ2bSwKKyAgICAgICAgRXZhbENvZGVCbG9jayogcmVzdWx0ID0g
RXZhbENvZGVCbG9jazo6Y3JlYXRlKHZtLAogICAgICAgICAgICAgQ29kZUJsb2NrOjpDb3B5UGFy
c2VkQmxvY2ssICpiYXNlbGluZSk7CiAgICAgICAgIHJlc3VsdC0+c2V0QWx0ZXJuYXRpdmUodm0s
IGJhc2VsaW5lKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTM2Miw3ICszNjIsNyBAQCBD
b2RlQmxvY2sqIFNjcmlwdEV4ZWN1dGFibGU6Om5ld1JlcGxhY2VtCiAgICAgICAgIFByb2dyYW1F
eGVjdXRhYmxlKiBleGVjdXRhYmxlID0ganNDYXN0PFByb2dyYW1FeGVjdXRhYmxlKj4odGhpcyk7
CiAgICAgICAgIFByb2dyYW1Db2RlQmxvY2sqIGJhc2VsaW5lID0gc3RhdGljX2Nhc3Q8UHJvZ3Jh
bUNvZGVCbG9jayo+KAogICAgICAgICAgICAgZXhlY3V0YWJsZS0+Y29kZUJsb2NrKCktPmJhc2Vs
aW5lVmVyc2lvbigpKTsKLSAgICAgICAgUHJvZ3JhbUNvZGVCbG9jayogcmVzdWx0ID0gUHJvZ3Jh
bUNvZGVCbG9jazo6Y3JlYXRlKCZ2bSwKKyAgICAgICAgUHJvZ3JhbUNvZGVCbG9jayogcmVzdWx0
ID0gUHJvZ3JhbUNvZGVCbG9jazo6Y3JlYXRlKHZtLAogICAgICAgICAgICAgQ29kZUJsb2NrOjpD
b3B5UGFyc2VkQmxvY2ssICpiYXNlbGluZSk7CiAgICAgICAgIHJlc3VsdC0+c2V0QWx0ZXJuYXRp
dmUodm0sIGJhc2VsaW5lKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTM3Myw3ICszNzMs
NyBAQCBDb2RlQmxvY2sqIFNjcmlwdEV4ZWN1dGFibGU6Om5ld1JlcGxhY2VtCiAgICAgICAgIE1v
ZHVsZVByb2dyYW1FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0ganNDYXN0PE1vZHVsZVByb2dyYW1F
eGVjdXRhYmxlKj4odGhpcyk7CiAgICAgICAgIE1vZHVsZVByb2dyYW1Db2RlQmxvY2sqIGJhc2Vs
aW5lID0gc3RhdGljX2Nhc3Q8TW9kdWxlUHJvZ3JhbUNvZGVCbG9jayo+KAogICAgICAgICAgICAg
ZXhlY3V0YWJsZS0+Y29kZUJsb2NrKCktPmJhc2VsaW5lVmVyc2lvbigpKTsKLSAgICAgICAgTW9k
dWxlUHJvZ3JhbUNvZGVCbG9jayogcmVzdWx0ID0gTW9kdWxlUHJvZ3JhbUNvZGVCbG9jazo6Y3Jl
YXRlKCZ2bSwKKyAgICAgICAgTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayogcmVzdWx0ID0gTW9kdWxl
UHJvZ3JhbUNvZGVCbG9jazo6Y3JlYXRlKHZtLAogICAgICAgICAgICAgQ29kZUJsb2NrOjpDb3B5
UGFyc2VkQmxvY2ssICpiYXNlbGluZSk7CiAgICAgICAgIHJlc3VsdC0+c2V0QWx0ZXJuYXRpdmUo
dm0sIGJhc2VsaW5lKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTM4Myw3ICszODMsNyBA
QCBDb2RlQmxvY2sqIFNjcmlwdEV4ZWN1dGFibGU6Om5ld1JlcGxhY2VtCiAgICAgRnVuY3Rpb25F
eGVjdXRhYmxlKiBleGVjdXRhYmxlID0ganNDYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KHRoaXMp
OwogICAgIEZ1bmN0aW9uQ29kZUJsb2NrKiBiYXNlbGluZSA9IHN0YXRpY19jYXN0PEZ1bmN0aW9u
Q29kZUJsb2NrKj4oCiAgICAgICAgIGV4ZWN1dGFibGUtPmNvZGVCbG9ja0ZvcihraW5kKS0+YmFz
ZWxpbmVWZXJzaW9uKCkpOwotICAgIEZ1bmN0aW9uQ29kZUJsb2NrKiByZXN1bHQgPSBGdW5jdGlv
bkNvZGVCbG9jazo6Y3JlYXRlKCZ2bSwKKyAgICBGdW5jdGlvbkNvZGVCbG9jayogcmVzdWx0ID0g
RnVuY3Rpb25Db2RlQmxvY2s6OmNyZWF0ZSh2bSwKICAgICAgICAgQ29kZUJsb2NrOjpDb3B5UGFy
c2VkQmxvY2ssICpiYXNlbGluZSk7CiAgICAgcmVzdWx0LT5zZXRBbHRlcm5hdGl2ZSh2bSwgYmFz
ZWxpbmUpOwogICAgIHJldHVybiByZXN1bHQ7CkBAIC0zOTcsNyArMzk3LDcgQEAgc3RhdGljIHZv
aWQgc2V0dXBMTEludChDb2RlQmxvY2sqIGNvZGVCbAogc3RhdGljIHZvaWQgc2V0dXBKSVQoVk0m
IHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKICNpZiBFTkFCTEUoSklUKQotICAgIENvbXBp
bGF0aW9uUmVzdWx0IHJlc3VsdCA9IEpJVDo6Y29tcGlsZSgmdm0sIGNvZGVCbG9jaywgSklUQ29t
cGlsYXRpb25NdXN0U3VjY2VlZCk7CisgICAgQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0ID0gSklU
Ojpjb21waWxlKHZtLCBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQpOwogICAg
IFJFTEVBU0VfQVNTRVJUKHJlc3VsdCA9PSBDb21waWxhdGlvblN1Y2Nlc3NmdWwpOwogI2Vsc2UK
ICAgICBVTlVTRURfUEFSQU0odm0pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU2V0SXRlcmF0b3JQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1NldEl0ZXJhdG9yUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjQ5MTI4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2V0SXRlcmF0b3JQcm90b3R5cGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMywgMjAxNiBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTkgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzksNyArMzksNyBAQCB2b2lkIFNldEl0ZXJhdG9y
UHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvCiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkp
KTsKIAogICAgIEpTQ19CVUlMVElOX0ZVTkNUSU9OX1dJVEhPVVRfVFJBTlNJVElPTigibmV4dCIs
IHNldEl0ZXJhdG9yUHJvdG90eXBlTmV4dENvZGVHZW5lcmF0b3IsIHN0YXRpY19jYXN0PHVuc2ln
bmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKLSAgICBwdXREaXJlY3RXaXRob3V0
VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+dG9TdHJpbmdUYWdTeW1ib2wsIGpzU3Ry
aW5nKCZ2bSwgIlNldCBJdGVyYXRvciIpLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBQ
cm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpOworICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0
aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT50b1N0cmluZ1RhZ1N5bWJvbCwganNTdHJpbmcodm0s
ICJTZXQgSXRlcmF0b3IiKSwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtIHwgUHJvcGVydHlB
dHRyaWJ1dGU6OlJlYWRPbmx5KTsKIH0KIAogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU2V0UHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TZXRQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TZXRQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTcxLDcgKzcxLDcgQEAgdm9pZCBTZXRQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZN
JiB2bQogICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVz
LT5idWlsdGluTmFtZXMoKS52YWx1ZXNQdWJsaWNOYW1lKCksIHZhbHVlcywgc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOwogICAgIHB1dERpcmVjdFdp
dGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5rZXlz
UHVibGljTmFtZSgpLCB2YWx1ZXMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJp
YnV0ZTo6RG9udEVudW0pKTsKICAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0u
cHJvcGVydHlOYW1lcy0+aXRlcmF0b3JTeW1ib2wsIHZhbHVlcywgc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOwotICAgIHB1dERpcmVjdFdpdGhvdXRU
cmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT50b1N0cmluZ1RhZ1N5bWJvbCwganNTdHJp
bmcoJnZtLCAiU2V0IiksIFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8IFByb3BlcnR5QXR0
cmlidXRlOjpSZWFkT25seSk7CisgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZt
LnByb3BlcnR5TmFtZXMtPnRvU3RyaW5nVGFnU3ltYm9sLCBqc1N0cmluZyh2bSwgIlNldCIpLCBQ
cm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkp
OwogCiAgICAgSlNDX05BVElWRV9HRVRURVJfV0lUSE9VVF9UUkFOU0lUSU9OKHZtLnByb3BlcnR5
TmFtZXMtPnNpemUsIHNldFByb3RvRnVuY1NpemUsIFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51
bSB8IFByb3BlcnR5QXR0cmlidXRlOjpBY2Nlc3Nvcik7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TdGFja0ZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TdGFja0ZyYW1lLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RhY2tGcmFtZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0xMTQsNyArMTE0LDcgQEAgdm9pZCBTdGFja0ZyYW1lOjpjb21wdXRlTGluZUFuZENv
bHVtbih1bgogICAgIG1fY29kZUJsb2NrLT5leHByZXNzaW9uUmFuZ2VGb3JCeXRlY29kZU9mZnNl
dChtX2J5dGVjb2RlT2Zmc2V0LCBkaXZvdCwgdW51c2VkU3RhcnRPZmZzZXQsIHVudXNlZEVuZE9m
ZnNldCwgbGluZSwgY29sdW1uKTsKIAogICAgIFNjcmlwdEV4ZWN1dGFibGUqIGV4ZWN1dGFibGUg
PSBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCk7Ci0gICAgaWYgKE9wdGlvbmFsPGludD4g
b3ZlcnJpZGVMaW5lTnVtYmVyID0gZXhlY3V0YWJsZS0+b3ZlcnJpZGVMaW5lTnVtYmVyKCptX2Nv
ZGVCbG9jay0+dm0oKSkpCisgICAgaWYgKE9wdGlvbmFsPGludD4gb3ZlcnJpZGVMaW5lTnVtYmVy
ID0gZXhlY3V0YWJsZS0+b3ZlcnJpZGVMaW5lTnVtYmVyKG1fY29kZUJsb2NrLT52bSgpKSkKICAg
ICAgICAgbGluZSA9IG92ZXJyaWRlTGluZU51bWJlci52YWx1ZSgpOwogfQogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nQ29uc3RydWN0b3IuY3Bw
CShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJp
bmdDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICog
IENvcHlyaWdodCAoQykgMTk5OS0yMDAxIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCi0g
KiAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMDgsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwNC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTgwLDcgKzgwLDcgQEAgc3RhdGlj
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaQogICAgICAgICBzY29wZS5yZWxlYXNl
KCk7CiAgICAgICAgIHVuc2lnbmVkIGNvZGUgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKS50
b1VJbnQzMihleGVjKTsKICAgICAgICAgLy8gTm90IGNoZWNraW5nIGZvciBhbiBleGNlcHRpb24g
aGVyZSBpcyBvayBiZWNhdXNlIGpzU2luZ2xlQ2hhcmFjdGVyU3RyaW5nIHdpbGwganVzdCBmZXRj
aCBhbiB1bnVzZWQgc3RyaW5nIGlmIHRoZXJlJ3MgYW4gZXhjZXB0aW9uLgotICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU2luZ2xlQ2hhcmFjdGVyU3RyaW5nKGV4ZWMsIGNvZGUpKTsK
KyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1NpbmdsZUNoYXJhY3RlclN0cmluZyh2
bSwgY29kZSkpOwogICAgIH0KIAogICAgIExDaGFyKiBidWY4Qml0OwpAQCAtOTgsMTYgKzk4LDE2
IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmkKICAgICAgICAgICAg
ICAgICBidWYxNkJpdFtpXSA9IHN0YXRpY19jYXN0PFVDaGFyPihleGVjLT51bmNoZWNrZWRBcmd1
bWVudChpKS50b1VJbnQzMihleGVjKSk7CiAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyhleGVj
LCBXVEZNb3ZlKGltcGwxNkJpdCkpKSk7CisgICAgICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4o
c2NvcGUsIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyh2bSwgV1RGTW92ZShpbXBsMTZCaXQpKSkp
OwogICAgICAgICB9CiAgICAgICAgIGJ1ZjhCaXRbaV0gPSBzdGF0aWNfY2FzdDxMQ2hhcj4oY2hh
cmFjdGVyKTsKICAgICB9Ci0gICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjpl
bmNvZGUoanNTdHJpbmcoZXhlYywgV1RGTW92ZShpbXBsOEJpdCkpKSk7CisgICAgUkVMRUFTRV9B
TkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcodm0sIFdURk1vdmUoaW1w
bDhCaXQpKSkpOwogfQogCiBKU1N0cmluZyogSlNDX0hPU1RfQ0FMTCBzdHJpbmdGcm9tQ2hhckNv
ZGUoRXhlY1N0YXRlKiBleGVjLCBpbnQzMl90IGFyZykKIHsKLSAgICByZXR1cm4ganNTaW5nbGVD
aGFyYWN0ZXJTdHJpbmcoZXhlYywgYXJnKTsKKyAgICByZXR1cm4ganNTaW5nbGVDaGFyYWN0ZXJT
dHJpbmcoZXhlYy0+dm0oKSwgYXJnKTsKIH0KIAogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgc3RyaW5nRnJvbUNvZGVQb2ludChFeGVjU3RhdGUqIGV4ZWMpCkBAIC0xMzYsNyAr
MTM2LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaQogICAgICAg
ICB9CiAgICAgfQogCi0gICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNv
ZGUoanNTdHJpbmcoZXhlYywgYnVpbGRlci50b1N0cmluZygpKSkpOworICAgIFJFTEVBU0VfQU5E
X1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKHZtLCBidWlsZGVyLnRvU3Ry
aW5nKCkpKSk7CiB9CiAKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0
cnVjdFdpdGhTdHJpbmdDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMpCkBAIC0xNTcsMTUgKzE1
NywxNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zCiAKIEpTU3Ry
aW5nKiBzdHJpbmdDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYXJndW1lbnQp
CiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBpZiAoYXJndW1lbnQuaXNTeW1ib2wo
KSkKLSAgICAgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyhleGVjLCBhc1N5bWJvbChhcmd1
bWVudCktPmRlc2NyaXB0aXZlU3RyaW5nKCkpOworICAgICAgICByZXR1cm4ganNOb250cml2aWFs
U3RyaW5nKHZtLCBhc1N5bWJvbChhcmd1bWVudCktPmRlc2NyaXB0aXZlU3RyaW5nKCkpOwogICAg
IHJldHVybiBhcmd1bWVudC50b1N0cmluZyhleGVjKTsKIH0KIAogc3RhdGljIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgY2FsbFN0cmluZ0NvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYykK
IHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGlmICghZXhlYy0+YXJndW1lbnRDb3Vu
dCgpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzRW1wdHlTdHJpbmcoZXhlYykp
OworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzRW1wdHlTdHJpbmcodm0pKTsKICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHN0cmluZ0NvbnN0cnVjdG9yKGV4ZWMsIGV4ZWMtPnVu
Y2hlY2tlZEFyZ3VtZW50KDApKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0cmluZ0l0ZXJhdG9yUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdJdGVyYXRvclByb3RvdHlwZS5jcHAJKHJldmlz
aW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ0l0ZXJh
dG9yUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE5IEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgWXVzdWtlIFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29t
Pi4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTQxLDcgKzQxLDcgQEAgdm9pZCBTdHJpbmdJdGVyYXRv
clByb3RvdHlwZTo6ZmluaXNoQ3JlYQogewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsK
ICAgICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOwotICAgIHB1dERpcmVjdFdpdGhvdXRU
cmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT50b1N0cmluZ1RhZ1N5bWJvbCwganNTdHJp
bmcoJnZtLCAiU3RyaW5nIEl0ZXJhdG9yIiksIFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8
IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSk7CisgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5z
aXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPnRvU3RyaW5nVGFnU3ltYm9sLCBqc1N0cmluZyh2
bSwgIlN0cmluZyBJdGVyYXRvciIpLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBQcm9w
ZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpOwogICAgIEpTQ19CVUlMVElOX0ZVTkNUSU9OX1dJVEhP
VVRfVFJBTlNJVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5uZXh0LCBzdHJpbmdJdGVyYXRvclByb3Rv
dHlwZU5leHRDb2RlR2VuZXJhdG9yLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRy
aWJ1dGU6OkRvbnRFbnVtKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N0cmluZ09iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3RyaW5nT2JqZWN0LmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEgSGFycmkgUG9ydGVu
IChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwOCwgMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMTkg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAt
NTcsNyArNTcsOCBAQCBib29sIFN0cmluZ09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90QnlJCiAg
ICAgU3RyaW5nT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PFN0cmluZ09iamVjdCo+KG9iamVj
dCk7CiAgICAgaWYgKHRoaXNPYmplY3QtPmludGVybmFsVmFsdWUoKS0+Z2V0U3RyaW5nUHJvcGVy
dHlTbG90KGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCkpCiAgICAgICAgIHJldHVybiB0cnVlOyAg
ICAKLSAgICByZXR1cm4gSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBl
eGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIHByb3BlcnR5TmFtZSksIHNsb3QpOworICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgcmV0dXJuIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNs
b3QodGhpc09iamVjdCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbSh2bSwgcHJvcGVydHlOYW1lKSwg
c2xvdCk7CiB9CiAKIGJvb2wgU3RyaW5nT2JqZWN0OjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3Rh
dGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFBy
b3BlcnR5U2xvdCYgc2xvdCkKQEAgLTE0NiwxMSArMTQ3LDEyIEBAIGJvb2wgU3RyaW5nT2JqZWN0
OjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgKIAogdm9pZCBTdHJpbmdPYmplY3Q6OmdldE93blByb3Bl
cnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVB
cnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7CisgICAgVk0mIHZt
ID0gZXhlYy0+dm0oKTsKICAgICBTdHJpbmdPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8U3Ry
aW5nT2JqZWN0Kj4ob2JqZWN0KTsKICAgICBpZiAocHJvcGVydHlOYW1lcy5pbmNsdWRlU3RyaW5n
UHJvcGVydGllcygpKSB7CiAgICAgICAgIGludCBzaXplID0gdGhpc09iamVjdC0+aW50ZXJuYWxW
YWx1ZSgpLT5sZW5ndGgoKTsKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyArK2kp
Ci0gICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGkp
KTsKKyAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb20odm0sIGkp
KTsKICAgICB9CiAgICAgcmV0dXJuIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXNP
YmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwogfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nT2JqZWN0LmgJKHJldmlzaW9uIDI0OTEyOCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ09iamVjdC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJy
aSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQotICogIENvcHlyaWdodCAoQykgMjAwNy0yMDA4LCAy
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIw
MDctMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAq
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljCkBAIC0zMiw3ICszMiw3IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBTdHJpbmdPYmplY3Qq
IGNyZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgIHsKLSAgICAgICAgSlNT
dHJpbmcqIHN0cmluZyA9IGpzRW1wdHlTdHJpbmcoJnZtKTsKKyAgICAgICAgSlNTdHJpbmcqIHN0
cmluZyA9IGpzRW1wdHlTdHJpbmcodm0pOwogICAgICAgICBTdHJpbmdPYmplY3QqIG9iamVjdCA9
IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFN0cmluZ09iamVjdD4odm0uaGVhcCkpIFN0cmlu
Z09iamVjdCh2bSwgc3RydWN0dXJlKTsKICAgICAgICAgb2JqZWN0LT5maW5pc2hDcmVhdGlvbih2
bSwgc3RyaW5nKTsKICAgICAgICAgcmV0dXJuIG9iamVjdDsKQEAgLTg1LDcgKzg1LDcgQEAgc3Rh
dGljIGlubGluZSBKU1N0cmluZyoganNTdHJpbmdXaXRoUmV1cwogICAgICAgICBBU1NFUlQoYXNT
dHJpbmcob3JpZ2luYWxWYWx1ZSktPnZhbHVlKGV4ZWMpID09IHN0cmluZyk7CiAgICAgICAgIHJl
dHVybiBhc1N0cmluZyhvcmlnaW5hbFZhbHVlKTsKICAgICB9Ci0gICAgcmV0dXJuIGpzU3RyaW5n
KCZleGVjLT52bSgpLCBzdHJpbmcpOworICAgIHJldHVybiBqc1N0cmluZyhleGVjLT52bSgpLCBz
dHJpbmcpOwogfQogCiAvLyBIZWxwZXIgdGhhdCB0cmllcyB0byB1c2UgdGhlIEpTU3RyaW5nIHN1
YnN0cmluZyBzaGFyaW5nIG1lY2hhbmlzbSBpZiAnb3JpZ2luYWxWYWx1ZScgaXMgYSBKU1N0cmlu
Zy4KQEAgLTk5LDcgKzk5LDcgQEAgc3RhdGljIGlubGluZSBKU1N0cmluZyoganNTdWJzdHJpbmco
RXhlYwogICAgICAgICBBU1NFUlQoYXNTdHJpbmcob3JpZ2luYWxWYWx1ZSktPnZhbHVlKGV4ZWMp
ID09IHN0cmluZyk7CiAgICAgICAgIHJldHVybiBqc1N1YnN0cmluZyhleGVjLCBhc1N0cmluZyhv
cmlnaW5hbFZhbHVlKSwgb2Zmc2V0LCBsZW5ndGgpOwogICAgIH0KLSAgICByZXR1cm4ganNTdWJz
dHJpbmcoJmV4ZWMtPnZtKCksIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpOworICAgIHJldHVybiBq
c1N1YnN0cmluZyhleGVjLT52bSgpLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJp
bmdQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE2MywxMCArMTYzLDEwIEBAIHZvaWQgU3RyaW5nUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbihW
TSYKIAogICAgIEpTRnVuY3Rpb24qIHRyaW1TdGFydEZ1bmN0aW9uID0gSlNGdW5jdGlvbjo6Y3Jl
YXRlKHZtLCBnbG9iYWxPYmplY3QsIDAsICJ0cmltU3RhcnQiX3MsIHN0cmluZ1Byb3RvRnVuY1Ry
aW1TdGFydCwgTm9JbnRyaW5zaWMpOwogICAgIEpTRnVuY3Rpb24qIHRyaW1FbmRGdW5jdGlvbiA9
IEpTRnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCAwLCAidHJpbUVuZCJfcywgc3Ry
aW5nUHJvdG9GdW5jVHJpbUVuZCwgTm9JbnRyaW5zaWMpOwotICAgIHB1dERpcmVjdFdpdGhvdXRU
cmFuc2l0aW9uKHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgInRyaW1TdGFydCIpLCB0
cmltU3RhcnRGdW5jdGlvbiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRl
OjpEb250RW51bSkpOwotICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKCZ2bSwgInRyaW1MZWZ0IiksIHRyaW1TdGFydEZ1bmN0aW9uLCBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7Ci0gICAgcHV0
RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAi
dHJpbUVuZCIpLCB0cmltRW5kRnVuY3Rpb24sIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0
eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKLSAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2
bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJ0cmltUmlnaHQiKSwgdHJpbUVuZEZ1bmN0
aW9uLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7
CisgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIElkZW50aWZpZXI6OmZyb21TdHJp
bmcodm0sICJ0cmltU3RhcnQiKSwgdHJpbVN0YXJ0RnVuY3Rpb24sIHN0YXRpY19jYXN0PHVuc2ln
bmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKKyAgICBwdXREaXJlY3RXaXRob3V0
VHJhbnNpdGlvbih2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInRyaW1MZWZ0IiksIHRy
aW1TdGFydEZ1bmN0aW9uLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6
OkRvbnRFbnVtKSk7CisgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcodm0sICJ0cmltRW5kIiksIHRyaW1FbmRGdW5jdGlvbiwgc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOworICAgIHB1dERpcmVj
dFdpdGhvdXRUcmFuc2l0aW9uKHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAidHJpbVJp
Z2h0IiksIHRyaW1FbmRGdW5jdGlvbiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0
cmlidXRlOjpEb250RW51bSkpOwogCiAgICAgSlNGdW5jdGlvbiogaXRlcmF0b3JGdW5jdGlvbiA9
IEpTRnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCAwLCAiW1N5bWJvbC5pdGVyYXRv
cl0iX3MsIHN0cmluZ1Byb3RvRnVuY0l0ZXJhdG9yLCBOb0ludHJpbnNpYyk7CiAgICAgcHV0RGly
ZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPml0ZXJhdG9yU3ltYm9s
LCBpdGVyYXRvckZ1bmN0aW9uLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1
dGU6OkRvbnRFbnVtKSk7CkBAIC0xNzcsNyArMTc3LDcgQEAgdm9pZCBTdHJpbmdQcm90b3R5cGU6
OmZpbmlzaENyZWF0aW9uKFZNJgogCiBTdHJpbmdQcm90b3R5cGUqIFN0cmluZ1Byb3RvdHlwZTo6
Y3JlYXRlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUpCiB7Ci0gICAgSlNTdHJpbmcqIGVtcHR5ID0ganNFbXB0eVN0cmluZygmdm0pOwor
ICAgIEpTU3RyaW5nKiBlbXB0eSA9IGpzRW1wdHlTdHJpbmcodm0pOwogICAgIFN0cmluZ1Byb3Rv
dHlwZSogcHJvdG90eXBlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8U3RyaW5nUHJvdG90
eXBlPih2bS5oZWFwKSkgU3RyaW5nUHJvdG90eXBlKHZtLCBzdHJ1Y3R1cmUpOwogICAgIHByb3Rv
dHlwZS0+ZmluaXNoQ3JlYXRpb24odm0sIGdsb2JhbE9iamVjdCwgZW1wdHkpOwogICAgIHJldHVy
biBwcm90b3R5cGU7CkBAIC0zMjMsNyArMzIzLDcgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgSlNT
dHJpbmcqIGpzU3BsaWNlUwogICAgICAgICBpZiAocG9zaXRpb24gPD0gMCAmJiBsZW5ndGggPj0g
c291cmNlU2l6ZSkKICAgICAgICAgICAgIHJldHVybiBzb3VyY2VWYWw7CiAgICAgICAgIC8vIFdl
IGNvdWxkIGNhbGwgU3RyaW5nOjpzdWJzdHJpbmdTaGFyaW5nSW1wbCgpLCBidXQgdGhpcyB3b3Vs
ZCByZXN1bHQgaW4gcmVkdW5kYW50IGNoZWNrcy4KLSAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJO
KHNjb3BlLCBqc1N0cmluZyhleGVjLCBTdHJpbmdJbXBsOjpjcmVhdGVTdWJzdHJpbmdTaGFyaW5n
SW1wbCgqc291cmNlLmltcGwoKSwgc3RkOjptYXgoMCwgcG9zaXRpb24pLCBzdGQ6Om1pbihzb3Vy
Y2VTaXplLCBsZW5ndGgpKSkpOworICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGpz
U3RyaW5nKHZtLCBTdHJpbmdJbXBsOjpjcmVhdGVTdWJzdHJpbmdTaGFyaW5nSW1wbCgqc291cmNl
LmltcGwoKSwgc3RkOjptYXgoMCwgcG9zaXRpb24pLCBzdGQ6Om1pbihzb3VyY2VTaXplLCBsZW5n
dGgpKSkpOwogICAgIH0KIAogICAgIC8vIFdlIGtub3cgdGhhdCB0aGUgc3VtIG9mIHN1YnN0cmlu
Z1JhbmdlcyBsZW5ndGhzIGNhbm5vdCBleGNlZWQgbGVuZ3RoIG9mCkBAIC0zMzYsNyArMzM2LDcg
QEAgc3RhdGljIEFMV0FZU19JTkxJTkUgSlNTdHJpbmcqIGpzU3BsaWNlUwogICAgIEFTU0VSVCh0
b3RhbExlbmd0aCA8PSBTdHJpbmc6Ok1heExlbmd0aCk7CiAKICAgICBpZiAoIXRvdGFsTGVuZ3Ro
KQotICAgICAgICByZXR1cm4ganNFbXB0eVN0cmluZyhleGVjKTsKKyAgICAgICAgcmV0dXJuIGpz
RW1wdHlTdHJpbmcodm0pOwogCiAgICAgaWYgKHNvdXJjZS5pczhCaXQoKSkgewogICAgICAgICBM
Q2hhciogYnVmZmVyOwpAQCAtMzU1LDcgKzM1NSw3IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpT
U3RyaW5nKiBqc1NwbGljZVMKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIFJF
TEVBU0VfQU5EX1JFVFVSTihzY29wZSwganNTdHJpbmcoZXhlYywgV1RGTW92ZShpbXBsKSkpOwor
ICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGpzU3RyaW5nKHZtLCBXVEZNb3ZlKGlt
cGwpKSk7CiAgICAgfQogCiAgICAgVUNoYXIqIGJ1ZmZlcjsKQEAgLTM3NSw3ICszNzUsNyBAQCBz
dGF0aWMgQUxXQVlTX0lOTElORSBKU1N0cmluZyoganNTcGxpY2VTCiAgICAgICAgIH0KICAgICB9
CiAKLSAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGpzU3RyaW5nKGV4ZWMsIFdURk1vdmUo
aW1wbCkpKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGpzU3RyaW5nKHZtLCBXVEZN
b3ZlKGltcGwpKSk7CiB9CiAKIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpTU3RyaW5nKiBqc1NwbGlj
ZVN1YnN0cmluZ3NXaXRoU2VwYXJhdG9ycyhFeGVjU3RhdGUqIGV4ZWMsIEpTU3RyaW5nKiBzb3Vy
Y2VWYWwsIGNvbnN0IFN0cmluZyYgc291cmNlLCBjb25zdCBTdHJpbmdSYW5nZSogc3Vic3RyaW5n
UmFuZ2VzLCBpbnQgcmFuZ2VDb3VudCwgY29uc3QgU3RyaW5nKiBzZXBhcmF0b3JzLCBpbnQgc2Vw
YXJhdG9yQ291bnQpCkBAIC0zOTAsNyArMzkwLDcgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgSlNT
dHJpbmcqIGpzU3BsaWNlUwogICAgICAgICBpZiAocG9zaXRpb24gPD0gMCAmJiBsZW5ndGggPj0g
c291cmNlU2l6ZSkKICAgICAgICAgICAgIHJldHVybiBzb3VyY2VWYWw7CiAgICAgICAgIC8vIFdl
IGNvdWxkIGNhbGwgU3RyaW5nOjpzdWJzdHJpbmdTaGFyaW5nSW1wbCgpLCBidXQgdGhpcyB3b3Vs
ZCByZXN1bHQgaW4gcmVkdW5kYW50IGNoZWNrcy4KLSAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJO
KHNjb3BlLCBqc1N0cmluZyhleGVjLCBTdHJpbmdJbXBsOjpjcmVhdGVTdWJzdHJpbmdTaGFyaW5n
SW1wbCgqc291cmNlLmltcGwoKSwgc3RkOjptYXgoMCwgcG9zaXRpb24pLCBzdGQ6Om1pbihzb3Vy
Y2VTaXplLCBsZW5ndGgpKSkpOworICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGpz
U3RyaW5nKHZtLCBTdHJpbmdJbXBsOjpjcmVhdGVTdWJzdHJpbmdTaGFyaW5nSW1wbCgqc291cmNl
LmltcGwoKSwgc3RkOjptYXgoMCwgcG9zaXRpb24pLCBzdGQ6Om1pbihzb3VyY2VTaXplLCBsZW5n
dGgpKSkpOwogICAgIH0KIAogICAgIENoZWNrZWQ8aW50LCBSZWNvcmRPdmVyZmxvdz4gdG90YWxM
ZW5ndGggPSAwOwpAQCAtNDA4LDcgKzQwOCw3IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpTU3Ry
aW5nKiBqc1NwbGljZVMKICAgICB9CiAKICAgICBpZiAoIXRvdGFsTGVuZ3RoKQotICAgICAgICBy
ZXR1cm4ganNFbXB0eVN0cmluZyhleGVjKTsKKyAgICAgICAgcmV0dXJuIGpzRW1wdHlTdHJpbmco
dm0pOwogCiAgICAgaWYgKHNvdXJjZS5pczhCaXQoKSAmJiBhbGxTZXBhcmF0b3JzOEJpdCkgewog
ICAgICAgICBMQ2hhciogYnVmZmVyOwpAQCAtNDM3LDcgKzQzNyw3IEBAIHN0YXRpYyBBTFdBWVNf
SU5MSU5FIEpTU3RyaW5nKiBqc1NwbGljZVMKICAgICAgICAgICAgIH0KICAgICAgICAgfSAgICAg
ICAgCiAKLSAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBqc1N0cmluZyhleGVjLCBX
VEZNb3ZlKGltcGwpKSk7CisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwganNTdHJp
bmcodm0sIFdURk1vdmUoaW1wbCkpKTsKICAgICB9CiAKICAgICBVQ2hhciogYnVmZmVyOwpAQCAt
NDcwLDcgKzQ3MCw3IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpTU3RyaW5nKiBqc1NwbGljZVMK
ICAgICAgICAgfQogICAgIH0KIAotICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwganNTdHJp
bmcoZXhlYywgV1RGTW92ZShpbXBsKSkpOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwg
anNTdHJpbmcodm0sIFdURk1vdmUoaW1wbCkpKTsKIH0KIAogI2RlZmluZSBPVVRfT0ZfTUVNT1JZ
KGV4ZWNfXywgc2NvcGVfXykgXApAQCAtNTkzLDE0ICs1OTMsMTQgQEAgc3RhdGljIEFMV0FZU19J
TkxJTkUgSlNTdHJpbmcqIHJlcGxhY2VVcwogICAgICAgICAgICAgICAgIGlmIChtYXRjaFN0YXJ0
IDwgMCkKICAgICAgICAgICAgICAgICAgICAgcGF0dGVyblZhbHVlID0ganNVbmRlZmluZWQoKTsK
ICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHBhdHRlcm5WYWx1ZSA9
IGpzU3Vic3RyaW5nKCZ2bSwgc291cmNlLCBtYXRjaFN0YXJ0LCBtYXRjaExlbik7CisgICAgICAg
ICAgICAgICAgICAgIHBhdHRlcm5WYWx1ZSA9IGpzU3Vic3RyaW5nKHZtLCBzb3VyY2UsIG1hdGNo
U3RhcnQsIG1hdGNoTGVuKTsKIAogICAgICAgICAgICAgICAgIGNhY2hlZENhbGwuYXBwZW5kQXJn
dW1lbnQocGF0dGVyblZhbHVlKTsKIAogICAgICAgICAgICAgICAgIGlmIChpICYmIGhhc05hbWVk
Q2FwdHVyZXMpIHsKICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGdyb3VwTmFtZSA9IHJlZ0V4
cC0+Z2V0Q2FwdHVyZUdyb3VwTmFtZShpKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFncm91
cE5hbWUuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBzLT5wdXREaXJl
Y3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCBncm91cE5hbWUpLCBwYXR0ZXJuVmFs
dWUpOworICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBzLT5wdXREaXJlY3Qodm0sIElkZW50
aWZpZXI6OmZyb21TdHJpbmcodm0sIGdyb3VwTmFtZSksIHBhdHRlcm5WYWx1ZSk7CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgfQogCkBAIC02NTksNyArNjU5LDcgQEAgc3RhdGljIEFM
V0FZU19JTkxJTkUgSlNTdHJpbmcqIHJlcGxhY2VVcwogICAgICAgICAgICAgICAgICAgICBpZiAo
bWF0Y2hTdGFydCA8IDApCiAgICAgICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuVmFsdWUgPSBq
c1VuZGVmaW5lZCgpOwogICAgICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHBhdHRlcm5WYWx1ZSA9IGpzU3Vic3RyaW5nKCZ2bSwgc291cmNlLCBtYXRjaFN0
YXJ0LCBtYXRjaExlbik7CisgICAgICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuVmFsdWUgPSBq
c1N1YnN0cmluZyh2bSwgc291cmNlLCBtYXRjaFN0YXJ0LCBtYXRjaExlbik7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKICAgICAg
ICAgICAgICAgICAgICAgfQogCkBAIC02NjgsNyArNjY4LDcgQEAgc3RhdGljIEFMV0FZU19JTkxJ
TkUgSlNTdHJpbmcqIHJlcGxhY2VVcwogICAgICAgICAgICAgICAgICAgICBpZiAoaSAmJiBoYXNO
YW1lZENhcHR1cmVzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgZ3JvdXBOYW1l
ID0gcmVnRXhwLT5nZXRDYXB0dXJlR3JvdXBOYW1lKGkpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCFncm91cE5hbWUuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdyb3Vwcy0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgZ3JvdXBO
YW1lKSwgcGF0dGVyblZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cHMt
PnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgZ3JvdXBOYW1lKSwgcGF0
dGVyblZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgfQpA
QCAtNzMxLDcgKzczMSw3IEBAIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25TdHJpbmdQ
cm8KICAgICBFeGVjU3RhdGUqIGV4ZWMsIEpTU3RyaW5nKiB0aGlzVmFsdWUsIFJlZ0V4cE9iamVj
dCogc2VhcmNoVmFsdWUpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwogCiAgICAgUmVnRXhwKiByZWdFeHAgPSBzZWFyY2hWYWx1ZS0+cmVnRXhwKCk7CkBA
IC03NTQsNyArNzU0LDcgQEAgSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblN0cmluZ1By
bwogICAgIEV4ZWNTdGF0ZSogZXhlYywgSlNTdHJpbmcqIHRoaXNWYWx1ZSwgUmVnRXhwT2JqZWN0
KiBzZWFyY2hWYWx1ZSwgSlNTdHJpbmcqIHJlcGxhY2VTdHJpbmcpCiB7CiAgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7
CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgQ2FsbERhdGEgY2FsbERhdGE7
CkBAIC03OTgsNyArNzk4LDcgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgSlNTdHJpbmcqIHJlcGxh
Y2VVcwogICAgIENhbGxUeXBlIGNhbGxUeXBlID0gZ2V0Q2FsbERhdGEodm0sIHJlcGxhY2VWYWx1
ZSwgY2FsbERhdGEpOwogICAgIGlmIChjYWxsVHlwZSAhPSBDYWxsVHlwZTo6Tm9uZSkgewogICAg
ICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOwotICAgICAgICBhdXRvKiBzdWJzdHJpbmcg
PSBqc1N1YnN0cmluZygmdm0sIHN0cmluZywgbWF0Y2hTdGFydCwgc2VhcmNoU3RyaW5nLmltcGwo
KS0+bGVuZ3RoKCkpOworICAgICAgICBhdXRvKiBzdWJzdHJpbmcgPSBqc1N1YnN0cmluZyh2bSwg
c3RyaW5nLCBtYXRjaFN0YXJ0LCBzZWFyY2hTdHJpbmcuaW1wbCgpLT5sZW5ndGgoKSk7CiAgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwogICAgICAgICBhcmdzLmFw
cGVuZChzdWJzdHJpbmcpOwogICAgICAgICBhcmdzLmFwcGVuZChqc051bWJlcihtYXRjaFN0YXJ0
KSk7CkBAIC05MzMsNyArOTMzLDcgQEAgSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblN0
cmluZ1BybwogICAgIEVuY29kZWRKU1ZhbHVlIHJlcGxhY2VWYWx1ZSkKIHsKICAgICBWTSYgdm0g
PSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVj
KTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICAKICAg
ICByZXR1cm4gcmVwbGFjZSgKICAgICAgICAgdm0sIGV4ZWMsIEpTVmFsdWU6OmRlY29kZSh0aGlz
VmFsdWUpLCBKU1ZhbHVlOjpkZWNvZGUoc2VhcmNoVmFsdWUpLApAQCAtOTc0LDE0ICs5NzQsMTQg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIGlmIChhMC5p
c1VJbnQzMigpKSB7CiAgICAgICAgIHVpbnQzMl90IGkgPSBhMC5hc1VJbnQzMigpOwogICAgICAg
ICBpZiAoaSA8IHZpZXcubGVuZ3RoKCkpCi0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzU2luZ2xlQ2hhcmFjdGVyU3RyaW5nKGV4ZWMsIHZpZXdbaV0pKTsKLSAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc0VtcHR5U3RyaW5nKGV4ZWMpKTsKKyAgICAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNTaW5nbGVDaGFyYWN0ZXJTdHJpbmcodm0sIHZpZXdbaV0p
KTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0VtcHR5U3RyaW5nKHZtKSk7CiAg
ICAgfQogICAgIGRvdWJsZSBkcG9zID0gYTAudG9JbnRlZ2VyKGV4ZWMpOwogICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGlmIChkcG9zID49IDAg
JiYgZHBvcyA8IHZpZXcubGVuZ3RoKCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNTaW5nbGVDaGFyYWN0ZXJTdHJpbmcoZXhlYywgdmlld1tzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
ZHBvcyldKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0VtcHR5U3RyaW5nKGV4ZWMp
KTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1NpbmdsZUNoYXJhY3RlclN0cmlu
Zyh2bSwgdmlld1tzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZHBvcyldKSk7CisgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc0VtcHR5U3RyaW5nKHZtKSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jQ2hhckNvZGVBdChFeGVjU3RhdGUqIGV4ZWMpCkBA
IC0xMjcwLDcgKzEyNzAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1By
b3RvCiAgICAgICAgIEFTU0VSVChsaW1pdCk7CiAKICAgICAgICAgZG8gewotICAgICAgICAgICAg
cmVzdWx0LT5wdXREaXJlY3RJbmRleChleGVjLCBwb3NpdGlvbiwganNTaW5nbGVDaGFyYWN0ZXJT
dHJpbmcoZXhlYywgaW5wdXRbcG9zaXRpb25dKSk7CisgICAgICAgICAgICByZXN1bHQtPnB1dERp
cmVjdEluZGV4KGV4ZWMsIHBvc2l0aW9uLCBqc1NpbmdsZUNoYXJhY3RlclN0cmluZyh2bSwgaW5w
dXRbcG9zaXRpb25dKSk7CiAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBl
bmNvZGVkSlNWYWx1ZSgpKTsKICAgICAgICAgfSB3aGlsZSAoKytwb3NpdGlvbiA8IGxpbWl0KTsK
IApAQCAtMTM2Niw3ICsxMzY2LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJp
bmdQcm90bwogICAgIGRvdWJsZSBsZW5ndGggPSBhMS5pc1VuZGVmaW5lZCgpID8gbGVuIDogYTEu
dG9JbnRlZ2VyKGV4ZWMpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRK
U1ZhbHVlKCkpOwogICAgIGlmIChzdGFydCA+PSBsZW4gfHwgbGVuZ3RoIDw9IDApCi0gICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNFbXB0eVN0cmluZyhleGVjKSk7CisgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNFbXB0eVN0cmluZyh2bSkpOwogICAgIGlmIChzdGFydCA8
IDApIHsKICAgICAgICAgc3RhcnQgKz0gbGVuOwogICAgICAgICBpZiAoc3RhcnQgPCAwKQpAQCAt
MTM3OSw3ICsxMzc5LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90
bwogICAgIHNjb3BlLnJlbGVhc2UoKTsKICAgICBpZiAoanNTdHJpbmcpCiAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNTdWJzdHJpbmcoZXhlYywganNTdHJpbmcsIHN1YnN0cmluZ1N0
YXJ0LCBzdWJzdHJpbmdMZW5ndGgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3Vi
c3RyaW5nKCZ2bSwgdVN0cmluZywgc3Vic3RyaW5nU3RhcnQsIHN1YnN0cmluZ0xlbmd0aCkpOwor
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdWJzdHJpbmcodm0sIHVTdHJpbmcsIHN1YnN0
cmluZ1N0YXJ0LCBzdWJzdHJpbmdMZW5ndGgpKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBidWlsdGluU3RyaW5nU3Vic3RySW50ZXJuYWwoRXhlY1N0YXRlKiBleGVjKQpAQCAt
MTQ1NSw3ICsxNDU1LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90
bwogICAgIFN0cmluZyBsb3dlcmNhc2VkU3RyaW5nID0gcy5jb252ZXJ0VG9Mb3dlcmNhc2VXaXRo
b3V0TG9jYWxlKCk7CiAgICAgaWYgKGxvd2VyY2FzZWRTdHJpbmcuaW1wbCgpID09IHMuaW1wbCgp
KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHNWYWwpOwotICAgIFJFTEVBU0VfQU5E
X1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKGV4ZWMsIGxvd2VyY2FzZWRT
dHJpbmcpKSk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUo
anNTdHJpbmcodm0sIGxvd2VyY2FzZWRTdHJpbmcpKSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jVG9VcHBlckNhc2UoRXhlY1N0YXRlKiBleGVjKQpA
QCAtMTQ3Myw3ICsxNDczLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQ
cm90bwogICAgIFN0cmluZyB1cHBlcmNhc2VkU3RyaW5nID0gcy5jb252ZXJ0VG9VcHBlcmNhc2VX
aXRob3V0TG9jYWxlKCk7CiAgICAgaWYgKHVwcGVyY2FzZWRTdHJpbmcuaW1wbCgpID09IHMuaW1w
bCgpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHNWYWwpOwotICAgIFJFTEVBU0Vf
QU5EX1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKGV4ZWMsIHVwcGVyY2Fz
ZWRTdHJpbmcpKSk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNv
ZGUoanNTdHJpbmcodm0sIHVwcGVyY2FzZWRTdHJpbmcpKSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jTG9jYWxlQ29tcGFyZShFeGVjU3RhdGUqIGV4
ZWMpCkBAIC0xNjAxLDcgKzE2MDEsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgdG9Mb2NhbGVD
YXNlKEV4ZWNTCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlLCBzY29wZSwg
dV9lcnJvck5hbWUoZXJyb3IpKTsKIAogICAgIC8vIDE4LiBSZXR1cm4gTC4KLSAgICBSRUxFQVNF
X0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyhzdGF0ZSwgbG93ZXIp
KSk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUoanNTdHJp
bmcodm0sIGxvd2VyKSkpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmlu
Z1Byb3RvRnVuY1RvTG9jYWxlTG93ZXJDYXNlKEV4ZWNTdGF0ZSogc3RhdGUpCkBAIC0xNjUwLDcg
KzE2NTAsNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUgdHJpbVN0cmluZyhFeGVjU3RhCiAgICAg
aWYgKGxlZnQgPT0gMCAmJiByaWdodCA9PSBzdHIubGVuZ3RoKCkgJiYgdGhpc1ZhbHVlLmlzU3Ry
aW5nKCkpCiAgICAgICAgIHJldHVybiB0aGlzVmFsdWU7CiAKLSAgICBSRUxFQVNFX0FORF9SRVRV
Uk4oc2NvcGUsIGpzU3RyaW5nKGV4ZWMsIHN0ci5zdWJzdHJpbmdTaGFyaW5nSW1wbChsZWZ0LCBy
aWdodCAtIGxlZnQpKSk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBqc1N0cmluZyh2
bSwgc3RyLnN1YnN0cmluZ1NoYXJpbmdJbXBsKGxlZnQsIHJpZ2h0IC0gbGVmdCkpKTsKIH0KIAog
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNUcmltKEV4ZWNTdGF0
ZSogZXhlYykKQEAgLTE5MDEsNyArMTkwMSw3IEBAIHN0YXRpYyBKU1ZhbHVlIG5vcm1hbGl6ZShF
eGVjU3RhdGUqIGV4ZWMKICAgICB1bm9ybTJfbm9ybWFsaXplKG5vcm1hbGl6ZXIsIGNoYXJhY3Rl
cnMsIHZpZXcubGVuZ3RoKCksIGJ1ZmZlciwgbm9ybWFsaXplZFN0cmluZ0xlbmd0aCwgJnN0YXR1
cyk7CiAgICAgQVNTRVJUKFVfU1VDQ0VTUyhzdGF0dXMpKTsKIAotICAgIFJFTEVBU0VfQU5EX1JF
VFVSTihzY29wZSwganNTdHJpbmcoJnZtLCBXVEZNb3ZlKHJlc3VsdCkpKTsKKyAgICBSRUxFQVNF
X0FORF9SRVRVUk4oc2NvcGUsIGpzU3RyaW5nKHZtLCBXVEZNb3ZlKHJlc3VsdCkpKTsKIH0KIAog
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNOb3JtYWxpemUoRXhl
Y1N0YXRlKiBleGVjKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5n
UHJvdG90eXBlSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0cmluZ1Byb3RvdHlwZUlubGluZXMuaAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlSW5saW5lcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBAIEFMV0FZU19JTkxJTkUgSlNTdHJpbmcqIHN0cmlu
Z1NsaWNlKEV4ZWMKICAgICAgICAgICAgIHRvID0gbGVuZ3RoOwogICAgICAgICByZXR1cm4ganNT
dWJzdHJpbmcodm0sIGV4ZWMsIHN0cmluZywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGZyb20pLCBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4odG8pIC0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGZyb20pKTsK
ICAgICB9Ci0gICAgcmV0dXJuIGpzRW1wdHlTdHJpbmcoJnZtKTsKKyAgICByZXR1cm4ganNFbXB0
eVN0cmluZyh2bSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUmVjdXJzaW9uQ2hlY2tlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUmVjdXJzaW9uQ2hlY2tlci5j
cHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0
cmluZ1JlY3Vyc2lvbkNoZWNrZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMiwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDExLTIwMTkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtMzUsNyArMzUsNyBAQCBK
U1ZhbHVlIFN0cmluZ1JlY3Vyc2lvbkNoZWNrZXI6OnRocm93U3RhCiAKIEpTVmFsdWUgU3RyaW5n
UmVjdXJzaW9uQ2hlY2tlcjo6ZW1wdHlTdHJpbmcoKQogewotICAgIHJldHVybiBqc0VtcHR5U3Ry
aW5nKG1fZXhlYyk7CisgICAgcmV0dXJuIGpzRW1wdHlTdHJpbmcobV9leGVjLT52bSgpKTsKIH0K
IAogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3Bw
CShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1
Y3R1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDI2LDkgKzEwMjYsOSBAQCB2b2lkIFN0cnVj
dHVyZTo6ZGlkVHJhbnNpdGlvbkZyb21UaGlzU3RyCiAKICAgICBpZiAoZGVmZXJyZWQpIHsKICAg
ICAgICAgQVNTRVJUKGRlZmVycmVkLT5zdHJ1Y3R1cmUoKSA9PSB0aGlzKTsKLSAgICAgICAgbV90
cmFuc2l0aW9uV2F0Y2hwb2ludFNldC5maXJlQWxsKCp2bSgpLCBkZWZlcnJlZCk7CisgICAgICAg
IG1fdHJhbnNpdGlvbldhdGNocG9pbnRTZXQuZmlyZUFsbCh2bSgpLCBkZWZlcnJlZCk7CiAgICAg
fSBlbHNlCi0gICAgICAgIG1fdHJhbnNpdGlvbldhdGNocG9pbnRTZXQuZmlyZUFsbCgqdm0oKSwg
U3RydWN0dXJlRmlyZURldGFpbCh0aGlzKSk7CisgICAgICAgIG1fdHJhbnNpdGlvbldhdGNocG9p
bnRTZXQuZmlyZUFsbCh2bSgpLCBTdHJ1Y3R1cmVGaXJlRGV0YWlsKHRoaXMpKTsKIH0KIAogdm9p
ZCBTdHJ1Y3R1cmU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlz
aXRvcikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlubGlu
ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1
cmVJbmxpbmVzLmgJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0cnVjdHVyZUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMyOSw3ICszMjks
NyBAQCBpbmxpbmUgdm9pZCBTdHJ1Y3R1cmU6OmRpZFJlcGxhY2VQcm9wZXJ0CiAgICAgV2F0Y2hw
b2ludFNldCogc2V0ID0gbWFwLT5nZXQob2Zmc2V0KTsKICAgICBpZiAoTElLRUxZKCFzZXQpKQog
ICAgICAgICByZXR1cm47Ci0gICAgc2V0LT5maXJlQWxsKCp2bSgpLCAiUHJvcGVydHkgZGlkIGdl
dCByZXBsYWNlZCIpOworICAgIHNldC0+ZmlyZUFsbCh2bSgpLCAiUHJvcGVydHkgZGlkIGdldCBy
ZXBsYWNlZCIpOwogfQogCiBpbmxpbmUgV2F0Y2hwb2ludFNldCogU3RydWN0dXJlOjpwcm9wZXJ0
eVJlcGxhY2VtZW50V2F0Y2hwb2ludFNldChQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCkBAIC01NTks
NyArNTU5LDcgQEAgQUxXQVlTX0lOTElORSBib29sIFN0cnVjdHVyZTo6c2hvdWxkQ29udgogICAg
IGlmIChhLT5zdG9yZWRQcm90b3R5cGUoKSA9PSBiLT5zdG9yZWRQcm90b3R5cGUoKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgVk0mIHZtID0gKmEtPnZtKCk7CisgICAgVk0mIHZtID0g
YS0+dm0oKTsKICAgICBKU09iamVjdCogYU9iaiA9IGEtPnN0b3JlZFByb3RvdHlwZU9iamVjdCgp
OwogICAgIEpTT2JqZWN0KiBiT2JqID0gYi0+c3RvcmVkUHJvdG90eXBlT2JqZWN0KCk7CiAgICAg
d2hpbGUgKGFPYmogJiYgYk9iaikgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3ltYm9sQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N5bWJvbENvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sQ29uc3RydWN0b3IuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIt
MjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgWXVzdWtlIFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPi4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKQEAgLTY0LDcgKzY0LDcgQEAgU3ltYm9sQ29uc3RydWN0b3I6OlN5bWJvbENvbnN0cnVjdG9y
KFZNJgogfQogCiAjZGVmaW5lIElOSVRJQUxJWkVfV0VMTF9LTk9XTl9TWU1CT0xTKG5hbWUpIFwK
LXB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2
bSwgI25hbWUpLCBTeW1ib2w6OmNyZWF0ZSh2bSwgc3RhdGljX2Nhc3Q8U3ltYm9sSW1wbCY+KCp2
bS5wcm9wZXJ0eU5hbWVzLT5uYW1lIyNTeW1ib2wuaW1wbCgpKSksIFByb3BlcnR5QXR0cmlidXRl
OjpEb250RW51bSB8IFByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgUHJvcGVydHlBdHRy
aWJ1dGU6OlJlYWRPbmx5KTsKK3B1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKHZtLCAjbmFtZSksIFN5bWJvbDo6Y3JlYXRlKHZtLCBzdGF0aWNfY2Fz
dDxTeW1ib2xJbXBsJj4oKnZtLnByb3BlcnR5TmFtZXMtPm5hbWUjI1N5bWJvbC5pbXBsKCkpKSwg
UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtIHwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnREZWxl
dGUgfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpOwogCiB2b2lkIFN5bWJvbENvbnN0cnVj
dG9yOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFN5bWJvbFByb3RvdHlwZSogcHJvdG90eXBlKQog
ewpAQCAtMTIxLDcgKzEyMSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3ltYm9s
Q29uc3QKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAog
ICAgIEFTU0VSVCh1aWQuc3ltYm9sUmVnaXN0cnkoKSA9PSAmdm0uc3ltYm9sUmVnaXN0cnkoKSk7
Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyhleGVjLCAmdWlkKSk7CisgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyh2bSwgJnVpZCkpOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFBy
b3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3ltYm9sUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3ltYm9sUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDE1IFl1c3VrZSBTdXp1a2kg
PHV0YXRhbmUudGVhQGdtYWlsLmNvbT4uCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC02Miw3ICs2Miw3
IEBAIFN5bWJvbFByb3RvdHlwZTo6U3ltYm9sUHJvdG90eXBlKFZNJiB2bSwKIHZvaWQgU3ltYm9s
UHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QpCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwotICAgIHB1dERpcmVjdFdp
dGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT50b1N0cmluZ1RhZ1N5bWJvbCwg
anNTdHJpbmcoJnZtLCAiU3ltYm9sIiksIFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8IFBy
b3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSk7CisgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRp
b24odm0sIHZtLnByb3BlcnR5TmFtZXMtPnRvU3RyaW5nVGFnU3ltYm9sLCBqc1N0cmluZyh2bSwg
IlN5bWJvbCIpLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBQcm9wZXJ0eUF0dHJpYnV0
ZTo6UmVhZE9ubHkpOwogICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7CiAKICAgICBK
U0Z1bmN0aW9uKiB0b1ByaW1pdGl2ZUZ1bmN0aW9uID0gSlNGdW5jdGlvbjo6Y3JlYXRlKHZtLCBn
bG9iYWxPYmplY3QsIDEsICJbU3ltYm9sLnRvUHJpbWl0aXZlXSJfcywgc3ltYm9sUHJvdG9GdW5j
VmFsdWVPZiwgTm9JbnRyaW5zaWMpOwpAQCAtOTgsNyArOTgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIHN5bWJvbFByb3RvCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9y
KGV4ZWMsIHNjb3BlLCBTeW1ib2xEZXNjcmlwdGlvblR5cGVFcnJvcik7CiAgICAgc2NvcGUucmVs
ZWFzZSgpOwogICAgIGNvbnN0IGF1dG8gZGVzY3JpcHRpb24gPSBzeW1ib2wtPmRlc2NyaXB0aW9u
KCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShkZXNjcmlwdGlvbi5pc051bGwoKSA/IGpz
VW5kZWZpbmVkKCkgOiBqc1N0cmluZygmdm0sIGRlc2NyaXB0aW9uKSk7CisgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShkZXNjcmlwdGlvbi5pc051bGwoKSA/IGpzVW5kZWZpbmVkKCkgOiBqc1N0
cmluZyh2bSwgZGVzY3JpcHRpb24pKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBzeW1ib2xQcm90b0Z1bmNUb1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMpCkBAIC0xMDksNyArMTA5
LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzeW1ib2xQcm90bwogICAgIFN5bWJv
bCogc3ltYm9sID0gdHJ5RXh0cmFjdFN5bWJvbCh2bSwgZXhlYy0+dGhpc1ZhbHVlKCkpOwogICAg
IGlmICghc3ltYm9sKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29w
ZSwgU3ltYm9sVG9TdHJpbmdUeXBlRXJyb3IpOwotICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29w
ZSwgSlNWYWx1ZTo6ZW5jb2RlKGpzTm9udHJpdmlhbFN0cmluZygmdm0sIHN5bWJvbC0+ZGVzY3Jp
cHRpdmVTdHJpbmcoKSkpKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6
OmVuY29kZShqc05vbnRyaXZpYWxTdHJpbmcodm0sIHN5bWJvbC0+ZGVzY3JpcHRpdmVTdHJpbmco
KSkpKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzeW1ib2xQcm90b0Z1bmNW
YWx1ZU9mKEV4ZWNTdGF0ZSogZXhlYykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N5bWJvbFRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TeW1ib2xUYWJsZS5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTQsIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0yMTMsNyArMjEzLDcgQEAgdm9pZCBTeW1ib2xUYWJsZTo6c2V0UmFyZURhdGFDb2RlQmxv
Y2soQwogICAgICAgICBtX3JhcmVEYXRhID0gbWFrZVVuaXF1ZTxTeW1ib2xUYWJsZVJhcmVEYXRh
PigpOwogCiAgICAgQVNTRVJUKCFtX3JhcmVEYXRhLT5tX2NvZGVCbG9jayk7Ci0gICAgbV9yYXJl
RGF0YS0+bV9jb2RlQmxvY2suc2V0KCpjb2RlQmxvY2stPnZtKCksIHRoaXMsIGNvZGVCbG9jayk7
CisgICAgbV9yYXJlRGF0YS0+bV9jb2RlQmxvY2suc2V0KGNvZGVCbG9jay0+dm0oKSwgdGhpcywg
Y29kZUJsb2NrKTsKIH0KIAogR2xvYmFsVmFyaWFibGVJRCBTeW1ib2xUYWJsZTo6dW5pcXVlSURG
b3JWYXJpYWJsZShjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBVbmlxdWVkU3RyaW5nSW1wbCog
a2V5LCBWTSYgdm0pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZXN0UnVu
bmVyVXRpbHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1Rlc3RSdW5uZXJVdGlscy5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1Rlc3RSdW5uZXJVdGlscy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0z
OCw3ICszOCw3IEBAIEZ1bmN0aW9uRXhlY3V0YWJsZSogZ2V0RXhlY3V0YWJsZUZvckZ1bmMKICAg
ICBpZiAoIXRoZUZ1bmN0aW9uVmFsdWUuaXNDZWxsKCkpCiAgICAgICAgIHJldHVybiBudWxscHRy
OwogCi0gICAgVk0mIHZtID0gKnRoZUZ1bmN0aW9uVmFsdWUuYXNDZWxsKCktPnZtKCk7CisgICAg
Vk0mIHZtID0gdGhlRnVuY3Rpb25WYWx1ZS5hc0NlbGwoKS0+dm0oKTsKICAgICBKU0Z1bmN0aW9u
KiB0aGVGdW5jdGlvbiA9IGpzRHluYW1pY0Nhc3Q8SlNGdW5jdGlvbio+KHZtLCB0aGVGdW5jdGlv
blZhbHVlKTsKICAgICBpZiAoIXRoZUZ1bmN0aW9uKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHJldmlzaW9uIDI0OTEyOCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjUxLDcgKzI1MSw3IEBAIFZNOjpWTShWTVR5cGUgdm1UeXBlLCBIZWFwVHlwZSBoZWFwVHlw
ZSkKICNpZiBVU0UoQ0YpCiAgICAgLCBtX3J1bkxvb3AoQ0ZSdW5Mb29wR2V0Q3VycmVudCgpKQog
I2VuZGlmIC8vIFVTRShDRikKLSAgICAsIGhlYXAodGhpcywgaGVhcFR5cGUpCisgICAgLCBoZWFw
KCp0aGlzLCBoZWFwVHlwZSkKICAgICAsIGZhc3RNYWxsb2NBbGxvY2F0b3IobWFrZVVuaXF1ZTxG
YXN0TWFsbG9jQWxpZ25lZE1lbW9yeUFsbG9jYXRvcj4oKSkKICAgICAsIHByaW1pdGl2ZUdpZ2Fj
YWdlQWxsb2NhdG9yKG1ha2VVbmlxdWU8R2lnYWNhZ2VBbGlnbmVkTWVtb3J5QWxsb2NhdG9yPihH
aWdhY2FnZTo6UHJpbWl0aXZlKSkKICAgICAsIGpzVmFsdWVHaWdhY2FnZUFsbG9jYXRvcihtYWtl
VW5pcXVlPEdpZ2FjYWdlQWxpZ25lZE1lbW9yeUFsbG9jYXRvcj4oR2lnYWNhZ2U6OkpTVmFsdWUp
KQpAQCAtMzM3LDcgKzMzNyw3IEBAIFZNOjpWTShWTVR5cGUgdm1UeXBlLCBIZWFwVHlwZSBoZWFw
VHlwZSkKIAogICAgIHNtYWxsU3RyaW5ncy5pbml0aWFsaXplQ29tbW9uU3RyaW5ncygqdGhpcyk7
CiAKLSAgICBwcm9wZXJ0eU5hbWVzID0gbmV3IENvbW1vbklkZW50aWZpZXJzKHRoaXMpOworICAg
IHByb3BlcnR5TmFtZXMgPSBuZXcgQ29tbW9uSWRlbnRpZmllcnMoKnRoaXMpOwogICAgIHRlcm1p
bmF0ZWRFeGVjdXRpb25FcnJvclN0cnVjdHVyZS5zZXQoKnRoaXMsIFRlcm1pbmF0ZWRFeGVjdXRp
b25FcnJvcjo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwogICAgIHByb3Bl
cnR5TmFtZUVudW1lcmF0b3JTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3I6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICAgICBjdXN0b21H
ZXR0ZXJTZXR0ZXJTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBDdXN0b21HZXR0ZXJTZXR0ZXI6OmNyZWF0
ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKQEAgLTcwMyw3ICs3MDMsNyBAQCBOYXRp
dmVFeGVjdXRhYmxlKiBWTTo6Z2V0SG9zdEZ1bmN0aW9uKE5hCiAjaWYgRU5BQkxFKEpJVCkKICAg
ICBpZiAoY2FuVXNlSklUKCkpIHsKICAgICAgICAgcmV0dXJuIGppdFN0dWJzLT5ob3N0RnVuY3Rp
b25TdHViKAotICAgICAgICAgICAgdGhpcywgZnVuY3Rpb24sIGNvbnN0cnVjdG9yLAorICAgICAg
ICAgICAgKnRoaXMsIGZ1bmN0aW9uLCBjb25zdHJ1Y3RvciwKICAgICAgICAgICAgIGludHJpbnNp
YyAhPSBOb0ludHJpbnNpYyA/IHRodW5rR2VuZXJhdG9yRm9ySW50cmluc2ljKGludHJpbnNpYykg
OiAwLAogICAgICAgICAgICAgaW50cmluc2ljLCBzaWduYXR1cmUsIG5hbWUpOwogICAgIH0KQEAg
LTcxOCw4ICs3MTgsOCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gVk06
CiAjaWYgRU5BQkxFKEpJVCkKICAgICBpZiAoY2FuVXNlSklUKCkpIHsKICAgICAgICAgaWYgKGtp
bmQgPT0gQ29kZUZvckNhbGwpCi0gICAgICAgICAgICByZXR1cm4gaml0U3R1YnMtPmN0aUludGVy
bmFsRnVuY3Rpb25DYWxsKHRoaXMpLnJldGFnZ2VkPEpTRW50cnlQdHJUYWc+KCk7Ci0gICAgICAg
IHJldHVybiBqaXRTdHVicy0+Y3RpSW50ZXJuYWxGdW5jdGlvbkNvbnN0cnVjdCh0aGlzKS5yZXRh
Z2dlZDxKU0VudHJ5UHRyVGFnPigpOworICAgICAgICAgICAgcmV0dXJuIGppdFN0dWJzLT5jdGlJ
bnRlcm5hbEZ1bmN0aW9uQ2FsbCgqdGhpcykucmV0YWdnZWQ8SlNFbnRyeVB0clRhZz4oKTsKKyAg
ICAgICAgcmV0dXJuIGppdFN0dWJzLT5jdGlJbnRlcm5hbEZ1bmN0aW9uQ29uc3RydWN0KCp0aGlz
KS5yZXRhZ2dlZDxKU0VudHJ5UHRyVGFnPigpOwogICAgIH0KICNlbmRpZgogICAgIGlmIChraW5k
ID09IENvZGVGb3JDYWxsKQpAQCAtNzcxLDcgKzc3MSw3IEBAIHZvaWQgVk06OmRlbGV0ZUFsbENv
ZGUoRGVsZXRlQWxsQ29kZUVmZm8KIHZvaWQgVk06OnNocmlua0Zvb3RwcmludFdoZW5JZGxlKCkK
IHsKICAgICB3aGVuSWRsZShbPV0gKCkgewotICAgICAgICBzYW5pdGl6ZVN0YWNrRm9yVk0odGhp
cyk7CisgICAgICAgIHNhbml0aXplU3RhY2tGb3JWTSgqdGhpcyk7CiAgICAgICAgIGRlbGV0ZUFs
bENvZGUoRGVsZXRlQWxsQ29kZUlmTm90Q29sbGVjdGluZyk7CiAgICAgICAgIGhlYXAuY29sbGVj
dE5vdyhTeW5jaHJvbm91c25lc3M6OlN5bmMsIENvbGxlY3Rpb25TY29wZTo6RnVsbCk7CiAgICAg
ICAgIC8vIEZJWE1FOiBDb25zaWRlciBzdG9wcGluZyB2YXJpb3VzIGF1dG9tYXRpYyB0aHJlYWRz
IGhlcmUuCkBAIC05MjUsMTYgKzkyNSwxNiBAQCB2b2lkIFZNOjpnYXRoZXJTY3JhdGNoQnVmZmVy
Um9vdHMoQ29uc2VyCiB9CiAjZW5kaWYKIAotdm9pZCBsb2dTYW5pdGl6ZVN0YWNrKFZNKiB2bSkK
K3ZvaWQgbG9nU2FuaXRpemVTdGFjayhWTSYgdm0pCiB7Ci0gICAgaWYgKE9wdGlvbnM6OnZlcmJv
c2VTYW5pdGl6ZVN0YWNrKCkgJiYgdm0tPnRvcENhbGxGcmFtZSkgeworICAgIGlmIChPcHRpb25z
Ojp2ZXJib3NlU2FuaXRpemVTdGFjaygpICYmIHZtLnRvcENhbGxGcmFtZSkgewogICAgICAgICBp
bnQgZHVtbXk7CiAgICAgICAgIGF1dG8mIHN0YWNrQm91bmRzID0gVGhyZWFkOjpjdXJyZW50KCku
c3RhY2soKTsKICAgICAgICAgZGF0YUxvZygKLSAgICAgICAgICAgICJTYW5pdGl6aW5nIHN0YWNr
IGZvciBWTSA9ICIsIFJhd1BvaW50ZXIodm0pLCAiIHdpdGggdG9wIGNhbGwgZnJhbWUgYXQgIiwg
UmF3UG9pbnRlcih2bS0+dG9wQ2FsbEZyYW1lKSwKKyAgICAgICAgICAgICJTYW5pdGl6aW5nIHN0
YWNrIGZvciBWTSA9ICIsIFJhd1BvaW50ZXIoJnZtKSwgIiB3aXRoIHRvcCBjYWxsIGZyYW1lIGF0
ICIsIFJhd1BvaW50ZXIodm0udG9wQ2FsbEZyYW1lKSwKICAgICAgICAgICAgICIsIGN1cnJlbnQg
c3RhY2sgcG9pbnRlciBhdCAiLCBSYXdQb2ludGVyKCZkdW1teSksICIsIGluICIsCi0gICAgICAg
ICAgICBwb2ludGVyRHVtcCh2bS0+dG9wQ2FsbEZyYW1lLT5jb2RlQmxvY2soKSksICIsIGxhc3Qg
Y29kZSBvcmlnaW4gPSAiLAotICAgICAgICAgICAgdm0tPnRvcENhbGxGcmFtZS0+Y29kZU9yaWdp
bigpLCAiLCBsYXN0IHN0YWNrIHRvcCA9ICIsIFJhd1BvaW50ZXIodm0tPmxhc3RTdGFja1RvcCgp
KSwgIiwgaW4gc3RhY2sgcmFuZ2UgWyIsIFJhd1BvaW50ZXIoc3RhY2tCb3VuZHMub3JpZ2luKCkp
LCAiLCAiLCBSYXdQb2ludGVyKHN0YWNrQm91bmRzLmVuZCgpKSwgIl1cbiIpOworICAgICAgICAg
ICAgcG9pbnRlckR1bXAodm0udG9wQ2FsbEZyYW1lLT5jb2RlQmxvY2soKSksICIsIGxhc3QgY29k
ZSBvcmlnaW4gPSAiLAorICAgICAgICAgICAgdm0udG9wQ2FsbEZyYW1lLT5jb2RlT3JpZ2luKCks
ICIsIGxhc3Qgc3RhY2sgdG9wID0gIiwgUmF3UG9pbnRlcih2bS5sYXN0U3RhY2tUb3AoKSksICIs
IGluIHN0YWNrIHJhbmdlIFsiLCBSYXdQb2ludGVyKHN0YWNrQm91bmRzLm9yaWdpbigpKSwgIiwg
IiwgUmF3UG9pbnRlcihzdGFja0JvdW5kcy5lbmQoKSksICJdXG4iKTsKICAgICB9CiB9CiAKQEAg
LTExNDMsMTggKzExNDMsMTggQEAgdm9pZCBRdWV1ZWRUYXNrOjpydW4oKQogICAgIG1fbWljcm90
YXNrLT5ydW4obV9nbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSk7CiB9CiAKLXZvaWQgc2FuaXRp
emVTdGFja0ZvclZNKFZNKiB2bSkKK3ZvaWQgc2FuaXRpemVTdGFja0ZvclZNKFZNJiB2bSkKIHsK
ICAgICBsb2dTYW5pdGl6ZVN0YWNrKHZtKTsKLSAgICBpZiAodm0tPnRvcENhbGxGcmFtZSkgewor
ICAgIGlmICh2bS50b3BDYWxsRnJhbWUpIHsKICAgICAgICAgYXV0byYgc3RhY2tCb3VuZHMgPSBU
aHJlYWQ6OmN1cnJlbnQoKS5zdGFjaygpOwotICAgICAgICBBU1NFUlQodm0tPmN1cnJlbnRUaHJl
YWRJc0hvbGRpbmdBUElMb2NrKCkpOwotICAgICAgICBBU1NFUlRfVU5VU0VEKHN0YWNrQm91bmRz
LCBzdGFja0JvdW5kcy5jb250YWlucyh2bS0+bGFzdFN0YWNrVG9wKCkpKTsKKyAgICAgICAgQVNT
RVJUKHZtLmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOworICAgICAgICBBU1NFUlRf
VU5VU0VEKHN0YWNrQm91bmRzLCBzdGFja0JvdW5kcy5jb250YWlucyh2bS5sYXN0U3RhY2tUb3Ao
KSkpOwogICAgIH0KICNpZiBFTkFCTEUoQ19MT09QKQotICAgIHZtLT5pbnRlcnByZXRlci0+Y2xv
b3BTdGFjaygpLnNhbml0aXplU3RhY2soKTsKKyAgICB2bS5pbnRlcnByZXRlci0+Y2xvb3BTdGFj
aygpLnNhbml0aXplU3RhY2soKTsKICNlbHNlCi0gICAgc2FuaXRpemVTdGFja0ZvclZNSW1wbCh2
bSk7CisgICAgc2FuaXRpemVTdGFja0ZvclZNSW1wbCgmdm0pOwogI2VuZGlmCiB9CiAKQEAgLTEz
NTAsNyArMTM1MCw3IEBAIEpTQ2VsbCogVk06OnNlbnRpbmVsTWFwQnVja2V0U2xvdygpCiBKU1By
b3BlcnR5TmFtZUVudW1lcmF0b3IqIFZNOjplbXB0eVByb3BlcnR5TmFtZUVudW1lcmF0b3JTbG93
KCkKIHsKICAgICBBU1NFUlQoIW1fZW1wdHlQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKTsKLSAgICBQ
cm9wZXJ0eU5hbWVBcnJheSBwcm9wZXJ0eU5hbWVzKHRoaXMsIFByb3BlcnR5TmFtZU1vZGU6OlN0
cmluZ3MsIFByaXZhdGVTeW1ib2xNb2RlOjpFeGNsdWRlKTsKKyAgICBQcm9wZXJ0eU5hbWVBcnJh
eSBwcm9wZXJ0eU5hbWVzKCp0aGlzLCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzLCBQcml2YXRl
U3ltYm9sTW9kZTo6RXhjbHVkZSk7CiAgICAgYXV0byogZW51bWVyYXRvciA9IEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcjo6Y3JlYXRlKCp0aGlzLCBudWxscHRyLCAwLCAwLCBXVEZNb3ZlKHByb3Bl
cnR5TmFtZXMpKTsKICAgICBtX2VtcHR5UHJvcGVydHlOYW1lRW51bWVyYXRvci5zZXQoKnRoaXMs
IGVudW1lcmF0b3IpOwogICAgIHJldHVybiBlbnVtZXJhdG9yOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVk0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9WTS5oCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9WTS5oCSh3b3JraW5nIGNvcHkpCkBAIC02NzQsNyArNjc0LDcgQEAgcHVibGlj
OgogICAgIHN0ZDo6dW5pcXVlX3B0cjxKSVRUaHVua3M+IGppdFN0dWJzOwogICAgIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gZ2V0Q1RJU3R1YihUaHVua0dlbmVyYXRvciBn
ZW5lcmF0b3IpCiAgICAgewotICAgICAgICByZXR1cm4gaml0U3R1YnMtPmN0aVN0dWIodGhpcywg
Z2VuZXJhdG9yKTsKKyAgICAgICAgcmV0dXJuIGppdFN0dWJzLT5jdGlTdHViKCp0aGlzLCBnZW5l
cmF0b3IpOwogICAgIH0KIAogI2VuZGlmIC8vIEVOQUJMRShKSVQpCkBAIC0xMTA4LDE0ICsxMTA4
LDE0IEBAIGlubGluZSB2b2lkIFZNOjpzZXRJbml0aWFsaXppbmdPYmplY3RDbGEKIAogaW5saW5l
IEhlYXAqIFdlYWtTZXQ6OmhlYXAoKSBjb25zdAogewotICAgIHJldHVybiAmbV92bS0+aGVhcDsK
KyAgICByZXR1cm4gJm1fdm0uaGVhcDsKIH0KIAogI2lmICFFTkFCTEUoQ19MT09QKQogZXh0ZXJu
ICJDIiB2b2lkIHNhbml0aXplU3RhY2tGb3JWTUltcGwoVk0qKTsKICNlbmRpZgogCi1KU19FWFBP
UlRfUFJJVkFURSB2b2lkIHNhbml0aXplU3RhY2tGb3JWTShWTSopOwotdm9pZCBsb2dTYW5pdGl6
ZVN0YWNrKFZNKik7CitKU19FWFBPUlRfUFJJVkFURSB2b2lkIHNhbml0aXplU3RhY2tGb3JWTShW
TSYpOwordm9pZCBsb2dTYW5pdGl6ZVN0YWNrKFZNJik7CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1UcmFwcy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1UcmFwcy5jcHAJKHJldmlzaW9u
IDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJhcHMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNy0y
MDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
Ny0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMjE1LDcgKzIxNSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIFNpZ25hbEFjdGlvbjo6Tm90SGFuZGxlZDsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgQVNTRVJUKGN1cnJlbnRDb2RlQmxvY2stPmhhc0luc3RhbGxlZFZN
VHJhcEJyZWFrcG9pbnRzKCkpOwotICAgICAgICAgICAgICAgIFZNJiB2bSA9ICpjdXJyZW50Q29k
ZUJsb2NrLT52bSgpOworICAgICAgICAgICAgICAgIFZNJiB2bSA9IGN1cnJlbnRDb2RlQmxvY2st
PnZtKCk7CiAKICAgICAgICAgICAgICAgICAvLyBXZSBhcmUgaW4gSklUIGNvZGUgc28gaXQncyBz
YWZlIHRvIGFjcXVpcmUgdGhpcyBsb2NrLgogICAgICAgICAgICAgICAgIGF1dG8gY29kZUJsb2Nr
U2V0TG9ja2VyID0gaG9sZExvY2sodm0uaGVhcC5jb2RlQmxvY2tTZXQoKS5nZXRMb2NrKCkpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha01hcFByb3RvdHlwZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha01hcFByb3Rv
dHlwZS5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1dlYWtNYXBQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNiBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTkgQXBwbGUsIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDgsNyArNDgs
NyBAQCB2b2lkIFdlYWtNYXBQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNCiAgICAgSlNDX05B
VElWRV9JTlRSSU5TSUNfRlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lUSU9OKHZtLnByb3BlcnR5TmFt
ZXMtPmhhcywgcHJvdG9GdW5jV2Vha01hcEhhcywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3Bl
cnR5QXR0cmlidXRlOjpEb250RW51bSksIDEsIEpTV2Vha01hcEhhc0ludHJpbnNpYyk7CiAgICAg
SlNDX05BVElWRV9JTlRSSU5TSUNfRlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lUSU9OKHZtLnByb3Bl
cnR5TmFtZXMtPnNldCwgcHJvdG9GdW5jV2Vha01hcFNldCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSksIDIsIEpTV2Vha01hcFNldEludHJpbnNpYyk7
CiAKLSAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+
dG9TdHJpbmdUYWdTeW1ib2wsIGpzU3RyaW5nKCZ2bSwgIldlYWtNYXAiKSwgUHJvcGVydHlBdHRy
aWJ1dGU6OkRvbnRFbnVtIHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KTsKKyAgICBwdXRE
aXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+dG9TdHJpbmdUYWdT
eW1ib2wsIGpzU3RyaW5nKHZtLCAiV2Vha01hcCIpLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVu
dW0gfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpOwogfQogCiBBTFdBWVNfSU5MSU5FIHN0
YXRpYyBKU1dlYWtNYXAqIGdldFdlYWtNYXAoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTVmFsdWUg
dmFsdWUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrT2JqZWN0UmVm
UHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9XZWFrT2JqZWN0UmVmUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha09iamVjdFJlZlByb3RvdHlwZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAgdm9pZCBXZWFrT2JqZWN0UmVmUHJvdG90eXBlOjpm
aW5pc2hDcmVhdAogICAgIC8vIEZJWE1FOiBJdCB3b3VsZG4ndCBiZSBoYXJkIHRvIG1ha2UgdGhp
cyBhbiBpbnRyaW5zaWMuCiAgICAgSlNDX05BVElWRV9GVU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJ
T04odm0ucHJvcGVydHlOYW1lcy0+ZGVyZWYsIHByb3RvRnVuY1dlYWtSZWZEZXJlZiwgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSksIDApOwogCi0gICAg
cHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPnRvU3RyaW5n
VGFnU3ltYm9sLCBqc1N0cmluZygmdm0sICJXZWFrUmVmIiksIFByb3BlcnR5QXR0cmlidXRlOjpE
b250RW51bSB8IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSk7CisgICAgcHV0RGlyZWN0V2l0
aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPnRvU3RyaW5nVGFnU3ltYm9sLCBq
c1N0cmluZyh2bSwgIldlYWtSZWYiKSwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtIHwgUHJv
cGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KTsKIH0KIAogQUxXQVlTX0lOTElORSBzdGF0aWMgSlNX
ZWFrT2JqZWN0UmVmKiBnZXRXZWFrUmVmKENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU1ZhbHVlIHZh
bHVlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha1NldFByb3RvdHlw
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha1Nl
dFByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1dlYWtTZXRQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlLCBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOSBBcHBsZSwgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00Niw3
ICs0Niw3IEBAIHZvaWQgV2Vha1NldFByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0KICAgICBK
U0NfTkFUSVZFX0lOVFJJTlNJQ19GVU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJT04odm0ucHJvcGVy
dHlOYW1lcy0+aGFzLCBwcm90b0Z1bmNXZWFrU2V0SGFzLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSwgMSwgSlNXZWFrU2V0SGFzSW50cmluc2ljKTsK
ICAgICBKU0NfTkFUSVZFX0lOVFJJTlNJQ19GVU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJT04odm0u
cHJvcGVydHlOYW1lcy0+YWRkLCBwcm90b0Z1bmNXZWFrU2V0QWRkLCBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSwgMSwgSlNXZWFrU2V0QWRkSW50cmlu
c2ljKTsKIAotICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5h
bWVzLT50b1N0cmluZ1RhZ1N5bWJvbCwganNTdHJpbmcoJnZtLCAiV2Vha1NldCIpLCBQcm9wZXJ0
eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpOworICAg
IHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT50b1N0cmlu
Z1RhZ1N5bWJvbCwganNTdHJpbmcodm0sICJXZWFrU2V0IiksIFByb3BlcnR5QXR0cmlidXRlOjpE
b250RW51bSB8IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSk7CiB9CiAKIEFMV0FZU19JTkxJ
TkUgc3RhdGljIEpTV2Vha1NldCogZ2V0V2Vha1NldChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNW
YWx1ZSB2YWx1ZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9IZWFwVmVyaWZp
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9IZWFwVmVy
aWZpZXIuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9v
bHMvSGVhcFZlcmlmaWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE0NCwxMiArMTQ0LDEyIEBA
IHZvaWQgSGVhcFZlcmlmaWVyOjpwcmludFZlcmlmaWNhdGlvbkhlYWQKICAgICBDb2xsZWN0aW9u
U2NvcGUgc2NvcGUgPSBjdXJyZW50Q3ljbGUoKS5zY29wZTsKICAgICBNb25vdG9uaWNUaW1lIGdj
Q3ljbGVUaW1lc3RhbXAgPSBjdXJyZW50Q3ljbGUoKS50aW1lc3RhbXA7CiAgICAgZGF0YUxvZygi
VmVyaWZ5aW5nIGhlYXAgaW4gW3AiLCBnZXRDdXJyZW50UHJvY2Vzc0lEKCksICIsICIsIFRocmVh
ZDo6Y3VycmVudCgpLCAiXSB2bSAiLAotICAgICAgICBSYXdQb2ludGVyKG1faGVhcC0+dm0oKSks
ICIgb24gIiwgc2NvcGUsICIgR0MgQCAiLCBnY0N5Y2xlVGltZXN0YW1wLCAiXG4iKTsKKyAgICAg
ICAgUmF3UG9pbnRlcigmbV9oZWFwLT52bSgpKSwgIiBvbiAiLCBzY29wZSwgIiBHQyBAICIsIGdj
Q3ljbGVUaW1lc3RhbXAsICJcbiIpOwogfQogCiBib29sIEhlYXBWZXJpZmllcjo6dmVyaWZ5Q2Vs
bExpc3QoUGhhc2UgcGhhc2UsIENlbGxMaXN0JiBsaXN0KQogewotICAgIFZNJiB2bSA9ICptX2hl
YXAtPnZtKCk7CisgICAgVk0mIHZtID0gbV9oZWFwLT52bSgpOwogICAgIGF1dG8mIGxpdmVDZWxs
cyA9IGxpc3QuY2VsbHMoKTsKIAogICAgIGJvb2wgbGlzdE5hbWVQcmludGVkID0gZmFsc2U7CkBA
IC0yMjIsNyArMjIyLDcgQEAgYm9vbCBIZWFwVmVyaWZpZXI6OnZhbGlkYXRlSlNDZWxsKFZNKiBl
eAogICAgIGlmIChleHBlY3RlZFZNKSB7CiAgICAgICAgIFZNJiB2bSA9ICpleHBlY3RlZFZNOwog
Ci0gICAgICAgIFZNKiBjZWxsVk0gPSBjZWxsLT52bSgpOworICAgICAgICBWTSogY2VsbFZNID0g
JmNlbGwtPnZtKCk7CiAgICAgICAgIGlmIChjZWxsVk0gIT0gZXhwZWN0ZWRWTSkgewogICAgICAg
ICAgICAgcHJpbnRIZWFkZXJBbmRDZWxsKCk7CiAgICAgICAgICAgICBkYXRhTG9nKCIgaXMgZnJv
bSBhIGRpZmZlcmVudCBWTTogZXhwZWN0ZWQ6IiwgUmF3UG9pbnRlcihleHBlY3RlZFZNKSwgIiBh
Y3R1YWw6IiwgUmF3UG9pbnRlcihjZWxsVk0pLCAiXG4iKTsKQEAgLTI1NSw3ICsyNTUsNyBAQCBi
b29sIEhlYXBWZXJpZmllcjo6dmFsaWRhdGVKU0NlbGwoVk0qIGV4CiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgIH0KIAotICAgICAgICBWTSogc3RydWN0dXJlVk0gPSBzdHJ1Y3R1
cmUtPnZtKCk7CisgICAgICAgIFZNKiBzdHJ1Y3R1cmVWTSA9ICZzdHJ1Y3R1cmUtPnZtKCk7CiAg
ICAgICAgIGlmIChzdHJ1Y3R1cmVWTSAhPSBleHBlY3RlZFZNKSB7CiAgICAgICAgICAgICBwcmlu
dEhlYWRlckFuZENlbGwoKTsKICAgICAgICAgICAgIGRhdGFMb2coIiBoYXMgc3RydWN0dXJlICIs
IFJhd1BvaW50ZXIoc3RydWN0dXJlKSwgIiBmcm9tIGEgZGlmZmVyZW50IFZNOiBleHBlY3RlZDoi
LCBSYXdQb2ludGVyKGV4cGVjdGVkVk0pLCAiIGFjdHVhbDoiLCBSYXdQb2ludGVyKHN0cnVjdHVy
ZVZNKSwgIlxuIik7CkBAIC0zMDUsNyArMzA1LDcgQEAgYm9vbCBIZWFwVmVyaWZpZXI6OnZhbGlk
YXRlSlNDZWxsKFZNKiBleAogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAg
ICAgICAgIAotICAgICAgICBWTSogc3RydWN0dXJlU3RydWN0dXJlVk0gPSBzdHJ1Y3R1cmVTdHJ1
Y3R1cmUtPnZtKCk7CisgICAgICAgIFZNKiBzdHJ1Y3R1cmVTdHJ1Y3R1cmVWTSA9ICZzdHJ1Y3R1
cmVTdHJ1Y3R1cmUtPnZtKCk7CiAgICAgICAgIGlmIChzdHJ1Y3R1cmVTdHJ1Y3R1cmVWTSAhPSBl
eHBlY3RlZFZNKSB7CiAgICAgICAgICAgICBwcmludEhlYWRlckFuZENlbGwoKTsKICAgICAgICAg
ICAgIGRhdGFMb2coIiBoYXMgc3RydWN0dXJlICIsIFJhd1BvaW50ZXIoc3RydWN0dXJlKSwgIiB3
aG9zZSBzdHJ1Y3R1cmUgIiwgUmF3UG9pbnRlcihzdHJ1Y3R1cmVTdHJ1Y3R1cmUpLCAiIGlzIGZy
b20gYSBkaWZmZXJlbnQgVk06IGV4cGVjdGVkOiIsIFJhd1BvaW50ZXIoZXhwZWN0ZWRWTSksICIg
YWN0dWFsOiIsIFJhd1BvaW50ZXIoc3RydWN0dXJlU3RydWN0dXJlVk0pLCAiXG4iKTsKQEAgLTM2
NSw3ICszNjUsNyBAQCB2b2lkIEhlYXBWZXJpZmllcjo6dmVyaWZ5KEhlYXBWZXJpZmllcjo6CiB2
b2lkIEhlYXBWZXJpZmllcjo6cmVwb3J0Q2VsbChDZWxsUHJvZmlsZSYgcHJvZmlsZSwgaW50IGN5
Y2xlSW5kZXgsIEhlYXBWZXJpZmllcjo6R0NDeWNsZSYgY3ljbGUsIENlbGxMaXN0JiBsaXN0LCBj
b25zdCBjaGFyKiBwcmVmaXgpCiB7CiAgICAgSGVhcENlbGwqIGNlbGwgPSBwcm9maWxlLmNlbGwo
KTsKLSAgICBWTSogdm0gPSBtX2hlYXAtPnZtKCk7CisgICAgVk0mIHZtID0gbV9oZWFwLT52bSgp
OwogCiAgICAgaWYgKHByZWZpeCkKICAgICAgICAgZGF0YUxvZyhwcmVmaXgpOwpAQCAtMzg3LDcg
KzM4Nyw3IEBAIHZvaWQgSGVhcFZlcmlmaWVyOjpyZXBvcnRDZWxsKENlbGxQcm9maWwKIAogICAg
IGlmIChwcm9maWxlLmlzTGl2ZSgpICYmIHByb2ZpbGUuaXNKU0NlbGwoKSkgewogICAgICAgICBK
U0NlbGwqIGpzQ2VsbCA9IHByb2ZpbGUuanNDZWxsKCk7Ci0gICAgICAgIFN0cnVjdHVyZSogc3Ry
dWN0dXJlID0ganNDZWxsLT5zdHJ1Y3R1cmUoKnZtKTsKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUgPSBqc0NlbGwtPnN0cnVjdHVyZSh2bSk7CiAgICAgICAgIGRhdGFMb2coIiBzdHJ1Y3R1
cmU6IiwgUmF3UG9pbnRlcihzdHJ1Y3R1cmUpKTsKICAgICAgICAgaWYgKGpzQ2VsbC0+aXNPYmpl
Y3QoKSkgewogICAgICAgICAgICAgSlNPYmplY3QqIG9iaiA9IHN0YXRpY19jYXN0PEpTT2JqZWN0
Kj4oY2VsbCk7CkBAIC0zOTksNyArMzk5LDcgQEAgdm9pZCBIZWFwVmVyaWZpZXI6OnJlcG9ydENl
bGwoQ2VsbFByb2ZpbAogICAgIH0KIAogICAgIGRhdGFMb2coIiBpbiAiLCBjeWNsZS5zY29wZSwg
IiBHQ1siLCBjeWNsZUluZGV4LCAiXSBpbiAnIiwgbGlzdC5uYW1lKCksICInIGxpc3QgaW4gVk0g
IiwKLSAgICAgICAgUmF3UG9pbnRlcih2bSksICIgcmVjb3JkZWQgYXQgdGltZSAiLCBwcm9maWxl
LnRpbWVzdGFtcCgpLCAiXG4iKTsKKyAgICAgICAgUmF3UG9pbnRlcigmdm0pLCAiIHJlY29yZGVk
IGF0IHRpbWUgIiwgcHJvZmlsZS50aW1lc3RhbXAoKSwgIlxuIik7CiAgICAgaWYgKHByb2ZpbGUu
c3RhY2tUcmFjZSgpKQogICAgICAgICBkYXRhTG9nKCpwcm9maWxlLnN0YWNrVHJhY2UoKSk7CiB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xsYXJWTS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk0uY3BwCShyZXZp
c2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xsYXJWTS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTk5LDcgKzk5LDcgQEAgcHVibGljOgogICAgICAgICAgICAg
aWYgKGZyYW1lSW5kZXgrKyAhPSByZXF1ZXN0ZWRGcmFtZUluZGV4KQogICAgICAgICAgICAgICAg
IHJldHVybiBTdGFja1Zpc2l0b3I6OkNvbnRpbnVlOwogCi0gICAgICAgICAgICBhZGRQcm9wZXJ0
eSh2bSwgIm5hbWUiLCBqc1N0cmluZygmdm0sIHZpc2l0b3ItPmZ1bmN0aW9uTmFtZSgpKSk7Cisg
ICAgICAgICAgICBhZGRQcm9wZXJ0eSh2bSwgIm5hbWUiLCBqc1N0cmluZyh2bSwgdmlzaXRvci0+
ZnVuY3Rpb25OYW1lKCkpKTsKIAogICAgICAgICAgICAgaWYgKHZpc2l0b3ItPmNhbGxlZSgpLmlz
Q2VsbCgpKQogICAgICAgICAgICAgICAgIGFkZFByb3BlcnR5KHZtLCAiY2FsbGVlIiwgdmlzaXRv
ci0+Y2FsbGVlKCkuYXNDZWxsKCkpOwpAQCAtMTIzLDcgKzEyMyw3IEBAIHB1YmxpYzoKIHByaXZh
dGU6CiAgICAgdm9pZCBhZGRQcm9wZXJ0eShWTSYgdm0sIGNvbnN0IGNoYXIqIG5hbWUsIEpTVmFs
dWUgdmFsdWUpCiAgICAgewotICAgICAgICBJZGVudGlmaWVyIGlkZW50aWZpZXIgPSBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKCZ2bSwgbmFtZSk7CisgICAgICAgIElkZW50aWZpZXIgaWRlbnRpZmll
ciA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIG5hbWUpOwogICAgICAgICBwdXREaXJlY3Qo
dm0sIGlkZW50aWZpZXIsIHZhbHVlKTsKICAgICB9CiB9OwpAQCAtMzY5LDEzICszNjksMTQgQEAg
cHVibGljOgogCiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiBv
YmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVy
dHlTbG90JiBzbG90KQogICAgIHsKKyAgICAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICAg
ICAgQ3VzdG9tR2V0dGVyKiB0aGlzT2JqZWN0ID0ganNDYXN0PEN1c3RvbUdldHRlcio+KG9iamVj
dCk7Ci0gICAgICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gUHJvcGVydHlOYW1lKElkZW50aWZpZXI6
OmZyb21TdHJpbmcoZXhlYywgImN1c3RvbUdldHRlciIpKSkgeworICAgICAgICBpZiAocHJvcGVy
dHlOYW1lID09IFByb3BlcnR5TmFtZShJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiY3VzdG9t
R2V0dGVyIikpKSB7CiAgICAgICAgICAgICBzbG90LnNldENhY2hlYWJsZUN1c3RvbSh0aGlzT2Jq
ZWN0LCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IFByb3BlcnR5QXR0cmlidXRlOjpS
ZWFkT25seSB8IFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSwgdGhpc09iamVjdC0+Y3VzdG9t
R2V0dGVyKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgICAgIAot
ICAgICAgICBpZiAocHJvcGVydHlOYW1lID09IFByb3BlcnR5TmFtZShJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKGV4ZWMsICJjdXN0b21HZXR0ZXJBY2Nlc3NvciIpKSkgeworICAgICAgICBpZiAocHJv
cGVydHlOYW1lID09IFByb3BlcnR5TmFtZShJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiY3Vz
dG9tR2V0dGVyQWNjZXNzb3IiKSkpIHsKICAgICAgICAgICAgIHNsb3Quc2V0Q2FjaGVhYmxlQ3Vz
dG9tKHRoaXNPYmplY3QsIFByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgUHJvcGVydHlB
dHRyaWJ1dGU6OlJlYWRPbmx5IHwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtIHwgUHJvcGVy
dHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yLCB0aGlzT2JqZWN0LT5jdXN0b21HZXR0ZXJBY2Vz
c29yKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CkBAIC0zOTIsNyArMzkz
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgQ3VzdG9tR2V0dGVyKiB0aGlzT2JqZWN0ID0ganNEeW5h
bWljQ2FzdDxDdXN0b21HZXR0ZXIqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwog
ICAgICAgICBpZiAoIXRoaXNPYmplY3QpCiAgICAgICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVF
cnJvcihleGVjLCBzY29wZSk7Ci0gICAgICAgIGJvb2wgc2hvdWxkVGhyb3cgPSB0aGlzT2JqZWN0
LT5nZXQoZXhlYywgUHJvcGVydHlOYW1lKElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgInNo
b3VsZFRocm93IikpKS50b0Jvb2xlYW4oZXhlYyk7CisgICAgICAgIGJvb2wgc2hvdWxkVGhyb3cg
PSB0aGlzT2JqZWN0LT5nZXQoZXhlYywgUHJvcGVydHlOYW1lKElkZW50aWZpZXI6OmZyb21TdHJp
bmcodm0sICJzaG91bGRUaHJvdyIpKSkudG9Cb29sZWFuKGV4ZWMpOwogICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICAgICAgaWYgKHNob3Vs
ZFRocm93KQogICAgICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUp
OwpAQCAtNDA3LDcgKzQwOCw3IEBAIHByaXZhdGU6CiAgICAgICAgIEpTT2JqZWN0KiB0aGlzT2Jq
ZWN0ID0ganNEeW5hbWljQ2FzdDxKU09iamVjdCo+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1Zh
bHVlKSk7CiAgICAgICAgIGlmICghdGhpc09iamVjdCkKICAgICAgICAgICAgIHJldHVybiB0aHJv
d1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsKLSAgICAgICAgYm9vbCBzaG91bGRUaHJvdyA9IHRo
aXNPYmplY3QtPmdldChleGVjLCBQcm9wZXJ0eU5hbWUoSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhl
eGVjLCAic2hvdWxkVGhyb3ciKSkpLnRvQm9vbGVhbihleGVjKTsKKyAgICAgICAgYm9vbCBzaG91
bGRUaHJvdyA9IHRoaXNPYmplY3QtPmdldChleGVjLCBQcm9wZXJ0eU5hbWUoSWRlbnRpZmllcjo6
ZnJvbVN0cmluZyh2bSwgInNob3VsZFRocm93IikpKS50b0Jvb2xlYW4oZXhlYyk7CiAgICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgICAgICBp
ZiAoc2hvdWxkVGhyb3cpCiAgICAgICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVj
LCBzY29wZSk7CkBAIC02MTIsNyArNjEzLDcgQEAgcHVibGljOgogICAgICAgICBzdGF0aWMgRW5j
b2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBzbG93Q2FsbChFeGVjU3RhdGUqIGV4ZWMsIHZvaWQq
IHBvaW50ZXIpCiAgICAgICAgIHsKICAgICAgICAgICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0g
ICAgICAgICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAg
ICAgICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoc3RhdGljX2Nhc3Q8RE9NSklUR2V0
dGVyKj4ocG9pbnRlciktPnZhbHVlKCkpKTsKICAgICAgICAgfQogCkBAIC02NTEsNyArNjUyLDcg
QEAgdm9pZCBET01KSVRHZXR0ZXI6OmZpbmlzaENyZWF0aW9uKFZNJiB2bQogICAgIEJhc2U6OmZp
bmlzaENyZWF0aW9uKHZtKTsKICAgICBjb25zdCBET01KSVQ6OkdldHRlclNldHRlciogZG9tSklU
ID0gJkRPTUpJVEdldHRlckRPTUpJVDsKICAgICBhdXRvKiBjdXN0b21HZXR0ZXJTZXR0ZXIgPSBE
T01BdHRyaWJ1dGVHZXR0ZXJTZXR0ZXI6OmNyZWF0ZSh2bSwgZG9tSklULT5nZXR0ZXIoKSwgbnVs
bHB0ciwgRE9NQXR0cmlidXRlQW5ub3RhdGlvbiB7IERPTUpJVE5vZGU6OmluZm8oKSwgZG9tSklU
IH0pOwotICAgIHB1dERpcmVjdEN1c3RvbUFjY2Vzc29yKHZtLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKCZ2bSwgImN1c3RvbUdldHRlciIpLCBjdXN0b21HZXR0ZXJTZXR0ZXIsIFByb3BlcnR5QXR0
cmlidXRlOjpSZWFkT25seSB8IFByb3BlcnR5QXR0cmlidXRlOjpDdXN0b21BY2Nlc3Nvcik7Cisg
ICAgcHV0RGlyZWN0Q3VzdG9tQWNjZXNzb3Iodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0s
ICJjdXN0b21HZXR0ZXIiKSwgY3VzdG9tR2V0dGVyU2V0dGVyLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6
UmVhZE9ubHkgfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tQWNjZXNzb3IpOwogfQogCiBjbGFz
cyBET01KSVRHZXR0ZXJDb21wbGV4IDogcHVibGljIERPTUpJVE5vZGUgewpAQCAtNjk1LDcgKzY5
Niw3IEBAIHB1YmxpYzoKICAgICAgICAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJ
T04gc2xvd0NhbGwoRXhlY1N0YXRlKiBleGVjLCB2b2lkKiBwb2ludGVyKQogICAgICAgICB7CiAg
ICAgICAgICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgICAgICAgICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgICAgICAgICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CiAgICAgICAgICAgICBhdXRvKiBvYmplY3QgPSBzdGF0aWNfY2Fz
dDxET01KSVROb2RlKj4ocG9pbnRlcik7CiAgICAgICAgICAgICBhdXRvKiBkb21qaXRHZXR0ZXJD
b21wbGV4ID0ganNEeW5hbWljQ2FzdDxET01KSVRHZXR0ZXJDb21wbGV4Kj4odm0sIG9iamVjdCk7
CkBAIC03NjEsOCArNzYyLDggQEAgdm9pZCBET01KSVRHZXR0ZXJDb21wbGV4OjpmaW5pc2hDcmVh
dGlvbgogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBjb25zdCBET01KSVQ6Okdl
dHRlclNldHRlciogZG9tSklUID0gJkRPTUpJVEdldHRlckNvbXBsZXhET01KSVQ7CiAgICAgYXV0
byogY3VzdG9tR2V0dGVyU2V0dGVyID0gRE9NQXR0cmlidXRlR2V0dGVyU2V0dGVyOjpjcmVhdGUo
dm0sIGRvbUpJVC0+Z2V0dGVyKCksIG51bGxwdHIsIERPTUF0dHJpYnV0ZUFubm90YXRpb24geyBE
T01KSVRHZXR0ZXJDb21wbGV4OjppbmZvKCksIGRvbUpJVCB9KTsKLSAgICBwdXREaXJlY3RDdXN0
b21BY2Nlc3Nvcih2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJjdXN0b21HZXR0ZXIi
KSwgY3VzdG9tR2V0dGVyU2V0dGVyLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBQcm9w
ZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tQWNjZXNzb3IpOwotICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0
aW9uKHZtLCBnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiZW5hYmxl
RXhjZXB0aW9uIiksIDAsIGZ1bmN0aW9uRW5hYmxlRXhjZXB0aW9uLCBOb0ludHJpbnNpYywgMCk7
CisgICAgcHV0RGlyZWN0Q3VzdG9tQWNjZXNzb3Iodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmco
dm0sICJjdXN0b21HZXR0ZXIiKSwgY3VzdG9tR2V0dGVyU2V0dGVyLCBQcm9wZXJ0eUF0dHJpYnV0
ZTo6UmVhZE9ubHkgfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tQWNjZXNzb3IpOworICAgIHB1
dERpcmVjdE5hdGl2ZUZ1bmN0aW9uKHZtLCBnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21T
dHJpbmcodm0sICJlbmFibGVFeGNlcHRpb24iKSwgMCwgZnVuY3Rpb25FbmFibGVFeGNlcHRpb24s
IE5vSW50cmluc2ljLCAwKTsKIH0KIAogY2xhc3MgRE9NSklURnVuY3Rpb25PYmplY3QgOiBwdWJs
aWMgRE9NSklUTm9kZSB7CkBAIC04MDMsNyArODA0LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBF
bmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIGZ1bmN0aW9uV2l0aG91dFR5cGVDaGVjayhFeGVj
U3RhdGUqIGV4ZWMsIERPTUpJVE5vZGUqIG5vZGUpCiAgICAgewogICAgICAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOwotICAgICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhl
Yyk7CisgICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKG5vZGUtPnZhbHVlKCkpKTsKICAg
ICB9CiAKQEAgLTgzMyw3ICs4MzQsNyBAQCBzdGF0aWMgY29uc3QgRE9NSklUOjpTaWduYXR1cmUg
RE9NSklURnVuCiB2b2lkIERPTUpJVEZ1bmN0aW9uT2JqZWN0OjpmaW5pc2hDcmVhdGlvbihWTSYg
dm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3Jl
YXRpb24odm0pOwotICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9uKHZtLCBnbG9iYWxPYmplY3Qs
IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiZnVuYyIpLCAwLCBmdW5jdGlvbldpdGhUeXBl
Q2hlY2ssIE5vSW50cmluc2ljLCAmRE9NSklURnVuY3Rpb25PYmplY3RTaWduYXR1cmUsIHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpKTsKKyAgICBwdXRE
aXJlY3ROYXRpdmVGdW5jdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKHZtLCAiZnVuYyIpLCAwLCBmdW5jdGlvbldpdGhUeXBlQ2hlY2ssIE5vSW50cmluc2ljLCAm
RE9NSklURnVuY3Rpb25PYmplY3RTaWduYXR1cmUsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9w
ZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpKTsKIH0KIAogY2xhc3MgRE9NSklUQ2hlY2tTdWJDbGFz
c09iamVjdCA6IHB1YmxpYyBET01KSVROb2RlIHsKQEAgLTg3NCw3ICs4NzUsNyBAQCBwdWJsaWM6
CiAgICAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gZnVuY3Rpb25XaXRob3V0
VHlwZUNoZWNrKEV4ZWNTdGF0ZSogZXhlYywgRE9NSklUTm9kZSogbm9kZSkKICAgICB7CiAgICAg
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIoJnZtLCBleGVjKTsKKyAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2
bSwgZXhlYyk7CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIobm9kZS0+
dmFsdWUoKSkpOwogICAgIH0KIApAQCAtODg3LDcgKzg4OCw3IEBAIHN0YXRpYyBjb25zdCBET01K
SVQ6OlNpZ25hdHVyZSBET01KSVRDaGUKIHZvaWQgRE9NSklUQ2hlY2tTdWJDbGFzc09iamVjdDo6
ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogewog
ICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKLSAgICBwdXREaXJlY3ROYXRpdmVGdW5jdGlv
bih2bSwgZ2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImZ1bmMiKSwg
MCwgZnVuY3Rpb25XaXRoVHlwZUNoZWNrLCBOb0ludHJpbnNpYywgJkRPTUpJVENoZWNrU3ViQ2xh
c3NPYmplY3RTaWduYXR1cmUsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0
ZTo6UmVhZE9ubHkpKTsKKyAgICBwdXREaXJlY3ROYXRpdmVGdW5jdGlvbih2bSwgZ2xvYmFsT2Jq
ZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiZnVuYyIpLCAwLCBmdW5jdGlvbldpdGhU
eXBlQ2hlY2ssIE5vSW50cmluc2ljLCAmRE9NSklUQ2hlY2tTdWJDbGFzc09iamVjdFNpZ25hdHVy
ZSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSkpOwog
fQogCiBjbGFzcyBET01KSVRHZXR0ZXJCYXNlSlNPYmplY3QgOiBwdWJsaWMgRE9NSklUTm9kZSB7
CkBAIC05MzEsNyArOTMyLDcgQEAgcHVibGljOgogICAgICAgICBzdGF0aWMgRW5jb2RlZEpTVmFs
dWUgSklUX09QRVJBVElPTiBzbG93Q2FsbChFeGVjU3RhdGUqIGV4ZWMsIHZvaWQqIHBvaW50ZXIp
CiAgICAgICAgIHsKICAgICAgICAgICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgICAgICAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgICAgICAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICAgICAgICAgIEpTT2Jq
ZWN0KiBvYmplY3QgPSBzdGF0aWNfY2FzdDxKU09iamVjdCo+KHBvaW50ZXIpOwogICAgICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShvYmplY3QtPmdldFByb3RvdHlwZURpcmVjdCh2bSkp
OwogICAgICAgICB9CkBAIC05NzEsNyArOTcyLDcgQEAgdm9pZCBET01KSVRHZXR0ZXJCYXNlSlNP
YmplY3Q6OmZpbmlzaENyZQogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBjb25z
dCBET01KSVQ6OkdldHRlclNldHRlciogZG9tSklUID0gJkRPTUpJVEdldHRlckJhc2VKU09iamVj
dERPTUpJVDsKICAgICBhdXRvKiBjdXN0b21HZXR0ZXJTZXR0ZXIgPSBET01BdHRyaWJ1dGVHZXR0
ZXJTZXR0ZXI6OmNyZWF0ZSh2bSwgZG9tSklULT5nZXR0ZXIoKSwgbnVsbHB0ciwgRE9NQXR0cmli
dXRlQW5ub3RhdGlvbiB7IEpTT2JqZWN0OjppbmZvKCksIGRvbUpJVCB9KTsKLSAgICBwdXREaXJl
Y3RDdXN0b21BY2Nlc3Nvcih2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJjdXN0b21H
ZXR0ZXIiKSwgY3VzdG9tR2V0dGVyU2V0dGVyLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkg
fCBQcm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tQWNjZXNzb3IpOworICAgIHB1dERpcmVjdEN1c3Rv
bUFjY2Vzc29yKHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiY3VzdG9tR2V0dGVyIiks
IGN1c3RvbUdldHRlclNldHRlciwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgUHJvcGVy
dHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yKTsKIH0KIAogY2xhc3MgTWVzc2FnZSA6IHB1Ymxp
YyBUaHJlYWRTYWZlUmVmQ291bnRlZDxNZXNzYWdlPiB7CkBAIC0xMDM1LDcgKzEwMzYsNyBAQCBz
dGF0aWMgYm9vbCBjdXN0b21TZXRBY2Nlc3NvcihFeGVjU3RhdGUqCiAgICAgUkVMRUFTRV9BU1NF
UlQodmFsdWUuaXNPYmplY3QoKSk7CiAgICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KHZh
bHVlKTsKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChvYmplY3QpOwotICAgIG9iamVjdC0+cHV0
KG9iamVjdCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJyZXN1bHQiKSwgSlNW
YWx1ZTo6ZGVjb2RlKHRoaXNPYmplY3QpLCBzbG90KTsKKyAgICBvYmplY3QtPnB1dChvYmplY3Qs
IGV4ZWMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJyZXN1bHQiKSwgSlNWYWx1ZTo6ZGVj
b2RlKHRoaXNPYmplY3QpLCBzbG90KTsKIAogICAgIHJldHVybiB0cnVlOwogfQpAQCAtMTA1MCw3
ICsxMDUxLDcgQEAgc3RhdGljIGJvb2wgY3VzdG9tU2V0VmFsdWUoRXhlY1N0YXRlKiBleAogICAg
IFJFTEVBU0VfQVNTRVJUKHZhbHVlLmlzT2JqZWN0KCkpOwogICAgIEpTT2JqZWN0KiBvYmplY3Qg
PSBhc09iamVjdCh2YWx1ZSk7CiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3Qob2JqZWN0KTsKLSAg
ICBvYmplY3QtPnB1dChvYmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAi
cmVzdWx0IiksIEpTVmFsdWU6OmRlY29kZShzbG90VmFsdWUpLCBzbG90KTsKKyAgICBvYmplY3Qt
PnB1dChvYmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJyZXN1bHQiKSwg
SlNWYWx1ZTo6ZGVjb2RlKHNsb3RWYWx1ZSksIHNsb3QpOwogCiAgICAgcmV0dXJuIHRydWU7CiB9
CkBAIC0xMDU5LDkgKzEwNjAsOSBAQCB2b2lkIEpTVGVzdEN1c3RvbUdldHRlclNldHRlcjo6Zmlu
aXNoQ3JlCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogCi0gICAgcHV0RGlyZWN0
Q3VzdG9tQWNjZXNzb3Iodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiY3VzdG9tVmFs
dWUiKSwKKyAgICBwdXREaXJlY3RDdXN0b21BY2Nlc3Nvcih2bSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZyh2bSwgImN1c3RvbVZhbHVlIiksCiAgICAgICAgIEN1c3RvbUdldHRlclNldHRlcjo6Y3Jl
YXRlKHZtLCBjdXN0b21HZXRWYWx1ZSwgY3VzdG9tU2V0VmFsdWUpLCAwKTsKLSAgICBwdXREaXJl
Y3RDdXN0b21BY2Nlc3Nvcih2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJjdXN0b21B
Y2Nlc3NvciIpLAorICAgIHB1dERpcmVjdEN1c3RvbUFjY2Vzc29yKHZtLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCAiY3VzdG9tQWNjZXNzb3IiKSwKICAgICAgICAgQ3VzdG9tR2V0dGVyU2V0
dGVyOjpjcmVhdGUodm0sIGN1c3RvbUdldEFjY2Vzc29yLCBjdXN0b21TZXRBY2Nlc3NvciksIHN0
YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tQWNjZXNzb3IpKTsK
IH0KIApAQCAtMTEzOCw4ICsxMTM5LDggQEAgcHVibGljOgogICAgICAgICBCYXNlOjpmaW5pc2hD
cmVhdGlvbih2bSk7CiAKICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHRo
aXMtPmdsb2JhbE9iamVjdCh2bSk7Ci0gICAgICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9uKHZt
LCBnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiYWRkQnl0ZXMiKSwg
MCwgZnVuY3Rpb25XYXNtU3RyZWFtaW5nUGFyc2VyQWRkQnl0ZXMsIE5vSW50cmluc2ljLCBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7Ci0gICAgICAg
IHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9uKHZtLCBnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZy
b21TdHJpbmcoJnZtLCAiZmluYWxpemUiKSwgMCwgZnVuY3Rpb25XYXNtU3RyZWFtaW5nUGFyc2Vy
RmluYWxpemUsIE5vSW50cmluc2ljLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRy
aWJ1dGU6OkRvbnRFbnVtKSk7CisgICAgICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9uKHZtLCBn
bG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJhZGRCeXRlcyIpLCAwLCBm
dW5jdGlvbldhc21TdHJlYW1pbmdQYXJzZXJBZGRCeXRlcywgTm9JbnRyaW5zaWMsIHN0YXRpY19j
YXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKKyAgICAgICAgcHV0
RGlyZWN0TmF0aXZlRnVuY3Rpb24odm0sIGdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZyh2bSwgImZpbmFsaXplIiksIDAsIGZ1bmN0aW9uV2FzbVN0cmVhbWluZ1BhcnNlckZpbmFs
aXplLCBOb0ludHJpbnNpYywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRl
OjpEb250RW51bSkpOwogICAgIH0KIAogICAgIERFQ0xBUkVfSU5GTzsKQEAgLTEzMzAsNyArMTMz
MSw3IEBAIHN0YXRpYyBGdW5jdGlvbkV4ZWN1dGFibGUqIGdldEV4ZWN1dGFibGUKICAgICBpZiAo
IXRoZUZ1bmN0aW9uVmFsdWUuaXNDZWxsKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAg
IAotICAgIFZNJiB2bSA9ICp0aGVGdW5jdGlvblZhbHVlLmFzQ2VsbCgpLT52bSgpOworICAgIFZN
JiB2bSA9IHRoZUZ1bmN0aW9uVmFsdWUuYXNDZWxsKCktPnZtKCk7CiAgICAgSlNGdW5jdGlvbiog
dGhlRnVuY3Rpb24gPSBqc0R5bmFtaWNDYXN0PEpTRnVuY3Rpb24qPih2bSwgdGhlRnVuY3Rpb25W
YWx1ZSk7CiAgICAgaWYgKCF0aGVGdW5jdGlvbikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBA
IC0xNDk4LDcgKzE0OTksNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBm
dW5jCiAgICAgV1RGOjpTdHJpbmdQcmludFN0cmVhbSBzdHJlYW07CiAgICAgaWYgKGNvZGVCbG9j
aykgewogICAgICAgICBzdHJlYW0ucHJpbnQoKmNvZGVCbG9jayk7Ci0gICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNTdHJpbmcoZXhlYywgc3RyZWFtLnRvU3RyaW5nKCkpKTsKKyAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyhleGVjLT52bSgpLCBzdHJlYW0udG9T
dHJpbmcoKSkpOwogICAgIH0KICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwogfQpAQCAtMTYzMSw3ICsxNjMyLDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZnVuYwogCiAgICAgV1RGOjpTdHJpbmdQcmludFN0cmVhbSBzdHJlYW07CiAgICAg
c3RyZWFtLnByaW50KEluZGV4aW5nVHlwZUR1bXAoZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCku
Z2V0T2JqZWN0KCktPmluZGV4aW5nTW9kZSgpKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1N0cmluZyhleGVjLCBzdHJlYW0udG9TdHJpbmcoKSkpOworICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNTdHJpbmcoZXhlYy0+dm0oKSwgc3RyZWFtLnRvU3RyaW5nKCkpKTsKIH0KIAog
c3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25JbmxpbmVDYXBhY2l0
eShFeGVjU3RhdGUqIGV4ZWMpCkBAIC0xNjU0LDcgKzE2NTUsNyBAQCBzdGF0aWMgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jCiAgICAgICAgIHN0cmVhbS5wcmludChleGVjLT51bmNo
ZWNrZWRBcmd1bWVudChpKSk7CiAgICAgfQogICAgIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNTdHJpbmcoZXhlYywgc3RyZWFtLnRvU3RyaW5nKCkpKTsKKyAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzU3RyaW5nKGV4ZWMtPnZtKCksIHN0cmVhbS50b1N0cmluZygpKSk7CiB9CiAK
IC8vIEdldHMgdGhlIHBpZCBvZiB0aGUgY3VycmVudCBwcm9jZXNzLgpAQCAtMTg2MCw3ICsxODYx
LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuYwogICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogCiAgICAgY29uc3QgU291
cmNlQ29kZSYgc291cmNlID0gbWFrZVNvdXJjZShmdW5jdGlvblRleHQsIHsgfSk7Ci0gICAgSlNG
dW5jdGlvbiogZnVuYyA9IEpTRnVuY3Rpb246OmNyZWF0ZSh2bSwgY3JlYXRlQnVpbHRpbkV4ZWN1
dGFibGUodm0sIHNvdXJjZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJmb28iKSwgQ29u
c3RydWN0b3JLaW5kOjpOb25lLCBDb25zdHJ1Y3RBYmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3QpLT5s
aW5rKHZtLCBudWxscHRyLCBzb3VyY2UpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpOwor
ICAgIEpTRnVuY3Rpb24qIGZ1bmMgPSBKU0Z1bmN0aW9uOjpjcmVhdGUodm0sIGNyZWF0ZUJ1aWx0
aW5FeGVjdXRhYmxlKHZtLCBzb3VyY2UsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJmb28i
KSwgQ29uc3RydWN0b3JLaW5kOjpOb25lLCBDb25zdHJ1Y3RBYmlsaXR5OjpDYW5ub3RDb25zdHJ1
Y3QpLT5saW5rKHZtLCBudWxscHRyLCBzb3VyY2UpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCkpOwogCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShmdW5jKTsKIH0KQEAgLTE4NzUsNyAr
MTg3Niw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmMKIAogICAg
IFN0cmluZyBzdHIgPSBhc1N0cmluZyhleGVjLT5hcmd1bWVudCgxKSktPnZhbHVlKGV4ZWMpOwog
Ci0gICAgU3ltYm9sSW1wbCogc3ltYm9sID0gdm0ucHJvcGVydHlOYW1lcy0+bG9va1VwUHJpdmF0
ZU5hbWUoSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCBzdHIpKTsKKyAgICBTeW1ib2xJbXBs
KiBzeW1ib2wgPSB2bS5wcm9wZXJ0eU5hbWVzLT5sb29rVXBQcml2YXRlTmFtZShJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKHZtLCBzdHIpKTsKICAgICBpZiAoIXN5bWJvbCkKICAgICAgICAgcmV0dXJu
IHRocm93Vk1FcnJvcihleGVjLCBzY29wZSwgIlVua25vd24gcHJpdmF0ZSBuYW1lLiIpOwogCkBA
IC0yMjI5LDEzICsyMjMwLDEzIEBAIHZvaWQgSlNEb2xsYXJWTTo6ZmluaXNoQ3JlYXRpb24oVk0m
IHZtKQogICAgIGFkZEZ1bmN0aW9uKHZtLCAiY3Jhc2giLCBmdW5jdGlvbkNyYXNoLCAwKTsKICAg
ICBhZGRGdW5jdGlvbih2bSwgImJyZWFrcG9pbnQiLCBmdW5jdGlvbkJyZWFrcG9pbnQsIDApOwog
Ci0gICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rpb24odm0sIGdsb2JhbE9iamVjdCwgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZygmdm0sICJkZmdUcnVlIiksIDAsIGZ1bmN0aW9uREZHVHJ1ZSwgREZHVHJ1
ZUludHJpbnNpYywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250
RW51bSkpOwotICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9uKHZtLCBnbG9iYWxPYmplY3QsIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiZnRsVHJ1ZSIpLCAwLCBmdW5jdGlvbkZUTFRydWUs
IEZUTFRydWVJbnRyaW5zaWMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0
ZTo6RG9udEVudW0pKTsKKyAgICBwdXREaXJlY3ROYXRpdmVGdW5jdGlvbih2bSwgZ2xvYmFsT2Jq
ZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiZGZnVHJ1ZSIpLCAwLCBmdW5jdGlvbkRG
R1RydWUsIERGR1RydWVJbnRyaW5zaWMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0
dHJpYnV0ZTo6RG9udEVudW0pKTsKKyAgICBwdXREaXJlY3ROYXRpdmVGdW5jdGlvbih2bSwgZ2xv
YmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiZnRsVHJ1ZSIpLCAwLCBmdW5j
dGlvbkZUTFRydWUsIEZUTFRydWVJbnRyaW5zaWMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9w
ZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKIAotICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9u
KHZtLCBnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiY3B1TWZlbmNl
IiksIDAsIGZ1bmN0aW9uQ3B1TWZlbmNlLCBDUFVNZmVuY2VJbnRyaW5zaWMsIDApOwotICAgIHB1
dERpcmVjdE5hdGl2ZUZ1bmN0aW9uKHZtLCBnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21T
dHJpbmcoJnZtLCAiY3B1UmR0c2MiKSwgMCwgZnVuY3Rpb25DcHVSZHRzYywgQ1BVUmR0c2NJbnRy
aW5zaWMsIDApOwotICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9uKHZtLCBnbG9iYWxPYmplY3Qs
IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiY3B1Q3B1aWQiKSwgMCwgZnVuY3Rpb25DcHVD
cHVpZCwgQ1BVQ3B1aWRJbnRyaW5zaWMsIDApOwotICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9u
KHZtLCBnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiY3B1UGF1c2Ui
KSwgMCwgZnVuY3Rpb25DcHVQYXVzZSwgQ1BVUGF1c2VJbnRyaW5zaWMsIDApOworICAgIHB1dERp
cmVjdE5hdGl2ZUZ1bmN0aW9uKHZtLCBnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJp
bmcodm0sICJjcHVNZmVuY2UiKSwgMCwgZnVuY3Rpb25DcHVNZmVuY2UsIENQVU1mZW5jZUludHJp
bnNpYywgMCk7CisgICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rpb24odm0sIGdsb2JhbE9iamVjdCwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImNwdVJkdHNjIiksIDAsIGZ1bmN0aW9uQ3B1UmR0
c2MsIENQVVJkdHNjSW50cmluc2ljLCAwKTsKKyAgICBwdXREaXJlY3ROYXRpdmVGdW5jdGlvbih2
bSwgZ2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiY3B1Q3B1aWQiKSwg
MCwgZnVuY3Rpb25DcHVDcHVpZCwgQ1BVQ3B1aWRJbnRyaW5zaWMsIDApOworICAgIHB1dERpcmVj
dE5hdGl2ZUZ1bmN0aW9uKHZtLCBnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmco
dm0sICJjcHVQYXVzZSIpLCAwLCBmdW5jdGlvbkNwdVBhdXNlLCBDUFVQYXVzZUludHJpbnNpYywg
MCk7CiAgICAgYWRkRnVuY3Rpb24odm0sICJjcHVDbGZsdXNoIiwgZnVuY3Rpb25DcHVDbGZsdXNo
LCAyKTsKIAogICAgIGFkZEZ1bmN0aW9uKHZtLCAibGxpbnRUcnVlIiwgZnVuY3Rpb25MTGludFRy
dWUsIDApOwpAQCAtMjMzNCwxMyArMjMzNSwxMyBAQCB2b2lkIEpTRG9sbGFyVk06OmZpbmlzaENy
ZWF0aW9uKFZNJiB2bSkKIAogdm9pZCBKU0RvbGxhclZNOjphZGRGdW5jdGlvbihWTSYgdm0sIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IGNoYXIqIG5hbWUsIE5hdGl2ZUZ1bmN0
aW9uIGZ1bmN0aW9uLCB1bnNpZ25lZCBhcmd1bWVudHMpCiB7Ci0gICAgSWRlbnRpZmllciBpZGVu
dGlmaWVyID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIG5hbWUpOworICAgIElkZW50aWZp
ZXIgaWRlbnRpZmllciA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIG5hbWUpOwogICAgIHB1
dERpcmVjdCh2bSwgaWRlbnRpZmllciwgSlNGdW5jdGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmpl
Y3QsIGFyZ3VtZW50cywgaWRlbnRpZmllci5zdHJpbmcoKSwgZnVuY3Rpb24pKTsKIH0KIAogdm9p
ZCBKU0RvbGxhclZNOjphZGRDb25zdHJ1Y3RpYmxlRnVuY3Rpb24oVk0mIHZtLCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBjaGFyKiBuYW1lLCBOYXRpdmVGdW5jdGlvbiBmdW5j
dGlvbiwgdW5zaWduZWQgYXJndW1lbnRzKQogewotICAgIElkZW50aWZpZXIgaWRlbnRpZmllciA9
IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCBuYW1lKTsKKyAgICBJZGVudGlmaWVyIGlkZW50
aWZpZXIgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBuYW1lKTsKICAgICBwdXREaXJlY3Qo
dm0sIGlkZW50aWZpZXIsIEpTRnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBhcmd1
bWVudHMsIGlkZW50aWZpZXIuc3RyaW5nKCksIGZ1bmN0aW9uLCBOb0ludHJpbnNpYywgZnVuY3Rp
b24pKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1ZNSW5zcGVjdG9y
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvVk1JbnNwZWN0
b3IuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMv
Vk1JbnNwZWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNzQsNyArMzc0LDcgQEAgdm9pZCBW
TUluc3BlY3Rvcjo6ZHVtcFJlZ2lzdGVycyhDYWxsRnJhbQogICAgICAgICBkYXRhTG9nKCJEdW1w
aW5nIGhvc3QgZnJhbWUgcmVnaXN0ZXJzIG5vdCBzdXBwb3J0ZWQuXG4iKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KLSAgICBWTSYgdm0gPSAqY29kZUJsb2NrLT52bSgpOworICAgIFZNJiB2bSA9
IGNvZGVCbG9jay0+dm0oKTsKICAgICBhdXRvIHZhbHVlQXNTdHJpbmcgPSBbJl0gKEpTVmFsdWUg
dikgLT4gQ1N0cmluZyB7CiAgICAgICAgIGlmICghdi5pc0NlbGwoKSB8fCBWTUluc3BlY3Rvcjo6
aXNWYWxpZENlbGwoJnZtLmhlYXAsIHJlaW50ZXJwcmV0X2Nhc3Q8SlNDZWxsKj4oSlNWYWx1ZTo6
ZW5jb2RlKHYpKSkpCiAgICAgICAgICAgICByZXR1cm4gdG9DU3RyaW5nKHYpOwpAQCAtNDk3LDcg
KzQ5Nyw3IEBAIHByaXZhdGU6CiAKIHZvaWQgVk1JbnNwZWN0b3I6OmR1bXBDZWxsTWVtb3J5VG9T
dHJlYW0oSlNDZWxsKiBjZWxsLCBQcmludFN0cmVhbSYgb3V0KQogewotICAgIFZNJiB2bSA9ICpj
ZWxsLT52bSgpOworICAgIFZNJiB2bSA9IGNlbGwtPnZtKCk7CiAgICAgU3RydWN0dXJlSUQgc3Ry
dWN0dXJlSUQgPSBjZWxsLT5zdHJ1Y3R1cmVJRCgpOwogICAgIFN0cnVjdHVyZSogc3RydWN0dXJl
ID0gY2VsbC0+c3RydWN0dXJlKHZtKTsKICAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlQW5k
TWlzYyA9IGNlbGwtPmluZGV4aW5nVHlwZUFuZE1pc2MoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21JbnN0YW5jZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUluc3RhbmNlLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUluc3RhbmNlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMTkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03
OSw3ICs3OSw3IEBAIHNpemVfdCBJbnN0YW5jZTo6ZXh0cmFNZW1vcnlBbGxvY2F0ZWQoKSAKIHZv
aWQgSW5zdGFuY2U6OnNldEdsb2JhbCh1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlKQogewogICAg
IEFTU0VSVChtX293bmVyKTsKLSAgICBtX2dsb2JhbHMuZ2V0KClbaV0uYW55cmVmLnNldCgqb3du
ZXI8SlNXZWJBc3NlbWJseUluc3RhbmNlPigpLT52bSgpLCBvd25lcjxKU1dlYkFzc2VtYmx5SW5z
dGFuY2U+KCksIHZhbHVlKTsKKyAgICBtX2dsb2JhbHMuZ2V0KClbaV0uYW55cmVmLnNldChvd25l
cjxKU1dlYkFzc2VtYmx5SW5zdGFuY2U+KCktPnZtKCksIG93bmVyPEpTV2ViQXNzZW1ibHlJbnN0
YW5jZT4oKSwgdmFsdWUpOwogfQogCiBKU1ZhbHVlIEluc3RhbmNlOjpnZXRGdW5jdGlvbldyYXBw
ZXIodW5zaWduZWQgaSkgY29uc3QKQEAgLTkzLDEwICs5MywxMCBAQCBKU1ZhbHVlIEluc3RhbmNl
OjpnZXRGdW5jdGlvbldyYXBwZXIodW5zCiB2b2lkIEluc3RhbmNlOjpzZXRGdW5jdGlvbldyYXBw
ZXIodW5zaWduZWQgaSwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBBU1NFUlQobV9vd25lcik7Ci0g
ICAgQVNTRVJUKHZhbHVlLmlzRnVuY3Rpb24oKm93bmVyPEpTV2ViQXNzZW1ibHlJbnN0YW5jZT4o
KS0+dm0oKSkpOworICAgIEFTU0VSVCh2YWx1ZS5pc0Z1bmN0aW9uKG93bmVyPEpTV2ViQXNzZW1i
bHlJbnN0YW5jZT4oKS0+dm0oKSkpOwogICAgIEFTU0VSVCghbV9mdW5jdGlvbldyYXBwZXJzLmNv
bnRhaW5zKGkpKTsKICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG93bmVyPEpTV2ViQXNzZW1i
bHlJbnN0YW5jZT4oKS0+Y2VsbExvY2soKSk7Ci0gICAgbV9mdW5jdGlvbldyYXBwZXJzLnNldChp
LCBXcml0ZUJhcnJpZXI8VW5rbm93bj4oKm93bmVyPEpTV2ViQXNzZW1ibHlJbnN0YW5jZT4oKS0+
dm0oKSwgb3duZXI8SlNXZWJBc3NlbWJseUluc3RhbmNlPigpLCB2YWx1ZSkpOworICAgIG1fZnVu
Y3Rpb25XcmFwcGVycy5zZXQoaSwgV3JpdGVCYXJyaWVyPFVua25vd24+KG93bmVyPEpTV2ViQXNz
ZW1ibHlJbnN0YW5jZT4oKS0+dm0oKSwgb3duZXI8SlNXZWJBc3NlbWJseUluc3RhbmNlPigpLCB2
YWx1ZSkpOwogICAgIEFTU0VSVChnZXRGdW5jdGlvbldyYXBwZXIoaSkgPT0gdmFsdWUpOwogfQog
CkBAIC0xNDMsNyArMTQzLDcgQEAgYm9vbCBzZXRXYXNtVGFibGVFbGVtZW50KEluc3RhbmNlKiBp
bnN0YQogICAgICAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKiB3YXNtRnVuY3Rpb247CiAgICAgICAg
IFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKiB3YXNtV3JhcHBlckZ1bmN0aW9uOwogCi0gICAg
ICAgIGlmIChpc1dlYkFzc2VtYmx5SG9zdEZ1bmN0aW9uKCppbnN0YW5jZS0+b3duZXI8SlNPYmpl
Y3Q+KCktPnZtKCksIHZhbHVlLCB3YXNtRnVuY3Rpb24sIHdhc21XcmFwcGVyRnVuY3Rpb24pKSB7
CisgICAgICAgIGlmIChpc1dlYkFzc2VtYmx5SG9zdEZ1bmN0aW9uKGluc3RhbmNlLT5vd25lcjxK
U09iamVjdD4oKS0+dm0oKSwgdmFsdWUsIHdhc21GdW5jdGlvbiwgd2FzbVdyYXBwZXJGdW5jdGlv
bikpIHsKICAgICAgICAgICAgIEFTU0VSVCghIXdhc21GdW5jdGlvbiB8fCAhIXdhc21XcmFwcGVy
RnVuY3Rpb24pOwogICAgICAgICAgICAgaWYgKHdhc21GdW5jdGlvbikKICAgICAgICAgICAgICAg
ICBpbnN0YW5jZS0+dGFibGUodGFibGVJbmRleCktPmFzRnVuY3JlZlRhYmxlKCktPnNldEZ1bmN0
aW9uKGluZGV4LCBqc0Nhc3Q8SlNPYmplY3QqPih2YWx1ZSksIHdhc21GdW5jdGlvbi0+aW1wb3J0
YWJsZUZ1bmN0aW9uKCksICZ3YXNtRnVuY3Rpb24tPmluc3RhbmNlKCktPmluc3RhbmNlKCkpOwpA
QCAtMTk2LDcgKzE5Niw3IEBAIGJvb2wgZG9XYXNtVGFibGVGaWxsKEluc3RhbmNlKiBpbnN0YW5j
ZSwKIEVuY29kZWRKU1ZhbHVlIGRvV2FzbVJlZkZ1bmMoSW5zdGFuY2UqIGluc3RhbmNlLCB1aW50
MzJfdCBpbmRleCkKIHsKICAgICBKU1ZhbHVlIHZhbHVlID0gaW5zdGFuY2UtPmdldEZ1bmN0aW9u
V3JhcHBlcihpbmRleCk7Ci0gICAgQVNTRVJUKHZhbHVlLmlzRnVuY3Rpb24oKmluc3RhbmNlLT5v
d25lcjxKU09iamVjdD4oKS0+dm0oKSkpOworICAgIEFTU0VSVCh2YWx1ZS5pc0Z1bmN0aW9uKGlu
c3RhbmNlLT5vd25lcjxKU09iamVjdD4oKS0+dm0oKSkpOwogICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUodmFsdWUpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
VGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21U
YWJsZS5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21UYWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE3LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE3LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNDksNyArMTQ5LDcgQEAgdm9pZCBU
YWJsZTo6c2V0KHVpbnQzMl90IGluZGV4LCBKU1ZhbHVlIAogICAgIFJFTEVBU0VfQVNTRVJUKGlz
QW55cmVmVGFibGUoKSk7CiAgICAgUkVMRUFTRV9BU1NFUlQobV9vd25lcik7CiAgICAgY2xlYXIo
aW5kZXgpOwotICAgIG1fanNWYWx1ZXMuZ2V0KClbaW5kZXggJiBtX21hc2tdLnNldCgqbV9vd25l
ci0+dm0oKSwgbV9vd25lciwgdmFsdWUpOworICAgIG1fanNWYWx1ZXMuZ2V0KClbaW5kZXggJiBt
X21hc2tdLnNldChtX293bmVyLT52bSgpLCBtX293bmVyLCB2YWx1ZSk7CiB9CiAKIEpTVmFsdWUg
VGFibGU6OmdldCh1aW50MzJfdCBpbmRleCkgY29uc3QKQEAgLTE5Myw3ICsxOTMsNyBAQCB2b2lk
IEZ1bmNSZWZUYWJsZTo6c2V0RnVuY3Rpb24odWludDMyX3QgCiAgICAgUkVMRUFTRV9BU1NFUlQo
bV9vd25lcik7CiAgICAgY2xlYXIoaW5kZXgpOwogICAgIGlmIChvcHRpb25hbFdyYXBwZXIpCi0g
ICAgICAgIG1fanNWYWx1ZXMuZ2V0KClbaW5kZXggJiBtX21hc2tdLnNldCgqbV9vd25lci0+dm0o
KSwgbV9vd25lciwgb3B0aW9uYWxXcmFwcGVyKTsKKyAgICAgICAgbV9qc1ZhbHVlcy5nZXQoKVtp
bmRleCAmIG1fbWFza10uc2V0KG1fb3duZXItPnZtKCksIG1fb3duZXIsIG9wdGlvbmFsV3JhcHBl
cik7CiAgICAgbV9pbXBvcnRhYmxlRnVuY3Rpb25zLmdldCgpW2luZGV4ICYgbV9tYXNrXSA9IGZ1
bmN0aW9uOwogICAgIG1faW5zdGFuY2VzLmdldCgpW2luZGV4ICYgbV9tYXNrXSA9IGluc3RhbmNl
OwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3Nl
bWJseS5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTV2ViQXNzZW1ibHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTk2LDggKzE5Niw4IEBA
IHN0YXRpYyB2b2lkIHJlc29sdmUoVk0mIHZtLCBFeGVjU3RhdGUqIGUKICAgICAgICAgcHJvbWlz
ZS0+cmVzb2x2ZShleGVjLCBtb2R1bGVSZWNvcmQpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIEpT
T2JqZWN0KiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjKTsKLSAgICAgICAgcmVz
dWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAibW9kdWxlIl9z
KSwgbW9kdWxlKTsKLSAgICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZy
b21TdHJpbmcoJnZtLCAiaW5zdGFuY2UiX3MpLCBpbnN0YW5jZSk7CisgICAgICAgIHJlc3VsdC0+
cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAibW9kdWxlIl9zKSwgbW9k
dWxlKTsKKyAgICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJp
bmcodm0sICJpbnN0YW5jZSJfcyksIGluc3RhbmNlKTsKICAgICAgICAgcHJvbWlzZS0+cmVzb2x2
ZShleGVjLCByZXN1bHQpOwogICAgIH0KICAgICBDTEVBUl9BTkRfUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgdm9pZCgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pT
V2ViQXNzZW1ibHlJbnN0YW5jZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcAkocmV2aXNpb24gMjQ5MTI4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjAwLDggKzIwMCw4IEBAIEpTV2ViQXNzZW1ibHlJbnN0YW5j
ZSogSlNXZWJBc3NlbWJseUluc3QKIAogICAgIC8vIEZvciBlYWNoIGltcG9ydCBpIGluIG1vZHVs
ZS5pbXBvcnRzOgogICAgIGZvciAoYXV0byYgaW1wb3J0IDogbW9kdWxlSW5mb3JtYXRpb24uaW1w
b3J0cykgewotICAgICAgICBJZGVudGlmaWVyIG1vZHVsZU5hbWUgPSBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKCZ2bSwgU3RyaW5nOjpmcm9tVVRGOChpbXBvcnQubW9kdWxlKSk7Ci0gICAgICAgIElk
ZW50aWZpZXIgZmllbGROYW1lID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIFN0cmluZzo6
ZnJvbVVURjgoaW1wb3J0LmZpZWxkKSk7CisgICAgICAgIElkZW50aWZpZXIgbW9kdWxlTmFtZSA9
IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIFN0cmluZzo6ZnJvbVVURjgoaW1wb3J0Lm1vZHVs
ZSkpOworICAgICAgICBJZGVudGlmaWVyIGZpZWxkTmFtZSA9IElkZW50aWZpZXI6OmZyb21TdHJp
bmcodm0sIFN0cmluZzo6ZnJvbVVURjgoaW1wb3J0LmZpZWxkKSk7CiAgICAgICAgIG1vZHVsZVJl
Y29yZC0+YXBwZW5kUmVxdWVzdGVkTW9kdWxlKG1vZHVsZU5hbWUpOwogICAgICAgICBtb2R1bGVS
ZWNvcmQtPmFkZEltcG9ydEVudHJ5KFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpJbXBvcnRFbnRy
eSB7CiAgICAgICAgICAgICBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6SW1wb3J0RW50cnlUeXBl
OjpTaW5nbGUsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XYXNtVG9KUy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2FzbVRvSlMu
Y3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9X
YXNtVG9KUy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkyLDE4ICs5MiwxOCBAQCBzdGF0aWMgRXhw
ZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFdhCiAgICAgICAgIGppdC5qdW1wVG9FeGNlcHRp
b25IYW5kbGVyKCp2bSk7CiAKICAgICAgICAgdm9pZCAoKnRocm93QmFkSTY0KShFeGVjU3RhdGUq
LCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqKSA9IFtdIChFeGVjU3RhdGUqIGV4ZWMsIEpTV2ViQXNz
ZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UpIC0+IHZvaWQgewotICAgICAgICAgICAgVk0qIHZtID0g
JmV4ZWMtPnZtKCk7CisgICAgICAgICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgICAgICAg
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAKICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KCp2bSk7Ci0gICAgICAgICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGlu
c3RhbmNlLT5nbG9iYWxPYmplY3QoKnZtKTsKLSAgICAgICAgICAgICAgICBhdXRvKiBlcnJvciA9
IEVycm9ySW5zdGFuY2U6OmNyZWF0ZShleGVjLCAqdm0sIGdsb2JhbE9iamVjdC0+ZXJyb3JTdHJ1
Y3R1cmUoRXJyb3JUeXBlOjpUeXBlRXJyb3IpLCAiaTY0IG5vdCBhbGxvd2VkIGFzIHJldHVybiB0
eXBlIG9yIGFyZ3VtZW50IHRvIGFuIGltcG9ydGVkIGZ1bmN0aW9uIl9zKTsKKyAgICAgICAgICAg
ICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICAgICAg
ICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gaW5zdGFuY2UtPmdsb2JhbE9i
amVjdCh2bSk7CisgICAgICAgICAgICAgICAgYXV0byogZXJyb3IgPSBFcnJvckluc3RhbmNlOjpj
cmVhdGUoZXhlYywgdm0sIGdsb2JhbE9iamVjdC0+ZXJyb3JTdHJ1Y3R1cmUoRXJyb3JUeXBlOjpU
eXBlRXJyb3IpLCAiaTY0IG5vdCBhbGxvd2VkIGFzIHJldHVybiB0eXBlIG9yIGFyZ3VtZW50IHRv
IGFuIGltcG9ydGVkIGZ1bmN0aW9uIl9zKTsKICAgICAgICAgICAgICAgICB0aHJvd0V4Y2VwdGlv
bihleGVjLCB0aHJvd1Njb3BlLCBlcnJvcik7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAg
IGdlbmVyaWNVbndpbmQodm0sIGV4ZWMpOwotICAgICAgICAgICAgQVNTRVJUKCEhdm0tPmNhbGxG
cmFtZUZvckNhdGNoKTsKKyAgICAgICAgICAgIEFTU0VSVCghIXZtLmNhbGxGcmFtZUZvckNhdGNo
KTsKICAgICAgICAgfTsKIAogICAgICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoaml0LCBHTE9C
QUxfVEhVTktfSUQsIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CkBAIC0yMjYsOSArMjI2LDkgQEAg
RXhwZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFdhc21FbnRyeQogCiAgICAgICAgIHVpbnQ2
NF90ICgqY2FsbEZ1bmMpKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgU2lnbmF0dXJlSW5kZXgsIHVp
bnQ2NF90KikgPQogICAgICAgICAgICAgW10gKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGNh
bGxlZSwgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXgsIHVpbnQ2NF90KiBidWZmZXIpIC0+
IHVpbnQ2NF90IHsgCi0gICAgICAgICAgICAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAg
ICAgICAgICAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICAgICAgICAgICAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLSAgICAgICAgICAgICAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7CisgICAgICAgICAgICAgICAgYXV0
byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgICAgICAgICAgICAg
Y29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUgPSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNp
Z25hdHVyZUluZGV4KTsKICAgICAgICAgICAgICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdz
OwogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgYXJnTnVtID0gMDsgYXJnTnVtIDwgc2ln
bmF0dXJlLmFyZ3VtZW50Q291bnQoKTsgKythcmdOdW0pIHsKQEAgLTI0NCw3ICsyNDQsNyBAQCBF
eHBlY3RlZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8V2FzbUVudHJ5CiAgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgY2FzZSBGdW5jcmVmOiB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBhcmcgPSBKU1ZhbHVlOjpkZWNvZGUoYnVmZmVyW2FyZ051bV0p
OwotICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGlzV2ViQXNzZW1ibHlIb3N0RnVuY3Rp
b24oKnZtLCBhcmcpIHx8IGFyZy5pc051bGwoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBB
U1NFUlQoaXNXZWJBc3NlbWJseUhvc3RGdW5jdGlvbih2bSwgYXJnKSB8fCBhcmcuaXNOdWxsKCkp
OwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAgICAgY2FzZSBBbnlyZWY6CkBAIC0yNjMsNyArMjYzLDcgQEAgRXhw
ZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFdhc21FbnRyeQogICAgICAgICAgICAgICAgIH0K
IAogICAgICAgICAgICAgICAgIENhbGxEYXRhIGNhbGxEYXRhOwotICAgICAgICAgICAgICAgIENh
bGxUeXBlIGNhbGxUeXBlID0gY2FsbGVlLT5tZXRob2RUYWJsZSgqdm0pLT5nZXRDYWxsRGF0YShj
YWxsZWUsIGNhbGxEYXRhKTsKKyAgICAgICAgICAgICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGNh
bGxlZS0+bWV0aG9kVGFibGUodm0pLT5nZXRDYWxsRGF0YShjYWxsZWUsIGNhbGxEYXRhKTsKICAg
ICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxsVHlwZSAhPSBDYWxsVHlwZTo6Tm9uZSk7
CiAgICAgICAgICAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBjYWxsKGV4ZWMsIGNhbGxlZSwgY2Fs
bFR5cGUsIGNhbGxEYXRhLCBqc1VuZGVmaW5lZCgpLCBhcmdzKTsKICAgICAgICAgICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIDApOwpAQCAtMjgyLDcgKzI4Miw3IEBAIEV4
cGVjdGVkPE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxXYXNtRW50cnkKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgY2FzZSBGdW5jcmVmOiB7CiAgICAgICAgICAgICAgICAgICAgIHJl
YWxSZXN1bHQgPSBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKLSAgICAgICAgICAgICAgICAgICAg
QVNTRVJUKHJlc3VsdC5pc0Z1bmN0aW9uKCp2bSkgfHwgcmVzdWx0LmlzTnVsbCgpKTsKKyAgICAg
ICAgICAgICAgICAgICAgQVNTRVJUKHJlc3VsdC5pc0Z1bmN0aW9uKHZtKSB8fCByZXN1bHQuaXNO
dWxsKCkpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgY2FzZSBBbnlyZWY6IHsKQEAgLTMxNywxMCArMzE3LDEwIEBAIEV4cGVj
dGVkPE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxXYXNtRW50cnkKICAgICAgICAgaml0LmNvcHlDYWxs
ZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtLT50b3BFbnRyeUZyYW1lKTsK
ICAgICAgICAgaml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFy
Z3VtZW50R1BSMCk7CiAgICAgICAgIHZvaWQgKCpkb1Vud2luZGluZykoRXhlY1N0YXRlKikgPSBb
XSAoRXhlY1N0YXRlKiBleGVjKSAtPiB2b2lkIHsKLSAgICAgICAgICAgIFZNKiB2bSA9ICZleGVj
LT52bSgpOworICAgICAgICAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICAgICAgICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgICAgICAgICAgZ2VuZXJp
Y1Vud2luZCh2bSwgZXhlYyk7Ci0gICAgICAgICAgICBBU1NFUlQoISF2bS0+Y2FsbEZyYW1lRm9y
Q2F0Y2gpOworICAgICAgICAgICAgQVNTRVJUKCEhdm0uY2FsbEZyYW1lRm9yQ2F0Y2gpOwogICAg
ICAgICB9OwogICAgICAgICBhdXRvIGV4Y2VwdGlvbkNhbGwgPSBqaXQuY2FsbChPcGVyYXRpb25Q
dHJUYWcpOwogICAgICAgICBqaXQuanVtcFRvRXhjZXB0aW9uSGFuZGxlcigqdm0pOwpAQCAtNTM2
LDcgKzUzNiw3IEBAIEV4cGVjdGVkPE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxXYXNtRW50cnkKICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93UGF0aDsKIAogICAgICAgICBpbnQzMl90
ICgqY29udmVydFRvSTMyKShFeGVjU3RhdGUqLCBKU1ZhbHVlKSA9IFtdIChFeGVjU3RhdGUqIGV4
ZWMsIEpTVmFsdWUgdikgLT4gaW50MzJfdCB7Ci0gICAgICAgICAgICBWTSogdm0gPSAmZXhlYy0+
dm0oKTsKKyAgICAgICAgICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgICAgICAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICAgICAgICAgIHJldHVybiB2
LnRvSW50MzIoZXhlYyk7CiAgICAgICAgIH07CkBAIC01NjUsNyArNTY1LDcgQEAgRXhwZWN0ZWQ8
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFdhc21FbnRyeQogICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1
bXBMaXN0IGRvbmU7CiAKICAgICAgICAgZmxvYXQgKCpjb252ZXJ0VG9GMzIpKEV4ZWNTdGF0ZSos
IEpTVmFsdWUpID0gW10gKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2KSAtPiBmbG9hdCB7Ci0g
ICAgICAgICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICAgICAgICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CiAgICAgICAgICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBl
eGVjKTsKICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4odi50b051bWJlcihl
eGVjKSk7CiAgICAgICAgIH07CkBAIC02MDAsNyArNjAwLDcgQEAgRXhwZWN0ZWQ8TWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPFdhc21FbnRyeQogICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IGRv
bmU7CiAKICAgICAgICAgZG91YmxlICgqY29udmVydFRvRjY0KShFeGVjU3RhdGUqLCBKU1ZhbHVl
KSA9IFtdIChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdikgLT4gZG91YmxlIHsKLSAgICAgICAg
ICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgICAgICAgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKICAgICAgICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwog
ICAgICAgICAgICAgcmV0dXJuIHYudG9OdW1iZXIoZXhlYyk7CiAgICAgICAgIH07CkBAIC02NDMs
MTAgKzY0MywxMCBAQCBFeHBlY3RlZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8V2FzbUVudHJ5CiAg
ICAgICAgIGppdC5qdW1wVG9FeGNlcHRpb25IYW5kbGVyKCp2bSk7CiAKICAgICAgICAgdm9pZCAo
KmRvVW53aW5kaW5nKShFeGVjU3RhdGUqKSA9IFtdIChFeGVjU3RhdGUqIGV4ZWMpIC0+IHZvaWQg
ewotICAgICAgICAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgICAgICAgICBWTSYgdm0g
PSBleGVjLT52bSgpOwogICAgICAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2
bSwgZXhlYyk7CiAgICAgICAgICAgICBnZW5lcmljVW53aW5kKHZtLCBleGVjKTsKLSAgICAgICAg
ICAgIEFTU0VSVCghIXZtLT5jYWxsRnJhbWVGb3JDYXRjaCk7CisgICAgICAgICAgICBBU1NFUlQo
ISF2bS5jYWxsRnJhbWVGb3JDYXRjaCk7CiAgICAgICAgIH07CiAKICAgICAgICAgaml0LmFkZExp
bmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewpAQCAtNjg3LDcgKzY4Nyw3IEBA
IHZvaWQqIHdhc21Ub0pTRXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYywKICAgICAgICAgdGhyb3dF
eGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgZXJyb3IpOwogICAgIH0KIAotICAgIGdlbmVyaWNV
bndpbmQoJnZtLCBleGVjKTsKKyAgICBnZW5lcmljVW53aW5kKHZtLCBleGVjKTsKICAgICBBU1NF
UlQoISF2bS5jYWxsRnJhbWVGb3JDYXRjaCk7CiAgICAgQVNTRVJUKCEhdm0udGFyZ2V0TWFjaGlu
ZVBDRm9yVGhyb3cpOwogICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBtYWtlIHRoaXMgYmV0dGVyOgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1i
bHlGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjEw
LDcgKzIxMCw3IEBAIFdhc206Okluc3RhbmNlKiBXZWJBc3NlbWJseUZ1bmN0aW9uOjpwcmUKIAog
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IFdlYkFzc2VtYmx5RnVuY3Rpb246
OmpzQ2FsbEVudHJ5cG9pbnRTbG93KCkKIHsKLSAgICBWTSYgdm0gPSAqdGhpcy0+dm0oKTsKKyAg
ICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBjb25z
dCBhdXRvJiBzaWduYXR1cmUgPSBXYXNtOjpTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25h
dHVyZUluZGV4KCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNz
ZW1ibHlNZW1vcnlDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNZW1vcnlDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9u
IDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TWVt
b3J5Q29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNi0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjUsNyArNjUsNyBAQCBzdGF0
aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zCiAKICAgICBXYXNtOjpQYWdlQ291
bnQgaW5pdGlhbFBhZ2VDb3VudDsKICAgICB7Ci0gICAgICAgIElkZW50aWZpZXIgaW5pdGlhbCA9
IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiaW5pdGlhbCIpOworICAgICAgICBJZGVudGlm
aWVyIGluaXRpYWwgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiaW5pdGlhbCIpOwogICAg
ICAgICBKU1ZhbHVlIG1pblNpemVWYWx1ZSA9IG1lbW9yeURlc2NyaXB0b3ItPmdldChleGVjLCBp
bml0aWFsKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVk
SlNWYWx1ZSgpKTsKICAgICAgICAgdWludDMyX3Qgc2l6ZSA9IHRvTm9uV3JhcHBpbmdVaW50MzIo
ZXhlYywgbWluU2l6ZVZhbHVlKTsKQEAgLTgxLDcgKzgxLDcgQEAgc3RhdGljIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgY29ucwogICAgIHsKICAgICAgICAgLy8gSW4gV2ViSURMLCAicHJl
c2VudCIgbWVhbnMgdGhhdCBbW0dldF1dIHJlc3VsdCBpcyB1bmRlZmluZWQsIG5vdCBbW0hhc1By
b3BlcnR5XV0gcmVzdWx0LgogICAgICAgICAvLyBodHRwczovL2hleWNhbS5naXRodWIuaW8vd2Vi
aWRsLyNpZGwtZGljdGlvbmFyaWVzCi0gICAgICAgIElkZW50aWZpZXIgbWF4aW11bSA9IElkZW50
aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAibWF4aW11bSIpOworICAgICAgICBJZGVudGlmaWVyIG1h
eGltdW0gPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAibWF4aW11bSIpOwogICAgICAgICBK
U1ZhbHVlIG1heFNpemVWYWx1ZSA9IG1lbW9yeURlc2NyaXB0b3ItPmdldChleGVjLCBtYXhpbXVt
KTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1
ZSgpKTsKICAgICAgICAgaWYgKCFtYXhTaXplVmFsdWUuaXNVbmRlZmluZWQoKSkgewpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rv
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNz
ZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3IuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0y
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
Ni0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMTE0LDE1ICsxMTQsMTUgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCB3ZWJBc3NlbWJseQogCiAgICAgY29uc3QgYXV0byYgaW1wb3J0cyA9IG1vZHVsZS0+
bW9kdWxlSW5mb3JtYXRpb24oKS5pbXBvcnRzOwogICAgIGlmIChpbXBvcnRzLnNpemUoKSkgewot
ICAgICAgICBJZGVudGlmaWVyIG1vZHVsZSA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywg
Im1vZHVsZSIpOwotICAgICAgICBJZGVudGlmaWVyIG5hbWUgPSBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKGV4ZWMsICJuYW1lIik7Ci0gICAgICAgIElkZW50aWZpZXIga2luZCA9IElkZW50aWZpZXI6
OmZyb21TdHJpbmcoZXhlYywgImtpbmQiKTsKKyAgICAgICAgSWRlbnRpZmllciBtb2R1bGUgPSBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAibW9kdWxlIik7CisgICAgICAgIElkZW50aWZpZXIg
bmFtZSA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJuYW1lIik7CisgICAgICAgIElkZW50
aWZpZXIga2luZCA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJraW5kIik7CiAgICAgICAg
IGZvciAoY29uc3QgV2FzbTo6SW1wb3J0JiBpbXAgOiBpbXBvcnRzKSB7CiAgICAgICAgICAgICBK
U09iamVjdCogb2JqID0gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYyk7CiAgICAgICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7Ci0gICAgICAgICAgICBvYmotPnB1
dERpcmVjdCh2bSwgbW9kdWxlLCBqc1N0cmluZyhleGVjLCBTdHJpbmc6OmZyb21VVEY4KGltcC5t
b2R1bGUpKSk7Ci0gICAgICAgICAgICBvYmotPnB1dERpcmVjdCh2bSwgbmFtZSwganNTdHJpbmco
ZXhlYywgU3RyaW5nOjpmcm9tVVRGOChpbXAuZmllbGQpKSk7Ci0gICAgICAgICAgICBvYmotPnB1
dERpcmVjdCh2bSwga2luZCwganNTdHJpbmcoZXhlYywgU3RyaW5nKG1ha2VTdHJpbmcoaW1wLmtp
bmQpKSkpOworICAgICAgICAgICAgb2JqLT5wdXREaXJlY3Qodm0sIG1vZHVsZSwganNTdHJpbmco
dm0sIFN0cmluZzo6ZnJvbVVURjgoaW1wLm1vZHVsZSkpKTsKKyAgICAgICAgICAgIG9iai0+cHV0
RGlyZWN0KHZtLCBuYW1lLCBqc1N0cmluZyh2bSwgU3RyaW5nOjpmcm9tVVRGOChpbXAuZmllbGQp
KSk7CisgICAgICAgICAgICBvYmotPnB1dERpcmVjdCh2bSwga2luZCwganNTdHJpbmcodm0sIFN0
cmluZyhtYWtlU3RyaW5nKGltcC5raW5kKSkpKTsKICAgICAgICAgICAgIHJlc3VsdC0+cHVzaChl
eGVjLCBvYmopOwogICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7
IH0pOwogICAgICAgICB9CkBAIC0xNDYsMTMgKzE0NiwxMyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIHdlYkFzc2VtYmx5CiAKICAgICBjb25zdCBhdXRvJiBleHBvcnRzID0gbW9kdWxl
LT5tb2R1bGVJbmZvcm1hdGlvbigpLmV4cG9ydHM7CiAgICAgaWYgKGV4cG9ydHMuc2l6ZSgpKSB7
Ci0gICAgICAgIElkZW50aWZpZXIgbmFtZSA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywg
Im5hbWUiKTsKLSAgICAgICAgSWRlbnRpZmllciBraW5kID0gSWRlbnRpZmllcjo6ZnJvbVN0cmlu
ZyhleGVjLCAia2luZCIpOworICAgICAgICBJZGVudGlmaWVyIG5hbWUgPSBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCAibmFtZSIpOworICAgICAgICBJZGVudGlmaWVyIGtpbmQgPSBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKHZtLCAia2luZCIpOwogICAgICAgICBmb3IgKGNvbnN0IFdhc206OkV4
cG9ydCYgZXhwIDogZXhwb3J0cykgewogICAgICAgICAgICAgSlNPYmplY3QqIG9iaiA9IGNvbnN0
cnVjdEVtcHR5T2JqZWN0KGV4ZWMpOwogICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCB7IH0pOwotICAgICAgICAgICAgb2JqLT5wdXREaXJlY3Qodm0sIG5hbWUsIGpz
U3RyaW5nKGV4ZWMsIFN0cmluZzo6ZnJvbVVURjgoZXhwLmZpZWxkKSkpOwotICAgICAgICAgICAg
b2JqLT5wdXREaXJlY3Qodm0sIGtpbmQsIGpzU3RyaW5nKGV4ZWMsIFN0cmluZyhtYWtlU3RyaW5n
KGV4cC5raW5kKSkpKTsKKyAgICAgICAgICAgIG9iai0+cHV0RGlyZWN0KHZtLCBuYW1lLCBqc1N0
cmluZyh2bSwgU3RyaW5nOjpmcm9tVVRGOChleHAuZmllbGQpKSk7CisgICAgICAgICAgICBvYmot
PnB1dERpcmVjdCh2bSwga2luZCwganNTdHJpbmcodm0sIFN0cmluZyhtYWtlU3RyaW5nKGV4cC5r
aW5kKSkpKTsKICAgICAgICAgICAgIHJlc3VsdC0+cHVzaChleGVjLCBvYmopOwogICAgICAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgICAgICB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1i
bHlNb2R1bGVSZWNvcmQuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTczLDcgKzczLDcgQEAgdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6ZmluaXNoQ3Jl
YQogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGV4ZWMsIHZtKTsKICAgICBBU1NFUlQoaW5oZXJp
dHModm0sIGluZm8oKSkpOwogICAgIGZvciAoY29uc3QgYXV0byYgZXhwIDogbW9kdWxlSW5mb3Jt
YXRpb24uZXhwb3J0cykgewotICAgICAgICBJZGVudGlmaWVyIGZpZWxkID0gSWRlbnRpZmllcjo6
ZnJvbVN0cmluZygmdm0sIFN0cmluZzo6ZnJvbVVURjgoZXhwLmZpZWxkKSk7CisgICAgICAgIElk
ZW50aWZpZXIgZmllbGQgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBTdHJpbmc6OmZyb21V
VEY4KGV4cC5maWVsZCkpOwogICAgICAgICBhZGRFeHBvcnRFbnRyeShFeHBvcnRFbnRyeTo6Y3Jl
YXRlTG9jYWwoZmllbGQsIGZpZWxkKSk7CiAgICAgfQogfQpAQCAtMTI2LDggKzEyNiw4IEBAIHZv
aWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmxpbmsoRXhlY1MKICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICB9CiAKLSAgICAgICAgSWRlbnRpZmllciBtb2R1bGVOYW1lID0gSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZygmdm0sIFN0cmluZzo6ZnJvbVVURjgoaW1wb3J0Lm1vZHVsZSkpOwot
ICAgICAgICBJZGVudGlmaWVyIGZpZWxkTmFtZSA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZt
LCBTdHJpbmc6OmZyb21VVEY4KGltcG9ydC5maWVsZCkpOworICAgICAgICBJZGVudGlmaWVyIG1v
ZHVsZU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBTdHJpbmc6OmZyb21VVEY4KGlt
cG9ydC5tb2R1bGUpKTsKKyAgICAgICAgSWRlbnRpZmllciBmaWVsZE5hbWUgPSBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKHZtLCBTdHJpbmc6OmZyb21VVEY4KGltcG9ydC5maWVsZCkpOwogICAgICAg
ICBKU1ZhbHVlIHZhbHVlOwogICAgICAgICBpZiAoY3JlYXRpb25Nb2RlID09IFdhc206OkNyZWF0
aW9uTW9kZTo6RnJvbUpTKSB7CiAgICAgICAgICAgICAvLyAxLiBMZXQgbyBiZSB0aGUgcmVzdWx0
YW50IHZhbHVlIG9mIHBlcmZvcm1pbmcgR2V0KGltcG9ydE9iamVjdCwgaS5tb2R1bGVfbmFtZSku
CkBAIC00NDEsNyArNDQxLDcgQEAgdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6bGluayhF
eGVjUwogICAgICAgICBib29sIHNob3VsZFRocm93UmVhZE9ubHlFcnJvciA9IGZhbHNlOwogICAg
ICAgICBib29sIGlnbm9yZVJlYWRPbmx5RXJyb3JzID0gdHJ1ZTsKICAgICAgICAgYm9vbCBwdXRS
ZXN1bHQgPSBmYWxzZTsKLSAgICAgICAgc3ltYm9sVGFibGVQdXRUb3VjaFdhdGNocG9pbnRTZXQo
bW9kdWxlRW52aXJvbm1lbnQsIGV4ZWMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCBTdHJp
bmc6OmZyb21VVEY4KGV4cC5maWVsZCkpLCBleHBvcnRlZFZhbHVlLCBzaG91bGRUaHJvd1JlYWRP
bmx5RXJyb3IsIGlnbm9yZVJlYWRPbmx5RXJyb3JzLCBwdXRSZXN1bHQpOworICAgICAgICBzeW1i
b2xUYWJsZVB1dFRvdWNoV2F0Y2hwb2ludFNldChtb2R1bGVFbnZpcm9ubWVudCwgZXhlYywgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgU3RyaW5nOjpmcm9tVVRGOChleHAuZmllbGQpKSwgZXhw
b3J0ZWRWYWx1ZSwgc2hvdWxkVGhyb3dSZWFkT25seUVycm9yLCBpZ25vcmVSZWFkT25seUVycm9y
cywgcHV0UmVzdWx0KTsKICAgICAgICAgc2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQocHV0UmVzdWx0KTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVRhYmxlQ29uc3RydWN0b3IuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5VGFibGVDb25z
dHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL1dlYkFzc2VtYmx5VGFibGVDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC02MCw3ICs2MCw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnMK
IAogICAgIFdhc206OlRhYmxlRWxlbWVudFR5cGUgdHlwZTsKICAgICB7Ci0gICAgICAgIElkZW50
aWZpZXIgZWxlbWVudElkZW50ID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJlbGVtZW50
Iik7CisgICAgICAgIElkZW50aWZpZXIgZWxlbWVudElkZW50ID0gSWRlbnRpZmllcjo6ZnJvbVN0
cmluZyh2bSwgImVsZW1lbnQiKTsKICAgICAgICAgSlNWYWx1ZSBlbGVtZW50VmFsdWUgPSBtZW1v
cnlEZXNjcmlwdG9yLT5nZXQoZXhlYywgZWxlbWVudElkZW50KTsKICAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICAgICAgU3RyaW5n
IGVsZW1lbnRTdHJpbmcgPSBlbGVtZW50VmFsdWUudG9XVEZTdHJpbmcoZXhlYyk7CkBAIC03Myw3
ICs3Myw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnMKICAgICAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dT
Y29wZSwgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJXZWJBc3NlbWJseS5UYWJsZSBleHBlY3RzIGl0
cyAnZWxlbWVudCcgZmllbGQgdG8gYmUgdGhlIHN0cmluZyAnZnVuY3JlZicgb3IgJ2FueXJlZici
X3MpKSk7CiAgICAgfQogCi0gICAgSWRlbnRpZmllciBpbml0aWFsSWRlbnQgPSBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKCZ2bSwgImluaXRpYWwiKTsKKyAgICBJZGVudGlmaWVyIGluaXRpYWxJZGVu
dCA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJpbml0aWFsIik7CiAgICAgSlNWYWx1ZSBp
bml0aWFsU2l6ZVZhbHVlID0gbWVtb3J5RGVzY3JpcHRvci0+Z2V0KGV4ZWMsIGluaXRpYWxJZGVu
dCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgp
KTsKICAgICB1aW50MzJfdCBpbml0aWFsID0gdG9Ob25XcmFwcGluZ1VpbnQzMihleGVjLCBpbml0
aWFsU2l6ZVZhbHVlKTsKQEAgLTgyLDcgKzgyLDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgY29ucwogICAgIC8vIEluIFdlYklETCwgInByZXNlbnQiIG1lYW5zIHRoYXQg
W1tHZXRdXSByZXN1bHQgaXMgdW5kZWZpbmVkLCBub3QgW1tIYXNQcm9wZXJ0eV1dIHJlc3VsdC4K
ICAgICAvLyBodHRwczovL2hleWNhbS5naXRodWIuaW8vd2ViaWRsLyNpZGwtZGljdGlvbmFyaWVz
CiAgICAgT3B0aW9uYWw8dWludDMyX3Q+IG1heGltdW07Ci0gICAgSWRlbnRpZmllciBtYXhpbXVt
SWRlbnQgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgIm1heGltdW0iKTsKKyAgICBJZGVu
dGlmaWVyIG1heGltdW1JZGVudCA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJtYXhpbXVt
Iik7CiAgICAgSlNWYWx1ZSBtYXhTaXplVmFsdWUgPSBtZW1vcnlEZXNjcmlwdG9yLT5nZXQoZXhl
YywgbWF4aW11bUlkZW50KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVu
Y29kZWRKU1ZhbHVlKCkpOwogICAgIGlmICghbWF4U2l6ZVZhbHVlLmlzVW5kZWZpbmVkKCkpIHsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU4MiBAQAorMjAxOS0wOC0yNyAgTWFyayBM
YW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAgUmVmYWN0b3IgdG8gdXNlIFZNJiBp
bnN0ZWFkIG9mIFZNKiBhdCBhcyBtYW55IHBsYWNlcyBhcyBwb3NzaWJsZS4KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMTE3MgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gIENvdmVy
ZWQgYnkgZXhpc3RpbmcgdGVzdHMuCisKKyAgICAgICAgKiBNb2R1bGVzL2VuY3J5cHRlZG1lZGlh
L2xlZ2FjeS9MZWdhY3lDRE1TZXNzaW9uQ2xlYXJLZXkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Q0RNU2Vzc2lvbkNsZWFyS2V5Ojp1cGRhdGUpOgorICAgICAgICAqIE1vZHVsZXMvcGx1Z2lucy9R
dWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudC5tbToKKyAgICAgICAgKFdlYkNvcmU6OlF1aWNrVGlt
ZVBsdWdpblJlcGxhY2VtZW50OjplbnN1cmVSZXBsYWNlbWVudFNjcmlwdEluamVjdGVkKToKKyAg
ICAgICAgKFdlYkNvcmU6OlF1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50OjppbnN0YWxsUmVwbGFj
ZW1lbnQpOgorICAgICAgICAqIGFuaW1hdGlvbi9LZXlmcmFtZUVmZmVjdC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpwcm9jZXNzS2V5ZnJhbWVMaWtlT2JqZWN0KToKKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9HQ0NvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R0NDb250cm9sbGVyOjpk
dW1wSGVhcCk6CisgICAgICAgICogYmluZGluZ3MvanMvSURCQmluZGluZ1V0aWxpdGllcy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpnZXQpOgorICAgICAgICAoV2ViQ29yZTo6c2V0KToKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9KU0NTU1J1bGVMaXN0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkpTQ1NTUnVsZUxpc3RPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMpOgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5Q3VzdG9tLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkpTQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5OjpkZWZpbmUpOgorICAgICAg
ICAqIGJpbmRpbmdzL2pzL0pTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkpTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyOjpsb29rdXBOYW1lc3BhY2VVUkkpOgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NQ29udmVydFJlY29yZC5oOgorICAgICAgICAqIGJpbmRp
bmdzL2pzL0pTRE9NQ29udmVydFN0cmluZ3MuaDoKKyAgICAgICAgKFdlYkNvcmU6OkpTQ29udmVy
dGVyPElETERPTVN0cmluZz46OmNvbnZlcnQpOgorICAgICAgICAoV2ViQ29yZTo6SlNDb252ZXJ0
ZXI8SURMQnl0ZVN0cmluZz46OmNvbnZlcnQpOgorICAgICAgICAoV2ViQ29yZTo6SlNDb252ZXJ0
ZXI8SURMVVNWU3RyaW5nPjo6Y29udmVydCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01X
aW5kb3dDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3c6OmdldE93blBy
b3BlcnR5U2xvdEJ5SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6YWRkU2NvcGVkQ2hpbGRyZW5J
bmRleGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93OjpkZWZpbmVPd25Qcm9wZXJ0
eSk6CisgICAgICAgIChXZWJDb3JlOjpEaWFsb2dIYW5kbGVyOjpkaWFsb2dDcmVhdGVkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpYWxvZ0hhbmRsZXI6OnJldHVyblZhbHVlIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkpTRE9NV2luZG93OjpzZXRPcGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6
SlNET01XaW5kb3c6OnNldE9wZW5EYXRhYmFzZSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNE
T01XaW5kb3dQcm9wZXJ0aWVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93UHJv
cGVydGllczo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleCk6CisgICAgICAgICogYmluZGluZ3Mv
anMvSlNEZXByZWNhdGVkQ1NTT01WYWx1ZUN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpK
U0RlcHJlY2F0ZWRDU1NPTVZhbHVlT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKToK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SlNFdmVudExpc3RlbmVyOjpoYW5kbGVFdmVudCk6CisgICAgICAgICogYmluZGluZ3Mv
anMvSlNJbWFnZURhdGFDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6dG9KU05ld2x5Q3Jl
YXRlZCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNMYXp5RXZlbnRMaXN0ZW5lci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpKU0xhenlFdmVudExpc3RlbmVyOjppbml0aWFsaXplSlNGdW5jdGlv
biBjb25zdCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNMb2NhdGlvbkN1c3RvbS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpKU0xvY2F0aW9uOjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KToK
KyAgICAgICAgKFdlYkNvcmU6OkpTTG9jYXRpb246OnB1dEJ5SW5kZXgpOgorICAgICAgICAqIGJp
bmRpbmdzL2pzL0pTTm9kZUxpc3RDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNOb2Rl
TGlzdE93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyk6CisgICAgICAgICogYmluZGlu
Z3MvanMvSlNQbHVnaW5FbGVtZW50RnVuY3Rpb25zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBs
dWdpbkVsZW1lbnRDdXN0b21HZXRDYWxsRGF0YSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNS
ZW1vdGVET01XaW5kb3dDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNSZW1vdGVET01X
aW5kb3c6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgpOgorICAgICAgICAqIGJpbmRpbmdzL2pz
L1JlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlcjo6aW52b2tlKToKKyAgICAgICAgKiBiaW5k
aW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENv
bnRyb2xsZXI6OmxpbmtBbmRFdmFsdWF0ZU1vZHVsZVNjcmlwdEluV29ybGQpOgorICAgICAgICAq
IGJpbmRpbmdzL2pzL1NjcmlwdE1vZHVsZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JpcHRNb2R1bGVMb2FkZXI6OnJlc29sdmUpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0TW9k
dWxlTG9hZGVyOjppbXBvcnRNb2R1bGUpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0TW9kdWxl
TG9hZGVyOjpjcmVhdGVJbXBvcnRNZXRhUHJvcGVydGllcyk6CisgICAgICAgICogYmluZGluZ3Mv
anMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNsb25lU2Vy
aWFsaXplcjo6Q2xvbmVTZXJpYWxpemVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNsb25lU2VyaWFs
aXplcjo6d3JpdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVTZXJpYWxpemVyOjpzZXJpYWxp
emUpOgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVEZXNlcmlhbGl6ZXI6OkNhY2hlZFN0cmluZzo6
anNTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVEZXNlcmlhbGl6ZXI6OnJlYWRUZXJt
aW5hbCk6CisgICAgICAgIChXZWJDb3JlOjpDbG9uZURlc2VyaWFsaXplcjo6ZGVzZXJpYWxpemUp
OgorICAgICAgICAqIGJpbmRpbmdzL2pzL1dlYkNvcmVCdWlsdGluTmFtZXMuaDoKKyAgICAgICAg
KFdlYkNvcmU6OldlYkNvcmVCdWlsdGluTmFtZXM6OldlYkNvcmVCdWlsdGluTmFtZXMpOgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL1dlYkNvcmVKU0NsaWVudERhdGEuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SlNWTUNsaWVudERhdGE6OkpTVk1DbGllbnREYXRhKToKKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9XaW5kb3dQcm94eS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXaW5kb3dQcm94eTo6Y2xl
YXJKU1dpbmRvd1Byb3hpZXNOb3RNYXRjaGluZ0RPTVdpbmRvdyk6CisgICAgICAgICogYmluZGlu
Z3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG06CisgICAgICAgIChHZW5lcmF0ZUdldE93blBy
b3BlcnR5U2xvdEJ5SW5kZXgpOgorICAgICAgICAoR2VuZXJhdGVHZXRPd25Qcm9wZXJ0eU5hbWVz
KToKKyAgICAgICAgKEdlbmVyYXRlUHV0QnlJbmRleCk6CisgICAgICAgIChHZW5lcmF0ZURlbGV0
ZVByb3BlcnR5QnlJbmRleCk6CisgICAgICAgIChHZW5lcmF0ZURpY3Rpb25hcnlJbXBsZW1lbnRh
dGlvbkNvbnRlbnQpOgorICAgICAgICAoYWRkVW5zY29wYWJsZVByb3BlcnRpZXMpOgorICAgICAg
ICAoR2VuZXJhdGVJbXBsZW1lbnRhdGlvbik6CisgICAgICAgIChHZW5lcmF0ZUF0dHJpYnV0ZVNl
dHRlckJvZHlEZWZpbml0aW9uKToKKyAgICAgICAgKEdlbmVyYXRlT3BlcmF0aW9uRGVmaW5pdGlv
bik6CisgICAgICAgIChHZW5lcmF0ZVNlcmlhbGl6ZXJEZWZpbml0aW9uKToKKyAgICAgICAgKEdl
bmVyYXRlQ2FsbGJhY2tJbXBsZW1lbnRhdGlvbkNvbnRlbnQpOgorICAgICAgICAoR2VuZXJhdGVD
b25zdHJ1Y3RvckhlbHBlck1ldGhvZHMpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU0ludGVyZmFjZU5hbWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNJbnRlcmZhY2VO
YW1lQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKToKKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNNYXBMaWtlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTTWFw
TGlrZUNvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGllcyk6CisgICAgICAgICogYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTUmVhZE9ubHlNYXBMaWtlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkpTUmVhZE9ubHlNYXBMaWtlQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKToK
KyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0QWN0aXZlRE9NT2JqZWN0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEFjdGl2ZURPTU9iamVjdENvbnN0cnVjdG9y
Ojppbml0aWFsaXplUHJvcGVydGllcyk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdENFUmVhY3Rpb25zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdENFUmVh
Y3Rpb25zQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNv
cmU6OnNldEpTVGVzdENFUmVhY3Rpb25zQXR0cmlidXRlV2l0aENFUmVhY3Rpb25zU2V0dGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdENFUmVhY3Rpb25zUmVmbGVjdEF0dHJpYnV0ZVdp
dGhDRVJlYWN0aW9uc1NldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RDRVJlYWN0
aW9uc1N0cmluZ2lmaWVyQXR0cmlidXRlU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpT
VGVzdENFUmVhY3Rpb25zQXR0cmlidXRlV2l0aENFUmVhY3Rpb25zTm90TmVlZGVkU2V0dGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdENFUmVhY3Rpb25zUmVmbGVjdEF0dHJpYnV0ZVdp
dGhDRVJlYWN0aW9uc05vdE5lZWRlZFNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rl
c3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyQXR0cmlidXRlTm90TmVlZGVkU2V0dGVyKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmll
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyQ29u
c3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpT
VGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXJWYWx1ZVNldHRlcik6CisgICAgICAgIChXZWJDb3Jl
OjpzZXRKU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyVmFsdWVXaXRob3V0UmVhY3Rpb25zU2V0
dGVyKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2FsbFRyYWNl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDYWxsVHJhY2VyQ29uc3RydWN0b3I6Omlu
aXRpYWxpemVQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdENhbGxUcmFj
ZXJUZXN0QXR0cmlidXRlSW50ZXJmYWNlU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpT
VGVzdENhbGxUcmFjZXJUZXN0QXR0cmlidXRlU3BlY2lmaWVkU2V0dGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OnNldEpTVGVzdENhbGxUcmFjZXJUZXN0QXR0cmlidXRlV2l0aFZhcmlhbnRTZXR0ZXIp
OgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsYmFja0ludGVy
ZmFjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0RGljdGlvbmFyeTxUZXN0Q2FsbGJh
Y2tJbnRlcmZhY2U6OkRpY3Rpb25hcnk+KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdENhbGxi
YWNrSW50ZXJmYWNlQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKToKKyAgICAgICAg
KFdlYkNvcmU6OkpTVGVzdENhbGxiYWNrSW50ZXJmYWNlOjpjYWxsYmFja1dpdGhOb1BhcmFtKToK
KyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdENhbGxiYWNrSW50ZXJmYWNlOjpjYWxsYmFja1dpdGhB
cnJheVBhcmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdENhbGxiYWNrSW50ZXJmYWNlOjpj
YWxsYmFja1dpdGhTZXJpYWxpemVkU2NyaXB0VmFsdWVQYXJhbSk6CisgICAgICAgIChXZWJDb3Jl
OjpKU1Rlc3RDYWxsYmFja0ludGVyZmFjZTo6Y2FsbGJhY2tXaXRoU3RyaW5nTGlzdCk6CisgICAg
ICAgIChXZWJDb3JlOjpKU1Rlc3RDYWxsYmFja0ludGVyZmFjZTo6Y2FsbGJhY2tXaXRoQm9vbGVh
bik6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDYWxsYmFja0ludGVyZmFjZTo6Y2FsbGJhY2tS
ZXF1aXJlc1RoaXNUb1Bhc3MpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Q2FsbGJhY2tJbnRl
cmZhY2U6OmNhbGxiYWNrV2l0aEFSZXR1cm5WYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rl
c3RDYWxsYmFja0ludGVyZmFjZTo6Y2FsbGJhY2tUaGF0UmV0aHJvd3NFeGNlcHRpb25zKToKKyAg
ICAgICAgKFdlYkNvcmU6OkpTVGVzdENhbGxiYWNrSW50ZXJmYWNlOjpjYWxsYmFja1RoYXRTa2lw
c0ludm9rZUNoZWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdENhbGxiYWNrSW50ZXJmYWNl
OjpjYWxsYmFja1dpdGhUaGlzT2JqZWN0KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JDb25zdHJ1Y3Rvcjo6
aW5pdGlhbGl6ZVByb3BlcnRpZXMpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RET01KSVQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0RE9NSklUQ29uc3Ry
dWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdERP
TUpJVFByb3RvdHlwZUZ1bmN0aW9uR2V0QXR0cmlidXRlV2l0aG91dFR5cGVDaGVjayk6CisgICAg
ICAgIChXZWJDb3JlOjpqc1Rlc3RET01KSVRQcm90b3R5cGVGdW5jdGlvbkl0ZW1XaXRob3V0VHlw
ZUNoZWNrKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdERPTUpJVFByb3RvdHlwZUZ1bmN0aW9u
SGFzQXR0cmlidXRlV2l0aG91dFR5cGVDaGVjayk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RE
T01KSVRQcm90b3R5cGVGdW5jdGlvbkdldEVsZW1lbnRCeUlkV2l0aG91dFR5cGVDaGVjayk6Cisg
ICAgICAgIChXZWJDb3JlOjpqc1Rlc3RET01KSVRQcm90b3R5cGVGdW5jdGlvbkdldEVsZW1lbnRz
QnlOYW1lV2l0aG91dFR5cGVDaGVjayk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdEVuYWJsZWRCeVNldHRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0
RW5hYmxlZEJ5U2V0dGluZ0NvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGllcyk6CisgICAg
ICAgIChXZWJDb3JlOjpKU1Rlc3RFbmFibGVkQnlTZXR0aW5nUHJvdG90eXBlOjpmaW5pc2hDcmVh
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RFbmFibGVkQnlTZXR0aW5nVGVzdFN1
Yk9iakVuYWJsZWRCeVNldHRpbmdDb25zdHJ1Y3RvclNldHRlcik6CisgICAgICAgIChXZWJDb3Jl
OjpzZXRKU1Rlc3RFbmFibGVkQnlTZXR0aW5nRW5hYmxlZEJ5U2V0dGluZ0F0dHJpYnV0ZVNldHRl
cik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEVuYWJsZWRGb3JD
b250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEVuYWJsZWRGb3JDb250ZXh0Q29u
c3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpT
VGVzdEVuYWJsZWRGb3JDb250ZXh0VGVzdFN1Yk9iakVuYWJsZWRGb3JDb250ZXh0Q29uc3RydWN0
b3JTZXR0ZXIpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVu
dENvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnREaWN0aW9uYXJ5PFRl
c3RFdmVudENvbnN0cnVjdG9yOjpJbml0Pik6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RFdmVu
dENvbnN0cnVjdG9yQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKToKKyAgICAgICAg
KiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRUYXJnZXQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SlNUZXN0RXZlbnRUYXJnZXRDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3Bl
cnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0RXZlbnRUYXJnZXQ6OmdldE93blByb3Bl
cnR5U2xvdEJ5SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0RXZlbnRUYXJnZXQ6Omdl
dE93blByb3BlcnR5TmFtZXMpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RFeGNlcHRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0RXhjZXB0aW9uQ29u
c3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9w
ZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVQcm90
b3R5cGU6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0R2xvYmFsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEdsb2Jh
bE9iamVjdENvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGllcyk6CisgICAgICAgIChXZWJD
b3JlOjpzZXRKU1Rlc3RHbG9iYWxPYmplY3RSZWd1bGFyQXR0cmlidXRlU2V0dGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OnNldEpTVGVzdEdsb2JhbE9iamVjdFB1YmxpY0FuZFByaXZhdGVBdHRyaWJ1
dGVTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0R2xvYmFsT2JqZWN0UHVibGlj
QW5kUHJpdmF0ZUNvbmRpdGlvbmFsQXR0cmlidXRlU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OnNldEpTVGVzdEdsb2JhbE9iamVjdEVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGVTZXR0ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdENFUmVhY3Rpb25zQ29u
c3RydWN0b3JTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0R2xvYmFsT2JqZWN0
VGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXJDb25zdHJ1Y3RvclNldHRlcik6CisgICAgICAgIChX
ZWJDb3JlOjpzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0Q2FsbFRyYWNlckNvbnN0cnVjdG9yU2V0
dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RDYWxsYmFj
a0ludGVyZmFjZUNvbnN0cnVjdG9yU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVz
dEdsb2JhbE9iamVjdFRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvckNvbnN0cnVjdG9y
U2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RET01K
SVRDb25zdHJ1Y3RvclNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RHbG9iYWxP
YmplY3RUZXN0RG9tYWluU2VjdXJpdHlDb25zdHJ1Y3RvclNldHRlcik6CisgICAgICAgIChXZWJD
b3JlOjpzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0RW5hYmxlZEJ5U2V0dGluZ0NvbnN0cnVjdG9y
U2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RFbmFi
bGVkRm9yQ29udGV4dENvbnN0cnVjdG9yU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpT
VGVzdEdsb2JhbE9iamVjdFRlc3RFdmVudENvbnN0cnVjdG9yQ29uc3RydWN0b3JTZXR0ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdEV2ZW50VGFyZ2V0Q29u
c3RydWN0b3JTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0R2xvYmFsT2JqZWN0
VGVzdEV4Y2VwdGlvbkNvbnN0cnVjdG9yU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpT
VGVzdEdsb2JhbE9iamVjdFRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlQ29uc3RydWN0b3JTZXR0ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdEdsb2JhbE9iamVj
dENvbnN0cnVjdG9yU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdEdsb2JhbE9i
amVjdFRlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyQ29uc3RydWN0b3JTZXR0ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdEluZGV4ZWRTZXR0ZXJUaHJv
d2luZ0V4Y2VwdGlvbkNvbnN0cnVjdG9yU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpT
VGVzdEdsb2JhbE9iamVjdFRlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXJDb25zdHJ1Y3Rv
clNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0SW50
ZXJmYWNlQ29uc3RydWN0b3JTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0R2xv
YmFsT2JqZWN0VGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlQ29uc3RydWN0b3JTZXR0ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdEl0ZXJhYmxlQ29u
c3RydWN0b3JTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0R2xvYmFsT2JqZWN0
VGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yQ29uc3RydWN0b3JTZXR0ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE1hcExpa2VDb25zdHJ1Y3RvclNldHRlcik6
CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TWVkaWFRdWVyeUxp
c3RMaXN0ZW5lckNvbnN0cnVjdG9yU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVz
dEdsb2JhbE9iamVjdFRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXJDb25zdHJ1
Y3RvclNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0
TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb25Db25zdHJ1Y3RvclNldHRlcik6
CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRBbmRJbmRl
eGVkU2V0dGVyV2l0aElkZW50aWZpZXJDb25zdHJ1Y3RvclNldHRlcik6CisgICAgICAgIChXZWJD
b3JlOjpzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRDb25zdHJ1Y3RvckNvbnN0cnVjdG9y
U2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdEdsb2JhbE9iamVjdEF1ZGlvQ29u
c3RydWN0b3JTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0R2xvYmFsT2JqZWN0
VGVzdE5hbWVkRGVsZXRlck5vSWRlbnRpZmllckNvbnN0cnVjdG9yU2V0dGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OnNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4
Y2VwdGlvbkNvbnN0cnVjdG9yU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdEds
b2JhbE9iamVjdFRlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllckNvbnN0cnVjdG9yU2V0dGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZERlbGV0
ZXJXaXRoSW5kZXhlZEdldHRlckNvbnN0cnVjdG9yU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OnNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZEdldHRlckNhbGxXaXRoQ29uc3RydWN0b3JT
ZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVk
R2V0dGVyTm9JZGVudGlmaWVyQ29uc3RydWN0b3JTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXJDb25zdHJ1
Y3RvclNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0
TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXJDb25zdHJ1Y3RvclNldHRlcik6CisgICAgICAgIChXZWJD
b3JlOjpzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlv
bkNvbnN0cnVjdG9yU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdEdsb2JhbE9i
amVjdFRlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyQ29uc3RydWN0b3JTZXR0ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkU2V0dGVyV2l0aElu
ZGV4ZWRHZXR0ZXJDb25zdHJ1Y3RvclNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rl
c3RHbG9iYWxPYmplY3RUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlckNv
bnN0cnVjdG9yU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdEdsb2JhbE9iamVj
dFRlc3ROYW1lZFNldHRlcldpdGhPdmVycmlkZUJ1aWx0aW5zQ29uc3RydWN0b3JTZXR0ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkU2V0dGVyV2l0
aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQ29uc3RydWN0b3JTZXR0ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9w
ZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGluc0NvbnN0cnVjdG9yU2V0dGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OnNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29u
c3RydWN0b3JTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0R2xvYmFsT2JqZWN0
VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2VDb25zdHJ1Y3RvclNldHRlcik6
CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0T3ZlcnJpZGVCdWls
dGluc0NvbnN0cnVjdG9yU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdEdsb2Jh
bE9iamVjdFRlc3RQbHVnaW5JbnRlcmZhY2VDb25zdHJ1Y3RvclNldHRlcik6CisgICAgICAgIChX
ZWJDb3JlOjpzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0UmVhZE9ubHlNYXBMaWtlQ29uc3RydWN0
b3JTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFJl
cG9ydEV4dHJhTWVtb3J5Q29zdENvbnN0cnVjdG9yU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OnNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RTZXJpYWxpemF0aW9uQ29uc3RydWN0b3JTZXR0ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFNlcmlhbGl6YXRp
b25JbmRpcmVjdEluaGVyaXRhbmNlQ29uc3RydWN0b3JTZXR0ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Q29uc3RydWN0
b3JTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFNl
cmlhbGl6YXRpb25Jbmhlcml0RmluYWxDb25zdHJ1Y3RvclNldHRlcik6CisgICAgICAgIChXZWJD
b3JlOjpzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJm
YWNlQ29uc3RydWN0b3JTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0R2xvYmFs
T2JqZWN0VGVzdFN0cmluZ2lmaWVyQ29uc3RydWN0b3JTZXR0ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFN0cmluZ2lmaWVyQW5vbnltb3VzT3BlcmF0aW9u
Q29uc3RydWN0b3JTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0R2xvYmFsT2Jq
ZWN0VGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRpb25Db25zdHJ1Y3RvclNldHRlcik6CisgICAg
ICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0U3RyaW5naWZpZXJPcGVyYXRp
b25JbXBsZW1lbnRlZEFzQ29uc3RydWN0b3JTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0
SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uTmFtZWRUb1N0cmluZ0Nv
bnN0cnVjdG9yU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdEdsb2JhbE9iamVj
dFRlc3RTdHJpbmdpZmllclJlYWRPbmx5QXR0cmlidXRlQ29uc3RydWN0b3JTZXR0ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFN0cmluZ2lmaWVyUmVhZFdy
aXRlQXR0cmlidXRlQ29uc3RydWN0b3JTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNU
ZXN0R2xvYmFsT2JqZWN0VGVzdFR5cGVkZWZzQ29uc3RydWN0b3JTZXR0ZXIpOgorICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXJD
b25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6SlNU
ZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllcjo6Z2V0T3duUHJvcGVydHlOYW1lcyk6CisgICAg
ICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2lu
Z0V4Y2VwdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RJbmRleGVkU2V0dGVyVGhy
b3dpbmdFeGNlcHRpb25Db25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6SlNUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uOjpnZXRPd25Q
cm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVz
dEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllckNvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVy
dGllcyk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZp
ZXI6OmdldE93blByb3BlcnR5TmFtZXMpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RJbnRlcmZhY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0SW50ZXJm
YWNlQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6
OnNldEpTVGVzdEludGVyZmFjZUNvbnN0cnVjdG9ySW1wbGVtZW50c1N0YXRpY0F0dHJTZXR0ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c1N0cjJTZXR0
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c1N0cjNT
ZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c05v
ZGVTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0
b3JTdXBwbGVtZW50YWxTdGF0aWNBdHRyU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpT
VGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbFN0cjJTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
c2V0SlNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsU3RyM1NldHRlcik6CisgICAgICAgIChXZWJD
b3JlOjpzZXRKU1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxOb2RlU2V0dGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OnNldEpTVGVzdEludGVyZmFjZVJlZmxlY3RBdHRyaWJ1dGVTZXR0ZXIpOgorICAg
ICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2VMZWFkaW5nVW5k
ZXJzY29yZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RJbnRlcmZhY2VMZWFkaW5nVW5k
ZXJzY29yZUNvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGllcyk6CisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEl0ZXJhYmxlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkpTVGVzdEl0ZXJhYmxlQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKToKKyAg
ICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0
b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JDb25z
dHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNU
ZXN0SlNCdWlsdGluQ29uc3RydWN0b3JUZXN0QXR0cmlidXRlUldDdXN0b21TZXR0ZXIpOgorICAg
ICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3Rl
bmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJD
b25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMpOgorICAgICAgICAqIGJpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlm
aWVyQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6
OkpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllcjo6Z2V0T3duUHJvcGVydHlT
bG90QnlJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0
ZXJOb0lkZW50aWZpZXI6OmdldE93blByb3BlcnR5TmFtZXMpOgorICAgICAgICAoV2ViQ29yZTo6
SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyOjpwdXRCeUluZGV4KToKKyAg
ICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0
dGVyVGhyb3dpbmdFeGNlcHRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRB
bmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb25Db25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVBy
b3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVy
VGhyb3dpbmdFeGNlcHRpb246OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgpOgorICAgICAgICAo
V2ViQ29yZTo6SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246Omdl
dE93blByb3BlcnR5TmFtZXMpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRBbmRJbmRl
eGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246OnB1dEJ5SW5kZXgpOgorICAgICAgICAqIGJpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRp
Zmllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJX
aXRoSWRlbnRpZmllckNvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGllcyk6CisgICAgICAg
IChXZWJDb3JlOjpKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6Z2V0
T3duUHJvcGVydHlTbG90QnlJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZEFu
ZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6Z2V0T3duUHJvcGVydHlOYW1lcyk6CisgICAg
ICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6
cHV0QnlJbmRleCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5h
bWVkQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRDb25zdHJ1
Y3RvckNvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3Jl
OjpKU1Rlc3ROYW1lZENvbnN0cnVjdG9yTmFtZWRDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3Bl
cnRpZXMpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZERl
bGV0ZXJOb0lkZW50aWZpZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWREZWxl
dGVyTm9JZGVudGlmaWVyQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkRGVsZXRlck5vSWRlbnRpZmllcjo6Z2V0T3duUHJvcGVy
dHlTbG90QnlJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZERlbGV0ZXJOb0lk
ZW50aWZpZXI6OmdldE93blByb3BlcnR5TmFtZXMpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0
TmFtZWREZWxldGVyTm9JZGVudGlmaWVyOjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgpOgorICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4
Y2VwdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZERlbGV0ZXJUaHJvd2lu
Z0V4Y2VwdGlvbkNvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGllcyk6CisgICAgICAgIChX
ZWJDb3JlOjpKU1Rlc3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6Z2V0T3duUHJvcGVy
dHlTbG90QnlJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZERlbGV0ZXJUaHJv
d2luZ0V4Y2VwdGlvbjo6Z2V0T3duUHJvcGVydHlOYW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpK
U1Rlc3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6ZGVsZXRlUHJvcGVydHlCeUluZGV4
KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxldGVy
V2l0aElkZW50aWZpZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWREZWxldGVy
V2l0aElkZW50aWZpZXJDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6SlNUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXI6OmdldE93blByb3Bl
cnR5U2xvdEJ5SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWREZWxldGVyV2l0
aElkZW50aWZpZXI6OmdldE93blByb3BlcnR5TmFtZXMpOgorICAgICAgICAoV2ViQ29yZTo6SlNU
ZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXI6OmRlbGV0ZVByb3BlcnR5QnlJbmRleCk6Cisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkRGVsZXRlcldpdGhJ
bmRleGVkR2V0dGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkRGVsZXRlcldp
dGhJbmRleGVkR2V0dGVyQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVkR2V0dGVyOjpnZXRPd25Q
cm9wZXJ0eVNsb3RCeUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkRGVsZXRl
cldpdGhJbmRleGVkR2V0dGVyOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKiBiaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoQ29uc3RydWN0b3I6OmluaXRp
YWxpemVQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkR2V0dGVyQ2Fs
bFdpdGg6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SlNU
ZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aDo6Z2V0T3duUHJvcGVydHlOYW1lcyk6CisgICAgICAgICog
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyQ29uc3Ry
dWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5h
bWVkR2V0dGVyTm9JZGVudGlmaWVyOjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KToKKyAgICAg
ICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyOjpnZXRPd25Qcm9wZXJ0
eU5hbWVzKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRH
ZXR0ZXJXaXRoSWRlbnRpZmllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZEdl
dHRlcldpdGhJZGVudGlmaWVyQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXI6OmdldE93blBy
b3BlcnR5U2xvdEJ5SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRHZXR0ZXJX
aXRoSWRlbnRpZmllcjo6Z2V0T3duUHJvcGVydHlOYW1lcyk6CisgICAgICAgICogYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyQ29uc3RydWN0b3I6Omlu
aXRpYWxpemVQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkU2V0dGVy
Tm9JZGVudGlmaWVyOjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KToKKyAgICAgICAgKFdlYkNv
cmU6OkpTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKToK
KyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyOjpwdXRCeUlu
ZGV4KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0
ZXJUaHJvd2luZ0V4Y2VwdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZFNl
dHRlclRocm93aW5nRXhjZXB0aW9uQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKToK
KyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246Omdl
dE93blByb3BlcnR5U2xvdEJ5SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRT
ZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6Z2V0T3duUHJvcGVydHlOYW1lcyk6CisgICAgICAgIChX
ZWJDb3JlOjpKU1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uOjpwdXRCeUluZGV4KToK
KyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRo
SWRlbnRpZmllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZFNldHRlcldpdGhJ
ZGVudGlmaWVyQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdl
YkNvcmU6OkpTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXI6OmdldE93blByb3BlcnR5U2xv
dEJ5SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRp
Zmllcjo6Z2V0T3duUHJvcGVydHlOYW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1l
ZFNldHRlcldpdGhJZGVudGlmaWVyOjpwdXRCeUluZGV4KToKKyAgICAgICAgKiBiaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQ29uc3Ry
dWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5h
bWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXI6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgpOgor
ICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlcjo6Z2V0
T3duUHJvcGVydHlOYW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZFNldHRlcldp
dGhJbmRleGVkR2V0dGVyOjpwdXRCeUluZGV4KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5k
U2V0dGVyQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNv
cmU6OkpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXI6OmdldE93blBy
b3BlcnR5U2xvdEJ5SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRTZXR0ZXJX
aXRoSW5kZXhlZEdldHRlckFuZFNldHRlcjo6Z2V0T3duUHJvcGVydHlOYW1lcyk6CisgICAgICAg
IChXZWJDb3JlOjpKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyOjpw
dXRCeUluZGV4KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFt
ZWRTZXR0ZXJXaXRoT3ZlcnJpZGVCdWlsdGlucy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rl
c3ROYW1lZFNldHRlcldpdGhPdmVycmlkZUJ1aWx0aW5zQ29uc3RydWN0b3I6OmluaXRpYWxpemVQ
cm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkU2V0dGVyV2l0aE92ZXJy
aWRlQnVpbHRpbnM6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgpOgorICAgICAgICAoV2ViQ29y
ZTo6SlNUZXN0TmFtZWRTZXR0ZXJXaXRoT3ZlcnJpZGVCdWlsdGluczo6Z2V0T3duUHJvcGVydHlO
YW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZFNldHRlcldpdGhPdmVycmlkZUJ1
aWx0aW5zOjpwdXRCeUluZGV4KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXMuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNDb25zdHJ1
Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFt
ZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXM6OmdldE93blByb3BlcnR5U2xvdEJ5SW5k
ZXgpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVBy
b3BlcnRpZXM6OmdldE93blByb3BlcnR5TmFtZXMpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0
TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXM6OnB1dEJ5SW5kZXgpOgorICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdh
YmxlUHJvcGVydGllc0FuZE92ZXJyaWRlQnVpbHRpbnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0
aW5zQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6
OkpTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWls
dGluczo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rl
c3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0FuZE92ZXJyaWRlQnVpbHRpbnM6
OmdldE93blByb3BlcnR5TmFtZXMpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRTZXR0
ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5zOjpwdXRCeUluZGV4
KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROb2RlQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0
aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5vZGVQcm90b3R5cGU6OmZpbmlzaENyZWF0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE5vZGVOYW1lU2V0dGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkpTVGVzdE5vZGU6OnNlcmlhbGl6ZSk6CisgICAgICAgICogYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0
RGljdGlvbmFyeTxUZXN0T2JqOjpEaWN0aW9uYXJ5Pik6CisgICAgICAgIChXZWJDb3JlOjpjb252
ZXJ0RGljdGlvbmFyeVRvSlMpOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydERpY3Rpb25hcnk8
VGVzdE9iajo6RGljdGlvbmFyeVRoYXRTaG91bGROb3RUb2xlcmF0ZU51bGw+KToKKyAgICAgICAg
KFdlYkNvcmU6OmNvbnZlcnREaWN0aW9uYXJ5PFRlc3RPYmo6OkRpY3Rpb25hcnlUaGF0U2hvdWxk
VG9sZXJhdGVOdWxsPik6CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0RGljdGlvbmFyeTxBbHRl
cm5hdGVEaWN0aW9uYXJ5TmFtZT4pOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydERpY3Rpb25h
cnk8VGVzdE9iajo6UGFyZW50RGljdGlvbmFyeT4pOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVy
dERpY3Rpb25hcnk8VGVzdE9iajo6Q2hpbGREaWN0aW9uYXJ5Pik6CisgICAgICAgIChXZWJDb3Jl
Ojpjb252ZXJ0RGljdGlvbmFyeTxUZXN0T2JqOjpDb25kaXRpb25hbERpY3Rpb25hcnlBPik6Cisg
ICAgICAgIChXZWJDb3JlOjpjb252ZXJ0RGljdGlvbmFyeTxUZXN0T2JqOjpDb25kaXRpb25hbERp
Y3Rpb25hcnlCPik6CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0RGljdGlvbmFyeTxUZXN0T2Jq
OjpDb25kaXRpb25hbERpY3Rpb25hcnlDPik6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RPYmpD
b25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6SlNU
ZXN0T2JqUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpKU1Rl
c3RPYmo6OmdldE93blByb3BlcnR5TmFtZXMpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0
T2JqQ29uc3RydWN0b3JTdGF0aWNTdHJpbmdBdHRyU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OnNldEpTVGVzdE9iakVudW1BdHRyU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVz
dE9iakJ5dGVBdHRyU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9iak9jdGV0
QXR0clNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpTaG9ydEF0dHJTZXR0
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqQ2xhbXBlZFNob3J0QXR0clNldHRl
cik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpFbmZvcmNlUmFuZ2VTaG9ydEF0dHJT
ZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqVW5zaWduZWRTaG9ydEF0dHJT
ZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqTG9uZ0F0dHJTZXR0ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqTG9uZ0xvbmdBdHRyU2V0dGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OnNldEpTVGVzdE9ialVuc2lnbmVkTG9uZ0xvbmdBdHRyU2V0dGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9ialN0cmluZ0F0dHJTZXR0ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6c2V0SlNUZXN0T2JqVXN2c3RyaW5nQXR0clNldHRlcik6CisgICAgICAgIChXZWJD
b3JlOjpzZXRKU1Rlc3RPYmpUZXN0T2JqQXR0clNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpz
ZXRKU1Rlc3RPYmpUZXN0TnVsbGFibGVPYmpBdHRyU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OnNldEpTVGVzdE9iakxlbmllbnRUZXN0T2JqQXR0clNldHRlcik6CisgICAgICAgIChXZWJDb3Jl
OjpzZXRKU1Rlc3RPYmpTdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZ1NldHRlcik6
CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpVc3ZzdHJpbmdBdHRyVHJlYXRpbmdOdWxs
QXNFbXB0eVN0cmluZ1NldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpCeXRl
U3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmdTZXR0ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6c2V0SlNUZXN0T2JqU3RyaW5nTG9uZ1JlY29yZEF0dHJTZXR0ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6c2V0SlNUZXN0T2JqVXN2c3RyaW5nTG9uZ1JlY29yZEF0dHJTZXR0ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqU3RyaW5nT2JqUmVjb3JkQXR0clNldHRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpTdHJpbmdOdWxsYWJsZU9ialJlY29yZEF0dHJT
ZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqRGljdGlvbmFyeUF0dHJTZXR0
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqTnVsbGFibGVEaWN0aW9uYXJ5QXR0
clNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpBbm5vdGF0ZWRUeXBlSW5V
bmlvbkF0dHJTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqQW5ub3RhdGVk
VHlwZUluU2VxdWVuY2VBdHRyU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9i
akltcGxlbWVudGF0aW9uRW51bUF0dHJTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNU
ZXN0T2JqWE1MT2JqQXR0clNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpD
cmVhdGVTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqUmVmbGVjdGVkU3Ry
aW5nQXR0clNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRV
U1ZTdHJpbmdBdHRyU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9ialJlZmxl
Y3RlZEludGVncmFsQXR0clNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpS
ZWZsZWN0ZWRVbnNpZ25lZEludGVncmFsQXR0clNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpz
ZXRKU1Rlc3RPYmpSZWZsZWN0ZWRCb29sZWFuQXR0clNldHRlcik6CisgICAgICAgIChXZWJDb3Jl
OjpzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRVUkxBdHRyU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OnNldEpTVGVzdE9ialJlZmxlY3RlZFVTVlVSTEF0dHJTZXR0ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6c2V0SlNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tSW50ZWdyYWxBdHRyU2V0dGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OnNldEpTVGVzdE9ialJlZmxlY3RlZEN1c3RvbUJvb2xlYW5BdHRyU2V0dGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9ialJlZmxlY3RlZEN1c3RvbVVSTEF0dHJT
ZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqRW5hYmxlZEF0UnVudGltZUF0
dHJpYnV0ZVNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpDb25zdHJ1Y3Rv
ckVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGVTdGF0aWNTZXR0ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6c2V0SlNUZXN0T2JqVHlwZWRBcnJheUF0dHJTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
c2V0SlNUZXN0T2JqQ3VzdG9tQXR0clNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rl
c3RPYmpPbmZvb1NldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpPbndlYmtp
dGZvb1NldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpXaXRoRXhlY1N0YXRl
QXR0cmlidXRlU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9ialdpdGhDYWxs
V2l0aEFuZFNldHRlckNhbGxXaXRoQXR0cmlidXRlU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OnNldEpTVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlU2V0dGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0
QW5kRXhlY1N0YXRlQXR0cmlidXRlU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVz
dE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kRXhlY1N0YXRlV2l0aFNwYWNlc0F0dHJp
YnV0ZVNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0
dHIxU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0
cjJTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRy
M1NldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHI0
Q29uc3RydWN0b3JTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqQ29uZGl0
aW9uYWxBdHRyNUNvbnN0cnVjdG9yU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVz
dE9iakNvbmRpdGlvbmFsQXR0cjZDb25zdHJ1Y3RvclNldHRlcik6CisgICAgICAgIChXZWJDb3Jl
OjpzZXRKU1Rlc3RPYmpBbnlBdHRyaWJ1dGVTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0
SlNUZXN0T2JqT2JqZWN0QXR0cmlidXRlU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpT
VGVzdE9iak11dGFibGVQb2ludFNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RP
YmpTdHJhd2JlcnJ5U2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9iaklkU2V0
dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9ialJlcGxhY2VhYmxlQXR0cmlidXRl
U2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9iak51bGxhYmxlTG9uZ1NldHRh
YmxlQXR0cmlidXRlU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9iak51bGxh
YmxlU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGVTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0
SlNUZXN0T2JqTnVsbGFibGVVU1ZTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZVNldHRlcik6CisgICAg
ICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpOdWxsYWJsZUJ5dGVTdHJpbmdTZXR0YWJsZUF0dHJp
YnV0ZVNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpBdHRyaWJ1dGVXaXRo
UmVzZXJ2ZWRFbnVtVHlwZVNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpQ
dXRGb3J3YXJkc0F0dHJpYnV0ZVNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RP
YmpQdXRGb3J3YXJkc051bGxhYmxlQXR0cmlidXRlU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OnNldEpTVGVzdE9ialN0cmluZ2lmaWVyQXR0cmlidXRlU2V0dGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OnNldEpTVGVzdE9iakNvbmRpdGlvbmFsbHlSZWFkV3JpdGVBdHRyaWJ1dGVTZXR0ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBbmRDb25kaXRpb25hbGx5
UmVhZFdyaXRlQXR0cmlidXRlU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9i
akNvbmRpdGlvbmFsbHlFeHBvc2VkVG9XaW5kb3dBdHRyaWJ1dGVTZXR0ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6c2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxseUV4cG9zZWRUb1dvcmtlckF0dHJpYnV0
ZVNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpDb25kaXRpb25hbGx5RXhw
b3NlZFRvV2luZG93QW5kV29ya2VyQXR0cmlidXRlU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkpTVGVzdE9iajo6c2VyaWFsaXplKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpK
U1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0
aWVzKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcmxvYWRl
ZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RP
dmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlQ29uc3RydWN0b3I6OmluaXRpYWxpemVQ
cm9wZXJ0aWVzKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3Zl
cnJpZGVCdWlsdGlucy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RPdmVycmlkZUJ1aWx0
aW5zQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6
OkpTVGVzdE92ZXJyaWRlQnVpbHRpbnM6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgpOgorICAg
ICAgICAoV2ViQ29yZTo6SlNUZXN0T3ZlcnJpZGVCdWlsdGluczo6Z2V0T3duUHJvcGVydHlOYW1l
cyk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFBsdWdpbkludGVy
ZmFjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RQbHVnaW5JbnRlcmZhY2VDb25zdHJ1
Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0UGx1
Z2luSW50ZXJmYWNlOjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KToKKyAgICAgICAgKFdlYkNv
cmU6OkpTVGVzdFBsdWdpbkludGVyZmFjZTo6cHV0QnlJbmRleCk6CisgICAgICAgICogYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFByb21pc2VSZWplY3Rpb25FdmVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpjb252ZXJ0RGljdGlvbmFyeTxUZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50
OjpJbml0Pik6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnRD
b25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMpOgorICAgICAgICAqIGJpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkpTVGVzdFNlcmlhbGl6YXRpb25Db25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0U2VyaWFsaXphdGlvbkZpcnN0U3RyaW5nQXR0cmli
dXRlU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdFNlcmlhbGl6YXRpb25TZWNv
bmRMb25nQXR0cmlidXRlU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdFNlcmlh
bGl6YXRpb25UaGlyZFVuc2VyaWFsaXphYmxlQXR0cmlidXRlU2V0dGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OnNldEpTVGVzdFNlcmlhbGl6YXRpb25Gb3VydGhVbnJlc3RyaWN0ZWREb3VibGVBdHRy
aWJ1dGVTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0U2VyaWFsaXphdGlvbkZp
ZnRoTG9uZ0F0dHJpYnV0ZVNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RTZXJp
YWxpemF0aW9uU2l4dGhUeXBlZGVmQXR0cmlidXRlU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OnNldEpTVGVzdFNlcmlhbGl6YXRpb25TZXZlbnRoRGlyZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1
dGVTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0U2VyaWFsaXphdGlvbkVpZ2h0
aEluZGlyZWN0bHlBdHRyaWJ1dGVTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0
U2VyaWFsaXphdGlvbk5pbnRoT3B0aW9uYWxEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZVNl
dHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RTZXJpYWxpemF0aW9uVGVudGhGcm96
ZW5BcnJheUF0dHJpYnV0ZVNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RTZXJp
YWxpemF0aW9uRWxldmVudGhTZXF1ZW5jZUF0dHJpYnV0ZVNldHRlcik6CisgICAgICAgIChXZWJD
b3JlOjpzZXRKU1Rlc3RTZXJpYWxpemF0aW9uVHdlbGZ0aEludGVyZmFjZVNlcXVlbmNlQXR0cmli
dXRlU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFNlcmlhbGl6YXRpb246OnNlcmlh
bGl6ZSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6
YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFNl
cmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9w
ZXJ0aWVzKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFs
aXphdGlvbkluaGVyaXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0U2VyaWFsaXphdGlv
bkluaGVyaXRDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6c2V0SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRJbmhlcml0TG9uZ0F0dHJpYnV0ZVNl
dHRlcik6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdDo6c2Vy
aWFsaXplKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFs
aXphdGlvbkluaGVyaXRGaW5hbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RTZXJpYWxp
emF0aW9uSW5oZXJpdEZpbmFsQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxGaW5hbExv
bmdBdHRyaWJ1dGVGb29TZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0U2VyaWFs
aXphdGlvbkluaGVyaXRGaW5hbEZpbmFsTG9uZ0F0dHJpYnV0ZUJhclNldHRlcik6CisgICAgICAg
IChXZWJDb3JlOjpKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsOjpzZXJpYWxpemUpOgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0
VmFsdWVJbnRlcmZhY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0U2VyaWFsaXplZFNj
cmlwdFZhbHVlSW50ZXJmYWNlQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVZh
bHVlU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZUludGVyZmFjZUNhY2hlZFZhbHVlU2V0dGVyKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0U3RhbmRhbG9uZURpY3Rpb25hcnkuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Y29udmVydERpY3Rpb25hcnk8RGljdGlvbmFyeUltcGxOYW1lPik6CisgICAgICAgIChX
ZWJDb3JlOjpjb252ZXJ0RGljdGlvbmFyeVRvSlMpOgorICAgICAgICAqIGJpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rl
c3RTdHJpbmdpZmllckNvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGllcyk6CisgICAgICAg
ICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyQW5vbnltb3VzT3Bl
cmF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFN0cmluZ2lmaWVyQW5vbnltb3Vz
T3BlcmF0aW9uQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKToKKyAgICAgICAgKiBi
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvbi5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RTdHJpbmdpZmllck5hbWVkT3BlcmF0aW9uQ29u
c3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25JbXBsZW1lbnRlZEFzLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uSW1wbGVtZW50ZWRB
c0NvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGllcyk6CisgICAgICAgICogYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uTmFtZWRUb1N0cmluZy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9T
dHJpbmdDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMpOgorICAgICAgICAqIGJpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllclJlYWRPbmx5QXR0cmlidXRlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGVD
b25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMpOgorICAgICAgICAqIGJpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJpYnV0ZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1Rlc3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJpYnV0ZUNvbnN0
cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rl
c3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJpYnV0ZUlkZW50aWZpZXJTZXR0ZXIpOgorICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RUeXBlZGVmcy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpKU1Rlc3RUeXBlZGVmc0NvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGll
cyk6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RUeXBlZGVmc1Vuc2lnbmVkTG9uZ0xvbmdB
dHRyU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdFR5cGVkZWZzU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdFR5cGVkZWZz
QXR0cmlidXRlV2l0aENsYW1wU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdFR5
cGVkZWZzQXR0cmlidXRlV2l0aENsYW1wSW5UeXBlZGVmU2V0dGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OnNldEpTVGVzdFR5cGVkZWZzQnVmZmVyU291cmNlQXR0clNldHRlcik6CisgICAgICAgIChX
ZWJDb3JlOjpzZXRKU1Rlc3RUeXBlZGVmc0RvbVRpbWVTdGFtcEF0dHJTZXR0ZXIpOgorICAgICAg
ICAqIGJyaWRnZS9OUF9qc29iamVjdC5jcHA6CisgICAgICAgICogYnJpZGdlL2MvY19pbnN0YW5j
ZS5jcHA6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpDSW5zdGFuY2U6OnN0cmluZ1ZhbHVlIGNv
bnN0KToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OkNJbnN0YW5jZTo6Z2V0UHJvcGVydHlOYW1l
cyk6CisgICAgICAgICogYnJpZGdlL2MvY191dGlsaXR5LmNwcDoKKyAgICAgICAgKEpTQzo6Qmlu
ZGluZ3M6OmlkZW50aWZpZXJGcm9tTlBJZGVudGlmaWVyKToKKyAgICAgICAgKiBicmlkZ2Uvb2Jq
Yy9XZWJTY3JpcHRPYmplY3QubW06CisgICAgICAgICgtW1dlYlNjcmlwdE9iamVjdCBjYWxsV2Vi
U2NyaXB0TWV0aG9kOndpdGhBcmd1bWVudHM6XSk6CisgICAgICAgICgtW1dlYlNjcmlwdE9iamVj
dCBzZXRWYWx1ZTpmb3JLZXk6XSk6CisgICAgICAgICgtW1dlYlNjcmlwdE9iamVjdCB2YWx1ZUZv
cktleTpdKToKKyAgICAgICAgKC1bV2ViU2NyaXB0T2JqZWN0IHJlbW92ZVdlYlNjcmlwdEtleTpd
KToKKyAgICAgICAgKC1bV2ViU2NyaXB0T2JqZWN0IGhhc1dlYlNjcmlwdEtleTpdKToKKyAgICAg
ICAgKiBicmlkZ2Uvb2JqYy9vYmpjX3J1bnRpbWUubW06CisgICAgICAgIChKU0M6OkJpbmRpbmdz
OjpPYmpjRmFsbGJhY2tPYmplY3RJbXA6OmRlZmF1bHRWYWx1ZSk6CisgICAgICAgICogYnJpZGdl
L29iamMvb2JqY191dGlsaXR5Lm1tOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6Y29udmVydE5T
U3RyaW5nVG9TdHJpbmcpOgorICAgICAgICAqIGJyaWRnZS9ydW50aW1lX2FycmF5LmNwcDoKKyAg
ICAgICAgKEpTQzo6UnVudGltZUFycmF5OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKToKKyAgICAgICAg
KiBjb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uUGFyc2VyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpsb2FkVHJpZ2dlcik6CisgICAgICAgIChXZWJD
b3JlOjpDb250ZW50RXh0ZW5zaW9uczo6bG9hZEFjdGlvbik6CisgICAgICAgICogY3J5cHRvL1N1
YnRsZUNyeXB0by5jcHA6CisgICAgICAgIChXZWJDb3JlOjpub3JtYWxpemVDcnlwdG9BbGdvcml0
aG1QYXJhbWV0ZXJzKToKKyAgICAgICAgKiBkb21qaXQvRE9NSklUSGVscGVycy5oOgorICAgICAg
ICAoV2ViQ29yZTo6RE9NSklUOjp0b1dyYXBwZXJTbG93KToKKyAgICAgICAgKiBodG1sL0hUTUxN
ZWRpYUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29udHJvbGxlckpTVmFsdWUpOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6dXBkYXRlQ2FwdGlvbkNvbnRhaW5l
cik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjplbnN1cmVNZWRpYUNvbnRy
b2xzSW5qZWN0ZWRTY3JpcHQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6
c2V0Q29udHJvbGxlckpTUHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxl
bWVudDo6ZGlkQWRkVXNlckFnZW50U2hhZG93Um9vdCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
TWVkaWFFbGVtZW50Ojp1cGRhdGVNZWRpYUNvbnRyb2xzQWZ0ZXJQcmVzZW50YXRpb25Nb2RlQ2hh
bmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OmdldEN1cnJlbnRNZWRp
YUNvbnRyb2xzU3RhdHVzKToKKyAgICAgICAgKiBodG1sL0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBsdWdJbkltYWdlRWxlbWVudDo6ZGlkQWRkVXNl
ckFnZW50U2hhZG93Um9vdCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5k
SG9zdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OmFkZFNl
bGZUb0dsb2JhbE9iamVjdEluV29ybGQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJv
bnRlbmRIb3N0OjpzaG93Q29udGV4dE1lbnUpOgorICAgICAgICAqIGluc3BlY3Rvci9XZWJJbmpl
Y3RlZFNjcmlwdEhvc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViSW5qZWN0ZWRTY3JpcHRI
b3N0OjpzdWJ0eXBlKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnN0cnVjdEludGVybmFsUHJvcGVy
dHkpOgorICAgICAgICAoV2ViQ29yZTo6b2JqZWN0Rm9yUGF5bWVudE9wdGlvbnMpOgorICAgICAg
ICAoV2ViQ29yZTo6b2JqZWN0Rm9yUGF5bWVudEN1cnJlbmN5QW1vdW50KToKKyAgICAgICAgKFdl
YkNvcmU6Om9iamVjdEZvclBheW1lbnRJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6Om9iamVjdEZv
clBheW1lbnRTaGlwcGluZ09wdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpvYmplY3RGb3JQYXlt
ZW50RGV0YWlsc01vZGlmaWVyKToKKyAgICAgICAgKFdlYkNvcmU6Om9iamVjdEZvclBheW1lbnRE
ZXRhaWxzKToKKyAgICAgICAgKFdlYkNvcmU6OmpzU3RyaW5nRm9yUGF5bWVudFJlcXVlc3RTdGF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJJbmplY3RlZFNjcmlwdEhvc3Q6OmdldEludGVybmFs
UHJvcGVydGllcyk6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDYW52YXNB
Z2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDYW52YXNBZ2VudDo6Y29uc29s
ZVN0YXJ0UmVjb3JkaW5nQ2FudmFzKToKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3Bl
Y3RvckRPTUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50Ojpi
dWlsZE9iamVjdEZvckV2ZW50TGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
RE9NQWdlbnQ6OnNjcmlwdFZhbHVlQXNOb2RlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRz
L3BhZ2UvUGFnZUF1ZGl0QWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFnZUF1ZGl0QWdl
bnQ6OnBvcHVsYXRlQXVkaXRPYmplY3QpOgorICAgICAgICAqIHBhZ2UvUGFnZUNvbnNvbGVDbGll
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFnZUNvbnNvbGVDbGllbnQ6OnNjcmVlbnNob3Qp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0N1c3RvbVBhaW50SW1hZ2UuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Q3VzdG9tUGFpbnRJbWFnZTo6ZG9DdXN0b21QYWludCk6CisgICAgICAg
ICogdGVzdGluZy9qcy9XZWJDb3JlVGVzdFN1cHBvcnQuY3BwOgorICAgICAgICAoV2ViQ29yZVRl
c3RTdXBwb3J0OjppbmplY3RJbnRlcm5hbHNPYmplY3QpOgorICAgICAgICAoV2ViQ29yZVRlc3RT
dXBwb3J0OjpzZXR1cE5ld2x5Q3JlYXRlZFNlcnZpY2VXb3JrZXIpOgorICAgICAgICAqIHdvcmts
ZXRzL1BhaW50V29ya2xldEdsb2JhbFNjb3BlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhaW50
V29ya2xldEdsb2JhbFNjb3BlOjpyZWdpc3RlclBhaW50KToKKwogMjAxOS0wOC0yNiAgRGV2aW4g
Um91c3NvICA8ZHJvdXNzb0BhcHBsZS5jb20+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogdW5p
ZnkgYWdlbnQgY29tbWFuZCBlcnJvciBtZXNzYWdlcwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9lbmNyeXB0ZWRtZWRpYS9sZWdhY3kvTGVnYWN5Q0RNU2Vzc2lvbkNsZWFyS2V5LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL2xlZ2Fj
eS9MZWdhY3lDRE1TZXNzaW9uQ2xlYXJLZXkuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL2xlZ2FjeS9MZWdhY3lDRE1TZXNzaW9u
Q2xlYXJLZXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMDksNyArMTA5LDcgQEAgYm9vbCBDRE1TZXNz
aW9uQ2xlYXJLZXk6OnVwZGF0ZShVaW50OEFycgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KIAotICAgICAgICBhdXRvIGtleXNBcnJheVZhbHVlID0gYXNPYmplY3Qoa2V5c0RhdGFWYWx1
ZSktPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAia2V5cyIpKTsK
KyAgICAgICAgYXV0byBrZXlzQXJyYXlWYWx1ZSA9IGFzT2JqZWN0KGtleXNEYXRhVmFsdWUpLT5n
ZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAia2V5cyIpKTsKICAgICAgICAg
aWYgKHNjb3BlLmV4Y2VwdGlvbigpIHx8ICFpc0pTQXJyYXkoa2V5c0FycmF5VmFsdWUpKSB7CiAg
ICAgICAgICAgICBMT0coTWVkaWEsICJDRE1TZXNzaW9uQ2xlYXJLZXk6OnVwZGF0ZSglcCkgLSBm
YWlsZWQ6IGtleXMgYXJyYXkgbWlzc2luZyBvciBlbXB0eSIsIHRoaXMpOwogICAgICAgICAgICAg
YnJlYWs7CkBAIC0xMzMsOCArMTMzLDggQEAgYm9vbCBDRE1TZXNzaW9uQ2xlYXJLZXk6OnVwZGF0
ZShVaW50OEFycgogCiAgICAgICAgICAgICBhdXRvIGtleU9iamVjdCA9IGFzT2JqZWN0KGtleVZh
bHVlKTsKIAotICAgICAgICAgICAgYXV0byBnZXRTdHJpbmdQcm9wZXJ0eSA9IFsmc2NvcGUsICZz
dGF0ZSwgJmtleU9iamVjdF0oY29uc3QgY2hhciogbmFtZSkgLT4gU3RyaW5nIHsKLSAgICAgICAg
ICAgICAgICBhdXRvIHZhbHVlID0ga2V5T2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKCZzdGF0ZSwgbmFtZSkpOworICAgICAgICAgICAgYXV0byBnZXRTdHJpbmdQcm9w
ZXJ0eSA9IFsmc2NvcGUsICZzdGF0ZSwgJmtleU9iamVjdCwgJnZtXShjb25zdCBjaGFyKiBuYW1l
KSAtPiBTdHJpbmcgeworICAgICAgICAgICAgICAgIGF1dG8gdmFsdWUgPSBrZXlPYmplY3QtPmdl
dCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIG5hbWUpKTsKICAgICAgICAgICAg
ICAgICBpZiAoc2NvcGUuZXhjZXB0aW9uKCkgfHwgIXZhbHVlLmlzU3RyaW5nKCkpCiAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiB7IH07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
cGx1Z2lucy9RdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudC5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3BsdWdpbnMvUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQubW0J
KHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGx1Z2lucy9RdWlj
a1RpbWVQbHVnaW5SZXBsYWNlbWVudC5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE1NCw3ICsxNTQs
NyBAQCBib29sIFF1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50OjplbnN1cmVSCiAgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogICAgIEpTQzo6RXhlY1N0YXRlKiBleGVj
ID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CiAgICAgCi0gICAgSlNDOjpKU1ZhbHVlIHJl
cGxhY2VtZW50RnVuY3Rpb24gPSBnbG9iYWxPYmplY3QtPmdldChleGVjLCBKU0M6OklkZW50aWZp
ZXI6OmZyb21TdHJpbmcoZXhlYywgImNyZWF0ZVBsdWdpblJlcGxhY2VtZW50IikpOworICAgIEpT
Qzo6SlNWYWx1ZSByZXBsYWNlbWVudEZ1bmN0aW9uID0gZ2xvYmFsT2JqZWN0LT5nZXQoZXhlYywg
SlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiY3JlYXRlUGx1Z2luUmVwbGFjZW1lbnQi
KSk7CiAgICAgaWYgKHJlcGxhY2VtZW50RnVuY3Rpb24uaXNGdW5jdGlvbih2bSkpCiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIApAQCAtMTg1LDcgKzE4NSw3IEBAIGJvb2wgUXVpY2tUaW1lUGx1
Z2luUmVwbGFjZW1lbnQ6Omluc3RhbGwKICAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9IGdsb2Jh
bE9iamVjdC0+Z2xvYmFsRXhlYygpOwogCiAgICAgLy8gTG9va3VwIHRoZSAiY3JlYXRlUGx1Z2lu
UmVwbGFjZW1lbnQiIGZ1bmN0aW9uLgotICAgIEpTQzo6SlNWYWx1ZSByZXBsYWNlbWVudEZ1bmN0
aW9uID0gZ2xvYmFsT2JqZWN0LT5nZXQoZXhlYywgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KGV4ZWMsICJjcmVhdGVQbHVnaW5SZXBsYWNlbWVudCIpKTsKKyAgICBKU0M6OkpTVmFsdWUgcmVw
bGFjZW1lbnRGdW5jdGlvbiA9IGdsb2JhbE9iamVjdC0+Z2V0KGV4ZWMsIEpTQzo6SWRlbnRpZmll
cjo6ZnJvbVN0cmluZyh2bSwgImNyZWF0ZVBsdWdpblJlcGxhY2VtZW50IikpOwogICAgIGlmIChy
ZXBsYWNlbWVudEZ1bmN0aW9uLmlzVW5kZWZpbmVkT3JOdWxsKCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICBKU0M6OkpTT2JqZWN0KiByZXBsYWNlbWVudE9iamVjdCA9IHJlcGxhY2VtZW50
RnVuY3Rpb24udG9PYmplY3QoZXhlYyk7CkBAIC0yMDksNyArMjA5LDcgQEAgYm9vbCBRdWlja1Rp
bWVQbHVnaW5SZXBsYWNlbWVudDo6aW5zdGFsbAogICAgIH0KIAogICAgIC8vIEdldCB0aGUgPHZp
ZGVvPiBjcmVhdGVkIHRvIHJlcGxhY2UgdGhlIHBsdWctaW4uCi0gICAgSlNDOjpKU1ZhbHVlIHZh
bHVlID0gcmVwbGFjZW1lbnQuZ2V0KGV4ZWMsIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyhl
eGVjLCAidmlkZW8iKSk7CisgICAgSlNDOjpKU1ZhbHVlIHZhbHVlID0gcmVwbGFjZW1lbnQuZ2V0
KGV4ZWMsIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInZpZGVvIikpOwogICAgIGlm
ICghc2NvcGUuZXhjZXB0aW9uKCkgJiYgIXZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCiAgICAg
ICAgIG1fbWVkaWFFbGVtZW50ID0gSlNIVE1MVmlkZW9FbGVtZW50Ojp0b1dyYXBwZWQodm0sIHZh
bHVlKTsKIApAQCAtMjIwLDcgKzIyMCw3IEBAIGJvb2wgUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1l
bnQ6Omluc3RhbGwKICAgICB9CiAKICAgICAvLyBHZXQgdGhlIHNjcmlwdGluZyBpbnRlcmZhY2Uu
Ci0gICAgdmFsdWUgPSByZXBsYWNlbWVudC5nZXQoZXhlYywgSlNDOjpJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKGV4ZWMsICJzY3JpcHRPYmplY3QiKSk7CisgICAgdmFsdWUgPSByZXBsYWNlbWVudC5n
ZXQoZXhlYywgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAic2NyaXB0T2JqZWN0Iikp
OwogICAgIGlmICghc2NvcGUuZXhjZXB0aW9uKCkgJiYgIXZhbHVlLmlzVW5kZWZpbmVkT3JOdWxs
KCkpIHsKICAgICAgICAgbV9zY3JpcHRPYmplY3QgPSB2YWx1ZS50b09iamVjdChleGVjKTsKICAg
ICAgICAgc2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Fu
aW1hdGlvbi9LZXlmcmFtZUVmZmVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YW5pbWF0aW9uL0tleWZyYW1lRWZmZWN0LmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNl
L1dlYkNvcmUvYW5pbWF0aW9uL0tleWZyYW1lRWZmZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTIwOCw3ICsyMDgsNyBAQCBzdGF0aWMgaW5saW5lIEV4Y2VwdGlvbk9yPEtleWZyYW1lRWZmZWN0
CiAgICAgLy8gICAgICAgbmFtZSB0byBJREwgYXR0cmlidXRlIG5hbWUgYWxnb3JpdGhtLgogCiAg
ICAgLy8gMy4gTGV0IGlucHV0IHByb3BlcnRpZXMgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRo
ZSBFbnVtZXJhYmxlT3duTmFtZXMgb3BlcmF0aW9uIHdpdGgga2V5ZnJhbWUgaW5wdXQgYXMgdGhl
IG9iamVjdC4KLSAgICBQcm9wZXJ0eU5hbWVBcnJheSBpbnB1dFByb3BlcnRpZXMoJnZtLCBQcm9w
ZXJ0eU5hbWVNb2RlOjpTdHJpbmdzLCBQcml2YXRlU3ltYm9sTW9kZTo6RXhjbHVkZSk7CisgICAg
UHJvcGVydHlOYW1lQXJyYXkgaW5wdXRQcm9wZXJ0aWVzKHZtLCBQcm9wZXJ0eU5hbWVNb2RlOjpT
dHJpbmdzLCBQcml2YXRlU3ltYm9sTW9kZTo6RXhjbHVkZSk7CiAgICAgSlNPYmplY3Q6OmdldE93
blByb3BlcnR5TmFtZXMoa2V5ZnJhbWVzSW5wdXQuZ2V0KCksICZzdGF0ZSwgaW5wdXRQcm9wZXJ0
aWVzLCBFbnVtZXJhdGlvbk1vZGUoKSk7CiAKICAgICAvLyA0LiBNYWtlIHVwIGEgbmV3IGxpc3Qg
YW5pbWF0aW9uIHByb3BlcnRpZXMgdGhhdCBjb25zaXN0cyBvZiBhbGwgb2YgdGhlIHByb3BlcnRp
ZXMgdGhhdCBhcmUgaW4gYm90aCBpbnB1dCBwcm9wZXJ0aWVzIGFuZCBhbmltYXRhYmxlCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9HQ0NvbnRyb2xsZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0dDQ29udHJvbGxlci5jcHAJKHJldmlzaW9u
IDI0OTEyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0dDQ29udHJvbGxlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3
LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA3LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0xNTAsNyArMTUwLDcgQEAgdm9pZCBHQ0NvbnRyb2xsZXI6OmR1
bXBIZWFwKCkKICAgICBWTSYgdm0gPSBjb21tb25WTSgpOwogICAgIEpTTG9ja0hvbGRlciBsb2Nr
KHZtKTsKIAotICAgIHNhbml0aXplU3RhY2tGb3JWTSgmdm0pOworICAgIHNhbml0aXplU3RhY2tG
b3JWTSh2bSk7CiAKICAgICBTdHJpbmcganNvbkRhdGE7CiAgICAgewpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSURCQmluZGluZ1V0aWxpdGllcy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSURCQmluZGluZ1V0aWxpdGllcy5jcHAJKHJldmlz
aW9uIDI0OTEyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0lEQkJpbmRpbmdVdGls
aXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIENvcHlyaWdo
dCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0
IChDKSAyMDEyIE1pY2hhZWwgUHJ1ZXR0IDxtaWNoYWVsQDY4ay5vcmc+Ci0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQsIDIwMTUsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE0LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02Niw5ICs2Niw5IEBAIHN0YXRpYyBi
b29sIGdldChFeGVjU3RhdGUmIGV4ZWMsIEpTVmFsdWUKICAgICBpZiAoIW9iamVjdC5pc09iamVj
dCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICBWTSYgdm0gPSBleGVjLnZtKCk7CiAg
ICAgYXV0byogb2JqID0gYXNPYmplY3Qob2JqZWN0KTsKLSAgICBJZGVudGlmaWVyIGlkZW50aWZp
ZXIgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZleGVjLnZtKCksIGtleVBhdGhFbGVtZW50KTsK
LSAgICBhdXRvJiB2bSA9IGV4ZWMudm0oKTsKKyAgICBJZGVudGlmaWVyIGlkZW50aWZpZXIgPSBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBrZXlQYXRoRWxlbWVudCk7CiAgICAgaWYgKG9iai0+
aW5oZXJpdHM8SlNBcnJheT4odm0pICYmIGtleVBhdGhFbGVtZW50ID09ICJsZW5ndGgiKSB7CiAg
ICAgICAgIHJlc3VsdCA9IG9iai0+Z2V0KCZleGVjLCBpZGVudGlmaWVyKTsKICAgICAgICAgcmV0
dXJuIHRydWU7CkBAIC03OSwxMyArNzksMTMgQEAgc3RhdGljIGJvb2wgZ2V0KEV4ZWNTdGF0ZSYg
ZXhlYywgSlNWYWx1ZQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICAg
ICAgaWYgKGtleVBhdGhFbGVtZW50ID09ICJ0eXBlIikgewotICAgICAgICAgICAgcmVzdWx0ID0g
anNTdHJpbmcoJnZtLCBqc0Nhc3Q8SlNCbG9iKj4ob2JqKS0+d3JhcHBlZCgpLnR5cGUoKSk7Cisg
ICAgICAgICAgICByZXN1bHQgPSBqc1N0cmluZyh2bSwganNDYXN0PEpTQmxvYio+KG9iaiktPndy
YXBwZWQoKS50eXBlKCkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAg
ICB9CiAgICAgaWYgKG9iai0+aW5oZXJpdHM8SlNGaWxlPih2bSkpIHsKICAgICAgICAgaWYgKGtl
eVBhdGhFbGVtZW50ID09ICJuYW1lIikgewotICAgICAgICAgICAgcmVzdWx0ID0ganNTdHJpbmco
JnZtLCBqc0Nhc3Q8SlNGaWxlKj4ob2JqKS0+d3JhcHBlZCgpLm5hbWUoKSk7CisgICAgICAgICAg
ICByZXN1bHQgPSBqc1N0cmluZyh2bSwganNDYXN0PEpTRmlsZSo+KG9iaiktPndyYXBwZWQoKS5u
YW1lKCkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICAgICAgaWYg
KGtleVBhdGhFbGVtZW50ID09ICJsYXN0TW9kaWZpZWQiKSB7CkBAIC0xMTgsOCArMTE4LDkgQEAg
c3RhdGljIGJvb2wgc2V0KEV4ZWNTdGF0ZSYgZXhlYywgSlNWYWx1ZQogewogICAgIGlmICghY2Fu
U2V0KG9iamVjdCwga2V5UGF0aEVsZW1lbnQpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
SWRlbnRpZmllciBpZGVudGlmaWVyID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmZXhlYy52bSgp
LCBrZXlQYXRoRWxlbWVudCk7Ci0gICAgYXNPYmplY3Qob2JqZWN0KS0+cHV0RGlyZWN0KGV4ZWMu
dm0oKSwgaWRlbnRpZmllciwganNWYWx1ZSk7CisgICAgVk0mIHZtID0gZXhlYy52bSgpOworICAg
IElkZW50aWZpZXIgaWRlbnRpZmllciA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIGtleVBh
dGhFbGVtZW50KTsKKyAgICBhc09iamVjdChvYmplY3QpLT5wdXREaXJlY3Qodm0sIGlkZW50aWZp
ZXIsIGpzVmFsdWUpOwogICAgIHJldHVybiB0cnVlOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0NTU1J1bGVMaXN0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1J1bGVMaXN0Q3VzdG9tLmNwcAkocmV2aXNpb24g
MjQ5MTI4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDU1NSdWxlTGlzdEN1c3Rv
bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA5LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHQgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTM5LDcgKzM5LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIGJv
b2wgSlNDU1NSdWxlTGlzdE93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6Okhh
bmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBj
b25zdCBjaGFyKiogcmVhc29uKQogewogICAgIEpTQ1NTUnVsZUxpc3QqIGpzQ1NTUnVsZUxpc3Qg
PSBqc0Nhc3Q8SlNDU1NSdWxlTGlzdCo+KGhhbmRsZS5zbG90KCktPmFzQ2VsbCgpKTsKLSAgICBp
ZiAoIWpzQ1NTUnVsZUxpc3QtPmhhc0N1c3RvbVByb3BlcnRpZXMoKmpzQ1NTUnVsZUxpc3QtPnZt
KCkpKQorICAgIGlmICghanNDU1NSdWxlTGlzdC0+aGFzQ3VzdG9tUHJvcGVydGllcyhqc0NTU1J1
bGVMaXN0LT52bSgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKENTU1N0eWxl
U2hlZXQqIHN0eWxlU2hlZXQgPSBqc0NTU1J1bGVMaXN0LT53cmFwcGVkKCkuc3R5bGVTaGVldCgp
KSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbUVsZW1lbnRSZWdp
c3RyeUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNDdXN0b21FbGVtZW50UmVnaXN0cnlDdXN0b20uY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbUVsZW1lbnRSZWdpc3RyeUN1c3RvbS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE1LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0xMjksMjUgKzEyOSwyNSBAQCBKU1ZhbHVlIEpTQ3VzdG9t
RWxlbWVudFJlZ2lzdHJ5OjpkZWZpbmUoCiAgICAgUXVhbGlmaWVkTmFtZSBuYW1lKG51bGxBdG9t
KCksIGxvY2FsTmFtZSwgSFRNTE5hbWVzOjp4aHRtbE5hbWVzcGFjZVVSSSk7CiAgICAgYXV0byBl
bGVtZW50SW50ZXJmYWNlID0gSlNDdXN0b21FbGVtZW50SW50ZXJmYWNlOjpjcmVhdGUobmFtZSwg
Y29uc3RydWN0b3IsIGdsb2JhbE9iamVjdCgpKTsKIAotICAgIGF1dG8qIGNvbm5lY3RlZENhbGxi
YWNrID0gZ2V0Q3VzdG9tRWxlbWVudENhbGxiYWNrKHN0YXRlLCBwcm90b3R5cGVPYmplY3QsIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiY29ubmVjdGVkQ2FsbGJhY2siKSk7CisgICAgYXV0
byogY29ubmVjdGVkQ2FsbGJhY2sgPSBnZXRDdXN0b21FbGVtZW50Q2FsbGJhY2soc3RhdGUsIHBy
b3RvdHlwZU9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImNvbm5lY3RlZENhbGxi
YWNrIikpOwogICAgIGlmIChjb25uZWN0ZWRDYWxsYmFjaykKICAgICAgICAgZWxlbWVudEludGVy
ZmFjZS0+c2V0Q29ubmVjdGVkQ2FsbGJhY2soY29ubmVjdGVkQ2FsbGJhY2spOwogICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIEpTVmFsdWUoKSk7CiAKLSAgICBhdXRvKiBkaXNjb25uZWN0
ZWRDYWxsYmFjayA9IGdldEN1c3RvbUVsZW1lbnRDYWxsYmFjayhzdGF0ZSwgcHJvdG90eXBlT2Jq
ZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImRpc2Nvbm5lY3RlZENhbGxiYWNrIikp
OworICAgIGF1dG8qIGRpc2Nvbm5lY3RlZENhbGxiYWNrID0gZ2V0Q3VzdG9tRWxlbWVudENhbGxi
YWNrKHN0YXRlLCBwcm90b3R5cGVPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJk
aXNjb25uZWN0ZWRDYWxsYmFjayIpKTsKICAgICBpZiAoZGlzY29ubmVjdGVkQ2FsbGJhY2spCiAg
ICAgICAgIGVsZW1lbnRJbnRlcmZhY2UtPnNldERpc2Nvbm5lY3RlZENhbGxiYWNrKGRpc2Nvbm5l
Y3RlZENhbGxiYWNrKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkp
OwogCi0gICAgYXV0byogYWRvcHRlZENhbGxiYWNrID0gZ2V0Q3VzdG9tRWxlbWVudENhbGxiYWNr
KHN0YXRlLCBwcm90b3R5cGVPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiYWRv
cHRlZENhbGxiYWNrIikpOworICAgIGF1dG8qIGFkb3B0ZWRDYWxsYmFjayA9IGdldEN1c3RvbUVs
ZW1lbnRDYWxsYmFjayhzdGF0ZSwgcHJvdG90eXBlT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKHZtLCAiYWRvcHRlZENhbGxiYWNrIikpOwogICAgIGlmIChhZG9wdGVkQ2FsbGJhY2spCiAg
ICAgICAgIGVsZW1lbnRJbnRlcmZhY2UtPnNldEFkb3B0ZWRDYWxsYmFjayhhZG9wdGVkQ2FsbGJh
Y2spOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTVmFsdWUoKSk7CiAKLSAgICBh
dXRvKiBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2sgPSBnZXRDdXN0b21FbGVtZW50Q2FsbGJhY2so
c3RhdGUsIHByb3RvdHlwZU9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJhdHRy
aWJ1dGVDaGFuZ2VkQ2FsbGJhY2siKSk7CisgICAgYXV0byogYXR0cmlidXRlQ2hhbmdlZENhbGxi
YWNrID0gZ2V0Q3VzdG9tRWxlbWVudENhbGxiYWNrKHN0YXRlLCBwcm90b3R5cGVPYmplY3QsIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2siKSk7CiAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZSgpKTsKICAgICBpZiAoYXR0cmli
dXRlQ2hhbmdlZENhbGxiYWNrKSB7Ci0gICAgICAgIGF1dG8gb2JzZXJ2ZWRBdHRyaWJ1dGVzVmFs
dWUgPSBjb25zdHJ1Y3Rvci0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3Rh
dGUsICJvYnNlcnZlZEF0dHJpYnV0ZXMiKSk7CisgICAgICAgIGF1dG8gb2JzZXJ2ZWRBdHRyaWJ1
dGVzVmFsdWUgPSBjb25zdHJ1Y3Rvci0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zyh2bSwgIm9ic2VydmVkQXR0cmlidXRlcyIpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgSlNWYWx1ZSgpKTsKICAgICAgICAgaWYgKCFvYnNlcnZlZEF0dHJpYnV0ZXNWYWx1
ZS5pc1VuZGVmaW5lZCgpKSB7CiAgICAgICAgICAgICBhdXRvIG9ic2VydmVkQXR0cmlidXRlcyA9
IGNvbnZlcnQ8SURMU2VxdWVuY2U8SURMRE9NU3RyaW5nPj4oc3RhdGUsIG9ic2VydmVkQXR0cmli
dXRlc1ZhbHVlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tWFBh
dGhOU1Jlc29sdmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0N1c3RvbVhQYXRoTlNSZXNvbHZlci5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMTMg
QWxleGV5IFByb3NrdXJ5YWtvdiAoYXBAbnlwb3AuY29tKQorICogQ29weXJpZ2h0IChDKSAyMDE5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtNzIsNyArNzMsNyBAQCBTdHJpbmcgSlNDdXN0b21YUGF0aE5TUmVzb2x2ZXI6
Omxvb2t1cE5hCiAgICAgRXhlY1N0YXRlKiBleGVjID0gbV9nbG9iYWxPYmplY3QtPmdsb2JhbEV4
ZWMoKTsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgICAgICAKLSAgICBKU1ZhbHVlIGZ1
bmN0aW9uID0gbV9jdXN0b21SZXNvbHZlci0+Z2V0KGV4ZWMsIElkZW50aWZpZXI6OmZyb21TdHJp
bmcoZXhlYywgImxvb2t1cE5hbWVzcGFjZVVSSSIpKTsKKyAgICBKU1ZhbHVlIGZ1bmN0aW9uID0g
bV9jdXN0b21SZXNvbHZlci0+Z2V0KGV4ZWMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJs
b29rdXBOYW1lc3BhY2VVUkkiKSk7CiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5
cGUgY2FsbFR5cGUgPSBnZXRDYWxsRGF0YSh2bSwgZnVuY3Rpb24sIGNhbGxEYXRhKTsKICAgICBp
ZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGU6Ok5vbmUpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRE9NQ29udmVydFJlY29yZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydFJlY29yZC5oCShyZXZpc2lvbiAyNDkxMjgpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRSZWNvcmQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAx
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTg1LDcgKzg1LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgSywgdHlwZW5hbWUg
Vj4gc3RydWN0IAogICAgICAgICBSZXR1cm5UeXBlIHJlc3VsdDsKICAgICAKICAgICAgICAgLy8g
NC4gTGV0IGtleXMgYmUgPyBPLltbT3duUHJvcGVydHlLZXlzXV0oKS4KLSAgICAgICAgSlNDOjpQ
cm9wZXJ0eU5hbWVBcnJheSBrZXlzKCZ2bSwgSlNDOjpQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdz
LCBKU0M6OlByaXZhdGVTeW1ib2xNb2RlOjpFeGNsdWRlKTsKKyAgICAgICAgSlNDOjpQcm9wZXJ0
eU5hbWVBcnJheSBrZXlzKHZtLCBKU0M6OlByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3MsIEpTQzo6
UHJpdmF0ZVN5bWJvbE1vZGU6OkV4Y2x1ZGUpOwogICAgICAgICBvYmplY3QtPm1ldGhvZFRhYmxl
KHZtKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsICZzdGF0ZSwga2V5cywgSlNDOjpFbnVt
ZXJhdGlvbk1vZGUoSlNDOjpEb250RW51bVByb3BlcnRpZXNNb2RlOjpJbmNsdWRlKSk7CiAKICAg
ICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKQEAgLTE1MCw3ICsxNTAsNyBA
QCB0ZW1wbGF0ZTx0eXBlbmFtZSBLLCB0eXBlbmFtZSBWPiBzdHJ1Y3QgCiAgICAgICAgICAgICBh
dXRvIGVzVmFsdWUgPSB0b0pTPFY+KHN0YXRlLCBnbG9iYWxPYmplY3QsIGtleVZhbHVlUGFpci52
YWx1ZSk7CiAKICAgICAgICAgICAgIC8vIDMuIExldCBjcmVhdGVkIGJlICEgQ3JlYXRlRGF0YVBy
b3BlcnR5KHJlc3VsdCwgZXNLZXksIGVzVmFsdWUpLgotICAgICAgICAgICAgYm9vbCBjcmVhdGVk
ID0gcmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0s
IGtleVZhbHVlUGFpci5rZXkpLCBlc1ZhbHVlKTsKKyAgICAgICAgICAgIGJvb2wgY3JlYXRlZCA9
IHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIGtl
eVZhbHVlUGFpci5rZXkpLCBlc1ZhbHVlKTsKIAogICAgICAgICAgICAgLy8gNC4gQXNzZXJ0OiBj
cmVhdGVkIGlzIHRydWUuCiAgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGNyZWF0ZWQsIGNyZWF0
ZWQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0U3RyaW5n
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVy
dFN0cmluZ3MuaAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNET01Db252ZXJ0U3RyaW5ncy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY4LDEyICs2OCwxMiBAQCB0
ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExET01TdHJpCiAKICAgICBzdGF0aWMgSlND
OjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBVbmNhY2hlZFN0
cmluZyYgdmFsdWUpCiAgICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc1N0cmluZygmc3RhdGUs
IHZhbHVlLnN0cmluZyk7CisgICAgICAgIHJldHVybiBKU0M6OmpzU3RyaW5nKHN0YXRlLnZtKCks
IHZhbHVlLnN0cmluZyk7CiAgICAgfQogCiAgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgT3duZWRTdHJpbmcmIHZhbHVlKQogICAgIHsK
LSAgICAgICAgcmV0dXJuIEpTQzo6anNPd25lZFN0cmluZygmc3RhdGUsIHZhbHVlLnN0cmluZyk7
CisgICAgICAgIHJldHVybiBKU0M6OmpzT3duZWRTdHJpbmcoc3RhdGUudm0oKSwgdmFsdWUuc3Ry
aW5nKTsKICAgICB9CiB9OwogCkBAIC05NSwxMiArOTUsMTIgQEAgdGVtcGxhdGU8PiBzdHJ1Y3Qg
SlNDb252ZXJ0ZXI8SURMQnl0ZVN0cgogCiAgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgVW5jYWNoZWRTdHJpbmcmIHZhbHVlKQogICAg
IHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNTdHJpbmcoJnN0YXRlLCB2YWx1ZS5zdHJpbmcpOwor
ICAgICAgICByZXR1cm4gSlNDOjpqc1N0cmluZyhzdGF0ZS52bSgpLCB2YWx1ZS5zdHJpbmcpOwog
ICAgIH0KIAogICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIGNvbnN0IE93bmVkU3RyaW5nJiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBK
U0M6OmpzT3duZWRTdHJpbmcoJnN0YXRlLCB2YWx1ZS5zdHJpbmcpOworICAgICAgICByZXR1cm4g
SlNDOjpqc093bmVkU3RyaW5nKHN0YXRlLnZtKCksIHZhbHVlLnN0cmluZyk7CiAgICAgfQogfTsK
IApAQCAtMTIyLDEyICsxMjIsMTIgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURM
VVNWU3RyaQogCiAgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgY29uc3QgVW5jYWNoZWRTdHJpbmcmIHZhbHVlKQogICAgIHsKLSAgICAgICAgcmV0
dXJuIEpTQzo6anNTdHJpbmcoJnN0YXRlLCB2YWx1ZS5zdHJpbmcpOworICAgICAgICByZXR1cm4g
SlNDOjpqc1N0cmluZyhzdGF0ZS52bSgpLCB2YWx1ZS5zdHJpbmcpOwogICAgIH0KIAogICAgIHN0
YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IE93
bmVkU3RyaW5nJiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzT3duZWRTdHJp
bmcoJnN0YXRlLCB2YWx1ZS5zdHJpbmcpOworICAgICAgICByZXR1cm4gSlNDOjpqc093bmVkU3Ry
aW5nKHN0YXRlLnZtKCksIHZhbHVlLnN0cmluZyk7CiAgICAgfQogfTsKIApJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAkocmV2aXNp
b24gMjQ5MTI4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0
b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwNy0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHly
aWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKQEAgLTIzNiw2ICsyMzYsNyBAQCBib29sIEpTRE9NV2luZG93OjpnZXRPd25Qcm9wZXJ0eVNs
b3QoSlNPCiAvLyAoMykgbmFtZWQgcHJvcGVydGllcyAoaW4gZmFjdCwgdGhlc2Ugc2hvdWxkbid0
IGJlIG9uIHRoZSB3aW5kb3csIHNob3VsZCBiZSBvbiB0aGUgTlBPKS4KIGJvb2wgSlNET01XaW5k
b3c6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRl
KiBzdGF0ZSwgdW5zaWduZWQgaW5kZXgsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKKyAgICBWTSYg
dm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTRE9NV2lu
ZG93Kj4ob2JqZWN0KTsKICAgICBhdXRvJiB3aW5kb3cgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7
CiAgICAgYXV0byogZnJhbWUgPSB3aW5kb3cuZnJhbWUoKTsKQEAgLTI2MCw3ICsyNjEsNyBAQCBi
b29sIEpTRE9NV2luZG93OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluCiAKICAgICAvLyBIYW5kIG9m
ZiBhbGwgY3Jvc3MtZG9tYWluL2ZyYW1lbGVzcyBhY2Nlc3MgdG8ganNET01XaW5kb3dHZXRPd25Q
cm9wZXJ0eVNsb3RSZXN0cmljdGVkQWNjZXNzLgogICAgIGlmIChpc0Nyb3NzT3JpZ2luQWNjZXNz
KCkpCi0gICAgICAgIHJldHVybiBqc0RPTVdpbmRvd0dldE93blByb3BlcnR5U2xvdFJlc3RyaWN0
ZWRBY2Nlc3M8RE9NV2luZG93VHlwZTo6TG9jYWw+KHRoaXNPYmplY3QsIHdpbmRvdywgKnN0YXRl
LCBJZGVudGlmaWVyOjpmcm9tKHN0YXRlLCBpbmRleCksIHNsb3QsIGVycm9yTWVzc2FnZSk7Cisg
ICAgICAgIHJldHVybiBqc0RPTVdpbmRvd0dldE93blByb3BlcnR5U2xvdFJlc3RyaWN0ZWRBY2Nl
c3M8RE9NV2luZG93VHlwZTo6TG9jYWw+KHRoaXNPYmplY3QsIHdpbmRvdywgKnN0YXRlLCBJZGVu
dGlmaWVyOjpmcm9tKHZtLCBpbmRleCksIHNsb3QsIGVycm9yTWVzc2FnZSk7CiAKICAgICAvLyAo
MikgUmVndWxhciBvd24gcHJvcGVydGllcy4KICAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVy
dHlTbG90QnlJbmRleCh0aGlzT2JqZWN0LCBzdGF0ZSwgaW5kZXgsIHNsb3QpOwpAQCAtNDAyLDkg
KzQwMywxMCBAQCBzdGF0aWMgdm9pZCBhZGRTY29wZWRDaGlsZHJlbkluZGV4ZXMoRXhlCiAgICAg
aWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuOwogCisgICAgVk0mIHZtID0gc3RhdGUudm0oKTsK
ICAgICB1bnNpZ25lZCBzY29wZWRDaGlsZENvdW50ID0gZnJhbWUtPnRyZWUoKS5zY29wZWRDaGls
ZENvdW50KCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNjb3BlZENoaWxkQ291bnQ7
ICsraSkKLSAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbSgmc3RhdGUs
IGkpKTsKKyAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbSh2bSwgaSkp
OwogfQogCiAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnLyN3aW5kb3dwcm94eS1vd25w
cm9wZXJ0eWtleXMKQEAgLTQyNCwxMyArNDI2LDE0IEBAIHZvaWQgSlNET01XaW5kb3c6OmdldE93
blByb3BlcnR5TmFtZXMoSlMKIAogYm9vbCBKU0RPTVdpbmRvdzo6ZGVmaW5lT3duUHJvcGVydHko
SlNDOjpKU09iamVjdCogb2JqZWN0LCBKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpQcm9wZXJ0
eU5hbWUgcHJvcGVydHlOYW1lLCBjb25zdCBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3Jp
cHRvciwgYm9vbCBzaG91bGRUaHJvdykKIHsKKyAgICBKU0M6OlZNJiB2bSA9IGV4ZWMtPnZtKCk7
CiAgICAgSlNET01XaW5kb3cqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNET01XaW5kb3cqPihvYmpl
Y3QpOwogICAgIC8vIE9ubHkgYWxsb3cgZGVmaW5pbmcgcHJvcGVydGllcyBpbiB0aGlzIHdheSBi
eSBmcmFtZXMgaW4gdGhlIHNhbWUgb3JpZ2luLCBhcyBpdCBhbGxvd3Mgc2V0dGVycyB0byBiZSBp
bnRyb2R1Y2VkLgogICAgIGlmICghQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1Rv
RE9NV2luZG93KGV4ZWMsIHRoaXNPYmplY3QtPndyYXBwZWQoKSwgVGhyb3dTZWN1cml0eUVycm9y
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gRG9uJ3QgYWxsb3cgc2hhZG93aW5n
IGxvY2F0aW9uIHVzaW5nIGFjY2Vzc29yIHByb3BlcnRpZXMuCi0gICAgaWYgKGRlc2NyaXB0b3Iu
aXNBY2Nlc3NvckRlc2NyaXB0b3IoKSAmJiBwcm9wZXJ0eU5hbWUgPT0gSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyhleGVjLCAibG9jYXRpb24iKSkKKyAgICBpZiAoZGVzY3JpcHRvci5pc0FjY2Vzc29y
RGVzY3JpcHRvcigpICYmIHByb3BlcnR5TmFtZSA9PSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZt
LCAibG9jYXRpb24iKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuIEJhc2U6
OmRlZmluZU93blByb3BlcnR5KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3Jp
cHRvciwgc2hvdWxkVGhyb3cpOwpAQCAtNDkwLDIxICs0OTMsMjMgQEAgcHJpdmF0ZToKIAogaW5s
aW5lIHZvaWQgRGlhbG9nSGFuZGxlcjo6ZGlhbG9nQ3JlYXRlZChET01XaW5kb3cmIGRpYWxvZykK
IHsKKyAgICBWTSYgdm0gPSBtX2V4ZWMudm0oKTsKICAgICBtX2ZyYW1lID0gZGlhbG9nLmZyYW1l
KCk7CiAgICAgCiAgICAgLy8gRklYTUU6IFRoaXMgbG9va3MgbGlrZSBhIGxlYWsgYmV0d2VlbiB0
aGUgbm9ybWFsIHdvcmxkIGFuZCBhbiBpc29sYXRlZAogICAgIC8vICAgICAgICB3b3JsZCBpZiBk
aWFsb2dBcmd1bWVudHMgY29tZXMgZnJvbSBhbiBpc29sYXRlZCB3b3JsZC4KLSAgICBKU0RPTVdp
bmRvdyogZ2xvYmFsT2JqZWN0ID0gdG9KU0RPTVdpbmRvdyhtX2ZyYW1lLmdldCgpLCBub3JtYWxX
b3JsZChtX2V4ZWMudm0oKSkpOworICAgIEpTRE9NV2luZG93KiBnbG9iYWxPYmplY3QgPSB0b0pT
RE9NV2luZG93KG1fZnJhbWUuZ2V0KCksIG5vcm1hbFdvcmxkKHZtKSk7CiAgICAgaWYgKEpTVmFs
dWUgZGlhbG9nQXJndW1lbnRzID0gbV9leGVjLmFyZ3VtZW50KDEpKQotICAgICAgICBnbG9iYWxP
YmplY3QtPnB1dERpcmVjdChtX2V4ZWMudm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmbV9l
eGVjLCAiZGlhbG9nQXJndW1lbnRzIiksIGRpYWxvZ0FyZ3VtZW50cyk7CisgICAgICAgIGdsb2Jh
bE9iamVjdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiZGlhbG9n
QXJndW1lbnRzIiksIGRpYWxvZ0FyZ3VtZW50cyk7CiB9CiAKIGlubGluZSBKU1ZhbHVlIERpYWxv
Z0hhbmRsZXI6OnJldHVyblZhbHVlKCkgY29uc3QKIHsKLSAgICBKU0RPTVdpbmRvdyogZ2xvYmFs
T2JqZWN0ID0gdG9KU0RPTVdpbmRvdyhtX2ZyYW1lLmdldCgpLCBub3JtYWxXb3JsZChtX2V4ZWMu
dm0oKSkpOworICAgIFZNJiB2bSA9IG1fZXhlYy52bSgpOworICAgIEpTRE9NV2luZG93KiBnbG9i
YWxPYmplY3QgPSB0b0pTRE9NV2luZG93KG1fZnJhbWUuZ2V0KCksIG5vcm1hbFdvcmxkKHZtKSk7
CiAgICAgaWYgKCFnbG9iYWxPYmplY3QpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwot
ICAgIElkZW50aWZpZXIgaWRlbnRpZmllciA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJm1fZXhl
YywgInJldHVyblZhbHVlIik7CisgICAgSWRlbnRpZmllciBpZGVudGlmaWVyID0gSWRlbnRpZmll
cjo6ZnJvbVN0cmluZyh2bSwgInJldHVyblZhbHVlIik7CiAgICAgUHJvcGVydHlTbG90IHNsb3Qo
Z2xvYmFsT2JqZWN0LCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6R2V0KTsKICAg
ICBpZiAoIUpTR2xvYmFsT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QoZ2xvYmFsT2JqZWN0LCAm
bV9leGVjLCBpZGVudGlmaWVyLCBzbG90KSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CkBAIC01NzMsNyArNTc4LDggQEAgdm9pZCBKU0RPTVdpbmRvdzo6c2V0T3BlbmVyKEpTQzo6RXhl
Y1N0YQogICAgICAgICB3cmFwcGVkKCkuZGlzb3duT3BlbmVyKCk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9Ci0gICAgcmVwbGFjZVN0YXRpY1Byb3BlcnR5U2xvdChzdGF0ZS52bSgpLCB0aGlzLCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZS52bSgpLCAib3BlbmVyIiksIHZhbHVlKTsKKyAg
ICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIHJlcGxhY2VTdGF0aWNQcm9wZXJ0eVNsb3Qodm0s
IHRoaXMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJvcGVuZXIiKSwgdmFsdWUpOwogfQog
CiBKU1ZhbHVlIEpTRE9NV2luZG93OjpzZWxmKEpTQzo6RXhlY1N0YXRlJikgY29uc3QKQEAgLTY0
NSw3ICs2NTEsOCBAQCB2b2lkIEpTRE9NV2luZG93OjpzZXRPcGVuRGF0YWJhc2UoSlNDOjpFCiAg
ICAgaWYgKCFCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3coJnN0
YXRlLCB3cmFwcGVkKCksIFRocm93U2VjdXJpdHlFcnJvcikpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIHJlcGxhY2VTdGF0aWNQcm9wZXJ0eVNsb3Qoc3RhdGUudm0oKSwgdGhpcywgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZygmc3RhdGUudm0oKSwgIm9wZW5EYXRhYmFzZSIpLCB2YWx1ZSk7CisgICAg
Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICByZXBsYWNlU3RhdGljUHJvcGVydHlTbG90KHZtLCB0
aGlzLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAib3BlbkRhdGFiYXNlIiksIHZhbHVlKTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01XaW5kb3dQcm9wZXJ0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd1Byb3BlcnRpZXMuY3BwCShyZXZpc2lvbiAyNDkx
MjgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd1Byb3BlcnRpZXMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTYtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTEwNCw3ICsxMDQsOCBAQCBib29sIEpTRE9NV2luZG93UHJvcGVy
dGllczo6Z2V0T3duUHJvcGVyCiAKIGJvb2wgSlNET01XaW5kb3dQcm9wZXJ0aWVzOjpnZXRPd25Q
cm9wZXJ0eVNsb3RCeUluZGV4KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogc3RhdGUsIHVu
c2lnbmVkIGluZGV4LCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7Ci0gICAgcmV0dXJuIGdldE93blBy
b3BlcnR5U2xvdChvYmplY3QsIHN0YXRlLCBJZGVudGlmaWVyOjpmcm9tKHN0YXRlLCBpbmRleCks
IHNsb3QpOworICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOworICAgIHJldHVybiBnZXRPd25Qcm9w
ZXJ0eVNsb3Qob2JqZWN0LCBzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbSh2bSwgaW5kZXgpLCBzbG90
KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNEZXByZWNhdGVkQ1NTT01WYWx1ZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEZXByZWNhdGVkQ1NTT01WYWx1ZUN1c3RvbS5j
cHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGVw
cmVjYXRlZENTU09NVmFsdWVDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM4LDcgKzM4
LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIGJvb2wgSlNEZXByZWNhdGVkQ1NTT01WYWx1ZU93
bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+
IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29u
KQogewogICAgIEpTRGVwcmVjYXRlZENTU09NVmFsdWUqIGpzQ1NTVmFsdWUgPSBqc0Nhc3Q8SlNE
ZXByZWNhdGVkQ1NTT01WYWx1ZSo+KGhhbmRsZS5zbG90KCktPmFzQ2VsbCgpKTsKLSAgICBpZiAo
IWpzQ1NTVmFsdWUtPmhhc0N1c3RvbVByb3BlcnRpZXMoKmpzQ1NTVmFsdWUtPnZtKCkpKQorICAg
IGlmICghanNDU1NWYWx1ZS0+aGFzQ3VzdG9tUHJvcGVydGllcyhqc0NTU1ZhbHVlLT52bSgpKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKFVOTElLRUxZKHJlYXNvbikpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5jcHAJKHJl
dmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0
ZW5lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdo
dCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICogIENvcHlyaWdodCAoQykg
MjAwMy0yMDE4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQg
KEMpIDIwMDMtMjAxOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCkBAIC0xMzksNyArMTM5LDcgQEAgdm9pZCBKU0V2ZW50TGlzdGVuZXI6OmhhbmRs
ZUV2ZW50KFNjcmlwdAogCiAgICAgLy8gSWYganNGdW5jdGlvbiBpcyBub3QgYWN0dWFsbHkgYSBm
dW5jdGlvbiwgc2VlIGlmIGl0IGltcGxlbWVudHMgdGhlIEV2ZW50TGlzdGVuZXIgaW50ZXJmYWNl
IGFuZCB1c2UgdGhhdAogICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZTo6Tm9uZSkgewotICAg
ICAgICBoYW5kbGVFdmVudEZ1bmN0aW9uID0ganNGdW5jdGlvbi0+Z2V0KGV4ZWMsIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcoZXhlYywgImhhbmRsZUV2ZW50IikpOworICAgICAgICBoYW5kbGVFdmVu
dEZ1bmN0aW9uID0ganNGdW5jdGlvbi0+Z2V0KGV4ZWMsIElkZW50aWZpZXI6OmZyb21TdHJpbmco
dm0sICJoYW5kbGVFdmVudCIpKTsKICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkgewogICAgICAgICAgICAgYXV0byogZXhjZXB0aW9uID0gc2NvcGUuZXhjZXB0aW9uKCk7
CiAgICAgICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNJbWFnZURhdGFDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW1hZ2VEYXRhQ3VzdG9tLmNwcAkocmV2aXNpb24gMjQ5
MTI4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbWFnZURhdGFDdXN0b20uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
OCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgt
MjAxOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTQzLDcgKzQzLDcgQEAgSlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEV4
ZWNTdGF0ZSogc3RhdAogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8qIGRhdGEg
PSBpbWFnZURhdGEtPmRhdGEoKTsKICAgICBhdXRvKiB3cmFwcGVyID0gY3JlYXRlV3JhcHBlcjxJ
bWFnZURhdGE+KGdsb2JhbE9iamVjdCwgV1RGTW92ZShpbWFnZURhdGEpKTsKLSAgICBJZGVudGlm
aWVyIGRhdGFOYW1lID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhzdGF0ZSwgImRhdGEiKTsKKyAg
ICBJZGVudGlmaWVyIGRhdGFOYW1lID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImRhdGEi
KTsKICAgICB3cmFwcGVyLT5wdXREaXJlY3Qodm0sIGRhdGFOYW1lLCB0b0pTKHN0YXRlLCBnbG9i
YWxPYmplY3QsIGRhdGEpLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IFByb3BlcnR5
QXR0cmlidXRlOjpSZWFkT25seSk7CiAgICAgLy8gRklYTUU6IEFkb3B0IHJlcG9ydEV4dHJhTWVt
b3J5VmlzaXRlZCwgYW5kIHN3aXRjaCB0byByZXBvcnRFeHRyYU1lbW9yeUFsbG9jYXRlZC4KICAg
ICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQyNTk1CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0xhenlFdmVudExpc3RlbmVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0xhenlFdmVudExpc3RlbmVy
LmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNM
YXp5RXZlbnRMaXN0ZW5lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgog
ICogIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICogIENv
cHlyaWdodCAoQykgMjAwMy0yMDE4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAq
ICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQu
CiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC0xNDksNyArMTQ5LDcgQEAgSlNPYmplY3QqIEpTTGF6
eUV2ZW50TGlzdGVuZXI6OmluaXRpYWxpegogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9i
amVjdC0+Z2xvYmFsRXhlYygpOwogCiAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJnczsKLSAg
ICBhcmdzLmFwcGVuZChqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywgbV9ldmVudFBhcmFtZXRlck5h
bWUpKTsKKyAgICBhcmdzLmFwcGVuZChqc05vbnRyaXZpYWxTdHJpbmcodm0sIG1fZXZlbnRQYXJh
bWV0ZXJOYW1lKSk7CiAgICAgYXJncy5hcHBlbmQoanNTdHJpbmdXaXRoQ2FjaGUoZXhlYywgbV9j
b2RlKSk7CiAgICAgQVNTRVJUKCFhcmdzLmhhc092ZXJmbG93ZWQoKSk7CiAKQEAgLTE1OCw3ICsx
NTgsNyBAQCBKU09iamVjdCogSlNMYXp5RXZlbnRMaXN0ZW5lcjo6aW5pdGlhbGl6CiAgICAgaW50
IG92ZXJyaWRlTGluZU51bWJlciA9IG1fc291cmNlUG9zaXRpb24ubV9saW5lLm9uZUJhc2VkSW50
KCk7CiAKICAgICBKU09iamVjdCoganNGdW5jdGlvbiA9IGNvbnN0cnVjdEZ1bmN0aW9uU2tpcHBp
bmdFdmFsRW5hYmxlZENoZWNrKGV4ZWMsCi0gICAgICAgIGV4ZWMtPmxleGljYWxHbG9iYWxPYmpl
Y3QoKSwgYXJncywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCBtX2Z1bmN0aW9uTmFtZSks
CisgICAgICAgIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgYXJncywgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZyh2bSwgbV9mdW5jdGlvbk5hbWUpLAogICAgICAgICBTb3VyY2VPcmlnaW4geyBt
X3NvdXJjZVVSTCwgQ2FjaGVkU2NyaXB0RmV0Y2hlcjo6Y3JlYXRlKGRvY3VtZW50LmNoYXJzZXQo
KSkgfSwKICAgICAgICAgbV9zb3VyY2VVUkwsIG1fc291cmNlUG9zaXRpb24sIG92ZXJyaWRlTGlu
ZU51bWJlcik7CiAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgewpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNMb2NhdGlvbkN1c3RvbS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNMb2NhdGlvbkN1c3RvbS5jcHAJKHJl
dmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTG9jYXRpb25D
dXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBDb3B5cmln
aHQgKEMpIDIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKICAqICBDb3B5cmlnaHQg
KEMpIDIwMDYgSm9uIFNoaWVyIChqc2hpZXJAaWFzdGF0ZS5lZHUpCi0gKiAgQ29weXJpZ2h0IChD
KSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDEwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNldmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDE5IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNldmVkLgogICogIENvcHlyaWdodCAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1
cnlha292IChhcEB3ZWJraXQub3JnKQogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC05OCw3ICs5OCw3IEBAIGJv
b2wgSlNMb2NhdGlvbjo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmQKICAgICBhdXRvKiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PEpTTG9jYXRpb24qPihvYmplY3QpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1Rf
SU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKIAotICAgIGJvb2wgcmVzdWx0ID0gZ2V0T3du
UHJvcGVydHlTbG90Q29tbW9uKCp0aGlzT2JqZWN0LCAqc3RhdGUsIElkZW50aWZpZXI6OmZyb20o
c3RhdGUsIGluZGV4KSwgc2xvdCk7CisgICAgYm9vbCByZXN1bHQgPSBnZXRPd25Qcm9wZXJ0eVNs
b3RDb21tb24oKnRoaXNPYmplY3QsICpzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbSh2bSwgaW5kZXgp
LCBzbG90KTsKICAgICBFWENFUFRJT05fQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSB8fCAhcmVz
dWx0KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7CiAgICAgaWYgKHJl
c3VsdCkKQEAgLTE1NiwxMCArMTU2LDExIEBAIGJvb2wgSlNMb2NhdGlvbjo6cHV0KEpTQ2VsbCog
Y2VsbCwgRXhlY1MKIAogYm9vbCBKU0xvY2F0aW9uOjpwdXRCeUluZGV4KEpTQ2VsbCogY2VsbCwg
RXhlY1N0YXRlKiBzdGF0ZSwgdW5zaWduZWQgaW5kZXgsIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hv
dWxkVGhyb3cpCiB7CisgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byogdGhpc09i
amVjdCA9IGpzQ2FzdDxKU0xvY2F0aW9uKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogCi0gICAgaWYgKHB1dENvbW1vbigqdGhpc09i
amVjdCwgKnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tKHN0YXRlLCBpbmRleCkpKQorICAgIGlmIChw
dXRDb21tb24oKnRoaXNPYmplY3QsICpzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbSh2bSwgaW5kZXgp
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuIEpTT2JqZWN0OjpwdXRCeUlu
ZGV4KGNlbGwsIHN0YXRlLCBpbmRleCwgdmFsdWUsIHNob3VsZFRocm93KTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUxpc3RDdXN0b20uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUxpc3RDdXN0b20uY3BwCShyZXZpc2lv
biAyNDkxMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVMaXN0Q3VzdG9t
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDcsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA3LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MCw3ICs0MCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBK
U0M7CiBib29sIEpTTm9kZUxpc3RPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlND
OjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBTbG90VmlzaXRvciYgdmlzaXRv
ciwgY29uc3QgY2hhcioqIHJlYXNvbikKIHsKICAgICBKU05vZGVMaXN0KiBqc05vZGVMaXN0ID0g
anNDYXN0PEpTTm9kZUxpc3QqPihoYW5kbGUuc2xvdCgpLT5hc0NlbGwoKSk7Ci0gICAgaWYgKCFq
c05vZGVMaXN0LT5oYXNDdXN0b21Qcm9wZXJ0aWVzKCpqc05vZGVMaXN0LT52bSgpKSkKKyAgICBp
ZiAoIWpzTm9kZUxpc3QtPmhhc0N1c3RvbVByb3BlcnRpZXMoanNOb2RlTGlzdC0+dm0oKSkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChqc05vZGVMaXN0LT53cmFwcGVkKCkuaXNM
aXZlTm9kZUxpc3QoKSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQbHVn
aW5FbGVtZW50RnVuY3Rpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1BsdWdpbkVsZW1lbnRGdW5jdGlvbnMuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BsdWdpbkVsZW1lbnRGdW5jdGlvbnMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5
OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQotICogIENvcHlyaWdodCAoQykg
MjAwNC0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQg
KEMpIDIwMDQtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCkBAIC0xNjgsNyArMTY4LDcgQEAgQ2FsbFR5cGUgcGx1Z2luRWxlbWVudEN1c3Rv
bUdldENhbGxEYXRhKAogICAgIGlmIChKU09iamVjdCogc2NyaXB0T2JqZWN0ID0gcGx1Z2luU2Ny
aXB0T2JqZWN0RnJvbVBsdWdpblZpZXdCYXNlKGVsZW1lbnQpKSB7CiAgICAgICAgIENhbGxEYXRh
IHNjcmlwdE9iamVjdENhbGxEYXRhOwogICAgICAgICAKLSAgICAgICAgVk0mIHZtID0gKnNjcmlw
dE9iamVjdC0+dm0oKTsKKyAgICAgICAgVk0mIHZtID0gc2NyaXB0T2JqZWN0LT52bSgpOwogICAg
ICAgICBpZiAoc2NyaXB0T2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmdldENhbGxEYXRhKHNjcmlw
dE9iamVjdCwgc2NyaXB0T2JqZWN0Q2FsbERhdGEpID09IENhbGxUeXBlOjpOb25lKQogICAgICAg
ICAgICAgcmV0dXJuIENhbGxUeXBlOjpOb25lOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1JlbW90ZURPTVdpbmRvd0N1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNSZW1vdGVET01XaW5kb3dDdXN0b20uY3BwCShyZXZpc2lv
biAyNDkxMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1JlbW90ZURPTVdpbmRv
d0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxOC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDMsNiArNDMsNyBAQCBib29sIEpTUmVtb3RlRE9N
V2luZG93OjpnZXRPd25Qcm9wZXJ0eVNsCiAKIGJvb2wgSlNSZW1vdGVET01XaW5kb3c6OmdldE93
blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBzdGF0ZSwg
dW5zaWduZWQgaW5kZXgsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKKyAgICBWTSYgdm0gPSBzdGF0
ZS0+dm0oKTsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTUmVtb3RlRE9NV2luZG93
Kj4ob2JqZWN0KTsKIAogICAgIC8vIEluZGV4ZWQgZ2V0dGVycyB0YWtlIHByZWNlbmRlbmNlIG92
ZXIgcmVndWxhciBwcm9wZXJ0aWVzLCBzbyBjYWNoaW5nIHdvdWxkIGJlIGludmFsaWQuCkBAIC01
MCw3ICs1MSw3IEBAIGJvb2wgSlNSZW1vdGVET01XaW5kb3c6OmdldE93blByb3BlcnR5U2wKIAog
ICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3IgaW5kZXhlZCBwcm9wZXJ0aWVzLgogCi0gICAg
cmV0dXJuIGpzRE9NV2luZG93R2V0T3duUHJvcGVydHlTbG90UmVzdHJpY3RlZEFjY2VzczxET01X
aW5kb3dUeXBlOjpSZW1vdGU+KHRoaXNPYmplY3QsIHRoaXNPYmplY3QtPndyYXBwZWQoKSwgKnN0
YXRlLCBJZGVudGlmaWVyOjpmcm9tKHN0YXRlLCBpbmRleCksIHNsb3QsIFN0cmluZygpKTsKKyAg
ICByZXR1cm4ganNET01XaW5kb3dHZXRPd25Qcm9wZXJ0eVNsb3RSZXN0cmljdGVkQWNjZXNzPERP
TVdpbmRvd1R5cGU6OlJlbW90ZT4odGhpc09iamVjdCwgdGhpc09iamVjdC0+d3JhcHBlZCgpLCAq
c3RhdGUsIElkZW50aWZpZXI6OmZyb20odm0sIGluZGV4KSwgc2xvdCwgU3RyaW5nKCkpOwogfQog
CiBib29sIEpTUmVtb3RlRE9NV2luZG93OjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIHN0
YXRlLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0
eVNsb3QmIHNsb3QpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9SZWFkYWJsZVN0
cmVhbURlZmF1bHRDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9SZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyLmNwcAkocmV2aXNpb24g
MjQ5MTI4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvUmVhZGFibGVTdHJlYW1EZWZh
dWx0Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICog
Q29weXJpZ2h0IChDKSAyMDE2IENhbm9uIEluYy4KLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0y
MDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTU0LDcgKzU0LDcgQEAgSlNDOjpKU1ZhbHVlIFJlYWRhYmxlU3RyZWFt
RGVmYXVsdENvbnRybwogICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2sodm0pOwogICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIGF1dG8gZnVuY3Rpb24gPSBv
YmplY3QuZ2V0KCZzdGF0ZSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgcHJv
cGVydHlOYW1lKSk7CisgICAgYXV0byBmdW5jdGlvbiA9IG9iamVjdC5nZXQoJnN0YXRlLCBKU0M6
OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHByb3BlcnR5TmFtZSkpOwogICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIEpTQzo6SlNWYWx1ZSgpKTsKIAogICAgIGlmICghZnVuY3Rpb24u
aXNGdW5jdGlvbih2bSkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1Njcmlw
dENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L1NjcmlwdENvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgz
LDcgKzE4Myw4IEBAIHZvaWQgU2NyaXB0Q29udHJvbGxlcjo6bG9hZE1vZHVsZVNjcmlwdCgKIAog
SlNDOjpKU1ZhbHVlIFNjcmlwdENvbnRyb2xsZXI6OmxpbmtBbmRFdmFsdWF0ZU1vZHVsZVNjcmlw
dEluV29ybGQoTG9hZGFibGVNb2R1bGVTY3JpcHQmIG1vZHVsZVNjcmlwdCwgRE9NV3JhcHBlcldv
cmxkJiB3b3JsZCkKIHsKLSAgICBKU0xvY2tIb2xkZXIgbG9jayh3b3JsZC52bSgpKTsKKyAgICBK
U0M6OlZNJiB2bSA9IHdvcmxkLnZtKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOwogCiAg
ICAgYXV0byYgcHJveHkgPSBqc1dpbmRvd1Byb3h5KHdvcmxkKTsKICAgICBhdXRvJiBzdGF0ZSA9
ICpwcm94eS53aW5kb3coKS0+Z2xvYmFsRXhlYygpOwpAQCAtMTkzLDcgKzE5NCw3IEBAIEpTQzo6
SlNWYWx1ZSBTY3JpcHRDb250cm9sbGVyOjpsaW5rQW5kRXYKICAgICBSZWY8RnJhbWU+IHByb3Rl
Y3RvcihtX2ZyYW1lKTsKIAogICAgIE5ha2VkUHRyPEpTQzo6RXhjZXB0aW9uPiBldmFsdWF0aW9u
RXhjZXB0aW9uOwotICAgIGF1dG8gcmV0dXJuVmFsdWUgPSBKU0V4ZWNTdGF0ZTo6bGlua0FuZEV2
YWx1YXRlTW9kdWxlKHN0YXRlLCBJZGVudGlmaWVyOjpmcm9tVWlkKCZzdGF0ZS52bSgpLCBtb2R1
bGVTY3JpcHQubW9kdWxlS2V5KCkpLCBqc1VuZGVmaW5lZCgpLCBldmFsdWF0aW9uRXhjZXB0aW9u
KTsKKyAgICBhdXRvIHJldHVyblZhbHVlID0gSlNFeGVjU3RhdGU6OmxpbmtBbmRFdmFsdWF0ZU1v
ZHVsZShzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgbW9kdWxlU2NyaXB0Lm1vZHVsZUtl
eSgpKSwganNVbmRlZmluZWQoKSwgZXZhbHVhdGlvbkV4Y2VwdGlvbik7CiAgICAgaWYgKGV2YWx1
YXRpb25FeGNlcHRpb24pIHsKICAgICAgICAgLy8gRklYTUU6IEdpdmUgYSBjaGFuY2UgdG8gZHVt
cCB0aGUgc3RhY2sgdHJhY2UgaWYgdGhlICJjcm9zc29yaWdpbiIgYXR0cmlidXRlIGFsbG93cy4K
ICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDUz
OQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0TW9kdWxlTG9hZGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRNb2R1bGVM
b2FkZXIuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9TY3JpcHRNb2R1bGVMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTIzLDcgKzEyMyw3
IEBAIEpTQzo6SWRlbnRpZmllciBTY3JpcHRNb2R1bGVMb2FkZXI6OnJlc28KICAgICAgICAgcmV0
dXJuIHsgfTsKICAgICB9CiAKLSAgICByZXR1cm4gSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KCZ2bSwgcmVzdWx0LT5zdHJpbmcoKSk7CisgICAgcmV0dXJuIEpTQzo6SWRlbnRpZmllcjo6ZnJv
bVN0cmluZyh2bSwgcmVzdWx0LT5zdHJpbmcoKSk7CiB9CiAKIHN0YXRpYyB2b2lkIHJlamVjdFRv
UHJvcGFnYXRlTmV0d29ya0Vycm9yKERlZmVycmVkUHJvbWlzZSYgZGVmZXJyZWQsIE1vZHVsZUZl
dGNoRmFpbHVyZUtpbmQgZmFpbHVyZUtpbmQsIEFTQ0lJTGl0ZXJhbCBtZXNzYWdlKQpAQCAtMjU4
LDcgKzI1OCw3IEBAIEpTQzo6SlNJbnRlcm5hbFByb21pc2UqIFNjcmlwdE1vZHVsZUxvYWQKICAg
ICBpZiAoIXJlc3VsdCkKICAgICAgICAgcmV0dXJuIHJlamVjdFByb21pc2Uoc3RhdGUsIGdsb2Jh
bE9iamVjdCwgVHlwZUVycm9yLCByZXN1bHQuZXJyb3IoKSk7CiAKLSAgICByZXR1cm4gSlNDOjpp
bXBvcnRNb2R1bGUoZXhlYywgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgcmVzdWx0
LT5zdHJpbmcoKSksIHBhcmFtZXRlcnMsIEpTQzo6SlNTY3JpcHRGZXRjaGVyOjpjcmVhdGUodm0s
IFdURk1vdmUoc2NyaXB0RmV0Y2hlcikgKSk7CisgICAgcmV0dXJuIEpTQzo6aW1wb3J0TW9kdWxl
KGV4ZWMsIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVzdWx0LT5zdHJpbmcoKSks
IHBhcmFtZXRlcnMsIEpTQzo6SlNTY3JpcHRGZXRjaGVyOjpjcmVhdGUodm0sIFdURk1vdmUoc2Ny
aXB0RmV0Y2hlcikgKSk7CiB9CiAKIEpTQzo6SlNPYmplY3QqIFNjcmlwdE1vZHVsZUxvYWRlcjo6
Y3JlYXRlSW1wb3J0TWV0YVByb3BlcnRpZXMoSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpKU01vZHVsZUxvYWRlciosIEpTQzo6SlNW
YWx1ZSBtb2R1bGVLZXlWYWx1ZSwgSlNDOjpKU01vZHVsZVJlY29yZCosIEpTQzo6SlNWYWx1ZSkK
QEAgLTI3Miw3ICsyNzIsNyBAQCBKU0M6OkpTT2JqZWN0KiBTY3JpcHRNb2R1bGVMb2FkZXI6OmNy
ZWF0CiAgICAgYXV0byogbWV0YVByb3BlcnRpZXMgPSBKU0M6OmNvbnN0cnVjdEVtcHR5T2JqZWN0
KGV4ZWMsIGdsb2JhbE9iamVjdC0+bnVsbFByb3RvdHlwZU9iamVjdFN0cnVjdHVyZSgpKTsKICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKIAotICAgIG1ldGFQcm9wZXJ0
aWVzLT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJ1cmwi
KSwgSlNDOjpqc1N0cmluZygmdm0sIHNvdXJjZVVSTC5zdHJpbmcoKSkpOworICAgIG1ldGFQcm9w
ZXJ0aWVzLT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInVy
bCIpLCBKU0M6OmpzU3RyaW5nKHZtLCBzb3VyY2VVUkwuc3RyaW5nKCkpKTsKICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKIAogICAgIHJldHVybiBtZXRhUHJvcGVydGll
czsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU4
NSw3ICs1ODUsNyBAQCBwcml2YXRlOgogICAgICAgICA6IENsb25lQmFzZShleGVjKQogICAgICAg
ICAsIG1fYnVmZmVyKG91dCkKICAgICAgICAgLCBtX2Jsb2JVUkxzKGJsb2JVUkxzKQotICAgICAg
ICAsIG1fZW1wdHlJZGVudGlmaWVyKElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgZW1wdHlT
dHJpbmcoKSkpCisgICAgICAgICwgbV9lbXB0eUlkZW50aWZpZXIoSWRlbnRpZmllcjo6ZnJvbVN0
cmluZyhleGVjLT52bSgpLCBlbXB0eVN0cmluZygpKSkKICAgICAgICAgLCBtX2NvbnRleHQoY29u
dGV4dCkKICAgICAgICAgLCBtX3NoYXJlZEJ1ZmZlcnMoc2hhcmVkQnVmZmVycykKICNpZiBFTkFC
TEUoV0VCQVNTRU1CTFkpCkBAIC0xMjU3LDcgKzEyNTcsNyBAQCBwcml2YXRlOgogICAgICAgICBp
ZiAoc3RyLmlzTnVsbCgpKQogICAgICAgICAgICAgd3JpdGUobV9lbXB0eUlkZW50aWZpZXIpOwog
ICAgICAgICBlbHNlCi0gICAgICAgICAgICB3cml0ZShJZGVudGlmaWVyOjpmcm9tU3RyaW5nKG1f
ZXhlYywgc3RyKSk7CisgICAgICAgICAgICB3cml0ZShJZGVudGlmaWVyOjpmcm9tU3RyaW5nKG1f
ZXhlYy0+dm0oKSwgc3RyKSk7CiAgICAgfQogCiAgICAgdm9pZCB3cml0ZShjb25zdCBWZWN0b3I8
dWludDhfdD4mIHZlY3RvcikKQEAgLTE1MTgsNyArMTUxOCw3IEBAIFNlcmlhbGl6YXRpb25SZXR1
cm5Db2RlIENsb25lU2VyaWFsaXplcjoKICAgICAgICAgICAgICAgICAgICAgaW5kZXhTdGFjay5y
ZW1vdmVMYXN0KCk7CiAgICAgICAgICAgICAgICAgICAgIGxlbmd0aFN0YWNrLnJlbW92ZUxhc3Qo
KTsKIAotICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0YWNrLmFwcGVuZChQcm9wZXJ0eU5h
bWVBcnJheSgmdm0sIFByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3MsIFByaXZhdGVTeW1ib2xNb2Rl
OjpFeGNsdWRlKSk7CisgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5U3RhY2suYXBwZW5kKFBy
b3BlcnR5TmFtZUFycmF5KHZtLCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzLCBQcml2YXRlU3lt
Ym9sTW9kZTo6RXhjbHVkZSkpOwogICAgICAgICAgICAgICAgICAgICBhcnJheS0+bWV0aG9kVGFi
bGUodm0pLT5nZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoYXJyYXksIG1fZXhlYywgcHJvcGVy
dHlTdGFjay5sYXN0KCksIEVudW1lcmF0aW9uTW9kZSgpKTsKICAgICAgICAgICAgICAgICAgICAg
aWYgKHByb3BlcnR5U3RhY2subGFzdCgpLnNpemUoKSkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgd3JpdGUoTm9uSW5kZXhQcm9wZXJ0aWVzVGFnKTsKQEAgLTE1NjgsNyArMTU2OCw3IEBAIFNl
cmlhbGl6YXRpb25SZXR1cm5Db2RlIENsb25lU2VyaWFsaXplcjoKICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIFNlcmlhbGl6YXRpb25SZXR1cm5Db2RlOjpEYXRhQ2xvbmVFcnJvcjsKICAgICAg
ICAgICAgICAgICBpbnB1dE9iamVjdFN0YWNrLmFwcGVuZChpbk9iamVjdCk7CiAgICAgICAgICAg
ICAgICAgaW5kZXhTdGFjay5hcHBlbmQoMCk7Ci0gICAgICAgICAgICAgICAgcHJvcGVydHlTdGFj
ay5hcHBlbmQoUHJvcGVydHlOYW1lQXJyYXkoJnZtLCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdz
LCBQcml2YXRlU3ltYm9sTW9kZTo6RXhjbHVkZSkpOworICAgICAgICAgICAgICAgIHByb3BlcnR5
U3RhY2suYXBwZW5kKFByb3BlcnR5TmFtZUFycmF5KHZtLCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJp
bmdzLCBQcml2YXRlU3ltYm9sTW9kZTo6RXhjbHVkZSkpOwogICAgICAgICAgICAgICAgIGluT2Jq
ZWN0LT5tZXRob2RUYWJsZSh2bSktPmdldE93blByb3BlcnR5TmFtZXMoaW5PYmplY3QsIG1fZXhl
YywgcHJvcGVydHlTdGFjay5sYXN0KCksIEVudW1lcmF0aW9uTW9kZSgpKTsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIG9iamVjdFN0YXJ0VmlzaXRNZW1iZXI6CkBAIC0xNjM2LDcgKzE2MzYs
NyBAQCBTZXJpYWxpemF0aW9uUmV0dXJuQ29kZSBDbG9uZVNlcmlhbGl6ZXI6CiAgICAgICAgICAg
ICAgICAgICAgIG1hcEl0ZXJhdG9yU3RhY2sucmVtb3ZlTGFzdCgpOwogICAgICAgICAgICAgICAg
ICAgICBKU09iamVjdCogb2JqZWN0ID0gaW5wdXRPYmplY3RTdGFjay5sYXN0KCk7CiAgICAgICAg
ICAgICAgICAgICAgIEFTU0VSVChqc0R5bmFtaWNDYXN0PEpTTWFwKj4odm0sIG9iamVjdCkpOwot
ICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0YWNrLmFwcGVuZChQcm9wZXJ0eU5hbWVBcnJh
eSgmdm0sIFByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3MsIFByaXZhdGVTeW1ib2xNb2RlOjpFeGNs
dWRlKSk7CisgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5U3RhY2suYXBwZW5kKFByb3BlcnR5
TmFtZUFycmF5KHZtLCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzLCBQcml2YXRlU3ltYm9sTW9k
ZTo6RXhjbHVkZSkpOwogICAgICAgICAgICAgICAgICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKHZt
KS0+Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIG1fZXhlYywgcHJvcGVydHlTdGFjay5sYXN0
KCksIEVudW1lcmF0aW9uTW9kZSgpKTsKICAgICAgICAgICAgICAgICAgICAgd3JpdGUoTm9uTWFw
UHJvcGVydGllc1RhZyk7CiAgICAgICAgICAgICAgICAgICAgIGluZGV4U3RhY2suYXBwZW5kKDAp
OwpAQCAtMTY4MCw3ICsxNjgwLDcgQEAgU2VyaWFsaXphdGlvblJldHVybkNvZGUgQ2xvbmVTZXJp
YWxpemVyOgogICAgICAgICAgICAgICAgICAgICBzZXRJdGVyYXRvclN0YWNrLnJlbW92ZUxhc3Qo
KTsKICAgICAgICAgICAgICAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9IGlucHV0T2JqZWN0U3Rh
Y2subGFzdCgpOwogICAgICAgICAgICAgICAgICAgICBBU1NFUlQoanNEeW5hbWljQ2FzdDxKU1Nl
dCo+KHZtLCBvYmplY3QpKTsKLSAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlTdGFjay5hcHBl
bmQoUHJvcGVydHlOYW1lQXJyYXkoJnZtLCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzLCBQcml2
YXRlU3ltYm9sTW9kZTo6RXhjbHVkZSkpOworICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0
YWNrLmFwcGVuZChQcm9wZXJ0eU5hbWVBcnJheSh2bSwgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5n
cywgUHJpdmF0ZVN5bWJvbE1vZGU6OkV4Y2x1ZGUpKTsKICAgICAgICAgICAgICAgICAgICAgb2Jq
ZWN0LT5tZXRob2RUYWJsZSh2bSktPmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBtX2V4ZWMs
IHByb3BlcnR5U3RhY2subGFzdCgpLCBFbnVtZXJhdGlvbk1vZGUoKSk7CiAgICAgICAgICAgICAg
ICAgICAgIHdyaXRlKE5vblNldFByb3BlcnRpZXNUYWcpOwogICAgICAgICAgICAgICAgICAgICBp
bmRleFN0YWNrLmFwcGVuZCgwKTsKQEAgLTE3NzcsNyArMTc3Nyw3IEBAIHByaXZhdGU6CiAgICAg
ICAgIEpTVmFsdWUganNTdHJpbmcoRXhlY1N0YXRlKiBleGVjKQogICAgICAgICB7CiAgICAgICAg
ICAgICBpZiAoIW1fanNTdHJpbmcpCi0gICAgICAgICAgICAgICAgbV9qc1N0cmluZyA9IEpTQzo6
anNTdHJpbmcoZXhlYywgbV9zdHJpbmcpOworICAgICAgICAgICAgICAgIG1fanNTdHJpbmcgPSBK
U0M6OmpzU3RyaW5nKGV4ZWMtPnZtKCksIG1fc3RyaW5nKTsKICAgICAgICAgICAgIHJldHVybiBt
X2pzU3RyaW5nOwogICAgICAgICB9CiAgICAgICAgIGNvbnN0IFN0cmluZyYgc3RyaW5nKCkgeyBy
ZXR1cm4gbV9zdHJpbmc7IH0KQEAgLTI4NjYsNyArMjg2Niw3IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICByZXR1cm4gY2FjaGVkU3RyaW5nLT5qc1N0cmluZyhtX2V4ZWMpOwogICAgICAgICB9CiAg
ICAgICAgIGNhc2UgRW1wdHlTdHJpbmdUYWc6Ci0gICAgICAgICAgICByZXR1cm4ganNFbXB0eVN0
cmluZygmbV9leGVjLT52bSgpKTsKKyAgICAgICAgICAgIHJldHVybiBqc0VtcHR5U3RyaW5nKG1f
ZXhlYy0+dm0oKSk7CiAgICAgICAgIGNhc2UgU3RyaW5nT2JqZWN0VGFnOiB7CiAgICAgICAgICAg
ICBDYWNoZWRTdHJpbmdSZWYgY2FjaGVkU3RyaW5nOwogICAgICAgICAgICAgaWYgKCFyZWFkU3Ry
aW5nRGF0YShjYWNoZWRTdHJpbmcpKQpAQCAtMjg3Nyw3ICsyODc3LDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgfQogICAgICAgICBjYXNlIEVtcHR5U3RyaW5nT2JqZWN0VGFnOiB7CiAgICAgICAgICAg
ICBWTSYgdm0gPSBtX2V4ZWMtPnZtKCk7Ci0gICAgICAgICAgICBTdHJpbmdPYmplY3QqIG9iaiA9
IGNvbnN0cnVjdFN0cmluZyh2bSwgbV9nbG9iYWxPYmplY3QsIGpzRW1wdHlTdHJpbmcoJnZtKSk7
CisgICAgICAgICAgICBTdHJpbmdPYmplY3QqIG9iaiA9IGNvbnN0cnVjdFN0cmluZyh2bSwgbV9n
bG9iYWxPYmplY3QsIGpzRW1wdHlTdHJpbmcodm0pKTsKICAgICAgICAgICAgIG1fZ2NCdWZmZXIu
YXBwZW5kV2l0aENyYXNoT25PdmVyZmxvdyhvYmopOwogICAgICAgICAgICAgcmV0dXJuIG9iajsK
ICAgICAgICAgfQpAQCAtMzE2MiwxMSArMzE2MiwxMSBAQCBEZXNlcmlhbGl6YXRpb25SZXN1bHQg
Q2xvbmVEZXNlcmlhbGl6ZXI6CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChKU1Zh
bHVlIHRlcm1pbmFsID0gcmVhZFRlcm1pbmFsKCkpIHsKLSAgICAgICAgICAgICAgICBwdXRQcm9w
ZXJ0eShvdXRwdXRPYmplY3RTdGFjay5sYXN0KCksIElkZW50aWZpZXI6OmZyb21TdHJpbmcobV9l
eGVjLCBjYWNoZWRTdHJpbmctPnN0cmluZygpKSwgdGVybWluYWwpOworICAgICAgICAgICAgICAg
IHB1dFByb3BlcnR5KG91dHB1dE9iamVjdFN0YWNrLmxhc3QoKSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZyh2bSwgY2FjaGVkU3RyaW5nLT5zdHJpbmcoKSksIHRlcm1pbmFsKTsKICAgICAgICAgICAg
ICAgICBnb3RvIG9iamVjdFN0YXJ0VmlzaXRNZW1iZXI7CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICBzdGF0ZVN0YWNrLmFwcGVuZChPYmplY3RFbmRWaXNpdE1lbWJlcik7Ci0gICAgICAgICAg
ICBwcm9wZXJ0eU5hbWVTdGFjay5hcHBlbmQoSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhtX2V4ZWMs
IGNhY2hlZFN0cmluZy0+c3RyaW5nKCkpKTsKKyAgICAgICAgICAgIHByb3BlcnR5TmFtZVN0YWNr
LmFwcGVuZChJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBjYWNoZWRTdHJpbmctPnN0cmluZygp
KSk7CiAgICAgICAgICAgICBnb3RvIHN0YXRlVW5rbm93bjsKICAgICAgICAgfQogICAgICAgICBj
YXNlIE9iamVjdEVuZFZpc2l0TWVtYmVyOiB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9XZWJDb3JlQnVpbHRpbk5hbWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvV2ViQ29yZUJ1aWx0aW5OYW1lcy5oCShyZXZpc2lvbiAyNDkxMjgpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlQnVpbHRpbk5hbWVzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAoYykgMjAxNSwgQ2Fub24g
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDE4LTIwMTkgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqICBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTM2MCw4ICszNjAsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFdl
YkNvcmVCdWlsdGluTmFtZXMgewogcHVibGljOgotICAgIGV4cGxpY2l0IFdlYkNvcmVCdWlsdGlu
TmFtZXMoSlNDOjpWTSogdm0pCi0gICAgICAgIDogbV92bSgqdm0pCisgICAgZXhwbGljaXQgV2Vi
Q29yZUJ1aWx0aW5OYW1lcyhKU0M6OlZNJiB2bSkKKyAgICAgICAgOiBtX3ZtKHZtKQogICAgICAg
ICBXRUJDT1JFX0NPTU1PTl9QUklWQVRFX0lERU5USUZJRVJTX0VBQ0hfUFJPUEVSVFlfTkFNRShJ
TklUSUFMSVpFX0JVSUxUSU5fTkFNRVMpCiAgICAgewogI2RlZmluZSBFWFBPUlRfTkFNRShuYW1l
KSBtX3ZtLnByb3BlcnR5TmFtZXMtPmFwcGVuZEV4dGVybmFsTmFtZShuYW1lIyNQdWJsaWNOYW1l
KCksIG5hbWUjI1ByaXZhdGVOYW1lKCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvV2ViQ29yZUpTQ2xpZW50RGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvV2ViQ29yZUpTQ2xpZW50RGF0YS5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVKU0NsaWVudERhdGEuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTQyLDcgKzQyLDcgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogSlNWTUNsaWVu
dERhdGE6OkpTVk1DbGllbnREYXRhKFZNJiB2bSkKICAgICA6IG1fYnVpbHRpbkZ1bmN0aW9ucyh2
bSkKLSAgICAsIG1fYnVpbHRpbk5hbWVzKCZ2bSkKKyAgICAsIG1fYnVpbHRpbk5hbWVzKHZtKQog
ICAgICwgbV9ydW50aW1lTWV0aG9kU3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgdm0u
ZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmdldCgpLCBSdW50aW1lTWV0aG9kKSAvLyBI
YXNoOjB4ZjcwYzRhODUKICAgICAsIG1fb3V0cHV0Q29uc3RyYWludFNwYWNlKCJXZWJDb3JlIFdy
YXBwZXIgdy8gT3V0cHV0IENvbnN0cmFpbnQiLCB2bS5oZWFwLCB2bS5kZXN0cnVjdGlibGVPYmpl
Y3RIZWFwQ2VsbFR5cGUuZ2V0KCksIHZtLmZhc3RNYWxsb2NBbGxvY2F0b3IuZ2V0KCkpIC8vIEhh
c2g6MHg3NzI0YzJlNAogICAgICwgbV9nbG9iYWxPYmplY3RPdXRwdXRDb25zdHJhaW50U3BhY2Uo
IldlYkNvcmUgR2xvYmFsIE9iamVjdCB3LyBPdXRwdXQgQ29uc3RyYWludCIsIHZtLmhlYXAsIHZt
LmNlbGxIZWFwQ2VsbFR5cGUuZ2V0KCksIHZtLmZhc3RNYWxsb2NBbGxvY2F0b3IuZ2V0KCkpIC8v
IEhhc2g6MHg1MjJkNmVjOQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2luZG93
UHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dpbmRv
d1Byb3h5LmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvV2luZG93UHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAq
ICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQog
ICogIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICogIENv
cHlyaWdodCAoQykgMjAwNi0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
ICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC0xMzksNyArMTM5LDcgQEAgdm9pZCBXaW5kb3dQcm94
eTo6Y2xlYXJKU1dpbmRvd1Byb3hpZXNObwogICAgICAgICAvLyBDbGVhciB0aGUgZGVidWdnZXIg
YW5kIGNvbnNvbGUgZnJvbSB0aGUgY3VycmVudCB3aW5kb3cgYmVmb3JlIHNldHRpbmcgdGhlIG5l
dyB3aW5kb3cuCiAgICAgICAgIHdpbmRvd1Byb3h5LT5hdHRhY2hEZWJ1Z2dlcihudWxscHRyKTsK
ICAgICAgICAgd2luZG93UHJveHktPndpbmRvdygpLT5zZXRDb25zb2xlQ2xpZW50KG51bGxwdHIp
OwotICAgICAgICBpZiAoYXV0byoganNET01XaW5kb3cgPSBqc0R5bmFtaWNDYXN0PEpTRE9NV2lu
ZG93QmFzZSo+KCp3aW5kb3dQcm94eS0+dm0oKSwgd2luZG93UHJveHktPndpbmRvdygpKSkKKyAg
ICAgICAgaWYgKGF1dG8qIGpzRE9NV2luZG93ID0ganNEeW5hbWljQ2FzdDxKU0RPTVdpbmRvd0Jh
c2UqPih3aW5kb3dQcm94eS0+dm0oKSwgd2luZG93UHJveHktPndpbmRvdygpKSkKICAgICAgICAg
ICAgIGpzRE9NV2luZG93LT53aWxsUmVtb3ZlRnJvbVdpbmRvd1Byb3h5KCk7CiAgICAgfQogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0
b3JKUy5wbQkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHdvcmtpbmcgY29weSkKQEAgLTcyNywyMCArNzI3LDIz
IEBAIHN1YiBHZW5lcmF0ZUdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgKICAgICBteSAkcHJvcGVy
dHlOYW1lR2VuZXJhdGlvbiA9IHN1YiB7CiAgICAgICAgIHJldHVybiBpZiAkZGlkR2VuZXJhdGVQ
cm9wZXJ0eU5hbWU7CiAgICAgICAgIAotICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAg
YXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tKHN0YXRlLCBpbmRleCk7XG4iKTsK
KyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRl
bnRpZmllcjo6ZnJvbSh2bSwgaW5kZXgpO1xuIik7CiAgICAgICAgICRkaWRHZW5lcmF0ZVByb3Bl
cnR5TmFtZSA9IDE7CiAgICAgfTsKICAgICAKKyAgICBteSAkbmFtZWRHZXR0ZXJPcGVyYXRpb24g
PSBHZXROYW1lZEdldHRlck9wZXJhdGlvbigkaW50ZXJmYWNlKTsKKyAgICBteSAkaW5kZXhlZEdl
dHRlck9wZXJhdGlvbiA9IEdldEluZGV4ZWRHZXR0ZXJPcGVyYXRpb24oJGludGVyZmFjZSk7Cisg
ICAgCiAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiYm9vbCAke2NsYXNzTmFtZX06OmdldE93blBy
b3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBzdGF0ZSwgdW5z
aWduZWQgaW5kZXgsIFByb3BlcnR5U2xvdCYgc2xvdClcbiIpOwogICAgIHB1c2goQCRvdXRwdXRB
cnJheSwgIntcbiIpOworICAgIGlmICgkbmFtZWRHZXR0ZXJPcGVyYXRpb24gfHwgJGludGVyZmFj
ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57UGx1Z2lufSkgeworICAgICAgICBwdXNoKEAkb3V0cHV0
QXJyYXksICIgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7XG4iKTsKKyAgICB9CiAgICAgcHVzaChA
JG91dHB1dEFycmF5LCAiICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8JHtjbGFzc05hbWV9
Kj4ob2JqZWN0KTtcbiIpOwogICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7XG4iKTsKICAgICAKLSAgICBteSAk
bmFtZWRHZXR0ZXJPcGVyYXRpb24gPSBHZXROYW1lZEdldHRlck9wZXJhdGlvbigkaW50ZXJmYWNl
KTsKLSAgICBteSAkaW5kZXhlZEdldHRlck9wZXJhdGlvbiA9IEdldEluZGV4ZWRHZXR0ZXJPcGVy
YXRpb24oJGludGVyZmFjZSk7Ci0gICAgCiAgICAgaWYgKCgkbmFtZWRHZXR0ZXJPcGVyYXRpb24g
JiYgJG5hbWVkR2V0dGVyT3BlcmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntNYXlUaHJvd0V4
Y2VwdGlvbn0pIHx8ICgkaW5kZXhlZEdldHRlck9wZXJhdGlvbiAmJiAkaW5kZXhlZEdldHRlck9w
ZXJhdGlvbi0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57TWF5VGhyb3dFeGNlcHRpb259KSkgewotICAg
ICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRShzdGF0ZS0+dm0oKSk7XG4iKTsKKyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5
LCAiICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pO1xuIik7CiAg
ICAgfQogICAgIAogICAgICMgTk9URTogVGhlIGFsb2dpdGhtIGZvciBbW0dldE93blByb3BlcnR5
XV0gY29udGFpbnMgb25seSB0aGUgZm9sbG93aW5nIHN0ZXA6CkBAIC04MzYsNiArODM5LDkgQEAg
c3ViIEdlbmVyYXRlR2V0T3duUHJvcGVydHlOYW1lcwogICAgIAogICAgIHB1c2goQCRvdXRwdXRB
cnJheSwgInZvaWQgJHtjbGFzc05hbWV9OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBv
YmplY3QsIEV4ZWNTdGF0ZSogc3RhdGUsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVz
LCBFbnVtZXJhdGlvbk1vZGUgbW9kZSlcbiIpOwogICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIntc
biIpOworICAgIGlmICgkaW5kZXhlZEdldHRlck9wZXJhdGlvbiB8fCAkbmFtZWRHZXR0ZXJPcGVy
YXRpb24pIHsKKyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIFZNJiB2bSA9IHN0YXRl
LT52bSgpO1xuIik7CisgICAgfQogICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBhdXRvKiB0
aGlzT2JqZWN0ID0ganNDYXN0PCR7Y2xhc3NOYW1lfSo+KG9iamVjdCk7XG4iKTsKICAgICBwdXNo
KEAkb3V0cHV0QXJyYXksICIgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhvYmplY3QsIGlu
Zm8oKSk7XG4iKTsKICAgICAKQEAgLTg0NCw3ICs4NTAsNyBAQCBzdWIgR2VuZXJhdGVHZXRPd25Q
cm9wZXJ0eU5hbWVzCiAgICAgIyBGSVhNRTogVGhpcyBzaG91bGQgc3VwcG9ydCBub24tY29udGln
dW91cyBpbmRpY2VzLgogICAgIGlmICgkaW5kZXhlZEdldHRlck9wZXJhdGlvbikgewogICAgICAg
ICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgZm9yICh1bnNpZ25lZCBpID0gMCwgY291bnQgPSB0
aGlzT2JqZWN0LT53cmFwcGVkKCkubGVuZ3RoKCk7IGkgPCBjb3VudDsgKytpKVxuIik7Ci0gICAg
ICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRp
Zmllcjo6ZnJvbShzdGF0ZSwgaSkpO1xuIik7CisgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwg
IiAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbSh2bSwgaSkpO1xuIik7
CiAgICAgfQogCiAgICAgIyAyLiBJZiB0aGUgb2JqZWN0IHN1cHBvcnRzIG5hbWVkIHByb3BlcnRp
ZXMgYW5kIGRvZXNu4oCZdCBpbXBsZW1lbnQgYW4gaW50ZXJmYWNlCkBAIC04NTUsMTEgKzg2MSwx
MSBAQCBzdWIgR2VuZXJhdGVHZXRPd25Qcm9wZXJ0eU5hbWVzCiAgICAgaWYgKCRuYW1lZEdldHRl
ck9wZXJhdGlvbikgewogICAgICAgICBpZiAoISRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRl
cy0+e0xlZ2FjeVVuZW51bWVyYWJsZU5hbWVkUHJvcGVydGllc30pIHsKICAgICAgICAgICAgIHB1
c2goQCRvdXRwdXRBcnJheSwgIiAgICBmb3IgKGF1dG8mIHByb3BlcnR5TmFtZSA6IHRoaXNPYmpl
Y3QtPndyYXBwZWQoKS5zdXBwb3J0ZWRQcm9wZXJ0eU5hbWVzKCkpXG4iKTsKLSAgICAgICAgICAg
IHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmll
cjo6ZnJvbVN0cmluZyhzdGF0ZSwgcHJvcGVydHlOYW1lKSk7XG4iKTsKKyAgICAgICAgICAgIHB1
c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6
ZnJvbVN0cmluZyh2bSwgcHJvcGVydHlOYW1lKSk7XG4iKTsKICAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBpZiAobW9kZS5pbmNsdWRlRG9udEVu
dW1Qcm9wZXJ0aWVzKCkpIHtcbiIpOwogICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAi
ICAgICAgICBmb3IgKGF1dG8mIHByb3BlcnR5TmFtZSA6IHRoaXNPYmplY3QtPndyYXBwZWQoKS5z
dXBwb3J0ZWRQcm9wZXJ0eU5hbWVzKCkpXG4iKTsKLSAgICAgICAgICAgIHB1c2goQCRvdXRwdXRB
cnJheSwgIiAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb21TdHJp
bmcoc3RhdGUsIHByb3BlcnR5TmFtZSkpO1xuIik7CisgICAgICAgICAgICBwdXNoKEAkb3V0cHV0
QXJyYXksICIgICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKHZtLCBwcm9wZXJ0eU5hbWUpKTtcbiIpOwogICAgICAgICAgICAgcHVzaChAJG91dHB1dEFy
cmF5LCAiICAgIH1cbiIpOwogICAgICAgICB9CiAgICAgfQpAQCAtMTAwNiw2ICsxMDEyLDkgQEAg
c3ViIEdlbmVyYXRlUHV0QnlJbmRleAogICAgIAogICAgIHB1c2goQCRvdXRwdXRBcnJheSwgImJv
b2wgJHtjbGFzc05hbWV9OjpwdXRCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBzdGF0
ZSwgdW5zaWduZWQgaW5kZXgsIEpTVmFsdWUgdmFsdWUsIGJvb2wiIC4gKCEkZWxsaWRlc0NhbGxz
VG9CYXNlID8gIiBzaG91bGRUaHJvdyIgOiAiIikgLiAiKVxuIik7CiAgICAgcHVzaChAJG91dHB1
dEFycmF5LCAie1xuIik7CisgICAgaWYgKCRuYW1lZFNldHRlck9wZXJhdGlvbiB8fCAkaW50ZXJm
YWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntQbHVnaW59KSB7CisgICAgICAgIHB1c2goQCRvdXRw
dXRBcnJheSwgIiAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTtcbiIpOworICAgIH0KICAgICBwdXNo
KEAkb3V0cHV0QXJyYXksICIgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDwke2NsYXNzTmFt
ZX0qPihjZWxsKTtcbiIpOwogICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7XG5cbiIpOwogCkBAIC0xMDE4LDcg
KzEwMjcsNyBAQCBzdWIgR2VuZXJhdGVQdXRCeUluZGV4CiAgICAgICAgIEdlbmVyYXRlQ3VzdG9t
RWxlbWVudFJlYWN0aW9uc1N0YWNrSWZOZWVkZWQoJG91dHB1dEFycmF5LCAkaW5kZXhlZFNldHRl
ck9wZXJhdGlvbiwgIipzdGF0ZSIpOwogICAgIH0KICAgICAKLSAgICBpZiAoJGluZGV4ZWRTZXR0
ZXJPcGVyYXRpb24gKSB7CisgICAgaWYgKCRpbmRleGVkU2V0dGVyT3BlcmF0aW9uKSB7CiAgICAg
ICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBpZiAoTElLRUxZKGluZGV4IDw9IE1BWF9BUlJB
WV9JTkRFWCkpIHtcbiIpOwogICAgICAgICAKICAgICAgICAgR2VuZXJhdGVJbnZva2VJbmRleGVk
UHJvcGVydHlTZXR0ZXIoJG91dHB1dEFycmF5LCAiICAgICAgICAiLCAkaW50ZXJmYWNlLCAkaW5k
ZXhlZFNldHRlck9wZXJhdGlvbiwgImluZGV4IiwgInZhbHVlIik7CkBAIC0xMDI4LDEyICsxMDM3
LDEyIEBAIHN1YiBHZW5lcmF0ZVB1dEJ5SW5kZXgKICAgICB9CiAgICAgCiAgICAgaWYgKCRuYW1l
ZFNldHRlck9wZXJhdGlvbikgewotICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgYXV0
byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tKHN0YXRlLCBpbmRleCk7XG4iKTsKKyAg
ICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRp
Zmllcjo6ZnJvbSh2bSwgaW5kZXgpO1xuIik7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgIG15
ICRhZGRpdGlvbmFsSW5kZW50ID0gIiI7CiAgICAgICAgIGlmICghJG92ZXJyaWRlQnVpbHRpbnMp
IHsKICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBQcm9wZXJ0eVNsb3Qgc2xv
dCB7IHRoaXNPYmplY3QsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpWTUlucXVp
cnkgfTtcbiIpOwotICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIEpTVmFsdWUg
cHJvdG90eXBlID0gdGhpc09iamVjdC0+Z2V0UHJvdG90eXBlRGlyZWN0KHN0YXRlLT52bSgpKTtc
biIpOworICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIEpTVmFsdWUgcHJvdG90
eXBlID0gdGhpc09iamVjdC0+Z2V0UHJvdG90eXBlRGlyZWN0KHZtKTtcbiIpOwogICAgICAgICAg
ICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGlmICghKHByb3RvdHlwZS5pc09iamVjdCgpICYm
IGFzT2JqZWN0KHByb3RvdHlwZSktPmdldFByb3BlcnR5U2xvdChzdGF0ZSwgcHJvcGVydHlOYW1l
LCBzbG90KSkpIHtcbiIpOwogICAgICAgICAgICAgJGFkZGl0aW9uYWxJbmRlbnQgLj0gIiAgICAi
OwogICAgICAgICB9CkBAIC0xMDUzLDcgKzEwNjIsNyBAQCBzdWIgR2VuZXJhdGVQdXRCeUluZGV4
CiAgICAgYXNzZXJ0KCJVc2luZyBib3RoIGEgbmFtZWQgcHJvcGVydHkgc2V0dGVyIGFuZCBbUGx1
Z2luXSB0b2dldGhlciBpcyBub3Qgc3VwcG9ydGVkLiIpIGlmICRuYW1lZFNldHRlck9wZXJhdGlv
biAmJiAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntQbHVnaW59OwogICAgIGlmICgk
aW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntQbHVnaW59KSB7CiAgICAgICAgIEFkZFRv
SW1wbEluY2x1ZGVzKCJKU1BsdWdpbkVsZW1lbnRGdW5jdGlvbnMuaCIpOwotICAgICAgICBwdXNo
KEAkb3V0cHV0QXJyYXksICIgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9t
KHN0YXRlLCBpbmRleCk7XG4iKTsKKyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGF1
dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbSh2bSwgaW5kZXgpO1xuIik7CiAgICAg
ICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBQdXRQcm9wZXJ0eVNsb3QgcHV0UHJvcGVydHlT
bG90KHRoaXNPYmplY3QsIHNob3VsZFRocm93KTtcbiIpOwogICAgICAgICBwdXNoKEAkb3V0cHV0
QXJyYXksICIgICAgYm9vbCBwdXRSZXN1bHQgPSBmYWxzZTtcbiIpOwogICAgICAgICBwdXNoKEAk
b3V0cHV0QXJyYXksICIgICAgaWYgKHBsdWdpbkVsZW1lbnRDdXN0b21QdXQodGhpc09iamVjdCwg
c3RhdGUsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHB1dFByb3BlcnR5U2xvdCwgcHV0UmVzdWx0KSlc
biIpOwpAQCAtMTM0MSw3ICsxMzUwLDggQEAgc3ViIEdlbmVyYXRlRGVsZXRlUHJvcGVydHlCeUlu
ZGV4CiAgICAgaWYgKEdldEluZGV4ZWRHZXR0ZXJPcGVyYXRpb24oJGludGVyZmFjZSkpIHsKICAg
ICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIHJldHVybiAhaW1wbC5pc1N1cHBvcnRlZFBy
b3BlcnR5SW5kZXgoaW5kZXgpO1xuIik7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgcHVzaChAJG91
dHB1dEFycmF5LCAiICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbShzdGF0
ZSwgaW5kZXgpO1xuIik7CisgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBWTSYgdm0g
PSBzdGF0ZS0+dm0oKTtcbiIpOworICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgYXV0
byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tKHZtLCBpbmRleCk7XG4iKTsKIAogICAg
ICAgICAjIEdlbmVyYXRlRGVsZXRlUHJvcGVydHlDb21tb24gaW1wbGVtZW50cyBzdGVwIDIuCiAg
ICAgICAgIEdlbmVyYXRlRGVsZXRlUHJvcGVydHlDb21tb24oJG91dHB1dEFycmF5LCAkaW50ZXJm
YWNlLCAkY2xhc3NOYW1lLCAkb3BlcmF0aW9uLCAkY29uZGl0aW9uYWwpOwpAQCAtMjM0Nyw3ICsy
MzU3LDcgQEAgc3ViIEdlbmVyYXRlRGljdGlvbmFyeUltcGxlbWVudGF0aW9uQ29udAogICAgICAg
ICAgICAgJHJlc3VsdCAuPSAiICAgIGlmIChpc051bGxPclVuZGVmaW5lZClcbiI7CiAgICAgICAg
ICAgICAkcmVzdWx0IC49ICIgICAgICAgICR7a2V5fVZhbHVlID0ganNVbmRlZmluZWQoKTtcbiI7
CiAgICAgICAgICAgICAkcmVzdWx0IC49ICIgICAgZWxzZSB7XG4iOwotICAgICAgICAgICAgJHJl
c3VsdCAuPSAiICAgICAgICAke2tleX1WYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZygmc3RhdGUsIFwiJHtrZXl9XCIpKTtcbiI7CisgICAgICAgICAgICAk
cmVzdWx0IC49ICIgICAgICAgICR7a2V5fVZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBcIiR7a2V5fVwiKSk7XG4iOwogICAgICAgICAgICAgJHJl
c3VsdCAuPSAiICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7XG4i
OwogICAgICAgICAgICAgJHJlc3VsdCAuPSAiICAgIH1cbiI7CiAKQEAgLTI0MzMsMTMgKzI0NDMs
MTMgQEAgc3ViIEdlbmVyYXRlRGljdGlvbmFyeUltcGxlbWVudGF0aW9uQ29udAogCiAgICAgICAg
ICAgICAgICAgICAgICRyZXN1bHQgLj0gIiR7aW5kZW50fSAgICBpZiAoISR7SURMVHlwZX06Omlz
TnVsbFZhbHVlKCR7dmFsdWVFeHByZXNzaW9ufSkpIHtcbiI7CiAgICAgICAgICAgICAgICAgICAg
ICRyZXN1bHQgLj0gIiR7aW5kZW50fSAgICAgICAgYXV0byAke2tleX1WYWx1ZSA9ICR7Y29udmVy
c2lvbkV4cHJlc3Npb259O1xuIjsKLSAgICAgICAgICAgICAgICAgICAgJHJlc3VsdCAuPSAiJHtp
bmRlbnR9ICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKCZ2bSwgXCIke2tleX1cIiksICR7a2V5fVZhbHVlKTtcbiI7CisgICAgICAgICAgICAg
ICAgICAgICRyZXN1bHQgLj0gIiR7aW5kZW50fSAgICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0s
IEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgXCIke2tleX1cIiksICR7a2V5fVZhbHVl
KTtcbiI7CiAgICAgICAgICAgICAgICAgICAgICRyZXN1bHQgLj0gIiR7aW5kZW50fSAgICB9XG4i
OwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIG15ICRjb252
ZXJzaW9uRXhwcmVzc2lvbiA9IE5hdGl2ZVRvSlNWYWx1ZVVzaW5nUmVmZXJlbmNlcygkbWVtYmVy
LCAkdHlwZVNjb3BlLCAkdmFsdWVFeHByZXNzaW9uLCAiZ2xvYmFsT2JqZWN0Iik7CiAKICAgICAg
ICAgICAgICAgICAgICAgJHJlc3VsdCAuPSAiJHtpbmRlbnR9ICAgIGF1dG8gJHtrZXl9VmFsdWUg
PSAke2NvbnZlcnNpb25FeHByZXNzaW9ufTtcbiI7Ci0gICAgICAgICAgICAgICAgICAgICRyZXN1
bHQgLj0gIiR7aW5kZW50fSAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKCZ2bSwgXCIke2tleX1cIiksICR7a2V5fVZhbHVlKTtcbiI7CisgICAgICAg
ICAgICAgICAgICAgICRyZXN1bHQgLj0gIiR7aW5kZW50fSAgICByZXN1bHQtPnB1dERpcmVjdCh2
bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBcIiR7a2V5fVwiKSwgJHtrZXl9VmFs
dWUpO1xuIjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgaWYgKCRuZWVkc1J1
bnRpbWVDaGVjaykgewogICAgICAgICAgICAgICAgICAgICAkcmVzdWx0IC49ICIgICAgfVxuIjsK
QEAgLTM4MzQsNyArMzg0NCw3IEBAIHN1YiBhZGRVbnNjb3BhYmxlUHJvcGVydGllcwogICAgIEFk
ZFRvSW1wbEluY2x1ZGVzKCI8SmF2YVNjcmlwdENvcmUvT2JqZWN0Q29uc3RydWN0b3IuaD4iKTsK
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBKU09iamVjdCYgdW5zY29wYWJsZXMgPSAqY29u
c3RydWN0RW1wdHlPYmplY3QoZ2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKSwgZ2xvYmFsT2Jq
ZWN0KCktPm51bGxQcm90b3R5cGVPYmplY3RTdHJ1Y3R1cmUoKSk7XG4iKTsKICAgICBmb3JlYWNo
IG15ICR1bnNjb3BhYmxlIChAdW5zY29wYWJsZXMpIHsKLSAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgdW5zY29wYWJsZXMucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KCZ2bSwgXCIkdW5zY29wYWJsZVwiKSwganNCb29sZWFuKHRydWUpKTtcbiIpOworICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICB1bnNjb3BhYmxlcy5wdXREaXJlY3Qodm0sIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcodm0sIFwiJHVuc2NvcGFibGVcIiksIGpzQm9vbGVhbih0cnVlKSk7XG4i
KTsKICAgICB9CiAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcHV0RGlyZWN0V2l0aG91dFRy
YW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPnVuc2NvcGFibGVzU3ltYm9sLCAmdW5zY29w
YWJsZXMsIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtIHwgSlNDOjpQcm9wZXJ0eUF0
dHJpYnV0ZTo6UmVhZE9ubHkpO1xuIik7CiB9CkBAIC00MjYwLDcgKzQyNzAsNyBAQCBzdWIgR2Vu
ZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgbXkgJG5hbWUgPSAkb3BlcmF0aW9uT3JB
dHRyaWJ1dGUtPm5hbWU7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAo
ISR7cnVudGltZUVuYWJsZUNvbmRpdGlvbmFsU3RyaW5nfSkge1xuIik7CiAgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgaGFzRGlzYWJsZWRSdW50aW1lUHJvcGVydGllcyA9
IHRydWU7XG4iKTsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBhdXRv
IHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCByZWludGVycHJldF9j
YXN0PGNvbnN0IExDaGFyKj4oXCIkbmFtZVwiKSwgc3RybGVuKFwiJG5hbWVcIikpO1xuIik7Cisg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgYXV0byBwcm9wZXJ0eU5hbWUg
PSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFy
Kj4oXCIkbmFtZVwiKSwgc3RybGVuKFwiJG5hbWVcIikpO1xuIik7CiAgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICAgICAgVk06OkRlbGV0ZVByb3BlcnR5TW9kZVNjb3BlIHNjb3Bl
KHZtLCBWTTo6RGVsZXRlUHJvcGVydHlNb2RlOjpJZ25vcmVDb25maWd1cmFibGUpO1xuIik7CiAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgSlNPYmplY3Q6OmRlbGV0ZVBy
b3BlcnR5KHRoaXMsIGdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCksIHByb3BlcnR5TmFtZSk7
XG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIH1cbiIpOwpAQCAtNDQ5
OSwxMCArNDUwOSwxMSBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICBpZiAo
JGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57SW1wbGljaXRUaGlzfSkgewogICAgICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ0ZW1wbGF0ZTw+IGlubGluZSAke2NsYXNzTmFtZX0q
IElETEF0dHJpYnV0ZTwke2NsYXNzTmFtZX0+OjpjYXN0KEV4ZWNTdGF0ZSYgc3RhdGUsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSlcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICJ7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIFZNJiB2bSA9IHN0
YXRlLnZtKCk7XG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGF1dG8g
ZGVjb2RlZFRoaXNWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpO1xuIik7CiAgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoZGVjb2RlZFRoaXNWYWx1ZS5pc1Vu
ZGVmaW5lZE9yTnVsbCgpKVxuIik7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICAgICAgZGVjb2RlZFRoaXNWYWx1ZSA9IHN0YXRlLnRoaXNWYWx1ZSgpLnRvVGhpcygmc3RhdGUs
IE5vdFN0cmljdE1vZGUpO1xuIik7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICByZXR1cm4gJGNhc3RpbmdGdW5jdGlvbihzdGF0ZS52bSgpLCBkZWNvZGVkVGhpc1ZhbHVlKTsi
KTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiAkY2FzdGluZ0Z1
bmN0aW9uKHZtLCBkZWNvZGVkVGhpc1ZhbHVlKTsiKTsKICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAifVxuXG4iKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAidGVtcGxhdGU8PiBpbmxpbmUgJHtjbGFzc05hbWV9KiBJRExBdHRyaWJ1dGU8
JHtjbGFzc05hbWV9Pjo6Y2FzdChFeGVjU3RhdGUmIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUpXG4iKTsKQEAgLTQ5NzksNyArNDk5MCwxMiBAQCBzdWIgR2VuZXJhdGVBdHRyaWJ1dGVT
ZXR0ZXJCb2R5RGVmaW5pdGlvCiAgICAgCiAgICAgcHVzaChAJG91dHB1dEFycmF5LCAic3RhdGlj
IGlubGluZSBib29sICR7YXR0cmlidXRlU2V0dGVyQm9keU5hbWV9KCIgLiBqb2luKCIsICIsIEBz
aWduYXR1cmVBcmd1bWVudHMpIC4gIilcbiIpOwogICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIntc
biIpOwotICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7XG4iKTsKKyAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgVU5VU0VEX1BBUkFNKHN0YXRl
KTtcbiIpOworICAgIGlmICgkY29kZUdlbmVyYXRvci0+SXNDb25zdHJ1Y3RvclR5cGUoJGF0dHJp
YnV0ZS0+dHlwZSkgfHwgJGF0dHJpYnV0ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57UmVwbGFjZWFi
bGV9IHx8ICRhdHRyaWJ1dGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+e1B1dEZvcndhcmRzfSkgewor
ICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgVk0mIHZtID0gdGhyb3dTY29wZS52bSgp
O1xuIik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTtcbiIpOworICAgIH0KIAogICAgIEdlbmVyYXRlQ3VzdG9t
RWxlbWVudFJlYWN0aW9uc1N0YWNrSWZOZWVkZWQoJG91dHB1dEFycmF5LCAkYXR0cmlidXRlLCAi
c3RhdGUiKTsKIApAQCAtNTAyMywyMSArNTAzOSwyMSBAQCBzdWIgR2VuZXJhdGVBdHRyaWJ1dGVT
ZXR0ZXJCb2R5RGVmaW5pdGlvCiAgICAgICAgIH0KICAgICAgICAgbXkgJGlkID0gJGF0dHJpYnV0
ZS0+bmFtZTsKICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIC8vIFNoYWRvd2luZyBh
IGJ1aWx0LWluIGNvbnN0cnVjdG9yLlxuIik7Ci0gICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwg
IiAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qoc3RhdGUudm0oKSwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZygmc3RhdGUudm0oKSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KFwi
JHtpZH1cIiksIHN0cmxlbihcIiR7aWR9XCIpKSwgdmFsdWUpO1xuIik7CisgICAgICAgIHB1c2go
QCRvdXRwdXRBcnJheSwgIiAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50
aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihcIiR7
aWR9XCIpLCBzdHJsZW4oXCIke2lkfVwiKSksIHZhbHVlKTtcbiIpOwogICAgIH0gZWxzaWYgKCRh
dHRyaWJ1dGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+e1JlcGxhY2VhYmxlfSkgewogICAgICAgICBt
eSAkaWQgPSAkYXR0cmlidXRlLT5uYW1lOwogICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIg
ICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gcHJvcGVydHkuXG4iKTsKICAgICAgICAgaWYgKEF0
dHJpYnV0ZVNob3VsZEJlT25JbnN0YW5jZSgkaW50ZXJmYWNlLCAkYXR0cmlidXRlKSkgewotICAg
ICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIHJldHVybiByZXBsYWNlU3RhdGljUHJv
cGVydHlTbG90KHN0YXRlLnZtKCksICZ0aGlzT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KCZzdGF0ZS52bSgpLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oXCIke2lkfVwiKSwg
c3RybGVuKFwiJHtpZH1cIikpLCB2YWx1ZSk7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQCRvdXRw
dXRBcnJheSwgIiAgICByZXR1cm4gcmVwbGFjZVN0YXRpY1Byb3BlcnR5U2xvdCh2bSwgJnRoaXNP
YmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
TENoYXIqPihcIiR7aWR9XCIpLCBzdHJsZW4oXCIke2lkfVwiKSksIHZhbHVlKTtcbiIpOwogICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIHJldHVy
biB0aGlzT2JqZWN0LnB1dERpcmVjdChzdGF0ZS52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KCZzdGF0ZS52bSgpLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oXCIke2lkfVwiKSwg
c3RybGVuKFwiJHtpZH1cIikpLCB2YWx1ZSk7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQCRvdXRw
dXRBcnJheSwgIiAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6
OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihcIiR7aWR9XCIp
LCBzdHJsZW4oXCIke2lkfVwiKSksIHZhbHVlKTtcbiIpOwogICAgICAgICB9CiAgICAgfSBlbHNp
ZiAoJGF0dHJpYnV0ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57UHV0Rm9yd2FyZHN9KSB7CiAgICAg
ICAgIGFzc2VydCgiW1B1dEZvcndhcmRzXSBpcyBub3QgY29tcGF0aWJsZSB3aXRoIHN0YXRpYyBh
dHRyaWJ1dGVzIikgaWYgJGF0dHJpYnV0ZS0+aXNTdGF0aWM7CiAgICAgICAgIAogICAgICAgICAj
IDMuNS45LjEuIExldCBRIGJlID8gR2V0KE8sIGlkKS4KICAgICAgICAgbXkgJGlkID0gJGF0dHJp
YnV0ZS0+bmFtZTsKLSAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGF1dG8gaWQgPSBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZS52bSgpLCByZWludGVycHJldF9jYXN0PGNvbnN0
IExDaGFyKj4oXCIke2lkfVwiKSwgc3RybGVuKFwiJHtpZH1cIikpO1xuIik7CisgICAgICAgIHB1
c2goQCRvdXRwdXRBcnJheSwgIiAgICBhdXRvIGlkID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2
bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KFwiJHtpZH1cIiksIHN0cmxlbihcIiR7
aWR9XCIpKTtcbiIpOwogICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgYXV0byB2YWx1
ZVRvRm9yd2FyZFRvID0gdGhpc09iamVjdC5nZXQoJnN0YXRlLCBpZCk7XG4iKTsKICAgICAgICAg
cHVzaChAJG91dHB1dEFycmF5LCAiICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
ZmFsc2UpO1xuIik7CiAgICAgICAgIApAQCAtNTA0OSwxMyArNTA2NSwxMyBAQCBzdWIgR2VuZXJh
dGVBdHRyaWJ1dGVTZXR0ZXJCb2R5RGVmaW5pdGlvCiAgICAgICAgIAogICAgICAgICAjIDMuNS45
LjMuIExldCBmb3J3YXJkSWQgYmUgdGhlIGlkZW50aWZpZXIgYXJndW1lbnQgb2YgdGhlIFtQdXRG
b3J3YXJkc10gZXh0ZW5kZWQgYXR0cmlidXRlLgogICAgICAgICBteSAkZm9yd2FyZElkID0gJGF0
dHJpYnV0ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57UHV0Rm9yd2FyZHN9OwotICAgICAgICBwdXNo
KEAkb3V0cHV0QXJyYXksICIgICAgYXV0byBmb3J3YXJkSWQgPSBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKCZzdGF0ZS52bSgpLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oXCIke2Zvcndh
cmRJZH1cIiksIHN0cmxlbihcIiR7Zm9yd2FyZElkfVwiKSk7XG4iKTsKKyAgICAgICAgcHVzaChA
JG91dHB1dEFycmF5LCAiICAgIGF1dG8gZm9yd2FyZElkID0gSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KFwiJHtmb3J3YXJkSWR9XCIpLCBz
dHJsZW4oXCIke2ZvcndhcmRJZH1cIikpO1xuIik7CiAgICAgICAgIAogICAgICAgICAjIDMuNS45
LjQuIFBlcmZvcm0gPyBTZXQoUSwgZm9yd2FyZElkLCBWKS4KICAgICAgICAgIyBGSVhNRTogV2hh
dCBzaG91bGQgdGhlIHNlY29uZCB2YWx1ZSB0byB0aGUgUHV0UHJvcGVydHlTbG90IGJlPwogICAg
ICAgICAjIChodHRwczovL2dpdGh1Yi5jb20vaGV5Y2FtL3dlYmlkbC9pc3N1ZXMvMzY4KQogICAg
ICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgUHV0UHJvcGVydHlTbG90IHNsb3QodmFsdWVU
b0ZvcndhcmRUbywgZmFsc2UpO1xuIik7Ci0gICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAg
ICBhc09iamVjdCh2YWx1ZVRvRm9yd2FyZFRvKS0+bWV0aG9kVGFibGUoc3RhdGUudm0oKSktPnB1
dChhc09iamVjdCh2YWx1ZVRvRm9yd2FyZFRvKSwgJnN0YXRlLCBmb3J3YXJkSWQsIHZhbHVlLCBz
bG90KTtcbiIpOworICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgYXNPYmplY3QodmFs
dWVUb0ZvcndhcmRUbyktPm1ldGhvZFRhYmxlKHZtKS0+cHV0KGFzT2JqZWN0KHZhbHVlVG9Gb3J3
YXJkVG8pLCAmc3RhdGUsIGZvcndhcmRJZCwgdmFsdWUsIHNsb3QpO1xuIik7CiAgICAgICAgIHB1
c2goQCRvdXRwdXRBcnJheSwgIiAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZh
bHNlKTtcbiIpOwogICAgICAgICAKICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIHJl
dHVybiB0cnVlO1xuIik7CkBAIC01MzMyLDcgKzUzNDgsNyBAQCBzdWIgR2VuZXJhdGVPcGVyYXRp
b25EZWZpbml0aW9uCiAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIntcbiIpOwogICAgICAg
ICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTtcbiIpOwogICAg
ICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7XG4iKTsK
LSAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIEpTQzo6TmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcigmdm0sIHN0YXRlKTtcbiIpOworICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXks
ICIgICAgSlNDOjpOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBzdGF0ZSk7XG4iKTsK
ICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pO1xuIik7CiAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7XG4iKTsKICAgICAgICAgcHVzaChAJG91dHB1dEFy
cmF5LCAiICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7XG4iKTsKQEAgLTU0
MzUsMTUgKzU0NTEsMTUgQEAgc3ViIEdlbmVyYXRlU2VyaWFsaXplckRlZmluaXRpb24KICAgICAg
ICAgICAgIGlmICgkYXR0cmlidXRlLT50eXBlLT5pc051bGxhYmxlKSB7CiAgICAgICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKCEke25hbWV9VmFsdWUuaXNOdWxsKCkpIHtc
biIpOwogICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBhdXRvKiAk
e25hbWV9U2VyaWFsaXplZFZhbHVlID0gSlMke2F0dHJpYnV0ZUludGVyZmFjZU5hbWV9OjpzZXJp
YWxpemUoc3RhdGUsICpqc0Nhc3Q8SlMke2F0dHJpYnV0ZUludGVyZmFjZU5hbWV9Kj4oJHtuYW1l
fVZhbHVlKSwgZ2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlKTtcbiIpOwotICAgICAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZygmdm0sIFwiJHtuYW1lfVwiKSwgJHtuYW1lfVNlcmlhbGl6ZWRWYWx1
ZSk7XG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmVz
dWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIFwiJHtuYW1lfVwi
KSwgJHtuYW1lfVNlcmlhbGl6ZWRWYWx1ZSk7XG4iKTsKICAgICAgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiAgICB9IGVsc2VcbiIpOwotICAgICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZygmdm0sIFwiJHtuYW1lfVwiKSwgJHtuYW1lfVZhbHVlKTtcbiIpOworICAgICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgXCIke25hbWV9XCIpLCAke25hbWV9VmFsdWUpO1xuIik7
CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgIGF1dG8qICR7bmFtZX1TZXJpYWxpemVkVmFsdWUgPSBKUyR7YXR0cmlidXRlSW50ZXJm
YWNlTmFtZX06OnNlcmlhbGl6ZShzdGF0ZSwgKmpzQ2FzdDxKUyR7YXR0cmlidXRlSW50ZXJmYWNl
TmFtZX0qPigke25hbWV9VmFsdWUpLCBnbG9iYWxPYmplY3QsIHRocm93U2NvcGUpO1xuIik7Ci0g
ICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmVzdWx0LT5wdXREaXJlY3Qo
dm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCBcIiR7bmFtZX1cIiksICR7bmFtZX1TZXJp
YWxpemVkVmFsdWUpO1xuIik7CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIg
ICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIFwiJHtu
YW1lfVwiKSwgJHtuYW1lfVNlcmlhbGl6ZWRWYWx1ZSk7XG4iKTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJlc3Vs
dC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgXCIke25hbWV9XCIp
LCAke25hbWV9VmFsdWUpO1xuIik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgXCIke25h
bWV9XCIpLCAke25hbWV9VmFsdWUpO1xuIik7CiAgICAgICAgIH0KIAogICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIlxuIik7CkBAIC02MjM0LDcgKzYyNTAsNyBAQCBzdWIgR2VuZXJhdGVDYWxs
YmFja0ltcGxlbWVudGF0aW9uQ29udGVuCiAgICAgICAgICAgICAgICAgJGNhbGxiYWNrSW52b2Nh
dGlvbiA9ICJtX2RhdGEtPmludm9rZUNhbGxiYWNrKHRoaXNWYWx1ZSwgYXJncywgSlNDYWxsYmFj
a0RhdGE6OkNhbGxiYWNrVHlwZTo6RnVuY3Rpb24sIElkZW50aWZpZXIoKSwgcmV0dXJuZWRFeGNl
cHRpb24pIjsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgbXkgJGNhbGxi
YWNrVHlwZSA9ICRudW1PcGVyYXRpb25zID4gMSA/ICJPYmplY3QiIDogIkZ1bmN0aW9uT3JPYmpl
Y3QiOwotICAgICAgICAgICAgICAgICRjYWxsYmFja0ludm9jYXRpb24gPSAibV9kYXRhLT5pbnZv
a2VDYWxsYmFjayh0aGlzVmFsdWUsIGFyZ3MsIEpTQ2FsbGJhY2tEYXRhOjpDYWxsYmFja1R5cGU6
OiR7Y2FsbGJhY2tUeXBlfSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIFwiJHtmdW5jdGlv
bk5hbWV9XCIpLCByZXR1cm5lZEV4Y2VwdGlvbikiOworICAgICAgICAgICAgICAgICRjYWxsYmFj
a0ludm9jYXRpb24gPSAibV9kYXRhLT5pbnZva2VDYWxsYmFjayh0aGlzVmFsdWUsIGFyZ3MsIEpT
Q2FsbGJhY2tEYXRhOjpDYWxsYmFja1R5cGU6OiR7Y2FsbGJhY2tUeXBlfSwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZyh2bSwgXCIke2Z1bmN0aW9uTmFtZX1cIiksIHJldHVybmVkRXhjZXB0aW9uKSI7
CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmICgkb3BlcmF0aW9uLT50eXBlLT5uYW1l
IGVxICJ2b2lkIikgewpAQCAtNzM1MSw3ICs3MzY3LDcgQEAgc3ViIEdlbmVyYXRlQ29uc3RydWN0
b3JIZWxwZXJNZXRob2RzCiAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBwdXREaXJl
Y3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgJHtjbGFzc05hbWV9Ojpwcm90b3R5
cGUodm0sIGdsb2JhbE9iamVjdCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUg
fCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1
dGU6OkRvbnRFbnVtKTtcbiIpOwogICAgIH0KIAotICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAg
ICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0cmlu
Zygmdm0sIFN0cmluZyhcIiR2aXNpYmxlSW50ZXJmYWNlTmFtZVwiX3MpKSwgSlNDOjpQcm9wZXJ0
eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7
XG4iKTsKKyAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9w
ZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcodm0sIFN0cmluZyhcIiR2aXNpYmxl
SW50ZXJmYWNlTmFtZVwiX3MpKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBK
U0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7XG4iKTsKICAgICBwdXNoKEAkb3V0cHV0
QXJyYXksICIgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVt
YmVyKCR7bGVhc3RDb25zdHJ1Y3Rvckxlbmd0aH0pLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpS
ZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTtcbiIpIGlmIGRlZmlu
ZWQgJGxlYXN0Q29uc3RydWN0b3JMZW5ndGg7CiAKICAgICBteSAkY2xhc3NGb3JUaGlzID0gIiR7
Y2xhc3NOYW1lfTo6aW5mbygpIjsKQEAgLTczNjgsNyArNzM4NCw3IEBAIHN1YiBHZW5lcmF0ZUNv
bnN0cnVjdG9ySGVscGVyTWV0aG9kcwogICAgICAgICBteSAkcnVudGltZUVuYWJsZUNvbmRpdGlv
bmFsU3RyaW5nID0gR2VuZXJhdGVSdW50aW1lRW5hYmxlQ29uZGl0aW9uYWxTdHJpbmcoJGludGVy
ZmFjZSwgJG9wZXJhdGlvbk9yQXR0cmlidXRlLCAidHJ1ZSIpOwogICAgICAgICBteSAkbmFtZSA9
ICRvcGVyYXRpb25PckF0dHJpYnV0ZS0+bmFtZTsKICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5
LCAiICAgIGlmICghJHtydW50aW1lRW5hYmxlQ29uZGl0aW9uYWxTdHJpbmd9KSB7XG4iKTsKLSAg
ICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElk
ZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4o
XCIkbmFtZVwiKSwgc3RybGVuKFwiJG5hbWVcIikpO1xuIik7CisgICAgICAgIHB1c2goQCRvdXRw
dXRBcnJheSwgIiAgICAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oXCIkbmFtZVwiKSwgc3RybGVu
KFwiJG5hbWVcIikpO1xuIik7CiAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAg
Vk06OkRlbGV0ZVByb3BlcnR5TW9kZVNjb3BlIHNjb3BlKHZtLCBWTTo6RGVsZXRlUHJvcGVydHlN
b2RlOjpJZ25vcmVDb25maWd1cmFibGUpO1xuIik7CiAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJh
eSwgIiAgICAgICAgSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KHRoaXMsIGdsb2JhbE9iamVjdC5n
bG9iYWxFeGVjKCksIHByb3BlcnR5TmFtZSk7XG4iKTsKICAgICAgICAgcHVzaChAJG91dHB1dEFy
cmF5LCAiICAgIH1cbiIpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTSW50ZXJmYWNlTmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTSW50ZXJmYWNlTmFtZS5jcHAJKHJldmlzaW9uIDI0
OTEyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU0ludGVy
ZmFjZU5hbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OCw3ICs3OCw3IEBAIHRlbXBsYXRlPD4g
SlNWYWx1ZSBKU0ludGVyZmFjZU5hbWVDb25zdHIKIHRlbXBsYXRlPD4gdm9pZCBKU0ludGVyZmFj
ZU5hbWVDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMoVk0mIHZtLCBKU0RPTUdsb2Jh
bE9iamVjdCYgZ2xvYmFsT2JqZWN0KQogewogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlO
YW1lcy0+cHJvdG90eXBlLCBKU0ludGVyZmFjZU5hbWU6OnByb3RvdHlwZSh2bSwgZ2xvYmFsT2Jq
ZWN0KSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IEpTQzo6UHJvcGVydHlB
dHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwot
ICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3Ry
aW5nKCZ2bSwgU3RyaW5nKCJJbnRlcmZhY2VOYW1lIl9zKSksIEpTQzo6UHJvcGVydHlBdHRyaWJ1
dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOworICAgIHB1
dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKHZt
LCBTdHJpbmcoIkludGVyZmFjZU5hbWUiX3MpKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVh
ZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CiAgICAgcHV0RGlyZWN0
KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDApLCBKU0M6OlByb3BlcnR5
QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsK
IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTTWFw
TGlrZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTTWFwTGlrZS5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU01hcExpa2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC05Nyw3ICs5Nyw3IEBAIHRlbXBsYXRlPD4gSlNWYWx1ZSBKU01hcExpa2VDb25zdHJ1Y3RvcjoK
IHRlbXBsYXRlPD4gdm9pZCBKU01hcExpa2VDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRp
ZXMoVk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQogewogICAgIHB1dERp
cmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU01hcExpa2U6OnByb3RvdHlw
ZSh2bSwgZ2xvYmFsT2JqZWN0KSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8
IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0
ZTo6RG9udEVudW0pOwotICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwg
anNOb250cml2aWFsU3RyaW5nKCZ2bSwgU3RyaW5nKCJNYXBMaWtlIl9zKSksIEpTQzo6UHJvcGVy
dHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0p
OworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFs
U3RyaW5nKHZtLCBTdHJpbmcoIk1hcExpa2UiX3MpKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6
UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CiAgICAgcHV0RGly
ZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDApLCBKU0M6OlByb3Bl
cnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVt
KTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
UmVhZE9ubHlNYXBMaWtlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNSZWFkT25seU1hcExpa2UuY3BwCShyZXZpc2lvbiAyNDkxMjgp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNSZWFkT25seU1h
cExpa2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NCw3ICs5NCw3IEBAIHRlbXBsYXRlPD4gSlNW
YWx1ZSBKU1JlYWRPbmx5TWFwTGlrZUNvbnMKIHRlbXBsYXRlPD4gdm9pZCBKU1JlYWRPbmx5TWFw
TGlrZUNvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGllcyhWTSYgdm0sIEpTRE9NR2xvYmFs
T2JqZWN0JiBnbG9iYWxPYmplY3QpCiB7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5h
bWVzLT5wcm90b3R5cGUsIEpTUmVhZE9ubHlNYXBMaWtlOjpwcm90b3R5cGUodm0sIGdsb2JhbE9i
amVjdCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUgfCBKU0M6OlByb3BlcnR5
QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsK
LSAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0
cmluZygmdm0sIFN0cmluZygiUmVhZE9ubHlNYXBMaWtlIl9zKSksIEpTQzo6UHJvcGVydHlBdHRy
aWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOworICAg
IHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5n
KHZtLCBTdHJpbmcoIlJlYWRPbmx5TWFwTGlrZSJfcykpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRl
OjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKICAgICBwdXRE
aXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMCksIEpTQzo6UHJv
cGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVu
dW0pOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0QWN0aXZlRE9NT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0QWN0aXZlRE9NT2JqZWN0LmNwcAkocmV2aXNp
b24gMjQ5MTI4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdEFjdGl2ZURPTU9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNSw3ICsxMDUsNyBA
QCB0ZW1wbGF0ZTw+IEpTVmFsdWUgSlNUZXN0QWN0aXZlRE9NT2JqZWN0CiB0ZW1wbGF0ZTw+IHZv
aWQgSlNUZXN0QWN0aXZlRE9NT2JqZWN0Q29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVz
KFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKIHsKICAgICBwdXREaXJl
Y3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgSlNUZXN0QWN0aXZlRE9NT2JqZWN0
Ojpwcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRv
bnREZWxldGUgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVy
dHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKLSAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFt
ZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZygmdm0sIFN0cmluZygiVGVzdEFjdGl2ZURPTU9i
amVjdCJfcykpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVy
dHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFt
ZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZyh2bSwgU3RyaW5nKCJUZXN0QWN0aXZlRE9NT2Jq
ZWN0Il9zKSksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0
eUF0dHJpYnV0ZTo6RG9udEVudW0pOwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1l
cy0+bGVuZ3RoLCBqc051bWJlcigwKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkg
fCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDRVJlYWN0aW9ucy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dENFUmVhY3Rpb25zLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENFUmVhY3Rpb25zLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTAzLDcgKzEwMyw3IEBAIHRlbXBsYXRlPD4gSlNWYWx1ZSBKU1Rlc3RDRVJlYWN0aW9u
c0NvbnMKIHRlbXBsYXRlPD4gdm9pZCBKU1Rlc3RDRVJlYWN0aW9uc0NvbnN0cnVjdG9yOjppbml0
aWFsaXplUHJvcGVydGllcyhWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3Qp
CiB7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVz
dENFUmVhY3Rpb25zOjpwcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCksIEpTQzo6UHJvcGVydHlB
dHRyaWJ1dGU6OkRvbnREZWxldGUgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8
IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKLSAgICBwdXREaXJlY3Qodm0sIHZt
LnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZygmdm0sIFN0cmluZygiVGVz
dENFUmVhY3Rpb25zIl9zKSksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlND
OjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJv
cGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKHZtLCBTdHJpbmcoIlRlc3RDRVJl
YWN0aW9ucyJfcykpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJv
cGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5
TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRP
bmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwogfQogCkBAIC0yMTYsNiAr
MjE2LDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0Q0VSZWFjdGlvbnNBdHRyaWJ1dAogCiBzdGF0
aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0Q0VSZWFjdGlvbnNBdHRyaWJ1dGVXaXRoQ0VSZWFjdGlv
bnNTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0Q0VSZWFjdGlvbnMmIHRoaXNPYmplY3Qs
IEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CisgICAgVU5VU0VEX1BB
UkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgQ3VzdG9tRWxl
bWVudFJlYWN0aW9uU3RhY2sgY3VzdG9tRWxlbWVudFJlYWN0aW9uU3RhY2soc3RhdGUpOwogICAg
IGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKQEAgLTI0OCw2ICsyNDksNyBAQCBF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RDRVJlYWN0aW9uc1JlZmxlY3RBCiAKIHN0YXRpYyBpbmxpbmUg
Ym9vbCBzZXRKU1Rlc3RDRVJlYWN0aW9uc1JlZmxlY3RBdHRyaWJ1dGVXaXRoQ0VSZWFjdGlvbnNT
ZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0Q0VSZWFjdGlvbnMmIHRoaXNPYmplY3QsIEpT
VmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CisgICAgVU5VU0VEX1BBUkFN
KHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgQ3VzdG9tRWxlbWVu
dFJlYWN0aW9uU3RhY2sgY3VzdG9tRWxlbWVudFJlYWN0aW9uU3RhY2soc3RhdGUpOwogICAgIGF1
dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKQEAgLTI4MCwxNyArMjgyLDE4IEBAIEVu
Y29kZWRKU1ZhbHVlIGpzVGVzdENFUmVhY3Rpb25zU3RyaW5naWYKIAogc3RhdGljIGlubGluZSBi
b29sIHNldEpTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXJBdHRyaWJ1dGVTZXR0ZXIoRXhlY1N0
YXRlJiBzdGF0ZSwgSlNUZXN0Q0VSZWFjdGlvbnMmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUs
IFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OwotICAgIGF1dG8gaWQgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZS52bSgpLCByZWlu
dGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oInN0cmluZ2lmaWVyQXR0cmlidXRlIiksIHN0cmxl
bigic3RyaW5naWZpZXJBdHRyaWJ1dGUiKSk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAg
ICBWTSYgdm0gPSB0aHJvd1Njb3BlLnZtKCk7CisgICAgYXV0byBpZCA9IElkZW50aWZpZXI6OmZy
b21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigic3RyaW5naWZpZXJB
dHRyaWJ1dGUiKSwgc3RybGVuKCJzdHJpbmdpZmllckF0dHJpYnV0ZSIpKTsKICAgICBhdXRvIHZh
bHVlVG9Gb3J3YXJkVG8gPSB0aGlzT2JqZWN0LmdldCgmc3RhdGUsIGlkKTsKICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKICAgICBpZiAoVU5MSUtFTFkoIXZhbHVl
VG9Gb3J3YXJkVG8uaXNPYmplY3QoKSkpIHsKICAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRl
LCB0aHJvd1Njb3BlKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICBhdXRvIGZv
cndhcmRJZCA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLnZtKCksIHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgTENoYXIqPigidmFsdWUiKSwgc3RybGVuKCJ2YWx1ZSIpKTsKKyAgICBhdXRv
IGZvcndhcmRJZCA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgTENoYXIqPigidmFsdWUiKSwgc3RybGVuKCJ2YWx1ZSIpKTsKICAgICBQdXRQcm9wZXJ0
eVNsb3Qgc2xvdCh2YWx1ZVRvRm9yd2FyZFRvLCBmYWxzZSk7Ci0gICAgYXNPYmplY3QodmFsdWVU
b0ZvcndhcmRUbyktPm1ldGhvZFRhYmxlKHN0YXRlLnZtKCkpLT5wdXQoYXNPYmplY3QodmFsdWVU
b0ZvcndhcmRUbyksICZzdGF0ZSwgZm9yd2FyZElkLCB2YWx1ZSwgc2xvdCk7CisgICAgYXNPYmpl
Y3QodmFsdWVUb0ZvcndhcmRUbyktPm1ldGhvZFRhYmxlKHZtKS0+cHV0KGFzT2JqZWN0KHZhbHVl
VG9Gb3J3YXJkVG8pLCAmc3RhdGUsIGZvcndhcmRJZCwgdmFsdWUsIHNsb3QpOwogICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwogICAgIHJldHVybiB0cnVlOwogfQpA
QCAtMzE2LDYgKzMxOSw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdENFUmVhY3Rpb25zQXR0cmli
dXQKIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdENFUmVhY3Rpb25zQXR0cmlidXRlV2l0
aENFUmVhY3Rpb25zTm90TmVlZGVkU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdENFUmVh
Y3Rpb25zJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KQogeworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOwogICAgIEN1c3RvbUVsZW1lbnRSZWFjdGlvbkRpc2FsbG93ZWRTY29wZSBjdXN0b21FbGVt
ZW50UmVhY3Rpb25EaXNhbGxvd2VkU2NvcGU7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qu
d3JhcHBlZCgpOwpAQCAtMzQ4LDYgKzM1Miw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdENFUmVh
Y3Rpb25zUmVmbGVjdEEKIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdENFUmVhY3Rpb25z
UmVmbGVjdEF0dHJpYnV0ZVdpdGhDRVJlYWN0aW9uc05vdE5lZWRlZFNldHRlcihFeGVjU3RhdGUm
IHN0YXRlLCBKU1Rlc3RDRVJlYWN0aW9ucyYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhy
b3dTY29wZSYgdGhyb3dTY29wZSkKIHsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBDdXN0b21FbGVtZW50UmVhY3Rpb25EaXNhbGxv
d2VkU2NvcGUgY3VzdG9tRWxlbWVudFJlYWN0aW9uRGlzYWxsb3dlZFNjb3BlOwogICAgIGF1dG8m
IGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKQEAgLTM4MCwxNyArMzg1LDE4IEBAIEVuY29k
ZWRKU1ZhbHVlIGpzVGVzdENFUmVhY3Rpb25zU3RyaW5naWYKIAogc3RhdGljIGlubGluZSBib29s
IHNldEpTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXJBdHRyaWJ1dGVOb3ROZWVkZWRTZXR0ZXIo
RXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0Q0VSZWFjdGlvbnMmIHRoaXNPYmplY3QsIEpTVmFsdWUg
dmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOwotICAgIGF1dG8gaWQgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZS52bSgp
LCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oInN0cmluZ2lmaWVyQXR0cmlidXRlTm90
TmVlZGVkIiksIHN0cmxlbigic3RyaW5naWZpZXJBdHRyaWJ1dGVOb3ROZWVkZWQiKSk7CisgICAg
VU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBWTSYgdm0gPSB0aHJvd1Njb3BlLnZtKCk7CisgICAg
YXV0byBpZCA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgTENoYXIqPigic3RyaW5naWZpZXJBdHRyaWJ1dGVOb3ROZWVkZWQiKSwgc3RybGVuKCJzdHJp
bmdpZmllckF0dHJpYnV0ZU5vdE5lZWRlZCIpKTsKICAgICBhdXRvIHZhbHVlVG9Gb3J3YXJkVG8g
PSB0aGlzT2JqZWN0LmdldCgmc3RhdGUsIGlkKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIGZhbHNlKTsKICAgICBpZiAoVU5MSUtFTFkoIXZhbHVlVG9Gb3J3YXJkVG8uaXNP
YmplY3QoKSkpIHsKICAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCB0aHJvd1Njb3BlKTsK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICBhdXRvIGZvcndhcmRJZCA9IElkZW50
aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLnZtKCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENo
YXIqPigidmFsdWVXaXRob3V0UmVhY3Rpb25zIiksIHN0cmxlbigidmFsdWVXaXRob3V0UmVhY3Rp
b25zIikpOworICAgIGF1dG8gZm9yd2FyZElkID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwg
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJ2YWx1ZVdpdGhvdXRSZWFjdGlvbnMiKSwg
c3RybGVuKCJ2YWx1ZVdpdGhvdXRSZWFjdGlvbnMiKSk7CiAgICAgUHV0UHJvcGVydHlTbG90IHNs
b3QodmFsdWVUb0ZvcndhcmRUbywgZmFsc2UpOwotICAgIGFzT2JqZWN0KHZhbHVlVG9Gb3J3YXJk
VG8pLT5tZXRob2RUYWJsZShzdGF0ZS52bSgpKS0+cHV0KGFzT2JqZWN0KHZhbHVlVG9Gb3J3YXJk
VG8pLCAmc3RhdGUsIGZvcndhcmRJZCwgdmFsdWUsIHNsb3QpOworICAgIGFzT2JqZWN0KHZhbHVl
VG9Gb3J3YXJkVG8pLT5tZXRob2RUYWJsZSh2bSktPnB1dChhc09iamVjdCh2YWx1ZVRvRm9yd2Fy
ZFRvKSwgJnN0YXRlLCBmb3J3YXJkSWQsIHZhbHVlLCBzbG90KTsKICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDRVJlYWN0aW9uc1N0
cmluZ2lmaWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllci5jcHAJKHJldmlzaW9uIDI0
OTEyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RD
RVJlYWN0aW9uc1N0cmluZ2lmaWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTAsNyArOTAsNyBA
QCB0ZW1wbGF0ZTw+IEpTVmFsdWUgSlNUZXN0Q0VSZWFjdGlvbnNTdHJpCiB0ZW1wbGF0ZTw+IHZv
aWQgSlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllckNvbnN0cnVjdG9yOjppbml0aWFsaXplUHJv
cGVydGllcyhWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCiB7CiAgICAg
cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdENFUmVhY3Rp
b25zU3RyaW5naWZpZXI6OnByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KSwgSlNDOjpQcm9wZXJ0
eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5
IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwotICAgIHB1dERpcmVjdCh2bSwg
dm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKCZ2bSwgU3RyaW5nKCJU
ZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllciJfcykpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpS
ZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKKyAgICBwdXREaXJl
Y3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZyh2bSwgU3Ry
aW5nKCJUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllciJfcykpLCBKU0M6OlByb3BlcnR5QXR0cmli
dXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKICAgICBw
dXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMCksIEpTQzo6
UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9u
dEVudW0pOwogfQogCkBAIC0xOTgsNiArMTk4LDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0Q0VS
ZWFjdGlvbnNTdHJpbmdpZgogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0Q0VSZWFjdGlv
bnNTdHJpbmdpZmllclZhbHVlU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdENFUmVhY3Rp
b25zU3RyaW5naWZpZXImIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRo
cm93U2NvcGUpCiB7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7CiAgICAgQ3VzdG9tRWxlbWVudFJlYWN0aW9uU3RhY2sgY3VzdG9tRWxlbWVu
dFJlYWN0aW9uU3RhY2soc3RhdGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBw
ZWQoKTsKQEAgLTIzMCw2ICsyMzEsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RDRVJlYWN0aW9u
c1N0cmluZ2lmCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RDRVJlYWN0aW9uc1N0cmlu
Z2lmaWVyVmFsdWVXaXRob3V0UmVhY3Rpb25zU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVz
dENFUmVhY3Rpb25zU3RyaW5naWZpZXImIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93
U2NvcGUmIHRocm93U2NvcGUpCiB7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgQ3VzdG9tRWxlbWVudFJlYWN0aW9uRGlzYWxsb3dl
ZFNjb3BlIGN1c3RvbUVsZW1lbnRSZWFjdGlvbkRpc2FsbG93ZWRTY29wZTsKICAgICBhdXRvJiBp
bXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2FsbFRyYWNlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENhbGxUcmFjZXIuY3Bw
CShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0Q2FsbFRyYWNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNyw3ICsxMTcs
NyBAQCB0ZW1wbGF0ZTw+IEpTVmFsdWUgSlNUZXN0Q2FsbFRyYWNlckNvbnN0CiB0ZW1wbGF0ZTw+
IHZvaWQgSlNUZXN0Q2FsbFRyYWNlckNvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGllcyhW
TSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCiB7CiAgICAgcHV0RGlyZWN0
KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdENhbGxUcmFjZXI6OnByb3Rv
dHlwZSh2bSwgZ2xvYmFsT2JqZWN0KSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0
ZSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJp
YnV0ZTo6RG9udEVudW0pOwotICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFt
ZSwganNOb250cml2aWFsU3RyaW5nKCZ2bSwgU3RyaW5nKCJUZXN0Q2FsbFRyYWNlciJfcykpLCBK
U0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6
OkRvbnRFbnVtKTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpz
Tm9udHJpdmlhbFN0cmluZyh2bSwgU3RyaW5nKCJUZXN0Q2FsbFRyYWNlciJfcykpLCBKU0M6OlBy
b3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRF
bnVtKTsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1i
ZXIoMCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0
dHJpYnV0ZTo6RG9udEVudW0pOwogICAgIHJlaWZ5U3RhdGljUHJvcGVydGllcyh2bSwgSlNUZXN0
Q2FsbFRyYWNlcjo6aW5mbygpLCBKU1Rlc3RDYWxsVHJhY2VyQ29uc3RydWN0b3JUYWJsZVZhbHVl
cywgKnRoaXMpOwogfQpAQCAtMjM4LDYgKzIzOCw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdENh
bGxUcmFjZXJUZXN0QXR0cmkKIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdENhbGxUcmFj
ZXJUZXN0QXR0cmlidXRlSW50ZXJmYWNlU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdENh
bGxUcmFjZXImIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2Nv
cGUpCiB7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8g
bmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETEJvb2xlYW4+KHN0YXRlLCB2YWx1ZSk7CkBAIC0yNzMs
NiArMjc0LDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0Q2FsbFRyYWNlclRlc3RBdHRyaQogCiBz
dGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0Q2FsbFRyYWNlclRlc3RBdHRyaWJ1dGVTcGVjaWZp
ZWRTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0Q2FsbFRyYWNlciYgdGhpc09iamVjdCwg
SlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKKyAgICBVTlVTRURfUEFS
QU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBs
ID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8
SURMQm9vbGVhbj4oc3RhdGUsIHZhbHVlKTsKQEAgLTMwOCw2ICszMTAsNyBAQCBFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RDYWxsVHJhY2VyVGVzdEF0dHJpCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRK
U1Rlc3RDYWxsVHJhY2VyVGVzdEF0dHJpYnV0ZVdpdGhWYXJpYW50U2V0dGVyKEV4ZWNTdGF0ZSYg
c3RhdGUsIEpTVGVzdENhbGxUcmFjZXImIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93
U2NvcGUmIHRocm93U2NvcGUpCiB7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBl
ZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETFVuaW9uPElETEJvb2xlYW4s
IElETEZsb2F0LCBJRExET01TdHJpbmc+PihzdGF0ZSwgdmFsdWUpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENhbGxiYWNrSW50ZXJmYWNlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0Q2FsbGJhY2tJbnRlcmZhY2UuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2FsbGJhY2tJbnRlcmZhY2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NCw3ICs5NCw3IEBAIHRlbXBsYXRlPD4gVGVzdENhbGxi
YWNrSW50ZXJmYWNlOjpEaWN0aW8KICAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQpCiAgICAgICAg
IG9wdGlvbmFsTWVtYmVyVmFsdWUgPSBqc1VuZGVmaW5lZCgpOwogICAgIGVsc2UgewotICAgICAg
ICBvcHRpb25hbE1lbWJlclZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKCZzdGF0ZSwgIm9wdGlvbmFsTWVtYmVyIikpOworICAgICAgICBvcHRpb25hbE1l
bWJlclZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZt
LCAib3B0aW9uYWxNZW1iZXIiKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dT
Y29wZSwgeyB9KTsKICAgICB9CiAgICAgaWYgKCFvcHRpb25hbE1lbWJlclZhbHVlLmlzVW5kZWZp
bmVkKCkpIHsKQEAgLTEwNSw3ICsxMDUsNyBAQCB0ZW1wbGF0ZTw+IFRlc3RDYWxsYmFja0ludGVy
ZmFjZTo6RGljdGlvCiAgICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKQogICAgICAgICByZXF1aXJl
ZE1lbWJlclZhbHVlID0ganNVbmRlZmluZWQoKTsKICAgICBlbHNlIHsKLSAgICAgICAgcmVxdWly
ZWRNZW1iZXJWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zygmc3RhdGUsICJyZXF1aXJlZE1lbWJlciIpKTsKKyAgICAgICAgcmVxdWlyZWRNZW1iZXJWYWx1
ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInJlcXVp
cmVkTWVtYmVyIikpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsg
fSk7CiAgICAgfQogICAgIGlmICghcmVxdWlyZWRNZW1iZXJWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7
CkBAIC0xNjAsNyArMTYwLDcgQEAgdGVtcGxhdGU8PiBKU1ZhbHVlIEpTVGVzdENhbGxiYWNrSW50
ZXJmYQogdGVtcGxhdGU8PiB2b2lkIEpTVGVzdENhbGxiYWNrSW50ZXJmYWNlQ29uc3RydWN0b3I6
OmluaXRpYWxpemVQcm9wZXJ0aWVzKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9i
amVjdCkKIHsKICAgICBVTlVTRURfUEFSQU0oZ2xvYmFsT2JqZWN0KTsKLSAgICBwdXREaXJlY3Qo
dm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZygmdm0sIFN0cmlu
ZygiVGVzdENhbGxiYWNrSW50ZXJmYWNlIl9zKSksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJl
YWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOworICAgIHB1dERpcmVj
dCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKHZtLCBTdHJp
bmcoIlRlc3RDYWxsYmFja0ludGVyZmFjZSJfcykpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpS
ZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKICAgICBwdXREaXJl
Y3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMCksIEpTQzo6UHJvcGVy
dHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0p
OwogICAgIHJlaWZ5U3RhdGljUHJvcGVydGllcyh2bSwgbnVsbHB0ciwgSlNUZXN0Q2FsbGJhY2tJ
bnRlcmZhY2VDb25zdHJ1Y3RvclRhYmxlVmFsdWVzLCAqdGhpcyk7CiB9CkBAIC0xODksNyArMTg5
LDcgQEAgQ2FsbGJhY2tSZXN1bHQ8dHlwZW5hbWUgSURMVm9pZDo6SW1wbGVtZQogICAgIEFTU0VS
VCghYXJncy5oYXNPdmVyZmxvd2VkKCkpOwogCiAgICAgTmFrZWRQdHI8SlNDOjpFeGNlcHRpb24+
IHJldHVybmVkRXhjZXB0aW9uOwotICAgIG1fZGF0YS0+aW52b2tlQ2FsbGJhY2sodGhpc1ZhbHVl
LCBhcmdzLCBKU0NhbGxiYWNrRGF0YTo6Q2FsbGJhY2tUeXBlOjpPYmplY3QsIElkZW50aWZpZXI6
OmZyb21TdHJpbmcoJnZtLCAiY2FsbGJhY2tXaXRoTm9QYXJhbSIpLCByZXR1cm5lZEV4Y2VwdGlv
bik7CisgICAgbV9kYXRhLT5pbnZva2VDYWxsYmFjayh0aGlzVmFsdWUsIGFyZ3MsIEpTQ2FsbGJh
Y2tEYXRhOjpDYWxsYmFja1R5cGU6Ok9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwg
ImNhbGxiYWNrV2l0aE5vUGFyYW0iKSwgcmV0dXJuZWRFeGNlcHRpb24pOwogICAgIGlmIChyZXR1
cm5lZEV4Y2VwdGlvbikgewogICAgICAgICByZXBvcnRFeGNlcHRpb24oJnN0YXRlLCByZXR1cm5l
ZEV4Y2VwdGlvbik7CiAgICAgICAgIHJldHVybiBDYWxsYmFja1Jlc3VsdFR5cGU6OkV4Y2VwdGlv
blRocm93bjsKQEAgLTIxNiw3ICsyMTYsNyBAQCBDYWxsYmFja1Jlc3VsdDx0eXBlbmFtZSBJRExW
b2lkOjpJbXBsZW1lCiAgICAgQVNTRVJUKCFhcmdzLmhhc092ZXJmbG93ZWQoKSk7CiAKICAgICBO
YWtlZFB0cjxKU0M6OkV4Y2VwdGlvbj4gcmV0dXJuZWRFeGNlcHRpb247Ci0gICAgbV9kYXRhLT5p
bnZva2VDYWxsYmFjayh0aGlzVmFsdWUsIGFyZ3MsIEpTQ2FsbGJhY2tEYXRhOjpDYWxsYmFja1R5
cGU6Ok9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJjYWxsYmFja1dpdGhBcnJh
eVBhcmFtIiksIHJldHVybmVkRXhjZXB0aW9uKTsKKyAgICBtX2RhdGEtPmludm9rZUNhbGxiYWNr
KHRoaXNWYWx1ZSwgYXJncywgSlNDYWxsYmFja0RhdGE6OkNhbGxiYWNrVHlwZTo6T2JqZWN0LCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiY2FsbGJhY2tXaXRoQXJyYXlQYXJhbSIpLCByZXR1
cm5lZEV4Y2VwdGlvbik7CiAgICAgaWYgKHJldHVybmVkRXhjZXB0aW9uKSB7CiAgICAgICAgIHJl
cG9ydEV4Y2VwdGlvbigmc3RhdGUsIHJldHVybmVkRXhjZXB0aW9uKTsKICAgICAgICAgcmV0dXJu
IENhbGxiYWNrUmVzdWx0VHlwZTo6RXhjZXB0aW9uVGhyb3duOwpAQCAtMjQ0LDcgKzI0NCw3IEBA
IENhbGxiYWNrUmVzdWx0PHR5cGVuYW1lIElETFZvaWQ6OkltcGxlbWUKICAgICBBU1NFUlQoIWFy
Z3MuaGFzT3ZlcmZsb3dlZCgpKTsKIAogICAgIE5ha2VkUHRyPEpTQzo6RXhjZXB0aW9uPiByZXR1
cm5lZEV4Y2VwdGlvbjsKLSAgICBtX2RhdGEtPmludm9rZUNhbGxiYWNrKHRoaXNWYWx1ZSwgYXJn
cywgSlNDYWxsYmFja0RhdGE6OkNhbGxiYWNrVHlwZTo6T2JqZWN0LCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKCZ2bSwgImNhbGxiYWNrV2l0aFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZVBhcmFtIiksIHJl
dHVybmVkRXhjZXB0aW9uKTsKKyAgICBtX2RhdGEtPmludm9rZUNhbGxiYWNrKHRoaXNWYWx1ZSwg
YXJncywgSlNDYWxsYmFja0RhdGE6OkNhbGxiYWNrVHlwZTo6T2JqZWN0LCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCAiY2FsbGJhY2tXaXRoU2VyaWFsaXplZFNjcmlwdFZhbHVlUGFyYW0iKSwg
cmV0dXJuZWRFeGNlcHRpb24pOwogICAgIGlmIChyZXR1cm5lZEV4Y2VwdGlvbikgewogICAgICAg
ICByZXBvcnRFeGNlcHRpb24oJnN0YXRlLCByZXR1cm5lZEV4Y2VwdGlvbik7CiAgICAgICAgIHJl
dHVybiBDYWxsYmFja1Jlc3VsdFR5cGU6OkV4Y2VwdGlvblRocm93bjsKQEAgLTI3MSw3ICsyNzEs
NyBAQCBDYWxsYmFja1Jlc3VsdDx0eXBlbmFtZSBJRExWb2lkOjpJbXBsZW1lCiAgICAgQVNTRVJU
KCFhcmdzLmhhc092ZXJmbG93ZWQoKSk7CiAKICAgICBOYWtlZFB0cjxKU0M6OkV4Y2VwdGlvbj4g
cmV0dXJuZWRFeGNlcHRpb247Ci0gICAgbV9kYXRhLT5pbnZva2VDYWxsYmFjayh0aGlzVmFsdWUs
IGFyZ3MsIEpTQ2FsbGJhY2tEYXRhOjpDYWxsYmFja1R5cGU6Ok9iamVjdCwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZygmdm0sICJjYWxsYmFja1dpdGhTdHJpbmdMaXN0IiksIHJldHVybmVkRXhjZXB0
aW9uKTsKKyAgICBtX2RhdGEtPmludm9rZUNhbGxiYWNrKHRoaXNWYWx1ZSwgYXJncywgSlNDYWxs
YmFja0RhdGE6OkNhbGxiYWNrVHlwZTo6T2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZt
LCAiY2FsbGJhY2tXaXRoU3RyaW5nTGlzdCIpLCByZXR1cm5lZEV4Y2VwdGlvbik7CiAgICAgaWYg
KHJldHVybmVkRXhjZXB0aW9uKSB7CiAgICAgICAgIHJlcG9ydEV4Y2VwdGlvbigmc3RhdGUsIHJl
dHVybmVkRXhjZXB0aW9uKTsKICAgICAgICAgcmV0dXJuIENhbGxiYWNrUmVzdWx0VHlwZTo6RXhj
ZXB0aW9uVGhyb3duOwpAQCAtMjk4LDcgKzI5OCw3IEBAIENhbGxiYWNrUmVzdWx0PHR5cGVuYW1l
IElETFZvaWQ6OkltcGxlbWUKICAgICBBU1NFUlQoIWFyZ3MuaGFzT3ZlcmZsb3dlZCgpKTsKIAog
ICAgIE5ha2VkUHRyPEpTQzo6RXhjZXB0aW9uPiByZXR1cm5lZEV4Y2VwdGlvbjsKLSAgICBtX2Rh
dGEtPmludm9rZUNhbGxiYWNrKHRoaXNWYWx1ZSwgYXJncywgSlNDYWxsYmFja0RhdGE6OkNhbGxi
YWNrVHlwZTo6T2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImNhbGxiYWNrV2l0
aEJvb2xlYW4iKSwgcmV0dXJuZWRFeGNlcHRpb24pOworICAgIG1fZGF0YS0+aW52b2tlQ2FsbGJh
Y2sodGhpc1ZhbHVlLCBhcmdzLCBKU0NhbGxiYWNrRGF0YTo6Q2FsbGJhY2tUeXBlOjpPYmplY3Qs
IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJjYWxsYmFja1dpdGhCb29sZWFuIiksIHJldHVy
bmVkRXhjZXB0aW9uKTsKICAgICBpZiAocmV0dXJuZWRFeGNlcHRpb24pIHsKICAgICAgICAgcmVw
b3J0RXhjZXB0aW9uKCZzdGF0ZSwgcmV0dXJuZWRFeGNlcHRpb24pOwogICAgICAgICByZXR1cm4g
Q2FsbGJhY2tSZXN1bHRUeXBlOjpFeGNlcHRpb25UaHJvd247CkBAIC0zMjYsNyArMzI2LDcgQEAg
Q2FsbGJhY2tSZXN1bHQ8dHlwZW5hbWUgSURMVm9pZDo6SW1wbGVtZQogICAgIEFTU0VSVCghYXJn
cy5oYXNPdmVyZmxvd2VkKCkpOwogCiAgICAgTmFrZWRQdHI8SlNDOjpFeGNlcHRpb24+IHJldHVy
bmVkRXhjZXB0aW9uOwotICAgIG1fZGF0YS0+aW52b2tlQ2FsbGJhY2sodGhpc1ZhbHVlLCBhcmdz
LCBKU0NhbGxiYWNrRGF0YTo6Q2FsbGJhY2tUeXBlOjpPYmplY3QsIElkZW50aWZpZXI6OmZyb21T
dHJpbmcoJnZtLCAiY2FsbGJhY2tSZXF1aXJlc1RoaXNUb1Bhc3MiKSwgcmV0dXJuZWRFeGNlcHRp
b24pOworICAgIG1fZGF0YS0+aW52b2tlQ2FsbGJhY2sodGhpc1ZhbHVlLCBhcmdzLCBKU0NhbGxi
YWNrRGF0YTo6Q2FsbGJhY2tUeXBlOjpPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0s
ICJjYWxsYmFja1JlcXVpcmVzVGhpc1RvUGFzcyIpLCByZXR1cm5lZEV4Y2VwdGlvbik7CiAgICAg
aWYgKHJldHVybmVkRXhjZXB0aW9uKSB7CiAgICAgICAgIHJlcG9ydEV4Y2VwdGlvbigmc3RhdGUs
IHJldHVybmVkRXhjZXB0aW9uKTsKICAgICAgICAgcmV0dXJuIENhbGxiYWNrUmVzdWx0VHlwZTo6
RXhjZXB0aW9uVGhyb3duOwpAQCAtMzUyLDcgKzM1Miw3IEBAIENhbGxiYWNrUmVzdWx0PHR5cGVu
YW1lIElETERPTVN0cmluZzo6SW0KICAgICBBU1NFUlQoIWFyZ3MuaGFzT3ZlcmZsb3dlZCgpKTsK
IAogICAgIE5ha2VkUHRyPEpTQzo6RXhjZXB0aW9uPiByZXR1cm5lZEV4Y2VwdGlvbjsKLSAgICBh
dXRvIGpzUmVzdWx0ID0gbV9kYXRhLT5pbnZva2VDYWxsYmFjayh0aGlzVmFsdWUsIGFyZ3MsIEpT
Q2FsbGJhY2tEYXRhOjpDYWxsYmFja1R5cGU6Ok9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zygmdm0sICJjYWxsYmFja1dpdGhBUmV0dXJuVmFsdWUiKSwgcmV0dXJuZWRFeGNlcHRpb24pOwor
ICAgIGF1dG8ganNSZXN1bHQgPSBtX2RhdGEtPmludm9rZUNhbGxiYWNrKHRoaXNWYWx1ZSwgYXJn
cywgSlNDYWxsYmFja0RhdGE6OkNhbGxiYWNrVHlwZTo6T2JqZWN0LCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKHZtLCAiY2FsbGJhY2tXaXRoQVJldHVyblZhbHVlIiksIHJldHVybmVkRXhjZXB0aW9u
KTsKICAgICBpZiAocmV0dXJuZWRFeGNlcHRpb24pIHsKICAgICAgICAgcmVwb3J0RXhjZXB0aW9u
KCZzdGF0ZSwgcmV0dXJuZWRFeGNlcHRpb24pOwogICAgICAgICByZXR1cm4gQ2FsbGJhY2tSZXN1
bHRUeXBlOjpFeGNlcHRpb25UaHJvd247CkBAIC0zODIsNyArMzgyLDcgQEAgQ2FsbGJhY2tSZXN1
bHQ8dHlwZW5hbWUgSURMRE9NU3RyaW5nOjpJbQogICAgIEFTU0VSVCghYXJncy5oYXNPdmVyZmxv
d2VkKCkpOwogCiAgICAgTmFrZWRQdHI8SlNDOjpFeGNlcHRpb24+IHJldHVybmVkRXhjZXB0aW9u
OwotICAgIGF1dG8ganNSZXN1bHQgPSBtX2RhdGEtPmludm9rZUNhbGxiYWNrKHRoaXNWYWx1ZSwg
YXJncywgSlNDYWxsYmFja0RhdGE6OkNhbGxiYWNrVHlwZTo6T2JqZWN0LCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKCZ2bSwgImNhbGxiYWNrVGhhdFJldGhyb3dzRXhjZXB0aW9ucyIpLCByZXR1cm5l
ZEV4Y2VwdGlvbik7CisgICAgYXV0byBqc1Jlc3VsdCA9IG1fZGF0YS0+aW52b2tlQ2FsbGJhY2so
dGhpc1ZhbHVlLCBhcmdzLCBKU0NhbGxiYWNrRGF0YTo6Q2FsbGJhY2tUeXBlOjpPYmplY3QsIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJjYWxsYmFja1RoYXRSZXRocm93c0V4Y2VwdGlvbnMi
KSwgcmV0dXJuZWRFeGNlcHRpb24pOwogICAgIGlmIChyZXR1cm5lZEV4Y2VwdGlvbikgewogICAg
ICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICAgICAg
dGhyb3dFeGNlcHRpb24oJnN0YXRlLCB0aHJvd1Njb3BlLCByZXR1cm5lZEV4Y2VwdGlvbik7CkBA
IC00MTAsNyArNDEwLDcgQEAgQ2FsbGJhY2tSZXN1bHQ8dHlwZW5hbWUgSURMRE9NU3RyaW5nOjpJ
bQogICAgIEFTU0VSVCghYXJncy5oYXNPdmVyZmxvd2VkKCkpOwogCiAgICAgTmFrZWRQdHI8SlND
OjpFeGNlcHRpb24+IHJldHVybmVkRXhjZXB0aW9uOwotICAgIGF1dG8ganNSZXN1bHQgPSBtX2Rh
dGEtPmludm9rZUNhbGxiYWNrKHRoaXNWYWx1ZSwgYXJncywgSlNDYWxsYmFja0RhdGE6OkNhbGxi
YWNrVHlwZTo6T2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImNhbGxiYWNrVGhh
dFNraXBzSW52b2tlQ2hlY2siKSwgcmV0dXJuZWRFeGNlcHRpb24pOworICAgIGF1dG8ganNSZXN1
bHQgPSBtX2RhdGEtPmludm9rZUNhbGxiYWNrKHRoaXNWYWx1ZSwgYXJncywgSlNDYWxsYmFja0Rh
dGE6OkNhbGxiYWNrVHlwZTo6T2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiY2Fs
bGJhY2tUaGF0U2tpcHNJbnZva2VDaGVjayIpLCByZXR1cm5lZEV4Y2VwdGlvbik7CiAgICAgaWYg
KHJldHVybmVkRXhjZXB0aW9uKSB7CiAgICAgICAgIHJlcG9ydEV4Y2VwdGlvbigmc3RhdGUsIHJl
dHVybmVkRXhjZXB0aW9uKTsKICAgICAgICAgcmV0dXJuIENhbGxiYWNrUmVzdWx0VHlwZTo6RXhj
ZXB0aW9uVGhyb3duOwpAQCAtNDQwLDcgKzQ0MCw3IEBAIENhbGxiYWNrUmVzdWx0PHR5cGVuYW1l
IElETERPTVN0cmluZzo6SW0KICAgICBBU1NFUlQoIWFyZ3MuaGFzT3ZlcmZsb3dlZCgpKTsKIAog
ICAgIE5ha2VkUHRyPEpTQzo6RXhjZXB0aW9uPiByZXR1cm5lZEV4Y2VwdGlvbjsKLSAgICBhdXRv
IGpzUmVzdWx0ID0gbV9kYXRhLT5pbnZva2VDYWxsYmFjayh0aGlzVmFsdWUsIGFyZ3MsIEpTQ2Fs
bGJhY2tEYXRhOjpDYWxsYmFja1R5cGU6Ok9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygm
dm0sICJjYWxsYmFja1dpdGhUaGlzT2JqZWN0IiksIHJldHVybmVkRXhjZXB0aW9uKTsKKyAgICBh
dXRvIGpzUmVzdWx0ID0gbV9kYXRhLT5pbnZva2VDYWxsYmFjayh0aGlzVmFsdWUsIGFyZ3MsIEpT
Q2FsbGJhY2tEYXRhOjpDYWxsYmFja1R5cGU6Ok9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zyh2bSwgImNhbGxiYWNrV2l0aFRoaXNPYmplY3QiKSwgcmV0dXJuZWRFeGNlcHRpb24pOwogICAg
IGlmIChyZXR1cm5lZEV4Y2VwdGlvbikgewogICAgICAgICByZXBvcnRFeGNlcHRpb24oJnN0YXRl
LCByZXR1cm5lZEV4Y2VwdGlvbik7CiAgICAgICAgIHJldHVybiBDYWxsYmFja1Jlc3VsdFR5cGU6
OkV4Y2VwdGlvblRocm93bjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENsYXNz
V2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENsYXNzV2l0aEpTQnVpbHRp
bkNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzksNyArNzksNyBAQCB0ZW1wbGF0
ZTw+IEpTVmFsdWUgSlNUZXN0Q2xhc3NXaXRoSlNCdWlsCiB0ZW1wbGF0ZTw+IHZvaWQgSlNUZXN0
Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3Bl
cnRpZXMoVk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQogewogICAgIHB1
dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3RDbGFzc1dpdGhK
U0J1aWx0aW5Db25zdHJ1Y3Rvcjo6cHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QpLCBKU0M6OlBy
b3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVh
ZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7Ci0gICAgcHV0RGlyZWN0
KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcoJnZtLCBTdHJp
bmcoIlRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvciJfcykpLCBKU0M6OlByb3BlcnR5
QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsK
KyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0
cmluZyh2bSwgU3RyaW5nKCJUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IiX3MpKSwg
SlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRl
OjpEb250RW51bSk7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgs
IGpzTnVtYmVyKDApLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJv
cGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERPTUpJVC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERPTUpJVC5jcHAJKHJl
dmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RET01KSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MDAsNyArNTAwLDcgQEAgdGVt
cGxhdGU8PiBKU1ZhbHVlIEpTVGVzdERPTUpJVENvbnN0cnVjdAogdGVtcGxhdGU8PiB2b2lkIEpT
VGVzdERPTUpJVENvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGllcyhWTSYgdm0sIEpTRE9N
R2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCiB7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9w
ZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdERPTUpJVDo6cHJvdG90eXBlKHZtLCBnbG9iYWxP
YmplY3QpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgSlNDOjpQcm9wZXJ0
eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7
Ci0gICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxT
dHJpbmcoJnZtLCBTdHJpbmcoIlRlc3RET01KSVQiX3MpKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0
ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CisgICAgcHV0
RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcodm0s
IFN0cmluZygiVGVzdERPTUpJVCJfcykpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25s
eSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKICAgICBwdXREaXJlY3Qodm0s
IHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMCksIEpTQzo6UHJvcGVydHlBdHRy
aWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwogfQog
CkBAIC0xMTM0LDcgKzExMzQsNyBAQCBKU0M6OkVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04g
anNUZXN0CiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBWTSYgdm0gPSBzdGF0ZS0+
dm0oKTsKLSAgICBKU0M6Ok5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBzdGF0ZSk7
CisgICAgSlNDOjpOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBzdGF0ZSk7CiAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7
CkBAIC0xMTY2LDcgKzExNjYsNyBAQCBKU0M6OkVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04g
anNUZXN0CiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBWTSYgdm0gPSBzdGF0ZS0+
dm0oKTsKLSAgICBKU0M6Ok5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBzdGF0ZSk7
CisgICAgSlNDOjpOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBzdGF0ZSk7CiAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7
CkBAIC0xMTk0LDcgKzExOTQsNyBAQCBKU0M6OkVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04g
anNUZXN0CiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBWTSYgdm0gPSBzdGF0ZS0+
dm0oKTsKLSAgICBKU0M6Ok5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBzdGF0ZSk7
CisgICAgSlNDOjpOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBzdGF0ZSk7CiAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7
CkBAIC0xMjIyLDcgKzEyMjIsNyBAQCBKU0M6OkVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04g
anNUZXN0CiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBWTSYgdm0gPSBzdGF0ZS0+
dm0oKTsKLSAgICBKU0M6Ok5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBzdGF0ZSk7
CisgICAgSlNDOjpOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBzdGF0ZSk7CiAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7
CkBAIC0xMjUyLDcgKzEyNTIsNyBAQCBKU0M6OkVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04g
anNUZXN0CiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBWTSYgdm0gPSBzdGF0ZS0+
dm0oKTsKLSAgICBKU0M6Ok5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBzdGF0ZSk7
CisgICAgSlNDOjpOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBzdGF0ZSk7CiAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RW5h
YmxlZEJ5U2V0dGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdEVuYWJsZWRCeVNldHRpbmcuY3BwCShyZXZpc2lvbiAyNDkx
MjgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RW5h
YmxlZEJ5U2V0dGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMCw3ICsxMDAsNyBAQCB0ZW1w
bGF0ZTw+IEpTVmFsdWUgSlNUZXN0RW5hYmxlZEJ5U2V0dGluCiB0ZW1wbGF0ZTw+IHZvaWQgSlNU
ZXN0RW5hYmxlZEJ5U2V0dGluZ0NvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGllcyhWTSYg
dm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCiB7CiAgICAgcHV0RGlyZWN0KHZt
LCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdEVuYWJsZWRCeVNldHRpbmc6OnBy
b3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERl
bGV0ZSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0
dHJpYnV0ZTo6RG9udEVudW0pOwotICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+
bmFtZSwganNOb250cml2aWFsU3RyaW5nKCZ2bSwgU3RyaW5nKCJUZXN0RW5hYmxlZEJ5U2V0dGlu
ZyJfcykpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlB
dHRyaWJ1dGU6OkRvbnRFbnVtKTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMt
Pm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZyh2bSwgU3RyaW5nKCJUZXN0RW5hYmxlZEJ5U2V0dGlu
ZyJfcykpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlB
dHRyaWJ1dGU6OkRvbnRFbnVtKTsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMt
Pmxlbmd0aCwganNOdW1iZXIoMCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwg
SlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwogfQogCkBAIC0xMzMsNyArMTMzLDcg
QEAgdm9pZCBKU1Rlc3RFbmFibGVkQnlTZXR0aW5nUHJvdG90eXBlOjpmaQogI2lmIEVOQUJMRShU
RVNUX0ZFQVRVUkUpCiAgICAgaWYgKCFkb3duY2FzdDxEb2N1bWVudD4oanNDYXN0PEpTRE9NR2xv
YmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpLT5z
ZXR0aW5ncygpLnRlc3RTZXR0aW5nRW5hYmxlZCgpKSB7CiAgICAgICAgIGhhc0Rpc2FibGVkUnVu
dGltZVByb3BlcnRpZXMgPSB0cnVlOwotICAgICAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50
aWZpZXI6OmZyb21TdHJpbmcoJnZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oImVu
YWJsZWRCeVNldHRpbmdPcGVyYXRpb24iKSwgc3RybGVuKCJlbmFibGVkQnlTZXR0aW5nT3BlcmF0
aW9uIikpOworICAgICAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb21TdHJp
bmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiZW5hYmxlZEJ5U2V0dGluZ09w
ZXJhdGlvbiIpLCBzdHJsZW4oImVuYWJsZWRCeVNldHRpbmdPcGVyYXRpb24iKSk7CiAgICAgICAg
IFZNOjpEZWxldGVQcm9wZXJ0eU1vZGVTY29wZSBzY29wZSh2bSwgVk06OkRlbGV0ZVByb3BlcnR5
TW9kZTo6SWdub3JlQ29uZmlndXJhYmxlKTsKICAgICAgICAgSlNPYmplY3Q6OmRlbGV0ZVByb3Bl
cnR5KHRoaXMsIGdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCksIHByb3BlcnR5TmFtZSk7CiAg
ICAgfQpAQCAtMTQxLDcgKzE0MSw3IEBAIHZvaWQgSlNUZXN0RW5hYmxlZEJ5U2V0dGluZ1Byb3Rv
dHlwZTo6ZmkKICNpZiBFTkFCTEUoVEVTVF9GRUFUVVJFKQogICAgIGlmICghZG93bmNhc3Q8RG9j
dW1lbnQ+KGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCgpKS0+c2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpKS0+c2V0dGluZ3MoKS50ZXN0U2V0dGluZ0VuYWJsZWQoKSkgewog
ICAgICAgICBoYXNEaXNhYmxlZFJ1bnRpbWVQcm9wZXJ0aWVzID0gdHJ1ZTsKLSAgICAgICAgYXV0
byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBMQ2hhcio+KCJlbmFibGVkQnlTZXR0aW5nQXR0cmlidXRlIiksIHN0cmxlbigi
ZW5hYmxlZEJ5U2V0dGluZ0F0dHJpYnV0ZSIpKTsKKyAgICAgICAgYXV0byBwcm9wZXJ0eU5hbWUg
PSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFy
Kj4oImVuYWJsZWRCeVNldHRpbmdBdHRyaWJ1dGUiKSwgc3RybGVuKCJlbmFibGVkQnlTZXR0aW5n
QXR0cmlidXRlIikpOwogICAgICAgICBWTTo6RGVsZXRlUHJvcGVydHlNb2RlU2NvcGUgc2NvcGUo
dm0sIFZNOjpEZWxldGVQcm9wZXJ0eU1vZGU6Oklnbm9yZUNvbmZpZ3VyYWJsZSk7CiAgICAgICAg
IEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eSh0aGlzLCBnbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhl
YygpLCBwcm9wZXJ0eU5hbWUpOwogICAgIH0KQEAgLTIzNCw5ICsyMzQsMTAgQEAgRW5jb2RlZEpT
VmFsdWUganNUZXN0RW5hYmxlZEJ5U2V0dGluZ1RlcwogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0
SlNUZXN0RW5hYmxlZEJ5U2V0dGluZ1Rlc3RTdWJPYmpFbmFibGVkQnlTZXR0aW5nQ29uc3RydWN0
b3JTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0RW5hYmxlZEJ5U2V0dGluZyYgdGhpc09i
amVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBWTSYg
dm0gPSB0aHJvd1Njb3BlLnZtKCk7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3Ry
dWN0b3IuCi0gICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHN0YXRlLnZtKCksIElkZW50
aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLnZtKCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENo
YXIqPigiVGVzdFN1Yk9iakVuYWJsZWRCeVNldHRpbmciKSwgc3RybGVuKCJUZXN0U3ViT2JqRW5h
YmxlZEJ5U2V0dGluZyIpKSwgdmFsdWUpOworICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVj
dCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBM
Q2hhcio+KCJUZXN0U3ViT2JqRW5hYmxlZEJ5U2V0dGluZyIpLCBzdHJsZW4oIlRlc3RTdWJPYmpF
bmFibGVkQnlTZXR0aW5nIikpLCB2YWx1ZSk7CiB9CiAKIGJvb2wgc2V0SlNUZXN0RW5hYmxlZEJ5
U2V0dGluZ1Rlc3RTdWJPYmpFbmFibGVkQnlTZXR0aW5nQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBz
dGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFs
dWUpCkBAIC0yNjQsNiArMjY1LDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0RW5hYmxlZEJ5U2V0
dGluZ0VuYQogI2lmIEVOQUJMRShURVNUX0ZFQVRVUkUpCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0
SlNUZXN0RW5hYmxlZEJ5U2V0dGluZ0VuYWJsZWRCeVNldHRpbmdBdHRyaWJ1dGVTZXR0ZXIoRXhl
Y1N0YXRlJiBzdGF0ZSwgSlNUZXN0RW5hYmxlZEJ5U2V0dGluZyYgdGhpc09iamVjdCwgSlNWYWx1
ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKKyAgICBVTlVTRURfUEFSQU0oc3Rh
dGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gdGhp
c09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9N
U3RyaW5nPihzdGF0ZSwgdmFsdWUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdEVuYWJsZWRGb3JDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RW5hYmxlZEZvckNv
bnRleHQuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0RW5hYmxlZEZvckNvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC04NSw3ICs4NSw3IEBAIHRlbXBsYXRlPD4gSlNWYWx1ZSBKU1Rlc3RFbmFibGVkRm9yQ29u
dGUKIHRlbXBsYXRlPD4gdm9pZCBKU1Rlc3RFbmFibGVkRm9yQ29udGV4dENvbnN0cnVjdG9yOjpp
bml0aWFsaXplUHJvcGVydGllcyhWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmpl
Y3QpCiB7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpT
VGVzdEVuYWJsZWRGb3JDb250ZXh0Ojpwcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCksIEpTQzo6
UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpS
ZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKLSAgICBwdXREaXJl
Y3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZygmdm0sIFN0
cmluZygiVGVzdEVuYWJsZWRGb3JDb250ZXh0Il9zKSksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6
OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOworICAgIHB1dERp
cmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKHZtLCBT
dHJpbmcoIlRlc3RFbmFibGVkRm9yQ29udGV4dCJfcykpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRl
OjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKICAgICBwdXRE
aXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMCksIEpTQzo6UHJv
cGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVu
dW0pOwogfQogCkBAIC0xODUsOSArMTg1LDEwIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEVuYWJs
ZWRGb3JDb250ZXh0VGUKIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEVuYWJsZWRGb3JD
b250ZXh0VGVzdFN1Yk9iakVuYWJsZWRGb3JDb250ZXh0Q29uc3RydWN0b3JTZXR0ZXIoRXhlY1N0
YXRlJiBzdGF0ZSwgSlNUZXN0RW5hYmxlZEZvckNvbnRleHQmIHRoaXNPYmplY3QsIEpTVmFsdWUg
dmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVk0mIHZtID0gdGhyb3dTY29w
ZS52bSgpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgotICAgIHJl
dHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdChzdGF0ZS52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKCZzdGF0ZS52bSgpLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RTdWJP
YmpFbmFibGVkRm9yQ29udGV4dCIpLCBzdHJsZW4oIlRlc3RTdWJPYmpFbmFibGVkRm9yQ29udGV4
dCIpKSwgdmFsdWUpOworICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0
U3ViT2JqRW5hYmxlZEZvckNvbnRleHQiKSwgc3RybGVuKCJUZXN0U3ViT2JqRW5hYmxlZEZvckNv
bnRleHQiKSksIHZhbHVlKTsKIH0KIAogYm9vbCBzZXRKU1Rlc3RFbmFibGVkRm9yQ29udGV4dFRl
c3RTdWJPYmpFbmFibGVkRm9yQ29udGV4dENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50Q29u
c3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RFdmVudENvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjQ5MTI4KQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50Q29u
c3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NSw3ICs1NSw3IEBAIHRlbXBsYXRlPD4g
VGVzdEV2ZW50Q29uc3RydWN0b3I6OkluaXQgY28KICAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQp
CiAgICAgICAgIGJ1YmJsZXNWYWx1ZSA9IGpzVW5kZWZpbmVkKCk7CiAgICAgZWxzZSB7Ci0gICAg
ICAgIGJ1YmJsZXNWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZygmc3RhdGUsICJidWJibGVzIikpOworICAgICAgICBidWJibGVzVmFsdWUgPSBvYmplY3Qt
PmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJidWJibGVzIikpOwogICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgfQogICAgIGlm
ICghYnViYmxlc1ZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKQEAgLTY3LDcgKzY3LDcgQEAgdGVtcGxh
dGU8PiBUZXN0RXZlbnRDb25zdHJ1Y3Rvcjo6SW5pdCBjbwogICAgIGlmIChpc051bGxPclVuZGVm
aW5lZCkKICAgICAgICAgY2FuY2VsYWJsZVZhbHVlID0ganNVbmRlZmluZWQoKTsKICAgICBlbHNl
IHsKLSAgICAgICAgY2FuY2VsYWJsZVZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImNhbmNlbGFibGUiKSk7CisgICAgICAgIGNhbmNlbGFi
bGVWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwg
ImNhbmNlbGFibGUiKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
eyB9KTsKICAgICB9CiAgICAgaWYgKCFjYW5jZWxhYmxlVmFsdWUuaXNVbmRlZmluZWQoKSkgewpA
QCAtNzksNyArNzksNyBAQCB0ZW1wbGF0ZTw+IFRlc3RFdmVudENvbnN0cnVjdG9yOjpJbml0IGNv
CiAgICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKQogICAgICAgICBjb21wb3NlZFZhbHVlID0ganNV
bmRlZmluZWQoKTsKICAgICBlbHNlIHsKLSAgICAgICAgY29tcG9zZWRWYWx1ZSA9IG9iamVjdC0+
Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJjb21wb3NlZCIpKTsK
KyAgICAgICAgY29tcG9zZWRWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZyh2bSwgImNvbXBvc2VkIikpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHRocm93U2NvcGUsIHsgfSk7CiAgICAgfQogICAgIGlmICghY29tcG9zZWRWYWx1ZS5pc1VuZGVm
aW5lZCgpKSB7CkBAIC05MSw3ICs5MSw3IEBAIHRlbXBsYXRlPD4gVGVzdEV2ZW50Q29uc3RydWN0
b3I6OkluaXQgY28KICAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQpCiAgICAgICAgIGF0dHIyVmFs
dWUgPSBqc1VuZGVmaW5lZCgpOwogICAgIGVsc2UgewotICAgICAgICBhdHRyMlZhbHVlID0gb2Jq
ZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImF0dHIyIikp
OworICAgICAgICBhdHRyMlZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCAiYXR0cjIiKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgeyB9KTsKICAgICB9CiAgICAgaWYgKCFhdHRyMlZhbHVlLmlzVW5kZWZpbmVkKCkp
IHsKQEAgLTEwNCw3ICsxMDQsNyBAQCB0ZW1wbGF0ZTw+IFRlc3RFdmVudENvbnN0cnVjdG9yOjpJ
bml0IGNvCiAgICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKQogICAgICAgICBhdHRyM1ZhbHVlID0g
anNVbmRlZmluZWQoKTsKICAgICBlbHNlIHsKLSAgICAgICAgYXR0cjNWYWx1ZSA9IG9iamVjdC0+
Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJhdHRyMyIpKTsKKyAg
ICAgICAgYXR0cjNWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZyh2bSwgImF0dHIzIikpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2Nv
cGUsIHsgfSk7CiAgICAgfQogICAgIGlmICghYXR0cjNWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7CkBA
IC0xNzgsNyArMTc4LDcgQEAgdGVtcGxhdGU8PiBKU1ZhbHVlIEpTVGVzdEV2ZW50Q29uc3RydWN0
bwogdGVtcGxhdGU8PiB2b2lkIEpTVGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3Rvcjo6aW5p
dGlhbGl6ZVByb3BlcnRpZXMoVk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0
KQogewogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rl
c3RFdmVudENvbnN0cnVjdG9yOjpwcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCksIEpTQzo6UHJv
cGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFk
T25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKLSAgICBwdXREaXJlY3Qo
dm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZygmdm0sIFN0cmlu
ZygiVGVzdEV2ZW50Q29uc3RydWN0b3IiX3MpKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVh
ZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CisgICAgcHV0RGlyZWN0
KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcodm0sIFN0cmlu
ZygiVGVzdEV2ZW50Q29uc3RydWN0b3IiX3MpKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVh
ZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CiAgICAgcHV0RGlyZWN0
KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDEpLCBKU0M6OlByb3BlcnR5
QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsK
IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dEV2ZW50VGFyZ2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRUYXJnZXQuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRUYXJn
ZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Nyw3ICs4Nyw3IEBAIHRlbXBsYXRlPD4gSlNWYWx1
ZSBKU1Rlc3RFdmVudFRhcmdldENvbnMKIHRlbXBsYXRlPD4gdm9pZCBKU1Rlc3RFdmVudFRhcmdl
dENvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGllcyhWTSYgdm0sIEpTRE9NR2xvYmFsT2Jq
ZWN0JiBnbG9iYWxPYmplY3QpCiB7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVz
LT5wcm90b3R5cGUsIEpTVGVzdEV2ZW50VGFyZ2V0Ojpwcm90b3R5cGUodm0sIGdsb2JhbE9iamVj
dCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUgfCBKU0M6OlByb3BlcnR5QXR0
cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKLSAg
ICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0cmlu
Zygmdm0sIFN0cmluZygiVGVzdEV2ZW50VGFyZ2V0Il9zKSksIEpTQzo6UHJvcGVydHlBdHRyaWJ1
dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOworICAgIHB1
dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKHZt
LCBTdHJpbmcoIlRlc3RFdmVudFRhcmdldCJfcykpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpS
ZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKICAgICBwdXREaXJl
Y3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMCksIEpTQzo6UHJvcGVy
dHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0p
OwogfQogCkBAIC0xNjcsNiArMTY3LDcgQEAgYm9vbCBKU1Rlc3RFdmVudFRhcmdldDo6Z2V0T3du
UHJvcGVydHlTbAogCiBib29sIEpTVGVzdEV2ZW50VGFyZ2V0OjpnZXRPd25Qcm9wZXJ0eVNsb3RC
eUluZGV4KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogc3RhdGUsIHVuc2lnbmVkIGluZGV4
LCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CisgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAg
YXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3RFdmVudFRhcmdldCo+KG9iamVjdCk7CiAg
ICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogICAgIGlm
IChMSUtFTFkoaW5kZXggPD0gTUFYX0FSUkFZX0lOREVYKSkgewpAQCAtMTc3LDcgKzE3OCw3IEBA
IGJvb2wgSlNUZXN0RXZlbnRUYXJnZXQ6OmdldE93blByb3BlcnR5U2wKICAgICAgICAgfQogICAg
ICAgICByZXR1cm4gSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgob2JqZWN0LCBz
dGF0ZSwgaW5kZXgsIHNsb3QpOwogICAgIH0KLSAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50
aWZpZXI6OmZyb20oc3RhdGUsIGluZGV4KTsKKyAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50
aWZpZXI6OmZyb20odm0sIGluZGV4KTsKICAgICB1c2luZyBHZXR0ZXJJRExUeXBlID0gSURMSW50
ZXJmYWNlPE5vZGU+OwogICAgIGF1dG8gZ2V0dGVyRnVuY3RvciA9IFtdIChhdXRvJiB0aGlzT2Jq
ZWN0LCBhdXRvIHByb3BlcnR5TmFtZSkgLT4gT3B0aW9uYWw8dHlwZW5hbWUgR2V0dGVySURMVHlw
ZTo6SW1wbGVtZW50YXRpb25UeXBlPiB7CiAgICAgICAgIGF1dG8gcmVzdWx0ID0gdGhpc09iamVj
dC53cmFwcGVkKCkubmFtZWRJdGVtKHByb3BlcnR5TmFtZVRvQXRvbVN0cmluZyhwcm9wZXJ0eU5h
bWUpKTsKQEAgLTE5NSwxMiArMTk2LDEzIEBAIGJvb2wgSlNUZXN0RXZlbnRUYXJnZXQ6OmdldE93
blByb3BlcnR5U2wKIAogdm9pZCBKU1Rlc3RFdmVudFRhcmdldDo6Z2V0T3duUHJvcGVydHlOYW1l
cyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIHN0YXRlLCBQcm9wZXJ0eU5hbWVBcnJheSYg
cHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7CisgICAgVk0mIHZtID0gc3Rh
dGUtPnZtKCk7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3RFdmVudFRhcmdl
dCo+KG9iamVjdCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhvYmplY3QsIGluZm8o
KSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMCwgY291bnQgPSB0aGlzT2JqZWN0LT53cmFwcGVk
KCkubGVuZ3RoKCk7IGkgPCBjb3VudDsgKytpKQotICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJ
ZGVudGlmaWVyOjpmcm9tKHN0YXRlLCBpKSk7CisgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElk
ZW50aWZpZXI6OmZyb20odm0sIGkpKTsKICAgICBmb3IgKGF1dG8mIHByb3BlcnR5TmFtZSA6IHRo
aXNPYmplY3QtPndyYXBwZWQoKS5zdXBwb3J0ZWRQcm9wZXJ0eU5hbWVzKCkpCi0gICAgICAgIHBy
b3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb21TdHJpbmcoc3RhdGUsIHByb3BlcnR5TmFt
ZSkpOworICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZt
LCBwcm9wZXJ0eU5hbWUpKTsKICAgICBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhvYmpl
Y3QsIHN0YXRlLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV4Y2VwdGlvbi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV4Y2Vw
dGlvbi5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RFeGNlcHRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MSw3
ICs4MSw3IEBAIHRlbXBsYXRlPD4gSlNWYWx1ZSBKU1Rlc3RFeGNlcHRpb25Db25zdHIKIHRlbXBs
YXRlPD4gdm9pZCBKU1Rlc3RFeGNlcHRpb25Db25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRp
ZXMoVk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQogewogICAgIHB1dERp
cmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3RFeGNlcHRpb246OnBy
b3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERl
bGV0ZSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0
dHJpYnV0ZTo6RG9udEVudW0pOwotICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+
bmFtZSwganNOb250cml2aWFsU3RyaW5nKCZ2bSwgU3RyaW5nKCJUZXN0RXhjZXB0aW9uIl9zKSks
IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0
ZTo6RG9udEVudW0pOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwg
anNOb250cml2aWFsU3RyaW5nKHZtLCBTdHJpbmcoIlRlc3RFeGNlcHRpb24iX3MpKSwgSlNDOjpQ
cm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250
RW51bSk7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVt
YmVyKDApLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlB
dHRyaWJ1dGU6OkRvbnRFbnVtKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RHZW5lcmF0
ZUlzUmVhY2hhYmxlLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04MSw3ICs4MSw3IEBAIHRlbXBsYXRlPD4gSlNWYWx1ZSBKU1Rlc3RHZW5l
cmF0ZUlzUmVhY2gKIHRlbXBsYXRlPD4gdm9pZCBKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlQ29u
c3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3Qm
IGdsb2JhbE9iamVjdCkKIHsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnBy
b3RvdHlwZSwgSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZTo6cHJvdG90eXBlKHZtLCBnbG9iYWxP
YmplY3QpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgSlNDOjpQcm9wZXJ0
eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7
Ci0gICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxT
dHJpbmcoJnZtLCBTdHJpbmcoIlRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlIl9zKSksIEpTQzo6UHJv
cGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVu
dW0pOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2
aWFsU3RyaW5nKHZtLCBTdHJpbmcoIlRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlIl9zKSksIEpTQzo6
UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9u
dEVudW0pOwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051
bWJlcigwKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5
QXR0cmlidXRlOjpEb250RW51bSk7CiB9CiAKQEAgLTEwNCw3ICsxMDQsNyBAQCB2b2lkIEpTVGVz
dEdlbmVyYXRlSXNSZWFjaGFibGVQcm90b3R5cGU6CiAgICAgYm9vbCBoYXNEaXNhYmxlZFJ1bnRp
bWVQcm9wZXJ0aWVzID0gZmFsc2U7CiAgICAgaWYgKCFqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3Qq
PihnbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+aXNTZWN1cmVDb250
ZXh0KCkpIHsKICAgICAgICAgaGFzRGlzYWJsZWRSdW50aW1lUHJvcGVydGllcyA9IHRydWU7Ci0g
ICAgICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiYVNlY3JldEF0dHJpYnV0ZSIpLCBzdHJsZW4o
ImFTZWNyZXRBdHRyaWJ1dGUiKSk7CisgICAgICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJhU2Vj
cmV0QXR0cmlidXRlIiksIHN0cmxlbigiYVNlY3JldEF0dHJpYnV0ZSIpKTsKICAgICAgICAgVk06
OkRlbGV0ZVByb3BlcnR5TW9kZVNjb3BlIHNjb3BlKHZtLCBWTTo6RGVsZXRlUHJvcGVydHlNb2Rl
OjpJZ25vcmVDb25maWd1cmFibGUpOwogICAgICAgICBKU09iamVjdDo6ZGVsZXRlUHJvcGVydHko
dGhpcywgZ2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKSwgcHJvcGVydHlOYW1lKTsKICAgICB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2xv
YmFsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0R2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdsb2JhbE9iamVj
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2Niw3ICs2NjYsNyBAQCB0ZW1wbGF0ZTw+IEpTVmFs
dWUgSlNUZXN0R2xvYmFsT2JqZWN0Q29uCiB0ZW1wbGF0ZTw+IHZvaWQgSlNUZXN0R2xvYmFsT2Jq
ZWN0Q29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKFZNJiB2bSwgSlNET01HbG9iYWxP
YmplY3QmIGdsb2JhbE9iamVjdCkKIHsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFt
ZXMtPnByb3RvdHlwZSwgZ2xvYmFsT2JqZWN0LmdldFByb3RvdHlwZURpcmVjdCh2bSksIEpTQzo6
UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpS
ZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKLSAgICBwdXREaXJl
Y3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZygmdm0sIFN0
cmluZygiVGVzdEdsb2JhbE9iamVjdCJfcykpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFk
T25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKKyAgICBwdXREaXJlY3Qo
dm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZyh2bSwgU3RyaW5n
KCJUZXN0R2xvYmFsT2JqZWN0Il9zKSksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5
IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwogICAgIHB1dERpcmVjdCh2bSwg
dm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigwKSwgSlNDOjpQcm9wZXJ0eUF0dHJp
YnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CiAgICAg
cmVpZnlTdGF0aWNQcm9wZXJ0aWVzKHZtLCBKU1Rlc3RHbG9iYWxPYmplY3Q6OmluZm8oKSwgSlNU
ZXN0R2xvYmFsT2JqZWN0Q29uc3RydWN0b3JUYWJsZVZhbHVlcywgKnRoaXMpOwogfQpAQCAtODAz
LDYgKzgwMyw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFJlZ3VsYXIKIAog
c3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFJlZ3VsYXJBdHRyaWJ1dGVT
ZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBK
U1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogeworICAgIFVOVVNFRF9QQVJB
TShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwg
PSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJ
RExET01TdHJpbmc+KHN0YXRlLCB2YWx1ZSk7CkBAIC04MzQsNiArODM1LDcgQEAgRW5jb2RlZEpT
VmFsdWUganNUZXN0R2xvYmFsT2JqZWN0UHVibGljQQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0
SlNUZXN0R2xvYmFsT2JqZWN0UHVibGljQW5kUHJpdmF0ZUF0dHJpYnV0ZVNldHRlcihFeGVjU3Rh
dGUmIHN0YXRlLCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUs
IFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qu
d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4o
c3RhdGUsIHZhbHVlKTsKQEAgLTg2OSw2ICs4NzEsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RH
bG9iYWxPYmplY3RQdWJsaWNBCiAjaWYgRU5BQkxFKFRFU1RfRkVBVFVSRSkKIHN0YXRpYyBpbmxp
bmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RQdWJsaWNBbmRQcml2YXRlQ29uZGl0aW9uYWxB
dHRyaWJ1dGVTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlz
T2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogeworICAgIFVO
VVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1
dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0g
Y29udmVydDxJRExET01TdHJpbmc+KHN0YXRlLCB2YWx1ZSk7CkBAIC05MDYsNiArOTA5LDcgQEAg
RW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0RW5hYmxlZAogI2lmIEVOQUJMRShURVNU
X0ZFQVRVUkUpCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0RW5hYmxl
ZEF0UnVudGltZUF0dHJpYnV0ZVNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RHbG9iYWxP
YmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUp
CiB7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0
aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oc3RhdGUsIHZhbHVlKTsKQEAgLTkzNyw5
ICs5NDEsMTAgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdENFUgogCiBz
dGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdENFUmVhY3Rpb25zQ29u
c3RydWN0b3JTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlz
T2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFZN
JiB2bSA9IHRocm93U2NvcGUudm0oKTsKICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25z
dHJ1Y3Rvci4KLSAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qoc3RhdGUudm0oKSwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUudm0oKSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBM
Q2hhcio+KCJUZXN0Q0VSZWFjdGlvbnMiKSwgc3RybGVuKCJUZXN0Q0VSZWFjdGlvbnMiKSksIHZh
bHVlKTsKKyAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZy
b21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdENFUmVhY3Rp
b25zIiksIHN0cmxlbigiVGVzdENFUmVhY3Rpb25zIikpLCB2YWx1ZSk7CiB9CiAKIGJvb2wgc2V0
SlNUZXN0R2xvYmFsT2JqZWN0VGVzdENFUmVhY3Rpb25zQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBz
dGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFs
dWUpCkBAIC05NjEsOSArOTY2LDEwIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVj
dFRlc3RDRVIKIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RD
RVJlYWN0aW9uc1N0cmluZ2lmaWVyQ29uc3RydWN0b3JTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwg
SlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBVTlVT
RURfUEFSQU0oc3RhdGUpOworICAgIFZNJiB2bSA9IHRocm93U2NvcGUudm0oKTsKICAgICAvLyBT
aGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KLSAgICByZXR1cm4gdGhpc09iamVjdC5w
dXREaXJlY3Qoc3RhdGUudm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUudm0oKSwg
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmll
ciIpLCBzdHJsZW4oIlRlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyIikpLCB2YWx1ZSk7CisgICAg
cmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZt
LCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RDRVJlYWN0aW9uc1N0cmluZ2lm
aWVyIiksIHN0cmxlbigiVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXIiKSksIHZhbHVlKTsKIH0K
IAogYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllckNv
bnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQpAQCAtOTg1LDkgKzk5MSwxMCBAQCBFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0Q2FsCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRK
U1Rlc3RHbG9iYWxPYmplY3RUZXN0Q2FsbFRyYWNlckNvbnN0cnVjdG9yU2V0dGVyKEV4ZWNTdGF0
ZSYgc3RhdGUsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwg
VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7
CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBWTSYgdm0gPSB0aHJvd1Njb3BlLnZtKCk7
CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCi0gICAgcmV0dXJuIHRo
aXNPYmplY3QucHV0RGlyZWN0KHN0YXRlLnZtKCksIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0
YXRlLnZtKCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdENhbGxUcmFjZXIi
KSwgc3RybGVuKCJUZXN0Q2FsbFRyYWNlciIpKSwgdmFsdWUpOworICAgIHJldHVybiB0aGlzT2Jq
ZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0Q2FsbFRyYWNlciIpLCBzdHJsZW4oIlRlc3RDYWxsVHJh
Y2VyIikpLCB2YWx1ZSk7CiB9CiAKIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdENhbGxU
cmFjZXJDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFs
dWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKQEAgLTEwMTMsOSArMTAyMCwxMCBAQCBF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0Q2FsCiAjaWYgRU5BQkxFKFRFU1Rf
Q09ORElUSU9OQUwpCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVz
dENhbGxiYWNrSW50ZXJmYWNlQ29uc3RydWN0b3JTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNU
ZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBVTlVTRURf
UEFSQU0oc3RhdGUpOworICAgIFZNJiB2bSA9IHRocm93U2NvcGUudm0oKTsKICAgICAvLyBTaGFk
b3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KLSAgICByZXR1cm4gdGhpc09iamVjdC5wdXRE
aXJlY3Qoc3RhdGUudm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUudm0oKSwgcmVp
bnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0Q2FsbGJhY2tJbnRlcmZhY2UiKSwgc3Ry
bGVuKCJUZXN0Q2FsbGJhY2tJbnRlcmZhY2UiKSksIHZhbHVlKTsKKyAgICByZXR1cm4gdGhpc09i
amVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdENhbGxiYWNrSW50ZXJmYWNlIiksIHN0cmxlbigiVGVz
dENhbGxiYWNrSW50ZXJmYWNlIikpLCB2YWx1ZSk7CiB9CiAKIGJvb2wgc2V0SlNUZXN0R2xvYmFs
T2JqZWN0VGVzdENhbGxiYWNrSW50ZXJmYWNlQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCkBA
IC0xMDM5LDkgKzEwNDcsMTAgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVz
dENsYQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdENsYXNz
V2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yQ29uc3RydWN0b3JTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0
ZSwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBV
TlVTRURfUEFSQU0oc3RhdGUpOworICAgIFZNJiB2bSA9IHRocm93U2NvcGUudm0oKTsKICAgICAv
LyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KLSAgICByZXR1cm4gdGhpc09iamVj
dC5wdXREaXJlY3Qoc3RhdGUudm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUudm0o
KSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0Q2xhc3NXaXRoSlNCdWlsdGlu
Q29uc3RydWN0b3IiKSwgc3RybGVuKCJUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3Ii
KSksIHZhbHVlKTsKKyAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdENs
YXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yIiksIHN0cmxlbigiVGVzdENsYXNzV2l0aEpTQnVp
bHRpbkNvbnN0cnVjdG9yIikpLCB2YWx1ZSk7CiB9CiAKIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2Jq
ZWN0VGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yQ29uc3RydWN0b3IoRXhlY1N0YXRl
KiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
VmFsdWUpCkBAIC0xMDYzLDkgKzEwNzIsMTAgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFs
T2JqZWN0VGVzdERPTQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0
VGVzdERPTUpJVENvbnN0cnVjdG9yU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEdsb2Jh
bE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29w
ZSkKIHsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgVU5VU0VEX1BBUkFNKHN0
YXRlKTsKKyAgICBWTSYgdm0gPSB0aHJvd1Njb3BlLnZtKCk7CiAgICAgLy8gU2hhZG93aW5nIGEg
YnVpbHQtaW4gY29uc3RydWN0b3IuCi0gICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHN0
YXRlLnZtKCksIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLnZtKCksIHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdERPTUpJVCIpLCBzdHJsZW4oIlRlc3RET01KSVQiKSks
IHZhbHVlKTsKKyAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6
OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdERPTUpJ
VCIpLCBzdHJsZW4oIlRlc3RET01KSVQiKSksIHZhbHVlKTsKIH0KIAogYm9vbCBzZXRKU1Rlc3RH
bG9iYWxPYmplY3RUZXN0RE9NSklUQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCkBAIC0xMDg3
LDkgKzEwOTcsMTAgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdERvbQog
CiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdERvbWFpblNlY3Vy
aXR5Q29uc3RydWN0b3JTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0R2xvYmFsT2JqZWN0
JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewot
ICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwor
ICAgIFZNJiB2bSA9IHRocm93U2NvcGUudm0oKTsKICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1p
biBjb25zdHJ1Y3Rvci4KLSAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qoc3RhdGUudm0o
KSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUudm0oKSwgcmVpbnRlcnByZXRfY2FzdDxj
b25zdCBMQ2hhcio+KCJUZXN0RG9tYWluU2VjdXJpdHkiKSwgc3RybGVuKCJUZXN0RG9tYWluU2Vj
dXJpdHkiKSksIHZhbHVlKTsKKyAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigi
VGVzdERvbWFpblNlY3VyaXR5IiksIHN0cmxlbigiVGVzdERvbWFpblNlY3VyaXR5IikpLCB2YWx1
ZSk7CiB9CiAKIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdERvbWFpblNlY3VyaXR5Q29u
c3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCkBAIC0xMTExLDkgKzExMjIsMTAgQEAgRW5jb2RlZEpT
VmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdEVuYQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0
SlNUZXN0R2xvYmFsT2JqZWN0VGVzdEVuYWJsZWRCeVNldHRpbmdDb25zdHJ1Y3RvclNldHRlcihF
eGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUg
dmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVk0mIHZtID0gdGhyb3dTY29w
ZS52bSgpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgotICAgIHJl
dHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdChzdGF0ZS52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKCZzdGF0ZS52bSgpLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RFbmFi
bGVkQnlTZXR0aW5nIiksIHN0cmxlbigiVGVzdEVuYWJsZWRCeVNldHRpbmciKSksIHZhbHVlKTsK
KyAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJp
bmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdEVuYWJsZWRCeVNldHRp
bmciKSwgc3RybGVuKCJUZXN0RW5hYmxlZEJ5U2V0dGluZyIpKSwgdmFsdWUpOwogfQogCiBib29s
IHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RFbmFibGVkQnlTZXR0aW5nQ29uc3RydWN0b3IoRXhl
Y1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkVmFsdWUpCkBAIC0xMTM1LDkgKzExNDcsMTAgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0
R2xvYmFsT2JqZWN0VGVzdEVuYQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFs
T2JqZWN0VGVzdEVuYWJsZWRGb3JDb250ZXh0Q29uc3RydWN0b3JTZXR0ZXIoRXhlY1N0YXRlJiBz
dGF0ZSwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAg
ICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFZNJiB2bSA9IHRocm93U2NvcGUudm0oKTsKICAg
ICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KLSAgICByZXR1cm4gdGhpc09i
amVjdC5wdXREaXJlY3Qoc3RhdGUudm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUu
dm0oKSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0RW5hYmxlZEZvckNvbnRl
eHQiKSwgc3RybGVuKCJUZXN0RW5hYmxlZEZvckNvbnRleHQiKSksIHZhbHVlKTsKKyAgICByZXR1
cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdEVuYWJsZWRGb3JDb250ZXh0IiksIHN0
cmxlbigiVGVzdEVuYWJsZWRGb3JDb250ZXh0IikpLCB2YWx1ZSk7CiB9CiAKIGJvb2wgc2V0SlNU
ZXN0R2xvYmFsT2JqZWN0VGVzdEVuYWJsZWRGb3JDb250ZXh0Q29uc3RydWN0b3IoRXhlY1N0YXRl
KiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
VmFsdWUpCkBAIC0xMTU5LDkgKzExNzIsMTAgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFs
T2JqZWN0VGVzdEV2ZQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0
VGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3RvclNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBK
U1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUm
IHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIFVOVVNF
RF9QQVJBTShzdGF0ZSk7CisgICAgVk0mIHZtID0gdGhyb3dTY29wZS52bSgpOwogICAgIC8vIFNo
YWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgotICAgIHJldHVybiB0aGlzT2JqZWN0LnB1
dERpcmVjdChzdGF0ZS52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZS52bSgpLCBy
ZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RFdmVudENvbnN0cnVjdG9yIiksIHN0
cmxlbigiVGVzdEV2ZW50Q29uc3RydWN0b3IiKSksIHZhbHVlKTsKKyAgICByZXR1cm4gdGhpc09i
amVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdEV2ZW50Q29uc3RydWN0b3IiKSwgc3RybGVuKCJUZXN0
RXZlbnRDb25zdHJ1Y3RvciIpKSwgdmFsdWUpOwogfQogCiBib29sIHNldEpTVGVzdEdsb2JhbE9i
amVjdFRlc3RFdmVudENvbnN0cnVjdG9yQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCkBAIC0x
MTgzLDkgKzExOTcsMTAgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdEV2
ZQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdEV2ZW50VGFy
Z2V0Q29uc3RydWN0b3JTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0R2xvYmFsT2JqZWN0
JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewot
ICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwor
ICAgIFZNJiB2bSA9IHRocm93U2NvcGUudm0oKTsKICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1p
biBjb25zdHJ1Y3Rvci4KLSAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qoc3RhdGUudm0o
KSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUudm0oKSwgcmVpbnRlcnByZXRfY2FzdDxj
b25zdCBMQ2hhcio+KCJUZXN0RXZlbnRUYXJnZXQiKSwgc3RybGVuKCJUZXN0RXZlbnRUYXJnZXQi
KSksIHZhbHVlKTsKKyAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdEV2
ZW50VGFyZ2V0IiksIHN0cmxlbigiVGVzdEV2ZW50VGFyZ2V0IikpLCB2YWx1ZSk7CiB9CiAKIGJv
b2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdEV2ZW50VGFyZ2V0Q29uc3RydWN0b3IoRXhlY1N0
YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkVmFsdWUpCkBAIC0xMjA3LDkgKzEyMjIsMTAgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0R2xv
YmFsT2JqZWN0VGVzdEV4YwogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2Jq
ZWN0VGVzdEV4Y2VwdGlvbkNvbnN0cnVjdG9yU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVz
dEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgVU5VU0VEX1BB
UkFNKHN0YXRlKTsKKyAgICBWTSYgdm0gPSB0aHJvd1Njb3BlLnZtKCk7CiAgICAgLy8gU2hhZG93
aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCi0gICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGly
ZWN0KHN0YXRlLnZtKCksIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLnZtKCksIHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdEV4Y2VwdGlvbiIpLCBzdHJsZW4oIlRlc3RF
eGNlcHRpb24iKSksIHZhbHVlKTsKKyAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0s
IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIq
PigiVGVzdEV4Y2VwdGlvbiIpLCBzdHJsZW4oIlRlc3RFeGNlcHRpb24iKSksIHZhbHVlKTsKIH0K
IAogYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0RXhjZXB0aW9uQ29uc3RydWN0b3IoRXhl
Y1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkVmFsdWUpCkBAIC0xMjMxLDkgKzEyNDcsMTAgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0
R2xvYmFsT2JqZWN0VGVzdEdlbgogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFs
T2JqZWN0VGVzdEdlbmVyYXRlSXNSZWFjaGFibGVDb25zdHJ1Y3RvclNldHRlcihFeGVjU3RhdGUm
IHN0YXRlLCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRo
cm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwor
ICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVk0mIHZtID0gdGhyb3dTY29wZS52bSgpOwog
ICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgotICAgIHJldHVybiB0aGlz
T2JqZWN0LnB1dERpcmVjdChzdGF0ZS52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0
ZS52bSgpLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RHZW5lcmF0ZUlzUmVh
Y2hhYmxlIiksIHN0cmxlbigiVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUiKSksIHZhbHVlKTsKKyAg
ICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmco
dm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdEdlbmVyYXRlSXNSZWFjaGFi
bGUiKSwgc3RybGVuKCJUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZSIpKSwgdmFsdWUpOwogfQogCiBi
b29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlQ29uc3RydWN0
b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkVmFsdWUpCkBAIC0xMjU1LDkgKzEyNzIsMTAgQEAgRW5jb2RlZEpTVmFsdWUg
anNUZXN0R2xvYmFsT2JqZWN0VGVzdEdsbwogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0
R2xvYmFsT2JqZWN0VGVzdEdsb2JhbE9iamVjdENvbnN0cnVjdG9yU2V0dGVyKEV4ZWNTdGF0ZSYg
c3RhdGUsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhy
b3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Cisg
ICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBWTSYgdm0gPSB0aHJvd1Njb3BlLnZtKCk7CiAg
ICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCi0gICAgcmV0dXJuIHRoaXNP
YmplY3QucHV0RGlyZWN0KHN0YXRlLnZtKCksIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRl
LnZtKCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdEdsb2JhbE9iamVjdCIp
LCBzdHJsZW4oIlRlc3RHbG9iYWxPYmplY3QiKSksIHZhbHVlKTsKKyAgICByZXR1cm4gdGhpc09i
amVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdEdsb2JhbE9iamVjdCIpLCBzdHJsZW4oIlRlc3RHbG9i
YWxPYmplY3QiKSksIHZhbHVlKTsKIH0KIAogYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0
R2xvYmFsT2JqZWN0Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCkBAIC0xMjc5LDkgKzEyOTcs
MTAgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdEluZAogCiBzdGF0aWMg
aW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50
aWZpZXJDb25zdHJ1Y3RvclNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RHbG9iYWxPYmpl
Y3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7
Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7
CisgICAgVk0mIHZtID0gdGhyb3dTY29wZS52bSgpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0
LWluIGNvbnN0cnVjdG9yLgotICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdChzdGF0ZS52
bSgpLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZS52bSgpLCByZWludGVycHJldF9jYXN0
PGNvbnN0IExDaGFyKj4oIlRlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyIiksIHN0cmxlbigi
VGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIiKSksIHZhbHVlKTsKKyAgICByZXR1cm4gdGhp
c09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIiKSwg
c3RybGVuKCJUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllciIpKSwgdmFsdWUpOwogfQogCiBi
b29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyQ29u
c3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCkBAIC0xMzAzLDkgKzEzMjIsMTAgQEAgRW5jb2RlZEpT
VmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdEluZAogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0
SlNUZXN0R2xvYmFsT2JqZWN0VGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbkNvbnN0
cnVjdG9yU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09i
amVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBWTSYg
dm0gPSB0aHJvd1Njb3BlLnZtKCk7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3Ry
dWN0b3IuCi0gICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHN0YXRlLnZtKCksIElkZW50
aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLnZtKCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENo
YXIqPigiVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbiIpLCBzdHJsZW4oIlRlc3RJ
bmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24iKSksIHZhbHVlKTsKKyAgICByZXR1cm4gdGhp
c09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlv
biIpLCBzdHJsZW4oIlRlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24iKSksIHZhbHVl
KTsKIH0KIAogYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0SW5kZXhlZFNldHRlclRocm93
aW5nRXhjZXB0aW9uQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCkBAIC0xMzI3LDkgKzEzNDcs
MTAgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdEluZAogCiBzdGF0aWMg
aW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRl
bnRpZmllckNvbnN0cnVjdG9yU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEdsb2JhbE9i
amVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkK
IHsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRl
KTsKKyAgICBWTSYgdm0gPSB0aHJvd1Njb3BlLnZtKCk7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVp
bHQtaW4gY29uc3RydWN0b3IuCi0gICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHN0YXRl
LnZtKCksIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLnZtKCksIHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgTENoYXIqPigiVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllciIpLCBzdHJs
ZW4oIlRlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIiKSksIHZhbHVlKTsKKyAgICByZXR1
cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRp
ZmllciIpLCBzdHJsZW4oIlRlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIiKSksIHZhbHVl
KTsKIH0KIAogYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0SW5kZXhlZFNldHRlcldpdGhJ
ZGVudGlmaWVyQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCkBAIC0xMzU1LDkgKzEzNzYsMTAg
QEAgRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdEludAogI2lmIEVOQUJMRShD
b25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRK
U1Rlc3RHbG9iYWxPYmplY3RUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JTZXR0ZXIoRXhlY1N0YXRl
JiBzdGF0ZSwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
KyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFZNJiB2bSA9IHRocm93U2NvcGUudm0oKTsK
ICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KLSAgICByZXR1cm4gdGhp
c09iamVjdC5wdXREaXJlY3Qoc3RhdGUudm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3Rh
dGUudm0oKSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0SW50ZXJmYWNlIiks
IHN0cmxlbigiVGVzdEludGVyZmFjZSIpKSwgdmFsdWUpOworICAgIHJldHVybiB0aGlzT2JqZWN0
LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBMQ2hhcio+KCJUZXN0SW50ZXJmYWNlIiksIHN0cmxlbigiVGVzdEludGVyZmFjZSIp
KSwgdmFsdWUpOwogfQogCiBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RJbnRlcmZhY2VD
b25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKQEAgLTEzODEsOSArMTQwMywxMCBAQCBFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0SW50CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBz
ZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmVDb25zdHJ1
Y3RvclNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmpl
Y3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVk0mIHZt
ID0gdGhyb3dTY29wZS52bSgpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVj
dG9yLgotICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdChzdGF0ZS52bSgpLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKCZzdGF0ZS52bSgpLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFy
Kj4oIlRlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZSIpLCBzdHJsZW4oIlRlc3RJbnRlcmZh
Y2VMZWFkaW5nVW5kZXJzY29yZSIpKSwgdmFsdWUpOworICAgIHJldHVybiB0aGlzT2JqZWN0LnB1
dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxj
b25zdCBMQ2hhcio+KCJUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmUiKSwgc3RybGVuKCJU
ZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmUiKSksIHZhbHVlKTsKIH0KIAogYm9vbCBzZXRK
U1Rlc3RHbG9iYWxPYmplY3RUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmVDb25zdHJ1Y3Rv
cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRWYWx1ZSkKQEAgLTE0MDUsOSArMTQyOCwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RHbG9iYWxPYmplY3RUZXN0SXRlCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RH
bG9iYWxPYmplY3RUZXN0SXRlcmFibGVDb25zdHJ1Y3RvclNldHRlcihFeGVjU3RhdGUmIHN0YXRl
LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2Nv
cGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIFVO
VVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVk0mIHZtID0gdGhyb3dTY29wZS52bSgpOwogICAgIC8v
IFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgotICAgIHJldHVybiB0aGlzT2JqZWN0
LnB1dERpcmVjdChzdGF0ZS52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZS52bSgp
LCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RJdGVyYWJsZSIpLCBzdHJsZW4o
IlRlc3RJdGVyYWJsZSIpKSwgdmFsdWUpOworICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVj
dCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBM
Q2hhcio+KCJUZXN0SXRlcmFibGUiKSwgc3RybGVuKCJUZXN0SXRlcmFibGUiKSksIHZhbHVlKTsK
IH0KIAogYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0SXRlcmFibGVDb25zdHJ1Y3RvcihF
eGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRWYWx1ZSkKQEAgLTE0MjksOSArMTQ1MywxMCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RHbG9iYWxPYmplY3RUZXN0SlNCCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9i
YWxPYmplY3RUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JDb25zdHJ1Y3RvclNldHRlcihFeGVjU3Rh
dGUmIHN0YXRlLCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUs
IFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVk0mIHZtID0gdGhyb3dTY29wZS52bSgp
OwogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgotICAgIHJldHVybiB0
aGlzT2JqZWN0LnB1dERpcmVjdChzdGF0ZS52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZz
dGF0ZS52bSgpLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RKU0J1aWx0aW5D
b25zdHJ1Y3RvciIpLCBzdHJsZW4oIlRlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvciIpKSwgdmFsdWUp
OworICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0SlNCdWlsdGluQ29u
c3RydWN0b3IiKSwgc3RybGVuKCJUZXN0SlNCdWlsdGluQ29uc3RydWN0b3IiKSksIHZhbHVlKTsK
IH0KIAogYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JD
b25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKQEAgLTE0NTMsOSArMTQ3OCwxMCBAQCBFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0TWFwCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBz
ZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TWFwTGlrZUNvbnN0cnVjdG9yU2V0dGVyKEV4ZWNTdGF0
ZSYgc3RhdGUsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwg
VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7
CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBWTSYgdm0gPSB0aHJvd1Njb3BlLnZtKCk7
CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCi0gICAgcmV0dXJuIHRo
aXNPYmplY3QucHV0RGlyZWN0KHN0YXRlLnZtKCksIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0
YXRlLnZtKCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdE1hcExpa2UiKSwg
c3RybGVuKCJUZXN0TWFwTGlrZSIpKSwgdmFsdWUpOworICAgIHJldHVybiB0aGlzT2JqZWN0LnB1
dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxj
b25zdCBMQ2hhcio+KCJUZXN0TWFwTGlrZSIpLCBzdHJsZW4oIlRlc3RNYXBMaWtlIikpLCB2YWx1
ZSk7CiB9CiAKIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE1hcExpa2VDb25zdHJ1Y3Rv
cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRWYWx1ZSkKQEAgLTE0NzcsOSArMTUwMywxMCBAQCBFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RHbG9iYWxPYmplY3RUZXN0TWVkCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RH
bG9iYWxPYmplY3RUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lckNvbnN0cnVjdG9yU2V0dGVyKEV4
ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2
YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBWTSYgdm0gPSB0aHJvd1Njb3Bl
LnZtKCk7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCi0gICAgcmV0
dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHN0YXRlLnZtKCksIElkZW50aWZpZXI6OmZyb21TdHJp
bmcoJnN0YXRlLnZtKCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdE1lZGlh
UXVlcnlMaXN0TGlzdGVuZXIiKSwgc3RybGVuKCJUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lciIp
KSwgdmFsdWUpOworICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0TWVk
aWFRdWVyeUxpc3RMaXN0ZW5lciIpLCBzdHJsZW4oIlRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVy
IikpLCB2YWx1ZSk7CiB9CiAKIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE1lZGlhUXVl
cnlMaXN0TGlzdGVuZXJDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKQEAgLTE1MDEsOSArMTUy
OCwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtCiAKIHN0YXRp
YyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRBbmRJbmRleGVkU2V0
dGVyTm9JZGVudGlmaWVyQ29uc3RydWN0b3JTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0
R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBVTlVTRURfUEFS
QU0oc3RhdGUpOworICAgIFZNJiB2bSA9IHRocm93U2NvcGUudm0oKTsKICAgICAvLyBTaGFkb3dp
bmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KLSAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJl
Y3Qoc3RhdGUudm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUudm0oKSwgcmVpbnRl
cnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVu
dGlmaWVyIiksIHN0cmxlbigiVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllciIp
KSwgdmFsdWUpOworICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0TmFt
ZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyIiksIHN0cmxlbigiVGVzdE5hbWVkQW5kSW5k
ZXhlZFNldHRlck5vSWRlbnRpZmllciIpKSwgdmFsdWUpOwogfQogCiBib29sIHNldEpTVGVzdEds
b2JhbE9iamVjdFRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXJDb25zdHJ1Y3Rv
cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRWYWx1ZSkKQEAgLTE1MjUsOSArMTU1MywxMCBAQCBFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RH
bG9iYWxPYmplY3RUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb25Db25z
dHJ1Y3RvclNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNP
YmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5V
U0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVk0m
IHZtID0gdGhyb3dTY29wZS52bSgpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0
cnVjdG9yLgotICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdChzdGF0ZS52bSgpLCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZS52bSgpLCByZWludGVycHJldF9jYXN0PGNvbnN0IExD
aGFyKj4oIlRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbiIpLCBzdHJs
ZW4oIlRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbiIpKSwgdmFsdWUp
OworICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0TmFtZWRBbmRJbmRl
eGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24iKSwgc3RybGVuKCJUZXN0TmFtZWRBbmRJbmRleGVk
U2V0dGVyVGhyb3dpbmdFeGNlcHRpb24iKSksIHZhbHVlKTsKIH0KIAogYm9vbCBzZXRKU1Rlc3RH
bG9iYWxPYmplY3RUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb25Db25z
dHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKQEAgLTE1NDksOSArMTU3OCwxMCBAQCBFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRK
U1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXJD
b25zdHJ1Y3RvclNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRo
aXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAg
VU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAg
Vk0mIHZtID0gdGhyb3dTY29wZS52bSgpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNv
bnN0cnVjdG9yLgotICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdChzdGF0ZS52bSgpLCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZS52bSgpLCByZWludGVycHJldF9jYXN0PGNvbnN0
IExDaGFyKj4oIlRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllciIpLCBzdHJs
ZW4oIlRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllciIpKSwgdmFsdWUpOwor
ICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0TmFtZWRBbmRJbmRleGVk
U2V0dGVyV2l0aElkZW50aWZpZXIiKSwgc3RybGVuKCJUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVy
V2l0aElkZW50aWZpZXIiKSksIHZhbHVlKTsKIH0KIAogYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmpl
Y3RUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXJDb25zdHJ1Y3RvcihFeGVj
U3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRWYWx1ZSkKQEAgLTE1NzMsOSArMTYwMywxMCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RH
bG9iYWxPYmplY3RUZXN0TmFtCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxP
YmplY3RUZXN0TmFtZWRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yU2V0dGVyKEV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dT
Y29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAg
VU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBWTSYgdm0gPSB0aHJvd1Njb3BlLnZtKCk7CiAgICAg
Ly8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCi0gICAgcmV0dXJuIHRoaXNPYmpl
Y3QucHV0RGlyZWN0KHN0YXRlLnZtKCksIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLnZt
KCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdE5hbWVkQ29uc3RydWN0b3Ii
KSwgc3RybGVuKCJUZXN0TmFtZWRDb25zdHJ1Y3RvciIpKSwgdmFsdWUpOworICAgIHJldHVybiB0
aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRl
cnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0TmFtZWRDb25zdHJ1Y3RvciIpLCBzdHJsZW4o
IlRlc3ROYW1lZENvbnN0cnVjdG9yIikpLCB2YWx1ZSk7CiB9CiAKIGJvb2wgc2V0SlNUZXN0R2xv
YmFsT2JqZWN0VGVzdE5hbWVkQ29uc3RydWN0b3JDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRl
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkK
QEAgLTE1OTcsOSArMTYyOCwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RB
dWRpb0NvCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RBdWRpb0Nv
bnN0cnVjdG9yU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhp
c09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBW
TSYgdm0gPSB0aHJvd1Njb3BlLnZtKCk7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29u
c3RydWN0b3IuCi0gICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHN0YXRlLnZtKCksIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLnZtKCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
TENoYXIqPigiQXVkaW8iKSwgc3RybGVuKCJBdWRpbyIpKSwgdmFsdWUpOworICAgIHJldHVybiB0
aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRl
cnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJBdWRpbyIpLCBzdHJsZW4oIkF1ZGlvIikpLCB2YWx1
ZSk7CiB9CiAKIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0QXVkaW9Db25zdHJ1Y3RvcihFeGVj
U3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRWYWx1ZSkKQEAgLTE2MjEsOSArMTY1MywxMCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RH
bG9iYWxPYmplY3RUZXN0TmFtCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxP
YmplY3RUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVyQ29uc3RydWN0b3JTZXR0ZXIoRXhlY1N0
YXRlJiBzdGF0ZSwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVl
LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFZNJiB2bSA9IHRocm93U2NvcGUudm0o
KTsKICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KLSAgICByZXR1cm4g
dGhpc09iamVjdC5wdXREaXJlY3Qoc3RhdGUudm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygm
c3RhdGUudm0oKSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0TmFtZWREZWxl
dGVyTm9JZGVudGlmaWVyIiksIHN0cmxlbigiVGVzdE5hbWVkRGVsZXRlck5vSWRlbnRpZmllciIp
KSwgdmFsdWUpOworICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0TmFt
ZWREZWxldGVyTm9JZGVudGlmaWVyIiksIHN0cmxlbigiVGVzdE5hbWVkRGVsZXRlck5vSWRlbnRp
ZmllciIpKSwgdmFsdWUpOwogfQogCiBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1l
ZERlbGV0ZXJOb0lkZW50aWZpZXJDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKQEAgLTE2NDUs
OSArMTY3OCwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtCiAK
IHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWREZWxldGVy
VGhyb3dpbmdFeGNlcHRpb25Db25zdHJ1Y3RvclNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rl
c3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRo
cm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIFVOVVNFRF9Q
QVJBTShzdGF0ZSk7CisgICAgVk0mIHZtID0gdGhyb3dTY29wZS52bSgpOwogICAgIC8vIFNoYWRv
d2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgotICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERp
cmVjdChzdGF0ZS52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZS52bSgpLCByZWlu
dGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2Vw
dGlvbiIpLCBzdHJsZW4oIlRlc3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbiIpKSwgdmFs
dWUpOworICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0TmFtZWREZWxl
dGVyVGhyb3dpbmdFeGNlcHRpb24iKSwgc3RybGVuKCJUZXN0TmFtZWREZWxldGVyVGhyb3dpbmdF
eGNlcHRpb24iKSksIHZhbHVlKTsKIH0KIAogYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0
TmFtZWREZWxldGVyVGhyb3dpbmdFeGNlcHRpb25Db25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRl
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkK
QEAgLTE2NjksOSArMTcwMywxMCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RU
ZXN0TmFtCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFt
ZWREZWxldGVyV2l0aElkZW50aWZpZXJDb25zdHJ1Y3RvclNldHRlcihFeGVjU3RhdGUmIHN0YXRl
LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2Nv
cGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIFVO
VVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVk0mIHZtID0gdGhyb3dTY29wZS52bSgpOwogICAgIC8v
IFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgotICAgIHJldHVybiB0aGlzT2JqZWN0
LnB1dERpcmVjdChzdGF0ZS52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZS52bSgp
LCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3ROYW1lZERlbGV0ZXJXaXRoSWRl
bnRpZmllciIpLCBzdHJsZW4oIlRlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllciIpKSwgdmFs
dWUpOworICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0TmFtZWREZWxl
dGVyV2l0aElkZW50aWZpZXIiKSwgc3RybGVuKCJUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZp
ZXIiKSksIHZhbHVlKTsKIH0KIAogYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRE
ZWxldGVyV2l0aElkZW50aWZpZXJDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKQEAgLTE2OTMs
OSArMTcyOCwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtCiAK
IHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWREZWxldGVy
V2l0aEluZGV4ZWRHZXR0ZXJDb25zdHJ1Y3RvclNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rl
c3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRo
cm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIFVOVVNFRF9Q
QVJBTShzdGF0ZSk7CisgICAgVk0mIHZtID0gdGhyb3dTY29wZS52bSgpOwogICAgIC8vIFNoYWRv
d2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgotICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERp
cmVjdChzdGF0ZS52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZS52bSgpLCByZWlu
dGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdl
dHRlciIpLCBzdHJsZW4oIlRlc3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRlciIpKSwgdmFs
dWUpOworICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0TmFtZWREZWxl
dGVyV2l0aEluZGV4ZWRHZXR0ZXIiKSwgc3RybGVuKCJUZXN0TmFtZWREZWxldGVyV2l0aEluZGV4
ZWRHZXR0ZXIiKSksIHZhbHVlKTsKIH0KIAogYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0
TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXJDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRl
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkK
QEAgLTE3MTcsOSArMTc1MywxMCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RU
ZXN0TmFtCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFt
ZWRHZXR0ZXJDYWxsV2l0aENvbnN0cnVjdG9yU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVz
dEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgVU5VU0VEX1BB
UkFNKHN0YXRlKTsKKyAgICBWTSYgdm0gPSB0aHJvd1Njb3BlLnZtKCk7CiAgICAgLy8gU2hhZG93
aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCi0gICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGly
ZWN0KHN0YXRlLnZtKCksIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLnZtKCksIHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGgiKSwgc3Ry
bGVuKCJUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aCIpKSwgdmFsdWUpOworICAgIHJldHVybiB0aGlz
T2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aCIpLCBzdHJsZW4o
IlRlc3ROYW1lZEdldHRlckNhbGxXaXRoIikpLCB2YWx1ZSk7CiB9CiAKIGJvb2wgc2V0SlNUZXN0
R2xvYmFsT2JqZWN0VGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGhDb25zdHJ1Y3RvcihFeGVjU3RhdGUq
IHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRW
YWx1ZSkKQEAgLTE3NDEsOSArMTc3OCwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxP
YmplY3RUZXN0TmFtCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RU
ZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXJDb25zdHJ1Y3RvclNldHRlcihFeGVjU3RhdGUmIHN0
YXRlLCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93
U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAg
IFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVk0mIHZtID0gdGhyb3dTY29wZS52bSgpOwogICAg
IC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgotICAgIHJldHVybiB0aGlzT2Jq
ZWN0LnB1dERpcmVjdChzdGF0ZS52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZS52
bSgpLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3ROYW1lZEdldHRlck5vSWRl
bnRpZmllciIpLCBzdHJsZW4oIlRlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllciIpKSwgdmFsdWUp
OworICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0TmFtZWRHZXR0ZXJO
b0lkZW50aWZpZXIiKSwgc3RybGVuKCJUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXIiKSksIHZh
bHVlKTsKIH0KIAogYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRHZXR0ZXJOb0lk
ZW50aWZpZXJDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKQEAgLTE3NjUsOSArMTgwMywxMCBA
QCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtCiAKIHN0YXRpYyBpbmxp
bmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmll
ckNvbnN0cnVjdG9yU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEdsb2JhbE9iamVjdCYg
dGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAg
ICBWTSYgdm0gPSB0aHJvd1Njb3BlLnZtKCk7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4g
Y29uc3RydWN0b3IuCi0gICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHN0YXRlLnZtKCks
IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLnZtKCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgTENoYXIqPigiVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXIiKSwgc3RybGVuKCJUZXN0
TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllciIpKSwgdmFsdWUpOworICAgIHJldHVybiB0aGlzT2Jq
ZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllciIpLCBzdHJs
ZW4oIlRlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyIikpLCB2YWx1ZSk7CiB9CiAKIGJvb2wg
c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXJDb25zdHJ1
Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRWYWx1ZSkKQEAgLTE3ODksOSArMTgyOCwxMCBAQCBFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rl
c3RHbG9iYWxPYmplY3RUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXJDb25zdHJ1Y3RvclNldHRl
cihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFs
dWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVk0mIHZtID0gdGhyb3dT
Y29wZS52bSgpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgotICAg
IHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdChzdGF0ZS52bSgpLCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKCZzdGF0ZS52bSgpLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RO
YW1lZFNldHRlck5vSWRlbnRpZmllciIpLCBzdHJsZW4oIlRlc3ROYW1lZFNldHRlck5vSWRlbnRp
ZmllciIpKSwgdmFsdWUpOworICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJU
ZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXIiKSwgc3RybGVuKCJUZXN0TmFtZWRTZXR0ZXJOb0lk
ZW50aWZpZXIiKSksIHZhbHVlKTsKIH0KIAogYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0
TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXJDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKQEAgLTE4
MTMsOSArMTg1MywxMCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFt
CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRTZXR0
ZXJUaHJvd2luZ0V4Y2VwdGlvbkNvbnN0cnVjdG9yU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpT
VGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYg
dGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgVU5VU0VE
X1BBUkFNKHN0YXRlKTsKKyAgICBWTSYgdm0gPSB0aHJvd1Njb3BlLnZtKCk7CiAgICAgLy8gU2hh
ZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCi0gICAgcmV0dXJuIHRoaXNPYmplY3QucHV0
RGlyZWN0KHN0YXRlLnZtKCksIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLnZtKCksIHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNl
cHRpb24iKSwgc3RybGVuKCJUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbiIpKSwgdmFs
dWUpOworICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0TmFtZWRTZXR0
ZXJUaHJvd2luZ0V4Y2VwdGlvbiIpLCBzdHJsZW4oIlRlc3ROYW1lZFNldHRlclRocm93aW5nRXhj
ZXB0aW9uIikpLCB2YWx1ZSk7CiB9CiAKIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE5h
bWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb25Db25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKQEAg
LTE4MzcsOSArMTg3OCwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0
TmFtCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRT
ZXR0ZXJXaXRoSWRlbnRpZmllckNvbnN0cnVjdG9yU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpT
VGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYg
dGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgVU5VU0VE
X1BBUkFNKHN0YXRlKTsKKyAgICBWTSYgdm0gPSB0aHJvd1Njb3BlLnZtKCk7CiAgICAgLy8gU2hh
ZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCi0gICAgcmV0dXJuIHRoaXNPYmplY3QucHV0
RGlyZWN0KHN0YXRlLnZtKCksIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLnZtKCksIHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZp
ZXIiKSwgc3RybGVuKCJUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllciIpKSwgdmFsdWUpOwor
ICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0TmFtZWRTZXR0ZXJXaXRo
SWRlbnRpZmllciIpLCBzdHJsZW4oIlRlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyIikpLCB2
YWx1ZSk7CiB9CiAKIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkU2V0dGVyV2l0
aElkZW50aWZpZXJDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0
aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKQEAgLTE4NjEsOSArMTkwMywx
MCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtCiAKIHN0YXRpYyBp
bmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhl
ZEdldHRlckNvbnN0cnVjdG9yU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEdsb2JhbE9i
amVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkK
IHsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRl
KTsKKyAgICBWTSYgdm0gPSB0aHJvd1Njb3BlLnZtKCk7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVp
bHQtaW4gY29uc3RydWN0b3IuCi0gICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHN0YXRl
LnZtKCksIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLnZtKCksIHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgTENoYXIqPigiVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXIiKSwgc3Ry
bGVuKCJUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlciIpKSwgdmFsdWUpOworICAgIHJl
dHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwg
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhl
ZEdldHRlciIpLCBzdHJsZW4oIlRlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyIikpLCB2
YWx1ZSk7CiB9CiAKIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkU2V0dGVyV2l0
aEluZGV4ZWRHZXR0ZXJDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKQEAgLTE4ODUsOSArMTky
OCwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtCiAKIHN0YXRp
YyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRTZXR0ZXJXaXRoSW5k
ZXhlZEdldHRlckFuZFNldHRlckNvbnN0cnVjdG9yU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpT
VGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYg
dGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgVU5VU0VE
X1BBUkFNKHN0YXRlKTsKKyAgICBWTSYgdm0gPSB0aHJvd1Njb3BlLnZtKCk7CiAgICAgLy8gU2hh
ZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCi0gICAgcmV0dXJuIHRoaXNPYmplY3QucHV0
RGlyZWN0KHN0YXRlLnZtKCksIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLnZtKCksIHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRH
ZXR0ZXJBbmRTZXR0ZXIiKSwgc3RybGVuKCJUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRl
ckFuZFNldHRlciIpKSwgdmFsdWUpOworICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2
bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hh
cio+KCJUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlciIpLCBzdHJsZW4o
IlRlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyIikpLCB2YWx1ZSk7CiB9
CiAKIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRH
ZXR0ZXJBbmRTZXR0ZXJDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKQEAgLTE5MDksOSArMTk1
MywxMCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtCiAKIHN0YXRp
YyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRTZXR0ZXJXaXRoT3Zl
cnJpZGVCdWlsdGluc0NvbnN0cnVjdG9yU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEds
b2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dT
Y29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgVU5VU0VEX1BBUkFN
KHN0YXRlKTsKKyAgICBWTSYgdm0gPSB0aHJvd1Njb3BlLnZtKCk7CiAgICAgLy8gU2hhZG93aW5n
IGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCi0gICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0
KHN0YXRlLnZtKCksIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLnZtKCksIHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRp
bnMiKSwgc3RybGVuKCJUZXN0TmFtZWRTZXR0ZXJXaXRoT3ZlcnJpZGVCdWlsdGlucyIpKSwgdmFs
dWUpOworICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0TmFtZWRTZXR0
ZXJXaXRoT3ZlcnJpZGVCdWlsdGlucyIpLCBzdHJsZW4oIlRlc3ROYW1lZFNldHRlcldpdGhPdmVy
cmlkZUJ1aWx0aW5zIikpLCB2YWx1ZSk7CiB9CiAKIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0
VGVzdE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnNDb25zdHJ1Y3RvcihFeGVjU3RhdGUq
IHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRW
YWx1ZSkKQEAgLTE5MzMsOSArMTk3OCwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxP
YmplY3RUZXN0TmFtCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RU
ZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNDb25zdHJ1Y3RvclNldHRlcihF
eGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUg
dmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVk0mIHZtID0gdGhyb3dTY29w
ZS52bSgpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgotICAgIHJl
dHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdChzdGF0ZS52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKCZzdGF0ZS52bSgpLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3ROYW1l
ZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllcyIpLCBzdHJsZW4oIlRlc3ROYW1lZFNldHRl
cldpdGhVbmZvcmdhYmxlUHJvcGVydGllcyIpKSwgdmFsdWUpOworICAgIHJldHVybiB0aGlzT2Jq
ZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRp
ZXMiKSwgc3RybGVuKCJUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXMiKSks
IHZhbHVlKTsKIH0KIAogYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRTZXR0ZXJX
aXRoVW5mb3JnYWJsZVByb3BlcnRpZXNDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKQEAgLTE5
NTcsOSArMjAwMywxMCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFt
CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRTZXR0
ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5zQ29uc3RydWN0b3JT
ZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBK
U1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFZNJiB2bSA9IHRo
cm93U2NvcGUudm0oKTsKICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4K
LSAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qoc3RhdGUudm0oKSwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZygmc3RhdGUudm0oKSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJU
ZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5z
IiksIHN0cmxlbigiVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3Zl
cnJpZGVCdWlsdGlucyIpKSwgdmFsdWUpOworICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVj
dCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBM
Q2hhcio+KCJUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVycmlk
ZUJ1aWx0aW5zIiksIHN0cmxlbigiVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0
aWVzQW5kT3ZlcnJpZGVCdWlsdGlucyIpKSwgdmFsdWUpOwogfQogCiBib29sIHNldEpTVGVzdEds
b2JhbE9iamVjdFRlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0FuZE92ZXJy
aWRlQnVpbHRpbnNDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0
aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKQEAgLTE5ODEsOSArMjAyOCwx
MCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0T3ZlCiAKIHN0YXRpYyBp
bmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9y
c0NvbnN0cnVjdG9yU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEdsb2JhbE9iamVjdCYg
dGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAg
ICBWTSYgdm0gPSB0aHJvd1Njb3BlLnZtKCk7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4g
Y29uc3RydWN0b3IuCi0gICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHN0YXRlLnZtKCks
IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLnZtKCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgTENoYXIqPigiVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMiKSwgc3RybGVuKCJUZXN0T3Zl
cmxvYWRlZENvbnN0cnVjdG9ycyIpKSwgdmFsdWUpOworICAgIHJldHVybiB0aGlzT2JqZWN0LnB1
dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxj
b25zdCBMQ2hhcio+KCJUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycyIpLCBzdHJsZW4oIlRlc3RP
dmVybG9hZGVkQ29uc3RydWN0b3JzIikpLCB2YWx1ZSk7CiB9CiAKIGJvb2wgc2V0SlNUZXN0R2xv
YmFsT2JqZWN0VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNDb25zdHJ1Y3RvcihFeGVjU3RhdGUq
IHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRW
YWx1ZSkKQEAgLTIwMDUsOSArMjA1MywxMCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxP
YmplY3RUZXN0T3ZlCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RU
ZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZUNvbnN0cnVjdG9yU2V0dGVyKEV4
ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2
YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBWTSYgdm0gPSB0aHJvd1Njb3Bl
LnZtKCk7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCi0gICAgcmV0
dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHN0YXRlLnZtKCksIElkZW50aWZpZXI6OmZyb21TdHJp
bmcoJnN0YXRlLnZtKCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdE92ZXJs
b2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2UiKSwgc3RybGVuKCJUZXN0T3ZlcmxvYWRlZENv
bnN0cnVjdG9yc1dpdGhTZXF1ZW5jZSIpKSwgdmFsdWUpOworICAgIHJldHVybiB0aGlzT2JqZWN0
LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBMQ2hhcio+KCJUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZSIp
LCBzdHJsZW4oIlRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlIikpLCB2YWx1
ZSk7CiB9CiAKIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE92ZXJsb2FkZWRDb25zdHJ1
Y3RvcnNXaXRoU2VxdWVuY2VDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKQEAgLTIwMjksOSAr
MjA3OCwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0T3ZlCiAKIHN0
YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0T3ZlcnJpZGVCdWlsdGlu
c0NvbnN0cnVjdG9yU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEdsb2JhbE9iamVjdCYg
dGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAg
ICBWTSYgdm0gPSB0aHJvd1Njb3BlLnZtKCk7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4g
Y29uc3RydWN0b3IuCi0gICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHN0YXRlLnZtKCks
IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLnZtKCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgTENoYXIqPigiVGVzdE92ZXJyaWRlQnVpbHRpbnMiKSwgc3RybGVuKCJUZXN0T3ZlcnJpZGVC
dWlsdGlucyIpKSwgdmFsdWUpOworICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+
KCJUZXN0T3ZlcnJpZGVCdWlsdGlucyIpLCBzdHJsZW4oIlRlc3RPdmVycmlkZUJ1aWx0aW5zIikp
LCB2YWx1ZSk7CiB9CiAKIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE92ZXJyaWRlQnVp
bHRpbnNDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFs
dWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKQEAgLTIwNTMsOSArMjEwMywxMCBAQCBF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0UGx1CiAKIHN0YXRpYyBpbmxpbmUg
Ym9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0UGx1Z2luSW50ZXJmYWNlQ29uc3RydWN0b3JT
ZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBK
U1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFZNJiB2bSA9IHRo
cm93U2NvcGUudm0oKTsKICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4K
LSAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qoc3RhdGUudm0oKSwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZygmc3RhdGUudm0oKSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJU
ZXN0UGx1Z2luSW50ZXJmYWNlIiksIHN0cmxlbigiVGVzdFBsdWdpbkludGVyZmFjZSIpKSwgdmFs
dWUpOworICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0UGx1Z2luSW50
ZXJmYWNlIiksIHN0cmxlbigiVGVzdFBsdWdpbkludGVyZmFjZSIpKSwgdmFsdWUpOwogfQogCiBi
b29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RQbHVnaW5JbnRlcmZhY2VDb25zdHJ1Y3RvcihF
eGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRWYWx1ZSkKQEAgLTIwNzcsOSArMjEyOCwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RHbG9iYWxPYmplY3RUZXN0UmVhCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9i
YWxPYmplY3RUZXN0UmVhZE9ubHlNYXBMaWtlQ29uc3RydWN0b3JTZXR0ZXIoRXhlY1N0YXRlJiBz
dGF0ZSwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAg
ICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFZNJiB2bSA9IHRocm93U2NvcGUudm0oKTsKICAg
ICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KLSAgICByZXR1cm4gdGhpc09i
amVjdC5wdXREaXJlY3Qoc3RhdGUudm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUu
dm0oKSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0UmVhZE9ubHlNYXBMaWtl
IiksIHN0cmxlbigiVGVzdFJlYWRPbmx5TWFwTGlrZSIpKSwgdmFsdWUpOworICAgIHJldHVybiB0
aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRl
cnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0UmVhZE9ubHlNYXBMaWtlIiksIHN0cmxlbigi
VGVzdFJlYWRPbmx5TWFwTGlrZSIpKSwgdmFsdWUpOwogfQogCiBib29sIHNldEpTVGVzdEdsb2Jh
bE9iamVjdFRlc3RSZWFkT25seU1hcExpa2VDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKQEAg
LTIxMDEsOSArMjE1MywxMCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0
UmVwCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0UmVwb3J0
RXh0cmFNZW1vcnlDb3N0Q29uc3RydWN0b3JTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0
R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBVTlVTRURfUEFS
QU0oc3RhdGUpOworICAgIFZNJiB2bSA9IHRocm93U2NvcGUudm0oKTsKICAgICAvLyBTaGFkb3dp
bmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KLSAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJl
Y3Qoc3RhdGUudm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUudm0oKSwgcmVpbnRl
cnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0UmVwb3J0RXh0cmFNZW1vcnlDb3N0IiksIHN0
cmxlbigiVGVzdFJlcG9ydEV4dHJhTWVtb3J5Q29zdCIpKSwgdmFsdWUpOworICAgIHJldHVybiB0
aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRl
cnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0UmVwb3J0RXh0cmFNZW1vcnlDb3N0IiksIHN0
cmxlbigiVGVzdFJlcG9ydEV4dHJhTWVtb3J5Q29zdCIpKSwgdmFsdWUpOwogfQogCiBib29sIHNl
dEpTVGVzdEdsb2JhbE9iamVjdFRlc3RSZXBvcnRFeHRyYU1lbW9yeUNvc3RDb25zdHJ1Y3RvcihF
eGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRWYWx1ZSkKQEAgLTIxMjUsOSArMjE3OCwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RHbG9iYWxPYmplY3RUZXN0U2VyCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9i
YWxPYmplY3RUZXN0U2VyaWFsaXphdGlvbkNvbnN0cnVjdG9yU2V0dGVyKEV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dT
Y29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAg
VU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBWTSYgdm0gPSB0aHJvd1Njb3BlLnZtKCk7CiAgICAg
Ly8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCi0gICAgcmV0dXJuIHRoaXNPYmpl
Y3QucHV0RGlyZWN0KHN0YXRlLnZtKCksIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLnZt
KCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdFNlcmlhbGl6YXRpb24iKSwg
c3RybGVuKCJUZXN0U2VyaWFsaXphdGlvbiIpKSwgdmFsdWUpOworICAgIHJldHVybiB0aGlzT2Jq
ZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0U2VyaWFsaXphdGlvbiIpLCBzdHJsZW4oIlRlc3RTZXJp
YWxpemF0aW9uIikpLCB2YWx1ZSk7CiB9CiAKIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVz
dFNlcmlhbGl6YXRpb25Db25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKQEAgLTIxNDksOSArMjIw
MywxMCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0U2VyCiAKIHN0YXRp
YyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0U2VyaWFsaXphdGlvbkluZGly
ZWN0SW5oZXJpdGFuY2VDb25zdHJ1Y3RvclNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RH
bG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93
U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIFVOVVNFRF9QQVJB
TShzdGF0ZSk7CisgICAgVk0mIHZtID0gdGhyb3dTY29wZS52bSgpOwogICAgIC8vIFNoYWRvd2lu
ZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgotICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVj
dChzdGF0ZS52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZS52bSgpLCByZWludGVy
cHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0
YW5jZSIpLCBzdHJsZW4oIlRlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZSIpKSwg
dmFsdWUpOworICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0U2VyaWFs
aXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2UiKSwgc3RybGVuKCJUZXN0U2VyaWFsaXphdGlvbklu
ZGlyZWN0SW5oZXJpdGFuY2UiKSksIHZhbHVlKTsKIH0KIAogYm9vbCBzZXRKU1Rlc3RHbG9iYWxP
YmplY3RUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2VDb25zdHJ1Y3RvcihFeGVj
U3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRWYWx1ZSkKQEAgLTIxNzMsOSArMjIyOCwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RH
bG9iYWxPYmplY3RUZXN0U2VyCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxP
YmplY3RUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRDb25zdHJ1Y3RvclNldHRlcihFeGVjU3RhdGUm
IHN0YXRlLCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRo
cm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwor
ICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVk0mIHZtID0gdGhyb3dTY29wZS52bSgpOwog
ICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgotICAgIHJldHVybiB0aGlz
T2JqZWN0LnB1dERpcmVjdChzdGF0ZS52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0
ZS52bSgpLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RTZXJpYWxpemF0aW9u
SW5oZXJpdCIpLCBzdHJsZW4oIlRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdCIpKSwgdmFsdWUpOwor
ICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0U2VyaWFsaXphdGlvbklu
aGVyaXQiKSwgc3RybGVuKCJUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQiKSksIHZhbHVlKTsKIH0K
IAogYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRDb25z
dHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKQEAgLTIxOTcsOSArMjI1MywxMCBAQCBFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0U2VyCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRK
U1Rlc3RHbG9iYWxPYmplY3RUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbENvbnN0cnVjdG9y
U2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwg
SlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBWTSYgdm0gPSB0
aHJvd1Njb3BlLnZtKCk7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3Iu
Ci0gICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHN0YXRlLnZtKCksIElkZW50aWZpZXI6
OmZyb21TdHJpbmcoJnN0YXRlLnZtKCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigi
VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwiKSwgc3RybGVuKCJUZXN0U2VyaWFsaXphdGlv
bkluaGVyaXRGaW5hbCIpKSwgdmFsdWUpOworICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVj
dCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBM
Q2hhcio+KCJUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbCIpLCBzdHJsZW4oIlRlc3RTZXJp
YWxpemF0aW9uSW5oZXJpdEZpbmFsIikpLCB2YWx1ZSk7CiB9CiAKIGJvb2wgc2V0SlNUZXN0R2xv
YmFsT2JqZWN0VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxDb25zdHJ1Y3RvcihFeGVjU3Rh
dGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRWYWx1ZSkKQEAgLTIyMjUsOSArMjI4MiwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9i
YWxPYmplY3RUZXN0U2VyCiAjaWYgRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRp
b24yKQogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RTZXJpYWxp
emVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDb25zdHJ1Y3RvclNldHRlcihFeGVjU3RhdGUmIHN0YXRl
LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2Nv
cGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIFVO
VVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVk0mIHZtID0gdGhyb3dTY29wZS52bSgpOwogICAgIC8v
IFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgotICAgIHJldHVybiB0aGlzT2JqZWN0
LnB1dERpcmVjdChzdGF0ZS52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZS52bSgp
LCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RTZXJpYWxpemVkU2NyaXB0VmFs
dWVJbnRlcmZhY2UiKSwgc3RybGVuKCJUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNl
IikpLCB2YWx1ZSk7CisgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UiKSwgc3RybGVuKCJUZXN0U2VyaWFsaXplZFNj
cmlwdFZhbHVlSW50ZXJmYWNlIikpLCB2YWx1ZSk7CiB9CiAKIGJvb2wgc2V0SlNUZXN0R2xvYmFs
T2JqZWN0VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNvbnN0cnVjdG9yKEV4ZWNT
dGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZFZhbHVlKQpAQCAtMjI1MSw5ICsyMzA5LDEwIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEds
b2JhbE9iamVjdFRlc3RTdHIKIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9i
amVjdFRlc3RTdHJpbmdpZmllckNvbnN0cnVjdG9yU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpT
VGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYg
dGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgVU5VU0VE
X1BBUkFNKHN0YXRlKTsKKyAgICBWTSYgdm0gPSB0aHJvd1Njb3BlLnZtKCk7CiAgICAgLy8gU2hh
ZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCi0gICAgcmV0dXJuIHRoaXNPYmplY3QucHV0
RGlyZWN0KHN0YXRlLnZtKCksIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLnZtKCksIHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdFN0cmluZ2lmaWVyIiksIHN0cmxlbigi
VGVzdFN0cmluZ2lmaWVyIikpLCB2YWx1ZSk7CisgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGly
ZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0
IExDaGFyKj4oIlRlc3RTdHJpbmdpZmllciIpLCBzdHJsZW4oIlRlc3RTdHJpbmdpZmllciIpKSwg
dmFsdWUpOwogfQogCiBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RTdHJpbmdpZmllckNv
bnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQpAQCAtMjI3NSw5ICsyMzM0LDEwIEBAIEVuY29kZWRK
U1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RTdHIKIAogc3RhdGljIGlubGluZSBib29sIHNl
dEpTVGVzdEdsb2JhbE9iamVjdFRlc3RTdHJpbmdpZmllckFub255bW91c09wZXJhdGlvbkNvbnN0
cnVjdG9yU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09i
amVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBWTSYg
dm0gPSB0aHJvd1Njb3BlLnZtKCk7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3Ry
dWN0b3IuCi0gICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHN0YXRlLnZtKCksIElkZW50
aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLnZtKCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENo
YXIqPigiVGVzdFN0cmluZ2lmaWVyQW5vbnltb3VzT3BlcmF0aW9uIiksIHN0cmxlbigiVGVzdFN0
cmluZ2lmaWVyQW5vbnltb3VzT3BlcmF0aW9uIikpLCB2YWx1ZSk7CisgICAgcmV0dXJuIHRoaXNP
YmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJl
dF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RTdHJpbmdpZmllckFub255bW91c09wZXJhdGlvbiIp
LCBzdHJsZW4oIlRlc3RTdHJpbmdpZmllckFub255bW91c09wZXJhdGlvbiIpKSwgdmFsdWUpOwog
fQogCiBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RTdHJpbmdpZmllckFub255bW91c09w
ZXJhdGlvbkNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQpAQCAtMjI5OSw5ICsyMzU5LDEwIEBA
IEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RTdHIKIAogc3RhdGljIGlubGlu
ZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RTdHJpbmdpZmllck5hbWVkT3BlcmF0aW9u
Q29uc3RydWN0b3JTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0
aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAg
IFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAg
IFZNJiB2bSA9IHRocm93U2NvcGUudm0oKTsKICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBj
b25zdHJ1Y3Rvci4KLSAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qoc3RhdGUudm0oKSwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUudm0oKSwgcmVpbnRlcnByZXRfY2FzdDxjb25z
dCBMQ2hhcio+KCJUZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvbiIpLCBzdHJsZW4oIlRlc3RT
dHJpbmdpZmllck5hbWVkT3BlcmF0aW9uIikpLCB2YWx1ZSk7CisgICAgcmV0dXJuIHRoaXNPYmpl
Y3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9j
YXN0PGNvbnN0IExDaGFyKj4oIlRlc3RTdHJpbmdpZmllck5hbWVkT3BlcmF0aW9uIiksIHN0cmxl
bigiVGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRpb24iKSksIHZhbHVlKTsKIH0KIAogYm9vbCBz
ZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvbkNvbnN0cnVj
dG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZFZhbHVlKQpAQCAtMjMyMyw5ICsyMzg0LDEwIEBAIEVuY29kZWRKU1ZhbHVl
IGpzVGVzdEdsb2JhbE9iamVjdFRlc3RTdHIKIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVz
dEdsb2JhbE9iamVjdFRlc3RTdHJpbmdpZmllck9wZXJhdGlvbkltcGxlbWVudGVkQXNDb25zdHJ1
Y3RvclNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmpl
Y3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVk0mIHZt
ID0gdGhyb3dTY29wZS52bSgpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVj
dG9yLgotICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdChzdGF0ZS52bSgpLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKCZzdGF0ZS52bSgpLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFy
Kj4oIlRlc3RTdHJpbmdpZmllck9wZXJhdGlvbkltcGxlbWVudGVkQXMiKSwgc3RybGVuKCJUZXN0
U3RyaW5naWZpZXJPcGVyYXRpb25JbXBsZW1lbnRlZEFzIikpLCB2YWx1ZSk7CisgICAgcmV0dXJu
IHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWlu
dGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RTdHJpbmdpZmllck9wZXJhdGlvbkltcGxl
bWVudGVkQXMiKSwgc3RybGVuKCJUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25JbXBsZW1lbnRlZEFz
IikpLCB2YWx1ZSk7CiB9CiAKIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFN0cmluZ2lm
aWVyT3BlcmF0aW9uSW1wbGVtZW50ZWRBc0NvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQpAQCAt
MjM0Nyw5ICsyNDA5LDEwIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RT
dHIKIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RTdHJpbmdp
Zmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmdDb25zdHJ1Y3RvclNldHRlcihFeGVjU3RhdGUmIHN0
YXRlLCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93
U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAg
IFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVk0mIHZtID0gdGhyb3dTY29wZS52bSgpOwogICAg
IC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgotICAgIHJldHVybiB0aGlzT2Jq
ZWN0LnB1dERpcmVjdChzdGF0ZS52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZS52
bSgpLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RTdHJpbmdpZmllck9wZXJh
dGlvbk5hbWVkVG9TdHJpbmciKSwgc3RybGVuKCJUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25OYW1l
ZFRvU3RyaW5nIikpLCB2YWx1ZSk7CisgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZt
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFy
Kj4oIlRlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmciKSwgc3RybGVuKCJUZXN0
U3RyaW5naWZpZXJPcGVyYXRpb25OYW1lZFRvU3RyaW5nIikpLCB2YWx1ZSk7CiB9CiAKIGJvb2wg
c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uTmFtZWRUb1N0cmlu
Z0NvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQpAQCAtMjM3MSw5ICsyNDM0LDEwIEBAIEVuY29k
ZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RTdHIKIAogc3RhdGljIGlubGluZSBib29s
IHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RTdHJpbmdpZmllclJlYWRPbmx5QXR0cmlidXRlQ29u
c3RydWN0b3JTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlz
T2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFZN
JiB2bSA9IHRocm93U2NvcGUudm0oKTsKICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25z
dHJ1Y3Rvci4KLSAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qoc3RhdGUudm0oKSwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUudm0oKSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBM
Q2hhcio+KCJUZXN0U3RyaW5naWZpZXJSZWFkT25seUF0dHJpYnV0ZSIpLCBzdHJsZW4oIlRlc3RT
dHJpbmdpZmllclJlYWRPbmx5QXR0cmlidXRlIikpLCB2YWx1ZSk7CisgICAgcmV0dXJuIHRoaXNP
YmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJl
dF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RTdHJpbmdpZmllclJlYWRPbmx5QXR0cmlidXRlIiks
IHN0cmxlbigiVGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGUiKSksIHZhbHVlKTsKIH0K
IAogYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0U3RyaW5naWZpZXJSZWFkT25seUF0dHJp
YnV0ZUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQpAQCAtMjM5NSw5ICsyNDU5LDEwIEBAIEVu
Y29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RTdHIKIAogc3RhdGljIGlubGluZSBi
b29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJpYnV0
ZUNvbnN0cnVjdG9yU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEdsb2JhbE9iamVjdCYg
dGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAg
ICBWTSYgdm0gPSB0aHJvd1Njb3BlLnZtKCk7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4g
Y29uc3RydWN0b3IuCi0gICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHN0YXRlLnZtKCks
IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLnZtKCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgTENoYXIqPigiVGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmlidXRlIiksIHN0cmxlbigi
VGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmlidXRlIikpLCB2YWx1ZSk7CisgICAgcmV0dXJu
IHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWlu
dGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJp
YnV0ZSIpLCBzdHJsZW4oIlRlc3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJpYnV0ZSIpKSwgdmFs
dWUpOwogfQogCiBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RTdHJpbmdpZmllclJlYWRX
cml0ZUF0dHJpYnV0ZUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQpAQCAtMjQxOSw5ICsyNDg0
LDEwIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RUeXAKIAogc3RhdGlj
IGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RUeXBlZGVmc0NvbnN0cnVjdG9y
U2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwg
SlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBWTSYgdm0gPSB0
aHJvd1Njb3BlLnZtKCk7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3Iu
Ci0gICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHN0YXRlLnZtKCksIElkZW50aWZpZXI6
OmZyb21TdHJpbmcoJnN0YXRlLnZtKCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigi
VGVzdFR5cGVkZWZzIiksIHN0cmxlbigiVGVzdFR5cGVkZWZzIikpLCB2YWx1ZSk7CisgICAgcmV0
dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBy
ZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RUeXBlZGVmcyIpLCBzdHJsZW4oIlRl
c3RUeXBlZGVmcyIpKSwgdmFsdWUpOwogfQogCiBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRl
c3RUeXBlZGVmc0NvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZp
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyLmNwcAkocmV2aXNpb24gMjQ5MTI4
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4
ZWRTZXR0ZXJOb0lkZW50aWZpZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MCw3ICs4MCw3IEBA
IHRlbXBsYXRlPD4gSlNWYWx1ZSBKU1Rlc3RJbmRleGVkU2V0dGVyTm8KIHRlbXBsYXRlPD4gdm9p
ZCBKU1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyQ29uc3RydWN0b3I6OmluaXRpYWxpemVQ
cm9wZXJ0aWVzKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKIHsKICAg
ICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgSlNUZXN0SW5kZXhl
ZFNldHRlck5vSWRlbnRpZmllcjo6cHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QpLCBKU0M6OlBy
b3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVh
ZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7Ci0gICAgcHV0RGlyZWN0
KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcoJnZtLCBTdHJp
bmcoIlRlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyIl9zKSksIEpTQzo6UHJvcGVydHlBdHRy
aWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOworICAg
IHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5n
KHZtLCBTdHJpbmcoIlRlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyIl9zKSksIEpTQzo6UHJv
cGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVu
dW0pOwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJl
cigwKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0
cmlidXRlOjpEb250RW51bSk7CiB9CiAKQEAgLTE2NiwxMCArMTY2LDExIEBAIGJvb2wgSlNUZXN0
SW5kZXhlZFNldHRlck5vSWRlbnRpZmllcjo6Z2UKIAogdm9pZCBKU1Rlc3RJbmRleGVkU2V0dGVy
Tm9JZGVudGlmaWVyOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNT
dGF0ZSogc3RhdGUsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlv
bk1vZGUgbW9kZSkKIHsKKyAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvKiB0aGlz
T2JqZWN0ID0ganNDYXN0PEpTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIqPihvYmplY3Qp
OwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMob2JqZWN0LCBpbmZvKCkpOwogICAgIGZv
ciAodW5zaWduZWQgaSA9IDAsIGNvdW50ID0gdGhpc09iamVjdC0+d3JhcHBlZCgpLmxlbmd0aCgp
OyBpIDwgY291bnQ7ICsraSkKLSAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6
ZnJvbShzdGF0ZSwgaSkpOworICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpm
cm9tKHZtLCBpKSk7CiAgICAgSlNPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBz
dGF0ZSwgcHJvcGVydHlOYW1lcywgbW9kZSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRp
b24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uY3BwCShyZXZpc2lvbiAy
NDkxMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODAs
NyArODAsNyBAQCB0ZW1wbGF0ZTw+IEpTVmFsdWUgSlNUZXN0SW5kZXhlZFNldHRlclRoCiB0ZW1w
bGF0ZTw+IHZvaWQgSlNUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uQ29uc3RydWN0
b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2Jh
bE9iamVjdCkKIHsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlw
ZSwgSlNUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uOjpwcm90b3R5cGUodm0sIGds
b2JhbE9iamVjdCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUgfCBKU0M6OlBy
b3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRF
bnVtKTsKLSAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJp
dmlhbFN0cmluZygmdm0sIFN0cmluZygiVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlv
biJfcykpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlB
dHRyaWJ1dGU6OkRvbnRFbnVtKTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMt
Pm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZyh2bSwgU3RyaW5nKCJUZXN0SW5kZXhlZFNldHRlclRo
cm93aW5nRXhjZXB0aW9uIl9zKSksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwg
SlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwogICAgIHB1dERpcmVjdCh2bSwgdm0u
cHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigwKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0
ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CiB9CiAKQEAg
LTE2NiwxMCArMTY2LDExIEBAIGJvb2wgSlNUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0
aW8KIAogdm9pZCBKU1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246OmdldE93blBy
b3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBzdGF0ZSwgUHJvcGVydHlO
YW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQogeworICAgIFZN
JiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0
SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uKj4ob2JqZWN0KTsKICAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKG9iamVjdCwgaW5mbygpKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
LCBjb3VudCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKS5sZW5ndGgoKTsgaSA8IGNvdW50OyArK2kp
Ci0gICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb20oc3RhdGUsIGkpKTsK
KyAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbSh2bSwgaSkpOwogICAg
IEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgc3RhdGUsIHByb3BlcnR5TmFt
ZXMsIG1vZGUpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNl
dHRlcldpdGhJZGVudGlmaWVyLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRp
Zmllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg2LDcgKzg2LDcgQEAgdGVtcGxhdGU8PiBKU1Zh
bHVlIEpTVGVzdEluZGV4ZWRTZXR0ZXJXaQogdGVtcGxhdGU8PiB2b2lkIEpTVGVzdEluZGV4ZWRT
ZXR0ZXJXaXRoSWRlbnRpZmllckNvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGllcyhWTSYg
dm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCiB7CiAgICAgcHV0RGlyZWN0KHZt
LCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRl
bnRpZmllcjo6cHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QpLCBKU0M6OlByb3BlcnR5QXR0cmli
dXRlOjpEb250RGVsZXRlIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6
OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7Ci0gICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9w
ZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcoJnZtLCBTdHJpbmcoIlRlc3RJbmRl
eGVkU2V0dGVyV2l0aElkZW50aWZpZXIiX3MpKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVh
ZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CisgICAgcHV0RGlyZWN0
KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcodm0sIFN0cmlu
ZygiVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllciJfcykpLCBKU0M6OlByb3BlcnR5QXR0
cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKICAg
ICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMCksIEpT
Qzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6
RG9udEVudW0pOwogfQogCkBAIC0xNzMsMTAgKzE3MywxMSBAQCBib29sIEpTVGVzdEluZGV4ZWRT
ZXR0ZXJXaXRoSWRlbnRpZmllcjo6CiAKIHZvaWQgSlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVu
dGlmaWVyOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSog
c3RhdGUsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUg
bW9kZSkKIHsKKyAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvKiB0aGlzT2JqZWN0
ID0ganNDYXN0PEpTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcio+KG9iamVjdCk7CiAg
ICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhvYmplY3QsIGluZm8oKSk7CiAgICAgZm9yICh1
bnNpZ25lZCBpID0gMCwgY291bnQgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCkubGVuZ3RoKCk7IGkg
PCBjb3VudDsgKytpKQotICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9t
KHN0YXRlLCBpKSk7CisgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb20o
dm0sIGkpKTsKICAgICBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIHN0YXRl
LCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5jcHAJ
KHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RJbnRlcmZhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzMsNyArMjczLDcg
QEAgdGVtcGxhdGU8PiBKU1ZhbHVlIEpTVGVzdEludGVyZmFjZUNvbnN0cgogdGVtcGxhdGU8PiB2
b2lkIEpTVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGllcyhWTSYg
dm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCiB7CiAgICAgcHV0RGlyZWN0KHZt
LCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdEludGVyZmFjZTo6cHJvdG90eXBl
KHZtLCBnbG9iYWxPYmplY3QpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwg
SlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRl
OjpEb250RW51bSk7Ci0gICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBq
c05vbnRyaXZpYWxTdHJpbmcoJnZtLCBTdHJpbmcoIlRlc3RJbnRlcmZhY2UiX3MpKSwgSlNDOjpQ
cm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250
RW51bSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRy
aXZpYWxTdHJpbmcodm0sIFN0cmluZygiVGVzdEludGVyZmFjZSJfcykpLCBKU0M6OlByb3BlcnR5
QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsK
ICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMSks
IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0
ZTo6RG9udEVudW0pOwogICAgIHJlaWZ5U3RhdGljUHJvcGVydGllcyh2bSwgSlNUZXN0SW50ZXJm
YWNlOjppbmZvKCksIEpTVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yVGFibGVWYWx1ZXMsICp0aGlz
KTsKIH0KQEAgLTUwOCw2ICs1MDgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VD
b25zdHJ1Y3RvCiAjaWYgRU5BQkxFKENvbmRpdGlvbjIyKSB8fCBFTkFCTEUoQ29uZGl0aW9uMjMp
CiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JJbXBsZW1l
bnRzU3RhdGljQXR0clNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlLCBUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlKQogeworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5V
U0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElE
TERPTVN0cmluZz4oc3RhdGUsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIGZhbHNlKTsKQEAgLTU2MSw2ICs1NjIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJ
bnRlcmZhY2VJbXBsZW1lbnRzCiAjaWYgRU5BQkxFKENvbmRpdGlvbjIyKSB8fCBFTkFCTEUoQ29u
ZGl0aW9uMjMpCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0SW50ZXJmYWNlSW1wbGVtZW50
c1N0cjJTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0SW50ZXJmYWNlJiB0aGlzT2JqZWN0
LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogeworICAgIFVOVVNFRF9Q
QVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGlt
cGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVy
dDxJRExET01TdHJpbmc+KHN0YXRlLCB2YWx1ZSk7CkBAIC01OTYsNiArNTk4LDcgQEAgRW5jb2Rl
ZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlSW1wbGVtZW50cwogI2lmIEVOQUJMRShDb25kaXRpb24y
MikgfHwgRU5BQkxFKENvbmRpdGlvbjIzKQogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdElu
dGVyZmFjZUltcGxlbWVudHNTdHIzU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEludGVy
ZmFjZSYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkK
IHsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KTsKICAgICB0aGlzT2JqZWN0LnNldEltcGxlbWVudHNTdHIzKHN0YXRlLCB2YWx1ZSk7CiAgICAg
cmV0dXJuIHRydWU7CkBAIC02MjgsNiArNjMxLDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0SW50
ZXJmYWNlSW1wbGVtZW50cwogI2lmIEVOQUJMRShDb25kaXRpb24yMikgfHwgRU5BQkxFKENvbmRp
dGlvbjIzKQogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEludGVyZmFjZUltcGxlbWVudHNO
b2RlU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEludGVyZmFjZSYgdGhpc09iamVjdCwg
SlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKKyAgICBVTlVTRURfUEFS
QU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBs
ID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8
SURMSW50ZXJmYWNlPE5vZGU+PihzdGF0ZSwgdmFsdWUsIFtdKEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0F0dHJpYnV0ZVR5cGVFcnJvcihzdGF0
ZSwgc2NvcGUsICJUZXN0SW50ZXJmYWNlIiwgImltcGxlbWVudHNOb2RlIiwgIk5vZGUiKTsgfSk7
CkBAIC02ODAsNiArNjg0LDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlQ29uc3Ry
dWN0bwogI2lmIEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENvbmRpdGlvbjEyKQogc3Rh
dGljIGlubGluZSBib29sIHNldEpTVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yU3VwcGxlbWVudGFs
U3RhdGljQXR0clNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKQogeworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERP
TVN0cmluZz4oc3RhdGUsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2Nv
cGUsIGZhbHNlKTsKQEAgLTczMyw2ICs3MzgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbnRl
cmZhY2VTdXBwbGVtZW50CiAjaWYgRU5BQkxFKENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0
aW9uMTIpCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFs
U3RyMlNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RJbnRlcmZhY2UmIHRoaXNPYmplY3Qs
IEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CisgICAgVU5VU0VEX1BB
UkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1w
bCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0
PElETERPTVN0cmluZz4oc3RhdGUsIHZhbHVlKTsKQEAgLTc2OCw2ICs3NzQsNyBAQCBFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50CiAjaWYgRU5BQkxFKENvbmRpdGlvbjEx
KSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIpCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0SW50
ZXJmYWNlU3VwcGxlbWVudGFsU3RyM1NldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RJbnRl
cmZhY2UmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUp
CiB7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7CiAgICAgdGhpc09iamVjdC5zZXRTdXBwbGVtZW50YWxTdHIzKHN0YXRlLCB2YWx1ZSk7CiAg
ICAgcmV0dXJuIHRydWU7CkBAIC04MDAsNiArODA3LDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0
SW50ZXJmYWNlU3VwcGxlbWVudAogI2lmIEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENv
bmRpdGlvbjEyKQogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEludGVyZmFjZVN1cHBsZW1l
bnRhbE5vZGVTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0SW50ZXJmYWNlJiB0aGlzT2Jq
ZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogeworICAgIFVOVVNF
RF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8m
IGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29u
dmVydDxJRExJbnRlcmZhY2U8Tm9kZT4+KHN0YXRlLCB2YWx1ZSwgW10oSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXR0cmlidXRlVHlwZUVycm9y
KHN0YXRlLCBzY29wZSwgIlRlc3RJbnRlcmZhY2UiLCAic3VwcGxlbWVudGFsTm9kZSIsICJOb2Rl
Iik7IH0pOwpAQCAtODM3LDYgKzg0NSw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFj
ZVJlZmxlY3RBdHQKICNpZiBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVOQUJMRShDb25kaXRpb24x
MikKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VSZWZsZWN0QXR0cmlidXRl
U2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEludGVyZmFjZSYgdGhpc09iamVjdCwgSlNW
YWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKKyAgICBVTlVTRURfUEFSQU0o
c3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0g
dGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURM
RE9NU3RyaW5nPihzdGF0ZSwgdmFsdWUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmUuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlTGVhZGlu
Z1VuZGVyc2NvcmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MSw3ICs4MSw3IEBAIHRlbXBsYXRl
PD4gSlNWYWx1ZSBKU1Rlc3RJbnRlcmZhY2VMZWFkaW4KIHRlbXBsYXRlPD4gdm9pZCBKU1Rlc3RJ
bnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZUNvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGll
cyhWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCiB7CiAgICAgcHV0RGly
ZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdEludGVyZmFjZUxlYWRp
bmdVbmRlcnNjb3JlOjpwcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCksIEpTQzo6UHJvcGVydHlB
dHRyaWJ1dGU6OkRvbnREZWxldGUgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8
IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKLSAgICBwdXREaXJlY3Qodm0sIHZt
LnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZygmdm0sIFN0cmluZygiVGVz
dEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlIl9zKSksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6
OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOworICAgIHB1dERp
cmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKHZtLCBT
dHJpbmcoIlRlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZSJfcykpLCBKU0M6OlByb3BlcnR5
QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsK
ICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMCks
IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0
ZTo6RG9udEVudW0pOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0SXRlcmFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJdGVyYWJsZS5jcHAJKHJldmlzaW9uIDI0
OTEyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJ
dGVyYWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg5LDcgKzg5LDcgQEAgdGVtcGxhdGU8PiBK
U1ZhbHVlIEpTVGVzdEl0ZXJhYmxlQ29uc3RydQogdGVtcGxhdGU8PiB2b2lkIEpTVGVzdEl0ZXJh
YmxlQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKFZNJiB2bSwgSlNET01HbG9iYWxP
YmplY3QmIGdsb2JhbE9iamVjdCkKIHsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFt
ZXMtPnByb3RvdHlwZSwgSlNUZXN0SXRlcmFibGU6OnByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0
KSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IEpTQzo6UHJvcGVydHlBdHRy
aWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwotICAg
IHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5n
KCZ2bSwgU3RyaW5nKCJUZXN0SXRlcmFibGUiX3MpKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6
UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CisgICAgcHV0RGly
ZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcodm0sIFN0
cmluZygiVGVzdEl0ZXJhYmxlIl9zKSksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5
IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwogICAgIHB1dERpcmVjdCh2bSwg
dm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigwKSwgSlNDOjpQcm9wZXJ0eUF0dHJp
YnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CiB9CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RKU0J1
aWx0aW5Db25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yLmNwcAkocmV2aXNp
b24gMjQ5MTI4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODUsNyArODUs
NyBAQCB0ZW1wbGF0ZTw+IEpTVmFsdWUgSlNUZXN0SlNCdWlsdGluQ29uc3RyCiB0ZW1wbGF0ZTw+
IHZvaWQgSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVBy
b3BlcnRpZXMoVk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQogewogICAg
IHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3RKU0J1aWx0
aW5Db25zdHJ1Y3Rvcjo6cHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QpLCBKU0M6OlByb3BlcnR5
QXR0cmlidXRlOjpEb250RGVsZXRlIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkg
fCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7Ci0gICAgcHV0RGlyZWN0KHZtLCB2
bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcoJnZtLCBTdHJpbmcoIlRl
c3RKU0J1aWx0aW5Db25zdHJ1Y3RvciJfcykpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFk
T25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKKyAgICBwdXREaXJlY3Qo
dm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZyh2bSwgU3RyaW5n
KCJUZXN0SlNCdWlsdGluQ29uc3RydWN0b3IiX3MpKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6
UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CiAgICAgcHV0RGly
ZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDApLCBKU0M6OlByb3Bl
cnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVt
KTsKIH0KIApAQCAtMjA4LDYgKzIwOCw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEpTQnVpbHRp
bkNvbnN0cnVjdG8KIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEpTQnVpbHRpbkNvbnN0
cnVjdG9yVGVzdEF0dHJpYnV0ZVJXQ3VzdG9tU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVz
dEpTQnVpbHRpbkNvbnN0cnVjdG9yJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKQogeworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOwogICAgIHRoaXNPYmplY3Quc2V0VGVzdEF0dHJpYnV0ZVJXQ3Vz
dG9tKHN0YXRlLCB2YWx1ZSk7CiAgICAgcmV0dXJuIHRydWU7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TWVkaWFRdWVyeUxp
c3RMaXN0ZW5lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg2LDcgKzg2LDcgQEAgdGVtcGxhdGU8
PiBKU1ZhbHVlIEpTVGVzdE1lZGlhUXVlcnlMaXN0TAogdGVtcGxhdGU8PiB2b2lkIEpTVGVzdE1l
ZGlhUXVlcnlMaXN0TGlzdGVuZXJDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMoVk0m
IHZtLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQogewogICAgIHB1dERpcmVjdCh2
bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3Rl
bmVyOjpwcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6
OkRvbnREZWxldGUgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJv
cGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKLSAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5
TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZygmdm0sIFN0cmluZygiVGVzdE1lZGlhUXVl
cnlMaXN0TGlzdGVuZXIiX3MpKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBK
U0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5w
cm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcodm0sIFN0cmluZygiVGVzdE1l
ZGlhUXVlcnlMaXN0TGlzdGVuZXIiX3MpKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9u
bHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CiAgICAgcHV0RGlyZWN0KHZt
LCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDApLCBKU0M6OlByb3BlcnR5QXR0
cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKIH0K
IApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5h
bWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNl
dHRlck5vSWRlbnRpZmllci5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lk
ZW50aWZpZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MSw3ICs4MSw3IEBAIHRlbXBsYXRlPD4g
SlNWYWx1ZSBKU1Rlc3ROYW1lZEFuZEluZGV4ZWQKIHRlbXBsYXRlPD4gdm9pZCBKU1Rlc3ROYW1l
ZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXJDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3Bl
cnRpZXMoVk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQogewogICAgIHB1
dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3ROYW1lZEFuZElu
ZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXI6OnByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KSwgSlND
OjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6
OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwotICAgIHB1dERp
cmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKCZ2bSwg
U3RyaW5nKCJUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyIl9zKSksIEpTQzo6
UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9u
dEVudW0pOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250
cml2aWFsU3RyaW5nKHZtLCBTdHJpbmcoIlRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50
aWZpZXIiX3MpKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3Bl
cnR5QXR0cmlidXRlOjpEb250RW51bSk7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5h
bWVzLT5sZW5ndGgsIGpzTnVtYmVyKDApLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25s
eSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKIH0KIApAQCAtMTY2LDYgKzE2
Niw3IEBAIGJvb2wgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGkKIAogYm9vbCBK
U1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXI6OmdldE93blByb3BlcnR5U2xv
dEJ5SW5kZXgoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBzdGF0ZSwgdW5zaWduZWQgaW5k
ZXgsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKKyAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAg
ICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5v
SWRlbnRpZmllcio+KG9iamVjdCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlz
T2JqZWN0LCBpbmZvKCkpOwogICAgIGlmIChMSUtFTFkoaW5kZXggPD0gTUFYX0FSUkFZX0lOREVY
KSkgewpAQCAtMTc2LDcgKzE3Nyw3IEBAIGJvb2wgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVy
Tm9JZGVudGkKICAgICAgICAgfQogICAgICAgICByZXR1cm4gSlNPYmplY3Q6OmdldE93blByb3Bl
cnR5U2xvdEJ5SW5kZXgob2JqZWN0LCBzdGF0ZSwgaW5kZXgsIHNsb3QpOwogICAgIH0KLSAgICBh
dXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb20oc3RhdGUsIGluZGV4KTsKKyAgICBh
dXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb20odm0sIGluZGV4KTsKICAgICB1c2lu
ZyBHZXR0ZXJJRExUeXBlID0gSURMRE9NU3RyaW5nOwogICAgIGF1dG8gZ2V0dGVyRnVuY3RvciA9
IFtdIChhdXRvJiB0aGlzT2JqZWN0LCBhdXRvIHByb3BlcnR5TmFtZSkgLT4gT3B0aW9uYWw8dHlw
ZW5hbWUgR2V0dGVySURMVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlPiB7CiAgICAgICAgIGF1dG8g
cmVzdWx0ID0gdGhpc09iamVjdC53cmFwcGVkKCkubmFtZWRJdGVtKHByb3BlcnR5TmFtZVRvQXRv
bVN0cmluZyhwcm9wZXJ0eU5hbWUpKTsKQEAgLTE5NCwxMiArMTk1LDEzIEBAIGJvb2wgSlNUZXN0
TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGkKIAogdm9pZCBKU1Rlc3ROYW1lZEFuZEluZGV4
ZWRTZXR0ZXJOb0lkZW50aWZpZXI6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVj
dCwgRXhlY1N0YXRlKiBzdGF0ZSwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVu
dW1lcmF0aW9uTW9kZSBtb2RlKQogeworICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1
dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVu
dGlmaWVyKj4ob2JqZWN0KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKG9iamVjdCwg
aW5mbygpKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwLCBjb3VudCA9IHRoaXNPYmplY3QtPndy
YXBwZWQoKS5sZW5ndGgoKTsgaSA8IGNvdW50OyArK2kpCi0gICAgICAgIHByb3BlcnR5TmFtZXMu
YWRkKElkZW50aWZpZXI6OmZyb20oc3RhdGUsIGkpKTsKKyAgICAgICAgcHJvcGVydHlOYW1lcy5h
ZGQoSWRlbnRpZmllcjo6ZnJvbSh2bSwgaSkpOwogICAgIGZvciAoYXV0byYgcHJvcGVydHlOYW1l
IDogdGhpc09iamVjdC0+d3JhcHBlZCgpLnN1cHBvcnRlZFByb3BlcnR5TmFtZXMoKSkKLSAgICAg
ICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhzdGF0ZSwgcHJvcGVy
dHlOYW1lKSk7CisgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb21TdHJp
bmcodm0sIHByb3BlcnR5TmFtZSkpOwogICAgIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVz
KG9iamVjdCwgc3RhdGUsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwogfQogCkBAIC0yMzMsNiArMjM1
LDcgQEAgYm9vbCBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aQogCiBib29sIEpT
VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllcjo6cHV0QnlJbmRleChKU0NlbGwq
IGNlbGwsIEV4ZWNTdGF0ZSogc3RhdGUsIHVuc2lnbmVkIGluZGV4LCBKU1ZhbHVlIHZhbHVlLCBi
b29sIHNob3VsZFRocm93KQogeworICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8q
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlm
aWVyKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBp
bmZvKCkpOwogCkBAIC0yNDQsOSArMjQ3LDkgQEAgYm9vbCBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRT
ZXR0ZXJOb0lkZW50aQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBhdXRvIHBy
b3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb20oc3RhdGUsIGluZGV4KTsKKyAgICBhdXRvIHBy
b3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb20odm0sIGluZGV4KTsKICAgICBQcm9wZXJ0eVNs
b3Qgc2xvdCB7IHRoaXNPYmplY3QsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpW
TUlucXVpcnkgfTsKLSAgICBKU1ZhbHVlIHByb3RvdHlwZSA9IHRoaXNPYmplY3QtPmdldFByb3Rv
dHlwZURpcmVjdChzdGF0ZS0+dm0oKSk7CisgICAgSlNWYWx1ZSBwcm90b3R5cGUgPSB0aGlzT2Jq
ZWN0LT5nZXRQcm90b3R5cGVEaXJlY3Qodm0pOwogICAgIGlmICghKHByb3RvdHlwZS5pc09iamVj
dCgpICYmIGFzT2JqZWN0KHByb3RvdHlwZSktPmdldFByb3BlcnR5U2xvdChzdGF0ZSwgcHJvcGVy
dHlOYW1lLCBzbG90KSkpIHsKICAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRShzdGF0ZS0+dm0oKSk7CiAgICAgICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0
PElETERPTVN0cmluZz4oKnN0YXRlLCB2YWx1ZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdF
eGNlcHRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5j
cHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTgxLDcgKzgxLDcgQEAgdGVtcGxhdGU8PiBKU1ZhbHVlIEpTVGVz
dE5hbWVkQW5kSW5kZXhlZAogdGVtcGxhdGU8PiB2b2lkIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNl
dHRlclRocm93aW5nRXhjZXB0aW9uQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKFZN
JiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKIHsKICAgICBwdXREaXJlY3Qo
dm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0
dGVyVGhyb3dpbmdFeGNlcHRpb246OnByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KSwgSlNDOjpQ
cm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJl
YWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwotICAgIHB1dERpcmVj
dCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKCZ2bSwgU3Ry
aW5nKCJUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24iX3MpKSwgSlND
OjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpE
b250RW51bSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05v
bnRyaXZpYWxTdHJpbmcodm0sIFN0cmluZygiVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93
aW5nRXhjZXB0aW9uIl9zKSksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlND
OjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJv
cGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigwKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6
UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CiB9CiAKQEAgLTE2
Niw2ICsxNjYsNyBAQCBib29sIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nCiAK
IGJvb2wgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246OmdldE93
blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBzdGF0ZSwg
dW5zaWduZWQgaW5kZXgsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKKyAgICBWTSYgdm0gPSBzdGF0
ZS0+dm0oKTsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkQW5kSW5k
ZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uKj4ob2JqZWN0KTsKICAgICBBU1NFUlRfR0NfT0JK
RUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgaWYgKExJS0VMWShpbmRleCA8
PSBNQVhfQVJSQVlfSU5ERVgpKSB7CkBAIC0xNzYsNyArMTc3LDcgQEAgYm9vbCBKU1Rlc3ROYW1l
ZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBKU09i
amVjdDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChvYmplY3QsIHN0YXRlLCBpbmRleCwgc2xv
dCk7CiAgICAgfQotICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbShzdGF0
ZSwgaW5kZXgpOworICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbSh2bSwg
aW5kZXgpOwogICAgIHVzaW5nIEdldHRlcklETFR5cGUgPSBJRExET01TdHJpbmc7CiAgICAgYXV0
byBnZXR0ZXJGdW5jdG9yID0gW10gKGF1dG8mIHRoaXNPYmplY3QsIGF1dG8gcHJvcGVydHlOYW1l
KSAtPiBPcHRpb25hbDx0eXBlbmFtZSBHZXR0ZXJJRExUeXBlOjpJbXBsZW1lbnRhdGlvblR5cGU+
IHsKICAgICAgICAgYXV0byByZXN1bHQgPSB0aGlzT2JqZWN0LndyYXBwZWQoKS5uYW1lZEl0ZW0o
cHJvcGVydHlOYW1lVG9BdG9tU3RyaW5nKHByb3BlcnR5TmFtZSkpOwpAQCAtMTk0LDEyICsxOTUs
MTMgQEAgYm9vbCBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZwogCiB2b2lkIEpT
VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uOjpnZXRPd25Qcm9wZXJ0
eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogc3RhdGUsIFByb3BlcnR5TmFtZUFy
cmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKKyAgICBWTSYgdm0g
PSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVk
QW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uKj4ob2JqZWN0KTsKICAgICBBU1NFUlRf
R0NfT0JKRUNUX0lOSEVSSVRTKG9iamVjdCwgaW5mbygpKTsKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwLCBjb3VudCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKS5sZW5ndGgoKTsgaSA8IGNvdW50OyAr
K2kpCi0gICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb20oc3RhdGUsIGkp
KTsKKyAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbSh2bSwgaSkpOwog
ICAgIGZvciAoYXV0byYgcHJvcGVydHlOYW1lIDogdGhpc09iamVjdC0+d3JhcHBlZCgpLnN1cHBv
cnRlZFByb3BlcnR5TmFtZXMoKSkKLSAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmll
cjo6ZnJvbVN0cmluZyhzdGF0ZSwgcHJvcGVydHlOYW1lKSk7CisgICAgICAgIHByb3BlcnR5TmFt
ZXMuYWRkKElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHByb3BlcnR5TmFtZSkpOwogICAgIEpT
T2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgc3RhdGUsIHByb3BlcnR5TmFtZXMs
IG1vZGUpOwogfQogCkBAIC0yMzMsNiArMjM1LDcgQEAgYm9vbCBKU1Rlc3ROYW1lZEFuZEluZGV4
ZWRTZXR0ZXJUaHJvd2luZwogCiBib29sIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93
aW5nRXhjZXB0aW9uOjpwdXRCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBzdGF0ZSwg
dW5zaWduZWQgaW5kZXgsIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCiB7CisgICAg
Vk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rl
c3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbio+KGNlbGwpOwogICAgIEFT
U0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKIApAQCAtMjQ0LDkg
KzI0Nyw5IEBAIGJvb2wgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmcKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlm
aWVyOjpmcm9tKHN0YXRlLCBpbmRleCk7CisgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlm
aWVyOjpmcm9tKHZtLCBpbmRleCk7CiAgICAgUHJvcGVydHlTbG90IHNsb3QgeyB0aGlzT2JqZWN0
LCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6Vk1JbnF1aXJ5IH07Ci0gICAgSlNW
YWx1ZSBwcm90b3R5cGUgPSB0aGlzT2JqZWN0LT5nZXRQcm90b3R5cGVEaXJlY3Qoc3RhdGUtPnZt
KCkpOworICAgIEpTVmFsdWUgcHJvdG90eXBlID0gdGhpc09iamVjdC0+Z2V0UHJvdG90eXBlRGly
ZWN0KHZtKTsKICAgICBpZiAoIShwcm90b3R5cGUuaXNPYmplY3QoKSAmJiBhc09iamVjdChwcm90
b3R5cGUpLT5nZXRQcm9wZXJ0eVNsb3Qoc3RhdGUsIHByb3BlcnR5TmFtZSwgc2xvdCkpKSB7CiAg
ICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoc3RhdGUtPnZtKCkp
OwogICAgICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KCpzdGF0
ZSwgdmFsdWUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRB
bmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRl
eGVkU2V0dGVyV2l0aElkZW50aWZpZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OCw3ICs4OCw3
IEBAIHRlbXBsYXRlPD4gSlNWYWx1ZSBKU1Rlc3ROYW1lZEFuZEluZGV4ZWQKIHRlbXBsYXRlPD4g
dm9pZCBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllckNvbnN0cnVjdG9y
Ojppbml0aWFsaXplUHJvcGVydGllcyhWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxP
YmplY3QpCiB7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUs
IEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyOjpwcm90b3R5cGUodm0s
IGdsb2JhbE9iamVjdCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUgfCBKU0M6
OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRv
bnRFbnVtKTsKLSAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9u
dHJpdmlhbFN0cmluZygmdm0sIFN0cmluZygiVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJ
ZGVudGlmaWVyIl9zKSksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQ
cm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVy
dHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKHZtLCBTdHJpbmcoIlRlc3ROYW1lZEFu
ZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllciJfcykpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRl
OjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKICAgICBwdXRE
aXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMCksIEpTQzo6UHJv
cGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVu
dW0pOwogfQogCkBAIC0xNzUsNiArMTc1LDcgQEAgYm9vbCBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRT
ZXR0ZXJXaXRoSWRlbgogCiBib29sIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVu
dGlmaWVyOjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNT
dGF0ZSogc3RhdGUsIHVuc2lnbmVkIGluZGV4LCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CisgICAg
Vk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rl
c3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcio+KG9iamVjdCk7CiAgICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogICAgIGlmIChMSUtF
TFkoaW5kZXggPD0gTUFYX0FSUkFZX0lOREVYKSkgewpAQCAtMTg1LDcgKzE4Niw3IEBAIGJvb2wg
SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW4KICAgICAgICAgfQogICAgICAgICBy
ZXR1cm4gSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgob2JqZWN0LCBzdGF0ZSwg
aW5kZXgsIHNsb3QpOwogICAgIH0KLSAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6
OmZyb20oc3RhdGUsIGluZGV4KTsKKyAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6
OmZyb20odm0sIGluZGV4KTsKICAgICB1c2luZyBHZXR0ZXJJRExUeXBlID0gSURMRE9NU3RyaW5n
OwogICAgIGF1dG8gZ2V0dGVyRnVuY3RvciA9IFtdIChhdXRvJiB0aGlzT2JqZWN0LCBhdXRvIHBy
b3BlcnR5TmFtZSkgLT4gT3B0aW9uYWw8dHlwZW5hbWUgR2V0dGVySURMVHlwZTo6SW1wbGVtZW50
YXRpb25UeXBlPiB7CiAgICAgICAgIGF1dG8gcmVzdWx0ID0gdGhpc09iamVjdC53cmFwcGVkKCku
bmFtZWRJdGVtKHByb3BlcnR5TmFtZVRvQXRvbVN0cmluZyhwcm9wZXJ0eU5hbWUpKTsKQEAgLTIw
MywxMiArMjA0LDEzIEBAIGJvb2wgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW4K
IAogdm9pZCBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6Z2V0T3du
UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIHN0YXRlLCBQcm9wZXJ0
eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7CisgICAg
Vk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rl
c3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcio+KG9iamVjdCk7CiAgICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUyhvYmplY3QsIGluZm8oKSk7CiAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMCwgY291bnQgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCkubGVuZ3RoKCk7IGkgPCBjb3Vu
dDsgKytpKQotICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9tKHN0YXRl
LCBpKSk7CisgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb20odm0sIGkp
KTsKICAgICBmb3IgKGF1dG8mIHByb3BlcnR5TmFtZSA6IHRoaXNPYmplY3QtPndyYXBwZWQoKS5z
dXBwb3J0ZWRQcm9wZXJ0eU5hbWVzKCkpCi0gICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50
aWZpZXI6OmZyb21TdHJpbmcoc3RhdGUsIHByb3BlcnR5TmFtZSkpOworICAgICAgICBwcm9wZXJ0
eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBwcm9wZXJ0eU5hbWUpKTsKICAg
ICBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIHN0YXRlLCBwcm9wZXJ0eU5h
bWVzLCBtb2RlKTsKIH0KIApAQCAtMjQyLDYgKzI0NCw3IEBAIGJvb2wgSlNUZXN0TmFtZWRBbmRJ
bmRleGVkU2V0dGVyV2l0aElkZW4KIAogYm9vbCBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJX
aXRoSWRlbnRpZmllcjo6cHV0QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogc3RhdGUs
IHVuc2lnbmVkIGluZGV4LCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93KQogeworICAg
IFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNU
ZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIqPihjZWxsKTsKICAgICBBU1NF
UlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAKQEAgLTI1Myw5ICsy
NTYsOSBAQCBib29sIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVuCiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmll
cjo6ZnJvbShzdGF0ZSwgaW5kZXgpOworICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmll
cjo6ZnJvbSh2bSwgaW5kZXgpOwogICAgIFByb3BlcnR5U2xvdCBzbG90IHsgdGhpc09iamVjdCwg
UHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6OlZNSW5xdWlyeSB9OwotICAgIEpTVmFs
dWUgcHJvdG90eXBlID0gdGhpc09iamVjdC0+Z2V0UHJvdG90eXBlRGlyZWN0KHN0YXRlLT52bSgp
KTsKKyAgICBKU1ZhbHVlIHByb3RvdHlwZSA9IHRoaXNPYmplY3QtPmdldFByb3RvdHlwZURpcmVj
dCh2bSk7CiAgICAgaWYgKCEocHJvdG90eXBlLmlzT2JqZWN0KCkgJiYgYXNPYmplY3QocHJvdG90
eXBlKS0+Z2V0UHJvcGVydHlTbG90KHN0YXRlLCBwcm9wZXJ0eU5hbWUsIHNsb3QpKSkgewogICAg
ICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHN0YXRlLT52bSgpKTsK
ICAgICAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqc3RhdGUs
IHZhbHVlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3ROYW1lZENvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvci5jcHAJKHJldmlz
aW9uIDI0OTEyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3ROYW1lZENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODIsNyArODIsNyBA
QCB0ZW1wbGF0ZTw+IEpTVmFsdWUgSlNUZXN0TmFtZWRDb25zdHJ1Y3RvCiB0ZW1wbGF0ZTw+IHZv
aWQgSlNUZXN0TmFtZWRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGll
cyhWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCiB7CiAgICAgcHV0RGly
ZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdE5hbWVkQ29uc3RydWN0
b3I6OnByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6
RG9udERlbGV0ZSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9w
ZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwotICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlO
YW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKCZ2bSwgU3RyaW5nKCJUZXN0TmFtZWRDb25z
dHJ1Y3RvciJfcykpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJv
cGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5
TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZyh2bSwgU3RyaW5nKCJUZXN0TmFtZWRDb25z
dHJ1Y3RvciJfcykpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJv
cGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5
TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRP
bmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwogfQogCkBAIC0xMTYsNyAr
MTE2LDcgQEAgdGVtcGxhdGU8PiBKU1ZhbHVlIEpTVGVzdE5hbWVkQ29uc3RydWN0bwogdGVtcGxh
dGU8PiB2b2lkIEpTVGVzdE5hbWVkQ29uc3RydWN0b3JOYW1lZENvbnN0cnVjdG9yOjppbml0aWFs
aXplUHJvcGVydGllcyhWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCiB7
CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdE5h
bWVkQ29uc3RydWN0b3I6OnByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KSwgSlNDOjpQcm9wZXJ0
eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5
IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwotICAgIHB1dERpcmVjdCh2bSwg
dm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKCZ2bSwgU3RyaW5nKCJB
dWRpbyJfcykpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVy
dHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFt
ZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZyh2bSwgU3RyaW5nKCJBdWRpbyJfcykpLCBKU0M6
OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRv
bnRFbnVtKTsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNO
dW1iZXIoMCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0
eUF0dHJpYnV0ZTo6RG9udEVudW0pOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
TmFtZWREZWxldGVyTm9JZGVudGlmaWVyLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkRGVsZXRlck5vSWRl
bnRpZmllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwLDcgKzgwLDcgQEAgdGVtcGxhdGU8PiBK
U1ZhbHVlIEpTVGVzdE5hbWVkRGVsZXRlck5vSQogdGVtcGxhdGU8PiB2b2lkIEpTVGVzdE5hbWVk
RGVsZXRlck5vSWRlbnRpZmllckNvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGllcyhWTSYg
dm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCiB7CiAgICAgcHV0RGlyZWN0KHZt
LCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdE5hbWVkRGVsZXRlck5vSWRlbnRp
Zmllcjo6cHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRl
OjpEb250RGVsZXRlIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlBy
b3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7Ci0gICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0
eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcoJnZtLCBTdHJpbmcoIlRlc3ROYW1lZERl
bGV0ZXJOb0lkZW50aWZpZXIiX3MpKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkg
fCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CisgICAgcHV0RGlyZWN0KHZtLCB2
bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcodm0sIFN0cmluZygiVGVz
dE5hbWVkRGVsZXRlck5vSWRlbnRpZmllciJfcykpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpS
ZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKICAgICBwdXREaXJl
Y3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMCksIEpTQzo6UHJvcGVy
dHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0p
OwogfQogCkBAIC0xNTcsOSArMTU3LDEwIEBAIGJvb2wgSlNUZXN0TmFtZWREZWxldGVyTm9JZGVu
dGlmaWVyOjpnZXQKIAogYm9vbCBKU1Rlc3ROYW1lZERlbGV0ZXJOb0lkZW50aWZpZXI6OmdldE93
blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBzdGF0ZSwg
dW5zaWduZWQgaW5kZXgsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKKyAgICBWTSYgdm0gPSBzdGF0
ZS0+dm0oKTsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkRGVsZXRl
ck5vSWRlbnRpZmllcio+KG9iamVjdCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0
aGlzT2JqZWN0LCBpbmZvKCkpOwotICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6
ZnJvbShzdGF0ZSwgaW5kZXgpOworICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6
ZnJvbSh2bSwgaW5kZXgpOwogICAgIHVzaW5nIEdldHRlcklETFR5cGUgPSBJRExET01TdHJpbmc7
CiAgICAgYXV0byBnZXR0ZXJGdW5jdG9yID0gW10gKGF1dG8mIHRoaXNPYmplY3QsIGF1dG8gcHJv
cGVydHlOYW1lKSAtPiBPcHRpb25hbDx0eXBlbmFtZSBHZXR0ZXJJRExUeXBlOjpJbXBsZW1lbnRh
dGlvblR5cGU+IHsKICAgICAgICAgYXV0byByZXN1bHQgPSB0aGlzT2JqZWN0LndyYXBwZWQoKS5u
YW1lZEl0ZW0ocHJvcGVydHlOYW1lVG9BdG9tU3RyaW5nKHByb3BlcnR5TmFtZSkpOwpAQCAtMTc3
LDEwICsxNzgsMTEgQEAgYm9vbCBKU1Rlc3ROYW1lZERlbGV0ZXJOb0lkZW50aWZpZXI6OmdldAog
CiB2b2lkIEpTVGVzdE5hbWVkRGVsZXRlck5vSWRlbnRpZmllcjo6Z2V0T3duUHJvcGVydHlOYW1l
cyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIHN0YXRlLCBQcm9wZXJ0eU5hbWVBcnJheSYg
cHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7CisgICAgVk0mIHZtID0gc3Rh
dGUtPnZtKCk7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZERlbGV0
ZXJOb0lkZW50aWZpZXIqPihvYmplY3QpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMo
b2JqZWN0LCBpbmZvKCkpOwogICAgIGZvciAoYXV0byYgcHJvcGVydHlOYW1lIDogdGhpc09iamVj
dC0+d3JhcHBlZCgpLnN1cHBvcnRlZFByb3BlcnR5TmFtZXMoKSkKLSAgICAgICAgcHJvcGVydHlO
YW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhzdGF0ZSwgcHJvcGVydHlOYW1lKSk7Cisg
ICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHByb3Bl
cnR5TmFtZSkpOwogICAgIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgc3Rh
dGUsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwogfQogCkBAIC0xOTgsNyArMjAwLDggQEAgYm9vbCBK
U1Rlc3ROYW1lZERlbGV0ZXJOb0lkZW50aWZpZXI6OmRlbAogewogICAgIGF1dG8mIHRoaXNPYmpl
Y3QgPSAqanNDYXN0PEpTVGVzdE5hbWVkRGVsZXRlck5vSWRlbnRpZmllcio+KGNlbGwpOwogICAg
IGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBhdXRvIHByb3BlcnR5TmFt
ZSA9IElkZW50aWZpZXI6OmZyb20oc3RhdGUsIGluZGV4KTsKKyAgICBWTSYgdm0gPSBzdGF0ZS0+
dm0oKTsKKyAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb20odm0sIGluZGV4
KTsKICAgICBpZiAoaXNWaXNpYmxlTmFtZWRQcm9wZXJ0eTxPdmVycmlkZUJ1aWx0aW5zOjpObz4o
KnN0YXRlLCB0aGlzT2JqZWN0LCBwcm9wZXJ0eU5hbWUpKSB7CiAgICAgICAgIHJldHVybiBpbXBs
LmRlbGV0ZU5hbWVkUHJvcGVydHkocHJvcGVydHlOYW1lVG9TdHJpbmcocHJvcGVydHlOYW1lKSk7
CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE5hbWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxldGVyVGhy
b3dpbmdFeGNlcHRpb24uY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxldGVyVGhyb3dpbmdFeGNlcHRp
b24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MCw3ICs4MCw3IEBAIHRlbXBsYXRlPD4gSlNWYWx1
ZSBKU1Rlc3ROYW1lZERlbGV0ZXJUaHIKIHRlbXBsYXRlPD4gdm9pZCBKU1Rlc3ROYW1lZERlbGV0
ZXJUaHJvd2luZ0V4Y2VwdGlvbkNvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGllcyhWTSYg
dm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCiB7CiAgICAgcHV0RGlyZWN0KHZt
LCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdE5hbWVkRGVsZXRlclRocm93aW5n
RXhjZXB0aW9uOjpwcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCksIEpTQzo6UHJvcGVydHlBdHRy
aWJ1dGU6OkRvbnREZWxldGUgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpT
Qzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKLSAgICBwdXREaXJlY3Qodm0sIHZtLnBy
b3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZygmdm0sIFN0cmluZygiVGVzdE5h
bWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9uIl9zKSksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6
OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOworICAgIHB1dERp
cmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKHZtLCBT
dHJpbmcoIlRlc3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbiJfcykpLCBKU0M6OlByb3Bl
cnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVt
KTsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIo
MCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJp
YnV0ZTo6RG9udEVudW0pOwogfQogCkBAIC0xNTcsOSArMTU3LDEwIEBAIGJvb2wgSlNUZXN0TmFt
ZWREZWxldGVyVGhyb3dpbmdFeGNlcHRpb24KIAogYm9vbCBKU1Rlc3ROYW1lZERlbGV0ZXJUaHJv
d2luZ0V4Y2VwdGlvbjo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU09iamVjdCogb2JqZWN0
LCBFeGVjU3RhdGUqIHN0YXRlLCB1bnNpZ25lZCBpbmRleCwgUHJvcGVydHlTbG90JiBzbG90KQog
eworICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8SlNUZXN0TmFtZWREZWxldGVyVGhyb3dpbmdFeGNlcHRpb24qPihvYmplY3QpOwogICAgIEFT
U0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKLSAgICBhdXRvIHBy
b3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb20oc3RhdGUsIGluZGV4KTsKKyAgICBhdXRvIHBy
b3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb20odm0sIGluZGV4KTsKICAgICB1c2luZyBHZXR0
ZXJJRExUeXBlID0gSURMRE9NU3RyaW5nOwogICAgIGF1dG8gZ2V0dGVyRnVuY3RvciA9IFtdIChh
dXRvJiB0aGlzT2JqZWN0LCBhdXRvIHByb3BlcnR5TmFtZSkgLT4gT3B0aW9uYWw8dHlwZW5hbWUg
R2V0dGVySURMVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlPiB7CiAgICAgICAgIGF1dG8gcmVzdWx0
ID0gdGhpc09iamVjdC53cmFwcGVkKCkubmFtZWRJdGVtKHByb3BlcnR5TmFtZVRvQXRvbVN0cmlu
Zyhwcm9wZXJ0eU5hbWUpKTsKQEAgLTE3NywxMCArMTc4LDExIEBAIGJvb2wgSlNUZXN0TmFtZWRE
ZWxldGVyVGhyb3dpbmdFeGNlcHRpb24KIAogdm9pZCBKU1Rlc3ROYW1lZERlbGV0ZXJUaHJvd2lu
Z0V4Y2VwdGlvbjo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3Rh
dGUqIHN0YXRlLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25N
b2RlIG1vZGUpCiB7CisgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byogdGhpc09i
amVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbio+KG9iamVj
dCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhvYmplY3QsIGluZm8oKSk7CiAgICAg
Zm9yIChhdXRvJiBwcm9wZXJ0eU5hbWUgOiB0aGlzT2JqZWN0LT53cmFwcGVkKCkuc3VwcG9ydGVk
UHJvcGVydHlOYW1lcygpKQotICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHN0YXRlLCBwcm9wZXJ0eU5hbWUpKTsKKyAgICAgICAgcHJvcGVydHlOYW1lcy5h
ZGQoSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcHJvcGVydHlOYW1lKSk7CiAgICAgSlNPYmpl
Y3Q6OmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBzdGF0ZSwgcHJvcGVydHlOYW1lcywgbW9k
ZSk7CiB9CiAKQEAgLTIwNSw3ICsyMDcsOCBAQCBib29sIEpTVGVzdE5hbWVkRGVsZXRlclRocm93
aW5nRXhjZXB0aW9uCiB7CiAgICAgYXV0byYgdGhpc09iamVjdCA9ICpqc0Nhc3Q8SlNUZXN0TmFt
ZWREZWxldGVyVGhyb3dpbmdFeGNlcHRpb24qPihjZWxsKTsKICAgICBhdXRvJiBpbXBsID0gdGhp
c09iamVjdC53cmFwcGVkKCk7Ci0gICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpm
cm9tKHN0YXRlLCBpbmRleCk7CisgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CisgICAgYXV0byBw
cm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tKHZtLCBpbmRleCk7CiAgICAgaWYgKGlzVmlz
aWJsZU5hbWVkUHJvcGVydHk8T3ZlcnJpZGVCdWlsdGluczo6Tm8+KCpzdGF0ZSwgdGhpc09iamVj
dCwgcHJvcGVydHlOYW1lKSkgewogICAgICAgICBhdXRvIHJlc3VsdCA9IGltcGwuZGVsZXRlTmFt
ZWRQcm9wZXJ0eShwcm9wZXJ0eU5hbWVUb1N0cmluZyhwcm9wZXJ0eU5hbWUpKTsKICAgICAgICAg
aWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXIuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxldGVy
V2l0aElkZW50aWZpZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NSw3ICs4NSw3IEBAIHRlbXBs
YXRlPD4gSlNWYWx1ZSBKU1Rlc3ROYW1lZERlbGV0ZXJXaXQKIHRlbXBsYXRlPD4gdm9pZCBKU1Rl
c3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllckNvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVy
dGllcyhWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCiB7CiAgICAgcHV0
RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdE5hbWVkRGVsZXRl
cldpdGhJZGVudGlmaWVyOjpwcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCksIEpTQzo6UHJvcGVy
dHlBdHRyaWJ1dGU6OkRvbnREZWxldGUgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25s
eSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKLSAgICBwdXREaXJlY3Qodm0s
IHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZygmdm0sIFN0cmluZygi
VGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyIl9zKSksIEpTQzo6UHJvcGVydHlBdHRyaWJ1
dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOworICAgIHB1
dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKHZt
LCBTdHJpbmcoIlRlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllciJfcykpLCBKU0M6OlByb3Bl
cnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVt
KTsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIo
MCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJp
YnV0ZTo6RG9udEVudW0pOwogfQogCkBAIC0xNjMsOSArMTYzLDEwIEBAIGJvb2wgSlNUZXN0TmFt
ZWREZWxldGVyV2l0aElkZW50aWZpZXI6OmcKIAogYm9vbCBKU1Rlc3ROYW1lZERlbGV0ZXJXaXRo
SWRlbnRpZmllcjo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU09iamVjdCogb2JqZWN0LCBF
eGVjU3RhdGUqIHN0YXRlLCB1bnNpZ25lZCBpbmRleCwgUHJvcGVydHlTbG90JiBzbG90KQogewor
ICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
SlNUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXIqPihvYmplY3QpOwogICAgIEFTU0VSVF9H
Q19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKLSAgICBhdXRvIHByb3BlcnR5
TmFtZSA9IElkZW50aWZpZXI6OmZyb20oc3RhdGUsIGluZGV4KTsKKyAgICBhdXRvIHByb3BlcnR5
TmFtZSA9IElkZW50aWZpZXI6OmZyb20odm0sIGluZGV4KTsKICAgICB1c2luZyBHZXR0ZXJJRExU
eXBlID0gSURMRE9NU3RyaW5nOwogICAgIGF1dG8gZ2V0dGVyRnVuY3RvciA9IFtdIChhdXRvJiB0
aGlzT2JqZWN0LCBhdXRvIHByb3BlcnR5TmFtZSkgLT4gT3B0aW9uYWw8dHlwZW5hbWUgR2V0dGVy
SURMVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlPiB7CiAgICAgICAgIGF1dG8gcmVzdWx0ID0gdGhp
c09iamVjdC53cmFwcGVkKCkubmFtZWRJdGVtKHByb3BlcnR5TmFtZVRvQXRvbVN0cmluZyhwcm9w
ZXJ0eU5hbWUpKTsKQEAgLTE4MywxMCArMTg0LDExIEBAIGJvb2wgSlNUZXN0TmFtZWREZWxldGVy
V2l0aElkZW50aWZpZXI6OmcKIAogdm9pZCBKU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmll
cjo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIHN0YXRl
LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUp
CiB7CisgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpz
Q2FzdDxKU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllcio+KG9iamVjdCk7CiAgICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUyhvYmplY3QsIGluZm8oKSk7CiAgICAgZm9yIChhdXRvJiBw
cm9wZXJ0eU5hbWUgOiB0aGlzT2JqZWN0LT53cmFwcGVkKCkuc3VwcG9ydGVkUHJvcGVydHlOYW1l
cygpKQotICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHN0
YXRlLCBwcm9wZXJ0eU5hbWUpKTsKKyAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmll
cjo6ZnJvbVN0cmluZyh2bSwgcHJvcGVydHlOYW1lKSk7CiAgICAgSlNPYmplY3Q6OmdldE93blBy
b3BlcnR5TmFtZXMob2JqZWN0LCBzdGF0ZSwgcHJvcGVydHlOYW1lcywgbW9kZSk7CiB9CiAKQEAg
LTIwNSw3ICsyMDcsOCBAQCBib29sIEpTVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyOjpk
CiB7CiAgICAgYXV0byYgdGhpc09iamVjdCA9ICpqc0Nhc3Q8SlNUZXN0TmFtZWREZWxldGVyV2l0
aElkZW50aWZpZXIqPihjZWxsKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVk
KCk7Ci0gICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tKHN0YXRlLCBpbmRl
eCk7CisgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CisgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJ
ZGVudGlmaWVyOjpmcm9tKHZtLCBpbmRleCk7CiAgICAgaWYgKGlzVmlzaWJsZU5hbWVkUHJvcGVy
dHk8T3ZlcnJpZGVCdWlsdGluczo6Tm8+KCpzdGF0ZSwgdGhpc09iamVjdCwgcHJvcGVydHlOYW1l
KSkgewogICAgICAgICBpbXBsLm5hbWVkRGVsZXRlcihwcm9wZXJ0eU5hbWVUb1N0cmluZyhwcm9w
ZXJ0eU5hbWUpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRlci5jcHAJKHJldmlzaW9uIDI0
OTEyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RO
YW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgxLDcg
KzgxLDcgQEAgdGVtcGxhdGU8PiBKU1ZhbHVlIEpTVGVzdE5hbWVkRGVsZXRlcldpdAogdGVtcGxh
dGU8PiB2b2lkIEpTVGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVkR2V0dGVyQ29uc3RydWN0b3I6
OmluaXRpYWxpemVQcm9wZXJ0aWVzKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9i
amVjdCkKIHsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwg
SlNUZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXI6OnByb3RvdHlwZSh2bSwgZ2xvYmFs
T2JqZWN0KSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IEpTQzo6UHJvcGVy
dHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0p
OwotICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFs
U3RyaW5nKCZ2bSwgU3RyaW5nKCJUZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXIiX3Mp
KSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmli
dXRlOjpEb250RW51bSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1l
LCBqc05vbnRyaXZpYWxTdHJpbmcodm0sIFN0cmluZygiVGVzdE5hbWVkRGVsZXRlcldpdGhJbmRl
eGVkR2V0dGVyIl9zKSksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQ
cm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVy
dHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigwKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVh
ZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CiB9CiAKQEAgLTE2Niw2
ICsxNjYsNyBAQCBib29sIEpTVGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVkR2V0dGVyCiAKIGJv
b2wgSlNUZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXI6OmdldE93blByb3BlcnR5U2xv
dEJ5SW5kZXgoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBzdGF0ZSwgdW5zaWduZWQgaW5k
ZXgsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKKyAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAg
ICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVk
R2V0dGVyKj4ob2JqZWN0KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmpl
Y3QsIGluZm8oKSk7CiAgICAgaWYgKExJS0VMWShpbmRleCA8PSBNQVhfQVJSQVlfSU5ERVgpKSB7
CkBAIC0xNzYsNyArMTc3LDcgQEAgYm9vbCBKU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdl
dHRlcgogICAgICAgICB9CiAgICAgICAgIHJldHVybiBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlT
bG90QnlJbmRleChvYmplY3QsIHN0YXRlLCBpbmRleCwgc2xvdCk7CiAgICAgfQotICAgIGF1dG8g
cHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbShzdGF0ZSwgaW5kZXgpOworICAgIGF1dG8g
cHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbSh2bSwgaW5kZXgpOwogICAgIHVzaW5nIEdl
dHRlcklETFR5cGUgPSBJRExET01TdHJpbmc7CiAgICAgYXV0byBnZXR0ZXJGdW5jdG9yID0gW10g
KGF1dG8mIHRoaXNPYmplY3QsIGF1dG8gcHJvcGVydHlOYW1lKSAtPiBPcHRpb25hbDx0eXBlbmFt
ZSBHZXR0ZXJJRExUeXBlOjpJbXBsZW1lbnRhdGlvblR5cGU+IHsKICAgICAgICAgYXV0byByZXN1
bHQgPSB0aGlzT2JqZWN0LndyYXBwZWQoKS5uYW1lZEl0ZW0ocHJvcGVydHlOYW1lVG9BdG9tU3Ry
aW5nKHByb3BlcnR5TmFtZSkpOwpAQCAtMTk0LDEyICsxOTUsMTMgQEAgYm9vbCBKU1Rlc3ROYW1l
ZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRlcgogCiB2b2lkIEpTVGVzdE5hbWVkRGVsZXRlcldpdGhJ
bmRleGVkR2V0dGVyOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNT
dGF0ZSogc3RhdGUsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlv
bk1vZGUgbW9kZSkKIHsKKyAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvKiB0aGlz
T2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVkR2V0dGVyKj4ob2Jq
ZWN0KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKG9iamVjdCwgaW5mbygpKTsKICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwLCBjb3VudCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKS5sZW5n
dGgoKTsgaSA8IGNvdW50OyArK2kpCi0gICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZp
ZXI6OmZyb20oc3RhdGUsIGkpKTsKKyAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmll
cjo6ZnJvbSh2bSwgaSkpOwogICAgIGZvciAoYXV0byYgcHJvcGVydHlOYW1lIDogdGhpc09iamVj
dC0+d3JhcHBlZCgpLnN1cHBvcnRlZFByb3BlcnR5TmFtZXMoKSkKLSAgICAgICAgcHJvcGVydHlO
YW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhzdGF0ZSwgcHJvcGVydHlOYW1lKSk7Cisg
ICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHByb3Bl
cnR5TmFtZSkpOwogICAgIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgc3Rh
dGUsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5h
bWVkR2V0dGVyQ2FsbFdpdGguY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTgwLDcgKzgwLDcgQEAgdGVtcGxhdGU8PiBKU1ZhbHVlIEpTVGVz
dE5hbWVkR2V0dGVyQ2FsbAogdGVtcGxhdGU8PiB2b2lkIEpTVGVzdE5hbWVkR2V0dGVyQ2FsbFdp
dGhDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMoVk0mIHZtLCBKU0RPTUdsb2JhbE9i
amVjdCYgZ2xvYmFsT2JqZWN0KQogewogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1l
cy0+cHJvdG90eXBlLCBKU1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoOjpwcm90b3R5cGUodm0sIGds
b2JhbE9iamVjdCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUgfCBKU0M6OlBy
b3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRF
bnVtKTsKLSAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJp
dmlhbFN0cmluZygmdm0sIFN0cmluZygiVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGgiX3MpKSwgSlND
OjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpE
b250RW51bSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05v
bnRyaXZpYWxTdHJpbmcodm0sIFN0cmluZygiVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGgiX3MpKSwg
SlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRl
OjpEb250RW51bSk7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgs
IGpzTnVtYmVyKDApLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJv
cGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKIH0KIApAQCAtMTU3LDkgKzE1NywxMCBAQCBib29s
IEpTVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGg6OmdldE93blByCiAKIGJvb2wgSlNUZXN0TmFtZWRH
ZXR0ZXJDYWxsV2l0aDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU09iamVjdCogb2JqZWN0
LCBFeGVjU3RhdGUqIHN0YXRlLCB1bnNpZ25lZCBpbmRleCwgUHJvcGVydHlTbG90JiBzbG90KQog
eworICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8SlNUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aCo+KG9iamVjdCk7CiAgICAgQVNTRVJUX0dDX09C
SkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwotICAgIGF1dG8gcHJvcGVydHlOYW1l
ID0gSWRlbnRpZmllcjo6ZnJvbShzdGF0ZSwgaW5kZXgpOworICAgIGF1dG8gcHJvcGVydHlOYW1l
ID0gSWRlbnRpZmllcjo6ZnJvbSh2bSwgaW5kZXgpOwogICAgIHVzaW5nIEdldHRlcklETFR5cGUg
PSBJRExET01TdHJpbmc7CiAgICAgYXV0byBnZXR0ZXJGdW5jdG9yID0gW10gKGF1dG8mIHRoaXNP
YmplY3QsIGF1dG8gcHJvcGVydHlOYW1lKSAtPiBPcHRpb25hbDx0eXBlbmFtZSBHZXR0ZXJJRExU
eXBlOjpJbXBsZW1lbnRhdGlvblR5cGU+IHsKICAgICAgICAgYXV0byByZXN1bHQgPSB0aGlzT2Jq
ZWN0LndyYXBwZWQoKS5uYW1lZEl0ZW0od29ybGRGb3JET01PYmplY3QodGhpc09iamVjdCksIHBy
b3BlcnR5TmFtZVRvQXRvbVN0cmluZyhwcm9wZXJ0eU5hbWUpKTsKQEAgLTE3NywxMCArMTc4LDEx
IEBAIGJvb2wgSlNUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aDo6Z2V0T3duUHIKIAogdm9pZCBKU1Rl
c3ROYW1lZEdldHRlckNhbGxXaXRoOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmpl
Y3QsIEV4ZWNTdGF0ZSogc3RhdGUsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBF
bnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKKyAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBh
dXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGgqPihvYmpl
Y3QpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMob2JqZWN0LCBpbmZvKCkpOwogICAg
IGZvciAoYXV0byYgcHJvcGVydHlOYW1lIDogdGhpc09iamVjdC0+d3JhcHBlZCgpLnN1cHBvcnRl
ZFByb3BlcnR5TmFtZXMoKSkKLSAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6
ZnJvbVN0cmluZyhzdGF0ZSwgcHJvcGVydHlOYW1lKSk7CisgICAgICAgIHByb3BlcnR5TmFtZXMu
YWRkKElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHByb3BlcnR5TmFtZSkpOwogICAgIEpTT2Jq
ZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgc3RhdGUsIHByb3BlcnR5TmFtZXMsIG1v
ZGUpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEdldHRlck5vSWRlbnRp
Zmllci5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTgwLDcgKzgwLDcgQEAgdGVtcGxhdGU8PiBKU1ZhbHVlIEpTVGVzdE5hbWVkR2V0
dGVyTm9JZAogdGVtcGxhdGU8PiB2b2lkIEpTVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyQ29u
c3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3Qm
IGdsb2JhbE9iamVjdCkKIHsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnBy
b3RvdHlwZSwgSlNUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXI6OnByb3RvdHlwZSh2bSwgZ2xv
YmFsT2JqZWN0KSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IEpTQzo6UHJv
cGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVu
dW0pOwotICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2
aWFsU3RyaW5nKCZ2bSwgU3RyaW5nKCJUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXIiX3MpKSwg
SlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRl
OjpEb250RW51bSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBq
c05vbnRyaXZpYWxTdHJpbmcodm0sIFN0cmluZygiVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVy
Il9zKSksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0
dHJpYnV0ZTo6RG9udEVudW0pOwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+
bGVuZ3RoLCBqc051bWJlcigwKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBK
U0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CiB9CiAKQEAgLTE1Nyw5ICsxNTcsMTAg
QEAgYm9vbCBKU1Rlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllcjo6Z2V0TwogCiBib29sIEpTVGVz
dE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyOjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTT2Jq
ZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogc3RhdGUsIHVuc2lnbmVkIGluZGV4LCBQcm9wZXJ0eVNs
b3QmIHNsb3QpCiB7CisgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byogdGhpc09i
amVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllcio+KG9iamVjdCk7CiAg
ICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwotICAgIGF1
dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbShzdGF0ZSwgaW5kZXgpOworICAgIGF1
dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbSh2bSwgaW5kZXgpOwogICAgIHVzaW5n
IEdldHRlcklETFR5cGUgPSBJRExET01TdHJpbmc7CiAgICAgYXV0byBnZXR0ZXJGdW5jdG9yID0g
W10gKGF1dG8mIHRoaXNPYmplY3QsIGF1dG8gcHJvcGVydHlOYW1lKSAtPiBPcHRpb25hbDx0eXBl
bmFtZSBHZXR0ZXJJRExUeXBlOjpJbXBsZW1lbnRhdGlvblR5cGU+IHsKICAgICAgICAgYXV0byBy
ZXN1bHQgPSB0aGlzT2JqZWN0LndyYXBwZWQoKS5uYW1lZEl0ZW0ocHJvcGVydHlOYW1lVG9BdG9t
U3RyaW5nKHByb3BlcnR5TmFtZSkpOwpAQCAtMTc3LDEwICsxNzgsMTEgQEAgYm9vbCBKU1Rlc3RO
YW1lZEdldHRlck5vSWRlbnRpZmllcjo6Z2V0TwogCiB2b2lkIEpTVGVzdE5hbWVkR2V0dGVyTm9J
ZGVudGlmaWVyOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0
ZSogc3RhdGUsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1v
ZGUgbW9kZSkKIHsKKyAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvKiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyKj4ob2JqZWN0KTsKICAg
ICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKG9iamVjdCwgaW5mbygpKTsKICAgICBmb3IgKGF1
dG8mIHByb3BlcnR5TmFtZSA6IHRoaXNPYmplY3QtPndyYXBwZWQoKS5zdXBwb3J0ZWRQcm9wZXJ0
eU5hbWVzKCkpCi0gICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb21TdHJp
bmcoc3RhdGUsIHByb3BlcnR5TmFtZSkpOworICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBwcm9wZXJ0eU5hbWUpKTsKICAgICBKU09iamVjdDo6Z2V0
T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIHN0YXRlLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKIH0K
IApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5h
bWVkR2V0dGVyV2l0aElkZW50aWZpZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVy
LmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC04NSw3ICs4NSw3IEBAIHRlbXBsYXRlPD4gSlNWYWx1ZSBKU1Rlc3ROYW1lZEdldHRl
cldpdGgKIHRlbXBsYXRlPD4gdm9pZCBKU1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyQ29u
c3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3Qm
IGdsb2JhbE9iamVjdCkKIHsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnBy
b3RvdHlwZSwgSlNUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllcjo6cHJvdG90eXBlKHZtLCBn
bG9iYWxPYmplY3QpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgSlNDOjpQ
cm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250
RW51bSk7Ci0gICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRy
aXZpYWxTdHJpbmcoJnZtLCBTdHJpbmcoIlRlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyIl9z
KSksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJp
YnV0ZTo6RG9udEVudW0pOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFt
ZSwganNOb250cml2aWFsU3RyaW5nKHZtLCBTdHJpbmcoIlRlc3ROYW1lZEdldHRlcldpdGhJZGVu
dGlmaWVyIl9zKSksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9w
ZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlO
YW1lcy0+bGVuZ3RoLCBqc051bWJlcigwKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9u
bHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CiB9CiAKQEAgLTE2Myw5ICsx
NjMsMTAgQEAgYm9vbCBKU1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyOjpnZQogCiBib29s
IEpTVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXI6OmdldE93blByb3BlcnR5U2xvdEJ5SW5k
ZXgoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBzdGF0ZSwgdW5zaWduZWQgaW5kZXgsIFBy
b3BlcnR5U2xvdCYgc2xvdCkKIHsKKyAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRv
KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXIqPihv
YmplY3QpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygp
KTsKLSAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb20oc3RhdGUsIGluZGV4
KTsKKyAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb20odm0sIGluZGV4KTsK
ICAgICB1c2luZyBHZXR0ZXJJRExUeXBlID0gSURMRE9NU3RyaW5nOwogICAgIGF1dG8gZ2V0dGVy
RnVuY3RvciA9IFtdIChhdXRvJiB0aGlzT2JqZWN0LCBhdXRvIHByb3BlcnR5TmFtZSkgLT4gT3B0
aW9uYWw8dHlwZW5hbWUgR2V0dGVySURMVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlPiB7CiAgICAg
ICAgIGF1dG8gcmVzdWx0ID0gdGhpc09iamVjdC53cmFwcGVkKCkuZ2V0dGVyTmFtZShwcm9wZXJ0
eU5hbWVUb0F0b21TdHJpbmcocHJvcGVydHlOYW1lKSk7CkBAIC0xODMsMTAgKzE4NCwxMSBAQCBi
b29sIEpTVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXI6OmdlCiAKIHZvaWQgSlNUZXN0TmFt
ZWRHZXR0ZXJXaXRoSWRlbnRpZmllcjo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2Jq
ZWN0LCBFeGVjU3RhdGUqIHN0YXRlLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywg
RW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7CisgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAg
YXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVy
Kj4ob2JqZWN0KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKG9iamVjdCwgaW5mbygp
KTsKICAgICBmb3IgKGF1dG8mIHByb3BlcnR5TmFtZSA6IHRoaXNPYmplY3QtPndyYXBwZWQoKS5z
dXBwb3J0ZWRQcm9wZXJ0eU5hbWVzKCkpCi0gICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50
aWZpZXI6OmZyb21TdHJpbmcoc3RhdGUsIHByb3BlcnR5TmFtZSkpOworICAgICAgICBwcm9wZXJ0
eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBwcm9wZXJ0eU5hbWUpKTsKICAg
ICBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIHN0YXRlLCBwcm9wZXJ0eU5h
bWVzLCBtb2RlKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJO
b0lkZW50aWZpZXIuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC04MCw3ICs4MCw3IEBAIHRlbXBsYXRlPD4gSlNWYWx1ZSBKU1Rlc3RO
YW1lZFNldHRlck5vSWQKIHRlbXBsYXRlPD4gdm9pZCBKU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRp
ZmllckNvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGllcyhWTSYgdm0sIEpTRE9NR2xvYmFs
T2JqZWN0JiBnbG9iYWxPYmplY3QpCiB7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5h
bWVzLT5wcm90b3R5cGUsIEpTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyOjpwcm90b3R5cGUo
dm0sIGdsb2JhbE9iamVjdCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUgfCBK
U0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6
OkRvbnRFbnVtKTsKLSAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpz
Tm9udHJpdmlhbFN0cmluZygmdm0sIFN0cmluZygiVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVy
Il9zKSksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0
dHJpYnV0ZTo6RG9udEVudW0pOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+
bmFtZSwganNOb250cml2aWFsU3RyaW5nKHZtLCBTdHJpbmcoIlRlc3ROYW1lZFNldHRlck5vSWRl
bnRpZmllciJfcykpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJv
cGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5
TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRP
bmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwogfQogCkBAIC0xNTcsOSAr
MTU3LDEwIEBAIGJvb2wgSlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXI6OmdldE8KIAogYm9v
bCBKU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllcjo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRl
eChKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIHN0YXRlLCB1bnNpZ25lZCBpbmRleCwgUHJv
cGVydHlTbG90JiBzbG90KQogeworICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8q
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXIqPihvYmpl
Y3QpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsK
LSAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb20oc3RhdGUsIGluZGV4KTsK
KyAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb20odm0sIGluZGV4KTsKICAg
ICB1c2luZyBHZXR0ZXJJRExUeXBlID0gSURMRE9NU3RyaW5nOwogICAgIGF1dG8gZ2V0dGVyRnVu
Y3RvciA9IFtdIChhdXRvJiB0aGlzT2JqZWN0LCBhdXRvIHByb3BlcnR5TmFtZSkgLT4gT3B0aW9u
YWw8dHlwZW5hbWUgR2V0dGVySURMVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlPiB7CiAgICAgICAg
IGF1dG8gcmVzdWx0ID0gdGhpc09iamVjdC53cmFwcGVkKCkubmFtZWRJdGVtKHByb3BlcnR5TmFt
ZVRvQXRvbVN0cmluZyhwcm9wZXJ0eU5hbWUpKTsKQEAgLTE3NywxMCArMTc4LDExIEBAIGJvb2wg
SlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXI6OmdldE8KIAogdm9pZCBKU1Rlc3ROYW1lZFNl
dHRlck5vSWRlbnRpZmllcjo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBF
eGVjU3RhdGUqIHN0YXRlLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVy
YXRpb25Nb2RlIG1vZGUpCiB7CisgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byog
dGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllcio+KG9iamVj
dCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhvYmplY3QsIGluZm8oKSk7CiAgICAg
Zm9yIChhdXRvJiBwcm9wZXJ0eU5hbWUgOiB0aGlzT2JqZWN0LT53cmFwcGVkKCkuc3VwcG9ydGVk
UHJvcGVydHlOYW1lcygpKQotICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHN0YXRlLCBwcm9wZXJ0eU5hbWUpKTsKKyAgICAgICAgcHJvcGVydHlOYW1lcy5h
ZGQoSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcHJvcGVydHlOYW1lKSk7CiAgICAgSlNPYmpl
Y3Q6OmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBzdGF0ZSwgcHJvcGVydHlOYW1lcywgbW9k
ZSk7CiB9CiAKQEAgLTIwNiwxMiArMjA4LDEzIEBAIGJvb2wgSlNUZXN0TmFtZWRTZXR0ZXJOb0lk
ZW50aWZpZXI6OnB1dCgKIAogYm9vbCBKU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllcjo6cHV0
QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogc3RhdGUsIHVuc2lnbmVkIGluZGV4LCBK
U1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93KQogeworICAgIFZNJiB2bSA9IHN0YXRlLT52
bSgpOwogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWRTZXR0ZXJOb0lk
ZW50aWZpZXIqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmpl
Y3QsIGluZm8oKSk7CiAKLSAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb20o
c3RhdGUsIGluZGV4KTsKKyAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb20o
dm0sIGluZGV4KTsKICAgICBQcm9wZXJ0eVNsb3Qgc2xvdCB7IHRoaXNPYmplY3QsIFByb3BlcnR5
U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpWTUlucXVpcnkgfTsKLSAgICBKU1ZhbHVlIHByb3Rv
dHlwZSA9IHRoaXNPYmplY3QtPmdldFByb3RvdHlwZURpcmVjdChzdGF0ZS0+dm0oKSk7CisgICAg
SlNWYWx1ZSBwcm90b3R5cGUgPSB0aGlzT2JqZWN0LT5nZXRQcm90b3R5cGVEaXJlY3Qodm0pOwog
ICAgIGlmICghKHByb3RvdHlwZS5pc09iamVjdCgpICYmIGFzT2JqZWN0KHByb3RvdHlwZSktPmdl
dFByb3BlcnR5U2xvdChzdGF0ZSwgcHJvcGVydHlOYW1lLCBzbG90KSkpIHsKICAgICAgICAgYXV0
byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShzdGF0ZS0+dm0oKSk7CiAgICAgICAg
IGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKnN0YXRlLCB2YWx1ZSk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFt
ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNl
cHRpb24uY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTgwLDcgKzgwLDcgQEAgdGVtcGxhdGU8PiBKU1ZhbHVlIEpTVGVzdE5h
bWVkU2V0dGVyVGhybwogdGVtcGxhdGU8PiB2b2lkIEpTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdF
eGNlcHRpb25Db25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMoVk0mIHZtLCBKU0RPTUds
b2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQogewogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVy
dHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uOjpw
cm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRE
ZWxldGUgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlB
dHRyaWJ1dGU6OkRvbnRFbnVtKTsKLSAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMt
Pm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZygmdm0sIFN0cmluZygiVGVzdE5hbWVkU2V0dGVyVGhy
b3dpbmdFeGNlcHRpb24iX3MpKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBK
U0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5w
cm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcodm0sIFN0cmluZygiVGVzdE5h
bWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24iX3MpKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6
UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CiAgICAgcHV0RGly
ZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDApLCBKU0M6OlByb3Bl
cnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVt
KTsKIH0KIApAQCAtMTU3LDkgKzE1NywxMCBAQCBib29sIEpTVGVzdE5hbWVkU2V0dGVyVGhyb3dp
bmdFeGNlcHRpb246CiAKIGJvb2wgSlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6
Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIHN0
YXRlLCB1bnNpZ25lZCBpbmRleCwgUHJvcGVydHlTbG90JiBzbG90KQogeworICAgIFZNJiB2bSA9
IHN0YXRlLT52bSgpOwogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWRT
ZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbio+KG9iamVjdCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwotICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRl
bnRpZmllcjo6ZnJvbShzdGF0ZSwgaW5kZXgpOworICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRl
bnRpZmllcjo6ZnJvbSh2bSwgaW5kZXgpOwogICAgIHVzaW5nIEdldHRlcklETFR5cGUgPSBJRExE
T01TdHJpbmc7CiAgICAgYXV0byBnZXR0ZXJGdW5jdG9yID0gW10gKGF1dG8mIHRoaXNPYmplY3Qs
IGF1dG8gcHJvcGVydHlOYW1lKSAtPiBPcHRpb25hbDx0eXBlbmFtZSBHZXR0ZXJJRExUeXBlOjpJ
bXBsZW1lbnRhdGlvblR5cGU+IHsKICAgICAgICAgYXV0byByZXN1bHQgPSB0aGlzT2JqZWN0Lndy
YXBwZWQoKS5uYW1lZEl0ZW0ocHJvcGVydHlOYW1lVG9BdG9tU3RyaW5nKHByb3BlcnR5TmFtZSkp
OwpAQCAtMTc3LDEwICsxNzgsMTEgQEAgYm9vbCBKU1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhj
ZXB0aW9uOgogCiB2b2lkIEpTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246OmdldE93
blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBzdGF0ZSwgUHJvcGVy
dHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQogeworICAg
IFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNU
ZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbio+KG9iamVjdCk7CiAgICAgQVNTRVJUX0dD
X09CSkVDVF9JTkhFUklUUyhvYmplY3QsIGluZm8oKSk7CiAgICAgZm9yIChhdXRvJiBwcm9wZXJ0
eU5hbWUgOiB0aGlzT2JqZWN0LT53cmFwcGVkKCkuc3VwcG9ydGVkUHJvcGVydHlOYW1lcygpKQot
ICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHN0YXRlLCBw
cm9wZXJ0eU5hbWUpKTsKKyAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyh2bSwgcHJvcGVydHlOYW1lKSk7CiAgICAgSlNPYmplY3Q6OmdldE93blByb3BlcnR5
TmFtZXMob2JqZWN0LCBzdGF0ZSwgcHJvcGVydHlOYW1lcywgbW9kZSk7CiB9CiAKQEAgLTIwNiwx
MiArMjA4LDEzIEBAIGJvb2wgSlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbjoKIAog
Ym9vbCBKU1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uOjpwdXRCeUluZGV4KEpTQ2Vs
bCogY2VsbCwgRXhlY1N0YXRlKiBzdGF0ZSwgdW5zaWduZWQgaW5kZXgsIEpTVmFsdWUgdmFsdWUs
IGJvb2wgc2hvdWxkVGhyb3cpCiB7CisgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0
byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9u
Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZv
KCkpOwogCi0gICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tKHN0YXRlLCBp
bmRleCk7CisgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tKHZtLCBpbmRl
eCk7CiAgICAgUHJvcGVydHlTbG90IHNsb3QgeyB0aGlzT2JqZWN0LCBQcm9wZXJ0eVNsb3Q6Oklu
dGVybmFsTWV0aG9kVHlwZTo6Vk1JbnF1aXJ5IH07Ci0gICAgSlNWYWx1ZSBwcm90b3R5cGUgPSB0
aGlzT2JqZWN0LT5nZXRQcm90b3R5cGVEaXJlY3Qoc3RhdGUtPnZtKCkpOworICAgIEpTVmFsdWUg
cHJvdG90eXBlID0gdGhpc09iamVjdC0+Z2V0UHJvdG90eXBlRGlyZWN0KHZtKTsKICAgICBpZiAo
IShwcm90b3R5cGUuaXNPYmplY3QoKSAmJiBhc09iamVjdChwcm90b3R5cGUpLT5nZXRQcm9wZXJ0
eVNsb3Qoc3RhdGUsIHByb3BlcnR5TmFtZSwgc2xvdCkpKSB7CiAgICAgICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoc3RhdGUtPnZtKCkpOwogICAgICAgICBhdXRvIG5h
dGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KCpzdGF0ZSwgdmFsdWUpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVy
V2l0aElkZW50aWZpZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyLmNwcAkocmV2
aXNpb24gMjQ5MTI4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04
NSw3ICs4NSw3IEBAIHRlbXBsYXRlPD4gSlNWYWx1ZSBKU1Rlc3ROYW1lZFNldHRlcldpdGgKIHRl
bXBsYXRlPD4gdm9pZCBKU1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyQ29uc3RydWN0b3I6
OmluaXRpYWxpemVQcm9wZXJ0aWVzKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9i
amVjdCkKIHsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwg
SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6cHJvdG90eXBlKHZtLCBnbG9iYWxPYmpl
Y3QpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgSlNDOjpQcm9wZXJ0eUF0
dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7Ci0g
ICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJp
bmcoJnZtLCBTdHJpbmcoIlRlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyIl9zKSksIEpTQzo6
UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9u
dEVudW0pOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250
cml2aWFsU3RyaW5nKHZtLCBTdHJpbmcoIlRlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyIl9z
KSksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJp
YnV0ZTo6RG9udEVudW0pOwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVu
Z3RoLCBqc051bWJlcigwKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6
OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CiB9CiAKQEAgLTE2Myw5ICsxNjMsMTAgQEAg
Ym9vbCBKU1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyOjpnZQogCiBib29sIEpTVGVzdE5h
bWVkU2V0dGVyV2l0aElkZW50aWZpZXI6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmpl
Y3QqIG9iamVjdCwgRXhlY1N0YXRlKiBzdGF0ZSwgdW5zaWduZWQgaW5kZXgsIFByb3BlcnR5U2xv
dCYgc2xvdCkKIHsKKyAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvKiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXIqPihvYmplY3QpOwog
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKLSAgICBh
dXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb20oc3RhdGUsIGluZGV4KTsKKyAgICBh
dXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb20odm0sIGluZGV4KTsKICAgICB1c2lu
ZyBHZXR0ZXJJRExUeXBlID0gSURMRE9NU3RyaW5nOwogICAgIGF1dG8gZ2V0dGVyRnVuY3RvciA9
IFtdIChhdXRvJiB0aGlzT2JqZWN0LCBhdXRvIHByb3BlcnR5TmFtZSkgLT4gT3B0aW9uYWw8dHlw
ZW5hbWUgR2V0dGVySURMVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlPiB7CiAgICAgICAgIGF1dG8g
cmVzdWx0ID0gdGhpc09iamVjdC53cmFwcGVkKCkubmFtZWRJdGVtKHByb3BlcnR5TmFtZVRvQXRv
bVN0cmluZyhwcm9wZXJ0eU5hbWUpKTsKQEAgLTE4MywxMCArMTg0LDExIEBAIGJvb2wgSlNUZXN0
TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6Z2UKIAogdm9pZCBKU1Rlc3ROYW1lZFNldHRlcldp
dGhJZGVudGlmaWVyOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNT
dGF0ZSogc3RhdGUsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlv
bk1vZGUgbW9kZSkKIHsKKyAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvKiB0aGlz
T2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXIqPihvYmplY3Qp
OwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMob2JqZWN0LCBpbmZvKCkpOwogICAgIGZv
ciAoYXV0byYgcHJvcGVydHlOYW1lIDogdGhpc09iamVjdC0+d3JhcHBlZCgpLnN1cHBvcnRlZFBy
b3BlcnR5TmFtZXMoKSkKLSAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyhzdGF0ZSwgcHJvcGVydHlOYW1lKSk7CisgICAgICAgIHByb3BlcnR5TmFtZXMuYWRk
KElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHByb3BlcnR5TmFtZSkpOwogICAgIEpTT2JqZWN0
OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgc3RhdGUsIHByb3BlcnR5TmFtZXMsIG1vZGUp
OwogfQogCkBAIC0yMTIsMTIgKzIxNCwxMyBAQCBib29sIEpTVGVzdE5hbWVkU2V0dGVyV2l0aElk
ZW50aWZpZXI6OnB1CiAKIGJvb2wgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6cHV0
QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogc3RhdGUsIHVuc2lnbmVkIGluZGV4LCBK
U1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93KQogeworICAgIFZNJiB2bSA9IHN0YXRlLT52
bSgpOwogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWRTZXR0ZXJXaXRo
SWRlbnRpZmllcio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09i
amVjdCwgaW5mbygpKTsKIAotICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJv
bShzdGF0ZSwgaW5kZXgpOworICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJv
bSh2bSwgaW5kZXgpOwogICAgIFByb3BlcnR5U2xvdCBzbG90IHsgdGhpc09iamVjdCwgUHJvcGVy
dHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6OlZNSW5xdWlyeSB9OwotICAgIEpTVmFsdWUgcHJv
dG90eXBlID0gdGhpc09iamVjdC0+Z2V0UHJvdG90eXBlRGlyZWN0KHN0YXRlLT52bSgpKTsKKyAg
ICBKU1ZhbHVlIHByb3RvdHlwZSA9IHRoaXNPYmplY3QtPmdldFByb3RvdHlwZURpcmVjdCh2bSk7
CiAgICAgaWYgKCEocHJvdG90eXBlLmlzT2JqZWN0KCkgJiYgYXNPYmplY3QocHJvdG90eXBlKS0+
Z2V0UHJvcGVydHlTbG90KHN0YXRlLCBwcm9wZXJ0eU5hbWUsIHNsb3QpKSkgewogICAgICAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHN0YXRlLT52bSgpKTsKICAgICAg
ICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqc3RhdGUsIHZhbHVl
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RO
YW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhl
ZEdldHRlci5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtODgsNyArODgsNyBAQCB0ZW1wbGF0ZTw+IEpTVmFsdWUgSlNUZXN0
TmFtZWRTZXR0ZXJXaXRoCiB0ZW1wbGF0ZTw+IHZvaWQgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5k
ZXhlZEdldHRlckNvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGllcyhWTSYgdm0sIEpTRE9N
R2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCiB7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9w
ZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXI6
OnByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9u
dERlbGV0ZSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0
eUF0dHJpYnV0ZTo6RG9udEVudW0pOwotICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1l
cy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKCZ2bSwgU3RyaW5nKCJUZXN0TmFtZWRTZXR0ZXJX
aXRoSW5kZXhlZEdldHRlciJfcykpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8
IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKKyAgICBwdXREaXJlY3Qodm0sIHZt
LnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZyh2bSwgU3RyaW5nKCJUZXN0
TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlciJfcykpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRl
OjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKICAgICBwdXRE
aXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMCksIEpTQzo6UHJv
cGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVu
dW0pOwogfQogCkBAIC0xNzUsNiArMTc1LDcgQEAgYm9vbCBKU1Rlc3ROYW1lZFNldHRlcldpdGhJ
bmRleGVkR2V0dGVyOgogCiBib29sIEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXI6
OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBz
dGF0ZSwgdW5zaWduZWQgaW5kZXgsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKKyAgICBWTSYgdm0g
PSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVk
U2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXIqPihvYmplY3QpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1Rf
SU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKICAgICBpZiAoTElLRUxZKGluZGV4IDw9IE1B
WF9BUlJBWV9JTkRFWCkpIHsKQEAgLTE4NSw3ICsxODYsNyBAQCBib29sIEpTVGVzdE5hbWVkU2V0
dGVyV2l0aEluZGV4ZWRHZXR0ZXI6CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIEpTT2JqZWN0
OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KG9iamVjdCwgc3RhdGUsIGluZGV4LCBzbG90KTsK
ICAgICB9Ci0gICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tKHN0YXRlLCBp
bmRleCk7CisgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tKHZtLCBpbmRl
eCk7CiAgICAgdXNpbmcgR2V0dGVySURMVHlwZSA9IElETERPTVN0cmluZzsKICAgICBhdXRvIGdl
dHRlckZ1bmN0b3IgPSBbXSAoYXV0byYgdGhpc09iamVjdCwgYXV0byBwcm9wZXJ0eU5hbWUpIC0+
IE9wdGlvbmFsPHR5cGVuYW1lIEdldHRlcklETFR5cGU6OkltcGxlbWVudGF0aW9uVHlwZT4gewog
ICAgICAgICBhdXRvIHJlc3VsdCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpLm5hbWVkSXRlbShwcm9w
ZXJ0eU5hbWVUb0F0b21TdHJpbmcocHJvcGVydHlOYW1lKSk7CkBAIC0yMDMsMTIgKzIwNCwxMyBA
QCBib29sIEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXI6CiAKIHZvaWQgSlNUZXN0
TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlcjo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVj
dCogb2JqZWN0LCBFeGVjU3RhdGUqIHN0YXRlLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlO
YW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7CisgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7
CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRl
eGVkR2V0dGVyKj4ob2JqZWN0KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKG9iamVj
dCwgaW5mbygpKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwLCBjb3VudCA9IHRoaXNPYmplY3Qt
PndyYXBwZWQoKS5sZW5ndGgoKTsgaSA8IGNvdW50OyArK2kpCi0gICAgICAgIHByb3BlcnR5TmFt
ZXMuYWRkKElkZW50aWZpZXI6OmZyb20oc3RhdGUsIGkpKTsKKyAgICAgICAgcHJvcGVydHlOYW1l
cy5hZGQoSWRlbnRpZmllcjo6ZnJvbSh2bSwgaSkpOwogICAgIGZvciAoYXV0byYgcHJvcGVydHlO
YW1lIDogdGhpc09iamVjdC0+d3JhcHBlZCgpLnN1cHBvcnRlZFByb3BlcnR5TmFtZXMoKSkKLSAg
ICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhzdGF0ZSwgcHJv
cGVydHlOYW1lKSk7CisgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb21T
dHJpbmcodm0sIHByb3BlcnR5TmFtZSkpOwogICAgIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5h
bWVzKG9iamVjdCwgc3RhdGUsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwogfQogCkBAIC0yMzQsMTIg
KzIzNiwxMyBAQCBib29sIEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXI6CiAKIGJv
b2wgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlcjo6cHV0QnlJbmRleChKU0NlbGwq
IGNlbGwsIEV4ZWNTdGF0ZSogc3RhdGUsIHVuc2lnbmVkIGluZGV4LCBKU1ZhbHVlIHZhbHVlLCBi
b29sIHNob3VsZFRocm93KQogeworICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8q
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlcio+
KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygp
KTsKIAotICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbShzdGF0ZSwgaW5k
ZXgpOworICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbSh2bSwgaW5kZXgp
OwogICAgIFByb3BlcnR5U2xvdCBzbG90IHsgdGhpc09iamVjdCwgUHJvcGVydHlTbG90OjpJbnRl
cm5hbE1ldGhvZFR5cGU6OlZNSW5xdWlyeSB9OwotICAgIEpTVmFsdWUgcHJvdG90eXBlID0gdGhp
c09iamVjdC0+Z2V0UHJvdG90eXBlRGlyZWN0KHN0YXRlLT52bSgpKTsKKyAgICBKU1ZhbHVlIHBy
b3RvdHlwZSA9IHRoaXNPYmplY3QtPmdldFByb3RvdHlwZURpcmVjdCh2bSk7CiAgICAgaWYgKCEo
cHJvdG90eXBlLmlzT2JqZWN0KCkgJiYgYXNPYmplY3QocHJvdG90eXBlKS0+Z2V0UHJvcGVydHlT
bG90KHN0YXRlLCBwcm9wZXJ0eU5hbWUsIHNsb3QpKSkgewogICAgICAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHN0YXRlLT52bSgpKTsKICAgICAgICAgYXV0byBuYXRp
dmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqc3RhdGUsIHZhbHVlKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldp
dGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdl
dHRlckFuZFNldHRlci5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVy
QW5kU2V0dGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODgsNyArODgsNyBAQCB0ZW1wbGF0ZTw+
IEpTVmFsdWUgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoCiB0ZW1wbGF0ZTw+IHZvaWQgSlNUZXN0TmFt
ZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlckNvbnN0cnVjdG9yOjppbml0aWFsaXpl
UHJvcGVydGllcyhWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCiB7CiAg
ICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdE5hbWVk
U2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXI6OnByb3RvdHlwZSh2bSwgZ2xvYmFsT2Jq
ZWN0KSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IEpTQzo6UHJvcGVydHlB
dHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwot
ICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3Ry
aW5nKCZ2bSwgU3RyaW5nKCJUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRl
ciJfcykpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlB
dHRyaWJ1dGU6OkRvbnRFbnVtKTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMt
Pm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZyh2bSwgU3RyaW5nKCJUZXN0TmFtZWRTZXR0ZXJXaXRo
SW5kZXhlZEdldHRlckFuZFNldHRlciJfcykpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFk
T25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKICAgICBwdXREaXJlY3Qo
dm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMCksIEpTQzo6UHJvcGVydHlB
dHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwog
fQogCkBAIC0xNzUsNiArMTc1LDcgQEAgYm9vbCBKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVk
R2V0dGVyQQogCiBib29sIEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0
ZXI6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRl
KiBzdGF0ZSwgdW5zaWduZWQgaW5kZXgsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKKyAgICBWTSYg
dm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5h
bWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXIqPihvYmplY3QpOwogICAgIEFTU0VS
VF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKICAgICBpZiAoTElLRUxZ
KGluZGV4IDw9IE1BWF9BUlJBWV9JTkRFWCkpIHsKQEAgLTE4NSw3ICsxODYsNyBAQCBib29sIEpT
VGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBCiAgICAgICAgIH0KICAgICAgICAgcmV0
dXJuIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KG9iamVjdCwgc3RhdGUsIGlu
ZGV4LCBzbG90KTsKICAgICB9Ci0gICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpm
cm9tKHN0YXRlLCBpbmRleCk7CisgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpm
cm9tKHZtLCBpbmRleCk7CiAgICAgdXNpbmcgR2V0dGVySURMVHlwZSA9IElETERPTVN0cmluZzsK
ICAgICBhdXRvIGdldHRlckZ1bmN0b3IgPSBbXSAoYXV0byYgdGhpc09iamVjdCwgYXV0byBwcm9w
ZXJ0eU5hbWUpIC0+IE9wdGlvbmFsPHR5cGVuYW1lIEdldHRlcklETFR5cGU6OkltcGxlbWVudGF0
aW9uVHlwZT4gewogICAgICAgICBhdXRvIHJlc3VsdCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpLm5h
bWVkSXRlbShwcm9wZXJ0eU5hbWVUb0F0b21TdHJpbmcocHJvcGVydHlOYW1lKSk7CkBAIC0yMDMs
MTIgKzIwNCwxMyBAQCBib29sIEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBCiAK
IHZvaWQgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlcjo6Z2V0T3du
UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIHN0YXRlLCBQcm9wZXJ0
eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7CisgICAg
Vk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rl
c3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyKj4ob2JqZWN0KTsKICAgICBB
U1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKG9iamVjdCwgaW5mbygpKTsKICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwLCBjb3VudCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKS5sZW5ndGgoKTsgaSA8IGNv
dW50OyArK2kpCi0gICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb20oc3Rh
dGUsIGkpKTsKKyAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbSh2bSwg
aSkpOwogICAgIGZvciAoYXV0byYgcHJvcGVydHlOYW1lIDogdGhpc09iamVjdC0+d3JhcHBlZCgp
LnN1cHBvcnRlZFByb3BlcnR5TmFtZXMoKSkKLSAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRl
bnRpZmllcjo6ZnJvbVN0cmluZyhzdGF0ZSwgcHJvcGVydHlOYW1lKSk7CisgICAgICAgIHByb3Bl
cnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHByb3BlcnR5TmFtZSkpOwog
ICAgIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgc3RhdGUsIHByb3BlcnR5
TmFtZXMsIG1vZGUpOwogfQogCkBAIC0yNDIsNiArMjQ0LDcgQEAgYm9vbCBKU1Rlc3ROYW1lZFNl
dHRlcldpdGhJbmRleGVkR2V0dGVyQQogCiBib29sIEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4
ZWRHZXR0ZXJBbmRTZXR0ZXI6OnB1dEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIHN0
YXRlLCB1bnNpZ25lZCBpbmRleCwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKIHsK
KyAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0
PEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXIqPihjZWxsKTsKICAg
ICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAKQEAgLTI1
Myw5ICsyNTYsOSBAQCBib29sIEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBCiAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRl
bnRpZmllcjo6ZnJvbShzdGF0ZSwgaW5kZXgpOworICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRl
bnRpZmllcjo6ZnJvbSh2bSwgaW5kZXgpOwogICAgIFByb3BlcnR5U2xvdCBzbG90IHsgdGhpc09i
amVjdCwgUHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6OlZNSW5xdWlyeSB9OwotICAg
IEpTVmFsdWUgcHJvdG90eXBlID0gdGhpc09iamVjdC0+Z2V0UHJvdG90eXBlRGlyZWN0KHN0YXRl
LT52bSgpKTsKKyAgICBKU1ZhbHVlIHByb3RvdHlwZSA9IHRoaXNPYmplY3QtPmdldFByb3RvdHlw
ZURpcmVjdCh2bSk7CiAgICAgaWYgKCEocHJvdG90eXBlLmlzT2JqZWN0KCkgJiYgYXNPYmplY3Qo
cHJvdG90eXBlKS0+Z2V0UHJvcGVydHlTbG90KHN0YXRlLCBwcm9wZXJ0eU5hbWUsIHNsb3QpKSkg
ewogICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHN0YXRlLT52
bSgpKTsKICAgICAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigq
c3RhdGUsIHZhbHVlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhPdmVycmlkZUJ1aWx0aW5zLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRT
ZXR0ZXJXaXRoT3ZlcnJpZGVCdWlsdGlucy5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhP
dmVycmlkZUJ1aWx0aW5zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODAsNyArODAsNyBAQCB0ZW1w
bGF0ZTw+IEpTVmFsdWUgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoCiB0ZW1wbGF0ZTw+IHZvaWQgSlNU
ZXN0TmFtZWRTZXR0ZXJXaXRoT3ZlcnJpZGVCdWlsdGluc0NvbnN0cnVjdG9yOjppbml0aWFsaXpl
UHJvcGVydGllcyhWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCiB7CiAg
ICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdE5hbWVk
U2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnM6OnByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KSwg
SlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1
dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwotICAgIHB1
dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKCZ2
bSwgU3RyaW5nKCJUZXN0TmFtZWRTZXR0ZXJXaXRoT3ZlcnJpZGVCdWlsdGlucyJfcykpLCBKU0M6
OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRv
bnRFbnVtKTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9u
dHJpdmlhbFN0cmluZyh2bSwgU3RyaW5nKCJUZXN0TmFtZWRTZXR0ZXJXaXRoT3ZlcnJpZGVCdWls
dGlucyJfcykpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVy
dHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFt
ZXMtPmxlbmd0aCwganNOdW1iZXIoMCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5
IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwogfQogCkBAIC0xNTcsOSArMTU3
LDEwIEBAIGJvb2wgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoT3ZlcnJpZGVCdWlsdGkKIAogYm9vbCBK
U1Rlc3ROYW1lZFNldHRlcldpdGhPdmVycmlkZUJ1aWx0aW5zOjpnZXRPd25Qcm9wZXJ0eVNsb3RC
eUluZGV4KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogc3RhdGUsIHVuc2lnbmVkIGluZGV4
LCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CisgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAg
YXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZFNldHRlcldpdGhPdmVycmlkZUJ1
aWx0aW5zKj4ob2JqZWN0KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmpl
Y3QsIGluZm8oKSk7Ci0gICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tKHN0
YXRlLCBpbmRleCk7CisgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tKHZt
LCBpbmRleCk7CiAgICAgdXNpbmcgR2V0dGVySURMVHlwZSA9IElETERPTVN0cmluZzsKICAgICBh
dXRvIGdldHRlckZ1bmN0b3IgPSBbXSAoYXV0byYgdGhpc09iamVjdCwgYXV0byBwcm9wZXJ0eU5h
bWUpIC0+IE9wdGlvbmFsPHR5cGVuYW1lIEdldHRlcklETFR5cGU6OkltcGxlbWVudGF0aW9uVHlw
ZT4gewogICAgICAgICBhdXRvIHJlc3VsdCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpLm5hbWVkSXRl
bShwcm9wZXJ0eU5hbWVUb0F0b21TdHJpbmcocHJvcGVydHlOYW1lKSk7CkBAIC0xNzcsMTAgKzE3
OCwxMSBAQCBib29sIEpTVGVzdE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRpCiAKIHZvaWQg
SlNUZXN0TmFtZWRTZXR0ZXJXaXRoT3ZlcnJpZGVCdWlsdGluczo6Z2V0T3duUHJvcGVydHlOYW1l
cyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIHN0YXRlLCBQcm9wZXJ0eU5hbWVBcnJheSYg
cHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7CisgICAgVk0mIHZtID0gc3Rh
dGUtPnZtKCk7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZFNldHRl
cldpdGhPdmVycmlkZUJ1aWx0aW5zKj4ob2JqZWN0KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lO
SEVSSVRTKG9iamVjdCwgaW5mbygpKTsKICAgICBmb3IgKGF1dG8mIHByb3BlcnR5TmFtZSA6IHRo
aXNPYmplY3QtPndyYXBwZWQoKS5zdXBwb3J0ZWRQcm9wZXJ0eU5hbWVzKCkpCi0gICAgICAgIHBy
b3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb21TdHJpbmcoc3RhdGUsIHByb3BlcnR5TmFt
ZSkpOworICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZt
LCBwcm9wZXJ0eU5hbWUpKTsKICAgICBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhvYmpl
Y3QsIHN0YXRlLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKIH0KIApAQCAtMjAyLDEwICsyMDQsMTEg
QEAgYm9vbCBKU1Rlc3ROYW1lZFNldHRlcldpdGhPdmVycmlkZUJ1aWx0aQogCiBib29sIEpTVGVz
dE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnM6OnB1dEJ5SW5kZXgoSlNDZWxsKiBjZWxs
LCBFeGVjU3RhdGUqIHN0YXRlLCB1bnNpZ25lZCBpbmRleCwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCkK
IHsKKyAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganND
YXN0PEpTVGVzdE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnMqPihjZWxsKTsKICAgICBB
U1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAKLSAgICBhdXRv
IHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb20oc3RhdGUsIGluZGV4KTsKKyAgICBhdXRv
IHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb20odm0sIGluZGV4KTsKICAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHN0YXRlLT52bSgpKTsKICAgICBhdXRvIG5h
dGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KCpzdGF0ZSwgdmFsdWUpOwogICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgdHJ1ZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJs
ZVByb3BlcnRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllcy5j
cHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllcy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEwNCw3ICsxMDQsNyBAQCB0ZW1wbGF0ZTw+IEpTVmFsdWUgSlNUZXN0
TmFtZWRTZXR0ZXJXaXRoCiB0ZW1wbGF0ZTw+IHZvaWQgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5m
b3JnYWJsZVByb3BlcnRpZXNDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMoVk0mIHZt
LCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQogewogICAgIHB1dERpcmVjdCh2bSwg
dm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdh
YmxlUHJvcGVydGllczo6cHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QpLCBKU0M6OlByb3BlcnR5
QXR0cmlidXRlOjpEb250RGVsZXRlIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkg
fCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7Ci0gICAgcHV0RGlyZWN0KHZtLCB2
bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcoJnZtLCBTdHJpbmcoIlRl
c3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllcyJfcykpLCBKU0M6OlByb3BlcnR5
QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsK
KyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0
cmluZyh2bSwgU3RyaW5nKCJUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXMi
X3MpKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0
cmlidXRlOjpEb250RW51bSk7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5s
ZW5ndGgsIGpzTnVtYmVyKDApLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpT
Qzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKIH0KIApAQCAtMTgxLDkgKzE4MSwxMCBA
QCBib29sIEpTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wCiAKIGJvb2wgSlNUZXN0
TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXM6OmdldE93blByb3BlcnR5U2xvdEJ5
SW5kZXgoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBzdGF0ZSwgdW5zaWduZWQgaW5kZXgs
IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKKyAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBh
dXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQ
cm9wZXJ0aWVzKj4ob2JqZWN0KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNP
YmplY3QsIGluZm8oKSk7Ci0gICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9t
KHN0YXRlLCBpbmRleCk7CisgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9t
KHZtLCBpbmRleCk7CiAgICAgdXNpbmcgR2V0dGVySURMVHlwZSA9IElETERPTVN0cmluZzsKICAg
ICBhdXRvIGdldHRlckZ1bmN0b3IgPSBbXSAoYXV0byYgdGhpc09iamVjdCwgYXV0byBwcm9wZXJ0
eU5hbWUpIC0+IE9wdGlvbmFsPHR5cGVuYW1lIEdldHRlcklETFR5cGU6OkltcGxlbWVudGF0aW9u
VHlwZT4gewogICAgICAgICBhdXRvIHJlc3VsdCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpLm5hbWVk
SXRlbShwcm9wZXJ0eU5hbWVUb0F0b21TdHJpbmcocHJvcGVydHlOYW1lKSk7CkBAIC0yMDEsMTAg
KzIwMiwxMSBAQCBib29sIEpTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wCiAKIHZv
aWQgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXM6OmdldE93blByb3Bl
cnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBzdGF0ZSwgUHJvcGVydHlOYW1l
QXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQogeworICAgIFZNJiB2
bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFt
ZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXMqPihvYmplY3QpOwogICAgIEFTU0VSVF9H
Q19PQkpFQ1RfSU5IRVJJVFMob2JqZWN0LCBpbmZvKCkpOwogICAgIGZvciAoYXV0byYgcHJvcGVy
dHlOYW1lIDogdGhpc09iamVjdC0+d3JhcHBlZCgpLnN1cHBvcnRlZFByb3BlcnR5TmFtZXMoKSkK
LSAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhzdGF0ZSwg
cHJvcGVydHlOYW1lKSk7CisgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZy
b21TdHJpbmcodm0sIHByb3BlcnR5TmFtZSkpOwogICAgIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0
eU5hbWVzKG9iamVjdCwgc3RhdGUsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwogfQogCkBAIC0yMzAs
MTIgKzIzMiwxMyBAQCBib29sIEpTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wCiAK
IGJvb2wgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXM6OnB1dEJ5SW5k
ZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIHN0YXRlLCB1bnNpZ25lZCBpbmRleCwgSlNWYWx1
ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKIHsKKyAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsK
ICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9y
Z2FibGVQcm9wZXJ0aWVzKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0
aGlzT2JqZWN0LCBpbmZvKCkpOwogCi0gICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVy
Ojpmcm9tKHN0YXRlLCBpbmRleCk7CisgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVy
Ojpmcm9tKHZtLCBpbmRleCk7CiAgICAgUHJvcGVydHlTbG90IHNsb3QgeyB0aGlzT2JqZWN0LCBQ
cm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6Vk1JbnF1aXJ5IH07Ci0gICAgSlNWYWx1
ZSBwcm90b3R5cGUgPSB0aGlzT2JqZWN0LT5nZXRQcm90b3R5cGVEaXJlY3Qoc3RhdGUtPnZtKCkp
OworICAgIEpTVmFsdWUgcHJvdG90eXBlID0gdGhpc09iamVjdC0+Z2V0UHJvdG90eXBlRGlyZWN0
KHZtKTsKICAgICBpZiAoIShwcm90b3R5cGUuaXNPYmplY3QoKSAmJiBhc09iamVjdChwcm90b3R5
cGUpLT5nZXRQcm9wZXJ0eVNsb3Qoc3RhdGUsIHByb3BlcnR5TmFtZSwgc2xvdCkpKSB7CiAgICAg
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoc3RhdGUtPnZtKCkpOwog
ICAgICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KCpzdGF0ZSwg
dmFsdWUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGlu
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVC
dWlsdGlucy5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGll
c0FuZE92ZXJyaWRlQnVpbHRpbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQsNyArMTA0LDcg
QEAgdGVtcGxhdGU8PiBKU1ZhbHVlIEpTVGVzdE5hbWVkU2V0dGVyV2l0aAogdGVtcGxhdGU8PiB2
b2lkIEpTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVC
dWlsdGluc0NvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGllcyhWTSYgdm0sIEpTRE9NR2xv
YmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCiB7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0
eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0
aWVzQW5kT3ZlcnJpZGVCdWlsdGluczo6cHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QpLCBKU0M6
OlByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6
UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7Ci0gICAgcHV0RGly
ZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcoJnZtLCBT
dHJpbmcoIlRlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0FuZE92ZXJyaWRl
QnVpbHRpbnMiX3MpKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlBy
b3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0
eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcodm0sIFN0cmluZygiVGVzdE5hbWVkU2V0
dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGlucyJfcykpLCBKU0M6
OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRv
bnRFbnVtKTsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNO
dW1iZXIoMCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0
eUF0dHJpYnV0ZTo6RG9udEVudW0pOwogfQogCkBAIC0xODEsOSArMTgxLDEwIEBAIGJvb2wgSlNU
ZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3AKIAogYm9vbCBKU1Rlc3ROYW1lZFNldHRl
cldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0FuZE92ZXJyaWRlQnVpbHRpbnM6OmdldE93blByb3Bl
cnR5U2xvdEJ5SW5kZXgoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBzdGF0ZSwgdW5zaWdu
ZWQgaW5kZXgsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKKyAgICBWTSYgdm0gPSBzdGF0ZS0+dm0o
KTsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkU2V0dGVyV2l0aFVu
Zm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGlucyo+KG9iamVjdCk7CiAgICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwotICAgIGF1dG8gcHJv
cGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbShzdGF0ZSwgaW5kZXgpOworICAgIGF1dG8gcHJv
cGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbSh2bSwgaW5kZXgpOwogICAgIHVzaW5nIEdldHRl
cklETFR5cGUgPSBJRExET01TdHJpbmc7CiAgICAgYXV0byBnZXR0ZXJGdW5jdG9yID0gW10gKGF1
dG8mIHRoaXNPYmplY3QsIGF1dG8gcHJvcGVydHlOYW1lKSAtPiBPcHRpb25hbDx0eXBlbmFtZSBH
ZXR0ZXJJRExUeXBlOjpJbXBsZW1lbnRhdGlvblR5cGU+IHsKICAgICAgICAgYXV0byByZXN1bHQg
PSB0aGlzT2JqZWN0LndyYXBwZWQoKS5uYW1lZEl0ZW0ocHJvcGVydHlOYW1lVG9BdG9tU3RyaW5n
KHByb3BlcnR5TmFtZSkpOwpAQCAtMjAxLDEwICsyMDIsMTEgQEAgYm9vbCBKU1Rlc3ROYW1lZFNl
dHRlcldpdGhVbmZvcmdhYmxlUHJvcAogCiB2b2lkIEpTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9y
Z2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGluczo6Z2V0T3duUHJvcGVydHlOYW1lcyhK
U09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIHN0YXRlLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJv
cGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7CisgICAgVk0mIHZtID0gc3RhdGUt
PnZtKCk7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZFNldHRlcldp
dGhVbmZvcmdhYmxlUHJvcGVydGllc0FuZE92ZXJyaWRlQnVpbHRpbnMqPihvYmplY3QpOwogICAg
IEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMob2JqZWN0LCBpbmZvKCkpOwogICAgIGZvciAoYXV0
byYgcHJvcGVydHlOYW1lIDogdGhpc09iamVjdC0+d3JhcHBlZCgpLnN1cHBvcnRlZFByb3BlcnR5
TmFtZXMoKSkKLSAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbVN0cmlu
ZyhzdGF0ZSwgcHJvcGVydHlOYW1lKSk7CisgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50
aWZpZXI6OmZyb21TdHJpbmcodm0sIHByb3BlcnR5TmFtZSkpOwogICAgIEpTT2JqZWN0OjpnZXRP
d25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgc3RhdGUsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwogfQog
CkBAIC0yMjYsMTAgKzIyOCwxMSBAQCBib29sIEpTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2Fi
bGVQcm9wCiAKIGJvb2wgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNB
bmRPdmVycmlkZUJ1aWx0aW5zOjpwdXRCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBz
dGF0ZSwgdW5zaWduZWQgaW5kZXgsIEpTVmFsdWUgdmFsdWUsIGJvb2wpCiB7CisgICAgVk0mIHZt
ID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1l
ZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0FuZE92ZXJyaWRlQnVpbHRpbnMqPihjZWxs
KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAK
LSAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb20oc3RhdGUsIGluZGV4KTsK
KyAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb20odm0sIGluZGV4KTsKICAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHN0YXRlLT52bSgpKTsKICAg
ICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KCpzdGF0ZSwgdmFsdWUp
OwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgdHJ1ZSk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5v
ZGUuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNCw3ICsxMTQs
NyBAQCB0ZW1wbGF0ZTw+IEpTVmFsdWUgSlNUZXN0Tm9kZUNvbnN0cnVjdG9yCiB0ZW1wbGF0ZTw+
IHZvaWQgSlNUZXN0Tm9kZUNvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGllcyhWTSYgdm0s
IEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCiB7CiAgICAgcHV0RGlyZWN0KHZtLCB2
bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdE5vZGU6OnByb3RvdHlwZSh2bSwgZ2xv
YmFsT2JqZWN0KSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IEpTQzo6UHJv
cGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVu
dW0pOwotICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2
aWFsU3RyaW5nKCZ2bSwgU3RyaW5nKCJUZXN0Tm9kZSJfcykpLCBKU0M6OlByb3BlcnR5QXR0cmli
dXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKKyAgICBw
dXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZyh2
bSwgU3RyaW5nKCJUZXN0Tm9kZSJfcykpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25s
eSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKICAgICBwdXREaXJlY3Qodm0s
IHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMCksIEpTQzo6UHJvcGVydHlBdHRy
aWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwogfQog
CkBAIC0xNTAsNDUgKzE1MCw0NSBAQCB2b2lkIEpTVGVzdE5vZGVQcm90b3R5cGU6OmZpbmlzaENy
ZWF0aW9uCiAgICAgYm9vbCBoYXNEaXNhYmxlZFJ1bnRpbWVQcm9wZXJ0aWVzID0gZmFsc2U7CiAg
ICAgaWYgKCFqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QoKSktPnNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKS0+aXNTZWN1cmVDb250ZXh0KCkpIHsKICAgICAgICAgaGFzRGlz
YWJsZWRSdW50aW1lUHJvcGVydGllcyA9IHRydWU7Ci0gICAgICAgIGF1dG8gcHJvcGVydHlOYW1l
ID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENo
YXIqPigiY2FsY3VsYXRlU2VjcmV0UmVzdWx0IiksIHN0cmxlbigiY2FsY3VsYXRlU2VjcmV0UmVz
dWx0IikpOworICAgICAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb21TdHJp
bmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiY2FsY3VsYXRlU2VjcmV0UmVz
dWx0IiksIHN0cmxlbigiY2FsY3VsYXRlU2VjcmV0UmVzdWx0IikpOwogICAgICAgICBWTTo6RGVs
ZXRlUHJvcGVydHlNb2RlU2NvcGUgc2NvcGUodm0sIFZNOjpEZWxldGVQcm9wZXJ0eU1vZGU6Okln
bm9yZUNvbmZpZ3VyYWJsZSk7CiAgICAgICAgIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eSh0aGlz
LCBnbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpLCBwcm9wZXJ0eU5hbWUpOwogICAgIH0KICAg
ICBpZiAoIWpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCgpKS0+c2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpLT5pc1NlY3VyZUNvbnRleHQoKSkgewogICAgICAgICBoYXNEaXNh
YmxlZFJ1bnRpbWVQcm9wZXJ0aWVzID0gdHJ1ZTsKLSAgICAgICAgYXV0byBwcm9wZXJ0eU5hbWUg
PSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hh
cio+KCJnZXRTZWNyZXRCb29sZWFuIiksIHN0cmxlbigiZ2V0U2VjcmV0Qm9vbGVhbiIpKTsKKyAg
ICAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWlu
dGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oImdldFNlY3JldEJvb2xlYW4iKSwgc3RybGVuKCJn
ZXRTZWNyZXRCb29sZWFuIikpOwogICAgICAgICBWTTo6RGVsZXRlUHJvcGVydHlNb2RlU2NvcGUg
c2NvcGUodm0sIFZNOjpEZWxldGVQcm9wZXJ0eU1vZGU6Oklnbm9yZUNvbmZpZ3VyYWJsZSk7CiAg
ICAgICAgIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eSh0aGlzLCBnbG9iYWxPYmplY3QoKS0+Z2xv
YmFsRXhlYygpLCBwcm9wZXJ0eU5hbWUpOwogICAgIH0KICNpZiBFTkFCTEUoVEVTVF9GRUFUVVJF
KQogICAgIGlmICghKGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCgpKS0+
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5pc1NlY3VyZUNvbnRleHQoKSAmJiBSdW50aW1lRW5h
YmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLnRlc3RGZWF0dXJlRW5hYmxlZCgpKSkgewog
ICAgICAgICBoYXNEaXNhYmxlZFJ1bnRpbWVQcm9wZXJ0aWVzID0gdHJ1ZTsKLSAgICAgICAgYXV0
byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBMQ2hhcio+KCJ0ZXN0RmVhdHVyZUdldFNlY3JldEJvb2xlYW4iKSwgc3RybGVu
KCJ0ZXN0RmVhdHVyZUdldFNlY3JldEJvb2xlYW4iKSk7CisgICAgICAgIGF1dG8gcHJvcGVydHlO
YW1lID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBM
Q2hhcio+KCJ0ZXN0RmVhdHVyZUdldFNlY3JldEJvb2xlYW4iKSwgc3RybGVuKCJ0ZXN0RmVhdHVy
ZUdldFNlY3JldEJvb2xlYW4iKSk7CiAgICAgICAgIFZNOjpEZWxldGVQcm9wZXJ0eU1vZGVTY29w
ZSBzY29wZSh2bSwgVk06OkRlbGV0ZVByb3BlcnR5TW9kZTo6SWdub3JlQ29uZmlndXJhYmxlKTsK
ICAgICAgICAgSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KHRoaXMsIGdsb2JhbE9iamVjdCgpLT5n
bG9iYWxFeGVjKCksIHByb3BlcnR5TmFtZSk7CiAgICAgfQogI2VuZGlmCiAgICAgaWYgKCFSdW50
aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLmRvbUl0ZXJhdG9yRW5hYmxlZCgp
KSB7CiAgICAgICAgIGhhc0Rpc2FibGVkUnVudGltZVByb3BlcnRpZXMgPSB0cnVlOwotICAgICAg
ICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCByZWludGVy
cHJldF9jYXN0PGNvbnN0IExDaGFyKj4oImVudHJpZXMiKSwgc3RybGVuKCJlbnRyaWVzIikpOwor
ICAgICAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiZW50cmllcyIpLCBzdHJsZW4oImVudHJpZXMi
KSk7CiAgICAgICAgIFZNOjpEZWxldGVQcm9wZXJ0eU1vZGVTY29wZSBzY29wZSh2bSwgVk06OkRl
bGV0ZVByb3BlcnR5TW9kZTo6SWdub3JlQ29uZmlndXJhYmxlKTsKICAgICAgICAgSlNPYmplY3Q6
OmRlbGV0ZVByb3BlcnR5KHRoaXMsIGdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCksIHByb3Bl
cnR5TmFtZSk7CiAgICAgfQogICAgIGlmICghUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVk
RmVhdHVyZXMoKS5kb21JdGVyYXRvckVuYWJsZWQoKSkgewogICAgICAgICBoYXNEaXNhYmxlZFJ1
bnRpbWVQcm9wZXJ0aWVzID0gdHJ1ZTsKLSAgICAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJr
ZXlzIiksIHN0cmxlbigia2V5cyIpKTsKKyAgICAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oImtl
eXMiKSwgc3RybGVuKCJrZXlzIikpOwogICAgICAgICBWTTo6RGVsZXRlUHJvcGVydHlNb2RlU2Nv
cGUgc2NvcGUodm0sIFZNOjpEZWxldGVQcm9wZXJ0eU1vZGU6Oklnbm9yZUNvbmZpZ3VyYWJsZSk7
CiAgICAgICAgIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eSh0aGlzLCBnbG9iYWxPYmplY3QoKS0+
Z2xvYmFsRXhlYygpLCBwcm9wZXJ0eU5hbWUpOwogICAgIH0KICAgICBpZiAoIVJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkuZG9tSXRlcmF0b3JFbmFibGVkKCkpIHsKICAg
ICAgICAgaGFzRGlzYWJsZWRSdW50aW1lUHJvcGVydGllcyA9IHRydWU7Ci0gICAgICAgIGF1dG8g
cHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgTENoYXIqPigidmFsdWVzIiksIHN0cmxlbigidmFsdWVzIikpOworICAgICAgICBh
dXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgTENoYXIqPigidmFsdWVzIiksIHN0cmxlbigidmFsdWVzIikpOwogICAgICAg
ICBWTTo6RGVsZXRlUHJvcGVydHlNb2RlU2NvcGUgc2NvcGUodm0sIFZNOjpEZWxldGVQcm9wZXJ0
eU1vZGU6Oklnbm9yZUNvbmZpZ3VyYWJsZSk7CiAgICAgICAgIEpTT2JqZWN0OjpkZWxldGVQcm9w
ZXJ0eSh0aGlzLCBnbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpLCBwcm9wZXJ0eU5hbWUpOwog
ICAgIH0KICAgICBpZiAoIVJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCku
ZG9tSXRlcmF0b3JFbmFibGVkKCkpIHsKICAgICAgICAgaGFzRGlzYWJsZWRSdW50aW1lUHJvcGVy
dGllcyA9IHRydWU7Ci0gICAgICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJv
bVN0cmluZygmdm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiZm9yRWFjaCIpLCBz
dHJsZW4oImZvckVhY2giKSk7CisgICAgICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmll
cjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJmb3JFYWNo
IiksIHN0cmxlbigiZm9yRWFjaCIpKTsKICAgICAgICAgVk06OkRlbGV0ZVByb3BlcnR5TW9kZVNj
b3BlIHNjb3BlKHZtLCBWTTo6RGVsZXRlUHJvcGVydHlNb2RlOjpJZ25vcmVDb25maWd1cmFibGUp
OwogICAgICAgICBKU09iamVjdDo6ZGVsZXRlUHJvcGVydHkodGhpcywgZ2xvYmFsT2JqZWN0KCkt
Pmdsb2JhbEV4ZWMoKSwgcHJvcGVydHlOYW1lKTsKICAgICB9CkBAIC0yNzUsNiArMjc1LDcgQEAg
RW5jb2RlZEpTVmFsdWUganNUZXN0Tm9kZU5hbWUoRXhlY1N0YXRlKgogCiBzdGF0aWMgaW5saW5l
IGJvb2wgc2V0SlNUZXN0Tm9kZU5hbWVTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0Tm9k
ZSYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsK
KyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
ICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVW
YWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPihzdGF0ZSwgdmFsdWUpOwpAQCAtNDA5LDcgKzQx
MCw3IEBAIEpTQzo6SlNPYmplY3QqIEpTVGVzdE5vZGU6OnNlcmlhbGl6ZShFeGUKIAogICAgIGF1
dG8gbmFtZVZhbHVlID0ganNUZXN0Tm9kZU5hbWVHZXR0ZXIoc3RhdGUsIHRoaXNPYmplY3QsIHRo
cm93U2NvcGUpOwogICAgIHRocm93U2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKLSAgICByZXN1
bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJuYW1lIiksIG5h
bWVWYWx1ZSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJp
bmcodm0sICJuYW1lIiksIG5hbWVWYWx1ZSk7CiAKICAgICByZXR1cm4gcmVzdWx0OwogfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE9iai5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MzUsNyAr
NDM1LDcgQEAgdGVtcGxhdGU8PiBUZXN0T2JqOjpEaWN0aW9uYXJ5IGNvbnZlcnREaQogICAgIGlm
IChpc051bGxPclVuZGVmaW5lZCkKICAgICAgICAgYW5ub3RhdGVkVHlwZUluU2VxdWVuY2VNZW1i
ZXJWYWx1ZSA9IGpzVW5kZWZpbmVkKCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIGFubm90YXRlZFR5
cGVJblNlcXVlbmNlTWVtYmVyVmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6
OmZyb21TdHJpbmcoJnN0YXRlLCAiYW5ub3RhdGVkVHlwZUluU2VxdWVuY2VNZW1iZXIiKSk7Cisg
ICAgICAgIGFubm90YXRlZFR5cGVJblNlcXVlbmNlTWVtYmVyVmFsdWUgPSBvYmplY3QtPmdldCgm
c3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJhbm5vdGF0ZWRUeXBlSW5TZXF1ZW5j
ZU1lbWJlciIpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0p
OwogICAgIH0KICAgICBpZiAoIWFubm90YXRlZFR5cGVJblNlcXVlbmNlTWVtYmVyVmFsdWUuaXNV
bmRlZmluZWQoKSkgewpAQCAtNDQ2LDcgKzQ0Niw3IEBAIHRlbXBsYXRlPD4gVGVzdE9iajo6RGlj
dGlvbmFyeSBjb252ZXJ0RGkKICAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQpCiAgICAgICAgIGFu
bm90YXRlZFR5cGVJblVuaW9uTWVtYmVyVmFsdWUgPSBqc1VuZGVmaW5lZCgpOwogICAgIGVsc2Ug
ewotICAgICAgICBhbm5vdGF0ZWRUeXBlSW5Vbmlvbk1lbWJlclZhbHVlID0gb2JqZWN0LT5nZXQo
JnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImFubm90YXRlZFR5cGVJblVu
aW9uTWVtYmVyIikpOworICAgICAgICBhbm5vdGF0ZWRUeXBlSW5Vbmlvbk1lbWJlclZhbHVlID0g
b2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiYW5ub3RhdGVk
VHlwZUluVW5pb25NZW1iZXIiKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dT
Y29wZSwgeyB9KTsKICAgICB9CiAgICAgaWYgKCFhbm5vdGF0ZWRUeXBlSW5Vbmlvbk1lbWJlclZh
bHVlLmlzVW5kZWZpbmVkKCkpIHsKQEAgLTQ1Nyw3ICs0NTcsNyBAQCB0ZW1wbGF0ZTw+IFRlc3RP
Ymo6OkRpY3Rpb25hcnkgY29udmVydERpCiAgICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKQogICAg
ICAgICBhbnlUeXBlZGVmVmFsdWVWYWx1ZSA9IGpzVW5kZWZpbmVkKCk7CiAgICAgZWxzZSB7Ci0g
ICAgICAgIGFueVR5cGVkZWZWYWx1ZVZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImFueVR5cGVkZWZWYWx1ZSIpKTsKKyAgICAgICAgYW55
VHlwZWRlZlZhbHVlVmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21T
dHJpbmcodm0sICJhbnlUeXBlZGVmVmFsdWUiKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04odGhyb3dTY29wZSwgeyB9KTsKICAgICB9CiAgICAgaWYgKCFhbnlUeXBlZGVmVmFsdWVWYWx1
ZS5pc1VuZGVmaW5lZCgpKSB7CkBAIC00NjksNyArNDY5LDcgQEAgdGVtcGxhdGU8PiBUZXN0T2Jq
OjpEaWN0aW9uYXJ5IGNvbnZlcnREaQogICAgIGlmIChpc051bGxPclVuZGVmaW5lZCkKICAgICAg
ICAgYW55VmFsdWVWYWx1ZSA9IGpzVW5kZWZpbmVkKCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIGFu
eVZhbHVlVmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmco
JnN0YXRlLCAiYW55VmFsdWUiKSk7CisgICAgICAgIGFueVZhbHVlVmFsdWUgPSBvYmplY3QtPmdl
dCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJhbnlWYWx1ZSIpKTsKICAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0KICAgICBpZiAo
IWFueVZhbHVlVmFsdWUuaXNVbmRlZmluZWQoKSkgewpAQCAtNDgxLDcgKzQ4MSw3IEBAIHRlbXBs
YXRlPD4gVGVzdE9iajo6RGljdGlvbmFyeSBjb252ZXJ0RGkKICAgICBpZiAoaXNOdWxsT3JVbmRl
ZmluZWQpCiAgICAgICAgIGFueVZhbHVlV2l0aE51bGxEZWZhdWx0VmFsdWUgPSBqc1VuZGVmaW5l
ZCgpOwogICAgIGVsc2UgewotICAgICAgICBhbnlWYWx1ZVdpdGhOdWxsRGVmYXVsdFZhbHVlID0g
b2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImFueVZh
bHVlV2l0aE51bGxEZWZhdWx0IikpOworICAgICAgICBhbnlWYWx1ZVdpdGhOdWxsRGVmYXVsdFZh
bHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiYW55
VmFsdWVXaXRoTnVsbERlZmF1bHQiKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgeyB9KTsKICAgICB9CiAgICAgaWYgKCFhbnlWYWx1ZVdpdGhOdWxsRGVmYXVsdFZh
bHVlLmlzVW5kZWZpbmVkKCkpIHsKQEAgLTQ5Myw3ICs0OTMsNyBAQCB0ZW1wbGF0ZTw+IFRlc3RP
Ymo6OkRpY3Rpb25hcnkgY29udmVydERpCiAgICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKQogICAg
ICAgICBib29sZWFuV2l0aERlZmF1bHRWYWx1ZSA9IGpzVW5kZWZpbmVkKCk7CiAgICAgZWxzZSB7
Ci0gICAgICAgIGJvb2xlYW5XaXRoRGVmYXVsdFZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImJvb2xlYW5XaXRoRGVmYXVsdCIpKTsKKyAg
ICAgICAgYm9vbGVhbldpdGhEZWZhdWx0VmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50
aWZpZXI6OmZyb21TdHJpbmcodm0sICJib29sZWFuV2l0aERlZmF1bHQiKSk7CiAgICAgICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICB9CiAgICAgaWYgKCFib29s
ZWFuV2l0aERlZmF1bHRWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7CkBAIC01MDUsNyArNTA1LDcgQEAg
dGVtcGxhdGU8PiBUZXN0T2JqOjpEaWN0aW9uYXJ5IGNvbnZlcnREaQogICAgIGlmIChpc051bGxP
clVuZGVmaW5lZCkKICAgICAgICAgYm9vbGVhbldpdGhvdXREZWZhdWx0VmFsdWUgPSBqc1VuZGVm
aW5lZCgpOwogICAgIGVsc2UgewotICAgICAgICBib29sZWFuV2l0aG91dERlZmF1bHRWYWx1ZSA9
IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJib29s
ZWFuV2l0aG91dERlZmF1bHQiKSk7CisgICAgICAgIGJvb2xlYW5XaXRob3V0RGVmYXVsdFZhbHVl
ID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiYm9vbGVh
bldpdGhvdXREZWZhdWx0IikpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2Nv
cGUsIHsgfSk7CiAgICAgfQogICAgIGlmICghYm9vbGVhbldpdGhvdXREZWZhdWx0VmFsdWUuaXNV
bmRlZmluZWQoKSkgewpAQCAtNTE2LDcgKzUxNiw3IEBAIHRlbXBsYXRlPD4gVGVzdE9iajo6RGlj
dGlvbmFyeSBjb252ZXJ0RGkKICAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQpCiAgICAgICAgIGJ1
ZmZlclNvdXJjZVZhbHVlVmFsdWUgPSBqc1VuZGVmaW5lZCgpOwogICAgIGVsc2UgewotICAgICAg
ICBidWZmZXJTb3VyY2VWYWx1ZVZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKCZzdGF0ZSwgImJ1ZmZlclNvdXJjZVZhbHVlIikpOworICAgICAgICBidWZm
ZXJTb3VyY2VWYWx1ZVZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKHZtLCAiYnVmZmVyU291cmNlVmFsdWUiKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICB9CiAgICAgaWYgKCFidWZmZXJTb3VyY2VWYWx1
ZVZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKQEAgLTUyNyw3ICs1MjcsNyBAQCB0ZW1wbGF0ZTw+IFRl
c3RPYmo6OkRpY3Rpb25hcnkgY29udmVydERpCiAgICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKQog
ICAgICAgICBkaWN0aW9uYXJ5TWVtYmVyVmFsdWUgPSBqc1VuZGVmaW5lZCgpOwogICAgIGVsc2Ug
ewotICAgICAgICBkaWN0aW9uYXJ5TWVtYmVyVmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAiZGljdGlvbmFyeU1lbWJlciIpKTsKKyAgICAg
ICAgZGljdGlvbmFyeU1lbWJlclZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKHZtLCAiZGljdGlvbmFyeU1lbWJlciIpKTsKICAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0KICAgICBpZiAoIWRpY3Rpb25hcnlN
ZW1iZXJWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7CkBAIC01MzgsNyArNTM4LDcgQEAgdGVtcGxhdGU8
PiBUZXN0T2JqOjpEaWN0aW9uYXJ5IGNvbnZlcnREaQogICAgIGlmIChpc051bGxPclVuZGVmaW5l
ZCkKICAgICAgICAgZW51bWVyYXRpb25WYWx1ZVdpdGhEZWZhdWx0VmFsdWUgPSBqc1VuZGVmaW5l
ZCgpOwogICAgIGVsc2UgewotICAgICAgICBlbnVtZXJhdGlvblZhbHVlV2l0aERlZmF1bHRWYWx1
ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJl
bnVtZXJhdGlvblZhbHVlV2l0aERlZmF1bHQiKSk7CisgICAgICAgIGVudW1lcmF0aW9uVmFsdWVX
aXRoRGVmYXVsdFZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKHZtLCAiZW51bWVyYXRpb25WYWx1ZVdpdGhEZWZhdWx0IikpOwogICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgfQogICAgIGlmICghZW51bWVyYXRp
b25WYWx1ZVdpdGhEZWZhdWx0VmFsdWUuaXNVbmRlZmluZWQoKSkgewpAQCAtNTUwLDcgKzU1MCw3
IEBAIHRlbXBsYXRlPD4gVGVzdE9iajo6RGljdGlvbmFyeSBjb252ZXJ0RGkKICAgICBpZiAoaXNO
dWxsT3JVbmRlZmluZWQpCiAgICAgICAgIGVudW1lcmF0aW9uVmFsdWVXaXRoRW1wdHlTdHJpbmdE
ZWZhdWx0VmFsdWUgPSBqc1VuZGVmaW5lZCgpOwogICAgIGVsc2UgewotICAgICAgICBlbnVtZXJh
dGlvblZhbHVlV2l0aEVtcHR5U3RyaW5nRGVmYXVsdFZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRl
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImVudW1lcmF0aW9uVmFsdWVXaXRoRW1w
dHlTdHJpbmdEZWZhdWx0IikpOworICAgICAgICBlbnVtZXJhdGlvblZhbHVlV2l0aEVtcHR5U3Ry
aW5nRGVmYXVsdFZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKHZtLCAiZW51bWVyYXRpb25WYWx1ZVdpdGhFbXB0eVN0cmluZ0RlZmF1bHQiKSk7CiAgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICB9CiAgICAgaWYg
KCFlbnVtZXJhdGlvblZhbHVlV2l0aEVtcHR5U3RyaW5nRGVmYXVsdFZhbHVlLmlzVW5kZWZpbmVk
KCkpIHsKQEAgLTU2Miw3ICs1NjIsNyBAQCB0ZW1wbGF0ZTw+IFRlc3RPYmo6OkRpY3Rpb25hcnkg
Y29udmVydERpCiAgICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKQogICAgICAgICBlbnVtZXJhdGlv
blZhbHVlV2l0aG91dERlZmF1bHRWYWx1ZSA9IGpzVW5kZWZpbmVkKCk7CiAgICAgZWxzZSB7Ci0g
ICAgICAgIGVudW1lcmF0aW9uVmFsdWVXaXRob3V0RGVmYXVsdFZhbHVlID0gb2JqZWN0LT5nZXQo
JnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImVudW1lcmF0aW9uVmFsdWVX
aXRob3V0RGVmYXVsdCIpKTsKKyAgICAgICAgZW51bWVyYXRpb25WYWx1ZVdpdGhvdXREZWZhdWx0
VmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJl
bnVtZXJhdGlvblZhbHVlV2l0aG91dERlZmF1bHQiKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICB9CiAgICAgaWYgKCFlbnVtZXJhdGlvblZhbHVl
V2l0aG91dERlZmF1bHRWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7CkBAIC01NzMsNyArNTczLDcgQEAg
dGVtcGxhdGU8PiBUZXN0T2JqOjpEaWN0aW9uYXJ5IGNvbnZlcnREaQogICAgIGlmIChpc051bGxP
clVuZGVmaW5lZCkKICAgICAgICAgZm9vQWxpYXNWYWx1ZSA9IGpzVW5kZWZpbmVkKCk7CiAgICAg
ZWxzZSB7Ci0gICAgICAgIGZvb0FsaWFzVmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50
aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAiZm9vQWxpYXMiKSk7CisgICAgICAgIGZvb0FsaWFz
VmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJm
b29BbGlhcyIpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0p
OwogICAgIH0KICAgICBpZiAoIWZvb0FsaWFzVmFsdWUuaXNVbmRlZmluZWQoKSkgewpAQCAtNTg1
LDcgKzU4NSw3IEBAIHRlbXBsYXRlPD4gVGVzdE9iajo6RGljdGlvbmFyeSBjb252ZXJ0RGkKICAg
ICBpZiAoaXNOdWxsT3JVbmRlZmluZWQpCiAgICAgICAgIGZvb1dpdGhEZWZhdWx0QWxpYXNWYWx1
ZSA9IGpzVW5kZWZpbmVkKCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIGZvb1dpdGhEZWZhdWx0QWxp
YXNWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3Rh
dGUsICJmb29XaXRoRGVmYXVsdEFsaWFzIikpOworICAgICAgICBmb29XaXRoRGVmYXVsdEFsaWFz
VmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJm
b29XaXRoRGVmYXVsdEFsaWFzIikpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIHsgfSk7CiAgICAgfQogICAgIGlmICghZm9vV2l0aERlZmF1bHRBbGlhc1ZhbHVlLmlz
VW5kZWZpbmVkKCkpIHsKQEAgLTU5Nyw3ICs1OTcsNyBAQCB0ZW1wbGF0ZTw+IFRlc3RPYmo6OkRp
Y3Rpb25hcnkgY29udmVydERpCiAgICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKQogICAgICAgICBp
bnRlZ2VyVmFsdWUgPSBqc1VuZGVmaW5lZCgpOwogICAgIGVsc2UgewotICAgICAgICBpbnRlZ2Vy
VmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRl
LCAiaW50ZWdlciIpKTsKKyAgICAgICAgaW50ZWdlclZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRl
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiaW50ZWdlciIpKTsKICAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0KICAgICBpZiAoIWludGVnZXJW
YWx1ZS5pc1VuZGVmaW5lZCgpKSB7CkBAIC02MDgsNyArNjA4LDcgQEAgdGVtcGxhdGU8PiBUZXN0
T2JqOjpEaWN0aW9uYXJ5IGNvbnZlcnREaQogICAgIGlmIChpc051bGxPclVuZGVmaW5lZCkKICAg
ICAgICAgaW50ZWdlcldpdGhEZWZhdWx0VmFsdWUgPSBqc1VuZGVmaW5lZCgpOwogICAgIGVsc2Ug
ewotICAgICAgICBpbnRlZ2VyV2l0aERlZmF1bHRWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJpbnRlZ2VyV2l0aERlZmF1bHQiKSk7Cisg
ICAgICAgIGludGVnZXJXaXRoRGVmYXVsdFZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiaW50ZWdlcldpdGhEZWZhdWx0IikpOwogICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgfQogICAgIGlmICghaW50
ZWdlcldpdGhEZWZhdWx0VmFsdWUuaXNVbmRlZmluZWQoKSkgewpAQCAtNjIwLDcgKzYyMCw3IEBA
IHRlbXBsYXRlPD4gVGVzdE9iajo6RGljdGlvbmFyeSBjb252ZXJ0RGkKICAgICBpZiAoaXNOdWxs
T3JVbmRlZmluZWQpCiAgICAgICAgIGxhcmdlSW50ZWdlclZhbHVlID0ganNVbmRlZmluZWQoKTsK
ICAgICBlbHNlIHsKLSAgICAgICAgbGFyZ2VJbnRlZ2VyVmFsdWUgPSBvYmplY3QtPmdldCgmc3Rh
dGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAibGFyZ2VJbnRlZ2VyIikpOworICAg
ICAgICBsYXJnZUludGVnZXJWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZyh2bSwgImxhcmdlSW50ZWdlciIpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0KICAgICBpZiAoIWxhcmdlSW50ZWdlclZhbHVl
LmlzVW5kZWZpbmVkKCkpIHsKQEAgLTYzMSw3ICs2MzEsNyBAQCB0ZW1wbGF0ZTw+IFRlc3RPYmo6
OkRpY3Rpb25hcnkgY29udmVydERpCiAgICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKQogICAgICAg
ICBsYXJnZUludGVnZXJXaXRoRGVmYXVsdFZhbHVlID0ganNVbmRlZmluZWQoKTsKICAgICBlbHNl
IHsKLSAgICAgICAgbGFyZ2VJbnRlZ2VyV2l0aERlZmF1bHRWYWx1ZSA9IG9iamVjdC0+Z2V0KCZz
dGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJsYXJnZUludGVnZXJXaXRoRGVm
YXVsdCIpKTsKKyAgICAgICAgbGFyZ2VJbnRlZ2VyV2l0aERlZmF1bHRWYWx1ZSA9IG9iamVjdC0+
Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImxhcmdlSW50ZWdlcldpdGhE
ZWZhdWx0IikpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7
CiAgICAgfQogICAgIGlmICghbGFyZ2VJbnRlZ2VyV2l0aERlZmF1bHRWYWx1ZS5pc1VuZGVmaW5l
ZCgpKSB7CkBAIC02NDMsNyArNjQzLDcgQEAgdGVtcGxhdGU8PiBUZXN0T2JqOjpEaWN0aW9uYXJ5
IGNvbnZlcnREaQogICAgIGlmIChpc051bGxPclVuZGVmaW5lZCkKICAgICAgICAgbnVsbGFibGVF
bnVtVmFsdWUgPSBqc1VuZGVmaW5lZCgpOwogICAgIGVsc2UgewotICAgICAgICBudWxsYWJsZUVu
dW1WYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3Rh
dGUsICJudWxsYWJsZUVudW0iKSk7CisgICAgICAgIG51bGxhYmxlRW51bVZhbHVlID0gb2JqZWN0
LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAibnVsbGFibGVFbnVtIikp
OwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgfQog
ICAgIGlmICghbnVsbGFibGVFbnVtVmFsdWUuaXNVbmRlZmluZWQoKSkgewpAQCAtNjU1LDcgKzY1
NSw3IEBAIHRlbXBsYXRlPD4gVGVzdE9iajo6RGljdGlvbmFyeSBjb252ZXJ0RGkKICAgICBpZiAo
aXNOdWxsT3JVbmRlZmluZWQpCiAgICAgICAgIG51bGxhYmxlSW50ZWdlcldpdGhEZWZhdWx0VmFs
dWUgPSBqc1VuZGVmaW5lZCgpOwogICAgIGVsc2UgewotICAgICAgICBudWxsYWJsZUludGVnZXJX
aXRoRGVmYXVsdFZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKCZzdGF0ZSwgIm51bGxhYmxlSW50ZWdlcldpdGhEZWZhdWx0IikpOworICAgICAgICBudWxs
YWJsZUludGVnZXJXaXRoRGVmYXVsdFZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKHZtLCAibnVsbGFibGVJbnRlZ2VyV2l0aERlZmF1bHQiKSk7CiAgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICB9CiAgICAgaWYg
KCFudWxsYWJsZUludGVnZXJXaXRoRGVmYXVsdFZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKQEAgLTY2
Nyw3ICs2NjcsNyBAQCB0ZW1wbGF0ZTw+IFRlc3RPYmo6OkRpY3Rpb25hcnkgY29udmVydERpCiAg
ICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKQogICAgICAgICBudWxsYWJsZU5vZGVWYWx1ZSA9IGpz
VW5kZWZpbmVkKCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIG51bGxhYmxlTm9kZVZhbHVlID0gb2Jq
ZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgIm51bGxhYmxl
Tm9kZSIpKTsKKyAgICAgICAgbnVsbGFibGVOb2RlVmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUs
IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJudWxsYWJsZU5vZGUiKSk7CiAgICAgICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICB9CiAgICAgaWYgKCFudWxs
YWJsZU5vZGVWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7CkBAIC02NzksNyArNjc5LDcgQEAgdGVtcGxh
dGU8PiBUZXN0T2JqOjpEaWN0aW9uYXJ5IGNvbnZlcnREaQogICAgIGlmIChpc051bGxPclVuZGVm
aW5lZCkKICAgICAgICAgbnVsbGFibGVTdHJpbmdXaXRoRGVmYXVsdFZhbHVlID0ganNVbmRlZmlu
ZWQoKTsKICAgICBlbHNlIHsKLSAgICAgICAgbnVsbGFibGVTdHJpbmdXaXRoRGVmYXVsdFZhbHVl
ID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgIm51
bGxhYmxlU3RyaW5nV2l0aERlZmF1bHQiKSk7CisgICAgICAgIG51bGxhYmxlU3RyaW5nV2l0aERl
ZmF1bHRWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2
bSwgIm51bGxhYmxlU3RyaW5nV2l0aERlZmF1bHQiKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICB9CiAgICAgaWYgKCFudWxsYWJsZVN0cmluZ1dp
dGhEZWZhdWx0VmFsdWUuaXNVbmRlZmluZWQoKSkgewpAQCAtNjkxLDcgKzY5MSw3IEBAIHRlbXBs
YXRlPD4gVGVzdE9iajo6RGljdGlvbmFyeSBjb252ZXJ0RGkKICAgICBpZiAoaXNOdWxsT3JVbmRl
ZmluZWQpCiAgICAgICAgIG51bGxhYmxlVW5pb25NZW1iZXJWYWx1ZSA9IGpzVW5kZWZpbmVkKCk7
CiAgICAgZWxzZSB7Ci0gICAgICAgIG51bGxhYmxlVW5pb25NZW1iZXJWYWx1ZSA9IG9iamVjdC0+
Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJudWxsYWJsZVVuaW9u
TWVtYmVyIikpOworICAgICAgICBudWxsYWJsZVVuaW9uTWVtYmVyVmFsdWUgPSBvYmplY3QtPmdl
dCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJudWxsYWJsZVVuaW9uTWVtYmVy
IikpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAg
fQogICAgIGlmICghbnVsbGFibGVVbmlvbk1lbWJlclZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKQEAg
LTcwMyw3ICs3MDMsNyBAQCB0ZW1wbGF0ZTw+IFRlc3RPYmo6OkRpY3Rpb25hcnkgY29udmVydERp
CiAgICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKQogICAgICAgICByZXF1aXJlZEJ1ZmZlclNvdXJj
ZVZhbHVlVmFsdWUgPSBqc1VuZGVmaW5lZCgpOwogICAgIGVsc2UgewotICAgICAgICByZXF1aXJl
ZEJ1ZmZlclNvdXJjZVZhbHVlVmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6
OmZyb21TdHJpbmcoJnN0YXRlLCAicmVxdWlyZWRCdWZmZXJTb3VyY2VWYWx1ZSIpKTsKKyAgICAg
ICAgcmVxdWlyZWRCdWZmZXJTb3VyY2VWYWx1ZVZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAicmVxdWlyZWRCdWZmZXJTb3VyY2VWYWx1ZSIpKTsK
ICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0KICAg
ICBpZiAoIXJlcXVpcmVkQnVmZmVyU291cmNlVmFsdWVWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7CkBA
IC03MTcsNyArNzE3LDcgQEAgdGVtcGxhdGU8PiBUZXN0T2JqOjpEaWN0aW9uYXJ5IGNvbnZlcnRE
aQogICAgIGlmIChpc051bGxPclVuZGVmaW5lZCkKICAgICAgICAgcmVzdHJpY3RlZERvdWJsZVZh
bHVlID0ganNVbmRlZmluZWQoKTsKICAgICBlbHNlIHsKLSAgICAgICAgcmVzdHJpY3RlZERvdWJs
ZVZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0
ZSwgInJlc3RyaWN0ZWREb3VibGUiKSk7CisgICAgICAgIHJlc3RyaWN0ZWREb3VibGVWYWx1ZSA9
IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInJlc3RyaWN0
ZWREb3VibGUiKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9
KTsKICAgICB9CiAgICAgaWYgKCFyZXN0cmljdGVkRG91YmxlVmFsdWUuaXNVbmRlZmluZWQoKSkg
ewpAQCAtNzI4LDcgKzcyOCw3IEBAIHRlbXBsYXRlPD4gVGVzdE9iajo6RGljdGlvbmFyeSBjb252
ZXJ0RGkKICAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQpCiAgICAgICAgIHJlc3RyaWN0ZWREb3Vi
bGVXaXRoRGVmYXVsdFZhbHVlID0ganNVbmRlZmluZWQoKTsKICAgICBlbHNlIHsKLSAgICAgICAg
cmVzdHJpY3RlZERvdWJsZVdpdGhEZWZhdWx0VmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAicmVzdHJpY3RlZERvdWJsZVdpdGhEZWZhdWx0
IikpOworICAgICAgICByZXN0cmljdGVkRG91YmxlV2l0aERlZmF1bHRWYWx1ZSA9IG9iamVjdC0+
Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInJlc3RyaWN0ZWREb3VibGVX
aXRoRGVmYXVsdCIpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7
IH0pOwogICAgIH0KICAgICBpZiAoIXJlc3RyaWN0ZWREb3VibGVXaXRoRGVmYXVsdFZhbHVlLmlz
VW5kZWZpbmVkKCkpIHsKQEAgLTc0MCw3ICs3NDAsNyBAQCB0ZW1wbGF0ZTw+IFRlc3RPYmo6OkRp
Y3Rpb25hcnkgY29udmVydERpCiAgICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKQogICAgICAgICBy
ZXN0cmljdGVkRmxvYXRWYWx1ZSA9IGpzVW5kZWZpbmVkKCk7CiAgICAgZWxzZSB7Ci0gICAgICAg
IHJlc3RyaWN0ZWRGbG9hdFZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKCZzdGF0ZSwgInJlc3RyaWN0ZWRGbG9hdCIpKTsKKyAgICAgICAgcmVzdHJpY3Rl
ZEZsb2F0VmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmco
dm0sICJyZXN0cmljdGVkRmxvYXQiKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgeyB9KTsKICAgICB9CiAgICAgaWYgKCFyZXN0cmljdGVkRmxvYXRWYWx1ZS5pc1Vu
ZGVmaW5lZCgpKSB7CkBAIC03NTEsNyArNzUxLDcgQEAgdGVtcGxhdGU8PiBUZXN0T2JqOjpEaWN0
aW9uYXJ5IGNvbnZlcnREaQogICAgIGlmIChpc051bGxPclVuZGVmaW5lZCkKICAgICAgICAgcmVz
dHJpY3RlZEZsb2F0V2l0aERlZmF1bHRWYWx1ZSA9IGpzVW5kZWZpbmVkKCk7CiAgICAgZWxzZSB7
Ci0gICAgICAgIHJlc3RyaWN0ZWRGbG9hdFdpdGhEZWZhdWx0VmFsdWUgPSBvYmplY3QtPmdldCgm
c3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAicmVzdHJpY3RlZEZsb2F0V2l0
aERlZmF1bHQiKSk7CisgICAgICAgIHJlc3RyaWN0ZWRGbG9hdFdpdGhEZWZhdWx0VmFsdWUgPSBv
YmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJyZXN0cmljdGVk
RmxvYXRXaXRoRGVmYXVsdCIpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCB7IH0pOwogICAgIH0KICAgICBpZiAoIXJlc3RyaWN0ZWRGbG9hdFdpdGhEZWZhdWx0VmFs
dWUuaXNVbmRlZmluZWQoKSkgewpAQCAtNzYzLDcgKzc2Myw3IEBAIHRlbXBsYXRlPD4gVGVzdE9i
ajo6RGljdGlvbmFyeSBjb252ZXJ0RGkKICAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQpCiAgICAg
ICAgIHNlcXVlbmNlT2ZTdHJpbmdzVmFsdWUgPSBqc1VuZGVmaW5lZCgpOwogICAgIGVsc2Ugewot
ICAgICAgICBzZXF1ZW5jZU9mU3RyaW5nc1ZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgInNlcXVlbmNlT2ZTdHJpbmdzIikpOworICAgICAg
ICBzZXF1ZW5jZU9mU3RyaW5nc1ZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKHZtLCAic2VxdWVuY2VPZlN0cmluZ3MiKSk7CiAgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICB9CiAgICAgaWYgKCFzZXF1ZW5jZU9m
U3RyaW5nc1ZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKQEAgLTc3NCw3ICs3NzQsNyBAQCB0ZW1wbGF0
ZTw+IFRlc3RPYmo6OkRpY3Rpb25hcnkgY29udmVydERpCiAgICAgaWYgKGlzTnVsbE9yVW5kZWZp
bmVkKQogICAgICAgICBzbWFsbEludGVnZXJDbGFtcGVkVmFsdWUgPSBqc1VuZGVmaW5lZCgpOwog
ICAgIGVsc2UgewotICAgICAgICBzbWFsbEludGVnZXJDbGFtcGVkVmFsdWUgPSBvYmplY3QtPmdl
dCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAic21hbGxJbnRlZ2VyQ2xh
bXBlZCIpKTsKKyAgICAgICAgc21hbGxJbnRlZ2VyQ2xhbXBlZFZhbHVlID0gb2JqZWN0LT5nZXQo
JnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAic21hbGxJbnRlZ2VyQ2xhbXBlZCIp
KTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0K
ICAgICBpZiAoIXNtYWxsSW50ZWdlckNsYW1wZWRWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7CkBAIC03
ODUsNyArNzg1LDcgQEAgdGVtcGxhdGU8PiBUZXN0T2JqOjpEaWN0aW9uYXJ5IGNvbnZlcnREaQog
ICAgIGlmIChpc051bGxPclVuZGVmaW5lZCkKICAgICAgICAgc21hbGxJbnRlZ2VyV2l0aERlZmF1
bHRWYWx1ZSA9IGpzVW5kZWZpbmVkKCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIHNtYWxsSW50ZWdl
cldpdGhEZWZhdWx0VmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21T
dHJpbmcoJnN0YXRlLCAic21hbGxJbnRlZ2VyV2l0aERlZmF1bHQiKSk7CisgICAgICAgIHNtYWxs
SW50ZWdlcldpdGhEZWZhdWx0VmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6
OmZyb21TdHJpbmcodm0sICJzbWFsbEludGVnZXJXaXRoRGVmYXVsdCIpKTsKICAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0KICAgICBpZiAoIXNtYWxs
SW50ZWdlcldpdGhEZWZhdWx0VmFsdWUuaXNVbmRlZmluZWQoKSkgewpAQCAtNzk2LDcgKzc5Niw3
IEBAIHRlbXBsYXRlPD4gVGVzdE9iajo6RGljdGlvbmFyeSBjb252ZXJ0RGkKICAgICBpZiAoaXNO
dWxsT3JVbmRlZmluZWQpCiAgICAgICAgIHNtYWxsVW5zaWduZWRJbnRlZ2VyRW5mb3JjZWRSYW5n
ZVZhbHVlID0ganNVbmRlZmluZWQoKTsKICAgICBlbHNlIHsKLSAgICAgICAgc21hbGxVbnNpZ25l
ZEludGVnZXJFbmZvcmNlZFJhbmdlVmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAic21hbGxVbnNpZ25lZEludGVnZXJFbmZvcmNlZFJhbmdl
IikpOworICAgICAgICBzbWFsbFVuc2lnbmVkSW50ZWdlckVuZm9yY2VkUmFuZ2VWYWx1ZSA9IG9i
amVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInNtYWxsVW5zaWdu
ZWRJbnRlZ2VyRW5mb3JjZWRSYW5nZSIpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCB7IH0pOwogICAgIH0KICAgICBpZiAoIXNtYWxsVW5zaWduZWRJbnRlZ2VyRW5m
b3JjZWRSYW5nZVZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKQEAgLTgwNyw3ICs4MDcsNyBAQCB0ZW1w
bGF0ZTw+IFRlc3RPYmo6OkRpY3Rpb25hcnkgY29udmVydERpCiAgICAgaWYgKGlzTnVsbE9yVW5k
ZWZpbmVkKQogICAgICAgICBzbWFsbFVuc2lnbmVkSW50ZWdlcldpdGhEZWZhdWx0VmFsdWUgPSBq
c1VuZGVmaW5lZCgpOwogICAgIGVsc2UgewotICAgICAgICBzbWFsbFVuc2lnbmVkSW50ZWdlcldp
dGhEZWZhdWx0VmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJp
bmcoJnN0YXRlLCAic21hbGxVbnNpZ25lZEludGVnZXJXaXRoRGVmYXVsdCIpKTsKKyAgICAgICAg
c21hbGxVbnNpZ25lZEludGVnZXJXaXRoRGVmYXVsdFZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRl
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAic21hbGxVbnNpZ25lZEludGVnZXJXaXRoRGVm
YXVsdCIpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwog
ICAgIH0KICAgICBpZiAoIXNtYWxsVW5zaWduZWRJbnRlZ2VyV2l0aERlZmF1bHRWYWx1ZS5pc1Vu
ZGVmaW5lZCgpKSB7CkBAIC04MTksNyArODE5LDcgQEAgdGVtcGxhdGU8PiBUZXN0T2JqOjpEaWN0
aW9uYXJ5IGNvbnZlcnREaQogICAgIGlmIChpc051bGxPclVuZGVmaW5lZCkKICAgICAgICAgc3Ry
aW5nVHJlYXROdWxsQXNFbXB0eVN0cmluZ1ZhbHVlID0ganNVbmRlZmluZWQoKTsKICAgICBlbHNl
IHsKLSAgICAgICAgc3RyaW5nVHJlYXROdWxsQXNFbXB0eVN0cmluZ1ZhbHVlID0gb2JqZWN0LT5n
ZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgInN0cmluZ1RyZWF0TnVs
bEFzRW1wdHlTdHJpbmciKSk7CisgICAgICAgIHN0cmluZ1RyZWF0TnVsbEFzRW1wdHlTdHJpbmdW
YWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInN0
cmluZ1RyZWF0TnVsbEFzRW1wdHlTdHJpbmciKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04odGhyb3dTY29wZSwgeyB9KTsKICAgICB9CiAgICAgaWYgKCFzdHJpbmdUcmVhdE51bGxBc0Vt
cHR5U3RyaW5nVmFsdWUuaXNVbmRlZmluZWQoKSkgewpAQCAtODMwLDcgKzgzMCw3IEBAIHRlbXBs
YXRlPD4gVGVzdE9iajo6RGljdGlvbmFyeSBjb252ZXJ0RGkKICAgICBpZiAoaXNOdWxsT3JVbmRl
ZmluZWQpCiAgICAgICAgIHN0cmluZ1dpdGhEZWZhdWx0VmFsdWUgPSBqc1VuZGVmaW5lZCgpOwog
ICAgIGVsc2UgewotICAgICAgICBzdHJpbmdXaXRoRGVmYXVsdFZhbHVlID0gb2JqZWN0LT5nZXQo
JnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgInN0cmluZ1dpdGhEZWZhdWx0
IikpOworICAgICAgICBzdHJpbmdXaXRoRGVmYXVsdFZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRl
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAic3RyaW5nV2l0aERlZmF1bHQiKSk7CiAgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICB9CiAgICAgaWYg
KCFzdHJpbmdXaXRoRGVmYXVsdFZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKQEAgLTg0Miw3ICs4NDIs
NyBAQCB0ZW1wbGF0ZTw+IFRlc3RPYmo6OkRpY3Rpb25hcnkgY29udmVydERpCiAgICAgaWYgKGlz
TnVsbE9yVW5kZWZpbmVkKQogICAgICAgICBzdHJpbmdXaXRob3V0RGVmYXVsdFZhbHVlID0ganNV
bmRlZmluZWQoKTsKICAgICBlbHNlIHsKLSAgICAgICAgc3RyaW5nV2l0aG91dERlZmF1bHRWYWx1
ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJz
dHJpbmdXaXRob3V0RGVmYXVsdCIpKTsKKyAgICAgICAgc3RyaW5nV2l0aG91dERlZmF1bHRWYWx1
ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInN0cmlu
Z1dpdGhvdXREZWZhdWx0IikpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2Nv
cGUsIHsgfSk7CiAgICAgfQogICAgIGlmICghc3RyaW5nV2l0aG91dERlZmF1bHRWYWx1ZS5pc1Vu
ZGVmaW5lZCgpKSB7CkBAIC04NTMsNyArODUzLDcgQEAgdGVtcGxhdGU8PiBUZXN0T2JqOjpEaWN0
aW9uYXJ5IGNvbnZlcnREaQogICAgIGlmIChpc051bGxPclVuZGVmaW5lZCkKICAgICAgICAgdW5p
b25NZW1iZXJWYWx1ZSA9IGpzVW5kZWZpbmVkKCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIHVuaW9u
TWVtYmVyVmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmco
JnN0YXRlLCAidW5pb25NZW1iZXIiKSk7CisgICAgICAgIHVuaW9uTWVtYmVyVmFsdWUgPSBvYmpl
Y3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJ1bmlvbk1lbWJlciIp
KTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0K
ICAgICBpZiAoIXVuaW9uTWVtYmVyVmFsdWUuaXNVbmRlZmluZWQoKSkgewpAQCAtODY0LDcgKzg2
NCw3IEBAIHRlbXBsYXRlPD4gVGVzdE9iajo6RGljdGlvbmFyeSBjb252ZXJ0RGkKICAgICBpZiAo
aXNOdWxsT3JVbmRlZmluZWQpCiAgICAgICAgIHVucmVzdHJpY3RlZERvdWJsZVZhbHVlID0ganNV
bmRlZmluZWQoKTsKICAgICBlbHNlIHsKLSAgICAgICAgdW5yZXN0cmljdGVkRG91YmxlVmFsdWUg
PSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAidW5y
ZXN0cmljdGVkRG91YmxlIikpOworICAgICAgICB1bnJlc3RyaWN0ZWREb3VibGVWYWx1ZSA9IG9i
amVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInVucmVzdHJpY3Rl
ZERvdWJsZSIpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0p
OwogICAgIH0KICAgICBpZiAoIXVucmVzdHJpY3RlZERvdWJsZVZhbHVlLmlzVW5kZWZpbmVkKCkp
IHsKQEAgLTg3NSw3ICs4NzUsNyBAQCB0ZW1wbGF0ZTw+IFRlc3RPYmo6OkRpY3Rpb25hcnkgY29u
dmVydERpCiAgICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKQogICAgICAgICB1bnJlc3RyaWN0ZWRE
b3VibGVXaXRoRGVmYXVsdFZhbHVlID0ganNVbmRlZmluZWQoKTsKICAgICBlbHNlIHsKLSAgICAg
ICAgdW5yZXN0cmljdGVkRG91YmxlV2l0aERlZmF1bHRWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0
ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJ1bnJlc3RyaWN0ZWREb3VibGVXaXRo
RGVmYXVsdCIpKTsKKyAgICAgICAgdW5yZXN0cmljdGVkRG91YmxlV2l0aERlZmF1bHRWYWx1ZSA9
IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInVucmVzdHJp
Y3RlZERvdWJsZVdpdGhEZWZhdWx0IikpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIHsgfSk7CiAgICAgfQogICAgIGlmICghdW5yZXN0cmljdGVkRG91YmxlV2l0aERl
ZmF1bHRWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7CkBAIC04ODcsNyArODg3LDcgQEAgdGVtcGxhdGU8
PiBUZXN0T2JqOjpEaWN0aW9uYXJ5IGNvbnZlcnREaQogICAgIGlmIChpc051bGxPclVuZGVmaW5l
ZCkKICAgICAgICAgdW5yZXN0cmljdGVkRmxvYXRWYWx1ZSA9IGpzVW5kZWZpbmVkKCk7CiAgICAg
ZWxzZSB7Ci0gICAgICAgIHVucmVzdHJpY3RlZEZsb2F0VmFsdWUgPSBvYmplY3QtPmdldCgmc3Rh
dGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAidW5yZXN0cmljdGVkRmxvYXQiKSk7
CisgICAgICAgIHVucmVzdHJpY3RlZEZsb2F0VmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJ1bnJlc3RyaWN0ZWRGbG9hdCIpKTsKICAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0KICAgICBpZiAoIXVu
cmVzdHJpY3RlZEZsb2F0VmFsdWUuaXNVbmRlZmluZWQoKSkgewpAQCAtODk4LDcgKzg5OCw3IEBA
IHRlbXBsYXRlPD4gVGVzdE9iajo6RGljdGlvbmFyeSBjb252ZXJ0RGkKICAgICBpZiAoaXNOdWxs
T3JVbmRlZmluZWQpCiAgICAgICAgIHVucmVzdHJpY3RlZEZsb2F0V2l0aERlZmF1bHRWYWx1ZSA9
IGpzVW5kZWZpbmVkKCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIHVucmVzdHJpY3RlZEZsb2F0V2l0
aERlZmF1bHRWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zygmc3RhdGUsICJ1bnJlc3RyaWN0ZWRGbG9hdFdpdGhEZWZhdWx0IikpOworICAgICAgICB1bnJl
c3RyaWN0ZWRGbG9hdFdpdGhEZWZhdWx0VmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50
aWZpZXI6OmZyb21TdHJpbmcodm0sICJ1bnJlc3RyaWN0ZWRGbG9hdFdpdGhEZWZhdWx0IikpOwog
ICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgfQogICAg
IGlmICghdW5yZXN0cmljdGVkRmxvYXRXaXRoRGVmYXVsdFZhbHVlLmlzVW5kZWZpbmVkKCkpIHsK
QEAgLTkxMCw3ICs5MTAsNyBAQCB0ZW1wbGF0ZTw+IFRlc3RPYmo6OkRpY3Rpb25hcnkgY29udmVy
dERpCiAgICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKQogICAgICAgICB1bnNpZ25lZEludGVnZXJW
YWx1ZSA9IGpzVW5kZWZpbmVkKCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIHVuc2lnbmVkSW50ZWdl
clZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0
ZSwgInVuc2lnbmVkSW50ZWdlciIpKTsKKyAgICAgICAgdW5zaWduZWRJbnRlZ2VyVmFsdWUgPSBv
YmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJ1bnNpZ25lZElu
dGVnZXIiKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsK
ICAgICB9CiAgICAgaWYgKCF1bnNpZ25lZEludGVnZXJWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7CkBA
IC05MjEsNyArOTIxLDcgQEAgdGVtcGxhdGU8PiBUZXN0T2JqOjpEaWN0aW9uYXJ5IGNvbnZlcnRE
aQogICAgIGlmIChpc051bGxPclVuZGVmaW5lZCkKICAgICAgICAgdW5zaWduZWRJbnRlZ2VyV2l0
aERlZmF1bHRWYWx1ZSA9IGpzVW5kZWZpbmVkKCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIHVuc2ln
bmVkSW50ZWdlcldpdGhEZWZhdWx0VmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAidW5zaWduZWRJbnRlZ2VyV2l0aERlZmF1bHQiKSk7Cisg
ICAgICAgIHVuc2lnbmVkSW50ZWdlcldpdGhEZWZhdWx0VmFsdWUgPSBvYmplY3QtPmdldCgmc3Rh
dGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJ1bnNpZ25lZEludGVnZXJXaXRoRGVmYXVs
dCIpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAg
IH0KICAgICBpZiAoIXVuc2lnbmVkSW50ZWdlcldpdGhEZWZhdWx0VmFsdWUuaXNVbmRlZmluZWQo
KSkgewpAQCAtOTMzLDcgKzkzMyw3IEBAIHRlbXBsYXRlPD4gVGVzdE9iajo6RGljdGlvbmFyeSBj
b252ZXJ0RGkKICAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQpCiAgICAgICAgIHVuc2lnbmVkTGFy
Z2VJbnRlZ2VyVmFsdWUgPSBqc1VuZGVmaW5lZCgpOwogICAgIGVsc2UgewotICAgICAgICB1bnNp
Z25lZExhcmdlSW50ZWdlclZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKCZzdGF0ZSwgInVuc2lnbmVkTGFyZ2VJbnRlZ2VyIikpOworICAgICAgICB1bnNp
Z25lZExhcmdlSW50ZWdlclZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCAidW5zaWduZWRMYXJnZUludGVnZXIiKSk7CiAgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICB9CiAgICAgaWYgKCF1bnNpZ25lZExh
cmdlSW50ZWdlclZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKQEAgLTk0NCw3ICs5NDQsNyBAQCB0ZW1w
bGF0ZTw+IFRlc3RPYmo6OkRpY3Rpb25hcnkgY29udmVydERpCiAgICAgaWYgKGlzTnVsbE9yVW5k
ZWZpbmVkKQogICAgICAgICB1bnNpZ25lZExhcmdlSW50ZWdlcldpdGhEZWZhdWx0VmFsdWUgPSBq
c1VuZGVmaW5lZCgpOwogICAgIGVsc2UgewotICAgICAgICB1bnNpZ25lZExhcmdlSW50ZWdlcldp
dGhEZWZhdWx0VmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJp
bmcoJnN0YXRlLCAidW5zaWduZWRMYXJnZUludGVnZXJXaXRoRGVmYXVsdCIpKTsKKyAgICAgICAg
dW5zaWduZWRMYXJnZUludGVnZXJXaXRoRGVmYXVsdFZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRl
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAidW5zaWduZWRMYXJnZUludGVnZXJXaXRoRGVm
YXVsdCIpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwog
ICAgIH0KICAgICBpZiAoIXVuc2lnbmVkTGFyZ2VJbnRlZ2VyV2l0aERlZmF1bHRWYWx1ZS5pc1Vu
ZGVmaW5lZCgpKSB7CkBAIC05NjMsMTM2ICs5NjMsMTM2IEBAIEpTQzo6SlNPYmplY3QqIGNvbnZl
cnREaWN0aW9uYXJ5VG9KUyhKU0MKIAogICAgIGlmICghSURMU2VxdWVuY2U8SURMQ2xhbXBBZGFw
dG9yPElETExvbmc+Pjo6aXNOdWxsVmFsdWUoZGljdGlvbmFyeS5hbm5vdGF0ZWRUeXBlSW5TZXF1
ZW5jZU1lbWJlcikpIHsKICAgICAgICAgYXV0byBhbm5vdGF0ZWRUeXBlSW5TZXF1ZW5jZU1lbWJl
clZhbHVlID0gdG9KUzxJRExTZXF1ZW5jZTxJRExDbGFtcEFkYXB0b3I8SURMTG9uZz4+PihzdGF0
ZSwgZ2xvYmFsT2JqZWN0LCBJRExTZXF1ZW5jZTxJRExDbGFtcEFkYXB0b3I8SURMTG9uZz4+Ojpl
eHRyYWN0VmFsdWVGcm9tTnVsbGFibGUoZGljdGlvbmFyeS5hbm5vdGF0ZWRUeXBlSW5TZXF1ZW5j
ZU1lbWJlcikpOwotICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKCZ2bSwgImFubm90YXRlZFR5cGVJblNlcXVlbmNlTWVtYmVyIiksIGFubm90
YXRlZFR5cGVJblNlcXVlbmNlTWVtYmVyVmFsdWUpOworICAgICAgICByZXN1bHQtPnB1dERpcmVj
dCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiYW5ub3RhdGVkVHlwZUluU2Vx
dWVuY2VNZW1iZXIiKSwgYW5ub3RhdGVkVHlwZUluU2VxdWVuY2VNZW1iZXJWYWx1ZSk7CiAgICAg
fQogICAgIGlmICghSURMVW5pb248SURMRE9NU3RyaW5nLCBJRExDbGFtcEFkYXB0b3I8SURMTG9u
Zz4+Ojppc051bGxWYWx1ZShkaWN0aW9uYXJ5LmFubm90YXRlZFR5cGVJblVuaW9uTWVtYmVyKSkg
ewogICAgICAgICBhdXRvIGFubm90YXRlZFR5cGVJblVuaW9uTWVtYmVyVmFsdWUgPSB0b0pTPElE
TFVuaW9uPElETERPTVN0cmluZywgSURMQ2xhbXBBZGFwdG9yPElETExvbmc+Pj4oc3RhdGUsIGds
b2JhbE9iamVjdCwgSURMVW5pb248SURMRE9NU3RyaW5nLCBJRExDbGFtcEFkYXB0b3I8SURMTG9u
Zz4+OjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUoZGljdGlvbmFyeS5hbm5vdGF0ZWRUeXBlSW5V
bmlvbk1lbWJlcikpOwotICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKCZ2bSwgImFubm90YXRlZFR5cGVJblVuaW9uTWVtYmVyIiksIGFubm90
YXRlZFR5cGVJblVuaW9uTWVtYmVyVmFsdWUpOworICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2
bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiYW5ub3RhdGVkVHlwZUluVW5pb25N
ZW1iZXIiKSwgYW5ub3RhdGVkVHlwZUluVW5pb25NZW1iZXJWYWx1ZSk7CiAgICAgfQogICAgIGF1
dG8gYW55VHlwZWRlZlZhbHVlVmFsdWUgPSB0b0pTPElETEFueT4oZGljdGlvbmFyeS5hbnlUeXBl
ZGVmVmFsdWUpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZy
b21TdHJpbmcoJnZtLCAiYW55VHlwZWRlZlZhbHVlIiksIGFueVR5cGVkZWZWYWx1ZVZhbHVlKTsK
KyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZt
LCAiYW55VHlwZWRlZlZhbHVlIiksIGFueVR5cGVkZWZWYWx1ZVZhbHVlKTsKICAgICBhdXRvIGFu
eVZhbHVlVmFsdWUgPSB0b0pTPElETEFueT4oZGljdGlvbmFyeS5hbnlWYWx1ZSk7Ci0gICAgcmVz
dWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJhbnlW
YWx1ZSIpLCBhbnlWYWx1ZVZhbHVlKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiYW55VmFsdWUiKSwgYW55VmFsdWVWYWx1ZSk7CiAg
ICAgYXV0byBhbnlWYWx1ZVdpdGhOdWxsRGVmYXVsdFZhbHVlID0gdG9KUzxJRExBbnk+KGRpY3Rp
b25hcnkuYW55VmFsdWVXaXRoTnVsbERlZmF1bHQpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZt
LCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiYW55VmFsdWVXaXRoTnVsbERlZmF1
bHQiKSwgYW55VmFsdWVXaXRoTnVsbERlZmF1bHRWYWx1ZSk7CisgICAgcmVzdWx0LT5wdXREaXJl
Y3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImFueVZhbHVlV2l0aE51bGxE
ZWZhdWx0IiksIGFueVZhbHVlV2l0aE51bGxEZWZhdWx0VmFsdWUpOwogICAgIGF1dG8gYm9vbGVh
bldpdGhEZWZhdWx0VmFsdWUgPSB0b0pTPElETEJvb2xlYW4+KGRpY3Rpb25hcnkuYm9vbGVhbldp
dGhEZWZhdWx0KTsKLSAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKCZ2bSwgImJvb2xlYW5XaXRoRGVmYXVsdCIpLCBib29sZWFuV2l0aERlZmF1bHRW
YWx1ZSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0
cmluZyh2bSwgImJvb2xlYW5XaXRoRGVmYXVsdCIpLCBib29sZWFuV2l0aERlZmF1bHRWYWx1ZSk7
CiAgICAgaWYgKCFJRExCb29sZWFuOjppc051bGxWYWx1ZShkaWN0aW9uYXJ5LmJvb2xlYW5XaXRo
b3V0RGVmYXVsdCkpIHsKICAgICAgICAgYXV0byBib29sZWFuV2l0aG91dERlZmF1bHRWYWx1ZSA9
IHRvSlM8SURMQm9vbGVhbj4oSURMQm9vbGVhbjo6ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKGRp
Y3Rpb25hcnkuYm9vbGVhbldpdGhvdXREZWZhdWx0KSk7Ci0gICAgICAgIHJlc3VsdC0+cHV0RGly
ZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiYm9vbGVhbldpdGhvdXRE
ZWZhdWx0IiksIGJvb2xlYW5XaXRob3V0RGVmYXVsdFZhbHVlKTsKKyAgICAgICAgcmVzdWx0LT5w
dXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImJvb2xlYW5XaXRo
b3V0RGVmYXVsdCIpLCBib29sZWFuV2l0aG91dERlZmF1bHRWYWx1ZSk7CiAgICAgfQogICAgIGlm
ICghSURMVW5pb248SURMQXJyYXlCdWZmZXJWaWV3LCBJRExBcnJheUJ1ZmZlcj46OmlzTnVsbFZh
bHVlKGRpY3Rpb25hcnkuYnVmZmVyU291cmNlVmFsdWUpKSB7CiAgICAgICAgIGF1dG8gYnVmZmVy
U291cmNlVmFsdWVWYWx1ZSA9IHRvSlM8SURMVW5pb248SURMQXJyYXlCdWZmZXJWaWV3LCBJRExB
cnJheUJ1ZmZlcj4+KHN0YXRlLCBnbG9iYWxPYmplY3QsIElETFVuaW9uPElETEFycmF5QnVmZmVy
VmlldywgSURMQXJyYXlCdWZmZXI+OjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUoZGljdGlvbmFy
eS5idWZmZXJTb3VyY2VWYWx1ZSkpOwotICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlND
OjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImJ1ZmZlclNvdXJjZVZhbHVlIiksIGJ1ZmZl
clNvdXJjZVZhbHVlVmFsdWUpOworICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiYnVmZmVyU291cmNlVmFsdWUiKSwgYnVmZmVyU291
cmNlVmFsdWVWYWx1ZSk7CiAgICAgfQogICAgIGlmICghSURMRGljdGlvbmFyeTxUZXN0T2JqOjpE
aWN0aW9uYXJ5VGhhdFNob3VsZFRvbGVyYXRlTnVsbD46OmlzTnVsbFZhbHVlKGRpY3Rpb25hcnku
ZGljdGlvbmFyeU1lbWJlcikpIHsKICAgICAgICAgYXV0byBkaWN0aW9uYXJ5TWVtYmVyVmFsdWUg
PSB0b0pTPElETERpY3Rpb25hcnk8VGVzdE9iajo6RGljdGlvbmFyeVRoYXRTaG91bGRUb2xlcmF0
ZU51bGw+PihzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBJRExEaWN0aW9uYXJ5PFRlc3RPYmo6OkRpY3Rp
b25hcnlUaGF0U2hvdWxkVG9sZXJhdGVOdWxsPjo6ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKGRp
Y3Rpb25hcnkuZGljdGlvbmFyeU1lbWJlcikpOwotICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2
bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImRpY3Rpb25hcnlNZW1iZXIiKSwg
ZGljdGlvbmFyeU1lbWJlclZhbHVlKTsKKyAgICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIEpT
Qzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImRpY3Rpb25hcnlNZW1iZXIiKSwgZGljdGlv
bmFyeU1lbWJlclZhbHVlKTsKICAgICB9CiAgICAgYXV0byBlbnVtZXJhdGlvblZhbHVlV2l0aERl
ZmF1bHRWYWx1ZSA9IHRvSlM8SURMRW51bWVyYXRpb248VGVzdE9iajo6RW51bVR5cGU+PihzdGF0
ZSwgZGljdGlvbmFyeS5lbnVtZXJhdGlvblZhbHVlV2l0aERlZmF1bHQpOwotICAgIHJlc3VsdC0+
cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiZW51bWVyYXRp
b25WYWx1ZVdpdGhEZWZhdWx0IiksIGVudW1lcmF0aW9uVmFsdWVXaXRoRGVmYXVsdFZhbHVlKTsK
KyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZt
LCAiZW51bWVyYXRpb25WYWx1ZVdpdGhEZWZhdWx0IiksIGVudW1lcmF0aW9uVmFsdWVXaXRoRGVm
YXVsdFZhbHVlKTsKICAgICBhdXRvIGVudW1lcmF0aW9uVmFsdWVXaXRoRW1wdHlTdHJpbmdEZWZh
dWx0VmFsdWUgPSB0b0pTPElETEVudW1lcmF0aW9uPFRlc3RPYmo6OkVudW1UeXBlPj4oc3RhdGUs
IGRpY3Rpb25hcnkuZW51bWVyYXRpb25WYWx1ZVdpdGhFbXB0eVN0cmluZ0RlZmF1bHQpOwotICAg
IHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAi
ZW51bWVyYXRpb25WYWx1ZVdpdGhFbXB0eVN0cmluZ0RlZmF1bHQiKSwgZW51bWVyYXRpb25WYWx1
ZVdpdGhFbXB0eVN0cmluZ0RlZmF1bHRWYWx1ZSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0s
IEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImVudW1lcmF0aW9uVmFsdWVXaXRoRW1w
dHlTdHJpbmdEZWZhdWx0IiksIGVudW1lcmF0aW9uVmFsdWVXaXRoRW1wdHlTdHJpbmdEZWZhdWx0
VmFsdWUpOwogICAgIGlmICghSURMRW51bWVyYXRpb248VGVzdE9iajo6RW51bVR5cGU+Ojppc051
bGxWYWx1ZShkaWN0aW9uYXJ5LmVudW1lcmF0aW9uVmFsdWVXaXRob3V0RGVmYXVsdCkpIHsKICAg
ICAgICAgYXV0byBlbnVtZXJhdGlvblZhbHVlV2l0aG91dERlZmF1bHRWYWx1ZSA9IHRvSlM8SURM
RW51bWVyYXRpb248VGVzdE9iajo6RW51bVR5cGU+PihzdGF0ZSwgSURMRW51bWVyYXRpb248VGVz
dE9iajo6RW51bVR5cGU+OjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUoZGljdGlvbmFyeS5lbnVt
ZXJhdGlvblZhbHVlV2l0aG91dERlZmF1bHQpKTsKLSAgICAgICAgcmVzdWx0LT5wdXREaXJlY3Qo
dm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJlbnVtZXJhdGlvblZhbHVlV2l0
aG91dERlZmF1bHQiKSwgZW51bWVyYXRpb25WYWx1ZVdpdGhvdXREZWZhdWx0VmFsdWUpOworICAg
ICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZt
LCAiZW51bWVyYXRpb25WYWx1ZVdpdGhvdXREZWZhdWx0IiksIGVudW1lcmF0aW9uVmFsdWVXaXRo
b3V0RGVmYXVsdFZhbHVlKTsKICAgICB9CiAgICAgYXV0byBmb29BbGlhc1ZhbHVlID0gdG9KUzxJ
RExBbnk+KGRpY3Rpb25hcnkuZm9vKTsKLSAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImZvb0FsaWFzIiksIGZvb0FsaWFzVmFsdWUpOwor
ICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0s
ICJmb29BbGlhcyIpLCBmb29BbGlhc1ZhbHVlKTsKICAgICBhdXRvIGZvb1dpdGhEZWZhdWx0QWxp
YXNWYWx1ZSA9IHRvSlM8SURMQW55PihkaWN0aW9uYXJ5LmZvb1dpdGhEZWZhdWx0KTsKLSAgICBy
ZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImZv
b1dpdGhEZWZhdWx0QWxpYXMiKSwgZm9vV2l0aERlZmF1bHRBbGlhc1ZhbHVlKTsKKyAgICByZXN1
bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiZm9vV2l0
aERlZmF1bHRBbGlhcyIpLCBmb29XaXRoRGVmYXVsdEFsaWFzVmFsdWUpOwogICAgIGlmICghSURM
TG9uZzo6aXNOdWxsVmFsdWUoZGljdGlvbmFyeS5pbnRlZ2VyKSkgewogICAgICAgICBhdXRvIGlu
dGVnZXJWYWx1ZSA9IHRvSlM8SURMTG9uZz4oSURMTG9uZzo6ZXh0cmFjdFZhbHVlRnJvbU51bGxh
YmxlKGRpY3Rpb25hcnkuaW50ZWdlcikpOwotICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwg
SlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImludGVnZXIiKSwgaW50ZWdlclZhbHVl
KTsKKyAgICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0
cmluZyh2bSwgImludGVnZXIiKSwgaW50ZWdlclZhbHVlKTsKICAgICB9CiAgICAgYXV0byBpbnRl
Z2VyV2l0aERlZmF1bHRWYWx1ZSA9IHRvSlM8SURMTG9uZz4oZGljdGlvbmFyeS5pbnRlZ2VyV2l0
aERlZmF1bHQpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZy
b21TdHJpbmcoJnZtLCAiaW50ZWdlcldpdGhEZWZhdWx0IiksIGludGVnZXJXaXRoRGVmYXVsdFZh
bHVlKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKHZtLCAiaW50ZWdlcldpdGhEZWZhdWx0IiksIGludGVnZXJXaXRoRGVmYXVsdFZhbHVlKTsK
ICAgICBpZiAoIUlETExvbmdMb25nOjppc051bGxWYWx1ZShkaWN0aW9uYXJ5LmxhcmdlSW50ZWdl
cikpIHsKICAgICAgICAgYXV0byBsYXJnZUludGVnZXJWYWx1ZSA9IHRvSlM8SURMTG9uZ0xvbmc+
KElETExvbmdMb25nOjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUoZGljdGlvbmFyeS5sYXJnZUlu
dGVnZXIpKTsKLSAgICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6
ZnJvbVN0cmluZygmdm0sICJsYXJnZUludGVnZXIiKSwgbGFyZ2VJbnRlZ2VyVmFsdWUpOworICAg
ICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZt
LCAibGFyZ2VJbnRlZ2VyIiksIGxhcmdlSW50ZWdlclZhbHVlKTsKICAgICB9CiAgICAgYXV0byBs
YXJnZUludGVnZXJXaXRoRGVmYXVsdFZhbHVlID0gdG9KUzxJRExMb25nTG9uZz4oZGljdGlvbmFy
eS5sYXJnZUludGVnZXJXaXRoRGVmYXVsdCk7Ci0gICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIEpT
Qzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJsYXJnZUludGVnZXJXaXRoRGVmYXVsdCIp
LCBsYXJnZUludGVnZXJXaXRoRGVmYXVsdFZhbHVlKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2
bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAibGFyZ2VJbnRlZ2VyV2l0aERlZmF1
bHQiKSwgbGFyZ2VJbnRlZ2VyV2l0aERlZmF1bHRWYWx1ZSk7CiAgICAgYXV0byBudWxsYWJsZUVu
dW1WYWx1ZSA9IHRvSlM8SURMTnVsbGFibGU8SURMRW51bWVyYXRpb248VGVzdE9iajo6RW51bVR5
cGU+Pj4oc3RhdGUsIGRpY3Rpb25hcnkubnVsbGFibGVFbnVtKTsKLSAgICByZXN1bHQtPnB1dERp
cmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgIm51bGxhYmxlRW51bSIp
LCBudWxsYWJsZUVudW1WYWx1ZSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRl
bnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIm51bGxhYmxlRW51bSIpLCBudWxsYWJsZUVudW1WYWx1
ZSk7CiAgICAgYXV0byBudWxsYWJsZUludGVnZXJXaXRoRGVmYXVsdFZhbHVlID0gdG9KUzxJRExO
dWxsYWJsZTxJRExMb25nPj4oZGljdGlvbmFyeS5udWxsYWJsZUludGVnZXJXaXRoRGVmYXVsdCk7
Ci0gICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygm
dm0sICJudWxsYWJsZUludGVnZXJXaXRoRGVmYXVsdCIpLCBudWxsYWJsZUludGVnZXJXaXRoRGVm
YXVsdFZhbHVlKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCAibnVsbGFibGVJbnRlZ2VyV2l0aERlZmF1bHQiKSwgbnVsbGFibGVJbnRl
Z2VyV2l0aERlZmF1bHRWYWx1ZSk7CiAgICAgYXV0byBudWxsYWJsZU5vZGVWYWx1ZSA9IHRvSlM8
SURMTnVsbGFibGU8SURMSW50ZXJmYWNlPE5vZGU+Pj4oc3RhdGUsIGdsb2JhbE9iamVjdCwgZGlj
dGlvbmFyeS5udWxsYWJsZU5vZGUpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6Oklk
ZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAibnVsbGFibGVOb2RlIiksIG51bGxhYmxlTm9kZVZh
bHVlKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKHZtLCAibnVsbGFibGVOb2RlIiksIG51bGxhYmxlTm9kZVZhbHVlKTsKICAgICBhdXRvIG51
bGxhYmxlU3RyaW5nV2l0aERlZmF1bHRWYWx1ZSA9IHRvSlM8SURMTnVsbGFibGU8SURMRE9NU3Ry
aW5nPj4oc3RhdGUsIGRpY3Rpb25hcnkubnVsbGFibGVTdHJpbmdXaXRoRGVmYXVsdCk7Ci0gICAg
cmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJu
dWxsYWJsZVN0cmluZ1dpdGhEZWZhdWx0IiksIG51bGxhYmxlU3RyaW5nV2l0aERlZmF1bHRWYWx1
ZSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zyh2bSwgIm51bGxhYmxlU3RyaW5nV2l0aERlZmF1bHQiKSwgbnVsbGFibGVTdHJpbmdXaXRoRGVm
YXVsdFZhbHVlKTsKICAgICBhdXRvIG51bGxhYmxlVW5pb25NZW1iZXJWYWx1ZSA9IHRvSlM8SURM
TnVsbGFibGU8SURMVW5pb248SURMTG9uZywgSURMSW50ZXJmYWNlPE5vZGU+Pj4+KHN0YXRlLCBn
bG9iYWxPYmplY3QsIGRpY3Rpb25hcnkubnVsbGFibGVVbmlvbk1lbWJlcik7Ci0gICAgcmVzdWx0
LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJudWxsYWJs
ZVVuaW9uTWVtYmVyIiksIG51bGxhYmxlVW5pb25NZW1iZXJWYWx1ZSk7CisgICAgcmVzdWx0LT5w
dXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIm51bGxhYmxlVW5p
b25NZW1iZXIiKSwgbnVsbGFibGVVbmlvbk1lbWJlclZhbHVlKTsKICAgICBhdXRvIHJlcXVpcmVk
QnVmZmVyU291cmNlVmFsdWVWYWx1ZSA9IHRvSlM8SURMVW5pb248SURMQXJyYXlCdWZmZXJWaWV3
LCBJRExBcnJheUJ1ZmZlcj4+KHN0YXRlLCBnbG9iYWxPYmplY3QsIGRpY3Rpb25hcnkucmVxdWly
ZWRCdWZmZXJTb3VyY2VWYWx1ZSk7Ci0gICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRl
bnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJyZXF1aXJlZEJ1ZmZlclNvdXJjZVZhbHVlIiksIHJl
cXVpcmVkQnVmZmVyU291cmNlVmFsdWVWYWx1ZSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0s
IEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInJlcXVpcmVkQnVmZmVyU291cmNlVmFs
dWUiKSwgcmVxdWlyZWRCdWZmZXJTb3VyY2VWYWx1ZVZhbHVlKTsKICAgICBpZiAoIUlETERvdWJs
ZTo6aXNOdWxsVmFsdWUoZGljdGlvbmFyeS5yZXN0cmljdGVkRG91YmxlKSkgewogICAgICAgICBh
dXRvIHJlc3RyaWN0ZWREb3VibGVWYWx1ZSA9IHRvSlM8SURMRG91YmxlPihJRExEb3VibGU6OmV4
dHJhY3RWYWx1ZUZyb21OdWxsYWJsZShkaWN0aW9uYXJ5LnJlc3RyaWN0ZWREb3VibGUpKTsKLSAg
ICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygm
dm0sICJyZXN0cmljdGVkRG91YmxlIiksIHJlc3RyaWN0ZWREb3VibGVWYWx1ZSk7CisgICAgICAg
IHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJy
ZXN0cmljdGVkRG91YmxlIiksIHJlc3RyaWN0ZWREb3VibGVWYWx1ZSk7CiAgICAgfQogICAgIGF1
dG8gcmVzdHJpY3RlZERvdWJsZVdpdGhEZWZhdWx0VmFsdWUgPSB0b0pTPElETERvdWJsZT4oZGlj
dGlvbmFyeS5yZXN0cmljdGVkRG91YmxlV2l0aERlZmF1bHQpOwotICAgIHJlc3VsdC0+cHV0RGly
ZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAicmVzdHJpY3RlZERvdWJs
ZVdpdGhEZWZhdWx0IiksIHJlc3RyaWN0ZWREb3VibGVXaXRoRGVmYXVsdFZhbHVlKTsKKyAgICBy
ZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAicmVz
dHJpY3RlZERvdWJsZVdpdGhEZWZhdWx0IiksIHJlc3RyaWN0ZWREb3VibGVXaXRoRGVmYXVsdFZh
bHVlKTsKICAgICBpZiAoIUlETEZsb2F0Ojppc051bGxWYWx1ZShkaWN0aW9uYXJ5LnJlc3RyaWN0
ZWRGbG9hdCkpIHsKICAgICAgICAgYXV0byByZXN0cmljdGVkRmxvYXRWYWx1ZSA9IHRvSlM8SURM
RmxvYXQ+KElETEZsb2F0OjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUoZGljdGlvbmFyeS5yZXN0
cmljdGVkRmxvYXQpKTsKLSAgICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRp
Zmllcjo6ZnJvbVN0cmluZygmdm0sICJyZXN0cmljdGVkRmxvYXQiKSwgcmVzdHJpY3RlZEZsb2F0
VmFsdWUpOworICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCAicmVzdHJpY3RlZEZsb2F0IiksIHJlc3RyaWN0ZWRGbG9hdFZhbHVlKTsK
ICAgICB9CiAgICAgYXV0byByZXN0cmljdGVkRmxvYXRXaXRoRGVmYXVsdFZhbHVlID0gdG9KUzxJ
RExGbG9hdD4oZGljdGlvbmFyeS5yZXN0cmljdGVkRmxvYXRXaXRoRGVmYXVsdCk7Ci0gICAgcmVz
dWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJyZXN0
cmljdGVkRmxvYXRXaXRoRGVmYXVsdCIpLCByZXN0cmljdGVkRmxvYXRXaXRoRGVmYXVsdFZhbHVl
KTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KHZtLCAicmVzdHJpY3RlZEZsb2F0V2l0aERlZmF1bHQiKSwgcmVzdHJpY3RlZEZsb2F0V2l0aERl
ZmF1bHRWYWx1ZSk7CiAgICAgaWYgKCFJRExTZXF1ZW5jZTxJRExET01TdHJpbmc+Ojppc051bGxW
YWx1ZShkaWN0aW9uYXJ5LnNlcXVlbmNlT2ZTdHJpbmdzKSkgewogICAgICAgICBhdXRvIHNlcXVl
bmNlT2ZTdHJpbmdzVmFsdWUgPSB0b0pTPElETFNlcXVlbmNlPElETERPTVN0cmluZz4+KHN0YXRl
LCBnbG9iYWxPYmplY3QsIElETFNlcXVlbmNlPElETERPTVN0cmluZz46OmV4dHJhY3RWYWx1ZUZy
b21OdWxsYWJsZShkaWN0aW9uYXJ5LnNlcXVlbmNlT2ZTdHJpbmdzKSk7Ci0gICAgICAgIHJlc3Vs
dC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAic2VxdWVu
Y2VPZlN0cmluZ3MiKSwgc2VxdWVuY2VPZlN0cmluZ3NWYWx1ZSk7CisgICAgICAgIHJlc3VsdC0+
cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJzZXF1ZW5jZU9m
U3RyaW5ncyIpLCBzZXF1ZW5jZU9mU3RyaW5nc1ZhbHVlKTsKICAgICB9CiAgICAgaWYgKCFJRExD
bGFtcEFkYXB0b3I8SURMQnl0ZT46OmlzTnVsbFZhbHVlKGRpY3Rpb25hcnkuc21hbGxJbnRlZ2Vy
Q2xhbXBlZCkpIHsKICAgICAgICAgYXV0byBzbWFsbEludGVnZXJDbGFtcGVkVmFsdWUgPSB0b0pT
PElETENsYW1wQWRhcHRvcjxJRExCeXRlPj4oSURMQ2xhbXBBZGFwdG9yPElETEJ5dGU+OjpleHRy
YWN0VmFsdWVGcm9tTnVsbGFibGUoZGljdGlvbmFyeS5zbWFsbEludGVnZXJDbGFtcGVkKSk7Ci0g
ICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmco
JnZtLCAic21hbGxJbnRlZ2VyQ2xhbXBlZCIpLCBzbWFsbEludGVnZXJDbGFtcGVkVmFsdWUpOwor
ICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KHZtLCAic21hbGxJbnRlZ2VyQ2xhbXBlZCIpLCBzbWFsbEludGVnZXJDbGFtcGVkVmFsdWUpOwog
ICAgIH0KICAgICBpZiAoIUlETEJ5dGU6OmlzTnVsbFZhbHVlKGRpY3Rpb25hcnkuc21hbGxJbnRl
Z2VyV2l0aERlZmF1bHQpKSB7CiAgICAgICAgIGF1dG8gc21hbGxJbnRlZ2VyV2l0aERlZmF1bHRW
YWx1ZSA9IHRvSlM8SURMQnl0ZT4oSURMQnl0ZTo6ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKGRp
Y3Rpb25hcnkuc21hbGxJbnRlZ2VyV2l0aERlZmF1bHQpKTsKLSAgICAgICAgcmVzdWx0LT5wdXRE
aXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJzbWFsbEludGVnZXJX
aXRoRGVmYXVsdCIpLCBzbWFsbEludGVnZXJXaXRoRGVmYXVsdFZhbHVlKTsKKyAgICAgICAgcmVz
dWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInNtYWxs
SW50ZWdlcldpdGhEZWZhdWx0IiksIHNtYWxsSW50ZWdlcldpdGhEZWZhdWx0VmFsdWUpOwogICAg
IH0KICAgICBpZiAoIUlETEVuZm9yY2VSYW5nZUFkYXB0b3I8SURMT2N0ZXQ+Ojppc051bGxWYWx1
ZShkaWN0aW9uYXJ5LnNtYWxsVW5zaWduZWRJbnRlZ2VyRW5mb3JjZWRSYW5nZSkpIHsKICAgICAg
ICAgYXV0byBzbWFsbFVuc2lnbmVkSW50ZWdlckVuZm9yY2VkUmFuZ2VWYWx1ZSA9IHRvSlM8SURM
RW5mb3JjZVJhbmdlQWRhcHRvcjxJRExPY3RldD4+KElETEVuZm9yY2VSYW5nZUFkYXB0b3I8SURM
T2N0ZXQ+OjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUoZGljdGlvbmFyeS5zbWFsbFVuc2lnbmVk
SW50ZWdlckVuZm9yY2VkUmFuZ2UpKTsKLSAgICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIEpT
Qzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJzbWFsbFVuc2lnbmVkSW50ZWdlckVuZm9y
Y2VkUmFuZ2UiKSwgc21hbGxVbnNpZ25lZEludGVnZXJFbmZvcmNlZFJhbmdlVmFsdWUpOworICAg
ICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZt
LCAic21hbGxVbnNpZ25lZEludGVnZXJFbmZvcmNlZFJhbmdlIiksIHNtYWxsVW5zaWduZWRJbnRl
Z2VyRW5mb3JjZWRSYW5nZVZhbHVlKTsKICAgICB9CiAgICAgYXV0byBzbWFsbFVuc2lnbmVkSW50
ZWdlcldpdGhEZWZhdWx0VmFsdWUgPSB0b0pTPElETE9jdGV0PihkaWN0aW9uYXJ5LnNtYWxsVW5z
aWduZWRJbnRlZ2VyV2l0aERlZmF1bHQpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6
OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAic21hbGxVbnNpZ25lZEludGVnZXJXaXRoRGVm
YXVsdCIpLCBzbWFsbFVuc2lnbmVkSW50ZWdlcldpdGhEZWZhdWx0VmFsdWUpOworICAgIHJlc3Vs
dC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJzbWFsbFVu
c2lnbmVkSW50ZWdlcldpdGhEZWZhdWx0IiksIHNtYWxsVW5zaWduZWRJbnRlZ2VyV2l0aERlZmF1
bHRWYWx1ZSk7CiAgICAgaWYgKCFJRExUcmVhdE51bGxBc0VtcHR5QWRhcHRvcjxJRExET01TdHJp
bmc+Ojppc051bGxWYWx1ZShkaWN0aW9uYXJ5LnN0cmluZ1RyZWF0TnVsbEFzRW1wdHlTdHJpbmcp
KSB7CiAgICAgICAgIGF1dG8gc3RyaW5nVHJlYXROdWxsQXNFbXB0eVN0cmluZ1ZhbHVlID0gdG9K
UzxJRExUcmVhdE51bGxBc0VtcHR5QWRhcHRvcjxJRExET01TdHJpbmc+PihzdGF0ZSwgSURMVHJl
YXROdWxsQXNFbXB0eUFkYXB0b3I8SURMRE9NU3RyaW5nPjo6ZXh0cmFjdFZhbHVlRnJvbU51bGxh
YmxlKGRpY3Rpb25hcnkuc3RyaW5nVHJlYXROdWxsQXNFbXB0eVN0cmluZykpOwotICAgICAgICBy
ZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgInN0
cmluZ1RyZWF0TnVsbEFzRW1wdHlTdHJpbmciKSwgc3RyaW5nVHJlYXROdWxsQXNFbXB0eVN0cmlu
Z1ZhbHVlKTsKKyAgICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6
ZnJvbVN0cmluZyh2bSwgInN0cmluZ1RyZWF0TnVsbEFzRW1wdHlTdHJpbmciKSwgc3RyaW5nVHJl
YXROdWxsQXNFbXB0eVN0cmluZ1ZhbHVlKTsKICAgICB9CiAgICAgYXV0byBzdHJpbmdXaXRoRGVm
YXVsdFZhbHVlID0gdG9KUzxJRExET01TdHJpbmc+KHN0YXRlLCBkaWN0aW9uYXJ5LnN0cmluZ1dp
dGhEZWZhdWx0KTsKLSAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKCZ2bSwgInN0cmluZ1dpdGhEZWZhdWx0IiksIHN0cmluZ1dpdGhEZWZhdWx0VmFs
dWUpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJp
bmcodm0sICJzdHJpbmdXaXRoRGVmYXVsdCIpLCBzdHJpbmdXaXRoRGVmYXVsdFZhbHVlKTsKICAg
ICBpZiAoIUlETERPTVN0cmluZzo6aXNOdWxsVmFsdWUoZGljdGlvbmFyeS5zdHJpbmdXaXRob3V0
RGVmYXVsdCkpIHsKICAgICAgICAgYXV0byBzdHJpbmdXaXRob3V0RGVmYXVsdFZhbHVlID0gdG9K
UzxJRExET01TdHJpbmc+KHN0YXRlLCBJRExET01TdHJpbmc6OmV4dHJhY3RWYWx1ZUZyb21OdWxs
YWJsZShkaWN0aW9uYXJ5LnN0cmluZ1dpdGhvdXREZWZhdWx0KSk7Ci0gICAgICAgIHJlc3VsdC0+
cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAic3RyaW5nV2l0
aG91dERlZmF1bHQiKSwgc3RyaW5nV2l0aG91dERlZmF1bHRWYWx1ZSk7CisgICAgICAgIHJlc3Vs
dC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJzdHJpbmdX
aXRob3V0RGVmYXVsdCIpLCBzdHJpbmdXaXRob3V0RGVmYXVsdFZhbHVlKTsKICAgICB9CiAgICAg
aWYgKCFJRExVbmlvbjxJRExMb25nLCBJRExJbnRlcmZhY2U8Tm9kZT4+Ojppc051bGxWYWx1ZShk
aWN0aW9uYXJ5LnVuaW9uTWVtYmVyKSkgewogICAgICAgICBhdXRvIHVuaW9uTWVtYmVyVmFsdWUg
PSB0b0pTPElETFVuaW9uPElETExvbmcsIElETEludGVyZmFjZTxOb2RlPj4+KHN0YXRlLCBnbG9i
YWxPYmplY3QsIElETFVuaW9uPElETExvbmcsIElETEludGVyZmFjZTxOb2RlPj46OmV4dHJhY3RW
YWx1ZUZyb21OdWxsYWJsZShkaWN0aW9uYXJ5LnVuaW9uTWVtYmVyKSk7Ci0gICAgICAgIHJlc3Vs
dC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAidW5pb25N
ZW1iZXIiKSwgdW5pb25NZW1iZXJWYWx1ZSk7CisgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZt
LCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJ1bmlvbk1lbWJlciIpLCB1bmlvbk1l
bWJlclZhbHVlKTsKICAgICB9CiAgICAgaWYgKCFJRExVbnJlc3RyaWN0ZWREb3VibGU6OmlzTnVs
bFZhbHVlKGRpY3Rpb25hcnkudW5yZXN0cmljdGVkRG91YmxlKSkgewogICAgICAgICBhdXRvIHVu
cmVzdHJpY3RlZERvdWJsZVZhbHVlID0gdG9KUzxJRExVbnJlc3RyaWN0ZWREb3VibGU+KElETFVu
cmVzdHJpY3RlZERvdWJsZTo6ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKGRpY3Rpb25hcnkudW5y
ZXN0cmljdGVkRG91YmxlKSk7Ci0gICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6Oklk
ZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAidW5yZXN0cmljdGVkRG91YmxlIiksIHVucmVzdHJp
Y3RlZERvdWJsZVZhbHVlKTsKKyAgICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRl
bnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInVucmVzdHJpY3RlZERvdWJsZSIpLCB1bnJlc3RyaWN0
ZWREb3VibGVWYWx1ZSk7CiAgICAgfQogICAgIGF1dG8gdW5yZXN0cmljdGVkRG91YmxlV2l0aERl
ZmF1bHRWYWx1ZSA9IHRvSlM8SURMVW5yZXN0cmljdGVkRG91YmxlPihkaWN0aW9uYXJ5LnVucmVz
dHJpY3RlZERvdWJsZVdpdGhEZWZhdWx0KTsKLSAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlND
OjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgInVucmVzdHJpY3RlZERvdWJsZVdpdGhEZWZh
dWx0IiksIHVucmVzdHJpY3RlZERvdWJsZVdpdGhEZWZhdWx0VmFsdWUpOworICAgIHJlc3VsdC0+
cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJ1bnJlc3RyaWN0
ZWREb3VibGVXaXRoRGVmYXVsdCIpLCB1bnJlc3RyaWN0ZWREb3VibGVXaXRoRGVmYXVsdFZhbHVl
KTsKICAgICBpZiAoIUlETFVucmVzdHJpY3RlZEZsb2F0Ojppc051bGxWYWx1ZShkaWN0aW9uYXJ5
LnVucmVzdHJpY3RlZEZsb2F0KSkgewogICAgICAgICBhdXRvIHVucmVzdHJpY3RlZEZsb2F0VmFs
dWUgPSB0b0pTPElETFVucmVzdHJpY3RlZEZsb2F0PihJRExVbnJlc3RyaWN0ZWRGbG9hdDo6ZXh0
cmFjdFZhbHVlRnJvbU51bGxhYmxlKGRpY3Rpb25hcnkudW5yZXN0cmljdGVkRmxvYXQpKTsKLSAg
ICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygm
dm0sICJ1bnJlc3RyaWN0ZWRGbG9hdCIpLCB1bnJlc3RyaWN0ZWRGbG9hdFZhbHVlKTsKKyAgICAg
ICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwg
InVucmVzdHJpY3RlZEZsb2F0IiksIHVucmVzdHJpY3RlZEZsb2F0VmFsdWUpOwogICAgIH0KICAg
ICBhdXRvIHVucmVzdHJpY3RlZEZsb2F0V2l0aERlZmF1bHRWYWx1ZSA9IHRvSlM8SURMVW5yZXN0
cmljdGVkRmxvYXQ+KGRpY3Rpb25hcnkudW5yZXN0cmljdGVkRmxvYXRXaXRoRGVmYXVsdCk7Ci0g
ICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0s
ICJ1bnJlc3RyaWN0ZWRGbG9hdFdpdGhEZWZhdWx0IiksIHVucmVzdHJpY3RlZEZsb2F0V2l0aERl
ZmF1bHRWYWx1ZSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6
ZnJvbVN0cmluZyh2bSwgInVucmVzdHJpY3RlZEZsb2F0V2l0aERlZmF1bHQiKSwgdW5yZXN0cmlj
dGVkRmxvYXRXaXRoRGVmYXVsdFZhbHVlKTsKICAgICBpZiAoIUlETFVuc2lnbmVkTG9uZzo6aXNO
dWxsVmFsdWUoZGljdGlvbmFyeS51bnNpZ25lZEludGVnZXIpKSB7CiAgICAgICAgIGF1dG8gdW5z
aWduZWRJbnRlZ2VyVmFsdWUgPSB0b0pTPElETFVuc2lnbmVkTG9uZz4oSURMVW5zaWduZWRMb25n
OjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUoZGljdGlvbmFyeS51bnNpZ25lZEludGVnZXIpKTsK
LSAgICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zygmdm0sICJ1bnNpZ25lZEludGVnZXIiKSwgdW5zaWduZWRJbnRlZ2VyVmFsdWUpOworICAgICAg
ICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAi
dW5zaWduZWRJbnRlZ2VyIiksIHVuc2lnbmVkSW50ZWdlclZhbHVlKTsKICAgICB9CiAgICAgYXV0
byB1bnNpZ25lZEludGVnZXJXaXRoRGVmYXVsdFZhbHVlID0gdG9KUzxJRExVbnNpZ25lZExvbmc+
KGRpY3Rpb25hcnkudW5zaWduZWRJbnRlZ2VyV2l0aERlZmF1bHQpOwotICAgIHJlc3VsdC0+cHV0
RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAidW5zaWduZWRJbnRl
Z2VyV2l0aERlZmF1bHQiKSwgdW5zaWduZWRJbnRlZ2VyV2l0aERlZmF1bHRWYWx1ZSk7CisgICAg
cmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInVu
c2lnbmVkSW50ZWdlcldpdGhEZWZhdWx0IiksIHVuc2lnbmVkSW50ZWdlcldpdGhEZWZhdWx0VmFs
dWUpOwogICAgIGlmICghSURMVW5zaWduZWRMb25nTG9uZzo6aXNOdWxsVmFsdWUoZGljdGlvbmFy
eS51bnNpZ25lZExhcmdlSW50ZWdlcikpIHsKICAgICAgICAgYXV0byB1bnNpZ25lZExhcmdlSW50
ZWdlclZhbHVlID0gdG9KUzxJRExVbnNpZ25lZExvbmdMb25nPihJRExVbnNpZ25lZExvbmdMb25n
OjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUoZGljdGlvbmFyeS51bnNpZ25lZExhcmdlSW50ZWdl
cikpOwotICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKCZ2bSwgInVuc2lnbmVkTGFyZ2VJbnRlZ2VyIiksIHVuc2lnbmVkTGFyZ2VJbnRlZ2Vy
VmFsdWUpOworICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCAidW5zaWduZWRMYXJnZUludGVnZXIiKSwgdW5zaWduZWRMYXJnZUludGVn
ZXJWYWx1ZSk7CiAgICAgfQogICAgIGF1dG8gdW5zaWduZWRMYXJnZUludGVnZXJXaXRoRGVmYXVs
dFZhbHVlID0gdG9KUzxJRExVbnNpZ25lZExvbmdMb25nPihkaWN0aW9uYXJ5LnVuc2lnbmVkTGFy
Z2VJbnRlZ2VyV2l0aERlZmF1bHQpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6Oklk
ZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAidW5zaWduZWRMYXJnZUludGVnZXJXaXRoRGVmYXVs
dCIpLCB1bnNpZ25lZExhcmdlSW50ZWdlcldpdGhEZWZhdWx0VmFsdWUpOworICAgIHJlc3VsdC0+
cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJ1bnNpZ25lZExh
cmdlSW50ZWdlcldpdGhEZWZhdWx0IiksIHVuc2lnbmVkTGFyZ2VJbnRlZ2VyV2l0aERlZmF1bHRW
YWx1ZSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMTExMSw3ICsxMTExLDcgQEAgdGVt
cGxhdGU8PiBUZXN0T2JqOjpEaWN0aW9uYXJ5VGhhdFNob3VsZAogICAgIGlmIChpc051bGxPclVu
ZGVmaW5lZCkKICAgICAgICAgYm9vbGVhbldpdGhvdXREZWZhdWx0VmFsdWUgPSBqc1VuZGVmaW5l
ZCgpOwogICAgIGVsc2UgewotICAgICAgICBib29sZWFuV2l0aG91dERlZmF1bHRWYWx1ZSA9IG9i
amVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJib29sZWFu
V2l0aG91dERlZmF1bHQiKSk7CisgICAgICAgIGJvb2xlYW5XaXRob3V0RGVmYXVsdFZhbHVlID0g
b2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiYm9vbGVhbldp
dGhvdXREZWZhdWx0IikpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IHsgfSk7CiAgICAgfQogICAgIGlmICghYm9vbGVhbldpdGhvdXREZWZhdWx0VmFsdWUuaXNVbmRl
ZmluZWQoKSkgewpAQCAtMTEyMiw3ICsxMTIyLDcgQEAgdGVtcGxhdGU8PiBUZXN0T2JqOjpEaWN0
aW9uYXJ5VGhhdFNob3VsZAogICAgIGlmIChpc051bGxPclVuZGVmaW5lZCkKICAgICAgICAgbm9u
TnVsbGFibGVOb2RlVmFsdWUgPSBqc1VuZGVmaW5lZCgpOwogICAgIGVsc2UgewotICAgICAgICBu
b25OdWxsYWJsZU5vZGVWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZygmc3RhdGUsICJub25OdWxsYWJsZU5vZGUiKSk7CisgICAgICAgIG5vbk51bGxhYmxl
Tm9kZVZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZt
LCAibm9uTnVsbGFibGVOb2RlIikpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIHsgfSk7CiAgICAgfQogICAgIGlmICghbm9uTnVsbGFibGVOb2RlVmFsdWUuaXNVbmRl
ZmluZWQoKSkgewpAQCAtMTEzNiw3ICsxMTM2LDcgQEAgdGVtcGxhdGU8PiBUZXN0T2JqOjpEaWN0
aW9uYXJ5VGhhdFNob3VsZAogICAgIGlmIChpc051bGxPclVuZGVmaW5lZCkKICAgICAgICAgcmVx
dWlyZWREaWN0aW9uYXJ5TWVtYmVyVmFsdWUgPSBqc1VuZGVmaW5lZCgpOwogICAgIGVsc2Ugewot
ICAgICAgICByZXF1aXJlZERpY3Rpb25hcnlNZW1iZXJWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0
ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJyZXF1aXJlZERpY3Rpb25hcnlNZW1i
ZXIiKSk7CisgICAgICAgIHJlcXVpcmVkRGljdGlvbmFyeU1lbWJlclZhbHVlID0gb2JqZWN0LT5n
ZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAicmVxdWlyZWREaWN0aW9uYXJ5
TWVtYmVyIikpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7
CiAgICAgfQogICAgIGlmICghcmVxdWlyZWREaWN0aW9uYXJ5TWVtYmVyVmFsdWUuaXNVbmRlZmlu
ZWQoKSkgewpAQCAtMTE1MCw3ICsxMTUwLDcgQEAgdGVtcGxhdGU8PiBUZXN0T2JqOjpEaWN0aW9u
YXJ5VGhhdFNob3VsZAogICAgIGlmIChpc051bGxPclVuZGVmaW5lZCkKICAgICAgICAgcmVxdWly
ZWRFbnVtZXJhdGlvblZhbHVlVmFsdWUgPSBqc1VuZGVmaW5lZCgpOwogICAgIGVsc2UgewotICAg
ICAgICByZXF1aXJlZEVudW1lcmF0aW9uVmFsdWVWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJyZXF1aXJlZEVudW1lcmF0aW9uVmFsdWUi
KSk7CisgICAgICAgIHJlcXVpcmVkRW51bWVyYXRpb25WYWx1ZVZhbHVlID0gb2JqZWN0LT5nZXQo
JnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAicmVxdWlyZWRFbnVtZXJhdGlvblZh
bHVlIikpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAg
ICAgfQogICAgIGlmICghcmVxdWlyZWRFbnVtZXJhdGlvblZhbHVlVmFsdWUuaXNVbmRlZmluZWQo
KSkgewpAQCAtMTE3OCw3ICsxMTc4LDcgQEAgdGVtcGxhdGU8PiBUZXN0T2JqOjpEaWN0aW9uYXJ5
VGhhdFNob3VsZAogICAgIGlmIChpc051bGxPclVuZGVmaW5lZCkKICAgICAgICAgYm9vbGVhbldp
dGhvdXREZWZhdWx0VmFsdWUgPSBqc1VuZGVmaW5lZCgpOwogICAgIGVsc2UgewotICAgICAgICBi
b29sZWFuV2l0aG91dERlZmF1bHRWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZygmc3RhdGUsICJib29sZWFuV2l0aG91dERlZmF1bHQiKSk7CisgICAgICAg
IGJvb2xlYW5XaXRob3V0RGVmYXVsdFZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKHZtLCAiYm9vbGVhbldpdGhvdXREZWZhdWx0IikpOwogICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgfQogICAgIGlmICghYm9v
bGVhbldpdGhvdXREZWZhdWx0VmFsdWUuaXNVbmRlZmluZWQoKSkgewpAQCAtMTE4OSw3ICsxMTg5
LDcgQEAgdGVtcGxhdGU8PiBUZXN0T2JqOjpEaWN0aW9uYXJ5VGhhdFNob3VsZAogICAgIGlmIChp
c051bGxPclVuZGVmaW5lZCkKICAgICAgICAgZW51bWVyYXRpb25WYWx1ZVZhbHVlID0ganNVbmRl
ZmluZWQoKTsKICAgICBlbHNlIHsKLSAgICAgICAgZW51bWVyYXRpb25WYWx1ZVZhbHVlID0gb2Jq
ZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImVudW1lcmF0
aW9uVmFsdWUiKSk7CisgICAgICAgIGVudW1lcmF0aW9uVmFsdWVWYWx1ZSA9IG9iamVjdC0+Z2V0
KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImVudW1lcmF0aW9uVmFsdWUiKSk7
CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICB9CiAg
ICAgaWYgKCFlbnVtZXJhdGlvblZhbHVlVmFsdWUuaXNVbmRlZmluZWQoKSkgewpAQCAtMTIxNCw3
ICsxMjE0LDcgQEAgdGVtcGxhdGU8PiBBbHRlcm5hdGVEaWN0aW9uYXJ5TmFtZSBjb252ZQogICAg
IGlmIChpc051bGxPclVuZGVmaW5lZCkKICAgICAgICAgYm9vbGVhbldpdGhvdXREZWZhdWx0VmFs
dWUgPSBqc1VuZGVmaW5lZCgpOwogICAgIGVsc2UgewotICAgICAgICBib29sZWFuV2l0aG91dERl
ZmF1bHRWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygm
c3RhdGUsICJib29sZWFuV2l0aG91dERlZmF1bHQiKSk7CisgICAgICAgIGJvb2xlYW5XaXRob3V0
RGVmYXVsdFZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KHZtLCAiYm9vbGVhbldpdGhvdXREZWZhdWx0IikpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgfQogICAgIGlmICghYm9vbGVhbldpdGhvdXREZWZh
dWx0VmFsdWUuaXNVbmRlZmluZWQoKSkgewpAQCAtMTIyNSw3ICsxMjI1LDcgQEAgdGVtcGxhdGU8
PiBBbHRlcm5hdGVEaWN0aW9uYXJ5TmFtZSBjb252ZQogICAgIGlmIChpc051bGxPclVuZGVmaW5l
ZCkKICAgICAgICAgZW51bWVyYXRpb25WYWx1ZVZhbHVlID0ganNVbmRlZmluZWQoKTsKICAgICBl
bHNlIHsKLSAgICAgICAgZW51bWVyYXRpb25WYWx1ZVZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRl
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImVudW1lcmF0aW9uVmFsdWUiKSk7Cisg
ICAgICAgIGVudW1lcmF0aW9uVmFsdWVWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZyh2bSwgImVudW1lcmF0aW9uVmFsdWUiKSk7CiAgICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICB9CiAgICAgaWYgKCFlbnVtZXJh
dGlvblZhbHVlVmFsdWUuaXNVbmRlZmluZWQoKSkgewpAQCAtMTI1MCw3ICsxMjUwLDcgQEAgdGVt
cGxhdGU8PiBUZXN0T2JqOjpQYXJlbnREaWN0aW9uYXJ5IGNvbgogICAgIGlmIChpc051bGxPclVu
ZGVmaW5lZCkKICAgICAgICAgcGFyZW50TWVtYmVyMVZhbHVlID0ganNVbmRlZmluZWQoKTsKICAg
ICBlbHNlIHsKLSAgICAgICAgcGFyZW50TWVtYmVyMVZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRl
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgInBhcmVudE1lbWJlcjEiKSk7CisgICAg
ICAgIHBhcmVudE1lbWJlcjFWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZyh2bSwgInBhcmVudE1lbWJlcjEiKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICB9CiAgICAgaWYgKCFwYXJlbnRNZW1iZXIxVmFs
dWUuaXNVbmRlZmluZWQoKSkgewpAQCAtMTI2MSw3ICsxMjYxLDcgQEAgdGVtcGxhdGU8PiBUZXN0
T2JqOjpQYXJlbnREaWN0aW9uYXJ5IGNvbgogICAgIGlmIChpc051bGxPclVuZGVmaW5lZCkKICAg
ICAgICAgcGFyZW50TWVtYmVyMlZhbHVlID0ganNVbmRlZmluZWQoKTsKICAgICBlbHNlIHsKLSAg
ICAgICAgcGFyZW50TWVtYmVyMlZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKCZzdGF0ZSwgInBhcmVudE1lbWJlcjIiKSk7CisgICAgICAgIHBhcmVudE1l
bWJlcjJWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2
bSwgInBhcmVudE1lbWJlcjIiKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dT
Y29wZSwgeyB9KTsKICAgICB9CiAgICAgaWYgKCFwYXJlbnRNZW1iZXIyVmFsdWUuaXNVbmRlZmlu
ZWQoKSkgewpAQCAtMTI4Niw3ICsxMjg2LDcgQEAgdGVtcGxhdGU8PiBUZXN0T2JqOjpDaGlsZERp
Y3Rpb25hcnkgY29udgogICAgIGlmIChpc051bGxPclVuZGVmaW5lZCkKICAgICAgICAgcGFyZW50
TWVtYmVyMVZhbHVlID0ganNVbmRlZmluZWQoKTsKICAgICBlbHNlIHsKLSAgICAgICAgcGFyZW50
TWVtYmVyMVZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KCZzdGF0ZSwgInBhcmVudE1lbWJlcjEiKSk7CisgICAgICAgIHBhcmVudE1lbWJlcjFWYWx1ZSA9
IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInBhcmVudE1l
bWJlcjEiKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsK
ICAgICB9CiAgICAgaWYgKCFwYXJlbnRNZW1iZXIxVmFsdWUuaXNVbmRlZmluZWQoKSkgewpAQCAt
MTI5Nyw3ICsxMjk3LDcgQEAgdGVtcGxhdGU8PiBUZXN0T2JqOjpDaGlsZERpY3Rpb25hcnkgY29u
dgogICAgIGlmIChpc051bGxPclVuZGVmaW5lZCkKICAgICAgICAgcGFyZW50TWVtYmVyMlZhbHVl
ID0ganNVbmRlZmluZWQoKTsKICAgICBlbHNlIHsKLSAgICAgICAgcGFyZW50TWVtYmVyMlZhbHVl
ID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgInBh
cmVudE1lbWJlcjIiKSk7CisgICAgICAgIHBhcmVudE1lbWJlcjJWYWx1ZSA9IG9iamVjdC0+Z2V0
KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInBhcmVudE1lbWJlcjIiKSk7CiAg
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICB9CiAgICAg
aWYgKCFwYXJlbnRNZW1iZXIyVmFsdWUuaXNVbmRlZmluZWQoKSkgewpAQCAtMTMwOCw3ICsxMzA4
LDcgQEAgdGVtcGxhdGU8PiBUZXN0T2JqOjpDaGlsZERpY3Rpb25hcnkgY29udgogICAgIGlmIChp
c051bGxPclVuZGVmaW5lZCkKICAgICAgICAgY2hpbGRNZW1iZXIxVmFsdWUgPSBqc1VuZGVmaW5l
ZCgpOwogICAgIGVsc2UgewotICAgICAgICBjaGlsZE1lbWJlcjFWYWx1ZSA9IG9iamVjdC0+Z2V0
KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJjaGlsZE1lbWJlcjEiKSk7
CisgICAgICAgIGNoaWxkTWVtYmVyMVZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKHZtLCAiY2hpbGRNZW1iZXIxIikpOwogICAgICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgfQogICAgIGlmICghY2hpbGRNZW1iZXIx
VmFsdWUuaXNVbmRlZmluZWQoKSkgewpAQCAtMTMxOSw3ICsxMzE5LDcgQEAgdGVtcGxhdGU8PiBU
ZXN0T2JqOjpDaGlsZERpY3Rpb25hcnkgY29udgogICAgIGlmIChpc051bGxPclVuZGVmaW5lZCkK
ICAgICAgICAgY2hpbGRNZW1iZXIyVmFsdWUgPSBqc1VuZGVmaW5lZCgpOwogICAgIGVsc2Ugewot
ICAgICAgICBjaGlsZE1lbWJlcjJWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZygmc3RhdGUsICJjaGlsZE1lbWJlcjIiKSk7CisgICAgICAgIGNoaWxkTWVt
YmVyMlZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZt
LCAiY2hpbGRNZW1iZXIyIikpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2Nv
cGUsIHsgfSk7CiAgICAgfQogICAgIGlmICghY2hpbGRNZW1iZXIyVmFsdWUuaXNVbmRlZmluZWQo
KSkgewpAQCAtMTM0Niw3ICsxMzQ2LDcgQEAgdGVtcGxhdGU8PiBUZXN0T2JqOjpDb25kaXRpb25h
bERpY3Rpb25hcgogICAgIGlmIChpc051bGxPclVuZGVmaW5lZCkKICAgICAgICAgc3RyaW5nV2l0
aG91dERlZmF1bHRWYWx1ZSA9IGpzVW5kZWZpbmVkKCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIHN0
cmluZ1dpdGhvdXREZWZhdWx0VmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6
OmZyb21TdHJpbmcoJnN0YXRlLCAic3RyaW5nV2l0aG91dERlZmF1bHQiKSk7CisgICAgICAgIHN0
cmluZ1dpdGhvdXREZWZhdWx0VmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6
OmZyb21TdHJpbmcodm0sICJzdHJpbmdXaXRob3V0RGVmYXVsdCIpKTsKICAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0KICAgICBpZiAoIXN0cmluZ1dp
dGhvdXREZWZhdWx0VmFsdWUuaXNVbmRlZmluZWQoKSkgewpAQCAtMTM3NSw3ICsxMzc1LDcgQEAg
dGVtcGxhdGU8PiBUZXN0T2JqOjpDb25kaXRpb25hbERpY3Rpb25hcgogICAgIGlmIChpc051bGxP
clVuZGVmaW5lZCkKICAgICAgICAgc3RyaW5nV2l0aG91dERlZmF1bHRWYWx1ZSA9IGpzVW5kZWZp
bmVkKCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIHN0cmluZ1dpdGhvdXREZWZhdWx0VmFsdWUgPSBv
YmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAic3RyaW5n
V2l0aG91dERlZmF1bHQiKSk7CisgICAgICAgIHN0cmluZ1dpdGhvdXREZWZhdWx0VmFsdWUgPSBv
YmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJzdHJpbmdXaXRo
b3V0RGVmYXVsdCIpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7
IH0pOwogICAgIH0KICAgICBpZiAoIXN0cmluZ1dpdGhvdXREZWZhdWx0VmFsdWUuaXNVbmRlZmlu
ZWQoKSkgewpAQCAtMTQwNCw3ICsxNDA0LDcgQEAgdGVtcGxhdGU8PiBUZXN0T2JqOjpDb25kaXRp
b25hbERpY3Rpb25hcgogICAgIGlmIChpc051bGxPclVuZGVmaW5lZCkKICAgICAgICAgc3RyaW5n
V2l0aG91dERlZmF1bHRWYWx1ZSA9IGpzVW5kZWZpbmVkKCk7CiAgICAgZWxzZSB7Ci0gICAgICAg
IHN0cmluZ1dpdGhvdXREZWZhdWx0VmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAic3RyaW5nV2l0aG91dERlZmF1bHQiKSk7CisgICAgICAg
IHN0cmluZ1dpdGhvdXREZWZhdWx0VmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcodm0sICJzdHJpbmdXaXRob3V0RGVmYXVsdCIpKTsKICAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0KICAgICBpZiAoIXN0cmlu
Z1dpdGhvdXREZWZhdWx0VmFsdWUuaXNVbmRlZmluZWQoKSkgewpAQCAtMTk2OCwxOSArMTk2OCwx
OSBAQCB0ZW1wbGF0ZTw+IEpTVmFsdWUgSlNUZXN0T2JqQ29uc3RydWN0b3I6CiB0ZW1wbGF0ZTw+
IHZvaWQgSlNUZXN0T2JqQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKFZNJiB2bSwg
SlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKIHsKICAgICBwdXREaXJlY3Qodm0sIHZt
LnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgSlNUZXN0T2JqOjpwcm90b3R5cGUodm0sIGdsb2Jh
bE9iamVjdCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUgfCBKU0M6OlByb3Bl
cnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVt
KTsKLSAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlh
bFN0cmluZygmdm0sIFN0cmluZygiVGVzdE9iamVjdCJfcykpLCBKU0M6OlByb3BlcnR5QXR0cmli
dXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKKyAgICBw
dXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZyh2
bSwgU3RyaW5nKCJUZXN0T2JqZWN0Il9zKSksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRP
bmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwogICAgIHB1dERpcmVjdCh2
bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigyKSwgSlNDOjpQcm9wZXJ0eUF0
dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CiAg
ICAgcmVpZnlTdGF0aWNQcm9wZXJ0aWVzKHZtLCBKU1Rlc3RPYmo6OmluZm8oKSwgSlNUZXN0T2Jq
Q29uc3RydWN0b3JUYWJsZVZhbHVlcywgKnRoaXMpOwogI2lmIEVOQUJMRShURVNUX0ZFQVRVUkUp
CiAgICAgaWYgKCFSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLnRlc3RG
ZWF0dXJlRW5hYmxlZCgpKSB7Ci0gICAgICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmll
cjo6ZnJvbVN0cmluZygmdm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiZW5hYmxl
ZEF0UnVudGltZUF0dHJpYnV0ZVN0YXRpYyIpLCBzdHJsZW4oImVuYWJsZWRBdFJ1bnRpbWVBdHRy
aWJ1dGVTdGF0aWMiKSk7CisgICAgICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6
ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJlbmFibGVkQXRS
dW50aW1lQXR0cmlidXRlU3RhdGljIiksIHN0cmxlbigiZW5hYmxlZEF0UnVudGltZUF0dHJpYnV0
ZVN0YXRpYyIpKTsKICAgICAgICAgVk06OkRlbGV0ZVByb3BlcnR5TW9kZVNjb3BlIHNjb3BlKHZt
LCBWTTo6RGVsZXRlUHJvcGVydHlNb2RlOjpJZ25vcmVDb25maWd1cmFibGUpOwogICAgICAgICBK
U09iamVjdDo6ZGVsZXRlUHJvcGVydHkodGhpcywgZ2xvYmFsT2JqZWN0Lmdsb2JhbEV4ZWMoKSwg
cHJvcGVydHlOYW1lKTsKICAgICB9CiAjZW5kaWYKICNpZiBFTkFCTEUoVEVTVF9GRUFUVVJFKQog
ICAgIGlmICghUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS50ZXN0RmVh
dHVyZUVuYWJsZWQoKSkgewotICAgICAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6
OmZyb21TdHJpbmcoJnZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oImVuYWJsZWRB
dFJ1bnRpbWVPcGVyYXRpb25TdGF0aWMiKSwgc3RybGVuKCJlbmFibGVkQXRSdW50aW1lT3BlcmF0
aW9uU3RhdGljIikpOworICAgICAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZy
b21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiZW5hYmxlZEF0UnVu
dGltZU9wZXJhdGlvblN0YXRpYyIpLCBzdHJsZW4oImVuYWJsZWRBdFJ1bnRpbWVPcGVyYXRpb25T
dGF0aWMiKSk7CiAgICAgICAgIFZNOjpEZWxldGVQcm9wZXJ0eU1vZGVTY29wZSBzY29wZSh2bSwg
Vk06OkRlbGV0ZVByb3BlcnR5TW9kZTo6SWdub3JlQ29uZmlndXJhYmxlKTsKICAgICAgICAgSlNP
YmplY3Q6OmRlbGV0ZVByb3BlcnR5KHRoaXMsIGdsb2JhbE9iamVjdC5nbG9iYWxFeGVjKCksIHBy
b3BlcnR5TmFtZSk7CiAgICAgfQpAQCAtMjMzNCw4NCArMjMzNCw4NCBAQCB2b2lkIEpTVGVzdE9i
alByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oCiAjaWYgRU5BQkxFKFRFU1RfRkVBVFVSRSkKICAg
ICBpZiAoIVJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkudGVzdEZlYXR1
cmVFbmFibGVkKCkpIHsKICAgICAgICAgaGFzRGlzYWJsZWRSdW50aW1lUHJvcGVydGllcyA9IHRy
dWU7Ci0gICAgICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZygm
dm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiZW5hYmxlZEF0UnVudGltZU9wZXJh
dGlvbiIpLCBzdHJsZW4oImVuYWJsZWRBdFJ1bnRpbWVPcGVyYXRpb24iKSk7CisgICAgICAgIGF1
dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBMQ2hhcio+KCJlbmFibGVkQXRSdW50aW1lT3BlcmF0aW9uIiksIHN0cmxlbigi
ZW5hYmxlZEF0UnVudGltZU9wZXJhdGlvbiIpKTsKICAgICAgICAgVk06OkRlbGV0ZVByb3BlcnR5
TW9kZVNjb3BlIHNjb3BlKHZtLCBWTTo6RGVsZXRlUHJvcGVydHlNb2RlOjpJZ25vcmVDb25maWd1
cmFibGUpOwogICAgICAgICBKU09iamVjdDo6ZGVsZXRlUHJvcGVydHkodGhpcywgZ2xvYmFsT2Jq
ZWN0KCktPmdsb2JhbEV4ZWMoKSwgcHJvcGVydHlOYW1lKTsKICAgICB9CiAjZW5kaWYKICAgICBp
ZiAoISh3b3JsZEZvckRPTU9iamVjdCgqdGhpcykuc29tZVdvcmxkKCkgJiYgUnVudGltZUVuYWJs
ZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS50ZXN0RmVhdHVyZUVuYWJsZWQoKSkpIHsKICAg
ICAgICAgaGFzRGlzYWJsZWRSdW50aW1lUHJvcGVydGllcyA9IHRydWU7Ci0gICAgICAgIGF1dG8g
cHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgTENoYXIqPigiZW5hYmxlZEluU3BlY2lmaWNXb3JsZFdoZW5SdW50aW1lRmVhdHVy
ZUVuYWJsZWQiKSwgc3RybGVuKCJlbmFibGVkSW5TcGVjaWZpY1dvcmxkV2hlblJ1bnRpbWVGZWF0
dXJlRW5hYmxlZCIpKTsKKyAgICAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oImVuYWJsZWRJblNw
ZWNpZmljV29ybGRXaGVuUnVudGltZUZlYXR1cmVFbmFibGVkIiksIHN0cmxlbigiZW5hYmxlZElu
U3BlY2lmaWNXb3JsZFdoZW5SdW50aW1lRmVhdHVyZUVuYWJsZWQiKSk7CiAgICAgICAgIFZNOjpE
ZWxldGVQcm9wZXJ0eU1vZGVTY29wZSBzY29wZSh2bSwgVk06OkRlbGV0ZVByb3BlcnR5TW9kZTo6
SWdub3JlQ29uZmlndXJhYmxlKTsKICAgICAgICAgSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KHRo
aXMsIGdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCksIHByb3BlcnR5TmFtZSk7CiAgICAgfQog
ICAgIGlmICghd29ybGRGb3JET01PYmplY3QoKnRoaXMpLnNvbWVXb3JsZCgpKSB7CiAgICAgICAg
IGhhc0Rpc2FibGVkUnVudGltZVByb3BlcnRpZXMgPSB0cnVlOwotICAgICAgICBhdXRvIHByb3Bl
cnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCByZWludGVycHJldF9jYXN0PGNv
bnN0IExDaGFyKj4oIndvcmxkU3BlY2lmaWNNZXRob2QiKSwgc3RybGVuKCJ3b3JsZFNwZWNpZmlj
TWV0aG9kIikpOworICAgICAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb21T
dHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigid29ybGRTcGVjaWZpY01l
dGhvZCIpLCBzdHJsZW4oIndvcmxkU3BlY2lmaWNNZXRob2QiKSk7CiAgICAgICAgIFZNOjpEZWxl
dGVQcm9wZXJ0eU1vZGVTY29wZSBzY29wZSh2bSwgVk06OkRlbGV0ZVByb3BlcnR5TW9kZTo6SWdu
b3JlQ29uZmlndXJhYmxlKTsKICAgICAgICAgSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KHRoaXMs
IGdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCksIHByb3BlcnR5TmFtZSk7CiAgICAgfQogICAg
IGlmICghanNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRF
eGVjdXRpb25Db250ZXh0KCktPmlzU2VjdXJlQ29udGV4dCgpKSB7CiAgICAgICAgIGhhc0Rpc2Fi
bGVkUnVudGltZVByb3BlcnRpZXMgPSB0cnVlOwotICAgICAgICBhdXRvIHByb3BlcnR5TmFtZSA9
IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFy
Kj4oImNhbGN1bGF0ZVNlY3JldFJlc3VsdCIpLCBzdHJsZW4oImNhbGN1bGF0ZVNlY3JldFJlc3Vs
dCIpKTsKKyAgICAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oImNhbGN1bGF0ZVNlY3JldFJlc3Vs
dCIpLCBzdHJsZW4oImNhbGN1bGF0ZVNlY3JldFJlc3VsdCIpKTsKICAgICAgICAgVk06OkRlbGV0
ZVByb3BlcnR5TW9kZVNjb3BlIHNjb3BlKHZtLCBWTTo6RGVsZXRlUHJvcGVydHlNb2RlOjpJZ25v
cmVDb25maWd1cmFibGUpOwogICAgICAgICBKU09iamVjdDo6ZGVsZXRlUHJvcGVydHkodGhpcywg
Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKSwgcHJvcGVydHlOYW1lKTsKICAgICB9CiAgICAg
aWYgKCFqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKS0+aXNTZWN1cmVDb250ZXh0KCkpIHsKICAgICAgICAgaGFzRGlzYWJs
ZWRSdW50aW1lUHJvcGVydGllcyA9IHRydWU7Ci0gICAgICAgIGF1dG8gcHJvcGVydHlOYW1lID0g
SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIq
PigiZ2V0U2VjcmV0Qm9vbGVhbiIpLCBzdHJsZW4oImdldFNlY3JldEJvb2xlYW4iKSk7CisgICAg
ICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRl
cnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJnZXRTZWNyZXRCb29sZWFuIiksIHN0cmxlbigiZ2V0
U2VjcmV0Qm9vbGVhbiIpKTsKICAgICAgICAgVk06OkRlbGV0ZVByb3BlcnR5TW9kZVNjb3BlIHNj
b3BlKHZtLCBWTTo6RGVsZXRlUHJvcGVydHlNb2RlOjpJZ25vcmVDb25maWd1cmFibGUpOwogICAg
ICAgICBKU09iamVjdDo6ZGVsZXRlUHJvcGVydHkodGhpcywgZ2xvYmFsT2JqZWN0KCktPmdsb2Jh
bEV4ZWMoKSwgcHJvcGVydHlOYW1lKTsKICAgICB9CiAjaWYgRU5BQkxFKFRFU1RfRkVBVFVSRSkK
ICAgICBpZiAoIShqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QoKSktPnNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+aXNTZWN1cmVDb250ZXh0KCkgJiYgUnVudGltZUVuYWJs
ZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS50ZXN0RmVhdHVyZUVuYWJsZWQoKSkpIHsKICAg
ICAgICAgaGFzRGlzYWJsZWRSdW50aW1lUHJvcGVydGllcyA9IHRydWU7Ci0gICAgICAgIGF1dG8g
cHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgTENoYXIqPigidGVzdEZlYXR1cmVHZXRTZWNyZXRCb29sZWFuIiksIHN0cmxlbigi
dGVzdEZlYXR1cmVHZXRTZWNyZXRCb29sZWFuIikpOworICAgICAgICBhdXRvIHByb3BlcnR5TmFt
ZSA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENo
YXIqPigidGVzdEZlYXR1cmVHZXRTZWNyZXRCb29sZWFuIiksIHN0cmxlbigidGVzdEZlYXR1cmVH
ZXRTZWNyZXRCb29sZWFuIikpOwogICAgICAgICBWTTo6RGVsZXRlUHJvcGVydHlNb2RlU2NvcGUg
c2NvcGUodm0sIFZNOjpEZWxldGVQcm9wZXJ0eU1vZGU6Oklnbm9yZUNvbmZpZ3VyYWJsZSk7CiAg
ICAgICAgIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eSh0aGlzLCBnbG9iYWxPYmplY3QoKS0+Z2xv
YmFsRXhlYygpLCBwcm9wZXJ0eU5hbWUpOwogICAgIH0KICNlbmRpZgogICAgIGlmICghanNDYXN0
PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250
ZXh0KCktPmlzRG9jdW1lbnQoKSkgewogICAgICAgICBoYXNEaXNhYmxlZFJ1bnRpbWVQcm9wZXJ0
aWVzID0gdHJ1ZTsKLSAgICAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKCZ2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJjb25kaXRpb25hbGx5
RXhwb3NlZFRvV2luZG93RnVuY3Rpb24iKSwgc3RybGVuKCJjb25kaXRpb25hbGx5RXhwb3NlZFRv
V2luZG93RnVuY3Rpb24iKSk7CisgICAgICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmll
cjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJjb25kaXRp
b25hbGx5RXhwb3NlZFRvV2luZG93RnVuY3Rpb24iKSwgc3RybGVuKCJjb25kaXRpb25hbGx5RXhw
b3NlZFRvV2luZG93RnVuY3Rpb24iKSk7CiAgICAgICAgIFZNOjpEZWxldGVQcm9wZXJ0eU1vZGVT
Y29wZSBzY29wZSh2bSwgVk06OkRlbGV0ZVByb3BlcnR5TW9kZTo6SWdub3JlQ29uZmlndXJhYmxl
KTsKICAgICAgICAgSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KHRoaXMsIGdsb2JhbE9iamVjdCgp
LT5nbG9iYWxFeGVjKCksIHByb3BlcnR5TmFtZSk7CiAgICAgfQogICAgIGlmICghanNDYXN0PEpT
RE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0
KCktPmlzV29ya2VyR2xvYmFsU2NvcGUoKSkgewogICAgICAgICBoYXNEaXNhYmxlZFJ1bnRpbWVQ
cm9wZXJ0aWVzID0gdHJ1ZTsKLSAgICAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKCZ2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJjb25kaXRp
b25hbGx5RXhwb3NlZFRvV29ya2VyRnVuY3Rpb24iKSwgc3RybGVuKCJjb25kaXRpb25hbGx5RXhw
b3NlZFRvV29ya2VyRnVuY3Rpb24iKSk7CisgICAgICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRl
bnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJj
b25kaXRpb25hbGx5RXhwb3NlZFRvV29ya2VyRnVuY3Rpb24iKSwgc3RybGVuKCJjb25kaXRpb25h
bGx5RXhwb3NlZFRvV29ya2VyRnVuY3Rpb24iKSk7CiAgICAgICAgIFZNOjpEZWxldGVQcm9wZXJ0
eU1vZGVTY29wZSBzY29wZSh2bSwgVk06OkRlbGV0ZVByb3BlcnR5TW9kZTo6SWdub3JlQ29uZmln
dXJhYmxlKTsKICAgICAgICAgSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KHRoaXMsIGdsb2JhbE9i
amVjdCgpLT5nbG9iYWxFeGVjKCksIHByb3BlcnR5TmFtZSk7CiAgICAgfQogICAgIGlmICghKGpz
Q2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpLT5pc1NlY3VyZUNvbnRleHQoKXx8IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+
KGdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5hbGxvd3NNZWRpYURl
dmljZXMoKSkpIHsKICAgICAgICAgaGFzRGlzYWJsZWRSdW50aW1lUHJvcGVydGllcyA9IHRydWU7
Ci0gICAgICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0s
IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigibWVkaWFEZXZpY2VzIiksIHN0cmxlbigi
bWVkaWFEZXZpY2VzIikpOworICAgICAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6
OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigibWVkaWFEZXZp
Y2VzIiksIHN0cmxlbigibWVkaWFEZXZpY2VzIikpOwogICAgICAgICBWTTo6RGVsZXRlUHJvcGVy
dHlNb2RlU2NvcGUgc2NvcGUodm0sIFZNOjpEZWxldGVQcm9wZXJ0eU1vZGU6Oklnbm9yZUNvbmZp
Z3VyYWJsZSk7CiAgICAgICAgIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eSh0aGlzLCBnbG9iYWxP
YmplY3QoKS0+Z2xvYmFsRXhlYygpLCBwcm9wZXJ0eU5hbWUpOwogICAgIH0KICAgICBpZiAoIShq
c0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKS0+aXNTZWN1cmVDb250ZXh0KCl8fCBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3Qq
PihnbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+aGFzU2VydmljZVdv
cmtlclNjaGVtZSgpKSkgewogICAgICAgICBoYXNEaXNhYmxlZFJ1bnRpbWVQcm9wZXJ0aWVzID0g
dHJ1ZTsKLSAgICAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KCZ2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJzZXJ2aWNlV29ya2VycyIpLCBz
dHJsZW4oInNlcnZpY2VXb3JrZXJzIikpOworICAgICAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElk
ZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigi
c2VydmljZVdvcmtlcnMiKSwgc3RybGVuKCJzZXJ2aWNlV29ya2VycyIpKTsKICAgICAgICAgVk06
OkRlbGV0ZVByb3BlcnR5TW9kZVNjb3BlIHNjb3BlKHZtLCBWTTo6RGVsZXRlUHJvcGVydHlNb2Rl
OjpJZ25vcmVDb25maWd1cmFibGUpOwogICAgICAgICBKU09iamVjdDo6ZGVsZXRlUHJvcGVydHko
dGhpcywgZ2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKSwgcHJvcGVydHlOYW1lKTsKICAgICB9
CiAjaWYgRU5BQkxFKFRFU1RfRkVBVFVSRSkKICAgICBpZiAoIShSdW50aW1lRW5hYmxlZEZlYXR1
cmVzOjpzaGFyZWRGZWF0dXJlcygpLnRlc3RGZWF0dXJlRW5hYmxlZCgpICYmIFJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkudGVzdEZlYXR1cmUxRW5hYmxlZCgpKSkgewog
ICAgICAgICBoYXNEaXNhYmxlZFJ1bnRpbWVQcm9wZXJ0aWVzID0gdHJ1ZTsKLSAgICAgICAgYXV0
byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBMQ2hhcio+KCJlbmFibGVkQXRSdW50aW1lQXR0cmlidXRlIiksIHN0cmxlbigi
ZW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZSIpKTsKKyAgICAgICAgYXV0byBwcm9wZXJ0eU5hbWUg
PSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFy
Kj4oImVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGUiKSwgc3RybGVuKCJlbmFibGVkQXRSdW50aW1l
QXR0cmlidXRlIikpOwogICAgICAgICBWTTo6RGVsZXRlUHJvcGVydHlNb2RlU2NvcGUgc2NvcGUo
dm0sIFZNOjpEZWxldGVQcm9wZXJ0eU1vZGU6Oklnbm9yZUNvbmZpZ3VyYWJsZSk7CiAgICAgICAg
IEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eSh0aGlzLCBnbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhl
YygpLCBwcm9wZXJ0eU5hbWUpOwogICAgIH0KICNlbmRpZgogICAgIGlmICghanNDYXN0PEpTRE9N
R2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkt
PmlzRG9jdW1lbnQoKSkgewogICAgICAgICBoYXNEaXNhYmxlZFJ1bnRpbWVQcm9wZXJ0aWVzID0g
dHJ1ZTsKLSAgICAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KCZ2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJjb25kaXRpb25hbGx5RXhwb3Nl
ZFRvV2luZG93QXR0cmlidXRlIiksIHN0cmxlbigiY29uZGl0aW9uYWxseUV4cG9zZWRUb1dpbmRv
d0F0dHJpYnV0ZSIpKTsKKyAgICAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oImNvbmRpdGlvbmFs
bHlFeHBvc2VkVG9XaW5kb3dBdHRyaWJ1dGUiKSwgc3RybGVuKCJjb25kaXRpb25hbGx5RXhwb3Nl
ZFRvV2luZG93QXR0cmlidXRlIikpOwogICAgICAgICBWTTo6RGVsZXRlUHJvcGVydHlNb2RlU2Nv
cGUgc2NvcGUodm0sIFZNOjpEZWxldGVQcm9wZXJ0eU1vZGU6Oklnbm9yZUNvbmZpZ3VyYWJsZSk7
CiAgICAgICAgIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eSh0aGlzLCBnbG9iYWxPYmplY3QoKS0+
Z2xvYmFsRXhlYygpLCBwcm9wZXJ0eU5hbWUpOwogICAgIH0KICAgICBpZiAoIWpzQ2FzdDxKU0RP
TUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
LT5pc1dvcmtlckdsb2JhbFNjb3BlKCkpIHsKICAgICAgICAgaGFzRGlzYWJsZWRSdW50aW1lUHJv
cGVydGllcyA9IHRydWU7Ci0gICAgICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6
ZnJvbVN0cmluZygmdm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiY29uZGl0aW9u
YWxseUV4cG9zZWRUb1dvcmtlckF0dHJpYnV0ZSIpLCBzdHJsZW4oImNvbmRpdGlvbmFsbHlFeHBv
c2VkVG9Xb3JrZXJBdHRyaWJ1dGUiKSk7CisgICAgICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRl
bnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJj
b25kaXRpb25hbGx5RXhwb3NlZFRvV29ya2VyQXR0cmlidXRlIiksIHN0cmxlbigiY29uZGl0aW9u
YWxseUV4cG9zZWRUb1dvcmtlckF0dHJpYnV0ZSIpKTsKICAgICAgICAgVk06OkRlbGV0ZVByb3Bl
cnR5TW9kZVNjb3BlIHNjb3BlKHZtLCBWTTo6RGVsZXRlUHJvcGVydHlNb2RlOjpJZ25vcmVDb25m
aWd1cmFibGUpOwogICAgICAgICBKU09iamVjdDo6ZGVsZXRlUHJvcGVydHkodGhpcywgZ2xvYmFs
T2JqZWN0KCktPmdsb2JhbEV4ZWMoKSwgcHJvcGVydHlOYW1lKTsKICAgICB9CkBAIC0yNDIyLDgg
KzI0MjIsOCBAQCB2b2lkIEpTVGVzdE9ialByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oCiAgICAg
cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5pdGVyYXRvclN5bWJvbCwgZ2xvYmFsT2Jq
ZWN0KCktPmFycmF5UHJvdG90eXBlKCktPmdldERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+
YnVpbHRpbk5hbWVzKCkudmFsdWVzUHJpdmF0ZU5hbWUoKSksIHN0YXRpY19jYXN0PHVuc2lnbmVk
PihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOwogICAgIGFkZFZhbHVlSXRlcmFi
bGVNZXRob2RzKCpnbG9iYWxPYmplY3QoKSwgKnRoaXMpOwogICAgIEpTT2JqZWN0JiB1bnNjb3Bh
YmxlcyA9ICpjb25zdHJ1Y3RFbXB0eU9iamVjdChnbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygp
LCBnbG9iYWxPYmplY3QoKS0+bnVsbFByb3RvdHlwZU9iamVjdFN0cnVjdHVyZSgpKTsKLSAgICB1
bnNjb3BhYmxlcy5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAidm9p
ZE1ldGhvZCIpLCBqc0Jvb2xlYW4odHJ1ZSkpOwotICAgIHVuc2NvcGFibGVzLnB1dERpcmVjdCh2
bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJzaG9ydEF0dHIiKSwganNCb29sZWFuKHRy
dWUpKTsKKyAgICB1bnNjb3BhYmxlcy5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJp
bmcodm0sICJ2b2lkTWV0aG9kIiksIGpzQm9vbGVhbih0cnVlKSk7CisgICAgdW5zY29wYWJsZXMu
cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAic2hvcnRBdHRyIiksIGpz
Qm9vbGVhbih0cnVlKSk7CiAgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnBy
b3BlcnR5TmFtZXMtPnVuc2NvcGFibGVzU3ltYm9sLCAmdW5zY29wYWJsZXMsIEpTQzo6UHJvcGVy
dHlBdHRyaWJ1dGU6OkRvbnRFbnVtIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkp
OwogfQogCkBAIC0yNDkyLDEwICsyNDkyLDExIEBAIGJvb2wgSlNUZXN0T2JqOjpnZXRPd25Qcm9w
ZXJ0eVNsb3RCeUluZGUKIAogdm9pZCBKU1Rlc3RPYmo6OmdldE93blByb3BlcnR5TmFtZXMoSlNP
YmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBzdGF0ZSwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3Bl
cnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQogeworICAgIFZNJiB2bSA9IHN0YXRlLT52
bSgpOwogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0T2JqKj4ob2JqZWN0KTsK
ICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKG9iamVjdCwgaW5mbygpKTsKICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwLCBjb3VudCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKS5sZW5ndGgoKTsg
aSA8IGNvdW50OyArK2kpCi0gICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZy
b20oc3RhdGUsIGkpKTsKKyAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJv
bSh2bSwgaSkpOwogICAgIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgc3Rh
dGUsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwogfQogCkBAIC0yNjY1LDYgKzI2NjYsNyBAQCBFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25zdHJ1Y3RvclN0YXRpCiAKIHN0YXRpYyBpbmxpbmUgYm9v
bCBzZXRKU1Rlc3RPYmpDb25zdHJ1Y3RvclN0YXRpY1N0cmluZ0F0dHJTZXR0ZXIoRXhlY1N0YXRl
JiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKKyAgICBV
TlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBh
dXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KHN0YXRlLCB2YWx1ZSk7CiAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC0yNzI1LDYgKzI3
MjcsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpFbnVtQXR0cihFeGVjU3RhCiAKIHN0YXRp
YyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpFbnVtQXR0clNldHRlcihFeGVjU3RhdGUmIHN0YXRl
LCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93
U2NvcGUpCiB7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1
dG8gb3B0aW9uYWxOYXRpdmVWYWx1ZSA9IHBhcnNlRW51bWVyYXRpb248VGVzdE9iajo6RW51bVR5
cGU+KHN0YXRlLCB2YWx1ZSk7CkBAIC0yNzU5LDYgKzI3NjIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RPYmpCeXRlQXR0cihFeGVjU3RhCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RP
YmpCeXRlQXR0clNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3Qs
IEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CisgICAgVU5VU0VEX1BB
UkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1w
bCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0
PElETEJ5dGU+KHN0YXRlLCB2YWx1ZSk7CkBAIC0yNzkwLDYgKzI3OTQsNyBAQCBFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RPYmpPY3RldEF0dHIoRXhlY1N0CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRK
U1Rlc3RPYmpPY3RldEF0dHJTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlz
T2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogeworICAgIFVO
VVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1
dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0g
Y29udmVydDxJRExPY3RldD4oc3RhdGUsIHZhbHVlKTsKQEAgLTI4MjEsNiArMjgyNiw3IEBAIEVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9ialNob3J0QXR0cihFeGVjU3QKIAogc3RhdGljIGlubGluZSBi
b29sIHNldEpTVGVzdE9ialNob3J0QXR0clNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RP
YmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7
CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7
CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZl
VmFsdWUgPSBjb252ZXJ0PElETFNob3J0PihzdGF0ZSwgdmFsdWUpOwpAQCAtMjg1Miw2ICsyODU4
LDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ2xhbXBlZFNob3J0QXR0cgogCiBzdGF0aWMg
aW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQ2xhbXBlZFNob3J0QXR0clNldHRlcihFeGVjU3RhdGUm
IHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUm
IHRocm93U2NvcGUpCiB7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwog
ICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETENsYW1wQWRhcHRvcjxJRExTaG9ydD4+
KHN0YXRlLCB2YWx1ZSk7CkBAIC0yODgzLDYgKzI4OTAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpFbmZvcmNlUmFuZ2VTaG9yCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpF
bmZvcmNlUmFuZ2VTaG9ydEF0dHJTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0
aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogeworICAg
IFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAg
IGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVl
ID0gY29udmVydDxJRExFbmZvcmNlUmFuZ2VBZGFwdG9yPElETFNob3J0Pj4oc3RhdGUsIHZhbHVl
KTsKQEAgLTI5MTQsNiArMjkyMiw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialVuc2lnbmVk
U2hvcnRBdHQKIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialVuc2lnbmVkU2hvcnRB
dHRyU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1
ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKKyAgICBVTlVTRURfUEFSQU0oc3Rh
dGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gdGhp
c09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMVW5z
aWduZWRTaG9ydD4oc3RhdGUsIHZhbHVlKTsKQEAgLTI5NDUsNiArMjk1NCw3IEBAIEVuY29kZWRK
U1ZhbHVlIGpzVGVzdE9iakxvbmdBdHRyKEV4ZWNTdGEKIAogc3RhdGljIGlubGluZSBib29sIHNl
dEpTVGVzdE9iakxvbmdBdHRyU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhp
c09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKKyAgICBV
TlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBh
dXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9
IGNvbnZlcnQ8SURMTG9uZz4oc3RhdGUsIHZhbHVlKTsKQEAgLTI5NzYsNiArMjk4Niw3IEBAIEVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9iakxvbmdMb25nQXR0cihFeGUKIAogc3RhdGljIGlubGluZSBi
b29sIHNldEpTVGVzdE9iakxvbmdMb25nQXR0clNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rl
c3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUp
CiB7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0
aXZlVmFsdWUgPSBjb252ZXJ0PElETExvbmdMb25nPihzdGF0ZSwgdmFsdWUpOwpAQCAtMzAwNyw2
ICszMDE4LDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqVW5zaWduZWRMb25nTG9uZwogCiBz
dGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqVW5zaWduZWRMb25nTG9uZ0F0dHJTZXR0ZXIo
RXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogeworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAg
VU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0Lndy
YXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExVbnNpZ25lZExvbmdM
b25nPihzdGF0ZSwgdmFsdWUpOwpAQCAtMzAzOCw2ICszMDUwLDcgQEAgRW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqU3RyaW5nQXR0cihFeGVjUwogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0
T2JqU3RyaW5nQXR0clNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmpl
Y3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CisgICAgVU5VU0VE
X1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYg
aW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252
ZXJ0PElETERPTVN0cmluZz4oc3RhdGUsIHZhbHVlKTsKQEAgLTMwNjksNiArMzA4Miw3IEBAIEVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9ialVzdnN0cmluZ0F0dHIoRXgKIAogc3RhdGljIGlubGluZSBi
b29sIHNldEpTVGVzdE9ialVzdnN0cmluZ0F0dHJTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNU
ZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KQogeworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5h
dGl2ZVZhbHVlID0gY29udmVydDxJRExVU1ZTdHJpbmc+KHN0YXRlLCB2YWx1ZSk7CkBAIC0zMTAw
LDYgKzMxMTQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpUZXN0T2JqQXR0cihFeGVjCiAK
IHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpUZXN0T2JqQXR0clNldHRlcihFeGVjU3Rh
dGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2Nv
cGUmIHRocm93U2NvcGUpCiB7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgp
OwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETEludGVyZmFjZTxUZXN0T2JqPj4o
c3RhdGUsIHZhbHVlLCBbXShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYg
c2NvcGUpIHsgdGhyb3dBdHRyaWJ1dGVUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlLCAiVGVzdE9iamVj
dCIsICJ0ZXN0T2JqQXR0ciIsICJUZXN0T2JqIik7IH0pOwpAQCAtMzEzMSw2ICszMTQ2LDcgQEAg
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqVGVzdE51bGxhYmxlT2JqQQogCiBzdGF0aWMgaW5saW5l
IGJvb2wgc2V0SlNUZXN0T2JqVGVzdE51bGxhYmxlT2JqQXR0clNldHRlcihFeGVjU3RhdGUmIHN0
YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRo
cm93U2NvcGUpCiB7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAg
IGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETE51bGxhYmxlPElETEludGVyZmFjZTxUZXN0
T2JqPj4+KHN0YXRlLCB2YWx1ZSwgW10oSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93
U2NvcGUmIHNjb3BlKSB7IHRocm93QXR0cmlidXRlVHlwZUVycm9yKHN0YXRlLCBzY29wZSwgIlRl
c3RPYmplY3QiLCAidGVzdE51bGxhYmxlT2JqQXR0ciIsICJUZXN0T2JqIik7IH0pOwpAQCAtMzE2
Miw2ICszMTc4LDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqTGVuaWVudFRlc3RPYmpBdAog
CiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqTGVuaWVudFRlc3RPYmpBdHRyU2V0dGVy
KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwg
VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAg
IFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53
cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMSW50ZXJmYWNlPFRl
c3RPYmo+PihzdGF0ZSwgdmFsdWUsIFtdKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJv
d1Njb3BlJiBzY29wZSkgeyB0aHJvd0F0dHJpYnV0ZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUsICJU
ZXN0T2JqZWN0IiwgImxlbmllbnRUZXN0T2JqQXR0ciIsICJUZXN0T2JqIik7IH0pOwpAQCAtMzIw
Nyw2ICszMjI0LDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqU3RyaW5nQXR0clRyZWF0aQog
CiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqU3RyaW5nQXR0clRyZWF0aW5nTnVsbEFz
RW1wdHlTdHJpbmdTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0
LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogeworICAgIFVOVVNFRF9Q
QVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGlt
cGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVy
dDxJRExUcmVhdE51bGxBc0VtcHR5QWRhcHRvcjxJRExET01TdHJpbmc+PihzdGF0ZSwgdmFsdWUp
OwpAQCAtMzIzOCw2ICszMjU2LDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqVXN2c3RyaW5n
QXR0clRyZQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqVXN2c3RyaW5nQXR0clRy
ZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmdTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2Jq
JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewor
ICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwog
ICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZh
bHVlID0gY29udmVydDxJRExUcmVhdE51bGxBc0VtcHR5QWRhcHRvcjxJRExVU1ZTdHJpbmc+Pihz
dGF0ZSwgdmFsdWUpOwpAQCAtMzI2OSw2ICszMjg4LDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqQnl0ZVN0cmluZ0F0dHJUcgogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQnl0
ZVN0cmluZ0F0dHJUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nU2V0dGVyKEV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSkKIHsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAg
YXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMVHJlYXROdWxsQXNFbXB0eUFkYXB0b3I8SURM
Qnl0ZVN0cmluZz4+KHN0YXRlLCB2YWx1ZSk7CkBAIC0zMzAwLDYgKzMzMjAsNyBAQCBFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdMb25nUmVjb3JkCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBz
ZXRKU1Rlc3RPYmpTdHJpbmdMb25nUmVjb3JkQXR0clNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBK
U1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2Nv
cGUpCiB7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8g
bmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETFJlY29yZDxJRExET01TdHJpbmcsIElETExvbmc+Pihz
dGF0ZSwgdmFsdWUpOwpAQCAtMzMzMSw2ICszMzUyLDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqVXN2c3RyaW5nTG9uZ1JlYwogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqVXN2
c3RyaW5nTG9uZ1JlY29yZEF0dHJTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0
aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogeworICAg
IFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAg
IGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVl
ID0gY29udmVydDxJRExSZWNvcmQ8SURMVVNWU3RyaW5nLCBJRExMb25nPj4oc3RhdGUsIHZhbHVl
KTsKQEAgLTMzNjIsNiArMzM4NCw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialVzdnN0cmlu
Z0xvbmdSZWMKIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialVzdnN0cmluZ0xvbmdS
ZWNvcmRBdHRyU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwg
SlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKKyAgICBVTlVTRURfUEFS
QU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBs
ID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8
SURMUmVjb3JkPElETEJ5dGVTdHJpbmcsIElETExvbmc+PihzdGF0ZSwgdmFsdWUpOwpAQCAtMzM5
Myw2ICszNDE2LDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqU3RyaW5nT2JqUmVjb3JkQQog
CiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqU3RyaW5nT2JqUmVjb3JkQXR0clNldHRl
cihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUs
IFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qu
d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETFJlY29yZDxJRExE
T01TdHJpbmcsIElETEludGVyZmFjZTxUZXN0T2JqPj4+KHN0YXRlLCB2YWx1ZSk7CkBAIC0zNDI0
LDYgKzM0NDgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdOdWxsYWJsZU9iCiAK
IHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpTdHJpbmdOdWxsYWJsZU9ialJlY29yZEF0
dHJTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVl
IHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogeworICAgIFVOVVNFRF9QQVJBTShzdGF0
ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlz
T2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExSZWNv
cmQ8SURMRE9NU3RyaW5nLCBJRExOdWxsYWJsZTxJRExJbnRlcmZhY2U8VGVzdE9iaj4+Pj4oc3Rh
dGUsIHZhbHVlKTsKQEAgLTM0NTUsNiArMzQ4MCw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9i
akRpY3Rpb25hcnlBdHRyKEUKIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakRpY3Rp
b25hcnlBdHRyU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwg
SlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKKyAgICBVTlVTRURfUEFS
QU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBs
ID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8
SURMRGljdGlvbmFyeTxUZXN0T2JqOjpEaWN0aW9uYXJ5Pj4oc3RhdGUsIHZhbHVlKTsKQEAgLTM0
ODYsNiArMzUxMiw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlRGljdGlvbmEK
IAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iak51bGxhYmxlRGljdGlvbmFyeUF0dHJT
ZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZh
bHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogeworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7
CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2Jq
ZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExOdWxsYWJs
ZTxJRExEaWN0aW9uYXJ5PFRlc3RPYmo6OkRpY3Rpb25hcnk+Pj4oc3RhdGUsIHZhbHVlKTsKQEAg
LTM1MTcsNiArMzU0NCw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakFubm90YXRlZFR5cGVJ
blUKIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakFubm90YXRlZFR5cGVJblVuaW9u
QXR0clNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFs
dWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CisgICAgVU5VU0VEX1BBUkFNKHN0
YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRo
aXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETFVu
aW9uPElETERPTVN0cmluZywgSURMQ2xhbXBBZGFwdG9yPElETExvbmc+Pj4oc3RhdGUsIHZhbHVl
KTsKQEAgLTM1NDgsNiArMzU3Niw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakFubm90YXRl
ZFR5cGVJblMKIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakFubm90YXRlZFR5cGVJ
blNlcXVlbmNlQXR0clNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmpl
Y3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CisgICAgVU5VU0VE
X1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYg
aW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252
ZXJ0PElETFNlcXVlbmNlPElETENsYW1wQWRhcHRvcjxJRExMb25nPj4+KHN0YXRlLCB2YWx1ZSk7
CkBAIC0zNTc5LDYgKzM2MDgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpJbXBsZW1lbnRh
dGlvbkVuCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpJbXBsZW1lbnRhdGlvbkVu
dW1BdHRyU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNW
YWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKKyAgICBVTlVTRURfUEFSQU0o
c3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0g
dGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBvcHRpb25hbE5hdGl2ZVZhbHVlID0gcGFy
c2VFbnVtZXJhdGlvbjxBbHRlcm5hdGVFbnVtTmFtZT4oc3RhdGUsIHZhbHVlKTsKQEAgLTM2NDEs
NiArMzY3MSw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialhNTE9iakF0dHIoRXhlY1MKIAog
c3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialhNTE9iakF0dHJTZXR0ZXIoRXhlY1N0YXRl
JiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKQogeworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsK
ICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExJbnRlcmZhY2U8VGVzdE9iaj4+KHN0
YXRlLCB2YWx1ZSwgW10oSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNj
b3BlKSB7IHRocm93QXR0cmlidXRlVHlwZUVycm9yKHN0YXRlLCBzY29wZSwgIlRlc3RPYmplY3Qi
LCAiWE1MT2JqQXR0ciIsICJUZXN0T2JqIik7IH0pOwpAQCAtMzY3Miw2ICszNzAzLDcgQEAgRW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqQ3JlYXRlKEV4ZWNTdGF0ZQogCiBzdGF0aWMgaW5saW5lIGJv
b2wgc2V0SlNUZXN0T2JqQ3JlYXRlU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYg
dGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKKyAg
ICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAg
ICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1
ZSA9IGNvbnZlcnQ8SURMQm9vbGVhbj4oc3RhdGUsIHZhbHVlKTsKQEAgLTM3MDMsNiArMzczNSw3
IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZFN0cmluZ0EKIAogc3RhdGljIGlu
bGluZSBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZFN0cmluZ0F0dHJTZXR0ZXIoRXhlY1N0YXRl
JiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKQogeworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsK
ICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KHN0YXRlLCB2YWx1
ZSk7CkBAIC0zNzM0LDYgKzM3NjcsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0
ZWRVU1ZTdHJpCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRVU1ZT
dHJpbmdBdHRyU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwg
SlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKKyAgICBVTlVTRURfUEFS
QU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBs
ID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8
SURMVVNWU3RyaW5nPihzdGF0ZSwgdmFsdWUpOwpAQCAtMzc2NSw2ICszNzk5LDcgQEAgRW5jb2Rl
ZEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkSW50ZWdyYQogCiBzdGF0aWMgaW5saW5lIGJvb2wg
c2V0SlNUZXN0T2JqUmVmbGVjdGVkSW50ZWdyYWxBdHRyU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUs
IEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dT
Y29wZSkKIHsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0
byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMTG9uZz4oc3RhdGUsIHZhbHVlKTsKQEAgLTM3OTYs
NiArMzgzMSw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZFVuc2lnbmUKIAog
c3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZFVuc2lnbmVkSW50ZWdyYWxB
dHRyU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1
ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKKyAgICBVTlVTRURfUEFSQU0oc3Rh
dGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gdGhp
c09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMVW5z
aWduZWRMb25nPihzdGF0ZSwgdmFsdWUpOwpAQCAtMzgyNyw2ICszODYzLDcgQEAgRW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqUmVmbGVjdGVkQm9vbGVhbgogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0
SlNUZXN0T2JqUmVmbGVjdGVkQm9vbGVhbkF0dHJTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNU
ZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KQogeworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5h
dGl2ZVZhbHVlID0gY29udmVydDxJRExCb29sZWFuPihzdGF0ZSwgdmFsdWUpOwpAQCAtMzg1OCw2
ICszODk1LDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkVVJMQXR0cgogCiBz
dGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkVVJMQXR0clNldHRlcihFeGVj
U3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93
U2NvcGUmIHRocm93U2NvcGUpCiB7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBl
ZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oc3RhdGUs
IHZhbHVlKTsKQEAgLTM4ODksNiArMzkyNyw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialJl
ZmxlY3RlZFVTVlVSTEEKIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialJlZmxlY3Rl
ZFVTVlVSTEF0dHJTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0
LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogeworICAgIFVOVVNFRF9Q
QVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGlt
cGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVy
dDxJRExVU1ZTdHJpbmc+KHN0YXRlLCB2YWx1ZSk7CkBAIC0zOTIwLDYgKzM5NTksNyBAQCBFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRTdHJpbmdBCiAKIHN0YXRpYyBpbmxpbmUgYm9v
bCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRTdHJpbmdBdHRyU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUs
IEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dT
Y29wZSkKIHsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0
byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPihzdGF0ZSwgdmFsdWUpOwpAQCAt
Mzk1MSw2ICszOTkxLDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9t
SQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tSW50ZWdy
YWxBdHRyU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNW
YWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKKyAgICBVTlVTRURfUEFSQU0o
c3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0g
dGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURM
TG9uZz4oc3RhdGUsIHZhbHVlKTsKQEAgLTM5ODIsNiArNDAyMyw3IEBAIEVuY29kZWRKU1ZhbHVl
IGpzVGVzdE9ialJlZmxlY3RlZEN1c3RvbUIKIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVz
dE9ialJlZmxlY3RlZEN1c3RvbUJvb2xlYW5BdHRyU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpT
VGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29w
ZSkKIHsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBu
YXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMQm9vbGVhbj4oc3RhdGUsIHZhbHVlKTsKQEAgLTQwMTMs
NiArNDA1NSw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZEN1c3RvbVUKIAog
c3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZEN1c3RvbVVSTEF0dHJTZXR0
ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVl
LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogeworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0
LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+
KHN0YXRlLCB2YWx1ZSk7CkBAIC00MDQ4LDYgKzQwOTEsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpFbmFibGVkQXRSdW50aW1lCiAjaWYgRU5BQkxFKFRFU1RfRkVBVFVSRSkKIHN0YXRpYyBp
bmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpFbmFibGVkQXRSdW50aW1lQXR0cmlidXRlU2V0dGVyKEV4
ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhy
b3dTY29wZSYgdGhyb3dTY29wZSkKIHsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFw
cGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPihzdGF0
ZSwgdmFsdWUpOwpAQCAtNDA4NCw2ICs0MTI4LDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2Jq
Q29uc3RydWN0b3JFbmFibAogI2lmIEVOQUJMRShURVNUX0ZFQVRVUkUpCiBzdGF0aWMgaW5saW5l
IGJvb2wgc2V0SlNUZXN0T2JqQ29uc3RydWN0b3JFbmFibGVkQXRSdW50aW1lQXR0cmlidXRlU3Rh
dGljU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRo
cm93U2NvcGUpCiB7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5n
PihzdGF0ZSwgdmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFs
c2UpOwpAQCAtNDExNiw2ICs0MTYxLDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqVHlwZWRB
cnJheUF0dHIoRQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqVHlwZWRBcnJheUF0
dHJTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVl
IHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogeworICAgIFVOVVNFRF9QQVJBTShzdGF0
ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlz
T2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExGbG9h
dDMyQXJyYXk+KHN0YXRlLCB2YWx1ZSwgW10oSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRo
cm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXR0cmlidXRlVHlwZUVycm9yKHN0YXRlLCBzY29wZSwg
IlRlc3RPYmplY3QiLCAidHlwZWRBcnJheUF0dHIiLCAiRmxvYXQzMkFycmF5Iik7IH0pOwpAQCAt
NDE0NSw2ICs0MTkxLDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ3VzdG9tQXR0cihFeGVj
UwogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQ3VzdG9tQXR0clNldHRlcihFeGVj
U3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93
U2NvcGUmIHRocm93U2NvcGUpCiB7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgdGhpc09iamVjdC5zZXRDdXN0b21BdHRyKHN0YXRl
LCB2YWx1ZSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC00MTY5LDYgKzQyMTYsNyBAQCBFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpPbmZvbyhFeGVjU3RhdGUqCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBz
ZXRKU1Rlc3RPYmpPbmZvb1NldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNP
YmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CisgICAgVU5V
U0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgc2V0
RXZlbnRIYW5kbGVyQXR0cmlidXRlKHN0YXRlLCB0aGlzT2JqZWN0LCB0aGlzT2JqZWN0LndyYXBw
ZWQoKSwgZXZlbnROYW1lcygpLmZvb0V2ZW50LCB2YWx1ZSk7CiAgICAgcmV0dXJuIHRydWU7CkBA
IC00MTkzLDYgKzQyNDEsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpPbndlYmtpdGZvbyhF
eGVjCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpPbndlYmtpdGZvb1NldHRlcihF
eGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRo
cm93U2NvcGUmIHRocm93U2NvcGUpCiB7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgc2V0RXZlbnRIYW5kbGVyQXR0cmlidXRlKHN0
YXRlLCB0aGlzT2JqZWN0LCB0aGlzT2JqZWN0LndyYXBwZWQoKSwgZXZlbnROYW1lcygpLmZvb0V2
ZW50LCB2YWx1ZSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC00MjE5LDYgKzQyNjgsNyBAQCBFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoRXhlY1N0YXRlQXR0CiAKIHN0YXRpYyBpbmxpbmUgYm9v
bCBzZXRKU1Rlc3RPYmpXaXRoRXhlY1N0YXRlQXR0cmlidXRlU2V0dGVyKEV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSkKIHsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAg
YXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMTG9uZz4oc3RhdGUsIHZhbHVlKTsKQEAgLTQy
NTAsNiArNDMwMCw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialdpdGhDYWxsV2l0aEFuZFMK
IAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialdpdGhDYWxsV2l0aEFuZFNldHRlckNh
bGxXaXRoQXR0cmlidXRlU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09i
amVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKKyAgICBVTlVT
RURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRv
JiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNv
bnZlcnQ8SURMTG9uZz4oc3RhdGUsIHZhbHVlKTsKQEAgLTQyODQsNiArNDMzNSw3IEBAIEVuY29k
ZWRKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRFeGVjdXQKIAogc3RhdGljIGlubGluZSBib29s
IHNldEpTVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlU2V0dGVyKEV4
ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhy
b3dTY29wZSYgdGhyb3dTY29wZSkKIHsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFw
cGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMSW50ZXJmYWNlPFRlc3RP
Ymo+PihzdGF0ZSwgdmFsdWUsIFtdKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Nj
b3BlJiBzY29wZSkgeyB0aHJvd0F0dHJpYnV0ZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUsICJUZXN0
T2JqZWN0IiwgIndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlIiwgIlRlc3RPYmoi
KTsgfSk7CkBAIC00MzIxLDYgKzQzNzMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpXaXRo
U2NyaXB0RXhlY3V0CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dEFuZEV4ZWNTdGF0ZUF0dHJpYnV0ZVNldHRlcihFeGVjU3RhdGUmIHN0
YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRo
cm93U2NvcGUpCiB7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAg
IGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETEludGVyZmFjZTxUZXN0T2JqPj4oc3RhdGUs
IHZhbHVlLCBbXShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUp
IHsgdGhyb3dBdHRyaWJ1dGVUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlLCAiVGVzdE9iamVjdCIsICJ3
aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZEV4ZWNTdGF0ZUF0dHJpYnV0ZSIsICJUZXN0T2Jq
Iik7IH0pOwpAQCAtNDM1OCw2ICs0NDExLDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqV2l0
aFNjcmlwdEV4ZWN1dAogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqV2l0aFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHRBbmRFeGVjU3RhdGVXaXRoU3BhY2VzQXR0cmlidXRlU2V0dGVyKEV4
ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhy
b3dTY29wZSYgdGhyb3dTY29wZSkKIHsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFw
cGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMSW50ZXJmYWNlPFRlc3RP
Ymo+PihzdGF0ZSwgdmFsdWUsIFtdKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Nj
b3BlJiBzY29wZSkgeyB0aHJvd0F0dHJpYnV0ZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUsICJUZXN0
T2JqZWN0IiwgIndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kRXhlY1N0YXRlV2l0aFNwYWNl
c0F0dHJpYnV0ZSIsICJUZXN0T2JqIik7IH0pOwpAQCAtNDM5Niw2ICs0NDUwLDcgQEAgRW5jb2Rl
ZEpTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMQogI2lmIEVOQUJMRShDb25kaXRpb24x
KQogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0cjFTZXR0ZXIo
RXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogeworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAg
VU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0Lndy
YXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExMb25nPihzdGF0ZSwg
dmFsdWUpOwpAQCAtNDQzMyw2ICs0NDg4LDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29u
ZGl0aW9uYWxBdHRyMgogI2lmIEVOQUJMRShDb25kaXRpb24xKSAmJiBFTkFCTEUoQ29uZGl0aW9u
MikKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHIyU2V0dGVy
KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwg
VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAg
IFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53
cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMTG9uZz4oc3RhdGUs
IHZhbHVlKTsKQEAgLTQ0NzAsNiArNDUyNiw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNv
bmRpdGlvbmFsQXR0cjMKICNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlv
bjIpCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyM1NldHRl
cihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUs
IFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qu
d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETExvbmc+KHN0YXRl
LCB2YWx1ZSk7CkBAIC00NTA1LDkgKzQ1NjIsMTAgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2Jq
Q29uZGl0aW9uYWxBdHRyNAogI2lmIEVOQUJMRShDb25kaXRpb24xKQogc3RhdGljIGlubGluZSBi
b29sIHNldEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0cjRDb25zdHJ1Y3RvclNldHRlcihFeGVjU3Rh
dGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2Nv
cGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIFVO
VVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVk0mIHZtID0gdGhyb3dTY29wZS52bSgpOwogICAgIC8v
IFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgotICAgIHJldHVybiB0aGlzT2JqZWN0
LnB1dERpcmVjdChzdGF0ZS52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZS52bSgp
LCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oImNvbmRpdGlvbmFsQXR0cjQiKSwgc3Ry
bGVuKCJjb25kaXRpb25hbEF0dHI0IikpLCB2YWx1ZSk7CisgICAgcmV0dXJuIHRoaXNPYmplY3Qu
cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0
PGNvbnN0IExDaGFyKj4oImNvbmRpdGlvbmFsQXR0cjQiKSwgc3RybGVuKCJjb25kaXRpb25hbEF0
dHI0IikpLCB2YWx1ZSk7CiB9CiAKIGJvb2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNENv
bnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQpAQCAtNDUzNSw5ICs0NTkzLDEwIEBAIEVuY29kZWRK
U1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjUKICNpZiBFTkFCTEUoQ29uZGl0aW9uMSkg
JiYgRU5BQkxFKENvbmRpdGlvbjIpCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQ29u
ZGl0aW9uYWxBdHRyNUNvbnN0cnVjdG9yU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9i
aiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsK
LSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsK
KyAgICBWTSYgdm0gPSB0aHJvd1Njb3BlLnZtKCk7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQt
aW4gY29uc3RydWN0b3IuCi0gICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHN0YXRlLnZt
KCksIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLnZtKCksIHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgTENoYXIqPigiY29uZGl0aW9uYWxBdHRyNSIpLCBzdHJsZW4oImNvbmRpdGlvbmFsQXR0
cjUiKSksIHZhbHVlKTsKKyAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50
aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiY29u
ZGl0aW9uYWxBdHRyNSIpLCBzdHJsZW4oImNvbmRpdGlvbmFsQXR0cjUiKSksIHZhbHVlKTsKIH0K
IAogYm9vbCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHI1Q29uc3RydWN0b3IoRXhlY1N0YXRl
KiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
VmFsdWUpCkBAIC00NTY1LDkgKzQ2MjQsMTAgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29u
ZGl0aW9uYWxBdHRyNgogI2lmIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9u
MikKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHI2Q29uc3Ry
dWN0b3JTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1Zh
bHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFZNJiB2bSA9IHRocm93
U2NvcGUudm0oKTsKICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KLSAg
ICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qoc3RhdGUudm0oKSwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZygmc3RhdGUudm0oKSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJjb25k
aXRpb25hbEF0dHI2IiksIHN0cmxlbigiY29uZGl0aW9uYWxBdHRyNiIpKSwgdmFsdWUpOworICAg
IHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2
bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJjb25kaXRpb25hbEF0dHI2IiksIHN0
cmxlbigiY29uZGl0aW9uYWxBdHRyNiIpKSwgdmFsdWUpOwogfQogCiBib29sIHNldEpTVGVzdE9i
akNvbmRpdGlvbmFsQXR0cjZDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKQEAgLTQ2NDcsNiAr
NDcwNyw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakFueUF0dHJpYnV0ZShFeGUKIAogc3Rh
dGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakFueUF0dHJpYnV0ZVNldHRlcihFeGVjU3RhdGUm
IHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUm
IHRocm93U2NvcGUpCiB7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwog
ICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETEFueT4oc3RhdGUsIHZhbHVlKTsKQEAg
LTQ2NzgsNiArNDczOSw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iak9iamVjdEF0dHJpYnV0
ZSgKIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iak9iamVjdEF0dHJpYnV0ZVNldHRl
cihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUs
IFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qu
d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETE9iamVjdD4oc3Rh
dGUsIHZhbHVlKTsKQEAgLTQ3MjMsNiArNDc4NSw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9i
ak11dGFibGVQb2ludChFeGUKIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iak11dGFi
bGVQb2ludFNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpT
VmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CisgICAgVU5VU0VEX1BBUkFN
KHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9
IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElE
TEludGVyZmFjZTxTVkdQb2ludD4+KHN0YXRlLCB2YWx1ZSwgW10oSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXR0cmlidXRlVHlwZUVycm9yKHN0
YXRlLCBzY29wZSwgIlRlc3RPYmplY3QiLCAibXV0YWJsZVBvaW50IiwgIlNWR1BvaW50Iik7IH0p
OwpAQCAtNDc1NCw2ICs0ODE3LDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqU3RyYXdiZXJy
eShFeGVjUwogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqU3RyYXdiZXJyeVNldHRl
cihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUs
IFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qu
d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETExvbmc+KHN0YXRl
LCB2YWx1ZSk7CkBAIC00Nzk5LDYgKzQ4NjMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpJ
ZChFeGVjU3RhdGUqIHN0CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpJZFNldHRl
cihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUs
IFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qu
d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETExvbmc+KHN0YXRl
LCB2YWx1ZSk7CkBAIC00ODQ0LDkgKzQ5MDksMTAgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2Jq
UmVwbGFjZWFibGVBdHRyaQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqUmVwbGFj
ZWFibGVBdHRyaWJ1dGVTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2Jq
ZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFZNJiB2
bSA9IHRocm93U2NvcGUudm0oKTsKICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBwcm9wZXJ0
eS4KLSAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qoc3RhdGUudm0oKSwgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZygmc3RhdGUudm0oKSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+
KCJyZXBsYWNlYWJsZUF0dHJpYnV0ZSIpLCBzdHJsZW4oInJlcGxhY2VhYmxlQXR0cmlidXRlIikp
LCB2YWx1ZSk7CisgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oInJlcGxhY2Vh
YmxlQXR0cmlidXRlIiksIHN0cmxlbigicmVwbGFjZWFibGVBdHRyaWJ1dGUiKSksIHZhbHVlKTsK
IH0KIAogYm9vbCBzZXRKU1Rlc3RPYmpSZXBsYWNlYWJsZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0
YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1
ZSkKQEAgLTQ5MjYsNiArNDk5Miw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxl
TG9uZ1NldHQKIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iak51bGxhYmxlTG9uZ1Nl
dHRhYmxlQXR0cmlidXRlU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09i
amVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKKyAgICBVTlVT
RURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRv
JiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNv
bnZlcnQ8SURMTnVsbGFibGU8SURMTG9uZz4+KHN0YXRlLCB2YWx1ZSk7CkBAIC00OTU3LDYgKzUw
MjQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZVN0cmluZ1NlCiAKIHN0YXRp
YyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpOdWxsYWJsZVN0cmluZ1NldHRhYmxlQXR0cmlidXRl
U2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2
YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUp
OwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09i
amVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMTnVsbGFi
bGU8SURMRE9NU3RyaW5nPj4oc3RhdGUsIHZhbHVlKTsKQEAgLTQ5ODgsNiArNTA1Niw3IEBAIEVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlVVNWU3RyaW4KIAogc3RhdGljIGlubGluZSBi
b29sIHNldEpTVGVzdE9iak51bGxhYmxlVVNWU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGVTZXR0ZXIo
RXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogeworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAg
VU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0Lndy
YXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExOdWxsYWJsZTxJRExV
U1ZTdHJpbmc+PihzdGF0ZSwgdmFsdWUpOwpAQCAtNTAxOSw2ICs1MDg4LDcgQEAgRW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqTnVsbGFibGVCeXRlU3RyaQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0
SlNUZXN0T2JqTnVsbGFibGVCeXRlU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGVTZXR0ZXIoRXhlY1N0
YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKQogeworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQo
KTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExOdWxsYWJsZTxJRExCeXRlU3Ry
aW5nPj4oc3RhdGUsIHZhbHVlKTsKQEAgLTUwNjQsNiArNTEzNCw3IEBAIEVuY29kZWRKU1ZhbHVl
IGpzVGVzdE9iakF0dHJpYnV0ZVdpdGhSZXMKIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVz
dE9iakF0dHJpYnV0ZVdpdGhSZXNlcnZlZEVudW1UeXBlU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUs
IEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dT
Y29wZSkKIHsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0
byBvcHRpb25hbE5hdGl2ZVZhbHVlID0gcGFyc2VFbnVtZXJhdGlvbjxUZXN0T2JqOjpPcHRpb25h
bD4oc3RhdGUsIHZhbHVlKTsKQEAgLTUxMjYsMTcgKzUxOTcsMTggQEAgRW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqUHV0Rm9yd2FyZHNBdHRyaQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0
T2JqUHV0Rm9yd2FyZHNBdHRyaWJ1dGVTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2Jq
JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewot
ICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBhdXRvIGlkID0gSWRlbnRpZmllcjo6
ZnJvbVN0cmluZygmc3RhdGUudm0oKSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJw
dXRGb3J3YXJkc0F0dHJpYnV0ZSIpLCBzdHJsZW4oInB1dEZvcndhcmRzQXR0cmlidXRlIikpOwor
ICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVk0mIHZtID0gdGhyb3dTY29wZS52bSgpOwor
ICAgIGF1dG8gaWQgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0
PGNvbnN0IExDaGFyKj4oInB1dEZvcndhcmRzQXR0cmlidXRlIiksIHN0cmxlbigicHV0Rm9yd2Fy
ZHNBdHRyaWJ1dGUiKSk7CiAgICAgYXV0byB2YWx1ZVRvRm9yd2FyZFRvID0gdGhpc09iamVjdC5n
ZXQoJnN0YXRlLCBpZCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxz
ZSk7CiAgICAgaWYgKFVOTElLRUxZKCF2YWx1ZVRvRm9yd2FyZFRvLmlzT2JqZWN0KCkpKSB7CiAg
ICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgdGhyb3dTY29wZSk7CiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICB9Ci0gICAgYXV0byBmb3J3YXJkSWQgPSBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKCZzdGF0ZS52bSgpLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIm5hbWUiKSwg
c3RybGVuKCJuYW1lIikpOworICAgIGF1dG8gZm9yd2FyZElkID0gSWRlbnRpZmllcjo6ZnJvbVN0
cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJuYW1lIiksIHN0cmxlbigi
bmFtZSIpKTsKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdCh2YWx1ZVRvRm9yd2FyZFRvLCBmYWxz
ZSk7Ci0gICAgYXNPYmplY3QodmFsdWVUb0ZvcndhcmRUbyktPm1ldGhvZFRhYmxlKHN0YXRlLnZt
KCkpLT5wdXQoYXNPYmplY3QodmFsdWVUb0ZvcndhcmRUbyksICZzdGF0ZSwgZm9yd2FyZElkLCB2
YWx1ZSwgc2xvdCk7CisgICAgYXNPYmplY3QodmFsdWVUb0ZvcndhcmRUbyktPm1ldGhvZFRhYmxl
KHZtKS0+cHV0KGFzT2JqZWN0KHZhbHVlVG9Gb3J3YXJkVG8pLCAmc3RhdGUsIGZvcndhcmRJZCwg
dmFsdWUsIHNsb3QpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2Up
OwogICAgIHJldHVybiB0cnVlOwogfQpAQCAtNTE2MiwxNyArNTIzNCwxOCBAQCBFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RPYmpQdXRGb3J3YXJkc051bGxhCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRK
U1Rlc3RPYmpQdXRGb3J3YXJkc051bGxhYmxlQXR0cmlidXRlU2V0dGVyKEV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgYXV0byBpZCA9
IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLnZtKCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgTENoYXIqPigicHV0Rm9yd2FyZHNOdWxsYWJsZUF0dHJpYnV0ZSIpLCBzdHJsZW4oInB1dEZv
cndhcmRzTnVsbGFibGVBdHRyaWJ1dGUiKSk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAg
ICBWTSYgdm0gPSB0aHJvd1Njb3BlLnZtKCk7CisgICAgYXV0byBpZCA9IElkZW50aWZpZXI6OmZy
b21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigicHV0Rm9yd2FyZHNO
dWxsYWJsZUF0dHJpYnV0ZSIpLCBzdHJsZW4oInB1dEZvcndhcmRzTnVsbGFibGVBdHRyaWJ1dGUi
KSk7CiAgICAgYXV0byB2YWx1ZVRvRm9yd2FyZFRvID0gdGhpc09iamVjdC5nZXQoJnN0YXRlLCBp
ZCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CiAgICAgaWYg
KFVOTElLRUxZKCF2YWx1ZVRvRm9yd2FyZFRvLmlzT2JqZWN0KCkpKSB7CiAgICAgICAgIHRocm93
VHlwZUVycm9yKCZzdGF0ZSwgdGhyb3dTY29wZSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICB9Ci0gICAgYXV0byBmb3J3YXJkSWQgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZS52
bSgpLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIm5hbWUiKSwgc3RybGVuKCJuYW1l
IikpOworICAgIGF1dG8gZm9yd2FyZElkID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVp
bnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJuYW1lIiksIHN0cmxlbigibmFtZSIpKTsKICAg
ICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdCh2YWx1ZVRvRm9yd2FyZFRvLCBmYWxzZSk7Ci0gICAgYXNP
YmplY3QodmFsdWVUb0ZvcndhcmRUbyktPm1ldGhvZFRhYmxlKHN0YXRlLnZtKCkpLT5wdXQoYXNP
YmplY3QodmFsdWVUb0ZvcndhcmRUbyksICZzdGF0ZSwgZm9yd2FyZElkLCB2YWx1ZSwgc2xvdCk7
CisgICAgYXNPYmplY3QodmFsdWVUb0ZvcndhcmRUbyktPm1ldGhvZFRhYmxlKHZtKS0+cHV0KGFz
T2JqZWN0KHZhbHVlVG9Gb3J3YXJkVG8pLCAmc3RhdGUsIGZvcndhcmRJZCwgdmFsdWUsIHNsb3Qp
OwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwogICAgIHJldHVy
biB0cnVlOwogfQpAQCAtNTE5OCw2ICs1MjcxLDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2Jq
U3RyaW5naWZpZXJBdHRyaQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqU3RyaW5n
aWZpZXJBdHRyaWJ1dGVTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2Jq
ZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogeworICAgIFVOVVNF
RF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8m
IGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29u
dmVydDxJRExVU1ZTdHJpbmc+KHN0YXRlLCB2YWx1ZSk7CkBAIC01MjMwLDYgKzUzMDQsNyBAQCBF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbGx5UmVhCiAjaWYgRU5BQkxFKENPTkRJ
VElPTikKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbGx5UmVhZFdy
aXRlQXR0cmlidXRlU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVj
dCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKKyAgICBVTlVTRURf
UEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBp
bXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZl
cnQ8SURMSW50ZXJmYWNlPE5vZGU+PihzdGF0ZSwgdmFsdWUsIFtdKEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0F0dHJpYnV0ZVR5cGVFcnJvcihz
dGF0ZSwgc2NvcGUsICJUZXN0T2JqZWN0IiwgImNvbmRpdGlvbmFsbHlSZWFkV3JpdGVBdHRyaWJ1
dGUiLCAiTm9kZSIpOyB9KTsKQEAgLTUyNjgsNiArNTM0Myw3IEBAIEVuY29kZWRKU1ZhbHVlIGpz
VGVzdE9iakNvbmRpdGlvbmFsQW5kQ28KICNpZiBFTkFCTEUoQ09ORElUSU9OKQogc3RhdGljIGlu
bGluZSBib29sIHNldEpTVGVzdE9iakNvbmRpdGlvbmFsQW5kQ29uZGl0aW9uYWxseVJlYWRXcml0
ZUF0dHJpYnV0ZVNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3Qs
IEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CisgICAgVU5VU0VEX1BB
UkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1w
bCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0
PElETEludGVyZmFjZTxOb2RlPj4oc3RhdGUsIHZhbHVlLCBbXShKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBdHRyaWJ1dGVUeXBlRXJyb3Ioc3Rh
dGUsIHNjb3BlLCAiVGVzdE9iamVjdCIsICJjb25kaXRpb25hbEFuZENvbmRpdGlvbmFsbHlSZWFk
V3JpdGVBdHRyaWJ1dGUiLCAiTm9kZSIpOyB9KTsKQEAgLTUzMDMsNiArNTM3OSw3IEBAIEVuY29k
ZWRKU1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbmFsbHlFeHAKIAogc3RhdGljIGlubGluZSBib29s
IHNldEpTVGVzdE9iakNvbmRpdGlvbmFsbHlFeHBvc2VkVG9XaW5kb3dBdHRyaWJ1dGVTZXR0ZXIo
RXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogeworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAg
VU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0Lndy
YXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExMb25nPihzdGF0ZSwg
dmFsdWUpOwpAQCAtNTMzNCw2ICs1NDExLDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29u
ZGl0aW9uYWxseUV4cAogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9u
YWxseUV4cG9zZWRUb1dvcmtlckF0dHJpYnV0ZVNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rl
c3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUp
CiB7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0
aXZlVmFsdWUgPSBjb252ZXJ0PElETExvbmc+KHN0YXRlLCB2YWx1ZSk7CkBAIC01MzY1LDYgKzU0
NDMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbGx5RXhwCiAKIHN0YXRp
YyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbGx5RXhwb3NlZFRvV2luZG93QW5k
V29ya2VyQXR0cmlidXRlU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09i
amVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKKyAgICBVTlVT
RURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRv
JiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNv
bnZlcnQ8SURMTG9uZz4oc3RhdGUsIHZhbHVlKTsKQEAgLTg1NDgsMTkgKzg2MjcsMTkgQEAgSlND
OjpKU09iamVjdCogSlNUZXN0T2JqOjpzZXJpYWxpemUoRXhlYwogCiAgICAgYXV0byBjcmVhdGVW
YWx1ZSA9IGpzVGVzdE9iakNyZWF0ZUdldHRlcihzdGF0ZSwgdGhpc09iamVjdCwgdGhyb3dTY29w
ZSk7CiAgICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwotICAgIHJlc3VsdC0+cHV0
RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImNyZWF0ZSIpLCBjcmVhdGVW
YWx1ZSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmco
dm0sICJjcmVhdGUiKSwgY3JlYXRlVmFsdWUpOwogCiAgICAgYXV0byByZWFkT25seVN0cmluZ0F0
dHJWYWx1ZSA9IGpzVGVzdE9ialJlYWRPbmx5U3RyaW5nQXR0ckdldHRlcihzdGF0ZSwgdGhpc09i
amVjdCwgdGhyb3dTY29wZSk7CiAgICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwot
ICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgInJl
YWRPbmx5U3RyaW5nQXR0ciIpLCByZWFkT25seVN0cmluZ0F0dHJWYWx1ZSk7CisgICAgcmVzdWx0
LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJyZWFkT25seVN0cmlu
Z0F0dHIiKSwgcmVhZE9ubHlTdHJpbmdBdHRyVmFsdWUpOwogCiAgICAgYXV0byBlbnVtQXR0clZh
bHVlID0ganNUZXN0T2JqRW51bUF0dHJHZXR0ZXIoc3RhdGUsIHRoaXNPYmplY3QsIHRocm93U2Nv
cGUpOwogICAgIHRocm93U2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKLSAgICByZXN1bHQtPnB1
dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJlbnVtQXR0ciIpLCBlbnVt
QXR0clZhbHVlKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZyh2bSwgImVudW1BdHRyIiksIGVudW1BdHRyVmFsdWUpOwogCiAgICAgYXV0byBsb25nQXR0
clZhbHVlID0ganNUZXN0T2JqTG9uZ0F0dHJHZXR0ZXIoc3RhdGUsIHRoaXNPYmplY3QsIHRocm93
U2NvcGUpOwogICAgIHRocm93U2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKLSAgICByZXN1bHQt
PnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJsb25nQXR0ciIpLCBs
b25nQXR0clZhbHVlKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyh2bSwgImxvbmdBdHRyIiksIGxvbmdBdHRyVmFsdWUpOwogCiAgICAgcmV0dXJuIHJl
c3VsdDsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9y
cy5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTczLDcgKzE3Myw3IEBAIHRlbXBsYXRlPD4gSlNWYWx1ZSBKU1Rlc3RPdmVybG9hZGVk
Q29uc3QKIHRlbXBsYXRlPD4gdm9pZCBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3Ry
dWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGds
b2JhbE9iamVjdCkKIHsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3Rv
dHlwZSwgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yczo6cHJvdG90eXBlKHZtLCBnbG9iYWxP
YmplY3QpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgSlNDOjpQcm9wZXJ0
eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7
Ci0gICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxT
dHJpbmcoJnZtLCBTdHJpbmcoIlRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzIl9zKSksIEpTQzo6
UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9u
dEVudW0pOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250
cml2aWFsU3RyaW5nKHZtLCBTdHJpbmcoIlRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzIl9zKSks
IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0
ZTo6RG9udEVudW0pOwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3Ro
LCBqc051bWJlcigwKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlBy
b3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNl
cXVlbmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZS5jcHAJKHJl
dmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTI5LDcgKzEyOSw3IEBAIHRlbXBsYXRlPD4gSlNWYWx1ZSBKU1Rlc3RPdmVybG9h
ZGVkQ29uc3QKIHRlbXBsYXRlPD4gdm9pZCBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0
aFNlcXVlbmNlQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKFZNJiB2bSwgSlNET01H
bG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKIHsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3Bl
cnR5TmFtZXMtPnByb3RvdHlwZSwgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1
ZW5jZTo6cHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRl
OjpEb250RGVsZXRlIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlBy
b3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7Ci0gICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0
eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcoJnZtLCBTdHJpbmcoIlRlc3RPdmVybG9h
ZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlIl9zKSksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6
OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOworICAgIHB1dERp
cmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKHZtLCBT
dHJpbmcoIlRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlIl9zKSksIEpTQzo6
UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9u
dEVudW0pOwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051
bWJlcigwKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5
QXR0cmlidXRlOjpEb250RW51bSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVycmlkZUJ1aWx0aW5zLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcnJpZGVC
dWlsdGlucy5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVycmlkZUJ1aWx0aW5zLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtODgsNyArODgsNyBAQCB0ZW1wbGF0ZTw+IEpTVmFsdWUgSlNUZXN0T3ZlcnJpZGVCdWls
dGluCiB0ZW1wbGF0ZTw+IHZvaWQgSlNUZXN0T3ZlcnJpZGVCdWlsdGluc0NvbnN0cnVjdG9yOjpp
bml0aWFsaXplUHJvcGVydGllcyhWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmpl
Y3QpCiB7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpT
VGVzdE92ZXJyaWRlQnVpbHRpbnM6OnByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KSwgSlNDOjpQ
cm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJl
YWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwotICAgIHB1dERpcmVj
dCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKCZ2bSwgU3Ry
aW5nKCJUZXN0T3ZlcnJpZGVCdWlsdGlucyJfcykpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpS
ZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKKyAgICBwdXREaXJl
Y3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZyh2bSwgU3Ry
aW5nKCJUZXN0T3ZlcnJpZGVCdWlsdGlucyJfcykpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpS
ZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKICAgICBwdXREaXJl
Y3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMCksIEpTQzo6UHJvcGVy
dHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0p
OwogfQogCkBAIC0xNjYsOSArMTY2LDEwIEBAIGJvb2wgSlNUZXN0T3ZlcnJpZGVCdWlsdGluczo6
Z2V0T3duUHJvcGUKIAogYm9vbCBKU1Rlc3RPdmVycmlkZUJ1aWx0aW5zOjpnZXRPd25Qcm9wZXJ0
eVNsb3RCeUluZGV4KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogc3RhdGUsIHVuc2lnbmVk
IGluZGV4LCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CisgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7
CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3RPdmVycmlkZUJ1aWx0aW5zKj4o
b2JqZWN0KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8o
KSk7Ci0gICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tKHN0YXRlLCBpbmRl
eCk7CisgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tKHZtLCBpbmRleCk7
CiAgICAgdXNpbmcgR2V0dGVySURMVHlwZSA9IElETEludGVyZmFjZTxOb2RlPjsKICAgICBhdXRv
IGdldHRlckZ1bmN0b3IgPSBbXSAoYXV0byYgdGhpc09iamVjdCwgYXV0byBwcm9wZXJ0eU5hbWUp
IC0+IE9wdGlvbmFsPHR5cGVuYW1lIEdldHRlcklETFR5cGU6OkltcGxlbWVudGF0aW9uVHlwZT4g
ewogICAgICAgICBhdXRvIHJlc3VsdCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpLm5hbWVkSXRlbShw
cm9wZXJ0eU5hbWVUb0F0b21TdHJpbmcocHJvcGVydHlOYW1lKSk7CkBAIC0xODYsMTAgKzE4Nywx
MSBAQCBib29sIEpTVGVzdE92ZXJyaWRlQnVpbHRpbnM6OmdldE93blByb3BlCiAKIHZvaWQgSlNU
ZXN0T3ZlcnJpZGVCdWlsdGluczo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0
LCBFeGVjU3RhdGUqIHN0YXRlLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51
bWVyYXRpb25Nb2RlIG1vZGUpCiB7CisgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0
byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3RPdmVycmlkZUJ1aWx0aW5zKj4ob2JqZWN0KTsK
ICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKG9iamVjdCwgaW5mbygpKTsKICAgICBmb3Ig
KGF1dG8mIHByb3BlcnR5TmFtZSA6IHRoaXNPYmplY3QtPndyYXBwZWQoKS5zdXBwb3J0ZWRQcm9w
ZXJ0eU5hbWVzKCkpCi0gICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb21T
dHJpbmcoc3RhdGUsIHByb3BlcnR5TmFtZSkpOworICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBwcm9wZXJ0eU5hbWUpKTsKICAgICBKU09iamVjdDo6
Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIHN0YXRlLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsK
IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dFBsdWdpbkludGVyZmFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFBsdWdpbkludGVyZmFjZS5jcHAJKHJldmlzaW9uIDI0
OTEyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RQ
bHVnaW5JbnRlcmZhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OSw3ICs3OSw3IEBAIHRlbXBs
YXRlPD4gSlNWYWx1ZSBKU1Rlc3RQbHVnaW5JbnRlcmZhY2UKIHRlbXBsYXRlPD4gdm9pZCBKU1Rl
c3RQbHVnaW5JbnRlcmZhY2VDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMoVk0mIHZt
LCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQogewogICAgIHB1dERpcmVjdCh2bSwg
dm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3RQbHVnaW5JbnRlcmZhY2U6OnByb3Rv
dHlwZSh2bSwgZ2xvYmFsT2JqZWN0KSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0
ZSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJp
YnV0ZTo6RG9udEVudW0pOwotICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFt
ZSwganNOb250cml2aWFsU3RyaW5nKCZ2bSwgU3RyaW5nKCJUZXN0UGx1Z2luSW50ZXJmYWNlIl9z
KSksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJp
YnV0ZTo6RG9udEVudW0pOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFt
ZSwganNOb250cml2aWFsU3RyaW5nKHZtLCBTdHJpbmcoIlRlc3RQbHVnaW5JbnRlcmZhY2UiX3Mp
KSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmli
dXRlOjpEb250RW51bSk7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5n
dGgsIGpzTnVtYmVyKDApLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6
UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKIH0KIApAQCAtMTQ2LDkgKzE0NiwxMCBAQCBi
b29sIEpTVGVzdFBsdWdpbkludGVyZmFjZTo6Z2V0T3duUHJvcGVyCiAKIGJvb2wgSlNUZXN0UGx1
Z2luSW50ZXJmYWNlOjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTT2JqZWN0KiBvYmplY3Qs
IEV4ZWNTdGF0ZSogc3RhdGUsIHVuc2lnbmVkIGluZGV4LCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7
CisgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2Fz
dDxKU1Rlc3RQbHVnaW5JbnRlcmZhY2UqPihvYmplY3QpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1Rf
SU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKLSAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElk
ZW50aWZpZXI6OmZyb20oc3RhdGUsIGluZGV4KTsKKyAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElk
ZW50aWZpZXI6OmZyb20odm0sIGluZGV4KTsKICAgICBpZiAocGx1Z2luRWxlbWVudEN1c3RvbUdl
dE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBzdGF0ZSwgcHJvcGVydHlOYW1lLCBzbG90KSkK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgcmV0dXJuIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0
eVNsb3RCeUluZGV4KG9iamVjdCwgc3RhdGUsIGluZGV4LCBzbG90KTsKQEAgLTE2OCwxMCArMTY5
LDExIEBAIGJvb2wgSlNUZXN0UGx1Z2luSW50ZXJmYWNlOjpwdXQoSlNDZWxsKiAKIAogYm9vbCBK
U1Rlc3RQbHVnaW5JbnRlcmZhY2U6OnB1dEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUq
IHN0YXRlLCB1bnNpZ25lZCBpbmRleCwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykK
IHsKKyAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganND
YXN0PEpTVGVzdFBsdWdpbkludGVyZmFjZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1Rf
SU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKIAotICAgIGF1dG8gcHJvcGVydHlOYW1lID0g
SWRlbnRpZmllcjo6ZnJvbShzdGF0ZSwgaW5kZXgpOworICAgIGF1dG8gcHJvcGVydHlOYW1lID0g
SWRlbnRpZmllcjo6ZnJvbSh2bSwgaW5kZXgpOwogICAgIFB1dFByb3BlcnR5U2xvdCBwdXRQcm9w
ZXJ0eVNsb3QodGhpc09iamVjdCwgc2hvdWxkVGhyb3cpOwogICAgIGJvb2wgcHV0UmVzdWx0ID0g
ZmFsc2U7CiAgICAgaWYgKHBsdWdpbkVsZW1lbnRDdXN0b21QdXQodGhpc09iamVjdCwgc3RhdGUs
IHByb3BlcnR5TmFtZSwgdmFsdWUsIHB1dFByb3BlcnR5U2xvdCwgcHV0UmVzdWx0KSkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RQcm9taXNlUmVq
ZWN0aW9uRXZlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnQuY3BwCShyZXZpc2lvbiAy
NDkxMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
UHJvbWlzZVJlamVjdGlvbkV2ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTksNyArNTksNyBA
QCB0ZW1wbGF0ZTw+IFRlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnQ6OkluCiAgICAgaWYgKGlzTnVs
bE9yVW5kZWZpbmVkKQogICAgICAgICBidWJibGVzVmFsdWUgPSBqc1VuZGVmaW5lZCgpOwogICAg
IGVsc2UgewotICAgICAgICBidWJibGVzVmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50
aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAiYnViYmxlcyIpKTsKKyAgICAgICAgYnViYmxlc1Zh
bHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiYnVi
YmxlcyIpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwog
ICAgIH0KICAgICBpZiAoIWJ1YmJsZXNWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7CkBAIC03MSw3ICs3
MSw3IEBAIHRlbXBsYXRlPD4gVGVzdFByb21pc2VSZWplY3Rpb25FdmVudDo6SW4KICAgICBpZiAo
aXNOdWxsT3JVbmRlZmluZWQpCiAgICAgICAgIGNhbmNlbGFibGVWYWx1ZSA9IGpzVW5kZWZpbmVk
KCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIGNhbmNlbGFibGVWYWx1ZSA9IG9iamVjdC0+Z2V0KCZz
dGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJjYW5jZWxhYmxlIikpOworICAg
ICAgICBjYW5jZWxhYmxlVmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZy
b21TdHJpbmcodm0sICJjYW5jZWxhYmxlIikpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHRocm93U2NvcGUsIHsgfSk7CiAgICAgfQogICAgIGlmICghY2FuY2VsYWJsZVZhbHVlLmlzVW5k
ZWZpbmVkKCkpIHsKQEAgLTgzLDcgKzgzLDcgQEAgdGVtcGxhdGU8PiBUZXN0UHJvbWlzZVJlamVj
dGlvbkV2ZW50OjpJbgogICAgIGlmIChpc051bGxPclVuZGVmaW5lZCkKICAgICAgICAgY29tcG9z
ZWRWYWx1ZSA9IGpzVW5kZWZpbmVkKCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIGNvbXBvc2VkVmFs
dWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAi
Y29tcG9zZWQiKSk7CisgICAgICAgIGNvbXBvc2VkVmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUs
IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJjb21wb3NlZCIpKTsKICAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0KICAgICBpZiAoIWNvbXBvc2Vk
VmFsdWUuaXNVbmRlZmluZWQoKSkgewpAQCAtOTUsNyArOTUsNyBAQCB0ZW1wbGF0ZTw+IFRlc3RQ
cm9taXNlUmVqZWN0aW9uRXZlbnQ6OkluCiAgICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKQogICAg
ICAgICBwcm9taXNlVmFsdWUgPSBqc1VuZGVmaW5lZCgpOwogICAgIGVsc2UgewotICAgICAgICBw
cm9taXNlVmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmco
JnN0YXRlLCAicHJvbWlzZSIpKTsKKyAgICAgICAgcHJvbWlzZVZhbHVlID0gb2JqZWN0LT5nZXQo
JnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAicHJvbWlzZSIpKTsKICAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0KICAgICBpZiAoIXBy
b21pc2VWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7CkBAIC0xMDksNyArMTA5LDcgQEAgdGVtcGxhdGU8
PiBUZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50OjpJbgogICAgIGlmIChpc051bGxPclVuZGVmaW5l
ZCkKICAgICAgICAgcmVhc29uVmFsdWUgPSBqc1VuZGVmaW5lZCgpOwogICAgIGVsc2UgewotICAg
ICAgICByZWFzb25WYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZygmc3RhdGUsICJyZWFzb24iKSk7CisgICAgICAgIHJlYXNvblZhbHVlID0gb2JqZWN0LT5n
ZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAicmVhc29uIikpOwogICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgfQogICAgIGlmICgh
cmVhc29uVmFsdWUuaXNVbmRlZmluZWQoKSkgewpAQCAtMTgwLDcgKzE4MCw3IEBAIHRlbXBsYXRl
PD4gSlNWYWx1ZSBKU1Rlc3RQcm9taXNlUmVqZWN0aW8KIHRlbXBsYXRlPD4gdm9pZCBKU1Rlc3RQ
cm9taXNlUmVqZWN0aW9uRXZlbnRDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMoVk0m
IHZtLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQogewogICAgIHB1dERpcmVjdCh2
bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3RQcm9taXNlUmVqZWN0aW9uRXZl
bnQ6OnByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6
RG9udERlbGV0ZSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9w
ZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwotICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlO
YW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKCZ2bSwgU3RyaW5nKCJUZXN0UHJvbWlzZVJl
amVjdGlvbkV2ZW50Il9zKSksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlND
OjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJv
cGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKHZtLCBTdHJpbmcoIlRlc3RQcm9t
aXNlUmVqZWN0aW9uRXZlbnQiX3MpKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkg
fCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CiAgICAgcHV0RGlyZWN0KHZtLCB2
bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDIpLCBKU0M6OlByb3BlcnR5QXR0cmli
dXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKIH0KIApJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlh
bGl6YXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRp
b24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjAsNyArMTIwLDcgQEAgdGVtcGxhdGU8PiBKU1Zh
bHVlIEpTVGVzdFNlcmlhbGl6YXRpb25DbwogdGVtcGxhdGU8PiB2b2lkIEpTVGVzdFNlcmlhbGl6
YXRpb25Db25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMoVk0mIHZtLCBKU0RPTUdsb2Jh
bE9iamVjdCYgZ2xvYmFsT2JqZWN0KQogewogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlO
YW1lcy0+cHJvdG90eXBlLCBKU1Rlc3RTZXJpYWxpemF0aW9uOjpwcm90b3R5cGUodm0sIGdsb2Jh
bE9iamVjdCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUgfCBKU0M6OlByb3Bl
cnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVt
KTsKLSAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlh
bFN0cmluZygmdm0sIFN0cmluZygiVGVzdFNlcmlhbGl6YXRpb24iX3MpKSwgSlNDOjpQcm9wZXJ0
eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7
CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxT
dHJpbmcodm0sIFN0cmluZygiVGVzdFNlcmlhbGl6YXRpb24iX3MpKSwgSlNDOjpQcm9wZXJ0eUF0
dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CiAg
ICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDApLCBK
U0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6
OkRvbnRFbnVtKTsKIH0KIApAQCAtMjM4LDYgKzIzOCw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVz
dFNlcmlhbGl6YXRpb25GaXJzdFMKIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFNlcmlh
bGl6YXRpb25GaXJzdFN0cmluZ0F0dHJpYnV0ZVNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rl
c3RTZXJpYWxpemF0aW9uJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKQogeworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAg
ICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KHN0YXRlLCB2YWx1ZSk7
CkBAIC0yNjksNiArMjcwLDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvblNl
Y29uZAogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvblNlY29uZExv
bmdBdHRyaWJ1dGVTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0U2VyaWFsaXphdGlvbiYg
dGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKKyAg
ICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAg
ICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1
ZSA9IGNvbnZlcnQ8SURMTG9uZz4oc3RhdGUsIHZhbHVlKTsKQEAgLTMwMCw2ICszMDIsNyBAQCBF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uVGhpcmRVCiAKIHN0YXRpYyBpbmxpbmUg
Ym9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uVGhpcmRVbnNlcmlhbGl6YWJsZUF0dHJpYnV0ZVNl
dHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RTZXJpYWxpemF0aW9uJiB0aGlzT2JqZWN0LCBK
U1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogeworICAgIFVOVVNFRF9QQVJB
TShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwg
PSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJ
RExJbnRlcmZhY2U8VGVzdEV4Y2VwdGlvbj4+KHN0YXRlLCB2YWx1ZSwgW10oSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXR0cmlidXRlVHlwZUVy
cm9yKHN0YXRlLCBzY29wZSwgIlRlc3RTZXJpYWxpemF0aW9uIiwgInRoaXJkVW5zZXJpYWxpemFi
bGVBdHRyaWJ1dGUiLCAiVGVzdEV4Y2VwdGlvbiIpOyB9KTsKQEAgLTMzMSw2ICszMzQsNyBAQCBF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uRm91cnRoCiAKIHN0YXRpYyBpbmxpbmUg
Ym9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uRm91cnRoVW5yZXN0cmljdGVkRG91YmxlQXR0cmli
dXRlU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdFNlcmlhbGl6YXRpb24mIHRoaXNPYmpl
Y3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CisgICAgVU5VU0VE
X1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYg
aW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252
ZXJ0PElETFVucmVzdHJpY3RlZERvdWJsZT4oc3RhdGUsIHZhbHVlKTsKQEAgLTM2Miw2ICszNjYs
NyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uRmlmdGhMCiAKIHN0YXRpYyBp
bmxpbmUgYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uRmlmdGhMb25nQXR0cmlidXRlU2V0dGVy
KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdFNlcmlhbGl6YXRpb24mIHRoaXNPYmplY3QsIEpTVmFs
dWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CisgICAgVU5VU0VEX1BBUkFNKHN0
YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRo
aXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETExv
bmc+KHN0YXRlLCB2YWx1ZSk7CkBAIC0zOTMsNiArMzk4LDcgQEAgRW5jb2RlZEpTVmFsdWUganNU
ZXN0U2VyaWFsaXphdGlvblNpeHRoVAogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0U2Vy
aWFsaXphdGlvblNpeHRoVHlwZWRlZkF0dHJpYnV0ZVNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBK
U1Rlc3RTZXJpYWxpemF0aW9uJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKQogeworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsK
ICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExEb3VibGU+KHN0YXRlLCB2YWx1ZSk7
CkBAIC00MjQsNiArNDMwLDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvblNl
dmVudAogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvblNldmVudGhE
aXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZVNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rl
c3RTZXJpYWxpemF0aW9uJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKQogeworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAg
ICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExJbnRlcmZhY2U8VGVzdFNlcmlhbGl6YXRp
b25Jbmhlcml0RmluYWw+PihzdGF0ZSwgdmFsdWUsIFtdKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0F0dHJpYnV0ZVR5cGVFcnJvcihzdGF0ZSwg
c2NvcGUsICJUZXN0U2VyaWFsaXphdGlvbiIsICJzZXZlbnRoRGlyZWN0bHlTZXJpYWxpemFibGVB
dHRyaWJ1dGUiLCAiVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwiKTsgfSk7CkBAIC00NTUs
NiArNDYyLDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvbkVpZ2h0aAogCiBz
dGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvbkVpZ2h0aEluZGlyZWN0bHlB
dHRyaWJ1dGVTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0U2VyaWFsaXphdGlvbiYgdGhp
c09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKKyAgICBV
TlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBh
dXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9
IGNvbnZlcnQ8SURMSW50ZXJmYWNlPFRlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5j
ZT4+KHN0YXRlLCB2YWx1ZSwgW10oSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2Nv
cGUmIHNjb3BlKSB7IHRocm93QXR0cmlidXRlVHlwZUVycm9yKHN0YXRlLCBzY29wZSwgIlRlc3RT
ZXJpYWxpemF0aW9uIiwgImVpZ2h0aEluZGlyZWN0bHlBdHRyaWJ1dGUiLCAiVGVzdFNlcmlhbGl6
YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlIik7IH0pOwpAQCAtNDg2LDYgKzQ5NCw3IEBAIEVuY29k
ZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25OaW50aE8KIAogc3RhdGljIGlubGluZSBib29s
IHNldEpTVGVzdFNlcmlhbGl6YXRpb25OaW50aE9wdGlvbmFsRGlyZWN0bHlTZXJpYWxpemFibGVB
dHRyaWJ1dGVTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0U2VyaWFsaXphdGlvbiYgdGhp
c09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKKyAgICBV
TlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBh
dXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9
IGNvbnZlcnQ8SURMTnVsbGFibGU8SURMSW50ZXJmYWNlPFRlc3RTZXJpYWxpemF0aW9uSW5oZXJp
dEZpbmFsPj4+KHN0YXRlLCB2YWx1ZSwgW10oSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRo
cm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXR0cmlidXRlVHlwZUVycm9yKHN0YXRlLCBzY29wZSwg
IlRlc3RTZXJpYWxpemF0aW9uIiwgIm5pbnRoT3B0aW9uYWxEaXJlY3RseVNlcmlhbGl6YWJsZUF0
dHJpYnV0ZSIsICJUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbCIpOyB9KTsKQEAgLTUxNyw2
ICs1MjYsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uVGVudGhGCiAKIHN0
YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uVGVudGhGcm96ZW5BcnJheUF0
dHJpYnV0ZVNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RTZXJpYWxpemF0aW9uJiB0aGlz
T2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogeworICAgIFVO
VVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1
dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0g
Y29udmVydDxJRExGcm96ZW5BcnJheTxJRExCb29sZWFuPj4oc3RhdGUsIHZhbHVlKTsKQEAgLTU0
OCw2ICs1NTgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uRWxldmVuCiAK
IHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uRWxldmVudGhTZXF1ZW5j
ZUF0dHJpYnV0ZVNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RTZXJpYWxpemF0aW9uJiB0
aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogeworICAg
IFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAg
IGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVl
ID0gY29udmVydDxJRExTZXF1ZW5jZTxJRExET01TdHJpbmc+PihzdGF0ZSwgdmFsdWUpOwpAQCAt
NTc5LDYgKzU5MCw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25Ud2VsZnQK
IAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25Ud2VsZnRoSW50ZXJm
YWNlU2VxdWVuY2VBdHRyaWJ1dGVTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0U2VyaWFs
aXphdGlvbiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29w
ZSkKIHsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBu
YXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMU2VxdWVuY2U8SURMSW50ZXJmYWNlPFRlc3RTZXJpYWxp
emF0aW9uSW5oZXJpdEZpbmFsPj4+KHN0YXRlLCB2YWx1ZSk7CkBAIC02MDEsNDkgKzYxMyw0OSBA
QCBKU0M6OkpTT2JqZWN0KiBKU1Rlc3RTZXJpYWxpemF0aW9uOjpzZXJpCiAKICAgICBhdXRvIGZp
cnN0U3RyaW5nQXR0cmlidXRlVmFsdWUgPSBqc1Rlc3RTZXJpYWxpemF0aW9uRmlyc3RTdHJpbmdB
dHRyaWJ1dGVHZXR0ZXIoc3RhdGUsIHRoaXNPYmplY3QsIHRocm93U2NvcGUpOwogICAgIHRocm93
U2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKLSAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJmaXJzdFN0cmluZ0F0dHJpYnV0ZSIpLCBmaXJzdFN0
cmluZ0F0dHJpYnV0ZVZhbHVlKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZyh2bSwgImZpcnN0U3RyaW5nQXR0cmlidXRlIiksIGZpcnN0U3RyaW5nQXR0
cmlidXRlVmFsdWUpOwogCiAgICAgYXV0byBzZWNvbmRMb25nQXR0cmlidXRlVmFsdWUgPSBqc1Rl
c3RTZXJpYWxpemF0aW9uU2Vjb25kTG9uZ0F0dHJpYnV0ZUdldHRlcihzdGF0ZSwgdGhpc09iamVj
dCwgdGhyb3dTY29wZSk7CiAgICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwotICAg
IHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgInNlY29u
ZExvbmdBdHRyaWJ1dGUiKSwgc2Vjb25kTG9uZ0F0dHJpYnV0ZVZhbHVlKTsKKyAgICByZXN1bHQt
PnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInNlY29uZExvbmdBdHRy
aWJ1dGUiKSwgc2Vjb25kTG9uZ0F0dHJpYnV0ZVZhbHVlKTsKIAogICAgIGF1dG8gZm91cnRoVW5y
ZXN0cmljdGVkRG91YmxlQXR0cmlidXRlVmFsdWUgPSBqc1Rlc3RTZXJpYWxpemF0aW9uRm91cnRo
VW5yZXN0cmljdGVkRG91YmxlQXR0cmlidXRlR2V0dGVyKHN0YXRlLCB0aGlzT2JqZWN0LCB0aHJv
d1Njb3BlKTsKICAgICB0aHJvd1Njb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7Ci0gICAgcmVzdWx0
LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiZm91cnRoVW5yZXN0
cmljdGVkRG91YmxlQXR0cmlidXRlIiksIGZvdXJ0aFVucmVzdHJpY3RlZERvdWJsZUF0dHJpYnV0
ZVZhbHVlKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zyh2bSwgImZvdXJ0aFVucmVzdHJpY3RlZERvdWJsZUF0dHJpYnV0ZSIpLCBmb3VydGhVbnJlc3Ry
aWN0ZWREb3VibGVBdHRyaWJ1dGVWYWx1ZSk7CiAKICAgICBhdXRvIGZpZnRoTG9uZ0F0dHJpYnV0
ZVZhbHVlID0ganNUZXN0U2VyaWFsaXphdGlvbkZpZnRoTG9uZ0F0dHJpYnV0ZUdldHRlcihzdGF0
ZSwgdGhpc09iamVjdCwgdGhyb3dTY29wZSk7CiAgICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2Vw
dGlvbigpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KCZ2bSwgImZpZnRoTG9uZ0F0dHJpYnV0ZSIpLCBmaWZ0aExvbmdBdHRyaWJ1dGVWYWx1ZSk7Cisg
ICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJmaWZ0
aExvbmdBdHRyaWJ1dGUiKSwgZmlmdGhMb25nQXR0cmlidXRlVmFsdWUpOwogCiAgICAgYXV0byBz
aXh0aFR5cGVkZWZBdHRyaWJ1dGVWYWx1ZSA9IGpzVGVzdFNlcmlhbGl6YXRpb25TaXh0aFR5cGVk
ZWZBdHRyaWJ1dGVHZXR0ZXIoc3RhdGUsIHRoaXNPYmplY3QsIHRocm93U2NvcGUpOwogICAgIHRo
cm93U2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKLSAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJzaXh0aFR5cGVkZWZBdHRyaWJ1dGUiKSwgc2l4
dGhUeXBlZGVmQXR0cmlidXRlVmFsdWUpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAic2l4dGhUeXBlZGVmQXR0cmlidXRlIiksIHNpeHRoVHlw
ZWRlZkF0dHJpYnV0ZVZhbHVlKTsKIAogICAgIGF1dG8gc2V2ZW50aERpcmVjdGx5U2VyaWFsaXph
YmxlQXR0cmlidXRlVmFsdWUgPSBqc1Rlc3RTZXJpYWxpemF0aW9uU2V2ZW50aERpcmVjdGx5U2Vy
aWFsaXphYmxlQXR0cmlidXRlR2V0dGVyKHN0YXRlLCB0aGlzT2JqZWN0LCB0aHJvd1Njb3BlKTsK
ICAgICB0aHJvd1Njb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7CiAgICAgYXV0byogc2V2ZW50aERp
cmVjdGx5U2VyaWFsaXphYmxlQXR0cmlidXRlU2VyaWFsaXplZFZhbHVlID0gSlNUZXN0U2VyaWFs
aXphdGlvbkluaGVyaXRGaW5hbDo6c2VyaWFsaXplKHN0YXRlLCAqanNDYXN0PEpTVGVzdFNlcmlh
bGl6YXRpb25Jbmhlcml0RmluYWwqPihzZXZlbnRoRGlyZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1
dGVWYWx1ZSksIGdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSk7Ci0gICAgcmVzdWx0LT5wdXREaXJl
Y3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAic2V2ZW50aERpcmVjdGx5U2VyaWFs
aXphYmxlQXR0cmlidXRlIiksIHNldmVudGhEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZVNl
cmlhbGl6ZWRWYWx1ZSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZy
b21TdHJpbmcodm0sICJzZXZlbnRoRGlyZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGUiKSwgc2V2
ZW50aERpcmVjdGx5U2VyaWFsaXphYmxlQXR0cmlidXRlU2VyaWFsaXplZFZhbHVlKTsKIAogICAg
IGF1dG8gZWlnaHRoSW5kaXJlY3RseUF0dHJpYnV0ZVZhbHVlID0ganNUZXN0U2VyaWFsaXphdGlv
bkVpZ2h0aEluZGlyZWN0bHlBdHRyaWJ1dGVHZXR0ZXIoc3RhdGUsIHRoaXNPYmplY3QsIHRocm93
U2NvcGUpOwogICAgIHRocm93U2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKICAgICBhdXRvKiBl
aWdodGhJbmRpcmVjdGx5QXR0cmlidXRlU2VyaWFsaXplZFZhbHVlID0gSlNUZXN0U2VyaWFsaXph
dGlvbkluZGlyZWN0SW5oZXJpdGFuY2U6OnNlcmlhbGl6ZShzdGF0ZSwgKmpzQ2FzdDxKU1Rlc3RT
ZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZSo+KGVpZ2h0aEluZGlyZWN0bHlBdHRyaWJ1
dGVWYWx1ZSksIGdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSk7Ci0gICAgcmVzdWx0LT5wdXREaXJl
Y3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiZWlnaHRoSW5kaXJlY3RseUF0dHJp
YnV0ZSIpLCBlaWdodGhJbmRpcmVjdGx5QXR0cmlidXRlU2VyaWFsaXplZFZhbHVlKTsKKyAgICBy
ZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImVpZ2h0aElu
ZGlyZWN0bHlBdHRyaWJ1dGUiKSwgZWlnaHRoSW5kaXJlY3RseUF0dHJpYnV0ZVNlcmlhbGl6ZWRW
YWx1ZSk7CiAKICAgICBhdXRvIG5pbnRoT3B0aW9uYWxEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJp
YnV0ZVZhbHVlID0ganNUZXN0U2VyaWFsaXphdGlvbk5pbnRoT3B0aW9uYWxEaXJlY3RseVNlcmlh
bGl6YWJsZUF0dHJpYnV0ZUdldHRlcihzdGF0ZSwgdGhpc09iamVjdCwgdGhyb3dTY29wZSk7CiAg
ICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwogICAgIGlmICghbmludGhPcHRpb25h
bERpcmVjdGx5U2VyaWFsaXphYmxlQXR0cmlidXRlVmFsdWUuaXNOdWxsKCkpIHsKICAgICAgICAg
YXV0byogbmludGhPcHRpb25hbERpcmVjdGx5U2VyaWFsaXphYmxlQXR0cmlidXRlU2VyaWFsaXpl
ZFZhbHVlID0gSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbDo6c2VyaWFsaXplKHN0YXRl
LCAqanNDYXN0PEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwqPihuaW50aE9wdGlvbmFs
RGlyZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGVWYWx1ZSksIGdsb2JhbE9iamVjdCwgdGhyb3dT
Y29wZSk7Ci0gICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKCZ2bSwgIm5pbnRoT3B0aW9uYWxEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZSIpLCBu
aW50aE9wdGlvbmFsRGlyZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGVTZXJpYWxpemVkVmFsdWUp
OworICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2
bSwgIm5pbnRoT3B0aW9uYWxEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZSIpLCBuaW50aE9w
dGlvbmFsRGlyZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGVTZXJpYWxpemVkVmFsdWUpOwogICAg
IH0gZWxzZQotICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZygmdm0sICJuaW50aE9wdGlvbmFsRGlyZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGUiKSwg
bmludGhPcHRpb25hbERpcmVjdGx5U2VyaWFsaXphYmxlQXR0cmlidXRlVmFsdWUpOworICAgICAg
ICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIm5pbnRo
T3B0aW9uYWxEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZSIpLCBuaW50aE9wdGlvbmFsRGly
ZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGVWYWx1ZSk7CiAKICAgICBhdXRvIHRlbnRoRnJvemVu
QXJyYXlBdHRyaWJ1dGVWYWx1ZSA9IGpzVGVzdFNlcmlhbGl6YXRpb25UZW50aEZyb3plbkFycmF5
QXR0cmlidXRlR2V0dGVyKHN0YXRlLCB0aGlzT2JqZWN0LCB0aHJvd1Njb3BlKTsKICAgICB0aHJv
d1Njb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7Ci0gICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAidGVudGhGcm96ZW5BcnJheUF0dHJpYnV0ZSIpLCB0
ZW50aEZyb3plbkFycmF5QXR0cmlidXRlVmFsdWUpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZt
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAidGVudGhGcm96ZW5BcnJheUF0dHJpYnV0ZSIp
LCB0ZW50aEZyb3plbkFycmF5QXR0cmlidXRlVmFsdWUpOwogCiAgICAgYXV0byBlbGV2ZW50aFNl
cXVlbmNlQXR0cmlidXRlVmFsdWUgPSBqc1Rlc3RTZXJpYWxpemF0aW9uRWxldmVudGhTZXF1ZW5j
ZUF0dHJpYnV0ZUdldHRlcihzdGF0ZSwgdGhpc09iamVjdCwgdGhyb3dTY29wZSk7CiAgICAgdGhy
b3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImVsZXZlbnRoU2VxdWVuY2VBdHRyaWJ1dGUiKSwg
ZWxldmVudGhTZXF1ZW5jZUF0dHJpYnV0ZVZhbHVlKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2
bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImVsZXZlbnRoU2VxdWVuY2VBdHRyaWJ1dGUi
KSwgZWxldmVudGhTZXF1ZW5jZUF0dHJpYnV0ZVZhbHVlKTsKIAogICAgIHJldHVybiByZXN1bHQ7
CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uSW5k
aXJlY3RJbmhlcml0YW5jZS5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhl
cml0YW5jZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc2LDcgKzc2LDcgQEAgdGVtcGxhdGU8PiBK
U1ZhbHVlIEpTVGVzdFNlcmlhbGl6YXRpb25JbgogdGVtcGxhdGU8PiB2b2lkIEpTVGVzdFNlcmlh
bGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0
aWVzKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKIHsKICAgICBwdXRE
aXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgSlNUZXN0U2VyaWFsaXphdGlv
bkluZGlyZWN0SW5oZXJpdGFuY2U6OnByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KSwgSlNDOjpQ
cm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJl
YWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwotICAgIHB1dERpcmVj
dCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKCZ2bSwgU3Ry
aW5nKCJUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2UiX3MpKSwgSlNDOjpQcm9w
ZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51
bSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZp
YWxTdHJpbmcodm0sIFN0cmluZygiVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNl
Il9zKSksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0
dHJpYnV0ZTo6RG9udEVudW0pOwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+
bGVuZ3RoLCBqc051bWJlcigwKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBK
U0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0LmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb25J
bmhlcml0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODYsNyArODYsNyBAQCB0ZW1wbGF0ZTw+IEpT
VmFsdWUgSlNUZXN0U2VyaWFsaXphdGlvbkluCiB0ZW1wbGF0ZTw+IHZvaWQgSlNUZXN0U2VyaWFs
aXphdGlvbkluaGVyaXRDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMoVk0mIHZtLCBK
U0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQogewogICAgIHB1dERpcmVjdCh2bSwgdm0u
cHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdDo6cHJv
dG90eXBlKHZtLCBnbG9iYWxPYmplY3QpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RGVs
ZXRlIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0
cmlidXRlOjpEb250RW51bSk7Ci0gICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5u
YW1lLCBqc05vbnRyaXZpYWxTdHJpbmcoJnZtLCBTdHJpbmcoIlRlc3RTZXJpYWxpemF0aW9uSW5o
ZXJpdCJfcykpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVy
dHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFt
ZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZyh2bSwgU3RyaW5nKCJUZXN0U2VyaWFsaXphdGlv
bkluaGVyaXQiX3MpKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlBy
b3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0
eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDApLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFk
T25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKIH0KIApAQCAtMTg3LDYg
KzE4Nyw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25JbmhlcmkKIAogc3Rh
dGljIGlubGluZSBib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0SW5oZXJpdExvbmdB
dHRyaWJ1dGVTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVy
aXQmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7
CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7
CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZl
VmFsdWUgPSBjb252ZXJ0PElETExvbmc+KHN0YXRlLCB2YWx1ZSk7CkBAIC0yMDksNyArMjEwLDcg
QEAgSlNDOjpKU09iamVjdCogSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaQogCiAgICAgYXV0byBp
bmhlcml0TG9uZ0F0dHJpYnV0ZVZhbHVlID0ganNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRJbmhl
cml0TG9uZ0F0dHJpYnV0ZUdldHRlcihzdGF0ZSwgdGhpc09iamVjdCwgdGhyb3dTY29wZSk7CiAg
ICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0
KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImluaGVyaXRMb25nQXR0cmlidXRlIiks
IGluaGVyaXRMb25nQXR0cmlidXRlVmFsdWUpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiaW5oZXJpdExvbmdBdHRyaWJ1dGUiKSwgaW5oZXJp
dExvbmdBdHRyaWJ1dGVWYWx1ZSk7CiAKICAgICByZXR1cm4gcmVzdWx0OwogfQpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb25J
bmhlcml0RmluYWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsLmNwcAkocmV2aXNp
b24gMjQ5MTI4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OCw3
ICs4OCw3IEBAIHRlbXBsYXRlPD4gSlNWYWx1ZSBKU1Rlc3RTZXJpYWxpemF0aW9uSW4KIHRlbXBs
YXRlPD4gdm9pZCBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsQ29uc3RydWN0b3I6Omlu
aXRpYWxpemVQcm9wZXJ0aWVzKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVj
dCkKIHsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgSlNU
ZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbDo6cHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3Qp
LCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgSlNDOjpQcm9wZXJ0eUF0dHJp
YnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7Ci0gICAg
cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmco
JnZtLCBTdHJpbmcoIlRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsIl9zKSksIEpTQzo6UHJv
cGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVu
dW0pOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2
aWFsU3RyaW5nKHZtLCBTdHJpbmcoIlRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsIl9zKSks
IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0
ZTo6RG9udEVudW0pOwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3Ro
LCBqc051bWJlcigwKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlBy
b3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CiB9CiAKQEAgLTE5MCw2ICsxOTAsNyBAQCBFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpCiAKIHN0YXRpYyBpbmxpbmUgYm9v
bCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsRmluYWxMb25nQXR0cmlidXRlRm9v
U2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwm
IHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Cisg
ICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAg
ICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFs
dWUgPSBjb252ZXJ0PElETExvbmc+KHN0YXRlLCB2YWx1ZSk7CkBAIC0yMjEsNiArMjIyLDcgQEAg
RW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvbkluaGVyaQogCiBzdGF0aWMgaW5saW5l
IGJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbEZpbmFsTG9uZ0F0dHJpYnV0
ZUJhclNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZp
bmFsJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQog
eworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2
ZVZhbHVlID0gY29udmVydDxJRExMb25nPihzdGF0ZSwgdmFsdWUpOwpAQCAtMjQzLDcgKzI0NSw3
IEBAIEpTQzo6SlNPYmplY3QqIEpTVGVzdFNlcmlhbGl6YXRpb25JbmhlcmkKIAogICAgIGF1dG8g
ZmluYWxMb25nQXR0cmlidXRlQmFyVmFsdWUgPSBqc1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZp
bmFsRmluYWxMb25nQXR0cmlidXRlQmFyR2V0dGVyKHN0YXRlLCB0aGlzT2JqZWN0LCB0aHJvd1Nj
b3BlKTsKICAgICB0aHJvd1Njb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7Ci0gICAgcmVzdWx0LT5w
dXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiZmluYWxMb25nQXR0cmli
dXRlQmFyIiksIGZpbmFsTG9uZ0F0dHJpYnV0ZUJhclZhbHVlKTsKKyAgICByZXN1bHQtPnB1dERp
cmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImZpbmFsTG9uZ0F0dHJpYnV0ZUJh
ciIpLCBmaW5hbExvbmdBdHRyaWJ1dGVCYXJWYWx1ZSk7CiAKICAgICByZXR1cm4gcmVzdWx0Owog
fQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZUludGVyZmFjZS5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIsNyArMTAyLDcgQEAgdGVtcGxhdGU8PiBKU1ZhbHVl
IEpTVGVzdFNlcmlhbGl6ZWRTY3JpcAogdGVtcGxhdGU8PiB2b2lkIEpTVGVzdFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZUludGVyZmFjZUNvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGllcyhWTSYg
dm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCiB7CiAgICAgcHV0RGlyZWN0KHZt
LCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZUludGVyZmFjZTo6cHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QpLCBKU0M6OlByb3BlcnR5QXR0
cmlidXRlOjpEb250RGVsZXRlIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBK
U0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7Ci0gICAgcHV0RGlyZWN0KHZtLCB2bS5w
cm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcoJnZtLCBTdHJpbmcoIlRlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UiX3MpKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0
ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CisgICAgcHV0
RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcodm0s
IFN0cmluZygiVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSJfcykpLCBKU0M6OlBy
b3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRF
bnVtKTsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1i
ZXIoMCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0
dHJpYnV0ZTo6RG9udEVudW0pOwogfQogCkBAIC0yMTQsNiArMjE0LDcgQEAgRW5jb2RlZEpTVmFs
dWUganNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbAogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNU
ZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlVmFsdWVTZXR0ZXIoRXhlY1N0YXRlJiBz
dGF0ZSwgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlJiB0aGlzT2JqZWN0LCBK
U1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogeworICAgIFVOVVNFRF9QQVJB
TShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwg
PSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJ
RExTZXJpYWxpemVkU2NyaXB0VmFsdWU8U2VyaWFsaXplZFNjcmlwdFZhbHVlPj4oc3RhdGUsIHZh
bHVlKTsKQEAgLTI2Miw2ICsyNjMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemVk
U2NyaXB0VmFsCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemVkU2NyaXB0
VmFsdWVJbnRlcmZhY2VDYWNoZWRWYWx1ZVNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUs
IFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qu
d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZTxTZXJpYWxpemVkU2NyaXB0VmFsdWU+PihzdGF0ZSwgdmFsdWUpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0YW5kYWxvbmVE
aWN0aW9uYXJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0U3RhbmRhbG9uZURpY3Rpb25hcnkuY3BwCShyZXZpc2lvbiAyNDkx
MjgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3Rh
bmRhbG9uZURpY3Rpb25hcnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1OCw3IEBAIHRl
bXBsYXRlPD4gRGljdGlvbmFyeUltcGxOYW1lIGNvbnZlcnREaWMKICAgICBpZiAoaXNOdWxsT3JV
bmRlZmluZWQpCiAgICAgICAgIGJvb2xNZW1iZXJWYWx1ZSA9IGpzVW5kZWZpbmVkKCk7CiAgICAg
ZWxzZSB7Ci0gICAgICAgIGJvb2xNZW1iZXJWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJib29sTWVtYmVyIikpOworICAgICAgICBib29s
TWVtYmVyVmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmco
dm0sICJib29sTWVtYmVyIikpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2Nv
cGUsIHsgfSk7CiAgICAgfQogICAgIGlmICghYm9vbE1lbWJlclZhbHVlLmlzVW5kZWZpbmVkKCkp
IHsKQEAgLTY5LDcgKzY5LDcgQEAgdGVtcGxhdGU8PiBEaWN0aW9uYXJ5SW1wbE5hbWUgY29udmVy
dERpYwogICAgIGlmIChpc051bGxPclVuZGVmaW5lZCkKICAgICAgICAgY2FsbGJhY2tNZW1iZXJW
YWx1ZSA9IGpzVW5kZWZpbmVkKCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIGNhbGxiYWNrTWVtYmVy
VmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRl
LCAiY2FsbGJhY2tNZW1iZXIiKSk7CisgICAgICAgIGNhbGxiYWNrTWVtYmVyVmFsdWUgPSBvYmpl
Y3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJjYWxsYmFja01lbWJl
ciIpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAg
IH0KICAgICBpZiAoIWNhbGxiYWNrTWVtYmVyVmFsdWUuaXNVbmRlZmluZWQoKSkgewpAQCAtODAs
NyArODAsNyBAQCB0ZW1wbGF0ZTw+IERpY3Rpb25hcnlJbXBsTmFtZSBjb252ZXJ0RGljCiAgICAg
aWYgKGlzTnVsbE9yVW5kZWZpbmVkKQogICAgICAgICBlbnVtTWVtYmVyVmFsdWUgPSBqc1VuZGVm
aW5lZCgpOwogICAgIGVsc2UgewotICAgICAgICBlbnVtTWVtYmVyVmFsdWUgPSBvYmplY3QtPmdl
dCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAiZW51bU1lbWJlciIpKTsK
KyAgICAgICAgZW51bU1lbWJlclZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKHZtLCAiZW51bU1lbWJlciIpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0KICAgICBpZiAoIWVudW1NZW1iZXJWYWx1ZS5p
c1VuZGVmaW5lZCgpKSB7CkBAIC05Miw3ICs5Miw3IEBAIHRlbXBsYXRlPD4gRGljdGlvbmFyeUlt
cGxOYW1lIGNvbnZlcnREaWMKICAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQpCiAgICAgICAgIHBh
cnRpYWxCb29sZWFuTWVtYmVyVmFsdWUgPSBqc1VuZGVmaW5lZCgpOwogICAgIGVsc2UgewotICAg
ICAgICBwYXJ0aWFsQm9vbGVhbk1lbWJlclZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgInBhcnRpYWxCb29sZWFuTWVtYmVyIikpOworICAg
ICAgICBwYXJ0aWFsQm9vbGVhbk1lbWJlclZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAicGFydGlhbEJvb2xlYW5NZW1iZXIiKSk7CiAgICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICB9CiAgICAgaWYgKCFw
YXJ0aWFsQm9vbGVhbk1lbWJlclZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKQEAgLTEwNSw3ICsxMDUs
NyBAQCB0ZW1wbGF0ZTw+IERpY3Rpb25hcnlJbXBsTmFtZSBjb252ZXJ0RGljCiAgICAgaWYgKGlz
TnVsbE9yVW5kZWZpbmVkKQogICAgICAgICBwYXJ0aWFsQm9vbGVhbk1lbWJlcldpdGhJZ25vcmVk
Q29uZGl0aW9uYWxWYWx1ZSA9IGpzVW5kZWZpbmVkKCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIHBh
cnRpYWxCb29sZWFuTWVtYmVyV2l0aElnbm9yZWRDb25kaXRpb25hbFZhbHVlID0gb2JqZWN0LT5n
ZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgInBhcnRpYWxCb29sZWFu
TWVtYmVyV2l0aElnbm9yZWRDb25kaXRpb25hbCIpKTsKKyAgICAgICAgcGFydGlhbEJvb2xlYW5N
ZW1iZXJXaXRoSWdub3JlZENvbmRpdGlvbmFsVmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJwYXJ0aWFsQm9vbGVhbk1lbWJlcldpdGhJZ25vcmVk
Q29uZGl0aW9uYWwiKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
eyB9KTsKICAgICB9CiAgICAgaWYgKCFwYXJ0aWFsQm9vbGVhbk1lbWJlcldpdGhJZ25vcmVkQ29u
ZGl0aW9uYWxWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7CkBAIC0xMTgsNyArMTE4LDcgQEAgdGVtcGxh
dGU8PiBEaWN0aW9uYXJ5SW1wbE5hbWUgY29udmVydERpYwogICAgIGlmIChpc051bGxPclVuZGVm
aW5lZCkKICAgICAgICAgcGFydGlhbENhbGxiYWNrTWVtYmVyVmFsdWUgPSBqc1VuZGVmaW5lZCgp
OwogICAgIGVsc2UgewotICAgICAgICBwYXJ0aWFsQ2FsbGJhY2tNZW1iZXJWYWx1ZSA9IG9iamVj
dC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJwYXJ0aWFsQ2Fs
bGJhY2tNZW1iZXIiKSk7CisgICAgICAgIHBhcnRpYWxDYWxsYmFja01lbWJlclZhbHVlID0gb2Jq
ZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAicGFydGlhbENhbGxi
YWNrTWVtYmVyIikpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsg
fSk7CiAgICAgfQogICAgIGlmICghcGFydGlhbENhbGxiYWNrTWVtYmVyVmFsdWUuaXNVbmRlZmlu
ZWQoKSkgewpAQCAtMTMxLDcgKzEzMSw3IEBAIHRlbXBsYXRlPD4gRGljdGlvbmFyeUltcGxOYW1l
IGNvbnZlcnREaWMKICAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQpCiAgICAgICAgIHBhcnRpYWxF
bnVtTWVtYmVyVmFsdWUgPSBqc1VuZGVmaW5lZCgpOwogICAgIGVsc2UgewotICAgICAgICBwYXJ0
aWFsRW51bU1lbWJlclZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKCZzdGF0ZSwgInBhcnRpYWxFbnVtTWVtYmVyIikpOworICAgICAgICBwYXJ0aWFsRW51
bU1lbWJlclZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KHZtLCAicGFydGlhbEVudW1NZW1iZXIiKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgeyB9KTsKICAgICB9CiAgICAgaWYgKCFwYXJ0aWFsRW51bU1lbWJlclZhbHVl
LmlzVW5kZWZpbmVkKCkpIHsKQEAgLTE0NCw3ICsxNDQsNyBAQCB0ZW1wbGF0ZTw+IERpY3Rpb25h
cnlJbXBsTmFtZSBjb252ZXJ0RGljCiAgICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKQogICAgICAg
ICBwYXJ0aWFsUmVxdWlyZWRMb25nTWVtYmVyVmFsdWUgPSBqc1VuZGVmaW5lZCgpOwogICAgIGVs
c2UgewotICAgICAgICBwYXJ0aWFsUmVxdWlyZWRMb25nTWVtYmVyVmFsdWUgPSBvYmplY3QtPmdl
dCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAicGFydGlhbFJlcXVpcmVk
TG9uZ01lbWJlciIpKTsKKyAgICAgICAgcGFydGlhbFJlcXVpcmVkTG9uZ01lbWJlclZhbHVlID0g
b2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAicGFydGlhbFJl
cXVpcmVkTG9uZ01lbWJlciIpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCB7IH0pOwogICAgIH0KICAgICBpZiAoIXBhcnRpYWxSZXF1aXJlZExvbmdNZW1iZXJWYWx1
ZS5pc1VuZGVmaW5lZCgpKSB7CkBAIC0xNjAsNyArMTYwLDcgQEAgdGVtcGxhdGU8PiBEaWN0aW9u
YXJ5SW1wbE5hbWUgY29udmVydERpYwogICAgIGlmIChpc051bGxPclVuZGVmaW5lZCkKICAgICAg
ICAgcGFydGlhbFN0cmluZ01lbWJlclZhbHVlID0ganNVbmRlZmluZWQoKTsKICAgICBlbHNlIHsK
LSAgICAgICAgcGFydGlhbFN0cmluZ01lbWJlclZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgInBhcnRpYWxTdHJpbmdNZW1iZXIiKSk7Cisg
ICAgICAgIHBhcnRpYWxTdHJpbmdNZW1iZXJWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInBhcnRpYWxTdHJpbmdNZW1iZXIiKSk7CiAgICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICB9CiAgICAgaWYgKCFw
YXJ0aWFsU3RyaW5nTWVtYmVyVmFsdWUuaXNVbmRlZmluZWQoKSkgewpAQCAtMTczLDcgKzE3Myw3
IEBAIHRlbXBsYXRlPD4gRGljdGlvbmFyeUltcGxOYW1lIGNvbnZlcnREaWMKICAgICBpZiAoaXNO
dWxsT3JVbmRlZmluZWQpCiAgICAgICAgIHBhcnRpYWxTdHJpbmdNZW1iZXJXaXRoRW5hYmxlZEJ5
U2V0dGluZ1ZhbHVlID0ganNVbmRlZmluZWQoKTsKICAgICBlbHNlIHsKLSAgICAgICAgcGFydGlh
bFN0cmluZ01lbWJlcldpdGhFbmFibGVkQnlTZXR0aW5nVmFsdWUgPSBvYmplY3QtPmdldCgmc3Rh
dGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAicGFydGlhbFN0cmluZ01lbWJlcldp
dGhFbmFibGVkQnlTZXR0aW5nIikpOworICAgICAgICBwYXJ0aWFsU3RyaW5nTWVtYmVyV2l0aEVu
YWJsZWRCeVNldHRpbmdWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyh2bSwgInBhcnRpYWxTdHJpbmdNZW1iZXJXaXRoRW5hYmxlZEJ5U2V0dGluZyIpKTsK
ICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0KICAg
ICBpZiAoIXBhcnRpYWxTdHJpbmdNZW1iZXJXaXRoRW5hYmxlZEJ5U2V0dGluZ1ZhbHVlLmlzVW5k
ZWZpbmVkKCkpIHsKQEAgLTE4Niw3ICsxODYsNyBAQCB0ZW1wbGF0ZTw+IERpY3Rpb25hcnlJbXBs
TmFtZSBjb252ZXJ0RGljCiAgICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKQogICAgICAgICBwYXJ0
aWFsVW5zaWduZWRMb25nTWVtYmVyV2l0aEltcGxlbWVudGVkQXNWYWx1ZSA9IGpzVW5kZWZpbmVk
KCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIHBhcnRpYWxVbnNpZ25lZExvbmdNZW1iZXJXaXRoSW1w
bGVtZW50ZWRBc1ZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKCZzdGF0ZSwgInBhcnRpYWxVbnNpZ25lZExvbmdNZW1iZXJXaXRoSW1wbGVtZW50ZWRBcyIp
KTsKKyAgICAgICAgcGFydGlhbFVuc2lnbmVkTG9uZ01lbWJlcldpdGhJbXBsZW1lbnRlZEFzVmFs
dWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJwYXJ0
aWFsVW5zaWduZWRMb25nTWVtYmVyV2l0aEltcGxlbWVudGVkQXMiKSk7CiAgICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICB9CiAgICAgaWYgKCFwYXJ0aWFs
VW5zaWduZWRMb25nTWVtYmVyV2l0aEltcGxlbWVudGVkQXNWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7
CkBAIC0xOTgsNyArMTk4LDcgQEAgdGVtcGxhdGU8PiBEaWN0aW9uYXJ5SW1wbE5hbWUgY29udmVy
dERpYwogICAgIGlmIChpc051bGxPclVuZGVmaW5lZCkKICAgICAgICAgc3RyaW5nTWVtYmVyVmFs
dWUgPSBqc1VuZGVmaW5lZCgpOwogICAgIGVsc2UgewotICAgICAgICBzdHJpbmdNZW1iZXJWYWx1
ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJz
dHJpbmdNZW1iZXIiKSk7CisgICAgICAgIHN0cmluZ01lbWJlclZhbHVlID0gb2JqZWN0LT5nZXQo
JnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAic3RyaW5nTWVtYmVyIikpOwogICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgfQogICAgIGlm
ICghc3RyaW5nTWVtYmVyVmFsdWUuaXNVbmRlZmluZWQoKSkgewpAQCAtMjE2LDY3ICsyMTYsNjcg
QEAgSlNDOjpKU09iamVjdCogY29udmVydERpY3Rpb25hcnlUb0pTKEpTQwogCiAgICAgaWYgKCFJ
RExCb29sZWFuOjppc051bGxWYWx1ZShkaWN0aW9uYXJ5LmJvb2xNZW1iZXIpKSB7CiAgICAgICAg
IGF1dG8gYm9vbE1lbWJlclZhbHVlID0gdG9KUzxJRExCb29sZWFuPihJRExCb29sZWFuOjpleHRy
YWN0VmFsdWVGcm9tTnVsbGFibGUoZGljdGlvbmFyeS5ib29sTWVtYmVyKSk7Ci0gICAgICAgIHJl
c3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiYm9v
bE1lbWJlciIpLCBib29sTWVtYmVyVmFsdWUpOworICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2
bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiYm9vbE1lbWJlciIpLCBib29sTWVt
YmVyVmFsdWUpOwogICAgIH0KICAgICBpZiAoIUlETENhbGxiYWNrRnVuY3Rpb248SlNWb2lkQ2Fs
bGJhY2s+Ojppc051bGxWYWx1ZShkaWN0aW9uYXJ5LmNhbGxiYWNrTWVtYmVyKSkgewogICAgICAg
ICBhdXRvIGNhbGxiYWNrTWVtYmVyVmFsdWUgPSB0b0pTPElETENhbGxiYWNrRnVuY3Rpb248SlNW
b2lkQ2FsbGJhY2s+PihzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBJRExDYWxsYmFja0Z1bmN0aW9uPEpT
Vm9pZENhbGxiYWNrPjo6ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKGRpY3Rpb25hcnkuY2FsbGJh
Y2tNZW1iZXIpKTsKLSAgICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmll
cjo6ZnJvbVN0cmluZygmdm0sICJjYWxsYmFja01lbWJlciIpLCBjYWxsYmFja01lbWJlclZhbHVl
KTsKKyAgICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0
cmluZyh2bSwgImNhbGxiYWNrTWVtYmVyIiksIGNhbGxiYWNrTWVtYmVyVmFsdWUpOwogICAgIH0K
ICAgICBpZiAoIUlETEVudW1lcmF0aW9uPFRlc3RTdGFuZGFsb25lRGljdGlvbmFyeTo6RW51bUlu
U3RhbmRhbG9uZURpY3Rpb25hcnlGaWxlPjo6aXNOdWxsVmFsdWUoZGljdGlvbmFyeS5lbnVtTWVt
YmVyKSkgewogICAgICAgICBhdXRvIGVudW1NZW1iZXJWYWx1ZSA9IHRvSlM8SURMRW51bWVyYXRp
b248VGVzdFN0YW5kYWxvbmVEaWN0aW9uYXJ5OjpFbnVtSW5TdGFuZGFsb25lRGljdGlvbmFyeUZp
bGU+PihzdGF0ZSwgSURMRW51bWVyYXRpb248VGVzdFN0YW5kYWxvbmVEaWN0aW9uYXJ5OjpFbnVt
SW5TdGFuZGFsb25lRGljdGlvbmFyeUZpbGU+OjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUoZGlj
dGlvbmFyeS5lbnVtTWVtYmVyKSk7Ci0gICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6
OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiZW51bU1lbWJlciIpLCBlbnVtTWVtYmVyVmFs
dWUpOworICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKHZtLCAiZW51bU1lbWJlciIpLCBlbnVtTWVtYmVyVmFsdWUpOwogICAgIH0KICNpZiBF
TkFCTEUoQ29uZGl0aW9uYWwxMykgfHwgRU5BQkxFKENvbmRpdGlvbmFsMTQpCiAgICAgaWYgKCFJ
RExCb29sZWFuOjppc051bGxWYWx1ZShkaWN0aW9uYXJ5LnBhcnRpYWxCb29sZWFuTWVtYmVyKSkg
ewogICAgICAgICBhdXRvIHBhcnRpYWxCb29sZWFuTWVtYmVyVmFsdWUgPSB0b0pTPElETEJvb2xl
YW4+KElETEJvb2xlYW46OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZShkaWN0aW9uYXJ5LnBhcnRp
YWxCb29sZWFuTWVtYmVyKSk7Ci0gICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6Oklk
ZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAicGFydGlhbEJvb2xlYW5NZW1iZXIiKSwgcGFydGlh
bEJvb2xlYW5NZW1iZXJWYWx1ZSk7CisgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6
OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJwYXJ0aWFsQm9vbGVhbk1lbWJlciIpLCBwYXJ0
aWFsQm9vbGVhbk1lbWJlclZhbHVlKTsKICAgICB9CiAjZW5kaWYKICNpZiBFTkFCTEUoQ29uZGl0
aW9uYWwxMykgfHwgRU5BQkxFKENvbmRpdGlvbmFsMTQpCiAgICAgaWYgKCFJRExCb29sZWFuOjpp
c051bGxWYWx1ZShkaWN0aW9uYXJ5LnBhcnRpYWxCb29sZWFuTWVtYmVyV2l0aElnbm9yZWRDb25k
aXRpb25hbCkpIHsKICAgICAgICAgYXV0byBwYXJ0aWFsQm9vbGVhbk1lbWJlcldpdGhJZ25vcmVk
Q29uZGl0aW9uYWxWYWx1ZSA9IHRvSlM8SURMQm9vbGVhbj4oSURMQm9vbGVhbjo6ZXh0cmFjdFZh
bHVlRnJvbU51bGxhYmxlKGRpY3Rpb25hcnkucGFydGlhbEJvb2xlYW5NZW1iZXJXaXRoSWdub3Jl
ZENvbmRpdGlvbmFsKSk7Ci0gICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50
aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAicGFydGlhbEJvb2xlYW5NZW1iZXJXaXRoSWdub3JlZENv
bmRpdGlvbmFsIiksIHBhcnRpYWxCb29sZWFuTWVtYmVyV2l0aElnbm9yZWRDb25kaXRpb25hbFZh
bHVlKTsKKyAgICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJv
bVN0cmluZyh2bSwgInBhcnRpYWxCb29sZWFuTWVtYmVyV2l0aElnbm9yZWRDb25kaXRpb25hbCIp
LCBwYXJ0aWFsQm9vbGVhbk1lbWJlcldpdGhJZ25vcmVkQ29uZGl0aW9uYWxWYWx1ZSk7CiAgICAg
fQogI2VuZGlmCiAjaWYgRU5BQkxFKENvbmRpdGlvbmFsMTMpIHx8IEVOQUJMRShDb25kaXRpb25h
bDE0KQogICAgIGlmICghSURMQ2FsbGJhY2tGdW5jdGlvbjxKU1ZvaWRDYWxsYmFjaz46OmlzTnVs
bFZhbHVlKGRpY3Rpb25hcnkucGFydGlhbENhbGxiYWNrTWVtYmVyKSkgewogICAgICAgICBhdXRv
IHBhcnRpYWxDYWxsYmFja01lbWJlclZhbHVlID0gdG9KUzxJRExDYWxsYmFja0Z1bmN0aW9uPEpT
Vm9pZENhbGxiYWNrPj4oc3RhdGUsIGdsb2JhbE9iamVjdCwgSURMQ2FsbGJhY2tGdW5jdGlvbjxK
U1ZvaWRDYWxsYmFjaz46OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZShkaWN0aW9uYXJ5LnBhcnRp
YWxDYWxsYmFja01lbWJlcikpOwotICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgInBhcnRpYWxDYWxsYmFja01lbWJlciIpLCBwYXJ0
aWFsQ2FsbGJhY2tNZW1iZXJWYWx1ZSk7CisgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBK
U0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJwYXJ0aWFsQ2FsbGJhY2tNZW1iZXIiKSwg
cGFydGlhbENhbGxiYWNrTWVtYmVyVmFsdWUpOwogICAgIH0KICNlbmRpZgogI2lmIEVOQUJMRShD
b25kaXRpb25hbDEzKSB8fCBFTkFCTEUoQ29uZGl0aW9uYWwxNCkKICAgICBpZiAoIUlETEVudW1l
cmF0aW9uPFRlc3RTdGFuZGFsb25lRGljdGlvbmFyeTo6RW51bUluU3RhbmRhbG9uZURpY3Rpb25h
cnlGaWxlPjo6aXNOdWxsVmFsdWUoZGljdGlvbmFyeS5wYXJ0aWFsRW51bU1lbWJlcikpIHsKICAg
ICAgICAgYXV0byBwYXJ0aWFsRW51bU1lbWJlclZhbHVlID0gdG9KUzxJRExFbnVtZXJhdGlvbjxU
ZXN0U3RhbmRhbG9uZURpY3Rpb25hcnk6OkVudW1JblN0YW5kYWxvbmVEaWN0aW9uYXJ5RmlsZT4+
KHN0YXRlLCBJRExFbnVtZXJhdGlvbjxUZXN0U3RhbmRhbG9uZURpY3Rpb25hcnk6OkVudW1JblN0
YW5kYWxvbmVEaWN0aW9uYXJ5RmlsZT46OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZShkaWN0aW9u
YXJ5LnBhcnRpYWxFbnVtTWVtYmVyKSk7Ci0gICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBK
U0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAicGFydGlhbEVudW1NZW1iZXIiKSwgcGFy
dGlhbEVudW1NZW1iZXJWYWx1ZSk7CisgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6
OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJwYXJ0aWFsRW51bU1lbWJlciIpLCBwYXJ0aWFs
RW51bU1lbWJlclZhbHVlKTsKICAgICB9CiAjZW5kaWYKICNpZiBFTkFCTEUoQ29uZGl0aW9uYWwx
MykgfHwgRU5BQkxFKENvbmRpdGlvbmFsMTQpCiAgICAgYXV0byBwYXJ0aWFsUmVxdWlyZWRMb25n
TWVtYmVyVmFsdWUgPSB0b0pTPElETExvbmc+KGRpY3Rpb25hcnkucGFydGlhbFJlcXVpcmVkTG9u
Z01lbWJlcik7Ci0gICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJv
bVN0cmluZygmdm0sICJwYXJ0aWFsUmVxdWlyZWRMb25nTWVtYmVyIiksIHBhcnRpYWxSZXF1aXJl
ZExvbmdNZW1iZXJWYWx1ZSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRp
Zmllcjo6ZnJvbVN0cmluZyh2bSwgInBhcnRpYWxSZXF1aXJlZExvbmdNZW1iZXIiKSwgcGFydGlh
bFJlcXVpcmVkTG9uZ01lbWJlclZhbHVlKTsKICNlbmRpZgogI2lmIEVOQUJMRShDb25kaXRpb25h
bDEzKSB8fCBFTkFCTEUoQ29uZGl0aW9uYWwxNCkKICAgICBpZiAoIUlETERPTVN0cmluZzo6aXNO
dWxsVmFsdWUoZGljdGlvbmFyeS5wYXJ0aWFsU3RyaW5nTWVtYmVyKSkgewogICAgICAgICBhdXRv
IHBhcnRpYWxTdHJpbmdNZW1iZXJWYWx1ZSA9IHRvSlM8SURMRE9NU3RyaW5nPihzdGF0ZSwgSURM
RE9NU3RyaW5nOjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUoZGljdGlvbmFyeS5wYXJ0aWFsU3Ry
aW5nTWVtYmVyKSk7Ci0gICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZp
ZXI6OmZyb21TdHJpbmcoJnZtLCAicGFydGlhbFN0cmluZ01lbWJlciIpLCBwYXJ0aWFsU3RyaW5n
TWVtYmVyVmFsdWUpOworICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKHZtLCAicGFydGlhbFN0cmluZ01lbWJlciIpLCBwYXJ0aWFsU3RyaW5n
TWVtYmVyVmFsdWUpOwogICAgIH0KICNlbmRpZgogI2lmIEVOQUJMRShDb25kaXRpb25hbDEzKSB8
fCBFTkFCTEUoQ29uZGl0aW9uYWwxNCkKICAgICBpZiAoZG93bmNhc3Q8RG9jdW1lbnQ+KGpzQ2Fz
dDxKU0RPTUdsb2JhbE9iamVjdCo+KCZnbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250
ZXh0KCkpLT5zZXR0aW5ncygpLnRlc3RTZXR0aW5nRW5hYmxlZCgpKSB7CiAgICAgICAgIGlmICgh
SURMRE9NU3RyaW5nOjppc051bGxWYWx1ZShkaWN0aW9uYXJ5LnBhcnRpYWxTdHJpbmdNZW1iZXJX
aXRoRW5hYmxlZEJ5U2V0dGluZykpIHsKICAgICAgICAgICAgIGF1dG8gcGFydGlhbFN0cmluZ01l
bWJlcldpdGhFbmFibGVkQnlTZXR0aW5nVmFsdWUgPSB0b0pTPElETERPTVN0cmluZz4oc3RhdGUs
IElETERPTVN0cmluZzo6ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKGRpY3Rpb25hcnkucGFydGlh
bFN0cmluZ01lbWJlcldpdGhFbmFibGVkQnlTZXR0aW5nKSk7Ci0gICAgICAgICAgICByZXN1bHQt
PnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgInBhcnRpYWxT
dHJpbmdNZW1iZXJXaXRoRW5hYmxlZEJ5U2V0dGluZyIpLCBwYXJ0aWFsU3RyaW5nTWVtYmVyV2l0
aEVuYWJsZWRCeVNldHRpbmdWYWx1ZSk7CisgICAgICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2
bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAicGFydGlhbFN0cmluZ01lbWJlcldp
dGhFbmFibGVkQnlTZXR0aW5nIiksIHBhcnRpYWxTdHJpbmdNZW1iZXJXaXRoRW5hYmxlZEJ5U2V0
dGluZ1ZhbHVlKTsKICAgICAgICAgfQogICAgIH0KICNlbmRpZgogI2lmIEVOQUJMRShDb25kaXRp
b25hbDEzKSB8fCBFTkFCTEUoQ29uZGl0aW9uYWwxNCkKICAgICBpZiAoIUlETFVuc2lnbmVkTG9u
Zzo6aXNOdWxsVmFsdWUoZGljdGlvbmFyeS5wYXJ0aWFsVW5zaWduZWRMb25nTWVtYmVyKSkgewog
ICAgICAgICBhdXRvIHBhcnRpYWxVbnNpZ25lZExvbmdNZW1iZXJXaXRoSW1wbGVtZW50ZWRBc1Zh
bHVlID0gdG9KUzxJRExVbnNpZ25lZExvbmc+KElETFVuc2lnbmVkTG9uZzo6ZXh0cmFjdFZhbHVl
RnJvbU51bGxhYmxlKGRpY3Rpb25hcnkucGFydGlhbFVuc2lnbmVkTG9uZ01lbWJlcikpOwotICAg
ICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2
bSwgInBhcnRpYWxVbnNpZ25lZExvbmdNZW1iZXJXaXRoSW1wbGVtZW50ZWRBcyIpLCBwYXJ0aWFs
VW5zaWduZWRMb25nTWVtYmVyV2l0aEltcGxlbWVudGVkQXNWYWx1ZSk7CisgICAgICAgIHJlc3Vs
dC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJwYXJ0aWFs
VW5zaWduZWRMb25nTWVtYmVyV2l0aEltcGxlbWVudGVkQXMiKSwgcGFydGlhbFVuc2lnbmVkTG9u
Z01lbWJlcldpdGhJbXBsZW1lbnRlZEFzVmFsdWUpOwogICAgIH0KICNlbmRpZgogICAgIGlmICgh
SURMRE9NU3RyaW5nOjppc051bGxWYWx1ZShkaWN0aW9uYXJ5LnN0cmluZ01lbWJlcikpIHsKICAg
ICAgICAgYXV0byBzdHJpbmdNZW1iZXJWYWx1ZSA9IHRvSlM8SURMRE9NU3RyaW5nPihzdGF0ZSwg
SURMRE9NU3RyaW5nOjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUoZGljdGlvbmFyeS5zdHJpbmdN
ZW1iZXIpKTsKLSAgICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6
ZnJvbVN0cmluZygmdm0sICJzdHJpbmdNZW1iZXIiKSwgc3RyaW5nTWVtYmVyVmFsdWUpOworICAg
ICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZt
LCAic3RyaW5nTWVtYmVyIiksIHN0cmluZ01lbWJlclZhbHVlKTsKICAgICB9CiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RTdHJpbmdpZmllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyLmNwcAkocmV2aXNpb24gMjQ5
MTI4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0
cmluZ2lmaWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODQsNyArODQsNyBAQCB0ZW1wbGF0ZTw+
IEpTVmFsdWUgSlNUZXN0U3RyaW5naWZpZXJDb25zCiB0ZW1wbGF0ZTw+IHZvaWQgSlNUZXN0U3Ry
aW5naWZpZXJDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMoVk0mIHZtLCBKU0RPTUds
b2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQogewogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVy
dHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3RTdHJpbmdpZmllcjo6cHJvdG90eXBlKHZtLCBnbG9i
YWxPYmplY3QpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgSlNDOjpQcm9w
ZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51
bSk7Ci0gICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZp
YWxTdHJpbmcoJnZtLCBTdHJpbmcoIlRlc3RTdHJpbmdpZmllciJfcykpLCBKU0M6OlByb3BlcnR5
QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsK
KyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0
cmluZyh2bSwgU3RyaW5nKCJUZXN0U3RyaW5naWZpZXIiX3MpKSwgSlNDOjpQcm9wZXJ0eUF0dHJp
YnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CiAgICAg
cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDApLCBKU0M6
OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRv
bnRFbnVtKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdFN0cmluZ2lmaWVyQW5vbnltb3VzT3BlcmF0aW9uLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZp
ZXJBbm9ueW1vdXNPcGVyYXRpb24uY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJBbm9ueW1vdXNP
cGVyYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NCw3ICs4NCw3IEBAIHRlbXBsYXRlPD4g
SlNWYWx1ZSBKU1Rlc3RTdHJpbmdpZmllckFub24KIHRlbXBsYXRlPD4gdm9pZCBKU1Rlc3RTdHJp
bmdpZmllckFub255bW91c09wZXJhdGlvbkNvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGll
cyhWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCiB7CiAgICAgcHV0RGly
ZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdFN0cmluZ2lmaWVyQW5v
bnltb3VzT3BlcmF0aW9uOjpwcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCksIEpTQzo6UHJvcGVy
dHlBdHRyaWJ1dGU6OkRvbnREZWxldGUgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25s
eSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKLSAgICBwdXREaXJlY3Qodm0s
IHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZygmdm0sIFN0cmluZygi
VGVzdFN0cmluZ2lmaWVyQW5vbnltb3VzT3BlcmF0aW9uIl9zKSksIEpTQzo6UHJvcGVydHlBdHRy
aWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOworICAg
IHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5n
KHZtLCBTdHJpbmcoIlRlc3RTdHJpbmdpZmllckFub255bW91c09wZXJhdGlvbiJfcykpLCBKU0M6
OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRv
bnRFbnVtKTsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNO
dW1iZXIoMCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0
eUF0dHJpYnV0ZTo6RG9udEVudW0pOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRpb24uY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJOYW1l
ZE9wZXJhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1LDcgKzg1LDcgQEAgdGVtcGxhdGU8
PiBKU1ZhbHVlIEpTVGVzdFN0cmluZ2lmaWVyTmFtZQogdGVtcGxhdGU8PiB2b2lkIEpTVGVzdFN0
cmluZ2lmaWVyTmFtZWRPcGVyYXRpb25Db25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMo
Vk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQogewogICAgIHB1dERpcmVj
dCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3RTdHJpbmdpZmllck5hbWVk
T3BlcmF0aW9uOjpwcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCksIEpTQzo6UHJvcGVydHlBdHRy
aWJ1dGU6OkRvbnREZWxldGUgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpT
Qzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKLSAgICBwdXREaXJlY3Qodm0sIHZtLnBy
b3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZygmdm0sIFN0cmluZygiVGVzdFN0
cmluZ2lmaWVyTmFtZWRPcGVyYXRpb24iX3MpKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVh
ZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CisgICAgcHV0RGlyZWN0
KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcodm0sIFN0cmlu
ZygiVGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRpb24iX3MpKSwgSlNDOjpQcm9wZXJ0eUF0dHJp
YnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CiAgICAg
cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDApLCBKU0M6
OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRv
bnRFbnVtKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uSW1wbGVtZW50ZWRBcy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmlu
Z2lmaWVyT3BlcmF0aW9uSW1wbGVtZW50ZWRBcy5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllck9w
ZXJhdGlvbkltcGxlbWVudGVkQXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NSw3ICs4NSw3IEBA
IHRlbXBsYXRlPD4gSlNWYWx1ZSBKU1Rlc3RTdHJpbmdpZmllck9wZXIKIHRlbXBsYXRlPD4gdm9p
ZCBKU1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbkltcGxlbWVudGVkQXNDb25zdHJ1Y3Rvcjo6aW5p
dGlhbGl6ZVByb3BlcnRpZXMoVk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0
KQogewogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rl
c3RTdHJpbmdpZmllck9wZXJhdGlvbkltcGxlbWVudGVkQXM6OnByb3RvdHlwZSh2bSwgZ2xvYmFs
T2JqZWN0KSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IEpTQzo6UHJvcGVy
dHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0p
OwotICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFs
U3RyaW5nKCZ2bSwgU3RyaW5nKCJUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25JbXBsZW1lbnRlZEFz
Il9zKSksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0
dHJpYnV0ZTo6RG9udEVudW0pOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+
bmFtZSwganNOb250cml2aWFsU3RyaW5nKHZtLCBTdHJpbmcoIlRlc3RTdHJpbmdpZmllck9wZXJh
dGlvbkltcGxlbWVudGVkQXMiX3MpKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkg
fCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CiAgICAgcHV0RGlyZWN0KHZtLCB2
bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDApLCBKU0M6OlByb3BlcnR5QXR0cmli
dXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKIH0KIApJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmlu
Z2lmaWVyT3BlcmF0aW9uTmFtZWRUb1N0cmluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9u
TmFtZWRUb1N0cmluZy5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9T
dHJpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NCw3ICs4NCw3IEBAIHRlbXBsYXRlPD4gSlNW
YWx1ZSBKU1Rlc3RTdHJpbmdpZmllck9wZXIKIHRlbXBsYXRlPD4gdm9pZCBKU1Rlc3RTdHJpbmdp
Zmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmdDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRp
ZXMoVk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQogewogICAgIHB1dERp
cmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3RTdHJpbmdpZmllck9w
ZXJhdGlvbk5hbWVkVG9TdHJpbmc6OnByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KSwgSlNDOjpQ
cm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJl
YWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwotICAgIHB1dERpcmVj
dCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKCZ2bSwgU3Ry
aW5nKCJUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25OYW1lZFRvU3RyaW5nIl9zKSksIEpTQzo6UHJv
cGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVu
dW0pOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2
aWFsU3RyaW5nKHZtLCBTdHJpbmcoIlRlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJp
bmciX3MpKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5
QXR0cmlidXRlOjpEb250RW51bSk7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVz
LT5sZW5ndGgsIGpzTnVtYmVyKDApLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8
IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKIH0KIApJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlB
dHRyaWJ1dGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllclJlYWRPbmx5QXR0cmlidXRlLmNwcAkocmV2aXNp
b24gMjQ5MTI4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04
Niw3ICs4Niw3IEBAIHRlbXBsYXRlPD4gSlNWYWx1ZSBKU1Rlc3RTdHJpbmdpZmllclJlYWQKIHRl
bXBsYXRlPD4gdm9pZCBKU1Rlc3RTdHJpbmdpZmllclJlYWRPbmx5QXR0cmlidXRlQ29uc3RydWN0
b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2Jh
bE9iamVjdCkKIHsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlw
ZSwgSlNUZXN0U3RyaW5naWZpZXJSZWFkT25seUF0dHJpYnV0ZTo6cHJvdG90eXBlKHZtLCBnbG9i
YWxPYmplY3QpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgSlNDOjpQcm9w
ZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51
bSk7Ci0gICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZp
YWxTdHJpbmcoJnZtLCBTdHJpbmcoIlRlc3RTdHJpbmdpZmllclJlYWRPbmx5QXR0cmlidXRlIl9z
KSksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJp
YnV0ZTo6RG9udEVudW0pOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFt
ZSwganNOb250cml2aWFsU3RyaW5nKHZtLCBTdHJpbmcoIlRlc3RTdHJpbmdpZmllclJlYWRPbmx5
QXR0cmlidXRlIl9zKSksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQ
cm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVy
dHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigwKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVh
ZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CiB9CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllclJl
YWRXcml0ZUF0dHJpYnV0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmlidXRlLmNw
cAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmlidXRlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtODcsNyArODcsNyBAQCB0ZW1wbGF0ZTw+IEpTVmFsdWUgSlNUZXN0U3RyaW5naWZp
ZXJSZWFkCiB0ZW1wbGF0ZTw+IHZvaWQgSlNUZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1
dGVDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMoVk0mIHZtLCBKU0RPTUdsb2JhbE9i
amVjdCYgZ2xvYmFsT2JqZWN0KQogewogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1l
cy0+cHJvdG90eXBlLCBKU1Rlc3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJpYnV0ZTo6cHJvdG90
eXBlKHZtLCBnbG9iYWxPYmplY3QpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRl
IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmli
dXRlOjpEb250RW51bSk7Ci0gICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1l
LCBqc05vbnRyaXZpYWxTdHJpbmcoJnZtLCBTdHJpbmcoIlRlc3RTdHJpbmdpZmllclJlYWRXcml0
ZUF0dHJpYnV0ZSJfcykpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6
UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3Bl
cnR5TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZyh2bSwgU3RyaW5nKCJUZXN0U3RyaW5n
aWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGUiX3MpKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVh
ZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CiAgICAgcHV0RGlyZWN0
KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDApLCBKU0M6OlByb3BlcnR5
QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsK
IH0KIApAQCAtMTk0LDYgKzE5NCw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdFN0cmluZ2lmaWVy
UmVhZFdyaXQKIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFN0cmluZ2lmaWVyUmVhZFdy
aXRlQXR0cmlidXRlSWRlbnRpZmllclNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RTdHJp
bmdpZmllclJlYWRXcml0ZUF0dHJpYnV0ZSYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhy
b3dTY29wZSYgdGhyb3dTY29wZSkKIHsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFw
cGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPihzdGF0
ZSwgdmFsdWUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdFR5cGVkZWZzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VHlwZWRlZnMuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VHlwZWRlZnMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzAsNyArMTcwLDcgQEAgdGVtcGxhdGU8PiBKU1ZhbHVl
IEpTVGVzdFR5cGVkZWZzQ29uc3RydQogdGVtcGxhdGU8PiB2b2lkIEpTVGVzdFR5cGVkZWZzQ29u
c3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3Qm
IGdsb2JhbE9iamVjdCkKIHsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnBy
b3RvdHlwZSwgSlNUZXN0VHlwZWRlZnM6OnByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KSwgSlND
OjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6
OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwotICAgIHB1dERp
cmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKCZ2bSwg
U3RyaW5nKCJUZXN0VHlwZWRlZnMiX3MpKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9u
bHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CisgICAgcHV0RGlyZWN0KHZt
LCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcodm0sIFN0cmluZygi
VGVzdFR5cGVkZWZzIl9zKSksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlND
OjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJv
cGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigzKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6
UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CiAgICAgcmVpZnlT
dGF0aWNQcm9wZXJ0aWVzKHZtLCBKU1Rlc3RUeXBlZGVmczo6aW5mbygpLCBKU1Rlc3RUeXBlZGVm
c0NvbnN0cnVjdG9yVGFibGVWYWx1ZXMsICp0aGlzKTsKIH0KQEAgLTI5Nyw2ICsyOTcsNyBAQCBF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1Vuc2lnbmVkTG9uCiAKIHN0YXRpYyBpbmxpbmUg
Ym9vbCBzZXRKU1Rlc3RUeXBlZGVmc1Vuc2lnbmVkTG9uZ0xvbmdBdHRyU2V0dGVyKEV4ZWNTdGF0
ZSYgc3RhdGUsIEpTVGVzdFR5cGVkZWZzJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlKQogeworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5V
U0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBw
ZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExVbnNpZ25lZExvbmdMb25n
PihzdGF0ZSwgdmFsdWUpOwpAQCAtMzI4LDYgKzMyOSw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVz
dFR5cGVkZWZzU2VyaWFsaXplZFMKIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFR5cGVk
ZWZzU2VyaWFsaXplZFNjcmlwdFZhbHVlU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdFR5
cGVkZWZzJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KQogeworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5h
dGl2ZVZhbHVlID0gY29udmVydDxJRExTZXJpYWxpemVkU2NyaXB0VmFsdWU8U2VyaWFsaXplZFNj
cmlwdFZhbHVlPj4oc3RhdGUsIHZhbHVlKTsKQEAgLTM3MSw2ICszNzMsNyBAQCBFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RUeXBlZGVmc0F0dHJpYnV0ZVdpCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRK
U1Rlc3RUeXBlZGVmc0F0dHJpYnV0ZVdpdGhDbGFtcFNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBK
U1Rlc3RUeXBlZGVmcyYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSkKIHsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAg
YXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMQ2xhbXBBZGFwdG9yPElETFVuc2lnbmVkTG9u
Z0xvbmc+PihzdGF0ZSwgdmFsdWUpOwpAQCAtNDAyLDYgKzQwNSw3IEBAIEVuY29kZWRKU1ZhbHVl
IGpzVGVzdFR5cGVkZWZzQXR0cmlidXRlV2kKIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVz
dFR5cGVkZWZzQXR0cmlidXRlV2l0aENsYW1wSW5UeXBlZGVmU2V0dGVyKEV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTVGVzdFR5cGVkZWZzJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKQogeworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsK
ICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExDbGFtcEFkYXB0b3I8SURMTG9uZz4+
KHN0YXRlLCB2YWx1ZSk7CkBAIC00MzMsNiArNDM3LDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0
VHlwZWRlZnNCdWZmZXJTb3VyYwogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0VHlwZWRl
ZnNCdWZmZXJTb3VyY2VBdHRyU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdFR5cGVkZWZz
JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewor
ICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwog
ICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZh
bHVlID0gY29udmVydDxJRExVbmlvbjxJRExBcnJheUJ1ZmZlclZpZXcsIElETEFycmF5QnVmZmVy
Pj4oc3RhdGUsIHZhbHVlKTsKQEAgLTQ2NCw2ICs0NjksNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RUeXBlZGVmc0RvbVRpbWVTdGFtCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RUeXBl
ZGVmc0RvbVRpbWVTdGFtcEF0dHJTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0VHlwZWRl
ZnMmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7
CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7
CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZl
VmFsdWUgPSBjb252ZXJ0PElETFVuc2lnbmVkTG9uZ0xvbmc+KHN0YXRlLCB2YWx1ZSk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvTlBfanNvYmplY3QuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JyaWRnZS9OUF9qc29iamVjdC5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysr
IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9OUF9qc29iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTcgQXBwbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDE5IEFwcGxlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTQ4Nyw3ICs0ODcsNyBAQCBib29sIF9OUE5fRW51bWVyYXRlKE5QUCwgTlBPYmplY3QqIG8s
IE5QCiAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKIAogICAg
ICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKLSAgICAg
ICAgUHJvcGVydHlOYW1lQXJyYXkgcHJvcGVydHlOYW1lcygmdm0sIFByb3BlcnR5TmFtZU1vZGU6
OlN0cmluZ3MsIFByaXZhdGVTeW1ib2xNb2RlOjpFeGNsdWRlKTsKKyAgICAgICAgUHJvcGVydHlO
YW1lQXJyYXkgcHJvcGVydHlOYW1lcyh2bSwgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5ncywgUHJp
dmF0ZVN5bWJvbE1vZGU6OkV4Y2x1ZGUpOwogCiAgICAgICAgIG9iai0+aW1wLT5tZXRob2RUYWJs
ZSh2bSktPmdldFByb3BlcnR5TmFtZXMob2JqLT5pbXAsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIEVu
dW1lcmF0aW9uTW9kZSgpKTsKICAgICAgICAgdW5zaWduZWQgc2l6ZSA9IHN0YXRpY19jYXN0PHVu
c2lnbmVkPihwcm9wZXJ0eU5hbWVzLnNpemUoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlk
Z2UvcnVudGltZV9hcnJheS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdl
L3J1bnRpbWVfYXJyYXkuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9i
cmlkZ2UvcnVudGltZV9hcnJheS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA4LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwMy0yMDE5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzcsNyAr
NzcsNyBAQCB2b2lkIFJ1bnRpbWVBcnJheTo6Z2V0T3duUHJvcGVydHlOYW1lcyhKCiAgICAgUnVu
dGltZUFycmF5KiB0aGlzT2JqZWN0ID0ganNDYXN0PFJ1bnRpbWVBcnJheSo+KG9iamVjdCk7CiAg
ICAgdW5zaWduZWQgbGVuZ3RoID0gdGhpc09iamVjdC0+Z2V0TGVuZ3RoKCk7CiAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQotICAgICAgICBwcm9wZXJ0eU5hbWVzLmFk
ZChJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGkpKTsKKyAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQo
SWRlbnRpZmllcjo6ZnJvbSh2bSwgaSkpOwogCiAgICAgaWYgKG1vZGUuaW5jbHVkZURvbnRFbnVt
UHJvcGVydGllcygpKQogICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZCh2bS5wcm9wZXJ0eU5hbWVz
LT5sZW5ndGgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL2MvY19pbnN0YW5jZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL2MvY19pbnN0YW5jZS5jcHAJKHJl
dmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9jL2NfaW5zdGFuY2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
MywgMjAwNiwgMjAxNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDAzLTIwMTkgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjk1LDcgKzI5NSw3IEBAIEpTVmFsdWUgQ0lu
c3RhbmNlOjpzdHJpbmdWYWx1ZShFeGVjU3RhdGUKICAgICAgICAgcmV0dXJuIHZhbHVlOwogCiAg
ICAgLy8gRmFsbGJhY2sgdG8gZGVmYXVsdCBpbXBsZW1lbnRhdGlvbi4KLSAgICByZXR1cm4ganNO
b250cml2aWFsU3RyaW5nKGV4ZWMsICJOUE9iamVjdCJfcyk7CisgICAgcmV0dXJuIGpzTm9udHJp
dmlhbFN0cmluZyhleGVjLT52bSgpLCAiTlBPYmplY3QiX3MpOwogfQogCiBKU1ZhbHVlIENJbnN0
YW5jZTo6bnVtYmVyVmFsdWUoRXhlY1N0YXRlKikgY29uc3QKQEAgLTM2NiwxMyArMzY2LDE0IEBA
IHZvaWQgQ0luc3RhbmNlOjpnZXRQcm9wZXJ0eU5hbWVzKEV4ZWNTdGEKICAgICAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGZvciAodWludDMy
X3QgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CiAgICAgICAgIElkZW50aWZpZXJSZXAqIGlkZW50
aWZpZXIgPSBzdGF0aWNfY2FzdDxJZGVudGlmaWVyUmVwKj4oaWRlbnRpZmllcnNbaV0pOwogCiAg
ICAgICAgIGlmIChpZGVudGlmaWVyLT5pc1N0cmluZygpKQogICAgICAgICAgICAgbmFtZUFycmF5
LmFkZChpZGVudGlmaWVyRnJvbU5QSWRlbnRpZmllcihleGVjLCBpZGVudGlmaWVyLT5zdHJpbmco
KSkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBuYW1lQXJyYXkuYWRkKElkZW50aWZpZXI6
OmZyb20oZXhlYywgaWRlbnRpZmllci0+bnVtYmVyKCkpKTsKKyAgICAgICAgICAgIG5hbWVBcnJh
eS5hZGQoSWRlbnRpZmllcjo6ZnJvbSh2bSwgaWRlbnRpZmllci0+bnVtYmVyKCkpKTsKICAgICB9
CiAKICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgcmVhbGx5IGNhbGwgTlBOX01lbUZyZWUgYnV0
IHRoYXQncyBpbiBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9jL2NfdXRpbGl0
eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL2MvY191dGlsaXR5LmNw
cAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL2MvY191dGlsaXR5
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDQsIDIwMDYsIDIwMTMgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwNC0yMDE5IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiAoYXBAbnlwb3AuY29tKQog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dApAQCAtMTQ2LDcgKzE0Niw4IEBAIFN0cmluZyBjb252ZXJ0TlBTdHJp
bmdUb1VURjE2KGNvbnN0IE5QU3QKIAogSWRlbnRpZmllciBpZGVudGlmaWVyRnJvbU5QSWRlbnRp
ZmllcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IE5QVVRGOCogbmFtZSkKIHsKLSAgICByZXR1cm4g
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCBjb252ZXJ0VVRGOFRvVVRGMTZXaXRoTGF0aW4x
RmFsbGJhY2sobmFtZSwgLTEpKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIHJldHVy
biBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBjb252ZXJ0VVRGOFRvVVRGMTZXaXRoTGF0aW4x
RmFsbGJhY2sobmFtZSwgLTEpKTsKIH0KIAogfSB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlk
Z2Uvb2JqYy9XZWJTY3JpcHRPYmplY3QubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YnJpZGdlL29iamMvV2ViU2NyaXB0T2JqZWN0Lm1tCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9icmlkZ2Uvb2JqYy9XZWJTY3JpcHRPYmplY3QubW0JKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0zNDcsNyArMzQ3LDcgQEAgLSAoaWQpY2FsbFdlYlNjcmlwdE1ldGhvZDooTlNTdHJpbmcg
KiluYQogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwog
ICAgIFVOVVNFRF9QQVJBTShzY29wZSk7CiAKLSAgICBKU0M6OkpTVmFsdWUgZnVuY3Rpb24gPSBb
c2VsZiBfaW1wXS0+Z2V0KGV4ZWMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgU3RyaW5n
KG5hbWUpKSk7CisgICAgSlNDOjpKU1ZhbHVlIGZ1bmN0aW9uID0gW3NlbGYgX2ltcF0tPmdldChl
eGVjLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBTdHJpbmcobmFtZSkpKTsKICAgICBDYWxs
RGF0YSBjYWxsRGF0YTsKICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGdldENhbGxEYXRhKHZtLCBm
dW5jdGlvbiwgY2FsbERhdGEpOwogICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZTo6Tm9uZSkK
QEAgLTQwNiw3ICs0MDYsNyBAQCAtICh2b2lkKXNldFZhbHVlOihpZCl2YWx1ZSBmb3JLZXk6KE5T
U3RyCiAKICAgICBKU09iamVjdCogb2JqZWN0ID0gSlNDOjpqc0R5bmFtaWNDYXN0PEpTT2JqZWN0
Kj4odm0sIFtzZWxmIF9pbXBdKTsKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChvYmplY3QpOwot
ICAgIG9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5wdXQob2JqZWN0LCBleGVjLCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKGV4ZWMsIFN0cmluZyhrZXkpKSwgY29udmVydE9iamNWYWx1ZVRvVmFsdWUo
ZXhlYywgJnZhbHVlLCBPYmpjT2JqZWN0VHlwZSwgW3NlbGYgX3Jvb3RPYmplY3RdKSwgc2xvdCk7
CisgICAgb2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPnB1dChvYmplY3QsIGV4ZWMsIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcodm0sIFN0cmluZyhrZXkpKSwgY29udmVydE9iamNWYWx1ZVRvVmFsdWUo
ZXhlYywgJnZhbHVlLCBPYmpjT2JqZWN0VHlwZSwgW3NlbGYgX3Jvb3RPYmplY3RdKSwgc2xvdCk7
CiAKICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7CiAgICAgICAgIGFkZEV4
Y2VwdGlvblRvQ29uc29sZShleGVjKTsKQEAgLTQzMiw3ICs0MzIsNyBAQCAtIChpZCl2YWx1ZUZv
cktleTooTlNTdHJpbmcgKilrZXkKICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hf
U0NPUEUodm0pOwogICAgICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2Jh
bEV4ZWMoKTsKIAotICAgICAgICBKU0M6OkpTVmFsdWUgcmVzdWx0ID0gW3NlbGYgX2ltcF0tPmdl
dChleGVjLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsIFN0cmluZyhrZXkpKSk7CisgICAg
ICAgIEpTQzo6SlNWYWx1ZSByZXN1bHQgPSBbc2VsZiBfaW1wXS0+Z2V0KGV4ZWMsIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcodm0sIFN0cmluZyhrZXkpKSk7CiAgICAgICAgIAogICAgICAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7CiAgICAgICAgICAgICBhZGRFeGNlcHRpb25U
b0NvbnNvbGUoZXhlYyk7CkBAIC00NjAsNyArNDYwLDcgQEAgLSAodm9pZClyZW1vdmVXZWJTY3Jp
cHRLZXk6KE5TU3RyaW5nICopawogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BF
KHZtKTsKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsK
IAotICAgIFtzZWxmIF9pbXBdLT5tZXRob2RUYWJsZSh2bSktPmRlbGV0ZVByb3BlcnR5KFtzZWxm
IF9pbXBdLCBleGVjLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsIFN0cmluZyhrZXkpKSk7
CisgICAgW3NlbGYgX2ltcF0tPm1ldGhvZFRhYmxlKHZtKS0+ZGVsZXRlUHJvcGVydHkoW3NlbGYg
X2ltcF0sIGV4ZWMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIFN0cmluZyhrZXkpKSk7CiAK
ICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7CiAgICAgICAgIGFkZEV4Y2Vw
dGlvblRvQ29uc29sZShleGVjKTsKQEAgLTQ3OSw3ICs0NzksNyBAQCAtIChCT09MKWhhc1dlYlNj
cmlwdEtleTooTlNTdHJpbmcgKilrZXkKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9T
Q09QRSh2bSk7CiAgICAgRXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVj
KCk7CiAKLSAgICBCT09MIHJlc3VsdCA9IFtzZWxmIF9pbXBdLT5oYXNQcm9wZXJ0eShleGVjLCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsIFN0cmluZyhrZXkpKSk7CisgICAgQk9PTCByZXN1
bHQgPSBbc2VsZiBfaW1wXS0+aGFzUHJvcGVydHkoZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zyh2bSwgU3RyaW5nKGtleSkpKTsKIAogICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpIHsKICAgICAgICAgYWRkRXhjZXB0aW9uVG9Db25zb2xlKGV4ZWMpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvYnJpZGdlL29iamMvb2JqY19ydW50aW1lLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JyaWRnZS9vYmpjL29iamNfcnVudGltZS5tbQkocmV2aXNpb24gMjQ5MTI4KQor
KysgU291cmNlL1dlYkNvcmUvYnJpZGdlL29iamMvb2JqY19ydW50aW1lLm1tCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwOCwgMjAx
MywgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDQtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5NSw4ICsyOTUsOSBAQCBib29sIE9iamNGYWxsYmFja09i
amVjdEltcDo6ZGVsZXRlUHJvcGVyCiAKIEpTVmFsdWUgT2JqY0ZhbGxiYWNrT2JqZWN0SW1wOjpk
ZWZhdWx0VmFsdWUoY29uc3QgSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcmVm
ZXJyZWRQcmltaXRpdmVUeXBlKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgY29u
c3QgT2JqY0ZhbGxiYWNrT2JqZWN0SW1wKiB0aGlzT2JqZWN0ID0ganNDYXN0PGNvbnN0IE9iamNG
YWxsYmFja09iamVjdEltcCo+KG9iamVjdCk7Ci0gICAgcmV0dXJuIHRoaXNPYmplY3QtPl9pbnN0
YW5jZS0+Z2V0VmFsdWVPZlVuZGVmaW5lZEZpZWxkKGV4ZWMsIElkZW50aWZpZXI6OmZyb21TdHJp
bmcoZXhlYywgdGhpc09iamVjdC0+bV9pdGVtKSk7CisgICAgcmV0dXJuIHRoaXNPYmplY3QtPl9p
bnN0YW5jZS0+Z2V0VmFsdWVPZlVuZGVmaW5lZEZpZWxkKGV4ZWMsIElkZW50aWZpZXI6OmZyb21T
dHJpbmcodm0sIHRoaXNPYmplY3QtPm1faXRlbSkpOwogfQogCiBib29sIE9iamNGYWxsYmFja09i
amVjdEltcDo6dG9Cb29sZWFuKEV4ZWNTdGF0ZSAqKSBjb25zdApJbmRleDogU291cmNlL1dlYkNv
cmUvYnJpZGdlL29iamMvb2JqY191dGlsaXR5Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JyaWRnZS9vYmpjL29iamNfdXRpbGl0eS5tbQkocmV2aXNpb24gMjQ5MTI4KQorKysgU291
cmNlL1dlYkNvcmUvYnJpZGdlL29iamMvb2JqY191dGlsaXR5Lm1tCSh3b3JraW5nIGNvcHkpCkBA
IC0xNTIsOCArMTUyLDkgQEAgT2JqY1ZhbHVlIGNvbnZlcnRWYWx1ZVRvT2JqY1ZhbHVlKEV4ZWNT
dAogCiBKU1ZhbHVlIGNvbnZlcnROU1N0cmluZ1RvU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgTlNT
dHJpbmcgKm5zc3RyaW5nKQogewotICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwotICAgIEpT
VmFsdWUgYVZhbHVlID0ganNTdHJpbmcoZXhlYywgU3RyaW5nKG5zc3RyaW5nKSk7CisgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgSlNWYWx1
ZSBhVmFsdWUgPSBqc1N0cmluZyh2bSwgU3RyaW5nKG5zc3RyaW5nKSk7CiAgICAgcmV0dXJuIGFW
YWx1ZTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVu
dEV4dGVuc2lvblBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY29udGVu
dGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvblBhcnNlci5jcHAJKHJldmlzaW9uIDI0OTEyOCkK
KysrIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25QYXJz
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNC0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTMxLDExICsxMzEsMTEgQEAgc3RhdGljIEV4cGVj
dGVkPFRyaWdnZXIsIHN0ZDo6ZXJyb3JfY29kZQogICAgIFZNJiB2bSA9IGV4ZWMudm0oKTsKICAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAgICBjb25zdCBKU1Zh
bHVlIHRyaWdnZXJPYmplY3QgPSBydWxlT2JqZWN0LmdldCgmZXhlYywgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZygmZXhlYywgInRyaWdnZXIiKSk7CisgICAgY29uc3QgSlNWYWx1ZSB0cmlnZ2VyT2Jq
ZWN0ID0gcnVsZU9iamVjdC5nZXQoJmV4ZWMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJ0
cmlnZ2VyIikpOwogICAgIGlmICghdHJpZ2dlck9iamVjdCB8fCBzY29wZS5leGNlcHRpb24oKSB8
fCAhdHJpZ2dlck9iamVjdC5pc09iamVjdCgpKQogICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0
ZWQoQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OSW52YWxpZFRyaWdnZXIpOwogICAgIAotICAg
IGNvbnN0IEpTVmFsdWUgdXJsRmlsdGVyT2JqZWN0ID0gdHJpZ2dlck9iamVjdC5nZXQoJmV4ZWMs
IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJmV4ZWMsICJ1cmwtZmlsdGVyIikpOworICAgIGNvbnN0
IEpTVmFsdWUgdXJsRmlsdGVyT2JqZWN0ID0gdHJpZ2dlck9iamVjdC5nZXQoJmV4ZWMsIElkZW50
aWZpZXI6OmZyb21TdHJpbmcodm0sICJ1cmwtZmlsdGVyIikpOwogICAgIGlmICghdXJsRmlsdGVy
T2JqZWN0IHx8IHNjb3BlLmV4Y2VwdGlvbigpIHx8ICF1cmxGaWx0ZXJPYmplY3QuaXNTdHJpbmco
KSkKICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKENvbnRlbnRFeHRlbnNpb25FcnJvcjo6
SlNPTkludmFsaWRVUkxGaWx0ZXJJblRyaWdnZXIpOwogCkBAIC0xNDYsMTUgKzE0NiwxNSBAQCBz
dGF0aWMgRXhwZWN0ZWQ8VHJpZ2dlciwgc3RkOjplcnJvcl9jb2RlCiAgICAgVHJpZ2dlciB0cmln
Z2VyOwogICAgIHRyaWdnZXIudXJsRmlsdGVyID0gdXJsRmlsdGVyOwogCi0gICAgY29uc3QgSlNW
YWx1ZSB1cmxGaWx0ZXJDYXNlVmFsdWUgPSB0cmlnZ2VyT2JqZWN0LmdldCgmZXhlYywgSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZygmZXhlYywgInVybC1maWx0ZXItaXMtY2FzZS1zZW5zaXRpdmUiKSk7
CisgICAgY29uc3QgSlNWYWx1ZSB1cmxGaWx0ZXJDYXNlVmFsdWUgPSB0cmlnZ2VyT2JqZWN0Lmdl
dCgmZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInVybC1maWx0ZXItaXMtY2FzZS1z
ZW5zaXRpdmUiKSk7CiAgICAgaWYgKHVybEZpbHRlckNhc2VWYWx1ZSAmJiAhc2NvcGUuZXhjZXB0
aW9uKCkgJiYgdXJsRmlsdGVyQ2FzZVZhbHVlLmlzQm9vbGVhbigpKQogICAgICAgICB0cmlnZ2Vy
LnVybEZpbHRlcklzQ2FzZVNlbnNpdGl2ZSA9IHVybEZpbHRlckNhc2VWYWx1ZS50b0Jvb2xlYW4o
JmV4ZWMpOwogCi0gICAgY29uc3QgSlNWYWx1ZSB0b3BVUkxGaWx0ZXJDYXNlVmFsdWUgPSB0cmln
Z2VyT2JqZWN0LmdldCgmZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmZXhlYywgInRvcC11
cmwtZmlsdGVyLWlzLWNhc2Utc2Vuc2l0aXZlIikpOworICAgIGNvbnN0IEpTVmFsdWUgdG9wVVJM
RmlsdGVyQ2FzZVZhbHVlID0gdHJpZ2dlck9iamVjdC5nZXQoJmV4ZWMsIElkZW50aWZpZXI6OmZy
b21TdHJpbmcodm0sICJ0b3AtdXJsLWZpbHRlci1pcy1jYXNlLXNlbnNpdGl2ZSIpKTsKICAgICBp
ZiAodG9wVVJMRmlsdGVyQ2FzZVZhbHVlICYmICFzY29wZS5leGNlcHRpb24oKSAmJiB0b3BVUkxG
aWx0ZXJDYXNlVmFsdWUuaXNCb29sZWFuKCkpCiAgICAgICAgIHRyaWdnZXIudG9wVVJMQ29uZGl0
aW9uSXNDYXNlU2Vuc2l0aXZlID0gdG9wVVJMRmlsdGVyQ2FzZVZhbHVlLnRvQm9vbGVhbigmZXhl
Yyk7CiAKLSAgICBjb25zdCBKU1ZhbHVlIHJlc291cmNlVHlwZVZhbHVlID0gdHJpZ2dlck9iamVj
dC5nZXQoJmV4ZWMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJmV4ZWMsICJyZXNvdXJjZS10eXBl
IikpOworICAgIGNvbnN0IEpTVmFsdWUgcmVzb3VyY2VUeXBlVmFsdWUgPSB0cmlnZ2VyT2JqZWN0
LmdldCgmZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInJlc291cmNlLXR5cGUiKSk7
CiAgICAgaWYgKCFzY29wZS5leGNlcHRpb24oKSAmJiByZXNvdXJjZVR5cGVWYWx1ZS5pc09iamVj
dCgpKSB7CiAgICAgICAgIGF1dG8gdHlwZUZsYWdzRXJyb3IgPSBnZXRUeXBlRmxhZ3MoZXhlYywg
cmVzb3VyY2VUeXBlVmFsdWUsIHRyaWdnZXIuZmxhZ3MsIHJlYWRSZXNvdXJjZVR5cGUpOwogICAg
ICAgICBpZiAodHlwZUZsYWdzRXJyb3IpCkBAIC0xNjIsNyArMTYyLDcgQEAgc3RhdGljIEV4cGVj
dGVkPFRyaWdnZXIsIHN0ZDo6ZXJyb3JfY29kZQogICAgIH0gZWxzZSBpZiAoIXJlc291cmNlVHlw
ZVZhbHVlLmlzVW5kZWZpbmVkKCkpCiAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChDb250
ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05JbnZhbGlkVHJpZ2dlckZsYWdzQXJyYXkpOwogCi0gICAg
Y29uc3QgSlNWYWx1ZSBsb2FkVHlwZVZhbHVlID0gdHJpZ2dlck9iamVjdC5nZXQoJmV4ZWMsIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcoJmV4ZWMsICJsb2FkLXR5cGUiKSk7CisgICAgY29uc3QgSlNW
YWx1ZSBsb2FkVHlwZVZhbHVlID0gdHJpZ2dlck9iamVjdC5nZXQoJmV4ZWMsIElkZW50aWZpZXI6
OmZyb21TdHJpbmcodm0sICJsb2FkLXR5cGUiKSk7CiAgICAgaWYgKCFzY29wZS5leGNlcHRpb24o
KSAmJiBsb2FkVHlwZVZhbHVlLmlzT2JqZWN0KCkpIHsKICAgICAgICAgYXV0byB0eXBlRmxhZ3NF
cnJvciA9IGdldFR5cGVGbGFncyhleGVjLCBsb2FkVHlwZVZhbHVlLCB0cmlnZ2VyLmZsYWdzLCBy
ZWFkTG9hZFR5cGUpOwogICAgICAgICBpZiAodHlwZUZsYWdzRXJyb3IpCkBAIC0xNzAsNyArMTcw
LDcgQEAgc3RhdGljIEV4cGVjdGVkPFRyaWdnZXIsIHN0ZDo6ZXJyb3JfY29kZQogICAgIH0gZWxz
ZSBpZiAoIWxvYWRUeXBlVmFsdWUuaXNVbmRlZmluZWQoKSkKICAgICAgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKENvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTkludmFsaWRUcmlnZ2VyRmxhZ3NB
cnJheSk7CiAKLSAgICBjb25zdCBKU1ZhbHVlIGlmRG9tYWluVmFsdWUgPSB0cmlnZ2VyT2JqZWN0
LmdldCgmZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmZXhlYywgImlmLWRvbWFpbiIpKTsK
KyAgICBjb25zdCBKU1ZhbHVlIGlmRG9tYWluVmFsdWUgPSB0cmlnZ2VyT2JqZWN0LmdldCgmZXhl
YywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImlmLWRvbWFpbiIpKTsKICAgICBpZiAoIXNj
b3BlLmV4Y2VwdGlvbigpICYmIGlmRG9tYWluVmFsdWUuaXNPYmplY3QoKSkgewogICAgICAgICBh
dXRvIGlmRG9tYWluID0gZ2V0RG9tYWluTGlzdChleGVjLCBhc09iamVjdChpZkRvbWFpblZhbHVl
KSk7CiAgICAgICAgIGlmICghaWZEb21haW4uaGFzX3ZhbHVlKCkpCkBAIC0xODMsNyArMTgzLDcg
QEAgc3RhdGljIEV4cGVjdGVkPFRyaWdnZXIsIHN0ZDo6ZXJyb3JfY29kZQogICAgIH0gZWxzZSBp
ZiAoIWlmRG9tYWluVmFsdWUuaXNVbmRlZmluZWQoKSkKICAgICAgICAgcmV0dXJuIG1ha2VVbmV4
cGVjdGVkKENvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTkludmFsaWRDb25kaXRpb25MaXN0KTsK
IAotICAgIGNvbnN0IEpTVmFsdWUgdW5sZXNzRG9tYWluVmFsdWUgPSB0cmlnZ2VyT2JqZWN0Lmdl
dCgmZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmZXhlYywgInVubGVzcy1kb21haW4iKSk7
CisgICAgY29uc3QgSlNWYWx1ZSB1bmxlc3NEb21haW5WYWx1ZSA9IHRyaWdnZXJPYmplY3QuZ2V0
KCZleGVjLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAidW5sZXNzLWRvbWFpbiIpKTsKICAg
ICBpZiAoIXNjb3BlLmV4Y2VwdGlvbigpICYmIHVubGVzc0RvbWFpblZhbHVlLmlzT2JqZWN0KCkp
IHsKICAgICAgICAgaWYgKHRyaWdnZXIuY29uZGl0aW9uVHlwZSAhPSBUcmlnZ2VyOjpDb25kaXRp
b25UeXBlOjpOb25lKQogICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKENvbnRlbnRF
eHRlbnNpb25FcnJvcjo6SlNPTk11bHRpcGxlQ29uZGl0aW9ucyk7CkBAIC0xOTcsNyArMTk3LDcg
QEAgc3RhdGljIEV4cGVjdGVkPFRyaWdnZXIsIHN0ZDo6ZXJyb3JfY29kZQogICAgIH0gZWxzZSBp
ZiAoIXVubGVzc0RvbWFpblZhbHVlLmlzVW5kZWZpbmVkKCkpCiAgICAgICAgIHJldHVybiBtYWtl
VW5leHBlY3RlZChDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05JbnZhbGlkQ29uZGl0aW9uTGlz
dCk7CiAKLSAgICBjb25zdCBKU1ZhbHVlIGlmVG9wVVJMVmFsdWUgPSB0cmlnZ2VyT2JqZWN0Lmdl
dCgmZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmZXhlYywgImlmLXRvcC11cmwiKSk7Cisg
ICAgY29uc3QgSlNWYWx1ZSBpZlRvcFVSTFZhbHVlID0gdHJpZ2dlck9iamVjdC5nZXQoJmV4ZWMs
IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJpZi10b3AtdXJsIikpOwogICAgIGlmICghc2Nv
cGUuZXhjZXB0aW9uKCkgJiYgaWZUb3BVUkxWYWx1ZS5pc09iamVjdCgpKSB7CiAgICAgICAgIGlm
ICh0cmlnZ2VyLmNvbmRpdGlvblR5cGUgIT0gVHJpZ2dlcjo6Q29uZGl0aW9uVHlwZTo6Tm9uZSkK
ICAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChDb250ZW50RXh0ZW5zaW9uRXJyb3I6
OkpTT05NdWx0aXBsZUNvbmRpdGlvbnMpOwpAQCAtMjExLDcgKzIxMSw3IEBAIHN0YXRpYyBFeHBl
Y3RlZDxUcmlnZ2VyLCBzdGQ6OmVycm9yX2NvZGUKICAgICB9IGVsc2UgaWYgKCFpZlRvcFVSTFZh
bHVlLmlzVW5kZWZpbmVkKCkpCiAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChDb250ZW50
RXh0ZW5zaW9uRXJyb3I6OkpTT05JbnZhbGlkQ29uZGl0aW9uTGlzdCk7CiAKLSAgICBjb25zdCBK
U1ZhbHVlIHVubGVzc1RvcFVSTFZhbHVlID0gdHJpZ2dlck9iamVjdC5nZXQoJmV4ZWMsIElkZW50
aWZpZXI6OmZyb21TdHJpbmcoJmV4ZWMsICJ1bmxlc3MtdG9wLXVybCIpKTsKKyAgICBjb25zdCBK
U1ZhbHVlIHVubGVzc1RvcFVSTFZhbHVlID0gdHJpZ2dlck9iamVjdC5nZXQoJmV4ZWMsIElkZW50
aWZpZXI6OmZyb21TdHJpbmcodm0sICJ1bmxlc3MtdG9wLXVybCIpKTsKICAgICBpZiAoIXNjb3Bl
LmV4Y2VwdGlvbigpICYmIHVubGVzc1RvcFVSTFZhbHVlLmlzT2JqZWN0KCkpIHsKICAgICAgICAg
aWYgKHRyaWdnZXIuY29uZGl0aW9uVHlwZSAhPSBUcmlnZ2VyOjpDb25kaXRpb25UeXBlOjpOb25l
KQogICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKENvbnRlbnRFeHRlbnNpb25FcnJv
cjo6SlNPTk11bHRpcGxlQ29uZGl0aW9ucyk7CkBAIC0yNDUsMTEgKzI0NSwxMSBAQCBzdGF0aWMg
RXhwZWN0ZWQ8T3B0aW9uYWw8QWN0aW9uPiwgc3RkOjplCiAgICAgVk0mIHZtID0gZXhlYy52bSgp
OwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIGNvbnN0
IEpTVmFsdWUgYWN0aW9uT2JqZWN0ID0gcnVsZU9iamVjdC5nZXQoJmV4ZWMsIElkZW50aWZpZXI6
OmZyb21TdHJpbmcoJmV4ZWMsICJhY3Rpb24iKSk7CisgICAgY29uc3QgSlNWYWx1ZSBhY3Rpb25P
YmplY3QgPSBydWxlT2JqZWN0LmdldCgmZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwg
ImFjdGlvbiIpKTsKICAgICBpZiAoc2NvcGUuZXhjZXB0aW9uKCkgfHwgIWFjdGlvbk9iamVjdC5p
c09iamVjdCgpKQogICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoQ29udGVudEV4dGVuc2lv
bkVycm9yOjpKU09OSW52YWxpZEFjdGlvbik7CiAKLSAgICBjb25zdCBKU1ZhbHVlIHR5cGVPYmpl
Y3QgPSBhY3Rpb25PYmplY3QuZ2V0KCZleGVjLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZleGVj
LCAidHlwZSIpKTsKKyAgICBjb25zdCBKU1ZhbHVlIHR5cGVPYmplY3QgPSBhY3Rpb25PYmplY3Qu
Z2V0KCZleGVjLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAidHlwZSIpKTsKICAgICBpZiAo
c2NvcGUuZXhjZXB0aW9uKCkgfHwgIXR5cGVPYmplY3QuaXNTdHJpbmcoKSkKICAgICAgICAgcmV0
dXJuIG1ha2VVbmV4cGVjdGVkKENvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTkludmFsaWRBY3Rp
b25UeXBlKTsKIApAQCAtMjYyLDcgKzI2Miw3IEBAIHN0YXRpYyBFeHBlY3RlZDxPcHRpb25hbDxB
Y3Rpb24+LCBzdGQ6OmUKICAgICBpZiAoYWN0aW9uVHlwZSA9PSAiYmxvY2stY29va2llcyIpCiAg
ICAgICAgIHJldHVybiB7IEFjdGlvbihBY3Rpb25UeXBlOjpCbG9ja0Nvb2tpZXMpIH07CiAgICAg
aWYgKGFjdGlvblR5cGUgPT0gImNzcy1kaXNwbGF5LW5vbmUiKSB7Ci0gICAgICAgIEpTVmFsdWUg
c2VsZWN0b3IgPSBhY3Rpb25PYmplY3QuZ2V0KCZleGVjLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KCZleGVjLCAic2VsZWN0b3IiKSk7CisgICAgICAgIEpTVmFsdWUgc2VsZWN0b3IgPSBhY3Rpb25P
YmplY3QuZ2V0KCZleGVjLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAic2VsZWN0b3IiKSk7
CiAgICAgICAgIGlmIChzY29wZS5leGNlcHRpb24oKSB8fCAhc2VsZWN0b3IuaXNTdHJpbmcoKSkK
ICAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChDb250ZW50RXh0ZW5zaW9uRXJyb3I6
OkpTT05JbnZhbGlkQ1NTRGlzcGxheU5vbmVBY3Rpb25UeXBlKTsKIApAQCAtMjc2LDcgKzI3Niw3
IEBAIHN0YXRpYyBFeHBlY3RlZDxPcHRpb25hbDxBY3Rpb24+LCBzdGQ6OmUKICAgICBpZiAoYWN0
aW9uVHlwZSA9PSAibWFrZS1odHRwcyIpCiAgICAgICAgIHJldHVybiB7IEFjdGlvbihBY3Rpb25U
eXBlOjpNYWtlSFRUUFMpIH07CiAgICAgaWYgKGFjdGlvblR5cGUgPT0gIm5vdGlmeSIpIHsKLSAg
ICAgICAgSlNWYWx1ZSBub3RpZmljYXRpb24gPSBhY3Rpb25PYmplY3QuZ2V0KCZleGVjLCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKCZleGVjLCAibm90aWZpY2F0aW9uIikpOworICAgICAgICBKU1Zh
bHVlIG5vdGlmaWNhdGlvbiA9IGFjdGlvbk9iamVjdC5nZXQoJmV4ZWMsIElkZW50aWZpZXI6OmZy
b21TdHJpbmcodm0sICJub3RpZmljYXRpb24iKSk7CiAgICAgICAgIGlmIChzY29wZS5leGNlcHRp
b24oKSB8fCAhbm90aWZpY2F0aW9uLmlzU3RyaW5nKCkpCiAgICAgICAgICAgICByZXR1cm4gbWFr
ZVVuZXhwZWN0ZWQoQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OSW52YWxpZE5vdGlmaWNhdGlv
bik7CiAgICAgICAgIHJldHVybiB7IEFjdGlvbihBY3Rpb25UeXBlOjpOb3RpZnksIGFzU3RyaW5n
KG5vdGlmaWNhdGlvbiktPnZhbHVlKCZleGVjKSkgfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Ny
eXB0by9TdWJ0bGVDcnlwdG8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0
by9TdWJ0bGVDcnlwdG8uY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9j
cnlwdG8vU3VidGxlQ3J5cHRvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC05NSw3ICs5NSw3IEBAIHN0YXRp
YyBFeGNlcHRpb25PcjxzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHQKIAogICAgIGlmIChXVEY6OmhvbGRz
X2FsdGVybmF0aXZlPFN0cmluZz4oYWxnb3JpdGhtSWRlbnRpZmllcikpIHsKICAgICAgICAgYXV0
byBuZXdQYXJhbXMgPSBTdHJvbmc8SlNPYmplY3Q+KHZtLCBjb25zdHJ1Y3RFbXB0eU9iamVjdCgm
c3RhdGUpKTsKLSAgICAgICAgbmV3UGFyYW1zLT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZy
b21TdHJpbmcoJnZtLCAibmFtZSIpLCBqc1N0cmluZygmc3RhdGUsIFdURjo6Z2V0PFN0cmluZz4o
YWxnb3JpdGhtSWRlbnRpZmllcikpKTsKKyAgICAgICAgbmV3UGFyYW1zLT5wdXREaXJlY3Qodm0s
IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJuYW1lIiksIGpzU3RyaW5nKHZtLCBXVEY6Omdl
dDxTdHJpbmc+KGFsZ29yaXRobUlkZW50aWZpZXIpKSk7CiAgICAgICAgIAogICAgICAgICByZXR1
cm4gbm9ybWFsaXplQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyhzdGF0ZSwgbmV3UGFyYW1zLCBv
cGVyYXRpb24pOwogICAgIH0KQEAgLTI0MSwxMSArMjQxLDExIEBAIHN0YXRpYyBFeGNlcHRpb25P
cjxzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHQKICAgICAgICAgc3dpdGNoICgqaWRlbnRpZmllcikgewog
ICAgICAgICBjYXNlIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OkVDREg6IHsKICAgICAgICAg
ICAgIC8vIFJlbW92ZSB0aGlzIGhhY2sgb25jZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTY5MzMzIGlzIGZpeGVkLgotICAgICAgICAgICAgSlNWYWx1ZSBuYW1lVmFs
dWUgPSB2YWx1ZS5nZXQoKS0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3Rh
dGUsICJuYW1lIikpOwotICAgICAgICAgICAgSlNWYWx1ZSBwdWJsaWNWYWx1ZSA9IHZhbHVlLmdl
dCgpLT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgInB1YmxpYyIp
KTsKKyAgICAgICAgICAgIEpTVmFsdWUgbmFtZVZhbHVlID0gdmFsdWUuZ2V0KCktPmdldCgmc3Rh
dGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJuYW1lIikpOworICAgICAgICAgICAgSlNW
YWx1ZSBwdWJsaWNWYWx1ZSA9IHZhbHVlLmdldCgpLT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCAicHVibGljIikpOwogICAgICAgICAgICAgSlNPYmplY3QqIG5ld1ZhbHVl
ID0gY29uc3RydWN0RW1wdHlPYmplY3QoJnN0YXRlKTsKLSAgICAgICAgICAgIG5ld1ZhbHVlLT5w
dXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAibmFtZSIpLCBuYW1lVmFs
dWUpOwotICAgICAgICAgICAgbmV3VmFsdWUtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZygmdm0sICJwdWJsaWNLZXkiKSwgcHVibGljVmFsdWUpOworICAgICAgICAgICAgbmV3
VmFsdWUtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIm5hbWUiKSwg
bmFtZVZhbHVlKTsKKyAgICAgICAgICAgIG5ld1ZhbHVlLT5wdXREaXJlY3Qodm0sIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcodm0sICJwdWJsaWNLZXkiKSwgcHVibGljVmFsdWUpOwogCiAgICAgICAg
ICAgICBhdXRvIHBhcmFtcyA9IGNvbnZlcnREaWN0aW9uYXJ5PENyeXB0b0FsZ29yaXRobUVjZGhL
ZXlEZXJpdmVQYXJhbXM+KHN0YXRlLCBuZXdWYWx1ZSk7CiAgICAgICAgICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCBFeGNlcHRpb24geyBFeGlzdGluZ0V4Y2VwdGlvbkVycm9yIH0pOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvZG9taml0L0RPTUpJVEhlbHBlcnMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9kb21qaXQvRE9NSklUSGVscGVycy5oCShyZXZpc2lvbiAyNDkxMjgp
CisrKyBTb3VyY2UvV2ViQ29yZS9kb21qaXQvRE9NSklUSGVscGVycy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFs
bCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMu
IEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTU4LDcgKzU4LDcgQEAgSlNDOjpFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIHRvV3JhcAog
ICAgIEFTU0VSVChleGVjKTsKICAgICBBU1NFUlQocmVzdWx0KTsKICAgICBBU1NFUlQoZ2xvYmFs
T2JqZWN0KTsKLSAgICBKU0M6Ok5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJmV4ZWMtPnZt
KCksIGV4ZWMpOworICAgIEpTQzo6TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcihnbG9iYWxP
YmplY3QtPnZtKCksIGV4ZWMpOwogICAgIHJldHVybiBKU0M6OkpTVmFsdWU6OmVuY29kZSh0b0pT
KGV4ZWMsIHN0YXRpY19jYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSwgKnN0
YXRpY19jYXN0PFdyYXBwZWROb2RlKj4ocmVzdWx0KSkpOwogfQogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQz
NzYsNyArNDM3Niw3IEBAIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udHJvbGxlckpTVmFsdWUoSlMK
ICAgICBpZiAoIW1lZGlhSlNXcmFwcGVyT2JqZWN0KQogICAgICAgICByZXR1cm4gSlNDOjpqc051
bGwoKTsKIAotICAgIEpTQzo6SWRlbnRpZmllciBjb250cm9sc0hvc3QgPSBKU0M6OklkZW50aWZp
ZXI6OmZyb21TdHJpbmcoJnZtLCAiY29udHJvbHNIb3N0Iik7CisgICAgSlNDOjpJZGVudGlmaWVy
IGNvbnRyb2xzSG9zdCA9IEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImNvbnRyb2xz
SG9zdCIpOwogICAgIEpTQzo6SlNWYWx1ZSBjb250cm9sc0hvc3RKU1dyYXBwZXIgPSBtZWRpYUpT
V3JhcHBlck9iamVjdC0+Z2V0KCZleGVjLCBjb250cm9sc0hvc3QpOwogICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIEpTQzo6anNOdWxsKCkpOwogCkBAIC00Mzg0LDcgKzQzODQsNyBAQCBz
dGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnRyb2xsZXJKU1ZhbHVlKEpTCiAgICAgaWYgKCFjb250cm9s
c0hvc3RKU1dyYXBwZXJPYmplY3QpCiAgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOwogCi0g
ICAgSlNDOjpJZGVudGlmaWVyIGNvbnRyb2xsZXJJRCA9IEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0
cmluZygmdm0sICJjb250cm9sbGVyIik7CisgICAgSlNDOjpJZGVudGlmaWVyIGNvbnRyb2xsZXJJ
RCA9IEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImNvbnRyb2xsZXIiKTsKICAgICBK
U0M6OkpTVmFsdWUgY29udHJvbGxlckpTV3JhcHBlciA9IGNvbnRyb2xzSG9zdEpTV3JhcHBlck9i
amVjdC0+Z2V0KCZleGVjLCBjb250cm9sbGVySUQpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIEpTQzo6anNOdWxsKCkpOwogCkBAIC00NDQ3LDcgKzQ0NDcsNyBAQCB2b2lkIEhUTUxN
ZWRpYUVsZW1lbnQ6OnVwZGF0ZUNhcHRpb25Db250CiAgICAgICAgIC8vICAgICBOb25lCiAgICAg
ICAgIC8vIFJldHVybiB2YWx1ZToKICAgICAgICAgLy8gICAgIE5vbmUKLSAgICAgICAgYXV0byBt
ZXRob2RWYWx1ZSA9IGNvbnRyb2xsZXJPYmplY3QtPmdldCgmZXhlYywgSlNDOjpJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKCZleGVjLCAidXBkYXRlQ2FwdGlvbkNvbnRhaW5lciIpKTsKKyAgICAgICAg
YXV0byBtZXRob2RWYWx1ZSA9IGNvbnRyb2xsZXJPYmplY3QtPmdldCgmZXhlYywgSlNDOjpJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAidXBkYXRlQ2FwdGlvbkNvbnRhaW5lciIpKTsKICAgICAg
ICAgYXV0byogbWV0aG9kT2JqZWN0ID0gSlNDOjpqc0R5bmFtaWNDYXN0PEpTQzo6SlNPYmplY3Qq
Pih2bSwgbWV0aG9kVmFsdWUpOwogICAgICAgICBpZiAoIW1ldGhvZE9iamVjdCkKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKQEAgLTcyNzEsNyArNzI3MSw3IEBAIGJvb2wgSFRNTE1lZGlhRWxl
bWVudDo6ZW5zdXJlTWVkaWFDb250cm8KICAgICAgICAgYXV0byYgdm0gPSBnbG9iYWxPYmplY3Qu
dm0oKTsKICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogCi0g
ICAgICAgIGF1dG8gZnVuY3Rpb25WYWx1ZSA9IGdsb2JhbE9iamVjdC5nZXQoJmV4ZWMsIEpTQzo6
SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmZXhlYywgImNyZWF0ZUNvbnRyb2xzIikpOworICAgICAg
ICBhdXRvIGZ1bmN0aW9uVmFsdWUgPSBnbG9iYWxPYmplY3QuZ2V0KCZleGVjLCBKU0M6OklkZW50
aWZpZXI6OmZyb21TdHJpbmcodm0sICJjcmVhdGVDb250cm9scyIpKTsKICAgICAgICAgaWYgKGZ1
bmN0aW9uVmFsdWUuaXNGdW5jdGlvbih2bSkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKIApA
QCAtNzMyMyw3ICs3MzIzLDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpzZXRDb250cm9sbGVy
SlNQcgogICAgICAgICBpZiAoIWNvbnRyb2xsZXJPYmplY3QpCiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICAgICAgY29udHJvbGxlck9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5wdXQo
Y29udHJvbGxlck9iamVjdCwgJmV4ZWMsIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmZXhl
YywgcHJvcGVydHlOYW1lKSwgcHJvcGVydHlWYWx1ZSwgcHJvcGVydHlTbG90KTsKKyAgICAgICAg
Y29udHJvbGxlck9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5wdXQoY29udHJvbGxlck9iamVjdCwg
JmV4ZWMsIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcHJvcGVydHlOYW1lKSwgcHJv
cGVydHlWYWx1ZSwgcHJvcGVydHlTbG90KTsKIAogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9
KTsKQEAgLTczNDksNyArNzM0OSw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6ZGlkQWRkVXNl
ckFnZW50U2gKICAgICAgICAgLy8gUmV0dXJuIHZhbHVlOgogICAgICAgICAvLyAgICAgQSByZWZl
cmVuY2UgdG8gdGhlIGNyZWF0ZWQgbWVkaWEgY29udHJvbGxlciBpbnN0YW5jZS4KIAotICAgICAg
ICBhdXRvIGZ1bmN0aW9uVmFsdWUgPSBnbG9iYWxPYmplY3QuZ2V0KCZleGVjLCBKU0M6OklkZW50
aWZpZXI6OmZyb21TdHJpbmcoJmV4ZWMsICJjcmVhdGVDb250cm9scyIpKTsKKyAgICAgICAgYXV0
byBmdW5jdGlvblZhbHVlID0gZ2xvYmFsT2JqZWN0LmdldCgmZXhlYywgSlNDOjpJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKHZtLCAiY3JlYXRlQ29udHJvbHMiKSk7CiAgICAgICAgIGlmIChmdW5jdGlv
blZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAK
QEAgLTczODEsMjEgKzczODEsMjEgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpkaWRBZGRVc2Vy
QWdlbnRTaAogICAgICAgICAvLyBDb25uZWN0IHRoZSBNZWRpYSwgTWVkaWFDb250cm9sbGVySG9z
dCwgYW5kIENvbnRyb2xsZXIgc28gdGhlIEdDIGtub3dzIGFib3V0IHRoZWlyIHJlbGF0aW9uc2hp
cAogICAgICAgICBhdXRvKiBtZWRpYUpTV3JhcHBlck9iamVjdCA9IG1lZGlhSlNXcmFwcGVyLnRv
T2JqZWN0KCZleGVjKTsKICAgICAgICAgc2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKLSAgICAg
ICAgYXV0byBjb250cm9sc0hvc3QgPSBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJmV4ZWMu
dm0oKSwgImNvbnRyb2xzSG9zdCIpOworICAgICAgICBhdXRvIGNvbnRyb2xzSG9zdCA9IEpTQzo6
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImNvbnRyb2xzSG9zdCIpOwogCiAgICAgICAgIEFT
U0VSVCghbWVkaWFKU1dyYXBwZXJPYmplY3QtPmhhc1Byb3BlcnR5KCZleGVjLCBjb250cm9sc0hv
c3QpKTsKIAotICAgICAgICBtZWRpYUpTV3JhcHBlck9iamVjdC0+cHV0RGlyZWN0KGV4ZWMudm0o
KSwgY29udHJvbHNIb3N0LCBtZWRpYUNvbnRyb2xzSG9zdEpTV3JhcHBlciwgSlNDOjpQcm9wZXJ0
eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVt
IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpOworICAgICAgICBtZWRpYUpTV3Jh
cHBlck9iamVjdC0+cHV0RGlyZWN0KHZtLCBjb250cm9sc0hvc3QsIG1lZGlhQ29udHJvbHNIb3N0
SlNXcmFwcGVyLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgSlNDOjpQcm9w
ZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25s
eSk7CiAKICAgICAgICAgYXV0byogbWVkaWFDb250cm9sc0hvc3RKU1dyYXBwZXJPYmplY3QgPSBK
U0M6OmpzRHluYW1pY0Nhc3Q8SlNDOjpKU09iamVjdCo+KHZtLCBtZWRpYUNvbnRyb2xzSG9zdEpT
V3JhcHBlcik7CiAgICAgICAgIGlmICghbWVkaWFDb250cm9sc0hvc3RKU1dyYXBwZXJPYmplY3Qp
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgYXV0byBjb250cm9sbGVyID0g
SlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZleGVjLnZtKCksICJjb250cm9sbGVyIik7Cisg
ICAgICAgIGF1dG8gY29udHJvbGxlciA9IEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwg
ImNvbnRyb2xsZXIiKTsKIAogICAgICAgICBBU1NFUlQoIWNvbnRyb2xsZXJPYmplY3QtPmhhc1By
b3BlcnR5KCZleGVjLCBjb250cm9sbGVyKSk7CiAKLSAgICAgICAgbWVkaWFDb250cm9sc0hvc3RK
U1dyYXBwZXJPYmplY3QtPnB1dERpcmVjdChleGVjLnZtKCksIGNvbnRyb2xsZXIsIGNvbnRyb2xs
ZXJWYWx1ZSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IEpTQzo6UHJvcGVy
dHlBdHRyaWJ1dGU6OkRvbnRFbnVtIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkp
OworICAgICAgICBtZWRpYUNvbnRyb2xzSG9zdEpTV3JhcHBlck9iamVjdC0+cHV0RGlyZWN0KHZt
LCBjb250cm9sbGVyLCBjb250cm9sbGVyVmFsdWUsIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRv
bnREZWxldGUgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8IEpTQzo6UHJvcGVy
dHlBdHRyaWJ1dGU6OlJlYWRPbmx5KTsKIAogICAgICAgICB1cGRhdGVQYWdlU2NhbGVGYWN0b3JK
U1Byb3BlcnR5KCk7CiAgICAgICAgIHVwZGF0ZVVzZXNMVFJVc2VySW50ZXJmYWNlTGF5b3V0RGly
ZWN0aW9uSlNQcm9wZXJ0eSgpOwpAQCAtNzQ0NCw3ICs3NDQ0LDcgQEAgdm9pZCBIVE1MTWVkaWFF
bGVtZW50Ojp1cGRhdGVNZWRpYUNvbnRybwogCiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIGZhbHNlKTsKIAotICAgICAgICBhdXRvIGZ1bmN0aW9uVmFsdWUgPSBjb250cm9sbGVy
T2JqZWN0LT5nZXQoJmV4ZWMsIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmZXhlYywgImhh
bmRsZVByZXNlbnRhdGlvbk1vZGVDaGFuZ2UiKSk7CisgICAgICAgIGF1dG8gZnVuY3Rpb25WYWx1
ZSA9IGNvbnRyb2xsZXJPYmplY3QtPmdldCgmZXhlYywgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKHZtLCAiaGFuZGxlUHJlc2VudGF0aW9uTW9kZUNoYW5nZSIpKTsKICAgICAgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSB8fCBmdW5jdGlvblZhbHVlLmlzVW5kZWZpbmVkT3JO
dWxsKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTc0ODcsNyArNzQ4Nyw3IEBA
IFN0cmluZyBIVE1MTWVkaWFFbGVtZW50OjpnZXRDdXJyZW50TWVkaWEKIAogICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7CiAKLSAgICAgICAgYXV0byBmdW5jdGlvblZh
bHVlID0gY29udHJvbGxlck9iamVjdC0+Z2V0KCZleGVjLCBKU0M6OklkZW50aWZpZXI6OmZyb21T
dHJpbmcoJmV4ZWMsICJnZXRDdXJyZW50Q29udHJvbHNTdGF0dXMiKSk7CisgICAgICAgIGF1dG8g
ZnVuY3Rpb25WYWx1ZSA9IGNvbnRyb2xsZXJPYmplY3QtPmdldCgmZXhlYywgSlNDOjpJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKHZtLCAiZ2V0Q3VycmVudENvbnRyb2xzU3RhdHVzIikpOwogICAgICAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpIHx8IGZ1bmN0aW9uVmFsdWUuaXNVbmRl
ZmluZWRPck51bGwoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIApJbmRleDogU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAy
NDkxMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00MDUsNyArNDA1LDcgQEAgdm9pZCBIVE1MUGx1Z0luSW1hZ2VF
bGVtZW50OjpkaWRBZGRVc2VyQQogICAgIEFTU0VSVCghYXJnTGlzdC5oYXNPdmVyZmxvd2VkKCkp
OwogCiAgICAgLy8gSXQgaXMgZXhwZWN0ZWQgdGhlIEpTIGZpbGUgcHJvdmlkZXMgYSBjcmVhdGVP
dmVybGF5KHNoYWRvd1Jvb3QsIHRpdGxlLCBzdWJ0aXRsZSkgZnVuY3Rpb24uCi0gICAgYXV0byog
b3ZlcmxheSA9IGdsb2JhbE9iamVjdC5nZXQoJnN0YXRlLCBKU0M6OklkZW50aWZpZXI6OmZyb21T
dHJpbmcoJnN0YXRlLCAiY3JlYXRlT3ZlcmxheSIpKS50b09iamVjdCgmc3RhdGUpOworICAgIGF1
dG8qIG92ZXJsYXkgPSBnbG9iYWxPYmplY3QuZ2V0KCZzdGF0ZSwgSlNDOjpJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCAiY3JlYXRlT3ZlcmxheSIpKS50b09iamVjdCgmc3RhdGUpOwogICAgIEFT
U0VSVCghb3ZlcmxheSA9PSAhIXNjb3BlLmV4Y2VwdGlvbigpKTsKICAgICBpZiAoIW92ZXJsYXkp
IHsKICAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuY3BwCShyZXZpc2lvbiAy
NDkxMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDctMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDctMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmln
aHQgKEMpIDIwMDggTWF0dCBMaWxlayA8d2Via2l0QG1hdHRsaWxlay5jb20+CiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CkBAIC0xNTgsNyArMTU4LDcgQEAgdm9pZCBJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OmFk
ZFNlbGZUb0dsbwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKIAog
ICAgIGF1dG8mIGdsb2JhbE9iamVjdCA9ICpKU0M6OmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+
KHN0YXRlLmxleGljYWxHbG9iYWxPYmplY3QoKSk7Ci0gICAgZ2xvYmFsT2JqZWN0LnB1dERpcmVj
dCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgIkluc3BlY3RvckZyb250ZW5k
SG9zdCIpLCB0b0pTPElETEludGVyZmFjZTxJbnNwZWN0b3JGcm9udGVuZEhvc3Q+PihzdGF0ZSwg
Z2xvYmFsT2JqZWN0LCAqdGhpcykpOworICAgIGdsb2JhbE9iamVjdC5wdXREaXJlY3Qodm0sIEpT
Qzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIkluc3BlY3RvckZyb250ZW5kSG9zdCIpLCB0
b0pTPElETEludGVyZmFjZTxJbnNwZWN0b3JGcm9udGVuZEhvc3Q+PihzdGF0ZSwgZ2xvYmFsT2Jq
ZWN0LCAqdGhpcykpOwogICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJlcG9ydEV4Y2VwdGlvbigmc3RhdGUsIHNjb3BlLmV4Y2VwdGlvbigpKTsKIH0KQEAgLTQw
OSw3ICs0MDksOCBAQCB2b2lkIEluc3BlY3RvckZyb250ZW5kSG9zdDo6c2hvd0NvbnRleHRNCiAg
ICAgQVNTRVJUKG1fZnJvbnRlbmRQYWdlKTsKIAogICAgIGF1dG8mIHN0YXRlID0gKmV4ZWNTdGF0
ZUZyb21QYWdlKGRlYnVnZ2VyV29ybGQoKSwgbV9mcm9udGVuZFBhZ2UpOwotICAgIGF1dG8gdmFs
dWUgPSBzdGF0ZS5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmdldCgmc3RhdGUsIEpTQzo6SWRlbnRp
Zmllcjo6ZnJvbVN0cmluZygmc3RhdGUudm0oKSwgIkluc3BlY3RvckZyb250ZW5kQVBJIikpOwor
ICAgIGF1dG8mIHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHZhbHVlID0gc3RhdGUubGV4aWNh
bEdsb2JhbE9iamVjdCgpLT5nZXQoJnN0YXRlLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmco
dm0sICJJbnNwZWN0b3JGcm9udGVuZEFQSSIpKTsKICAgICBBU1NFUlQodmFsdWUpOwogICAgIEFT
U0VSVCh2YWx1ZS5pc09iamVjdCgpKTsKICAgICBhdXRvKiBmcm9udGVuZEFQSU9iamVjdCA9IGFz
T2JqZWN0KHZhbHVlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9XZWJJbmplY3Rl
ZFNjcmlwdEhvc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9X
ZWJJbmplY3RlZFNjcmlwdEhvc3QuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvV2ViSW5qZWN0ZWRTY3JpcHRIb3N0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTQ4LDEzICs0OCwxMyBAQCBKU1ZhbHVlIFdlYkluamVjdGVkU2NyaXB0SG9zdDo6c3VidHlw
ZShFCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBpZiAodmFsdWUuaW5oZXJpdHM8
SlNOb2RlPih2bSkpCi0gICAgICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywgIm5v
ZGUiX3MpOworICAgICAgICByZXR1cm4ganNOb250cml2aWFsU3RyaW5nKHZtLCAibm9kZSJfcyk7
CiAgICAgaWYgKHZhbHVlLmluaGVyaXRzPEpTTm9kZUxpc3Q+KHZtKSkKLSAgICAgICAgcmV0dXJu
IGpzTm9udHJpdmlhbFN0cmluZyhleGVjLCAiYXJyYXkiX3MpOworICAgICAgICByZXR1cm4ganNO
b250cml2aWFsU3RyaW5nKHZtLCAiYXJyYXkiX3MpOwogICAgIGlmICh2YWx1ZS5pbmhlcml0czxK
U0hUTUxDb2xsZWN0aW9uPih2bSkpCi0gICAgICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmco
ZXhlYywgImFycmF5Il9zKTsKKyAgICAgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyh2bSwg
ImFycmF5Il9zKTsKICAgICBpZiAodmFsdWUuaW5oZXJpdHM8SlNET01FeGNlcHRpb24+KHZtKSkK
LSAgICAgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyhleGVjLCAiZXJyb3IiX3MpOworICAg
ICAgICByZXR1cm4ganNOb250cml2aWFsU3RyaW5nKHZtLCAiZXJyb3IiX3MpOwogCiAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CiB9CkBAIC02Myw0NiArNjMsNDYgQEAgSlNWYWx1ZSBXZWJJbmpl
Y3RlZFNjcmlwdEhvc3Q6OnN1YnR5cGUoRQogc3RhdGljIEpTT2JqZWN0KiBjb25zdHJ1Y3RJbnRl
cm5hbFByb3BlcnR5KFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcmIG5hbWUs
IEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgYXV0byogb2JqZWN0ID0gY29uc3RydWN0RW1wdHlPYmpl
Y3QoZXhlYyk7Ci0gICAgb2JqZWN0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJp
bmcoZXhlYywgIm5hbWUiKSwganNTdHJpbmcoZXhlYywgbmFtZSkpOwotICAgIG9iamVjdC0+cHV0
RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJ2YWx1ZSIpLCB2YWx1ZSk7
CisgICAgb2JqZWN0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJu
YW1lIiksIGpzU3RyaW5nKHZtLCBuYW1lKSk7CisgICAgb2JqZWN0LT5wdXREaXJlY3Qodm0sIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJ2YWx1ZSIpLCB2YWx1ZSk7CiAgICAgcmV0dXJuIG9i
amVjdDsKIH0KIAogc3RhdGljIEpTT2JqZWN0KiBvYmplY3RGb3JQYXltZW50T3B0aW9ucyhWTSYg
dm0sIEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgUGF5bWVudE9wdGlvbnMmIHBheW1lbnRPcHRpb25z
KQogewogICAgIGF1dG8qIG9iamVjdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMpOwotICAg
IG9iamVjdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJyZXF1
ZXN0UGF5ZXJOYW1lIiksIGpzQm9vbGVhbihwYXltZW50T3B0aW9ucy5yZXF1ZXN0UGF5ZXJOYW1l
KSk7Ci0gICAgb2JqZWN0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhl
YywgInJlcXVlc3RQYXllckVtYWlsIiksIGpzQm9vbGVhbihwYXltZW50T3B0aW9ucy5yZXF1ZXN0
UGF5ZXJFbWFpbCkpOwotICAgIG9iamVjdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKGV4ZWMsICJyZXF1ZXN0UGF5ZXJQaG9uZSIpLCBqc0Jvb2xlYW4ocGF5bWVudE9wdGlv
bnMucmVxdWVzdFBheWVyUGhvbmUpKTsKLSAgICBvYmplY3QtPnB1dERpcmVjdCh2bSwgSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZyhleGVjLCAicmVxdWVzdFNoaXBwaW5nIiksIGpzQm9vbGVhbihwYXlt
ZW50T3B0aW9ucy5yZXF1ZXN0U2hpcHBpbmcpKTsKLSAgICBvYmplY3QtPnB1dERpcmVjdCh2bSwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCAic2hpcHBpbmdUeXBlIiksIGpzTm9udHJpdmlh
bFN0cmluZyhleGVjLCBjb252ZXJ0RW51bWVyYXRpb25Ub1N0cmluZyhwYXltZW50T3B0aW9ucy5z
aGlwcGluZ1R5cGUpKSk7CisgICAgb2JqZWN0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZy
b21TdHJpbmcodm0sICJyZXF1ZXN0UGF5ZXJOYW1lIiksIGpzQm9vbGVhbihwYXltZW50T3B0aW9u
cy5yZXF1ZXN0UGF5ZXJOYW1lKSk7CisgICAgb2JqZWN0LT5wdXREaXJlY3Qodm0sIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcodm0sICJyZXF1ZXN0UGF5ZXJFbWFpbCIpLCBqc0Jvb2xlYW4ocGF5bWVu
dE9wdGlvbnMucmVxdWVzdFBheWVyRW1haWwpKTsKKyAgICBvYmplY3QtPnB1dERpcmVjdCh2bSwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInJlcXVlc3RQYXllclBob25lIiksIGpzQm9vbGVh
bihwYXltZW50T3B0aW9ucy5yZXF1ZXN0UGF5ZXJQaG9uZSkpOworICAgIG9iamVjdC0+cHV0RGly
ZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAicmVxdWVzdFNoaXBwaW5nIiksIGpz
Qm9vbGVhbihwYXltZW50T3B0aW9ucy5yZXF1ZXN0U2hpcHBpbmcpKTsKKyAgICBvYmplY3QtPnB1
dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInNoaXBwaW5nVHlwZSIpLCBq
c05vbnRyaXZpYWxTdHJpbmcodm0sIGNvbnZlcnRFbnVtZXJhdGlvblRvU3RyaW5nKHBheW1lbnRP
cHRpb25zLnNoaXBwaW5nVHlwZSkpKTsKICAgICByZXR1cm4gb2JqZWN0OwogfQogCiBzdGF0aWMg
SlNPYmplY3QqIG9iamVjdEZvclBheW1lbnRDdXJyZW5jeUFtb3VudChWTSYgdm0sIEV4ZWNTdGF0
ZSogZXhlYywgY29uc3QgUGF5bWVudEN1cnJlbmN5QW1vdW50JiBwYXltZW50Q3VycmVuY3lBbW91
bnQpCiB7CiAgICAgYXV0byogb2JqZWN0ID0gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYyk7Ci0g
ICAgb2JqZWN0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgImN1
cnJlbmN5IiksIGpzU3RyaW5nKGV4ZWMsIHBheW1lbnRDdXJyZW5jeUFtb3VudC5jdXJyZW5jeSkp
OwotICAgIG9iamVjdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMs
ICJ2YWx1ZSIpLCBqc1N0cmluZyhleGVjLCBwYXltZW50Q3VycmVuY3lBbW91bnQudmFsdWUpKTsK
KyAgICBvYmplY3QtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImN1
cnJlbmN5IiksIGpzU3RyaW5nKHZtLCBwYXltZW50Q3VycmVuY3lBbW91bnQuY3VycmVuY3kpKTsK
KyAgICBvYmplY3QtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInZh
bHVlIiksIGpzU3RyaW5nKHZtLCBwYXltZW50Q3VycmVuY3lBbW91bnQudmFsdWUpKTsKICAgICBy
ZXR1cm4gb2JqZWN0OwogfQogCiBzdGF0aWMgSlNPYmplY3QqIG9iamVjdEZvclBheW1lbnRJdGVt
KFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBjb25zdCBQYXltZW50SXRlbSYgcGF5bWVudEl0ZW0p
CiB7CiAgICAgYXV0byogb2JqZWN0ID0gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYyk7Ci0gICAg
b2JqZWN0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgImxhYmVs
IiksIGpzU3RyaW5nKGV4ZWMsIHBheW1lbnRJdGVtLmxhYmVsKSk7Ci0gICAgb2JqZWN0LT5wdXRE
aXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgImFtb3VudCIpLCBvYmplY3RG
b3JQYXltZW50Q3VycmVuY3lBbW91bnQodm0sIGV4ZWMsIHBheW1lbnRJdGVtLmFtb3VudCkpOwot
ICAgIG9iamVjdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJw
ZW5kaW5nIiksIGpzQm9vbGVhbihwYXltZW50SXRlbS5wZW5kaW5nKSk7CisgICAgb2JqZWN0LT5w
dXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJsYWJlbCIpLCBqc1N0cmlu
Zyh2bSwgcGF5bWVudEl0ZW0ubGFiZWwpKTsKKyAgICBvYmplY3QtPnB1dERpcmVjdCh2bSwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImFtb3VudCIpLCBvYmplY3RGb3JQYXltZW50Q3VycmVu
Y3lBbW91bnQodm0sIGV4ZWMsIHBheW1lbnRJdGVtLmFtb3VudCkpOworICAgIG9iamVjdC0+cHV0
RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAicGVuZGluZyIpLCBqc0Jvb2xl
YW4ocGF5bWVudEl0ZW0ucGVuZGluZykpOwogICAgIHJldHVybiBvYmplY3Q7CiB9CiAKIHN0YXRp
YyBKU09iamVjdCogb2JqZWN0Rm9yUGF5bWVudFNoaXBwaW5nT3B0aW9uKFZNJiB2bSwgRXhlY1N0
YXRlKiBleGVjLCBjb25zdCBQYXltZW50U2hpcHBpbmdPcHRpb24mIHBheW1lbnRTaGlwcGluZ09w
dGlvbikKIHsKICAgICBhdXRvKiBvYmplY3QgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjKTsK
LSAgICBvYmplY3QtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCAi
aWQiKSwganNTdHJpbmcoZXhlYywgcGF5bWVudFNoaXBwaW5nT3B0aW9uLmlkKSk7Ci0gICAgb2Jq
ZWN0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgImxhYmVsIiks
IGpzU3RyaW5nKGV4ZWMsIHBheW1lbnRTaGlwcGluZ09wdGlvbi5sYWJlbCkpOwotICAgIG9iamVj
dC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJhbW91bnQiKSwg
b2JqZWN0Rm9yUGF5bWVudEN1cnJlbmN5QW1vdW50KHZtLCBleGVjLCBwYXltZW50U2hpcHBpbmdP
cHRpb24uYW1vdW50KSk7Ci0gICAgb2JqZWN0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZy
b21TdHJpbmcoZXhlYywgInNlbGVjdGVkIiksIGpzQm9vbGVhbihwYXltZW50U2hpcHBpbmdPcHRp
b24uc2VsZWN0ZWQpKTsKKyAgICBvYmplY3QtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyh2bSwgImlkIiksIGpzU3RyaW5nKHZtLCBwYXltZW50U2hpcHBpbmdPcHRpb24uaWQp
KTsKKyAgICBvYmplY3QtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwg
ImxhYmVsIiksIGpzU3RyaW5nKHZtLCBwYXltZW50U2hpcHBpbmdPcHRpb24ubGFiZWwpKTsKKyAg
ICBvYmplY3QtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImFtb3Vu
dCIpLCBvYmplY3RGb3JQYXltZW50Q3VycmVuY3lBbW91bnQodm0sIGV4ZWMsIHBheW1lbnRTaGlw
cGluZ09wdGlvbi5hbW91bnQpKTsKKyAgICBvYmplY3QtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZyh2bSwgInNlbGVjdGVkIiksIGpzQm9vbGVhbihwYXltZW50U2hpcHBpbmdP
cHRpb24uc2VsZWN0ZWQpKTsKICAgICByZXR1cm4gb2JqZWN0OwogfQogCkBAIC0xMTMsMTAgKzEx
MywxMCBAQCBzdGF0aWMgSlNPYmplY3QqIG9iamVjdEZvclBheW1lbnREZXRhaWxzCiAgICAgICAg
IGFkZGl0aW9uYWxEaXNwbGF5SXRlbXMtPnB1dERpcmVjdEluZGV4KGV4ZWMsIGksIG9iamVjdEZv
clBheW1lbnRJdGVtKHZtLCBleGVjLCBtb2RpZmllci5hZGRpdGlvbmFsRGlzcGxheUl0ZW1zW2ld
KSk7CiAKICAgICBhdXRvKiBvYmplY3QgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjKTsKLSAg
ICBvYmplY3QtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCAic3Vw
cG9ydGVkTWV0aG9kcyIpLCBqc1N0cmluZyhleGVjLCBtb2RpZmllci5zdXBwb3J0ZWRNZXRob2Rz
KSk7Ci0gICAgb2JqZWN0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhl
YywgInRvdGFsIiksICFtb2RpZmllci50b3RhbCA/IGpzTnVsbCgpIDogb2JqZWN0Rm9yUGF5bWVu
dEl0ZW0odm0sIGV4ZWMsICptb2RpZmllci50b3RhbCkpOwotICAgIG9iamVjdC0+cHV0RGlyZWN0
KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJhZGRpdGlvbmFsRGlzcGxheUl0ZW1z
IiksIGFkZGl0aW9uYWxEaXNwbGF5SXRlbXMpOwotICAgIG9iamVjdC0+cHV0RGlyZWN0KHZtLCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJkYXRhIiksICFtb2RpZmllci5kYXRhID8ganNO
dWxsKCkgOiBtb2RpZmllci5kYXRhLmdldCgpKTsKKyAgICBvYmplY3QtPnB1dERpcmVjdCh2bSwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInN1cHBvcnRlZE1ldGhvZHMiKSwganNTdHJpbmco
dm0sIG1vZGlmaWVyLnN1cHBvcnRlZE1ldGhvZHMpKTsKKyAgICBvYmplY3QtPnB1dERpcmVjdCh2
bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInRvdGFsIiksICFtb2RpZmllci50b3RhbCA/
IGpzTnVsbCgpIDogb2JqZWN0Rm9yUGF5bWVudEl0ZW0odm0sIGV4ZWMsICptb2RpZmllci50b3Rh
bCkpOworICAgIG9iamVjdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZt
LCAiYWRkaXRpb25hbERpc3BsYXlJdGVtcyIpLCBhZGRpdGlvbmFsRGlzcGxheUl0ZW1zKTsKKyAg
ICBvYmplY3QtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImRhdGEi
KSwgIW1vZGlmaWVyLmRhdGEgPyBqc051bGwoKSA6IG1vZGlmaWVyLmRhdGEuZ2V0KCkpOwogICAg
IHJldHVybiBvYmplY3Q7CiB9CiAKQEAgLTEzNSwyNyArMTM1LDI3IEBAIHN0YXRpYyBKU09iamVj
dCogb2JqZWN0Rm9yUGF5bWVudERldGFpbHMKICAgICAgICAgbW9kaWZpZXJzLT5wdXREaXJlY3RJ
bmRleChleGVjLCBpLCBvYmplY3RGb3JQYXltZW50RGV0YWlsc01vZGlmaWVyKHZtLCBleGVjLCBw
YXltZW50RGV0YWlscy5tb2RpZmllcnNbaV0pKTsKIAogICAgIGF1dG8qIG9iamVjdCA9IGNvbnN0
cnVjdEVtcHR5T2JqZWN0KGV4ZWMpOwotICAgIG9iamVjdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJpZCIpLCBqc1N0cmluZyhleGVjLCBwYXltZW50RGV0YWls
cy5pZCkpOwotICAgIG9iamVjdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KGV4ZWMsICJ0b3RhbCIpLCBvYmplY3RGb3JQYXltZW50SXRlbSh2bSwgZXhlYywgcGF5bWVudERl
dGFpbHMudG90YWwpKTsKLSAgICBvYmplY3QtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyhleGVjLCAiZGlzcGxheUl0ZW1zIiksIGRpc3BsYXlJdGVtcyk7Ci0gICAgb2JqZWN0
LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgInNoaXBwaW5nT3B0
aW9ucyIpLCBzaGlwcGluZ09wdGlvbnMpOwotICAgIG9iamVjdC0+cHV0RGlyZWN0KHZtLCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJtb2RpZmllcnMiKSwgbW9kaWZpZXJzKTsKKyAgICBv
YmplY3QtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImlkIiksIGpz
U3RyaW5nKHZtLCBwYXltZW50RGV0YWlscy5pZCkpOworICAgIG9iamVjdC0+cHV0RGlyZWN0KHZt
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAidG90YWwiKSwgb2JqZWN0Rm9yUGF5bWVudEl0
ZW0odm0sIGV4ZWMsIHBheW1lbnREZXRhaWxzLnRvdGFsKSk7CisgICAgb2JqZWN0LT5wdXREaXJl
Y3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJkaXNwbGF5SXRlbXMiKSwgZGlzcGxh
eUl0ZW1zKTsKKyAgICBvYmplY3QtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zyh2bSwgInNoaXBwaW5nT3B0aW9ucyIpLCBzaGlwcGluZ09wdGlvbnMpOworICAgIG9iamVjdC0+
cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAibW9kaWZpZXJzIiksIG1v
ZGlmaWVycyk7CiAgICAgcmV0dXJuIG9iamVjdDsKIH0KIAotc3RhdGljIEpTU3RyaW5nKiBqc1N0
cmluZ0ZvclBheW1lbnRSZXF1ZXN0U3RhdGUoVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIFBheW1l
bnRSZXF1ZXN0OjpTdGF0ZSBzdGF0ZSkKK3N0YXRpYyBKU1N0cmluZyoganNTdHJpbmdGb3JQYXlt
ZW50UmVxdWVzdFN0YXRlKFZNJiB2bSwgUGF5bWVudFJlcXVlc3Q6OlN0YXRlIHN0YXRlKQogewog
ICAgIHN3aXRjaCAoc3RhdGUpIHsKICAgICBjYXNlIFBheW1lbnRSZXF1ZXN0OjpTdGF0ZTo6Q3Jl
YXRlZDoKLSAgICAgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyhleGVjLCAiY3JlYXRlZCJf
cyk7CisgICAgICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcodm0sICJjcmVhdGVkIl9zKTsK
ICAgICBjYXNlIFBheW1lbnRSZXF1ZXN0OjpTdGF0ZTo6SW50ZXJhY3RpdmU6Ci0gICAgICAgIHJl
dHVybiBqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywgImludGVyYWN0aXZlIl9zKTsKKyAgICAgICAg
cmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyh2bSwgImludGVyYWN0aXZlIl9zKTsKICAgICBjYXNl
IFBheW1lbnRSZXF1ZXN0OjpTdGF0ZTo6Q2xvc2VkOgotICAgICAgICByZXR1cm4ganNOb250cml2
aWFsU3RyaW5nKGV4ZWMsICJjbG9zZWQiX3MpOworICAgICAgICByZXR1cm4ganNOb250cml2aWFs
U3RyaW5nKHZtLCAiY2xvc2VkIl9zKTsKICAgICB9CiAKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICByZXR1cm4ganNFbXB0eVN0cmluZygmdm0pOworICAgIHJldHVybiBqc0VtcHR5U3Ry
aW5nKHZtKTsKIH0KICNlbmRpZgogCkBAIC0xNjksNyArMTY5LDcgQEAgSlNWYWx1ZSBXZWJJbmpl
Y3RlZFNjcmlwdEhvc3Q6OmdldEludGVybgogICAgICAgICBhdXRvKiBhcnJheSA9IGNvbnN0cnVj
dEVtcHR5QXJyYXkoZXhlYywgbnVsbHB0cik7CiAgICAgICAgIGFycmF5LT5wdXREaXJlY3RJbmRl
eChleGVjLCBpbmRleCsrLCBjb25zdHJ1Y3RJbnRlcm5hbFByb3BlcnR5KHZtLCBleGVjLCAib3B0
aW9ucyJfcywgb2JqZWN0Rm9yUGF5bWVudE9wdGlvbnModm0sIGV4ZWMsIHBheW1lbnRSZXF1ZXN0
LT5wYXltZW50T3B0aW9ucygpKSkpOwogICAgICAgICBhcnJheS0+cHV0RGlyZWN0SW5kZXgoZXhl
YywgaW5kZXgrKywgY29uc3RydWN0SW50ZXJuYWxQcm9wZXJ0eSh2bSwgZXhlYywgImRldGFpbHMi
X3MsIG9iamVjdEZvclBheW1lbnREZXRhaWxzKHZtLCBleGVjLCBwYXltZW50UmVxdWVzdC0+cGF5
bWVudERldGFpbHMoKSkpKTsKLSAgICAgICAgYXJyYXktPnB1dERpcmVjdEluZGV4KGV4ZWMsIGlu
ZGV4KyssIGNvbnN0cnVjdEludGVybmFsUHJvcGVydHkodm0sIGV4ZWMsICJzdGF0ZSJfcywganNT
dHJpbmdGb3JQYXltZW50UmVxdWVzdFN0YXRlKHZtLCBleGVjLCBwYXltZW50UmVxdWVzdC0+c3Rh
dGUoKSkpKTsKKyAgICAgICAgYXJyYXktPnB1dERpcmVjdEluZGV4KGV4ZWMsIGluZGV4KyssIGNv
bnN0cnVjdEludGVybmFsUHJvcGVydHkodm0sIGV4ZWMsICJzdGF0ZSJfcywganNTdHJpbmdGb3JQ
YXltZW50UmVxdWVzdFN0YXRlKHZtLCBwYXltZW50UmVxdWVzdC0+c3RhdGUoKSkpKTsKICAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICAgICAgcmV0dXJuIGFycmF5
OwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9y
Q2FudmFzQWdlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9h
Z2VudHMvSW5zcGVjdG9yQ2FudmFzQWdlbnQuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNhbnZhc0FnZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMTkg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC01MzAsMTMgKzUzMCwxNCBAQCB2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50Ojpj
b25zb2xlU3RhcnRSCiAKICAgICBSZWNvcmRpbmdPcHRpb25zIHJlY29yZGluZ09wdGlvbnM7CiAg
ICAgaWYgKG9wdGlvbnMpIHsKLSAgICAgICAgaWYgKEpTQzo6SlNWYWx1ZSBvcHRpb25TaW5nbGVG
cmFtZSA9IG9wdGlvbnMtPmdldCgmZXhlYywgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZl
eGVjLCAic2luZ2xlRnJhbWUiKSkpCisgICAgICAgIEpTQzo6Vk0mIHZtID0gZXhlYy52bSgpOwor
ICAgICAgICBpZiAoSlNDOjpKU1ZhbHVlIG9wdGlvblNpbmdsZUZyYW1lID0gb3B0aW9ucy0+Z2V0
KCZleGVjLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJzaW5nbGVGcmFtZSIpKSkK
ICAgICAgICAgICAgIHJlY29yZGluZ09wdGlvbnMuZnJhbWVDb3VudCA9IG9wdGlvblNpbmdsZUZy
YW1lLnRvQm9vbGVhbigmZXhlYykgPyAxIDogMDsKLSAgICAgICAgaWYgKEpTQzo6SlNWYWx1ZSBv
cHRpb25GcmFtZUNvdW50ID0gb3B0aW9ucy0+Z2V0KCZleGVjLCBKU0M6OklkZW50aWZpZXI6OmZy
b21TdHJpbmcoJmV4ZWMsICJmcmFtZUNvdW50IikpKQorICAgICAgICBpZiAoSlNDOjpKU1ZhbHVl
IG9wdGlvbkZyYW1lQ291bnQgPSBvcHRpb25zLT5nZXQoJmV4ZWMsIEpTQzo6SWRlbnRpZmllcjo6
ZnJvbVN0cmluZyh2bSwgImZyYW1lQ291bnQiKSkpCiAgICAgICAgICAgICByZWNvcmRpbmdPcHRp
b25zLmZyYW1lQ291bnQgPSBvcHRpb25GcmFtZUNvdW50LnRvTnVtYmVyKCZleGVjKTsKLSAgICAg
ICAgaWYgKEpTQzo6SlNWYWx1ZSBvcHRpb25NZW1vcnlMaW1pdCA9IG9wdGlvbnMtPmdldCgmZXhl
YywgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZleGVjLCAibWVtb3J5TGltaXQiKSkpCisg
ICAgICAgIGlmIChKU0M6OkpTVmFsdWUgb3B0aW9uTWVtb3J5TGltaXQgPSBvcHRpb25zLT5nZXQo
JmV4ZWMsIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIm1lbW9yeUxpbWl0IikpKQog
ICAgICAgICAgICAgcmVjb3JkaW5nT3B0aW9ucy5tZW1vcnlMaW1pdCA9IG9wdGlvbk1lbW9yeUxp
bWl0LnRvTnVtYmVyKCZleGVjKTsKLSAgICAgICAgaWYgKEpTQzo6SlNWYWx1ZSBvcHRpb25OYW1l
ID0gb3B0aW9ucy0+Z2V0KCZleGVjLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJmV4ZWMs
ICJuYW1lIikpKQorICAgICAgICBpZiAoSlNDOjpKU1ZhbHVlIG9wdGlvbk5hbWUgPSBvcHRpb25z
LT5nZXQoJmV4ZWMsIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIm5hbWUiKSkpCiAg
ICAgICAgICAgICByZWNvcmRpbmdPcHRpb25zLm5hbWUgPSBvcHRpb25OYW1lLnRvV1RGU3RyaW5n
KCZleGVjKTsKICAgICB9CiAgICAgc3RhcnRSZWNvcmRpbmcoKmluc3BlY3RvckNhbnZhcywgSW5z
cGVjdG9yOjpQcm90b2NvbDo6UmVjb3JkaW5nOjpJbml0aWF0b3I6OkNvbnNvbGUsIFdURk1vdmUo
cmVjb3JkaW5nT3B0aW9ucykpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50
cy9JbnNwZWN0b3JET01BZ2VudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01BZ2VudC5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysr
IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOS0y
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
OS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykg
MjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAy
MDA5IEpvc2VwaCBQZWNvcmFybwogICoKQEAgLTE3MDEsMTkgKzE3MDEsMjAgQEAgUmVmPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRPTTo6RXZlbnRMaXN0ZQogICAgICAgICB9CiAKICAgICAgICAgaWYg
KGhhbmRsZXJPYmplY3QgJiYgZXhlYykgewotICAgICAgICAgICAgSlNDOjpKU0Z1bmN0aW9uKiBo
YW5kbGVyRnVuY3Rpb24gPSBKU0M6OmpzRHluYW1pY0Nhc3Q8SlNDOjpKU0Z1bmN0aW9uKj4oZXhl
Yy0+dm0oKSwgaGFuZGxlck9iamVjdCk7CisgICAgICAgICAgICBKU0M6OlZNJiB2bSA9IGV4ZWMt
PnZtKCk7CisgICAgICAgICAgICBKU0M6OkpTRnVuY3Rpb24qIGhhbmRsZXJGdW5jdGlvbiA9IEpT
Qzo6anNEeW5hbWljQ2FzdDxKU0M6OkpTRnVuY3Rpb24qPih2bSwgaGFuZGxlck9iamVjdCk7CiAK
ICAgICAgICAgICAgIGlmICghaGFuZGxlckZ1bmN0aW9uKSB7Ci0gICAgICAgICAgICAgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUoZXhlYy0+dm0oKSk7CisgICAgICAgICAgICAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogCiAgICAgICAgICAgICAg
ICAgLy8gSWYgdGhlIGhhbmRsZXIgaXMgbm90IGFjdHVhbGx5IGEgZnVuY3Rpb24sIHNlZSBpZiBp
dCBpbXBsZW1lbnRzIHRoZSBFdmVudExpc3RlbmVyIGludGVyZmFjZSBhbmQgdXNlIHRoYXQuCi0g
ICAgICAgICAgICAgICAgYXV0byBoYW5kbGVFdmVudFZhbHVlID0gaGFuZGxlck9iamVjdC0+Z2V0
KGV4ZWMsIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCAiaGFuZGxlRXZlbnQiKSk7
CisgICAgICAgICAgICAgICAgYXV0byBoYW5kbGVFdmVudFZhbHVlID0gaGFuZGxlck9iamVjdC0+
Z2V0KGV4ZWMsIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImhhbmRsZUV2ZW50Iikp
OwogCiAgICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgICAgICAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKIAogICAgICAgICAgICAg
ICAgIGlmIChoYW5kbGVFdmVudFZhbHVlKQotICAgICAgICAgICAgICAgICAgICBoYW5kbGVyRnVu
Y3Rpb24gPSBKU0M6OmpzRHluYW1pY0Nhc3Q8SlNDOjpKU0Z1bmN0aW9uKj4oZXhlYy0+dm0oKSwg
aGFuZGxlRXZlbnRWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIGhhbmRsZXJGdW5jdGlvbiA9
IEpTQzo6anNEeW5hbWljQ2FzdDxKU0M6OkpTRnVuY3Rpb24qPih2bSwgaGFuZGxlRXZlbnRWYWx1
ZSk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChoYW5kbGVyRnVuY3Rpb24gJiYg
IWhhbmRsZXJGdW5jdGlvbi0+aXNIb3N0T3JCdWlsdGluRnVuY3Rpb24oKSkgewpAQCAtMTcyMiw3
ICsxNzIzLDcgQEAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6RXZlbnRMaXN0ZQogICAg
ICAgICAgICAgICAgIGlmIChoYW5kbGVyRnVuY3Rpb24gIT0gaGFuZGxlck9iamVjdCkKICAgICAg
ICAgICAgICAgICAgICAgaGFuZGxlck5hbWUgPSBKU0M6OkpTT2JqZWN0OjpjYWxjdWxhdGVkQ2xh
c3NOYW1lKGhhbmRsZXJPYmplY3QpOwogICAgICAgICAgICAgICAgIGlmIChoYW5kbGVyTmFtZS5p
c0VtcHR5KCkgfHwgaGFuZGxlck5hbWUgPT0gIk9iamVjdCJfcykKLSAgICAgICAgICAgICAgICAg
ICAgaGFuZGxlck5hbWUgPSBoYW5kbGVyRnVuY3Rpb24tPmNhbGN1bGF0ZWREaXNwbGF5TmFtZShl
eGVjLT52bSgpKTsKKyAgICAgICAgICAgICAgICAgICAgaGFuZGxlck5hbWUgPSBoYW5kbGVyRnVu
Y3Rpb24tPmNhbGN1bGF0ZWREaXNwbGF5TmFtZSh2bSk7CiAKICAgICAgICAgICAgICAgICBpZiAo
YXV0byBleGVjdXRhYmxlID0gaGFuZGxlckZ1bmN0aW9uLT5qc0V4ZWN1dGFibGUoKSkgewogICAg
ICAgICAgICAgICAgICAgICBsaW5lTnVtYmVyID0gZXhlY3V0YWJsZS0+Zmlyc3RMaW5lKCkgLSAx
OwpAQCAtMjYwOCw3ICsyNjA5LDcgQEAgTm9kZSogSW5zcGVjdG9yRE9NQWdlbnQ6OnNjcmlwdFZh
bHVlQXNObwogewogICAgIGlmICghdmFsdWUgfHwgIXZhbHVlLmlzT2JqZWN0KCkpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBKU05vZGU6OnRvV3JhcHBlZCgqdmFsdWUuZ2V0
T2JqZWN0KCktPnZtKCksIHZhbHVlLmdldE9iamVjdCgpKTsKKyAgICByZXR1cm4gSlNOb2RlOjp0
b1dyYXBwZWQodmFsdWUuZ2V0T2JqZWN0KCktPnZtKCksIHZhbHVlLmdldE9iamVjdCgpKTsKIH0K
IAogSlNDOjpKU1ZhbHVlIEluc3BlY3RvckRPTUFnZW50Ojpub2RlQXNTY3JpcHRWYWx1ZShKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIE5vZGUqIG5vZGUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZUF1ZGl0QWdlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlQXVkaXRBZ2VudC5jcHAJKHJldmlz
aW9uIDI0OTEyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdl
QXVkaXRBZ2VudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg0LDE2ICs4NCwxNyBAQCB2b2lkIFBh
Z2VBdWRpdEFnZW50Ojpwb3B1bGF0ZUF1ZGl0T2JqZWN0CiAgICAgICAgIHJldHVybjsKIAogICAg
IGlmIChhdXRvKiBnbG9iYWxPYmplY3QgPSBKU0M6OmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+
KGV4ZWNTdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKSkgewotICAgICAgICBKU0M6OkpTTG9j
a0hvbGRlciBsb2NrKGV4ZWNTdGF0ZSk7CisgICAgICAgIEpTQzo6Vk0mIHZtID0gZ2xvYmFsT2Jq
ZWN0LT52bSgpOworICAgICAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKHZtKTsKIAogICAgICAg
ICBpZiAoSlNDOjpKU1ZhbHVlIGpzSW5zcGVjdG9yQXVkaXRBY2Nlc3NpYmlsaXR5T2JqZWN0ID0g
dG9KU05ld2x5Q3JlYXRlZChleGVjU3RhdGUsIGdsb2JhbE9iamVjdCwgSW5zcGVjdG9yQXVkaXRB
Y2Nlc3NpYmlsaXR5T2JqZWN0OjpjcmVhdGUoKnRoaXMpKSkKLSAgICAgICAgICAgIGF1ZGl0T2Jq
ZWN0LT5wdXREaXJlY3QoZXhlY1N0YXRlLT52bSgpLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJp
bmcoZXhlY1N0YXRlLCAiQWNjZXNzaWJpbGl0eSIpLCBqc0luc3BlY3RvckF1ZGl0QWNjZXNzaWJp
bGl0eU9iamVjdCk7CisgICAgICAgICAgICBhdWRpdE9iamVjdC0+cHV0RGlyZWN0KHZtLCBKU0M6
OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJBY2Nlc3NpYmlsaXR5IiksIGpzSW5zcGVjdG9y
QXVkaXRBY2Nlc3NpYmlsaXR5T2JqZWN0KTsKIAogICAgICAgICBpZiAoSlNDOjpKU1ZhbHVlIGpz
SW5zcGVjdG9yQXVkaXRET01PYmplY3QgPSB0b0pTTmV3bHlDcmVhdGVkKGV4ZWNTdGF0ZSwgZ2xv
YmFsT2JqZWN0LCBJbnNwZWN0b3JBdWRpdERPTU9iamVjdDo6Y3JlYXRlKCp0aGlzKSkpCi0gICAg
ICAgICAgICBhdWRpdE9iamVjdC0+cHV0RGlyZWN0KGV4ZWNTdGF0ZS0+dm0oKSwgSlNDOjpJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWNTdGF0ZSwgIkRPTSIpLCBqc0luc3BlY3RvckF1ZGl0RE9N
T2JqZWN0KTsKKyAgICAgICAgICAgIGF1ZGl0T2JqZWN0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRl
bnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIkRPTSIpLCBqc0luc3BlY3RvckF1ZGl0RE9NT2JqZWN0
KTsKIAogICAgICAgICBpZiAoSlNDOjpKU1ZhbHVlIGpzSW5zcGVjdG9yQXVkaXRSZXNvdXJjZXNP
YmplY3QgPSB0b0pTTmV3bHlDcmVhdGVkKGV4ZWNTdGF0ZSwgZ2xvYmFsT2JqZWN0LCBJbnNwZWN0
b3JBdWRpdFJlc291cmNlc09iamVjdDo6Y3JlYXRlKCp0aGlzKSkpCi0gICAgICAgICAgICBhdWRp
dE9iamVjdC0+cHV0RGlyZWN0KGV4ZWNTdGF0ZS0+dm0oKSwgSlNDOjpJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKGV4ZWNTdGF0ZSwgIlJlc291cmNlcyIpLCBqc0luc3BlY3RvckF1ZGl0UmVzb3VyY2Vz
T2JqZWN0KTsKKyAgICAgICAgICAgIGF1ZGl0T2JqZWN0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRl
bnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIlJlc291cmNlcyIpLCBqc0luc3BlY3RvckF1ZGl0UmVz
b3VyY2VzT2JqZWN0KTsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFn
ZUNvbnNvbGVDbGllbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFn
ZUNvbnNvbGVDbGllbnQuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9w
YWdlL1BhZ2VDb25zb2xlQ2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMDIsMTMgKzMw
MiwxNCBAQCBzdGF0aWMgT3B0aW9uYWw8U3RyaW5nPiBzbmFwc2hvdENhbnZhcyhICiAKIHZvaWQg
UGFnZUNvbnNvbGVDbGllbnQ6OnNjcmVlbnNob3QoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBSZWY8
U2NyaXB0QXJndW1lbnRzPiYmIGFyZ3VtZW50cykKIHsKKyAgICBKU0M6OlZNJiB2bSA9IHN0YXRl
LT52bSgpOwogICAgIFN0cmluZyBkYXRhVVJMOwogICAgIEpTQzo6SlNWYWx1ZSB0YXJnZXQ7CiAK
ICAgICBpZiAoYXJndW1lbnRzLT5hcmd1bWVudENvdW50KCkpIHsKICAgICAgICAgYXV0byBwb3Nz
aWJsZVRhcmdldCA9IGFyZ3VtZW50cy0+YXJndW1lbnRBdCgwKTsKIAotICAgICAgICBpZiAoYXV0
byogbm9kZSA9IEpTTm9kZTo6dG9XcmFwcGVkKHN0YXRlLT52bSgpLCBwb3NzaWJsZVRhcmdldCkp
IHsKKyAgICAgICAgaWYgKGF1dG8qIG5vZGUgPSBKU05vZGU6OnRvV3JhcHBlZCh2bSwgcG9zc2li
bGVUYXJnZXQpKSB7CiAgICAgICAgICAgICB0YXJnZXQgPSBwb3NzaWJsZVRhcmdldDsKICAgICAg
ICAgICAgIGlmIChVTkxJS0VMWShJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246Omhhc0Zyb250ZW5k
cygpKSkgewogICAgICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gc25h
cHNob3Q7CkBAIC0zNTcsNyArMzU4LDcgQEAgdm9pZCBQYWdlQ29uc29sZUNsaWVudDo6c2NyZWVu
c2hvdChKU0M6OgogICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVVSTCA9IHNuYXBzaG90LT50
b0RhdGFVUkwoImltYWdlL3BuZyJfcywgV1RGOjpudWxsb3B0LCBQcmVzZXJ2ZVJlc29sdXRpb246
Olllcyk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2Ug
aWYgKGF1dG8qIGltYWdlRGF0YSA9IEpTSW1hZ2VEYXRhOjp0b1dyYXBwZWQoc3RhdGUtPnZtKCks
IHBvc3NpYmxlVGFyZ2V0KSkgeworICAgICAgICB9IGVsc2UgaWYgKGF1dG8qIGltYWdlRGF0YSA9
IEpTSW1hZ2VEYXRhOjp0b1dyYXBwZWQodm0sIHBvc3NpYmxlVGFyZ2V0KSkgewogICAgICAgICAg
ICAgdGFyZ2V0ID0gcG9zc2libGVUYXJnZXQ7CiAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpoYXNGcm9udGVuZHMoKSkpIHsKICAgICAgICAgICAgICAg
ICBhdXRvIHNvdXJjZVNpemUgPSBpbWFnZURhdGEtPnNpemUoKTsKQEAgLTM2NywxMyArMzY4LDEz
IEBAIHZvaWQgUGFnZUNvbnNvbGVDbGllbnQ6OnNjcmVlbnNob3QoSlNDOjoKICAgICAgICAgICAg
ICAgICAgICAgZGF0YVVSTCA9IGltYWdlQnVmZmVyLT50b0RhdGFVUkwoImltYWdlL3BuZyJfcywg
V1RGOjpudWxsb3B0LCBQcmVzZXJ2ZVJlc29sdXRpb246Olllcyk7CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKGF1dG8qIGltYWdlQml0bWFwID0g
SlNJbWFnZUJpdG1hcDo6dG9XcmFwcGVkKHN0YXRlLT52bSgpLCBwb3NzaWJsZVRhcmdldCkpIHsK
KyAgICAgICAgfSBlbHNlIGlmIChhdXRvKiBpbWFnZUJpdG1hcCA9IEpTSW1hZ2VCaXRtYXA6OnRv
V3JhcHBlZCh2bSwgcG9zc2libGVUYXJnZXQpKSB7CiAgICAgICAgICAgICB0YXJnZXQgPSBwb3Nz
aWJsZVRhcmdldDsKICAgICAgICAgICAgIGlmIChVTkxJS0VMWShJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb246Omhhc0Zyb250ZW5kcygpKSkgewogICAgICAgICAgICAgICAgIGlmIChhdXRvKiBpbWFn
ZUJ1ZmZlciA9IGltYWdlQml0bWFwLT5idWZmZXIoKSkKICAgICAgICAgICAgICAgICAgICAgZGF0
YVVSTCA9IGltYWdlQnVmZmVyLT50b0RhdGFVUkwoImltYWdlL3BuZyJfcywgV1RGOjpudWxsb3B0
LCBQcmVzZXJ2ZVJlc29sdXRpb246Olllcyk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxz
ZSBpZiAoYXV0byogY29udGV4dCA9IGNhbnZhc1JlbmRlcmluZ0NvbnRleHQoc3RhdGUtPnZtKCks
IHBvc3NpYmxlVGFyZ2V0KSkgeworICAgICAgICB9IGVsc2UgaWYgKGF1dG8qIGNvbnRleHQgPSBj
YW52YXNSZW5kZXJpbmdDb250ZXh0KHZtLCBwb3NzaWJsZVRhcmdldCkpIHsKICAgICAgICAgICAg
IGF1dG8mIGNhbnZhcyA9IGNvbnRleHQtPmNhbnZhc0Jhc2UoKTsKICAgICAgICAgICAgIGlmIChp
czxIVE1MQ2FudmFzRWxlbWVudD4oY2FudmFzKSkgewogICAgICAgICAgICAgICAgIHRhcmdldCA9
IHBvc3NpYmxlVGFyZ2V0OwpAQCAtNDA4LDkgKzQwOSw5IEBAIHZvaWQgUGFnZUNvbnNvbGVDbGll
bnQ6OnNjcmVlbnNob3QoSlNDOjoKICAgICB9CiAKICAgICBWZWN0b3I8SlNDOjpTdHJvbmc8SlND
OjpVbmtub3duPj4gYWRqdXN0ZWRBcmd1bWVudHM7Ci0gICAgYWRqdXN0ZWRBcmd1bWVudHMuYXBw
ZW5kKHsgc3RhdGUtPnZtKCksIHRhcmdldCA/IHRhcmdldCA6IEpTQzo6anNOb250cml2aWFsU3Ry
aW5nKHN0YXRlLCAiVmlld3BvcnQiX3MpIH0pOworICAgIGFkanVzdGVkQXJndW1lbnRzLmFwcGVu
ZCh7IHZtLCB0YXJnZXQgPyB0YXJnZXQgOiBKU0M6OmpzTm9udHJpdmlhbFN0cmluZyh2bSwgIlZp
ZXdwb3J0Il9zKSB9KTsKICAgICBmb3IgKHNpemVfdCBpID0gKCF0YXJnZXQgPyAwIDogMSk7IGkg
PCBhcmd1bWVudHMtPmFyZ3VtZW50Q291bnQoKTsgKytpKQotICAgICAgICBhZGp1c3RlZEFyZ3Vt
ZW50cy5hcHBlbmQoeyBzdGF0ZS0+dm0oKSwgYXJndW1lbnRzLT5hcmd1bWVudEF0KGkpIH0pOwor
ICAgICAgICBhZGp1c3RlZEFyZ3VtZW50cy5hcHBlbmQoeyB2bSwgYXJndW1lbnRzLT5hcmd1bWVu
dEF0KGkpIH0pOwogICAgIGFyZ3VtZW50cyA9IFNjcmlwdEFyZ3VtZW50czo6Y3JlYXRlKCpzdGF0
ZSwgV1RGTW92ZShhZGp1c3RlZEFyZ3VtZW50cykpOwogICAgIGFkZE1lc3NhZ2UobWFrZVVuaXF1
ZTxJbnNwZWN0b3I6OkNvbnNvbGVNZXNzYWdlPihNZXNzYWdlU291cmNlOjpDb25zb2xlQVBJLCBN
ZXNzYWdlVHlwZTo6SW1hZ2UsIE1lc3NhZ2VMZXZlbDo6TG9nLCBkYXRhVVJMLCBXVEZNb3ZlKGFy
Z3VtZW50cykpKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0N1
c3RvbVBhaW50SW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0N1c3RvbVBhaW50SW1hZ2UuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9DdXN0b21QYWludEltYWdlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMTkgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0xNDcsNyArMTQ3LDcgQEAgSW1hZ2VEcmF3UmVzdWx0IEN1c3RvbVBhaW50SW1hZ2U6
OmRvQ3VzdAogICAgIGF1dG8gc2l6ZSA9IENTU1BhaW50U2l6ZTo6Y3JlYXRlKGRlc3RTaXplLndp
ZHRoKCksIGRlc3RTaXplLmhlaWdodCgpKTsKICAgICBSZWY8U3R5bGVQcm9wZXJ0eU1hcFJlYWRP
bmx5PiBwcm9wZXJ0eU1hcCA9IEhhc2hNYXBTdHlsZVByb3BlcnR5TWFwOjpjcmVhdGUoV1RGTW92
ZShwcm9wZXJ0eVZhbHVlcykpOwogCi0gICAgYXV0byYgdm0gPSAqcGFpbnRDb25zdHJ1Y3Rvci5n
ZXRPYmplY3QoKS0+dm0oKTsKKyAgICBhdXRvJiB2bSA9IHBhaW50Q29uc3RydWN0b3IuZ2V0T2Jq
ZWN0KCktPnZtKCk7CiAgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayh2bSk7CiAgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIGF1dG8mIGdsb2JhbE9iamVjdCA9
ICpwYWludENvbnN0cnVjdG9yLmdldE9iamVjdCgpLT5nbG9iYWxPYmplY3QoKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3Rlc3RpbmcvanMvV2ViQ29yZVRlc3RTdXBwb3J0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL2pzL1dlYkNvcmVUZXN0U3VwcG9ydC5jcHAJKHJl
dmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvanMvV2ViQ29yZVRlc3RT
dXBwb3J0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmln
aHQgKEMpIDIwMTEsIDIwMTUgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU3LDEyICs1NywxMiBAQCB1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKIHZvaWQgaW5qZWN0SW50ZXJuYWxzT2JqZWN0KEpTQ29udGV4dFJlZiBj
b250ZXh0KQogewogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHRvSlMoY29udGV4dCk7Ci0gICAgSlNM
b2NrSG9sZGVyIGxvY2soZXhlYyk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBKU0xv
Y2tIb2xkZXIgbG9jayh2bSk7CiAgICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9
IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSk7
CiAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0Q29udGV4dCA9IGdsb2JhbE9iamVj
dC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwogICAgIGlmIChpczxEb2N1bWVudD4oKnNjcmlw
dENvbnRleHQpKSB7Ci0gICAgICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgICAgIGdsb2Jh
bE9iamVjdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgSW50ZXJu
YWxzOjppbnRlcm5hbHNJZCksIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBJbnRlcm5hbHM6OmNy
ZWF0ZShkb3duY2FzdDxEb2N1bWVudD4oKnNjcmlwdENvbnRleHQpKSkpOworICAgICAgICBnbG9i
YWxPYmplY3QtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgSW50ZXJu
YWxzOjppbnRlcm5hbHNJZCksIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBJbnRlcm5hbHM6OmNy
ZWF0ZShkb3duY2FzdDxEb2N1bWVudD4oKnNjcmlwdENvbnRleHQpKSkpOwogICAgICAgICBnbG9i
YWxPYmplY3QtPmV4cG9zZURvbGxhclZNKHZtKTsKICAgICB9CiB9CkBAIC0yMDAsOSArMjAwLDEw
IEBAIHZvaWQgc2V0dXBOZXdseUNyZWF0ZWRTZXJ2aWNlV29ya2VyKHVpbnQKICAgICAgICAgICAg
IHJldHVybjsKIAogICAgICAgICBhdXRvJiBzdGF0ZSA9ICpnbG9iYWxTY29wZS5leGVjU3RhdGUo
KTsKLSAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2tlcihzdGF0ZS52bSgpKTsKKyAgICAgICAgYXV0
byYgdm0gPSBzdGF0ZS52bSgpOworICAgICAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKHZtKTsKICAg
ICAgICAgYXV0byogY29udGV4dFdyYXBwZXIgPSBzY3JpcHQtPndvcmtlckdsb2JhbFNjb3BlV3Jh
cHBlcigpOwotICAgICAgICBjb250ZXh0V3JhcHBlci0+cHV0RGlyZWN0KHN0YXRlLnZtKCksIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCBJbnRlcm5hbHM6OmludGVybmFsc0lkKSwgdG9K
Uygmc3RhdGUsIGNvbnRleHRXcmFwcGVyLCBTZXJ2aWNlV29ya2VySW50ZXJuYWxzOjpjcmVhdGUo
aWRlbnRpZmllcikpKTsKKyAgICAgICAgY29udGV4dFdyYXBwZXItPnB1dERpcmVjdCh2bSwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgSW50ZXJuYWxzOjppbnRlcm5hbHNJZCksIHRvSlMoJnN0
YXRlLCBjb250ZXh0V3JhcHBlciwgU2VydmljZVdvcmtlckludGVybmFsczo6Y3JlYXRlKGlkZW50
aWZpZXIpKSk7CiAgICAgfSk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShzZXJ2aWNlV29ya2Vy
SWRlbnRpZmllcik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS93b3JrbGV0cy9QYWludFdvcmtsZXRH
bG9iYWxTY29wZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd29ya2xldHMvUGFp
bnRXb3JrbGV0R2xvYmFsU2NvcGUuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvV2Vi
Q29yZS93b3JrbGV0cy9QYWludFdvcmtsZXRHbG9iYWxTY29wZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDE5IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NzEsNyArNzEsNyBAQCBQYWludFdvcmtsZXRHbG9iYWxTY29wZTo6UGFpbnREZWZpbml0aW9uCiAv
LyBodHRwczovL2RyYWZ0cy5jc3MtaG91ZGluaS5vcmcvY3NzLXBhaW50LWFwaS8jcmVnaXN0ZXJp
bmctY3VzdG9tLXBhaW50CiBFeGNlcHRpb25Pcjx2b2lkPiBQYWludFdvcmtsZXRHbG9iYWxTY29w
ZTo6cmVnaXN0ZXJQYWludChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0
JiBnbG9iYWxPYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgU3Ryb25nPEpTT2JqZWN0PiBwYWlu
dENvbnN0cnVjdG9yKQogewotICAgIGF1dG8mIHZtID0gKnBhaW50Q29uc3RydWN0b3ItPnZtKCk7
CisgICAgYXV0byYgdm0gPSBwYWludENvbnN0cnVjdG9yLT52bSgpOwogICAgIEpTQzo6SlNMb2Nr
SG9sZGVyIGxvY2sodm0pOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKIApAQCAtOTEsNyArOTEsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBQYWludFdvcmtsZXRHbG9i
YWxTY29wCiAKICAgICAgICAgVmVjdG9yPFN0cmluZz4gaW5wdXRQcm9wZXJ0aWVzOwogCi0gICAg
ICAgIEpTVmFsdWUgaW5wdXRQcm9wZXJ0aWVzSXRlcmFibGVWYWx1ZSA9IHBhaW50Q29uc3RydWN0
b3ItPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiaW5wdXRQcm9wZXJ0
aWVzIikpOworICAgICAgICBKU1ZhbHVlIGlucHV0UHJvcGVydGllc0l0ZXJhYmxlVmFsdWUgPSBw
YWludENvbnN0cnVjdG9yLT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAi
aW5wdXRQcm9wZXJ0aWVzIikpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBF
eGNlcHRpb24geyBFeGlzdGluZ0V4Y2VwdGlvbkVycm9yIH0pOwogCiAgICAgICAgIGlmICghaW5w
dXRQcm9wZXJ0aWVzSXRlcmFibGVWYWx1ZS5pc1VuZGVmaW5lZCgpKQpAQCAtMTAyLDcgKzEwMiw3
IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFBhaW50V29ya2xldEdsb2JhbFNjb3AKIAogICAgICAgICBW
ZWN0b3I8U3RyaW5nPiBpbnB1dEFyZ3VtZW50czsKIAotICAgICAgICBKU1ZhbHVlIGlucHV0QXJn
dW1lbnRzSXRlcmFibGVWYWx1ZSA9IHBhaW50Q29uc3RydWN0b3ItPmdldCgmc3RhdGUsIElkZW50
aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiaW5wdXRBcmd1bWVudHMiKSk7CisgICAgICAgIEpTVmFs
dWUgaW5wdXRBcmd1bWVudHNJdGVyYWJsZVZhbHVlID0gcGFpbnRDb25zdHJ1Y3Rvci0+Z2V0KCZz
dGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImlucHV0QXJndW1lbnRzIikpOwogICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBFeGNlcHRpb24geyBFeGlzdGluZ0V4Y2Vw
dGlvbkVycm9yIH0pOwogCiAgICAgICAgIGlmICghaW5wdXRBcmd1bWVudHNJdGVyYWJsZVZhbHVl
LmlzVW5kZWZpbmVkKCkpCkBAIC0xMTEsNyArMTExLDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gUGFp
bnRXb3JrbGV0R2xvYmFsU2NvcAogCiAgICAgICAgIC8vIEZJWE1FOiBQYXJzZSBzeW50YXggZm9y
IGlucHV0QXJndW1lbnRzIGhlcmUgKHN0ZXBzIDExIGFuZCAxMikuCiAKLSAgICAgICAgSlNWYWx1
ZSBjb250ZXh0T3B0aW9uc1ZhbHVlID0gcGFpbnRDb25zdHJ1Y3Rvci0+Z2V0KCZzdGF0ZSwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJjb250ZXh0T3B0aW9ucyIpKTsKKyAgICAgICAgSlNW
YWx1ZSBjb250ZXh0T3B0aW9uc1ZhbHVlID0gcGFpbnRDb25zdHJ1Y3Rvci0+Z2V0KCZzdGF0ZSwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImNvbnRleHRPcHRpb25zIikpOwogICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBFeGNlcHRpb24geyBFeGlzdGluZ0V4Y2VwdGlvbkVy
cm9yIH0pOwogICAgICAgICBVTlVTRURfUEFSQU0oY29udGV4dE9wdGlvbnNWYWx1ZSk7CiAKQEAg
LTEyNiw3ICsxMjYsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBQYWludFdvcmtsZXRHbG9iYWxTY29w
CiAgICAgICAgIGlmICghcHJvdG90eXBlVmFsdWUuaXNPYmplY3QoKSkKICAgICAgICAgICAgIHJl
dHVybiBFeGNlcHRpb24geyBUeXBlRXJyb3IsICJUaGUgc2Vjb25kIGFyZ3VtZW50IG11c3QgaGF2
ZSBhIHByb3RvdHlwZSB0aGF0IGlzIGFuIG9iamVjdCIgfTsKIAotICAgICAgICBKU1ZhbHVlIHBh
aW50VmFsdWUgPSBwcm90b3R5cGVWYWx1ZS5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKCZ2bSwgInBhaW50IikpOworICAgICAgICBKU1ZhbHVlIHBhaW50VmFsdWUgPSBwcm90b3R5
cGVWYWx1ZS5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAicGFpbnQiKSk7
CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEV4Y2VwdGlvbiB7IEV4aXN0aW5n
RXhjZXB0aW9uRXJyb3IgfSk7CiAKICAgICAgICAgaWYgKHBhaW50VmFsdWUuaXNVbmRlZmluZWQo
KSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzIEBACisyMDE5LTA4LTI3ICBNYXJrIExh
bSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBSZWZhY3RvciB0byB1c2UgVk0mIGlu
c3RlYWQgb2YgVk0qIGF0IGFzIG1hbnkgcGxhY2VzIGFzIHBvc3NpYmxlLgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAxMTcyCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0RPTS9JbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGUuY3BwOgorICAgICAgICAoV2ViS2l0
OjpJbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGU6OmdldE9yQ3JlYXRlKToKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNOUE9iamVjdC5jcHA6CisgICAgICAgIChXZWJLaXQ6
OkpTTlBPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMpOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
UGx1Z2lucy9OZXRzY2FwZS9OUEpTT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6aWRlbnRp
ZmllckZyb21JZGVudGlmaWVyUmVwKToKKyAgICAgICAgKFdlYktpdDo6TlBKU09iamVjdDo6ZW51
bWVyYXRlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBSdW50aW1l
T2JqZWN0TWFwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TlBSdW50aW1lT2JqZWN0TWFwOjpjb252
ZXJ0TlBWYXJpYW50VG9KU1ZhbHVlKToKKyAgICAgICAgKFdlYktpdDo6TlBSdW50aW1lT2JqZWN0
TWFwOjpjb252ZXJ0SlNWYWx1ZVRvTlBWYXJpYW50KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViRnJhbWUuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZTo6Y291bnRlclZh
bHVlKToKKwogMjAxOS0wOC0yNiAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAg
ICAgICAgIFJlZ3Jlc3Npb246IElUUCBzdGFydGVkIGRvaW5nIGEgbG90IG1vcmUgSVBDIGFmdGVy
IGl0cyBsb2dpYyB3YXMgbW92ZWQgdG8gdGhlIG5ldHdvcmsgcHJvY2VzcwpJbmRleDogU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0RPTS9JbmplY3RlZEJ1bmRsZU5vZGVI
YW5kbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9ET00vSW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxlLmNwcAkocmV2aXNpb24gMjQ5MTI4
KQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0RPTS9JbmplY3Rl
ZEJ1bmRsZU5vZGVIYW5kbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTcwLDcgKzcwLDcgQEAgc3RhdGlj
IERPTU5vZGVIYW5kbGVDYWNoZSYgZG9tTm9kZUhhbmRsZQogCiBSZWZQdHI8SW5qZWN0ZWRCdW5k
bGVOb2RlSGFuZGxlPiBJbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGU6OmdldE9yQ3JlYXRlKEpTQ29u
dGV4dFJlZiwgSlNPYmplY3RSZWYgb2JqZWN0KQogewotICAgIE5vZGUqIG5vZGUgPSBKU05vZGU6
OnRvV3JhcHBlZCgqdG9KUyhvYmplY3QpLT52bSgpLCB0b0pTKG9iamVjdCkpOworICAgIE5vZGUq
IG5vZGUgPSBKU05vZGU6OnRvV3JhcHBlZCh0b0pTKG9iamVjdCktPnZtKCksIHRvSlMob2JqZWN0
KSk7CiAgICAgcmV0dXJuIGdldE9yQ3JlYXRlKG5vZGUpOwogfQogCkluZGV4OiBTb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9KU05QT2JqZWN0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9KU05QT2JqZWN0
LmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdp
bnMvTmV0c2NhcGUvSlNOUE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1MSw5ICs0NTEs
OSBAQCB2b2lkIEpTTlBPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMoSlNPCiAgICAgICAgICAg
ICBjb25zdCBjaGFyKiBzdHJpbmcgPSBpZGVudGlmaWVyUmVwLT5zdHJpbmcoKTsKICAgICAgICAg
ICAgIGludCBsZW5ndGggPSBzdHJsZW4oc3RyaW5nKTsKICAgICAgICAgICAgIAotICAgICAgICAg
ICAgaWRlbnRpZmllciA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgU3RyaW5nOjpmcm9t
VVRGOFdpdGhMYXRpbjFGYWxsYmFjayhzdHJpbmcsIGxlbmd0aCkpOworICAgICAgICAgICAgaWRl
bnRpZmllciA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIFN0cmluZzo6ZnJvbVVURjhXaXRo
TGF0aW4xRmFsbGJhY2soc3RyaW5nLCBsZW5ndGgpKTsKICAgICAgICAgfSBlbHNlCi0gICAgICAg
ICAgICBpZGVudGlmaWVyID0gSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpZGVudGlmaWVyUmVwLT5u
dW1iZXIoKSk7CisgICAgICAgICAgICBpZGVudGlmaWVyID0gSWRlbnRpZmllcjo6ZnJvbSh2bSwg
aWRlbnRpZmllclJlcC0+bnVtYmVyKCkpOwogCiAgICAgICAgIHByb3BlcnR5TmFtZUFycmF5LmFk
ZChpZGVudGlmaWVyKTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1
Z2lucy9OZXRzY2FwZS9OUEpTT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUEpTT2JqZWN0LmNwcAkocmV2aXNpb24gMjQ5
MTI4KQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBKU09i
amVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODIsMTIgKzgyLDEzIEBAIHZvaWQgTlBKU09iamVjdDo6
aW5pdGlhbGl6ZShWTSYgdm0sIE5QUnUKIAogc3RhdGljIElkZW50aWZpZXIgaWRlbnRpZmllckZy
b21JZGVudGlmaWVyUmVwKEV4ZWNTdGF0ZSogZXhlYywgSWRlbnRpZmllclJlcCogaWRlbnRpZmll
clJlcCkKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIEFTU0VSVChpZGVudGlmaWVy
UmVwLT5pc1N0cmluZygpKTsKIAogICAgIGNvbnN0IGNoYXIqIHN0cmluZyA9IGlkZW50aWZpZXJS
ZXAtPnN0cmluZygpOwogICAgIGludCBsZW5ndGggPSBzdHJsZW4oc3RyaW5nKTsKIAotICAgIHJl
dHVybiBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsIFN0cmluZzo6ZnJvbVVURjhXaXRoTGF0
aW4xRmFsbGJhY2soc3RyaW5nLCBsZW5ndGgpKTsKKyAgICByZXR1cm4gSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyh2bSwgU3RyaW5nOjpmcm9tVVRGOFdpdGhMYXRpbjFGYWxsYmFjayhzdHJpbmcsIGxl
bmd0aCkpOwogfQogCiBib29sIE5QSlNPYmplY3Q6Omhhc01ldGhvZChOUElkZW50aWZpZXIgbWV0
aG9kTmFtZSkKQEAgLTI1Miw3ICsyNTMsNyBAQCBib29sIE5QSlNPYmplY3Q6OmVudW1lcmF0ZShO
UElkZW50aWZpZXIqCiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBKU0xvY2tIb2xkZXIg
bG9jayh2bSk7CiAKLSAgICBQcm9wZXJ0eU5hbWVBcnJheSBwcm9wZXJ0eU5hbWVzKCZ2bSwgUHJv
cGVydHlOYW1lTW9kZTo6U3RyaW5ncywgUHJpdmF0ZVN5bWJvbE1vZGU6OkV4Y2x1ZGUpOworICAg
IFByb3BlcnR5TmFtZUFycmF5IHByb3BlcnR5TmFtZXModm0sIFByb3BlcnR5TmFtZU1vZGU6OlN0
cmluZ3MsIFByaXZhdGVTeW1ib2xNb2RlOjpFeGNsdWRlKTsKICAgICBtX2pzT2JqZWN0LT5tZXRo
b2RUYWJsZSh2bSktPmdldFByb3BlcnR5TmFtZXMobV9qc09iamVjdC5nZXQoKSwgZXhlYywgcHJv
cGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlKCkpOwogCiAgICAgTlBJZGVudGlmaWVyKiBuYW1l
SWRlbnRpZmllcnMgPSBucG5NZW1OZXdBcnJheTxOUElkZW50aWZpZXI+KHByb3BlcnR5TmFtZXMu
c2l6ZSgpKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBl
L05QUnVudGltZU9iamVjdE1hcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBSdW50aW1lT2JqZWN0TWFwLmNwcAkocmV2aXNpb24g
MjQ5MTI4KQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBS
dW50aW1lT2JqZWN0TWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMjksNyArMTI5LDcgQEAg
SlNWYWx1ZSBOUFJ1bnRpbWVPYmplY3RNYXA6OmNvbnZlcnROUFZhcgogICAgICAgICByZXR1cm4g
anNOdW1iZXIodmFyaWFudC52YWx1ZS5kb3VibGVWYWx1ZSk7CiAKICAgICBjYXNlIE5QVmFyaWFu
dFR5cGVfU3RyaW5nOgotICAgICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgU3RyaW5nOjpmcm9t
VVRGOFdpdGhMYXRpbjFGYWxsYmFjayh2YXJpYW50LnZhbHVlLnN0cmluZ1ZhbHVlLlVURjhDaGFy
YWN0ZXJzLCAKKyAgICAgICAgcmV0dXJuIGpzU3RyaW5nKGdsb2JhbE9iamVjdC0+dm0oKSwgU3Ry
aW5nOjpmcm9tVVRGOFdpdGhMYXRpbjFGYWxsYmFjayh2YXJpYW50LnZhbHVlLnN0cmluZ1ZhbHVl
LlVURjhDaGFyYWN0ZXJzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50LnZhbHVlLnN0cmluZ1ZhbHVlLlVURjhM
ZW5ndGgpKTsKICAgICBjYXNlIE5QVmFyaWFudFR5cGVfT2JqZWN0OgogICAgICAgICByZXR1cm4g
Z2V0T3JDcmVhdGVKU09iamVjdChnbG9iYWxPYmplY3QsIHZhcmlhbnQudmFsdWUub2JqZWN0VmFs
dWUpOwpAQCAtMTQxLDYgKzE0MSw3IEBAIEpTVmFsdWUgTlBSdW50aW1lT2JqZWN0TWFwOjpjb252
ZXJ0TlBWYXIKIAogdm9pZCBOUFJ1bnRpbWVPYmplY3RNYXA6OmNvbnZlcnRKU1ZhbHVlVG9OUFZh
cmlhbnQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlLCBOUFZhcmlhbnQmIHZhcmlhbnQp
CiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVj
KTsKIAogICAgIFZPSURfVE9fTlBWQVJJQU5UKHZhcmlhbnQpOwpAQCAtMTcyLDcgKzE3Myw3IEBA
IHZvaWQgTlBSdW50aW1lT2JqZWN0TWFwOjpjb252ZXJ0SlNWYWx1ZVQKICAgICB9CiAKICAgICBp
ZiAodmFsdWUuaXNPYmplY3QoKSkgewotICAgICAgICBOUE9iamVjdCogbnBPYmplY3QgPSBnZXRP
ckNyZWF0ZU5QT2JqZWN0KGV4ZWMtPnZtKCksIGFzT2JqZWN0KHZhbHVlKSk7CisgICAgICAgIE5Q
T2JqZWN0KiBucE9iamVjdCA9IGdldE9yQ3JlYXRlTlBPYmplY3Qodm0sIGFzT2JqZWN0KHZhbHVl
KSk7CiAgICAgICAgIE9CSkVDVF9UT19OUFZBUklBTlQobnBPYmplY3QsIHZhcmlhbnQpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYkZyYW1lLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MzgsNyAr
NzM4LDcgQEAgSlNWYWx1ZVJlZiBXZWJGcmFtZTo6anNXcmFwcGVyRm9yV29ybGQoSQogCiBTdHJp
bmcgV2ViRnJhbWU6OmNvdW50ZXJWYWx1ZShKU09iamVjdFJlZiBlbGVtZW50KQogewotICAgIGlm
ICghdG9KUyhlbGVtZW50KS0+aW5oZXJpdHM8SlNFbGVtZW50PigqdG9KUyhlbGVtZW50KS0+dm0o
KSkpCisgICAgaWYgKCF0b0pTKGVsZW1lbnQpLT5pbmhlcml0czxKU0VsZW1lbnQ+KHRvSlMoZWxl
bWVudCktPnZtKCkpKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAKICAgICByZXR1cm4gY291
bnRlclZhbHVlRm9yRWxlbWVudCgmanNDYXN0PEpTRWxlbWVudCo+KHRvSlMoZWxlbWVudCkpLT53
cmFwcGVkKCkpOwpJbmRleDogU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24gMjQ5
MTI4KQorKysgU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsMjkgQEAKKzIwMTktMDgtMjcgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUu
Y29tPgorCisgICAgICAgIFJlZmFjdG9yIHRvIHVzZSBWTSYgaW5zdGVhZCBvZiBWTSogYXQgYXMg
bWFueSBwbGFjZXMgYXMgcG9zc2libGUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMDExNzIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIERPTS9ET00ubW06CisgICAgICAgICgrW0RPTU5vZGUgX25vZGVG
cm9tSlNXcmFwcGVyOl0pOgorICAgICAgICAqIERPTS9ET01VdGlsaXR5Lm1tOgorICAgICAgICAo
Y3JlYXRlRE9NV3JhcHBlcik6CisgICAgICAgICogUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVn
aW5Ib3N0UHJveHkubW06CisgICAgICAgIChpZGVudGlmaWVyRnJvbUlkZW50aWZpZXJSZXApOgor
ICAgICAgICAqIFBsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eS5tbToK
KyAgICAgICAgKFdlYktpdDo6TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjplbnVtZXJhdGUp
OgorICAgICAgICAoV2ViS2l0OjpnZXRPYmplY3RJRCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHNj
YXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6YWRkVmFsdWVUb0FycmF5KToKKyAgICAgICAgKFdlYktp
dDo6TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpkZW1hcnNoYWxWYWx1ZUZyb21BcnJheSk6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6cmV0YWluTG9j
YWxPYmplY3QpOgorICAgICAgICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6
OnJlbGVhc2VMb2NhbE9iamVjdCk6CisgICAgICAgICogUGx1Z2lucy9Ib3N0ZWQvUHJveHlJbnN0
YW5jZS5tbToKKyAgICAgICAgKFdlYktpdDo6UHJveHlJbnN0YW5jZTo6c3RyaW5nVmFsdWUgY29u
c3QpOgorICAgICAgICAoV2ViS2l0OjpQcm94eUluc3RhbmNlOjpnZXRQcm9wZXJ0eU5hbWVzKToK
KyAgICAgICAgKiBXZWJWaWV3L1dlYkZyYW1lLm1tOgorICAgICAgICAoLVtXZWJGcmFtZSBfc3Ry
aW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdEZyb21TdHJpbmc6d2l0aEdsb2JhbE9iamVjdDppblNj
cmlwdFdvcmxkOl0pOgorCiAyMDE5LTA4LTIzICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5j
b20+CiAKICAgICAgICAgW2dlb2xvY2F0aW9uXSBSZW5hbWUgaW50ZXJmYWNlcyBhbmQgcmVtb3Zl
IFtOb0ludGVyZmFjZU9iamVjdF0KSW5kZXg6IFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9E
T00ubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTS5tbQko
cmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTS5tbQko
d29ya2luZyBjb3B5KQpAQCAtNTI5LDcgKzUyOSw3IEBAIC0gKE5TQXJyYXkgKil0ZXh0UmVjdHMK
ICsgKGlkKV9ub2RlRnJvbUpTV3JhcHBlcjooSlNPYmplY3RSZWYpanNXcmFwcGVyCiB7CiAgICAg
SlNPYmplY3QqIG9iamVjdCA9IHRvSlMoanNXcmFwcGVyKTsKLSAgICBpZiAoIW9iamVjdC0+aW5o
ZXJpdHM8SlNOb2RlPigqb2JqZWN0LT52bSgpKSkKKyAgICBpZiAoIW9iamVjdC0+aW5oZXJpdHM8
SlNOb2RlPihvYmplY3QtPnZtKCkpKQogICAgICAgICByZXR1cm4gbmlsOwogICAgIHJldHVybiBr
aXQoJmpzQ2FzdDxKU05vZGUqPihvYmplY3QpLT53cmFwcGVkKCkpOwogfQpJbmRleDogU291cmNl
L1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTVV0aWxpdHkubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTVV0aWxpdHkubW0JKHJldmlzaW9uIDI0OTEyOCkKKysr
IFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET01VdGlsaXR5Lm1tCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwg
MjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDQtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDYgSmFtZXMgRy4gU3BldGggKHNwZXRoQGVuZC5jb20pCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CkBAIC03NCw3ICs3NCw3IEBACiAKIHN0YXRpYyBXZWJTY3JpcHRPYmplY3QgKmNy
ZWF0ZURPTVdyYXBwZXIoSlNDOjpKU09iamVjdCYganNXcmFwcGVyKQogewotICAgIEpTQzo6Vk0m
IHZtID0gKmpzV3JhcHBlci52bSgpOworICAgIEpTQzo6Vk0mIHZtID0ganNXcmFwcGVyLnZtKCk7
CiAgICAgI2RlZmluZSBXUkFQKGNsYXNzTmFtZSkgXAogICAgICAgICBpZiAoYXV0byogd3JhcHBl
ZCA9IFdlYkNvcmU6OkpTIyNjbGFzc05hbWU6OnRvV3JhcHBlZCh2bSwgJmpzV3JhcHBlcikpIFwK
ICAgICAgICAgICAgIHJldHVybiBraXQod3JhcHBlZCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0TGVn
YWN5L21hYy9QbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkhvc3RQcm94eS5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9QbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBs
dWdpbkhvc3RQcm94eS5tbQkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL1dlYktpdExlZ2Fj
eS9tYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5Ib3N0UHJveHkubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTggQXBw
bGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTkg
QXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC02NjUsNyArNjY1LDcgQEAgc3RhdGljIElkZW50aWZpZXIgaWRlbnRpZmllckZy
b21JZGVudGlmaQogICAgIEFTU0VSVChpZGVudGlmaWVyLT5pc1N0cmluZygpKTsKICAgCiAgICAg
Y29uc3QgY2hhciogc3RyID0gaWRlbnRpZmllci0+c3RyaW5nKCk7ICAgIAotICAgIHJldHVybiBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZjb21tb25WTSgpLCBTdHJpbmc6OmZyb21VVEY4V2l0aExh
dGluMUZhbGxiYWNrKHN0ciwgc3RybGVuKHN0cikpKTsKKyAgICByZXR1cm4gSWRlbnRpZmllcjo6
ZnJvbVN0cmluZyhjb21tb25WTSgpLCBTdHJpbmc6OmZyb21VVEY4V2l0aExhdGluMUZhbGxiYWNr
KHN0ciwgc3RybGVuKHN0cikpKTsKIH0KIAoga2Vybl9yZXR1cm5fdCBXS1BDSW52b2tlKG1hY2hf
cG9ydF90IGNsaWVudFBvcnQsIHVpbnQzMl90IHBsdWdpbklELCB1aW50MzJfdCByZXF1ZXN0SUQs
IHVpbnQzMl90IG9iamVjdElELCB1aW50NjRfdCBzZXJ2ZXJJZGVudGlmaWVyLApJbmRleDogU291
cmNlL1dlYktpdExlZ2FjeS9tYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5JbnN0YW5j
ZVByb3h5Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1BsdWdpbnMv
SG9zdGVkL05ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eS5tbQkocmV2aXNpb24gMjQ5MTI4KQor
KysgU291cmNlL1dlYktpdExlZ2FjeS9tYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5J
bnN0YW5jZVByb3h5Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwOC0yMDEwLCAyMDE2IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE5IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTI3NSw3ICsxMjc1LDcg
QEAgYm9vbCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OmVudW1lcgogCiAgICAgRXhlY1N0
YXRlKiBleGVjID0gZnJhbWUtPnNjcmlwdCgpLmdsb2JhbE9iamVjdChwbHVnaW5Xb3JsZCgpKS0+
Z2xvYmFsRXhlYygpOwogIAotICAgIFByb3BlcnR5TmFtZUFycmF5IHByb3BlcnR5TmFtZXMoJnZt
LCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzLCBQcml2YXRlU3ltYm9sTW9kZTo6RXhjbHVkZSk7
CisgICAgUHJvcGVydHlOYW1lQXJyYXkgcHJvcGVydHlOYW1lcyh2bSwgUHJvcGVydHlOYW1lTW9k
ZTo6U3RyaW5ncywgUHJpdmF0ZVN5bWJvbE1vZGU6OkV4Y2x1ZGUpOwogICAgIG9iamVjdC0+bWV0
aG9kVGFibGUodm0pLT5nZXRQcm9wZXJ0eU5hbWVzKG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1l
cywgRW51bWVyYXRpb25Nb2RlKCkpOwogCiAgICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiBh
cnJheSA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF0pOwpAQCAtMTMwMCw3
ICsxMzAwLDcgQEAgYm9vbCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OmVudW1lcgogCiBz
dGF0aWMgYm9vbCBnZXRPYmplY3RJRChOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkqIHBsdWdp
bkluc3RhbmNlUHJveHksIEpTT2JqZWN0KiBvYmplY3QsIHVpbnQ2NF90JiBvYmplY3RJRCkKIHsK
LSAgICBKU0M6OlZNJiB2bSA9ICpvYmplY3QtPnZtKCk7CisgICAgSlNDOjpWTSYgdm0gPSBvYmpl
Y3QtPnZtKCk7CiAgICAgaWYgKG9iamVjdC0+Y2xhc3NJbmZvKHZtKSAhPSBQcm94eVJ1bnRpbWVP
YmplY3Q6OmluZm8oKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0xMzE4LDcgKzEzMTgs
OCBAQCBzdGF0aWMgYm9vbCBnZXRPYmplY3RJRChOZXRzY2FwZVBsdWdpbkluCiAgICAgCiB2b2lk
IE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6YWRkVmFsdWVUb0FycmF5KE5TTXV0YWJsZUFy
cmF5ICphcnJheSwgRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQogewotICAgIEpTTG9j
a0hvbGRlciBsb2NrKGV4ZWMpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgSlNMb2Nr
SG9sZGVyIGxvY2sodm0pOwogCiAgICAgaWYgKHZhbHVlLmlzU3RyaW5nKCkpIHsKICAgICAgICAg
W2FycmF5IGFkZE9iamVjdDpbTlNOdW1iZXIgbnVtYmVyV2l0aEludDpTdHJpbmdWYWx1ZVR5cGVd
XTsKQEAgLTEzMzksNyArMTM0MCw3IEBAIHZvaWQgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5
OjphZGRWYWwKICAgICAgICAgICAgIFthcnJheSBhZGRPYmplY3Q6W05TTnVtYmVyIG51bWJlcldp
dGhJbnQ6b2JqZWN0SURdXTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIFthcnJheSBh
ZGRPYmplY3Q6W05TTnVtYmVyIG51bWJlcldpdGhJbnQ6SlNPYmplY3RWYWx1ZVR5cGVdXTsKLSAg
ICAgICAgICAgIFthcnJheSBhZGRPYmplY3Q6W05TTnVtYmVyIG51bWJlcldpdGhJbnQ6bV9sb2Nh
bE9iamVjdHMuaWRGb3JPYmplY3QoZXhlYy0+dm0oKSwgb2JqZWN0KV1dOworICAgICAgICAgICAg
W2FycmF5IGFkZE9iamVjdDpbTlNOdW1iZXIgbnVtYmVyV2l0aEludDptX2xvY2FsT2JqZWN0cy5p
ZEZvck9iamVjdCh2bSwgb2JqZWN0KV1dOwogICAgICAgICB9CiAgICAgfSBlbHNlCiAgICAgICAg
IFthcnJheSBhZGRPYmplY3Q6W05TTnVtYmVyIG51bWJlcldpdGhJbnQ6Vm9pZFZhbHVlVHlwZV1d
OwpAQCAtMTM5NSw3ICsxMzk2LDcgQEAgYm9vbCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6
OmRlbWFycwogICAgICAgICBjYXNlIFN0cmluZ1ZhbHVlVHlwZTogewogICAgICAgICAgICAgTlNT
dHJpbmcgKnN0cmluZyA9IFthcnJheSBvYmplY3RBdEluZGV4OmluZGV4KytdOwogICAgICAgICAg
ICAgCi0gICAgICAgICAgICByZXN1bHQgPSBqc1N0cmluZyhleGVjLCBTdHJpbmcoc3RyaW5nKSk7
CisgICAgICAgICAgICByZXN1bHQgPSBqc1N0cmluZyhleGVjLT52bSgpLCBTdHJpbmcoc3RyaW5n
KSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICBjYXNlIEpT
T2JqZWN0VmFsdWVUeXBlOiB7CkBAIC0xNDUzLDcgKzE0NTQsNyBAQCB2b2lkIE5ldHNjYXBlUGx1
Z2luSW5zdGFuY2VQcm94eTo6ZGVtYXJzCiAKIHZvaWQgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVBy
b3h5OjpyZXRhaW5Mb2NhbE9iamVjdChKU0M6OkpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgaWYgKCF2
YWx1ZS5pc09iamVjdCgpIHx8IHZhbHVlLmluaGVyaXRzPFByb3h5UnVudGltZU9iamVjdD4oKnZh
bHVlLmdldE9iamVjdCgpLT52bSgpKSkKKyAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkgfHwgdmFs
dWUuaW5oZXJpdHM8UHJveHlSdW50aW1lT2JqZWN0Pih2YWx1ZS5nZXRPYmplY3QoKS0+dm0oKSkp
CiAgICAgICAgIHJldHVybjsKIAogICAgIG1fbG9jYWxPYmplY3RzLnJldGFpbihhc09iamVjdCh2
YWx1ZSkpOwpAQCAtMTQ2MSw3ICsxNDYyLDcgQEAgdm9pZCBOZXRzY2FwZVBsdWdpbkluc3RhbmNl
UHJveHk6OnJldGFpbgogCiB2b2lkIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6cmVsZWFz
ZUxvY2FsT2JqZWN0KEpTQzo6SlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICBpZiAoIXZhbHVlLmlzT2Jq
ZWN0KCkgfHwgdmFsdWUuaW5oZXJpdHM8UHJveHlSdW50aW1lT2JqZWN0PigqdmFsdWUuZ2V0T2Jq
ZWN0KCktPnZtKCkpKQorICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSB8fCB2YWx1ZS5pbmhlcml0
czxQcm94eVJ1bnRpbWVPYmplY3Q+KHZhbHVlLmdldE9iamVjdCgpLT52bSgpKSkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgbV9sb2NhbE9iamVjdHMucmVsZWFzZShhc09iamVjdCh2YWx1ZSkpOwpJ
bmRleDogU291cmNlL1dlYktpdExlZ2FjeS9tYWMvUGx1Z2lucy9Ib3N0ZWQvUHJveHlJbnN0YW5j
ZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9QbHVnaW5zL0hvc3Rl
ZC9Qcm94eUluc3RhbmNlLm1tCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvV2ViS2l0TGVn
YWN5L21hYy9QbHVnaW5zL0hvc3RlZC9Qcm94eUluc3RhbmNlLm1tCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDEwLCAyMDE2IEFwcGxl
IEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE5IEFw
cGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMjgyLDcgKzI4Miw3IEBAIEpTVmFsdWUgUHJveHlJbnN0YW5jZTo6ZGVmYXVsdFZh
bHVlKEV4ZWMKIEpTVmFsdWUgUHJveHlJbnN0YW5jZTo6c3RyaW5nVmFsdWUoRXhlY1N0YXRlKiBl
eGVjKSBjb25zdAogewogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgc29tZXRoaW5nIHNlbnNpYmxl
LgotICAgIHJldHVybiBqc0VtcHR5U3RyaW5nKGV4ZWMpOworICAgIHJldHVybiBqc0VtcHR5U3Ry
aW5nKGV4ZWMtPnZtKCkpOwogfQogCiBKU1ZhbHVlIFByb3h5SW5zdGFuY2U6Om51bWJlclZhbHVl
KEV4ZWNTdGF0ZSopIGNvbnN0CkBAIC0zMTksNiArMzE5LDcgQEAgdm9pZCBQcm94eUluc3RhbmNl
OjpnZXRQcm9wZXJ0eU5hbWVzKEV4ZQogICAgIAogICAgIE5TQXJyYXkgKmFycmF5ID0gW05TUHJv
cGVydHlMaXN0U2VyaWFsaXphdGlvbiBwcm9wZXJ0eUxpc3RXaXRoRGF0YTooX19icmlkZ2UgTlNE
YXRhICopcmVwbHktPm1fcmVzdWx0LmdldCgpIG9wdGlvbnM6TlNQcm9wZXJ0eUxpc3RJbW11dGFi
bGUgZm9ybWF0Om51bGxwdHIgZXJyb3I6bnVsbHB0cl07CiAgICAgCisgICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKICAgICBmb3IgKE5TTnVtYmVyICpudW1iZXIgaW4gYXJyYXkpIHsKICAgICAgICAg
SWRlbnRpZmllclJlcCogaWRlbnRpZmllciA9IHJlaW50ZXJwcmV0X2Nhc3Q8SWRlbnRpZmllclJl
cCo+KFtudW1iZXIgbG9uZ0xvbmdWYWx1ZV0pOwogICAgICAgICBpZiAoIUlkZW50aWZpZXJSZXA6
OmlzVmFsaWQoaWRlbnRpZmllcikpCkBAIC0zMjYsOSArMzI3LDkgQEAgdm9pZCBQcm94eUluc3Rh
bmNlOjpnZXRQcm9wZXJ0eU5hbWVzKEV4ZQogCiAgICAgICAgIGlmIChpZGVudGlmaWVyLT5pc1N0
cmluZygpKSB7CiAgICAgICAgICAgICBjb25zdCBjaGFyKiBzdHIgPSBpZGVudGlmaWVyLT5zdHJp
bmcoKTsKLSAgICAgICAgICAgIG5hbWVBcnJheS5hZGQoSWRlbnRpZmllcjo6ZnJvbVN0cmluZygm
Y29tbW9uVk0oKSwgU3RyaW5nOjpmcm9tVVRGOFdpdGhMYXRpbjFGYWxsYmFjayhzdHIsIHN0cmxl
bihzdHIpKSkpOworICAgICAgICAgICAgbmFtZUFycmF5LmFkZChJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKHZtLCBTdHJpbmc6OmZyb21VVEY4V2l0aExhdGluMUZhbGxiYWNrKHN0ciwgc3RybGVuKHN0
cikpKSk7CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgbmFtZUFycmF5LmFkZChJZGVudGlm
aWVyOjpmcm9tKGV4ZWMsIGlkZW50aWZpZXItPm51bWJlcigpKSk7CisgICAgICAgICAgICBuYW1l
QXJyYXkuYWRkKElkZW50aWZpZXI6OmZyb20odm0sIGlkZW50aWZpZXItPm51bWJlcigpKSk7CiAg
ICAgfQogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZyYW1l
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJh
bWUubW0JKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZp
ZXcvV2ViRnJhbWUubW0JKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDA1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDA1LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yMDkwLDcgKzIwOTAsNyBAQCAtIChO
U1N0cmluZyAqKV9zdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyCiAKICAgICAvLyBUaGUgZ2xvYmFs
IG9iamVjdCBpcyBwcm9iYWJseSBhIHByb3h5IG9iamVjdD8gLSBpZiBzbywgd2Uga25vdyBob3cg
dG8gdXNlIHRoaXMhCiAgICAgSlNDOjpKU09iamVjdCogZ2xvYmFsT2JqZWN0T2JqID0gdG9KUyhn
bG9iYWxPYmplY3RSZWYpOwotICAgIEpTQzo6Vk0mIHZtID0gKmdsb2JhbE9iamVjdE9iai0+dm0o
KTsKKyAgICBKU0M6OlZNJiB2bSA9IGdsb2JhbE9iamVjdE9iai0+dm0oKTsKICAgICBpZiAoIXN0
cmNtcChnbG9iYWxPYmplY3RPYmotPmNsYXNzSW5mbyh2bSktPmNsYXNzTmFtZSwgIkpTV2luZG93
UHJveHkiKSkKICAgICAgICAgYW55V29ybGRHbG9iYWxPYmplY3QgPSBKU0M6OmpzRHluYW1pY0Nh
c3Q8SlNET01XaW5kb3cqPih2bSwgc3RhdGljX2Nhc3Q8SlNXaW5kb3dQcm94eSo+KGdsb2JhbE9i
amVjdE9iaiktPndpbmRvdygpKTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>377330</attachid>
            <date>2019-08-27 01:51:25 -0700</date>
            <delta_ts>2019-08-27 11:06:27 -0700</delta_ts>
            <desc>work in progress for EWS testing.</desc>
            <filename>bug-201172.patch</filename>
            <type>text/plain</type>
            <size>1518593</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjQ5MTM0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExNDAg
QEAKKzIwMTktMDgtMjcgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgorCisgICAgICAg
IFJlZmFjdG9yIHRvIHVzZSBWTSYgaW5zdGVhZCBvZiBWTSogYXQgYXMgbWFueSBwbGFjZXMgYXMg
cG9zc2libGUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMDExNzIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBVc2luZyBWTSYgZG9jdW1lbnRzIG1vcmUgY2xlYXJseSB0aGF0IHRoZSBWTSBwb2ludGVyIGlz
IGV4cGVjdGVkIHRvIG5ldmVyIGJlIG51bGwKKyAgICAgICAgaW4gbW9zdCBjYXNlcy4gIFRoZXJl
IGFyZSBhIGZldyBwbGFjZXMgd2hlcmUgaXQgY2FuIGJlIG51bGwgKGUuZyBKU0xvY2ssIGFuZAor
ICAgICAgICBERkc6OlBsYW4pLiAgVGhvc2Ugd2lsbCBiZSBsZWZ0IHVzaW5nIGEgVk0qLgorCisg
ICAgICAgIEFsc28gY29udmVydGVkIHNvbWUgdXNlcyBvZiBFeGVjU3RhdGUqIHRvIHVzaW5nIFZN
JiBpbnN0ZWFkIHNpbmNlIHRoZSBFeGVjU3RhdGUqCisgICAgICAgIGlzIG9ubHkgdGhlcmUgdG8g
ZmV0Y2ggdGhlIFZNIHBvaW50ZXIuICBEb2luZyB0aGlzIGFsc28gcmVkdWNlcyB0aGUgbnVtYmVy
IG9mCisgICAgICAgIHRpbWVzIHdlIGhhdmUgdG8gY29tcHV0ZSBWTSogZnJvbSBFeGVjU3RhdGUq
LgorCisgICAgICAgIFRoaXMgcGF0Y2ggaXMgbm90IGV4aGF1c3RpdmUgaW4gY29udmVydGluZyB0
byB1c2UgVk0mLCBidXQgYXBwbGllcyB0aGUgY2hhbmdlIHRvCisgICAgICAgIG1hbnkgY29tbW9u
bHkgdXNlZCBwaWVjZXMgb2YgY29kZSBmb3IgYSBzdGFydC4KKworICAgICAgICBUaGlzIHBhdGNo
IGFsc28gcmVtb3ZlcyB0aGUgSWRlbnRpZmllciBjb25zdHJ1Y3RvciBhbmQgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZygpCisgICAgICAgIG1ldGhvZHMgdGhhdCBhY3Qgb24gQXRvbVN0cmluZyBhbmQg
QXRvbVN0cmluZ0ltcGwuCisKKyAgICAgICAgQXRvbVN0cmluZyBoYXMgYSBjYXN0IG9wZXJhdG9y
IHRoYXQgY2FuIGltcGxpY2l0bHkgY29udmVydCBpdCB0byBhIFN0cmluZy4KKyAgICAgICAgQXRv
bVN0cmluZ0ltcGwgaXMgYSBzdWJjbGFzcyBvZiBTdHJpbmdJbXBsLiAgQXMgYSByZXN1bHQsIGhh
dmluZworICAgICAgICBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCkgdmFyaWFudHMgZm9yIHRoZXNl
IHR5cGVzIG9ubHkgcmVzdWx0IGluIGFtYmlndWl0eSB3aGVuCisgICAgICAgIGFuIEF0b21TdHJp
bmcgaXMgZW5jb3VudGVyZWQuCisKKyAgICAgICAgVGhlIFN0cmluZyBhbmQgU3RyaW5nSW1wbCB2
YXJpYW50cyBvZiBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCkgd2lsbCBjYWxsIGlubGluZQorICAg
ICAgICBtZXRob2QgSWRlbnRpZmllcjo6YWRkKCkgd2hpY2gsIGluIHR1cm4sIGNhbGxzIGlubGlu
ZSBtZXRob2QKKyAgICAgICAgQXRvbVN0cmluZ0ltcGw6OmFkZFdpdGhTdHJpbmdUYWJsZVByb3Zp
ZGVyKCksIHdoaWNoIGRvZXMgYSBudWxsIGNoZWNrLCBhbmQgdGhlbgorICAgICAgICBjYWxscyB0
aGUgaW5saW5lIG1ldGhvZCBBdG9tU3RyaW5nSW1wbDo6YWRkKCksIC4uLiB3aGljaCBmaW5hbGx5
IGRvZXMgYQorICAgICAgICBzdHJpbmcuaXNBdG9tKCkgY2hlY2suICBUaGUgY2hlY2sgYmFzaWNh
bGx5IHRlc3RzIGEgYml0IG9uIHRoZSBTdHJpbmdJbXBsJ3MgZmxhZ3MuCisKKyAgICAgICAgTGV0
J3MgdGVzdCBpZiB0aGVyZSdzIGFueSBwZXJmb3JtYW5jZSBkaWZmZXJlbmNlIGJldHdlZW4gdXNp
bmcgdGhlIFN0cmluZ0ltcGwgYW5kCisgICAgICAgIHRoZSBBdG9tU3RyaW5nSW1wbCB2YXJpYW50
cy4KKworICAgICAgICAqIEFQSS9BUElDYXN0Lmg6CisgICAgICAgICh0b0pTKToKKyAgICAgICAg
KiBBUEkvSlNBUElHbG9iYWxPYmplY3QubW06CisgICAgICAgIChKU0M6OkpTQVBJR2xvYmFsT2Jq
ZWN0Ojptb2R1bGVMb2FkZXJSZXNvbHZlKToKKyAgICAgICAgKEpTQzo6SlNBUElHbG9iYWxPYmpl
Y3Q6Om1vZHVsZUxvYWRlckltcG9ydE1vZHVsZSk6CisgICAgICAgIChKU0M6OkpTQVBJR2xvYmFs
T2JqZWN0Ojptb2R1bGVMb2FkZXJGZXRjaCk6CisgICAgICAgIChKU0M6OkpTQVBJR2xvYmFsT2Jq
ZWN0Ojptb2R1bGVMb2FkZXJDcmVhdGVJbXBvcnRNZXRhUHJvcGVydGllcyk6CisgICAgICAgIChK
U0M6OkpTQVBJR2xvYmFsT2JqZWN0Ojpsb2FkQW5kRXZhbHVhdGVKU1NjcmlwdE1vZHVsZSk6Cisg
ICAgICAgICogQVBJL0pTQ2FsbGJhY2tDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OkpT
Q2FsbGJhY2tDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAqIEFQSS9KU0Nh
bGxiYWNrT2JqZWN0RnVuY3Rpb25zLmg6CisgICAgICAgIChKU0M6OkpTQ2FsbGJhY2tPYmplY3Q8
UGFyZW50Pjo6YXNDYWxsYmFja09iamVjdCk6CisgICAgICAgIChKU0M6OkpTQ2FsbGJhY2tPYmpl
Y3Q8UGFyZW50Pjo6fkpTQ2FsbGJhY2tPYmplY3QpOgorICAgICAgICAoSlNDOjpKU0NhbGxiYWNr
T2JqZWN0PFBhcmVudD46OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgpOgorICAgICAgICAoSlND
OjpKU0NhbGxiYWNrT2JqZWN0PFBhcmVudD46OnB1dEJ5SW5kZXgpOgorICAgICAgICAoSlNDOjpK
U0NhbGxiYWNrT2JqZWN0PFBhcmVudD46OmRlbGV0ZVByb3BlcnR5QnlJbmRleCk6CisgICAgICAg
IChKU0M6OkpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5h
bWVzKToKKyAgICAgICAgKiBBUEkvSlNDb250ZXh0Lm1tOgorICAgICAgICAoLVtKU0NvbnRleHQg
ZGVwZW5kZW5jeUlkZW50aWZpZXJzRm9yTW9kdWxlSlNTY3JpcHQ6XSk6CisgICAgICAgICogQVBJ
L0pTT2JqZWN0UmVmLmNwcDoKKyAgICAgICAgKEpTT2JqZWN0TWFrZUZ1bmN0aW9uKToKKyAgICAg
ICAgKGNsYXNzSW5mb1ByaXZhdGUpOgorICAgICAgICAoSlNPYmplY3RHZXRQcml2YXRlKToKKyAg
ICAgICAgKEpTT2JqZWN0U2V0UHJpdmF0ZSk6CisgICAgICAgIChKU09iamVjdENvcHlQcm9wZXJ0
eU5hbWVzKToKKyAgICAgICAgKEpTUHJvcGVydHlOYW1lQWNjdW11bGF0b3JBZGROYW1lKToKKyAg
ICAgICAgKEpTT2JqZWN0R2V0UHJveHlUYXJnZXQpOgorICAgICAgICAqIEFQSS9KU1NjcmlwdFJl
Zi5jcHA6CisgICAgICAgIChwYXJzZVNjcmlwdCk6CisgICAgICAgICogQVBJL0pTVmFsdWVSZWYu
Y3BwOgorICAgICAgICAoSlNWYWx1ZU1ha2VTdHJpbmcpOgorICAgICAgICAqIEFQSS9PcGFxdWVK
U1N0cmluZy5jcHA6CisgICAgICAgIChPcGFxdWVKU1N0cmluZzo6aWRlbnRpZmllciBjb25zdCk6
CisgICAgICAgICogQVBJL2dsaWIvSlNDQ29udGV4dC5jcHA6CisgICAgICAgIChqc2NfY29udGV4
dF9jaGVja19zeW50YXgpOgorICAgICAgICAqIEtleXdvcmRMb29rdXBHZW5lcmF0b3IucHk6Cisg
ICAgICAgIChUcmllLnByaW50U3ViVHJlZUFzQyk6CisgICAgICAgICogU2NyaXB0cy93a2J1aWx0
aW5zL2J1aWx0aW5zX2dlbmVyYXRlX3dyYXBwZXJfaGVhZGVyLnB5OgorICAgICAgICAoQnVpbHRp
bnNXcmFwcGVySGVhZGVyR2VuZXJhdG9yLmdlbmVyYXRlX2NvbnN0cnVjdG9yKToKKyAgICAgICAg
KiBTY3JpcHRzL3drYnVpbHRpbnMvYnVpbHRpbnNfdGVtcGxhdGVzLnB5OgorICAgICAgICAqIGJp
bmRpbmdzL1NjcmlwdEZ1bmN0aW9uQ2FsbC5jcHA6CisgICAgICAgIChEZXByZWNhdGVkOjpTY3Jp
cHRDYWxsQXJndW1lbnRIYW5kbGVyOjphcHBlbmRBcmd1bWVudCk6CisgICAgICAgIChEZXByZWNh
dGVkOjpTY3JpcHRGdW5jdGlvbkNhbGw6OmNhbGwpOgorICAgICAgICAqIGJpbmRpbmdzL1Njcmlw
dFZhbHVlLmNwcDoKKyAgICAgICAgKEluc3BlY3Rvcjo6anNUb0luc3BlY3RvclZhbHVlKToKKyAg
ICAgICAgKiBidWlsdGlucy9CdWlsdGluRXhlY3V0YWJsZXMuY3BwOgorICAgICAgICAoSlNDOjpC
dWlsdGluRXhlY3V0YWJsZXM6OmNyZWF0ZUV4ZWN1dGFibGUpOgorICAgICAgICAqIGJ1aWx0aW5z
L0J1aWx0aW5OYW1lcy5jcHA6CisgICAgICAgIChKU0M6OkJ1aWx0aW5OYW1lczo6QnVpbHRpbk5h
bWVzKToKKyAgICAgICAgKiBidWlsdGlucy9CdWlsdGluTmFtZXMuaDoKKyAgICAgICAgKEpTQzo6
QnVpbHRpbk5hbWVzOjpnZXRQdWJsaWNOYW1lIGNvbnN0KToKKyAgICAgICAgKiBieXRlY29kZS9C
eXRlY29kZUR1bXBlci5jcHA6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlRHVtcGVyPEJsb2NrPjo6
dm0gY29uc3QpOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmg6CisgICAgICAg
ICogYnl0ZWNvZGUvQnl0ZWNvZGVHZW5lcmF0b3JpZmljYXRpb24uY3BwOgorICAgICAgICAoSlND
OjpCeXRlY29kZUdlbmVyYXRvcmlmaWNhdGlvbjo6Qnl0ZWNvZGVHZW5lcmF0b3JpZmljYXRpb24p
OgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcmlmaWNhdGlvbjo6c3RvcmFnZUZvckdl
bmVyYXRvckxvY2FsKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3JpZmljYXRpb246
OnJ1bik6CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVJbnRyaW5zaWNSZWdpc3RyeS5jcHA6
CisgICAgICAgIChKU0M6OkJ5dGVjb2RlSW50cmluc2ljUmVnaXN0cnk6OnNlbnRpbmVsTWFwQnVj
a2V0VmFsdWUpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUludHJpbnNpY1JlZ2lzdHJ5OjpzZW50
aW5lbFNldEJ1Y2tldFZhbHVlKToKKyAgICAgICAgKiBieXRlY29kZS9DYWxsVmFyaWFudC5oOgor
ICAgICAgICAoSlNDOjpDYWxsVmFyaWFudDo6aW50ZXJuYWxGdW5jdGlvbiBjb25zdCk6CisgICAg
ICAgIChKU0M6OkNhbGxWYXJpYW50OjpmdW5jdGlvbiBjb25zdCk6CisgICAgICAgIChKU0M6OkNh
bGxWYXJpYW50Ojppc0Nsb3N1cmVDYWxsIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FsbFZhcmlh
bnQ6OmV4ZWN1dGFibGUgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWxsVmFyaWFudDo6ZnVuY3Rp
b25FeGVjdXRhYmxlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FsbFZhcmlhbnQ6Om5hdGl2ZUV4
ZWN1dGFibGUgY29uc3QpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAg
ICAgIChKU0M6OkNvZGVCbG9jazo6ZHVtcFNvdXJjZSk6CisgICAgICAgIChKU0M6OkNvZGVCbG9j
azo6Q29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzZXRDb25zdGFudElkZW50
aWZpZXJTZXRSZWdpc3RlcnMpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNldE51bVBhcmFt
ZXRlcnMpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmZpbmFsaXplQmFzZWxpbmVKSVRJbmxp
bmVDYWNoZXMpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnVubGlua0luY29taW5nQ2FsbHMp
OgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnJlcGxhY2VtZW50KToKKyAgICAgICAgKEpTQzo6
Q29kZUJsb2NrOjpjb21wdXRlQ2FwYWJpbGl0eUxldmVsKToKKyAgICAgICAgKEpTQzo6Q29kZUJs
b2NrOjpub3RpY2VJbmNvbWluZ0NhbGwpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om5hbWVG
b3JSZWdpc3Rlcik6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6aW5zZXJ0QmFzaWNCbG9ja0Jv
dW5kYXJpZXNGb3JDb250cm9sRmxvd1Byb2ZpbGVyKToKKyAgICAgICAgKiBieXRlY29kZS9Db2Rl
QmxvY2suaDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp2bSBjb25zdCk6CisgICAgICAgIChK
U0M6OkNvZGVCbG9jazo6bnVtYmVyT2ZBcmd1bWVudFZhbHVlUHJvZmlsZXMpOgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OnZhbHVlUHJvZmlsZUZvckFyZ3VtZW50KToKKyAgICAgICAgKiBieXRl
Y29kZS9EZWZlcnJlZFNvdXJjZUR1bXAuY3BwOgorICAgICAgICAoSlNDOjpEZWZlcnJlZFNvdXJj
ZUR1bXA6OkRlZmVycmVkU291cmNlRHVtcCk6CisgICAgICAgICogYnl0ZWNvZGUvRXZhbENvZGVC
bG9jay5oOgorICAgICAgICAqIGJ5dGVjb2RlL0Z1bmN0aW9uQ29kZUJsb2NrLmg6CisgICAgICAg
ICogYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHA6CisgICAgICAgIChKU0M6OkdldEJ5SWRTdGF0
dXM6OmNvbXB1dGVGcm9tTExJbnQpOgorICAgICAgICAqIGJ5dGVjb2RlL0dsb2JhbENvZGVCbG9j
ay5oOgorICAgICAgICAoSlNDOjpHbG9iYWxDb2RlQmxvY2s6Okdsb2JhbENvZGVCbG9jayk6Cisg
ICAgICAgICogYnl0ZWNvZGUvTW9kdWxlUHJvZ3JhbUNvZGVCbG9jay5oOgorICAgICAgICAqIGJ5
dGVjb2RlL09iamVjdEFsbG9jYXRpb25Qcm9maWxlSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpP
YmplY3RBbGxvY2F0aW9uUHJvZmlsZUJhc2U8RGVyaXZlZD46OnBvc3NpYmxlRGVmYXVsdFByb3Bl
cnR5Q291bnQpOgorICAgICAgICAqIGJ5dGVjb2RlL1BvbHlQcm90b0FjY2Vzc0NoYWluLmNwcDoK
KyAgICAgICAgKEpTQzo6UG9seVByb3RvQWNjZXNzQ2hhaW46OmNyZWF0ZSk6CisgICAgICAgICog
Ynl0ZWNvZGUvUHJvZ3JhbUNvZGVCbG9jay5oOgorICAgICAgICAqIGJ5dGVjb2RlL1Byb3BlcnR5
Q29uZGl0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6UHJvcGVydHlDb25kaXRpb246OmlzV2F0Y2hh
YmxlV2hlblZhbGlkIGNvbnN0KToKKyAgICAgICAgKiBieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNw
cDoKKyAgICAgICAgKEpTQzo6UHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZyb21MTEludCk6CisgICAg
ICAgICogYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwOgorICAgICAgICAoSlNDOjpTdHJ1
Y3R1cmVTdHViSW5mbzo6aW5pdEdldEJ5SWRTZWxmKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJl
U3R1YkluZm86OmluaXRQdXRCeUlkUmVwbGFjZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0
dWJJbmZvOjppbml0SW5CeUlkU2VsZik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZv
OjphZGRBY2Nlc3NDYXNlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86OnZpc2l0
V2Vha1JlZmVyZW5jZXMpOgorICAgICAgICAqIGJ5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNw
cDoKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OlVubGlua2VkQ29kZUJsb2NrKToK
KyAgICAgICAgKiBieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpV
bmxpbmtlZENvZGVCbG9jazo6YWRkU2V0Q29uc3RhbnQpOgorICAgICAgICAoSlNDOjpVbmxpbmtl
ZENvZGVCbG9jazo6YWRkQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9j
azo6YWRkRnVuY3Rpb25EZWNsKToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmFk
ZEZ1bmN0aW9uRXhwcik6CisgICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRFdmFsQ29kZUJsb2Nr
Lmg6CisgICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jay5oOgorICAg
ICAgICAqIGJ5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmNwcDoKKyAgICAgICAg
KEpTQzo6Z2VuZXJhdGVVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6
VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OlVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKToK
KyAgICAgICAgKiBieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5oOgorICAgICAg
ICAqIGJ5dGVjb2RlL1VubGlua2VkR2xvYmFsQ29kZUJsb2NrLmg6CisgICAgICAgIChKU0M6OlVu
bGlua2VkR2xvYmFsQ29kZUJsb2NrOjpVbmxpbmtlZEdsb2JhbENvZGVCbG9jayk6CisgICAgICAg
ICogYnl0ZWNvZGUvVW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrLmg6CisgICAgICAgICog
Ynl0ZWNvZGUvVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrLmg6CisgICAgICAgICogYnl0ZWNvbXBp
bGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0
b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6
OnB1c2hMZXhpY2FsU2NvcGVJbnRlcm5hbCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJh
dG9yOjplbWl0RGlyZWN0UHV0QnlJZCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9y
OjpnZXRWYXJpYWJsZXNVbmRlclREWik6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9y
OjphZGRCaWdJbnRDb25zdGFudCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjph
ZGRUZW1wbGF0ZU9iamVjdENvbnN0YW50KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0
b3I6OmVtaXROZXdEZWZhdWx0Q29uc3RydWN0b3IpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdl
bmVyYXRvcjo6ZW1pdFNldEZ1bmN0aW9uTmFtZUlmTmVlZGVkKToKKyAgICAgICAgKiBieXRlY29t
cGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0
b3I6OnZtIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnByb3BlcnR5
TmFtZXMgY29uc3QpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdE5vZGVJ
blRhaWxQb3NpdGlvbik6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RGVm
aW5lQ2xhc3NFbGVtZW50cyk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0
Tm9kZUluQ29uZGl0aW9uQ29udGV4dCk6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL05vZGVzQ29k
ZWdlbi5jcHA6CisgICAgICAgIChKU0M6OlJlZ0V4cE5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAg
ICAgIChKU0M6OkFycmF5Tm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6RnVuY3Rp
b25DYWxsUmVzb2x2ZU5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkJ5dGVjb2Rl
SW50cmluc2ljTm9kZTo6ZW1pdF9pbnRyaW5zaWNfZ2V0QnlJZERpcmVjdFByaXZhdGUpOgorICAg
ICAgICAoSlNDOjpCeXRlY29kZUludHJpbnNpY05vZGU6OmVtaXRfaW50cmluc2ljX3B1dEJ5SWRE
aXJlY3RQcml2YXRlKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVJbnRyaW5zaWNOb2RlOjplbWl0
X2ludHJpbnNpY190b09iamVjdCk6CisgICAgICAgIChKU0M6Okluc3RhbmNlT2ZOb2RlOjplbWl0
Qnl0ZWNvZGUpOgorICAgICAgICAqIGRlYnVnZ2VyL0RlYnVnZ2VyLmNwcDoKKyAgICAgICAgKiBk
ZWJ1Z2dlci9EZWJ1Z2dlclBhcnNlRGF0YS5jcHA6CisgICAgICAgIChKU0M6OmdhdGhlckRlYnVn
Z2VyUGFyc2VEYXRhKToKKyAgICAgICAgKiBkZWJ1Z2dlci9EZWJ1Z2dlclNjb3BlLmNwcDoKKyAg
ICAgICAgKEpTQzo6RGVidWdnZXJTY29wZTo6bmV4dCk6CisgICAgICAgIChKU0M6OkRlYnVnZ2Vy
U2NvcGU6Om5hbWUgY29uc3QpOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlclNjb3BlOjpsb2NhdGlv
biBjb25zdCk6CisgICAgICAgICogZGZnL0RGR0Rlc2lyZWRJZGVudGlmaWVycy5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6RGVzaXJlZElkZW50aWZpZXJzOjpyZWFsbHlBZGQpOgorICAgICAgICAq
IGRmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkFycmF5
QnVmZmVyVmlld1dhdGNocG9pbnRBZGFwdG9yOjphZGQpOgorICAgICAgICAoSlNDOjpERkc6OkFk
YXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludEFkYXB0b3I6OmFkZCk6CisgICAgICAgICogZGZnL0RG
R0Zyb3plblZhbHVlLmg6CisgICAgICAgIChKU0M6OkRGRzo6RnJvemVuVmFsdWU6OkZyb3plblZh
bHVlKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguY3BwOgorICAgICAgICAoSlNDOjpERkc6Okdy
YXBoOjpjYW5PcHRpbWl6ZVN0cmluZ09iamVjdEFjY2Vzcyk6CisgICAgICAgICogZGZnL0RGR0pJ
VENvbXBpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6bGlua09TUkV4
aXRzKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6Y29tcGlsZUV4Y2VwdGlvbkhh
bmRsZXJzKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6bGluayk6CisgICAgICAg
IChKU0M6OkRGRzo6ZW1pdFN0YWNrT3ZlcmZsb3dDaGVjayk6CisgICAgICAgIChKU0M6OkRGRzo6
SklUQ29tcGlsZXI6OmNvbXBpbGVGdW5jdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29t
cGlsZXI6OmV4Y2VwdGlvbkNoZWNrKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6
bWFrZUNhdGNoT1NSRW50cnlCdWZmZXIpOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5o
OgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpleGNlcHRpb25DaGVja1dpdGhDYWxs
RnJhbWVSb2xsYmFjayk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmZhc3RFeGNl
cHRpb25DaGVjayk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OnZtKToKKyAgICAg
ICAgKiBkZmcvREZHTGF6eUpTVmFsdWUuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkxhenlKU1Zh
bHVlOjpnZXRWYWx1ZSBjb25zdCk6CisgICAgICAgIChKU0M6OkRGRzo6TGF6eUpTVmFsdWU6OmVt
aXQgY29uc3QpOgorICAgICAgICAqIGRmZy9ERkdPU1JFbnRyeS5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6cHJlcGFyZU9TUkVudHJ5KToKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdC5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6T1NSRXhpdDo6Y29tcGlsZU9TUkV4aXQpOgorICAgICAgICAoSlND
OjpERkc6Ok9TUkV4aXQ6OmRlYnVnT3BlcmF0aW9uUHJpbnRTcGVjdWxhdGlvbkZhaWx1cmUpOgor
ICAgICAgICAqIGRmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uaDoKKyAgICAgICAgKEpTQzo6
REZHOjphZGp1c3RGcmFtZUFuZFN0YWNrSW5PU1JFeGl0Q29tcGlsZXJUaHVuayk6CisgICAgICAg
ICogZGZnL0RGR09wZXJhdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpERkc6Om5ld1R5cGVkQXJy
YXlXaXRoU2l6ZSk6CisgICAgICAgIChKU0M6OkRGRzo6YmluYXJ5T3ApOgorICAgICAgICAoSlND
OjpERkc6OmJpdHdpc2VCaW5hcnlPcCk6CisgICAgICAgICogZGZnL0RGR1BsYW4uY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OlBsYW46OlBsYW4pOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVtaXRBbGxvY2F0
ZVJhd09iamVjdCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVT
dHJpbmdTbGljZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVD
dXJyZW50QmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxl
Q2hlY2tUcmFwcyk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVH
ZXRCeVZhbE9uU3RyaW5nKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUZyb21DaGFyQ29kZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVTdHJpbmdaZXJvTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZUxvZ2ljYWxOb3RTdHJpbmdPck90aGVyKToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6ZW1pdFN0cmluZ0JyYW5jaCk6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmVtaXRTdHJpbmdPck90aGVyQnJhbmNoKToKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6Y2FnZVR5cGVkQXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEdsb2JhbE9iamVjdCk6CisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVOZXdGdW5jdGlvbkNvbW1vbik6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDcmVhdGVBY3RpdmF0aW9uKToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNyZWF0ZURpcmVjdEFy
Z3VtZW50cyk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTcHJl
YWQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlTmV3QXJyYXkp
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlTmV3QXJyYXlXaXRo
U3ByZWFkKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFycmF5
U2xpY2UpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJyYXlQ
dXNoKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVR5cGVPZik6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBbGxvY2F0ZVByb3Bl
cnR5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVS
ZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZU51a2VTdHJ1Y3R1cmVBbmRTZXRCdXR0ZXJmbHkpOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlQ2FsbERPTUdldHRlcik6CisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDaGVja1N1YkNsYXNzKToKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5ld1N0cmluZ09iamVjdCk6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVOZXdUeXBlZEFycmF5V2l0aFNp
emUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlTmV3UmVnZXhw
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVN0b3JlQmFycmll
cik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTdHJpbmdSZXBs
YWNlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU1hdGVyaWFs
aXplTmV3T2JqZWN0KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdEFs
bG9jYXRlQnV0dGVyZmx5KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUdldE1hcEJ1Y2tldE5leHQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
Ojpjb21waWxlT2JqZWN0S2V5cyk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVDcmVhdGVUaGlzKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZU5ld09iamVjdCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVMb2dTaGFkb3dDaGlja2VuUHJvbG9ndWUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpjb21waWxlTG9nU2hhZG93Q2hpY2tlblRhaWwpOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0UHJvdG90eXBlT2YpOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlQWxsb2NhdGVOZXdBcnJheVdpdGhTaXplKToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVByb2ZpbGVUeXBlKToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU1ha2VSb3BlKToKKyAg
ICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuaDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6dm0pOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpwcmVw
YXJlRm9yRXh0ZXJuYWxDYWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
ZW1pdEFsbG9jYXRlSlNPYmplY3RXaXRoS25vd25TaXplKToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6ZW1pdEFsbG9jYXRlSlNPYmplY3QpOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjplbWl0QWxsb2NhdGVWYXJpYWJsZVNpemVkSlNPYmplY3QpOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0QWxsb2NhdGVEZXN0cnVjdGlibGVP
YmplY3QpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwpOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlTG9naWNhbE5vdCk6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmVtaXRCcmFuY2gpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlTm9u
UGVlcGhvbGVDb21wYXJlTnVsbE9yVW5kZWZpbmVkKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaE51bGxPclVuZGVmaW5lZCk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKToKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdE9yT3RoZXJMb2dpY2FsTm90
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUxvZ2ljYWxOb3Qp
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0T2JqZWN0T3JPdGhlckJy
YW5jaCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVtaXRCcmFuY2gpOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBk
ZmcvREZHVGh1bmtzLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpvc3JFeGl0VGh1bmtHZW5lcmF0
b3IpOgorICAgICAgICAoSlNDOjpERkc6Om9zckV4aXRHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3Ip
OgorICAgICAgICAoSlNDOjpERkc6Om9zckVudHJ5VGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAq
IGRmZy9ERkdUaHVua3MuaDoKKyAgICAgICAgKiBkZmcvREZHVG9GVExGb3JPU1JFbnRyeURlZmVy
cmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6VG9GVExGb3JP
U1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6Y29tcGlsYXRpb25EaWRDb21wbGV0
ZSk6CisgICAgICAgICogZGZnL0RGR1dvcmtsaXN0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpX
b3JrbGlzdDo6dmlzaXRXZWFrUmVmZXJlbmNlcyk6CisgICAgICAgICogZHluYmVuY2guY3BwOgor
ICAgICAgICAobWFpbik6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9CMy5jcHA6CisgICAg
ICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVNYWtlUm9wZSk6CisgICAg
ICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVTdHJpbmdTbGljZSk6Cisg
ICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmJvb2xpZnkpOgorICAgICAgICAq
IGZ0bC9GVExUaHVua3MuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OmdlbmVyaWNHZW5lcmF0aW9u
VGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpGVEw6Om9zckV4aXRHZW5lcmF0aW9uVGh1
bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpGVEw6OmxhenlTbG93UGF0aEdlbmVyYXRpb25U
aHVua0dlbmVyYXRvcik6CisgICAgICAgICogZnRsL0ZUTFRodW5rcy5oOgorICAgICAgICAqIGhl
YXAvQ2VsbENvbnRhaW5lci5oOgorICAgICAgICAqIGhlYXAvQ2VsbENvbnRhaW5lcklubGluZXMu
aDoKKyAgICAgICAgKEpTQzo6Q2VsbENvbnRhaW5lcjo6dm0gY29uc3QpOgorICAgICAgICAoSlND
OjpDZWxsQ29udGFpbmVyOjpoZWFwIGNvbnN0KToKKyAgICAgICAgKiBoZWFwL0NvbXBsZXRlU3Vi
c3BhY2UuY3BwOgorICAgICAgICAoSlNDOjpDb21wbGV0ZVN1YnNwYWNlOjp0cnlBbGxvY2F0ZVNs
b3cpOgorICAgICAgICAoSlNDOjpDb21wbGV0ZVN1YnNwYWNlOjpyZWFsbG9jYXRlTGFyZ2VBbGxv
Y2F0aW9uTm9uVmlydHVhbCk6CisgICAgICAgICogaGVhcC9HQ0FjdGl2aXR5Q2FsbGJhY2suaDoK
KyAgICAgICAgKiBoZWFwL0dDQXNzZXJ0aW9ucy5oOgorICAgICAgICAqIGhlYXAvSGFuZGxlU2V0
LmNwcDoKKyAgICAgICAgKEpTQzo6SGFuZGxlU2V0OjpIYW5kbGVTZXQpOgorICAgICAgICAqIGhl
YXAvSGFuZGxlU2V0Lmg6CisgICAgICAgIChKU0M6OkhhbmRsZVNldDo6dm0pOgorICAgICAgICAq
IGhlYXAvSGVhcC5jcHA6CisgICAgICAgIChKU0M6OkhlYXA6OkhlYXApOgorICAgICAgICAoSlND
OjpIZWFwOjpsYXN0Q2hhbmNlVG9GaW5hbGl6ZSk6CisgICAgICAgIChKU0M6OkhlYXA6OnJlbGVh
c2VEZWxheWVkUmVsZWFzZWRPYmplY3RzKToKKyAgICAgICAgKEpTQzo6SGVhcDo6cHJvdGVjdCk6
CisgICAgICAgIChKU0M6OkhlYXA6OnVucHJvdGVjdCk6CisgICAgICAgIChKU0M6OkhlYXA6OmZp
bmFsaXplTWFya2VkVW5jb25kaXRpb25hbEZpbmFsaXplcnMpOgorICAgICAgICAoSlNDOjpIZWFw
OjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxGaW5hbGl6ZXJzKToKKyAgICAgICAgKEpTQzo6SGVhcDo6
Y29tcGxldGVBbGxKSVRQbGFucyk6CisgICAgICAgIChKU0M6OkhlYXA6Oml0ZXJhdGVFeGVjdXRp
bmdBbmRDb21waWxpbmdDb2RlQmxvY2tzKToKKyAgICAgICAgKEpTQzo6SGVhcDo6Z2F0aGVySlNT
dGFja1Jvb3RzKToKKyAgICAgICAgKEpTQzo6SGVhcDo6Z2F0aGVyU2NyYXRjaEJ1ZmZlclJvb3Rz
KToKKyAgICAgICAgKEpTQzo6SGVhcDo6cmVtb3ZlRGVhZENvbXBpbGVyV29ya2xpc3RFbnRyaWVz
KToKKyAgICAgICAgKEpTQzo6SGVhcDo6aXNBbmFseXppbmdIZWFwIGNvbnN0KToKKyAgICAgICAg
KEpTQzo6SGVhcDo6Z2F0aGVyRXh0cmFIZWFwRGF0YSk6CisgICAgICAgIChKU0M6OkhlYXA6OnBy
b3RlY3RlZE9iamVjdFR5cGVDb3VudHMpOgorICAgICAgICAoSlNDOjpIZWFwOjpvYmplY3RUeXBl
Q291bnRzKToKKyAgICAgICAgKEpTQzo6SGVhcDo6ZGVsZXRlQWxsQ29kZUJsb2Nrcyk6CisgICAg
ICAgIChKU0M6OkhlYXA6OmRlbGV0ZUFsbFVubGlua2VkQ29kZUJsb2Nrcyk6CisgICAgICAgIChK
U0M6OkhlYXA6OmRlbGV0ZVVubWFya2VkQ29tcGlsZWRDb2RlKToKKyAgICAgICAgKEpTQzo6SGVh
cDo6Y2hlY2tDb25uKToKKyAgICAgICAgKEpTQzo6SGVhcDo6cnVuRW5kUGhhc2UpOgorICAgICAg
ICAoSlNDOjpIZWFwOjpzdG9wVGhlUGVyaXBoZXJ5KToKKyAgICAgICAgKEpTQzo6SGVhcDo6Zmlu
YWxpemUpOgorICAgICAgICAoSlNDOjpIZWFwOjpyZXF1ZXN0Q29sbGVjdGlvbik6CisgICAgICAg
IChKU0M6OkhlYXA6OnN3ZWVwSW5GaW5hbGl6ZSk6CisgICAgICAgIChKU0M6OkhlYXA6OnN3ZWVw
QXJyYXlCdWZmZXJzKToKKyAgICAgICAgKEpTQzo6SGVhcDo6ZGVsZXRlU291cmNlUHJvdmlkZXJD
YWNoZXMpOgorICAgICAgICAoSlNDOjpIZWFwOjpkaWRGaW5pc2hDb2xsZWN0aW9uKToKKyAgICAg
ICAgKEpTQzo6SGVhcDo6YWRkQ29yZUNvbnN0cmFpbnRzKToKKyAgICAgICAgKiBoZWFwL0hlYXAu
aDoKKyAgICAgICAgKiBoZWFwL0hlYXBDZWxsLmg6CisgICAgICAgICogaGVhcC9IZWFwQ2VsbElu
bGluZXMuaDoKKyAgICAgICAgKEpTQzo6SGVhcENlbGw6OmhlYXAgY29uc3QpOgorICAgICAgICAo
SlNDOjpIZWFwQ2VsbDo6dm0gY29uc3QpOgorICAgICAgICAqIGhlYXAvSGVhcElubGluZXMuaDoK
KyAgICAgICAgKEpTQzo6SGVhcDo6dm0gY29uc3QpOgorICAgICAgICAqIGhlYXAvSXNvU3Vic3Bh
Y2VQZXJWTS5jcHA6CisgICAgICAgIChKU0M6Oklzb1N1YnNwYWNlUGVyVk06OkF1dG9yZW1vdmlu
Z0lzb1N1YnNwYWNlOjp+QXV0b3JlbW92aW5nSXNvU3Vic3BhY2UpOgorICAgICAgICAqIGhlYXAv
TGFyZ2VBbGxvY2F0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6TGFyZ2VBbGxvY2F0aW9uOjpzd2Vl
cCk6CisgICAgICAgIChKU0M6OkxhcmdlQWxsb2NhdGlvbjo6YXNzZXJ0VmFsaWRDZWxsIGNvbnN0
KToKKyAgICAgICAgKiBoZWFwL0xhcmdlQWxsb2NhdGlvbi5oOgorICAgICAgICAoSlNDOjpMYXJn
ZUFsbG9jYXRpb246OnZtIGNvbnN0KToKKyAgICAgICAgKiBoZWFwL0xvY2FsQWxsb2NhdG9yLmNw
cDoKKyAgICAgICAgKEpTQzo6TG9jYWxBbGxvY2F0b3I6OmFsbG9jYXRlU2xvd0Nhc2UpOgorICAg
ICAgICAqIGhlYXAvTWFya2VkQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6
SGFuZGxlOjpIYW5kbGUpOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6YWJvdXRUb01hcmtT
bG93KToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OmFzc2VydE1hcmtzTm90U3RhbGUpOgor
ICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6YXJlTWFya3NTdGFsZSk6CisgICAgICAgIChKU0M6
Ok1hcmtlZEJsb2NrOjppc01hcmtlZCk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjphc3Nl
cnRWYWxpZENlbGwgY29uc3QpOgorICAgICAgICAqIGhlYXAvTWFya2VkQmxvY2suaDoKKyAgICAg
ICAgKEpTQzo6TWFya2VkQmxvY2s6OkhhbmRsZTo6dm0gY29uc3QpOgorICAgICAgICAoSlNDOjpN
YXJrZWRCbG9jazo6dm0gY29uc3QpOgorICAgICAgICAqIGhlYXAvTWFya2VkQmxvY2tJbmxpbmVz
Lmg6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpoZWFwIGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6TWFya2VkQmxvY2s6OkhhbmRsZTo6c3BlY2lhbGl6ZWRTd2VlcCk6CisgICAgICAgICogaGVh
cC9TbG90VmlzaXRvci5jcHA6CisgICAgICAgIChKU0M6OnZhbGlkYXRlKToKKyAgICAgICAgKiBo
ZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6dm0p
OgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6dm0gY29uc3QpOgorICAgICAgICAqIGhlYXAv
U3RvcElmTmVjZXNzYXJ5VGltZXIuY3BwOgorICAgICAgICAoSlNDOjpTdG9wSWZOZWNlc3NhcnlU
aW1lcjo6U3RvcElmTmVjZXNzYXJ5VGltZXIpOgorICAgICAgICAqIGhlYXAvU3RvcElmTmVjZXNz
YXJ5VGltZXIuaDoKKyAgICAgICAgKiBoZWFwL1N0cm9uZy5oOgorICAgICAgICAoSlNDOjpTdHJv
bmc6Om9wZXJhdG9yPSk6CisgICAgICAgICogaGVhcC9XZWFrU2V0Lmg6CisgICAgICAgIChKU0M6
OldlYWtTZXQ6OldlYWtTZXQpOgorICAgICAgICAoSlNDOjpXZWFrU2V0Ojp2bSBjb25zdCk6Cisg
ICAgICAgICogaW5zcGVjdG9yL0pTSW5qZWN0ZWRTY3JpcHRIb3N0LmNwcDoKKyAgICAgICAgKElu
c3BlY3Rvcjo6SlNJbmplY3RlZFNjcmlwdEhvc3Q6OnNhdmVkUmVzdWx0QWxpYXMgY29uc3QpOgor
ICAgICAgICAoSW5zcGVjdG9yOjpKU0luamVjdGVkU2NyaXB0SG9zdDo6aW50ZXJuYWxDb25zdHJ1
Y3Rvck5hbWUpOgorICAgICAgICAoSW5zcGVjdG9yOjpKU0luamVjdGVkU2NyaXB0SG9zdDo6c3Vi
dHlwZSk6CisgICAgICAgIChJbnNwZWN0b3I6OkpTSW5qZWN0ZWRTY3JpcHRIb3N0OjpmdW5jdGlv
bkRldGFpbHMpOgorICAgICAgICAoSW5zcGVjdG9yOjpjb25zdHJ1Y3RJbnRlcm5hbFByb3BlcnR5
KToKKyAgICAgICAgKEluc3BlY3Rvcjo6SlNJbmplY3RlZFNjcmlwdEhvc3Q6OmdldEludGVybmFs
UHJvcGVydGllcyk6CisgICAgICAgIChJbnNwZWN0b3I6OkpTSW5qZWN0ZWRTY3JpcHRIb3N0Ojp3
ZWFrTWFwRW50cmllcyk6CisgICAgICAgIChJbnNwZWN0b3I6OkpTSW5qZWN0ZWRTY3JpcHRIb3N0
Ojp3ZWFrU2V0RW50cmllcyk6CisgICAgICAgIChJbnNwZWN0b3I6OkpTSW5qZWN0ZWRTY3JpcHRI
b3N0OjppdGVyYXRvckVudHJpZXMpOgorICAgICAgICAoSW5zcGVjdG9yOjpKU0luamVjdGVkU2Ny
aXB0SG9zdDo6cXVlcnlJbnN0YW5jZXMpOgorICAgICAgICAoSW5zcGVjdG9yOjpKU0luamVjdGVk
U2NyaXB0SG9zdDo6cXVlcnlIb2xkZXJzKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSlNKYXZhU2Ny
aXB0Q2FsbEZyYW1lLmNwcDoKKyAgICAgICAgKEluc3BlY3Rvcjo6dmFsdWVGb3JTY29wZUxvY2F0
aW9uKToKKyAgICAgICAgKEluc3BlY3Rvcjo6SlNKYXZhU2NyaXB0Q2FsbEZyYW1lOjpzY29wZURl
c2NyaXB0aW9ucyk6CisgICAgICAgIChJbnNwZWN0b3I6OkpTSmF2YVNjcmlwdENhbGxGcmFtZTo6
ZnVuY3Rpb25OYW1lIGNvbnN0KToKKyAgICAgICAgKEluc3BlY3Rvcjo6SlNKYXZhU2NyaXB0Q2Fs
bEZyYW1lOjp0eXBlIGNvbnN0KToKKyAgICAgICAgKiBpbnNwZWN0b3IvU2NyaXB0Q2FsbFN0YWNr
RmFjdG9yeS5jcHA6CisgICAgICAgIChJbnNwZWN0b3I6OmV4dHJhY3RTb3VyY2VJbmZvcm1hdGlv
bkZyb21FeGNlcHRpb24pOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQXVk
aXRBZ2VudC5jcHA6CisgICAgICAgIChJbnNwZWN0b3I6Okluc3BlY3RvckF1ZGl0QWdlbnQ6OnBv
cHVsYXRlQXVkaXRPYmplY3QpOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9y
SGVhcEFnZW50LmNwcDoKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5zcGVjdG9ySGVhcEFnZW50Ojpn
Yyk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvRnJhbWVUcmFjZXJzLmg6CisgICAgICAgIChKU0M6
Ok5hdGl2ZUNhbGxGcmFtZVRyYWNlcjo6TmF0aXZlQ2FsbEZyYW1lVHJhY2VyKToKKyAgICAgICAg
KiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHA6CisgICAgICAgIChKU0M6OkludGVycHJldGVy
OjpleGVjdXRlUHJvZ3JhbSk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpwcmVwYXJlRm9y
UmVwZWF0Q2FsbCk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpleGVjdXRlKToKKyAgICAg
ICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmV4ZWN1dGVNb2R1bGVQcm9ncmFtKToKKyAgICAgICAgKiBp
bnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3BwOgorICAgICAgICAoSlNDOjpTdGFja1Zpc2l0b3I6
OkZyYW1lOjpjYWxsZWVTYXZlUmVnaXN0ZXJzRm9yVW53aW5kaW5nKToKKyAgICAgICAgKEpTQzo6
U3RhY2tWaXNpdG9yOjpGcmFtZTo6Y29tcHV0ZUxpbmVBbmRDb2x1bW4gY29uc3QpOgorICAgICAg
ICAqIGppdC9Bc3NlbWJseUhlbHBlcnMuY3BwOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBl
cnM6OmVtaXREdW1iVmlydHVhbENhbGwpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6
OmVtaXRDb252ZXJ0VmFsdWVUb0Jvb2xlYW4pOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBl
cnM6OmJyYW5jaElmVmFsdWUpOgorICAgICAgICAqIGppdC9Bc3NlbWJseUhlbHBlcnMuaDoKKyAg
ICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjp2bSk6CisgICAgICAgICogaml0L0pJVC5jcHA6
CisgICAgICAgIChKU0M6OkpJVDo6SklUKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0RW50ZXJP
cHRpbWl6YXRpb25DaGVjayk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVNYWlu
UGFzcyk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVFeGNlcHRpb25IYW5kbGVy
cyk6CisgICAgICAgICogaml0L0pJVC5oOgorICAgICAgICAqIGppdC9KSVRDYWxsLmNwcDoKKyAg
ICAgICAgKEpTQzo6SklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZSk6CisgICAgICAgICogaml0
L0pJVEV4Y2VwdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpnZW5lcmljVW53aW5kKToKKyAgICAg
ICAgKiBqaXQvSklURXhjZXB0aW9ucy5oOgorICAgICAgICAqIGppdC9KSVRJbmxpbmVDYWNoZUdl
bmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkpJVEdldEJ5SWRHZW5lcmF0b3I6OkpJVEdldEJ5
SWRHZW5lcmF0b3IpOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzLmNwcDoKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX2lzX3VuZGVmaW5lZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF9qZmFsc2UpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfamVxX251bGwpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3Bfam5lcV9udWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX2p0cnVlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3Rocm93KToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX2NhdGNoKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2Vx
X251bGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmVxX251bGwpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRTbG93X29wX2xvb3BfaGludCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fcHJvbG9ndWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWwpOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVz
MzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfamZhbHNlKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX2p0cnVlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3Ro
cm93KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2NhdGNoKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl9wcm9sb2d1ZSk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpbCk6CisgICAgICAgICogaml0L0pJ
VE9wZXJhdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpvcGVyYXRpb25OZXdGdW5jdGlvbkNvbW1v
bik6CisgICAgICAgIChKU0M6OnRyeUdldEJ5VmFsT3B0aW1pemUpOgorICAgICAgICAqIGppdC9K
SVRQcm9wZXJ0eUFjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFdyaXRlQmFycmll
cik6CisgICAgICAgICogaml0L0pJVFRodW5rcy5jcHA6CisgICAgICAgIChKU0M6OkpJVFRodW5r
czo6Y3RpTmF0aXZlQ2FsbCk6CisgICAgICAgIChKU0M6OkpJVFRodW5rczo6Y3RpTmF0aXZlQ29u
c3RydWN0KToKKyAgICAgICAgKEpTQzo6SklUVGh1bmtzOjpjdGlOYXRpdmVUYWlsQ2FsbCk6Cisg
ICAgICAgIChKU0M6OkpJVFRodW5rczo6Y3RpTmF0aXZlVGFpbENhbGxXaXRob3V0U2F2ZWRUYWdz
KToKKyAgICAgICAgKEpTQzo6SklUVGh1bmtzOjpjdGlJbnRlcm5hbEZ1bmN0aW9uQ2FsbCk6Cisg
ICAgICAgIChKU0M6OkpJVFRodW5rczo6Y3RpSW50ZXJuYWxGdW5jdGlvbkNvbnN0cnVjdCk6Cisg
ICAgICAgIChKU0M6OkpJVFRodW5rczo6Y3RpU3R1Yik6CisgICAgICAgIChKU0M6OkpJVFRodW5r
czo6aG9zdEZ1bmN0aW9uU3R1Yik6CisgICAgICAgICogaml0L0pJVFRodW5rcy5oOgorICAgICAg
ICAqIGppdC9KSVRXb3JrbGlzdC5jcHA6CisgICAgICAgIChKU0M6OkpJVFdvcmtsaXN0OjpQbGFu
Ojp2bSk6CisgICAgICAgIChKU0M6OkpJVFdvcmtsaXN0Ojpjb21wbGV0ZUFsbEZvclZNKToKKyAg
ICAgICAgKEpTQzo6SklUV29ya2xpc3Q6OnBvbGwpOgorICAgICAgICAoSlNDOjpKSVRXb3JrbGlz
dDo6Y29tcGlsZUxhdGVyKToKKyAgICAgICAgKEpTQzo6SklUV29ya2xpc3Q6OmNvbXBpbGVOb3cp
OgorICAgICAgICAqIGppdC9SZXBhdGNoLmNwcDoKKyAgICAgICAgKEpTQzo6cmVhZFB1dElDQ2Fs
bFRhcmdldCk6CisgICAgICAgIChKU0M6OmZ0bFRodW5rQXdhcmVSZXBhdGNoQ2FsbCk6CisgICAg
ICAgIChKU0M6OmxpbmtTbG93Rm9yKToKKyAgICAgICAgKEpTQzo6bGlua0Zvcik6CisgICAgICAg
IChKU0M6OmxpbmtEaXJlY3RGb3IpOgorICAgICAgICAoSlNDOjpyZXZlcnRDYWxsKToKKyAgICAg
ICAgKEpTQzo6dW5saW5rRm9yKToKKyAgICAgICAgKEpTQzo6bGlua1ZpcnR1YWxGb3IpOgorICAg
ICAgICAoSlNDOjpsaW5rUG9seW1vcnBoaWNDYWxsKToKKyAgICAgICAgKiBqaXQvU3BlY2lhbGl6
ZWRUaHVua0pJVC5oOgorICAgICAgICAoSlNDOjpTcGVjaWFsaXplZFRodW5rSklUOjpTcGVjaWFs
aXplZFRodW5rSklUKToKKyAgICAgICAgKiBqaXQvVGh1bmtHZW5lcmF0b3IuaDoKKyAgICAgICAg
KiBqaXQvVGh1bmtHZW5lcmF0b3JzLmNwcDoKKyAgICAgICAgKEpTQzo6dGhyb3dFeGNlcHRpb25G
cm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6c2xvd1BhdGhGb3IpOgor
ICAgICAgICAoSlNDOjpsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6bGlu
a1BvbHltb3JwaGljQ2FsbFRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6dmlydHVhbFRo
dW5rRm9yKToKKyAgICAgICAgKEpTQzo6bmF0aXZlRm9yR2VuZXJhdG9yKToKKyAgICAgICAgKEpT
Qzo6bmF0aXZlQ2FsbEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6Om5hdGl2ZVRhaWxDYWxsR2Vu
ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6bmF0aXZlVGFpbENhbGxXaXRob3V0U2F2ZWRUYWdzR2Vu
ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6bmF0aXZlQ29uc3RydWN0R2VuZXJhdG9yKToKKyAgICAg
ICAgKEpTQzo6aW50ZXJuYWxGdW5jdGlvbkNhbGxHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpp
bnRlcm5hbEZ1bmN0aW9uQ29uc3RydWN0R2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6YXJpdHlG
aXh1cEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OnVucmVhY2hhYmxlR2VuZXJhdG9yKToKKyAg
ICAgICAgKEpTQzo6c3RyaW5nR2V0QnlWYWxHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpjaGFy
VG9TdHJpbmcpOgorICAgICAgICAoSlNDOjpjaGFyQ29kZUF0VGh1bmtHZW5lcmF0b3IpOgorICAg
ICAgICAoSlNDOjpjaGFyQXRUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OmZyb21DaGFy
Q29kZVRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6Y2x6MzJUaHVua0dlbmVyYXRvcik6
CisgICAgICAgIChKU0M6OnNxcnRUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OmZsb29y
VGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpjZWlsVGh1bmtHZW5lcmF0b3IpOgorICAg
ICAgICAoSlNDOjp0cnVuY1RodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6cm91bmRUaHVu
a0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OmV4cFRodW5rR2VuZXJhdG9yKToKKyAgICAgICAg
KEpTQzo6bG9nVGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjphYnNUaHVua0dlbmVyYXRv
cik6CisgICAgICAgIChKU0M6OmltdWxUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OnJh
bmRvbVRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6Ym91bmRUaGlzTm9BcmdzRnVuY3Rp
b25DYWxsR2VuZXJhdG9yKToKKyAgICAgICAgKiBqaXQvVGh1bmtHZW5lcmF0b3JzLmg6CisgICAg
ICAgICoganNjLmNwcDoKKyAgICAgICAgKEdsb2JhbE9iamVjdDo6ZmluaXNoQ3JlYXRpb24pOgor
ICAgICAgICAoR2xvYmFsT2JqZWN0OjphZGRGdW5jdGlvbik6CisgICAgICAgIChHbG9iYWxPYmpl
Y3Q6Om1vZHVsZUxvYWRlckltcG9ydE1vZHVsZSk6CisgICAgICAgIChHbG9iYWxPYmplY3Q6Om1v
ZHVsZUxvYWRlclJlc29sdmUpOgorICAgICAgICAoR2xvYmFsT2JqZWN0Ojptb2R1bGVMb2FkZXJD
cmVhdGVJbXBvcnRNZXRhUHJvcGVydGllcyk6CisgICAgICAgIChmdW5jdGlvbkRlc2NyaWJlKToK
KyAgICAgICAgKGZ1bmN0aW9uRGVzY3JpYmVBcnJheSk6CisgICAgICAgIChKU0NNZW1vcnlGb290
cHJpbnQ6OmFkZFByb3BlcnR5KToKKyAgICAgICAgKGZ1bmN0aW9uUnVuKToKKyAgICAgICAgKGZ1
bmN0aW9uUnVuU3RyaW5nKToKKyAgICAgICAgKGZ1bmN0aW9uUmVhZEZpbGUpOgorICAgICAgICAo
ZnVuY3Rpb25DYWxsZXJTb3VyY2VPcmlnaW4pOgorICAgICAgICAoZnVuY3Rpb25SZWFkbGluZSk6
CisgICAgICAgIChmdW5jdGlvbkRvbGxhckNyZWF0ZVJlYWxtKToKKyAgICAgICAgKGZ1bmN0aW9u
RG9sbGFyRXZhbFNjcmlwdCk6CisgICAgICAgIChmdW5jdGlvbkRvbGxhckFnZW50R2V0UmVwb3J0
KToKKyAgICAgICAgKGZ1bmN0aW9uV2FpdEZvclJlcG9ydCk6CisgICAgICAgIChmdW5jdGlvbkpT
Q09wdGlvbnMpOgorICAgICAgICAoZnVuY3Rpb25DaGVja01vZHVsZVN5bnRheCk6CisgICAgICAg
IChmdW5jdGlvbkdlbmVyYXRlSGVhcFNuYXBzaG90Rm9yR0NEZWJ1Z2dpbmcpOgorICAgICAgICAo
ZnVuY3Rpb25XZWJBc3NlbWJseU1lbW9yeU1vZGUpOgorICAgICAgICAoZHVtcEV4Y2VwdGlvbik6
CisgICAgICAgIChjaGVja1VuY2F1Z2h0RXhjZXB0aW9uKToKKyAgICAgICAgKiBsbGludC9MTElu
dFNsb3dQYXRocy5jcHA6CisgICAgICAgIChKU0M6OkxMSW50OjpMTElOVF9TTE9XX1BBVEhfREVD
TCk6CisgICAgICAgIChKU0M6OkxMSW50OjpoYW5kbGVIb3N0Q2FsbCk6CisgICAgICAgICogcGFy
c2VyL0FTVEJ1aWxkZXIuaDoKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6QVNUQnVpbGRlcik6
CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OmNyZWF0ZVJlc29sdmUpOgorICAgICAgICAoSlND
OjpBU1RCdWlsZGVyOjpjcmVhdGVHZXR0ZXJPclNldHRlclByb3BlcnR5KToKKyAgICAgICAgKEpT
Qzo6QVNUQnVpbGRlcjo6Y3JlYXRlUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVy
OjpjcmVhdGVGdW5jRGVjbFN0YXRlbWVudCk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6Om1h
a2VGdW5jdGlvbkNhbGxOb2RlKToKKyAgICAgICAgKiBwYXJzZXIvTGV4ZXIuY3BwOgorICAgICAg
ICAoSlNDOjpMZXhlcjxUPjo6TGV4ZXIpOgorICAgICAgICAoSlNDOjpMZXhlcjxMQ2hhcj46OnBh
cnNlSWRlbnRpZmllcik6CisgICAgICAgIChKU0M6OkxleGVyPFVDaGFyPjo6cGFyc2VJZGVudGlm
aWVyKToKKyAgICAgICAgKiBwYXJzZXIvTGV4ZXIuaDoKKyAgICAgICAgKEpTQzo6TGV4ZXI8VD46
OmxleEV4cGVjdElkZW50aWZpZXIpOgorICAgICAgICAqIHBhcnNlci9Nb2R1bGVBbmFseXplci5j
cHA6CisgICAgICAgIChKU0M6Ok1vZHVsZUFuYWx5emVyOjpNb2R1bGVBbmFseXplcik6CisgICAg
ICAgICogcGFyc2VyL01vZHVsZUFuYWx5emVyLmg6CisgICAgICAgIChKU0M6Ok1vZHVsZUFuYWx5
emVyOjp2bSk6CisgICAgICAgICogcGFyc2VyL1BhcnNlci5jcHA6CisgICAgICAgIChKU0M6OlBh
cnNlcjxMZXhlclR5cGU+OjpQYXJzZXIpOgorICAgICAgICAoSlNDOjpQYXJzZXI8TGV4ZXJUeXBl
Pjo6cGFyc2VJbm5lcik6CisgICAgICAgIChKU0M6OlBhcnNlcjxMZXhlclR5cGU+Ojppc0Fycm93
RnVuY3Rpb25QYXJhbWV0ZXJzKToKKyAgICAgICAgKEpTQzo6UGFyc2VyPExleGVyVHlwZT46OnBh
cnNlU291cmNlRWxlbWVudHMpOgorICAgICAgICAoSlNDOjpQYXJzZXI8TGV4ZXJUeXBlPjo6cGFy
c2VNb2R1bGVTb3VyY2VFbGVtZW50cyk6CisgICAgICAgIChKU0M6OlBhcnNlcjxMZXhlclR5cGU+
OjpwYXJzZUdlbmVyYXRvckZ1bmN0aW9uU291cmNlRWxlbWVudHMpOgorICAgICAgICAoSlNDOjpQ
YXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VBc3luY0Z1bmN0aW9uU291cmNlRWxlbWVudHMpOgorICAg
ICAgICAoSlNDOjpQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VBc3luY0dlbmVyYXRvckZ1bmN0aW9u
U291cmNlRWxlbWVudHMpOgorICAgICAgICAoSlNDOjpQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VT
aW5nbGVGdW5jdGlvbik6CisgICAgICAgIChKU0M6OlBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZVN0
YXRlbWVudExpc3RJdGVtKToKKyAgICAgICAgKEpTQzo6UGFyc2VyPExleGVyVHlwZT46OnBhcnNl
T2JqZWN0UmVzdEFzc2lnbm1lbnRFbGVtZW50KToKKyAgICAgICAgKEpTQzo6UGFyc2VyPExleGVy
VHlwZT46OnBhcnNlQXNzaWdubWVudEVsZW1lbnQpOgorICAgICAgICAoSlNDOjpQYXJzZXI8TGV4
ZXJUeXBlPjo6cGFyc2VEZXN0cnVjdHVyaW5nUGF0dGVybik6CisgICAgICAgIChKU0M6OlBhcnNl
cjxMZXhlclR5cGU+OjpwYXJzZUZvclN0YXRlbWVudCk6CisgICAgICAgIChKU0M6OlBhcnNlcjxM
ZXhlclR5cGU+OjpwYXJzZUJyZWFrU3RhdGVtZW50KToKKyAgICAgICAgKEpTQzo6UGFyc2VyPExl
eGVyVHlwZT46OnBhcnNlQ29udGludWVTdGF0ZW1lbnQpOgorICAgICAgICAoSlNDOjpQYXJzZXI8
TGV4ZXJUeXBlPjo6cGFyc2VTdGF0ZW1lbnQpOgorICAgICAgICAoSlNDOjpQYXJzZXI8TGV4ZXJU
eXBlPjo6bWF5YmVQYXJzZUFzeW5jRnVuY3Rpb25EZWNsYXJhdGlvblN0YXRlbWVudCk6CisgICAg
ICAgIChKU0M6OlBhcnNlcjxMZXhlclR5cGU+OjpjcmVhdGVHZW5lcmF0b3JQYXJhbWV0ZXJzKToK
KyAgICAgICAgKEpTQzo6UGFyc2VyPExleGVyVHlwZT46OnBhcnNlRnVuY3Rpb25JbmZvKToKKyAg
ICAgICAgKEpTQzo6UGFyc2VyPExleGVyVHlwZT46OnBhcnNlRnVuY3Rpb25EZWNsYXJhdGlvbik6
CisgICAgICAgIChKU0M6OlBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUFzeW5jRnVuY3Rpb25EZWNs
YXJhdGlvbik6CisgICAgICAgIChKU0M6OlBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUNsYXNzRGVj
bGFyYXRpb24pOgorICAgICAgICAoSlNDOjpQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VDbGFzcyk6
CisgICAgICAgIChKU0M6OlBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUltcG9ydENsYXVzZUl0ZW0p
OgorICAgICAgICAoSlNDOjpQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VJbXBvcnREZWNsYXJhdGlv
bik6CisgICAgICAgIChKU0M6OlBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUV4cG9ydFNwZWNpZmll
cik6CisgICAgICAgIChKU0M6OlBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUV4cG9ydERlY2xhcmF0
aW9uKToKKyAgICAgICAgKEpTQzo6UGFyc2VyPExleGVyVHlwZT46OnBhcnNlQXNzaWdubWVudEV4
cHJlc3Npb24pOgorICAgICAgICAoSlNDOjpQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VQcm9wZXJ0
eSk6CisgICAgICAgIChKU0M6OlBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUdldHRlclNldHRlcik6
CisgICAgICAgIChKU0M6OlBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZU9iamVjdExpdGVyYWwpOgor
ICAgICAgICAoSlNDOjpQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VTdHJpY3RPYmplY3RMaXRlcmFs
KToKKyAgICAgICAgKEpTQzo6UGFyc2VyPExleGVyVHlwZT46OnBhcnNlQ2xhc3NFeHByZXNzaW9u
KToKKyAgICAgICAgKEpTQzo6UGFyc2VyPExleGVyVHlwZT46OnBhcnNlRnVuY3Rpb25FeHByZXNz
aW9uKToKKyAgICAgICAgKEpTQzo6UGFyc2VyPExleGVyVHlwZT46OnBhcnNlQXN5bmNGdW5jdGlv
bkV4cHJlc3Npb24pOgorICAgICAgICAoSlNDOjpQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VQcmlt
YXJ5RXhwcmVzc2lvbik6CisgICAgICAgIChKU0M6OlBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZU1l
bWJlckV4cHJlc3Npb24pOgorICAgICAgICAoSlNDOjpQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VB
cnJvd0Z1bmN0aW9uRXhwcmVzc2lvbik6CisgICAgICAgIChKU0M6OlBhcnNlcjxMZXhlclR5cGU+
OjpwYXJzZVVuYXJ5RXhwcmVzc2lvbik6CisgICAgICAgICogcGFyc2VyL1BhcnNlci5oOgorICAg
ICAgICAoSlNDOjppc0FyZ3VtZW50cyk6CisgICAgICAgIChKU0M6OmlzRXZhbCk6CisgICAgICAg
IChKU0M6OmlzRXZhbE9yQXJndW1lbnRzSWRlbnRpZmllcik6CisgICAgICAgIChKU0M6OlNjb3Bl
OjpTY29wZSk6CisgICAgICAgIChKU0M6OlNjb3BlOjpkZWNsYXJlUGFyYW1ldGVyKToKKyAgICAg
ICAgKEpTQzo6U2NvcGU6OnNldElubmVyQXJyb3dGdW5jdGlvblVzZXNFdmFsQW5kVXNlQXJndW1l
bnRzSWZOZWVkZWQpOgorICAgICAgICAoSlNDOjpTY29wZTo6Y29sbGVjdEZyZWVWYXJpYWJsZXMp
OgorICAgICAgICAoSlNDOjpQYXJzZXI6OmNhblJlY3Vyc2UpOgorICAgICAgICAoSlNDOjpwYXJz
ZSk6CisgICAgICAgIChKU0M6OnBhcnNlRnVuY3Rpb25Gb3JGdW5jdGlvbkNvbnN0cnVjdG9yKToK
KyAgICAgICAgKiBwYXJzZXIvUGFyc2VyQXJlbmEuaDoKKyAgICAgICAgKEpTQzo6SWRlbnRpZmll
ckFyZW5hOjptYWtlSWRlbnRpZmllcik6CisgICAgICAgIChKU0M6OklkZW50aWZpZXJBcmVuYTo6
bWFrZUVtcHR5SWRlbnRpZmllcik6CisgICAgICAgIChKU0M6OklkZW50aWZpZXJBcmVuYTo6bWFr
ZUlkZW50aWZpZXJMQ2hhckZyb21VQ2hhcik6CisgICAgICAgIChKU0M6OklkZW50aWZpZXJBcmVu
YTo6bWFrZU51bWVyaWNJZGVudGlmaWVyKToKKyAgICAgICAgKiBwYXJzZXIvU3ludGF4Q2hlY2tl
ci5oOgorICAgICAgICAoSlNDOjpTeW50YXhDaGVja2VyOjpTeW50YXhDaGVja2VyKToKKyAgICAg
ICAgKEpTQzo6U3ludGF4Q2hlY2tlcjo6Y3JlYXRlUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpT
eW50YXhDaGVja2VyOjpjcmVhdGVHZXR0ZXJPclNldHRlclByb3BlcnR5KToKKyAgICAgICAgKiBw
cm9maWxlci9Qcm9maWxlckJ5dGVjb2RlLmNwcDoKKyAgICAgICAgKEpTQzo6UHJvZmlsZXI6OkJ5
dGVjb2RlOjp0b0pTIGNvbnN0KToKKyAgICAgICAgKiBwcm9maWxlci9Qcm9maWxlckJ5dGVjb2Rl
U2VxdWVuY2UuY3BwOgorICAgICAgICAoSlNDOjpQcm9maWxlcjo6Qnl0ZWNvZGVTZXF1ZW5jZTo6
YWRkU2VxdWVuY2VQcm9wZXJ0aWVzIGNvbnN0KToKKyAgICAgICAgKiBwcm9maWxlci9Qcm9maWxl
ckJ5dGVjb2Rlcy5jcHA6CisgICAgICAgIChKU0M6OlByb2ZpbGVyOjpCeXRlY29kZXM6OnRvSlMg
Y29uc3QpOgorICAgICAgICAqIHByb2ZpbGVyL1Byb2ZpbGVyQ29tcGlsYXRpb24uY3BwOgorICAg
ICAgICAoSlNDOjpQcm9maWxlcjo6Q29tcGlsYXRpb246OnRvSlMgY29uc3QpOgorICAgICAgICAq
IHByb2ZpbGVyL1Byb2ZpbGVyQ29tcGlsZWRCeXRlY29kZS5jcHA6CisgICAgICAgIChKU0M6OlBy
b2ZpbGVyOjpDb21waWxlZEJ5dGVjb2RlOjp0b0pTIGNvbnN0KToKKyAgICAgICAgKiBwcm9maWxl
ci9Qcm9maWxlckV2ZW50LmNwcDoKKyAgICAgICAgKEpTQzo6UHJvZmlsZXI6OkV2ZW50Ojp0b0pT
IGNvbnN0KToKKyAgICAgICAgKiBwcm9maWxlci9Qcm9maWxlck9TUkV4aXQuY3BwOgorICAgICAg
ICAoSlNDOjpQcm9maWxlcjo6T1NSRXhpdDo6dG9KUyBjb25zdCk6CisgICAgICAgICogcHJvZmls
ZXIvUHJvZmlsZXJPU1JFeGl0U2l0ZS5jcHA6CisgICAgICAgIChKU0M6OlByb2ZpbGVyOjpPU1JF
eGl0U2l0ZTo6dG9KUyBjb25zdCk6CisgICAgICAgICogcHJvZmlsZXIvUHJvZmlsZXJVSUQuY3Bw
OgorICAgICAgICAoSlNDOjpQcm9maWxlcjo6VUlEOjp0b0pTIGNvbnN0KToKKyAgICAgICAgKiBy
dW50aW1lL0Fic3RyYWN0TW9kdWxlUmVjb3JkLmNwcDoKKyAgICAgICAgKEpTQzo6QWJzdHJhY3RN
b2R1bGVSZWNvcmQ6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6QWJzdHJhY3RNb2R1
bGVSZWNvcmQ6Omhvc3RSZXNvbHZlSW1wb3J0ZWRNb2R1bGUpOgorICAgICAgICAoSlNDOjpBYnN0
cmFjdE1vZHVsZVJlY29yZDo6cmVzb2x2ZUV4cG9ydEltcGwpOgorICAgICAgICAoSlNDOjpnZXRF
eHBvcnRlZE5hbWVzKToKKyAgICAgICAgKEpTQzo6QWJzdHJhY3RNb2R1bGVSZWNvcmQ6OmdldE1v
ZHVsZU5hbWVzcGFjZSk6CisgICAgICAgICogcnVudGltZS9BcnJheUJ1ZmZlck5ldXRlcmluZ1dh
dGNocG9pbnRTZXQuY3BwOgorICAgICAgICAoSlNDOjpBcnJheUJ1ZmZlck5ldXRlcmluZ1dhdGNo
cG9pbnRTZXQ6OmZpcmVBbGwpOgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlJdGVyYXRvclByb3Rv
dHlwZS5jcHA6CisgICAgICAgIChKU0M6OkFycmF5SXRlcmF0b3JQcm90b3R5cGU6OmZpbmlzaENy
ZWF0aW9uKToKKyAgICAgICAgKiBydW50aW1lL0FycmF5UHJvdG90eXBlLmNwcDoKKyAgICAgICAg
KEpTQzo6ZmFzdEpvaW4pOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY1RvTG9jYWxlU3Ry
aW5nKToKKyAgICAgICAgKEpTQzo6c2xvd0pvaW4pOgorICAgICAgICAoSlNDOjphcnJheVByb3Rv
RnVuY0pvaW4pOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY1B1c2gpOgorICAgICAgICAq
IHJ1bnRpbWUvQXN5bmNGdW5jdGlvblByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OkFzeW5j
RnVuY3Rpb25Qcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKiBydW50aW1lL0Fz
eW5jR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpBc3luY0dl
bmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgICogcnVu
dGltZS9Bc3luY0dlbmVyYXRvclByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OkFzeW5jR2Vu
ZXJhdG9yUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgICogcnVudGltZS9BdG9t
aWNzT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6QXRvbWljc09iamVjdDo6ZmluaXNoQ3JlYXRp
b24pOgorICAgICAgICAoSlNDOjphdG9taWNzRnVuY1dhaXQpOgorICAgICAgICAoSlNDOjpvcGVy
YXRpb25BdG9taWNzQWRkKToKKyAgICAgICAgKEpTQzo6b3BlcmF0aW9uQXRvbWljc0FuZCk6Cisg
ICAgICAgIChKU0M6Om9wZXJhdGlvbkF0b21pY3NDb21wYXJlRXhjaGFuZ2UpOgorICAgICAgICAo
SlNDOjpvcGVyYXRpb25BdG9taWNzRXhjaGFuZ2UpOgorICAgICAgICAoSlNDOjpvcGVyYXRpb25B
dG9taWNzSXNMb2NrRnJlZSk6CisgICAgICAgIChKU0M6Om9wZXJhdGlvbkF0b21pY3NMb2FkKToK
KyAgICAgICAgKEpTQzo6b3BlcmF0aW9uQXRvbWljc09yKToKKyAgICAgICAgKEpTQzo6b3BlcmF0
aW9uQXRvbWljc1N0b3JlKToKKyAgICAgICAgKEpTQzo6b3BlcmF0aW9uQXRvbWljc1N1Yik6Cisg
ICAgICAgIChKU0M6Om9wZXJhdGlvbkF0b21pY3NYb3IpOgorICAgICAgICAqIHJ1bnRpbWUvQmln
SW50UHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6QmlnSW50UHJvdG90eXBlOjpmaW5pc2hD
cmVhdGlvbik6CisgICAgICAgIChKU0M6OmJpZ0ludFByb3RvRnVuY1RvU3RyaW5nKToKKyAgICAg
ICAgKiBydW50aW1lL0NhY2hlZFR5cGVzLmNwcDoKKyAgICAgICAgKEpTQzo6Q2FjaGVkVW5pcXVl
ZFN0cmluZ0ltcGxCYXNlOjpkZWNvZGUgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRJZGVu
dGlmaWVyOjpkZWNvZGUgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRKU1ZhbHVlOjpkZWNv
ZGUgY29uc3QpOgorICAgICAgICAqIHJ1bnRpbWUvQ29kZUNhY2hlLmNwcDoKKyAgICAgICAgKEpT
Qzo6Q29kZUNhY2hlTWFwOjpwcnVuZVNsb3dDYXNlKToKKyAgICAgICAgKEpTQzo6Q29kZUNhY2hl
OjpnZXRVbmxpbmtlZEdsb2JhbEZ1bmN0aW9uRXhlY3V0YWJsZSk6CisgICAgICAgICogcnVudGlt
ZS9Db2RlQ2FjaGUuaDoKKyAgICAgICAgKEpTQzo6Z2VuZXJhdGVVbmxpbmtlZENvZGVCbG9ja0lt
cGwpOgorICAgICAgICAqIHJ1bnRpbWUvQ29tbW9uSWRlbnRpZmllcnMuY3BwOgorICAgICAgICAo
SlNDOjpDb21tb25JZGVudGlmaWVyczo6Q29tbW9uSWRlbnRpZmllcnMpOgorICAgICAgICAqIHJ1
bnRpbWUvQ29tbW9uSWRlbnRpZmllcnMuaDoKKyAgICAgICAgKiBydW50aW1lL0NvbW1vblNsb3dQ
YXRocy5jcHA6CisgICAgICAgIChKU0M6OlNMT1dfUEFUSF9ERUNMKToKKyAgICAgICAgKiBydW50
aW1lL0NvbXBsZXRpb24uY3BwOgorICAgICAgICAoSlNDOjpjaGVja1N5bnRheEludGVybmFsKToK
KyAgICAgICAgKEpTQzo6Y2hlY2tNb2R1bGVTeW50YXgpOgorICAgICAgICAoSlNDOjpsb2FkQW5k
RXZhbHVhdGVNb2R1bGUpOgorICAgICAgICAoSlNDOjpsb2FkTW9kdWxlKToKKyAgICAgICAgKiBy
dW50aW1lL0RhdGVDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OmNhbGxEYXRlKToKKyAg
ICAgICAgKiBydW50aW1lL0RhdGVQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpmb3JtYXRM
b2NhbGVEYXRlKToKKyAgICAgICAgKEpTQzo6Zm9ybWF0ZURhdGVJbnN0YW5jZSk6CisgICAgICAg
IChKU0M6OkRhdGVQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6ZGF0
ZVByb3RvRnVuY1RvSVNPU3RyaW5nKToKKyAgICAgICAgKiBydW50aW1lL0Vycm9yLmNwcDoKKyAg
ICAgICAgKEpTQzo6YWRkRXJyb3JJbmZvKToKKyAgICAgICAgKiBydW50aW1lL0Vycm9ySW5zdGFu
Y2UuY3BwOgorICAgICAgICAoSlNDOjphcHBlbmRTb3VyY2VUb0Vycm9yKToKKyAgICAgICAgKEpT
Qzo6RXJyb3JJbnN0YW5jZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpFcnJvcklu
c3RhbmNlOjptYXRlcmlhbGl6ZUVycm9ySW5mb0lmTmVlZGVkKToKKyAgICAgICAgKiBydW50aW1l
L0Vycm9yUHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6RXJyb3JQcm90b3R5cGU6OmZpbmlz
aENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6ZXJyb3JQcm90b0Z1bmNUb1N0cmluZyk6CisgICAg
ICAgICogcnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmNwcDoKKyAgICAgICAgKEpTQzo6VGVybWlu
YXRlZEV4ZWN1dGlvbkVycm9yOjpkZWZhdWx0VmFsdWUpOgorICAgICAgICAqIHJ1bnRpbWUvRnVu
Y3Rpb25Qcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpmdW5jdGlvblByb3RvRnVuY1RvU3Ry
aW5nKToKKyAgICAgICAgKiBydW50aW1lL0Z1bmN0aW9uUmFyZURhdGEuY3BwOgorICAgICAgICAo
SlNDOjpGdW5jdGlvblJhcmVEYXRhOjpjbGVhcik6CisgICAgICAgICogcnVudGltZS9HZW5lcmF0
b3JGdW5jdGlvblByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OkdlbmVyYXRvckZ1bmN0aW9u
UHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgICogcnVudGltZS9HZW5lcmF0b3JQ
cm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpHZW5lcmF0b3JQcm90b3R5cGU6OmZpbmlzaENy
ZWF0aW9uKToKKyAgICAgICAgKiBydW50aW1lL0dlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmg6Cisg
ICAgICAgIChKU0M6OkdlbmVyaWNBcmd1bWVudHM8VHlwZT46OmdldE93blByb3BlcnR5TmFtZXMp
OgorICAgICAgICAqIHJ1bnRpbWUvR2V0dGVyU2V0dGVyLmg6CisgICAgICAgICogcnVudGltZS9J
ZGVudGlmaWVyLmNwcDoKKyAgICAgICAgKEpTQzo6SWRlbnRpZmllcjo6YWRkKToKKyAgICAgICAg
KEpTQzo6SWRlbnRpZmllcjo6YWRkOCk6CisgICAgICAgIChKU0M6OklkZW50aWZpZXI6OmZyb20p
OgorICAgICAgICAoSlNDOjpJZGVudGlmaWVyOjpjaGVja0N1cnJlbnRBdG9tU3RyaW5nVGFibGUp
OgorICAgICAgICAqIHJ1bnRpbWUvSWRlbnRpZmllci5oOgorICAgICAgICAoSlNDOjpJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKToKKyAgICAgICAgKEpTQzo6SWRlbnRpZmllcjo6Y3JlYXRlTENoYXJG
cm9tVUNoYXIpOgorICAgICAgICAoSlNDOjpJZGVudGlmaWVyOjpJZGVudGlmaWVyKToKKyAgICAg
ICAgKEpTQzo6SWRlbnRpZmllcjo6YWRkKToKKyAgICAgICAgKiBydW50aW1lL0lkZW50aWZpZXJJ
bmxpbmVzLmg6CisgICAgICAgIChKU0M6OklkZW50aWZpZXI6OmFkZCk6CisgICAgICAgIChKU0M6
OklkZW50aWZpZXI6OmZyb21VaWQpOgorICAgICAgICAoSlNDOjpJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKToKKyAgICAgICAgKEpTQzo6aWRlbnRpZmllclRvSlNWYWx1ZSk6CisgICAgICAgIChKU0M6
OmlkZW50aWZpZXJUb1NhZmVQdWJsaWNKU1ZhbHVlKToKKyAgICAgICAgKEpTQzo6SWRlbnRpZmll
cjo6SWRlbnRpZmllcik6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9JbnRlcm5hbEZ1bmN0
aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6SW50ZXJuYWxGdW5jdGlvbjo6ZmluaXNoQ3JlYXRpb24p
OgorICAgICAgICAqIHJ1bnRpbWUvSW50bENvbGxhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SW50
bENvbGxhdG9yOjpyZXNvbHZlZE9wdGlvbnMpOgorICAgICAgICAqIHJ1bnRpbWUvSW50bENvbGxh
dG9yUHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6SW50bENvbGxhdG9yUHJvdG90eXBlOjpm
aW5pc2hDcmVhdGlvbik6CisgICAgICAgICogcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXQuY3Bw
OgorICAgICAgICAoSlNDOjpJbnRsRFRGSW50ZXJuYWw6OnRvRGF0ZVRpbWVPcHRpb25zQW55RGF0
ZSk6CisgICAgICAgIChKU0M6OkludGxEYXRlVGltZUZvcm1hdDo6cmVzb2x2ZWRPcHRpb25zKToK
KyAgICAgICAgKEpTQzo6SW50bERhdGVUaW1lRm9ybWF0Ojpmb3JtYXQpOgorICAgICAgICAoSlND
OjpJbnRsRGF0ZVRpbWVGb3JtYXQ6OmZvcm1hdFRvUGFydHMpOgorICAgICAgICAqIHJ1bnRpbWUv
SW50bERhdGVUaW1lRm9ybWF0UHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6SW50bERhdGVU
aW1lRm9ybWF0UHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgICogcnVudGltZS9J
bnRsTnVtYmVyRm9ybWF0LmNwcDoKKyAgICAgICAgKEpTQzo6SW50bE51bWJlckZvcm1hdDo6aW5p
dGlhbGl6ZU51bWJlckZvcm1hdCk6CisgICAgICAgIChKU0M6OkludGxOdW1iZXJGb3JtYXQ6OmZv
cm1hdE51bWJlcik6CisgICAgICAgIChKU0M6OkludGxOdW1iZXJGb3JtYXQ6OnJlc29sdmVkT3B0
aW9ucyk6CisgICAgICAgIChKU0M6OkludGxOdW1iZXJGb3JtYXQ6OmZvcm1hdFRvUGFydHMpOgor
ICAgICAgICAqIHJ1bnRpbWUvSW50bE51bWJlckZvcm1hdFByb3RvdHlwZS5jcHA6CisgICAgICAg
IChKU0M6OkludGxOdW1iZXJGb3JtYXRQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKToKKyAgICAg
ICAgKiBydW50aW1lL0ludGxPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpsb29rdXBTdXBwb3J0
ZWRMb2NhbGVzKToKKyAgICAgICAgKEpTQzo6c3VwcG9ydGVkTG9jYWxlcyk6CisgICAgICAgIChK
U0M6OmludGxPYmplY3RGdW5jR2V0Q2Fub25pY2FsTG9jYWxlcyk6CisgICAgICAgICogcnVudGlt
ZS9JbnRsUGx1cmFsUnVsZXMuY3BwOgorICAgICAgICAoSlNDOjpJbnRsUGx1cmFsUnVsZXM6Omlu
aXRpYWxpemVQbHVyYWxSdWxlcyk6CisgICAgICAgIChKU0M6OkludGxQbHVyYWxSdWxlczo6cmVz
b2x2ZWRPcHRpb25zKToKKyAgICAgICAgKEpTQzo6SW50bFBsdXJhbFJ1bGVzOjpzZWxlY3QpOgor
ICAgICAgICAqIHJ1bnRpbWUvSW50bFBsdXJhbFJ1bGVzUHJvdG90eXBlLmNwcDoKKyAgICAgICAg
KEpTQzo6SW50bFBsdXJhbFJ1bGVzUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAg
ICogcnVudGltZS9KU0FycmF5Lmg6CisgICAgICAgIChKU0M6OmFzQXJyYXkpOgorICAgICAgICAo
SlNDOjppc0pTQXJyYXkpOgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheUJ1ZmZlclByb3RvdHlw
ZS5jcHA6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJQcm90b3R5cGU6OmZpbmlzaENyZWF0
aW9uKToKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmNwcDoKKyAgICAgICAg
KEpTQzo6SlNBcnJheUJ1ZmZlclZpZXc6OnNsb3dEb3duQW5kV2FzdGVNZW1vcnkpOgorICAgICAg
ICAqIHJ1bnRpbWUvSlNDSlNWYWx1ZS5jcHA6CisgICAgICAgIChKU0M6OkpTVmFsdWU6OnB1dFRv
UHJpbWl0aXZlQnlJbmRleCk6CisgICAgICAgIChKU0M6OkpTVmFsdWU6OmR1bXBGb3JCYWNrdHJh
Y2UgY29uc3QpOgorICAgICAgICAoSlNDOjpKU1ZhbHVlOjp0b1N0cmluZ1Nsb3dDYXNlIGNvbnN0
KToKKyAgICAgICAgKiBydW50aW1lL0pTQ0pTVmFsdWVJbmxpbmVzLmg6CisgICAgICAgIChKU0M6
OkpTVmFsdWU6OmdldCBjb25zdCk6CisgICAgICAgICogcnVudGltZS9KU0Nhc3QuaDoKKyAgICAg
ICAgKEpTQzo6anNDYXN0KToKKyAgICAgICAgKiBydW50aW1lL0pTQ2VsbC5jcHA6CisgICAgICAg
IChKU0M6OkpTQ2VsbDo6ZHVtcCBjb25zdCk6CisgICAgICAgIChKU0M6OkpTQ2VsbDo6ZHVtcFRv
U3RyZWFtKToKKyAgICAgICAgKEpTQzo6SlNDZWxsOjpwdXRCeUluZGV4KToKKyAgICAgICAgKiBy
dW50aW1lL0pTQ2VsbElubGluZXMuaDoKKyAgICAgICAgKEpTQzo6SlNDZWxsOjpzdHJ1Y3R1cmUg
Y29uc3QpOgorICAgICAgICAoSlNDOjpFeGVjU3RhdGU6OnZtIGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6dHJ5QWxsb2NhdGVDZWxsSGVscGVyKToKKyAgICAgICAgKiBydW50aW1lL0pTRGF0YVZpZXdQ
cm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpKU0RhdGFWaWV3UHJvdG90eXBlOjpmaW5pc2hD
cmVhdGlvbik6CisgICAgICAgICogcnVudGltZS9KU0ZpeGVkQXJyYXkuY3BwOgorICAgICAgICAo
SlNDOjpKU0ZpeGVkQXJyYXk6OmR1bXBUb1N0cmVhbSk6CisgICAgICAgICogcnVudGltZS9KU0Z1
bmN0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6SlNGdW5jdGlvbjo6ZmluaXNoQ3JlYXRpb24pOgor
ICAgICAgICAoSlNDOjpSZXRyaWV2ZUNhbGxlckZ1bmN0aW9uRnVuY3Rvcjo6b3BlcmF0b3IoKSBj
b25zdCk6CisgICAgICAgIChKU0M6OkpTRnVuY3Rpb246OnJlaWZ5TmFtZSk6CisgICAgICAgIChK
U0M6OkpTRnVuY3Rpb246OnJlaWZ5TGF6eUJvdW5kTmFtZUlmTmVlZGVkKToKKyAgICAgICAgKEpT
Qzo6SlNGdW5jdGlvbjo6YXNzZXJ0VHlwZUluZm9GbGFnSW52YXJpYW50cyk6CisgICAgICAgICog
cnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaDoKKyAgICAgICAgKEpTQzo6
SlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmRlbGV0ZVByb3BlcnR5QnlJbmRleCk6
CisgICAgICAgIChKU0M6OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpnZXRPd25Q
cm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcDoKKyAg
ICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OmluaXQpOgorICAgICAgICAoSlNDOjpKU0dsb2Jh
bE9iamVjdDo6ZXhwb3NlRG9sbGFyVk0pOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmpl
Y3RGdW5jdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjplbmNvZGUpOgorICAgICAgICAoSlNDOjpk
ZWNvZGUpOgorICAgICAgICAoSlNDOjpnbG9iYWxGdW5jRXNjYXBlKToKKyAgICAgICAgKEpTQzo6
Z2xvYmFsRnVuY1VuZXNjYXBlKToKKyAgICAgICAgKEpTQzo6Z2xvYmFsRnVuY0J1aWx0aW5EZXNj
cmliZSk6CisgICAgICAgICogcnVudGltZS9KU0xleGljYWxFbnZpcm9ubWVudC5jcHA6CisgICAg
ICAgIChKU0M6OkpTTGV4aWNhbEVudmlyb25tZW50OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFt
ZXMpOgorICAgICAgICAqIHJ1bnRpbWUvSlNNb2R1bGVFbnZpcm9ubWVudC5jcHA6CisgICAgICAg
IChKU0M6OkpTTW9kdWxlRW52aXJvbm1lbnQ6OmdldE93blByb3BlcnR5U2xvdCk6CisgICAgICAg
IChKU0M6OkpTTW9kdWxlRW52aXJvbm1lbnQ6OnB1dCk6CisgICAgICAgIChKU0M6OkpTTW9kdWxl
RW52aXJvbm1lbnQ6OmRlbGV0ZVByb3BlcnR5KToKKyAgICAgICAgKiBydW50aW1lL0pTTW9kdWxl
TG9hZGVyLmNwcDoKKyAgICAgICAgKEpTQzo6SlNNb2R1bGVMb2FkZXI6OmZpbmlzaENyZWF0aW9u
KToKKyAgICAgICAgKEpTQzo6SlNNb2R1bGVMb2FkZXI6OnJlcXVlc3RJbXBvcnRNb2R1bGUpOgor
ICAgICAgICAoSlNDOjptb2R1bGVMb2FkZXJQYXJzZU1vZHVsZSk6CisgICAgICAgIChKU0M6Om1v
ZHVsZUxvYWRlclJlcXVlc3RlZE1vZHVsZXMpOgorICAgICAgICAqIHJ1bnRpbWUvSlNNb2R1bGVO
YW1lc3BhY2VPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpKU01vZHVsZU5hbWVzcGFjZU9iamVj
dDo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpKU01vZHVsZU5hbWVzcGFjZU9iamVj
dDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleCk6CisgICAgICAgICogcnVudGltZS9KU01vZHVs
ZVJlY29yZC5jcHA6CisgICAgICAgIChKU0M6OkpTTW9kdWxlUmVjb3JkOjppbnN0YW50aWF0ZURl
Y2xhcmF0aW9ucyk6CisgICAgICAgICogcnVudGltZS9KU09OT2JqZWN0LmNwcDoKKyAgICAgICAg
KEpTQzo6SlNPTk9iamVjdDo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpQcm9wZXJ0
eU5hbWVGb3JGdW5jdGlvbkNhbGw6OnZhbHVlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6U3RyaW5n
aWZpZXI6OlN0cmluZ2lmaWVyKToKKyAgICAgICAgKEpTQzo6U3RyaW5naWZpZXI6OnN0cmluZ2lm
eSk6CisgICAgICAgIChKU0M6OlN0cmluZ2lmaWVyOjpIb2xkZXI6OmFwcGVuZE5leHRQcm9wZXJ0
eSk6CisgICAgICAgIChKU0M6OldhbGtlcjo6d2Fsayk6CisgICAgICAgICogcnVudGltZS9KU09i
amVjdC5jcHA6CisgICAgICAgIChKU0M6OmdldENsYXNzUHJvcGVydHlOYW1lcyk6CisgICAgICAg
IChKU0M6OkpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KToKKyAgICAgICAgKEpT
Qzo6SlNPYmplY3Q6OnB1dEJ5SW5kZXgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZGVsZXRl
UHJvcGVydHlCeUluZGV4KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnRvU3RyaW5nIGNvbnN0
KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnJlaWZ5QWxsU3RhdGljUHJvcGVydGllcyk6Cisg
ICAgICAgIChKU0M6OkpTT2JqZWN0OjpwdXREaXJlY3RJbmRleFNsb3dPckJleW9uZFZlY3Rvckxl
bmd0aCk6CisgICAgICAgICogcnVudGltZS9KU09iamVjdC5oOgorICAgICAgICAoSlNDOjpKU09i
amVjdDo6cHV0QnlJbmRleElubGluZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpidXR0ZXJm
bHlQcmVDYXBhY2l0eSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpidXR0ZXJmbHlUb3RhbFNp
emUpOgorICAgICAgICAoSlNDOjptYWtlSWRlbnRpZmllcik6CisgICAgICAgICogcnVudGltZS9K
U1Byb21pc2VQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpKU1Byb21pc2VQcm90b3R5cGU6
OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKiBydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVy
YXRvci5jcHA6CisgICAgICAgIChKU0M6OkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6ZmluaXNo
Q3JlYXRpb24pOgorICAgICAgICAqIHJ1bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmg6
CisgICAgICAgIChKU0M6OnByb3BlcnR5TmFtZUVudW1lcmF0b3IpOgorICAgICAgICAqIHJ1bnRp
bWUvSlNSdW5Mb29wVGltZXIuY3BwOgorICAgICAgICAoSlNDOjpKU1J1bkxvb3BUaW1lcjo6SlNS
dW5Mb29wVGltZXIpOgorICAgICAgICAqIHJ1bnRpbWUvSlNSdW5Mb29wVGltZXIuaDoKKyAgICAg
ICAgKiBydW50aW1lL0pTU3RyaW5nLmNwcDoKKyAgICAgICAgKEpTQzo6SlNTdHJpbmc6OmR1bXBU
b1N0cmVhbSk6CisgICAgICAgIChKU0M6OkpTUm9wZVN0cmluZzo6cmVzb2x2ZVJvcGVXaXRoRnVu
Y3Rpb24gY29uc3QpOgorICAgICAgICAoSlNDOjpqc1N0cmluZ1dpdGhDYWNoZVNsb3dDYXNlKToK
KyAgICAgICAgKiBydW50aW1lL0pTU3RyaW5nLmg6CisgICAgICAgIChKU0M6OmpzRW1wdHlTdHJp
bmcpOgorICAgICAgICAoSlNDOjpqc1NpbmdsZUNoYXJhY3RlclN0cmluZyk6CisgICAgICAgIChK
U0M6OmpzTm9udHJpdmlhbFN0cmluZyk6CisgICAgICAgIChKU0M6OkpTU3RyaW5nOjp0b0lkZW50
aWZpZXIgY29uc3QpOgorICAgICAgICAoSlNDOjpKU1N0cmluZzo6dG9BdG9tU3RyaW5nIGNvbnN0
KToKKyAgICAgICAgKEpTQzo6SlNTdHJpbmc6OnRvRXhpc3RpbmdBdG9tU3RyaW5nIGNvbnN0KToK
KyAgICAgICAgKEpTQzo6SlNTdHJpbmc6OnZhbHVlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6SlNT
dHJpbmc6OnRyeUdldFZhbHVlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6SlNTdHJpbmc6OmdldElu
ZGV4KToKKyAgICAgICAgKEpTQzo6anNTdHJpbmcpOgorICAgICAgICAoSlNDOjpqc1N1YnN0cmlu
Zyk6CisgICAgICAgIChKU0M6OmpzT3duZWRTdHJpbmcpOgorICAgICAgICAoSlNDOjpqc1N0cmlu
Z1dpdGhDYWNoZSk6CisgICAgICAgIChKU0M6OkpTUm9wZVN0cmluZzo6dW5zYWZlVmlldyBjb25z
dCk6CisgICAgICAgIChKU0M6OkpTUm9wZVN0cmluZzo6dmlld1dpdGhVbmRlcmx5aW5nU3RyaW5n
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6SlNTdHJpbmc6OnVuc2FmZVZpZXcgY29uc3QpOgorICAg
ICAgICAqIHJ1bnRpbWUvSlNTdHJpbmdJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OmpzTWFrZU5v
bnRyaXZpYWxTdHJpbmcpOgorICAgICAgICAoSlNDOjpyZXBlYXRDaGFyYWN0ZXIpOgorICAgICAg
ICAqIHJ1bnRpbWUvSlNTdHJpbmdKb2luZXIuY3BwOgorICAgICAgICAoSlNDOjpKU1N0cmluZ0pv
aW5lcjo6am9pbik6CisgICAgICAgICogcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmNwcDoK
KyAgICAgICAgKEpTQzo6SlNTeW1ib2xUYWJsZU9iamVjdDo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0
eU5hbWVzKToKKyAgICAgICAgKiBydW50aW1lL0pTVGVtcGxhdGVPYmplY3REZXNjcmlwdG9yLmNw
cDoKKyAgICAgICAgKEpTQzo6SlNUZW1wbGF0ZU9iamVjdERlc2NyaXB0b3I6OmNyZWF0ZVRlbXBs
YXRlT2JqZWN0KToKKyAgICAgICAgKiBydW50aW1lL0pTVHlwZWRBcnJheVZpZXdQcm90b3R5cGUu
Y3BwOgorICAgICAgICAoSlNDOjp0eXBlZEFycmF5Vmlld1Byb3RvR2V0dGVyRnVuY1RvU3RyaW5n
VGFnKToKKyAgICAgICAgKiBydW50aW1lL0xhenlDbGFzc1N0cnVjdHVyZS5jcHA6CisgICAgICAg
IChKU0M6OkxhenlDbGFzc1N0cnVjdHVyZTo6SW5pdGlhbGl6ZXI6OnNldENvbnN0cnVjdG9yKToK
KyAgICAgICAgKiBydW50aW1lL0xhenlQcm9wZXJ0eS5oOgorICAgICAgICAoSlNDOjpMYXp5UHJv
cGVydHk6OkluaXRpYWxpemVyOjpJbml0aWFsaXplcik6CisgICAgICAgICogcnVudGltZS9MaXRl
cmFsUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6TGl0ZXJhbFBhcnNlcjxDaGFyVHlwZT46OnRy
eUpTT05QUGFyc2UpOgorICAgICAgICAoSlNDOjpMaXRlcmFsUGFyc2VyPENoYXJUeXBlPjo6bWFr
ZUlkZW50aWZpZXIpOgorICAgICAgICAoSlNDOjpMaXRlcmFsUGFyc2VyPENoYXJUeXBlPjo6cGFy
c2UpOgorICAgICAgICAqIHJ1bnRpbWUvTG9va3VwLmg6CisgICAgICAgIChKU0M6OnJlaWZ5U3Rh
dGljUHJvcGVydGllcyk6CisgICAgICAgICogcnVudGltZS9NYXBJdGVyYXRvclByb3RvdHlwZS5j
cHA6CisgICAgICAgIChKU0M6Ok1hcEl0ZXJhdG9yUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbik6
CisgICAgICAgICogcnVudGltZS9NYXBQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpNYXBQ
cm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKiBydW50aW1lL01hdGhPYmplY3Qu
Y3BwOgorICAgICAgICAoSlNDOjpNYXRoT2JqZWN0OjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAg
ICogcnVudGltZS9OdW1iZXJDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6Ok51bWJlckNv
bnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgICogcnVudGltZS9OdW1iZXJQcm90
b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpudW1iZXJQcm90b0Z1bmNUb0V4cG9uZW50aWFsKToK
KyAgICAgICAgKEpTQzo6bnVtYmVyUHJvdG9GdW5jVG9GaXhlZCk6CisgICAgICAgIChKU0M6Om51
bWJlclByb3RvRnVuY1RvUHJlY2lzaW9uKToKKyAgICAgICAgKEpTQzo6aW50MzJUb1N0cmluZ0lu
dGVybmFsKToKKyAgICAgICAgKEpTQzo6bnVtYmVyVG9TdHJpbmdJbnRlcm5hbCk6CisgICAgICAg
IChKU0M6OmludDUyVG9TdHJpbmcpOgorICAgICAgICAqIHJ1bnRpbWUvT2JqZWN0Q29uc3RydWN0
b3IuY3BwOgorICAgICAgICAoSlNDOjpvYmplY3RDb25zdHJ1Y3RvckdldE93blByb3BlcnR5RGVz
Y3JpcHRvcnMpOgorICAgICAgICAoSlNDOjpvYmplY3RDb25zdHJ1Y3RvckFzc2lnbik6CisgICAg
ICAgIChKU0M6Om9iamVjdENvbnN0cnVjdG9yVmFsdWVzKToKKyAgICAgICAgKEpTQzo6ZGVmaW5l
UHJvcGVydGllcyk6CisgICAgICAgIChKU0M6OnNldEludGVncml0eUxldmVsKToKKyAgICAgICAg
KEpTQzo6dGVzdEludGVncml0eUxldmVsKToKKyAgICAgICAgKEpTQzo6b3duUHJvcGVydHlLZXlz
KToKKyAgICAgICAgKiBydW50aW1lL09iamVjdFByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6
Om9iamVjdFByb3RvRnVuY1RvU3RyaW5nKToKKyAgICAgICAgKiBydW50aW1lL09wZXJhdGlvbnMu
aDoKKyAgICAgICAgKEpTQzo6anNTdHJpbmcpOgorICAgICAgICAoSlNDOjpqc1N0cmluZ0Zyb21S
ZWdpc3RlckFycmF5KToKKyAgICAgICAgKEpTQzo6anNTdHJpbmdGcm9tQXJndW1lbnRzKToKKyAg
ICAgICAgKiBydW50aW1lL1Byb2dyYW1FeGVjdXRhYmxlLmNwcDoKKyAgICAgICAgKEpTQzo6UHJv
Z3JhbUV4ZWN1dGFibGU6OmluaXRpYWxpemVHbG9iYWxQcm9wZXJ0aWVzKToKKyAgICAgICAgKiBy
dW50aW1lL1Byb21pc2VEZWZlcnJlZFRpbWVyLmNwcDoKKyAgICAgICAgKEpTQzo6UHJvbWlzZURl
ZmVycmVkVGltZXI6OlByb21pc2VEZWZlcnJlZFRpbWVyKToKKyAgICAgICAgKEpTQzo6UHJvbWlz
ZURlZmVycmVkVGltZXI6Omhhc1BlbmRpbmdQcm9taXNlKToKKyAgICAgICAgKEpTQzo6UHJvbWlz
ZURlZmVycmVkVGltZXI6Omhhc0RlcGVuZGFuY3lJblBlbmRpbmdQcm9taXNlKToKKyAgICAgICAg
KEpTQzo6UHJvbWlzZURlZmVycmVkVGltZXI6OmNhbmNlbFBlbmRpbmdQcm9taXNlKToKKyAgICAg
ICAgKiBydW50aW1lL1Byb3BlcnR5TmFtZUFycmF5Lmg6CisgICAgICAgIChKU0M6OlByb3BlcnR5
TmFtZUFycmF5OjpQcm9wZXJ0eU5hbWVBcnJheSk6CisgICAgICAgIChKU0M6OlByb3BlcnR5TmFt
ZUFycmF5Ojp2bSk6CisgICAgICAgICogcnVudGltZS9Qcm9wZXJ0eVNsb3QuaDoKKyAgICAgICAg
KEpTQzo6UHJvcGVydHlTbG90OjpnZXRWYWx1ZSBjb25zdCk6CisgICAgICAgICogcnVudGltZS9Q
cm94eU9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OnBlcmZvcm1Qcm94eUdldCk6CisgICAgICAg
IChKU0M6OlByb3h5T2JqZWN0OjpwZXJmb3JtSW50ZXJuYWxNZXRob2RHZXRPd25Qcm9wZXJ0eSk6
CisgICAgICAgIChKU0M6OlByb3h5T2JqZWN0OjpwZXJmb3JtSGFzUHJvcGVydHkpOgorICAgICAg
ICAoSlNDOjpQcm94eU9iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleCk6CisgICAgICAg
IChKU0M6OlByb3h5T2JqZWN0OjpwZXJmb3JtUHV0KToKKyAgICAgICAgKEpTQzo6UHJveHlPYmpl
Y3Q6OnB1dEJ5SW5kZXhDb21tb24pOgorICAgICAgICAoSlNDOjpQcm94eU9iamVjdDo6cGVyZm9y
bURlbGV0ZSk6CisgICAgICAgIChKU0M6OlByb3h5T2JqZWN0OjpkZWxldGVQcm9wZXJ0eUJ5SW5k
ZXgpOgorICAgICAgICAoSlNDOjpQcm94eU9iamVjdDo6cGVyZm9ybURlZmluZU93blByb3BlcnR5
KToKKyAgICAgICAgKEpTQzo6UHJveHlPYmplY3Q6OnBlcmZvcm1HZXRPd25Qcm9wZXJ0eU5hbWVz
KToKKyAgICAgICAgKiBydW50aW1lL1JlZ0V4cEdsb2JhbERhdGEuY3BwOgorICAgICAgICAoSlND
OjpSZWdFeHBHbG9iYWxEYXRhOjpnZXRCYWNrcmVmKToKKyAgICAgICAgKEpTQzo6UmVnRXhwR2xv
YmFsRGF0YTo6Z2V0TGFzdFBhcmVuKToKKyAgICAgICAgKiBydW50aW1lL1JlZ0V4cE1hdGNoZXNB
cnJheS5jcHA6CisgICAgICAgIChKU0M6OmNyZWF0ZUVtcHR5UmVnRXhwTWF0Y2hlc0FycmF5KToK
KyAgICAgICAgKiBydW50aW1lL1JlZ0V4cE1hdGNoZXNBcnJheS5oOgorICAgICAgICAoSlNDOjpj
cmVhdGVSZWdFeHBNYXRjaGVzQXJyYXkpOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwUHJvdG90
eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6cmVnRXhwUHJvdG9HZXR0ZXJGbGFncyk6CisgICAgICAg
IChKU0M6OnJlZ0V4cFByb3RvR2V0dGVyU291cmNlSW50ZXJuYWwpOgorICAgICAgICAoSlNDOjpy
ZWdFeHBQcm90b0dldHRlclNvdXJjZSk6CisgICAgICAgICogcnVudGltZS9SZWdFeHBTdHJpbmdJ
dGVyYXRvclByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OlJlZ0V4cFN0cmluZ0l0ZXJhdG9y
UHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgICogcnVudGltZS9TYW1wbGluZ1By
b2ZpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6U2FtcGxpbmdQcm9maWxlcjo6cHJvY2Vzc1VudmVy
aWZpZWRTdGFja1RyYWNlcyk6CisgICAgICAgICogcnVudGltZS9TY3JpcHRFeGVjdXRhYmxlLmNw
cDoKKyAgICAgICAgKEpTQzo6U2NyaXB0RXhlY3V0YWJsZTo6aW5zdGFsbENvZGUpOgorICAgICAg
ICAoSlNDOjpTY3JpcHRFeGVjdXRhYmxlOjpuZXdDb2RlQmxvY2tGb3IpOgorICAgICAgICAoSlND
OjpTY3JpcHRFeGVjdXRhYmxlOjpuZXdSZXBsYWNlbWVudENvZGVCbG9ja0Zvcik6CisgICAgICAg
IChKU0M6OnNldHVwSklUKToKKyAgICAgICAgKiBydW50aW1lL1NldEl0ZXJhdG9yUHJvdG90eXBl
LmNwcDoKKyAgICAgICAgKEpTQzo6U2V0SXRlcmF0b3JQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9u
KToKKyAgICAgICAgKiBydW50aW1lL1NldFByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OlNl
dFByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAqIHJ1bnRpbWUvU3RhY2tGcmFt
ZS5jcHA6CisgICAgICAgIChKU0M6OlN0YWNrRnJhbWU6OmNvbXB1dGVMaW5lQW5kQ29sdW1uIGNv
bnN0KToKKyAgICAgICAgKiBydW50aW1lL1N0cmluZ0NvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAg
KEpTQzo6c3RyaW5nRnJvbUNoYXJDb2RlKToKKyAgICAgICAgKEpTQzo6c3RyaW5nRnJvbUNvZGVQ
b2ludCk6CisgICAgICAgIChKU0M6OnN0cmluZ0NvbnN0cnVjdG9yKToKKyAgICAgICAgKEpTQzo6
Y2FsbFN0cmluZ0NvbnN0cnVjdG9yKToKKyAgICAgICAgKiBydW50aW1lL1N0cmluZ0l0ZXJhdG9y
UHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6U3RyaW5nSXRlcmF0b3JQcm90b3R5cGU6OmZp
bmlzaENyZWF0aW9uKToKKyAgICAgICAgKiBydW50aW1lL1N0cmluZ09iamVjdC5jcHA6CisgICAg
ICAgIChKU0M6OlN0cmluZ09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleCk6CisgICAg
ICAgIChKU0M6OlN0cmluZ09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyk6CisgICAgICAgICog
cnVudGltZS9TdHJpbmdPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6U3RyaW5nT2JqZWN0OjpjcmVh
dGUpOgorICAgICAgICAoSlNDOjpqc1N0cmluZ1dpdGhSZXVzZSk6CisgICAgICAgIChKU0M6Ompz
U3Vic3RyaW5nKToKKyAgICAgICAgKiBydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHA6CisgICAg
ICAgIChKU0M6OlN0cmluZ1Byb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlND
OjpTdHJpbmdQcm90b3R5cGU6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OmpzU3BsaWNlU3Vic3Ry
aW5ncyk6CisgICAgICAgIChKU0M6OmpzU3BsaWNlU3Vic3RyaW5nc1dpdGhTZXBhcmF0b3JzKToK
KyAgICAgICAgKEpTQzo6cmVwbGFjZVVzaW5nUmVnRXhwU2VhcmNoKToKKyAgICAgICAgKEpTQzo6
b3BlcmF0aW9uU3RyaW5nUHJvdG9GdW5jUmVwbGFjZVJlZ0V4cEVtcHR5U3RyKToKKyAgICAgICAg
KEpTQzo6b3BlcmF0aW9uU3RyaW5nUHJvdG9GdW5jUmVwbGFjZVJlZ0V4cFN0cmluZyk6CisgICAg
ICAgIChKU0M6OnJlcGxhY2VVc2luZ1N0cmluZ1NlYXJjaCk6CisgICAgICAgIChKU0M6Om9wZXJh
dGlvblN0cmluZ1Byb3RvRnVuY1JlcGxhY2VHZW5lcmljKToKKyAgICAgICAgKEpTQzo6c3RyaW5n
UHJvdG9GdW5jQ2hhckF0KToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jU3BsaXRGYXN0
KToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jU3Vic3RyKToKKyAgICAgICAgKEpTQzo6
c3RyaW5nUHJvdG9GdW5jVG9Mb3dlckNhc2UpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1
bmNUb1VwcGVyQ2FzZSk6CisgICAgICAgIChKU0M6OnRvTG9jYWxlQ2FzZSk6CisgICAgICAgIChK
U0M6OnRyaW1TdHJpbmcpOgorICAgICAgICAoSlNDOjpub3JtYWxpemUpOgorICAgICAgICAqIHJ1
bnRpbWUvU3RyaW5nUHJvdG90eXBlSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpzdHJpbmdTbGlj
ZSk6CisgICAgICAgICogcnVudGltZS9TdHJpbmdSZWN1cnNpb25DaGVja2VyLmNwcDoKKyAgICAg
ICAgKEpTQzo6U3RyaW5nUmVjdXJzaW9uQ2hlY2tlcjo6ZW1wdHlTdHJpbmcpOgorICAgICAgICAq
IHJ1bnRpbWUvU3RydWN0dXJlLmNwcDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpkaWRUcmFu
c2l0aW9uRnJvbVRoaXNTdHJ1Y3R1cmUgY29uc3QpOgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0
dXJlSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmRpZFJlcGxhY2VQcm9wZXJ0
eSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6c2hvdWxkQ29udmVydFRvUG9seVByb3RvKToK
KyAgICAgICAgKiBydW50aW1lL1N5bWJvbENvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6
c3ltYm9sQ29uc3RydWN0b3JLZXlGb3IpOgorICAgICAgICAqIHJ1bnRpbWUvU3ltYm9sUHJvdG90
eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6U3ltYm9sUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbik6
CisgICAgICAgIChKU0M6OnN5bWJvbFByb3RvR2V0dGVyRGVzY3JpcHRpb24pOgorICAgICAgICAo
SlNDOjpzeW1ib2xQcm90b0Z1bmNUb1N0cmluZyk6CisgICAgICAgICogcnVudGltZS9TeW1ib2xU
YWJsZS5jcHA6CisgICAgICAgIChKU0M6OlN5bWJvbFRhYmxlOjpzZXRSYXJlRGF0YUNvZGVCbG9j
ayk6CisgICAgICAgICogcnVudGltZS9UZXN0UnVubmVyVXRpbHMuY3BwOgorICAgICAgICAoSlND
OjpnZXRFeGVjdXRhYmxlRm9yRnVuY3Rpb24pOgorICAgICAgICAqIHJ1bnRpbWUvVk0uY3BwOgor
ICAgICAgICAoSlNDOjpWTTo6Vk0pOgorICAgICAgICAoSlNDOjpWTTo6Z2V0SG9zdEZ1bmN0aW9u
KToKKyAgICAgICAgKEpTQzo6Vk06OmdldENUSUludGVybmFsRnVuY3Rpb25UcmFtcG9saW5lRm9y
KToKKyAgICAgICAgKEpTQzo6Vk06OnNocmlua0Zvb3RwcmludFdoZW5JZGxlKToKKyAgICAgICAg
KEpTQzo6bG9nU2FuaXRpemVTdGFjayk6CisgICAgICAgIChKU0M6OnNhbml0aXplU3RhY2tGb3JW
TSk6CisgICAgICAgIChKU0M6OlZNOjplbXB0eVByb3BlcnR5TmFtZUVudW1lcmF0b3JTbG93KToK
KyAgICAgICAgKiBydW50aW1lL1ZNLmg6CisgICAgICAgIChKU0M6OlZNOjpnZXRDVElTdHViKToK
KyAgICAgICAgKEpTQzo6V2Vha1NldDo6aGVhcCBjb25zdCk6CisgICAgICAgICogcnVudGltZS9W
TVRyYXBzLmNwcDoKKyAgICAgICAgKiBydW50aW1lL1dlYWtNYXBQcm90b3R5cGUuY3BwOgorICAg
ICAgICAoSlNDOjpXZWFrTWFwUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgICog
cnVudGltZS9XZWFrT2JqZWN0UmVmUHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6V2Vha09i
amVjdFJlZlByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAqIHJ1bnRpbWUvV2Vh
a1NldFByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OldlYWtTZXRQcm90b3R5cGU6OmZpbmlz
aENyZWF0aW9uKToKKyAgICAgICAgKiB0b29scy9IZWFwVmVyaWZpZXIuY3BwOgorICAgICAgICAo
SlNDOjpIZWFwVmVyaWZpZXI6OnByaW50VmVyaWZpY2F0aW9uSGVhZGVyKToKKyAgICAgICAgKEpT
Qzo6SGVhcFZlcmlmaWVyOjp2ZXJpZnlDZWxsTGlzdCk6CisgICAgICAgIChKU0M6OkhlYXBWZXJp
Zmllcjo6dmFsaWRhdGVKU0NlbGwpOgorICAgICAgICAoSlNDOjpIZWFwVmVyaWZpZXI6OnJlcG9y
dENlbGwpOgorICAgICAgICAqIHRvb2xzL0pTRG9sbGFyVk0uY3BwOgorICAgICAgICAoSlNDOjpK
U0RvbGxhclZNQ2FsbEZyYW1lOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OkpTRG9s
bGFyVk1DYWxsRnJhbWU6OmFkZFByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6Q3VzdG9tR2V0dGVy
OjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAoSlNDOjpDdXN0b21HZXR0ZXI6OmN1c3Rv
bUdldHRlcik6CisgICAgICAgIChKU0M6OkN1c3RvbUdldHRlcjo6Y3VzdG9tR2V0dGVyQWNlc3Nv
cik6CisgICAgICAgIChKU0M6OkRPTUpJVEdldHRlcjo6RE9NSklUQXR0cmlidXRlOjpzbG93Q2Fs
bCk6CisgICAgICAgIChKU0M6OkRPTUpJVEdldHRlcjo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAg
ICAoSlNDOjpET01KSVRHZXR0ZXJDb21wbGV4OjpET01KSVRBdHRyaWJ1dGU6OnNsb3dDYWxsKToK
KyAgICAgICAgKEpTQzo6RE9NSklUR2V0dGVyQ29tcGxleDo6ZmluaXNoQ3JlYXRpb24pOgorICAg
ICAgICAoSlNDOjpET01KSVRGdW5jdGlvbk9iamVjdDo6ZnVuY3Rpb25XaXRob3V0VHlwZUNoZWNr
KToKKyAgICAgICAgKEpTQzo6RE9NSklURnVuY3Rpb25PYmplY3Q6OmZpbmlzaENyZWF0aW9uKToK
KyAgICAgICAgKEpTQzo6RE9NSklUQ2hlY2tTdWJDbGFzc09iamVjdDo6ZnVuY3Rpb25XaXRob3V0
VHlwZUNoZWNrKToKKyAgICAgICAgKEpTQzo6RE9NSklUQ2hlY2tTdWJDbGFzc09iamVjdDo6Zmlu
aXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpET01KSVRHZXR0ZXJCYXNlSlNPYmplY3Q6OkRP
TUpJVEF0dHJpYnV0ZTo6c2xvd0NhbGwpOgorICAgICAgICAoSlNDOjpET01KSVRHZXR0ZXJCYXNl
SlNPYmplY3Q6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6Y3VzdG9tU2V0QWNjZXNz
b3IpOgorICAgICAgICAoSlNDOjpjdXN0b21TZXRWYWx1ZSk6CisgICAgICAgIChKU0M6OkpTVGVz
dEN1c3RvbUdldHRlclNldHRlcjo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpXYXNt
U3RyZWFtaW5nUGFyc2VyOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OmdldEV4ZWN1
dGFibGVGb3JGdW5jdGlvbik6CisgICAgICAgIChKU0M6OmZ1bmN0aW9uQ29kZUJsb2NrRm9yKToK
KyAgICAgICAgKEpTQzo6ZnVuY3Rpb25JbmRleGluZ01vZGUpOgorICAgICAgICAoSlNDOjpmdW5j
dGlvblZhbHVlKToKKyAgICAgICAgKEpTQzo6ZnVuY3Rpb25DcmVhdGVCdWlsdGluKToKKyAgICAg
ICAgKEpTQzo6ZnVuY3Rpb25HZXRQcml2YXRlUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpKU0Rv
bGxhclZNOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OkpTRG9sbGFyVk06OmFkZEZ1
bmN0aW9uKToKKyAgICAgICAgKEpTQzo6SlNEb2xsYXJWTTo6YWRkQ29uc3RydWN0aWJsZUZ1bmN0
aW9uKToKKyAgICAgICAgKiB0b29scy9WTUluc3BlY3Rvci5jcHA6CisgICAgICAgIChKU0M6OlZN
SW5zcGVjdG9yOjpkdW1wUmVnaXN0ZXJzKToKKyAgICAgICAgKEpTQzo6Vk1JbnNwZWN0b3I6OmR1
bXBDZWxsTWVtb3J5VG9TdHJlYW0pOgorICAgICAgICAqIHdhc20vV2FzbUluc3RhbmNlLmNwcDoK
KyAgICAgICAgKEpTQzo6V2FzbTo6SW5zdGFuY2U6OnNldEdsb2JhbCk6CisgICAgICAgIChKU0M6
Oldhc206Okluc3RhbmNlOjpzZXRGdW5jdGlvbldyYXBwZXIpOgorICAgICAgICAoSlNDOjpXYXNt
OjpzZXRXYXNtVGFibGVFbGVtZW50KToKKyAgICAgICAgKEpTQzo6V2FzbTo6ZG9XYXNtUmVmRnVu
Yyk6CisgICAgICAgICogd2FzbS9XYXNtVGFibGUuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpU
YWJsZTo6c2V0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6RnVuY1JlZlRhYmxlOjpzZXRGdW5jdGlv
bik6CisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5LmNwcDoKKyAgICAgICAgKEpTQzo6
cmVzb2x2ZSk6CisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuY3BwOgor
ICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmNyZWF0ZSk6CisgICAgICAgICog
d2FzbS9qcy9XYXNtVG9KUy5jcHA6CisgICAgICAgIChKU0M6Oldhc206OmhhbmRsZUJhZEk2NFVz
ZSk6CisgICAgICAgIChKU0M6Oldhc206Ondhc21Ub0pTKToKKyAgICAgICAgKEpTQzo6V2FzbTo6
d2FzbVRvSlNFeGNlcHRpb24pOgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlv
bi5jcHA6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5RnVuY3Rpb246OmpzQ2FsbEVudHJ5cG9p
bnRTbG93KToKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5TWVtb3J5Q29uc3RydWN0b3Iu
Y3BwOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RKU1dlYkFzc2VtYmx5TWVtb3J5KToKKyAgICAg
ICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAo
SlNDOjp3ZWJBc3NlbWJseU1vZHVsZUltcG9ydHMpOgorICAgICAgICAoSlNDOjp3ZWJBc3NlbWJs
eU1vZHVsZUV4cG9ydHMpOgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNv
cmQuY3BwOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6ZmluaXNoQ3Jl
YXRpb24pOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6bGluayk6Cisg
ICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseVRhYmxlQ29uc3RydWN0b3IuY3BwOgorICAgICAg
ICAoSlNDOjpjb25zdHJ1Y3RKU1dlYkFzc2VtYmx5VGFibGUpOgorCiAyMDE5LTA4LTI2ICBEZXZp
biBSb3Vzc28gIDxkcm91c3NvQGFwcGxlLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiB1
c2UgbW9yZSBDKysga2V5d29yZHMgZm9yIGRlZmluaW5nIGFnZW50cwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL0tleXdvcmRMb29rdXBHZW5lcmF0b3IucHkKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0tleXdvcmRMb29rdXBHZW5lcmF0b3IucHkJKHJldmlzaW9uIDI0
OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9LZXl3b3JkTG9va3VwR2VuZXJhdG9yLnB5
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDQgKzEsNCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMTEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxOSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAjIENvcHlyaWdodCAoQykgMjAxMiBTb255
IE5ldHdvcmsgRW50ZXJ0YWlubWVudC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICMKICMgUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CkBAIC0xNDQsNyArMTQ0LDcgQEAgY2xhc3MgVHJpZToKICAgICAgICAgICAgIHByaW50KHN0
ciArICJpZiAoIWlzSWRlbnRQYXJ0SW5jbHVkaW5nRXNjYXBlKGNvZGUgKyAlZCwgbV9jb2RlRW5k
KSkgeyIgJSAobGVuKHNlbGYuZnVsbFByZWZpeCkpKQogICAgICAgICAgICAgcHJpbnQoc3RyICsg
IiAgICBpbnRlcm5hbFNoaWZ0PCVkPigpOyIgJSBsZW4oc2VsZi5mdWxsUHJlZml4KSkKICAgICAg
ICAgICAgIHByaW50KHN0ciArICIgICAgaWYgKHNob3VsZENyZWF0ZUlkZW50aWZpZXIpIikKLSAg
ICAgICAgICAgIHByaW50KHN0ciArICgiICAgICAgICBkYXRhLT5pZGVudCA9ICZtX3ZtLT5wcm9w
ZXJ0eU5hbWVzLT4lc0tleXdvcmQ7IiAlIHNlbGYuZnVsbFByZWZpeCkpCisgICAgICAgICAgICBw
cmludChzdHIgKyAoIiAgICAgICAgZGF0YS0+aWRlbnQgPSAmbV92bS5wcm9wZXJ0eU5hbWVzLT4l
c0tleXdvcmQ7IiAlIHNlbGYuZnVsbFByZWZpeCkpCiAgICAgICAgICAgICBwcmludChzdHIgKyAi
ICAgIHJldHVybiAiICsgc2VsZi52YWx1ZSArICI7IikKICAgICAgICAgICAgIHByaW50KHN0ciAr
ICJ9IikKICAgICAgICAgcm9vdEluZGV4ID0gbGVuKHNlbGYuZnVsbFByZWZpeCkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9keW5iZW5jaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2R5bmJlbmNoLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2R5bmJlbmNoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC05MCwyMiArOTAsMjIgQEAg
aW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQogICAgIFdURjo6aW5pdGlhbGl6ZU1haW5U
aHJlYWQoKTsKICAgICBKU0M6OmluaXRpYWxpemVUaHJlYWRpbmcoKTsKIAotICAgIFZNKiB2bSA9
ICZWTTo6Y3JlYXRlKExhcmdlSGVhcCkubGVha1JlZigpOworICAgIFZNJiB2bSA9IFZNOjpjcmVh
dGUoTGFyZ2VIZWFwKS5sZWFrUmVmKCk7CiAgICAgewogICAgICAgICBKU0xvY2tIb2xkZXIgbG9j
a2VyKHZtKTsKIAogICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0KLSAgICAg
ICAgICAgIEpTR2xvYmFsT2JqZWN0OjpjcmVhdGUoKnZtLCBKU0dsb2JhbE9iamVjdDo6Y3JlYXRl
U3RydWN0dXJlKCp2bSwganNOdWxsKCkpKTsKKyAgICAgICAgICAgIEpTR2xvYmFsT2JqZWN0Ojpj
cmVhdGUodm0sIEpTR2xvYmFsT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUodm0sIGpzTnVsbCgpKSk7
CiAgICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwog
Ci0gICAgICAgIElkZW50aWZpZXIgaWRlbnRGID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVj
LCAiZiIpOwotICAgICAgICBJZGVudGlmaWVyIGlkZW50RyA9IElkZW50aWZpZXI6OmZyb21TdHJp
bmcoZXhlYywgImciKTsKKyAgICAgICAgSWRlbnRpZmllciBpZGVudEYgPSBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCAiZiIpOworICAgICAgICBJZGVudGlmaWVyIGlkZW50RyA9IElkZW50aWZp
ZXI6OmZyb21TdHJpbmcodm0sICJnIik7CiAKICAgICAgICAgU3RydWN0dXJlKiBvYmplY3RTdHJ1
Y3R1cmUgPQotICAgICAgICAgICAgSlNGaW5hbE9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKCp2bSwg
Z2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgpLCAyKTsKKyAgICAg
ICAgICAgIEpTRmluYWxPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgZ2xvYmFsT2JqZWN0LCBn
bG9iYWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgpLCAyKTsKIAogICAgICAgICAvLyBOb24tc3Ry
aWN0IGR5bmFtaWMgZ2V0IGJ5IGlkOgotICAgICAgICBKU1ZhbHVlIG9iamVjdCA9IEpTRmluYWxP
YmplY3Q6OmNyZWF0ZSgqdm0sIG9iamVjdFN0cnVjdHVyZSk7CisgICAgICAgIEpTVmFsdWUgb2Jq
ZWN0ID0gSlNGaW5hbE9iamVjdDo6Y3JlYXRlKHZtLCBvYmplY3RTdHJ1Y3R1cmUpOwogICAgICAg
ICB7CiAgICAgICAgICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChvYmplY3QsIGZhbHNlLCBQdXRQ
cm9wZXJ0eVNsb3Q6OlB1dEJ5SWQpOwogICAgICAgICAgICAgb2JqZWN0LnB1dElubGluZShleGVj
LCBpZGVudEYsIGpzTnVtYmVyKDQyKSwgc2xvdCk7CkBAIC0xMjcsNyArMTI3LDcgQEAgaW50IG1h
aW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQogICAgICAgICAgICAgfSk7CiAKICAgICAgICAgLy8g
Tm9uLXN0cmljdCBkeW5hbWljIHB1dCBieSBpZCByZXBsYWNlOgotICAgICAgICBvYmplY3QgPSBK
U0ZpbmFsT2JqZWN0OjpjcmVhdGUoKnZtLCBvYmplY3RTdHJ1Y3R1cmUpOworICAgICAgICBvYmpl
Y3QgPSBKU0ZpbmFsT2JqZWN0OjpjcmVhdGUodm0sIG9iamVjdFN0cnVjdHVyZSk7CiAgICAgICAg
IHsKICAgICAgICAgICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KG9iamVjdCwgZmFsc2UsIFB1dFBy
b3BlcnR5U2xvdDo6UHV0QnlJZCk7CiAgICAgICAgICAgICBvYmplY3QucHV0SW5saW5lKGV4ZWMs
IGlkZW50RiwganNOdW1iZXIoNDIpLCBzbG90KTsKQEAgLTE1OCw3ICsxNTgsNyBAQCBpbnQgbWFp
bihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCiAgICAgICAgICAgICAxMDAwMDAwLAogICAgICAgICAg
ICAgWyZdICh1bnNpZ25lZCBpdGVyYXRpb25Db3VudCkgewogICAgICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IGl0ZXJhdGlvbkNvdW50OyBpLS07KSB7Ci0gICAgICAgICAgICAgICAgICAg
IEpTVmFsdWUgb2JqZWN0ID0gSlNGaW5hbE9iamVjdDo6Y3JlYXRlKCp2bSwgb2JqZWN0U3RydWN0
dXJlKTsKKyAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZSBvYmplY3QgPSBKU0ZpbmFsT2JqZWN0
OjpjcmVhdGUodm0sIG9iamVjdFN0cnVjdHVyZSk7CiAgICAgICAgICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KG9iamVjdCwgZmFsc2Us
IFB1dFByb3BlcnR5U2xvdDo6UHV0QnlJZCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBvYmpl
Y3QucHV0SW5saW5lKGV4ZWMsIGlkZW50RiwganNOdW1iZXIoaSksIHNsb3QpOwpAQCAtMTcxLDcg
KzE3MSw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKICAgICAgICAgICAgIH0p
OwogCiAgICAgICAgIC8vIE5vbi1zdHJpY3QgZHluYW1pYyBnZXQgYnkgaWQgd2l0aCBkeW5hbWlj
IHN0b3JlIGNvbnRleHQ6Ci0gICAgICAgIG9iamVjdCA9IEpTRmluYWxPYmplY3Q6OmNyZWF0ZSgq
dm0sIG9iamVjdFN0cnVjdHVyZSk7CisgICAgICAgIG9iamVjdCA9IEpTRmluYWxPYmplY3Q6OmNy
ZWF0ZSh2bSwgb2JqZWN0U3RydWN0dXJlKTsKICAgICAgICAgewogICAgICAgICAgICAgUHV0UHJv
cGVydHlTbG90IHNsb3Qob2JqZWN0LCBmYWxzZSk7CiAgICAgICAgICAgICBvYmplY3QucHV0SW5s
aW5lKGV4ZWMsIGlkZW50RiwganNOdW1iZXIoNDIpLCBzbG90KTsKQEAgLTE5Myw3ICsxOTMsNyBA
QCBpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCiAgICAgICAgICAgICB9KTsKIAogICAg
ICAgICAvLyBOb24tc3RyaWN0IGR5bmFtaWMgcHV0IGJ5IGlkIHJlcGxhY2Ugd2l0aCBkeW5hbWlj
IHN0b3JlIGNvbnRleHQ6Ci0gICAgICAgIG9iamVjdCA9IEpTRmluYWxPYmplY3Q6OmNyZWF0ZSgq
dm0sIG9iamVjdFN0cnVjdHVyZSk7CisgICAgICAgIG9iamVjdCA9IEpTRmluYWxPYmplY3Q6OmNy
ZWF0ZSh2bSwgb2JqZWN0U3RydWN0dXJlKTsKICAgICAgICAgewogICAgICAgICAgICAgUHV0UHJv
cGVydHlTbG90IHNsb3Qob2JqZWN0LCBmYWxzZSk7CiAgICAgICAgICAgICBvYmplY3QucHV0SW5s
aW5lKGV4ZWMsIGlkZW50RiwganNOdW1iZXIoNDIpLCBzbG90KTsKQEAgLTIyNCw3ICsyMjQsNyBA
QCBpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCiAgICAgICAgICAgICAxMDAwMDAwLAog
ICAgICAgICAgICAgWyZdICh1bnNpZ25lZCBpdGVyYXRpb25Db3VudCkgewogICAgICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IGl0ZXJhdGlvbkNvdW50OyBpLS07KSB7Ci0gICAgICAgICAg
ICAgICAgICAgIEpTVmFsdWUgb2JqZWN0ID0gSlNGaW5hbE9iamVjdDo6Y3JlYXRlKCp2bSwgb2Jq
ZWN0U3RydWN0dXJlKTsKKyAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZSBvYmplY3QgPSBKU0Zp
bmFsT2JqZWN0OjpjcmVhdGUodm0sIG9iamVjdFN0cnVjdHVyZSk7CiAgICAgICAgICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KG9iamVj
dCwgZmFsc2UpOwogICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnB1dElubGluZShleGVj
LCBpZGVudEYsIGpzTnVtYmVyKGkpLCBzbG90KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qc2MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCShy
ZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTUxLDEyICs1NTEsMTIgQEAgcHJvdGVjdGVkOgogICAgICAgICBhZGRGdW5j
dGlvbih2bSwgImNsZWFyU2FtcGxpbmdGbGFncyIsIGZ1bmN0aW9uQ2xlYXJTYW1wbGluZ0ZsYWdz
LCAxKTsKICNlbmRpZgogCi0gICAgICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9uKHZtLCB0aGlz
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgIk9TUkV4aXQiKSwgMCwgZnVuY3Rpb25VbmRl
ZmluZWQxLCBPU1JFeGl0SW50cmluc2ljLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlB
dHRyaWJ1dGU6OkRvbnRFbnVtKSk7Ci0gICAgICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9uKHZt
LCB0aGlzLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImlzRmluYWxUaWVyIiksIDAsIGZ1
bmN0aW9uRmFsc2UsIElzRmluYWxUaWVySW50cmluc2ljLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7Ci0gICAgICAgIHB1dERpcmVjdE5hdGl2ZUZ1
bmN0aW9uKHZtLCB0aGlzLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgInByZWRpY3RJbnQz
MiIpLCAwLCBmdW5jdGlvblVuZGVmaW5lZDIsIFNldEludDMySGVhcFByZWRpY3Rpb25JbnRyaW5z
aWMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsK
LSAgICAgICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rpb24odm0sIHRoaXMsIElkZW50aWZpZXI6OmZy
b21TdHJpbmcoJnZtLCAiaXNJbnQzMiIpLCAwLCBmdW5jdGlvbklzSW50MzIsIENoZWNrSW50MzJJ
bnRyaW5zaWMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVu
dW0pKTsKLSAgICAgICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rpb24odm0sIHRoaXMsIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcoJnZtLCAiaXNQdXJlTmFOIiksIDAsIGZ1bmN0aW9uSXNQdXJlTmFOLCBD
aGVja0ludDMySW50cmluc2ljLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1
dGU6OkRvbnRFbnVtKSk7Ci0gICAgICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9uKHZtLCB0aGlz
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImZpYXRJbnQ1MiIpLCAwLCBmdW5jdGlvbklk
ZW50aXR5LCBGaWF0SW50NTJJbnRyaW5zaWMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0
eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKKyAgICAgICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rpb24o
dm0sIHRoaXMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJPU1JFeGl0IiksIDAsIGZ1bmN0
aW9uVW5kZWZpbmVkMSwgT1NSRXhpdEludHJpbnNpYywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFBy
b3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOworICAgICAgICBwdXREaXJlY3ROYXRpdmVGdW5j
dGlvbih2bSwgdGhpcywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImlzRmluYWxUaWVyIiks
IDAsIGZ1bmN0aW9uRmFsc2UsIElzRmluYWxUaWVySW50cmluc2ljLCBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7CisgICAgICAgIHB1dERpcmVjdE5h
dGl2ZUZ1bmN0aW9uKHZtLCB0aGlzLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAicHJlZGlj
dEludDMyIiksIDAsIGZ1bmN0aW9uVW5kZWZpbmVkMiwgU2V0SW50MzJIZWFwUHJlZGljdGlvbklu
dHJpbnNpYywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51
bSkpOworICAgICAgICBwdXREaXJlY3ROYXRpdmVGdW5jdGlvbih2bSwgdGhpcywgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZyh2bSwgImlzSW50MzIiKSwgMCwgZnVuY3Rpb25Jc0ludDMyLCBDaGVja0lu
dDMySW50cmluc2ljLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRv
bnRFbnVtKSk7CisgICAgICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9uKHZtLCB0aGlzLCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiaXNQdXJlTmFOIiksIDAsIGZ1bmN0aW9uSXNQdXJlTmFO
LCBDaGVja0ludDMySW50cmluc2ljLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRy
aWJ1dGU6OkRvbnRFbnVtKSk7CisgICAgICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9uKHZtLCB0
aGlzLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiZmlhdEludDUyIiksIDAsIGZ1bmN0aW9u
SWRlbnRpdHksIEZpYXRJbnQ1MkludHJpbnNpYywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3Bl
cnR5QXR0cmlidXRlOjpEb250RW51bSkpOwogICAgICAgICAKICAgICAgICAgYWRkRnVuY3Rpb24o
dm0sICJlZmZlY3RmdWw0MiIsIGZ1bmN0aW9uRWZmZWN0ZnVsNDIsIDApOwogICAgICAgICBhZGRG
dW5jdGlvbih2bSwgIm1ha2VNYXNxdWVyYWRlciIsIGZ1bmN0aW9uTWFrZU1hc3F1ZXJhZGVyLCAw
KTsKQEAgLTYwMCwyNiArNjAwLDI2IEBAIHByb3RlY3RlZDoKICAgICAgICAgaWYgKCFhcmd1bWVu
dHMuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBKU0FycmF5KiBhcnJheSA9IGNvbnN0cnVjdEVt
cHR5QXJyYXkoZ2xvYmFsRXhlYygpLCAwKTsKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgYXJndW1lbnRzLnNpemUoKTsgKytpKQotICAgICAgICAgICAgICAgIGFycmF5LT5wdXRE
aXJlY3RJbmRleChnbG9iYWxFeGVjKCksIGksIGpzU3RyaW5nKGdsb2JhbEV4ZWMoKSwgYXJndW1l
bnRzW2ldKSk7Ci0gICAgICAgICAgICBwdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJp
bmcoZ2xvYmFsRXhlYygpLCAiYXJndW1lbnRzIiksIGFycmF5KTsKKyAgICAgICAgICAgICAgICBh
cnJheS0+cHV0RGlyZWN0SW5kZXgoZ2xvYmFsRXhlYygpLCBpLCBqc1N0cmluZyh2bSwgYXJndW1l
bnRzW2ldKSk7CisgICAgICAgICAgICBwdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJp
bmcodm0sICJhcmd1bWVudHMiKSwgYXJyYXkpOwogICAgICAgICB9CiAKLSAgICAgICAgcHV0RGly
ZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGdsb2JhbEV4ZWMoKSwgImNvbnNvbGUiKSwg
anNVbmRlZmluZWQoKSk7CisgICAgICAgIHB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZyh2bSwgImNvbnNvbGUiKSwganNVbmRlZmluZWQoKSk7CiAgICAgICAgIAogICAgICAgICBT
dHJ1Y3R1cmUqIHBsYWluT2JqZWN0U3RydWN0dXJlID0gSlNGaW5hbE9iamVjdDo6Y3JlYXRlU3Ry
dWN0dXJlKHZtLCB0aGlzLCBvYmplY3RQcm90b3R5cGUoKSwgMCk7CiAgICAgICAgIAogICAgICAg
ICBKU09iamVjdCogZG9sbGFyID0gSlNGaW5hbE9iamVjdDo6Y3JlYXRlKHZtLCBwbGFpbk9iamVj
dFN0cnVjdHVyZSk7Ci0gICAgICAgIHB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
ZyhnbG9iYWxFeGVjKCksICIkIiksIGRvbGxhcik7Ci0gICAgICAgIHB1dERpcmVjdCh2bSwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZyhnbG9iYWxFeGVjKCksICIkMjYyIiksIGRvbGxhcik7CisgICAg
ICAgIHB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIiQiKSwgZG9sbGFy
KTsKKyAgICAgICAgcHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiJDI2
MiIpLCBkb2xsYXIpOwogICAgICAgICAKICAgICAgICAgYWRkRnVuY3Rpb24odm0sIGRvbGxhciwg
ImNyZWF0ZVJlYWxtIiwgZnVuY3Rpb25Eb2xsYXJDcmVhdGVSZWFsbSwgMCk7CiAgICAgICAgIGFk
ZEZ1bmN0aW9uKHZtLCBkb2xsYXIsICJkZXRhY2hBcnJheUJ1ZmZlciIsIGZ1bmN0aW9uRG9sbGFy
RGV0YWNoQXJyYXlCdWZmZXIsIDEpOwogICAgICAgICBhZGRGdW5jdGlvbih2bSwgZG9sbGFyLCAi
ZXZhbFNjcmlwdCIsIGZ1bmN0aW9uRG9sbGFyRXZhbFNjcmlwdCwgMSk7CiAgICAgICAgIAotICAg
ICAgICBkb2xsYXItPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhnbG9iYWxF
eGVjKCksICJnbG9iYWwiKSwgdGhpcyk7CisgICAgICAgIGRvbGxhci0+cHV0RGlyZWN0KHZtLCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiZ2xvYmFsIiksIHRoaXMpOwogICAgICAgICAKICAg
ICAgICAgSlNPYmplY3QqIGFnZW50ID0gSlNGaW5hbE9iamVjdDo6Y3JlYXRlKHZtLCBwbGFpbk9i
amVjdFN0cnVjdHVyZSk7Ci0gICAgICAgIGRvbGxhci0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKGdsb2JhbEV4ZWMoKSwgImFnZW50IiksIGFnZW50KTsKKyAgICAgICAgZG9s
bGFyLT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJhZ2VudCIpLCBh
Z2VudCk7CiAgICAgICAgIAogICAgICAgICAvLyBUaGUgdGVzdDI2MiBJTlRFUlBSRVRJTkcubWQg
ZG9jdW1lbnQgc2F5cyB0aGF0IHNvbWUgb2YgdGhlc2UgZnVuY3Rpb25zIGFyZSBqdXN0IGluIHRo
ZSBtYWluCiAgICAgICAgIC8vIHRocmVhZCBhbmQgc29tZSBhcmUgaW4gdGhlIG90aGVyIHRocmVh
ZHMuIFdlIGp1c3QgcHV0IHRoZW0gaW4gYWxsIHRocmVhZHMuCkBAIC02NDYsNyArNjQ2LDcgQEAg
cHJvdGVjdGVkOgogICAgIAogICAgIHZvaWQgYWRkRnVuY3Rpb24oVk0mIHZtLCBKU09iamVjdCog
b2JqZWN0LCBjb25zdCBjaGFyKiBuYW1lLCBOYXRpdmVGdW5jdGlvbiBmdW5jdGlvbiwgdW5zaWdu
ZWQgYXJndW1lbnRzKQogICAgIHsKLSAgICAgICAgSWRlbnRpZmllciBpZGVudGlmaWVyID0gSWRl
bnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIG5hbWUpOworICAgICAgICBJZGVudGlmaWVyIGlkZW50
aWZpZXIgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBuYW1lKTsKICAgICAgICAgb2JqZWN0
LT5wdXREaXJlY3Qodm0sIGlkZW50aWZpZXIsIEpTRnVuY3Rpb246OmNyZWF0ZSh2bSwgdGhpcywg
YXJndW1lbnRzLCBpZGVudGlmaWVyLnN0cmluZygpLCBmdW5jdGlvbikpOwogICAgIH0KIApAQCAt
ODQ0LDcgKzg0NCw3IEBAIEpTSW50ZXJuYWxQcm9taXNlKiBHbG9iYWxPYmplY3Q6Om1vZHVsZUwK
ICAgICBpZiAoIWRpcmVjdG9yeU5hbWUpCiAgICAgICAgIHJldHVybiByZWplY3QoY3JlYXRlRXJy
b3IoZXhlYywgbWFrZVN0cmluZygiQ291bGQgbm90IHJlc29sdmUgdGhlIHJlZmVycmVyIG5hbWUg
JyIsIFN0cmluZyhyZWZlcnJlci5pbXBsKCkpLCAiJy4iKSkpOwogCi0gICAgYXV0byByZXN1bHQg
PSBKU0M6OmltcG9ydE1vZHVsZShleGVjLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgcmVz
b2x2ZVBhdGgoZGlyZWN0b3J5TmFtZS52YWx1ZSgpLCBNb2R1bGVOYW1lKG1vZHVsZU5hbWUpKSks
IHBhcmFtZXRlcnMsIGpzVW5kZWZpbmVkKCkpOworICAgIGF1dG8gcmVzdWx0ID0gSlNDOjppbXBv
cnRNb2R1bGUoZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVzb2x2ZVBhdGgoZGly
ZWN0b3J5TmFtZS52YWx1ZSgpLCBNb2R1bGVOYW1lKG1vZHVsZU5hbWUpKSksIHBhcmFtZXRlcnMs
IGpzVW5kZWZpbmVkKCkpOwogICAgIGlmIChVTkxJS0VMWShjYXRjaFNjb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIHJlamVjdChjYXRjaFNjb3BlLmV4Y2VwdGlvbigpKTsKICAgICBy
ZXR1cm4gcmVzdWx0OwpAQCAtODY4LDcgKzg2OCw3IEBAIElkZW50aWZpZXIgR2xvYmFsT2JqZWN0
Ojptb2R1bGVMb2FkZXJSZXMKICAgICAgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHNjb3Bl
LCBjcmVhdGVFcnJvcihleGVjLCAiQ291bGQgbm90IHJlc29sdmUgdGhlIGN1cnJlbnQgd29ya2lu
ZyBkaXJlY3RvcnkuIl9zKSk7CiAgICAgICAgICAgICByZXR1cm4geyB9OwogICAgICAgICB9Ci0g
ICAgICAgIHJldHVybiBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgcmVzb2x2ZVBhdGgoZGly
ZWN0b3J5TmFtZS52YWx1ZSgpLCBNb2R1bGVOYW1lKGtleS5pbXBsKCkpKSk7CisgICAgICAgIHJl
dHVybiBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZXNvbHZlUGF0aChkaXJlY3RvcnlOYW1l
LnZhbHVlKCksIE1vZHVsZU5hbWUoa2V5LmltcGwoKSkpKTsKICAgICB9CiAKICAgICBjb25zdCBJ
ZGVudGlmaWVyIHJlZmVycmVyID0gcmVmZXJyZXJWYWx1ZS50b1Byb3BlcnR5S2V5KGV4ZWMpOwpA
QCAtODgwLDcgKzg4MCw3IEBAIElkZW50aWZpZXIgR2xvYmFsT2JqZWN0Ojptb2R1bGVMb2FkZXJS
ZXMKICAgICAgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHNjb3BlLCBjcmVhdGVFcnJvcihl
eGVjLCAiQ291bGQgbm90IHJlc29sdmUgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuIl9z
KSk7CiAgICAgICAgICAgICByZXR1cm4geyB9OwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgcmVzb2x2ZVBhdGgoZGlyZWN0b3J5TmFtZS52YWx1
ZSgpLCBNb2R1bGVOYW1lKGtleS5pbXBsKCkpKSk7CisgICAgICAgIHJldHVybiBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKHZtLCByZXNvbHZlUGF0aChkaXJlY3RvcnlOYW1lLnZhbHVlKCksIE1vZHVs
ZU5hbWUoa2V5LmltcGwoKSkpKTsKICAgICB9CiAKICAgICAvLyBJZiB0aGUgcmVmZXJyZXIgZXhp
c3RzLCB3ZSBhc3N1bWUgdGhhdCB0aGUgcmVmZXJyZXIgaXMgdGhlIGNvcnJlY3QgYWJzb2x1dGUg
cGF0aC4KQEAgLTg4OSw3ICs4ODksNyBAQCBJZGVudGlmaWVyIEdsb2JhbE9iamVjdDo6bW9kdWxl
TG9hZGVyUmVzCiAgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHNjb3BlLCBjcmVhdGVFcnJv
cihleGVjLCBtYWtlU3RyaW5nKCJDb3VsZCBub3QgcmVzb2x2ZSB0aGUgcmVmZXJyZXIgbmFtZSAn
IiwgU3RyaW5nKHJlZmVycmVyLmltcGwoKSksICInLiIpKSk7CiAgICAgICAgIHJldHVybiB7IH07
CiAgICAgfQotICAgIHJldHVybiBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgcmVzb2x2ZVBh
dGgoZGlyZWN0b3J5TmFtZS52YWx1ZSgpLCBNb2R1bGVOYW1lKGtleS5pbXBsKCkpKSk7CisgICAg
cmV0dXJuIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlc29sdmVQYXRoKGRpcmVjdG9yeU5h
bWUudmFsdWUoKSwgTW9kdWxlTmFtZShrZXkuaW1wbCgpKSkpOwogfQogCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBWZWN0b3I+CkBAIC05OTYsNyArOTk2LDcgQEAgcHVibGljOgogICAgICAgICBpZiAoIWNh
Y2hlRW5hYmxlZCgpIHx8ICFtX2NhY2hlZEJ5dGVjb2RlKQogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICBCeXRlY29kZUNhY2hlRXJyb3IgZXJyb3I7Ci0gICAgICAgIFJlZlB0cjxDYWNoZWRC
eXRlY29kZT4gY2FjaGVkQnl0ZWNvZGUgPSBlbmNvZGVGdW5jdGlvbkNvZGVCbG9jaygqZXhlY3V0
YWJsZS0+dm0oKSwgY29kZUJsb2NrLCBlcnJvcik7CisgICAgICAgIFJlZlB0cjxDYWNoZWRCeXRl
Y29kZT4gY2FjaGVkQnl0ZWNvZGUgPSBlbmNvZGVGdW5jdGlvbkNvZGVCbG9jayhleGVjdXRhYmxl
LT52bSgpLCBjb2RlQmxvY2ssIGVycm9yKTsKICAgICAgICAgaWYgKGNhY2hlZEJ5dGVjb2RlICYm
ICFlcnJvci5pc1ZhbGlkKCkpCiAgICAgICAgICAgICBtX2NhY2hlZEJ5dGVjb2RlLT5hZGRGdW5j
dGlvblVwZGF0ZShleGVjdXRhYmxlLCBraW5kLCAqY2FjaGVkQnl0ZWNvZGUpOwogICAgIH0KQEAg
LTEyMDgsNyArMTIwOCw3IEBAIEpTT2JqZWN0KiBHbG9iYWxPYmplY3Q6Om1vZHVsZUxvYWRlckNy
ZWEKICAgICBKU09iamVjdCogbWV0YVByb3BlcnRpZXMgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChl
eGVjLCBnbG9iYWxPYmplY3QtPm51bGxQcm90b3R5cGVPYmplY3RTdHJ1Y3R1cmUoKSk7CiAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAKLSAgICBtZXRhUHJvcGVydGll
cy0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImZpbGVuYW1lIiks
IGtleSk7CisgICAgbWV0YVByb3BlcnRpZXMtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyh2bSwgImZpbGVuYW1lIiksIGtleSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgbnVsbHB0cik7CiAKICAgICByZXR1cm4gbWV0YVByb3BlcnRpZXM7CkBAIC0xMjg0LDkg
KzEyODQsMTAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkRlYgogCiBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uRGVzY3JpYmUoRXhlY1N0YXRlKiBl
eGVjKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50
Q291bnQoKSA8IDEpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyhleGVjLCB0b1N0cmluZyhl
eGVjLT5hcmd1bWVudCgwKSkpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5n
KHZtLCB0b1N0cmluZyhleGVjLT5hcmd1bWVudCgwKSkpKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkRlc2NyaWJlQXJyYXkoRXhlY1N0YXRlKiBleGVjKQpAQCAt
MTI5Niw4ICsxMjk3LDggQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkRl
cwogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgSlNPYmplY3QqIG9iamVjdCA9IGpzRHlu
YW1pY0Nhc3Q8SlNPYmplY3QqPih2bSwgZXhlYy0+YXJndW1lbnQoMCkpOwogICAgIGlmICghb2Jq
ZWN0KQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTm9udHJpdmlhbFN0cmluZyhl
eGVjLCAiPG5vdCBvYmplY3Q+Il9zKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc05v
bnRyaXZpYWxTdHJpbmcoZXhlYywgdG9TdHJpbmcoIjxCdXR0ZXJmbHk6ICIsIFJhd1BvaW50ZXIo
b2JqZWN0LT5idXR0ZXJmbHkoKSksICI7IHB1YmxpYyBsZW5ndGg6ICIsIG9iamVjdC0+Z2V0QXJy
YXlMZW5ndGgoKSwgIjsgdmVjdG9yIGxlbmd0aDogIiwgb2JqZWN0LT5nZXRWZWN0b3JMZW5ndGgo
KSwgIj4iKSkpOworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTm9udHJpdmlhbFN0
cmluZyh2bSwgIjxub3Qgb2JqZWN0PiJfcykpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNOb250cml2aWFsU3RyaW5nKHZtLCB0b1N0cmluZygiPEJ1dHRlcmZseTogIiwgUmF3UG9pbnRl
cihvYmplY3QtPmJ1dHRlcmZseSgpKSwgIjsgcHVibGljIGxlbmd0aDogIiwgb2JqZWN0LT5nZXRB
cnJheUxlbmd0aCgpLCAiOyB2ZWN0b3IgbGVuZ3RoOiAiLCBvYmplY3QtPmdldFZlY3Rvckxlbmd0
aCgpLCAiPiIpKSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25T
bGVlcFNlY29uZHMoRXhlY1N0YXRlKiBleGVjKQpAQCAtMTQyMCw3ICsxNDIxLDcgQEAgcHVibGlj
OgogcHJpdmF0ZToKICAgICB2b2lkIGFkZFByb3BlcnR5KFZNJiB2bSwgY29uc3QgY2hhciogbmFt
ZSwgSlNWYWx1ZSB2YWx1ZSkKICAgICB7Ci0gICAgICAgIElkZW50aWZpZXIgaWRlbnRpZmllciA9
IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCBuYW1lKTsKKyAgICAgICAgSWRlbnRpZmllciBp
ZGVudGlmaWVyID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgbmFtZSk7CiAgICAgICAgIHB1
dERpcmVjdCh2bSwgaWRlbnRpZmllciwgdmFsdWUpOwogICAgIH0KIH07CkBAIC0xNDgwLDggKzE0
ODEsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUnVuCiAgICAgICAg
IGFycmF5LT5wdXREaXJlY3RJbmRleChnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwgaSAtIDEs
IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KGkpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgfQotICAgIGdsb2JhbE9iamVjdC0+cHV0
RGlyZWN0KAotICAgICAgICB2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhnbG9iYWxPYmplY3Qt
Pmdsb2JhbEV4ZWMoKSwgImFyZ3VtZW50cyIpLCBhcnJheSk7CisgICAgZ2xvYmFsT2JqZWN0LT5w
dXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJhcmd1bWVudHMiKSwgYXJy
YXkpOwogCiAgICAgTmFrZWRQdHI8RXhjZXB0aW9uPiBleGNlcHRpb247CiAgICAgU3RvcFdhdGNo
IHN0b3BXYXRjaDsKQEAgLTE1MTMsOCArMTUxMyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZnVuY3Rpb25SdW4KICAgICAgICAgYXJyYXktPnB1dERpcmVjdEluZGV4KGdsb2JhbE9i
amVjdC0+Z2xvYmFsRXhlYygpLCBpIC0gMSwgZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoaSkpOwog
ICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAg
ICB9Ci0gICAgZ2xvYmFsT2JqZWN0LT5wdXREaXJlY3QoCi0gICAgICAgIHZtLCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCAiYXJndW1lbnRzIiksIGFy
cmF5KTsKKyAgICBnbG9iYWxPYmplY3QtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZyh2bSwgImFyZ3VtZW50cyIpLCBhcnJheSk7CiAKICAgICBOYWtlZFB0cjxFeGNlcHRpb24+
IGV4Y2VwdGlvbjsKICAgICBldmFsdWF0ZShnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwganNj
U291cmNlKHNvdXJjZSwgZXhlYy0+Y2FsbGVyU291cmNlT3JpZ2luKCkpLCBKU1ZhbHVlKCksIGV4
Y2VwdGlvbik7CkBAIC0xNTg1LDcgKzE1ODQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGZ1bmN0aW9uUmVhCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgc2NvcGUs
ICJDb3VsZCBub3Qgb3BlbiBmaWxlLiIpOwogCiAgICAgaWYgKCFpc0JpbmFyeSkKLSAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyhleGVjLCBTdHJpbmc6OmZyb21VVEY4V2l0
aExhdGluMUZhbGxiYWNrKGNvbnRlbnQtPmRhdGEoKSwgY29udGVudC0+bGVuZ3RoKCkpKSk7Cisg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcodm0sIFN0cmluZzo6ZnJvbVVU
RjhXaXRoTGF0aW4xRmFsbGJhY2soY29udGVudC0+ZGF0YSgpLCBjb250ZW50LT5sZW5ndGgoKSkp
KTsKIAogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVj
dCgpLT50eXBlZEFycmF5U3RydWN0dXJlKFR5cGVVaW50OCk7CiAgICAgSlNPYmplY3QqIHJlc3Vs
dCA9IEpTVWludDhBcnJheTo6Y3JlYXRlKHZtLCBzdHJ1Y3R1cmUsIFdURk1vdmUoY29udGVudCkp
OwpAQCAtMTY3MSw3ICsxNjcwLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5j
dGlvbkNhbAogICAgIFNvdXJjZU9yaWdpbiBzb3VyY2VPcmlnaW4gPSBzdGF0ZS0+Y2FsbGVyU291
cmNlT3JpZ2luKCk7CiAgICAgaWYgKHNvdXJjZU9yaWdpbi5pc051bGwoKSkKICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc051bGwoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1N0cmluZyhzdGF0ZSwgc291cmNlT3JpZ2luLnN0cmluZygpKSk7CisgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1N0cmluZyhzdGF0ZS0+dm0oKSwgc291cmNlT3JpZ2luLnN0cmluZygp
KSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25SZWFkbGluZShF
eGVjU3RhdGUqIGV4ZWMpCkBAIC0xNjg1LDcgKzE2ODQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGZ1bmN0aW9uUmVhCiAgICAgICAgIGxpbmUuYXBwZW5kKGMpOwogICAgIH0KICAg
ICBsaW5lLmFwcGVuZCgnXDAnKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5n
KGV4ZWMsIGxpbmUuZGF0YSgpKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmlu
ZyhleGVjLT52bSgpLCBsaW5lLmRhdGEoKSkpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGZ1bmN0aW9uUHJlY2lzZVRpbWUoRXhlY1N0YXRlKikKQEAgLTE4NDMsNyArMTg0Miw3
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Eb2wKIHsKICAgICBWTSYg
dm0gPSBleGVjLT52bSgpOwogICAgIEdsb2JhbE9iamVjdCogcmVzdWx0ID0gR2xvYmFsT2JqZWN0
OjpjcmVhdGUodm0sIEdsb2JhbE9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKHZtLCBqc051bGwoKSks
IFZlY3RvcjxTdHJpbmc+KCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0LT5n
ZXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgIiQiKSkpOworICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0LT5nZXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZy
b21TdHJpbmcodm0sICIkIikpKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBm
dW5jdGlvbkRvbGxhckRldGFjaEFycmF5QnVmZmVyKEV4ZWNTdGF0ZSogZXhlYykKQEAgLTE4NjAs
NyArMTg1OSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Eb2wKICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICAKICAg
ICBHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGpzRHluYW1pY0Nhc3Q8R2xvYmFsT2JqZWN0
Kj4odm0sCi0gICAgICAgIGV4ZWMtPnRoaXNWYWx1ZSgpLmdldChleGVjLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKGV4ZWMsICJnbG9iYWwiKSkpOworICAgICAgICBleGVjLT50aGlzVmFsdWUoKS5n
ZXQoZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImdsb2JhbCIpKSk7CiAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgaWYgKCFnbG9i
YWxPYmplY3QpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24o
ZXhlYywgc2NvcGUsIGNyZWF0ZUVycm9yKGV4ZWMsICJFeHBlY3RlZCBnbG9iYWwgdG8gcG9pbnQg
dG8gYSBnbG9iYWwgb2JqZWN0Il9zKSkpOwpAQCAtMjAwNiw3ICsyMDA1LDcgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkRvbAogICAgIGlmICghc3RyaW5nKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKTsKICAgICAKLSAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKCZ2bSwgc3RyaW5nKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1N0cmluZyh2bSwgc3RyaW5nKSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZnVuY3Rpb25Eb2xsYXJBZ2VudExlYXZpbmcoRXhlY1N0YXRlKikKQEAgLTIwMzEs
NyArMjAzMCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25XYWkKICAg
ICBpZiAoIXN0cmluZykKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bGwoKSk7
CiAgICAgCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZygmdm0sIHN0cmluZykp
OworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcodm0sIHN0cmluZykpOwogfQog
CiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uSGVhcENhcGFjaXR5KEV4ZWNT
dGF0ZSogZXhlYykKQEAgLTIwOTcsNyArMjA5Niw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZnVuY3Rpb25KU0MKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIEpTT2JqZWN0
KiBvcHRpb25zT2JqZWN0ID0gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYyk7CiAjZGVmaW5lIEZP
Ul9FQUNIX09QVElPTih0eXBlXywgbmFtZV8sIGRlZmF1bHRWYWx1ZV8sIGF2YWlsYWJpbGl0eV8s
IGRlc2NyaXB0aW9uXykgXAotICAgIGFkZE9wdGlvbih2bSwgb3B0aW9uc09iamVjdCwgSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZyhleGVjLCAjbmFtZV8pLCBPcHRpb25zOjpuYW1lXygpKTsKKyAgICBh
ZGRPcHRpb24odm0sIG9wdGlvbnNPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICNu
YW1lXyksIE9wdGlvbnM6Om5hbWVfKCkpOwogICAgIEpTQ19PUFRJT05TKEZPUl9FQUNIX09QVElP
TikKICN1bmRlZiBGT1JfRUFDSF9PUFRJT04KICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKG9w
dGlvbnNPYmplY3QpOwpAQCAtMjI1NSw3ICsyMjU0LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBmdW5jdGlvbkNoZQogICAgIHN0b3BXYXRjaC5zdG9wKCk7CiAKICAgICBpZiAoIXZh
bGlkU3ludGF4KQotICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29wZSwganNOb250cml2
aWFsU3RyaW5nKGV4ZWMsIHRvU3RyaW5nKCJTeW50YXhFcnJvcjogIiwgZXJyb3IubWVzc2FnZSgp
LCAiOiIsIGVycm9yLmxpbmUoKSkpKTsKKyAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgc2Nv
cGUsIGpzTm9udHJpdmlhbFN0cmluZyh2bSwgdG9TdHJpbmcoIlN5bnRheEVycm9yOiAiLCBlcnJv
ci5tZXNzYWdlKCksICI6IiwgZXJyb3IubGluZSgpKSkpOwogICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNOdW1iZXIoc3RvcFdhdGNoLmdldEVsYXBzZWRNUygpKSk7CiB9CiAKQEAgLTIyOTgs
NyArMjI5Nyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25HZW4KICAg
ICAgICAganNvblN0cmluZyA9IHNuYXBzaG90QnVpbGRlci5qc29uKCk7CiAgICAgfQogICAgIHNj
b3BlLnJlbGVhc2VBc3NlcnROb0V4Y2VwdGlvbigpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNTdHJpbmcoJnZtLCBqc29uU3RyaW5nKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1N0cmluZyh2bSwganNvblN0cmluZykpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGZ1bmN0aW9uUmVzZXRTdXBlclNhbXBsZXJTdGF0ZShFeGVjU3RhdGUqKQpAQCAtMjM3
OCw5ICsyMzc3LDkgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuYwog
CiAgICAgaWYgKEpTT2JqZWN0KiBvYmplY3QgPSBleGVjLT5hcmd1bWVudCgwKS5nZXRPYmplY3Qo
KSkgewogICAgICAgICBpZiAoYXV0byogbWVtb3J5ID0ganNEeW5hbWljQ2FzdDxKU1dlYkFzc2Vt
Ymx5TWVtb3J5Kj4odm0sIG9iamVjdCkpCi0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzU3RyaW5nKCZ2bSwgbWFrZVN0cmluZyhtZW1vcnktPm1lbW9yeSgpLm1vZGUoKSkpKTsK
KyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcodm0sIG1ha2VTdHJp
bmcobWVtb3J5LT5tZW1vcnkoKS5tb2RlKCkpKSk7CiAgICAgICAgIGlmIChhdXRvKiBpbnN0YW5j
ZSA9IGpzRHluYW1pY0Nhc3Q8SlNXZWJBc3NlbWJseUluc3RhbmNlKj4odm0sIG9iamVjdCkpCi0g
ICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKCZ2bSwgbWFrZVN0cmlu
ZyhpbnN0YW5jZS0+bWVtb3J5TW9kZSgpKSkpOworICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1N0cmluZyh2bSwgbWFrZVN0cmluZyhpbnN0YW5jZS0+bWVtb3J5TW9kZSgpKSkp
OwogICAgIH0KIAogICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlLCAiV2Vi
QXNzZW1ibHlNZW1vcnlNb2RlIGV4cGVjdHMgZWl0aGVyIGEgV2ViQXNzZW1ibHkuTWVtb3J5IG9y
IFdlYkFzc2VtYmx5Lkluc3RhbmNlIl9zKTsKQEAgLTI1MTEsMTMgKzI1MTAsMTMgQEAgc3RhdGlj
IHZvaWQgZHVtcEV4Y2VwdGlvbihHbG9iYWxPYmplY3QqIAogICAgIGVsc2UKICAgICAgICAgcHJp
bnRmKCJFeGNlcHRpb246IDxvdXQgb2YgbWVtb3J5IHdoaWxlIGV4dHJhY3RpbmcgZXhjZXB0aW9u
IHN0cmluZz5cbiIpOwogCi0gICAgSWRlbnRpZmllciBuYW1lSUQgPSBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCAibmFtZSIpOworICAgIElkZW50aWZp
ZXIgbmFtZUlEID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIm5hbWUiKTsKICAgICBDSEVD
S19FWENFUFRJT04oKTsKLSAgICBJZGVudGlmaWVyIGZpbGVOYW1lSUQgPSBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCAic291cmNlVVJMIik7CisgICAg
SWRlbnRpZmllciBmaWxlTmFtZUlEID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInNvdXJj
ZVVSTCIpOwogICAgIENIRUNLX0VYQ0VQVElPTigpOwotICAgIElkZW50aWZpZXIgbGluZU51bWJl
cklEID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwg
ImxpbmUiKTsKKyAgICBJZGVudGlmaWVyIGxpbmVOdW1iZXJJRCA9IElkZW50aWZpZXI6OmZyb21T
dHJpbmcodm0sICJsaW5lIik7CiAgICAgQ0hFQ0tfRVhDRVBUSU9OKCk7Ci0gICAgSWRlbnRpZmll
ciBzdGFja0lEID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhnbG9iYWxPYmplY3QtPmdsb2JhbEV4
ZWMoKSwgInN0YWNrIik7CisgICAgSWRlbnRpZmllciBzdGFja0lEID0gSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyh2bSwgInN0YWNrIik7CiAgICAgQ0hFQ0tfRVhDRVBUSU9OKCk7CiAKICAgICBKU1Zh
bHVlIG5hbWVWYWx1ZSA9IGV4Y2VwdGlvbi5nZXQoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCks
IG5hbWVJRCk7CkBAIC0yNTU3LDcgKzI1NTYsNyBAQCBzdGF0aWMgYm9vbCBjaGVja1VuY2F1Z2h0
RXhjZXB0aW9uKFZNJiB2CiAgICAgfQogCiAgICAgRXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2Jq
ZWN0LT5nbG9iYWxFeGVjKCk7Ci0gICAgSlNWYWx1ZSBleGNlcHRpb25DbGFzcyA9IGdsb2JhbE9i
amVjdC0+Z2V0KGV4ZWMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgZXhwZWN0ZWRFeGNl
cHRpb25OYW1lKSk7CisgICAgSlNWYWx1ZSBleGNlcHRpb25DbGFzcyA9IGdsb2JhbE9iamVjdC0+
Z2V0KGV4ZWMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIGV4cGVjdGVkRXhjZXB0aW9uTmFt
ZSkpOwogICAgIGlmICghZXhjZXB0aW9uQ2xhc3MuaXNPYmplY3QoKSB8fCBzY29wZS5leGNlcHRp
b24oKSkgewogICAgICAgICBwcmludGYoIkV4cGVjdGVkIHVuY2F1Z2h0IGV4Y2VwdGlvbiB3aXRo
IG5hbWUgJyVzJyBidXQgZ2l2ZW4gZXhjZXB0aW9uIGNsYXNzIGlzIG5vdCBkZWZpbmVkXG4iLCBl
eHBlY3RlZEV4Y2VwdGlvbk5hbWUudXRmOCgpLmRhdGEoKSk7CiAgICAgICAgIHJldHVybiBmYWxz
ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvQVBJQ2FzdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvQVBJQ2FzdC5oCShyZXZpc2lvbiAyNDkxMjgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0FQSUNhc3QuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDE5IEFwcGxlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTExNCw3ICsxMTQsNyBAQCBpbmxpbmUgSlNDOjpKU09iamVjdCogdG9KUyhKU09iamVjdFJlZiBv
CiB7CiAgICAgSlNDOjpKU09iamVjdCogb2JqZWN0ID0gdW5jaGVja2VkVG9KUyhvKTsKICAgICBp
ZiAob2JqZWN0KQotICAgICAgICBSRUxFQVNFX0FTU0VSVChvYmplY3QtPm1ldGhvZFRhYmxlKCpv
YmplY3QtPnZtKCkpKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQob2JqZWN0LT5tZXRob2RUYWJs
ZShvYmplY3QtPnZtKCkpKTsKICAgICByZXR1cm4gb2JqZWN0OwogfQogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJR2xvYmFsT2JqZWN0Lm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElHbG9iYWxPYmplY3QubW0JKHJldmlzaW9uIDI0
OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElHbG9iYWxPYmplY3QubW0J
KHdvcmtpbmcgY29weSkKQEAgLTExNiw3ICsxMTYsNyBAQCBJZGVudGlmaWVyIEpTQVBJR2xvYmFs
T2JqZWN0Ojptb2R1bGVMb2FkCiAKICAgICBhdXRvIHJlc3VsdCA9IGNvbXB1dGVWYWxpZEltcG9y
dFNwZWNpZmllcihiYXNlLCBuYW1lKTsKICAgICBpZiAocmVzdWx0KQotICAgICAgICByZXR1cm4g
SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIHJlc3VsdC52YWx1ZSgpKTsKKyAgICAgICAgcmV0
dXJuIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlc3VsdC52YWx1ZSgpKTsKIAogICAgIHRo
cm93Vk1FcnJvcihleGVjLCBzY29wZSwgY3JlYXRlRXJyb3IoZXhlYywgcmVzdWx0LmVycm9yKCkp
KTsKICAgICByZXR1cm4geyB9OwpAQCAtMTM0LDcgKzEzNCw3IEBAIEpTSW50ZXJuYWxQcm9taXNl
KiBKU0FQSUdsb2JhbE9iamVjdDo6bW8KICAgICB9OwogCiAgICAgYXV0byBpbXBvcnQgPSBbJl0g
KFVSTCYgdXJsKSB7Ci0gICAgICAgIGF1dG8gcmVzdWx0ID0gaW1wb3J0TW9kdWxlKGV4ZWMsIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCB1cmwpLCBqc1VuZGVmaW5lZCgpLCBqc1VuZGVmaW5l
ZCgpKTsKKyAgICAgICAgYXV0byByZXN1bHQgPSBpbXBvcnRNb2R1bGUoZXhlYywgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZyh2bSwgdXJsKSwganNVbmRlZmluZWQoKSwganNVbmRlZmluZWQoKSk7CiAg
ICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1
cm4gcmVqZWN0KHNjb3BlLmV4Y2VwdGlvbigpKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKQEAg
LTIwMiw3ICsyMDIsNyBAQCBKU0ludGVybmFsUHJvbWlzZSogSlNBUElHbG9iYWxPYmplY3Q6Om1v
CiAKICAgICAgICAgTlNVUkwgKnNvdXJjZVVSTCA9IFtqc1NjcmlwdCBzb3VyY2VVUkxdOwogICAg
ICAgICBTdHJpbmcgb2xkTW9kdWxlS2V5IHsgW3NvdXJjZVVSTCBhYnNvbHV0ZVN0cmluZ10gfTsK
LSAgICAgICAgaWYgKFVOTElLRUxZKElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCBvbGRNb2R1
bGVLZXkpICE9IG1vZHVsZUtleSkpCisgICAgICAgIGlmIChVTkxJS0VMWShJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCBvbGRNb2R1bGVLZXkpICE9IG1vZHVsZUtleSkpCiAgICAgICAgICAgICBy
ZXR1cm4gcmVqZWN0UHJvbWlzZShtYWtlU3RyaW5nKCJUaGUgc2FtZSBKU1NjcmlwdCB3YXMgcHJv
dmlkZWQgZm9yIHR3byBkaWZmZXJlbnQgaWRlbnRpZmllcnMsIHByZXZpb3VzbHk6ICIsIG9sZE1v
ZHVsZUtleSwgIiBhbmQgbm93OiAiLCBtb2R1bGVLZXkuc3RyaW5nKCkpKTsKIAogICAgICAgICBh
cmdzLmFwcGVuZChzb3VyY2UpOwpAQCAtMjM0LDcgKzIzNCw3IEBAIEpTT2JqZWN0KiBKU0FQSUds
b2JhbE9iamVjdDo6bW9kdWxlTG9hZGUKICAgICBKU09iamVjdCogbWV0YVByb3BlcnRpZXMgPSBj
b25zdHJ1Y3RFbXB0eU9iamVjdChleGVjLCBnbG9iYWxPYmplY3QtPm51bGxQcm90b3R5cGVPYmpl
Y3RTdHJ1Y3R1cmUoKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7
CiAKLSAgICBtZXRhUHJvcGVydGllcy0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKCZ2bSwgImZpbGVuYW1lIiksIGtleSk7CisgICAgbWV0YVByb3BlcnRpZXMtPnB1dERpcmVj
dCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImZpbGVuYW1lIiksIGtleSk7CiAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAKICAgICByZXR1cm4gbWV0YVBy
b3BlcnRpZXM7CkBAIC0yNzQsNyArMjc0LDcgQEAgSlNWYWx1ZSBKU0FQSUdsb2JhbE9iamVjdDo6
bG9hZEFuZEV2YWx1YQogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbEV4ZWMoKTsKICAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAgICBJZGVudGlmaWVyIGtl
eSA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgU3RyaW5nIHsgW1tzY3JpcHQgc291cmNl
VVJMXSBhYnNvbHV0ZVN0cmluZ10gfSk7CisgICAgSWRlbnRpZmllciBrZXkgPSBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKHZtLCBTdHJpbmcgeyBbW3NjcmlwdCBzb3VyY2VVUkxdIGFic29sdXRlU3Ry
aW5nXSB9KTsKICAgICBKU0ludGVybmFsUHJvbWlzZSogcHJvbWlzZSA9IGltcG9ydE1vZHVsZShl
eGVjLCBrZXksIGpzVW5kZWZpbmVkKCksIGpzVW5kZWZpbmVkKCkpOwogICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgYXV0byByZXN1bHQgPSBKU1Byb21pc2VEZWZlcnJl
ZDo6dHJ5Q3JlYXRlKGV4ZWMsIHRoaXMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9KU0NhbGxiYWNrQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNDYWxsYmFja0NvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjQ5MTI4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrQ29uc3RydWN0b3IuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwg
MjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDYtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ4LDcgKzQ4LDcgQEAgSlNDYWxsYmFja0NvbnN0cnVj
dG9yOjpKU0NhbGxiYWNrQ29uc3RydQogdm9pZCBKU0NhbGxiYWNrQ29uc3RydWN0b3I6OmZpbmlz
aENyZWF0aW9uKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQ2xhc3NSZWYganNDbGFz
cykKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxPYmplY3QtPnZtKCkpOwotICAg
IEFTU0VSVChpbmhlcml0cygqdm0oKSwgaW5mbygpKSk7CisgICAgQVNTRVJUKGluaGVyaXRzKHZt
KCksIGluZm8oKSkpOwogICAgIGlmIChtX2NsYXNzKQogICAgICAgICBKU0NsYXNzUmV0YWluKGpz
Q2xhc3MpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2Jq
ZWN0RnVuY3Rpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9K
U0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmgJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdEZ1bmN0aW9ucy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwOCwgMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYt
MjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDcgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTQz
LDcgKzQzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiB0ZW1wbGF0ZSA8Y2xhc3MgUGFyZW50PgogaW5s
aW5lIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50PiogSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+Ojph
c0NhbGxiYWNrT2JqZWN0KEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgQVNTRVJUKGFzT2JqZWN0KHZh
bHVlKS0+aW5oZXJpdHMoKnZhbHVlLmdldE9iamVjdCgpLT52bSgpLCBpbmZvKCkpKTsKKyAgICBB
U1NFUlQoYXNPYmplY3QodmFsdWUpLT5pbmhlcml0cyh2YWx1ZS5nZXRPYmplY3QoKS0+dm0oKSwg
aW5mbygpKSk7CiAgICAgcmV0dXJuIGpzQ2FzdDxKU0NhbGxiYWNrT2JqZWN0Kj4oYXNPYmplY3Qo
dmFsdWUpKTsKIH0KIApAQCAtNTEsNyArNTEsNyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgUGFyZW50Pgog
aW5saW5lIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50PiogSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+
Ojphc0NhbGxiYWNrT2JqZWN0KEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICBK
U1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Ci0gICAgQVNTRVJU
KGFzT2JqZWN0KHZhbHVlKS0+aW5oZXJpdHMoKnZhbHVlLmdldE9iamVjdCgpLT52bSgpLCBpbmZv
KCkpKTsKKyAgICBBU1NFUlQoYXNPYmplY3QodmFsdWUpLT5pbmhlcml0cyh2YWx1ZS5nZXRPYmpl
Y3QoKS0+dm0oKSwgaW5mbygpKSk7CiAgICAgcmV0dXJuIGpzQ2FzdDxKU0NhbGxiYWNrT2JqZWN0
Kj4oYXNPYmplY3QodmFsdWUpKTsKIH0KIApAQCAtNzQsMTcgKzc0LDE3IEBAIEpTQ2FsbGJhY2tP
YmplY3Q8UGFyZW50Pjo6SlNDYWxsYmFja09iamUKIHRlbXBsYXRlIDxjbGFzcyBQYXJlbnQ+CiBK
U0NhbGxiYWNrT2JqZWN0PFBhcmVudD46On5KU0NhbGxiYWNrT2JqZWN0KCkKIHsKLSAgICBWTSog
dm0gPSB0aGlzLT5IZWFwQ2VsbDo6dm0oKTsKLSAgICB2bS0+Y3VycmVudGx5RGVzdHJ1Y3RpbmdD
YWxsYmFja09iamVjdCA9IHRoaXM7CisgICAgVk0mIHZtID0gdGhpcy0+SGVhcENlbGw6OnZtKCk7
CisgICAgdm0uY3VycmVudGx5RGVzdHJ1Y3RpbmdDYWxsYmFja09iamVjdCA9IHRoaXM7CiAgICAg
QVNTRVJUKG1fY2xhc3NJbmZvKTsKLSAgICB2bS0+Y3VycmVudGx5RGVzdHJ1Y3RpbmdDYWxsYmFj
a09iamVjdENsYXNzSW5mbyA9IG1fY2xhc3NJbmZvOworICAgIHZtLmN1cnJlbnRseURlc3RydWN0
aW5nQ2FsbGJhY2tPYmplY3RDbGFzc0luZm8gPSBtX2NsYXNzSW5mbzsKICAgICBKU09iamVjdFJl
ZiB0aGlzUmVmID0gdG9SZWYoc3RhdGljX2Nhc3Q8SlNPYmplY3QqPih0aGlzKSk7CiAgICAgZm9y
IChKU0NsYXNzUmVmIGpzQ2xhc3MgPSBjbGFzc1JlZigpOyBqc0NsYXNzOyBqc0NsYXNzID0ganND
bGFzcy0+cGFyZW50Q2xhc3MpIHsKICAgICAgICAgaWYgKEpTT2JqZWN0RmluYWxpemVDYWxsYmFj
ayBmaW5hbGl6ZSA9IGpzQ2xhc3MtPmZpbmFsaXplKQogICAgICAgICAgICAgZmluYWxpemUodGhp
c1JlZik7CiAgICAgfQotICAgIHZtLT5jdXJyZW50bHlEZXN0cnVjdGluZ0NhbGxiYWNrT2JqZWN0
ID0gbnVsbHB0cjsKLSAgICB2bS0+Y3VycmVudGx5RGVzdHJ1Y3RpbmdDYWxsYmFja09iamVjdENs
YXNzSW5mbyA9IG51bGxwdHI7CisgICAgdm0uY3VycmVudGx5RGVzdHJ1Y3RpbmdDYWxsYmFja09i
amVjdCA9IG51bGxwdHI7CisgICAgdm0uY3VycmVudGx5RGVzdHJ1Y3RpbmdDYWxsYmFja09iamVj
dENsYXNzSW5mbyA9IG51bGxwdHI7CiB9CiAgICAgCiB0ZW1wbGF0ZSA8Y2xhc3MgUGFyZW50PgpA
QCAtMjE1LDcgKzIxNSw4IEBAIGJvb2wgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+OjpnZXRPd25Q
cm8KIHRlbXBsYXRlIDxjbGFzcyBQYXJlbnQ+CiBib29sIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50
Pjo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUq
IGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQogewotICAg
IHJldHVybiBvYmplY3QtPm1ldGhvZFRhYmxlKGV4ZWMtPnZtKCkpLT5nZXRPd25Qcm9wZXJ0eVNs
b3Qob2JqZWN0LCBleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIHByb3BlcnR5TmFtZSksIHNs
b3QpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgcmV0dXJuIG9iamVjdC0+bWV0aG9k
VGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0eVNsb3Qob2JqZWN0LCBleGVjLCBJZGVudGlmaWVyOjpm
cm9tKHZtLCBwcm9wZXJ0eU5hbWUpLCBzbG90KTsKIH0KIAogdGVtcGxhdGUgPGNsYXNzIFBhcmVu
dD4KQEAgLTMyMCw3ICszMjEsNyBAQCBib29sIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6cHV0
QnlJbmRlCiAgICAgSlNPYmplY3RSZWYgdGhpc1JlZiA9IHRvUmVmKHRoaXNPYmplY3QpOwogICAg
IFJlZlB0cjxPcGFxdWVKU1N0cmluZz4gcHJvcGVydHlOYW1lUmVmOwogICAgIEpTVmFsdWVSZWYg
dmFsdWVSZWYgPSB0b1JlZihleGVjLCB2YWx1ZSk7Ci0gICAgSWRlbnRpZmllciBwcm9wZXJ0eU5h
bWUgPSBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIHByb3BlcnR5SW5kZXgpOworICAgIElkZW50aWZp
ZXIgcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbSh2bSwgcHJvcGVydHlJbmRleCk7CiAK
ICAgICBmb3IgKEpTQ2xhc3NSZWYganNDbGFzcyA9IHRoaXNPYmplY3QtPmNsYXNzUmVmKCk7IGpz
Q2xhc3M7IGpzQ2xhc3MgPSBqc0NsYXNzLT5wYXJlbnRDbGFzcykgewogICAgICAgICBpZiAoSlNP
YmplY3RTZXRQcm9wZXJ0eUNhbGxiYWNrIHNldFByb3BlcnR5ID0ganNDbGFzcy0+c2V0UHJvcGVy
dHkpIHsKQEAgLTQyMSw4ICs0MjIsOSBAQCBib29sIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6
ZGVsZXRlUHJvCiB0ZW1wbGF0ZSA8Y2xhc3MgUGFyZW50PgogYm9vbCBKU0NhbGxiYWNrT2JqZWN0
PFBhcmVudD46OmRlbGV0ZVByb3BlcnR5QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSog
ZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CiAgICAgSlNDYWxsYmFja09iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0NhbGxiYWNrT2Jq
ZWN0Kj4oY2VsbCk7Ci0gICAgcmV0dXJuIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKGV4ZWMtPnZt
KCkpLT5kZWxldGVQcm9wZXJ0eSh0aGlzT2JqZWN0LCBleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4
ZWMsIHByb3BlcnR5TmFtZSkpOworICAgIHJldHVybiB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSh2
bSktPmRlbGV0ZVByb3BlcnR5KHRoaXNPYmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20odm0s
IHByb3BlcnR5TmFtZSkpOwogfQogCiB0ZW1wbGF0ZSA8Y2xhc3MgUGFyZW50PgpAQCAtNTQ3LDYg
KzU0OSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50PjoKIHRlbXBs
YXRlIDxjbGFzcyBQYXJlbnQ+CiB2b2lkIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6Z2V0T3du
Tm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywg
UHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQog
eworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgSlNDYWxsYmFja09iamVjdCogdGhpc09i
amVjdCA9IGpzQ2FzdDxKU0NhbGxiYWNrT2JqZWN0Kj4ob2JqZWN0KTsKICAgICBKU0NvbnRleHRS
ZWYgZXhlY1JlZiA9IHRvUmVmKGV4ZWMpOwogICAgIEpTT2JqZWN0UmVmIHRoaXNSZWYgPSB0b1Jl
Zih0aGlzT2JqZWN0KTsKQEAgLTU2NSw3ICs1NjgsNyBAQCB2b2lkIEpTQ2FsbGJhY2tPYmplY3Q8
UGFyZW50Pjo6Z2V0T3duTm9uCiAgICAgICAgICAgICAgICAgU3RhdGljVmFsdWVFbnRyeSogZW50
cnkgPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgICAgICAgICAgaWYgKGVudHJ5LT5nZXRQcm9w
ZXJ0eSAmJiAoIShlbnRyeS0+YXR0cmlidXRlcyAmIGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udEVu
dW0pIHx8IG1vZGUuaW5jbHVkZURvbnRFbnVtUHJvcGVydGllcygpKSkgewogICAgICAgICAgICAg
ICAgICAgICBBU1NFUlQoIW5hbWUtPmlzU3ltYm9sKCkpOwotICAgICAgICAgICAgICAgICAgICBw
cm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsIFN0cmluZyhuYW1l
KSkpOworICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCBTdHJpbmcobmFtZSkpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KQEAgLTU3OCw3ICs1ODEsNyBAQCB2b2lkIEpTQ2FsbGJhY2tPYmpl
Y3Q8UGFyZW50Pjo6Z2V0T3duTm9uCiAgICAgICAgICAgICAgICAgU3RhdGljRnVuY3Rpb25FbnRy
eSogZW50cnkgPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgICAgICAgICAgaWYgKCEoZW50cnkt
PmF0dHJpYnV0ZXMgJiBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnRFbnVtKSB8fCBtb2RlLmluY2x1
ZGVEb250RW51bVByb3BlcnRpZXMoKSkgewogICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIW5h
bWUtPmlzU3ltYm9sKCkpOwotICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsIFN0cmluZyhuYW1lKSkpOworICAgICAgICAgICAg
ICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBTdHJp
bmcobmFtZSkpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0Lm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0Lm1tCShyZXZpc2lvbiAyNDkx
MjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dC5tbQkod29ya2luZyBj
b3B5KQpAQCAtMTU4LDcgKzE1OCw3IEBAIC0gKEpTVmFsdWUgKilkZXBlbmRlbmN5SWRlbnRpZmll
cnNGb3JNb2QKICAgICB9CiAKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2
bSk7Ci0gICAgSlNDOjpKU0FycmF5KiByZXN1bHQgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCktPm1vZHVsZUxvYWRlcigpLT5kZXBlbmRlbmN5S2V5c0lmRXZhbHVhdGVkKGV4ZWMsIEpTQzo6
anNTdHJpbmcoJnZtLCBbW3NjcmlwdCBzb3VyY2VVUkxdIGFic29sdXRlU3RyaW5nXSkpOworICAg
IEpTQzo6SlNBcnJheSogcmVzdWx0ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5tb2R1
bGVMb2FkZXIoKS0+ZGVwZW5kZW5jeUtleXNJZkV2YWx1YXRlZChleGVjLCBKU0M6OmpzU3RyaW5n
KHZtLCBbW3NjcmlwdCBzb3VyY2VVUkxdIGFic29sdXRlU3RyaW5nXSkpOwogICAgIGlmIChzY29w
ZS5leGNlcHRpb24oKSkgewogICAgICAgICBKU1ZhbHVlUmVmIGV4Y2VwdGlvblZhbHVlID0gdG9S
ZWYoZXhlYywgc2NvcGUuZXhjZXB0aW9uKCktPnZhbHVlKCkpOwogICAgICAgICBzY29wZS5jbGVh
ckV4Y2VwdGlvbigpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU09iamVjdFJl
Zi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU09iamVjdFJl
Zi5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNP
YmplY3RSZWYuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDcsMTIgKzE0NywxMiBAQCBKU09iamVj
dFJlZiBKU09iamVjdE1ha2VGdW5jdGlvbihKU0NvbnRlCiAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfQ0FUQ0hfU0NPUEUodm0pOwogCiAgICAgc3RhcnRpbmdMaW5lTnVtYmVyID0gc3RkOjptYXgo
MSwgc3RhcnRpbmdMaW5lTnVtYmVyKTsKLSAgICBJZGVudGlmaWVyIG5hbWVJRCA9IG5hbWUgPyBu
YW1lLT5pZGVudGlmaWVyKCZ2bSkgOiBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJhbm9u
eW1vdXMiKTsKKyAgICBJZGVudGlmaWVyIG5hbWVJRCA9IG5hbWUgPyBuYW1lLT5pZGVudGlmaWVy
KCZ2bSkgOiBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiYW5vbnltb3VzIik7CiAgICAgCiAg
ICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJnczsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgcGFyYW1ldGVyQ291bnQ7IGkrKykKLSAgICAgICAgYXJncy5hcHBlbmQoanNTdHJpbmcoZXhl
YywgcGFyYW1ldGVyTmFtZXNbaV0tPnN0cmluZygpKSk7Ci0gICAgYXJncy5hcHBlbmQoanNTdHJp
bmcoZXhlYywgYm9keS0+c3RyaW5nKCkpKTsKKyAgICAgICAgYXJncy5hcHBlbmQoanNTdHJpbmco
dm0sIHBhcmFtZXRlck5hbWVzW2ldLT5zdHJpbmcoKSkpOworICAgIGFyZ3MuYXBwZW5kKGpzU3Ry
aW5nKHZtLCBib2R5LT5zdHJpbmcoKSkpOwogICAgIGlmIChVTkxJS0VMWShhcmdzLmhhc092ZXJm
bG93ZWQoKSkpIHsKICAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CiAgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjLCB0aHJvd1Njb3BlKTsK
QEAgLTU0Niw3ICs1NDYsNyBAQCBib29sIEpTT2JqZWN0RGVsZXRlUHJvcGVydHkoSlNDb250ZXh0
UmVmCiAvLyBkdXJpbmcgZGVzdHJ1Y3Rpb24uCiBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvKiBjbGFz
c0luZm9Qcml2YXRlKEpTT2JqZWN0KiBqc09iamVjdCkKIHsKLSAgICBWTSYgdm0gPSAqanNPYmpl
Y3QtPnZtKCk7CisgICAgVk0mIHZtID0ganNPYmplY3QtPnZtKCk7CiAgICAgCiAgICAgaWYgKHZt
LmN1cnJlbnRseURlc3RydWN0aW5nQ2FsbGJhY2tPYmplY3QgIT0ganNPYmplY3QpCiAgICAgICAg
IHJldHVybiBqc09iamVjdC0+Y2xhc3NJbmZvKHZtKTsKQEAgLTU1Nyw3ICs1NTcsNyBAQCBzdGF0
aWMgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm9Qcml2YXRlCiB2b2lkKiBKU09iamVjdEdldFBy
aXZhdGUoSlNPYmplY3RSZWYgb2JqZWN0KQogewogICAgIEpTT2JqZWN0KiBqc09iamVjdCA9IHVu
Y2hlY2tlZFRvSlMob2JqZWN0KTsKLSAgICBWTSYgdm0gPSAqanNPYmplY3QtPnZtKCk7CisgICAg
Vk0mIHZtID0ganNPYmplY3QtPnZtKCk7CiAKICAgICBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5m
byA9IGNsYXNzSW5mb1ByaXZhdGUoanNPYmplY3QpOwogICAgIApAQCAtNTgyLDcgKzU4Miw3IEBA
IHZvaWQqIEpTT2JqZWN0R2V0UHJpdmF0ZShKU09iamVjdFJlZiBvYmoKIGJvb2wgSlNPYmplY3RT
ZXRQcml2YXRlKEpTT2JqZWN0UmVmIG9iamVjdCwgdm9pZCogZGF0YSkKIHsKICAgICBKU09iamVj
dCoganNPYmplY3QgPSB1bmNoZWNrZWRUb0pTKG9iamVjdCk7Ci0gICAgVk0mIHZtID0gKmpzT2Jq
ZWN0LT52bSgpOworICAgIFZNJiB2bSA9IGpzT2JqZWN0LT52bSgpOwogCiAgICAgY29uc3QgQ2xh
c3NJbmZvKiBjbGFzc0luZm8gPSBjbGFzc0luZm9Qcml2YXRlKGpzT2JqZWN0KTsKICAgICAKQEAg
LTgxMCwxMiArODEwLDEyIEBAIEpTUHJvcGVydHlOYW1lQXJyYXlSZWYgSlNPYmplY3RDb3B5UHJv
cGUKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSB0b0pTKGN0eCk7CiAgICAgSlNMb2NrSG9sZGVyIGxv
Y2tlcihleGVjKTsKIAotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CiAKICAgICBKU09iamVjdCoganNPYmplY3QgPSB0b0pTKG9iamVjdCk7Ci0gICAg
SlNQcm9wZXJ0eU5hbWVBcnJheVJlZiBwcm9wZXJ0eU5hbWVzID0gbmV3IE9wYXF1ZUpTUHJvcGVy
dHlOYW1lQXJyYXkodm0pOworICAgIEpTUHJvcGVydHlOYW1lQXJyYXlSZWYgcHJvcGVydHlOYW1l
cyA9IG5ldyBPcGFxdWVKU1Byb3BlcnR5TmFtZUFycmF5KCZ2bSk7CiAgICAgUHJvcGVydHlOYW1l
QXJyYXkgYXJyYXkodm0sIFByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3MsIFByaXZhdGVTeW1ib2xN
b2RlOjpFeGNsdWRlKTsKLSAgICBqc09iamVjdC0+bWV0aG9kVGFibGUoKnZtKS0+Z2V0UHJvcGVy
dHlOYW1lcyhqc09iamVjdCwgZXhlYywgYXJyYXksIEVudW1lcmF0aW9uTW9kZSgpKTsKKyAgICBq
c09iamVjdC0+bWV0aG9kVGFibGUodm0pLT5nZXRQcm9wZXJ0eU5hbWVzKGpzT2JqZWN0LCBleGVj
LCBhcnJheSwgRW51bWVyYXRpb25Nb2RlKCkpOwogCiAgICAgc2l6ZV90IHNpemUgPSBhcnJheS5z
aXplKCk7CiAgICAgcHJvcGVydHlOYW1lcy0+YXJyYXkucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShz
aXplKTsKQEAgLTg1Miw5ICs4NTIsOSBAQCBKU1N0cmluZ1JlZiBKU1Byb3BlcnR5TmFtZUFycmF5
R2V0TmFtZUF0CiB2b2lkIEpTUHJvcGVydHlOYW1lQWNjdW11bGF0b3JBZGROYW1lKEpTUHJvcGVy
dHlOYW1lQWNjdW11bGF0b3JSZWYgYXJyYXksIEpTU3RyaW5nUmVmIHByb3BlcnR5TmFtZSkKIHsK
ICAgICBQcm9wZXJ0eU5hbWVBcnJheSogcHJvcGVydHlOYW1lcyA9IHRvSlMoYXJyYXkpOwotICAg
IFZNKiB2bSA9IHByb3BlcnR5TmFtZXMtPnZtKCk7CisgICAgVk0mIHZtID0gcHJvcGVydHlOYW1l
cy0+dm0oKTsKICAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKHZtKTsKLSAgICBwcm9wZXJ0eU5hbWVz
LT5hZGQocHJvcGVydHlOYW1lLT5pZGVudGlmaWVyKHZtKSk7CisgICAgcHJvcGVydHlOYW1lcy0+
YWRkKHByb3BlcnR5TmFtZS0+aWRlbnRpZmllcigmdm0pKTsKIH0KIAogSlNPYmplY3RSZWYgSlNP
YmplY3RHZXRQcm94eVRhcmdldChKU09iamVjdFJlZiBvYmplY3RSZWYpCkBAIC04NjIsNyArODYy
LDcgQEAgSlNPYmplY3RSZWYgSlNPYmplY3RHZXRQcm94eVRhcmdldChKU09iagogICAgIEpTT2Jq
ZWN0KiBvYmplY3QgPSB0b0pTKG9iamVjdFJlZik7CiAgICAgaWYgKCFvYmplY3QpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwotICAgIFZNJiB2bSA9ICpvYmplY3QtPnZtKCk7CisgICAgVk0mIHZt
ID0gb2JqZWN0LT52bSgpOwogICAgIEpTTG9ja0hvbGRlciBsb2NrZXIodm0pOwogICAgIEpTT2Jq
ZWN0KiByZXN1bHQgPSBudWxscHRyOwogICAgIGlmIChKU1Byb3h5KiBwcm94eSA9IGpzRHluYW1p
Y0Nhc3Q8SlNQcm94eSo+KHZtLCBvYmplY3QpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9KU1NjcmlwdFJlZi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9KU1NjcmlwdFJlZi5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNTY3JpcHRSZWYuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTc1LDcgKzc1LDcgQEAg
cHJpdmF0ZToKIHN0YXRpYyBib29sIHBhcnNlU2NyaXB0KFZNJiB2bSwgY29uc3QgU291cmNlQ29k
ZSYgc291cmNlLCBQYXJzZXJFcnJvciYgZXJyb3IpCiB7CiAgICAgcmV0dXJuICEhSlNDOjpwYXJz
ZTxKU0M6OlByb2dyYW1Ob2RlPigKLSAgICAgICAgJnZtLCBzb3VyY2UsIElkZW50aWZpZXIoKSwg
SlNQYXJzZXJCdWlsdGluTW9kZTo6Tm90QnVpbHRpbiwKKyAgICAgICAgdm0sIHNvdXJjZSwgSWRl
bnRpZmllcigpLCBKU1BhcnNlckJ1aWx0aW5Nb2RlOjpOb3RCdWlsdGluLAogICAgICAgICBKU1Bh
cnNlclN0cmljdE1vZGU6Ok5vdFN0cmljdCwgSlNQYXJzZXJTY3JpcHRNb2RlOjpDbGFzc2ljLCBT
b3VyY2VQYXJzZU1vZGU6OlByb2dyYW1Nb2RlLCBTdXBlckJpbmRpbmc6Ok5vdE5lZWRlZCwKICAg
ICAgICAgZXJyb3IpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZhbHVl
UmVmLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmFsdWVS
ZWYuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pT
VmFsdWVSZWYuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAwNiwgMjAwNywgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM0Niw5ICszNDYsMTAgQEAg
SlNWYWx1ZVJlZiBKU1ZhbHVlTWFrZVN0cmluZyhKU0NvbnRleHRSZQogICAgICAgICByZXR1cm4g
MDsKICAgICB9CiAgICAgRXhlY1N0YXRlKiBleGVjID0gdG9KUyhjdHgpOwotICAgIEpTTG9ja0hv
bGRlciBsb2NrZXIoZXhlYyk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBKU0xvY2tI
b2xkZXIgbG9ja2VyKHZtKTsKIAotICAgIHJldHVybiB0b1JlZihleGVjLCBqc1N0cmluZyhleGVj
LCBzdHJpbmcgPyBzdHJpbmctPnN0cmluZygpIDogU3RyaW5nKCkpKTsKKyAgICByZXR1cm4gdG9S
ZWYoZXhlYywganNTdHJpbmcodm0sIHN0cmluZyA/IHN0cmluZy0+c3RyaW5nKCkgOiBTdHJpbmco
KSkpOwogfQogCiBKU1ZhbHVlUmVmIEpTVmFsdWVNYWtlRnJvbUpTT05TdHJpbmcoSlNDb250ZXh0
UmVmIGN0eCwgSlNTdHJpbmdSZWYgc3RyaW5nKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9PcGFxdWVKU1N0cmluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9PcGFxdWVKU1N0cmluZy5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvT3BhcXVlSlNTdHJpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTc4LDkg
Kzc4LDkgQEAgSWRlbnRpZmllciBPcGFxdWVKU1N0cmluZzo6aWRlbnRpZmllcihWTQogICAgICAg
ICByZXR1cm4gSWRlbnRpZmllcihJZGVudGlmaWVyOjpFbXB0eUlkZW50aWZpZXIpOwogCiAgICAg
aWYgKG1fc3RyaW5nLmlzOEJpdCgpKQotICAgICAgICByZXR1cm4gSWRlbnRpZmllcjo6ZnJvbVN0
cmluZyh2bSwgbV9zdHJpbmcuY2hhcmFjdGVyczgoKSwgbV9zdHJpbmcubGVuZ3RoKCkpOworICAg
ICAgICByZXR1cm4gSWRlbnRpZmllcjo6ZnJvbVN0cmluZygqdm0sIG1fc3RyaW5nLmNoYXJhY3Rl
cnM4KCksIG1fc3RyaW5nLmxlbmd0aCgpKTsKIAotICAgIHJldHVybiBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKHZtLCBtX3N0cmluZy5jaGFyYWN0ZXJzMTYoKSwgbV9zdHJpbmcubGVuZ3RoKCkpOwor
ICAgIHJldHVybiBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCp2bSwgbV9zdHJpbmcuY2hhcmFjdGVy
czE2KCksIG1fc3RyaW5nLmxlbmd0aCgpKTsKIH0KIAogY29uc3QgVUNoYXIqIE9wYXF1ZUpTU3Ry
aW5nOjpjaGFyYWN0ZXJzKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9K
U0NDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2ds
aWIvSlNDQ29udGV4dC5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvZ2xpYi9KU0NDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTUwLDExICs5
NTAsMTEgQEAgSlNDQ2hlY2tTeW50YXhSZXN1bHQganNjX2NvbnRleHRfY2hlY2tfcwogICAgIEpT
Qzo6UGFyc2VyRXJyb3IgZXJyb3I7CiAgICAgc3dpdGNoIChtb2RlKSB7CiAgICAgY2FzZSBKU0Nf
Q0hFQ0tfU1lOVEFYX01PREVfU0NSSVBUOgotICAgICAgICBzdWNjZXNzID0gISFKU0M6OnBhcnNl
PEpTQzo6UHJvZ3JhbU5vZGU+KCZ2bSwgc291cmNlLCBKU0M6OklkZW50aWZpZXIoKSwgSlNDOjpK
U1BhcnNlckJ1aWx0aW5Nb2RlOjpOb3RCdWlsdGluLAorICAgICAgICBzdWNjZXNzID0gISFKU0M6
OnBhcnNlPEpTQzo6UHJvZ3JhbU5vZGU+KHZtLCBzb3VyY2UsIEpTQzo6SWRlbnRpZmllcigpLCBK
U0M6OkpTUGFyc2VyQnVpbHRpbk1vZGU6Ok5vdEJ1aWx0aW4sCiAgICAgICAgICAgICBKU0M6OkpT
UGFyc2VyU3RyaWN0TW9kZTo6Tm90U3RyaWN0LCBKU0M6OkpTUGFyc2VyU2NyaXB0TW9kZTo6Q2xh
c3NpYywgSlNDOjpTb3VyY2VQYXJzZU1vZGU6OlByb2dyYW1Nb2RlLCBKU0M6OlN1cGVyQmluZGlu
Zzo6Tm90TmVlZGVkLCBlcnJvcik7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSlNDX0NIRUNL
X1NZTlRBWF9NT0RFX01PRFVMRToKLSAgICAgICAgc3VjY2VzcyA9ICEhSlNDOjpwYXJzZTxKU0M6
Ok1vZHVsZVByb2dyYW1Ob2RlPigmdm0sIHNvdXJjZSwgSlNDOjpJZGVudGlmaWVyKCksIEpTQzo6
SlNQYXJzZXJCdWlsdGluTW9kZTo6Tm90QnVpbHRpbiwKKyAgICAgICAgc3VjY2VzcyA9ICEhSlND
OjpwYXJzZTxKU0M6Ok1vZHVsZVByb2dyYW1Ob2RlPih2bSwgc291cmNlLCBKU0M6OklkZW50aWZp
ZXIoKSwgSlNDOjpKU1BhcnNlckJ1aWx0aW5Nb2RlOjpOb3RCdWlsdGluLAogICAgICAgICAgICAg
SlNDOjpKU1BhcnNlclN0cmljdE1vZGU6OlN0cmljdCwgSlNDOjpKU1BhcnNlclNjcmlwdE1vZGU6
Ok1vZHVsZSwgSlNDOjpTb3VyY2VQYXJzZU1vZGU6Ok1vZHVsZUFuYWx5emVNb2RlLCBKU0M6OlN1
cGVyQmluZGluZzo6Tm90TmVlZGVkLCBlcnJvcik7CiAgICAgICAgIGJyZWFrOwogICAgIH0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL3drYnVpbHRpbnMvYnVpbHRpbnNfZ2Vu
ZXJhdGVfd3JhcHBlcl9oZWFkZXIucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL1NjcmlwdHMvd2tidWlsdGlucy9idWlsdGluc19nZW5lcmF0ZV93cmFwcGVyX2hlYWRlci5w
eQkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvd2ti
dWlsdGlucy9idWlsdGluc19nZW5lcmF0ZV93cmFwcGVyX2hlYWRlci5weQkod29ya2luZyBjb3B5
KQpAQCAtMSw2ICsxLDYgQEAKICMhL3Vzci9iaW4vZW52IHB5dGhvbgogIwotIyBDb3B5cmlnaHQg
KGMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKGMp
IDIwMTYtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAjCiAjIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTkyLDcgKzkyLDcgQEAgY2xhc3MgQnVpbHRpbnNXcmFwcGVySGVh
ZGVyR2VuZXJhdG9yKEJ1aQogICAgICAgICBsaW5lcyA9IFsiICAgIGV4cGxpY2l0IEpTQnVpbHRp
bkZ1bmN0aW9ucyhKU0M6OlZNJiB2bSkiLAogICAgICAgICAgICAgICAgICAiICAgICAgICA6IG1f
dm0odm0pIl0KICAgICAgICAgZm9yIG9iamVjdCBpbiBzZWxmLm1vZGVsKCkub2JqZWN0czoKLSAg
ICAgICAgICAgIG1lbWJlcl9pbml0ID0gIiAgICAgICAgLCAlcygmbV92bSkiICUgc2VsZi5tZW1i
ZXJfbmFtZShvYmplY3QpCisgICAgICAgICAgICBtZW1iZXJfaW5pdCA9ICIgICAgICAgICwgJXMo
bV92bSkiICUgc2VsZi5tZW1iZXJfbmFtZShvYmplY3QpCiAgICAgICAgICAgICBsaW5lcy5hcHBl
bmQoQnVpbHRpbnNHZW5lcmF0b3Iud3JhcF93aXRoX2d1YXJkKG9iamVjdC5hbm5vdGF0aW9ucy5n
ZXQoJ2NvbmRpdGlvbmFsJyksIG1lbWJlcl9pbml0KSkKICAgICAgICAgbGluZXMuYXBwZW5kKCIg
ICAgeyIpCiAgICAgICAgIGZvciBvYmplY3QgaW4gc2VsZi5tb2RlbCgpLm9iamVjdHM6CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy93a2J1aWx0aW5zL2J1aWx0aW5zX3RlbXBs
YXRlcy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy93a2J1
aWx0aW5zL2J1aWx0aW5zX3RlbXBsYXRlcy5weQkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvd2tidWlsdGlucy9idWlsdGluc190ZW1wbGF0ZXMucHkJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAjIS91c3IvYmluL2VudiBweXRob24KICMK
LSMgQ29weXJpZ2h0IChjKSAyMDE0LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorIyBDb3B5cmlnaHQgKGMpIDIwMTQtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAjIENvcHlyaWdodCAoQykgMjAxNSBDYW5vbiBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAjCiAjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dApAQCAtMTI5LDggKzEyOSw4IEBAICR7bWFjcm9QcmVmaXh9X0ZPUkVB
Q0hfJHtvYmplY3RNYWNyb31fQlUKICAgICBTZXBhcmF0ZUhlYWRlcldyYXBwZXJCb2lsZXJwbGF0
ZSA9ICgKICAgICAiIiJjbGFzcyAke29iamVjdE5hbWV9QnVpbHRpbnNXcmFwcGVyIDogcHJpdmF0
ZSBKU0M6OldlYWtIYW5kbGVPd25lciB7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgJHtvYmplY3RO
YW1lfUJ1aWx0aW5zV3JhcHBlcihKU0M6OlZNKiB2bSkKLSAgICAgICAgOiBtX3ZtKCp2bSkKKyAg
ICBleHBsaWNpdCAke29iamVjdE5hbWV9QnVpbHRpbnNXcmFwcGVyKEpTQzo6Vk0mIHZtKQorICAg
ICAgICA6IG1fdm0odm0pCiAgICAgICAgICR7bWFjcm9QcmVmaXh9X0ZPUkVBQ0hfJHtvYmplY3RN
YWNyb31fQlVJTFRJTl9GVU5DVElPTl9OQU1FKElOSVRJQUxJWkVfQlVJTFRJTl9OQU1FUykKICNk
ZWZpbmUgSU5JVElBTElaRV9CVUlMVElOX1NPVVJDRV9NRU1CRVJTKG5hbWUsIGZ1bmN0aW9uTmFt
ZSwgb3ZlcnJpZGRlbk5hbWUsIGxlbmd0aCkgLCBtXyMjbmFtZSMjU291cmNlKEpTQzo6bWFrZVNv
dXJjZShTdHJpbmdJbXBsOjpjcmVhdGVGcm9tTGl0ZXJhbChzXyMjbmFtZSwgbGVuZ3RoKSwgeyB9
KSkKICAgICAgICAgJHttYWNyb1ByZWZpeH1fRk9SRUFDSF8ke29iamVjdE1hY3JvfV9CVUlMVElO
X0NPREUoSU5JVElBTElaRV9CVUlMVElOX1NPVVJDRV9NRU1CRVJTKQpAQCAtMTY3LDcgKzE2Nyw3
IEBAIGlubGluZSBKU0M6OlVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiAKICAgICBpZiAoIW1f
IyNuYW1lIyNFeGVjdXRhYmxlKSB7XFwKICAgICAgICAgSlNDOjpJZGVudGlmaWVyIGV4ZWN1dGFi
bGVOYW1lID0gZnVuY3Rpb25OYW1lIyNQdWJsaWNOYW1lKCk7XFwKICAgICAgICAgaWYgKG92ZXJy
aWRkZW5OYW1lKVxcCi0gICAgICAgICAgICBleGVjdXRhYmxlTmFtZSA9IEpTQzo6SWRlbnRpZmll
cjo6ZnJvbVN0cmluZygmbV92bSwgb3ZlcnJpZGRlbk5hbWUpO1xcCisgICAgICAgICAgICBleGVj
dXRhYmxlTmFtZSA9IEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyhtX3ZtLCBvdmVycmlkZGVu
TmFtZSk7XFwKICAgICAgICAgbV8jI25hbWUjI0V4ZWN1dGFibGUgPSBKU0M6OldlYWs8SlNDOjpV
bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZT4oSlNDOjpjcmVhdGVCdWlsdGluRXhlY3V0YWJsZSht
X3ZtLCBtXyMjbmFtZSMjU291cmNlLCBleGVjdXRhYmxlTmFtZSwgc18jI25hbWUjI0NvbnN0cnVj
dEFiaWxpdHkpLCB0aGlzLCAmbV8jI25hbWUjI0V4ZWN1dGFibGUpO1xcCiAgICAgfVxcCiAgICAg
cmV0dXJuIG1fIyNuYW1lIyNFeGVjdXRhYmxlLmdldCgpO1xcCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYmluZGluZ3MvU2NyaXB0RnVuY3Rpb25DYWxsLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvU2NyaXB0RnVuY3Rpb25DYWxsLmNwcAkocmV2
aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2JpbmRpbmdzL1NjcmlwdEZ1
bmN0aW9uQ2FsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENv
cHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dApAQCAtNDIsMTQgKzQyLDE2IEBAIG5hbWVzcGFjZSBEZXByZWNhdGVkIHsKIAog
dm9pZCBTY3JpcHRDYWxsQXJndW1lbnRIYW5kbGVyOjphcHBlbmRBcmd1bWVudChjb25zdCBTdHJp
bmcmIGFyZ3VtZW50KQogewotICAgIEpTTG9ja0hvbGRlciBsb2NrKG1fZXhlYyk7Ci0gICAgbV9h
cmd1bWVudHMuYXBwZW5kKGpzU3RyaW5nKG1fZXhlYywgYXJndW1lbnQpKTsKKyAgICBWTSYgdm0g
PSBtX2V4ZWMtPnZtKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAgIG1fYXJndW1l
bnRzLmFwcGVuZChqc1N0cmluZyh2bSwgYXJndW1lbnQpKTsKIH0KIAogdm9pZCBTY3JpcHRDYWxs
QXJndW1lbnRIYW5kbGVyOjphcHBlbmRBcmd1bWVudChjb25zdCBjaGFyKiBhcmd1bWVudCkKIHsK
LSAgICBKU0xvY2tIb2xkZXIgbG9jayhtX2V4ZWMpOwotICAgIG1fYXJndW1lbnRzLmFwcGVuZChq
c1N0cmluZyhtX2V4ZWMsIFN0cmluZyhhcmd1bWVudCkpKTsKKyAgICBWTSYgdm0gPSBtX2V4ZWMt
PnZtKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAgIG1fYXJndW1lbnRzLmFwcGVu
ZChqc1N0cmluZyh2bSwgU3RyaW5nKGFyZ3VtZW50KSkpOwogfQogCiB2b2lkIFNjcmlwdENhbGxB
cmd1bWVudEhhbmRsZXI6OmFwcGVuZEFyZ3VtZW50KEpTVmFsdWUgYXJndW1lbnQpCkBAIC0xMDgs
NyArMTEwLDcgQEAgSlNWYWx1ZSBTY3JpcHRGdW5jdGlvbkNhbGw6OmNhbGwoYm9vbCYgaAogICAg
IEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAKLSAgICBKU1ZhbHVlIGZ1bmN0aW9uID0gdGhpc09iamVjdC0+Z2V0KG1fZXhl
YywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhtX2V4ZWMsIG1fbmFtZSkpOworICAgIEpTVmFsdWUg
ZnVuY3Rpb24gPSB0aGlzT2JqZWN0LT5nZXQobV9leGVjLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KHZtLCBtX25hbWUpKTsKICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7CiAg
ICAgICAgIGhhZEV4Y2VwdGlvbiA9IHRydWU7CiAgICAgICAgIHJldHVybiB7IH07CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvU2NyaXB0VmFsdWUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9TY3JpcHRWYWx1ZS5jcHAJKHJldmlz
aW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9TY3JpcHRWYWx1
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDA2LCAyMDA3LCAyMDA4LCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqIENvcHlyaWdodCAoYykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dApAQCAtNzksNyArNzksNyBAQCBzdGF0aWMgUmVmUHRyPEpTT046
OlZhbHVlPiBqc1RvSW5zcGVjdG9yCiAgICAgICAgIFZNJiB2bSA9IHNjcmlwdFN0YXRlLnZtKCk7
CiAgICAgICAgIGF1dG8gaW5zcGVjdG9yT2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsK
ICAgICAgICAgYXV0byYgb2JqZWN0ID0gKnZhbHVlLmdldE9iamVjdCgpOwotICAgICAgICBQcm9w
ZXJ0eU5hbWVBcnJheSBwcm9wZXJ0eU5hbWVzKCZ2bSwgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5n
cywgUHJpdmF0ZVN5bWJvbE1vZGU6OkV4Y2x1ZGUpOworICAgICAgICBQcm9wZXJ0eU5hbWVBcnJh
eSBwcm9wZXJ0eU5hbWVzKHZtLCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzLCBQcml2YXRlU3lt
Ym9sTW9kZTo6RXhjbHVkZSk7CiAgICAgICAgIG9iamVjdC5tZXRob2RUYWJsZSh2bSktPmdldE93
blByb3BlcnR5TmFtZXMoJm9iamVjdCwgJnNjcmlwdFN0YXRlLCBwcm9wZXJ0eU5hbWVzLCBFbnVt
ZXJhdGlvbk1vZGUoKSk7CiAgICAgICAgIGZvciAoYXV0byYgbmFtZSA6IHByb3BlcnR5TmFtZXMp
IHsKICAgICAgICAgICAgIGF1dG8gaW5zcGVjdG9yVmFsdWUgPSBqc1RvSW5zcGVjdG9yVmFsdWUo
c2NyaXB0U3RhdGUsIG9iamVjdC5nZXQoJnNjcmlwdFN0YXRlLCBuYW1lKSwgbWF4RGVwdGgpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0J1aWx0aW5FeGVjdXRhYmxlcy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0J1aWx0aW5F
eGVjdXRhYmxlcy5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9idWlsdGlucy9CdWlsdGluRXhlY3V0YWJsZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjEz
LDcgKzIxMyw3IEBAIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBCdWlsdGluRXhlY3UKICAg
ICAgICAgUGFyc2VyRXJyb3IgZXJyb3I7CiAgICAgICAgIEpTUGFyc2VyQnVpbHRpbk1vZGUgYnVp
bHRpbk1vZGUgPSBpc0J1aWx0aW5EZWZhdWx0Q2xhc3NDb25zdHJ1Y3RvciA/IEpTUGFyc2VyQnVp
bHRpbk1vZGU6Ok5vdEJ1aWx0aW4gOiBKU1BhcnNlckJ1aWx0aW5Nb2RlOjpCdWlsdGluOwogICAg
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8UHJvZ3JhbU5vZGU+IHByb2dyYW0gPSBwYXJzZTxQcm9ncmFt
Tm9kZT4oCi0gICAgICAgICAgICAmdm0sIHNvdXJjZSwgSWRlbnRpZmllcigpLCBidWlsdGluTW9k
ZSwKKyAgICAgICAgICAgIHZtLCBzb3VyY2UsIElkZW50aWZpZXIoKSwgYnVpbHRpbk1vZGUsCiAg
ICAgICAgICAgICBKU1BhcnNlclN0cmljdE1vZGU6Ok5vdFN0cmljdCwgSlNQYXJzZXJTY3JpcHRN
b2RlOjpDbGFzc2ljLCBTb3VyY2VQYXJzZU1vZGU6OlByb2dyYW1Nb2RlLCBTdXBlckJpbmRpbmc6
Ok5vdE5lZWRlZCwgZXJyb3IsCiAgICAgICAgICAgICAmcG9zaXRpb25CZWZvcmVMYXN0TmV3bGlu
ZUZyb21QYXJzZXIsIGNvbnN0cnVjdG9yS2luZCk7CiAKQEAgLTI1NCw3ICsyNTQsNyBAQCBVbmxp
bmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogQnVpbHRpbkV4ZWN1CiAgICAgICAgIH0KICAgICB9CiAK
LSAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25FeGVjdXRhYmxlID0gVW5s
aW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OmNyZWF0ZSgmdm0sIHNvdXJjZSwgJm1ldGFkYXRhLCBr
aW5kLCBjb25zdHJ1Y3RBYmlsaXR5LCBKU1BhcnNlclNjcmlwdE1vZGU6OkNsYXNzaWMsIFdURjo6
bnVsbG9wdCwgRGVyaXZlZENvbnRleHRUeXBlOjpOb25lLCBpc0J1aWx0aW5EZWZhdWx0Q2xhc3ND
b25zdHJ1Y3Rvcik7CisgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhl
Y3V0YWJsZSA9IFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpjcmVhdGUodm0sIHNvdXJjZSwg
Jm1ldGFkYXRhLCBraW5kLCBjb25zdHJ1Y3RBYmlsaXR5LCBKU1BhcnNlclNjcmlwdE1vZGU6OkNs
YXNzaWMsIFdURjo6bnVsbG9wdCwgRGVyaXZlZENvbnRleHRUeXBlOjpOb25lLCBpc0J1aWx0aW5E
ZWZhdWx0Q2xhc3NDb25zdHJ1Y3Rvcik7CiAgICAgcmV0dXJuIGZ1bmN0aW9uRXhlY3V0YWJsZTsK
IH0KIApAQCAtMjc4LDcgKzI3OCw3IEBAIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBCdWls
dGluRXhlY3UKICAgICBpZiAoIW1fdW5saW5rZWRFeGVjdXRhYmxlc1tpbmRleF0pIHtcCiAgICAg
ICAgIElkZW50aWZpZXIgZXhlY3V0YWJsZU5hbWUgPSBtX3ZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0
aW5OYW1lcygpLmZ1bmN0aW9uTmFtZSMjUHVibGljTmFtZSgpO1wKICAgICAgICAgaWYgKG92ZXJy
aWRlTmFtZSlcCi0gICAgICAgICAgICBleGVjdXRhYmxlTmFtZSA9IElkZW50aWZpZXI6OmZyb21T
dHJpbmcoJm1fdm0sIG92ZXJyaWRlTmFtZSk7XAorICAgICAgICAgICAgZXhlY3V0YWJsZU5hbWUg
PSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKG1fdm0sIG92ZXJyaWRlTmFtZSk7XAogICAgICAgICBt
X3VubGlua2VkRXhlY3V0YWJsZXNbaW5kZXhdID0gY3JlYXRlQnVpbHRpbkV4ZWN1dGFibGUobmFt
ZSMjU291cmNlKCksIGV4ZWN1dGFibGVOYW1lLCBzXyMjbmFtZSMjQ29uc3RydWN0QWJpbGl0eSk7
XAogICAgIH1cCiAgICAgcmV0dXJuIG1fdW5saW5rZWRFeGVjdXRhYmxlc1tpbmRleF07XApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0J1aWx0aW5OYW1lcy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0J1aWx0aW5OYW1lcy5jcHAJ
KHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9CdWls
dGluTmFtZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHly
aWdodCAoQykgMjAxNyBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+LgorICog
Q29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzIsNyArNzMsNyBAQCBTeW1ib2xJbXBsOjpT
dGF0aWNTeW1ib2xJbXBsIHBvbHlQcm90b1ByCiAKIC8vIFdlIHRyZWF0IHRoZSBkb2xsYXJWTSBu
YW1lIGFzIGEgc3BlY2lhbCBjYXNlIGJlbG93IGZvciAkdm0gKGJlY2F1c2UgQ29tbW9uSWRlbnRp
ZmllcnMgZG9lcyBub3QKIC8vIHlldCBzdXBwb3J0IHRoZSAkIGNoYXJhY3RlcikuCi1CdWlsdGlu
TmFtZXM6OkJ1aWx0aW5OYW1lcyhWTSogdm0sIENvbW1vbklkZW50aWZpZXJzKiBjb21tb25JZGVu
dGlmaWVycykKK0J1aWx0aW5OYW1lczo6QnVpbHRpbk5hbWVzKFZNJiB2bSwgQ29tbW9uSWRlbnRp
ZmllcnMqIGNvbW1vbklkZW50aWZpZXJzKQogICAgIDogbV9lbXB0eUlkZW50aWZpZXIoY29tbW9u
SWRlbnRpZmllcnMtPmVtcHR5SWRlbnRpZmllcikKICAgICBKU0NfRk9SRUFDSF9CVUlMVElOX0ZV
TkNUSU9OX05BTUUoSU5JVElBTElaRV9CVUlMVElOX05BTUVTX0lOX0pTQykKICAgICBKU0NfQ09N
TU9OX1BSSVZBVEVfSURFTlRJRklFUlNfRUFDSF9QUk9QRVJUWV9OQU1FKElOSVRJQUxJWkVfQlVJ
TFRJTl9OQU1FU19JTl9KU0MpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMv
QnVpbHRpbk5hbWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0
aW5zL0J1aWx0aW5OYW1lcy5oCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnVpbHRpbnMvQnVpbHRpbk5hbWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTk4LDcg
KzE5OCw3IEBAIGNsYXNzIEJ1aWx0aW5OYW1lcyB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
QnVpbHRpbk5hbWVzKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgCiBwdWJsaWM6Ci0g
ICAgQnVpbHRpbk5hbWVzKFZNKiwgQ29tbW9uSWRlbnRpZmllcnMqKTsKKyAgICBCdWlsdGluTmFt
ZXMoVk0mLCBDb21tb25JZGVudGlmaWVycyopOwogCiAgICAgU3ltYm9sSW1wbCogbG9va1VwUHJp
dmF0ZU5hbWUoY29uc3QgSWRlbnRpZmllciYpIGNvbnN0OwogICAgIElkZW50aWZpZXIgZ2V0UHVi
bGljTmFtZShWTSYsIFN5bWJvbEltcGwqKSBjb25zdDsKQEAgLTIzNywxMCArMjM3LDEwIEBAIGlu
bGluZSBTeW1ib2xJbXBsKiBCdWlsdGluTmFtZXM6Omxvb2tVcFAKIGlubGluZSBJZGVudGlmaWVy
IEJ1aWx0aW5OYW1lczo6Z2V0UHVibGljTmFtZShWTSYgdm0sIFN5bWJvbEltcGwqIHN5bWJvbCkg
Y29uc3QKIHsKICAgICBpZiAoc3ltYm9sLT5pc1ByaXZhdGUoKSkKLSAgICAgICAgcmV0dXJuIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCBzeW1ib2wpOworICAgICAgICByZXR1cm4gSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZyh2bSwgc3ltYm9sKTsKICAgICAvLyBXZSBoYXZlIHNwZWNpYWwgaGFu
ZGxpbmcgZm9yIHdlbGwta25vd24gc3ltYm9scy4KICAgICBBU1NFUlQoc3ltYm9sLT5zdGFydHNX
aXRoKCJTeW1ib2wuIikpOwotICAgIHJldHVybiBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwg
bWFrZVN0cmluZyhTdHJpbmcoc3ltYm9sLT5zdWJzdHJpbmcoc3RybGVuKCJTeW1ib2wuIikpKSwg
IlN5bWJvbCIpKTsKKyAgICByZXR1cm4gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgbWFrZVN0
cmluZyhTdHJpbmcoc3ltYm9sLT5zdWJzdHJpbmcoc3RybGVuKCJTeW1ib2wuIikpKSwgIlN5bWJv
bCIpKTsKIH0KIAogaW5saW5lIHZvaWQgQnVpbHRpbk5hbWVzOjpjaGVja1B1YmxpY1RvUHJpdmF0
ZU1hcENvbnNpc3RlbmN5KFVuaXF1ZWRTdHJpbmdJbXBsKiBwdWJsaWNOYW1lLCBVbmlxdWVkU3Ry
aW5nSW1wbCogcHJpdmF0ZU5hbWUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQnl0ZWNvZGVEdW1wZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE3IFl1c3VrZSBTdXp1
a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtNDQsNyArNDQsNyBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIHRlbXBsYXRlPGNs
YXNzIEJsb2NrPgotVk0qIEJ5dGVjb2RlRHVtcGVyPEJsb2NrPjo6dm0oKSBjb25zdAorVk0mIEJ5
dGVjb2RlRHVtcGVyPEJsb2NrPjo6dm0oKSBjb25zdAogewogICAgIHJldHVybiBibG9jaygpLT52
bSgpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVt
cGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVj
b2RlRHVtcGVyLmgJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9CeXRlY29kZUR1bXBlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAog
LyoKICAqIENvcHlyaWdodCAoQykgMjAxNyBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFp
bC5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03MCw3ICs3MCw3IEBA
IHByaXZhdGU6CiAKICAgICBCbG9jayogYmxvY2soKSBjb25zdCB7IHJldHVybiBtX2Jsb2NrOyB9
CiAKLSAgICBBTFdBWVNfSU5MSU5FIFZNKiB2bSgpIGNvbnN0OworICAgIEFMV0FZU19JTkxJTkUg
Vk0mIHZtKCkgY29uc3Q7CiAKICAgICBDU3RyaW5nIHJlZ2lzdGVyTmFtZShpbnQgcikgY29uc3Q7
CiAgICAgQ1N0cmluZyBjb25zdGFudE5hbWUoaW50IGluZGV4KSBjb25zdDsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUdlbmVyYXRvcmlmaWNhdGlvbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlR2Vu
ZXJhdG9yaWZpY2F0aW9uLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlR2VuZXJhdG9yaWZpY2F0aW9uLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNjgsNyArNjgsNyBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9jb2RlQmxvY2soY29k
ZUJsb2NrKQogICAgICAgICAsIG1faW5zdHJ1Y3Rpb25zKGluc3RydWN0aW9ucykKICAgICAgICAg
LCBtX2dyYXBoKG1fY29kZUJsb2NrLCBtX2luc3RydWN0aW9ucykKLSAgICAgICAgLCBtX2dlbmVy
YXRvckZyYW1lU3ltYm9sVGFibGUoKmNvZGVCbG9jay0+dm0oKSwgZ2VuZXJhdG9yRnJhbWVTeW1i
b2xUYWJsZSkKKyAgICAgICAgLCBtX2dlbmVyYXRvckZyYW1lU3ltYm9sVGFibGUoY29kZUJsb2Nr
LT52bSgpLCBnZW5lcmF0b3JGcmFtZVN5bWJvbFRhYmxlKQogICAgICAgICAsIG1fZ2VuZXJhdG9y
RnJhbWVTeW1ib2xUYWJsZUluZGV4KGdlbmVyYXRvckZyYW1lU3ltYm9sVGFibGVJbmRleCkKICAg
ICB7CiAgICAgICAgIGZvciAoQnl0ZWNvZGVCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGgpIHsK
QEAgLTE1OCw3ICsxNTgsNyBAQCBwcml2YXRlOgogICAgICAgICBpZiAoT3B0aW9uYWw8U3RvcmFn
ZT4gc3RvcmFnZSA9IG1fc3RvcmFnZXNbaW5kZXhdKQogICAgICAgICAgICAgcmV0dXJuICpzdG9y
YWdlOwogCi0gICAgICAgIElkZW50aWZpZXIgaWRlbnRpZmllciA9IElkZW50aWZpZXI6OmZyb20o
JnZtLCBpbmRleCk7CisgICAgICAgIElkZW50aWZpZXIgaWRlbnRpZmllciA9IElkZW50aWZpZXI6
OmZyb20odm0sIGluZGV4KTsKICAgICAgICAgdW5zaWduZWQgaWRlbnRpZmllckluZGV4ID0gbV9j
b2RlQmxvY2stPm51bWJlck9mSWRlbnRpZmllcnMoKTsKICAgICAgICAgbV9jb2RlQmxvY2stPmFk
ZElkZW50aWZpZXIoaWRlbnRpZmllcik7CiAgICAgICAgIFNjb3BlT2Zmc2V0IHNjb3BlT2Zmc2V0
ID0gbV9nZW5lcmF0b3JGcmFtZVN5bWJvbFRhYmxlLT50YWtlTmV4dFNjb3BlT2Zmc2V0KE5vTG9j
a2luZ05lY2Vzc2FyeSk7CkBAIC0yMTEsNyArMjExLDcgQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRv
cmlmaWNhdGlvbjo6cnVuKCkKIHsKICAgICAvLyBXZSBjYWxjdWxhdGUgdGhlIGxpdmVuZXNzIGF0
IGVhY2ggbWVyZ2UgcG9pbnQuIFRoaXMgZ2l2ZXMgdXMgdGhlIGluZm9ybWF0aW9uIHdoaWNoIHJl
Z2lzdGVycyBzaG91bGQgYmUgc2F2ZWQgYW5kIHJlc3VtZWQgY29uc2VydmF0aXZlbHkuCiAKLSAg
ICBWTSYgdm0gPSAqbV9ieXRlY29kZUdlbmVyYXRvci52bSgpOworICAgIFZNJiB2bSA9IG1fYnl0
ZWNvZGVHZW5lcmF0b3Iudm0oKTsKICAgICB7CiAgICAgICAgIEdlbmVyYXRvckxpdmVuZXNzQW5h
bHlzaXMgcGFzcygqdGhpcyk7CiAgICAgICAgIHBhc3MucnVuKG1fY29kZUJsb2NrLCBtX2luc3Ry
dWN0aW9ucyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVJ
bnRyaW5zaWNSZWdpc3RyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0J5dGVjb2RlSW50cmluc2ljUmVnaXN0cnkuY3BwCShyZXZpc2lvbiAyNDkxMjgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVJbnRyaW5zaWNSZWdp
c3RyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0
IChDKSAyMDE1IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4uCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEwNCwxMiArMTA0LDEyIEBAIEJ5dGVj
b2RlSW50cmluc2ljTm9kZTo6RW1pdHRlclR5cGUgQnl0ZWMKIAogSlNWYWx1ZSBCeXRlY29kZUlu
dHJpbnNpY1JlZ2lzdHJ5OjpzZW50aW5lbE1hcEJ1Y2tldFZhbHVlKEJ5dGVjb2RlR2VuZXJhdG9y
JiBnZW5lcmF0b3IpCiB7Ci0gICAgcmV0dXJuIGdlbmVyYXRvci52bSgpLT5zZW50aW5lbE1hcEJ1
Y2tldCgpOworICAgIHJldHVybiBnZW5lcmF0b3Iudm0oKS5zZW50aW5lbE1hcEJ1Y2tldCgpOwog
fQogCiBKU1ZhbHVlIEJ5dGVjb2RlSW50cmluc2ljUmVnaXN0cnk6OnNlbnRpbmVsU2V0QnVja2V0
VmFsdWUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvcikKIHsKLSAgICByZXR1cm4gZ2VuZXJh
dG9yLnZtKCktPnNlbnRpbmVsU2V0QnVja2V0KCk7CisgICAgcmV0dXJuIGdlbmVyYXRvci52bSgp
LnNlbnRpbmVsU2V0QnVja2V0KCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxWYXJpYW50LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxWYXJpYW50LmgJKHJldmlzaW9uIDI0
OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsVmFyaWFudC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNC0y
MDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtODcsMjEgKzg3LDIxIEBAIHB1YmxpYzoKICAgICAKICAgICBJbnRl
cm5hbEZ1bmN0aW9uKiBpbnRlcm5hbEZ1bmN0aW9uKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJl
dHVybiBqc0R5bmFtaWNDYXN0PEludGVybmFsRnVuY3Rpb24qPigqbV9jYWxsZWUtPnZtKCksIG1f
Y2FsbGVlKTsKKyAgICAgICAgcmV0dXJuIGpzRHluYW1pY0Nhc3Q8SW50ZXJuYWxGdW5jdGlvbio+
KG1fY2FsbGVlLT52bSgpLCBtX2NhbGxlZSk7CiAgICAgfQogICAgIAogICAgIEpTRnVuY3Rpb24q
IGZ1bmN0aW9uKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBqc0R5bmFtaWNDYXN0PEpT
RnVuY3Rpb24qPigqbV9jYWxsZWUtPnZtKCksIG1fY2FsbGVlKTsKKyAgICAgICAgcmV0dXJuIGpz
RHluYW1pY0Nhc3Q8SlNGdW5jdGlvbio+KG1fY2FsbGVlLT52bSgpLCBtX2NhbGxlZSk7CiAgICAg
fQogICAgIAotICAgIGJvb2wgaXNDbG9zdXJlQ2FsbCgpIGNvbnN0IHsgcmV0dXJuICEhanNEeW5h
bWljQ2FzdDxFeGVjdXRhYmxlQmFzZSo+KCptX2NhbGxlZS0+dm0oKSwgbV9jYWxsZWUpOyB9Cisg
ICAgYm9vbCBpc0Nsb3N1cmVDYWxsKCkgY29uc3QgeyByZXR1cm4gISFqc0R5bmFtaWNDYXN0PEV4
ZWN1dGFibGVCYXNlKj4obV9jYWxsZWUtPnZtKCksIG1fY2FsbGVlKTsgfQogICAgIAogICAgIEV4
ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlKCkgY29uc3QKICAgICB7CiAgICAgICAgIGlmIChKU0Z1
bmN0aW9uKiBmdW5jdGlvbiA9IHRoaXMtPmZ1bmN0aW9uKCkpCiAgICAgICAgICAgICByZXR1cm4g
ZnVuY3Rpb24tPmV4ZWN1dGFibGUoKTsKLSAgICAgICAgcmV0dXJuIGpzRHluYW1pY0Nhc3Q8RXhl
Y3V0YWJsZUJhc2UqPigqbV9jYWxsZWUtPnZtKCksIG1fY2FsbGVlKTsKKyAgICAgICAgcmV0dXJu
IGpzRHluYW1pY0Nhc3Q8RXhlY3V0YWJsZUJhc2UqPihtX2NhbGxlZS0+dm0oKSwgbV9jYWxsZWUp
OwogICAgIH0KICAgICAKICAgICBKU0NlbGwqIG5vbkV4ZWN1dGFibGVDYWxsZWUoKSBjb25zdApA
QCAtMTIwLDE0ICsxMjAsMTQgQEAgcHVibGljOgogICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVu
Y3Rpb25FeGVjdXRhYmxlKCkgY29uc3QKICAgICB7CiAgICAgICAgIGlmIChFeGVjdXRhYmxlQmFz
ZSogZXhlY3V0YWJsZSA9IHRoaXMtPmV4ZWN1dGFibGUoKSkKLSAgICAgICAgICAgIHJldHVybiBq
c0R5bmFtaWNDYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KCptX2NhbGxlZS0+dm0oKSwgZXhlY3V0
YWJsZSk7CisgICAgICAgICAgICByZXR1cm4ganNEeW5hbWljQ2FzdDxGdW5jdGlvbkV4ZWN1dGFi
bGUqPihtX2NhbGxlZS0+dm0oKSwgZXhlY3V0YWJsZSk7CiAgICAgICAgIHJldHVybiBudWxscHRy
OwogICAgIH0KIAogICAgIE5hdGl2ZUV4ZWN1dGFibGUqIG5hdGl2ZUV4ZWN1dGFibGUoKSBjb25z
dAogICAgIHsKICAgICAgICAgaWYgKEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlID0gdGhpcy0+
ZXhlY3V0YWJsZSgpKQotICAgICAgICAgICAgcmV0dXJuIGpzRHluYW1pY0Nhc3Q8TmF0aXZlRXhl
Y3V0YWJsZSo+KCptX2NhbGxlZS0+dm0oKSwgZXhlY3V0YWJsZSk7CisgICAgICAgICAgICByZXR1
cm4ganNEeW5hbWljQ2FzdDxOYXRpdmVFeGVjdXRhYmxlKj4obV9jYWxsZWUtPnZtKCksIGV4ZWN1
dGFibGUpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAyNDkxMjgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjI5LDcgKzIyOSw3IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wU291cmNlKFBy
aW50U3RyZWFtJiAKICAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4ZWN1dGFi
bGUgPSByZWludGVycHJldF9jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpOwog
ICAgICAgICBTdHJpbmdWaWV3IHNvdXJjZSA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+c291cmNlKCku
cHJvdmlkZXIoKS0+Z2V0UmFuZ2UoCiAgICAgICAgICAgICBmdW5jdGlvbkV4ZWN1dGFibGUtPnBh
cmFtZXRlcnNTdGFydE9mZnNldCgpLAotICAgICAgICAgICAgZnVuY3Rpb25FeGVjdXRhYmxlLT50
eXBlUHJvZmlsaW5nRW5kT2Zmc2V0KCp2bSgpKSArIDEpOyAvLyBUeXBlIHByb2ZpbGluZyBlbmQg
b2Zmc2V0IGlzIHRoZSBjaGFyYWN0ZXIgYmVmb3JlIHRoZSAnfScuCisgICAgICAgICAgICBmdW5j
dGlvbkV4ZWN1dGFibGUtPnR5cGVQcm9maWxpbmdFbmRPZmZzZXQodm0oKSkgKyAxKTsgLy8gVHlw
ZSBwcm9maWxpbmcgZW5kIG9mZnNldCBpcyB0aGUgY2hhcmFjdGVyIGJlZm9yZSB0aGUgJ30nLgog
ICAgICAgICAKICAgICAgICAgb3V0LnByaW50KCJmdW5jdGlvbiAiLCBpbmZlcnJlZE5hbWUoKSwg
c291cmNlKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMjgyLDggKzI4Miw4IEBAIHByaXZhdGU6CiAK
IH0gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQogCi1Db2RlQmxvY2s6OkNvZGVCbG9jayhWTSogdm0s
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBDb3B5UGFyc2VkQmxvY2tUYWcsIENvZGVCbG9jayYgb3Ro
ZXIpCi0gICAgOiBKU0NlbGwoKnZtLCBzdHJ1Y3R1cmUpCitDb2RlQmxvY2s6OkNvZGVCbG9jayhW
TSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBDb3B5UGFyc2VkQmxvY2tUYWcsIENvZGVCbG9j
ayYgb3RoZXIpCisgICAgOiBKU0NlbGwodm0sIHN0cnVjdHVyZSkKICAgICAsIG1fZ2xvYmFsT2Jq
ZWN0KG90aGVyLm1fZ2xvYmFsT2JqZWN0KQogICAgICwgbV9zaG91bGRBbHdheXNCZUlubGluZWQo
dHJ1ZSkKICNpZiBFTkFCTEUoSklUKQpAQCAtMzAxLDggKzMwMSw4IEBAIENvZGVCbG9jazo6Q29k
ZUJsb2NrKFZNKiB2bSwgU3RydWN0dXJlKiAKICAgICAsIG1fYnl0ZWNvZGVDb3N0KG90aGVyLm1f
Ynl0ZWNvZGVDb3N0KQogICAgICwgbV9zY29wZVJlZ2lzdGVyKG90aGVyLm1fc2NvcGVSZWdpc3Rl
cikKICAgICAsIG1faGFzaChvdGhlci5tX2hhc2gpCi0gICAgLCBtX3VubGlua2VkQ29kZSgqb3Ro
ZXIudm0oKSwgdGhpcywgb3RoZXIubV91bmxpbmtlZENvZGUuZ2V0KCkpCi0gICAgLCBtX293bmVy
RXhlY3V0YWJsZSgqb3RoZXIudm0oKSwgdGhpcywgb3RoZXIubV9vd25lckV4ZWN1dGFibGUuZ2V0
KCkpCisgICAgLCBtX3VubGlua2VkQ29kZShvdGhlci52bSgpLCB0aGlzLCBvdGhlci5tX3VubGlu
a2VkQ29kZS5nZXQoKSkKKyAgICAsIG1fb3duZXJFeGVjdXRhYmxlKG90aGVyLnZtKCksIHRoaXMs
IG90aGVyLm1fb3duZXJFeGVjdXRhYmxlLmdldCgpKQogICAgICwgbV92bShvdGhlci5tX3ZtKQog
ICAgICwgbV9pbnN0cnVjdGlvbnNSYXdQb2ludGVyKG90aGVyLm1faW5zdHJ1Y3Rpb25zUmF3UG9p
bnRlcikKICAgICAsIG1fY29uc3RhbnRSZWdpc3RlcnMob3RoZXIubV9jb25zdGFudFJlZ2lzdGVy
cykKQEAgLTMyMSw3ICszMjEsNyBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhWTSogdm0sIFN0cnVj
dHVyZSogCiAgICAgQVNTRVJUKHNvdXJjZSgpLnByb3ZpZGVyKCkpOwogICAgIHNldE51bVBhcmFt
ZXRlcnMob3RoZXIubnVtUGFyYW1ldGVycygpKTsKICAgICAKLSAgICB2bS0+aGVhcC5jb2RlQmxv
Y2tTZXQoKS5hZGQodGhpcyk7CisgICAgdm0uaGVhcC5jb2RlQmxvY2tTZXQoKS5hZGQodGhpcyk7
CiB9CiAKIHZvaWQgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIENvcHlQYXJzZWRC
bG9ja1RhZywgQ29kZUJsb2NrJiBvdGhlcikKQEAgLTM0MSw5ICszNDEsOSBAQCB2b2lkIENvZGVC
bG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBDCiAgICAgfQogfQogCi1Db2RlQmxvY2s6OkNv
ZGVCbG9jayhWTSogdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBTY3JpcHRFeGVjdXRhYmxlKiBv
d25lckV4ZWN1dGFibGUsIFVubGlua2VkQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9jaywgSlNT
Y29wZSogc2NvcGUpCi0gICAgOiBKU0NlbGwoKnZtLCBzdHJ1Y3R1cmUpCi0gICAgLCBtX2dsb2Jh
bE9iamVjdCgqdm0sIHRoaXMsIHNjb3BlLT5nbG9iYWxPYmplY3QoKnZtKSkKK0NvZGVCbG9jazo6
Q29kZUJsb2NrKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFNjcmlwdEV4ZWN1dGFibGUq
IG93bmVyRXhlY3V0YWJsZSwgVW5saW5rZWRDb2RlQmxvY2sqIHVubGlua2VkQ29kZUJsb2NrLCBK
U1Njb3BlKiBzY29wZSkKKyAgICA6IEpTQ2VsbCh2bSwgc3RydWN0dXJlKQorICAgICwgbV9nbG9i
YWxPYmplY3Qodm0sIHRoaXMsIHNjb3BlLT5nbG9iYWxPYmplY3Qodm0pKQogICAgICwgbV9zaG91
bGRBbHdheXNCZUlubGluZWQodHJ1ZSkKICNpZiBFTkFCTEUoSklUKQogICAgICwgbV9jYXBhYmls
aXR5TGV2ZWxTdGF0ZShERkc6OkNhcGFiaWxpdHlMZXZlbE5vdFNldCkKQEAgLTM1Nyw5ICszNTcs
OSBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhWTSogdm0sIFN0cnVjdHVyZSogCiAgICAgLCBtX3N0
ZXBwaW5nTW9kZShTdGVwcGluZ01vZGVEaXNhYmxlZCkKICAgICAsIG1fbnVtQnJlYWtwb2ludHMo
MCkKICAgICAsIG1fc2NvcGVSZWdpc3Rlcih1bmxpbmtlZENvZGVCbG9jay0+c2NvcGVSZWdpc3Rl
cigpKQotICAgICwgbV91bmxpbmtlZENvZGUoKnZtLCB0aGlzLCB1bmxpbmtlZENvZGVCbG9jaykK
LSAgICAsIG1fb3duZXJFeGVjdXRhYmxlKCp2bSwgdGhpcywgb3duZXJFeGVjdXRhYmxlKQotICAg
ICwgbV92bSh2bSkKKyAgICAsIG1fdW5saW5rZWRDb2RlKHZtLCB0aGlzLCB1bmxpbmtlZENvZGVC
bG9jaykKKyAgICAsIG1fb3duZXJFeGVjdXRhYmxlKHZtLCB0aGlzLCBvd25lckV4ZWN1dGFibGUp
CisgICAgLCBtX3ZtKCZ2bSkKICAgICAsIG1faW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcih1bmxpbmtl
ZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkucmF3UG9pbnRlcigpKQogICAgICwgbV9vc3JFeGl0
Q291bnRlcigwKQogICAgICwgbV9vcHRpbWl6YXRpb25EZWxheUNvdW50ZXIoMCkKQEAgLTM3Myw3
ICszNzMsNyBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhWTSogdm0sIFN0cnVjdHVyZSogCiAgICAg
QVNTRVJUKHNvdXJjZSgpLnByb3ZpZGVyKCkpOwogICAgIHNldE51bVBhcmFtZXRlcnModW5saW5r
ZWRDb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSk7CiAgICAgCi0gICAgdm0tPmhlYXAuY29kZUJs
b2NrU2V0KCkuYWRkKHRoaXMpOworICAgIHZtLmhlYXAuY29kZUJsb2NrU2V0KCkuYWRkKHRoaXMp
OwogfQogCiAvLyBUaGUgbWFpbiBwdXJwb3NlIG9mIHRoaXMgZnVuY3Rpb24gaXMgdG8gZ2VuZXJh
dGUgbGlua2VkIGJ5dGVjb2RlIGZyb20gdW5saW5rZWQgYnl0ZWNvZGUuIFRoZSBwcm9jZXNzCkBA
IC04ODAsNyArODgwLDcgQEAgdm9pZCBDb2RlQmxvY2s6OnNldENvbnN0YW50SWRlbnRpZmllclNl
dAogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogCiAgICAgICAg
IGZvciAoYXV0byBzZXRFbnRyeSA6IHNldCkgewotICAgICAgICAgICAgSlNTdHJpbmcqIGpzU3Ry
aW5nID0ganNPd25lZFN0cmluZygmdm0sIHNldEVudHJ5LmdldCgpKTsgCisgICAgICAgICAgICBK
U1N0cmluZyoganNTdHJpbmcgPSBqc093bmVkU3RyaW5nKHZtLCBzZXRFbnRyeS5nZXQoKSk7IAog
ICAgICAgICAgICAganNTZXQtPmFkZChleGVjLCBqc1N0cmluZyk7CiAgICAgICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogICAgICAgICB9CkBAIC05NDAsNyArOTQw
LDcgQEAgdm9pZCBDb2RlQmxvY2s6OnNldE51bVBhcmFtZXRlcnMoaW50IG5ldwogewogICAgIG1f
bnVtUGFyYW1ldGVycyA9IG5ld1ZhbHVlOwogCi0gICAgbV9hcmd1bWVudFZhbHVlUHJvZmlsZXMg
PSBSZWZDb3VudGVkQXJyYXk8VmFsdWVQcm9maWxlPih2bSgpLT5jYW5Vc2VKSVQoKSA/IG5ld1Zh
bHVlIDogMCk7CisgICAgbV9hcmd1bWVudFZhbHVlUHJvZmlsZXMgPSBSZWZDb3VudGVkQXJyYXk8
VmFsdWVQcm9maWxlPih2bSgpLmNhblVzZUpJVCgpID8gbmV3VmFsdWUgOiAwKTsKIH0KIAogQ29k
ZUJsb2NrKiBDb2RlQmxvY2s6OnNwZWNpYWxPU1JFbnRyeUJsb2NrT3JOdWxsKCkKQEAgLTEzNjUs
NyArMTM2NSw3IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZUJhc2VsaW5lSklUSW5saW4KIHsK
ICAgICBpZiAoYXV0byogaml0RGF0YSA9IG1faml0RGF0YS5nZXQoKSkgewogICAgICAgICBmb3Ig
KENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvIDogaml0RGF0YS0+bV9jYWxsTGlua0luZm9zKQot
ICAgICAgICAgICAgY2FsbExpbmtJbmZvLT52aXNpdFdlYWsoKnZtKCkpOworICAgICAgICAgICAg
Y2FsbExpbmtJbmZvLT52aXNpdFdlYWsodm0oKSk7CiAKICAgICAgICAgZm9yIChTdHJ1Y3R1cmVT
dHViSW5mbyogc3R1YkluZm8gOiBqaXREYXRhLT5tX3N0dWJJbmZvcykKICAgICAgICAgICAgIHN0
dWJJbmZvLT52aXNpdFdlYWtSZWZlcmVuY2VzKHRoaXMpOwpAQCAtMTkzNiw5ICsxOTM2LDkgQEAg
dm9pZCBDb2RlQmxvY2s6OnVubGlua0luY29taW5nQ2FsbHMoKQogICAgIH0KICAgICBpZiAoaml0
RGF0YSkgewogICAgICAgICB3aGlsZSAoaml0RGF0YS0+bV9pbmNvbWluZ0NhbGxzLmJlZ2luKCkg
IT0gaml0RGF0YS0+bV9pbmNvbWluZ0NhbGxzLmVuZCgpKQotICAgICAgICAgICAgaml0RGF0YS0+
bV9pbmNvbWluZ0NhbGxzLmJlZ2luKCktPnVubGluaygqdm0oKSk7CisgICAgICAgICAgICBqaXRE
YXRhLT5tX2luY29taW5nQ2FsbHMuYmVnaW4oKS0+dW5saW5rKHZtKCkpOwogICAgICAgICB3aGls
ZSAoaml0RGF0YS0+bV9pbmNvbWluZ1BvbHltb3JwaGljQ2FsbHMuYmVnaW4oKSAhPSBqaXREYXRh
LT5tX2luY29taW5nUG9seW1vcnBoaWNDYWxscy5lbmQoKSkKLSAgICAgICAgICAgIGppdERhdGEt
Pm1faW5jb21pbmdQb2x5bW9ycGhpY0NhbGxzLmJlZ2luKCktPnVubGluaygqdm0oKSk7CisgICAg
ICAgICAgICBqaXREYXRhLT5tX2luY29taW5nUG9seW1vcnBoaWNDYWxscy5iZWdpbigpLT51bmxp
bmsodm0oKSk7CiAgICAgfQogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiB9CkBAIC0xOTU3LDcgKzE5
NTcsNyBAQCBDb2RlQmxvY2sqIENvZGVCbG9jazo6bmV3UmVwbGFjZW1lbnQoKQogI2lmIEVOQUJM
RShKSVQpCiBDb2RlQmxvY2sqIENvZGVCbG9jazo6cmVwbGFjZW1lbnQoKQogewotICAgIGNvbnN0
IENsYXNzSW5mbyogY2xhc3NJbmZvID0gdGhpcy0+Y2xhc3NJbmZvKCp2bSgpKTsKKyAgICBjb25z
dCBDbGFzc0luZm8qIGNsYXNzSW5mbyA9IHRoaXMtPmNsYXNzSW5mbyh2bSgpKTsKIAogICAgIGlm
IChjbGFzc0luZm8gPT0gRnVuY3Rpb25Db2RlQmxvY2s6OmluZm8oKSkKICAgICAgICAgcmV0dXJu
IGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihvd25lckV4ZWN1dGFibGUoKSktPmNvZGVCbG9j
a0Zvcihpc0NvbnN0cnVjdG9yKCkgPyBDb2RlRm9yQ29uc3RydWN0IDogQ29kZUZvckNhbGwpOwpA
QCAtMTk3Nyw3ICsxOTc3LDcgQEAgQ29kZUJsb2NrKiBDb2RlQmxvY2s6OnJlcGxhY2VtZW50KCkK
IAogREZHOjpDYXBhYmlsaXR5TGV2ZWwgQ29kZUJsb2NrOjpjb21wdXRlQ2FwYWJpbGl0eUxldmVs
KCkKIHsKLSAgICBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbyA9IHRoaXMtPmNsYXNzSW5mbygq
dm0oKSk7CisgICAgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8gPSB0aGlzLT5jbGFzc0luZm8o
dm0oKSk7CiAKICAgICBpZiAoY2xhc3NJbmZvID09IEZ1bmN0aW9uQ29kZUJsb2NrOjppbmZvKCkp
IHsKICAgICAgICAgaWYgKGlzQ29uc3RydWN0b3IoKSkKQEAgLTIyMzEsNyArMjIzMSw3IEBAIHZv
aWQgQ29kZUJsb2NrOjpub3RpY2VJbmNvbWluZ0NhbGwoRXhlY1MKIAogICAgIC8vIFJlY3Vyc2l2
ZSBjYWxscyB3b24ndCBiZSBpbmxpbmVkLgogICAgIFJlY3Vyc2lvbkNoZWNrRnVuY3RvciBmdW5j
dG9yKGNhbGxlckZyYW1lLCB0aGlzLCBPcHRpb25zOjptYXhpbXVtSW5saW5pbmdEZXB0aCgpKTsK
LSAgICB2bSgpLT50b3BDYWxsRnJhbWUtPml0ZXJhdGUoZnVuY3Rvcik7CisgICAgdm0oKS50b3BD
YWxsRnJhbWUtPml0ZXJhdGUoZnVuY3Rvcik7CiAKICAgICBpZiAoZnVuY3Rvci5kaWRSZWN1cnNl
KCkpIHsKICAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VDYWxsTGluaygpKQpAQCAtMjk0OCw3
ICsyOTQ4LDcgQEAgU3RyaW5nIENvZGVCbG9jazo6bmFtZUZvclJlZ2lzdGVyKFZpcnR1YQogICAg
IGZvciAoYXV0byYgY29uc3RhbnRSZWdpc3RlciA6IG1fY29uc3RhbnRSZWdpc3RlcnMpIHsKICAg
ICAgICAgaWYgKGNvbnN0YW50UmVnaXN0ZXIuZ2V0KCkuaXNFbXB0eSgpKQogICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIGlmIChTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUgPSBqc0R5bmFt
aWNDYXN0PFN5bWJvbFRhYmxlKj4oKnZtKCksIGNvbnN0YW50UmVnaXN0ZXIuZ2V0KCkpKSB7Cisg
ICAgICAgIGlmIChTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUgPSBqc0R5bmFtaWNDYXN0PFN5bWJv
bFRhYmxlKj4odm0oKSwgY29uc3RhbnRSZWdpc3Rlci5nZXQoKSkpIHsKICAgICAgICAgICAgIENv
bmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoc3ltYm9sVGFibGUtPm1fbG9jayk7CiAgICAgICAgICAg
ICBhdXRvIGVuZCA9IHN5bWJvbFRhYmxlLT5lbmQobG9ja2VyKTsKICAgICAgICAgICAgIGZvciAo
YXV0byBwdHIgPSBzeW1ib2xUYWJsZS0+YmVnaW4obG9ja2VyKTsgcHRyICE9IGVuZDsgKytwdHIp
IHsKQEAgLTMxNzQsMTEgKzMxNzQsMTEgQEAgdm9pZCBDb2RlQmxvY2s6Omluc2VydEJhc2ljQmxv
Y2tCb3VuZGFyaQogICAgICAgICAvLyBtOiBvcF9wcm9maWxlX2NvbnRyb2xfZmxvdwogICAgICAg
ICBpZiAoYmFzaWNCbG9ja0VuZE9mZnNldCA8IGJhc2ljQmxvY2tTdGFydE9mZnNldCkgewogICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaSArIDEgPCBvZmZzZXRzTGVuZ3RoKTsgLy8gV2Ugc2hv
dWxkIG5ldmVyIGVuY291bnRlciBkdW1teSBibG9ja3MgYXQgdGhlIGVuZCBvZiBhIENvZGVCbG9j
ay4KLSAgICAgICAgICAgIG1ldGFkYXRhLm1fYmFzaWNCbG9ja0xvY2F0aW9uID0gdm0oKS0+Y29u
dHJvbEZsb3dQcm9maWxlcigpLT5kdW1teUJhc2ljQmxvY2soKTsKKyAgICAgICAgICAgIG1ldGFk
YXRhLm1fYmFzaWNCbG9ja0xvY2F0aW9uID0gdm0oKS5jb250cm9sRmxvd1Byb2ZpbGVyKCktPmR1
bW15QmFzaWNCbG9jaygpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAg
ICAgICBCYXNpY0Jsb2NrTG9jYXRpb24qIGJhc2ljQmxvY2tMb2NhdGlvbiA9IHZtKCktPmNvbnRy
b2xGbG93UHJvZmlsZXIoKS0+Z2V0QmFzaWNCbG9ja0xvY2F0aW9uKG93bmVyRXhlY3V0YWJsZSgp
LT5zb3VyY2VJRCgpLCBiYXNpY0Jsb2NrU3RhcnRPZmZzZXQsIGJhc2ljQmxvY2tFbmRPZmZzZXQp
OworICAgICAgICBCYXNpY0Jsb2NrTG9jYXRpb24qIGJhc2ljQmxvY2tMb2NhdGlvbiA9IHZtKCku
Y29udHJvbEZsb3dQcm9maWxlcigpLT5nZXRCYXNpY0Jsb2NrTG9jYXRpb24ob3duZXJFeGVjdXRh
YmxlKCktPnNvdXJjZUlEKCksIGJhc2ljQmxvY2tTdGFydE9mZnNldCwgYmFzaWNCbG9ja0VuZE9m
ZnNldCk7CiAKICAgICAgICAgLy8gRmluZCBhbGwgZnVuY3Rpb25zIHRoYXQgYXJlIGVuY2xvc2Vk
IHdpdGhpbiB0aGUgcmFuZ2U6IFtiYXNpY0Jsb2NrU3RhcnRPZmZzZXQsIGJhc2ljQmxvY2tFbmRP
ZmZzZXRdCiAgICAgICAgIC8vIGFuZCBpbnNlcnQgdGhlc2UgZnVuY3Rpb25zJyBzdGFydC9lbmQg
b2Zmc2V0cyBhcyBnYXBzIGluIHRoZSBjdXJyZW50IEJhc2ljQmxvY2tMb2NhdGlvbi4KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDI0
OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29y
a2luZyBjb3B5KQpAQCAtMTIwLDggKzEyMCw4IEBAIHB1YmxpYzoKICAgICBERUNMQVJFX0lORk87
CiAKIHByb3RlY3RlZDoKLSAgICBDb2RlQmxvY2soVk0qLCBTdHJ1Y3R1cmUqLCBDb3B5UGFyc2Vk
QmxvY2tUYWcsIENvZGVCbG9jayYgb3RoZXIpOwotICAgIENvZGVCbG9jayhWTSosIFN0cnVjdHVy
ZSosIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rZWRDb2RlQmxvY2sq
LCBKU1Njb3BlKik7CisgICAgQ29kZUJsb2NrKFZNJiwgU3RydWN0dXJlKiwgQ29weVBhcnNlZEJs
b2NrVGFnLCBDb2RlQmxvY2smIG90aGVyKTsKKyAgICBDb2RlQmxvY2soVk0mLCBTdHJ1Y3R1cmUq
LCBTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGlua2VkQ29kZUJsb2NrKiwg
SlNTY29wZSopOwogCiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIENvcHlQYXJzZWRCbG9j
a1RhZywgQ29kZUJsb2NrJiBvdGhlcik7CiAgICAgYm9vbCBmaW5pc2hDcmVhdGlvbihWTSYsIFNj
cmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rZWRDb2RlQmxvY2sqLCBKU1Nj
b3BlKik7CkBAIC00MzYsNyArNDM2LDcgQEAgcHVibGljOgogICAgIAogICAgIEV4ZWN1dGFibGVU
b0NvZGVCbG9ja0VkZ2UqIG93bmVyRWRnZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3duZXJFZGdlLmdl
dCgpOyB9CiAKLSAgICBWTSogdm0oKSBjb25zdCB7IHJldHVybiBtX3ZtOyB9CisgICAgVk0mIHZt
KCkgY29uc3QgeyByZXR1cm4gKm1fdm07IH0KIAogICAgIFZpcnR1YWxSZWdpc3RlciB0aGlzUmVn
aXN0ZXIoKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+dGhpc1JlZ2lzdGVyKCk7IH0K
IApAQCAtNDcyLDEzICs0NzIsMTMgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIG51bWJlck9mQXJn
dW1lbnRWYWx1ZVByb2ZpbGVzKCkKICAgICB7CiAgICAgICAgIEFTU0VSVChtX251bVBhcmFtZXRl
cnMgPj0gMCk7Ci0gICAgICAgIEFTU0VSVChtX2FyZ3VtZW50VmFsdWVQcm9maWxlcy5zaXplKCkg
PT0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fbnVtUGFyYW1ldGVycykgfHwgIXZtKCktPmNhblVz
ZUpJVCgpKTsKKyAgICAgICAgQVNTRVJUKG1fYXJndW1lbnRWYWx1ZVByb2ZpbGVzLnNpemUoKSA9
PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9udW1QYXJhbWV0ZXJzKSB8fCAhdm0oKS5jYW5Vc2VK
SVQoKSk7CiAgICAgICAgIHJldHVybiBtX2FyZ3VtZW50VmFsdWVQcm9maWxlcy5zaXplKCk7CiAg
ICAgfQogCiAgICAgVmFsdWVQcm9maWxlJiB2YWx1ZVByb2ZpbGVGb3JBcmd1bWVudCh1bnNpZ25l
ZCBhcmd1bWVudEluZGV4KQogICAgIHsKLSAgICAgICAgQVNTRVJUKHZtKCktPmNhblVzZUpJVCgp
KTsgLy8gVGhpcyBpcyBvbmx5IGNhbGxlZCBmcm9tIHRoZSB2YXJpb3VzIEpJVCBjb21waWxlcnMg
b3IgcGxhY2VzIHRoYXQgZmlyc3QgY2hlY2sgbnVtYmVyT2ZBcmd1bWVudFZhbHVlUHJvZmlsZXMg
YmVmb3JlIGNhbGxpbmcgdGhpcy4KKyAgICAgICAgQVNTRVJUKHZtKCkuY2FuVXNlSklUKCkpOyAv
LyBUaGlzIGlzIG9ubHkgY2FsbGVkIGZyb20gdGhlIHZhcmlvdXMgSklUIGNvbXBpbGVycyBvciBw
bGFjZXMgdGhhdCBmaXJzdCBjaGVjayBudW1iZXJPZkFyZ3VtZW50VmFsdWVQcm9maWxlcyBiZWZv
cmUgY2FsbGluZyB0aGlzLgogICAgICAgICBWYWx1ZVByb2ZpbGUmIHJlc3VsdCA9IG1fYXJndW1l
bnRWYWx1ZVByb2ZpbGVzW2FyZ3VtZW50SW5kZXhdOwogICAgICAgICByZXR1cm4gcmVzdWx0Owog
ICAgIH0KQEAgLTk3Miw2ICs5NzIsOCBAQCBwcml2YXRlOgogICAgIFdyaXRlQmFycmllcjxVbmxp
bmtlZENvZGVCbG9jaz4gbV91bmxpbmtlZENvZGU7CiAgICAgV3JpdGVCYXJyaWVyPFNjcmlwdEV4
ZWN1dGFibGU+IG1fb3duZXJFeGVjdXRhYmxlOwogICAgIFdyaXRlQmFycmllcjxFeGVjdXRhYmxl
VG9Db2RlQmxvY2tFZGdlPiBtX293bmVyRWRnZTsKKyAgICAvLyBtX3ZtIG11c3QgYmUgYSBwb2lu
dGVyIChpbnN0ZWFkIG9mIGEgcmVmZXJlbmNlKSBiZWNhdXNlIHRoZSBKU0NMTEludE9mZnNldHNF
eHRyYWN0b3IKKyAgICAvLyBjYW5ub3QgaGFuZGxlIGl0IGJlaW5nIGEgcmVmZXJlbmNlLgogICAg
IFZNKiBtX3ZtOwogCiAgICAgY29uc3Qgdm9pZCogbV9pbnN0cnVjdGlvbnNSYXdQb2ludGVyIHsg
bnVsbHB0ciB9OwpAQCAtMTA2MSw3ICsxMDYzLDcgQEAgRXhjZXB0aW9uKiBTY3JpcHRFeGVjdXRh
YmxlOjpwcmVwYXJlRm9yRQogI2RlZmluZSBDT0RFQkxPQ0tfTE9HX0VWRU5UKGNvZGVCbG9jaywg
c3VtbWFyeSwgZGV0YWlscykgXAogICAgIGRvIHsgXAogICAgICAgICBpZiAoY29kZUJsb2NrKSBc
Ci0gICAgICAgICAgICAoY29kZUJsb2NrLT52bSgpLT5sb2dFdmVudChjb2RlQmxvY2ssIHN1bW1h
cnksIFsmXSAoKSB7IHJldHVybiB0b0NTdHJpbmcgZGV0YWlsczsgfSkpOyBcCisgICAgICAgICAg
ICAoY29kZUJsb2NrLT52bSgpLmxvZ0V2ZW50KGNvZGVCbG9jaywgc3VtbWFyeSwgWyZdICgpIHsg
cmV0dXJuIHRvQ1N0cmluZyBkZXRhaWxzOyB9KSk7IFwKICAgICB9IHdoaWxlICgwKQogCiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EZWZlcnJlZFNvdXJjZUR1bXAuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EZWZlcnJlZFNv
dXJjZUR1bXAuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvRGVmZXJyZWRTb3VyY2VEdW1wLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMzLDE0
ICszMywxNCBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIERlZmVycmVkU291cmNlRHVtcDo6RGVmZXJy
ZWRTb3VyY2VEdW1wKENvZGVCbG9jayogY29kZUJsb2NrKQotICAgIDogbV9jb2RlQmxvY2soKmNv
ZGVCbG9jay0+dm0oKSwgY29kZUJsb2NrKQorICAgIDogbV9jb2RlQmxvY2soY29kZUJsb2NrLT52
bSgpLCBjb2RlQmxvY2spCiAgICAgLCBtX3Jvb3RKSVRUeXBlKEpJVFR5cGU6Ok5vbmUpCiB7CiB9
CiAKIERlZmVycmVkU291cmNlRHVtcDo6RGVmZXJyZWRTb3VyY2VEdW1wKENvZGVCbG9jayogY29k
ZUJsb2NrLCBDb2RlQmxvY2sqIHJvb3RDb2RlQmxvY2ssIEpJVFR5cGUgcm9vdEpJVFR5cGUsIHVu
c2lnbmVkIGNhbGxlckJ5dGVjb2RlSW5kZXgpCi0gICAgOiBtX2NvZGVCbG9jaygqY29kZUJsb2Nr
LT52bSgpLCBjb2RlQmxvY2spCi0gICAgLCBtX3Jvb3RDb2RlQmxvY2soKmNvZGVCbG9jay0+dm0o
KSwgcm9vdENvZGVCbG9jaykKKyAgICA6IG1fY29kZUJsb2NrKGNvZGVCbG9jay0+dm0oKSwgY29k
ZUJsb2NrKQorICAgICwgbV9yb290Q29kZUJsb2NrKGNvZGVCbG9jay0+dm0oKSwgcm9vdENvZGVC
bG9jaykKICAgICAsIG1fcm9vdEpJVFR5cGUocm9vdEpJVFR5cGUpCiAgICAgLCBtX2NhbGxlckJ5
dGVjb2RlSW5kZXgoY2FsbGVyQnl0ZWNvZGVJbmRleCkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9FdmFsQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V2YWxDb2RlQmxvY2suaAkocmV2aXNpb24gMjQ5MTI4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V2YWxDb2RlQmxvY2suaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAx
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDgg
Q2FtZXJvbiBad2FyaWNoIDxjd3p3YXJpY2hAdXdhdGVybG9vLmNhPgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dApAQCAtNDQsMTkgKzQ0LDE5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuICZ2bS5jb2RlQmxv
Y2tTcGFjZS5zcGFjZTsKICAgICB9CiAKLSAgICBzdGF0aWMgRXZhbENvZGVCbG9jayogY3JlYXRl
KFZNKiB2bSwgQ29weVBhcnNlZEJsb2NrVGFnLCBFdmFsQ29kZUJsb2NrJiBvdGhlcikKKyAgICBz
dGF0aWMgRXZhbENvZGVCbG9jayogY3JlYXRlKFZNJiB2bSwgQ29weVBhcnNlZEJsb2NrVGFnLCBF
dmFsQ29kZUJsb2NrJiBvdGhlcikKICAgICB7Ci0gICAgICAgIEV2YWxDb2RlQmxvY2sqIGluc3Rh
bmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8RXZhbENvZGVCbG9jaz4odm0tPmhlYXAp
KQotICAgICAgICAgICAgRXZhbENvZGVCbG9jayh2bSwgdm0tPmV2YWxDb2RlQmxvY2tTdHJ1Y3R1
cmUuZ2V0KCksIENvcHlQYXJzZWRCbG9jaywgb3RoZXIpOwotICAgICAgICBpbnN0YW5jZS0+Zmlu
aXNoQ3JlYXRpb24oKnZtLCBDb3B5UGFyc2VkQmxvY2ssIG90aGVyKTsKKyAgICAgICAgRXZhbENv
ZGVCbG9jayogaW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxFdmFsQ29kZUJs
b2NrPih2bS5oZWFwKSkKKyAgICAgICAgICAgIEV2YWxDb2RlQmxvY2sodm0sIHZtLmV2YWxDb2Rl
QmxvY2tTdHJ1Y3R1cmUuZ2V0KCksIENvcHlQYXJzZWRCbG9jaywgb3RoZXIpOworICAgICAgICBp
bnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24odm0sIENvcHlQYXJzZWRCbG9jaywgb3RoZXIpOwogICAg
ICAgICByZXR1cm4gaW5zdGFuY2U7CiAgICAgfQogCi0gICAgc3RhdGljIEV2YWxDb2RlQmxvY2sq
IGNyZWF0ZShWTSogdm0sIEV2YWxFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGlua2Vk
RXZhbENvZGVCbG9jayogdW5saW5rZWRDb2RlQmxvY2ssIEpTU2NvcGUqIHNjb3BlKQorICAgIHN0
YXRpYyBFdmFsQ29kZUJsb2NrKiBjcmVhdGUoVk0mIHZtLCBFdmFsRXhlY3V0YWJsZSogb3duZXJF
eGVjdXRhYmxlLCBVbmxpbmtlZEV2YWxDb2RlQmxvY2sqIHVubGlua2VkQ29kZUJsb2NrLCBKU1Nj
b3BlKiBzY29wZSkKICAgICB7Ci0gICAgICAgIEV2YWxDb2RlQmxvY2sqIGluc3RhbmNlID0gbmV3
IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8RXZhbENvZGVCbG9jaz4odm0tPmhlYXApKQotICAgICAg
ICAgICAgRXZhbENvZGVCbG9jayh2bSwgdm0tPmV2YWxDb2RlQmxvY2tTdHJ1Y3R1cmUuZ2V0KCks
IG93bmVyRXhlY3V0YWJsZSwgdW5saW5rZWRDb2RlQmxvY2ssIHNjb3BlKTsKLSAgICAgICAgaWYg
KCFpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24oKnZtLCBvd25lckV4ZWN1dGFibGUsIHVubGlua2Vk
Q29kZUJsb2NrLCBzY29wZSkpCisgICAgICAgIEV2YWxDb2RlQmxvY2sqIGluc3RhbmNlID0gbmV3
IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8RXZhbENvZGVCbG9jaz4odm0uaGVhcCkpCisgICAgICAg
ICAgICBFdmFsQ29kZUJsb2NrKHZtLCB2bS5ldmFsQ29kZUJsb2NrU3RydWN0dXJlLmdldCgpLCBv
d25lckV4ZWN1dGFibGUsIHVubGlua2VkQ29kZUJsb2NrLCBzY29wZSk7CisgICAgICAgIGlmICgh
aW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKHZtLCBvd25lckV4ZWN1dGFibGUsIHVubGlua2VkQ29k
ZUJsb2NrLCBzY29wZSkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgcmV0
dXJuIGluc3RhbmNlOwogICAgIH0KQEAgLTY5LDEyICs2OSwxMiBAQCBwdWJsaWM6CiAgICAgVW5s
aW5rZWRFdmFsQ29kZUJsb2NrKiB1bmxpbmtlZEV2YWxDb2RlQmxvY2soKSBjb25zdCB7IHJldHVy
biBqc0Nhc3Q8VW5saW5rZWRFdmFsQ29kZUJsb2NrKj4odW5saW5rZWRDb2RlQmxvY2soKSk7IH0K
IAogcHJpdmF0ZToKLSAgICBFdmFsQ29kZUJsb2NrKFZNKiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIENvcHlQYXJzZWRCbG9ja1RhZywgRXZhbENvZGVCbG9jayYgb3RoZXIpCisgICAgRXZhbENv
ZGVCbG9jayhWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBDb3B5UGFyc2VkQmxvY2tUYWcs
IEV2YWxDb2RlQmxvY2smIG90aGVyKQogICAgICAgICA6IEdsb2JhbENvZGVCbG9jayh2bSwgc3Ry
dWN0dXJlLCBDb3B5UGFyc2VkQmxvY2ssIG90aGVyKQogICAgIHsKICAgICB9CiAgICAgICAgIAot
ICAgIEV2YWxDb2RlQmxvY2soVk0qIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgRXZhbEV4ZWN1
dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rZWRFdmFsQ29kZUJsb2NrKiB1bmxpbmtlZENv
ZGVCbG9jaywgSlNTY29wZSogc2NvcGUpCisgICAgRXZhbENvZGVCbG9jayhWTSYgdm0sIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBFdmFsRXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmtl
ZEV2YWxDb2RlQmxvY2sqIHVubGlua2VkQ29kZUJsb2NrLCBKU1Njb3BlKiBzY29wZSkKICAgICAg
ICAgOiBHbG9iYWxDb2RlQmxvY2sodm0sIHN0cnVjdHVyZSwgb3duZXJFeGVjdXRhYmxlLCB1bmxp
bmtlZENvZGVCbG9jaywgc2NvcGUpCiAgICAgewogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9GdW5jdGlvbkNvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9GdW5jdGlvbkNvZGVCbG9jay5oCShyZXZpc2lvbiAy
NDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRnVuY3Rpb25Db2RlQmxv
Y2suaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDgtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDgtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmln
aHQgKEMpIDIwMDggQ2FtZXJvbiBad2FyaWNoIDxjd3p3YXJpY2hAdXdhdGVybG9vLmNhPgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dApAQCAtNDUsMTkgKzQ1LDE5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJu
ICZ2bS5jb2RlQmxvY2tTcGFjZS5zcGFjZTsKICAgICB9CiAKLSAgICBzdGF0aWMgRnVuY3Rpb25D
b2RlQmxvY2sqIGNyZWF0ZShWTSogdm0sIENvcHlQYXJzZWRCbG9ja1RhZywgRnVuY3Rpb25Db2Rl
QmxvY2smIG90aGVyKQorICAgIHN0YXRpYyBGdW5jdGlvbkNvZGVCbG9jayogY3JlYXRlKFZNJiB2
bSwgQ29weVBhcnNlZEJsb2NrVGFnLCBGdW5jdGlvbkNvZGVCbG9jayYgb3RoZXIpCiAgICAgewot
ICAgICAgICBGdW5jdGlvbkNvZGVCbG9jayogaW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFsbG9j
YXRlQ2VsbDxGdW5jdGlvbkNvZGVCbG9jaz4odm0tPmhlYXApKQotICAgICAgICAgICAgRnVuY3Rp
b25Db2RlQmxvY2sodm0sIHZtLT5mdW5jdGlvbkNvZGVCbG9ja1N0cnVjdHVyZS5nZXQoKSwgQ29w
eVBhcnNlZEJsb2NrLCBvdGhlcik7Ci0gICAgICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbigq
dm0sIENvcHlQYXJzZWRCbG9jaywgb3RoZXIpOworICAgICAgICBGdW5jdGlvbkNvZGVCbG9jayog
aW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxGdW5jdGlvbkNvZGVCbG9jaz4o
dm0uaGVhcCkpCisgICAgICAgICAgICBGdW5jdGlvbkNvZGVCbG9jayh2bSwgdm0uZnVuY3Rpb25D
b2RlQmxvY2tTdHJ1Y3R1cmUuZ2V0KCksIENvcHlQYXJzZWRCbG9jaywgb3RoZXIpOworICAgICAg
ICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24odm0sIENvcHlQYXJzZWRCbG9jaywgb3RoZXIpOwog
ICAgICAgICByZXR1cm4gaW5zdGFuY2U7CiAgICAgfQogCi0gICAgc3RhdGljIEZ1bmN0aW9uQ29k
ZUJsb2NrKiBjcmVhdGUoVk0qIHZtLCBGdW5jdGlvbkV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJs
ZSwgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayogdW5saW5rZWRDb2RlQmxvY2ssIEpTU2NvcGUq
IHNjb3BlKQorICAgIHN0YXRpYyBGdW5jdGlvbkNvZGVCbG9jayogY3JlYXRlKFZNJiB2bSwgRnVu
Y3Rpb25FeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGlua2VkRnVuY3Rpb25Db2RlQmxv
Y2sqIHVubGlua2VkQ29kZUJsb2NrLCBKU1Njb3BlKiBzY29wZSkKICAgICB7Ci0gICAgICAgIEZ1
bmN0aW9uQ29kZUJsb2NrKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEZ1
bmN0aW9uQ29kZUJsb2NrPih2bS0+aGVhcCkpCi0gICAgICAgICAgICBGdW5jdGlvbkNvZGVCbG9j
ayh2bSwgdm0tPmZ1bmN0aW9uQ29kZUJsb2NrU3RydWN0dXJlLmdldCgpLCBvd25lckV4ZWN1dGFi
bGUsIHVubGlua2VkQ29kZUJsb2NrLCBzY29wZSk7Ci0gICAgICAgIGlmICghaW5zdGFuY2UtPmZp
bmlzaENyZWF0aW9uKCp2bSwgb3duZXJFeGVjdXRhYmxlLCB1bmxpbmtlZENvZGVCbG9jaywgc2Nv
cGUpKQorICAgICAgICBGdW5jdGlvbkNvZGVCbG9jayogaW5zdGFuY2UgPSBuZXcgKE5vdE51bGws
IGFsbG9jYXRlQ2VsbDxGdW5jdGlvbkNvZGVCbG9jaz4odm0uaGVhcCkpCisgICAgICAgICAgICBG
dW5jdGlvbkNvZGVCbG9jayh2bSwgdm0uZnVuY3Rpb25Db2RlQmxvY2tTdHJ1Y3R1cmUuZ2V0KCks
IG93bmVyRXhlY3V0YWJsZSwgdW5saW5rZWRDb2RlQmxvY2ssIHNjb3BlKTsKKyAgICAgICAgaWYg
KCFpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24odm0sIG93bmVyRXhlY3V0YWJsZSwgdW5saW5rZWRD
b2RlQmxvY2ssIHNjb3BlKSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICBy
ZXR1cm4gaW5zdGFuY2U7CiAgICAgfQpAQCAtNjgsMTIgKzY4LDEyIEBAIHB1YmxpYzoKICAgICB9
CiAKIHByaXZhdGU6Ci0gICAgRnVuY3Rpb25Db2RlQmxvY2soVk0qIHZtLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgQ29weVBhcnNlZEJsb2NrVGFnLCBGdW5jdGlvbkNvZGVCbG9jayYgb3RoZXIpCisg
ICAgRnVuY3Rpb25Db2RlQmxvY2soVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQ29weVBh
cnNlZEJsb2NrVGFnLCBGdW5jdGlvbkNvZGVCbG9jayYgb3RoZXIpCiAgICAgICAgIDogQ29kZUJs
b2NrKHZtLCBzdHJ1Y3R1cmUsIENvcHlQYXJzZWRCbG9jaywgb3RoZXIpCiAgICAgewogICAgIH0K
IAotICAgIEZ1bmN0aW9uQ29kZUJsb2NrKFZNKiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEZ1
bmN0aW9uRXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJs
b2NrKiB1bmxpbmtlZENvZGVCbG9jaywgSlNTY29wZSogc2NvcGUpCisgICAgRnVuY3Rpb25Db2Rl
QmxvY2soVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgRnVuY3Rpb25FeGVjdXRhYmxlKiBv
d25lckV4ZWN1dGFibGUsIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2sqIHVubGlua2VkQ29kZUJs
b2NrLCBKU1Njb3BlKiBzY29wZSkKICAgICAgICAgOiBDb2RlQmxvY2sodm0sIHN0cnVjdHVyZSwg
b3duZXJFeGVjdXRhYmxlLCB1bmxpbmtlZENvZGVCbG9jaywgc2NvcGUpCiAgICAgewogICAgIH0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1
cy5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9HZXRCeUlkU3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQsNyArNTQsNyBAQCBib29s
IEdldEJ5SWRTdGF0dXM6OmFwcGVuZFZhcmlhbnQoY29uc3QgCiAKIEdldEJ5SWRTdGF0dXMgR2V0
QnlJZFN0YXR1czo6Y29tcHV0ZUZyb21MTEludChDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIHVu
c2lnbmVkIGJ5dGVjb2RlSW5kZXgsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCiB7Ci0gICAgVk0m
IHZtID0gKnByb2ZpbGVkQmxvY2stPnZtKCk7CisgICAgVk0mIHZtID0gcHJvZmlsZWRCbG9jay0+
dm0oKTsKICAgICAKICAgICBhdXRvIGluc3RydWN0aW9uID0gcHJvZmlsZWRCbG9jay0+aW5zdHJ1
Y3Rpb25zKCkuYXQoYnl0ZWNvZGVJbmRleCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9HbG9iYWxDb2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvR2xvYmFsQ29kZUJsb2NrLmgJKHJldmlzaW9uIDI0OTEyOCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HbG9iYWxDb2RlQmxvY2suaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAx
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDgg
Q2FtZXJvbiBad2FyaWNoIDxjd3p3YXJpY2hAdXdhdGVybG9vLmNhPgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dApAQCAtNDAsMTIgKzQwLDEyIEBAIGNsYXNzIEdsb2JhbENvZGVCbG9jayA6IHB1YmxpYyBDb2Rl
QmxvY2sKICAgICB0eXBlZGVmIENvZGVCbG9jayBCYXNlOwogCiBwcm90ZWN0ZWQ6Ci0gICAgR2xv
YmFsQ29kZUJsb2NrKFZNKiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIENvcHlQYXJzZWRCbG9j
a1RhZywgR2xvYmFsQ29kZUJsb2NrJiBvdGhlcikKKyAgICBHbG9iYWxDb2RlQmxvY2soVk0mIHZt
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQ29weVBhcnNlZEJsb2NrVGFnLCBHbG9iYWxDb2RlQmxv
Y2smIG90aGVyKQogICAgICAgICA6IENvZGVCbG9jayh2bSwgc3RydWN0dXJlLCBDb3B5UGFyc2Vk
QmxvY2ssIG90aGVyKQogICAgIHsKICAgICB9CiAKLSAgICBHbG9iYWxDb2RlQmxvY2soVk0qIHZt
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxl
LCBVbmxpbmtlZENvZGVCbG9jayogdW5saW5rZWRDb2RlQmxvY2ssIEpTU2NvcGUqIHNjb3BlKQor
ICAgIEdsb2JhbENvZGVCbG9jayhWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBTY3JpcHRF
eGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGlua2VkQ29kZUJsb2NrKiB1bmxpbmtlZENv
ZGVCbG9jaywgSlNTY29wZSogc2NvcGUpCiAgICAgICAgIDogQ29kZUJsb2NrKHZtLCBzdHJ1Y3R1
cmUsIG93bmVyRXhlY3V0YWJsZSwgdW5saW5rZWRDb2RlQmxvY2ssIHNjb3BlKQogICAgIHsKICAg
ICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTW9kdWxlUHJvZ3JhbUNv
ZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9N
b2R1bGVQcm9ncmFtQ29kZUJsb2NrLmgJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Nb2R1bGVQcm9ncmFtQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTkgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA4IENhbWVy
b24gWndhcmljaCA8Y3d6d2FyaWNoQHV3YXRlcmxvby5jYT4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAg
LTQ1LDE5ICs0NSwxOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiAmdm0uY29kZUJsb2NrU3Bh
Y2Uuc3BhY2U7CiAgICAgfQogCi0gICAgc3RhdGljIE1vZHVsZVByb2dyYW1Db2RlQmxvY2sqIGNy
ZWF0ZShWTSogdm0sIENvcHlQYXJzZWRCbG9ja1RhZywgTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayYg
b3RoZXIpCisgICAgc3RhdGljIE1vZHVsZVByb2dyYW1Db2RlQmxvY2sqIGNyZWF0ZShWTSYgdm0s
IENvcHlQYXJzZWRCbG9ja1RhZywgTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayYgb3RoZXIpCiAgICAg
ewotICAgICAgICBNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVs
bCwgYWxsb2NhdGVDZWxsPE1vZHVsZVByb2dyYW1Db2RlQmxvY2s+KHZtLT5oZWFwKSkKLSAgICAg
ICAgICAgIE1vZHVsZVByb2dyYW1Db2RlQmxvY2sodm0sIHZtLT5tb2R1bGVQcm9ncmFtQ29kZUJs
b2NrU3RydWN0dXJlLmdldCgpLCBDb3B5UGFyc2VkQmxvY2ssIG90aGVyKTsKLSAgICAgICAgaW5z
dGFuY2UtPmZpbmlzaENyZWF0aW9uKCp2bSwgQ29weVBhcnNlZEJsb2NrLCBvdGhlcik7CisgICAg
ICAgIE1vZHVsZVByb2dyYW1Db2RlQmxvY2sqIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxv
Y2F0ZUNlbGw8TW9kdWxlUHJvZ3JhbUNvZGVCbG9jaz4odm0uaGVhcCkpCisgICAgICAgICAgICBN
b2R1bGVQcm9ncmFtQ29kZUJsb2NrKHZtLCB2bS5tb2R1bGVQcm9ncmFtQ29kZUJsb2NrU3RydWN0
dXJlLmdldCgpLCBDb3B5UGFyc2VkQmxvY2ssIG90aGVyKTsKKyAgICAgICAgaW5zdGFuY2UtPmZp
bmlzaENyZWF0aW9uKHZtLCBDb3B5UGFyc2VkQmxvY2ssIG90aGVyKTsKICAgICAgICAgcmV0dXJu
IGluc3RhbmNlOwogICAgIH0KIAotICAgIHN0YXRpYyBNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKiBj
cmVhdGUoVk0qIHZtLCBNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBV
bmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2sqIHVubGlua2VkQ29kZUJsb2NrLCBKU1Njb3Bl
KiBzY29wZSkKKyAgICBzdGF0aWMgTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayogY3JlYXRlKFZNJiB2
bSwgTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rZWRNb2R1
bGVQcm9ncmFtQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9jaywgSlNTY29wZSogc2NvcGUpCiAg
ICAgewotICAgICAgICBNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKiBpbnN0YW5jZSA9IG5ldyAoTm90
TnVsbCwgYWxsb2NhdGVDZWxsPE1vZHVsZVByb2dyYW1Db2RlQmxvY2s+KHZtLT5oZWFwKSkKLSAg
ICAgICAgICAgIE1vZHVsZVByb2dyYW1Db2RlQmxvY2sodm0sIHZtLT5tb2R1bGVQcm9ncmFtQ29k
ZUJsb2NrU3RydWN0dXJlLmdldCgpLCBvd25lckV4ZWN1dGFibGUsIHVubGlua2VkQ29kZUJsb2Nr
LCBzY29wZSk7Ci0gICAgICAgIGlmICghaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKCp2bSwgb3du
ZXJFeGVjdXRhYmxlLCB1bmxpbmtlZENvZGVCbG9jaywgc2NvcGUpKQorICAgICAgICBNb2R1bGVQ
cm9ncmFtQ29kZUJsb2NrKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPE1v
ZHVsZVByb2dyYW1Db2RlQmxvY2s+KHZtLmhlYXApKQorICAgICAgICAgICAgTW9kdWxlUHJvZ3Jh
bUNvZGVCbG9jayh2bSwgdm0ubW9kdWxlUHJvZ3JhbUNvZGVCbG9ja1N0cnVjdHVyZS5nZXQoKSwg
b3duZXJFeGVjdXRhYmxlLCB1bmxpbmtlZENvZGVCbG9jaywgc2NvcGUpOworICAgICAgICBpZiAo
IWluc3RhbmNlLT5maW5pc2hDcmVhdGlvbih2bSwgb3duZXJFeGVjdXRhYmxlLCB1bmxpbmtlZENv
ZGVCbG9jaywgc2NvcGUpKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIHJl
dHVybiBpbnN0YW5jZTsKICAgICB9CkBAIC02OCwxMiArNjgsMTIgQEAgcHVibGljOgogICAgIH0K
IAogcHJpdmF0ZToKLSAgICBNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKFZNKiB2bSwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIENvcHlQYXJzZWRCbG9ja1RhZywgTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayYg
b3RoZXIpCisgICAgTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayhWTSYgdm0sIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBDb3B5UGFyc2VkQmxvY2tUYWcsIE1vZHVsZVByb2dyYW1Db2RlQmxvY2smIG90aGVy
KQogICAgICAgICA6IEdsb2JhbENvZGVCbG9jayh2bSwgc3RydWN0dXJlLCBDb3B5UGFyc2VkQmxv
Y2ssIG90aGVyKQogICAgIHsKICAgICB9CiAKLSAgICBNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKFZN
KiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlKiBvd25l
ckV4ZWN1dGFibGUsIFVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayogdW5saW5rZWRDb2Rl
QmxvY2ssIEpTU2NvcGUqIHNjb3BlKQorICAgIE1vZHVsZVByb2dyYW1Db2RlQmxvY2soVk0mIHZt
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUqIG93bmVyRXhl
Y3V0YWJsZSwgVW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9j
aywgSlNTY29wZSogc2NvcGUpCiAgICAgICAgIDogR2xvYmFsQ29kZUJsb2NrKHZtLCBzdHJ1Y3R1
cmUsIG93bmVyRXhlY3V0YWJsZSwgdW5saW5rZWRDb2RlQmxvY2ssIHNjb3BlKQogICAgIHsKICAg
ICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0QWxsb2NhdGlv
blByb2ZpbGVJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL09iamVjdEFsbG9jYXRpb25Qcm9maWxlSW5saW5lcy5oCShyZXZpc2lvbiAyNDkxMjgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0QWxsb2NhdGlvblByb2Zp
bGVJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTQ2LDcgKzE0Niw3IEBAIEFMV0FZU19JTkxJTkUg
dW5zaWduZWQgT2JqZWN0QWxsb2NhdGlvblAKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBzaXpl
X3QgY291bnQgPSAwOwotICAgIFByb3BlcnR5TmFtZUFycmF5IHByb3BlcnR5TmFtZUFycmF5KCZ2
bSwgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5nc0FuZFN5bWJvbHMsIFByaXZhdGVTeW1ib2xNb2Rl
OjpJbmNsdWRlKTsKKyAgICBQcm9wZXJ0eU5hbWVBcnJheSBwcm9wZXJ0eU5hbWVBcnJheSh2bSwg
UHJvcGVydHlOYW1lTW9kZTo6U3RyaW5nc0FuZFN5bWJvbHMsIFByaXZhdGVTeW1ib2xNb2RlOjpJ
bmNsdWRlKTsKICAgICBwcm90b3R5cGUtPnN0cnVjdHVyZSh2bSktPmdldFByb3BlcnR5TmFtZXNG
cm9tU3RydWN0dXJlKHZtLCBwcm9wZXJ0eU5hbWVBcnJheSwgRW51bWVyYXRpb25Nb2RlKCkpOwog
ICAgIFByb3BlcnR5TmFtZUFycmF5RGF0YTo6UHJvcGVydHlOYW1lVmVjdG9yJiBwcm9wZXJ0eU5h
bWVWZWN0b3IgPSBwcm9wZXJ0eU5hbWVBcnJheS5kYXRhKCktPnByb3BlcnR5TmFtZVZlY3Rvcigp
OwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcHJvcGVydHlOYW1lVmVjdG9yLnNpemUoKTsg
KytpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seVByb3RvQWNj
ZXNzQ2hhaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Qb2x5UHJvdG9BY2Nlc3NDaGFpbi5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5UHJvdG9BY2Nlc3NDaGFpbi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtNDAsNyArNDAsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8UG9seVByb3RvQWNjZXNzQ2hhaW4+
IFBvCiBzdGQ6OnVuaXF1ZV9wdHI8UG9seVByb3RvQWNjZXNzQ2hhaW4+IFBvbHlQcm90b0FjY2Vz
c0NoYWluOjpjcmVhdGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDZWxsKiBiYXNl
LCBKU09iamVjdCogdGFyZ2V0LCBib29sJiB1c2VzUG9seVByb3RvKQogewogICAgIEpTQ2VsbCog
Y3VycmVudCA9IGJhc2U7Ci0gICAgVk0mIHZtID0gKmJhc2UtPnZtKCk7CisgICAgVk0mIHZtID0g
YmFzZS0+dm0oKTsKIAogICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Byb2dyYW1Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJvZ3JhbUNvZGVCbG9jay5oCShyZXZpc2lv
biAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJvZ3JhbUNvZGVC
bG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwOC0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwOC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHly
aWdodCAoQykgMjAwOCBDYW1lcm9uIFp3YXJpY2ggPGN3endhcmljaEB1d2F0ZXJsb28uY2E+CiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CkBAIC00NSwxOSArNDUsMTkgQEAgcHVibGljOgogICAgICAgICByZXR1
cm4gJnZtLmNvZGVCbG9ja1NwYWNlLnNwYWNlOwogICAgIH0KIAotICAgIHN0YXRpYyBQcm9ncmFt
Q29kZUJsb2NrKiBjcmVhdGUoVk0qIHZtLCBDb3B5UGFyc2VkQmxvY2tUYWcsIFByb2dyYW1Db2Rl
QmxvY2smIG90aGVyKQorICAgIHN0YXRpYyBQcm9ncmFtQ29kZUJsb2NrKiBjcmVhdGUoVk0mIHZt
LCBDb3B5UGFyc2VkQmxvY2tUYWcsIFByb2dyYW1Db2RlQmxvY2smIG90aGVyKQogICAgIHsKLSAg
ICAgICAgUHJvZ3JhbUNvZGVCbG9jayogaW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRl
Q2VsbDxQcm9ncmFtQ29kZUJsb2NrPih2bS0+aGVhcCkpCi0gICAgICAgICAgICBQcm9ncmFtQ29k
ZUJsb2NrKHZtLCB2bS0+cHJvZ3JhbUNvZGVCbG9ja1N0cnVjdHVyZS5nZXQoKSwgQ29weVBhcnNl
ZEJsb2NrLCBvdGhlcik7Ci0gICAgICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbigqdm0sIENv
cHlQYXJzZWRCbG9jaywgb3RoZXIpOworICAgICAgICBQcm9ncmFtQ29kZUJsb2NrKiBpbnN0YW5j
ZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFByb2dyYW1Db2RlQmxvY2s+KHZtLmhlYXAp
KQorICAgICAgICAgICAgUHJvZ3JhbUNvZGVCbG9jayh2bSwgdm0ucHJvZ3JhbUNvZGVCbG9ja1N0
cnVjdHVyZS5nZXQoKSwgQ29weVBhcnNlZEJsb2NrLCBvdGhlcik7CisgICAgICAgIGluc3RhbmNl
LT5maW5pc2hDcmVhdGlvbih2bSwgQ29weVBhcnNlZEJsb2NrLCBvdGhlcik7CiAgICAgICAgIHJl
dHVybiBpbnN0YW5jZTsKICAgICB9CiAKLSAgICBzdGF0aWMgUHJvZ3JhbUNvZGVCbG9jayogY3Jl
YXRlKFZNKiB2bSwgUHJvZ3JhbUV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rZWRQ
cm9ncmFtQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9jaywgSlNTY29wZSogc2NvcGUpCisgICAg
c3RhdGljIFByb2dyYW1Db2RlQmxvY2sqIGNyZWF0ZShWTSYgdm0sIFByb2dyYW1FeGVjdXRhYmxl
KiBvd25lckV4ZWN1dGFibGUsIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jayogdW5saW5rZWRDb2Rl
QmxvY2ssIEpTU2NvcGUqIHNjb3BlKQogICAgIHsKLSAgICAgICAgUHJvZ3JhbUNvZGVCbG9jayog
aW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxQcm9ncmFtQ29kZUJsb2NrPih2
bS0+aGVhcCkpCi0gICAgICAgICAgICBQcm9ncmFtQ29kZUJsb2NrKHZtLCB2bS0+cHJvZ3JhbUNv
ZGVCbG9ja1N0cnVjdHVyZS5nZXQoKSwgb3duZXJFeGVjdXRhYmxlLCB1bmxpbmtlZENvZGVCbG9j
aywgc2NvcGUpOwotICAgICAgICBpZiAoIWluc3RhbmNlLT5maW5pc2hDcmVhdGlvbigqdm0sIG93
bmVyRXhlY3V0YWJsZSwgdW5saW5rZWRDb2RlQmxvY2ssIHNjb3BlKSkKKyAgICAgICAgUHJvZ3Jh
bUNvZGVCbG9jayogaW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxQcm9ncmFt
Q29kZUJsb2NrPih2bS5oZWFwKSkKKyAgICAgICAgICAgIFByb2dyYW1Db2RlQmxvY2sodm0sIHZt
LnByb2dyYW1Db2RlQmxvY2tTdHJ1Y3R1cmUuZ2V0KCksIG93bmVyRXhlY3V0YWJsZSwgdW5saW5r
ZWRDb2RlQmxvY2ssIHNjb3BlKTsKKyAgICAgICAgaWYgKCFpbnN0YW5jZS0+ZmluaXNoQ3JlYXRp
b24odm0sIG93bmVyRXhlY3V0YWJsZSwgdW5saW5rZWRDb2RlQmxvY2ssIHNjb3BlKSkKICAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICByZXR1cm4gaW5zdGFuY2U7CiAgICAgfQpA
QCAtNjgsMTIgKzY4LDEyIEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgUHJvZ3Jh
bUNvZGVCbG9jayhWTSogdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBDb3B5UGFyc2VkQmxvY2tU
YWcsIFByb2dyYW1Db2RlQmxvY2smIG90aGVyKQorICAgIFByb2dyYW1Db2RlQmxvY2soVk0mIHZt
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQ29weVBhcnNlZEJsb2NrVGFnLCBQcm9ncmFtQ29kZUJs
b2NrJiBvdGhlcikKICAgICAgICAgOiBHbG9iYWxDb2RlQmxvY2sodm0sIHN0cnVjdHVyZSwgQ29w
eVBhcnNlZEJsb2NrLCBvdGhlcikKICAgICB7CiAgICAgfQogCi0gICAgUHJvZ3JhbUNvZGVCbG9j
ayhWTSogdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9ncmFtRXhlY3V0YWJsZSogb3duZXJF
eGVjdXRhYmxlLCBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2sqIHVubGlua2VkQ29kZUJsb2NrLCBK
U1Njb3BlKiBzY29wZSkKKyAgICBQcm9ncmFtQ29kZUJsb2NrKFZNJiB2bSwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIFByb2dyYW1FeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGlua2VkUHJv
Z3JhbUNvZGVCbG9jayogdW5saW5rZWRDb2RlQmxvY2ssIEpTU2NvcGUqIHNjb3BlKQogICAgICAg
ICA6IEdsb2JhbENvZGVCbG9jayh2bSwgc3RydWN0dXJlLCBvd25lckV4ZWN1dGFibGUsIHVubGlu
a2VkQ29kZUJsb2NrLCBzY29wZSkKICAgICB7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1Byb3BlcnR5Q29uZGl0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJvcGVydHlDb25kaXRpb24uY3BwCShyZXZpc2lv
biAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJvcGVydHlDb25k
aXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNS0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzIwLDggKzMyMCw3IEBAIGJvb2wgUHJvcGVy
dHlDb25kaXRpb246OmlzV2F0Y2hhYmxlV2hlblYKICAgICAgICAgICAgIHNldCA9IHN0cnVjdHVy
ZS0+cHJvcGVydHlSZXBsYWNlbWVudFdhdGNocG9pbnRTZXQob2Zmc2V0KTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBjYXNlIEVuc3VyZVdhdGNoYWJpbGl0eToKLSAgICAgICAgICAgIHNl
dCA9IHN0cnVjdHVyZS0+ZW5zdXJlUHJvcGVydHlSZXBsYWNlbWVudFdhdGNocG9pbnRTZXQoCi0g
ICAgICAgICAgICAgICAgKnN0cnVjdHVyZS0+dm0oKSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIHNl
dCA9IHN0cnVjdHVyZS0+ZW5zdXJlUHJvcGVydHlSZXBsYWNlbWVudFdhdGNocG9pbnRTZXQoc3Ry
dWN0dXJlLT52bSgpLCBvZmZzZXQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAg
ICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5
SWRTdGF0dXMuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDcg
QEAgYm9vbCBQdXRCeUlkU3RhdHVzOjphcHBlbmRWYXJpYW50KGNvbnN0IAogCiBQdXRCeUlkU3Rh
dHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGcm9tTExJbnQoQ29kZUJsb2NrKiBwcm9maWxlZEJs
b2NrLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQogewot
ICAgIFZNJiB2bSA9ICpwcm9maWxlZEJsb2NrLT52bSgpOworICAgIFZNJiB2bSA9IHByb2ZpbGVk
QmxvY2stPnZtKCk7CiAgICAgCiAgICAgYXV0byBpbnN0cnVjdGlvbiA9IHByb2ZpbGVkQmxvY2st
Pmluc3RydWN0aW9ucygpLmF0KGJ5dGVjb2RlSW5kZXgpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBp
bnN0cnVjdGlvbi0+YXM8T3BQdXRCeUlkPigpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCShyZXZpc2lvbiAyNDkx
MjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwOCwgMjAxNC0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwOC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjQsNyArNjQsNyBAQCB2b2lkIFN0cnVjdHVy
ZVN0dWJJbmZvOjppbml0R2V0QnlJZFNlbGYoCiAgICAgY2FjaGVUeXBlID0gQ2FjaGVUeXBlOjpH
ZXRCeUlkU2VsZjsKICAgICAKICAgICB1LmJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUuc2V0
KAotICAgICAgICAqY29kZUJsb2NrLT52bSgpLCBjb2RlQmxvY2ssIGJhc2VPYmplY3RTdHJ1Y3R1
cmUpOworICAgICAgICBjb2RlQmxvY2stPnZtKCksIGNvZGVCbG9jaywgYmFzZU9iamVjdFN0cnVj
dHVyZSk7CiAgICAgdS5ieUlkU2VsZi5vZmZzZXQgPSBvZmZzZXQ7CiB9CiAKQEAgLTgzLDcgKzgz
LDcgQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6aW5pdFB1dEJ5SWRSZXBsYQogICAgIGNhY2hl
VHlwZSA9IENhY2hlVHlwZTo6UHV0QnlJZFJlcGxhY2U7CiAgICAgCiAgICAgdS5ieUlkU2VsZi5i
YXNlT2JqZWN0U3RydWN0dXJlLnNldCgKLSAgICAgICAgKmNvZGVCbG9jay0+dm0oKSwgY29kZUJs
b2NrLCBiYXNlT2JqZWN0U3RydWN0dXJlKTsKKyAgICAgICAgY29kZUJsb2NrLT52bSgpLCBjb2Rl
QmxvY2ssIGJhc2VPYmplY3RTdHJ1Y3R1cmUpOwogICAgIHUuYnlJZFNlbGYub2Zmc2V0ID0gb2Zm
c2V0OwogfQogCkBAIC05Miw3ICs5Miw3IEBAIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OmluaXRJ
bkJ5SWRTZWxmKEMKICAgICBjYWNoZVR5cGUgPSBDYWNoZVR5cGU6OkluQnlJZFNlbGY7CiAKICAg
ICB1LmJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUuc2V0KAotICAgICAgICAqY29kZUJsb2Nr
LT52bSgpLCBjb2RlQmxvY2ssIGJhc2VPYmplY3RTdHJ1Y3R1cmUpOworICAgICAgICBjb2RlQmxv
Y2stPnZtKCksIGNvZGVCbG9jaywgYmFzZU9iamVjdFN0cnVjdHVyZSk7CiAgICAgdS5ieUlkU2Vs
Zi5vZmZzZXQgPSBvZmZzZXQ7CiB9CiAKQEAgLTEzNSw3ICsxMzUsNyBAQCB2b2lkIFN0cnVjdHVy
ZVN0dWJJbmZvOjphYm91dFRvRGllKCkKIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgU3RydWN0dXJl
U3R1YkluZm86OmFkZEFjY2Vzc0Nhc2UoCiAgICAgY29uc3QgR0NTYWZlQ29uY3VycmVudEpTTG9j
a2VyJiBsb2NrZXIsIENvZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBJZGVudGlmaWVyJiBpZGVu
dCwgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IGFjY2Vzc0Nhc2UpCiB7Ci0gICAgVk0mIHZt
ID0gKmNvZGVCbG9jay0+dm0oKTsKKyAgICBWTSYgdm0gPSBjb2RlQmxvY2stPnZtKCk7CiAgICAg
QVNTRVJUKHZtLmhlYXAuaXNEZWZlcnJlZCgpKTsKICAgICBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0
IHJlc3VsdCA9IChbJl0gKCkgLT4gQWNjZXNzR2VuZXJhdGlvblJlc3VsdCB7CiAgICAgICAgIGlm
IChTdHJ1Y3R1cmVTdHViSW5mb0ludGVybmFsOjp2ZXJib3NlKQpAQCAtMjcyLDcgKzI3Miw3IEBA
IHZvaWQgU3RydWN0dXJlU3R1YkluZm86OnJlc2V0KENvZGVCbG9jayoKIAogdm9pZCBTdHJ1Y3R1
cmVTdHViSW5mbzo6dmlzaXRXZWFrUmVmZXJlbmNlcyhDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsK
LSAgICBWTSYgdm0gPSAqY29kZUJsb2NrLT52bSgpOworICAgIFZNJiB2bSA9IGNvZGVCbG9jay0+
dm0oKTsKICAgICAKICAgICBidWZmZXJlZFN0cnVjdHVyZXMuZ2VuZXJpY0ZpbHRlcigKICAgICAg
ICAgWyZdIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgLT4gYm9vbCB7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAJKHJl
dmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxpbmtl
ZENvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0LDggKzU0LDggQEAgbmFtZXNwYWNl
IEpTQyB7CiAKIGNvbnN0IENsYXNzSW5mbyBVbmxpbmtlZENvZGVCbG9jazo6c19pbmZvID0geyAi
VW5saW5rZWRDb2RlQmxvY2siLCBudWxscHRyLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVU
SE9EX1RBQkxFKFVubGlua2VkQ29kZUJsb2NrKSB9OwogCi1VbmxpbmtlZENvZGVCbG9jazo6VW5s
aW5rZWRDb2RlQmxvY2soVk0qIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQ29kZVR5cGUgY29k
ZVR5cGUsIGNvbnN0IEV4ZWN1dGFibGVJbmZvJiBpbmZvLCBPcHRpb25TZXQ8Q29kZUdlbmVyYXRp
b25Nb2RlPiBjb2RlR2VuZXJhdGlvbk1vZGUpCi0gICAgOiBCYXNlKCp2bSwgc3RydWN0dXJlKQor
VW5saW5rZWRDb2RlQmxvY2s6OlVubGlua2VkQ29kZUJsb2NrKFZNJiB2bSwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIENvZGVUeXBlIGNvZGVUeXBlLCBjb25zdCBFeGVjdXRhYmxlSW5mbyYgaW5mbywg
T3B0aW9uU2V0PENvZGVHZW5lcmF0aW9uTW9kZT4gY29kZUdlbmVyYXRpb25Nb2RlKQorICAgIDog
QmFzZSh2bSwgc3RydWN0dXJlKQogICAgICwgbV91c2VzRXZhbChpbmZvLnVzZXNFdmFsKCkpCiAg
ICAgLCBtX2lzU3RyaWN0TW9kZShpbmZvLmlzU3RyaWN0TW9kZSgpKQogICAgICwgbV9pc0NvbnN0
cnVjdG9yKGluZm8uaXNDb25zdHJ1Y3RvcigpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgJKHJldmlzaW9uIDI0OTEyOCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0y
MDE2IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
Mi0yMDE5IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMTYzLDcgKzE2Myw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGFkZFNl
dENvbnN0YW50KElkZW50aWZpZXJTZXQmIHNldCkKICAgICB7CiAgICAgICAgIGNyZWF0ZVJhcmVE
YXRhSWZOZWNlc3NhcnkoKTsKLSAgICAgICAgVk0mIHZtID0gKnRoaXMtPnZtKCk7CisgICAgICAg
IFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgICAgIGF1dG8gbG9ja2VyID0gbG9ja0R1cmluZ01h
cmtpbmcodm0uaGVhcCwgY2VsbExvY2soKSk7CiAgICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9IG1f
Y29uc3RhbnRSZWdpc3RlcnMuc2l6ZSgpOwogICAgICAgICBtX2NvbnN0YW50UmVnaXN0ZXJzLmFw
cGVuZChXcml0ZUJhcnJpZXI8VW5rbm93bj4oKSk7CkBAIC0xNzMsNyArMTczLDcgQEAgcHVibGlj
OgogCiAgICAgdW5zaWduZWQgYWRkQ29uc3RhbnQoSlNWYWx1ZSB2LCBTb3VyY2VDb2RlUmVwcmVz
ZW50YXRpb24gc291cmNlQ29kZVJlcHJlc2VudGF0aW9uID0gU291cmNlQ29kZVJlcHJlc2VudGF0
aW9uOjpPdGhlcikKICAgICB7Ci0gICAgICAgIFZNJiB2bSA9ICp0aGlzLT52bSgpOworICAgICAg
ICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgICAgICBhdXRvIGxvY2tlciA9IGxvY2tEdXJpbmdN
YXJraW5nKHZtLmhlYXAsIGNlbGxMb2NrKCkpOwogICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSBt
X2NvbnN0YW50UmVnaXN0ZXJzLnNpemUoKTsKICAgICAgICAgbV9jb25zdGFudFJlZ2lzdGVycy5h
cHBlbmQoV3JpdGVCYXJyaWVyPFVua25vd24+KCkpOwpAQCAtMTgzLDcgKzE4Myw3IEBAIHB1Ymxp
YzoKICAgICB9CiAgICAgdW5zaWduZWQgYWRkQ29uc3RhbnQoTGlua1RpbWVDb25zdGFudCB0eXBl
KQogICAgIHsKLSAgICAgICAgVk0mIHZtID0gKnRoaXMtPnZtKCk7CisgICAgICAgIFZNJiB2bSA9
IHRoaXMtPnZtKCk7CiAgICAgICAgIGF1dG8gbG9ja2VyID0gbG9ja0R1cmluZ01hcmtpbmcodm0u
aGVhcCwgY2VsbExvY2soKSk7CiAgICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9IG1fY29uc3RhbnRS
ZWdpc3RlcnMuc2l6ZSgpOwogICAgICAgICBBU1NFUlQocmVzdWx0KTsKQEAgLTI0Niw3ICsyNDYs
NyBAQCBwdWJsaWM6CiAKICAgICB1bnNpZ25lZCBhZGRGdW5jdGlvbkRlY2woVW5saW5rZWRGdW5j
dGlvbkV4ZWN1dGFibGUqIG4pCiAgICAgewotICAgICAgICBWTSYgdm0gPSAqdGhpcy0+dm0oKTsK
KyAgICAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICAgICAgYXV0byBsb2NrZXIgPSBsb2Nr
RHVyaW5nTWFya2luZyh2bS5oZWFwLCBjZWxsTG9jaygpKTsKICAgICAgICAgdW5zaWduZWQgc2l6
ZSA9IG1fZnVuY3Rpb25EZWNscy5zaXplKCk7CiAgICAgICAgIG1fZnVuY3Rpb25EZWNscy5hcHBl
bmQoV3JpdGVCYXJyaWVyPFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlPigpKTsKQEAgLTI1Nyw3
ICsyNTcsNyBAQCBwdWJsaWM6CiAgICAgc2l6ZV90IG51bWJlck9mRnVuY3Rpb25EZWNscygpIHsg
cmV0dXJuIG1fZnVuY3Rpb25EZWNscy5zaXplKCk7IH0KICAgICB1bnNpZ25lZCBhZGRGdW5jdGlv
bkV4cHIoVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIG4pCiAgICAgewotICAgICAgICBWTSYg
dm0gPSAqdGhpcy0+dm0oKTsKKyAgICAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICAgICAg
YXV0byBsb2NrZXIgPSBsb2NrRHVyaW5nTWFya2luZyh2bS5oZWFwLCBjZWxsTG9jaygpKTsKICAg
ICAgICAgdW5zaWduZWQgc2l6ZSA9IG1fZnVuY3Rpb25FeHBycy5zaXplKCk7CiAgICAgICAgIG1f
ZnVuY3Rpb25FeHBycy5hcHBlbmQoV3JpdGVCYXJyaWVyPFVubGlua2VkRnVuY3Rpb25FeGVjdXRh
YmxlPigpKTsKQEAgLTM3Nyw3ICszNzcsNyBAQCBwdWJsaWM6CiAKIAogcHJvdGVjdGVkOgotICAg
IFVubGlua2VkQ29kZUJsb2NrKFZNKiwgU3RydWN0dXJlKiwgQ29kZVR5cGUsIGNvbnN0IEV4ZWN1
dGFibGVJbmZvJiwgT3B0aW9uU2V0PENvZGVHZW5lcmF0aW9uTW9kZT4pOworICAgIFVubGlua2Vk
Q29kZUJsb2NrKFZNJiwgU3RydWN0dXJlKiwgQ29kZVR5cGUsIGNvbnN0IEV4ZWN1dGFibGVJbmZv
JiwgT3B0aW9uU2V0PENvZGVHZW5lcmF0aW9uTW9kZT4pOwogCiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgQ29kZUJsb2NrVHlwZT4KICAgICBVbmxpbmtlZENvZGVCbG9jayhEZWNvZGVyJiwgU3RydWN0
dXJlKiwgY29uc3QgQ2FjaGVkQ29kZUJsb2NrPENvZGVCbG9ja1R5cGU+Jik7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRFdmFsQ29kZUJsb2NrLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRXZhbENvZGVC
bG9jay5oCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvVW5saW5rZWRFdmFsQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTYgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTkgQXBwbGUgSW5jLiBBbGwgUmlnaHRz
IFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNiwxMCArMzYs
MTAgQEAgcHVibGljOgogICAgIHR5cGVkZWYgVW5saW5rZWRHbG9iYWxDb2RlQmxvY2sgQmFzZTsK
ICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1
cmVGbGFncyB8IFN0cnVjdHVyZUlzSW1tb3J0YWw7CiAKLSAgICBzdGF0aWMgVW5saW5rZWRFdmFs
Q29kZUJsb2NrKiBjcmVhdGUoVk0qIHZtLCBjb25zdCBFeGVjdXRhYmxlSW5mbyYgaW5mbywgT3B0
aW9uU2V0PENvZGVHZW5lcmF0aW9uTW9kZT4gY29kZUdlbmVyYXRpb25Nb2RlKQorICAgIHN0YXRp
YyBVbmxpbmtlZEV2YWxDb2RlQmxvY2sqIGNyZWF0ZShWTSYgdm0sIGNvbnN0IEV4ZWN1dGFibGVJ
bmZvJiBpbmZvLCBPcHRpb25TZXQ8Q29kZUdlbmVyYXRpb25Nb2RlPiBjb2RlR2VuZXJhdGlvbk1v
ZGUpCiAgICAgewotICAgICAgICBVbmxpbmtlZEV2YWxDb2RlQmxvY2sqIGluc3RhbmNlID0gbmV3
IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8VW5saW5rZWRFdmFsQ29kZUJsb2NrPih2bS0+aGVhcCkp
IFVubGlua2VkRXZhbENvZGVCbG9jayh2bSwgdm0tPnVubGlua2VkRXZhbENvZGVCbG9ja1N0cnVj
dHVyZS5nZXQoKSwgaW5mbywgY29kZUdlbmVyYXRpb25Nb2RlKTsKLSAgICAgICAgaW5zdGFuY2Ut
PmZpbmlzaENyZWF0aW9uKCp2bSk7CisgICAgICAgIFVubGlua2VkRXZhbENvZGVCbG9jayogaW5z
dGFuY2UgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxVbmxpbmtlZEV2YWxDb2RlQmxvY2s+
KHZtLmhlYXApKSBVbmxpbmtlZEV2YWxDb2RlQmxvY2sodm0sIHZtLnVubGlua2VkRXZhbENvZGVC
bG9ja1N0cnVjdHVyZS5nZXQoKSwgaW5mbywgY29kZUdlbmVyYXRpb25Nb2RlKTsKKyAgICAgICAg
aW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICAgICAgcmV0dXJuIGluc3RhbmNlOwog
ICAgIH0KIApAQCAtNjMsNyArNjMsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIGZyaWVuZCBD
YWNoZWRFdmFsQ29kZUJsb2NrOwogCi0gICAgVW5saW5rZWRFdmFsQ29kZUJsb2NrKFZNKiB2bSwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IEV4ZWN1dGFibGVJbmZvJiBpbmZvLCBPcHRpb25T
ZXQ8Q29kZUdlbmVyYXRpb25Nb2RlPiBjb2RlR2VuZXJhdGlvbk1vZGUpCisgICAgVW5saW5rZWRF
dmFsQ29kZUJsb2NrKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IEV4ZWN1dGFi
bGVJbmZvJiBpbmZvLCBPcHRpb25TZXQ8Q29kZUdlbmVyYXRpb25Nb2RlPiBjb2RlR2VuZXJhdGlv
bk1vZGUpCiAgICAgICAgIDogQmFzZSh2bSwgc3RydWN0dXJlLCBFdmFsQ29kZSwgaW5mbywgY29k
ZUdlbmVyYXRpb25Nb2RlKQogICAgIHsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrLmgJ
KHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxp
bmtlZEZ1bmN0aW9uQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTYgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNiwxMCArMzYsMTAg
QEAgcHVibGljOgogICAgIHR5cGVkZWYgVW5saW5rZWRDb2RlQmxvY2sgQmFzZTsKICAgICBzdGF0
aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8
IFN0cnVjdHVyZUlzSW1tb3J0YWw7CiAKLSAgICBzdGF0aWMgVW5saW5rZWRGdW5jdGlvbkNvZGVC
bG9jayogY3JlYXRlKFZNKiB2bSwgQ29kZVR5cGUgY29kZVR5cGUsIGNvbnN0IEV4ZWN1dGFibGVJ
bmZvJiBpbmZvLCBPcHRpb25TZXQ8Q29kZUdlbmVyYXRpb25Nb2RlPiBjb2RlR2VuZXJhdGlvbk1v
ZGUpCisgICAgc3RhdGljIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2sqIGNyZWF0ZShWTSYgdm0s
IENvZGVUeXBlIGNvZGVUeXBlLCBjb25zdCBFeGVjdXRhYmxlSW5mbyYgaW5mbywgT3B0aW9uU2V0
PENvZGVHZW5lcmF0aW9uTW9kZT4gY29kZUdlbmVyYXRpb25Nb2RlKQogICAgIHsKLSAgICAgICAg
VW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayogaW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFsbG9j
YXRlQ2VsbDxVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrPih2bS0+aGVhcCkpIFVubGlua2VkRnVu
Y3Rpb25Db2RlQmxvY2sodm0sIHZtLT51bmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrU3RydWN0dXJl
LmdldCgpLCBjb2RlVHlwZSwgaW5mbywgY29kZUdlbmVyYXRpb25Nb2RlKTsKLSAgICAgICAgaW5z
dGFuY2UtPmZpbmlzaENyZWF0aW9uKCp2bSk7CisgICAgICAgIFVubGlua2VkRnVuY3Rpb25Db2Rl
QmxvY2sqIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8VW5saW5rZWRGdW5j
dGlvbkNvZGVCbG9jaz4odm0uaGVhcCkpIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2sodm0sIHZt
LnVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2tTdHJ1Y3R1cmUuZ2V0KCksIGNvZGVUeXBlLCBpbmZv
LCBjb2RlR2VuZXJhdGlvbk1vZGUpOworICAgICAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24o
dm0pOwogICAgICAgICByZXR1cm4gaW5zdGFuY2U7CiAgICAgfQogCkBAIC00OCw3ICs0OCw3IEBA
IHB1YmxpYzoKIHByaXZhdGU6CiAgICAgZnJpZW5kIENhY2hlZEZ1bmN0aW9uQ29kZUJsb2NrOwog
Ci0gICAgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayhWTSogdm0sIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBDb2RlVHlwZSBjb2RlVHlwZSwgY29uc3QgRXhlY3V0YWJsZUluZm8mIGluZm8sIE9wdGlv
blNldDxDb2RlR2VuZXJhdGlvbk1vZGU+IGNvZGVHZW5lcmF0aW9uTW9kZSkKKyAgICBVbmxpbmtl
ZEZ1bmN0aW9uQ29kZUJsb2NrKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIENvZGVUeXBl
IGNvZGVUeXBlLCBjb25zdCBFeGVjdXRhYmxlSW5mbyYgaW5mbywgT3B0aW9uU2V0PENvZGVHZW5l
cmF0aW9uTW9kZT4gY29kZUdlbmVyYXRpb25Nb2RlKQogICAgICAgICA6IEJhc2Uodm0sIHN0cnVj
dHVyZSwgY29kZVR5cGUsIGluZm8sIGNvZGVHZW5lcmF0aW9uTW9kZSkKICAgICB7CiAgICAgfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVj
dXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
Mi0yMDE4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMi0yMDE5IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtNTgsNyArNTgsNyBAQCBzdGF0aWMgVW5saW5rZWRGdW5jdGlv
bkNvZGVCbG9jayogZ2VuZXJhCiAgICAgSlNQYXJzZXJTY3JpcHRNb2RlIHNjcmlwdE1vZGUgPSBl
eGVjdXRhYmxlLT5zY3JpcHRNb2RlKCk7CiAgICAgQVNTRVJUKGlzRnVuY3Rpb25QYXJzZU1vZGUo
ZXhlY3V0YWJsZS0+cGFyc2VNb2RlKCkpKTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8RnVuY3Rpb25O
b2RlPiBmdW5jdGlvbiA9IHBhcnNlPEZ1bmN0aW9uTm9kZT4oCi0gICAgICAgICZ2bSwgc291cmNl
LCBleGVjdXRhYmxlLT5uYW1lKCksIGJ1aWx0aW5Nb2RlLCBzdHJpY3RNb2RlLCBzY3JpcHRNb2Rl
LCBleGVjdXRhYmxlLT5wYXJzZU1vZGUoKSwgZXhlY3V0YWJsZS0+c3VwZXJCaW5kaW5nKCksIGVy
cm9yLCBudWxscHRyKTsKKyAgICAgICAgdm0sIHNvdXJjZSwgZXhlY3V0YWJsZS0+bmFtZSgpLCBi
dWlsdGluTW9kZSwgc3RyaWN0TW9kZSwgc2NyaXB0TW9kZSwgZXhlY3V0YWJsZS0+cGFyc2VNb2Rl
KCksIGV4ZWN1dGFibGUtPnN1cGVyQmluZGluZygpLCBlcnJvciwgbnVsbHB0cik7CiAKICAgICBp
ZiAoIWZ1bmN0aW9uKSB7CiAgICAgICAgIEFTU0VSVChlcnJvci5pc1ZhbGlkKCkpOwpAQCAtNzAs
NyArNzAsNyBAQCBzdGF0aWMgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayogZ2VuZXJhCiAKICAg
ICBib29sIGlzQ2xhc3NDb250ZXh0ID0gZXhlY3V0YWJsZS0+c3VwZXJCaW5kaW5nKCkgPT0gU3Vw
ZXJCaW5kaW5nOjpOZWVkZWQ7CiAKLSAgICBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKiByZXN1
bHQgPSBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrOjpjcmVhdGUoJnZtLCBGdW5jdGlvbkNvZGUs
IEV4ZWN1dGFibGVJbmZvKGZ1bmN0aW9uLT51c2VzRXZhbCgpLCBmdW5jdGlvbi0+aXNTdHJpY3RN
b2RlKCksIGtpbmQgPT0gQ29kZUZvckNvbnN0cnVjdCwgZnVuY3Rpb25LaW5kID09IFVubGlua2Vk
QnVpbHRpbkZ1bmN0aW9uLCBleGVjdXRhYmxlLT5jb25zdHJ1Y3RvcktpbmQoKSwgc2NyaXB0TW9k
ZSwgZXhlY3V0YWJsZS0+c3VwZXJCaW5kaW5nKCksIHBhcnNlTW9kZSwgZXhlY3V0YWJsZS0+ZGVy
aXZlZENvbnRleHRUeXBlKCksIGZhbHNlLCBpc0NsYXNzQ29udGV4dCwgRXZhbENvbnRleHRUeXBl
OjpGdW5jdGlvbkV2YWxDb250ZXh0KSwgY29kZUdlbmVyYXRpb25Nb2RlKTsKKyAgICBVbmxpbmtl
ZEZ1bmN0aW9uQ29kZUJsb2NrKiByZXN1bHQgPSBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrOjpj
cmVhdGUodm0sIEZ1bmN0aW9uQ29kZSwgRXhlY3V0YWJsZUluZm8oZnVuY3Rpb24tPnVzZXNFdmFs
KCksIGZ1bmN0aW9uLT5pc1N0cmljdE1vZGUoKSwga2luZCA9PSBDb2RlRm9yQ29uc3RydWN0LCBm
dW5jdGlvbktpbmQgPT0gVW5saW5rZWRCdWlsdGluRnVuY3Rpb24sIGV4ZWN1dGFibGUtPmNvbnN0
cnVjdG9yS2luZCgpLCBzY3JpcHRNb2RlLCBleGVjdXRhYmxlLT5zdXBlckJpbmRpbmcoKSwgcGFy
c2VNb2RlLCBleGVjdXRhYmxlLT5kZXJpdmVkQ29udGV4dFR5cGUoKSwgZmFsc2UsIGlzQ2xhc3ND
b250ZXh0LCBFdmFsQ29udGV4dFR5cGU6OkZ1bmN0aW9uRXZhbENvbnRleHQpLCBjb2RlR2VuZXJh
dGlvbk1vZGUpOwogCiAgICAgVmFyaWFibGVFbnZpcm9ubWVudCBwYXJlbnRTY29wZVREWlZhcmlh
YmxlcyA9IGV4ZWN1dGFibGUtPnBhcmVudFNjb3BlVERaVmFyaWFibGVzKCk7CiAgICAgZXJyb3Ig
PSBCeXRlY29kZUdlbmVyYXRvcjo6Z2VuZXJhdGUodm0sIGZ1bmN0aW9uLmdldCgpLCBzb3VyY2Us
IHJlc3VsdCwgY29kZUdlbmVyYXRpb25Nb2RlLCAmcGFyZW50U2NvcGVURFpWYXJpYWJsZXMpOwpA
QCAtODEsOCArODEsOCBAQCBzdGF0aWMgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayogZ2VuZXJh
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OlVu
bGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKFZNKiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNv
bnN0IFNvdXJjZUNvZGUmIHBhcmVudFNvdXJjZSwgRnVuY3Rpb25NZXRhZGF0YU5vZGUqIG5vZGUs
IFVubGlua2VkRnVuY3Rpb25LaW5kIGtpbmQsIENvbnN0cnVjdEFiaWxpdHkgY29uc3RydWN0QWJp
bGl0eSwgSlNQYXJzZXJTY3JpcHRNb2RlIHNjcmlwdE1vZGUsIE9wdGlvbmFsPENvbXBhY3RWYXJp
YWJsZU1hcDo6SGFuZGxlPiBwYXJlbnRTY29wZVREWlZhcmlhYmxlcywgRGVyaXZlZENvbnRleHRU
eXBlIGRlcml2ZWRDb250ZXh0VHlwZSwgYm9vbCBpc0J1aWx0aW5EZWZhdWx0Q2xhc3NDb25zdHJ1
Y3RvcikKLSAgICA6IEJhc2UoKnZtLCBzdHJ1Y3R1cmUpCitVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0
YWJsZTo6VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgY29uc3QgU291cmNlQ29kZSYgcGFyZW50U291cmNlLCBGdW5jdGlvbk1ldGFkYXRhTm9k
ZSogbm9kZSwgVW5saW5rZWRGdW5jdGlvbktpbmQga2luZCwgQ29uc3RydWN0QWJpbGl0eSBjb25z
dHJ1Y3RBYmlsaXR5LCBKU1BhcnNlclNjcmlwdE1vZGUgc2NyaXB0TW9kZSwgT3B0aW9uYWw8Q29t
cGFjdFZhcmlhYmxlTWFwOjpIYW5kbGU+IHBhcmVudFNjb3BlVERaVmFyaWFibGVzLCBEZXJpdmVk
Q29udGV4dFR5cGUgZGVyaXZlZENvbnRleHRUeXBlLCBib29sIGlzQnVpbHRpbkRlZmF1bHRDbGFz
c0NvbnN0cnVjdG9yKQorICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQogICAgICwgbV9maXJzdExp
bmVPZmZzZXQobm9kZS0+Zmlyc3RMaW5lKCkgLSBwYXJlbnRTb3VyY2UuZmlyc3RMaW5lKCkub25l
QmFzZWRJbnQoKSkKICAgICAsIG1faXNJblN0cmljdENvbnRleHQobm9kZS0+aXNJblN0cmljdENv
bnRleHQoKSkKICAgICAsIG1fbGluZUNvdW50KG5vZGUtPmxhc3RMaW5lKCkgLSBub2RlLT5maXJz
dExpbmUoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1
bmN0aW9uRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5oCShyZXZpc2lvbiAyNDkxMjgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFi
bGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTItMjAxOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTItMjAxOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY4LDExICs2OCwxMSBAQCBwdWJsaWM6CiAgICAgICAg
IHJldHVybiAmdm0udW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGVTcGFjZS5zcGFjZTsKICAgICB9
CiAKLSAgICBzdGF0aWMgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIGNyZWF0ZShWTSogdm0s
IGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgRnVuY3Rpb25NZXRhZGF0YU5vZGUqIG5vZGUsIFVu
bGlua2VkRnVuY3Rpb25LaW5kIHVubGlua2VkRnVuY3Rpb25LaW5kLCBDb25zdHJ1Y3RBYmlsaXR5
IGNvbnN0cnVjdEFiaWxpdHksIEpTUGFyc2VyU2NyaXB0TW9kZSBzY3JpcHRNb2RlLCBPcHRpb25h
bDxDb21wYWN0VmFyaWFibGVNYXA6OkhhbmRsZT4gcGFyZW50U2NvcGVURFpWYXJpYWJsZXMsIERl
cml2ZWRDb250ZXh0VHlwZSBkZXJpdmVkQ29udGV4dFR5cGUsIGJvb2wgaXNCdWlsdGluRGVmYXVs
dENsYXNzQ29uc3RydWN0b3IgPSBmYWxzZSkKKyAgICBzdGF0aWMgVW5saW5rZWRGdW5jdGlvbkV4
ZWN1dGFibGUqIGNyZWF0ZShWTSYgdm0sIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgRnVuY3Rp
b25NZXRhZGF0YU5vZGUqIG5vZGUsIFVubGlua2VkRnVuY3Rpb25LaW5kIHVubGlua2VkRnVuY3Rp
b25LaW5kLCBDb25zdHJ1Y3RBYmlsaXR5IGNvbnN0cnVjdEFiaWxpdHksIEpTUGFyc2VyU2NyaXB0
TW9kZSBzY3JpcHRNb2RlLCBPcHRpb25hbDxDb21wYWN0VmFyaWFibGVNYXA6OkhhbmRsZT4gcGFy
ZW50U2NvcGVURFpWYXJpYWJsZXMsIERlcml2ZWRDb250ZXh0VHlwZSBkZXJpdmVkQ29udGV4dFR5
cGUsIGJvb2wgaXNCdWlsdGluRGVmYXVsdENsYXNzQ29uc3RydWN0b3IgPSBmYWxzZSkKICAgICB7
Ci0gICAgICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBpbnN0YW5jZSA9IG5ldyAoTm90
TnVsbCwgYWxsb2NhdGVDZWxsPFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlPih2bS0+aGVhcCkp
Ci0gICAgICAgICAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSh2bSwgdm0tPnVubGlua2Vk
RnVuY3Rpb25FeGVjdXRhYmxlU3RydWN0dXJlLmdldCgpLCBzb3VyY2UsIG5vZGUsIHVubGlua2Vk
RnVuY3Rpb25LaW5kLCBjb25zdHJ1Y3RBYmlsaXR5LCBzY3JpcHRNb2RlLCBXVEZNb3ZlKHBhcmVu
dFNjb3BlVERaVmFyaWFibGVzKSwgZGVyaXZlZENvbnRleHRUeXBlLCBpc0J1aWx0aW5EZWZhdWx0
Q2xhc3NDb25zdHJ1Y3Rvcik7Ci0gICAgICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbigqdm0p
OworICAgICAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogaW5zdGFuY2UgPSBuZXcgKE5v
dE51bGwsIGFsbG9jYXRlQ2VsbDxVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZT4odm0uaGVhcCkp
CisgICAgICAgICAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSh2bSwgdm0udW5saW5rZWRG
dW5jdGlvbkV4ZWN1dGFibGVTdHJ1Y3R1cmUuZ2V0KCksIHNvdXJjZSwgbm9kZSwgdW5saW5rZWRG
dW5jdGlvbktpbmQsIGNvbnN0cnVjdEFiaWxpdHksIHNjcmlwdE1vZGUsIFdURk1vdmUocGFyZW50
U2NvcGVURFpWYXJpYWJsZXMpLCBkZXJpdmVkQ29udGV4dFR5cGUsIGlzQnVpbHRpbkRlZmF1bHRD
bGFzc0NvbnN0cnVjdG9yKTsKKyAgICAgICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKHZtKTsK
ICAgICAgICAgcmV0dXJuIGluc3RhbmNlOwogICAgIH0KIApAQCAtMjAwLDcgKzIwMCw3IEBAIHB1
YmxpYzoKICAgICB9OwogCiBwcml2YXRlOgotICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxl
KFZNKiwgU3RydWN0dXJlKiwgY29uc3QgU291cmNlQ29kZSYsIEZ1bmN0aW9uTWV0YWRhdGFOb2Rl
KiwgVW5saW5rZWRGdW5jdGlvbktpbmQsIENvbnN0cnVjdEFiaWxpdHksIEpTUGFyc2VyU2NyaXB0
TW9kZSwgT3B0aW9uYWw8Q29tcGFjdFZhcmlhYmxlTWFwOjpIYW5kbGU+LCAgSlNDOjpEZXJpdmVk
Q29udGV4dFR5cGUsIGJvb2wgaXNCdWlsdGluRGVmYXVsdENsYXNzQ29uc3RydWN0b3IpOworICAg
IFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKFZNJiwgU3RydWN0dXJlKiwgY29uc3QgU291cmNl
Q29kZSYsIEZ1bmN0aW9uTWV0YWRhdGFOb2RlKiwgVW5saW5rZWRGdW5jdGlvbktpbmQsIENvbnN0
cnVjdEFiaWxpdHksIEpTUGFyc2VyU2NyaXB0TW9kZSwgT3B0aW9uYWw8Q29tcGFjdFZhcmlhYmxl
TWFwOjpIYW5kbGU+LCAgSlNDOjpEZXJpdmVkQ29udGV4dFR5cGUsIGJvb2wgaXNCdWlsdGluRGVm
YXVsdENsYXNzQ29uc3RydWN0b3IpOwogICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKERl
Y29kZXImLCBjb25zdCBDYWNoZWRGdW5jdGlvbkV4ZWN1dGFibGUmKTsKIAogICAgIHZvaWQgZGVj
b2RlQ2FjaGVkQ29kZUJsb2NrcyhWTSYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1VubGlua2VkR2xvYmFsQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkR2xvYmFsQ29kZUJsb2NrLmgJKHJldmlzaW9u
IDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEdsb2Jh
bENvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMi0yMDE2IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMi0yMDE5IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzQsNyArMzQsNyBAQCBwdWJsaWM6CiAg
ICAgdHlwZWRlZiBVbmxpbmtlZENvZGVCbG9jayBCYXNlOwogCiBwcm90ZWN0ZWQ6Ci0gICAgVW5s
aW5rZWRHbG9iYWxDb2RlQmxvY2soVk0qIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQ29kZVR5
cGUgY29kZVR5cGUsIGNvbnN0IEV4ZWN1dGFibGVJbmZvJiBpbmZvLCBPcHRpb25TZXQ8Q29kZUdl
bmVyYXRpb25Nb2RlPiBjb2RlR2VuZXJhdGlvbk1vZGUpCisgICAgVW5saW5rZWRHbG9iYWxDb2Rl
QmxvY2soVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQ29kZVR5cGUgY29kZVR5cGUsIGNv
bnN0IEV4ZWN1dGFibGVJbmZvJiBpbmZvLCBPcHRpb25TZXQ8Q29kZUdlbmVyYXRpb25Nb2RlPiBj
b2RlR2VuZXJhdGlvbk1vZGUpCiAgICAgICAgIDogQmFzZSh2bSwgc3RydWN0dXJlLCBjb2RlVHlw
ZSwgaW5mbywgY29kZUdlbmVyYXRpb25Nb2RlKQogICAgIHsKICAgICB9CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkTW9k
dWxlUHJvZ3JhbUNvZGVCbG9jay5oCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTcg
QXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIw
MTkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0zNywxMCArMzcsMTAgQEAgcHVibGljOgogICAgIHR5cGVkZWYgVW5saW5r
ZWRHbG9iYWxDb2RlQmxvY2sgQmFzZTsKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0
dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IFN0cnVjdHVyZUlzSW1tb3J0YWw7CiAK
LSAgICBzdGF0aWMgVW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKiBjcmVhdGUoVk0qIHZt
LCBjb25zdCBFeGVjdXRhYmxlSW5mbyYgaW5mbywgT3B0aW9uU2V0PENvZGVHZW5lcmF0aW9uTW9k
ZT4gY29kZUdlbmVyYXRpb25Nb2RlKQorICAgIHN0YXRpYyBVbmxpbmtlZE1vZHVsZVByb2dyYW1D
b2RlQmxvY2sqIGNyZWF0ZShWTSYgdm0sIGNvbnN0IEV4ZWN1dGFibGVJbmZvJiBpbmZvLCBPcHRp
b25TZXQ8Q29kZUdlbmVyYXRpb25Nb2RlPiBjb2RlR2VuZXJhdGlvbk1vZGUpCiAgICAgewotICAg
ICAgICBVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2sqIGluc3RhbmNlID0gbmV3IChOb3RO
dWxsLCBhbGxvY2F0ZUNlbGw8VW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrPih2bS0+aGVh
cCkpIFVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayh2bSwgdm0tPnVubGlua2VkTW9kdWxl
UHJvZ3JhbUNvZGVCbG9ja1N0cnVjdHVyZS5nZXQoKSwgaW5mbywgY29kZUdlbmVyYXRpb25Nb2Rl
KTsKLSAgICAgICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKCp2bSk7CisgICAgICAgIFVubGlu
a2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayogaW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFsbG9j
YXRlQ2VsbDxVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2s+KHZtLmhlYXApKSBVbmxpbmtl
ZE1vZHVsZVByb2dyYW1Db2RlQmxvY2sodm0sIHZtLnVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVC
bG9ja1N0cnVjdHVyZS5nZXQoKSwgaW5mbywgY29kZUdlbmVyYXRpb25Nb2RlKTsKKyAgICAgICAg
aW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICAgICAgcmV0dXJuIGluc3RhbmNlOwog
ICAgIH0KIApAQCAtNzksNyArNzksNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIGZyaWVuZCBD
YWNoZWRNb2R1bGVDb2RlQmxvY2s7CiAKLSAgICBVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxv
Y2soVk0qIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgRXhlY3V0YWJsZUluZm8mIGlu
Zm8sIE9wdGlvblNldDxDb2RlR2VuZXJhdGlvbk1vZGU+IGNvZGVHZW5lcmF0aW9uTW9kZSkKKyAg
ICBVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2soVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgY29uc3QgRXhlY3V0YWJsZUluZm8mIGluZm8sIE9wdGlvblNldDxDb2RlR2VuZXJhdGlv
bk1vZGU+IGNvZGVHZW5lcmF0aW9uTW9kZSkKICAgICAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUs
IE1vZHVsZUNvZGUsIGluZm8sIGNvZGVHZW5lcmF0aW9uTW9kZSkKICAgICB7CiAgICAgfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkUHJvZ3JhbUNvZGVCbG9j
ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxpbmtl
ZFByb2dyYW1Db2RlQmxvY2suaAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1VubGlua2VkUHJvZ3JhbUNvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE3IEFwcGxlIElu
Yy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE5IEFwcGxl
IEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMzYsMTAgKzM2LDEwIEBAIHB1YmxpYzoKICAgICB0eXBlZGVmIFVubGlua2VkR2xvYmFs
Q29kZUJsb2NrIEJhc2U7CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdz
ID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBTdHJ1Y3R1cmVJc0ltbW9ydGFsOwogCi0gICAgc3Rh
dGljIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jayogY3JlYXRlKFZNKiB2bSwgY29uc3QgRXhlY3V0
YWJsZUluZm8mIGluZm8sIE9wdGlvblNldDxDb2RlR2VuZXJhdGlvbk1vZGU+IGNvZGVHZW5lcmF0
aW9uTW9kZSkKKyAgICBzdGF0aWMgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrKiBjcmVhdGUoVk0m
IHZtLCBjb25zdCBFeGVjdXRhYmxlSW5mbyYgaW5mbywgT3B0aW9uU2V0PENvZGVHZW5lcmF0aW9u
TW9kZT4gY29kZUdlbmVyYXRpb25Nb2RlKQogICAgIHsKLSAgICAgICAgVW5saW5rZWRQcm9ncmFt
Q29kZUJsb2NrKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFVubGlua2Vk
UHJvZ3JhbUNvZGVCbG9jaz4odm0tPmhlYXApKSBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2sodm0s
IHZtLT51bmxpbmtlZFByb2dyYW1Db2RlQmxvY2tTdHJ1Y3R1cmUuZ2V0KCksIGluZm8sIGNvZGVH
ZW5lcmF0aW9uTW9kZSk7Ci0gICAgICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbigqdm0pOwor
ICAgICAgICBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2sqIGluc3RhbmNlID0gbmV3IChOb3ROdWxs
LCBhbGxvY2F0ZUNlbGw8VW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrPih2bS5oZWFwKSkgVW5saW5r
ZWRQcm9ncmFtQ29kZUJsb2NrKHZtLCB2bS51bmxpbmtlZFByb2dyYW1Db2RlQmxvY2tTdHJ1Y3R1
cmUuZ2V0KCksIGluZm8sIGNvZGVHZW5lcmF0aW9uTW9kZSk7CisgICAgICAgIGluc3RhbmNlLT5m
aW5pc2hDcmVhdGlvbih2bSk7CiAgICAgICAgIHJldHVybiBpbnN0YW5jZTsKICAgICB9CiAKQEAg
LTU0LDcgKzU0LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBmcmllbmQgQ2FjaGVkUHJvZ3Jh
bUNvZGVCbG9jazsKIAotICAgIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jayhWTSogdm0sIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBjb25zdCBFeGVjdXRhYmxlSW5mbyYgaW5mbywgT3B0aW9uU2V0PENv
ZGVHZW5lcmF0aW9uTW9kZT4gY29kZUdlbmVyYXRpb25Nb2RlKQorICAgIFVubGlua2VkUHJvZ3Jh
bUNvZGVCbG9jayhWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBFeGVjdXRhYmxl
SW5mbyYgaW5mbywgT3B0aW9uU2V0PENvZGVHZW5lcmF0aW9uTW9kZT4gY29kZUdlbmVyYXRpb25N
b2RlKQogICAgICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSwgR2xvYmFsQ29kZSwgaW5mbywgY29k
ZUdlbmVyYXRpb25Nb2RlKQogICAgIHsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkocmV2
aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRl
Y29kZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzNiw3ICszMzYsNyBAQCBCeXRl
Y29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoVk0mCiAgICAgLCBtX2NvZGVCbG9jayh2
bSwgY29kZUJsb2NrKQogICAgICwgbV90aGlzUmVnaXN0ZXIoQ2FsbEZyYW1lOjp0aGlzQXJndW1l
bnRPZmZzZXQoKSkKICAgICAsIG1fY29kZVR5cGUoR2xvYmFsQ29kZSkKLSAgICAsIG1fdm0oJnZt
KQorICAgICwgbV92bSh2bSkKICAgICAsIG1fbmVlZHNUb1VwZGF0ZUFycm93RnVuY3Rpb25Db250
ZXh0KHByb2dyYW1Ob2RlLT51c2VzQXJyb3dGdW5jdGlvbigpIHx8IHByb2dyYW1Ob2RlLT51c2Vz
RXZhbCgpKQogewogICAgIEFTU0VSVF9VTlVTRUQocGFyZW50U2NvcGVURFpWYXJpYWJsZXMsICFw
YXJlbnRTY29wZVREWlZhcmlhYmxlcy0+c2l6ZSgpKTsKQEAgLTM4MSw3ICszODEsNyBAQCBCeXRl
Y29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoVk0mCiAgICAgLCBtX3Njb3BlTm9kZShm
dW5jdGlvbk5vZGUpCiAgICAgLCBtX2NvZGVCbG9jayh2bSwgY29kZUJsb2NrKQogICAgICwgbV9j
b2RlVHlwZShGdW5jdGlvbkNvZGUpCi0gICAgLCBtX3ZtKCZ2bSkKKyAgICAsIG1fdm0odm0pCiAg
ICAgLCBtX2lzQnVpbHRpbkZ1bmN0aW9uKGNvZGVCbG9jay0+aXNCdWlsdGluRnVuY3Rpb24oKSkK
ICAgICAsIG1fdXNlc05vblN0cmljdEV2YWwoY29kZUJsb2NrLT51c2VzRXZhbCgpICYmICFjb2Rl
QmxvY2stPmlzU3RyaWN0TW9kZSgpKQogICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYmUgYWJsZSB0
byBoYXZlIHRhaWwgY2FsbCBlbGltaW5hdGlvbiB3aXRoIHRoZSBwcm9maWxlcgpAQCAtMzk4LDcg
KzM5OCw3IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihWTSYKIAogICAg
IGFsbG9jYXRlQ2FsbGVlU2F2ZVNwYWNlKCk7CiAgICAgCi0gICAgU3ltYm9sVGFibGUqIGZ1bmN0
aW9uU3ltYm9sVGFibGUgPSBTeW1ib2xUYWJsZTo6Y3JlYXRlKCptX3ZtKTsKKyAgICBTeW1ib2xU
YWJsZSogZnVuY3Rpb25TeW1ib2xUYWJsZSA9IFN5bWJvbFRhYmxlOjpjcmVhdGUobV92bSk7CiAg
ICAgZnVuY3Rpb25TeW1ib2xUYWJsZS0+c2V0VXNlc05vblN0cmljdEV2YWwobV91c2VzTm9uU3Ry
aWN0RXZhbCk7CiAgICAgaW50IHN5bWJvbFRhYmxlQ29uc3RhbnRJbmRleCA9IDA7CiAKQEAgLTU1
MCw3ICs1NTAsNyBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoVk0mCiAg
ICAgICAgICAgICAgICAgICAgIC8vIG5vdGlmeVdyaXRlKCksIHNpbmNlIHRoYXQgd291bGQgYmUg
Y3VtYmVyc29tZS4gQWxzbywgd2F0Y2hpbmcgZm9ybWFsCiAgICAgICAgICAgICAgICAgICAgIC8v
IHBhcmFtZXRlcnMgd2hlbiAiYXJndW1lbnRzIiBpcyBpbiBwbGF5IGlzIHVubGlrZWx5IHRvIGJl
IHN1cGVyIHByb2ZpdGFibGUuCiAgICAgICAgICAgICAgICAgICAgIC8vIFNvLCB3ZSBqdXN0IGRp
c2FibGUgaXQuCi0gICAgICAgICAgICAgICAgICAgIGVudHJ5LmRpc2FibGVXYXRjaGluZygqbV92
bSk7CisgICAgICAgICAgICAgICAgICAgIGVudHJ5LmRpc2FibGVXYXRjaGluZyhtX3ZtKTsKICAg
ICAgICAgICAgICAgICAgICAgZnVuY3Rpb25TeW1ib2xUYWJsZS0+c2V0KE5vTG9ja2luZ05lY2Vz
c2FyeSwgbmFtZSwgZW50cnkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBP
cFB1dFRvU2NvcGU6OmVtaXQodGhpcywgbV9sZXhpY2FsRW52aXJvbm1lbnRSZWdpc3RlciwgVUlO
VF9NQVgsIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEgKyBpKSwgR2V0UHV0SW5mbyhUaHJv
d0lmTm90Rm91bmQsIExvY2FsQ2xvc3VyZVZhciwgSW5pdGlhbGl6YXRpb25Nb2RlOjpOb3RJbml0
aWFsaXphdGlvbiksIFN5bWJvbFRhYmxlT3JTY29wZURlcHRoOjpzeW1ib2xUYWJsZShWaXJ0dWFs
UmVnaXN0ZXIgeyBzeW1ib2xUYWJsZUNvbnN0YW50SW5kZXggfSksIG9mZnNldC5vZmZzZXQoKSk7
CkBAIC04MDgsNyArODA4LDcgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9y
KFZNJgogICAgICAgICBlbWl0T3V0T2ZMaW5lQ2F0Y2hIYW5kbGVyKHRocm93blZhbHVlLmdldCgp
LCBudWxscHRyLCB0cnlGb3JtYWxQYXJhbWV0ZXJzRGF0YSk7CiAKICAgICAgICAgLy8gcmV0dXJu
IHByb21pc2VDYXBhYmlsaXR5LkByZWplY3QodGhyb3duVmFsdWUpCi0gICAgICAgIFJlZlB0cjxS
ZWdpc3RlcklEPiByZWplY3QgPSBlbWl0R2V0QnlJZChuZXdUZW1wb3JhcnkoKSwgcHJvbWlzZUNh
cGFiaWxpdHlSZWdpc3RlcigpLCBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5y
ZWplY3RQcml2YXRlTmFtZSgpKTsKKyAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHJlamVjdCA9
IGVtaXRHZXRCeUlkKG5ld1RlbXBvcmFyeSgpLCBwcm9taXNlQ2FwYWJpbGl0eVJlZ2lzdGVyKCks
IG1fdm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkucmVqZWN0UHJpdmF0ZU5hbWUoKSk7
CiAKICAgICAgICAgQ2FsbEFyZ3VtZW50cyBhcmdzKCp0aGlzLCBudWxscHRyLCAxKTsKICAgICAg
ICAgZW1pdExvYWQoYXJncy50aGlzUmVnaXN0ZXIoKSwganNVbmRlZmluZWQoKSk7CkBAIC04MTcs
NyArODE3LDcgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJgogICAg
ICAgICBKU1RleHRQb3NpdGlvbiBkaXZvdChmdW5jdGlvbk5vZGUtPmZpcnN0TGluZSgpLCBmdW5j
dGlvbk5vZGUtPnN0YXJ0T2Zmc2V0KCksIGZ1bmN0aW9uTm9kZS0+bGluZVN0YXJ0T2Zmc2V0KCkp
OwogCiAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZXN1bHQgPSBlbWl0Q2FsbChuZXdUZW1w
b3JhcnkoKSwgcmVqZWN0LmdldCgpLCBOb0V4cGVjdGVkRnVuY3Rpb24sIGFyZ3MsIGRpdm90LCBk
aXZvdCwgZGl2b3QsIERlYnVnZ2FibGVDYWxsOjpObyk7Ci0gICAgICAgIGVtaXRSZXR1cm4oZW1p
dEdldEJ5SWQobmV3VGVtcG9yYXJ5KCksIHByb21pc2VDYXBhYmlsaXR5UmVnaXN0ZXIoKSwgbV92
bS0+cHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkucHJvbWlzZVByaXZhdGVOYW1lKCkpKTsK
KyAgICAgICAgZW1pdFJldHVybihlbWl0R2V0QnlJZChuZXdUZW1wb3JhcnkoKSwgcHJvbWlzZUNh
cGFiaWxpdHlSZWdpc3RlcigpLCBtX3ZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLnBy
b21pc2VQcml2YXRlTmFtZSgpKSk7CiAKICAgICAgICAgZW1pdExhYmVsKGRpZE5vdFRocm93Lmdl
dCgpKTsKICAgICB9CkBAIC04MzYsNyArODM2LDcgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVj
b2RlR2VuZXJhdG9yKFZNJgogICAgIC8vIFNldCB1cCB0aGUgbGV4aWNhbCBlbnZpcm9ubWVudCBz
Y29wZSBhcyB0aGUgZ2VuZXJhdG9yIGZyYW1lLiBXZSBzdG9yZSB0aGUgc2F2ZWQgYW5kIHJlc3Vt
ZWQgZ2VuZXJhdG9yIHJlZ2lzdGVycyBpbnRvIHRoaXMgc2NvcGUgd2l0aCB0aGUgc3ltYm9sIGtl
eXMuCiAgICAgLy8gU2luY2UgdGhleSBhcmUgc3ltYm9sIGtleWVkLCB0aGVzZSB2YXJpYWJsZXMg
Y2Fubm90IGJlIHJlYWNoZWQgZnJvbSB0aGUgdXN1YWwgY29kZS4KICAgICBpZiAoaXNHZW5lcmF0
b3JPckFzeW5jRnVuY3Rpb25Cb2R5UGFyc2VNb2RlKHBhcnNlTW9kZSkpIHsKLSAgICAgICAgbV9n
ZW5lcmF0b3JGcmFtZVN5bWJvbFRhYmxlLnNldCgqbV92bSwgZnVuY3Rpb25TeW1ib2xUYWJsZSk7
CisgICAgICAgIG1fZ2VuZXJhdG9yRnJhbWVTeW1ib2xUYWJsZS5zZXQobV92bSwgZnVuY3Rpb25T
eW1ib2xUYWJsZSk7CiAgICAgICAgIG1fZ2VuZXJhdG9yRnJhbWVTeW1ib2xUYWJsZUluZGV4ID0g
c3ltYm9sVGFibGVDb25zdGFudEluZGV4OwogICAgICAgICBpZiAobV9sZXhpY2FsRW52aXJvbm1l
bnRSZWdpc3RlcikKICAgICAgICAgICAgIG1vdmUoZ2VuZXJhdG9yRnJhbWVSZWdpc3RlcigpLCBt
X2xleGljYWxFbnZpcm9ubWVudFJlZ2lzdGVyKTsKQEAgLTg2MCw3ICs4NjAsNyBAQCBCeXRlY29k
ZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoVk0mCiAgICAgLCBtX2NvZGVCbG9jayh2bSwg
Y29kZUJsb2NrKQogICAgICwgbV90aGlzUmVnaXN0ZXIoQ2FsbEZyYW1lOjp0aGlzQXJndW1lbnRP
ZmZzZXQoKSkKICAgICAsIG1fY29kZVR5cGUoRXZhbENvZGUpCi0gICAgLCBtX3ZtKCZ2bSkKKyAg
ICAsIG1fdm0odm0pCiAgICAgLCBtX3VzZXNOb25TdHJpY3RFdmFsKGNvZGVCbG9jay0+dXNlc0V2
YWwoKSAmJiAhY29kZUJsb2NrLT5pc1N0cmljdE1vZGUoKSkKICAgICAsIG1fbmVlZHNUb1VwZGF0
ZUFycm93RnVuY3Rpb25Db250ZXh0KGV2YWxOb2RlLT51c2VzQXJyb3dGdW5jdGlvbigpIHx8IGV2
YWxOb2RlLT51c2VzRXZhbCgpKQogICAgICwgbV9kZXJpdmVkQ29udGV4dFR5cGUoY29kZUJsb2Nr
LT5kZXJpdmVkQ29udGV4dFR5cGUoKSkKQEAgLTkyMyw3ICs5MjMsNyBAQCBCeXRlY29kZUdlbmVy
YXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoVk0mCiAgICAgLCBtX2NvZGVCbG9jayh2bSwgY29kZUJs
b2NrKQogICAgICwgbV90aGlzUmVnaXN0ZXIoQ2FsbEZyYW1lOjp0aGlzQXJndW1lbnRPZmZzZXQo
KSkKICAgICAsIG1fY29kZVR5cGUoTW9kdWxlQ29kZSkKLSAgICAsIG1fdm0oJnZtKQorICAgICwg
bV92bSh2bSkKICAgICAsIG1fdXNlc05vblN0cmljdEV2YWwoZmFsc2UpCiAgICAgLCBtX25lZWRz
VG9VcGRhdGVBcnJvd0Z1bmN0aW9uQ29udGV4dChtb2R1bGVQcm9ncmFtTm9kZS0+dXNlc0Fycm93
RnVuY3Rpb24oKSB8fCBtb2R1bGVQcm9ncmFtTm9kZS0+dXNlc0V2YWwoKSkKIHsKQEAgLTkzNCw3
ICs5MzQsNyBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoVk0mCiAKICAg
ICBhbGxvY2F0ZUNhbGxlZVNhdmVTcGFjZSgpOwogCi0gICAgU3ltYm9sVGFibGUqIG1vZHVsZUVu
dmlyb25tZW50U3ltYm9sVGFibGUgPSBTeW1ib2xUYWJsZTo6Y3JlYXRlKCptX3ZtKTsKKyAgICBT
eW1ib2xUYWJsZSogbW9kdWxlRW52aXJvbm1lbnRTeW1ib2xUYWJsZSA9IFN5bWJvbFRhYmxlOjpj
cmVhdGUobV92bSk7CiAgICAgbW9kdWxlRW52aXJvbm1lbnRTeW1ib2xUYWJsZS0+c2V0VXNlc05v
blN0cmljdEV2YWwobV91c2VzTm9uU3RyaWN0RXZhbCk7CiAgICAgbW9kdWxlRW52aXJvbm1lbnRT
eW1ib2xUYWJsZS0+c2V0U2NvcGVUeXBlKFN5bWJvbFRhYmxlOjpTY29wZVR5cGU6OkxleGljYWxT
Y29wZSk7CiAKQEAgLTk3Miw3ICs5NzIsNyBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVH
ZW5lcmF0b3IoVk0mCiAKICAgICAvLyBOb3cgZGVjbGFyZSBhbGwgdmFyaWFibGVzLgogCi0gICAg
Y3JlYXRlVmFyaWFibGUobV92bS0+cHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkubWV0YVBy
aXZhdGVOYW1lKCksIFZhcktpbmQ6OlNjb3BlLCBtb2R1bGVFbnZpcm9ubWVudFN5bWJvbFRhYmxl
LCBWZXJpZnlFeGlzdGluZyk7CisgICAgY3JlYXRlVmFyaWFibGUobV92bS5wcm9wZXJ0eU5hbWVz
LT5idWlsdGluTmFtZXMoKS5tZXRhUHJpdmF0ZU5hbWUoKSwgVmFyS2luZDo6U2NvcGUsIG1vZHVs
ZUVudmlyb25tZW50U3ltYm9sVGFibGUsIFZlcmlmeUV4aXN0aW5nKTsKIAogICAgIGZvciAoYXV0
byYgZW50cnkgOiBtb2R1bGVQcm9ncmFtTm9kZS0+dmFyRGVjbGFyYXRpb25zKCkpIHsKICAgICAg
ICAgQVNTRVJUKCFlbnRyeS52YWx1ZS5pc0xldCgpICYmICFlbnRyeS52YWx1ZS5pc0NvbnN0KCkp
OwpAQCAtOTk0LDcgKzk5NCw3IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRv
cihWTSYKICAgICBpZiAoc2hvdWxkRW1pdFR5cGVQcm9maWxlckhvb2tzKCkpCiAgICAgICAgIGNv
bnN0YW50U3ltYm9sVGFibGUgPSBhZGRDb25zdGFudFZhbHVlKG1vZHVsZUVudmlyb25tZW50U3lt
Ym9sVGFibGUpOwogICAgIGVsc2UKLSAgICAgICAgY29uc3RhbnRTeW1ib2xUYWJsZSA9IGFkZENv
bnN0YW50VmFsdWUobW9kdWxlRW52aXJvbm1lbnRTeW1ib2xUYWJsZS0+Y2xvbmVTY29wZVBhcnQo
Km1fdm0pKTsKKyAgICAgICAgY29uc3RhbnRTeW1ib2xUYWJsZSA9IGFkZENvbnN0YW50VmFsdWUo
bW9kdWxlRW52aXJvbm1lbnRTeW1ib2xUYWJsZS0+Y2xvbmVTY29wZVBhcnQobV92bSkpOwogCiAg
ICAgcHVzaFREWlZhcmlhYmxlcyhsZXhpY2FsVmFyaWFibGVzLCBURFpDaGVja09wdGltaXphdGlv
bjo6T3B0aW1pemUsIFREWlJlcXVpcmVtZW50OjpVbmRlclREWik7CiAgICAgYm9vbCBpc1dpdGhT
Y29wZSA9IGZhbHNlOwpAQCAtMjAxNyw3ICsyMDE3LDcgQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRv
cjo6cHVzaExleGljYWxTY29wZQogICAgIGlmIChzaG91bGRFbWl0RGVidWdIb29rcygpKQogICAg
ICAgICBlbnZpcm9ubWVudC5tYXJrQWxsVmFyaWFibGVzQXNDYXB0dXJlZCgpOwogCi0gICAgU3lt
Ym9sVGFibGUqIHN5bWJvbFRhYmxlID0gU3ltYm9sVGFibGU6OmNyZWF0ZSgqbV92bSk7CisgICAg
U3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0gU3ltYm9sVGFibGU6OmNyZWF0ZShtX3ZtKTsKICAg
ICBzd2l0Y2ggKHNjb3BlVHlwZSkgewogICAgIGNhc2UgU2NvcGVUeXBlOjpDYXRjaFNjb3BlOgog
ICAgICAgICBzeW1ib2xUYWJsZS0+c2V0U2NvcGVUeXBlKFN5bWJvbFRhYmxlOjpTY29wZVR5cGU6
OkNhdGNoU2NvcGUpOwpAQCAtMjA1NCw3ICsyMDU0LDcgQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRv
cjo6cHVzaExleGljYWxTY29wZQogICAgICAgICAgICAgbmV3U2NvcGUgPSBhZGRWYXIoKTsKICAg
ICAgICAgaWYgKCFjb25zdGFudFN5bWJvbFRhYmxlKSB7CiAgICAgICAgICAgICBBU1NFUlQoIXNo
b3VsZEVtaXRUeXBlUHJvZmlsZXJIb29rcygpKTsKLSAgICAgICAgICAgIGNvbnN0YW50U3ltYm9s
VGFibGUgPSBhZGRDb25zdGFudFZhbHVlKHN5bWJvbFRhYmxlLT5jbG9uZVNjb3BlUGFydCgqbV92
bSkpOworICAgICAgICAgICAgY29uc3RhbnRTeW1ib2xUYWJsZSA9IGFkZENvbnN0YW50VmFsdWUo
c3ltYm9sVGFibGUtPmNsb25lU2NvcGVQYXJ0KG1fdm0pKTsKICAgICAgICAgICAgIHN5bWJvbFRh
YmxlQ29uc3RhbnRJbmRleCA9IGNvbnN0YW50U3ltYm9sVGFibGUtPmluZGV4KCk7CiAgICAgICAg
IH0KICAgICAgICAgaWYgKGNvbnN0YW50U3ltYm9sVGFibGVSZXN1bHQpCkBAIC0yNjQ1LDcgKzI2
NDUsNyBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdERpcmVjCiAKICAgICBt
X3N0YXRpY1Byb3BlcnR5QW5hbHl6ZXIucHV0QnlJZChiYXNlLCBwcm9wZXJ0eUluZGV4KTsKIAot
ICAgIFB1dEJ5SWRGbGFncyB0eXBlID0gKHB1dFR5cGUgPT0gUHJvcGVydHlOb2RlOjpLbm93bkRp
cmVjdCB8fCBwcm9wZXJ0eSAhPSBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT51bmRlcnNjb3JlUHJvdG8p
ID8gUHV0QnlJZElzRGlyZWN0IDogUHV0QnlJZE5vbmU7CisgICAgUHV0QnlJZEZsYWdzIHR5cGUg
PSAocHV0VHlwZSA9PSBQcm9wZXJ0eU5vZGU6Oktub3duRGlyZWN0IHx8IHByb3BlcnR5ICE9IG1f
dm0ucHJvcGVydHlOYW1lcy0+dW5kZXJzY29yZVByb3RvKSA/IFB1dEJ5SWRJc0RpcmVjdCA6IFB1
dEJ5SWROb25lOwogICAgIE9wUHV0QnlJZDo6ZW1pdCh0aGlzLCBiYXNlLCBwcm9wZXJ0eUluZGV4
LCB2YWx1ZSwgdHlwZSk7CiAgICAgbV9jb2RlQmxvY2stPmFkZFByb3BlcnR5QWNjZXNzSW5zdHJ1
Y3Rpb24obV9sYXN0SW5zdHJ1Y3Rpb24ub2Zmc2V0KCkpOwogICAgIHJldHVybiB2YWx1ZTsKQEAg
LTI5MjYsNyArMjkyNiw3IEBAIE9wdGlvbmFsPENvbXBhY3RWYXJpYWJsZU1hcDo6SGFuZGxlPiBC
eXQKICAgICAgICAgfQogICAgIH0KIAotICAgIG1fY2FjaGVkVmFyaWFibGVzVW5kZXJURFogPSBt
X3ZtLT5tX2NvbXBhY3RWYXJpYWJsZU1hcC0+Z2V0KGVudmlyb25tZW50KTsKKyAgICBtX2NhY2hl
ZFZhcmlhYmxlc1VuZGVyVERaID0gbV92bS5tX2NvbXBhY3RWYXJpYWJsZU1hcC0+Z2V0KGVudmly
b25tZW50KTsKICAgICBtX2hhc0NhY2hlZFZhcmlhYmxlc1VuZGVyVERaID0gIWVudmlyb25tZW50
LmlzRW1wdHkoKTsKICAgICBpZiAoIW1faGFzQ2FjaGVkVmFyaWFibGVzVW5kZXJURFopCiAgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CkBAIC0yOTU2LDkgKzI5NTYsOSBAQCBSZWdpc3RlcklE
KiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdE5ld09iCiBKU1ZhbHVlIEJ5dGVjb2RlR2VuZXJhdG9y
OjphZGRCaWdJbnRDb25zdGFudChjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyLCB1aW50OF90
IHJhZGl4LCBib29sIHNpZ24pCiB7CiAgICAgcmV0dXJuIG1fYmlnSW50TWFwLmVuc3VyZShCaWdJ
bnRNYXBFbnRyeShpZGVudGlmaWVyLmltcGwoKSwgcmFkaXgsIHNpZ24pLCBbJl0gewotICAgICAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSgqdm0oKSk7CisgICAgICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKCkpOwogICAgICAgICBhdXRvIHBhcnNlSW50
U2lnbiA9IHNpZ24gPyBKU0JpZ0ludDo6UGFyc2VJbnRTaWduOjpTaWduZWQgOiBKU0JpZ0ludDo6
UGFyc2VJbnRTaWduOjpVbnNpZ25lZDsKLSAgICAgICAgSlNCaWdJbnQqIGJpZ0ludEluTWFwID0g
SlNCaWdJbnQ6OnBhcnNlSW50KG51bGxwdHIsICp2bSgpLCBpZGVudGlmaWVyLnN0cmluZygpLCBy
YWRpeCwgSlNCaWdJbnQ6OkVycm9yUGFyc2VNb2RlOjpUaHJvd0V4Y2VwdGlvbnMsIHBhcnNlSW50
U2lnbik7CisgICAgICAgIEpTQmlnSW50KiBiaWdJbnRJbk1hcCA9IEpTQmlnSW50OjpwYXJzZUlu
dChudWxscHRyLCB2bSgpLCBpZGVudGlmaWVyLnN0cmluZygpLCByYWRpeCwgSlNCaWdJbnQ6OkVy
cm9yUGFyc2VNb2RlOjpUaHJvd0V4Y2VwdGlvbnMsIHBhcnNlSW50U2lnbik7CiAgICAgICAgIC8v
IEZJWE1FOiBbRVNOZXh0XSBFbmFibGVzIGEgd2F5IHRvIHRocm93IGFuIGVycm9yIG9uIEJ5dGVD
b2RlR2VuZXJhdG9yIHN0ZXAKICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE4MDEzOQogICAgICAgICBzY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwpA
QCAtMjk4Myw3ICsyOTgzLDcgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmFkZFRl
bXBsYQogewogICAgIGF1dG8gcmVzdWx0ID0gbV90ZW1wbGF0ZU9iamVjdERlc2NyaXB0b3JTZXQu
YWRkKFdURk1vdmUoZGVzY3JpcHRvcikpOwogICAgIEpTVGVtcGxhdGVPYmplY3REZXNjcmlwdG9y
KiBkZXNjcmlwdG9yVmFsdWUgPSBtX3RlbXBsYXRlRGVzY3JpcHRvck1hcC5lbnN1cmUoZW5kT2Zm
c2V0LCBbJl0gewotICAgICAgICByZXR1cm4gSlNUZW1wbGF0ZU9iamVjdERlc2NyaXB0b3I6OmNy
ZWF0ZSgqdm0oKSwgcmVzdWx0Lml0ZXJhdG9yLT5jb3B5UmVmKCksIGVuZE9mZnNldCk7CisgICAg
ICAgIHJldHVybiBKU1RlbXBsYXRlT2JqZWN0RGVzY3JpcHRvcjo6Y3JlYXRlKHZtKCksIHJlc3Vs
dC5pdGVyYXRvci0+Y29weVJlZigpLCBlbmRPZmZzZXQpOwogICAgIH0pLml0ZXJhdG9yLT52YWx1
ZTsKICAgICBpbnQgaW5kZXggPSBhZGRDb25zdGFudEluZGV4KCk7CiAgICAgbV9jb2RlQmxvY2st
PmFkZENvbnN0YW50KGRlc2NyaXB0b3JWYWx1ZSk7CkBAIC0zMTA5LDcgKzMxMDksNyBAQCBSZWdp
c3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdE5ld01lCiBSZWdpc3RlcklEKiBCeXRlY29k
ZUdlbmVyYXRvcjo6ZW1pdE5ld0RlZmF1bHRDb25zdHJ1Y3RvcihSZWdpc3RlcklEKiBkc3QsIENv
bnN0cnVjdG9yS2luZCBjb25zdHJ1Y3RvcktpbmQsIGNvbnN0IElkZW50aWZpZXImIG5hbWUsCiAg
ICAgY29uc3QgSWRlbnRpZmllciYgZWNtYU5hbWUsIGNvbnN0IFNvdXJjZUNvZGUmIGNsYXNzU291
cmNlKQogewotICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gbV92
bS0+YnVpbHRpbkV4ZWN1dGFibGVzKCktPmNyZWF0ZURlZmF1bHRDb25zdHJ1Y3Rvcihjb25zdHJ1
Y3RvcktpbmQsIG5hbWUpOworICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRh
YmxlID0gbV92bS5idWlsdGluRXhlY3V0YWJsZXMoKS0+Y3JlYXRlRGVmYXVsdENvbnN0cnVjdG9y
KGNvbnN0cnVjdG9yS2luZCwgbmFtZSk7CiAgICAgZXhlY3V0YWJsZS0+c2V0SW52YWxpZFR5cGVQ
cm9maWxpbmdPZmZzZXRzKCk7CiAgICAgZXhlY3V0YWJsZS0+c2V0RWNtYU5hbWUoZWNtYU5hbWUp
OwogICAgIGV4ZWN1dGFibGUtPnNldENsYXNzU291cmNlKGNsYXNzU291cmNlKTsKQEAgLTMxNDQs
NyArMzE0NCw3IEBAIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRTZXRGdW5jdGlvbk4KICAg
ICAgICAgQ2xhc3NFeHByTm9kZSogY2xhc3NFeHByTm9kZSA9IHN0YXRpY19jYXN0PENsYXNzRXhw
ck5vZGUqPih2YWx1ZU5vZGUpOwogICAgICAgICBpZiAoIWNsYXNzRXhwck5vZGUtPmVjbWFOYW1l
KCkuaXNOdWxsKCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmIChjbGFzc0V4cHJO
b2RlLT5oYXNTdGF0aWNQcm9wZXJ0eShtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5uYW1lKSkKKyAgICAg
ICAgaWYgKGNsYXNzRXhwck5vZGUtPmhhc1N0YXRpY1Byb3BlcnR5KG1fdm0ucHJvcGVydHlOYW1l
cy0+bmFtZSkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfSBlbHNlCiAgICAgICAgIHJldHVy
bjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5l
cmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVy
L0J5dGVjb2RlR2VuZXJhdG9yLmgJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpA
QCAtMzc5LDkgKzM3OSw5IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIH5CeXRlY29kZUdl
bmVyYXRvcigpOwogICAgICAgICAKLSAgICAgICAgVk0qIHZtKCkgY29uc3QgeyByZXR1cm4gbV92
bTsgfQorICAgICAgICBWTSYgdm0oKSBjb25zdCB7IHJldHVybiBtX3ZtOyB9CiAgICAgICAgIFBh
cnNlckFyZW5hJiBwYXJzZXJBcmVuYSgpIGNvbnN0IHsgcmV0dXJuIG1fc2NvcGVOb2RlLT5wYXJz
ZXJBcmVuYSgpOyB9Ci0gICAgICAgIGNvbnN0IENvbW1vbklkZW50aWZpZXJzJiBwcm9wZXJ0eU5h
bWVzKCkgY29uc3QgeyByZXR1cm4gKm1fdm0tPnByb3BlcnR5TmFtZXM7IH0KKyAgICAgICAgY29u
c3QgQ29tbW9uSWRlbnRpZmllcnMmIHByb3BlcnR5TmFtZXMoKSBjb25zdCB7IHJldHVybiAqbV92
bS5wcm9wZXJ0eU5hbWVzOyB9CiAKICAgICAgICAgYm9vbCBpc0NvbnN0cnVjdG9yKCkgY29uc3Qg
eyByZXR1cm4gbV9jb2RlQmxvY2stPmlzQ29uc3RydWN0b3IoKTsgfQogICAgICAgICBEZXJpdmVk
Q29udGV4dFR5cGUgZGVyaXZlZENvbnRleHRUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9kZXJpdmVk
Q29udGV4dFR5cGU7IH0KQEAgLTUwMCw3ICs1MDAsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgewogICAgICAgICAgICAgLy8gTm9kZTo6ZW1pdENvZGUgYXNzdW1lcyB0aGF0IGRzdCwgaWYg
cHJvdmlkZWQsIGlzIGVpdGhlciBhIGxvY2FsIG9yIGEgcmVmZXJlbmNlZCB0ZW1wb3JhcnkuCiAg
ICAgICAgICAgICBBU1NFUlQoIWRzdCB8fCBkc3QgPT0gaWdub3JlZFJlc3VsdCgpIHx8ICFkc3Qt
PmlzVGVtcG9yYXJ5KCkgfHwgZHN0LT5yZWZDb3VudCgpKTsKLSAgICAgICAgICAgIGlmIChVTkxJ
S0VMWSghbV92bS0+aXNTYWZlVG9SZWN1cnNlKCkpKSB7CisgICAgICAgICAgICBpZiAoVU5MSUtF
TFkoIW1fdm0uaXNTYWZlVG9SZWN1cnNlKCkpKSB7CiAgICAgICAgICAgICAgICAgZW1pdFRocm93
RXhwcmVzc2lvblRvb0RlZXBFeGNlcHRpb24oKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgICAgICB9CkBAIC01MzYsNyArNTM2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IHsKICAgICAgICAgICAgIC8vIE5vZGU6OmVtaXRDb2RlIGFzc3VtZXMgdGhhdCBkc3QsIGlmIHBy
b3ZpZGVkLCBpcyBlaXRoZXIgYSBsb2NhbCBvciBhIHJlZmVyZW5jZWQgdGVtcG9yYXJ5LgogICAg
ICAgICAgICAgQVNTRVJUKCFkc3QgfHwgZHN0ID09IGlnbm9yZWRSZXN1bHQoKSB8fCAhZHN0LT5p
c1RlbXBvcmFyeSgpIHx8IGRzdC0+cmVmQ291bnQoKSk7Ci0gICAgICAgICAgICBpZiAoVU5MSUtF
TFkoIW1fdm0tPmlzU2FmZVRvUmVjdXJzZSgpKSkKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWSgh
bV92bS5pc1NhZmVUb1JlY3Vyc2UoKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGVtaXRUaHJv
d0V4cHJlc3Npb25Ub29EZWVwRXhjZXB0aW9uKCk7CiAgICAgICAgICAgICBpZiAoVU5MSUtFTFko
bi0+bmVlZHNEZWJ1Z0hvb2soKSkpCiAgICAgICAgICAgICAgICAgZW1pdERlYnVnSG9vayhuKTsK
QEAgLTU1Niw3ICs1NTYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgUmVnaXN0ZXJJRCog
ZW1pdERlZmluZUNsYXNzRWxlbWVudHMoUHJvcGVydHlMaXN0Tm9kZSogbiwgUmVnaXN0ZXJJRCog
Y29uc3RydWN0b3IsIFJlZ2lzdGVySUQqIHByb3RvdHlwZSkKICAgICAgICAgewogICAgICAgICAg
ICAgQVNTRVJUKGNvbnN0cnVjdG9yLT5yZWZDb3VudCgpICYmIHByb3RvdHlwZS0+cmVmQ291bnQo
KSk7Ci0gICAgICAgICAgICBpZiAoVU5MSUtFTFkoIW1fdm0tPmlzU2FmZVRvUmVjdXJzZSgpKSkK
KyAgICAgICAgICAgIGlmIChVTkxJS0VMWSghbV92bS5pc1NhZmVUb1JlY3Vyc2UoKSkpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGVtaXRUaHJvd0V4cHJlc3Npb25Ub29EZWVwRXhjZXB0aW9uKCk7
CiAgICAgICAgICAgICBpZiAoVU5MSUtFTFkobi0+bmVlZHNEZWJ1Z0hvb2soKSkpCiAgICAgICAg
ICAgICAgICAgZW1pdERlYnVnSG9vayhuKTsKQEAgLTU3OSw3ICs1NzksNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKIAogICAgICAgICB2b2lkIGVtaXROb2RlSW5Db25kaXRpb25Db250ZXh0KEV4cHJlc3Np
b25Ob2RlKiBuLCBMYWJlbCYgdHJ1ZVRhcmdldCwgTGFiZWwmIGZhbHNlVGFyZ2V0LCBGYWxsVGhy
b3VnaE1vZGUgZmFsbFRocm91Z2hNb2RlKQogICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoVU5M
SUtFTFkoIW1fdm0tPmlzU2FmZVRvUmVjdXJzZSgpKSkgeworICAgICAgICAgICAgaWYgKFVOTElL
RUxZKCFtX3ZtLmlzU2FmZVRvUmVjdXJzZSgpKSkgewogICAgICAgICAgICAgICAgIGVtaXRUaHJv
d0V4cHJlc3Npb25Ub29EZWVwRXhjZXB0aW9uKCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAgICAgfQpAQCAtMTI5MCw3ICsxMjkwLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAg
ICAgICAgU3RhdGljUHJvcGVydHlBbmFseXplciBtX3N0YXRpY1Byb3BlcnR5QW5hbHl6ZXI7CiAK
LSAgICAgICAgVk0qIG1fdm07CisgICAgICAgIFZNJiBtX3ZtOwogCiAgICAgICAgIE9wY29kZUlE
IG1fbGFzdE9wY29kZUlEID0gb3BfZW5kOwogICAgICAgICBJbnN0cnVjdGlvblN0cmVhbTo6TXV0
YWJsZVJlZiBtX2xhc3RJbnN0cnVjdGlvbiB7IG1fd3JpdGVyLnJlZigpIH07CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3Bw
CShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVy
L05vZGVzQ29kZWdlbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0Niw3ICsxNDYsNyBAQCBSZWdp
c3RlcklEKiBSZWdFeHBOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0CiAKICAgICBhdXRvIGZsYWdzID0g
WWFycjo6cGFyc2VGbGFncyhtX2ZsYWdzLnN0cmluZygpKTsKICAgICBBU1NFUlQoZmxhZ3MuaGFz
VmFsdWUoKSk7Ci0gICAgUmVnRXhwKiByZWdFeHAgPSBSZWdFeHA6OmNyZWF0ZSgqZ2VuZXJhdG9y
LnZtKCksIG1fcGF0dGVybi5zdHJpbmcoKSwgZmxhZ3MudmFsdWUoKSk7CisgICAgUmVnRXhwKiBy
ZWdFeHAgPSBSZWdFeHA6OmNyZWF0ZShnZW5lcmF0b3Iudm0oKSwgbV9wYXR0ZXJuLnN0cmluZygp
LCBmbGFncy52YWx1ZSgpKTsKICAgICBpZiAocmVnRXhwLT5pc1ZhbGlkKCkpCiAgICAgICAgIHJl
dHVybiBnZW5lcmF0b3IuZW1pdE5ld1JlZ0V4cChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihk
c3QpLCByZWdFeHApOwogCkBAIC00MTAsMTIgKzQxMCwxMiBAQCBSZWdpc3RlcklEKiBBcnJheU5v
ZGU6OmVtaXRCeXRlY29kZShCeXRlCiAgICAgYXV0byBuZXdBcnJheSA9IFsmXSAoUmVnaXN0ZXJJ
RCogZHN0LCBFbGVtZW50Tm9kZSogZWxlbWVudHMsIHVuc2lnbmVkIGxlbmd0aCwgYm9vbCBoYWRW
YXJpYWJsZUV4cHJlc3Npb24pIHsKICAgICAgICAgaWYgKGxlbmd0aCAmJiAhaGFkVmFyaWFibGVF
eHByZXNzaW9uKSB7CiAgICAgICAgICAgICByZWNvbW1lbmRlZEluZGV4aW5nVHlwZSB8PSBDb3B5
T25Xcml0ZTsKLSAgICAgICAgICAgIEFTU0VSVChnZW5lcmF0b3Iudm0oKS0+aGVhcC5pc0RlZmVy
cmVkKCkpOyAvLyBXZSBydW4gYnl0ZWNvZGUgZ2VuZXJhdG9yIHVuZGVyIGEgRGVmZXJHQy4gSWYg
d2Ugc3RvcHBlZCBkb2luZyB0aGF0LCB3ZSdkIG5lZWQgdG8gcHV0IGEgRGVmZXJHQyBoZXJlIGFz
IHdlIGZpbGxlZCBpbiB0aGVzZSBzbG90cy4KLSAgICAgICAgICAgIGF1dG8qIGFycmF5ID0gSlNJ
bW11dGFibGVCdXR0ZXJmbHk6OmNyZWF0ZSgqZ2VuZXJhdG9yLnZtKCksIHJlY29tbWVuZGVkSW5k
ZXhpbmdUeXBlLCBsZW5ndGgpOworICAgICAgICAgICAgQVNTRVJUKGdlbmVyYXRvci52bSgpLmhl
YXAuaXNEZWZlcnJlZCgpKTsgLy8gV2UgcnVuIGJ5dGVjb2RlIGdlbmVyYXRvciB1bmRlciBhIERl
ZmVyR0MuIElmIHdlIHN0b3BwZWQgZG9pbmcgdGhhdCwgd2UnZCBuZWVkIHRvIHB1dCBhIERlZmVy
R0MgaGVyZSBhcyB3ZSBmaWxsZWQgaW4gdGhlc2Ugc2xvdHMuCisgICAgICAgICAgICBhdXRvKiBh
cnJheSA9IEpTSW1tdXRhYmxlQnV0dGVyZmx5OjpjcmVhdGUoZ2VuZXJhdG9yLnZtKCksIHJlY29t
bWVuZGVkSW5kZXhpbmdUeXBlLCBsZW5ndGgpOwogICAgICAgICAgICAgdW5zaWduZWQgaW5kZXgg
PSAwOwogICAgICAgICAgICAgZm9yIChFbGVtZW50Tm9kZSogZWxlbWVudCA9IGVsZW1lbnRzOyBp
bmRleCA8IGxlbmd0aDsgZWxlbWVudCA9IGVsZW1lbnQtPm5leHQoKSkgewogICAgICAgICAgICAg
ICAgIEFTU0VSVChlbGVtZW50LT52YWx1ZSgpLT5pc0NvbnN0YW50KCkpOwotICAgICAgICAgICAg
ICAgIGFycmF5LT5zZXRJbmRleCgqZ2VuZXJhdG9yLnZtKCksIGluZGV4KyssIHN0YXRpY19jYXN0
PENvbnN0YW50Tm9kZSo+KGVsZW1lbnQtPnZhbHVlKCkpLT5qc1ZhbHVlKGdlbmVyYXRvcikpOwor
ICAgICAgICAgICAgICAgIGFycmF5LT5zZXRJbmRleChnZW5lcmF0b3Iudm0oKSwgaW5kZXgrKywg
c3RhdGljX2Nhc3Q8Q29uc3RhbnROb2RlKj4oZWxlbWVudC0+dmFsdWUoKSktPmpzVmFsdWUoZ2Vu
ZXJhdG9yKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLmVt
aXROZXdBcnJheUJ1ZmZlcihkc3QsIGFycmF5LCByZWNvbW1lbmRlZEluZGV4aW5nVHlwZSk7CiAg
ICAgICAgIH0KQEAgLTkzOSw3ICs5MzksNyBAQCBSZWdpc3RlcklEKiBGdW5jdGlvbkNhbGxWYWx1
ZU5vZGU6OmVtaXRCCiAKIFJlZ2lzdGVySUQqIEZ1bmN0aW9uQ2FsbFJlc29sdmVOb2RlOjplbWl0
Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQog
ewotICAgIGlmIChVTkxJS0VMWShtX2lkZW50ID09IGdlbmVyYXRvci52bSgpLT5wcm9wZXJ0eU5h
bWVzLT5idWlsdGluTmFtZXMoKS5hc3NlcnRQcml2YXRlTmFtZSgpKSkgeworICAgIGlmIChVTkxJ
S0VMWShtX2lkZW50ID09IGdlbmVyYXRvci52bSgpLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1l
cygpLmFzc2VydFByaXZhdGVOYW1lKCkpKSB7CiAgICAgICAgIGlmIChBU1NFUlRfRElTQUJMRUQp
CiAgICAgICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLm1vdmUoZHN0LCBnZW5lcmF0b3IuZW1pdExv
YWQobnVsbHB0ciwganNVbmRlZmluZWQoKSkpOwogICAgIH0KQEAgLTEwMDQsNyArMTAwNCw3IEBA
IFJlZ2lzdGVySUQqIEJ5dGVjb2RlSW50cmluc2ljTm9kZTo6ZW1pdF8KICAgICBSZWZQdHI8UmVn
aXN0ZXJJRD4gYmFzZSA9IGdlbmVyYXRvci5lbWl0Tm9kZShub2RlKTsKICAgICBub2RlID0gbm9k
ZS0+bV9uZXh0OwogICAgIEFTU0VSVChub2RlLT5tX2V4cHItPmlzU3RyaW5nKCkpOwotICAgIFN5
bWJvbEltcGwqIHN5bWJvbCA9IGdlbmVyYXRvci52bSgpLT5wcm9wZXJ0eU5hbWVzLT5sb29rVXBQ
cml2YXRlTmFtZShzdGF0aWNfY2FzdDxTdHJpbmdOb2RlKj4obm9kZS0+bV9leHByKS0+dmFsdWUo
KSk7CisgICAgU3ltYm9sSW1wbCogc3ltYm9sID0gZ2VuZXJhdG9yLnZtKCkucHJvcGVydHlOYW1l
cy0+bG9va1VwUHJpdmF0ZU5hbWUoc3RhdGljX2Nhc3Q8U3RyaW5nTm9kZSo+KG5vZGUtPm1fZXhw
ciktPnZhbHVlKCkpOwogICAgIEFTU0VSVChzeW1ib2wpOwogICAgIEFTU0VSVCghbm9kZS0+bV9u
ZXh0KTsKICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXREaXJlY3RHZXRCeUlkKGdlbmVyYXRvci5m
aW5hbERlc3RpbmF0aW9uKGRzdCksIGJhc2UuZ2V0KCksIGdlbmVyYXRvci5wYXJzZXJBcmVuYSgp
LmlkZW50aWZpZXJBcmVuYSgpLm1ha2VJZGVudGlmaWVyKGdlbmVyYXRvci52bSgpLCBzeW1ib2wp
KTsKQEAgLTEwNTUsNyArMTA1NSw3IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlSW50cmluc2ljTm9k
ZTo6ZW1pdF8KICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9IGdlbmVyYXRvci5lbWl0Tm9k
ZShub2RlKTsKICAgICBub2RlID0gbm9kZS0+bV9uZXh0OwogICAgIEFTU0VSVChub2RlLT5tX2V4
cHItPmlzU3RyaW5nKCkpOwotICAgIFN5bWJvbEltcGwqIHN5bWJvbCA9IGdlbmVyYXRvci52bSgp
LT5wcm9wZXJ0eU5hbWVzLT5sb29rVXBQcml2YXRlTmFtZShzdGF0aWNfY2FzdDxTdHJpbmdOb2Rl
Kj4obm9kZS0+bV9leHByKS0+dmFsdWUoKSk7CisgICAgU3ltYm9sSW1wbCogc3ltYm9sID0gZ2Vu
ZXJhdG9yLnZtKCkucHJvcGVydHlOYW1lcy0+bG9va1VwUHJpdmF0ZU5hbWUoc3RhdGljX2Nhc3Q8
U3RyaW5nTm9kZSo+KG5vZGUtPm1fZXhwciktPnZhbHVlKCkpOwogICAgIEFTU0VSVChzeW1ib2wp
OwogICAgIG5vZGUgPSBub2RlLT5tX25leHQ7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHZhbHVl
ID0gZ2VuZXJhdG9yLmVtaXROb2RlKG5vZGUpOwpAQCAtMTE3NCw3ICsxMTc0LDcgQEAgUmVnaXN0
ZXJJRCogQnl0ZWNvZGVJbnRyaW5zaWNOb2RlOjplbWl0XwogICAgICAgICBBU1NFUlQoIW5vZGUt
Pm1fbmV4dCk7CiAgICAgICAgIHJldHVybiBnZW5lcmF0b3IubW92ZShkc3QsIGdlbmVyYXRvci5l
bWl0VG9PYmplY3QodGVtcC5nZXQoKSwgc3JjLmdldCgpLCBtZXNzYWdlKSk7CiAgICAgfQotICAg
IHJldHVybiBnZW5lcmF0b3IubW92ZShkc3QsIGdlbmVyYXRvci5lbWl0VG9PYmplY3QodGVtcC5n
ZXQoKSwgc3JjLmdldCgpLCBnZW5lcmF0b3Iudm0oKS0+cHJvcGVydHlOYW1lcy0+ZW1wdHlJZGVu
dGlmaWVyKSk7CisgICAgcmV0dXJuIGdlbmVyYXRvci5tb3ZlKGRzdCwgZ2VuZXJhdG9yLmVtaXRU
b09iamVjdCh0ZW1wLmdldCgpLCBzcmMuZ2V0KCksIGdlbmVyYXRvci52bSgpLnByb3BlcnR5TmFt
ZXMtPmVtcHR5SWRlbnRpZmllcikpOwogfQogCiBSZWdpc3RlcklEKiBCeXRlY29kZUludHJpbnNp
Y05vZGU6OmVtaXRfaW50cmluc2ljX2lkV2l0aFByb2ZpbGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdl
bmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQpAQCAtMTI5Nyw3ICsxMjk3LDcgQEAgUmVnaXN0ZXJJ
RCogQnl0ZWNvZGVJbnRyaW5zaWNOb2RlOjplbWl0XwogICAgICAgICBBU1NFUlQodHlwZSgpID09
IFR5cGU6OkNvbnN0YW50KTsgXAogICAgICAgICBpZiAoZHN0ID09IGdlbmVyYXRvci5pZ25vcmVk
UmVzdWx0KCkpIFwKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOyBcCi0gICAgICAgIHJldHVy
biBnZW5lcmF0b3IuZW1pdExvYWQoZHN0LCBnZW5lcmF0b3Iudm0oKS0+Ynl0ZWNvZGVJbnRyaW5z
aWNSZWdpc3RyeSgpLm5hbWUjI1ZhbHVlKGdlbmVyYXRvcikpOyBcCisgICAgICAgIHJldHVybiBn
ZW5lcmF0b3IuZW1pdExvYWQoZHN0LCBnZW5lcmF0b3Iudm0oKS5ieXRlY29kZUludHJpbnNpY1Jl
Z2lzdHJ5KCkubmFtZSMjVmFsdWUoZ2VuZXJhdG9yKSk7IFwKICAgICB9CiAgICAgSlNDX0NPTU1P
Tl9CWVRFQ09ERV9JTlRSSU5TSUNfQ09OU1RBTlRTX0VBQ0hfTkFNRShKU0NfREVDTEFSRV9CWVRF
Q09ERV9JTlRSSU5TSUNfQ09OU1RBTlRfR0VORVJBVE9SUykKICN1bmRlZiBKU0NfREVDTEFSRV9C
WVRFQ09ERV9JTlRSSU5TSUNfQ09OU1RBTlRfR0VORVJBVE9SUwpAQCAtMjMyNCw3ICsyMzI0LDcg
QEAgUmVnaXN0ZXJJRCogSW5zdGFuY2VPZk5vZGU6OmVtaXRCeXRlY29kZQogICAgIGdlbmVyYXRv
ci5lbWl0SnVtcElmRmFsc2UoaXNPYmplY3QuZ2V0KCksIHR5cGVFcnJvci5nZXQoKSk7CiAKICAg
ICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2
b3RFbmQoKSk7Ci0gICAgZ2VuZXJhdG9yLmVtaXRHZXRCeUlkKGhhc0luc3RhbmNlVmFsdWUuZ2V0
KCksIGNvbnN0cnVjdG9yLmdldCgpLCBnZW5lcmF0b3Iudm0oKS0+cHJvcGVydHlOYW1lcy0+aGFz
SW5zdGFuY2VTeW1ib2wpOworICAgIGdlbmVyYXRvci5lbWl0R2V0QnlJZChoYXNJbnN0YW5jZVZh
bHVlLmdldCgpLCBjb25zdHJ1Y3Rvci5nZXQoKSwgZ2VuZXJhdG9yLnZtKCkucHJvcGVydHlOYW1l
cy0+aGFzSW5zdGFuY2VTeW1ib2wpOwogCiAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5m
byhkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAgIGdlbmVyYXRvci5lbWl0
T3ZlcnJpZGVzSGFzSW5zdGFuY2UoaXNDdXN0b20uZ2V0KCksIGNvbnN0cnVjdG9yLmdldCgpLCBo
YXNJbnN0YW5jZVZhbHVlLmdldCgpKTsKQEAgLTIzMzMsNyArMjMzMyw3IEBAIFJlZ2lzdGVySUQq
IEluc3RhbmNlT2ZOb2RlOjplbWl0Qnl0ZWNvZGUKICAgICBnZW5lcmF0b3IuZW1pdEp1bXBJZlRy
dWUoaXNDdXN0b20uZ2V0KCksIGN1c3RvbS5nZXQoKSk7CiAKICAgICBnZW5lcmF0b3IuZW1pdEV4
cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7Ci0gICAgZ2Vu
ZXJhdG9yLmVtaXRHZXRCeUlkKHByb3RvdHlwZS5nZXQoKSwgY29uc3RydWN0b3IuZ2V0KCksIGdl
bmVyYXRvci52bSgpLT5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUpOworICAgIGdlbmVyYXRvci5l
bWl0R2V0QnlJZChwcm90b3R5cGUuZ2V0KCksIGNvbnN0cnVjdG9yLmdldCgpLCBnZW5lcmF0b3Iu
dm0oKS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUpOwogCiAgICAgZ2VuZXJhdG9yLmVtaXRFeHBy
ZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAgIGdlbmVy
YXRvci5lbWl0SW5zdGFuY2VPZihkc3RSZWcuZ2V0KCksIHZhbHVlLmdldCgpLCBwcm90b3R5cGUu
Z2V0KCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIu
Y3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIv
RGVidWdnZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqICBDb3B5
cmlnaHQgKEMpIDIwMDgtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAg
Q29weXJpZ2h0IChDKSAyMDA4LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAxIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcp
CiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCiAgKgpA
QCAtNTYsNyArNTYsNyBAQCBzdHJ1Y3QgR2F0aGVyU291cmNlUHJvdmlkZXJzIDogcHVibGljIE1h
CiAgICAgICAgIAogICAgICAgICBKU0NlbGwqIGNlbGwgPSBzdGF0aWNfY2FzdDxKU0NlbGwqPiho
ZWFwQ2VsbCk7CiAgICAgICAgIAotICAgICAgICBKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IGpzRHlu
YW1pY0Nhc3Q8SlNGdW5jdGlvbio+KCpjZWxsLT52bSgpLCBjZWxsKTsKKyAgICAgICAgSlNGdW5j
dGlvbiogZnVuY3Rpb24gPSBqc0R5bmFtaWNDYXN0PEpTRnVuY3Rpb24qPihjZWxsLT52bSgpLCBj
ZWxsKTsKICAgICAgICAgaWYgKCFmdW5jdGlvbikKICAgICAgICAgICAgIHJldHVybiBJdGVyYXRp
b25TdGF0dXM6OkNvbnRpbnVlOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdn
ZXIvRGVidWdnZXJQYXJzZURhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlclBhcnNlRGF0YS5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlclBhcnNlRGF0YS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMTU0LDcgKzE1NCw3IEBAIGJvb2wgZ2F0aGVyRGVidWdnZXJQYXJzZURhdGEo
Vk0mIHZtLCBjb24KICAgICBKU1BhcnNlclNjcmlwdE1vZGUgc2NyaXB0TW9kZSA9IERlYnVnZ2Vy
UGFyc2VJbmZvPFQ+OjpzY3JpcHRNb2RlOwogCiAgICAgUGFyc2VyRXJyb3IgZXJyb3I7Ci0gICAg
c3RkOjp1bmlxdWVfcHRyPFJvb3ROb2RlPiByb290Tm9kZSA9IHBhcnNlPFJvb3ROb2RlPigmdm0s
IHNvdXJjZSwgSWRlbnRpZmllcigpLAorICAgIHN0ZDo6dW5pcXVlX3B0cjxSb290Tm9kZT4gcm9v
dE5vZGUgPSBwYXJzZTxSb290Tm9kZT4odm0sIHNvdXJjZSwgSWRlbnRpZmllcigpLAogICAgICAg
ICBKU1BhcnNlckJ1aWx0aW5Nb2RlOjpOb3RCdWlsdGluLCBzdHJpY3RNb2RlLCBzY3JpcHRNb2Rl
LCBwYXJzZU1vZGUsIFN1cGVyQmluZGluZzo6Tm90TmVlZGVkLAogICAgICAgICBlcnJvciwgbnVs
bHB0ciwgQ29uc3RydWN0b3JLaW5kOjpOb25lLCBEZXJpdmVkQ29udGV4dFR5cGU6Ok5vbmUsIEV2
YWxDb250ZXh0VHlwZTo6Tm9uZSwKICAgICAgICAgJmRlYnVnZ2VyUGFyc2VEYXRhKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlclNjb3BlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJTY29wZS5jcHAJ
KHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1
Z2dlclNjb3BlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDgtMjAwOSwgMjAxNCwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE2Myw3ICsxNjMs
NyBAQCBEZWJ1Z2dlclNjb3BlKiBEZWJ1Z2dlclNjb3BlOjpuZXh0KCkKIHsKICAgICBBU1NFUlQo
aXNWYWxpZCgpKTsKICAgICBpZiAoIW1fbmV4dCAmJiBtX3Njb3BlLT5uZXh0KCkpIHsKLSAgICAg
ICAgVk0mIHZtID0gKm1fc2NvcGUtPnZtKCk7CisgICAgICAgIFZNJiB2bSA9IG1fc2NvcGUtPnZt
KCk7CiAgICAgICAgIERlYnVnZ2VyU2NvcGUqIG5leHRTY29wZSA9IGNyZWF0ZSh2bSwgbV9zY29w
ZS0+bmV4dCgpKTsKICAgICAgICAgbV9uZXh0LnNldCh2bSwgdGhpcywgbmV4dFNjb3BlKTsKICAg
ICB9CkBAIC0yMjQsNyArMjI0LDcgQEAgYm9vbCBEZWJ1Z2dlclNjb3BlOjppc05lc3RlZExleGlj
YWxTY29wZQogCiBTdHJpbmcgRGVidWdnZXJTY29wZTo6bmFtZSgpIGNvbnN0CiB7Ci0gICAgU3lt
Ym9sVGFibGUqIHN5bWJvbFRhYmxlID0gbV9zY29wZS0+c3ltYm9sVGFibGUoKnZtKCkpOworICAg
IFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSA9IG1fc2NvcGUtPnN5bWJvbFRhYmxlKHZtKCkpOwog
ICAgIGlmICghc3ltYm9sVGFibGUpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKIApAQCAtMjM3
LDcgKzIzNyw3IEBAIFN0cmluZyBEZWJ1Z2dlclNjb3BlOjpuYW1lKCkgY29uc3QKIAogRGVidWdn
ZXJMb2NhdGlvbiBEZWJ1Z2dlclNjb3BlOjpsb2NhdGlvbigpIGNvbnN0CiB7Ci0gICAgU3ltYm9s
VGFibGUqIHN5bWJvbFRhYmxlID0gbV9zY29wZS0+c3ltYm9sVGFibGUoKnZtKCkpOworICAgIFN5
bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSA9IG1fc2NvcGUtPnN5bWJvbFRhYmxlKHZtKCkpOwogICAg
IGlmICghc3ltYm9sVGFibGUpCiAgICAgICAgIHJldHVybiBEZWJ1Z2dlckxvY2F0aW9uKCk7CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZElkZW50aWZpZXJzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRJZGVu
dGlmaWVycy5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRGVzaXJlZElkZW50aWZpZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTg5LDcgKzg5
LDcgQEAgdm9pZCBEZXNpcmVkSWRlbnRpZmllcnM6OnJlYWxseUFkZChWTSYgdgogewogICAgIGZv
ciAoYXV0byByZXAgOiBtX2FkZGVkSWRlbnRpZmllcnMpIHsKICAgICAgICAgQVNTRVJUKHJlcC0+
aGFzQXRMZWFzdE9uZVJlZigpKTsKLSAgICAgICAgY29tbW9uRGF0YS0+ZGZnSWRlbnRpZmllcnMu
YXBwZW5kKElkZW50aWZpZXI6OmZyb21VaWQoJnZtLCByZXApKTsKKyAgICAgICAgY29tbW9uRGF0
YS0+ZGZnSWRlbnRpZmllcnMuYXBwZW5kKElkZW50aWZpZXI6OmZyb21VaWQodm0sIHJlcCkpOwog
ICAgIH0KIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0
Y2hwb2ludHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
RGVzaXJlZFdhdGNocG9pbnRzLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zOCw3ICszOCw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIHZvaWQgQXJy
YXlCdWZmZXJWaWV3V2F0Y2hwb2ludEFkYXB0b3I6OmFkZCgKICAgICBDb2RlQmxvY2sqIGNvZGVC
bG9jaywgSlNBcnJheUJ1ZmZlclZpZXcqIHZpZXcsIENvbW1vbkRhdGEmIGNvbW1vbikKIHsKLSAg
ICBWTSYgdm0gPSAqY29kZUJsb2NrLT52bSgpOworICAgIFZNJiB2bSA9IGNvZGVCbG9jay0+dm0o
KTsKICAgICBXYXRjaHBvaW50KiB3YXRjaHBvaW50ID0gY29tbW9uLndhdGNocG9pbnRzLmFkZChj
b2RlQmxvY2spOwogICAgIEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludFNldCogbmV1dGVy
aW5nV2F0Y2hwb2ludCA9CiAgICAgICAgIEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludFNl
dDo6Y3JlYXRlKHZtKTsKQEAgLTY2LDcgKzY2LDcgQEAgdm9pZCBGdW5jdGlvbkV4ZWN1dGFibGVB
ZGFwdG9yOjphZGQoCiB2b2lkIEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludEFkYXB0b3I6OmFk
ZCgKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRp
b24mIGtleSwgQ29tbW9uRGF0YSYgY29tbW9uKQogewotICAgIFZNJiB2bSA9ICpjb2RlQmxvY2st
PnZtKCk7CisgICAgVk0mIHZtID0gY29kZUJsb2NrLT52bSgpOwogICAgIHN3aXRjaCAoa2V5Lmtp
bmQoKSkgewogICAgIGNhc2UgUHJvcGVydHlDb25kaXRpb246OkVxdWl2YWxlbmNlOgogICAgICAg
ICBjb21tb24uYWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50cy5hZGQoa2V5
LCBjb2RlQmxvY2spLT5pbnN0YWxsKHZtKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRnJvemVuVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Zyb3plblZhbHVlLmgJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRnJvemVuVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU4LDcgKzU4
LDcgQEAgcHVibGljOgogICAgICAgICAsIG1fc3RyZW5ndGgoc3RyZW5ndGgpCiAgICAgewogICAg
ICAgICBBU1NFUlQoKCEhdmFsdWUgJiYgdmFsdWUuaXNDZWxsKCkpID09ICEhc3RydWN0dXJlKTsK
LSAgICAgICAgQVNTRVJUKCF2YWx1ZSB8fCAhdmFsdWUuaXNDZWxsKCkgfHwgdmFsdWUuYXNDZWxs
KCktPmNsYXNzSW5mbygqdmFsdWUuYXNDZWxsKCktPnZtKCkpID09IHN0cnVjdHVyZS0+Y2xhc3NJ
bmZvKCkpOworICAgICAgICBBU1NFUlQoIXZhbHVlIHx8ICF2YWx1ZS5pc0NlbGwoKSB8fCB2YWx1
ZS5hc0NlbGwoKS0+Y2xhc3NJbmZvKHZhbHVlLmFzQ2VsbCgpLT52bSgpKSA9PSBzdHJ1Y3R1cmUt
PmNsYXNzSW5mbygpKTsKICAgICAgICAgQVNTRVJUKCEhc3RydWN0dXJlIHx8IChzdHJlbmd0aCA9
PSBXZWFrVmFsdWUpKTsKICAgICB9CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0dyYXBoLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3MjUsNyArMTcyNSw3IEBAIGJv
b2wgR3JhcGg6OmNhbk9wdGltaXplU3RyaW5nT2JqZWN0QWNjZXMKICAgICBTdHJ1Y3R1cmUqIHN0
cmluZ09iamVjdFN0cnVjdHVyZSA9IGdsb2JhbE9iamVjdEZvcihjb2RlT3JpZ2luKS0+c3RyaW5n
T2JqZWN0U3RydWN0dXJlKCk7CiAgICAgcmVnaXN0ZXJTdHJ1Y3R1cmUoc3RyaW5nT2JqZWN0U3Ry
dWN0dXJlKTsKICAgICBBU1NFUlQoc3RyaW5nT2JqZWN0U3RydWN0dXJlLT5zdG9yZWRQcm90b3R5
cGUoKS5pc09iamVjdCgpKTsKLSAgICBBU1NFUlQoc3RyaW5nT2JqZWN0U3RydWN0dXJlLT5zdG9y
ZWRQcm90b3R5cGUoKS5hc0NlbGwoKS0+Y2xhc3NJbmZvKCpzdHJpbmdPYmplY3RTdHJ1Y3R1cmUt
PnN0b3JlZFByb3RvdHlwZSgpLmFzQ2VsbCgpLT52bSgpKSA9PSBTdHJpbmdQcm90b3R5cGU6Omlu
Zm8oKSk7CisgICAgQVNTRVJUKHN0cmluZ09iamVjdFN0cnVjdHVyZS0+c3RvcmVkUHJvdG90eXBl
KCkuYXNDZWxsKCktPmNsYXNzSW5mbyhzdHJpbmdPYmplY3RTdHJ1Y3R1cmUtPnN0b3JlZFByb3Rv
dHlwZSgpLmFzQ2VsbCgpLT52bSgpKSA9PSBTdHJpbmdQcm90b3R5cGU6OmluZm8oKSk7CiAKICAg
ICBpZiAoIXdhdGNoQ29uZGl0aW9ucyhnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eU1pc3ND
b25jdXJyZW50bHkobV92bSwgZ2xvYmFsT2JqZWN0LCBzdHJpbmdPYmplY3RTdHJ1Y3R1cmUsIG1f
dm0ucHJvcGVydHlOYW1lcy0+dG9QcmltaXRpdmVTeW1ib2wuaW1wbCgpKSkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGls
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29t
cGlsZXIuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0pJVENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTg1LDcgKzg1LDcgQEAgdm9p
ZCBKSVRDb21waWxlcjo6bGlua09TUkV4aXRzKCkKICAgICAgICAgfQogICAgIH0KICAgICAKLSAg
ICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9zckV4aXRUaHVuayA9IHZt
KCktPmdldENUSVN0dWIob3NyRXhpdFRodW5rR2VuZXJhdG9yKTsKKyAgICBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9zckV4aXRUaHVuayA9IHZtKCkuZ2V0Q1RJU3R1Yihv
c3JFeGl0VGh1bmtHZW5lcmF0b3IpOwogICAgIGF1dG8gb3NyRXhpdFRodW5rTGFiZWwgPSBDb2Rl
TG9jYXRpb25MYWJlbDxKSVRUaHVua1B0clRhZz4ob3NyRXhpdFRodW5rLmNvZGUoKSk7CiAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1faml0Q29kZS0+b3NyRXhpdC5zaXplKCk7ICsraSkg
ewogICAgICAgICBPU1JFeGl0Q29tcGlsYXRpb25JbmZvJiBpbmZvID0gbV9leGl0Q29tcGlsYXRp
b25JbmZvW2ldOwpAQCAtOTYsNyArOTYsNyBAQCB2b2lkIEpJVENvbXBpbGVyOjpsaW5rT1NSRXhp
dHMoKQogICAgICAgICAgICAgaW5mby5tX3JlcGxhY2VtZW50RGVzdGluYXRpb24gPSBsYWJlbCgp
OwogCiAgICAgICAgIGppdEFzc2VydEhhc1ZhbGlkQ2FsbEZyYW1lKCk7Ci0gICAgICAgIHN0b3Jl
MzIoVHJ1c3RlZEltbTMyKGkpLCAmdm0oKS0+b3NyRXhpdEluZGV4KTsKKyAgICAgICAgc3RvcmUz
MihUcnVzdGVkSW1tMzIoaSksICZ2bSgpLm9zckV4aXRJbmRleCk7CiAgICAgICAgIGlmIChPcHRp
b25zOjp1c2VQcm9iZU9TUkV4aXQoKSkgewogICAgICAgICAgICAgSnVtcCB0YXJnZXQgPSBqdW1w
KCk7CiAgICAgICAgICAgICBhZGRMaW5rVGFzayhbdGFyZ2V0LCBvc3JFeGl0VGh1bmtMYWJlbF0g
KExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKQEAgLTE0NywxMCArMTQ3LDEwIEBAIHZvaWQgSklU
Q29tcGlsZXI6OmNvbXBpbGVFeGNlcHRpb25IYW5kbGUKICAgICBpZiAoIW1fZXhjZXB0aW9uQ2hl
Y2tzV2l0aENhbGxGcmFtZVJvbGxiYWNrLmVtcHR5KCkpIHsKICAgICAgICAgbV9leGNlcHRpb25D
aGVja3NXaXRoQ2FsbEZyYW1lUm9sbGJhY2subGluayh0aGlzKTsKIAotICAgICAgICBjb3B5Q2Fs
bGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgpLT50b3BFbnRyeUZyYW1l
KTsKKyAgICAgICAgY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIo
dm0oKS50b3BFbnRyeUZyYW1lKTsKIAogICAgICAgICAvLyBsb29rdXBFeGNlcHRpb25IYW5kbGVy
RnJvbUNhbGxlckZyYW1lIGlzIHBhc3NlZCB0d28gYXJndW1lbnRzLCB0aGUgVk0gYW5kIHRoZSBl
eGVjICh0aGUgQ2FsbEZyYW1lKikuCi0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cih2bSgpKSwg
R1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKCZ2bSgp
KSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKICAgICAgICAgbW92ZShHUFJJbmZvOjpjYWxsRnJh
bWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKICAgICAgICAgYWRkUHRyKFRydXN0
ZWRJbW0zMihtX2dyYXBoLnN0YWNrUG9pbnRlck9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSks
IEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAKQEAg
LTE2MSwxNiArMTYxLDE2IEBAIHZvaWQgSklUQ29tcGlsZXI6OmNvbXBpbGVFeGNlcHRpb25IYW5k
bGUKICNlbmRpZgogICAgICAgICBtX2NhbGxzLmFwcGVuZChDYWxsTGlua1JlY29yZChjYWxsKE9w
ZXJhdGlvblB0clRhZyksIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4obG9va3VwRXhjZXB0
aW9uSGFuZGxlckZyb21DYWxsZXJGcmFtZSkpKTsKIAotICAgICAgICBqdW1wVG9FeGNlcHRpb25I
YW5kbGVyKCp2bSgpKTsKKyAgICAgICAganVtcFRvRXhjZXB0aW9uSGFuZGxlcih2bSgpKTsKICAg
ICB9CiAKICAgICBpZiAoIW1fZXhjZXB0aW9uQ2hlY2tzLmVtcHR5KCkpIHsKICAgICAgICAgbV9l
eGNlcHRpb25DaGVja3MubGluayh0aGlzKTsKIAotICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNUb0Vu
dHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgpLT50b3BFbnRyeUZyYW1lKTsKKyAgICAgICAg
Y29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0oKS50b3BFbnRy
eUZyYW1lKTsKIAogICAgICAgICAvLyBsb29rdXBFeGNlcHRpb25IYW5kbGVyIGlzIHBhc3NlZCB0
d28gYXJndW1lbnRzLCB0aGUgVk0gYW5kIHRoZSBleGVjICh0aGUgQ2FsbEZyYW1lKikuCi0gICAg
ICAgIG1vdmUoVHJ1c3RlZEltbVB0cih2bSgpKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAg
ICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKCZ2bSgpKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsK
ICAgICAgICAgbW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1l
bnRHUFIxKTsKIAogI2lmIENQVShYODYpCkBAIC0xODAsNyArMTgwLDcgQEAgdm9pZCBKSVRDb21w
aWxlcjo6Y29tcGlsZUV4Y2VwdGlvbkhhbmRsZQogI2VuZGlmCiAgICAgICAgIG1fY2FsbHMuYXBw
ZW5kKENhbGxMaW5rUmVjb3JkKGNhbGwoT3BlcmF0aW9uUHRyVGFnKSwgRnVuY3Rpb25QdHI8T3Bl
cmF0aW9uUHRyVGFnPihsb29rdXBFeGNlcHRpb25IYW5kbGVyKSkpOwogCi0gICAgICAgIGp1bXBU
b0V4Y2VwdGlvbkhhbmRsZXIoKnZtKCkpOworICAgICAgICBqdW1wVG9FeGNlcHRpb25IYW5kbGVy
KHZtKCkpOwogICAgIH0KIH0KIApAQCAtMjY2LDcgKzI2Niw3IEBAIHZvaWQgSklUQ29tcGlsZXI6
OmxpbmsoTGlua0J1ZmZlciYgbGlua0IKICAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2luQnlJ
ZHMsIGxpbmtCdWZmZXIpOwogICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1faW5zdGFuY2VPZnMs
IGxpbmtCdWZmZXIpOwogCi0gICAgYXV0byBsaW5rQ2FsbFRodW5rID0gRnVuY3Rpb25QdHI8Tm9Q
dHJUYWc+KHZtKCktPmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikucmV0YWdnZWRD
b2RlPE5vUHRyVGFnPigpKTsKKyAgICBhdXRvIGxpbmtDYWxsVGh1bmsgPSBGdW5jdGlvblB0cjxO
b1B0clRhZz4odm0oKS5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLnJldGFnZ2Vk
Q29kZTxOb1B0clRhZz4oKSk7CiAgICAgZm9yIChhdXRvJiByZWNvcmQgOiBtX2pzQ2FsbHMpIHsK
ICAgICAgICAgQ2FsbExpbmtJbmZvJiBpbmZvID0gKnJlY29yZC5pbmZvOwogICAgICAgICBsaW5r
QnVmZmVyLmxpbmsocmVjb3JkLnNsb3dDYWxsLCBsaW5rQ2FsbFRodW5rKTsKQEAgLTI5Myw3ICsy
OTMsNyBAQCB2b2lkIEpJVENvbXBpbGVyOjpsaW5rKExpbmtCdWZmZXImIGxpbmtCCiAgICAgICAg
ICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFnPihyZWNv
cmQuY2FsbCkpOwogICAgIH0KICAgICAKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IG9zckV4aXRUaHVuayA9IHZtKCktPmdldENUSVN0dWIob3NyRXhpdEdlbmVyYXRp
b25UaHVua0dlbmVyYXRvcik7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBvc3JFeGl0VGh1bmsgPSB2bSgpLmdldENUSVN0dWIob3NyRXhpdEdlbmVyYXRpb25UaHVu
a0dlbmVyYXRvcik7CiAgICAgYXV0byB0YXJnZXQgPSBDb2RlTG9jYXRpb25MYWJlbDxKSVRUaHVu
a1B0clRhZz4ob3NyRXhpdFRodW5rLmNvZGUoKSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG1faml0Q29kZS0+b3NyRXhpdC5zaXplKCk7ICsraSkgewogICAgICAgICBPU1JFeGl0Q29t
cGlsYXRpb25JbmZvJiBpbmZvID0gbV9leGl0Q29tcGlsYXRpb25JbmZvW2ldOwpAQCAtMzU0LDcg
KzM1NCw3IEBAIHN0YXRpYyB2b2lkIGVtaXRTdGFja092ZXJmbG93Q2hlY2soSklUQ28KICAgICBq
aXQuYWRkUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoZnJhbWVUb3BPZmZzZXQpLCBH
UFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6cmVnVDEpOwogICAgIGlmIChVTkxJ
S0VMWShtYXhGcmFtZVNpemUgPiBPcHRpb25zOjpyZXNlcnZlZFpvbmVTaXplKCkpKQogICAgICAg
ICBzdGFja092ZXJmbG93LmFwcGVuZChqaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpBYm92
ZSwgR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKSk7Ci0gICAgc3Rh
Y2tPdmVyZmxvdy5hcHBlbmQoaml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6QWJvdmUsIE1h
Y3JvQXNzZW1ibGVyOjpBYnNvbHV0ZUFkZHJlc3Moaml0LnZtKCktPmFkZHJlc3NPZlNvZnRTdGFj
a0xpbWl0KCkpLCBHUFJJbmZvOjpyZWdUMSkpOworICAgIHN0YWNrT3ZlcmZsb3cuYXBwZW5kKGpp
dC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlLCBNYWNyb0Fzc2VtYmxlcjo6QWJzb2x1
dGVBZGRyZXNzKGppdC52bSgpLmFkZHJlc3NPZlNvZnRTdGFja0xpbWl0KCkpLCBHUFJJbmZvOjpy
ZWdUMSkpOwogfQogCiB2b2lkIEpJVENvbXBpbGVyOjpjb21waWxlKCkKQEAgLTUxOSw3ICs1MTks
NyBAQCB2b2lkIEpJVENvbXBpbGVyOjpjb21waWxlRnVuY3Rpb24oKQogICAgIGNvZGVCbG9jaygp
LT5zaHJpbmtUb0ZpdChDb2RlQmxvY2s6OkxhdGVTaHJpbmspOwogCiAgICAgaWYgKHJlcXVpcmVz
QXJpdHlGaXh1cCkKLSAgICAgICAgbGlua0J1ZmZlci0+bGluayhjYWxsQXJpdHlGaXh1cCwgRnVu
Y3Rpb25QdHI8SklUVGh1bmtQdHJUYWc+KHZtKCktPmdldENUSVN0dWIoYXJpdHlGaXh1cEdlbmVy
YXRvcikuY29kZSgpKSk7CisgICAgICAgIGxpbmtCdWZmZXItPmxpbmsoY2FsbEFyaXR5Rml4dXAs
IEZ1bmN0aW9uUHRyPEpJVFRodW5rUHRyVGFnPih2bSgpLmdldENUSVN0dWIoYXJpdHlGaXh1cEdl
bmVyYXRvcikuY29kZSgpKSk7CiAKICAgICBkaXNhc3NlbWJsZSgqbGlua0J1ZmZlcik7CiAKQEAg
LTY1MywxMSArNjUzLDExIEBAIHZvaWQgSklUQ29tcGlsZXI6OmV4Y2VwdGlvbkNoZWNrKCkKICAg
ICBib29sIHdpbGxDYXRjaEV4Y2VwdGlvbiA9IG1fZ3JhcGgud2lsbENhdGNoRXhjZXB0aW9uSW5N
YWNoaW5lRnJhbWUobV9zcGVjdWxhdGl2ZS0+bV9jdXJyZW50Tm9kZS0+b3JpZ2luLmZvckV4aXQs
IG9wQ2F0Y2hPcmlnaW4sIGV4Y2VwdGlvbkhhbmRsZXIpOyAKICAgICBpZiAod2lsbENhdGNoRXhj
ZXB0aW9uKSB7CiAgICAgICAgIHVuc2lnbmVkIHN0cmVhbUluZGV4ID0gbV9zcGVjdWxhdGl2ZS0+
bV9vdXRPZkxpbmVTdHJlYW1JbmRleCA/ICptX3NwZWN1bGF0aXZlLT5tX291dE9mTGluZVN0cmVh
bUluZGV4IDogbV9zcGVjdWxhdGl2ZS0+bV9zdHJlYW0tPnNpemUoKTsKLSAgICAgICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXAgaGFkRXhjZXB0aW9uID0gZW1pdE5vblBhdGNoYWJsZUV4Y2VwdGlvbkNo
ZWNrKCp2bSgpKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgaGFkRXhjZXB0aW9uID0g
ZW1pdE5vblBhdGNoYWJsZUV4Y2VwdGlvbkNoZWNrKHZtKCkpOwogICAgICAgICAvLyBXZSBhc3N1
bWUgaGVyZSB0aGF0IHRoaXMgaXMgY2FsbGVkIGFmdGVyIGNhbGxPcGVhcnRpb24oKS9hcHBlbmRD
YWxsKCkgaXMgY2FsbGVkLgogICAgICAgICBhcHBlbmRFeGNlcHRpb25IYW5kbGluZ09TUkV4aXQo
RXhjZXB0aW9uQ2hlY2ssIHN0cmVhbUluZGV4LCBvcENhdGNoT3JpZ2luLCBleGNlcHRpb25IYW5k
bGVyLCBtX2ppdENvZGUtPmNvbW1vbi5sYXN0Q2FsbFNpdGUoKSwgaGFkRXhjZXB0aW9uKTsKICAg
ICB9IGVsc2UKLSAgICAgICAgbV9leGNlcHRpb25DaGVja3MuYXBwZW5kKGVtaXRFeGNlcHRpb25D
aGVjaygqdm0oKSkpOworICAgICAgICBtX2V4Y2VwdGlvbkNoZWNrcy5hcHBlbmQoZW1pdEV4Y2Vw
dGlvbkNoZWNrKHZtKCkpKTsKIH0KIAogQ2FsbFNpdGVJbmRleCBKSVRDb21waWxlcjo6cmVjb3Jk
Q2FsbFNpdGVBbmRHZW5lcmF0ZUV4Y2VwdGlvbkhhbmRsaW5nT1NSRXhpdElmTmVlZGVkKGNvbnN0
IENvZGVPcmlnaW4mIGNhbGxTaXRlQ29kZU9yaWdpbiwgdW5zaWduZWQgZXZlbnRTdHJlYW1JbmRl
eCkKQEAgLTY5MSw3ICs2OTEsNyBAQCB2b2lkIEpJVENvbXBpbGVyOjptYWtlQ2F0Y2hPU1JFbnRy
eUJ1ZmZlCiB7CiAgICAgaWYgKG1fZ3JhcGgubV9tYXhMb2NhbHNGb3JDYXRjaE9TUkVudHJ5KSB7
CiAgICAgICAgIHVpbnQzMl90IG51bWJlck9mTGl2ZUxvY2FscyA9IHN0ZDo6bWF4KCptX2dyYXBo
Lm1fbWF4TG9jYWxzRm9yQ2F0Y2hPU1JFbnRyeSwgMXUpOyAvLyBNYWtlIHN1cmUgd2UgYWx3YXlz
IGFsbG9jYXRlIGEgbm9uLW51bGwgY2F0Y2hPU1JFbnRyeUJ1ZmZlci4KLSAgICAgICAgbV9qaXRD
b2RlLT5jb21tb24uY2F0Y2hPU1JFbnRyeUJ1ZmZlciA9IHZtKCktPnNjcmF0Y2hCdWZmZXJGb3JT
aXplKHNpemVvZihKU1ZhbHVlKSAqIG51bWJlck9mTGl2ZUxvY2Fscyk7CisgICAgICAgIG1faml0
Q29kZS0+Y29tbW9uLmNhdGNoT1NSRW50cnlCdWZmZXIgPSB2bSgpLnNjcmF0Y2hCdWZmZXJGb3JT
aXplKHNpemVvZihKU1ZhbHVlKSAqIG51bWJlck9mTGl2ZUxvY2Fscyk7CiAgICAgfQogfQogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCShyZXZpc2lv
biAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEx
LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDExLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0xNTAsMTMgKzE1MCwxMyBAQCBwdWJsaWM6CiAKICAgICB2b2lk
IGV4Y2VwdGlvbkNoZWNrV2l0aENhbGxGcmFtZVJvbGxiYWNrKCkKICAgICB7Ci0gICAgICAgIG1f
ZXhjZXB0aW9uQ2hlY2tzV2l0aENhbGxGcmFtZVJvbGxiYWNrLmFwcGVuZChlbWl0RXhjZXB0aW9u
Q2hlY2soKnZtKCkpKTsKKyAgICAgICAgbV9leGNlcHRpb25DaGVja3NXaXRoQ2FsbEZyYW1lUm9s
bGJhY2suYXBwZW5kKGVtaXRFeGNlcHRpb25DaGVjayh2bSgpKSk7CiAgICAgfQogCiAgICAgLy8g
QWRkIGEgY2FsbCBvdXQgZnJvbSBKSVQgY29kZSwgd2l0aCBhIGZhc3QgZXhjZXB0aW9uIGNoZWNr
IHRoYXQgdGVzdHMgaWYgdGhlIHJldHVybiB2YWx1ZSBpcyB6ZXJvLgogICAgIHZvaWQgZmFzdEV4
Y2VwdGlvbkNoZWNrKCkKICAgICB7Ci0gICAgICAgIGNhbGxFeGNlcHRpb25GdXp6KCp2bSgpKTsK
KyAgICAgICAgY2FsbEV4Y2VwdGlvbkZ1enoodm0oKSk7CiAgICAgICAgIG1fZXhjZXB0aW9uQ2hl
Y2tzLmFwcGVuZChicmFuY2hUZXN0UHRyKFplcm8sIEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7
CiAgICAgfQogICAgIApAQCAtMjU0LDcgKzI1NCw3IEBAIHB1YmxpYzoKIAogICAgIFBDVG9Db2Rl
T3JpZ2luTWFwQnVpbGRlciYgcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyKCkgeyByZXR1cm4gbV9w
Y1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXI7IH0KIAotICAgIFZNKiB2bSgpIHsgcmV0dXJuICZtX2dy
YXBoLm1fdm07IH0KKyAgICBWTSYgdm0oKSB7IHJldHVybiBtX2dyYXBoLm1fdm07IH0KIAogcHJp
dmF0ZToKICAgICBmcmllbmQgY2xhc3MgT1NSRXhpdEp1bXBQbGFjZWhvbGRlcjsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTGF6eUpTVmFsdWUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTGF6eUpTVmFsdWUuY3BwCShyZXZpc2lvbiAy
NDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xhenlKU1ZhbHVlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMs
IDIwMTQsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00OSwxMSArNDksMTEgQEAgSlNWYWx1ZSBMYXp5SlNW
YWx1ZTo6Z2V0VmFsdWUoVk0mIHZtKSBjbwogICAgIGNhc2UgS25vd25WYWx1ZToKICAgICAgICAg
cmV0dXJuIHZhbHVlKCktPnZhbHVlKCk7CiAgICAgY2FzZSBTaW5nbGVDaGFyYWN0ZXJTdHJpbmc6
Ci0gICAgICAgIHJldHVybiBqc1NpbmdsZUNoYXJhY3RlclN0cmluZygmdm0sIHUuY2hhcmFjdGVy
KTsKKyAgICAgICAgcmV0dXJuIGpzU2luZ2xlQ2hhcmFjdGVyU3RyaW5nKHZtLCB1LmNoYXJhY3Rl
cik7CiAgICAgY2FzZSBLbm93blN0cmluZ0ltcGw6Ci0gICAgICAgIHJldHVybiBqc1N0cmluZygm
dm0sIHUuc3RyaW5nSW1wbCk7CisgICAgICAgIHJldHVybiBqc1N0cmluZyh2bSwgdS5zdHJpbmdJ
bXBsKTsKICAgICBjYXNlIE5ld1N0cmluZ0ltcGw6Ci0gICAgICAgIHJldHVybiBqc1N0cmluZygm
dm0sIEF0b21TdHJpbmdJbXBsOjphZGQodS5zdHJpbmdJbXBsKSk7CisgICAgICAgIHJldHVybiBq
c1N0cmluZyh2bSwgQXRvbVN0cmluZ0ltcGw6OmFkZCh1LnN0cmluZ0ltcGwpKTsKICAgICB9CiAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4gSlNWYWx1ZSgpOwpA
QCAtMjUxLDcgKzI1MSw3IEBAIHZvaWQgTGF6eUpTVmFsdWU6OmVtaXQoQ0NhbGxIZWxwZXJzJiBq
aXQKICAgICAKICAgICBqaXQuYWRkTGlua1Rhc2soCiAgICAgICAgIFtjb2RlQmxvY2ssIGxhYmVs
LCB0aGlzVmFsdWVdIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICBKU1Zh
bHVlIHJlYWxWYWx1ZSA9IHRoaXNWYWx1ZS5nZXRWYWx1ZSgqY29kZUJsb2NrLT52bSgpKTsKKyAg
ICAgICAgICAgIEpTVmFsdWUgcmVhbFZhbHVlID0gdGhpc1ZhbHVlLmdldFZhbHVlKGNvZGVCbG9j
ay0+dm0oKSk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChyZWFsVmFsdWUuaXNDZWxsKCkp
OwogCiAgICAgICAgICAgICBjb2RlQmxvY2stPmFkZENvbnN0YW50KHJlYWxWYWx1ZSk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAkocmV2aXNpb24gMjQ5
MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEwOSw3ICsxMDksNyBAQCB2b2lkKiBwcmVwYXJlT1NSRW50cnkoRXhlY1N0
YXRlKiBleGVjLCBDCiAgICAgICAgICAgICAiIGZyb20gYmMjIiwgYnl0ZWNvZGVJbmRleCwgIlxu
Iik7CiAgICAgfQogICAgIAotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7CiAKICAgICBzYW5pdGl6ZVN0YWNrRm9yVk0odm0pOwogICAgIApAQCAtMjM4
LDcgKzIzOCw3IEBAIHZvaWQqIHByZXBhcmVPU1JFbnRyeShFeGVjU3RhdGUqIGV4ZWMsIEMKICAg
ICAvLyAgICB3b3VsZCBoYXZlIG90aGVyd2lzZSBqdXN0IGtlcHQgcnVubmluZyBhbGJlaXQgbGVz
cyBxdWlja2x5LgogICAgIAogICAgIHVuc2lnbmVkIGZyYW1lU2l6ZUZvckNoZWNrID0gaml0Q29k
ZS0+Y29tbW9uLnJlcXVpcmVkUmVnaXN0ZXJDb3VudEZvckV4ZWN1dGlvbkFuZEV4aXQoKTsKLSAg
ICBpZiAoVU5MSUtFTFkoIXZtLT5lbnN1cmVTdGFja0NhcGFjaXR5Rm9yKCZleGVjLT5yZWdpc3Rl
cnMoKVt2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChmcmFtZVNpemVGb3JDaGVjayAtIDEpLm9mZnNl
dCgpXSkpKSB7CisgICAgaWYgKFVOTElLRUxZKCF2bS5lbnN1cmVTdGFja0NhcGFjaXR5Rm9yKCZl
eGVjLT5yZWdpc3RlcnMoKVt2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChmcmFtZVNpemVGb3JDaGVj
ayAtIDEpLm9mZnNldCgpXSkpKSB7CiAgICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkp
CiAgICAgICAgICAgICBkYXRhTG9nRigiICAgIE9TUiBmYWlsZWQgYmVjYXVzZSBzdGFjayBncm93
dGggZmFpbGVkLlxuIik7CiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtMjU4LDcgKzI1OCw3
IEBAIHZvaWQqIHByZXBhcmVPU1JFbnRyeShFeGVjU3RhdGUqIGV4ZWMsIEMKICAgICB1bnNpZ25l
ZCBiYXNlbGluZUZyYW1lU2l6ZSA9IGVudHJ5LT5tX2V4cGVjdGVkVmFsdWVzLm51bWJlck9mTG9j
YWxzKCk7CiAgICAgdW5zaWduZWQgbWF4RnJhbWVTaXplID0gc3RkOjptYXgoZnJhbWVTaXplLCBi
YXNlbGluZUZyYW1lU2l6ZSk7CiAKLSAgICBSZWdpc3Rlciogc2NyYXRjaCA9IGJpdHdpc2VfY2Fz
dDxSZWdpc3Rlcio+KHZtLT5zY3JhdGNoQnVmZmVyRm9yU2l6ZShzaXplb2YoUmVnaXN0ZXIpICog
KDIgKyBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycyArIG1heEZyYW1lU2l6ZSkpLT5k
YXRhQnVmZmVyKCkpOworICAgIFJlZ2lzdGVyKiBzY3JhdGNoID0gYml0d2lzZV9jYXN0PFJlZ2lz
dGVyKj4odm0uc2NyYXRjaEJ1ZmZlckZvclNpemUoc2l6ZW9mKFJlZ2lzdGVyKSAqICgyICsgQ2Fs
bEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMgKyBtYXhGcmFtZVNpemUpKS0+ZGF0YUJ1ZmZl
cigpKTsKICAgICAKICAgICAqYml0d2lzZV9jYXN0PHNpemVfdCo+KHNjcmF0Y2ggKyAwKSA9IGZy
YW1lU2l6ZTsKICAgICAKQEAgLTMxMSw3ICszMTEsNyBAQCB2b2lkKiBwcmVwYXJlT1NSRW50cnko
RXhlY1N0YXRlKiBleGVjLCBDCiAgICAgUmVnaXN0ZXJTZXQgZG9udFNhdmVSZWdpc3RlcnMgPSBS
ZWdpc3RlclNldChSZWdpc3RlclNldDo6c3RhY2tSZWdpc3RlcnMoKSwgUmVnaXN0ZXJTZXQ6OmFs
bEZQUnMoKSk7CiAKICAgICB1bnNpZ25lZCByZWdpc3RlckNvdW50ID0gcmVnaXN0ZXJTYXZlTG9j
YXRpb25zLT5zaXplKCk7Ci0gICAgVk1FbnRyeVJlY29yZCogcmVjb3JkID0gdm1FbnRyeVJlY29y
ZCh2bS0+dG9wRW50cnlGcmFtZSk7CisgICAgVk1FbnRyeVJlY29yZCogcmVjb3JkID0gdm1FbnRy
eVJlY29yZCh2bS50b3BFbnRyeUZyYW1lKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
cmVnaXN0ZXJDb3VudDsgaSsrKSB7CiAgICAgICAgIFJlZ2lzdGVyQXRPZmZzZXQgY3VycmVudEVu
dHJ5ID0gcmVnaXN0ZXJTYXZlTG9jYXRpb25zLT5hdChpKTsKICAgICAgICAgaWYgKGRvbnRTYXZl
UmVnaXN0ZXJzLmdldChjdXJyZW50RW50cnkucmVnKCkpKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIxLDE3
ICsxMDIxLDE3IEBAIHZvaWQgT1NSRXhpdDo6ZW1pdFJlc3RvcmVBcmd1bWVudHMoQ0NhbGwKIAog
dm9pZCBKSVRfT1BFUkFUSU9OIE9TUkV4aXQ6OmNvbXBpbGVPU1JFeGl0KEV4ZWNTdGF0ZSogZXhl
YykKIHsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSgqdm0pOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgaWYgKHZhbGlkYXRlREZHRG9l
c0dDKSB7CiAgICAgICAgIC8vIFdlJ3JlIGFib3V0IHRvIGV4aXQgb3B0aW1pemVkIGNvZGUuIFNv
LCB0aGVyZSdzIG5vIGxvbmdlciBhbnkgb3B0aW1pemVkCiAgICAgICAgIC8vIGNvZGUgcnVubmlu
ZyB0aGF0IGV4cGVjdHMgbm8gR0MuCi0gICAgICAgIHZtLT5oZWFwLnNldEV4cGVjdERvZXNHQyh0
cnVlKTsKKyAgICAgICAgdm0uaGVhcC5zZXRFeHBlY3REb2VzR0ModHJ1ZSk7CiAgICAgfQogCi0g
ICAgaWYgKHZtLT5jYWxsRnJhbWVGb3JDYXRjaCkKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQodm0t
PmNhbGxGcmFtZUZvckNhdGNoID09IGV4ZWMpOworICAgIGlmICh2bS5jYWxsRnJhbWVGb3JDYXRj
aCkKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQodm0uY2FsbEZyYW1lRm9yQ2F0Y2ggPT0gZXhlYyk7
CiAKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOwogICAgIEFT
U0VSVChjb2RlQmxvY2spOwpAQCAtMTAzOSwxMiArMTAzOSwxMiBAQCB2b2lkIEpJVF9PUEVSQVRJ
T04gT1NSRXhpdDo6Y29tcGlsZU9TUkV4CiAKICAgICAvLyBJdCdzIHNvcnQgb2YgcHJlZmVyYWJs
ZSB0aGF0IHdlIGRvbid0IEdDIHdoaWxlIGluIGhlcmUuIEFueXdheXMsIGRvaW5nIHNvIHdvdWxk
bid0CiAgICAgLy8gcmVhbGx5IGJlIHByb2ZpdGFibGUuCi0gICAgRGVmZXJHQ0ZvckFXaGlsZSBk
ZWZlckdDKHZtLT5oZWFwKTsKKyAgICBEZWZlckdDRm9yQVdoaWxlIGRlZmVyR0Modm0uaGVhcCk7
CiAKLSAgICB1aW50MzJfdCBleGl0SW5kZXggPSB2bS0+b3NyRXhpdEluZGV4OworICAgIHVpbnQz
Ml90IGV4aXRJbmRleCA9IHZtLm9zckV4aXRJbmRleDsKICAgICBPU1JFeGl0JiBleGl0ID0gY29k
ZUJsb2NrLT5qaXRDb2RlKCktPmRmZygpLT5vc3JFeGl0W2V4aXRJbmRleF07CiAKLSAgICBBU1NF
UlQoIXZtLT5jYWxsRnJhbWVGb3JDYXRjaCB8fCBleGl0Lm1fa2luZCA9PSBHZW5lcmljVW53aW5k
KTsKKyAgICBBU1NFUlQoIXZtLmNhbGxGcmFtZUZvckNhdGNoIHx8IGV4aXQubV9raW5kID09IEdl
bmVyaWNVbndpbmQpOwogICAgIEVYQ0VQVElPTl9BU1NFUlRfVU5VU0VEKHNjb3BlLCAhIXNjb3Bl
LmV4Y2VwdGlvbigpIHx8ICFleGl0LmlzRXhjZXB0aW9uSGFuZGxlcigpKTsKICAgICAKICAgICBw
cmVwYXJlQ29kZU9yaWdpbkZvck9TUkV4aXQoZXhlYywgZXhpdC5tX2NvZGVPcmlnaW4pOwpAQCAt
MTA2Myw4ICsxMDYzLDggQEAgdm9pZCBKSVRfT1BFUkFUSU9OIE9TUkV4aXQ6OmNvbXBpbGVPU1JF
eAogICAgICAgICBpZiAoZXhpdC5tX2tpbmQgPT0gR2VuZXJpY1Vud2luZCkgewogICAgICAgICAg
ICAgLy8gV2UgYXJlIGFjdGluZyBhcyBhIGRlZmFjdG8gb3BfY2F0Y2ggYmVjYXVzZSB3ZSBhcnJp
dmUgaGVyZSBmcm9tIGdlbmVyaWNVbndpbmQoKS4KICAgICAgICAgICAgIC8vIFNvLCB3ZSBtdXN0
IHJlc3RvcmUgb3VyIGNhbGwgZnJhbWUgYW5kIHN0YWNrIHBvaW50ZXIuCi0gICAgICAgICAgICBq
aXQucmVzdG9yZUNhbGxlZVNhdmVzRnJvbUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bS0+
dG9wRW50cnlGcmFtZSk7Ci0gICAgICAgICAgICBqaXQubG9hZFB0cih2bS0+YWRkcmVzc09mQ2Fs
bEZyYW1lRm9yQ2F0Y2goKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOworICAgICAgICAg
ICAgaml0LnJlc3RvcmVDYWxsZWVTYXZlc0Zyb21FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIo
dm0udG9wRW50cnlGcmFtZSk7CisgICAgICAgICAgICBqaXQubG9hZFB0cih2bS5hZGRyZXNzT2ZD
YWxsRnJhbWVGb3JDYXRjaCgpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CiAgICAgICAg
IH0KICAgICAgICAgaml0LmFkZFB0cigKICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbTMyKGNvZGVCbG9jay0+c3RhY2tQb2ludGVyT2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIp
KSwKQEAgLTEwNzIsOCArMTA3Miw4IEBAIHZvaWQgSklUX09QRVJBVElPTiBPU1JFeGl0Ojpjb21w
aWxlT1NSRXgKIAogICAgICAgICBqaXQuaml0QXNzZXJ0SGFzVmFsaWRDYWxsRnJhbWUoKTsKIAot
ICAgICAgICBpZiAoVU5MSUtFTFkodm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlciAmJiBjb2RlQmxv
Y2stPmppdENvZGUoKS0+ZGZnQ29tbW9uKCktPmNvbXBpbGF0aW9uKSkgewotICAgICAgICAgICAg
UHJvZmlsZXI6OkRhdGFiYXNlJiBkYXRhYmFzZSA9ICp2bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVy
OworICAgICAgICBpZiAoVU5MSUtFTFkodm0ubV9wZXJCeXRlY29kZVByb2ZpbGVyICYmIGNvZGVC
bG9jay0+aml0Q29kZSgpLT5kZmdDb21tb24oKS0+Y29tcGlsYXRpb24pKSB7CisgICAgICAgICAg
ICBQcm9maWxlcjo6RGF0YWJhc2UmIGRhdGFiYXNlID0gKnZtLm1fcGVyQnl0ZWNvZGVQcm9maWxl
cjsKICAgICAgICAgICAgIFByb2ZpbGVyOjpDb21waWxhdGlvbiogY29tcGlsYXRpb24gPSBjb2Rl
QmxvY2stPmppdENvZGUoKS0+ZGZnQ29tbW9uKCktPmNvbXBpbGF0aW9uLmdldCgpOwogCiAgICAg
ICAgICAgICBQcm9maWxlcjo6T1NSRXhpdCogcHJvZmlsZXJFeGl0ID0gY29tcGlsYXRpb24tPmFk
ZE9TUkV4aXQoCkBAIC0xMDgyLDcgKzEwODIsNyBAQCB2b2lkIEpJVF9PUEVSQVRJT04gT1NSRXhp
dDo6Y29tcGlsZU9TUkV4CiAgICAgICAgICAgICBqaXQuYWRkNjQoQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tMzIoMSksIENDYWxsSGVscGVyczo6QWJzb2x1dGVBZGRyZXNzKHByb2ZpbGVyRXhpdC0+
Y291bnRlckFkZHJlc3MoKSkpOwogICAgICAgICB9CiAKLSAgICAgICAgY29tcGlsZUV4aXQoaml0
LCAqdm0sIGV4aXQsIG9wZXJhbmRzLCByZWNvdmVyeSk7CisgICAgICAgIGNvbXBpbGVFeGl0KGpp
dCwgdm0sIGV4aXQsIG9wZXJhbmRzLCByZWNvdmVyeSk7CiAKICAgICAgICAgTGlua0J1ZmZlciBw
YXRjaEJ1ZmZlcihqaXQsIGNvZGVCbG9jayk7CiAgICAgICAgIGV4aXQubV9jb2RlID0gRklOQUxJ
WkVfQ09ERV9JRigKQEAgLTEwOTYsNyArMTA5Niw3IEBAIHZvaWQgSklUX09QRVJBVElPTiBPU1JF
eGl0Ojpjb21waWxlT1NSRXgKIAogICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVtcChleGl0
LmNvZGVMb2NhdGlvbkZvclJlcGF0Y2goKSwgQ29kZUxvY2F0aW9uTGFiZWw8T1NSRXhpdFB0clRh
Zz4oZXhpdC5tX2NvZGUuY29kZSgpKSk7CiAKLSAgICB2bS0+b3NyRXhpdEp1bXBEZXN0aW5hdGlv
biA9IGV4aXQubV9jb2RlLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOworICAgIHZtLm9zckV4
aXRKdW1wRGVzdGluYXRpb24gPSBleGl0Lm1fY29kZS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3Mo
KTsKIH0KIAogdm9pZCBPU1JFeGl0Ojpjb21waWxlRXhpdChDQ2FsbEhlbHBlcnMmIGppdCwgVk0m
IHZtLCBjb25zdCBPU1JFeGl0JiBleGl0LCBjb25zdCBPcGVyYW5kczxWYWx1ZVJlY292ZXJ5PiYg
b3BlcmFuZHMsIFNwZWN1bGF0aW9uUmVjb3ZlcnkqIHJlY292ZXJ5KQpAQCAtMTY0NywxNCArMTY0
NywxNCBAQCB2b2lkIE9TUkV4aXQ6OmNvbXBpbGVFeGl0KENDYWxsSGVscGVycyYgCiAKIHZvaWQg
SklUX09QRVJBVElPTiBPU1JFeGl0OjpkZWJ1Z09wZXJhdGlvblByaW50U3BlY3VsYXRpb25GYWls
dXJlKEV4ZWNTdGF0ZSogZXhlYywgdm9pZCogZGVidWdJbmZvUmF3LCB2b2lkKiBzY3JhdGNoKQog
ewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAg
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAKICAgICBTcGVjdWxh
dGlvbkZhaWx1cmVEZWJ1Z0luZm8qIGRlYnVnSW5mbyA9IHN0YXRpY19jYXN0PFNwZWN1bGF0aW9u
RmFpbHVyZURlYnVnSW5mbyo+KGRlYnVnSW5mb1Jhdyk7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxv
Y2sgPSBkZWJ1Z0luZm8tPmNvZGVCbG9jazsKICAgICBDb2RlQmxvY2sqIGFsdGVybmF0aXZlID0g
Y29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpOwogICAgIGRhdGFMb2coIlNwZWN1bGF0aW9uIGZhaWx1
cmUgaW4gIiwgKmNvZGVCbG9jayk7Ci0gICAgZGF0YUxvZygiIEAgZXhpdCAjIiwgdm0tPm9zckV4
aXRJbmRleCwgIiAoYmMjIiwgZGVidWdJbmZvLT5ieXRlY29kZU9mZnNldCwgIiwgIiwgZXhpdEtp
bmRUb1N0cmluZyhkZWJ1Z0luZm8tPmtpbmQpLCAiKSB3aXRoICIpOworICAgIGRhdGFMb2coIiBA
IGV4aXQgIyIsIHZtLm9zckV4aXRJbmRleCwgIiAoYmMjIiwgZGVidWdJbmZvLT5ieXRlY29kZU9m
ZnNldCwgIiwgIiwgZXhpdEtpbmRUb1N0cmluZyhkZWJ1Z0luZm8tPmtpbmQpLCAiKSB3aXRoICIp
OwogICAgIGlmIChhbHRlcm5hdGl2ZSkgewogICAgICAgICBkYXRhTG9nKAogICAgICAgICAgICAg
ImV4ZWN1dGVDb3VudGVyID0gIiwgYWx0ZXJuYXRpdmUtPmppdEV4ZWN1dGVDb3VudGVyKCksCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBp
bGVyQ29tbW9uLmgJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQx
LDcgQEAgdm9pZCByZWlmeUlubGluZWRDYWxsRnJhbWVzKENDYWxsSGVscGVycwogdm9pZCBhZGp1
c3RBbmRKdW1wVG9UYXJnZXQoVk0mLCBDQ2FsbEhlbHBlcnMmLCBjb25zdCBPU1JFeGl0QmFzZSYp
OwogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgSklUQ29kZVR5cGU+Ci12b2lkIGFkanVzdEZyYW1lQW5k
U3RhY2tJbk9TUkV4aXRDb21waWxlclRodW5rKE1hY3JvQXNzZW1ibGVyJiBqaXQsIFZNKiB2bSwg
SklUVHlwZSBqaXRUeXBlKQordm9pZCBhZGp1c3RGcmFtZUFuZFN0YWNrSW5PU1JFeGl0Q29tcGls
ZXJUaHVuayhNYWNyb0Fzc2VtYmxlciYgaml0LCBWTSYgdm0sIEpJVFR5cGUgaml0VHlwZSkKIHsK
ICAgICBBU1NFUlQoaml0VHlwZSA9PSBKSVRUeXBlOjpERkdKSVQgfHwgaml0VHlwZSA9PSBKSVRU
eXBlOjpGVExKSVQpOwogCkBAIC01OCw3ICs1OCw3IEBAIHZvaWQgYWRqdXN0RnJhbWVBbmRTdGFj
a0luT1NSRXhpdENvbXBpbGUKICAgICBpZiAoaXNGVExPU1JFeGl0KQogICAgICAgICBzY3JhdGNo
U2l6ZSArPSBzaXplb2Yodm9pZCopOwogCi0gICAgU2NyYXRjaEJ1ZmZlciogc2NyYXRjaEJ1ZmZl
ciA9IHZtLT5zY3JhdGNoQnVmZmVyRm9yU2l6ZShzY3JhdGNoU2l6ZSk7CisgICAgU2NyYXRjaEJ1
ZmZlciogc2NyYXRjaEJ1ZmZlciA9IHZtLnNjcmF0Y2hCdWZmZXJGb3JTaXplKHNjcmF0Y2hTaXpl
KTsKICAgICBjaGFyKiBidWZmZXIgPSBzdGF0aWNfY2FzdDxjaGFyKj4oc2NyYXRjaEJ1ZmZlci0+
ZGF0YUJ1ZmZlcigpKTsKIAogICAgIGppdC5wdXNoVG9TYXZlKEdQUkluZm86OnJlZ1QxKTsKQEAg
LTgwLDcgKzgwLDcgQEAgdm9pZCBhZGp1c3RGcmFtZUFuZFN0YWNrSW5PU1JFeGl0Q29tcGlsZQog
ICAgIGppdC5wb3BUb1Jlc3RvcmUoR1BSSW5mbzo6cmVnVDEpOwogCiAgICAgLy8gV2UgbmVlZCB0
byByZXNldCBGUCBpbiB0aGUgY2FzZSBvZiBhbiBleGNlcHRpb24uCi0gICAgaml0LmxvYWRQdHIo
dm0tPmFkZHJlc3NPZkNhbGxGcmFtZUZvckNhdGNoKCksIEdQUkluZm86OnJlZ1QwKTsKKyAgICBq
aXQubG9hZFB0cih2bS5hZGRyZXNzT2ZDYWxsRnJhbWVGb3JDYXRjaCgpLCBHUFJJbmZvOjpyZWdU
MCk7CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZGlkTm90SGF2ZUV4Y2VwdGlvbiA9IGppdC5i
cmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBHUFJJbmZvOjpyZWdUMCk7CiAgICAg
aml0Lm1vdmUoR1BSSW5mbzo6cmVnVDAsIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKICAg
ICBkaWROb3RIYXZlRXhjZXB0aW9uLmxpbmsoJmppdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE4OSw3ICsxODksNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBWaWV3Q2xhc3M+CiBjaGFyKiBuZXdU
eXBlZEFycmF5V2l0aFNpemUoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
aW50MzJfdCBzaXplLCBjaGFyKiB2ZWN0b3IpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsK
LSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZl
Q2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgaWYgKHNpemUgPCAwKSB7CkBAIC0yMTYsOSArMjE2
LDkgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgdm9pZCBwdXRXaXRoVGhpcyhFeAogdGVtcGxhdGU8
dHlwZW5hbWUgQmlnSW50T3BlcmF0aW9uLCB0eXBlbmFtZSBOdW1iZXJPcGVyYXRpb24+CiBzdGF0
aWMgQUxXQVlTX0lOTElORSBFbmNvZGVkSlNWYWx1ZSBiaW5hcnlPcChFeGVjU3RhdGUqIGV4ZWMs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIsIEJp
Z0ludE9wZXJhdGlvbiYmIGJpZ0ludE9wLCBOdW1iZXJPcGVyYXRpb24mJiBudW1iZXJPcCwgY29u
c3QgY2hhciogZXJyb3JNZXNzYWdlKQogewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2
bSwgZXhlYyk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKKyAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBKU1ZhbHVlIG9w
MSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AxKTsKICAgICBKU1ZhbHVlIG9wMiA9IEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkT3AyKTsKQEAgLTI0Myw5ICsyNDMsOSBAQCBzdGF0aWMgQUxXQVlT
X0lOTElORSBFbmNvZGVkSlNWYWx1ZSBiaW5hCiB0ZW1wbGF0ZTx0eXBlbmFtZSBCaWdJbnRPcGVy
YXRpb24sIHR5cGVuYW1lIEludDMyT3BlcmF0aW9uPgogc3RhdGljIEFMV0FZU19JTkxJTkUgRW5j
b2RlZEpTVmFsdWUgYml0d2lzZUJpbmFyeU9wKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMiwgQmlnSW50T3BlcmF0aW9u
JiYgYmlnSW50T3AsIEludDMyT3BlcmF0aW9uJiYgaW50MzJPcCwgY29uc3QgY2hhciogZXJyb3JN
ZXNzYWdlKQogewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0gICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKKyAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBKU1ZhbHVlIG9wMSA9IEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkT3AxKTsKICAgICBKU1ZhbHVlIG9wMiA9IEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkT3AyKTsKQEAgLTI4OSw3ICsyODksNyBAQCBleHRlcm4gIkMiIHsKIAogRW5jb2RlZEpTVmFs
dWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25Ub1RoaXMoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkT3ApCiB7Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBl
eGVjKTsKIAogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRPcCkudG9UaGlzKGV4ZWMsIE5vdFN0cmljdE1vZGUpKTsKQEAgLTI5Nyw3ICsyOTcsNyBAQCBF
bmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRvCiAKIEVuY29kZWRKU1ZhbHVl
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVG9UaGlzU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZE9wKQogewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2
bSwgZXhlYyk7CiAKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWU6OmRlY29kZShl
bmNvZGVkT3ApLnRvVGhpcyhleGVjLCBTdHJpY3RNb2RlKSk7CkBAIC0zMDYsNyArMzA2LDcgQEAg
RW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25UbwogSlNBcnJheSogSklUX09Q
RVJBVElPTiBvcGVyYXRpb25PYmplY3RLZXlzKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZE9iamVjdCkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVU
cmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAKICAgICBKU09iamVjdCogb2JqZWN0ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRPYmplY3QpLnRvT2JqZWN0KGV4ZWMpOwpAQCAtMzE4LDE0ICszMTgsMTQgQEAgSlNBcnJheSog
SklUX09QRVJBVElPTiBvcGVyYXRpb25PYmplY3RLZQogSlNBcnJheSogSklUX09QRVJBVElPTiBv
cGVyYXRpb25PYmplY3RLZXlzT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9iamVj
dCkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZt
LCBleGVjKTsKICAgICByZXR1cm4gb3duUHJvcGVydHlLZXlzKGV4ZWMsIG9iamVjdCwgUHJvcGVy
dHlOYW1lTW9kZTo6U3RyaW5ncywgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6RXhjbHVkZSk7CiB9
CiAKIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25PYmplY3RDcmVhdGUoRXhlY1N0YXRl
KiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvdG90eXBlKQogewogICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMp
OworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEpTVmFsdWUgcHJvdG90eXBl
ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRQcm90b3R5cGUpOwpAQCAtMzQzLDE0ICszNDMsMTQg
QEAgSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk9iamVjdENyZQogSlNDZWxsKiBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbk9iamVjdENyZWF0ZU9iamVjdChFeGVjU3RhdGUqIGV4ZWMsIEpT
T2JqZWN0KiBwcm90b3R5cGUpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgcmV0dXJuIGNvbnN0cnVjdEVtcHR5T2JqZWN0
KGV4ZWMsIHByb3RvdHlwZSk7CiB9CiAKIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25D
cmVhdGVUaGlzKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGNvbnN0cnVjdG9yLCB1aW50MzJf
dCBpbmxpbmVDYXBhY2l0eSkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVU
cmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAgICAgaWYgKGNvbnN0cnVjdG9yLT50eXBlKCkgPT0gSlNGdW5jdGlvblR5cGUg
JiYganNDYXN0PEpTRnVuY3Rpb24qPihjb25zdHJ1Y3RvciktPmNhblVzZUFsbG9jYXRpb25Qcm9m
aWxlKCkpIHsKICAgICAgICAgYXV0byByYXJlRGF0YSA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY29u
c3RydWN0b3IpLT5lbnN1cmVSYXJlRGF0YUFuZEFsbG9jYXRpb25Qcm9maWxlKGV4ZWMsIGlubGlu
ZUNhcGFjaXR5KTsKQEAgLTM3Nyw3ICszNzcsNyBAQCBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uQ3JlYXRlVGhpCiAKIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25DYWxsT2Jq
ZWN0Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVGFyZ2V0KQogewotICAgIFZNKiB2bSA9ICZleGVj
LT52bSgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcih2bSwgZXhlYyk7CiAKICAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVj
b2RlKGVuY29kZWRUYXJnZXQpOwpAQCAtMzkwLDkgKzM5MCw5IEBAIEpTQ2VsbCogSklUX09QRVJB
VElPTiBvcGVyYXRpb25DYWxsT2JqZWMKIAogSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
blRvT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFRhcmdldCwgVW5pcXVlZFN0cmluZ0ltcGwqIGVycm9yTWVz
c2FnZSkKIHsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBleGVjLT52
bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwotICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7CisgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkVGFyZ2V0KTsKICAgICBBU1NFUlQoIXZhbHVlLmlzT2JqZWN0KCkpOwpAQCAt
NDIyLDkgKzQyMiw5IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmEK
IAogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25WYWx1ZUJpdE5vdChFeGVj
U3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEpCiB7Ci0gICAgVk0qIHZtID0g
JmV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSgqdm0pOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
IAogICAgIEpTVmFsdWUgb3AxID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDEpOwogCkBAIC00
OTEsOSArNDkxLDkgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25WYQog
CiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZhbHVlQml0UlNoaWZ0KEV4
ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZE9wMikKIHsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwot
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7CisgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgSlNWYWx1ZSBvcDEgPSBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZE9wMSk7CiAgICAgSlNWYWx1ZSBvcDIgPSBKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZE9wMik7CkBAIC01MDcsOSArNTA3LDkgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJB
VElPTiBvcGVyYXRpb25WYQogCiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
blZhbHVlQml0VVJTaGlmdChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRP
cDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpCiB7Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZt
KCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIg
dHJhY2VyKHZtLCBleGVjKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSgq
dm0pOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEpT
VmFsdWUgb3AxID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDEpOwogICAgIEpTVmFsdWUgb3Ay
ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDIpOwpAQCAtNTIzLDcgKzUyMyw3IEBAIEVuY29k
ZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmEKIAogRW5jb2RlZEpTVmFsdWUgSklU
X09QRVJBVElPTiBvcGVyYXRpb25WYWx1ZUFkZE5vdE51bWJlcihFeGVjU3RhdGUqIGV4ZWMsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpCiB7Ci0g
ICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICAKICAgICBKU1ZhbHVl
IG9wMSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AxKTsKQEAgLTU2MCw5ICs1NjAsOSBAQCBF
bmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZhCiAKIGRvdWJsZSBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbkFyaXRoQWJzKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZE9wMSkKIHsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwot
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7CisgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgSlNWYWx1ZSBvcDEgPSBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZE9wMSk7CiAgICAgZG91YmxlIGEgPSBvcDEudG9OdW1iZXIoZXhlYyk7
CkBAIC01NzIsOSArNTcyLDkgQEAgZG91YmxlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXJpdGhB
YnMoRQogCiB1aW50MzJfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFyaXRoQ2x6MzIoRXhlY1N0
YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxKQogewotICAgIFZNKiB2bSA9ICZl
eGVjLT52bSgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUoKnZtKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAK
ICAgICBKU1ZhbHVlIG9wMSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AxKTsKICAgICB1aW50
MzJfdCB2YWx1ZSA9IG9wMS50b1VJbnQzMihleGVjKTsKQEAgLTU4NCw5ICs1ODQsOSBAQCB1aW50
MzJfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFyaXRoQ2x6CiAKIGRvdWJsZSBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvbkFyaXRoRlJvdW5kKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZE9wMSkKIHsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwot
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7CisgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgSlNWYWx1ZSBvcDEgPSBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZE9wMSk7CiAgICAgZG91YmxlIGEgPSBvcDEudG9OdW1iZXIoZXhlYyk7
CkBAIC01OTcsOSArNTk3LDkgQEAgZG91YmxlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXJpdGhG
Um91bgogI2RlZmluZSBERkdfQVJJVEhfVU5BUlkoY2FwaXRhbGl6ZWROYW1lLCBsb3dlck5hbWUp
IFwKIGRvdWJsZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFyaXRoIyNjYXBpdGFsaXplZE5hbWUo
RXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxKSBcCiB7IFwKLSAgICBW
TSogdm0gPSAmZXhlYy0+dm0oKTsgXAorICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7IFwKICAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsgXAotICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7IFwKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7IFwKICAgICBKU1ZhbHVlIG9wMSA9IEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkT3AxKTsgXAogICAgIGRvdWJsZSByZXN1bHQgPSBvcDEudG9OdW1iZXIoZXhlYyk7IFwKICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBQTmFOKTsgXApAQCAtNjEwLDkgKzYxMCw5IEBA
IGRvdWJsZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFyaXRoIyNjYXAKIAogZG91YmxlIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uQXJpdGhTcXJ0KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZE9wMSkKIHsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0g
PSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMp
OwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7CisgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgSlNWYWx1ZSBvcDEgPSBKU1Zh
bHVlOjpkZWNvZGUoZW5jb2RlZE9wMSk7CiAgICAgZG91YmxlIGEgPSBvcDEudG9OdW1iZXIoZXhl
Yyk7CkBAIC02MjIsOSArNjIyLDkgQEAgZG91YmxlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXJp
dGhTcXJ0KAogCiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFyaXRoUm91
bmQoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQXJndW1lbnQpCiB7Ci0g
ICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLSAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSgqdm0pOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKIAogICAgIEpTVmFsdWUgYXJndW1lbnQgPSBKU1ZhbHVlOjpkZWNvZGUoZW5j
b2RlZEFyZ3VtZW50KTsKICAgICBkb3VibGUgdmFsdWVPZkFyZ3VtZW50ID0gYXJndW1lbnQudG9O
dW1iZXIoZXhlYyk7CkBAIC02MzQsOSArNjM0LDkgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJB
VElPTiBvcGVyYXRpb25BcgogCiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
bkFyaXRoRmxvb3IoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQXJndW1l
bnQpCiB7Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLSAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSgqdm0pOworICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEpTVmFsdWUgYXJndW1lbnQgPSBKU1ZhbHVlOjpk
ZWNvZGUoZW5jb2RlZEFyZ3VtZW50KTsKICAgICBkb3VibGUgdmFsdWVPZkFyZ3VtZW50ID0gYXJn
dW1lbnQudG9OdW1iZXIoZXhlYyk7CkBAIC02NDYsOSArNjQ2LDkgQEAgRW5jb2RlZEpTVmFsdWUg
SklUX09QRVJBVElPTiBvcGVyYXRpb25BcgogCiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvbkFyaXRoQ2VpbChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRBcmd1bWVudCkKIHsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwot
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7CisgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgSlNWYWx1ZSBhcmd1bWVudCA9IEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkQXJndW1lbnQpOwogICAgIGRvdWJsZSB2YWx1ZU9mQXJndW1l
bnQgPSBhcmd1bWVudC50b051bWJlcihleGVjKTsKQEAgLTY1OCw5ICs2NTgsOSBAQCBFbmNvZGVk
SlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFyCiAKIEVuY29kZWRKU1ZhbHVlIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uQXJpdGhUcnVuYyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRBcmd1bWVudCkKIHsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBW
TSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0s
IGV4ZWMpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7CisgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgSlNWYWx1ZSBhcmd1
bWVudCA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQXJndW1lbnQpOwogICAgIGRvdWJsZSB0cnVu
Y2F0ZWRWYWx1ZU9mQXJndW1lbnQgPSBhcmd1bWVudC50b0ludGVnZXJQcmVzZXJ2ZU5hTihleGVj
KTsKQEAgLTY3MSw3ICs2NzEsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbkFyCiBzdGF0aWMgQUxXQVlTX0lOTElORSBFbmNvZGVkSlNWYWx1ZSBnZXRCeVZhbChFeGVj
U3RhdGUqIGV4ZWMsIEpTQ2VsbCogYmFzZSwgdWludDMyX3QgaW5kZXgpCiB7CiAgICAgVk0mIHZt
ID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhl
Yyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgCiAg
ICAgaWYgKGJhc2UtPmlzT2JqZWN0KCkpIHsKICAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9IGFz
T2JqZWN0KGJhc2UpOwpAQCAtNjg4LDcgKzY4OCw3IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEVu
Y29kZWRKU1ZhbHVlIGdldEIKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
R2V0QnlWYWwoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFByb3BlcnR5KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6
ZGVjb2RlKGVuY29kZWRCYXNlKTsKQEAgLTcyOSw3ICs3MjksNyBAQCBFbmNvZGVkSlNWYWx1ZSBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdlCiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbkdldEJ5VmFsQ2VsbChFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogYmFzZSwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZFByb3BlcnR5KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0g
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEpTVmFsdWUgcHJvcGVydHkgPSBKU1ZhbHVlOjpkZWNv
ZGUoZW5jb2RlZFByb3BlcnR5KTsKQEAgLTc2MiwxMiArNzYyLDEyIEBAIEVuY29kZWRKU1ZhbHVl
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2UKIAogQUxXQVlTX0lOTElORSBFbmNvZGVkSlNWYWx1
ZSBnZXRCeVZhbENlbGxJbnQoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGJhc2UsIGludDMyX3Qg
aW5kZXgpCiB7Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICAK
ICAgICBpZiAoaW5kZXggPCAwKSB7CiAgICAgICAgIC8vIEdvIHRoZSBzbG93ZXN0IHdheSBwb3Nz
aWJsZSBiZWNhdXNlIG5lZ2F0aXZlIGluZGljZXMgZG9uJ3QgdXNlIGluZGV4ZWQgc3RvcmFnZS4K
LSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKGJhc2UpLmdldChleGVjLCBJ
ZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGluZGV4KSkpOworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKEpTVmFsdWUoYmFzZSkuZ2V0KGV4ZWMsIElkZW50aWZpZXI6OmZyb20odm0sIGluZGV4
KSkpOwogICAgIH0KIAogICAgIC8vIFVzZSB0aGlzIHNpbmNlIHdlIGtub3cgdGhhdCB0aGUgdmFs
dWUgaXMgb3V0IG9mIGJvdW5kcy4KQEAgLTc4Nyw3ICs3ODcsNyBAQCBFbmNvZGVkSlNWYWx1ZSBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdlCiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbkdldEJ5VmFsT2JqZWN0U3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBiYXNl
LCBKU0NlbGwqIHN0cmluZykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVU
cmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKIAogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKIApAQCAtODAwLDcgKzgwMCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uR2UKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
R2V0QnlWYWxPYmplY3RTeW1ib2woRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGJhc2UsIEpTQ2Vs
bCogc3ltYm9sKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIodm0sIGV4ZWMpOwogCiAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBhc1N5bWJvbChzeW1i
b2wpLT5wcml2YXRlTmFtZSgpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoZ2V0QnlWYWxP
YmplY3QoZXhlYywgdm0sIGFzT2JqZWN0KGJhc2UpLCBwcm9wZXJ0eU5hbWUpKTsKQEAgLTgwOSw3
ICs4MDksNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdlCiB2b2lk
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFByb3BlcnR5
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgCiAgICAgcHV0QnlWYWxJ
bnRlcm5hbDx0cnVlLCBmYWxzZT4oZXhlYywgdm0sIGVuY29kZWRCYXNlLCBlbmNvZGVkUHJvcGVy
dHksIGVuY29kZWRWYWx1ZSk7CiB9CkBAIC04MTcsNyArODE3LDcgQEAgdm9pZCBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvblB1dEJ5VmFsU3RyaQogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1
dEJ5VmFsTm9uU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJh
c2UsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRQcm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFZhbHVlKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIodm0sIGV4ZWMpOwogICAgIAogICAgIHB1dEJ5VmFsSW50ZXJuYWw8ZmFsc2UsIGZhbHNlPihl
eGVjLCB2bSwgZW5jb2RlZEJhc2UsIGVuY29kZWRQcm9wZXJ0eSwgZW5jb2RlZFZhbHVlKTsKIH0K
QEAgLTgyNSw3ICs4MjUsNyBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxO
b25TCiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxDZWxsU3RyaWN0KEV4ZWNT
dGF0ZSogZXhlYywgSlNDZWxsKiBjZWxsLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvcGVydHks
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgp
OwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICAKICAgICBwdXRCeVZhbElu
dGVybmFsPHRydWUsIGZhbHNlPihleGVjLCB2bSwgSlNWYWx1ZTo6ZW5jb2RlKGNlbGwpLCBlbmNv
ZGVkUHJvcGVydHksIGVuY29kZWRWYWx1ZSk7CiB9CkBAIC04MzMsNyArODMzLDcgQEAgdm9pZCBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQ2VsbAogdm9pZCBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvblB1dEJ5VmFsQ2VsbE5vblN0cmljdChFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogY2Vs
bCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFByb3BlcnR5LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
VmFsdWUpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVU
cmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cih2bSwgZXhlYyk7CiAgICAgCiAgICAgcHV0QnlWYWxJbnRlcm5hbDxmYWxzZSwgZmFsc2U+KGV4
ZWMsIHZtLCBKU1ZhbHVlOjplbmNvZGUoY2VsbCksIGVuY29kZWRQcm9wZXJ0eSwgZW5jb2RlZFZh
bHVlKTsKIH0KQEAgLTg0MSw3ICs4NDEsNyBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
UHV0QnlWYWxDZWxsCiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxDZWxsU3Ry
aW5nU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBjZWxsLCBKU0NlbGwqIHN0cmluZywg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogCiAgICAgcHV0QnlWYWxDZWxsU3Ry
aW5nSW50ZXJuYWw8dHJ1ZSwgZmFsc2U+KGV4ZWMsIHZtLCBjZWxsLCBhc1N0cmluZyhzdHJpbmcp
LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSk7CiB9CkBAIC04NDksNyArODQ5LDcgQEAg
dm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQ2VsbAogdm9pZCBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvblB1dEJ5VmFsQ2VsbFN0cmluZ05vblN0cmljdChFeGVjU3RhdGUqIGV4ZWMs
IEpTQ2VsbCogY2VsbCwgSlNDZWxsKiBzdHJpbmcsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1
ZSkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZt
LCBleGVjKTsKIAogICAgIHB1dEJ5VmFsQ2VsbFN0cmluZ0ludGVybmFsPGZhbHNlLCBmYWxzZT4o
ZXhlYywgdm0sIGNlbGwsIGFzU3RyaW5nKHN0cmluZyksIEpTVmFsdWU6OmRlY29kZShlbmNvZGVk
VmFsdWUpKTsKIH0KQEAgLTg1Nyw3ICs4NTcsNyBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uUHV0QnlWYWxDZWxsCiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxDZWxs
U3ltYm9sU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBjZWxsLCBKU0NlbGwqIHN5bWJv
bCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogCiAgICAgYXV0byBwcm9wZXJ0
eU5hbWUgPSBhc1N5bWJvbChzeW1ib2wpLT5wcml2YXRlTmFtZSgpOwogICAgIHB1dEJ5VmFsQ2Vs
bEludGVybmFsPHRydWUsIGZhbHNlPihleGVjLCB2bSwgY2VsbCwgcHJvcGVydHlOYW1lLCBKU1Zh
bHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSk7CkBAIC04NjYsNyArODY2LDcgQEAgdm9pZCBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQ2VsbAogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvblB1dEJ5VmFsQ2VsbFN5bWJvbE5vblN0cmljdChFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCog
Y2VsbCwgSlNDZWxsKiBzeW1ib2wsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
JnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsK
IAogICAgIGF1dG8gcHJvcGVydHlOYW1lID0gYXNTeW1ib2woc3ltYm9sKS0+cHJpdmF0ZU5hbWUo
KTsKICAgICBwdXRCeVZhbENlbGxJbnRlcm5hbDxmYWxzZSwgZmFsc2U+KGV4ZWMsIHZtLCBjZWxs
LCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpKTsKQEAgLTg3NSw3
ICs4NzUsNyBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxDZWxsCiB2b2lk
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxCZXlvbmRBcnJheUJvdW5kc1N0cmljdChF
eGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvYmplY3QsIGludDMyX3QgaW5kZXgsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICAKICAgICBpZiAoaW5kZXggPj0gMCkgewog
ICAgICAgICBvYmplY3QtPnB1dEJ5SW5kZXhJbmxpbmUoZXhlYywgaW5kZXgsIEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkVmFsdWUpLCB0cnVlKTsKQEAgLTg4NCwxMiArODg0LDEyIEBAIHZvaWQgSklU
X09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbEJleW8KICAgICAKICAgICBQdXRQcm9wZXJ0eVNs
b3Qgc2xvdChvYmplY3QsIHRydWUpOwogICAgIG9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5wdXQo
Ci0gICAgICAgIG9iamVjdCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpbmRleCksIEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCBzbG90KTsKKyAgICAgICAgb2JqZWN0LCBleGVj
LCBJZGVudGlmaWVyOjpmcm9tKHZtLCBpbmRleCksIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFs
dWUpLCBzbG90KTsKIH0KIAogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQmV5
b25kQXJyYXlCb3VuZHNOb25TdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogb2JqZWN0
LCBpbnQzMl90IGluZGV4LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgVk0q
IHZtID0gJmV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICAKICAgICBpZiAoaW5kZXggPj0g
MCkgewpAQCAtODk4LDEzICs4OTgsMTMgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1
dEJ5VmFsQmV5bwogICAgIH0KICAgICAKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChvYmplY3Qs
IGZhbHNlKTsKLSAgICBvYmplY3QtPm1ldGhvZFRhYmxlKCp2bSktPnB1dCgKLSAgICAgICAgb2Jq
ZWN0LCBleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGluZGV4KSwgSlNWYWx1ZTo6ZGVjb2Rl
KGVuY29kZWRWYWx1ZSksIHNsb3QpOworICAgIG9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5wdXQo
CisgICAgICAgIG9iamVjdCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbSh2bSwgaW5kZXgpLCBKU1Zh
bHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwgc2xvdCk7CiB9CiAKIHZvaWQgSklUX09QRVJBVElP
TiBvcGVyYXRpb25QdXREb3VibGVCeVZhbEJleW9uZEFycmF5Qm91bmRzU3RyaWN0KEV4ZWNTdGF0
ZSogZXhlYywgSlNPYmplY3QqIG9iamVjdCwgaW50MzJfdCBpbmRleCwgZG91YmxlIHZhbHVlKQog
ewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAg
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgCiAgICAgSlNW
YWx1ZSBqc1ZhbHVlID0gSlNWYWx1ZShKU1ZhbHVlOjpFbmNvZGVBc0RvdWJsZSwgdmFsdWUpOwpA
QCAtOTE1LDEzICs5MTUsMTMgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dERvdWJs
ZUJ5VgogICAgIH0KICAgICAKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChvYmplY3QsIHRydWUp
OwotICAgIG9iamVjdC0+bWV0aG9kVGFibGUoKnZtKS0+cHV0KAotICAgICAgICBvYmplY3QsIGV4
ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgaW5kZXgpLCBqc1ZhbHVlLCBzbG90KTsKKyAgICBv
YmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+cHV0KAorICAgICAgICBvYmplY3QsIGV4ZWMsIElkZW50
aWZpZXI6OmZyb20odm0sIGluZGV4KSwganNWYWx1ZSwgc2xvdCk7CiB9CiAKIHZvaWQgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25QdXREb3VibGVCeVZhbEJleW9uZEFycmF5Qm91bmRzTm9uU3RyaWN0
KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9iamVjdCwgaW50MzJfdCBpbmRleCwgZG91Ymxl
IHZhbHVlKQogewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAg
CiAgICAgSlNWYWx1ZSBqc1ZhbHVlID0gSlNWYWx1ZShKU1ZhbHVlOjpFbmNvZGVBc0RvdWJsZSwg
dmFsdWUpOwpAQCAtOTMyLDE0ICs5MzIsMTQgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
blB1dERvdWJsZUJ5VgogICAgIH0KICAgICAKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChvYmpl
Y3QsIGZhbHNlKTsKLSAgICBvYmplY3QtPm1ldGhvZFRhYmxlKCp2bSktPnB1dCgKLSAgICAgICAg
b2JqZWN0LCBleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGluZGV4KSwganNWYWx1ZSwgc2xv
dCk7CisgICAgb2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPnB1dCgKKyAgICAgICAgb2JqZWN0LCBl
eGVjLCBJZGVudGlmaWVyOjpmcm9tKHZtLCBpbmRleCksIGpzVmFsdWUsIHNsb3QpOwogfQogCiB2
b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0RG91YmxlQnlWYWxEaXJlY3RCZXlvbmRBcnJh
eUJvdW5kc1N0cmljdChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvYmplY3QsIGludDMyX3Qg
aW5kZXgsIGRvdWJsZSB2YWx1ZSkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKIAogICAgIEpTVmFsdWUganNWYWx1ZSA9IEpTVmFs
dWUoSlNWYWx1ZTo6RW5jb2RlQXNEb3VibGUsIHZhbHVlKTsKIApAQCAtOTQ5LDEzICs5NDksMTMg
QEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dERvdWJsZUJ5VgogICAgIH0KIAogICAg
IFB1dFByb3BlcnR5U2xvdCBzbG90KG9iamVjdCwgdHJ1ZSk7Ci0gICAgQ29tbW9uU2xvd1BhdGhz
OjpwdXREaXJlY3RXaXRoUmVpZnkodm0sIGV4ZWMsIG9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbShl
eGVjLCBpbmRleCksIGpzVmFsdWUsIHNsb3QpOworICAgIENvbW1vblNsb3dQYXRoczo6cHV0RGly
ZWN0V2l0aFJlaWZ5KHZtLCBleGVjLCBvYmplY3QsIElkZW50aWZpZXI6OmZyb20odm0sIGluZGV4
KSwganNWYWx1ZSwgc2xvdCk7CiB9CiAKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRE
b3VibGVCeVZhbERpcmVjdEJleW9uZEFycmF5Qm91bmRzTm9uU3RyaWN0KEV4ZWNTdGF0ZSogZXhl
YywgSlNPYmplY3QqIG9iamVjdCwgaW50MzJfdCBpbmRleCwgZG91YmxlIHZhbHVlKQogewogICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigm
dm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwog
CiAgICAgSlNWYWx1ZSBqc1ZhbHVlID0gSlNWYWx1ZShKU1ZhbHVlOjpFbmNvZGVBc0RvdWJsZSwg
dmFsdWUpOwogCkBAIC05NjUsMTMgKzk2NSwxMyBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uUHV0RG91YmxlQnlWCiAgICAgfQogCiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3Qob2JqZWN0
LCBmYWxzZSk7Ci0gICAgQ29tbW9uU2xvd1BhdGhzOjpwdXREaXJlY3RXaXRoUmVpZnkodm0sIGV4
ZWMsIG9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpbmRleCksIGpzVmFsdWUsIHNsb3Qp
OworICAgIENvbW1vblNsb3dQYXRoczo6cHV0RGlyZWN0V2l0aFJlaWZ5KHZtLCBleGVjLCBvYmpl
Y3QsIElkZW50aWZpZXI6OmZyb20odm0sIGluZGV4KSwganNWYWx1ZSwgc2xvdCk7CiB9CiAKIHZv
aWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbERpcmVjdFN0cmljdChFeGVjU3RhdGUq
IGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
UHJvcGVydHksIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsK
KyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICAKICAgICBw
dXRCeVZhbEludGVybmFsPHRydWUsIHRydWU+KGV4ZWMsIHZtLCBlbmNvZGVkQmFzZSwgZW5jb2Rl
ZFByb3BlcnR5LCBlbmNvZGVkVmFsdWUpOwogfQpAQCAtOTc5LDcgKzk3OSw3IEBAIHZvaWQgSklU
X09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbERpcmUKIHZvaWQgSklUX09QRVJBVElPTiBvcGVy
YXRpb25QdXRCeVZhbERpcmVjdE5vblN0cmljdChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRCYXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvcGVydHksIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICAKICAgICBwdXRCeVZhbEludGVybmFsPGZh
bHNlLCB0cnVlPihleGVjLCB2bSwgZW5jb2RlZEJhc2UsIGVuY29kZWRQcm9wZXJ0eSwgZW5jb2Rl
ZFZhbHVlKTsKIH0KQEAgLTk4Nyw3ICs5ODcsNyBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uUHV0QnlWYWxEaXJlCiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxEaXJl
Y3RDZWxsU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBjZWxsLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkUHJvcGVydHksIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICBW
TSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZt
LCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAg
ICAKICAgICBwdXRCeVZhbEludGVybmFsPHRydWUsIHRydWU+KGV4ZWMsIHZtLCBKU1ZhbHVlOjpl
bmNvZGUoY2VsbCksIGVuY29kZWRQcm9wZXJ0eSwgZW5jb2RlZFZhbHVlKTsKIH0KQEAgLTk5NSw3
ICs5OTUsNyBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxEaXJlCiB2b2lk
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxEaXJlY3RDZWxsTm9uU3RyaWN0KEV4ZWNT
dGF0ZSogZXhlYywgSlNDZWxsKiBjZWxsLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvcGVydHks
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgp
OwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICAKICAgICBwdXRCeVZhbElu
dGVybmFsPGZhbHNlLCB0cnVlPihleGVjLCB2bSwgSlNWYWx1ZTo6ZW5jb2RlKGNlbGwpLCBlbmNv
ZGVkUHJvcGVydHksIGVuY29kZWRWYWx1ZSk7CiB9CkBAIC0xMDAzLDcgKzEwMDMsNyBAQCB2b2lk
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxEaXJlCiB2b2lkIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uUHV0QnlWYWxEaXJlY3RDZWxsU3RyaW5nU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywg
SlNDZWxsKiBjZWxsLCBKU0NlbGwqIHN0cmluZywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVl
KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0s
IGV4ZWMpOwogCiAgICAgcHV0QnlWYWxDZWxsU3RyaW5nSW50ZXJuYWw8dHJ1ZSwgdHJ1ZT4oZXhl
Yywgdm0sIGNlbGwsIGFzU3RyaW5nKHN0cmluZyksIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFs
dWUpKTsKIH0KQEAgLTEwMTEsNyArMTAxMSw3IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRp
b25QdXRCeVZhbERpcmUKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbERpcmVj
dENlbGxTdHJpbmdOb25TdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGNlbGwsIEpTQ2Vs
bCogc3RyaW5nLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7
CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAKICAgICBwdXRC
eVZhbENlbGxTdHJpbmdJbnRlcm5hbDxmYWxzZSwgdHJ1ZT4oZXhlYywgdm0sIGNlbGwsIGFzU3Ry
aW5nKHN0cmluZyksIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpKTsKIH0KQEAgLTEwMTks
NyArMTAxOSw3IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbERpcmUKIHZv
aWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbERpcmVjdENlbGxTeW1ib2xTdHJpY3Qo
RXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGNlbGwsIEpTQ2VsbCogc3ltYm9sLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAKICAgICBhdXRvIHByb3BlcnR5TmFtZSA9IGFzU3lt
Ym9sKHN5bWJvbCktPnByaXZhdGVOYW1lKCk7CiAgICAgcHV0QnlWYWxDZWxsSW50ZXJuYWw8dHJ1
ZSwgdHJ1ZT4oZXhlYywgdm0sIGNlbGwsIHByb3BlcnR5TmFtZSwgSlNWYWx1ZTo6ZGVjb2RlKGVu
Y29kZWRWYWx1ZSkpOwpAQCAtMTAyOCw3ICsxMDI4LDcgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvblB1dEJ5VmFsRGlyZQogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFs
RGlyZWN0Q2VsbFN5bWJvbE5vblN0cmljdChFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogY2VsbCwg
SlNDZWxsKiBzeW1ib2wsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICBWTSYg
dm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBl
eGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKIAogICAg
IGF1dG8gcHJvcGVydHlOYW1lID0gYXNTeW1ib2woc3ltYm9sKS0+cHJpdmF0ZU5hbWUoKTsKICAg
ICBwdXRCeVZhbENlbGxJbnRlcm5hbDxmYWxzZSwgdHJ1ZT4oZXhlYywgdm0sIGNlbGwsIHByb3Bl
cnR5TmFtZSwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSkpOwpAQCAtMTAzNywyMCArMTAz
NywyMCBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxEaXJlCiB2b2lkIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxEaXJlY3RCZXlvbmRBcnJheUJvdW5kc1N0cmlj
dChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvYmplY3QsIGludDMyX3QgaW5kZXgsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICBpZiAoaW5kZXggPj0gMCkgewogICAg
ICAgICBvYmplY3QtPnB1dERpcmVjdEluZGV4KGV4ZWMsIGluZGV4LCBKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZFZhbHVlKSwgMCwgUHV0RGlyZWN0SW5kZXhTaG91bGRUaHJvdyk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAgICAgCiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3Qob2JqZWN0LCB0cnVl
KTsKLSAgICBDb21tb25TbG93UGF0aHM6OnB1dERpcmVjdFdpdGhSZWlmeSh2bSwgZXhlYywgb2Jq
ZWN0LCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGluZGV4KSwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRWYWx1ZSksIHNsb3QpOworICAgIENvbW1vblNsb3dQYXRoczo6cHV0RGlyZWN0V2l0aFJlaWZ5
KHZtLCBleGVjLCBvYmplY3QsIElkZW50aWZpZXI6OmZyb20odm0sIGluZGV4KSwgSlNWYWx1ZTo6
ZGVjb2RlKGVuY29kZWRWYWx1ZSksIHNsb3QpOwogfQogCiB2b2lkIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uUHV0QnlWYWxEaXJlY3RCZXlvbmRBcnJheUJvdW5kc05vblN0cmljdChFeGVjU3RhdGUq
IGV4ZWMsIEpTT2JqZWN0KiBvYmplY3QsIGludDMyX3QgaW5kZXgsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRWYWx1ZSkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxG
cmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIg
dHJhY2VyKHZtLCBleGVjKTsKIAogICAgIGlmIChpbmRleCA+PSAwKSB7CiAgICAgICAgIG9iamVj
dC0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaW5kZXgsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFs
dWUpKTsKQEAgLTEwNTgsMTIgKzEwNTgsMTIgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
blB1dEJ5VmFsRGlyZQogICAgIH0KICAgICAKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChvYmpl
Y3QsIGZhbHNlKTsKLSAgICBDb21tb25TbG93UGF0aHM6OnB1dERpcmVjdFdpdGhSZWlmeSh2bSwg
ZXhlYywgb2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGluZGV4KSwgSlNWYWx1ZTo6ZGVj
b2RlKGVuY29kZWRWYWx1ZSksIHNsb3QpOworICAgIENvbW1vblNsb3dQYXRoczo6cHV0RGlyZWN0
V2l0aFJlaWZ5KHZtLCBleGVjLCBvYmplY3QsIElkZW50aWZpZXI6OmZyb20odm0sIGluZGV4KSwg
SlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSksIHNsb3QpOwogfQogCiBFbmNvZGVkSlNWYWx1
ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFycmF5UHVzaChFeGVjU3RhdGUqIGV4ZWMsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNBcnJheSogYXJyYXkpCiB7Ci0gICAgVk0qIHZtID0g
JmV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICAKICAgICBhcnJheS0+cHVzaElubGluZShl
eGVjLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSk7CkBAIC0xMDcyLDcgKzEwNzIsNyBA
QCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFyCiAKIEVuY29kZWRKU1Zh
bHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXJyYXlQdXNoRG91YmxlKEV4ZWNTdGF0ZSogZXhl
YywgZG91YmxlIHZhbHVlLCBKU0FycmF5KiBhcnJheSkKIHsKLSAgICBWTSogdm0gPSAmZXhlYy0+
dm0oKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIAogICAgIGFycmF5LT5wdXNoSW5saW5lKGV4ZWMsIEpT
VmFsdWUoSlNWYWx1ZTo6RW5jb2RlQXNEb3VibGUsIHZhbHVlKSk7CkBAIC0xMDgyLDcgKzEwODIs
NyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFyCiBFbmNvZGVkSlNW
YWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFycmF5UHVzaE11bHRpcGxlKEV4ZWNTdGF0ZSog
ZXhlYywgSlNBcnJheSogYXJyYXksIHZvaWQqIGJ1ZmZlciwgaW50MzJfdCBlbGVtZW50Q291bnQp
CiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIg
dHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwg
ZXhlYyk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAg
Ly8gV2UgYXNzdW1lIHRoYXQgbXVsdGlwbGUgSlNBcnJheTo6cHVzaCBjYWxscyB3aXRoIEFycmF5
V2l0aEludDMyL0FycmF5V2l0aENvbnRpZ3VvdXMgZG8gbm90IGNhdXNlIEpTIHRyYXBzLgpAQCAt
MTEwNiw3ICsxMTA2LDcgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25B
cgogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25BcnJheVB1c2hEb3VibGVN
dWx0aXBsZShFeGVjU3RhdGUqIGV4ZWMsIEpTQXJyYXkqIGFycmF5LCB2b2lkKiBidWZmZXIsIGlu
dDMyX3QgZWxlbWVudENvdW50KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKIAogICAgIC8vIFdlIGFzc3VtZSB0aGF0IG11bHRpcGxlIEpTQXJyYXk6OnB1
c2ggY2FsbHMgd2l0aCBBcnJheVdpdGhEb3VibGUgZG8gbm90IGNhdXNlIEpTIHRyYXBzLgpAQCAt
MTEyNSw3ICsxMTI1LDcgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25B
cgogCiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFycmF5UG9wKEV4ZWNT
dGF0ZSogZXhlYywgSlNBcnJheSogYXJyYXkpCiB7Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7
CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKHZtLCBleGVjKTsKICAgICAKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFycmF5LT5w
b3AoZXhlYykpOwpAQCAtMTEzMyw3ICsxMTMzLDcgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJB
VElPTiBvcGVyYXRpb25BcgogICAgICAgICAKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uQXJyYXlQb3BBbmRSZWNvdmVyTGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywgSlNBcnJh
eSogYXJyYXkpCiB7Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAg
ICAKICAgICBhcnJheS0+YnV0dGVyZmx5KCktPnNldFB1YmxpY0xlbmd0aChhcnJheS0+YnV0dGVy
Zmx5KCktPnB1YmxpY0xlbmd0aCgpICsgMSk7CkBAIC0xMTQ2LDcgKzExNDYsNyBAQCBFbmNvZGVk
SlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblJlCiAgICAgU3VwZXJTYW1wbGVyU2NvcGUg
c3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwogICAgIAogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVj
dC0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7Cisg
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgCiAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShyZWdFeHBPYmplY3QtPmV4ZWNJbmxpbmUoZXhlYywgZ2xvYmFs
T2JqZWN0LCBhcmd1bWVudCkpOwogfQpAQCAtMTE1Niw3ICsxMTU2LDcgQEAgRW5jb2RlZEpTVmFs
dWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25SZQogICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVy
U2FtcGxlclNjb3BlKGZhbHNlKTsKICAgICAKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZt
KCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICAKICAgICBKU1ZhbHVlIGFyZ3VtZW50ID0gSlNW
YWx1ZTo6ZGVjb2RlKGVuY29kZWRBcmd1bWVudCk7CkBAIC0xMTczLDcgKzExNzMsNyBAQCBFbmNv
ZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblJlCiAgICAgU3VwZXJTYW1wbGVyU2Nv
cGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwogICAgIAogICAgIFZNJiB2bSA9IGdsb2JhbE9i
amVjdC0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7
CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgSlNWYWx1ZSBiYXNlID0gSlNW
YWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNlKTsKQEAgLTExOTUsNyArMTE5NSw3IEBAIEVuY29kZWRK
U1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUmUKICAgICBTdXBlclNhbXBsZXJTY29wZSBz
dXBlclNhbXBsZXJTY29wZShmYWxzZSk7CiAKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZt
KCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogCiAgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCkBAIC0xMjIwLDcgKzEyMjAsNyBAQCBFbmNvZGVk
SlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblJlCiAgICAgU3VwZXJTYW1wbGVyU2NvcGUg
c3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwogCiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52
bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKIAogICAgIGlmICghcmVnRXhw
T2JqZWN0LT5yZWdFeHAoKS0+Z2xvYmFsKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUocmVnRXhwT2JqZWN0LT5leGVjSW5saW5lKGV4ZWMsIGdsb2JhbE9iamVjdCwgYXJndW1lbnQp
KTsKQEAgLTEyMzIsNyArMTIzMiw3IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uUmUKICAgICBTdXBlclNhbXBsZXJTY29wZSBzdXBlclNhbXBsZXJTY29wZShmYWxzZSk7
CiAKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIodm0sIGV4ZWMpOwogCiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwogCkBAIC0xMjYwLDcgKzEyNjAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvblJlCiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblBhcnNlSW50
Tm9SYWRpeEdlbmVyaWMoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSB2YWx1ZSkKIHsK
ICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVj
KTsKIAogICAgIHJldHVybiB0b1N0cmluZ1ZpZXcoZXhlYywgSlNWYWx1ZTo6ZGVjb2RlKHZhbHVl
KSwgWyZdIChTdHJpbmdWaWV3IHZpZXcpIHsKICAgICAgICAgLy8gVGhpcyB2ZXJzaW9uIGlzIGFz
IGlmIHJhZGl4IHdhcyB1bmRlZmluZWQuIEhlbmNlLCB1bmRlZmluZWQudG9OdW1iZXIoKSA9PT0g
MC4KQEAgLTEyNzEsNyArMTI3MSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uUGEKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUGFyc2VJbnRT
dHJpbmdOb1JhZGl4KEV4ZWNTdGF0ZSogZXhlYywgSlNTdHJpbmcqIHN0cmluZykKIHsKICAgICBW
TSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZt
LCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBhdXRvIHZpZXdX
aXRoU3RyaW5nID0gc3RyaW5nLT52aWV3V2l0aFVuZGVybHlpbmdTdHJpbmcoZXhlYyk7CkBAIC0x
Mjg0LDcgKzEyODQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblBh
CiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblBhcnNlSW50U3RyaW5nKEV4
ZWNTdGF0ZSogZXhlYywgSlNTdHJpbmcqIHN0cmluZywgaW50MzJfdCByYWRpeCkKIHsKICAgICBW
TSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZt
LCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBhdXRvIHZpZXdX
aXRoU3RyaW5nID0gc3RyaW5nLT52aWV3V2l0aFVuZGVybHlpbmdTdHJpbmcoZXhlYyk7CkBAIC0x
Mjk2LDcgKzEyOTYsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblBh
CiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblBhcnNlSW50R2VuZXJpYyhF
eGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIHZhbHVlLCBpbnQzMl90IHJhZGl4KQogewog
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMp
OwogCiAgICAgcmV0dXJuIHRvU3RyaW5nVmlldyhleGVjLCBKU1ZhbHVlOjpkZWNvZGUodmFsdWUp
LCBbJl0gKFN0cmluZ1ZpZXcgdmlldykgewogICAgICAgICByZXR1cm4gcGFyc2VJbnRSZXN1bHQo
cGFyc2VJbnQodmlldywgcmFkaXgpKTsKQEAgLTEzMDgsNyArMTMwOCw3IEBAIHNpemVfdCBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvblJlZ0V4cFRlc3QKICAgICBTdXBlclNhbXBsZXJTY29wZSBzdXBl
clNhbXBsZXJTY29wZShmYWxzZSk7CiAgICAgCiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52
bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKIAogICAgIHJldHVybiByZWdF
eHBPYmplY3QtPnRlc3RJbmxpbmUoZXhlYywgZ2xvYmFsT2JqZWN0LCBpbnB1dCk7CiB9CkBAIC0x
MzE4LDcgKzEzMTgsNyBAQCBzaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25SZWdFeHBUZXN0
CiAgICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwogICAgIAog
ICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFj
ZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2
bSwgZXhlYyk7CiAKICAgICBKU1ZhbHVlIGFyZ3VtZW50ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRBcmd1bWVudCk7CiAKQEAgLTEzMzMsNyArMTMzMyw3IEBAIHNpemVfdCBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvblJlZ0V4cFRlc3QKICAgICBTdXBlclNhbXBsZXJTY29wZSBzdXBlclNhbXBsZXJT
Y29wZShmYWxzZSk7CiAgICAgCiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwotICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CiAKICAgICBKU1ZhbHVlIGJhc2UgPSBKU1ZhbHVlOjpkZWNvZGUoZW5j
b2RlZEJhc2UpOwpAQCAtMTM1NCw3ICsxMzU0LDcgQEAgc2l6ZV90IEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uUmVnRXhwVGVzdAogCiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uU3ViQmln
SW50KEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBvcDEsIEpTQ2VsbCogb3AyKQogewotICAgIFZN
KiB2bSA9ICZleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZl
Q2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgCiAgICAgSlNCaWdJbnQqIGxl
ZnRPcGVyYW5kID0ganNDYXN0PEpTQmlnSW50Kj4ob3AxKTsKQEAgLTEzNjUsNyArMTM2NSw3IEBA
IEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25TdWJCaWdJbnQKIAogSlNDZWxsKiBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbkJpdE5vdEJpZ0ludChFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCog
b3AxKQogewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAKICAgICBK
U0JpZ0ludCogb3BlcmFuZCA9IGpzQ2FzdDxKU0JpZ0ludCo+KG9wMSk7CkBAIC0xMzc1LDcgKzEz
NzUsNyBAQCBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQml0Tm90QmlnCiAKIEpTQ2Vs
bCogSklUX09QRVJBVElPTiBvcGVyYXRpb25NdWxCaWdJbnQoRXhlY1N0YXRlKiBleGVjLCBKU0Nl
bGwqIG9wMSwgSlNDZWxsKiBvcDIpCiB7Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZt
LCBleGVjKTsKIAogICAgIEpTQmlnSW50KiBsZWZ0T3BlcmFuZCA9IGpzQ2FzdDxKU0JpZ0ludCo+
KG9wMSk7CkBAIC0xMzg2LDcgKzEzODYsNyBAQCBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uTXVsQmlnSW50CiAgICAgCiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTW9kQmln
SW50KEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBvcDEsIEpTQ2VsbCogb3AyKQogewotICAgIFZN
KiB2bSA9ICZleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZl
Q2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgCiAgICAgSlNCaWdJbnQqIGxl
ZnRPcGVyYW5kID0ganNDYXN0PEpTQmlnSW50Kj4ob3AxKTsKQEAgLTEzOTcsNyArMTM5Nyw3IEBA
IEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25Nb2RCaWdJbnQKIAogSlNDZWxsKiBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbkRpdkJpZ0ludChFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogb3Ax
LCBKU0NlbGwqIG9wMikKIHsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0g
PSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMp
OwogICAgIAogICAgIEpTQmlnSW50KiBsZWZ0T3BlcmFuZCA9IGpzQ2FzdDxKU0JpZ0ludCo+KG9w
MSk7CkBAIC0xNDA4LDcgKzE0MDgsNyBAQCBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
RGl2QmlnSW50CiAKIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25Qb3dCaWdJbnQoRXhl
Y1N0YXRlKiBleGVjLCBKU0NlbGwqIG9wMSwgSlNDZWxsKiBvcDIpCiB7Ci0gICAgVk0qIHZtID0g
JmV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICAKICAgICBKU0JpZ0ludCogbGVmdE9wZXJh
bmQgPSBqc0Nhc3Q8SlNCaWdJbnQqPihvcDEpOwpAQCAtMTQxOSw3ICsxNDE5LDcgQEAgSlNDZWxs
KiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblBvd0JpZ0ludAogCiBKU0NlbGwqIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uQml0QW5kQmlnSW50KEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBvcDEsIEpT
Q2VsbCogb3AyKQogewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAK
ICAgICBKU0JpZ0ludCogbGVmdE9wZXJhbmQgPSBqc0Nhc3Q8SlNCaWdJbnQqPihvcDEpOwpAQCAt
MTQzMCw3ICsxNDMwLDcgQEAgSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkJpdEFuZEJp
ZwogCiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQml0TFNoaWZ0QmlnSW50KEV4ZWNT
dGF0ZSogZXhlYywgSlNDZWxsKiBvcDEsIEpTQ2VsbCogb3AyKQogewotICAgIFZNKiB2bSA9ICZl
eGVjLT52bSgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAKICAgICBKU0JpZ0ludCogbGVmdE9wZXJhbmQgPSBq
c0Nhc3Q8SlNCaWdJbnQqPihvcDEpOwpAQCAtMTQ0MSw3ICsxNDQxLDcgQEAgSlNDZWxsKiBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbkJpdExTaGlmdAogCiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uQWRkQmlnSW50KEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBvcDEsIEpTQ2VsbCogb3Ay
KQogewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgCiAgICAg
SlNCaWdJbnQqIGxlZnRPcGVyYW5kID0ganNDYXN0PEpTQmlnSW50Kj4ob3AxKTsKQEAgLTE0NTIs
NyArMTQ1Miw3IEBAIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25BZGRCaWdJbnQKIAog
SlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkJpdE9yQmlnSW50KEV4ZWNTdGF0ZSogZXhl
YywgSlNDZWxsKiBvcDEsIEpTQ2VsbCogb3AyKQogewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgp
OworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcih2bSwgZXhlYyk7CiAgICAgCiAgICAgSlNCaWdJbnQqIGxlZnRPcGVyYW5kID0ganNDYXN0
PEpTQmlnSW50Kj4ob3AxKTsKQEAgLTE0NjMsNyArMTQ2Myw3IEBAIEpTQ2VsbCogSklUX09QRVJB
VElPTiBvcGVyYXRpb25CaXRPckJpZ0kKIAogSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
bkJpdFhvckJpZ0ludChFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogb3AxLCBKU0NlbGwqIG9wMikK
IHsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwog
ICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogCiAgICAgSlNCaWdJ
bnQqIGxlZnRPcGVyYW5kID0ganNDYXN0PEpTQmlnSW50Kj4ob3AxKTsKQEAgLTE0NzQsNyArMTQ3
NCw3IEBAIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25CaXRYb3JCaWcKIAogc2l6ZV90
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxQ2VsbChFeGVjU3RhdGUqIGV4
ZWMsIEpTQ2VsbCogb3AxLCBKU0NlbGwqIG9wMikKIHsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0o
KTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIodm0sIGV4ZWMpOwogICAgIAogICAgIHJldHVybiBKU1ZhbHVlOjpzdHJpY3RFcXVhbFNs
b3dDYXNlSW5saW5lKGV4ZWMsIG9wMSwgb3AyKTsKQEAgLTE0ODMsMTQgKzE0ODMsMTQgQEAgc2l6
ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZVN0cgogc2l6ZV90IEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uU2FtZVZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgYXJn
MSwgRW5jb2RlZEpTVmFsdWUgYXJnMikKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKIAogICAgIHJldHVybiBzYW1lVmFsdWUoZXhl
YywgSlNWYWx1ZTo6ZGVjb2RlKGFyZzEpLCBKU1ZhbHVlOjpkZWNvZGUoYXJnMikpOwogfQogCiBF
bmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRvUHJpbWl0aXZlKEV4ZWNTdGF0
ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZt
KCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIg
dHJhY2VyKHZtLCBleGVjKTsKICAgICAKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFs
dWU6OmRlY29kZSh2YWx1ZSkudG9QcmltaXRpdmUoZXhlYykpOwpAQCAtMTQ5OCw3ICsxNDk4LDcg
QEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25UbwogCiBFbmNvZGVkSlNW
YWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRvTnVtYmVyKEV4ZWNTdGF0ZSogZXhlYywgRW5j
b2RlZEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBl
eGVjKTsKIAogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoSlNWYWx1ZTo6ZGVj
b2RlKHZhbHVlKS50b051bWJlcihleGVjKSkpOwpAQCAtMTUwNyw3ICsxNTA3LDcgQEAgRW5jb2Rl
ZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25UbwogRW5jb2RlZEpTVmFsdWUgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25HZXRCeVZhbFdpdGhUaGlzKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZEJhc2UsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRUaGlzLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkU3Vic2NyaXB0KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0g
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6ZGVj
b2RlKGVuY29kZWRCYXNlKTsKQEAgLTE1NDYsMjMgKzE1NDYsMjMgQEAgRW5jb2RlZEpTVmFsdWUg
SklUX09QRVJBVElPTiBvcGVyYXRpb25HZQogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1
dEJ5SWRXaXRoVGhpc1N0cmljdChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRCYXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVGhpcywgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFZhbHVlLCBVbmlxdWVkU3RyaW5nSW1wbCogaW1wbCkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52
bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKIAotICAgIHB1dFdpdGhUaGlz
PHRydWU+KGV4ZWMsIGVuY29kZWRCYXNlLCBlbmNvZGVkVGhpcywgZW5jb2RlZFZhbHVlLCBJZGVu
dGlmaWVyOjpmcm9tVWlkKGV4ZWMsIGltcGwpKTsKKyAgICBwdXRXaXRoVGhpczx0cnVlPihleGVj
LCBlbmNvZGVkQmFzZSwgZW5jb2RlZFRoaXMsIGVuY29kZWRWYWx1ZSwgSWRlbnRpZmllcjo6ZnJv
bVVpZCh2bSwgaW1wbCkpOwogfQogCiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJ
ZFdpdGhUaGlzKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRUaGlzLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIFVu
aXF1ZWRTdHJpbmdJbXBsKiBpbXBsKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxG
cmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogCi0gICAgcHV0V2l0aFRoaXM8ZmFsc2U+KGV4
ZWMsIGVuY29kZWRCYXNlLCBlbmNvZGVkVGhpcywgZW5jb2RlZFZhbHVlLCBJZGVudGlmaWVyOjpm
cm9tVWlkKGV4ZWMsIGltcGwpKTsKKyAgICBwdXRXaXRoVGhpczxmYWxzZT4oZXhlYywgZW5jb2Rl
ZEJhc2UsIGVuY29kZWRUaGlzLCBlbmNvZGVkVmFsdWUsIElkZW50aWZpZXI6OmZyb21VaWQodm0s
IGltcGwpKTsKIH0KIAogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsV2l0aFRo
aXNTdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFRoaXMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3JpcHQs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgp
OwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBJZGVudGlmaWVyIHByb3BlcnR5ID0gSlNWYWx1
ZTo6ZGVjb2RlKGVuY29kZWRTdWJzY3JpcHQpLnRvUHJvcGVydHlLZXkoZXhlYyk7CkBAIC0xNTc0
LDcgKzE1NzQsNyBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxXaXRoCiB2
b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxXaXRoVGhpcyhFeGVjU3RhdGUqIGV4
ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVGhp
cywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFN1YnNjcmlwdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFZhbHVlKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIodm0sIGV4ZWMpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
IAogICAgIElkZW50aWZpZXIgcHJvcGVydHkgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFN1YnNj
cmlwdCkudG9Qcm9wZXJ0eUtleShleGVjKTsKQEAgLTE1OTYsNyArMTU5Niw3IEBAIEFMV0FZU19J
TkxJTkUgc3RhdGljIHZvaWQgZGVmaW5lRGF0YVByb3AKIHZvaWQgSklUX09QRVJBVElPTiBvcGVy
YXRpb25EZWZpbmVEYXRhUHJvcGVydHkoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYmFzZSwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFByb3BlcnR5LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFs
dWUsIGludDMyX3QgYXR0cmlidXRlcykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CiAKICAgICBJZGVudGlmaWVyIHByb3BlcnR5TmFtZSA9IEpTVmFsdWU6
OmRlY29kZShlbmNvZGVkUHJvcGVydHkpLnRvUHJvcGVydHlLZXkoZXhlYyk7CkBAIC0xNjA4LDcg
KzE2MDgsNyBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRGVmaW5lRGF0YVByCiB2b2lk
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRGVmaW5lRGF0YVByb3BlcnR5U3RyaW5nKEV4ZWNTdGF0
ZSogZXhlYywgSlNPYmplY3QqIGJhc2UsIEpTU3RyaW5nKiBwcm9wZXJ0eSwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFZhbHVlLCBpbnQzMl90IGF0dHJpYnV0ZXMpCiB7CiAgICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7Cisg
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgSWRlbnRpZmllciBwcm9wZXJ0eU5h
bWUgPSBwcm9wZXJ0eS0+dG9JZGVudGlmaWVyKGV4ZWMpOwpAQCAtMTYyMCwxNCArMTYyMCwxNCBA
QCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRGVmaW5lRGF0YVByCiB2b2lkIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uRGVmaW5lRGF0YVByb3BlcnR5U3RyaW5nSWRlbnQoRXhlY1N0YXRlKiBl
eGVjLCBKU09iamVjdCogYmFzZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHByb3BlcnR5LCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkVmFsdWUsIGludDMyX3QgYXR0cmlidXRlcykKIHsKICAgICBWTSYgdm0g
PSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVj
KTsKLSAgICBkZWZpbmVEYXRhUHJvcGVydHkoZXhlYywgdm0sIGJhc2UsIElkZW50aWZpZXI6OmZy
b21VaWQoJnZtLCBwcm9wZXJ0eSksIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCBhdHRy
aWJ1dGVzKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAg
ICBkZWZpbmVEYXRhUHJvcGVydHkoZXhlYywgdm0sIGJhc2UsIElkZW50aWZpZXI6OmZyb21VaWQo
dm0sIHByb3BlcnR5KSwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSksIGF0dHJpYnV0ZXMp
OwogfQogCiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRGVmaW5lRGF0YVByb3BlcnR5U3lt
Ym9sKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGJhc2UsIFN5bWJvbCogcHJvcGVydHksIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgaW50MzJfdCBhdHRyaWJ1dGVzKQogewogICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0s
IGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAg
IGRlZmluZURhdGFQcm9wZXJ0eShleGVjLCB2bSwgYmFzZSwgSWRlbnRpZmllcjo6ZnJvbVVpZChw
cm9wZXJ0eS0+cHJpdmF0ZU5hbWUoKSksIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCBh
dHRyaWJ1dGVzKTsKIH0KIApAQCAtMTY0NCw3ICsxNjQ0LDcgQEAgQUxXQVlTX0lOTElORSBzdGF0
aWMgdm9pZCBkZWZpbmVBY2Nlc3Nvcgogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkRlZmlu
ZUFjY2Vzc29yUHJvcGVydHkoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYmFzZSwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZFByb3BlcnR5LCBKU09iamVjdCogZ2V0dGVyLCBKU09iamVjdCogc2V0
dGVyLCBpbnQzMl90IGF0dHJpYnV0ZXMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwogCiAgICAgSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUgPSBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZFByb3BlcnR5KS50b1Byb3BlcnR5S2V5KGV4ZWMpOwpAQCAtMTY1NSw3
ICsxNjU1LDcgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkRlZmluZUFjY2Vzcwogdm9p
ZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkRlZmluZUFjY2Vzc29yUHJvcGVydHlTdHJpbmcoRXhl
Y1N0YXRlKiBleGVjLCBKU09iamVjdCogYmFzZSwgSlNTdHJpbmcqIHByb3BlcnR5LCBKU09iamVj
dCogZ2V0dGVyLCBKU09iamVjdCogc2V0dGVyLCBpbnQzMl90IGF0dHJpYnV0ZXMpCiB7CiAgICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2
bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgSWRlbnRpZmll
ciBwcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eS0+dG9JZGVudGlmaWVyKGV4ZWMpOwpAQCAtMTY2Niwy
MCArMTY2NiwyMCBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRGVmaW5lQWNjZXNzCiB2
b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRGVmaW5lQWNjZXNzb3JQcm9wZXJ0eVN0cmluZ0lk
ZW50KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGJhc2UsIFVuaXF1ZWRTdHJpbmdJbXBsKiBw
cm9wZXJ0eSwgSlNPYmplY3QqIGdldHRlciwgSlNPYmplY3QqIHNldHRlciwgaW50MzJfdCBhdHRy
aWJ1dGVzKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwotICAgIGRlZmluZUFjY2Vzc29yUHJvcGVydHkoZXhl
Yywgdm0sIGJhc2UsIElkZW50aWZpZXI6OmZyb21VaWQoJnZtLCBwcm9wZXJ0eSksIGdldHRlciwg
c2V0dGVyLCBhdHRyaWJ1dGVzKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZt
LCBleGVjKTsKKyAgICBkZWZpbmVBY2Nlc3NvclByb3BlcnR5KGV4ZWMsIHZtLCBiYXNlLCBJZGVu
dGlmaWVyOjpmcm9tVWlkKHZtLCBwcm9wZXJ0eSksIGdldHRlciwgc2V0dGVyLCBhdHRyaWJ1dGVz
KTsKIH0KIAogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkRlZmluZUFjY2Vzc29yUHJvcGVy
dHlTeW1ib2woRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYmFzZSwgU3ltYm9sKiBwcm9wZXJ0
eSwgSlNPYmplY3QqIGdldHRlciwgSlNPYmplY3QqIHNldHRlciwgaW50MzJfdCBhdHRyaWJ1dGVz
KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0s
IGV4ZWMpOwogICAgIGRlZmluZUFjY2Vzc29yUHJvcGVydHkoZXhlYywgdm0sIGJhc2UsIElkZW50
aWZpZXI6OmZyb21VaWQocHJvcGVydHktPnByaXZhdGVOYW1lKCkpLCBnZXR0ZXIsIHNldHRlciwg
YXR0cmlidXRlcyk7CiB9CiAKIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3QXJyYXko
RXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIGFycmF5U3RydWN0dXJlLCB2b2lkKiBidWZmZXIs
IHNpemVfdCBzaXplKQogewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7
CiAgICAgCiAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxjaGFyKj4oY29uc3RydWN0QXJyYXkoZXhl
YywgYXJyYXlTdHJ1Y3R1cmUsIHN0YXRpY19jYXN0PEpTVmFsdWUqPihidWZmZXIpLCBzaXplKSk7
CkBAIC0xNjg3LDE2ICsxNjg3LDE2IEBAIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3
QXJyYXkoRXgKIAogY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdFbXB0eUFycmF5KEV4
ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBhcnJheVN0cnVjdHVyZSkKIHsKLSAgICBWTSogdm0g
PSAmZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxG
cmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIAotICAgIHJldHVybiBiaXR3aXNlX2Nh
c3Q8Y2hhcio+KEpTQXJyYXk6OmNyZWF0ZSgqdm0sIGFycmF5U3RydWN0dXJlKSk7CisgICAgcmV0
dXJuIGJpdHdpc2VfY2FzdDxjaGFyKj4oSlNBcnJheTo6Y3JlYXRlKHZtLCBhcnJheVN0cnVjdHVy
ZSkpOwogfQogCiBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemUo
RXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIGFycmF5U3RydWN0dXJlLCBpbnQzMl90IHNpemUs
IEJ1dHRlcmZseSogYnV0dGVyZmx5KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxG
cmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKIAogICAgIGlmIChVTkxJS0VMWShzaXplIDwgMCkpCkBAIC0xNzEzLDcg
KzE3MTMsNyBAQCBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0FycmF5V2l0CiBjaGFy
KiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVBbmRIaW50KEV4ZWNTdGF0
ZSogZXhlYywgU3RydWN0dXJlKiBhcnJheVN0cnVjdHVyZSwgaW50MzJfdCBzaXplLCBpbnQzMl90
IHZlY3Rvckxlbmd0aEhpbnQsIEJ1dHRlcmZseSogYnV0dGVyZmx5KQogewogICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMp
OworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIGlmIChVTkxJS0VMWShzaXpl
IDwgMCkpCkBAIC0xNzMyLDcgKzE3MzIsNyBAQCBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
bk5ld0FycmF5V2l0CiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3QXJyYXlCdWZm
ZXIoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIGFycmF5U3RydWN0dXJlLCBKU0NlbGwqIGlt
bXV0YWJsZUJ1dHRlcmZseUNlbGwpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgQVNTRVJUKCFhcnJheVN0cnVjdHVyZS0+
b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CiAgICAgYXV0byogaW1tdXRhYmxlQnV0dGVyZmx5ID0ganND
YXN0PEpTSW1tdXRhYmxlQnV0dGVyZmx5Kj4oaW1tdXRhYmxlQnV0dGVyZmx5Q2VsbCk7CiAgICAg
QVNTRVJUKGFycmF5U3RydWN0dXJlLT5pbmRleGluZ01vZGUoKSA9PSBpbW11dGFibGVCdXR0ZXJm
bHktPmluZGV4aW5nTW9kZSgpIHx8IGhhc0FueUFycmF5U3RvcmFnZShhcnJheVN0cnVjdHVyZS0+
aW5kZXhpbmdNb2RlKCkpKTsKQEAgLTE3NTIsNyArMTc1Miw3IEBAIGNoYXIqIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uTmV3SW50OEFycmEKICAgICBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSog
c3RydWN0dXJlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7
CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgcmV0dXJu
IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGNvbnN0cnVjdEdlbmVyaWNUeXBlZEFycmF5Vmlld1dp
dGhBcmd1bWVudHM8SlNJbnQ4QXJyYXk+KGV4ZWMsIHN0cnVjdHVyZSwgZW5jb2RlZFZhbHVlLCAw
LCBXVEY6Om51bGxvcHQpKTsKIH0KIApAQCAtMTc2Niw3ICsxNzY2LDcgQEAgY2hhciogSklUX09Q
RVJBVElPTiBvcGVyYXRpb25OZXdJbnQxNkFycgogICAgIEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICBWTSYg
dm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBl
eGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICBy
ZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oY29uc3RydWN0R2VuZXJpY1R5cGVkQXJyYXlW
aWV3V2l0aEFyZ3VtZW50czxKU0ludDE2QXJyYXk+KGV4ZWMsIHN0cnVjdHVyZSwgZW5jb2RlZFZh
bHVlLCAwLCBXVEY6Om51bGxvcHQpKTsKIH0KIApAQCAtMTc4MCw3ICsxNzgwLDcgQEAgY2hhciog
SklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdJbnQzMkFycgogICAgIEV4ZWNTdGF0ZSogZXhlYywg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
JnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsK
ICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oY29uc3RydWN0R2VuZXJpY1R5cGVk
QXJyYXlWaWV3V2l0aEFyZ3VtZW50czxKU0ludDMyQXJyYXk+KGV4ZWMsIHN0cnVjdHVyZSwgZW5j
b2RlZFZhbHVlLCAwLCBXVEY6Om51bGxvcHQpKTsKIH0KIApAQCAtMTc5NCw3ICsxNzk0LDcgQEAg
Y2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdVaW50OEFycgogICAgIEV4ZWNTdGF0ZSog
ZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkK
IHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBl
eGVjKTsKICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oY29uc3RydWN0R2VuZXJp
Y1R5cGVkQXJyYXlWaWV3V2l0aEFyZ3VtZW50czxKU1VpbnQ4QXJyYXk+KGV4ZWMsIHN0cnVjdHVy
ZSwgZW5jb2RlZFZhbHVlLCAwLCBXVEY6Om51bGxvcHQpKTsKIH0KIApAQCAtMTgwOCw3ICsxODA4
LDcgQEAgY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdVaW50OENsYQogICAgIEV4ZWNT
dGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRW
YWx1ZSkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRy
YWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KHZtLCBleGVjKTsKICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oY29uc3RydWN0
R2VuZXJpY1R5cGVkQXJyYXlWaWV3V2l0aEFyZ3VtZW50czxKU1VpbnQ4Q2xhbXBlZEFycmF5Pihl
eGVjLCBzdHJ1Y3R1cmUsIGVuY29kZWRWYWx1ZSwgMCwgV1RGOjpudWxsb3B0KSk7CiB9CiAKQEAg
LTE4MjIsNyArMTgyMiw3IEBAIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3VWludDE2
QXIKICAgICBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hh
cio+KGNvbnN0cnVjdEdlbmVyaWNUeXBlZEFycmF5Vmlld1dpdGhBcmd1bWVudHM8SlNVaW50MTZB
cnJheT4oZXhlYywgc3RydWN0dXJlLCBlbmNvZGVkVmFsdWUsIDAsIFdURjo6bnVsbG9wdCkpOwog
fQogCkBAIC0xODM2LDcgKzE4MzYsNyBAQCBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5l
d1VpbnQzMkFyCiAgICAgRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0g
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIHJldHVybiByZWludGVycHJldF9j
YXN0PGNoYXIqPihjb25zdHJ1Y3RHZW5lcmljVHlwZWRBcnJheVZpZXdXaXRoQXJndW1lbnRzPEpT
VWludDMyQXJyYXk+KGV4ZWMsIHN0cnVjdHVyZSwgZW5jb2RlZFZhbHVlLCAwLCBXVEY6Om51bGxv
cHQpKTsKIH0KIApAQCAtMTg1MCw3ICsxODUwLDcgQEAgY2hhciogSklUX09QRVJBVElPTiBvcGVy
YXRpb25OZXdGbG9hdDMyQQogICAgIEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52
bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDxjaGFyKj4oY29uc3RydWN0R2VuZXJpY1R5cGVkQXJyYXlWaWV3V2l0aEFyZ3Vt
ZW50czxKU0Zsb2F0MzJBcnJheT4oZXhlYywgc3RydWN0dXJlLCBlbmNvZGVkVmFsdWUsIDAsIFdU
Rjo6bnVsbG9wdCkpOwogfQogCkBAIC0xODY0LDIzICsxODY0LDIzIEBAIGNoYXIqIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uTmV3RmxvYXQ2NEEKICAgICBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVy
ZSogc3RydWN0dXJlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgVk0mIHZt
ID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhl
Yyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgcmV0
dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGNvbnN0cnVjdEdlbmVyaWNUeXBlZEFycmF5Vmll
d1dpdGhBcmd1bWVudHM8SlNGbG9hdDY0QXJyYXk+KGV4ZWMsIHN0cnVjdHVyZSwgZW5jb2RlZFZh
bHVlLCAwLCBXVEY6Om51bGxvcHQpKTsKIH0KIAogSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbkNyZWF0ZUFjdGl2YXRpb25EaXJlY3QoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgSlNTY29wZSogc2NvcGUsIFN5bWJvbFRhYmxlKiB0YWJsZSwgRW5jb2RlZEpTVmFs
dWUgaW5pdGlhbFZhbHVlRW5jb2RlZCkKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIEpTVmFsdWUgaW5p
dGlhbFZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGluaXRpYWxWYWx1ZUVuY29kZWQpOwogICAgIEFT
U0VSVChpbml0aWFsVmFsdWUgPT0ganNVbmRlZmluZWQoKSB8fCBpbml0aWFsVmFsdWUgPT0ganNU
RFpWYWx1ZSgpKTsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKICAgICByZXR1cm4gSlNMZXhpY2FsRW52aXJvbm1l
bnQ6OmNyZWF0ZSh2bSwgc3RydWN0dXJlLCBzY29wZSwgdGFibGUsIGluaXRpYWxWYWx1ZSk7CiB9
CiAKIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25DcmVhdGVEaXJlY3RBcmd1bWVudHMo
RXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgdWludDMyX3QgbGVuZ3RoLCB1
aW50MzJfdCBtaW5DYXBhY2l0eSkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0YXJnZXQoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICBEaXJlY3RBcmd1bWVudHMqIHJlc3VsdCA9
IERpcmVjdEFyZ3VtZW50czo6Y3JlYXRlKAogICAgICAgICB2bSwgc3RydWN0dXJlLCBsZW5ndGgs
IHN0ZDo6bWF4KGxlbmd0aCwgbWluQ2FwYWNpdHkpKTsKICAgICAvLyBUaGUgY2FsbGVyIHdpbGwg
c3RvcmUgdG8gdGhpcyBvYmplY3Qgd2l0aG91dCBiYXJyaWVycy4gTW9zdCBsaWtlbHksIGF0IHRo
aXMgcG9pbnQsIHRoaXMgaXMKQEAgLTE4OTMsNyArMTg5Myw3IEBAIEpTQ2VsbCogSklUX09QRVJB
VElPTiBvcGVyYXRpb25DcmVhdGVEaXIKIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25D
cmVhdGVTY29wZWRBcmd1bWVudHMoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgUmVnaXN0ZXIqIGFyZ3VtZW50U3RhcnQsIHVpbnQzMl90IGxlbmd0aCwgSlNGdW5jdGlvbiog
Y2FsbGVlLCBKU0xleGljYWxFbnZpcm9ubWVudCogc2NvcGUpCiB7CiAgICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdGFyZ2V0KCZ2bSwgZXhlYyk7Cisg
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgCiAgICAgLy8g
V2UgY291bGQgcGFzcyB0aGUgU2NvcGVkQXJndW1lbnRzVGFibGUqIGFzIGFuIGFyZ3VtZW50LiBX
ZSBjdXJyZW50bHkgZG9uJ3QgYmVjYXVzZSBJCiAgICAgLy8gZGlkbid0IGZlZWwgbGlrZSBjaGFu
Z2luZyB0aGUgbWF4IG51bWJlciBvZiBhcmd1bWVudHMgZm9yIGEgc2xvdyBwYXRoIGNhbGwgZnJv
bSA2IHRvIDcuCkBAIC0xOTA2LDcgKzE5MDYsNyBAQCBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uQ3JlYXRlU2NvCiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRlQ2xv
bmVkQXJndW1lbnRzKEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFJlZ2lz
dGVyKiBhcmd1bWVudFN0YXJ0LCB1aW50MzJfdCBsZW5ndGgsIEpTRnVuY3Rpb24qIGNhbGxlZSkK
IHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
YXJnZXQoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBl
eGVjKTsKICAgICByZXR1cm4gQ2xvbmVkQXJndW1lbnRzOjpjcmVhdGVCeUNvcHlpbmdGcm9tKAog
ICAgICAgICBleGVjLCBzdHJ1Y3R1cmUsIGFyZ3VtZW50U3RhcnQsIGxlbmd0aCwgY2FsbGVlKTsK
IH0KQEAgLTE5MTQsNyArMTkxNCw3IEBAIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25D
cmVhdGVDbG8KIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25DcmVhdGVEaXJlY3RBcmd1
bWVudHNEdXJpbmdFeGl0KEV4ZWNTdGF0ZSogZXhlYywgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVD
YWxsRnJhbWUsIEpTRnVuY3Rpb24qIGNhbGxlZSwgdWludDMyX3QgYXJndW1lbnRDb3VudCkKIHsK
ICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0YXJn
ZXQoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVj
KTsKICAgICAKICAgICBEZWZlckdDRm9yQVdoaWxlIGRlZmVyR0Modm0uaGVhcCk7CiAgICAgCkBA
IC0xOTQzLDcgKzE5NDMsNyBAQCBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRl
RGlyCiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRlQ2xvbmVkQXJndW1lbnRz
RHVyaW5nRXhpdChFeGVjU3RhdGUqIGV4ZWMsIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZy
YW1lLCBKU0Z1bmN0aW9uKiBjYWxsZWUsIHVpbnQzMl90IGFyZ3VtZW50Q291bnQpCiB7CiAgICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdGFyZ2V0KCZ2
bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAg
ICAgCiAgICAgRGVmZXJHQ0ZvckFXaGlsZSBkZWZlckdDKHZtLmhlYXApOwogICAgIApAQCAtMTk2
OSw3ICsxOTY5LDcgQEAgSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZUNsbwog
CiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRlUmVzdChFeGVjU3RhdGUqIGV4
ZWMsIFJlZ2lzdGVyKiBhcmd1bWVudFN0YXJ0LCB1bnNpZ25lZCBudW1iZXJPZlBhcmFtc1RvU2tp
cCwgdW5zaWduZWQgYXJyYXlTaXplKQogewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2
bSwgZXhlYyk7CiAKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+bGV4
aWNhbEdsb2JhbE9iamVjdCgpOwpAQCAtMTk4Miw3ICsxOTgyLDcgQEAgSlNDZWxsKiBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbkNyZWF0ZVJlcwogc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
T2JqZWN0SXNPYmplY3QoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU0NlbGwqIG9iamVjdCkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKIAogICAgIEFTU0VSVChqc0R5bmFtaWNDYXN0PEpT
T2JqZWN0Kj4odm0sIG9iamVjdCkpOwogICAgIApAQCAtMTk5Niw3ICsxOTk2LDcgQEAgc2l6ZV90
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uT2JqZWN0SXNPYgogc2l6ZV90IEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uT2JqZWN0SXNGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTQ2VsbCogb2JqZWN0KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogCiAgICAgQVNTRVJUKGpzRHlu
YW1pY0Nhc3Q8SlNPYmplY3QqPih2bSwgb2JqZWN0KSk7CiAgICAgCkBAIC0yMDEwLDcgKzIwMTAs
NyBAQCBzaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25PYmplY3RJc0Z1CiBKU0NlbGwqIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uVHlwZU9mT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDZWxsKiBvYmplY3QpCiB7CiAgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7
CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAKICAgICBBU1NF
UlQoanNEeW5hbWljQ2FzdDxKU09iamVjdCo+KHZtLCBvYmplY3QpKTsKICAgICAKQEAgLTIwMjQs
NyArMjAyNCw3IEBAIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25UeXBlT2ZPYmoKIGlu
dDMyX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25UeXBlT2ZPYmplY3RBc1R5cGVvZlR5cGUoRXhl
Y1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0NlbGwqIG9iamVj
dCkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZt
LCBleGVjKTsKIAogICAgIEFTU0VSVChqc0R5bmFtaWNDYXN0PEpTT2JqZWN0Kj4odm0sIG9iamVj
dCkpOwogICAgIApAQCAtMjAzOCw3ICsyMDM4LDcgQEAgaW50MzJfdCBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvblR5cGVPZk9iagogY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25BbGxvY2F0ZVNp
bXBsZVByb3BlcnR5U3RvcmFnZVdpdGhJbml0aWFsQ2FwYWNpdHkoRXhlY1N0YXRlKiBleGVjKQog
ewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4
ZWMpOwogCiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KAogICAgICAgICBCdXR0
ZXJmbHk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQodm0sIDAsIDAsIGluaXRpYWxPdXRPZkxpbmVDYXBh
Y2l0eSwgZmFsc2UsIDApKTsKQEAgLTIwNDcsNyArMjA0Nyw3IEBAIGNoYXIqIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uQWxsb2NhdGVTaW0KIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQWxs
b2NhdGVTaW1wbGVQcm9wZXJ0eVN0b3JhZ2UoRXhlY1N0YXRlKiBleGVjLCBzaXplX3QgbmV3U2l6
ZSkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZt
LCBleGVjKTsKIAogICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPigKICAgICAgICAg
QnV0dGVyZmx5OjpjcmVhdGVVbmluaXRpYWxpemVkKHZtLCAwLCAwLCBuZXdTaXplLCBmYWxzZSwg
MCkpOwpAQCAtMjA1Niw3ICsyMDU2LDcgQEAgY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25B
bGxvY2F0ZVNpbQogY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25BbGxvY2F0ZUNvbXBsZXhQ
cm9wZXJ0eVN0b3JhZ2VXaXRoSW5pdGlhbENhcGFjaXR5KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmpl
Y3QqIG9iamVjdCkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxG
cmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIg
dHJhY2VyKHZtLCBleGVjKTsKIAogICAgIEFTU0VSVCghb2JqZWN0LT5zdHJ1Y3R1cmUodm0pLT5v
dXRPZkxpbmVDYXBhY2l0eSgpKTsKICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4o
CkBAIC0yMDY2LDcgKzIwNjYsNyBAQCBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFsbG9j
YXRlQ29tCiBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFsbG9jYXRlQ29tcGxleFByb3Bl
cnR5U3RvcmFnZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvYmplY3QsIHNpemVfdCBuZXdT
aXplKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
dm0sIGV4ZWMpOwogCiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KAogICAgICAg
ICBvYmplY3QtPmFsbG9jYXRlTW9yZU91dE9mTGluZVN0b3JhZ2Uodm0sIG9iamVjdC0+c3RydWN0
dXJlKHZtKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgbmV3U2l6ZSkpOwpAQCAtMjA3NSw3ICsyMDc1
LDcgQEAgY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25BbGxvY2F0ZUNvbQogY2hhciogSklU
X09QRVJBVElPTiBvcGVyYXRpb25FbnN1cmVJbnQzMihFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCog
Y2VsbCkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRy
YWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KHZtLCBleGVjKTsKICAgICAKICAgICBpZiAoIWNlbGwtPmlzT2JqZWN0KCkpCiAgICAgICAgIHJl
dHVybiAwOwpAQCAtMjA4OCw3ICsyMDg4LDcgQEAgY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRp
b25FbnN1cmVJbnQzMgogY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25FbnN1cmVEb3VibGUo
RXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGNlbGwpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgCiAgICAgaWYgKCFjZWxs
LT5pc09iamVjdCgpKQogICAgICAgICByZXR1cm4gMDsKQEAgLTIxMDEsNyArMjEwMSw3IEBAIGNo
YXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRW5zdXJlRG91YmwKIGNoYXIqIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uRW5zdXJlQ29udGlndW91cyhFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogY2Vs
bCkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZt
LCBleGVjKTsKICAgICAKICAgICBpZiAoIWNlbGwtPmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVy
biAwOwpAQCAtMjExNCw3ICsyMTE0LDcgQEAgY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25F
bnN1cmVDb250aQogY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25FbnN1cmVBcnJheVN0b3Jh
Z2UoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGNlbGwpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgCiAgICAgaWYgKCFj
ZWxsLT5pc09iamVjdCgpKQogICAgICAgICByZXR1cm4gMDsKQEAgLTIxMjcsNyArMjEyNyw3IEBA
IGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRW5zdXJlQXJyYXkKIEVuY29kZWRKU1ZhbHVl
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSGFzR2VuZXJpY1Byb3BlcnR5KEV4ZWNTdGF0ZSogZXhl
YywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2VWYWx1ZSwgSlNDZWxsKiBwcm9wZXJ0eSkKIHsK
ICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVj
KTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBKU1Zh
bHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQmFzZVZhbHVlKTsKQEAgLTIx
NDUsMTEgKzIxNDUsMTEgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25I
YQogc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSGFzSW5kZXhlZFByb3BlcnR5QnlJbnQo
RXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGJhc2VDZWxsLCBpbnQzMl90IHN1YnNjcmlwdCwgaW50
MzJfdCBpbnRlcm5hbE1ldGhvZFR5cGUpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgSlNPYmplY3QqIG9iamVjdCA9IGJh
c2VDZWxsLT50b09iamVjdChleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpOwogICAg
IGlmIChVTkxJS0VMWShzdWJzY3JpcHQgPCAwKSkgewogICAgICAgICAvLyBHbyB0aGUgc2xvd2Vz
dCB3YXkgcG9zc2libGUgYmVjYXVzZSBuZWdhdGl2ZSBpbmRpY2VzIGRvbid0IHVzZSBpbmRleGVk
IHN0b3JhZ2UuCi0gICAgICAgIHJldHVybiBvYmplY3QtPmhhc1Byb3BlcnR5R2VuZXJpYyhleGVj
LCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIHN1YnNjcmlwdCksIHN0YXRpY19jYXN0PFByb3BlcnR5
U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlPihpbnRlcm5hbE1ldGhvZFR5cGUpKTsKKyAgICAgICAg
cmV0dXJuIG9iamVjdC0+aGFzUHJvcGVydHlHZW5lcmljKGV4ZWMsIElkZW50aWZpZXI6OmZyb20o
dm0sIHN1YnNjcmlwdCksIHN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RU
eXBlPihpbnRlcm5hbE1ldGhvZFR5cGUpKTsKICAgICB9CiAgICAgcmV0dXJuIG9iamVjdC0+aGFz
UHJvcGVydHlHZW5lcmljKGV4ZWMsIHN1YnNjcmlwdCwgc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90
OjpJbnRlcm5hbE1ldGhvZFR5cGU+KGludGVybmFsTWV0aG9kVHlwZSkpOwogfQpAQCAtMjE1Nyw3
ICsyMTU3LDcgQEAgc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSGFzSW5kZXhlZAogSlND
ZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldFByb3BlcnR5RW51bWVyYXRvcihFeGVjU3Rh
dGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlKQogewogICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwor
ICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEpTVmFsdWUgYmFzZSA9IEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkQmFzZSk7CkBAIC0yMTczLDcgKzIxNzMsNyBAQCBKU0NlbGwqIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0UHJvcGVyCiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uR2V0UHJvcGVydHlFbnVtZXJhdG9yQ2VsbChFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCog
Y2VsbCkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRy
YWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KHZtLCBleGVjKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAK
ICAgICBKU09iamVjdCogYmFzZSA9IGNlbGwtPnRvT2JqZWN0KGV4ZWMsIGV4ZWMtPmxleGljYWxH
bG9iYWxPYmplY3QoKSk7CkBAIC0yMTg1LDE0ICsyMTg1LDE0IEBAIEpTQ2VsbCogSklUX09QRVJB
VElPTiBvcGVyYXRpb25HZXRQcm9wZXIKIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25U
b0luZGV4U3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgaW50MzJfdCBpbmRleCkKIHsKICAgICBWTSYg
dm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBl
eGVjKTsKLSAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBp
bmRleCkuc3RyaW5nKCkpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4
ZWMpOworICAgIHJldHVybiBqc1N0cmluZyh2bSwgSWRlbnRpZmllcjo6ZnJvbSh2bSwgaW5kZXgp
LnN0cmluZygpKTsKIH0KIAogSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1JlZ2V4
cFdpdGhMYXN0SW5kZXgoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIHJlZ2V4cFB0ciwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZExhc3RJbmRleCkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwot
ICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKIAogICAgIFJlZ0V4cCogcmVnZXhwID0g
c3RhdGljX2Nhc3Q8UmVnRXhwKj4ocmVnZXhwUHRyKTsKICAgICBBU1NFUlQocmVnZXhwLT5pc1Zh
bGlkKCkpOwpAQCAtMjIwMiw3ICsyMjAyLDcgQEAgSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbk5ld1JlZ2V4cAogU3RyaW5nSW1wbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25SZXNvbHZl
Um9wZShFeGVjU3RhdGUqIGV4ZWMsIEpTU3RyaW5nKiBzdHJpbmcpCiB7CiAgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7
CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAKICAgICByZXR1
cm4gc3RyaW5nLT52YWx1ZShleGVjKS5pbXBsKCk7CiB9CkBAIC0yMjEwLDcgKzIyMTAsNyBAQCBT
dHJpbmdJbXBsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblJlc29sCiBKU1N0cmluZyogSklUX09Q
RVJBVElPTiBvcGVyYXRpb25TdHJpbmdWYWx1ZU9mKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZEFyZ3VtZW50KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxG
cmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKIAogICAgIEpTVmFsdWUgYXJndW1lbnQgPSBKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZEFyZ3VtZW50KTsKQEAgLTIyMjgsNyArMjIyOCw3IEBAIEpTU3RyaW5nKiBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvblN0cmluZ1YKIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25T
dHJpbmdTdWJzdHIoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGNlbGwsIGludDMyX3QgZnJvbSwg
aW50MzJfdCBzcGFuKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIodm0sIGV4ZWMpOwogCiAgICAgcmV0dXJuIGpzU3Vic3RyaW5nKHZtLCBleGVjLCBq
c0Nhc3Q8SlNTdHJpbmcqPihjZWxsKSwgZnJvbSwgc3Bhbik7CiB9CkBAIC0yMjM2LDcgKzIyMzYs
NyBAQCBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uU3RyaW5nU3ViCiBKU0NlbGwqIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uU3RyaW5nU2xpY2UoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwq
IGNlbGwsIGludDMyX3Qgc3RhcnQsIGludDMyX3QgZW5kKQogewogICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogCiAgICAgSlNTdHJpbmcq
IHN0cmluZyA9IGFzU3RyaW5nKGNlbGwpOwogICAgIHN0YXRpY19hc3NlcnQoc3RhdGljX2Nhc3Q8
dWludDY0X3Q+KEpTU3RyaW5nOjpNYXhMZW5ndGgpIDw9IHN0YXRpY19jYXN0PHVpbnQ2NF90Pihz
dGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptYXgoKSksICIiKTsKQEAgLTIyNDYsNyArMjI0
Niw3IEBAIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25TdHJpbmdTbGkKIEpTU3RyaW5n
KiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRvTG93ZXJDYXNlKEV4ZWNTdGF0ZSogZXhlYywgSlNT
dHJpbmcqIHN0cmluZywgdWludDMyX3QgZmFpbGluZ0luZGV4KQogewogICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwor
ICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogCiAgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCkBAIC0yMjU4LDEzICsyMjU4LDEzIEBA
IEpTU3RyaW5nKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRvTG93ZXIKICAgICBTdHJpbmcgbG93
ZXJjYXNlZFN0cmluZyA9IGlucHV0U3RyaW5nLmlzOEJpdCgpID8gaW5wdXRTdHJpbmcuY29udmVy
dFRvTG93ZXJjYXNlV2l0aG91dExvY2FsZVN0YXJ0aW5nQXRGYWlsaW5nSW5kZXg4Qml0KGZhaWxp
bmdJbmRleCkgOiBpbnB1dFN0cmluZy5jb252ZXJ0VG9Mb3dlcmNhc2VXaXRob3V0TG9jYWxlKCk7
CiAgICAgaWYgKGxvd2VyY2FzZWRTdHJpbmcuaW1wbCgpID09IGlucHV0U3RyaW5nLmltcGwoKSkK
ICAgICAgICAgcmV0dXJuIHN0cmluZzsKLSAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGpz
U3RyaW5nKGV4ZWMsIGxvd2VyY2FzZWRTdHJpbmcpKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4o
c2NvcGUsIGpzU3RyaW5nKHZtLCBsb3dlcmNhc2VkU3RyaW5nKSk7CiB9CiAKIGNoYXIqIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uSW50MzJUb1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIGludDMyX3Qg
dmFsdWUsIGludDMyX3QgcmFkaXgpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CiAKQEAgLTIyNzksNyArMjI3OSw3IEBAIGNoYXIqIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uSW50MzJUb1N0cmkKIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSW50
NTJUb1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIGludDY0X3QgdmFsdWUsIGludDMyX3QgcmFkaXgp
CiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIg
dHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwg
ZXhlYyk7CiAKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKQEAg
LTIyOTQsNyArMjI5NCw3IEBAIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSW50NTJUb1N0
cmkKIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRG91YmxlVG9TdHJpbmcoRXhlY1N0YXRl
KiBleGVjLCBkb3VibGUgdmFsdWUsIGludDMyX3QgcmFkaXgpCiB7CiAgICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7Cisg
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAKICAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKQEAgLTIzMDksNyArMjMwOSw3IEBAIGNo
YXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRG91YmxlVG9TdHIKIGNoYXIqIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uSW50MzJUb1N0cmluZ1dpdGhWYWxpZFJhZGl4KEV4ZWNTdGF0ZSogZXhlYywg
aW50MzJfdCB2YWx1ZSwgaW50MzJfdCByYWRpeCkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgp
OwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKIAogICAgIHJldHVybiByZWludGVy
cHJldF9jYXN0PGNoYXIqPihpbnQzMlRvU3RyaW5nKHZtLCB2YWx1ZSwgcmFkaXgpKTsKIH0KQEAg
LTIzMTcsNyArMjMxNyw3IEBAIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSW50MzJUb1N0
cmkKIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSW50NTJUb1N0cmluZ1dpdGhWYWxpZFJh
ZGl4KEV4ZWNTdGF0ZSogZXhlYywgaW50NjRfdCB2YWx1ZSwgaW50MzJfdCByYWRpeCkKIHsKICAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
JnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsK
IAogICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPihpbnQ1MlRvU3RyaW5nKHZtLCB2
YWx1ZSwgcmFkaXgpKTsKIH0KQEAgLTIzMjUsNyArMjMyNSw3IEBAIGNoYXIqIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uSW50NTJUb1N0cmkKIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRG91
YmxlVG9TdHJpbmdXaXRoVmFsaWRSYWRpeChFeGVjU3RhdGUqIGV4ZWMsIGRvdWJsZSB2YWx1ZSwg
aW50MzJfdCByYWRpeCkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFj
ZXIgdHJhY2VyKHZtLCBleGVjKTsKIAogICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIq
PihudW1iZXJUb1N0cmluZyh2bSwgdmFsdWUsIHJhZGl4KSk7CiB9CkBAIC0yMzMzLDE1ICsyMzMz
LDE1IEBAIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRG91YmxlVG9TdHIKIEpTU3RyaW5n
KiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblNpbmdsZUNoYXJhY3RlclN0cmluZyhFeGVjU3RhdGUq
IGV4ZWMsIGludDMyX3QgY2hhcmFjdGVyKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0g
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIAotICAgIHJldHVybiBqc1Npbmds
ZUNoYXJhY3RlclN0cmluZyhleGVjLCBzdGF0aWNfY2FzdDxVQ2hhcj4oY2hhcmFjdGVyKSk7Cisg
ICAgcmV0dXJuIGpzU2luZ2xlQ2hhcmFjdGVyU3RyaW5nKHZtLCBzdGF0aWNfY2FzdDxVQ2hhcj4o
Y2hhcmFjdGVyKSk7CiB9CiAKIFN5bWJvbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdTeW1i
b2woRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogCiAgICAgcmV0dXJuIFN5bWJvbDo6Y3JlYXRlKHZt
KTsKIH0KQEAgLTIzNDksNyArMjM0OSw3IEBAIFN5bWJvbCogSklUX09QRVJBVElPTiBvcGVyYXRp
b25OZXdTeW1ib2wKIFN5bWJvbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdTeW1ib2xXaXRo
RGVzY3JpcHRpb24oRXhlY1N0YXRlKiBleGVjLCBKU1N0cmluZyogZGVzY3JpcHRpb24pCiB7CiAg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7
CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgU3RyaW5n
IHN0cmluZyA9IGRlc2NyaXB0aW9uLT52YWx1ZShleGVjKTsKQEAgLTIzNjEsNyArMjM2MSw3IEBA
IFN5bWJvbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdTeW1ib2wKIEpTQ2VsbCogSklUX09Q
RVJBVElPTiBvcGVyYXRpb25OZXdTdHJpbmdPYmplY3QoRXhlY1N0YXRlKiBleGVjLCBKU1N0cmlu
Zyogc3RyaW5nLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52
bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICAKICAgICByZXR1cm4g
U3RyaW5nT2JqZWN0OjpjcmVhdGUodm0sIHN0cnVjdHVyZSwgc3RyaW5nKTsKIH0KQEAgLTIzNjks
NyArMjM2OSw3IEBAIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdTdHJpbmcKIEpT
U3RyaW5nKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRvU3RyaW5nT25DZWxsKEV4ZWNTdGF0ZSog
ZXhlYywgSlNDZWxsKiBjZWxsKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIAogICAgIHJldHVybiBKU1ZhbHVlKGNlbGwp
LnRvU3RyaW5nKGV4ZWMpOwogfQpAQCAtMjM3Nyw3ICsyMzc3LDcgQEAgSlNTdHJpbmcqIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uVG9TdHJpbgogSlNTdHJpbmcqIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uVG9TdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSB2YWx1ZSkKIHsKICAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
JnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsK
IAogICAgIHJldHVybiBKU1ZhbHVlOjpkZWNvZGUodmFsdWUpLnRvU3RyaW5nKGV4ZWMpOwogfQpA
QCAtMjM4NSw3ICsyMzg1LDcgQEAgSlNTdHJpbmcqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVG9T
dHJpbgogSlNTdHJpbmcqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ2FsbFN0cmluZ0NvbnN0cnVj
dG9yT25DZWxsKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBjZWxsKQogewogICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMp
OworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogCiAgICAgcmV0
dXJuIHN0cmluZ0NvbnN0cnVjdG9yKGV4ZWMsIGNlbGwpOwogfQpAQCAtMjM5Myw3ICsyMzkzLDcg
QEAgSlNTdHJpbmcqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ2FsbFN0cgogSlNTdHJpbmcqIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uQ2FsbFN0cmluZ0NvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhl
YywgRW5jb2RlZEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAKICAgICByZXR1cm4gc3RyaW5nQ29uc3Ry
dWN0b3IoZXhlYywgSlNWYWx1ZTo6ZGVjb2RlKHZhbHVlKSk7CiB9CkBAIC0yNDAxLDcgKzI0MDEs
NyBAQCBKU1N0cmluZyogSklUX09QRVJBVElPTiBvcGVyYXRpb25DYWxsU3RyCiBKU1N0cmluZyog
SklUX09QRVJBVElPTiBvcGVyYXRpb25NYWtlUm9wZTIoRXhlY1N0YXRlKiBleGVjLCBKU1N0cmlu
ZyogbGVmdCwgSlNTdHJpbmcqIHJpZ2h0KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0g
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogCiAgICAgcmV0dXJuIGpzU3RyaW5nKGV4
ZWMsIGxlZnQsIHJpZ2h0KTsKIH0KQEAgLTI0MDksNyArMjQwOSw3IEBAIEpTU3RyaW5nKiBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbk1ha2VSb3AKIEpTU3RyaW5nKiBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbk1ha2VSb3BlMyhFeGVjU3RhdGUqIGV4ZWMsIEpTU3RyaW5nKiBhLCBKU1N0cmluZyogYiwg
SlNTdHJpbmcqIGMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcih2bSwgZXhlYyk7CiAKICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgYSwgYiwgYyk7
CiB9CkBAIC0yNDE3LDcgKzI0MTcsNyBAQCBKU1N0cmluZyogSklUX09QRVJBVElPTiBvcGVyYXRp
b25NYWtlUm9wCiBKU1N0cmluZyogSklUX09QRVJBVElPTiBvcGVyYXRpb25TdHJDYXQyKEV4ZWNT
dGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgYSwgRW5jb2RlZEpTVmFsdWUgYikKIHsKICAgICBW
TSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZt
LCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBBU1NFUlQoIUpT
VmFsdWU6OmRlY29kZShhKS5pc1N5bWJvbCgpKTsKQEAgLTI0MzMsNyArMjQzMyw3IEBAIEpTU3Ry
aW5nKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblN0ckNhdDIKIEpTU3RyaW5nKiBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvblN0ckNhdDMoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBhLCBF
bmNvZGVkSlNWYWx1ZSBiLCBFbmNvZGVkSlNWYWx1ZSBjKQogewogICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEFTU0VSVCghSlNWYWx1ZTo6ZGVjb2Rl
KGEpLmlzU3ltYm9sKCkpOwpAQCAtMjQ1Myw3ICsyNDUzLDcgQEAgY2hhciogSklUX09QRVJBVElP
TiBvcGVyYXRpb25GaW5kU3dpdGNoSQogICAgIEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFZhbHVlLCBzaXplX3QgdGFibGVJbmRleCkKIHsKICAgICBWTSYgdm0gPSBleGVj
LT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICBDb2RlQmxvY2sq
IGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOwogICAgIFNpbXBsZUp1bXBUYWJsZSYgdGFi
bGUgPSBjb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKICAgICBKU1ZhbHVl
IHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CkBAIC0yNDY4LDcgKzI0Njgs
NyBAQCBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkZpbmRTd2l0Y2hJCiBjaGFyKiBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvblN3aXRjaFN0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIHNpemVfdCB0
YWJsZUluZGV4LCBKU1N0cmluZyogc3RyaW5nKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgU3RyaW5nSW1wbCogc3RySW1wbCA9IHN0
cmluZy0+dmFsdWUoZXhlYykuaW1wbCgpOwpAQCAtMjQ4MSw3ICsyNDgxLDcgQEAgY2hhciogSklU
X09QRVJBVElPTiBvcGVyYXRpb25Td2l0Y2hTdHJpbgogaW50MzJfdCBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvblN3aXRjaFN0cmluZ0FuZEdldEJyYW5jaE9mZnNldChFeGVjU3RhdGUqIGV4ZWMsIHNp
emVfdCB0YWJsZUluZGV4LCBKU1N0cmluZyogc3RyaW5nKQogewogICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgU3RyaW5nSW1wbCogc3RySW1w
bCA9IHN0cmluZy0+dmFsdWUoZXhlYykuaW1wbCgpOwpAQCAtMjUxNCw3ICsyNTE0LDcgQEAgdWlu
dHB0cl90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZQogdWludHB0cl90IEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uQ29tcGFyZVN0cmluZ0xlc3MoRXhlY1N0YXRlKiBleGVjLCBKU1N0cmlu
ZyogYSwgSlNTdHJpbmcqIGIpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAKICAgICByZXR1cm4gY29kZVBvaW50Q29tcGFyZUxl
c3NUaGFuKGFzU3RyaW5nKGEpLT52YWx1ZShleGVjKSwgYXNTdHJpbmcoYiktPnZhbHVlKGV4ZWMp
KTsKIH0KQEAgLTI1MjIsNyArMjUyMiw3IEBAIHVpbnRwdHJfdCBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbkNvbXBhcmUKIHVpbnRwdHJfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVTdHJp
bmdMZXNzRXEoRXhlY1N0YXRlKiBleGVjLCBKU1N0cmluZyogYSwgSlNTdHJpbmcqIGIpCiB7CiAg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7
CiAKICAgICByZXR1cm4gIWNvZGVQb2ludENvbXBhcmVMZXNzVGhhbihhc1N0cmluZyhiKS0+dmFs
dWUoZXhlYyksIGFzU3RyaW5nKGEpLT52YWx1ZShleGVjKSk7CiB9CkBAIC0yNTMwLDcgKzI1MzAs
NyBAQCB1aW50cHRyX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlCiB1aW50cHRyX3Qg
SklUX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlU3RyaW5nR3JlYXRlcihFeGVjU3RhdGUqIGV4
ZWMsIEpTU3RyaW5nKiBhLCBKU1N0cmluZyogYikKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgp
OwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKIAogICAgIHJldHVybiBjb2RlUG9p
bnRDb21wYXJlTGVzc1RoYW4oYXNTdHJpbmcoYiktPnZhbHVlKGV4ZWMpLCBhc1N0cmluZyhhKS0+
dmFsdWUoZXhlYykpOwogfQpAQCAtMjUzOCw3ICsyNTM4LDcgQEAgdWludHB0cl90IEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uQ29tcGFyZQogdWludHB0cl90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
Q29tcGFyZVN0cmluZ0dyZWF0ZXJFcShFeGVjU3RhdGUqIGV4ZWMsIEpTU3RyaW5nKiBhLCBKU1N0
cmluZyogYikKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKHZtLCBleGVjKTsKIAogICAgIHJldHVybiAhY29kZVBvaW50Q29tcGFyZUxlc3NUaGFuKGFz
U3RyaW5nKGEpLT52YWx1ZShleGVjKSwgYXNTdHJpbmcoYiktPnZhbHVlKGV4ZWMpKTsKIH0KQEAg
LTI1NDYsNyArMjU0Niw3IEBAIHVpbnRwdHJfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBh
cmUKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25Ob3RpZnlXcml0ZShFeGVjU3RhdGUqIGV4
ZWMsIFdhdGNocG9pbnRTZXQqIHNldCkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKIAogICAgIHNldC0+dG91Y2godm0sICJFeGVj
dXRlZCBOb3RpZnlXcml0ZSIpOwogfQpAQCAtMjU1NCw3ICsyNTU0LDcgQEAgdm9pZCBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbk5vdGlmeVdyaXRlKAogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
blRocm93U3RhY2tPdmVyZmxvd0ZvclZhcmFyZ3MoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0s
IGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICB0aHJvd1N0YWNrT3Zl
cmZsb3dFcnJvcihleGVjLCBzY29wZSk7CiB9CkBAIC0yNTYyLDcgKzI1NjIsNyBAQCB2b2lkIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uVGhyb3dTdGFja092CiBpbnQzMl90IEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uU2l6ZU9mVmFyYXJncyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRBcmd1bWVudHMsIHVpbnQzMl90IGZpcnN0VmFyQXJnT2Zmc2V0KQogewogICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4
ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIEpT
VmFsdWUgYXJndW1lbnRzID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRBcmd1bWVudHMpOwogICAg
IAogICAgIHJldHVybiBzaXplT2ZWYXJhcmdzKGV4ZWMsIGFyZ3VtZW50cywgZmlyc3RWYXJBcmdP
ZmZzZXQpOwpAQCAtMjU3MSw3ICsyNTcxLDcgQEAgaW50MzJfdCBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvblNpemVPZlZhcgogaW50MzJfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkhhc093blByb3Bl
cnR5KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmplY3QsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRLZXkpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcih2bSwgZXhlYyk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogCiAgICAgSlNWYWx1ZSBrZXkgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEtleSk7CkBA
IC0yNTkxLDE0ICsyNTkxLDE0IEBAIGludDMyX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25IYXNP
d25Qcm8KIGludDMyX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25OdW1iZXJJc0ludGVnZXIoRXhl
Y1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBWTSYgdm0gPSBleGVj
LT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICByZXR1cm4gTnVt
YmVyQ29uc3RydWN0b3I6OmlzSW50ZWdlckltcGwoSlNWYWx1ZTo6ZGVjb2RlKHZhbHVlKSk7CiB9
CiAKIGludDMyX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25BcnJheUluZGV4T2ZTdHJpbmcoRXhl
Y1N0YXRlKiBleGVjLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSwgSlNTdHJpbmcqIHNlYXJjaEVsZW1l
bnQsIGludDMyX3QgaW5kZXgpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogCiAgICAgaW50MzJfdCBsZW5ndGggPSBidXR0ZXJmbHktPnB1YmxpY0xlbmd0
aCgpOwpAQCAtMjYyMiw3ICsyNjIyLDcgQEAgaW50MzJfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
bkFycmF5SW5kZQogaW50MzJfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFycmF5SW5kZXhPZlZh
bHVlSW50MzJPckNvbnRpZ3VvdXMoRXhlY1N0YXRlKiBleGVjLCBCdXR0ZXJmbHkqIGJ1dHRlcmZs
eSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBpbnQzMl90IGluZGV4KQogewogICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0s
IGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEpTVmFsdWUgc2Vh
cmNoRWxlbWVudCA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwpAQCAtMjY0NCw3ICsy
NjQ0LDcgQEAgaW50MzJfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFycmF5SW5kZQogaW50MzJf
dCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFycmF5SW5kZXhPZlZhbHVlRG91YmxlKEV4ZWNTdGF0
ZSogZXhlYywgQnV0dGVyZmx5KiBidXR0ZXJmbHksIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1
ZSwgaW50MzJfdCBpbmRleCkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVU
cmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKIAogICAgIEpTVmFsdWUgc2VhcmNoRWxlbWVudCA9IEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogCkBAIC0yNjY1LDcgKzI2NjUsNyBAQCBpbnQz
Ml90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXJyYXlJbmRlCiB2b2lkIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uTG9hZFZhcmFyZ3MoRXhlY1N0YXRlKiBleGVjLCBpbnQzMl90IGZpcnN0RWxlbWVu
dERlc3QsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRBcmd1bWVudHMsIHVpbnQzMl90IG9mZnNldCwg
dWludDMyX3QgbGVuZ3RoLCB1aW50MzJfdCBtYW5kYXRvcnlNaW5pbXVtKQogewogICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4
ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIEpT
VmFsdWUgYXJndW1lbnRzID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRBcmd1bWVudHMpOwogICAg
IAogICAgIGxvYWRWYXJhcmdzKGV4ZWMsIFZpcnR1YWxSZWdpc3RlcihmaXJzdEVsZW1lbnREZXN0
KSwgYXJndW1lbnRzLCBvZmZzZXQsIGxlbmd0aCk7CkBAIC0yNjg4LDE0ICsyNjg4LDE0IEBAIGRv
dWJsZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblJhbmRvbShKU0cKIAogSlNDZWxsKiBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvblN0cmluZ0Zyb21DaGFyQ29kZShFeGVjU3RhdGUqIGV4ZWMsIGludDMy
X3Qgb3AxKQogewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAg
cmV0dXJuIEpTQzo6c3RyaW5nRnJvbUNoYXJDb2RlKGV4ZWMsIG9wMSk7CiB9CiAKIEVuY29kZWRK
U1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uU3RyaW5nRnJvbUNoYXJDb2RlVW50eXBlZChF
eGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICBWTSog
dm0gPSAmZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIEpTVmFsdWUgY2hhclZhbHVlID0g
SlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgaW50MzJfdCBjaEludCA9IGNoYXJW
YWx1ZS50b1VJbnQzMihleGVjKTsKQEAgLTI3MTgsNyArMjcxOCw3IEBAIGludDY0X3QgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25Db252ZXJ0RG8KIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
TmV3UmF3T2JqZWN0KEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGludDMy
X3QgbGVuZ3RoLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52
bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKIAogICAgIGlmICghYnV0dGVy
Zmx5CiAgICAgICAgICYmIChzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgfHwgaGFzSW5k
ZXhlZFByb3BlcnRpZXMoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpKSB7CkBAIC0yNzQwLDcg
KzI3NDAsNyBAQCBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1Jhd09iamVjCiBKU0Nl
bGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3T2JqZWN0V2l0aEJ1dHRlcmZseShFeGVjU3Rh
dGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSkKIHsK
ICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVj
KTsKICAgICAKICAgICBpZiAoIWJ1dHRlcmZseSkgewogICAgICAgICBidXR0ZXJmbHkgPSBCdXR0
ZXJmbHk6OmNyZWF0ZSgKQEAgLTI3NTUsNyArMjc1NSw3IEBAIEpTQ2VsbCogSklUX09QRVJBVElP
TiBvcGVyYXRpb25OZXdPYmplY3QKIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdP
YmplY3RXaXRoQnV0dGVyZmx5V2l0aEluZGV4aW5nSGVhZGVyQW5kVmVjdG9yTGVuZ3RoKEV4ZWNT
dGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHVuc2lnbmVkIGxlbmd0aCwgQnV0dGVy
Zmx5KiBidXR0ZXJmbHkpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcih2bSwgZXhlYyk7CiAKICAgICBJbmRleGluZ0hlYWRlciBoZWFkZXI7CiAgICAg
aGVhZGVyLnNldFZlY3Rvckxlbmd0aChsZW5ndGgpOwpAQCAtMjc3Nyw3ICsyNzc3LDcgQEAgSlND
ZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld09iamVjdAogSlNDZWxsKiBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvbk5ld0FycmF5V2l0aFNwcmVhZFNsb3coRXhlY1N0YXRlKiBleGVjLCB2b2lk
KiBidWZmZXIsIHVpbnQzMl90IG51bUl0ZW1zKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEVuY29kZWRKU1ZhbHVlKiB2YWx1ZXMgPSBzdGF0
aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+KGJ1ZmZlcik7CkBAIC0yODM1LDcgKzI4MzUsNyBAQCBK
U0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3QXJyYXlXCiBKU0NlbGwqIG9wZXJhdGlv
bkNyZWF0ZUZpeGVkQXJyYXkoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7
CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgaWYgKEpT
Rml4ZWRBcnJheSogcmVzdWx0ID0gSlNGaXhlZEFycmF5Ojp0cnlDcmVhdGUodm0sIHZtLmZpeGVk
QXJyYXlTdHJ1Y3R1cmUuZ2V0KCksIGxlbmd0aCkpCkBAIC0yODQ4LDcgKzI4NDgsNyBAQCBKU0Nl
bGwqIG9wZXJhdGlvbkNyZWF0ZUZpeGVkQXJyYXkoRXhlY1N0CiBKU0NlbGwqIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uU3ByZWFkR2VuZXJpYyhFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogaXRlcmFi
bGUpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFj
ZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2
bSwgZXhlYyk7CiAKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKIApAQCAtMjg4Myw3ICsyODgzLDcgQEAgSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
blNwcmVhZEdlbgogSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblNwcmVhZEZhc3RBcnJh
eShFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogY2VsbCkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52
bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKIAogICAgIEFTU0VSVChpc0pT
QXJyYXkoY2VsbCkpOwogICAgIEpTQXJyYXkqIGFycmF5ID0ganNDYXN0PEpTQXJyYXkqPihjZWxs
KTsKQEAgLTI4OTUsNyArMjg5NSw3IEBAIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25T
cHJlYWRGYXMKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25Qcm9jZXNzVHlwZVByb2ZpbGVy
TG9nREZHKEV4ZWNTdGF0ZSogZXhlYykgCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAKICAgICB2bS50eXBlUHJvZmlsZXJMb2co
KS0+cHJvY2Vzc0xvZ0VudHJpZXModm0sICJMb2cgRnVsbCwgY2FsbGVkIGZyb20gaW5zaWRlIERG
Ry4iX3MpOwogfQpAQCAtMjkwMywyOCArMjkwMywyOCBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uUHJvY2Vzc1R5cGVQCiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
blJlc29sdmVTY29wZUZvckhvaXN0aW5nRnVuY0RlY2xJbkV2YWwoRXhlY1N0YXRlKiBleGVjLCBK
U1Njb3BlKiBzY29wZSwgVW5pcXVlZFN0cmluZ0ltcGwqIGltcGwpCiB7CiAgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7
CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgICAgIAot
ICAgIEpTVmFsdWUgcmVzb2x2ZWRTY29wZSA9IEpTU2NvcGU6OnJlc29sdmVTY29wZUZvckhvaXN0
aW5nRnVuY0RlY2xJbkV2YWwoZXhlYywgc2NvcGUsIElkZW50aWZpZXI6OmZyb21VaWQoZXhlYywg
aW1wbCkpOworICAgIEpTVmFsdWUgcmVzb2x2ZWRTY29wZSA9IEpTU2NvcGU6OnJlc29sdmVTY29w
ZUZvckhvaXN0aW5nRnVuY0RlY2xJbkV2YWwoZXhlYywgc2NvcGUsIElkZW50aWZpZXI6OmZyb21V
aWQodm0sIGltcGwpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc29sdmVkU2NvcGUp
OwogfQogICAgIAogSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblJlc29sdmVTY29wZShF
eGVjU3RhdGUqIGV4ZWMsIEpTU2NvcGUqIHNjb3BlLCBVbmlxdWVkU3RyaW5nSW1wbCogaW1wbCkK
IHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBl
eGVjKTsKIAotICAgIEpTT2JqZWN0KiByZXNvbHZlZFNjb3BlID0gSlNTY29wZTo6cmVzb2x2ZShl
eGVjLCBzY29wZSwgSWRlbnRpZmllcjo6ZnJvbVVpZChleGVjLCBpbXBsKSk7CisgICAgSlNPYmpl
Y3QqIHJlc29sdmVkU2NvcGUgPSBKU1Njb3BlOjpyZXNvbHZlKGV4ZWMsIHNjb3BlLCBJZGVudGlm
aWVyOjpmcm9tVWlkKHZtLCBpbXBsKSk7CiAgICAgcmV0dXJuIHJlc29sdmVkU2NvcGU7CiB9CiAK
IEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0RHluYW1pY1ZhcihFeGVj
U3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBzY29wZSwgVW5pcXVlZFN0cmluZ0ltcGwqIGltcGwsIHVu
c2lnbmVkIGdldFB1dEluZm9CaXRzKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxG
cmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgSWRlbnRpZmllciBpZGVudCA9IElkZW50aWZpZXI6
OmZyb21VaWQoZXhlYywgaW1wbCk7CisgICAgSWRlbnRpZmllciBpZGVudCA9IElkZW50aWZpZXI6
OmZyb21VaWQodm0sIGltcGwpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBK
U1ZhbHVlOjplbmNvZGUoc2NvcGUtPmdldFByb3BlcnR5U2xvdChleGVjLCBpZGVudCwgWyZdIChi
b29sIGZvdW5kLCBQcm9wZXJ0eVNsb3QmIHNsb3QpIC0+IEpTVmFsdWUgewogICAgICAgICBpZiAo
IWZvdW5kKSB7CiAgICAgICAgICAgICBHZXRQdXRJbmZvIGdldFB1dEluZm8oZ2V0UHV0SW5mb0Jp
dHMpOwpAQCAtMjk1MSw3ICsyOTUxLDcgQEAgQUxXQVlTX0lOTElORSBzdGF0aWMgdm9pZCBwdXRE
eW5hbWljVmFyKAogewogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogCi0gICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBJZGVudGlmaWVyOjpmcm9tVWlk
KGV4ZWMsIGltcGwpOworICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gSWRlbnRpZmllcjo6
ZnJvbVVpZCh2bSwgaW1wbCk7CiAgICAgR2V0UHV0SW5mbyBnZXRQdXRJbmZvKGdldFB1dEluZm9C
aXRzKTsKICAgICBib29sIGhhc1Byb3BlcnR5ID0gc2NvcGUtPmhhc1Byb3BlcnR5KGV4ZWMsIGlk
ZW50KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHZvaWQoKSk7CkBAIC0y
OTgwLDcgKzI5ODAsNyBAQCBBTFdBWVNfSU5MSU5FIHN0YXRpYyB2b2lkIHB1dER5bmFtaWNWYXIo
CiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0RHluYW1pY1ZhclN0cmljdChFeGVjU3Rh
dGUqIGV4ZWMsIEpTT2JqZWN0KiBzY29wZSwgRW5jb2RlZEpTVmFsdWUgdmFsdWUsIFVuaXF1ZWRT
dHJpbmdJbXBsKiBpbXBsLCB1bnNpZ25lZCBnZXRQdXRJbmZvQml0cykKIHsKICAgICBWTSYgdm0g
PSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVj
KTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICBjb25z
dGV4cHIgYm9vbCBpc1N0cmljdE1vZGUgPSB0cnVlOwogICAgIHJldHVybiBwdXREeW5hbWljVmFy
KGV4ZWMsIHZtLCBzY29wZSwgdmFsdWUsIGltcGwsIGdldFB1dEluZm9CaXRzLCBpc1N0cmljdE1v
ZGUpOwogfQpAQCAtMjk4OCw3ICsyOTg4LDcgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
blB1dER5bmFtaWNWYQogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dER5bmFtaWNWYXJO
b25TdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogc2NvcGUsIEVuY29kZWRKU1ZhbHVl
IHZhbHVlLCBVbmlxdWVkU3RyaW5nSW1wbCogaW1wbCwgdW5zaWduZWQgZ2V0UHV0SW5mb0JpdHMp
CiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIg
dHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwg
ZXhlYyk7CiAgICAgY29uc3RleHByIGJvb2wgaXNTdHJpY3RNb2RlID0gZmFsc2U7CiAgICAgcmV0
dXJuIHB1dER5bmFtaWNWYXIoZXhlYywgdm0sIHNjb3BlLCB2YWx1ZSwgaW1wbCwgZ2V0UHV0SW5m
b0JpdHMsIGlzU3RyaWN0TW9kZSk7CiB9CkBAIC0yOTk2LDcgKzI5OTYsNyBAQCB2b2lkIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uUHV0RHluYW1pY1ZhCiBpbnQzMl90IEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uTWFwSGFzaChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGlucHV0KQogewog
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMp
OwogCiAgICAgcmV0dXJuIGpzTWFwSGFzaChleGVjLCB2bSwgSlNWYWx1ZTo6ZGVjb2RlKGlucHV0
KSk7CiB9CkBAIC0zMDA0LDcgKzMwMDQsNyBAQCBpbnQzMl90IEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uTWFwSGFzaChFCiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSlNNYXBGaW5kQnVj
a2V0KEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBtYXAsIEVuY29kZWRKU1ZhbHVlIGtleSwgaW50
MzJfdCBoYXNoKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIodm0sIGV4ZWMpOwogICAgIEpTTWFwOjpCdWNrZXRUeXBlKiogYnVja2V0ID0ganNDYXN0
PEpTTWFwKj4obWFwKS0+ZmluZEJ1Y2tldChleGVjLCBKU1ZhbHVlOjpkZWNvZGUoa2V5KSwgaGFz
aCk7CiAgICAgaWYgKCFidWNrZXQpCiAgICAgICAgIHJldHVybiB2bS5zZW50aW5lbE1hcEJ1Y2tl
dCgpOwpAQCAtMzAxNCw3ICszMDE0LDcgQEAgSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
bkpTTWFwRmluZAogSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkpTU2V0RmluZEJ1Y2tl
dChFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogbWFwLCBFbmNvZGVkSlNWYWx1ZSBrZXksIGludDMy
X3QgaGFzaCkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKHZtLCBleGVjKTsKICAgICBKU1NldDo6QnVja2V0VHlwZSoqIGJ1Y2tldCA9IGpzQ2FzdDxK
U1NldCo+KG1hcCktPmZpbmRCdWNrZXQoZXhlYywgSlNWYWx1ZTo6ZGVjb2RlKGtleSksIGhhc2gp
OwogICAgIGlmICghYnVja2V0KQogICAgICAgICByZXR1cm4gdm0uc2VudGluZWxTZXRCdWNrZXQo
KTsKQEAgLTMwMjQsNyArMzAyNCw3IEBAIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25K
U1NldEZpbmQKIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25TZXRBZGQoRXhlY1N0YXRl
KiBleGVjLCBKU0NlbGwqIHNldCwgRW5jb2RlZEpTVmFsdWUga2V5LCBpbnQzMl90IGhhc2gpCiB7
CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhl
Yyk7CiAgICAgYXV0byogYnVja2V0ID0ganNDYXN0PEpTU2V0Kj4oc2V0KS0+YWRkTm9ybWFsaXpl
ZChleGVjLCBKU1ZhbHVlOjpkZWNvZGUoa2V5KSwgSlNWYWx1ZSgpLCBoYXNoKTsKICAgICBpZiAo
IWJ1Y2tldCkKICAgICAgICAgcmV0dXJuIHZtLnNlbnRpbmVsU2V0QnVja2V0KCk7CkBAIC0zMDM0
LDcgKzMwMzQsNyBAQCBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uU2V0QWRkKEV4CiBK
U0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTWFwU2V0KEV4ZWNTdGF0ZSogZXhlYywgSlND
ZWxsKiBtYXAsIEVuY29kZWRKU1ZhbHVlIGtleSwgRW5jb2RlZEpTVmFsdWUgdmFsdWUsIGludDMy
X3QgaGFzaCkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKHZtLCBleGVjKTsKICAgICBhdXRvKiBidWNrZXQgPSBqc0Nhc3Q8SlNNYXAqPihtYXApLT5h
ZGROb3JtYWxpemVkKGV4ZWMsIEpTVmFsdWU6OmRlY29kZShrZXkpLCBKU1ZhbHVlOjpkZWNvZGUo
dmFsdWUpLCBoYXNoKTsKICAgICBpZiAoIWJ1Y2tldCkKICAgICAgICAgcmV0dXJuIHZtLnNlbnRp
bmVsTWFwQnVja2V0KCk7CkBAIC0zMDQ0LDI4ICszMDQ0LDI4IEBAIEpTQ2VsbCogSklUX09QRVJB
VElPTiBvcGVyYXRpb25NYXBTZXQoRXgKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25XZWFr
U2V0QWRkKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBzZXQsIEpTQ2VsbCoga2V5LCBpbnQzMl90
IGhhc2gpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVU
cmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cih2bSwgZXhlYyk7CiAgICAganNDYXN0PEpTV2Vha1NldCo+KHNldCktPmFkZCh2bSwgYXNPYmpl
Y3Qoa2V5KSwgSlNWYWx1ZSgpLCBoYXNoKTsKIH0KIAogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbldlYWtNYXBTZXQoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIG1hcCwgSlNDZWxsKiBrZXks
IEVuY29kZWRKU1ZhbHVlIHZhbHVlLCBpbnQzMl90IGhhc2gpCiB7CiAgICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7Cisg
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAganNDYXN0PEpT
V2Vha01hcCo+KG1hcCktPmFkZCh2bSwgYXNPYmplY3Qoa2V5KSwgSlNWYWx1ZTo6ZGVjb2RlKHZh
bHVlKSwgaGFzaCk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
R2V0UHJvdG90eXBlT2ZPYmplY3QoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iamVj
dCkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZt
LCBleGVjKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRoaXNPYmplY3QtPmdldFByb3Rv
dHlwZSh2bSwgZXhlYykpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbkdldFByb3RvdHlwZU9mKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFZhbHVlKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIodm0sIGV4ZWMpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
IAogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSku
dG9UaGlzKGV4ZWMsIFN0cmljdE1vZGUpOwpAQCAtMzA4Nyw3ICszMDg3LDcgQEAgRW5jb2RlZEpT
VmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZQogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvblRocm93REZHKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgdmFsdWVUb1Rocm93
KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0s
IGV4ZWMpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBz
Y29wZS50aHJvd0V4Y2VwdGlvbihleGVjLCBKU1ZhbHVlOjpkZWNvZGUodmFsdWVUb1Rocm93KSk7
CiB9CkBAIC0zMDk1LDcgKzMwOTUsNyBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVGhy
b3dERkcoRXhlCiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVGhyb3dTdGF0aWNFcnJvcihF
eGVjU3RhdGUqIGV4ZWMsIEpTU3RyaW5nKiBtZXNzYWdlLCB1aW50MzJfdCBlcnJvclR5cGUpCiB7
CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhl
Yyk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFN0cmlu
ZyBlcnJvck1lc3NhZ2UgPSBtZXNzYWdlLT52YWx1ZShleGVjKTsKICAgICBzY29wZS50aHJvd0V4
Y2VwdGlvbihleGVjLCBjcmVhdGVFcnJvcihleGVjLCBzdGF0aWNfY2FzdDxFcnJvclR5cGU+KGVy
cm9yVHlwZSksIGVycm9yTWVzc2FnZSkpOwpAQCAtMzEwNSw3ICszMTA1LDcgQEAgZXh0ZXJuICJD
IiB2b2lkIEpJVF9PUEVSQVRJT04gdHJpZ2dlclJlbwogewogICAgIC8vIEl0J3Mgc29ydCBvZiBw
cmVmZXJhYmxlIHRoYXQgd2UgZG9uJ3QgR0Mgd2hpbGUgaW4gaGVyZS4gQW55d2F5cywgZG9pbmcg
c28gd291bGRuJ3QKICAgICAvLyByZWFsbHkgYmUgcHJvZml0YWJsZS4KLSAgICBEZWZlckdDRm9y
QVdoaWxlIGRlZmVyR0MoY29kZUJsb2NrLT52bSgpLT5oZWFwKTsKKyAgICBEZWZlckdDRm9yQVdo
aWxlIGRlZmVyR0MoY29kZUJsb2NrLT52bSgpLmhlYXApOwogICAgIAogICAgIHNhbml0aXplU3Rh
Y2tGb3JWTShjb2RlQmxvY2stPnZtKCkpOwogCkBAIC0zMTc4LDcgKzMxNzgsNyBAQCBzdGF0aWMg
Ym9vbCBzaG91bGRUcmlnZ2VyRlRMQ29tcGlsZShDb2RlCiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
LXN0YXRpYyB2b2lkIHRyaWdnZXJGVExSZXBsYWNlbWVudENvbXBpbGUoVk0qIHZtLCBDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgSklUQ29kZSogaml0Q29kZSkKK3N0YXRpYyB2b2lkIHRyaWdnZXJGVExS
ZXBsYWNlbWVudENvbXBpbGUoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUQ29kZSog
aml0Q29kZSkKIHsKICAgICBpZiAoY29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEdsb2JhbENvZGUp
IHsKICAgICAgICAgLy8gR2xvYmFsIGNvZGUgcnVucyBvbmNlLCBzbyB3ZSBkb24ndCB3YW50IHRv
IGRvIGFueXRoaW5nLiBXZSBkb24ndCB3YW50IHRvIGRlZmVyIGluZGVmaW5pdGVseSwKQEAgLTMx
OTEsNyArMzE5MSw3IEBAIHN0YXRpYyB2b2lkIHRyaWdnZXJGVExSZXBsYWNlbWVudENvbXBpbGUK
ICAgICBXb3JrbGlzdDo6U3RhdGUgd29ya2xpc3RTdGF0ZTsKICAgICBpZiAoV29ya2xpc3QqIHdv
cmtsaXN0ID0gZXhpc3RpbmdHbG9iYWxGVExXb3JrbGlzdE9yTnVsbCgpKSB7CiAgICAgICAgIHdv
cmtsaXN0U3RhdGUgPSB3b3JrbGlzdC0+Y29tcGxldGVBbGxSZWFkeVBsYW5zRm9yVk0oCi0gICAg
ICAgICAgICAqdm0sIENvbXBpbGF0aW9uS2V5KGNvZGVCbG9jay0+YmFzZWxpbmVWZXJzaW9uKCks
IEZUTE1vZGUpKTsKKyAgICAgICAgICAgIHZtLCBDb21waWxhdGlvbktleShjb2RlQmxvY2stPmJh
c2VsaW5lVmVyc2lvbigpLCBGVExNb2RlKSk7CiAgICAgfSBlbHNlCiAgICAgICAgIHdvcmtsaXN0
U3RhdGUgPSBXb3JrbGlzdDo6Tm90S25vd247CiAgICAgCkBAIC0zMjIyLDcgKzMyMjIsNyBAQCBz
dGF0aWMgdm9pZCB0cmlnZ2VyRlRMUmVwbGFjZW1lbnRDb21waWxlCiAgICAgQ09ERUJMT0NLX0xP
R19FVkVOVChjb2RlQmxvY2ssICJ0cmlnZ2VyRlRMUmVwbGFjZW1lbnQiLCAoKSk7CiAgICAgLy8g
V2UgbmVlZCB0byBjb21waWxlIHRoZSBjb2RlLgogICAgIGNvbXBpbGUoCi0gICAgICAgICp2bSwg
Y29kZUJsb2NrLT5uZXdSZXBsYWNlbWVudCgpLCBjb2RlQmxvY2ssIEZUTE1vZGUsIFVJTlRfTUFY
LAorICAgICAgICB2bSwgY29kZUJsb2NrLT5uZXdSZXBsYWNlbWVudCgpLCBjb2RlQmxvY2ssIEZU
TE1vZGUsIFVJTlRfTUFYLAogICAgICAgICBPcGVyYW5kczxPcHRpb25hbDxKU1ZhbHVlPj4oKSwg
VG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6OmNyZWF0ZSgpKTsKIAogICAgIC8vIElm
IHdlIHJlYWNoZWQgaGVyZSwgdGhlIGNvdW50ZXIgaGFzIG5vdCBiZSByZXNldC4gRG8gdGhhdCBu
b3cuCkBAIC0zMjMyLDkgKzMyMzIsOSBAQCBzdGF0aWMgdm9pZCB0cmlnZ2VyRlRMUmVwbGFjZW1l
bnRDb21waWxlCiAKIHZvaWQgSklUX09QRVJBVElPTiB0cmlnZ2VyVGllclVwTm93KEV4ZWNTdGF0
ZSogZXhlYykKIHsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBleGVj
LT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwotICAg
IERlZmVyR0NGb3JBV2hpbGUgZGVmZXJHQyh2bS0+aGVhcCk7CisgICAgRGVmZXJHQ0ZvckFXaGls
ZSBkZWZlckdDKHZtLmhlYXApOwogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29k
ZUJsb2NrKCk7CiAgICAgCiAgICAgc2FuaXRpemVTdGFja0ZvclZNKHZtKTsKQEAgLTMyNzcsMTQg
KzMyNzcsMTQgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIHRyaWdnZXJUaWVyVXBOb3coRXhlYwogCiBz
dGF0aWMgY2hhciogdGllclVwQ29tbW9uKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgb3JpZ2lu
Qnl0ZWNvZGVJbmRleCwgYm9vbCBjYW5PU1JFbnRlckhlcmUpCiB7Ci0gICAgVk0qIHZtID0gJmV4
ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBDb2RlQmxvY2sqIGNvZGVC
bG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOwogCiAgICAgLy8gUmVzb2x2ZSBhbnkgcGVuZGluZyBw
bGFuIGZvciBPU1IgRW50ZXIgb24gdGhpcyBmdW5jdGlvbi4KICAgICBXb3JrbGlzdDo6U3RhdGUg
d29ya2xpc3RTdGF0ZTsKICAgICBpZiAoV29ya2xpc3QqIHdvcmtsaXN0ID0gZXhpc3RpbmdHbG9i
YWxGVExXb3JrbGlzdE9yTnVsbCgpKSB7CiAgICAgICAgIHdvcmtsaXN0U3RhdGUgPSB3b3JrbGlz
dC0+Y29tcGxldGVBbGxSZWFkeVBsYW5zRm9yVk0oCi0gICAgICAgICAgICAqdm0sIENvbXBpbGF0
aW9uS2V5KGNvZGVCbG9jay0+YmFzZWxpbmVWZXJzaW9uKCksIEZUTEZvck9TUkVudHJ5TW9kZSkp
OworICAgICAgICAgICAgdm0sIENvbXBpbGF0aW9uS2V5KGNvZGVCbG9jay0+YmFzZWxpbmVWZXJz
aW9uKCksIEZUTEZvck9TUkVudHJ5TW9kZSkpOwogICAgIH0gZWxzZQogICAgICAgICB3b3JrbGlz
dFN0YXRlID0gV29ya2xpc3Q6Ok5vdEtub3duOwogCkBAIC0zNDY0LDcgKzM0NjQsNyBAQCBzdGF0
aWMgY2hhciogdGllclVwQ29tbW9uKEV4ZWNTdGF0ZSogZXhlCiAKICAgICBDT0RFQkxPQ0tfTE9H
X0VWRU5UKGNvZGVCbG9jaywgInRyaWdnZXJGVExPU1IiLCAoKSk7CiAgICAgQ29tcGlsYXRpb25S
ZXN1bHQgZm9yRW50cnlSZXN1bHQgPSBjb21waWxlKAotICAgICAgICAqdm0sIHJlcGxhY2VtZW50
Q29kZUJsb2NrLCBjb2RlQmxvY2ssIEZUTEZvck9TUkVudHJ5TW9kZSwgb3JpZ2luQnl0ZWNvZGVJ
bmRleCwKKyAgICAgICAgdm0sIHJlcGxhY2VtZW50Q29kZUJsb2NrLCBjb2RlQmxvY2ssIEZUTEZv
ck9TUkVudHJ5TW9kZSwgb3JpZ2luQnl0ZWNvZGVJbmRleCwKICAgICAgICAgbXVzdEhhbmRsZVZh
bHVlcywgVG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6Y3JlYXRl
KHRyaWdnZXJBZGRyZXNzKSk7CiAKICAgICBpZiAoaml0Q29kZS0+bmV2ZXJFeGVjdXRlZEVudHJ5
KQpAQCAtMzQ5Myw5ICszNDkzLDkgQEAgc3RhdGljIGNoYXIqIHRpZXJVcENvbW1vbihFeGVjU3Rh
dGUqIGV4ZQogCiB2b2lkIEpJVF9PUEVSQVRJT04gdHJpZ2dlclRpZXJVcE5vd0luTG9vcChFeGVj
U3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCiB7Ci0gICAgVk0qIHZtID0gJmV4
ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVU
cmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLSAgICBEZWZlckdDRm9yQVdoaWxlIGRlZmVyR0Modm0t
PmhlYXApOworICAgIERlZmVyR0NGb3JBV2hpbGUgZGVmZXJHQyh2bS5oZWFwKTsKICAgICBDb2Rl
QmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOwogCiAgICAgc2FuaXRpemVTdGFj
a0ZvclZNKHZtKTsKQEAgLTM1MjcsOSArMzUyNyw5IEBAIHZvaWQgSklUX09QRVJBVElPTiB0cmln
Z2VyVGllclVwTm93SW5Mb28KIAogY2hhciogSklUX09QRVJBVElPTiB0cmlnZ2VyT1NSRW50cnlO
b3coRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KQogewotICAgIFZNKiB2
bSA9ICZleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0gICAgRGVmZXJHQ0ZvckFXaGlsZSBkZWZl
ckdDKHZtLT5oZWFwKTsKKyAgICBEZWZlckdDRm9yQVdoaWxlIGRlZmVyR0Modm0uaGVhcCk7CiAg
ICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKIAogICAgIHNhbml0
aXplU3RhY2tGb3JWTSh2bSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Bs
YW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5j
cHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxh
bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMzcsNyArMTM3LDcgQEAgUGxhbjo6UGxhbihDb2Rl
QmxvY2sqIHBhc3NlZENvZGVCbG9jaywgQwogICAgIENvbXBpbGF0aW9uTW9kZSBtb2RlLCB1bnNp
Z25lZCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgsCiAgICAgY29uc3QgT3BlcmFuZHM8T3B0aW9uYWw8
SlNWYWx1ZT4+JiBtdXN0SGFuZGxlVmFsdWVzKQogICAgIDogbV9tb2RlKG1vZGUpCi0gICAgLCBt
X3ZtKHBhc3NlZENvZGVCbG9jay0+dm0oKSkKKyAgICAsIG1fdm0oJnBhc3NlZENvZGVCbG9jay0+
dm0oKSkKICAgICAsIG1fY29kZUJsb2NrKHBhc3NlZENvZGVCbG9jaykKICAgICAsIG1fcHJvZmls
ZWRERkdDb2RlQmxvY2socHJvZmlsZWRERkdDb2RlQmxvY2spCiAgICAgLCBtX211c3RIYW5kbGVW
YWx1ZXMobXVzdEhhbmRsZVZhbHVlcykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMjQ5MTI4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEt
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMTEgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CkBAIC01ODgsNyArNTg4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwo
Tm9kZSogbm9kZQogICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25FeGVjdXRhYmxlID0g
bnVsbHB0cjsKICAgICBpZiAoaXNEaXJlY3QpIHsKICAgICAgICAgZXhlY3V0YWJsZSA9IG5vZGUt
PmNhc3RPcGVyYW5kPEV4ZWN1dGFibGVCYXNlKj4oKTsKLSAgICAgICAgZnVuY3Rpb25FeGVjdXRh
YmxlID0ganNEeW5hbWljQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPigqbV9qaXQudm0oKSwgZXhl
Y3V0YWJsZSk7CisgICAgICAgIGZ1bmN0aW9uRXhlY3V0YWJsZSA9IGpzRHluYW1pY0Nhc3Q8RnVu
Y3Rpb25FeGVjdXRhYmxlKj4odm0oKSwgZXhlY3V0YWJsZSk7CiAgICAgfQogICAgIAogICAgIHVu
c2lnbmVkIG51bVBhc3NlZEFyZ3MgPSAwOwpAQCAtNjIyLDcgKzYyMiw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUKICAgICAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgICAgICBpbmxpbmVDYWxsRnJhbWUgPSBub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2Fs
bEZyYW1lKCk7CiAgICAgICAgICAgICAvLyBlbWl0U2V0dXBWYXJhcmdzRnJhbWVGYXN0Q2FzZSBt
b2RpZmllcyB0aGUgc3RhY2sgcG9pbnRlciBpZiBpdCBzdWNjZWVkcy4KLSAgICAgICAgICAgIGVt
aXRTZXR1cFZhcmFyZ3NGcmFtZUZhc3RDYXNlKCptX2ppdC52bSgpLCBtX2ppdCwgc2NyYXRjaEdQ
UjIsIHNjcmF0Y2hHUFIxLCBzY3JhdGNoR1BSMiwgc2NyYXRjaEdQUjMsIGlubGluZUNhbGxGcmFt
ZSwgZGF0YS0+Zmlyc3RWYXJBcmdPZmZzZXQsIHNsb3dDYXNlKTsKKyAgICAgICAgICAgIGVtaXRT
ZXR1cFZhcmFyZ3NGcmFtZUZhc3RDYXNlKHZtKCksIG1faml0LCBzY3JhdGNoR1BSMiwgc2NyYXRj
aEdQUjEsIHNjcmF0Y2hHUFIyLCBzY3JhdGNoR1BSMywgaW5saW5lQ2FsbEZyYW1lLCBkYXRhLT5m
aXJzdFZhckFyZ09mZnNldCwgc2xvd0Nhc2UpOwogICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1
bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKICAgICAgICAgICAgIHNsb3dDYXNlLmxpbmsoJm1faml0
KTsKICAgICAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVGhyb3dTdGFja092ZXJmbG93
Rm9yVmFyYXJncyk7CkBAIC04MTcsNyArODE3LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1p
dENhbGwoTm9kZSogbm9kZQogICAgICAgICBtX2ppdC5hZGRQdHIoVHJ1c3RlZEltbTMyKHJlcXVp
cmVkQnl0ZXMpLCBKSVRDb21waWxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgICAgICBt
X2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OmNhbGxlZUZyYW1lU2xvdChDYWxsRnJhbWVTbG90Ojpj
YWxsZWUpLndpdGhPZmZzZXQoUGF5bG9hZE9mZnNldCksIEdQUkluZm86OnJlZ1QwKTsKICAgICAg
ICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpjYWxsZWVGcmFtZVNsb3QoQ2FsbEZyYW1lU2xv
dDo6Y2FsbGVlKS53aXRoT2Zmc2V0KFRhZ09mZnNldCksIEdQUkluZm86OnJlZ1QxKTsKLSAgICAg
ICAgbV9qaXQuZW1pdER1bWJWaXJ0dWFsQ2FsbCgqbV9qaXQudm0oKSwgaW5mbyk7CisgICAgICAg
IG1faml0LmVtaXREdW1iVmlydHVhbENhbGwodm0oKSwgaW5mbyk7CiAgICAgICAgIAogICAgICAg
ICBkb25lLmxpbmsoJm1faml0KTsKICAgICAgICAgc2V0UmVzdWx0QW5kUmVzZXRTdGFjaygpOwpA
QCAtMTU3MCw3ICsxNTcwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUxvZ2ljYWxO
b3QoTgogICAgICAgICBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9ICFt
YXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludElzU3RpbGxWYWxpZCgpOwogICAgICAgICBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RG
b3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKICAgICAgICAgYm9vbCBuZWdhdGVSZXN1bHQgPSB0
cnVlOwotICAgICAgICBtX2ppdC5lbWl0Q29udmVydFZhbHVlVG9Cb29sZWFuKCptX2ppdC52bSgp
LCBhcmcxLmpzVmFsdWVSZWdzKCksIHJlc3VsdEdQUiwgdGVtcC5ncHIoKSwgdmFsdWVGUFIuZnBy
KCksIHRlbXBGUFIuZnByKCksIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgZ2xv
YmFsT2JqZWN0LCBuZWdhdGVSZXN1bHQpOworICAgICAgICBtX2ppdC5lbWl0Q29udmVydFZhbHVl
VG9Cb29sZWFuKHZtKCksIGFyZzEuanNWYWx1ZVJlZ3MoKSwgcmVzdWx0R1BSLCB0ZW1wLmdwcigp
LCB2YWx1ZUZQUi5mcHIoKSwgdGVtcEZQUi5mcHIoKSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkLCBnbG9iYWxPYmplY3QsIG5lZ2F0ZVJlc3VsdCk7CiAgICAgICAgIGJvb2xlYW5S
ZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTE3MTUs
NyArMTcxNSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRCcmFuY2goTm9kZSogbm8KIAog
ICAgICAgICBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9ICFtYXNxdWVy
YWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludElzU3RpbGxWYWxpZCgpOwogICAgICAgICBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3Iobm9k
ZS0+b3JpZ2luLnNlbWFudGljKTsKLSAgICAgICAgYXV0byBmYWxzZXkgPSBtX2ppdC5icmFuY2hJ
ZkZhbHNleSgqbV9qaXQudm0oKSwgdmFsdWVSZWdzLCByZXN1bHRHUFIsIHRlbXAuZ3ByKCksIHZh
bHVlRlBSLmZwcigpLCB0ZW1wRlBSLmZwcigpLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQsIGdsb2JhbE9iamVjdCk7CisgICAgICAgIGF1dG8gZmFsc2V5ID0gbV9qaXQuYnJhbmNo
SWZGYWxzZXkodm0oKSwgdmFsdWVSZWdzLCByZXN1bHRHUFIsIHRlbXAuZ3ByKCksIHZhbHVlRlBS
LmZwcigpLCB0ZW1wRlBSLmZwcigpLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQs
IGdsb2JhbE9iamVjdCk7CiAgICAgICAgIGFkZEJyYW5jaChmYWxzZXksIG5vdFRha2VuKTsKICAg
ICAgICAganVtcCh0YWtlbiwgRm9yY2VKdW1wKTsKIApAQCAtMzkzOSw4ICszOTM5LDggQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBtX2ppdC5hZGQz
MihzdHJ1Y3R1cmVJREdQUiwgaGFzaEdQUik7CiAgICAgICAgIG1faml0LmFuZDMyKFRydXN0ZWRJ
bW0zMihIYXNPd25Qcm9wZXJ0eUNhY2hlOjptYXNrKSwgaGFzaEdQUik7CiAgICAgICAgIG1faml0
Lm11bDMyKFRydXN0ZWRJbW0zMihzaXplb2YoSGFzT3duUHJvcGVydHlDYWNoZTo6RW50cnkpKSwg
aGFzaEdQUiwgaGFzaEdQUik7Ci0gICAgICAgIEFTU0VSVChtX2ppdC52bSgpLT5oYXNPd25Qcm9w
ZXJ0eUNhY2hlKCkpOwotICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIobV9qaXQudm0o
KS0+aGFzT3duUHJvcGVydHlDYWNoZSgpKSwgdGVtcEdQUik7CisgICAgICAgIEFTU0VSVCh2bSgp
Lmhhc093blByb3BlcnR5Q2FjaGUoKSk7CisgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0
cih2bSgpLmhhc093blByb3BlcnR5Q2FjaGUoKSksIHRlbXBHUFIpOwogICAgICAgICBzbG93UGF0
aC5hcHBlbmQobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgCiAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHRlbXBHUFIsIGhhc2hHUFIsIE1hY3Jv
QXNzZW1ibGVyOjpUaW1lc09uZSwgSGFzT3duUHJvcGVydHlDYWNoZTo6RW50cnk6Om9mZnNldE9m
SW1wbCgpKSwgaW1wbEdQUikpOwogICAgICAgICBtX2ppdC5sb2FkOChNYWNyb0Fzc2VtYmxlcjo6
QmFzZUluZGV4KHRlbXBHUFIsIGhhc2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc09uZSwgSGFz
T3duUHJvcGVydHlDYWNoZTo6RW50cnk6Om9mZnNldE9mUmVzdWx0KCkpLCByZXN1bHRHUFIpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
NjQuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDcsNyArMjQ3LDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVOb25QZQogICAgICAgICBHUFJSZWcg
bG9jYWxHbG9iYWxPYmplY3RHUFIgPSBsb2NhbEdsb2JhbE9iamVjdC5ncHIoKTsKICAgICAgICAg
R1BSUmVnIHJlbW90ZUdsb2JhbE9iamVjdEdQUiA9IHJlbW90ZUdsb2JhbE9iamVjdC5ncHIoKTsK
ICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2ppdC5ncmFw
aCgpLCBtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihtX2N1cnJlbnROb2RlLT5vcmlnaW4u
c2VtYW50aWMpKSwgbG9jYWxHbG9iYWxPYmplY3RHUFIpOwotICAgICAgICBtX2ppdC5lbWl0TG9h
ZFN0cnVjdHVyZSgqbV9qaXQudm0oKSwgYXJnR1BSLCByZXN1bHRHUFIsIHNjcmF0Y2guZ3ByKCkp
OworICAgICAgICBtX2ppdC5lbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCBhcmdHUFIsIHJlc3VsdEdQ
Uiwgc2NyYXRjaC5ncHIoKSk7CiAgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFk
ZHJlc3MocmVzdWx0R1BSLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVtb3Rl
R2xvYmFsT2JqZWN0R1BSKTsKICAgICAgICAgbV9qaXQuY29tcGFyZVB0cihKSVRDb21waWxlcjo6
RXF1YWwsIGxvY2FsR2xvYmFsT2JqZWN0R1BSLCByZW1vdGVHbG9iYWxPYmplY3RHUFIsIHJlc3Vs
dEdQUik7CiAgICAgICAgIGRvbmUuYXBwZW5kKG1faml0Lmp1bXAoKSk7CkBAIC0zMDAsNyArMzAw
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaAogICAgICAgICBH
UFJSZWcgbG9jYWxHbG9iYWxPYmplY3RHUFIgPSBsb2NhbEdsb2JhbE9iamVjdC5ncHIoKTsKICAg
ICAgICAgR1BSUmVnIHJlbW90ZUdsb2JhbE9iamVjdEdQUiA9IHJlbW90ZUdsb2JhbE9iamVjdC5n
cHIoKTsKICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2pp
dC5ncmFwaCgpLCBtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihtX2N1cnJlbnROb2RlLT5v
cmlnaW4uc2VtYW50aWMpKSwgbG9jYWxHbG9iYWxPYmplY3RHUFIpOwotICAgICAgICBtX2ppdC5l
bWl0TG9hZFN0cnVjdHVyZSgqbV9qaXQudm0oKSwgYXJnR1BSLCByZXN1bHRHUFIsIHNjcmF0Y2gu
Z3ByKCkpOworICAgICAgICBtX2ppdC5lbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCBhcmdHUFIsIHJl
c3VsdEdQUiwgc2NyYXRjaC5ncHIoKSk7CiAgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGls
ZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwg
cmVtb3RlR2xvYmFsT2JqZWN0R1BSKTsKICAgICAgICAgYnJhbmNoUHRyKEpJVENvbXBpbGVyOjpF
cXVhbCwgbG9jYWxHbG9iYWxPYmplY3RHUFIsIHJlbW90ZUdsb2JhbE9iamVjdEdQUiwgdGFrZW4p
OwogCkBAIC01NDcsNyArNTQ3LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9k
ZSogbm9kZQogICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25FeGVjdXRhYmxlID0gbnVs
bHB0cjsKICAgICBpZiAoaXNEaXJlY3QpIHsKICAgICAgICAgZXhlY3V0YWJsZSA9IG5vZGUtPmNh
c3RPcGVyYW5kPEV4ZWN1dGFibGVCYXNlKj4oKTsKLSAgICAgICAgZnVuY3Rpb25FeGVjdXRhYmxl
ID0ganNEeW5hbWljQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPigqbV9qaXQudm0oKSwgZXhlY3V0
YWJsZSk7CisgICAgICAgIGZ1bmN0aW9uRXhlY3V0YWJsZSA9IGpzRHluYW1pY0Nhc3Q8RnVuY3Rp
b25FeGVjdXRhYmxlKj4odm0oKSwgZXhlY3V0YWJsZSk7CiAgICAgfQogICAgIAogICAgIHVuc2ln
bmVkIG51bVBhc3NlZEFyZ3MgPSAwOwpAQCAtNTgxLDcgKzU4MSw3IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAg
ICAgICBpbmxpbmVDYWxsRnJhbWUgPSBub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZy
YW1lKCk7CiAgICAgICAgICAgICAvLyBlbWl0U2V0dXBWYXJhcmdzRnJhbWVGYXN0Q2FzZSBtb2Rp
ZmllcyB0aGUgc3RhY2sgcG9pbnRlciBpZiBpdCBzdWNjZWVkcy4KLSAgICAgICAgICAgIGVtaXRT
ZXR1cFZhcmFyZ3NGcmFtZUZhc3RDYXNlKCptX2ppdC52bSgpLCBtX2ppdCwgc2NyYXRjaEdQUjIs
IHNjcmF0Y2hHUFIxLCBzY3JhdGNoR1BSMiwgc2NyYXRjaEdQUjMsIGlubGluZUNhbGxGcmFtZSwg
ZGF0YS0+Zmlyc3RWYXJBcmdPZmZzZXQsIHNsb3dDYXNlKTsKKyAgICAgICAgICAgIGVtaXRTZXR1
cFZhcmFyZ3NGcmFtZUZhc3RDYXNlKHZtKCksIG1faml0LCBzY3JhdGNoR1BSMiwgc2NyYXRjaEdQ
UjEsIHNjcmF0Y2hHUFIyLCBzY3JhdGNoR1BSMywgaW5saW5lQ2FsbEZyYW1lLCBkYXRhLT5maXJz
dFZhckFyZ09mZnNldCwgc2xvd0Nhc2UpOwogICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAg
ZG9uZSA9IG1faml0Lmp1bXAoKTsKICAgICAgICAgICAgIHNsb3dDYXNlLmxpbmsoJm1faml0KTsK
ICAgICAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVGhyb3dTdGFja092ZXJmbG93Rm9y
VmFyYXJncyk7CkBAIC03NjcsNyArNzY3LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENh
bGwoTm9kZSogbm9kZQogICAgICAgICAvLyBUaGlzIGlzIHRoZSBwYXJ0IHdoZXJlIHdlIG1lYW50
IHRvIG1ha2UgYSBub3JtYWwgY2FsbC4gT29wcy4KICAgICAgICAgbV9qaXQuYWRkUHRyKFRydXN0
ZWRJbW0zMihyZXF1aXJlZEJ5dGVzKSwgSklUQ29tcGlsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVy
KTsKICAgICAgICAgbV9qaXQubG9hZDY0KEpJVENvbXBpbGVyOjpjYWxsZWVGcmFtZVNsb3QoQ2Fs
bEZyYW1lU2xvdDo6Y2FsbGVlKSwgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICBtX2ppdC5lbWl0
RHVtYlZpcnR1YWxDYWxsKCptX2ppdC52bSgpLCBjYWxsTGlua0luZm8pOworICAgICAgICBtX2pp
dC5lbWl0RHVtYlZpcnR1YWxDYWxsKHZtKCksIGNhbGxMaW5rSW5mbyk7CiAgICAgICAgIAogICAg
ICAgICBkb25lLmxpbmsoJm1faml0KTsKICAgICAgICAgc2V0UmVzdWx0QW5kUmVzZXRTdGFjaygp
OwpAQCAtMTYwMyw3ICsxNjAzLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVj
dE9yT3RoZQogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHZhbHVlR1BS
LCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIAogICAgICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOwogCi0gICAg
ICAgIG1faml0LmVtaXRMb2FkU3RydWN0dXJlKCptX2ppdC52bSgpLCB2YWx1ZUdQUiwgc3RydWN0
dXJlR1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgbV9qaXQuZW1pdExvYWRTdHJ1Y3R1cmUodm0o
KSwgdmFsdWVHUFIsIHN0cnVjdHVyZUdQUiwgc2NyYXRjaEdQUik7CiAgICAgICAgIHNwZWN1bGF0
aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBub2RlVXNlLCAKICAgICAg
ICAgICAgIG1faml0LmJyYW5jaFB0cigKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
RXF1YWwsIApAQCAtMTcwOSw3ICsxNzA5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZUxvZ2ljYWxOb3QoTgogICAgICAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0Y2gtPmdwcigpOwog
ICAgICAgICB9CiAgICAgICAgIGJvb2wgbmVnYXRlUmVzdWx0ID0gdHJ1ZTsKLSAgICAgICAgbV9q
aXQuZW1pdENvbnZlcnRWYWx1ZVRvQm9vbGVhbigqbV9qaXQudm0oKSwgSlNWYWx1ZVJlZ3MoYXJn
MUdQUiksIHJlc3VsdEdQUiwgc2NyYXRjaEdQUiwgdmFsdWVGUFIuZnByKCksIHRlbXBGUFIuZnBy
KCksIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgZ2xvYmFsT2JqZWN0LCBuZWdh
dGVSZXN1bHQpOworICAgICAgICBtX2ppdC5lbWl0Q29udmVydFZhbHVlVG9Cb29sZWFuKHZtKCks
IEpTVmFsdWVSZWdzKGFyZzFHUFIpLCByZXN1bHRHUFIsIHNjcmF0Y2hHUFIsIHZhbHVlRlBSLmZw
cigpLCB0ZW1wRlBSLmZwcigpLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIGds
b2JhbE9iamVjdCwgbmVnYXRlUmVzdWx0KTsKICAgICAgICAgbV9qaXQub3IzMihUcnVzdGVkSW1t
MzIoVmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CiAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0
R1BSLCBub2RlLCBEYXRhRm9ybWF0SlNCb29sZWFuKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMTc1
NCw3ICsxNzU0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdE9iamVjdE9yT3RoZXJCcgog
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModmFsdWVHUFIsIEpTQ2VsbDo6dHlw
ZUluZm9GbGFnc09mZnNldCgpKSwgCiAgICAgICAgICAgICBUcnVzdGVkSW1tMzIoTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCkpOwogCi0gICAgICAgIG1faml0LmVtaXRMb2FkU3RydWN0dXJlKCptX2pp
dC52bSgpLCB2YWx1ZUdQUiwgc3RydWN0dXJlR1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgbV9q
aXQuZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgdmFsdWVHUFIsIHN0cnVjdHVyZUdQUiwgc2NyYXRj
aEdQUik7CiAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3ModmFs
dWVHUFIpLCBub2RlVXNlLAogICAgICAgICAgICAgbV9qaXQuYnJhbmNoUHRyKAogICAgICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCkBAIC0xODgyLDcgKzE4ODIsNyBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjplbWl0QnJhbmNoKE5vZGUqIG5vCiAgICAgICAgICAgICB2YWx1ZS51
c2UoKTsKIAogICAgICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1faml0
LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7Ci0gICAgICAg
ICAgICBhdXRvIHRydXRoeSA9IG1faml0LmJyYW5jaElmVHJ1dGh5KCptX2ppdC52bSgpLCBKU1Zh
bHVlUmVncyh2YWx1ZUdQUiksIHJlc3VsdEdQUiwgc2NyYXRjaEdQUiwgdmFsdWVGUFIsIHRlbXBG
UFIsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgZ2xvYmFsT2JqZWN0KTsKKyAg
ICAgICAgICAgIGF1dG8gdHJ1dGh5ID0gbV9qaXQuYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1
ZVJlZ3ModmFsdWVHUFIpLCByZXN1bHRHUFIsIHNjcmF0Y2hHUFIsIHZhbHVlRlBSLCB0ZW1wRlBS
LCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIGdsb2JhbE9iamVjdCk7CiAgICAg
ICAgICAgICBhZGRCcmFuY2godHJ1dGh5LCB0YWtlbik7CiAgICAgICAgICAgICBqdW1wKG5vdFRh
a2VuKTsKICAgICAgICAgfQpAQCAtMTkwMiw3ICsxOTAyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlKiBub2RlKQogCiAgICAgaWYgKHZhbGlkYXRlREZHRG9lc0dDKSB7CiAg
ICAgICAgIGJvb2wgZXhwZWN0RG9lc0dDID0gZG9lc0dDKG1faml0LmdyYXBoKCksIG5vZGUpOwot
ICAgICAgICBtX2ppdC5zdG9yZTgoVHJ1c3RlZEltbTMyKGV4cGVjdERvZXNHQyksIG1faml0LnZt
KCktPmhlYXAuYWRkcmVzc09mRXhwZWN0RG9lc0dDKCkpOworICAgICAgICBtX2ppdC5zdG9yZTgo
VHJ1c3RlZEltbTMyKGV4cGVjdERvZXNHQyksIHZtKCkuaGVhcC5hZGRyZXNzT2ZFeHBlY3REb2Vz
R0MoKSk7CiAgICAgfQogCiAjaWYgRU5BQkxFKERGR19SRUdJU1RFUl9BTExPQ0FUSU9OX1ZBTElE
QVRJT04pCkBAIC0zOTEyLDcgKzM5MTIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
KE5vZGUqIG5vZGUpCiAgICAgICAgICAgICBHUFJSZWcgbG9jYWxHbG9iYWxPYmplY3RHUFIgPSBs
b2NhbEdsb2JhbE9iamVjdC5ncHIoKTsKICAgICAgICAgICAgIEdQUlJlZyByZW1vdGVHbG9iYWxP
YmplY3RHUFIgPSByZW1vdGVHbG9iYWxPYmplY3QuZ3ByKCk7CiAgICAgICAgICAgICBtX2ppdC5t
b3ZlKFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1faml0LmdyYXBoKCksIG1faml0Lmdsb2Jh
bE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgbG9jYWxHbG9iYWxPYmplY3RHUFIp
OwotICAgICAgICAgICAgbV9qaXQuZW1pdExvYWRTdHJ1Y3R1cmUoKm1faml0LnZtKCksIHZhbHVl
LmdwcigpLCByZXN1bHQuZ3ByKCksIHNjcmF0Y2guZ3ByKCkpOworICAgICAgICAgICAgbV9qaXQu
ZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgdmFsdWUuZ3ByKCksIHJlc3VsdC5ncHIoKSwgc2NyYXRj
aC5ncHIoKSk7CiAgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNz
KHJlc3VsdC5ncHIoKSwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlbW90ZUds
b2JhbE9iamVjdEdQUik7IAogICAgICAgICAgICAgbV9qaXQuY29tcGFyZVB0cihKSVRDb21waWxl
cjo6RXF1YWwsIGxvY2FsR2xvYmFsT2JqZWN0R1BSLCByZW1vdGVHbG9iYWxPYmplY3RHUFIsIHJl
c3VsdC5ncHIoKSk7CiAgICAgICAgIH0KQEAgLTQyMzQsOSArNDIzNCw5IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKIAogICAgICAgICBub3RQcmVzZW50SW5UYWJs
ZS5saW5rKCZtX2ppdCk7CiAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0g
TWFwT2JqZWN0VXNlKQotICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyOjp3ZWFr
UG9pbnRlcihtX2ppdC5ncmFwaCgpLCBtX2ppdC52bSgpLT5zZW50aW5lbE1hcEJ1Y2tldCgpKSwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cjo6d2Vha1Bv
aW50ZXIobV9qaXQuZ3JhcGgoKSwgdm0oKS5zZW50aW5lbE1hcEJ1Y2tldCgpKSwgcmVzdWx0R1BS
KTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyOjp3
ZWFrUG9pbnRlcihtX2ppdC5ncmFwaCgpLCBtX2ppdC52bSgpLT5zZW50aW5lbFNldEJ1Y2tldCgp
KSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cjo6d2Vh
a1BvaW50ZXIobV9qaXQuZ3JhcGgoKSwgdm0oKS5zZW50aW5lbFNldEJ1Y2tldCgpKSwgcmVzdWx0
R1BSKTsKICAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CiAgICAgICAgIGNlbGxSZXN1bHQocmVz
dWx0R1BSLCBub2RlKTsKICAgICAgICAgYnJlYWs7CkBAIC00NTA5LDggKzQ1MDksOCBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICBtX2ppdC5s
c2hpZnQzMihUcnVzdGVkSW1tMzIoZ2V0TFNCU2V0KHNpemVvZihIYXNPd25Qcm9wZXJ0eUNhY2hl
OjpFbnRyeSkpKSwgaGFzaEdQUik7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG1faml0Lm11
bDMyKFRydXN0ZWRJbW0zMihzaXplb2YoSGFzT3duUHJvcGVydHlDYWNoZTo6RW50cnkpKSwgaGFz
aEdQUiwgaGFzaEdQUik7Ci0gICAgICAgIEFTU0VSVChtX2ppdC52bSgpLT5oYXNPd25Qcm9wZXJ0
eUNhY2hlKCkpOwotICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIobV9qaXQudm0oKS0+
aGFzT3duUHJvcGVydHlDYWNoZSgpKSwgdGVtcEdQUik7CisgICAgICAgIEFTU0VSVCh2bSgpLmhh
c093blByb3BlcnR5Q2FjaGUoKSk7CisgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cih2
bSgpLmhhc093blByb3BlcnR5Q2FjaGUoKSksIHRlbXBHUFIpOwogICAgICAgICBzbG93UGF0aC5h
cHBlbmQobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgCiAgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHRlbXBHUFIsIGhhc2hHUFIsIE1hY3JvQXNz
ZW1ibGVyOjpUaW1lc09uZSwgSGFzT3duUHJvcGVydHlDYWNoZTo6RW50cnk6Om9mZnNldE9mSW1w
bCgpKSwgaW1wbEdQUikpOwogICAgICAgICBtX2ppdC5sb2FkOChNYWNyb0Fzc2VtYmxlcjo6QmFz
ZUluZGV4KHRlbXBHUFIsIGhhc2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc09uZSwgSGFzT3du
UHJvcGVydHlDYWNoZTo6RW50cnk6Om9mZnNldE9mUmVzdWx0KCkpLCByZXN1bHRHUFIpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJ
KHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTYsOCArMTE2LDkgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6ZW1pdEFsbG9jYXRlUmF3T2JqZQogCiAgICAgbV9qaXQubW92ZShUcnVzdGVk
SW1tUHRyKG51bGxwdHIpLCBzdG9yYWdlR1BSKTsKIAorICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7
CiAgICAgaWYgKHNpemUpIHsKLSAgICAgICAgaWYgKEFsbG9jYXRvciBhbGxvY2F0b3IgPSBtX2pp
dC52bSgpLT5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0b3JGb3JOb25WaXJ0
dWFsKHNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKSkgeworICAgICAg
ICBpZiAoQWxsb2NhdG9yIGFsbG9jYXRvciA9IHZtLmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNw
YWNlLmFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2Nh
dG9ySWZFeGlzdHMpKSB7CiAgICAgICAgICAgICBtX2ppdC5lbWl0QWxsb2NhdGUoc3RvcmFnZUdQ
UiwgSklUQWxsb2NhdG9yOjpjb25zdGFudChhbGxvY2F0b3IpLCBzY3JhdGNoR1BSLCBzY3JhdGNo
MkdQUiwgc2xvd0Nhc2VzKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgbV9qaXQuYWRkUHRy
KApAQCAtMTMxLDcgKzEzMiw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRBbGxvY2F0ZVJh
d09iamUKICAgICB9CiAKICAgICBzaXplX3QgYWxsb2NhdGlvblNpemUgPSBKU0ZpbmFsT2JqZWN0
OjphbGxvY2F0aW9uU2l6ZShpbmxpbmVDYXBhY2l0eSk7Ci0gICAgQWxsb2NhdG9yIGFsbG9jYXRv
ciA9IGFsbG9jYXRvckZvck5vblZpcnR1YWxDb25jdXJyZW50bHk8SlNGaW5hbE9iamVjdD4oKm1f
aml0LnZtKCksIGFsbG9jYXRpb25TaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4
aXN0cyk7CisgICAgQWxsb2NhdG9yIGFsbG9jYXRvciA9IGFsbG9jYXRvckZvck5vblZpcnR1YWxD
b25jdXJyZW50bHk8SlNGaW5hbE9iamVjdD4odm0sIGFsbG9jYXRpb25TaXplLCBBbGxvY2F0b3JG
b3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CiAgICAgaWYgKGFsbG9jYXRvcikgewogICAgICAg
ICBlbWl0QWxsb2NhdGVKU09iamVjdChyZXN1bHRHUFIsIEpJVEFsbG9jYXRvcjo6Y29uc3RhbnQo
YWxsb2NhdG9yKSwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBzdG9yYWdl
R1BSLCBzY3JhdGNoMkdQUiwgc2xvd0Nhc2VzKTsKICAgICAgICAgbV9qaXQuZW1pdEluaXRpYWxp
emVJbmxpbmVTdG9yYWdlKHJlc3VsdEdQUiwgc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsK
QEAgLTE3MSw3ICsxNzIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0QWxsb2NhdGVSYXdP
YmplCiAgICAgCiAgICAgbV9qaXQuZW1pdEluaXRpYWxpemVPdXRPZkxpbmVTdG9yYWdlKHN0b3Jh
Z2VHUFIsIHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CiAgICAgCi0gICAgbV9qaXQu
bXV0YXRvckZlbmNlKCptX2ppdC52bSgpKTsKKyAgICBtX2ppdC5tdXRhdG9yRmVuY2Uodm0pOwog
fQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0R2V0TGVuZ3RoKElubGluZUNhbGxGcmFtZSog
aW5saW5lQ2FsbEZyYW1lLCBHUFJSZWcgbGVuZ3RoR1BSLCBib29sIGluY2x1ZGVUaGlzKQpAQCAt
MTU3MSw4ICsxNTcyLDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVN0cmluZ1NsaWNl
KAogICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgZG9uZUNhc2VzOwogICAgIENDYWxsSGVscGVy
czo6SnVtcExpc3Qgc2xvd0Nhc2VzOwogCisgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICBh
dXRvIG5vbkVtcHR5Q2FzZSA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpCZWxvdywg
c3RhcnRJbmRleEdQUiwgdGVtcEdQUik7Ci0gICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyOjp3
ZWFrUG9pbnRlcihtX2ppdC5ncmFwaCgpLCBqc0VtcHR5U3RyaW5nKCZ2bSgpKSksIHRlbXBHUFIp
OworICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9qaXQuZ3JhcGgo
KSwganNFbXB0eVN0cmluZyh2bSkpLCB0ZW1wR1BSKTsKICAgICBkb25lQ2FzZXMuYXBwZW5kKG1f
aml0Lmp1bXAoKSk7CiAKICAgICBub25FbXB0eUNhc2UubGluaygmbV9qaXQpOwpAQCAtMTU5OSw3
ICsxNjAxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVN0cmluZ1NsaWNlKAogICAg
IGNvbnQ4Qml0LmxpbmsoJm1faml0KTsKIAogICAgIG1faml0LmxzaGlmdDMyKE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tMzIoc2l6ZW9mKHZvaWQqKSA9PSA0ID8gMiA6IDMpLCB0ZW1wR1BSKTsK
LSAgICBtX2ppdC5hZGRQdHIoVHJ1c3RlZEltbVB0cihtX2ppdC52bSgpLT5zbWFsbFN0cmluZ3Mu
c2luZ2xlQ2hhcmFjdGVyU3RyaW5ncygpKSwgdGVtcEdQUik7CisgICAgbV9qaXQuYWRkUHRyKFRy
dXN0ZWRJbW1QdHIodm0uc21hbGxTdHJpbmdzLnNpbmdsZUNoYXJhY3RlclN0cmluZ3MoKSksIHRl
bXBHUFIpOwogICAgIG1faml0LmxvYWRQdHIodGVtcEdQUiwgdGVtcEdQUik7CiAKICAgICBhZGRT
bG93UGF0aEdlbmVyYXRvcihzbG93UGF0aENhbGwoYmlnQ2hhcmFjdGVyLCB0aGlzLCBvcGVyYXRp
b25TaW5nbGVDaGFyYWN0ZXJTdHJpbmcsIHRlbXBHUFIsIHRlbXBHUFIpKTsKQEAgLTE4NjksNyAr
MTg3MSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDdXJyZW50QmxvY2sKICAgICAg
ICAgfQogCiAgICAgICAgIGlmIChPcHRpb25zOjp2YWxpZGF0ZURGR0V4Y2VwdGlvbkhhbmRsaW5n
KCkgJiYgKG1heUV4aXQobV9qaXQuZ3JhcGgoKSwgbV9jdXJyZW50Tm9kZSkgIT0gRG9lc05vdEV4
aXQgfHwgbV9jdXJyZW50Tm9kZS0+aXNUZXJtaW5hbCgpKSkKLSAgICAgICAgICAgIG1faml0Lmpp
dFJlbGVhc2VBc3NlcnROb0V4Y2VwdGlvbigqbV9qaXQudm0oKSk7CisgICAgICAgICAgICBtX2pp
dC5qaXRSZWxlYXNlQXNzZXJ0Tm9FeGNlcHRpb24obV9qaXQudm0oKSk7CiAKICAgICAgICAgbV9q
aXQucGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyKCkuYXBwZW5kSXRlbShtX2ppdC5sYWJlbElnbm9y
aW5nV2F0Y2hwb2ludHMoKSwgbV9vcmlnaW4uc2VtYW50aWMpOwogCkBAIC0yMDQ5LDcgKzIwNTEs
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ2hlY2tUcmFwcyhOCiAgICAgR1BSUmVn
IHVudXNlZEdQUiA9IHVudXNlZC5ncHIoKTsKIAogICAgIEpJVENvbXBpbGVyOjpKdW1wIG5lZWRU
cmFwSGFuZGxpbmcgPSBtX2ppdC5icmFuY2hUZXN0OChKSVRDb21waWxlcjo6Tm9uWmVybywKLSAg
ICAgICAgSklUQ29tcGlsZXI6OkFic29sdXRlQWRkcmVzcyhtX2ppdC52bSgpLT5uZWVkVHJhcEhh
bmRsaW5nQWRkcmVzcygpKSk7CisgICAgICAgIEpJVENvbXBpbGVyOjpBYnNvbHV0ZUFkZHJlc3Mo
bV9qaXQudm0oKS5uZWVkVHJhcEhhbmRsaW5nQWRkcmVzcygpKSk7CiAKICAgICBhZGRTbG93UGF0
aEdlbmVyYXRvcihzbG93UGF0aENhbGwobmVlZFRyYXBIYW5kbGluZywgdGhpcywgb3BlcmF0aW9u
SGFuZGxlVHJhcHMsIHVudXNlZEdQUikpOwogICAgIG5vUmVzdWx0KG5vZGUpOwpAQCAtMjIxNCw4
ICsyMjE2LDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25TdAogICAg
IC8vIDggYml0IHN0cmluZyB2YWx1ZXMgZG9uJ3QgbmVlZCB0aGUgaXNBU0NJSSBjaGVjay4KICAg
ICBjb250OEJpdC5saW5rKCZtX2ppdCk7CiAKKyAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAg
IG1faml0LmxzaGlmdDMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoc2l6ZW9mKHZvaWQq
KSA9PSA0ID8gMiA6IDMpLCBzY3JhdGNoUmVnKTsKLSAgICBtX2ppdC5hZGRQdHIoVHJ1c3RlZElt
bVB0cihtX2ppdC52bSgpLT5zbWFsbFN0cmluZ3Muc2luZ2xlQ2hhcmFjdGVyU3RyaW5ncygpKSwg
c2NyYXRjaFJlZyk7CisgICAgbV9qaXQuYWRkUHRyKFRydXN0ZWRJbW1QdHIodm0uc21hbGxTdHJp
bmdzLnNpbmdsZUNoYXJhY3RlclN0cmluZ3MoKSksIHNjcmF0Y2hSZWcpOwogICAgIG1faml0Lmxv
YWRQdHIoc2NyYXRjaFJlZywgc2NyYXRjaFJlZyk7CiAKICAgICBhZGRTbG93UGF0aEdlbmVyYXRv
cigKQEAgLTIyMzYsOCArMjIzOSw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRC
eVZhbE9uU3QKICAgICAgICAgICAgIC8vIG9uIGEgc3RyaW5nUHJvdG90eXBlQ2hhaW5Jc1NhbmUo
KSBndWFyYW50ZWVpbmcgdGhhdCB0aGUgcHJvdG90eXBlcyBoYXZlIG5vIG5lZ2F0aXZlCiAgICAg
ICAgICAgICAvLyBpbmRleGVkIHByb3BlcnRpZXMgZWl0aGVyLgogICAgICAgICAgICAgLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NDY2OAotICAgICAgICAgICAg
bV9qaXQuZ3JhcGgoKS5yZWdpc3RlckFuZFdhdGNoU3RydWN0dXJlVHJhbnNpdGlvbihnbG9iYWxP
YmplY3QtPnN0cmluZ1Byb3RvdHlwZSgpLT5zdHJ1Y3R1cmUoKm1faml0LnZtKCkpKTsKLSAgICAg
ICAgICAgIG1faml0LmdyYXBoKCkucmVnaXN0ZXJBbmRXYXRjaFN0cnVjdHVyZVRyYW5zaXRpb24o
Z2xvYmFsT2JqZWN0LT5vYmplY3RQcm90b3R5cGUoKS0+c3RydWN0dXJlKCptX2ppdC52bSgpKSk7
CisgICAgICAgICAgICBtX2ppdC5ncmFwaCgpLnJlZ2lzdGVyQW5kV2F0Y2hTdHJ1Y3R1cmVUcmFu
c2l0aW9uKGdsb2JhbE9iamVjdC0+c3RyaW5nUHJvdG90eXBlKCktPnN0cnVjdHVyZSh2bSkpOwor
ICAgICAgICAgICAgbV9qaXQuZ3JhcGgoKS5yZWdpc3RlckFuZFdhdGNoU3RydWN0dXJlVHJhbnNp
dGlvbihnbG9iYWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgpLT5zdHJ1Y3R1cmUodm0pKTsKICAg
ICAgICAgICAgIHByb3RvdHlwZUNoYWluSXNTYW5lID0gZ2xvYmFsT2JqZWN0LT5zdHJpbmdQcm90
b3R5cGVDaGFpbklzU2FuZSgpOwogICAgICAgICB9CiAgICAgICAgIGlmIChwcm90b3R5cGVDaGFp
bklzU2FuZSkgewpAQCAtMjI5OCw3ICsyMzAxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUZyb21DaGFyQ29kZQogCiAgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsK
ICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92
ZSwgcHJvcGVydHlSZWcsIFRydXN0ZWRJbW0zMihtYXhTaW5nbGVDaGFyYWN0ZXJTdHJpbmcpKSk7
Ci0gICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKG1faml0LnZtKCktPnNtYWxsU3RyaW5ncy5z
aW5nbGVDaGFyYWN0ZXJTdHJpbmdzKCkpLCBzbWFsbFN0cmluZ3NSZWcpOworICAgIG1faml0Lm1v
dmUoVHJ1c3RlZEltbVB0cih2bSgpLnNtYWxsU3RyaW5ncy5zaW5nbGVDaGFyYWN0ZXJTdHJpbmdz
KCkpLCBzbWFsbFN0cmluZ3NSZWcpOwogICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6
OkJhc2VJbmRleChzbWFsbFN0cmluZ3NSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6
U2NhbGVQdHIsIDApLCBzY3JhdGNoUmVnKTsKIAogICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQu
YnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBzY3JhdGNoUmVnKSk7CkBAIC02NzA1
LDcgKzY3MDgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlU3RyaW5nWmVyb0xlCiAg
ICAgR1BSVGVtcG9yYXJ5IGVxKHRoaXMpOwogICAgIEdQUlJlZyBlcUdQUiA9IGVxLmdwcigpOwog
Ci0gICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2ppdC5ncmFwaCgp
LCBqc0VtcHR5U3RyaW5nKG1faml0LnZtKCkpKSwgZXFHUFIpOworICAgIG1faml0Lm1vdmUoVHJ1
c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9qaXQuZ3JhcGgoKSwganNFbXB0eVN0cmluZyh2bSgp
KSksIGVxR1BSKTsKICAgICBtX2ppdC5jb21wYXJlUHRyKENDYWxsSGVscGVyczo6RXF1YWwsIHN0
ckdQUiwgZXFHUFIsIGVxR1BSKTsKICAgICB1bmJsZXNzZWRCb29sZWFuUmVzdWx0KGVxR1BSLCBu
b2RlKTsKIH0KQEAgLTY3MjIsNyArNjcyNSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVMb2dpY2FsTm90U3QKICAgICBERkdfVFlQRV9DSEVDSygKICAgICAgICAgdmFsdWVSZWdzLCBu
b2RlLT5jaGlsZDEoKSwgKH5TcGVjQ2VsbENoZWNrKSB8IFNwZWNTdHJpbmcsIG1faml0LmJyYW5j
aElmTm90U3RyaW5nKGNlbGxHUFIpKTsKIAotICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cjo6
d2Vha1BvaW50ZXIobV9qaXQuZ3JhcGgoKSwganNFbXB0eVN0cmluZyhtX2ppdC52bSgpKSksIHRl
bXBHUFIpOworICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9qaXQu
Z3JhcGgoKSwganNFbXB0eVN0cmluZyh2bSgpKSksIHRlbXBHUFIpOwogICAgIG1faml0LmNvbXBh
cmVQdHIoQ0NhbGxIZWxwZXJzOjpFcXVhbCwgY2VsbEdQUiwgdGVtcEdQUiwgdGVtcEdQUik7CiAg
ICAgYXV0byBkb25lID0gbV9qaXQuanVtcCgpOwogCkBAIC02NzQ0LDcgKzY3NDcsNyBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjplbWl0U3RyaW5nQnJhbmNoKEVkCiAKICAgICBzcGVjdWxhdGVTdHJp
bmcobm9kZVVzZSwgc3RyR1BSKTsKIAotICAgIGJyYW5jaFB0cihDQ2FsbEhlbHBlcnM6OkVxdWFs
LCBzdHJHUFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1faml0LmdyYXBoKCksIGpzRW1w
dHlTdHJpbmcobV9qaXQudm0oKSkpLCBub3RUYWtlbik7CisgICAgYnJhbmNoUHRyKENDYWxsSGVs
cGVyczo6RXF1YWwsIHN0ckdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9qaXQuZ3Jh
cGgoKSwganNFbXB0eVN0cmluZyh2bSgpKSksIG5vdFRha2VuKTsKICAgICBqdW1wKHRha2VuKTsK
IAogICAgIG5vUmVzdWx0KG1fY3VycmVudE5vZGUpOwpAQCAtNjc2MSw3ICs2NzY0LDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdFN0cmluZ09yT3RoZXJCcgogICAgIEdQUlJlZyBjZWxsR1BS
ID0gdmFsdWVSZWdzLnBheWxvYWRHUFIoKTsKICAgICBERkdfVFlQRV9DSEVDSyh2YWx1ZVJlZ3Ms
IG5vZGVVc2UsICh+U3BlY0NlbGxDaGVjaykgfCBTcGVjU3RyaW5nLCBtX2ppdC5icmFuY2hJZk5v
dFN0cmluZyhjZWxsR1BSKSk7CiAKLSAgICBicmFuY2hQdHIoQ0NhbGxIZWxwZXJzOjpFcXVhbCwg
Y2VsbEdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9qaXQuZ3JhcGgoKSwganNFbXB0
eVN0cmluZyhtX2ppdC52bSgpKSksIG5vdFRha2VuKTsKKyAgICBicmFuY2hQdHIoQ0NhbGxIZWxw
ZXJzOjpFcXVhbCwgY2VsbEdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9qaXQuZ3Jh
cGgoKSwganNFbXB0eVN0cmluZyh2bSgpKSksIG5vdFRha2VuKTsKICAgICBqdW1wKHRha2VuLCBG
b3JjZUp1bXApOwogCiAgICAgbm90Q2VsbC5saW5rKCZtX2ppdCk7CkBAIC02Nzk0LDggKzY3OTcs
OSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjYWdlVHlwZWRBcnJheVN0b3JhCiAgICAgICAgIHJl
dHVybjsKICAgICAKICAgICBpZiAoR2lnYWNhZ2U6OmNhblByaW1pdGl2ZUdpZ2FjYWdlQmVEaXNh
YmxlZCgpKSB7Ci0gICAgICAgIGlmIChtX2ppdC52bSgpLT5wcmltaXRpdmVHaWdhY2FnZUVuYWJs
ZWQoKS5pc1N0aWxsVmFsaWQoKSkKLSAgICAgICAgICAgIG1faml0LmdyYXBoKCkud2F0Y2hwb2lu
dHMoKS5hZGRMYXppbHkobV9qaXQudm0oKS0+cHJpbWl0aXZlR2lnYWNhZ2VFbmFibGVkKCkpOwor
ICAgICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOworICAgICAgICBpZiAodm0ucHJpbWl0aXZlR2ln
YWNhZ2VFbmFibGVkKCkuaXNTdGlsbFZhbGlkKCkpCisgICAgICAgICAgICBtX2ppdC5ncmFwaCgp
LndhdGNocG9pbnRzKCkuYWRkTGF6aWx5KHZtLnByaW1pdGl2ZUdpZ2FjYWdlRW5hYmxlZCgpKTsK
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTcwMzIsNyArNzAz
Niw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRHbG9iYWxPYmoKICAgICBTcGVj
dWxhdGVDZWxsT3BlcmFuZCBvYmplY3QodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgIEdQUlRl
bXBvcmFyeSByZXN1bHQodGhpcyk7CiAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7Ci0g
ICAgbV9qaXQuZW1pdExvYWRTdHJ1Y3R1cmUoKm1faml0LnZtKCksIG9iamVjdC5ncHIoKSwgcmVz
dWx0LmdwcigpLCBzY3JhdGNoLmdwcigpKTsKKyAgICBtX2ppdC5lbWl0TG9hZFN0cnVjdHVyZSh2
bSgpLCBvYmplY3QuZ3ByKCksIHJlc3VsdC5ncHIoKSwgc2NyYXRjaC5ncHIoKSk7CiAgICAgbV9q
aXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhyZXN1bHQuZ3ByKCksIFN0cnVjdHVyZTo6
Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZXN1bHQuZ3ByKCkpOwogICAgIGNlbGxSZXN1bHQocmVz
dWx0LmdwcigpLCBub2RlKTsKIH0KQEAgLTcyMDQsNyArNzIwOCw3IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVOZXdGdW5jdGlvbkMKICAgICBtX2ppdC5zdG9yZVB0cihUcnVzdGVkSW1t
UHRyKG51bGxwdHIpLCBKSVRDb21waWxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIEpTRnVuY3Rpb246
Om9mZnNldE9mUmFyZURhdGEoKSkpOwogICAgIAogICAgIGlmIChleGVjdXRhYmxlLT5pc0Fub255
bW91c0J1aWx0aW5GdW5jdGlvbigpKSB7Ci0gICAgICAgIFZNJiB2bSA9ICptX2ppdC52bSgpOwor
ICAgICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgICAgICBtX2ppdC5tdXRhdG9yRmVuY2Uo
dm0pOwogICAgICAgICBHUFJUZW1wb3JhcnkgYWxsb2NhdG9yKHRoaXMpOwogICAgICAgICBBbGxv
Y2F0b3IgYWxsb2NhdG9yVmFsdWUgPSBhbGxvY2F0b3JGb3JOb25WaXJ0dWFsQ29uY3VycmVudGx5
PEZ1bmN0aW9uUmFyZURhdGE+KHZtLCBzaXplb2YoRnVuY3Rpb25SYXJlRGF0YSksIEFsbG9jYXRv
ckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKQEAgLTcyMjMsNyArNzIyNyw3IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVOZXdGdW5jdGlvbkMKICAgICAgICAgbV9qaXQubXV0YXRv
ckZlbmNlKHZtKTsKICAgICAgICAgbV9qaXQuc3RvcmVQdHIoc2NyYXRjaDFHUFIsIEpJVENvbXBp
bGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZSYXJlRGF0YSgpKSk7
CiAgICAgfSBlbHNlCi0gICAgICAgIG1faml0Lm11dGF0b3JGZW5jZSgqbV9qaXQudm0oKSk7Cisg
ICAgICAgIG1faml0Lm11dGF0b3JGZW5jZSh2bSgpKTsKIAogfQogCkBAIC03NTEyLDcgKzc1MTYs
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ3JlYXRlQWN0aXZhCiAgICAgICAgICAg
ICAgICAgcmVzdWx0R1BSLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZShT
Y29wZU9mZnNldChpKSkpKTsKICAgICB9CiAgICAgCi0gICAgbV9qaXQubXV0YXRvckZlbmNlKCpt
X2ppdC52bSgpKTsKKyAgICBtX2ppdC5tdXRhdG9yRmVuY2Uodm0oKSk7CiAKICNpZiBVU0UoSlNW
QUxVRTY0KQogICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKApAQCAtNzY3Nyw3ICs3NjgxLDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNyZWF0ZURpcmVjdAogICAgICAgICAgICAgZG9u
ZS5saW5rKCZtX2ppdCk7CiAgICAgfQogICAgICAgICAKLSAgICBtX2ppdC5tdXRhdG9yRmVuY2Uo
Km1faml0LnZtKCkpOworICAgIG1faml0Lm11dGF0b3JGZW5jZSh2bSgpKTsKICAgICAgICAgCiAg
ICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOwogfQpAQCAtNzg5Nyw3ICs3OTAxLDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVNwcmVhZChOb2RlKgogICAgICAgICBtX2ppdC5s
c2hpZnQzMihUcnVzdGVkSW1tMzIoMyksIHNjcmF0Y2gxR1BSKTsKICAgICAgICAgbV9qaXQuYWRk
MzIoVHJ1c3RlZEltbTMyKEpTRml4ZWRBcnJheTo6b2Zmc2V0T2ZEYXRhKCkpLCBzY3JhdGNoMUdQ
Uik7CiAKLSAgICAgICAgbV9qaXQuZW1pdEFsbG9jYXRlVmFyaWFibGVTaXplZENlbGw8SlNGaXhl
ZEFycmF5PigqbV9qaXQudm0oKSwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyKG1faml0LmdyYXBo
KCkucmVnaXN0ZXJTdHJ1Y3R1cmUobV9qaXQuZ3JhcGgoKS5tX3ZtLmZpeGVkQXJyYXlTdHJ1Y3R1
cmUuZ2V0KCkpKSwgc2NyYXRjaDFHUFIsIHNjcmF0Y2gxR1BSLCBzY3JhdGNoMkdQUiwgc2xvd1Bh
dGgpOworICAgICAgICBtX2ppdC5lbWl0QWxsb2NhdGVWYXJpYWJsZVNpemVkQ2VsbDxKU0ZpeGVk
QXJyYXk+KHZtKCksIHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cihtX2ppdC5ncmFwaCgpLnJlZ2lz
dGVyU3RydWN0dXJlKG1faml0LmdyYXBoKCkubV92bS5maXhlZEFycmF5U3RydWN0dXJlLmdldCgp
KSksIHNjcmF0Y2gxR1BSLCBzY3JhdGNoMUdQUiwgc2NyYXRjaDJHUFIsIHNsb3dQYXRoKTsKICAg
ICAgICAgbV9qaXQuc3RvcmUzMihsZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJl
c3VsdEdQUiwgSlNGaXhlZEFycmF5OjpvZmZzZXRPZlNpemUoKSkpOwogCiAgICAgICAgIG1faml0
LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYXJndW1lbnQsIEpTT2JqZWN0OjpidXR0
ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2gxR1BSKTsKQEAgLTc5MzgsNyArNzk0Miw3IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTcHJlYWQoTm9kZSoKICAgICAgICAgICAgIGRvbmUuYXBw
ZW5kKG1faml0Lmp1bXAoKSk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIG1faml0Lm11
dGF0b3JGZW5jZSgqbV9qaXQudm0oKSk7CisgICAgICAgIG1faml0Lm11dGF0b3JGZW5jZSh2bSgp
KTsKIAogICAgICAgICBzbG93UGF0aC5saW5rKCZtX2ppdCk7CiAgICAgICAgIGFkZFNsb3dQYXRo
R2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChtX2ppdC5qdW1wKCksIHRoaXMsIG9wZXJhdGlvblNwcmVh
ZEZhc3RBcnJheSwgcmVzdWx0R1BSLCBhcmd1bWVudCkpOwpAQCAtODA0OSw3ICs4MDUzLDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5ld0FycmF5KE5vZAogICAgIH0KIAogICAgIHNp
emVfdCBzY3JhdGNoU2l6ZSA9IHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKiBub2RlLT5udW1DaGls
ZHJlbigpOwotICAgIFNjcmF0Y2hCdWZmZXIqIHNjcmF0Y2hCdWZmZXIgPSBtX2ppdC52bSgpLT5z
Y3JhdGNoQnVmZmVyRm9yU2l6ZShzY3JhdGNoU2l6ZSk7CisgICAgU2NyYXRjaEJ1ZmZlciogc2Ny
YXRjaEJ1ZmZlciA9IHZtKCkuc2NyYXRjaEJ1ZmZlckZvclNpemUoc2NyYXRjaFNpemUpOwogICAg
IEVuY29kZWRKU1ZhbHVlKiBidWZmZXIgPSBzY3JhdGNoQnVmZmVyID8gc3RhdGljX2Nhc3Q8RW5j
b2RlZEpTVmFsdWUqPihzY3JhdGNoQnVmZmVyLT5kYXRhQnVmZmVyKCkpIDogbnVsbHB0cjsKIAog
ICAgIGZvciAodW5zaWduZWQgb3BlcmFuZElkeCA9IDA7IG9wZXJhbmRJZHggPCBub2RlLT5udW1D
aGlsZHJlbigpOyArK29wZXJhbmRJZHgpIHsKQEAgLTgyMjEsNyArODIyNSw3IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVOZXdBcnJheVdpdGgKIAogICAgIEFTU0VSVChub2RlLT5udW1D
aGlsZHJlbigpKTsKICAgICBzaXplX3Qgc2NyYXRjaFNpemUgPSBzaXplb2YoRW5jb2RlZEpTVmFs
dWUpICogbm9kZS0+bnVtQ2hpbGRyZW4oKTsKLSAgICBTY3JhdGNoQnVmZmVyKiBzY3JhdGNoQnVm
ZmVyID0gbV9qaXQudm0oKS0+c2NyYXRjaEJ1ZmZlckZvclNpemUoc2NyYXRjaFNpemUpOworICAg
IFNjcmF0Y2hCdWZmZXIqIHNjcmF0Y2hCdWZmZXIgPSB2bSgpLnNjcmF0Y2hCdWZmZXJGb3JTaXpl
KHNjcmF0Y2hTaXplKTsKICAgICBFbmNvZGVkSlNWYWx1ZSogYnVmZmVyID0gc3RhdGljX2Nhc3Q8
RW5jb2RlZEpTVmFsdWUqPihzY3JhdGNoQnVmZmVyLT5kYXRhQnVmZmVyKCkpOwogCiAgICAgQml0
VmVjdG9yKiBiaXRWZWN0b3IgPSBub2RlLT5iaXRWZWN0b3IoKTsKQEAgLTg0MzQsNyArODQzOCw3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcnJheVNsaWNlKE4KICAgICAgICAgICAg
IGVtaXRBbGxvY2F0ZUJ1dHRlcmZseShzdG9yYWdlUmVzdWx0R1BSLCBzaXplR1BSLCBzY3JhdGNo
R1BSLCBzY3JhdGNoMkdQUiwgcmVzdWx0R1BSLCBzbG93Q2FzZXMpOwogICAgICAgICAgICAgZW1p
dEluaXRpYWxpemVCdXR0ZXJmbHkoc3RvcmFnZVJlc3VsdEdQUiwgc2l6ZUdQUiwgZW1wdHlWYWx1
ZVJlZ3MsIHNjcmF0Y2hHUFIpOwogICAgICAgICAgICAgZW1pdEFsbG9jYXRlSlNPYmplY3Q8SlNB
cnJheT4ocmVzdWx0R1BSLCB0ZW1wVmFsdWUsIHN0b3JhZ2VSZXN1bHRHUFIsIHNjcmF0Y2hHUFIs
IHNjcmF0Y2gyR1BSLCBzbG93Q2FzZXMpOwotICAgICAgICAgICAgbV9qaXQubXV0YXRvckZlbmNl
KCptX2ppdC52bSgpKTsKKyAgICAgICAgICAgIG1faml0Lm11dGF0b3JGZW5jZSh2bSgpKTsKICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuanVtcCgp
KTsKICAgICAgICAgfQpAQCAtODc3OCw3ICs4NzgyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZUFycmF5UHVzaChObwogICAgICAgICBzbG93UGF0aC5saW5rKCZtX2ppdCk7CiAKICAg
ICAgICAgc2l6ZV90IHNjcmF0Y2hTaXplID0gc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSAqIGVsZW1l
bnRDb3VudDsKLSAgICAgICAgU2NyYXRjaEJ1ZmZlciogc2NyYXRjaEJ1ZmZlciA9IG1faml0LnZt
KCktPnNjcmF0Y2hCdWZmZXJGb3JTaXplKHNjcmF0Y2hTaXplKTsKKyAgICAgICAgU2NyYXRjaEJ1
ZmZlciogc2NyYXRjaEJ1ZmZlciA9IHZtKCkuc2NyYXRjaEJ1ZmZlckZvclNpemUoc2NyYXRjaFNp
emUpOwogICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIoc3RhdGljX2Nhc3Q8RW5jb2Rl
ZEpTVmFsdWUqPihzY3JhdGNoQnVmZmVyLT5kYXRhQnVmZmVyKCkpKSwgYnVmZmVyR1BSKTsKICAg
ICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKHNjcmF0Y2hCdWZmZXItPmFkZHJlc3NPZkFj
dGl2ZUxlbmd0aCgpKSwgc3RvcmFnZUxlbmd0aEdQUik7CiAgICAgICAgIG1faml0LnN0b3JlUHRy
KFRydXN0ZWRJbW1QdHIoc2NyYXRjaFNpemUpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9y
YWdlTGVuZ3RoR1BSKSk7CkBAIC04ODUyLDcgKzg4NTYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlQXJyYXlQdXNoKE5vCiAgICAgICAgIHNsb3dQYXRoLmxpbmsoJm1faml0KTsKIAog
ICAgICAgICBzaXplX3Qgc2NyYXRjaFNpemUgPSBzaXplb2YoZG91YmxlKSAqIGVsZW1lbnRDb3Vu
dDsKLSAgICAgICAgU2NyYXRjaEJ1ZmZlciogc2NyYXRjaEJ1ZmZlciA9IG1faml0LnZtKCktPnNj
cmF0Y2hCdWZmZXJGb3JTaXplKHNjcmF0Y2hTaXplKTsKKyAgICAgICAgU2NyYXRjaEJ1ZmZlciog
c2NyYXRjaEJ1ZmZlciA9IHZtKCkuc2NyYXRjaEJ1ZmZlckZvclNpemUoc2NyYXRjaFNpemUpOwog
ICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIoc3RhdGljX2Nhc3Q8RW5jb2RlZEpTVmFs
dWUqPihzY3JhdGNoQnVmZmVyLT5kYXRhQnVmZmVyKCkpKSwgYnVmZmVyR1BSKTsKICAgICAgICAg
bV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKHNjcmF0Y2hCdWZmZXItPmFkZHJlc3NPZkFjdGl2ZUxl
bmd0aCgpKSwgc3RvcmFnZUxlbmd0aEdQUik7CiAgICAgICAgIG1faml0LnN0b3JlUHRyKFRydXN0
ZWRJbW1QdHIoc2NyYXRjaFNpemUpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlTGVu
Z3RoR1BSKSk7CkBAIC04OTMzLDcgKzg5MzcsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlQXJyYXlQdXNoKE5vCiAgICAgICAgIHNsb3dQYXRoLmxpbmsoJm1faml0KTsKIAogICAgICAg
ICBzaXplX3Qgc2NyYXRjaFNpemUgPSBzaXplb2YoRW5jb2RlZEpTVmFsdWUpICogZWxlbWVudENv
dW50OwotICAgICAgICBTY3JhdGNoQnVmZmVyKiBzY3JhdGNoQnVmZmVyID0gbV9qaXQudm0oKS0+
c2NyYXRjaEJ1ZmZlckZvclNpemUoc2NyYXRjaFNpemUpOworICAgICAgICBTY3JhdGNoQnVmZmVy
KiBzY3JhdGNoQnVmZmVyID0gdm0oKS5zY3JhdGNoQnVmZmVyRm9yU2l6ZShzY3JhdGNoU2l6ZSk7
CiAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cihzdGF0aWNfY2FzdDxFbmNvZGVkSlNW
YWx1ZSo+KHNjcmF0Y2hCdWZmZXItPmRhdGFCdWZmZXIoKSkpLCBidWZmZXJHUFIpOwogICAgICAg
ICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIoc2NyYXRjaEJ1ZmZlci0+YWRkcmVzc09mQWN0aXZl
TGVuZ3RoKCkpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKICAgICAgICAgbV9qaXQuc3RvcmVQdHIoVHJ1
c3RlZEltbVB0cihzY3JhdGNoU2l6ZSksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VM
ZW5ndGhHUFIpKTsKQEAgLTkxMDIsNyArOTEwNiw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVUeXBlT2YoTm9kZSoKICAgICBtX2ppdC5lbWl0VHlwZU9mKAogICAgICAgICB2YWx1ZVJl
Z3MsIHJlc3VsdEdQUiwKICAgICAgICAgWyZdIChUeXBlb2ZUeXBlIHR5cGUsIGJvb2wgZmFsbHNU
aHJvdWdoKSB7Ci0gICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHI6OndlYWtQb2lu
dGVyKG1faml0LmdyYXBoKCksIG1faml0LnZtKCktPnNtYWxsU3RyaW5ncy50eXBlU3RyaW5nKHR5
cGUpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cjo6
d2Vha1BvaW50ZXIobV9qaXQuZ3JhcGgoKSwgdm0oKS5zbWFsbFN0cmluZ3MudHlwZVN0cmluZyh0
eXBlKSksIHJlc3VsdEdQUik7CiAgICAgICAgICAgICBpZiAoIWZhbGxzVGhyb3VnaCkKICAgICAg
ICAgICAgICAgICBkb25lLmFwcGVuZChtX2ppdC5qdW1wKCkpOwogICAgICAgICB9LApAQCAtOTIx
Niw3ICs5MjIwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFsbG9jYXRlUHJvcAog
ICAgIAogICAgIHNpemVfdCBzaXplID0gaW5pdGlhbE91dE9mTGluZUNhcGFjaXR5ICogc2l6ZW9m
KEpTVmFsdWUpOwogCi0gICAgQWxsb2NhdG9yIGFsbG9jYXRvciA9IG1faml0LnZtKCktPmpzVmFs
dWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLmFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZSwgQWxs
b2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOworICAgIEFsbG9jYXRvciBhbGxvY2F0
b3IgPSB2bSgpLmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLmFsbG9jYXRvckZvck5vblZp
cnR1YWwoc2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOwogCiAgICAg
aWYgKCFhbGxvY2F0b3IgfHwgbm9kZS0+dHJhbnNpdGlvbigpLT5wcmV2aW91cy0+Y291bGRIYXZl
SW5kZXhpbmdIZWFkZXIoKSkgewogICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRo
aXMsIG5vZGUtPmNoaWxkMSgpKTsKQEAgLTkyNjAsNyArOTI2NCw3IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVSZWFsbG9jYXRlUHIKICAgICBzaXplX3QgbmV3U2l6ZSA9IG9sZFNpemUg
KiBvdXRPZkxpbmVHcm93dGhGYWN0b3I7CiAgICAgQVNTRVJUKG5ld1NpemUgPT0gbm9kZS0+dHJh
bnNpdGlvbigpLT5uZXh0LT5vdXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpKTsK
ICAgICAKLSAgICBBbGxvY2F0b3IgYWxsb2NhdG9yID0gbV9qaXQudm0oKS0+anNWYWx1ZUdpZ2Fj
YWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdG9yRm9yTm9uVmlydHVhbChuZXdTaXplLCBBbGxvY2F0
b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CisgICAgQWxsb2NhdG9yIGFsbG9jYXRvciA9
IHZtKCkuanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdG9yRm9yTm9uVmlydHVh
bChuZXdTaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CiAKICAgICBp
ZiAoIWFsbG9jYXRvciB8fCBub2RlLT50cmFuc2l0aW9uKCktPnByZXZpb3VzLT5jb3VsZEhhdmVJ
bmRleGluZ0hlYWRlcigpKSB7CiAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhp
cywgbm9kZS0+Y2hpbGQxKCkpOwpAQCAtOTMxNSw3ICs5MzE5LDcgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZU51a2VTdHJ1Y3R1cgogICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIo
KTsKICAgICBHUFJSZWcgc3RvcmFnZUdQUiA9IHN0b3JhZ2UuZ3ByKCk7CiAKLSAgICBtX2ppdC5u
dWtlU3RydWN0dXJlQW5kU3RvcmVCdXR0ZXJmbHkoKm1faml0LnZtKCksIHN0b3JhZ2VHUFIsIGJh
c2VHUFIpOworICAgIG1faml0Lm51a2VTdHJ1Y3R1cmVBbmRTdG9yZUJ1dHRlcmZseSh2bSgpLCBz
dG9yYWdlR1BSLCBiYXNlR1BSKTsKICAgICAKICAgICBub1Jlc3VsdChub2RlKTsKIH0KQEAgLTk0
NDUsNyArOTQ0OSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDYWxsRE9NR2V0dGUK
IAogICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50
czxKX0pJVE9wZXJhdGlvbl9FSkk+KENDYWxsSGVscGVyczo6Q2VsbFZhbHVlKGJhc2VHUFIpLCBp
ZGVudGlmaWVyVUlEKG5vZGUtPmNhbGxET01HZXR0ZXJEYXRhKCktPmlkZW50aWZpZXJOdW1iZXIp
KTsKLSAgICAgICAgbV9qaXQuc3RvcmVQdHIoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsICZt
X2ppdC52bSgpLT50b3BDYWxsRnJhbWUpOworICAgICAgICBtX2ppdC5zdG9yZVB0cihHUFJJbmZv
OjpjYWxsRnJhbWVSZWdpc3RlciwgJnZtKCkudG9wQ2FsbEZyYW1lKTsKICAgICAgICAgbV9qaXQu
ZW1pdFN0b3JlQ29kZU9yaWdpbihtX2N1cnJlbnROb2RlLT5vcmlnaW4uc2VtYW50aWMpOwogICAg
ICAgICBtX2ppdC5hcHBlbmRDYWxsKGdldHRlci5yZXRhZ2dlZDxDRnVuY3Rpb25QdHJUYWc+KCkp
OwogICAgICAgICBtX2ppdC5zZXR1cFJlc3VsdHMocmVzdWx0UmVncyk7CkBAIC05NDkzLDcgKzk0
OTcsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ2hlY2tTdWJDbGFzCiAgICAgICAg
IEdQUlJlZyBvdGhlckdQUiA9IG90aGVyLmdwcigpOwogICAgICAgICBHUFJSZWcgc3BlY2lmaWVk
R1BSID0gc3BlY2lmaWVkLmdwcigpOwogCi0gICAgICAgIG1faml0LmVtaXRMb2FkU3RydWN0dXJl
KCptX2ppdC52bSgpLCBiYXNlR1BSLCBvdGhlckdQUiwgc3BlY2lmaWVkR1BSKTsKKyAgICAgICAg
bV9qaXQuZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgYmFzZUdQUiwgb3RoZXJHUFIsIHNwZWNpZmll
ZEdQUik7CiAgICAgICAgIG1faml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG90aGVy
R1BSLCBTdHJ1Y3R1cmU6OmNsYXNzSW5mb09mZnNldCgpKSwgb3RoZXJHUFIpOwogICAgICAgICBt
X2ppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihub2RlLT5jbGFzc0luZm8oKSks
IHNwZWNpZmllZEdQUik7CiAKQEAgLTk4MDIsNyArOTgwNiw3IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVOZXdTdHJpbmdPYmoKICAgICAgICAgSklUQ29tcGlsZXI6OkFkZHJlc3MocmVz
dWx0R1BSLCBKU1dyYXBwZXJPYmplY3Q6OmludGVybmFsVmFsdWVPZmZzZXQoKSArIE9CSkVDVF9P
RkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSkpOwogI2VuZGlmCiAgICAgCi0gICAg
bV9qaXQubXV0YXRvckZlbmNlKCptX2ppdC52bSgpKTsKKyAgICBtX2ppdC5tdXRhdG9yRmVuY2Uo
dm0oKSk7CiAgICAgCiAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKAogICAg
ICAgICBzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9uTmV3U3RyaW5nT2JqZWN0LCByZXN1bHRHUFIs
IG9wZXJhbmRHUFIsIG5vZGUtPnN0cnVjdHVyZSgpKSk7CkBAIC05ODY5LDcgKzk4NzMsNyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTmV3VHlwZWRBcnJhCiAgICAgICAgIG1faml0LmFu
ZDMyKFRydXN0ZWRJbW0zMih+NyksIHNjcmF0Y2hHUFIpOwogICAgIH0KICAgICBtX2ppdC5lbWl0
QWxsb2NhdGVWYXJpYWJsZVNpemVkKAotICAgICAgICBzdG9yYWdlR1BSLCBtX2ppdC52bSgpLT5w
cmltaXRpdmVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLCBzY3JhdGNoR1BSLCBzY3JhdGNoR1BSLAor
ICAgICAgICBzdG9yYWdlR1BSLCB2bSgpLnByaW1pdGl2ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2Us
IHNjcmF0Y2hHUFIsIHNjcmF0Y2hHUFIsCiAgICAgICAgIHNjcmF0Y2hHUFIyLCBzbG93Q2FzZXMp
OwogICAgIAogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5icmFuY2hUZXN0
MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHNpemVHUFIpOwpAQCAtOTkxMiw3ICs5OTE2LDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5ld1R5cGVkQXJyYQogICAgICAgICBUcnVzdGVk
SW1tMzIoRmFzdFR5cGVkQXJyYXkpLAogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhy
ZXN1bHRHUFIsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZk1vZGUoKSkpOwogICAgIAotICAg
IG1faml0Lm11dGF0b3JGZW5jZSgqbV9qaXQudm0oKSk7CisgICAgbV9qaXQubXV0YXRvckZlbmNl
KHZtKCkpOwogICAgIAogICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbCgKICAg
ICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25OZXdUeXBlZEFycmF5V2l0aFNpemVGb3JU
eXBlKHR5cGVkQXJyYXlUeXBlKSwKQEAgLTk5NDUsNyArOTk0OSw3IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVOZXdSZWdleHAoTm8KICAgICAgICAgVHJ1c3RlZEltbVB0cihub2RlLT5j
ZWxsT3BlcmFuZCgpKSwKICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHJlc3VsdEdQUiwg
UmVnRXhwT2JqZWN0OjpvZmZzZXRPZlJlZ0V4cEFuZExhc3RJbmRleElzTm90V3JpdGFibGVGbGFn
KCkpKTsKICAgICBtX2ppdC5zdG9yZVZhbHVlKGxhc3RJbmRleFJlZ3MsIENDYWxsSGVscGVyczo6
QWRkcmVzcyhyZXN1bHRHUFIsIFJlZ0V4cE9iamVjdDo6b2Zmc2V0T2ZMYXN0SW5kZXgoKSkpOwot
ICAgIG1faml0Lm11dGF0b3JGZW5jZSgqbV9qaXQudm0oKSk7CisgICAgbV9qaXQubXV0YXRvckZl
bmNlKHZtKCkpOwogCiAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKHNsb3dQ
YXRoLCB0aGlzLCBvcGVyYXRpb25OZXdSZWdleHBXaXRoTGFzdEluZGV4LCByZXN1bHRHUFIsIHJl
Z2V4cCwgbGFzdEluZGV4UmVncykpOwogCkBAIC0xMTA4Nyw5ICsxMTA5MSw5IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVTdG9yZUJhcnJpZXIKICAgICBKSVRDb21waWxlcjo6SnVtcExp
c3Qgb2s7CiAgICAgCiAgICAgaWYgKGlzRmVuY2VkKSB7Ci0gICAgICAgIG9rLmFwcGVuZChtX2pp
dC5iYXJyaWVyQnJhbmNoKCptX2ppdC52bSgpLCBiYXNlR1BSLCBzY3JhdGNoMUdQUikpOworICAg
ICAgICBvay5hcHBlbmQobV9qaXQuYmFycmllckJyYW5jaCh2bSgpLCBiYXNlR1BSLCBzY3JhdGNo
MUdQUikpOwogICAgICAgICAKLSAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm9GZW5jZSA9IG1f
aml0Lmp1bXBJZk11dGF0b3JGZW5jZU5vdE5lZWRlZCgqbV9qaXQudm0oKSk7CisgICAgICAgIEpJ
VENvbXBpbGVyOjpKdW1wIG5vRmVuY2UgPSBtX2ppdC5qdW1wSWZNdXRhdG9yRmVuY2VOb3ROZWVk
ZWQodm0oKSk7CiAgICAgICAgIG1faml0Lm1lbW9yeUZlbmNlKCk7CiAgICAgICAgIG9rLmFwcGVu
ZChtX2ppdC5iYXJyaWVyQnJhbmNoV2l0aG91dEZlbmNlKGJhc2VHUFIpKTsKICAgICAgICAgbm9G
ZW5jZS5saW5rKCZtX2ppdCk7CkBAIC0xMTQyMCw3ICsxMTQyNCw3IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVTdHJpbmdSZXBsYWMKICAgICBpZiAobm9kZS0+Y2hpbGQxKCkudXNlS2lu
ZCgpID09IFN0cmluZ1VzZQogICAgICAgICAmJiBub2RlLT5jaGlsZDIoKS51c2VLaW5kKCkgPT0g
UmVnRXhwT2JqZWN0VXNlCiAgICAgICAgICYmIG5vZGUtPmNoaWxkMygpLnVzZUtpbmQoKSA9PSBT
dHJpbmdVc2UpIHsKLSAgICAgICAgaWYgKEpTU3RyaW5nKiByZXBsYWNlID0gbm9kZS0+Y2hpbGQz
KCktPmR5bmFtaWNDYXN0Q29uc3RhbnQ8SlNTdHJpbmcqPigqbV9qaXQudm0oKSkpIHsKKyAgICAg
ICAgaWYgKEpTU3RyaW5nKiByZXBsYWNlID0gbm9kZS0+Y2hpbGQzKCktPmR5bmFtaWNDYXN0Q29u
c3RhbnQ8SlNTdHJpbmcqPih2bSgpKSkgewogICAgICAgICAgICAgaWYgKCFyZXBsYWNlLT5sZW5n
dGgoKSkgewogICAgICAgICAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIHN0cmluZyh0aGlz
LCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQg
cmVnRXhwKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKQEAgLTExNTU0LDcgKzExNTU4LDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUxhenlKU0NvbnN0YQogdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZU1hdGVyaWFsaXplTmV3T2JqZWN0KE5vZGUqIG5vZGUpCiB7CiAgICAgUmVnaXN0
ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmUgPSBub2RlLT5zdHJ1Y3R1cmVTZXQoKS5hdCgwKTsKLSAg
ICBBU1NFUlQobV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAwKS0+ZHluYW1pY0Nhc3RD
b25zdGFudDxTdHJ1Y3R1cmUqPigqbV9qaXQudm0oKSkgPT0gc3RydWN0dXJlLmdldCgpKTsKKyAg
ICBBU1NFUlQobV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAwKS0+ZHluYW1pY0Nhc3RD
b25zdGFudDxTdHJ1Y3R1cmUqPih2bSgpKSA9PSBzdHJ1Y3R1cmUuZ2V0KCkpOwogCiAgICAgT2Jq
ZWN0TWF0ZXJpYWxpemF0aW9uRGF0YSYgZGF0YSA9IG5vZGUtPm9iamVjdE1hdGVyaWFsaXphdGlv
bkRhdGEoKTsKICAgICAgICAgCkBAIC0xMTg0Miw3ICsxMTg0Niw3IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmVtaXRBbGxvY2F0ZUJ1dHRlcmYKICAgICBkaWROb3RPdmVyZmxvdy5saW5rKCZtX2pp
dCk7CiAjZW5kaWYKICAgICBtX2ppdC5lbWl0QWxsb2NhdGVWYXJpYWJsZVNpemVkKAotICAgICAg
ICBzdG9yYWdlUmVzdWx0R1BSLCBtX2ppdC52bSgpLT5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlT
cGFjZSwgc2NyYXRjaDIsIHNjcmF0Y2gxLCBzY3JhdGNoMywgc2xvd0Nhc2VzKTsKKyAgICAgICAg
c3RvcmFnZVJlc3VsdEdQUiwgdm0oKS5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZSwgc2Ny
YXRjaDIsIHNjcmF0Y2gxLCBzY3JhdGNoMywgc2xvd0Nhc2VzKTsKICAgICBtX2ppdC5hZGRQdHIo
VHJ1c3RlZEltbTMyKHNpemVvZihJbmRleGluZ0hlYWRlcikpLCBzdG9yYWdlUmVzdWx0R1BSKTsK
IAogICAgIG1faml0LnN0b3JlMzIoc2l6ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3Rv
cmFnZVJlc3VsdEdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSk7CkBAIC0x
MTkzOSwxMCArMTE5NDMsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldE1hcEJ1
Y2tldAogICAgIG5vdEJ1Y2tldC5saW5rKCZtX2ppdCk7CiAgICAgSlNDZWxsKiBzZW50aW5lbCA9
IG51bGxwdHI7CiAgICAgaWYgKG5vZGUtPmJ1Y2tldE93bmVyVHlwZSgpID09IEJ1Y2tldE93bmVy
VHlwZTo6TWFwKQotICAgICAgICBzZW50aW5lbCA9IG1faml0LnZtKCktPnNlbnRpbmVsTWFwQnVj
a2V0KCk7CisgICAgICAgIHNlbnRpbmVsID0gdm0oKS5zZW50aW5lbE1hcEJ1Y2tldCgpOwogICAg
IGVsc2UgewogICAgICAgICBBU1NFUlQobm9kZS0+YnVja2V0T3duZXJUeXBlKCkgPT0gQnVja2V0
T3duZXJUeXBlOjpTZXQpOwotICAgICAgICBzZW50aW5lbCA9IG1faml0LnZtKCktPnNlbnRpbmVs
U2V0QnVja2V0KCk7CisgICAgICAgIHNlbnRpbmVsID0gdm0oKS5zZW50aW5lbFNldEJ1Y2tldCgp
OwogICAgIH0KICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1faml0
LmdyYXBoKCksIHNlbnRpbmVsKSwgcmVzdWx0R1BSKTsKICAgICBkb25lLmxpbmsoJm1faml0KTsK
QEAgLTEyNTE2LDExICsxMjUyMCwxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2Jq
ZWN0S2V5cyhOCiAgICAgICAgICAgICBzcGVjdWxhdGVPYmplY3Qobm9kZS0+Y2hpbGQxKCksIG9i
amVjdEdQUik7CiAKICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd0Nhc2Vz
OwotICAgICAgICAgICAgbV9qaXQuZW1pdExvYWRTdHJ1Y3R1cmUoKm1faml0LnZtKCksIG9iamVj
dEdQUiwgc3RydWN0dXJlR1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIG1faml0LmVtaXRM
b2FkU3RydWN0dXJlKHZtKCksIG9iamVjdEdQUiwgc3RydWN0dXJlR1BSLCBzY3JhdGNoR1BSKTsK
ICAgICAgICAgICAgIG1faml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0cnVjdHVy
ZUdQUiwgU3RydWN0dXJlOjpwcmV2aW91c09yUmFyZURhdGFPZmZzZXQoKSksIHNjcmF0Y2hHUFIp
OwogCiAgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaFRlc3RQdHIoQ0Nh
bGxIZWxwZXJzOjpaZXJvLCBzY3JhdGNoR1BSKSk7Ci0gICAgICAgICAgICBzbG93Q2FzZXMuYXBw
ZW5kKG1faml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6RXF1YWwsIENDYWxsSGVscGVyczo6QWRk
cmVzcyhzY3JhdGNoR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBUcnVzdGVkSW1t
MzIoYml0d2lzZV9jYXN0PGludDMyX3Q+KG1faml0LnZtKCktPnN0cnVjdHVyZVN0cnVjdHVyZS0+
c3RydWN0dXJlSUQoKSkpKSk7CisgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJy
YW5jaDMyKENDYWxsSGVscGVyczo6RXF1YWwsIENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNo
R1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoYml0d2lzZV9j
YXN0PGludDMyX3Q+KHZtKCkuc3RydWN0dXJlU3RydWN0dXJlLT5zdHJ1Y3R1cmVJRCgpKSkpKTsK
IAogICAgICAgICAgICAgbV9qaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRj
aEdQUiwgU3RydWN0dXJlUmFyZURhdGE6Om9mZnNldE9mQ2FjaGVkT3duS2V5cygpKSwgc2NyYXRj
aEdQUik7CiAKQEAgLTEyNjYwLDcgKzEyNjY0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUNyZWF0ZVRoaXMoTgogCiAgICAgbV9qaXQubG9hZDgoSklUQ29tcGlsZXI6OkFkZHJlc3Mo
c3RydWN0dXJlR1BSLCBTdHJ1Y3R1cmU6OmlubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCBpbmxpbmVD
YXBhY2l0eUdQUik7CiAgICAgbV9qaXQuZW1pdEluaXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3Vs
dEdQUiwgaW5saW5lQ2FwYWNpdHlHUFIpOwotICAgIG1faml0Lm11dGF0b3JGZW5jZSgqbV9qaXQu
dm0oKSk7CisgICAgbV9qaXQubXV0YXRvckZlbmNlKHZtKCkpOwogCiAgICAgYWRkU2xvd1BhdGhH
ZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRpb25DcmVhdGVUaGlz
LCByZXN1bHRHUFIsIGNhbGxlZUdQUiwgbm9kZS0+aW5saW5lQ2FwYWNpdHkoKSkpOwogCkBAIC0x
MjY4MSwxNCArMTI2ODUsMTQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5ld09iamVj
dChObwogCiAgICAgUmVnaXN0ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmUgPSBub2RlLT5zdHJ1Y3R1
cmUoKTsKICAgICBzaXplX3QgYWxsb2NhdGlvblNpemUgPSBKU0ZpbmFsT2JqZWN0OjphbGxvY2F0
aW9uU2l6ZShzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwotICAgIEFsbG9jYXRvciBhbGxv
Y2F0b3JWYWx1ZSA9IGFsbG9jYXRvckZvck5vblZpcnR1YWxDb25jdXJyZW50bHk8SlNGaW5hbE9i
amVjdD4oKm1faml0LnZtKCksIGFsbG9jYXRpb25TaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxv
Y2F0b3JJZkV4aXN0cyk7CisgICAgQWxsb2NhdG9yIGFsbG9jYXRvclZhbHVlID0gYWxsb2NhdG9y
Rm9yTm9uVmlydHVhbENvbmN1cnJlbnRseTxKU0ZpbmFsT2JqZWN0Pih2bSgpLCBhbGxvY2F0aW9u
U2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOwogICAgIGlmICghYWxs
b2NhdG9yVmFsdWUpCiAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChtX2ppdC5qdW1wKCkpOwogICAg
IGVsc2UgewogICAgICAgICBhdXRvIGJ1dHRlcmZseSA9IFRydXN0ZWRJbW1QdHIobnVsbHB0cik7
CiAgICAgICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KHJlc3VsdEdQUiwgSklUQWxsb2NhdG9yOjpj
b25zdGFudChhbGxvY2F0b3JWYWx1ZSksIGFsbG9jYXRvckdQUiwgVHJ1c3RlZEltbVB0cihzdHJ1
Y3R1cmUpLCBidXR0ZXJmbHksIHNjcmF0Y2hHUFIsIHNsb3dQYXRoKTsKICAgICAgICAgbV9qaXQu
ZW1pdEluaXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3VsdEdQUiwgc3RydWN0dXJlLT5pbmxpbmVD
YXBhY2l0eSgpKTsKLSAgICAgICAgbV9qaXQubXV0YXRvckZlbmNlKCptX2ppdC52bSgpKTsKKyAg
ICAgICAgbV9qaXQubXV0YXRvckZlbmNlKHZtKCkpOwogICAgIH0KIAogICAgIGFkZFNsb3dQYXRo
R2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9uTmV3T2JqZWN0
LCByZXN1bHRHUFIsIHN0cnVjdHVyZSkpOwpAQCAtMTI3MzEsNyArMTI3MzUsNyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlTG9nU2hhZG93Q2hpCiAgICAgR1BSVGVtcG9yYXJ5IHNoYWRv
d1BhY2tldCh0aGlzKTsKICAgICBHUFJSZWcgc2hhZG93UGFja2V0UmVnID0gc2hhZG93UGFja2V0
LmdwcigpOwogCi0gICAgbV9qaXQuZW5zdXJlU2hhZG93Q2hpY2tlblBhY2tldCgqbV9qaXQudm0o
KSwgc2hhZG93UGFja2V0UmVnLCBzY3JhdGNoMVJlZywgc2NyYXRjaDJSZWcpOworICAgIG1faml0
LmVuc3VyZVNoYWRvd0NoaWNrZW5QYWNrZXQodm0oKSwgc2hhZG93UGFja2V0UmVnLCBzY3JhdGNo
MVJlZywgc2NyYXRjaDJSZWcpOwogCiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgc2NvcGUodGhp
cywgbm9kZS0+Y2hpbGQxKCkpOwogICAgIEdQUlJlZyBzY29wZVJlZyA9IHNjb3BlLmdwcigpOwpA
QCAtMTI3NTMsNyArMTI3NTcsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTG9nU2hh
ZG93Q2hpCiAgICAgR1BSVGVtcG9yYXJ5IHNoYWRvd1BhY2tldCh0aGlzKTsKICAgICBHUFJSZWcg
c2hhZG93UGFja2V0UmVnID0gc2hhZG93UGFja2V0LmdwcigpOwogCi0gICAgbV9qaXQuZW5zdXJl
U2hhZG93Q2hpY2tlblBhY2tldCgqbV9qaXQudm0oKSwgc2hhZG93UGFja2V0UmVnLCBzY3JhdGNo
MVJlZywgc2NyYXRjaDJSZWcpOworICAgIG1faml0LmVuc3VyZVNoYWRvd0NoaWNrZW5QYWNrZXQo
dm0oKSwgc2hhZG93UGFja2V0UmVnLCBzY3JhdGNoMVJlZywgc2NyYXRjaDJSZWcpOwogCiAgICAg
SlNWYWx1ZU9wZXJhbmQgdGhpc1ZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICBKU1Zh
bHVlUmVncyB0aGlzUmVncyA9IHRoaXNWYWx1ZS5qc1ZhbHVlUmVncygpOwpAQCAtMTI5NzMsNyAr
MTI5NzcsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0UHJvdG90eXBlCiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogCi0gICAgICAgIG1faml0LmVtaXRMb2FkU3RydWN0
dXJlKCptX2ppdC52bSgpLCBvYmplY3RHUFIsIHRlbXBHUFIsIHRlbXAyR1BSKTsKKyAgICAgICAg
bV9qaXQuZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgb2JqZWN0R1BSLCB0ZW1wR1BSLCB0ZW1wMkdQ
Uik7CiAKICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBtX3N0YXRlLmZvck5vZGUobm9k
ZS0+Y2hpbGQxKCkpOwogICAgICAgICBpZiAoKHZhbHVlLm1fdHlwZSAmJiAhKHZhbHVlLm1fdHlw
ZSAmIH5TcGVjT2JqZWN0KSkgJiYgdmFsdWUubV9zdHJ1Y3R1cmUuaXNGaW5pdGUoKSkgewpAQCAt
MTMxNzQsNyArMTMxNzgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQWxsb2NhdGVO
ZXdBCiAKICAgICBlbWl0QWxsb2NhdGVKU09iamVjdDxKU0FycmF5PihyZXN1bHRHUFIsIFRydXN0
ZWRJbW1QdHIoc3RydWN0dXJlKSwgc3RvcmFnZUdQUiwgc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIs
IHNsb3dDYXNlcyk7CiAKLSAgICBtX2ppdC5tdXRhdG9yRmVuY2UoKm1faml0LnZtKCkpOworICAg
IG1faml0Lm11dGF0b3JGZW5jZSh2bSgpKTsKIAogICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKG1h
a2VVbmlxdWU8Q2FsbEFycmF5QWxsb2NhdG9yV2l0aFZhcmlhYmxlU2l6ZVNsb3dQYXRoR2VuZXJh
dG9yPigKICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25OZXdBcnJheVdpdGhTaXpl
LCByZXN1bHRHUFIsCkBAIC0xMzQwMSw3ICsxMzQwNSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVQcm9maWxlVHlwZSgKICAgICB9CiAKICAgICAvLyBMb2FkIHRoZSBUeXBlUHJvZmls
ZXJMb2cgaW50byBTY3JhdGNoMi4KLSAgICBUeXBlUHJvZmlsZXJMb2cqIGNhY2hlZFR5cGVQcm9m
aWxlckxvZyA9IG1faml0LnZtKCktPnR5cGVQcm9maWxlckxvZygpOworICAgIFR5cGVQcm9maWxl
ckxvZyogY2FjaGVkVHlwZVByb2ZpbGVyTG9nID0gdm0oKS50eXBlUHJvZmlsZXJMb2coKTsKICAg
ICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIoY2FjaGVkVHlwZVByb2ZpbGVyTG9nKSwgc2NyYXRj
aDJHUFIpOwogCiAgICAgLy8gTG9hZCB0aGUgbmV4dCBMb2dFbnRyeSBpbnRvIFNjcmF0Y2gxLgpA
QCAtMTM2NTEsMTQgKzEzNjU1LDE0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVNYWtl
Um9wZShOb2QKICAgICBHUFJSZWcgc2NyYXRjaDJHUFIgPSBzY3JhdGNoMi5ncHIoKTsKIAogICAg
IENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd1BhdGg7Ci0gICAgQWxsb2NhdG9yIGFsbG9jYXRv
clZhbHVlID0gYWxsb2NhdG9yRm9yTm9uVmlydHVhbENvbmN1cnJlbnRseTxKU1JvcGVTdHJpbmc+
KCptX2ppdC52bSgpLCBzaXplb2YoSlNSb3BlU3RyaW5nKSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxs
b2NhdG9ySWZFeGlzdHMpOwotICAgIGVtaXRBbGxvY2F0ZUpTQ2VsbChyZXN1bHRHUFIsIEpJVEFs
bG9jYXRvcjo6Y29uc3RhbnQoYWxsb2NhdG9yVmFsdWUpLCBhbGxvY2F0b3JHUFIsIFRydXN0ZWRJ
bW1QdHIobV9qaXQuZ3JhcGgoKS5yZWdpc3RlclN0cnVjdHVyZShtX2ppdC52bSgpLT5zdHJpbmdT
dHJ1Y3R1cmUuZ2V0KCkpKSwgc2NyYXRjaEdQUiwgc2xvd1BhdGgpOworICAgIEFsbG9jYXRvciBh
bGxvY2F0b3JWYWx1ZSA9IGFsbG9jYXRvckZvck5vblZpcnR1YWxDb25jdXJyZW50bHk8SlNSb3Bl
U3RyaW5nPih2bSgpLCBzaXplb2YoSlNSb3BlU3RyaW5nKSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxs
b2NhdG9ySWZFeGlzdHMpOworICAgIGVtaXRBbGxvY2F0ZUpTQ2VsbChyZXN1bHRHUFIsIEpJVEFs
bG9jYXRvcjo6Y29uc3RhbnQoYWxsb2NhdG9yVmFsdWUpLCBhbGxvY2F0b3JHUFIsIFRydXN0ZWRJ
bW1QdHIobV9qaXQuZ3JhcGgoKS5yZWdpc3RlclN0cnVjdHVyZSh2bSgpLnN0cmluZ1N0cnVjdHVy
ZS5nZXQoKSkpLCBzY3JhdGNoR1BSLCBzbG93UGF0aCk7CiAKICAgICAvLyBUaGlzIHB1dHMgbnVs
bHB0ciBmb3IgdGhlIGZpcnN0IGZpYmVyLiBJdCBtYWtlcyB2aXNpdENoaWxkcmVuIHNhZmUgZXZl
biBpZiB0aGlzIEpTUm9wZVN0cmluZyBpcyBkaXNjYXJkZWQgZHVlIHRvIHRoZSBzcGVjdWxhdGlv
biBmYWlsdXJlIGluIHRoZSBmb2xsb3dpbmcgcGF0aC4KICAgICBtX2ppdC5zdG9yZVB0cihUcnVz
dGVkSW1tUHRyKEpTU3RyaW5nOjppc1JvcGVJblBvaW50ZXIpLCBDQ2FsbEhlbHBlcnM6OkFkZHJl
c3MocmVzdWx0R1BSLCBKU1JvcGVTdHJpbmc6Om9mZnNldE9mRmliZXIwKCkpKTsKIAogICAgIHsK
LSAgICAgICAgaWYgKEpTU3RyaW5nKiBzdHJpbmcgPSBlZGdlc1swXS0+ZHluYW1pY0Nhc3RDb25z
dGFudDxKU1N0cmluZyo+KCptX2ppdC52bSgpKSkgeworICAgICAgICBpZiAoSlNTdHJpbmcqIHN0
cmluZyA9IGVkZ2VzWzBdLT5keW5hbWljQ2FzdENvbnN0YW50PEpTU3RyaW5nKj4odm0oKSkpIHsK
ICAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKHN0cmluZy0+aXM4Qml0KCkgPyBT
dHJpbmdJbXBsOjpmbGFnSXM4Qml0KCkgOiAwKSwgc2NyYXRjaEdQUik7CiAgICAgICAgICAgICBt
X2ppdC5tb3ZlKFRydXN0ZWRJbW0zMihzdHJpbmctPmxlbmd0aCgpKSwgYWxsb2NhdG9yR1BSKTsK
ICAgICAgICAgfSBlbHNlIHsKQEAgLTEzNjkwLDcgKzEzNjk0LDcgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZU1ha2VSb3BlKE5vZAogICAgIH0KIAogICAgIGZvciAodW5zaWduZWQgaSA9
IDE7IGkgPCBudW1PcEdQUnM7ICsraSkgewotICAgICAgICBpZiAoSlNTdHJpbmcqIHN0cmluZyA9
IGVkZ2VzW2ldLT5keW5hbWljQ2FzdENvbnN0YW50PEpTU3RyaW5nKj4oKm1faml0LnZtKCkpKSB7
CisgICAgICAgIGlmIChKU1N0cmluZyogc3RyaW5nID0gZWRnZXNbaV0tPmR5bmFtaWNDYXN0Q29u
c3RhbnQ8SlNTdHJpbmcqPih2bSgpKSkgewogICAgICAgICAgICAgbV9qaXQuYW5kMzIoVHJ1c3Rl
ZEltbTMyKHN0cmluZy0+aXM4Qml0KCkgPyBTdHJpbmdJbXBsOjpmbGFnSXM4Qml0KCkgOiAwKSwg
c2NyYXRjaEdQUik7CiAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAogICAgICAgICAgICAg
ICAgIFVuY291bnRhYmxlLCBKU1ZhbHVlU291cmNlKCksIG51bGxwdHIsCkBAIC0xMzc1OCwxMCAr
MTM3NjIsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU1ha2VSb3BlKE5vZAogCiAg
ICAgYXV0byBpc05vbkVtcHR5U3RyaW5nID0gbV9qaXQuYnJhbmNoVGVzdDMyKENDYWxsSGVscGVy
czo6Tm9uWmVybywgYWxsb2NhdG9yR1BSKTsKIAotICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0
cjo6d2Vha1BvaW50ZXIobV9qaXQuZ3JhcGgoKSwganNFbXB0eVN0cmluZygmbV9qaXQuZ3JhcGgo
KS5tX3ZtKSksIHJlc3VsdEdQUik7CisgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyOjp3ZWFr
UG9pbnRlcihtX2ppdC5ncmFwaCgpLCBqc0VtcHR5U3RyaW5nKG1faml0LmdyYXBoKCkubV92bSkp
LCByZXN1bHRHUFIpOwogCiAgICAgaXNOb25FbXB0eVN0cmluZy5saW5rKCZtX2ppdCk7Ci0gICAg
bV9qaXQubXV0YXRvckZlbmNlKCptX2ppdC52bSgpKTsKKyAgICBtX2ppdC5tdXRhdG9yRmVuY2Uo
dm0oKSk7CiAKICAgICBzd2l0Y2ggKG51bU9wR1BScykgewogICAgIGNhc2UgMjoKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlzaW9u
IDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
aAkod29ya2luZyBjb3B5KQpAQCAtMTEzLDcgKzExMyw3IEBAIHB1YmxpYzoKIAogICAgIFZNJiB2
bSgpCiAgICAgewotICAgICAgICByZXR1cm4gKm1faml0LnZtKCk7CisgICAgICAgIHJldHVybiBt
X2ppdC52bSgpOwogICAgIH0KIAogICAgIHN0cnVjdCBUcnVzdGVkSW1tUHRyIHsKQEAgLTk5MSw3
ICs5OTEsNyBAQCBwdWJsaWM6CiAgICAgICAgIC8vIGFueXdheSBzaW5jZSBpdCB3YXMgbm90IGJl
aW5nIHVwZGF0ZWQgYnkgSklUJ2VkIGNvZGUgYnkgZGVzaWduLgogCiAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBzaXplb2Yodm9pZCopIC8gNDsgaSsrKQotICAgICAgICAgICAgbV9q
aXQuc3RvcmUzMihUcnVzdGVkSW1tMzIoMHhiYWRiZWVmKSwgcmVpbnRlcnByZXRfY2FzdDxjaGFy
Kj4oJm1faml0LnZtKCktPnRvcENhbGxGcmFtZSkgKyBpICogNCk7CisgICAgICAgICAgICBtX2pp
dC5zdG9yZTMyKFRydXN0ZWRJbW0zMigweGJhZGJlZWYpLCByZWludGVycHJldF9jYXN0PGNoYXIq
Pigmdm0oKS50b3BDYWxsRnJhbWUpICsgaSAqIDQpOwogICAgIH0KICNlbHNlCiAgICAgdm9pZCBw
cmVwYXJlRm9yRXh0ZXJuYWxDYWxsKCkgeyB9CkBAIC0xNTE4LDcgKzE1MTgsNyBAQCBwdWJsaWM6
CiAgICAgICAgIEdQUlJlZyByZXN1bHRHUFIsIFN0cnVjdHVyZVR5cGUgc3RydWN0dXJlLCBTdG9y
YWdlVHlwZSBzdG9yYWdlLCBHUFJSZWcgc2NyYXRjaEdQUjEsCiAgICAgICAgIEdQUlJlZyBzY3Jh
dGNoR1BSMiwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBzbG93UGF0aCwgc2l6ZV90IHNpemUp
CiAgICAgewotICAgICAgICBtX2ppdC5lbWl0QWxsb2NhdGVKU09iamVjdFdpdGhLbm93blNpemU8
Q2xhc3NUeXBlPigqbV9qaXQudm0oKSwgcmVzdWx0R1BSLCBzdHJ1Y3R1cmUsIHN0b3JhZ2UsIHNj
cmF0Y2hHUFIxLCBzY3JhdGNoR1BSMiwgc2xvd1BhdGgsIHNpemUpOworICAgICAgICBtX2ppdC5l
bWl0QWxsb2NhdGVKU09iamVjdFdpdGhLbm93blNpemU8Q2xhc3NUeXBlPih2bSgpLCByZXN1bHRH
UFIsIHN0cnVjdHVyZSwgc3RvcmFnZSwgc2NyYXRjaEdQUjEsIHNjcmF0Y2hHUFIyLCBzbG93UGF0
aCwgc2l6ZSk7CiAgICAgfQogCiAgICAgLy8gQ29udmVuaWVuY2UgYWxsb2NhdG9yIGZvciBhIGJ1
aWx0LWluIG9iamVjdC4KQEAgLTE1MjYsMjAgKzE1MjYsMjAgQEAgcHVibGljOgogICAgIHZvaWQg
ZW1pdEFsbG9jYXRlSlNPYmplY3QoR1BSUmVnIHJlc3VsdEdQUiwgU3RydWN0dXJlVHlwZSBzdHJ1
Y3R1cmUsIFN0b3JhZ2VUeXBlIHN0b3JhZ2UsCiAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSMSwg
R1BSUmVnIHNjcmF0Y2hHUFIyLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QmIHNsb3dQYXRoKQog
ICAgIHsKLSAgICAgICAgbV9qaXQuZW1pdEFsbG9jYXRlSlNPYmplY3Q8Q2xhc3NUeXBlPigqbV9q
aXQudm0oKSwgcmVzdWx0R1BSLCBzdHJ1Y3R1cmUsIHN0b3JhZ2UsIHNjcmF0Y2hHUFIxLCBzY3Jh
dGNoR1BSMiwgc2xvd1BhdGgpOworICAgICAgICBtX2ppdC5lbWl0QWxsb2NhdGVKU09iamVjdDxD
bGFzc1R5cGU+KHZtKCksIHJlc3VsdEdQUiwgc3RydWN0dXJlLCBzdG9yYWdlLCBzY3JhdGNoR1BS
MSwgc2NyYXRjaEdQUjIsIHNsb3dQYXRoKTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgQ2xhc3NUeXBlLCB0eXBlbmFtZSBTdHJ1Y3R1cmVUeXBlPiAvLyBTdHJ1Y3R1cmVUeXBlIGFu
ZCBTdG9yYWdlVHlwZSBjYW4gYmUgR1BSIG9yIEltbVB0ci4KICAgICB2b2lkIGVtaXRBbGxvY2F0
ZVZhcmlhYmxlU2l6ZWRKU09iamVjdChHUFJSZWcgcmVzdWx0R1BSLCBTdHJ1Y3R1cmVUeXBlIHN0
cnVjdHVyZSwgR1BSUmVnIGFsbG9jYXRpb25TaXplLCBHUFJSZWcgc2NyYXRjaEdQUjEsIEdQUlJl
ZyBzY3JhdGNoR1BSMiwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBzbG93UGF0aCkKICAgICB7
Ci0gICAgICAgIG1faml0LmVtaXRBbGxvY2F0ZVZhcmlhYmxlU2l6ZWRKU09iamVjdDxDbGFzc1R5
cGU+KCptX2ppdC52bSgpLCByZXN1bHRHUFIsIHN0cnVjdHVyZSwgYWxsb2NhdGlvblNpemUsIHNj
cmF0Y2hHUFIxLCBzY3JhdGNoR1BSMiwgc2xvd1BhdGgpOworICAgICAgICBtX2ppdC5lbWl0QWxs
b2NhdGVWYXJpYWJsZVNpemVkSlNPYmplY3Q8Q2xhc3NUeXBlPih2bSgpLCByZXN1bHRHUFIsIHN0
cnVjdHVyZSwgYWxsb2NhdGlvblNpemUsIHNjcmF0Y2hHUFIxLCBzY3JhdGNoR1BSMiwgc2xvd1Bh
dGgpOwogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENsYXNzVHlwZT4KICAgICB2b2lk
IGVtaXRBbGxvY2F0ZURlc3RydWN0aWJsZU9iamVjdChHUFJSZWcgcmVzdWx0R1BSLCBSZWdpc3Rl
cmVkU3RydWN0dXJlIHN0cnVjdHVyZSwgCiAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSMSwgR1BS
UmVnIHNjcmF0Y2hHUFIyLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QmIHNsb3dQYXRoKQogICAg
IHsKLSAgICAgICAgbV9qaXQuZW1pdEFsbG9jYXRlRGVzdHJ1Y3RpYmxlT2JqZWN0PENsYXNzVHlw
ZT4oKm1faml0LnZtKCksIHJlc3VsdEdQUiwgc3RydWN0dXJlLmdldCgpLCBzY3JhdGNoR1BSMSwg
c2NyYXRjaEdQUjIsIHNsb3dQYXRoKTsKKyAgICAgICAgbV9qaXQuZW1pdEFsbG9jYXRlRGVzdHJ1
Y3RpYmxlT2JqZWN0PENsYXNzVHlwZT4odm0oKSwgcmVzdWx0R1BSLCBzdHJ1Y3R1cmUuZ2V0KCks
IHNjcmF0Y2hHUFIxLCBzY3JhdGNoR1BSMiwgc2xvd1BhdGgpOwogICAgIH0KIAogICAgIHZvaWQg
ZW1pdEFsbG9jYXRlUmF3T2JqZWN0KEdQUlJlZyByZXN1bHRHUFIsIFJlZ2lzdGVyZWRTdHJ1Y3R1
cmUsIEdQUlJlZyBzdG9yYWdlR1BSLCB1bnNpZ25lZCBudW1FbGVtZW50cywgdW5zaWduZWQgdmVj
dG9yTGVuZ3RoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5jcHAJ
KHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTEtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQwLDE1ICs0MCwxNSBAQAogCiBuYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIERGRyB7CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gb3NyRXhpdFRodW5rR2VuZXJhdG9yKFZNKiB2bSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gb3NyRXhpdFRodW5rR2VuZXJhdG9yKFZNJiB2bSkKIHsKICAgICBNYWNy
b0Fzc2VtYmxlciBqaXQ7Ci0gICAgaml0LnByb2JlKE9TUkV4aXQ6OmV4ZWN1dGVPU1JFeGl0LCB2
bSk7CisgICAgaml0LnByb2JlKE9TUkV4aXQ6OmV4ZWN1dGVPU1JFeGl0LCAmdm0pOwogICAgIExp
bmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQpOwogICAgIHJldHVybiBG
SU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgIkRGRyBPU1IgZXhpdCB0
aHVuayIpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9zckV4
aXRHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPiBvc3JFeGl0R2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKFZNJiB2bSkK
IHsKICAgICBNYWNyb0Fzc2VtYmxlciBqaXQ7CiAKQEAgLTU2LDcgKzU2LDcgQEAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvcwogICAgIGFkanVzdEZyYW1lQW5kU3RhY2tJ
bk9TUkV4aXRDb21waWxlclRodW5rPERGRzo6SklUQ29kZT4oaml0LCB2bSwgSklUVHlwZTo6REZH
SklUKTsKICAgICAKICAgICBzaXplX3Qgc2NyYXRjaFNpemUgPSBzaXplb2YoRW5jb2RlZEpTVmFs
dWUpICogKEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzICsgRlBSSW5mbzo6bnVtYmVyT2ZSZWdp
c3RlcnMpOwotICAgIFNjcmF0Y2hCdWZmZXIqIHNjcmF0Y2hCdWZmZXIgPSB2bS0+c2NyYXRjaEJ1
ZmZlckZvclNpemUoc2NyYXRjaFNpemUpOworICAgIFNjcmF0Y2hCdWZmZXIqIHNjcmF0Y2hCdWZm
ZXIgPSB2bS5zY3JhdGNoQnVmZmVyRm9yU2l6ZShzY3JhdGNoU2l6ZSk7CiAgICAgRW5jb2RlZEpT
VmFsdWUqIGJ1ZmZlciA9IHN0YXRpY19jYXN0PEVuY29kZWRKU1ZhbHVlKj4oc2NyYXRjaEJ1ZmZl
ci0+ZGF0YUJ1ZmZlcigpKTsKICAgICAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgR1BS
SW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7ICsraSkgewpAQCAtOTksNyArOTksNyBAQCBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9zCiAjZW5kaWYKICAgICB9CiAKLSAgICBq
aXQuZmFySnVtcChNYWNyb0Fzc2VtYmxlcjo6QWJzb2x1dGVBZGRyZXNzKCZ2bS0+b3NyRXhpdEp1
bXBEZXN0aW5hdGlvbiksIE9TUkV4aXRQdHJUYWcpOworICAgIGppdC5mYXJKdW1wKE1hY3JvQXNz
ZW1ibGVyOjpBYnNvbHV0ZUFkZHJlc3MoJnZtLm9zckV4aXRKdW1wRGVzdGluYXRpb24pLCBPU1JF
eGl0UHRyVGFnKTsKIAogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhV
TktfSUQpOwogICAgIApAQCAtMTA4LDcgKzEwOCw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gb3MKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwg
SklUVGh1bmtQdHJUYWcsICJERkcgT1NSIGV4aXQgZ2VuZXJhdGlvbiB0aHVuayIpOwogfQogCi1N
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9zckVudHJ5VGh1bmtHZW5lcmF0
b3IoVk0qIHZtKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvc3JFbnRy
eVRodW5rR2VuZXJhdG9yKFZNJiB2bSkKIHsKICAgICBBc3NlbWJseUhlbHBlcnMgaml0KG51bGxw
dHIpOwogCkBAIC0xNDEsNyArMTQxLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiBvcwogICAgIGppdC5hYm9ydFdpdGhSZWFzb24oREZHVW5yZWFzb25hYmxlT1NSRW50
cnlKdW1wRGVzdGluYXRpb24pOwogCiAgICAgb2subGluaygmaml0KTsKLSAgICBqaXQucmVzdG9y
ZUNhbGxlZVNhdmVzRnJvbUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bS0+dG9wRW50cnlG
cmFtZSk7CisgICAgaml0LnJlc3RvcmVDYWxsZWVTYXZlc0Zyb21FbnRyeUZyYW1lQ2FsbGVlU2F2
ZXNCdWZmZXIodm0udG9wRW50cnlGcmFtZSk7CiAgICAgaml0LmVtaXRNYXRlcmlhbGl6ZVRhZ0No
ZWNrUmVnaXN0ZXJzKCk7CiAKICAgICBqaXQuZmFySnVtcChHUFJJbmZvOjpyZWdUMSwgR1BSSW5m
bzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdUaHVua3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Ro
dW5rcy5oCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1RodW5rcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMS0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzUsOSArMzUsOSBAQCBjbGFzcyBWTTsKIAog
bmFtZXNwYWNlIERGRyB7CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
b3NyRXhpdFRodW5rR2VuZXJhdG9yKFZNKik7Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IG9zckV4aXRHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IoVk0qKTsKLU1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3NyRW50cnlUaHVua0dlbmVyYXRvcihWTSop
OworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvc3JFeGl0VGh1bmtHZW5l
cmF0b3IoVk0mKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3NyRXhp
dEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcihWTSYpOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBvc3JFbnRyeVRodW5rR2VuZXJhdG9yKFZNJik7CiAKIH0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpERkcKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUb0ZU
TEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENv
bXBpbGF0aW9uQ2FsbGJhY2suY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJh
Y2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTc0LDcgKzc0LDcgQEAgdm9pZCBUb0ZUTEZvck9TUkVudHJ5
RGVmZXJyZWRDb21waWxhdGlvbgogICAgICAgICAKICAgICBzd2l0Y2ggKHJlc3VsdCkgewogICAg
IGNhc2UgQ29tcGlsYXRpb25TdWNjZXNzZnVsOiB7Ci0gICAgICAgIGppdENvZGUtPnNldE9TUkVu
dHJ5QmxvY2soKmNvZGVCbG9jay0+dm0oKSwgcHJvZmlsZWRERkdDb2RlQmxvY2ssIGNvZGVCbG9j
ayk7CisgICAgICAgIGppdENvZGUtPnNldE9TUkVudHJ5QmxvY2soY29kZUJsb2NrLT52bSgpLCBw
cm9maWxlZERGR0NvZGVCbG9jaywgY29kZUJsb2NrKTsKICAgICAgICAgdW5zaWduZWQgb3NyRW50
cnlCeXRlY29kZSA9IGNvZGVCbG9jay0+aml0Q29kZSgpLT5mdGxGb3JPU1JFbnRyeSgpLT5ieXRl
Y29kZUluZGV4KCk7CiAgICAgICAgIGppdENvZGUtPnRpZXJVcEVudHJ5VHJpZ2dlcnMuc2V0KG9z
ckVudHJ5Qnl0ZWNvZGUsIEpJVENvZGU6OlRyaWdnZXJSZWFzb246OkNvbXBpbGF0aW9uRG9uZSk7
CiAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3Jr
bGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3Jr
bGlzdC5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHV29ya2xpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzgwLDcgKzM4MCw3IEBAIHZvaWQg
V29ya2xpc3Q6OnJlc3VtZUFsbFRocmVhZHMoKQogCiB2b2lkIFdvcmtsaXN0Ojp2aXNpdFdlYWtS
ZWZlcmVuY2VzKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewotICAgIFZNKiB2bSA9IHZpc2l0b3Iu
aGVhcCgpLT52bSgpOworICAgIFZNKiB2bSA9ICZ2aXNpdG9yLmhlYXAoKS0+dm0oKTsKICAgICB7
CiAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKCptX2xvY2spOwogICAgICAgICBmb3IgKFBsYW5N
YXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX3BsYW5zLmJlZ2luKCk7IGl0ZXIgIT0gbV9wbGFucy5lbmQo
KTsgKytpdGVyKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZH
VG9CMy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dl
ckRGR1RvQjMuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY4NjksNyArNjg2OSw3
IEBAIHByaXZhdGU6CiAgICAgICAgIG1fb3V0LmJyYW5jaChtX291dC5pc1plcm8zMihmbGFnc0Fu
ZExlbmd0aC5sZW5ndGgpLCByYXJlbHkoZW1wdHlDYXNlKSwgdXN1YWxseShjb250aW51YXRpb24p
KTsKIAogICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGVtcHR5
Q2FzZSwgc2xvd1BhdGgpOwotICAgICAgICBWYWx1ZUZyb21CbG9jayBlbXB0eVJlc3VsdCA9IG1f
b3V0LmFuY2hvcih3ZWFrUG9pbnRlcihqc0VtcHR5U3RyaW5nKCZtX2dyYXBoLm1fdm0pKSk7Cisg
ICAgICAgIFZhbHVlRnJvbUJsb2NrIGVtcHR5UmVzdWx0ID0gbV9vdXQuYW5jaG9yKHdlYWtQb2lu
dGVyKGpzRW1wdHlTdHJpbmcobV9ncmFwaC5tX3ZtKSkpOwogICAgICAgICBtX291dC5qdW1wKGNv
bnRpbnVhdGlvbik7CiAgICAgICAgIAogICAgICAgICBtX291dC5hcHBlbmRUbyhzbG93UGF0aCwg
Y29udGludWF0aW9uKTsKQEAgLTEyMjgyLDcgKzEyMjgyLDcgQEAgcHJpdmF0ZToKICAgICAgICAg
VmVjdG9yPFZhbHVlRnJvbUJsb2NrLCA1PiByZXN1bHRzOwogCiAgICAgICAgIG1fb3V0LmFwcGVu
ZFRvKGVtcHR5Q2FzZSwgbm90RW1wdHlDYXNlKTsKLSAgICAgICAgcmVzdWx0cy5hcHBlbmQobV9v
dXQuYW5jaG9yKHdlYWtQb2ludGVyKGpzRW1wdHlTdHJpbmcoJnZtKCkpKSkpOworICAgICAgICBy
ZXN1bHRzLmFwcGVuZChtX291dC5hbmNob3Iod2Vha1BvaW50ZXIoanNFbXB0eVN0cmluZyh2bSgp
KSkpKTsKICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwogCiAgICAgICAgIG1fb3V0
LmFwcGVuZFRvKG5vdEVtcHR5Q2FzZSwgb25lQ2hhckNhc2UpOwpAQCAtMTM4ODAsNyArMTM4ODAs
NyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBlZGdlLCBDZWxsQ2FzZVNwZWN1bGF0
ZXNPYmplY3QsIFNwZWN1bGF0ZU51bGxPclVuZGVmaW5lZCwKICAgICAgICAgICAgICAgICAgICAg
TWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKSk7CiAgICAgICAgIGNhc2UgU3RyaW5nVXNlOgotICAg
ICAgICAgICAgcmV0dXJuIG1fb3V0Lm5vdEVxdWFsKGxvd1N0cmluZyhlZGdlKSwgd2Vha1BvaW50
ZXIoanNFbXB0eVN0cmluZygmbV9ncmFwaC5tX3ZtKSkpOworICAgICAgICAgICAgcmV0dXJuIG1f
b3V0Lm5vdEVxdWFsKGxvd1N0cmluZyhlZGdlKSwgd2Vha1BvaW50ZXIoanNFbXB0eVN0cmluZyht
X2dyYXBoLm1fdm0pKSk7CiAgICAgICAgIGNhc2UgU3RyaW5nT3JPdGhlclVzZTogewogICAgICAg
ICAgICAgTFZhbHVlIHZhbHVlID0gbG93SlNWYWx1ZShlZGdlLCBNYW51YWxPcGVyYW5kU3BlY3Vs
YXRpb24pOwogCkBAIC0xMzg5Miw3ICsxMzg5Miw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAK
ICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oY2VsbENh
c2UsIG5vdENlbGxDYXNlKTsKICAgICAgICAgICAgIEZUTF9UWVBFX0NIRUNLKGpzVmFsdWVWYWx1
ZSh2YWx1ZSksIGVkZ2UsICh+U3BlY0NlbGxDaGVjaykgfCBTcGVjU3RyaW5nLCBpc05vdFN0cmlu
Zyh2YWx1ZSkpOwotICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgc3RyaW5nUmVzdWx0ID0gbV9v
dXQuYW5jaG9yKG1fb3V0Lm5vdEVxdWFsKHZhbHVlLCB3ZWFrUG9pbnRlcihqc0VtcHR5U3RyaW5n
KCZtX2dyYXBoLm1fdm0pKSkpOworICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgc3RyaW5nUmVz
dWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0Lm5vdEVxdWFsKHZhbHVlLCB3ZWFrUG9pbnRlcihqc0Vt
cHR5U3RyaW5nKG1fZ3JhcGgubV92bSkpKSk7CiAgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRp
bnVhdGlvbik7CiAKICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKG5vdENlbGxDYXNlLCBjb250
aW51YXRpb24pOwpAQCAtMTM5NDksNyArMTM5NDksNyBAQCBwcml2YXRlOgogICAgICAgICAgICAg
ICAgIHVuc3VyZShiaWdJbnRDYXNlKSwgdW5zdXJlKG5vdFN0cmluZ09yQmlnSW50Q2FzZSkpOwog
CiAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhzdHJpbmdDYXNlLCBiaWdJbnRDYXNlKTsKLSAg
ICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKG1fb3V0LmFuY2hvcihtX291dC5ub3RFcXVhbCh2YWx1
ZSwgd2Vha1BvaW50ZXIoanNFbXB0eVN0cmluZygmbV9ncmFwaC5tX3ZtKSkpKSk7CisgICAgICAg
ICAgICByZXN1bHRzLmFwcGVuZChtX291dC5hbmNob3IobV9vdXQubm90RXF1YWwodmFsdWUsIHdl
YWtQb2ludGVyKGpzRW1wdHlTdHJpbmcobV9ncmFwaC5tX3ZtKSkpKSk7CiAgICAgICAgICAgICBt
X291dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAKICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGJp
Z0ludENhc2UsIG5vdFN0cmluZ09yQmlnSW50Q2FzZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTFRodW5rcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExUaHVua3MuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTFRodW5rcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3LDcg
QEAgZW51bSBjbGFzcyBGcmFtZUFuZFN0YWNrQWRqdXN0bWVudFJlcXVpcgogfTsKIAogc3RhdGlj
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gZ2VuZXJpY0dlbmVyYXRpb25U
aHVua0dlbmVyYXRvcigKLSAgICBWTSogdm0sIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4g
Z2VuZXJhdGlvbkZ1bmN0aW9uLCBQdHJUYWcgcmVzdWx0VGFnLCBjb25zdCBjaGFyKiBuYW1lLCB1
bnNpZ25lZCBleHRyYVBvcHNUb1Jlc3RvcmUsIEZyYW1lQW5kU3RhY2tBZGp1c3RtZW50UmVxdWly
ZW1lbnQgZnJhbWVBbmRTdGFja0FkanVzdG1lbnRSZXF1aXJlbWVudCkKKyAgICBWTSYgdm0sIEZ1
bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZ2VuZXJhdGlvbkZ1bmN0aW9uLCBQdHJUYWcgcmVz
dWx0VGFnLCBjb25zdCBjaGFyKiBuYW1lLCB1bnNpZ25lZCBleHRyYVBvcHNUb1Jlc3RvcmUsIEZy
YW1lQW5kU3RhY2tBZGp1c3RtZW50UmVxdWlyZW1lbnQgZnJhbWVBbmRTdGFja0FkanVzdG1lbnRS
ZXF1aXJlbWVudCkKIHsKICAgICBBc3NlbWJseUhlbHBlcnMgaml0KG51bGxwdHIpOwogCkBAIC03
Myw3ICs3Myw3IEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHIKICAg
ICAgICAgbnVtYmVyT2ZSZXF1aXJlZFBvcHMrKzsKICAgICB9IHdoaWxlIChzdGFja01pc2FsaWdu
bWVudCAlIHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSk7CiAgICAgCi0gICAgU2NyYXRjaEJ1ZmZlciog
c2NyYXRjaEJ1ZmZlciA9IHZtLT5zY3JhdGNoQnVmZmVyRm9yU2l6ZShyZXF1aXJlZFNjcmF0Y2hN
ZW1vcnlTaXplSW5CeXRlcygpKTsKKyAgICBTY3JhdGNoQnVmZmVyKiBzY3JhdGNoQnVmZmVyID0g
dm0uc2NyYXRjaEJ1ZmZlckZvclNpemUocmVxdWlyZWRTY3JhdGNoTWVtb3J5U2l6ZUluQnl0ZXMo
KSk7CiAgICAgY2hhciogYnVmZmVyID0gc3RhdGljX2Nhc3Q8Y2hhcio+KHNjcmF0Y2hCdWZmZXIt
PmRhdGFCdWZmZXIoKSk7CiAgICAgCiAgICAgc2F2ZUFsbFJlZ2lzdGVycyhqaXQsIGJ1ZmZlcik7
CkBAIC0xMjgsMTQgKzEyOCwxNCBAQCBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyCiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRy
VGFnLCAiJXMiLCBuYW1lKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBvc3JFeGl0R2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKFZNKiB2bSkKK01hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3NyRXhpdEdlbmVyYXRpb25UaHVua0dlbmVyYXRv
cihWTSYgdm0pCiB7CiAgICAgdW5zaWduZWQgZXh0cmFQb3BzVG9SZXN0b3JlID0gMDsKICAgICBy
ZXR1cm4gZ2VuZXJpY0dlbmVyYXRpb25UaHVua0dlbmVyYXRvcigKICAgICAgICAgdm0sIGNvbXBp
bGVGVExPU1JFeGl0LCBPU1JFeGl0UHRyVGFnLCAiRlRMIE9TUiBleGl0IGdlbmVyYXRpb24gdGh1
bmsiLCBleHRyYVBvcHNUb1Jlc3RvcmUsIEZyYW1lQW5kU3RhY2tBZGp1c3RtZW50UmVxdWlyZW1l
bnQ6Ok5lZWRlZCk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
bGF6eVNsb3dQYXRoR2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKFZNKiB2bSkKK01hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gbGF6eVNsb3dQYXRoR2VuZXJhdGlvblRodW5rR2Vu
ZXJhdG9yKFZNJiB2bSkKIHsKICAgICB1bnNpZ25lZCBleHRyYVBvcHNUb1Jlc3RvcmUgPSAxOwog
ICAgIHJldHVybiBnZW5lcmljR2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExUaHVua3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTFRodW5rcy5oCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTFRodW5rcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzgsOCAr
MzgsOCBAQCBjbGFzcyBWTTsKIAogbmFtZXNwYWNlIEZUTCB7CiAKLU1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gb3NyRXhpdEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcihWTSop
OwotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBsYXp5U2xvd1BhdGhHZW5l
cmF0aW9uVGh1bmtHZW5lcmF0b3IoVk0qKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gb3NyRXhpdEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcihWTSYpOworTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBsYXp5U2xvd1BhdGhHZW5lcmF0aW9uVGh1bmtH
ZW5lcmF0b3IoVk0mKTsKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gc2xv
d1BhdGhDYWxsVGh1bmtHZW5lcmF0b3IoY29uc3QgU2xvd1BhdGhDYWxsS2V5Jik7CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIEtleVR5cGVBcmd1bWVudD4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0NlbGxDb250YWluZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9DZWxsQ29udGFpbmVyLmgJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0NlbGxDb250YWluZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01OCw3ICs1OCw3
IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogICAgIAotICAgIFZNKiB2bSgpIGNvbnN0OworICAg
IFZNJiB2bSgpIGNvbnN0OwogICAgIEhlYXAqIGhlYXAoKSBjb25zdDsKICAgICAKICAgICBleHBs
aWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gISFtX2VuY29kZWRQb2ludGVyOyB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9DZWxsQ29udGFpbmVySW5saW5lcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NlbGxDb250YWluZXJJ
bmxpbmVzLmgJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0NlbGxDb250YWluZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzMsNyArMzMsNyBAQAogCiBu
YW1lc3BhY2UgSlNDIHsKIAotaW5saW5lIFZNKiBDZWxsQ29udGFpbmVyOjp2bSgpIGNvbnN0Citp
bmxpbmUgVk0mIENlbGxDb250YWluZXI6OnZtKCkgY29uc3QKIHsKICAgICBpZiAoaXNMYXJnZUFs
bG9jYXRpb24oKSkKICAgICAgICAgcmV0dXJuIGxhcmdlQWxsb2NhdGlvbigpLnZtKCk7CkBAIC00
Miw3ICs0Miw3IEBAIGlubGluZSBWTSogQ2VsbENvbnRhaW5lcjo6dm0oKSBjb25zdAogCiBpbmxp
bmUgSGVhcCogQ2VsbENvbnRhaW5lcjo6aGVhcCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuICZ2bSgp
LT5oZWFwOworICAgIHJldHVybiAmdm0oKS5oZWFwOwogfQogCiBpbmxpbmUgYm9vbCBDZWxsQ29u
dGFpbmVyOjppc01hcmtlZChIZWFwQ2VsbCogY2VsbCkgY29uc3QKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0NvbXBsZXRlU3Vic3BhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbXBsZXRlU3Vic3BhY2UuY3BwCShyZXZpc2lvbiAyNDkx
MjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db21wbGV0ZVN1YnNwYWNlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTI1LDcgKzEyNSw3IEBAIHZvaWQqIENvbXBsZXRlU3Vic3BhY2U6
OnRyeUFsbG9jYXRlU2xvdygKICAgICBpZiAodmFsaWRhdGVERkdEb2VzR0MpCiAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKHZtLmhlYXAuZXhwZWN0RG9lc0dDKCkpOwogCi0gICAgc2FuaXRpemVTdGFj
a0ZvclZNKCZ2bSk7CisgICAgc2FuaXRpemVTdGFja0ZvclZNKHZtKTsKICAgICAKICAgICBpZiAo
QWxsb2NhdG9yIGFsbG9jYXRvciA9IGFsbG9jYXRvckZvcihzaXplLCBBbGxvY2F0b3JGb3JNb2Rl
OjpFbnN1cmVBbGxvY2F0b3IpKQogICAgICAgICByZXR1cm4gYWxsb2NhdG9yLmFsbG9jYXRlKGRl
ZmVycmFsQ29udGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpSZXR1cm5OdWxsKTsKQEAgLTE2
OSw3ICsxNjksNyBAQCB2b2lkKiBDb21wbGV0ZVN1YnNwYWNlOjpyZWFsbG9jYXRlTGFyZ2VBCiAg
ICAgQVNTRVJUKG9sZEFsbG9jYXRpb24tPmF0dHJpYnV0ZXMoKS5jZWxsS2luZCA9PSBIZWFwQ2Vs
bDo6QXV4aWxpYXJ5KTsKICAgICBBU1NFUlQoc2l6ZSA+IE1hcmtlZFNwYWNlOjpsYXJnZUN1dG9m
Zik7CiAKLSAgICBzYW5pdGl6ZVN0YWNrRm9yVk0oJnZtKTsKKyAgICBzYW5pdGl6ZVN0YWNrRm9y
Vk0odm0pOwogCiAgICAgaWYgKHNpemUgPD0gT3B0aW9uczo6bGFyZ2VBbGxvY2F0aW9uQ3V0b2Zm
KCkKICAgICAgICAgJiYgc2l6ZSA8PSBNYXJrZWRTcGFjZTo6bGFyZ2VDdXRvZmYpIHsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDQWN0aXZpdHlDYWxsYmFjay5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDQWN0aXZpdHlDYWxsYmFjay5oCShy
ZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0FjdGl2aXR5
Q2FsbGJhY2suaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTAsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEwLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02NSw3ICs2NSw3IEBAIHByb3RlY3RlZDoK
ICAgICB2aXJ0dWFsIGRvdWJsZSBnY1RpbWVTbGljZShzaXplX3QgYnl0ZXMpID0gMDsKICAgICB2
aXJ0dWFsIGRvdWJsZSBkZWF0aFJhdGUoSGVhcCYpID0gMDsKIAotICAgIEdDQWN0aXZpdHlDYWxs
YmFjayhWTSogdm0pCisgICAgR0NBY3Rpdml0eUNhbGxiYWNrKFZNJiB2bSkKICAgICAgICAgOiBC
YXNlKHZtKQogICAgICAgICAsIG1fZW5hYmxlZCh0cnVlKQogICAgICAgICAsIG1fZGVsYXkoc19k
ZWNhZGUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0Fzc2VydGlvbnMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0Fzc2VydGlvbnMuaAko
cmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NBc3NlcnRp
b25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAo
QykgMjAxNSBJZ2FsaWEgUy5MLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMzcsNyArMzcsNyBAQAog
CiAjZGVmaW5lIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMob2JqZWN0LCBjbGFzc0luZm8pIGRv
IHtcCiAgICAgQVNTRVJUX0dDX09CSkVDVF9MT09LU19WQUxJRChvYmplY3QpOyBcCi0gICAgUkVM
RUFTRV9BU1NFUlQob2JqZWN0LT5pbmhlcml0cygqb2JqZWN0LT5KU0M6OkpTQ2VsbDo6dm0oKSwg
Y2xhc3NJbmZvKSk7IFwKKyAgICBSRUxFQVNFX0FTU0VSVChvYmplY3QtPmluaGVyaXRzKG9iamVj
dC0+SlNDOjpKU0NlbGw6OnZtKCksIGNsYXNzSW5mbykpOyBcCiB9IHdoaWxlICgwKQogCiAvLyBV
c2VkIHRvIGF2b2lkIHRyaWdnZXJpbmcgLVd1bmRlZmluZWQtYm9vbC1jb252ZXJzaW9uLgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGFuZGxlU2V0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IYW5kbGVTZXQuY3BwCShyZXZpc2lvbiAyNDkx
MjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IYW5kbGVTZXQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMzQsNyArMzQsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotSGFuZGxlU2V0
OjpIYW5kbGVTZXQoVk0qIHZtKQorSGFuZGxlU2V0OjpIYW5kbGVTZXQoVk0mIHZtKQogICAgIDog
bV92bSh2bSkKIHsKICAgICBncm93KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9IYW5kbGVTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9I
YW5kbGVTZXQuaAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSGFuZGxlU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDExLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjUsMTAgKzY1LDEwIEBAIGNsYXNz
IEhhbmRsZVNldCB7CiBwdWJsaWM6CiAgICAgc3RhdGljIEhhbmRsZVNldCogaGVhcEZvcihIYW5k
bGVTbG90KTsKIAotICAgIEhhbmRsZVNldChWTSopOworICAgIEhhbmRsZVNldChWTSYpOwogICAg
IH5IYW5kbGVTZXQoKTsKIAotICAgIFZNKiB2bSgpOworICAgIFZNJiB2bSgpOwogCiAgICAgSGFu
ZGxlU2xvdCBhbGxvY2F0ZSgpOwogICAgIHZvaWQgZGVhbGxvY2F0ZShIYW5kbGVTbG90KTsKQEAg
LTkyLDcgKzkyLDcgQEAgcHJpdmF0ZToKICAgICBib29sIGlzTGl2ZU5vZGUoTm9kZSopOwogI2Vu
ZGlmCiAKLSAgICBWTSogbV92bTsKKyAgICBWTSYgbV92bTsKICAgICBEb3VibHlMaW5rZWRMaXN0
PEhhbmRsZUJsb2NrPiBtX2Jsb2NrTGlzdDsKIAogICAgIFNlbnRpbmVsTGlua2VkTGlzdDxOb2Rl
PiBtX3N0cm9uZ0xpc3Q7CkBAIC0xMDUsNyArMTA1LDcgQEAgaW5saW5lIEhhbmRsZVNldCogSGFu
ZGxlU2V0OjpoZWFwRm9yKEhhbgogICAgIHJldHVybiB0b05vZGUoaGFuZGxlKS0+aGFuZGxlU2V0
KCk7CiB9CiAKLWlubGluZSBWTSogSGFuZGxlU2V0Ojp2bSgpCitpbmxpbmUgVk0mIEhhbmRsZVNl
dDo6dm0oKQogewogICAgIHJldHVybiBtX3ZtOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSGVhcC5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDQsMTcgKzE0NCwxNyBAQCBzaXplX3Qg
cHJvcG9ydGlvbmFsSGVhcFNpemUoc2l6ZV90IGhlYXBTCiAgICAgcmV0dXJuIE9wdGlvbnM6Omxh
cmdlSGVhcEdyb3d0aEZhY3RvcigpICogaGVhcFNpemU7CiB9CiAKLWJvb2wgaXNWYWxpZFNoYXJl
ZEluc3RhbmNlVGhyZWFkU3RhdGUoVk0qIHZtKQorYm9vbCBpc1ZhbGlkU2hhcmVkSW5zdGFuY2VU
aHJlYWRTdGF0ZShWTSYgdm0pCiB7Ci0gICAgcmV0dXJuIHZtLT5jdXJyZW50VGhyZWFkSXNIb2xk
aW5nQVBJTG9jaygpOworICAgIHJldHVybiB2bS5jdXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9j
aygpOwogfQogCi1ib29sIGlzVmFsaWRUaHJlYWRTdGF0ZShWTSogdm0pCitib29sIGlzVmFsaWRU
aHJlYWRTdGF0ZShWTSYgdm0pCiB7Ci0gICAgaWYgKHZtLT5hdG9tU3RyaW5nVGFibGUoKSAhPSBU
aHJlYWQ6OmN1cnJlbnQoKS5hdG9tU3RyaW5nVGFibGUoKSkKKyAgICBpZiAodm0uYXRvbVN0cmlu
Z1RhYmxlKCkgIT0gVGhyZWFkOjpjdXJyZW50KCkuYXRvbVN0cmluZ1RhYmxlKCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIGlmICh2bS0+aXNTaGFyZWRJbnN0YW5jZSgpICYmICFpc1Zh
bGlkU2hhcmVkSW5zdGFuY2VUaHJlYWRTdGF0ZSh2bSkpCisgICAgaWYgKHZtLmlzU2hhcmVkSW5z
dGFuY2UoKSAmJiAhaXNWYWxpZFNoYXJlZEluc3RhbmNlVGhyZWFkU3RhdGUodm0pKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTI4Miw3ICsyODIsNyBAQCBw
cml2YXRlOgogICAgIEhlYXAmIG1faGVhcDsKIH07CiAKLUhlYXA6OkhlYXAoVk0qIHZtLCBIZWFw
VHlwZSBoZWFwVHlwZSkKK0hlYXA6OkhlYXAoVk0mIHZtLCBIZWFwVHlwZSBoZWFwVHlwZSkKICAg
ICA6IG1faGVhcFR5cGUoaGVhcFR5cGUpCiAgICAgLCBtX3JhbVNpemUoT3B0aW9uczo6Zm9yY2VS
QU1TaXplKCkgPyBPcHRpb25zOjpmb3JjZVJBTVNpemUoKSA6IHJhbVNpemUoKSkKICAgICAsIG1f
bWluQnl0ZXNQZXJDeWNsZShtaW5IZWFwU2l6ZShtX2hlYXBUeXBlLCBtX3JhbVNpemUpKQpAQCAt
NDAyLDcgKzQwMiw3IEBAIHZvaWQgSGVhcDo6bGFzdENoYW5jZVRvRmluYWxpemUoKQogICAgIAog
ICAgIG1faXNTaHV0dGluZ0Rvd24gPSB0cnVlOwogICAgIAotICAgIFJFTEVBU0VfQVNTRVJUKCFt
X3ZtLT5lbnRyeVNjb3BlKTsKKyAgICBSRUxFQVNFX0FTU0VSVCghbV92bS5lbnRyeVNjb3BlKTsK
ICAgICBSRUxFQVNFX0FTU0VSVChtX211dGF0b3JTdGF0ZSA9PSBNdXRhdG9yU3RhdGU6OlJ1bm5p
bmcpOwogICAgIAogICAgIGlmIChtX2NvbGxlY3RDb250aW51b3VzbHlUaHJlYWQpIHsKQEAgLTQ5
OCw3ICs0OTgsNyBAQCB2b2lkIEhlYXA6OnJlbGVhc2VEZWxheWVkUmVsZWFzZWRPYmplY3RzCiAg
ICAgLy8gYW5kIHVzZSBhIHRlbXAgVmVjdG9yIGZvciB0aGUgYWN0dWFsIHJlbGVhc2luZy4KICAg
ICBpZiAoIW1fZGVsYXllZFJlbGVhc2VSZWN1cnNpb25Db3VudCsrKSB7CiAgICAgICAgIHdoaWxl
ICghbV9kZWxheWVkUmVsZWFzZU9iamVjdHMuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBBU1NF
UlQobV92bS0+Y3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7CisgICAgICAgICAgICBB
U1NFUlQobV92bS5jdXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsKIAogICAgICAgICAg
ICAgYXV0byBvYmplY3RzVG9SZWxlYXNlID0gV1RGTW92ZShtX2RlbGF5ZWRSZWxlYXNlT2JqZWN0
cyk7CiAKQEAgLTU3MSw3ICs1NzEsNyBAQCB2b2lkIEhlYXA6OnJlcG9ydEFiYW5kb25lZE9iamVj
dEdyYXBoKCkKIHZvaWQgSGVhcDo6cHJvdGVjdChKU1ZhbHVlIGspCiB7CiAgICAgQVNTRVJUKGsp
OwotICAgIEFTU0VSVChtX3ZtLT5jdXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsKKyAg
ICBBU1NFUlQobV92bS5jdXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsKIAogICAgIGlm
ICghay5pc0NlbGwoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNTgyLDcgKzU4Miw3IEBAIHZvaWQg
SGVhcDo6cHJvdGVjdChKU1ZhbHVlIGspCiBib29sIEhlYXA6OnVucHJvdGVjdChKU1ZhbHVlIGsp
CiB7CiAgICAgQVNTRVJUKGspOwotICAgIEFTU0VSVChtX3ZtLT5jdXJyZW50VGhyZWFkSXNIb2xk
aW5nQVBJTG9jaygpKTsKKyAgICBBU1NFUlQobV92bS5jdXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJ
TG9jaygpKTsKIAogICAgIGlmICghay5pc0NlbGwoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpA
QCAtNjAzLDM0ICs2MDMsMzQgQEAgdm9pZCBIZWFwOjpmaW5hbGl6ZU1hcmtlZFVuY29uZGl0aW9u
YWxGaQogewogICAgIGNlbGxTZXQuZm9yRWFjaE1hcmtlZENlbGwoCiAgICAgICAgIFsmXSAoSGVh
cENlbGwqIGNlbGwsIEhlYXBDZWxsOjpLaW5kKSB7Ci0gICAgICAgICAgICBzdGF0aWNfY2FzdDxD
ZWxsVHlwZSo+KGNlbGwpLT5maW5hbGl6ZVVuY29uZGl0aW9uYWxseSgqdm0oKSk7CisgICAgICAg
ICAgICBzdGF0aWNfY2FzdDxDZWxsVHlwZSo+KGNlbGwpLT5maW5hbGl6ZVVuY29uZGl0aW9uYWxs
eSh2bSgpKTsKICAgICAgICAgfSk7CiB9CiAKIHZvaWQgSGVhcDo6ZmluYWxpemVVbmNvbmRpdGlv
bmFsRmluYWxpemVycygpCiB7Ci0gICAgdm0oKS0+YnVpbHRpbkV4ZWN1dGFibGVzKCktPmZpbmFs
aXplVW5jb25kaXRpb25hbGx5KCk7Ci0gICAgZmluYWxpemVNYXJrZWRVbmNvbmRpdGlvbmFsRmlu
YWxpemVyczxGdW5jdGlvbkV4ZWN1dGFibGU+KHZtKCktPmZ1bmN0aW9uRXhlY3V0YWJsZVNwYWNl
LnNwYWNlKTsKLSAgICBmaW5hbGl6ZU1hcmtlZFVuY29uZGl0aW9uYWxGaW5hbGl6ZXJzPFN5bWJv
bFRhYmxlPih2bSgpLT5zeW1ib2xUYWJsZVNwYWNlKTsKLSAgICB2bSgpLT5mb3JFYWNoQ29kZUJs
b2NrU3BhY2UoCisgICAgdm0oKS5idWlsdGluRXhlY3V0YWJsZXMoKS0+ZmluYWxpemVVbmNvbmRp
dGlvbmFsbHkoKTsKKyAgICBmaW5hbGl6ZU1hcmtlZFVuY29uZGl0aW9uYWxGaW5hbGl6ZXJzPEZ1
bmN0aW9uRXhlY3V0YWJsZT4odm0oKS5mdW5jdGlvbkV4ZWN1dGFibGVTcGFjZS5zcGFjZSk7Cisg
ICAgZmluYWxpemVNYXJrZWRVbmNvbmRpdGlvbmFsRmluYWxpemVyczxTeW1ib2xUYWJsZT4odm0o
KS5zeW1ib2xUYWJsZVNwYWNlKTsKKyAgICB2bSgpLmZvckVhY2hDb2RlQmxvY2tTcGFjZSgKICAg
ICAgICAgWyZdIChhdXRvJiBzcGFjZSkgewogICAgICAgICAgICAgdGhpcy0+ZmluYWxpemVNYXJr
ZWRVbmNvbmRpdGlvbmFsRmluYWxpemVyczxDb2RlQmxvY2s+KHNwYWNlLnNldCk7CiAgICAgICAg
IH0pOwotICAgIGZpbmFsaXplTWFya2VkVW5jb25kaXRpb25hbEZpbmFsaXplcnM8RXhlY3V0YWJs
ZVRvQ29kZUJsb2NrRWRnZT4odm0oKS0+ZXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZXNXaXRoRmlu
YWxpemVycyk7Ci0gICAgZmluYWxpemVNYXJrZWRVbmNvbmRpdGlvbmFsRmluYWxpemVyczxTdHJ1
Y3R1cmVSYXJlRGF0YT4odm0oKS0+c3RydWN0dXJlUmFyZURhdGFTcGFjZSk7Ci0gICAgZmluYWxp
emVNYXJrZWRVbmNvbmRpdGlvbmFsRmluYWxpemVyczxVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJs
ZT4odm0oKS0+dW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGVTcGFjZS5zZXQpOwotICAgIGlmICh2
bSgpLT5tX3dlYWtTZXRTcGFjZSkKLSAgICAgICAgZmluYWxpemVNYXJrZWRVbmNvbmRpdGlvbmFs
RmluYWxpemVyczxKU1dlYWtTZXQ+KCp2bSgpLT5tX3dlYWtTZXRTcGFjZSk7Ci0gICAgaWYgKHZt
KCktPm1fd2Vha01hcFNwYWNlKQotICAgICAgICBmaW5hbGl6ZU1hcmtlZFVuY29uZGl0aW9uYWxG
aW5hbGl6ZXJzPEpTV2Vha01hcD4oKnZtKCktPm1fd2Vha01hcFNwYWNlKTsKLSAgICBpZiAodm0o
KS0+bV93ZWFrT2JqZWN0UmVmU3BhY2UpCi0gICAgICAgIGZpbmFsaXplTWFya2VkVW5jb25kaXRp
b25hbEZpbmFsaXplcnM8SlNXZWFrT2JqZWN0UmVmPigqdm0oKS0+bV93ZWFrT2JqZWN0UmVmU3Bh
Y2UpOwotICAgIGlmICh2bSgpLT5tX2Vycm9ySW5zdGFuY2VTcGFjZSkKLSAgICAgICAgZmluYWxp
emVNYXJrZWRVbmNvbmRpdGlvbmFsRmluYWxpemVyczxFcnJvckluc3RhbmNlPigqdm0oKS0+bV9l
cnJvckluc3RhbmNlU3BhY2UpOworICAgIGZpbmFsaXplTWFya2VkVW5jb25kaXRpb25hbEZpbmFs
aXplcnM8RXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZT4odm0oKS5leGVjdXRhYmxlVG9Db2RlQmxv
Y2tFZGdlc1dpdGhGaW5hbGl6ZXJzKTsKKyAgICBmaW5hbGl6ZU1hcmtlZFVuY29uZGl0aW9uYWxG
aW5hbGl6ZXJzPFN0cnVjdHVyZVJhcmVEYXRhPih2bSgpLnN0cnVjdHVyZVJhcmVEYXRhU3BhY2Up
OworICAgIGZpbmFsaXplTWFya2VkVW5jb25kaXRpb25hbEZpbmFsaXplcnM8VW5saW5rZWRGdW5j
dGlvbkV4ZWN1dGFibGU+KHZtKCkudW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGVTcGFjZS5zZXQp
OworICAgIGlmICh2bSgpLm1fd2Vha1NldFNwYWNlKQorICAgICAgICBmaW5hbGl6ZU1hcmtlZFVu
Y29uZGl0aW9uYWxGaW5hbGl6ZXJzPEpTV2Vha1NldD4oKnZtKCkubV93ZWFrU2V0U3BhY2UpOwor
ICAgIGlmICh2bSgpLm1fd2Vha01hcFNwYWNlKQorICAgICAgICBmaW5hbGl6ZU1hcmtlZFVuY29u
ZGl0aW9uYWxGaW5hbGl6ZXJzPEpTV2Vha01hcD4oKnZtKCkubV93ZWFrTWFwU3BhY2UpOworICAg
IGlmICh2bSgpLm1fd2Vha09iamVjdFJlZlNwYWNlKQorICAgICAgICBmaW5hbGl6ZU1hcmtlZFVu
Y29uZGl0aW9uYWxGaW5hbGl6ZXJzPEpTV2Vha09iamVjdFJlZj4oKnZtKCkubV93ZWFrT2JqZWN0
UmVmU3BhY2UpOworICAgIGlmICh2bSgpLm1fZXJyb3JJbnN0YW5jZVNwYWNlKQorICAgICAgICBm
aW5hbGl6ZU1hcmtlZFVuY29uZGl0aW9uYWxGaW5hbGl6ZXJzPEVycm9ySW5zdGFuY2U+KCp2bSgp
Lm1fZXJyb3JJbnN0YW5jZVNwYWNlKTsKIAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKLSAgICBp
ZiAodm0oKS0+bV93ZWJBc3NlbWJseUNvZGVCbG9ja1NwYWNlKQotICAgICAgICBmaW5hbGl6ZU1h
cmtlZFVuY29uZGl0aW9uYWxGaW5hbGl6ZXJzPEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s+KCp2bSgp
LT5tX3dlYkFzc2VtYmx5Q29kZUJsb2NrU3BhY2UpOworICAgIGlmICh2bSgpLm1fd2ViQXNzZW1i
bHlDb2RlQmxvY2tTcGFjZSkKKyAgICAgICAgZmluYWxpemVNYXJrZWRVbmNvbmRpdGlvbmFsRmlu
YWxpemVyczxKU1dlYkFzc2VtYmx5Q29kZUJsb2NrPigqdm0oKS5tX3dlYkFzc2VtYmx5Q29kZUJs
b2NrU3BhY2UpOwogI2VuZGlmCiB9CiAKQEAgLTY0OSw5ICs2NDksOSBAQCB2b2lkIEhlYXA6OmNv
bXBsZXRlQWxsSklUUGxhbnMoKQogICAgIGlmICghVk06OmNhblVzZUpJVCgpKQogICAgICAgICBy
ZXR1cm47CiAjaWYgRU5BQkxFKEpJVCkKLSAgICBKSVRXb3JrbGlzdDo6ZW5zdXJlR2xvYmFsV29y
a2xpc3QoKS5jb21wbGV0ZUFsbEZvclZNKCptX3ZtKTsKKyAgICBKSVRXb3JrbGlzdDo6ZW5zdXJl
R2xvYmFsV29ya2xpc3QoKS5jb21wbGV0ZUFsbEZvclZNKG1fdm0pOwogI2VuZGlmIC8vIEVOQUJM
RShKSVQpCi0gICAgREZHOjpjb21wbGV0ZUFsbFBsYW5zRm9yVk0oKm1fdm0pOworICAgIERGRzo6
Y29tcGxldGVBbGxQbGFuc0ZvclZNKG1fdm0pOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
PgpAQCAtNjU5LDcgKzY1OSw3IEBAIHZvaWQgSGVhcDo6aXRlcmF0ZUV4ZWN1dGluZ0FuZENvbXBp
bGluZ0MKIHsKICAgICBtX2NvZGVCbG9ja3MtPml0ZXJhdGVDdXJyZW50bHlFeGVjdXRpbmcoZnVu
Yyk7CiAgICAgaWYgKFZNOjpjYW5Vc2VKSVQoKSkKLSAgICAgICAgREZHOjppdGVyYXRlQ29kZUJs
b2Nrc0ZvckdDKCptX3ZtLCBmdW5jKTsKKyAgICAgICAgREZHOjppdGVyYXRlQ29kZUJsb2Nrc0Zv
ckdDKG1fdm0sIGZ1bmMpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgpAQCAtNzA4LDcg
KzcwOCw3IEBAIHZvaWQgSGVhcDo6Z2F0aGVyU3RhY2tSb290cyhDb25zZXJ2YXRpdmUKIHZvaWQg
SGVhcDo6Z2F0aGVySlNTdGFja1Jvb3RzKENvbnNlcnZhdGl2ZVJvb3RzJiByb290cykKIHsKICNp
ZiBFTkFCTEUoQ19MT09QKQotICAgIG1fdm0tPmludGVycHJldGVyLT5jbG9vcFN0YWNrKCkuZ2F0
aGVyQ29uc2VydmF0aXZlUm9vdHMocm9vdHMsICptX2ppdFN0dWJSb3V0aW5lcywgKm1fY29kZUJs
b2Nrcyk7CisgICAgbV92bS5pbnRlcnByZXRlci0+Y2xvb3BTdGFjaygpLmdhdGhlckNvbnNlcnZh
dGl2ZVJvb3RzKHJvb3RzLCAqbV9qaXRTdHViUm91dGluZXMsICptX2NvZGVCbG9ja3MpOwogI2Vs
c2UKICAgICBVTlVTRURfUEFSQU0ocm9vdHMpOwogI2VuZGlmCkBAIC03MTksNyArNzE5LDcgQEAg
dm9pZCBIZWFwOjpnYXRoZXJTY3JhdGNoQnVmZmVyUm9vdHMoQ29ucwogI2lmIEVOQUJMRShERkdf
SklUKQogICAgIGlmICghVk06OmNhblVzZUpJVCgpKQogICAgICAgICByZXR1cm47Ci0gICAgbV92
bS0+Z2F0aGVyU2NyYXRjaEJ1ZmZlclJvb3RzKHJvb3RzKTsKKyAgICBtX3ZtLmdhdGhlclNjcmF0
Y2hCdWZmZXJSb290cyhyb290cyk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShyb290cyk7CiAj
ZW5kaWYKQEAgLTczOSwxMyArNzM5LDEzIEBAIHZvaWQgSGVhcDo6cmVtb3ZlRGVhZENvbXBpbGVy
V29ya2xpc3RFbnQKICAgICBpZiAoIVZNOjpjYW5Vc2VKSVQoKSkKICAgICAgICAgcmV0dXJuOwog
ICAgIGZvciAodW5zaWduZWQgaSA9IERGRzo6bnVtYmVyT2ZXb3JrbGlzdHMoKTsgaS0tOykKLSAg
ICAgICAgREZHOjpleGlzdGluZ1dvcmtsaXN0Rm9ySW5kZXgoaSkucmVtb3ZlRGVhZFBsYW5zKCpt
X3ZtKTsKKyAgICAgICAgREZHOjpleGlzdGluZ1dvcmtsaXN0Rm9ySW5kZXgoaSkucmVtb3ZlRGVh
ZFBsYW5zKG1fdm0pOwogI2VuZGlmCiB9CiAKIGJvb2wgSGVhcDo6aXNBbmFseXppbmdIZWFwKCkg
Y29uc3QKIHsKLSAgICBIZWFwUHJvZmlsZXIqIGhlYXBQcm9maWxlciA9IG1fdm0tPmhlYXBQcm9m
aWxlcigpOworICAgIEhlYXBQcm9maWxlciogaGVhcFByb2ZpbGVyID0gbV92bS5oZWFwUHJvZmls
ZXIoKTsKICAgICBpZiAoVU5MSUtFTFkoaGVhcFByb2ZpbGVyKSkKICAgICAgICAgcmV0dXJuIGhl
YXBQcm9maWxlci0+YWN0aXZlSGVhcEFuYWx5emVyKCk7CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAt
Nzc1LDcgKzc3NSw3IEBAIHZvaWQgSGVhcDo6Z2F0aGVyRXh0cmFIZWFwRGF0YShIZWFwUHJvZmkK
IHsKICAgICBpZiAoYXV0byogYW5hbHl6ZXIgPSBoZWFwUHJvZmlsZXIuYWN0aXZlSGVhcEFuYWx5
emVyKCkpIHsKICAgICAgICAgSGVhcEl0ZXJhdGlvblNjb3BlIGhlYXBJdGVyYXRpb25TY29wZSgq
dGhpcyk7Ci0gICAgICAgIEdhdGhlckV4dHJhSGVhcERhdGEgZnVuY3RvcigqbV92bSwgKmFuYWx5
emVyKTsKKyAgICAgICAgR2F0aGVyRXh0cmFIZWFwRGF0YSBmdW5jdG9yKG1fdm0sICphbmFseXpl
cik7CiAgICAgICAgIG1fb2JqZWN0U3BhY2UuZm9yRWFjaExpdmVDZWxsKGhlYXBJdGVyYXRpb25T
Y29wZSwgZnVuY3Rvcik7CiAgICAgfQogfQpAQCAtOTAyLDcgKzkwMiw3IEBAIHN0ZDo6dW5pcXVl
X3B0cjxUeXBlQ291bnRTZXQ+IEhlYXA6OnByb3QKICAgICBzdGQ6OnVuaXF1ZV9wdHI8VHlwZUNv
dW50U2V0PiByZXN1bHQgPSBtYWtlVW5pcXVlPFR5cGVDb3VudFNldD4oKTsKICAgICBmb3JFYWNo
UHJvdGVjdGVkQ2VsbCgKICAgICAgICAgWyZdIChKU0NlbGwqIGNlbGwpIHsKLSAgICAgICAgICAg
IHJlY29yZFR5cGUoKnZtKCksICpyZXN1bHQsIGNlbGwpOworICAgICAgICAgICAgcmVjb3JkVHlw
ZSh2bSgpLCAqcmVzdWx0LCBjZWxsKTsKICAgICAgICAgfSk7CiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KQEAgLTkxNSw3ICs5MTUsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8VHlwZUNvdW50U2V0PiBIZWFw
OjpvYmplCiAgICAgICAgIGl0ZXJhdGlvblNjb3BlLAogICAgICAgICBbJl0gKEhlYXBDZWxsKiBj
ZWxsLCBIZWFwQ2VsbDo6S2luZCBraW5kKSAtPiBJdGVyYXRpb25TdGF0dXMgewogICAgICAgICAg
ICAgaWYgKGlzSlNDZWxsS2luZChraW5kKSkKLSAgICAgICAgICAgICAgICByZWNvcmRUeXBlKCp2
bSgpLCAqcmVzdWx0LCBzdGF0aWNfY2FzdDxKU0NlbGwqPihjZWxsKSk7CisgICAgICAgICAgICAg
ICAgcmVjb3JkVHlwZSh2bSgpLCAqcmVzdWx0LCBzdGF0aWNfY2FzdDxKU0NlbGwqPihjZWxsKSk7
CiAgICAgICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpDb250aW51ZTsKICAgICAgICAg
fSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTkyNiw3ICs5MjYsNyBAQCB2b2lkIEhlYXA6OmRl
bGV0ZUFsbENvZGVCbG9ja3MoRGVsZXRlQWxsCiAgICAgaWYgKG1fY29sbGVjdGlvblNjb3BlICYm
IGVmZm9ydCA9PSBEZWxldGVBbGxDb2RlSWZOb3RDb2xsZWN0aW5nKQogICAgICAgICByZXR1cm47
CiAKLSAgICBWTSYgdm0gPSAqbV92bTsKKyAgICBWTSYgdm0gPSBtX3ZtOwogICAgIFByZXZlbnRD
b2xsZWN0aW9uU2NvcGUgcHJldmVudENvbGxlY3Rpb25TY29wZSgqdGhpcyk7CiAgICAgCiAgICAg
Ly8gSWYgSmF2YVNjcmlwdCBpcyBydW5uaW5nLCBpdCdzIG5vdCBzYWZlIHRvIGRlbGV0ZSBhbGwg
SmF2YVNjcmlwdCBjb2RlLCBzaW5jZQpAQCAtOTcxLDcgKzk3MSw3IEBAIHZvaWQgSGVhcDo6ZGVs
ZXRlQWxsVW5saW5rZWRDb2RlQmxvY2tzKEQKICAgICBpZiAobV9jb2xsZWN0aW9uU2NvcGUgJiYg
ZWZmb3J0ID09IERlbGV0ZUFsbENvZGVJZk5vdENvbGxlY3RpbmcpCiAgICAgICAgIHJldHVybjsK
IAotICAgIFZNJiB2bSA9ICptX3ZtOworICAgIFZNJiB2bSA9IG1fdm07CiAgICAgUHJldmVudENv
bGxlY3Rpb25TY29wZSBwcmV2ZW50Q29sbGVjdGlvblNjb3BlKCp0aGlzKTsKIAogICAgIFJFTEVB
U0VfQVNTRVJUKCFtX2NvbGxlY3Rpb25TY29wZSk7CkBAIC05ODYsOCArOTg2LDggQEAgdm9pZCBI
ZWFwOjpkZWxldGVBbGxVbmxpbmtlZENvZGVCbG9ja3MoRAogCiB2b2lkIEhlYXA6OmRlbGV0ZVVu
bWFya2VkQ29tcGlsZWRDb2RlKCkKIHsKLSAgICB2bSgpLT5mb3JFYWNoU2NyaXB0RXhlY3V0YWJs
ZVNwYWNlKFtdIChhdXRvJiBzcGFjZSkgeyBzcGFjZS5zcGFjZS5zd2VlcCgpOyB9KTsKLSAgICB2
bSgpLT5mb3JFYWNoQ29kZUJsb2NrU3BhY2UoW10gKGF1dG8mIHNwYWNlKSB7IHNwYWNlLnNwYWNl
LnN3ZWVwKCk7IH0pOyAvLyBTd2VlcGluZyBtdXN0IG9jY3VyIGJlZm9yZSBkZWxldGluZyBzdHVi
cywgb3RoZXJ3aXNlIHRoZSBzdHVicyBtaWdodCBzdGlsbCB0aGluayB0aGV5J3JlIGFsaXZlIGFz
IHRoZXkgZ2V0IGRlbGV0ZWQuCisgICAgdm0oKS5mb3JFYWNoU2NyaXB0RXhlY3V0YWJsZVNwYWNl
KFtdIChhdXRvJiBzcGFjZSkgeyBzcGFjZS5zcGFjZS5zd2VlcCgpOyB9KTsKKyAgICB2bSgpLmZv
ckVhY2hDb2RlQmxvY2tTcGFjZShbXSAoYXV0byYgc3BhY2UpIHsgc3BhY2Uuc3BhY2Uuc3dlZXAo
KTsgfSk7IC8vIFN3ZWVwaW5nIG11c3Qgb2NjdXIgYmVmb3JlIGRlbGV0aW5nIHN0dWJzLCBvdGhl
cndpc2UgdGhlIHN0dWJzIG1pZ2h0IHN0aWxsIHRoaW5rIHRoZXkncmUgYWxpdmUgYXMgdGhleSBn
ZXQgZGVsZXRlZC4KICAgICBtX2ppdFN0dWJSb3V0aW5lcy0+ZGVsZXRlVW5tYXJrZWRKZXR0aXNv
bmVkU3R1YlJvdXRpbmVzKCk7CiB9CiAKQEAgLTExODEsMTAgKzExODEsMTAgQEAgdm9pZCBIZWFw
OjpjaGVja0Nvbm4oR0NDb25kdWN0b3IgY29ubikKICAgICB1bnNpZ25lZCB3b3JsZFN0YXRlID0g
bV93b3JsZFN0YXRlLmxvYWQoKTsKICAgICBzd2l0Y2ggKGNvbm4pIHsKICAgICBjYXNlIEdDQ29u
ZHVjdG9yOjpNdXRhdG9yOgotICAgICAgICBSRUxFQVNFX0FTU0VSVCh3b3JsZFN0YXRlICYgbXV0
YXRvckhhc0Nvbm5CaXQsIHdvcmxkU3RhdGUsIGFzSW50KG1fbGFzdFBoYXNlKSwgYXNJbnQobV9j
dXJyZW50UGhhc2UpLCBhc0ludChtX25leHRQaGFzZSksIHZtKCktPmlkKCksIFZNOjpudW1iZXJP
ZklEcygpLCB2bSgpLT5pc0VudGVyZWQoKSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHdvcmxk
U3RhdGUgJiBtdXRhdG9ySGFzQ29ubkJpdCwgd29ybGRTdGF0ZSwgYXNJbnQobV9sYXN0UGhhc2Up
LCBhc0ludChtX2N1cnJlbnRQaGFzZSksIGFzSW50KG1fbmV4dFBoYXNlKSwgdm0oKS5pZCgpLCBW
TTo6bnVtYmVyT2ZJRHMoKSwgdm0oKS5pc0VudGVyZWQoKSk7CiAgICAgICAgIHJldHVybjsKICAg
ICBjYXNlIEdDQ29uZHVjdG9yOjpDb2xsZWN0b3I6Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKCEo
d29ybGRTdGF0ZSAmIG11dGF0b3JIYXNDb25uQml0KSwgd29ybGRTdGF0ZSwgYXNJbnQobV9sYXN0
UGhhc2UpLCBhc0ludChtX2N1cnJlbnRQaGFzZSksIGFzSW50KG1fbmV4dFBoYXNlKSwgdm0oKS0+
aWQoKSwgVk06Om51bWJlck9mSURzKCksIHZtKCktPmlzRW50ZXJlZCgpKTsKKyAgICAgICAgUkVM
RUFTRV9BU1NFUlQoISh3b3JsZFN0YXRlICYgbXV0YXRvckhhc0Nvbm5CaXQpLCB3b3JsZFN0YXRl
LCBhc0ludChtX2xhc3RQaGFzZSksIGFzSW50KG1fY3VycmVudFBoYXNlKSwgYXNJbnQobV9uZXh0
UGhhc2UpLCB2bSgpLmlkKCksIFZNOjpudW1iZXJPZklEcygpLCB2bSgpLmlzRW50ZXJlZCgpKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwpAQCAtMTUwOCw4ICsxNTA4LDggQEAgTkVWRVJfSU5MSU5FIGJvb2wgSGVhcDo6cnVuRW5kUGhh
c2UoR0NDbwogICAgICAgICBtX3ZlcmlmaWVyLT52ZXJpZnkoSGVhcFZlcmlmaWVyOjpQaGFzZTo6
QWZ0ZXJNYXJraW5nKTsKICAgICB9CiAgICAgICAgIAotICAgIGlmICh2bSgpLT50eXBlUHJvZmls
ZXIoKSkKLSAgICAgICAgdm0oKS0+dHlwZVByb2ZpbGVyKCktPmludmFsaWRhdGVUeXBlU2V0Q2Fj
aGUoKnZtKCkpOworICAgIGlmICh2bSgpLnR5cGVQcm9maWxlcigpKQorICAgICAgICB2bSgpLnR5
cGVQcm9maWxlcigpLT5pbnZhbGlkYXRlVHlwZVNldENhY2hlKHZtKCkpOwogCiAgICAgcmVhcFdl
YWtIYW5kbGVzKCk7CiAgICAgcHJ1bmVTdGFsZUVudHJpZXNGcm9tV2Vha0dDTWFwcygpOwpAQCAt
MTY0OCwxNSArMTY0OCwxNSBAQCB2b2lkIEhlYXA6OnN0b3BUaGVQZXJpcGhlcnkoR0NDb25kdWN0
b3IgCiAjaWYgRU5BQkxFKEpJVCkKICAgICBpZiAoVk06OmNhblVzZUpJVCgpKSB7CiAgICAgICAg
IERlZmVyR0NGb3JBV2hpbGUgYXdoaWxlKCp0aGlzKTsKLSAgICAgICAgaWYgKEpJVFdvcmtsaXN0
OjplbnN1cmVHbG9iYWxXb3JrbGlzdCgpLmNvbXBsZXRlQWxsRm9yVk0oKm1fdm0pCisgICAgICAg
IGlmIChKSVRXb3JrbGlzdDo6ZW5zdXJlR2xvYmFsV29ya2xpc3QoKS5jb21wbGV0ZUFsbEZvclZN
KG1fdm0pCiAgICAgICAgICAgICAmJiBjb25uID09IEdDQ29uZHVjdG9yOjpDb2xsZWN0b3IpCiAg
ICAgICAgICAgICBzZXRHQ0RpZEpJVCgpOwogICAgIH0KICNlbmRpZiAvLyBFTkFCTEUoSklUKQog
ICAgIFVOVVNFRF9QQVJBTShjb25uKTsKICAgICAKLSAgICBpZiAoYXV0byogc2hhZG93Q2hpY2tl
biA9IHZtKCktPnNoYWRvd0NoaWNrZW4oKSkKLSAgICAgICAgc2hhZG93Q2hpY2tlbi0+dXBkYXRl
KCp2bSgpLCB2bSgpLT50b3BDYWxsRnJhbWUpOworICAgIGlmIChhdXRvKiBzaGFkb3dDaGlja2Vu
ID0gdm0oKS5zaGFkb3dDaGlja2VuKCkpCisgICAgICAgIHNoYWRvd0NoaWNrZW4tPnVwZGF0ZSh2
bSgpLCB2bSgpLnRvcENhbGxGcmFtZSk7CiAgICAgCiAgICAgbV9zdHJ1Y3R1cmVJRFRhYmxlLmZs
dXNoT2xkVGFibGVzKCk7CiAgICAgbV9vYmplY3RTcGFjZS5zdG9wQWxsb2NhdGluZygpOwpAQCAt
MjA5NywxMyArMjA5NywxMyBAQCB2b2lkIEhlYXA6OmZpbmFsaXplKCkKICAgICAgICAgc3dlZXBJ
bkZpbmFsaXplKCk7CiAgICAgfQogICAgIAotICAgIGlmIChIYXNPd25Qcm9wZXJ0eUNhY2hlKiBj
YWNoZSA9IHZtKCktPmhhc093blByb3BlcnR5Q2FjaGUoKSkKKyAgICBpZiAoSGFzT3duUHJvcGVy
dHlDYWNoZSogY2FjaGUgPSB2bSgpLmhhc093blByb3BlcnR5Q2FjaGUoKSkKICAgICAgICAgY2Fj
aGUtPmNsZWFyKCk7CiAKICAgICBpbW11dGFibGVCdXR0ZXJmbHlUb1N0cmluZ0NhY2hlLmNsZWFy
KCk7CiAgICAgCiAgICAgZm9yIChjb25zdCBIZWFwRmluYWxpemVyQ2FsbGJhY2smIGNhbGxiYWNr
IDogbV9oZWFwRmluYWxpemVyQ2FsbGJhY2tzKQotICAgICAgICBjYWxsYmFjay5ydW4oKnZtKCkp
OworICAgICAgICBjYWxsYmFjay5ydW4odm0oKSk7CiAgICAgCiAgICAgaWYgKHNob3VsZFN3ZWVw
U3luY2hyb25vdXNseSgpKQogICAgICAgICBzd2VlcFN5bmNocm9ub3VzbHkoKTsKQEAgLTIxMTgs
OCArMjExOCw4IEBAIEhlYXA6OlRpY2tldCBIZWFwOjpyZXF1ZXN0Q29sbGVjdGlvbihHQ1IKIHsK
ICAgICBzdG9wSWZOZWNlc3NhcnkoKTsKICAgICAKLSAgICBBU1NFUlQodm0oKS0+Y3VycmVudFRo
cmVhZElzSG9sZGluZ0FQSUxvY2soKSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQodm0oKS0+YXRvbVN0
cmluZ1RhYmxlKCkgPT0gVGhyZWFkOjpjdXJyZW50KCkuYXRvbVN0cmluZ1RhYmxlKCkpOworICAg
IEFTU0VSVCh2bSgpLmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOworICAgIFJFTEVB
U0VfQVNTRVJUKHZtKCkuYXRvbVN0cmluZ1RhYmxlKCkgPT0gVGhyZWFkOjpjdXJyZW50KCkuYXRv
bVN0cmluZ1RhYmxlKCkpOwogICAgIAogICAgIExvY2tIb2xkZXIgbG9ja2VyKCptX3RocmVhZExv
Y2spOwogICAgIC8vIFdlIG1heSBiZSBhYmxlIHRvIHN0ZWFsIHRoZSBjb25uLiBUaGF0IG9ubHkg
d29ya3MgaWYgdGhlIGNvbGxlY3RvciBpcyBkZWZpbml0ZWx5IG5vdCBydW5uaW5nCkBAIC0yMTUw
LDcgKzIxNTAsNyBAQCB2b2lkIEhlYXA6OndhaXRGb3JDb2xsZWN0aW9uKFRpY2tldCB0aWNrCiB2
b2lkIEhlYXA6OnN3ZWVwSW5GaW5hbGl6ZSgpCiB7CiAgICAgbV9vYmplY3RTcGFjZS5zd2VlcExh
cmdlQWxsb2NhdGlvbnMoKTsKLSAgICB2bSgpLT5lYWdlcmx5U3dlcHREZXN0cnVjdGlibGVPYmpl
Y3RTcGFjZS5zd2VlcCgpOworICAgIHZtKCkuZWFnZXJseVN3ZXB0RGVzdHJ1Y3RpYmxlT2JqZWN0
U3BhY2Uuc3dlZXAoKTsKIH0KIAogdm9pZCBIZWFwOjpzdXNwZW5kQ29tcGlsZXJUaHJlYWRzKCkK
QEAgLTIyMjcsNyArMjIyNyw3IEBAIHZvaWQgSGVhcDo6cHJ1bmVTdGFsZUVudHJpZXNGcm9tV2Vh
a0dDTWEKIAogdm9pZCBIZWFwOjpzd2VlcEFycmF5QnVmZmVycygpCiB7Ci0gICAgbV9hcnJheUJ1
ZmZlcnMuc3dlZXAoKnZtKCkpOworICAgIG1fYXJyYXlCdWZmZXJzLnN3ZWVwKHZtKCkpOwogfQog
CiB2b2lkIEhlYXA6OnNuYXBzaG90VW5zd2VwdCgpCkBAIC0yMjM5LDcgKzIyMzksNyBAQCB2b2lk
IEhlYXA6OnNuYXBzaG90VW5zd2VwdCgpCiB2b2lkIEhlYXA6OmRlbGV0ZVNvdXJjZVByb3ZpZGVy
Q2FjaGVzKCkKIHsKICAgICBpZiAobV9sYXN0Q29sbGVjdGlvblNjb3BlICYmIG1fbGFzdENvbGxl
Y3Rpb25TY29wZS52YWx1ZSgpID09IENvbGxlY3Rpb25TY29wZTo6RnVsbCkKLSAgICAgICAgbV92
bS0+Y2xlYXJTb3VyY2VQcm92aWRlckNhY2hlcygpOworICAgICAgICBtX3ZtLmNsZWFyU291cmNl
UHJvdmlkZXJDYWNoZXMoKTsKIH0KIAogdm9pZCBIZWFwOjpub3RpZnlJbmNyZW1lbnRhbFN3ZWVw
ZXIoKQpAQCAtMjM1OSw3ICsyMzU5LDcgQEAgdm9pZCBIZWFwOjpkaWRGaW5pc2hDb2xsZWN0aW9u
KCkKICAgICBBU1NFUlQoZXh0ZXJuYWxNZW1vcnlTaXplKCkgPD0gZXh0cmFNZW1vcnlTaXplKCkp
OwogI2VuZGlmCiAKLSAgICBpZiAoSGVhcFByb2ZpbGVyKiBoZWFwUHJvZmlsZXIgPSBtX3ZtLT5o
ZWFwUHJvZmlsZXIoKSkgeworICAgIGlmIChIZWFwUHJvZmlsZXIqIGhlYXBQcm9maWxlciA9IG1f
dm0uaGVhcFByb2ZpbGVyKCkpIHsKICAgICAgICAgZ2F0aGVyRXh0cmFIZWFwRGF0YSgqaGVhcFBy
b2ZpbGVyKTsKICAgICAgICAgcmVtb3ZlRGVhZEhlYXBTbmFwc2hvdE5vZGVzKCpoZWFwUHJvZmls
ZXIpOwogICAgIH0KQEAgLTI3MjksMTEgKzI3MjksMTEgQEAgdm9pZCBIZWFwOjphZGRDb3JlQ29u
c3RyYWludHMoKQogICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikgewog
CiAjaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKLSAgICAgICAgICAgIHNjYW5FeHRlcm5hbFJlbWVt
YmVyZWRTZXQoKm1fdm0sIHNsb3RWaXNpdG9yKTsKKyAgICAgICAgICAgIHNjYW5FeHRlcm5hbFJl
bWVtYmVyZWRTZXQobV92bSwgc2xvdFZpc2l0b3IpOwogI2VuZGlmCi0gICAgICAgICAgICBpZiAo
bV92bS0+c21hbGxTdHJpbmdzLm5lZWRzVG9CZVZpc2l0ZWQoKm1fY29sbGVjdGlvblNjb3BlKSkg
eworICAgICAgICAgICAgaWYgKG1fdm0uc21hbGxTdHJpbmdzLm5lZWRzVG9CZVZpc2l0ZWQoKm1f
Y29sbGVjdGlvblNjb3BlKSkgewogICAgICAgICAgICAgICAgIFNldFJvb3RNYXJrUmVhc29uU2Nv
cGUgcm9vdFNjb3BlKHNsb3RWaXNpdG9yLCBTbG90VmlzaXRvcjo6Um9vdE1hcmtSZWFzb246OlN0
cm9uZ1JlZmVyZW5jZXMpOwotICAgICAgICAgICAgICAgIG1fdm0tPnNtYWxsU3RyaW5ncy52aXNp
dFN0cm9uZ1JlZmVyZW5jZXMoc2xvdFZpc2l0b3IpOworICAgICAgICAgICAgICAgIG1fdm0uc21h
bGxTdHJpbmdzLnZpc2l0U3Ryb25nUmVmZXJlbmNlcyhzbG90VmlzaXRvcik7CiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIHsKQEAgLTI3NDksOCArMjc0OSw4IEBAIHZv
aWQgSGVhcDo6YWRkQ29yZUNvbnN0cmFpbnRzKCkKIAogICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgIFNldFJvb3RNYXJrUmVhc29uU2NvcGUgcm9vdFNjb3BlKHNsb3RWaXNpdG9yLCBTbG90
VmlzaXRvcjo6Um9vdE1hcmtSZWFzb246OlZNRXhjZXB0aW9ucyk7Ci0gICAgICAgICAgICAgICAg
c2xvdFZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQobV92bS0+ZXhjZXB0aW9uKCkpOwotICAgICAg
ICAgICAgICAgIHNsb3RWaXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKG1fdm0tPmxhc3RFeGNlcHRp
b24oKSk7CisgICAgICAgICAgICAgICAgc2xvdFZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQobV92
bS5leGNlcHRpb24oKSk7CisgICAgICAgICAgICAgICAgc2xvdFZpc2l0b3IuYXBwZW5kVW5iYXJy
aWVyZWQobV92bS5sYXN0RXhjZXB0aW9uKCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9LAog
ICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlFeGVjdXRpb24pOwpAQCAtMjc2
OSw3ICsyNzY5LDcgQEAgdm9pZCBIZWFwOjphZGRDb3JlQ29uc3RyYWludHMoKQogICAgICAgICAg
ICAgU2V0Um9vdE1hcmtSZWFzb25TY29wZSByb290U2NvcGUoc2xvdFZpc2l0b3IsIFNsb3RWaXNp
dG9yOjpSb290TWFya1JlYXNvbjo6RGVidWdnZXIpOwogCiAjaWYgRU5BQkxFKFNBTVBMSU5HX1BS
T0ZJTEVSKQotICAgICAgICAgICAgaWYgKFNhbXBsaW5nUHJvZmlsZXIqIHNhbXBsaW5nUHJvZmls
ZXIgPSBtX3ZtLT5zYW1wbGluZ1Byb2ZpbGVyKCkpIHsKKyAgICAgICAgICAgIGlmIChTYW1wbGlu
Z1Byb2ZpbGVyKiBzYW1wbGluZ1Byb2ZpbGVyID0gbV92bS5zYW1wbGluZ1Byb2ZpbGVyKCkpIHsK
ICAgICAgICAgICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihzYW1wbGluZ1Byb2ZpbGVyLT5nZXRM
b2NrKCkpOwogICAgICAgICAgICAgICAgIHNhbXBsaW5nUHJvZmlsZXItPnByb2Nlc3NVbnZlcmlm
aWVkU3RhY2tUcmFjZXMoKTsKICAgICAgICAgICAgICAgICBzYW1wbGluZ1Byb2ZpbGVyLT52aXNp
dChzbG90VmlzaXRvcik7CkBAIC0yNzc4LDEwICsyNzc4LDEwIEBAIHZvaWQgSGVhcDo6YWRkQ29y
ZUNvbnN0cmFpbnRzKCkKICAgICAgICAgICAgIH0KICNlbmRpZiAvLyBFTkFCTEUoU0FNUExJTkdf
UFJPRklMRVIpCiAKLSAgICAgICAgICAgIGlmIChtX3ZtLT50eXBlUHJvZmlsZXIoKSkKLSAgICAg
ICAgICAgICAgICBtX3ZtLT50eXBlUHJvZmlsZXJMb2coKS0+dmlzaXQoc2xvdFZpc2l0b3IpOwor
ICAgICAgICAgICAgaWYgKG1fdm0udHlwZVByb2ZpbGVyKCkpCisgICAgICAgICAgICAgICAgbV92
bS50eXBlUHJvZmlsZXJMb2coKS0+dmlzaXQoc2xvdFZpc2l0b3IpOwogICAgICAgICAgICAgCi0g
ICAgICAgICAgICBpZiAoYXV0byogc2hhZG93Q2hpY2tlbiA9IG1fdm0tPnNoYWRvd0NoaWNrZW4o
KSkKKyAgICAgICAgICAgIGlmIChhdXRvKiBzaGFkb3dDaGlja2VuID0gbV92bS5zaGFkb3dDaGlj
a2VuKCkpCiAgICAgICAgICAgICAgICAgc2hhZG93Q2hpY2tlbi0+dmlzaXRDaGlsZHJlbihzbG90
VmlzaXRvcik7CiAgICAgICAgIH0sCiAgICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5
ZWRCeUV4ZWN1dGlvbik7CkBAIC0yODMwLDcgKzI4MzAsNyBAQCB2b2lkIEhlYXA6OmFkZENvcmVD
b25zdHJhaW50cygpCiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgaXMgYWxtb3N0IGNl
cnRhaW5seSB1bm5lY2Vzc2FyeS4KICAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2ODI5CiAgICAgICAgICAgICAgICAgREZHOjppdGVy
YXRlQ29kZUJsb2Nrc0ZvckdDKAotICAgICAgICAgICAgICAgICAgICAqbV92bSwKKyAgICAgICAg
ICAgICAgICAgICAgbV92bSwKICAgICAgICAgICAgICAgICAgICAgWyZdIChDb2RlQmxvY2sqIGNv
ZGVCbG9jaykgewogICAgICAgICAgICAgICAgICAgICAgICAgc2xvdFZpc2l0b3IuYXBwZW5kVW5i
YXJyaWVyZWQoY29kZUJsb2NrKTsKICAgICAgICAgICAgICAgICAgICAgfSk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSGVhcC5oCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzOSwxMiArMTM5LDEyIEBA
IHB1YmxpYzoKICAgICAvLyBUYWtlIHRoaXMgaWYgeW91IGtub3cgdGhhdCBmcm9tLT5jZWxsU3Rh
dGUoKSA8IGJhcnJpZXJUaHJlc2hvbGQuCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCB3cml0
ZUJhcnJpZXJTbG93UGF0aChjb25zdCBKU0NlbGwqIGZyb20pOwogCi0gICAgSGVhcChWTSosIEhl
YXBUeXBlKTsKKyAgICBIZWFwKFZNJiwgSGVhcFR5cGUpOwogICAgIH5IZWFwKCk7CiAgICAgdm9p
ZCBsYXN0Q2hhbmNlVG9GaW5hbGl6ZSgpOwogICAgIHZvaWQgcmVsZWFzZURlbGF5ZWRSZWxlYXNl
ZE9iamVjdHMoKTsKIAotICAgIFZNKiB2bSgpIGNvbnN0OworICAgIFZNJiB2bSgpIGNvbnN0Owog
CiAgICAgTWFya2VkU3BhY2UmIG9iamVjdFNwYWNlKCkgeyByZXR1cm4gbV9vYmplY3RTcGFjZTsg
fQogICAgIE1hY2hpbmVUaHJlYWRzJiBtYWNoaW5lVGhyZWFkcygpIHsgcmV0dXJuICptX21hY2hp
bmVUaHJlYWRzOyB9CkBAIC02NDIsNyArNjQyLDcgQEAgcHJpdmF0ZToKIAogICAgIHVuc2lnbmVk
IG1fYmFycmllclRocmVzaG9sZCB7IE9wdGlvbnM6OmZvcmNlRmVuY2VkQmFycmllcigpID8gdGF1
dG9sb2dpY2FsVGhyZXNob2xkIDogYmxhY2tUaHJlc2hvbGQgfTsKIAotICAgIFZNKiBtX3ZtOwor
ICAgIFZNJiBtX3ZtOwogICAgIFNlY29uZHMgbV9sYXN0RnVsbEdDTGVuZ3RoIHsgMTBfbXMgfTsK
ICAgICBTZWNvbmRzIG1fbGFzdEVkZW5HQ0xlbmd0aCB7IDEwX21zIH07CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBDZWxsLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSGVhcENlbGwuaAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcENlbGwuaAkod29ya2luZyBjb3B5KQpAQCAtNzMsNyAr
NzMsNyBAQCBwdWJsaWM6CiAgICAgLy8gcmVjb21tZW5kZWQgdG8gdXNlIGl0IGZvciB0b28gbWFu
eSBvdGhlciB0aGluZ3MsIHNpbmNlIHRoZSBsYXJnZSBhbGxvY2F0aW9uIGN1dG9mZiBpcwogICAg
IC8vIGEgcnVudGltZSBvcHRpb24gYW5kIGl0cyBkZWZhdWx0IHZhbHVlIGlzIHNtYWxsICg0MDAg
Ynl0ZXMpLgogICAgIEhlYXAqIGhlYXAoKSBjb25zdDsKLSAgICBWTSogdm0oKSBjb25zdDsKKyAg
ICBWTSYgdm0oKSBjb25zdDsKICAgICAKICAgICBzaXplX3QgY2VsbFNpemUoKSBjb25zdDsKICAg
ICBDZWxsQXR0cmlidXRlcyBjZWxsQXR0cmlidXRlcygpIGNvbnN0OwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSGVhcENlbGxJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcENlbGxJbmxpbmVzLmgJKHJldmlzaW9uIDI0OTEyOCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBDZWxsSW5saW5lcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtNTYsMTAgKzU2LDEwIEBAIEFMV0FZU19JTkxJTkUgTGFyZ2VBbGxvY2F0aW9u
JiBIZWFwQ2VsbDoKIAogQUxXQVlTX0lOTElORSBIZWFwKiBIZWFwQ2VsbDo6aGVhcCgpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuICZ2bSgpLT5oZWFwOworICAgIHJldHVybiAmdm0oKS5oZWFwOwogfQog
Ci1BTFdBWVNfSU5MSU5FIFZNKiBIZWFwQ2VsbDo6dm0oKSBjb25zdAorQUxXQVlTX0lOTElORSBW
TSYgSGVhcENlbGw6OnZtKCkgY29uc3QKIHsKICAgICBpZiAoaXNMYXJnZUFsbG9jYXRpb24oKSkK
ICAgICAgICAgcmV0dXJuIGxhcmdlQWxsb2NhdGlvbigpLnZtKCk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0hlYXBJbmxpbmVzLmgJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0z
OCw5ICszOCw5IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1BTFdBWVNfSU5MSU5FIFZNKiBIZWFw
Ojp2bSgpIGNvbnN0CitBTFdBWVNfSU5MSU5FIFZNJiBIZWFwOjp2bSgpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIGJpdHdpc2VfY2FzdDxWTSo+KGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHRoaXMpIC0g
T0JKRUNUX09GRlNFVE9GKFZNLCBoZWFwKSk7CisgICAgcmV0dXJuICpiaXR3aXNlX2Nhc3Q8Vk0q
PihiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pih0aGlzKSAtIE9CSkVDVF9PRkZTRVRPRihWTSwgaGVh
cCkpOwogfQogCiBBTFdBWVNfSU5MSU5FIEhlYXAqIEhlYXA6OmhlYXAoY29uc3QgSGVhcENlbGwq
IGNlbGwpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29TdWJzcGFjZVBlclZN
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29TdWJzcGFj
ZVBlclZNLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSXNvU3Vic3BhY2VQZXJWTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDEsNyArNDEsNyBAQCBwdWJs
aWM6CiAgICAgfkF1dG9yZW1vdmluZ0lzb1N1YnNwYWNlKCkKICAgICB7CiAgICAgICAgIGF1dG8g
bG9ja2VyID0gaG9sZExvY2sobV9wZXJWTS5tX2xvY2spOwotICAgICAgICBtX3BlclZNLm1fc3Vi
c3BhY2VQZXJWTS5yZW1vdmUoc3BhY2UoKS5oZWFwKCktPnZtKCkpOworICAgICAgICBtX3BlclZN
Lm1fc3Vic3BhY2VQZXJWTS5yZW1vdmUoJnNwYWNlKCkuaGVhcCgpLT52bSgpKTsKICAgICB9CiAK
IHByaXZhdGU6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9MYXJnZUFsbG9jYXRp
b24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xhcmdlQWxs
b2NhdGlvbi5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0xhcmdlQWxsb2NhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNzcsNyArMTc3LDcg
QEAgdm9pZCBMYXJnZUFsbG9jYXRpb246OnN3ZWVwKCkKICAgICAKICAgICBpZiAobV9oYXNWYWxp
ZENlbGwgJiYgIWlzTGl2ZSgpKSB7CiAgICAgICAgIGlmIChtX2F0dHJpYnV0ZXMuZGVzdHJ1Y3Rp
b24gPT0gTmVlZHNEZXN0cnVjdGlvbikKLSAgICAgICAgICAgIG1fc3Vic3BhY2UtPmRlc3Ryb3ko
KnZtKCksIHN0YXRpY19jYXN0PEpTQ2VsbCo+KGNlbGwoKSkpOworICAgICAgICAgICAgbV9zdWJz
cGFjZS0+ZGVzdHJveSh2bSgpLCBzdGF0aWNfY2FzdDxKU0NlbGwqPihjZWxsKCkpKTsKICAgICAg
ICAgbV9oYXNWYWxpZENlbGwgPSBmYWxzZTsKICAgICB9CiB9CkBAIC0xOTgsNyArMTk4LDcgQEAg
dm9pZCBMYXJnZUFsbG9jYXRpb246OmR1bXAoUHJpbnRTdHJlYW0mIAogI2lmICFBU1NFUlRfRElT
QUJMRUQKIHZvaWQgTGFyZ2VBbGxvY2F0aW9uOjphc3NlcnRWYWxpZENlbGwoVk0mIHZtLCBIZWFw
Q2VsbCogY2VsbCkgY29uc3QKIHsKLSAgICBBU1NFUlQoJnZtID09IHRoaXMtPnZtKCkpOworICAg
IEFTU0VSVCgmdm0gPT0gJnRoaXMtPnZtKCkpOwogICAgIEFTU0VSVChjZWxsID09IHRoaXMtPmNl
bGwoKSk7CiAgICAgQVNTRVJUKG1faGFzVmFsaWRDZWxsKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0xhcmdlQWxsb2NhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0xhcmdlQWxsb2NhdGlvbi5oCShyZXZpc2lvbiAyNDkxMjgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9MYXJnZUFsbG9jYXRpb24uaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTY1LDcgKzY1LDcgQEAgcHVibGljOgogICAgIHZvaWQgbGFzdENoYW5jZVRvRmlu
YWxpemUoKTsKICAgICAKICAgICBIZWFwKiBoZWFwKCkgY29uc3QgeyByZXR1cm4gbV93ZWFrU2V0
LmhlYXAoKTsgfQotICAgIFZNKiB2bSgpIGNvbnN0IHsgcmV0dXJuIG1fd2Vha1NldC52bSgpOyB9
CisgICAgVk0mIHZtKCkgY29uc3QgeyByZXR1cm4gbV93ZWFrU2V0LnZtKCk7IH0KICAgICBXZWFr
U2V0JiB3ZWFrU2V0KCkgeyByZXR1cm4gbV93ZWFrU2V0OyB9CiAKICAgICB1bnNpZ25lZCBpbmRl
eEluU3BhY2UoKSB7IHJldHVybiBtX2luZGV4SW5TcGFjZTsgfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvTG9jYWxBbGxvY2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0xvY2FsQWxsb2NhdG9yLmNwcAkocmV2aXNpb24gMjQ5MTI4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTG9jYWxBbGxvY2F0b3IuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMTQsNyArMTE0LDcgQEAgdm9pZCogTG9jYWxBbGxvY2F0b3I6OmFsbG9jYXRl
U2xvd0Nhc2UoRwogewogICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZh
bHNlKTsKICAgICBIZWFwJiBoZWFwID0gKm1fZGlyZWN0b3J5LT5tX2hlYXA7Ci0gICAgQVNTRVJU
KGhlYXAudm0oKS0+Y3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7CisgICAgQVNTRVJU
KGhlYXAudm0oKS5jdXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsKICAgICBkb1Rlc3RD
b2xsZWN0aW9uc0lmTmVlZGVkKGRlZmVycmFsQ29udGV4dCk7CiAKICAgICBBU1NFUlQoIW1fZGly
ZWN0b3J5LT5tYXJrZWRTcGFjZSgpLmlzSXRlcmF0aW5nKCkpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02Niw3ICs2Niw3IEBAIE1hcmtlZEJsb2NrOjpIYW5kbGU6OkhhbmRsZShIZWFwJiBoZWFwLCAK
ICAgICA6IG1fYWxpZ25lZE1lbW9yeUFsbG9jYXRvcihhbGlnbmVkTWVtb3J5QWxsb2NhdG9yKQog
ICAgICwgbV93ZWFrU2V0KGhlYXAudm0oKSwgQ2VsbENvbnRhaW5lcigpKQogewotICAgIG1fYmxv
Y2sgPSBuZXcgKE5vdE51bGwsIGJsb2NrU3BhY2UpIE1hcmtlZEJsb2NrKCpoZWFwLnZtKCksICp0
aGlzKTsKKyAgICBtX2Jsb2NrID0gbmV3IChOb3ROdWxsLCBibG9ja1NwYWNlKSBNYXJrZWRCbG9j
ayhoZWFwLnZtKCksICp0aGlzKTsKICAgICAKICAgICBtX3dlYWtTZXQuc2V0Q29udGFpbmVyKCpt
X2Jsb2NrKTsKICAgICAKQEAgLTIwNyw3ICsyMDcsNyBAQCB2b2lkIE1hcmtlZEJsb2NrOjpIYW5k
bGU6OnJlc3VtZUFsbG9jYXRpCiAKIHZvaWQgTWFya2VkQmxvY2s6OmFib3V0VG9NYXJrU2xvdyhI
ZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbikKIHsKLSAgICBBU1NFUlQodm0oKS0+aGVhcC5vYmpl
Y3RTcGFjZSgpLmlzTWFya2luZygpKTsKKyAgICBBU1NFUlQodm0oKS5oZWFwLm9iamVjdFNwYWNl
KCkuaXNNYXJraW5nKCkpOwogICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2soZm9vdGVyKCkubV9s
b2NrKTsKICAgICAKICAgICBpZiAoIWFyZU1hcmtzU3RhbGUobWFya2luZ1ZlcnNpb24pKQpAQCAt
Mjc1LDEzICsyNzUsMTMgQEAgdm9pZCBNYXJrZWRCbG9jazo6cmVzZXRNYXJrcygpCiAjaWYgIUFT
U0VSVF9ESVNBQkxFRAogdm9pZCBNYXJrZWRCbG9jazo6YXNzZXJ0TWFya3NOb3RTdGFsZSgpCiB7
Ci0gICAgQVNTRVJUKGZvb3RlcigpLm1fbWFya2luZ1ZlcnNpb24gPT0gdm0oKS0+aGVhcC5vYmpl
Y3RTcGFjZSgpLm1hcmtpbmdWZXJzaW9uKCkpOworICAgIEFTU0VSVChmb290ZXIoKS5tX21hcmtp
bmdWZXJzaW9uID09IHZtKCkuaGVhcC5vYmplY3RTcGFjZSgpLm1hcmtpbmdWZXJzaW9uKCkpOwog
fQogI2VuZGlmIC8vICFBU1NFUlRfRElTQUJMRUQKIAogYm9vbCBNYXJrZWRCbG9jazo6YXJlTWFy
a3NTdGFsZSgpCiB7Ci0gICAgcmV0dXJuIGFyZU1hcmtzU3RhbGUodm0oKS0+aGVhcC5vYmplY3RT
cGFjZSgpLm1hcmtpbmdWZXJzaW9uKCkpOworICAgIHJldHVybiBhcmVNYXJrc1N0YWxlKHZtKCku
aGVhcC5vYmplY3RTcGFjZSgpLm1hcmtpbmdWZXJzaW9uKCkpOwogfQogCiBib29sIE1hcmtlZEJs
b2NrOjpIYW5kbGU6OmFyZU1hcmtzU3RhbGUoKQpAQCAtMjkxLDcgKzI5MSw3IEBAIGJvb2wgTWFy
a2VkQmxvY2s6OkhhbmRsZTo6YXJlTWFya3NTdGFsZSgKIAogYm9vbCBNYXJrZWRCbG9jazo6aXNN
YXJrZWQoY29uc3Qgdm9pZCogcCkKIHsKLSAgICByZXR1cm4gaXNNYXJrZWQodm0oKS0+aGVhcC5v
YmplY3RTcGFjZSgpLm1hcmtpbmdWZXJzaW9uKCksIHApOworICAgIHJldHVybiBpc01hcmtlZCh2
bSgpLmhlYXAub2JqZWN0U3BhY2UoKS5tYXJraW5nVmVyc2lvbigpLCBwKTsKIH0KIAogdm9pZCBN
YXJrZWRCbG9jazo6SGFuZGxlOjpkaWRDb25zdW1lRnJlZUxpc3QoKQpAQCAtMzcxLDcgKzM3MSw3
IEBAIHZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6ZGlkUmVtb3ZlRnJvbUQKICNpZiAhQVNTRVJU
X0RJU0FCTEVECiB2b2lkIE1hcmtlZEJsb2NrOjphc3NlcnRWYWxpZENlbGwoVk0mIHZtLCBIZWFw
Q2VsbCogY2VsbCkgY29uc3QKIHsKLSAgICBSRUxFQVNFX0FTU0VSVCgmdm0gPT0gdGhpcy0+dm0o
KSk7CisgICAgUkVMRUFTRV9BU1NFUlQoJnZtID09ICZ0aGlzLT52bSgpKTsKICAgICBSRUxFQVNF
X0FTU0VSVChjb25zdF9jYXN0PE1hcmtlZEJsb2NrKj4odGhpcyktPmhhbmRsZSgpLmNlbGxBbGln
bihjZWxsKSA9PSBjZWxsKTsKIH0KICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTWFya2VkQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9NYXJrZWRCbG9jay5oCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjQsNyArMTI0LDcg
QEAgcHVibGljOgogICAgICAgICBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKiBhbGlnbmVkTWVtb3J5
QWxsb2NhdG9yKCkgY29uc3Q7CiAgICAgICAgIEhlYXAqIGhlYXAoKSBjb25zdDsKICAgICAgICAg
aW5saW5lIE1hcmtlZFNwYWNlKiBzcGFjZSgpIGNvbnN0OwotICAgICAgICBWTSogdm0oKSBjb25z
dDsKKyAgICAgICAgVk0mIHZtKCkgY29uc3Q7CiAgICAgICAgIFdlYWtTZXQmIHdlYWtTZXQoKTsK
ICAgICAgICAgICAgIAogICAgICAgICBlbnVtIFN3ZWVwTW9kZSB7IFN3ZWVwT25seSwgU3dlZXBU
b0ZyZWVMaXN0IH07CkBAIC0yNTcsNiArMjU3LDggQEAgcHVibGljOgogICAgICAgICBmcmllbmQg
Y2xhc3MgTWFya2VkQmxvY2s7CiAgICAgICAgIAogICAgICAgICBIYW5kbGUmIG1faGFuZGxlOwor
ICAgICAgICAvLyBtX3ZtIG11c3QgcmVtYWluIGEgcG9pbnRlciAoaW5zdGVhZCBvZiBhIHJlZmVy
ZW5jZSkgYmVjYXVzZSBKU0NMTEludE9mZnNldHNFeHRyYWN0b3IKKyAgICAgICAgLy8gd2lsbCBm
YWlsIG90aGVyd2lzZS4KICAgICAgICAgVk0qIG1fdm07CiAgICAgICAgIFN1YnNwYWNlKiBtX3N1
YnNwYWNlOwogCkBAIC0zMTUsNyArMzE3LDcgQEAgcHVibGljOgogICAgIEhhbmRsZSYgaGFuZGxl
KCk7CiAgICAgY29uc3QgSGFuZGxlJiBoYW5kbGUoKSBjb25zdDsKICAgICAgICAgCi0gICAgVk0q
IHZtKCkgY29uc3Q7CisgICAgVk0mIHZtKCkgY29uc3Q7CiAgICAgaW5saW5lIEhlYXAqIGhlYXAo
KSBjb25zdDsKICAgICBpbmxpbmUgTWFya2VkU3BhY2UqIHNwYWNlKCkgY29uc3Q7CiAKQEAgLTQ3
MSwxNCArNDczLDE0IEBAIGlubGluZSBIZWFwKiBNYXJrZWRCbG9jazo6SGFuZGxlOjpoZWFwKCkK
ICAgICByZXR1cm4gbV93ZWFrU2V0LmhlYXAoKTsKIH0KIAotaW5saW5lIFZNKiBNYXJrZWRCbG9j
azo6SGFuZGxlOjp2bSgpIGNvbnN0CitpbmxpbmUgVk0mIE1hcmtlZEJsb2NrOjpIYW5kbGU6OnZt
KCkgY29uc3QKIHsKICAgICByZXR1cm4gbV93ZWFrU2V0LnZtKCk7CiB9CiAKLWlubGluZSBWTSog
TWFya2VkQmxvY2s6OnZtKCkgY29uc3QKK2lubGluZSBWTSYgTWFya2VkQmxvY2s6OnZtKCkgY29u
c3QKIHsKLSAgICByZXR1cm4gZm9vdGVyKCkubV92bTsKKyAgICByZXR1cm4gKmZvb3RlcigpLm1f
dm07CiB9CiAKIGlubGluZSBXZWFrU2V0JiBNYXJrZWRCbG9jazo6SGFuZGxlOjp3ZWFrU2V0KCkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrSW5saW5lcy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrSW5saW5l
cy5oCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJr
ZWRCbG9ja0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNTIsNyArNTIsNyBAQCBpbmxpbmUg
Ym9vbCBNYXJrZWRCbG9jazo6aGFzQW55TmV3bHlBbGxvCiAKIGlubGluZSBIZWFwKiBNYXJrZWRC
bG9jazo6aGVhcCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuICZ2bSgpLT5oZWFwOworICAgIHJldHVy
biAmdm0oKS5oZWFwOwogfQogCiBpbmxpbmUgTWFya2VkU3BhY2UqIE1hcmtlZEJsb2NrOjpzcGFj
ZSgpIGNvbnN0CkBAIC0yNTMsNyArMjUzLDcgQEAgdm9pZCBNYXJrZWRCbG9jazo6SGFuZGxlOjpz
cGVjaWFsaXplZFN3ZQogICAgIAogICAgIHVuc2lnbmVkIGNlbGxTaXplID0gdGhpcy0+Y2VsbFNp
emUoKTsKICAgICAKLSAgICBWTSYgdm0gPSAqdGhpcy0+dm0oKTsKKyAgICBWTSYgdm0gPSB0aGlz
LT52bSgpOwogICAgIGF1dG8gZGVzdHJveSA9IFsmXSAodm9pZCogY2VsbCkgewogICAgICAgICBK
U0NlbGwqIGpzQ2VsbCA9IHN0YXRpY19jYXN0PEpTQ2VsbCo+KGNlbGwpOwogICAgICAgICBpZiAo
IWpzQ2VsbC0+aXNaYXBwZWQoKSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
U2xvdFZpc2l0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L1Nsb3RWaXNpdG9yLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MCw3ICs2MCw3IEBA
IHN0YXRpYyB2b2lkIHZhbGlkYXRlKEpTQ2VsbCogY2VsbCkKIAogICAgIC8vIEJvdGggdGhlIGNl
bGwncyBzdHJ1Y3R1cmUsIGFuZCB0aGUgY2VsbCdzIHN0cnVjdHVyZSdzIHN0cnVjdHVyZSBzaG91
bGQgYmUgdGhlIFN0cnVjdHVyZSBTdHJ1Y3R1cmUuCiAgICAgLy8gSSBoYXRlIHRoaXMgc2VudGVu
Y2UuCi0gICAgVk0mIHZtID0gKmNlbGwtPnZtKCk7CisgICAgVk0mIHZtID0gY2VsbC0+dm0oKTsK
ICAgICBpZiAoY2VsbC0+c3RydWN0dXJlKCktPnN0cnVjdHVyZSgpLT5KU0NlbGw6OmNsYXNzSW5m
byh2bSkgIT0gY2VsbC0+c3RydWN0dXJlKCktPkpTQ2VsbDo6Y2xhc3NJbmZvKHZtKSkgewogICAg
ICAgICBjb25zdCBjaGFyKiBwYXJlbnRDbGFzc05hbWUgPSAwOwogICAgICAgICBjb25zdCBjaGFy
KiBvdXJDbGFzc05hbWUgPSAwOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xv
dFZpc2l0b3JJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE5IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MTc2LDEyICsxNzYsMTIgQEAgaW5saW5lIEhlYXAqIFNsb3RWaXNpdG9yOjpoZWFwKCkgY29uc3QK
IAogaW5saW5lIFZNJiBTbG90VmlzaXRvcjo6dm0oKQogewotICAgIHJldHVybiAqbV9oZWFwLnZt
KCk7CisgICAgcmV0dXJuIG1faGVhcC52bSgpOwogfQogCiBpbmxpbmUgY29uc3QgVk0mIFNsb3RW
aXNpdG9yOjp2bSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuICptX2hlYXAudm0oKTsKKyAgICByZXR1
cm4gbV9oZWFwLnZtKCk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdG9wSWZOZWNlc3NhcnlUaW1lci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3RvcElmTmVjZXNzYXJ5VGltZXIuY3Bw
CShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdG9wSWZO
ZWNlc3NhcnlUaW1lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDE2LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMCw3ICszMCw3IEBACiAKIG5h
bWVzcGFjZSBKU0MgewogCi1TdG9wSWZOZWNlc3NhcnlUaW1lcjo6U3RvcElmTmVjZXNzYXJ5VGlt
ZXIoVk0qIHZtKQorU3RvcElmTmVjZXNzYXJ5VGltZXI6OlN0b3BJZk5lY2Vzc2FyeVRpbWVyKFZN
JiB2bSkKICAgICA6IEJhc2Uodm0pCiB7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9TdG9wSWZOZWNlc3NhcnlUaW1lci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL1N0b3BJZk5lY2Vzc2FyeVRpbWVyLmgJKHJldmlzaW9uIDI0OTEyOCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N0b3BJZk5lY2Vzc2FyeVRpbWVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMzQsNyArMzQsNyBAQCBjbGFzcyBIZWFwOwogY2xhc3MgU3RvcElmTmVjZXNzYXJ5
VGltZXIgOiBwdWJsaWMgSlNSdW5Mb29wVGltZXIgewogcHVibGljOgogICAgIHVzaW5nIEJhc2Ug
PSBKU1J1bkxvb3BUaW1lcjsKLSAgICBleHBsaWNpdCBTdG9wSWZOZWNlc3NhcnlUaW1lcihWTSop
OworICAgIGV4cGxpY2l0IFN0b3BJZk5lY2Vzc2FyeVRpbWVyKFZNJik7CiAgICAgCiAgICAgdm9p
ZCBkb1dvcmsoVk0mKSBvdmVycmlkZTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL1N0cm9uZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L1N0cm9uZy5oCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9TdHJvbmcuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDExLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMTIsNyArMTEyLDcgQEAgcHVibGljOgogICAgICAg
ICAgICAgcmV0dXJuICp0aGlzOwogICAgICAgICB9CiAKLSAgICAgICAgc2V0KCpIYW5kbGVTZXQ6
OmhlYXBGb3Iob3RoZXIuc2xvdCgpKS0+dm0oKSwgb3RoZXIuZ2V0KCkpOworICAgICAgICBzZXQo
SGFuZGxlU2V0OjpoZWFwRm9yKG90aGVyLnNsb3QoKSktPnZtKCksIG90aGVyLmdldCgpKTsKICAg
ICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvV2Vha1NldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L1dlYWtTZXQuaAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvV2Vha1NldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDEsNyArNDEsNyBAQCBwdWJsaWM6CiAg
ICAgc3RhdGljIFdlYWtJbXBsKiBhbGxvY2F0ZShKU1ZhbHVlLCBXZWFrSGFuZGxlT3duZXIqID0g
MCwgdm9pZCogY29udGV4dCA9IDApOwogICAgIHN0YXRpYyB2b2lkIGRlYWxsb2NhdGUoV2Vha0lt
cGwqKTsKIAotICAgIFdlYWtTZXQoVk0qLCBDZWxsQ29udGFpbmVyKTsKKyAgICBXZWFrU2V0KFZN
JiwgQ2VsbENvbnRhaW5lcik7CiAgICAgfldlYWtTZXQoKTsKICAgICB2b2lkIGxhc3RDaGFuY2VU
b0ZpbmFsaXplKCk7CiAgICAgCkBAIC00OSw3ICs0OSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNl
dENvbnRhaW5lcihDZWxsQ29udGFpbmVyIGNvbnRhaW5lcikgeyBtX2NvbnRhaW5lciA9IGNvbnRh
aW5lcjsgfQogCiAgICAgSGVhcCogaGVhcCgpIGNvbnN0OwotICAgIFZNKiB2bSgpIGNvbnN0Owor
ICAgIFZNJiB2bSgpIGNvbnN0OwogCiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3Q7CiAgICAgYm9v
bCBpc1RyaXZpYWxseURlc3RydWN0aWJsZSgpIGNvbnN0OwpAQCAtNzAsMTEgKzcwLDExIEBAIHBy
aXZhdGU6CiAgICAgV2Vha0Jsb2NrOjpGcmVlQ2VsbCogbV9hbGxvY2F0b3I7CiAgICAgV2Vha0Js
b2NrKiBtX25leHRBbGxvY2F0b3I7CiAgICAgRG91Ymx5TGlua2VkTGlzdDxXZWFrQmxvY2s+IG1f
YmxvY2tzOwotICAgIFZNKiBtX3ZtOworICAgIFZNJiBtX3ZtOwogICAgIENlbGxDb250YWluZXIg
bV9jb250YWluZXI7CiB9OwogCi1pbmxpbmUgV2Vha1NldDo6V2Vha1NldChWTSogdm0sIENlbGxD
b250YWluZXIgY29udGFpbmVyKQoraW5saW5lIFdlYWtTZXQ6OldlYWtTZXQoVk0mIHZtLCBDZWxs
Q29udGFpbmVyIGNvbnRhaW5lcikKICAgICA6IG1fYWxsb2NhdG9yKDApCiAgICAgLCBtX25leHRB
bGxvY2F0b3IoMCkKICAgICAsIG1fdm0odm0pCkBAIC04Miw3ICs4Miw3IEBAIGlubGluZSBXZWFr
U2V0OjpXZWFrU2V0KFZNKiB2bSwgQ2VsbENvbnQKIHsKIH0KIAotaW5saW5lIFZNKiBXZWFrU2V0
Ojp2bSgpIGNvbnN0CitpbmxpbmUgVk0mIFdlYWtTZXQ6OnZtKCkgY29uc3QKIHsKICAgICByZXR1
cm4gbV92bTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNJbmpl
Y3RlZFNjcmlwdEhvc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3IvSlNJbmplY3RlZFNjcmlwdEhvc3QuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTSW5qZWN0ZWRTY3JpcHRIb3N0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMs
IDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEyMCw3ICsxMjAsNyBAQCBKU1ZhbHVlIEpTSW5qZWN0
ZWRTY3JpcHRIb3N0OjpzYXZlZFJlc3VsCiAgICAgYXV0byBzYXZlZFJlc3VsdEFsaWFzID0gaW1w
bCgpLnNhdmVkUmVzdWx0QWxpYXMoKTsKICAgICBpZiAoIXNhdmVkUmVzdWx0QWxpYXMpCiAgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBzYXZl
ZFJlc3VsdEFsaWFzLnZhbHVlKCkpOworICAgIHJldHVybiBqc1N0cmluZyhleGVjLT52bSgpLCBz
YXZlZFJlc3VsdEFsaWFzLnZhbHVlKCkpOwogfQogCiBKU1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRI
b3N0OjpldmFsdWF0ZVdpdGhTY29wZUV4dGVuc2lvbihFeGVjU3RhdGUqIGV4ZWMpCkBAIC0xNDks
OCArMTQ5LDkgQEAgSlNWYWx1ZSBKU0luamVjdGVkU2NyaXB0SG9zdDo6aW50ZXJuYWxDbwogICAg
IGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAxKQogICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKIAorICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgSlNPYmplY3QqIG9iamVjdCA9
IGpzQ2FzdDxKU09iamVjdCo+KGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvVGhpcyhleGVj
LCBOb3RTdHJpY3RNb2RlKSk7Ci0gICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIEpTT2JqZWN0Ojpj
YWxjdWxhdGVkQ2xhc3NOYW1lKG9iamVjdCkpOworICAgIHJldHVybiBqc1N0cmluZyh2bSwgSlNP
YmplY3Q6OmNhbGN1bGF0ZWRDbGFzc05hbWUob2JqZWN0KSk7CiB9CiAKIEpTVmFsdWUgSlNJbmpl
Y3RlZFNjcmlwdEhvc3Q6OmlzSFRNTEFsbENvbGxlY3Rpb24oRXhlY1N0YXRlKiBleGVjKQpAQCAt
MTk2LDQxICsxOTcsNDEgQEAgSlNWYWx1ZSBKU0luamVjdGVkU2NyaXB0SG9zdDo6c3VidHlwZShF
eAogCiAgICAgaWYgKGF1dG8qIG9iamVjdCA9IGpzRHluYW1pY0Nhc3Q8SlNPYmplY3QqPih2bSwg
dmFsdWUpKSB7CiAgICAgICAgIGlmIChvYmplY3QtPmlzRXJyb3JJbnN0YW5jZSgpKQotICAgICAg
ICAgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyhleGVjLCAiZXJyb3IiX3MpOworICAgICAg
ICAgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyh2bSwgImVycm9yIl9zKTsKIAogICAgICAg
ICAvLyBDb25zaWRlciBjbGFzcyBjb25zdHJ1Y3RvciBmdW5jdGlvbnMgY2xhc3Mgb2JqZWN0cy4K
ICAgICAgICAgSlNGdW5jdGlvbiogZnVuY3Rpb24gPSBqc0R5bmFtaWNDYXN0PEpTRnVuY3Rpb24q
Pih2bSwgdmFsdWUpOwogICAgICAgICBpZiAoZnVuY3Rpb24gJiYgZnVuY3Rpb24tPmlzQ2xhc3ND
b25zdHJ1Y3RvckZ1bmN0aW9uKCkpCi0gICAgICAgICAgICByZXR1cm4ganNOb250cml2aWFsU3Ry
aW5nKGV4ZWMsICJjbGFzcyJfcyk7CisgICAgICAgICAgICByZXR1cm4ganNOb250cml2aWFsU3Ry
aW5nKHZtLCAiY2xhc3MiX3MpOwogCiAgICAgICAgIGlmIChvYmplY3QtPmluaGVyaXRzPEpTQXJy
YXk+KHZtKSkKLSAgICAgICAgICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywgImFy
cmF5Il9zKTsKKyAgICAgICAgICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcodm0sICJhcnJh
eSJfcyk7CiAgICAgICAgIGlmIChvYmplY3QtPmluaGVyaXRzPERpcmVjdEFyZ3VtZW50cz4odm0p
IHx8IG9iamVjdC0+aW5oZXJpdHM8U2NvcGVkQXJndW1lbnRzPih2bSkpCi0gICAgICAgICAgICBy
ZXR1cm4ganNOb250cml2aWFsU3RyaW5nKGV4ZWMsICJhcnJheSJfcyk7CisgICAgICAgICAgICBy
ZXR1cm4ganNOb250cml2aWFsU3RyaW5nKHZtLCAiYXJyYXkiX3MpOwogCiAgICAgICAgIGlmIChv
YmplY3QtPmluaGVyaXRzPERhdGVJbnN0YW5jZT4odm0pKQotICAgICAgICAgICAgcmV0dXJuIGpz
Tm9udHJpdmlhbFN0cmluZyhleGVjLCAiZGF0ZSJfcyk7CisgICAgICAgICAgICByZXR1cm4ganNO
b250cml2aWFsU3RyaW5nKHZtLCAiZGF0ZSJfcyk7CiAgICAgICAgIGlmIChvYmplY3QtPmluaGVy
aXRzPFJlZ0V4cE9iamVjdD4odm0pKQotICAgICAgICAgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0
cmluZyhleGVjLCAicmVnZXhwIl9zKTsKKyAgICAgICAgICAgIHJldHVybiBqc05vbnRyaXZpYWxT
dHJpbmcodm0sICJyZWdleHAiX3MpOwogICAgICAgICBpZiAob2JqZWN0LT5pbmhlcml0czxQcm94
eU9iamVjdD4odm0pKQotICAgICAgICAgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyhleGVj
LCAicHJveHkiX3MpOworICAgICAgICAgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyh2bSwg
InByb3h5Il9zKTsKIAogICAgICAgICBpZiAob2JqZWN0LT5pbmhlcml0czxKU01hcD4odm0pKQot
ICAgICAgICAgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyhleGVjLCAibWFwIl9zKTsKKyAg
ICAgICAgICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcodm0sICJtYXAiX3MpOwogICAgICAg
ICBpZiAob2JqZWN0LT5pbmhlcml0czxKU1NldD4odm0pKQotICAgICAgICAgICAgcmV0dXJuIGpz
Tm9udHJpdmlhbFN0cmluZyhleGVjLCAic2V0Il9zKTsKKyAgICAgICAgICAgIHJldHVybiBqc05v
bnRyaXZpYWxTdHJpbmcodm0sICJzZXQiX3MpOwogICAgICAgICBpZiAob2JqZWN0LT5pbmhlcml0
czxKU1dlYWtNYXA+KHZtKSkKLSAgICAgICAgICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmco
ZXhlYywgIndlYWttYXAiX3MpOworICAgICAgICAgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmlu
Zyh2bSwgIndlYWttYXAiX3MpOwogICAgICAgICBpZiAob2JqZWN0LT5pbmhlcml0czxKU1dlYWtT
ZXQ+KHZtKSkKLSAgICAgICAgICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywgIndl
YWtzZXQiX3MpOworICAgICAgICAgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyh2bSwgIndl
YWtzZXQiX3MpOwogCiAgICAgICAgIGlmIChvYmplY3QtPmluaGVyaXRzPEpTU3RyaW5nSXRlcmF0
b3I+KHZtKSkKLSAgICAgICAgICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywgIml0
ZXJhdG9yIl9zKTsKKyAgICAgICAgICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcodm0sICJp
dGVyYXRvciJfcyk7CiAKICAgICAgICAgaWYgKG9iamVjdC0+Z2V0RGlyZWN0KHZtLCB2bS5wcm9w
ZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5hcnJheUl0ZXJhdG9yTmV4dEluZGV4UHJpdmF0ZU5h
bWUoKSkKICAgICAgICAgICAgIHx8IG9iamVjdC0+Z2V0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5h
bWVzLT5idWlsdGluTmFtZXMoKS5tYXBCdWNrZXRQcml2YXRlTmFtZSgpKQogICAgICAgICAgICAg
fHwgb2JqZWN0LT5nZXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygp
LnNldEJ1Y2tldFByaXZhdGVOYW1lKCkpKQotICAgICAgICAgICAgcmV0dXJuIGpzTm9udHJpdmlh
bFN0cmluZyhleGVjLCAiaXRlcmF0b3IiX3MpOworICAgICAgICAgICAgcmV0dXJuIGpzTm9udHJp
dmlhbFN0cmluZyh2bSwgIml0ZXJhdG9yIl9zKTsKIAogICAgICAgICBpZiAob2JqZWN0LT5pbmhl
cml0czxKU0ludDhBcnJheT4odm0pCiAgICAgICAgICAgICB8fCBvYmplY3QtPmluaGVyaXRzPEpT
SW50MTZBcnJheT4odm0pCkBAIC0yNDEsNyArMjQyLDcgQEAgSlNWYWx1ZSBKU0luamVjdGVkU2Ny
aXB0SG9zdDo6c3VidHlwZShFeAogICAgICAgICAgICAgfHwgb2JqZWN0LT5pbmhlcml0czxKU1Vp
bnQzMkFycmF5Pih2bSkKICAgICAgICAgICAgIHx8IG9iamVjdC0+aW5oZXJpdHM8SlNGbG9hdDMy
QXJyYXk+KHZtKQogICAgICAgICAgICAgfHwgb2JqZWN0LT5pbmhlcml0czxKU0Zsb2F0NjRBcnJh
eT4odm0pKQotICAgICAgICAgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyhleGVjLCAiYXJy
YXkiX3MpOworICAgICAgICAgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyh2bSwgImFycmF5
Il9zKTsKICAgICB9CiAKICAgICByZXR1cm4gaW1wbCgpLnN1YnR5cGUoZXhlYywgdmFsdWUpOwpA
QCAtMjc2LDIwICsyNzcsMjAgQEAgSlNWYWx1ZSBKU0luamVjdGVkU2NyaXB0SG9zdDo6ZnVuY3Rp
b25EZQogCiAgICAgU3RyaW5nIHNjcmlwdElEID0gU3RyaW5nOjpudW1iZXIoc291cmNlQ29kZS0+
cHJvdmlkZXIoKS0+YXNJRCgpKTsKICAgICBKU09iamVjdCogbG9jYXRpb24gPSBjb25zdHJ1Y3RF
bXB0eU9iamVjdChleGVjKTsKLSAgICBsb2NhdGlvbi0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKGV4ZWMsICJzY3JpcHRJZCIpLCBqc1N0cmluZyhleGVjLCBzY3JpcHRJRCkp
OwotICAgIGxvY2F0aW9uLT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhl
YywgImxpbmVOdW1iZXIiKSwganNOdW1iZXIobGluZU51bWJlcikpOwotICAgIGxvY2F0aW9uLT5w
dXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgImNvbHVtbk51bWJlciIp
LCBqc051bWJlcihjb2x1bW5OdW1iZXIpKTsKKyAgICBsb2NhdGlvbi0+cHV0RGlyZWN0KHZtLCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAic2NyaXB0SWQiKSwganNTdHJpbmcodm0sIHNjcmlw
dElEKSk7CisgICAgbG9jYXRpb24tPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zyh2bSwgImxpbmVOdW1iZXIiKSwganNOdW1iZXIobGluZU51bWJlcikpOworICAgIGxvY2F0aW9u
LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJjb2x1bW5OdW1iZXIi
KSwganNOdW1iZXIoY29sdW1uTnVtYmVyKSk7CiAKICAgICBKU09iamVjdCogcmVzdWx0ID0gY29u
c3RydWN0RW1wdHlPYmplY3QoZXhlYyk7Ci0gICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50
aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgImxvY2F0aW9uIiksIGxvY2F0aW9uKTsKKyAgICByZXN1
bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImxvY2F0aW9uIiks
IGxvY2F0aW9uKTsKIAogICAgIFN0cmluZyBuYW1lID0gZnVuY3Rpb24tPm5hbWUodm0pOwogICAg
IGlmICghbmFtZS5pc0VtcHR5KCkpCi0gICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJuYW1lIiksIGpzU3RyaW5nKGV4ZWMsIG5hbWUpKTsK
KyAgICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0s
ICJuYW1lIiksIGpzU3RyaW5nKHZtLCBuYW1lKSk7CiAKICAgICBTdHJpbmcgZGlzcGxheU5hbWUg
PSBmdW5jdGlvbi0+ZGlzcGxheU5hbWUodm0pOwogICAgIGlmICghZGlzcGxheU5hbWUuaXNFbXB0
eSgpKQotICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
ZyhleGVjLCAiZGlzcGxheU5hbWUiKSwganNTdHJpbmcoZXhlYywgZGlzcGxheU5hbWUpKTsKKyAg
ICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJk
aXNwbGF5TmFtZSIpLCBqc1N0cmluZyh2bSwgZGlzcGxheU5hbWUpKTsKIAogICAgIHJldHVybiBy
ZXN1bHQ7CiB9CkBAIC0yOTgsOCArMjk5LDggQEAgc3RhdGljIEpTT2JqZWN0KiBjb25zdHJ1Y3RJ
bnRlcm5hbFByb3BlcgogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgSlNPYmplY3Qq
IHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMpOwotICAgIHJlc3VsdC0+cHV0RGly
ZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJuYW1lIiksIGpzU3RyaW5nKGV4
ZWMsIG5hbWUpKTsKLSAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZyhleGVjLCAidmFsdWUiKSwgdmFsdWUpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAibmFtZSIpLCBqc1N0cmluZyh2bSwgbmFtZSkpOwor
ICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAidmFs
dWUiKSwgdmFsdWUpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTMyMywxNiArMzI0LDE2
IEBAIEpTVmFsdWUgSlNJbmplY3RlZFNjcmlwdEhvc3Q6OmdldEludGVybmEKICAgICAgICAgc3dp
dGNoIChwcm9taXNlLT5zdGF0dXModm0pKSB7CiAgICAgICAgIGNhc2UgSlNQcm9taXNlOjpTdGF0
dXM6OlBlbmRpbmc6CiAgICAgICAgICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgICAgICAgICBh
cnJheS0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaW5kZXgrKywgY29uc3RydWN0SW50ZXJuYWxQcm9w
ZXJ0eShleGVjLCAic3RhdHVzIl9zLCBqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywgInBlbmRpbmci
X3MpKSk7CisgICAgICAgICAgICBhcnJheS0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaW5kZXgrKywg
Y29uc3RydWN0SW50ZXJuYWxQcm9wZXJ0eShleGVjLCAic3RhdHVzIl9zLCBqc05vbnRyaXZpYWxT
dHJpbmcodm0sICJwZW5kaW5nIl9zKSkpOwogICAgICAgICAgICAgcmV0dXJuIGFycmF5OwogICAg
ICAgICBjYXNlIEpTUHJvbWlzZTo6U3RhdHVzOjpGdWxmaWxsZWQ6Ci0gICAgICAgICAgICBhcnJh
eS0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaW5kZXgrKywgY29uc3RydWN0SW50ZXJuYWxQcm9wZXJ0
eShleGVjLCAic3RhdHVzIl9zLCBqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywgInJlc29sdmVkIl9z
KSkpOworICAgICAgICAgICAgYXJyYXktPnB1dERpcmVjdEluZGV4KGV4ZWMsIGluZGV4KyssIGNv
bnN0cnVjdEludGVybmFsUHJvcGVydHkoZXhlYywgInN0YXR1cyJfcywganNOb250cml2aWFsU3Ry
aW5nKHZtLCAicmVzb2x2ZWQiX3MpKSk7CiAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCBKU1ZhbHVlKCkpOwogICAgICAgICAgICAgc2NvcGUucmVsZWFzZSgpOwogICAgICAg
ICAgICAgYXJyYXktPnB1dERpcmVjdEluZGV4KGV4ZWMsIGluZGV4KyssIGNvbnN0cnVjdEludGVy
bmFsUHJvcGVydHkoZXhlYywgInJlc3VsdCJfcywgcHJvbWlzZS0+cmVzdWx0KHZtKSkpOwogICAg
ICAgICAgICAgcmV0dXJuIGFycmF5OwogICAgICAgICBjYXNlIEpTUHJvbWlzZTo6U3RhdHVzOjpS
ZWplY3RlZDoKLSAgICAgICAgICAgIGFycmF5LT5wdXREaXJlY3RJbmRleChleGVjLCBpbmRleCsr
LCBjb25zdHJ1Y3RJbnRlcm5hbFByb3BlcnR5KGV4ZWMsICJzdGF0dXMiX3MsIGpzTm9udHJpdmlh
bFN0cmluZyhleGVjLCAicmVqZWN0ZWQiX3MpKSk7CisgICAgICAgICAgICBhcnJheS0+cHV0RGly
ZWN0SW5kZXgoZXhlYywgaW5kZXgrKywgY29uc3RydWN0SW50ZXJuYWxQcm9wZXJ0eShleGVjLCAi
c3RhdHVzIl9zLCBqc05vbnRyaXZpYWxTdHJpbmcodm0sICJyZWplY3RlZCJfcykpKTsKICAgICAg
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTVmFsdWUoKSk7CiAgICAgICAgICAg
ICBzY29wZS5yZWxlYXNlKCk7CiAgICAgICAgICAgICBhcnJheS0+cHV0RGlyZWN0SW5kZXgoZXhl
YywgaW5kZXgrKywgY29uc3RydWN0SW50ZXJuYWxQcm9wZXJ0eShleGVjLCAicmVzdWx0Il9zLCBw
cm9taXNlLT5yZXN1bHQodm0pKSk7CkBAIC00MDQsNyArNDA1LDcgQEAgSlNWYWx1ZSBKU0luamVj
dGVkU2NyaXB0SG9zdDo6Z2V0SW50ZXJuYQogICAgICAgICAgICAgYXJyYXktPnB1dERpcmVjdElu
ZGV4KGV4ZWMsIGluZGV4KyssIGNvbnN0cnVjdEludGVybmFsUHJvcGVydHkoZXhlYywgIm1hcCIs
IGl0ZXJhdGVkVmFsdWUpKTsKICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IEpTVmFsdWUoKSk7CiAgICAgICAgICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgICAgICAgICBh
cnJheS0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaW5kZXgrKywgY29uc3RydWN0SW50ZXJuYWxQcm9w
ZXJ0eShleGVjLCAia2luZCIsIGpzTm9udHJpdmlhbFN0cmluZyhleGVjLCBraW5kKSkpOworICAg
ICAgICAgICAgYXJyYXktPnB1dERpcmVjdEluZGV4KGV4ZWMsIGluZGV4KyssIGNvbnN0cnVjdElu
dGVybmFsUHJvcGVydHkoZXhlYywgImtpbmQiLCBqc05vbnRyaXZpYWxTdHJpbmcodm0sIGtpbmQp
KSk7CiAgICAgICAgICAgICByZXR1cm4gYXJyYXk7CiAgICAgICAgIH0KIApAQCAtNDI4LDcgKzQy
OSw3IEBAIEpTVmFsdWUgSlNJbmplY3RlZFNjcmlwdEhvc3Q6OmdldEludGVybmEKICAgICAgICAg
ICAgIGFycmF5LT5wdXREaXJlY3RJbmRleChleGVjLCBpbmRleCsrLCBjb25zdHJ1Y3RJbnRlcm5h
bFByb3BlcnR5KGV4ZWMsICJzZXQiLCBpdGVyYXRlZFZhbHVlKSk7CiAgICAgICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkpOwogICAgICAgICAgICAgc2NvcGUucmVs
ZWFzZSgpOwotICAgICAgICAgICAgYXJyYXktPnB1dERpcmVjdEluZGV4KGV4ZWMsIGluZGV4Kyss
IGNvbnN0cnVjdEludGVybmFsUHJvcGVydHkoZXhlYywgImtpbmQiLCBqc05vbnRyaXZpYWxTdHJp
bmcoZXhlYywga2luZCkpKTsKKyAgICAgICAgICAgIGFycmF5LT5wdXREaXJlY3RJbmRleChleGVj
LCBpbmRleCsrLCBjb25zdHJ1Y3RJbnRlcm5hbFByb3BlcnR5KGV4ZWMsICJraW5kIiwganNOb250
cml2aWFsU3RyaW5nKHZtLCBraW5kKSkpOwogICAgICAgICAgICAgcmV0dXJuIGFycmF5OwogICAg
ICAgICB9CiAgICAgfQpAQCAtNTA0LDggKzUwNSw4IEBAIEpTVmFsdWUgSlNJbmplY3RlZFNjcmlw
dEhvc3Q6OndlYWtNYXBFbnQKIAogICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8
IGJ1ZmZlci5zaXplKCk7IGluZGV4ICs9IDIpIHsKICAgICAgICAgSlNPYmplY3QqIGVudHJ5ID0g
Y29uc3RydWN0RW1wdHlPYmplY3QoZXhlYyk7Ci0gICAgICAgIGVudHJ5LT5wdXREaXJlY3Qodm0s
IElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgImtleSIpLCBidWZmZXIuYXQoaW5kZXgpKTsK
LSAgICAgICAgZW50cnktPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVj
LCAidmFsdWUiKSwgYnVmZmVyLmF0KGluZGV4ICsgMSkpOworICAgICAgICBlbnRyeS0+cHV0RGly
ZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAia2V5IiksIGJ1ZmZlci5hdChpbmRl
eCkpOworICAgICAgICBlbnRyeS0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KHZtLCAidmFsdWUiKSwgYnVmZmVyLmF0KGluZGV4ICsgMSkpOwogICAgICAgICBhcnJheS0+cHV0
RGlyZWN0SW5kZXgoZXhlYywgaW5kZXggLyAyLCBlbnRyeSk7CiAgICAgICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIEpTVmFsdWUoKSk7CiAgICAgfQpAQCAtNTU0LDcgKzU1NSw3IEBAIEpT
VmFsdWUgSlNJbmplY3RlZFNjcmlwdEhvc3Q6OndlYWtTZXRFbnQKIAogICAgIGZvciAodW5zaWdu
ZWQgaW5kZXggPSAwOyBpbmRleCA8IGJ1ZmZlci5zaXplKCk7ICsraW5kZXgpIHsKICAgICAgICAg
SlNPYmplY3QqIGVudHJ5ID0gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYyk7Ci0gICAgICAgIGVu
dHJ5LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgInZhbHVlIiks
IGJ1ZmZlci5hdChpbmRleCkpOworICAgICAgICBlbnRyeS0+cHV0RGlyZWN0KHZtLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKHZtLCAidmFsdWUiKSwgYnVmZmVyLmF0KGluZGV4KSk7CiAgICAgICAg
IGFycmF5LT5wdXREaXJlY3RJbmRleChleGVjLCBpbmRleCwgZW50cnkpOwogICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkpOwogICAgIH0KQEAgLTY1Myw3ICs2NTQs
NyBAQCBKU1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRIb3N0OjppdGVyYXRvckVuCiAgICAgICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKICAgICAgICAgSlNPYmplY3QqIGVudHJ5
ID0gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYyk7Ci0gICAgICAgIGVudHJ5LT5wdXREaXJlY3Qo
dm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgInZhbHVlIiksIG5leHRWYWx1ZSk7Cisg
ICAgICAgIGVudHJ5LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJ2
YWx1ZSIpLCBuZXh0VmFsdWUpOwogICAgICAgICBhcnJheS0+cHV0RGlyZWN0SW5kZXgoZXhlYywg
aSwgZW50cnkpOwogICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7CiAg
ICAgICAgICAgICBzY29wZS5yZWxlYXNlKCk7CkBAIC03MjIsNyArNzIzLDcgQEAgSlNWYWx1ZSBK
U0luamVjdGVkU2NyaXB0SG9zdDo6cXVlcnlJbnN0YQogICAgIGlmIChjaGVja0ZvcmJpZGRlblBy
b3RvdHlwZShleGVjLCBvYmplY3QsIGxleGljYWxHbG9iYWxPYmplY3QtPnByb21pc2VQcm90b3R5
cGUoKSkpCiAgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwgInF1ZXJ5
SW5zdGFuY2VzIGNhbm5vdCBiZSBjYWxsZWQgd2l0aCBQcm9taXNlLiJfcyk7CiAKLSAgICBzYW5p
dGl6ZVN0YWNrRm9yVk0oJnZtKTsKKyAgICBzYW5pdGl6ZVN0YWNrRm9yVk0odm0pOwogICAgIHZt
LmhlYXAuY29sbGVjdE5vdyhTeW5jLCBDb2xsZWN0aW9uU2NvcGU6OkZ1bGwpOwogCiAgICAgSlNB
cnJheSogYXJyYXkgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIG51bGxwdHIpOwpAQCAtODAw
LDcgKzgwMSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGFuYWx5emVFZGdlKEpTQ2VsbCogZnJvbSwg
SlNDZWxsKiB0bywgU2xvdFZpc2l0b3I6OlJvb3RNYXJrUmVhc29uIHJlYXNvbikKICAgICB7CiAg
ICAgICAgIEFTU0VSVCh0byk7Ci0gICAgICAgIEFTU0VSVCh0by0+dm0oKS0+aGVhcFByb2ZpbGVy
KCktPmFjdGl2ZUhlYXBBbmFseXplcigpID09IHRoaXMpOworICAgICAgICBBU1NFUlQodG8tPnZt
KCkuaGVhcFByb2ZpbGVyKCktPmFjdGl2ZUhlYXBBbmFseXplcigpID09IHRoaXMpOwogCiAgICAg
ICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9tdXRleCk7CiAKQEAgLTkwMCw3ICs5MDEsNyBA
QCBKU1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRIb3N0OjpxdWVyeUhvbGRlCiAgICAgewogICAgICAg
ICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CiAgICAgICAgIFByZXZlbnRDb2xsZWN0aW9uU2Nv
cGUgcHJldmVudENvbGxlY3Rpb25TY29wZSh2bS5oZWFwKTsKLSAgICAgICAgc2FuaXRpemVTdGFj
a0ZvclZNKCZ2bSk7CisgICAgICAgIHNhbml0aXplU3RhY2tGb3JWTSh2bSk7CiAKICAgICAgICAg
SGVhcEhvbGRlckZpbmRlciBob2xkZXJGaW5kZXIodm0uZW5zdXJlSGVhcFByb2ZpbGVyKCksIHRh
cmdldC5hc0NlbGwoKSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
SlNKYXZhU2NyaXB0Q2FsbEZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL0pTSmF2YVNjcmlwdENhbGxGcmFtZS5jcHAJKHJldmlzaW9uIDI0OTEy
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNKYXZhU2NyaXB0Q2FsbEZy
YW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEyMSw5ICsxMjEsOSBAQCBzdGF0aWMgSlNWYWx1
ZSB2YWx1ZUZvclNjb3BlTG9jYXRpb24oRXhlCiAgICAgLy8gRGVidWdnZXIuTG9jYXRpb24gcHJv
dG9jb2wgb2JqZWN0LgogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgSlNPYmplY3QqIHJl
c3VsdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0
KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJzY3JpcHRJZCIpLCBqc1N0cmluZyhl
eGVjLCBTdHJpbmc6Om51bWJlcihsb2NhdGlvbi5zb3VyY2VJRCkpKTsKLSAgICByZXN1bHQtPnB1
dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCAibGluZU51bWJlciIpLCBq
c051bWJlcihsb2NhdGlvbi5saW5lKSk7Ci0gICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50
aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgImNvbHVtbk51bWJlciIpLCBqc051bWJlcihsb2NhdGlv
bi5jb2x1bW4pKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZyh2bSwgInNjcmlwdElkIiksIGpzU3RyaW5nKHZtLCBTdHJpbmc6Om51bWJlcihsb2NhdGlv
bi5zb3VyY2VJRCkpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyh2bSwgImxpbmVOdW1iZXIiKSwganNOdW1iZXIobG9jYXRpb24ubGluZSkpOworICAg
IHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiY29sdW1u
TnVtYmVyIiksIGpzTnVtYmVyKGxvY2F0aW9uLmNvbHVtbikpOwogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKQEAgLTE0Myw5ICsxNDMsOSBAQCBKU1ZhbHVlIEpTSmF2YVNjcmlwdENhbGxGcmFtZTo6
c2NvcGVEZXNjCiAgICAgZm9yIChEZWJ1Z2dlclNjb3BlOjppdGVyYXRvciBpdGVyID0gc2NvcGVD
aGFpbi0+YmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgewogICAgICAgICBEZWJ1Z2dlclNj
b3BlKiBzY29wZSA9IGl0ZXIuZ2V0KCk7CiAgICAgICAgIEpTT2JqZWN0KiBkZXNjcmlwdGlvbiA9
IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMpOwotICAgICAgICBkZXNjcmlwdGlvbi0+cHV0RGly
ZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJ0eXBlIiksIHZhbHVlRm9yU2Nv
cGVUeXBlKHNjb3BlKSk7Ci0gICAgICAgIGRlc2NyaXB0aW9uLT5wdXREaXJlY3Qodm0sIElkZW50
aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgIm5hbWUiKSwganNTdHJpbmcoZXhlYywgc2NvcGUtPm5h
bWUoKSkpOwotICAgICAgICBkZXNjcmlwdGlvbi0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKGV4ZWMsICJsb2NhdGlvbiIpLCB2YWx1ZUZvclNjb3BlTG9jYXRpb24oZXhlYywg
c2NvcGUtPmxvY2F0aW9uKCkpKTsKKyAgICAgICAgZGVzY3JpcHRpb24tPnB1dERpcmVjdCh2bSwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInR5cGUiKSwgdmFsdWVGb3JTY29wZVR5cGUoc2Nv
cGUpKTsKKyAgICAgICAgZGVzY3JpcHRpb24tPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyh2bSwgIm5hbWUiKSwganNTdHJpbmcodm0sIHNjb3BlLT5uYW1lKCkpKTsKKyAgICAg
ICAgZGVzY3JpcHRpb24tPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwg
ImxvY2F0aW9uIiksIHZhbHVlRm9yU2NvcGVMb2NhdGlvbihleGVjLCBzY29wZS0+bG9jYXRpb24o
KSkpOwogICAgICAgICBhcnJheS0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaW5kZXgrKywgZGVzY3Jp
cHRpb24pOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIEpTVmFsdWUo
KSk7CiAgICAgfQpAQCAtMTc1LDcgKzE3NSw3IEBAIEpTVmFsdWUgSlNKYXZhU2NyaXB0Q2FsbEZy
YW1lOjpjb2x1bW4oRXgKIAogSlNWYWx1ZSBKU0phdmFTY3JpcHRDYWxsRnJhbWU6OmZ1bmN0aW9u
TmFtZShFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMs
IGltcGwoKS5mdW5jdGlvbk5hbWUoKSk7CisgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMtPnZtKCks
IGltcGwoKS5mdW5jdGlvbk5hbWUoKSk7CiB9CiAKIEpTVmFsdWUgSlNKYXZhU2NyaXB0Q2FsbEZy
YW1lOjpzY29wZUNoYWluKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKQEAgLTIxOCwxMSArMjE4LDEy
IEBAIEpTVmFsdWUgSlNKYXZhU2NyaXB0Q2FsbEZyYW1lOjppc1RhaWxEZWwKIAogSlNWYWx1ZSBK
U0phdmFTY3JpcHRDYWxsRnJhbWU6OnR5cGUoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogeworICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgc3dpdGNoIChpbXBsKCkudHlwZSgpKSB7CiAgICAg
Y2FzZSBEZWJ1Z2dlckNhbGxGcmFtZTo6RnVuY3Rpb25UeXBlOgotICAgICAgICByZXR1cm4ganNO
b250cml2aWFsU3RyaW5nKGV4ZWMsICJmdW5jdGlvbiJfcyk7CisgICAgICAgIHJldHVybiBqc05v
bnRyaXZpYWxTdHJpbmcodm0sICJmdW5jdGlvbiJfcyk7CiAgICAgY2FzZSBEZWJ1Z2dlckNhbGxG
cmFtZTo6UHJvZ3JhbVR5cGU6Ci0gICAgICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcoZXhl
YywgInByb2dyYW0iX3MpOworICAgICAgICByZXR1cm4ganNOb250cml2aWFsU3RyaW5nKHZtLCAi
cHJvZ3JhbSJfcyk7CiAgICAgfQogCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL1NjcmlwdENhbGxTdGFja0ZhY3RvcnkuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvU2NyaXB0Q2Fs
bFN0YWNrRmFjdG9yeS5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3IvU2NyaXB0Q2FsbFN0YWNrRmFjdG9yeS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoYykgMjAxMCBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDEyIFJlc2VhcmNo
IEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKQEAgLTEyOSw5ICsx
MjksOSBAQCBzdGF0aWMgYm9vbCBleHRyYWN0U291cmNlSW5mb3JtYXRpb25Gcm9tCiAgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogCiAgICAgLy8gRklYTUU6IDxodHRw
Oi8vd2Via2l0Lm9yZy9iLzExNTA4Nz4gV2ViIEluc3BlY3RvcjogU2hvdWxkIG5vdCBuZWVkIHRv
IGV2YWx1YXRlIEphdmFTY3JpcHQgaGFuZGxpbmcgZXhjZXB0aW9ucwotICAgIEpTVmFsdWUgbGlu
ZVZhbHVlID0gZXhjZXB0aW9uT2JqZWN0LT5nZXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21T
dHJpbmcoZXhlYywgImxpbmUiKSk7Ci0gICAgSlNWYWx1ZSBjb2x1bW5WYWx1ZSA9IGV4Y2VwdGlv
bk9iamVjdC0+Z2V0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJjb2x1
bW4iKSk7Ci0gICAgSlNWYWx1ZSBzb3VyY2VVUkxWYWx1ZSA9IGV4Y2VwdGlvbk9iamVjdC0+Z2V0
RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJzb3VyY2VVUkwiKSk7Cisg
ICAgSlNWYWx1ZSBsaW5lVmFsdWUgPSBleGNlcHRpb25PYmplY3QtPmdldERpcmVjdCh2bSwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImxpbmUiKSk7CisgICAgSlNWYWx1ZSBjb2x1bW5WYWx1
ZSA9IGV4Y2VwdGlvbk9iamVjdC0+Z2V0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KHZtLCAiY29sdW1uIikpOworICAgIEpTVmFsdWUgc291cmNlVVJMVmFsdWUgPSBleGNlcHRpb25P
YmplY3QtPmdldERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInNvdXJjZVVS
TCIpKTsKICAgICAKICAgICBib29sIHJlc3VsdCA9IGZhbHNlOwogICAgIGlmIChsaW5lVmFsdWUg
JiYgbGluZVZhbHVlLmlzTnVtYmVyKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3IvYWdlbnRzL0luc3BlY3RvckF1ZGl0QWdlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckF1ZGl0QWdlbnQuY3Bw
CShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2Fn
ZW50cy9JbnNwZWN0b3JBdWRpdEFnZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM2LDkgKzEz
NiwxMCBAQCB2b2lkIEluc3BlY3RvckF1ZGl0QWdlbnQ6OnBvcHVsYXRlQXVkaXRPCiAgICAgaWYg
KCFleGVjU3RhdGUpCiAgICAgICAgIHJldHVybjsKIAotICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxv
Y2soZXhlY1N0YXRlKTsKKyAgICBKU0M6OlZNJiB2bSA9IGV4ZWNTdGF0ZS0+dm0oKTsKKyAgICBK
U0M6OkpTTG9ja0hvbGRlciBsb2NrKHZtKTsKIAotICAgIGF1ZGl0T2JqZWN0LT5wdXREaXJlY3Qo
ZXhlY1N0YXRlLT52bSgpLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlY1N0YXRlLCAi
VmVyc2lvbiIpLCBKU0M6OkpTVmFsdWUoSW5zcGVjdG9yOjpQcm90b2NvbDo6QXVkaXQ6OlZFUlNJ
T04pKTsKKyAgICBhdWRpdE9iamVjdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZy
b21TdHJpbmcodm0sICJWZXJzaW9uIiksIEpTQzo6SlNWYWx1ZShJbnNwZWN0b3I6OlByb3RvY29s
OjpBdWRpdDo6VkVSU0lPTikpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckhlYXBBZ2Vu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2Vu
dHMvSW5zcGVjdG9ySGVhcEFnZW50LmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9ySGVhcEFnZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUt
MjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTkwLDcgKzkwLDcgQEAgdm9pZCBJbnNwZWN0b3JIZWFwQWdlbnQ6Omdj
KEVycm9yU3RyaW5nJgogewogICAgIFZNJiB2bSA9IG1fZW52aXJvbm1lbnQudm0oKTsKICAgICBK
U0xvY2tIb2xkZXIgbG9jayh2bSk7Ci0gICAgc2FuaXRpemVTdGFja0ZvclZNKCZ2bSk7CisgICAg
c2FuaXRpemVTdGFja0ZvclZNKHZtKTsKICAgICB2bS5oZWFwLmNvbGxlY3ROb3coU3luYywgQ29s
bGVjdGlvblNjb3BlOjpGdWxsKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
dGVycHJldGVyL0ZyYW1lVHJhY2Vycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnRlcnByZXRlci9GcmFtZVRyYWNlcnMuaAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ZyYW1lVHJhY2Vycy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtODMsMTMgKzgzLDEzIEBAIEFMV0FZU19JTkxJTkUgc3RhdGljIHZvaWQgYXNzZXJ0
U3RhY2tQb2kKIAogY2xhc3MgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHsKIHB1YmxpYzoKLSAgICBB
TFdBWVNfSU5MSU5FIE5hdGl2ZUNhbGxGcmFtZVRyYWNlcihWTSogdm0sIENhbGxGcmFtZSogY2Fs
bEZyYW1lKQorICAgIEFMV0FZU19JTkxJTkUgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyKFZNJiB2bSwg
Q2FsbEZyYW1lKiBjYWxsRnJhbWUpCiAgICAgewotICAgICAgICBBU1NFUlQodm0pOworICAgICAg
ICBBU1NFUlQoJnZtKTsKICAgICAgICAgQVNTRVJUKGNhbGxGcmFtZSk7Ci0gICAgICAgIEFTU0VS
VChyZWludGVycHJldF9jYXN0PHZvaWQqPihjYWxsRnJhbWUpIDwgcmVpbnRlcnByZXRfY2FzdDx2
b2lkKj4odm0tPnRvcEVudHJ5RnJhbWUpKTsKKyAgICAgICAgQVNTRVJUKHJlaW50ZXJwcmV0X2Nh
c3Q8dm9pZCo+KGNhbGxGcmFtZSkgPCByZWludGVycHJldF9jYXN0PHZvaWQqPih2bS50b3BFbnRy
eUZyYW1lKSk7CiAgICAgICAgIGFzc2VydFN0YWNrUG9pbnRlcklzQWxpZ25lZCgpOwotICAgICAg
ICB2bS0+dG9wQ2FsbEZyYW1lID0gY2FsbEZyYW1lOworICAgICAgICB2bS50b3BDYWxsRnJhbWUg
PSBjYWxsRnJhbWU7CiAgICAgfQogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
dGVycHJldGVyL0ludGVycHJldGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02NjIsNyArNjYyLDcgQEAgdm9pZCBJbnRlcnByZXRlcjo6bm90aWZ5RGVidWdn
ZXJPZkV4Y2VwdAogSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZVByb2dyYW0oY29uc3QgU291
cmNlQ29kZSYgc291cmNlLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNPYmplY3QqIHRoaXNPYmop
CiB7CiAgICAgSlNTY29wZSogc2NvcGUgPSB0aGlzT2JqLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFs
U2NvcGUoKTsKLSAgICBWTSYgdm0gPSAqc2NvcGUtPnZtKCk7CisgICAgVk0mIHZtID0gc2NvcGUt
PnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAK
ICAgICBQcm9ncmFtRXhlY3V0YWJsZSogcHJvZ3JhbSA9IFByb2dyYW1FeGVjdXRhYmxlOjpjcmVh
dGUoY2FsbEZyYW1lLCBzb3VyY2UpOwpAQCAtOTg3LDcgKzk4Nyw3IEBAIEpTT2JqZWN0KiBJbnRl
cnByZXRlcjo6ZXhlY3V0ZUNvbnN0cnVjdCgKIAogQ2FsbEZyYW1lQ2xvc3VyZSBJbnRlcnByZXRl
cjo6cHJlcGFyZUZvclJlcGVhdENhbGwoRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4ZWN1
dGFibGUsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBQcm90b0NhbGxGcmFtZSogcHJvdG9DYWxsRnJh
bWUsIEpTRnVuY3Rpb24qIGZ1bmN0aW9uLCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMs
IEpTU2NvcGUqIHNjb3BlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewotICAgIFZNJiB2bSA9ICpz
Y29wZS0+dm0oKTsKKyAgICBWTSYgdm0gPSBzY29wZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICB0aHJvd1Njb3BlLmFzc2VydE5vRXhj
ZXB0aW9uKCk7CiAgICAgCkBAIC0xMDEyLDcgKzEwMTIsNyBAQCBDYWxsRnJhbWVDbG9zdXJlIElu
dGVycHJldGVyOjpwcmVwYXJlRm9yCiAKIEpTVmFsdWUgSW50ZXJwcmV0ZXI6OmV4ZWN1dGUoRXZh
bEV4ZWN1dGFibGUqIGV2YWwsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU1ZhbHVlIHRoaXNWYWx1
ZSwgSlNTY29wZSogc2NvcGUpCiB7Ci0gICAgVk0mIHZtID0gKnNjb3BlLT52bSgpOworICAgIFZN
JiB2bSA9IHNjb3BlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogCiAgICAgQVNTRVJUKCZ2bSA9PSAmY2FsbEZyYW1lLT52bSgpKTsKQEAgLTEx
NjEsNyArMTE2MSw3IEBAIEpTVmFsdWUgSW50ZXJwcmV0ZXI6OmV4ZWN1dGUoRXZhbEV4ZWN1dGEK
IAogSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZU1vZHVsZVByb2dyYW0oTW9kdWxlUHJvZ3Jh
bUV4ZWN1dGFibGUqIGV4ZWN1dGFibGUsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU01vZHVsZUVu
dmlyb25tZW50KiBzY29wZSkKIHsKLSAgICBWTSYgdm0gPSAqc2NvcGUtPnZtKCk7CisgICAgVk0m
IHZtID0gc2NvcGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAKICAgICBBU1NFUlQoJnZtID09ICZjYWxsRnJhbWUtPnZtKCkpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlzaXRvci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlzaXRvci5j
cHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9TdGFja1Zpc2l0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjc0LDcgKzI3NCw3IEBAIE9w
dGlvbmFsPFJlZ2lzdGVyQXRPZmZzZXRMaXN0PiBTdGFja1Zpc2kKICAgICB9CiAKICAgICBpZiAo
Y2FsbGVlKCkuaXNDZWxsKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIGpzVG9XYXNtSUNDYWxsZWUg
PSBqc0R5bmFtaWNDYXN0PEpTVG9XYXNtSUNDYWxsZWUqPigqY2FsbGVlKCkuYXNDZWxsKCktPnZt
KCksIGNhbGxlZSgpLmFzQ2VsbCgpKSkKKyAgICAgICAgaWYgKGF1dG8qIGpzVG9XYXNtSUNDYWxs
ZWUgPSBqc0R5bmFtaWNDYXN0PEpTVG9XYXNtSUNDYWxsZWUqPihjYWxsZWUoKS5hc0NlbGwoKS0+
dm0oKSwgY2FsbGVlKCkuYXNDZWxsKCkpKQogICAgICAgICAgICAgcmV0dXJuIGpzVG9XYXNtSUND
YWxsZWUtPmZ1bmN0aW9uKCktPnVzZWRDYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CiAgICAgfQogI2Vu
ZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKQEAgLTQxNCw3ICs0MTQsNyBAQCB2b2lkIFN0YWNr
VmlzaXRvcjo6RnJhbWU6OmNvbXB1dGVMaW5lQW5kCiAgICAgbGluZSA9IGRpdm90TGluZSArIGNv
ZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCktPmZpcnN0TGluZSgpOwogICAgIGNvbHVtbiA9IGRp
dm90Q29sdW1uICsgKGRpdm90TGluZSA/IDEgOiBjb2RlQmxvY2stPmZpcnN0TGluZUNvbHVtbk9m
ZnNldCgpKTsKIAotICAgIGlmIChPcHRpb25hbDxpbnQ+IG92ZXJyaWRlTGluZU51bWJlciA9IGNv
ZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCktPm92ZXJyaWRlTGluZU51bWJlcigqY29kZUJsb2Nr
LT52bSgpKSkKKyAgICBpZiAoT3B0aW9uYWw8aW50PiBvdmVycmlkZUxpbmVOdW1iZXIgPSBjb2Rl
QmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLT5vdmVycmlkZUxpbmVOdW1iZXIoY29kZUJsb2NrLT52
bSgpKSkKICAgICAgICAgbGluZSA9IG92ZXJyaWRlTGluZU51bWJlci52YWx1ZSgpOwogfQogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCShy
ZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVs
cGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzNCw3ICs2MzQsNyBAQCB2b2lkIEFzc2VtYmx5
SGVscGVyczo6ZW1pdER1bWJWaXJ0dWFsQ2FsCiAgICAgQ2FsbCBjYWxsID0gbmVhckNhbGwoKTsK
ICAgICBhZGRMaW5rVGFzaygKICAgICAgICAgWz0sICZ2bV0gKExpbmtCdWZmZXImIGxpbmtCdWZm
ZXIpIHsKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91dGluZVB0
clRhZz4gdmlydHVhbFRodW5rID0gdmlydHVhbFRodW5rRm9yKCZ2bSwgKmluZm8pOworICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiB2aXJ0dWFs
VGh1bmsgPSB2aXJ0dWFsVGh1bmtGb3Iodm0sICppbmZvKTsKICAgICAgICAgICAgIGluZm8tPnNl
dFNsb3dTdHViKGNyZWF0ZUpJVFN0dWJSb3V0aW5lKHZpcnR1YWxUaHVuaywgdm0sIG51bGxwdHIs
IHRydWUpKTsKICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBDb2RlTG9jYXRpb25M
YWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4odmlydHVhbFRodW5rLmNvZGUoKSkpOwogICAgICAg
ICB9KTsKQEAgLTcyNyw3ICs3MjcsNyBAQCB2b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1pdENvbnZl
cnRWYWx1ZVRvCiAgICAgZG9uZS5hcHBlbmQoanVtcCgpKTsKIAogICAgIGlzU3RyaW5nLmxpbmso
dGhpcyk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGpzRW1wdHlTdHJpbmcoJnZtKSksIHJlc3Vs
dCk7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKGpzRW1wdHlTdHJpbmcodm0pKSwgcmVzdWx0KTsK
ICAgICBjb21wYXJlUHRyKGludmVydCA/IEVxdWFsIDogTm90RXF1YWwsIHZhbHVlLnBheWxvYWRH
UFIoKSwgcmVzdWx0LCByZXN1bHQpOwogICAgIGRvbmUuYXBwZW5kKGp1bXAoKSk7CiAKQEAgLTgx
Nyw3ICs4MTcsNyBAQCBBc3NlbWJseUhlbHBlcnM6Okp1bXBMaXN0IEFzc2VtYmx5SGVscGVyCiAg
ICAgfQogCiAgICAgaXNTdHJpbmcubGluayh0aGlzKTsKLSAgICB0cnV0aHkuYXBwZW5kKGJyYW5j
aFB0cihpbnZlcnQgPyBFcXVhbCA6IE5vdEVxdWFsLCB2YWx1ZS5wYXlsb2FkR1BSKCksIFRydXN0
ZWRJbW1QdHIoanNFbXB0eVN0cmluZygmdm0pKSkpOworICAgIHRydXRoeS5hcHBlbmQoYnJhbmNo
UHRyKGludmVydCA/IEVxdWFsIDogTm90RXF1YWwsIHZhbHVlLnBheWxvYWRHUFIoKSwgVHJ1c3Rl
ZEltbVB0cihqc0VtcHR5U3RyaW5nKHZtKSkpKTsKICAgICBkb25lLmFwcGVuZChqdW1wKCkpOwog
CiAgICAgaXNCaWdJbnQubGluayh0aGlzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvQXNzZW1ibHlIZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtNjIsNyAr
NjIsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2soKSB7IHJl
dHVybiBtX2NvZGVCbG9jazsgfQotICAgIFZNJiB2bSgpIHsgcmV0dXJuICptX2NvZGVCbG9jay0+
dm0oKTsgfQorICAgIFZNJiB2bSgpIHsgcmV0dXJuIG1fY29kZUJsb2NrLT52bSgpOyB9CiAgICAg
QXNzZW1ibGVyVHlwZV9UJiBhc3NlbWJsZXIoKSB7IHJldHVybiBtX2Fzc2VtYmxlcjsgfQogCiAg
ICAgdm9pZCBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVQuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDA4LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA4LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03NCwxMiArNzQsMTIgQEAgdm9pZCBjdGlQ
YXRjaENhbGxCeVJldHVybkFkZHJlc3MoUmV0dXJuQQogICAgICAgICBuZXdDYWxsZWVGdW5jdGlv
bi5yZXRhZ2dlZDxPcGVyYXRpb25QdHJUYWc+KCkpOwogfQogCi1KSVQ6OkpJVChWTSogdm0sIENv
ZGVCbG9jayogY29kZUJsb2NrLCB1bnNpZ25lZCBsb29wT1NSRW50cnlCeXRlY29kZU9mZnNldCkK
LSAgICA6IEpTSW50ZXJmYWNlSklUKHZtLCBjb2RlQmxvY2spCi0gICAgLCBtX2ludGVycHJldGVy
KHZtLT5pbnRlcnByZXRlcikKK0pJVDo6SklUKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IHVuc2lnbmVkIGxvb3BPU1JFbnRyeUJ5dGVjb2RlT2Zmc2V0KQorICAgIDogSlNJbnRlcmZhY2VK
SVQoJnZtLCBjb2RlQmxvY2spCisgICAgLCBtX2ludGVycHJldGVyKHZtLmludGVycHJldGVyKQog
ICAgICwgbV9sYWJlbHMoY29kZUJsb2NrID8gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXpl
KCkgOiAwKQogICAgICwgbV9ieXRlY29kZU9mZnNldChzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2ln
bmVkPjo6bWF4KCkpCi0gICAgLCBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlcigqdm0pCisgICAg
LCBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlcih2bSkKICAgICAsIG1fY2FuQmVPcHRpbWl6ZWQo
ZmFsc2UpCiAgICAgLCBtX3Nob3VsZEVtaXRQcm9maWxpbmcoZmFsc2UpCiAgICAgLCBtX3Nob3Vs
ZFVzZUluZGV4TWFza2luZyhPcHRpb25zOjplbmFibGVTcGVjdHJlTWl0aWdhdGlvbnMoKSkKQEAg
LTEwMiw3ICsxMDIsNyBAQCB2b2lkIEpJVDo6ZW1pdEVudGVyT3B0aW1pemF0aW9uQ2hlY2soKQog
ICAgIHNraXBPcHRpbWl6ZS5hcHBlbmQoYnJhbmNoQWRkMzIoU2lnbmVkLCBUcnVzdGVkSW1tMzIo
T3B0aW9uczo6ZXhlY3V0aW9uQ291bnRlckluY3JlbWVudEZvckVudHJ5KCkpLCBBYnNvbHV0ZUFk
ZHJlc3MobV9jb2RlQmxvY2stPmFkZHJlc3NPZkpJVEV4ZWN1dGVDb3VudGVyKCkpKSk7CiAgICAg
QVNTRVJUKCFtX2J5dGVjb2RlT2Zmc2V0KTsKIAotICAgIGNvcHlDYWxsZWVTYXZlc0Zyb21GcmFt
ZU9yUmVnaXN0ZXJUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgpLT50b3BFbnRyeUZy
YW1lKTsKKyAgICBjb3B5Q2FsbGVlU2F2ZXNGcm9tRnJhbWVPclJlZ2lzdGVyVG9FbnRyeUZyYW1l
Q2FsbGVlU2F2ZXNCdWZmZXIodm0oKS50b3BFbnRyeUZyYW1lKTsKIAogICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uT3B0aW1pemUsIG1fYnl0ZWNvZGVPZmZzZXQpOwogICAgIHNraXBPcHRpbWl6
ZS5hcHBlbmQoYnJhbmNoVGVzdFB0cihaZXJvLCByZXR1cm5WYWx1ZUdQUikpOwpAQCAtMTkxLDcg
KzE5MSw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKIAogICAgIG1fY2Fs
bExpbmtJbmZvSW5kZXggPSAwOwogCi0gICAgVk0mIHZtID0gKm1fY29kZUJsb2NrLT52bSgpOwor
ICAgIFZNJiB2bSA9IG1fY29kZUJsb2NrLT52bSgpOwogICAgIHVuc2lnbmVkIHN0YXJ0Qnl0ZWNv
ZGVPZmZzZXQgPSAwOwogICAgIGlmIChtX2xvb3BPU1JFbnRyeUJ5dGVjb2RlT2Zmc2V0ICYmICht
X2NvZGVCbG9jay0+aW5oZXJpdHM8UHJvZ3JhbUNvZGVCbG9jaz4odm0pIHx8IG1fY29kZUJsb2Nr
LT5pbmhlcml0czxNb2R1bGVQcm9ncmFtQ29kZUJsb2NrPih2bSkpKSB7CiAgICAgICAgIC8vIFdl
IGNhbiBvbmx5IGRvIHRoaXMgb3B0aW1pemF0aW9uIGJlY2F1c2Ugd2UgZXhlY3V0ZSBQcm9ncmFt
Q29kZUJsb2NrJ3MgZXhhY3RseSBvbmNlLgpAQCAtOTMzLDExICs5MzMsMTEgQEAgdm9pZCBKSVQ6
OnByaXZhdGVDb21waWxlRXhjZXB0aW9uSGFuZGxlcgogICAgIGlmICghbV9leGNlcHRpb25DaGVj
a3NXaXRoQ2FsbEZyYW1lUm9sbGJhY2suZW1wdHkoKSkgewogICAgICAgICBtX2V4Y2VwdGlvbkNo
ZWNrc1dpdGhDYWxsRnJhbWVSb2xsYmFjay5saW5rKHRoaXMpOwogCi0gICAgICAgIGNvcHlDYWxs
ZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCktPnRvcEVudHJ5RnJhbWUp
OworICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2
bSgpLnRvcEVudHJ5RnJhbWUpOwogCiAgICAgICAgIC8vIGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXJG
cm9tQ2FsbGVyRnJhbWUgaXMgcGFzc2VkIHR3byBhcmd1bWVudHMsIHRoZSBWTSBhbmQgdGhlIGV4
ZWMgKHRoZSBDYWxsRnJhbWUqKS4KIAotICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIodm0oKSks
IEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cigmdm0o
KSksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CiAgICAgICAgIG1vdmUoR1BSSW5mbzo6Y2FsbEZy
YW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CiAKICNpZiBDUFUoWDg2KQpAQCAt
OTQ2LDE3ICs5NDYsMTcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlRXhjZXB0aW9uSGFuZGxl
cgogICAgICAgICBwb2tlKEdQUkluZm86OmFyZ3VtZW50R1BSMSwgMSk7CiAjZW5kaWYKICAgICAg
ICAgbV9jYWxscy5hcHBlbmQoQ2FsbFJlY29yZChjYWxsKE9wZXJhdGlvblB0clRhZyksIHN0ZDo6
bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRy
VGFnPihsb29rdXBFeGNlcHRpb25IYW5kbGVyRnJvbUNhbGxlckZyYW1lKSkpOwotICAgICAgICBq
dW1wVG9FeGNlcHRpb25IYW5kbGVyKCp2bSgpKTsKKyAgICAgICAganVtcFRvRXhjZXB0aW9uSGFu
ZGxlcih2bSgpKTsKICAgICB9CiAKICAgICBpZiAoIW1fZXhjZXB0aW9uQ2hlY2tzLmVtcHR5KCkg
fHwgbV9ieVZhbENvbXBpbGF0aW9uSW5mby5zaXplKCkpIHsKICAgICAgICAgbV9leGNlcHRpb25I
YW5kbGVyID0gbGFiZWwoKTsKICAgICAgICAgbV9leGNlcHRpb25DaGVja3MubGluayh0aGlzKTsK
IAotICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2
bSgpLT50b3BFbnRyeUZyYW1lKTsKKyAgICAgICAgY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1l
Q2FsbGVlU2F2ZXNCdWZmZXIodm0oKS50b3BFbnRyeUZyYW1lKTsKIAogICAgICAgICAvLyBsb29r
dXBFeGNlcHRpb25IYW5kbGVyIGlzIHBhc3NlZCB0d28gYXJndW1lbnRzLCB0aGUgVk0gYW5kIHRo
ZSBleGVjICh0aGUgQ2FsbEZyYW1lKikuCi0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cih2bSgp
KSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKCZ2
bSgpKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKICAgICAgICAgbW92ZShHUFJJbmZvOjpjYWxs
RnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKIAogI2lmIENQVShYODYpCkBA
IC05NjUsNyArOTY1LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlRXhjZXB0aW9uSGFuZGxl
cgogICAgICAgICBwb2tlKEdQUkluZm86OmFyZ3VtZW50R1BSMSwgMSk7CiAjZW5kaWYKICAgICAg
ICAgbV9jYWxscy5hcHBlbmQoQ2FsbFJlY29yZChjYWxsKE9wZXJhdGlvblB0clRhZyksIHN0ZDo6
bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRy
VGFnPihsb29rdXBFeGNlcHRpb25IYW5kbGVyKSkpOwotICAgICAgICBqdW1wVG9FeGNlcHRpb25I
YW5kbGVyKCp2bSgpKTsKKyAgICAgICAganVtcFRvRXhjZXB0aW9uSGFuZGxlcih2bSgpKTsKICAg
ICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24gMjQ5MTI4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE5
Miw0MSArMTkyLDQzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGF0aWMgY29uc3QgaW50
IHBhdGNoUHV0QnlJZERlZmF1bHRPZmZzZXQgPSAyNTY7CiAKICAgICBwdWJsaWM6Ci0gICAgICAg
IEpJVChWTSosIENvZGVCbG9jayogPSAwLCB1bnNpZ25lZCBsb29wT1NSRW50cnlCeXRlY29kZU9m
ZnNldCA9IDApOworICAgICAgICBKSVQoVk0mLCBDb2RlQmxvY2sqID0gMCwgdW5zaWduZWQgbG9v
cE9TUkVudHJ5Qnl0ZWNvZGVPZmZzZXQgPSAwKTsKICAgICAgICAgfkpJVCgpOwogCisgICAgICAg
IFZNJiB2bSgpIHsgcmV0dXJuICpKU0ludGVyZmFjZUpJVDo6dm0oKTsgfQorCiAgICAgICAgIHZv
aWQgY29tcGlsZVdpdGhvdXRMaW5raW5nKEpJVENvbXBpbGF0aW9uRWZmb3J0KTsKICAgICAgICAg
Q29tcGlsYXRpb25SZXN1bHQgbGluaygpOwogCiAgICAgICAgIHZvaWQgZG9NYWluVGhyZWFkUHJl
cGFyYXRpb25CZWZvcmVDb21waWxlKCk7CiAgICAgICAgIAotICAgICAgICBzdGF0aWMgQ29tcGls
YXRpb25SZXN1bHQgY29tcGlsZShWTSogdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRDb21w
aWxhdGlvbkVmZm9ydCBlZmZvcnQsIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gMCkKKyAgICAg
ICAgc3RhdGljIENvbXBpbGF0aW9uUmVzdWx0IGNvbXBpbGUoVk0mIHZtLCBDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0LCB1bnNpZ25lZCBieXRlY29kZU9m
ZnNldCA9IDApCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBKSVQodm0sIGNvZGVCbG9j
aywgYnl0ZWNvZGVPZmZzZXQpLnByaXZhdGVDb21waWxlKGVmZm9ydCk7CiAgICAgICAgIH0KICAg
ICAgICAgCi0gICAgICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVHZXRCeVZhbChjb25zdCBDb25jdXJy
ZW50SlNMb2NrZXImIGxvY2tlciwgVk0qIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnlWYWxJ
bmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlN
b2RlIGFycmF5TW9kZSkKKyAgICAgICAgc3RhdGljIHZvaWQgY29tcGlsZUdldEJ5VmFsKGNvbnN0
IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2Nr
LCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBK
SVRBcnJheU1vZGUgYXJyYXlNb2RlKQogICAgICAgICB7CiAgICAgICAgICAgICBKSVQgaml0KHZt
LCBjb2RlQmxvY2spOwogICAgICAgICAgICAgaml0Lm1fYnl0ZWNvZGVPZmZzZXQgPSBieVZhbElu
Zm8tPmJ5dGVjb2RlSW5kZXg7CiAgICAgICAgICAgICBqaXQucHJpdmF0ZUNvbXBpbGVHZXRCeVZh
bChsb2NrZXIsIGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywgYXJyYXlNb2RlKTsKICAgICAgICAg
fQogCi0gICAgICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVHZXRCeVZhbFdpdGhDYWNoZWRJZChWTSog
dm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRk
cmVzc1B0ciByZXR1cm5BZGRyZXNzLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpCisg
ICAgICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVHZXRCeVZhbFdpdGhDYWNoZWRJZChWTSYgdm0sIENv
ZGVCbG9jayogY29kZUJsb2NrLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0
ciByZXR1cm5BZGRyZXNzLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpCiAgICAgICAg
IHsKICAgICAgICAgICAgIEpJVCBqaXQodm0sIGNvZGVCbG9jayk7CiAgICAgICAgICAgICBqaXQu
bV9ieXRlY29kZU9mZnNldCA9IGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleDsKICAgICAgICAgICAg
IGppdC5wcml2YXRlQ29tcGlsZUdldEJ5VmFsV2l0aENhY2hlZElkKGJ5VmFsSW5mbywgcmV0dXJu
QWRkcmVzcywgcHJvcGVydHlOYW1lKTsKICAgICAgICAgfQogCi0gICAgICAgIHN0YXRpYyB2b2lk
IGNvbXBpbGVQdXRCeVZhbChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImIGxvY2tlciwgVk0qIHZt
LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJl
c3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlNb2RlIGFycmF5TW9kZSkKKyAgICAgICAgc3Rh
dGljIHZvaWQgY29tcGlsZVB1dEJ5VmFsKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2Vy
LCBWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0
dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBKSVRBcnJheU1vZGUgYXJyYXlNb2RlKQogICAg
ICAgICB7CiAgICAgICAgICAgICBKSVQgaml0KHZtLCBjb2RlQmxvY2spOwogICAgICAgICAgICAg
aml0Lm1fYnl0ZWNvZGVPZmZzZXQgPSBieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXg7CiAgICAgICAg
ICAgICBqaXQucHJpdmF0ZUNvbXBpbGVQdXRCeVZhbDxPcFB1dEJ5VmFsPihsb2NrZXIsIGJ5VmFs
SW5mbywgcmV0dXJuQWRkcmVzcywgYXJyYXlNb2RlKTsKICAgICAgICAgfQogICAgICAgICAKLSAg
ICAgICAgc3RhdGljIHZvaWQgY29tcGlsZURpcmVjdFB1dEJ5VmFsKGNvbnN0IENvbmN1cnJlbnRK
U0xvY2tlciYgbG9ja2VyLCBWTSogdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBCeVZhbEluZm8q
IGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBKSVRBcnJheU1vZGUg
YXJyYXlNb2RlKQorICAgICAgICBzdGF0aWMgdm9pZCBjb21waWxlRGlyZWN0UHV0QnlWYWwoY29u
c3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIsIFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3Ms
IEpJVEFycmF5TW9kZSBhcnJheU1vZGUpCiAgICAgICAgIHsKICAgICAgICAgICAgIEpJVCBqaXQo
dm0sIGNvZGVCbG9jayk7CiAgICAgICAgICAgICBqaXQubV9ieXRlY29kZU9mZnNldCA9IGJ5VmFs
SW5mby0+Ynl0ZWNvZGVJbmRleDsKQEAgLTIzNCwxNCArMjM2LDE0IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICB9CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIHN0
YXRpYyB2b2lkIGNvbXBpbGVQdXRCeVZhbFdpdGhDYWNoZWRJZChWTSogdm0sIENvZGVCbG9jayog
Y29kZUJsb2NrLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5B
ZGRyZXNzLCBQdXRLaW5kIHB1dEtpbmQsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkK
KyAgICAgICAgc3RhdGljIHZvaWQgY29tcGlsZVB1dEJ5VmFsV2l0aENhY2hlZElkKFZNJiB2bSwg
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNz
UHRyIHJldHVybkFkZHJlc3MsIFB1dEtpbmQgcHV0S2luZCwgY29uc3QgSWRlbnRpZmllciYgcHJv
cGVydHlOYW1lKQogICAgICAgICB7CiAgICAgICAgICAgICBKSVQgaml0KHZtLCBjb2RlQmxvY2sp
OwogICAgICAgICAgICAgaml0Lm1fYnl0ZWNvZGVPZmZzZXQgPSBieVZhbEluZm8tPmJ5dGVjb2Rl
SW5kZXg7CiAgICAgICAgICAgICBqaXQucHJpdmF0ZUNvbXBpbGVQdXRCeVZhbFdpdGhDYWNoZWRJ
ZDxPcD4oYnlWYWxJbmZvLCByZXR1cm5BZGRyZXNzLCBwdXRLaW5kLCBwcm9wZXJ0eU5hbWUpOwog
ICAgICAgICB9CiAKLSAgICAgICAgc3RhdGljIHZvaWQgY29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0
eShWTSogdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0
dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBKSVRBcnJheU1vZGUgYXJyYXlNb2RlKQorICAg
ICAgICBzdGF0aWMgdm9pZCBjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KFZNJiB2bSwgQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJl
dHVybkFkZHJlc3MsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUpCiAgICAgICAgIHsKICAgICAgICAg
ICAgIEpJVCBqaXQodm0sIGNvZGVCbG9jayk7CiAgICAgICAgICAgICBqaXQubV9ieXRlY29kZU9m
ZnNldCA9IGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleDsKQEAgLTI5NSwxMiArMjk3LDEyIEBAIG5h
bWVzcGFjZSBKU0MgewogCiAgICAgICAgIHZvaWQgZXhjZXB0aW9uQ2hlY2soKQogICAgICAgICB7
Ci0gICAgICAgICAgICBtX2V4Y2VwdGlvbkNoZWNrcy5hcHBlbmQoZW1pdEV4Y2VwdGlvbkNoZWNr
KCp2bSgpKSk7CisgICAgICAgICAgICBtX2V4Y2VwdGlvbkNoZWNrcy5hcHBlbmQoZW1pdEV4Y2Vw
dGlvbkNoZWNrKHZtKCkpKTsKICAgICAgICAgfQogCiAgICAgICAgIHZvaWQgZXhjZXB0aW9uQ2hl
Y2tXaXRoQ2FsbEZyYW1lUm9sbGJhY2soKQogICAgICAgICB7Ci0gICAgICAgICAgICBtX2V4Y2Vw
dGlvbkNoZWNrc1dpdGhDYWxsRnJhbWVSb2xsYmFjay5hcHBlbmQoZW1pdEV4Y2VwdGlvbkNoZWNr
KCp2bSgpKSk7CisgICAgICAgICAgICBtX2V4Y2VwdGlvbkNoZWNrc1dpdGhDYWxsRnJhbWVSb2xs
YmFjay5hcHBlbmQoZW1pdEV4Y2VwdGlvbkNoZWNrKHZtKCkpKTsKICAgICAgICAgfQogCiAgICAg
ICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVFeGNlcHRpb25IYW5kbGVycygpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjIsNyAr
MTYyLDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IAogICAgIGFk
ZFB0cihUcnVzdGVkSW1tMzIocmVnaXN0ZXJPZmZzZXQgKiBzaXplb2YoUmVnaXN0ZXIpICsgc2l6
ZW9mKENhbGxlckZyYW1lQW5kUEMpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJl
Z2lzdGVyKTsKIAogICAgIGxvYWQ2NChBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBzaXpl
b2YoUmVnaXN0ZXIpICogQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlIC0gc2l6ZW9mKENhbGxlckZyYW1l
QW5kUEMpKSwgcmVnVDApOwotICAgIGVtaXREdW1iVmlydHVhbENhbGwoKnZtKCksIGluZm8pOwor
ICAgIGVtaXREdW1iVmlydHVhbENhbGwodm0oKSwgaW5mbyk7CiAgICAgYWRkUHRyKFRydXN0ZWRJ
bW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVy
KSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tT
dGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRFeGNlcHRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVEV4Y2VwdGlvbnMuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVEV4Y2VwdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDMsMjIg
KzQzLDIyIEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi12b2lkIGdlbmVyaWNVbndpbmQoVk0qIHZt
LCBFeGVjU3RhdGUqIGNhbGxGcmFtZSkKK3ZvaWQgZ2VuZXJpY1Vud2luZChWTSYgdm0sIEV4ZWNT
dGF0ZSogY2FsbEZyYW1lKQogewotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BF
KCp2bSk7Ci0gICAgQ2FsbEZyYW1lKiB0b3BKU0NhbGxGcmFtZSA9IHZtLT50b3BKU0NhbGxGcmFt
ZSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKyAgICBDYWxs
RnJhbWUqIHRvcEpTQ2FsbEZyYW1lID0gdm0udG9wSlNDYWxsRnJhbWUoKTsKICAgICBpZiAoT3B0
aW9uczo6YnJlYWtPblRocm93KCkpIHsKICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSB0
b3BKU0NhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CiAgICAgICAgIGRhdGFMb2coIkluIGNhbGwgZnJh
bWUgIiwgUmF3UG9pbnRlcih0b3BKU0NhbGxGcmFtZSksICIgZm9yIGNvZGUgYmxvY2sgIiwgY29k
ZUJsb2NrLCAiXG4iKTsKICAgICAgICAgQ1JBU0goKTsKICAgICB9CiAgICAgCi0gICAgaWYgKGF1
dG8qIHNoYWRvd0NoaWNrZW4gPSB2bS0+c2hhZG93Q2hpY2tlbigpKQotICAgICAgICBzaGFkb3dD
aGlja2VuLT5sb2coKnZtLCB0b3BKU0NhbGxGcmFtZSwgU2hhZG93Q2hpY2tlbjo6UGFja2V0Ojp0
aHJvd1BhY2tldCgpKTsKKyAgICBpZiAoYXV0byogc2hhZG93Q2hpY2tlbiA9IHZtLnNoYWRvd0No
aWNrZW4oKSkKKyAgICAgICAgc2hhZG93Q2hpY2tlbi0+bG9nKHZtLCB0b3BKU0NhbGxGcmFtZSwg
U2hhZG93Q2hpY2tlbjo6UGFja2V0Ojp0aHJvd1BhY2tldCgpKTsKIAogICAgIEV4Y2VwdGlvbiog
ZXhjZXB0aW9uID0gc2NvcGUuZXhjZXB0aW9uKCk7CiAgICAgUkVMRUFTRV9BU1NFUlQoZXhjZXB0
aW9uKTsKLSAgICBIYW5kbGVySW5mbyogaGFuZGxlciA9IHZtLT5pbnRlcnByZXRlci0+dW53aW5k
KCp2bSwgY2FsbEZyYW1lLCBleGNlcHRpb24pOyAvLyBUaGlzIG1heSB1cGRhdGUgY2FsbEZyYW1l
LgorICAgIEhhbmRsZXJJbmZvKiBoYW5kbGVyID0gdm0uaW50ZXJwcmV0ZXItPnVud2luZCh2bSwg
Y2FsbEZyYW1lLCBleGNlcHRpb24pOyAvLyBUaGlzIG1heSB1cGRhdGUgY2FsbEZyYW1lLgogCiAg
ICAgdm9pZCogY2F0Y2hSb3V0aW5lOwogICAgIGNvbnN0IEluc3RydWN0aW9uKiBjYXRjaFBDRm9y
SW50ZXJwcmV0ZXIgPSBudWxscHRyOwpAQCAtODQsMTIgKzg0LDEyIEBAIHZvaWQgZ2VuZXJpY1Vu
d2luZChWTSogdm0sIEV4ZWNTdGF0ZSogY2EKICAgICB9IGVsc2UKICAgICAgICAgY2F0Y2hSb3V0
aW5lID0gTExJbnQ6OmdldENvZGVQdHI8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4oaGFuZGxlVW5j
YXVnaHRFeGNlcHRpb24pLmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAKLSAgICBBU1NFUlQoYml0d2lz
ZV9jYXN0PHVpbnRwdHJfdD4oY2FsbEZyYW1lKSA8IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHZt
LT50b3BFbnRyeUZyYW1lKSk7CisgICAgQVNTRVJUKGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGNh
bGxGcmFtZSkgPCBiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pih2bS50b3BFbnRyeUZyYW1lKSk7CiAK
ICAgICBhc3NlcnRJc1RhZ2dlZFdpdGgoY2F0Y2hSb3V0aW5lLCBFeGNlcHRpb25IYW5kbGVyUHRy
VGFnKTsKLSAgICB2bS0+Y2FsbEZyYW1lRm9yQ2F0Y2ggPSBjYWxsRnJhbWU7Ci0gICAgdm0tPnRh
cmdldE1hY2hpbmVQQ0ZvclRocm93ID0gY2F0Y2hSb3V0aW5lOwotICAgIHZtLT50YXJnZXRJbnRl
cnByZXRlclBDRm9yVGhyb3cgPSBjYXRjaFBDRm9ySW50ZXJwcmV0ZXI7CisgICAgdm0uY2FsbEZy
YW1lRm9yQ2F0Y2ggPSBjYWxsRnJhbWU7CisgICAgdm0udGFyZ2V0TWFjaGluZVBDRm9yVGhyb3cg
PSBjYXRjaFJvdXRpbmU7CisgICAgdm0udGFyZ2V0SW50ZXJwcmV0ZXJQQ0ZvclRocm93ID0gY2F0
Y2hQQ0ZvckludGVycHJldGVyOwogICAgIAogICAgIFJFTEVBU0VfQVNTRVJUKGNhdGNoUm91dGlu
ZSk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEV4Y2VwdGlvbnMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEV4Y2VwdGlvbnMuaAko
cmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRFeGNlcHRp
b25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDEyLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEyLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMCw2ICszMCw2IEBAIG5hbWVzcGFjZSBKU0Mgewog
Y2xhc3MgRXhlY1N0YXRlOwogY2xhc3MgVk07CiAKLXZvaWQgZ2VuZXJpY1Vud2luZChWTSosIEV4
ZWNTdGF0ZSopOwordm9pZCBnZW5lcmljVW53aW5kKFZNJiwgRXhlY1N0YXRlKik7CiAKIH0gLy8g
bmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVD
YWNoZUdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMTA1LDcgKzEwNSw3IEBAIEpJVEdldEJ5SWRHZW5lcmF0b3I6OkpJVEdldEJ5
SWRHZW5lcmF0b3IKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29kZU9yaWdpbiBjb2RlT3Jp
Z2luLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlLCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lz
dGVycywKICAgICBVbmlxdWVkU3RyaW5nSW1wbCogcHJvcGVydHlOYW1lLCBKU1ZhbHVlUmVncyBi
YXNlLCBKU1ZhbHVlUmVncyB2YWx1ZSwgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlKQogICAgIDogSklU
QnlJZEdlbmVyYXRvcihjb2RlQmxvY2ssIGNvZGVPcmlnaW4sIGNhbGxTaXRlLCBhY2Nlc3NUeXBl
LCB1c2VkUmVnaXN0ZXJzLCBiYXNlLCB2YWx1ZSkKLSAgICAsIG1faXNMZW5ndGhBY2Nlc3MocHJv
cGVydHlOYW1lID09IGNvZGVCbG9jay0+dm0oKS0+cHJvcGVydHlOYW1lcy0+bGVuZ3RoLmltcGwo
KSkKKyAgICAsIG1faXNMZW5ndGhBY2Nlc3MocHJvcGVydHlOYW1lID09IGNvZGVCbG9jay0+dm0o
KS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGguaW1wbCgpKQogewogICAgIFJFTEVBU0VfQVNTRVJUKGJh
c2UucGF5bG9hZEdQUigpICE9IHZhbHVlLnRhZ0dQUigpKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHJldmlzaW9uIDI0OTEyOCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzgwLDcgKzM4MCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2pmYWxzZShjb25z
dCBJbnN0cnVjdGkKICAgICBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMjsKICAgICBHUFJSZWcgc2Ny
YXRjaDIgPSByZWdUMzsKICAgICBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCA9IHRydWU7Ci0gICAgYWRkSnVtcChicmFuY2hJZkZhbHNleSgqdm0oKSwgdmFsdWUsIHNjcmF0
Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOworICAgIGFk
ZEp1bXAoYnJhbmNoSWZGYWxzZXkodm0oKSwgdmFsdWUsIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBS
ZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9q
dHJ1ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMzk0LDcgKzM5
NCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2p0cnVlKGNvbnN0IEluc3RydWN0aW8KICAgICBKU1Zh
bHVlUmVncyB2YWx1ZShyZWdUMSwgcmVnVDApOwogICAgIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1Qy
OwogICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QzOwotICAgIGFkZEp1bXAoYnJhbmNoSWZUcnV0
aHkoKnZtKCksIHZhbHVlLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNo
b3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgdGFyZ2V0KTsKKyAgICBhZGRKdW1wKGJyYW5jaElmVHJ1dGh5KHZtKCksIHZhbHVlLCBz
Y3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3BfamVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKQEAgLTgxNSwxMCArODE1LDEwIEBAIHZvaWQgSklUOjplbWl0X29wX3Rocm93
KGNvbnN0IEluc3RydWN0aW8KIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcFRocm93PigpOwogICAgIEFTU0VSVChyZWdUMCA9PSByZXR1cm5WYWx1ZUdQUik7
Ci0gICAgY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0oKS0+
dG9wRW50cnlGcmFtZSk7CisgICAgY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2
ZXNCdWZmZXIodm0oKS50b3BFbnRyeUZyYW1lKTsKICAgICBlbWl0TG9hZChieXRlY29kZS5tX3Zh
bHVlLm9mZnNldCgpLCByZWdUMSwgcmVnVDApOwogICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlv
bkNoZWNrKG9wZXJhdGlvblRocm93LCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKLSAgICBq
dW1wVG9FeGNlcHRpb25IYW5kbGVyKCp2bSgpKTsKKyAgICBqdW1wVG9FeGNlcHRpb25IYW5kbGVy
KHZtKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19udW1iZXIoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTg3Myw3ICs4NzMsNyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9jYXRjaChjb25zdCBJbnN0cnVjdGlvCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BDYXRjaD4oKTsKIAotICAgIHJlc3RvcmVDYWxsZWVTYXZlc0Zy
b21FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0oKS0+dG9wRW50cnlGcmFtZSk7CisgICAg
cmVzdG9yZUNhbGxlZVNhdmVzRnJvbUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgpLnRv
cEVudHJ5RnJhbWUpOwogCiAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fdm0pLCByZWdUMyk7CiAg
ICAgLy8gb3BlcmF0aW9uVGhyb3cgcmV0dXJucyB0aGUgY2FsbEZyYW1lIGZvciB0aGUgaGFuZGxl
ci4KQEAgLTg4NCw3ICs4ODQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChjb25zdCBJbnN0
cnVjdGlvCiAKICAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25DaGVj
a0lmRXhjZXB0aW9uSXNVbmNhdGNoYWJsZUFuZE5vdGlmeVByb2ZpbGVyKTsKICAgICBKdW1wIGlz
Q2F0Y2hhYmxlRXhjZXB0aW9uID0gYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BSKTsK
LSAgICBqdW1wVG9FeGNlcHRpb25IYW5kbGVyKCp2bSgpKTsKKyAgICBqdW1wVG9FeGNlcHRpb25I
YW5kbGVyKHZtKCkpOwogICAgIGlzQ2F0Y2hhYmxlRXhjZXB0aW9uLmxpbmsodGhpcyk7CiAKICAg
ICBtb3ZlKFRydXN0ZWRJbW1QdHIobV92bSksIHJlZ1QzKTsKQEAgLTEzNTgsMTQgKzEzNTgsMTQg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBlKGNvbnN0IElucwogCiB2b2lkIEpJVDo6
ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fcHJvbG9ndWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBSRUxFQVNFX0FTU0VSVCh2bSgpLT5zaGFkb3dDaGlj
a2VuKCkpOworICAgIFJFTEVBU0VfQVNTRVJUKHZtKCkuc2hhZG93Q2hpY2tlbigpKTsKICAgICB1
cGRhdGVUb3BDYWxsRnJhbWUoKTsKICAgICBzdGF0aWNfYXNzZXJ0KG5vbkFyZ0dQUjAgIT0gcmVn
VDAgJiYgbm9uQXJnR1BSMCAhPSByZWdUMiwgIndlIHdpbGwgaGF2ZSBwcm9ibGVtcyBpZiB0aGlz
IGlzIHRydWUuIik7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BMb2dTaGFkb3dDaGlja2VuUHJvbG9ndWU+KCk7CiAgICAgR1BSUmVnIHNoYWRvd1BhY2tldFJl
ZyA9IHJlZ1QwOwogICAgIEdQUlJlZyBzY3JhdGNoMVJlZyA9IG5vbkFyZ0dQUjA7IC8vIFRoaXMg
bXVzdCBiZSBhIG5vbi1hcmd1bWVudCByZWdpc3Rlci4KICAgICBHUFJSZWcgc2NyYXRjaDJSZWcg
PSByZWdUMjsKLSAgICBlbnN1cmVTaGFkb3dDaGlja2VuUGFja2V0KCp2bSgpLCBzaGFkb3dQYWNr
ZXRSZWcsIHNjcmF0Y2gxUmVnLCBzY3JhdGNoMlJlZyk7CisgICAgZW5zdXJlU2hhZG93Q2hpY2tl
blBhY2tldCh2bSgpLCBzaGFkb3dQYWNrZXRSZWcsIHNjcmF0Y2gxUmVnLCBzY3JhdGNoMlJlZyk7
CiAKICAgICBzY3JhdGNoMVJlZyA9IHJlZ1Q0OwogICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29k
ZS5tX3Njb3BlLm9mZnNldCgpLCByZWdUMyk7CkBAIC0xMzc0LDE0ICsxMzc0LDE0IEBAIHZvaWQg
SklUOjplbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl9wcm8KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
bG9nX3NoYWRvd19jaGlja2VuX3RhaWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKLSAgICBSRUxFQVNFX0FTU0VSVCh2bSgpLT5zaGFkb3dDaGlja2VuKCkpOworICAg
IFJFTEVBU0VfQVNTRVJUKHZtKCkuc2hhZG93Q2hpY2tlbigpKTsKICAgICB1cGRhdGVUb3BDYWxs
RnJhbWUoKTsKICAgICBzdGF0aWNfYXNzZXJ0KG5vbkFyZ0dQUjAgIT0gcmVnVDAgJiYgbm9uQXJn
R1BSMCAhPSByZWdUMiwgIndlIHdpbGwgaGF2ZSBwcm9ibGVtcyBpZiB0aGlzIGlzIHRydWUuIik7
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BMb2dTaGFkb3dD
aGlja2VuVGFpbD4oKTsKICAgICBHUFJSZWcgc2hhZG93UGFja2V0UmVnID0gcmVnVDA7CiAgICAg
R1BSUmVnIHNjcmF0Y2gxUmVnID0gbm9uQXJnR1BSMDsgLy8gVGhpcyBtdXN0IGJlIGEgbm9uLWFy
Z3VtZW50IHJlZ2lzdGVyLgogICAgIEdQUlJlZyBzY3JhdGNoMlJlZyA9IHJlZ1QyOwotICAgIGVu
c3VyZVNoYWRvd0NoaWNrZW5QYWNrZXQoKnZtKCksIHNoYWRvd1BhY2tldFJlZywgc2NyYXRjaDFS
ZWcsIHNjcmF0Y2gyUmVnKTsKKyAgICBlbnN1cmVTaGFkb3dDaGlja2VuUGFja2V0KHZtKCksIHNo
YWRvd1BhY2tldFJlZywgc2NyYXRjaDFSZWcsIHNjcmF0Y2gyUmVnKTsKICAgICBlbWl0TG9hZFBh
eWxvYWQoYnl0ZWNvZGUubV90aGlzVmFsdWUub2Zmc2V0KCksIHJlZ1QyKTsKICAgICBlbWl0TG9h
ZFRhZyhieXRlY29kZS5tX3RoaXNWYWx1ZS5vZmZzZXQoKSwgcmVnVDEpOwogICAgIEpTVmFsdWVS
ZWdzIHRoaXNSZWdzKHJlZ1QxLCByZWdUMik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE9wY29kZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3Bjb2Rlcy5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzMiw3ICsyMzIsNyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9pc191bmRlZmluZWQoY29uc3QgSW5zCiAgICAgSnVtcCBub3RN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOwogCiAgICAgaXNNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkLmxpbmsodGhpcyk7Ci0gICAgZW1pdExvYWRTdHJ1Y3R1cmUoKnZtKCksIHJlZ1QwLCBy
ZWdUMSwgcmVnVDIpOworICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMSwg
cmVnVDIpOwogICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCByZWdUMCk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6Omdsb2Jh
bE9iamVjdE9mZnNldCgpKSwgcmVnVDEpOwogICAgIGNvbXBhcmVQdHIoRXF1YWwsIHJlZ1QwLCBy
ZWdUMSwgcmVnVDApOwpAQCAtMzkxLDcgKzM5MSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2pmYWxz
ZShjb25zdCBJbnN0cnVjdGkKICAgICBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCA9IHRydWU7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fY29u
ZGl0aW9uLm9mZnNldCgpLCB2YWx1ZSk7Ci0gICAgYWRkSnVtcChicmFuY2hJZkZhbHNleSgqdm0o
KSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVn
VDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAgICBhZGRKdW1wKGJyYW5jaElmRmFsc2V5KHZtKCksIEpT
VmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBz
aG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHRhcmdldCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2plcV9udWxsKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC00MDUsNyArNDA1LDcgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfamVxX251bGwoY29uc3QgSW5zdHJ1YwogCiAgICAgLy8gRmlyc3QsIGhhbmRs
ZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUg
c3RydWN0dXJlLgogICAgIEp1bXAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNo
VGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkp
LCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOwotICAgIGVtaXRMb2FkU3Ry
dWN0dXJlKCp2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKKyAgICBlbWl0TG9hZFN0cnVjdHVy
ZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwogICAgIGFkZEp1bXAoYnJhbmNoUHRy
KEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwg
cmVnVDApLCB0YXJnZXQpOwogICAgIEp1bXAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVp
Z24gPSBqdW1wKCk7CkBAIC00MjksNyArNDI5LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9u
dWxsKGNvbnN0IEluc3RydQogCiAgICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBj
aGVjayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgogICAgIGFk
ZEp1bXAoYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0Zs
YWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpLCB0YXJn
ZXQpOwotICAgIGVtaXRMb2FkU3RydWN0dXJlKCp2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsK
KyAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKICAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwog
ICAgIGFkZEp1bXAoYnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6
Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDApLCB0YXJnZXQpOwogICAgIEp1bXAgd2FzTm90
SW1tZWRpYXRlID0ganVtcCgpOwpAQCAtNTEwLDcgKzUxMCw3IEBAIHZvaWQgSklUOjplbWl0X29w
X2p0cnVlKGNvbnN0IEluc3RydWN0aW8KICAgICBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMjsKICAg
ICBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7CiAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2NvbmRpdGlvbi5vZmZzZXQoKSwgdmFsdWUp
OwotICAgIGFkZEp1bXAoYnJhbmNoSWZUcnV0aHkoKnZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwg
c2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7Cisg
ICAgYWRkSnVtcChicmFuY2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0
Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOwogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKQEAgLTUzNywxMCArNTM3LDEwIEBAIHZvaWQgSklUOjplbWl0X29wX3Rocm93KGNvbnN0IElu
c3RydWN0aW8KIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cFRocm93PigpOwogICAgIEFTU0VSVChyZWdUMCA9PSByZXR1cm5WYWx1ZUdQUik7Ci0gICAgY29w
eUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0oKS0+dG9wRW50cnlG
cmFtZSk7CisgICAgY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIo
dm0oKS50b3BFbnRyeUZyYW1lKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fdmFsdWUub2Zmc2V0KCksIHJlZ1QwKTsKICAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25D
aGVjayhvcGVyYXRpb25UaHJvdywgcmVnVDApOwotICAgIGp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIo
KnZtKCkpOworICAgIGp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIodm0oKSk7CiB9CiAKIHRlbXBsYXRl
PHR5cGVuYW1lIE9wPgpAQCAtNjkxLDcgKzY5MSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2NhdGNo
KGNvbnN0IEluc3RydWN0aW8KIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcENhdGNoPigpOwogCi0gICAgcmVzdG9yZUNhbGxlZVNhdmVzRnJvbUVudHJ5RnJh
bWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgpLT50b3BFbnRyeUZyYW1lKTsKKyAgICByZXN0b3JlQ2Fs
bGVlU2F2ZXNGcm9tRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCkudG9wRW50cnlGcmFt
ZSk7CiAKICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV92bSksIHJlZ1QzKTsKICAgICBsb2FkNjQo
QWRkcmVzcyhyZWdUMywgVk06OmNhbGxGcmFtZUZvckNhdGNoT2Zmc2V0KCkpLCBjYWxsRnJhbWVS
ZWdpc3Rlcik7CkBAIC03MDEsNyArNzAxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goY29u
c3QgSW5zdHJ1Y3RpbwogCiAgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0
aW9uQ2hlY2tJZkV4Y2VwdGlvbklzVW5jYXRjaGFibGVBbmROb3RpZnlQcm9maWxlcik7CiAgICAg
SnVtcCBpc0NhdGNoYWJsZUV4Y2VwdGlvbiA9IGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1
ZUdQUik7Ci0gICAganVtcFRvRXhjZXB0aW9uSGFuZGxlcigqdm0oKSk7CisgICAganVtcFRvRXhj
ZXB0aW9uSGFuZGxlcih2bSgpKTsKICAgICBpc0NhdGNoYWJsZUV4Y2VwdGlvbi5saW5rKHRoaXMp
OwogCiAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fdm0pLCByZWdUMyk7CkBAIC04MjQsNyArODI0
LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZXFfbnVsbChjb25zdCBJbnN0cnVjdAogICAgIEp1bXAg
d2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKIAogICAgIGlzTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwotICAgIGVtaXRMb2FkU3RydWN0dXJlKCp2bSgpLCBy
ZWdUMCwgcmVnVDIsIHJlZ1QxKTsKKyAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwg
cmVnVDIsIHJlZ1QxKTsKICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgcmVnVDApOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJl
OjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QyKTsKICAgICBjb21wYXJlUHRyKEVxdWFsLCBy
ZWdUMCwgcmVnVDIsIHJlZ1QwKTsKQEAgLTg1Nyw3ICs4NTcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9uZXFfbnVsbChjb25zdCBJbnN0cnVjCiAgICAgSnVtcCB3YXNOb3RNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkID0ganVtcCgpOwogCiAgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhp
cyk7Ci0gICAgZW1pdExvYWRTdHJ1Y3R1cmUoKnZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwor
ICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwogICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CiAg
ICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgp
KSwgcmVnVDIpOwogICAgIGNvbXBhcmVQdHIoTm90RXF1YWwsIHJlZ1QwLCByZWdUMiwgcmVnVDAp
OwpAQCAtMTAzNCw3ICsxMDM0LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2xvb3BfaGludChj
b25zdCBJbgogICAgIGlmIChjYW5CZU9wdGltaXplZCgpKSB7CiAgICAgICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7CiAKLSAgICAgICAgY29weUNhbGxlZVNhdmVzRnJvbUZyYW1lT3JSZWdpc3Rl
clRvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCktPnRvcEVudHJ5RnJhbWUpOworICAg
ICAgICBjb3B5Q2FsbGVlU2F2ZXNGcm9tRnJhbWVPclJlZ2lzdGVyVG9FbnRyeUZyYW1lQ2FsbGVl
U2F2ZXNCdWZmZXIodm0oKS50b3BFbnRyeUZyYW1lKTsKIAogICAgICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbk9wdGltaXplLCBtX2J5dGVjb2RlT2Zmc2V0KTsKICAgICAgICAgSnVtcCBub09w
dGltaXplZEVudHJ5ID0gYnJhbmNoVGVzdFB0cihaZXJvLCByZXR1cm5WYWx1ZUdQUik7CkBAIC0x
NDgwLDI4ICsxNDgwLDI4IEBAIHZvaWQgSklUOjplbWl0X29wX3Byb2ZpbGVfdHlwZShjb25zdCBJ
bnMKIAogdm9pZCBKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3Byb2xvZ3VlKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQo
dm0oKS0+c2hhZG93Q2hpY2tlbigpKTsKKyAgICBSRUxFQVNFX0FTU0VSVCh2bSgpLnNoYWRvd0No
aWNrZW4oKSk7CiAgICAgdXBkYXRlVG9wQ2FsbEZyYW1lKCk7CiAgICAgc3RhdGljX2Fzc2VydChu
b25BcmdHUFIwICE9IHJlZ1QwICYmIG5vbkFyZ0dQUjAgIT0gcmVnVDIsICJ3ZSB3aWxsIGhhdmUg
cHJvYmxlbXMgaWYgdGhpcyBpcyB0cnVlLiIpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wTG9nU2hhZG93Q2hpY2tlblByb2xvZ3VlPigpOwogICAgIEdQUlJl
ZyBzaGFkb3dQYWNrZXRSZWcgPSByZWdUMDsKICAgICBHUFJSZWcgc2NyYXRjaDFSZWcgPSBub25B
cmdHUFIwOyAvLyBUaGlzIG11c3QgYmUgYSBub24tYXJndW1lbnQgcmVnaXN0ZXIuCiAgICAgR1BS
UmVnIHNjcmF0Y2gyUmVnID0gcmVnVDI7Ci0gICAgZW5zdXJlU2hhZG93Q2hpY2tlblBhY2tldCgq
dm0oKSwgc2hhZG93UGFja2V0UmVnLCBzY3JhdGNoMVJlZywgc2NyYXRjaDJSZWcpOworICAgIGVu
c3VyZVNoYWRvd0NoaWNrZW5QYWNrZXQodm0oKSwgc2hhZG93UGFja2V0UmVnLCBzY3JhdGNoMVJl
Zywgc2NyYXRjaDJSZWcpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9z
Y29wZS5vZmZzZXQoKSwgcmVnVDMpOwogICAgIGxvZ1NoYWRvd0NoaWNrZW5Qcm9sb2d1ZVBhY2tl
dChzaGFkb3dQYWNrZXRSZWcsIHNjcmF0Y2gxUmVnLCByZWdUMyk7CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWlsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQodm0oKS0+c2hhZG93Q2hpY2tlbigp
KTsKKyAgICBSRUxFQVNFX0FTU0VSVCh2bSgpLnNoYWRvd0NoaWNrZW4oKSk7CiAgICAgdXBkYXRl
VG9wQ2FsbEZyYW1lKCk7CiAgICAgc3RhdGljX2Fzc2VydChub25BcmdHUFIwICE9IHJlZ1QwICYm
IG5vbkFyZ0dQUjAgIT0gcmVnVDIsICJ3ZSB3aWxsIGhhdmUgcHJvYmxlbXMgaWYgdGhpcyBpcyB0
cnVlLiIpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTG9n
U2hhZG93Q2hpY2tlblRhaWw+KCk7CiAgICAgR1BSUmVnIHNoYWRvd1BhY2tldFJlZyA9IHJlZ1Qw
OwogICAgIEdQUlJlZyBzY3JhdGNoMVJlZyA9IG5vbkFyZ0dQUjA7IC8vIFRoaXMgbXVzdCBiZSBh
IG5vbi1hcmd1bWVudCByZWdpc3Rlci4KICAgICBHUFJSZWcgc2NyYXRjaDJSZWcgPSByZWdUMjsK
LSAgICBlbnN1cmVTaGFkb3dDaGlja2VuUGFja2V0KCp2bSgpLCBzaGFkb3dQYWNrZXRSZWcsIHNj
cmF0Y2gxUmVnLCBzY3JhdGNoMlJlZyk7CisgICAgZW5zdXJlU2hhZG93Q2hpY2tlblBhY2tldCh2
bSgpLCBzaGFkb3dQYWNrZXRSZWcsIHNjcmF0Y2gxUmVnLCBzY3JhdGNoMlJlZyk7CiAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3RoaXNWYWx1ZS5vZmZzZXQoKSwgcmVnVDIp
OwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZS5vZmZzZXQoKSwg
cmVnVDMpOwogICAgIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KHNoYWRvd1BhY2tldFJlZywg
SlNWYWx1ZVJlZ3MocmVnVDIpLCByZWdUMywgbV9jb2RlQmxvY2ssIENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZU9mZnNldCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVy
YXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9w
ZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE9wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Myw3ICs5Myw3IEBAIHZv
aWQgKiBfUmV0dXJuQWRkcmVzcyh2b2lkKTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKE9QQ09ERV9T
QU1QTElORykKLSNkZWZpbmUgQ1RJX1NBTVBMRVIgdm0tPmludGVycHJldGVyLT5zYW1wbGVyKCkK
KyNkZWZpbmUgQ1RJX1NBTVBMRVIgdm0uaW50ZXJwcmV0ZXItPnNhbXBsZXIoKQogI2Vsc2UKICNk
ZWZpbmUgQ1RJX1NBTVBMRVIgMAogI2VuZGlmCkBAIC0xMDIsMzMgKzEwMiwzNCBAQCB2b2lkICog
X1JldHVybkFkZHJlc3Modm9pZCk7CiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVGhyb3dT
dGFja092ZXJmbG93RXJyb3IoRXhlY1N0YXRlKiBleGVjLCBDb2RlQmxvY2sqIGNvZGVCbG9jaykK
IHsKICAgICAvLyBXZSBwYXNzIGluIG91ciBvd24gY29kZSBibG9jaywgYmVjYXVzZSB0aGUgY2Fs
bGZyYW1lIGhhc24ndCBiZWVuIHBvcHVsYXRlZC4KLSAgICBWTSogdm0gPSBjb2RlQmxvY2stPnZt
KCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKLSAgICBleGVj
LT5jb252ZXJ0VG9TdGFja092ZXJmbG93RnJhbWUoKnZtLCBjb2RlQmxvY2spOworICAgIFZNJiB2
bSA9IGNvZGVCbG9jay0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CisgICAgZXhlYy0+Y29udmVydFRvU3RhY2tPdmVyZmxvd0ZyYW1lKHZtLCBjb2RlQmxv
Y2spOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIHRo
cm93U3RhY2tPdmVyZmxvd0Vycm9yKGV4ZWMsIHNjb3BlKTsKIH0KIAotdm9pZCBKSVRfT1BFUkFU
SU9OIHRocm93U3RhY2tPdmVyZmxvd0Vycm9yRnJvbVRodW5rKFZNKiB2bSwgRXhlY1N0YXRlKiBl
eGVjKQordm9pZCBKSVRfT1BFUkFUSU9OIHRocm93U3RhY2tPdmVyZmxvd0Vycm9yRnJvbVRodW5r
KFZNKiB2bVBvaW50ZXIsIEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSgqdm0pOworICAgIFZNJiB2bSA9ICp2bVBvaW50ZXI7CisgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRy
YWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIHRocm93U3RhY2tPdmVyZmxvd0Vycm9yKGV4ZWMs
IHNjb3BlKTsKICAgICBnZW5lcmljVW53aW5kKHZtLCBleGVjKTsKLSAgICBBU1NFUlQodm0tPnRh
cmdldE1hY2hpbmVQQ0ZvclRocm93KTsKKyAgICBBU1NFUlQodm0udGFyZ2V0TWFjaGluZVBDRm9y
VGhyb3cpOwogfQogCiBpbnQzMl90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ2FsbEFyaXR5Q2hl
Y2soRXhlY1N0YXRlKiBleGVjKQogewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7CisgICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAgICBp
bnQzMl90IG1pc3NpbmdBcmdDb3VudCA9IENvbW1vblNsb3dQYXRoczo6YXJpdHlDaGVja0Zvcihl
eGVjLCAqdm0sIENvZGVGb3JDYWxsKTsKKyAgICBpbnQzMl90IG1pc3NpbmdBcmdDb3VudCA9IENv
bW1vblNsb3dQYXRoczo6YXJpdHlDaGVja0ZvcihleGVjLCB2bSwgQ29kZUZvckNhbGwpOwogICAg
IGlmIChVTkxJS0VMWShtaXNzaW5nQXJnQ291bnQgPCAwKSkgewogICAgICAgICBDb2RlQmxvY2sq
IGNvZGVCbG9jayA9IENvbW1vblNsb3dQYXRoczo6Y29kZUJsb2NrRnJvbUNhbGxGcmFtZUNhbGxl
ZShleGVjLCBDb2RlRm9yQ2FsbCk7Ci0gICAgICAgIGV4ZWMtPmNvbnZlcnRUb1N0YWNrT3ZlcmZs
b3dGcmFtZSgqdm0sIGNvZGVCbG9jayk7CisgICAgICAgIGV4ZWMtPmNvbnZlcnRUb1N0YWNrT3Zl
cmZsb3dGcmFtZSh2bSwgY29kZUJsb2NrKTsKICAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcih2bSwgZXhlYyk7Ci0gICAgICAgIHRocm93U3RhY2tPdmVyZmxvd0Vycm9yKHZtLT50
b3BDYWxsRnJhbWUsIHNjb3BlKTsKKyAgICAgICAgdGhyb3dTdGFja092ZXJmbG93RXJyb3Iodm0u
dG9wQ2FsbEZyYW1lLCBzY29wZSk7CiAgICAgfQogCiAgICAgcmV0dXJuIG1pc3NpbmdBcmdDb3Vu
dDsKQEAgLTEzNiwxNSArMTM3LDE1IEBAIGludDMyX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25D
YWxsQXJpdHkKIAogaW50MzJfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbnN0cnVjdEFyaXR5
Q2hlY2soRXhlY1N0YXRlKiBleGVjKQogewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7CisgICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAg
ICBpbnQzMl90IG1pc3NpbmdBcmdDb3VudCA9IENvbW1vblNsb3dQYXRoczo6YXJpdHlDaGVja0Zv
cihleGVjLCAqdm0sIENvZGVGb3JDb25zdHJ1Y3QpOworICAgIGludDMyX3QgbWlzc2luZ0FyZ0Nv
dW50ID0gQ29tbW9uU2xvd1BhdGhzOjphcml0eUNoZWNrRm9yKGV4ZWMsIHZtLCBDb2RlRm9yQ29u
c3RydWN0KTsKICAgICBpZiAoVU5MSUtFTFkobWlzc2luZ0FyZ0NvdW50IDwgMCkpIHsKICAgICAg
ICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBDb21tb25TbG93UGF0aHM6OmNvZGVCbG9ja0Zyb21D
YWxsRnJhbWVDYWxsZWUoZXhlYywgQ29kZUZvckNvbnN0cnVjdCk7Ci0gICAgICAgIGV4ZWMtPmNv
bnZlcnRUb1N0YWNrT3ZlcmZsb3dGcmFtZSgqdm0sIGNvZGVCbG9jayk7CisgICAgICAgIGV4ZWMt
PmNvbnZlcnRUb1N0YWNrT3ZlcmZsb3dGcmFtZSh2bSwgY29kZUJsb2NrKTsKICAgICAgICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0gICAgICAgIHRocm93U3RhY2tP
dmVyZmxvd0Vycm9yKHZtLT50b3BDYWxsRnJhbWUsIHNjb3BlKTsKKyAgICAgICAgdGhyb3dTdGFj
a092ZXJmbG93RXJyb3Iodm0udG9wQ2FsbEZyYW1lLCBzY29wZSk7CiAgICAgfQogCiAgICAgcmV0
dXJuIG1pc3NpbmdBcmdDb3VudDsKQEAgLTE1Miw3ICsxNTMsNyBAQCBpbnQzMl90IEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uQ29uc3RydWN0CiAKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uVHJ5R2V0QnlJZChFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZVN0dWJJbmZvKiBz
dHViSW5mbywgRW5jb2RlZEpTVmFsdWUgYmFzZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKIHsK
LSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIElkZW50aWZpZXIg
aWRlbnQgPSBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCB1aWQpOwogICAgIHN0dWJJbmZvLT50b29r
U2xvd1BhdGggPSB0cnVlOwpAQCAtMTY3LDcgKzE2OCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uVHIKIAogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVy
YXRpb25UcnlHZXRCeUlkR2VuZXJpYyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGJh
c2UsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCiB7Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7
CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKHZtLCBleGVjKTsKICAgICBJZGVudGlmaWVyIGlkZW50ID0gSWRlbnRpZmllcjo6ZnJvbVVp
ZCh2bSwgdWlkKTsKIApAQCAtMTgwLDkgKzE4MSw5IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uVHIKIAogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRp
b25UcnlHZXRCeUlkT3B0aW1pemUoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmVTdHViSW5mbyog
c3R1YkluZm8sIEVuY29kZWRKU1ZhbHVlIGJhc2UsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCiB7
Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLSAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSgqdm0pOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKICAgICBJZGVudGlmaWVyIGlkZW50ID0gSWRlbnRpZmllcjo6ZnJvbVVp
ZCh2bSwgdWlkKTsKIAogICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGJh
c2UpOwpAQCAtMTkxLDcgKzE5Miw3IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uVHIKICAgICBiYXNlVmFsdWUuZ2V0UHJvcGVydHlTbG90KGV4ZWMsIGlkZW50LCBzbG90
KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKIAot
ICAgIGlmIChzdHViSW5mby0+Y29uc2lkZXJDYWNoaW5nKCp2bSwgZXhlYy0+Y29kZUJsb2NrKCks
IGJhc2VWYWx1ZS5zdHJ1Y3R1cmVPck51bGwoKSkgJiYgIXNsb3QuaXNUYWludGVkQnlPcGFxdWVP
YmplY3QoKSAmJiAoc2xvdC5pc0NhY2hlYWJsZVZhbHVlKCkgfHwgc2xvdC5pc0NhY2hlYWJsZUdl
dHRlcigpIHx8IHNsb3QuaXNVbnNldCgpKSkKKyAgICBpZiAoc3R1YkluZm8tPmNvbnNpZGVyQ2Fj
aGluZyh2bSwgZXhlYy0+Y29kZUJsb2NrKCksIGJhc2VWYWx1ZS5zdHJ1Y3R1cmVPck51bGwoKSkg
JiYgIXNsb3QuaXNUYWludGVkQnlPcGFxdWVPYmplY3QoKSAmJiAoc2xvdC5pc0NhY2hlYWJsZVZh
bHVlKCkgfHwgc2xvdC5pc0NhY2hlYWJsZUdldHRlcigpIHx8IHNsb3QuaXNVbnNldCgpKSkKICAg
ICAgICAgcmVwYXRjaEdldEJ5SUQoZXhlYywgYmFzZVZhbHVlLCBpZGVudCwgc2xvdCwgKnN0dWJJ
bmZvLCBHZXRCeUlES2luZDo6VHJ5KTsKIAogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoc2xv
dC5nZXRQdXJlUmVzdWx0KCkpOwpAQCAtMjAwLDkgKzIwMSw5IEBAIEVuY29kZWRKU1ZhbHVlIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uVHIKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uR2V0QnlJZERpcmVjdChFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZVN0dWJJbmZvKiBz
dHViSW5mbywgRW5jb2RlZEpTVmFsdWUgYmFzZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKIHsK
ICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVj
KTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgSWRlbnRp
ZmllciBpZGVudCA9IElkZW50aWZpZXI6OmZyb21VaWQoJnZtLCB1aWQpOworICAgIElkZW50aWZp
ZXIgaWRlbnQgPSBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCB1aWQpOwogICAgIHN0dWJJbmZvLT50
b29rU2xvd1BhdGggPSB0cnVlOwogCiAgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpk
ZWNvZGUoYmFzZSk7CkBAIC0yMTcsOSArMjE4LDkgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJB
VElPTiBvcGVyYXRpb25HZQogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25H
ZXRCeUlkRGlyZWN0R2VuZXJpYyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGJhc2Us
IFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwotICAgIElkZW50aWZpZXIgaWRlbnQgPSBJZGVudGlmaWVyOjpmcm9t
VWlkKCZ2bSwgdWlkKTsKKyAgICBJZGVudGlmaWVyIGlkZW50ID0gSWRlbnRpZmllcjo6ZnJvbVVp
ZCh2bSwgdWlkKTsKIAogICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGJh
c2UpOwogICAgIFByb3BlcnR5U2xvdCBzbG90KGJhc2VWYWx1ZSwgUHJvcGVydHlTbG90OjpJbnRl
cm5hbE1ldGhvZFR5cGU6OkdldE93blByb3BlcnR5KTsKQEAgLTIzMyw5ICsyMzQsOSBAQCBFbmNv
ZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdlCiBFbmNvZGVkSlNWYWx1ZSBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZShFeGVjU3RhdGUqIGV4ZWMs
IFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgRW5jb2RlZEpTVmFsdWUgYmFzZSwgVW5pcXVl
ZFN0cmluZ0ltcGwqIHVpZCkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVU
cmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7Ci0gICAgSWRlbnRpZmllciBpZGVudCA9IElkZW50aWZpZXI6OmZyb21VaWQoJnZt
LCB1aWQpOworICAgIElkZW50aWZpZXIgaWRlbnQgPSBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCB1
aWQpOwogCiAgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoYmFzZSk7CiAg
ICAgUHJvcGVydHlTbG90IHNsb3QoYmFzZVZhbHVlLCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0
aG9kVHlwZTo6R2V0T3duUHJvcGVydHkpOwpAQCAtMjUzLDcgKzI1NCw3IEBAIEVuY29kZWRKU1Zh
bHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2UKIHsKICAgICBTdXBlclNhbXBsZXJTY29wZSBz
dXBlclNhbXBsZXJTY29wZShmYWxzZSk7CiAgICAgCi0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7
CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKHZtLCBleGVjKTsKICAgICAKICAgICBzdHViSW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsK
QEAgLTI2Myw3ICsyNjQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
bkdlCiAgICAgSWRlbnRpZmllciBpZGVudCA9IElkZW50aWZpZXI6OmZyb21VaWQodm0sIHVpZCk7
CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBiYXNlVmFsdWUuZ2V0KGV4ZWMsIGlkZW50LCBzbG90KTsK
IAotICAgIExPR19JQygoSUNFdmVudDo6T3BlcmF0aW9uR2V0QnlJZCwgYmFzZVZhbHVlLmNsYXNz
SW5mb09yTnVsbCgqdm0pLCBpZGVudCwgYmFzZVZhbHVlID09IHNsb3Quc2xvdEJhc2UoKSkpOwor
ICAgIExPR19JQygoSUNFdmVudDo6T3BlcmF0aW9uR2V0QnlJZCwgYmFzZVZhbHVlLmNsYXNzSW5m
b09yTnVsbCh2bSksIGlkZW50LCBiYXNlVmFsdWUgPT0gc2xvdC5zbG90QmFzZSgpKSk7CiAKICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CkBAIC0yNzIsNyArMjczLDcgQEAg
RW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZQogewogICAgIFN1cGVyU2Ft
cGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKICAgICAKLSAgICBWTSogdm0gPSAm
ZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIAogICAgIEpTVmFsdWUgYmFzZVZhbHVlID0g
SlNWYWx1ZTo6ZGVjb2RlKGJhc2UpOwpAQCAtMjgwLDcgKzI4MSw3IEBAIEVuY29kZWRKU1ZhbHVl
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2UKICAgICBJZGVudGlmaWVyIGlkZW50ID0gSWRlbnRp
Zmllcjo6ZnJvbVVpZCh2bSwgdWlkKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGJhc2VWYWx1ZS5n
ZXQoZXhlYywgaWRlbnQsIHNsb3QpOwogICAgIAotICAgIExPR19JQygoSUNFdmVudDo6T3BlcmF0
aW9uR2V0QnlJZEdlbmVyaWMsIGJhc2VWYWx1ZS5jbGFzc0luZm9Pck51bGwoKnZtKSwgaWRlbnQs
IGJhc2VWYWx1ZSA9PSBzbG90LnNsb3RCYXNlKCkpKTsKKyAgICBMT0dfSUMoKElDRXZlbnQ6Ok9w
ZXJhdGlvbkdldEJ5SWRHZW5lcmljLCBiYXNlVmFsdWUuY2xhc3NJbmZvT3JOdWxsKHZtKSwgaWRl
bnQsIGJhc2VWYWx1ZSA9PSBzbG90LnNsb3RCYXNlKCkpKTsKICAgICAKICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CkBAIC0yODksNyArMjkwLDcgQEAgRW5jb2RlZEpTVmFs
dWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZQogewogICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1
cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKICAgICAKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsK
KyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIodm0sIGV4ZWMpOwogICAgIElkZW50aWZpZXIgaWRlbnQgPSBJZGVudGlmaWVyOjpmcm9tVWlk
KHZtLCB1aWQpOwogCkBAIC0yOTcsOSArMjk4LDkgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJB
VElPTiBvcGVyYXRpb25HZQogCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShiYXNlVmFsdWUu
Z2V0UHJvcGVydHlTbG90KGV4ZWMsIGlkZW50LCBbJl0gKGJvb2wgZm91bmQsIFByb3BlcnR5U2xv
dCYgc2xvdCkgLT4gSlNWYWx1ZSB7CiAgICAgICAgIAotICAgICAgICBMT0dfSUMoKElDRXZlbnQ6
Ok9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgYmFzZVZhbHVlLmNsYXNzSW5mb09yTnVsbCgqdm0p
LCBpZGVudCwgYmFzZVZhbHVlID09IHNsb3Quc2xvdEJhc2UoKSkpOworICAgICAgICBMT0dfSUMo
KElDRXZlbnQ6Ok9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgYmFzZVZhbHVlLmNsYXNzSW5mb09y
TnVsbCh2bSksIGlkZW50LCBiYXNlVmFsdWUgPT0gc2xvdC5zbG90QmFzZSgpKSk7CiAgICAgICAg
IAotICAgICAgICBpZiAoc3R1YkluZm8tPmNvbnNpZGVyQ2FjaGluZygqdm0sIGV4ZWMtPmNvZGVC
bG9jaygpLCBiYXNlVmFsdWUuc3RydWN0dXJlT3JOdWxsKCkpKQorICAgICAgICBpZiAoc3R1Yklu
Zm8tPmNvbnNpZGVyQ2FjaGluZyh2bSwgZXhlYy0+Y29kZUJsb2NrKCksIGJhc2VWYWx1ZS5zdHJ1
Y3R1cmVPck51bGwoKSkpCiAgICAgICAgICAgICByZXBhdGNoR2V0QnlJRChleGVjLCBiYXNlVmFs
dWUsIGlkZW50LCBzbG90LCAqc3R1YkluZm8sIEdldEJ5SURLaW5kOjpOb3JtYWwpOwogICAgICAg
ICByZXR1cm4gZm91bmQgPyBzbG90LmdldFZhbHVlKGV4ZWMsIGlkZW50KSA6IGpzVW5kZWZpbmVk
KCk7CiAgICAgfSkpOwpAQCAtMzA5LDcgKzMxMCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uR2UKIHsKICAgICBTdXBlclNhbXBsZXJTY29wZSBzdXBlclNhbXBsZXJT
Y29wZShmYWxzZSk7CiAKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwog
ICAgIElkZW50aWZpZXIgaWRlbnQgPSBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCB1aWQpOwogCkBA
IC0zMjYsNyArMzI3LDcgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25H
ZQogewogICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKIAot
ICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgSWRlbnRpZmllciBp
ZGVudCA9IElkZW50aWZpZXI6OmZyb21VaWQodm0sIHVpZCk7CiAKQEAgLTM0MSw3ICszNDIsNyBA
QCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdlCiB7CiAgICAgU3VwZXJT
YW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwogICAgIAotICAgIFZNKiB2bSA9
ICZleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgSWRlbnRpZmllciBpZGVudCA9IElkZW50
aWZpZXI6OmZyb21VaWQodm0sIHVpZCk7CiAKQEAgLTM1MCw5ICszNTEsOSBAQCBFbmNvZGVkSlNW
YWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdlCiAKICAgICBQcm9wZXJ0eVNsb3Qgc2xvdCh0
aGlzVmFsdWUsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpHZXQpOwogICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoYmFzZVZhbHVlLmdldFByb3BlcnR5U2xvdChleGVjLCBpZGVu
dCwgc2xvdCwgWyZdIChib29sIGZvdW5kLCBQcm9wZXJ0eVNsb3QmIHNsb3QpIC0+IEpTVmFsdWUg
ewotICAgICAgICBMT0dfSUMoKElDRXZlbnQ6Ok9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09wdGlt
aXplLCBiYXNlVmFsdWUuY2xhc3NJbmZvT3JOdWxsKCp2bSksIGlkZW50LCBiYXNlVmFsdWUgPT0g
c2xvdC5zbG90QmFzZSgpKSk7CisgICAgICAgIExPR19JQygoSUNFdmVudDo6T3BlcmF0aW9uR2V0
QnlJZFdpdGhUaGlzT3B0aW1pemUsIGJhc2VWYWx1ZS5jbGFzc0luZm9Pck51bGwodm0pLCBpZGVu
dCwgYmFzZVZhbHVlID09IHNsb3Quc2xvdEJhc2UoKSkpOwogICAgICAgICAKLSAgICAgICAgaWYg
KHN0dWJJbmZvLT5jb25zaWRlckNhY2hpbmcoKnZtLCBleGVjLT5jb2RlQmxvY2soKSwgYmFzZVZh
bHVlLnN0cnVjdHVyZU9yTnVsbCgpKSkKKyAgICAgICAgaWYgKHN0dWJJbmZvLT5jb25zaWRlckNh
Y2hpbmcodm0sIGV4ZWMtPmNvZGVCbG9jaygpLCBiYXNlVmFsdWUuc3RydWN0dXJlT3JOdWxsKCkp
KQogICAgICAgICAgICAgcmVwYXRjaEdldEJ5SUQoZXhlYywgYmFzZVZhbHVlLCBpZGVudCwgc2xv
dCwgKnN0dWJJbmZvLCBHZXRCeUlES2luZDo6V2l0aFRoaXMpOwogICAgICAgICByZXR1cm4gZm91
bmQgPyBzbG90LmdldFZhbHVlKGV4ZWMsIGlkZW50KSA6IGpzVW5kZWZpbmVkKCk7CiAgICAgfSkp
OwpAQCAtMzYzLDEyICszNjQsMTIgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVy
YXRpb25JbgogICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsK
IAogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4
ZWMpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIHN0
dWJJbmZvLT50b29rU2xvd1BhdGggPSB0cnVlOwogCi0gICAgSWRlbnRpZmllciBpZGVudCA9IElk
ZW50aWZpZXI6OmZyb21VaWQoJnZtLCB1aWQpOworICAgIElkZW50aWZpZXIgaWRlbnQgPSBJZGVu
dGlmaWVyOjpmcm9tVWlkKHZtLCB1aWQpOwogCiAgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1Zh
bHVlOjpkZWNvZGUoYmFzZSk7CiAgICAgaWYgKCFiYXNlVmFsdWUuaXNPYmplY3QoKSkgewpAQCAt
Mzg5LDEwICszOTAsMTAgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25J
bgogICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKIAogICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigm
dm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwog
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIElkZW50aWZp
ZXIgaWRlbnQgPSBJZGVudGlmaWVyOjpmcm9tVWlkKCZ2bSwgdWlkKTsKKyAgICBJZGVudGlmaWVy
IGlkZW50ID0gSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgdWlkKTsKIAogICAgIEpTVmFsdWUgYmFz
ZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGJhc2UpOwogICAgIGlmICghYmFzZVZhbHVlLmlzT2Jq
ZWN0KCkpIHsKQEAgLTQxMywxMCArNDE0LDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uSW4KICAgICBTdXBlclNhbXBsZXJTY29wZSBzdXBlclNhbXBsZXJTY29wZShm
YWxzZSk7CiAKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRy
YWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KHZtLCBleGVjKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAK
LSAgICBJZGVudGlmaWVyIGlkZW50ID0gSWRlbnRpZmllcjo6ZnJvbVVpZCgmdm0sIHVpZCk7Cisg
ICAgSWRlbnRpZmllciBpZGVudCA9IElkZW50aWZpZXI6OmZyb21VaWQodm0sIHVpZCk7CiAKICAg
ICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShiYXNlKTsKICAgICBpZiAoIWJh
c2VWYWx1ZS5pc09iamVjdCgpKSB7CkBAIC00MzksNyArNDQwLDcgQEAgRW5jb2RlZEpTVmFsdWUg
SklUX09QRVJBVElPTiBvcGVyYXRpb25JbgogewogICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVy
U2FtcGxlclNjb3BlKGZhbHNlKTsKICAgICAKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
dm0sIGV4ZWMpOwogCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oQ29tbW9u
U2xvd1BhdGhzOjpvcEluQnlWYWwoZXhlYywgYmFzZSwgSlNWYWx1ZTo6ZGVjb2RlKGtleSkpKSk7
CkBAIC00NDksNyArNDUwLDcgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWRT
dHJpYwogewogICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsK
ICAgICAKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgp
OwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIAogICAg
IHN0dWJJbmZvLT50b29rU2xvd1BhdGggPSB0cnVlOwpAQCAtNDU5LDE0ICs0NjAsMTQgQEAgdm9p
ZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWRTdHJpYwogICAgIFB1dFByb3BlcnR5U2xv
dCBzbG90KGJhc2VWYWx1ZSwgdHJ1ZSwgZXhlYy0+Y29kZUJsb2NrKCktPnB1dEJ5SWRDb250ZXh0
KCkpOwogICAgIGJhc2VWYWx1ZS5wdXRJbmxpbmUoZXhlYywgaWRlbnQsIEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkVmFsdWUpLCBzbG90KTsKICAgICAKLSAgICBMT0dfSUMoKElDRXZlbnQ6Ok9wZXJh
dGlvblB1dEJ5SWRTdHJpY3QsIGJhc2VWYWx1ZS5jbGFzc0luZm9Pck51bGwoKnZtKSwgaWRlbnQs
IHNsb3QuYmFzZSgpID09IGJhc2VWYWx1ZSkpOworICAgIExPR19JQygoSUNFdmVudDo6T3BlcmF0
aW9uUHV0QnlJZFN0cmljdCwgYmFzZVZhbHVlLmNsYXNzSW5mb09yTnVsbCh2bSksIGlkZW50LCBz
bG90LmJhc2UoKSA9PSBiYXNlVmFsdWUpKTsKIH0KIAogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvblB1dEJ5SWROb25TdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmVTdHViSW5mbyog
c3R1YkluZm8sIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZEJhc2UsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCiB7CiAgICAgU3VwZXJTYW1wbGVyU2Nv
cGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwogICAgIAotICAgIFZNKiB2bSA9ICZleGVjLT52
bSgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcih2bSwgZXhlYyk7CiAgICAgCiAgICAgc3R1YkluZm8tPnRvb2tTbG93UGF0aCA9IHRy
dWU7CkBAIC00NzYsNyArNDc3LDcgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5
SWROb25TdAogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KGJhc2VWYWx1ZSwgZmFsc2UsIGV4ZWMt
PmNvZGVCbG9jaygpLT5wdXRCeUlkQ29udGV4dCgpKTsKICAgICBiYXNlVmFsdWUucHV0SW5saW5l
KGV4ZWMsIGlkZW50LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwgc2xvdCk7CiAKLSAg
ICBMT0dfSUMoKElDRXZlbnQ6Ok9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3QsIGJhc2VWYWx1ZS5j
bGFzc0luZm9Pck51bGwoKnZtKSwgaWRlbnQsIHNsb3QuYmFzZSgpID09IGJhc2VWYWx1ZSkpOwor
ICAgIExPR19JQygoSUNFdmVudDo6T3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdCwgYmFzZVZhbHVl
LmNsYXNzSW5mb09yTnVsbCh2bSksIGlkZW50LCBzbG90LmJhc2UoKSA9PSBiYXNlVmFsdWUpKTsK
IH0KIAogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3QoRXhl
Y1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIFVuaXF1ZWRTdHJpbmdJ
bXBsKiB1aWQpCkBAIC00ODQsMTIgKzQ4NSwxMiBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uUHV0QnlJZERpcmVjCiAgICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUo
ZmFsc2UpOwogICAgIAogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIodm0sIGV4ZWMpOwogICAgIAogICAgIHN0dWJJbmZvLT50b29rU2xvd1BhdGggPSB0cnVl
OwogICAgIAogICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRC
YXNlKTsKLSAgICBJZGVudGlmaWVyIGlkZW50ID0gSWRlbnRpZmllcjo6ZnJvbVVpZCgmdm0sIHVp
ZCk7CisgICAgSWRlbnRpZmllciBpZGVudCA9IElkZW50aWZpZXI6OmZyb21VaWQodm0sIHVpZCk7
CiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3QoYmFzZVZhbHVlLCB0cnVlLCBleGVjLT5jb2RlQmxv
Y2soKS0+cHV0QnlJZENvbnRleHQoKSk7CiAgICAgQ29tbW9uU2xvd1BhdGhzOjpwdXREaXJlY3RX
aXRoUmVpZnkodm0sIGV4ZWMsIGFzT2JqZWN0KGJhc2VWYWx1ZSksIGlkZW50LCBKU1ZhbHVlOjpk
ZWNvZGUoZW5jb2RlZFZhbHVlKSwgc2xvdCk7CiAKQEAgLTUwMSwxMiArNTAyLDEyIEBAIHZvaWQg
SklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkRGlyZWMKICAgICBTdXBlclNhbXBsZXJTY29w
ZSBzdXBlclNhbXBsZXJTY29wZShmYWxzZSk7CiAgICAgCiAgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgCiAgICAgc3R1YkluZm8t
PnRvb2tTbG93UGF0aCA9IHRydWU7CiAgICAgCiAgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1Zh
bHVlOjpkZWNvZGUoZW5jb2RlZEJhc2UpOwotICAgIElkZW50aWZpZXIgaWRlbnQgPSBJZGVudGlm
aWVyOjpmcm9tVWlkKCZ2bSwgdWlkKTsKKyAgICBJZGVudGlmaWVyIGlkZW50ID0gSWRlbnRpZmll
cjo6ZnJvbVVpZCh2bSwgdWlkKTsKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFsdWUs
IGZhbHNlLCBleGVjLT5jb2RlQmxvY2soKS0+cHV0QnlJZENvbnRleHQoKSk7CiAgICAgQ29tbW9u
U2xvd1BhdGhzOjpwdXREaXJlY3RXaXRoUmVpZnkodm0sIGV4ZWMsIGFzT2JqZWN0KGJhc2VWYWx1
ZSksIGlkZW50LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwgc2xvdCk7CiAKQEAgLTUx
Nyw5ICs1MTgsOSBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZFN0cmljCiB7
CiAgICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwogICAgIAot
ICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0gICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CiAKICAgICBJZGVudGlmaWVyIGlkZW50ID0gSWRlbnRpZmllcjo6ZnJvbVVp
ZCh2bSwgdWlkKTsKICAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUgPSBzdGF0aWNfY2FzdDxBY2Nl
c3NUeXBlPihzdHViSW5mby0+YWNjZXNzVHlwZSk7CkBAIC01MjksMTcgKzUzMCwxNyBAQCB2b2lk
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZFN0cmljCiAgICAgQ29kZUJsb2NrKiBjb2Rl
QmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChiYXNl
VmFsdWUsIHRydWUsIGNvZGVCbG9jay0+cHV0QnlJZENvbnRleHQoKSk7CiAKLSAgICBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSA9IGJhc2VWYWx1ZS5pc0NlbGwoKSA/IGJhc2VWYWx1ZS5hc0NlbGwoKS0+
c3RydWN0dXJlKCp2bSkgOiBudWxscHRyOworICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFz
ZVZhbHVlLmlzQ2VsbCgpID8gYmFzZVZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUodm0pIDogbnVs
bHB0cjsKICAgICBiYXNlVmFsdWUucHV0SW5saW5lKGV4ZWMsIGlkZW50LCB2YWx1ZSwgc2xvdCk7
CiAKLSAgICBMT0dfSUMoKElDRXZlbnQ6Ok9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZSwg
YmFzZVZhbHVlLmNsYXNzSW5mb09yTnVsbCgqdm0pLCBpZGVudCwgc2xvdC5iYXNlKCkgPT0gYmFz
ZVZhbHVlKSk7CisgICAgTE9HX0lDKChJQ0V2ZW50OjpPcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0
aW1pemUsIGJhc2VWYWx1ZS5jbGFzc0luZm9Pck51bGwodm0pLCBpZGVudCwgc2xvdC5iYXNlKCkg
PT0gYmFzZVZhbHVlKSk7CiAKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkp
OwogCiAgICAgaWYgKGFjY2Vzc1R5cGUgIT0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1Yklu
Zm8tPmFjY2Vzc1R5cGUpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgaWYgKHN0dWJJbmZv
LT5jb25zaWRlckNhY2hpbmcoKnZtLCBjb2RlQmxvY2ssIHN0cnVjdHVyZSkpCisgICAgaWYgKHN0
dWJJbmZvLT5jb25zaWRlckNhY2hpbmcodm0sIGNvZGVCbG9jaywgc3RydWN0dXJlKSkKICAgICAg
ICAgcmVwYXRjaFB1dEJ5SUQoZXhlYywgYmFzZVZhbHVlLCBzdHJ1Y3R1cmUsIGlkZW50LCBzbG90
LCAqc3R1YkluZm8sIE5vdERpcmVjdCk7CiB9CiAKQEAgLTU0Nyw5ICs1NDgsOSBAQCB2b2lkIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZE5vblN0CiB7CiAgICAgU3VwZXJTYW1wbGVyU2Nv
cGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwogICAgIAotICAgIFZNKiB2bSA9ICZleGVjLT52
bSgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcih2bSwgZXhlYyk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
KnZtKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBJ
ZGVudGlmaWVyIGlkZW50ID0gSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgdWlkKTsKICAgICBBY2Nl
c3NUeXBlIGFjY2Vzc1R5cGUgPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby0+YWNj
ZXNzVHlwZSk7CkBAIC01NTksMTcgKzU2MCwxNyBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uUHV0QnlJZE5vblN0CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxv
Y2soKTsKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFsdWUsIGZhbHNlLCBjb2RlQmxv
Y2stPnB1dEJ5SWRDb250ZXh0KCkpOwogCi0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNl
VmFsdWUuaXNDZWxsKCkgPyBiYXNlVmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSgqdm0pIDogbnVs
bHB0cjsgICAgCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlVmFsdWUuaXNDZWxsKCkg
PyBiYXNlVmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSh2bSkgOiBudWxscHRyOwogICAgIGJhc2VW
YWx1ZS5wdXRJbmxpbmUoZXhlYywgaWRlbnQsIHZhbHVlLCBzbG90KTsKIAotICAgIExPR19JQygo
SUNFdmVudDo6T3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplLCBiYXNlVmFsdWUuY2xh
c3NJbmZvT3JOdWxsKCp2bSksIGlkZW50LCBzbG90LmJhc2UoKSA9PSBiYXNlVmFsdWUpKTsKKyAg
ICBMT0dfSUMoKElDRXZlbnQ6Ok9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZSwgYmFz
ZVZhbHVlLmNsYXNzSW5mb09yTnVsbCh2bSksIGlkZW50LCBzbG90LmJhc2UoKSA9PSBiYXNlVmFs
dWUpKTsKIAogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAKICAgICBp
ZiAoYWNjZXNzVHlwZSAhPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby0+YWNjZXNz
VHlwZSkpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBpZiAoc3R1YkluZm8tPmNvbnNpZGVy
Q2FjaGluZygqdm0sIGNvZGVCbG9jaywgc3RydWN0dXJlKSkKKyAgICBpZiAoc3R1YkluZm8tPmNv
bnNpZGVyQ2FjaGluZyh2bSwgY29kZUJsb2NrLCBzdHJ1Y3R1cmUpKQogICAgICAgICByZXBhdGNo
UHV0QnlJRChleGVjLCBiYXNlVmFsdWUsIHN0cnVjdHVyZSwgaWRlbnQsIHNsb3QsICpzdHViSW5m
bywgTm90RGlyZWN0KTsKIH0KIApAQCAtNTc4LDEwICs1NzksMTAgQEAgdm9pZCBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvblB1dEJ5SWREaXJlYwogICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2Ft
cGxlclNjb3BlKGZhbHNlKTsKICAgICAKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CiAgICAgCi0gICAgSWRlbnRpZmllciBpZGVudCA9IElkZW50aWZpZXI6OmZy
b21VaWQoJnZtLCB1aWQpOworICAgIElkZW50aWZpZXIgaWRlbnQgPSBJZGVudGlmaWVyOjpmcm9t
VWlkKHZtLCB1aWQpOwogICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSA9IHN0YXRpY19jYXN0PEFj
Y2Vzc1R5cGU+KHN0dWJJbmZvLT5hY2Nlc3NUeXBlKTsKIAogICAgIEpTVmFsdWUgdmFsdWUgPSBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKQEAgLTYwNywxMCArNjA4LDEwIEBAIHZvaWQg
SklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkRGlyZWMKICAgICBTdXBlclNhbXBsZXJTY29w
ZSBzdXBlclNhbXBsZXJTY29wZShmYWxzZSk7CiAgICAgCiAgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIAotICAgIElkZW50aWZpZXIgaWRlbnQgPSBJZGVu
dGlmaWVyOjpmcm9tVWlkKCZ2bSwgdWlkKTsKKyAgICBJZGVudGlmaWVyIGlkZW50ID0gSWRlbnRp
Zmllcjo6ZnJvbVVpZCh2bSwgdWlkKTsKICAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUgPSBzdGF0
aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby0+YWNjZXNzVHlwZSk7CiAKICAgICBKU1ZhbHVl
IHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CkBAIC03NjksNyArNzcwLDcg
QEAgc3RhdGljIE9wdGltaXphdGlvblJlc3VsdCB0cnlQdXRCeVZhbE9wdAogICAgICAgICAgICAg
ICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7CiAgICAgICAgICAg
ICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jayk7CiAgICAg
ICAgICAgICAgICAgYnlWYWxJbmZvLT5hcnJheVByb2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJlZGlj
dGlvbihsb2NrZXIsIGNvZGVCbG9jaywgc3RydWN0dXJlKTsKLSAgICAgICAgICAgICAgICBKSVQ6
OmNvbXBpbGVQdXRCeVZhbChsb2NrZXIsICZ2bSwgY29kZUJsb2NrLCBieVZhbEluZm8sIHJldHVy
bkFkZHJlc3MsIGFycmF5TW9kZSk7CisgICAgICAgICAgICAgICAgSklUOjpjb21waWxlUHV0QnlW
YWwobG9ja2VyLCB2bSwgY29kZUJsb2NrLCBieVZhbEluZm8sIHJldHVybkFkZHJlc3MsIGFycmF5
TW9kZSk7CiAgICAgICAgICAgICAgICAgb3B0aW1pemF0aW9uUmVzdWx0ID0gT3B0aW1pemF0aW9u
UmVzdWx0OjpPcHRpbWl6ZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTc4Nyw3ICs3
ODgsNyBAQCBzdGF0aWMgT3B0aW1pemF0aW9uUmVzdWx0IHRyeVB1dEJ5VmFsT3B0CiAgICAgICAg
ICAgICBBU1NFUlQoIWJ5VmFsSW5mby0+c3R1YlJvdXRpbmUpOwogICAgICAgICAgICAgaWYgKGJ5
VmFsSW5mby0+c2VlbikgewogICAgICAgICAgICAgICAgIGlmIChieVZhbEluZm8tPmNhY2hlZElk
ID09IHByb3BlcnR5TmFtZSkgewotICAgICAgICAgICAgICAgICAgICBKSVQ6OmNvbXBpbGVQdXRC
eVZhbFdpdGhDYWNoZWRJZDxPcFB1dEJ5VmFsPigmdm0sIGV4ZWMtPmNvZGVCbG9jaygpLCBieVZh
bEluZm8sIHJldHVybkFkZHJlc3MsIE5vdERpcmVjdCwgcHJvcGVydHlOYW1lKTsKKyAgICAgICAg
ICAgICAgICAgICAgSklUOjpjb21waWxlUHV0QnlWYWxXaXRoQ2FjaGVkSWQ8T3BQdXRCeVZhbD4o
dm0sIGV4ZWMtPmNvZGVCbG9jaygpLCBieVZhbEluZm8sIHJldHVybkFkZHJlc3MsIE5vdERpcmVj
dCwgcHJvcGVydHlOYW1lKTsKICAgICAgICAgICAgICAgICAgICAgb3B0aW1pemF0aW9uUmVzdWx0
ID0gT3B0aW1pemF0aW9uUmVzdWx0OjpPcHRpbWl6ZWQ7CiAgICAgICAgICAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgICAgICAgICAgLy8gU2VlbSBsaWtlIGEgZ2VuZXJpYyBwcm9wZXJ0eSBh
Y2Nlc3Mgc2l0ZS4KQEAgLTgyMSw3ICs4MjIsNyBAQCBzdGF0aWMgT3B0aW1pemF0aW9uUmVzdWx0
IHRyeVB1dEJ5VmFsT3B0CiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxPcHRp
bWl6ZShFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlVmFsdWUsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3JpcHQsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1
ZSwgQnlWYWxJbmZvKiBieVZhbEluZm8pCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwogCiAgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNv
ZGUoZW5jb2RlZEJhc2VWYWx1ZSk7CkBAIC04NTgsNyArODU5LDcgQEAgc3RhdGljIE9wdGltaXph
dGlvblJlc3VsdCB0cnlEaXJlY3RQdXRCeQogICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xv
Y2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2spOwogICAgICAgICAgICAgICAgIGJ5VmFsSW5m
by0+YXJyYXlQcm9maWxlLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obG9ja2VyLCBjb2RlQmxv
Y2ssIHN0cnVjdHVyZSk7CiAKLSAgICAgICAgICAgICAgICBKSVQ6OmNvbXBpbGVEaXJlY3RQdXRC
eVZhbChsb2NrZXIsICZ2bSwgY29kZUJsb2NrLCBieVZhbEluZm8sIHJldHVybkFkZHJlc3MsIGFy
cmF5TW9kZSk7CisgICAgICAgICAgICAgICAgSklUOjpjb21waWxlRGlyZWN0UHV0QnlWYWwobG9j
a2VyLCB2bSwgY29kZUJsb2NrLCBieVZhbEluZm8sIHJldHVybkFkZHJlc3MsIGFycmF5TW9kZSk7
CiAgICAgICAgICAgICAgICAgb3B0aW1pemF0aW9uUmVzdWx0ID0gT3B0aW1pemF0aW9uUmVzdWx0
OjpPcHRpbWl6ZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTg3NCw3ICs4NzUsNyBA
QCBzdGF0aWMgT3B0aW1pemF0aW9uUmVzdWx0IHRyeURpcmVjdFB1dEJ5CiAgICAgICAgICAgICBB
U1NFUlQoIWJ5VmFsSW5mby0+c3R1YlJvdXRpbmUpOwogICAgICAgICAgICAgaWYgKGJ5VmFsSW5m
by0+c2VlbikgewogICAgICAgICAgICAgICAgIGlmIChieVZhbEluZm8tPmNhY2hlZElkID09IHBy
b3BlcnR5TmFtZSkgewotICAgICAgICAgICAgICAgICAgICBKSVQ6OmNvbXBpbGVQdXRCeVZhbFdp
dGhDYWNoZWRJZDxPcFB1dEJ5VmFsRGlyZWN0Pigmdm0sIGV4ZWMtPmNvZGVCbG9jaygpLCBieVZh
bEluZm8sIHJldHVybkFkZHJlc3MsIERpcmVjdCwgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgICAg
ICAgICAgICAgSklUOjpjb21waWxlUHV0QnlWYWxXaXRoQ2FjaGVkSWQ8T3BQdXRCeVZhbERpcmVj
dD4odm0sIGV4ZWMtPmNvZGVCbG9jaygpLCBieVZhbEluZm8sIHJldHVybkFkZHJlc3MsIERpcmVj
dCwgcHJvcGVydHlOYW1lKTsKICAgICAgICAgICAgICAgICAgICAgb3B0aW1pemF0aW9uUmVzdWx0
ID0gT3B0aW1pemF0aW9uUmVzdWx0OjpPcHRpbWl6ZWQ7CiAgICAgICAgICAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgICAgICAgICAgLy8gU2VlbSBsaWtlIGEgZ2VuZXJpYyBwcm9wZXJ0eSBh
Y2Nlc3Mgc2l0ZS4KQEAgLTkwOCw3ICs5MDksNyBAQCBzdGF0aWMgT3B0aW1pemF0aW9uUmVzdWx0
IHRyeURpcmVjdFB1dEJ5CiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRGlyZWN0UHV0QnlW
YWxPcHRpbWl6ZShFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlVmFs
dWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3JpcHQsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRWYWx1ZSwgQnlWYWxJbmZvKiBieVZhbEluZm8pCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZEJhc2VWYWx1ZSk7CkBAIC05MzAsNyArOTMxLDcgQEAgdm9pZCBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbkRpcmVjdFB1dEJ5Vgogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvblB1dEJ5VmFsR2VuZXJpYyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRCYXNlVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3JpcHQsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRWYWx1ZSwgQnlWYWxJbmZvKiBieVZhbEluZm8pCiB7CiAgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7
CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgCiAgICAg
SlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2VWYWx1ZSk7CiAg
ICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFN1YnNjcmlwdCk7
CkBAIC05NDMsNyArOTQ0LDcgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFs
R2VuZQogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsR2VuZXJpYyhF
eGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlVmFsdWUsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRTdWJzY3JpcHQsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgQnlW
YWxJbmZvKiBieVZhbEluZm8pCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgCiAgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2VWYWx1ZSk7CiAgICAgSlNWYWx1ZSBzdWJzY3JpcHQg
PSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFN1YnNjcmlwdCk7CkBAIC05NTQsOCArOTU1LDggQEAg
dm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkRpcmVjdFB1dEJ5VgogCiBFbmNvZGVkSlNWYWx1
ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNhbGxFdmFsKEV4ZWNTdGF0ZSogZXhlYywgRXhlY1N0
YXRlKiBleGVjQ2FsbGVlKQogewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBleGVj
Q2FsbGVlLT5zZXRDb2RlQmxvY2soMCk7CiAgICAgCkBAIC05NzEsMjQgKzk3MiwyNCBAQCBFbmNv
ZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNhCiBzdGF0aWMgU2xvd1BhdGhSZXR1
cm5UeXBlIGhhbmRsZUhvc3RDYWxsKEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSwgSlNWYWx1ZSBjYWxs
ZWUsIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvKQogewogICAgIEV4ZWNTdGF0ZSogZXhlYyA9
IGV4ZWNDYWxsZWUtPmNhbGxlckZyYW1lKCk7Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0g
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKKyAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAog
ICAgIGV4ZWNDYWxsZWUtPnNldENvZGVCbG9jaygwKTsKIAogICAgIGlmIChjYWxsTGlua0luZm8t
PnNwZWNpYWxpemF0aW9uS2luZCgpID09IENvZGVGb3JDYWxsKSB7CiAgICAgICAgIENhbGxEYXRh
IGNhbGxEYXRhOwotICAgICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGdldENhbGxEYXRhKCp2bSwg
Y2FsbGVlLCBjYWxsRGF0YSk7CisgICAgICAgIENhbGxUeXBlIGNhbGxUeXBlID0gZ2V0Q2FsbERh
dGEodm0sIGNhbGxlZSwgY2FsbERhdGEpOwogICAgIAogICAgICAgICBBU1NFUlQoY2FsbFR5cGUg
IT0gQ2FsbFR5cGU6OkpTKTsKICAgICAKICAgICAgICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBl
OjpIb3N0KSB7CiAgICAgICAgICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBl
eGVjQ2FsbGVlKTsKICAgICAgICAgICAgIGV4ZWNDYWxsZWUtPnNldENhbGxlZShhc09iamVjdChj
YWxsZWUpKTsKLSAgICAgICAgICAgIHZtLT5ob3N0Q2FsbFJldHVyblZhbHVlID0gSlNWYWx1ZTo6
ZGVjb2RlKGNhbGxEYXRhLm5hdGl2ZS5mdW5jdGlvbihleGVjQ2FsbGVlKSk7CisgICAgICAgICAg
ICB2bS5ob3N0Q2FsbFJldHVyblZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGNhbGxEYXRhLm5hdGl2
ZS5mdW5jdGlvbihleGVjQ2FsbGVlKSk7CiAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdCgKLSAg
ICAgICAgICAgICAgICAgICAgdm0tPmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNs
b3dQYXRoR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8SlNFbnRyeVB0clRhZz4oKS5leGVjdXRhYmxl
QWRkcmVzcygpLAorICAgICAgICAgICAgICAgICAgICB2bS5nZXRDVElTdHViKHRocm93RXhjZXB0
aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPEpTRW50cnlQdHJUYWc+
KCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwKICAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRf
Y2FzdDx2b2lkKj4oS2VlcFRoZUZyYW1lKSk7CiAgICAgICAgICAgICB9CiAKQEAgLTEwMDAsMjQg
KzEwMDEsMjQgQEAgc3RhdGljIFNsb3dQYXRoUmV0dXJuVHlwZSBoYW5kbGVIb3N0Q2FsbAogICAg
ICAgICBBU1NFUlQoY2FsbFR5cGUgPT0gQ2FsbFR5cGU6Ok5vbmUpOwogICAgICAgICB0aHJvd0V4
Y2VwdGlvbihleGVjLCBzY29wZSwgY3JlYXRlTm90QUZ1bmN0aW9uRXJyb3IoZXhlYywgY2FsbGVl
KSk7CiAgICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQoCi0gICAgICAgICAgICB2bS0+Z2V0Q1RJ
U3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLnJldGFnZ2VkQ29k
ZTxKU0VudHJ5UHRyVGFnPigpLmV4ZWN1dGFibGVBZGRyZXNzKCksCisgICAgICAgICAgICB2bS5n
ZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcikucmV0YWdn
ZWRDb2RlPEpTRW50cnlQdHJUYWc+KCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwKICAgICAgICAgICAg
IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEtlZXBUaGVGcmFtZSkpOwogICAgIH0KIAogICAgIEFT
U0VSVChjYWxsTGlua0luZm8tPnNwZWNpYWxpemF0aW9uS2luZCgpID09IENvZGVGb3JDb25zdHJ1
Y3QpOwogICAgIAogICAgIENvbnN0cnVjdERhdGEgY29uc3RydWN0RGF0YTsKLSAgICBDb25zdHJ1
Y3RUeXBlIGNvbnN0cnVjdFR5cGUgPSBnZXRDb25zdHJ1Y3REYXRhKCp2bSwgY2FsbGVlLCBjb25z
dHJ1Y3REYXRhKTsKKyAgICBDb25zdHJ1Y3RUeXBlIGNvbnN0cnVjdFR5cGUgPSBnZXRDb25zdHJ1
Y3REYXRhKHZtLCBjYWxsZWUsIGNvbnN0cnVjdERhdGEpOwogICAgIAogICAgIEFTU0VSVChjb25z
dHJ1Y3RUeXBlICE9IENvbnN0cnVjdFR5cGU6OkpTKTsKICAgICAKICAgICBpZiAoY29uc3RydWN0
VHlwZSA9PSBDb25zdHJ1Y3RUeXBlOjpIb3N0KSB7CiAgICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRy
YWNlciB0cmFjZXIodm0sIGV4ZWNDYWxsZWUpOwogICAgICAgICBleGVjQ2FsbGVlLT5zZXRDYWxs
ZWUoYXNPYmplY3QoY2FsbGVlKSk7Ci0gICAgICAgIHZtLT5ob3N0Q2FsbFJldHVyblZhbHVlID0g
SlNWYWx1ZTo6ZGVjb2RlKGNvbnN0cnVjdERhdGEubmF0aXZlLmZ1bmN0aW9uKGV4ZWNDYWxsZWUp
KTsKKyAgICAgICAgdm0uaG9zdENhbGxSZXR1cm5WYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShjb25z
dHJ1Y3REYXRhLm5hdGl2ZS5mdW5jdGlvbihleGVjQ2FsbGVlKSk7CiAgICAgICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpIHsKICAgICAgICAgICAgIHJldHVybiBlbmNvZGVSZXN1
bHQoCi0gICAgICAgICAgICAgICAgdm0tPmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2Fs
bFNsb3dQYXRoR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8SlNFbnRyeVB0clRhZz4oKS5leGVjdXRh
YmxlQWRkcmVzcygpLAorICAgICAgICAgICAgICAgIHZtLmdldENUSVN0dWIodGhyb3dFeGNlcHRp
b25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8SlNFbnRyeVB0clRhZz4o
KS5leGVjdXRhYmxlQWRkcmVzcygpLAogICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCo+KEtlZXBUaGVGcmFtZSkpOwogICAgICAgICB9CiAKQEAgLTEwMjcsMTUgKzEwMjgsMTUg
QEAgc3RhdGljIFNsb3dQYXRoUmV0dXJuVHlwZSBoYW5kbGVIb3N0Q2FsbAogICAgIEFTU0VSVChj
b25zdHJ1Y3RUeXBlID09IENvbnN0cnVjdFR5cGU6Ok5vbmUpOwogICAgIHRocm93RXhjZXB0aW9u
KGV4ZWMsIHNjb3BlLCBjcmVhdGVOb3RBQ29uc3RydWN0b3JFcnJvcihleGVjLCBjYWxsZWUpKTsK
ICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KAotICAgICAgICB2bS0+Z2V0Q1RJU3R1Yih0aHJvd0V4
Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxKU0VudHJ5UHRy
VGFnPigpLmV4ZWN1dGFibGVBZGRyZXNzKCksCisgICAgICAgIHZtLmdldENUSVN0dWIodGhyb3dF
eGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8SlNFbnRyeVB0
clRhZz4oKS5leGVjdXRhYmxlQWRkcmVzcygpLAogICAgICAgICByZWludGVycHJldF9jYXN0PHZv
aWQqPihLZWVwVGhlRnJhbWUpKTsKIH0KIAogU2xvd1BhdGhSZXR1cm5UeXBlIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uTGlua0NhbGwoRXhlY1N0YXRlKiBleGVjQ2FsbGVlLCBDYWxsTGlua0luZm8q
IGNhbGxMaW5rSW5mbykKIHsKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBleGVjQ2FsbGVlLT5jYWxs
ZXJGcmFtZSgpOwotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwor
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgQ29k
ZVNwZWNpYWxpemF0aW9uS2luZCBraW5kID0gY2FsbExpbmtJbmZvLT5zcGVjaWFsaXphdGlvbktp
bmQoKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKQEAgLTEw
NDUsOCArMTA0Niw4IEBAIFNsb3dQYXRoUmV0dXJuVHlwZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGkK
ICAgICBKU1ZhbHVlIGNhbGxlZUFzVmFsdWUgPSBleGVjQ2FsbGVlLT5ndWFyYW50ZWVkSlNWYWx1
ZUNhbGxlZSgpOwogICAgIEpTQ2VsbCogY2FsbGVlQXNGdW5jdGlvbkNlbGwgPSBnZXRKU0Z1bmN0
aW9uKGNhbGxlZUFzVmFsdWUpOwogICAgIGlmICghY2FsbGVlQXNGdW5jdGlvbkNlbGwpIHsKLSAg
ICAgICAgaWYgKGF1dG8qIGludGVybmFsRnVuY3Rpb24gPSBqc0R5bmFtaWNDYXN0PEludGVybmFs
RnVuY3Rpb24qPigqdm0sIGNhbGxlZUFzVmFsdWUpKSB7Ci0gICAgICAgICAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0ciA9IHZtLT5nZXRDVElJbnRlcm5hbEZ1
bmN0aW9uVHJhbXBvbGluZUZvcihraW5kKTsKKyAgICAgICAgaWYgKGF1dG8qIGludGVybmFsRnVu
Y3Rpb24gPSBqc0R5bmFtaWNDYXN0PEludGVybmFsRnVuY3Rpb24qPih2bSwgY2FsbGVlQXNWYWx1
ZSkpIHsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBj
b2RlUHRyID0gdm0uZ2V0Q1RJSW50ZXJuYWxGdW5jdGlvblRyYW1wb2xpbmVGb3Ioa2luZCk7CiAg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghIWNvZGVQdHIpOwogCiAgICAgICAgICAgICBpZiAo
IWNhbGxMaW5rSW5mby0+c2Vlbk9uY2UoKSkKQEAgLTEwNjcsMTQgKzEwNjgsMTQgQEAgU2xvd1Bh
dGhSZXR1cm5UeXBlIEpJVF9PUEVSQVRJT04gb3BlcmF0aQogICAgIE1hY3JvQXNzZW1ibGVyQ29k
ZVB0cjxKU0VudHJ5UHRyVGFnPiBjb2RlUHRyOwogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0g
bnVsbHB0cjsKICAgICBpZiAoZXhlY3V0YWJsZS0+aXNIb3N0RnVuY3Rpb24oKSkgewotICAgICAg
ICBjb2RlUHRyID0ganNUb1dhc21JQ0NvZGVQdHIoKnZtLCBraW5kLCBjYWxsZWUpOworICAgICAg
ICBjb2RlUHRyID0ganNUb1dhc21JQ0NvZGVQdHIodm0sIGtpbmQsIGNhbGxlZSk7CiAgICAgICAg
IGlmICghY29kZVB0cikKICAgICAgICAgICAgIGNvZGVQdHIgPSBleGVjdXRhYmxlLT5lbnRyeXBv
aW50Rm9yKGtpbmQsIE11c3RDaGVja0FyaXR5KTsKICAgICB9IGVsc2UgewogICAgICAgICBGdW5j
dGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhlY3V0YWJsZSA9IHN0YXRpY19jYXN0PEZ1bmN0aW9u
RXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpOwogCiAgICAgICAgIGF1dG8gaGFuZGxlVGhyb3dFeGNl
cHRpb24gPSBbJl0gKCkgewotICAgICAgICAgICAgdm9pZCogdGhyb3dUYXJnZXQgPSB2bS0+Z2V0
Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLnJldGFnZ2Vk
Q29kZTxKU0VudHJ5UHRyVGFnPigpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgICAgICAgICB2
b2lkKiB0aHJvd1RhcmdldCA9IHZtLmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNs
b3dQYXRoR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8SlNFbnRyeVB0clRhZz4oKS5leGVjdXRhYmxl
QWRkcmVzcygpOwogICAgICAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdCh0aHJvd1RhcmdldCwg
cmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oS2VlcFRoZUZyYW1lKSk7CiAgICAgICAgIH07CiAKQEAg
LTEwODQsNyArMTA4NSw3IEBAIFNsb3dQYXRoUmV0dXJuVHlwZSBKSVRfT1BFUkFUSU9OIG9wZXJh
dGkKICAgICAgICAgfQogCiAgICAgICAgIENvZGVCbG9jayoqIGNvZGVCbG9ja1Nsb3QgPSBleGVj
Q2FsbGVlLT5hZGRyZXNzT2ZDb2RlQmxvY2soKTsKLSAgICAgICAgRXhjZXB0aW9uKiBlcnJvciA9
IGZ1bmN0aW9uRXhlY3V0YWJsZS0+cHJlcGFyZUZvckV4ZWN1dGlvbjxGdW5jdGlvbkV4ZWN1dGFi
bGU+KCp2bSwgY2FsbGVlLCBzY29wZSwga2luZCwgKmNvZGVCbG9ja1Nsb3QpOworICAgICAgICBF
eGNlcHRpb24qIGVycm9yID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5wcmVwYXJlRm9yRXhlY3V0aW9u
PEZ1bmN0aW9uRXhlY3V0YWJsZT4odm0sIGNhbGxlZSwgc2NvcGUsIGtpbmQsICpjb2RlQmxvY2tT
bG90KTsKICAgICAgICAgRVhDRVBUSU9OX0FTU0VSVCh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpID09
IGVycm9yKTsKICAgICAgICAgaWYgKFVOTElLRUxZKGVycm9yKSkKICAgICAgICAgICAgIHJldHVy
biBoYW5kbGVUaHJvd0V4Y2VwdGlvbigpOwpAQCAtMTEwNyw4ICsxMTA4LDggQEAgU2xvd1BhdGhS
ZXR1cm5UeXBlIEpJVF9PUEVSQVRJT04gb3BlcmF0aQogCiB2b2lkIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uTGlua0RpcmVjdENhbGwoRXhlY1N0YXRlKiBleGVjLCBDYWxsTGlua0luZm8qIGNhbGxM
aW5rSW5mbywgSlNGdW5jdGlvbiogY2FsbGVlKQogewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgp
OwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKKyAgICBW
TSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogCiAgICAgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kID0gY2FsbExpbmtJ
bmZvLT5zcGVjaWFsaXphdGlvbktpbmQoKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKHZtLCBleGVjKTsKQEAgLTExNDEsNyArMTE0Miw3IEBAIHZvaWQgSklUX09QRVJBVElPTiBv
cGVyYXRpb25MaW5rRGlyZWN0Q2EKIAogICAgICAgICBSRUxFQVNFX0FTU0VSVChpc0NhbGwoa2lu
ZCkgfHwgZnVuY3Rpb25FeGVjdXRhYmxlLT5jb25zdHJ1Y3RBYmlsaXR5KCkgIT0gQ29uc3RydWN0
QWJpbGl0eTo6Q2Fubm90Q29uc3RydWN0KTsKICAgICAgICAgCi0gICAgICAgIEV4Y2VwdGlvbiog
ZXJyb3IgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPnByZXBhcmVGb3JFeGVjdXRpb248RnVuY3Rpb25F
eGVjdXRhYmxlPigqdm0sIGNhbGxlZSwgc2NvcGUsIGtpbmQsIGNvZGVCbG9jayk7CisgICAgICAg
IEV4Y2VwdGlvbiogZXJyb3IgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPnByZXBhcmVGb3JFeGVjdXRp
b248RnVuY3Rpb25FeGVjdXRhYmxlPih2bSwgY2FsbGVlLCBzY29wZSwga2luZCwgY29kZUJsb2Nr
KTsKICAgICAgICAgRVhDRVBUSU9OX0FTU0VSVF9VTlVTRUQodGhyb3dTY29wZSwgdGhyb3dTY29w
ZS5leGNlcHRpb24oKSA9PSBlcnJvcik7CiAgICAgICAgIGlmIChVTkxJS0VMWShlcnJvcikpCiAg
ICAgICAgICAgICByZXR1cm47CkBAIC0xMTU5LDggKzExNjAsOCBAQCBpbmxpbmUgU2xvd1BhdGhS
ZXR1cm5UeXBlIHZpcnR1YWxGb3JXaXRoCiAgICAgRXhlY1N0YXRlKiBleGVjQ2FsbGVlLCBDYWxs
TGlua0luZm8qIGNhbGxMaW5rSW5mbywgSlNDZWxsKiYgY2FsbGVlQXNGdW5jdGlvbkNlbGwpCiB7
CiAgICAgRXhlY1N0YXRlKiBleGVjID0gZXhlY0NhbGxlZS0+Y2FsbGVyRnJhbWUoKTsKLSAgICBW
TSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKCp2bSk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIENvZGVTcGVjaWFsaXphdGlvbktp
bmQga2luZCA9IGNhbGxMaW5rSW5mby0+c3BlY2lhbGl6YXRpb25LaW5kKCk7CiAgICAgTmF0aXZl
Q2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CkBAIC0xMTY4LDggKzExNjksOCBAQCBp
bmxpbmUgU2xvd1BhdGhSZXR1cm5UeXBlIHZpcnR1YWxGb3JXaXRoCiAgICAgSlNWYWx1ZSBjYWxs
ZWVBc1ZhbHVlID0gZXhlY0NhbGxlZS0+Z3VhcmFudGVlZEpTVmFsdWVDYWxsZWUoKTsKICAgICBj
YWxsZWVBc0Z1bmN0aW9uQ2VsbCA9IGdldEpTRnVuY3Rpb24oY2FsbGVlQXNWYWx1ZSk7CiAgICAg
aWYgKFVOTElLRUxZKCFjYWxsZWVBc0Z1bmN0aW9uQ2VsbCkpIHsKLSAgICAgICAgaWYgKGpzRHlu
YW1pY0Nhc3Q8SW50ZXJuYWxGdW5jdGlvbio+KCp2bSwgY2FsbGVlQXNWYWx1ZSkpIHsKLSAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBjb2RlUHRyID0gdm0t
PmdldENUSUludGVybmFsRnVuY3Rpb25UcmFtcG9saW5lRm9yKGtpbmQpOworICAgICAgICBpZiAo
anNEeW5hbWljQ2FzdDxJbnRlcm5hbEZ1bmN0aW9uKj4odm0sIGNhbGxlZUFzVmFsdWUpKSB7Cisg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0ciA9
IHZtLmdldENUSUludGVybmFsRnVuY3Rpb25UcmFtcG9saW5lRm9yKGtpbmQpOwogICAgICAgICAg
ICAgQVNTRVJUKCEhY29kZVB0cik7CiAgICAgICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KGNv
ZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oY2FsbExp
bmtJbmZvLT5jYWxsTW9kZSgpID09IENhbGxNb2RlOjpUYWlsID8gUmV1c2VUaGVGcmFtZSA6IEtl
ZXBUaGVGcmFtZSkpOwogICAgICAgICB9CkBAIC0xMTg1LDE2ICsxMTg2LDE2IEBAIGlubGluZSBT
bG93UGF0aFJldHVyblR5cGUgdmlydHVhbEZvcldpdGgKICAgICAgICAgaWYgKCFpc0NhbGwoa2lu
ZCkgJiYgZnVuY3Rpb25FeGVjdXRhYmxlLT5jb25zdHJ1Y3RBYmlsaXR5KCkgPT0gQ29uc3RydWN0
QWJpbGl0eTo6Q2Fubm90Q29uc3RydWN0KSB7CiAgICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihl
eGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RBQ29uc3RydWN0b3JFcnJvcihleGVjLCBmdW5jdGlv
bikpOwogICAgICAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdCgKLSAgICAgICAgICAgICAgICB2
bS0+Z2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLnJl
dGFnZ2VkQ29kZTxKU0VudHJ5UHRyVGFnPigpLmV4ZWN1dGFibGVBZGRyZXNzKCksCisgICAgICAg
ICAgICAgICAgdm0uZ2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5l
cmF0b3IpLnJldGFnZ2VkQ29kZTxKU0VudHJ5UHRyVGFnPigpLmV4ZWN1dGFibGVBZGRyZXNzKCks
CiAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oS2VlcFRoZUZyYW1lKSk7
CiAgICAgICAgIH0KIAogICAgICAgICBDb2RlQmxvY2sqKiBjb2RlQmxvY2tTbG90ID0gZXhlY0Nh
bGxlZS0+YWRkcmVzc09mQ29kZUJsb2NrKCk7Ci0gICAgICAgIEV4Y2VwdGlvbiogZXJyb3IgPSBm
dW5jdGlvbkV4ZWN1dGFibGUtPnByZXBhcmVGb3JFeGVjdXRpb248RnVuY3Rpb25FeGVjdXRhYmxl
Pigqdm0sIGZ1bmN0aW9uLCBzY29wZSwga2luZCwgKmNvZGVCbG9ja1Nsb3QpOworICAgICAgICBF
eGNlcHRpb24qIGVycm9yID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5wcmVwYXJlRm9yRXhlY3V0aW9u
PEZ1bmN0aW9uRXhlY3V0YWJsZT4odm0sIGZ1bmN0aW9uLCBzY29wZSwga2luZCwgKmNvZGVCbG9j
a1Nsb3QpOwogICAgICAgICBFWENFUFRJT05fQVNTRVJUKHRocm93U2NvcGUuZXhjZXB0aW9uKCkg
PT0gZXJyb3IpOwogICAgICAgICBpZiAoVU5MSUtFTFkoZXJyb3IpKSB7CiAgICAgICAgICAgICBy
ZXR1cm4gZW5jb2RlUmVzdWx0KAotICAgICAgICAgICAgICAgIHZtLT5nZXRDVElTdHViKHRocm93
RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPEpTRW50cnlQ
dHJUYWc+KCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwKKyAgICAgICAgICAgICAgICB2bS5nZXRDVElT
dHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcikucmV0YWdnZWRDb2Rl
PEpTRW50cnlQdHJUYWc+KCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwKICAgICAgICAgICAgICAgICBy
ZWludGVycHJldF9jYXN0PHZvaWQqPihLZWVwVGhlRnJhbWUpKTsKICAgICAgICAgfQogICAgIH0K
QEAgLTEyMjIsNyArMTIyMyw3IEBAIFNsb3dQYXRoUmV0dXJuVHlwZSBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGkKIAogc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZUxlc3MoRXhlY1N0
YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkT3AyKQogewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAg
CiAgICAgcmV0dXJuIGpzTGVzczx0cnVlPihleGVjLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9w
MSksIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AyKSk7CkBAIC0xMjMwLDcgKzEyMzEsNyBAQCBz
aXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlTGVzCiAKIHNpemVfdCBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVMZXNzRXEoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKQogewotICAgIFZNKiB2
bSA9ICZleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAKICAgICByZXR1cm4ganNMZXNzRXE8dHJ1
ZT4oZXhlYywgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDEpLCBKU1ZhbHVlOjpkZWNvZGUoZW5j
b2RlZE9wMikpOwpAQCAtMTIzOCw3ICsxMjM5LDcgQEAgc2l6ZV90IEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uQ29tcGFyZUxlcwogCiBzaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJl
R3JlYXRlcihFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRPcDIpCiB7Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZt
LCBleGVjKTsKIAogICAgIHJldHVybiBqc0xlc3M8ZmFsc2U+KGV4ZWMsIEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkT3AyKSwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDEpKTsKQEAgLTEyNDYsNyAr
MTI0Nyw3IEBAIHNpemVfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVHcmUKIAogc2l6
ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXJFcShFeGVjU3RhdGUqIGV4
ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIp
CiB7Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsK
ICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKIAogICAgIHJldHVy
biBqc0xlc3NFcTxmYWxzZT4oZXhlYywgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDIpLCBKU1Zh
bHVlOjpkZWNvZGUoZW5jb2RlZE9wMSkpOwpAQCAtMTI1NCw3ICsxMjU1LDcgQEAgc2l6ZV90IEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZUdyZQogCiBzaXplX3QgSklUX09QRVJBVElPTiBv
cGVyYXRpb25Db21wYXJlRXEoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
T3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKQogewotICAgIFZNKiB2bSA9ICZleGVjLT52
bSgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcih2bSwgZXhlYyk7CiAKICAgICByZXR1cm4gSlNWYWx1ZTo6ZXF1YWxTbG93Q2FzZUlu
bGluZShleGVjLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMSksIEpTVmFsdWU6OmRlY29kZShl
bmNvZGVkT3AyKSk7CkBAIC0xMjY2LDcgKzEyNjcsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbkNvCiBzaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJl
U3RyaW5nRXEoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGxlZnQsIEpTQ2VsbCogcmlnaHQpCiAj
ZW5kaWYKIHsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBleGVjLT52
bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogCiAgICAg
Ym9vbCByZXN1bHQgPSBhc1N0cmluZyhsZWZ0KS0+ZXF1YWwoZXhlYywgYXNTdHJpbmcocmlnaHQp
KTsKQEAgLTEyNzksNyArMTI4MCw3IEBAIHNpemVfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNv
bXBhcmVTdHIKIAogc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZVN0cmljdEVx
KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZE9wMikKIHsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0g
PSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMp
OwogCiAgICAgSlNWYWx1ZSBzcmMxID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDEpOwpAQCAt
MTI5MCwxNCArMTI5MSwxNCBAQCBzaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJl
U3RyCiAKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3QXJyYXlXaXRo
UHJvZmlsZShFeGVjU3RhdGUqIGV4ZWMsIEFycmF5QWxsb2NhdGlvblByb2ZpbGUqIHByb2ZpbGUs
IGNvbnN0IEpTVmFsdWUqIHZhbHVlcywgaW50IHNpemUpCiB7Ci0gICAgVk0qIHZtID0gJmV4ZWMt
PnZtKCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFj
ZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNvbnN0cnVj
dEFycmF5TmVnYXRpdmVJbmRleGVkKGV4ZWMsIHByb2ZpbGUsIHZhbHVlcywgc2l6ZSkpOwogfQog
CiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVB
bmRQcm9maWxlKEV4ZWNTdGF0ZSogZXhlYywgQXJyYXlBbGxvY2F0aW9uUHJvZmlsZSogcHJvZmls
ZSwgRW5jb2RlZEpTVmFsdWUgc2l6ZSkKIHsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
dm0sIGV4ZWMpOwogICAgIEpTVmFsdWUgc2l6ZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKHNpemUp
OwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY29uc3RydWN0QXJyYXlXaXRoU2l6ZVF1aXJr
KGV4ZWMsIHByb2ZpbGUsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgc2l6ZVZhbHVlKSk7
CkBAIC0xMzEwLDcgKzEzMTEsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgb3BlcmF0aW9uTmV3
RnVuY3RpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBBU1NFUlQoZnVuY3Rpb25F
eGVjdXRhYmxlLT5pbmhlcml0czxGdW5jdGlvbkV4ZWN1dGFibGU+KHZtKSk7Ci0gICAgTmF0aXZl
Q2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRy
YWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIGlmIChpc0ludmFsaWRhdGVkKQogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEZ1bmN0aW9uVHlwZTo6Y3JlYXRlV2l0aEludmFsaWRhdGVk
UmVhbGxvY2F0aW9uV2F0Y2hwb2ludCh2bSwgc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxl
Kj4oZnVuY3Rpb25FeGVjdXRhYmxlKSwgc2NvcGUpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKEZ1bmN0aW9uVHlwZTo6Y3JlYXRlKHZtLCBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFi
bGUqPihmdW5jdGlvbkV4ZWN1dGFibGUpLCBzY29wZSkpOwpAQCAtMTM2MCw3ICsxMzYxLDcgQEAg
RW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25OZQogICAgIAogdm9pZCBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvblNldEZ1bmN0aW9uTmFtZShFeGVjU3RhdGUqIGV4ZWMsIEpTQ2Vs
bCogZnVuY0NlbGwsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWROYW1lKQogewotICAgIFZNKiB2bSA9
ICZleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAKICAgICBKU0Z1bmN0aW9uKiBmdW5jID0ganND
YXN0PEpTRnVuY3Rpb24qPihmdW5jQ2VsbCk7CkBAIC0xMzcwLDcgKzEzNzEsNyBAQCB2b2lkIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uU2V0RnVuY3Rpb25OCiAKIEpTQ2VsbCogSklUX09QRVJBVElP
TiBvcGVyYXRpb25OZXdPYmplY3QoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSkKIHsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgp
OwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogCiAgICAgcmV0
dXJuIGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMsIHN0cnVjdHVyZSk7CkBAIC0xMzgwLDcgKzEz
ODEsNyBAQCBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3UmVnZXhwCiB7CiAgICAg
U3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwogICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMp
OworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogCiAgICAgUmVn
RXhwKiByZWdleHAgPSBzdGF0aWNfY2FzdDxSZWdFeHAqPihyZWdleHBQdHIpOwogICAgIEFTU0VS
VChyZWdleHAtPmlzVmFsaWQoKSk7CkBAIC0xMzk0LDcgKzEzOTUsNyBAQCBKU0NlbGwqIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uTmV3UmVnZXhwCiBVbnVzZWRQdHIgSklUX09QRVJBVElPTiBvcGVy
YXRpb25IYW5kbGVUcmFwcyhFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgQVNTRVJUKHZtLm5l
ZWRUcmFwSGFuZGxpbmcoKSk7CiAgICAgdm0uaGFuZGxlVHJhcHMoZXhlYyk7CiAgICAgcmV0dXJu
IG51bGxwdHI7CkBAIC0xNDAzLDcgKzE0MDQsNyBAQCBVbnVzZWRQdHIgSklUX09QRVJBVElPTiBv
cGVyYXRpb25IYW5kbGVUCiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRGVidWcoRXhlY1N0
YXRlKiBleGVjLCBpbnQzMl90IGRlYnVnSG9va1R5cGUpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAKICAgICB2bS5pbnRlcnBy
ZXRlci0+ZGVidWcoZXhlYywgc3RhdGljX2Nhc3Q8RGVidWdIb29rVHlwZT4oZGVidWdIb29rVHlw
ZSkpOwogfQpAQCAtMTQxOCw3ICsxNDE5LDcgQEAgc3RhdGljIHZvaWQgdXBkYXRlQWxsUHJlZGlj
dGlvbnNBbmRPcHRpbQogU2xvd1BhdGhSZXR1cm5UeXBlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
T3B0aW1pemUoRXhlY1N0YXRlKiBleGVjLCB1aW50MzJfdCBieXRlY29kZUluZGV4KQogewogICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigm
dm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwog
CiAgICAgLy8gRGVmZXIgR0MgZm9yIGEgd2hpbGUgc28gdGhhdCBpdCBkb2Vzbid0IHJ1biBiZXR3
ZWVuIHdoZW4gd2UgZW50ZXIgaW50byB0aGlzCiAgICAgLy8gc2xvdyBwYXRoIGFuZCB3aGVuIHdl
IGZpZ3VyZSBvdXQgdGhlIHN0YXRlIG9mIG91ciBjb2RlIGJsb2NrLiBUaGlzIHByZXZlbnRzCkBA
IC0xNjYzLDcgKzE2NjQsNyBAQCBTbG93UGF0aFJldHVyblR5cGUgSklUX09QRVJBVElPTiBvcGVy
YXRpCiBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRyeU9TUkVudGVyQXRDYXRjaChFeGVj
U3RhdGUqIGV4ZWMsIHVpbnQzMl90IGJ5dGVjb2RlSW5kZXgpCiB7CiAgICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7Cisg
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAKICAgICBDb2RlQmxv
Y2sqIG9wdGltaXplZFJlcGxhY2VtZW50ID0gZXhlYy0+Y29kZUJsb2NrKCktPnJlcGxhY2VtZW50
KCk7CiAgICAgaWYgKFVOTElLRUxZKCFvcHRpbWl6ZWRSZXBsYWNlbWVudCkpCkBAIC0xNjg0LDcg
KzE2ODUsNyBAQCBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRyeU9TUkVudGVyCiBjaGFy
KiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRyeU9TUkVudGVyQXRDYXRjaEFuZFZhbHVlUHJvZmls
ZShFeGVjU3RhdGUqIGV4ZWMsIHVpbnQzMl90IGJ5dGVjb2RlSW5kZXgpCiB7CiAgICAgVk0mIHZt
ID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhl
Yyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAKICAgICBD
b2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOwogICAgIENvZGVCbG9jayog
b3B0aW1pemVkUmVwbGFjZW1lbnQgPSBjb2RlQmxvY2stPnJlcGxhY2VtZW50KCk7CkBAIC0xNzE2
LDcgKzE3MTcsNyBAQCBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRyeU9TUkVudGVyCiB2
b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJbmRleChFeGVjU3RhdGUqIGV4ZWMsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRBcnJheVZhbHVlLCBpbnQzMl90IGluZGV4LCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAKICAgICBKU1ZhbHVlIGFycmF5VmFsdWUgPSBKU1Zh
bHVlOjpkZWNvZGUoZW5jb2RlZEFycmF5VmFsdWUpOwogICAgIEFTU0VSVChpc0pTQXJyYXkoYXJy
YXlWYWx1ZSkpOwpAQCAtMTc0NSw3ICsxNzQ2LDcgQEAgc3RhdGljIHZvaWQgcHV0QWNjZXNzb3JC
eVZhbChFeGVjU3RhdGUqIAogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEdldHRlckJ5
SWQoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIG9iamVjdCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVp
ZCwgaW50MzJfdCBvcHRpb25zLCBKU0NlbGwqIGdldHRlcikKIHsKICAgICBWTSYgdm0gPSBleGVj
LT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKIAogICAgIEFTU0VSVChv
YmplY3QgJiYgb2JqZWN0LT5pc09iamVjdCgpKTsKICAgICBKU09iamVjdCogYmFzZU9iaiA9IG9i
amVjdC0+Z2V0T2JqZWN0KCk7CkBAIC0xNzU3LDcgKzE3NTgsNyBAQCB2b2lkIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uUHV0R2V0dGVyQnlJCiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0
U2V0dGVyQnlJZChFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogb2JqZWN0LCBVbmlxdWVkU3RyaW5n
SW1wbCogdWlkLCBpbnQzMl90IG9wdGlvbnMsIEpTQ2VsbCogc2V0dGVyKQogewogICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4
ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogCiAgICAg
QVNTRVJUKG9iamVjdCAmJiBvYmplY3QtPmlzT2JqZWN0KCkpOwogICAgIEpTT2JqZWN0KiBiYXNl
T2JqID0gb2JqZWN0LT5nZXRPYmplY3QoKTsKQEAgLTE3NjksNyArMTc3MCw3IEBAIHZvaWQgSklU
X09QRVJBVElPTiBvcGVyYXRpb25QdXRTZXR0ZXJCeUkKIHZvaWQgSklUX09QRVJBVElPTiBvcGVy
YXRpb25QdXRHZXR0ZXJCeVZhbChFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogYmFzZSwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZFN1YnNjcmlwdCwgaW50MzJfdCBhdHRyaWJ1dGUsIEpTQ2VsbCogZ2V0
dGVyKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
dm0sIGV4ZWMpOwogCiAgICAgcHV0QWNjZXNzb3JCeVZhbChleGVjLCBhc09iamVjdChiYXNlKSwg
SlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRTdWJzY3JpcHQpLCBhdHRyaWJ1dGUsIGFzT2JqZWN0KGdl
dHRlciksIEFjY2Vzc29yVHlwZTo6R2V0dGVyKTsKIH0KQEAgLTE3NzcsNyArMTc3OCw3IEBAIHZv
aWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRHZXR0ZXJCeVYKIHZvaWQgSklUX09QRVJBVElP
TiBvcGVyYXRpb25QdXRTZXR0ZXJCeVZhbChFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogYmFzZSwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFN1YnNjcmlwdCwgaW50MzJfdCBhdHRyaWJ1dGUsIEpTQ2Vs
bCogc2V0dGVyKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIodm0sIGV4ZWMpOwogCiAgICAgcHV0QWNjZXNzb3JCeVZhbChleGVjLCBhc09iamVjdChi
YXNlKSwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRTdWJzY3JpcHQpLCBhdHRyaWJ1dGUsIGFzT2Jq
ZWN0KHNldHRlciksIEFjY2Vzc29yVHlwZTo6U2V0dGVyKTsKIH0KQEAgLTE3ODYsNyArMTc4Nyw3
IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRTZXR0ZXJCeVYKIHZvaWQgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25QdXRHZXR0ZXJTZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwq
IG9iamVjdCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgaW50MzJfdCBhdHRyaWJ1dGUsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRHZXR0ZXJWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFNldHRl
clZhbHVlKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIodm0sIGV4ZWMpOwogCiAgICAgQVNTRVJUKG9iamVjdCAmJiBvYmplY3QtPmlzT2JqZWN0KCkp
OwogICAgIEpTT2JqZWN0KiBiYXNlT2JqZWN0ID0gYXNPYmplY3Qob2JqZWN0KTsKQEAgLTE4MDIs
NyArMTgwMyw3IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRHZXR0ZXJTZXQKIHZv
aWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRHZXR0ZXJTZXR0ZXIoRXhlY1N0YXRlKiBleGVj
LCBKU0NlbGwqIG9iamVjdCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgaW50MzJfdCBhdHRyaWJ1
dGUsIEpTQ2VsbCogZ2V0dGVyQ2VsbCwgSlNDZWxsKiBzZXR0ZXJDZWxsKQogewogICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4
ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogCiAgICAg
QVNTRVJUKG9iamVjdCAmJiBvYmplY3QtPmlzT2JqZWN0KCkpOwogICAgIEpTT2JqZWN0KiBiYXNl
T2JqZWN0ID0gYXNPYmplY3Qob2JqZWN0KTsKQEAgLTE4MTgsNyArMTgxOSw3IEBAIHZvaWQgSklU
X09QRVJBVElPTiBvcGVyYXRpb25QdXRHZXR0ZXJTZXQKIHZvaWQgSklUX09QRVJBVElPTiBvcGVy
YXRpb25Qb3BTY29wZShFeGVjU3RhdGUqIGV4ZWMsIGludDMyX3Qgc2NvcGVSZWcpCiB7CiAgICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2
bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAK
ICAgICBKU1Njb3BlKiBzY29wZSA9IGV4ZWMtPnVuY2hlY2tlZFIoc2NvcGVSZWcpLlJlZ2lzdGVy
OjpzY29wZSgpOwogICAgIGV4ZWMtPnVuY2hlY2tlZFIoc2NvcGVSZWcpID0gc2NvcGUtPm5leHQo
KTsKQEAgLTE4MjcsNyArMTgyOCw3IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25Qb3BT
Y29wZShFeGUKIGludDMyX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25JbnN0YW5jZU9mQ3VzdG9t
KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU09iamVjdCog
Y29uc3RydWN0b3IsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRIYXNJbnN0YW5jZSkKIHsKICAgICBW
TSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZt
LCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKIAog
ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBK
U1ZhbHVlIGhhc0luc3RhbmNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEhhc0luc3Rh
bmNlKTsKQEAgLTE5MzQsNyArMTkzNSw3IEBAIHN0YXRpYyBPcHRpbWl6YXRpb25SZXN1bHQgdHJ5
R2V0QnlWYWxPcHQKICAgICAgICAgICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNv
ZGVCbG9jay0+bV9sb2NrKTsKICAgICAgICAgICAgICAgICBieVZhbEluZm8tPmFycmF5UHJvZmls
ZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlciwgY29kZUJsb2NrLCBzdHJ1Y3R1cmUp
OwogCi0gICAgICAgICAgICAgICAgSklUOjpjb21waWxlR2V0QnlWYWwobG9ja2VyLCAmdm0sIGNv
ZGVCbG9jaywgYnlWYWxJbmZvLCByZXR1cm5BZGRyZXNzLCBhcnJheU1vZGUpOworICAgICAgICAg
ICAgICAgIEpJVDo6Y29tcGlsZUdldEJ5VmFsKGxvY2tlciwgdm0sIGNvZGVCbG9jaywgYnlWYWxJ
bmZvLCByZXR1cm5BZGRyZXNzLCBhcnJheU1vZGUpOwogICAgICAgICAgICAgICAgIG9wdGltaXph
dGlvblJlc3VsdCA9IE9wdGltaXphdGlvblJlc3VsdDo6T3B0aW1pemVkOwogICAgICAgICAgICAg
fQogICAgICAgICB9CkBAIC0xOTUyLDcgKzE5NTMsNyBAQCBzdGF0aWMgT3B0aW1pemF0aW9uUmVz
dWx0IHRyeUdldEJ5VmFsT3B0CiAgICAgICAgICAgICBBU1NFUlQoIWJ5VmFsSW5mby0+c3R1YlJv
dXRpbmUpOwogICAgICAgICAgICAgaWYgKGJ5VmFsSW5mby0+c2VlbikgewogICAgICAgICAgICAg
ICAgIGlmIChieVZhbEluZm8tPmNhY2hlZElkID09IHByb3BlcnR5TmFtZSkgewotICAgICAgICAg
ICAgICAgICAgICBKSVQ6OmNvbXBpbGVHZXRCeVZhbFdpdGhDYWNoZWRJZCgmdm0sIGV4ZWMtPmNv
ZGVCbG9jaygpLCBieVZhbEluZm8sIHJldHVybkFkZHJlc3MsIHByb3BlcnR5TmFtZSk7CisgICAg
ICAgICAgICAgICAgICAgIEpJVDo6Y29tcGlsZUdldEJ5VmFsV2l0aENhY2hlZElkKHZtLCBleGVj
LT5jb2RlQmxvY2soKSwgYnlWYWxJbmZvLCByZXR1cm5BZGRyZXNzLCBwcm9wZXJ0eU5hbWUpOwog
ICAgICAgICAgICAgICAgICAgICBvcHRpbWl6YXRpb25SZXN1bHQgPSBPcHRpbWl6YXRpb25SZXN1
bHQ6Ok9wdGltaXplZDsKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAg
ICAgICAvLyBTZWVtIGxpa2UgYSBnZW5lcmljIHByb3BlcnR5IGFjY2VzcyBzaXRlLgpAQCAtMTk4
OCw3ICsxOTg5LDcgQEAgZXh0ZXJuICJDIiB7CiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvbkdldEJ5VmFsR2VuZXJpYyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRCYXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkU3Vic2NyaXB0LCBCeVZhbEluZm8q
IGJ5VmFsSW5mbykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxG
cmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIg
dHJhY2VyKHZtLCBleGVjKTsKICAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkQmFzZSk7CiAgICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZFN1YnNjcmlwdCk7CiAKQEAgLTE5OTksNyArMjAwMCw3IEBAIEVuY29kZWRKU1ZhbHVl
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2UKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZShFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRCYXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkU3Vic2NyaXB0LCBCeVZhbEluZm8q
IGJ5VmFsSW5mbykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxG
cmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIg
dHJhY2VyKHZtLCBleGVjKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CiAKICAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQmFz
ZSk7CkBAIC0yMDE5LDcgKzIwMjAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbkdlCiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkhhc0luZGV4
ZWRQcm9wZXJ0eURlZmF1bHQoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
QmFzZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFN1YnNjcmlwdCwgQnlWYWxJbmZvKiBieVZhbElu
Zm8pCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFj
ZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2
bSwgZXhlYyk7CiAgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2Rl
ZEJhc2UpOwogICAgIEpTVmFsdWUgc3Vic2NyaXB0ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRT
dWJzY3JpcHQpOwogICAgIApAQCAtMjAzNiw3ICsyMDM3LDcgQEAgRW5jb2RlZEpTVmFsdWUgSklU
X09QRVJBVElPTiBvcGVyYXRpb25IYQogICAgICAgICAvLyBBdHRlbXB0IHRvIG9wdGltaXplLgog
ICAgICAgICBKSVRBcnJheU1vZGUgYXJyYXlNb2RlID0gaml0QXJyYXlNb2RlRm9yU3RydWN0dXJl
KG9iamVjdC0+c3RydWN0dXJlKHZtKSk7CiAgICAgICAgIGlmIChhcnJheU1vZGUgIT0gYnlWYWxJ
bmZvLT5hcnJheU1vZGUpIHsKLSAgICAgICAgICAgIEpJVDo6Y29tcGlsZUhhc0luZGV4ZWRQcm9w
ZXJ0eSgmdm0sIGV4ZWMtPmNvZGVCbG9jaygpLCBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIo
T1VSX1JFVFVSTl9BRERSRVNTKSwgYXJyYXlNb2RlKTsKKyAgICAgICAgICAgIEpJVDo6Y29tcGls
ZUhhc0luZGV4ZWRQcm9wZXJ0eSh2bSwgZXhlYy0+Y29kZUJsb2NrKCksIGJ5VmFsSW5mbywgUmV0
dXJuQWRkcmVzc1B0cihPVVJfUkVUVVJOX0FERFJFU1MpLCBhcnJheU1vZGUpOwogICAgICAgICAg
ICAgZGlkT3B0aW1pemUgPSB0cnVlOwogICAgICAgICB9CiAgICAgfQpAQCAtMjA2Niw3ICsyMDY3
LDcgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25IYQogRW5jb2RlZEpT
VmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25IYXNJbmRleGVkUHJvcGVydHlHZW5lcmljKEV4
ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRTdWJzY3JpcHQsIEJ5VmFsSW5mbyogYnlWYWxJbmZvKQogewogICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMp
OworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIEpTVmFs
dWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNlKTsKICAgICBKU1ZhbHVl
IHN1YnNjcmlwdCA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkU3Vic2NyaXB0KTsKICAgICAKQEAg
LTIwODYsNyArMjA4Nyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
SGEKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0QnlWYWxTdHJpbmco
RXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFN1YnNjcmlwdCwgQnlWYWxJbmZvKiBieVZhbEluZm8pCiB7CiAgICAgVk0mIHZt
ID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhl
Yyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTVmFsdWUgYmFzZVZhbHVl
ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNlKTsKICAgICBKU1ZhbHVlIHN1YnNjcmlwdCA9
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkU3Vic2NyaXB0KTsKQEAgLTIxMjQsMTQgKzIxMjUsMTQg
QEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25EZQogc2l6ZV90IEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uRGVsZXRlQnlJZChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRCYXNlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQogewogICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMp
OworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEpTT2JqZWN0KiBiYXNlT2Jq
ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNlKS50b09iamVjdChleGVjKTsKICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7CiAgICAgaWYgKCFiYXNlT2JqKQogICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgYm9vbCBjb3VsZERlbGV0ZSA9IGJhc2VPYmotPm1ldGhvZFRh
YmxlKHZtKS0+ZGVsZXRlUHJvcGVydHkoYmFzZU9iaiwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbVVp
ZCgmdm0sIHVpZCkpOworICAgIGJvb2wgY291bGREZWxldGUgPSBiYXNlT2JqLT5tZXRob2RUYWJs
ZSh2bSktPmRlbGV0ZVByb3BlcnR5KGJhc2VPYmosIGV4ZWMsIElkZW50aWZpZXI6OmZyb21VaWQo
dm0sIHVpZCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKICAgICBp
ZiAoIWNvdWxkRGVsZXRlICYmIGV4ZWMtPmNvZGVCbG9jaygpLT5pc1N0cmljdE1vZGUoKSkKICAg
ICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIFVuYWJsZVRvRGVsZXRlUHJvcGVydHlF
cnJvcik7CkBAIC0yMTQ2LDcgKzIxNDcsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvbkRlCiBzaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25EZWxldGVCeVZhbChF
eGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkS2V5KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKIAogICAgIEpTT2JqZWN0KiBiYXNlT2JqID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRC
YXNlKS50b09iamVjdChleGVjKTsKQEAgLTIxNzMsNyArMjE3NCw3IEBAIHNpemVfdCBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbkRlbGV0ZUJ5VmEKIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRp
b25QdXNoV2l0aFNjb3BlKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBjdXJyZW50U2NvcGVDZWxs
LCBFbmNvZGVkSlNWYWx1ZSBvYmplY3RWYWx1ZSkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgp
OwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBKU09iamVjdCogb2JqZWN0ID0gSlNWYWx1ZTo6
ZGVjb2RlKG9iamVjdFZhbHVlKS50b09iamVjdChleGVjKTsKQEAgLTIxODcsNyArMjE4OCw3IEBA
IEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXNoV2l0aFMKIEpTQ2VsbCogSklUX09Q
RVJBVElPTiBvcGVyYXRpb25QdXNoV2l0aFNjb3BlT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYywgSlND
ZWxsKiBjdXJyZW50U2NvcGVDZWxsLCBKU09iamVjdCogb2JqZWN0KQogewogICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMp
OworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIEpTU2Nv
cGUqIGN1cnJlbnRTY29wZSA9IGpzQ2FzdDxKU1Njb3BlKj4oY3VycmVudFNjb3BlQ2VsbCk7CiAg
ICAgcmV0dXJuIEpTV2l0aFNjb3BlOjpjcmVhdGUodm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmpl
Y3QoKSwgY3VycmVudFNjb3BlLCBvYmplY3QpOwogfQpAQCAtMjE5NSw3ICsyMTk2LDcgQEAgSlND
ZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1c2hXaXRoUwogRW5jb2RlZEpTVmFsdWUgSklU
X09QRVJBVElPTiBvcGVyYXRpb25JbnN0YW5jZU9mKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZFZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvdG8pCiB7CiAgICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2
bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAg
ICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIEpT
VmFsdWUgcHJvdG8gPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFByb3RvKTsKICAgICAKQEAgLTIy
MDYsNyArMjIwNyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSW4K
IEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSW5zdGFuY2VPZkdlbmVyaWMo
RXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFByb3RvKQogewogICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0s
IGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAg
IEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBKU1Zh
bHVlIHByb3RvID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRQcm90byk7CiAgICAgCkBAIC0yMjE5
LDcgKzIyMjAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkluCiBF
bmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6ZShF
eGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvdG8pCiB7CiAgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwg
ZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTVmFsdWUgdmFsdWUg
PSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBKU1ZhbHVlIHByb3RvID0gSlNW
YWx1ZTo6ZGVjb2RlKGVuY29kZWRQcm90byk7CkBAIC0yMjM2LDE0ICsyMjM3LDE0IEBAIEVuY29k
ZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSW4KIGludDMyX3QgSklUX09QRVJBVElP
TiBvcGVyYXRpb25TaXplRnJhbWVGb3JGb3J3YXJkQXJndW1lbnRzKEV4ZWNTdGF0ZSogZXhlYywg
RW5jb2RlZEpTVmFsdWUsIGludDMyX3QgbnVtVXNlZFN0YWNrU2xvdHMsIGludDMyX3QpCiB7CiAg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7
CiAgICAgcmV0dXJuIHNpemVGcmFtZUZvckZvcndhcmRBcmd1bWVudHMoZXhlYywgdm0sIG51bVVz
ZWRTdGFja1Nsb3RzKTsKIH0KIAogaW50MzJfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblNpemVG
cmFtZUZvclZhcmFyZ3MoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQXJn
dW1lbnRzLCBpbnQzMl90IG51bVVzZWRTdGFja1Nsb3RzLCBpbnQzMl90IGZpcnN0VmFyQXJnT2Zm
c2V0KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
dm0sIGV4ZWMpOwogICAgIEpTVmFsdWUgYXJndW1lbnRzID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRBcmd1bWVudHMpOwogICAgIHJldHVybiBzaXplRnJhbWVGb3JWYXJhcmdzKGV4ZWMsIHZtLCBh
cmd1bWVudHMsIG51bVVzZWRTdGFja1Nsb3RzLCBmaXJzdFZhckFyZ09mZnNldCk7CiB9CkBAIC0y
MjUxLDcgKzIyNTIsNyBAQCBpbnQzMl90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uU2l6ZUZyYW1l
CiBDYWxsRnJhbWUqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uU2V0dXBGb3J3YXJkQXJndW1lbnRz
RnJhbWUoRXhlY1N0YXRlKiBleGVjLCBDYWxsRnJhbWUqIG5ld0NhbGxGcmFtZSwgRW5jb2RlZEpT
VmFsdWUsIGludDMyX3QsIGludDMyX3QgbGVuZ3RoKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIHNldHVwRm9yd2FyZEFy
Z3VtZW50c0ZyYW1lKGV4ZWMsIG5ld0NhbGxGcmFtZSwgbGVuZ3RoKTsKICAgICByZXR1cm4gbmV3
Q2FsbEZyYW1lOwogfQpAQCAtMjI1OSw3ICsyMjYwLDcgQEAgQ2FsbEZyYW1lKiBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvblNldHVwRgogQ2FsbEZyYW1lKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblNl
dHVwVmFyYXJnc0ZyYW1lKEV4ZWNTdGF0ZSogZXhlYywgQ2FsbEZyYW1lKiBuZXdDYWxsRnJhbWUs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRBcmd1bWVudHMsIGludDMyX3QgZmlyc3RWYXJBcmdPZmZz
ZXQsIGludDMyX3QgbGVuZ3RoKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIEpTVmFsdWUgYXJndW1lbnRzID0gSlNWYWx1
ZTo6ZGVjb2RlKGVuY29kZWRBcmd1bWVudHMpOwogICAgIHNldHVwVmFyYXJnc0ZyYW1lKGV4ZWMs
IG5ld0NhbGxGcmFtZSwgYXJndW1lbnRzLCBmaXJzdFZhckFyZ09mZnNldCwgbGVuZ3RoKTsKICAg
ICByZXR1cm4gbmV3Q2FsbEZyYW1lOwpAQCAtMjI2OCw3ICsyMjY5LDcgQEAgQ2FsbEZyYW1lKiBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvblNldHVwVgogY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRp
b25Td2l0Y2hDaGFyV2l0aFVua25vd25LZXlUeXBlKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZEtleSwgc2l6ZV90IHRhYmxlSW5kZXgpCiB7CiAgICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7Cisg
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgSlNWYWx1ZSBr
ZXkgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEtleSk7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxv
Y2sgPSBleGVjLT5jb2RlQmxvY2soKTsKIApAQCAtMjI4OCw3ICsyMjg5LDcgQEAgY2hhciogSklU
X09QRVJBVElPTiBvcGVyYXRpb25Td2l0Y2hDaGFyVwogY2hhciogSklUX09QRVJBVElPTiBvcGVy
YXRpb25Td2l0Y2hJbW1XaXRoVW5rbm93bktleVR5cGUoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkS2V5LCBzaXplX3QgdGFibGVJbmRleCkKIHsKICAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsK
KyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICBKU1ZhbHVl
IGtleSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkS2V5KTsKICAgICBDb2RlQmxvY2sqIGNvZGVC
bG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOwogCkBAIC0yMzA3LDcgKzIzMDgsNyBAQCBjaGFyKiBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvblN3aXRjaEltbVdpCiBjaGFyKiBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvblN3aXRjaFN0cmluZ1dpdGhVbmtub3duS2V5VHlwZShFeGVjU3RhdGUqIGV4ZWMsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRLZXksIHNpemVfdCB0YWJsZUluZGV4KQogewogICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4
ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIEpT
VmFsdWUga2V5ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRLZXkpOwogICAgIENvZGVCbG9jayog
Y29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC0yMzMxLDcgKzIzMzIsNyBAQCBjaGFyKiBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvblN3aXRjaFN0cmluCiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvbkdldEZyb21TY29wZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEluc3RydWN0aW9u
KiBwYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRy
YWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KHZtLCBleGVjKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKIAogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7CkBAIC0y
MzcyLDcgKzIzNzMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdl
CiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0VG9TY29wZShFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IEluc3RydWN0aW9uKiBwYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+
Y29kZUJsb2NrKCk7CkBAIC0yNDI0LDkgKzI0MjUsOSBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uUHV0VG9TY29wZShFCiAKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25UaHJvdyhF
eGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRFeGNlcHRpb25WYWx1ZSkKIHsK
LSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwotICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwogCiAgICAgSlNWYWx1ZSBleGNlcHRpb25WYWx1ZSA9IEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkRXhjZXB0aW9uVmFsdWUpOwogICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHNj
b3BlLCBleGNlcHRpb25WYWx1ZSk7CkBAIC0yNDM4LDcgKzI0MzksNyBAQCB2b2lkIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uVGhyb3coRXhlY1N0CiBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
blJlYWxsb2NhdGVCdXR0ZXJmbHlUb0hhdmVQcm9wZXJ0eVN0b3JhZ2VXaXRoSW5pdGlhbENhcGFj
aXR5KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9iamVjdCkKIHsKICAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsK
KyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKIAogICAgIEFTU0VS
VCghb2JqZWN0LT5zdHJ1Y3R1cmUodm0pLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKICAgICBCdXR0
ZXJmbHkqIHJlc3VsdCA9IG9iamVjdC0+YWxsb2NhdGVNb3JlT3V0T2ZMaW5lU3RvcmFnZSh2bSwg
MCwgaW5pdGlhbE91dE9mTGluZUNhcGFjaXR5KTsKQEAgLTI0NDksNyArMjQ1MCw3IEBAIGNoYXIq
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUmVhbGxvY2F0ZUIKIGNoYXIqIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uUmVhbGxvY2F0ZUJ1dHRlcmZseVRvR3Jvd1Byb3BlcnR5U3RvcmFnZShFeGVjU3Rh
dGUqIGV4ZWMsIEpTT2JqZWN0KiBvYmplY3QsIHNpemVfdCBuZXdTaXplKQogewogICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4
ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogCiAgICAg
QnV0dGVyZmx5KiByZXN1bHQgPSBvYmplY3QtPmFsbG9jYXRlTW9yZU91dE9mTGluZVN0b3JhZ2Uo
dm0sIG9iamVjdC0+c3RydWN0dXJlKHZtKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgbmV3U2l6ZSk7
CiAgICAgb2JqZWN0LT5udWtlU3RydWN0dXJlQW5kU2V0QnV0dGVyZmx5KHZtLCBvYmplY3QtPnN0
cnVjdHVyZUlEKCksIHJlc3VsdCk7CkBAIC0yNDU4LDIzICsyNDU5LDI0IEBAIGNoYXIqIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uUmVhbGxvY2F0ZUIKIAogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbk9TUldyaXRlQmFycmllcihFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogY2VsbCkKIHsKLSAg
ICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwotICAgIHZtLT5oZWFwLndyaXRl
QmFycmllcihjZWxsKTsKKyAgICB2bS5oZWFwLndyaXRlQmFycmllcihjZWxsKTsKIH0KIAogdm9p
ZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbldyaXRlQmFycmllclNsb3dQYXRoKEV4ZWNTdGF0ZSog
ZXhlYywgSlNDZWxsKiBjZWxsKQogewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwg
ZXhlYyk7Ci0gICAgdm0tPmhlYXAud3JpdGVCYXJyaWVyU2xvd1BhdGgoY2VsbCk7CisgICAgdm0u
aGVhcC53cml0ZUJhcnJpZXJTbG93UGF0aChjZWxsKTsKIH0KIAotdm9pZCBKSVRfT1BFUkFUSU9O
IGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIoVk0qIHZtLCBFeGVjU3RhdGUqIGV4ZWMpCit2b2lkIEpJ
VF9PUEVSQVRJT04gbG9va3VwRXhjZXB0aW9uSGFuZGxlcihWTSogdm1Qb2ludGVyLCBFeGVjU3Rh
dGUqIGV4ZWMpCiB7CisgICAgVk0mIHZtID0gKnZtUG9pbnRlcjsKICAgICBOYXRpdmVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICBnZW5lcmljVW53aW5kKHZtLCBleGVjKTsK
LSAgICBBU1NFUlQodm0tPnRhcmdldE1hY2hpbmVQQ0ZvclRocm93KTsKKyAgICBBU1NFUlQodm0u
dGFyZ2V0TWFjaGluZVBDRm9yVGhyb3cpOwogfQogCiB2b2lkIEpJVF9PUEVSQVRJT04gbG9va3Vw
RXhjZXB0aW9uSGFuZGxlckZyb21DYWxsZXJGcmFtZShWTSogdm0sIEV4ZWNTdGF0ZSogZXhlYykK
QEAgLTI0ODYsNyArMjQ4OCw3IEBAIHZvaWQgSklUX09QRVJBVElPTiBsb29rdXBFeGNlcHRpb25I
YW5kbGUKIAogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZNSGFuZGxlRXhjZXB0aW9uKEV4
ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0g
PSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMp
OwogICAgIGdlbmVyaWNVbndpbmQodm0sIGV4ZWMpOwogfQpAQCAtMjQ5OCw5ICsyNTAwLDkgQEAg
dm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZNSGFuZGxlRXhjZQogLy8gdGVzdGluZy4KIHZv
aWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25FeGNlcHRpb25GdXp6KEV4ZWNTdGF0ZSogZXhlYykK
IHsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwog
ICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwotICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTShzY29wZSk7CiAjaWYgQ09NUElMRVIo
R0NDX0NPTVBBVElCTEUpCiAgICAgdm9pZCogcmV0dXJuUEMgPSBfX2J1aWx0aW5fcmV0dXJuX2Fk
ZHJlc3MoMCk7CkBAIC0yNTEwLDcgKzI1MTIsNyBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uRXhjZXB0aW9uRnV6CiAKIEFMV0FZU19JTkxJTkUgc3RhdGljIEVuY29kZWRKU1ZhbHVlIHVu
cHJvZmlsZWRBZGQoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKQogewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwor
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cih2bSwgZXhlYyk7CiAgICAgCiAgICAgSlNWYWx1ZSBvcDEgPSBKU1ZhbHVlOjpkZWNvZGUoZW5j
b2RlZE9wMSk7CkBAIC0yNTIxLDcgKzI1MjMsNyBAQCBBTFdBWVNfSU5MSU5FIHN0YXRpYyBFbmNv
ZGVkSlNWYWx1ZSB1bnByCiAKIEFMV0FZU19JTkxJTkUgc3RhdGljIEVuY29kZWRKU1ZhbHVlIHBy
b2ZpbGVkQWRkKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZE9wMiwgQXJpdGhQcm9maWxlJiBhcml0aFByb2ZpbGUpCiB7Ci0g
ICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICAKICAgICBKU1ZhbHVl
IG9wMSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AxKTsKQEAgLTI1NDcsNyArMjU0OSw3IEBA
IEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmEKIAogRW5jb2RlZEpTVmFs
dWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkT3B0aW1pemUoRXhlY1N0
YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkT3AyLCBKSVRBZGRJQyogYWRkSUMpCiB7Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Cisg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KHZtLCBleGVjKTsKICAgICAKICAgICBKU1ZhbHVlIG9wMSA9IEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkT3AxKTsKQEAgLTI1NzEsNyArMjU3Myw3IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uVmEKIAogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25W
YWx1ZUFkZFByb2ZpbGVkTm9PcHRpbWl6ZShFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIsIEpJVEFkZElDKiBhZGRJQykK
IHsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwog
ICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogCiAgICAgQXJpdGhQ
cm9maWxlKiBhcml0aFByb2ZpbGUgPSBhZGRJQy0+YXJpdGhQcm9maWxlKCk7CkBAIC0yNTgxLDcg
KzI1ODMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZhCiAKIEVu
Y29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmFsdWVBZGRPcHRpbWl6ZShFeGVj
U3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRPcDIsIEpJVEFkZElDKiBhZGRJQykKIHsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsK
KyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIodm0sIGV4ZWMpOwogCiAgICAgSlNWYWx1ZSBvcDEgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2Rl
ZE9wMSk7CkBAIC0yNjAxLDcgKzI2MDMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvblZhCiAKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmFs
dWVBZGROb09wdGltaXplKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9w
MSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMiwgSklUQWRkSUMqKQogewotICAgIFZNKiB2bSA9
ICZleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgCiAgICAgSlNWYWx1ZSBvcDEgPSBKU1Zh
bHVlOjpkZWNvZGUoZW5jb2RlZE9wMSk7CkBAIC0yNjM4LDcgKzI2NDAsNyBAQCBBTFdBWVNfSU5M
SU5FIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBwcm9mCiAKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uVmFsdWVNdWwoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKQogewotICAgIFZNKiB2bSA9ICZl
eGVjLT52bSgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAKICAgICByZXR1cm4gdW5wcm9maWxlZE11bChleGVj
LCBlbmNvZGVkT3AxLCBlbmNvZGVkT3AyKTsKQEAgLTI2NDYsNyArMjY0OCw3IEBAIEVuY29kZWRK
U1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmEKIAogRW5jb2RlZEpTVmFsdWUgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25WYWx1ZU11bE5vT3B0aW1pemUoRXhlY1N0YXRlKiBleGVjLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyLCBKSVRNdWxJ
QyopCiB7Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKIAogICAgIHJl
dHVybiB1bnByb2ZpbGVkTXVsKGV4ZWMsIGVuY29kZWRPcDEsIGVuY29kZWRPcDIpOwpAQCAtMjY1
NCw3ICsyNjU2LDcgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25WYQog
CiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZhbHVlTXVsT3B0aW1pemUo
RXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkT3AyLCBKSVRNdWxJQyogbXVsSUMpCiB7Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZt
KCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIg
dHJhY2VyKHZtLCBleGVjKTsKIAogICAgIGF1dG8gbm9uT3B0aW1pemVWYXJpYW50ID0gb3BlcmF0
aW9uVmFsdWVNdWxOb09wdGltaXplOwpAQCAtMjY3MSw3ICsyNjczLDcgQEAgRW5jb2RlZEpTVmFs
dWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25WYQogCiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvblZhbHVlTXVsUHJvZmlsZWQoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyLCBBcml0aFByb2ZpbGUq
IGFyaXRoUHJvZmlsZSkKIHsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0g
PSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMp
OwogCiAgICAgQVNTRVJUKGFyaXRoUHJvZmlsZSk7CkBAIC0yNjgwLDcgKzI2ODIsNyBAQCBFbmNv
ZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZhCiAKIEVuY29kZWRKU1ZhbHVlIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uVmFsdWVNdWxQcm9maWxlZE9wdGltaXplKEV4ZWNTdGF0ZSog
ZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9w
MiwgSklUTXVsSUMqIG11bElDKQogewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwg
ZXhlYyk7CiAKICAgICBBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG11bElDLT5hcml0aFBy
b2ZpbGUoKTsKQEAgLTI2OTgsNyArMjcwMCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uVmEKIAogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25W
YWx1ZU11bFByb2ZpbGVkTm9PcHRpbWl6ZShFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIsIEpJVE11bElDKiBtdWxJQykK
IHsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwog
ICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogCiAgICAgQXJpdGhQ
cm9maWxlKiBhcml0aFByb2ZpbGUgPSBtdWxJQy0+YXJpdGhQcm9maWxlKCk7CkBAIC0yNzEwLDcg
KzI3MTIsNyBAQCBBTFdBWVNfSU5MSU5FIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSB1bnByCiB7CiAg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwor
ICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIAogICAgIEpT
VmFsdWUgb3BlcmFuZCA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3BlcmFuZCk7CiAgICAgCkBA
IC0yNzI5LDcgKzI3MzEsNyBAQCBBTFdBWVNfSU5MSU5FIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBw
cm9mCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0s
IGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogCiAg
ICAgSlNWYWx1ZSBvcGVyYW5kID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcGVyYW5kKTsKICAg
ICBhcml0aFByb2ZpbGUub2JzZXJ2ZUxIUyhvcGVyYW5kKTsKQEAgLTI3NjYsNyArMjc2OCw3IEBA
IEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXIKIHsKICAgICBWTSYgdm0g
PSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
LSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZl
Q2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgCiAgICAgSlNWYWx1ZSBvcGVy
YW5kID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcGVyYW5kKTsKIApAQCAtMjc5OSw3ICsyODAx
LDcgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25BcgogewogICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKIAogICAgIEpTVmFsdWUgb3Bl
cmFuZCA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3BlcmFuZCk7CiAKQEAgLTI4NDgsNyArMjg1
MCw3IEBAIEFMV0FZU19JTkxJTkUgc3RhdGljIEVuY29kZWRKU1ZhbHVlIHByb2YKIAogRW5jb2Rl
ZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25WYWx1ZVN1YihFeGVjU3RhdGUqIGV4ZWMs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpCiB7
Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICByZXR1cm4gdW5w
cm9maWxlZFN1YihleGVjLCBlbmNvZGVkT3AxLCBlbmNvZGVkT3AyKTsKIH0KQEAgLTI4NTcsMTUg
KzI4NTksMTUgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25WYQogewog
ICAgIEFTU0VSVChhcml0aFByb2ZpbGUpOwogCi0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Cisg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KHZtLCBleGVjKTsKIAotICAgIHJldHVybiBwcm9maWxlZFN1Yigqdm0sIGV4ZWMsIGVuY29kZWRP
cDEsIGVuY29kZWRPcDIsICphcml0aFByb2ZpbGUpOworICAgIHJldHVybiBwcm9maWxlZFN1Yih2
bSwgZXhlYywgZW5jb2RlZE9wMSwgZW5jb2RlZE9wMiwgKmFyaXRoUHJvZmlsZSk7CiB9CiAKIEVu
Y29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmFsdWVTdWJPcHRpbWl6ZShFeGVj
U3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRPcDIsIEpJVFN1YklDKiBzdWJJQykKIHsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsK
KyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIodm0sIGV4ZWMpOwogCiAgICAgYXV0byBub25PcHRpbWl6ZVZhcmlhbnQgPSBvcGVyYXRpb25W
YWx1ZVN1Yk5vT3B0aW1pemU7CkBAIC0yODgyLDcgKzI4ODQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvblZhCiAKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uVmFsdWVTdWJOb09wdGltaXplKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMiwgSklUU3ViSUMqKQogewot
ICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAKICAgICByZXR1cm4gdW5w
cm9maWxlZFN1YihleGVjLCBlbmNvZGVkT3AxLCBlbmNvZGVkT3AyKTsKQEAgLTI4OTAsNyArMjg5
Miw3IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmEKIAogRW5jb2Rl
ZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25WYWx1ZVN1YlByb2ZpbGVkT3B0aW1pemUo
RXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkT3AyLCBKSVRTdWJJQyogc3ViSUMpCiB7Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZt
KCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIg
dHJhY2VyKHZtLCBleGVjKTsKIAogICAgIEFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gc3Vi
SUMtPmFyaXRoUHJvZmlsZSgpOwpAQCAtMjkwMywzMCArMjkwNSwzMCBAQCBFbmNvZGVkSlNWYWx1
ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZhCiAgICAgZXhlYy0+Y29kZUJsb2NrKCktPmR1bXBN
YXRoSUNTdGF0cygpOwogI2VuZGlmCiAKLSAgICByZXR1cm4gcHJvZmlsZWRTdWIoKnZtLCBleGVj
LCBlbmNvZGVkT3AxLCBlbmNvZGVkT3AyLCAqYXJpdGhQcm9maWxlLCBmYWxzZSk7CisgICAgcmV0
dXJuIHByb2ZpbGVkU3ViKHZtLCBleGVjLCBlbmNvZGVkT3AxLCBlbmNvZGVkT3AyLCAqYXJpdGhQ
cm9maWxlLCBmYWxzZSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uVmFsdWVTdWJQcm9maWxlZE5vT3B0aW1pemUoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyLCBKSVRTdWJJQyogc3Vi
SUMpCiB7Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKIAogICAgIEFy
aXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gc3ViSUMtPmFyaXRoUHJvZmlsZSgpOwogICAgIEFT
U0VSVChhcml0aFByb2ZpbGUpOwotICAgIHJldHVybiBwcm9maWxlZFN1Yigqdm0sIGV4ZWMsIGVu
Y29kZWRPcDEsIGVuY29kZWRPcDIsICphcml0aFByb2ZpbGUpOworICAgIHJldHVybiBwcm9maWxl
ZFN1Yih2bSwgZXhlYywgZW5jb2RlZE9wMSwgZW5jb2RlZE9wMiwgKmFyaXRoUHJvZmlsZSk7CiB9
CiAKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25Qcm9jZXNzVHlwZVByb2ZpbGVyTG9nKEV4
ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFj
ZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICB2bS50eXBlUHJvZmlsZXJMb2coKS0+cHJvY2Vzc0xv
Z0VudHJpZXModm0sICJMb2cgRnVsbCwgY2FsbGVkIGZyb20gaW5zaWRlIGJhc2VsaW5lIEpJVCJf
cyk7CiB9CiAKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25Qcm9jZXNzU2hhZG93Q2hpY2tl
bkxvZyhFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgUkVMRUFTRV9BU1NFUlQodm0uc2hhZG93
Q2hpY2tlbigpKTsKICAgICB2bS5zaGFkb3dDaGlja2VuKCktPnVwZGF0ZSh2bSwgZXhlYyk7CiB9
CkBAIC0yOTM0LDEyICsyOTM2LDEyIEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25Qcm9j
ZXNzU2hhZG8KIGludDMyX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25DaGVja0lmRXhjZXB0aW9u
SXNVbmNhdGNoYWJsZUFuZE5vdGlmeVByb2ZpbGVyKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBW
TSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZt
LCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgUkVMRUFTRV9BU1NF
UlQoISFzY29wZS5leGNlcHRpb24oKSk7CiAKICAgICBpZiAoaXNUZXJtaW5hdGVkRXhlY3V0aW9u
RXhjZXB0aW9uKHZtLCBzY29wZS5leGNlcHRpb24oKSkpIHsKLSAgICAgICAgZ2VuZXJpY1Vud2lu
ZCgmdm0sIGV4ZWMpOworICAgICAgICBnZW5lcmljVW53aW5kKHZtLCBleGVjKTsKICAgICAgICAg
cmV0dXJuIDE7CiAgICAgfQogICAgIHJldHVybiAwOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMjEyLDcgKzEyMTIsNyBAQCB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcih1
bnNpZ25lZCBvd25lCiAgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlIHx8
IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZSkKICAgICAgICAgb3duZXJOb3RDZWxsID0gYnJhbmNo
SWZOb3RDZWxsKHJlZ1QwKTsKIAotICAgIEp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9
IGJhcnJpZXJCcmFuY2goKnZtKCksIHJlZ1QwLCByZWdUMSk7CisgICAgSnVtcCBvd25lcklzUmVt
ZW1iZXJlZE9ySW5FZGVuID0gYmFycmllckJyYW5jaCh2bSgpLCByZWdUMCwgcmVnVDEpOwogICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uV3JpdGVCYXJyaWVyU2xvd1BhdGgsIHJlZ1QwKTsKICAg
ICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuLmxpbmsodGhpcyk7CiAKQEAgLTEyNzgsNyArMTI3
OCw3IEBAIHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIKIAogdm9pZCBK
SVQ6OmVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lcikKIHsKLSAgICBKdW1wIG93bmVySXNS
ZW1lbWJlcmVkT3JJbkVkZW4gPSBiYXJyaWVyQnJhbmNoKCp2bSgpLCBvd25lciwgcmVnVDApOwor
ICAgIEp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IGJhcnJpZXJCcmFuY2godm0oKSwg
b3duZXIsIHJlZ1QwKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbldyaXRlQmFycmllclNs
b3dQYXRoLCBvd25lcik7CiAgICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5saW5rKHRoaXMp
OwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRUaHVua3MuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUVGh1bmtzLmNwcAkocmV2aXNp
b24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRUaHVua3MuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0y
MDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
Mi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtNDUsNDMgKzQ1LDQzIEBAIEpJVFRodW5rczo6fkpJVFRodW5rcygp
CiB7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRUaHVua1B0clRhZz4gSklUVGh1bmtz
OjpjdGlOYXRpdmVDYWxsKFZNKiB2bSkKK01hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRUaHVua1B0
clRhZz4gSklUVGh1bmtzOjpjdGlOYXRpdmVDYWxsKFZNJiB2bSkKIHsKICAgICBBU1NFUlQoVk06
OmNhblVzZUpJVCgpKTsKICAgICByZXR1cm4gY3RpU3R1Yih2bSwgbmF0aXZlQ2FsbEdlbmVyYXRv
cikuY29kZSgpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+IEpJ
VFRodW5rczo6Y3RpTmF0aXZlQ29uc3RydWN0KFZNKiB2bSkKK01hY3JvQXNzZW1ibGVyQ29kZVB0
cjxKSVRUaHVua1B0clRhZz4gSklUVGh1bmtzOjpjdGlOYXRpdmVDb25zdHJ1Y3QoVk0mIHZtKQog
ewogICAgIEFTU0VSVChWTTo6Y2FuVXNlSklUKCkpOwogICAgIHJldHVybiBjdGlTdHViKHZtLCBu
YXRpdmVDb25zdHJ1Y3RHZW5lcmF0b3IpLmNvZGUoKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyPEpJVFRodW5rUHRyVGFnPiBKSVRUaHVua3M6OmN0aU5hdGl2ZVRhaWxDYWxsKFZNKiB2bSkK
K01hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRUaHVua1B0clRhZz4gSklUVGh1bmtzOjpjdGlOYXRp
dmVUYWlsQ2FsbChWTSYgdm0pCiB7CiAgICAgQVNTRVJUKFZNOjpjYW5Vc2VKSVQoKSk7CiAgICAg
cmV0dXJuIGN0aVN0dWIodm0sIG5hdGl2ZVRhaWxDYWxsR2VuZXJhdG9yKS5jb2RlKCk7CiB9CiAK
LU1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRUaHVua1B0clRhZz4gSklUVGh1bmtzOjpjdGlOYXRp
dmVUYWlsQ2FsbFdpdGhvdXRTYXZlZFRhZ3MoVk0qIHZtKQorTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
PEpJVFRodW5rUHRyVGFnPiBKSVRUaHVua3M6OmN0aU5hdGl2ZVRhaWxDYWxsV2l0aG91dFNhdmVk
VGFncyhWTSYgdm0pCiB7CiAgICAgQVNTRVJUKFZNOjpjYW5Vc2VKSVQoKSk7CiAgICAgcmV0dXJu
IGN0aVN0dWIodm0sIG5hdGl2ZVRhaWxDYWxsV2l0aG91dFNhdmVkVGFnc0dlbmVyYXRvcikuY29k
ZSgpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+IEpJVFRodW5r
czo6Y3RpSW50ZXJuYWxGdW5jdGlvbkNhbGwoVk0qIHZtKQorTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
PEpJVFRodW5rUHRyVGFnPiBKSVRUaHVua3M6OmN0aUludGVybmFsRnVuY3Rpb25DYWxsKFZNJiB2
bSkKIHsKICAgICBBU1NFUlQoVk06OmNhblVzZUpJVCgpKTsKICAgICByZXR1cm4gY3RpU3R1Yih2
bSwgaW50ZXJuYWxGdW5jdGlvbkNhbGxHZW5lcmF0b3IpLmNvZGUoKTsKIH0KIAotTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFnPiBKSVRUaHVua3M6OmN0aUludGVybmFsRnVuY3Rp
b25Db25zdHJ1Y3QoVk0qIHZtKQorTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFn
PiBKSVRUaHVua3M6OmN0aUludGVybmFsRnVuY3Rpb25Db25zdHJ1Y3QoVk0mIHZtKQogewogICAg
IEFTU0VSVChWTTo6Y2FuVXNlSklUKCkpOwogICAgIHJldHVybiBjdGlTdHViKHZtLCBpbnRlcm5h
bEZ1bmN0aW9uQ29uc3RydWN0R2VuZXJhdG9yKS5jb2RlKCk7CiB9CiAKLU1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUVGh1bmtzOjpjdGlTdHViKFZNKiB2bSwgVGh1bmtH
ZW5lcmF0b3IgZ2VuZXJhdG9yKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiBKSVRUaHVua3M6OmN0aVN0dWIoVk0mIHZtLCBUaHVua0dlbmVyYXRvciBnZW5lcmF0b3IpCiB7
CiAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9sb2NrKTsKICAgICBDVElTdHViTWFwOjpBZGRSZXN1
bHQgZW50cnkgPSBtX2N0aVN0dWJNYXAuYWRkKGdlbmVyYXRvciwgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPigpKTsKQEAgLTEwOCwxMiArMTA4LDEyIEBAIHZvaWQgSklUVGh1
bmtzOjpmaW5hbGl6ZShIYW5kbGU8VW5rbm93bj4KICAgICB3ZWFrUmVtb3ZlKCptX2hvc3RGdW5j
dGlvblN0dWJNYXAsIHN0ZDo6bWFrZV90dXBsZShuYXRpdmVFeGVjdXRhYmxlLT5mdW5jdGlvbigp
LCBuYXRpdmVFeGVjdXRhYmxlLT5jb25zdHJ1Y3RvcigpLCBuYXRpdmVFeGVjdXRhYmxlLT5uYW1l
KCkpLCBuYXRpdmVFeGVjdXRhYmxlKTsKIH0KIAotTmF0aXZlRXhlY3V0YWJsZSogSklUVGh1bmtz
Ojpob3N0RnVuY3Rpb25TdHViKFZNKiB2bSwgVGFnZ2VkTmF0aXZlRnVuY3Rpb24gZnVuY3Rpb24s
IFRhZ2dlZE5hdGl2ZUZ1bmN0aW9uIGNvbnN0cnVjdG9yLCBjb25zdCBTdHJpbmcmIG5hbWUpCitO
YXRpdmVFeGVjdXRhYmxlKiBKSVRUaHVua3M6Omhvc3RGdW5jdGlvblN0dWIoVk0mIHZtLCBUYWdn
ZWROYXRpdmVGdW5jdGlvbiBmdW5jdGlvbiwgVGFnZ2VkTmF0aXZlRnVuY3Rpb24gY29uc3RydWN0
b3IsIGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKICAgICByZXR1cm4gaG9zdEZ1bmN0aW9uU3R1Yih2
bSwgZnVuY3Rpb24sIGNvbnN0cnVjdG9yLCBudWxscHRyLCBOb0ludHJpbnNpYywgbnVsbHB0ciwg
bmFtZSk7CiB9CiAKLU5hdGl2ZUV4ZWN1dGFibGUqIEpJVFRodW5rczo6aG9zdEZ1bmN0aW9uU3R1
YihWTSogdm0sIFRhZ2dlZE5hdGl2ZUZ1bmN0aW9uIGZ1bmN0aW9uLCBUYWdnZWROYXRpdmVGdW5j
dGlvbiBjb25zdHJ1Y3RvciwgVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yLCBJbnRyaW5zaWMgaW50
cmluc2ljLCBjb25zdCBET01KSVQ6OlNpZ25hdHVyZSogc2lnbmF0dXJlLCBjb25zdCBTdHJpbmcm
IG5hbWUpCitOYXRpdmVFeGVjdXRhYmxlKiBKSVRUaHVua3M6Omhvc3RGdW5jdGlvblN0dWIoVk0m
IHZtLCBUYWdnZWROYXRpdmVGdW5jdGlvbiBmdW5jdGlvbiwgVGFnZ2VkTmF0aXZlRnVuY3Rpb24g
Y29uc3RydWN0b3IsIFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvciwgSW50cmluc2ljIGludHJpbnNp
YywgY29uc3QgRE9NSklUOjpTaWduYXR1cmUqIHNpZ25hdHVyZSwgY29uc3QgU3RyaW5nJiBuYW1l
KQogewogICAgIEFTU0VSVCghaXNDb21waWxhdGlvblRocmVhZCgpKTsgICAgCiAgICAgQVNTRVJU
KFZNOjpjYW5Vc2VKSVQoKSk7CkBAIC0xMzIsMTIgKzEzMiwxMiBAQCBOYXRpdmVFeGVjdXRhYmxl
KiBKSVRUaHVua3M6Omhvc3RGdW5jdGlvCiAgICAgCiAgICAgUmVmPEpJVENvZGU+IGZvckNvbnN0
cnVjdCA9IGFkb3B0UmVmKCpuZXcgTmF0aXZlSklUQ29kZShNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SlNFbnRyeVB0clRhZz46OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihjdGlOYXRpdmVDb25zdHJ1
Y3Qodm0pLnJldGFnZ2VkPEpTRW50cnlQdHJUYWc+KCkpLCBKSVRUeXBlOjpIb3N0Q2FsbFRodW5r
LCBOb0ludHJpbnNpYykpOwogICAgIAotICAgIE5hdGl2ZUV4ZWN1dGFibGUqIG5hdGl2ZUV4ZWN1
dGFibGUgPSBOYXRpdmVFeGVjdXRhYmxlOjpjcmVhdGUoKnZtLCBmb3JDYWxsLnJlbGVhc2VOb25O
dWxsKCksIGZ1bmN0aW9uLCBXVEZNb3ZlKGZvckNvbnN0cnVjdCksIGNvbnN0cnVjdG9yLCBuYW1l
KTsKKyAgICBOYXRpdmVFeGVjdXRhYmxlKiBuYXRpdmVFeGVjdXRhYmxlID0gTmF0aXZlRXhlY3V0
YWJsZTo6Y3JlYXRlKHZtLCBmb3JDYWxsLnJlbGVhc2VOb25OdWxsKCksIGZ1bmN0aW9uLCBXVEZN
b3ZlKGZvckNvbnN0cnVjdCksIGNvbnN0cnVjdG9yLCBuYW1lKTsKICAgICB3ZWFrQWRkKCptX2hv
c3RGdW5jdGlvblN0dWJNYXAsIHN0ZDo6bWFrZV90dXBsZShmdW5jdGlvbiwgY29uc3RydWN0b3Is
IG5hbWUpLCBXZWFrPE5hdGl2ZUV4ZWN1dGFibGU+KG5hdGl2ZUV4ZWN1dGFibGUsIHRoaXMpKTsK
ICAgICByZXR1cm4gbmF0aXZlRXhlY3V0YWJsZTsKIH0KIAotTmF0aXZlRXhlY3V0YWJsZSogSklU
VGh1bmtzOjpob3N0RnVuY3Rpb25TdHViKFZNKiB2bSwgVGFnZ2VkTmF0aXZlRnVuY3Rpb24gZnVu
Y3Rpb24sIFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvciwgSW50cmluc2ljIGludHJpbnNpYywgY29u
c3QgU3RyaW5nJiBuYW1lKQorTmF0aXZlRXhlY3V0YWJsZSogSklUVGh1bmtzOjpob3N0RnVuY3Rp
b25TdHViKFZNJiB2bSwgVGFnZ2VkTmF0aXZlRnVuY3Rpb24gZnVuY3Rpb24sIFRodW5rR2VuZXJh
dG9yIGdlbmVyYXRvciwgSW50cmluc2ljIGludHJpbnNpYywgY29uc3QgU3RyaW5nJiBuYW1lKQog
ewogICAgIHJldHVybiBob3N0RnVuY3Rpb25TdHViKHZtLCBmdW5jdGlvbiwgY2FsbEhvc3RGdW5j
dGlvbkFzQ29uc3RydWN0b3IsIGdlbmVyYXRvciwgaW50cmluc2ljLCBudWxscHRyLCBuYW1lKTsK
IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUVGh1bmtzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRUaHVua3MuaAkocmV2aXNpb24gMjQ5
MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRUaHVua3MuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTUxLDE5ICs1MSwxOSBAQCBwdWJsaWM6CiAgICAgSklUVGh1bmtzKCk7CiAgICAg
dmlydHVhbCB+SklUVGh1bmtzKCk7CiAKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUVGh1
bmtQdHJUYWc+IGN0aU5hdGl2ZUNhbGwoVk0qKTsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8
SklUVGh1bmtQdHJUYWc+IGN0aU5hdGl2ZUNvbnN0cnVjdChWTSopOwotICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVB0cjxKSVRUaHVua1B0clRhZz4gY3RpTmF0aXZlVGFpbENhbGwoVk0qKTsKLSAgICBN
YWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+IGN0aU5hdGl2ZVRhaWxDYWxsV2l0
aG91dFNhdmVkVGFncyhWTSopOwotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRUaHVua1B0
clRhZz4gY3RpSW50ZXJuYWxGdW5jdGlvbkNhbGwoVk0qKTsKLSAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHI8SklUVGh1bmtQdHJUYWc+IGN0aUludGVybmFsRnVuY3Rpb25Db25zdHJ1Y3QoVk0qKTsK
KyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+IGN0aU5hdGl2ZUNhbGwo
Vk0mKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+IGN0aU5hdGl2
ZUNvbnN0cnVjdChWTSYpOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRUaHVua1B0clRh
Zz4gY3RpTmF0aXZlVGFpbENhbGwoVk0mKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklU
VGh1bmtQdHJUYWc+IGN0aU5hdGl2ZVRhaWxDYWxsV2l0aG91dFNhdmVkVGFncyhWTSYpOworICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRUaHVua1B0clRhZz4gY3RpSW50ZXJuYWxGdW5jdGlv
bkNhbGwoVk0mKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+IGN0
aUludGVybmFsRnVuY3Rpb25Db25zdHJ1Y3QoVk0mKTsKIAotICAgIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gY3RpU3R1YihWTSosIFRodW5rR2VuZXJhdG9yKTsKKyAgICBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGN0aVN0dWIoVk0mLCBUaHVua0dl
bmVyYXRvcik7CiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBleGlz
dGluZ0NUSVN0dWIoVGh1bmtHZW5lcmF0b3IpOwogCi0gICAgTmF0aXZlRXhlY3V0YWJsZSogaG9z
dEZ1bmN0aW9uU3R1YihWTSosIFRhZ2dlZE5hdGl2ZUZ1bmN0aW9uLCBUYWdnZWROYXRpdmVGdW5j
dGlvbiBjb25zdHJ1Y3RvciwgY29uc3QgU3RyaW5nJiBuYW1lKTsKLSAgICBOYXRpdmVFeGVjdXRh
YmxlKiBob3N0RnVuY3Rpb25TdHViKFZNKiwgVGFnZ2VkTmF0aXZlRnVuY3Rpb24sIFRhZ2dlZE5h
dGl2ZUZ1bmN0aW9uIGNvbnN0cnVjdG9yLCBUaHVua0dlbmVyYXRvciwgSW50cmluc2ljLCBjb25z
dCBET01KSVQ6OlNpZ25hdHVyZSosIGNvbnN0IFN0cmluZyYgbmFtZSk7Ci0gICAgTmF0aXZlRXhl
Y3V0YWJsZSogaG9zdEZ1bmN0aW9uU3R1YihWTSosIFRhZ2dlZE5hdGl2ZUZ1bmN0aW9uLCBUaHVu
a0dlbmVyYXRvciwgSW50cmluc2ljLCBjb25zdCBTdHJpbmcmIG5hbWUpOworICAgIE5hdGl2ZUV4
ZWN1dGFibGUqIGhvc3RGdW5jdGlvblN0dWIoVk0mLCBUYWdnZWROYXRpdmVGdW5jdGlvbiwgVGFn
Z2VkTmF0aXZlRnVuY3Rpb24gY29uc3RydWN0b3IsIGNvbnN0IFN0cmluZyYgbmFtZSk7CisgICAg
TmF0aXZlRXhlY3V0YWJsZSogaG9zdEZ1bmN0aW9uU3R1YihWTSYsIFRhZ2dlZE5hdGl2ZUZ1bmN0
aW9uLCBUYWdnZWROYXRpdmVGdW5jdGlvbiBjb25zdHJ1Y3RvciwgVGh1bmtHZW5lcmF0b3IsIElu
dHJpbnNpYywgY29uc3QgRE9NSklUOjpTaWduYXR1cmUqLCBjb25zdCBTdHJpbmcmIG5hbWUpOwor
ICAgIE5hdGl2ZUV4ZWN1dGFibGUqIGhvc3RGdW5jdGlvblN0dWIoVk0mLCBUYWdnZWROYXRpdmVG
dW5jdGlvbiwgVGh1bmtHZW5lcmF0b3IsIEludHJpbnNpYywgY29uc3QgU3RyaW5nJiBuYW1lKTsK
IAogICAgIHZvaWQgY2xlYXJIb3N0RnVuY3Rpb25TdHVicygpOwogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFdvcmtsaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFdvcmtsaXN0LmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRXb3JrbGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzUs
NyArNzUsNyBAQCBwdWJsaWM6CiAgICAgfQogICAgIAogICAgIENvZGVCbG9jayogY29kZUJsb2Nr
KCkgeyByZXR1cm4gbV9jb2RlQmxvY2s7IH0KLSAgICBWTSogdm0oKSB7IHJldHVybiBtX2NvZGVC
bG9jay0+dm0oKTsgfQorICAgIFZNJiB2bSgpIHsgcmV0dXJuIG1fY29kZUJsb2NrLT52bSgpOyB9
CiAgICAgCiAgICAgYm9vbCBpc0ZpbmlzaGVkQ29tcGlsaW5nKCkKICAgICB7CkBAIC0xNzksNyAr
MTc5LDcgQEAgYm9vbCBKSVRXb3JrbGlzdDo6Y29tcGxldGVBbGxGb3JWTShWTSYgdgogICAgICAg
ICAgICAgICAgIGJvb2wgZGlkRmluZFVuZmluaXNoZWRQbGFuID0gZmFsc2U7CiAgICAgICAgICAg
ICAgICAgbV9wbGFucy5yZW1vdmVBbGxNYXRjaGluZygKICAgICAgICAgICAgICAgICAgICAgWyZd
IChSZWZQdHI8UGxhbj4mIHBsYW4pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwbGFu
LT52bSgpICE9ICZ2bSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgmcGxhbi0+dm0oKSAh
PSAmdm0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCFwbGFuLT5pc0ZpbmlzaGVkQ29tcGlsaW5nKCkpIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBkaWRGaW5kVW5maW5pc2hlZFBsYW4gPSB0cnVlOwpA
QCAtMjE2LDcgKzIxNiw3IEBAIHZvaWQgSklUV29ya2xpc3Q6OnBvbGwoVk0mIHZtKQogICAgICAg
ICBMb2NrSG9sZGVyIGxvY2tlcigqbV9sb2NrKTsKICAgICAgICAgbV9wbGFucy5yZW1vdmVBbGxN
YXRjaGluZygKICAgICAgICAgICAgIFsmXSAoUmVmUHRyPFBsYW4+JiBwbGFuKSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKHBsYW4tPnZtKCkgIT0gJnZtKQorICAgICAgICAgICAgICAgIGlmICgmcGxh
bi0+dm0oKSAhPSAmdm0pCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgICAgICAgICBpZiAoIXBsYW4tPmlzRmluaXNoZWRDb21waWxpbmcoKSkKICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjMwLDcgKzIzMCw3IEBAIHZvaWQgSklUV29ya2xp
c3Q6OnBvbGwoVk0mIHZtKQogCiB2b2lkIEpJVFdvcmtsaXN0Ojpjb21waWxlTGF0ZXIoQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIHVuc2lnbmVkIGxvb3BPU1JFbnRyeUJ5dGVjb2RlT2Zmc2V0KQogewot
ICAgIERlZmVyR0MgZGVmZXJHQyhjb2RlQmxvY2stPnZtKCktPmhlYXApOworICAgIERlZmVyR0Mg
ZGVmZXJHQyhjb2RlQmxvY2stPnZtKCkuaGVhcCk7CiAgICAgUkVMRUFTRV9BU1NFUlQoY29kZUJs
b2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuayk7CiAgICAgCiAgICAg
aWYgKGNvZGVCbG9jay0+bV9kaWRGYWlsSklUQ29tcGlsYXRpb24pIHsKQEAgLTI4Miw4ICsyODIs
OCBAQCB2b2lkIEpJVFdvcmtsaXN0Ojpjb21waWxlTGF0ZXIoQ29kZUJsb2NrCiAKIHZvaWQgSklU
V29ya2xpc3Q6OmNvbXBpbGVOb3coQ29kZUJsb2NrKiBjb2RlQmxvY2ssIHVuc2lnbmVkIGxvb3BP
U1JFbnRyeUJ5dGVjb2RlT2Zmc2V0KQogewotICAgIFZNKiB2bSA9IGNvZGVCbG9jay0+dm0oKTsK
LSAgICBEZWZlckdDIGRlZmVyR0Modm0tPmhlYXApOworICAgIFZNJiB2bSA9IGNvZGVCbG9jay0+
dm0oKTsKKyAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CiAgICAgaWYgKGNvZGVCbG9jay0+
aml0VHlwZSgpICE9IEpJVFR5cGU6OkludGVycHJldGVyVGh1bmspCiAgICAgICAgIHJldHVybjsK
ICAgICAKQEAgLTI5Niw3ICsyOTYsNyBAQCB2b2lkIEpJVFdvcmtsaXN0Ojpjb21waWxlTm93KENv
ZGVCbG9jayogCiAgICAgaWYgKGlzUGxhbm5lZCkgewogICAgICAgICBSRUxFQVNFX0FTU0VSVChP
cHRpb25zOjp1c2VDb25jdXJyZW50SklUKCkpOwogICAgICAgICAvLyBUaGlzIGlzIGV4cGVuc2l2
ZSwgYnV0IHByb2JhYmx5IGdvb2QgZW5vdWdoLgotICAgICAgICBjb21wbGV0ZUFsbEZvclZNKCp2
bSk7CisgICAgICAgIGNvbXBsZXRlQWxsRm9yVk0odm0pOwogICAgIH0KICAgICAKICAgICAvLyBO
b3cgaXQgbWlnaHQgYmUgY29tcGlsZWQhCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1JlcGF0Y2guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVw
YXRjaC5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
UmVwYXRjaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc3LDcgKzc3LDcgQEAgc3RhdGljIEZ1bmN0
aW9uUHRyPENGdW5jdGlvblB0clRhZz4gcmVhZAogI2lmIEVOQUJMRShGVExfSklUKQogICAgIGlm
IChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpGVExKSVQpIHsKICAgICAgICAgTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFnPiB0aHVuayA9IE1hY3JvQXNzZW1ibGVy
Q29kZVB0cjxPcGVyYXRpb25QdHJUYWc+OjpjcmVhdGVGcm9tRXhlY3V0YWJsZUFkZHJlc3ModGFy
Z2V0LmV4ZWN1dGFibGVBZGRyZXNzKCkpLnJldGFnZ2VkPEpJVFRodW5rUHRyVGFnPigpOwotICAg
ICAgICByZXR1cm4gY29kZUJsb2NrLT52bSgpLT5mdGxUaHVua3MtPmtleUZvclNsb3dQYXRoQ2Fs
bFRodW5rKHRodW5rKS5jYWxsVGFyZ2V0KCkucmV0YWdnZWQ8Q0Z1bmN0aW9uUHRyVGFnPigpOwor
ICAgICAgICByZXR1cm4gY29kZUJsb2NrLT52bSgpLmZ0bFRodW5rcy0+a2V5Rm9yU2xvd1BhdGhD
YWxsVGh1bmsodGh1bmspLmNhbGxUYXJnZXQoKS5yZXRhZ2dlZDxDRnVuY3Rpb25QdHJUYWc+KCk7
CiAgICAgfQogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oY29kZUJsb2NrKTsKQEAgLTg5LDcgKzg5
LDcgQEAgdm9pZCBmdGxUaHVua0F3YXJlUmVwYXRjaENhbGwoQ29kZUJsb2NrKgogewogI2lmIEVO
QUJMRShGVExfSklUKQogICAgIGlmIChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpG
VExKSVQpIHsKLSAgICAgICAgVk0mIHZtID0gKmNvZGVCbG9jay0+dm0oKTsKKyAgICAgICAgVk0m
IHZtID0gY29kZUJsb2NrLT52bSgpOwogICAgICAgICBGVEw6OlRodW5rcyYgdGh1bmtzID0gKnZt
LmZ0bFRodW5rczsKICAgICAgICAgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPiB0YXJnZXQg
PSBNYWNyb0Fzc2VtYmxlcjo6cmVhZENhbGxUYXJnZXQ8T3BlcmF0aW9uUHRyVGFnPihjYWxsKTsK
ICAgICAgICAgYXV0byBzbG93UGF0aFRodW5rID0gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFRo
dW5rUHRyVGFnPjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKHRhcmdldC5yZXRhZ2dlZEV4
ZWN1dGFibGVBZGRyZXNzPEpJVFRodW5rUHRyVGFnPigpKTsKQEAgLTc5OSwyMSArNzk5LDIxIEBA
IHZvaWQgcmVwYXRjaEluc3RhbmNlT2YoCiAgICAgICAgIGZ0bFRodW5rQXdhcmVSZXBhdGNoQ2Fs
bChleGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8uc2xvd1BhdGhDYWxsTG9jYXRpb24oKSwgb3Bl
cmF0aW9uSW5zdGFuY2VPZkdlbmVyaWMpOwogfQogCi1zdGF0aWMgdm9pZCBsaW5rU2xvd0ZvcihW
TSosIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
U3R1YlJvdXRpbmVQdHJUYWc+IGNvZGVSZWYpCitzdGF0aWMgdm9pZCBsaW5rU2xvd0ZvcihWTSYs
IENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1
YlJvdXRpbmVQdHJUYWc+IGNvZGVSZWYpCiB7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hO
ZWFyQ2FsbChjYWxsTGlua0luZm8uY2FsbFJldHVybkxvY2F0aW9uKCksIENvZGVMb2NhdGlvbkxh
YmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihjb2RlUmVmLmNvZGUoKSkpOwogfQogCi1zdGF0aWMg
dm9pZCBsaW5rU2xvd0ZvcihWTSogdm0sIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBUaHVu
a0dlbmVyYXRvciBnZW5lcmF0b3IpCitzdGF0aWMgdm9pZCBsaW5rU2xvd0ZvcihWTSYgdm0sIENh
bGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBUaHVua0dlbmVyYXRvciBnZW5lcmF0b3IpCiB7Ci0g
ICAgbGlua1Nsb3dGb3Iodm0sIGNhbGxMaW5rSW5mbywgdm0tPmdldENUSVN0dWIoZ2VuZXJhdG9y
KS5yZXRhZ2dlZDxKSVRTdHViUm91dGluZVB0clRhZz4oKSk7CisgICAgbGlua1Nsb3dGb3Iodm0s
IGNhbGxMaW5rSW5mbywgdm0uZ2V0Q1RJU3R1YihnZW5lcmF0b3IpLnJldGFnZ2VkPEpJVFN0dWJS
b3V0aW5lUHRyVGFnPigpKTsKIH0KIAotc3RhdGljIHZvaWQgbGlua1Nsb3dGb3IoVk0qIHZtLCBD
YWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykKK3N0YXRpYyB2b2lkIGxpbmtTbG93Rm9yKFZNJiB2
bSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8pCiB7CiAgICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiB2aXJ0dWFsVGh1bmsgPSB2aXJ0dWFsVGh1bmtGb3Io
dm0sIGNhbGxMaW5rSW5mbyk7CiAgICAgbGlua1Nsb3dGb3Iodm0sIGNhbGxMaW5rSW5mbywgdmly
dHVhbFRodW5rKTsKLSAgICBjYWxsTGlua0luZm8uc2V0U2xvd1N0dWIoY3JlYXRlSklUU3R1YlJv
dXRpbmUodmlydHVhbFRodW5rLCAqdm0sIG51bGxwdHIsIHRydWUpKTsKKyAgICBjYWxsTGlua0lu
Zm8uc2V0U2xvd1N0dWIoY3JlYXRlSklUU3R1YlJvdXRpbmUodmlydHVhbFRodW5rLCB2bSwgbnVs
bHB0ciwgdHJ1ZSkpOwogfQogCiBzdGF0aWMgSlNDZWxsKiB3ZWJBc3NlbWJseU93bmVyKEpTQ2Vs
bCogY2FsbGVlKQpAQCAtODU5LDExICs4NTksMTEgQEAgdm9pZCBsaW5rRm9yKAogICAgICAgICBj
YWxsZWVDb2RlQmxvY2stPmxpbmtJbmNvbWluZ0NhbGwoY2FsbGVyRnJhbWUsICZjYWxsTGlua0lu
Zm8pOwogCiAgICAgaWYgKGNhbGxMaW5rSW5mby5zcGVjaWFsaXphdGlvbktpbmQoKSA9PSBDb2Rl
Rm9yQ2FsbCAmJiBjYWxsTGlua0luZm8uYWxsb3dTdHVicygpKSB7Ci0gICAgICAgIGxpbmtTbG93
Rm9yKCZ2bSwgY2FsbExpbmtJbmZvLCBsaW5rUG9seW1vcnBoaWNDYWxsVGh1bmtHZW5lcmF0b3Ip
OworICAgICAgICBsaW5rU2xvd0Zvcih2bSwgY2FsbExpbmtJbmZvLCBsaW5rUG9seW1vcnBoaWND
YWxsVGh1bmtHZW5lcmF0b3IpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIGxp
bmtTbG93Rm9yKCZ2bSwgY2FsbExpbmtJbmZvKTsKKyAgICBsaW5rU2xvd0Zvcih2bSwgY2FsbExp
bmtJbmZvKTsKIH0KIAogdm9pZCBsaW5rRGlyZWN0Rm9yKApAQCAtODc0LDEwICs4NzQsMTAgQEAg
dm9pZCBsaW5rRGlyZWN0Rm9yKAogICAgIAogICAgIENvZGVCbG9jayogY2FsbGVyQ29kZUJsb2Nr
ID0gZXhlYy0+Y29kZUJsb2NrKCk7CiAKLSAgICBWTSogdm0gPSBjYWxsZXJDb2RlQmxvY2stPnZt
KCk7CisgICAgVk0mIHZtID0gY2FsbGVyQ29kZUJsb2NrLT52bSgpOwogICAgIAogICAgIEFTU0VS
VCghY2FsbExpbmtJbmZvLmlzTGlua2VkKCkpOwotICAgIGNhbGxMaW5rSW5mby5zZXRDb2RlQmxv
Y2soKnZtLCBjYWxsZXJDb2RlQmxvY2ssIGpzQ2FzdDxGdW5jdGlvbkNvZGVCbG9jayo+KGNhbGxl
ZUNvZGVCbG9jaykpOworICAgIGNhbGxMaW5rSW5mby5zZXRDb2RlQmxvY2sodm0sIGNhbGxlckNv
ZGVCbG9jaywganNDYXN0PEZ1bmN0aW9uQ29kZUJsb2NrKj4oY2FsbGVlQ29kZUJsb2NrKSk7CiAg
ICAgaWYgKHNob3VsZER1bXBEaXNhc3NlbWJseUZvcihjYWxsZXJDb2RlQmxvY2spKQogICAgICAg
ICBkYXRhTG9nKCJMaW5raW5nIGNhbGwgaW4gIiwgRnVsbENvZGVPcmlnaW4oY2FsbGVyQ29kZUJs
b2NrLCBjYWxsTGlua0luZm8uY29kZU9yaWdpbigpKSwgIiB0byAiLCBwb2ludGVyRHVtcChjYWxs
ZWVDb2RlQmxvY2spLCAiLCBlbnRyeXBvaW50IGF0ICIsIGNvZGVQdHIsICJcbiIpOwogCkBAIC04
OTMsMTIgKzg5MywxMiBAQCB2b2lkIGxpbmtTbG93Rm9yKAogICAgIEV4ZWNTdGF0ZSogZXhlYywg
Q2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8pCiB7CiAgICAgQ29kZUJsb2NrKiBjYWxsZXJDb2Rl
QmxvY2sgPSBleGVjLT5jYWxsZXJGcmFtZSgpLT5jb2RlQmxvY2soKTsKLSAgICBWTSogdm0gPSBj
YWxsZXJDb2RlQmxvY2stPnZtKCk7CisgICAgVk0mIHZtID0gY2FsbGVyQ29kZUJsb2NrLT52bSgp
OwogICAgIAogICAgIGxpbmtTbG93Rm9yKHZtLCBjYWxsTGlua0luZm8pOwogfQogCi1zdGF0aWMg
dm9pZCByZXZlcnRDYWxsKFZNKiB2bSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8sIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91dGluZVB0clRhZz4gY29kZVJlZikKK3N0YXRpYyB2
b2lkIHJldmVydENhbGwoVk0mIHZtLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiBjb2RlUmVmKQogewogICAgIGlm
IChjYWxsTGlua0luZm8uaXNEaXJlY3QoKSkgewogICAgICAgICBjYWxsTGlua0luZm8uY2xlYXJD
b2RlQmxvY2soKTsKQEAgLTkzMCw3ICs5MzAsNyBAQCB2b2lkIHVubGlua0ZvcihWTSYgdm0sIENh
bGxMaW5rSW5mbyYgY2FsCiAgICAgaWYgKE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpKQogICAg
ICAgICBkYXRhTG9nKCJVbmxpbmtpbmcgY2FsbCBhdCAiLCBjYWxsTGlua0luZm8uaG90UGF0aE90
aGVyKCksICJcbiIpOwogICAgIAotICAgIHJldmVydENhbGwoJnZtLCBjYWxsTGlua0luZm8sIHZt
LmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikucmV0YWdnZWQ8SklUU3R1YlJvdXRp
bmVQdHJUYWc+KCkpOworICAgIHJldmVydENhbGwodm0sIGNhbGxMaW5rSW5mbywgdm0uZ2V0Q1RJ
U3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5yZXRhZ2dlZDxKSVRTdHViUm91dGluZVB0clRh
Zz4oKSk7CiB9CiAKIHN0YXRpYyB2b2lkIGxpbmtWaXJ0dWFsRm9yKEV4ZWNTdGF0ZSogZXhlYywg
Q2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8pCkBAIC05NDIsOCArOTQyLDggQEAgc3RhdGljIHZv
aWQgbGlua1ZpcnR1YWxGb3IoRXhlY1N0YXRlKiBleAogICAgIGlmIChzaG91bGREdW1wRGlzYXNz
ZW1ibHlGb3IoY2FsbGVyQ29kZUJsb2NrKSkKICAgICAgICAgZGF0YUxvZygiTGlua2luZyB2aXJ0
dWFsIGNhbGwgYXQgIiwgRnVsbENvZGVPcmlnaW4oY2FsbGVyQ29kZUJsb2NrLCBjYWxsZXJGcmFt
ZS0+Y29kZU9yaWdpbigpKSwgIlxuIik7CiAKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
U3R1YlJvdXRpbmVQdHJUYWc+IHZpcnR1YWxUaHVuayA9IHZpcnR1YWxUaHVua0Zvcigmdm0sIGNh
bGxMaW5rSW5mbyk7Ci0gICAgcmV2ZXJ0Q2FsbCgmdm0sIGNhbGxMaW5rSW5mbywgdmlydHVhbFRo
dW5rKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHZp
cnR1YWxUaHVuayA9IHZpcnR1YWxUaHVua0Zvcih2bSwgY2FsbExpbmtJbmZvKTsKKyAgICByZXZl
cnRDYWxsKHZtLCBjYWxsTGlua0luZm8sIHZpcnR1YWxUaHVuayk7CiAgICAgY2FsbExpbmtJbmZv
LnNldFNsb3dTdHViKGNyZWF0ZUpJVFN0dWJSb3V0aW5lKHZpcnR1YWxUaHVuaywgdm0sIG51bGxw
dHIsIHRydWUpKTsKICAgICBjYWxsTGlua0luZm8uc2V0Q2xlYXJlZEJ5VmlydHVhbCgpOwogfQpA
QCAtMTI0NCw3ICsxMjQ0LDcgQEAgdm9pZCBsaW5rUG9seW1vcnBoaWNDYWxsKAogICAgIC8vIFRo
ZSBvcmlnaW5hbCBzbG93IHBhdGggaXMgdW5yZWFjaGFibGUgb24gNjQtYml0cywgYnV0IHN0aWxs
CiAgICAgLy8gcmVhY2hhYmxlIG9uIDMyLWJpdHMgc2luY2UgYSBub24tY2VsbCBjYWxsZWUgd2ls
bCBhbHdheXMKICAgICAvLyB0cmlnZ2VyIHRoZSBzbG93IHBhdGgKLSAgICBsaW5rU2xvd0Zvcigm
dm0sIGNhbGxMaW5rSW5mbyk7CisgICAgbGlua1Nsb3dGb3Iodm0sIGNhbGxMaW5rSW5mbyk7CiAg
ICAgCiAgICAgLy8gSWYgdGhlcmUgaGFkIGJlZW4gYSBwcmV2aW91cyBzdHViIHJvdXRpbmUsIHRo
YXQgb25lIHdpbGwgZGllIGFzIHNvb24gYXMgdGhlIEdDIHJ1bnMgYW5kIHNlZXMKICAgICAvLyB0
aGF0IGl0J3Mgbm8gbG9uZ2VyIG9uIHN0YWNrLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9TcGVjaWFsaXplZFRodW5rSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9TcGVjaWFsaXplZFRodW5rSklULmgJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU3BlY2lhbGl6ZWRUaHVua0pJVC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zNyw4ICszNyw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIFNwZWNpYWxp
emVkVGh1bmtKSVQgOiBwdWJsaWMgSlNJbnRlcmZhY2VKSVQgewogICAgIHB1YmxpYzoKICAgICAg
ICAgc3RhdGljIGNvbnN0IGludCBUaGlzQXJndW1lbnQgPSAtMTsKLSAgICAgICAgU3BlY2lhbGl6
ZWRUaHVua0pJVChWTSogdm0sIGludCBleHBlY3RlZEFyZ0NvdW50KQotICAgICAgICAgICAgOiBK
U0ludGVyZmFjZUpJVCh2bSkKKyAgICAgICAgU3BlY2lhbGl6ZWRUaHVua0pJVChWTSYgdm0sIGlu
dCBleHBlY3RlZEFyZ0NvdW50KQorICAgICAgICAgICAgOiBKU0ludGVyZmFjZUpJVCgmdm0pCiAg
ICAgICAgIHsKICAgICAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKCk7CiAgICAgICAgICAg
ICBlbWl0U2F2ZVRoZW5NYXRlcmlhbGl6ZVRhZ1JlZ2lzdGVycygpOwpAQCAtNDYsOCArNDYsOCBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIG1fZmFpbHVyZXMuYXBwZW5kKGJyYW5jaDMy
KE5vdEVxdWFsLCBwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpLCBUcnVz
dGVkSW1tMzIoZXhwZWN0ZWRBcmdDb3VudCArIDEpKSk7CiAgICAgICAgIH0KICAgICAgICAgCi0g
ICAgICAgIGV4cGxpY2l0IFNwZWNpYWxpemVkVGh1bmtKSVQoVk0qIHZtKQotICAgICAgICAgICAg
OiBKU0ludGVyZmFjZUpJVCh2bSkKKyAgICAgICAgZXhwbGljaXQgU3BlY2lhbGl6ZWRUaHVua0pJ
VChWTSYgdm0pCisgICAgICAgICAgICA6IEpTSW50ZXJmYWNlSklUKCZ2bSkKICAgICAgICAgewog
ICAgICAgICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoKTsKICAgICAgICAgICAgIGVtaXRTYXZl
VGhlbk1hdGVyaWFsaXplVGFnUmVnaXN0ZXJzKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L1RodW5rR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9UaHVua0dlbmVyYXRvci5oCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMyw3
ICszMyw3IEBAIG5hbWVzcGFjZSBKU0MgewogY2xhc3MgVk07CiB0ZW1wbGF0ZTxQdHJUYWc+IGNs
YXNzIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjsKIAotdXNpbmcgVGh1bmtHZW5lcmF0b3IgPSBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+ICgqKShWTSopOwordXNpbmcgVGh1bmtH
ZW5lcmF0b3IgPSBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+ICgqKShWTSYp
OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9UaHVua0dlbmVyYXRvcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
MCw3ICs2MCw3IEBAIGlubGluZSB2b2lkIGVtaXRQb2ludGVyVmFsaWRhdGlvbihDQ2FsbEgKIAog
Ly8gV2Ugd2lsbCBqdW1wIGhlcmUgaWYgdGhlIEpJVCBjb2RlIHRyaWVzIHRvIG1ha2UgYSBjYWxs
LCBidXQgdGhlCiAvLyBsaW5raW5nIGhlbHBlciAoQysrIGNvZGUpIGRlY2lkZXMgdG8gdGhyb3cg
YW4gZXhjZXB0aW9uIGluc3RlYWQuCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcihWTSogdm0pCitNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHRocm93RXhjZXB0aW9uRnJvbUNhbGxT
bG93UGF0aEdlbmVyYXRvcihWTSYgdm0pCiB7CiAgICAgQ0NhbGxIZWxwZXJzIGppdDsKICAgICAK
QEAgLTY4LDIzICs2OCwyMyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
IHRoCiAgICAgLy8gZXZlbiB0aG91Z2ggd2Ugd29uJ3QgdXNlIGl0LgogICAgIGppdC5wcmVzZXJ2
ZVJldHVybkFkZHJlc3NBZnRlckNhbGwoR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BS
KTsKIAotICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZl
cih2bS0+dG9wRW50cnlGcmFtZSk7CisgICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFt
ZUNhbGxlZVNhdmVzQnVmZmVyKHZtLnRvcEVudHJ5RnJhbWUpOwogCi0gICAgaml0LnNldHVwQXJn
dW1lbnRzPGRlY2x0eXBlKGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIpPihDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW1QdHIodm0pLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CisgICAgaml0LnNl
dHVwQXJndW1lbnRzPGRlY2x0eXBlKGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIpPihDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW1QdHIoJnZtKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOwogICAg
IGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih0YWdDRnVuY3Rpb25QdHI8T3Bl
cmF0aW9uUHRyVGFnPihsb29rdXBFeGNlcHRpb25IYW5kbGVyKSksIEdQUkluZm86Om5vbkFyZ0dQ
UjApOwogICAgIGVtaXRQb2ludGVyVmFsaWRhdGlvbihqaXQsIEdQUkluZm86Om5vbkFyZ0dQUjAs
IE9wZXJhdGlvblB0clRhZyk7CiAgICAgaml0LmNhbGwoR1BSSW5mbzo6bm9uQXJnR1BSMCwgT3Bl
cmF0aW9uUHRyVGFnKTsKLSAgICBqaXQuanVtcFRvRXhjZXB0aW9uSGFuZGxlcigqdm0pOworICAg
IGppdC5qdW1wVG9FeGNlcHRpb25IYW5kbGVyKHZtKTsKIAogICAgIExpbmtCdWZmZXIgcGF0Y2hC
dWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQpOwogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBh
dGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgIlRocm93IGV4Y2VwdGlvbiBmcm9tIGNhbGwgc2xv
dyBwYXRoIHRodW5rIik7CiB9CiAKLXN0YXRpYyB2b2lkIHNsb3dQYXRoRm9yKENDYWxsSGVscGVy
cyYgaml0LCBWTSogdm0sIFNwcnRfSklUT3BlcmF0aW9uX0VDbGkgc2xvd1BhdGhGdW5jdGlvbikK
K3N0YXRpYyB2b2lkIHNsb3dQYXRoRm9yKENDYWxsSGVscGVycyYgaml0LCBWTSYgdm0sIFNwcnRf
SklUT3BlcmF0aW9uX0VDbGkgc2xvd1BhdGhGdW5jdGlvbikKIHsKLSAgICBqaXQuc2FuaXRpemVT
dGFja0lubGluZSgqdm0sIEdQUkluZm86Om5vbkFyZ0dQUjApOworICAgIGppdC5zYW5pdGl6ZVN0
YWNrSW5saW5lKHZtLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKICAgICBqaXQuZW1pdEZ1bmN0aW9u
UHJvbG9ndWUoKTsKLSAgICBqaXQuc3RvcmVQdHIoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIs
ICZ2bS0+dG9wQ2FsbEZyYW1lKTsKKyAgICBqaXQuc3RvcmVQdHIoR1BSSW5mbzo6Y2FsbEZyYW1l
UmVnaXN0ZXIsICZ2bS50b3BDYWxsRnJhbWUpOwogI2lmIE9TKFdJTkRPV1MpICYmIENQVShYODZf
NjQpCiAgICAgLy8gV2luZG93cyBYODZfNjQgbmVlZHMgc29tZSBzcGFjZSBwb2ludGVkIHRvIGJ5
IGFyZzAgZm9yIHJldHVybiB0eXBlcyBsYXJnZXIgdGhhbiA2NCBiaXRzLgogICAgIC8vIE90aGVy
IGFyZ3VtZW50IHZhbHVlcyBhcmUgc2hpZnQgYnkgMS4gVXNlIHNwYWNlIG9uIHRoZSBzdGFjayBm
b3Igb3VyIHR3byByZXR1cm4gdmFsdWVzLgpAQCAtMTMxLDcgKzEzMSw3IEBAIHN0YXRpYyB2b2lk
IHNsb3dQYXRoRm9yKENDYWxsSGVscGVycyYgamkKICAgICBqaXQuZmFySnVtcChHUFJJbmZvOjpy
ZXR1cm5WYWx1ZUdQUiwgSlNFbnRyeVB0clRhZyk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz4gbGlua0NhbGxUaHVua0dlbmVyYXRvcihWTSogdm0pCitNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IoVk0m
IHZtKQogewogICAgIC8vIFRoZSByZXR1cm4gYWRkcmVzcyBpcyBvbiB0aGUgc3RhY2sgb3IgaW4g
dGhlIGxpbmsgcmVnaXN0ZXIuIFdlIHdpbGwgaGVuY2UKICAgICAvLyBzYXZlIHRoZSByZXR1cm4g
YWRkcmVzcyB0byB0aGUgY2FsbCBmcmFtZSB3aGlsZSB3ZSBtYWtlIGEgQysrIGZ1bmN0aW9uIGNh
bGwKQEAgLTE0OCw3ICsxNDgsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IGxpCiAKIC8vIEZvciBjbG9zdXJlIG9wdGltaXphdGlvbnMsIHdlIG9ubHkgaW5jbHVkZSBj
YWxscywgc2luY2UgaWYgeW91J3JlIHVzaW5nIGNsb3N1cmVzIGZvcgogLy8gb2JqZWN0IGNvbnN0
cnVjdGlvbiB0aGVuIHlvdSdyZSBnb2luZyB0byBsb3NlIGJpZyB0aW1lIGFueXdheS4KLU1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gbGlua1BvbHltb3JwaGljQ2FsbFRodW5r
R2VuZXJhdG9yKFZNKiB2bSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
bGlua1BvbHltb3JwaGljQ2FsbFRodW5rR2VuZXJhdG9yKFZNJiB2bSkKIHsKICAgICBDQ2FsbEhl
bHBlcnMgaml0OwogCkBAIC0xNjIsNyArMTYyLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBsaQogLy8gcGF0aCB2aXJ0dWFsIGNhbGwgc28gdGhhdCB3ZSBjYW4gZW5h
YmxlIGZhc3QgdGFpbCBjYWxscyBmb3IgbWVnYW1vcnBoaWMKIC8vIHZpcnR1YWwgY2FsbHMgYnkg
dXNpbmcgdGhlIHNodWZmbGVyLgogLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE0ODgzMQotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFn
PiB2aXJ0dWFsVGh1bmtGb3IoVk0qIHZtLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykKK01h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91dGluZVB0clRhZz4gdmlydHVhbFRodW5rRm9y
KFZNJiB2bSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8pCiB7CiAgICAgLy8gVGhlIGNhbGxl
ZSBpcyBpbiByZWdUMCAoZm9yIEpTVkFMVUUzMl82NCwgdGhlIHRhZyBpcyBpbiByZWdUMSkuCiAg
ICAgLy8gVGhlIHJldHVybiBhZGRyZXNzIGlzIG9uIHRoZSBzdGFjaywgb3IgaW4gdGhlIGxpbmsg
cmVnaXN0ZXIuIFdlIHdpbGwgaGVuY2UKQEAgLTIyMSw3ICsyMjEsNyBAQCBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUCiAKICAgICBub3RKU0Z1bmN0aW9uLmxpbmsoJmpp
dCk7CiAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2hJZk5vdFR5cGUoR1BSSW5mbzo6cmVn
VDAsIEludGVybmFsRnVuY3Rpb25UeXBlKSk7Ci0gICAgdm9pZCogZXhlY3V0YWJsZUFkZHJlc3Mg
PSB2bS0+Z2V0Q1RJSW50ZXJuYWxGdW5jdGlvblRyYW1wb2xpbmVGb3IoY2FsbExpbmtJbmZvLnNw
ZWNpYWxpemF0aW9uS2luZCgpKS5leGVjdXRhYmxlQWRkcmVzcygpOworICAgIHZvaWQqIGV4ZWN1
dGFibGVBZGRyZXNzID0gdm0uZ2V0Q1RJSW50ZXJuYWxGdW5jdGlvblRyYW1wb2xpbmVGb3IoY2Fs
bExpbmtJbmZvLnNwZWNpYWxpemF0aW9uS2luZCgpKS5leGVjdXRhYmxlQWRkcmVzcygpOwogICAg
IGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihleGVjdXRhYmxlQWRkcmVzcyks
IEdQUkluZm86OnJlZ1Q0KTsKICAgICBqaXQuanVtcCgpLmxpbmtUbyhjYWxsQ29kZSwgJmppdCk7
CiAKQEAgLTI0MCwxNCArMjQwLDE0IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91
dGluZVB0clQKIGVudW0gVGh1bmtFbnRyeVR5cGUgeyBFbnRlclZpYUNhbGwsIEVudGVyVmlhSnVt
cFdpdGhTYXZlZFRhZ3MsIEVudGVyVmlhSnVtcFdpdGhvdXRTYXZlZFRhZ3MgfTsKIGVudW0gY2xh
c3MgVGh1bmtGdW5jdGlvblR5cGUgeyBKU0Z1bmN0aW9uLCBJbnRlcm5hbEZ1bmN0aW9uIH07CiAK
LXN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG5hdGl2ZUZvckdl
bmVyYXRvcihWTSogdm0sIFRodW5rRnVuY3Rpb25UeXBlIHRodW5rRnVuY3Rpb25UeXBlLCBDb2Rl
U3BlY2lhbGl6YXRpb25LaW5kIGtpbmQsIFRodW5rRW50cnlUeXBlIGVudHJ5VHlwZSA9IEVudGVy
VmlhQ2FsbCkKK3N0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG5h
dGl2ZUZvckdlbmVyYXRvcihWTSYgdm0sIFRodW5rRnVuY3Rpb25UeXBlIHRodW5rRnVuY3Rpb25U
eXBlLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQsIFRodW5rRW50cnlUeXBlIGVudHJ5VHlw
ZSA9IEVudGVyVmlhQ2FsbCkKIHsKICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgYWJsZSB0
byBsb2cgU2hhZG93Q2hpY2tlbiBwcm9sb2d1ZSBwYWNrZXRzLgogICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTU2ODkKICAgICAKICAgICBpbnQgZXhlY3V0
YWJsZU9mZnNldFRvRnVuY3Rpb24gPSBOYXRpdmVFeGVjdXRhYmxlOjpvZmZzZXRPZk5hdGl2ZUZ1
bmN0aW9uRm9yKGtpbmQpOwogICAgIAotICAgIEpTSW50ZXJmYWNlSklUIGppdCh2bSk7CisgICAg
SlNJbnRlcmZhY2VKSVQgaml0KCZ2bSk7CiAKICAgICBzd2l0Y2ggKGVudHJ5VHlwZSkgewogICAg
IGNhc2UgRW50ZXJWaWFDYWxsOgpAQCAtMjY2LDcgKzI2Niw3IEBAIHN0YXRpYyBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHIKICAgICB9CiAKICAgICBqaXQuZW1pdFB1dFRvQ2FsbEZy
YW1lSGVhZGVyKDAsIENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayk7Ci0gICAgaml0LnN0b3JlUHRy
KEpTSW50ZXJmYWNlSklUOjpjYWxsRnJhbWVSZWdpc3RlciwgJnZtLT50b3BDYWxsRnJhbWUpOwor
ICAgIGppdC5zdG9yZVB0cihKU0ludGVyZmFjZUpJVDo6Y2FsbEZyYW1lUmVnaXN0ZXIsICZ2bS50
b3BDYWxsRnJhbWUpOwogCiAjaWYgQ1BVKFg4NikKICAgICAvLyBDYWxsaW5nIGNvbnZlbnRpb246
ICAgICAgZihlY3gsIGVkeCwgLi4uKTsKQEAgLTM2MywxMiArMzYzLDEyIEBAIHN0YXRpYyBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHIKIAogICAgIC8vIENoZWNrIGZvciBhbiBleGNl
cHRpb24KICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGppdC5sb2FkNjQodm0tPmFkZHJlc3NPZkV4
Y2VwdGlvbigpLCBKU0ludGVyZmFjZUpJVDo6cmVnVDIpOworICAgIGppdC5sb2FkNjQodm0uYWRk
cmVzc09mRXhjZXB0aW9uKCksIEpTSW50ZXJmYWNlSklUOjpyZWdUMik7CiAgICAgSlNJbnRlcmZh
Y2VKSVQ6Okp1bXAgZXhjZXB0aW9uSGFuZGxlciA9IGppdC5icmFuY2hUZXN0NjQoSlNJbnRlcmZh
Y2VKSVQ6Ok5vblplcm8sIEpTSW50ZXJmYWNlSklUOjpyZWdUMik7CiAjZWxzZQogICAgIEpTSW50
ZXJmYWNlSklUOjpKdW1wIGV4Y2VwdGlvbkhhbmRsZXIgPSBqaXQuYnJhbmNoMzIoCiAgICAgICAg
IEpTSW50ZXJmYWNlSklUOjpOb3RFcXVhbCwKLSAgICAgICAgSlNJbnRlcmZhY2VKSVQ6OkFic29s
dXRlQWRkcmVzcyh2bS0+YWRkcmVzc09mRXhjZXB0aW9uKCkpLAorICAgICAgICBKU0ludGVyZmFj
ZUpJVDo6QWJzb2x1dGVBZGRyZXNzKHZtLmFkZHJlc3NPZkV4Y2VwdGlvbigpKSwKICAgICAgICAg
SlNJbnRlcmZhY2VKSVQ6OlRydXN0ZWRJbW0zMigwKSk7CiAjZW5kaWYKIApAQCAtMzc5LDggKzM3
OSw4IEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHIKICAgICAvLyBI
YW5kbGUgYW4gZXhjZXB0aW9uCiAgICAgZXhjZXB0aW9uSGFuZGxlci5saW5rKCZqaXQpOwogCi0g
ICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtLT50
b3BFbnRyeUZyYW1lKTsKLSAgICBqaXQuc3RvcmVQdHIoSlNJbnRlcmZhY2VKSVQ6OmNhbGxGcmFt
ZVJlZ2lzdGVyLCAmdm0tPnRvcENhbGxGcmFtZSk7CisgICAgaml0LmNvcHlDYWxsZWVTYXZlc1Rv
RW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtLnRvcEVudHJ5RnJhbWUpOworICAgIGppdC5z
dG9yZVB0cihKU0ludGVyZmFjZUpJVDo6Y2FsbEZyYW1lUmVnaXN0ZXIsICZ2bS50b3BDYWxsRnJh
bWUpOwogCiAjaWYgQ1BVKFg4NikgJiYgVVNFKEpTVkFMVUUzMl82NCkKICAgICBqaXQuc3ViUHRy
KEpTSW50ZXJmYWNlSklUOjpUcnVzdGVkSW1tMzIoNCksIEpTSW50ZXJmYWNlSklUOjpzdGFja1Bv
aW50ZXJSZWdpc3Rlcik7CkBAIC00MDEsNDUgKzQwMSw0NSBAQCBzdGF0aWMgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyCiAgICAgaml0LmFkZFB0cihKU0ludGVyZmFjZUpJVDo6VHJ1
c3RlZEltbTMyKDQgKiBzaXplb2YoaW50NjRfdCkpLCBKU0ludGVyZmFjZUpJVDo6c3RhY2tQb2lu
dGVyUmVnaXN0ZXIpOwogI2VuZGlmCiAKLSAgICBqaXQuanVtcFRvRXhjZXB0aW9uSGFuZGxlcigq
dm0pOworICAgIGppdC5qdW1wVG9FeGNlcHRpb25IYW5kbGVyKHZtKTsKIAogICAgIExpbmtCdWZm
ZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQpOwogICAgIHJldHVybiBGSU5BTEla
RV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgIiVzICVzJXMgdHJhbXBvbGluZSIs
IHRodW5rRnVuY3Rpb25UeXBlID09IFRodW5rRnVuY3Rpb25UeXBlOjpKU0Z1bmN0aW9uID8gIm5h
dGl2ZSIgOiAiaW50ZXJuYWwiLCBlbnRyeVR5cGUgPT0gRW50ZXJWaWFKdW1wV2l0aFNhdmVkVGFn
cyA/ICJUYWlsIFdpdGggU2F2ZWQgVGFncyAiIDogZW50cnlUeXBlID09IEVudGVyVmlhSnVtcFdp
dGhvdXRTYXZlZFRhZ3MgPyAiVGFpbCBXaXRob3V0IFNhdmVkIFRhZ3MgIiA6ICIiLCB0b0NTdHJp
bmcoa2luZCkuZGF0YSgpKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBuYXRpdmVDYWxsR2VuZXJhdG9yKFZNKiB2bSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gbmF0aXZlQ2FsbEdlbmVyYXRvcihWTSYgdm0pCiB7CiAgICAgcmV0dXJu
IG5hdGl2ZUZvckdlbmVyYXRvcih2bSwgVGh1bmtGdW5jdGlvblR5cGU6OkpTRnVuY3Rpb24sIENv
ZGVGb3JDYWxsKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBu
YXRpdmVUYWlsQ2FsbEdlbmVyYXRvcihWTSogdm0pCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IG5hdGl2ZVRhaWxDYWxsR2VuZXJhdG9yKFZNJiB2bSkKIHsKICAgICByZXR1
cm4gbmF0aXZlRm9yR2VuZXJhdG9yKHZtLCBUaHVua0Z1bmN0aW9uVHlwZTo6SlNGdW5jdGlvbiwg
Q29kZUZvckNhbGwsIEVudGVyVmlhSnVtcFdpdGhTYXZlZFRhZ3MpOwogfQogCi1NYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG5hdGl2ZVRhaWxDYWxsV2l0aG91dFNhdmVkVGFn
c0dlbmVyYXRvcihWTSogdm0pCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
IG5hdGl2ZVRhaWxDYWxsV2l0aG91dFNhdmVkVGFnc0dlbmVyYXRvcihWTSYgdm0pCiB7CiAgICAg
cmV0dXJuIG5hdGl2ZUZvckdlbmVyYXRvcih2bSwgVGh1bmtGdW5jdGlvblR5cGU6OkpTRnVuY3Rp
b24sIENvZGVGb3JDYWxsLCBFbnRlclZpYUp1bXBXaXRob3V0U2F2ZWRUYWdzKTsKIH0KIAotTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBuYXRpdmVDb25zdHJ1Y3RHZW5lcmF0
b3IoVk0qIHZtKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBuYXRpdmVD
b25zdHJ1Y3RHZW5lcmF0b3IoVk0mIHZtKQogewogICAgIHJldHVybiBuYXRpdmVGb3JHZW5lcmF0
b3Iodm0sIFRodW5rRnVuY3Rpb25UeXBlOjpKU0Z1bmN0aW9uLCBDb2RlRm9yQ29uc3RydWN0KTsK
IH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBpbnRlcm5hbEZ1bmN0
aW9uQ2FsbEdlbmVyYXRvcihWTSogdm0pCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IGludGVybmFsRnVuY3Rpb25DYWxsR2VuZXJhdG9yKFZNJiB2bSkKIHsKICAgICByZXR1
cm4gbmF0aXZlRm9yR2VuZXJhdG9yKHZtLCBUaHVua0Z1bmN0aW9uVHlwZTo6SW50ZXJuYWxGdW5j
dGlvbiwgQ29kZUZvckNhbGwpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IGludGVybmFsRnVuY3Rpb25Db25zdHJ1Y3RHZW5lcmF0b3IoVk0qIHZtKQorTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBpbnRlcm5hbEZ1bmN0aW9uQ29uc3RydWN0
R2VuZXJhdG9yKFZNJiB2bSkKIHsKICAgICByZXR1cm4gbmF0aXZlRm9yR2VuZXJhdG9yKHZtLCBU
aHVua0Z1bmN0aW9uVHlwZTo6SW50ZXJuYWxGdW5jdGlvbiwgQ29kZUZvckNvbnN0cnVjdCk7CiB9
CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gYXJpdHlGaXh1cEdlbmVy
YXRvcihWTSogdm0pCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGFyaXR5
Rml4dXBHZW5lcmF0b3IoVk0mIHZtKQogewotICAgIEpTSW50ZXJmYWNlSklUIGppdCh2bSk7Cisg
ICAgSlNJbnRlcmZhY2VKSVQgaml0KCZ2bSk7CiAKICAgICAvLyBXZSBlbnRlciB3aXRoIGZpeHVw
IGNvdW50IGluIGFyZ3VtZW50R1BSMAogICAgIC8vIFdlIGhhdmUgdGhlIGd1YXJhbnRlZSB0aGF0
IGEwLCBhMSwgYTIsIHQzLCB0NCBhbmQgdDUgKG9yIHQwIGZvciBXaW5kb3dzKSBhcmUgYWxsIGRp
c3RpbmN0IDotKQpAQCAtNTkwLDkgKzU5MCw5IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gYXIKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklU
VGh1bmtQdHJUYWcsICJmaXh1cCBhcml0eSIpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IHVucmVhY2hhYmxlR2VuZXJhdG9yKFZNKiB2bSkKK01hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gdW5yZWFjaGFibGVHZW5lcmF0b3IoVk0mIHZtKQog
ewotICAgIEpTSW50ZXJmYWNlSklUIGppdCh2bSk7CisgICAgSlNJbnRlcmZhY2VKSVQgaml0KCZ2
bSk7CiAKICAgICBqaXQuYnJlYWtwb2ludCgpOwogCkBAIC02MDAsNyArNjAwLDcgQEAgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiB1bgogICAgIHJldHVybiBGSU5BTElaRV9D
T0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgInVucmVhY2hhYmxlIHRodW5rIik7CiB9
CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gc3RyaW5nR2V0QnlWYWxH
ZW5lcmF0b3IoVk0qIHZtKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBz
dHJpbmdHZXRCeVZhbEdlbmVyYXRvcihWTSYgdm0pCiB7CiAgICAgLy8gcmVnVDAgaXMgSlNTdHJp
bmcqLCBhbmQgcmVnVDEgKDY0Yml0KSBvciByZWdUMiAoMzJiaXQpIGlzIGludCBpbmRleC4KICAg
ICAvLyBSZXR1cm4gcmVnVDAgPSByZXN1bHQgSlNTdHJpbmcqIGlmIHN1Y2NlZWRzLiBPdGhlcndp
c2UsIHJldHVybiByZWdUMCA9IDAuCkBAIC02MTQsNyArNjE0LDcgQEAgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiBzdAogICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gR1BSSW5m
bzo6cmVnVDE7CiAjZW5kaWYKIAotICAgIEpTSW50ZXJmYWNlSklUIGppdCh2bSk7CisgICAgSlNJ
bnRlcmZhY2VKSVQgaml0KCZ2bSk7CiAgICAgSlNJbnRlcmZhY2VKSVQ6Okp1bXBMaXN0IGZhaWx1
cmVzOwogICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CiAKQEAgLTY0MCw3ICs2NDAsNyBAQCBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHN0CiAgICAgY29udDhCaXQubGlu
aygmaml0KTsKIAogICAgIGZhaWx1cmVzLmFwcGVuZChqaXQuYnJhbmNoMzIoSlNJbnRlcmZhY2VK
SVQ6OkFib3ZlLCBzdHJpbmdHUFIsIEpTSW50ZXJmYWNlSklUOjpUcnVzdGVkSW1tMzIobWF4U2lu
Z2xlQ2hhcmFjdGVyU3RyaW5nKSkpOwotICAgIGppdC5tb3ZlKEpTSW50ZXJmYWNlSklUOjpUcnVz
dGVkSW1tUHRyKHZtLT5zbWFsbFN0cmluZ3Muc2luZ2xlQ2hhcmFjdGVyU3RyaW5ncygpKSwgaW5k
ZXhHUFIpOworICAgIGppdC5tb3ZlKEpTSW50ZXJmYWNlSklUOjpUcnVzdGVkSW1tUHRyKHZtLnNt
YWxsU3RyaW5ncy5zaW5nbGVDaGFyYWN0ZXJTdHJpbmdzKCkpLCBpbmRleEdQUik7CiAgICAgaml0
LmxvYWRQdHIoSlNJbnRlcmZhY2VKSVQ6OkJhc2VJbmRleChpbmRleEdQUiwgc3RyaW5nR1BSLCBK
U0ludGVyZmFjZUpJVDo6U2NhbGVQdHIsIDApLCBzdHJpbmdHUFIpOwogICAgIGppdC5yZXQoKTsK
IApAQCAtNjgyLDQyICs2ODIsNDIgQEAgc3RhdGljIHZvaWQgc3RyaW5nQ2hhckxvYWQoU3BlY2lh
bGl6ZWRUaAogICAgIGNvbnQ4Qml0LmxpbmsoJmppdCk7CiB9CiAKLXN0YXRpYyB2b2lkIGNoYXJU
b1N0cmluZyhTcGVjaWFsaXplZFRodW5rSklUJiBqaXQsIFZNKiB2bSwgTWFjcm9Bc3NlbWJsZXI6
OlJlZ2lzdGVySUQgc3JjLCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBkc3QsIE1hY3JvQXNz
ZW1ibGVyOjpSZWdpc3RlcklEIHNjcmF0Y2gpCitzdGF0aWMgdm9pZCBjaGFyVG9TdHJpbmcoU3Bl
Y2lhbGl6ZWRUaHVua0pJVCYgaml0LCBWTSYgdm0sIE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklE
IHNyYywgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgZHN0LCBNYWNyb0Fzc2VtYmxlcjo6UmVn
aXN0ZXJJRCBzY3JhdGNoKQogewogICAgIGppdC5hcHBlbmRGYWlsdXJlKGppdC5icmFuY2gzMihN
YWNyb0Fzc2VtYmxlcjo6QWJvdmUsIHNyYywgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMiht
YXhTaW5nbGVDaGFyYWN0ZXJTdHJpbmcpKSk7Ci0gICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW1QdHIodm0tPnNtYWxsU3RyaW5ncy5zaW5nbGVDaGFyYWN0ZXJTdHJpbmdzKCkp
LCBzY3JhdGNoKTsKKyAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cih2
bS5zbWFsbFN0cmluZ3Muc2luZ2xlQ2hhcmFjdGVyU3RyaW5ncygpKSwgc2NyYXRjaCk7CiAgICAg
aml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzY3JhdGNoLCBzcmMsIE1hY3Jv
QXNzZW1ibGVyOjpTY2FsZVB0ciwgMCksIGRzdCk7CiAgICAgaml0LmFwcGVuZEZhaWx1cmUoaml0
LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIGRzdCkpOwogfQogCi1NYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGNoYXJDb2RlQXRUaHVua0dlbmVyYXRvcihW
TSogdm0pCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGNoYXJDb2RlQXRU
aHVua0dlbmVyYXRvcihWTSYgdm0pCiB7CiAgICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQodm0s
IDEpOwogICAgIHN0cmluZ0NoYXJMb2FkKGppdCk7CiAgICAgaml0LnJldHVybkludDMyKFNwZWNp
YWxpemVkVGh1bmtKSVQ6OnJlZ1QwKTsKLSAgICByZXR1cm4gaml0LmZpbmFsaXplKHZtLT5qaXRT
dHVicy0+Y3RpTmF0aXZlVGFpbENhbGwodm0pLCAiY2hhckNvZGVBdCIpOworICAgIHJldHVybiBq
aXQuZmluYWxpemUodm0uaml0U3R1YnMtPmN0aU5hdGl2ZVRhaWxDYWxsKHZtKSwgImNoYXJDb2Rl
QXQiKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBjaGFyQXRU
aHVua0dlbmVyYXRvcihWTSogdm0pCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IGNoYXJBdFRodW5rR2VuZXJhdG9yKFZNJiB2bSkKIHsKICAgICBTcGVjaWFsaXplZFRodW5r
SklUIGppdCh2bSwgMSk7CiAgICAgc3RyaW5nQ2hhckxvYWQoaml0KTsKICAgICBjaGFyVG9TdHJp
bmcoaml0LCB2bSwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDAsIFNwZWNpYWxpemVkVGh1bmtK
SVQ6OnJlZ1QwLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMSk7CiAgICAgaml0LnJldHVybkpT
Q2VsbChTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCk7Ci0gICAgcmV0dXJuIGppdC5maW5hbGl6
ZSh2bS0+aml0U3R1YnMtPmN0aU5hdGl2ZVRhaWxDYWxsKHZtKSwgImNoYXJBdCIpOworICAgIHJl
dHVybiBqaXQuZmluYWxpemUodm0uaml0U3R1YnMtPmN0aU5hdGl2ZVRhaWxDYWxsKHZtKSwgImNo
YXJBdCIpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGZyb21D
aGFyQ29kZVRodW5rR2VuZXJhdG9yKFZNKiB2bSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gZnJvbUNoYXJDb2RlVGh1bmtHZW5lcmF0b3IoVk0mIHZtKQogewogICAgIFNw
ZWNpYWxpemVkVGh1bmtKSVQgaml0KHZtLCAxKTsKICAgICAvLyBsb2FkIGNoYXIgY29kZQogICAg
IGppdC5sb2FkSW50MzJBcmd1bWVudCgwLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCk7CiAg
ICAgY2hhclRvU3RyaW5nKGppdCwgdm0sIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwLCBTcGVj
aWFsaXplZFRodW5rSklUOjpyZWdUMCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDEpOwogICAg
IGppdC5yZXR1cm5KU0NlbGwoU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDApOwotICAgIHJldHVy
biBqaXQuZmluYWxpemUodm0tPmppdFN0dWJzLT5jdGlOYXRpdmVUYWlsQ2FsbCh2bSksICJmcm9t
Q2hhckNvZGUiKTsKKyAgICByZXR1cm4gaml0LmZpbmFsaXplKHZtLmppdFN0dWJzLT5jdGlOYXRp
dmVUYWlsQ2FsbCh2bSksICJmcm9tQ2hhckNvZGUiKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBjbHozMlRodW5rR2VuZXJhdG9yKFZNKiB2bSkKK01hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gY2x6MzJUaHVua0dlbmVyYXRvcihWTSYgdm0p
CiB7CiAgICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQodm0sIDEpOwogICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wIG5vbkludEFyZ0p1bXA7CkBAIC03MzUsMTkgKzczNSwxOSBAQCBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGNsCiAgICAgfSBlbHNlCiAgICAgICAgIGppdC5h
cHBlbmRGYWlsdXJlKG5vbkludEFyZ0p1bXApOwogCi0gICAgcmV0dXJuIGppdC5maW5hbGl6ZSh2
bS0+aml0U3R1YnMtPmN0aU5hdGl2ZVRhaWxDYWxsKHZtKSwgImNsejMyIik7CisgICAgcmV0dXJu
IGppdC5maW5hbGl6ZSh2bS5qaXRTdHVicy0+Y3RpTmF0aXZlVGFpbENhbGwodm0pLCAiY2x6MzIi
KTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBzcXJ0VGh1bmtH
ZW5lcmF0b3IoVk0qIHZtKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBz
cXJ0VGh1bmtHZW5lcmF0b3IoVk0mIHZtKQogewogICAgIFNwZWNpYWxpemVkVGh1bmtKSVQgaml0
KHZtLCAxKTsKICAgICBpZiAoIWppdC5zdXBwb3J0c0Zsb2F0aW5nUG9pbnRTcXJ0KCkpCi0gICAg
ICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+OjpjcmVhdGVT
ZWxmTWFuYWdlZENvZGVSZWYodm0tPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKHZtKSk7CisgICAg
ICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+OjpjcmVhdGVT
ZWxmTWFuYWdlZENvZGVSZWYodm0uaml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwodm0pKTsKIAogICAg
IGppdC5sb2FkRG91YmxlQXJndW1lbnQoMCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6ZnBSZWdUMCwg
U3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDApOwogICAgIGppdC5zcXJ0RG91YmxlKFNwZWNpYWxp
emVkVGh1bmtKSVQ6OmZwUmVnVDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OmZwUmVnVDApOwogICAg
IGppdC5yZXR1cm5Eb3VibGUoU3BlY2lhbGl6ZWRUaHVua0pJVDo6ZnBSZWdUMCk7Ci0gICAgcmV0
dXJuIGppdC5maW5hbGl6ZSh2bS0+aml0U3R1YnMtPmN0aU5hdGl2ZVRhaWxDYWxsKHZtKSwgInNx
cnQiKTsKKyAgICByZXR1cm4gaml0LmZpbmFsaXplKHZtLmppdFN0dWJzLT5jdGlOYXRpdmVUYWls
Q2FsbCh2bSksICJzcXJ0Iik7CiB9CiAKIApAQCAtODk4LDEyICs4OTgsMTIgQEAgZGVmaW5lVW5h
cnlEb3VibGVPcFdyYXBwZXIodHJ1bmMpOwogCiBzdGF0aWMgY29uc3QgZG91YmxlIGhhbGZDb25z
dGFudCA9IDAuNTsKICAgICAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
Zmxvb3JUaHVua0dlbmVyYXRvcihWTSogdm0pCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IGZsb29yVGh1bmtHZW5lcmF0b3IoVk0mIHZtKQogewogICAgIFNwZWNpYWxpemVk
VGh1bmtKSVQgaml0KHZtLCAxKTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub25JbnRKdW1w
OwogICAgIGlmICghVW5hcnlEb3VibGVPcFdyYXBwZXIoZmxvb3IpIHx8ICFqaXQuc3VwcG9ydHNG
bG9hdGluZ1BvaW50KCkpCi0gICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+OjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYodm0tPmppdFN0dWJzLT5jdGlO
YXRpdmVDYWxsKHZtKSk7CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+OjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYodm0uaml0U3R1YnMtPmN0aU5h
dGl2ZUNhbGwodm0pKTsKICAgICBqaXQubG9hZEludDMyQXJndW1lbnQoMCwgU3BlY2lhbGl6ZWRU
aHVua0pJVDo6cmVnVDAsIG5vbkludEp1bXApOwogICAgIGppdC5yZXR1cm5JbnQzMihTcGVjaWFs
aXplZFRodW5rSklUOjpyZWdUMCk7CiAgICAgbm9uSW50SnVtcC5saW5rKCZqaXQpOwpAQCAtOTE2
LDcgKzkxNiw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gZmwKICAg
ICAgICAgaml0LnJldHVybkludDMyKFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwKTsKICAgICAg
ICAgZG91YmxlUmVzdWx0LmxpbmsoJmppdCk7CiAgICAgICAgIGppdC5yZXR1cm5Eb3VibGUoU3Bl
Y2lhbGl6ZWRUaHVua0pJVDo6ZnBSZWdUMCk7Ci0gICAgICAgIHJldHVybiBqaXQuZmluYWxpemUo
dm0tPmppdFN0dWJzLT5jdGlOYXRpdmVUYWlsQ2FsbCh2bSksICJmbG9vciIpOworICAgICAgICBy
ZXR1cm4gaml0LmZpbmFsaXplKHZtLmppdFN0dWJzLT5jdGlOYXRpdmVUYWlsQ2FsbCh2bSksICJm
bG9vciIpOwogICAgIH0KIAogICAgIFNwZWNpYWxpemVkVGh1bmtKSVQ6Okp1bXAgaW50UmVzdWx0
OwpAQCAtOTM4LDE0ICs5MzgsMTQgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBmbAogICAgIGppdC5yZXR1cm5JbnQzMihTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCk7
CiAgICAgZG91YmxlUmVzdWx0LmxpbmsoJmppdCk7CiAgICAgaml0LnJldHVybkRvdWJsZShTcGVj
aWFsaXplZFRodW5rSklUOjpmcFJlZ1QwKTsKLSAgICByZXR1cm4gaml0LmZpbmFsaXplKHZtLT5q
aXRTdHVicy0+Y3RpTmF0aXZlVGFpbENhbGwodm0pLCAiZmxvb3IiKTsKKyAgICByZXR1cm4gaml0
LmZpbmFsaXplKHZtLmppdFN0dWJzLT5jdGlOYXRpdmVUYWlsQ2FsbCh2bSksICJmbG9vciIpOwog
fQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGNlaWxUaHVua0dlbmVy
YXRvcihWTSogdm0pCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGNlaWxU
aHVua0dlbmVyYXRvcihWTSYgdm0pCiB7CiAgICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQodm0s
IDEpOwogICAgIGlmICghVW5hcnlEb3VibGVPcFdyYXBwZXIoY2VpbCkgfHwgIWppdC5zdXBwb3J0
c0Zsb2F0aW5nUG9pbnQoKSkKLSAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz46OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZih2bS0+aml0U3R1YnMtPmN0
aU5hdGl2ZUNhbGwodm0pKTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz46OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZih2bS5qaXRTdHVicy0+Y3Rp
TmF0aXZlQ2FsbCh2bSkpOwogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vbkludEp1bXA7CiAg
ICAgaml0LmxvYWRJbnQzMkFyZ3VtZW50KDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwLCBu
b25JbnRKdW1wKTsKICAgICBqaXQucmV0dXJuSW50MzIoU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVn
VDApOwpAQCAtOTYxLDE0ICs5NjEsMTQgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiBjZQogICAgIGppdC5yZXR1cm5JbnQzMihTcGVjaWFsaXplZFRodW5rSklUOjpyZWdU
MCk7CiAgICAgZG91YmxlUmVzdWx0LmxpbmsoJmppdCk7CiAgICAgaml0LnJldHVybkRvdWJsZShT
cGVjaWFsaXplZFRodW5rSklUOjpmcFJlZ1QwKTsKLSAgICByZXR1cm4gaml0LmZpbmFsaXplKHZt
LT5qaXRTdHVicy0+Y3RpTmF0aXZlVGFpbENhbGwodm0pLCAiY2VpbCIpOworICAgIHJldHVybiBq
aXQuZmluYWxpemUodm0uaml0U3R1YnMtPmN0aU5hdGl2ZVRhaWxDYWxsKHZtKSwgImNlaWwiKTsK
IH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiB0cnVuY1RodW5rR2Vu
ZXJhdG9yKFZNKiB2bSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gdHJ1
bmNUaHVua0dlbmVyYXRvcihWTSYgdm0pCiB7CiAgICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQo
dm0sIDEpOwogICAgIGlmICghVW5hcnlEb3VibGVPcFdyYXBwZXIodHJ1bmMpIHx8ICFqaXQuc3Vw
cG9ydHNGbG9hdGluZ1BvaW50KCkpCi0gICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+OjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYodm0tPmppdFN0dWJz
LT5jdGlOYXRpdmVDYWxsKHZtKSk7CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+OjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYodm0uaml0U3R1YnMt
PmN0aU5hdGl2ZUNhbGwodm0pKTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub25JbnRKdW1w
OwogICAgIGppdC5sb2FkSW50MzJBcmd1bWVudCgwLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdU
MCwgbm9uSW50SnVtcCk7CiAgICAgaml0LnJldHVybkludDMyKFNwZWNpYWxpemVkVGh1bmtKSVQ6
OnJlZ1QwKTsKQEAgLTk4NCwxNCArOTg0LDE0IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gdHIKICAgICBqaXQucmV0dXJuSW50MzIoU3BlY2lhbGl6ZWRUaHVua0pJVDo6
cmVnVDApOwogICAgIGRvdWJsZVJlc3VsdC5saW5rKCZqaXQpOwogICAgIGppdC5yZXR1cm5Eb3Vi
bGUoU3BlY2lhbGl6ZWRUaHVua0pJVDo6ZnBSZWdUMCk7Ci0gICAgcmV0dXJuIGppdC5maW5hbGl6
ZSh2bS0+aml0U3R1YnMtPmN0aU5hdGl2ZVRhaWxDYWxsKHZtKSwgInRydW5jIik7CisgICAgcmV0
dXJuIGppdC5maW5hbGl6ZSh2bS5qaXRTdHVicy0+Y3RpTmF0aXZlVGFpbENhbGwodm0pLCAidHJ1
bmMiKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiByb3VuZFRo
dW5rR2VuZXJhdG9yKFZNKiB2bSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gcm91bmRUaHVua0dlbmVyYXRvcihWTSYgdm0pCiB7CiAgICAgU3BlY2lhbGl6ZWRUaHVua0pJ
VCBqaXQodm0sIDEpOwogICAgIGlmICghVW5hcnlEb3VibGVPcFdyYXBwZXIoanNSb3VuZCkgfHwg
IWppdC5zdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkKLSAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz46OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZih2bS0+
aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwodm0pKTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz46OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZih2bS5q
aXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCh2bSkpOwogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5v
bkludEp1bXA7CiAgICAgaml0LmxvYWRJbnQzMkFyZ3VtZW50KDAsIFNwZWNpYWxpemVkVGh1bmtK
SVQ6OnJlZ1QwLCBub25JbnRKdW1wKTsKICAgICBqaXQucmV0dXJuSW50MzIoU3BlY2lhbGl6ZWRU
aHVua0pJVDo6cmVnVDApOwpAQCAtMTAxOCw0MCArMTAxOCw0MCBAQCBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IHJvCiAgICAgaml0LnJldHVybkludDMyKFNwZWNpYWxpemVk
VGh1bmtKSVQ6OnJlZ1QwKTsKICAgICBkb3VibGVSZXN1bHQubGluaygmaml0KTsKICAgICBqaXQu
cmV0dXJuRG91YmxlKFNwZWNpYWxpemVkVGh1bmtKSVQ6OmZwUmVnVDApOwotICAgIHJldHVybiBq
aXQuZmluYWxpemUodm0tPmppdFN0dWJzLT5jdGlOYXRpdmVUYWlsQ2FsbCh2bSksICJyb3VuZCIp
OworICAgIHJldHVybiBqaXQuZmluYWxpemUodm0uaml0U3R1YnMtPmN0aU5hdGl2ZVRhaWxDYWxs
KHZtKSwgInJvdW5kIik7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gZXhwVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiBleHBUaHVua0dlbmVyYXRvcihWTSYgdm0pCiB7CiAgICAgaWYgKCFVbmFyeURv
dWJsZU9wV3JhcHBlcihleHApKQotICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKHZtLT5qaXRTdHVicy0+
Y3RpTmF0aXZlQ2FsbCh2bSkpOworICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKHZtLmppdFN0dWJzLT5j
dGlOYXRpdmVDYWxsKHZtKSk7CiAgICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQodm0sIDEpOwog
ICAgIGlmICghaml0LnN1cHBvcnRzRmxvYXRpbmdQb2ludCgpKQotICAgICAgICByZXR1cm4gTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2Rl
UmVmKHZtLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCh2bSkpOworICAgICAgICByZXR1cm4gTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2Rl
UmVmKHZtLmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKHZtKSk7CiAgICAgaml0LmxvYWREb3VibGVB
cmd1bWVudCgwLCBTcGVjaWFsaXplZFRodW5rSklUOjpmcFJlZ1QwLCBTcGVjaWFsaXplZFRodW5r
SklUOjpyZWdUMCk7CiAgICAgaml0LmNhbGxEb3VibGVUb0RvdWJsZVByZXNlcnZpbmdSZXR1cm4o
VW5hcnlEb3VibGVPcFdyYXBwZXIoZXhwKSk7CiAgICAgaml0LnJldHVybkRvdWJsZShTcGVjaWFs
aXplZFRodW5rSklUOjpmcFJlZ1QwKTsKLSAgICByZXR1cm4gaml0LmZpbmFsaXplKHZtLT5qaXRT
dHVicy0+Y3RpTmF0aXZlVGFpbENhbGwodm0pLCAiZXhwIik7CisgICAgcmV0dXJuIGppdC5maW5h
bGl6ZSh2bS5qaXRTdHVicy0+Y3RpTmF0aXZlVGFpbENhbGwodm0pLCAiZXhwIik7CiB9CiAKLU1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gbG9nVGh1bmtHZW5lcmF0b3IoVk0q
IHZtKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBsb2dUaHVua0dlbmVy
YXRvcihWTSYgdm0pCiB7CiAgICAgaWYgKCFVbmFyeURvdWJsZU9wV3JhcHBlcihsb2cpKQotICAg
ICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPjo6Y3JlYXRl
U2VsZk1hbmFnZWRDb2RlUmVmKHZtLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCh2bSkpOworICAg
ICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPjo6Y3JlYXRl
U2VsZk1hbmFnZWRDb2RlUmVmKHZtLmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKHZtKSk7CiAgICAg
U3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQodm0sIDEpOwogICAgIGlmICghaml0LnN1cHBvcnRzRmxv
YXRpbmdQb2ludCgpKQotICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKHZtLT5qaXRTdHVicy0+Y3RpTmF0
aXZlQ2FsbCh2bSkpOworICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKHZtLmppdFN0dWJzLT5jdGlOYXRp
dmVDYWxsKHZtKSk7CiAgICAgaml0LmxvYWREb3VibGVBcmd1bWVudCgwLCBTcGVjaWFsaXplZFRo
dW5rSklUOjpmcFJlZ1QwLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCk7CiAgICAgaml0LmNh
bGxEb3VibGVUb0RvdWJsZVByZXNlcnZpbmdSZXR1cm4oVW5hcnlEb3VibGVPcFdyYXBwZXIobG9n
KSk7CiAgICAgaml0LnJldHVybkRvdWJsZShTcGVjaWFsaXplZFRodW5rSklUOjpmcFJlZ1QwKTsK
LSAgICByZXR1cm4gaml0LmZpbmFsaXplKHZtLT5qaXRTdHVicy0+Y3RpTmF0aXZlVGFpbENhbGwo
dm0pLCAibG9nIik7CisgICAgcmV0dXJuIGppdC5maW5hbGl6ZSh2bS5qaXRTdHVicy0+Y3RpTmF0
aXZlVGFpbENhbGwodm0pLCAibG9nIik7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gYWJzVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQorTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBhYnNUaHVua0dlbmVyYXRvcihWTSYgdm0pCiB7CiAgICAgU3Bl
Y2lhbGl6ZWRUaHVua0pJVCBqaXQodm0sIDEpOwogICAgIGlmICghaml0LnN1cHBvcnRzRmxvYXRp
bmdQb2ludEFicygpKQotICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKHZtLT5qaXRTdHVicy0+Y3RpTmF0
aXZlQ2FsbCh2bSkpOworICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKHZtLmppdFN0dWJzLT5jdGlOYXRp
dmVDYWxsKHZtKSk7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIHVuc2lnbmVkIHZpcnR1YWxS
ZWdpc3RlckluZGV4ID0gQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldCgwKTsKQEAgLTExMDEsMTAg
KzExMDEsMTAgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBhYgogICAg
IGppdC5hYnNEb3VibGUoU3BlY2lhbGl6ZWRUaHVua0pJVDo6ZnBSZWdUMCwgU3BlY2lhbGl6ZWRU
aHVua0pJVDo6ZnBSZWdUMSk7CiAgICAgaml0LnJldHVybkRvdWJsZShTcGVjaWFsaXplZFRodW5r
SklUOjpmcFJlZ1QxKTsKICNlbmRpZgotICAgIHJldHVybiBqaXQuZmluYWxpemUodm0tPmppdFN0
dWJzLT5jdGlOYXRpdmVUYWlsQ2FsbCh2bSksICJhYnMiKTsKKyAgICByZXR1cm4gaml0LmZpbmFs
aXplKHZtLmppdFN0dWJzLT5jdGlOYXRpdmVUYWlsQ2FsbCh2bSksICJhYnMiKTsKIH0KIAotTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBpbXVsVGh1bmtHZW5lcmF0b3IoVk0q
IHZtKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBpbXVsVGh1bmtHZW5l
cmF0b3IoVk0mIHZtKQogewogICAgIFNwZWNpYWxpemVkVGh1bmtKSVQgaml0KHZtLCAyKTsKICAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub25JbnRBcmcwSnVtcDsKQEAgLTExMzIsMjYgKzExMzIs
MjYgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBpbQogICAgIH0gZWxz
ZQogICAgICAgICBqaXQuYXBwZW5kRmFpbHVyZShub25JbnRBcmcxSnVtcCk7CiAKLSAgICByZXR1
cm4gaml0LmZpbmFsaXplKHZtLT5qaXRTdHVicy0+Y3RpTmF0aXZlVGFpbENhbGwodm0pLCAiaW11
bCIpOworICAgIHJldHVybiBqaXQuZmluYWxpemUodm0uaml0U3R1YnMtPmN0aU5hdGl2ZVRhaWxD
YWxsKHZtKSwgImltdWwiKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiByYW5kb21UaHVua0dlbmVyYXRvcihWTSogdm0pCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IHJhbmRvbVRodW5rR2VuZXJhdG9yKFZNJiB2bSkKIHsKICAgICBTcGVj
aWFsaXplZFRodW5rSklUIGppdCh2bSwgMCk7CiAgICAgaWYgKCFqaXQuc3VwcG9ydHNGbG9hdGlu
Z1BvaW50KCkpCi0gICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+OjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYodm0tPmppdFN0dWJzLT5jdGlOYXRpdmVD
YWxsKHZtKSk7CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+OjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYodm0uaml0U3R1YnMtPmN0aU5hdGl2ZUNh
bGwodm0pKTsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgaml0LmVtaXRSYW5kb21UaHVuaygq
dm0sIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdU
MSwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDIsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1Qz
LCBTcGVjaWFsaXplZFRodW5rSklUOjpmcFJlZ1QwKTsKKyAgICBqaXQuZW1pdFJhbmRvbVRodW5r
KHZtLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVn
VDEsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QyLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdU
MywgU3BlY2lhbGl6ZWRUaHVua0pJVDo6ZnBSZWdUMCk7CiAgICAgaml0LnJldHVybkRvdWJsZShT
cGVjaWFsaXplZFRodW5rSklUOjpmcFJlZ1QwKTsKIAotICAgIHJldHVybiBqaXQuZmluYWxpemUo
dm0tPmppdFN0dWJzLT5jdGlOYXRpdmVUYWlsQ2FsbCh2bSksICJyYW5kb20iKTsKKyAgICByZXR1
cm4gaml0LmZpbmFsaXplKHZtLmppdFN0dWJzLT5jdGlOYXRpdmVUYWlsQ2FsbCh2bSksICJyYW5k
b20iKTsKICNlbHNlCi0gICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz46OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZih2bS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNh
bGwodm0pKTsKKyAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
Pjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKHZtLmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKHZt
KSk7CiAjZW5kaWYKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBi
b3VuZFRoaXNOb0FyZ3NGdW5jdGlvbkNhbGxHZW5lcmF0b3IoVk0qIHZtKQorTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBib3VuZFRoaXNOb0FyZ3NGdW5jdGlvbkNhbGxHZW5l
cmF0b3IoVk0mIHZtKQogewogICAgIENDYWxsSGVscGVycyBqaXQ7CiAgICAgCkBAIC0xMTk0LDE1
ICsxMTk0LDE1IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gYm8KICAg
ICAKICAgICBqaXQubmVnUHRyKEdQUkluZm86OnJlZ1QyKTsKICAgICBqaXQuYWRkUHRyKENDYWxs
SGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIEdQUkluZm86OnJlZ1QyKTsKLSAgICBDQ2Fs
bEhlbHBlcnM6Okp1bXAgaGF2ZVN0YWNrU3BhY2UgPSBqaXQuYnJhbmNoUHRyKENDYWxsSGVscGVy
czo6QmVsb3dPckVxdWFsLCBDQ2FsbEhlbHBlcnM6OkFic29sdXRlQWRkcmVzcyh2bS0+YWRkcmVz
c09mU29mdFN0YWNrTGltaXQoKSksIEdQUkluZm86OnJlZ1QyKTsKKyAgICBDQ2FsbEhlbHBlcnM6
Okp1bXAgaGF2ZVN0YWNrU3BhY2UgPSBqaXQuYnJhbmNoUHRyKENDYWxsSGVscGVyczo6QmVsb3dP
ckVxdWFsLCBDQ2FsbEhlbHBlcnM6OkFic29sdXRlQWRkcmVzcyh2bS5hZGRyZXNzT2ZTb2Z0U3Rh
Y2tMaW1pdCgpKSwgR1BSSW5mbzo6cmVnVDIpOwogCiAgICAgLy8gVGhyb3cgU3RhY2sgT3ZlcmZs
b3cgZXhjZXB0aW9uCi0gICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNh
dmVzQnVmZmVyKHZtLT50b3BFbnRyeUZyYW1lKTsKLSAgICBqaXQuc2V0dXBBcmd1bWVudHM8ZGVj
bHR5cGUodGhyb3dTdGFja092ZXJmbG93RXJyb3JGcm9tVGh1bmspPihDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW1QdHIodm0pLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CisgICAgaml0LmNv
cHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtLnRvcEVudHJ5RnJh
bWUpOworICAgIGppdC5zZXR1cEFyZ3VtZW50czxkZWNsdHlwZSh0aHJvd1N0YWNrT3ZlcmZsb3dF
cnJvckZyb21UaHVuayk+KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigmdm0pLCBHUFJJbmZv
OjpjYWxsRnJhbWVSZWdpc3Rlcik7CiAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tUHRyKHRhZ0NGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KHRocm93U3RhY2tPdmVyZmxv
d0Vycm9yRnJvbVRodW5rKSksIEdQUkluZm86Om5vbkFyZ0dQUjApOwogICAgIGVtaXRQb2ludGVy
VmFsaWRhdGlvbihqaXQsIEdQUkluZm86Om5vbkFyZ0dQUjAsIE9wZXJhdGlvblB0clRhZyk7CiAg
ICAgaml0LmNhbGwoR1BSSW5mbzo6bm9uQXJnR1BSMCwgT3BlcmF0aW9uUHRyVGFnKTsKLSAgICBq
aXQuanVtcFRvRXhjZXB0aW9uSGFuZGxlcigqdm0pOworICAgIGppdC5qdW1wVG9FeGNlcHRpb25I
YW5kbGVyKHZtKTsKIAogICAgIGhhdmVTdGFja1NwYWNlLmxpbmsoJmppdCk7CiAgICAgaml0Lm1v
dmUoR1BSSW5mbzo6cmVnVDIsIENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwpA
QCAtMTI1MCw3ICsxMjUwLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiBibwogICAgIGppdC5yZXQoKTsKICAgICAKICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoaml0
LCBHTE9CQUxfVEhVTktfSUQpOwotICAgIGxpbmtCdWZmZXIubGluayhub0NvZGUsIENvZGVMb2Nh
dGlvbkxhYmVsPEpJVFRodW5rUHRyVGFnPih2bS0+aml0U3R1YnMtPmN0aU5hdGl2ZVRhaWxDYWxs
V2l0aG91dFNhdmVkVGFncyh2bSkpKTsKKyAgICBsaW5rQnVmZmVyLmxpbmsobm9Db2RlLCBDb2Rl
TG9jYXRpb25MYWJlbDxKSVRUaHVua1B0clRhZz4odm0uaml0U3R1YnMtPmN0aU5hdGl2ZVRhaWxD
YWxsV2l0aG91dFNhdmVkVGFncyh2bSkpKTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERSgKICAg
ICAgICAgbGlua0J1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJTcGVjaWFsaXplZCB0aHVuayBmb3Ig
Ym91bmQgZnVuY3Rpb24gY2FsbHMgd2l0aCBubyBhcmd1bWVudHMiKTsKIH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuaAkocmV2aXNpb24gMjQ5MTI4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAx
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTM1LDM5ICszNSwzOSBAQCBjbGFzcyBDYWxsTGlua0luZm87CiB0ZW1wbGF0
ZTxQdHJUYWc+IGNsYXNzIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjsKIGNsYXNzIFZNOwogCi1NYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHRocm93RXhjZXB0aW9uRnJvbUNhbGxT
bG93UGF0aEdlbmVyYXRvcihWTSopOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiB0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IoVk0mKTsKIAogTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBsaW5rQ2FsbFRodW5rKFZNKiwgQ2Fs
bExpbmtJbmZvJiwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCk7Ci1NYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IoVk0qKTsKLU1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gbGlua1BvbHltb3JwaGljQ2FsbFRodW5rR2Vu
ZXJhdG9yKFZNKik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGxpbmtD
YWxsVGh1bmtHZW5lcmF0b3IoVk0mKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gbGlua1BvbHltb3JwaGljQ2FsbFRodW5rR2VuZXJhdG9yKFZNJik7CiAKLU1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91dGluZVB0clRhZz4gdmlydHVhbFRodW5rRm9yKFZNKiwg
Q2FsbExpbmtJbmZvJik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJU
YWc+IHZpcnR1YWxUaHVua0ZvcihWTSYsIENhbGxMaW5rSW5mbyYpOwogCi1NYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG5hdGl2ZUNhbGxHZW5lcmF0b3IoVk0qKTsKLU1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gbmF0aXZlQ29uc3RydWN0R2VuZXJhdG9y
KFZNKik7Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG5hdGl2ZVRhaWxD
YWxsR2VuZXJhdG9yKFZNKik7Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
IG5hdGl2ZVRhaWxDYWxsV2l0aG91dFNhdmVkVGFnc0dlbmVyYXRvcihWTSopOwotTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBpbnRlcm5hbEZ1bmN0aW9uQ2FsbEdlbmVyYXRv
cihWTSopOwotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBpbnRlcm5hbEZ1
bmN0aW9uQ29uc3RydWN0R2VuZXJhdG9yKFZNKik7Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IGFyaXR5Rml4dXBHZW5lcmF0b3IoVk0qKTsKLU1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gdW5yZWFjaGFibGVHZW5lcmF0b3IoVk0qKTsKLU1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gc3RyaW5nR2V0QnlWYWxHZW5lcmF0b3IoVk0q
KTsKLQotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBjaGFyQ29kZUF0VGh1
bmtHZW5lcmF0b3IoVk0qKTsKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
Y2hhckF0VGh1bmtHZW5lcmF0b3IoVk0qKTsKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gY2x6MzJUaHVua0dlbmVyYXRvcihWTSopOwotTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPiBmcm9tQ2hhckNvZGVUaHVua0dlbmVyYXRvcihWTSopOwotTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBhYnNUaHVua0dlbmVyYXRvcihWTSopOwot
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBjZWlsVGh1bmtHZW5lcmF0b3Io
Vk0qKTsKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gZXhwVGh1bmtHZW5l
cmF0b3IoVk0qKTsKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gZmxvb3JU
aHVua0dlbmVyYXRvcihWTSopOwotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiBsb2dUaHVua0dlbmVyYXRvcihWTSopOwotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiByb3VuZFRodW5rR2VuZXJhdG9yKFZNKik7Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IHNxcnRUaHVua0dlbmVyYXRvcihWTSopOwotTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiBpbXVsVGh1bmtHZW5lcmF0b3IoVk0qKTsKLU1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gcmFuZG9tVGh1bmtHZW5lcmF0b3IoVk0qKTsK
LU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gdHJ1bmNUaHVua0dlbmVyYXRv
cihWTSopOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBuYXRpdmVDYWxs
R2VuZXJhdG9yKFZNJik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG5h
dGl2ZUNvbnN0cnVjdEdlbmVyYXRvcihWTSYpOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiBuYXRpdmVUYWlsQ2FsbEdlbmVyYXRvcihWTSYpOworTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiBuYXRpdmVUYWlsQ2FsbFdpdGhvdXRTYXZlZFRhZ3NHZW5l
cmF0b3IoVk0mKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gaW50ZXJu
YWxGdW5jdGlvbkNhbGxHZW5lcmF0b3IoVk0mKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gaW50ZXJuYWxGdW5jdGlvbkNvbnN0cnVjdEdlbmVyYXRvcihWTSYpOworTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBhcml0eUZpeHVwR2VuZXJhdG9yKFZN
Jik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHVucmVhY2hhYmxlR2Vu
ZXJhdG9yKFZNJik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHN0cmlu
Z0dldEJ5VmFsR2VuZXJhdG9yKFZNJik7CisKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gY2hhckNvZGVBdFRodW5rR2VuZXJhdG9yKFZNJik7CitNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IGNoYXJBdFRodW5rR2VuZXJhdG9yKFZNJik7CitNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGNsejMyVGh1bmtHZW5lcmF0b3IoVk0mKTsK
K01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gZnJvbUNoYXJDb2RlVGh1bmtH
ZW5lcmF0b3IoVk0mKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gYWJz
VGh1bmtHZW5lcmF0b3IoVk0mKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gY2VpbFRodW5rR2VuZXJhdG9yKFZNJik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IGV4cFRodW5rR2VuZXJhdG9yKFZNJik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IGZsb29yVGh1bmtHZW5lcmF0b3IoVk0mKTsKK01hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz4gbG9nVGh1bmtHZW5lcmF0b3IoVk0mKTsKK01hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gcm91bmRUaHVua0dlbmVyYXRvcihWTSYpOwor
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBzcXJ0VGh1bmtHZW5lcmF0b3Io
Vk0mKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gaW11bFRodW5rR2Vu
ZXJhdG9yKFZNJik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHJhbmRv
bVRodW5rR2VuZXJhdG9yKFZNJik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IHRydW5jVGh1bmtHZW5lcmF0b3IoVk0mKTsKIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBib3VuZFRoaXNOb0FyZ3NGdW5jdGlvbkNhbGxHZW5lcmF0b3IoVk0qKTsK
K01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gYm91bmRUaGlzTm9BcmdzRnVu
Y3Rpb25DYWxsR2VuZXJhdG9yKFZNJik7CiB9CiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkocmV2
aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1Bh
dGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzcsNyArNzcsNyBAQCBuYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIExMSW50IHsKIAogI2RlZmluZSBMTElOVF9CRUdJTl9OT19TRVRfUEMoKSBcCiAg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsgICAgICBcCi0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcigmdm0sIGV4ZWMpOyBcCisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2
bSwgZXhlYyk7IFwKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KQogCiAjaWZuZGVmIE5ERUJVRwpAQCAtNTI5LDcgKzUyOSw3IEBAIExMSU5UX1NMT1dfUEFUSF9E
RUNMKHN0YWNrX2NoZWNrKQogICAgIC8vIEl0J3Mgb2sgdG8gY3JlYXRlIHRoZSBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgaGVyZSBiZWZvcmUgd2UKICAgICAvLyBjb252ZXJ0VG9TdGFja092ZXJmbG93
RnJhbWUoKSBiZWNhdXNlIHRoaXMgZnVuY3Rpb24gaXMgYWx3YXlzIGNhbGxlZAogICAgIC8vIGFm
dGVyIHRoZSBmcmFtZSBoYXMgYmVlbiBwcm9wdWxhdGVkIHdpdGggYSBwcm9wZXIgQ29kZUJsb2Nr
IGFuZCBjYWxsZWUuCi0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMp
OworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogCiAgICAgTExJ
TlRfU0VUX1BDX0ZPUl9TVFVCUygpOwogCkBAIC0xNDQxLDcgKzE0NDEsNyBAQCBzdGF0aWMgU2xv
d1BhdGhSZXR1cm5UeXBlIGhhbmRsZUhvc3RDYWxsCiAgICAgICAgIEFTU0VSVChjYWxsVHlwZSAh
PSBDYWxsVHlwZTo6SlMpOwogICAgIAogICAgICAgICBpZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGU6
Okhvc3QpIHsKLSAgICAgICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBl
eGVjQ2FsbGVlKTsKKyAgICAgICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0s
IGV4ZWNDYWxsZWUpOwogICAgICAgICAgICAgZXhlY0NhbGxlZS0+c2V0Q2FsbGVlKGFzT2JqZWN0
KGNhbGxlZSkpOwogICAgICAgICAgICAgdm0uaG9zdENhbGxSZXR1cm5WYWx1ZSA9IEpTVmFsdWU6
OmRlY29kZShjYWxsRGF0YS5uYXRpdmUuZnVuY3Rpb24oZXhlY0NhbGxlZSkpOwogICAgICAgICAg
ICAgTExJTlRfQ0FMTF9SRVRVUk4oZXhlY0NhbGxlZSwgZXhlY0NhbGxlZSwgTExJbnQ6OmdldENv
ZGVQdHIoZ2V0SG9zdENhbGxSZXR1cm5WYWx1ZSksIENGdW5jdGlvblB0clRhZyk7CkBAIC0xNDYx
LDcgKzE0NjEsNyBAQCBzdGF0aWMgU2xvd1BhdGhSZXR1cm5UeXBlIGhhbmRsZUhvc3RDYWxsCiAg
ICAgQVNTRVJUKGNvbnN0cnVjdFR5cGUgIT0gQ29uc3RydWN0VHlwZTo6SlMpOwogICAgIAogICAg
IGlmIChjb25zdHJ1Y3RUeXBlID09IENvbnN0cnVjdFR5cGU6Okhvc3QpIHsKLSAgICAgICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWNDYWxsZWUpOworICAgICAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjQ2FsbGVlKTsKICAgICAgICAgZXhlY0Nh
bGxlZS0+c2V0Q2FsbGVlKGFzT2JqZWN0KGNhbGxlZSkpOwogICAgICAgICB2bS5ob3N0Q2FsbFJl
dHVyblZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGNvbnN0cnVjdERhdGEubmF0aXZlLmZ1bmN0aW9u
KGV4ZWNDYWxsZWUpKTsKICAgICAgICAgTExJTlRfQ0FMTF9SRVRVUk4oZXhlY0NhbGxlZSwgZXhl
Y0NhbGxlZSwgTExJbnQ6OmdldENvZGVQdHIoZ2V0SG9zdENhbGxSZXR1cm5WYWx1ZSksIENGdW5j
dGlvblB0clRhZyk7CkBAIC0xNzc3LDcgKzE3NzcsNyBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChz
bG93X3BhdGhfaGFuZGxlX2V4CiB7CiAgICAgTExJTlRfQkVHSU5fTk9fU0VUX1BDKCk7CiAgICAg
VU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIGdlbmVyaWNVbndpbmQoJnZtLCBleGVjKTsK
KyAgICBnZW5lcmljVW53aW5kKHZtLCBleGVjKTsKICAgICBMTElOVF9FTkRfSU1QTCgpOwogfQog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0FTVEJ1aWxkZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0FTVEJ1aWxkZXIuaAkocmV2aXNp
b24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9BU1RCdWlsZGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEw
LCAyMDEzLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzgsNyArNzgsNyBAQCBjbGFzcyBBU1RCdWlsZGVy
IHsKICAgICAgICAgT3BlcmF0b3IgbV9vcDsKICAgICB9OwogcHVibGljOgotICAgIEFTVEJ1aWxk
ZXIoVk0qIHZtLCBQYXJzZXJBcmVuYSYgcGFyc2VyQXJlbmEsIFNvdXJjZUNvZGUqIHNvdXJjZUNv
ZGUpCisgICAgQVNUQnVpbGRlcihWTSYgdm0sIFBhcnNlckFyZW5hJiBwYXJzZXJBcmVuYSwgU291
cmNlQ29kZSogc291cmNlQ29kZSkKICAgICAgICAgOiBtX3ZtKHZtKQogICAgICAgICAsIG1fcGFy
c2VyQXJlbmEocGFyc2VyQXJlbmEpCiAgICAgICAgICwgbV9zb3VyY2VDb2RlKHNvdXJjZUNvZGUp
CkBAIC0xOTYsMTEgKzE5NiwxMSBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0ltcG9ydE1ldGEoRXhw
cmVzc2lvbk5vZGUqIG5vZGUpIHsgcmV0dXJuIG5vZGUtPmlzSW1wb3J0TWV0YSgpOyB9CiAgICAg
RXhwcmVzc2lvbk5vZGUqIGNyZWF0ZVJlc29sdmUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2Nh
dGlvbiwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBzdGFy
dCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGVuZCkKICAgICB7Ci0gICAgICAgIGlmIChtX3ZtLT5w
cm9wZXJ0eU5hbWVzLT5hcmd1bWVudHMgPT0gaWRlbnQpCisgICAgICAgIGlmIChtX3ZtLnByb3Bl
cnR5TmFtZXMtPmFyZ3VtZW50cyA9PSBpZGVudCkKICAgICAgICAgICAgIHVzZXNBcmd1bWVudHMo
KTsKIAogICAgICAgICBpZiAoaWRlbnQuaXNTeW1ib2woKSkgewotICAgICAgICAgICAgaWYgKEJ5
dGVjb2RlSW50cmluc2ljTm9kZTo6RW1pdHRlclR5cGUgZW1pdHRlciA9IG1fdm0tPmJ5dGVjb2Rl
SW50cmluc2ljUmVnaXN0cnkoKS5sb29rdXAoaWRlbnQpKQorICAgICAgICAgICAgaWYgKEJ5dGVj
b2RlSW50cmluc2ljTm9kZTo6RW1pdHRlclR5cGUgZW1pdHRlciA9IG1fdm0uYnl0ZWNvZGVJbnRy
aW5zaWNSZWdpc3RyeSgpLmxvb2t1cChpZGVudCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG5l
dyAobV9wYXJzZXJBcmVuYSkgQnl0ZWNvZGVJbnRyaW5zaWNOb2RlKEJ5dGVjb2RlSW50cmluc2lj
Tm9kZTo6VHlwZTo6Q29uc3RhbnQsIGxvY2F0aW9uLCBlbWl0dGVyLCBpZGVudCwgbnVsbHB0ciwg
c3RhcnQsIHN0YXJ0LCBlbmQpOwogICAgICAgICB9CiAKQEAgLTQ4Miw3ICs0ODIsNyBAQCBwdWJs
aWM6CiAgICAgICAgIGZ1bmN0aW9uSW5mby5ib2R5LT5zZXRMb2MoZnVuY3Rpb25JbmZvLnN0YXJ0
TGluZSwgZnVuY3Rpb25JbmZvLmVuZExpbmUsIGxvY2F0aW9uLnN0YXJ0T2Zmc2V0LCBsb2NhdGlv
bi5saW5lU3RhcnRPZmZzZXQpOwogICAgICAgICBmdW5jdGlvbkluZm8uYm9keS0+c2V0RWNtYU5h
bWUoKm5hbWUpOwogICAgICAgICBTb3VyY2VDb2RlIHNvdXJjZSA9IG1fc291cmNlQ29kZS0+c3Vi
RXhwcmVzc2lvbihmdW5jdGlvbkluZm8uc3RhcnRPZmZzZXQsIGZ1bmN0aW9uSW5mby5lbmRPZmZz
ZXQsIGZ1bmN0aW9uSW5mby5zdGFydExpbmUsIGZ1bmN0aW9uSW5mby5wYXJhbWV0ZXJzU3RhcnRD
b2x1bW4pOwotICAgICAgICBNZXRob2REZWZpbml0aW9uTm9kZSogbWV0aG9kRGVmID0gbmV3ICht
X3BhcnNlckFyZW5hKSBNZXRob2REZWZpbml0aW9uTm9kZShsb2NhdGlvbiwgbV92bS0+cHJvcGVy
dHlOYW1lcy0+bnVsbElkZW50aWZpZXIsIGZ1bmN0aW9uSW5mby5ib2R5LCBzb3VyY2UpOworICAg
ICAgICBNZXRob2REZWZpbml0aW9uTm9kZSogbWV0aG9kRGVmID0gbmV3IChtX3BhcnNlckFyZW5h
KSBNZXRob2REZWZpbml0aW9uTm9kZShsb2NhdGlvbiwgbV92bS5wcm9wZXJ0eU5hbWVzLT5udWxs
SWRlbnRpZmllciwgZnVuY3Rpb25JbmZvLmJvZHksIHNvdXJjZSk7CiAgICAgICAgIHJldHVybiBu
ZXcgKG1fcGFyc2VyQXJlbmEpIFByb3BlcnR5Tm9kZSgqbmFtZSwgbWV0aG9kRGVmLCB0eXBlLCBQ
cm9wZXJ0eU5vZGU6OlVua25vd24sIFN1cGVyQmluZGluZzo6TmVlZGVkLCB0YWcpOwogICAgIH0K
IApAQCAtNDkyLDE3ICs0OTIsMTcgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQobmFtZSk7CiAg
ICAgICAgIGZ1bmN0aW9uSW5mby5ib2R5LT5zZXRMb2MoZnVuY3Rpb25JbmZvLnN0YXJ0TGluZSwg
ZnVuY3Rpb25JbmZvLmVuZExpbmUsIGxvY2F0aW9uLnN0YXJ0T2Zmc2V0LCBsb2NhdGlvbi5saW5l
U3RhcnRPZmZzZXQpOwogICAgICAgICBTb3VyY2VDb2RlIHNvdXJjZSA9IG1fc291cmNlQ29kZS0+
c3ViRXhwcmVzc2lvbihmdW5jdGlvbkluZm8uc3RhcnRPZmZzZXQsIGZ1bmN0aW9uSW5mby5lbmRP
ZmZzZXQsIGZ1bmN0aW9uSW5mby5zdGFydExpbmUsIGZ1bmN0aW9uSW5mby5wYXJhbWV0ZXJzU3Rh
cnRDb2x1bW4pOwotICAgICAgICBNZXRob2REZWZpbml0aW9uTm9kZSogbWV0aG9kRGVmID0gbmV3
IChtX3BhcnNlckFyZW5hKSBNZXRob2REZWZpbml0aW9uTm9kZShsb2NhdGlvbiwgbV92bS0+cHJv
cGVydHlOYW1lcy0+bnVsbElkZW50aWZpZXIsIGZ1bmN0aW9uSW5mby5ib2R5LCBzb3VyY2UpOwor
ICAgICAgICBNZXRob2REZWZpbml0aW9uTm9kZSogbWV0aG9kRGVmID0gbmV3IChtX3BhcnNlckFy
ZW5hKSBNZXRob2REZWZpbml0aW9uTm9kZShsb2NhdGlvbiwgbV92bS5wcm9wZXJ0eU5hbWVzLT5u
dWxsSWRlbnRpZmllciwgZnVuY3Rpb25JbmZvLmJvZHksIHNvdXJjZSk7CiAgICAgICAgIHJldHVy
biBuZXcgKG1fcGFyc2VyQXJlbmEpIFByb3BlcnR5Tm9kZShuYW1lLCBtZXRob2REZWYsIHR5cGUs
IFByb3BlcnR5Tm9kZTo6VW5rbm93biwgU3VwZXJCaW5kaW5nOjpOZWVkZWQsIHRhZyk7CiAgICAg
fQogCi0gICAgTkVWRVJfSU5MSU5FIFByb3BlcnR5Tm9kZSogY3JlYXRlR2V0dGVyT3JTZXR0ZXJQ
cm9wZXJ0eShWTSogdm0sIFBhcnNlckFyZW5hJiBwYXJzZXJBcmVuYSwgY29uc3QgSlNUb2tlbkxv
Y2F0aW9uJiBsb2NhdGlvbiwgUHJvcGVydHlOb2RlOjpUeXBlIHR5cGUsIGJvb2wsCisgICAgTkVW
RVJfSU5MSU5FIFByb3BlcnR5Tm9kZSogY3JlYXRlR2V0dGVyT3JTZXR0ZXJQcm9wZXJ0eShWTSYg
dm0sIFBhcnNlckFyZW5hJiBwYXJzZXJBcmVuYSwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2Nh
dGlvbiwgUHJvcGVydHlOb2RlOjpUeXBlIHR5cGUsIGJvb2wsCiAgICAgICAgIGRvdWJsZSBuYW1l
LCBjb25zdCBQYXJzZXJGdW5jdGlvbkluZm88QVNUQnVpbGRlcj4mIGZ1bmN0aW9uSW5mbywgQ2xh
c3NFbGVtZW50VGFnIHRhZykKICAgICB7CiAgICAgICAgIGZ1bmN0aW9uSW5mby5ib2R5LT5zZXRM
b2MoZnVuY3Rpb25JbmZvLnN0YXJ0TGluZSwgZnVuY3Rpb25JbmZvLmVuZExpbmUsIGxvY2F0aW9u
LnN0YXJ0T2Zmc2V0LCBsb2NhdGlvbi5saW5lU3RhcnRPZmZzZXQpOwogICAgICAgICBjb25zdCBJ
ZGVudGlmaWVyJiBpZGVudCA9IHBhcnNlckFyZW5hLmlkZW50aWZpZXJBcmVuYSgpLm1ha2VOdW1l
cmljSWRlbnRpZmllcih2bSwgbmFtZSk7CiAgICAgICAgIFNvdXJjZUNvZGUgc291cmNlID0gbV9z
b3VyY2VDb2RlLT5zdWJFeHByZXNzaW9uKGZ1bmN0aW9uSW5mby5zdGFydE9mZnNldCwgZnVuY3Rp
b25JbmZvLmVuZE9mZnNldCwgZnVuY3Rpb25JbmZvLnN0YXJ0TGluZSwgZnVuY3Rpb25JbmZvLnBh
cmFtZXRlcnNTdGFydENvbHVtbik7Ci0gICAgICAgIE1ldGhvZERlZmluaXRpb25Ob2RlKiBtZXRo
b2REZWYgPSBuZXcgKG1fcGFyc2VyQXJlbmEpIE1ldGhvZERlZmluaXRpb25Ob2RlKGxvY2F0aW9u
LCB2bS0+cHJvcGVydHlOYW1lcy0+bnVsbElkZW50aWZpZXIsIGZ1bmN0aW9uSW5mby5ib2R5LCBz
b3VyY2UpOworICAgICAgICBNZXRob2REZWZpbml0aW9uTm9kZSogbWV0aG9kRGVmID0gbmV3ICht
X3BhcnNlckFyZW5hKSBNZXRob2REZWZpbml0aW9uTm9kZShsb2NhdGlvbiwgdm0ucHJvcGVydHlO
YW1lcy0+bnVsbElkZW50aWZpZXIsIGZ1bmN0aW9uSW5mby5ib2R5LCBzb3VyY2UpOwogICAgICAg
ICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBQcm9wZXJ0eU5vZGUoaWRlbnQsIG1ldGhvZERl
ZiwgdHlwZSwgUHJvcGVydHlOb2RlOjpVbmtub3duLCBTdXBlckJpbmRpbmc6Ok5lZWRlZCwgdGFn
KTsKICAgICB9CiAKQEAgLTUyMSw3ICs1MjEsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBy
ZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBQcm9wZXJ0eU5vZGUobm9kZSwgdHlwZSwgcHV0VHlw
ZSwgc3VwZXJCaW5kaW5nLCB0YWcpOwogICAgIH0KLSAgICBQcm9wZXJ0eU5vZGUqIGNyZWF0ZVBy
b3BlcnR5KFZNKiB2bSwgUGFyc2VyQXJlbmEmIHBhcnNlckFyZW5hLCBkb3VibGUgcHJvcGVydHlO
YW1lLCBFeHByZXNzaW9uTm9kZSogbm9kZSwgUHJvcGVydHlOb2RlOjpUeXBlIHR5cGUsIFByb3Bl
cnR5Tm9kZTo6UHV0VHlwZSBwdXRUeXBlLCBib29sLCBTdXBlckJpbmRpbmcgc3VwZXJCaW5kaW5n
LCBDbGFzc0VsZW1lbnRUYWcgdGFnKQorICAgIFByb3BlcnR5Tm9kZSogY3JlYXRlUHJvcGVydHko
Vk0mIHZtLCBQYXJzZXJBcmVuYSYgcGFyc2VyQXJlbmEsIGRvdWJsZSBwcm9wZXJ0eU5hbWUsIEV4
cHJlc3Npb25Ob2RlKiBub2RlLCBQcm9wZXJ0eU5vZGU6OlR5cGUgdHlwZSwgUHJvcGVydHlOb2Rl
OjpQdXRUeXBlIHB1dFR5cGUsIGJvb2wsIFN1cGVyQmluZGluZyBzdXBlckJpbmRpbmcsIENsYXNz
RWxlbWVudFRhZyB0YWcpCiAgICAgewogICAgICAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5h
KSBQcm9wZXJ0eU5vZGUocGFyc2VyQXJlbmEuaWRlbnRpZmllckFyZW5hKCkubWFrZU51bWVyaWNJ
ZGVudGlmaWVyKHZtLCBwcm9wZXJ0eU5hbWUpLCBub2RlLCB0eXBlLCBwdXRUeXBlLCBzdXBlckJp
bmRpbmcsIHRhZyk7CiAgICAgfQpAQCAtNTU4LDcgKzU1OCw3IEBAIHB1YmxpYzoKICAgICB7CiAg
ICAgICAgIEZ1bmNEZWNsTm9kZSogZGVjbCA9IG5ldyAobV9wYXJzZXJBcmVuYSkgRnVuY0RlY2xO
b2RlKGxvY2F0aW9uLCAqZnVuY3Rpb25JbmZvLm5hbWUsIGZ1bmN0aW9uSW5mby5ib2R5LAogICAg
ICAgICAgICAgbV9zb3VyY2VDb2RlLT5zdWJFeHByZXNzaW9uKGZ1bmN0aW9uSW5mby5zdGFydE9m
ZnNldCwgZnVuY3Rpb25JbmZvLmVuZE9mZnNldCwgZnVuY3Rpb25JbmZvLnN0YXJ0TGluZSwgZnVu
Y3Rpb25JbmZvLnBhcmFtZXRlcnNTdGFydENvbHVtbikpOwotICAgICAgICBpZiAoKmZ1bmN0aW9u
SW5mby5uYW1lID09IG1fdm0tPnByb3BlcnR5TmFtZXMtPmFyZ3VtZW50cykKKyAgICAgICAgaWYg
KCpmdW5jdGlvbkluZm8ubmFtZSA9PSBtX3ZtLnByb3BlcnR5TmFtZXMtPmFyZ3VtZW50cykKICAg
ICAgICAgICAgIHVzZXNBcmd1bWVudHMoKTsKICAgICAgICAgZnVuY3Rpb25JbmZvLmJvZHktPnNl
dExvYyhmdW5jdGlvbkluZm8uc3RhcnRMaW5lLCBmdW5jdGlvbkluZm8uZW5kTGluZSwgbG9jYXRp
b24uc3RhcnRPZmZzZXQsIGxvY2F0aW9uLmxpbmVTdGFydE9mZnNldCk7CiAgICAgICAgIHJldHVy
biBkZWNsOwpAQCAtMTEzMyw3ICsxMTMzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHN0YXRp
Y19jYXN0PENsYXNzRXhwck5vZGUqPihkZWZhdWx0VmFsdWUpLT5zZXRFY21hTmFtZShpZGVudCk7
CiAgICAgfQogCi0gICAgVk0qIG1fdm07CisgICAgVk0mIG1fdm07CiAgICAgUGFyc2VyQXJlbmEm
IG1fcGFyc2VyQXJlbmE7CiAgICAgU291cmNlQ29kZSogbV9zb3VyY2VDb2RlOwogICAgIFNjb3Bl
IG1fc2NvcGU7CkBAIC0xNDA1LDcgKzE0MDUsNyBAQCBFeHByZXNzaW9uTm9kZSogQVNUQnVpbGRl
cjo6bWFrZUZ1bmN0aW9uCiAgICAgaWYgKGZ1bmMtPmlzUmVzb2x2ZU5vZGUoKSkgewogICAgICAg
ICBSZXNvbHZlTm9kZSogcmVzb2x2ZSA9IHN0YXRpY19jYXN0PFJlc29sdmVOb2RlKj4oZnVuYyk7
CiAgICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIgPSByZXNvbHZlLT5pZGVudGlm
aWVyKCk7Ci0gICAgICAgIGlmIChpZGVudGlmaWVyID09IG1fdm0tPnByb3BlcnR5TmFtZXMtPmV2
YWwpIHsKKyAgICAgICAgaWYgKGlkZW50aWZpZXIgPT0gbV92bS5wcm9wZXJ0eU5hbWVzLT5ldmFs
KSB7CiAgICAgICAgICAgICB1c2VzRXZhbCgpOwogICAgICAgICAgICAgcmV0dXJuIG5ldyAobV9w
YXJzZXJBcmVuYSkgRXZhbEZ1bmN0aW9uQ2FsbE5vZGUobG9jYXRpb24sIGFyZ3MsIGRpdm90LCBk
aXZvdFN0YXJ0LCBkaXZvdEVuZCk7CiAgICAgICAgIH0KQEAgLTE0MjAsOSArMTQyMCw5IEBAIEV4
cHJlc3Npb25Ob2RlKiBBU1RCdWlsZGVyOjptYWtlRnVuY3Rpb24KICAgICBBU1NFUlQoZnVuYy0+
aXNEb3RBY2Nlc3Nvck5vZGUoKSk7CiAgICAgRG90QWNjZXNzb3JOb2RlKiBkb3QgPSBzdGF0aWNf
Y2FzdDxEb3RBY2Nlc3Nvck5vZGUqPihmdW5jKTsKICAgICBGdW5jdGlvbkNhbGxEb3ROb2RlKiBu
b2RlID0gbnVsbHB0cjsKLSAgICBpZiAoIXByZXZpb3VzQmFzZVdhc1N1cGVyICYmIChkb3QtPmlk
ZW50aWZpZXIoKSA9PSBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5jYWxsUHVi
bGljTmFtZSgpIHx8IGRvdC0+aWRlbnRpZmllcigpID09IG1fdm0tPnByb3BlcnR5TmFtZXMtPmJ1
aWx0aW5OYW1lcygpLmNhbGxQcml2YXRlTmFtZSgpKSkKKyAgICBpZiAoIXByZXZpb3VzQmFzZVdh
c1N1cGVyICYmIChkb3QtPmlkZW50aWZpZXIoKSA9PSBtX3ZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0
aW5OYW1lcygpLmNhbGxQdWJsaWNOYW1lKCkgfHwgZG90LT5pZGVudGlmaWVyKCkgPT0gbV92bS5w
cm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5jYWxsUHJpdmF0ZU5hbWUoKSkpCiAgICAgICAg
IG5vZGUgPSBuZXcgKG1fcGFyc2VyQXJlbmEpIENhbGxGdW5jdGlvbkNhbGxEb3ROb2RlKGxvY2F0
aW9uLCBkb3QtPmJhc2UoKSwgZG90LT5pZGVudGlmaWVyKCksIGFyZ3MsIGRpdm90LCBkaXZvdFN0
YXJ0LCBkaXZvdEVuZCwgY2FsbE9yQXBwbHlDaGlsZERlcHRoKTsKLSAgICBlbHNlIGlmICghcHJl
dmlvdXNCYXNlV2FzU3VwZXIgJiYgKGRvdC0+aWRlbnRpZmllcigpID09IG1fdm0tPnByb3BlcnR5
TmFtZXMtPmJ1aWx0aW5OYW1lcygpLmFwcGx5UHVibGljTmFtZSgpIHx8IGRvdC0+aWRlbnRpZmll
cigpID09IG1fdm0tPnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLmFwcGx5UHJpdmF0ZU5h
bWUoKSkpIHsKKyAgICBlbHNlIGlmICghcHJldmlvdXNCYXNlV2FzU3VwZXIgJiYgKGRvdC0+aWRl
bnRpZmllcigpID09IG1fdm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkuYXBwbHlQdWJs
aWNOYW1lKCkgfHwgZG90LT5pZGVudGlmaWVyKCkgPT0gbV92bS5wcm9wZXJ0eU5hbWVzLT5idWls
dGluTmFtZXMoKS5hcHBseVByaXZhdGVOYW1lKCkpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBUaGlz
IGNoZWNrIGlzIG9ubHkgbmVlZGVkIGJlY2F1c2Ugd2UgaGF2ZW4ndCB0YXVnaHQgdGhlIGJ5dGVj
b2RlIGdlbmVyYXRvciB0byBpbmxpbmUKICAgICAgICAgLy8gUmVmbGVjdC5hcHBseSB5ZXQuIFNl
ZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkwNjY4LgogICAgICAg
ICBpZiAoIWRvdC0+YmFzZSgpLT5pc1Jlc29sdmVOb2RlKCkgfHwgc3RhdGljX2Nhc3Q8UmVzb2x2
ZU5vZGUqPihkb3QtPmJhc2UoKSktPmlkZW50aWZpZXIoKSAhPSAiUmVmbGVjdCIpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0xleGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0xleGVyLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9MZXhlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRl
biAocG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTcgQXBwbGUgSW5j
LiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE5IEFwcGxl
IEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgQ2FtZXJv
biBad2FyaWNoIChjd3p3YXJpY2hAdXdhdGVybG9vLmNhKQogICogIENvcHlyaWdodCAoQykgMjAx
MCBab2x0YW4gSGVyY3plZyAoemhlcmN6ZWdAaW5mLnUtc3plZ2VkLmh1KQogICogIENvcHlyaWdo
dCAoQykgMjAxMiBNYXRoaWFzIEJ5bmVucyAobWF0aGlhc0BxaXdpLmJlKQpAQCAtNDkzLDcgKzQ5
Myw3IEBAIHN0YXRpYyBjb25zdGV4cHIgY29uc3QgTENoYXIgc2luZ2xlQ2hhcmEKIH07CiAKIHRl
bXBsYXRlIDx0eXBlbmFtZSBUPgotTGV4ZXI8VD46OkxleGVyKFZNKiB2bSwgSlNQYXJzZXJCdWls
dGluTW9kZSBidWlsdGluTW9kZSwgSlNQYXJzZXJTY3JpcHRNb2RlIHNjcmlwdE1vZGUpCitMZXhl
cjxUPjo6TGV4ZXIoVk0mIHZtLCBKU1BhcnNlckJ1aWx0aW5Nb2RlIGJ1aWx0aW5Nb2RlLCBKU1Bh
cnNlclNjcmlwdE1vZGUgc2NyaXB0TW9kZSkKICAgICA6IG1faXNSZXBhcnNpbmdGdW5jdGlvbihm
YWxzZSkKICAgICAsIG1fdm0odm0pCiAgICAgLCBtX3BhcnNpbmdCdWlsdGluRnVuY3Rpb24oYnVp
bHRpbk1vZGUgPT0gSlNQYXJzZXJCdWlsdGluTW9kZTo6QnVpbHRpbikKQEAgLTk2MCwxNCArOTYw
LDE0IEBAIHRlbXBsYXRlIDxib29sIHNob3VsZENyZWF0ZUlkZW50aWZpZXI+IEEKICAgICAgICAg
aW50IGlkZW50aWZpZXJMZW5ndGggPSBjdXJyZW50U291cmNlUHRyKCkgLSBpZGVudGlmaWVyU3Rh
cnQ7CiAgICAgICAgIGlkZW50ID0gbWFrZUlkZW50aWZpZXIoaWRlbnRpZmllclN0YXJ0LCBpZGVu
dGlmaWVyTGVuZ3RoKTsKICAgICAgICAgaWYgKG1fcGFyc2luZ0J1aWx0aW5GdW5jdGlvbikgewot
ICAgICAgICAgICAgaWYgKCFpc1NhZmVCdWlsdGluSWRlbnRpZmllcigqbV92bSwgaWRlbnQpICYm
ICFpc1ByaXZhdGVOYW1lKSB7CisgICAgICAgICAgICBpZiAoIWlzU2FmZUJ1aWx0aW5JZGVudGlm
aWVyKG1fdm0sIGlkZW50KSAmJiAhaXNQcml2YXRlTmFtZSkgewogICAgICAgICAgICAgICAgIG1f
bGV4RXJyb3JNZXNzYWdlID0gbWFrZVN0cmluZygiVGhlIHVzZSBvZiAnIiwgaWRlbnQtPnN0cmlu
ZygpLCAiJyBpcyBkaXNhbGxvd2VkIGluIGJ1aWx0aW4gZnVuY3Rpb25zLiIpOwogICAgICAgICAg
ICAgICAgIHJldHVybiBFUlJPUlRPSzsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChp
c1ByaXZhdGVOYW1lKQotICAgICAgICAgICAgICAgIGlkZW50ID0gJm1fYXJlbmEtPm1ha2VJZGVu
dGlmaWVyKG1fdm0sIG1fdm0tPnByb3BlcnR5TmFtZXMtPmxvb2tVcFByaXZhdGVOYW1lKCppZGVu
dCkpOwotICAgICAgICAgICAgZWxzZSBpZiAoKmlkZW50ID09IG1fdm0tPnByb3BlcnR5TmFtZXMt
PnVuZGVmaW5lZEtleXdvcmQpCi0gICAgICAgICAgICAgICAgdG9rZW5EYXRhLT5pZGVudCA9ICZt
X3ZtLT5wcm9wZXJ0eU5hbWVzLT51bmRlZmluZWRQcml2YXRlTmFtZTsKKyAgICAgICAgICAgICAg
ICBpZGVudCA9ICZtX2FyZW5hLT5tYWtlSWRlbnRpZmllcihtX3ZtLCBtX3ZtLnByb3BlcnR5TmFt
ZXMtPmxvb2tVcFByaXZhdGVOYW1lKCppZGVudCkpOworICAgICAgICAgICAgZWxzZSBpZiAoKmlk
ZW50ID09IG1fdm0ucHJvcGVydHlOYW1lcy0+dW5kZWZpbmVkS2V5d29yZCkKKyAgICAgICAgICAg
ICAgICB0b2tlbkRhdGEtPmlkZW50ID0gJm1fdm0ucHJvcGVydHlOYW1lcy0+dW5kZWZpbmVkUHJp
dmF0ZU5hbWU7CiAgICAgICAgICAgICBpZiAoIWlkZW50KQogICAgICAgICAgICAgICAgIHJldHVy
biBJTlZBTElEX1BSSVZBVEVfTkFNRV9FUlJPUlRPSzsKICAgICAgICAgfQpAQCAtMTAzOCwxNCAr
MTAzOCwxNCBAQCB0ZW1wbGF0ZSA8Ym9vbCBzaG91bGRDcmVhdGVJZGVudGlmaWVyPiBBCiAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgIGlkZW50ID0gbWFrZUlkZW50aWZpZXIoaWRlbnRpZmllclN0
YXJ0LCBpZGVudGlmaWVyTGVuZ3RoKTsKICAgICAgICAgaWYgKG1fcGFyc2luZ0J1aWx0aW5GdW5j
dGlvbikgewotICAgICAgICAgICAgaWYgKCFpc1NhZmVCdWlsdGluSWRlbnRpZmllcigqbV92bSwg
aWRlbnQpICYmICFpc1ByaXZhdGVOYW1lKSB7CisgICAgICAgICAgICBpZiAoIWlzU2FmZUJ1aWx0
aW5JZGVudGlmaWVyKG1fdm0sIGlkZW50KSAmJiAhaXNQcml2YXRlTmFtZSkgewogICAgICAgICAg
ICAgICAgIG1fbGV4RXJyb3JNZXNzYWdlID0gbWFrZVN0cmluZygiVGhlIHVzZSBvZiAnIiwgaWRl
bnQtPnN0cmluZygpLCAiJyBpcyBkaXNhbGxvd2VkIGluIGJ1aWx0aW4gZnVuY3Rpb25zLiIpOwog
ICAgICAgICAgICAgICAgIHJldHVybiBFUlJPUlRPSzsKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIGlmIChpc1ByaXZhdGVOYW1lKQotICAgICAgICAgICAgICAgIGlkZW50ID0gJm1fYXJlbmEt
Pm1ha2VJZGVudGlmaWVyKG1fdm0sIG1fdm0tPnByb3BlcnR5TmFtZXMtPmxvb2tVcFByaXZhdGVO
YW1lKCppZGVudCkpOwotICAgICAgICAgICAgZWxzZSBpZiAoKmlkZW50ID09IG1fdm0tPnByb3Bl
cnR5TmFtZXMtPnVuZGVmaW5lZEtleXdvcmQpCi0gICAgICAgICAgICAgICAgdG9rZW5EYXRhLT5p
ZGVudCA9ICZtX3ZtLT5wcm9wZXJ0eU5hbWVzLT51bmRlZmluZWRQcml2YXRlTmFtZTsKKyAgICAg
ICAgICAgICAgICBpZGVudCA9ICZtX2FyZW5hLT5tYWtlSWRlbnRpZmllcihtX3ZtLCBtX3ZtLnBy
b3BlcnR5TmFtZXMtPmxvb2tVcFByaXZhdGVOYW1lKCppZGVudCkpOworICAgICAgICAgICAgZWxz
ZSBpZiAoKmlkZW50ID09IG1fdm0ucHJvcGVydHlOYW1lcy0+dW5kZWZpbmVkS2V5d29yZCkKKyAg
ICAgICAgICAgICAgICB0b2tlbkRhdGEtPmlkZW50ID0gJm1fdm0ucHJvcGVydHlOYW1lcy0+dW5k
ZWZpbmVkUHJpdmF0ZU5hbWU7CiAgICAgICAgICAgICBpZiAoIWlkZW50KQogICAgICAgICAgICAg
ICAgIHJldHVybiBJTlZBTElEX1BSSVZBVEVfTkFNRV9FUlJPUlRPSzsKICAgICAgICAgfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9MZXhlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTGV4ZXIuaAkocmV2aXNpb24gMjQ5MTI4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9MZXhlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4g
KHBvcnRlbkBrZGUub3JnKQotICogIENvcHlyaWdodCAoQykgMjAwMiwgMjAwMywgMjAwNCwgMjAw
NSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMSwgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAyLTIwMTkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogIENvcHlyaWdodCAoQykgMjAxMCBab2x0YW4gSGVy
Y3plZyAoemhlcmN6ZWdAaW5mLnUtc3plZ2VkLmh1KQogICoKICAqICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC01MCw3ICs1
MCw3IEBAIGNsYXNzIExleGVyIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIAogcHVi
bGljOgotICAgIExleGVyKFZNKiwgSlNQYXJzZXJCdWlsdGluTW9kZSwgSlNQYXJzZXJTY3JpcHRN
b2RlKTsKKyAgICBMZXhlcihWTSYsIEpTUGFyc2VyQnVpbHRpbk1vZGUsIEpTUGFyc2VyU2NyaXB0
TW9kZSk7CiAgICAgfkxleGVyKCk7CiAKICAgICAvLyBDaGFyYWN0ZXIgbWFuaXB1bGF0aW9uIGZ1
bmN0aW9ucy4KQEAgLTIyNyw3ICsyMjcsNyBAQCBwcml2YXRlOgogCiAgICAgSWRlbnRpZmllckFy
ZW5hKiBtX2FyZW5hOwogCi0gICAgVk0qIG1fdm07CisgICAgVk0mIG1fdm07CiAgICAgYm9vbCBt
X3BhcnNpbmdCdWlsdGluRnVuY3Rpb247CiAgICAgSlNQYXJzZXJTY3JpcHRNb2RlIG1fc2NyaXB0
TW9kZTsKIH07CkBAIC0zOTIsNyArMzkyLDcgQEAgQUxXQVlTX0lOTElORSBKU1Rva2VuVHlwZSBM
ZXhlcjxUPjo6bGV4RQogICAgIHRva2VuUmVjb3JkLT5tX2VuZFBvc2l0aW9uID0gY3VycmVudFBv
c2l0aW9uKCk7CiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogICAgIGlmIChtX3BhcnNpbmdCdWlsdGlu
RnVuY3Rpb24pIHsKLSAgICAgICAgaWYgKCFpc1NhZmVCdWlsdGluSWRlbnRpZmllcigqbV92bSwg
dG9rZW5EYXRhLT5pZGVudCkpCisgICAgICAgIGlmICghaXNTYWZlQnVpbHRpbklkZW50aWZpZXIo
bV92bSwgdG9rZW5EYXRhLT5pZGVudCkpCiAgICAgICAgICAgICByZXR1cm4gRVJST1JUT0s7CiAg
ICAgfQogI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL01vZHVsZUFu
YWx5emVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL01v
ZHVsZUFuYWx5emVyLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3BhcnNlci9Nb2R1bGVBbmFseXplci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNiw4ICsz
Niw4IEBAIG5hbWVzcGFjZSBKU0MgewogCiAKIE1vZHVsZUFuYWx5emVyOjpNb2R1bGVBbmFseXpl
cihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIG1vZHVsZUtleSwgY29uc3QgU291
cmNlQ29kZSYgc291cmNlQ29kZSwgY29uc3QgVmFyaWFibGVFbnZpcm9ubWVudCYgZGVjbGFyZWRW
YXJpYWJsZXMsIGNvbnN0IFZhcmlhYmxlRW52aXJvbm1lbnQmIGxleGljYWxWYXJpYWJsZXMpCi0g
ICAgOiBtX3ZtKCZleGVjLT52bSgpKQotICAgICwgbV9tb2R1bGVSZWNvcmQoKm1fdm0sIEpTTW9k
dWxlUmVjb3JkOjpjcmVhdGUoZXhlYywgKm1fdm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3Qo
KS0+bW9kdWxlUmVjb3JkU3RydWN0dXJlKCksIG1vZHVsZUtleSwgc291cmNlQ29kZSwgZGVjbGFy
ZWRWYXJpYWJsZXMsIGxleGljYWxWYXJpYWJsZXMpKQorICAgIDogbV92bShleGVjLT52bSgpKQor
ICAgICwgbV9tb2R1bGVSZWNvcmQobV92bSwgSlNNb2R1bGVSZWNvcmQ6OmNyZWF0ZShleGVjLCBt
X3ZtLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPm1vZHVsZVJlY29yZFN0cnVjdHVyZSgp
LCBtb2R1bGVLZXksIHNvdXJjZUNvZGUsIGRlY2xhcmVkVmFyaWFibGVzLCBsZXhpY2FsVmFyaWFi
bGVzKSkKIHsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Nb2R1bGVB
bmFseXplci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTW9k
dWxlQW5hbHl6ZXIuaAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3BhcnNlci9Nb2R1bGVBbmFseXplci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM5LDE0ICszOSwxNCBAQCBw
dWJsaWM6CiAKICAgICBKU01vZHVsZVJlY29yZCogYW5hbHl6ZShNb2R1bGVQcm9ncmFtTm9kZSYp
OwogCi0gICAgVk0mIHZtKCkgeyByZXR1cm4gKm1fdm07IH0KKyAgICBWTSYgdm0oKSB7IHJldHVy
biBtX3ZtOyB9CiAKICAgICBKU01vZHVsZVJlY29yZCogbW9kdWxlUmVjb3JkKCkgeyByZXR1cm4g
bV9tb2R1bGVSZWNvcmQuZ2V0KCk7IH0KIAogcHJpdmF0ZToKICAgICB2b2lkIGV4cG9ydFZhcmlh
YmxlKE1vZHVsZVByb2dyYW1Ob2RlJiwgY29uc3QgUmVmUHRyPFVuaXF1ZWRTdHJpbmdJbXBsPiYs
IGNvbnN0IFZhcmlhYmxlRW52aXJvbm1lbnRFbnRyeSYpOwogCi0gICAgVk0qIG1fdm07CisgICAg
Vk0mIG1fdm07CiAgICAgU3Ryb25nPEpTTW9kdWxlUmVjb3JkPiBtX21vZHVsZVJlY29yZDsKIH07
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5jcHAJKHJldmlzaW9u
IDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTI2LDcgKzEyNiw3IEBAIHZvaWQgUGFyc2VyPExleGVyVHlwZT46Omxv
Z0Vycm9yKGJvb2wgc2gKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIExleGVyVHlwZT4KLVBhcnNl
cjxMZXhlclR5cGU+OjpQYXJzZXIoVk0qIHZtLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIEpT
UGFyc2VyQnVpbHRpbk1vZGUgYnVpbHRpbk1vZGUsIEpTUGFyc2VyU3RyaWN0TW9kZSBzdHJpY3RN
b2RlLCBKU1BhcnNlclNjcmlwdE1vZGUgc2NyaXB0TW9kZSwgU291cmNlUGFyc2VNb2RlIHBhcnNl
TW9kZSwgU3VwZXJCaW5kaW5nIHN1cGVyQmluZGluZywgQ29uc3RydWN0b3JLaW5kIGRlZmF1bHRD
b25zdHJ1Y3RvcktpbmQsIERlcml2ZWRDb250ZXh0VHlwZSBkZXJpdmVkQ29udGV4dFR5cGUsIGJv
b2wgaXNFdmFsQ29udGV4dCwgRXZhbENvbnRleHRUeXBlIGV2YWxDb250ZXh0VHlwZSwgRGVidWdn
ZXJQYXJzZURhdGEqIGRlYnVnZ2VyUGFyc2VEYXRhKQorUGFyc2VyPExleGVyVHlwZT46OlBhcnNl
cihWTSYgdm0sIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgSlNQYXJzZXJCdWlsdGluTW9kZSBi
dWlsdGluTW9kZSwgSlNQYXJzZXJTdHJpY3RNb2RlIHN0cmljdE1vZGUsIEpTUGFyc2VyU2NyaXB0
TW9kZSBzY3JpcHRNb2RlLCBTb3VyY2VQYXJzZU1vZGUgcGFyc2VNb2RlLCBTdXBlckJpbmRpbmcg
c3VwZXJCaW5kaW5nLCBDb25zdHJ1Y3RvcktpbmQgZGVmYXVsdENvbnN0cnVjdG9yS2luZCwgRGVy
aXZlZENvbnRleHRUeXBlIGRlcml2ZWRDb250ZXh0VHlwZSwgYm9vbCBpc0V2YWxDb250ZXh0LCBF
dmFsQ29udGV4dFR5cGUgZXZhbENvbnRleHRUeXBlLCBEZWJ1Z2dlclBhcnNlRGF0YSogZGVidWdn
ZXJQYXJzZURhdGEpCiAgICAgOiBtX3ZtKHZtKQogICAgICwgbV9zb3VyY2UoJnNvdXJjZSkKICAg
ICAsIG1faGFzU3RhY2tPdmVyZmxvdyhmYWxzZSkKQEAgLTE0Niw3ICsxNDYsNyBAQCBQYXJzZXI8
TGV4ZXJUeXBlPjo6UGFyc2VyKFZNKiB2bSwgY29uc3QgCiAgICAgbV90b2tlbi5tX2xvY2F0aW9u
LnN0YXJ0T2Zmc2V0ID0gc291cmNlLnN0YXJ0T2Zmc2V0KCk7CiAgICAgbV90b2tlbi5tX2xvY2F0
aW9uLmVuZE9mZnNldCA9IHNvdXJjZS5zdGFydE9mZnNldCgpOwogICAgIG1fdG9rZW4ubV9sb2Nh
dGlvbi5saW5lU3RhcnRPZmZzZXQgPSBzb3VyY2Uuc3RhcnRPZmZzZXQoKTsKLSAgICBtX2Z1bmN0
aW9uQ2FjaGUgPSB2bS0+YWRkU291cmNlUHJvdmlkZXJDYWNoZShzb3VyY2UucHJvdmlkZXIoKSk7
CisgICAgbV9mdW5jdGlvbkNhY2hlID0gdm0uYWRkU291cmNlUHJvdmlkZXJDYWNoZShzb3VyY2Uu
cHJvdmlkZXIoKSk7CiAgICAgbV9leHByZXNzaW9uRXJyb3JDbGFzc2lmaWVyID0gbnVsbHB0cjsK
IAogICAgIFNjb3BlUmVmIHNjb3BlID0gcHVzaFNjb3BlKCk7CkBAIC0yMTIsNyArMjEyLDcgQEAg
U3RyaW5nIFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUlubmVyKGNvbgogewogICAgIFN0cmluZyBw
YXJzZUVycm9yID0gU3RyaW5nKCk7CiAKLSAgICBBU1RCdWlsZGVyIGNvbnRleHQoY29uc3RfY2Fz
dDxWTSo+KG1fdm0pLCBtX3BhcnNlckFyZW5hLCBjb25zdF9jYXN0PFNvdXJjZUNvZGUqPihtX3Nv
dXJjZSkpOworICAgIEFTVEJ1aWxkZXIgY29udGV4dChjb25zdF9jYXN0PFZNJj4obV92bSksIG1f
cGFyc2VyQXJlbmEsIGNvbnN0X2Nhc3Q8U291cmNlQ29kZSo+KG1fc291cmNlKSk7CiAgICAgU2Nv
cGVSZWYgc2NvcGUgPSBjdXJyZW50U2NvcGUoKTsKICAgICBzY29wZS0+c2V0SXNMZXhpY2FsU2Nv
cGUoKTsKICAgICBTZXRGb3JTY29wZTxGdW5jdGlvblBhcnNlUGhhc2U+IGZ1bmN0aW9uUGFyc2VQ
aGFzZVBvaXNvbmVyKG1fcGFyc2VyU3RhdGUuZnVuY3Rpb25QYXJzZVBoYXNlLCBGdW5jdGlvblBh
cnNlUGhhc2U6OkJvZHkpOwpAQCAtMjc2LDcgKzI3Niw3IEBAIFN0cmluZyBQYXJzZXI8TGV4ZXJU
eXBlPjo6cGFyc2VJbm5lcihjb24KICAgICAgICAgdmFyRGVjbGFyYXRpb25zLm1hcmtWYXJpYWJs
ZUFzQ2FwdHVyZWQoZW50cnkpOwogCiAgICAgaWYgKGlzR2VuZXJhdG9yV3JhcHBlclBhcnNlTW9k
ZShwYXJzZU1vZGUpIHx8IGlzQXN5bmNGdW5jdGlvbk9yQXN5bmNHZW5lcmF0b3JXcmFwcGVyUGFy
c2VNb2RlKHBhcnNlTW9kZSkpIHsKLSAgICAgICAgaWYgKHNjb3BlLT51c2VkVmFyaWFibGVzQ29u
dGFpbnMobV92bS0+cHJvcGVydHlOYW1lcy0+YXJndW1lbnRzLmltcGwoKSkpCisgICAgICAgIGlm
IChzY29wZS0+dXNlZFZhcmlhYmxlc0NvbnRhaW5zKG1fdm0ucHJvcGVydHlOYW1lcy0+YXJndW1l
bnRzLmltcGwoKSkpCiAgICAgICAgICAgICBjb250ZXh0LnByb3BhZ2F0ZUFyZ3VtZW50c1VzZSgp
OwogICAgIH0KIApAQCAtMjk0LDcgKzI5NCw3IEBAIFN0cmluZyBQYXJzZXI8TGV4ZXJUeXBlPjo6
cGFyc2VJbm5lcihjb24KICAgICAgICAgY29uc3QgSGFzaFNldDxVbmlxdWVkU3RyaW5nSW1wbCo+
JiBjbG9zZWRWYXJpYWJsZUNhbmRpZGF0ZXMgPSBzY29wZS0+Y2xvc2VkVmFyaWFibGVDYW5kaWRh
dGVzKCk7CiAgICAgICAgIGZvciAoVW5pcXVlZFN0cmluZ0ltcGwqIGNhbmRpZGF0ZSA6IGNsb3Nl
ZFZhcmlhYmxlQ2FuZGlkYXRlcykgewogICAgICAgICAgICAgLy8gRklYTUU6IFdlIGFsbG93IGFz
eW5jIHRvIGxlYWsgYmVjYXVzZSBpdCBhcHBlYXJpbmcgYXMgYSBjbG9zZWQgdmFyaWFibGUgaXMg
YSBzaWRlIGVmZmVjdCBvZiB0cnlpbmcgdG8gcGFyc2UgYXN5bmMgYXJyb3cgZnVuY3Rpb25zLgot
ICAgICAgICAgICAgaWYgKCFsZXhpY2FsVmFyaWFibGVzLmNvbnRhaW5zKGNhbmRpZGF0ZSkgJiYg
IXZhckRlY2xhcmF0aW9ucy5jb250YWlucyhjYW5kaWRhdGUpICYmICFjYW5kaWRhdGUtPmlzU3lt
Ym9sKCkgJiYgY2FuZGlkYXRlICE9IG1fdm0tPnByb3BlcnR5TmFtZXMtPmFzeW5jLmltcGwoKSkg
eworICAgICAgICAgICAgaWYgKCFsZXhpY2FsVmFyaWFibGVzLmNvbnRhaW5zKGNhbmRpZGF0ZSkg
JiYgIXZhckRlY2xhcmF0aW9ucy5jb250YWlucyhjYW5kaWRhdGUpICYmICFjYW5kaWRhdGUtPmlz
U3ltYm9sKCkgJiYgY2FuZGlkYXRlICE9IG1fdm0ucHJvcGVydHlOYW1lcy0+YXN5bmMuaW1wbCgp
KSB7CiAgICAgICAgICAgICAgICAgZGF0YUxvZygiQmFkIGdsb2JhbCBjYXB0dXJlIGluIGJ1aWx0
aW46ICciLCBjYW5kaWRhdGUsICInXG4iKTsKICAgICAgICAgICAgICAgICBkYXRhTG9nKG1fc291
cmNlLT52aWV3KCkpOwogICAgICAgICAgICAgICAgIENSQVNIKCk7CkBAIC0zMzAsNyArMzMwLDcg
QEAgYm9vbCBQYXJzZXI8TGV4ZXJUeXBlPjo6aXNBcnJvd0Z1bmN0aW9uUAogICAgICAgICAgICAg
bmV4dCgpOwogICAgICAgICAgICAgaXNBcnJvd0Z1bmN0aW9uID0gbWF0Y2goQVJST1dGVU5DVElP
Tik7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBTeW50YXhDaGVja2VyIHN5bnRheENo
ZWNrZXIoY29uc3RfY2FzdDxWTSo+KG1fdm0pLCBtX2xleGVyLmdldCgpKTsKKyAgICAgICAgICAg
IFN5bnRheENoZWNrZXIgc3ludGF4Q2hlY2tlcihjb25zdF9jYXN0PFZNJj4obV92bSksIG1fbGV4
ZXIuZ2V0KCkpOwogICAgICAgICAgICAgLy8gV2UgbWFrZSBmYWtlIHNjb3BlLCBvdGhlcndpc2Ug
cGFyc2VGb3JtYWxQYXJhbWV0ZXJzIHdpbGwgYWRkIHZhcmlhYmxlIHRvIGN1cnJlbnQgc2NvcGUg
dGhhdCBsZWFkIHRvIGVycm9ycwogICAgICAgICAgICAgQXV0b1BvcFNjb3BlUmVmIGZha2VTY29w
ZSh0aGlzLCBwdXNoU2NvcGUoKSk7CiAgICAgICAgICAgICBmYWtlU2NvcGUtPnNldFNvdXJjZVBh
cnNlTW9kZShTb3VyY2VQYXJzZU1vZGU6OkFycm93RnVuY3Rpb25Nb2RlKTsKQEAgLTM3NywxOSAr
Mzc3LDE5IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVNvdXJjZUUKICAgICAg
ICAgaWYgKHNob3VsZENoZWNrRm9yVXNlU3RyaWN0KSB7CiAgICAgICAgICAgICBpZiAoZGlyZWN0
aXZlKSB7CiAgICAgICAgICAgICAgICAgLy8gInVzZSBzdHJpY3QiIG11c3QgYmUgdGhlIGV4YWN0
IGxpdGVyYWwgd2l0aG91dCBlc2NhcGUgc2VxdWVuY2VzIG9yIGxpbmUgY29udGludWF0aW9uLgot
ICAgICAgICAgICAgICAgIGlmIChkaXJlY3RpdmVMaXRlcmFsTGVuZ3RoID09IGxlbmd0aE9mVXNl
U3RyaWN0TGl0ZXJhbCAmJiBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT51c2VTdHJpY3RJZGVudGlmaWVy
ID09ICpkaXJlY3RpdmUpIHsKKyAgICAgICAgICAgICAgICBpZiAoZGlyZWN0aXZlTGl0ZXJhbExl
bmd0aCA9PSBsZW5ndGhPZlVzZVN0cmljdExpdGVyYWwgJiYgbV92bS5wcm9wZXJ0eU5hbWVzLT51
c2VTdHJpY3RJZGVudGlmaWVyID09ICpkaXJlY3RpdmUpIHsKICAgICAgICAgICAgICAgICAgICAg
c2V0U3RyaWN0TW9kZSgpOwogICAgICAgICAgICAgICAgICAgICBzaG91bGRDaGVja0ZvclVzZVN0
cmljdCA9IGZhbHNlOyAvLyBXZSBzYXcgInVzZSBzdHJpY3QiLCB0aGVyZSBpcyBubyBuZWVkIHRv
IGtlZXAgY2hlY2tpbmcgZm9yIGl0LgogICAgICAgICAgICAgICAgICAgICBpZiAoIWlzVmFsaWRT
dHJpY3RNb2RlKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX3BhcnNlclN0YXRl
Lmxhc3RGdW5jdGlvbk5hbWUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobV92
bS0+cHJvcGVydHlOYW1lcy0+YXJndW1lbnRzID09ICptX3BhcnNlclN0YXRlLmxhc3RGdW5jdGlv
bk5hbWUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1fdm0ucHJvcGVydHlOYW1l
cy0+YXJndW1lbnRzID09ICptX3BhcnNlclN0YXRlLmxhc3RGdW5jdGlvbk5hbWUpCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNlbWFudGljRmFpbCgiQ2Fubm90IG5hbWUgYSBmdW5j
dGlvbiAnYXJndW1lbnRzJyBpbiBzdHJpY3QgbW9kZSIpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5ldmFsID09ICptX3BhcnNlclN0YXRlLmxh
c3RGdW5jdGlvbk5hbWUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1fdm0ucHJv
cGVydHlOYW1lcy0+ZXZhbCA9PSAqbV9wYXJzZXJTdGF0ZS5sYXN0RnVuY3Rpb25OYW1lKQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZW1hbnRpY0ZhaWwoIkNhbm5vdCBuYW1lIGEg
ZnVuY3Rpb24gJ2V2YWwnIGluIHN0cmljdCBtb2RlIik7CiAgICAgICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzRGVjbGFyZWRWYXJpYWJsZShtX3Zt
LT5wcm9wZXJ0eU5hbWVzLT5hcmd1bWVudHMpKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KGhhc0RlY2xhcmVkVmFyaWFibGUobV92bS5wcm9wZXJ0eU5hbWVzLT5hcmd1bWVudHMpKQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNlbWFudGljRmFpbCgiQ2Fubm90IGRlY2xhcmUgYSB2
YXJpYWJsZSBuYW1lZCAnYXJndW1lbnRzJyBpbiBzdHJpY3QgbW9kZSIpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKGhhc0RlY2xhcmVkVmFyaWFibGUobV92bS0+cHJvcGVydHlOYW1lcy0+
ZXZhbCkpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzRGVjbGFyZWRWYXJpYWJsZSht
X3ZtLnByb3BlcnR5TmFtZXMtPmV2YWwpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNl
bWFudGljRmFpbCgiQ2Fubm90IGRlY2xhcmUgYSB2YXJpYWJsZSBuYW1lZCAnZXZhbCcgaW4gc3Ry
aWN0IG1vZGUiKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHNlbWFudGljRmFpbElmVHJ1ZShj
dXJyZW50U2NvcGUoKS0+aGFzTm9uU2ltcGxlUGFyYW1ldGVyTGlzdCgpLCAiJ3VzZSBzdHJpY3Qn
IGRpcmVjdGl2ZSBub3QgYWxsb3dlZCBpbnNpZGUgYSBmdW5jdGlvbiB3aXRoIGEgbm9uLXNpbXBs
ZSBwYXJhbWV0ZXIgbGlzdCIpOwogICAgICAgICAgICAgICAgICAgICAgICAgc2VtYW50aWNGYWls
SWZGYWxzZShpc1ZhbGlkU3RyaWN0TW9kZSgpLCAiSW52YWxpZCBwYXJhbWV0ZXJzIG9yIGZ1bmN0
aW9uIG5hbWUgaW4gc3RyaWN0IG1vZGUiKTsKQEAgLTQyMSw3ICs0MjEsNyBAQCB0ZW1wbGF0ZSA8
dHlwZW5hbWUgTGV4ZXJUeXBlPgogdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU291
cmNlRWxlbWVudHMgUGFyc2VyPExleGVyVHlwZT46OnBhcnNlTW9kdWxlU291cmNlRWxlbWVudHMo
VHJlZUJ1aWxkZXImIGNvbnRleHQsIFNvdXJjZVBhcnNlTW9kZSBwYXJzZU1vZGUpCiB7CiAgICAg
VHJlZVNvdXJjZUVsZW1lbnRzIHNvdXJjZUVsZW1lbnRzID0gY29udGV4dC5jcmVhdGVTb3VyY2VF
bGVtZW50cygpOwotICAgIFN5bnRheENoZWNrZXIgc3ludGF4Q2hlY2tlcihjb25zdF9jYXN0PFZN
Kj4obV92bSksIG1fbGV4ZXIuZ2V0KCkpOworICAgIFN5bnRheENoZWNrZXIgc3ludGF4Q2hlY2tl
cihjb25zdF9jYXN0PFZNJj4obV92bSksIG1fbGV4ZXIuZ2V0KCkpOwogCiAgICAgd2hpbGUgKHRy
dWUpIHsKICAgICAgICAgVHJlZVN0YXRlbWVudCBzdGF0ZW1lbnQgPSAwOwpAQCAtNTAwLDcgKzUw
MCw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVNvdXJjZUUKICAgICBpbnQg
cGFyYW1ldGVyc1N0YXJ0ID0gbV90b2tlbi5tX2xvY2F0aW9uLnN0YXJ0T2Zmc2V0OwogCiAgICAg
UGFyc2VyRnVuY3Rpb25JbmZvPFRyZWVCdWlsZGVyPiBpbmZvOwotICAgIGluZm8ubmFtZSA9ICZt
X3ZtLT5wcm9wZXJ0eU5hbWVzLT5udWxsSWRlbnRpZmllcjsKKyAgICBpbmZvLm5hbWUgPSAmbV92
bS5wcm9wZXJ0eU5hbWVzLT5udWxsSWRlbnRpZmllcjsKICAgICBjcmVhdGVHZW5lcmF0b3JQYXJh
bWV0ZXJzKGNvbnRleHQsIGluZm8ucGFyYW1ldGVyQ291bnQpOwogICAgIGluZm8uc3RhcnRPZmZz
ZXQgPSBwYXJhbWV0ZXJzU3RhcnQ7CiAgICAgaW5mby5zdGFydExpbmUgPSB0b2tlbkxpbmUoKTsK
QEAgLTUxMSw3ICs1MTEsNyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTb3Vy
Y2VFCiAgICAgICAgIGdlbmVyYXRvckJvZHlTY29wZS0+c2V0Q29uc3RydWN0b3JLaW5kKENvbnN0
cnVjdG9yS2luZDo6Tm9uZSk7CiAgICAgICAgIGdlbmVyYXRvckJvZHlTY29wZS0+c2V0RXhwZWN0
ZWRTdXBlckJpbmRpbmcobV9zdXBlckJpbmRpbmcpOwogCi0gICAgICAgIFN5bnRheENoZWNrZXIg
Z2VuZXJhdG9yRnVuY3Rpb25Db250ZXh0KGNvbnN0X2Nhc3Q8Vk0qPihtX3ZtKSwgbV9sZXhlci5n
ZXQoKSk7CisgICAgICAgIFN5bnRheENoZWNrZXIgZ2VuZXJhdG9yRnVuY3Rpb25Db250ZXh0KGNv
bnN0X2Nhc3Q8Vk0mPihtX3ZtKSwgbV9sZXhlci5nZXQoKSk7CiAgICAgICAgIGZhaWxJZkZhbHNl
KHBhcnNlU291cmNlRWxlbWVudHMoZ2VuZXJhdG9yRnVuY3Rpb25Db250ZXh0LCBtb2RlKSwgIkNh
bm5vdCBwYXJzZSB0aGUgYm9keSBvZiBhIGdlbmVyYXRvciIpOwogICAgICAgICBwb3BTY29wZShn
ZW5lcmF0b3JCb2R5U2NvcGUsIFRyZWVCdWlsZGVyOjpOZWVkc0ZyZWVWYXJpYWJsZUluZm8pOwog
ICAgIH0KQEAgLTU0Miw3ICs1NDIsNyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRy
ZWVTb3VyY2VFCiAgICAgaW50IHBhcmFtZXRlcnNTdGFydCA9IG1fdG9rZW4ubV9sb2NhdGlvbi5z
dGFydE9mZnNldDsKIAogICAgIFBhcnNlckZ1bmN0aW9uSW5mbzxUcmVlQnVpbGRlcj4gaW5mbzsK
LSAgICBpbmZvLm5hbWUgPSAmbV92bS0+cHJvcGVydHlOYW1lcy0+bnVsbElkZW50aWZpZXI7Cisg
ICAgaW5mby5uYW1lID0gJm1fdm0ucHJvcGVydHlOYW1lcy0+bnVsbElkZW50aWZpZXI7CiAgICAg
Y3JlYXRlR2VuZXJhdG9yUGFyYW1ldGVycyhjb250ZXh0LCBpbmZvLnBhcmFtZXRlckNvdW50KTsK
ICAgICBpbmZvLnN0YXJ0T2Zmc2V0ID0gcGFyYW1ldGVyc1N0YXJ0OwogICAgIGluZm8uc3RhcnRM
aW5lID0gdG9rZW5MaW5lKCk7CkBAIC01NTIsNyArNTUyLDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRy
ZWVCdWlsZGVyPiBUcmVlU291cmNlRQogICAgIHsKICAgICAgICAgQXV0b1BvcFNjb3BlUmVmIGFz
eW5jRnVuY3Rpb25Cb2R5U2NvcGUodGhpcywgcHVzaFNjb3BlKCkpOwogICAgICAgICBhc3luY0Z1
bmN0aW9uQm9keVNjb3BlLT5zZXRTb3VyY2VQYXJzZU1vZGUoaW5uZXJQYXJzZU1vZGUpOwotICAg
ICAgICBTeW50YXhDaGVja2VyIHN5bnRheENoZWNrZXIoY29uc3RfY2FzdDxWTSo+KG1fdm0pLCBt
X2xleGVyLmdldCgpKTsKKyAgICAgICAgU3ludGF4Q2hlY2tlciBzeW50YXhDaGVja2VyKGNvbnN0
X2Nhc3Q8Vk0mPihtX3ZtKSwgbV9sZXhlci5nZXQoKSk7CiAgICAgICAgIGlmIChpc0Fycm93RnVu
Y3Rpb25Cb2R5RXhwcmVzc2lvbikgewogICAgICAgICAgICAgaWYgKG1fZGVidWdnZXJQYXJzZURh
dGEpCiAgICAgICAgICAgICAgICAgZmFpbElmRmFsc2UocGFyc2VBcnJvd0Z1bmN0aW9uU2luZ2xl
RXhwcmVzc2lvbkJvZHlTb3VyY2VFbGVtZW50cyhjb250ZXh0KSwgIkNhbm5vdCBwYXJzZSB0aGUg
Ym9keSBvZiBhc3luYyBhcnJvdyBmdW5jdGlvbiIpOwpAQCAtNTkzLDcgKzU5Myw3IEBAIHRlbXBs
YXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVNvdXJjZUUKICAgICBpbnQgcGFyYW1ldGVyc1N0
YXJ0ID0gbV90b2tlbi5tX2xvY2F0aW9uLnN0YXJ0T2Zmc2V0OwogICAgIAogICAgIFBhcnNlckZ1
bmN0aW9uSW5mbzxUcmVlQnVpbGRlcj4gaW5mbzsKLSAgICBpbmZvLm5hbWUgPSAmbV92bS0+cHJv
cGVydHlOYW1lcy0+bnVsbElkZW50aWZpZXI7CisgICAgaW5mby5uYW1lID0gJm1fdm0ucHJvcGVy
dHlOYW1lcy0+bnVsbElkZW50aWZpZXI7CiAgICAgY3JlYXRlR2VuZXJhdG9yUGFyYW1ldGVycyhj
b250ZXh0LCBpbmZvLnBhcmFtZXRlckNvdW50KTsKICAgICBpbmZvLnN0YXJ0T2Zmc2V0ID0gcGFy
YW1ldGVyc1N0YXJ0OwogICAgIGluZm8uc3RhcnRMaW5lID0gdG9rZW5MaW5lKCk7CkBAIC02MDEs
NyArNjAxLDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU291cmNlRQogICAg
IHsKICAgICAgICAgQXV0b1BvcFNjb3BlUmVmIGFzeW5jRnVuY3Rpb25Cb2R5U2NvcGUodGhpcywg
cHVzaFNjb3BlKCkpOwogICAgICAgICBhc3luY0Z1bmN0aW9uQm9keVNjb3BlLT5zZXRTb3VyY2VQ
YXJzZU1vZGUoaW5uZXJQYXJzZU1vZGUpOwotICAgICAgICBTeW50YXhDaGVja2VyIHN5bnRheENo
ZWNrZXIoY29uc3RfY2FzdDxWTSo+KG1fdm0pLCBtX2xleGVyLmdldCgpKTsKKyAgICAgICAgU3lu
dGF4Q2hlY2tlciBzeW50YXhDaGVja2VyKGNvbnN0X2Nhc3Q8Vk0mPihtX3ZtKSwgbV9sZXhlci5n
ZXQoKSk7CiAgICAgICAgIGlmIChpc0Fycm93RnVuY3Rpb25Cb2R5RXhwcmVzc2lvbikgewogICAg
ICAgICAgICAgaWYgKG1fZGVidWdnZXJQYXJzZURhdGEpCiAgICAgICAgICAgICAgICAgZmFpbElm
RmFsc2UocGFyc2VBcnJvd0Z1bmN0aW9uU2luZ2xlRXhwcmVzc2lvbkJvZHlTb3VyY2VFbGVtZW50
cyhjb250ZXh0KSwgIkNhbm5vdCBwYXJzZSB0aGUgYm9keSBvZiBhc3luYyBhcnJvdyBmdW5jdGlv
biIpOwpAQCAtNjM4LDcgKzYzOCw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJl
ZVNvdXJjZUUKICAgICAgICAgc3RhdGVtZW50ID0gcGFyc2VGdW5jdGlvbkRlY2xhcmF0aW9uKGNv
bnRleHQsIEV4cG9ydFR5cGU6Ok5vdEV4cG9ydGVkLCBEZWNsYXJhdGlvbkRlZmF1bHRDb250ZXh0
OjpTdGFuZGFyZCwgZnVuY3Rpb25Db25zdHJ1Y3RvclBhcmFtZXRlcnNFbmRQb3NpdGlvbik7CiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgSURFTlQ6Ci0gICAgICAgIGlmICgqbV90b2tlbi5tX2Rh
dGEuaWRlbnQgPT0gbV92bS0+cHJvcGVydHlOYW1lcy0+YXN5bmMgJiYgIW1fdG9rZW4ubV9kYXRh
LmVzY2FwZWQpIHsKKyAgICAgICAgaWYgKCptX3Rva2VuLm1fZGF0YS5pZGVudCA9PSBtX3ZtLnBy
b3BlcnR5TmFtZXMtPmFzeW5jICYmICFtX3Rva2VuLm1fZGF0YS5lc2NhcGVkKSB7CiAgICAgICAg
ICAgICBuZXh0KCk7CiAgICAgICAgICAgICBmYWlsSWZGYWxzZShtYXRjaChGVU5DVElPTikgJiYg
IW1fbGV4ZXItPmhhc0xpbmVUZXJtaW5hdG9yQmVmb3JlVG9rZW4oKSwgIkNhbm5vdCBwYXJzZSB0
aGUgYXN5bmMgZnVuY3Rpb24iKTsKICAgICAgICAgICAgIHN0YXRlbWVudCA9IHBhcnNlQXN5bmNG
dW5jdGlvbkRlY2xhcmF0aW9uKGNvbnRleHQsIEV4cG9ydFR5cGU6Ok5vdEV4cG9ydGVkLCBEZWNs
YXJhdGlvbkRlZmF1bHRDb250ZXh0OjpTdGFuZGFyZCwgZnVuY3Rpb25Db25zdHJ1Y3RvclBhcmFt
ZXRlcnNFbmRQb3NpdGlvbik7CkBAIC03MDcsNyArNzA3LDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRy
ZWVCdWlsZGVyPiBUcmVlU3RhdGVtZQogICAgICAgICByZXN1bHQgPSBwYXJzZUZ1bmN0aW9uRGVj
bGFyYXRpb24oY29udGV4dCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSURFTlQ6Ci0gICAg
ICAgIGlmIChVTkxJS0VMWSgqbV90b2tlbi5tX2RhdGEuaWRlbnQgPT0gbV92bS0+cHJvcGVydHlO
YW1lcy0+YXN5bmMgJiYgIW1fdG9rZW4ubV9kYXRhLmVzY2FwZWQpKSB7CisgICAgICAgIGlmIChV
TkxJS0VMWSgqbV90b2tlbi5tX2RhdGEuaWRlbnQgPT0gbV92bS5wcm9wZXJ0eU5hbWVzLT5hc3lu
YyAmJiAhbV90b2tlbi5tX2RhdGEuZXNjYXBlZCkpIHsKICAgICAgICAgICAgIC8vIEVhZ2VybHkg
cGFyc2UgYXMgQXN5bmNGdW5jdGlvbkRlY2xhcmF0aW9uLiBUaGlzIGlzIHRoZSB1bmNvbW1vbiBj
YXNlLAogICAgICAgICAgICAgLy8gYnV0IGNvdWxkIGJlIG1pc3Rha2VubHkgcGFyc2VkIGFzIGFu
IEFzeW5jRnVuY3Rpb25FeHByZXNzaW9uLgogICAgICAgICAgICAgU2F2ZVBvaW50IHNhdmVQb2lu
dCA9IGNyZWF0ZVNhdmVQb2ludCgpOwpAQCAtMTA0MCw3ICsxMDQwLDcgQEAgdGVtcGxhdGUgPGNs
YXNzIFRyZWVCdWlsZGVyPiBUcmVlRGVzdHJ1YwogICAgIH0KIAogICAgIGlmIChzdHJpY3RNb2Rl
KCkgJiYgbV9wYXJzZXJTdGF0ZS5sYXN0SWRlbnRpZmllciAmJiBjb250ZXh0LmlzUmVzb2x2ZShl
bGVtZW50KSkgewotICAgICAgICBib29sIGlzRXZhbE9yQXJndW1lbnRzID0gbV92bS0+cHJvcGVy
dHlOYW1lcy0+ZXZhbCA9PSAqbV9wYXJzZXJTdGF0ZS5sYXN0SWRlbnRpZmllciB8fCBtX3ZtLT5w
cm9wZXJ0eU5hbWVzLT5hcmd1bWVudHMgPT0gKm1fcGFyc2VyU3RhdGUubGFzdElkZW50aWZpZXI7
CisgICAgICAgIGJvb2wgaXNFdmFsT3JBcmd1bWVudHMgPSBtX3ZtLnByb3BlcnR5TmFtZXMtPmV2
YWwgPT0gKm1fcGFyc2VyU3RhdGUubGFzdElkZW50aWZpZXIgfHwgbV92bS5wcm9wZXJ0eU5hbWVz
LT5hcmd1bWVudHMgPT0gKm1fcGFyc2VyU3RhdGUubGFzdElkZW50aWZpZXI7CiAgICAgICAgIGlm
IChpc0V2YWxPckFyZ3VtZW50cyAmJiBzdHJpY3RNb2RlKCkpCiAgICAgICAgICAgICByZWNsYXNz
aWZ5RXhwcmVzc2lvbkVycm9yKEVycm9ySW5kaWNhdGVzUGF0dGVybiwgRXJyb3JJbmRpY2F0ZXNO
b3RoaW5nKTsKICAgICAgICAgZmFpbElmVHJ1ZUlmU3RyaWN0KGlzRXZhbE9yQXJndW1lbnRzLCAi
Q2Fubm90IG1vZGlmeSAnIiwgbV9wYXJzZXJTdGF0ZS5sYXN0SWRlbnRpZmllci0+aW1wbCgpLCAi
JyBpbiBzdHJpY3QgbW9kZSIpOwpAQCAtMTA2OCw3ICsxMDY4LDcgQEAgdGVtcGxhdGUgPGNsYXNz
IFRyZWVCdWlsZGVyPiBUcmVlRGVzdHJ1YwogICAgIHNlbWFudGljRmFpbElmRmFsc2UoZWxlbWVu
dCAmJiBjb250ZXh0LmlzQXNzaWdubWVudExvY2F0aW9uKGVsZW1lbnQpLCAiSW52YWxpZCBkZXN0
cnVjdHVyaW5nIGFzc2lnbm1lbnQgdGFyZ2V0Iik7CiAKICAgICBpZiAoc3RyaWN0TW9kZSgpICYm
IG1fcGFyc2VyU3RhdGUubGFzdElkZW50aWZpZXIgJiYgY29udGV4dC5pc1Jlc29sdmUoZWxlbWVu
dCkpIHsKLSAgICAgICAgYm9vbCBpc0V2YWxPckFyZ3VtZW50cyA9IG1fdm0tPnByb3BlcnR5TmFt
ZXMtPmV2YWwgPT0gKm1fcGFyc2VyU3RhdGUubGFzdElkZW50aWZpZXIgfHwgbV92bS0+cHJvcGVy
dHlOYW1lcy0+YXJndW1lbnRzID09ICptX3BhcnNlclN0YXRlLmxhc3RJZGVudGlmaWVyOworICAg
ICAgICBib29sIGlzRXZhbE9yQXJndW1lbnRzID0gbV92bS5wcm9wZXJ0eU5hbWVzLT5ldmFsID09
ICptX3BhcnNlclN0YXRlLmxhc3RJZGVudGlmaWVyIHx8IG1fdm0ucHJvcGVydHlOYW1lcy0+YXJn
dW1lbnRzID09ICptX3BhcnNlclN0YXRlLmxhc3RJZGVudGlmaWVyOwogICAgICAgICBmYWlsSWZU
cnVlSWZTdHJpY3QoaXNFdmFsT3JBcmd1bWVudHMsICJDYW5ub3QgbW9kaWZ5ICciLCBtX3BhcnNl
clN0YXRlLmxhc3RJZGVudGlmaWVyLT5pbXBsKCksICInIGluIHN0cmljdCBtb2RlIik7CiAgICAg
fQogCkBAIC0xMTk2LDcgKzExOTYsNyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRy
ZWVEZXN0cnVjCiAgICAgICAgICAgICAgICAgcHJvcGFnYXRlRXJyb3IoKTsKICAgICAgICAgICAg
ICAgICBpZiAoIWlubmVyUGF0dGVybikKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgICAgICAgICAgICAgY29udGV4dC5hcHBlbmRPYmplY3RQYXR0ZXJuUmVzdEVudHJ5KCptX3Zt
LCBvYmplY3RQYXR0ZXJuLCBsb2NhdGlvbiwgaW5uZXJQYXR0ZXJuKTsKKyAgICAgICAgICAgICAg
ICBjb250ZXh0LmFwcGVuZE9iamVjdFBhdHRlcm5SZXN0RW50cnkobV92bSwgb2JqZWN0UGF0dGVy
biwgbG9jYXRpb24sIGlubmVyUGF0dGVybik7CiAgICAgICAgICAgICAgICAgcmVzdEVsZW1lbnRX
YXNGb3VuZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgY29udGV4dC5zZXRDb250YWluc09iamVj
dFJlc3RFbGVtZW50KG9iamVjdFBhdHRlcm4sIHJlc3RFbGVtZW50V2FzRm91bmQpOwogICAgICAg
ICAgICAgICAgIGJyZWFrOwpAQCAtMTIxNSw3ICsxMjE1LDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRy
ZWVCdWlsZGVyPiBUcmVlRGVzdHJ1YwogICAgICAgICAgICAgICAgICAgICBpbm5lclBhdHRlcm4g
PSBwYXJzZUJpbmRpbmdPckFzc2lnbm1lbnRFbGVtZW50KGNvbnRleHQsIGtpbmQsIGV4cG9ydFR5
cGUsIGR1cGxpY2F0ZUlkZW50aWZpZXIsIGhhc0Rlc3RydWN0dXJpbmdQYXR0ZXJuLCBiaW5kaW5n
Q29udGV4dCwgZGVwdGggKyAxKTsKICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAg
ICAgICAgICAgaWYgKGtpbmQgPT0gRGVzdHJ1Y3R1cmluZ0tpbmQ6OkRlc3RydWN0dXJlVG9FeHBy
ZXNzaW9ucykgewotICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpc0V2YWxPckFyZ3VtZW50
cyA9IG1fdm0tPnByb3BlcnR5TmFtZXMtPmV2YWwgPT0gKnByb3BlcnR5TmFtZSB8fCBtX3ZtLT5w
cm9wZXJ0eU5hbWVzLT5hcmd1bWVudHMgPT0gKnByb3BlcnR5TmFtZTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGJvb2wgaXNFdmFsT3JBcmd1bWVudHMgPSBtX3ZtLnByb3BlcnR5TmFtZXMtPmV2
YWwgPT0gKnByb3BlcnR5TmFtZSB8fCBtX3ZtLnByb3BlcnR5TmFtZXMtPmFyZ3VtZW50cyA9PSAq
cHJvcGVydHlOYW1lOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzRXZhbE9yQXJndW1l
bnRzICYmIHN0cmljdE1vZGUoKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNsYXNz
aWZ5RXhwcmVzc2lvbkVycm9yKEVycm9ySW5kaWNhdGVzUGF0dGVybiwgRXJyb3JJbmRpY2F0ZXNO
b3RoaW5nKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGZhaWxJZlRydWVJZlN0cmljdChpc0V2
YWxPckFyZ3VtZW50cywgIkNhbm5vdCBtb2RpZnkgJyIsIHByb3BlcnR5TmFtZS0+aW1wbCgpLCAi
JyBpbiBzdHJpY3QgbW9kZSIpOwpAQCAtMTIyOCw3ICsxMjI4LDcgQEAgdGVtcGxhdGUgPGNsYXNz
IFRyZWVCdWlsZGVyPiBUcmVlRGVzdHJ1YwogICAgICAgICAgICAgICAgIHN3aXRjaCAobV90b2tl
bi5tX3R5cGUpIHsKICAgICAgICAgICAgICAgICBjYXNlIERPVUJMRToKICAgICAgICAgICAgICAg
ICBjYXNlIElOVEVHRVI6Ci0gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZSA9ICZtX3Bh
cnNlckFyZW5hLmlkZW50aWZpZXJBcmVuYSgpLm1ha2VOdW1lcmljSWRlbnRpZmllcihjb25zdF9j
YXN0PFZNKj4obV92bSksIG1fdG9rZW4ubV9kYXRhLmRvdWJsZVZhbHVlKTsKKyAgICAgICAgICAg
ICAgICAgICAgcHJvcGVydHlOYW1lID0gJm1fcGFyc2VyQXJlbmEuaWRlbnRpZmllckFyZW5hKCku
bWFrZU51bWVyaWNJZGVudGlmaWVyKGNvbnN0X2Nhc3Q8Vk0mPihtX3ZtKSwgbV90b2tlbi5tX2Rh
dGEuZG91YmxlVmFsdWUpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICBjYXNlIFNUUklORzoKICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lID0gbV90
b2tlbi5tX2RhdGEuaWRlbnQ7CkBAIC0xMjY3LDcgKzEyNjcsNyBAQCB0ZW1wbGF0ZSA8Y2xhc3Mg
VHJlZUJ1aWxkZXI+IFRyZWVEZXN0cnVjCiAgICAgICAgICAgICBUcmVlRXhwcmVzc2lvbiBkZWZh
dWx0VmFsdWUgPSBwYXJzZURlZmF1bHRWYWx1ZUZvckRlc3RydWN0dXJpbmdQYXR0ZXJuKGNvbnRl
eHQpOwogICAgICAgICAgICAgcHJvcGFnYXRlRXJyb3IoKTsKICAgICAgICAgICAgIGlmIChwcm9w
ZXJ0eUV4cHJlc3Npb24pIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LmFwcGVuZE9iamVjdFBh
dHRlcm5FbnRyeSgqbV92bSwgb2JqZWN0UGF0dGVybiwgbG9jYXRpb24sIHByb3BlcnR5RXhwcmVz
c2lvbiwgaW5uZXJQYXR0ZXJuLCBkZWZhdWx0VmFsdWUpOworICAgICAgICAgICAgICAgIGNvbnRl
eHQuYXBwZW5kT2JqZWN0UGF0dGVybkVudHJ5KG1fdm0sIG9iamVjdFBhdHRlcm4sIGxvY2F0aW9u
LCBwcm9wZXJ0eUV4cHJlc3Npb24sIGlubmVyUGF0dGVybiwgZGVmYXVsdFZhbHVlKTsKICAgICAg
ICAgICAgICAgICBjb250ZXh0LnNldENvbnRhaW5zQ29tcHV0ZWRQcm9wZXJ0eShvYmplY3RQYXR0
ZXJuLCB0cnVlKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgQVNTRVJU
KHByb3BlcnR5TmFtZSk7CkBAIC0xMzk4LDcgKzEzOTgsNyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJl
ZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lCiAgICAgICAgIEpTVGV4dFBvc2l0aW9uIGluTG9jYXRpb24g
PSB0b2tlblN0YXJ0UG9zaXRpb24oKTsKICAgICAgICAgYm9vbCBpc09mRW51bWVyYXRpb24gPSBm
YWxzZTsKICAgICAgICAgaWYgKCFtYXRjaChJTlRPS0VOKSkgewotICAgICAgICAgICAgZmFpbElm
RmFsc2UobWF0Y2hDb250ZXh0dWFsS2V5d29yZChtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5vZiksICJF
eHBlY3RlZCBlaXRoZXIgJ2luJyBvciAnb2YnIGluIGVudW1lcmF0aW9uIHN5bnRheCIpOworICAg
ICAgICAgICAgZmFpbElmRmFsc2UobWF0Y2hDb250ZXh0dWFsS2V5d29yZChtX3ZtLnByb3BlcnR5
TmFtZXMtPm9mKSwgIkV4cGVjdGVkIGVpdGhlciAnaW4nIG9yICdvZicgaW4gZW51bWVyYXRpb24g
c3ludGF4Iik7CiAgICAgICAgICAgICBpc09mRW51bWVyYXRpb24gPSB0cnVlOwogICAgICAgICAg
ICAgbmV4dCgpOwogICAgICAgICB9IGVsc2UgewpAQCAtMTQ0OCw3ICsxNDQ4LDcgQEAgdGVtcGxh
dGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZQogICAgICAgICAgICAgZGVjbHNTdGFy
dCA9IHRva2VuU3RhcnRQb3NpdGlvbigpOwogICAgICAgICAgICAgcGF0dGVybiA9IHRyeVBhcnNl
RGVzdHJ1Y3R1cmluZ1BhdHRlcm5FeHByZXNzaW9uKGNvbnRleHQsIEFzc2lnbm1lbnRDb250ZXh0
OjpEZWNsYXJhdGlvblN0YXRlbWVudCk7CiAgICAgICAgICAgICBkZWNsc0VuZCA9IGxhc3RUb2tl
bkVuZFBvc2l0aW9uKCk7Ci0gICAgICAgICAgICBpZiAocGF0dGVybiAmJiAobWF0Y2goSU5UT0tF
TikgfHwgbWF0Y2hDb250ZXh0dWFsS2V5d29yZChtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5vZikpKQor
ICAgICAgICAgICAgaWYgKHBhdHRlcm4gJiYgKG1hdGNoKElOVE9LRU4pIHx8IG1hdGNoQ29udGV4
dHVhbEtleXdvcmQobV92bS5wcm9wZXJ0eU5hbWVzLT5vZikpKQogICAgICAgICAgICAgICAgIGdv
dG8gZW51bWVyYXRpb25Mb29wOwogICAgICAgICAgICAgcGF0dGVybiA9IFRyZWVEZXN0cnVjdHVy
aW5nUGF0dGVybigwKTsKICAgICAgICAgICAgIHJlc3RvcmVTYXZlUG9pbnQoc2F2ZVBvaW50KTsK
QEAgLTE1MDMsNyArMTUwMyw3IEBAIGVudW1lcmF0aW9uTG9vcDoKICAgICBmYWlsSWZGYWxzZShu
b25MSFNDb3VudCA9PSBtX3BhcnNlclN0YXRlLm5vbkxIU0NvdW50LCAiRXhwZWN0ZWQgYSByZWZl
cmVuY2Ugb24gdGhlIGxlZnQgaGFuZCBzaWRlIG9mIGFuIGVudW1lcmF0aW9uIHN0YXRlbWVudCIp
OwogICAgIGJvb2wgaXNPZkVudW1lcmF0aW9uID0gZmFsc2U7CiAgICAgaWYgKCFtYXRjaChJTlRP
S0VOKSkgewotICAgICAgICBmYWlsSWZGYWxzZShtYXRjaENvbnRleHR1YWxLZXl3b3JkKG1fdm0t
PnByb3BlcnR5TmFtZXMtPm9mKSwgIkV4cGVjdGVkIGVpdGhlciAnaW4nIG9yICdvZicgaW4gZW51
bWVyYXRpb24gc3ludGF4Iik7CisgICAgICAgIGZhaWxJZkZhbHNlKG1hdGNoQ29udGV4dHVhbEtl
eXdvcmQobV92bS5wcm9wZXJ0eU5hbWVzLT5vZiksICJFeHBlY3RlZCBlaXRoZXIgJ2luJyBvciAn
b2YnIGluIGVudW1lcmF0aW9uIHN5bnRheCIpOwogICAgICAgICBpc09mRW51bWVyYXRpb24gPSB0
cnVlOwogICAgICAgICBuZXh0KCk7CiAgICAgfSBlbHNlIHsKQEAgLTE1NTgsNyArMTU1OCw3IEBA
IHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWUKICAgICAKICAgICBpZiAo
YXV0b1NlbWlDb2xvbigpKSB7CiAgICAgICAgIHNlbWFudGljRmFpbElmRmFsc2UoYnJlYWtJc1Zh
bGlkKCksICInYnJlYWsnIGlzIG9ubHkgdmFsaWQgaW5zaWRlIGEgc3dpdGNoIG9yIGxvb3Agc3Rh
dGVtZW50Iik7Ci0gICAgICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUJyZWFrU3RhdGVtZW50KGxv
Y2F0aW9uLCAmbV92bS0+cHJvcGVydHlOYW1lcy0+bnVsbElkZW50aWZpZXIsIHN0YXJ0LCBlbmQp
OworICAgICAgICByZXR1cm4gY29udGV4dC5jcmVhdGVCcmVha1N0YXRlbWVudChsb2NhdGlvbiwg
Jm1fdm0ucHJvcGVydHlOYW1lcy0+bnVsbElkZW50aWZpZXIsIHN0YXJ0LCBlbmQpOwogICAgIH0K
ICAgICBmYWlsSWZGYWxzZShtYXRjaFNwZWNJZGVudGlmaWVyKCksICJFeHBlY3RlZCBhbiBpZGVu
dGlmaWVyIGFzIHRoZSB0YXJnZXQgZm9yIGEgYnJlYWsgc3RhdGVtZW50Iik7CiAgICAgY29uc3Qg
SWRlbnRpZmllciogaWRlbnQgPSBtX3Rva2VuLm1fZGF0YS5pZGVudDsKQEAgLTE1ODAsNyArMTU4
MCw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWUKICAgICAKICAg
ICBpZiAoYXV0b1NlbWlDb2xvbigpKSB7CiAgICAgICAgIHNlbWFudGljRmFpbElmRmFsc2UoY29u
dGludWVJc1ZhbGlkKCksICInY29udGludWUnIGlzIG9ubHkgdmFsaWQgaW5zaWRlIGEgbG9vcCBz
dGF0ZW1lbnQiKTsKLSAgICAgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlQ29udGludWVTdGF0ZW1l
bnQobG9jYXRpb24sICZtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5udWxsSWRlbnRpZmllciwgc3RhcnQs
IGVuZCk7CisgICAgICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUNvbnRpbnVlU3RhdGVtZW50KGxv
Y2F0aW9uLCAmbV92bS5wcm9wZXJ0eU5hbWVzLT5udWxsSWRlbnRpZmllciwgc3RhcnQsIGVuZCk7
CiAgICAgfQogICAgIGZhaWxJZkZhbHNlKG1hdGNoU3BlY0lkZW50aWZpZXIoKSwgIkV4cGVjdGVk
IGFuIGlkZW50aWZpZXIgYXMgdGhlIHRhcmdldCBmb3IgYSBjb250aW51ZSBzdGF0ZW1lbnQiKTsK
ICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9IG1fdG9rZW4ubV9kYXRhLmlkZW50OwpAQCAt
MTk1MCw3ICsxOTUwLDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVt
ZQogICAgICAgICBnb3RvIGRlZmF1bHRDYXNlOwogICAgIH0KICAgICBjYXNlIElERU5UOgotICAg
ICAgICBpZiAoVU5MSUtFTFkoKm1fdG9rZW4ubV9kYXRhLmlkZW50ID09IG1fdm0tPnByb3BlcnR5
TmFtZXMtPmFzeW5jICYmICFtX3Rva2VuLm1fZGF0YS5lc2NhcGVkKSkgeworICAgICAgICBpZiAo
VU5MSUtFTFkoKm1fdG9rZW4ubV9kYXRhLmlkZW50ID09IG1fdm0ucHJvcGVydHlOYW1lcy0+YXN5
bmMgJiYgIW1fdG9rZW4ubV9kYXRhLmVzY2FwZWQpKSB7CiAgICAgICAgICAgICBpZiAobWF5YmVQ
YXJzZUFzeW5jRnVuY3Rpb25EZWNsYXJhdGlvblN0YXRlbWVudChjb250ZXh0LCByZXN1bHQsIHBh
cmVudEFsbG93c0Z1bmN0aW9uRGVjbGFyYXRpb25Bc1N0YXRlbWVudCkpCiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTIwMzksNyArMjAzOSw3IEBAIHRlbXBsYXRlIDxjbGFz
cyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWUKIHRlbXBsYXRlIDx0eXBlbmFtZSBMZXhlclR5cGU+
CiB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IGJvb2wgUGFyc2VyPExleGVyVHlwZT46Om1h
eWJlUGFyc2VBc3luY0Z1bmN0aW9uRGVjbGFyYXRpb25TdGF0ZW1lbnQoVHJlZUJ1aWxkZXImIGNv
bnRleHQsIFRyZWVTdGF0ZW1lbnQmIHJlc3VsdCwgYm9vbCBwYXJlbnRBbGxvd3NGdW5jdGlvbkRl
Y2xhcmF0aW9uQXNTdGF0ZW1lbnQpCiB7Ci0gICAgQVNTRVJUKG1hdGNoQ29udGV4dHVhbEtleXdv
cmQobV92bS0+cHJvcGVydHlOYW1lcy0+YXN5bmMpKTsKKyAgICBBU1NFUlQobWF0Y2hDb250ZXh0
dWFsS2V5d29yZChtX3ZtLnByb3BlcnR5TmFtZXMtPmFzeW5jKSk7CiAgICAgU2F2ZVBvaW50IHNh
dmVQb2ludCA9IGNyZWF0ZVNhdmVQb2ludCgpOwogICAgIG5leHQoKTsKICAgICBpZiAobWF0Y2go
RlVOQ1RJT04pICYmICFtX2xleGVyLT5oYXNMaW5lVGVybWluYXRvckJlZm9yZVRva2VuKCkpIHsK
QEAgLTIzMDAsMTUgKzIzMDAsMTUgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiB0eXBl
bmFtZSBUcgogICAgIH07CiAKICAgICAvLyBAZ2VuZXJhdG9yCi0gICAgYWRkUGFyYW1ldGVyKG1f
dm0tPnByb3BlcnR5TmFtZXMtPmdlbmVyYXRvclByaXZhdGVOYW1lKTsKKyAgICBhZGRQYXJhbWV0
ZXIobV92bS5wcm9wZXJ0eU5hbWVzLT5nZW5lcmF0b3JQcml2YXRlTmFtZSk7CiAgICAgLy8gQGdl
bmVyYXRvclN0YXRlCi0gICAgYWRkUGFyYW1ldGVyKG1fdm0tPnByb3BlcnR5TmFtZXMtPmdlbmVy
YXRvclN0YXRlUHJpdmF0ZU5hbWUpOworICAgIGFkZFBhcmFtZXRlcihtX3ZtLnByb3BlcnR5TmFt
ZXMtPmdlbmVyYXRvclN0YXRlUHJpdmF0ZU5hbWUpOwogICAgIC8vIEBnZW5lcmF0b3JWYWx1ZQot
ICAgIGFkZFBhcmFtZXRlcihtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5nZW5lcmF0b3JWYWx1ZVByaXZh
dGVOYW1lKTsKKyAgICBhZGRQYXJhbWV0ZXIobV92bS5wcm9wZXJ0eU5hbWVzLT5nZW5lcmF0b3JW
YWx1ZVByaXZhdGVOYW1lKTsKICAgICAvLyBAZ2VuZXJhdG9yUmVzdW1lTW9kZQotICAgIGFkZFBh
cmFtZXRlcihtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5nZW5lcmF0b3JSZXN1bWVNb2RlUHJpdmF0ZU5h
bWUpOworICAgIGFkZFBhcmFtZXRlcihtX3ZtLnByb3BlcnR5TmFtZXMtPmdlbmVyYXRvclJlc3Vt
ZU1vZGVQcml2YXRlTmFtZSk7CiAgICAgLy8gQGdlbmVyYXRvckZyYW1lCi0gICAgYWRkUGFyYW1l
dGVyKG1fdm0tPnByb3BlcnR5TmFtZXMtPmdlbmVyYXRvckZyYW1lUHJpdmF0ZU5hbWUpOworICAg
IGFkZFBhcmFtZXRlcihtX3ZtLnByb3BlcnR5TmFtZXMtPmdlbmVyYXRvckZyYW1lUHJpdmF0ZU5h
bWUpOwogCiAgICAgcmV0dXJuIHBhcmFtZXRlcnM7CiB9CkBAIC0yNDEyLDcgKzI0MTIsNyBAQCB0
ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IGJvb2wgUGFyc2VyCiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9OwogCi0gICAgU3ludGF4Q2hlY2tlciBzeW50YXhDaGVja2VyKGNvbnN0X2Nh
c3Q8Vk0qPihtX3ZtKSwgbV9sZXhlci5nZXQoKSk7CisgICAgU3ludGF4Q2hlY2tlciBzeW50YXhD
aGVja2VyKGNvbnN0X2Nhc3Q8Vk0mPihtX3ZtKSwgbV9sZXhlci5nZXQoKSk7CiAKICAgICBpZiAo
VU5MSUtFTFkoKFNvdXJjZVBhcnNlTW9kZVNldChTb3VyY2VQYXJzZU1vZGU6OkFycm93RnVuY3Rp
b25Nb2RlLCBTb3VyY2VQYXJzZU1vZGU6OkFzeW5jQXJyb3dGdW5jdGlvbk1vZGUpLmNvbnRhaW5z
KG1vZGUpKSkpIHsKICAgICAgICAgc3RhcnRMb2NhdGlvbiA9IHRva2VuTG9jYXRpb24oKTsKQEAg
LTI1ODksOCArMjU4OSw4IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gYm9vbCBQYXJz
ZXIKICAgICBpZiAoZnVuY3Rpb25TY29wZS0+c3RyaWN0TW9kZSgpICYmIHJlcXVpcmVtZW50cyAh
PSBGdW5jdGlvbk5hbWVSZXF1aXJlbWVudHM6OlVubmFtZWQpIHsKICAgICAgICAgQVNTRVJUKGZ1
bmN0aW9uSW5mby5uYW1lKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoU291cmNlUGFyc2VNb2Rl
U2V0KFNvdXJjZVBhcnNlTW9kZTo6Tm9ybWFsRnVuY3Rpb25Nb2RlLCBTb3VyY2VQYXJzZU1vZGU6
Ok1ldGhvZE1vZGUsIFNvdXJjZVBhcnNlTW9kZTo6QXJyb3dGdW5jdGlvbk1vZGUsIFNvdXJjZVBh
cnNlTW9kZTo6R2VuZXJhdG9yQm9keU1vZGUsIFNvdXJjZVBhcnNlTW9kZTo6R2VuZXJhdG9yV3Jh
cHBlckZ1bmN0aW9uTW9kZSkuY29udGFpbnMobW9kZSkgfHwgaXNBc3luY0Z1bmN0aW9uT3JBc3lu
Y0dlbmVyYXRvcldyYXBwZXJQYXJzZU1vZGUobW9kZSkpOwotICAgICAgICBzZW1hbnRpY0ZhaWxJ
ZlRydWUobV92bS0+cHJvcGVydHlOYW1lcy0+YXJndW1lbnRzID09ICpmdW5jdGlvbkluZm8ubmFt
ZSwgIiciLCBmdW5jdGlvbkluZm8ubmFtZS0+aW1wbCgpLCAiJyBpcyBub3QgYSB2YWxpZCBmdW5j
dGlvbiBuYW1lIGluIHN0cmljdCBtb2RlIik7Ci0gICAgICAgIHNlbWFudGljRmFpbElmVHJ1ZSht
X3ZtLT5wcm9wZXJ0eU5hbWVzLT5ldmFsID09ICpmdW5jdGlvbkluZm8ubmFtZSwgIiciLCBmdW5j
dGlvbkluZm8ubmFtZS0+aW1wbCgpLCAiJyBpcyBub3QgYSB2YWxpZCBmdW5jdGlvbiBuYW1lIGlu
IHN0cmljdCBtb2RlIik7CisgICAgICAgIHNlbWFudGljRmFpbElmVHJ1ZShtX3ZtLnByb3BlcnR5
TmFtZXMtPmFyZ3VtZW50cyA9PSAqZnVuY3Rpb25JbmZvLm5hbWUsICInIiwgZnVuY3Rpb25JbmZv
Lm5hbWUtPmltcGwoKSwgIicgaXMgbm90IGEgdmFsaWQgZnVuY3Rpb24gbmFtZSBpbiBzdHJpY3Qg
bW9kZSIpOworICAgICAgICBzZW1hbnRpY0ZhaWxJZlRydWUobV92bS5wcm9wZXJ0eU5hbWVzLT5l
dmFsID09ICpmdW5jdGlvbkluZm8ubmFtZSwgIiciLCBmdW5jdGlvbkluZm8ubmFtZS0+aW1wbCgp
LCAiJyBpcyBub3QgYSB2YWxpZCBmdW5jdGlvbiBuYW1lIGluIHN0cmljdCBtb2RlIik7CiAgICAg
fQogCiAgICAgSlNUb2tlbkxvY2F0aW9uIGxvY2F0aW9uID0gSlNUb2tlbkxvY2F0aW9uKG1fdG9r
ZW4ubV9sb2NhdGlvbik7CkBAIC0yNjkyLDcgKzI2OTIsNyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJl
ZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lCiAgICAgICAgIC8vCiAgICAgICAgIC8vIEluIHRoaXMgY2Fz
ZSwgd2UgdXNlICIqZGVmYXVsdCoiIGFzIHRoaXMgZnVuY3Rpb24gZGVjbGFyYXRpb24ncyBuYW1l
LgogICAgICAgICByZXF1aXJlbWVudHMgPSBGdW5jdGlvbk5hbWVSZXF1aXJlbWVudHM6Ok5vbmU7
Ci0gICAgICAgIGZ1bmN0aW9uSW5mby5uYW1lID0gJm1fdm0tPnByb3BlcnR5TmFtZXMtPnN0YXJE
ZWZhdWx0UHJpdmF0ZU5hbWU7CisgICAgICAgIGZ1bmN0aW9uSW5mby5uYW1lID0gJm1fdm0ucHJv
cGVydHlOYW1lcy0+c3RhckRlZmF1bHRQcml2YXRlTmFtZTsKICAgICB9CiAKICAgICBmYWlsSWZG
YWxzZSgocGFyc2VGdW5jdGlvbkluZm8oY29udGV4dCwgcmVxdWlyZW1lbnRzLCBwYXJzZU1vZGUs
IHRydWUsIENvbnN0cnVjdG9yS2luZDo6Tm9uZSwgU3VwZXJCaW5kaW5nOjpOb3ROZWVkZWQsIGZ1
bmN0aW9uS2V5d29yZFN0YXJ0LCBmdW5jdGlvbkluZm8sIEZ1bmN0aW9uRGVmaW5pdGlvblR5cGU6
OkRlY2xhcmF0aW9uLCBmdW5jdGlvbkNvbnN0cnVjdG9yUGFyYW1ldGVyc0VuZFBvc2l0aW9uKSks
ICJDYW5ub3QgcGFyc2UgdGhpcyBmdW5jdGlvbiIpOwpAQCAtMjc1MCw3ICsyNzUwLDcgQEAgdGVt
cGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZQogICAgICAgICAvLwogICAgICAg
ICAvLyBJbiB0aGlzIGNhc2UsIHdlIHVzZSAiKmRlZmF1bHQqIiBhcyB0aGlzIGZ1bmN0aW9uIGRl
Y2xhcmF0aW9uJ3MgbmFtZS4KICAgICAgICAgcmVxdWlyZW1lbnRzID0gRnVuY3Rpb25OYW1lUmVx
dWlyZW1lbnRzOjpOb25lOwotICAgICAgICBmdW5jdGlvbkluZm8ubmFtZSA9ICZtX3ZtLT5wcm9w
ZXJ0eU5hbWVzLT5zdGFyRGVmYXVsdFByaXZhdGVOYW1lOworICAgICAgICBmdW5jdGlvbkluZm8u
bmFtZSA9ICZtX3ZtLnByb3BlcnR5TmFtZXMtPnN0YXJEZWZhdWx0UHJpdmF0ZU5hbWU7CiAgICAg
fQogCiAgICAgZmFpbElmRmFsc2UoKHBhcnNlRnVuY3Rpb25JbmZvKGNvbnRleHQsIHJlcXVpcmVt
ZW50cywgcGFyc2VNb2RlLCB0cnVlLCBDb25zdHJ1Y3RvcktpbmQ6Ok5vbmUsIFN1cGVyQmluZGlu
Zzo6Tm90TmVlZGVkLCBmdW5jdGlvbktleXdvcmRTdGFydCwgZnVuY3Rpb25JbmZvLCBGdW5jdGlv
bkRlZmluaXRpb25UeXBlOjpEZWNsYXJhdGlvbiwgZnVuY3Rpb25Db25zdHJ1Y3RvclBhcmFtZXRl
cnNFbmRQb3NpdGlvbikpLCAiQ2Fubm90IHBhcnNlIHRoaXMgYXN5bmMgZnVuY3Rpb24iKTsKQEAg
LTI3OTYsNyArMjc5Niw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRl
bWUKICAgICAgICAgLy8KICAgICAgICAgLy8gSW4gdGhpcyBjYXNlLCB3ZSB1c2UgIipkZWZhdWx0
KiIgYXMgdGhpcyBjbGFzcyBkZWNsYXJhdGlvbidzIG5hbWUuCiAgICAgICAgIHJlcXVpcmVtZW50
cyA9IEZ1bmN0aW9uTmFtZVJlcXVpcmVtZW50czo6Tm9uZTsKLSAgICAgICAgaW5mby5jbGFzc05h
bWUgPSAmbV92bS0+cHJvcGVydHlOYW1lcy0+c3RhckRlZmF1bHRQcml2YXRlTmFtZTsKKyAgICAg
ICAgaW5mby5jbGFzc05hbWUgPSAmbV92bS5wcm9wZXJ0eU5hbWVzLT5zdGFyRGVmYXVsdFByaXZh
dGVOYW1lOwogICAgIH0KIAogICAgIFRyZWVDbGFzc0V4cHJlc3Npb24gY2xhc3NFeHByID0gcGFy
c2VDbGFzcyhjb250ZXh0LCByZXF1aXJlbWVudHMsIGluZm8pOwpAQCAtMjg3MCw3ICsyODcwLDcg
QEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlQ2xhc3NFeAogCiAgICAgICAgIC8v
IEZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSwgInN0YXRpYyIgaXMgYSBub24tcmVzZXJ2ZWQg
a2V5d29yZCBpbiBub24tc3RyaWN0IG1vZGUuCiAgICAgICAgIENsYXNzRWxlbWVudFRhZyB0YWcg
PSBDbGFzc0VsZW1lbnRUYWc6Okluc3RhbmNlOwotICAgICAgICBpZiAobWF0Y2goUkVTRVJWRURf
SUZfU1RSSUNUKSAmJiAqbV90b2tlbi5tX2RhdGEuaWRlbnQgPT0gbV92bS0+cHJvcGVydHlOYW1l
cy0+c3RhdGljS2V5d29yZCkgeworICAgICAgICBpZiAobWF0Y2goUkVTRVJWRURfSUZfU1RSSUNU
KSAmJiAqbV90b2tlbi5tX2RhdGEuaWRlbnQgPT0gbV92bS5wcm9wZXJ0eU5hbWVzLT5zdGF0aWNL
ZXl3b3JkKSB7CiAgICAgICAgICAgICBTYXZlUG9pbnQgc2F2ZVBvaW50ID0gY3JlYXRlU2F2ZVBv
aW50KCk7CiAgICAgICAgICAgICBuZXh0KCk7CiAgICAgICAgICAgICBpZiAobWF0Y2goT1BFTlBB
UkVOKSkgewpAQCAtMjg4MSw3ICsyODgxLDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVy
PiBUcmVlQ2xhc3NFeAogICAgICAgICB9CiAKICAgICAgICAgLy8gRklYTUU6IEZpZ3VyZSBvdXQg
YSB3YXkgdG8gc2hhcmUgbW9yZSBjb2RlIHdpdGggcGFyc2VQcm9wZXJ0eS4KLSAgICAgICAgY29u
c3QgQ29tbW9uSWRlbnRpZmllcnMmIHByb3BlcnR5TmFtZXMgPSAqbV92bS0+cHJvcGVydHlOYW1l
czsKKyAgICAgICAgY29uc3QgQ29tbW9uSWRlbnRpZmllcnMmIHByb3BlcnR5TmFtZXMgPSAqbV92
bS5wcm9wZXJ0eU5hbWVzOwogICAgICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICZwcm9w
ZXJ0eU5hbWVzLm51bGxJZGVudGlmaWVyOwogICAgICAgICBUcmVlRXhwcmVzc2lvbiBjb21wdXRl
ZFByb3BlcnR5TmFtZSA9IDA7CiAgICAgICAgIGJvb2wgaXNHZXR0ZXIgPSBmYWxzZTsKQEAgLTI4
OTksNyArMjg5OSw3IEBAIHBhcnNlTWV0aG9kOgogICAgICAgICAgICAgbmV4dCgpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgSURFTlQ6Ci0gICAgICAgICAgICBpZiAoVU5MSUtF
TFkoKm1fdG9rZW4ubV9kYXRhLmlkZW50ID09IG1fdm0tPnByb3BlcnR5TmFtZXMtPmFzeW5jICYm
ICFtX3Rva2VuLm1fZGF0YS5lc2NhcGVkKSkgeworICAgICAgICAgICAgaWYgKFVOTElLRUxZKCpt
X3Rva2VuLm1fZGF0YS5pZGVudCA9PSBtX3ZtLnByb3BlcnR5TmFtZXMtPmFzeW5jICYmICFtX3Rv
a2VuLm1fZGF0YS5lc2NhcGVkKSkgewogICAgICAgICAgICAgICAgIGlmICghaXNHZW5lcmF0b3JN
ZXRob2RQYXJzZU1vZGUocGFyc2VNb2RlKSAmJiAhaXNBc3luY01ldGhvZFBhcnNlTW9kZShwYXJz
ZU1vZGUpKSB7CiAgICAgICAgICAgICAgICAgICAgIGlkZW50ID0gbV90b2tlbi5tX2RhdGEuaWRl
bnQ7CiAgICAgICAgICAgICAgICAgICAgIG5leHQoKTsKQEAgLTI5MjQsNyArMjkyNCw3IEBAIHBh
cnNlTWV0aG9kOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRE9VQkxFOgogICAg
ICAgICBjYXNlIElOVEVHRVI6Ci0gICAgICAgICAgICBpZGVudCA9ICZtX3BhcnNlckFyZW5hLmlk
ZW50aWZpZXJBcmVuYSgpLm1ha2VOdW1lcmljSWRlbnRpZmllcihjb25zdF9jYXN0PFZNKj4obV92
bSksIG1fdG9rZW4ubV9kYXRhLmRvdWJsZVZhbHVlKTsKKyAgICAgICAgICAgIGlkZW50ID0gJm1f
cGFyc2VyQXJlbmEuaWRlbnRpZmllckFyZW5hKCkubWFrZU51bWVyaWNJZGVudGlmaWVyKGNvbnN0
X2Nhc3Q8Vk0mPihtX3ZtKSwgbV90b2tlbi5tX2RhdGEuZG91YmxlVmFsdWUpOwogICAgICAgICAg
ICAgQVNTRVJUKGlkZW50KTsKICAgICAgICAgICAgIG5leHQoKTsKICAgICAgICAgICAgIGJyZWFr
OwpAQCAtMjk1MSw4ICsyOTUxLDggQEAgcGFyc2VNZXRob2Q6CiAgICAgICAgICAgICBib29sIGlz
Q29uc3RydWN0b3IgPSB0YWcgPT0gQ2xhc3NFbGVtZW50VGFnOjpJbnN0YW5jZSAmJiAqaWRlbnQg
PT0gcHJvcGVydHlOYW1lcy5jb25zdHJ1Y3RvcjsKICAgICAgICAgICAgIGlmIChpc0FzeW5jTWV0
aG9kUGFyc2VNb2RlKHBhcnNlTW9kZSkgfHwgaXNBc3luY0dlbmVyYXRvck1ldGhvZFBhcnNlTW9k
ZShwYXJzZU1vZGUpIHx8IGlzR2VuZXJhdG9yTWV0aG9kUGFyc2VNb2RlKHBhcnNlTW9kZSkpIHsK
ICAgICAgICAgICAgICAgICBpc0NvbnN0cnVjdG9yID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAg
c2VtYW50aWNGYWlsSWZUcnVlKCppZGVudCA9PSBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5
cGUsICJDYW5ub3QgZGVjbGFyZSAiLCBzdHJpbmdBcnRpY2xlRm9yRnVuY3Rpb25Nb2RlKHBhcnNl
TW9kZSksIHN0cmluZ0ZvckZ1bmN0aW9uTW9kZShwYXJzZU1vZGUpLCAiIG5hbWVkICdwcm90b3R5
cGUnIik7Ci0gICAgICAgICAgICAgICAgc2VtYW50aWNGYWlsSWZUcnVlKCppZGVudCA9PSBtX3Zt
LT5wcm9wZXJ0eU5hbWVzLT5jb25zdHJ1Y3RvciwgIkNhbm5vdCBkZWNsYXJlICIsIHN0cmluZ0Fy
dGljbGVGb3JGdW5jdGlvbk1vZGUocGFyc2VNb2RlKSwgc3RyaW5nRm9yRnVuY3Rpb25Nb2RlKHBh
cnNlTW9kZSksICIgbmFtZWQgJ2NvbnN0cnVjdG9yJyIpOworICAgICAgICAgICAgICAgIHNlbWFu
dGljRmFpbElmVHJ1ZSgqaWRlbnQgPT0gbV92bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsICJD
YW5ub3QgZGVjbGFyZSAiLCBzdHJpbmdBcnRpY2xlRm9yRnVuY3Rpb25Nb2RlKHBhcnNlTW9kZSks
IHN0cmluZ0ZvckZ1bmN0aW9uTW9kZShwYXJzZU1vZGUpLCAiIG5hbWVkICdwcm90b3R5cGUnIik7
CisgICAgICAgICAgICAgICAgc2VtYW50aWNGYWlsSWZUcnVlKCppZGVudCA9PSBtX3ZtLnByb3Bl
cnR5TmFtZXMtPmNvbnN0cnVjdG9yLCAiQ2Fubm90IGRlY2xhcmUgIiwgc3RyaW5nQXJ0aWNsZUZv
ckZ1bmN0aW9uTW9kZShwYXJzZU1vZGUpLCBzdHJpbmdGb3JGdW5jdGlvbk1vZGUocGFyc2VNb2Rl
KSwgIiBuYW1lZCAnY29uc3RydWN0b3InIik7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAg
IG1ldGhvZEluZm8ubmFtZSA9IGlzQ29uc3RydWN0b3IgPyBpbmZvLmNsYXNzTmFtZSA6IGlkZW50
OwpAQCAtMzIxOCwxMCArMzIxOCwxMCBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IHR5
cGVuYW1lIFRyCiAgICAgICAgIC8vIGUuZy4KICAgICAgICAgLy8gICAgICogYXMgbmFtZXNwYWNl
CiAgICAgICAgIEFTU0VSVChtYXRjaChUSU1FUykpOwotICAgICAgICBpbXBvcnRlZE5hbWUgPSAm
bV92bS0+cHJvcGVydHlOYW1lcy0+dGltZXNJZGVudGlmaWVyOworICAgICAgICBpbXBvcnRlZE5h
bWUgPSAmbV92bS5wcm9wZXJ0eU5hbWVzLT50aW1lc0lkZW50aWZpZXI7CiAgICAgICAgIG5leHQo
KTsKIAotICAgICAgICBmYWlsSWZGYWxzZShtYXRjaENvbnRleHR1YWxLZXl3b3JkKG1fdm0tPnBy
b3BlcnR5TmFtZXMtPmFzKSwgIkV4cGVjdGVkICdhcycgYmVmb3JlIGltcG9ydGVkIGJpbmRpbmcg
bmFtZSIpOworICAgICAgICBmYWlsSWZGYWxzZShtYXRjaENvbnRleHR1YWxLZXl3b3JkKG1fdm0u
cHJvcGVydHlOYW1lcy0+YXMpLCAiRXhwZWN0ZWQgJ2FzJyBiZWZvcmUgaW1wb3J0ZWQgYmluZGlu
ZyBuYW1lIik7CiAgICAgICAgIG5leHQoKTsKIAogICAgICAgICBmYWlsSWZGYWxzZShtYXRjaFNw
ZWNJZGVudGlmaWVyKCksICJFeHBlY3RlZCBhIHZhcmlhYmxlIG5hbWUgZm9yIHRoZSBpbXBvcnQg
ZGVjbGFyYXRpb24iKTsKQEAgLTMyNDQsNyArMzI0NCw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVl
QnVpbGRlcj4gdHlwZW5hbWUgVHIKICAgICAgICAgaW1wb3J0ZWROYW1lID0gbG9jYWxOYW1lOwog
ICAgICAgICBuZXh0KCk7CiAKLSAgICAgICAgaWYgKG1hdGNoQ29udGV4dHVhbEtleXdvcmQobV92
bS0+cHJvcGVydHlOYW1lcy0+YXMpKSB7CisgICAgICAgIGlmIChtYXRjaENvbnRleHR1YWxLZXl3
b3JkKG1fdm0ucHJvcGVydHlOYW1lcy0+YXMpKSB7CiAgICAgICAgICAgICBuZXh0KCk7CiAgICAg
ICAgICAgICBmYWlsSWZGYWxzZShtYXRjaFNwZWNJZGVudGlmaWVyKCksICJFeHBlY3RlZCBhIHZh
cmlhYmxlIG5hbWUgZm9yIHRoZSBpbXBvcnQgZGVjbGFyYXRpb24iKTsKICAgICAgICAgICAgIGxv
Y2FsTmFtZVRva2VuID0gbV90b2tlbjsKQEAgLTMyNjAsNyArMzI2MCw3IEBAIHRlbXBsYXRlIDxj
bGFzcyBUcmVlQnVpbGRlcj4gdHlwZW5hbWUgVHIKICAgICAgICAgQVNTRVJUKG1hdGNoU3BlY0lk
ZW50aWZpZXIoKSk7CiAgICAgICAgIGxvY2FsTmFtZVRva2VuID0gbV90b2tlbjsKICAgICAgICAg
bG9jYWxOYW1lID0gbV90b2tlbi5tX2RhdGEuaWRlbnQ7Ci0gICAgICAgIGltcG9ydGVkTmFtZSA9
ICZtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5kZWZhdWx0S2V5d29yZDsKKyAgICAgICAgaW1wb3J0ZWRO
YW1lID0gJm1fdm0ucHJvcGVydHlOYW1lcy0+ZGVmYXVsdEtleXdvcmQ7CiAgICAgICAgIG5leHQo
KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMzMzOCw3ICszMzM4LDcgQEAgdGVtcGxhdGUg
PGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZQogICAgIC8vIEZyb21DbGF1c2UgOgogICAg
IC8vIGZyb20gTW9kdWxlU3BlY2lmaWVyCiAKLSAgICBmYWlsSWZGYWxzZShtYXRjaENvbnRleHR1
YWxLZXl3b3JkKG1fdm0tPnByb3BlcnR5TmFtZXMtPmZyb20pLCAiRXhwZWN0ZWQgJ2Zyb20nIGJl
Zm9yZSBpbXBvcnRlZCBtb2R1bGUgbmFtZSIpOworICAgIGZhaWxJZkZhbHNlKG1hdGNoQ29udGV4
dHVhbEtleXdvcmQobV92bS5wcm9wZXJ0eU5hbWVzLT5mcm9tKSwgIkV4cGVjdGVkICdmcm9tJyBi
ZWZvcmUgaW1wb3J0ZWQgbW9kdWxlIG5hbWUiKTsKICAgICBuZXh0KCk7CiAKICAgICBhdXRvIG1v
ZHVsZU5hbWUgPSBwYXJzZU1vZHVsZU5hbWUoY29udGV4dCk7CkBAIC0zMzYzLDcgKzMzNjMsNyBA
QCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IHR5cGVuYW1lIFRyCiAgICAgY29uc3QgSWRl
bnRpZmllciogZXhwb3J0ZWROYW1lID0gbG9jYWxOYW1lOwogICAgIG5leHQoKTsKIAotICAgIGlm
IChtYXRjaENvbnRleHR1YWxLZXl3b3JkKG1fdm0tPnByb3BlcnR5TmFtZXMtPmFzKSkgeworICAg
IGlmIChtYXRjaENvbnRleHR1YWxLZXl3b3JkKG1fdm0ucHJvcGVydHlOYW1lcy0+YXMpKSB7CiAg
ICAgICAgIG5leHQoKTsKICAgICAgICAgZmFpbElmRmFsc2UobWF0Y2hJZGVudGlmaWVyT3JLZXl3
b3JkKCksICJFeHBlY3RlZCBhbiBleHBvcnRlZCBuYW1lIGZvciB0aGUgZXhwb3J0IGRlY2xhcmF0
aW9uIik7CiAgICAgICAgIGV4cG9ydGVkTmFtZSA9IG1fdG9rZW4ubV9kYXRhLmlkZW50OwpAQCAt
MzM4OCw3ICszMzg4LDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVt
ZQogICAgICAgICAvLyBleHBvcnQgKiBGcm9tQ2xhdXNlIDsKICAgICAgICAgbmV4dCgpOwogCi0g
ICAgICAgIGZhaWxJZkZhbHNlKG1hdGNoQ29udGV4dHVhbEtleXdvcmQobV92bS0+cHJvcGVydHlO
YW1lcy0+ZnJvbSksICJFeHBlY3RlZCAnZnJvbScgYmVmb3JlIGV4cG9ydGVkIG1vZHVsZSBuYW1l
Iik7CisgICAgICAgIGZhaWxJZkZhbHNlKG1hdGNoQ29udGV4dHVhbEtleXdvcmQobV92bS5wcm9w
ZXJ0eU5hbWVzLT5mcm9tKSwgIkV4cGVjdGVkICdmcm9tJyBiZWZvcmUgZXhwb3J0ZWQgbW9kdWxl
IG5hbWUiKTsKICAgICAgICAgbmV4dCgpOwogICAgICAgICBhdXRvIG1vZHVsZU5hbWUgPSBwYXJz
ZU1vZHVsZU5hbWUoY29udGV4dCk7CiAgICAgICAgIGZhaWxJZkZhbHNlKG1vZHVsZU5hbWUsICJD
YW5ub3QgcGFyc2UgdGhlICdmcm9tJyBjbGF1c2UiKTsKQEAgLTM0MjAsNyArMzQyMCw3IEBAIHRl
bXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWUKICAgICAgICAgICAgIGlmICht
YXRjaChJREVOVCkpCiAgICAgICAgICAgICAgICAgbG9jYWxOYW1lID0gbV90b2tlbi5tX2RhdGEu
aWRlbnQ7CiAgICAgICAgICAgICByZXN0b3JlU2F2ZVBvaW50KHNhdmVQb2ludCk7Ci0gICAgICAg
IH0gZWxzZSBpZiAobWF0Y2hDb250ZXh0dWFsS2V5d29yZChtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5h
c3luYykpIHsKKyAgICAgICAgfSBlbHNlIGlmIChtYXRjaENvbnRleHR1YWxLZXl3b3JkKG1fdm0u
cHJvcGVydHlOYW1lcy0+YXN5bmMpKSB7CiAgICAgICAgICAgICBTYXZlUG9pbnQgc2F2ZVBvaW50
ID0gY3JlYXRlU2F2ZVBvaW50KCk7CiAgICAgICAgICAgICBuZXh0KCk7CiAgICAgICAgICAgICBp
ZiAobWF0Y2goRlVOQ1RJT04pICYmICFtX2xleGVyLT5oYXNMaW5lVGVybWluYXRvckJlZm9yZVRv
a2VuKCkpIHsKQEAgLTM0MzMsNyArMzQzMyw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRl
cj4gVHJlZVN0YXRlbWUKICAgICAgICAgfQogCiAgICAgICAgIGlmICghbG9jYWxOYW1lKQotICAg
ICAgICAgICAgbG9jYWxOYW1lID0gJm1fdm0tPnByb3BlcnR5TmFtZXMtPnN0YXJEZWZhdWx0UHJp
dmF0ZU5hbWU7CisgICAgICAgICAgICBsb2NhbE5hbWUgPSAmbV92bS5wcm9wZXJ0eU5hbWVzLT5z
dGFyRGVmYXVsdFByaXZhdGVOYW1lOwogCiAgICAgICAgIGlmIChpc0Z1bmN0aW9uT3JDbGFzc0Rl
Y2xhcmF0aW9uKSB7CiAgICAgICAgICAgICBpZiAoc3RhcnRzV2l0aEZ1bmN0aW9uKSB7CkBAIC0z
NDQ0LDcgKzM0NDQsNyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1l
CiAgICAgICAgICAgICB9IGVsc2UgaWYgKG1hdGNoKENMQVNTVE9LRU4pKSB7CiAgICAgICAgICAg
ICAgICAgcmVzdWx0ID0gcGFyc2VDbGFzc0RlY2xhcmF0aW9uKGNvbnRleHQsIEV4cG9ydFR5cGU6
Ok5vdEV4cG9ydGVkLCBEZWNsYXJhdGlvbkRlZmF1bHRDb250ZXh0OjpFeHBvcnREZWZhdWx0KTsK
ICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKG1hdGNoQ29udGV4
dHVhbEtleXdvcmQobV92bS0+cHJvcGVydHlOYW1lcy0+YXN5bmMpKTsKKyAgICAgICAgICAgICAg
ICBBU1NFUlQobWF0Y2hDb250ZXh0dWFsS2V5d29yZChtX3ZtLnByb3BlcnR5TmFtZXMtPmFzeW5j
KSk7CiAgICAgICAgICAgICAgICAgbmV4dCgpOwogICAgICAgICAgICAgICAgIERlcHRoTWFuYWdl
ciBzdGF0ZW1lbnREZXB0aCgmbV9zdGF0ZW1lbnREZXB0aCk7CiAgICAgICAgICAgICAgICAgbV9z
dGF0ZW1lbnREZXB0aCA9IDE7CkBAIC0zNDY1LDE4ICszNDY1LDE4IEBAIHRlbXBsYXRlIDxjbGFz
cyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWUKICAgICAgICAgICAgIFRyZWVFeHByZXNzaW9uIGV4
cHJlc3Npb24gPSBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKGNvbnRleHQpOwogICAgICAgICAg
ICAgZmFpbElmRmFsc2UoZXhwcmVzc2lvbiwgIkNhbm5vdCBwYXJzZSBleHByZXNzaW9uIik7CiAK
LSAgICAgICAgICAgIERlY2xhcmF0aW9uUmVzdWx0TWFzayBkZWNsYXJhdGlvblJlc3VsdCA9IGRl
Y2xhcmVWYXJpYWJsZSgmbV92bS0+cHJvcGVydHlOYW1lcy0+c3RhckRlZmF1bHRQcml2YXRlTmFt
ZSwgRGVjbGFyYXRpb25UeXBlOjpDb25zdERlY2xhcmF0aW9uKTsKKyAgICAgICAgICAgIERlY2xh
cmF0aW9uUmVzdWx0TWFzayBkZWNsYXJhdGlvblJlc3VsdCA9IGRlY2xhcmVWYXJpYWJsZSgmbV92
bS5wcm9wZXJ0eU5hbWVzLT5zdGFyRGVmYXVsdFByaXZhdGVOYW1lLCBEZWNsYXJhdGlvblR5cGU6
OkNvbnN0RGVjbGFyYXRpb24pOwogICAgICAgICAgICAgaWYgKGRlY2xhcmF0aW9uUmVzdWx0ICYg
RGVjbGFyYXRpb25SZXN1bHQ6OkludmFsaWREdXBsaWNhdGVEZWNsYXJhdGlvbikKICAgICAgICAg
ICAgICAgICBpbnRlcm5hbEZhaWxXaXRoTWVzc2FnZShmYWxzZSwgIk9ubHkgb25lICdkZWZhdWx0
JyBleHBvcnQgaXMgYWxsb3dlZCIpOwogCi0gICAgICAgICAgICBUcmVlRXhwcmVzc2lvbiBhc3Np
Z25tZW50ID0gY29udGV4dC5jcmVhdGVBc3NpZ25SZXNvbHZlKGxvY2F0aW9uLCBtX3ZtLT5wcm9w
ZXJ0eU5hbWVzLT5zdGFyRGVmYXVsdFByaXZhdGVOYW1lLCBleHByZXNzaW9uLCBzdGFydCwgc3Rh
cnQsIHRva2VuRW5kUG9zaXRpb24oKSwgQXNzaWdubWVudENvbnRleHQ6OkNvbnN0RGVjbGFyYXRp
b25TdGF0ZW1lbnQpOworICAgICAgICAgICAgVHJlZUV4cHJlc3Npb24gYXNzaWdubWVudCA9IGNv
bnRleHQuY3JlYXRlQXNzaWduUmVzb2x2ZShsb2NhdGlvbiwgbV92bS5wcm9wZXJ0eU5hbWVzLT5z
dGFyRGVmYXVsdFByaXZhdGVOYW1lLCBleHByZXNzaW9uLCBzdGFydCwgc3RhcnQsIHRva2VuRW5k
UG9zaXRpb24oKSwgQXNzaWdubWVudENvbnRleHQ6OkNvbnN0RGVjbGFyYXRpb25TdGF0ZW1lbnQp
OwogICAgICAgICAgICAgcmVzdWx0ID0gY29udGV4dC5jcmVhdGVFeHByU3RhdGVtZW50KGxvY2F0
aW9uLCBhc3NpZ25tZW50LCBzdGFydCwgdG9rZW5FbmRQb3NpdGlvbigpKTsKICAgICAgICAgICAg
IGZhaWxJZkZhbHNlKGF1dG9TZW1pQ29sb24oKSwgIkV4cGVjdGVkIGEgJzsnIGZvbGxvd2luZyBh
IHRhcmdldGVkIGV4cG9ydCBkZWNsYXJhdGlvbiIpOwogICAgICAgICB9CiAgICAgICAgIGZhaWxJ
ZkZhbHNlKHJlc3VsdCwgIkNhbm5vdCBwYXJzZSB0aGUgZGVjbGFyYXRpb24iKTsKIAotICAgICAg
ICBzZW1hbnRpY0ZhaWxJZkZhbHNlKGV4cG9ydE5hbWUobV92bS0+cHJvcGVydHlOYW1lcy0+ZGVm
YXVsdEtleXdvcmQpLCAiT25seSBvbmUgJ2RlZmF1bHQnIGV4cG9ydCBpcyBhbGxvd2VkIik7Ci0g
ICAgICAgIG1fbW9kdWxlU2NvcGVEYXRhLT5leHBvcnRCaW5kaW5nKCpsb2NhbE5hbWUsIG1fdm0t
PnByb3BlcnR5TmFtZXMtPmRlZmF1bHRLZXl3b3JkKTsKKyAgICAgICAgc2VtYW50aWNGYWlsSWZG
YWxzZShleHBvcnROYW1lKG1fdm0ucHJvcGVydHlOYW1lcy0+ZGVmYXVsdEtleXdvcmQpLCAiT25s
eSBvbmUgJ2RlZmF1bHQnIGV4cG9ydCBpcyBhbGxvd2VkIik7CisgICAgICAgIG1fbW9kdWxlU2Nv
cGVEYXRhLT5leHBvcnRCaW5kaW5nKCpsb2NhbE5hbWUsIG1fdm0ucHJvcGVydHlOYW1lcy0+ZGVm
YXVsdEtleXdvcmQpOwogICAgICAgICByZXR1cm4gY29udGV4dC5jcmVhdGVFeHBvcnREZWZhdWx0
RGVjbGFyYXRpb24oZXhwb3J0TG9jYXRpb24sIHJlc3VsdCwgKmxvY2FsTmFtZSk7CiAgICAgfQog
CkBAIC0zNTEwLDcgKzM1MTAsNyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVT
dGF0ZW1lCiAgICAgICAgIGhhbmRsZVByb2R1Y3Rpb25PckZhaWwyKENMT1NFQlJBQ0UsICJ9Iiwg
ImVuZCIsICJleHBvcnQgbGlzdCIpOwogCiAgICAgICAgIHR5cGVuYW1lIFRyZWVCdWlsZGVyOjpN
b2R1bGVOYW1lIG1vZHVsZU5hbWUgPSAwOwotICAgICAgICBpZiAobWF0Y2hDb250ZXh0dWFsS2V5
d29yZChtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5mcm9tKSkgeworICAgICAgICBpZiAobWF0Y2hDb250
ZXh0dWFsS2V5d29yZChtX3ZtLnByb3BlcnR5TmFtZXMtPmZyb20pKSB7CiAgICAgICAgICAgICBu
ZXh0KCk7CiAgICAgICAgICAgICBtb2R1bGVOYW1lID0gcGFyc2VNb2R1bGVOYW1lKGNvbnRleHQp
OwogICAgICAgICAgICAgZmFpbElmRmFsc2UobW9kdWxlTmFtZSwgIkNhbm5vdCBwYXJzZSB0aGUg
J2Zyb20nIGNsYXVzZSIpOwpAQCAtMzU2Niw3ICszNTY2LDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRy
ZWVCdWlsZGVyPiBUcmVlU3RhdGVtZQogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2Fz
ZSBJREVOVDoKLSAgICAgICAgICAgIGlmICgqbV90b2tlbi5tX2RhdGEuaWRlbnQgPT0gbV92bS0+
cHJvcGVydHlOYW1lcy0+YXN5bmMgJiYgIW1fdG9rZW4ubV9kYXRhLmVzY2FwZWQpIHsKKyAgICAg
ICAgICAgIGlmICgqbV90b2tlbi5tX2RhdGEuaWRlbnQgPT0gbV92bS5wcm9wZXJ0eU5hbWVzLT5h
c3luYyAmJiAhbV90b2tlbi5tX2RhdGEuZXNjYXBlZCkgewogICAgICAgICAgICAgICAgIG5leHQo
KTsKICAgICAgICAgICAgICAgICBzZW1hbnRpY0ZhaWxJZkZhbHNlKG1hdGNoKEZVTkNUSU9OKSAm
JiAhbV9sZXhlci0+aGFzTGluZVRlcm1pbmF0b3JCZWZvcmVUb2tlbigpLCAiRXhwZWN0ZWQgJ2Z1
bmN0aW9uJyBrZXl3b3JkIGZvbGxvd2luZyAnYXN5bmMnIGtleXdvcmQgd2l0aCBubyBwcmVjZWRp
bmcgbGluZSB0ZXJtaW5hdG9yIik7CiAgICAgICAgICAgICAgICAgRGVwdGhNYW5hZ2VyIHN0YXRl
bWVudERlcHRoKCZtX3N0YXRlbWVudERlcHRoKTsKQEAgLTM2OTIsNyArMzY5Miw3IEBAIHRlbXBs
YXRlIDx0eXBlbmFtZSBUcmVlQnVpbGRlcj4gVHJlZUV4cHIKICAgICAgICAgICAgIHJlc3RvcmVT
YXZlUG9pbnQoc2F2ZVBvaW50KTsKICAgICAgICAgICAgIGJvb2wgaXNBc3luY0Fycm93ID0gZmFs
c2U7CiAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoY2xhc3NpZmllci5pbmRpY2F0ZXNQb3NzaWJs
ZUFzeW5jQXJyb3dGdW5jdGlvbigpKSkgewotICAgICAgICAgICAgICAgIGlmIChtYXRjaENvbnRl
eHR1YWxLZXl3b3JkKG1fdm0tPnByb3BlcnR5TmFtZXMtPmFzeW5jKSkgeworICAgICAgICAgICAg
ICAgIGlmIChtYXRjaENvbnRleHR1YWxLZXl3b3JkKG1fdm0ucHJvcGVydHlOYW1lcy0+YXN5bmMp
KSB7CiAgICAgICAgICAgICAgICAgICAgIG5leHQoKTsKICAgICAgICAgICAgICAgICAgICAgaXNB
c3luY0Fycm93ID0gIW1fbGV4ZXItPmhhc0xpbmVUZXJtaW5hdG9yQmVmb3JlVG9rZW4oKTsKICAg
ICAgICAgICAgICAgICB9CkBAIC0zNzY3LDggKzM3NjcsOCBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUg
VHJlZUJ1aWxkZXI+IFRyZWVFeHByCiAgICAgICAgIG1fcGFyc2VyU3RhdGUuYXNzaWdubWVudENv
dW50Kys7CiAgICAgICAgIG5leHQoVHJlZUJ1aWxkZXI6OkRvbnRCdWlsZFN0cmluZ3MpOwogICAg
ICAgICBpZiAoc3RyaWN0TW9kZSgpICYmIG1fcGFyc2VyU3RhdGUubGFzdElkZW50aWZpZXIgJiYg
Y29udGV4dC5pc1Jlc29sdmUobGhzKSkgewotICAgICAgICAgICAgZmFpbElmVHJ1ZUlmU3RyaWN0
KG1fdm0tPnByb3BlcnR5TmFtZXMtPmV2YWwgPT0gKm1fcGFyc2VyU3RhdGUubGFzdElkZW50aWZp
ZXIsICJDYW5ub3QgbW9kaWZ5ICdldmFsJyBpbiBzdHJpY3QgbW9kZSIpOwotICAgICAgICAgICAg
ZmFpbElmVHJ1ZUlmU3RyaWN0KG1fdm0tPnByb3BlcnR5TmFtZXMtPmFyZ3VtZW50cyA9PSAqbV9w
YXJzZXJTdGF0ZS5sYXN0SWRlbnRpZmllciwgIkNhbm5vdCBtb2RpZnkgJ2FyZ3VtZW50cycgaW4g
c3RyaWN0IG1vZGUiKTsKKyAgICAgICAgICAgIGZhaWxJZlRydWVJZlN0cmljdChtX3ZtLnByb3Bl
cnR5TmFtZXMtPmV2YWwgPT0gKm1fcGFyc2VyU3RhdGUubGFzdElkZW50aWZpZXIsICJDYW5ub3Qg
bW9kaWZ5ICdldmFsJyBpbiBzdHJpY3QgbW9kZSIpOworICAgICAgICAgICAgZmFpbElmVHJ1ZUlm
U3RyaWN0KG1fdm0ucHJvcGVydHlOYW1lcy0+YXJndW1lbnRzID09ICptX3BhcnNlclN0YXRlLmxh
c3RJZGVudGlmaWVyLCAiQ2Fubm90IG1vZGlmeSAnYXJndW1lbnRzJyBpbiBzdHJpY3QgbW9kZSIp
OwogICAgICAgICAgICAgbV9wYXJzZXJTdGF0ZS5sYXN0SWRlbnRpZmllciA9IDA7CiAgICAgICAg
IH0KICAgICAgICAgbGhzID0gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbihjb250ZXh0KTsKQEAg
LTM5NzEsNyArMzk3MSw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVByb3Bl
cnQKIHBhcnNlUHJvcGVydHk6CiAgICAgc3dpdGNoIChtX3Rva2VuLm1fdHlwZSkgewogICAgIGNh
c2UgSURFTlQ6Ci0gICAgICAgIGlmIChVTkxJS0VMWSgqbV90b2tlbi5tX2RhdGEuaWRlbnQgPT0g
bV92bS0+cHJvcGVydHlOYW1lcy0+YXN5bmMgJiYgIW1fdG9rZW4ubV9kYXRhLmVzY2FwZWQpKSB7
CisgICAgICAgIGlmIChVTkxJS0VMWSgqbV90b2tlbi5tX2RhdGEuaWRlbnQgPT0gbV92bS5wcm9w
ZXJ0eU5hbWVzLT5hc3luYyAmJiAhbV90b2tlbi5tX2RhdGEuZXNjYXBlZCkpIHsKICAgICAgICAg
ICAgIGlmIChwYXJzZU1vZGUgPT0gU291cmNlUGFyc2VNb2RlOjpNZXRob2RNb2RlKSB7CiAgICAg
ICAgICAgICAgICAgU2F2ZVBvaW50IHNhdmVQb2ludCA9IGNyZWF0ZVNhdmVQb2ludCgpOwogICAg
ICAgICAgICAgICAgIG5leHQoKTsKQEAgLTQwMDEsNyArNDAwMSw3IEBAIG5hbWVkUHJvcGVydHk6
CiAgICAgICAgIHVuc2lnbmVkIGdldHRlck9yU2V0dGVyU3RhcnRPZmZzZXQgPSB0b2tlblN0YXJ0
KCk7CiAgICAgICAgIEpTVG9rZW4gaWRlbnRUb2tlbiA9IG1fdG9rZW47CiAKLSAgICAgICAgaWYg
KGNvbXBsZXRlIHx8ICh3YXNJZGVudCAmJiAhaXNHZW5lcmF0b3JNZXRob2RQYXJzZU1vZGUocGFy
c2VNb2RlKSAgJiYgKCppZGVudCA9PSBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5nZXQgfHwgKmlkZW50
ID09IG1fdm0tPnByb3BlcnR5TmFtZXMtPnNldCkpKQorICAgICAgICBpZiAoY29tcGxldGUgfHwg
KHdhc0lkZW50ICYmICFpc0dlbmVyYXRvck1ldGhvZFBhcnNlTW9kZShwYXJzZU1vZGUpICAmJiAo
KmlkZW50ID09IG1fdm0ucHJvcGVydHlOYW1lcy0+Z2V0IHx8ICppZGVudCA9PSBtX3ZtLnByb3Bl
cnR5TmFtZXMtPnNldCkpKQogICAgICAgICAgICAgbmV4dEV4cGVjdElkZW50aWZpZXIoTGV4ZXJG
bGFnc0lnbm9yZVJlc2VydmVkV29yZHMpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBuZXh0
RXhwZWN0SWRlbnRpZmllcihMZXhlckZsYWdzSWdub3JlUmVzZXJ2ZWRXb3JkcyB8IFRyZWVCdWls
ZGVyOjpEb250QnVpbGRLZXl3b3Jkcyk7CkBAIC00MDExLDcgKzQwMTEsNyBAQCBuYW1lZFByb3Bl
cnR5OgogICAgICAgICAgICAgVHJlZUV4cHJlc3Npb24gbm9kZSA9IHBhcnNlQXNzaWdubWVudEV4
cHJlc3Npb25PclByb3BhZ2F0ZUVycm9yQ2xhc3MoY29udGV4dCk7CiAgICAgICAgICAgICBmYWls
SWZGYWxzZShub2RlLCAiQ2Fubm90IHBhcnNlIGV4cHJlc3Npb24gZm9yIHByb3BlcnR5IGRlY2xh
cmF0aW9uIik7CiAgICAgICAgICAgICBjb250ZXh0LnNldEVuZE9mZnNldChub2RlLCBtX2xleGVy
LT5jdXJyZW50T2Zmc2V0KCkpOwotICAgICAgICAgICAgSW5mZXJOYW1lIGluZmVyTmFtZSA9IGlk
ZW50ICYmICppZGVudCA9PSBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT51bmRlcnNjb3JlUHJvdG8gPyBJ
bmZlck5hbWU6OkRpc2FsbG93ZWQgOiBJbmZlck5hbWU6OkFsbG93ZWQ7CisgICAgICAgICAgICBJ
bmZlck5hbWUgaW5mZXJOYW1lID0gaWRlbnQgJiYgKmlkZW50ID09IG1fdm0ucHJvcGVydHlOYW1l
cy0+dW5kZXJzY29yZVByb3RvID8gSW5mZXJOYW1lOjpEaXNhbGxvd2VkIDogSW5mZXJOYW1lOjpB
bGxvd2VkOwogICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlUHJvcGVydHkoaWRlbnQs
IG5vZGUsIFByb3BlcnR5Tm9kZTo6Q29uc3RhbnQsIFByb3BlcnR5Tm9kZTo6VW5rbm93biwgY29t
cGxldGUsIFN1cGVyQmluZGluZzo6Tm90TmVlZGVkLCBpbmZlck5hbWUsIENsYXNzRWxlbWVudFRh
Zzo6Tm8pOwogICAgICAgICB9CiAKQEAgLTQwMjgsNyArNDAyOCw3IEBAIG5hbWVkUHJvcGVydHk6
CiAgICAgICAgICAgICBzZW1hbnRpY0ZhaWx1cmVEdWVUb0tleXdvcmRDaGVja2luZ1Rva2VuKGlk
ZW50VG9rZW4sICJzaG9ydGhhbmQgcHJvcGVydHkgbmFtZSIpOwogICAgICAgICAgICAgSlNUZXh0
UG9zaXRpb24gc3RhcnQgPSB0b2tlblN0YXJ0UG9zaXRpb24oKTsKICAgICAgICAgICAgIEpTVG9r
ZW5Mb2NhdGlvbiBsb2NhdGlvbih0b2tlbkxvY2F0aW9uKCkpOwotICAgICAgICAgICAgY3VycmVu
dFNjb3BlKCktPnVzZVZhcmlhYmxlKGlkZW50LCBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5ldmFsID09
ICppZGVudCk7CisgICAgICAgICAgICBjdXJyZW50U2NvcGUoKS0+dXNlVmFyaWFibGUoaWRlbnQs
IG1fdm0ucHJvcGVydHlOYW1lcy0+ZXZhbCA9PSAqaWRlbnQpOwogICAgICAgICAgICAgaWYgKGN1
cnJlbnRTY29wZSgpLT5pc0Fycm93RnVuY3Rpb24oKSkKICAgICAgICAgICAgICAgICBjdXJyZW50
U2NvcGUoKS0+c2V0SW5uZXJBcnJvd0Z1bmN0aW9uVXNlc0V2YWwoKTsKICAgICAgICAgICAgIFRy
ZWVFeHByZXNzaW9uIG5vZGUgPSBjb250ZXh0LmNyZWF0ZVJlc29sdmUobG9jYXRpb24sICppZGVu
dCwgc3RhcnQsIGxhc3RUb2tlbkVuZFBvc2l0aW9uKCkpOwpAQCAtNDAzOSw5ICs0MDM5LDkgQEAg
bmFtZWRQcm9wZXJ0eToKICAgICAgICAgICAgIGNsYXNzaWZ5RXhwcmVzc2lvbkVycm9yKEVycm9y
SW5kaWNhdGVzUGF0dGVybik7CiAKICAgICAgICAgUHJvcGVydHlOb2RlOjpUeXBlIHR5cGU7Ci0g
ICAgICAgIGlmICgqaWRlbnQgPT0gbV92bS0+cHJvcGVydHlOYW1lcy0+Z2V0KQorICAgICAgICBp
ZiAoKmlkZW50ID09IG1fdm0ucHJvcGVydHlOYW1lcy0+Z2V0KQogICAgICAgICAgICAgdHlwZSA9
IFByb3BlcnR5Tm9kZTo6R2V0dGVyOwotICAgICAgICBlbHNlIGlmICgqaWRlbnQgPT0gbV92bS0+
cHJvcGVydHlOYW1lcy0+c2V0KQorICAgICAgICBlbHNlIGlmICgqaWRlbnQgPT0gbV92bS5wcm9w
ZXJ0eU5hbWVzLT5zZXQpCiAgICAgICAgICAgICB0eXBlID0gUHJvcGVydHlOb2RlOjpTZXR0ZXI7
CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGZhaWxXaXRoTWVzc2FnZSgiRXhwZWN0ZWQgYSAn
OicgZm9sbG93aW5nIHRoZSBwcm9wZXJ0eSBuYW1lICciLCBpZGVudC0+aW1wbCgpLCAiJyIpOwpA
QCAtNDA1Myw3ICs0MDUzLDcgQEAgbmFtZWRQcm9wZXJ0eToKICAgICAgICAgbmV4dCgpOwogCiAg
ICAgICAgIGlmIChtYXRjaChPUEVOUEFSRU4pKSB7Ci0gICAgICAgICAgICBjb25zdCBJZGVudGlm
aWVyJiBpZGVudCA9IG1fcGFyc2VyQXJlbmEuaWRlbnRpZmllckFyZW5hKCkubWFrZU51bWVyaWNJ
ZGVudGlmaWVyKGNvbnN0X2Nhc3Q8Vk0qPihtX3ZtKSwgcHJvcGVydHlOYW1lKTsKKyAgICAgICAg
ICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gbV9wYXJzZXJBcmVuYS5pZGVudGlmaWVyQXJl
bmEoKS5tYWtlTnVtZXJpY0lkZW50aWZpZXIoY29uc3RfY2FzdDxWTSY+KG1fdm0pLCBwcm9wZXJ0
eU5hbWUpOwogICAgICAgICAgICAgYXV0byBtZXRob2QgPSBwYXJzZVByb3BlcnR5TWV0aG9kKGNv
bnRleHQsICZpZGVudCwgcGFyc2VNb2RlKTsKICAgICAgICAgICAgIHByb3BhZ2F0ZUVycm9yKCk7
CiAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5jcmVhdGVQcm9wZXJ0eSgmaWRlbnQsIG1ldGhv
ZCwgUHJvcGVydHlOb2RlOjpDb25zdGFudCwgUHJvcGVydHlOb2RlOjpVbmtub3duLCBjb21wbGV0
ZSwgU3VwZXJCaW5kaW5nOjpOZWVkZWQsIEluZmVyTmFtZTo6QWxsb3dlZCwgQ2xhc3NFbGVtZW50
VGFnOjpObyk7CkBAIC00MDY0LDcgKzQwNjQsNyBAQCBuYW1lZFByb3BlcnR5OgogICAgICAgICBU
cmVlRXhwcmVzc2lvbiBub2RlID0gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbihjb250ZXh0KTsK
ICAgICAgICAgZmFpbElmRmFsc2Uobm9kZSwgIkNhbm5vdCBwYXJzZSBleHByZXNzaW9uIGZvciBw
cm9wZXJ0eSBkZWNsYXJhdGlvbiIpOwogICAgICAgICBjb250ZXh0LnNldEVuZE9mZnNldChub2Rl
LCBtX2xleGVyLT5jdXJyZW50T2Zmc2V0KCkpOwotICAgICAgICByZXR1cm4gY29udGV4dC5jcmVh
dGVQcm9wZXJ0eShjb25zdF9jYXN0PFZNKj4obV92bSksIG1fcGFyc2VyQXJlbmEsIHByb3BlcnR5
TmFtZSwgbm9kZSwgUHJvcGVydHlOb2RlOjpDb25zdGFudCwgUHJvcGVydHlOb2RlOjpVbmtub3du
LCBjb21wbGV0ZSwgU3VwZXJCaW5kaW5nOjpOb3ROZWVkZWQsIENsYXNzRWxlbWVudFRhZzo6Tm8p
OworICAgICAgICByZXR1cm4gY29udGV4dC5jcmVhdGVQcm9wZXJ0eShjb25zdF9jYXN0PFZNJj4o
bV92bSksIG1fcGFyc2VyQXJlbmEsIHByb3BlcnR5TmFtZSwgbm9kZSwgUHJvcGVydHlOb2RlOjpD
b25zdGFudCwgUHJvcGVydHlOb2RlOjpVbmtub3duLCBjb21wbGV0ZSwgU3VwZXJCaW5kaW5nOjpO
b3ROZWVkZWQsIENsYXNzRWxlbWVudFRhZzo6Tm8pOwogICAgIH0KICAgICBjYXNlIE9QRU5CUkFD
S0VUOiB7CiAgICAgICAgIG5leHQoKTsKQEAgLTQwNzMsNyArNDA3Myw3IEBAIG5hbWVkUHJvcGVy
dHk6CiAgICAgICAgIGhhbmRsZVByb2R1Y3Rpb25PckZhaWwoQ0xPU0VCUkFDS0VULCAiXSIsICJl
bmQiLCAiY29tcHV0ZWQgcHJvcGVydHkgbmFtZSIpOwogCiAgICAgICAgIGlmIChtYXRjaChPUEVO
UEFSRU4pKSB7Ci0gICAgICAgICAgICBhdXRvIG1ldGhvZCA9IHBhcnNlUHJvcGVydHlNZXRob2Qo
Y29udGV4dCwgJm1fdm0tPnByb3BlcnR5TmFtZXMtPm51bGxJZGVudGlmaWVyLCBwYXJzZU1vZGUp
OworICAgICAgICAgICAgYXV0byBtZXRob2QgPSBwYXJzZVByb3BlcnR5TWV0aG9kKGNvbnRleHQs
ICZtX3ZtLnByb3BlcnR5TmFtZXMtPm51bGxJZGVudGlmaWVyLCBwYXJzZU1vZGUpOwogICAgICAg
ICAgICAgcHJvcGFnYXRlRXJyb3IoKTsKICAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmNyZWF0
ZVByb3BlcnR5KHByb3BlcnR5TmFtZSwgbWV0aG9kLCBzdGF0aWNfY2FzdDxQcm9wZXJ0eU5vZGU6
OlR5cGU+KFByb3BlcnR5Tm9kZTo6Q29uc3RhbnQgfCBQcm9wZXJ0eU5vZGU6OkNvbXB1dGVkKSwg
UHJvcGVydHlOb2RlOjpLbm93bkRpcmVjdCwgY29tcGxldGUsIFN1cGVyQmluZGluZzo6TmVlZGVk
LCBDbGFzc0VsZW1lbnRUYWc6Ok5vKTsKICAgICAgICAgfQpAQCAtNDEyNiw5ICs0MTI2LDkgQEAg
dGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlUHJvcGVydAogCiAgICAgaWYgKG1hdGNo
U3BlY0lkZW50aWZpZXIoKSB8fCBtYXRjaChTVFJJTkcpIHx8IG1fdG9rZW4ubV90eXBlICYgS2V5
d29yZFRva2VuRmxhZykgewogICAgICAgICBzdHJpbmdQcm9wZXJ0eU5hbWUgPSBtX3Rva2VuLm1f
ZGF0YS5pZGVudDsKLSAgICAgICAgc2VtYW50aWNGYWlsSWZUcnVlKHRhZyA9PSBDbGFzc0VsZW1l
bnRUYWc6OlN0YXRpYyAmJiAqc3RyaW5nUHJvcGVydHlOYW1lID09IG1fdm0tPnByb3BlcnR5TmFt
ZXMtPnByb3RvdHlwZSwKKyAgICAgICAgc2VtYW50aWNGYWlsSWZUcnVlKHRhZyA9PSBDbGFzc0Vs
ZW1lbnRUYWc6OlN0YXRpYyAmJiAqc3RyaW5nUHJvcGVydHlOYW1lID09IG1fdm0ucHJvcGVydHlO
YW1lcy0+cHJvdG90eXBlLAogICAgICAgICAgICAgIkNhbm5vdCBkZWNsYXJlIGEgc3RhdGljIG1l
dGhvZCBuYW1lZCAncHJvdG90eXBlJyIpOwotICAgICAgICBzZW1hbnRpY0ZhaWxJZlRydWUodGFn
ID09IENsYXNzRWxlbWVudFRhZzo6SW5zdGFuY2UgJiYgKnN0cmluZ1Byb3BlcnR5TmFtZSA9PSBt
X3ZtLT5wcm9wZXJ0eU5hbWVzLT5jb25zdHJ1Y3RvciwKKyAgICAgICAgc2VtYW50aWNGYWlsSWZU
cnVlKHRhZyA9PSBDbGFzc0VsZW1lbnRUYWc6Okluc3RhbmNlICYmICpzdHJpbmdQcm9wZXJ0eU5h
bWUgPT0gbV92bS5wcm9wZXJ0eU5hbWVzLT5jb25zdHJ1Y3RvciwKICAgICAgICAgICAgICJDYW5u
b3QgZGVjbGFyZSBhIGdldHRlciBvciBzZXR0ZXIgbmFtZWQgJ2NvbnN0cnVjdG9yJyIpOwogICAg
ICAgICBuZXh0KCk7CiAgICAgfSBlbHNlIGlmIChtYXRjaChET1VCTEUpIHx8IG1hdGNoKElOVEVH
RVIpKSB7CkBAIC00MTU3LDcgKzQxNTcsNyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+
IFRyZWVQcm9wZXJ0CiAgICAgaWYgKGNvbXB1dGVkUHJvcGVydHlOYW1lKQogICAgICAgICByZXR1
cm4gY29udGV4dC5jcmVhdGVHZXR0ZXJPclNldHRlclByb3BlcnR5KGxvY2F0aW9uLCBzdGF0aWNf
Y2FzdDxQcm9wZXJ0eU5vZGU6OlR5cGU+KHR5cGUgfCBQcm9wZXJ0eU5vZGU6OkNvbXB1dGVkKSwg
c3RyaWN0LCBjb21wdXRlZFByb3BlcnR5TmFtZSwgaW5mbywgdGFnKTsKIAotICAgIHJldHVybiBj
b250ZXh0LmNyZWF0ZUdldHRlck9yU2V0dGVyUHJvcGVydHkoY29uc3RfY2FzdDxWTSo+KG1fdm0p
LCBtX3BhcnNlckFyZW5hLCBsb2NhdGlvbiwgdHlwZSwgc3RyaWN0LCBudW1lcmljUHJvcGVydHlO
YW1lLCBpbmZvLCB0YWcpOworICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUdldHRlck9yU2V0dGVy
UHJvcGVydHkoY29uc3RfY2FzdDxWTSY+KG1fdm0pLCBtX3BhcnNlckFyZW5hLCBsb2NhdGlvbiwg
dHlwZSwgc3RyaWN0LCBudW1lcmljUHJvcGVydHlOYW1lLCBpbmZvLCB0YWcpOwogfQogCiB0ZW1w
bGF0ZSA8dHlwZW5hbWUgTGV4ZXJUeXBlPgpAQCAtNDIyNCw3ICs0MjI0LDcgQEAgdGVtcGxhdGUg
PGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzcwogCiAgICAgYm9vbCBzZWVuVW5kZXJzY29y
ZVByb3RvID0gZmFsc2U7CiAgICAgaWYgKHNob3VsZENoZWNrUHJvcGVydHlGb3JVbmRlcnNjb3Jl
UHJvdG9EdXBsaWNhdGUoY29udGV4dCwgcHJvcGVydHkpKQotICAgICAgICBzZWVuVW5kZXJzY29y
ZVByb3RvID0gKmNvbnRleHQuZ2V0TmFtZShwcm9wZXJ0eSkgPT0gbV92bS0+cHJvcGVydHlOYW1l
cy0+dW5kZXJzY29yZVByb3RvOworICAgICAgICBzZWVuVW5kZXJzY29yZVByb3RvID0gKmNvbnRl
eHQuZ2V0TmFtZShwcm9wZXJ0eSkgPT0gbV92bS5wcm9wZXJ0eU5hbWVzLT51bmRlcnNjb3JlUHJv
dG87CiAKICAgICBUcmVlUHJvcGVydHlMaXN0IHByb3BlcnR5TGlzdCA9IGNvbnRleHQuY3JlYXRl
UHJvcGVydHlMaXN0KGxvY2F0aW9uLCBwcm9wZXJ0eSk7CiAgICAgVHJlZVByb3BlcnR5TGlzdCB0
YWlsID0gcHJvcGVydHlMaXN0OwpAQCAtNDI0MCw3ICs0MjQwLDcgQEAgdGVtcGxhdGUgPGNsYXNz
IFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzcwogICAgICAgICAgICAgcmV0dXJuIHBhcnNlU3RyaWN0
T2JqZWN0TGl0ZXJhbChjb250ZXh0KTsKICAgICAgICAgfQogICAgICAgICBpZiAoc2hvdWxkQ2hl
Y2tQcm9wZXJ0eUZvclVuZGVyc2NvcmVQcm90b0R1cGxpY2F0ZShjb250ZXh0LCBwcm9wZXJ0eSkp
IHsKLSAgICAgICAgICAgIGlmICgqY29udGV4dC5nZXROYW1lKHByb3BlcnR5KSA9PSBtX3ZtLT5w
cm9wZXJ0eU5hbWVzLT51bmRlcnNjb3JlUHJvdG8pIHsKKyAgICAgICAgICAgIGlmICgqY29udGV4
dC5nZXROYW1lKHByb3BlcnR5KSA9PSBtX3ZtLnByb3BlcnR5TmFtZXMtPnVuZGVyc2NvcmVQcm90
bykgewogICAgICAgICAgICAgICAgIHNlbWFudGljRmFpbElmVHJ1ZShzZWVuVW5kZXJzY29yZVBy
b3RvLCAiQXR0ZW1wdGVkIHRvIHJlZGVmaW5lIF9fcHJvdG9fXyBwcm9wZXJ0eSIpOwogICAgICAg
ICAgICAgICAgIHNlZW5VbmRlcnNjb3JlUHJvdG8gPSB0cnVlOwogICAgICAgICAgICAgfQpAQCAt
NDI3NCw3ICs0Mjc0LDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVz
cwogCiAgICAgYm9vbCBzZWVuVW5kZXJzY29yZVByb3RvID0gZmFsc2U7CiAgICAgaWYgKHNob3Vs
ZENoZWNrUHJvcGVydHlGb3JVbmRlcnNjb3JlUHJvdG9EdXBsaWNhdGUoY29udGV4dCwgcHJvcGVy
dHkpKQotICAgICAgICBzZWVuVW5kZXJzY29yZVByb3RvID0gKmNvbnRleHQuZ2V0TmFtZShwcm9w
ZXJ0eSkgPT0gbV92bS0+cHJvcGVydHlOYW1lcy0+dW5kZXJzY29yZVByb3RvOworICAgICAgICBz
ZWVuVW5kZXJzY29yZVByb3RvID0gKmNvbnRleHQuZ2V0TmFtZShwcm9wZXJ0eSkgPT0gbV92bS5w
cm9wZXJ0eU5hbWVzLT51bmRlcnNjb3JlUHJvdG87CiAKICAgICBUcmVlUHJvcGVydHlMaXN0IHBy
b3BlcnR5TGlzdCA9IGNvbnRleHQuY3JlYXRlUHJvcGVydHlMaXN0KGxvY2F0aW9uLCBwcm9wZXJ0
eSk7CiAgICAgVHJlZVByb3BlcnR5TGlzdCB0YWlsID0gcHJvcGVydHlMaXN0OwpAQCAtNDI4Niw3
ICs0Mjg2LDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzcwogICAg
ICAgICBwcm9wZXJ0eSA9IHBhcnNlUHJvcGVydHkoY29udGV4dCwgdHJ1ZSk7CiAgICAgICAgIGZh
aWxJZkZhbHNlKHByb3BlcnR5LCAiQ2Fubm90IHBhcnNlIG9iamVjdCBsaXRlcmFsIHByb3BlcnR5
Iik7CiAgICAgICAgIGlmIChzaG91bGRDaGVja1Byb3BlcnR5Rm9yVW5kZXJzY29yZVByb3RvRHVw
bGljYXRlKGNvbnRleHQsIHByb3BlcnR5KSkgewotICAgICAgICAgICAgaWYgKCpjb250ZXh0Lmdl
dE5hbWUocHJvcGVydHkpID09IG1fdm0tPnByb3BlcnR5TmFtZXMtPnVuZGVyc2NvcmVQcm90bykg
eworICAgICAgICAgICAgaWYgKCpjb250ZXh0LmdldE5hbWUocHJvcGVydHkpID09IG1fdm0ucHJv
cGVydHlOYW1lcy0+dW5kZXJzY29yZVByb3RvKSB7CiAgICAgICAgICAgICAgICAgc2VtYW50aWNG
YWlsSWZUcnVlKHNlZW5VbmRlcnNjb3JlUHJvdG8sICJBdHRlbXB0ZWQgdG8gcmVkZWZpbmUgX19w
cm90b19fIHByb3BlcnR5Iik7CiAgICAgICAgICAgICAgICAgc2VlblVuZGVyc2NvcmVQcm90byA9
IHRydWU7CiAgICAgICAgICAgICB9CkBAIC00MzgxLDcgKzQzODEsNyBAQCB0ZW1wbGF0ZSA8Y2xh
c3MgVHJlZUJ1aWxkZXI+IFRyZWVDbGFzc0V4CiB7CiAgICAgQVNTRVJUKG1hdGNoKENMQVNTVE9L
RU4pKTsKICAgICBQYXJzZXJDbGFzc0luZm88VHJlZUJ1aWxkZXI+IGluZm87Ci0gICAgaW5mby5j
bGFzc05hbWUgPSAmbV92bS0+cHJvcGVydHlOYW1lcy0+bnVsbElkZW50aWZpZXI7CisgICAgaW5m
by5jbGFzc05hbWUgPSAmbV92bS5wcm9wZXJ0eU5hbWVzLT5udWxsSWRlbnRpZmllcjsKICAgICBy
ZXR1cm4gcGFyc2VDbGFzcyhjb250ZXh0LCBGdW5jdGlvbk5hbWVSZXF1aXJlbWVudHM6Ok5vbmUs
IGluZm8pOwogfQogCkBAIC00MzkzLDcgKzQzOTMsNyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1
aWxkZXI+IFRyZWVFeHByZXNzCiAgICAgdW5zaWduZWQgZnVuY3Rpb25LZXl3b3JkU3RhcnQgPSB0
b2tlblN0YXJ0KCk7CiAgICAgbmV4dCgpOwogICAgIFBhcnNlckZ1bmN0aW9uSW5mbzxUcmVlQnVp
bGRlcj4gZnVuY3Rpb25JbmZvOwotICAgIGZ1bmN0aW9uSW5mby5uYW1lID0gJm1fdm0tPnByb3Bl
cnR5TmFtZXMtPm51bGxJZGVudGlmaWVyOworICAgIGZ1bmN0aW9uSW5mby5uYW1lID0gJm1fdm0u
cHJvcGVydHlOYW1lcy0+bnVsbElkZW50aWZpZXI7CiAgICAgU291cmNlUGFyc2VNb2RlIHBhcnNl
TW9kZSA9IFNvdXJjZVBhcnNlTW9kZTo6Tm9ybWFsRnVuY3Rpb25Nb2RlOwogICAgIGlmIChjb25z
dW1lKFRJTUVTKSkKICAgICAgICAgcGFyc2VNb2RlID0gU291cmNlUGFyc2VNb2RlOjpHZW5lcmF0
b3JXcmFwcGVyRnVuY3Rpb25Nb2RlOwpAQCAtNDQxNCw3ICs0NDE0LDcgQEAgdGVtcGxhdGUgPGNs
YXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzcwogICAgICAgICBwYXJzZU1vZGUgPSBTb3VyY2VQ
YXJzZU1vZGU6OkFzeW5jR2VuZXJhdG9yV3JhcHBlckZ1bmN0aW9uTW9kZTsKIAogICAgIFBhcnNl
ckZ1bmN0aW9uSW5mbzxUcmVlQnVpbGRlcj4gZnVuY3Rpb25JbmZvOwotICAgIGZ1bmN0aW9uSW5m
by5uYW1lID0gJm1fdm0tPnByb3BlcnR5TmFtZXMtPm51bGxJZGVudGlmaWVyOworICAgIGZ1bmN0
aW9uSW5mby5uYW1lID0gJm1fdm0ucHJvcGVydHlOYW1lcy0+bnVsbElkZW50aWZpZXI7CiAgICAg
ZmFpbElmRmFsc2UocGFyc2VGdW5jdGlvbkluZm8oY29udGV4dCwgRnVuY3Rpb25OYW1lUmVxdWly
ZW1lbnRzOjpOb25lLCBwYXJzZU1vZGUsIGZhbHNlLCBDb25zdHJ1Y3RvcktpbmQ6Ok5vbmUsIFN1
cGVyQmluZGluZzo6Tm90TmVlZGVkLCBmdW5jdGlvbktleXdvcmRTdGFydCwgZnVuY3Rpb25JbmZv
LCBGdW5jdGlvbkRlZmluaXRpb25UeXBlOjpFeHByZXNzaW9uKSwgcGFyc2VNb2RlID09IFNvdXJj
ZVBhcnNlTW9kZTo6QXN5bmNGdW5jdGlvbk1vZGUgPyAiQ2Fubm90IHBhcnNlIGFzeW5jIGZ1bmN0
aW9uIGV4cHJlc3Npb24iIDogIkNhbm5vdCBwYXJzZSBhc3luYyBnZW5lcmF0b3IgZnVuY3Rpb24g
ZXhwcmVzc2lvbiIpOwogICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUZ1bmN0aW9uRXhwcihsb2Nh
dGlvbiwgZnVuY3Rpb25JbmZvKTsKIH0KQEAgLTQ1MjYsNyArNDUyNiw3IEBAIHRlbXBsYXRlIDxj
bGFzcyBUcmVlQnVpbGRlcj4gVHJlZUV4cHJlc3MKIAogICAgICAgICBnb3RvIGlkZW50aWZpZXJF
eHByZXNzaW9uOwogICAgIGNhc2UgSURFTlQ6IHsKLSAgICAgICAgaWYgKFVOTElLRUxZKCptX3Rv
a2VuLm1fZGF0YS5pZGVudCA9PSBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5hc3luYyAmJiAhbV90b2tl
bi5tX2RhdGEuZXNjYXBlZCkpIHsKKyAgICAgICAgaWYgKFVOTElLRUxZKCptX3Rva2VuLm1fZGF0
YS5pZGVudCA9PSBtX3ZtLnByb3BlcnR5TmFtZXMtPmFzeW5jICYmICFtX3Rva2VuLm1fZGF0YS5l
c2NhcGVkKSkgewogICAgICAgICAgICAgSlNUZXh0UG9zaXRpb24gc3RhcnQgPSB0b2tlblN0YXJ0
UG9zaXRpb24oKTsKICAgICAgICAgICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gbV90b2tl
bi5tX2RhdGEuaWRlbnQ7CiAgICAgICAgICAgICBKU1Rva2VuTG9jYXRpb24gbG9jYXRpb24odG9r
ZW5Mb2NhdGlvbigpKTsKQEAgLTQ1NTEsNyArNDU1MSw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVl
QnVpbGRlcj4gVHJlZUV4cHJlc3MKICAgICAgICAgaWYgKFVOTElLRUxZKG1hdGNoKEFSUk9XRlVO
Q1RJT04pKSkKICAgICAgICAgICAgIHJldHVybiAwOwogCi0gICAgICAgIHJldHVybiBjcmVhdGVS
ZXNvbHZlQW5kVXNlVmFyaWFibGUoY29udGV4dCwgaWRlbnQsICppZGVudCA9PSBtX3ZtLT5wcm9w
ZXJ0eU5hbWVzLT5ldmFsLCBzdGFydCwgbG9jYXRpb24pOworICAgICAgICByZXR1cm4gY3JlYXRl
UmVzb2x2ZUFuZFVzZVZhcmlhYmxlKGNvbnRleHQsIGlkZW50LCAqaWRlbnQgPT0gbV92bS5wcm9w
ZXJ0eU5hbWVzLT5ldmFsLCBzdGFydCwgbG9jYXRpb24pOwogICAgIH0KICAgICBjYXNlIEJJR0lO
VDogewogICAgICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9IG1fdG9rZW4ubV9kYXRhLmJp
Z0ludFN0cmluZzsKQEAgLTQ3MzYsNyArNDczNiw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVp
bGRlcj4gVHJlZUV4cHJlc3MKICAgICBib29sIGJhc2VJc05ld1RhcmdldCA9IGZhbHNlOwogICAg
IGlmIChuZXdDb3VudCAmJiBtYXRjaChET1QpKSB7CiAgICAgICAgIG5leHQoKTsKLSAgICAgICAg
aWYgKG1hdGNoQ29udGV4dHVhbEtleXdvcmQobV92bS0+cHJvcGVydHlOYW1lcy0+dGFyZ2V0KSkg
eworICAgICAgICBpZiAobWF0Y2hDb250ZXh0dWFsS2V5d29yZChtX3ZtLnByb3BlcnR5TmFtZXMt
PnRhcmdldCkpIHsKICAgICAgICAgICAgIFNjb3BlUmVmIGNsb3Nlc3RPcmRpbmFyeUZ1bmN0aW9u
U2NvcGUgPSBjbG9zZXN0UGFyZW50T3JkaW5hcnlGdW5jdGlvbk5vbkxleGljYWxTY29wZSgpOwog
ICAgICAgICAgICAgc2VtYW50aWNGYWlsSWZGYWxzZShjdXJyZW50U2NvcGUoKS0+aXNGdW5jdGlv
bigpIHx8IGNsb3Nlc3RPcmRpbmFyeUZ1bmN0aW9uU2NvcGUtPmV2YWxDb250ZXh0VHlwZSgpID09
IEV2YWxDb250ZXh0VHlwZTo6RnVuY3Rpb25FdmFsQ29udGV4dCwgIm5ldy50YXJnZXQgaXMgb25s
eSB2YWxpZCBpbnNpZGUgZnVuY3Rpb25zIik7CiAgICAgICAgICAgICBiYXNlSXNOZXdUYXJnZXQg
PSB0cnVlOwpAQCAtNDc3Nyw5ICs0Nzc3LDkgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVy
PiBUcmVlRXhwcmVzcwogICAgICAgICBuZXh0KCk7CiAgICAgICAgIEpTVGV4dFBvc2l0aW9uIGV4
cHJlc3Npb25FbmQgPSBsYXN0VG9rZW5FbmRQb3NpdGlvbigpOwogICAgICAgICBpZiAoY29uc3Vt
ZShET1QpKSB7Ci0gICAgICAgICAgICBpZiAobWF0Y2hDb250ZXh0dWFsS2V5d29yZChtX3ZtLT5w
cm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5tZXRhUHVibGljTmFtZSgpKSkgeworICAgICAg
ICAgICAgaWYgKG1hdGNoQ29udGV4dHVhbEtleXdvcmQobV92bS5wcm9wZXJ0eU5hbWVzLT5idWls
dGluTmFtZXMoKS5tZXRhUHVibGljTmFtZSgpKSkgewogICAgICAgICAgICAgICAgIHNlbWFudGlj
RmFpbElmRmFsc2UobV9zY3JpcHRNb2RlID09IEpTUGFyc2VyU2NyaXB0TW9kZTo6TW9kdWxlLCAi
aW1wb3J0Lm1ldGEgaXMgb25seSB2YWxpZCBpbnNpZGUgbW9kdWxlcyIpOwotICAgICAgICAgICAg
ICAgIGJhc2UgPSBjb250ZXh0LmNyZWF0ZUltcG9ydE1ldGFFeHByKGxvY2F0aW9uLCBjcmVhdGVS
ZXNvbHZlQW5kVXNlVmFyaWFibGUoY29udGV4dCwgJm1fdm0tPnByb3BlcnR5TmFtZXMtPm1ldGFQ
cml2YXRlTmFtZSwgZmFsc2UsIGV4cHJlc3Npb25TdGFydCwgbG9jYXRpb24pKTsKKyAgICAgICAg
ICAgICAgICBiYXNlID0gY29udGV4dC5jcmVhdGVJbXBvcnRNZXRhRXhwcihsb2NhdGlvbiwgY3Jl
YXRlUmVzb2x2ZUFuZFVzZVZhcmlhYmxlKGNvbnRleHQsICZtX3ZtLnByb3BlcnR5TmFtZXMtPm1l
dGFQcml2YXRlTmFtZSwgZmFsc2UsIGV4cHJlc3Npb25TdGFydCwgbG9jYXRpb24pKTsKICAgICAg
ICAgICAgICAgICBuZXh0KCk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAg
IGZhaWxJZlRydWUobWF0Y2goSURFTlQpLCAiXCJpbXBvcnQuXCIgY2FuIG9ubHkgZm9sbG93ZWQg
d2l0aCBtZXRhIik7CkBAIC00NzkzLDcgKzQ3OTMsNyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1
aWxkZXI+IFRyZWVFeHByZXNzCiAgICAgICAgICAgICBiYXNlID0gY29udGV4dC5jcmVhdGVJbXBv
cnRFeHByKGxvY2F0aW9uLCBleHByLCBleHByZXNzaW9uU3RhcnQsIGV4cHJlc3Npb25FbmQsIGxh
c3RUb2tlbkVuZFBvc2l0aW9uKCkpOwogICAgICAgICB9CiAgICAgfSBlbHNlIGlmICghYmFzZUlz
TmV3VGFyZ2V0KSB7Ci0gICAgICAgIGNvbnN0IGJvb2wgaXNBc3luYyA9IG1hdGNoQ29udGV4dHVh
bEtleXdvcmQobV92bS0+cHJvcGVydHlOYW1lcy0+YXN5bmMpOworICAgICAgICBjb25zdCBib29s
IGlzQXN5bmMgPSBtYXRjaENvbnRleHR1YWxLZXl3b3JkKG1fdm0ucHJvcGVydHlOYW1lcy0+YXN5
bmMpOwogCiAgICAgICAgIGJhc2UgPSBwYXJzZVByaW1hcnlFeHByZXNzaW9uKGNvbnRleHQpOwog
ICAgICAgICBmYWlsSWZGYWxzZShiYXNlLCAiQ2Fubm90IHBhcnNlIGJhc2UgZXhwcmVzc2lvbiIp
OwpAQCAtNDg2Myw3ICs0ODYzLDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVl
RXhwcmVzcwogICAgICAgICAgICAgICAgICAgICBzaXplX3QgdXNlZFZhcmlhYmxlc1NpemUgPSBj
dXJyZW50U2NvcGUoKS0+Y3VycmVudFVzZWRWYXJpYWJsZXNTaXplKCk7CiAgICAgICAgICAgICAg
ICAgICAgIEpTVGV4dFBvc2l0aW9uIGV4cHJlc3Npb25FbmQgPSBsYXN0VG9rZW5FbmRQb3NpdGlv
bigpOwogICAgICAgICAgICAgICAgICAgICBPcHRpb25hbDxDYWxsT3JBcHBseURlcHRoU2NvcGU+
IGNhbGxPckFwcGx5RGVwdGhTY29wZTsKLSAgICAgICAgICAgICAgICAgICAgcmVjb3JkQ2FsbE9y
QXBwbHlEZXB0aDxUcmVlQnVpbGRlcj4odGhpcywgKm1fdm0sIGNhbGxPckFwcGx5RGVwdGhTY29w
ZSwgYmFzZSk7CisgICAgICAgICAgICAgICAgICAgIHJlY29yZENhbGxPckFwcGx5RGVwdGg8VHJl
ZUJ1aWxkZXI+KHRoaXMsIG1fdm0sIGNhbGxPckFwcGx5RGVwdGhTY29wZSwgYmFzZSk7CiAKICAg
ICAgICAgICAgICAgICAgICAgVHJlZUFyZ3VtZW50cyBhcmd1bWVudHMgPSBwYXJzZUFyZ3VtZW50
cyhjb250ZXh0KTsKIApAQCAtNDk1Miw3ICs0OTUyLDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVC
dWlsZGVyPiBUcmVlRXhwcmVzcwogICAgIHVuc2lnbmVkIGZ1bmN0aW9uS2V5d29yZFN0YXJ0ID0g
dG9rZW5TdGFydCgpOwogICAgIGxvY2F0aW9uID0gdG9rZW5Mb2NhdGlvbigpOwogICAgIFBhcnNl
ckZ1bmN0aW9uSW5mbzxUcmVlQnVpbGRlcj4gaW5mbzsKLSAgICBpbmZvLm5hbWUgPSAmbV92bS0+
cHJvcGVydHlOYW1lcy0+bnVsbElkZW50aWZpZXI7CisgICAgaW5mby5uYW1lID0gJm1fdm0ucHJv
cGVydHlOYW1lcy0+bnVsbElkZW50aWZpZXI7CiAKICAgICBTb3VyY2VQYXJzZU1vZGUgcGFyc2VN
b2RlID0gaXNBc3luYyA/IFNvdXJjZVBhcnNlTW9kZTo6QXN5bmNBcnJvd0Z1bmN0aW9uTW9kZSA6
IFNvdXJjZVBhcnNlTW9kZTo6QXJyb3dGdW5jdGlvbk1vZGU7CiAgICAgZmFpbElmRmFsc2UoKHBh
cnNlRnVuY3Rpb25JbmZvKGNvbnRleHQsIEZ1bmN0aW9uTmFtZVJlcXVpcmVtZW50czo6VW5uYW1l
ZCwgcGFyc2VNb2RlLCB0cnVlLCBDb25zdHJ1Y3RvcktpbmQ6Ok5vbmUsIFN1cGVyQmluZGluZzo6
Tm90TmVlZGVkLCBmdW5jdGlvbktleXdvcmRTdGFydCwgaW5mbywgRnVuY3Rpb25EZWZpbml0aW9u
VHlwZTo6RXhwcmVzc2lvbikpLCAiQ2Fubm90IHBhcnNlIGFycm93IGZ1bmN0aW9uIGV4cHJlc3Np
b24iKTsKQEAgLTUwMzgsNyArNTAzOCw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4g
VHJlZUV4cHJlc3MKICAgICBib29sIGlzRXZhbE9yQXJndW1lbnRzID0gZmFsc2U7CiAgICAgaWYg
KHN0cmljdE1vZGUoKSkgewogICAgICAgICBpZiAoY29udGV4dC5pc1Jlc29sdmUoZXhwcikpCi0g
ICAgICAgICAgICBpc0V2YWxPckFyZ3VtZW50cyA9ICptX3BhcnNlclN0YXRlLmxhc3RJZGVudGlm
aWVyID09IG1fdm0tPnByb3BlcnR5TmFtZXMtPmV2YWwgfHwgKm1fcGFyc2VyU3RhdGUubGFzdElk
ZW50aWZpZXIgPT0gbV92bS0+cHJvcGVydHlOYW1lcy0+YXJndW1lbnRzOworICAgICAgICAgICAg
aXNFdmFsT3JBcmd1bWVudHMgPSAqbV9wYXJzZXJTdGF0ZS5sYXN0SWRlbnRpZmllciA9PSBtX3Zt
LnByb3BlcnR5TmFtZXMtPmV2YWwgfHwgKm1fcGFyc2VyU3RhdGUubGFzdElkZW50aWZpZXIgPT0g
bV92bS5wcm9wZXJ0eU5hbWVzLT5hcmd1bWVudHM7CiAgICAgfQogICAgIGZhaWxJZlRydWVJZlN0
cmljdChpc0V2YWxPckFyZ3VtZW50cyAmJiBoYXNQcmVmaXhVcGRhdGVPcCwgIkNhbm5vdCBtb2Rp
ZnkgJyIsIG1fcGFyc2VyU3RhdGUubGFzdElkZW50aWZpZXItPmltcGwoKSwgIicgaW4gc3RyaWN0
IG1vZGUiKTsKICAgICBzd2l0Y2ggKG1fdG9rZW4ubV90eXBlKSB7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9wYXJzZXIvUGFyc2VyLmgJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBA
CiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAxIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtk
ZS5vcmcpCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20p
Ci0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAy
MDExLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQg
KEMpIDIwMDMtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYwpAQCAtMTE3LDE1ICsxMTcsMTUgQEAgc3RydWN0IFNjb3BlTGFiZWxJbmZvIHsK
ICAgICBib29sIGlzTG9vcDsKIH07CiAKLUFMV0FZU19JTkxJTkUgc3RhdGljIGJvb2wgaXNBcmd1
bWVudHMoY29uc3QgVk0qIHZtLCBjb25zdCBJZGVudGlmaWVyKiBpZGVudCkKK0FMV0FZU19JTkxJ
TkUgc3RhdGljIGJvb2wgaXNBcmd1bWVudHMoY29uc3QgVk0mIHZtLCBjb25zdCBJZGVudGlmaWVy
KiBpZGVudCkKIHsKLSAgICByZXR1cm4gdm0tPnByb3BlcnR5TmFtZXMtPmFyZ3VtZW50cyA9PSAq
aWRlbnQ7CisgICAgcmV0dXJuIHZtLnByb3BlcnR5TmFtZXMtPmFyZ3VtZW50cyA9PSAqaWRlbnQ7
CiB9Ci1BTFdBWVNfSU5MSU5FIHN0YXRpYyBib29sIGlzRXZhbChjb25zdCBWTSogdm0sIGNvbnN0
IElkZW50aWZpZXIqIGlkZW50KQorQUxXQVlTX0lOTElORSBzdGF0aWMgYm9vbCBpc0V2YWwoY29u
c3QgVk0mIHZtLCBjb25zdCBJZGVudGlmaWVyKiBpZGVudCkKIHsKLSAgICByZXR1cm4gdm0tPnBy
b3BlcnR5TmFtZXMtPmV2YWwgPT0gKmlkZW50OworICAgIHJldHVybiB2bS5wcm9wZXJ0eU5hbWVz
LT5ldmFsID09ICppZGVudDsKIH0KLUFMV0FZU19JTkxJTkUgc3RhdGljIGJvb2wgaXNFdmFsT3JB
cmd1bWVudHNJZGVudGlmaWVyKGNvbnN0IFZNKiB2bSwgY29uc3QgSWRlbnRpZmllciogaWRlbnQp
CitBTFdBWVNfSU5MSU5FIHN0YXRpYyBib29sIGlzRXZhbE9yQXJndW1lbnRzSWRlbnRpZmllcihj
b25zdCBWTSYgdm0sIGNvbnN0IElkZW50aWZpZXIqIGlkZW50KQogewogICAgIHJldHVybiBpc0V2
YWwodm0sIGlkZW50KSB8fCBpc0FyZ3VtZW50cyh2bSwgaWRlbnQpOwogfQpAQCAtMTU2LDcgKzE1
Niw3IEBAIHN0cnVjdCBTY29wZSB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU2NvcGUpOwog
CiBwdWJsaWM6Ci0gICAgU2NvcGUoY29uc3QgVk0qIHZtLCBib29sIGlzRnVuY3Rpb24sIGJvb2wg
aXNHZW5lcmF0b3IsIGJvb2wgc3RyaWN0TW9kZSwgYm9vbCBpc0Fycm93RnVuY3Rpb24sIGJvb2wg
aXNBc3luY0Z1bmN0aW9uKQorICAgIFNjb3BlKGNvbnN0IFZNJiB2bSwgYm9vbCBpc0Z1bmN0aW9u
LCBib29sIGlzR2VuZXJhdG9yLCBib29sIHN0cmljdE1vZGUsIGJvb2wgaXNBcnJvd0Z1bmN0aW9u
LCBib29sIGlzQXN5bmNGdW5jdGlvbikKICAgICAgICAgOiBtX3ZtKHZtKQogICAgICAgICAsIG1f
c2hhZG93c0FyZ3VtZW50cyhmYWxzZSkKICAgICAgICAgLCBtX3VzZXNFdmFsKGZhbHNlKQpAQCAt
NDg5LDcgKzQ4OSw3IEBAIHB1YmxpYzoKICAgICAgICAgYm9vbCBpc0FyZ3VtZW50c0lkZW50ID0g
aXNBcmd1bWVudHMobV92bSwgaWRlbnQpOwogICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fZGVj
bGFyZWRWYXJpYWJsZXMuYWRkKGlkZW50LT5pbXBsKCkpOwogICAgICAgICBib29sIGlzVmFsaWRT
dHJpY3RNb2RlID0gKGFkZFJlc3VsdC5pc05ld0VudHJ5IHx8ICFhZGRSZXN1bHQuaXRlcmF0b3It
PnZhbHVlLmlzUGFyYW1ldGVyKCkpCi0gICAgICAgICAgICAmJiBtX3ZtLT5wcm9wZXJ0eU5hbWVz
LT5ldmFsICE9ICppZGVudCAmJiAhaXNBcmd1bWVudHNJZGVudDsKKyAgICAgICAgICAgICYmIG1f
dm0ucHJvcGVydHlOYW1lcy0+ZXZhbCAhPSAqaWRlbnQgJiYgIWlzQXJndW1lbnRzSWRlbnQ7CiAg
ICAgICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUuY2xlYXJJc1ZhcigpOwogICAgICAgICBh
ZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlLnNldElzUGFyYW1ldGVyKCk7CiAgICAgICAgIG1faXNW
YWxpZFN0cmljdE1vZGUgPSBtX2lzVmFsaWRTdHJpY3RNb2RlICYmIGlzVmFsaWRTdHJpY3RNb2Rl
OwpAQCAtNTczLDcgKzU3Myw3IEBAIHB1YmxpYzoKICAgICAgICAgaWYgKG1fdXNlc0V2YWwpCiAg
ICAgICAgICAgICBzZXRJbm5lckFycm93RnVuY3Rpb25Vc2VzRXZhbCgpOwogICAgICAgICAKLSAg
ICAgICAgaWYgKHVzZWRWYXJpYWJsZXNDb250YWlucyhtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5hcmd1
bWVudHMuaW1wbCgpKSkKKyAgICAgICAgaWYgKHVzZWRWYXJpYWJsZXNDb250YWlucyhtX3ZtLnBy
b3BlcnR5TmFtZXMtPmFyZ3VtZW50cy5pbXBsKCkpKQogICAgICAgICAgICAgc2V0SW5uZXJBcnJv
d0Z1bmN0aW9uVXNlc0FyZ3VtZW50cygpOwogICAgIH0KIApAQCAtNTk1LDcgKzU5NSw3IEBAIHB1
YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgICAgICAg
ICAgICAgIC8vICJhcmd1bWVudHMiIHJlZmVyZW5jZSBzaG91bGQgYmUgcmVzb2x2ZWQgYXQgZnVu
Y3Rpb24gYm91ZGFyeS4KLSAgICAgICAgICAgICAgICAgICAgaWYgKG5lc3RlZFNjb3BlLT5pc0Z1
bmN0aW9uQm91bmRhcnkoKSAmJiBuZXN0ZWRTY29wZS0+aGFzQXJndW1lbnRzKCkgJiYgaW1wbCA9
PSBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5hcmd1bWVudHMuaW1wbCgpICYmICFuZXN0ZWRTY29wZS0+
aXNBcnJvd0Z1bmN0aW9uQm91bmRhcnkoKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5lc3Rl
ZFNjb3BlLT5pc0Z1bmN0aW9uQm91bmRhcnkoKSAmJiBuZXN0ZWRTY29wZS0+aGFzQXJndW1lbnRz
KCkgJiYgaW1wbCA9PSBtX3ZtLnByb3BlcnR5TmFtZXMtPmFyZ3VtZW50cy5pbXBsKCkgJiYgIW5l
c3RlZFNjb3BlLT5pc0Fycm93RnVuY3Rpb25Cb3VuZGFyeSgpKQogICAgICAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CiAKICAgICAgICAgICAgICAgICAgICAgZGVzdGluYXRpb25TZXQuYWRk
KGltcGwpOwpAQCAtNzk1LDcgKzc5NSw3IEBAIHByaXZhdGU6CiAgICAgICAgIG1faXNBc3luY0Z1
bmN0aW9uQm91bmRhcnkgPSB0cnVlOwogICAgIH0KIAotICAgIGNvbnN0IFZNKiBtX3ZtOworICAg
IGNvbnN0IFZNJiBtX3ZtOwogICAgIGJvb2wgbV9zaGFkb3dzQXJndW1lbnRzOwogICAgIGJvb2wg
bV91c2VzRXZhbDsKICAgICBib29sIG1fbmVlZHNGdWxsQWN0aXZhdGlvbjsKQEAgLTg4NSw3ICs4
ODUsNyBAQCBjbGFzcyBQYXJzZXIgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogCiBw
dWJsaWM6Ci0gICAgUGFyc2VyKFZNKiwgY29uc3QgU291cmNlQ29kZSYsIEpTUGFyc2VyQnVpbHRp
bk1vZGUsIEpTUGFyc2VyU3RyaWN0TW9kZSwgSlNQYXJzZXJTY3JpcHRNb2RlLCBTb3VyY2VQYXJz
ZU1vZGUsIFN1cGVyQmluZGluZywgQ29uc3RydWN0b3JLaW5kIGRlZmF1bHRDb25zdHJ1Y3Rvcktp
bmQgPSBDb25zdHJ1Y3RvcktpbmQ6Ok5vbmUsIERlcml2ZWRDb250ZXh0VHlwZSA9IERlcml2ZWRD
b250ZXh0VHlwZTo6Tm9uZSwgYm9vbCBpc0V2YWxDb250ZXh0ID0gZmFsc2UsIEV2YWxDb250ZXh0
VHlwZSA9IEV2YWxDb250ZXh0VHlwZTo6Tm9uZSwgRGVidWdnZXJQYXJzZURhdGEqID0gbnVsbHB0
cik7CisgICAgUGFyc2VyKFZNJiwgY29uc3QgU291cmNlQ29kZSYsIEpTUGFyc2VyQnVpbHRpbk1v
ZGUsIEpTUGFyc2VyU3RyaWN0TW9kZSwgSlNQYXJzZXJTY3JpcHRNb2RlLCBTb3VyY2VQYXJzZU1v
ZGUsIFN1cGVyQmluZGluZywgQ29uc3RydWN0b3JLaW5kIGRlZmF1bHRDb25zdHJ1Y3RvcktpbmQg
PSBDb25zdHJ1Y3RvcktpbmQ6Ok5vbmUsIERlcml2ZWRDb250ZXh0VHlwZSA9IERlcml2ZWRDb250
ZXh0VHlwZTo6Tm9uZSwgYm9vbCBpc0V2YWxDb250ZXh0ID0gZmFsc2UsIEV2YWxDb250ZXh0VHlw
ZSA9IEV2YWxDb250ZXh0VHlwZTo6Tm9uZSwgRGVidWdnZXJQYXJzZURhdGEqID0gbnVsbHB0cik7
CiAgICAgflBhcnNlcigpOwogCiAgICAgdGVtcGxhdGUgPGNsYXNzIFBhcnNlZE5vZGU+CkBAIC0x
NjgzLDcgKzE2ODMsNyBAQCBwcml2YXRlOgogICAgIAogICAgIGJvb2wgY2FuUmVjdXJzZSgpCiAg
ICAgewotICAgICAgICByZXR1cm4gbV92bS0+aXNTYWZlVG9SZWN1cnNlKCk7CisgICAgICAgIHJl
dHVybiBtX3ZtLmlzU2FmZVRvUmVjdXJzZSgpOwogICAgIH0KICAgICAKICAgICBjb25zdCBKU1Rl
eHRQb3NpdGlvbiYgbGFzdFRva2VuRW5kUG9zaXRpb24oKSBjb25zdApAQCAtMTg2Niw3ICsxODY2
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgbV9lcnJvck1lc3NhZ2UgPSBTdHJpbmcoKTsKICAgICB9
CiAKLSAgICBWTSogbV92bTsKKyAgICBWTSYgbV92bTsKICAgICBjb25zdCBTb3VyY2VDb2RlKiBt
X3NvdXJjZTsKICAgICBQYXJzZXJBcmVuYSBtX3BhcnNlckFyZW5hOwogICAgIHN0ZDo6dW5pcXVl
X3B0cjxMZXhlclR5cGU+IG1fbGV4ZXI7CkBAIC0xOTk3LDcgKzE5OTcsNyBAQCBzdGQ6OnVuaXF1
ZV9wdHI8UGFyc2VkTm9kZT4gUGFyc2VyPExleGVyCiAKIHRlbXBsYXRlIDxjbGFzcyBQYXJzZWRO
b2RlPgogc3RkOjp1bmlxdWVfcHRyPFBhcnNlZE5vZGU+IHBhcnNlKAotICAgIFZNKiB2bSwgY29u
c3QgU291cmNlQ29kZSYgc291cmNlLAorICAgIFZNJiB2bSwgY29uc3QgU291cmNlQ29kZSYgc291
cmNlLAogICAgIGNvbnN0IElkZW50aWZpZXImIG5hbWUsIEpTUGFyc2VyQnVpbHRpbk1vZGUgYnVp
bHRpbk1vZGUsCiAgICAgSlNQYXJzZXJTdHJpY3RNb2RlIHN0cmljdE1vZGUsIEpTUGFyc2VyU2Ny
aXB0TW9kZSBzY3JpcHRNb2RlLCBTb3VyY2VQYXJzZU1vZGUgcGFyc2VNb2RlLCBTdXBlckJpbmRp
bmcgc3VwZXJCaW5kaW5nLAogICAgIFBhcnNlckVycm9yJiBlcnJvciwgSlNUZXh0UG9zaXRpb24q
IHBvc2l0aW9uQmVmb3JlTGFzdE5ld2xpbmUgPSBudWxscHRyLApAQCAtMjA1NywxMiArMjA1Nywx
MiBAQCBpbmxpbmUgc3RkOjp1bmlxdWVfcHRyPFByb2dyYW1Ob2RlPiBwYXJzCiAgICAgYm9vbCBp
c0V2YWxOb2RlID0gZmFsc2U7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFByb2dyYW1Ob2RlPiByZXN1
bHQ7CiAgICAgaWYgKHNvdXJjZS5wcm92aWRlcigpLT5zb3VyY2UoKS5pczhCaXQoKSkgewotICAg
ICAgICBQYXJzZXI8TGV4ZXI8TENoYXI+PiBwYXJzZXIoJnZtLCBzb3VyY2UsIEpTUGFyc2VyQnVp
bHRpbk1vZGU6Ok5vdEJ1aWx0aW4sIEpTUGFyc2VyU3RyaWN0TW9kZTo6Tm90U3RyaWN0LCBKU1Bh
cnNlclNjcmlwdE1vZGU6OkNsYXNzaWMsIFNvdXJjZVBhcnNlTW9kZTo6UHJvZ3JhbU1vZGUsIFN1
cGVyQmluZGluZzo6Tm90TmVlZGVkLCBDb25zdHJ1Y3RvcktpbmQ6Ok5vbmUsIERlcml2ZWRDb250
ZXh0VHlwZTo6Tm9uZSwgaXNFdmFsTm9kZSwgRXZhbENvbnRleHRUeXBlOjpOb25lLCBudWxscHRy
KTsKKyAgICAgICAgUGFyc2VyPExleGVyPExDaGFyPj4gcGFyc2VyKHZtLCBzb3VyY2UsIEpTUGFy
c2VyQnVpbHRpbk1vZGU6Ok5vdEJ1aWx0aW4sIEpTUGFyc2VyU3RyaWN0TW9kZTo6Tm90U3RyaWN0
LCBKU1BhcnNlclNjcmlwdE1vZGU6OkNsYXNzaWMsIFNvdXJjZVBhcnNlTW9kZTo6UHJvZ3JhbU1v
ZGUsIFN1cGVyQmluZGluZzo6Tm90TmVlZGVkLCBDb25zdHJ1Y3RvcktpbmQ6Ok5vbmUsIERlcml2
ZWRDb250ZXh0VHlwZTo6Tm9uZSwgaXNFdmFsTm9kZSwgRXZhbENvbnRleHRUeXBlOjpOb25lLCBu
dWxscHRyKTsKICAgICAgICAgcmVzdWx0ID0gcGFyc2VyLnBhcnNlPFByb2dyYW1Ob2RlPihlcnJv
ciwgbmFtZSwgU291cmNlUGFyc2VNb2RlOjpQcm9ncmFtTW9kZSwgUGFyc2luZ0NvbnRleHQ6OkZ1
bmN0aW9uQ29uc3RydWN0b3IsIGZ1bmN0aW9uQ29uc3RydWN0b3JQYXJhbWV0ZXJzRW5kUG9zaXRp
b24pOwogICAgICAgICBpZiAocG9zaXRpb25CZWZvcmVMYXN0TmV3bGluZSkKICAgICAgICAgICAg
ICpwb3NpdGlvbkJlZm9yZUxhc3ROZXdsaW5lID0gcGFyc2VyLnBvc2l0aW9uQmVmb3JlTGFzdE5l
d2xpbmUoKTsKICAgICB9IGVsc2UgewotICAgICAgICBQYXJzZXI8TGV4ZXI8VUNoYXI+PiBwYXJz
ZXIoJnZtLCBzb3VyY2UsIEpTUGFyc2VyQnVpbHRpbk1vZGU6Ok5vdEJ1aWx0aW4sIEpTUGFyc2Vy
U3RyaWN0TW9kZTo6Tm90U3RyaWN0LCBKU1BhcnNlclNjcmlwdE1vZGU6OkNsYXNzaWMsIFNvdXJj
ZVBhcnNlTW9kZTo6UHJvZ3JhbU1vZGUsIFN1cGVyQmluZGluZzo6Tm90TmVlZGVkLCBDb25zdHJ1
Y3RvcktpbmQ6Ok5vbmUsIERlcml2ZWRDb250ZXh0VHlwZTo6Tm9uZSwgaXNFdmFsTm9kZSwgRXZh
bENvbnRleHRUeXBlOjpOb25lLCBudWxscHRyKTsKKyAgICAgICAgUGFyc2VyPExleGVyPFVDaGFy
Pj4gcGFyc2VyKHZtLCBzb3VyY2UsIEpTUGFyc2VyQnVpbHRpbk1vZGU6Ok5vdEJ1aWx0aW4sIEpT
UGFyc2VyU3RyaWN0TW9kZTo6Tm90U3RyaWN0LCBKU1BhcnNlclNjcmlwdE1vZGU6OkNsYXNzaWMs
IFNvdXJjZVBhcnNlTW9kZTo6UHJvZ3JhbU1vZGUsIFN1cGVyQmluZGluZzo6Tm90TmVlZGVkLCBD
b25zdHJ1Y3RvcktpbmQ6Ok5vbmUsIERlcml2ZWRDb250ZXh0VHlwZTo6Tm9uZSwgaXNFdmFsTm9k
ZSwgRXZhbENvbnRleHRUeXBlOjpOb25lLCBudWxscHRyKTsKICAgICAgICAgcmVzdWx0ID0gcGFy
c2VyLnBhcnNlPFByb2dyYW1Ob2RlPihlcnJvciwgbmFtZSwgU291cmNlUGFyc2VNb2RlOjpQcm9n
cmFtTW9kZSwgUGFyc2luZ0NvbnRleHQ6OkZ1bmN0aW9uQ29uc3RydWN0b3IsIGZ1bmN0aW9uQ29u
c3RydWN0b3JQYXJhbWV0ZXJzRW5kUG9zaXRpb24pOwogICAgICAgICBpZiAocG9zaXRpb25CZWZv
cmVMYXN0TmV3bGluZSkKICAgICAgICAgICAgICpwb3NpdGlvbkJlZm9yZUxhc3ROZXdsaW5lID0g
cGFyc2VyLnBvc2l0aW9uQmVmb3JlTGFzdE5ld2xpbmUoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9wYXJzZXIvUGFyc2VyQXJlbmEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcGFyc2VyL1BhcnNlckFyZW5hLmgJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyQXJlbmEuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxOCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTQ0LDEyICs0NCwxMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogCiAgICAgICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBUPgotICAgICAgICBBTFdBWVNfSU5MSU5FIGNvbnN0IElkZW50aWZp
ZXImIG1ha2VJZGVudGlmaWVyKFZNKiwgY29uc3QgVCogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0
aCk7Ci0gICAgICAgIEFMV0FZU19JTkxJTkUgY29uc3QgSWRlbnRpZmllciYgbWFrZUVtcHR5SWRl
bnRpZmllcihWTSopOwotICAgICAgICBBTFdBWVNfSU5MSU5FIGNvbnN0IElkZW50aWZpZXImIG1h
a2VJZGVudGlmaWVyTENoYXJGcm9tVUNoYXIoVk0qLCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywg
c2l6ZV90IGxlbmd0aCk7Ci0gICAgICAgIEFMV0FZU19JTkxJTkUgY29uc3QgSWRlbnRpZmllciYg
bWFrZUlkZW50aWZpZXIoVk0qLCBTeW1ib2xJbXBsKik7CisgICAgICAgIEFMV0FZU19JTkxJTkUg
Y29uc3QgSWRlbnRpZmllciYgbWFrZUlkZW50aWZpZXIoVk0mLCBjb25zdCBUKiBjaGFyYWN0ZXJz
LCBzaXplX3QgbGVuZ3RoKTsKKyAgICAgICAgQUxXQVlTX0lOTElORSBjb25zdCBJZGVudGlmaWVy
JiBtYWtlRW1wdHlJZGVudGlmaWVyKFZNJik7CisgICAgICAgIEFMV0FZU19JTkxJTkUgY29uc3Qg
SWRlbnRpZmllciYgbWFrZUlkZW50aWZpZXJMQ2hhckZyb21VQ2hhcihWTSYsIGNvbnN0IFVDaGFy
KiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoKTsKKyAgICAgICAgQUxXQVlTX0lOTElORSBjb25z
dCBJZGVudGlmaWVyJiBtYWtlSWRlbnRpZmllcihWTSYsIFN5bWJvbEltcGwqKTsKIAotICAgICAg
ICBjb25zdCBJZGVudGlmaWVyJiBtYWtlTnVtZXJpY0lkZW50aWZpZXIoVk0qLCBkb3VibGUgbnVt
YmVyKTsKKyAgICAgICAgY29uc3QgSWRlbnRpZmllciYgbWFrZU51bWVyaWNJZGVudGlmaWVyKFZN
JiwgZG91YmxlIG51bWJlcik7CiAKICAgICBwdWJsaWM6CiAgICAgICAgIHN0YXRpYyBjb25zdCBp
bnQgTWF4aW11bUNhY2hhYmxlQ2hhcmFjdGVyID0gMTI4OwpAQCAtNzAsMTAgKzcwLDEwIEBAIG5h
bWVzcGFjZSBKU0MgewogICAgIH07CiAKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLSAgICBB
TFdBWVNfSU5MSU5FIGNvbnN0IElkZW50aWZpZXImIElkZW50aWZpZXJBcmVuYTo6bWFrZUlkZW50
aWZpZXIoVk0qIHZtLCBjb25zdCBUKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoKQorICAgIEFM
V0FZU19JTkxJTkUgY29uc3QgSWRlbnRpZmllciYgSWRlbnRpZmllckFyZW5hOjptYWtlSWRlbnRp
ZmllcihWTSYgdm0sIGNvbnN0IFQqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgpCiAgICAgewog
ICAgICAgICBpZiAoIWxlbmd0aCkKLSAgICAgICAgICAgIHJldHVybiB2bS0+cHJvcGVydHlOYW1l
cy0+ZW1wdHlJZGVudGlmaWVyOworICAgICAgICAgICAgcmV0dXJuIHZtLnByb3BlcnR5TmFtZXMt
PmVtcHR5SWRlbnRpZmllcjsKICAgICAgICAgaWYgKGNoYXJhY3RlcnNbMF0gPj0gTWF4aW11bUNh
Y2hhYmxlQ2hhcmFjdGVyKSB7CiAgICAgICAgICAgICBtX2lkZW50aWZpZXJzLmFwcGVuZChJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBjaGFyYWN0ZXJzLCBsZW5ndGgpKTsKICAgICAgICAgICAg
IHJldHVybiBtX2lkZW50aWZpZXJzLmxhc3QoKTsKQEAgLTkzLDIyICs5MywyMiBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgcmV0dXJuIG1faWRlbnRpZmllcnMubGFzdCgpOwogICAgIH0KIAot
ICAgIEFMV0FZU19JTkxJTkUgY29uc3QgSWRlbnRpZmllciYgSWRlbnRpZmllckFyZW5hOjptYWtl
SWRlbnRpZmllcihWTSosIFN5bWJvbEltcGwqIHN5bWJvbCkKKyAgICBBTFdBWVNfSU5MSU5FIGNv
bnN0IElkZW50aWZpZXImIElkZW50aWZpZXJBcmVuYTo6bWFrZUlkZW50aWZpZXIoVk0mLCBTeW1i
b2xJbXBsKiBzeW1ib2wpCiAgICAgewogICAgICAgICBBU1NFUlQoc3ltYm9sKTsKICAgICAgICAg
bV9pZGVudGlmaWVycy5hcHBlbmQoSWRlbnRpZmllcjo6ZnJvbVVpZCgqc3ltYm9sKSk7CiAgICAg
ICAgIHJldHVybiBtX2lkZW50aWZpZXJzLmxhc3QoKTsKICAgICB9CiAKLSAgICBBTFdBWVNfSU5M
SU5FIGNvbnN0IElkZW50aWZpZXImIElkZW50aWZpZXJBcmVuYTo6bWFrZUVtcHR5SWRlbnRpZmll
cihWTSogdm0pCisgICAgQUxXQVlTX0lOTElORSBjb25zdCBJZGVudGlmaWVyJiBJZGVudGlmaWVy
QXJlbmE6Om1ha2VFbXB0eUlkZW50aWZpZXIoVk0mIHZtKQogICAgIHsKLSAgICAgICAgcmV0dXJu
IHZtLT5wcm9wZXJ0eU5hbWVzLT5lbXB0eUlkZW50aWZpZXI7CisgICAgICAgIHJldHVybiB2bS5w
cm9wZXJ0eU5hbWVzLT5lbXB0eUlkZW50aWZpZXI7CiAgICAgfQogCi0gICAgQUxXQVlTX0lOTElO
RSBjb25zdCBJZGVudGlmaWVyJiBJZGVudGlmaWVyQXJlbmE6Om1ha2VJZGVudGlmaWVyTENoYXJG
cm9tVUNoYXIoVk0qIHZtLCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCkK
KyAgICBBTFdBWVNfSU5MSU5FIGNvbnN0IElkZW50aWZpZXImIElkZW50aWZpZXJBcmVuYTo6bWFr
ZUlkZW50aWZpZXJMQ2hhckZyb21VQ2hhcihWTSYgdm0sIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJz
LCBzaXplX3QgbGVuZ3RoKQogICAgIHsKICAgICAgICAgaWYgKCFsZW5ndGgpCi0gICAgICAgICAg
ICByZXR1cm4gdm0tPnByb3BlcnR5TmFtZXMtPmVtcHR5SWRlbnRpZmllcjsKKyAgICAgICAgICAg
IHJldHVybiB2bS5wcm9wZXJ0eU5hbWVzLT5lbXB0eUlkZW50aWZpZXI7CiAgICAgICAgIGlmIChj
aGFyYWN0ZXJzWzBdID49IE1heGltdW1DYWNoYWJsZUNoYXJhY3RlcikgewogICAgICAgICAgICAg
bV9pZGVudGlmaWVycy5hcHBlbmQoSWRlbnRpZmllcjo6Y3JlYXRlTENoYXJGcm9tVUNoYXIodm0s
IGNoYXJhY3RlcnMsIGxlbmd0aCkpOwogICAgICAgICAgICAgcmV0dXJuIG1faWRlbnRpZmllcnMu
bGFzdCgpOwpAQCAtMTI4LDcgKzEyOCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICByZXR1
cm4gbV9pZGVudGlmaWVycy5sYXN0KCk7CiAgICAgfQogICAgIAotICAgIGlubGluZSBjb25zdCBJ
ZGVudGlmaWVyJiBJZGVudGlmaWVyQXJlbmE6Om1ha2VOdW1lcmljSWRlbnRpZmllcihWTSogdm0s
IGRvdWJsZSBudW1iZXIpCisgICAgaW5saW5lIGNvbnN0IElkZW50aWZpZXImIElkZW50aWZpZXJB
cmVuYTo6bWFrZU51bWVyaWNJZGVudGlmaWVyKFZNJiB2bSwgZG91YmxlIG51bWJlcikKICAgICB7
CiAgICAgICAgIC8vIEZJWE1FOiBXaHkgZG9lc24ndCB0aGlzIHVzZSB0aGUgSWRlbnRpZmllcjo6
ZnJvbSBvdmVybG9hZCB0aGF0IHRha2VzIGEgZG91YmxlPwogICAgICAgICAvLyBTZWVtcyB3ZSBh
cmUgbWlzc2luZyBvdXQgb24gbXVsdGlwbGUgb3B0aW1pemF0aW9ucyBieSBub3QgdXNpbmcgaXQu
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1N5bnRheENoZWNrZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1N5bnRheENoZWNrZXIuaAko
cmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9TeW50YXhD
aGVja2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDEwLCAyMDEzLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjQsNyArNjQsNyBAQCBwdWJsaWM6
CiAgICAgICAgIFN5bnRheENoZWNrZXIqIG1fY29udGV4dDsKICAgICB9OwogICAgIAotICAgIFN5
bnRheENoZWNrZXIoVk0qICwgdm9pZCopCisgICAgU3ludGF4Q2hlY2tlcihWTSYgLCB2b2lkKikK
ICAgICB7CiAgICAgfQogCkBAIC0yMjYsNyArMjI2LDcgQEAgcHVibGljOgogICAgIHsKICAgICAg
ICAgcmV0dXJuIFByb3BlcnR5KHR5cGUpOwogICAgIH0KLSAgICBQcm9wZXJ0eSBjcmVhdGVQcm9w
ZXJ0eShWTSogdm0sIFBhcnNlckFyZW5hJiBwYXJzZXJBcmVuYSwgZG91YmxlIG5hbWUsIGludCwg
UHJvcGVydHlOb2RlOjpUeXBlIHR5cGUsIFByb3BlcnR5Tm9kZTo6UHV0VHlwZSwgYm9vbCBjb21w
bGV0ZSwgU3VwZXJCaW5kaW5nLCBDbGFzc0VsZW1lbnRUYWcpCisgICAgUHJvcGVydHkgY3JlYXRl
UHJvcGVydHkoVk0mIHZtLCBQYXJzZXJBcmVuYSYgcGFyc2VyQXJlbmEsIGRvdWJsZSBuYW1lLCBp
bnQsIFByb3BlcnR5Tm9kZTo6VHlwZSB0eXBlLCBQcm9wZXJ0eU5vZGU6OlB1dFR5cGUsIGJvb2wg
Y29tcGxldGUsIFN1cGVyQmluZGluZywgQ2xhc3NFbGVtZW50VGFnKQogICAgIHsKICAgICAgICAg
aWYgKCFjb21wbGV0ZSkKICAgICAgICAgICAgIHJldHVybiBQcm9wZXJ0eSh0eXBlKTsKQEAgLTI5
Nyw3ICsyOTcsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4gUHJvcGVydHkodHlw
ZSk7CiAgICAgfQotICAgIFByb3BlcnR5IGNyZWF0ZUdldHRlck9yU2V0dGVyUHJvcGVydHkoVk0q
IHZtLCBQYXJzZXJBcmVuYSYgcGFyc2VyQXJlbmEsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIFBy
b3BlcnR5Tm9kZTo6VHlwZSB0eXBlLCBib29sIHN0cmljdCwgZG91YmxlIG5hbWUsIGNvbnN0IFBh
cnNlckZ1bmN0aW9uSW5mbzxTeW50YXhDaGVja2VyPiYsIENsYXNzRWxlbWVudFRhZykKKyAgICBQ
cm9wZXJ0eSBjcmVhdGVHZXR0ZXJPclNldHRlclByb3BlcnR5KFZNJiB2bSwgUGFyc2VyQXJlbmEm
IHBhcnNlckFyZW5hLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBQcm9wZXJ0eU5vZGU6OlR5cGUg
dHlwZSwgYm9vbCBzdHJpY3QsIGRvdWJsZSBuYW1lLCBjb25zdCBQYXJzZXJGdW5jdGlvbkluZm88
U3ludGF4Q2hlY2tlcj4mLCBDbGFzc0VsZW1lbnRUYWcpCiAgICAgewogICAgICAgICBpZiAoIXN0
cmljdCkKICAgICAgICAgICAgIHJldHVybiBQcm9wZXJ0eSh0eXBlKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlckJ5dGVjb2RlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJCeXRlY29kZS5jcHAJKHJl
dmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxl
ckJ5dGVjb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEyLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zOCw4ICszOCw4IEBAIEpTVmFsdWUgQnl0ZWNv
ZGU6OnRvSlMoRXhlY1N0YXRlKiBleGVjKSAKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAg
IEpTT2JqZWN0KiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjKTsKICAgICByZXN1
bHQtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+Ynl0ZWNvZGVJbmRleCwganNOdW1i
ZXIobV9ieXRlY29kZUluZGV4KSk7Ci0gICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIHZtLnByb3Bl
cnR5TmFtZXMtPm9wY29kZSwganNTdHJpbmcoZXhlYywgU3RyaW5nOjpmcm9tVVRGOChvcGNvZGVO
YW1lc1ttX29wY29kZUlEXSkpKTsKLSAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVy
dHlOYW1lcy0+ZGVzY3JpcHRpb24sIGpzU3RyaW5nKGV4ZWMsIFN0cmluZzo6ZnJvbVVURjgobV9k
ZXNjcmlwdGlvbikpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1l
cy0+b3Bjb2RlLCBqc1N0cmluZyh2bSwgU3RyaW5nOjpmcm9tVVRGOChvcGNvZGVOYW1lc1ttX29w
Y29kZUlEXSkpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+
ZGVzY3JpcHRpb24sIGpzU3RyaW5nKHZtLCBTdHJpbmc6OmZyb21VVEY4KG1fZGVzY3JpcHRpb24p
KSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3Byb2ZpbGVyL1Byb2ZpbGVyQnl0ZWNvZGVTZXF1ZW5jZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyQnl0ZWNvZGVTZXF1ZW5jZS5jcHAJ
KHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9m
aWxlckJ5dGVjb2RlU2VxdWVuY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODMsNyArODMsNyBA
QCB2b2lkIEJ5dGVjb2RlU2VxdWVuY2U6OmFkZFNlcXVlbmNlUHJvcGVyCiAgICAgSlNBcnJheSog
aGVhZGVyID0gY29uc3RydWN0RW1wdHlBcnJheShleGVjLCAwKTsKICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2hl
YWRlci5zaXplKCk7ICsraSkgewotICAgICAgICBoZWFkZXItPnB1dERpcmVjdEluZGV4KGV4ZWMs
IGksIGpzU3RyaW5nKGV4ZWMsIFN0cmluZzo6ZnJvbVVURjgobV9oZWFkZXJbaV0pKSk7CisgICAg
ICAgIGhlYWRlci0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaSwganNTdHJpbmcodm0sIFN0cmluZzo6
ZnJvbVVURjgobV9oZWFkZXJbaV0pKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIHZvaWQoKSk7CiAgICAgfQogICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0
eU5hbWVzLT5oZWFkZXIsIGhlYWRlcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJv
ZmlsZXIvUHJvZmlsZXJCeXRlY29kZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9wcm9maWxlci9Qcm9maWxlckJ5dGVjb2Rlcy5jcHAJKHJldmlzaW9uIDI0OTEyOCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlckJ5dGVjb2Rlcy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEy
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0y
MDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtNTcsOSArNTcsOSBAQCBKU1ZhbHVlIEJ5dGVjb2Rlczo6dG9KUyhFeGVj
U3RhdGUqIGV4ZWMpCiAgICAgSlNPYmplY3QqIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0
KGV4ZWMpOwogICAgIAogICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVz
LT5ieXRlY29kZXNJRCwganNOdW1iZXIobV9pZCkpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZt
LCB2bS5wcm9wZXJ0eU5hbWVzLT5pbmZlcnJlZE5hbWUsIGpzU3RyaW5nKGV4ZWMsIFN0cmluZzo6
ZnJvbVVURjgobV9pbmZlcnJlZE5hbWUpKSk7Ci0gICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIHZt
LnByb3BlcnR5TmFtZXMtPnNvdXJjZUNvZGUsIGpzU3RyaW5nKGV4ZWMsIFN0cmluZzo6ZnJvbVVU
RjgobV9zb3VyY2VDb2RlKSkpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0
eU5hbWVzLT5oYXNoLCBqc1N0cmluZyhleGVjLCBTdHJpbmc6OmZyb21VVEY4KHRvQ1N0cmluZyht
X2hhc2gpKSkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5p
bmZlcnJlZE5hbWUsIGpzU3RyaW5nKHZtLCBTdHJpbmc6OmZyb21VVEY4KG1faW5mZXJyZWROYW1l
KSkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5zb3VyY2VD
b2RlLCBqc1N0cmluZyh2bSwgU3RyaW5nOjpmcm9tVVRGOChtX3NvdXJjZUNvZGUpKSk7CisgICAg
cmVzdWx0LT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmhhc2gsIGpzU3RyaW5nKHZt
LCBTdHJpbmc6OmZyb21VVEY4KHRvQ1N0cmluZyhtX2hhc2gpKSkpOwogICAgIHJlc3VsdC0+cHV0
RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5pbnN0cnVjdGlvbkNvdW50LCBqc051bWJlciht
X2luc3RydWN0aW9uQ291bnQpKTsKICAgICBhZGRTZXF1ZW5jZVByb3BlcnRpZXMoZXhlYywgcmVz
dWx0KTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxl
ckNvbXBpbGF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJv
ZmlsZXIvUHJvZmlsZXJDb21waWxhdGlvbi5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlckNvbXBpbGF0aW9uLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAx
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTExOSw3ICsxMTksNyBAQCBKU1ZhbHVlIENvbXBpbGF0aW9uOjp0b0pTKEV4
ZWNTdGF0ZSogZXhlCiAgICAgSlNPYmplY3QqIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0
KGV4ZWMpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgcmVzdWx0
LT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmJ5dGVjb2Rlc0lELCBqc051bWJlciht
X2J5dGVjb2Rlcy0+aWQoKSkpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0
eU5hbWVzLT5jb21waWxhdGlvbktpbmQsIGpzU3RyaW5nKGV4ZWMsIFN0cmluZzo6ZnJvbVVURjgo
dG9DU3RyaW5nKG1fa2luZCkpKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIHZtLnByb3Bl
cnR5TmFtZXMtPmNvbXBpbGF0aW9uS2luZCwganNTdHJpbmcodm0sIFN0cmluZzo6ZnJvbVVURjgo
dG9DU3RyaW5nKG1fa2luZCkpKSk7CiAgICAgCiAgICAgSlNBcnJheSogcHJvZmlsZWRCeXRlY29k
ZXMgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIDApOwogICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIHsgfSk7CkBAIC0xNzYsOSArMTc2LDkgQEAgSlNWYWx1ZSBDb21waWxhdGlvbjo6
dG9KUyhFeGVjU3RhdGUqIGV4ZQogICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0
eU5hbWVzLT5udW1JbmxpbmVkR2V0QnlJZHMsIGpzTnVtYmVyKG1fbnVtSW5saW5lZEdldEJ5SWRz
KSk7CiAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm51bUlubGlu
ZWRQdXRCeUlkcywganNOdW1iZXIobV9udW1JbmxpbmVkUHV0QnlJZHMpKTsKICAgICByZXN1bHQt
PnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bnVtSW5saW5lZENhbGxzLCBqc051bWJl
cihtX251bUlubGluZWRDYWxscykpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCB2bS5wcm9w
ZXJ0eU5hbWVzLT5qZXR0aXNvblJlYXNvbiwganNTdHJpbmcoZXhlYywgU3RyaW5nOjpmcm9tVVRG
OCh0b0NTdHJpbmcobV9qZXR0aXNvblJlYXNvbikpKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qo
dm0sIHZtLnByb3BlcnR5TmFtZXMtPmpldHRpc29uUmVhc29uLCBqc1N0cmluZyh2bSwgU3RyaW5n
Ojpmcm9tVVRGOCh0b0NTdHJpbmcobV9qZXR0aXNvblJlYXNvbikpKSk7CiAgICAgaWYgKCFtX2Fk
ZGl0aW9uYWxKZXR0aXNvblJlYXNvbi5pc051bGwoKSkKLSAgICAgICAgcmVzdWx0LT5wdXREaXJl
Y3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmFkZGl0aW9uYWxKZXR0aXNvblJlYXNvbiwganNTdHJp
bmcoZXhlYywgU3RyaW5nOjpmcm9tVVRGOChtX2FkZGl0aW9uYWxKZXR0aXNvblJlYXNvbikpKTsK
KyAgICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmFkZGl0aW9u
YWxKZXR0aXNvblJlYXNvbiwganNTdHJpbmcodm0sIFN0cmluZzo6ZnJvbVVURjgobV9hZGRpdGlv
bmFsSmV0dGlzb25SZWFzb24pKSk7CiAgICAgCiAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIHZt
LnByb3BlcnR5TmFtZXMtPnVpZCwgbV91aWQudG9KUyhleGVjKSk7CiAgICAgCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJDb21waWxlZEJ5dGVjb2RlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJDb21w
aWxlZEJ5dGVjb2RlLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3Byb2ZpbGVyL1Byb2ZpbGVyQ29tcGlsZWRCeXRlY29kZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE5IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NDgsNyArNDgsNyBAQCBKU1ZhbHVlIENvbXBpbGVkQnl0ZWNvZGU6OnRvSlMoRXhlY1N0YXRlCiAg
ICAgSlNPYmplY3QqIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMpOwogICAgIAog
ICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5vcmlnaW4sIG1fb3Jp
Z2luLnRvSlMoZXhlYykpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5h
bWVzLT5kZXNjcmlwdGlvbiwganNTdHJpbmcoZXhlYywgU3RyaW5nOjpmcm9tVVRGOChtX2Rlc2Ny
aXB0aW9uKSkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5k
ZXNjcmlwdGlvbiwganNTdHJpbmcodm0sIFN0cmluZzo6ZnJvbVVURjgobV9kZXNjcmlwdGlvbikp
KTsKICAgICAKICAgICByZXR1cm4gcmVzdWx0OwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3Byb2ZpbGVyL1Byb2ZpbGVyRXZlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlckV2ZW50LmNwcAkocmV2aXNpb24gMjQ5MTI4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyRXZlbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTUzLDkgKzUzLDkgQEAgSlNWYWx1ZSBFdmVudDo6dG9KUyhFeGVjU3RhdGUqIGV4
ZWMpIGNvbgogICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5ieXRl
Y29kZXNJRCwganNOdW1iZXIobV9ieXRlY29kZXMtPmlkKCkpKTsKICAgICBpZiAobV9jb21waWxh
dGlvbikKICAgICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmNv
bXBpbGF0aW9uVUlELCBtX2NvbXBpbGF0aW9uLT51aWQoKS50b0pTKGV4ZWMpKTsKLSAgICByZXN1
bHQtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+c3VtbWFyeSwganNTdHJpbmcoZXhl
YywgU3RyaW5nOjpmcm9tVVRGOChtX3N1bW1hcnkpKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qo
dm0sIHZtLnByb3BlcnR5TmFtZXMtPnN1bW1hcnksIGpzU3RyaW5nKHZtLCBTdHJpbmc6OmZyb21V
VEY4KG1fc3VtbWFyeSkpKTsKICAgICBpZiAobV9kZXRhaWwubGVuZ3RoKCkpCi0gICAgICAgIHJl
c3VsdC0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5kZXRhaWwsIGpzU3RyaW5nKGV4
ZWMsIFN0cmluZzo6ZnJvbVVURjgobV9kZXRhaWwpKSk7CisgICAgICAgIHJlc3VsdC0+cHV0RGly
ZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5kZXRhaWwsIGpzU3RyaW5nKHZtLCBTdHJpbmc6OmZy
b21VVEY4KG1fZGV0YWlsKSkpOwogICAgIAogICAgIHJldHVybiByZXN1bHQ7CiB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJPU1JFeGl0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJPU1JFeGl0LmNw
cAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1By
b2ZpbGVyT1NSRXhpdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTEsNyArNTEsNyBAQCBKU1ZhbHVlIE9T
UkV4aXQ6OnRvSlMoRXhlY1N0YXRlKiBleGVjKSBjCiAgICAgSlNPYmplY3QqIHJlc3VsdCA9IGNv
bnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMpOwogICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCB2bS5w
cm9wZXJ0eU5hbWVzLT5pZCwganNOdW1iZXIobV9pZCkpOwogICAgIHJlc3VsdC0+cHV0RGlyZWN0
KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5vcmlnaW4sIG1fb3JpZ2luLnRvSlMoZXhlYykpOwotICAg
IHJlc3VsdC0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5leGl0S2luZCwganNTdHJp
bmcoZXhlYywgZXhpdEtpbmRUb1N0cmluZyhtX2V4aXRLaW5kKSkpOworICAgIHJlc3VsdC0+cHV0
RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5leGl0S2luZCwganNTdHJpbmcodm0sIGV4aXRL
aW5kVG9TdHJpbmcobV9leGl0S2luZCkpKTsKICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgdm0u
cHJvcGVydHlOYW1lcy0+aXNXYXRjaHBvaW50LCBqc0Jvb2xlYW4obV9pc1dhdGNocG9pbnQpKTsK
ICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+Y291bnQsIGpzTnVt
YmVyKG1fY291bnRlcikpOwogICAgIHJldHVybiByZXN1bHQ7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJPU1JFeGl0U2l0ZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyT1NSRXhpdFNpdGUuY3BwCShy
ZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmls
ZXJPU1JFeGl0U2l0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDEyLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MSw3ICs0MSw3IEBAIEpTVmFs
dWUgT1NSRXhpdFNpdGU6OnRvSlMoRXhlY1N0YXRlKiBleGUKICAgICBKU0FycmF5KiByZXN1bHQg
PSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIDApOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIHsgfSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fY29kZUFkZHJlc3Nl
cy5zaXplKCk7ICsraSkgewotICAgICAgICByZXN1bHQtPnB1dERpcmVjdEluZGV4KGV4ZWMsIGks
IGpzU3RyaW5nKGV4ZWMsIHRvU3RyaW5nKFJhd1BvaW50ZXIobV9jb2RlQWRkcmVzc2VzW2ldLmRh
dGFMb2NhdGlvbigpKSkpKTsKKyAgICAgICAgcmVzdWx0LT5wdXREaXJlY3RJbmRleChleGVjLCBp
LCBqc1N0cmluZyh2bSwgdG9TdHJpbmcoUmF3UG9pbnRlcihtX2NvZGVBZGRyZXNzZXNbaV0uZGF0
YUxvY2F0aW9uKCkpKSkpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0p
OwogICAgIH0KICAgICByZXR1cm4gcmVzdWx0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3Byb2ZpbGVyL1Byb2ZpbGVyVUlELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcHJvZmlsZXIvUHJvZmlsZXJVSUQuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJVSUQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTQ5LDcgKzQ5LDcgQEAgdm9pZCBVSUQ6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIAog
SlNWYWx1ZSBVSUQ6OnRvSlMoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogewotICAgIHJldHVybiBq
c1N0cmluZyhleGVjLCB0b1N0cmluZygqdGhpcykpOworICAgIHJldHVybiBqc1N0cmluZyhleGVj
LT52bSgpLCB0b1N0cmluZygqdGhpcykpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6UHJv
ZmlsZXIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Fic3RyYWN0TW9kdWxl
UmVjb3JkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9B
YnN0cmFjdE1vZHVsZVJlY29yZC5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0Fic3RyYWN0TW9kdWxlUmVjb3JkLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTY1LDcgKzY1LDcgQEAgdm9pZCBBYnN0cmFjdE1vZHVsZVJlY29yZDo6ZmluaXNoQ3Jl
YXRpbwogICAgIEpTTWFwKiBtYXAgPSBKU01hcDo6Y3JlYXRlKGV4ZWMsIHZtLCBnbG9iYWxPYmpl
Y3Qodm0pLT5tYXBTdHJ1Y3R1cmUoKSk7CiAgICAgc2NvcGUucmVsZWFzZUFzc2VydE5vRXhjZXB0
aW9uKCk7CiAgICAgbV9kZXBlbmRlbmNpZXNNYXAuc2V0KHZtLCB0aGlzLCBtYXApOwotICAgIHB1
dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJkZXBlbmRlbmNpZXNNYXAi
X3MpLCBtX2RlcGVuZGVuY2llc01hcC5nZXQoKSk7CisgICAgcHV0RGlyZWN0KHZtLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKHZtLCAiZGVwZW5kZW5jaWVzTWFwIl9zKSwgbV9kZXBlbmRlbmNpZXNN
YXAuZ2V0KCkpOwogfQogCiB2b2lkIEFic3RyYWN0TW9kdWxlUmVjb3JkOjp2aXNpdENoaWxkcmVu
KEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCkBAIC0xNDgsNyArMTQ4LDcgQEAg
QWJzdHJhY3RNb2R1bGVSZWNvcmQqIEFic3RyYWN0TW9kdWxlUmVjbwogICAgIEpTVmFsdWUgbW9k
dWxlTmFtZVZhbHVlID0gaWRlbnRpZmllclRvSlNWYWx1ZSh2bSwgbW9kdWxlTmFtZSk7CiAgICAg
SlNWYWx1ZSBlbnRyeSA9IG1fZGVwZW5kZW5jaWVzTWFwLT5KU01hcDo6Z2V0KGV4ZWMsIG1vZHVs
ZU5hbWVWYWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7Ci0g
ICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBqc0Nhc3Q8QWJzdHJhY3RNb2R1bGVSZWNvcmQq
PihlbnRyeS5nZXQoZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCAibW9kdWxlIikp
KSk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBqc0Nhc3Q8QWJzdHJhY3RNb2R1bGVS
ZWNvcmQqPihlbnRyeS5nZXQoZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIm1vZHVs
ZSIpKSkpOwogfQogCiBhdXRvIEFic3RyYWN0TW9kdWxlUmVjb3JkOjpyZXNvbHZlSW1wb3J0KEV4
ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgbG9jYWxOYW1lKSAtPiBSZXNvbHV0aW9u
CkBAIC01NDEsNyArNTQxLDcgQEAgYXV0byBBYnN0cmFjdE1vZHVsZVJlY29yZDo6cmVzb2x2ZUV4
cG9ydAogICAgICAgICAvLyBFbnF1ZXVlIHRoZSB0YXNrcyBpbiByZXZlcnNlIG9yZGVyLgogICAg
ICAgICBmb3IgKGF1dG8gaXRlcmF0b3IgPSBxdWVyeS5tb2R1bGVSZWNvcmQtPnN0YXJFeHBvcnRF
bnRyaWVzKCkucmJlZ2luKCksIGVuZCA9IHF1ZXJ5Lm1vZHVsZVJlY29yZC0+c3RhckV4cG9ydEVu
dHJpZXMoKS5yZW5kKCk7IGl0ZXJhdG9yICE9IGVuZDsgKytpdGVyYXRvcikgewogICAgICAgICAg
ICAgY29uc3QgUmVmUHRyPFVuaXF1ZWRTdHJpbmdJbXBsPiYgc3Rhck1vZHVsZU5hbWUgPSAqaXRl
cmF0b3I7Ci0gICAgICAgICAgICBBYnN0cmFjdE1vZHVsZVJlY29yZCogaW1wb3J0ZWRNb2R1bGVS
ZWNvcmQgPSBxdWVyeS5tb2R1bGVSZWNvcmQtPmhvc3RSZXNvbHZlSW1wb3J0ZWRNb2R1bGUoZXhl
YywgSWRlbnRpZmllcjo6ZnJvbVVpZChleGVjLCBzdGFyTW9kdWxlTmFtZS5nZXQoKSkpOworICAg
ICAgICAgICAgQWJzdHJhY3RNb2R1bGVSZWNvcmQqIGltcG9ydGVkTW9kdWxlUmVjb3JkID0gcXVl
cnkubW9kdWxlUmVjb3JkLT5ob3N0UmVzb2x2ZUltcG9ydGVkTW9kdWxlKGV4ZWMsIElkZW50aWZp
ZXI6OmZyb21VaWQodm0sIHN0YXJNb2R1bGVOYW1lLmdldCgpKSk7CiAgICAgICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7CiAgICAgICAgICAgICBwZW5kaW5nVGFza3Mu
YXBwZW5kKFRhc2sgeyBSZXNvbHZlUXVlcnkoaW1wb3J0ZWRNb2R1bGVSZWNvcmQsIHF1ZXJ5LmV4
cG9ydE5hbWUuZ2V0KCkpLCBUeXBlOjpRdWVyeSB9KTsKICAgICAgICAgfQpAQCAtNzIwLDcgKzcy
MCw3IEBAIHN0YXRpYyB2b2lkIGdldEV4cG9ydGVkTmFtZXMoRXhlY1N0YXRlKiAKICAgICAgICAg
fQogCiAgICAgICAgIGZvciAoY29uc3QgYXV0byYgc3Rhck1vZHVsZU5hbWUgOiBtb2R1bGVSZWNv
cmQtPnN0YXJFeHBvcnRFbnRyaWVzKCkpIHsKLSAgICAgICAgICAgIEFic3RyYWN0TW9kdWxlUmVj
b3JkKiByZXF1ZXN0ZWRNb2R1bGVSZWNvcmQgPSBtb2R1bGVSZWNvcmQtPmhvc3RSZXNvbHZlSW1w
b3J0ZWRNb2R1bGUoZXhlYywgSWRlbnRpZmllcjo6ZnJvbVVpZChleGVjLCBzdGFyTW9kdWxlTmFt
ZS5nZXQoKSkpOworICAgICAgICAgICAgQWJzdHJhY3RNb2R1bGVSZWNvcmQqIHJlcXVlc3RlZE1v
ZHVsZVJlY29yZCA9IG1vZHVsZVJlY29yZC0+aG9zdFJlc29sdmVJbXBvcnRlZE1vZHVsZShleGVj
LCBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCBzdGFyTW9kdWxlTmFtZS5nZXQoKSkpOwogICAgICAg
ICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKICAgICAgICAgICAgIHBl
bmRpbmdNb2R1bGVzLmFwcGVuZChyZXF1ZXN0ZWRNb2R1bGVSZWNvcmQpOwogICAgICAgICB9CkBA
IC03NDMsNyArNzQzLDcgQEAgSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QqIEFic3RyYWN0TW9kdWxl
UgogCiAgICAgVmVjdG9yPHN0ZDo6cGFpcjxJZGVudGlmaWVyLCBSZXNvbHV0aW9uPj4gcmVzb2x1
dGlvbnM7CiAgICAgZm9yIChhdXRvJiBuYW1lIDogZXhwb3J0ZWROYW1lcykgewotICAgICAgICBJ
ZGVudGlmaWVyIGlkZW50ID0gSWRlbnRpZmllcjo6ZnJvbVVpZChleGVjLCBuYW1lLmdldCgpKTsK
KyAgICAgICAgSWRlbnRpZmllciBpZGVudCA9IElkZW50aWZpZXI6OmZyb21VaWQodm0sIG5hbWUu
Z2V0KCkpOwogICAgICAgICBjb25zdCBSZXNvbHV0aW9uIHJlc29sdXRpb24gPSByZXNvbHZlRXhw
b3J0KGV4ZWMsIGlkZW50KTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVs
bHB0cik7CiAgICAgICAgIHN3aXRjaCAocmVzb2x1dGlvbi50eXBlKSB7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUJ1ZmZlck5ldXRlcmluZ1dhdGNocG9pbnRTZXQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5QnVm
ZmVyTmV1dGVyaW5nV2F0Y2hwb2ludFNldC5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludFNl
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtNjIsNyArNjIsNyBAQCBTdHJ1Y3R1cmUqIEFycmF5QnVmZmVy
TmV1dGVyaW5nV2F0Y2hwb2luCiAKIHZvaWQgQXJyYXlCdWZmZXJOZXV0ZXJpbmdXYXRjaHBvaW50
U2V0OjpmaXJlQWxsKCkKIHsKLSAgICBtX3NldC0+ZmlyZUFsbCgqdm0oKSwgIkFycmF5IGJ1ZmZl
ciB3YXMgbmV1dGVyZWQiKTsKKyAgICBtX3NldC0+ZmlyZUFsbCh2bSgpLCAiQXJyYXkgYnVmZmVy
IHdhcyBuZXV0ZXJlZCIpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5SXRlcmF0b3JQcm90b3R5cGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5SXRlcmF0b3JQcm90b3R5
cGUuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9BcnJheUl0ZXJhdG9yUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE5IEFwcGxlLCBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQzLDcgKzQzLDcg
QEAgdm9pZCBBcnJheUl0ZXJhdG9yUHJvdG90eXBlOjpmaW5pc2hDcmVhdAogewogICAgIEJhc2U6
OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOwot
ICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT50b1N0
cmluZ1RhZ1N5bWJvbCwganNTdHJpbmcoJnZtLCAiQXJyYXkgSXRlcmF0b3IiKSwgUHJvcGVydHlB
dHRyaWJ1dGU6OkRvbnRFbnVtIHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KTsKKyAgICBw
dXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+dG9TdHJpbmdU
YWdTeW1ib2wsIGpzU3RyaW5nKHZtLCAiQXJyYXkgSXRlcmF0b3IiKSwgUHJvcGVydHlBdHRyaWJ1
dGU6OkRvbnRFbnVtIHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KTsKICAgICBKU0NfQlVJ
TFRJTl9GVU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJT04odm0ucHJvcGVydHlOYW1lcy0+bmV4dCwg
YXJyYXlJdGVyYXRvclByb3RvdHlwZU5leHRDb2RlR2VuZXJhdG9yLCBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAJKHJldmlzaW9u
IDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChD
KSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmlnaHQg
KEMpIDIwMDMtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJp
Z2h0IChDKSAyMDAzLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogIENv
cHlyaWdodCAoQykgMjAwMyBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQogICogIENvcHlyaWdo
dCAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IChhcEBueXBvcC5jb20pCiAgKgpAQCAtNTMz
LDE5ICs1MzMsMTkgQEAgaW5saW5lIEpTVmFsdWUgZmFzdEpvaW4oRXhlY1N0YXRlJiBzdGF0ZQog
ICAgICAgICAgICAgZ290byBnZW5lcmFsQ2FzZTsKICAgICAgICAgc3dpdGNoIChzZXBhcmF0b3Iu
bGVuZ3RoKCkpIHsKICAgICAgICAgY2FzZSAwOgotICAgICAgICAgICAgUkVMRUFTRV9BTkRfUkVU
VVJOKHNjb3BlLCBqc0VtcHR5U3RyaW5nKCZzdGF0ZSkpOworICAgICAgICAgICAgUkVMRUFTRV9B
TkRfUkVUVVJOKHNjb3BlLCBqc0VtcHR5U3RyaW5nKHZtKSk7CiAgICAgICAgIGNhc2UgMTogewog
ICAgICAgICAgICAgaWYgKGxlbmd0aCA8PSAxKQotICAgICAgICAgICAgICAgIFJFTEVBU0VfQU5E
X1JFVFVSTihzY29wZSwganNFbXB0eVN0cmluZygmc3RhdGUpKTsKKyAgICAgICAgICAgICAgICBS
RUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGpzRW1wdHlTdHJpbmcodm0pKTsKICAgICAgICAgICAg
IGlmIChzZXBhcmF0b3IuaXM4Qml0KCkpCiAgICAgICAgICAgICAgICAgUkVMRUFTRV9BTkRfUkVU
VVJOKHNjb3BlLCByZXBlYXRDaGFyYWN0ZXIoc3RhdGUsIHNlcGFyYXRvci5jaGFyYWN0ZXJzOCgp
WzBdLCBsZW5ndGggLSAxKSk7CiAgICAgICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUs
IHJlcGVhdENoYXJhY3RlcihzdGF0ZSwgc2VwYXJhdG9yLmNoYXJhY3RlcnMxNigpWzBdLCBsZW5n
dGggLSAxKSk7CiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBKU1N0cmluZyogcmVzdWx0
ID0ganNFbXB0eVN0cmluZygmc3RhdGUpOworICAgICAgICAgICAgSlNTdHJpbmcqIHJlc3VsdCA9
IGpzRW1wdHlTdHJpbmcodm0pOwogICAgICAgICAgICAgaWYgKGxlbmd0aCA8PSAxKQogICAgICAg
ICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAKLSAgICAgICAgICAgIEpTU3RyaW5nKiBvcGVyYW5k
ID0ganNTdHJpbmcoJnZtLCBzZXBhcmF0b3IudG9TdHJpbmcoKSk7CisgICAgICAgICAgICBKU1N0
cmluZyogb3BlcmFuZCA9IGpzU3RyaW5nKHZtLCBzZXBhcmF0b3IudG9TdHJpbmcoKSk7CiAgICAg
ICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgICAgICAgICAgdW5z
aWduZWQgY291bnQgPSBsZW5ndGggLSAxOwogICAgICAgICAgICAgZm9yICg7OykgewpAQCAtNjk5
LDcgKzY5OSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAg
ICAgICAgSlNWYWx1ZSBlbGVtZW50ID0gdGhpc09iamVjdC0+Z2V0SW5kZXgoZXhlYywgaSk7CiAg
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAg
ICAgICBpZiAoZWxlbWVudC5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICAgICAgZWxlbWVu
dCA9IGpzRW1wdHlTdHJpbmcoZXhlYyk7CisgICAgICAgICAgICBlbGVtZW50ID0ganNFbXB0eVN0
cmluZyh2bSk7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgSlNWYWx1ZSBjb252ZXJzaW9u
RnVuY3Rpb24gPSBlbGVtZW50LmdldChleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT50b0xvY2FsZVN0
cmluZyk7CiAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNW
YWx1ZSgpKTsKQEAgLTcyOCw3ICs3MjgsNyBAQCBzdGF0aWMgSlNWYWx1ZSBzbG93Sm9pbihFeGVj
U3RhdGUmIGV4ZWMsCiAKICAgICAvLyA1LiBJZiBsZW4gaXMgemVybywgcmV0dXJuIHRoZSBlbXB0
eSBTdHJpbmcuCiAgICAgaWYgKCFsZW5ndGgpCi0gICAgICAgIHJldHVybiBqc0VtcHR5U3RyaW5n
KCZleGVjKTsKKyAgICAgICAgcmV0dXJuIGpzRW1wdHlTdHJpbmcodm0pOwogCiAgICAgLy8gNi4g
TGV0IGVsZW1lbnQwIGJlIEdldChPLCAiMCIpLgogICAgIEpTVmFsdWUgZWxlbWVudDAgPSB0aGlz
T2JqZWN0LT5nZXRJbmRleCgmZXhlYywgMCk7CkBAIC03MzcsNyArNzM3LDcgQEAgc3RhdGljIEpT
VmFsdWUgc2xvd0pvaW4oRXhlY1N0YXRlJiBleGVjLAogICAgIC8vIDcuIElmIGVsZW1lbnQwIGlz
IHVuZGVmaW5lZCBvciBudWxsLCBsZXQgUiBiZSB0aGUgZW1wdHkgU3RyaW5nOyBvdGhlcndpc2Us
IGxldCBSIGJlID8gVG9TdHJpbmcoZWxlbWVudDApLgogICAgIEpTU3RyaW5nKiByID0gbnVsbHB0
cjsKICAgICBpZiAoZWxlbWVudDAuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgciA9IGpz
RW1wdHlTdHJpbmcoJmV4ZWMpOworICAgICAgICByID0ganNFbXB0eVN0cmluZyh2bSk7CiAgICAg
ZWxzZQogICAgICAgICByID0gZWxlbWVudDAudG9TdHJpbmcoJmV4ZWMpOwogICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CkBAIC03NDcsNyArNzQ3LDcgQEAgc3RhdGljIEpTVmFs
dWUgc2xvd0pvaW4oRXhlY1N0YXRlJiBleGVjLAogICAgIC8vIDkuZSBJbmNyZWFzZSBrIGJ5IDEu
LgogICAgIGZvciAodWludDY0X3QgayA9IDE7IGsgPCBsZW5ndGg7ICsraykgewogICAgICAgICAv
LyBiLiBMZXQgZWxlbWVudCBiZSA/IEdldChPLCAhIFRvU3RyaW5nKGspKS4KLSAgICAgICAgSlNW
YWx1ZSBlbGVtZW50ID0gdGhpc09iamVjdC0+Z2V0KCZleGVjLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKCZleGVjLCBBdG9tU3RyaW5nOjpudW1iZXIoaykpKTsKKyAgICAgICAgSlNWYWx1ZSBlbGVt
ZW50ID0gdGhpc09iamVjdC0+Z2V0KCZleGVjLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBB
dG9tU3RyaW5nOjpudW1iZXIoaykpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgeyB9KTsKIAogICAgICAgICAvLyBjLiBJZiBlbGVtZW50IGlzIHVuZGVmaW5lZCBvciBudWxs
LCBsZXQgbmV4dCBiZSB0aGUgZW1wdHkgU3RyaW5nOyBvdGhlcndpc2UsIGxldCBuZXh0IGJlID8g
VG9TdHJpbmcoZWxlbWVudCkuCkBAIC03NTUsNyArNzU1LDcgQEAgc3RhdGljIEpTVmFsdWUgc2xv
d0pvaW4oRXhlY1N0YXRlJiBleGVjLAogICAgICAgICBpZiAoZWxlbWVudC5pc1VuZGVmaW5lZE9y
TnVsbCgpKSB7CiAgICAgICAgICAgICBpZiAoIXNlcGFyYXRvci0+bGVuZ3RoKCkpCiAgICAgICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBuZXh0ID0ganNFbXB0eVN0cmluZygmZXhl
Yyk7CisgICAgICAgICAgICBuZXh0ID0ganNFbXB0eVN0cmluZyh2bSk7CiAgICAgICAgIH0gZWxz
ZQogICAgICAgICAgICAgbmV4dCA9IGVsZW1lbnQudG9TdHJpbmcoJmV4ZWMpOwogICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwpAQCAtNzk3LDcgKzc5Nyw3IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICAgICAgaWYgKFVOTElLRUxZ
KGxlbmd0aCA+IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSB8fCAhY2FuVXNl
RmFzdEpvaW4odGhpc09iamVjdCkpKSB7CiAgICAgICAgICAgICB1aW50NjRfdCBsZW5ndGg2NCA9
IHN0YXRpY19jYXN0PHVpbnQ2NF90PihsZW5ndGgpOwogICAgICAgICAgICAgQVNTRVJUKHN0YXRp
Y19jYXN0PGRvdWJsZT4obGVuZ3RoNjQpID09IGxlbmd0aCk7Ci0gICAgICAgICAgICBKU1N0cmlu
ZyoganNTZXBhcmF0b3IgPSBqc1NpbmdsZUNoYXJhY3RlclN0cmluZyhleGVjLCBjb21tYSk7Cisg
ICAgICAgICAgICBKU1N0cmluZyoganNTZXBhcmF0b3IgPSBqc1NpbmdsZUNoYXJhY3RlclN0cmlu
Zyh2bSwgY29tbWEpOwogICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5j
b2RlZEpTVmFsdWUoKSk7CiAKICAgICAgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwg
SlNWYWx1ZTo6ZW5jb2RlKHNsb3dKb2luKCpleGVjLCB0aGlzT2JqZWN0LCBqc1NlcGFyYXRvciwg
bGVuZ3RoNjQpKSk7CkBAIC04ODgsNyArODg4LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBhcnJheVByb3RvRgogICAgICAgICAgICAgdGhpc09iai0+bWV0aG9kVGFibGUodm0pLT5w
dXRCeUluZGV4KHRoaXNPYmosIGV4ZWMsIGxlbmd0aCArIG4sIGV4ZWMtPnVuY2hlY2tlZEFyZ3Vt
ZW50KG4pLCB0cnVlKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBQdXRQcm9wZXJ0eVNs
b3Qgc2xvdCh0aGlzT2JqKTsKLSAgICAgICAgICAgIElkZW50aWZpZXIgcHJvcGVydHlOYW1lID0g
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCBKU1ZhbHVlKHN0YXRpY19jYXN0PGludDY0X3Q+
KGxlbmd0aCkgKyBzdGF0aWNfY2FzdDxpbnQ2NF90PihuKSkudG9XVEZTdHJpbmcoZXhlYykpOwor
ICAgICAgICAgICAgSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKHZtLCBKU1ZhbHVlKHN0YXRpY19jYXN0PGludDY0X3Q+KGxlbmd0aCkgKyBzdGF0aWNfY2Fz
dDxpbnQ2NF90PihuKSkudG9XVEZTdHJpbmcoZXhlYykpOwogICAgICAgICAgICAgdGhpc09iai0+
bWV0aG9kVGFibGUodm0pLT5wdXQodGhpc09iaiwgZXhlYywgcHJvcGVydHlOYW1lLCBleGVjLT51
bmNoZWNrZWRBcmd1bWVudChuKSwgc2xvdCk7CiAgICAgICAgIH0KICAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Bc3luY0Z1bmN0aW9uUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Bc3luY0Z1bmN0aW9uUHJvdG90eXBlLmNw
cAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXN5
bmNGdW5jdGlvblByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAv
KgogICogQ29weXJpZ2h0IChDKSAyMDE2IENhaXRsaW4gUG90dGVyIDxjYWl0cEBpZ2FsaWEuY29t
Pi4KKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ5LDcgKzUwLDcgQEAgdm9pZCBB
c3luY0Z1bmN0aW9uUHJvdG90eXBlOjpmaW5pc2hDcmVhdAogICAgIEJhc2U6OmZpbmlzaENyZWF0
aW9uKHZtKTsKICAgICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOwogICAgIHB1dERpcmVj
dFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVy
KDApLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IFByb3BlcnR5QXR0cmlidXRlOjpS
ZWFkT25seSB8IFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7Ci0gICAgcHV0RGlyZWN0V2l0
aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPnRvU3RyaW5nVGFnU3ltYm9sLCBq
c1N0cmluZygmdm0sICJBc3luY0Z1bmN0aW9uIiksIFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51
bSB8IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSk7CisgICAgcHV0RGlyZWN0V2l0aG91dFRy
YW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPnRvU3RyaW5nVGFnU3ltYm9sLCBqc1N0cmlu
Zyh2bSwgIkFzeW5jRnVuY3Rpb24iKSwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtIHwgUHJv
cGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Bc3luY0dlbmVyYXRvckZ1bmN0aW9uUHJv
dG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9B
c3luY0dlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXN5bmNHZW5lcmF0b3JGdW5jdGlvblByb3Rv
dHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0
IChDKSAyMDE3IE9sZWtzYW5kciBTa2FjaGtvdiA8Z3NrYWNoa292QGdtYWlsLmNvbT4uCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00OSw3ICs1MCw3IEBAIHZvaWQgQXN5bmNHZW5l
cmF0b3JGdW5jdGlvblByb3RvdHlwZTo6ZmkKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7
CiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKICAgICBwdXREaXJlY3RXaXRob3V0
VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigwKSwgUHJv
cGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUgfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkg
fCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwotICAgIHB1dERpcmVjdFdpdGhvdXRUcmFu
c2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT50b1N0cmluZ1RhZ1N5bWJvbCwganNTdHJpbmco
JnZtLCAiQXN5bmNHZW5lcmF0b3JGdW5jdGlvbiIpLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVu
dW0gfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpOworICAgIHB1dERpcmVjdFdpdGhvdXRU
cmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT50b1N0cmluZ1RhZ1N5bWJvbCwganNTdHJp
bmcodm0sICJBc3luY0dlbmVyYXRvckZ1bmN0aW9uIiksIFByb3BlcnR5QXR0cmlidXRlOjpEb250
RW51bSB8IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXN5bmNHZW5lcmF0b3JQ
cm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0FzeW5jR2VuZXJhdG9yUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXN5bmNHZW5lcmF0b3JQcm90b3R5cGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxNyBPbGVr
c2FuZHIgU2thY2hrb3YgPGdza2FjaGtvdkBnbWFpbC5jb20+LgorICogQ29weXJpZ2h0IChDKSAy
MDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtNDgsNyArNDksNyBAQCB2b2lkIEFzeW5jR2VuZXJhdG9yUHJvdG90eXBl
OjpmaW5pc2hDcmVhCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIEFTU0VS
VChpbmhlcml0cyh2bSwgaW5mbygpKSk7Ci0gICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24o
dm0sIHZtLnByb3BlcnR5TmFtZXMtPnRvU3RyaW5nVGFnU3ltYm9sLCBqc1N0cmluZygmdm0sICJB
c3luY0dlbmVyYXRvciIpLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBQcm9wZXJ0eUF0
dHJpYnV0ZTo6UmVhZE9ubHkpOworICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2
bS5wcm9wZXJ0eU5hbWVzLT50b1N0cmluZ1RhZ1N5bWJvbCwganNTdHJpbmcodm0sICJBc3luY0dl
bmVyYXRvciIpLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBQcm9wZXJ0eUF0dHJpYnV0
ZTo6UmVhZE9ubHkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0F0b21pY3NPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0F0b21pY3NPYmplY3QuY3BwCShyZXZpc2lvbiAyNDkx
MjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BdG9taWNzT2JqZWN0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYt
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTYtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTgxLDcgKzgxLDcgQEAgdm9pZCBBdG9taWNzT2JqZWN0OjpmaW5p
c2hDcmVhdGlvbihWTSYgdgogICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7CiAgICAg
CiAjZGVmaW5lIFBVVF9ESVJFQ1RfTkFUSVZFX0ZVTkMobG93ZXJOYW1lLCB1cHBlck5hbWUsIGNv
dW50KSBcCi0gICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbih2bSwg
Z2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgI2xvd2VyTmFtZSksIGNv
dW50LCBhdG9taWNzRnVuYyAjIyB1cHBlck5hbWUsIEF0b21pY3MgIyMgdXBwZXJOYW1lICMjIElu
dHJpbnNpYywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51
bSkpOworICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9uV2l0aG91dFRyYW5zaXRpb24odm0sIGds
b2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgI2xvd2VyTmFtZSksIGNvdW50
LCBhdG9taWNzRnVuYyAjIyB1cHBlck5hbWUsIEF0b21pY3MgIyMgdXBwZXJOYW1lICMjIEludHJp
bnNpYywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkp
OwogICAgIEZPUl9FQUNIX0FUT01JQ1NfRlVOQyhQVVRfRElSRUNUX05BVElWRV9GVU5DKQogI3Vu
ZGVmIFBVVF9ESVJFQ1RfTkFUSVZFX0ZVTkMKIH0KQEAgLTQyNSw3ICs0MjUsNyBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGF0b21pY3NGdW5jCiAgICAgICAgIHJlc3VsdFN0cmluZyA9
ICJ0aW1lZC1vdXQiOwogICAgIGVsc2UKICAgICAgICAgcmVzdWx0U3RyaW5nID0gIm9rIjsKLSAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKGV4ZWMsIHJlc3VsdFN0cmluZykpOwor
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcodm0sIHJlc3VsdFN0cmluZykpOwog
fQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGF0b21pY3NGdW5jV2FrZShFeGVjU3Rh
dGUqIGV4ZWMpCkBAIC00NjgsNyArNDY4LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBhdG9taWNzRnVuYwogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25BdG9t
aWNzQWRkKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgYmFzZSwgRW5jb2RlZEpTVmFs
dWUgaW5kZXgsIEVuY29kZWRKU1ZhbHVlIG9wZXJhbmQpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgSlNWYWx1ZSBhcmdz
W10gPSB7SlNWYWx1ZTo6ZGVjb2RlKGJhc2UpLCBKU1ZhbHVlOjpkZWNvZGUoaW5kZXgpLCBKU1Zh
bHVlOjpkZWNvZGUob3BlcmFuZCl9OwogICAgIHJldHVybiBhdG9taWNPcGVyYXRpb25XaXRoQXJn
cyh2bSwgZXhlYywgYXJncywgQWRkRnVuYygpKTsKIH0KQEAgLTQ3Niw3ICs0NzYsNyBAQCBFbmNv
ZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkF0CiBFbmNvZGVkSlNWYWx1ZSBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbkF0b21pY3NBbmQoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNW
YWx1ZSBiYXNlLCBFbmNvZGVkSlNWYWx1ZSBpbmRleCwgRW5jb2RlZEpTVmFsdWUgb3BlcmFuZCkK
IHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBl
eGVjKTsKICAgICBKU1ZhbHVlIGFyZ3NbXSA9IHtKU1ZhbHVlOjpkZWNvZGUoYmFzZSksIEpTVmFs
dWU6OmRlY29kZShpbmRleCksIEpTVmFsdWU6OmRlY29kZShvcGVyYW5kKX07CiAgICAgcmV0dXJu
IGF0b21pY09wZXJhdGlvbldpdGhBcmdzKHZtLCBleGVjLCBhcmdzLCBBbmRGdW5jKCkpOwogfQpA
QCAtNDg0LDcgKzQ4NCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
QXQKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXRvbWljc0NvbXBhcmVF
eGNoYW5nZShFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGJhc2UsIEVuY29kZWRKU1Zh
bHVlIGluZGV4LCBFbmNvZGVkSlNWYWx1ZSBleHBlY3RlZCwgRW5jb2RlZEpTVmFsdWUgbmV3VmFs
dWUpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFj
ZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2
bSwgZXhlYyk7CiAgICAgSlNWYWx1ZSBhcmdzW10gPSB7SlNWYWx1ZTo6ZGVjb2RlKGJhc2UpLCBK
U1ZhbHVlOjpkZWNvZGUoaW5kZXgpLCBKU1ZhbHVlOjpkZWNvZGUoZXhwZWN0ZWQpLCBKU1ZhbHVl
OjpkZWNvZGUobmV3VmFsdWUpfTsKICAgICByZXR1cm4gYXRvbWljT3BlcmF0aW9uV2l0aEFyZ3Mo
dm0sIGV4ZWMsIGFyZ3MsIENvbXBhcmVFeGNoYW5nZUZ1bmMoKSk7CiB9CkBAIC00OTIsNyArNDky
LDcgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25BdAogRW5jb2RlZEpT
VmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25BdG9taWNzRXhjaGFuZ2UoRXhlY1N0YXRlKiBl
eGVjLCBFbmNvZGVkSlNWYWx1ZSBiYXNlLCBFbmNvZGVkSlNWYWx1ZSBpbmRleCwgRW5jb2RlZEpT
VmFsdWUgb3BlcmFuZCkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFj
ZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICBKU1ZhbHVlIGFyZ3NbXSA9IHtKU1ZhbHVlOjpkZWNv
ZGUoYmFzZSksIEpTVmFsdWU6OmRlY29kZShpbmRleCksIEpTVmFsdWU6OmRlY29kZShvcGVyYW5k
KX07CiAgICAgcmV0dXJuIGF0b21pY09wZXJhdGlvbldpdGhBcmdzKHZtLCBleGVjLCBhcmdzLCBF
eGNoYW5nZUZ1bmMoKSk7CiB9CkBAIC01MDAsMTQgKzUwMCwxNCBAQCBFbmNvZGVkSlNWYWx1ZSBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbkF0CiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbkF0b21pY3NJc0xvY2tGcmVlKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUg
c2l6ZSkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRy
YWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KHZtLCBleGVjKTsKICAgICByZXR1cm4gaXNMb2NrRnJlZShleGVjLCBKU1ZhbHVlOjpkZWNvZGUo
c2l6ZSkpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkF0b21p
Y3NMb2FkKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgYmFzZSwgRW5jb2RlZEpTVmFs
dWUgaW5kZXgpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcih2bSwgZXhlYyk7CiAgICAgSlNWYWx1ZSBhcmdzW10gPSB7SlNWYWx1ZTo6ZGVjb2RlKGJh
c2UpLCBKU1ZhbHVlOjpkZWNvZGUoaW5kZXgpfTsKICAgICByZXR1cm4gYXRvbWljT3BlcmF0aW9u
V2l0aEFyZ3Modm0sIGV4ZWMsIGFyZ3MsIExvYWRGdW5jKCkpOwogfQpAQCAtNTE1LDcgKzUxNSw3
IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXQKIEVuY29kZWRKU1Zh
bHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXRvbWljc09yKEV4ZWNTdGF0ZSogZXhlYywgRW5j
b2RlZEpTVmFsdWUgYmFzZSwgRW5jb2RlZEpTVmFsdWUgaW5kZXgsIEVuY29kZWRKU1ZhbHVlIG9w
ZXJhbmQpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVU
cmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cih2bSwgZXhlYyk7CiAgICAgSlNWYWx1ZSBhcmdzW10gPSB7SlNWYWx1ZTo6ZGVjb2RlKGJhc2Up
LCBKU1ZhbHVlOjpkZWNvZGUoaW5kZXgpLCBKU1ZhbHVlOjpkZWNvZGUob3BlcmFuZCl9OwogICAg
IHJldHVybiBhdG9taWNPcGVyYXRpb25XaXRoQXJncyh2bSwgZXhlYywgYXJncywgT3JGdW5jKCkp
OwogfQpAQCAtNTIzLDcgKzUyMyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uQXQKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXRvbWljc1N0
b3JlKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgYmFzZSwgRW5jb2RlZEpTVmFsdWUg
aW5kZXgsIEVuY29kZWRKU1ZhbHVlIG9wZXJhbmQpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgSlNWYWx1ZSBhcmdzW10g
PSB7SlNWYWx1ZTo6ZGVjb2RlKGJhc2UpLCBKU1ZhbHVlOjpkZWNvZGUoaW5kZXgpLCBKU1ZhbHVl
OjpkZWNvZGUob3BlcmFuZCl9OwogICAgIHJldHVybiBhdG9taWNPcGVyYXRpb25XaXRoQXJncyh2
bSwgZXhlYywgYXJncywgU3RvcmVGdW5jKCkpOwogfQpAQCAtNTMxLDcgKzUzMSw3IEBAIEVuY29k
ZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXQKIEVuY29kZWRKU1ZhbHVlIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uQXRvbWljc1N1YihFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1Zh
bHVlIGJhc2UsIEVuY29kZWRKU1ZhbHVlIGluZGV4LCBFbmNvZGVkSlNWYWx1ZSBvcGVyYW5kKQog
ewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4
ZWMpOwogICAgIEpTVmFsdWUgYXJnc1tdID0ge0pTVmFsdWU6OmRlY29kZShiYXNlKSwgSlNWYWx1
ZTo6ZGVjb2RlKGluZGV4KSwgSlNWYWx1ZTo6ZGVjb2RlKG9wZXJhbmQpfTsKICAgICByZXR1cm4g
YXRvbWljT3BlcmF0aW9uV2l0aEFyZ3Modm0sIGV4ZWMsIGFyZ3MsIFN1YkZ1bmMoKSk7CiB9CkBA
IC01MzksNyArNTM5LDcgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25B
dAogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25BdG9taWNzWG9yKEV4ZWNT
dGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgYmFzZSwgRW5jb2RlZEpTVmFsdWUgaW5kZXgsIEVu
Y29kZWRKU1ZhbHVlIG9wZXJhbmQpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgSlNWYWx1ZSBhcmdzW10gPSB7SlNWYWx1
ZTo6ZGVjb2RlKGJhc2UpLCBKU1ZhbHVlOjpkZWNvZGUoaW5kZXgpLCBKU1ZhbHVlOjpkZWNvZGUo
b3BlcmFuZCl9OwogICAgIHJldHVybiBhdG9taWNPcGVyYXRpb25XaXRoQXJncyh2bSwgZXhlYywg
YXJncywgWG9yRnVuYygpKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0JpZ0ludFByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQmlnSW50UHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQmlnSW50UHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQ2FpbyBMaW1hIDx0
aWNhaW9saW1hQGdtYWlsLmNvbT4uCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMTkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC03Miw3ICs3Miw3IEBAIHZvaWQgQmlnSW50UHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYK
IHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKHZt
LCBpbmZvKCkpKTsKLSAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVy
dHlOYW1lcy0+dG9TdHJpbmdUYWdTeW1ib2wsIGpzU3RyaW5nKCZ2bSwgIkJpZ0ludCIpLCBQcm9w
ZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpOwor
ICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT50b1N0
cmluZ1RhZ1N5bWJvbCwganNTdHJpbmcodm0sICJCaWdJbnQiKSwgUHJvcGVydHlBdHRyaWJ1dGU6
OkRvbnRFbnVtIHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KTsKIH0KIAogLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KQEAgLTExMCw3ICsxMTAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGJp
Z0ludFByb3RvCiAgICAgaWYgKHJlc3VsdFN0cmluZy5sZW5ndGgoKSA9PSAxKQogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHZtLnNtYWxsU3RyaW5ncy5zaW5nbGVDaGFyYWN0ZXJTdHJp
bmcocmVzdWx0U3RyaW5nWzBdKSk7CiAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTm9u
dHJpdmlhbFN0cmluZygmdm0sIHJlc3VsdFN0cmluZykpOworICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNOb250cml2aWFsU3RyaW5nKHZtLCByZXN1bHRTdHJpbmcpKTsKIH0KIAogRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBiaWdJbnRQcm90b0Z1bmNUb0xvY2FsZVN0cmluZyhFeGVj
U3RhdGUqIHN0YXRlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVk
VHlwZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nh
Y2hlZFR5cGVzLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQ2FjaGVkVHlwZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MTEsNyArNzExLDcg
QEAgcHVibGljOgogICAgICAgICAgICAgaWYgKCFtX2lzU3ltYm9sKQogICAgICAgICAgICAgICAg
IHJldHVybiBBdG9tU3RyaW5nSW1wbDo6YWRkKGJ1ZmZlciwgbV9sZW5ndGgpLmxlYWtSZWYoKTsK
IAotICAgICAgICAgICAgSWRlbnRpZmllciBpZGVudCA9IElkZW50aWZpZXI6OmZyb21TdHJpbmco
JmRlY29kZXIudm0oKSwgYnVmZmVyLCBtX2xlbmd0aCk7CisgICAgICAgICAgICBJZGVudGlmaWVy
IGlkZW50ID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhkZWNvZGVyLnZtKCksIGJ1ZmZlciwgbV9s
ZW5ndGgpOwogICAgICAgICAgICAgU3RyaW5nIHN0ciA9IGRlY29kZXIudm0oKS5wcm9wZXJ0eU5h
bWVzLT5sb29rVXBQcml2YXRlTmFtZShpZGVudCk7CiAgICAgICAgICAgICBTdHJpbmdJbXBsKiBp
bXBsID0gc3RyLnJlbGVhc2VJbXBsKCkuZ2V0KCk7CiAgICAgICAgICAgICBBU1NFUlQoaW1wbC0+
aXNTeW1ib2woKSk7CkBAIC03NzMsNyArNzczLDcgQEAgcHVibGljOgogICAgICAgICBpZiAoc3Ry
LmlzTnVsbCgpKQogICAgICAgICAgICAgcmV0dXJuIElkZW50aWZpZXIoKTsKIAotICAgICAgICBy
ZXR1cm4gSWRlbnRpZmllcjo6ZnJvbVVpZCgmZGVjb2Rlci52bSgpLCAoVW5pcXVlZFN0cmluZ0lt
cGwqKXN0ci5pbXBsKCkpOworICAgICAgICByZXR1cm4gSWRlbnRpZmllcjo6ZnJvbVVpZChkZWNv
ZGVyLnZtKCksIChVbmlxdWVkU3RyaW5nSW1wbCopc3RyLmltcGwoKSk7CiAgICAgfQogCiAgICAg
dm9pZCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgSWRlbnRpZmllciYgaWRlbnQpIGNvbnN0CkBA
IC0xMzE0LDcgKzEzMTQsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
Y2FzZSBFbmNvZGVkVHlwZTo6U3RyaW5nOiB7CiAgICAgICAgICAgICBTdHJpbmdJbXBsKiBpbXBs
ID0gdGhpcy0+YnVmZmVyPENhY2hlZFVuaXF1ZWRTdHJpbmdJbXBsPigpLT5kZWNvZGUoZGVjb2Rl
cik7Ci0gICAgICAgICAgICB2ID0ganNTdHJpbmcoJmRlY29kZXIudm0oKSwgYWRvcHRSZWYoKmlt
cGwpKTsKKyAgICAgICAgICAgIHYgPSBqc1N0cmluZyhkZWNvZGVyLnZtKCksIGFkb3B0UmVmKCpp
bXBsKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEVuY29k
ZWRUeXBlOjpJbW11dGFibGVCdXR0ZXJmbHk6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Db2RlQ2FjaGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NvZGVDYWNoZS5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0NvZGVDYWNoZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcg
KzQ1LDcgQEAgdm9pZCBDb2RlQ2FjaGVNYXA6OnBydW5lU2xvd0Nhc2UoKQogICAgIHdoaWxlICht
X3NpemUgPiBtX2NhcGFjaXR5IHx8ICFjYW5QcnVuZVF1aWNrbHkoKSkgewogICAgICAgICBNYXBU
eXBlOjppdGVyYXRvciBpdCA9IG1fbWFwLmJlZ2luKCk7CiAKLSAgICAgICAgd3JpdGVDb2RlQmxv
Y2soKml0LT52YWx1ZS5jZWxsLT52bSgpLCBpdC0+a2V5LCBpdC0+dmFsdWUpOworICAgICAgICB3
cml0ZUNvZGVCbG9jayhpdC0+dmFsdWUuY2VsbC0+dm0oKSwgaXQtPmtleSwgaXQtPnZhbHVlKTsK
IAogICAgICAgICBtX3NpemUgLT0gaXQtPmtleS5sZW5ndGgoKTsKICAgICAgICAgbV9tYXAucmVt
b3ZlKGl0KTsKQEAgLTE1MSw3ICsxNTEsNyBAQCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSog
Q29kZUNhY2hlOjpnCiAgICAgLy8gVGhlIEZ1bmN0aW9uIGNvbnN0cnVjdG9yIG9ubHkgaGFzIGFj
Y2VzcyB0byBnbG9iYWwgdmFyaWFibGVzLCBzbyBubyB2YXJpYWJsZXMgd2lsbCBiZSB1bmRlciBU
RFogdW5sZXNzIHRoZXkncmUKICAgICAvLyBpbiB0aGUgZ2xvYmFsIGxleGljYWwgZW52aXJvbm1l
bnQsIHdoaWNoIHdlIGFsd2F5cyBURFogY2hlY2sgYWNjZXNzZXMgZnJvbS4KICAgICBDb25zdHJ1
Y3RBYmlsaXR5IGNvbnN0cnVjdEFiaWxpdHkgPSBjb25zdHJ1Y3RBYmlsaXR5Rm9yUGFyc2VNb2Rl
KG1ldGFkYXRhLT5wYXJzZU1vZGUoKSk7Ci0gICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUq
IGZ1bmN0aW9uRXhlY3V0YWJsZSA9IFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpjcmVhdGUo
JnZtLCBzb3VyY2UsIG1ldGFkYXRhLCBVbmxpbmtlZE5vcm1hbEZ1bmN0aW9uLCBjb25zdHJ1Y3RB
YmlsaXR5LCBKU1BhcnNlclNjcmlwdE1vZGU6OkNsYXNzaWMsIFdURjo6bnVsbG9wdCwgRGVyaXZl
ZENvbnRleHRUeXBlOjpOb25lKTsKKyAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVu
Y3Rpb25FeGVjdXRhYmxlID0gVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OmNyZWF0ZSh2bSwg
c291cmNlLCBtZXRhZGF0YSwgVW5saW5rZWROb3JtYWxGdW5jdGlvbiwgY29uc3RydWN0QWJpbGl0
eSwgSlNQYXJzZXJTY3JpcHRNb2RlOjpDbGFzc2ljLCBXVEY6Om51bGxvcHQsIERlcml2ZWRDb250
ZXh0VHlwZTo6Tm9uZSk7CiAKICAgICBpZiAoIXNvdXJjZS5wcm92aWRlcigpLT5zb3VyY2VVUkxE
aXJlY3RpdmUoKS5pc051bGwoKSkKICAgICAgICAgZnVuY3Rpb25FeGVjdXRhYmxlLT5zZXRTb3Vy
Y2VVUkxEaXJlY3RpdmUoc291cmNlLnByb3ZpZGVyKCktPnNvdXJjZVVSTERpcmVjdGl2ZSgpKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvZGVDYWNoZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvZGVDYWNoZS5oCShyZXZpc2lv
biAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2RlQ2FjaGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMjY0LDcgKzI2NCw3IEBAIFVubGlua2VkQ29kZUJsb2NrVHlwZSog
Z2VuZXJhdGVVbmxpbmtlZEMKIHsKICAgICB0eXBlZGVmIHR5cGVuYW1lIENhY2hlVHlwZXM8VW5s
aW5rZWRDb2RlQmxvY2tUeXBlPjo6Um9vdE5vZGUgUm9vdE5vZGU7CiAgICAgc3RkOjp1bmlxdWVf
cHRyPFJvb3ROb2RlPiByb290Tm9kZSA9IHBhcnNlPFJvb3ROb2RlPigKLSAgICAgICAgJnZtLCBz
b3VyY2UsIElkZW50aWZpZXIoKSwgSlNQYXJzZXJCdWlsdGluTW9kZTo6Tm90QnVpbHRpbiwgc3Ry
aWN0TW9kZSwgc2NyaXB0TW9kZSwgQ2FjaGVUeXBlczxVbmxpbmtlZENvZGVCbG9ja1R5cGU+Ojpw
YXJzZU1vZGUsIFN1cGVyQmluZGluZzo6Tm90TmVlZGVkLCBlcnJvciwgbnVsbHB0ciwgQ29uc3Ry
dWN0b3JLaW5kOjpOb25lLCBkZXJpdmVkQ29udGV4dFR5cGUsIGV2YWxDb250ZXh0VHlwZSk7Cisg
ICAgICAgIHZtLCBzb3VyY2UsIElkZW50aWZpZXIoKSwgSlNQYXJzZXJCdWlsdGluTW9kZTo6Tm90
QnVpbHRpbiwgc3RyaWN0TW9kZSwgc2NyaXB0TW9kZSwgQ2FjaGVUeXBlczxVbmxpbmtlZENvZGVC
bG9ja1R5cGU+OjpwYXJzZU1vZGUsIFN1cGVyQmluZGluZzo6Tm90TmVlZGVkLCBlcnJvciwgbnVs
bHB0ciwgQ29uc3RydWN0b3JLaW5kOjpOb25lLCBkZXJpdmVkQ29udGV4dFR5cGUsIGV2YWxDb250
ZXh0VHlwZSk7CiAgICAgaWYgKCFyb290Tm9kZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAK
QEAgLTI4MSw3ICsyODEsNyBAQCBVbmxpbmtlZENvZGVCbG9ja1R5cGUqIGdlbmVyYXRlVW5saW5r
ZWRDCiAgICAgYm9vbCBpc1N0cmljdE1vZGUgPSByb290Tm9kZS0+ZmVhdHVyZXMoKSAmIFN0cmlj
dE1vZGVGZWF0dXJlOwogICAgIEV4ZWN1dGFibGVJbmZvIGV4ZWN1dGFibGVJbmZvKHVzZXNFdmFs
LCBpc1N0cmljdE1vZGUsIGZhbHNlLCBmYWxzZSwgQ29uc3RydWN0b3JLaW5kOjpOb25lLCBzY3Jp
cHRNb2RlLCBTdXBlckJpbmRpbmc6Ok5vdE5lZWRlZCwgQ2FjaGVUeXBlczxVbmxpbmtlZENvZGVC
bG9ja1R5cGU+OjpwYXJzZU1vZGUsIGRlcml2ZWRDb250ZXh0VHlwZSwgaXNBcnJvd0Z1bmN0aW9u
Q29udGV4dCwgZmFsc2UsIGV2YWxDb250ZXh0VHlwZSk7CiAKLSAgICBVbmxpbmtlZENvZGVCbG9j
a1R5cGUqIHVubGlua2VkQ29kZUJsb2NrID0gVW5saW5rZWRDb2RlQmxvY2tUeXBlOjpjcmVhdGUo
JnZtLCBleGVjdXRhYmxlSW5mbywgY29kZUdlbmVyYXRpb25Nb2RlKTsKKyAgICBVbmxpbmtlZENv
ZGVCbG9ja1R5cGUqIHVubGlua2VkQ29kZUJsb2NrID0gVW5saW5rZWRDb2RlQmxvY2tUeXBlOjpj
cmVhdGUodm0sIGV4ZWN1dGFibGVJbmZvLCBjb2RlR2VuZXJhdGlvbk1vZGUpOwogICAgIHVubGlu
a2VkQ29kZUJsb2NrLT5yZWNvcmRQYXJzZShyb290Tm9kZS0+ZmVhdHVyZXMoKSwgcm9vdE5vZGUt
Pmhhc0NhcHR1cmVkVmFyaWFibGVzKCksIGxpbmVDb3VudCwgdW5saW5rZWRFbmRDb2x1bW4pOwog
ICAgIGlmICghc291cmNlLnByb3ZpZGVyKCktPnNvdXJjZVVSTERpcmVjdGl2ZSgpLmlzTnVsbCgp
KQogICAgICAgICB1bmxpbmtlZENvZGVCbG9jay0+c2V0U291cmNlVVJMRGlyZWN0aXZlKHNvdXJj
ZS5wcm92aWRlcigpLT5zb3VyY2VVUkxEaXJlY3RpdmUoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Db21tb25JZGVudGlmaWVycy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uSWRlbnRpZmllcnMuY3BwCShyZXZpc2lv
biAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25JZGVudGlm
aWVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogIENvcHlyaWdo
dCAoQykgMjAwMywgMjAwNywgMjAwOSwgMjAxMiwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTMzLDcgKzMzLDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAjZGVmaW5lIElOSVRJQUxJWkVfUFJJVkFURV9OQU1FKG5hbWUpICwgbmFt
ZSMjUHJpdmF0ZU5hbWUobV9idWlsdGluTmFtZXMtPm5hbWUjI1ByaXZhdGVOYW1lKCkpCiAjZGVm
aW5lIElOSVRJQUxJWkVfU1lNQk9MKG5hbWUpICwgbmFtZSMjU3ltYm9sKG1fYnVpbHRpbk5hbWVz
LT5uYW1lIyNTeW1ib2woKSkKIAotQ29tbW9uSWRlbnRpZmllcnM6OkNvbW1vbklkZW50aWZpZXJz
KFZNKiB2bSkKK0NvbW1vbklkZW50aWZpZXJzOjpDb21tb25JZGVudGlmaWVycyhWTSYgdm0pCiAg
ICAgOiBudWxsSWRlbnRpZmllcigpCiAgICAgLCBlbXB0eUlkZW50aWZpZXIoSWRlbnRpZmllcjo6
RW1wdHlJZGVudGlmaWVyKQogICAgICwgdW5kZXJzY29yZVByb3RvKElkZW50aWZpZXI6OmZyb21T
dHJpbmcodm0sICJfX3Byb3RvX18iKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0NvbW1vbklkZW50aWZpZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ29tbW9uSWRlbnRpZmllcnMuaAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uSWRlbnRpZmllcnMuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDE5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBA
IC0yODIsNyArMjgyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgQ29tbW9uSWRlbnRp
ZmllcnMgewogICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDb21tb25JZGVudGlmaWVycyk7
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogICAgIHByaXZhdGU6Ci0gICAgICAgIENvbW1vbklk
ZW50aWZpZXJzKFZNKik7CisgICAgICAgIENvbW1vbklkZW50aWZpZXJzKFZNJik7CiAgICAgICAg
IH5Db21tb25JZGVudGlmaWVycygpOwogICAgICAgICBmcmllbmQgY2xhc3MgVk07CiAgICAgICAg
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93
UGF0aHMuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Db21tb25TbG93UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Miw3ICs3Miw3IEBA
IG5hbWVzcGFjZSBKU0MgewogCiAjZGVmaW5lIEJFR0lOX05PX1NFVF9QQygpIFwKICAgICBWTSYg
dm0gPSBleGVjLT52bSgpOyAgICAgIFwKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KCZ2bSwgZXhlYyk7IFwKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVj
KTsgXAogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOyBcCiAg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpCiAKQEAgLTE4MCw3ICsxODAsNyBAQCBTTE9XX1BB
VEhfREVDTChzbG93X3BhdGhfY2FsbF9hcml0eUNoZWNrCiAgICAgaWYgKFVOTElLRUxZKHNsb3Rz
VG9BZGQgPCAwKSkgewogICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IENvbW1vblNsb3dQ
YXRoczo6Y29kZUJsb2NrRnJvbUNhbGxGcmFtZUNhbGxlZShleGVjLCBDb2RlRm9yQ2FsbCk7CiAg
ICAgICAgIGV4ZWMtPmNvbnZlcnRUb1N0YWNrT3ZlcmZsb3dGcmFtZSh2bSwgY29kZUJsb2NrKTsK
LSAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgICAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICAgICAgRXJyb3JI
YW5kbGluZ1Njb3BlIGVycm9yU2NvcGUodm0pOwogICAgICAgICB0aHJvd1Njb3BlLnJlbGVhc2Uo
KTsKICAgICAgICAgdGhyb3dBcml0eUNoZWNrU3RhY2tPdmVyZmxvd0Vycm9yKGV4ZWMsIHRocm93
U2NvcGUpOwpAQCAtMTk2LDcgKzE5Niw3IEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9jb25z
dHJ1Y3RfYXJpdHkKICAgICBpZiAoVU5MSUtFTFkoc2xvdHNUb0FkZCA8IDApKSB7CiAgICAgICAg
IENvZGVCbG9jayogY29kZUJsb2NrID0gQ29tbW9uU2xvd1BhdGhzOjpjb2RlQmxvY2tGcm9tQ2Fs
bEZyYW1lQ2FsbGVlKGV4ZWMsIENvZGVGb3JDb25zdHJ1Y3QpOwogICAgICAgICBleGVjLT5jb252
ZXJ0VG9TdGFja092ZXJmbG93RnJhbWUodm0sIGNvZGVCbG9jayk7Ci0gICAgICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICAgICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgICAgIEVycm9ySGFuZGxpbmdTY29wZSBlcnJv
clNjb3BlKHZtKTsKICAgICAgICAgdGhyb3dBcml0eUNoZWNrU3RhY2tPdmVyZmxvd0Vycm9yKGV4
ZWMsIHRocm93U2NvcGUpOwogICAgICAgICBSRVRVUk5fVFdPKGJpdHdpc2VfY2FzdDx2b2lkKj4o
c3RhdGljX2Nhc3Q8dWludHB0cl90PigxKSksIGV4ZWMpOwpAQCAtMTAxMiw3ICsxMDEyLDcgQEAg
U0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3RvX2luZGV4X3N0cmluZwogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBwYy0+YXM8T3BUb0luZGV4U3RyaW5nPigpOwogICAgIEpTVmFsdWUgaW5kZXhWYWx1ZSA9
IEdFVChieXRlY29kZS5tX2luZGV4KS5qc1ZhbHVlKCk7CiAgICAgQVNTRVJUKGluZGV4VmFsdWUu
aXNVSW50MzJBc0FueUludCgpKTsKLSAgICBSRVRVUk4oanNTdHJpbmcoZXhlYywgSWRlbnRpZmll
cjo6ZnJvbShleGVjLCBpbmRleFZhbHVlLmFzVUludDMyQXNBbnlJbnQoKSkuc3RyaW5nKCkpKTsK
KyAgICBSRVRVUk4oanNTdHJpbmcodm0sIElkZW50aWZpZXI6OmZyb20odm0sIGluZGV4VmFsdWUu
YXNVSW50MzJBc0FueUludCgpKS5zdHJpbmcoKSkpOwogfQogCiBTTE9XX1BBVEhfREVDTChzbG93
X3BhdGhfcHJvZmlsZV90eXBlX2NsZWFyX2xvZykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NvbXBsZXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0NvbXBsZXRpb24uY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21wbGV0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDksNyArNDksNyBAQCBuYW1lc3BhY2UgSlNDIHsKIHN0YXRpYyBpbmxpbmUgYm9vbCBjaGVja1N5
bnRheEludGVybmFsKFZNJiB2bSwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBQYXJzZXJFcnJv
ciYgZXJyb3IpCiB7CiAgICAgcmV0dXJuICEhcGFyc2U8UHJvZ3JhbU5vZGU+KAotICAgICAgICAm
dm0sIHNvdXJjZSwgSWRlbnRpZmllcigpLCBKU1BhcnNlckJ1aWx0aW5Nb2RlOjpOb3RCdWlsdGlu
LAorICAgICAgICB2bSwgc291cmNlLCBJZGVudGlmaWVyKCksIEpTUGFyc2VyQnVpbHRpbk1vZGU6
Ok5vdEJ1aWx0aW4sCiAgICAgICAgIEpTUGFyc2VyU3RyaWN0TW9kZTo6Tm90U3RyaWN0LCBKU1Bh
cnNlclNjcmlwdE1vZGU6OkNsYXNzaWMsIFNvdXJjZVBhcnNlTW9kZTo6UHJvZ3JhbU1vZGUsIFN1
cGVyQmluZGluZzo6Tm90TmVlZGVkLCBlcnJvcik7CiB9CiAKQEAgLTgxLDcgKzgxLDcgQEAgYm9v
bCBjaGVja01vZHVsZVN5bnRheChFeGVjU3RhdGUqIGV4ZWMsIAogICAgIEpTTG9ja0hvbGRlciBs
b2NrKHZtKTsKICAgICBSRUxFQVNFX0FTU0VSVCh2bS5hdG9tU3RyaW5nVGFibGUoKSA9PSBUaHJl
YWQ6OmN1cnJlbnQoKS5hdG9tU3RyaW5nVGFibGUoKSk7CiAgICAgc3RkOjp1bmlxdWVfcHRyPE1v
ZHVsZVByb2dyYW1Ob2RlPiBtb2R1bGVQcm9ncmFtTm9kZSA9IHBhcnNlPE1vZHVsZVByb2dyYW1O
b2RlPigKLSAgICAgICAgJnZtLCBzb3VyY2UsIElkZW50aWZpZXIoKSwgSlNQYXJzZXJCdWlsdGlu
TW9kZTo6Tm90QnVpbHRpbiwKKyAgICAgICAgdm0sIHNvdXJjZSwgSWRlbnRpZmllcigpLCBKU1Bh
cnNlckJ1aWx0aW5Nb2RlOjpOb3RCdWlsdGluLAogICAgICAgICBKU1BhcnNlclN0cmljdE1vZGU6
OlN0cmljdCwgSlNQYXJzZXJTY3JpcHRNb2RlOjpNb2R1bGUsIFNvdXJjZVBhcnNlTW9kZTo6TW9k
dWxlQW5hbHl6ZU1vZGUsIFN1cGVyQmluZGluZzo6Tm90TmVlZGVkLCBlcnJvcik7CiAgICAgaWYg
KCFtb2R1bGVQcm9ncmFtTm9kZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjE5LDcgKzIx
OSw3IEBAIEpTSW50ZXJuYWxQcm9taXNlKiBsb2FkQW5kRXZhbHVhdGVNb2R1bGUKICAgICBSRUxF
QVNFX0FTU0VSVCh2bS5hdG9tU3RyaW5nVGFibGUoKSA9PSBUaHJlYWQ6OmN1cnJlbnQoKS5hdG9t
U3RyaW5nVGFibGUoKSk7CiAgICAgUkVMRUFTRV9BU1NFUlQoIXZtLmlzQ29sbGVjdG9yQnVzeU9u
Q3VycmVudFRocmVhZCgpKTsKIAotICAgIHJldHVybiB2bS52bUVudHJ5R2xvYmFsT2JqZWN0KGV4
ZWMpLT5tb2R1bGVMb2FkZXIoKS0+bG9hZEFuZEV2YWx1YXRlTW9kdWxlKGV4ZWMsIGlkZW50aWZp
ZXJUb0pTVmFsdWUodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgbW9kdWxlTmFtZSkp
LCBwYXJhbWV0ZXJzLCBzY3JpcHRGZXRjaGVyKTsKKyAgICByZXR1cm4gdm0udm1FbnRyeUdsb2Jh
bE9iamVjdChleGVjKS0+bW9kdWxlTG9hZGVyKCktPmxvYWRBbmRFdmFsdWF0ZU1vZHVsZShleGVj
LCBpZGVudGlmaWVyVG9KU1ZhbHVlKHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBtb2R1
bGVOYW1lKSksIHBhcmFtZXRlcnMsIHNjcmlwdEZldGNoZXIpOwogfQogCiBKU0ludGVybmFsUHJv
bWlzZSogbG9hZEFuZEV2YWx1YXRlTW9kdWxlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU291cmNl
Q29kZSYgc291cmNlLCBKU1ZhbHVlIHNjcmlwdEZldGNoZXIpCkBAIC0yNDgsNyArMjQ4LDcgQEAg
SlNJbnRlcm5hbFByb21pc2UqIGxvYWRNb2R1bGUoRXhlY1N0YXRlKgogICAgIFJFTEVBU0VfQVNT
RVJUKHZtLmF0b21TdHJpbmdUYWJsZSgpID09IFRocmVhZDo6Y3VycmVudCgpLmF0b21TdHJpbmdU
YWJsZSgpKTsKICAgICBSRUxFQVNFX0FTU0VSVCghdm0uaXNDb2xsZWN0b3JCdXN5T25DdXJyZW50
VGhyZWFkKCkpOwogCi0gICAgcmV0dXJuIHZtLnZtRW50cnlHbG9iYWxPYmplY3QoZXhlYyktPm1v
ZHVsZUxvYWRlcigpLT5sb2FkTW9kdWxlKGV4ZWMsIGlkZW50aWZpZXJUb0pTVmFsdWUodm0sIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgbW9kdWxlTmFtZSkpLCBwYXJhbWV0ZXJzLCBzY3Jp
cHRGZXRjaGVyKTsKKyAgICByZXR1cm4gdm0udm1FbnRyeUdsb2JhbE9iamVjdChleGVjKS0+bW9k
dWxlTG9hZGVyKCktPmxvYWRNb2R1bGUoZXhlYywgaWRlbnRpZmllclRvSlNWYWx1ZSh2bSwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgbW9kdWxlTmFtZSkpLCBwYXJhbWV0ZXJzLCBzY3JpcHRG
ZXRjaGVyKTsKIH0KIAogSlNJbnRlcm5hbFByb21pc2UqIGxvYWRNb2R1bGUoRXhlY1N0YXRlKiBl
eGVjLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIEpTVmFsdWUgc2NyaXB0RmV0Y2hlcikKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVDb25zdHJ1Y3Rvci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZUNvbnN0cnVjdG9y
LmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RGF0ZUNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAg
KiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykK
LSAqICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtMTYwLDcgKzE2MCw3IEBAIHN0YXRpYyBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGwKICAgICBWTSYgdm0gPSBleGVjLT52bSgp
OwogICAgIEdyZWdvcmlhbkRhdGVUaW1lIHRzOwogICAgIG1zVG9HcmVnb3JpYW5EYXRlVGltZSh2
bSwgV2FsbFRpbWU6Om5vdygpLnNlY29uZHNTaW5jZUVwb2NoKCkubWlsbGlzZWNvbmRzKCksIFdU
Rjo6TG9jYWxUaW1lLCB0cyk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc05vbnRyaXZp
YWxTdHJpbmcoJnZtLCBmb3JtYXREYXRlVGltZSh0cywgRGF0ZVRpbWVGb3JtYXREYXRlQW5kVGlt
ZSwgZmFsc2UpKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc05vbnRyaXZpYWxTdHJp
bmcodm0sIGZvcm1hdERhdGVUaW1lKHRzLCBEYXRlVGltZUZvcm1hdERhdGVBbmRUaW1lLCBmYWxz
ZSkpKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUGFyc2UoRXhlY1N0
YXRlKiBleGVjKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZVByb3Rv
dHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0
ZVByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0RhdGVQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBA
QAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBr
ZGUub3JnKQotICogIENvcHlyaWdodCAoQykgMjAwNC0yMDA4LCAyMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IFRvcmNo
IE1vYmlsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogIENvcHlyaWdodCAoQykgMjAx
MCBUb3JjaCBNb2JpbGUgKEJlaWppbmcpIENvLiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgpAQCAtMTQ0LDYgKzE0NCw3IEBAIHN0YXRpYyBDRkRhdGVGb3JtYXR0ZXJTdHlsZSBzdHlsZUZy
b21BcmcKIAogc3RhdGljIEpTQ2VsbCogZm9ybWF0TG9jYWxlRGF0ZShFeGVjU3RhdGUqIGV4ZWMs
IERhdGVJbnN0YW5jZSosIGRvdWJsZSB0aW1lSW5NaWxsaXNlY29uZHMsIExvY2FsZURhdGVUaW1l
Rm9ybWF0IGZvcm1hdCkKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIENGRGF0ZUZv
cm1hdHRlclN0eWxlIGRhdGVTdHlsZSA9IChmb3JtYXQgIT0gTG9jYWxlVGltZSA/IGtDRkRhdGVG
b3JtYXR0ZXJMb25nU3R5bGUgOiBrQ0ZEYXRlRm9ybWF0dGVyTm9TdHlsZSk7CiAgICAgQ0ZEYXRl
Rm9ybWF0dGVyU3R5bGUgdGltZVN0eWxlID0gKGZvcm1hdCAhPSBMb2NhbGVEYXRlID8ga0NGRGF0
ZUZvcm1hdHRlckxvbmdTdHlsZSA6IGtDRkRhdGVGb3JtYXR0ZXJOb1N0eWxlKTsKIApAQCAtMTY3
LDM1ICsxNjgsMzcgQEAgc3RhdGljIEpTQ2VsbCogZm9ybWF0TG9jYWxlRGF0ZShFeGVjU3RhdAog
ICAgIGF1dG8gZm9ybWF0dGVyID0gYWRvcHRDRihDRkRhdGVGb3JtYXR0ZXJDcmVhdGUoa0NGQWxs
b2NhdG9yRGVmYXVsdCwgYWRvcHRDRihDRkxvY2FsZUNvcHlDdXJyZW50KCkpLmdldCgpLCBkYXRl
U3R5bGUsIHRpbWVTdHlsZSkpOwogICAgIGlmICh1c2VDdXN0b21Gb3JtYXQpCiAgICAgICAgIENG
RGF0ZUZvcm1hdHRlclNldEZvcm1hdChmb3JtYXR0ZXIuZ2V0KCksIGN1c3RvbUZvcm1hdFN0cmlu
Zy5jcmVhdGVDRlN0cmluZygpLmdldCgpKTsKLSAgICByZXR1cm4ganNOb250cml2aWFsU3RyaW5n
KGV4ZWMsIGFkb3B0Q0YoQ0ZEYXRlRm9ybWF0dGVyQ3JlYXRlU3RyaW5nV2l0aEFic29sdXRlVGlt
ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBmb3JtYXR0ZXIuZ2V0KCksIGFic29sdXRlVGltZSkpLmdl
dCgpKTsKKyAgICByZXR1cm4ganNOb250cml2aWFsU3RyaW5nKHZtLCBhZG9wdENGKENGRGF0ZUZv
cm1hdHRlckNyZWF0ZVN0cmluZ1dpdGhBYnNvbHV0ZVRpbWUoa0NGQWxsb2NhdG9yRGVmYXVsdCwg
Zm9ybWF0dGVyLmdldCgpLCBhYnNvbHV0ZVRpbWUpKS5nZXQoKSk7CiB9CiAKICNlbGlmICFVQ09O
RklHX05PX0ZPUk1BVFRJTkcKIAogc3RhdGljIEpTQ2VsbCogZm9ybWF0TG9jYWxlRGF0ZShFeGVj
U3RhdGUqIGV4ZWMsIERhdGVJbnN0YW5jZSosIGRvdWJsZSB0aW1lSW5NaWxsaXNlY29uZHMsIExv
Y2FsZURhdGVUaW1lRm9ybWF0IGZvcm1hdCkKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwog
ICAgIFVEYXRlRm9ybWF0U3R5bGUgdGltZVN0eWxlID0gKGZvcm1hdCAhPSBMb2NhbGVEYXRlID8g
VURBVF9MT05HIDogVURBVF9OT05FKTsKICAgICBVRGF0ZUZvcm1hdFN0eWxlIGRhdGVTdHlsZSA9
IChmb3JtYXQgIT0gTG9jYWxlVGltZSA/IFVEQVRfTE9ORyA6IFVEQVRfTk9ORSk7CiAKICAgICBV
RXJyb3JDb2RlIHN0YXR1cyA9IFVfWkVST19FUlJPUjsKICAgICBVRGF0ZUZvcm1hdCogZGYgPSB1
ZGF0X29wZW4odGltZVN0eWxlLCBkYXRlU3R5bGUsIDAsIDAsIC0xLCAwLCAwLCAmc3RhdHVzKTsK
ICAgICBpZiAoIWRmKQotICAgICAgICByZXR1cm4ganNFbXB0eVN0cmluZyhleGVjKTsKKyAgICAg
ICAgcmV0dXJuIGpzRW1wdHlTdHJpbmcodm0pOwogCiAgICAgVUNoYXIgYnVmZmVyWzEyOF07CiAg
ICAgaW50MzJfdCBsZW5ndGg7CiAgICAgbGVuZ3RoID0gdWRhdF9mb3JtYXQoZGYsIHRpbWVJbk1p
bGxpc2Vjb25kcywgYnVmZmVyLCAxMjgsIDAsICZzdGF0dXMpOwogICAgIHVkYXRfY2xvc2UoZGYp
OwogICAgIGlmIChzdGF0dXMgIT0gVV9aRVJPX0VSUk9SKQotICAgICAgICByZXR1cm4ganNFbXB0
eVN0cmluZyhleGVjKTsKKyAgICAgICAgcmV0dXJuIGpzRW1wdHlTdHJpbmcodm0pOwogCi0gICAg
cmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyhleGVjLCBTdHJpbmcoYnVmZmVyLCBsZW5ndGgpKTsK
KyAgICByZXR1cm4ganNOb250cml2aWFsU3RyaW5nKHZtLCBTdHJpbmcoYnVmZmVyLCBsZW5ndGgp
KTsKIH0KIAogI2Vsc2UKIAogc3RhdGljIEpTQ2VsbCogZm9ybWF0TG9jYWxlRGF0ZShFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IEdyZWdvcmlhbkRhdGVUaW1lJiBnZHQsIExvY2FsZURhdGVUaW1lRm9y
bWF0IGZvcm1hdCkKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogI2lmIE9TKFdJTkRPV1Mp
CiAgICAgU1lTVEVNVElNRSBzeXN0ZW1UaW1lOwogICAgIG1lbXNldCgmc3lzdGVtVGltZSwgMCwg
c2l6ZW9mKHN5c3RlbVRpbWUpKTsKQEAgLTIzMCw3ICsyMzMsNyBAQCBzdGF0aWMgSlNDZWxsKiBm
b3JtYXRMb2NhbGVEYXRlKEV4ZWNTdGF0CiAgICAgaWYgKGxlbmd0aCkKICAgICAgICAgbGVuZ3Ro
LS07CiAKLSAgICByZXR1cm4ganNOb250cml2aWFsU3RyaW5nKGV4ZWMsIFN0cmluZyhidWZmZXIu
ZGF0YSgpLCBsZW5ndGgpKTsKKyAgICByZXR1cm4ganNOb250cml2aWFsU3RyaW5nKHZtLCBTdHJp
bmcoYnVmZmVyLmRhdGEoKSwgbGVuZ3RoKSk7CiAKICNlbHNlIC8vIE9TKFdJTkRPV1MpCiAKQEAg
LTI2OSw3ICsyNzIsNyBAQCBzdGF0aWMgSlNDZWxsKiBmb3JtYXRMb2NhbGVEYXRlKEV4ZWNTdGF0
CiAjZW5kaWYKIAogICAgIGlmIChyZXQgPT0gMCkKLSAgICAgICAgcmV0dXJuIGpzRW1wdHlTdHJp
bmcoZXhlYyk7CisgICAgICAgIHJldHVybiBqc0VtcHR5U3RyaW5nKHZtKTsKIAogICAgIC8vIENv
cHkgb3JpZ2luYWwgaW50byB0aGUgYnVmZmVyCiAgICAgaWYgKHllYXJOZWVkc09mZnNldCAmJiBm
b3JtYXQgIT0gTG9jYWxlVGltZSkgewpAQCAtMjk5LDE5ICszMDIsMjAgQEAgc3RhdGljIEpTQ2Vs
bCogZm9ybWF0TG9jYWxlRGF0ZShFeGVjU3RhdAogICAgIGlmIChsZW5ndGggIT0gc3RhdGljX2Nh
c3Q8c2l6ZV90PigtMSkpIHsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7
ICsraSkKICAgICAgICAgICAgIGJ1ZmZlcltpXSA9IHN0YXRpY19jYXN0PFVDaGFyPih0ZW1wYnVm
ZmVyW2ldKTsKLSAgICAgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyhleGVjLCBTdHJpbmco
YnVmZmVyLCBsZW5ndGgpKTsKKyAgICAgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyh2bSwg
U3RyaW5nKGJ1ZmZlciwgbGVuZ3RoKSk7CiAgICAgfQogI2VuZGlmCiAKLSAgICByZXR1cm4ganNO
b250cml2aWFsU3RyaW5nKGV4ZWMsIHRpbWVidWZmZXIpOworICAgIHJldHVybiBqc05vbnRyaXZp
YWxTdHJpbmcodm0sIHRpbWVidWZmZXIpOwogI2VuZGlmIC8vIE9TKFdJTkRPV1MpCiB9CiAKIHN0
YXRpYyBKU0NlbGwqIGZvcm1hdExvY2FsZURhdGUoRXhlY1N0YXRlKiBleGVjLCBEYXRlSW5zdGFu
Y2UqIGRhdGVPYmplY3QsIGRvdWJsZSwgTG9jYWxlRGF0ZVRpbWVGb3JtYXQgZm9ybWF0KQogewor
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgY29uc3QgR3JlZ29yaWFuRGF0ZVRpbWUqIGdy
ZWdvcmlhbkRhdGVUaW1lID0gZGF0ZU9iamVjdC0+Z3JlZ29yaWFuRGF0ZVRpbWUoZXhlYyk7CiAg
ICAgaWYgKCFncmVnb3JpYW5EYXRlVGltZSkKLSAgICAgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0
cmluZyhleGVjLCAiSW52YWxpZCBEYXRlIl9zKTsKKyAgICAgICAgcmV0dXJuIGpzTm9udHJpdmlh
bFN0cmluZyh2bSwgIkludmFsaWQgRGF0ZSJfcyk7CiAgICAgcmV0dXJuIGZvcm1hdExvY2FsZURh
dGUoZXhlYywgKmdyZWdvcmlhbkRhdGVUaW1lLCBmb3JtYXQpOwogfQogCkBAIC0zMzAsOSArMzM0
LDkgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIGZvcm1hdGVEYXRlSW5zdGFuYwogICAgICAgICA/
IHRoaXNEYXRlT2JqLT5ncmVnb3JpYW5EYXRlVGltZVVUQyhleGVjKQogICAgICAgICA6IHRoaXNE
YXRlT2JqLT5ncmVnb3JpYW5EYXRlVGltZShleGVjKTsKICAgICBpZiAoIWdyZWdvcmlhbkRhdGVU
aW1lKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTm9udHJpdmlhbFN0cmluZyhl
eGVjLCBTdHJpbmcoIkludmFsaWQgRGF0ZSJfcykpKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc05vbnRyaXZpYWxTdHJpbmcodm0sIFN0cmluZygiSW52YWxpZCBEYXRlIl9zKSkp
OwogCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywg
Zm9ybWF0RGF0ZVRpbWUoKmdyZWdvcmlhbkRhdGVUaW1lLCBmb3JtYXQsIGFzVVRDVmFyaWFudCkp
KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTm9udHJpdmlhbFN0cmluZyh2bSwgZm9y
bWF0RGF0ZVRpbWUoKmdyZWdvcmlhbkRhdGVUaW1lLCBmb3JtYXQsIGFzVVRDVmFyaWFudCkpKTsK
IH0KIAogLy8gQ29udmVydHMgYSBsaXN0IG9mIGFyZ3VtZW50cyBzZW50IHRvIGEgRGF0ZSBtZW1i
ZXIgZnVuY3Rpb24gaW50byBtaWxsaXNlY29uZHMsIHVwZGF0aW5nCkBAIC01MDIsMTAgKzUwNiwx
MCBAQCB2b2lkIERhdGVQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2CiAgICAgQmFzZTo6
ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7CiAK
LSAgICBJZGVudGlmaWVyIHRvVVRDU3RyaW5nTmFtZSA9IElkZW50aWZpZXI6OmZyb21TdHJpbmco
JnZtLCAidG9VVENTdHJpbmciX3MpOworICAgIElkZW50aWZpZXIgdG9VVENTdHJpbmdOYW1lID0g
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInRvVVRDU3RyaW5nIl9zKTsKICAgICBKU0Z1bmN0
aW9uKiB0b1VUQ1N0cmluZ0Z1bmN0aW9uID0gSlNGdW5jdGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxP
YmplY3QsIDAsIHRvVVRDU3RyaW5nTmFtZS5zdHJpbmcoKSwgZGF0ZVByb3RvRnVuY1RvVVRDU3Ry
aW5nKTsKICAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdG9VVENTdHJpbmdOYW1l
LCB0b1VUQ1N0cmluZ0Z1bmN0aW9uLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRy
aWJ1dGU6OkRvbnRFbnVtKSk7Ci0gICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAidG9HTVRTdHJpbmciX3MpLCB0b1VUQ1N0cmluZ0Z1
bmN0aW9uLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVt
KSk7CisgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIElkZW50aWZpZXI6OmZyb21T
dHJpbmcodm0sICJ0b0dNVFN0cmluZyJfcyksIHRvVVRDU3RyaW5nRnVuY3Rpb24sIHN0YXRpY19j
YXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKIAogI2lmIEVOQUJM
RShJTlRMKQogICAgIEpTQ19CVUlMVElOX0ZVTkNUSU9OX1dJVEhPVVRfVFJBTlNJVElPTigidG9M
b2NhbGVTdHJpbmciLCBkYXRlUHJvdG90eXBlVG9Mb2NhbGVTdHJpbmdDb2RlR2VuZXJhdG9yLCBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7CkBAIC01
NDcsNyArNTUxLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdQog
CiAgICAgY29uc3QgR3JlZ29yaWFuRGF0ZVRpbWUqIGdyZWdvcmlhbkRhdGVUaW1lID0gdGhpc0Rh
dGVPYmotPmdyZWdvcmlhbkRhdGVUaW1lVVRDKGV4ZWMpOwogICAgIGlmICghZ3JlZ29yaWFuRGF0
ZVRpbWUpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOb250cml2aWFsU3RyaW5n
KGV4ZWMsIFN0cmluZygiSW52YWxpZCBEYXRlIl9zKSkpOworICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzTm9udHJpdmlhbFN0cmluZyh2bSwgU3RyaW5nKCJJbnZhbGlkIERhdGUiX3Mp
KSk7CiAgICAgLy8gTWF4aW11bSBhbW91bnQgb2Ygc3BhY2Ugd2UgbmVlZCBpbiBidWZmZXI6IDcg
KG1heC4gZGlnaXRzIGluIHllYXIpICsgMiAqIDUgKDIgY2hhcmFjdGVycyBlYWNoIGZvciBtb250
aCwgZGF5LCBob3VyLCBtaW51dGUsIHNlY29uZCkgKyA0ICguICsgMyBkaWdpdHMgZm9yIG1pbGxp
c2Vjb25kcykKICAgICAvLyA2IGZvciBmb3JtYXR0aW5nIGFuZCBvbmUgZm9yIG51bGwgdGVybWlu
YXRpb24gPSAyOC4gV2UgYWRkIG9uZSBleHRyYSBjaGFyYWN0ZXIgdG8gYWxsb3cgdXMgdG8gZm9y
Y2UgbnVsbCB0ZXJtaW5hdGlvbi4KICAgICBjaGFyIGJ1ZmZlclsyOF07CkBAIC01NjQsOSArNTY4
LDkgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdQogCiAgICAgQVNT
RVJUKGNoYXJhY3RlcnNXcml0dGVuID4gMCAmJiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY2hhcmFj
dGVyc1dyaXR0ZW4pIDwgc2l6ZW9mKGJ1ZmZlcikpOwogICAgIGlmIChzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oY2hhcmFjdGVyc1dyaXR0ZW4pID49IHNpemVvZihidWZmZXIpKQotICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzRW1wdHlTdHJpbmcoZXhlYykpOworICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzRW1wdHlTdHJpbmcodm0pKTsKIAotICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNOb250cml2aWFsU3RyaW5nKGV4ZWMsIFN0cmluZyhidWZmZXIsIGNoYXJhY3Rl
cnNXcml0dGVuKSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOb250cml2aWFsU3Ry
aW5nKHZtLCBTdHJpbmcoYnVmZmVyLCBjaGFyYWN0ZXJzV3JpdHRlbikpKTsKIH0KIAogRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jVG9EYXRlU3RyaW5nKEV4ZWNTdGF0
ZSogZXhlYykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvci5jcHAJKHJl
dmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjI2LDkgKzIyNiw5IEBAIGJvb2wgYWRkRXJyb3JJbmZvKFZN
JiB2bSwgVmVjdG9yPFN0YWNrRnIKICAgICAgICAgb2JqLT5wdXREaXJlY3Qodm0sIHZtLnByb3Bl
cnR5TmFtZXMtPmxpbmUsIGpzTnVtYmVyKGxpbmUpKTsKICAgICAgICAgb2JqLT5wdXREaXJlY3Qo
dm0sIHZtLnByb3BlcnR5TmFtZXMtPmNvbHVtbiwganNOdW1iZXIoY29sdW1uKSk7CiAgICAgICAg
IGlmICghc291cmNlVVJMLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIG9iai0+cHV0RGlyZWN0KHZt
LCB2bS5wcm9wZXJ0eU5hbWVzLT5zb3VyY2VVUkwsIGpzU3RyaW5nKCZ2bSwgc291cmNlVVJMKSk7
CisgICAgICAgICAgICBvYmotPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+c291cmNl
VVJMLCBqc1N0cmluZyh2bSwgc291cmNlVVJMKSk7CiAKLSAgICAgICAgb2JqLT5wdXREaXJlY3Qo
dm0sIHZtLnByb3BlcnR5TmFtZXMtPnN0YWNrLCBqc1N0cmluZygmdm0sIEludGVycHJldGVyOjpz
dGFja1RyYWNlQXNTdHJpbmcodm0sICpzdGFja1RyYWNlKSksIHN0YXRpY19jYXN0PHVuc2lnbmVk
PihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKKyAgICAgICAgb2JqLT5wdXREaXJlY3Qo
dm0sIHZtLnByb3BlcnR5TmFtZXMtPnN0YWNrLCBqc1N0cmluZyh2bSwgSW50ZXJwcmV0ZXI6OnN0
YWNrVHJhY2VBc1N0cmluZyh2bSwgKnN0YWNrVHJhY2UpKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOwogCiAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KQEAgLTI2NSw3ICsyNjUsNyBAQCBKU09iamVjdCogYWRkRXJyb3JJbmZvKENhbGxGcmFt
ZSogY2FsbEZyCiAgICAgaWYgKGxpbmUgIT0gLTEpCiAgICAgICAgIGVycm9yLT5wdXREaXJlY3Qo
dm0sIHZtLnByb3BlcnR5TmFtZXMtPmxpbmUsIGpzTnVtYmVyKGxpbmUpKTsKICAgICBpZiAoIXNv
dXJjZVVSTC5pc051bGwoKSkKLSAgICAgICAgZXJyb3ItPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVy
dHlOYW1lcy0+c291cmNlVVJMLCBqc1N0cmluZygmdm0sIHNvdXJjZVVSTCkpOworICAgICAgICBl
cnJvci0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5zb3VyY2VVUkwsIGpzU3RyaW5n
KHZtLCBzb3VyY2VVUkwpKTsKICAgICByZXR1cm4gZXJyb3I7CiB9CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9ySW5zdGFuY2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9ySW5zdGFuY2UuY3BwCShyZXZpc2lvbiAy
NDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvckluc3RhbmNlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAx
OTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmlnaHQgKEMp
IDIwMDMtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0
IChDKSAyMDAzLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYwpAQCAtODAsOCArODAsOCBAQCBzdGF0aWMgdm9pZCBhcHBlbmRTb3VyY2VUb0Vy
cm9yKENhbGxGcmFtCiAgICAgaWYgKCFleHByZXNzaW9uU3RvcCB8fCBleHByZXNzaW9uU3RhcnQg
PiBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZVN0cmluZy5sZW5ndGgoKSkpCiAgICAgICAgIHJldHVy
bjsKICAgICAKLSAgICBWTSogdm0gPSAmY2FsbEZyYW1lLT52bSgpOwotICAgIEpTVmFsdWUganNN
ZXNzYWdlID0gZXhjZXB0aW9uLT5nZXREaXJlY3QoKnZtLCB2bS0+cHJvcGVydHlOYW1lcy0+bWVz
c2FnZSk7CisgICAgVk0mIHZtID0gY2FsbEZyYW1lLT52bSgpOworICAgIEpTVmFsdWUganNNZXNz
YWdlID0gZXhjZXB0aW9uLT5nZXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm1lc3NhZ2Up
OwogICAgIGlmICghanNNZXNzYWdlIHx8ICFqc01lc3NhZ2UuaXNTdHJpbmcoKSkKICAgICAgICAg
cmV0dXJuOwogICAgIApAQCAtMTA1LDcgKzEwNSw3IEBAIHN0YXRpYyB2b2lkIGFwcGVuZFNvdXJj
ZVRvRXJyb3IoQ2FsbEZyYW0KICAgICAgICAgICAgIHN0b3AtLTsKICAgICAgICAgbWVzc2FnZSA9
IGFwcGVuZGVyKG1lc3NhZ2UsIGNvZGVCbG9jay0+c291cmNlKCkucHJvdmlkZXIoKS0+Z2V0UmFu
Z2Uoc3RhcnQsIHN0b3ApLnRvU3RyaW5nKCksIHR5cGUsIEVycm9ySW5zdGFuY2U6OkZvdW5kQXBw
cm94aW1hdGVTb3VyY2UpOwogICAgIH0KLSAgICBleGNlcHRpb24tPnB1dERpcmVjdCgqdm0sIHZt
LT5wcm9wZXJ0eU5hbWVzLT5tZXNzYWdlLCBqc1N0cmluZyh2bSwgbWVzc2FnZSkpOworICAgIGV4
Y2VwdGlvbi0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5tZXNzYWdlLCBqc1N0cmlu
Zyh2bSwgbWVzc2FnZSkpOwogCiB9CiAKQEAgLTExNCw3ICsxMTQsNyBAQCB2b2lkIEVycm9ySW5z
dGFuY2U6OmZpbmlzaENyZWF0aW9uKEV4ZWNTCiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0p
OwogICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7CiAgICAgaWYgKCFtZXNzYWdlLmlz
TnVsbCgpKQotICAgICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm1lc3NhZ2Us
IGpzU3RyaW5nKCZ2bSwgbWVzc2FnZSksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0
dHJpYnV0ZTo6RG9udEVudW0pKTsKKyAgICAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5h
bWVzLT5tZXNzYWdlLCBqc1N0cmluZyh2bSwgbWVzc2FnZSksIHN0YXRpY19jYXN0PHVuc2lnbmVk
PihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxW
ZWN0b3I8U3RhY2tGcmFtZT4+IHN0YWNrVHJhY2UgPSBnZXRTdGFja1RyYWNlKGV4ZWMsIHZtLCB0
aGlzLCB1c2VDdXJyZW50RnJhbWUpOwogICAgIHsKQEAgLTI0MSw5ICsyNDEsOSBAQCBib29sIEVy
cm9ySW5zdGFuY2U6Om1hdGVyaWFsaXplRXJyb3JJbmZvCiAgICAgICAgIHB1dERpcmVjdCh2bSwg
dm0ucHJvcGVydHlOYW1lcy0+bGluZSwganNOdW1iZXIobV9saW5lKSk7CiAgICAgICAgIHB1dERp
cmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+Y29sdW1uLCBqc051bWJlcihtX2NvbHVtbikpOwog
ICAgICAgICBpZiAoIW1fc291cmNlVVJMLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHB1dERpcmVj
dCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+c291cmNlVVJMLCBqc1N0cmluZygmdm0sIFdURk1vdmUo
bV9zb3VyY2VVUkwpKSk7CisgICAgICAgICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFt
ZXMtPnNvdXJjZVVSTCwganNTdHJpbmcodm0sIFdURk1vdmUobV9zb3VyY2VVUkwpKSk7CiAKLSAg
ICAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5zdGFjaywganNTdHJpbmcoJnZt
LCBXVEZNb3ZlKG1fc3RhY2tTdHJpbmcpKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5
QXR0cmlidXRlOjpEb250RW51bSkpOworICAgICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5
TmFtZXMtPnN0YWNrLCBqc1N0cmluZyh2bSwgV1RGTW92ZShtX3N0YWNrU3RyaW5nKSksIHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKICAgICB9CiAK
ICAgICBtX2Vycm9ySW5mb01hdGVyaWFsaXplZCA9IHRydWU7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9FcnJvclByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyNDkx
MjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvclByb3RvdHlwZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5
OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChDKSAy
MDAzLCAyMDA4LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5
cmlnaHQgKEMpIDIwMDMtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljCkBAIC02NCw4ICs2NCw4IEBAIHZvaWQgRXJyb3JQcm90b3R5cGU6OmZp
bmlzaENyZWF0aW9uKFZNJiAKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAg
QVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKLSAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNp
dGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNTdHJpbmcoJnZtLCBuYW1lKSwgc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOwotICAgIHB1
dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5tZXNzYWdlLCBq
c0VtcHR5U3RyaW5nKCZ2bSksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0
ZTo6RG9udEVudW0pKTsKKyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJv
cGVydHlOYW1lcy0+bmFtZSwganNTdHJpbmcodm0sIG5hbWUpLCBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7CisgICAgcHV0RGlyZWN0V2l0aG91dFRy
YW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPm1lc3NhZ2UsIGpzRW1wdHlTdHJpbmcodm0p
LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7CiB9
CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGdW5jdGlvbnMgLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xMjAsMTEgKzEyMCwxMSBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGVycm9yUHJvdG9GCiAKICAgICAvLyA4LiBJZiBuYW1lIGlzIHRoZSBlbXB0
eSBTdHJpbmcsIHJldHVybiBtc2cuCiAgICAgaWYgKCFuYW1lU3RyaW5nLmxlbmd0aCgpKQotICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKG1lc3NhZ2UuaXNTdHJpbmcoKSA/IG1lc3NhZ2Ug
OiBqc1N0cmluZyhleGVjLCBtZXNzYWdlU3RyaW5nKSk7CisgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUobWVzc2FnZS5pc1N0cmluZygpID8gbWVzc2FnZSA6IGpzU3RyaW5nKHZtLCBtZXNz
YWdlU3RyaW5nKSk7CiAKICAgICAvLyA5LiBJZiBtc2cgaXMgdGhlIGVtcHR5IFN0cmluZywgcmV0
dXJuIG5hbWUuCiAgICAgaWYgKCFtZXNzYWdlU3RyaW5nLmxlbmd0aCgpKQotICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKG5hbWUuaXNTdHJpbmcoKSA/IG5hbWUgOiBqc1N0cmluZyhleGVj
LCBuYW1lU3RyaW5nKSk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUobmFtZS5pc1N0
cmluZygpID8gbmFtZSA6IGpzU3RyaW5nKHZtLCBuYW1lU3RyaW5nKSk7CiAKICAgICAvLyAxMC4g
UmV0dXJuIHRoZSByZXN1bHQgb2YgY29uY2F0ZW5hdGluZyBuYW1lLCAiOiIsIGEgc2luZ2xlIHNw
YWNlIGNoYXJhY3RlciwgYW5kIG1zZy4KICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpT
VmFsdWU6OmVuY29kZShqc01ha2VOb250cml2aWFsU3RyaW5nKGV4ZWMsIG5hbWVTdHJpbmcsICI6
ICIsIG1lc3NhZ2VTdHJpbmcpKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9FeGNlcHRpb25IZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTUwLDcgKzUwLDcgQEAgY29uc3QgQ2xhc3NJbmZvIFRlcm1pbmF0ZWRFeGVjdXRp
b25FcnJvcgogSlNWYWx1ZSBUZXJtaW5hdGVkRXhlY3V0aW9uRXJyb3I6OmRlZmF1bHRWYWx1ZShj
b25zdCBKU09iamVjdCosIEV4ZWNTdGF0ZSogZXhlYywgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSBo
aW50KQogewogICAgIGlmIChoaW50ID09IFByZWZlclN0cmluZykKLSAgICAgICAgcmV0dXJuIGpz
Tm9udHJpdmlhbFN0cmluZyhleGVjLCBTdHJpbmcoIkphdmFTY3JpcHQgZXhlY3V0aW9uIHRlcm1p
bmF0ZWQuIl9zKSk7CisgICAgICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcoZXhlYy0+dm0o
KSwgU3RyaW5nKCJKYXZhU2NyaXB0IGV4ZWN1dGlvbiB0ZXJtaW5hdGVkLiJfcykpOwogICAgIHJl
dHVybiBKU1ZhbHVlKFBOYU4pOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9GdW5jdGlvblByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvblByb3RvdHlwZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0y
MDAxIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAz
LTIwMDksIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29w
eXJpZ2h0IChDKSAyMDAzLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYwpAQCAtODksNyArODksNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGZ1bmN0aW9uUHJvCiAKICAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRh
YmxlID0gZnVuY3Rpb24tPmpzRXhlY3V0YWJsZSgpOwogICAgICAgICBpZiAoZXhlY3V0YWJsZS0+
aXNDbGFzcygpKQotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyhl
eGVjLCBleGVjdXRhYmxlLT5jbGFzc1NvdXJjZSgpLnZpZXcoKS50b1N0cmluZygpKSk7CisgICAg
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKHZtLCBleGVjdXRhYmxlLT5j
bGFzc1NvdXJjZSgpLnZpZXcoKS50b1N0cmluZygpKSk7CiAKICAgICAgICAgU3RyaW5nIGZ1bmN0
aW9uSGVhZGVyOwogICAgICAgICBzd2l0Y2ggKGV4ZWN1dGFibGUtPnBhcnNlTW9kZSgpKSB7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvblJhcmVEYXRhLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvblJhcmVE
YXRhLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRnVuY3Rpb25SYXJlRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04OCw3ICs4OCw3IEBA
IHZvaWQgRnVuY3Rpb25SYXJlRGF0YTo6Y2xlYXIoY29uc3QgY2hhcioKIHsKICAgICBtX29iamVj
dEFsbG9jYXRpb25Qcm9maWxlLmNsZWFyKCk7CiAgICAgbV9pbnRlcm5hbEZ1bmN0aW9uQWxsb2Nh
dGlvblByb2ZpbGUuY2xlYXIoKTsKLSAgICBtX29iamVjdEFsbG9jYXRpb25Qcm9maWxlV2F0Y2hw
b2ludC5maXJlQWxsKCp2bSgpLCByZWFzb24pOworICAgIG1fb2JqZWN0QWxsb2NhdGlvblByb2Zp
bGVXYXRjaHBvaW50LmZpcmVBbGwodm0oKSwgcmVhc29uKTsKIH0KIAogdm9pZCBGdW5jdGlvblJh
cmVEYXRhOjpBbGxvY2F0aW9uUHJvZmlsZUNsZWFyaW5nV2F0Y2hwb2ludDo6ZmlyZUludGVybmFs
KFZNJiwgY29uc3QgRmlyZURldGFpbCYpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9HZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUuY3BwCShy
ZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmF0
b3JGdW5jdGlvblByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAv
KgogICogQ29weXJpZ2h0IChDKSAyMDE1IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4uCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01MSw3ICs1Miw3IEBAIHZv
aWQgR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGU6OmZpbmlzaEMKICAgICBCYXNlOjpmaW5pc2hD
cmVhdGlvbih2bSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKICAgICBwdXRE
aXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051
bWJlcigwKSwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgUHJvcGVydHlBdHRyaWJ1dGU6
OkRvbnRFbnVtKTsKLSAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVy
dHlOYW1lcy0+dG9TdHJpbmdUYWdTeW1ib2wsIGpzU3RyaW5nKCZ2bSwgIkdlbmVyYXRvckZ1bmN0
aW9uIiksIFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8IFByb3BlcnR5QXR0cmlidXRlOjpS
ZWFkT25seSk7CisgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5
TmFtZXMtPnRvU3RyaW5nVGFnU3ltYm9sLCBqc1N0cmluZyh2bSwgIkdlbmVyYXRvckZ1bmN0aW9u
IiksIFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8IFByb3BlcnR5QXR0cmlidXRlOjpSZWFk
T25seSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvR2VuZXJhdG9yUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmF0b3JQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAy
NDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmF0b3JQcm90b3R5
cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAo
QykgMjAxNSBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+LgorICogQ29weXJp
Z2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDgsNyArNDksNyBAQCB2b2lkIEdlbmVyYXRvclByb3Rv
dHlwZTo6ZmluaXNoQ3JlYXRpb24oCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwog
ICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7Ci0gICAgcHV0RGlyZWN0V2l0aG91dFRy
YW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPnRvU3RyaW5nVGFnU3ltYm9sLCBqc1N0cmlu
Zygmdm0sICJHZW5lcmF0b3IiKSwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtIHwgUHJvcGVy
dHlBdHRyaWJ1dGU6OlJlYWRPbmx5KTsKKyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2
bSwgdm0ucHJvcGVydHlOYW1lcy0+dG9TdHJpbmdUYWdTeW1ib2wsIGpzU3RyaW5nKHZtLCAiR2Vu
ZXJhdG9yIiksIFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8IFByb3BlcnR5QXR0cmlidXRl
OjpSZWFkT25seSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5o
CShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5l
cmljQXJndW1lbnRzSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtOTIsMTggKzkyLDE4IEBA
IGJvb2wgR2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6Z2V0T3duUHJvcGUKIHRlbXBsYXRlPHR5cGVu
YW1lIFR5cGU+CiB2b2lkIEdlbmVyaWNBcmd1bWVudHM8VHlwZT46OmdldE93blByb3BlcnR5TmFt
ZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYg
YXJyYXksIEVudW1lcmF0aW9uTW9kZSBtb2RlKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CiAgICAgVHlwZSogdGhpc09iamVjdCA9IGpzQ2FzdDxUeXBlKj4ob2JqZWN0KTsKIAogICAgIGlm
IChhcnJheS5pbmNsdWRlU3RyaW5nUHJvcGVydGllcygpKSB7CiAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCB0aGlzT2JqZWN0LT5pbnRlcm5hbExlbmd0aCgpOyArK2kpIHsKICAgICAg
ICAgICAgIGlmICghdGhpc09iamVjdC0+aXNNYXBwZWRBcmd1bWVudChpKSkKICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGFycmF5LmFkZChJZGVudGlmaWVyOjpmcm9tKGV4
ZWMsIGkpKTsKKyAgICAgICAgICAgIGFycmF5LmFkZChJZGVudGlmaWVyOjpmcm9tKHZtLCBpKSk7
CiAgICAgICAgIH0KICAgICB9CiAKICAgICBpZiAobW9kZS5pbmNsdWRlRG9udEVudW1Qcm9wZXJ0
aWVzKCkgJiYgIXRoaXNPYmplY3QtPm92ZXJyb2RlVGhpbmdzKCkpIHsKLSAgICAgICAgVk0mIHZt
ID0gZXhlYy0+dm0oKTsKICAgICAgICAgYXJyYXkuYWRkKHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0
aCk7CiAgICAgICAgIGFycmF5LmFkZCh2bS5wcm9wZXJ0eU5hbWVzLT5jYWxsZWUpOwogICAgICAg
ICBpZiAoYXJyYXkuaW5jbHVkZVN5bWJvbFByb3BlcnRpZXMoKSkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0dldHRlclNldHRlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0dldHRlclNldHRlci5oCShyZXZpc2lvbiAyNDkxMjgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZXR0ZXJTZXR0ZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEgSGFy
cmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIg
S2VsbHkgKHBta0Bwb3N0LmNvbSkKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUs
IDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC04Nyw4ICs4Nyw4IEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKLSAgICBib29sIGlzR2V0dGVyTnVsbCgp
IGNvbnN0IHsgcmV0dXJuICEhanNEeW5hbWljQ2FzdDxOdWxsR2V0dGVyRnVuY3Rpb24qPigqbV9n
ZXR0ZXIuZ2V0KCktPnZtKCksIG1fZ2V0dGVyLmdldCgpKTsgfQotICAgIGJvb2wgaXNTZXR0ZXJO
dWxsKCkgY29uc3QgeyByZXR1cm4gISFqc0R5bmFtaWNDYXN0PE51bGxTZXR0ZXJGdW5jdGlvbio+
KCptX3NldHRlci5nZXQoKS0+dm0oKSwgbV9zZXR0ZXIuZ2V0KCkpOyB9CisgICAgYm9vbCBpc0dl
dHRlck51bGwoKSBjb25zdCB7IHJldHVybiAhIWpzRHluYW1pY0Nhc3Q8TnVsbEdldHRlckZ1bmN0
aW9uKj4obV9nZXR0ZXIuZ2V0KCktPnZtKCksIG1fZ2V0dGVyLmdldCgpKTsgfQorICAgIGJvb2wg
aXNTZXR0ZXJOdWxsKCkgY29uc3QgeyByZXR1cm4gISFqc0R5bmFtaWNDYXN0PE51bGxTZXR0ZXJG
dW5jdGlvbio+KG1fc2V0dGVyLmdldCgpLT52bSgpLCBtX3NldHRlci5nZXQoKSk7IH0KIAogICAg
IEpTT2JqZWN0KiBzZXR0ZXIoKSBjb25zdCB7IHJldHVybiBtX3NldHRlci5nZXQoKTsgfQogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JZGVudGlmaWVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JZGVudGlmaWVyLmNwcAkocmV2
aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSWRlbnRpZmll
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogIENvcHlyaWdodCAo
QykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAxMiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTM1LDI4ICsz
NSwyMyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotUmVmPFN0cmluZ0ltcGw+IElkZW50aWZpZXI6
OmFkZChWTSogdm0sIGNvbnN0IGNoYXIqIGMpCitSZWY8U3RyaW5nSW1wbD4gSWRlbnRpZmllcjo6
YWRkKFZNJiB2bSwgY29uc3QgY2hhciogYykKIHsKICAgICBBU1NFUlQoYyk7CiAgICAgQVNTRVJU
KGNbMF0pOwogICAgIGlmICghY1sxXSkKLSAgICAgICAgcmV0dXJuIHZtLT5zbWFsbFN0cmluZ3Mu
c2luZ2xlQ2hhcmFjdGVyU3RyaW5nUmVwKGNbMF0pOworICAgICAgICByZXR1cm4gdm0uc21hbGxT
dHJpbmdzLnNpbmdsZUNoYXJhY3RlclN0cmluZ1JlcChjWzBdKTsKIAogICAgIHJldHVybiAqQXRv
bVN0cmluZ0ltcGw6OmFkZChjKTsKIH0KIAotUmVmPFN0cmluZ0ltcGw+IElkZW50aWZpZXI6OmFk
ZChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IGNoYXIqIGMpCi17Ci0gICAgcmV0dXJuIGFkZCgmZXhl
Yy0+dm0oKSwgYyk7Ci19Ci0KLVJlZjxTdHJpbmdJbXBsPiBJZGVudGlmaWVyOjphZGQ4KFZNKiB2
bSwgY29uc3QgVUNoYXIqIHMsIGludCBsZW5ndGgpCitSZWY8U3RyaW5nSW1wbD4gSWRlbnRpZmll
cjo6YWRkOChWTSYgdm0sIGNvbnN0IFVDaGFyKiBzLCBpbnQgbGVuZ3RoKQogewogICAgIGlmIChs
ZW5ndGggPT0gMSkgewogICAgICAgICBVQ2hhciBjID0gc1swXTsKICAgICAgICAgQVNTRVJUKGlz
TGF0aW4xKGMpKTsKICAgICAgICAgaWYgKGNhblVzZVNpbmdsZUNoYXJhY3RlclN0cmluZyhjKSkK
LSAgICAgICAgICAgIHJldHVybiB2bS0+c21hbGxTdHJpbmdzLnNpbmdsZUNoYXJhY3RlclN0cmlu
Z1JlcChjKTsKKyAgICAgICAgICAgIHJldHVybiB2bS5zbWFsbFN0cmluZ3Muc2luZ2xlQ2hhcmFj
dGVyU3RyaW5nUmVwKGMpOwogICAgIH0KICAgICBpZiAoIWxlbmd0aCkKICAgICAgICAgcmV0dXJu
ICpTdHJpbmdJbXBsOjplbXB0eSgpOwpAQCAtNjQsMzQgKzU5LDE5IEBAIFJlZjxTdHJpbmdJbXBs
PiBJZGVudGlmaWVyOjphZGQ4KFZNKiB2bSwKICAgICByZXR1cm4gKkF0b21TdHJpbmdJbXBsOjph
ZGQocywgbGVuZ3RoKTsKIH0KIAotSWRlbnRpZmllciBJZGVudGlmaWVyOjpmcm9tKEV4ZWNTdGF0
ZSogZXhlYywgdW5zaWduZWQgdmFsdWUpCi17Ci0gICAgcmV0dXJuIElkZW50aWZpZXIoZXhlYywg
ZXhlYy0+dm0oKS5udW1lcmljU3RyaW5ncy5hZGQodmFsdWUpKTsKLX0KLQotSWRlbnRpZmllciBJ
ZGVudGlmaWVyOjpmcm9tKEV4ZWNTdGF0ZSogZXhlYywgaW50IHZhbHVlKQorSWRlbnRpZmllciBJ
ZGVudGlmaWVyOjpmcm9tKFZNJiB2bSwgdW5zaWduZWQgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIElk
ZW50aWZpZXIoZXhlYywgZXhlYy0+dm0oKS5udW1lcmljU3RyaW5ncy5hZGQodmFsdWUpKTsKKyAg
ICByZXR1cm4gSWRlbnRpZmllcih2bSwgdm0ubnVtZXJpY1N0cmluZ3MuYWRkKHZhbHVlKSk7CiB9
CiAKLUlkZW50aWZpZXIgSWRlbnRpZmllcjo6ZnJvbShFeGVjU3RhdGUqIGV4ZWMsIGRvdWJsZSB2
YWx1ZSkKK0lkZW50aWZpZXIgSWRlbnRpZmllcjo6ZnJvbShWTSYgdm0sIGludCB2YWx1ZSkKIHsK
LSAgICByZXR1cm4gSWRlbnRpZmllcihleGVjLCBleGVjLT52bSgpLm51bWVyaWNTdHJpbmdzLmFk
ZCh2YWx1ZSkpOworICAgIHJldHVybiBJZGVudGlmaWVyKHZtLCB2bS5udW1lcmljU3RyaW5ncy5h
ZGQodmFsdWUpKTsKIH0KIAotSWRlbnRpZmllciBJZGVudGlmaWVyOjpmcm9tKFZNKiB2bSwgdW5z
aWduZWQgdmFsdWUpCitJZGVudGlmaWVyIElkZW50aWZpZXI6OmZyb20oVk0mIHZtLCBkb3VibGUg
dmFsdWUpCiB7Ci0gICAgcmV0dXJuIElkZW50aWZpZXIodm0sIHZtLT5udW1lcmljU3RyaW5ncy5h
ZGQodmFsdWUpKTsKLX0KLQotSWRlbnRpZmllciBJZGVudGlmaWVyOjpmcm9tKFZNKiB2bSwgaW50
IHZhbHVlKQotewotICAgIHJldHVybiBJZGVudGlmaWVyKHZtLCB2bS0+bnVtZXJpY1N0cmluZ3Mu
YWRkKHZhbHVlKSk7Ci19Ci0KLUlkZW50aWZpZXIgSWRlbnRpZmllcjo6ZnJvbShWTSogdm0sIGRv
dWJsZSB2YWx1ZSkKLXsKLSAgICByZXR1cm4gSWRlbnRpZmllcih2bSwgdm0tPm51bWVyaWNTdHJp
bmdzLmFkZCh2YWx1ZSkpOworICAgIHJldHVybiBJZGVudGlmaWVyKHZtLCB2bS5udW1lcmljU3Ry
aW5ncy5hZGQodmFsdWUpKTsKIH0KIAogdm9pZCBJZGVudGlmaWVyOjpkdW1wKFByaW50U3RyZWFt
JiBvdXQpIGNvbnN0CkBAIC0xMDksMjQgKzg5LDE4IEBAIHZvaWQgSWRlbnRpZmllcjo6ZHVtcChQ
cmludFN0cmVhbSYgb3V0KSAKIAogI2lmbmRlZiBOREVCVUcKIAotdm9pZCBJZGVudGlmaWVyOjpj
aGVja0N1cnJlbnRBdG9tU3RyaW5nVGFibGUoVk0qIHZtKQordm9pZCBJZGVudGlmaWVyOjpjaGVj
a0N1cnJlbnRBdG9tU3RyaW5nVGFibGUoVk0mIHZtKQogewogICAgIC8vIENoZWNrIHRoZSBpZGVu
dGlmaWVyIHRhYmxlIGFjY2Vzc2libGUgdGhyb3VnaCB0aGUgdGhyZWFkc3BlY2lmaWMgbWF0Y2hl
cyB0aGUKICAgICAvLyB2bSdzIGlkZW50aWZpZXIgdGFibGUuCi0gICAgQVNTRVJUX1VOVVNFRCh2
bSwgdm0tPmF0b21TdHJpbmdUYWJsZSgpID09IFRocmVhZDo6Y3VycmVudCgpLmF0b21TdHJpbmdU
YWJsZSgpKTsKLX0KLQotdm9pZCBJZGVudGlmaWVyOjpjaGVja0N1cnJlbnRBdG9tU3RyaW5nVGFi
bGUoRXhlY1N0YXRlKiBleGVjKQotewotICAgIGNoZWNrQ3VycmVudEF0b21TdHJpbmdUYWJsZSgm
ZXhlYy0+dm0oKSk7CisgICAgQVNTRVJUX1VOVVNFRCh2bSwgdm0uYXRvbVN0cmluZ1RhYmxlKCkg
PT0gVGhyZWFkOjpjdXJyZW50KCkuYXRvbVN0cmluZ1RhYmxlKCkpOwogfQogCiAjZWxzZQogCiAv
LyBUaGVzZSBvbmx5IGV4aXN0cyBzbyB0aGF0IG91ciBleHBvcnRzIGFyZSB0aGUgc2FtZSBmb3Ig
ZGVidWcgYW5kIHJlbGVhc2UgYnVpbGRzLgogLy8gVGhpcyB3b3VsZCBiZSBhbiBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpLCBidXQgd2UncmUgaW4gTkRFQlVHIG9ubHkgY29kZSBoZXJlIQot
Tk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2b2lkIElkZW50aWZpZXI6OmNoZWNrQ3VycmVudEF0b21T
dHJpbmdUYWJsZShWTSopIHsgQ1JBU0goKTsgfQotTk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2b2lk
IElkZW50aWZpZXI6OmNoZWNrQ3VycmVudEF0b21TdHJpbmdUYWJsZShFeGVjU3RhdGUqKSB7IENS
QVNIKCk7IH0KK05PX1JFVFVSTl9EVUVfVE9fQ1JBU0ggdm9pZCBJZGVudGlmaWVyOjpjaGVja0N1
cnJlbnRBdG9tU3RyaW5nVGFibGUoVk0mKSB7IENSQVNIKCk7IH0KIAogI2VuZGlmCiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lkZW50aWZpZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JZGVudGlmaWVyLmgJKHJldmlzaW9uIDI0
OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lkZW50aWZpZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAy
MDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMTExLDMxICsxMTEsMjMgQEAgcHVibGlj
OgogCiAgICAgLy8gT25seSB0byBiZSB1c2VkIHdpdGggc3RyaW5nIGxpdGVyYWxzLgogICAgIHRl
bXBsYXRlPHVuc2lnbmVkIGNoYXJhY3RlcnNDb3VudD4KLSAgICBzdGF0aWMgSWRlbnRpZmllciBm
cm9tU3RyaW5nKFZNKiwgY29uc3QgY2hhciAoJmNoYXJhY3RlcnMpW2NoYXJhY3RlcnNDb3VudF0p
OwotICAgIHRlbXBsYXRlPHVuc2lnbmVkIGNoYXJhY3RlcnNDb3VudD4KLSAgICBzdGF0aWMgSWRl
bnRpZmllciBmcm9tU3RyaW5nKEV4ZWNTdGF0ZSosIGNvbnN0IGNoYXIgKCZjaGFyYWN0ZXJzKVtj
aGFyYWN0ZXJzQ291bnRdKTsKLSAgICBzdGF0aWMgSWRlbnRpZmllciBmcm9tU3RyaW5nKFZNKiwg
Y29uc3QgTENoYXIqLCBpbnQgbGVuZ3RoKTsKLSAgICBzdGF0aWMgSWRlbnRpZmllciBmcm9tU3Ry
aW5nKFZNKiwgY29uc3QgVUNoYXIqLCBpbnQgbGVuZ3RoKTsKLSAgICBzdGF0aWMgSWRlbnRpZmll
ciBmcm9tU3RyaW5nKFZNKiwgY29uc3QgU3RyaW5nJik7Ci0gICAgc3RhdGljIElkZW50aWZpZXIg
ZnJvbVN0cmluZyhFeGVjU3RhdGUqLCBBdG9tU3RyaW5nSW1wbCopOwotICAgIHN0YXRpYyBJZGVu
dGlmaWVyIGZyb21TdHJpbmcoRXhlY1N0YXRlKiwgY29uc3QgQXRvbVN0cmluZyYpOwotICAgIHN0
YXRpYyBJZGVudGlmaWVyIGZyb21TdHJpbmcoRXhlY1N0YXRlKiwgY29uc3QgU3RyaW5nJik7Ci0g
ICAgc3RhdGljIElkZW50aWZpZXIgZnJvbVN0cmluZyhFeGVjU3RhdGUqLCBjb25zdCBjaGFyKik7
Ci0gICAgc3RhdGljIElkZW50aWZpZXIgZnJvbVN0cmluZyhWTSogdm0sIGNvbnN0IFZlY3RvcjxM
Q2hhcj4mIGNoYXJhY3RlcnMpIHsgcmV0dXJuIGZyb21TdHJpbmcodm0sIGNoYXJhY3RlcnMuZGF0
YSgpLCBjaGFyYWN0ZXJzLnNpemUoKSk7IH0KKyAgICBzdGF0aWMgSWRlbnRpZmllciBmcm9tU3Ry
aW5nKFZNJiwgY29uc3QgY2hhciAoJmNoYXJhY3RlcnMpW2NoYXJhY3RlcnNDb3VudF0pOworICAg
IHN0YXRpYyBJZGVudGlmaWVyIGZyb21TdHJpbmcoVk0mLCBBU0NJSUxpdGVyYWwpOworICAgIHN0
YXRpYyBJZGVudGlmaWVyIGZyb21TdHJpbmcoVk0mLCBjb25zdCBMQ2hhciosIGludCBsZW5ndGgp
OworICAgIHN0YXRpYyBJZGVudGlmaWVyIGZyb21TdHJpbmcoVk0mLCBjb25zdCBVQ2hhciosIGlu
dCBsZW5ndGgpOworICAgIHN0YXRpYyBJZGVudGlmaWVyIGZyb21TdHJpbmcoVk0mLCBjb25zdCBT
dHJpbmcmKTsKKyAgICBzdGF0aWMgSWRlbnRpZmllciBmcm9tU3RyaW5nKFZNJiwgY29uc3QgY2hh
ciopOworICAgIHN0YXRpYyBJZGVudGlmaWVyIGZyb21TdHJpbmcoVk0mIHZtLCBjb25zdCBWZWN0
b3I8TENoYXI+JiBjaGFyYWN0ZXJzKSB7IHJldHVybiBmcm9tU3RyaW5nKHZtLCBjaGFyYWN0ZXJz
LmRhdGEoKSwgY2hhcmFjdGVycy5zaXplKCkpOyB9CiAKLSAgICBzdGF0aWMgSWRlbnRpZmllciBm
cm9tVWlkKFZNKiwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCk7Ci0gICAgc3RhdGljIElkZW50aWZp
ZXIgZnJvbVVpZChFeGVjU3RhdGUqLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKTsKKyAgICBzdGF0
aWMgSWRlbnRpZmllciBmcm9tVWlkKFZNJiwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCk7CiAgICAg
c3RhdGljIElkZW50aWZpZXIgZnJvbVVpZChjb25zdCBQcml2YXRlTmFtZSYpOwogICAgIHN0YXRp
YyBJZGVudGlmaWVyIGZyb21VaWQoU3ltYm9sSW1wbCYpOwogCi0gICAgc3RhdGljIElkZW50aWZp
ZXIgY3JlYXRlTENoYXJGcm9tVUNoYXIoVk0qIHZtLCBjb25zdCBVQ2hhciogcywgaW50IGxlbmd0
aCkgeyByZXR1cm4gSWRlbnRpZmllcih2bSwgYWRkOCh2bSwgcywgbGVuZ3RoKSk7IH0KKyAgICBz
dGF0aWMgSWRlbnRpZmllciBjcmVhdGVMQ2hhckZyb21VQ2hhcihWTSYgdm0sIGNvbnN0IFVDaGFy
KiBzLCBpbnQgbGVuZ3RoKSB7IHJldHVybiBJZGVudGlmaWVyKHZtLCBhZGQ4KHZtLCBzLCBsZW5n
dGgpKTsgfQogCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIElkZW50aWZpZXIgZnJvbShF
eGVjU3RhdGUqLCB1bnNpZ25lZCB5KTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgSWRl
bnRpZmllciBmcm9tKEV4ZWNTdGF0ZSosIGludCB5KTsKLSAgICBzdGF0aWMgSWRlbnRpZmllciBm
cm9tKEV4ZWNTdGF0ZSosIGRvdWJsZSB5KTsKLSAgICBzdGF0aWMgSWRlbnRpZmllciBmcm9tKFZN
KiwgdW5zaWduZWQgeSk7Ci0gICAgc3RhdGljIElkZW50aWZpZXIgZnJvbShWTSosIGludCB5KTsK
LSAgICBzdGF0aWMgSWRlbnRpZmllciBmcm9tKFZNKiwgZG91YmxlIHkpOworICAgIEpTX0VYUE9S
VF9QUklWQVRFIHN0YXRpYyBJZGVudGlmaWVyIGZyb20oVk0mLCB1bnNpZ25lZCB5KTsKKyAgICBK
U19FWFBPUlRfUFJJVkFURSBzdGF0aWMgSWRlbnRpZmllciBmcm9tKFZNJiwgaW50IHkpOworICAg
IHN0YXRpYyBJZGVudGlmaWVyIGZyb20oVk0mLCBkb3VibGUgeSk7CiAKICAgICBib29sIGlzTnVs
bCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5nLmlzTnVsbCgpOyB9CiAgICAgYm9vbCBpc0VtcHR5
KCkgY29uc3QgeyByZXR1cm4gbV9zdHJpbmcuaXNFbXB0eSgpOyB9CkBAIC0xNTcsOCArMTQ5LDcg
QEAgcHVibGljOgogICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFN0cmluZ0ltcGwqIGEsIGNv
bnN0IFN0cmluZ0ltcGwqIGIpIHsgcmV0dXJuIDo6ZXF1YWwoYSwgYik7IH0KIAogICAgIC8vIE9u
bHkgdG8gYmUgdXNlZCB3aXRoIHN0cmluZyBsaXRlcmFscy4KLSAgICBKU19FWFBPUlRfUFJJVkFU
RSBzdGF0aWMgUmVmPFN0cmluZ0ltcGw+IGFkZChWTSosIGNvbnN0IGNoYXIqKTsKLSAgICBKU19F
WFBPUlRfUFJJVkFURSBzdGF0aWMgUmVmPFN0cmluZ0ltcGw+IGFkZChFeGVjU3RhdGUqLCBjb25z
dCBjaGFyKik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFJlZjxTdHJpbmdJbXBsPiBh
ZGQoVk0mLCBjb25zdCBjaGFyKik7CiAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25z
dDsKIApAQCAtMTY3LDE0ICsxNTgsMTIgQEAgcHJpdmF0ZToKIAogICAgIC8vIE9ubHkgdG8gYmUg
dXNlZCB3aXRoIHN0cmluZyBsaXRlcmFscy4KICAgICB0ZW1wbGF0ZTx1bnNpZ25lZCBjaGFyYWN0
ZXJzQ291bnQ+Ci0gICAgSWRlbnRpZmllcihWTSogdm0sIGNvbnN0IGNoYXIgKCZjaGFyYWN0ZXJz
KVtjaGFyYWN0ZXJzQ291bnRdKSA6IG1fc3RyaW5nKGFkZCh2bSwgY2hhcmFjdGVycykpIHsgQVNT
RVJUKG1fc3RyaW5nLmltcGwoKS0+aXNBdG9tKCkpOyB9CisgICAgSWRlbnRpZmllcihWTSYgdm0s
IGNvbnN0IGNoYXIgKCZjaGFyYWN0ZXJzKVtjaGFyYWN0ZXJzQ291bnRdKSA6IG1fc3RyaW5nKGFk
ZCh2bSwgY2hhcmFjdGVycykpIHsgQVNTRVJUKG1fc3RyaW5nLmltcGwoKS0+aXNBdG9tKCkpOyB9
CiAKLSAgICBJZGVudGlmaWVyKFZNKiB2bSwgY29uc3QgTENoYXIqIHMsIGludCBsZW5ndGgpIDog
bV9zdHJpbmcoYWRkKHZtLCBzLCBsZW5ndGgpKSB7IEFTU0VSVChtX3N0cmluZy5pbXBsKCktPmlz
QXRvbSgpKTsgfQotICAgIElkZW50aWZpZXIoVk0qIHZtLCBjb25zdCBVQ2hhciogcywgaW50IGxl
bmd0aCkgOiBtX3N0cmluZyhhZGQodm0sIHMsIGxlbmd0aCkpIHsgQVNTRVJUKG1fc3RyaW5nLmlt
cGwoKS0+aXNBdG9tKCkpOyB9Ci0gICAgSWRlbnRpZmllcihFeGVjU3RhdGUqLCBBdG9tU3RyaW5n
SW1wbCopOwotICAgIElkZW50aWZpZXIoRXhlY1N0YXRlKiwgY29uc3QgQXRvbVN0cmluZyYpOwot
ICAgIElkZW50aWZpZXIoVk0qIHZtLCBjb25zdCBTdHJpbmcmIHN0cmluZykgOiBtX3N0cmluZyhh
ZGQodm0sIHN0cmluZy5pbXBsKCkpKSB7IEFTU0VSVChtX3N0cmluZy5pbXBsKCktPmlzQXRvbSgp
KTsgfQotICAgIElkZW50aWZpZXIoVk0qIHZtLCBTdHJpbmdJbXBsKiByZXApIDogbV9zdHJpbmco
YWRkKHZtLCByZXApKSB7IEFTU0VSVChtX3N0cmluZy5pbXBsKCktPmlzQXRvbSgpKTsgfQorICAg
IElkZW50aWZpZXIoVk0mIHZtLCBjb25zdCBMQ2hhciogcywgaW50IGxlbmd0aCkgOiBtX3N0cmlu
ZyhhZGQodm0sIHMsIGxlbmd0aCkpIHsgQVNTRVJUKG1fc3RyaW5nLmltcGwoKS0+aXNBdG9tKCkp
OyB9CisgICAgSWRlbnRpZmllcihWTSYgdm0sIGNvbnN0IFVDaGFyKiBzLCBpbnQgbGVuZ3RoKSA6
IG1fc3RyaW5nKGFkZCh2bSwgcywgbGVuZ3RoKSkgeyBBU1NFUlQobV9zdHJpbmcuaW1wbCgpLT5p
c0F0b20oKSk7IH0KKyAgICBJZGVudGlmaWVyKFZNJiB2bSwgY29uc3QgU3RyaW5nJiBzdHJpbmcp
IDogbV9zdHJpbmcoYWRkKHZtLCBzdHJpbmcuaW1wbCgpKSkgeyBBU1NFUlQobV9zdHJpbmcuaW1w
bCgpLT5pc0F0b20oKSk7IH0KKyAgICBJZGVudGlmaWVyKFZNJiB2bSwgU3RyaW5nSW1wbCogcmVw
KSA6IG1fc3RyaW5nKGFkZCh2bSwgcmVwKSkgeyBBU1NFUlQobV9zdHJpbmcuaW1wbCgpLT5pc0F0
b20oKSk7IH0KIAogICAgIElkZW50aWZpZXIoU3ltYm9sSW1wbCYgdWlkKQogICAgICAgICA6IG1f
c3RyaW5nKCZ1aWQpCkBAIC0xODcsMTkgKzE3NiwxNiBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBi
b29sIGVxdWFsKGNvbnN0IElkZW50aWZpZXImIGEsIGNvbnN0IElkZW50aWZpZXImIGIpIHsgcmV0
dXJuIGEubV9zdHJpbmcuaW1wbCgpID09IGIubV9zdHJpbmcuaW1wbCgpOyB9CiAgICAgc3RhdGlj
IGJvb2wgZXF1YWwoY29uc3QgSWRlbnRpZmllciYgYSwgY29uc3QgTENoYXIqIGIpIHsgcmV0dXJu
IGVxdWFsKGEubV9zdHJpbmcuaW1wbCgpLCBiKTsgfQogCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1l
IFQ+IHN0YXRpYyBSZWY8U3RyaW5nSW1wbD4gYWRkKFZNKiwgY29uc3QgVCosIGludCBsZW5ndGgp
OwotICAgIHN0YXRpYyBSZWY8U3RyaW5nSW1wbD4gYWRkOChWTSosIGNvbnN0IFVDaGFyKiwgaW50
IGxlbmd0aCk7CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHN0YXRpYyBSZWY8U3RyaW5nSW1w
bD4gYWRkKFZNJiwgY29uc3QgVCosIGludCBsZW5ndGgpOworICAgIHN0YXRpYyBSZWY8U3RyaW5n
SW1wbD4gYWRkOChWTSYsIGNvbnN0IFVDaGFyKiwgaW50IGxlbmd0aCk7CiAgICAgdGVtcGxhdGUg
PHR5cGVuYW1lIFQ+IEFMV0FZU19JTkxJTkUgc3RhdGljIGJvb2wgY2FuVXNlU2luZ2xlQ2hhcmFj
dGVyU3RyaW5nKFQpOwogCi0gICAgc3RhdGljIFJlZjxTdHJpbmdJbXBsPiBhZGQoRXhlY1N0YXRl
KiwgU3RyaW5nSW1wbCopOwotICAgIHN0YXRpYyBSZWY8U3RyaW5nSW1wbD4gYWRkKFZNKiwgU3Ry
aW5nSW1wbCopOworICAgIHN0YXRpYyBSZWY8U3RyaW5nSW1wbD4gYWRkKFZNJiwgU3RyaW5nSW1w
bCopOwogCiAjaWZuZGVmIE5ERUJVRwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lk
IGNoZWNrQ3VycmVudEF0b21TdHJpbmdUYWJsZShFeGVjU3RhdGUqKTsKLSAgICBKU19FWFBPUlRf
UFJJVkFURSBzdGF0aWMgdm9pZCBjaGVja0N1cnJlbnRBdG9tU3RyaW5nVGFibGUoVk0qKTsKKyAg
ICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBjaGVja0N1cnJlbnRBdG9tU3RyaW5nVGFi
bGUoVk0mKTsKICNlbHNlCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgTk9fUkVUVVJOX0RVRV9UT19D
UkFTSCBzdGF0aWMgdm9pZCBjaGVja0N1cnJlbnRBdG9tU3RyaW5nVGFibGUoRXhlY1N0YXRlKik7
Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgTk9fUkVUVVJOX0RVRV9UT19DUkFTSCBzdGF0aWMgdm9p
ZCBjaGVja0N1cnJlbnRBdG9tU3RyaW5nVGFibGUoVk0qKTsKKyAgICBKU19FWFBPUlRfUFJJVkFU
RSBOT19SRVRVUk5fRFVFX1RPX0NSQVNIIHN0YXRpYyB2b2lkIGNoZWNrQ3VycmVudEF0b21TdHJp
bmdUYWJsZShWTSYpOwogI2VuZGlmCiB9OwogCkBAIC0yMTUsMTIgKzIwMSwxMiBAQCB0ZW1wbGF0
ZSA8PiBBTFdBWVNfSU5MSU5FIGJvb2wgSWRlbnRpZmllCiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFt
ZSBUPgotUmVmPFN0cmluZ0ltcGw+IElkZW50aWZpZXI6OmFkZChWTSogdm0sIGNvbnN0IFQqIHMs
IGludCBsZW5ndGgpCitSZWY8U3RyaW5nSW1wbD4gSWRlbnRpZmllcjo6YWRkKFZNJiB2bSwgY29u
c3QgVCogcywgaW50IGxlbmd0aCkKIHsKICAgICBpZiAobGVuZ3RoID09IDEpIHsKICAgICAgICAg
VCBjID0gc1swXTsKICAgICAgICAgaWYgKGNhblVzZVNpbmdsZUNoYXJhY3RlclN0cmluZyhjKSkK
LSAgICAgICAgICAgIHJldHVybiB2bS0+c21hbGxTdHJpbmdzLnNpbmdsZUNoYXJhY3RlclN0cmlu
Z1JlcChjKTsKKyAgICAgICAgICAgIHJldHVybiB2bS5zbWFsbFN0cmluZ3Muc2luZ2xlQ2hhcmFj
dGVyU3RyaW5nUmVwKGMpOwogICAgIH0KICAgICBpZiAoIWxlbmd0aCkKICAgICAgICAgcmV0dXJu
ICpTdHJpbmdJbXBsOjplbXB0eSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSWRlbnRpZmllcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JZGVudGlmaWVySW5saW5lcy5oCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JZGVudGlmaWVySW5saW5lcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTMxLDU4ICszMSwyMSBAQAogCiBuYW1lc3BhY2UgSlNDICB7CiAKLWlubGluZSBJZGVudGlm
aWVyOjpJZGVudGlmaWVyKEV4ZWNTdGF0ZSogZXhlYywgQXRvbVN0cmluZ0ltcGwqIHN0cmluZykK
LSAgICA6IG1fc3RyaW5nKHN0cmluZykKLXsKLSNpZm5kZWYgTkRFQlVHCi0gICAgY2hlY2tDdXJy
ZW50QXRvbVN0cmluZ1RhYmxlKGV4ZWMpOwotICAgIGlmIChzdHJpbmcpCi0gICAgICAgIEFTU0VS
VF9XSVRIX01FU1NBR0UoIXN0cmluZy0+bGVuZ3RoKCkgfHwgc3RyaW5nLT5pc1N5bWJvbCgpIHx8
IEF0b21TdHJpbmdJbXBsOjppc0luQXRvbVN0cmluZ1RhYmxlKHN0cmluZyksICJUaGUgYXRvbWlj
IHN0cmluZyBjb21lcyBmcm9tIGFuIG90aGVyIHRocmVhZCEiKTsKLSNlbHNlCi0gICAgVU5VU0VE
X1BBUkFNKGV4ZWMpOwotI2VuZGlmCi19Ci0KLWlubGluZSBJZGVudGlmaWVyOjpJZGVudGlmaWVy
KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXRvbVN0cmluZyYgc3RyaW5nKQotICAgIDogbV9zdHJp
bmcoc3RyaW5nLnN0cmluZygpKQotewotI2lmbmRlZiBOREVCVUcKLSAgICBjaGVja0N1cnJlbnRB
dG9tU3RyaW5nVGFibGUoZXhlYyk7Ci0gICAgaWYgKCFzdHJpbmcuaXNOdWxsKCkpCi0gICAgICAg
IEFTU0VSVF9XSVRIX01FU1NBR0UoIXN0cmluZy5sZW5ndGgoKSB8fCBzdHJpbmcuaW1wbCgpLT5p
c1N5bWJvbCgpIHx8IEF0b21TdHJpbmdJbXBsOjppc0luQXRvbVN0cmluZ1RhYmxlKHN0cmluZy5p
bXBsKCkpLCAiVGhlIGF0b21pYyBzdHJpbmcgY29tZXMgZnJvbSBhbiBvdGhlciB0aHJlYWQhIik7
Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShleGVjKTsKLSNlbmRpZgotfQotCi1pbmxpbmUgUmVm
PFN0cmluZ0ltcGw+IElkZW50aWZpZXI6OmFkZChFeGVjU3RhdGUqIGV4ZWMsIFN0cmluZ0ltcGwq
IHIpCi17Ci0jaWZuZGVmIE5ERUJVRwotICAgIGNoZWNrQ3VycmVudEF0b21TdHJpbmdUYWJsZShl
eGVjKTsKLSNlbmRpZgotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgcmV0dXJuICpBdG9t
U3RyaW5nSW1wbDo6YWRkV2l0aFN0cmluZ1RhYmxlUHJvdmlkZXIodm0sIHIpOwotfQotaW5saW5l
IFJlZjxTdHJpbmdJbXBsPiBJZGVudGlmaWVyOjphZGQoVk0qIHZtLCBTdHJpbmdJbXBsKiByKQor
aW5saW5lIFJlZjxTdHJpbmdJbXBsPiBJZGVudGlmaWVyOjphZGQoVk0mIHZtLCBTdHJpbmdJbXBs
KiByKQogewogI2lmbmRlZiBOREVCVUcKICAgICBjaGVja0N1cnJlbnRBdG9tU3RyaW5nVGFibGUo
dm0pOwogI2VuZGlmCi0gICAgcmV0dXJuICpBdG9tU3RyaW5nSW1wbDo6YWRkV2l0aFN0cmluZ1Rh
YmxlUHJvdmlkZXIoKnZtLCByKTsKKyAgICByZXR1cm4gKkF0b21TdHJpbmdJbXBsOjphZGRXaXRo
U3RyaW5nVGFibGVQcm92aWRlcih2bSwgcik7CiB9CiAKLWlubGluZSBJZGVudGlmaWVyIElkZW50
aWZpZXI6OmZyb21VaWQoVk0qIHZtLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQoraW5saW5lIElk
ZW50aWZpZXIgSWRlbnRpZmllcjo6ZnJvbVVpZChWTSYgdm0sIFVuaXF1ZWRTdHJpbmdJbXBsKiB1
aWQpCiB7CiAgICAgaWYgKCF1aWQgfHwgIXVpZC0+aXNTeW1ib2woKSkKICAgICAgICAgcmV0dXJu
IElkZW50aWZpZXIodm0sIHVpZCk7CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFN5bWJvbEltcGwm
PigqdWlkKTsKIH0KIAotaW5saW5lIElkZW50aWZpZXIgSWRlbnRpZmllcjo6ZnJvbVVpZChFeGVj
U3RhdGUqIGV4ZWMsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCi17Ci0gICAgcmV0dXJuIGZyb21V
aWQoJmV4ZWMtPnZtKCksIHVpZCk7Ci19Ci0KIGlubGluZSBJZGVudGlmaWVyIElkZW50aWZpZXI6
OmZyb21VaWQoY29uc3QgUHJpdmF0ZU5hbWUmIG5hbWUpCiB7CiAgICAgcmV0dXJuIG5hbWUudWlk
KCk7CkBAIC05NCw2NCArNTcsNDggQEAgaW5saW5lIElkZW50aWZpZXIgSWRlbnRpZmllcjo6ZnJv
bVVpZChTeQogfQogCiB0ZW1wbGF0ZTx1bnNpZ25lZCBjaGFyYWN0ZXJzQ291bnQ+Ci1pbmxpbmUg
SWRlbnRpZmllciBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKFZNKiB2bSwgY29uc3QgY2hhciAoJmNo
YXJhY3RlcnMpW2NoYXJhY3RlcnNDb3VudF0pCitpbmxpbmUgSWRlbnRpZmllciBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKFZNJiB2bSwgY29uc3QgY2hhciAoJmNoYXJhY3RlcnMpW2NoYXJhY3RlcnND
b3VudF0pCiB7Ci0gICAgcmV0dXJuIElkZW50aWZpZXIodm0sIGNoYXJhY3RlcnMpOworICAgIHJl
dHVybiBJZGVudGlmaWVyKCZ2bSwgY2hhcmFjdGVycyk7CiB9CiAKLXRlbXBsYXRlPHVuc2lnbmVk
IGNoYXJhY3RlcnNDb3VudD4KLWlubGluZSBJZGVudGlmaWVyIElkZW50aWZpZXI6OmZyb21TdHJp
bmcoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBjaGFyICgmY2hhcmFjdGVycylbY2hhcmFjdGVyc0Nv
dW50XSkKK2lubGluZSBJZGVudGlmaWVyIElkZW50aWZpZXI6OmZyb21TdHJpbmcoVk0mIHZtLCBB
U0NJSUxpdGVyYWwgcykKIHsKLSAgICByZXR1cm4gSWRlbnRpZmllcigmZXhlYy0+dm0oKSwgY2hh
cmFjdGVycyk7CisgICAgcmV0dXJuIElkZW50aWZpZXIodm0sIFN0cmluZyhzKSk7CiB9CiAKLWlu
bGluZSBJZGVudGlmaWVyIElkZW50aWZpZXI6OmZyb21TdHJpbmcoVk0qIHZtLCBjb25zdCBMQ2hh
ciogcywgaW50IGxlbmd0aCkKK2lubGluZSBJZGVudGlmaWVyIElkZW50aWZpZXI6OmZyb21TdHJp
bmcoVk0mIHZtLCBjb25zdCBMQ2hhciogcywgaW50IGxlbmd0aCkKIHsKICAgICByZXR1cm4gSWRl
bnRpZmllcih2bSwgcywgbGVuZ3RoKTsKIH0KIAotaW5saW5lIElkZW50aWZpZXIgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZyhWTSogdm0sIGNvbnN0IFVDaGFyKiBzLCBpbnQgbGVuZ3RoKQoraW5saW5l
IElkZW50aWZpZXIgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhWTSYgdm0sIGNvbnN0IFVDaGFyKiBz
LCBpbnQgbGVuZ3RoKQogewogICAgIHJldHVybiBJZGVudGlmaWVyKHZtLCBzLCBsZW5ndGgpOwog
fQogCi1pbmxpbmUgSWRlbnRpZmllciBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKFZNKiB2bSwgY29u
c3QgU3RyaW5nJiBzdHJpbmcpCitpbmxpbmUgSWRlbnRpZmllciBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKFZNJiB2bSwgY29uc3QgU3RyaW5nJiBzdHJpbmcpCiB7CiAgICAgcmV0dXJuIElkZW50aWZp
ZXIodm0sIHN0cmluZy5pbXBsKCkpOwogfQogCi1pbmxpbmUgSWRlbnRpZmllciBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU3RyaW5nJiBzdHJpbmcpCi17Ci0g
ICAgcmV0dXJuIElkZW50aWZpZXIoJmV4ZWMtPnZtKCksIHN0cmluZy5pbXBsKCkpOwotfQotCi1p
bmxpbmUgSWRlbnRpZmllciBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywg
QXRvbVN0cmluZ0ltcGwqIGF0b21TdHJpbmcpCi17Ci0gICAgcmV0dXJuIElkZW50aWZpZXIoZXhl
YywgYXRvbVN0cmluZyk7Ci19Ci0KLWlubGluZSBJZGVudGlmaWVyIElkZW50aWZpZXI6OmZyb21T
dHJpbmcoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBdG9tU3RyaW5nJiBhdG9tU3RyaW5nKQotewot
ICAgIHJldHVybiBJZGVudGlmaWVyKGV4ZWMsIGF0b21TdHJpbmcpOwotfQotCi1pbmxpbmUgSWRl
bnRpZmllciBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgY2hh
ciogcykKK2lubGluZSBJZGVudGlmaWVyIElkZW50aWZpZXI6OmZyb21TdHJpbmcoVk0mIHZtLCBj
b25zdCBjaGFyKiBzKQogewotICAgIHJldHVybiBJZGVudGlmaWVyKGV4ZWMsIEF0b21TdHJpbmco
cykpOworICAgIHJldHVybiBJZGVudGlmaWVyKHZtLCBBdG9tU3RyaW5nKHMpKTsKIH0KIAogaW5s
aW5lIEpTVmFsdWUgaWRlbnRpZmllclRvSlNWYWx1ZShWTSYgdm0sIGNvbnN0IElkZW50aWZpZXIm
IGlkZW50aWZpZXIpCiB7CiAgICAgaWYgKGlkZW50aWZpZXIuaXNTeW1ib2woKSkKICAgICAgICAg
cmV0dXJuIFN5bWJvbDo6Y3JlYXRlKHZtLCBzdGF0aWNfY2FzdDxTeW1ib2xJbXBsJj4oKmlkZW50
aWZpZXIuaW1wbCgpKSk7Ci0gICAgcmV0dXJuIGpzU3RyaW5nKCZ2bSwgaWRlbnRpZmllci5pbXBs
KCkpOworICAgIHJldHVybiBqc1N0cmluZyh2bSwgaWRlbnRpZmllci5pbXBsKCkpOwogfQogCiBp
bmxpbmUgSlNWYWx1ZSBpZGVudGlmaWVyVG9TYWZlUHVibGljSlNWYWx1ZShWTSYgdm0sIGNvbnN0
IElkZW50aWZpZXImIGlkZW50aWZpZXIpIAogewogICAgIGlmIChpZGVudGlmaWVyLmlzU3ltYm9s
KCkgJiYgIWlkZW50aWZpZXIuaXNQcml2YXRlTmFtZSgpKQogICAgICAgICByZXR1cm4gU3ltYm9s
OjpjcmVhdGUodm0sIHN0YXRpY19jYXN0PFN5bWJvbEltcGwmPigqaWRlbnRpZmllci5pbXBsKCkp
KTsKLSAgICByZXR1cm4ganNTdHJpbmcoJnZtLCBpZGVudGlmaWVyLmltcGwoKSk7CisgICAgcmV0
dXJuIGpzU3RyaW5nKHZtLCBpZGVudGlmaWVyLmltcGwoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZXJuYWxGdW5jdGlv
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZXJu
YWxGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0ludGVybmFsRnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Miw3ICs1
Miw3IEBAIHZvaWQgSW50ZXJuYWxGdW5jdGlvbjo6ZmluaXNoQ3JlYXRpb24oVk0KICAgICBBU1NF
UlQobWV0aG9kVGFibGUodm0pLT5nZXRDYWxsRGF0YSA9PSBJbnRlcm5hbEZ1bmN0aW9uOjppbmZv
KCktPm1ldGhvZFRhYmxlLmdldENhbGxEYXRhKTsKICAgICBBU1NFUlQobWV0aG9kVGFibGUodm0p
LT5nZXRDb25zdHJ1Y3REYXRhID09IEludGVybmFsRnVuY3Rpb246OmluZm8oKS0+bWV0aG9kVGFi
bGUuZ2V0Q29uc3RydWN0RGF0YSk7CiAgICAgQVNTRVJUKHR5cGUoKSA9PSBJbnRlcm5hbEZ1bmN0
aW9uVHlwZSk7Ci0gICAgSlNTdHJpbmcqIG5hbWVTdHJpbmcgPSBqc1N0cmluZygmdm0sIG5hbWUp
OworICAgIEpTU3RyaW5nKiBuYW1lU3RyaW5nID0ganNTdHJpbmcodm0sIG5hbWUpOwogICAgIG1f
b3JpZ2luYWxOYW1lLnNldCh2bSwgdGhpcywgbmFtZVN0cmluZyk7CiAgICAgaWYgKG5hbWVWaXNp
YmlsaXR5ID09IE5hbWVWaXNpYmlsaXR5OjpWaXNpYmxlKSB7CiAgICAgICAgIGlmIChuYW1lQWRk
aXRpb25Nb2RlID09IE5hbWVBZGRpdGlvbk1vZGU6OldpdGhTdHJ1Y3R1cmVUcmFuc2l0aW9uKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bENvbGxhdG9yLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsQ29sbGF0b3IuY3Bw
CShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRs
Q29sbGF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIENvcHly
aWdodCAoQykgMjAxNSBBbmR5IFZhbldhZ29uZXIgKGFuZHlAdmFud2Fnb25lci5mYW1pbHkpCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgU3Vrb2xzYWsgU2Frc2h1d29uZyAoc3Vrb2xzYWtAZ21haWwu
Y29tKQotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5jLiBBbGwgUmlnaHRz
IFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MTIsMTMgKzQx
MiwxMyBAQCBKU09iamVjdCogSW50bENvbGxhdG9yOjpyZXNvbHZlZE9wdGlvbnMoCiAgICAgfQog
CiAgICAgSlNPYmplY3QqIG9wdGlvbnMgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdCgmc3RhdGUpOwot
ICAgIG9wdGlvbnMtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bG9jYWxlLCBqc1N0
cmluZygmc3RhdGUsIG1fbG9jYWxlKSk7Ci0gICAgb3B0aW9ucy0+cHV0RGlyZWN0KHZtLCB2bS5w
cm9wZXJ0eU5hbWVzLT51c2FnZSwganNOb250cml2aWFsU3RyaW5nKCZzdGF0ZSwgdXNhZ2VTdHJp
bmcobV91c2FnZSkpKTsKLSAgICBvcHRpb25zLT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFt
ZXMtPnNlbnNpdGl2aXR5LCBqc05vbnRyaXZpYWxTdHJpbmcoJnN0YXRlLCBzZW5zaXRpdml0eVN0
cmluZyhtX3NlbnNpdGl2aXR5KSkpOworICAgIG9wdGlvbnMtPnB1dERpcmVjdCh2bSwgdm0ucHJv
cGVydHlOYW1lcy0+bG9jYWxlLCBqc1N0cmluZyh2bSwgbV9sb2NhbGUpKTsKKyAgICBvcHRpb25z
LT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnVzYWdlLCBqc05vbnRyaXZpYWxTdHJp
bmcodm0sIHVzYWdlU3RyaW5nKG1fdXNhZ2UpKSk7CisgICAgb3B0aW9ucy0+cHV0RGlyZWN0KHZt
LCB2bS5wcm9wZXJ0eU5hbWVzLT5zZW5zaXRpdml0eSwganNOb250cml2aWFsU3RyaW5nKHZtLCBz
ZW5zaXRpdml0eVN0cmluZyhtX3NlbnNpdGl2aXR5KSkpOwogICAgIG9wdGlvbnMtPnB1dERpcmVj
dCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+aWdub3JlUHVuY3R1YXRpb24sIGpzQm9vbGVhbihtX2ln
bm9yZVB1bmN0dWF0aW9uKSk7Ci0gICAgb3B0aW9ucy0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0
eU5hbWVzLT5jb2xsYXRpb24sIGpzU3RyaW5nKCZzdGF0ZSwgbV9jb2xsYXRpb24pKTsKKyAgICBv
cHRpb25zLT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmNvbGxhdGlvbiwganNTdHJp
bmcodm0sIG1fY29sbGF0aW9uKSk7CiAgICAgb3B0aW9ucy0+cHV0RGlyZWN0KHZtLCB2bS5wcm9w
ZXJ0eU5hbWVzLT5udW1lcmljLCBqc0Jvb2xlYW4obV9udW1lcmljKSk7Ci0gICAgb3B0aW9ucy0+
cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5jYXNlRmlyc3QsIGpzTm9udHJpdmlhbFN0
cmluZygmc3RhdGUsIGNhc2VGaXJzdFN0cmluZyhtX2Nhc2VGaXJzdCkpKTsKKyAgICBvcHRpb25z
LT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmNhc2VGaXJzdCwganNOb250cml2aWFs
U3RyaW5nKHZtLCBjYXNlRmlyc3RTdHJpbmcobV9jYXNlRmlyc3QpKSk7CiAgICAgcmV0dXJuIG9w
dGlvbnM7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xs
YXRvclByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSW50bENvbGxhdG9yUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bENvbGxhdG9yUHJvdG90eXBlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQW5k
eSBWYW5XYWdvbmVyIChhbmR5QHZhbndhZ29uZXIuZmFtaWx5KQotICogQ29weXJpZ2h0IChDKSAy
MDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE2LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC03NSw3ICs3NSw3IEBAIHZvaWQgSW50bENvbGxhdG9yUHJv
dG90eXBlOjpmaW5pc2hDcmVhdGkKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAK
LSAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+dG9T
dHJpbmdUYWdTeW1ib2wsIGpzU3RyaW5nKCZ2bSwgIk9iamVjdCIpLCBQcm9wZXJ0eUF0dHJpYnV0
ZTo6RG9udEVudW0gfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpOworICAgIHB1dERpcmVj
dFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT50b1N0cmluZ1RhZ1N5bWJv
bCwganNTdHJpbmcodm0sICJPYmplY3QiKSwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtIHwg
UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KTsKIH0KIAogc3RhdGljIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgSW50bENvbGxhdG9yRnVuY0NvbXBhcmUoRXhlY1N0YXRlKiBzdGF0ZSkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVU
aW1lRm9ybWF0LmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsx
LDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQW5keSBWYW5XYWdvbmVyIChhbmR5QHZh
bndhZ29uZXIuZmFtaWx5KQotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0zMTYsNyArMzE2LDcgQEAgc3RhdGljIEpTT2JqZWN0KiB0b0RhdGVUaW1lT3B0aW9uc0FueURh
dAogICAgICAgICAvLyBhLiBGb3IgZWFjaCBvZiB0aGUgcHJvcGVydHkgbmFtZXMgInllYXIiLCAi
bW9udGgiLCAiZGF5IjoKICAgICAgICAgLy8gaS4gTGV0IHN0YXR1cyBiZSBDcmVhdGVEYXRlUHJv
cGVydHlPclRocm93KG9wdGlvbnMsIHByb3AsICJudW1lcmljIikuCiAgICAgICAgIC8vIGlpLiBS
ZXR1cm5JZkFicnVwdChzdGF0dXMpLgotICAgICAgICBKU1N0cmluZyogbnVtZXJpYyA9IGpzTm9u
dHJpdmlhbFN0cmluZygmZXhlYywgIm51bWVyaWMiX3MpOworICAgICAgICBKU1N0cmluZyogbnVt
ZXJpYyA9IGpzTm9udHJpdmlhbFN0cmluZyh2bSwgIm51bWVyaWMiX3MpOwogCiAgICAgICAgIG9w
dGlvbnMtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+eWVhciwgbnVtZXJpYyk7CiAg
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwpAQCAtODQ4LDQyICs4
NDgsNDIgQEAgSlNPYmplY3QqIEludGxEYXRlVGltZUZvcm1hdDo6cmVzb2x2ZWRPcAogICAgIH0K
IAogICAgIEpTT2JqZWN0KiBvcHRpb25zID0gY29uc3RydWN0RW1wdHlPYmplY3QoJmV4ZWMpOwot
ICAgIG9wdGlvbnMtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bG9jYWxlLCBqc05v
bnRyaXZpYWxTdHJpbmcoJmV4ZWMsIG1fbG9jYWxlKSk7Ci0gICAgb3B0aW9ucy0+cHV0RGlyZWN0
KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5jYWxlbmRhciwganNOb250cml2aWFsU3RyaW5nKCZleGVj
LCBtX2NhbGVuZGFyKSk7Ci0gICAgb3B0aW9ucy0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5h
bWVzLT5udW1iZXJpbmdTeXN0ZW0sIGpzTm9udHJpdmlhbFN0cmluZygmZXhlYywgbV9udW1iZXJp
bmdTeXN0ZW0pKTsKLSAgICBvcHRpb25zLT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMt
PnRpbWVab25lLCBqc05vbnRyaXZpYWxTdHJpbmcoJmV4ZWMsIG1fdGltZVpvbmUpKTsKKyAgICBv
cHRpb25zLT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxvY2FsZSwganNOb250cml2
aWFsU3RyaW5nKHZtLCBtX2xvY2FsZSkpOworICAgIG9wdGlvbnMtPnB1dERpcmVjdCh2bSwgdm0u
cHJvcGVydHlOYW1lcy0+Y2FsZW5kYXIsIGpzTm9udHJpdmlhbFN0cmluZyh2bSwgbV9jYWxlbmRh
cikpOworICAgIG9wdGlvbnMtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bnVtYmVy
aW5nU3lzdGVtLCBqc05vbnRyaXZpYWxTdHJpbmcodm0sIG1fbnVtYmVyaW5nU3lzdGVtKSk7Cisg
ICAgb3B0aW9ucy0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT50aW1lWm9uZSwganNO
b250cml2aWFsU3RyaW5nKHZtLCBtX3RpbWVab25lKSk7CiAKICAgICBpZiAobV93ZWVrZGF5ICE9
IFdlZWtkYXk6Ok5vbmUpCi0gICAgICAgIG9wdGlvbnMtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVy
dHlOYW1lcy0+d2Vla2RheSwganNOb250cml2aWFsU3RyaW5nKCZleGVjLCB3ZWVrZGF5U3RyaW5n
KG1fd2Vla2RheSkpKTsKKyAgICAgICAgb3B0aW9ucy0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0
eU5hbWVzLT53ZWVrZGF5LCBqc05vbnRyaXZpYWxTdHJpbmcodm0sIHdlZWtkYXlTdHJpbmcobV93
ZWVrZGF5KSkpOwogCiAgICAgaWYgKG1fZXJhICE9IEVyYTo6Tm9uZSkKLSAgICAgICAgb3B0aW9u
cy0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5lcmEsIGpzTm9udHJpdmlhbFN0cmlu
ZygmZXhlYywgZXJhU3RyaW5nKG1fZXJhKSkpOworICAgICAgICBvcHRpb25zLT5wdXREaXJlY3Qo
dm0sIHZtLnByb3BlcnR5TmFtZXMtPmVyYSwganNOb250cml2aWFsU3RyaW5nKHZtLCBlcmFTdHJp
bmcobV9lcmEpKSk7CiAKICAgICBpZiAobV95ZWFyICE9IFllYXI6Ok5vbmUpCi0gICAgICAgIG9w
dGlvbnMtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+eWVhciwganNOb250cml2aWFs
U3RyaW5nKCZleGVjLCB5ZWFyU3RyaW5nKG1feWVhcikpKTsKKyAgICAgICAgb3B0aW9ucy0+cHV0
RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT55ZWFyLCBqc05vbnRyaXZpYWxTdHJpbmcodm0s
IHllYXJTdHJpbmcobV95ZWFyKSkpOwogCiAgICAgaWYgKG1fbW9udGggIT0gTW9udGg6Ok5vbmUp
Ci0gICAgICAgIG9wdGlvbnMtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bW9udGgs
IGpzTm9udHJpdmlhbFN0cmluZygmZXhlYywgbW9udGhTdHJpbmcobV9tb250aCkpKTsKKyAgICAg
ICAgb3B0aW9ucy0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5tb250aCwganNOb250
cml2aWFsU3RyaW5nKHZtLCBtb250aFN0cmluZyhtX21vbnRoKSkpOwogCiAgICAgaWYgKG1fZGF5
ICE9IERheTo6Tm9uZSkKLSAgICAgICAgb3B0aW9ucy0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0
eU5hbWVzLT5kYXksIGpzTm9udHJpdmlhbFN0cmluZygmZXhlYywgZGF5U3RyaW5nKG1fZGF5KSkp
OworICAgICAgICBvcHRpb25zLT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmRheSwg
anNOb250cml2aWFsU3RyaW5nKHZtLCBkYXlTdHJpbmcobV9kYXkpKSk7CiAKICAgICBpZiAobV9o
b3VyICE9IEhvdXI6Ok5vbmUpCi0gICAgICAgIG9wdGlvbnMtPnB1dERpcmVjdCh2bSwgdm0ucHJv
cGVydHlOYW1lcy0+aG91ciwganNOb250cml2aWFsU3RyaW5nKCZleGVjLCBob3VyU3RyaW5nKG1f
aG91cikpKTsKKyAgICAgICAgb3B0aW9ucy0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVz
LT5ob3VyLCBqc05vbnRyaXZpYWxTdHJpbmcodm0sIGhvdXJTdHJpbmcobV9ob3VyKSkpOwogCiAg
ICAgaWYgKCFtX2hvdXJDeWNsZS5pc051bGwoKSkgewotICAgICAgICBvcHRpb25zLT5wdXREaXJl
Y3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmhvdXJDeWNsZSwganNOb250cml2aWFsU3RyaW5nKCZl
eGVjLCBtX2hvdXJDeWNsZSkpOworICAgICAgICBvcHRpb25zLT5wdXREaXJlY3Qodm0sIHZtLnBy
b3BlcnR5TmFtZXMtPmhvdXJDeWNsZSwganNOb250cml2aWFsU3RyaW5nKHZtLCBtX2hvdXJDeWNs
ZSkpOwogICAgICAgICBvcHRpb25zLT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmhv
dXIxMiwganNCb29sZWFuKG1faG91ckN5Y2xlID09ICJoMTEiIHx8IG1faG91ckN5Y2xlID09ICJo
MTIiKSk7CiAgICAgfQogCiAgICAgaWYgKG1fbWludXRlICE9IE1pbnV0ZTo6Tm9uZSkKLSAgICAg
ICAgb3B0aW9ucy0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5taW51dGUsIGpzTm9u
dHJpdmlhbFN0cmluZygmZXhlYywgbWludXRlU3RyaW5nKG1fbWludXRlKSkpOworICAgICAgICBv
cHRpb25zLT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm1pbnV0ZSwganNOb250cml2
aWFsU3RyaW5nKHZtLCBtaW51dGVTdHJpbmcobV9taW51dGUpKSk7CiAKICAgICBpZiAobV9zZWNv
bmQgIT0gU2Vjb25kOjpOb25lKQotICAgICAgICBvcHRpb25zLT5wdXREaXJlY3Qodm0sIHZtLnBy
b3BlcnR5TmFtZXMtPnNlY29uZCwganNOb250cml2aWFsU3RyaW5nKCZleGVjLCBzZWNvbmRTdHJp
bmcobV9zZWNvbmQpKSk7CisgICAgICAgIG9wdGlvbnMtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVy
dHlOYW1lcy0+c2Vjb25kLCBqc05vbnRyaXZpYWxTdHJpbmcodm0sIHNlY29uZFN0cmluZyhtX3Nl
Y29uZCkpKTsKIAogICAgIGlmIChtX3RpbWVab25lTmFtZSAhPSBUaW1lWm9uZU5hbWU6Ok5vbmUp
Ci0gICAgICAgIG9wdGlvbnMtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+dGltZVpv
bmVOYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcoJmV4ZWMsIHRpbWVab25lTmFtZVN0cmluZyhtX3Rp
bWVab25lTmFtZSkpKTsKKyAgICAgICAgb3B0aW9ucy0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0
eU5hbWVzLT50aW1lWm9uZU5hbWUsIGpzTm9udHJpdmlhbFN0cmluZyh2bSwgdGltZVpvbmVOYW1l
U3RyaW5nKG1fdGltZVpvbmVOYW1lKSkpOwogCiAgICAgcmV0dXJuIG9wdGlvbnM7CiB9CkBAIC05
MTUsNyArOTE1LDcgQEAgSlNWYWx1ZSBJbnRsRGF0ZVRpbWVGb3JtYXQ6OmZvcm1hdChFeGVjUwog
ICAgIGlmIChVX0ZBSUxVUkUoc3RhdHVzKSkKICAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9y
KCZleGVjLCBzY29wZSwgImZhaWxlZCB0byBmb3JtYXQgZGF0ZSB2YWx1ZSJfcyk7CiAKLSAgICBy
ZXR1cm4ganNTdHJpbmcoJmV4ZWMsIFN0cmluZyhyZXN1bHQuZGF0YSgpLCByZXN1bHRMZW5ndGgp
KTsKKyAgICByZXR1cm4ganNTdHJpbmcodm0sIFN0cmluZyhyZXN1bHQuZGF0YSgpLCByZXN1bHRM
ZW5ndGgpKTsKIH0KIAogI2lmIEpTQ19JQ1VfSEFTX1VGSUVMRFBPU0lURVIKQEAgLTEwMTgsOCAr
MTAxOCw4IEBAIEpTVmFsdWUgSW50bERhdGVUaW1lRm9ybWF0Ojpmb3JtYXRUb1BhcnQKICAgICAg
ICAgcmV0dXJuIHRocm93T3V0T2ZNZW1vcnlFcnJvcigmZXhlYywgc2NvcGUpOwogCiAgICAgYXV0
byByZXN1bHRTdHJpbmcgPSBTdHJpbmcocmVzdWx0LmRhdGEoKSwgcmVzdWx0TGVuZ3RoKTsKLSAg
ICBhdXRvIHR5cGVQcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgInR5
cGUiKTsKLSAgICBhdXRvIGxpdGVyYWxTdHJpbmcgPSBqc1N0cmluZygmZXhlYywgImxpdGVyYWwi
X3MpOworICAgIGF1dG8gdHlwZVByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb21TdHJpbmco
dm0sICJ0eXBlIik7CisgICAgYXV0byBsaXRlcmFsU3RyaW5nID0ganNTdHJpbmcodm0sICJsaXRl
cmFsIl9zKTsKIAogICAgIGludDMyX3QgcHJldmlvdXNFbmRJbmRleCA9IDA7CiAgICAgaW50MzJf
dCBiZWdpbkluZGV4ID0gMDsKQEAgLTEwMzAsNyArMTAzMCw3IEBAIEpTVmFsdWUgSW50bERhdGVU
aW1lRm9ybWF0Ojpmb3JtYXRUb1BhcnQKICAgICAgICAgICAgIGJlZ2luSW5kZXggPSBlbmRJbmRl
eCA9IHJlc3VsdExlbmd0aDsKIAogICAgICAgICBpZiAocHJldmlvdXNFbmRJbmRleCA8IGJlZ2lu
SW5kZXgpIHsKLSAgICAgICAgICAgIGF1dG8gdmFsdWUgPSBqc1N0cmluZygmZXhlYywgcmVzdWx0
U3RyaW5nLnN1YnN0cmluZyhwcmV2aW91c0VuZEluZGV4LCBiZWdpbkluZGV4IC0gcHJldmlvdXNF
bmRJbmRleCkpOworICAgICAgICAgICAgYXV0byB2YWx1ZSA9IGpzU3RyaW5nKHZtLCByZXN1bHRT
dHJpbmcuc3Vic3RyaW5nKHByZXZpb3VzRW5kSW5kZXgsIGJlZ2luSW5kZXggLSBwcmV2aW91c0Vu
ZEluZGV4KSk7CiAgICAgICAgICAgICBKU09iamVjdCogcGFydCA9IGNvbnN0cnVjdEVtcHR5T2Jq
ZWN0KCZleGVjKTsKICAgICAgICAgICAgIHBhcnQtPnB1dERpcmVjdCh2bSwgdHlwZVByb3BlcnR5
TmFtZSwgbGl0ZXJhbFN0cmluZyk7CiAgICAgICAgICAgICBwYXJ0LT5wdXREaXJlY3Qodm0sIHZt
LnByb3BlcnR5TmFtZXMtPnZhbHVlLCB2YWx1ZSk7CkBAIC0xMDQwLDggKzEwNDAsOCBAQCBKU1Zh
bHVlIEludGxEYXRlVGltZUZvcm1hdDo6Zm9ybWF0VG9QYXJ0CiAgICAgICAgIHByZXZpb3VzRW5k
SW5kZXggPSBlbmRJbmRleDsKIAogICAgICAgICBpZiAoZmllbGRUeXBlID49IDApIHsKLSAgICAg
ICAgICAgIGF1dG8gdHlwZSA9IGpzU3RyaW5nKCZleGVjLCBwYXJ0VHlwZVN0cmluZyhVRGF0ZUZv
cm1hdEZpZWxkKGZpZWxkVHlwZSkpKTsKLSAgICAgICAgICAgIGF1dG8gdmFsdWUgPSBqc1N0cmlu
ZygmZXhlYywgcmVzdWx0U3RyaW5nLnN1YnN0cmluZyhiZWdpbkluZGV4LCBlbmRJbmRleCAtIGJl
Z2luSW5kZXgpKTsKKyAgICAgICAgICAgIGF1dG8gdHlwZSA9IGpzU3RyaW5nKHZtLCBwYXJ0VHlw
ZVN0cmluZyhVRGF0ZUZvcm1hdEZpZWxkKGZpZWxkVHlwZSkpKTsKKyAgICAgICAgICAgIGF1dG8g
dmFsdWUgPSBqc1N0cmluZyh2bSwgcmVzdWx0U3RyaW5nLnN1YnN0cmluZyhiZWdpbkluZGV4LCBl
bmRJbmRleCAtIGJlZ2luSW5kZXgpKTsKICAgICAgICAgICAgIEpTT2JqZWN0KiBwYXJ0ID0gY29u
c3RydWN0RW1wdHlPYmplY3QoJmV4ZWMpOwogICAgICAgICAgICAgcGFydC0+cHV0RGlyZWN0KHZt
LCB0eXBlUHJvcGVydHlOYW1lLCB0eXBlKTsKICAgICAgICAgICAgIHBhcnQtPnB1dERpcmVjdCh2
bSwgdm0ucHJvcGVydHlOYW1lcy0+dmFsdWUsIHZhbHVlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdFByb3RvdHlwZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0UHJv
dG90eXBlLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0UHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQW5keSBWYW5XYWdvbmVyIChh
bmR5QHZhbndhZ29uZXIuZmFtaWx5KQotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtODksNyArODksNyBAQCB2b2lkIEludGxEYXRlVGltZUZvcm1hdFByb3RvdHlwZTo6ZmluaXNo
CiAgICAgVU5VU0VEX1BBUkFNKGdsb2JhbE9iamVjdCk7CiAjZW5kaWYKIAotICAgIHB1dERpcmVj
dFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT50b1N0cmluZ1RhZ1N5bWJv
bCwganNTdHJpbmcoJnZtLCAiT2JqZWN0IiksIFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8
IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSk7CisgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5z
aXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPnRvU3RyaW5nVGFnU3ltYm9sLCBqc1N0cmluZyh2
bSwgIk9iamVjdCIpLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBQcm9wZXJ0eUF0dHJp
YnV0ZTo6UmVhZE9ubHkpOwogfQogCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBJbnRsRGF0ZVRpbWVGb3JtYXRGdW5jRm9ybWF0RGF0ZVRpbWUoRXhlY1N0YXRlKiBzdGF0ZSkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJG
b3JtYXQuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRsTnVtYmVyRm9ybWF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAK
IC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQW5keSBWYW5XYWdvbmVyIChhbmR5QHZhbndhZ29u
ZXIuZmFtaWx5KQogICogQ29weXJpZ2h0IChDKSAyMDE2IFN1a29sc2FrIFNha3NodXdvbmcgKHN1
a29sc2FrQGdtYWlsLmNvbSkKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMTk1LDcgKzE5NSw3IEBAIHZvaWQgSW50bE51bWJlckZvcm1hdDo6aW5pdGlhbGl6ZU51bWJl
ckYKIAogICAgIG1fbnVtYmVyaW5nU3lzdGVtID0gcmVzdWx0LmdldCgibnUiX3MpOwogCi0gICAg
U3RyaW5nIHN0eWxlU3RyaW5nID0gaW50bFN0cmluZ09wdGlvbihzdGF0ZSwgb3B0aW9ucywgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJzdHlsZSIpLCB7ICJkZWNpbWFsIiwgInBlcmNlbnQi
LCAiY3VycmVuY3kiIH0sICJzdHlsZSBtdXN0IGJlIGVpdGhlciBcImRlY2ltYWxcIiwgXCJwZXJj
ZW50XCIsIG9yIFwiY3VycmVuY3lcIiIsICJkZWNpbWFsIik7CisgICAgU3RyaW5nIHN0eWxlU3Ry
aW5nID0gaW50bFN0cmluZ09wdGlvbihzdGF0ZSwgb3B0aW9ucywgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZyh2bSwgInN0eWxlIiksIHsgImRlY2ltYWwiLCAicGVyY2VudCIsICJjdXJyZW5jeSIgfSwg
InN0eWxlIG11c3QgYmUgZWl0aGVyIFwiZGVjaW1hbFwiLCBcInBlcmNlbnRcIiwgb3IgXCJjdXJy
ZW5jeVwiIiwgImRlY2ltYWwiKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lk
KCkpOwogICAgIGlmIChzdHlsZVN0cmluZyA9PSAiZGVjaW1hbCIpCiAgICAgICAgIG1fc3R5bGUg
PSBTdHlsZTo6RGVjaW1hbDsKQEAgLTIwNiw3ICsyMDYsNyBAQCB2b2lkIEludGxOdW1iZXJGb3Jt
YXQ6OmluaXRpYWxpemVOdW1iZXJGCiAgICAgZWxzZQogICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKIAotICAgIFN0cmluZyBjdXJyZW5jeSA9IGludGxTdHJpbmdPcHRpb24oc3RhdGUsIG9w
dGlvbnMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiY3VycmVuY3kiKSwgeyB9LCBudWxs
cHRyLCBudWxscHRyKTsKKyAgICBTdHJpbmcgY3VycmVuY3kgPSBpbnRsU3RyaW5nT3B0aW9uKHN0
YXRlLCBvcHRpb25zLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiY3VycmVuY3kiKSwgeyB9
LCBudWxscHRyLCBudWxscHRyKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lk
KCkpOwogICAgIGlmICghY3VycmVuY3kuaXNOdWxsKCkpIHsKICAgICAgICAgaWYgKGN1cnJlbmN5
Lmxlbmd0aCgpICE9IDMgfHwgIWN1cnJlbmN5LmlzQWxsU3BlY2lhbENoYXJhY3RlcnM8aXNBU0NJ
SUFscGhhPigpKSB7CkBAIC0yMjcsNyArMjI3LDcgQEAgdm9pZCBJbnRsTnVtYmVyRm9ybWF0Ojpp
bml0aWFsaXplTnVtYmVyRgogICAgICAgICBjdXJyZW5jeURpZ2l0cyA9IGNvbXB1dGVDdXJyZW5j
eURpZ2l0cyhjdXJyZW5jeSk7CiAgICAgfQogCi0gICAgU3RyaW5nIGN1cnJlbmN5RGlzcGxheVN0
cmluZyA9IGludGxTdHJpbmdPcHRpb24oc3RhdGUsIG9wdGlvbnMsIElkZW50aWZpZXI6OmZyb21T
dHJpbmcoJnZtLCAiY3VycmVuY3lEaXNwbGF5IiksIHsgImNvZGUiLCAic3ltYm9sIiwgIm5hbWUi
IH0sICJjdXJyZW5jeURpc3BsYXkgbXVzdCBiZSBlaXRoZXIgXCJjb2RlXCIsIFwic3ltYm9sXCIs
IG9yIFwibmFtZVwiIiwgInN5bWJvbCIpOworICAgIFN0cmluZyBjdXJyZW5jeURpc3BsYXlTdHJp
bmcgPSBpbnRsU3RyaW5nT3B0aW9uKHN0YXRlLCBvcHRpb25zLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKHZtLCAiY3VycmVuY3lEaXNwbGF5IiksIHsgImNvZGUiLCAic3ltYm9sIiwgIm5hbWUiIH0s
ICJjdXJyZW5jeURpc3BsYXkgbXVzdCBiZSBlaXRoZXIgXCJjb2RlXCIsIFwic3ltYm9sXCIsIG9y
IFwibmFtZVwiIiwgInN5bWJvbCIpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZv
aWQoKSk7CiAgICAgaWYgKG1fc3R5bGUgPT0gU3R5bGU6OkN1cnJlbmN5KSB7CiAgICAgICAgIGlm
IChjdXJyZW5jeURpc3BsYXlTdHJpbmcgPT0gImNvZGUiKQpAQCAtMjQwLDEzICsyNDAsMTMgQEAg
dm9pZCBJbnRsTnVtYmVyRm9ybWF0Ojppbml0aWFsaXplTnVtYmVyRgogICAgICAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQogCi0gICAgdW5zaWduZWQgbWluaW11bUludGVnZXJE
aWdpdHMgPSBpbnRsTnVtYmVyT3B0aW9uKHN0YXRlLCBvcHRpb25zLCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKCZ2bSwgIm1pbmltdW1JbnRlZ2VyRGlnaXRzIiksIDEsIDIxLCAxKTsKKyAgICB1bnNp
Z25lZCBtaW5pbXVtSW50ZWdlckRpZ2l0cyA9IGludGxOdW1iZXJPcHRpb24oc3RhdGUsIG9wdGlv
bnMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJtaW5pbXVtSW50ZWdlckRpZ2l0cyIpLCAx
LCAyMSwgMSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKICAgICBt
X21pbmltdW1JbnRlZ2VyRGlnaXRzID0gbWluaW11bUludGVnZXJEaWdpdHM7CiAKICAgICB1bnNp
Z25lZCBtaW5pbXVtRnJhY3Rpb25EaWdpdHNEZWZhdWx0ID0gKG1fc3R5bGUgPT0gU3R5bGU6OkN1
cnJlbmN5KSA/IGN1cnJlbmN5RGlnaXRzIDogMDsKIAotICAgIHVuc2lnbmVkIG1pbmltdW1GcmFj
dGlvbkRpZ2l0cyA9IGludGxOdW1iZXJPcHRpb24oc3RhdGUsIG9wdGlvbnMsIElkZW50aWZpZXI6
OmZyb21TdHJpbmcoJnZtLCAibWluaW11bUZyYWN0aW9uRGlnaXRzIiksIDAsIDIwLCBtaW5pbXVt
RnJhY3Rpb25EaWdpdHNEZWZhdWx0KTsKKyAgICB1bnNpZ25lZCBtaW5pbXVtRnJhY3Rpb25EaWdp
dHMgPSBpbnRsTnVtYmVyT3B0aW9uKHN0YXRlLCBvcHRpb25zLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKHZtLCAibWluaW11bUZyYWN0aW9uRGlnaXRzIiksIDAsIDIwLCBtaW5pbXVtRnJhY3Rpb25E
aWdpdHNEZWZhdWx0KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwog
ICAgIG1fbWluaW11bUZyYWN0aW9uRGlnaXRzID0gbWluaW11bUZyYWN0aW9uRGlnaXRzOwogCkBA
IC0yNTgsMjcgKzI1OCwyNyBAQCB2b2lkIEludGxOdW1iZXJGb3JtYXQ6OmluaXRpYWxpemVOdW1i
ZXJGCiAgICAgZWxzZQogICAgICAgICBtYXhpbXVtRnJhY3Rpb25EaWdpdHNEZWZhdWx0ID0gc3Rk
OjptYXgobWluaW11bUZyYWN0aW9uRGlnaXRzLCAzdSk7CiAKLSAgICB1bnNpZ25lZCBtYXhpbXVt
RnJhY3Rpb25EaWdpdHMgPSBpbnRsTnVtYmVyT3B0aW9uKHN0YXRlLCBvcHRpb25zLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKCZ2bSwgIm1heGltdW1GcmFjdGlvbkRpZ2l0cyIpLCBtaW5pbXVtRnJh
Y3Rpb25EaWdpdHMsIDIwLCBtYXhpbXVtRnJhY3Rpb25EaWdpdHNEZWZhdWx0KTsKKyAgICB1bnNp
Z25lZCBtYXhpbXVtRnJhY3Rpb25EaWdpdHMgPSBpbnRsTnVtYmVyT3B0aW9uKHN0YXRlLCBvcHRp
b25zLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAibWF4aW11bUZyYWN0aW9uRGlnaXRzIiks
IG1pbmltdW1GcmFjdGlvbkRpZ2l0cywgMjAsIG1heGltdW1GcmFjdGlvbkRpZ2l0c0RlZmF1bHQp
OwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAgICAgbV9tYXhpbXVt
RnJhY3Rpb25EaWdpdHMgPSBtYXhpbXVtRnJhY3Rpb25EaWdpdHM7CiAKLSAgICBKU1ZhbHVlIG1p
bmltdW1TaWduaWZpY2FudERpZ2l0c1ZhbHVlID0gb3B0aW9ucy0+Z2V0KCZzdGF0ZSwgSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZygmdm0sICJtaW5pbXVtU2lnbmlmaWNhbnREaWdpdHMiKSk7CisgICAg
SlNWYWx1ZSBtaW5pbXVtU2lnbmlmaWNhbnREaWdpdHNWYWx1ZSA9IG9wdGlvbnMtPmdldCgmc3Rh
dGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJtaW5pbXVtU2lnbmlmaWNhbnREaWdpdHMi
KSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKIAotICAgIEpTVmFs
dWUgbWF4aW11bVNpZ25pZmljYW50RGlnaXRzVmFsdWUgPSBvcHRpb25zLT5nZXQoJnN0YXRlLCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgIm1heGltdW1TaWduaWZpY2FudERpZ2l0cyIpKTsK
KyAgICBKU1ZhbHVlIG1heGltdW1TaWduaWZpY2FudERpZ2l0c1ZhbHVlID0gb3B0aW9ucy0+Z2V0
KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIm1heGltdW1TaWduaWZpY2FudERp
Z2l0cyIpKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogCiAgICAg
aWYgKCFtaW5pbXVtU2lnbmlmaWNhbnREaWdpdHNWYWx1ZS5pc1VuZGVmaW5lZCgpIHx8ICFtYXhp
bXVtU2lnbmlmaWNhbnREaWdpdHNWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7Ci0gICAgICAgIHVuc2ln
bmVkIG1pbmltdW1TaWduaWZpY2FudERpZ2l0cyA9IGludGxEZWZhdWx0TnVtYmVyT3B0aW9uKHN0
YXRlLCBtaW5pbXVtU2lnbmlmaWNhbnREaWdpdHNWYWx1ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zygmdm0sICJtaW5pbXVtU2lnbmlmaWNhbnREaWdpdHMiKSwgMSwgMjEsIDEpOworICAgICAgICB1
bnNpZ25lZCBtaW5pbXVtU2lnbmlmaWNhbnREaWdpdHMgPSBpbnRsRGVmYXVsdE51bWJlck9wdGlv
bihzdGF0ZSwgbWluaW11bVNpZ25pZmljYW50RGlnaXRzVmFsdWUsIElkZW50aWZpZXI6OmZyb21T
dHJpbmcodm0sICJtaW5pbXVtU2lnbmlmaWNhbnREaWdpdHMiKSwgMSwgMjEsIDEpOwogICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwotICAgICAgICB1bnNpZ25lZCBt
YXhpbXVtU2lnbmlmaWNhbnREaWdpdHMgPSBpbnRsRGVmYXVsdE51bWJlck9wdGlvbihzdGF0ZSwg
bWF4aW11bVNpZ25pZmljYW50RGlnaXRzVmFsdWUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZt
LCAibWF4aW11bVNpZ25pZmljYW50RGlnaXRzIiksIG1pbmltdW1TaWduaWZpY2FudERpZ2l0cywg
MjEsIDIxKTsKKyAgICAgICAgdW5zaWduZWQgbWF4aW11bVNpZ25pZmljYW50RGlnaXRzID0gaW50
bERlZmF1bHROdW1iZXJPcHRpb24oc3RhdGUsIG1heGltdW1TaWduaWZpY2FudERpZ2l0c1ZhbHVl
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAibWF4aW11bVNpZ25pZmljYW50RGlnaXRzIiks
IG1pbmltdW1TaWduaWZpY2FudERpZ2l0cywgMjEsIDIxKTsKICAgICAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgdm9pZCgpKTsKICAgICAgICAgbV9taW5pbXVtU2lnbmlmaWNhbnREaWdp
dHMgPSBtaW5pbXVtU2lnbmlmaWNhbnREaWdpdHM7CiAgICAgICAgIG1fbWF4aW11bVNpZ25pZmlj
YW50RGlnaXRzID0gbWF4aW11bVNpZ25pZmljYW50RGlnaXRzOwogICAgIH0KIAogICAgIGJvb2wg
dXNlc0ZhbGxiYWNrOwotICAgIGJvb2wgdXNlR3JvdXBpbmcgPSBpbnRsQm9vbGVhbk9wdGlvbihz
dGF0ZSwgb3B0aW9ucywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJ1c2VHcm91cGluZyIp
LCB1c2VzRmFsbGJhY2spOworICAgIGJvb2wgdXNlR3JvdXBpbmcgPSBpbnRsQm9vbGVhbk9wdGlv
bihzdGF0ZSwgb3B0aW9ucywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInVzZUdyb3VwaW5n
IiksIHVzZXNGYWxsYmFjayk7CiAgICAgaWYgKHVzZXNGYWxsYmFjaykKICAgICAgICAgdXNlR3Jv
dXBpbmcgPSB0cnVlOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CkBA
IC0zNjQsNyArMzY0LDcgQEAgSlNWYWx1ZSBJbnRsTnVtYmVyRm9ybWF0Ojpmb3JtYXROdW1iZXIo
RQogICAgIGlmIChVX0ZBSUxVUkUoc3RhdHVzKSkKICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0
aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZUVycm9yKCZzdGF0ZSwgIkZhaWxlZCB0byBmb3JtYXQg
YSBudW1iZXIuIl9zKSk7CiAKLSAgICByZXR1cm4ganNTdHJpbmcoJnN0YXRlLCBTdHJpbmcoYnVm
ZmVyLmRhdGEoKSwgbGVuZ3RoKSk7CisgICAgcmV0dXJuIGpzU3RyaW5nKHZtLCBTdHJpbmcoYnVm
ZmVyLmRhdGEoKSwgbGVuZ3RoKSk7CiB9CiAKIEFTQ0lJTGl0ZXJhbCBJbnRsTnVtYmVyRm9ybWF0
OjpzdHlsZVN0cmluZyhTdHlsZSBzdHlsZSkKQEAgLTQxNSwyMiArNDE1LDIyIEBAIEpTT2JqZWN0
KiBJbnRsTnVtYmVyRm9ybWF0OjpyZXNvbHZlZE9wdGkKICAgICB9CiAKICAgICBKU09iamVjdCog
b3B0aW9ucyA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KCZzdGF0ZSk7Ci0gICAgb3B0aW9ucy0+cHV0
RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sb2NhbGUsIGpzU3RyaW5nKCZzdGF0ZSwgbV9s
b2NhbGUpKTsKLSAgICBvcHRpb25zLT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJp
bmcoJnZtLCAibnVtYmVyaW5nU3lzdGVtIiksIGpzU3RyaW5nKCZzdGF0ZSwgbV9udW1iZXJpbmdT
eXN0ZW0pKTsKLSAgICBvcHRpb25zLT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJp
bmcoJnZtLCAic3R5bGUiKSwganNOb250cml2aWFsU3RyaW5nKCZzdGF0ZSwgc3R5bGVTdHJpbmco
bV9zdHlsZSkpKTsKKyAgICBvcHRpb25zLT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMt
PmxvY2FsZSwganNTdHJpbmcodm0sIG1fbG9jYWxlKSk7CisgICAgb3B0aW9ucy0+cHV0RGlyZWN0
KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAibnVtYmVyaW5nU3lzdGVtIiksIGpzU3Ry
aW5nKHZtLCBtX251bWJlcmluZ1N5c3RlbSkpOworICAgIG9wdGlvbnMtPnB1dERpcmVjdCh2bSwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInN0eWxlIiksIGpzTm9udHJpdmlhbFN0cmluZyh2
bSwgc3R5bGVTdHJpbmcobV9zdHlsZSkpKTsKICAgICBpZiAobV9zdHlsZSA9PSBTdHlsZTo6Q3Vy
cmVuY3kpIHsKLSAgICAgICAgb3B0aW9ucy0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKCZ2bSwgImN1cnJlbmN5IiksIGpzTm9udHJpdmlhbFN0cmluZygmc3RhdGUsIG1fY3Vy
cmVuY3kpKTsKLSAgICAgICAgb3B0aW9ucy0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKCZ2bSwgImN1cnJlbmN5RGlzcGxheSIpLCBqc05vbnRyaXZpYWxTdHJpbmcoJnN0YXRl
LCBjdXJyZW5jeURpc3BsYXlTdHJpbmcobV9jdXJyZW5jeURpc3BsYXkpKSk7CisgICAgICAgIG9w
dGlvbnMtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImN1cnJlbmN5
IiksIGpzTm9udHJpdmlhbFN0cmluZyh2bSwgbV9jdXJyZW5jeSkpOworICAgICAgICBvcHRpb25z
LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJjdXJyZW5jeURpc3Bs
YXkiKSwganNOb250cml2aWFsU3RyaW5nKHZtLCBjdXJyZW5jeURpc3BsYXlTdHJpbmcobV9jdXJy
ZW5jeURpc3BsYXkpKSk7CiAgICAgfQotICAgIG9wdGlvbnMtPnB1dERpcmVjdCh2bSwgSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZygmdm0sICJtaW5pbXVtSW50ZWdlckRpZ2l0cyIpLCBqc051bWJlciht
X21pbmltdW1JbnRlZ2VyRGlnaXRzKSk7Ci0gICAgb3B0aW9ucy0+cHV0RGlyZWN0KHZtLCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgIm1pbmltdW1GcmFjdGlvbkRpZ2l0cyIpLCBqc051bWJl
cihtX21pbmltdW1GcmFjdGlvbkRpZ2l0cykpOwotICAgIG9wdGlvbnMtPnB1dERpcmVjdCh2bSwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJtYXhpbXVtRnJhY3Rpb25EaWdpdHMiKSwganNO
dW1iZXIobV9tYXhpbXVtRnJhY3Rpb25EaWdpdHMpKTsKKyAgICBvcHRpb25zLT5wdXREaXJlY3Qo
dm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJtaW5pbXVtSW50ZWdlckRpZ2l0cyIpLCBq
c051bWJlcihtX21pbmltdW1JbnRlZ2VyRGlnaXRzKSk7CisgICAgb3B0aW9ucy0+cHV0RGlyZWN0
KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAibWluaW11bUZyYWN0aW9uRGlnaXRzIiks
IGpzTnVtYmVyKG1fbWluaW11bUZyYWN0aW9uRGlnaXRzKSk7CisgICAgb3B0aW9ucy0+cHV0RGly
ZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAibWF4aW11bUZyYWN0aW9uRGlnaXRz
IiksIGpzTnVtYmVyKG1fbWF4aW11bUZyYWN0aW9uRGlnaXRzKSk7CiAgICAgaWYgKG1fbWluaW11
bVNpZ25pZmljYW50RGlnaXRzKSB7CiAgICAgICAgIEFTU0VSVChtX21heGltdW1TaWduaWZpY2Fu
dERpZ2l0cyk7Ci0gICAgICAgIG9wdGlvbnMtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZygmdm0sICJtaW5pbXVtU2lnbmlmaWNhbnREaWdpdHMiKSwganNOdW1iZXIobV9taW5p
bXVtU2lnbmlmaWNhbnREaWdpdHMpKTsKLSAgICAgICAgb3B0aW9ucy0+cHV0RGlyZWN0KHZtLCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgIm1heGltdW1TaWduaWZpY2FudERpZ2l0cyIpLCBq
c051bWJlcihtX21heGltdW1TaWduaWZpY2FudERpZ2l0cykpOworICAgICAgICBvcHRpb25zLT5w
dXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJtaW5pbXVtU2lnbmlmaWNh
bnREaWdpdHMiKSwganNOdW1iZXIobV9taW5pbXVtU2lnbmlmaWNhbnREaWdpdHMpKTsKKyAgICAg
ICAgb3B0aW9ucy0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAibWF4
aW11bVNpZ25pZmljYW50RGlnaXRzIiksIGpzTnVtYmVyKG1fbWF4aW11bVNpZ25pZmljYW50RGln
aXRzKSk7CiAgICAgfQotICAgIG9wdGlvbnMtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZygmdm0sICJ1c2VHcm91cGluZyIpLCBqc0Jvb2xlYW4obV91c2VHcm91cGluZykpOwor
ICAgIG9wdGlvbnMtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInVz
ZUdyb3VwaW5nIiksIGpzQm9vbGVhbihtX3VzZUdyb3VwaW5nKSk7CiAgICAgcmV0dXJuIG9wdGlv
bnM7CiB9CiAKQEAgLTUzNCw4ICs1MzQsOCBAQCBKU1ZhbHVlIEludGxOdW1iZXJGb3JtYXQ6OmZv
cm1hdFRvUGFydHMoCiAgICAgdW5zaWduZWQgaW5kZXggPSAwOwogCiAgICAgYXV0byByZXN1bHRT
dHJpbmcgPSBTdHJpbmcocmVzdWx0LmRhdGEoKSwgcmVzdWx0TGVuZ3RoKTsKLSAgICBhdXRvIHR5
cGVQcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgInR5cGUiKTsKLSAg
ICBhdXRvIGxpdGVyYWxTdHJpbmcgPSBqc1N0cmluZygmZXhlYywgImxpdGVyYWwiX3MpOworICAg
IGF1dG8gdHlwZVByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJ0eXBl
Iik7CisgICAgYXV0byBsaXRlcmFsU3RyaW5nID0ganNTdHJpbmcodm0sICJsaXRlcmFsIl9zKTsK
IAogICAgIGludDMyX3QgY3VycmVudEluZGV4ID0gMDsKICAgICB3aGlsZSAoY3VycmVudEluZGV4
IDwgcmVzdWx0TGVuZ3RoKSB7CkBAIC01NDMsOCArNTQzLDggQEAgSlNWYWx1ZSBJbnRsTnVtYmVy
Rm9ybWF0Ojpmb3JtYXRUb1BhcnRzKAogICAgICAgICBhdXRvIGZpZWxkVHlwZSA9IGZpZWxkc1tj
dXJyZW50SW5kZXhdLnR5cGU7CiAgICAgICAgIHdoaWxlIChjdXJyZW50SW5kZXggPCByZXN1bHRM
ZW5ndGggJiYgZmllbGRzW2N1cnJlbnRJbmRleF0udHlwZSA9PSBmaWVsZFR5cGUpCiAgICAgICAg
ICAgICArK2N1cnJlbnRJbmRleDsKLSAgICAgICAgYXV0byBwYXJ0VHlwZSA9IGZpZWxkVHlwZSA9
PSBsaXRlcmFsRmllbGRUeXBlID8gbGl0ZXJhbFN0cmluZyA6IGpzU3RyaW5nKCZleGVjLCBwYXJ0
VHlwZVN0cmluZyhVTnVtYmVyRm9ybWF0RmllbGRzKGZpZWxkVHlwZSksIHZhbHVlKSk7Ci0gICAg
ICAgIGF1dG8gcGFydFZhbHVlID0ganNTdWJzdHJpbmcoJnZtLCByZXN1bHRTdHJpbmcsIHN0YXJ0
SW5kZXgsIGN1cnJlbnRJbmRleCAtIHN0YXJ0SW5kZXgpOworICAgICAgICBhdXRvIHBhcnRUeXBl
ID0gZmllbGRUeXBlID09IGxpdGVyYWxGaWVsZFR5cGUgPyBsaXRlcmFsU3RyaW5nIDoganNTdHJp
bmcodm0sIHBhcnRUeXBlU3RyaW5nKFVOdW1iZXJGb3JtYXRGaWVsZHMoZmllbGRUeXBlKSwgdmFs
dWUpKTsKKyAgICAgICAgYXV0byBwYXJ0VmFsdWUgPSBqc1N1YnN0cmluZyh2bSwgcmVzdWx0U3Ry
aW5nLCBzdGFydEluZGV4LCBjdXJyZW50SW5kZXggLSBzdGFydEluZGV4KTsKICAgICAgICAgSlNP
YmplY3QqIHBhcnQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdCgmZXhlYyk7CiAgICAgICAgIHBhcnQt
PnB1dERpcmVjdCh2bSwgdHlwZVByb3BlcnR5TmFtZSwgcGFydFR5cGUpOwogICAgICAgICBwYXJ0
LT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnZhbHVlLCBwYXJ0VmFsdWUpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdFByb3RvdHlw
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51
bWJlckZvcm1hdFByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXRQcm90b3R5cGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxNSBBbmR5IFZh
bldhZ29uZXIgKGFuZHlAdmFud2Fnb25lci5mYW1pbHkpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIw
MTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC04Niw3ICs4Niw3IEBAIHZvaWQgSW50bE51bWJlckZvcm1hdFByb3RvdHlw
ZTo6ZmluaXNoQ3IKICAgICBVTlVTRURfUEFSQU0oZ2xvYmFsT2JqZWN0KTsKICNlbmRpZgogCi0g
ICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPnRvU3Ry
aW5nVGFnU3ltYm9sLCBqc1N0cmluZygmdm0sICJPYmplY3QiKSwgUHJvcGVydHlBdHRyaWJ1dGU6
OkRvbnRFbnVtIHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KTsKKyAgICBwdXREaXJlY3RX
aXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+dG9TdHJpbmdUYWdTeW1ib2ws
IGpzU3RyaW5nKHZtLCAiT2JqZWN0IiksIFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8IFBy
b3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSk7CiB9CiAKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIEludGxOdW1iZXJGb3JtYXRGdW5jRm9ybWF0TnVtYmVyKEV4ZWNTdGF0ZSog
c3RhdGUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsT2JqZWN0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsT2JqZWN0
LmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW50bE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFuZHkgVmFuV2Fnb25lciAoYW5keUB2YW53YWdvbmVyLmZhbWlseSkK
ICAqIENvcHlyaWdodCAoQykgMjAxNSBTdWtvbHNhayBTYWtzaHV3b25nIChzdWtvbHNha0BnbWFp
bC5jb20pCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04MjIsNyArODIyLDcg
QEAgc3RhdGljIEpTQXJyYXkqIGxvb2t1cFN1cHBvcnRlZExvY2FsZXMoRQogICAgICAgICBTdHJp
bmcgbm9FeHRlbnNpb25zTG9jYWxlID0gcmVtb3ZlVW5pY29kZUxvY2FsZUV4dGVuc2lvbihsb2Nh
bGUpOwogICAgICAgICBTdHJpbmcgYXZhaWxhYmxlTG9jYWxlID0gYmVzdEF2YWlsYWJsZUxvY2Fs
ZShhdmFpbGFibGVMb2NhbGVzLCBub0V4dGVuc2lvbnNMb2NhbGUpOwogICAgICAgICBpZiAoIWF2
YWlsYWJsZUxvY2FsZS5pc051bGwoKSkgewotICAgICAgICAgICAgc3Vic2V0LT5wdXREaXJlY3RJ
bmRleCgmc3RhdGUsIGluZGV4KyssIGpzU3RyaW5nKCZzdGF0ZSwgbG9jYWxlKSk7CisgICAgICAg
ICAgICBzdWJzZXQtPnB1dERpcmVjdEluZGV4KCZzdGF0ZSwgaW5kZXgrKywganNTdHJpbmcodm0s
IGxvY2FsZSkpOwogICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0
cik7CiAgICAgICAgIH0KICAgICB9CkBAIC04NTksNyArODU5LDcgQEAgSlNWYWx1ZSBzdXBwb3J0
ZWRMb2NhbGVzKEV4ZWNTdGF0ZSYgc3RhdAogICAgICAgICA6IGxvb2t1cFN1cHBvcnRlZExvY2Fs
ZXMoc3RhdGUsIGF2YWlsYWJsZUxvY2FsZXMsIHJlcXVlc3RlZExvY2FsZXMpOwogICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIEpTVmFsdWUoKSk7CiAKLSAgICBQcm9wZXJ0eU5hbWVBcnJh
eSBrZXlzKCZ2bSwgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5ncywgUHJpdmF0ZVN5bWJvbE1vZGU6
OkV4Y2x1ZGUpOworICAgIFByb3BlcnR5TmFtZUFycmF5IGtleXModm0sIFByb3BlcnR5TmFtZU1v
ZGU6OlN0cmluZ3MsIFByaXZhdGVTeW1ib2xNb2RlOjpFeGNsdWRlKTsKICAgICBzdXBwb3J0ZWRM
b2NhbGVzLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKHN1cHBvcnRlZExvY2FsZXMsICZzdGF0ZSwga2V5
cywgRW51bWVyYXRpb25Nb2RlKCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpT
VmFsdWUoKSk7CiAKQEAgLTkzNyw3ICs5MzcsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGludGxPYmplY3RGCiAgICAgfQogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5n
dGg7ICsraSkgewotICAgICAgICBsb2NhbGVBcnJheS0+cHV0RGlyZWN0SW5kZXgoc3RhdGUsIGks
IGpzU3RyaW5nKHN0YXRlLCBsb2NhbGVMaXN0W2ldKSk7CisgICAgICAgIGxvY2FsZUFycmF5LT5w
dXREaXJlY3RJbmRleChzdGF0ZSwgaSwganNTdHJpbmcodm0sIGxvY2FsZUxpc3RbaV0pKTsKICAg
ICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAg
fQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUobG9jYWxlQXJyYXkpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFBsdXJhbFJ1bGVzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUGx1cmFsUnVsZXMuY3BwCShyZXZp
c2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUGx1cmFs
UnVsZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzQsMzQgKzEzNCwzNCBAQCB2b2lkIEludGxQ
bHVyYWxSdWxlczo6aW5pdGlhbGl6ZVBsdXJhbFJ1CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBTdHJpbmcgdHlwZVN0cmluZyA9IGludGxTdHJpbmdPcHRpb24oZXhlYywgb3B0aW9ucywg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJ0eXBlIiksIHsgImNhcmRpbmFsIiwgIm9yZGlu
YWwiIH0sICJ0eXBlIG11c3QgYmUgXCJjYXJkaW5hbFwiIG9yIFwib3JkaW5hbFwiIiwgImNhcmRp
bmFsIik7CisgICAgU3RyaW5nIHR5cGVTdHJpbmcgPSBpbnRsU3RyaW5nT3B0aW9uKGV4ZWMsIG9w
dGlvbnMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJ0eXBlIiksIHsgImNhcmRpbmFsIiwg
Im9yZGluYWwiIH0sICJ0eXBlIG11c3QgYmUgXCJjYXJkaW5hbFwiIG9yIFwib3JkaW5hbFwiIiwg
ImNhcmRpbmFsIik7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKICAg
ICBtX3R5cGUgPSB0eXBlU3RyaW5nID09ICJvcmRpbmFsIiA/IFVQTFVSQUxfVFlQRV9PUkRJTkFM
IDogVVBMVVJBTF9UWVBFX0NBUkRJTkFMOwogCi0gICAgdW5zaWduZWQgbWluaW11bUludGVnZXJE
aWdpdHMgPSBpbnRsTnVtYmVyT3B0aW9uKGV4ZWMsIG9wdGlvbnMsIElkZW50aWZpZXI6OmZyb21T
dHJpbmcoJnZtLCAibWluaW11bUludGVnZXJEaWdpdHMiKSwgMSwgMjEsIDEpOworICAgIHVuc2ln
bmVkIG1pbmltdW1JbnRlZ2VyRGlnaXRzID0gaW50bE51bWJlck9wdGlvbihleGVjLCBvcHRpb25z
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAibWluaW11bUludGVnZXJEaWdpdHMiKSwgMSwg
MjEsIDEpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAgICAgbV9t
aW5pbXVtSW50ZWdlckRpZ2l0cyA9IG1pbmltdW1JbnRlZ2VyRGlnaXRzOwogCiAgICAgdW5zaWdu
ZWQgbWluaW11bUZyYWN0aW9uRGlnaXRzRGVmYXVsdCA9IDA7Ci0gICAgdW5zaWduZWQgbWluaW11
bUZyYWN0aW9uRGlnaXRzID0gaW50bE51bWJlck9wdGlvbihleGVjLCBvcHRpb25zLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKCZ2bSwgIm1pbmltdW1GcmFjdGlvbkRpZ2l0cyIpLCAwLCAyMCwgbWlu
aW11bUZyYWN0aW9uRGlnaXRzRGVmYXVsdCk7CisgICAgdW5zaWduZWQgbWluaW11bUZyYWN0aW9u
RGlnaXRzID0gaW50bE51bWJlck9wdGlvbihleGVjLCBvcHRpb25zLCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKHZtLCAibWluaW11bUZyYWN0aW9uRGlnaXRzIiksIDAsIDIwLCBtaW5pbXVtRnJhY3Rp
b25EaWdpdHNEZWZhdWx0KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkp
OwogICAgIG1fbWluaW11bUZyYWN0aW9uRGlnaXRzID0gbWluaW11bUZyYWN0aW9uRGlnaXRzOwog
CiAgICAgdW5zaWduZWQgbWF4aW11bUZyYWN0aW9uRGlnaXRzRGVmYXVsdCA9IHN0ZDo6bWF4KG1p
bmltdW1GcmFjdGlvbkRpZ2l0cywgM3UpOwotICAgIHVuc2lnbmVkIG1heGltdW1GcmFjdGlvbkRp
Z2l0cyA9IGludGxOdW1iZXJPcHRpb24oZXhlYywgb3B0aW9ucywgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZygmdm0sICJtYXhpbXVtRnJhY3Rpb25EaWdpdHMiKSwgbWluaW11bUZyYWN0aW9uRGlnaXRz
LCAyMCwgbWF4aW11bUZyYWN0aW9uRGlnaXRzRGVmYXVsdCk7CisgICAgdW5zaWduZWQgbWF4aW11
bUZyYWN0aW9uRGlnaXRzID0gaW50bE51bWJlck9wdGlvbihleGVjLCBvcHRpb25zLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKHZtLCAibWF4aW11bUZyYWN0aW9uRGlnaXRzIiksIG1pbmltdW1GcmFj
dGlvbkRpZ2l0cywgMjAsIG1heGltdW1GcmFjdGlvbkRpZ2l0c0RlZmF1bHQpOwogICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAgICAgbV9tYXhpbXVtRnJhY3Rpb25EaWdp
dHMgPSBtYXhpbXVtRnJhY3Rpb25EaWdpdHM7CiAKLSAgICBKU1ZhbHVlIG1pbmltdW1TaWduaWZp
Y2FudERpZ2l0c1ZhbHVlID0gb3B0aW9ucy0+Z2V0KCZleGVjLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKCZ2bSwgIm1pbmltdW1TaWduaWZpY2FudERpZ2l0cyIpKTsKKyAgICBKU1ZhbHVlIG1pbmlt
dW1TaWduaWZpY2FudERpZ2l0c1ZhbHVlID0gb3B0aW9ucy0+Z2V0KCZleGVjLCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKHZtLCAibWluaW11bVNpZ25pZmljYW50RGlnaXRzIikpOwogICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAKLSAgICBKU1ZhbHVlIG1heGltdW1TaWdu
aWZpY2FudERpZ2l0c1ZhbHVlID0gb3B0aW9ucy0+Z2V0KCZleGVjLCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKCZ2bSwgIm1heGltdW1TaWduaWZpY2FudERpZ2l0cyIpKTsKKyAgICBKU1ZhbHVlIG1h
eGltdW1TaWduaWZpY2FudERpZ2l0c1ZhbHVlID0gb3B0aW9ucy0+Z2V0KCZleGVjLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKHZtLCAibWF4aW11bVNpZ25pZmljYW50RGlnaXRzIikpOwogICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAKICAgICBpZiAoIW1pbmltdW1TaWdu
aWZpY2FudERpZ2l0c1ZhbHVlLmlzVW5kZWZpbmVkKCkgfHwgIW1heGltdW1TaWduaWZpY2FudERp
Z2l0c1ZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKLSAgICAgICAgdW5zaWduZWQgbWluaW11bVNpZ25p
ZmljYW50RGlnaXRzID0gaW50bE51bWJlck9wdGlvbihleGVjLCBvcHRpb25zLCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKCZ2bSwgIm1pbmltdW1TaWduaWZpY2FudERpZ2l0cyIpLCAxLCAyMSwgMSk7
CisgICAgICAgIHVuc2lnbmVkIG1pbmltdW1TaWduaWZpY2FudERpZ2l0cyA9IGludGxOdW1iZXJP
cHRpb24oZXhlYywgb3B0aW9ucywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIm1pbmltdW1T
aWduaWZpY2FudERpZ2l0cyIpLCAxLCAyMSwgMSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIHZvaWQoKSk7Ci0gICAgICAgIHVuc2lnbmVkIG1heGltdW1TaWduaWZpY2FudERp
Z2l0cyA9IGludGxOdW1iZXJPcHRpb24oZXhlYywgb3B0aW9ucywgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZygmdm0sICJtYXhpbXVtU2lnbmlmaWNhbnREaWdpdHMiKSwgbWluaW11bVNpZ25pZmljYW50
RGlnaXRzLCAyMSwgMjEpOworICAgICAgICB1bnNpZ25lZCBtYXhpbXVtU2lnbmlmaWNhbnREaWdp
dHMgPSBpbnRsTnVtYmVyT3B0aW9uKGV4ZWMsIG9wdGlvbnMsIElkZW50aWZpZXI6OmZyb21TdHJp
bmcodm0sICJtYXhpbXVtU2lnbmlmaWNhbnREaWdpdHMiKSwgbWluaW11bVNpZ25pZmljYW50RGln
aXRzLCAyMSwgMjEpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkp
OwogICAgICAgICBtX21pbmltdW1TaWduaWZpY2FudERpZ2l0cyA9IG1pbmltdW1TaWduaWZpY2Fu
dERpZ2l0czsKICAgICAgICAgbV9tYXhpbXVtU2lnbmlmaWNhbnREaWdpdHMgPSBtYXhpbXVtU2ln
bmlmaWNhbnREaWdpdHM7CkBAIC0yMDcsMTQgKzIwNywxNCBAQCBKU09iamVjdCogSW50bFBsdXJh
bFJ1bGVzOjpyZXNvbHZlZE9wdGlvCiAgICAgfQogCiAgICAgSlNPYmplY3QqIG9wdGlvbnMgPSBj
b25zdHJ1Y3RFbXB0eU9iamVjdCgmZXhlYyk7Ci0gICAgb3B0aW9ucy0+cHV0RGlyZWN0KHZtLCB2
bS5wcm9wZXJ0eU5hbWVzLT5sb2NhbGUsIGpzTm9udHJpdmlhbFN0cmluZygmZXhlYywgbV9sb2Nh
bGUpKTsKLSAgICBvcHRpb25zLT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmco
JnZtLCAidHlwZSIpLCBqc05vbnRyaXZpYWxTdHJpbmcoJmV4ZWMsIG1fdHlwZSA9PSBVUExVUkFM
X1RZUEVfT1JESU5BTCA/ICJvcmRpbmFsIl9zIDogImNhcmRpbmFsIl9zKSk7Ci0gICAgb3B0aW9u
cy0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgIm1pbmltdW1JbnRl
Z2VyRGlnaXRzIiksIGpzTnVtYmVyKG1fbWluaW11bUludGVnZXJEaWdpdHMpKTsKLSAgICBvcHRp
b25zLT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAibWluaW11bUZy
YWN0aW9uRGlnaXRzIiksIGpzTnVtYmVyKG1fbWluaW11bUZyYWN0aW9uRGlnaXRzKSk7Ci0gICAg
b3B0aW9ucy0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgIm1heGlt
dW1GcmFjdGlvbkRpZ2l0cyIpLCBqc051bWJlcihtX21heGltdW1GcmFjdGlvbkRpZ2l0cykpOwor
ICAgIG9wdGlvbnMtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bG9jYWxlLCBqc05v
bnRyaXZpYWxTdHJpbmcodm0sIG1fbG9jYWxlKSk7CisgICAgb3B0aW9ucy0+cHV0RGlyZWN0KHZt
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAidHlwZSIpLCBqc05vbnRyaXZpYWxTdHJpbmco
dm0sIG1fdHlwZSA9PSBVUExVUkFMX1RZUEVfT1JESU5BTCA/ICJvcmRpbmFsIl9zIDogImNhcmRp
bmFsIl9zKSk7CisgICAgb3B0aW9ucy0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKHZtLCAibWluaW11bUludGVnZXJEaWdpdHMiKSwganNOdW1iZXIobV9taW5pbXVtSW50ZWdl
ckRpZ2l0cykpOworICAgIG9wdGlvbnMtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZyh2bSwgIm1pbmltdW1GcmFjdGlvbkRpZ2l0cyIpLCBqc051bWJlcihtX21pbmltdW1GcmFj
dGlvbkRpZ2l0cykpOworICAgIG9wdGlvbnMtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyh2bSwgIm1heGltdW1GcmFjdGlvbkRpZ2l0cyIpLCBqc051bWJlcihtX21heGltdW1G
cmFjdGlvbkRpZ2l0cykpOwogICAgIGlmIChtX21pbmltdW1TaWduaWZpY2FudERpZ2l0cykgewot
ICAgICAgICBvcHRpb25zLT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZt
LCAibWluaW11bVNpZ25pZmljYW50RGlnaXRzIiksIGpzTnVtYmVyKG1fbWluaW11bVNpZ25pZmlj
YW50RGlnaXRzLnZhbHVlKCkpKTsKLSAgICAgICAgb3B0aW9ucy0+cHV0RGlyZWN0KHZtLCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgIm1heGltdW1TaWduaWZpY2FudERpZ2l0cyIpLCBqc051
bWJlcihtX21heGltdW1TaWduaWZpY2FudERpZ2l0cy52YWx1ZSgpKSk7CisgICAgICAgIG9wdGlv
bnMtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIm1pbmltdW1TaWdu
aWZpY2FudERpZ2l0cyIpLCBqc051bWJlcihtX21pbmltdW1TaWduaWZpY2FudERpZ2l0cy52YWx1
ZSgpKSk7CisgICAgICAgIG9wdGlvbnMtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZyh2bSwgIm1heGltdW1TaWduaWZpY2FudERpZ2l0cyIpLCBqc051bWJlcihtX21heGltdW1T
aWduaWZpY2FudERpZ2l0cy52YWx1ZSgpKSk7CiAgICAgfQogCiAjaWYgSEFWRShJQ1VfUExVUkFM
UlVMRVNfS0VZV09SRFMpCkBAIC0yMzQsMTAgKzIzNCwxMCBAQCBKU09iamVjdCogSW50bFBsdXJh
bFJ1bGVzOjpyZXNvbHZlZE9wdGlvCiAgICAgdW5zaWduZWQgaW5kZXggPSAwOwogICAgIHdoaWxl
IChjb25zdCBjaGFyKiByZXN1bHQgPSB1ZW51bV9uZXh0KGtleXdvcmRzLmdldCgpLCAmcmVzdWx0
TGVuZ3RoLCAmc3RhdHVzKSkgewogICAgICAgICBBU1NFUlQoVV9TVUNDRVNTKHN0YXR1cykpOwot
ICAgICAgICBjYXRlZ29yaWVzLT5wdXREaXJlY3RJbmRleCgmZXhlYywgaW5kZXgrKywganNOb250
cml2aWFsU3RyaW5nKCZleGVjLCBTdHJpbmcocmVzdWx0LCByZXN1bHRMZW5ndGgpKSk7CisgICAg
ICAgIGNhdGVnb3JpZXMtPnB1dERpcmVjdEluZGV4KCZleGVjLCBpbmRleCsrLCBqc05vbnRyaXZp
YWxTdHJpbmcodm0sIFN0cmluZyhyZXN1bHQsIHJlc3VsdExlbmd0aCkpKTsKICAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICB9Ci0gICAgb3B0aW9ucy0+cHV0RGly
ZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgInBsdXJhbENhdGVnb3JpZXMiKSwg
Y2F0ZWdvcmllcyk7CisgICAgb3B0aW9ucy0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKHZtLCAicGx1cmFsQ2F0ZWdvcmllcyIpLCBjYXRlZ29yaWVzKTsKICNlbmRpZgogCiAg
ICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBvcHRpb25zKTsKQEAgLTI1NCw3ICsyNTQsNyBA
QCBKU1ZhbHVlIEludGxQbHVyYWxSdWxlczo6c2VsZWN0KEV4ZWNTdGF0CiAgICAgICAgIHJldHVy
biB0aHJvd1R5cGVFcnJvcigmZXhlYywgc2NvcGUsICJJbnRsLlBsdXJhbFJ1bGVzLnByb3RvdHlw
ZS5zZWxlY3QgY2FsbGVkIG9uIHZhbHVlIHRoYXQncyBub3QgYW4gb2JqZWN0IGluaXRpYWxpemVk
IGFzIGEgUGx1cmFsUnVsZXMiX3MpOwogCiAgICAgaWYgKCFzdGQ6OmlzZmluaXRlKHZhbHVlKSkK
LSAgICAgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZygmZXhlYywgIm90aGVyIl9zKTsKKyAg
ICAgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyh2bSwgIm90aGVyIl9zKTsKIAogI2lmIEhB
VkUoSUNVX1BMVVJBTFJVTEVTX1dJVEhfRk9STUFUKQogICAgIFVFcnJvckNvZGUgc3RhdHVzID0g
VV9aRVJPX0VSUk9SOwpAQCAtMjg2LDcgKzI4Niw3IEBAIEpTVmFsdWUgSW50bFBsdXJhbFJ1bGVz
OjpzZWxlY3QoRXhlY1N0YXQKICAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKCZleGVjLCBz
Y29wZSwgImZhaWxlZCB0byBzZWxlY3QgcGx1cmFsIHZhbHVlIl9zKTsKICNlbmRpZgogCi0gICAg
cmV0dXJuIGpzU3RyaW5nKCZleGVjLCBTdHJpbmcocmVzdWx0LmRhdGEoKSwgbGVuZ3RoKSk7Cisg
ICAgcmV0dXJuIGpzU3RyaW5nKHZtLCBTdHJpbmcocmVzdWx0LmRhdGEoKSwgbGVuZ3RoKSk7CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSW50bFBsdXJhbFJ1bGVzUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUGx1cmFsUnVsZXNQcm90b3R5cGUuY3BwCShyZXZpc2lv
biAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUGx1cmFsUnVs
ZXNQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENv
cHlyaWdodCAoQykgMjAxOCBBbmR5IFZhbldhZ29uZXIgKGFuZHlAdmFud2Fnb25lci5mYW1pbHkp
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03NCw3ICs3NSw3IEBAIHZvaWQgSW50
bFBsdXJhbFJ1bGVzUHJvdG90eXBlOjpmaW5pc2hDcmUKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVh
dGlvbih2bSk7CiAKLSAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVy
dHlOYW1lcy0+dG9TdHJpbmdUYWdTeW1ib2wsIGpzU3RyaW5nKCZ2bSwgIk9iamVjdCIpLCBQcm9w
ZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpOwor
ICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT50b1N0
cmluZ1RhZ1N5bWJvbCwganNTdHJpbmcodm0sICJPYmplY3QiKSwgUHJvcGVydHlBdHRyaWJ1dGU6
OkRvbnRFbnVtIHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KTsKIH0KIAogRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBJbnRsUGx1cmFsUnVsZXNQcm90b3R5cGVGdW5jU2VsZWN0KEV4
ZWNTdGF0ZSogc3RhdGUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Fy
cmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJh
eS5oCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0FycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdo
dCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29weXJp
Z2h0IChDKSAyMDAzLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENv
cHlyaWdodCAoQykgMjAwMy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTI4OSw3ICsyODksNyBAQCBKU0FycmF5KiBhc0FycmF5KEpT
VmFsdWUpOwogCiBpbmxpbmUgSlNBcnJheSogYXNBcnJheShKU0NlbGwqIGNlbGwpCiB7Ci0gICAg
QVNTRVJUKGNlbGwtPmluaGVyaXRzPEpTQXJyYXk+KCpjZWxsLT52bSgpKSk7CisgICAgQVNTRVJU
KGNlbGwtPmluaGVyaXRzPEpTQXJyYXk+KGNlbGwtPnZtKCkpKTsKICAgICByZXR1cm4ganNDYXN0
PEpTQXJyYXkqPihjZWxsKTsKIH0KIApAQCAtMzAwLDcgKzMwMCw3IEBAIGlubGluZSBKU0FycmF5
KiBhc0FycmF5KEpTVmFsdWUgdmFsdWUpCiAKIGlubGluZSBib29sIGlzSlNBcnJheShKU0NlbGwq
IGNlbGwpCiB7Ci0gICAgQVNTRVJUKChjZWxsLT5jbGFzc0luZm8oKmNlbGwtPnZtKCkpID09IEpT
QXJyYXk6OmluZm8oKSkgPT0gKGNlbGwtPnR5cGUoKSA9PSBBcnJheVR5cGUpKTsKKyAgICBBU1NF
UlQoKGNlbGwtPmNsYXNzSW5mbyhjZWxsLT52bSgpKSA9PSBKU0FycmF5OjppbmZvKCkpID09IChj
ZWxsLT50eXBlKCkgPT0gQXJyYXlUeXBlKSk7CiAgICAgcmV0dXJuIGNlbGwtPnR5cGUoKSA9PSBB
cnJheVR5cGU7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJy
YXlCdWZmZXJQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyUHJvdG90eXBlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0xMTYsNyArMTE2LDcgQEAgdm9pZCBKU0FycmF5QnVmZmVy
UHJvdG90eXBlOjpmaW5pc2hDcmVhdAogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAg
ICAKICAgICBKU0NfTkFUSVZFX0ZVTkNUSU9OX1dJVEhPVVRfVFJBTlNJVElPTih2bS5wcm9wZXJ0
eU5hbWVzLT5zbGljZSwgYXJyYXlCdWZmZXJQcm90b0Z1bmNTbGljZSwgc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSksIDIpOwotICAgIHB1dERpcmVjdFdp
dGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT50b1N0cmluZ1RhZ1N5bWJvbCwg
anNTdHJpbmcoJnZtLCBhcnJheUJ1ZmZlclNoYXJpbmdNb2RlTmFtZShtX3NoYXJpbmdNb2RlKSks
IFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25s
eSk7CisgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMt
PnRvU3RyaW5nVGFnU3ltYm9sLCBqc1N0cmluZyh2bSwgYXJyYXlCdWZmZXJTaGFyaW5nTW9kZU5h
bWUobV9zaGFyaW5nTW9kZSkpLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBQcm9wZXJ0
eUF0dHJpYnV0ZTo6UmVhZE9ubHkpOwogICAgIGlmIChtX3NoYXJpbmdNb2RlID09IEFycmF5QnVm
ZmVyU2hhcmluZ01vZGU6OkRlZmF1bHQpCiAgICAgICAgIEpTQ19OQVRJVkVfR0VUVEVSX1dJVEhP
VVRfVFJBTlNJVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5ieXRlTGVuZ3RoLCBhcnJheUJ1ZmZlclBy
b3RvR2V0dGVyRnVuY0J5dGVMZW5ndGgsIFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8IFBy
b3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSk7CiAgICAgZWxzZQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmNwcAkocmV2aXNp
b24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZl
clZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTYsNyArMjU2LDcgQEAgQXJyYXlCdWZmZXIq
IEpTQXJyYXlCdWZmZXJWaWV3OjpzbG93RG93bgogICAgIC8vIHVwLiBCdXQgaWYgeW91IGRvICph
bnl0aGluZyogdG8gdHJpZ2dlciBhIEdDIHdhdGVybWFyayBjaGVjaywgaXQgd2lsbCBrbm93CiAg
ICAgLy8gdGhhdCB5b3UgKmhhZCogZG9uZSB0aG9zZSBhbGxvY2F0aW9ucyBhbmQgaXQgd2lsbCBH
QyBhcHByb3ByaWF0ZWx5LgogICAgIEhlYXAqIGhlYXAgPSBIZWFwOjpoZWFwKHRoaXMpOwotICAg
IFZNJiB2bSA9ICpoZWFwLT52bSgpOworICAgIFZNJiB2bSA9IGhlYXAtPnZtKCk7CiAgICAgRGVm
ZXJHQ0ZvckFXaGlsZSBkZWZlckdDKCpoZWFwKTsKIAogICAgIFJFTEVBU0VfQVNTRVJUKCFoYXNJ
bmRleGluZ0hlYWRlcih2bSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNDSlNWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNDSlNWYWx1ZS5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBA
QAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBr
ZGUub3JnKQogICogIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29t
KQotICogIENvcHlyaWdodCAoQykgMjAwMy0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjE1LDcgKzIxNSw3IEBAIGJvb2wg
SlNWYWx1ZTo6cHV0VG9QcmltaXRpdmVCeUluZGV4KEV4ZWMKIAogICAgIGlmIChwcm9wZXJ0eU5h
bWUgPiBNQVhfQVJSQVlfSU5ERVgpIHsKICAgICAgICAgUHV0UHJvcGVydHlTbG90IHNsb3QoKnRo
aXMsIHNob3VsZFRocm93KTsKLSAgICAgICAgcmV0dXJuIHB1dFRvUHJpbWl0aXZlKGV4ZWMsIElk
ZW50aWZpZXI6OmZyb20oZXhlYywgcHJvcGVydHlOYW1lKSwgdmFsdWUsIHNsb3QpOworICAgICAg
ICByZXR1cm4gcHV0VG9QcmltaXRpdmUoZXhlYywgSWRlbnRpZmllcjo6ZnJvbSh2bSwgcHJvcGVy
dHlOYW1lKSwgdmFsdWUsIHNsb3QpOwogICAgIH0KICAgICAKICAgICBKU09iamVjdCogcHJvdG90
eXBlID0gc3ludGhlc2l6ZVByb3RvdHlwZShleGVjKTsKQEAgLTMxNSw3ICszMTUsNyBAQCB2b2lk
IEpTVmFsdWU6OmR1bXBGb3JCYWNrdHJhY2UoUHJpbnRTdHJlCiAgICAgZWxzZSBpZiAoaXNEb3Vi
bGUoKSkKICAgICAgICAgb3V0LnByaW50ZigiJWxmIiwgYXNEb3VibGUoKSk7CiAgICAgZWxzZSBp
ZiAoaXNDZWxsKCkpIHsKLSAgICAgICAgVk0mIHZtID0gKmFzQ2VsbCgpLT52bSgpOworICAgICAg
ICBWTSYgdm0gPSBhc0NlbGwoKS0+dm0oKTsKICAgICAgICAgaWYgKGFzQ2VsbCgpLT5pbmhlcml0
czxKU1N0cmluZz4odm0pKSB7CiAgICAgICAgICAgICBKU1N0cmluZyogc3RyaW5nID0gYXNTdHJp
bmcoYXNDZWxsKCkpOwogICAgICAgICAgICAgY29uc3QgU3RyaW5nSW1wbCogaW1wbCA9IHN0cmlu
Zy0+dHJ5R2V0VmFsdWVJbXBsKCk7CkBAIC0zNjAsNyArMzYwLDcgQEAgSlNTdHJpbmcqIEpTVmFs
dWU6OnRvU3RyaW5nU2xvd0Nhc2UoRXhlYwogCiAgICAgYXV0byBlcnJvclZhbHVlID0gWyZdICgp
IC0+IEpTU3RyaW5nKiB7CiAgICAgICAgIGlmIChyZXR1cm5FbXB0eVN0cmluZ09uRXJyb3IpCi0g
ICAgICAgICAgICByZXR1cm4ganNFbXB0eVN0cmluZyhleGVjKTsKKyAgICAgICAgICAgIHJldHVy
biBqc0VtcHR5U3RyaW5nKHZtKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfTsKICAg
ICAKQEAgLTM2OSwxMCArMzY5LDEwIEBAIEpTU3RyaW5nKiBKU1ZhbHVlOjp0b1N0cmluZ1Nsb3dD
YXNlKEV4ZWMKICAgICAgICAgYXV0byBpbnRlZ2VyID0gYXNJbnQzMigpOwogICAgICAgICBpZiAo
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGludGVnZXIpIDw9IDkpCiAgICAgICAgICAgICByZXR1cm4g
dm0uc21hbGxTdHJpbmdzLnNpbmdsZUNoYXJhY3RlclN0cmluZyhpbnRlZ2VyICsgJzAnKTsKLSAg
ICAgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZygmdm0sIHZtLm51bWVyaWNTdHJpbmdzLmFk
ZChpbnRlZ2VyKSk7CisgICAgICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcodm0sIHZtLm51
bWVyaWNTdHJpbmdzLmFkZChpbnRlZ2VyKSk7CiAgICAgfQogICAgIGlmIChpc0RvdWJsZSgpKQot
ICAgICAgICByZXR1cm4ganNTdHJpbmcoJnZtLCB2bS5udW1lcmljU3RyaW5ncy5hZGQoYXNEb3Vi
bGUoKSkpOworICAgICAgICByZXR1cm4ganNTdHJpbmcodm0sIHZtLm51bWVyaWNTdHJpbmdzLmFk
ZChhc0RvdWJsZSgpKSk7CiAgICAgaWYgKGlzVHJ1ZSgpKQogICAgICAgICByZXR1cm4gdm0uc21h
bGxTdHJpbmdzLnRydWVTdHJpbmcoKTsKICAgICBpZiAoaXNGYWxzZSgpKQpAQCAtMzg5LDcgKzM4
OSw3IEBAIEpTU3RyaW5nKiBKU1ZhbHVlOjp0b1N0cmluZ1Nsb3dDYXNlKEV4ZWMKICAgICAgICAg
SlNCaWdJbnQqIGJpZ0ludCA9IGFzQmlnSW50KCp0aGlzKTsKICAgICAgICAgaWYgKGF1dG8gZGln
aXQgPSBiaWdJbnQtPnNpbmdsZURpZ2l0VmFsdWVGb3JTdHJpbmcoKSkKICAgICAgICAgICAgIHJl
dHVybiB2bS5zbWFsbFN0cmluZ3Muc2luZ2xlQ2hhcmFjdGVyU3RyaW5nKCpkaWdpdCArICcwJyk7
Ci0gICAgICAgIEpTU3RyaW5nKiByZXR1cm5TdHJpbmcgPSBqc05vbnRyaXZpYWxTdHJpbmcoJnZt
LCBiaWdJbnQtPnRvU3RyaW5nKGV4ZWMsIDEwKSk7CisgICAgICAgIEpTU3RyaW5nKiByZXR1cm5T
dHJpbmcgPSBqc05vbnRyaXZpYWxTdHJpbmcodm0sIGJpZ0ludC0+dG9TdHJpbmcoZXhlYywgMTAp
KTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZXJyb3JWYWx1ZSgpKTsKICAg
ICAgICAgcmV0dXJuIHJldHVyblN0cmluZzsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0NKU1ZhbHVlSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWVJbmxpbmVzLmgJKHJldmlzaW9uIDI0OTEy
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWVJbmxpbmVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEx
LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDExLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC05NjUsNyArOTY1LDcgQEAgQUxXQVlTX0lOTElORSBKU1ZhbHVl
IEpTVmFsdWU6OmdldChFeGVjUwogewogICAgIGlmIChMSUtFTFkocHJvcGVydHlOYW1lIDw9IHN0
ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSkpCiAgICAgICAgIHJldHVybiBnZXQo
ZXhlYywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHByb3BlcnR5TmFtZSkpOwotICAgIHJldHVybiBn
ZXQoZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBzdGF0aWNfY2FzdDxkb3VibGU+KHByb3Bl
cnR5TmFtZSkpKTsKKyAgICByZXR1cm4gZ2V0KGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYy0+
dm0oKSwgc3RhdGljX2Nhc3Q8ZG91YmxlPihwcm9wZXJ0eU5hbWUpKSk7CiB9CiAKIGlubGluZSBi
b29sIEpTVmFsdWU6OnB1dChFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5h
bWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2FzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQ2FzdC5oCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Nhc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyAr
MzMsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUbywgdHlwZW5hbWUgRnJvbT4KIGlubGluZSBUbyBq
c0Nhc3QoRnJvbSogZnJvbSkKIHsKICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZjxK
U0NlbGwsIHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX3BvaW50ZXI8VG8+Ojp0eXBlPjo6dmFsdWUgJiYg
c3RkOjppc19iYXNlX29mPEpTQ2VsbCwgdHlwZW5hbWUgc3RkOjpyZW1vdmVfcG9pbnRlcjxGcm9t
Pjo6dHlwZT46OnZhbHVlLCAiSlMgY2FzdGluZyBleHBlY3RzIHRoYXQgdGhlIHR5cGVzIHlvdSBh
cmUgY2FzdGluZyB0by9mcm9tIGFyZSBzdWJjbGFzc2VzIG9mIEpTQ2VsbCIpOwotICAgIEFTU0VS
VF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKCFmcm9tIHx8IGZyb20tPkpTQ2VsbDo6aW5oZXJp
dHMoKmZyb20tPkpTQ2VsbDo6dm0oKSwgc3RkOjpyZW1vdmVfcG9pbnRlcjxUbz46OnR5cGU6Omlu
Zm8oKSkpOworICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKCFmcm9tIHx8IGZy
b20tPkpTQ2VsbDo6aW5oZXJpdHMoZnJvbS0+SlNDZWxsOjp2bSgpLCBzdGQ6OnJlbW92ZV9wb2lu
dGVyPFRvPjo6dHlwZTo6aW5mbygpKSk7CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFRvPihmcm9t
KTsKIH0KIApAQCAtNDEsNyArNDEsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUbz4KIGlubGluZSBU
byBqc0Nhc3QoSlNWYWx1ZSBmcm9tKQogewogICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNl
X29mPEpTQ2VsbCwgdHlwZW5hbWUgc3RkOjpyZW1vdmVfcG9pbnRlcjxUbz46OnR5cGU+Ojp2YWx1
ZSwgIkpTIGNhc3RpbmcgZXhwZWN0cyB0aGF0IHRoZSB0eXBlcyB5b3UgYXJlIGNhc3RpbmcgdG8g
aXMgYSBzdWJjbGFzcyBvZiBKU0NlbGwiKTsKLSAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBM
SUNBVElPTihmcm9tLmlzQ2VsbCgpICYmIGZyb20uYXNDZWxsKCktPkpTQ2VsbDo6aW5oZXJpdHMo
KmZyb20uYXNDZWxsKCktPnZtKCksIHN0ZDo6cmVtb3ZlX3BvaW50ZXI8VG8+Ojp0eXBlOjppbmZv
KCkpKTsKKyAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihmcm9tLmlzQ2VsbCgp
ICYmIGZyb20uYXNDZWxsKCktPkpTQ2VsbDo6aW5oZXJpdHMoZnJvbS5hc0NlbGwoKS0+dm0oKSwg
c3RkOjpyZW1vdmVfcG9pbnRlcjxUbz46OnR5cGU6OmluZm8oKSkpOwogICAgIHJldHVybiBzdGF0
aWNfY2FzdDxUbz4oZnJvbS5hc0NlbGwoKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQ2VsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNDZWxsLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcg
QEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEgSGFycmkgUG9ydGVuIChwb3J0ZW5A
a2RlLm9yZykKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNv
bSkKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTQ2LDEyICs0NiwxMiBAQCB2b2lk
IEpTQ2VsbDo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCiAKIHZvaWQgSlNDZWxsOjpkdW1wKFByaW50
U3RyZWFtJiBvdXQpIGNvbnN0CiB7Ci0gICAgbWV0aG9kVGFibGUoKnZtKCkpLT5kdW1wVG9TdHJl
YW0odGhpcywgb3V0KTsKKyAgICBtZXRob2RUYWJsZSh2bSgpKS0+ZHVtcFRvU3RyZWFtKHRoaXMs
IG91dCk7CiB9CiAKIHZvaWQgSlNDZWxsOjpkdW1wVG9TdHJlYW0oY29uc3QgSlNDZWxsKiBjZWxs
LCBQcmludFN0cmVhbSYgb3V0KQogewotICAgIG91dC5wcmludGYoIjwlcCwgJXM+IiwgY2VsbCwg
Y2VsbC0+Y2xhc3NOYW1lKCpjZWxsLT52bSgpKSk7CisgICAgb3V0LnByaW50ZigiPCVwLCAlcz4i
LCBjZWxsLCBjZWxsLT5jbGFzc05hbWUoY2VsbC0+dm0oKSkpOwogfQogCiBzaXplX3QgSlNDZWxs
Ojplc3RpbWF0ZWRTaXplSW5CeXRlcyhWTSYgdm0pIGNvbnN0CkBAIC0xMTgsMTIgKzExOCwxMyBA
QCBib29sIEpTQ2VsbDo6cHV0KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlCiAKIGJvb2wgSlNDZWxs
OjpwdXRCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpZGVu
dGlmaWVyLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93KQogeworICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7CiAgICAgaWYgKGNlbGwtPmlzU3RyaW5nKCkgfHwgY2VsbC0+aXNTeW1ib2wo
KSB8fCBjZWxsLT5pc0JpZ0ludCgpKSB7CiAgICAgICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KGNl
bGwsIHNob3VsZFRocm93KTsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWUoY2VsbCkucHV0VG9Qcmlt
aXRpdmUoZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpZGVudGlmaWVyKSwgdmFsdWUsIHNs
b3QpOworICAgICAgICByZXR1cm4gSlNWYWx1ZShjZWxsKS5wdXRUb1ByaW1pdGl2ZShleGVjLCBJ
ZGVudGlmaWVyOjpmcm9tKHZtLCBpZGVudGlmaWVyKSwgdmFsdWUsIHNsb3QpOwogICAgIH0KICAg
ICBKU09iamVjdCogdGhpc09iamVjdCA9IGNlbGwtPnRvT2JqZWN0KGV4ZWMsIGV4ZWMtPmxleGlj
YWxHbG9iYWxPYmplY3QoKSk7Ci0gICAgcmV0dXJuIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKGV4
ZWMtPnZtKCkpLT5wdXRCeUluZGV4KHRoaXNPYmplY3QsIGV4ZWMsIGlkZW50aWZpZXIsIHZhbHVl
LCBzaG91bGRUaHJvdyk7CisgICAgcmV0dXJuIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+
cHV0QnlJbmRleCh0aGlzT2JqZWN0LCBleGVjLCBpZGVudGlmaWVyLCB2YWx1ZSwgc2hvdWxkVGhy
b3cpOwogfQogCiBib29sIEpTQ2VsbDo6ZGVsZXRlUHJvcGVydHkoSlNDZWxsKiBjZWxsLCBFeGVj
U3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBpZGVudGlmaWVyKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbElubGluZXMuaAkocmV2aXNpb24gMjQ5MTI4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsSW5saW5lcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xMjEsNyArMTIxLDcgQEAgaW5saW5lIEluZGV4aW5nVHlwZSBKU0NlbGw6Omlu
ZGV4aW5nTW9kZQogCiBBTFdBWVNfSU5MSU5FIFN0cnVjdHVyZSogSlNDZWxsOjpzdHJ1Y3R1cmUo
KSBjb25zdAogewotICAgIHJldHVybiBzdHJ1Y3R1cmUoKnZtKCkpOworICAgIHJldHVybiBzdHJ1
Y3R1cmUodm0oKSk7CiB9CiAKIEFMV0FZU19JTkxJTkUgU3RydWN0dXJlKiBKU0NlbGw6OnN0cnVj
dHVyZShWTSYgdm0pIGNvbnN0CkBAIC0xNDIsMTAgKzE0MiwxMCBAQCBBTFdBWVNfSU5MSU5FIFZN
JiBFeGVjU3RhdGU6OnZtKCkgY29uc3QKIHsKICAgICBKU0NlbGwqIGNhbGxlZSA9IHRoaXMtPmNh
bGxlZSgpLmFzQ2VsbCgpOwogICAgIEFTU0VSVChjYWxsZWUpOwotICAgIEFTU0VSVChjYWxsZWUt
PnZtKCkpOworICAgIEFTU0VSVCgmY2FsbGVlLT52bSgpKTsKICAgICBBU1NFUlQoIWNhbGxlZS0+
aXNMYXJnZUFsbG9jYXRpb24oKSk7CiAgICAgLy8gVGhpcyBpcyBhbiBpbXBvcnRhbnQgb3B0aW1p
emF0aW9uIHNpbmNlIHdlIGFjY2VzcyB0aGlzIHNvIG9mdGVuLgotICAgIHJldHVybiAqY2FsbGVl
LT5tYXJrZWRCbG9jaygpLnZtKCk7CisgICAgcmV0dXJuIGNhbGxlZS0+bWFya2VkQmxvY2soKS52
bSgpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+CkBA
IC0xNjcsNyArMTY3LDcgQEAgaW5saW5lIEFsbG9jYXRvciBhbGxvY2F0b3JGb3JOb25WaXJ0dWFs
QwogdGVtcGxhdGU8dHlwZW5hbWUgVD4KIEFMV0FZU19JTkxJTkUgdm9pZCogdHJ5QWxsb2NhdGVD
ZWxsSGVscGVyKEhlYXAmIGhlYXAsIHNpemVfdCBzaXplLCBHQ0RlZmVycmFsQ29udGV4dCogZGVm
ZXJyYWxDb250ZXh0LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUgZmFpbHVyZU1vZGUpCiB7Ci0gICAg
Vk0mIHZtID0gKmhlYXAudm0oKTsKKyAgICBWTSYgdm0gPSBoZWFwLnZtKCk7CiAgICAgQVNTRVJU
KGRlZmVycmFsQ29udGV4dCB8fCAhRGlzYWxsb3dHQzo6aXNJbkVmZmVjdE9uQ3VycmVudFRocmVh
ZCgpKTsKICAgICBBU1NFUlQoc2l6ZSA+PSBzaXplb2YoVCkpOwogICAgIEpTQ2VsbCogcmVzdWx0
ID0gc3RhdGljX2Nhc3Q8SlNDZWxsKj4oc3Vic3BhY2VGb3I8VD4odm0pLT5hbGxvY2F0ZU5vblZp
cnR1YWwodm0sIHNpemUsIGRlZmVycmFsQ29udGV4dCwgZmFpbHVyZU1vZGUpKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGF0YVZpZXdQcm90b3R5cGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGF0YVZpZXdQcm90b3R5
cGUuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0RhdGFWaWV3UHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMDksNyArMTA5
LDcgQEAgSlNEYXRhVmlld1Byb3RvdHlwZSogSlNEYXRhVmlld1Byb3RvdHlwZQogdm9pZCBKU0Rh
dGFWaWV3UHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbihKU0M6OlZNJiB2bSkKIHsKICAgICBCYXNl
OjpmaW5pc2hDcmVhdGlvbih2bSk7Ci0gICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0s
IHZtLnByb3BlcnR5TmFtZXMtPnRvU3RyaW5nVGFnU3ltYm9sLCBqc1N0cmluZygmdm0sICJEYXRh
VmlldyIpLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6
UmVhZE9ubHkpOworICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0
eU5hbWVzLT50b1N0cmluZ1RhZ1N5bWJvbCwganNTdHJpbmcodm0sICJEYXRhVmlldyIpLCBQcm9w
ZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpOwog
fQogCiBTdHJ1Y3R1cmUqIEpTRGF0YVZpZXdQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSgKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRml4ZWRBcnJheS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGaXhlZEFycmF5LmNwcAko
cmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGaXhl
ZEFycmF5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01NCw3ICs1NCw3IEBAIHZvaWQgSlNGaXhlZEFycmF5
Ojpjb3B5VG9Bcmd1bWVudHMoRXhlY1MKIAogdm9pZCBKU0ZpeGVkQXJyYXk6OmR1bXBUb1N0cmVh
bShjb25zdCBKU0NlbGwqIGNlbGwsIFByaW50U3RyZWFtJiBvdXQpCiB7Ci0gICAgVk0mIHZtID0g
KmNlbGwtPnZtKCk7CisgICAgVk0mIHZtID0gY2VsbC0+dm0oKTsKICAgICBjb25zdCBhdXRvKiB0
aGlzT2JqZWN0ID0ganNDYXN0PGNvbnN0IEpTRml4ZWRBcnJheSo+KGNlbGwpOwogICAgIG91dC5w
cmludGYoIjwlcCwgJXMsIFsldV0sIFsiLCB0aGlzT2JqZWN0LCB0aGlzT2JqZWN0LT5jbGFzc05h
bWUodm0pLCB0aGlzT2JqZWN0LT5sZW5ndGgoKSk7CiAgICAgQ29tbWFQcmludGVyIGNvbW1hOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAJKHJl
dmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rp
b24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBDb3B5cmlnaHQg
KEMpIDE5OTktMjAwMiBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICogIENvcHlyaWdo
dCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICogIENvcHlyaWdodCAoQykg
MjAwMy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQg
KEMpIDIwMDMtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAgQ29weXJp
Z2h0IChDKSAyMDA3IENhbWVyb24gWndhcmljaCAoY3d6d2FyaWNoQHV3YXRlcmxvby5jYSkKICAq
ICBDb3B5cmlnaHQgKEMpIDIwMDcgTWFrcyBPcmxvdmljaAogICogIENvcHlyaWdodCAoQykgMjAx
NSBDYW5vbiBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCkBAIC0xMzksNyArMTM5LDcgQEAgdm9p
ZCBKU0Z1bmN0aW9uOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIAogICAgIG1fZXhlY3V0YWJsZS5z
ZXQodm0sIHRoaXMsIGV4ZWN1dGFibGUpOwogICAgIC8vIFNvbWUgTmF0aXZlRXhlY3V0YWJsZSBm
dW5jdGlvbnMsIGxpa2UgSlNCb3VuZEZ1bmN0aW9uLCBkZWNpZGUgdG8gbGF6aWx5IGFsbG9jYXRl
IHRoZWlyIG5hbWUgc3RyaW5nLgogICAgIGlmICghbmFtZS5pc051bGwoKSkKLSAgICAgICAgcHV0
RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc1N0cmluZygmdm0sIG5hbWUpLCBQ
cm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0p
OworICAgICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzU3RyaW5n
KHZtLCBuYW1lKSwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgUHJvcGVydHlBdHRyaWJ1
dGU6OkRvbnRFbnVtKTsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0
aCwganNOdW1iZXIobGVuZ3RoKSwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgUHJvcGVy
dHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKIH0KIApAQCAtMzM0LDcgKzMzNCw3IEBAIHB1YmxpYzoK
IAogICAgICAgICBKU0NlbGwqIGNhbGxlZSA9IHZpc2l0b3ItPmNhbGxlZSgpLmFzQ2VsbCgpOwog
Ci0gICAgICAgIGlmIChjYWxsZWUgJiYgY2FsbGVlLT5pbmhlcml0czxKU0JvdW5kRnVuY3Rpb24+
KCpjYWxsZWUtPnZtKCkpKQorICAgICAgICBpZiAoY2FsbGVlICYmIGNhbGxlZS0+aW5oZXJpdHM8
SlNCb3VuZEZ1bmN0aW9uPihjYWxsZWUtPnZtKCkpKQogICAgICAgICAgICAgcmV0dXJuIFN0YWNr
VmlzaXRvcjo6Q29udGludWU7CiAKICAgICAgICAgaWYgKCFtX2hhc0ZvdW5kRnJhbWUgJiYgKGNh
bGxlZSAhPSBtX3RhcmdldENhbGxlZSkpCkBAIC03NTIsNyArNzUyLDcgQEAgdm9pZCBKU0Z1bmN0
aW9uOjpyZWlmeU5hbWUoVk0mIHZtLCBFeGVjUwogICAgICAgICBuYW1lID0gbWFrZVN0cmluZygi
c2V0ICIsIG5hbWUpOwogCiAgICAgcmFyZURhdGEtPnNldEhhc1JlaWZpZWROYW1lKCk7Ci0gICAg
cHV0RGlyZWN0KHZtLCBwcm9wSUQsIGpzU3RyaW5nKGV4ZWMsIG5hbWUpLCBpbml0aWFsQXR0cmli
dXRlcyk7CisgICAgcHV0RGlyZWN0KHZtLCBwcm9wSUQsIGpzU3RyaW5nKHZtLCBuYW1lKSwgaW5p
dGlhbEF0dHJpYnV0ZXMpOwogfQogCiBKU0Z1bmN0aW9uOjpQcm9wZXJ0eVN0YXR1cyBKU0Z1bmN0
aW9uOjpyZWlmeUxhenlQcm9wZXJ0eUlmTmVlZGVkKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBQ
cm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQpAQCAtODE5LDcgKzgxOSw3IEBAIEpTRnVuY3Rpb246
OlByb3BlcnR5U3RhdHVzIEpTRnVuY3Rpb246OnIKICAgICAgICAgU3RyaW5nIG5hbWUgPSBtYWtl
U3RyaW5nKCJib3VuZCAiLCBzdGF0aWNfY2FzdDxOYXRpdmVFeGVjdXRhYmxlKj4obV9leGVjdXRh
YmxlLmdldCgpKS0+bmFtZSgpKTsKICAgICAgICAgdW5zaWduZWQgaW5pdGlhbEF0dHJpYnV0ZXMg
PSBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9u
bHk7CiAgICAgICAgIHJhcmVEYXRhLT5zZXRIYXNSZWlmaWVkTmFtZSgpOwotICAgICAgICBwdXRE
aXJlY3Qodm0sIG5hbWVJZGVudCwganNTdHJpbmcoZXhlYywgbmFtZSksIGluaXRpYWxBdHRyaWJ1
dGVzKTsKKyAgICAgICAgcHV0RGlyZWN0KHZtLCBuYW1lSWRlbnQsIGpzU3RyaW5nKHZtLCBuYW1l
KSwgaW5pdGlhbEF0dHJpYnV0ZXMpOwogICAgIH0KICAgICByZXR1cm4gUHJvcGVydHlTdGF0dXM6
OlJlaWZpZWQ7CiB9CkBAIC04MjgsNyArODI4LDcgQEAgSlNGdW5jdGlvbjo6UHJvcGVydHlTdGF0
dXMgSlNGdW5jdGlvbjo6cgogdm9pZCBKU0Z1bmN0aW9uOjphc3NlcnRUeXBlSW5mb0ZsYWdJbnZh
cmlhbnRzKCkKIHsKICAgICAvLyBJZiB5b3UgY2hhbmdlIHRoaXMsIHlvdSdsbCBuZWVkIHRvIHVw
ZGF0ZSBzcGVjdWxhdGlvbkZyb21DbGFzc0luZm8uCi0gICAgY29uc3QgQ2xhc3NJbmZvKiBpbmZv
ID0gY2xhc3NJbmZvKCp2bSgpKTsKKyAgICBjb25zdCBDbGFzc0luZm8qIGluZm8gPSBjbGFzc0lu
Zm8odm0oKSk7CiAgICAgaWYgKCEoaW5saW5lVHlwZUZsYWdzKCkgJiBJbXBsZW1lbnRzRGVmYXVs
dEhhc0luc3RhbmNlKSkKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaW5mbyA9PSBKU0JvdW5kRnVu
Y3Rpb246OmluZm8oKSk7CiAgICAgZWxzZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVz
LmgJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00ODIsMTgg
KzQ4MiwyMCBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgogYm9vbCBKU0dlbmVyaWNUeXBl
ZEFycmF5VmlldzxBZGFwdG9yPjo6ZGVsZXRlUHJvcGVydHlCeUluZGV4KAogICAgIEpTQ2VsbCog
Y2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0
dXJuIGNlbGwtPm1ldGhvZFRhYmxlKGV4ZWMtPnZtKCkpLT5kZWxldGVQcm9wZXJ0eShjZWxsLCBl
eGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIHByb3BlcnR5TmFtZSkpOworICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7CisgICAgcmV0dXJuIGNlbGwtPm1ldGhvZFRhYmxlKHZtKS0+ZGVsZXRlUHJv
cGVydHkoY2VsbCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbSh2bSwgcHJvcGVydHlOYW1lKSk7CiB9
CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+CiB2b2lkIEpTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3PEFkYXB0b3I+OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKAogICAgIEpTT2JqZWN0KiBvYmplY3Qs
IEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIGFycmF5LCBFbnVtZXJhdGlvbk1v
ZGUgbW9kZSkKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIEpTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Kj4o
b2JqZWN0KTsKIAogICAgIGlmIChhcnJheS5pbmNsdWRlU3RyaW5nUHJvcGVydGllcygpKSB7CiAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0aGlzT2JqZWN0LT5tX2xlbmd0aDsgKytp
KQotICAgICAgICAgICAgYXJyYXkuYWRkKElkZW50aWZpZXI6OmZyb20oZXhlYywgaSkpOworICAg
ICAgICAgICAgYXJyYXkuYWRkKElkZW50aWZpZXI6OmZyb20odm0sIGkpKTsKICAgICB9CiAgICAg
CiAgICAgcmV0dXJuIEJhc2U6OmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBleGVjLCBhcnJh
eSwgbW9kZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9i
amVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNH
bG9iYWxPYmplY3QuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc2Niw3ICs3
NjYsNyBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0Ojppbml0KFZNJiB2bSkKICAgICBtX2FycmF5Q29u
c3RydWN0b3Iuc2V0KHZtLCB0aGlzLCBhcnJheUNvbnN0cnVjdG9yKTsKICAgICAKICAgICBSZWdF
eHBDb25zdHJ1Y3RvciogcmVnRXhwQ29uc3RydWN0b3IgPSBSZWdFeHBDb25zdHJ1Y3Rvcjo6Y3Jl
YXRlKHZtLCBSZWdFeHBDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKHZtLCB0aGlzLCBtX2Z1
bmN0aW9uUHJvdG90eXBlLmdldCgpKSwgbV9yZWdFeHBQcm90b3R5cGUuZ2V0KCksIG1fc3BlY2ll
c0dldHRlclNldHRlci5nZXQoKSk7Ci0gICAgbV9yZWdFeHBHbG9iYWxEYXRhLmNhY2hlZFJlc3Vs
dCgpLnJlY29yZCh2bSwgdGhpcywgbnVsbHB0ciwganNFbXB0eVN0cmluZygmdm0pLCBNYXRjaFJl
c3VsdCgwLCAwKSk7CisgICAgbV9yZWdFeHBHbG9iYWxEYXRhLmNhY2hlZFJlc3VsdCgpLnJlY29y
ZCh2bSwgdGhpcywgbnVsbHB0ciwganNFbXB0eVN0cmluZyh2bSksIE1hdGNoUmVzdWx0KDAsIDAp
KTsKICAgICAKICNpZiBFTkFCTEUoU0hBUkVEX0FSUkFZX0JVRkZFUikKICAgICBKU1NoYXJlZEFy
cmF5QnVmZmVyQ29uc3RydWN0b3IqIHNoYXJlZEFycmF5QnVmZmVyQ29uc3RydWN0b3IgPSBudWxs
cHRyOwpAQCAtODQ5LDcgKzg0OSw3IEBAIGNhcGl0YWxOYW1lICMjIENvbnN0cnVjdG9yKiBsb3dl
ck5hbWUgIyMKIAogI2lmIEVOQUJMRShTSEFSRURfQVJSQVlfQlVGRkVSKQogICAgIHB1dERpcmVj
dFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5TaGFyZWRBcnJheUJ1ZmZl
ciwgc2hhcmVkQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvciwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFBy
b3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOwotICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0
aW9uKHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJBdG9taWNzIiksIGF0b21pY3NP
YmplY3QsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0p
KTsKKyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZyh2bSwgIkF0b21pY3MiKSwgYXRvbWljc09iamVjdCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOwogI2VuZGlmCiAKICNkZWZpbmUgUFVUX0NP
TlNUUlVDVE9SX0ZPUl9TSU1QTEVfVFlQRShjYXBpdGFsTmFtZSwgbG93ZXJOYW1lLCBwcm9wZXJO
YW1lLCBpbnN0YW5jZVR5cGUsIGpzTmFtZSwgcHJvdG90eXBlQmFzZSwgZmVhdHVyZUZsYWcpIFwK
QEAgLTExMDMsNyArMTEwMyw3IEBAIGNhcGl0YWxOYW1lICMjIENvbnN0cnVjdG9yKiBsb3dlck5h
bWUgIyMKICAgICAgICAgICAgICAgICBpbml0LnNldChXZWJBc3NlbWJseVRvSlNDYWxsZWU6OmNy
ZWF0ZVN0cnVjdHVyZShpbml0LnZtLCBpbml0Lm93bmVyLCBqc051bGwoKSkpOwogICAgICAgICAg
ICAgfSk7CiAgICAgICAgIGF1dG8qIHdlYkFzc2VtYmx5ID0gSlNXZWJBc3NlbWJseTo6Y3JlYXRl
KHZtLCB0aGlzLCBKU1dlYkFzc2VtYmx5OjpjcmVhdGVTdHJ1Y3R1cmUodm0sIHRoaXMsIG1fb2Jq
ZWN0UHJvdG90eXBlLmdldCgpKSk7Ci0gICAgICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9u
KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJXZWJBc3NlbWJseSIpLCB3ZWJBc3Nl
bWJseSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkp
OworICAgICAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyh2bSwgIldlYkFzc2VtYmx5IiksIHdlYkFzc2VtYmx5LCBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7CiAKICNkZWZpbmUgQ1JFQVRFX1dF
QkFTU0VNQkxZX1BST1RPVFlQRShjYXBpdGFsTmFtZSwgbG93ZXJOYW1lLCBwcm9wZXJOYW1lLCBp
bnN0YW5jZVR5cGUsIGpzTmFtZSwgcHJvdG90eXBlQmFzZSwgZmVhdHVyZUZsYWcpIFwKICAgICBp
ZiAoZmVhdHVyZUZsYWcpIHtcCkBAIC0xODMxLDcgKzE4MzEsNyBAQCB2b2lkIEpTR2xvYmFsT2Jq
ZWN0OjpleHBvc2VEb2xsYXJWTShWTSYgCiAgICAgfTsKICAgICBhZGRTdGF0aWNHbG9iYWxzKGV4
dHJhU3RhdGljR2xvYmFscywgV1RGX0FSUkFZX0xFTkdUSChleHRyYVN0YXRpY0dsb2JhbHMpKTsK
IAotICAgIHB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhnbG9iYWxFeGVjKCks
ICIkdm0iKSwgZG9sbGFyVk0sIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0
ZTo6RG9udEVudW0pKTsKKyAgICBwdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmco
dm0sICIkdm0iKSwgZG9sbGFyVk0sIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJp
YnV0ZTo6RG9udEVudW0pKTsKIH0KIAogdm9pZCBKU0dsb2JhbE9iamVjdDo6YWRkU3RhdGljR2xv
YmFscyhHbG9iYWxQcm9wZXJ0eUluZm8qIGdsb2JhbHMsIGludCBjb3VudCkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdEZ1
bmN0aW9ucy5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3
ICsxLDcgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDIgSGFycmkgUG9ydGVuIChw
b3J0ZW5Aa2RlLm9yZykKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bw
b3N0LmNvbSkKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICogIENvcHlyaWdodCAoQykgMjAwNyBDYW1lcm9uIFp3YXJpY2gg
KGN3endhcmljaEB1d2F0ZXJsb28uY2EpCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3IE1ha3MgT3Js
b3ZpY2gKICAqCkBAIC0xNTIsNyArMTUyLDcgQEAgc3RhdGljIEpTVmFsdWUgZW5jb2RlKEV4ZWNT
dGF0ZSogZXhlYywgYwogCiAgICAgaWYgKFVOTElLRUxZKGJ1aWxkZXIuaGFzT3ZlcmZsb3dlZCgp
KSkKICAgICAgICAgcmV0dXJuIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjLCBzY29wZSk7Ci0g
ICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIGJ1aWxkZXIudG9TdHJpbmcoKSk7CisgICAgcmV0dXJu
IGpzU3RyaW5nKHZtLCBidWlsZGVyLnRvU3RyaW5nKCkpOwogfQogCiBzdGF0aWMgSlNWYWx1ZSBl
bmNvZGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBCaXRtYXA8MjU2PiYgZG9Ob3RFc2NhcGUpCkBA
IC0yNDEsNyArMjQxLDcgQEAgc3RhdGljIEpTVmFsdWUgZGVjb2RlKEV4ZWNTdGF0ZSogZXhlYywg
YwogICAgIH0KICAgICBpZiAoVU5MSUtFTFkoYnVpbGRlci5oYXNPdmVyZmxvd2VkKCkpKQogICAg
ICAgICByZXR1cm4gdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMsIHNjb3BlKTsKLSAgICBSRUxF
QVNFX0FORF9SRVRVUk4oc2NvcGUsIGpzU3RyaW5nKCZ2bSwgYnVpbGRlci50b1N0cmluZygpKSk7
CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBqc1N0cmluZyh2bSwgYnVpbGRlci50b1N0
cmluZygpKSk7CiB9CiAKIHN0YXRpYyBKU1ZhbHVlIGRlY29kZShFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IEJpdG1hcDwyNTY+JiBkb05vdFVuZXNjYXBlLCBib29sIHN0cmljdCkKQEAgLTYwMSw2ICs2
MDEsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNFCiAgICAgKTsK
IAogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9TdHJpbmdWaWV3KGV4ZWMsIGV4ZWMtPmFy
Z3VtZW50KDApLCBbJl0gKFN0cmluZ1ZpZXcgdmlldykgeworICAgICAgICBWTSYgdm0gPSBleGVj
LT52bSgpOwogICAgICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CiAgICAgICAgIGlmICh2aWV3
LmlzOEJpdCgpKSB7CiAgICAgICAgICAgICBjb25zdCBMQ2hhciogYyA9IHZpZXcuY2hhcmFjdGVy
czgoKTsKQEAgLTYxMyw3ICs2MTQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGds
b2JhbEZ1bmNFCiAgICAgICAgICAgICAgICAgICAgIGFwcGVuZEJ5dGVBc0hleCh1LCBidWlsZGVy
KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4g
anNTdHJpbmcoZXhlYywgYnVpbGRlci50b1N0cmluZygpKTsKKyAgICAgICAgICAgIHJldHVybiBq
c1N0cmluZyh2bSwgYnVpbGRlci50b1N0cmluZygpKTsKICAgICAgICAgfQogCiAgICAgICAgIGNv
bnN0IFVDaGFyKiBjID0gdmlldy5jaGFyYWN0ZXJzMTYoKTsKQEAgLTYzMSw3ICs2MzIsNyBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNFCiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KIAotICAgICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgYnVpbGRlci50b1N0cmlu
ZygpKTsKKyAgICAgICAgcmV0dXJuIGpzU3RyaW5nKHZtLCBidWlsZGVyLnRvU3RyaW5nKCkpOwog
ICAgIH0pKTsKIH0KIApAQCAtNjg3LDcgKzY4OCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZ2xvYmFsRnVuY1UKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIHJl
dHVybiBqc1N0cmluZyhleGVjLCBidWlsZGVyLnRvU3RyaW5nKCkpOworICAgICAgICByZXR1cm4g
anNTdHJpbmcoZXhlYy0+dm0oKSwgYnVpbGRlci50b1N0cmluZygpKTsKICAgICB9KSk7CiB9CiAK
QEAgLTgwNCw3ICs4MDUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1
bmNCCiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY0J1aWx0aW5EZXNj
cmliZShFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0
cmluZyhleGVjLCB0b1N0cmluZyhleGVjLT5hcmd1bWVudCgwKSkpKTsKKyAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKGV4ZWMtPnZtKCksIHRvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50
KDApKSkpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNJbXBv
cnRNb2R1bGUoRXhlY1N0YXRlKiBleGVjKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNMZXhpY2FsRW52aXJvbm1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTTGV4aWNhbEVudmlyb25tZW50LmNwcAkocmV2aXNpb24gMjQ5
MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMZXhpY2FsRW52aXJvbm1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwOCwgMjAwOSwgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTczLDYgKzczLDcgQEAgdm9p
ZCBKU0xleGljYWxFbnZpcm9ubWVudDo6Z2V0T3duTm9uSW5kZQogICAgIHsKICAgICAgICAgQ29u
Y3VycmVudEpTTG9ja2VyIGxvY2tlcih0aGlzT2JqZWN0LT5zeW1ib2xUYWJsZSgpLT5tX2xvY2sp
OwogICAgICAgICBTeW1ib2xUYWJsZTo6TWFwOjppdGVyYXRvciBlbmQgPSB0aGlzT2JqZWN0LT5z
eW1ib2xUYWJsZSgpLT5lbmQobG9ja2VyKTsKKyAgICAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsK
ICAgICAgICAgZm9yIChTeW1ib2xUYWJsZTo6TWFwOjppdGVyYXRvciBpdCA9IHRoaXNPYmplY3Qt
PnN5bWJvbFRhYmxlKCktPmJlZ2luKGxvY2tlcik7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAg
ICAgICAgaWYgKGl0LT52YWx1ZS5nZXRBdHRyaWJ1dGVzKCkgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6
RG9udEVudW0gJiYgIW1vZGUuaW5jbHVkZURvbnRFbnVtUHJvcGVydGllcygpKQogICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwpAQCAtODAsNyArODEsNyBAQCB2b2lkIEpTTGV4aWNhbEVudmlyb25t
ZW50OjpnZXRPd25Ob25JbmRlCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAg
ICBpZiAoaXQtPmtleS0+aXNTeW1ib2woKSAmJiAhcHJvcGVydHlOYW1lcy5pbmNsdWRlU3ltYm9s
UHJvcGVydGllcygpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgcHJv
cGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbVVpZChleGVjLCBpdC0+a2V5LmdldCgpKSk7
CisgICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCBp
dC0+a2V5LmdldCgpKSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgLy8gU2tpcCB0aGUgSlNTeW1i
b2xUYWJsZU9iamVjdCdzIGltcGxlbWVudGF0aW9uIG9mIGdldE93bk5vbkluZGV4UHJvcGVydHlO
YW1lcwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVFbnZpcm9u
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNN
b2R1bGVFbnZpcm9ubWVudC5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlRW52aXJvbm1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtODEsNyArODEsNyBAQCBib29sIEpTTW9kdWxlRW52aXJvbm1lbnQ6OmdldE93blByb3BlcnR5
CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CiAgICAgSlNNb2R1bGVFbnZpcm9ubWVudCogdGhpc09iamVjdCA9IGpzQ2Fz
dDxKU01vZHVsZUVudmlyb25tZW50Kj4oY2VsbCk7Ci0gICAgQWJzdHJhY3RNb2R1bGVSZWNvcmQ6
OlJlc29sdXRpb24gcmVzb2x1dGlvbiA9IHRoaXNPYmplY3QtPm1vZHVsZVJlY29yZCgpLT5yZXNv
bHZlSW1wb3J0KGV4ZWMsIElkZW50aWZpZXI6OmZyb21VaWQoZXhlYywgcHJvcGVydHlOYW1lLnVp
ZCgpKSk7CisgICAgQWJzdHJhY3RNb2R1bGVSZWNvcmQ6OlJlc29sdXRpb24gcmVzb2x1dGlvbiA9
IHRoaXNPYmplY3QtPm1vZHVsZVJlY29yZCgpLT5yZXNvbHZlSW1wb3J0KGV4ZWMsIElkZW50aWZp
ZXI6OmZyb21VaWQodm0sIHByb3BlcnR5TmFtZS51aWQoKSkpOwogICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIGZhbHNlKTsKICAgICBpZiAocmVzb2x1dGlvbi50eXBlID09IEFic3RyYWN0
TW9kdWxlUmVjb3JkOjpSZXNvbHV0aW9uOjpUeXBlOjpSZXNvbHZlZCkgewogICAgICAgICAvLyBX
aGVuIHJlc29sdmVJbXBvcnQgcmVzb2x2ZXMgdGhlIHJlc29sdXRpb24sIHRoZSBpbXBvcnRlZCBt
b2R1bGUgZW52aXJvbm1lbnQgbXVzdCBoYXZlIHRoZSBiaW5kaW5nLgpAQCAtMTE4LDcgKzExOCw3
IEBAIGJvb2wgSlNNb2R1bGVFbnZpcm9ubWVudDo6cHV0KEpTQ2VsbCogY2UKIAogICAgIEpTTW9k
dWxlRW52aXJvbm1lbnQqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNNb2R1bGVFbnZpcm9ubWVudCo+
KGNlbGwpOwogICAgIC8vIEFsbCBpbXBvcnRlZCBiaW5kaW5ncyBhcmUgaW1tdXRhYmxlLgotICAg
IEFic3RyYWN0TW9kdWxlUmVjb3JkOjpSZXNvbHV0aW9uIHJlc29sdXRpb24gPSB0aGlzT2JqZWN0
LT5tb2R1bGVSZWNvcmQoKS0+cmVzb2x2ZUltcG9ydChleGVjLCBJZGVudGlmaWVyOjpmcm9tVWlk
KGV4ZWMsIHByb3BlcnR5TmFtZS51aWQoKSkpOworICAgIEFic3RyYWN0TW9kdWxlUmVjb3JkOjpS
ZXNvbHV0aW9uIHJlc29sdXRpb24gPSB0aGlzT2JqZWN0LT5tb2R1bGVSZWNvcmQoKS0+cmVzb2x2
ZUltcG9ydChleGVjLCBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCBwcm9wZXJ0eU5hbWUudWlkKCkp
KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7CiAgICAgaWYgKHJlc29s
dXRpb24udHlwZSA9PSBBYnN0cmFjdE1vZHVsZVJlY29yZDo6UmVzb2x1dGlvbjo6VHlwZTo6UmVz
b2x2ZWQpIHsKICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIFJlYWRvbmx5UHJv
cGVydHlXcml0ZUVycm9yKTsKQEAgLTEzNCw3ICsxMzQsNyBAQCBib29sIEpTTW9kdWxlRW52aXJv
bm1lbnQ6OmRlbGV0ZVByb3BlcnR5CiAKICAgICBKU01vZHVsZUVudmlyb25tZW50KiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PEpTTW9kdWxlRW52aXJvbm1lbnQqPihjZWxsKTsKICAgICAvLyBBbGwgaW1w
b3J0ZWQgYmluZGluZ3MgYXJlIGltbXV0YWJsZS4KLSAgICBBYnN0cmFjdE1vZHVsZVJlY29yZDo6
UmVzb2x1dGlvbiByZXNvbHV0aW9uID0gdGhpc09iamVjdC0+bW9kdWxlUmVjb3JkKCktPnJlc29s
dmVJbXBvcnQoZXhlYywgSWRlbnRpZmllcjo6ZnJvbVVpZChleGVjLCBwcm9wZXJ0eU5hbWUudWlk
KCkpKTsKKyAgICBBYnN0cmFjdE1vZHVsZVJlY29yZDo6UmVzb2x1dGlvbiByZXNvbHV0aW9uID0g
dGhpc09iamVjdC0+bW9kdWxlUmVjb3JkKCktPnJlc29sdmVJbXBvcnQoZXhlYywgSWRlbnRpZmll
cjo6ZnJvbVVpZCh2bSwgcHJvcGVydHlOYW1lLnVpZCgpKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgZmFsc2UpOwogICAgIGlmIChyZXNvbHV0aW9uLnR5cGUgPT0gQWJzdHJhY3RN
b2R1bGVSZWNvcmQ6OlJlc29sdXRpb246OlR5cGU6OlJlc29sdmVkKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZUxvYWRl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1
bGVMb2FkZXIuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU01vZHVsZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTkgQXBwbGUgSW5jLiBBbGwgUmlnaHRz
IFJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDE2IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUu
dGVhQGdtYWlsLmNvbT4uCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0xMDksNyArMTA5LDcgQEAgdm9p
ZCBKU01vZHVsZUxvYWRlcjo6ZmluaXNoQ3JlYXRpb24oRXhlYwogICAgIEFTU0VSVChpbmhlcml0
cyh2bSwgaW5mbygpKSk7CiAgICAgSlNNYXAqIG1hcCA9IEpTTWFwOjpjcmVhdGUoZXhlYywgdm0s
IGdsb2JhbE9iamVjdC0+bWFwU3RydWN0dXJlKCkpOwogICAgIHNjb3BlLnJlbGVhc2VBc3NlcnRO
b0V4Y2VwdGlvbigpOwotICAgIHB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygm
dm0sICJyZWdpc3RyeSIpLCBtYXApOworICAgIHB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyh2bSwgInJlZ2lzdHJ5IiksIG1hcCk7CiB9CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSBGdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
QEAgLTI0MSw3ICsyNDEsNyBAQCBKU0ludGVybmFsUHJvbWlzZSogSlNNb2R1bGVMb2FkZXI6OnJl
cXVlCiAgICAgQVNTRVJUKGNhbGxUeXBlICE9IENhbGxUeXBlOjpOb25lKTsKIAogICAgIE1hcmtl
ZEFyZ3VtZW50QnVmZmVyIGFyZ3VtZW50czsKLSAgICBhcmd1bWVudHMuYXBwZW5kKGpzU3RyaW5n
KGV4ZWMsIG1vZHVsZUtleS5pbXBsKCkpKTsKKyAgICBhcmd1bWVudHMuYXBwZW5kKGpzU3RyaW5n
KHZtLCBtb2R1bGVLZXkuaW1wbCgpKSk7CiAgICAgYXJndW1lbnRzLmFwcGVuZChwYXJhbWV0ZXJz
KTsKICAgICBhcmd1bWVudHMuYXBwZW5kKHNjcmlwdEZldGNoZXIpOwogICAgIEFTU0VSVCghYXJn
dW1lbnRzLmhhc092ZXJmbG93ZWQoKSk7CkBAIC00MjAsNyArNDIwLDcgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBtb2R1bGVMb2FkZQogCiAgICAgUGFyc2VyRXJyb3IgZXJyb3I7CiAg
ICAgc3RkOjp1bmlxdWVfcHRyPE1vZHVsZVByb2dyYW1Ob2RlPiBtb2R1bGVQcm9ncmFtTm9kZSA9
IHBhcnNlPE1vZHVsZVByb2dyYW1Ob2RlPigKLSAgICAgICAgJnZtLCBzb3VyY2VDb2RlLCBJZGVu
dGlmaWVyKCksIEpTUGFyc2VyQnVpbHRpbk1vZGU6Ok5vdEJ1aWx0aW4sCisgICAgICAgIHZtLCBz
b3VyY2VDb2RlLCBJZGVudGlmaWVyKCksIEpTUGFyc2VyQnVpbHRpbk1vZGU6Ok5vdEJ1aWx0aW4s
CiAgICAgICAgIEpTUGFyc2VyU3RyaWN0TW9kZTo6U3RyaWN0LCBKU1BhcnNlclNjcmlwdE1vZGU6
Ok1vZHVsZSwgU291cmNlUGFyc2VNb2RlOjpNb2R1bGVBbmFseXplTW9kZSwgU3VwZXJCaW5kaW5n
OjpOb3ROZWVkZWQsIGVycm9yKTsKICAgICBpZiAoZXJyb3IuaXNWYWxpZCgpKQogICAgICAgICBy
ZXR1cm4gcmVqZWN0KGVycm9yLnRvRXJyb3JPYmplY3QoZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVj
dCgpLCBzb3VyY2VDb2RlKSk7CkBAIC00NDcsNyArNDQ3LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBtb2R1bGVMb2FkZQogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVu
Y29kZWRKU1ZhbHVlKCkpOwogICAgIHNpemVfdCBpID0gMDsKICAgICBmb3IgKGF1dG8mIGtleSA6
IG1vZHVsZVJlY29yZC0+cmVxdWVzdGVkTW9kdWxlcygpKSB7Ci0gICAgICAgIHJlc3VsdC0+cHV0
RGlyZWN0SW5kZXgoZXhlYywgaSsrLCBqc1N0cmluZyhleGVjLCBrZXkuZ2V0KCkpKTsKKyAgICAg
ICAgcmVzdWx0LT5wdXREaXJlY3RJbmRleChleGVjLCBpKyssIGpzU3RyaW5nKHZtLCBrZXkuZ2V0
KCkpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUo
KSk7CiAgICAgfQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlTmFtZXNwYWNlT2JqZWN0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZU5hbWVz
cGFjZU9iamVjdC5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTTW9kdWxlTmFtZXNwYWNlT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTczLDcgKzczLDcgQEAgdm9pZCBKU01vZHVsZU5hbWVzcGFjZU9iamVjdDo6ZmluaXNoQ3JlYQog
ICAgICAgICB9CiAgICAgfQogCi0gICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT50
b1N0cmluZ1RhZ1N5bWJvbCwganNTdHJpbmcoJnZtLCAiTW9kdWxlIiksIFByb3BlcnR5QXR0cmli
dXRlOjpEb250RW51bSB8IFByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgUHJvcGVydHlB
dHRyaWJ1dGU6OlJlYWRPbmx5KTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMt
PnRvU3RyaW5nVGFnU3ltYm9sLCBqc1N0cmluZyh2bSwgIk1vZHVsZSIpLCBQcm9wZXJ0eUF0dHJp
YnV0ZTo6RG9udEVudW0gfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IFByb3BlcnR5
QXR0cmlidXRlOjpSZWFkT25seSk7CiAKICAgICAvLyBodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRp
b25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtbW9kdWxlLW5hbWVzcGFjZS1leG90aWMtb2JqZWN0
cy1nZXRwcm90b3R5cGVvZgogICAgIC8vIGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9y
Zy9lY21hLTI2Mi82LjAvI3NlYy1tb2R1bGUtbmFtZXNwYWNlLWV4b3RpYy1vYmplY3RzLXNldHBy
b3RvdHlwZW9mLXYKQEAgLTE3Myw4ICsxNzMsOSBAQCBib29sIEpTTW9kdWxlTmFtZXNwYWNlT2Jq
ZWN0OjpnZXRPd25Qcm9wCiAKIGJvb2wgSlNNb2R1bGVOYW1lc3BhY2VPYmplY3Q6OmdldE93blBy
b3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmplY3QqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWdu
ZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CisgICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKICAgICBKU01vZHVsZU5hbWVzcGFjZU9iamVjdCogdGhpc09iamVjdCA9IGpzQ2Fz
dDxKU01vZHVsZU5hbWVzcGFjZU9iamVjdCo+KGNlbGwpOwotICAgIHJldHVybiB0aGlzT2JqZWN0
LT5nZXRPd25Qcm9wZXJ0eVNsb3RDb21tb24oZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBw
cm9wZXJ0eU5hbWUpLCBzbG90KTsKKyAgICByZXR1cm4gdGhpc09iamVjdC0+Z2V0T3duUHJvcGVy
dHlTbG90Q29tbW9uKGV4ZWMsIElkZW50aWZpZXI6OmZyb20odm0sIHByb3BlcnR5TmFtZSksIHNs
b3QpOwogfQogCiBib29sIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0OjpwdXQoSlNDZWxsKiwgRXhl
Y1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xv
dCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlUmVjb3JkLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZVJl
Y29yZC5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTTW9kdWxlUmVjb3JkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE4MCw3ICsxODAsNyBA
QCB2b2lkIEpTTW9kdWxlUmVjb3JkOjppbnN0YW50aWF0ZURlY2xhcmF0CiAgICAgICAgIFZhck9m
ZnNldCBvZmZzZXQgPSBlbnRyeS52YXJPZmZzZXQoKTsKICAgICAgICAgaWYgKCFvZmZzZXQuaXNT
dGFjaygpKSB7CiAgICAgICAgICAgICBib29sIHB1dFJlc3VsdCA9IGZhbHNlOwotICAgICAgICAg
ICAgc3ltYm9sVGFibGVQdXRUb3VjaFdhdGNocG9pbnRTZXQobW9kdWxlRW52aXJvbm1lbnQsIGV4
ZWMsIElkZW50aWZpZXI6OmZyb21VaWQoZXhlYywgdmFyaWFibGUua2V5LmdldCgpKSwganNVbmRl
ZmluZWQoKSwgLyogc2hvdWxkVGhyb3dSZWFkT25seUVycm9yICovIGZhbHNlLCAvKiBpZ25vcmVS
ZWFkT25seUVycm9ycyAqLyB0cnVlLCBwdXRSZXN1bHQpOworICAgICAgICAgICAgc3ltYm9sVGFi
bGVQdXRUb3VjaFdhdGNocG9pbnRTZXQobW9kdWxlRW52aXJvbm1lbnQsIGV4ZWMsIElkZW50aWZp
ZXI6OmZyb21VaWQodm0sIHZhcmlhYmxlLmtleS5nZXQoKSksIGpzVW5kZWZpbmVkKCksIC8qIHNo
b3VsZFRocm93UmVhZE9ubHlFcnJvciAqLyBmYWxzZSwgLyogaWdub3JlUmVhZE9ubHlFcnJvcnMg
Ki8gdHJ1ZSwgcHV0UmVzdWx0KTsKICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIHZvaWQoKSk7CiAgICAgICAgIH0KICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU09OT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU09OT2JqZWN0LmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPTk9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC02NCw3ICs2NCw3IEBAIHZvaWQgSlNPTk9iamVjdDo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQog
ICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBBU1NFUlQoaW5oZXJpdHModm0sIGlu
Zm8oKSkpOwogCi0gICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5
TmFtZXMtPnRvU3RyaW5nVGFnU3ltYm9sLCBqc1N0cmluZygmdm0sICJKU09OIiksIFByb3BlcnR5
QXR0cmlidXRlOjpEb250RW51bSB8IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSk7CisgICAg
cHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPnRvU3RyaW5n
VGFnU3ltYm9sLCBqc1N0cmluZyh2bSwgIkpTT04iKSwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRF
bnVtIHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KTsKIH0KIAogLy8gUHJvcGVydHlOYW1l
Rm9yRnVuY3Rpb25DYWxsIG9iamVjdHMgbXVzdCBiZSBvbiB0aGUgc3RhY2ssIHNpbmNlIHRoZSBK
U1ZhbHVlIHRoYXQgdGhleSBjcmVhdGUgaXMgbm90IG1hcmtlZC4KQEAgLTIwNSwxMyArMjA1LDEz
IEBAIGlubGluZSBQcm9wZXJ0eU5hbWVGb3JGdW5jdGlvbkNhbGw6OlByb3AKIEpTVmFsdWUgUHJv
cGVydHlOYW1lRm9yRnVuY3Rpb25DYWxsOjp2YWx1ZShFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiB7
CiAgICAgaWYgKCFtX3ZhbHVlKSB7CisgICAgICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAg
ICAgIGlmIChtX2lkZW50aWZpZXIpCi0gICAgICAgICAgICBtX3ZhbHVlID0ganNTdHJpbmcoZXhl
YywgbV9pZGVudGlmaWVyLT5zdHJpbmcoKSk7CisgICAgICAgICAgICBtX3ZhbHVlID0ganNTdHJp
bmcodm0sIG1faWRlbnRpZmllci0+c3RyaW5nKCkpOwogICAgICAgICBlbHNlIHsKLSAgICAgICAg
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgICAgICAgICBpZiAobV9udW1iZXIgPD0gOSkK
ICAgICAgICAgICAgICAgICByZXR1cm4gdm0uc21hbGxTdHJpbmdzLnNpbmdsZUNoYXJhY3RlclN0
cmluZyhtX251bWJlciArICcwJyk7Ci0gICAgICAgICAgICBtX3ZhbHVlID0ganNOb250cml2aWFs
U3RyaW5nKCZ2bSwgdm0ubnVtZXJpY1N0cmluZ3MuYWRkKG1fbnVtYmVyKSk7CisgICAgICAgICAg
ICBtX3ZhbHVlID0ganNOb250cml2aWFsU3RyaW5nKHZtLCB2bS5udW1lcmljU3RyaW5ncy5hZGQo
bV9udW1iZXIpKTsKICAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4gbV92YWx1ZTsKQEAgLTIy
Miw3ICsyMjIsNyBAQCBKU1ZhbHVlIFByb3BlcnR5TmFtZUZvckZ1bmN0aW9uQ2FsbDo6dmFsCiBT
dHJpbmdpZmllcjo6U3RyaW5naWZpZXIoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHJlcGxhY2Vy
LCBKU1ZhbHVlIHNwYWNlKQogICAgIDogbV9leGVjKGV4ZWMpCiAgICAgLCBtX3JlcGxhY2VyKHJl
cGxhY2VyKQotICAgICwgbV9hcnJheVJlcGxhY2VyUHJvcGVydHlOYW1lcygmZXhlYy0+dm0oKSwg
UHJvcGVydHlOYW1lTW9kZTo6U3RyaW5ncywgUHJpdmF0ZVN5bWJvbE1vZGU6OkV4Y2x1ZGUpCisg
ICAgLCBtX2FycmF5UmVwbGFjZXJQcm9wZXJ0eU5hbWVzKGV4ZWMtPnZtKCksIFByb3BlcnR5TmFt
ZU1vZGU6OlN0cmluZ3MsIFByaXZhdGVTeW1ib2xNb2RlOjpFeGNsdWRlKQogewogICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwpAQCAtMjg3LDcgKzI4Nyw3IEBAIEpTVmFsdWUgU3RyaW5naWZpZXI6OnN0cmluZ2lmeShKU1Zh
bHVlIHYKICAgICB9CiAgICAgaWYgKFVOTElLRUxZKHN0cmluZ2lmeVJlc3VsdCAhPSBTdHJpbmdp
ZnlTdWNjZWVkZWQpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICBSRUxFQVNF
X0FORF9SRVRVUk4oc2NvcGUsIGpzU3RyaW5nKG1fZXhlYywgcmVzdWx0LnRvU3RyaW5nKCkpKTsK
KyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGpzU3RyaW5nKHZtLCByZXN1bHQudG9TdHJp
bmcoKSkpOwogfQogCiBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgU3RyaW5naWZpZXI6OnRvSlNPTihK
U1ZhbHVlIGJhc2VWYWx1ZSwgY29uc3QgUHJvcGVydHlOYW1lRm9yRnVuY3Rpb25DYWxsJiBwcm9w
ZXJ0eU5hbWUpCkBAIC00OTYsNyArNDk2LDcgQEAgYm9vbCBTdHJpbmdpZmllcjo6SG9sZGVyOjph
cHBlbmROZXh0UHJvcAogICAgICAgICAgICAgaWYgKHN0cmluZ2lmaWVyLm1fdXNpbmdBcnJheVJl
cGxhY2VyKQogICAgICAgICAgICAgICAgIG1fcHJvcGVydHlOYW1lcyA9IHN0cmluZ2lmaWVyLm1f
YXJyYXlSZXBsYWNlclByb3BlcnR5TmFtZXMuZGF0YSgpOwogICAgICAgICAgICAgZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgUHJvcGVydHlOYW1lQXJyYXkgb2JqZWN0UHJvcGVydHlOYW1lcygmdm0s
IFByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3MsIFByaXZhdGVTeW1ib2xNb2RlOjpFeGNsdWRlKTsK
KyAgICAgICAgICAgICAgICBQcm9wZXJ0eU5hbWVBcnJheSBvYmplY3RQcm9wZXJ0eU5hbWVzKHZt
LCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzLCBQcml2YXRlU3ltYm9sTW9kZTo6RXhjbHVkZSk7
CiAgICAgICAgICAgICAgICAgbV9vYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVy
dHlOYW1lcyhtX29iamVjdCwgZXhlYywgb2JqZWN0UHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25N
b2RlKCkpOwogICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNl
KTsKICAgICAgICAgICAgICAgICBtX3Byb3BlcnR5TmFtZXMgPSBvYmplY3RQcm9wZXJ0eU5hbWVz
LnJlbGVhc2VEYXRhKCk7CkBAIC03MDUsNyArNzA1LDcgQEAgTkVWRVJfSU5MSU5FIEpTVmFsdWUg
V2Fsa2VyOjp3YWxrKEpTVmFsdQogICAgICAgICAgICAgfQogICAgICAgICAgICAgY2FzZSBBcnJh
eUVuZFZpc2l0TWVtYmVyOiB7CiAgICAgICAgICAgICAgICAgSlNBcnJheSogYXJyYXkgPSBqc0Nh
c3Q8SlNBcnJheSo+KG1hcmtlZFN0YWNrLmxhc3QoKSk7Ci0gICAgICAgICAgICAgICAgSlNWYWx1
ZSBmaWx0ZXJlZFZhbHVlID0gY2FsbFJldml2ZXIoYXJyYXksIGpzU3RyaW5nKG1fZXhlYywgU3Ry
aW5nOjpudW1iZXIoaW5kZXhTdGFjay5sYXN0KCkpKSwgb3V0VmFsdWUpOworICAgICAgICAgICAg
ICAgIEpTVmFsdWUgZmlsdGVyZWRWYWx1ZSA9IGNhbGxSZXZpdmVyKGFycmF5LCBqc1N0cmluZyh2
bSwgU3RyaW5nOjpudW1iZXIoaW5kZXhTdGFjay5sYXN0KCkpKSwgb3V0VmFsdWUpOwogICAgICAg
ICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgICAgICAgICAg
ICAgaWYgKGZpbHRlcmVkVmFsdWUuaXNVbmRlZmluZWQoKSkKICAgICAgICAgICAgICAgICAgICAg
YXJyYXktPm1ldGhvZFRhYmxlKHZtKS0+ZGVsZXRlUHJvcGVydHlCeUluZGV4KGFycmF5LCBtX2V4
ZWMsIGluZGV4U3RhY2subGFzdCgpKTsKQEAgLTcyNSw3ICs3MjUsNyBAQCBORVZFUl9JTkxJTkUg
SlNWYWx1ZSBXYWxrZXI6OndhbGsoSlNWYWx1CiAgICAgICAgICAgICAgICAgSlNPYmplY3QqIG9i
amVjdCA9IGFzT2JqZWN0KGluVmFsdWUpOwogICAgICAgICAgICAgICAgIG1hcmtlZFN0YWNrLmFw
cGVuZFdpdGhDcmFzaE9uT3ZlcmZsb3cob2JqZWN0KTsKICAgICAgICAgICAgICAgICBpbmRleFN0
YWNrLmFwcGVuZCgwKTsKLSAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0YWNrLmFwcGVuZChQcm9w
ZXJ0eU5hbWVBcnJheSgmdm0sIFByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3MsIFByaXZhdGVTeW1i
b2xNb2RlOjpFeGNsdWRlKSk7CisgICAgICAgICAgICAgICAgcHJvcGVydHlTdGFjay5hcHBlbmQo
UHJvcGVydHlOYW1lQXJyYXkodm0sIFByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3MsIFByaXZhdGVT
eW1ib2xNb2RlOjpFeGNsdWRlKSk7CiAgICAgICAgICAgICAgICAgb2JqZWN0LT5tZXRob2RUYWJs
ZSh2bSktPmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBtX2V4ZWMsIHByb3BlcnR5U3RhY2su
bGFzdCgpLCBFbnVtZXJhdGlvbk1vZGUoKSk7CiAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgeyB9KTsKICAgICAgICAgICAgIH0KQEAgLTc2Miw3ICs3NjIsNyBAQCBO
RVZFUl9JTkxJTkUgSlNWYWx1ZSBXYWxrZXI6OndhbGsoSlNWYWx1CiAgICAgICAgICAgICAgICAg
SlNPYmplY3QqIG9iamVjdCA9IGpzQ2FzdDxKU09iamVjdCo+KG1hcmtlZFN0YWNrLmxhc3QoKSk7
CiAgICAgICAgICAgICAgICAgSWRlbnRpZmllciBwcm9wID0gcHJvcGVydHlTdGFjay5sYXN0KClb
aW5kZXhTdGFjay5sYXN0KCldOwogICAgICAgICAgICAgICAgIFB1dFByb3BlcnR5U2xvdCBzbG90
KG9iamVjdCk7Ci0gICAgICAgICAgICAgICAgSlNWYWx1ZSBmaWx0ZXJlZFZhbHVlID0gY2FsbFJl
dml2ZXIob2JqZWN0LCBqc1N0cmluZyhtX2V4ZWMsIHByb3Auc3RyaW5nKCkpLCBvdXRWYWx1ZSk7
CisgICAgICAgICAgICAgICAgSlNWYWx1ZSBmaWx0ZXJlZFZhbHVlID0gY2FsbFJldml2ZXIob2Jq
ZWN0LCBqc1N0cmluZyh2bSwgcHJvcC5zdHJpbmcoKSksIG91dFZhbHVlKTsKICAgICAgICAgICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgICAgICAgICAgICAgIGlm
IChmaWx0ZXJlZFZhbHVlLmlzVW5kZWZpbmVkKCkpCiAgICAgICAgICAgICAgICAgICAgIG9iamVj
dC0+bWV0aG9kVGFibGUodm0pLT5kZWxldGVQcm9wZXJ0eShvYmplY3QsIG1fZXhlYywgcHJvcCk7
CkBAIC03OTMsNyArNzkzLDcgQEAgTkVWRVJfSU5MSU5FIEpTVmFsdWUgV2Fsa2VyOjp3YWxrKEpT
VmFsdQogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KGZpbmFsSG9sZGVyKTsKICAgICBmaW5hbEhv
bGRlci0+bWV0aG9kVGFibGUodm0pLT5wdXQoZmluYWxIb2xkZXIsIG1fZXhlYywgdm0ucHJvcGVy
dHlOYW1lcy0+ZW1wdHlJZGVudGlmaWVyLCBvdXRWYWx1ZSwgc2xvdCk7CiAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgeyB9KTsKLSAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGNh
bGxSZXZpdmVyKGZpbmFsSG9sZGVyLCBqc0VtcHR5U3RyaW5nKG1fZXhlYyksIG91dFZhbHVlKSk7
CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBjYWxsUmV2aXZlcihmaW5hbEhvbGRlciwg
anNFbXB0eVN0cmluZyh2bSksIG91dFZhbHVlKSk7CiB9CiAKIC8vIEVDTUEtMjYyIHY1IDE1LjEy
LjIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHJl
dmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChD
KSAxOTk5LTIwMDEgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKICAqICBDb3B5cmlnaHQg
KEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKLSAqICBDb3B5cmlnaHQgKEMpIDIw
MDMtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChD
KSAyMDAzLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogIENvcHlyaWdo
dCAoQykgMjAwNyBFcmljIFNlaWRlbCAoZXJpY0B3ZWJraXQub3JnKQogICoKICAqICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBA
IC04Nyw3ICs4Nyw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBnZXRDbGFzc1Byb3BlcnR5TmFtZXMK
IAogICAgICAgICBmb3IgKGF1dG8gaXRlciA9IHRhYmxlLT5iZWdpbigpOyBpdGVyICE9IHRhYmxl
LT5lbmQoKTsgKytpdGVyKSB7CiAgICAgICAgICAgICBpZiAoIShpdGVyLT5hdHRyaWJ1dGVzKCkg
JiBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pIHx8IG1vZGUuaW5jbHVkZURvbnRFbnVtUHJv
cGVydGllcygpKQotICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6
OmZyb21TdHJpbmcoJnZtLCBpdGVyLmtleSgpKSk7CisgICAgICAgICAgICAgICAgcHJvcGVydHlO
YW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgaXRlci5rZXkoKSkpOwogICAgICAg
ICB9CiAgICAgfQogfQpAQCAtNTk4LDEyICs1OTgsMTQgQEAgU3RyaW5nIEpTT2JqZWN0OjpjYWxj
dWxhdGVkQ2xhc3NOYW1lKEpTTwogCiBib29sIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RC
eUluZGV4KEpTT2JqZWN0KiB0aGlzT2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGks
IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworCiAgICAg
Ly8gTkIuIFRoZSBmYWN0IHRoYXQgd2UncmUgZGlyZWN0bHkgY29uc3VsdGluZyBvdXIgaW5kZXhl
ZCBzdG9yYWdlIGltcGxpZXMgdGhhdCBpdCBpcyBub3QKICAgICAvLyBsZWdhbCBmb3IgYW55b25l
IHRvIG92ZXJyaWRlIGdldE93blByb3BlcnR5U2xvdCgpIHdpdGhvdXQgYWxzbyBvdmVycmlkaW5n
CiAgICAgLy8gZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleCgpLgogICAgIAogICAgIGlmIChpID4g
TUFYX0FSUkFZX0lOREVYKQotICAgICAgICByZXR1cm4gdGhpc09iamVjdC0+bWV0aG9kVGFibGUo
ZXhlYy0+dm0oKSktPmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBleGVjLCBJZGVudGlm
aWVyOjpmcm9tKGV4ZWMsIGkpLCBzbG90KTsKKyAgICAgICAgcmV0dXJuIHRoaXNPYmplY3QtPm1l
dGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIElkZW50
aWZpZXI6OmZyb20odm0sIGkpLCBzbG90KTsKICAgICAKICAgICBzd2l0Y2ggKHRoaXNPYmplY3Qt
PmluZGV4aW5nVHlwZSgpKSB7CiAgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQRVM6CkBA
IC04NjIsNyArODY0LDcgQEAgYm9vbCBKU09iamVjdDo6cHV0QnlJbmRleChKU0NlbGwqIGNlbGws
IAogCiAgICAgaWYgKHByb3BlcnR5TmFtZSA+IE1BWF9BUlJBWV9JTkRFWCkgewogICAgICAgICBQ
dXRQcm9wZXJ0eVNsb3Qgc2xvdChjZWxsLCBzaG91bGRUaHJvdyk7Ci0gICAgICAgIHJldHVybiB0
aGlzT2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPnB1dCh0aGlzT2JqZWN0LCBleGVjLCBJZGVudGlm
aWVyOjpmcm9tKGV4ZWMsIHByb3BlcnR5TmFtZSksIHZhbHVlLCBzbG90KTsKKyAgICAgICAgcmV0
dXJuIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+cHV0KHRoaXNPYmplY3QsIGV4ZWMsIElk
ZW50aWZpZXI6OmZyb20odm0sIHByb3BlcnR5TmFtZSksIHZhbHVlLCBzbG90KTsKICAgICB9CiAK
ICAgICB0aGlzT2JqZWN0LT5lbnN1cmVXcml0YWJsZSh2bSk7CkBAIC0yMDIyLDcgKzIwMjQsNyBA
QCBib29sIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlNDCiAgICAgSlNPYmplY3Qq
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNPYmplY3QqPihjZWxsKTsKICAgICAKICAgICBpZiAoaSA+
IE1BWF9BUlJBWV9JTkRFWCkKLSAgICAgICAgcmV0dXJuIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxl
KHZtKS0+ZGVsZXRlUHJvcGVydHkodGhpc09iamVjdCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShl
eGVjLCBpKSk7CisgICAgICAgIHJldHVybiB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmRl
bGV0ZVByb3BlcnR5KHRoaXNPYmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20odm0sIGkpKTsK
ICAgICAKICAgICBzd2l0Y2ggKHRoaXNPYmplY3QtPmluZGV4aW5nTW9kZSgpKSB7CiAgICAgY2Fz
ZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQRVM6CkBAIC0yNDQ2LDcgKzI0NDgsNyBAQCBKU1N0cmlu
ZyogSlNPYmplY3Q6OnRvU3RyaW5nKEV4ZWNTdGF0ZSogCiAgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNWYWx1
ZSBwcmltaXRpdmUgPSB0b1ByaW1pdGl2ZShleGVjLCBQcmVmZXJTdHJpbmcpOwotICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIGpzRW1wdHlTdHJpbmcoZXhlYykpOworICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIGpzRW1wdHlTdHJpbmcodm0pKTsKICAgICBSRUxFQVNFX0FORF9S
RVRVUk4oc2NvcGUsIHByaW1pdGl2ZS50b1N0cmluZyhleGVjKSk7CiB9CiAKQEAgLTI1MTksNyAr
MjUyMSw3IEBAIHZvaWQgSlNPYmplY3Q6OnJlaWZ5QWxsU3RhdGljUHJvcGVydGllcygKIAogICAg
ICAgICBmb3IgKGF1dG8mIHZhbHVlIDogKmhhc2hUYWJsZSkgewogICAgICAgICAgICAgdW5zaWdu
ZWQgYXR0cmlidXRlczsKLSAgICAgICAgICAgIGF1dG8ga2V5ID0gSWRlbnRpZmllcjo6ZnJvbVN0
cmluZygmdm0sIHZhbHVlLm1fa2V5KTsKKyAgICAgICAgICAgIGF1dG8ga2V5ID0gSWRlbnRpZmll
cjo6ZnJvbVN0cmluZyh2bSwgdmFsdWUubV9rZXkpOwogICAgICAgICAgICAgUHJvcGVydHlPZmZz
ZXQgb2Zmc2V0ID0gZ2V0RGlyZWN0T2Zmc2V0KHZtLCBrZXksIGF0dHJpYnV0ZXMpOwogICAgICAg
ICAgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCiAgICAgICAgICAgICAgICAgcmVpZnlT
dGF0aWNQcm9wZXJ0eSh2bSwgaGFzaFRhYmxlLT5jbGFzc0ZvclRoaXMsIGtleSwgdmFsdWUsICp0
aGlzKTsKQEAgLTMwNjQsNyArMzA2Niw3IEBAIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdEluZGV4
U2xvd09yQmV5b24KICAgICBpZiAoIWNhbkRvRmFzdFB1dERpcmVjdEluZGV4KHZtLCB0aGlzKSkg
ewogICAgICAgICBQcm9wZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRvcjsKICAgICAgICAgZGVzY3Jp
cHRvci5zZXREZXNjcmlwdG9yKHZhbHVlLCBhdHRyaWJ1dGVzKTsKLSAgICAgICAgcmV0dXJuIG1l
dGhvZFRhYmxlKHZtKS0+ZGVmaW5lT3duUHJvcGVydHkodGhpcywgZXhlYywgSWRlbnRpZmllcjo6
ZnJvbShleGVjLCBpKSwgZGVzY3JpcHRvciwgbW9kZSA9PSBQdXREaXJlY3RJbmRleFNob3VsZFRo
cm93KTsKKyAgICAgICAgcmV0dXJuIG1ldGhvZFRhYmxlKHZtKS0+ZGVmaW5lT3duUHJvcGVydHko
dGhpcywgZXhlYywgSWRlbnRpZmllcjo6ZnJvbSh2bSwgaSksIGRlc2NyaXB0b3IsIG1vZGUgPT0g
UHV0RGlyZWN0SW5kZXhTaG91bGRUaHJvdyk7CiAgICAgfQogCiAgICAgLy8gaSBzaG91bGQgYmUg
YSB2YWxpZCBhcnJheSBpbmRleCB0aGF0IGlzIG91dHNpZGUgb2YgdGhlIGN1cnJlbnQgdmVjdG9y
LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCShyZXZpc2lv
biAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xOTgsMTEgKzE5OCwxMiBAQCBwdWJsaWM6CiAgICAgLy8gVGhpcyBw
ZXJmb3JtcyB0aGUgRUNNQVNjcmlwdCBTZXQoKSBvcGVyYXRpb24uCiAgICAgQUxXQVlTX0lOTElO
RSBib29sIHB1dEJ5SW5kZXhJbmxpbmUoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0
eU5hbWUsIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCiAgICAgeworICAgICAgICBW
TSYgdm0gPSBleGVjLT52bSgpOwogICAgICAgICBpZiAoY2FuU2V0SW5kZXhRdWlja2x5KHByb3Bl
cnR5TmFtZSwgdmFsdWUpKSB7Ci0gICAgICAgICAgICBzZXRJbmRleFF1aWNrbHkoZXhlYy0+dm0o
KSwgcHJvcGVydHlOYW1lLCB2YWx1ZSk7CisgICAgICAgICAgICBzZXRJbmRleFF1aWNrbHkodm0s
IHByb3BlcnR5TmFtZSwgdmFsdWUpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAg
IH0KLSAgICAgICAgcmV0dXJuIG1ldGhvZFRhYmxlKGV4ZWMtPnZtKCkpLT5wdXRCeUluZGV4KHRo
aXMsIGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNob3VsZFRocm93KTsKKyAgICAgICAgcmV0
dXJuIG1ldGhvZFRhYmxlKHZtKS0+cHV0QnlJbmRleCh0aGlzLCBleGVjLCBwcm9wZXJ0eU5hbWUs
IHZhbHVlLCBzaG91bGRUaHJvdyk7CiAgICAgfQogICAgICAgICAKICAgICAvLyBUaGlzIGlzIHNp
bWlsYXIgdG8gdGhlIHB1dERpcmVjdCogbWV0aG9kczoKQEAgLTE1NDksNyArMTU1MCw3IEBAIGlu
bGluZSBzaXplX3Qgb2Zmc2V0SW5CdXR0ZXJmbHkoUHJvcGVydHkKIAogaW5saW5lIHNpemVfdCBK
U09iamVjdDo6YnV0dGVyZmx5UHJlQ2FwYWNpdHkoKQogewotICAgIFZNJiB2bSA9ICp0aGlzLT52
bSgpOworICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgaWYgKFVOTElLRUxZKGhhc0luZGV4
aW5nSGVhZGVyKHZtKSkpCiAgICAgICAgIHJldHVybiBidXR0ZXJmbHkoKS0+aW5kZXhpbmdIZWFk
ZXIoKS0+cHJlQ2FwYWNpdHkoc3RydWN0dXJlKHZtKSk7CiAgICAgcmV0dXJuIDA7CkBAIC0xNTU3
LDcgKzE1NTgsNyBAQCBpbmxpbmUgc2l6ZV90IEpTT2JqZWN0OjpidXR0ZXJmbHlQcmVDYXBhCiAK
IGlubGluZSBzaXplX3QgSlNPYmplY3Q6OmJ1dHRlcmZseVRvdGFsU2l6ZSgpCiB7Ci0gICAgVk0m
IHZtID0gKnRoaXMtPnZtKCk7CisgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSA9IHRoaXMtPnN0cnVjdHVyZSh2bSk7CiAgICAgQnV0dGVyZmx5KiBidXR0
ZXJmbHkgPSB0aGlzLT5idXR0ZXJmbHkoKTsKICAgICBzaXplX3QgcHJlQ2FwYWNpdHk7CkBAIC0x
NjA2LDEyICsxNjA3LDEyIEBAIENPTVBJTEVfQVNTRVJUKCEoc2l6ZW9mKEpTT2JqZWN0KSAlIHNp
emUKIHRlbXBsYXRlPHVuc2lnbmVkIGNoYXJhY3RlcnNDb3VudD4KIEFMV0FZU19JTkxJTkUgSWRl
bnRpZmllciBtYWtlSWRlbnRpZmllcihWTSYgdm0sIGNvbnN0IGNoYXIgKCZjaGFyYWN0ZXJzKVtj
aGFyYWN0ZXJzQ291bnRdKQogewotICAgIHJldHVybiBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2
bSwgY2hhcmFjdGVycyk7CisgICAgcmV0dXJuIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIGNo
YXJhY3RlcnMpOwogfQogCiBBTFdBWVNfSU5MSU5FIElkZW50aWZpZXIgbWFrZUlkZW50aWZpZXIo
Vk0mIHZtLCBjb25zdCBjaGFyKiBuYW1lKQogewotICAgIHJldHVybiBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKCZ2bSwgbmFtZSk7CisgICAgcmV0dXJuIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0s
IG5hbWUpOwogfQogCiBBTFdBWVNfSU5MSU5FIElkZW50aWZpZXIgbWFrZUlkZW50aWZpZXIoVk0m
LCBjb25zdCBJZGVudGlmaWVyJiBuYW1lKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNQcm9taXNlUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1Byb21pc2VQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyNDkxMjgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb21pc2VQcm90b3R5cGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTc2LDcgKzc2LDcgQEAgSlNQcm9taXNlUHJvdG90eXBlOjpKU1Byb21p
c2VQcm90b3R5cGUoVgogdm9pZCBKU1Byb21pc2VQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZN
JiB2bSwgU3RydWN0dXJlKikKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7Ci0gICAg
cHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPnRvU3RyaW5n
VGFnU3ltYm9sLCBqc1N0cmluZygmdm0sICJQcm9taXNlIiksIFByb3BlcnR5QXR0cmlidXRlOjpE
b250RW51bSB8IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSk7CisgICAgcHV0RGlyZWN0V2l0
aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPnRvU3RyaW5nVGFnU3ltYm9sLCBq
c1N0cmluZyh2bSwgIlByb21pc2UiKSwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtIHwgUHJv
cGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KTsKIH0KIAogdm9pZCBKU1Byb21pc2VQcm90b3R5cGU6
OmFkZE93bkludGVybmFsU2xvdHMoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0y
MDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtNjgsNyArNjgsNyBAQCB2b2lkIEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
cjo6ZmluaXNoQ3JlCiAgICAgQVNTRVJUKG1fZW5kR2VuZXJpY1Byb3BlcnR5SW5kZXggPT0gdmVj
dG9yLnNpemUoKSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZlY3Rvci5zaXplKCk7
ICsraSkgewogICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyID0gdmVjdG9yW2ld
OwotICAgICAgICBtX3Byb3BlcnR5TmFtZXMuZ2V0KClbaV0uc2V0KHZtLCB0aGlzLCBqc1N0cmlu
Zygmdm0sIGlkZW50aWZpZXIuc3RyaW5nKCkpKTsKKyAgICAgICAgbV9wcm9wZXJ0eU5hbWVzLmdl
dCgpW2ldLnNldCh2bSwgdGhpcywganNTdHJpbmcodm0sIGlkZW50aWZpZXIuc3RyaW5nKCkpKTsK
ICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVy
dHlOYW1lRW51bWVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oCShyZXZpc2lvbiAyNDkxMjgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQt
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTExMCw3ICsxMTAsNyBAQCBpbmxpbmUgSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yKiBwcm9wZXJ0CiAKICAgICB1aW50MzJfdCBudW1iZXJTdHJ1Y3R1cmVQcm9wZXJ0
aWVzID0gMDsKIAotICAgIFByb3BlcnR5TmFtZUFycmF5IHByb3BlcnR5TmFtZXMoJnZtLCBQcm9w
ZXJ0eU5hbWVNb2RlOjpTdHJpbmdzLCBQcml2YXRlU3ltYm9sTW9kZTo6RXhjbHVkZSk7CisgICAg
UHJvcGVydHlOYW1lQXJyYXkgcHJvcGVydHlOYW1lcyh2bSwgUHJvcGVydHlOYW1lTW9kZTo6U3Ry
aW5ncywgUHJpdmF0ZVN5bWJvbE1vZGU6OkV4Y2x1ZGUpOwogCiAgICAgaWYgKHN0cnVjdHVyZS0+
Y2FuQWNjZXNzUHJvcGVydGllc1F1aWNrbHlGb3JFbnVtZXJhdGlvbigpICYmIGluZGV4ZWRMZW5n
dGggPT0gYmFzZS0+Z2V0QXJyYXlMZW5ndGgoKSkgewogICAgICAgICBiYXNlLT5tZXRob2RUYWJs
ZSh2bSktPmdldFN0cnVjdHVyZVByb3BlcnR5TmFtZXMoYmFzZSwgZXhlYywgcHJvcGVydHlOYW1l
cywgRW51bWVyYXRpb25Nb2RlKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNSdW5Mb29wVGltZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTUnVuTG9vcFRpbWVyLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNSdW5Mb29wVGltZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMzA3LDggKzMwNyw4IEBAIHZvaWQgSlNSdW5Mb29wVGltZXI6OnRpbWVyRGlkRmlyZSgp
CiAgICAgZG9Xb3JrKCp2bSk7CiB9CiAKLUpTUnVuTG9vcFRpbWVyOjpKU1J1bkxvb3BUaW1lcihW
TSogdm0pCi0gICAgOiBtX2FwaUxvY2sodm0tPmFwaUxvY2soKSkKK0pTUnVuTG9vcFRpbWVyOjpK
U1J1bkxvb3BUaW1lcihWTSYgdm0pCisgICAgOiBtX2FwaUxvY2sodm0uYXBpTG9jaygpKQogewog
fQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1J1bkxvb3BUaW1lci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUnVuTG9vcFRp
bWVyLmgJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTUnVuTG9vcFRpbWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDEyLCAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMDMsNyArMTAzLDcg
QEAgcHVibGljOgogICAgICAgICBIYXNoTWFwPFJlZjxKU0xvY2s+LCBzdGQ6OnVuaXF1ZV9wdHI8
UGVyVk1EYXRhPj4gbV9tYXBwaW5nOwogICAgIH07CiAKLSAgICBKU1J1bkxvb3BUaW1lcihWTSop
OworICAgIEpTUnVuTG9vcFRpbWVyKFZNJik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdmlydHVh
bCB+SlNSdW5Mb29wVGltZXIoKTsKICAgICB2aXJ0dWFsIHZvaWQgZG9Xb3JrKFZNJikgPSAwOwog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuY3BwCShyZXZp
c2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogIENvcHlyaWdodCAoQykg
MTk5OS0yMDAyIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCiAgKiAgQ29weXJpZ2h0IChD
KSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA0
LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykg
MjAwNC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgog
ICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCkBAIC03MSw3ICs3MSw3IEBAIHZvaWQgSlNTdHJpbmc6OmRlc3Ryb3koSlNDZWxsKiBj
ZWxsKQogCiB2b2lkIEpTU3RyaW5nOjpkdW1wVG9TdHJlYW0oY29uc3QgSlNDZWxsKiBjZWxsLCBQ
cmludFN0cmVhbSYgb3V0KQogewotICAgIFZNJiB2bSA9ICpjZWxsLT52bSgpOworICAgIFZNJiB2
bSA9IGNlbGwtPnZtKCk7CiAgICAgY29uc3QgSlNTdHJpbmcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
Y29uc3QgSlNTdHJpbmcqPihjZWxsKTsKICAgICBvdXQucHJpbnRmKCI8JXAsICVzLCBbJXVdLCAi
LCB0aGlzT2JqZWN0LCB0aGlzT2JqZWN0LT5jbGFzc05hbWUodm0pLCB0aGlzT2JqZWN0LT5sZW5n
dGgoKSk7CiAgICAgdWludHB0cl90IHBvaW50ZXIgPSB0aGlzT2JqZWN0LT5tX2ZpYmVyOwpAQCAt
Mjk0LDcgKzI5NCw3IEBAIGNvbnN0IFN0cmluZyYgSlNSb3BlU3RyaW5nOjpyZXNvbHZlUm9wZVcK
IHsKICAgICBBU1NFUlQoaXNSb3BlKCkpOwogICAgIAotICAgIFZNJiB2bSA9ICp0aGlzLT52bSgp
OworICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgaWYgKGlzU3Vic3RyaW5nKCkpIHsKICAg
ICAgICAgQVNTRVJUKCFzdWJzdHJpbmdCYXNlKCktPmlzUm9wZSgpKTsKICAgICAgICAgYXV0byBu
ZXdJbXBsID0gc3Vic3RyaW5nQmFzZSgpLT52YWx1ZUludGVybmFsKCkuc3Vic3RyaW5nU2hhcmlu
Z0ltcGwoc3Vic3RyaW5nT2Zmc2V0KCksIGxlbmd0aCgpKTsKQEAgLTUwMiw3ICs1MDIsNyBAQCBK
U1N0cmluZyoganNTdHJpbmdXaXRoQ2FjaGVTbG93Q2FzZShWTSYgCiAgICAgaWYgKEpTU3RyaW5n
KiBzdHJpbmcgPSB2bS5zdHJpbmdDYWNoZS5nZXQoJnN0cmluZ0ltcGwpKQogICAgICAgICByZXR1
cm4gc3RyaW5nOwogCi0gICAgSlNTdHJpbmcqIHN0cmluZyA9IGpzU3RyaW5nKCZ2bSwgU3RyaW5n
KHN0cmluZ0ltcGwpKTsKKyAgICBKU1N0cmluZyogc3RyaW5nID0ganNTdHJpbmcodm0sIFN0cmlu
ZyhzdHJpbmdJbXBsKSk7CiAgICAgdm0ubGFzdENhY2hlZFN0cmluZy5zZXQodm0sIHN0cmluZyk7
CiAgICAgcmV0dXJuIHN0cmluZzsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTU3RyaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNTdHJpbmcuaAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNTdHJpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsMjYgKzQxLDIxIEBAIGNs
YXNzIEpTU3RyaW5nOwogY2xhc3MgSlNSb3BlU3RyaW5nOwogY2xhc3MgTExJbnRPZmZzZXRzRXh0
cmFjdG9yOwogCi1KU1N0cmluZyoganNFbXB0eVN0cmluZyhWTSopOwotSlNTdHJpbmcqIGpzRW1w
dHlTdHJpbmcoRXhlY1N0YXRlKik7Ci1KU1N0cmluZyoganNTdHJpbmcoVk0qLCBjb25zdCBTdHJp
bmcmKTsgLy8gcmV0dXJucyBlbXB0eSBzdHJpbmcgaWYgcGFzc2VkIG51bGwgc3RyaW5nCi1KU1N0
cmluZyoganNTdHJpbmcoRXhlY1N0YXRlKiwgY29uc3QgU3RyaW5nJik7IC8vIHJldHVybnMgZW1w
dHkgc3RyaW5nIGlmIHBhc3NlZCBudWxsIHN0cmluZwotCi1KU1N0cmluZyoganNTaW5nbGVDaGFy
YWN0ZXJTdHJpbmcoVk0qLCBVQ2hhcik7Ci1KU1N0cmluZyoganNTaW5nbGVDaGFyYWN0ZXJTdHJp
bmcoRXhlY1N0YXRlKiwgVUNoYXIpOwotSlNTdHJpbmcqIGpzU3Vic3RyaW5nKFZNKiwgY29uc3Qg
U3RyaW5nJiwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOworSlNTdHJpbmcqIGpz
RW1wdHlTdHJpbmcoVk0mKTsKK0pTU3RyaW5nKiBqc1N0cmluZyhWTSYsIGNvbnN0IFN0cmluZyYp
OyAvLyByZXR1cm5zIGVtcHR5IHN0cmluZyBpZiBwYXNzZWQgbnVsbCBzdHJpbmcKKworSlNTdHJp
bmcqIGpzU2luZ2xlQ2hhcmFjdGVyU3RyaW5nKFZNJiwgVUNoYXIpOworSlNTdHJpbmcqIGpzU3Vi
c3RyaW5nKFZNJiwgY29uc3QgU3RyaW5nJiwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5n
dGgpOwogCiAvLyBOb24tdHJpdmlhbCBzdHJpbmdzIGFyZSB0d28gb3IgbW9yZSBjaGFyYWN0ZXJz
IGxvbmcuCiAvLyBUaGVzZSBmdW5jdGlvbnMgYXJlIGZhc3RlciB0aGFuIGp1c3QgY2FsbGluZyBq
c1N0cmluZy4KLUpTU3RyaW5nKiBqc05vbnRyaXZpYWxTdHJpbmcoVk0qLCBjb25zdCBTdHJpbmcm
KTsKLUpTU3RyaW5nKiBqc05vbnRyaXZpYWxTdHJpbmcoRXhlY1N0YXRlKiwgY29uc3QgU3RyaW5n
Jik7Ci1KU1N0cmluZyoganNOb250cml2aWFsU3RyaW5nKEV4ZWNTdGF0ZSosIFN0cmluZyYmKTsK
K0pTU3RyaW5nKiBqc05vbnRyaXZpYWxTdHJpbmcoVk0mLCBjb25zdCBTdHJpbmcmKTsKK0pTU3Ry
aW5nKiBqc05vbnRyaXZpYWxTdHJpbmcoVk0mLCBTdHJpbmcmJik7CiAKIC8vIFNob3VsZCBiZSB1
c2VkIGZvciBzdHJpbmdzIHRoYXQgYXJlIG93bmVkIGJ5IGFuIG9iamVjdCB0aGF0IHdpbGwKIC8v
IGxpa2VseSBvdXRsaXZlIHRoZSBKU1ZhbHVlIHRoaXMgbWFrZXMsIHN1Y2ggYXMgdGhlIHBhcnNl
IHRyZWUgb3IgYQogLy8gRE9NIG9iamVjdCB0aGF0IGNvbnRhaW5zIGEgU3RyaW5nCi1KU1N0cmlu
ZyoganNPd25lZFN0cmluZyhWTSosIGNvbnN0IFN0cmluZyYpOwotSlNTdHJpbmcqIGpzT3duZWRT
dHJpbmcoRXhlY1N0YXRlKiwgY29uc3QgU3RyaW5nJik7CitKU1N0cmluZyoganNPd25lZFN0cmlu
ZyhWTSYsIGNvbnN0IFN0cmluZyYpOwogCiBib29sIGlzSlNTdHJpbmcoSlNDZWxsKik7CiBib29s
IGlzSlNTdHJpbmcoSlNWYWx1ZSk7CkBAIC0yMzgsMjAgKzIzMywyMCBAQCBwcml2YXRlOgogCiAg
ICAgU3RyaW5nVmlldyB1bnNhZmVWaWV3KEV4ZWNTdGF0ZSopIGNvbnN0OwogCi0gICAgZnJpZW5k
IEpTU3RyaW5nKiBqc1N0cmluZyhWTSosIGNvbnN0IFN0cmluZyYpOworICAgIGZyaWVuZCBKU1N0
cmluZyoganNTdHJpbmcoVk0mLCBjb25zdCBTdHJpbmcmKTsKICAgICBmcmllbmQgSlNTdHJpbmcq
IGpzU3RyaW5nKEV4ZWNTdGF0ZSosIEpTU3RyaW5nKiwgSlNTdHJpbmcqKTsKICAgICBmcmllbmQg
SlNTdHJpbmcqIGpzU3RyaW5nKEV4ZWNTdGF0ZSosIGNvbnN0IFN0cmluZyYsIEpTU3RyaW5nKik7
CiAgICAgZnJpZW5kIEpTU3RyaW5nKiBqc1N0cmluZyhFeGVjU3RhdGUqLCBKU1N0cmluZyosIGNv
bnN0IFN0cmluZyYpOwogICAgIGZyaWVuZCBKU1N0cmluZyoganNTdHJpbmcoRXhlY1N0YXRlKiwg
Y29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJik7CiAgICAgZnJpZW5kIEpTU3RyaW5nKiBqc1N0
cmluZyhFeGVjU3RhdGUqLCBKU1N0cmluZyosIEpTU3RyaW5nKiwgSlNTdHJpbmcqKTsKICAgICBm
cmllbmQgSlNTdHJpbmcqIGpzU3RyaW5nKEV4ZWNTdGF0ZSosIGNvbnN0IFN0cmluZyYsIGNvbnN0
IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpOwotICAgIGZyaWVuZCBKU1N0cmluZyoganNTaW5nbGVD
aGFyYWN0ZXJTdHJpbmcoVk0qLCBVQ2hhcik7Ci0gICAgZnJpZW5kIEpTU3RyaW5nKiBqc05vbnRy
aXZpYWxTdHJpbmcoVk0qLCBjb25zdCBTdHJpbmcmKTsKLSAgICBmcmllbmQgSlNTdHJpbmcqIGpz
Tm9udHJpdmlhbFN0cmluZyhWTSosIFN0cmluZyYmKTsKLSAgICBmcmllbmQgSlNTdHJpbmcqIGpz
U3Vic3RyaW5nKFZNKiwgY29uc3QgU3RyaW5nJiwgdW5zaWduZWQsIHVuc2lnbmVkKTsKKyAgICBm
cmllbmQgSlNTdHJpbmcqIGpzU2luZ2xlQ2hhcmFjdGVyU3RyaW5nKFZNJiwgVUNoYXIpOworICAg
IGZyaWVuZCBKU1N0cmluZyoganNOb250cml2aWFsU3RyaW5nKFZNJiwgY29uc3QgU3RyaW5nJik7
CisgICAgZnJpZW5kIEpTU3RyaW5nKiBqc05vbnRyaXZpYWxTdHJpbmcoVk0mLCBTdHJpbmcmJik7
CisgICAgZnJpZW5kIEpTU3RyaW5nKiBqc1N1YnN0cmluZyhWTSYsIGNvbnN0IFN0cmluZyYsIHVu
c2lnbmVkLCB1bnNpZ25lZCk7CiAgICAgZnJpZW5kIEpTU3RyaW5nKiBqc1N1YnN0cmluZyhWTSYs
IEV4ZWNTdGF0ZSosIEpTU3RyaW5nKiwgdW5zaWduZWQsIHVuc2lnbmVkKTsKICAgICBmcmllbmQg
SlNTdHJpbmcqIGpzU3Vic3RyaW5nT2ZSZXNvbHZlZChWTSYsIEdDRGVmZXJyYWxDb250ZXh0Kiwg
SlNTdHJpbmcqLCB1bnNpZ25lZCwgdW5zaWduZWQpOwotICAgIGZyaWVuZCBKU1N0cmluZyoganNP
d25lZFN0cmluZyhWTSosIGNvbnN0IFN0cmluZyYpOworICAgIGZyaWVuZCBKU1N0cmluZyoganNP
d25lZFN0cmluZyhWTSYsIGNvbnN0IFN0cmluZyYpOwogfTsKIAogLy8gTk9URTogVGhpcyBjbGFz
cyBjYW5ub3Qgb3ZlcnJpZGUgSlNTdHJpbmcncyBkZXN0cnVjdG9yLiBKU1N0cmluZydzIGRlc3Ry
dWN0b3IgaXMgY2FsbGVkIGRpcmVjdGx5CkBAIC00MDIsNyArMzk3LDcgQEAgcHVibGljOgogICAg
ICAgICAgICAgc3dpdGNoIChtX3N0cmluZ3Muc2l6ZSgpKSB7CiAgICAgICAgICAgICBjYXNlIDA6
IHsKICAgICAgICAgICAgICAgICBBU1NFUlQoIW1fbGVuZ3RoKTsKLSAgICAgICAgICAgICAgICBy
ZXN1bHQgPSBqc0VtcHR5U3RyaW5nKCZtX3ZtKTsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBq
c0VtcHR5U3RyaW5nKG1fdm0pOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgY2FzZSAxOiB7CkBAIC03MTksNDEgKzcxNCw0MiBAQCBpbmxpbmUgSlNT
dHJpbmcqIGFzU3RyaW5nKEpTVmFsdWUgdmFsdWUpCiB9CiAKIC8vIFRoaXMgTVVTVCBOT1QgR0Mu
Ci1pbmxpbmUgSlNTdHJpbmcqIGpzRW1wdHlTdHJpbmcoVk0qIHZtKQoraW5saW5lIEpTU3RyaW5n
KiBqc0VtcHR5U3RyaW5nKFZNJiB2bSkKIHsKLSAgICByZXR1cm4gdm0tPnNtYWxsU3RyaW5ncy5l
bXB0eVN0cmluZygpOworICAgIHJldHVybiB2bS5zbWFsbFN0cmluZ3MuZW1wdHlTdHJpbmcoKTsK
IH0KIAotQUxXQVlTX0lOTElORSBKU1N0cmluZyoganNTaW5nbGVDaGFyYWN0ZXJTdHJpbmcoVk0q
IHZtLCBVQ2hhciBjKQorQUxXQVlTX0lOTElORSBKU1N0cmluZyoganNTaW5nbGVDaGFyYWN0ZXJT
dHJpbmcoVk0mIHZtLCBVQ2hhciBjKQogewogICAgIGlmICh2YWxpZGF0ZURGR0RvZXNHQykKLSAg
ICAgICAgUkVMRUFTRV9BU1NFUlQodm0tPmhlYXAuZXhwZWN0RG9lc0dDKCkpOworICAgICAgICBS
RUxFQVNFX0FTU0VSVCh2bS5oZWFwLmV4cGVjdERvZXNHQygpKTsKICAgICBpZiAoYyA8PSBtYXhT
aW5nbGVDaGFyYWN0ZXJTdHJpbmcpCi0gICAgICAgIHJldHVybiB2bS0+c21hbGxTdHJpbmdzLnNp
bmdsZUNoYXJhY3RlclN0cmluZyhjKTsKLSAgICByZXR1cm4gSlNTdHJpbmc6OmNyZWF0ZSgqdm0s
IFN0cmluZ0ltcGw6OmNyZWF0ZSgmYywgMSkpOworICAgICAgICByZXR1cm4gdm0uc21hbGxTdHJp
bmdzLnNpbmdsZUNoYXJhY3RlclN0cmluZyhjKTsKKyAgICByZXR1cm4gSlNTdHJpbmc6OmNyZWF0
ZSh2bSwgU3RyaW5nSW1wbDo6Y3JlYXRlKCZjLCAxKSk7CiB9CiAKLWlubGluZSBKU1N0cmluZyog
anNOb250cml2aWFsU3RyaW5nKFZNKiB2bSwgY29uc3QgU3RyaW5nJiBzKQoraW5saW5lIEpTU3Ry
aW5nKiBqc05vbnRyaXZpYWxTdHJpbmcoVk0mIHZtLCBjb25zdCBTdHJpbmcmIHMpCiB7CiAgICAg
QVNTRVJUKHMubGVuZ3RoKCkgPiAxKTsKLSAgICByZXR1cm4gSlNTdHJpbmc6OmNyZWF0ZSgqdm0s
ICpzLmltcGwoKSk7CisgICAgcmV0dXJuIEpTU3RyaW5nOjpjcmVhdGUodm0sICpzLmltcGwoKSk7
CiB9CiAKLWlubGluZSBKU1N0cmluZyoganNOb250cml2aWFsU3RyaW5nKFZNKiB2bSwgU3RyaW5n
JiYgcykKK2lubGluZSBKU1N0cmluZyoganNOb250cml2aWFsU3RyaW5nKFZNJiB2bSwgU3RyaW5n
JiYgcykKIHsKICAgICBBU1NFUlQocy5sZW5ndGgoKSA+IDEpOwotICAgIHJldHVybiBKU1N0cmlu
Zzo6Y3JlYXRlKCp2bSwgcy5yZWxlYXNlSW1wbCgpLnJlbGVhc2VOb25OdWxsKCkpOworICAgIHJl
dHVybiBKU1N0cmluZzo6Y3JlYXRlKHZtLCBzLnJlbGVhc2VJbXBsKCkucmVsZWFzZU5vbk51bGwo
KSk7CiB9CiAKIEFMV0FZU19JTkxJTkUgSWRlbnRpZmllciBKU1N0cmluZzo6dG9JZGVudGlmaWVy
KEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKIHsKLSAgICByZXR1cm4gSWRlbnRpZmllcjo6ZnJvbVN0
cmluZyhleGVjLCB0b0F0b21TdHJpbmcoZXhlYykpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CisgICAgcmV0dXJuIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHRvQXRvbVN0cmluZyhleGVj
KSk7CiB9CiAKIEFMV0FZU19JTkxJTkUgQXRvbVN0cmluZyBKU1N0cmluZzo6dG9BdG9tU3RyaW5n
KEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKIHsKICAgICBpZiAodmFsaWRhdGVERkdEb2VzR0MpCi0g
ICAgICAgIFJFTEVBU0VfQVNTRVJUKHZtKCktPmhlYXAuZXhwZWN0RG9lc0dDKCkpOworICAgICAg
ICBSRUxFQVNFX0FTU0VSVCh2bSgpLmhlYXAuZXhwZWN0RG9lc0dDKCkpOwogICAgIGlmIChpc1Jv
cGUoKSkKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IEpTUm9wZVN0cmluZyo+KHRo
aXMpLT5yZXNvbHZlUm9wZVRvQXRvbVN0cmluZyhleGVjKTsKICAgICByZXR1cm4gQXRvbVN0cmlu
Zyh2YWx1ZUludGVybmFsKCkpOwpAQCAtNzYyLDcgKzc1OCw3IEBAIEFMV0FZU19JTkxJTkUgQXRv
bVN0cmluZyBKU1N0cmluZzo6dG9BdG8KIEFMV0FZU19JTkxJTkUgUmVmUHRyPEF0b21TdHJpbmdJ
bXBsPiBKU1N0cmluZzo6dG9FeGlzdGluZ0F0b21TdHJpbmcoRXhlY1N0YXRlKiBleGVjKSBjb25z
dAogewogICAgIGlmICh2YWxpZGF0ZURGR0RvZXNHQykKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQo
dm0oKS0+aGVhcC5leHBlY3REb2VzR0MoKSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHZtKCku
aGVhcC5leHBlY3REb2VzR0MoKSk7CiAgICAgaWYgKGlzUm9wZSgpKQogICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8Y29uc3QgSlNSb3BlU3RyaW5nKj4odGhpcyktPnJlc29sdmVSb3BlVG9FeGlz
dGluZ0F0b21TdHJpbmcoZXhlYyk7CiAgICAgaWYgKHZhbHVlSW50ZXJuYWwoKS5pbXBsKCktPmlz
QXRvbSgpKQpAQCAtNzczLDcgKzc2OSw3IEBAIEFMV0FZU19JTkxJTkUgUmVmUHRyPEF0b21TdHJp
bmdJbXBsPiBKU1MKIGlubGluZSBjb25zdCBTdHJpbmcmIEpTU3RyaW5nOjp2YWx1ZShFeGVjU3Rh
dGUqIGV4ZWMpIGNvbnN0CiB7CiAgICAgaWYgKHZhbGlkYXRlREZHRG9lc0dDKQotICAgICAgICBS
RUxFQVNFX0FTU0VSVCh2bSgpLT5oZWFwLmV4cGVjdERvZXNHQygpKTsKKyAgICAgICAgUkVMRUFT
RV9BU1NFUlQodm0oKS5oZWFwLmV4cGVjdERvZXNHQygpKTsKICAgICBpZiAoaXNSb3BlKCkpCiAg
ICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBKU1JvcGVTdHJpbmcqPih0aGlzKS0+cmVz
b2x2ZVJvcGUoZXhlYyk7CiAgICAgcmV0dXJuIHZhbHVlSW50ZXJuYWwoKTsKQEAgLTc4Myw3ICs3
NzksNyBAQCBpbmxpbmUgY29uc3QgU3RyaW5nJiBKU1N0cmluZzo6dHJ5R2V0VmFsCiB7CiAgICAg
aWYgKGFsbG9jYXRpb25BbGxvd2VkKSB7CiAgICAgICAgIGlmICh2YWxpZGF0ZURGR0RvZXNHQykK
LSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHZtKCktPmhlYXAuZXhwZWN0RG9lc0dDKCkpOwor
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQodm0oKS5oZWFwLmV4cGVjdERvZXNHQygpKTsKICAg
ICAgICAgaWYgKGlzUm9wZSgpKSB7CiAgICAgICAgICAgICAvLyBQYXNzIG51bGxwdHIgZm9yIHRo
ZSBFeGVjU3RhdGUgc28gdGhhdCByZXNvbHZlUm9wZSBkb2VzIG5vdCB0aHJvdyBpbiB0aGUgZXZl
bnQgb2YgYW4gT09NIGVycm9yLgogICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0
IEpTUm9wZVN0cmluZyo+KHRoaXMpLT5yZXNvbHZlUm9wZShudWxscHRyKTsKQEAgLTgwMCwyMCAr
Nzk2LDIwIEBAIGlubGluZSBKU1N0cmluZyogSlNTdHJpbmc6OmdldEluZGV4KEV4ZWMKICAgICBB
U1NFUlQoY2FuR2V0SW5kZXgoaSkpOwogICAgIFN0cmluZ1ZpZXcgdmlldyA9IHVuc2FmZVZpZXco
ZXhlYyk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7Ci0gICAgcmV0
dXJuIGpzU2luZ2xlQ2hhcmFjdGVyU3RyaW5nKGV4ZWMsIHZpZXdbaV0pOworICAgIHJldHVybiBq
c1NpbmdsZUNoYXJhY3RlclN0cmluZyh2bSwgdmlld1tpXSk7CiB9CiAKLWlubGluZSBKU1N0cmlu
ZyoganNTdHJpbmcoVk0qIHZtLCBjb25zdCBTdHJpbmcmIHMpCitpbmxpbmUgSlNTdHJpbmcqIGpz
U3RyaW5nKFZNJiB2bSwgY29uc3QgU3RyaW5nJiBzKQogewogICAgIGludCBzaXplID0gcy5sZW5n
dGgoKTsKICAgICBpZiAoIXNpemUpCi0gICAgICAgIHJldHVybiB2bS0+c21hbGxTdHJpbmdzLmVt
cHR5U3RyaW5nKCk7CisgICAgICAgIHJldHVybiB2bS5zbWFsbFN0cmluZ3MuZW1wdHlTdHJpbmco
KTsKICAgICBpZiAoc2l6ZSA9PSAxKSB7CiAgICAgICAgIFVDaGFyIGMgPSBzLmNoYXJhY3RlckF0
KDApOwogICAgICAgICBpZiAoYyA8PSBtYXhTaW5nbGVDaGFyYWN0ZXJTdHJpbmcpCi0gICAgICAg
ICAgICByZXR1cm4gdm0tPnNtYWxsU3RyaW5ncy5zaW5nbGVDaGFyYWN0ZXJTdHJpbmcoYyk7Cisg
ICAgICAgICAgICByZXR1cm4gdm0uc21hbGxTdHJpbmdzLnNpbmdsZUNoYXJhY3RlclN0cmluZyhj
KTsKICAgICB9Ci0gICAgcmV0dXJuIEpTU3RyaW5nOjpjcmVhdGUoKnZtLCAqcy5pbXBsKCkpOwor
ICAgIHJldHVybiBKU1N0cmluZzo6Y3JlYXRlKHZtLCAqcy5pbXBsKCkpOwogfQogCiBpbmxpbmUg
SlNTdHJpbmcqIGpzU3Vic3RyaW5nKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBKU1N0cmluZyog
YmFzZSwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCkBAIC04NzIsNTAgKzg2OCw0
MyBAQCBpbmxpbmUgSlNTdHJpbmcqIGpzU3Vic3RyaW5nKEV4ZWNTdGF0ZSogCiAgICAgcmV0dXJu
IGpzU3Vic3RyaW5nKGV4ZWMtPnZtKCksIGV4ZWMsIHMsIG9mZnNldCwgbGVuZ3RoKTsKIH0KIAot
aW5saW5lIEpTU3RyaW5nKiBqc1N1YnN0cmluZyhWTSogdm0sIGNvbnN0IFN0cmluZyYgcywgdW5z
aWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCitpbmxpbmUgSlNTdHJpbmcqIGpzU3Vic3Ry
aW5nKFZNJiB2bSwgY29uc3QgU3RyaW5nJiBzLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxl
bmd0aCkKIHsKICAgICBBU1NFUlQob2Zmc2V0IDw9IHMubGVuZ3RoKCkpOwogICAgIEFTU0VSVChs
ZW5ndGggPD0gcy5sZW5ndGgoKSk7CiAgICAgQVNTRVJUKG9mZnNldCArIGxlbmd0aCA8PSBzLmxl
bmd0aCgpKTsKICAgICBpZiAoIWxlbmd0aCkKLSAgICAgICAgcmV0dXJuIHZtLT5zbWFsbFN0cmlu
Z3MuZW1wdHlTdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIHZtLnNtYWxsU3RyaW5ncy5lbXB0eVN0
cmluZygpOwogICAgIGlmIChsZW5ndGggPT0gMSkgewogICAgICAgICBVQ2hhciBjID0gcy5jaGFy
YWN0ZXJBdChvZmZzZXQpOwogICAgICAgICBpZiAoYyA8PSBtYXhTaW5nbGVDaGFyYWN0ZXJTdHJp
bmcpCi0gICAgICAgICAgICByZXR1cm4gdm0tPnNtYWxsU3RyaW5ncy5zaW5nbGVDaGFyYWN0ZXJT
dHJpbmcoYyk7CisgICAgICAgICAgICByZXR1cm4gdm0uc21hbGxTdHJpbmdzLnNpbmdsZUNoYXJh
Y3RlclN0cmluZyhjKTsKICAgICB9CiAgICAgYXV0byBpbXBsID0gU3RyaW5nSW1wbDo6Y3JlYXRl
U3Vic3RyaW5nU2hhcmluZ0ltcGwoKnMuaW1wbCgpLCBvZmZzZXQsIGxlbmd0aCk7CiAgICAgaWYg
KGltcGwtPmlzU3ViU3RyaW5nKCkpCi0gICAgICAgIHJldHVybiBKU1N0cmluZzo6Y3JlYXRlSGFz
T3RoZXJPd25lcigqdm0sIFdURk1vdmUoaW1wbCkpOwotICAgIHJldHVybiBKU1N0cmluZzo6Y3Jl
YXRlKCp2bSwgV1RGTW92ZShpbXBsKSk7CisgICAgICAgIHJldHVybiBKU1N0cmluZzo6Y3JlYXRl
SGFzT3RoZXJPd25lcih2bSwgV1RGTW92ZShpbXBsKSk7CisgICAgcmV0dXJuIEpTU3RyaW5nOjpj
cmVhdGUodm0sIFdURk1vdmUoaW1wbCkpOwogfQogCi1pbmxpbmUgSlNTdHJpbmcqIGpzT3duZWRT
dHJpbmcoVk0qIHZtLCBjb25zdCBTdHJpbmcmIHMpCitpbmxpbmUgSlNTdHJpbmcqIGpzT3duZWRT
dHJpbmcoVk0mIHZtLCBjb25zdCBTdHJpbmcmIHMpCiB7CiAgICAgaW50IHNpemUgPSBzLmxlbmd0
aCgpOwogICAgIGlmICghc2l6ZSkKLSAgICAgICAgcmV0dXJuIHZtLT5zbWFsbFN0cmluZ3MuZW1w
dHlTdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIHZtLnNtYWxsU3RyaW5ncy5lbXB0eVN0cmluZygp
OwogICAgIGlmIChzaXplID09IDEpIHsKICAgICAgICAgVUNoYXIgYyA9IHMuY2hhcmFjdGVyQXQo
MCk7CiAgICAgICAgIGlmIChjIDw9IG1heFNpbmdsZUNoYXJhY3RlclN0cmluZykKLSAgICAgICAg
ICAgIHJldHVybiB2bS0+c21hbGxTdHJpbmdzLnNpbmdsZUNoYXJhY3RlclN0cmluZyhjKTsKKyAg
ICAgICAgICAgIHJldHVybiB2bS5zbWFsbFN0cmluZ3Muc2luZ2xlQ2hhcmFjdGVyU3RyaW5nKGMp
OwogICAgIH0KLSAgICByZXR1cm4gSlNTdHJpbmc6OmNyZWF0ZUhhc090aGVyT3duZXIoKnZtLCAq
cy5pbXBsKCkpOworICAgIHJldHVybiBKU1N0cmluZzo6Y3JlYXRlSGFzT3RoZXJPd25lcih2bSwg
KnMuaW1wbCgpKTsKIH0KIAotaW5saW5lIEpTU3RyaW5nKiBqc0VtcHR5U3RyaW5nKEV4ZWNTdGF0
ZSogZXhlYykgeyByZXR1cm4ganNFbXB0eVN0cmluZygmZXhlYy0+dm0oKSk7IH0KLWlubGluZSBK
U1N0cmluZyoganNTdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcmIHMpIHsgcmV0
dXJuIGpzU3RyaW5nKCZleGVjLT52bSgpLCBzKTsgfQotaW5saW5lIEpTU3RyaW5nKiBqc1Npbmds
ZUNoYXJhY3RlclN0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIFVDaGFyIGMpIHsgcmV0dXJuIGpzU2lu
Z2xlQ2hhcmFjdGVyU3RyaW5nKCZleGVjLT52bSgpLCBjKTsgfQotaW5saW5lIEpTU3RyaW5nKiBq
c05vbnRyaXZpYWxTdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcmIHMpIHsgcmV0
dXJuIGpzTm9udHJpdmlhbFN0cmluZygmZXhlYy0+dm0oKSwgcyk7IH0KLWlubGluZSBKU1N0cmlu
ZyoganNOb250cml2aWFsU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgU3RyaW5nJiYgcykgeyByZXR1
cm4ganNOb250cml2aWFsU3RyaW5nKCZleGVjLT52bSgpLCBXVEZNb3ZlKHMpKTsgfQotaW5saW5l
IEpTU3RyaW5nKiBqc093bmVkU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU3RyaW5nJiBz
KSB7IHJldHVybiBqc093bmVkU3RyaW5nKCZleGVjLT52bSgpLCBzKTsgfQotCiBBTFdBWVNfSU5M
SU5FIEpTU3RyaW5nKiBqc1N0cmluZ1dpdGhDYWNoZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFN0
cmluZyYgcykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIFN0cmluZ0ltcGwqIHN0
cmluZ0ltcGwgPSBzLmltcGwoKTsKICAgICBpZiAoIXN0cmluZ0ltcGwgfHwgIXN0cmluZ0ltcGwt
Pmxlbmd0aCgpKQotICAgICAgICByZXR1cm4ganNFbXB0eVN0cmluZygmdm0pOworICAgICAgICBy
ZXR1cm4ganNFbXB0eVN0cmluZyh2bSk7CiAKICAgICBpZiAoc3RyaW5nSW1wbC0+bGVuZ3RoKCkg
PT0gMSkgewogICAgICAgICBVQ2hhciBzaW5nbGVDaGFyYWN0ZXIgPSAoKnN0cmluZ0ltcGwpWzB1
XTsKQEAgLTk4MCw3ICs5NjksNyBAQCBpbmxpbmUgYm9vbCBpc0pTU3RyaW5nKEpTVmFsdWUgdikK
IEFMV0FZU19JTkxJTkUgU3RyaW5nVmlldyBKU1JvcGVTdHJpbmc6OnVuc2FmZVZpZXcoRXhlY1N0
YXRlKiBleGVjKSBjb25zdAogewogICAgIGlmICh2YWxpZGF0ZURGR0RvZXNHQykKLSAgICAgICAg
UkVMRUFTRV9BU1NFUlQodm0oKS0+aGVhcC5leHBlY3REb2VzR0MoKSk7CisgICAgICAgIFJFTEVB
U0VfQVNTRVJUKHZtKCkuaGVhcC5leHBlY3REb2VzR0MoKSk7CiAgICAgaWYgKGlzU3Vic3RyaW5n
KCkpIHsKICAgICAgICAgYXV0byYgYmFzZSA9IHN1YnN0cmluZ0Jhc2UoKS0+dmFsdWVJbnRlcm5h
bCgpOwogICAgICAgICBpZiAoYmFzZS5pczhCaXQoKSkKQEAgLTk5Myw3ICs5ODIsNyBAQCBBTFdB
WVNfSU5MSU5FIFN0cmluZ1ZpZXcgSlNSb3BlU3RyaW5nOjp1CiBBTFdBWVNfSU5MSU5FIFN0cmlu
Z1ZpZXdXaXRoVW5kZXJseWluZ1N0cmluZyBKU1JvcGVTdHJpbmc6OnZpZXdXaXRoVW5kZXJseWlu
Z1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiB7CiAgICAgaWYgKHZhbGlkYXRlREZHRG9l
c0dDKQotICAgICAgICBSRUxFQVNFX0FTU0VSVCh2bSgpLT5oZWFwLmV4cGVjdERvZXNHQygpKTsK
KyAgICAgICAgUkVMRUFTRV9BU1NFUlQodm0oKS5oZWFwLmV4cGVjdERvZXNHQygpKTsKICAgICBp
ZiAoaXNTdWJzdHJpbmcoKSkgewogICAgICAgICBhdXRvJiBiYXNlID0gc3Vic3RyaW5nQmFzZSgp
LT52YWx1ZUludGVybmFsKCk7CiAgICAgICAgIGlmIChiYXNlLmlzOEJpdCgpKQpAQCAtMTAwNyw3
ICs5OTYsNyBAQCBBTFdBWVNfSU5MSU5FIFN0cmluZ1ZpZXdXaXRoVW5kZXJseWluZ1N0CiBBTFdB
WVNfSU5MSU5FIFN0cmluZ1ZpZXcgSlNTdHJpbmc6OnVuc2FmZVZpZXcoRXhlY1N0YXRlKiBleGVj
KSBjb25zdAogewogICAgIGlmICh2YWxpZGF0ZURGR0RvZXNHQykKLSAgICAgICAgUkVMRUFTRV9B
U1NFUlQodm0oKS0+aGVhcC5leHBlY3REb2VzR0MoKSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJU
KHZtKCkuaGVhcC5leHBlY3REb2VzR0MoKSk7CiAgICAgaWYgKGlzUm9wZSgpKQogICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgSlNSb3BlU3RyaW5nKj4odGhpcyktPnVuc2FmZVZpZXco
ZXhlYyk7CiAgICAgcmV0dXJuIHZhbHVlSW50ZXJuYWwoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSW5saW5lcy5oCShyZXZpc2lvbiAyNDkxMjgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZ0lubGluZXMuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAx
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYt
MjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTQ0LDkgKzQ0LDkgQEAgYm9vbCBKU1N0cmluZzo6ZXF1YWwoRXhlY1N0
YXRlKiBleGVjLCBKUwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBTdHJpbmdUeXBlPgotaW5saW5l
IEpTVmFsdWUganNNYWtlTm9udHJpdmlhbFN0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIFN0cmluZ1R5
cGUmJiBzdHJpbmcpCitpbmxpbmUgSlNWYWx1ZSBqc01ha2VOb250cml2aWFsU3RyaW5nKFZNJiB2
bSwgU3RyaW5nVHlwZSYmIHN0cmluZykKIHsKLSAgICByZXR1cm4ganNOb250cml2aWFsU3RyaW5n
KGV4ZWMsIHN0ZDo6Zm9yd2FyZDxTdHJpbmdUeXBlPihzdHJpbmcpKTsKKyAgICByZXR1cm4ganNO
b250cml2aWFsU3RyaW5nKHZtLCBzdGQ6OmZvcndhcmQ8U3RyaW5nVHlwZT4oc3RyaW5nKSk7CiB9
CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFN0cmluZ1R5cGUsIHR5cGVuYW1lLi4uIFN0cmluZ1R5cGVz
PgpAQCAtNTgsNyArNTgsNyBAQCBpbmxpbmUgSlNWYWx1ZSBqc01ha2VOb250cml2aWFsU3RyaW5n
KEV4CiAgICAgaWYgKFVOTElLRUxZKCFyZXN1bHQpKQogICAgICAgICByZXR1cm4gdGhyb3dPdXRP
Zk1lbW9yeUVycm9yKGV4ZWMsIHNjb3BlKTsKICAgICBBU1NFUlQocmVzdWx0Lmxlbmd0aCgpIDw9
IEpTU3RyaW5nOjpNYXhMZW5ndGgpOwotICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcoZXhl
YywgV1RGTW92ZShyZXN1bHQpKTsKKyAgICByZXR1cm4ganNOb250cml2aWFsU3RyaW5nKHZtLCBX
VEZNb3ZlKHJlc3VsdCkpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4K
QEAgLTc2LDcgKzc2LDcgQEAgaW5saW5lIEpTU3RyaW5nKiByZXBlYXRDaGFyYWN0ZXIoRXhlY1N0
YQogCiAgICAgc3RkOjpmaWxsX24oYnVmZmVyLCByZXBlYXRDb3VudCwgY2hhcmFjdGVyKTsKIAot
ICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwganNTdHJpbmcoJmV4ZWMsIFdURk1vdmUoaW1w
bCkpKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGpzU3RyaW5nKHZtLCBXVEZNb3Zl
KGltcGwpKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdKb2luZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSm9pbmVyLmNwcAkocmV2aXNpb24gMjQ5MTI4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdKb2luZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
Mi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMTExLDcgKzExMSw3IEBAIEpTVmFsdWUgSlNTdHJpbmdKb2luZXI6
OmpvaW4oRXhlY1N0YXRlJiAKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVl
KCkpOwogCiAgICAgaWYgKCFsZW5ndGgpCi0gICAgICAgIHJldHVybiBqc0VtcHR5U3RyaW5nKCZz
dGF0ZSk7CisgICAgICAgIHJldHVybiBqc0VtcHR5U3RyaW5nKHZtKTsKIAogICAgIFN0cmluZyBy
ZXN1bHQ7CiAgICAgaWYgKG1faXNBbGw4Qml0KQpAQCAtMTIyLDcgKzEyMiw3IEBAIEpTVmFsdWUg
SlNTdHJpbmdKb2luZXI6OmpvaW4oRXhlY1N0YXRlJiAKICAgICBpZiAocmVzdWx0LmlzTnVsbCgp
KQogICAgICAgICByZXR1cm4gdGhyb3dPdXRPZk1lbW9yeUVycm9yKCZzdGF0ZSwgc2NvcGUpOwog
Ci0gICAgcmV0dXJuIGpzU3RyaW5nKCZzdGF0ZSwgV1RGTW92ZShyZXN1bHQpKTsKKyAgICByZXR1
cm4ganNTdHJpbmcodm0sIFdURk1vdmUocmVzdWx0KSk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuY3Bw
CShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5
bWJvbFRhYmxlT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01NSw2ICs1NSw3IEBAIGJv
b2wgSlNTeW1ib2xUYWJsZU9iamVjdDo6ZGVsZXRlUHJvcGVydHkKIAogdm9pZCBKU1N5bWJvbFRh
YmxlT2JqZWN0OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwg
RXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVy
YXRpb25Nb2RlIG1vZGUpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBKU1N5bWJv
bFRhYmxlT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTU3ltYm9sVGFibGVPYmplY3QqPihv
YmplY3QpOwogICAgIHsKICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcih0aGlzT2Jq
ZWN0LT5zeW1ib2xUYWJsZSgpLT5tX2xvY2spOwpAQCAtNjMsNyArNjQsNyBAQCB2b2lkIEpTU3lt
Ym9sVGFibGVPYmplY3Q6OmdldE93bk5vbkluZGV4CiAgICAgICAgICAgICBpZiAoIShpdC0+dmFs
dWUuZ2V0QXR0cmlidXRlcygpICYgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSB8fCBtb2Rl
LmluY2x1ZGVEb250RW51bVByb3BlcnRpZXMoKSkgewogICAgICAgICAgICAgICAgIGlmIChpdC0+
a2V5LT5pc1N5bWJvbCgpICYmICFwcm9wZXJ0eU5hbWVzLmluY2x1ZGVTeW1ib2xQcm9wZXJ0aWVz
KCkpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIHByb3Bl
cnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb21VaWQoZXhlYywgaXQtPmtleS5nZXQoKSkpOwor
ICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb21VaWQodm0s
IGl0LT5rZXkuZ2V0KCkpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVGVtcGxhdGVPYmplY3REZXNjcmlwdG9y
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1RlbXBs
YXRlT2JqZWN0RGVzY3JpcHRvci5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTVGVtcGxhdGVPYmplY3REZXNjcmlwdG9yLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTUgWXVzdWtl
IFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPi4KLSAqIENvcHlyaWdodCAoQykgMjAxNiBB
cHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAx
OSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTY4LDEyICs2OCwxMiBAQCBKU0FycmF5KiBKU1RlbXBsYXRlT2JqZWN0RGVz
Y3JpcHRvcjo6Y3JlCiAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgY291bnQ7
ICsraW5kZXgpIHsKICAgICAgICAgYXV0byBjb29rZWQgPSBkZXNjcmlwdG9yKCkuY29va2VkU3Ry
aW5ncygpW2luZGV4XTsKICAgICAgICAgaWYgKGNvb2tlZCkKLSAgICAgICAgICAgIHRlbXBsYXRl
T2JqZWN0LT5wdXREaXJlY3RJbmRleChleGVjLCBpbmRleCwganNTdHJpbmcoZXhlYywgY29va2Vk
LnZhbHVlKCkpLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBQcm9wZXJ0eUF0dHJpYnV0
ZTo6RG9udERlbGV0ZSwgUHV0RGlyZWN0SW5kZXhMaWtlUHV0RGlyZWN0KTsKKyAgICAgICAgICAg
IHRlbXBsYXRlT2JqZWN0LT5wdXREaXJlY3RJbmRleChleGVjLCBpbmRleCwganNTdHJpbmcodm0s
IGNvb2tlZC52YWx1ZSgpKSwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgUHJvcGVydHlB
dHRyaWJ1dGU6OkRvbnREZWxldGUsIFB1dERpcmVjdEluZGV4TGlrZVB1dERpcmVjdCk7CiAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgIHRlbXBsYXRlT2JqZWN0LT5wdXREaXJlY3RJbmRleChleGVj
LCBpbmRleCwganNVbmRlZmluZWQoKSwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgUHJv
cGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUsIFB1dERpcmVjdEluZGV4TGlrZVB1dERpcmVjdCk7
CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwogCi0gICAgICAg
IHJhd09iamVjdC0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaW5kZXgsIGpzU3RyaW5nKGV4ZWMsIGRl
c2NyaXB0b3IoKS5yYXdTdHJpbmdzKClbaW5kZXhdKSwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRP
bmx5IHwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUsIFB1dERpcmVjdEluZGV4TGlrZVB1
dERpcmVjdCk7CisgICAgICAgIHJhd09iamVjdC0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaW5kZXgs
IGpzU3RyaW5nKHZtLCBkZXNjcmlwdG9yKCkucmF3U3RyaW5ncygpW2luZGV4XSksIFByb3BlcnR5
QXR0cmlidXRlOjpSZWFkT25seSB8IFByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlLCBQdXRE
aXJlY3RJbmRleExpa2VQdXREaXJlY3QpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCBudWxscHRyKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTVHlwZWRBcnJheVZpZXdQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZWRBcnJheVZpZXdQcm90b3R5cGUuY3BwCShyZXZp
c2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVkQXJy
YXlWaWV3UHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI1NywyMyArMjU3LDIzIEBA
IHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHR5cGUKICAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOwogICAgIHN3aXRjaCAodGhpc1ZhbHVlLmdldE9iamVjdCgpLT5jbGFzc0luZm8o
dm0pLT50eXBlZEFycmF5U3RvcmFnZVR5cGUpIHsKICAgICBjYXNlIFR5cGVVaW50OENsYW1wZWQ6
Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcoJnZtLCAiVWludDhDbGFt
cGVkQXJyYXkiKSk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcodm0s
ICJVaW50OENsYW1wZWRBcnJheSIpKTsKICAgICBjYXNlIFR5cGVJbnQzMjoKLSAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZygmdm0sICJJbnQzMkFycmF5IikpOworICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKHZtLCAiSW50MzJBcnJheSIpKTsKICAg
ICBjYXNlIFR5cGVVaW50MzI6Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdHJp
bmcoJnZtLCAiVWludDMyQXJyYXkiKSk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNTdHJpbmcodm0sICJVaW50MzJBcnJheSIpKTsKICAgICBjYXNlIFR5cGVGbG9hdDY0OgotICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKCZ2bSwgIkZsb2F0NjRBcnJheSIp
KTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyh2bSwgIkZsb2F0NjRB
cnJheSIpKTsKICAgICBjYXNlIFR5cGVGbG9hdDMyOgotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzU3RyaW5nKCZ2bSwgIkZsb2F0MzJBcnJheSIpKTsKKyAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1N0cmluZyh2bSwgIkZsb2F0MzJBcnJheSIpKTsKICAgICBjYXNlIFR5
cGVJbnQ4OgotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKCZ2bSwgIklu
dDhBcnJheSIpKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyh2bSwg
IkludDhBcnJheSIpKTsKICAgICBjYXNlIFR5cGVVaW50ODoKLSAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1N0cmluZygmdm0sICJVaW50OEFycmF5IikpOworICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKHZtLCAiVWludDhBcnJheSIpKTsKICAgICBjYXNlIFR5
cGVJbnQxNjoKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZygmdm0sICJJ
bnQxNkFycmF5IikpOworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKHZt
LCAiSW50MTZBcnJheSIpKTsKICAgICBjYXNlIFR5cGVVaW50MTY6Ci0gICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNTdHJpbmcoJnZtLCAiVWludDE2QXJyYXkiKSk7CisgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcodm0sICJVaW50MTZBcnJheSIpKTsKICAgICBj
YXNlIE5vdFR5cGVkQXJyYXk6CiAgICAgY2FzZSBUeXBlRGF0YVZpZXc6CiAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9MYXp5Q2xhc3NTdHJ1Y3R1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xhenlDbGFzc1N0cnVjdHVyZS5jcHAJKHJldmlzaW9u
IDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xhenlDbGFzc1N0cnVj
dHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODQsNyArODQsNyBAQCB2b2lkIExhenlDbGFzc1N0cnVj
dHVyZTo6SW5pdGlhbGl6ZXI6OnNlCiAgICAgZWxzZQogICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogICAgIAotICAgIHNldENvbnN0cnVjdG9yKElkZW50aWZpZXI6OmZyb21T
dHJpbmcoJnZtLCBuYW1lKSwgY29uc3RydWN0b3IpOworICAgIHNldENvbnN0cnVjdG9yKElkZW50
aWZpZXI6OmZyb21TdHJpbmcodm0sIG5hbWUpLCBjb25zdHJ1Y3Rvcik7CiB9CiAKIHZvaWQgTGF6
eUNsYXNzU3RydWN0dXJlOjp2aXNpdChTbG90VmlzaXRvciYgdmlzaXRvcikKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xhenlQcm9wZXJ0eS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xhenlQcm9wZXJ0eS5oCShyZXZpc2lvbiAyNDkx
MjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9MYXp5UHJvcGVydHkuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC00MCw3ICs0MCw3IEBAIGNsYXNzIExhenlQcm9wZXJ0eSB7CiBwdWJsaWM6CiAg
ICAgc3RydWN0IEluaXRpYWxpemVyIHsKICAgICAgICAgSW5pdGlhbGl6ZXIoT3duZXJUeXBlKiBv
d25lciwgTGF6eVByb3BlcnR5JiBwcm9wZXJ0eSkKLSAgICAgICAgICAgIDogdm0oKkhlYXA6Omhl
YXAob3duZXIpLT52bSgpKQorICAgICAgICAgICAgOiB2bShIZWFwOjpoZWFwKG93bmVyKS0+dm0o
KSkKICAgICAgICAgICAgICwgb3duZXIob3duZXIpCiAgICAgICAgICAgICAsIHByb3BlcnR5KHBy
b3BlcnR5KQogICAgICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9M
aXRlcmFsUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9MaXRlcmFsUGFyc2VyLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvTGl0ZXJhbFBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDEyIE1hdGhpYXMgQnluZW5z
IChtYXRoaWFzQHFpd2kuYmUpCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC01OSwxNyArNTksMTcgQEAg
Ym9vbCBMaXRlcmFsUGFyc2VyPENoYXJUeXBlPjo6dHJ5SlNPTlBQYQogICAgIGRvIHsKICAgICAg
ICAgVmVjdG9yPEpTT05QUGF0aEVudHJ5PiBwYXRoOwogICAgICAgICAvLyBVbmd1YXJkZWQgbmV4
dCB0byBzdGFydCBvZmYgdGhlIGxleGVyCi0gICAgICAgIElkZW50aWZpZXIgbmFtZSA9IElkZW50
aWZpZXI6OmZyb21TdHJpbmcoJnZtLCBtX2xleGVyLmN1cnJlbnRUb2tlbigpLT5zdGFydCwgbV9s
ZXhlci5jdXJyZW50VG9rZW4oKS0+ZW5kIC0gbV9sZXhlci5jdXJyZW50VG9rZW4oKS0+c3RhcnQp
OworICAgICAgICBJZGVudGlmaWVyIG5hbWUgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBt
X2xleGVyLmN1cnJlbnRUb2tlbigpLT5zdGFydCwgbV9sZXhlci5jdXJyZW50VG9rZW4oKS0+ZW5k
IC0gbV9sZXhlci5jdXJyZW50VG9rZW4oKS0+c3RhcnQpOwogICAgICAgICBKU09OUFBhdGhFbnRy
eSBlbnRyeTsKICAgICAgICAgaWYgKG5hbWUgPT0gdm0ucHJvcGVydHlOYW1lcy0+dmFyS2V5d29y
ZCkgewogICAgICAgICAgICAgaWYgKG1fbGV4ZXIubmV4dCgpICE9IFRva0lkZW50aWZpZXIpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgZW50cnkubV90eXBlID0g
SlNPTlBQYXRoRW50cnlUeXBlRGVjbGFyZVZhcjsKLSAgICAgICAgICAgIGVudHJ5Lm1fcGF0aEVu
dHJ5TmFtZSA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCBtX2xleGVyLmN1cnJlbnRUb2tl
bigpLT5zdGFydCwgbV9sZXhlci5jdXJyZW50VG9rZW4oKS0+ZW5kIC0gbV9sZXhlci5jdXJyZW50
VG9rZW4oKS0+c3RhcnQpOworICAgICAgICAgICAgZW50cnkubV9wYXRoRW50cnlOYW1lID0gSWRl
bnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgbV9sZXhlci5jdXJyZW50VG9rZW4oKS0+c3RhcnQsIG1f
bGV4ZXIuY3VycmVudFRva2VuKCktPmVuZCAtIG1fbGV4ZXIuY3VycmVudFRva2VuKCktPnN0YXJ0
KTsKICAgICAgICAgICAgIHBhdGguYXBwZW5kKGVudHJ5KTsKICAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICAgIGVudHJ5Lm1fdHlwZSA9IEpTT05QUGF0aEVudHJ5VHlwZURvdDsKLSAgICAgICAg
ICAgIGVudHJ5Lm1fcGF0aEVudHJ5TmFtZSA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCBt
X2xleGVyLmN1cnJlbnRUb2tlbigpLT5zdGFydCwgbV9sZXhlci5jdXJyZW50VG9rZW4oKS0+ZW5k
IC0gbV9sZXhlci5jdXJyZW50VG9rZW4oKS0+c3RhcnQpOworICAgICAgICAgICAgZW50cnkubV9w
YXRoRW50cnlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgbV9sZXhlci5jdXJyZW50
VG9rZW4oKS0+c3RhcnQsIG1fbGV4ZXIuY3VycmVudFRva2VuKCktPmVuZCAtIG1fbGV4ZXIuY3Vy
cmVudFRva2VuKCktPnN0YXJ0KTsKICAgICAgICAgICAgIHBhdGguYXBwZW5kKGVudHJ5KTsKICAg
ICAgICAgfQogICAgICAgICBpZiAoaXNMZXhlcktleXdvcmQoZW50cnkubV9wYXRoRW50cnlOYW1l
KSkKQEAgLTk2LDcgKzk2LDcgQEAgYm9vbCBMaXRlcmFsUGFyc2VyPENoYXJUeXBlPjo6dHJ5SlNP
TlBQYQogICAgICAgICAgICAgICAgIGVudHJ5Lm1fdHlwZSA9IEpTT05QUGF0aEVudHJ5VHlwZURv
dDsKICAgICAgICAgICAgICAgICBpZiAobV9sZXhlci5uZXh0KCkgIT0gVG9rSWRlbnRpZmllcikK
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIGVudHJ5
Lm1fcGF0aEVudHJ5TmFtZSA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCBtX2xleGVyLmN1
cnJlbnRUb2tlbigpLT5zdGFydCwgbV9sZXhlci5jdXJyZW50VG9rZW4oKS0+ZW5kIC0gbV9sZXhl
ci5jdXJyZW50VG9rZW4oKS0+c3RhcnQpOworICAgICAgICAgICAgICAgIGVudHJ5Lm1fcGF0aEVu
dHJ5TmFtZSA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIG1fbGV4ZXIuY3VycmVudFRva2Vu
KCktPnN0YXJ0LCBtX2xleGVyLmN1cnJlbnRUb2tlbigpLT5lbmQgLSBtX2xleGVyLmN1cnJlbnRU
b2tlbigpLT5zdGFydCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBjYXNlIFRva0xQYXJlbjogewpAQCAtMTM2LDQwICsxMzYsNDIgQEAgYm9vbCBM
aXRlcmFsUGFyc2VyPENoYXJUeXBlPjo6dHJ5SlNPTlBQYQogdGVtcGxhdGUgPHR5cGVuYW1lIENo
YXJUeXBlPgogQUxXQVlTX0lOTElORSBjb25zdCBJZGVudGlmaWVyIExpdGVyYWxQYXJzZXI8Q2hh
clR5cGU+OjptYWtlSWRlbnRpZmllcihjb25zdCBMQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxl
bmd0aCkKIHsKKyAgICBWTSYgdm0gPSBtX2V4ZWMtPnZtKCk7CiAgICAgaWYgKCFsZW5ndGgpCi0g
ICAgICAgIHJldHVybiBtX2V4ZWMtPnZtKCkucHJvcGVydHlOYW1lcy0+ZW1wdHlJZGVudGlmaWVy
OworICAgICAgICByZXR1cm4gdm0ucHJvcGVydHlOYW1lcy0+ZW1wdHlJZGVudGlmaWVyOwogICAg
IGlmIChjaGFyYWN0ZXJzWzBdID49IE1heGltdW1DYWNoYWJsZUNoYXJhY3RlcikKLSAgICAgICAg
cmV0dXJuIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJm1fZXhlYy0+dm0oKSwgY2hhcmFjdGVycywg
bGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIGNoYXJh
Y3RlcnMsIGxlbmd0aCk7CiAKICAgICBpZiAobGVuZ3RoID09IDEpIHsKICAgICAgICAgaWYgKCFt
X3Nob3J0SWRlbnRpZmllcnNbY2hhcmFjdGVyc1swXV0uaXNOdWxsKCkpCiAgICAgICAgICAgICBy
ZXR1cm4gbV9zaG9ydElkZW50aWZpZXJzW2NoYXJhY3RlcnNbMF1dOwotICAgICAgICBtX3Nob3J0
SWRlbnRpZmllcnNbY2hhcmFjdGVyc1swXV0gPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZtX2V4
ZWMtPnZtKCksIGNoYXJhY3RlcnMsIGxlbmd0aCk7CisgICAgICAgIG1fc2hvcnRJZGVudGlmaWVy
c1tjaGFyYWN0ZXJzWzBdXSA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIGNoYXJhY3RlcnMs
IGxlbmd0aCk7CiAgICAgICAgIHJldHVybiBtX3Nob3J0SWRlbnRpZmllcnNbY2hhcmFjdGVyc1sw
XV07CiAgICAgfQogICAgIGlmICghbV9yZWNlbnRJZGVudGlmaWVyc1tjaGFyYWN0ZXJzWzBdXS5p
c051bGwoKSAmJiBJZGVudGlmaWVyOjplcXVhbChtX3JlY2VudElkZW50aWZpZXJzW2NoYXJhY3Rl
cnNbMF1dLmltcGwoKSwgY2hhcmFjdGVycywgbGVuZ3RoKSkKICAgICAgICAgcmV0dXJuIG1fcmVj
ZW50SWRlbnRpZmllcnNbY2hhcmFjdGVyc1swXV07Ci0gICAgbV9yZWNlbnRJZGVudGlmaWVyc1tj
aGFyYWN0ZXJzWzBdXSA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJm1fZXhlYy0+dm0oKSwgY2hh
cmFjdGVycywgbGVuZ3RoKTsKKyAgICBtX3JlY2VudElkZW50aWZpZXJzW2NoYXJhY3RlcnNbMF1d
ID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgY2hhcmFjdGVycywgbGVuZ3RoKTsKICAgICBy
ZXR1cm4gbV9yZWNlbnRJZGVudGlmaWVyc1tjaGFyYWN0ZXJzWzBdXTsKIH0KIAogdGVtcGxhdGUg
PHR5cGVuYW1lIENoYXJUeXBlPgogQUxXQVlTX0lOTElORSBjb25zdCBJZGVudGlmaWVyIExpdGVy
YWxQYXJzZXI8Q2hhclR5cGU+OjptYWtlSWRlbnRpZmllcihjb25zdCBVQ2hhciogY2hhcmFjdGVy
cywgc2l6ZV90IGxlbmd0aCkKIHsKKyAgICBWTSYgdm0gPSBtX2V4ZWMtPnZtKCk7CiAgICAgaWYg
KCFsZW5ndGgpCi0gICAgICAgIHJldHVybiBtX2V4ZWMtPnZtKCkucHJvcGVydHlOYW1lcy0+ZW1w
dHlJZGVudGlmaWVyOworICAgICAgICByZXR1cm4gdm0ucHJvcGVydHlOYW1lcy0+ZW1wdHlJZGVu
dGlmaWVyOwogICAgIGlmIChjaGFyYWN0ZXJzWzBdID49IE1heGltdW1DYWNoYWJsZUNoYXJhY3Rl
cikKLSAgICAgICAgcmV0dXJuIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJm1fZXhlYy0+dm0oKSwg
Y2hhcmFjdGVycywgbGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIElkZW50aWZpZXI6OmZyb21TdHJp
bmcodm0sIGNoYXJhY3RlcnMsIGxlbmd0aCk7CiAKICAgICBpZiAobGVuZ3RoID09IDEpIHsKICAg
ICAgICAgaWYgKCFtX3Nob3J0SWRlbnRpZmllcnNbY2hhcmFjdGVyc1swXV0uaXNOdWxsKCkpCiAg
ICAgICAgICAgICByZXR1cm4gbV9zaG9ydElkZW50aWZpZXJzW2NoYXJhY3RlcnNbMF1dOwotICAg
ICAgICBtX3Nob3J0SWRlbnRpZmllcnNbY2hhcmFjdGVyc1swXV0gPSBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKCZtX2V4ZWMtPnZtKCksIGNoYXJhY3RlcnMsIGxlbmd0aCk7CisgICAgICAgIG1fc2hv
cnRJZGVudGlmaWVyc1tjaGFyYWN0ZXJzWzBdXSA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0s
IGNoYXJhY3RlcnMsIGxlbmd0aCk7CiAgICAgICAgIHJldHVybiBtX3Nob3J0SWRlbnRpZmllcnNb
Y2hhcmFjdGVyc1swXV07CiAgICAgfQogICAgIGlmICghbV9yZWNlbnRJZGVudGlmaWVyc1tjaGFy
YWN0ZXJzWzBdXS5pc051bGwoKSAmJiBJZGVudGlmaWVyOjplcXVhbChtX3JlY2VudElkZW50aWZp
ZXJzW2NoYXJhY3RlcnNbMF1dLmltcGwoKSwgY2hhcmFjdGVycywgbGVuZ3RoKSkKICAgICAgICAg
cmV0dXJuIG1fcmVjZW50SWRlbnRpZmllcnNbY2hhcmFjdGVyc1swXV07Ci0gICAgbV9yZWNlbnRJ
ZGVudGlmaWVyc1tjaGFyYWN0ZXJzWzBdXSA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJm1fZXhl
Yy0+dm0oKSwgY2hhcmFjdGVycywgbGVuZ3RoKTsKKyAgICBtX3JlY2VudElkZW50aWZpZXJzW2No
YXJhY3RlcnNbMF1dID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgY2hhcmFjdGVycywgbGVu
Z3RoKTsKICAgICByZXR1cm4gbV9yZWNlbnRJZGVudGlmaWVyc1tjaGFyYWN0ZXJzWzBdXTsKIH0K
IApAQCAtOTYxLDkgKzk2Myw5IEBAIEpTVmFsdWUgTGl0ZXJhbFBhcnNlcjxDaGFyVHlwZT46OnBh
cnNlKFAKICAgICAgICAgICAgICAgICAgICAgY2FzZSBUb2tTdHJpbmc6IHsKICAgICAgICAgICAg
ICAgICAgICAgICAgIHR5cGVuYW1lIExleGVyOjpMaXRlcmFsUGFyc2VyVG9rZW5QdHIgc3RyaW5n
VG9rZW4gPSBtX2xleGVyLmN1cnJlbnRUb2tlbigpOwogICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHN0cmluZ1Rva2VuLT5zdHJpbmdJczhCaXQpCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbGFzdFZhbHVlID0ganNTdHJpbmcobV9leGVjLCBtYWtlSWRlbnRpZmllcihzdHJpbmdUb2tl
bi0+c3RyaW5nVG9rZW44LCBzdHJpbmdUb2tlbi0+c3RyaW5nTGVuZ3RoKS5zdHJpbmcoKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdFZhbHVlID0ganNTdHJpbmcodm0sIG1ha2VJ
ZGVudGlmaWVyKHN0cmluZ1Rva2VuLT5zdHJpbmdUb2tlbjgsIHN0cmluZ1Rva2VuLT5zdHJpbmdM
ZW5ndGgpLnN0cmluZygpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBsYXN0VmFsdWUgPSBqc1N0cmluZyhtX2V4ZWMsIG1ha2VJZGVu
dGlmaWVyKHN0cmluZ1Rva2VuLT5zdHJpbmdUb2tlbjE2LCBzdHJpbmdUb2tlbi0+c3RyaW5nTGVu
Z3RoKS5zdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdFZhbHVlID0g
anNTdHJpbmcodm0sIG1ha2VJZGVudGlmaWVyKHN0cmluZ1Rva2VuLT5zdHJpbmdUb2tlbjE2LCBz
dHJpbmdUb2tlbi0+c3RyaW5nTGVuZ3RoKS5zdHJpbmcoKSk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBtX2xleGVyLm5leHQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9M
b29rdXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Mb29r
dXAuaAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
TG9va3VwLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdo
dCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29weXJp
Z2h0IChDKSAyMDAzLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENv
cHlyaWdodCAoQykgMjAwMy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTM5OSw3ICszOTksNyBAQCBpbmxpbmUgdm9pZCByZWlmeVN0
YXRpY1Byb3BlcnRpZXMoVk0mIHZtCiAgICAgZm9yIChhdXRvJiB2YWx1ZSA6IHZhbHVlcykgewog
ICAgICAgICBpZiAoIXZhbHVlLm1fa2V5KQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
IGF1dG8ga2V5ID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgTENoYXIqPih2YWx1ZS5tX2tleSksIHN0cmxlbih2YWx1ZS5tX2tleSkpOworICAgICAg
ICBhdXRvIGtleSA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgTENoYXIqPih2YWx1ZS5tX2tleSksIHN0cmxlbih2YWx1ZS5tX2tleSkpOwogICAgICAg
ICByZWlmeVN0YXRpY1Byb3BlcnR5KHZtLCBjbGFzc0luZm8sIGtleSwgdmFsdWUsIHRoaXNPYmop
OwogICAgIH0KIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcEl0ZXJh
dG9yUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9NYXBJdGVyYXRvclByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcEl0ZXJhdG9yUHJvdG90eXBlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTYg
QXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE5IEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTM4LDcgKzM4LDcgQEAgdm9pZCBNYXBJdGVyYXRvclByb3RvdHlwZTo6
ZmluaXNoQ3JlYXRpbwogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBBU1NFUlQo
aW5oZXJpdHModm0sIGluZm8oKSkpOwogCi0gICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24o
dm0sIHZtLnByb3BlcnR5TmFtZXMtPnRvU3RyaW5nVGFnU3ltYm9sLCBqc1N0cmluZygmdm0sICJN
YXAgSXRlcmF0b3IiKSwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtIHwgUHJvcGVydHlBdHRy
aWJ1dGU6OlJlYWRPbmx5KTsKKyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0u
cHJvcGVydHlOYW1lcy0+dG9TdHJpbmdUYWdTeW1ib2wsIGpzU3RyaW5nKHZtLCAiTWFwIEl0ZXJh
dG9yIiksIFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8IFByb3BlcnR5QXR0cmlidXRlOjpS
ZWFkT25seSk7CiAgICAgSlNDX0JVSUxUSU5fRlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lUSU9OKHZt
LnByb3BlcnR5TmFtZXMtPm5leHQsIG1hcEl0ZXJhdG9yUHJvdG90eXBlTmV4dENvZGVHZW5lcmF0
b3IsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsK
IH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwUHJvdG90eXBlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBQcm90b3R5
cGUuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9NYXBQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMywgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTczLDcgKzczLDcgQEAgdm9p
ZCBNYXBQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bQogICAgIEpTRnVuY3Rpb24qIGVu
dHJpZXMgPSBKU0Z1bmN0aW9uOjpjcmVhdGUodm0sIG1hcFByb3RvdHlwZUVudHJpZXNDb2RlR2Vu
ZXJhdG9yKHZtKSwgZ2xvYmFsT2JqZWN0KTsKICAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlv
bih2bSwgdm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkuZW50cmllc1B1YmxpY05hbWUo
KSwgZW50cmllcywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250
RW51bSkpOwogICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5h
bWVzLT5pdGVyYXRvclN5bWJvbCwgZW50cmllcywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3Bl
cnR5QXR0cmlidXRlOjpEb250RW51bSkpOwotICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9u
KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT50b1N0cmluZ1RhZ1N5bWJvbCwganNTdHJpbmcoJnZtLCAi
TWFwIiksIFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8IFByb3BlcnR5QXR0cmlidXRlOjpS
ZWFkT25seSk7CisgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5
TmFtZXMtPnRvU3RyaW5nVGFnU3ltYm9sLCBqc1N0cmluZyh2bSwgIk1hcCIpLCBQcm9wZXJ0eUF0
dHJpYnV0ZTo6RG9udEVudW0gfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpOwogCiAgICAg
SlNDX05BVElWRV9HRVRURVJfV0lUSE9VVF9UUkFOU0lUSU9OKHZtLnByb3BlcnR5TmFtZXMtPnNp
emUsIG1hcFByb3RvRnVuY1NpemUsIFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8IFByb3Bl
cnR5QXR0cmlidXRlOjpBY2Nlc3Nvcik7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9NYXRoT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9NYXRoT2JqZWN0LmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvTWF0aE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NiArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAo
cG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA3LTIwMDgsIDIwMTMsIDIwMTUt
MjAxNiBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAy
MDA3LTIwMTkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAg
KiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYwpAQCAtNzgsNTEgKzc4LDUxIEBAIHZvaWQgTWF0aE9iamVjdDo6ZmluaXNoQ3JlYXRpb24o
Vk0mIHZtLCAKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAgQVNTRVJUKGluaGVy
aXRzKHZtLCBpbmZvKCkpKTsKIAotICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgIkUiKSwganNOdW1iZXIoTWF0aDo6ZXhwKDEuMCkp
LCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IFByb3BlcnR5QXR0cmlidXRlOjpEb250
RW51bSB8IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSk7Ci0gICAgcHV0RGlyZWN0V2l0aG91
dFRyYW5zaXRpb24odm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiTE4yIiksIGpzTnVt
YmVyKE1hdGg6OmxvZygyLjApKSwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUgfCBQcm9w
ZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpOwot
ICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KCZ2bSwgIkxOMTAiKSwganNOdW1iZXIoTWF0aDo6bG9nKDEwLjApKSwgUHJvcGVydHlBdHRyaWJ1
dGU6OkRvbnREZWxldGUgfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBQcm9wZXJ0eUF0
dHJpYnV0ZTo6UmVhZE9ubHkpOwotICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgIkxPRzJFIiksIGpzTnVtYmVyKDEuMCAvIE1hdGg6
OmxvZygyLjApKSwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUgfCBQcm9wZXJ0eUF0dHJp
YnV0ZTo6RG9udEVudW0gfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpOwotICAgIHB1dERp
cmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgIkxP
RzEwRSIpLCBqc051bWJlcigwLjQzNDI5NDQ4MTkwMzI1MTgpLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6
RG9udERlbGV0ZSB8IFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8IFByb3BlcnR5QXR0cmli
dXRlOjpSZWFkT25seSk7Ci0gICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIElkZW50
aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiUEkiKSwganNOdW1iZXIocGlEb3VibGUpLCBQcm9wZXJ0
eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8IFBy
b3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSk7Ci0gICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRp
b24odm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiU1FSVDFfMiIpLCBqc051bWJlcihz
cXJ0KDAuNSkpLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IFByb3BlcnR5QXR0cmli
dXRlOjpEb250RW51bSB8IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSk7Ci0gICAgcHV0RGly
ZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiU1FS
VDIiKSwganNOdW1iZXIoc3FydCgyLjApKSwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUg
fCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9u
bHkpOwotICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVz
LT50b1N0cmluZ1RhZ1N5bWJvbCwganNTdHJpbmcoJnZtLCAiTWF0aCIpLCBQcm9wZXJ0eUF0dHJp
YnV0ZTo6RG9udEVudW0gfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpOwotCi0gICAgcHV0
RGlyZWN0TmF0aXZlRnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImFicyIpLCAxLCBtYXRoUHJvdG9GdW5jQWJzLCBB
YnNJbnRyaW5zaWMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9u
dEVudW0pKTsKLSAgICBwdXREaXJlY3ROYXRpdmVGdW5jdGlvbldpdGhvdXRUcmFuc2l0aW9uKHZt
LCBnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiYWNvcyIpLCAxLCBt
YXRoUHJvdG9GdW5jQUNvcywgQUNvc0ludHJpbnNpYywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFBy
b3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOwotICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9u
V2l0aG91dFRyYW5zaXRpb24odm0sIGdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zygmdm0sICJhc2luIiksIDEsIG1hdGhQcm90b0Z1bmNBU2luLCBBU2luSW50cmluc2ljLCBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7Ci0gICAgcHV0
RGlyZWN0TmF0aXZlRnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImF0YW4iKSwgMSwgbWF0aFByb3RvRnVuY0FUYW4s
IEFUYW5JbnRyaW5zaWMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6
RG9udEVudW0pKTsKLSAgICBwdXREaXJlY3ROYXRpdmVGdW5jdGlvbldpdGhvdXRUcmFuc2l0aW9u
KHZtLCBnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiYWNvc2giKSwg
MSwgbWF0aFByb3RvRnVuY0FDb3NoLCBBQ29zaEludHJpbnNpYywgc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOwotICAgIHB1dERpcmVjdE5hdGl2ZUZ1
bmN0aW9uV2l0aG91dFRyYW5zaXRpb24odm0sIGdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZygmdm0sICJhc2luaCIpLCAxLCBtYXRoUHJvdG9GdW5jQVNpbmgsIEFTaW5oSW50cmlu
c2ljLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7
Ci0gICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbih2bSwgZ2xvYmFs
T2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImF0YW5oIiksIDEsIG1hdGhQcm90
b0Z1bmNBVGFuaCwgQVRhbmhJbnRyaW5zaWMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0
eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKLSAgICBwdXREaXJlY3ROYXRpdmVGdW5jdGlvbldpdGhv
dXRUcmFuc2l0aW9uKHZtLCBnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZt
LCAiYXRhbjIiKSwgMiwgbWF0aFByb3RvRnVuY0FUYW4yLCBOb0ludHJpbnNpYywgc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOwotICAgIHB1dERpcmVj
dE5hdGl2ZUZ1bmN0aW9uV2l0aG91dFRyYW5zaXRpb24odm0sIGdsb2JhbE9iamVjdCwgSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZygmdm0sICJjYnJ0IiksIDEsIG1hdGhQcm90b0Z1bmNDYnJ0LCBDYnJ0
SW50cmluc2ljLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRF
bnVtKSk7Ci0gICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbih2bSwg
Z2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImNlaWwiKSwgMSwgbWF0
aFByb3RvRnVuY0NlaWwsIENlaWxJbnRyaW5zaWMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9w
ZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKLSAgICBwdXREaXJlY3ROYXRpdmVGdW5jdGlvbldp
dGhvdXRUcmFuc2l0aW9uKHZtLCBnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmco
JnZtLCAiY2x6MzIiKSwgMSwgbWF0aFByb3RvRnVuY0NsejMyLCBDbHozMkludHJpbnNpYywgc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOwotICAgIHB1
dERpcmVjdE5hdGl2ZUZ1bmN0aW9uV2l0aG91dFRyYW5zaXRpb24odm0sIGdsb2JhbE9iamVjdCwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJjb3MiKSwgMSwgbWF0aFByb3RvRnVuY0Nvcywg
Q29zSW50cmluc2ljLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRv
bnRFbnVtKSk7Ci0gICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbih2
bSwgZ2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImNvc2giKSwgMSwg
bWF0aFByb3RvRnVuY0Nvc2gsIENvc2hJbnRyaW5zaWMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQ
cm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKLSAgICBwdXREaXJlY3ROYXRpdmVGdW5jdGlv
bldpdGhvdXRUcmFuc2l0aW9uKHZtLCBnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJp
bmcoJnZtLCAiZXhwIiksIDEsIG1hdGhQcm90b0Z1bmNFeHAsIEV4cEludHJpbnNpYywgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOwotICAgIHB1dERp
cmVjdE5hdGl2ZUZ1bmN0aW9uV2l0aG91dFRyYW5zaXRpb24odm0sIGdsb2JhbE9iamVjdCwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJleHBtMSIpLCAxLCBtYXRoUHJvdG9GdW5jRXhwbTEs
IEV4cG0xSW50cmluc2ljLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6
OkRvbnRFbnVtKSk7Ci0gICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rpb25XaXRob3V0VHJhbnNpdGlv
bih2bSwgZ2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImZsb29yIiks
IDEsIG1hdGhQcm90b0Z1bmNGbG9vciwgRmxvb3JJbnRyaW5zaWMsIHN0YXRpY19jYXN0PHVuc2ln
bmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKLSAgICBwdXREaXJlY3ROYXRpdmVG
dW5jdGlvbldpdGhvdXRUcmFuc2l0aW9uKHZtLCBnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZy
b21TdHJpbmcoJnZtLCAiZnJvdW5kIiksIDEsIG1hdGhQcm90b0Z1bmNGcm91bmQsIEZSb3VuZElu
dHJpbnNpYywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51
bSkpOwotICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9uV2l0aG91dFRyYW5zaXRpb24odm0sIGds
b2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJoeXBvdCIpLCAyLCBtYXRo
UHJvdG9GdW5jSHlwb3QsIE5vSW50cmluc2ljLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVy
dHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7Ci0gICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rpb25XaXRo
b3V0VHJhbnNpdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2
bSwgImxvZyIpLCAxLCBtYXRoUHJvdG9GdW5jTG9nLCBMb2dJbnRyaW5zaWMsIHN0YXRpY19jYXN0
PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKLSAgICBwdXREaXJlY3RO
YXRpdmVGdW5jdGlvbldpdGhvdXRUcmFuc2l0aW9uKHZtLCBnbG9iYWxPYmplY3QsIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcoJnZtLCAibG9nMTAiKSwgMSwgbWF0aFByb3RvRnVuY0xvZzEwLCBMb2cx
MEludHJpbnNpYywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250
RW51bSkpOwotICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9uV2l0aG91dFRyYW5zaXRpb24odm0s
IGdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJsb2cxcCIpLCAxLCBt
YXRoUHJvdG9GdW5jTG9nMXAsIExvZzFwSW50cmluc2ljLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7Ci0gICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rp
b25XaXRob3V0VHJhbnNpdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKCZ2bSwgImxvZzIiKSwgMSwgbWF0aFByb3RvRnVuY0xvZzIsIExvZzJJbnRyaW5zaWMsIHN0
YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKLSAgICBw
dXREaXJlY3ROYXRpdmVGdW5jdGlvbldpdGhvdXRUcmFuc2l0aW9uKHZtLCBnbG9iYWxPYmplY3Qs
IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAibWF4IiksIDIsIG1hdGhQcm90b0Z1bmNNYXgs
IE1heEludHJpbnNpYywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpE
b250RW51bSkpOwotICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9uV2l0aG91dFRyYW5zaXRpb24o
dm0sIGdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJtaW4iKSwgMiwg
bWF0aFByb3RvRnVuY01pbiwgTWluSW50cmluc2ljLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJv
cGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7Ci0gICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rpb25X
aXRob3V0VHJhbnNpdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KCZ2bSwgInBvdyIpLCAyLCBtYXRoUHJvdG9GdW5jUG93LCBQb3dJbnRyaW5zaWMsIHN0YXRpY19j
YXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKLSAgICBwdXREaXJl
Y3ROYXRpdmVGdW5jdGlvbldpdGhvdXRUcmFuc2l0aW9uKHZtLCBnbG9iYWxPYmplY3QsIElkZW50
aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAicmFuZG9tIiksIDAsIG1hdGhQcm90b0Z1bmNSYW5kb20s
IFJhbmRvbUludHJpbnNpYywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRl
OjpEb250RW51bSkpOwotICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9uV2l0aG91dFRyYW5zaXRp
b24odm0sIGdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJyb3VuZCIp
LCAxLCBtYXRoUHJvdG9GdW5jUm91bmQsIFJvdW5kSW50cmluc2ljLCBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7Ci0gICAgcHV0RGlyZWN0TmF0aXZl
RnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKCZ2bSwgInNpZ24iKSwgMSwgbWF0aFByb3RvRnVuY1NpZ24sIE5vSW50cmluc2lj
LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7Ci0g
ICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbih2bSwgZ2xvYmFsT2Jq
ZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgInNpbiIpLCAxLCBtYXRoUHJvdG9GdW5j
U2luLCBTaW5JbnRyaW5zaWMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0
ZTo6RG9udEVudW0pKTsKLSAgICBwdXREaXJlY3ROYXRpdmVGdW5jdGlvbldpdGhvdXRUcmFuc2l0
aW9uKHZtLCBnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAic2luaCIp
LCAxLCBtYXRoUHJvdG9GdW5jU2luaCwgU2luaEludHJpbnNpYywgc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOwotICAgIHB1dERpcmVjdE5hdGl2ZUZ1
bmN0aW9uV2l0aG91dFRyYW5zaXRpb24odm0sIGdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZygmdm0sICJzcXJ0IiksIDEsIG1hdGhQcm90b0Z1bmNTcXJ0LCBTcXJ0SW50cmluc2lj
LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7Ci0g
ICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbih2bSwgZ2xvYmFsT2Jq
ZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgInRhbiIpLCAxLCBtYXRoUHJvdG9GdW5j
VGFuLCBUYW5JbnRyaW5zaWMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0
ZTo6RG9udEVudW0pKTsKLSAgICBwdXREaXJlY3ROYXRpdmVGdW5jdGlvbldpdGhvdXRUcmFuc2l0
aW9uKHZtLCBnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAidGFuaCIp
LCAxLCBtYXRoUHJvdG9GdW5jVGFuaCwgVGFuaEludHJpbnNpYywgc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOwotICAgIHB1dERpcmVjdE5hdGl2ZUZ1
bmN0aW9uV2l0aG91dFRyYW5zaXRpb24odm0sIGdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZygmdm0sICJ0cnVuYyIpLCAxLCBtYXRoUHJvdG9GdW5jVHJ1bmMsIFRydW5jSW50cmlu
c2ljLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7
Ci0gICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbih2bSwgZ2xvYmFs
T2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImltdWwiKSwgMiwgbWF0aFByb3Rv
RnVuY0lNdWwsIElNdWxJbnRyaW5zaWMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0
dHJpYnV0ZTo6RG9udEVudW0pKTsKKyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIkUiKSwganNOdW1iZXIoTWF0aDo6ZXhwKDEuMCkp
LCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IFByb3BlcnR5QXR0cmlidXRlOjpEb250
RW51bSB8IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSk7CisgICAgcHV0RGlyZWN0V2l0aG91
dFRyYW5zaXRpb24odm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJMTjIiKSwganNOdW1i
ZXIoTWF0aDo6bG9nKDIuMCkpLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IFByb3Bl
cnR5QXR0cmlidXRlOjpEb250RW51bSB8IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSk7Cisg
ICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmco
dm0sICJMTjEwIiksIGpzTnVtYmVyKE1hdGg6OmxvZygxMC4wKSksIFByb3BlcnR5QXR0cmlidXRl
OjpEb250RGVsZXRlIHwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtIHwgUHJvcGVydHlBdHRy
aWJ1dGU6OlJlYWRPbmx5KTsKKyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIkxPRzJFIiksIGpzTnVtYmVyKDEuMCAvIE1hdGg6Omxv
ZygyLjApKSwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUgfCBQcm9wZXJ0eUF0dHJpYnV0
ZTo6RG9udEVudW0gfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpOworICAgIHB1dERpcmVj
dFdpdGhvdXRUcmFuc2l0aW9uKHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiTE9HMTBF
IiksIGpzTnVtYmVyKDAuNDM0Mjk0NDgxOTAzMjUxOCksIFByb3BlcnR5QXR0cmlidXRlOjpEb250
RGVsZXRlIHwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtIHwgUHJvcGVydHlBdHRyaWJ1dGU6
OlJlYWRPbmx5KTsKKyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZyh2bSwgIlBJIiksIGpzTnVtYmVyKHBpRG91YmxlKSwgUHJvcGVydHlBdHRy
aWJ1dGU6OkRvbnREZWxldGUgfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBQcm9wZXJ0
eUF0dHJpYnV0ZTo6UmVhZE9ubHkpOworICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZt
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiU1FSVDFfMiIpLCBqc051bWJlcihzcXJ0KDAu
NSkpLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IFByb3BlcnR5QXR0cmlidXRlOjpE
b250RW51bSB8IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSk7CisgICAgcHV0RGlyZWN0V2l0
aG91dFRyYW5zaXRpb24odm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJTUVJUMiIpLCBq
c051bWJlcihzcXJ0KDIuMCkpLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IFByb3Bl
cnR5QXR0cmlidXRlOjpEb250RW51bSB8IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSk7Cisg
ICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPnRvU3Ry
aW5nVGFnU3ltYm9sLCBqc1N0cmluZyh2bSwgIk1hdGgiKSwgUHJvcGVydHlBdHRyaWJ1dGU6OkRv
bnRFbnVtIHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KTsKKworICAgIHB1dERpcmVjdE5h
dGl2ZUZ1bmN0aW9uV2l0aG91dFRyYW5zaXRpb24odm0sIGdsb2JhbE9iamVjdCwgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZyh2bSwgImFicyIpLCAxLCBtYXRoUHJvdG9GdW5jQWJzLCBBYnNJbnRyaW5z
aWMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsK
KyAgICBwdXREaXJlY3ROYXRpdmVGdW5jdGlvbldpdGhvdXRUcmFuc2l0aW9uKHZtLCBnbG9iYWxP
YmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJhY29zIiksIDEsIG1hdGhQcm90b0Z1
bmNBQ29zLCBBQ29zSW50cmluc2ljLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRy
aWJ1dGU6OkRvbnRFbnVtKSk7CisgICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rpb25XaXRob3V0VHJh
bnNpdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiYXNp
biIpLCAxLCBtYXRoUHJvdG9GdW5jQVNpbiwgQVNpbkludHJpbnNpYywgc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOworICAgIHB1dERpcmVjdE5hdGl2
ZUZ1bmN0aW9uV2l0aG91dFRyYW5zaXRpb24odm0sIGdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZyh2bSwgImF0YW4iKSwgMSwgbWF0aFByb3RvRnVuY0FUYW4sIEFUYW5JbnRyaW5z
aWMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsK
KyAgICBwdXREaXJlY3ROYXRpdmVGdW5jdGlvbldpdGhvdXRUcmFuc2l0aW9uKHZtLCBnbG9iYWxP
YmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJhY29zaCIpLCAxLCBtYXRoUHJvdG9G
dW5jQUNvc2gsIEFDb3NoSW50cmluc2ljLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlB
dHRyaWJ1dGU6OkRvbnRFbnVtKSk7CisgICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rpb25XaXRob3V0
VHJhbnNpdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAi
YXNpbmgiKSwgMSwgbWF0aFByb3RvRnVuY0FTaW5oLCBBU2luaEludHJpbnNpYywgc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOworICAgIHB1dERpcmVj
dE5hdGl2ZUZ1bmN0aW9uV2l0aG91dFRyYW5zaXRpb24odm0sIGdsb2JhbE9iamVjdCwgSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZyh2bSwgImF0YW5oIiksIDEsIG1hdGhQcm90b0Z1bmNBVGFuaCwgQVRh
bmhJbnRyaW5zaWMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9u
dEVudW0pKTsKKyAgICBwdXREaXJlY3ROYXRpdmVGdW5jdGlvbldpdGhvdXRUcmFuc2l0aW9uKHZt
LCBnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJhdGFuMiIpLCAyLCBt
YXRoUHJvdG9GdW5jQVRhbjIsIE5vSW50cmluc2ljLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJv
cGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7CisgICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rpb25X
aXRob3V0VHJhbnNpdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KHZtLCAiY2JydCIpLCAxLCBtYXRoUHJvdG9GdW5jQ2JydCwgQ2JydEludHJpbnNpYywgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOworICAgIHB1dERp
cmVjdE5hdGl2ZUZ1bmN0aW9uV2l0aG91dFRyYW5zaXRpb24odm0sIGdsb2JhbE9iamVjdCwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImNlaWwiKSwgMSwgbWF0aFByb3RvRnVuY0NlaWwsIENl
aWxJbnRyaW5zaWMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9u
dEVudW0pKTsKKyAgICBwdXREaXJlY3ROYXRpdmVGdW5jdGlvbldpdGhvdXRUcmFuc2l0aW9uKHZt
LCBnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJjbHozMiIpLCAxLCBt
YXRoUHJvdG9GdW5jQ2x6MzIsIENsejMySW50cmluc2ljLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7CisgICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rp
b25XaXRob3V0VHJhbnNpdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKHZtLCAiY29zIiksIDEsIG1hdGhQcm90b0Z1bmNDb3MsIENvc0ludHJpbnNpYywgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOworICAgIHB1dERp
cmVjdE5hdGl2ZUZ1bmN0aW9uV2l0aG91dFRyYW5zaXRpb24odm0sIGdsb2JhbE9iamVjdCwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImNvc2giKSwgMSwgbWF0aFByb3RvRnVuY0Nvc2gsIENv
c2hJbnRyaW5zaWMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9u
dEVudW0pKTsKKyAgICBwdXREaXJlY3ROYXRpdmVGdW5jdGlvbldpdGhvdXRUcmFuc2l0aW9uKHZt
LCBnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJleHAiKSwgMSwgbWF0
aFByb3RvRnVuY0V4cCwgRXhwSW50cmluc2ljLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVy
dHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7CisgICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rpb25XaXRo
b3V0VHJhbnNpdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZt
LCAiZXhwbTEiKSwgMSwgbWF0aFByb3RvRnVuY0V4cG0xLCBFeHBtMUludHJpbnNpYywgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOworICAgIHB1dERp
cmVjdE5hdGl2ZUZ1bmN0aW9uV2l0aG91dFRyYW5zaXRpb24odm0sIGdsb2JhbE9iamVjdCwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImZsb29yIiksIDEsIG1hdGhQcm90b0Z1bmNGbG9vciwg
Rmxvb3JJbnRyaW5zaWMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6
RG9udEVudW0pKTsKKyAgICBwdXREaXJlY3ROYXRpdmVGdW5jdGlvbldpdGhvdXRUcmFuc2l0aW9u
KHZtLCBnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJmcm91bmQiKSwg
MSwgbWF0aFByb3RvRnVuY0Zyb3VuZCwgRlJvdW5kSW50cmluc2ljLCBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7CisgICAgcHV0RGlyZWN0TmF0aXZl
RnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCAiaHlwb3QiKSwgMiwgbWF0aFByb3RvRnVuY0h5cG90LCBOb0ludHJpbnNp
Yywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOwor
ICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9uV2l0aG91dFRyYW5zaXRpb24odm0sIGdsb2JhbE9i
amVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImxvZyIpLCAxLCBtYXRoUHJvdG9GdW5j
TG9nLCBMb2dJbnRyaW5zaWMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0
ZTo6RG9udEVudW0pKTsKKyAgICBwdXREaXJlY3ROYXRpdmVGdW5jdGlvbldpdGhvdXRUcmFuc2l0
aW9uKHZtLCBnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJsb2cxMCIp
LCAxLCBtYXRoUHJvdG9GdW5jTG9nMTAsIExvZzEwSW50cmluc2ljLCBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7CisgICAgcHV0RGlyZWN0TmF0aXZl
RnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCAibG9nMXAiKSwgMSwgbWF0aFByb3RvRnVuY0xvZzFwLCBMb2cxcEludHJp
bnNpYywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkp
OworICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9uV2l0aG91dFRyYW5zaXRpb24odm0sIGdsb2Jh
bE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImxvZzIiKSwgMSwgbWF0aFByb3Rv
RnVuY0xvZzIsIExvZzJJbnRyaW5zaWMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0
dHJpYnV0ZTo6RG9udEVudW0pKTsKKyAgICBwdXREaXJlY3ROYXRpdmVGdW5jdGlvbldpdGhvdXRU
cmFuc2l0aW9uKHZtLCBnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJt
YXgiKSwgMiwgbWF0aFByb3RvRnVuY01heCwgTWF4SW50cmluc2ljLCBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7CisgICAgcHV0RGlyZWN0TmF0aXZl
RnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCAibWluIiksIDIsIG1hdGhQcm90b0Z1bmNNaW4sIE1pbkludHJpbnNpYywg
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOworICAg
IHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9uV2l0aG91dFRyYW5zaXRpb24odm0sIGdsb2JhbE9iamVj
dCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInBvdyIpLCAyLCBtYXRoUHJvdG9GdW5jUG93
LCBQb3dJbnRyaW5zaWMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6
RG9udEVudW0pKTsKKyAgICBwdXREaXJlY3ROYXRpdmVGdW5jdGlvbldpdGhvdXRUcmFuc2l0aW9u
KHZtLCBnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJyYW5kb20iKSwg
MCwgbWF0aFByb3RvRnVuY1JhbmRvbSwgUmFuZG9tSW50cmluc2ljLCBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7CisgICAgcHV0RGlyZWN0TmF0aXZl
RnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCAicm91bmQiKSwgMSwgbWF0aFByb3RvRnVuY1JvdW5kLCBSb3VuZEludHJp
bnNpYywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkp
OworICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9uV2l0aG91dFRyYW5zaXRpb24odm0sIGdsb2Jh
bE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInNpZ24iKSwgMSwgbWF0aFByb3Rv
RnVuY1NpZ24sIE5vSW50cmluc2ljLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRy
aWJ1dGU6OkRvbnRFbnVtKSk7CisgICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rpb25XaXRob3V0VHJh
bnNpdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAic2lu
IiksIDEsIG1hdGhQcm90b0Z1bmNTaW4sIFNpbkludHJpbnNpYywgc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOworICAgIHB1dERpcmVjdE5hdGl2ZUZ1
bmN0aW9uV2l0aG91dFRyYW5zaXRpb24odm0sIGdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyh2bSwgInNpbmgiKSwgMSwgbWF0aFByb3RvRnVuY1NpbmgsIFNpbmhJbnRyaW5zaWMs
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKKyAg
ICBwdXREaXJlY3ROYXRpdmVGdW5jdGlvbldpdGhvdXRUcmFuc2l0aW9uKHZtLCBnbG9iYWxPYmpl
Y3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJzcXJ0IiksIDEsIG1hdGhQcm90b0Z1bmNT
cXJ0LCBTcXJ0SW50cmluc2ljLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1
dGU6OkRvbnRFbnVtKSk7CisgICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rpb25XaXRob3V0VHJhbnNp
dGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAidGFuIiks
IDEsIG1hdGhQcm90b0Z1bmNUYW4sIFRhbkludHJpbnNpYywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOworICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0
aW9uV2l0aG91dFRyYW5zaXRpb24odm0sIGdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZyh2bSwgInRhbmgiKSwgMSwgbWF0aFByb3RvRnVuY1RhbmgsIFRhbmhJbnRyaW5zaWMsIHN0
YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKKyAgICBw
dXREaXJlY3ROYXRpdmVGdW5jdGlvbldpdGhvdXRUcmFuc2l0aW9uKHZtLCBnbG9iYWxPYmplY3Qs
IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJ0cnVuYyIpLCAxLCBtYXRoUHJvdG9GdW5jVHJ1
bmMsIFRydW5jSW50cmluc2ljLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1
dGU6OkRvbnRFbnVtKSk7CisgICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rpb25XaXRob3V0VHJhbnNp
dGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiaW11bCIp
LCAyLCBtYXRoUHJvdG9GdW5jSU11bCwgSU11bEludHJpbnNpYywgc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOwogfQogCiAvLyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0gRnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OdW1iZXJDb25zdHJ1Y3Rv
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVy
Q29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9OdW1iZXJDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiAr
MSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwLDIwMDMgSGFycmkgUG9ydGVu
IChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMTEsIDIw
MTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChD
KSAyMDA3LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYwpAQCAtNzAsMTkgKzcwLDE5IEBAIHZvaWQgTnVtYmVyQ29uc3RydWN0b3I6OmZpbmlz
aENyZWF0aW9uKFYKICAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVy
dHlOYW1lcy0+cHJvdG90eXBlLCBudW1iZXJQcm90b3R5cGUsIFByb3BlcnR5QXR0cmlidXRlOjpE
b250RW51bSB8IFByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgUHJvcGVydHlBdHRyaWJ1
dGU6OlJlYWRPbmx5KTsKICAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJv
cGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigxKSwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRP
bmx5IHwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKIAotICAgIHB1dERpcmVjdFdpdGhv
dXRUcmFuc2l0aW9uKHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgIkVQU0lMT04iKSwg
anNEb3VibGVOdW1iZXIoc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjplcHNpbG9uKCkpLCBQ
cm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51
bSB8IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSk7Ci0gICAgcHV0RGlyZWN0V2l0aG91dFRy
YW5zaXRpb24odm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiTUFYX1ZBTFVFIiksIGpz
RG91YmxlTnVtYmVyKDEuNzk3NjkzMTM0ODYyMzE1N0UrMzA4KSwgUHJvcGVydHlBdHRyaWJ1dGU6
OkRvbnREZWxldGUgfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBQcm9wZXJ0eUF0dHJp
YnV0ZTo6UmVhZE9ubHkpOwotICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgIk1JTl9WQUxVRSIpLCBqc0RvdWJsZU51bWJlcig1RS0z
MjQpLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IFByb3BlcnR5QXR0cmlidXRlOjpE
b250RW51bSB8IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSk7Ci0gICAgcHV0RGlyZWN0V2l0
aG91dFRyYW5zaXRpb24odm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiTUFYX1NBRkVf
SU5URUdFUiIpLCBqc0RvdWJsZU51bWJlcihtYXhTYWZlSW50ZWdlcigpKSwgUHJvcGVydHlBdHRy
aWJ1dGU6OkRvbnREZWxldGUgfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBQcm9wZXJ0
eUF0dHJpYnV0ZTo6UmVhZE9ubHkpOwotICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZt
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgIk1JTl9TQUZFX0lOVEVHRVIiKSwganNEb3Vi
bGVOdW1iZXIobWluU2FmZUludGVnZXIoKSksIFByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRl
IHwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtIHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRP
bmx5KTsKLSAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZygmdm0sICJORUdBVElWRV9JTkZJTklUWSIpLCBqc0RvdWJsZU51bWJlcigtc3RkOjpu
dW1lcmljX2xpbWl0czxkb3VibGU+OjppbmZpbml0eSgpKSwgUHJvcGVydHlBdHRyaWJ1dGU6OkRv
bnREZWxldGUgfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBQcm9wZXJ0eUF0dHJpYnV0
ZTo6UmVhZE9ubHkpOwotICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKCZ2bSwgIlBPU0lUSVZFX0lORklOSVRZIiksIGpzRG91YmxlTnVtYmVy
KHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6aW5maW5pdHkoKSksIFByb3BlcnR5QXR0cmli
dXRlOjpEb250RGVsZXRlIHwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtIHwgUHJvcGVydHlB
dHRyaWJ1dGU6OlJlYWRPbmx5KTsKKyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIkVQU0lMT04iKSwganNEb3VibGVOdW1iZXIoc3Rk
OjpudW1lcmljX2xpbWl0czxkb3VibGU+OjplcHNpbG9uKCkpLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6
RG9udERlbGV0ZSB8IFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8IFByb3BlcnR5QXR0cmli
dXRlOjpSZWFkT25seSk7CisgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIElkZW50
aWZpZXI6OmZyb21TdHJpbmcodm0sICJNQVhfVkFMVUUiKSwganNEb3VibGVOdW1iZXIoMS43OTc2
OTMxMzQ4NjIzMTU3RSszMDgpLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IFByb3Bl
cnR5QXR0cmlidXRlOjpEb250RW51bSB8IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSk7Cisg
ICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmco
dm0sICJNSU5fVkFMVUUiKSwganNEb3VibGVOdW1iZXIoNUUtMzI0KSwgUHJvcGVydHlBdHRyaWJ1
dGU6OkRvbnREZWxldGUgfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBQcm9wZXJ0eUF0
dHJpYnV0ZTo6UmVhZE9ubHkpOworICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiTUFYX1NBRkVfSU5URUdFUiIpLCBqc0RvdWJsZU51
bWJlcihtYXhTYWZlSW50ZWdlcigpKSwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUgfCBQ
cm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkp
OworICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKHZtLCAiTUlOX1NBRkVfSU5URUdFUiIpLCBqc0RvdWJsZU51bWJlcihtaW5TYWZlSW50ZWdl
cigpKSwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUgfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6
RG9udEVudW0gfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpOworICAgIHB1dERpcmVjdFdp
dGhvdXRUcmFuc2l0aW9uKHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiTkVHQVRJVkVf
SU5GSU5JVFkiKSwganNEb3VibGVOdW1iZXIoLXN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6
aW5maW5pdHkoKSksIFByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgUHJvcGVydHlBdHRy
aWJ1dGU6OkRvbnRFbnVtIHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KTsKKyAgICBwdXRE
aXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIlBP
U0lUSVZFX0lORklOSVRZIiksIGpzRG91YmxlTnVtYmVyKHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91
YmxlPjo6aW5maW5pdHkoKSksIFByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgUHJvcGVy
dHlBdHRyaWJ1dGU6OkRvbnRFbnVtIHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KTsKICAg
ICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+TmFOLCBq
c05hTigpLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IFByb3BlcnR5QXR0cmlidXRl
OjpEb250RW51bSB8IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSk7CiAKICAgICBwdXREaXJl
Y3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+cGFyc2VJbnQsIG51bWJl
clByb3RvdHlwZS0+Z2xvYmFsT2JqZWN0KHZtKS0+cGFyc2VJbnRGdW5jdGlvbigpLCBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7CiAgICAgcHV0RGly
ZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPnBhcnNlRmxvYXQsIG51
bWJlclByb3RvdHlwZS0+Z2xvYmFsT2JqZWN0KHZtKS0+cGFyc2VGbG9hdEZ1bmN0aW9uKCksIHN0
YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKIAotICAg
IEpTQ19OQVRJVkVfSU5UUklOU0lDX0ZVTkNUSU9OX1dJVEhPVVRfVFJBTlNJVElPTihJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKCZ2bSwgImlzSW50ZWdlciIpLCBudW1iZXJDb25zdHJ1Y3RvckZ1bmNJ
c0ludGVnZXIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVu
dW0pLCAxLCBOdW1iZXJJc0ludGVnZXJJbnRyaW5zaWMpOworICAgIEpTQ19OQVRJVkVfSU5UUklO
U0lDX0ZVTkNUSU9OX1dJVEhPVVRfVFJBTlNJVElPTihJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZt
LCAiaXNJbnRlZ2VyIiksIG51bWJlckNvbnN0cnVjdG9yRnVuY0lzSW50ZWdlciwgc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSksIDEsIE51bWJlcklzSW50
ZWdlckludHJpbnNpYyk7CiB9CiAKIC8vIEVDTUEgMTUuNy4xCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9OdW1iZXJQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlclByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDI0
OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlclByb3RvdHlwZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykg
MTk5OS0yMDAwLDIwMDMgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmln
aHQgKEMpIDIwMDcsIDIwMDgsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogIENvcHlyaWdodCAoQykgMjAwNy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTQyMiw3ICs0MjIsNyBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIG51bWJlclByb3RvCiAKICAgICAvLyBIYW5kbGUgTmFOIGFuZCBJbmZp
bml0eS4KICAgICBpZiAoIXN0ZDo6aXNmaW5pdGUoeCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNOb250cml2aWFsU3RyaW5nKGV4ZWMsIFN0cmluZzo6bnVtYmVyKHgpKSk7Cisg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOb250cml2aWFsU3RyaW5nKHZtLCBTdHJp
bmc6Om51bWJlcih4KSkpOwogCiAgICAgaWYgKCFpblJhbmdlKQogICAgICAgICByZXR1cm4gdGhy
b3dWTUVycm9yKGV4ZWMsIHNjb3BlLCBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsICJ0b0V4cG9uZW50
aWFsKCkgYXJndW1lbnQgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDIwIl9zKSk7CkBAIC00MzUsNyAr
NDM1LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBudW1iZXJQcm90bwogICAgIGlz
VW5kZWZpbmVkCiAgICAgICAgID8gY29udmVydGVyLlRvRXhwb25lbnRpYWwoeCwgLTEsICZidWls
ZGVyKQogICAgICAgICA6IGNvbnZlcnRlci5Ub0V4cG9uZW50aWFsKHgsIGRlY2ltYWxQbGFjZXNJ
bkV4cG9uZW50LCAmYnVpbGRlcik7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmlu
ZyhleGVjLCBidWlsZGVyLkZpbmFsaXplKCkpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzU3RyaW5nKHZtLCBidWlsZGVyLkZpbmFsaXplKCkpKTsKIH0KIAogLy8gdG9GaXhlZCBjb252
ZXJ0cyBhIG51bWJlciB0byBhIHN0cmluZywgYWx3YXlzIGZvcm1hdHRpbmcgYXMgYW4gYSBkZWNp
bWFsIGZyYWN0aW9uLgpAQCAtNDYzLDEzICs0NjMsMTMgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBudW1iZXJQcm90bwogICAgIC8vIFRoaXMgYWxzbyBjb3ZlcnMgSW5pbml0eSwgYW5k
IHN0cnVjdHVyZSB0aGUgY2hlY2sgc28gdGhhdCBOYU4KICAgICAvLyB2YWx1ZXMgYXJlIGFsc28g
aGFuZGxlZCBieSBudW1iZXJUb1N0cmluZwogICAgIGlmICghKGZhYnMoeCkgPCAxZSsyMSkpCi0g
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcoZXhlYywgU3RyaW5nOjpudW1i
ZXIoeCkpKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyh2bSwgU3Ry
aW5nOjpudW1iZXIoeCkpKTsKIAogICAgIC8vIFRoZSBjaGVjayBhYm92ZSB3aWxsIHJldHVybiBm
YWxzZSBmb3IgTmFOIG9yIEluZmluaXR5LCB0aGVzZSB3aWxsIGJlCiAgICAgLy8gaGFuZGxlZCBi
eSBudW1iZXJUb1N0cmluZy4KICAgICBBU1NFUlQoc3RkOjppc2Zpbml0ZSh4KSk7CiAKLSAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKGV4ZWMsIFN0cmluZzo6bnVtYmVyVG9TdHJp
bmdGaXhlZFdpZHRoKHgsIGRlY2ltYWxQbGFjZXMpKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1N0cmluZyh2bSwgU3RyaW5nOjpudW1iZXJUb1N0cmluZ0ZpeGVkV2lkdGgoeCwgZGVj
aW1hbFBsYWNlcykpKTsKIH0KIAogLy8gdG9QcmVjaXNpb24gY29udmVydHMgYSBudW1iZXIgdG8g
YSBzdHJpbmcsIHRha2luZyBhbiBhcmd1bWVudCBzcGVjaWZ5aW5nIGEKQEAgLTQ5NiwxNiArNDk2
LDE2IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbnVtYmVyUHJvdG8KIAogICAgIC8v
IFRvIHByZWNpc2lvbiBjYWxsZWQgd2l0aCBubyBhcmd1bWVudCBpcyB0cmVhdGVkIGFzIFRvU3Ry
aW5nLgogICAgIGlmIChpc1VuZGVmaW5lZCkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1N0cmluZyhleGVjLCBTdHJpbmc6Om51bWJlcih4KSkpOworICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKHZtLCBTdHJpbmc6Om51bWJlcih4KSkpOwogCiAgICAgLy8g
SGFuZGxlIE5hTiBhbmQgSW5maW5pdHkuCiAgICAgaWYgKCFzdGQ6OmlzZmluaXRlKHgpKQotICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTm9udHJpdmlhbFN0cmluZyhleGVjLCBTdHJp
bmc6Om51bWJlcih4KSkpOworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTm9udHJp
dmlhbFN0cmluZyh2bSwgU3RyaW5nOjpudW1iZXIoeCkpKTsKIAogICAgIGlmICghaW5SYW5nZSkK
ICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBzY29wZSwgY3JlYXRlUmFuZ2VFcnJv
cihleGVjLCAidG9QcmVjaXNpb24oKSBhcmd1bWVudCBtdXN0IGJlIGJldHdlZW4gMSBhbmQgMjEi
X3MpKTsKIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcoZXhlYywgU3RyaW5n
OjpudW1iZXJUb1N0cmluZ0ZpeGVkUHJlY2lzaW9uKHgsIHNpZ25pZmljYW50RmlndXJlcywgS2Vl
cFRyYWlsaW5nWmVyb3MpKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyh2
bSwgU3RyaW5nOjpudW1iZXJUb1N0cmluZ0ZpeGVkUHJlY2lzaW9uKHgsIHNpZ25pZmljYW50Rmln
dXJlcywgS2VlcFRyYWlsaW5nWmVyb3MpKSk7CiB9CiAKIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpT
U3RyaW5nKiBpbnQzMlRvU3RyaW5nSW50ZXJuYWwoVk0mIHZtLCBpbnQzMl90IHZhbHVlLCBpbnQz
Ml90IHJhZGl4KQpAQCAtNTE5LDkgKzUxOSw5IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpTU3Ry
aW5nKiBpbnQzMlRvU3QKICAgICB9CiAKICAgICBpZiAocmFkaXggPT0gMTApCi0gICAgICAgIHJl
dHVybiBqc05vbnRyaXZpYWxTdHJpbmcoJnZtLCB2bS5udW1lcmljU3RyaW5ncy5hZGQodmFsdWUp
KTsKKyAgICAgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyh2bSwgdm0ubnVtZXJpY1N0cmlu
Z3MuYWRkKHZhbHVlKSk7CiAKLSAgICByZXR1cm4ganNOb250cml2aWFsU3RyaW5nKCZ2bSwgdG9T
dHJpbmdXaXRoUmFkaXhJbnRlcm5hbCh2YWx1ZSwgcmFkaXgpKTsKKyAgICByZXR1cm4ganNOb250
cml2aWFsU3RyaW5nKHZtLCB0b1N0cmluZ1dpdGhSYWRpeEludGVybmFsKHZhbHVlLCByYWRpeCkp
OwogCiB9CiAKQEAgLTUzNCwxMyArNTM0LDEzIEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpTU3Ry
aW5nKiBudW1iZXJUb1MKICAgICAgICAgcmV0dXJuIGludDMyVG9TdHJpbmdJbnRlcm5hbCh2bSwg
aW50ZWdlclZhbHVlLCByYWRpeCk7CiAKICAgICBpZiAocmFkaXggPT0gMTApCi0gICAgICAgIHJl
dHVybiBqc1N0cmluZygmdm0sIHZtLm51bWVyaWNTdHJpbmdzLmFkZChkb3VibGVWYWx1ZSkpOwor
ICAgICAgICByZXR1cm4ganNTdHJpbmcodm0sIHZtLm51bWVyaWNTdHJpbmdzLmFkZChkb3VibGVW
YWx1ZSkpOwogCiAgICAgaWYgKCFzdGQ6OmlzZmluaXRlKGRvdWJsZVZhbHVlKSkKLSAgICAgICAg
cmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZygmdm0sIFN0cmluZzo6bnVtYmVyKGRvdWJsZVZhbHVl
KSk7CisgICAgICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcodm0sIFN0cmluZzo6bnVtYmVy
KGRvdWJsZVZhbHVlKSk7CiAKICAgICBSYWRpeEJ1ZmZlciBidWZmZXI7Ci0gICAgcmV0dXJuIGpz
U3RyaW5nKCZ2bSwgdG9TdHJpbmdXaXRoUmFkaXhJbnRlcm5hbChidWZmZXIsIGRvdWJsZVZhbHVl
LCByYWRpeCkpOworICAgIHJldHVybiBqc1N0cmluZyh2bSwgdG9TdHJpbmdXaXRoUmFkaXhJbnRl
cm5hbChidWZmZXIsIGRvdWJsZVZhbHVlLCByYWRpeCkpOwogfQogCiBKU1N0cmluZyogaW50MzJU
b1N0cmluZyhWTSYgdm0sIGludDMyX3QgdmFsdWUsIGludDMyX3QgcmFkaXgpCkBAIC01NTksNyAr
NTU5LDcgQEAgSlNTdHJpbmcqIGludDUyVG9TdHJpbmcoVk0mIHZtLCBpbnQ2NF90IAogICAgIH0K
IAogICAgIGlmIChyYWRpeCA9PSAxMCkKLSAgICAgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmlu
Zygmdm0sIHZtLm51bWVyaWNTdHJpbmdzLmFkZChzdGF0aWNfY2FzdDxkb3VibGU+KHZhbHVlKSkp
OworICAgICAgICByZXR1cm4ganNOb250cml2aWFsU3RyaW5nKHZtLCB2bS5udW1lcmljU3RyaW5n
cy5hZGQoc3RhdGljX2Nhc3Q8ZG91YmxlPih2YWx1ZSkpKTsKIAogICAgIC8vIFBvc2l0aW9uIHRo
ZSBkZWNpbWFsIHBvaW50IGF0IHRoZSBjZW50ZXIgb2YgdGhlIHN0cmluZywgc2V0CiAgICAgLy8g
dGhlIHN0YXJ0T2ZSZXN1bHRTdHJpbmcgcG9pbnRlciB0byBwb2ludCBhdCB0aGUgZGVjaW1hbCBw
b2ludC4KQEAgLTU2OCw3ICs1NjgsNyBAQCBKU1N0cmluZyogaW50NTJUb1N0cmluZyhWTSYgdm0s
IGludDY0X3QgCiAgICAgY2hhciogc3RhcnRPZlJlc3VsdFN0cmluZyA9IGRlY2ltYWxQb2ludDsK
ICAgICAqZGVjaW1hbFBvaW50ID0gJ1wwJzsKIAotICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJp
bmcoJnZtLCBpbnQ1MlRvU3RyaW5nV2l0aFJhZGl4KHN0YXJ0T2ZSZXN1bHRTdHJpbmcsIHZhbHVl
LCByYWRpeCkpOworICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcodm0sIGludDUyVG9TdHJp
bmdXaXRoUmFkaXgoc3RhcnRPZlJlc3VsdFN0cmluZywgdmFsdWUsIHJhZGl4KSk7CiB9CiAKIEpT
U3RyaW5nKiBudW1iZXJUb1N0cmluZyhWTSYgdm0sIGRvdWJsZSBkb3VibGVWYWx1ZSwgaW50MzJf
dCByYWRpeCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdENvbnN0
cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9P
YmplY3RDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVu
IChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4LTIwMTkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtMjA0LDcg
KzIwNCw3IEBAIEpTVmFsdWUgb2JqZWN0Q29uc3RydWN0b3JHZXRPd25Qcm9wZXJ0eUQKIHsKICAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKLSAgICBQcm9wZXJ0eU5hbWVBcnJheSBwcm9wZXJ0aWVzKCZ2bSwgUHJvcGVydHlO
YW1lTW9kZTo6U3RyaW5nc0FuZFN5bWJvbHMsIFByaXZhdGVTeW1ib2xNb2RlOjpFeGNsdWRlKTsK
KyAgICBQcm9wZXJ0eU5hbWVBcnJheSBwcm9wZXJ0aWVzKHZtLCBQcm9wZXJ0eU5hbWVNb2RlOjpT
dHJpbmdzQW5kU3ltYm9scywgUHJpdmF0ZVN5bWJvbE1vZGU6OkV4Y2x1ZGUpOwogICAgIG9iamVj
dC0+bWV0aG9kVGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgZXhlYywgcHJv
cGVydGllcywgRW51bWVyYXRpb25Nb2RlKERvbnRFbnVtUHJvcGVydGllc01vZGU6OkluY2x1ZGUp
KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCkBAIC0zNzMsNyArMzcz
LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdAogICAgICAgICAv
LyBGb3IgZXhhbXBsZSwgW1tHZXRdXSBvZiBzb3VyY2Ugb2JqZWN0IGNvdWxkIGNvbmZpZ3VyZSBz
ZXR0ZXIgdG8gdGFyZ2V0IG9iamVjdC4gU28gZGlzYWJsZSB0aGUgZmFzdCBwYXRoLgogICAgICAg
ICB0YXJnZXRDYW5QZXJmb3JtRmFzdFB1dCA9IGZhbHNlOwogCi0gICAgICAgIFByb3BlcnR5TmFt
ZUFycmF5IHByb3BlcnRpZXMoJnZtLCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzQW5kU3ltYm9s
cywgUHJpdmF0ZVN5bWJvbE1vZGU6OkV4Y2x1ZGUpOworICAgICAgICBQcm9wZXJ0eU5hbWVBcnJh
eSBwcm9wZXJ0aWVzKHZtLCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzQW5kU3ltYm9scywgUHJp
dmF0ZVN5bWJvbE1vZGU6OkV4Y2x1ZGUpOwogICAgICAgICBzb3VyY2UtPm1ldGhvZFRhYmxlKHZt
KS0+Z2V0T3duUHJvcGVydHlOYW1lcyhzb3VyY2UsIGV4ZWMsIHByb3BlcnRpZXMsIEVudW1lcmF0
aW9uTW9kZShEb250RW51bVByb3BlcnRpZXNNb2RlOjpJbmNsdWRlKSk7CiAgICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKQEAgLTQ0MCw3ICs0NDAsNyBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0CiAgICAgSlNBcnJheSogdmFsdWVzID0g
Y29uc3RydWN0RW1wdHlBcnJheShleGVjLCBudWxscHRyKTsKICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCB7IH0pOwogCi0gICAgUHJvcGVydHlOYW1lQXJyYXkgcHJvcGVydGllcygmdm0s
IFByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3MsIFByaXZhdGVTeW1ib2xNb2RlOjpFeGNsdWRlKTsK
KyAgICBQcm9wZXJ0eU5hbWVBcnJheSBwcm9wZXJ0aWVzKHZtLCBQcm9wZXJ0eU5hbWVNb2RlOjpT
dHJpbmdzLCBQcml2YXRlU3ltYm9sTW9kZTo6RXhjbHVkZSk7CiAgICAgdGFyZ2V0LT5tZXRob2RU
YWJsZSh2bSktPmdldE93blByb3BlcnR5TmFtZXModGFyZ2V0LCBleGVjLCBwcm9wZXJ0aWVzLCBF
bnVtZXJhdGlvbk1vZGUoRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6SW5jbHVkZSkpOwogICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKQEAgLTYwMCw3ICs2MDAsNyBAQCBzdGF0
aWMgSlNWYWx1ZSBkZWZpbmVQcm9wZXJ0aWVzKEV4ZWNTdGF0CiAgICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAgICBQ
cm9wZXJ0eU5hbWVBcnJheSBwcm9wZXJ0eU5hbWVzKCZ2bSwgUHJvcGVydHlOYW1lTW9kZTo6U3Ry
aW5nc0FuZFN5bWJvbHMsIFByaXZhdGVTeW1ib2xNb2RlOjpFeGNsdWRlKTsKKyAgICBQcm9wZXJ0
eU5hbWVBcnJheSBwcm9wZXJ0eU5hbWVzKHZtLCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzQW5k
U3ltYm9scywgUHJpdmF0ZVN5bWJvbE1vZGU6OkV4Y2x1ZGUpOwogICAgIGFzT2JqZWN0KHByb3Bl
cnRpZXMpLT5tZXRob2RUYWJsZSh2bSktPmdldE93blByb3BlcnR5TmFtZXMoYXNPYmplY3QocHJv
cGVydGllcyksIGV4ZWMsIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZShEb250RW51bVBy
b3BlcnRpZXNNb2RlOjpFeGNsdWRlKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
eyB9KTsKICAgICBzaXplX3QgbnVtUHJvcGVydGllcyA9IHByb3BlcnR5TmFtZXMuc2l6ZSgpOwpA
QCAtNjkxLDcgKzY5MSw3IEBAIGJvb2wgc2V0SW50ZWdyaXR5TGV2ZWwoRXhlY1N0YXRlKiBleGVj
LCAKICAgICBpZiAoVU5MSUtFTFkoIXN1Y2Nlc3MpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LSAgICBQcm9wZXJ0eU5hbWVBcnJheSBwcm9wZXJ0aWVzKCZ2bSwgUHJvcGVydHlOYW1lTW9kZTo6
U3RyaW5nc0FuZFN5bWJvbHMsIFByaXZhdGVTeW1ib2xNb2RlOjpFeGNsdWRlKTsKKyAgICBQcm9w
ZXJ0eU5hbWVBcnJheSBwcm9wZXJ0aWVzKHZtLCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzQW5k
U3ltYm9scywgUHJpdmF0ZVN5bWJvbE1vZGU6OkV4Y2x1ZGUpOwogICAgIG9iamVjdC0+bWV0aG9k
VGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgZXhlYywgcHJvcGVydGllcywg
RW51bWVyYXRpb25Nb2RlKERvbnRFbnVtUHJvcGVydGllc01vZGU6OkluY2x1ZGUpKTsKICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7CiAKQEAgLTczOCw3ICs3MzgsNyBAQCBi
b29sIHRlc3RJbnRlZ3JpdHlMZXZlbChFeGVjU3RhdGUqIGV4ZWMsCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAogICAgIC8vIDYuIExldCBrZXlzIGJlID8gTy5bW093blByb3BlcnR5S2V5c11dKCku
Ci0gICAgUHJvcGVydHlOYW1lQXJyYXkga2V5cygmdm0sIFByb3BlcnR5TmFtZU1vZGU6OlN0cmlu
Z3NBbmRTeW1ib2xzLCBQcml2YXRlU3ltYm9sTW9kZTo6RXhjbHVkZSk7CisgICAgUHJvcGVydHlO
YW1lQXJyYXkga2V5cyh2bSwgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5nc0FuZFN5bWJvbHMsIFBy
aXZhdGVTeW1ib2xNb2RlOjpFeGNsdWRlKTsKICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+
Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIGV4ZWMsIGtleXMsIEVudW1lcmF0aW9uTW9kZShE
b250RW51bVByb3BlcnRpZXNNb2RlOjpJbmNsdWRlKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgeyB9KTsKIApAQCAtOTE3LDcgKzkxNyw3IEBAIEpTQXJyYXkqIG93blByb3BlcnR5
S2V5cyhFeGVjU3RhdGUqIGV4ZWMKICAgICAgICAgfQogICAgIH0KIAotICAgIFByb3BlcnR5TmFt
ZUFycmF5IHByb3BlcnRpZXMoJnZtLCBwcm9wZXJ0eU5hbWVNb2RlLCBQcml2YXRlU3ltYm9sTW9k
ZTo6RXhjbHVkZSk7CisgICAgUHJvcGVydHlOYW1lQXJyYXkgcHJvcGVydGllcyh2bSwgcHJvcGVy
dHlOYW1lTW9kZSwgUHJpdmF0ZVN5bWJvbE1vZGU6OkV4Y2x1ZGUpOwogICAgIG9iamVjdC0+bWV0
aG9kVGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgZXhlYywgcHJvcGVydGll
cywgRW51bWVyYXRpb25Nb2RlKGRvbnRFbnVtUHJvcGVydGllc01vZGUpKTsKICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKIApAQCAtOTM1LDcgKzkzNSw3IEBAIEpTQXJy
YXkqIG93blByb3BlcnR5S2V5cyhFeGVjU3RhdGUqIGV4ZWMKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bVByb3BlcnRpZXM7IGkrKykgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhdXRvJiBpZGVudGlmaWVyID0gcHJv
cGVydGllc1tpXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFpZGVu
dGlmaWVyLmlzU3ltYm9sKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdC
dXR0ZXJmbHktPnNldEluZGV4KHZtLCBpLCBqc093bmVkU3RyaW5nKCZ2bSwgaWRlbnRpZmllci5z
dHJpbmcoKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdCdXR0ZXJmbHkt
PnNldEluZGV4KHZtLCBpLCBqc093bmVkU3RyaW5nKHZtLCBpZGVudGlmaWVyLnN0cmluZygpKSk7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3RydWN0dXJlLT5zZXRDYWNoZWRPd25LZXlzKHZtLCBuZXdCdXR0ZXJmbHkpOwpAQCAt
OTU1LDcgKzk1NSw3IEBAIEpTQXJyYXkqIG93blByb3BlcnR5S2V5cyhFeGVjU3RhdGUqIGV4ZWMK
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgYXV0byYgaWRlbnRpZmllciA9IHByb3BlcnRpZXNb
aV07CiAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0eU5hbWVNb2RlID09IFByb3BlcnR5
TmFtZU1vZGU6OlN0cmluZ3MpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghaWRl
bnRpZmllci5pc1N5bWJvbCgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcltpXS5z
ZXQodm0sIGtleXMsIGpzT3duZWRTdHJpbmcoJnZtLCBpZGVudGlmaWVyLnN0cmluZygpKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJbaV0uc2V0KHZtLCBrZXlzLCBqc093bmVkU3Ry
aW5nKHZtLCBpZGVudGlmaWVyLnN0cmluZygpKSk7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxz
ZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoaWRlbnRpZmllci5pc1N5bWJvbCgp
KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcltpXS5zZXQodm0sIGtleXMsIFN5bWJv
bDo6Y3JlYXRlKHZtLCBzdGF0aWNfY2FzdDxTeW1ib2xJbXBsJj4oKmlkZW50aWZpZXIuaW1wbCgp
KSkpOwpAQCAtOTgwLDcgKzk4MCw3IEBAIEpTQXJyYXkqIG93blByb3BlcnR5S2V5cyhFeGVjU3Rh
dGUqIGV4ZWMKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1Qcm9wZXJ0aWVzOyBp
KyspIHsKICAgICAgICAgICAgIGNvbnN0IGF1dG8mIGlkZW50aWZpZXIgPSBwcm9wZXJ0aWVzW2ld
OwogICAgICAgICAgICAgQVNTRVJUKCFpZGVudGlmaWVyLmlzU3ltYm9sKCkpOwotICAgICAgICAg
ICAgcHVzaERpcmVjdChleGVjLCBrZXlzLCBqc093bmVkU3RyaW5nKGV4ZWMsIGlkZW50aWZpZXIu
c3RyaW5nKCkpKTsKKyAgICAgICAgICAgIHB1c2hEaXJlY3QoZXhlYywga2V5cywganNPd25lZFN0
cmluZyh2bSwgaWRlbnRpZmllci5zdHJpbmcoKSkpOwogICAgICAgICAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CkBAIC0x
MDA5LDcgKzEwMDksNyBAQCBKU0FycmF5KiBvd25Qcm9wZXJ0eUtleXMoRXhlY1N0YXRlKiBleGVj
CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
IHB1c2hEaXJlY3QoZXhlYywga2V5cywganNPd25lZFN0cmluZyhleGVjLCBpZGVudGlmaWVyLnN0
cmluZygpKSk7CisgICAgICAgICAgICBwdXNoRGlyZWN0KGV4ZWMsIGtleXMsIGpzT3duZWRTdHJp
bmcodm0sIGlkZW50aWZpZXIuc3RyaW5nKCkpKTsKICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIG51bGxwdHIpOwogICAgICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL09iamVjdFByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjQ5
MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAx
OTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmlnaHQgKEMp
IDIwMDgtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0
IChDKSAyMDA4LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYwpAQCAtMzQ0LDcgKzM0NCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgb2JqZWN0UHJvdG8KICAgICAgICAgaWYgKCFuZXdTdHJpbmcpCiAgICAgICAgICAgICByZXR1
cm4gdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMsIHNjb3BlKTsKIAotICAgICAgICBhdXRvIHJl
c3VsdCA9IGpzTm9udHJpdmlhbFN0cmluZygmdm0sIG5ld1N0cmluZyk7CisgICAgICAgIGF1dG8g
cmVzdWx0ID0ganNOb250cml2aWFsU3RyaW5nKHZtLCBuZXdTdHJpbmcpOwogICAgICAgICB0aGlz
T2JqZWN0LT5zdHJ1Y3R1cmUodm0pLT5zZXRPYmplY3RUb1N0cmluZ1ZhbHVlKGV4ZWMsIHZtLCBy
ZXN1bHQsIHRvU3RyaW5nVGFnU2xvdCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfSkp
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wZXJhdGlvbnMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcGVyYXRpb25zLmgJKHJl
dmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wZXJhdGlv
bnMuaAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBAQCBBTFdBWVNfSU5MSU5FIEpTU3Ry
aW5nKiBqc1N0cmluZyhFeGVjU3RhCiAgICAgICAgIHJldHVybiBzMjsKICAgICB1bnNpZ25lZCBs
ZW5ndGgyID0gczItPmxlbmd0aCgpOwogICAgIGlmICghbGVuZ3RoMikKLSAgICAgICAgcmV0dXJu
IGpzU3RyaW5nKCZ2bSwgdTEpOworICAgICAgICByZXR1cm4ganNTdHJpbmcodm0sIHUxKTsKICAg
ICBzdGF0aWNfYXNzZXJ0KEpTU3RyaW5nOjpNYXhMZW5ndGggPT0gc3RkOjpudW1lcmljX2xpbWl0
czxpbnQzMl90Pjo6bWF4KCksICIiKTsKICAgICBpZiAoc3VtT3ZlcmZsb3dzPGludDMyX3Q+KGxl
bmd0aDEsIGxlbmd0aDIpKSB7CiAgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjLCBz
Y29wZSk7CkBAIC02MCw3ICs2MCw3IEBAIEFMV0FZU19JTkxJTkUgSlNTdHJpbmcqIGpzU3RyaW5n
KEV4ZWNTdGEKICAgICAvLyBXZSBjb25zZXJ2YXRpdmVseSBjb25zaWRlciB0aGUgY29zdCBvZiB1
MS4gQ3VycmVudGx5LCB3ZSBhcmUgbm90IGNvbnNpZGVyaW5nIGFib3V0IGlzOEJpdCgpIGNhc2Ug
YmVjYXVzZSAxNi1iaXQKICAgICAvLyBzdHJpbmdzIGFyZSByZWxhdGl2ZWx5IHJhcmUuIEJ1dCB3
ZSBjYW4gZG8gdGhhdCBpZiB3ZSBuZWVkIHRvIGNvbnNpZGVyIGl0LgogICAgIGlmIChzMi0+aXNS
b3BlKCkgfHwgKFN0cmluZ0ltcGw6OmhlYWRlclNpemU8TENoYXI+KCkgKyBsZW5ndGgxICsgbGVu
Z3RoMikgPj0gc2l6ZW9mKEpTUm9wZVN0cmluZykpCi0gICAgICAgIHJldHVybiBKU1JvcGVTdHJp
bmc6OmNyZWF0ZSh2bSwganNTdHJpbmcoJnZtLCB1MSksIHMyKTsKKyAgICAgICAgcmV0dXJuIEpT
Um9wZVN0cmluZzo6Y3JlYXRlKHZtLCBqc1N0cmluZyh2bSwgdTEpLCBzMik7CiAKICAgICBBU1NF
UlQoIXMyLT5pc1JvcGUoKSk7CiAgICAgY29uc3QgU3RyaW5nJiB1MiA9IHMyLT52YWx1ZShleGVj
KTsKQEAgLTgwLDcgKzgwLDcgQEAgQUxXQVlTX0lOTElORSBKU1N0cmluZyoganNTdHJpbmcoRXhl
Y1N0YQogCiAgICAgdW5zaWduZWQgbGVuZ3RoMSA9IHMxLT5sZW5ndGgoKTsKICAgICBpZiAoIWxl
bmd0aDEpCi0gICAgICAgIHJldHVybiBqc1N0cmluZygmdm0sIHUyKTsKKyAgICAgICAgcmV0dXJu
IGpzU3RyaW5nKHZtLCB1Mik7CiAgICAgdW5zaWduZWQgbGVuZ3RoMiA9IHUyLmxlbmd0aCgpOwog
ICAgIGlmICghbGVuZ3RoMikKICAgICAgICAgcmV0dXJuIHMxOwpAQCAtOTMsNyArOTMsNyBAQCBB
TFdBWVNfSU5MSU5FIEpTU3RyaW5nKiBqc1N0cmluZyhFeGVjU3RhCiAgICAgLy8gKDEpIENvc3Qg
b2YgbWFraW5nIEpTU3RyaW5nICAgIDogc2l6ZW9mKEpTU3RyaW5nKSAoZm9yIG5ldyBzdHJpbmcp
ICsgc2l6ZW9mKFN0cmluZ0ltcGwgaGVhZGVyKSArIGxlbmd0aDEgKyBsZW5ndGgyCiAgICAgLy8g
KDIpIENvc3Qgb2YgbWFraW5nIEpTUm9wZVN0cmluZzogc2l6ZW9mKEpTU3RyaW5nKSAoZm9yIHUy
KSArIHNpemVvZihKU1JvcGVTdHJpbmcpCiAgICAgaWYgKHMxLT5pc1JvcGUoKSB8fCAoU3RyaW5n
SW1wbDo6aGVhZGVyU2l6ZTxMQ2hhcj4oKSArIGxlbmd0aDEgKyBsZW5ndGgyKSA+PSBzaXplb2Yo
SlNSb3BlU3RyaW5nKSkKLSAgICAgICAgcmV0dXJuIEpTUm9wZVN0cmluZzo6Y3JlYXRlKHZtLCBz
MSwganNTdHJpbmcoJnZtLCB1MikpOworICAgICAgICByZXR1cm4gSlNSb3BlU3RyaW5nOjpjcmVh
dGUodm0sIHMxLCBqc1N0cmluZyh2bSwgdTIpKTsKIAogICAgIEFTU0VSVCghczEtPmlzUm9wZSgp
KTsKICAgICBjb25zdCBTdHJpbmcmIHUxID0gczEtPnZhbHVlKGV4ZWMpOwpAQCAtMTU5LDEwICsx
NTksMTAgQEAgQUxXQVlTX0lOTElORSBKU1N0cmluZyoganNTdHJpbmcoRXhlY1N0YQogCiAgICAg
dW5zaWduZWQgbGVuZ3RoMSA9IHUxLmxlbmd0aCgpOwogICAgIGlmICghbGVuZ3RoMSkKLSAgICAg
ICAgcmV0dXJuIGpzU3RyaW5nKCZ2bSwgdTIpOworICAgICAgICByZXR1cm4ganNTdHJpbmcodm0s
IHUyKTsKICAgICB1bnNpZ25lZCBsZW5ndGgyID0gdTIubGVuZ3RoKCk7CiAgICAgaWYgKCFsZW5n
dGgyKQotICAgICAgICByZXR1cm4ganNTdHJpbmcoJnZtLCB1MSk7CisgICAgICAgIHJldHVybiBq
c1N0cmluZyh2bSwgdTEpOwogICAgIHN0YXRpY19hc3NlcnQoSlNTdHJpbmc6Ok1heExlbmd0aCA9
PSBzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptYXgoKSwgIiIpOwogICAgIGlmIChzdW1P
dmVyZmxvd3M8aW50MzJfdD4obGVuZ3RoMSwgbGVuZ3RoMikpIHsKICAgICAgICAgdGhyb3dPdXRP
Zk1lbW9yeUVycm9yKGV4ZWMsIHNjb3BlKTsKQEAgLTE3Miw3ICsxNzIsNyBAQCBBTFdBWVNfSU5M
SU5FIEpTU3RyaW5nKiBqc1N0cmluZyhFeGVjU3RhCiAgICAgLy8gKDEpIENvc3Qgb2YgbWFraW5n
IEpTU3RyaW5nICAgIDogc2l6ZW9mKEpTU3RyaW5nKSAoZm9yIG5ldyBzdHJpbmcpICsgc2l6ZW9m
KFN0cmluZ0ltcGwgaGVhZGVyKSArIGxlbmd0aDEgKyBsZW5ndGgyCiAgICAgLy8gKDIpIENvc3Qg
b2YgbWFraW5nIEpTUm9wZVN0cmluZzogc2l6ZW9mKEpTU3RyaW5nKSAoZm9yIHUxKSArIHNpemVv
ZihKU1N0cmluZykgKGZvciB1MikgKyBzaXplb2YoSlNSb3BlU3RyaW5nKQogICAgIGlmICgoU3Ry
aW5nSW1wbDo6aGVhZGVyU2l6ZTxMQ2hhcj4oKSArIGxlbmd0aDEgKyBsZW5ndGgyKSA+PSAoc2l6
ZW9mKEpTUm9wZVN0cmluZykgKyBzaXplb2YoSlNTdHJpbmcpKSkKLSAgICAgICAgcmV0dXJuIEpT
Um9wZVN0cmluZzo6Y3JlYXRlKHZtLCBqc1N0cmluZygmdm0sIHUxKSwganNTdHJpbmcoJnZtLCB1
MikpOworICAgICAgICByZXR1cm4gSlNSb3BlU3RyaW5nOjpjcmVhdGUodm0sIGpzU3RyaW5nKHZt
LCB1MSksIGpzU3RyaW5nKHZtLCB1MikpOwogCiAgICAgU3RyaW5nIG5ld1N0cmluZyA9IHRyeU1h
a2VTdHJpbmcodTEsIHUyKTsKICAgICBpZiAoIW5ld1N0cmluZykgewpAQCAtMTg0LDggKzE4NCw4
IEBAIEFMV0FZU19JTkxJTkUgSlNTdHJpbmcqIGpzU3RyaW5nKEV4ZWNTdGEKIAogQUxXQVlTX0lO
TElORSBKU1N0cmluZyoganNTdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcmIHUx
LCBjb25zdCBTdHJpbmcmIHUyLCBjb25zdCBTdHJpbmcmIHUzKQogewotICAgIFZNKiB2bSA9ICZl
eGVjLT52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7Cisg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAKICAgICB1bnNpZ25lZCBsZW5ndGgxID0gdTEubGVuZ3RoKCk7CiAgICAgdW5z
aWduZWQgbGVuZ3RoMiA9IHUyLmxlbmd0aCgpOwpAQCAtMjEyLDIxICsyMTIsMjEgQEAgQUxXQVlT
X0lOTElORSBKU1N0cmluZyoganNTdHJpbmcoRXhlY1N0YQogICAgIC8vICgxKSBDb3N0IG9mIG1h
a2luZyBKU1N0cmluZyAgICA6IHNpemVvZihKU1N0cmluZykgKGZvciBuZXcgc3RyaW5nKSArIHNp
emVvZihTdHJpbmdJbXBsIGhlYWRlcikgKyBsZW5ndGgxICsgbGVuZ3RoMiArIGxlbmd0aDMKICAg
ICAvLyAoMikgQ29zdCBvZiBtYWtpbmcgSlNSb3BlU3RyaW5nOiBzaXplb2YoSlNTdHJpbmcpIChm
b3IgdTEpICsgc2l6ZW9mKEpTU3RyaW5nKSAoZm9yIHUyKSArIHNpemVvZihKU1N0cmluZykgKGZv
ciB1MykgKyBzaXplb2YoSlNSb3BlU3RyaW5nKQogICAgIGlmICgoU3RyaW5nSW1wbDo6aGVhZGVy
U2l6ZTxMQ2hhcj4oKSArIGxlbmd0aDEgKyBsZW5ndGgyICsgbGVuZ3RoMykgPj0gKHNpemVvZihK
U1JvcGVTdHJpbmcpICsgc2l6ZW9mKEpTU3RyaW5nKSAqIDIpKQotICAgICAgICByZXR1cm4gSlNS
b3BlU3RyaW5nOjpjcmVhdGUoKnZtLCBqc1N0cmluZyh2bSwgdTEpLCBqc1N0cmluZyh2bSwgdTIp
LCBqc1N0cmluZyh2bSwgdTMpKTsKKyAgICAgICAgcmV0dXJuIEpTUm9wZVN0cmluZzo6Y3JlYXRl
KHZtLCBqc1N0cmluZyh2bSwgdTEpLCBqc1N0cmluZyh2bSwgdTIpLCBqc1N0cmluZyh2bSwgdTMp
KTsKIAogICAgIFN0cmluZyBuZXdTdHJpbmcgPSB0cnlNYWtlU3RyaW5nKHUxLCB1MiwgdTMpOwog
ICAgIGlmICghbmV3U3RyaW5nKSB7CiAgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVj
LCBzY29wZSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KLSAgICByZXR1cm4gSlNT
dHJpbmc6OmNyZWF0ZSgqdm0sIG5ld1N0cmluZy5yZWxlYXNlSW1wbCgpLnJlbGVhc2VOb25OdWxs
KCkpOworICAgIHJldHVybiBKU1N0cmluZzo6Y3JlYXRlKHZtLCBuZXdTdHJpbmcucmVsZWFzZUlt
cGwoKS5yZWxlYXNlTm9uTnVsbCgpKTsKIH0KIAogQUxXQVlTX0lOTElORSBKU1ZhbHVlIGpzU3Ry
aW5nRnJvbVJlZ2lzdGVyQXJyYXkoRXhlY1N0YXRlKiBleGVjLCBSZWdpc3Rlciogc3RyaW5ncywg
dW5zaWduZWQgY291bnQpCiB7Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKLSAgICBKU1JvcGVTdHJpbmc6OlJvcGVC
dWlsZGVyPFJlY29yZE92ZXJmbG93PiByb3BlQnVpbGRlcigqdm0pOworICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAg
IEpTUm9wZVN0cmluZzo6Um9wZUJ1aWxkZXI8UmVjb3JkT3ZlcmZsb3c+IHJvcGVCdWlsZGVyKHZt
KTsKIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CiAgICAgICAg
IEpTVmFsdWUgdiA9IHN0cmluZ3NbLXN0YXRpY19jYXN0PGludD4oaSldLmpzVmFsdWUoKTsKQEAg
LTI0MSw5ICsyNDEsOSBAQCBBTFdBWVNfSU5MSU5FIEpTVmFsdWUganNTdHJpbmdGcm9tUmVnaXN0
CiAKIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBqc1N0cmluZ0Zyb21Bcmd1bWVudHMoRXhlY1N0YXRl
KiBleGVjLCBKU1ZhbHVlIHRoaXNWYWx1ZSkKIHsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsK
LSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSgqdm0pOwotICAgIEpTUm9wZVN0
cmluZzo6Um9wZUJ1aWxkZXI8UmVjb3JkT3ZlcmZsb3c+IHJvcGVCdWlsZGVyKCp2bSk7CisgICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CisgICAgSlNSb3BlU3RyaW5nOjpSb3BlQnVpbGRlcjxSZWNvcmRPdmVyZmxvdz4gcm9w
ZUJ1aWxkZXIodm0pOwogICAgIEpTU3RyaW5nKiBzdHIgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhl
Yyk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICByb3BlQnVpbGRl
ci5hcHBlbmQoc3RyKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb2dy
YW1FeGVjdXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Qcm9ncmFtRXhlY3V0YWJsZS5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb2dyYW1FeGVjdXRhYmxlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTc5LDcgKzE3OSw3IEBAIEpTT2JqZWN0KiBQcm9ncmFtRXhlY3V0YWJsZTo6aW5pdGlh
bGl6ZUcKIAogICAgIGZvciAoYXV0byYgZW50cnkgOiB2YXJpYWJsZURlY2xhcmF0aW9ucykgewog
ICAgICAgICBBU1NFUlQoZW50cnkudmFsdWUuaXNWYXIoKSk7Ci0gICAgICAgIGdsb2JhbE9iamVj
dC0+YWRkVmFyKGNhbGxGcmFtZSwgSWRlbnRpZmllcjo6ZnJvbVVpZCgmdm0sIGVudHJ5LmtleS5n
ZXQoKSkpOworICAgICAgICBnbG9iYWxPYmplY3QtPmFkZFZhcihjYWxsRnJhbWUsIElkZW50aWZp
ZXI6OmZyb21VaWQodm0sIGVudHJ5LmtleS5nZXQoKSkpOwogICAgICAgICB0aHJvd1Njb3BlLmFz
c2VydE5vRXhjZXB0aW9uKCk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Qcm9taXNlRGVmZXJyZWRUaW1lci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvbWlzZURlZmVycmVkVGltZXIuY3BwCShyZXZpc2lvbiAy
NDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9taXNlRGVmZXJyZWRU
aW1lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDE3LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE3LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zOSw3ICszOSw3IEBAIHN0YXRpYyBjb25zdCBi
b29sIHZlcmJvc2UgPSBmYWxzZTsKIH0KIAogUHJvbWlzZURlZmVycmVkVGltZXI6OlByb21pc2VE
ZWZlcnJlZFRpbWVyKFZNJiB2bSkKLSAgICA6IEJhc2UoJnZtKQorICAgIDogQmFzZSh2bSkKIHsK
IH0KIApAQCAtMTIxLDEzICsxMjEsMTMgQEAgdm9pZCBQcm9taXNlRGVmZXJyZWRUaW1lcjo6YWRk
UGVuZGluZ1BybwogCiBib29sIFByb21pc2VEZWZlcnJlZFRpbWVyOjpoYXNQZW5kaW5nUHJvbWlz
ZShKU1Byb21pc2VEZWZlcnJlZCogdGlja2V0KQogewotICAgIEFTU0VSVCh0aWNrZXQtPnZtKCkt
PmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOworICAgIEFTU0VSVCh0aWNrZXQtPnZt
KCkuY3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7CiAgICAgcmV0dXJuIG1fcGVuZGlu
Z1Byb21pc2VzLmNvbnRhaW5zKHRpY2tldCk7CiB9CiAKIGJvb2wgUHJvbWlzZURlZmVycmVkVGlt
ZXI6Omhhc0RlcGVuZGFuY3lJblBlbmRpbmdQcm9taXNlKEpTUHJvbWlzZURlZmVycmVkKiB0aWNr
ZXQsIEpTQ2VsbCogZGVwZW5kZW5jeSkKIHsKLSAgICBBU1NFUlQodGlja2V0LT52bSgpLT5jdXJy
ZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsKKyAgICBBU1NFUlQodGlja2V0LT52bSgpLmN1
cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOwogICAgIEFTU0VSVChtX3BlbmRpbmdQcm9t
aXNlcy5jb250YWlucyh0aWNrZXQpKTsKIAogICAgIGF1dG8gcmVzdWx0ID0gbV9wZW5kaW5nUHJv
bWlzZXMuZ2V0KHRpY2tldCk7CkBAIC0xMzYsNyArMTM2LDcgQEAgYm9vbCBQcm9taXNlRGVmZXJy
ZWRUaW1lcjo6aGFzRGVwZW5kYW5jeQogCiBib29sIFByb21pc2VEZWZlcnJlZFRpbWVyOjpjYW5j
ZWxQZW5kaW5nUHJvbWlzZShKU1Byb21pc2VEZWZlcnJlZCogdGlja2V0KQogewotICAgIEFTU0VS
VCh0aWNrZXQtPnZtKCktPmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOworICAgIEFT
U0VSVCh0aWNrZXQtPnZtKCkuY3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7CiAgICAg
Ym9vbCByZXN1bHQgPSBtX3BlbmRpbmdQcm9taXNlcy5yZW1vdmUodGlja2V0KTsKIAogICAgIGlm
IChyZXN1bHQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eU5h
bWVBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1By
b3BlcnR5TmFtZUFycmF5LmgJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1Byb3BlcnR5TmFtZUFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogIENvcHlyaWdodCAoQykgMjAwNiwgMjAwOCwgMjAxMiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTQ3LDcg
KzQ3LDcgQEAgcHJpdmF0ZToKIC8vIEZJWE1FOiBSZW5hbWUgdG8gUHJvcGVydHlOYW1lQXJyYXlC
dWlsZGVyLgogY2xhc3MgUHJvcGVydHlOYW1lQXJyYXkgewogcHVibGljOgotICAgIFByb3BlcnR5
TmFtZUFycmF5KFZNKiB2bSwgUHJvcGVydHlOYW1lTW9kZSBwcm9wZXJ0eU5hbWVNb2RlLCBQcml2
YXRlU3ltYm9sTW9kZSBwcml2YXRlU3ltYm9sTW9kZSkKKyAgICBQcm9wZXJ0eU5hbWVBcnJheShW
TSYgdm0sIFByb3BlcnR5TmFtZU1vZGUgcHJvcGVydHlOYW1lTW9kZSwgUHJpdmF0ZVN5bWJvbE1v
ZGUgcHJpdmF0ZVN5bWJvbE1vZGUpCiAgICAgICAgIDogbV9kYXRhKFByb3BlcnR5TmFtZUFycmF5
RGF0YTo6Y3JlYXRlKCkpCiAgICAgICAgICwgbV92bSh2bSkKICAgICAgICAgLCBtX3Byb3BlcnR5
TmFtZU1vZGUocHJvcGVydHlOYW1lTW9kZSkKQEAgLTU1LDcgKzU1LDcgQEAgcHVibGljOgogICAg
IHsKICAgICB9CiAKLSAgICBWTSogdm0oKSB7IHJldHVybiBtX3ZtOyB9CisgICAgVk0mIHZtKCkg
eyByZXR1cm4gbV92bTsgfQogCiAgICAgdm9pZCBhZGQodWludDMyX3QgaW5kZXgpCiAgICAgewpA
QCAtOTEsNyArOTEsNyBAQCBwcml2YXRlOgogCiAgICAgUmVmUHRyPFByb3BlcnR5TmFtZUFycmF5
RGF0YT4gbV9kYXRhOwogICAgIEhhc2hTZXQ8VW5pcXVlZFN0cmluZ0ltcGwqPiBtX3NldDsKLSAg
ICBWTSogbV92bTsKKyAgICBWTSYgbV92bTsKICAgICBQcm9wZXJ0eU5hbWVNb2RlIG1fcHJvcGVy
dHlOYW1lTW9kZTsKICAgICBQcml2YXRlU3ltYm9sTW9kZSBtX3ByaXZhdGVTeW1ib2xNb2RlOwog
fTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5U2xvdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5U2xvdC5o
CShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9w
ZXJ0eVNsb3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiAgQ29weXJp
Z2h0IChDKSAyMDA1LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENv
cHlyaWdodCAoQykgMjAwNS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCkBAIC00MTYsMTMgKzQxNiwxNCBAQCBBTFdBWVNfSU5MSU5FIEpT
VmFsdWUgUHJvcGVydHlTbG90OjpnZXRWCiAKIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBQcm9wZXJ0
eVNsb3Q6OmdldFZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lKSBj
b25zdAogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgaWYgKG1fcHJvcGVydHlUeXBl
ID09IFR5cGVWYWx1ZSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmRlY29kZShtX2RhdGEudmFs
dWUpOwogICAgIGlmIChtX3Byb3BlcnR5VHlwZSA9PSBUeXBlR2V0dGVyKQogICAgICAgICByZXR1
cm4gZnVuY3Rpb25HZXR0ZXIoZXhlYyk7CiAgICAgaWYgKG1fcHJvcGVydHlUeXBlID09IFR5cGVD
dXN0b21BY2Nlc3NvcikKLSAgICAgICAgcmV0dXJuIGN1c3RvbUFjY2Vzc29yR2V0dGVyKGV4ZWMs
IElkZW50aWZpZXI6OmZyb20oZXhlYywgcHJvcGVydHlOYW1lKSk7Ci0gICAgcmV0dXJuIGN1c3Rv
bUdldHRlcihleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIHByb3BlcnR5TmFtZSkpOworICAg
ICAgICByZXR1cm4gY3VzdG9tQWNjZXNzb3JHZXR0ZXIoZXhlYywgSWRlbnRpZmllcjo6ZnJvbSh2
bSwgcHJvcGVydHlOYW1lKSk7CisgICAgcmV0dXJuIGN1c3RvbUdldHRlcihleGVjLCBJZGVudGlm
aWVyOjpmcm9tKHZtLCBwcm9wZXJ0eU5hbWUpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eU9iamVjdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlPYmplY3QuY3BwCShy
ZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eU9i
amVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2Niw3ICsxNjYsNyBAQCBzdGF0aWMgSlNWYWx1
ZSBwZXJmb3JtUHJveHlHZXQoRXhlY1N0YXRlCiAKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBh
cmd1bWVudHM7CiAgICAgYXJndW1lbnRzLmFwcGVuZCh0YXJnZXQpOwotICAgIGFyZ3VtZW50cy5h
cHBlbmQoaWRlbnRpZmllclRvU2FmZVB1YmxpY0pTVmFsdWUodm0sIElkZW50aWZpZXI6OmZyb21V
aWQoJnZtLCBwcm9wZXJ0eU5hbWUudWlkKCkpKSk7CisgICAgYXJndW1lbnRzLmFwcGVuZChpZGVu
dGlmaWVyVG9TYWZlUHVibGljSlNWYWx1ZSh2bSwgSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgcHJv
cGVydHlOYW1lLnVpZCgpKSkpOwogICAgIGFyZ3VtZW50cy5hcHBlbmQocmVjZWl2ZXIpOwogICAg
IEFTU0VSVCghYXJndW1lbnRzLmhhc092ZXJmbG93ZWQoKSk7CiAgICAgSlNWYWx1ZSB0cmFwUmVz
dWx0ID0gY2FsbChleGVjLCBnZXRIYW5kbGVyLCBjYWxsVHlwZSwgY2FsbERhdGEsIGhhbmRsZXIs
IGFyZ3VtZW50cyk7CkBAIC0yMzgsNyArMjM4LDcgQEAgYm9vbCBQcm94eU9iamVjdDo6cGVyZm9y
bUludGVybmFsTWV0aG9kRwogCiAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJndW1lbnRzOwog
ICAgIGFyZ3VtZW50cy5hcHBlbmQodGFyZ2V0KTsKLSAgICBhcmd1bWVudHMuYXBwZW5kKGlkZW50
aWZpZXJUb1NhZmVQdWJsaWNKU1ZhbHVlKHZtLCBJZGVudGlmaWVyOjpmcm9tVWlkKCZ2bSwgcHJv
cGVydHlOYW1lLnVpZCgpKSkpOworICAgIGFyZ3VtZW50cy5hcHBlbmQoaWRlbnRpZmllclRvU2Fm
ZVB1YmxpY0pTVmFsdWUodm0sIElkZW50aWZpZXI6OmZyb21VaWQodm0sIHByb3BlcnR5TmFtZS51
aWQoKSkpKTsKICAgICBBU1NFUlQoIWFyZ3VtZW50cy5oYXNPdmVyZmxvd2VkKCkpOwogICAgIEpT
VmFsdWUgdHJhcFJlc3VsdCA9IGNhbGwoZXhlYywgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTWV0
aG9kLCBjYWxsVHlwZSwgY2FsbERhdGEsIGhhbmRsZXIsIGFyZ3VtZW50cyk7CiAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwpAQCAtMzQ3LDcgKzM0Nyw3IEBAIGJvb2wgUHJv
eHlPYmplY3Q6OnBlcmZvcm1IYXNQcm9wZXJ0eShFeGUKIAogICAgIE1hcmtlZEFyZ3VtZW50QnVm
ZmVyIGFyZ3VtZW50czsKICAgICBhcmd1bWVudHMuYXBwZW5kKHRhcmdldCk7Ci0gICAgYXJndW1l
bnRzLmFwcGVuZChpZGVudGlmaWVyVG9TYWZlUHVibGljSlNWYWx1ZSh2bSwgSWRlbnRpZmllcjo6
ZnJvbVVpZCgmdm0sIHByb3BlcnR5TmFtZS51aWQoKSkpKTsKKyAgICBhcmd1bWVudHMuYXBwZW5k
KGlkZW50aWZpZXJUb1NhZmVQdWJsaWNKU1ZhbHVlKHZtLCBJZGVudGlmaWVyOjpmcm9tVWlkKHZt
LCBwcm9wZXJ0eU5hbWUudWlkKCkpKSk7CiAgICAgQVNTRVJUKCFhcmd1bWVudHMuaGFzT3ZlcmZs
b3dlZCgpKTsKICAgICBKU1ZhbHVlIHRyYXBSZXN1bHQgPSBjYWxsKGV4ZWMsIGhhc01ldGhvZCwg
Y2FsbFR5cGUsIGNhbGxEYXRhLCBoYW5kbGVyLCBhcmd1bWVudHMpOwogICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIGZhbHNlKTsKQEAgLTQxMyw4ICs0MTMsOSBAQCBib29sIFByb3h5T2Jq
ZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPCiAKIGJvb2wgUHJveHlPYmplY3Q6OmdldE93blBy
b3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCB1bnNp
Z25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKKyAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOwogICAgIFByb3h5T2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PFByb3h5T2Jq
ZWN0Kj4ob2JqZWN0KTsKLSAgICBJZGVudGlmaWVyIGlkZW50ID0gSWRlbnRpZmllcjo6ZnJvbShl
eGVjLCBwcm9wZXJ0eU5hbWUpOyAKKyAgICBJZGVudGlmaWVyIGlkZW50ID0gSWRlbnRpZmllcjo6
ZnJvbSh2bSwgcHJvcGVydHlOYW1lKTsKICAgICByZXR1cm4gdGhpc09iamVjdC0+Z2V0T3duUHJv
cGVydHlTbG90Q29tbW9uKGV4ZWMsIGlkZW50LmltcGwoKSwgc2xvdCk7CiB9CiAKQEAgLTQ1MCw3
ICs0NTEsNyBAQCBib29sIFByb3h5T2JqZWN0OjpwZXJmb3JtUHV0KEV4ZWNTdGF0ZSogCiAKICAg
ICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmd1bWVudHM7CiAgICAgYXJndW1lbnRzLmFwcGVuZCh0
YXJnZXQpOwotICAgIGFyZ3VtZW50cy5hcHBlbmQoaWRlbnRpZmllclRvU2FmZVB1YmxpY0pTVmFs
dWUodm0sIElkZW50aWZpZXI6OmZyb21VaWQoJnZtLCBwcm9wZXJ0eU5hbWUudWlkKCkpKSk7Cisg
ICAgYXJndW1lbnRzLmFwcGVuZChpZGVudGlmaWVyVG9TYWZlUHVibGljSlNWYWx1ZSh2bSwgSWRl
bnRpZmllcjo6ZnJvbVVpZCh2bSwgcHJvcGVydHlOYW1lLnVpZCgpKSkpOwogICAgIGFyZ3VtZW50
cy5hcHBlbmQocHV0VmFsdWUpOwogICAgIGFyZ3VtZW50cy5hcHBlbmQodGhpc1ZhbHVlKTsKICAg
ICBBU1NFUlQoIWFyZ3VtZW50cy5oYXNPdmVyZmxvd2VkKCkpOwpAQCAtNDk4LDcgKzQ5OSw3IEBA
IGJvb2wgUHJveHlPYmplY3Q6OnB1dEJ5SW5kZXhDb21tb24oRXhlY1MKIHsKICAgICBWTSYgdm0g
PSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
LSAgICBJZGVudGlmaWVyIGlkZW50ID0gSWRlbnRpZmllcjo6ZnJvbShleGVjLCBwcm9wZXJ0eU5h
bWUpOworICAgIElkZW50aWZpZXIgaWRlbnQgPSBJZGVudGlmaWVyOjpmcm9tKHZtLCBwcm9wZXJ0
eU5hbWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKICAgICBhdXRv
IHBlcmZvcm1EZWZhdWx0UHV0ID0gWyZdICgpIHsKICAgICAgICAgSlNPYmplY3QqIHRhcmdldCA9
IHRoaXMtPnRhcmdldCgpOwpAQCAtNjUzLDcgKzY1NCw3IEBAIGJvb2wgUHJveHlPYmplY3Q6OnBl
cmZvcm1EZWxldGUoRXhlY1N0YXQKIAogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3VtZW50
czsKICAgICBhcmd1bWVudHMuYXBwZW5kKHRhcmdldCk7Ci0gICAgYXJndW1lbnRzLmFwcGVuZChp
ZGVudGlmaWVyVG9TYWZlUHVibGljSlNWYWx1ZSh2bSwgSWRlbnRpZmllcjo6ZnJvbVVpZCgmdm0s
IHByb3BlcnR5TmFtZS51aWQoKSkpKTsKKyAgICBhcmd1bWVudHMuYXBwZW5kKGlkZW50aWZpZXJU
b1NhZmVQdWJsaWNKU1ZhbHVlKHZtLCBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCBwcm9wZXJ0eU5h
bWUudWlkKCkpKSk7CiAgICAgQVNTRVJUKCFhcmd1bWVudHMuaGFzT3ZlcmZsb3dlZCgpKTsKICAg
ICBKU1ZhbHVlIHRyYXBSZXN1bHQgPSBjYWxsKGV4ZWMsIGRlbGV0ZVByb3BlcnR5TWV0aG9kLCBj
YWxsVHlwZSwgY2FsbERhdGEsIGhhbmRsZXIsIGFyZ3VtZW50cyk7CiAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgZmFsc2UpOwpAQCAtNjk3LDExICs2OTgsMTIgQEAgYm9vbCBQcm94eU9i
amVjdDo6ZGVsZXRlUHJvcGVydHkoSlNDZWxsKgogCiBib29sIFByb3h5T2JqZWN0OjpkZWxldGVQ
cm9wZXJ0eUJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHBy
b3BlcnR5TmFtZSkKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIFByb3h5T2JqZWN0
KiB0aGlzT2JqZWN0ID0ganNDYXN0PFByb3h5T2JqZWN0Kj4oY2VsbCk7Ci0gICAgSWRlbnRpZmll
ciBpZGVudCA9IElkZW50aWZpZXI6OmZyb20oZXhlYywgcHJvcGVydHlOYW1lKTsgCisgICAgSWRl
bnRpZmllciBpZGVudCA9IElkZW50aWZpZXI6OmZyb20odm0sIHByb3BlcnR5TmFtZSk7CiAgICAg
YXV0byBwZXJmb3JtRGVmYXVsdERlbGV0ZSA9IFsmXSAoKSAtPiBib29sIHsKICAgICAgICAgSlNP
YmplY3QqIHRhcmdldCA9IHRoaXNPYmplY3QtPnRhcmdldCgpOwotICAgICAgICByZXR1cm4gdGFy
Z2V0LT5tZXRob2RUYWJsZShleGVjLT52bSgpKS0+ZGVsZXRlUHJvcGVydHlCeUluZGV4KHRhcmdl
dCwgZXhlYywgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgcmV0dXJuIHRhcmdldC0+bWV0aG9kVGFi
bGUodm0pLT5kZWxldGVQcm9wZXJ0eUJ5SW5kZXgodGFyZ2V0LCBleGVjLCBwcm9wZXJ0eU5hbWUp
OwogICAgIH07CiAgICAgcmV0dXJuIHRoaXNPYmplY3QtPnBlcmZvcm1EZWxldGUoZXhlYywgaWRl
bnQuaW1wbCgpLCBwZXJmb3JtRGVmYXVsdERlbGV0ZSk7CiB9CkBAIC04NTUsNyArODU3LDcgQEAg
Ym9vbCBQcm94eU9iamVjdDo6cGVyZm9ybURlZmluZU93blByb3BlcgogCiAgICAgTWFya2VkQXJn
dW1lbnRCdWZmZXIgYXJndW1lbnRzOwogICAgIGFyZ3VtZW50cy5hcHBlbmQodGFyZ2V0KTsKLSAg
ICBhcmd1bWVudHMuYXBwZW5kKGlkZW50aWZpZXJUb1NhZmVQdWJsaWNKU1ZhbHVlKHZtLCBJZGVu
dGlmaWVyOjpmcm9tVWlkKCZ2bSwgcHJvcGVydHlOYW1lLnVpZCgpKSkpOworICAgIGFyZ3VtZW50
cy5hcHBlbmQoaWRlbnRpZmllclRvU2FmZVB1YmxpY0pTVmFsdWUodm0sIElkZW50aWZpZXI6OmZy
b21VaWQodm0sIHByb3BlcnR5TmFtZS51aWQoKSkpKTsKICAgICBhcmd1bWVudHMuYXBwZW5kKGRl
c2NyaXB0b3JPYmplY3QpOwogICAgIEFTU0VSVCghYXJndW1lbnRzLmhhc092ZXJmbG93ZWQoKSk7
CiAgICAgSlNWYWx1ZSB0cmFwUmVzdWx0ID0gY2FsbChleGVjLCBkZWZpbmVQcm9wZXJ0eU1ldGhv
ZCwgY2FsbFR5cGUsIGNhbGxEYXRhLCBoYW5kbGVyLCBhcmd1bWVudHMpOwpAQCAtOTUyLDcgKzk1
NCw3IEBAIHZvaWQgUHJveHlPYmplY3Q6OnBlcmZvcm1HZXRPd25Qcm9wZXJ0eU4KICAgICBKU1Zh
bHVlIGFycmF5TGlrZU9iamVjdCA9IGNhbGwoZXhlYywgb3duS2V5c01ldGhvZCwgY2FsbFR5cGUs
IGNhbGxEYXRhLCBoYW5kbGVyLCBhcmd1bWVudHMpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIHZvaWQoKSk7CiAKLSAgICBQcm9wZXJ0eU5hbWVBcnJheSB0cmFwUmVzdWx0KCZ2bSwg
cHJvcGVydHlOYW1lcy5wcm9wZXJ0eU5hbWVNb2RlKCksIHByb3BlcnR5TmFtZXMucHJpdmF0ZVN5
bWJvbE1vZGUoKSk7CisgICAgUHJvcGVydHlOYW1lQXJyYXkgdHJhcFJlc3VsdCh2bSwgcHJvcGVy
dHlOYW1lcy5wcm9wZXJ0eU5hbWVNb2RlKCksIHByb3BlcnR5TmFtZXMucHJpdmF0ZVN5bWJvbE1v
ZGUoKSk7CiAgICAgSGFzaFNldDxVbmlxdWVkU3RyaW5nSW1wbCo+IHVuY2hlY2tlZFJlc3VsdEtl
eXM7CiAgICAgewogICAgICAgICBIYXNoU2V0PFJlZlB0cjxVbmlxdWVkU3RyaW5nSW1wbD4+IHNl
ZW5LZXlzOwpAQCAtMTAwNiw3ICsxMDA4LDcgQEAgdm9pZCBQcm94eU9iamVjdDo6cGVyZm9ybUdl
dE93blByb3BlcnR5TgogICAgIGJvb2wgdGFyZ2V0SXNFeGVuc2libGUgPSB0YXJnZXQtPmlzRXh0
ZW5zaWJsZShleGVjKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwog
Ci0gICAgUHJvcGVydHlOYW1lQXJyYXkgdGFyZ2V0S2V5cygmdm0sIHByb3BlcnR5TmFtZXMucHJv
cGVydHlOYW1lTW9kZSgpLCBwcm9wZXJ0eU5hbWVzLnByaXZhdGVTeW1ib2xNb2RlKCkpOworICAg
IFByb3BlcnR5TmFtZUFycmF5IHRhcmdldEtleXModm0sIHByb3BlcnR5TmFtZXMucHJvcGVydHlO
YW1lTW9kZSgpLCBwcm9wZXJ0eU5hbWVzLnByaXZhdGVTeW1ib2xNb2RlKCkpOwogICAgIHRhcmdl
dC0+bWV0aG9kVGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRhcmdldCwgZXhlYywgdGFy
Z2V0S2V5cywgZW51bWVyYXRpb25Nb2RlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCB2b2lkKCkpOwogICAgIFZlY3RvcjxVbmlxdWVkU3RyaW5nSW1wbCo+IHRhcmdldENvbmZpZ3Vy
YWJsZUtleXM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBHbG9i
YWxEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9S
ZWdFeHBHbG9iYWxEYXRhLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvUmVnRXhwR2xvYmFsRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUx
LDcgKzUxLDcgQEAgSlNWYWx1ZSBSZWdFeHBHbG9iYWxEYXRhOjpnZXRCYWNrcmVmKEV4ZQogICAg
ICAgICBpZiAoIXJlc3VsdC5pc1VuZGVmaW5lZCgpKQogICAgICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKICAgICB9Ci0gICAgcmV0dXJuIGpzRW1wdHlTdHJpbmcoJnZtKTsKKyAgICByZXR1cm4ganNF
bXB0eVN0cmluZyh2bSk7CiB9CiAKIEpTVmFsdWUgUmVnRXhwR2xvYmFsRGF0YTo6Z2V0TGFzdFBh
cmVuKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIG93bmVyKQpAQCAtNzAsNyArNzAs
NyBAQCBKU1ZhbHVlIFJlZ0V4cEdsb2JhbERhdGE6OmdldExhc3RQYXJlbihFCiAgICAgICAgIGlm
ICghcmVzdWx0LmlzVW5kZWZpbmVkKCkpCiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAg
IH0KLSAgICByZXR1cm4ganNFbXB0eVN0cmluZygmdm0pOworICAgIHJldHVybiBqc0VtcHR5U3Ry
aW5nKHZtKTsKIH0KIAogSlNWYWx1ZSBSZWdFeHBHbG9iYWxEYXRhOjpnZXRMZWZ0Q29udGV4dChF
eGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBvd25lcikKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE1hdGNoZXNBcnJheS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwTWF0Y2hlc0FycmF5LmNwcAkocmV2
aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwTWF0
Y2hlc0FycmF5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTItMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTItMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ3LDcgKzQ3LDcgQEAgSlNBcnJheSog
Y3JlYXRlRW1wdHlSZWdFeHBNYXRjaGVzQXJyYXkoSgogICAgICAgICAvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY5Nzg2CiAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KGFycmF5KTsKIAotICAgICAgICBhcnJheS0+aW5pdGlhbGl6ZUluZGV4V2l0aG91dEJhcnJpZXIo
c2NvcGUsIDAsIGpzRW1wdHlTdHJpbmcoJnZtKSk7CisgICAgICAgIGFycmF5LT5pbml0aWFsaXpl
SW5kZXhXaXRob3V0QmFycmllcihzY29wZSwgMCwganNFbXB0eVN0cmluZyh2bSkpOwogICAgICAg
ICAKICAgICAgICAgaWYgKHVuc2lnbmVkIG51bVN1YnBhdHRlcm5zID0gcmVnRXhwLT5udW1TdWJw
YXR0ZXJucygpKSB7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDw9IG51bVN1
YnBhdHRlcm5zOyArK2kpCkBAIC01OCw3ICs1OCw3IEBAIEpTQXJyYXkqIGNyZWF0ZUVtcHR5UmVn
RXhwTWF0Y2hlc0FycmF5KEoKICAgICAgICAgYXJyYXkgPSB0cnlDcmVhdGVVbmluaXRpYWxpemVk
UmVnRXhwTWF0Y2hlc0FycmF5KHNjb3BlLCAmZGVmZXJyYWxDb250ZXh0LCBnbG9iYWxPYmplY3Qt
PnJlZ0V4cE1hdGNoZXNBcnJheVN0cnVjdHVyZSgpLCByZWdFeHAtPm51bVN1YnBhdHRlcm5zKCkg
KyAxKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoYXJyYXkpOwogICAgICAgICAKLSAgICAgICAg
YXJyYXktPmluaXRpYWxpemVJbmRleFdpdGhvdXRCYXJyaWVyKHNjb3BlLCAwLCBqc0VtcHR5U3Ry
aW5nKCZ2bSksIEFycmF5V2l0aENvbnRpZ3VvdXMpOworICAgICAgICBhcnJheS0+aW5pdGlhbGl6
ZUluZGV4V2l0aG91dEJhcnJpZXIoc2NvcGUsIDAsIGpzRW1wdHlTdHJpbmcodm0pLCBBcnJheVdp
dGhDb250aWd1b3VzKTsKICAgICAgICAgCiAgICAgICAgIGlmICh1bnNpZ25lZCBudW1TdWJwYXR0
ZXJucyA9IHJlZ0V4cC0+bnVtU3VicGF0dGVybnMoKSkgewogICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMTsgaSA8PSBudW1TdWJwYXR0ZXJuczsgKytpKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwTWF0Y2hlc0FycmF5LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwTWF0Y2hlc0FycmF5LmgJKHJldmlzaW9u
IDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE1hdGNoZXNB
cnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqICBDb3B5cmlnaHQg
KEMpIDIwMDgtMjAxOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiAgQ29weXJp
Z2h0IChDKSAyMDA4LTIwMTkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAq
ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBH
ZW5lcmFsIFB1YmxpYwpAQCAtMTU5LDcgKzE1OSw3IEBAIEFMV0FZU19JTkxJTkUgSlNBcnJheSog
Y3JlYXRlUmVnRXhwTWF0Y2gKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8PSBudW1T
dWJwYXR0ZXJuczsgKytpKSB7CiAgICAgICAgICAgICBTdHJpbmcgZ3JvdXBOYW1lID0gcmVnRXhw
LT5nZXRDYXB0dXJlR3JvdXBOYW1lKGkpOwogICAgICAgICAgICAgaWYgKCFncm91cE5hbWUuaXNF
bXB0eSgpKQotICAgICAgICAgICAgICAgIGdyb3Vwcy0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKCZ2bSwgZ3JvdXBOYW1lKSwgYXJyYXktPmdldEluZGV4UXVpY2tseShpKSk7
CisgICAgICAgICAgICAgICAgZ3JvdXBzLT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21T
dHJpbmcodm0sIGdyb3VwTmFtZSksIGFycmF5LT5nZXRJbmRleFF1aWNrbHkoaSkpOwogICAgICAg
ICB9CiAgICAgfQogICAgIHJldHVybiBhcnJheTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1JlZ0V4cFByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjQ5MTI4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwUHJvdG90eXBlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIw
MDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMt
MjAxNyBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAy
MDAzLTIwMTkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAg
KiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYwpAQCAtMzQ0LDcgKzM0NCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVn
RXhwUHJvdG8KICAgICBhdXRvIGZsYWdzID0gZmxhZ3NTdHJpbmcoZXhlYywgYXNPYmplY3QodGhp
c1ZhbHVlKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUo
KSk7CiAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKGV4ZWMsIGZsYWdzLmRh
dGEoKSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcodm0sIGZsYWdzLmRh
dGEoKSkpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KQEAgLTM3NSw2
ICszNzUsNyBAQCBpbmxpbmUgdm9pZCBhcHBlbmRMaW5lVGVybWluYXRvckVzY2FwZTxVCiB0ZW1w
bGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSByZWdF
eHBQcm90b0dldHRlclNvdXJjZUludGVybmFsKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU3RyaW5n
JiBwYXR0ZXJuLCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5n
dGgpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBib29sIHByZXZpb3VzQ2hhcmFj
dGVyV2FzQmFja3NsYXNoID0gZmFsc2U7CiAgICAgYm9vbCBpbkJyYWNrZXRzID0gZmFsc2U7CiAg
ICAgYm9vbCBzaG91bGRFc2NhcGUgPSBmYWxzZTsKQEAgLTM4NSw3ICszODYsNyBAQCBzdGF0aWMg
aW5saW5lIEpTVmFsdWUgcmVnRXhwUHJvdG9HZXR0ZXJTCiAgICAgLy8gc291cmNlIGNhbm5vdCBl
dmVyIHZhbGlkbHkgYmUgIiIuIElmIHRoZSBzb3VyY2UgaXMgZW1wdHksIHJldHVybiBhIGRpZmZl
cmVudCBQYXR0ZXJuCiAgICAgLy8gdGhhdCB3b3VsZCBtYXRjaCB0aGUgc2FtZSB0aGluZy4KICAg
ICBpZiAoIWxlbmd0aCkKLSAgICAgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyhleGVjLCAi
KD86KSJfcyk7CisgICAgICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcodm0sICIoPzopIl9z
KTsKIAogICAgIC8vIGVhcmx5IHJldHVybiBmb3Igc3RyaW5ncyB0aGF0IGRvbid0IGNvbnRhaW4g
YSBmb3J3YXJkcyBzbGFzaCBhbmQgTGluZVRlcm1pbmF0b3IKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKQEAgLTQxNiw3ICs0MTcsNyBAQCBzdGF0aWMgaW5saW5l
IEpTVmFsdWUgcmVnRXhwUHJvdG9HZXR0ZXJTCiAgICAgfQogCiAgICAgaWYgKCFzaG91bGRFc2Nh
cGUpCi0gICAgICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBwYXR0ZXJuKTsKKyAgICAgICAgcmV0
dXJuIGpzU3RyaW5nKHZtLCBwYXR0ZXJuKTsKIAogICAgIHByZXZpb3VzQ2hhcmFjdGVyV2FzQmFj
a3NsYXNoID0gZmFsc2U7CiAgICAgaW5CcmFja2V0cyA9IGZhbHNlOwpAQCAtNDUwLDcgKzQ1MSw3
IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSByZWdFeHBQcm90b0dldHRlclMKICAgICAgICAgICAg
IHByZXZpb3VzQ2hhcmFjdGVyV2FzQmFja3NsYXNoID0gY2ggPT0gJ1xcJzsKICAgICB9CiAKLSAg
ICByZXR1cm4ganNTdHJpbmcoZXhlYywgcmVzdWx0LnRvU3RyaW5nKCkpOworICAgIHJldHVybiBq
c1N0cmluZyh2bSwgcmVzdWx0LnRvU3RyaW5nKCkpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIHJlZ0V4cFByb3RvR2V0dGVyU291cmNlKEV4ZWNTdGF0ZSogZXhlYykKQEAgLTQ2
Miw3ICs0NjMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4cFByb3RvCiAg
ICAgYXV0byogcmVnZXhwID0ganNEeW5hbWljQ2FzdDxSZWdFeHBPYmplY3QqPih2bSwgdGhpc1Zh
bHVlKTsKICAgICBpZiAoVU5MSUtFTFkoIXJlZ2V4cCkpIHsKICAgICAgICAgaWYgKHRoaXNWYWx1
ZS5pbmhlcml0czxSZWdFeHBQcm90b3R5cGU+KHZtKSkKLSAgICAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNTdHJpbmcoZXhlYywgIig/OikiX3MpKTsKKyAgICAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcodm0sICIoPzopIl9zKSk7CiAgICAgICAgIHJldHVy
biB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlLCAiVGhlIFJlZ0V4cC5wcm90b3R5cGUuc291
cmNlIGdldHRlciBjYW4gb25seSBiZSBjYWxsZWQgb24gYSBSZWdFeHAgb2JqZWN0Il9zKTsKICAg
ICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cFN0cmluZ0l0
ZXJhdG9yUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9SZWdFeHBTdHJpbmdJdGVyYXRvclByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDI0OTEy
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cFN0cmluZ0l0ZXJhdG9y
UHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5
cmlnaHQgKEMpIDIwMTkgQWxleGV5IFNodmF5a2EgPHNodmFpa2FsZXNoQGdtYWlsLmNvbT4uCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00Myw3ICs0NCw3IEBAIHZvaWQgUmVnRXhw
U3RyaW5nSXRlcmF0b3JQcm90b3R5cGU6OmZpbmkKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlv
bih2bSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKLSAgICBwdXREaXJlY3RX
aXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+dG9TdHJpbmdUYWdTeW1ib2ws
IGpzU3RyaW5nKCZ2bSwgIlJlZ0V4cCBTdHJpbmcgSXRlcmF0b3IiKSwgUHJvcGVydHlBdHRyaWJ1
dGU6OkRvbnRFbnVtIHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KTsKKyAgICBwdXREaXJl
Y3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+dG9TdHJpbmdUYWdTeW1i
b2wsIGpzU3RyaW5nKHZtLCAiUmVnRXhwIFN0cmluZyBJdGVyYXRvciIpLCBQcm9wZXJ0eUF0dHJp
YnV0ZTo6RG9udEVudW0gfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpOwogICAgIEpTQ19C
VUlMVElOX0ZVTkNUSU9OX1dJVEhPVVRfVFJBTlNJVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5uZXh0
LCByZWdFeHBTdHJpbmdJdGVyYXRvclByb3RvdHlwZU5leHRDb2RlR2VuZXJhdG9yLCBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7CiB9CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIu
Y3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
YW1wbGluZ1Byb2ZpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQ5LDcgKzU0OSw3IEBAIHZv
aWQgU2FtcGxpbmdQcm9maWxlcjo6cHJvY2Vzc1VudmVyaWZpZWQKICAgICAgICAgICAgIH07CiAK
ICAgICAgICAgICAgIGlmIChjYWxsZWVDZWxsLT50eXBlKCkgIT0gSlNGdW5jdGlvblR5cGUpIHsK
LSAgICAgICAgICAgICAgICBpZiAoSlNPYmplY3QqIG9iamVjdCA9IGpzRHluYW1pY0Nhc3Q8SlNP
YmplY3QqPigqY2FsbGVlQ2VsbC0+dm0oKSwgY2FsbGVlQ2VsbCkpCisgICAgICAgICAgICAgICAg
aWYgKEpTT2JqZWN0KiBvYmplY3QgPSBqc0R5bmFtaWNDYXN0PEpTT2JqZWN0Kj4oY2FsbGVlQ2Vs
bC0+dm0oKSwgY2FsbGVlQ2VsbCkpCiAgICAgICAgICAgICAgICAgICAgIGFkZENhbGxlZShvYmpl
Y3QpOwogCiAgICAgICAgICAgICAgICAgaWYgKCFhbHJlYWR5SGFzRXhlY3V0YWJsZSkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NjcmlwdEV4ZWN1dGFibGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NjcmlwdEV4ZWN1dGFibGUu
Y3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
Y3JpcHRFeGVjdXRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEzLDcgKzExMyw3IEBAIHZv
aWQgU2NyaXB0RXhlY3V0YWJsZTo6Y2xlYXJDb2RlKElzb0NlbGwKIAogdm9pZCBTY3JpcHRFeGVj
dXRhYmxlOjppbnN0YWxsQ29kZShDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKLSAgICBpbnN0YWxs
Q29kZSgqY29kZUJsb2NrLT52bSgpLCBjb2RlQmxvY2ssIGNvZGVCbG9jay0+Y29kZVR5cGUoKSwg
Y29kZUJsb2NrLT5zcGVjaWFsaXphdGlvbktpbmQoKSk7CisgICAgaW5zdGFsbENvZGUoY29kZUJs
b2NrLT52bSgpLCBjb2RlQmxvY2ssIGNvZGVCbG9jay0+Y29kZVR5cGUoKSwgY29kZUJsb2NrLT5z
cGVjaWFsaXphdGlvbktpbmQoKSk7CiB9CiAKIHZvaWQgU2NyaXB0RXhlY3V0YWJsZTo6aW5zdGFs
bENvZGUoVk0mIHZtLCBDb2RlQmxvY2sqIGdlbmVyaWNDb2RlQmxvY2ssIENvZGVUeXBlIGNvZGVU
eXBlLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCkBAIC0yNDksMTYgKzI0OSwxNiBAQCBi
b29sIFNjcmlwdEV4ZWN1dGFibGU6Omhhc0NsZWFyYWJsZUNvZGUoCiBDb2RlQmxvY2sqIFNjcmlw
dEV4ZWN1dGFibGU6Om5ld0NvZGVCbG9ja0ZvcigKICAgICBDb2RlU3BlY2lhbGl6YXRpb25LaW5k
IGtpbmQsIEpTRnVuY3Rpb24qIGZ1bmN0aW9uLCBKU1Njb3BlKiBzY29wZSwgRXhjZXB0aW9uKiYg
ZXhjZXB0aW9uKQogewotICAgIFZNKiB2bSA9IHNjb3BlLT52bSgpOwotICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKKyAgICBWTSYgdm0gPSBzY29wZS0+dm0o
KTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAg
IEFTU0VSVCh2bS0+aGVhcC5pc0RlZmVycmVkKCkpOworICAgIEFTU0VSVCh2bS5oZWFwLmlzRGVm
ZXJyZWQoKSk7CiAgICAgQVNTRVJUKGVuZENvbHVtbigpICE9IFVJTlRfTUFYKTsKIAotICAgIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBzY29wZS0+Z2xvYmFsT2JqZWN0KCp2bSk7Cisg
ICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHNjb3BlLT5nbG9iYWxPYmplY3Qodm0p
OwogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwogCi0g
ICAgaWYgKGNsYXNzSW5mbygqdm0pID09IEV2YWxFeGVjdXRhYmxlOjppbmZvKCkpIHsKKyAgICBp
ZiAoY2xhc3NJbmZvKHZtKSA9PSBFdmFsRXhlY3V0YWJsZTo6aW5mbygpKSB7CiAgICAgICAgIEV2
YWxFeGVjdXRhYmxlKiBleGVjdXRhYmxlID0ganNDYXN0PEV2YWxFeGVjdXRhYmxlKj4odGhpcyk7
CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGtpbmQgPT0gQ29kZUZvckNhbGwpOwogICAgICAgICBS
RUxFQVNFX0FTU0VSVCghZXhlY3V0YWJsZS0+bV9ldmFsQ29kZUJsb2NrKTsKQEAgLTI3NSw3ICsy
NzUsNyBAQCBDb2RlQmxvY2sqIFNjcmlwdEV4ZWN1dGFibGU6Om5ld0NvZGVCbG9jCiAgICAgICAg
IHJldHVybiBjb2RlQmxvY2s7CiAgICAgfQogICAgIAotICAgIGlmIChjbGFzc0luZm8oKnZtKSA9
PSBQcm9ncmFtRXhlY3V0YWJsZTo6aW5mbygpKSB7CisgICAgaWYgKGNsYXNzSW5mbyh2bSkgPT0g
UHJvZ3JhbUV4ZWN1dGFibGU6OmluZm8oKSkgewogICAgICAgICBQcm9ncmFtRXhlY3V0YWJsZSog
ZXhlY3V0YWJsZSA9IGpzQ2FzdDxQcm9ncmFtRXhlY3V0YWJsZSo+KHRoaXMpOwogICAgICAgICBS
RUxFQVNFX0FTU0VSVChraW5kID09IENvZGVGb3JDYWxsKTsKICAgICAgICAgUkVMRUFTRV9BU1NF
UlQoIWV4ZWN1dGFibGUtPm1fcHJvZ3JhbUNvZGVCbG9jayk7CkBAIC0yOTIsNyArMjkyLDcgQEAg
Q29kZUJsb2NrKiBTY3JpcHRFeGVjdXRhYmxlOjpuZXdDb2RlQmxvYwogICAgICAgICByZXR1cm4g
Y29kZUJsb2NrOwogICAgIH0KIAotICAgIGlmIChjbGFzc0luZm8oKnZtKSA9PSBNb2R1bGVQcm9n
cmFtRXhlY3V0YWJsZTo6aW5mbygpKSB7CisgICAgaWYgKGNsYXNzSW5mbyh2bSkgPT0gTW9kdWxl
UHJvZ3JhbUV4ZWN1dGFibGU6OmluZm8oKSkgewogICAgICAgICBNb2R1bGVQcm9ncmFtRXhlY3V0
YWJsZSogZXhlY3V0YWJsZSA9IGpzQ2FzdDxNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZSo+KHRoaXMp
OwogICAgICAgICBSRUxFQVNFX0FTU0VSVChraW5kID09IENvZGVGb3JDYWxsKTsKICAgICAgICAg
UkVMRUFTRV9BU1NFUlQoIWV4ZWN1dGFibGUtPm1fbW9kdWxlUHJvZ3JhbUNvZGVCbG9jayk7CkBA
IC0zMDksNyArMzA5LDcgQEAgQ29kZUJsb2NrKiBTY3JpcHRFeGVjdXRhYmxlOjpuZXdDb2RlQmxv
YwogICAgICAgICByZXR1cm4gY29kZUJsb2NrOwogICAgIH0KIAotICAgIFJFTEVBU0VfQVNTRVJU
KGNsYXNzSW5mbygqdm0pID09IEZ1bmN0aW9uRXhlY3V0YWJsZTo6aW5mbygpKTsKKyAgICBSRUxF
QVNFX0FTU0VSVChjbGFzc0luZm8odm0pID09IEZ1bmN0aW9uRXhlY3V0YWJsZTo6aW5mbygpKTsK
ICAgICBSRUxFQVNFX0FTU0VSVChmdW5jdGlvbik7CiAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBl
eGVjdXRhYmxlID0ganNDYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KHRoaXMpOwogICAgIFJFTEVB
U0VfQVNTRVJUKCFleGVjdXRhYmxlLT5jb2RlQmxvY2tGb3Ioa2luZCkpOwpAQCAtMzI2LDcgKzMy
Niw3IEBAIENvZGVCbG9jayogU2NyaXB0RXhlY3V0YWJsZTo6bmV3Q29kZUJsb2MKICAgICB9CiAg
ICAgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayogdW5saW5rZWRDb2RlQmxvY2sgPSAKICAgICAg
ICAgZXhlY3V0YWJsZS0+bV91bmxpbmtlZEV4ZWN1dGFibGUtPnVubGlua2VkQ29kZUJsb2NrRm9y
KAotICAgICAgICAgICAgKnZtLCBleGVjdXRhYmxlLT5zb3VyY2UoKSwga2luZCwgY29kZUdlbmVy
YXRpb25Nb2RlLCBlcnJvciwgCisgICAgICAgICAgICB2bSwgZXhlY3V0YWJsZS0+c291cmNlKCks
IGtpbmQsIGNvZGVHZW5lcmF0aW9uTW9kZSwgZXJyb3IsIAogICAgICAgICAgICAgZXhlY3V0YWJs
ZS0+cGFyc2VNb2RlKCkpOwogICAgIHJlY29yZFBhcnNlKAogICAgICAgICBleGVjdXRhYmxlLT5t
X3VubGlua2VkRXhlY3V0YWJsZS0+ZmVhdHVyZXMoKSwgCkBAIC0zNDUsMTMgKzM0NSwxMyBAQCBD
b2RlQmxvY2sqIFNjcmlwdEV4ZWN1dGFibGU6Om5ld0NvZGVCbG9jCiBDb2RlQmxvY2sqIFNjcmlw
dEV4ZWN1dGFibGU6Om5ld1JlcGxhY2VtZW50Q29kZUJsb2NrRm9yKAogICAgIENvZGVTcGVjaWFs
aXphdGlvbktpbmQga2luZCkKIHsKLSAgICBWTSYgdm0gPSAqdGhpcy0+dm0oKTsKKyAgICBWTSYg
dm0gPSB0aGlzLT52bSgpOwogICAgIGlmIChjbGFzc0luZm8odm0pID09IEV2YWxFeGVjdXRhYmxl
OjppbmZvKCkpIHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoa2luZCA9PSBDb2RlRm9yQ2FsbCk7
CiAgICAgICAgIEV2YWxFeGVjdXRhYmxlKiBleGVjdXRhYmxlID0ganNDYXN0PEV2YWxFeGVjdXRh
YmxlKj4odGhpcyk7CiAgICAgICAgIEV2YWxDb2RlQmxvY2sqIGJhc2VsaW5lID0gc3RhdGljX2Nh
c3Q8RXZhbENvZGVCbG9jayo+KAogICAgICAgICAgICAgZXhlY3V0YWJsZS0+Y29kZUJsb2NrKCkt
PmJhc2VsaW5lVmVyc2lvbigpKTsKLSAgICAgICAgRXZhbENvZGVCbG9jayogcmVzdWx0ID0gRXZh
bENvZGVCbG9jazo6Y3JlYXRlKCZ2bSwKKyAgICAgICAgRXZhbENvZGVCbG9jayogcmVzdWx0ID0g
RXZhbENvZGVCbG9jazo6Y3JlYXRlKHZtLAogICAgICAgICAgICAgQ29kZUJsb2NrOjpDb3B5UGFy
c2VkQmxvY2ssICpiYXNlbGluZSk7CiAgICAgICAgIHJlc3VsdC0+c2V0QWx0ZXJuYXRpdmUodm0s
IGJhc2VsaW5lKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTM2Miw3ICszNjIsNyBAQCBD
b2RlQmxvY2sqIFNjcmlwdEV4ZWN1dGFibGU6Om5ld1JlcGxhY2VtCiAgICAgICAgIFByb2dyYW1F
eGVjdXRhYmxlKiBleGVjdXRhYmxlID0ganNDYXN0PFByb2dyYW1FeGVjdXRhYmxlKj4odGhpcyk7
CiAgICAgICAgIFByb2dyYW1Db2RlQmxvY2sqIGJhc2VsaW5lID0gc3RhdGljX2Nhc3Q8UHJvZ3Jh
bUNvZGVCbG9jayo+KAogICAgICAgICAgICAgZXhlY3V0YWJsZS0+Y29kZUJsb2NrKCktPmJhc2Vs
aW5lVmVyc2lvbigpKTsKLSAgICAgICAgUHJvZ3JhbUNvZGVCbG9jayogcmVzdWx0ID0gUHJvZ3Jh
bUNvZGVCbG9jazo6Y3JlYXRlKCZ2bSwKKyAgICAgICAgUHJvZ3JhbUNvZGVCbG9jayogcmVzdWx0
ID0gUHJvZ3JhbUNvZGVCbG9jazo6Y3JlYXRlKHZtLAogICAgICAgICAgICAgQ29kZUJsb2NrOjpD
b3B5UGFyc2VkQmxvY2ssICpiYXNlbGluZSk7CiAgICAgICAgIHJlc3VsdC0+c2V0QWx0ZXJuYXRp
dmUodm0sIGJhc2VsaW5lKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTM3Myw3ICszNzMs
NyBAQCBDb2RlQmxvY2sqIFNjcmlwdEV4ZWN1dGFibGU6Om5ld1JlcGxhY2VtCiAgICAgICAgIE1v
ZHVsZVByb2dyYW1FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0ganNDYXN0PE1vZHVsZVByb2dyYW1F
eGVjdXRhYmxlKj4odGhpcyk7CiAgICAgICAgIE1vZHVsZVByb2dyYW1Db2RlQmxvY2sqIGJhc2Vs
aW5lID0gc3RhdGljX2Nhc3Q8TW9kdWxlUHJvZ3JhbUNvZGVCbG9jayo+KAogICAgICAgICAgICAg
ZXhlY3V0YWJsZS0+Y29kZUJsb2NrKCktPmJhc2VsaW5lVmVyc2lvbigpKTsKLSAgICAgICAgTW9k
dWxlUHJvZ3JhbUNvZGVCbG9jayogcmVzdWx0ID0gTW9kdWxlUHJvZ3JhbUNvZGVCbG9jazo6Y3Jl
YXRlKCZ2bSwKKyAgICAgICAgTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayogcmVzdWx0ID0gTW9kdWxl
UHJvZ3JhbUNvZGVCbG9jazo6Y3JlYXRlKHZtLAogICAgICAgICAgICAgQ29kZUJsb2NrOjpDb3B5
UGFyc2VkQmxvY2ssICpiYXNlbGluZSk7CiAgICAgICAgIHJlc3VsdC0+c2V0QWx0ZXJuYXRpdmUo
dm0sIGJhc2VsaW5lKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTM4Myw3ICszODMsNyBA
QCBDb2RlQmxvY2sqIFNjcmlwdEV4ZWN1dGFibGU6Om5ld1JlcGxhY2VtCiAgICAgRnVuY3Rpb25F
eGVjdXRhYmxlKiBleGVjdXRhYmxlID0ganNDYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KHRoaXMp
OwogICAgIEZ1bmN0aW9uQ29kZUJsb2NrKiBiYXNlbGluZSA9IHN0YXRpY19jYXN0PEZ1bmN0aW9u
Q29kZUJsb2NrKj4oCiAgICAgICAgIGV4ZWN1dGFibGUtPmNvZGVCbG9ja0ZvcihraW5kKS0+YmFz
ZWxpbmVWZXJzaW9uKCkpOwotICAgIEZ1bmN0aW9uQ29kZUJsb2NrKiByZXN1bHQgPSBGdW5jdGlv
bkNvZGVCbG9jazo6Y3JlYXRlKCZ2bSwKKyAgICBGdW5jdGlvbkNvZGVCbG9jayogcmVzdWx0ID0g
RnVuY3Rpb25Db2RlQmxvY2s6OmNyZWF0ZSh2bSwKICAgICAgICAgQ29kZUJsb2NrOjpDb3B5UGFy
c2VkQmxvY2ssICpiYXNlbGluZSk7CiAgICAgcmVzdWx0LT5zZXRBbHRlcm5hdGl2ZSh2bSwgYmFz
ZWxpbmUpOwogICAgIHJldHVybiByZXN1bHQ7CkBAIC0zOTcsNyArMzk3LDcgQEAgc3RhdGljIHZv
aWQgc2V0dXBMTEludChDb2RlQmxvY2sqIGNvZGVCbAogc3RhdGljIHZvaWQgc2V0dXBKSVQoVk0m
IHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKICNpZiBFTkFCTEUoSklUKQotICAgIENvbXBp
bGF0aW9uUmVzdWx0IHJlc3VsdCA9IEpJVDo6Y29tcGlsZSgmdm0sIGNvZGVCbG9jaywgSklUQ29t
cGlsYXRpb25NdXN0U3VjY2VlZCk7CisgICAgQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0ID0gSklU
Ojpjb21waWxlKHZtLCBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQpOwogICAg
IFJFTEVBU0VfQVNTRVJUKHJlc3VsdCA9PSBDb21waWxhdGlvblN1Y2Nlc3NmdWwpOwogI2Vsc2UK
ICAgICBVTlVTRURfUEFSQU0odm0pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU2V0SXRlcmF0b3JQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1NldEl0ZXJhdG9yUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjQ5MTI4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2V0SXRlcmF0b3JQcm90b3R5cGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMywgMjAxNiBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTkgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzksNyArMzksNyBAQCB2b2lkIFNldEl0ZXJhdG9y
UHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvCiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkp
KTsKIAogICAgIEpTQ19CVUlMVElOX0ZVTkNUSU9OX1dJVEhPVVRfVFJBTlNJVElPTigibmV4dCIs
IHNldEl0ZXJhdG9yUHJvdG90eXBlTmV4dENvZGVHZW5lcmF0b3IsIHN0YXRpY19jYXN0PHVuc2ln
bmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKLSAgICBwdXREaXJlY3RXaXRob3V0
VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+dG9TdHJpbmdUYWdTeW1ib2wsIGpzU3Ry
aW5nKCZ2bSwgIlNldCBJdGVyYXRvciIpLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBQ
cm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpOworICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0
aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT50b1N0cmluZ1RhZ1N5bWJvbCwganNTdHJpbmcodm0s
ICJTZXQgSXRlcmF0b3IiKSwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtIHwgUHJvcGVydHlB
dHRyaWJ1dGU6OlJlYWRPbmx5KTsKIH0KIAogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU2V0UHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TZXRQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TZXRQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTcxLDcgKzcxLDcgQEAgdm9pZCBTZXRQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZN
JiB2bQogICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVz
LT5idWlsdGluTmFtZXMoKS52YWx1ZXNQdWJsaWNOYW1lKCksIHZhbHVlcywgc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOwogICAgIHB1dERpcmVjdFdp
dGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5rZXlz
UHVibGljTmFtZSgpLCB2YWx1ZXMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJp
YnV0ZTo6RG9udEVudW0pKTsKICAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0u
cHJvcGVydHlOYW1lcy0+aXRlcmF0b3JTeW1ib2wsIHZhbHVlcywgc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOwotICAgIHB1dERpcmVjdFdpdGhvdXRU
cmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT50b1N0cmluZ1RhZ1N5bWJvbCwganNTdHJp
bmcoJnZtLCAiU2V0IiksIFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8IFByb3BlcnR5QXR0
cmlidXRlOjpSZWFkT25seSk7CisgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZt
LnByb3BlcnR5TmFtZXMtPnRvU3RyaW5nVGFnU3ltYm9sLCBqc1N0cmluZyh2bSwgIlNldCIpLCBQ
cm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkp
OwogCiAgICAgSlNDX05BVElWRV9HRVRURVJfV0lUSE9VVF9UUkFOU0lUSU9OKHZtLnByb3BlcnR5
TmFtZXMtPnNpemUsIHNldFByb3RvRnVuY1NpemUsIFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51
bSB8IFByb3BlcnR5QXR0cmlidXRlOjpBY2Nlc3Nvcik7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TdGFja0ZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TdGFja0ZyYW1lLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RhY2tGcmFtZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0xMTQsNyArMTE0LDcgQEAgdm9pZCBTdGFja0ZyYW1lOjpjb21wdXRlTGluZUFuZENv
bHVtbih1bgogICAgIG1fY29kZUJsb2NrLT5leHByZXNzaW9uUmFuZ2VGb3JCeXRlY29kZU9mZnNl
dChtX2J5dGVjb2RlT2Zmc2V0LCBkaXZvdCwgdW51c2VkU3RhcnRPZmZzZXQsIHVudXNlZEVuZE9m
ZnNldCwgbGluZSwgY29sdW1uKTsKIAogICAgIFNjcmlwdEV4ZWN1dGFibGUqIGV4ZWN1dGFibGUg
PSBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCk7Ci0gICAgaWYgKE9wdGlvbmFsPGludD4g
b3ZlcnJpZGVMaW5lTnVtYmVyID0gZXhlY3V0YWJsZS0+b3ZlcnJpZGVMaW5lTnVtYmVyKCptX2Nv
ZGVCbG9jay0+dm0oKSkpCisgICAgaWYgKE9wdGlvbmFsPGludD4gb3ZlcnJpZGVMaW5lTnVtYmVy
ID0gZXhlY3V0YWJsZS0+b3ZlcnJpZGVMaW5lTnVtYmVyKG1fY29kZUJsb2NrLT52bSgpKSkKICAg
ICAgICAgbGluZSA9IG92ZXJyaWRlTGluZU51bWJlci52YWx1ZSgpOwogfQogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nQ29uc3RydWN0b3IuY3Bw
CShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJp
bmdDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICog
IENvcHlyaWdodCAoQykgMTk5OS0yMDAxIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCi0g
KiAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMDgsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwNC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTgwLDcgKzgwLDcgQEAgc3RhdGlj
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaQogICAgICAgICBzY29wZS5yZWxlYXNl
KCk7CiAgICAgICAgIHVuc2lnbmVkIGNvZGUgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKS50
b1VJbnQzMihleGVjKTsKICAgICAgICAgLy8gTm90IGNoZWNraW5nIGZvciBhbiBleGNlcHRpb24g
aGVyZSBpcyBvayBiZWNhdXNlIGpzU2luZ2xlQ2hhcmFjdGVyU3RyaW5nIHdpbGwganVzdCBmZXRj
aCBhbiB1bnVzZWQgc3RyaW5nIGlmIHRoZXJlJ3MgYW4gZXhjZXB0aW9uLgotICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU2luZ2xlQ2hhcmFjdGVyU3RyaW5nKGV4ZWMsIGNvZGUpKTsK
KyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1NpbmdsZUNoYXJhY3RlclN0cmluZyh2
bSwgY29kZSkpOwogICAgIH0KIAogICAgIExDaGFyKiBidWY4Qml0OwpAQCAtOTgsMTYgKzk4LDE2
IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmkKICAgICAgICAgICAg
ICAgICBidWYxNkJpdFtpXSA9IHN0YXRpY19jYXN0PFVDaGFyPihleGVjLT51bmNoZWNrZWRBcmd1
bWVudChpKS50b1VJbnQzMihleGVjKSk7CiAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyhleGVj
LCBXVEZNb3ZlKGltcGwxNkJpdCkpKSk7CisgICAgICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4o
c2NvcGUsIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyh2bSwgV1RGTW92ZShpbXBsMTZCaXQpKSkp
OwogICAgICAgICB9CiAgICAgICAgIGJ1ZjhCaXRbaV0gPSBzdGF0aWNfY2FzdDxMQ2hhcj4oY2hh
cmFjdGVyKTsKICAgICB9Ci0gICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjpl
bmNvZGUoanNTdHJpbmcoZXhlYywgV1RGTW92ZShpbXBsOEJpdCkpKSk7CisgICAgUkVMRUFTRV9B
TkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcodm0sIFdURk1vdmUoaW1w
bDhCaXQpKSkpOwogfQogCiBKU1N0cmluZyogSlNDX0hPU1RfQ0FMTCBzdHJpbmdGcm9tQ2hhckNv
ZGUoRXhlY1N0YXRlKiBleGVjLCBpbnQzMl90IGFyZykKIHsKLSAgICByZXR1cm4ganNTaW5nbGVD
aGFyYWN0ZXJTdHJpbmcoZXhlYywgYXJnKTsKKyAgICByZXR1cm4ganNTaW5nbGVDaGFyYWN0ZXJT
dHJpbmcoZXhlYy0+dm0oKSwgYXJnKTsKIH0KIAogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgc3RyaW5nRnJvbUNvZGVQb2ludChFeGVjU3RhdGUqIGV4ZWMpCkBAIC0xMzYsNyAr
MTM2LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaQogICAgICAg
ICB9CiAgICAgfQogCi0gICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNv
ZGUoanNTdHJpbmcoZXhlYywgYnVpbGRlci50b1N0cmluZygpKSkpOworICAgIFJFTEVBU0VfQU5E
X1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKHZtLCBidWlsZGVyLnRvU3Ry
aW5nKCkpKSk7CiB9CiAKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0
cnVjdFdpdGhTdHJpbmdDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMpCkBAIC0xNTcsMTUgKzE1
NywxNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zCiAKIEpTU3Ry
aW5nKiBzdHJpbmdDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYXJndW1lbnQp
CiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBpZiAoYXJndW1lbnQuaXNTeW1ib2wo
KSkKLSAgICAgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyhleGVjLCBhc1N5bWJvbChhcmd1
bWVudCktPmRlc2NyaXB0aXZlU3RyaW5nKCkpOworICAgICAgICByZXR1cm4ganNOb250cml2aWFs
U3RyaW5nKHZtLCBhc1N5bWJvbChhcmd1bWVudCktPmRlc2NyaXB0aXZlU3RyaW5nKCkpOwogICAg
IHJldHVybiBhcmd1bWVudC50b1N0cmluZyhleGVjKTsKIH0KIAogc3RhdGljIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgY2FsbFN0cmluZ0NvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYykK
IHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGlmICghZXhlYy0+YXJndW1lbnRDb3Vu
dCgpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzRW1wdHlTdHJpbmcoZXhlYykp
OworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzRW1wdHlTdHJpbmcodm0pKTsKICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHN0cmluZ0NvbnN0cnVjdG9yKGV4ZWMsIGV4ZWMtPnVu
Y2hlY2tlZEFyZ3VtZW50KDApKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0cmluZ0l0ZXJhdG9yUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdJdGVyYXRvclByb3RvdHlwZS5jcHAJKHJldmlz
aW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ0l0ZXJh
dG9yUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE5IEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgWXVzdWtlIFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29t
Pi4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTQxLDcgKzQxLDcgQEAgdm9pZCBTdHJpbmdJdGVyYXRv
clByb3RvdHlwZTo6ZmluaXNoQ3JlYQogewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsK
ICAgICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOwotICAgIHB1dERpcmVjdFdpdGhvdXRU
cmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT50b1N0cmluZ1RhZ1N5bWJvbCwganNTdHJp
bmcoJnZtLCAiU3RyaW5nIEl0ZXJhdG9yIiksIFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8
IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSk7CisgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5z
aXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPnRvU3RyaW5nVGFnU3ltYm9sLCBqc1N0cmluZyh2
bSwgIlN0cmluZyBJdGVyYXRvciIpLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBQcm9w
ZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpOwogICAgIEpTQ19CVUlMVElOX0ZVTkNUSU9OX1dJVEhP
VVRfVFJBTlNJVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5uZXh0LCBzdHJpbmdJdGVyYXRvclByb3Rv
dHlwZU5leHRDb2RlR2VuZXJhdG9yLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRy
aWJ1dGU6OkRvbnRFbnVtKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N0cmluZ09iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3RyaW5nT2JqZWN0LmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEgSGFycmkgUG9ydGVu
IChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwOCwgMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMTkg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAt
NTcsNyArNTcsOCBAQCBib29sIFN0cmluZ09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90QnlJCiAg
ICAgU3RyaW5nT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PFN0cmluZ09iamVjdCo+KG9iamVj
dCk7CiAgICAgaWYgKHRoaXNPYmplY3QtPmludGVybmFsVmFsdWUoKS0+Z2V0U3RyaW5nUHJvcGVy
dHlTbG90KGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCkpCiAgICAgICAgIHJldHVybiB0cnVlOyAg
ICAKLSAgICByZXR1cm4gSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBl
eGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIHByb3BlcnR5TmFtZSksIHNsb3QpOworICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgcmV0dXJuIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNs
b3QodGhpc09iamVjdCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbSh2bSwgcHJvcGVydHlOYW1lKSwg
c2xvdCk7CiB9CiAKIGJvb2wgU3RyaW5nT2JqZWN0OjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3Rh
dGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFBy
b3BlcnR5U2xvdCYgc2xvdCkKQEAgLTE0NiwxMSArMTQ3LDEyIEBAIGJvb2wgU3RyaW5nT2JqZWN0
OjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgKIAogdm9pZCBTdHJpbmdPYmplY3Q6OmdldE93blByb3Bl
cnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVB
cnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7CisgICAgVk0mIHZt
ID0gZXhlYy0+dm0oKTsKICAgICBTdHJpbmdPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8U3Ry
aW5nT2JqZWN0Kj4ob2JqZWN0KTsKICAgICBpZiAocHJvcGVydHlOYW1lcy5pbmNsdWRlU3RyaW5n
UHJvcGVydGllcygpKSB7CiAgICAgICAgIGludCBzaXplID0gdGhpc09iamVjdC0+aW50ZXJuYWxW
YWx1ZSgpLT5sZW5ndGgoKTsKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyArK2kp
Ci0gICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGkp
KTsKKyAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb20odm0sIGkp
KTsKICAgICB9CiAgICAgcmV0dXJuIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXNP
YmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwogfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nT2JqZWN0LmgJKHJldmlzaW9uIDI0OTEyOCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ09iamVjdC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJy
aSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQotICogIENvcHlyaWdodCAoQykgMjAwNy0yMDA4LCAy
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIw
MDctMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAq
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljCkBAIC0zMiw3ICszMiw3IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBTdHJpbmdPYmplY3Qq
IGNyZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgIHsKLSAgICAgICAgSlNT
dHJpbmcqIHN0cmluZyA9IGpzRW1wdHlTdHJpbmcoJnZtKTsKKyAgICAgICAgSlNTdHJpbmcqIHN0
cmluZyA9IGpzRW1wdHlTdHJpbmcodm0pOwogICAgICAgICBTdHJpbmdPYmplY3QqIG9iamVjdCA9
IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFN0cmluZ09iamVjdD4odm0uaGVhcCkpIFN0cmlu
Z09iamVjdCh2bSwgc3RydWN0dXJlKTsKICAgICAgICAgb2JqZWN0LT5maW5pc2hDcmVhdGlvbih2
bSwgc3RyaW5nKTsKICAgICAgICAgcmV0dXJuIG9iamVjdDsKQEAgLTg1LDcgKzg1LDcgQEAgc3Rh
dGljIGlubGluZSBKU1N0cmluZyoganNTdHJpbmdXaXRoUmV1cwogICAgICAgICBBU1NFUlQoYXNT
dHJpbmcob3JpZ2luYWxWYWx1ZSktPnZhbHVlKGV4ZWMpID09IHN0cmluZyk7CiAgICAgICAgIHJl
dHVybiBhc1N0cmluZyhvcmlnaW5hbFZhbHVlKTsKICAgICB9Ci0gICAgcmV0dXJuIGpzU3RyaW5n
KCZleGVjLT52bSgpLCBzdHJpbmcpOworICAgIHJldHVybiBqc1N0cmluZyhleGVjLT52bSgpLCBz
dHJpbmcpOwogfQogCiAvLyBIZWxwZXIgdGhhdCB0cmllcyB0byB1c2UgdGhlIEpTU3RyaW5nIHN1
YnN0cmluZyBzaGFyaW5nIG1lY2hhbmlzbSBpZiAnb3JpZ2luYWxWYWx1ZScgaXMgYSBKU1N0cmlu
Zy4KQEAgLTk5LDcgKzk5LDcgQEAgc3RhdGljIGlubGluZSBKU1N0cmluZyoganNTdWJzdHJpbmco
RXhlYwogICAgICAgICBBU1NFUlQoYXNTdHJpbmcob3JpZ2luYWxWYWx1ZSktPnZhbHVlKGV4ZWMp
ID09IHN0cmluZyk7CiAgICAgICAgIHJldHVybiBqc1N1YnN0cmluZyhleGVjLCBhc1N0cmluZyhv
cmlnaW5hbFZhbHVlKSwgb2Zmc2V0LCBsZW5ndGgpOwogICAgIH0KLSAgICByZXR1cm4ganNTdWJz
dHJpbmcoJmV4ZWMtPnZtKCksIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpOworICAgIHJldHVybiBq
c1N1YnN0cmluZyhleGVjLT52bSgpLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJp
bmdQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE2MywxMCArMTYzLDEwIEBAIHZvaWQgU3RyaW5nUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbihW
TSYKIAogICAgIEpTRnVuY3Rpb24qIHRyaW1TdGFydEZ1bmN0aW9uID0gSlNGdW5jdGlvbjo6Y3Jl
YXRlKHZtLCBnbG9iYWxPYmplY3QsIDAsICJ0cmltU3RhcnQiX3MsIHN0cmluZ1Byb3RvRnVuY1Ry
aW1TdGFydCwgTm9JbnRyaW5zaWMpOwogICAgIEpTRnVuY3Rpb24qIHRyaW1FbmRGdW5jdGlvbiA9
IEpTRnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCAwLCAidHJpbUVuZCJfcywgc3Ry
aW5nUHJvdG9GdW5jVHJpbUVuZCwgTm9JbnRyaW5zaWMpOwotICAgIHB1dERpcmVjdFdpdGhvdXRU
cmFuc2l0aW9uKHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgInRyaW1TdGFydCIpLCB0
cmltU3RhcnRGdW5jdGlvbiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRl
OjpEb250RW51bSkpOwotICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKCZ2bSwgInRyaW1MZWZ0IiksIHRyaW1TdGFydEZ1bmN0aW9uLCBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7Ci0gICAgcHV0
RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAi
dHJpbUVuZCIpLCB0cmltRW5kRnVuY3Rpb24sIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0
eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKLSAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2
bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJ0cmltUmlnaHQiKSwgdHJpbUVuZEZ1bmN0
aW9uLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7
CisgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIElkZW50aWZpZXI6OmZyb21TdHJp
bmcodm0sICJ0cmltU3RhcnQiKSwgdHJpbVN0YXJ0RnVuY3Rpb24sIHN0YXRpY19jYXN0PHVuc2ln
bmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKKyAgICBwdXREaXJlY3RXaXRob3V0
VHJhbnNpdGlvbih2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInRyaW1MZWZ0IiksIHRy
aW1TdGFydEZ1bmN0aW9uLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6
OkRvbnRFbnVtKSk7CisgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcodm0sICJ0cmltRW5kIiksIHRyaW1FbmRGdW5jdGlvbiwgc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOworICAgIHB1dERpcmVj
dFdpdGhvdXRUcmFuc2l0aW9uKHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAidHJpbVJp
Z2h0IiksIHRyaW1FbmRGdW5jdGlvbiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0
cmlidXRlOjpEb250RW51bSkpOwogCiAgICAgSlNGdW5jdGlvbiogaXRlcmF0b3JGdW5jdGlvbiA9
IEpTRnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCAwLCAiW1N5bWJvbC5pdGVyYXRv
cl0iX3MsIHN0cmluZ1Byb3RvRnVuY0l0ZXJhdG9yLCBOb0ludHJpbnNpYyk7CiAgICAgcHV0RGly
ZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPml0ZXJhdG9yU3ltYm9s
LCBpdGVyYXRvckZ1bmN0aW9uLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1
dGU6OkRvbnRFbnVtKSk7CkBAIC0xNzcsNyArMTc3LDcgQEAgdm9pZCBTdHJpbmdQcm90b3R5cGU6
OmZpbmlzaENyZWF0aW9uKFZNJgogCiBTdHJpbmdQcm90b3R5cGUqIFN0cmluZ1Byb3RvdHlwZTo6
Y3JlYXRlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUpCiB7Ci0gICAgSlNTdHJpbmcqIGVtcHR5ID0ganNFbXB0eVN0cmluZygmdm0pOwor
ICAgIEpTU3RyaW5nKiBlbXB0eSA9IGpzRW1wdHlTdHJpbmcodm0pOwogICAgIFN0cmluZ1Byb3Rv
dHlwZSogcHJvdG90eXBlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8U3RyaW5nUHJvdG90
eXBlPih2bS5oZWFwKSkgU3RyaW5nUHJvdG90eXBlKHZtLCBzdHJ1Y3R1cmUpOwogICAgIHByb3Rv
dHlwZS0+ZmluaXNoQ3JlYXRpb24odm0sIGdsb2JhbE9iamVjdCwgZW1wdHkpOwogICAgIHJldHVy
biBwcm90b3R5cGU7CkBAIC0zMjMsNyArMzIzLDcgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgSlNT
dHJpbmcqIGpzU3BsaWNlUwogICAgICAgICBpZiAocG9zaXRpb24gPD0gMCAmJiBsZW5ndGggPj0g
c291cmNlU2l6ZSkKICAgICAgICAgICAgIHJldHVybiBzb3VyY2VWYWw7CiAgICAgICAgIC8vIFdl
IGNvdWxkIGNhbGwgU3RyaW5nOjpzdWJzdHJpbmdTaGFyaW5nSW1wbCgpLCBidXQgdGhpcyB3b3Vs
ZCByZXN1bHQgaW4gcmVkdW5kYW50IGNoZWNrcy4KLSAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJO
KHNjb3BlLCBqc1N0cmluZyhleGVjLCBTdHJpbmdJbXBsOjpjcmVhdGVTdWJzdHJpbmdTaGFyaW5n
SW1wbCgqc291cmNlLmltcGwoKSwgc3RkOjptYXgoMCwgcG9zaXRpb24pLCBzdGQ6Om1pbihzb3Vy
Y2VTaXplLCBsZW5ndGgpKSkpOworICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGpz
U3RyaW5nKHZtLCBTdHJpbmdJbXBsOjpjcmVhdGVTdWJzdHJpbmdTaGFyaW5nSW1wbCgqc291cmNl
LmltcGwoKSwgc3RkOjptYXgoMCwgcG9zaXRpb24pLCBzdGQ6Om1pbihzb3VyY2VTaXplLCBsZW5n
dGgpKSkpOwogICAgIH0KIAogICAgIC8vIFdlIGtub3cgdGhhdCB0aGUgc3VtIG9mIHN1YnN0cmlu
Z1JhbmdlcyBsZW5ndGhzIGNhbm5vdCBleGNlZWQgbGVuZ3RoIG9mCkBAIC0zMzYsNyArMzM2LDcg
QEAgc3RhdGljIEFMV0FZU19JTkxJTkUgSlNTdHJpbmcqIGpzU3BsaWNlUwogICAgIEFTU0VSVCh0
b3RhbExlbmd0aCA8PSBTdHJpbmc6Ok1heExlbmd0aCk7CiAKICAgICBpZiAoIXRvdGFsTGVuZ3Ro
KQotICAgICAgICByZXR1cm4ganNFbXB0eVN0cmluZyhleGVjKTsKKyAgICAgICAgcmV0dXJuIGpz
RW1wdHlTdHJpbmcodm0pOwogCiAgICAgaWYgKHNvdXJjZS5pczhCaXQoKSkgewogICAgICAgICBM
Q2hhciogYnVmZmVyOwpAQCAtMzU1LDcgKzM1NSw3IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpT
U3RyaW5nKiBqc1NwbGljZVMKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIFJF
TEVBU0VfQU5EX1JFVFVSTihzY29wZSwganNTdHJpbmcoZXhlYywgV1RGTW92ZShpbXBsKSkpOwor
ICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGpzU3RyaW5nKHZtLCBXVEZNb3ZlKGlt
cGwpKSk7CiAgICAgfQogCiAgICAgVUNoYXIqIGJ1ZmZlcjsKQEAgLTM3NSw3ICszNzUsNyBAQCBz
dGF0aWMgQUxXQVlTX0lOTElORSBKU1N0cmluZyoganNTcGxpY2VTCiAgICAgICAgIH0KICAgICB9
CiAKLSAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGpzU3RyaW5nKGV4ZWMsIFdURk1vdmUo
aW1wbCkpKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGpzU3RyaW5nKHZtLCBXVEZN
b3ZlKGltcGwpKSk7CiB9CiAKIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpTU3RyaW5nKiBqc1NwbGlj
ZVN1YnN0cmluZ3NXaXRoU2VwYXJhdG9ycyhFeGVjU3RhdGUqIGV4ZWMsIEpTU3RyaW5nKiBzb3Vy
Y2VWYWwsIGNvbnN0IFN0cmluZyYgc291cmNlLCBjb25zdCBTdHJpbmdSYW5nZSogc3Vic3RyaW5n
UmFuZ2VzLCBpbnQgcmFuZ2VDb3VudCwgY29uc3QgU3RyaW5nKiBzZXBhcmF0b3JzLCBpbnQgc2Vw
YXJhdG9yQ291bnQpCkBAIC0zOTAsNyArMzkwLDcgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgSlNT
dHJpbmcqIGpzU3BsaWNlUwogICAgICAgICBpZiAocG9zaXRpb24gPD0gMCAmJiBsZW5ndGggPj0g
c291cmNlU2l6ZSkKICAgICAgICAgICAgIHJldHVybiBzb3VyY2VWYWw7CiAgICAgICAgIC8vIFdl
IGNvdWxkIGNhbGwgU3RyaW5nOjpzdWJzdHJpbmdTaGFyaW5nSW1wbCgpLCBidXQgdGhpcyB3b3Vs
ZCByZXN1bHQgaW4gcmVkdW5kYW50IGNoZWNrcy4KLSAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJO
KHNjb3BlLCBqc1N0cmluZyhleGVjLCBTdHJpbmdJbXBsOjpjcmVhdGVTdWJzdHJpbmdTaGFyaW5n
SW1wbCgqc291cmNlLmltcGwoKSwgc3RkOjptYXgoMCwgcG9zaXRpb24pLCBzdGQ6Om1pbihzb3Vy
Y2VTaXplLCBsZW5ndGgpKSkpOworICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGpz
U3RyaW5nKHZtLCBTdHJpbmdJbXBsOjpjcmVhdGVTdWJzdHJpbmdTaGFyaW5nSW1wbCgqc291cmNl
LmltcGwoKSwgc3RkOjptYXgoMCwgcG9zaXRpb24pLCBzdGQ6Om1pbihzb3VyY2VTaXplLCBsZW5n
dGgpKSkpOwogICAgIH0KIAogICAgIENoZWNrZWQ8aW50LCBSZWNvcmRPdmVyZmxvdz4gdG90YWxM
ZW5ndGggPSAwOwpAQCAtNDA4LDcgKzQwOCw3IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpTU3Ry
aW5nKiBqc1NwbGljZVMKICAgICB9CiAKICAgICBpZiAoIXRvdGFsTGVuZ3RoKQotICAgICAgICBy
ZXR1cm4ganNFbXB0eVN0cmluZyhleGVjKTsKKyAgICAgICAgcmV0dXJuIGpzRW1wdHlTdHJpbmco
dm0pOwogCiAgICAgaWYgKHNvdXJjZS5pczhCaXQoKSAmJiBhbGxTZXBhcmF0b3JzOEJpdCkgewog
ICAgICAgICBMQ2hhciogYnVmZmVyOwpAQCAtNDM3LDcgKzQzNyw3IEBAIHN0YXRpYyBBTFdBWVNf
SU5MSU5FIEpTU3RyaW5nKiBqc1NwbGljZVMKICAgICAgICAgICAgIH0KICAgICAgICAgfSAgICAg
ICAgCiAKLSAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBqc1N0cmluZyhleGVjLCBX
VEZNb3ZlKGltcGwpKSk7CisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwganNTdHJp
bmcodm0sIFdURk1vdmUoaW1wbCkpKTsKICAgICB9CiAKICAgICBVQ2hhciogYnVmZmVyOwpAQCAt
NDcwLDcgKzQ3MCw3IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpTU3RyaW5nKiBqc1NwbGljZVMK
ICAgICAgICAgfQogICAgIH0KIAotICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwganNTdHJp
bmcoZXhlYywgV1RGTW92ZShpbXBsKSkpOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwg
anNTdHJpbmcodm0sIFdURk1vdmUoaW1wbCkpKTsKIH0KIAogI2RlZmluZSBPVVRfT0ZfTUVNT1JZ
KGV4ZWNfXywgc2NvcGVfXykgXApAQCAtNTkzLDE0ICs1OTMsMTQgQEAgc3RhdGljIEFMV0FZU19J
TkxJTkUgSlNTdHJpbmcqIHJlcGxhY2VVcwogICAgICAgICAgICAgICAgIGlmIChtYXRjaFN0YXJ0
IDwgMCkKICAgICAgICAgICAgICAgICAgICAgcGF0dGVyblZhbHVlID0ganNVbmRlZmluZWQoKTsK
ICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHBhdHRlcm5WYWx1ZSA9
IGpzU3Vic3RyaW5nKCZ2bSwgc291cmNlLCBtYXRjaFN0YXJ0LCBtYXRjaExlbik7CisgICAgICAg
ICAgICAgICAgICAgIHBhdHRlcm5WYWx1ZSA9IGpzU3Vic3RyaW5nKHZtLCBzb3VyY2UsIG1hdGNo
U3RhcnQsIG1hdGNoTGVuKTsKIAogICAgICAgICAgICAgICAgIGNhY2hlZENhbGwuYXBwZW5kQXJn
dW1lbnQocGF0dGVyblZhbHVlKTsKIAogICAgICAgICAgICAgICAgIGlmIChpICYmIGhhc05hbWVk
Q2FwdHVyZXMpIHsKICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGdyb3VwTmFtZSA9IHJlZ0V4
cC0+Z2V0Q2FwdHVyZUdyb3VwTmFtZShpKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFncm91
cE5hbWUuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBzLT5wdXREaXJl
Y3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCBncm91cE5hbWUpLCBwYXR0ZXJuVmFs
dWUpOworICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBzLT5wdXREaXJlY3Qodm0sIElkZW50
aWZpZXI6OmZyb21TdHJpbmcodm0sIGdyb3VwTmFtZSksIHBhdHRlcm5WYWx1ZSk7CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgfQogCkBAIC02NTksNyArNjU5LDcgQEAgc3RhdGljIEFM
V0FZU19JTkxJTkUgSlNTdHJpbmcqIHJlcGxhY2VVcwogICAgICAgICAgICAgICAgICAgICBpZiAo
bWF0Y2hTdGFydCA8IDApCiAgICAgICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuVmFsdWUgPSBq
c1VuZGVmaW5lZCgpOwogICAgICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHBhdHRlcm5WYWx1ZSA9IGpzU3Vic3RyaW5nKCZ2bSwgc291cmNlLCBtYXRjaFN0
YXJ0LCBtYXRjaExlbik7CisgICAgICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuVmFsdWUgPSBq
c1N1YnN0cmluZyh2bSwgc291cmNlLCBtYXRjaFN0YXJ0LCBtYXRjaExlbik7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKICAgICAg
ICAgICAgICAgICAgICAgfQogCkBAIC02NjgsNyArNjY4LDcgQEAgc3RhdGljIEFMV0FZU19JTkxJ
TkUgSlNTdHJpbmcqIHJlcGxhY2VVcwogICAgICAgICAgICAgICAgICAgICBpZiAoaSAmJiBoYXNO
YW1lZENhcHR1cmVzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgZ3JvdXBOYW1l
ID0gcmVnRXhwLT5nZXRDYXB0dXJlR3JvdXBOYW1lKGkpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCFncm91cE5hbWUuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdyb3Vwcy0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgZ3JvdXBO
YW1lKSwgcGF0dGVyblZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cHMt
PnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgZ3JvdXBOYW1lKSwgcGF0
dGVyblZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgfQpA
QCAtNzMxLDcgKzczMSw3IEBAIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25TdHJpbmdQ
cm8KICAgICBFeGVjU3RhdGUqIGV4ZWMsIEpTU3RyaW5nKiB0aGlzVmFsdWUsIFJlZ0V4cE9iamVj
dCogc2VhcmNoVmFsdWUpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwogCiAgICAgUmVnRXhwKiByZWdFeHAgPSBzZWFyY2hWYWx1ZS0+cmVnRXhwKCk7CkBA
IC03NTQsNyArNzU0LDcgQEAgSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblN0cmluZ1By
bwogICAgIEV4ZWNTdGF0ZSogZXhlYywgSlNTdHJpbmcqIHRoaXNWYWx1ZSwgUmVnRXhwT2JqZWN0
KiBzZWFyY2hWYWx1ZSwgSlNTdHJpbmcqIHJlcGxhY2VTdHJpbmcpCiB7CiAgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7
CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgQ2FsbERhdGEgY2FsbERhdGE7
CkBAIC03OTgsNyArNzk4LDcgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgSlNTdHJpbmcqIHJlcGxh
Y2VVcwogICAgIENhbGxUeXBlIGNhbGxUeXBlID0gZ2V0Q2FsbERhdGEodm0sIHJlcGxhY2VWYWx1
ZSwgY2FsbERhdGEpOwogICAgIGlmIChjYWxsVHlwZSAhPSBDYWxsVHlwZTo6Tm9uZSkgewogICAg
ICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOwotICAgICAgICBhdXRvKiBzdWJzdHJpbmcg
PSBqc1N1YnN0cmluZygmdm0sIHN0cmluZywgbWF0Y2hTdGFydCwgc2VhcmNoU3RyaW5nLmltcGwo
KS0+bGVuZ3RoKCkpOworICAgICAgICBhdXRvKiBzdWJzdHJpbmcgPSBqc1N1YnN0cmluZyh2bSwg
c3RyaW5nLCBtYXRjaFN0YXJ0LCBzZWFyY2hTdHJpbmcuaW1wbCgpLT5sZW5ndGgoKSk7CiAgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwogICAgICAgICBhcmdzLmFw
cGVuZChzdWJzdHJpbmcpOwogICAgICAgICBhcmdzLmFwcGVuZChqc051bWJlcihtYXRjaFN0YXJ0
KSk7CkBAIC05MzMsNyArOTMzLDcgQEAgSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblN0
cmluZ1BybwogICAgIEVuY29kZWRKU1ZhbHVlIHJlcGxhY2VWYWx1ZSkKIHsKICAgICBWTSYgdm0g
PSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVj
KTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICAKICAg
ICByZXR1cm4gcmVwbGFjZSgKICAgICAgICAgdm0sIGV4ZWMsIEpTVmFsdWU6OmRlY29kZSh0aGlz
VmFsdWUpLCBKU1ZhbHVlOjpkZWNvZGUoc2VhcmNoVmFsdWUpLApAQCAtOTc0LDE0ICs5NzQsMTQg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIGlmIChhMC5p
c1VJbnQzMigpKSB7CiAgICAgICAgIHVpbnQzMl90IGkgPSBhMC5hc1VJbnQzMigpOwogICAgICAg
ICBpZiAoaSA8IHZpZXcubGVuZ3RoKCkpCi0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzU2luZ2xlQ2hhcmFjdGVyU3RyaW5nKGV4ZWMsIHZpZXdbaV0pKTsKLSAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc0VtcHR5U3RyaW5nKGV4ZWMpKTsKKyAgICAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNTaW5nbGVDaGFyYWN0ZXJTdHJpbmcodm0sIHZpZXdbaV0p
KTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0VtcHR5U3RyaW5nKHZtKSk7CiAg
ICAgfQogICAgIGRvdWJsZSBkcG9zID0gYTAudG9JbnRlZ2VyKGV4ZWMpOwogICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGlmIChkcG9zID49IDAg
JiYgZHBvcyA8IHZpZXcubGVuZ3RoKCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNTaW5nbGVDaGFyYWN0ZXJTdHJpbmcoZXhlYywgdmlld1tzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
ZHBvcyldKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0VtcHR5U3RyaW5nKGV4ZWMp
KTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1NpbmdsZUNoYXJhY3RlclN0cmlu
Zyh2bSwgdmlld1tzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZHBvcyldKSk7CisgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc0VtcHR5U3RyaW5nKHZtKSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jQ2hhckNvZGVBdChFeGVjU3RhdGUqIGV4ZWMpCkBA
IC0xMjcwLDcgKzEyNzAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1By
b3RvCiAgICAgICAgIEFTU0VSVChsaW1pdCk7CiAKICAgICAgICAgZG8gewotICAgICAgICAgICAg
cmVzdWx0LT5wdXREaXJlY3RJbmRleChleGVjLCBwb3NpdGlvbiwganNTaW5nbGVDaGFyYWN0ZXJT
dHJpbmcoZXhlYywgaW5wdXRbcG9zaXRpb25dKSk7CisgICAgICAgICAgICByZXN1bHQtPnB1dERp
cmVjdEluZGV4KGV4ZWMsIHBvc2l0aW9uLCBqc1NpbmdsZUNoYXJhY3RlclN0cmluZyh2bSwgaW5w
dXRbcG9zaXRpb25dKSk7CiAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBl
bmNvZGVkSlNWYWx1ZSgpKTsKICAgICAgICAgfSB3aGlsZSAoKytwb3NpdGlvbiA8IGxpbWl0KTsK
IApAQCAtMTM2Niw3ICsxMzY2LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJp
bmdQcm90bwogICAgIGRvdWJsZSBsZW5ndGggPSBhMS5pc1VuZGVmaW5lZCgpID8gbGVuIDogYTEu
dG9JbnRlZ2VyKGV4ZWMpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRK
U1ZhbHVlKCkpOwogICAgIGlmIChzdGFydCA+PSBsZW4gfHwgbGVuZ3RoIDw9IDApCi0gICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNFbXB0eVN0cmluZyhleGVjKSk7CisgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNFbXB0eVN0cmluZyh2bSkpOwogICAgIGlmIChzdGFydCA8
IDApIHsKICAgICAgICAgc3RhcnQgKz0gbGVuOwogICAgICAgICBpZiAoc3RhcnQgPCAwKQpAQCAt
MTM3OSw3ICsxMzc5LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90
bwogICAgIHNjb3BlLnJlbGVhc2UoKTsKICAgICBpZiAoanNTdHJpbmcpCiAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNTdWJzdHJpbmcoZXhlYywganNTdHJpbmcsIHN1YnN0cmluZ1N0
YXJ0LCBzdWJzdHJpbmdMZW5ndGgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3Vi
c3RyaW5nKCZ2bSwgdVN0cmluZywgc3Vic3RyaW5nU3RhcnQsIHN1YnN0cmluZ0xlbmd0aCkpOwor
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdWJzdHJpbmcodm0sIHVTdHJpbmcsIHN1YnN0
cmluZ1N0YXJ0LCBzdWJzdHJpbmdMZW5ndGgpKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBidWlsdGluU3RyaW5nU3Vic3RySW50ZXJuYWwoRXhlY1N0YXRlKiBleGVjKQpAQCAt
MTQ1NSw3ICsxNDU1LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90
bwogICAgIFN0cmluZyBsb3dlcmNhc2VkU3RyaW5nID0gcy5jb252ZXJ0VG9Mb3dlcmNhc2VXaXRo
b3V0TG9jYWxlKCk7CiAgICAgaWYgKGxvd2VyY2FzZWRTdHJpbmcuaW1wbCgpID09IHMuaW1wbCgp
KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHNWYWwpOwotICAgIFJFTEVBU0VfQU5E
X1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKGV4ZWMsIGxvd2VyY2FzZWRT
dHJpbmcpKSk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUo
anNTdHJpbmcodm0sIGxvd2VyY2FzZWRTdHJpbmcpKSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jVG9VcHBlckNhc2UoRXhlY1N0YXRlKiBleGVjKQpA
QCAtMTQ3Myw3ICsxNDczLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQ
cm90bwogICAgIFN0cmluZyB1cHBlcmNhc2VkU3RyaW5nID0gcy5jb252ZXJ0VG9VcHBlcmNhc2VX
aXRob3V0TG9jYWxlKCk7CiAgICAgaWYgKHVwcGVyY2FzZWRTdHJpbmcuaW1wbCgpID09IHMuaW1w
bCgpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHNWYWwpOwotICAgIFJFTEVBU0Vf
QU5EX1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKGV4ZWMsIHVwcGVyY2Fz
ZWRTdHJpbmcpKSk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNv
ZGUoanNTdHJpbmcodm0sIHVwcGVyY2FzZWRTdHJpbmcpKSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jTG9jYWxlQ29tcGFyZShFeGVjU3RhdGUqIGV4
ZWMpCkBAIC0xNjAxLDcgKzE2MDEsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgdG9Mb2NhbGVD
YXNlKEV4ZWNTCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlLCBzY29wZSwg
dV9lcnJvck5hbWUoZXJyb3IpKTsKIAogICAgIC8vIDE4LiBSZXR1cm4gTC4KLSAgICBSRUxFQVNF
X0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyhzdGF0ZSwgbG93ZXIp
KSk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUoanNTdHJp
bmcodm0sIGxvd2VyKSkpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmlu
Z1Byb3RvRnVuY1RvTG9jYWxlTG93ZXJDYXNlKEV4ZWNTdGF0ZSogc3RhdGUpCkBAIC0xNjUwLDcg
KzE2NTAsNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUgdHJpbVN0cmluZyhFeGVjU3RhCiAgICAg
aWYgKGxlZnQgPT0gMCAmJiByaWdodCA9PSBzdHIubGVuZ3RoKCkgJiYgdGhpc1ZhbHVlLmlzU3Ry
aW5nKCkpCiAgICAgICAgIHJldHVybiB0aGlzVmFsdWU7CiAKLSAgICBSRUxFQVNFX0FORF9SRVRV
Uk4oc2NvcGUsIGpzU3RyaW5nKGV4ZWMsIHN0ci5zdWJzdHJpbmdTaGFyaW5nSW1wbChsZWZ0LCBy
aWdodCAtIGxlZnQpKSk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBqc1N0cmluZyh2
bSwgc3RyLnN1YnN0cmluZ1NoYXJpbmdJbXBsKGxlZnQsIHJpZ2h0IC0gbGVmdCkpKTsKIH0KIAog
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNUcmltKEV4ZWNTdGF0
ZSogZXhlYykKQEAgLTE5MDEsNyArMTkwMSw3IEBAIHN0YXRpYyBKU1ZhbHVlIG5vcm1hbGl6ZShF
eGVjU3RhdGUqIGV4ZWMKICAgICB1bm9ybTJfbm9ybWFsaXplKG5vcm1hbGl6ZXIsIGNoYXJhY3Rl
cnMsIHZpZXcubGVuZ3RoKCksIGJ1ZmZlciwgbm9ybWFsaXplZFN0cmluZ0xlbmd0aCwgJnN0YXR1
cyk7CiAgICAgQVNTRVJUKFVfU1VDQ0VTUyhzdGF0dXMpKTsKIAotICAgIFJFTEVBU0VfQU5EX1JF
VFVSTihzY29wZSwganNTdHJpbmcoJnZtLCBXVEZNb3ZlKHJlc3VsdCkpKTsKKyAgICBSRUxFQVNF
X0FORF9SRVRVUk4oc2NvcGUsIGpzU3RyaW5nKHZtLCBXVEZNb3ZlKHJlc3VsdCkpKTsKIH0KIAog
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNOb3JtYWxpemUoRXhl
Y1N0YXRlKiBleGVjKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5n
UHJvdG90eXBlSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0cmluZ1Byb3RvdHlwZUlubGluZXMuaAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlSW5saW5lcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBAIEFMV0FZU19JTkxJTkUgSlNTdHJpbmcqIHN0cmlu
Z1NsaWNlKEV4ZWMKICAgICAgICAgICAgIHRvID0gbGVuZ3RoOwogICAgICAgICByZXR1cm4ganNT
dWJzdHJpbmcodm0sIGV4ZWMsIHN0cmluZywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGZyb20pLCBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4odG8pIC0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGZyb20pKTsK
ICAgICB9Ci0gICAgcmV0dXJuIGpzRW1wdHlTdHJpbmcoJnZtKTsKKyAgICByZXR1cm4ganNFbXB0
eVN0cmluZyh2bSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUmVjdXJzaW9uQ2hlY2tlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUmVjdXJzaW9uQ2hlY2tlci5j
cHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0
cmluZ1JlY3Vyc2lvbkNoZWNrZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMiwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDExLTIwMTkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtMzUsNyArMzUsNyBAQCBK
U1ZhbHVlIFN0cmluZ1JlY3Vyc2lvbkNoZWNrZXI6OnRocm93U3RhCiAKIEpTVmFsdWUgU3RyaW5n
UmVjdXJzaW9uQ2hlY2tlcjo6ZW1wdHlTdHJpbmcoKQogewotICAgIHJldHVybiBqc0VtcHR5U3Ry
aW5nKG1fZXhlYyk7CisgICAgcmV0dXJuIGpzRW1wdHlTdHJpbmcobV9leGVjLT52bSgpKTsKIH0K
IAogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3Bw
CShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1
Y3R1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDI2LDkgKzEwMjYsOSBAQCB2b2lkIFN0cnVj
dHVyZTo6ZGlkVHJhbnNpdGlvbkZyb21UaGlzU3RyCiAKICAgICBpZiAoZGVmZXJyZWQpIHsKICAg
ICAgICAgQVNTRVJUKGRlZmVycmVkLT5zdHJ1Y3R1cmUoKSA9PSB0aGlzKTsKLSAgICAgICAgbV90
cmFuc2l0aW9uV2F0Y2hwb2ludFNldC5maXJlQWxsKCp2bSgpLCBkZWZlcnJlZCk7CisgICAgICAg
IG1fdHJhbnNpdGlvbldhdGNocG9pbnRTZXQuZmlyZUFsbCh2bSgpLCBkZWZlcnJlZCk7CiAgICAg
fSBlbHNlCi0gICAgICAgIG1fdHJhbnNpdGlvbldhdGNocG9pbnRTZXQuZmlyZUFsbCgqdm0oKSwg
U3RydWN0dXJlRmlyZURldGFpbCh0aGlzKSk7CisgICAgICAgIG1fdHJhbnNpdGlvbldhdGNocG9p
bnRTZXQuZmlyZUFsbCh2bSgpLCBTdHJ1Y3R1cmVGaXJlRGV0YWlsKHRoaXMpKTsKIH0KIAogdm9p
ZCBTdHJ1Y3R1cmU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlz
aXRvcikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlubGlu
ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1
cmVJbmxpbmVzLmgJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0cnVjdHVyZUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMyOSw3ICszMjks
NyBAQCBpbmxpbmUgdm9pZCBTdHJ1Y3R1cmU6OmRpZFJlcGxhY2VQcm9wZXJ0CiAgICAgV2F0Y2hw
b2ludFNldCogc2V0ID0gbWFwLT5nZXQob2Zmc2V0KTsKICAgICBpZiAoTElLRUxZKCFzZXQpKQog
ICAgICAgICByZXR1cm47Ci0gICAgc2V0LT5maXJlQWxsKCp2bSgpLCAiUHJvcGVydHkgZGlkIGdl
dCByZXBsYWNlZCIpOworICAgIHNldC0+ZmlyZUFsbCh2bSgpLCAiUHJvcGVydHkgZGlkIGdldCBy
ZXBsYWNlZCIpOwogfQogCiBpbmxpbmUgV2F0Y2hwb2ludFNldCogU3RydWN0dXJlOjpwcm9wZXJ0
eVJlcGxhY2VtZW50V2F0Y2hwb2ludFNldChQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCkBAIC01NTks
NyArNTU5LDcgQEAgQUxXQVlTX0lOTElORSBib29sIFN0cnVjdHVyZTo6c2hvdWxkQ29udgogICAg
IGlmIChhLT5zdG9yZWRQcm90b3R5cGUoKSA9PSBiLT5zdG9yZWRQcm90b3R5cGUoKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgVk0mIHZtID0gKmEtPnZtKCk7CisgICAgVk0mIHZtID0g
YS0+dm0oKTsKICAgICBKU09iamVjdCogYU9iaiA9IGEtPnN0b3JlZFByb3RvdHlwZU9iamVjdCgp
OwogICAgIEpTT2JqZWN0KiBiT2JqID0gYi0+c3RvcmVkUHJvdG90eXBlT2JqZWN0KCk7CiAgICAg
d2hpbGUgKGFPYmogJiYgYk9iaikgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3ltYm9sQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N5bWJvbENvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sQ29uc3RydWN0b3IuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIt
MjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgWXVzdWtlIFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPi4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKQEAgLTY0LDcgKzY0LDcgQEAgU3ltYm9sQ29uc3RydWN0b3I6OlN5bWJvbENvbnN0cnVjdG9y
KFZNJgogfQogCiAjZGVmaW5lIElOSVRJQUxJWkVfV0VMTF9LTk9XTl9TWU1CT0xTKG5hbWUpIFwK
LXB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2
bSwgI25hbWUpLCBTeW1ib2w6OmNyZWF0ZSh2bSwgc3RhdGljX2Nhc3Q8U3ltYm9sSW1wbCY+KCp2
bS5wcm9wZXJ0eU5hbWVzLT5uYW1lIyNTeW1ib2wuaW1wbCgpKSksIFByb3BlcnR5QXR0cmlidXRl
OjpEb250RW51bSB8IFByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgUHJvcGVydHlBdHRy
aWJ1dGU6OlJlYWRPbmx5KTsKK3B1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKHZtLCAjbmFtZSksIFN5bWJvbDo6Y3JlYXRlKHZtLCBzdGF0aWNfY2Fz
dDxTeW1ib2xJbXBsJj4oKnZtLnByb3BlcnR5TmFtZXMtPm5hbWUjI1N5bWJvbC5pbXBsKCkpKSwg
UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtIHwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnREZWxl
dGUgfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpOwogCiB2b2lkIFN5bWJvbENvbnN0cnVj
dG9yOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFN5bWJvbFByb3RvdHlwZSogcHJvdG90eXBlKQog
ewpAQCAtMTIxLDcgKzEyMSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3ltYm9s
Q29uc3QKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAog
ICAgIEFTU0VSVCh1aWQuc3ltYm9sUmVnaXN0cnkoKSA9PSAmdm0uc3ltYm9sUmVnaXN0cnkoKSk7
Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyhleGVjLCAmdWlkKSk7CisgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyh2bSwgJnVpZCkpOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFBy
b3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3ltYm9sUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3ltYm9sUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDE1IFl1c3VrZSBTdXp1a2kg
PHV0YXRhbmUudGVhQGdtYWlsLmNvbT4uCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC02Miw3ICs2Miw3
IEBAIFN5bWJvbFByb3RvdHlwZTo6U3ltYm9sUHJvdG90eXBlKFZNJiB2bSwKIHZvaWQgU3ltYm9s
UHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QpCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwotICAgIHB1dERpcmVjdFdp
dGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT50b1N0cmluZ1RhZ1N5bWJvbCwg
anNTdHJpbmcoJnZtLCAiU3ltYm9sIiksIFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8IFBy
b3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSk7CisgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRp
b24odm0sIHZtLnByb3BlcnR5TmFtZXMtPnRvU3RyaW5nVGFnU3ltYm9sLCBqc1N0cmluZyh2bSwg
IlN5bWJvbCIpLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBQcm9wZXJ0eUF0dHJpYnV0
ZTo6UmVhZE9ubHkpOwogICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7CiAKICAgICBK
U0Z1bmN0aW9uKiB0b1ByaW1pdGl2ZUZ1bmN0aW9uID0gSlNGdW5jdGlvbjo6Y3JlYXRlKHZtLCBn
bG9iYWxPYmplY3QsIDEsICJbU3ltYm9sLnRvUHJpbWl0aXZlXSJfcywgc3ltYm9sUHJvdG9GdW5j
VmFsdWVPZiwgTm9JbnRyaW5zaWMpOwpAQCAtOTgsNyArOTgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIHN5bWJvbFByb3RvCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9y
KGV4ZWMsIHNjb3BlLCBTeW1ib2xEZXNjcmlwdGlvblR5cGVFcnJvcik7CiAgICAgc2NvcGUucmVs
ZWFzZSgpOwogICAgIGNvbnN0IGF1dG8gZGVzY3JpcHRpb24gPSBzeW1ib2wtPmRlc2NyaXB0aW9u
KCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShkZXNjcmlwdGlvbi5pc051bGwoKSA/IGpz
VW5kZWZpbmVkKCkgOiBqc1N0cmluZygmdm0sIGRlc2NyaXB0aW9uKSk7CisgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShkZXNjcmlwdGlvbi5pc051bGwoKSA/IGpzVW5kZWZpbmVkKCkgOiBqc1N0
cmluZyh2bSwgZGVzY3JpcHRpb24pKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBzeW1ib2xQcm90b0Z1bmNUb1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMpCkBAIC0xMDksNyArMTA5
LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzeW1ib2xQcm90bwogICAgIFN5bWJv
bCogc3ltYm9sID0gdHJ5RXh0cmFjdFN5bWJvbCh2bSwgZXhlYy0+dGhpc1ZhbHVlKCkpOwogICAg
IGlmICghc3ltYm9sKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29w
ZSwgU3ltYm9sVG9TdHJpbmdUeXBlRXJyb3IpOwotICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29w
ZSwgSlNWYWx1ZTo6ZW5jb2RlKGpzTm9udHJpdmlhbFN0cmluZygmdm0sIHN5bWJvbC0+ZGVzY3Jp
cHRpdmVTdHJpbmcoKSkpKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6
OmVuY29kZShqc05vbnRyaXZpYWxTdHJpbmcodm0sIHN5bWJvbC0+ZGVzY3JpcHRpdmVTdHJpbmco
KSkpKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzeW1ib2xQcm90b0Z1bmNW
YWx1ZU9mKEV4ZWNTdGF0ZSogZXhlYykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N5bWJvbFRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TeW1ib2xUYWJsZS5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTQsIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0yMTMsNyArMjEzLDcgQEAgdm9pZCBTeW1ib2xUYWJsZTo6c2V0UmFyZURhdGFDb2RlQmxv
Y2soQwogICAgICAgICBtX3JhcmVEYXRhID0gbWFrZVVuaXF1ZTxTeW1ib2xUYWJsZVJhcmVEYXRh
PigpOwogCiAgICAgQVNTRVJUKCFtX3JhcmVEYXRhLT5tX2NvZGVCbG9jayk7Ci0gICAgbV9yYXJl
RGF0YS0+bV9jb2RlQmxvY2suc2V0KCpjb2RlQmxvY2stPnZtKCksIHRoaXMsIGNvZGVCbG9jayk7
CisgICAgbV9yYXJlRGF0YS0+bV9jb2RlQmxvY2suc2V0KGNvZGVCbG9jay0+dm0oKSwgdGhpcywg
Y29kZUJsb2NrKTsKIH0KIAogR2xvYmFsVmFyaWFibGVJRCBTeW1ib2xUYWJsZTo6dW5pcXVlSURG
b3JWYXJpYWJsZShjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBVbmlxdWVkU3RyaW5nSW1wbCog
a2V5LCBWTSYgdm0pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZXN0UnVu
bmVyVXRpbHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1Rlc3RSdW5uZXJVdGlscy5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1Rlc3RSdW5uZXJVdGlscy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0z
OCw3ICszOCw3IEBAIEZ1bmN0aW9uRXhlY3V0YWJsZSogZ2V0RXhlY3V0YWJsZUZvckZ1bmMKICAg
ICBpZiAoIXRoZUZ1bmN0aW9uVmFsdWUuaXNDZWxsKCkpCiAgICAgICAgIHJldHVybiBudWxscHRy
OwogCi0gICAgVk0mIHZtID0gKnRoZUZ1bmN0aW9uVmFsdWUuYXNDZWxsKCktPnZtKCk7CisgICAg
Vk0mIHZtID0gdGhlRnVuY3Rpb25WYWx1ZS5hc0NlbGwoKS0+dm0oKTsKICAgICBKU0Z1bmN0aW9u
KiB0aGVGdW5jdGlvbiA9IGpzRHluYW1pY0Nhc3Q8SlNGdW5jdGlvbio+KHZtLCB0aGVGdW5jdGlv
blZhbHVlKTsKICAgICBpZiAoIXRoZUZ1bmN0aW9uKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHJldmlzaW9uIDI0OTEyOCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjUxLDcgKzI1MSw3IEBAIFZNOjpWTShWTVR5cGUgdm1UeXBlLCBIZWFwVHlwZSBoZWFwVHlw
ZSkKICNpZiBVU0UoQ0YpCiAgICAgLCBtX3J1bkxvb3AoQ0ZSdW5Mb29wR2V0Q3VycmVudCgpKQog
I2VuZGlmIC8vIFVTRShDRikKLSAgICAsIGhlYXAodGhpcywgaGVhcFR5cGUpCisgICAgLCBoZWFw
KCp0aGlzLCBoZWFwVHlwZSkKICAgICAsIGZhc3RNYWxsb2NBbGxvY2F0b3IobWFrZVVuaXF1ZTxG
YXN0TWFsbG9jQWxpZ25lZE1lbW9yeUFsbG9jYXRvcj4oKSkKICAgICAsIHByaW1pdGl2ZUdpZ2Fj
YWdlQWxsb2NhdG9yKG1ha2VVbmlxdWU8R2lnYWNhZ2VBbGlnbmVkTWVtb3J5QWxsb2NhdG9yPihH
aWdhY2FnZTo6UHJpbWl0aXZlKSkKICAgICAsIGpzVmFsdWVHaWdhY2FnZUFsbG9jYXRvcihtYWtl
VW5pcXVlPEdpZ2FjYWdlQWxpZ25lZE1lbW9yeUFsbG9jYXRvcj4oR2lnYWNhZ2U6OkpTVmFsdWUp
KQpAQCAtMzM3LDcgKzMzNyw3IEBAIFZNOjpWTShWTVR5cGUgdm1UeXBlLCBIZWFwVHlwZSBoZWFw
VHlwZSkKIAogICAgIHNtYWxsU3RyaW5ncy5pbml0aWFsaXplQ29tbW9uU3RyaW5ncygqdGhpcyk7
CiAKLSAgICBwcm9wZXJ0eU5hbWVzID0gbmV3IENvbW1vbklkZW50aWZpZXJzKHRoaXMpOworICAg
IHByb3BlcnR5TmFtZXMgPSBuZXcgQ29tbW9uSWRlbnRpZmllcnMoKnRoaXMpOwogICAgIHRlcm1p
bmF0ZWRFeGVjdXRpb25FcnJvclN0cnVjdHVyZS5zZXQoKnRoaXMsIFRlcm1pbmF0ZWRFeGVjdXRp
b25FcnJvcjo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwogICAgIHByb3Bl
cnR5TmFtZUVudW1lcmF0b3JTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3I6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICAgICBjdXN0b21H
ZXR0ZXJTZXR0ZXJTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBDdXN0b21HZXR0ZXJTZXR0ZXI6OmNyZWF0
ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKQEAgLTcwMyw3ICs3MDMsNyBAQCBOYXRp
dmVFeGVjdXRhYmxlKiBWTTo6Z2V0SG9zdEZ1bmN0aW9uKE5hCiAjaWYgRU5BQkxFKEpJVCkKICAg
ICBpZiAoY2FuVXNlSklUKCkpIHsKICAgICAgICAgcmV0dXJuIGppdFN0dWJzLT5ob3N0RnVuY3Rp
b25TdHViKAotICAgICAgICAgICAgdGhpcywgZnVuY3Rpb24sIGNvbnN0cnVjdG9yLAorICAgICAg
ICAgICAgKnRoaXMsIGZ1bmN0aW9uLCBjb25zdHJ1Y3RvciwKICAgICAgICAgICAgIGludHJpbnNp
YyAhPSBOb0ludHJpbnNpYyA/IHRodW5rR2VuZXJhdG9yRm9ySW50cmluc2ljKGludHJpbnNpYykg
OiAwLAogICAgICAgICAgICAgaW50cmluc2ljLCBzaWduYXR1cmUsIG5hbWUpOwogICAgIH0KQEAg
LTcxOCw4ICs3MTgsOCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gVk06
CiAjaWYgRU5BQkxFKEpJVCkKICAgICBpZiAoY2FuVXNlSklUKCkpIHsKICAgICAgICAgaWYgKGtp
bmQgPT0gQ29kZUZvckNhbGwpCi0gICAgICAgICAgICByZXR1cm4gaml0U3R1YnMtPmN0aUludGVy
bmFsRnVuY3Rpb25DYWxsKHRoaXMpLnJldGFnZ2VkPEpTRW50cnlQdHJUYWc+KCk7Ci0gICAgICAg
IHJldHVybiBqaXRTdHVicy0+Y3RpSW50ZXJuYWxGdW5jdGlvbkNvbnN0cnVjdCh0aGlzKS5yZXRh
Z2dlZDxKU0VudHJ5UHRyVGFnPigpOworICAgICAgICAgICAgcmV0dXJuIGppdFN0dWJzLT5jdGlJ
bnRlcm5hbEZ1bmN0aW9uQ2FsbCgqdGhpcykucmV0YWdnZWQ8SlNFbnRyeVB0clRhZz4oKTsKKyAg
ICAgICAgcmV0dXJuIGppdFN0dWJzLT5jdGlJbnRlcm5hbEZ1bmN0aW9uQ29uc3RydWN0KCp0aGlz
KS5yZXRhZ2dlZDxKU0VudHJ5UHRyVGFnPigpOwogICAgIH0KICNlbmRpZgogICAgIGlmIChraW5k
ID09IENvZGVGb3JDYWxsKQpAQCAtNzcxLDcgKzc3MSw3IEBAIHZvaWQgVk06OmRlbGV0ZUFsbENv
ZGUoRGVsZXRlQWxsQ29kZUVmZm8KIHZvaWQgVk06OnNocmlua0Zvb3RwcmludFdoZW5JZGxlKCkK
IHsKICAgICB3aGVuSWRsZShbPV0gKCkgewotICAgICAgICBzYW5pdGl6ZVN0YWNrRm9yVk0odGhp
cyk7CisgICAgICAgIHNhbml0aXplU3RhY2tGb3JWTSgqdGhpcyk7CiAgICAgICAgIGRlbGV0ZUFs
bENvZGUoRGVsZXRlQWxsQ29kZUlmTm90Q29sbGVjdGluZyk7CiAgICAgICAgIGhlYXAuY29sbGVj
dE5vdyhTeW5jaHJvbm91c25lc3M6OlN5bmMsIENvbGxlY3Rpb25TY29wZTo6RnVsbCk7CiAgICAg
ICAgIC8vIEZJWE1FOiBDb25zaWRlciBzdG9wcGluZyB2YXJpb3VzIGF1dG9tYXRpYyB0aHJlYWRz
IGhlcmUuCkBAIC05MjUsMTYgKzkyNSwxNiBAQCB2b2lkIFZNOjpnYXRoZXJTY3JhdGNoQnVmZmVy
Um9vdHMoQ29uc2VyCiB9CiAjZW5kaWYKIAotdm9pZCBsb2dTYW5pdGl6ZVN0YWNrKFZNKiB2bSkK
K3ZvaWQgbG9nU2FuaXRpemVTdGFjayhWTSYgdm0pCiB7Ci0gICAgaWYgKE9wdGlvbnM6OnZlcmJv
c2VTYW5pdGl6ZVN0YWNrKCkgJiYgdm0tPnRvcENhbGxGcmFtZSkgeworICAgIGlmIChPcHRpb25z
Ojp2ZXJib3NlU2FuaXRpemVTdGFjaygpICYmIHZtLnRvcENhbGxGcmFtZSkgewogICAgICAgICBp
bnQgZHVtbXk7CiAgICAgICAgIGF1dG8mIHN0YWNrQm91bmRzID0gVGhyZWFkOjpjdXJyZW50KCku
c3RhY2soKTsKICAgICAgICAgZGF0YUxvZygKLSAgICAgICAgICAgICJTYW5pdGl6aW5nIHN0YWNr
IGZvciBWTSA9ICIsIFJhd1BvaW50ZXIodm0pLCAiIHdpdGggdG9wIGNhbGwgZnJhbWUgYXQgIiwg
UmF3UG9pbnRlcih2bS0+dG9wQ2FsbEZyYW1lKSwKKyAgICAgICAgICAgICJTYW5pdGl6aW5nIHN0
YWNrIGZvciBWTSA9ICIsIFJhd1BvaW50ZXIoJnZtKSwgIiB3aXRoIHRvcCBjYWxsIGZyYW1lIGF0
ICIsIFJhd1BvaW50ZXIodm0udG9wQ2FsbEZyYW1lKSwKICAgICAgICAgICAgICIsIGN1cnJlbnQg
c3RhY2sgcG9pbnRlciBhdCAiLCBSYXdQb2ludGVyKCZkdW1teSksICIsIGluICIsCi0gICAgICAg
ICAgICBwb2ludGVyRHVtcCh2bS0+dG9wQ2FsbEZyYW1lLT5jb2RlQmxvY2soKSksICIsIGxhc3Qg
Y29kZSBvcmlnaW4gPSAiLAotICAgICAgICAgICAgdm0tPnRvcENhbGxGcmFtZS0+Y29kZU9yaWdp
bigpLCAiLCBsYXN0IHN0YWNrIHRvcCA9ICIsIFJhd1BvaW50ZXIodm0tPmxhc3RTdGFja1RvcCgp
KSwgIiwgaW4gc3RhY2sgcmFuZ2UgWyIsIFJhd1BvaW50ZXIoc3RhY2tCb3VuZHMub3JpZ2luKCkp
LCAiLCAiLCBSYXdQb2ludGVyKHN0YWNrQm91bmRzLmVuZCgpKSwgIl1cbiIpOworICAgICAgICAg
ICAgcG9pbnRlckR1bXAodm0udG9wQ2FsbEZyYW1lLT5jb2RlQmxvY2soKSksICIsIGxhc3QgY29k
ZSBvcmlnaW4gPSAiLAorICAgICAgICAgICAgdm0udG9wQ2FsbEZyYW1lLT5jb2RlT3JpZ2luKCks
ICIsIGxhc3Qgc3RhY2sgdG9wID0gIiwgUmF3UG9pbnRlcih2bS5sYXN0U3RhY2tUb3AoKSksICIs
IGluIHN0YWNrIHJhbmdlIFsiLCBSYXdQb2ludGVyKHN0YWNrQm91bmRzLm9yaWdpbigpKSwgIiwg
IiwgUmF3UG9pbnRlcihzdGFja0JvdW5kcy5lbmQoKSksICJdXG4iKTsKICAgICB9CiB9CiAKQEAg
LTExNDMsMTggKzExNDMsMTggQEAgdm9pZCBRdWV1ZWRUYXNrOjpydW4oKQogICAgIG1fbWljcm90
YXNrLT5ydW4obV9nbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSk7CiB9CiAKLXZvaWQgc2FuaXRp
emVTdGFja0ZvclZNKFZNKiB2bSkKK3ZvaWQgc2FuaXRpemVTdGFja0ZvclZNKFZNJiB2bSkKIHsK
ICAgICBsb2dTYW5pdGl6ZVN0YWNrKHZtKTsKLSAgICBpZiAodm0tPnRvcENhbGxGcmFtZSkgewor
ICAgIGlmICh2bS50b3BDYWxsRnJhbWUpIHsKICAgICAgICAgYXV0byYgc3RhY2tCb3VuZHMgPSBU
aHJlYWQ6OmN1cnJlbnQoKS5zdGFjaygpOwotICAgICAgICBBU1NFUlQodm0tPmN1cnJlbnRUaHJl
YWRJc0hvbGRpbmdBUElMb2NrKCkpOwotICAgICAgICBBU1NFUlRfVU5VU0VEKHN0YWNrQm91bmRz
LCBzdGFja0JvdW5kcy5jb250YWlucyh2bS0+bGFzdFN0YWNrVG9wKCkpKTsKKyAgICAgICAgQVNT
RVJUKHZtLmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOworICAgICAgICBBU1NFUlRf
VU5VU0VEKHN0YWNrQm91bmRzLCBzdGFja0JvdW5kcy5jb250YWlucyh2bS5sYXN0U3RhY2tUb3Ao
KSkpOwogICAgIH0KICNpZiBFTkFCTEUoQ19MT09QKQotICAgIHZtLT5pbnRlcnByZXRlci0+Y2xv
b3BTdGFjaygpLnNhbml0aXplU3RhY2soKTsKKyAgICB2bS5pbnRlcnByZXRlci0+Y2xvb3BTdGFj
aygpLnNhbml0aXplU3RhY2soKTsKICNlbHNlCi0gICAgc2FuaXRpemVTdGFja0ZvclZNSW1wbCh2
bSk7CisgICAgc2FuaXRpemVTdGFja0ZvclZNSW1wbCgmdm0pOwogI2VuZGlmCiB9CiAKQEAgLTEz
NTAsNyArMTM1MCw3IEBAIEpTQ2VsbCogVk06OnNlbnRpbmVsTWFwQnVja2V0U2xvdygpCiBKU1By
b3BlcnR5TmFtZUVudW1lcmF0b3IqIFZNOjplbXB0eVByb3BlcnR5TmFtZUVudW1lcmF0b3JTbG93
KCkKIHsKICAgICBBU1NFUlQoIW1fZW1wdHlQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKTsKLSAgICBQ
cm9wZXJ0eU5hbWVBcnJheSBwcm9wZXJ0eU5hbWVzKHRoaXMsIFByb3BlcnR5TmFtZU1vZGU6OlN0
cmluZ3MsIFByaXZhdGVTeW1ib2xNb2RlOjpFeGNsdWRlKTsKKyAgICBQcm9wZXJ0eU5hbWVBcnJh
eSBwcm9wZXJ0eU5hbWVzKCp0aGlzLCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzLCBQcml2YXRl
U3ltYm9sTW9kZTo6RXhjbHVkZSk7CiAgICAgYXV0byogZW51bWVyYXRvciA9IEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcjo6Y3JlYXRlKCp0aGlzLCBudWxscHRyLCAwLCAwLCBXVEZNb3ZlKHByb3Bl
cnR5TmFtZXMpKTsKICAgICBtX2VtcHR5UHJvcGVydHlOYW1lRW51bWVyYXRvci5zZXQoKnRoaXMs
IGVudW1lcmF0b3IpOwogICAgIHJldHVybiBlbnVtZXJhdG9yOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVk0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9WTS5oCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9WTS5oCSh3b3JraW5nIGNvcHkpCkBAIC02NzQsNyArNjc0LDcgQEAgcHVibGlj
OgogICAgIHN0ZDo6dW5pcXVlX3B0cjxKSVRUaHVua3M+IGppdFN0dWJzOwogICAgIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gZ2V0Q1RJU3R1YihUaHVua0dlbmVyYXRvciBn
ZW5lcmF0b3IpCiAgICAgewotICAgICAgICByZXR1cm4gaml0U3R1YnMtPmN0aVN0dWIodGhpcywg
Z2VuZXJhdG9yKTsKKyAgICAgICAgcmV0dXJuIGppdFN0dWJzLT5jdGlTdHViKCp0aGlzLCBnZW5l
cmF0b3IpOwogICAgIH0KIAogI2VuZGlmIC8vIEVOQUJMRShKSVQpCkBAIC0xMTA4LDE0ICsxMTA4
LDE0IEBAIGlubGluZSB2b2lkIFZNOjpzZXRJbml0aWFsaXppbmdPYmplY3RDbGEKIAogaW5saW5l
IEhlYXAqIFdlYWtTZXQ6OmhlYXAoKSBjb25zdAogewotICAgIHJldHVybiAmbV92bS0+aGVhcDsK
KyAgICByZXR1cm4gJm1fdm0uaGVhcDsKIH0KIAogI2lmICFFTkFCTEUoQ19MT09QKQogZXh0ZXJu
ICJDIiB2b2lkIHNhbml0aXplU3RhY2tGb3JWTUltcGwoVk0qKTsKICNlbmRpZgogCi1KU19FWFBP
UlRfUFJJVkFURSB2b2lkIHNhbml0aXplU3RhY2tGb3JWTShWTSopOwotdm9pZCBsb2dTYW5pdGl6
ZVN0YWNrKFZNKik7CitKU19FWFBPUlRfUFJJVkFURSB2b2lkIHNhbml0aXplU3RhY2tGb3JWTShW
TSYpOwordm9pZCBsb2dTYW5pdGl6ZVN0YWNrKFZNJik7CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1UcmFwcy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1UcmFwcy5jcHAJKHJldmlzaW9u
IDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJhcHMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNy0y
MDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
Ny0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMjE1LDcgKzIxNSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIFNpZ25hbEFjdGlvbjo6Tm90SGFuZGxlZDsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgQVNTRVJUKGN1cnJlbnRDb2RlQmxvY2stPmhhc0luc3RhbGxlZFZN
VHJhcEJyZWFrcG9pbnRzKCkpOwotICAgICAgICAgICAgICAgIFZNJiB2bSA9ICpjdXJyZW50Q29k
ZUJsb2NrLT52bSgpOworICAgICAgICAgICAgICAgIFZNJiB2bSA9IGN1cnJlbnRDb2RlQmxvY2st
PnZtKCk7CiAKICAgICAgICAgICAgICAgICAvLyBXZSBhcmUgaW4gSklUIGNvZGUgc28gaXQncyBz
YWZlIHRvIGFjcXVpcmUgdGhpcyBsb2NrLgogICAgICAgICAgICAgICAgIGF1dG8gY29kZUJsb2Nr
U2V0TG9ja2VyID0gaG9sZExvY2sodm0uaGVhcC5jb2RlQmxvY2tTZXQoKS5nZXRMb2NrKCkpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha01hcFByb3RvdHlwZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha01hcFByb3Rv
dHlwZS5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1dlYWtNYXBQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNiBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTkgQXBwbGUsIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDgsNyArNDgs
NyBAQCB2b2lkIFdlYWtNYXBQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNCiAgICAgSlNDX05B
VElWRV9JTlRSSU5TSUNfRlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lUSU9OKHZtLnByb3BlcnR5TmFt
ZXMtPmhhcywgcHJvdG9GdW5jV2Vha01hcEhhcywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3Bl
cnR5QXR0cmlidXRlOjpEb250RW51bSksIDEsIEpTV2Vha01hcEhhc0ludHJpbnNpYyk7CiAgICAg
SlNDX05BVElWRV9JTlRSSU5TSUNfRlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lUSU9OKHZtLnByb3Bl
cnR5TmFtZXMtPnNldCwgcHJvdG9GdW5jV2Vha01hcFNldCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSksIDIsIEpTV2Vha01hcFNldEludHJpbnNpYyk7
CiAKLSAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+
dG9TdHJpbmdUYWdTeW1ib2wsIGpzU3RyaW5nKCZ2bSwgIldlYWtNYXAiKSwgUHJvcGVydHlBdHRy
aWJ1dGU6OkRvbnRFbnVtIHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KTsKKyAgICBwdXRE
aXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+dG9TdHJpbmdUYWdT
eW1ib2wsIGpzU3RyaW5nKHZtLCAiV2Vha01hcCIpLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVu
dW0gfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpOwogfQogCiBBTFdBWVNfSU5MSU5FIHN0
YXRpYyBKU1dlYWtNYXAqIGdldFdlYWtNYXAoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTVmFsdWUg
dmFsdWUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrT2JqZWN0UmVm
UHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9XZWFrT2JqZWN0UmVmUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha09iamVjdFJlZlByb3RvdHlwZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAgdm9pZCBXZWFrT2JqZWN0UmVmUHJvdG90eXBlOjpm
aW5pc2hDcmVhdAogICAgIC8vIEZJWE1FOiBJdCB3b3VsZG4ndCBiZSBoYXJkIHRvIG1ha2UgdGhp
cyBhbiBpbnRyaW5zaWMuCiAgICAgSlNDX05BVElWRV9GVU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJ
T04odm0ucHJvcGVydHlOYW1lcy0+ZGVyZWYsIHByb3RvRnVuY1dlYWtSZWZEZXJlZiwgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSksIDApOwogCi0gICAg
cHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPnRvU3RyaW5n
VGFnU3ltYm9sLCBqc1N0cmluZygmdm0sICJXZWFrUmVmIiksIFByb3BlcnR5QXR0cmlidXRlOjpE
b250RW51bSB8IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSk7CisgICAgcHV0RGlyZWN0V2l0
aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPnRvU3RyaW5nVGFnU3ltYm9sLCBq
c1N0cmluZyh2bSwgIldlYWtSZWYiKSwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtIHwgUHJv
cGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KTsKIH0KIAogQUxXQVlTX0lOTElORSBzdGF0aWMgSlNX
ZWFrT2JqZWN0UmVmKiBnZXRXZWFrUmVmKENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU1ZhbHVlIHZh
bHVlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha1NldFByb3RvdHlw
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha1Nl
dFByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1dlYWtTZXRQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlLCBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOSBBcHBsZSwgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00Niw3
ICs0Niw3IEBAIHZvaWQgV2Vha1NldFByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0KICAgICBK
U0NfTkFUSVZFX0lOVFJJTlNJQ19GVU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJT04odm0ucHJvcGVy
dHlOYW1lcy0+aGFzLCBwcm90b0Z1bmNXZWFrU2V0SGFzLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSwgMSwgSlNXZWFrU2V0SGFzSW50cmluc2ljKTsK
ICAgICBKU0NfTkFUSVZFX0lOVFJJTlNJQ19GVU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJT04odm0u
cHJvcGVydHlOYW1lcy0+YWRkLCBwcm90b0Z1bmNXZWFrU2V0QWRkLCBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSwgMSwgSlNXZWFrU2V0QWRkSW50cmlu
c2ljKTsKIAotICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5h
bWVzLT50b1N0cmluZ1RhZ1N5bWJvbCwganNTdHJpbmcoJnZtLCAiV2Vha1NldCIpLCBQcm9wZXJ0
eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpOworICAg
IHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT50b1N0cmlu
Z1RhZ1N5bWJvbCwganNTdHJpbmcodm0sICJXZWFrU2V0IiksIFByb3BlcnR5QXR0cmlidXRlOjpE
b250RW51bSB8IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSk7CiB9CiAKIEFMV0FZU19JTkxJ
TkUgc3RhdGljIEpTV2Vha1NldCogZ2V0V2Vha1NldChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNW
YWx1ZSB2YWx1ZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9IZWFwVmVyaWZp
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9IZWFwVmVy
aWZpZXIuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9v
bHMvSGVhcFZlcmlmaWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE0NCwxMiArMTQ0LDEyIEBA
IHZvaWQgSGVhcFZlcmlmaWVyOjpwcmludFZlcmlmaWNhdGlvbkhlYWQKICAgICBDb2xsZWN0aW9u
U2NvcGUgc2NvcGUgPSBjdXJyZW50Q3ljbGUoKS5zY29wZTsKICAgICBNb25vdG9uaWNUaW1lIGdj
Q3ljbGVUaW1lc3RhbXAgPSBjdXJyZW50Q3ljbGUoKS50aW1lc3RhbXA7CiAgICAgZGF0YUxvZygi
VmVyaWZ5aW5nIGhlYXAgaW4gW3AiLCBnZXRDdXJyZW50UHJvY2Vzc0lEKCksICIsICIsIFRocmVh
ZDo6Y3VycmVudCgpLCAiXSB2bSAiLAotICAgICAgICBSYXdQb2ludGVyKG1faGVhcC0+dm0oKSks
ICIgb24gIiwgc2NvcGUsICIgR0MgQCAiLCBnY0N5Y2xlVGltZXN0YW1wLCAiXG4iKTsKKyAgICAg
ICAgUmF3UG9pbnRlcigmbV9oZWFwLT52bSgpKSwgIiBvbiAiLCBzY29wZSwgIiBHQyBAICIsIGdj
Q3ljbGVUaW1lc3RhbXAsICJcbiIpOwogfQogCiBib29sIEhlYXBWZXJpZmllcjo6dmVyaWZ5Q2Vs
bExpc3QoUGhhc2UgcGhhc2UsIENlbGxMaXN0JiBsaXN0KQogewotICAgIFZNJiB2bSA9ICptX2hl
YXAtPnZtKCk7CisgICAgVk0mIHZtID0gbV9oZWFwLT52bSgpOwogICAgIGF1dG8mIGxpdmVDZWxs
cyA9IGxpc3QuY2VsbHMoKTsKIAogICAgIGJvb2wgbGlzdE5hbWVQcmludGVkID0gZmFsc2U7CkBA
IC0yMjIsNyArMjIyLDcgQEAgYm9vbCBIZWFwVmVyaWZpZXI6OnZhbGlkYXRlSlNDZWxsKFZNKiBl
eAogICAgIGlmIChleHBlY3RlZFZNKSB7CiAgICAgICAgIFZNJiB2bSA9ICpleHBlY3RlZFZNOwog
Ci0gICAgICAgIFZNKiBjZWxsVk0gPSBjZWxsLT52bSgpOworICAgICAgICBWTSogY2VsbFZNID0g
JmNlbGwtPnZtKCk7CiAgICAgICAgIGlmIChjZWxsVk0gIT0gZXhwZWN0ZWRWTSkgewogICAgICAg
ICAgICAgcHJpbnRIZWFkZXJBbmRDZWxsKCk7CiAgICAgICAgICAgICBkYXRhTG9nKCIgaXMgZnJv
bSBhIGRpZmZlcmVudCBWTTogZXhwZWN0ZWQ6IiwgUmF3UG9pbnRlcihleHBlY3RlZFZNKSwgIiBh
Y3R1YWw6IiwgUmF3UG9pbnRlcihjZWxsVk0pLCAiXG4iKTsKQEAgLTI1NSw3ICsyNTUsNyBAQCBi
b29sIEhlYXBWZXJpZmllcjo6dmFsaWRhdGVKU0NlbGwoVk0qIGV4CiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgIH0KIAotICAgICAgICBWTSogc3RydWN0dXJlVk0gPSBzdHJ1Y3R1
cmUtPnZtKCk7CisgICAgICAgIFZNKiBzdHJ1Y3R1cmVWTSA9ICZzdHJ1Y3R1cmUtPnZtKCk7CiAg
ICAgICAgIGlmIChzdHJ1Y3R1cmVWTSAhPSBleHBlY3RlZFZNKSB7CiAgICAgICAgICAgICBwcmlu
dEhlYWRlckFuZENlbGwoKTsKICAgICAgICAgICAgIGRhdGFMb2coIiBoYXMgc3RydWN0dXJlICIs
IFJhd1BvaW50ZXIoc3RydWN0dXJlKSwgIiBmcm9tIGEgZGlmZmVyZW50IFZNOiBleHBlY3RlZDoi
LCBSYXdQb2ludGVyKGV4cGVjdGVkVk0pLCAiIGFjdHVhbDoiLCBSYXdQb2ludGVyKHN0cnVjdHVy
ZVZNKSwgIlxuIik7CkBAIC0zMDUsNyArMzA1LDcgQEAgYm9vbCBIZWFwVmVyaWZpZXI6OnZhbGlk
YXRlSlNDZWxsKFZNKiBleAogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAg
ICAgICAgIAotICAgICAgICBWTSogc3RydWN0dXJlU3RydWN0dXJlVk0gPSBzdHJ1Y3R1cmVTdHJ1
Y3R1cmUtPnZtKCk7CisgICAgICAgIFZNKiBzdHJ1Y3R1cmVTdHJ1Y3R1cmVWTSA9ICZzdHJ1Y3R1
cmVTdHJ1Y3R1cmUtPnZtKCk7CiAgICAgICAgIGlmIChzdHJ1Y3R1cmVTdHJ1Y3R1cmVWTSAhPSBl
eHBlY3RlZFZNKSB7CiAgICAgICAgICAgICBwcmludEhlYWRlckFuZENlbGwoKTsKICAgICAgICAg
ICAgIGRhdGFMb2coIiBoYXMgc3RydWN0dXJlICIsIFJhd1BvaW50ZXIoc3RydWN0dXJlKSwgIiB3
aG9zZSBzdHJ1Y3R1cmUgIiwgUmF3UG9pbnRlcihzdHJ1Y3R1cmVTdHJ1Y3R1cmUpLCAiIGlzIGZy
b20gYSBkaWZmZXJlbnQgVk06IGV4cGVjdGVkOiIsIFJhd1BvaW50ZXIoZXhwZWN0ZWRWTSksICIg
YWN0dWFsOiIsIFJhd1BvaW50ZXIoc3RydWN0dXJlU3RydWN0dXJlVk0pLCAiXG4iKTsKQEAgLTM2
NSw3ICszNjUsNyBAQCB2b2lkIEhlYXBWZXJpZmllcjo6dmVyaWZ5KEhlYXBWZXJpZmllcjo6CiB2
b2lkIEhlYXBWZXJpZmllcjo6cmVwb3J0Q2VsbChDZWxsUHJvZmlsZSYgcHJvZmlsZSwgaW50IGN5
Y2xlSW5kZXgsIEhlYXBWZXJpZmllcjo6R0NDeWNsZSYgY3ljbGUsIENlbGxMaXN0JiBsaXN0LCBj
b25zdCBjaGFyKiBwcmVmaXgpCiB7CiAgICAgSGVhcENlbGwqIGNlbGwgPSBwcm9maWxlLmNlbGwo
KTsKLSAgICBWTSogdm0gPSBtX2hlYXAtPnZtKCk7CisgICAgVk0mIHZtID0gbV9oZWFwLT52bSgp
OwogCiAgICAgaWYgKHByZWZpeCkKICAgICAgICAgZGF0YUxvZyhwcmVmaXgpOwpAQCAtMzg3LDcg
KzM4Nyw3IEBAIHZvaWQgSGVhcFZlcmlmaWVyOjpyZXBvcnRDZWxsKENlbGxQcm9maWwKIAogICAg
IGlmIChwcm9maWxlLmlzTGl2ZSgpICYmIHByb2ZpbGUuaXNKU0NlbGwoKSkgewogICAgICAgICBK
U0NlbGwqIGpzQ2VsbCA9IHByb2ZpbGUuanNDZWxsKCk7Ci0gICAgICAgIFN0cnVjdHVyZSogc3Ry
dWN0dXJlID0ganNDZWxsLT5zdHJ1Y3R1cmUoKnZtKTsKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUgPSBqc0NlbGwtPnN0cnVjdHVyZSh2bSk7CiAgICAgICAgIGRhdGFMb2coIiBzdHJ1Y3R1
cmU6IiwgUmF3UG9pbnRlcihzdHJ1Y3R1cmUpKTsKICAgICAgICAgaWYgKGpzQ2VsbC0+aXNPYmpl
Y3QoKSkgewogICAgICAgICAgICAgSlNPYmplY3QqIG9iaiA9IHN0YXRpY19jYXN0PEpTT2JqZWN0
Kj4oY2VsbCk7CkBAIC0zOTksNyArMzk5LDcgQEAgdm9pZCBIZWFwVmVyaWZpZXI6OnJlcG9ydENl
bGwoQ2VsbFByb2ZpbAogICAgIH0KIAogICAgIGRhdGFMb2coIiBpbiAiLCBjeWNsZS5zY29wZSwg
IiBHQ1siLCBjeWNsZUluZGV4LCAiXSBpbiAnIiwgbGlzdC5uYW1lKCksICInIGxpc3QgaW4gVk0g
IiwKLSAgICAgICAgUmF3UG9pbnRlcih2bSksICIgcmVjb3JkZWQgYXQgdGltZSAiLCBwcm9maWxl
LnRpbWVzdGFtcCgpLCAiXG4iKTsKKyAgICAgICAgUmF3UG9pbnRlcigmdm0pLCAiIHJlY29yZGVk
IGF0IHRpbWUgIiwgcHJvZmlsZS50aW1lc3RhbXAoKSwgIlxuIik7CiAgICAgaWYgKHByb2ZpbGUu
c3RhY2tUcmFjZSgpKQogICAgICAgICBkYXRhTG9nKCpwcm9maWxlLnN0YWNrVHJhY2UoKSk7CiB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xsYXJWTS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk0uY3BwCShyZXZp
c2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xsYXJWTS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTk5LDcgKzk5LDcgQEAgcHVibGljOgogICAgICAgICAgICAg
aWYgKGZyYW1lSW5kZXgrKyAhPSByZXF1ZXN0ZWRGcmFtZUluZGV4KQogICAgICAgICAgICAgICAg
IHJldHVybiBTdGFja1Zpc2l0b3I6OkNvbnRpbnVlOwogCi0gICAgICAgICAgICBhZGRQcm9wZXJ0
eSh2bSwgIm5hbWUiLCBqc1N0cmluZygmdm0sIHZpc2l0b3ItPmZ1bmN0aW9uTmFtZSgpKSk7Cisg
ICAgICAgICAgICBhZGRQcm9wZXJ0eSh2bSwgIm5hbWUiLCBqc1N0cmluZyh2bSwgdmlzaXRvci0+
ZnVuY3Rpb25OYW1lKCkpKTsKIAogICAgICAgICAgICAgaWYgKHZpc2l0b3ItPmNhbGxlZSgpLmlz
Q2VsbCgpKQogICAgICAgICAgICAgICAgIGFkZFByb3BlcnR5KHZtLCAiY2FsbGVlIiwgdmlzaXRv
ci0+Y2FsbGVlKCkuYXNDZWxsKCkpOwpAQCAtMTIzLDcgKzEyMyw3IEBAIHB1YmxpYzoKIHByaXZh
dGU6CiAgICAgdm9pZCBhZGRQcm9wZXJ0eShWTSYgdm0sIGNvbnN0IGNoYXIqIG5hbWUsIEpTVmFs
dWUgdmFsdWUpCiAgICAgewotICAgICAgICBJZGVudGlmaWVyIGlkZW50aWZpZXIgPSBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKCZ2bSwgbmFtZSk7CisgICAgICAgIElkZW50aWZpZXIgaWRlbnRpZmll
ciA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIG5hbWUpOwogICAgICAgICBwdXREaXJlY3Qo
dm0sIGlkZW50aWZpZXIsIHZhbHVlKTsKICAgICB9CiB9OwpAQCAtMzY5LDEzICszNjksMTQgQEAg
cHVibGljOgogCiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiBv
YmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVy
dHlTbG90JiBzbG90KQogICAgIHsKKyAgICAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICAg
ICAgQ3VzdG9tR2V0dGVyKiB0aGlzT2JqZWN0ID0ganNDYXN0PEN1c3RvbUdldHRlcio+KG9iamVj
dCk7Ci0gICAgICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gUHJvcGVydHlOYW1lKElkZW50aWZpZXI6
OmZyb21TdHJpbmcoZXhlYywgImN1c3RvbUdldHRlciIpKSkgeworICAgICAgICBpZiAocHJvcGVy
dHlOYW1lID09IFByb3BlcnR5TmFtZShJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiY3VzdG9t
R2V0dGVyIikpKSB7CiAgICAgICAgICAgICBzbG90LnNldENhY2hlYWJsZUN1c3RvbSh0aGlzT2Jq
ZWN0LCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IFByb3BlcnR5QXR0cmlidXRlOjpS
ZWFkT25seSB8IFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSwgdGhpc09iamVjdC0+Y3VzdG9t
R2V0dGVyKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgICAgIAot
ICAgICAgICBpZiAocHJvcGVydHlOYW1lID09IFByb3BlcnR5TmFtZShJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKGV4ZWMsICJjdXN0b21HZXR0ZXJBY2Nlc3NvciIpKSkgeworICAgICAgICBpZiAocHJv
cGVydHlOYW1lID09IFByb3BlcnR5TmFtZShJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiY3Vz
dG9tR2V0dGVyQWNjZXNzb3IiKSkpIHsKICAgICAgICAgICAgIHNsb3Quc2V0Q2FjaGVhYmxlQ3Vz
dG9tKHRoaXNPYmplY3QsIFByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgUHJvcGVydHlB
dHRyaWJ1dGU6OlJlYWRPbmx5IHwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtIHwgUHJvcGVy
dHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yLCB0aGlzT2JqZWN0LT5jdXN0b21HZXR0ZXJBY2Vz
c29yKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CkBAIC0zOTIsNyArMzkz
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgQ3VzdG9tR2V0dGVyKiB0aGlzT2JqZWN0ID0ganNEeW5h
bWljQ2FzdDxDdXN0b21HZXR0ZXIqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwog
ICAgICAgICBpZiAoIXRoaXNPYmplY3QpCiAgICAgICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVF
cnJvcihleGVjLCBzY29wZSk7Ci0gICAgICAgIGJvb2wgc2hvdWxkVGhyb3cgPSB0aGlzT2JqZWN0
LT5nZXQoZXhlYywgUHJvcGVydHlOYW1lKElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgInNo
b3VsZFRocm93IikpKS50b0Jvb2xlYW4oZXhlYyk7CisgICAgICAgIGJvb2wgc2hvdWxkVGhyb3cg
PSB0aGlzT2JqZWN0LT5nZXQoZXhlYywgUHJvcGVydHlOYW1lKElkZW50aWZpZXI6OmZyb21TdHJp
bmcodm0sICJzaG91bGRUaHJvdyIpKSkudG9Cb29sZWFuKGV4ZWMpOwogICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICAgICAgaWYgKHNob3Vs
ZFRocm93KQogICAgICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUp
OwpAQCAtNDA3LDcgKzQwOCw3IEBAIHByaXZhdGU6CiAgICAgICAgIEpTT2JqZWN0KiB0aGlzT2Jq
ZWN0ID0ganNEeW5hbWljQ2FzdDxKU09iamVjdCo+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1Zh
bHVlKSk7CiAgICAgICAgIGlmICghdGhpc09iamVjdCkKICAgICAgICAgICAgIHJldHVybiB0aHJv
d1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsKLSAgICAgICAgYm9vbCBzaG91bGRUaHJvdyA9IHRo
aXNPYmplY3QtPmdldChleGVjLCBQcm9wZXJ0eU5hbWUoSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhl
eGVjLCAic2hvdWxkVGhyb3ciKSkpLnRvQm9vbGVhbihleGVjKTsKKyAgICAgICAgYm9vbCBzaG91
bGRUaHJvdyA9IHRoaXNPYmplY3QtPmdldChleGVjLCBQcm9wZXJ0eU5hbWUoSWRlbnRpZmllcjo6
ZnJvbVN0cmluZyh2bSwgInNob3VsZFRocm93IikpKS50b0Jvb2xlYW4oZXhlYyk7CiAgICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgICAgICBp
ZiAoc2hvdWxkVGhyb3cpCiAgICAgICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVj
LCBzY29wZSk7CkBAIC02MTIsNyArNjEzLDcgQEAgcHVibGljOgogICAgICAgICBzdGF0aWMgRW5j
b2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBzbG93Q2FsbChFeGVjU3RhdGUqIGV4ZWMsIHZvaWQq
IHBvaW50ZXIpCiAgICAgICAgIHsKICAgICAgICAgICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0g
ICAgICAgICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAg
ICAgICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoc3RhdGljX2Nhc3Q8RE9NSklUR2V0
dGVyKj4ocG9pbnRlciktPnZhbHVlKCkpKTsKICAgICAgICAgfQogCkBAIC02NTEsNyArNjUyLDcg
QEAgdm9pZCBET01KSVRHZXR0ZXI6OmZpbmlzaENyZWF0aW9uKFZNJiB2bQogICAgIEJhc2U6OmZp
bmlzaENyZWF0aW9uKHZtKTsKICAgICBjb25zdCBET01KSVQ6OkdldHRlclNldHRlciogZG9tSklU
ID0gJkRPTUpJVEdldHRlckRPTUpJVDsKICAgICBhdXRvKiBjdXN0b21HZXR0ZXJTZXR0ZXIgPSBE
T01BdHRyaWJ1dGVHZXR0ZXJTZXR0ZXI6OmNyZWF0ZSh2bSwgZG9tSklULT5nZXR0ZXIoKSwgbnVs
bHB0ciwgRE9NQXR0cmlidXRlQW5ub3RhdGlvbiB7IERPTUpJVE5vZGU6OmluZm8oKSwgZG9tSklU
IH0pOwotICAgIHB1dERpcmVjdEN1c3RvbUFjY2Vzc29yKHZtLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKCZ2bSwgImN1c3RvbUdldHRlciIpLCBjdXN0b21HZXR0ZXJTZXR0ZXIsIFByb3BlcnR5QXR0
cmlidXRlOjpSZWFkT25seSB8IFByb3BlcnR5QXR0cmlidXRlOjpDdXN0b21BY2Nlc3Nvcik7Cisg
ICAgcHV0RGlyZWN0Q3VzdG9tQWNjZXNzb3Iodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0s
ICJjdXN0b21HZXR0ZXIiKSwgY3VzdG9tR2V0dGVyU2V0dGVyLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6
UmVhZE9ubHkgfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tQWNjZXNzb3IpOwogfQogCiBjbGFz
cyBET01KSVRHZXR0ZXJDb21wbGV4IDogcHVibGljIERPTUpJVE5vZGUgewpAQCAtNjk1LDcgKzY5
Niw3IEBAIHB1YmxpYzoKICAgICAgICAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJ
T04gc2xvd0NhbGwoRXhlY1N0YXRlKiBleGVjLCB2b2lkKiBwb2ludGVyKQogICAgICAgICB7CiAg
ICAgICAgICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgICAgICAgICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgICAgICAgICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CiAgICAgICAgICAgICBhdXRvKiBvYmplY3QgPSBzdGF0aWNfY2Fz
dDxET01KSVROb2RlKj4ocG9pbnRlcik7CiAgICAgICAgICAgICBhdXRvKiBkb21qaXRHZXR0ZXJD
b21wbGV4ID0ganNEeW5hbWljQ2FzdDxET01KSVRHZXR0ZXJDb21wbGV4Kj4odm0sIG9iamVjdCk7
CkBAIC03NjEsOCArNzYyLDggQEAgdm9pZCBET01KSVRHZXR0ZXJDb21wbGV4OjpmaW5pc2hDcmVh
dGlvbgogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBjb25zdCBET01KSVQ6Okdl
dHRlclNldHRlciogZG9tSklUID0gJkRPTUpJVEdldHRlckNvbXBsZXhET01KSVQ7CiAgICAgYXV0
byogY3VzdG9tR2V0dGVyU2V0dGVyID0gRE9NQXR0cmlidXRlR2V0dGVyU2V0dGVyOjpjcmVhdGUo
dm0sIGRvbUpJVC0+Z2V0dGVyKCksIG51bGxwdHIsIERPTUF0dHJpYnV0ZUFubm90YXRpb24geyBE
T01KSVRHZXR0ZXJDb21wbGV4OjppbmZvKCksIGRvbUpJVCB9KTsKLSAgICBwdXREaXJlY3RDdXN0
b21BY2Nlc3Nvcih2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJjdXN0b21HZXR0ZXIi
KSwgY3VzdG9tR2V0dGVyU2V0dGVyLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBQcm9w
ZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tQWNjZXNzb3IpOwotICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0
aW9uKHZtLCBnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiZW5hYmxl
RXhjZXB0aW9uIiksIDAsIGZ1bmN0aW9uRW5hYmxlRXhjZXB0aW9uLCBOb0ludHJpbnNpYywgMCk7
CisgICAgcHV0RGlyZWN0Q3VzdG9tQWNjZXNzb3Iodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmco
dm0sICJjdXN0b21HZXR0ZXIiKSwgY3VzdG9tR2V0dGVyU2V0dGVyLCBQcm9wZXJ0eUF0dHJpYnV0
ZTo6UmVhZE9ubHkgfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tQWNjZXNzb3IpOworICAgIHB1
dERpcmVjdE5hdGl2ZUZ1bmN0aW9uKHZtLCBnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21T
dHJpbmcodm0sICJlbmFibGVFeGNlcHRpb24iKSwgMCwgZnVuY3Rpb25FbmFibGVFeGNlcHRpb24s
IE5vSW50cmluc2ljLCAwKTsKIH0KIAogY2xhc3MgRE9NSklURnVuY3Rpb25PYmplY3QgOiBwdWJs
aWMgRE9NSklUTm9kZSB7CkBAIC04MDMsNyArODA0LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBF
bmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIGZ1bmN0aW9uV2l0aG91dFR5cGVDaGVjayhFeGVj
U3RhdGUqIGV4ZWMsIERPTUpJVE5vZGUqIG5vZGUpCiAgICAgewogICAgICAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOwotICAgICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhl
Yyk7CisgICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKG5vZGUtPnZhbHVlKCkpKTsKICAg
ICB9CiAKQEAgLTgzMyw3ICs4MzQsNyBAQCBzdGF0aWMgY29uc3QgRE9NSklUOjpTaWduYXR1cmUg
RE9NSklURnVuCiB2b2lkIERPTUpJVEZ1bmN0aW9uT2JqZWN0OjpmaW5pc2hDcmVhdGlvbihWTSYg
dm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3Jl
YXRpb24odm0pOwotICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9uKHZtLCBnbG9iYWxPYmplY3Qs
IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiZnVuYyIpLCAwLCBmdW5jdGlvbldpdGhUeXBl
Q2hlY2ssIE5vSW50cmluc2ljLCAmRE9NSklURnVuY3Rpb25PYmplY3RTaWduYXR1cmUsIHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpKTsKKyAgICBwdXRE
aXJlY3ROYXRpdmVGdW5jdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKHZtLCAiZnVuYyIpLCAwLCBmdW5jdGlvbldpdGhUeXBlQ2hlY2ssIE5vSW50cmluc2ljLCAm
RE9NSklURnVuY3Rpb25PYmplY3RTaWduYXR1cmUsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9w
ZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpKTsKIH0KIAogY2xhc3MgRE9NSklUQ2hlY2tTdWJDbGFz
c09iamVjdCA6IHB1YmxpYyBET01KSVROb2RlIHsKQEAgLTg3NCw3ICs4NzUsNyBAQCBwdWJsaWM6
CiAgICAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gZnVuY3Rpb25XaXRob3V0
VHlwZUNoZWNrKEV4ZWNTdGF0ZSogZXhlYywgRE9NSklUTm9kZSogbm9kZSkKICAgICB7CiAgICAg
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIoJnZtLCBleGVjKTsKKyAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2
bSwgZXhlYyk7CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIobm9kZS0+
dmFsdWUoKSkpOwogICAgIH0KIApAQCAtODg3LDcgKzg4OCw3IEBAIHN0YXRpYyBjb25zdCBET01K
SVQ6OlNpZ25hdHVyZSBET01KSVRDaGUKIHZvaWQgRE9NSklUQ2hlY2tTdWJDbGFzc09iamVjdDo6
ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogewog
ICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKLSAgICBwdXREaXJlY3ROYXRpdmVGdW5jdGlv
bih2bSwgZ2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImZ1bmMiKSwg
MCwgZnVuY3Rpb25XaXRoVHlwZUNoZWNrLCBOb0ludHJpbnNpYywgJkRPTUpJVENoZWNrU3ViQ2xh
c3NPYmplY3RTaWduYXR1cmUsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0
ZTo6UmVhZE9ubHkpKTsKKyAgICBwdXREaXJlY3ROYXRpdmVGdW5jdGlvbih2bSwgZ2xvYmFsT2Jq
ZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiZnVuYyIpLCAwLCBmdW5jdGlvbldpdGhU
eXBlQ2hlY2ssIE5vSW50cmluc2ljLCAmRE9NSklUQ2hlY2tTdWJDbGFzc09iamVjdFNpZ25hdHVy
ZSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSkpOwog
fQogCiBjbGFzcyBET01KSVRHZXR0ZXJCYXNlSlNPYmplY3QgOiBwdWJsaWMgRE9NSklUTm9kZSB7
CkBAIC05MzEsNyArOTMyLDcgQEAgcHVibGljOgogICAgICAgICBzdGF0aWMgRW5jb2RlZEpTVmFs
dWUgSklUX09QRVJBVElPTiBzbG93Q2FsbChFeGVjU3RhdGUqIGV4ZWMsIHZvaWQqIHBvaW50ZXIp
CiAgICAgICAgIHsKICAgICAgICAgICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgICAgICAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgICAgICAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICAgICAgICAgIEpTT2Jq
ZWN0KiBvYmplY3QgPSBzdGF0aWNfY2FzdDxKU09iamVjdCo+KHBvaW50ZXIpOwogICAgICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShvYmplY3QtPmdldFByb3RvdHlwZURpcmVjdCh2bSkp
OwogICAgICAgICB9CkBAIC05NzEsNyArOTcyLDcgQEAgdm9pZCBET01KSVRHZXR0ZXJCYXNlSlNP
YmplY3Q6OmZpbmlzaENyZQogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBjb25z
dCBET01KSVQ6OkdldHRlclNldHRlciogZG9tSklUID0gJkRPTUpJVEdldHRlckJhc2VKU09iamVj
dERPTUpJVDsKICAgICBhdXRvKiBjdXN0b21HZXR0ZXJTZXR0ZXIgPSBET01BdHRyaWJ1dGVHZXR0
ZXJTZXR0ZXI6OmNyZWF0ZSh2bSwgZG9tSklULT5nZXR0ZXIoKSwgbnVsbHB0ciwgRE9NQXR0cmli
dXRlQW5ub3RhdGlvbiB7IEpTT2JqZWN0OjppbmZvKCksIGRvbUpJVCB9KTsKLSAgICBwdXREaXJl
Y3RDdXN0b21BY2Nlc3Nvcih2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJjdXN0b21H
ZXR0ZXIiKSwgY3VzdG9tR2V0dGVyU2V0dGVyLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkg
fCBQcm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tQWNjZXNzb3IpOworICAgIHB1dERpcmVjdEN1c3Rv
bUFjY2Vzc29yKHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiY3VzdG9tR2V0dGVyIiks
IGN1c3RvbUdldHRlclNldHRlciwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgUHJvcGVy
dHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yKTsKIH0KIAogY2xhc3MgTWVzc2FnZSA6IHB1Ymxp
YyBUaHJlYWRTYWZlUmVmQ291bnRlZDxNZXNzYWdlPiB7CkBAIC0xMDM1LDcgKzEwMzYsNyBAQCBz
dGF0aWMgYm9vbCBjdXN0b21TZXRBY2Nlc3NvcihFeGVjU3RhdGUqCiAgICAgUkVMRUFTRV9BU1NF
UlQodmFsdWUuaXNPYmplY3QoKSk7CiAgICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KHZh
bHVlKTsKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChvYmplY3QpOwotICAgIG9iamVjdC0+cHV0
KG9iamVjdCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJyZXN1bHQiKSwgSlNW
YWx1ZTo6ZGVjb2RlKHRoaXNPYmplY3QpLCBzbG90KTsKKyAgICBvYmplY3QtPnB1dChvYmplY3Qs
IGV4ZWMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJyZXN1bHQiKSwgSlNWYWx1ZTo6ZGVj
b2RlKHRoaXNPYmplY3QpLCBzbG90KTsKIAogICAgIHJldHVybiB0cnVlOwogfQpAQCAtMTA1MCw3
ICsxMDUxLDcgQEAgc3RhdGljIGJvb2wgY3VzdG9tU2V0VmFsdWUoRXhlY1N0YXRlKiBleAogICAg
IFJFTEVBU0VfQVNTRVJUKHZhbHVlLmlzT2JqZWN0KCkpOwogICAgIEpTT2JqZWN0KiBvYmplY3Qg
PSBhc09iamVjdCh2YWx1ZSk7CiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3Qob2JqZWN0KTsKLSAg
ICBvYmplY3QtPnB1dChvYmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAi
cmVzdWx0IiksIEpTVmFsdWU6OmRlY29kZShzbG90VmFsdWUpLCBzbG90KTsKKyAgICBvYmplY3Qt
PnB1dChvYmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJyZXN1bHQiKSwg
SlNWYWx1ZTo6ZGVjb2RlKHNsb3RWYWx1ZSksIHNsb3QpOwogCiAgICAgcmV0dXJuIHRydWU7CiB9
CkBAIC0xMDU5LDkgKzEwNjAsOSBAQCB2b2lkIEpTVGVzdEN1c3RvbUdldHRlclNldHRlcjo6Zmlu
aXNoQ3JlCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogCi0gICAgcHV0RGlyZWN0
Q3VzdG9tQWNjZXNzb3Iodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiY3VzdG9tVmFs
dWUiKSwKKyAgICBwdXREaXJlY3RDdXN0b21BY2Nlc3Nvcih2bSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZyh2bSwgImN1c3RvbVZhbHVlIiksCiAgICAgICAgIEN1c3RvbUdldHRlclNldHRlcjo6Y3Jl
YXRlKHZtLCBjdXN0b21HZXRWYWx1ZSwgY3VzdG9tU2V0VmFsdWUpLCAwKTsKLSAgICBwdXREaXJl
Y3RDdXN0b21BY2Nlc3Nvcih2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJjdXN0b21B
Y2Nlc3NvciIpLAorICAgIHB1dERpcmVjdEN1c3RvbUFjY2Vzc29yKHZtLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCAiY3VzdG9tQWNjZXNzb3IiKSwKICAgICAgICAgQ3VzdG9tR2V0dGVyU2V0
dGVyOjpjcmVhdGUodm0sIGN1c3RvbUdldEFjY2Vzc29yLCBjdXN0b21TZXRBY2Nlc3NvciksIHN0
YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tQWNjZXNzb3IpKTsK
IH0KIApAQCAtMTEzOCw4ICsxMTM5LDggQEAgcHVibGljOgogICAgICAgICBCYXNlOjpmaW5pc2hD
cmVhdGlvbih2bSk7CiAKICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHRo
aXMtPmdsb2JhbE9iamVjdCh2bSk7Ci0gICAgICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9uKHZt
LCBnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiYWRkQnl0ZXMiKSwg
MCwgZnVuY3Rpb25XYXNtU3RyZWFtaW5nUGFyc2VyQWRkQnl0ZXMsIE5vSW50cmluc2ljLCBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7Ci0gICAgICAg
IHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9uKHZtLCBnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZy
b21TdHJpbmcoJnZtLCAiZmluYWxpemUiKSwgMCwgZnVuY3Rpb25XYXNtU3RyZWFtaW5nUGFyc2Vy
RmluYWxpemUsIE5vSW50cmluc2ljLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRy
aWJ1dGU6OkRvbnRFbnVtKSk7CisgICAgICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9uKHZtLCBn
bG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJhZGRCeXRlcyIpLCAwLCBm
dW5jdGlvbldhc21TdHJlYW1pbmdQYXJzZXJBZGRCeXRlcywgTm9JbnRyaW5zaWMsIHN0YXRpY19j
YXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKKyAgICAgICAgcHV0
RGlyZWN0TmF0aXZlRnVuY3Rpb24odm0sIGdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZyh2bSwgImZpbmFsaXplIiksIDAsIGZ1bmN0aW9uV2FzbVN0cmVhbWluZ1BhcnNlckZpbmFs
aXplLCBOb0ludHJpbnNpYywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRl
OjpEb250RW51bSkpOwogICAgIH0KIAogICAgIERFQ0xBUkVfSU5GTzsKQEAgLTEzMzAsNyArMTMz
MSw3IEBAIHN0YXRpYyBGdW5jdGlvbkV4ZWN1dGFibGUqIGdldEV4ZWN1dGFibGUKICAgICBpZiAo
IXRoZUZ1bmN0aW9uVmFsdWUuaXNDZWxsKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAg
IAotICAgIFZNJiB2bSA9ICp0aGVGdW5jdGlvblZhbHVlLmFzQ2VsbCgpLT52bSgpOworICAgIFZN
JiB2bSA9IHRoZUZ1bmN0aW9uVmFsdWUuYXNDZWxsKCktPnZtKCk7CiAgICAgSlNGdW5jdGlvbiog
dGhlRnVuY3Rpb24gPSBqc0R5bmFtaWNDYXN0PEpTRnVuY3Rpb24qPih2bSwgdGhlRnVuY3Rpb25W
YWx1ZSk7CiAgICAgaWYgKCF0aGVGdW5jdGlvbikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBA
IC0xNDk4LDcgKzE0OTksNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBm
dW5jCiAgICAgV1RGOjpTdHJpbmdQcmludFN0cmVhbSBzdHJlYW07CiAgICAgaWYgKGNvZGVCbG9j
aykgewogICAgICAgICBzdHJlYW0ucHJpbnQoKmNvZGVCbG9jayk7Ci0gICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNTdHJpbmcoZXhlYywgc3RyZWFtLnRvU3RyaW5nKCkpKTsKKyAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyhleGVjLT52bSgpLCBzdHJlYW0udG9T
dHJpbmcoKSkpOwogICAgIH0KICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwogfQpAQCAtMTYzMSw3ICsxNjMyLDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZnVuYwogCiAgICAgV1RGOjpTdHJpbmdQcmludFN0cmVhbSBzdHJlYW07CiAgICAg
c3RyZWFtLnByaW50KEluZGV4aW5nVHlwZUR1bXAoZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCku
Z2V0T2JqZWN0KCktPmluZGV4aW5nTW9kZSgpKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1N0cmluZyhleGVjLCBzdHJlYW0udG9TdHJpbmcoKSkpOworICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNTdHJpbmcoZXhlYy0+dm0oKSwgc3RyZWFtLnRvU3RyaW5nKCkpKTsKIH0KIAog
c3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25JbmxpbmVDYXBhY2l0
eShFeGVjU3RhdGUqIGV4ZWMpCkBAIC0xNjU0LDcgKzE2NTUsNyBAQCBzdGF0aWMgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jCiAgICAgICAgIHN0cmVhbS5wcmludChleGVjLT51bmNo
ZWNrZWRBcmd1bWVudChpKSk7CiAgICAgfQogICAgIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNTdHJpbmcoZXhlYywgc3RyZWFtLnRvU3RyaW5nKCkpKTsKKyAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzU3RyaW5nKGV4ZWMtPnZtKCksIHN0cmVhbS50b1N0cmluZygpKSk7CiB9CiAK
IC8vIEdldHMgdGhlIHBpZCBvZiB0aGUgY3VycmVudCBwcm9jZXNzLgpAQCAtMTg2MCw3ICsxODYx
LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuYwogICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogCiAgICAgY29uc3QgU291
cmNlQ29kZSYgc291cmNlID0gbWFrZVNvdXJjZShmdW5jdGlvblRleHQsIHsgfSk7Ci0gICAgSlNG
dW5jdGlvbiogZnVuYyA9IEpTRnVuY3Rpb246OmNyZWF0ZSh2bSwgY3JlYXRlQnVpbHRpbkV4ZWN1
dGFibGUodm0sIHNvdXJjZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJmb28iKSwgQ29u
c3RydWN0b3JLaW5kOjpOb25lLCBDb25zdHJ1Y3RBYmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3QpLT5s
aW5rKHZtLCBudWxscHRyLCBzb3VyY2UpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpOwor
ICAgIEpTRnVuY3Rpb24qIGZ1bmMgPSBKU0Z1bmN0aW9uOjpjcmVhdGUodm0sIGNyZWF0ZUJ1aWx0
aW5FeGVjdXRhYmxlKHZtLCBzb3VyY2UsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJmb28i
KSwgQ29uc3RydWN0b3JLaW5kOjpOb25lLCBDb25zdHJ1Y3RBYmlsaXR5OjpDYW5ub3RDb25zdHJ1
Y3QpLT5saW5rKHZtLCBudWxscHRyLCBzb3VyY2UpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCkpOwogCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShmdW5jKTsKIH0KQEAgLTE4NzUsNyAr
MTg3Niw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmMKIAogICAg
IFN0cmluZyBzdHIgPSBhc1N0cmluZyhleGVjLT5hcmd1bWVudCgxKSktPnZhbHVlKGV4ZWMpOwog
Ci0gICAgU3ltYm9sSW1wbCogc3ltYm9sID0gdm0ucHJvcGVydHlOYW1lcy0+bG9va1VwUHJpdmF0
ZU5hbWUoSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCBzdHIpKTsKKyAgICBTeW1ib2xJbXBs
KiBzeW1ib2wgPSB2bS5wcm9wZXJ0eU5hbWVzLT5sb29rVXBQcml2YXRlTmFtZShJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKHZtLCBzdHIpKTsKICAgICBpZiAoIXN5bWJvbCkKICAgICAgICAgcmV0dXJu
IHRocm93Vk1FcnJvcihleGVjLCBzY29wZSwgIlVua25vd24gcHJpdmF0ZSBuYW1lLiIpOwogCkBA
IC0yMjI5LDEzICsyMjMwLDEzIEBAIHZvaWQgSlNEb2xsYXJWTTo6ZmluaXNoQ3JlYXRpb24oVk0m
IHZtKQogICAgIGFkZEZ1bmN0aW9uKHZtLCAiY3Jhc2giLCBmdW5jdGlvbkNyYXNoLCAwKTsKICAg
ICBhZGRGdW5jdGlvbih2bSwgImJyZWFrcG9pbnQiLCBmdW5jdGlvbkJyZWFrcG9pbnQsIDApOwog
Ci0gICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rpb24odm0sIGdsb2JhbE9iamVjdCwgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZygmdm0sICJkZmdUcnVlIiksIDAsIGZ1bmN0aW9uREZHVHJ1ZSwgREZHVHJ1
ZUludHJpbnNpYywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250
RW51bSkpOwotICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9uKHZtLCBnbG9iYWxPYmplY3QsIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiZnRsVHJ1ZSIpLCAwLCBmdW5jdGlvbkZUTFRydWUs
IEZUTFRydWVJbnRyaW5zaWMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0
ZTo6RG9udEVudW0pKTsKKyAgICBwdXREaXJlY3ROYXRpdmVGdW5jdGlvbih2bSwgZ2xvYmFsT2Jq
ZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiZGZnVHJ1ZSIpLCAwLCBmdW5jdGlvbkRG
R1RydWUsIERGR1RydWVJbnRyaW5zaWMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0
dHJpYnV0ZTo6RG9udEVudW0pKTsKKyAgICBwdXREaXJlY3ROYXRpdmVGdW5jdGlvbih2bSwgZ2xv
YmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiZnRsVHJ1ZSIpLCAwLCBmdW5j
dGlvbkZUTFRydWUsIEZUTFRydWVJbnRyaW5zaWMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9w
ZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKIAotICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9u
KHZtLCBnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiY3B1TWZlbmNl
IiksIDAsIGZ1bmN0aW9uQ3B1TWZlbmNlLCBDUFVNZmVuY2VJbnRyaW5zaWMsIDApOwotICAgIHB1
dERpcmVjdE5hdGl2ZUZ1bmN0aW9uKHZtLCBnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21T
dHJpbmcoJnZtLCAiY3B1UmR0c2MiKSwgMCwgZnVuY3Rpb25DcHVSZHRzYywgQ1BVUmR0c2NJbnRy
aW5zaWMsIDApOwotICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9uKHZtLCBnbG9iYWxPYmplY3Qs
IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiY3B1Q3B1aWQiKSwgMCwgZnVuY3Rpb25DcHVD
cHVpZCwgQ1BVQ3B1aWRJbnRyaW5zaWMsIDApOwotICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9u
KHZtLCBnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiY3B1UGF1c2Ui
KSwgMCwgZnVuY3Rpb25DcHVQYXVzZSwgQ1BVUGF1c2VJbnRyaW5zaWMsIDApOworICAgIHB1dERp
cmVjdE5hdGl2ZUZ1bmN0aW9uKHZtLCBnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJp
bmcodm0sICJjcHVNZmVuY2UiKSwgMCwgZnVuY3Rpb25DcHVNZmVuY2UsIENQVU1mZW5jZUludHJp
bnNpYywgMCk7CisgICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rpb24odm0sIGdsb2JhbE9iamVjdCwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImNwdVJkdHNjIiksIDAsIGZ1bmN0aW9uQ3B1UmR0
c2MsIENQVVJkdHNjSW50cmluc2ljLCAwKTsKKyAgICBwdXREaXJlY3ROYXRpdmVGdW5jdGlvbih2
bSwgZ2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiY3B1Q3B1aWQiKSwg
MCwgZnVuY3Rpb25DcHVDcHVpZCwgQ1BVQ3B1aWRJbnRyaW5zaWMsIDApOworICAgIHB1dERpcmVj
dE5hdGl2ZUZ1bmN0aW9uKHZtLCBnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmco
dm0sICJjcHVQYXVzZSIpLCAwLCBmdW5jdGlvbkNwdVBhdXNlLCBDUFVQYXVzZUludHJpbnNpYywg
MCk7CiAgICAgYWRkRnVuY3Rpb24odm0sICJjcHVDbGZsdXNoIiwgZnVuY3Rpb25DcHVDbGZsdXNo
LCAyKTsKIAogICAgIGFkZEZ1bmN0aW9uKHZtLCAibGxpbnRUcnVlIiwgZnVuY3Rpb25MTGludFRy
dWUsIDApOwpAQCAtMjMzNCwxMyArMjMzNSwxMyBAQCB2b2lkIEpTRG9sbGFyVk06OmZpbmlzaENy
ZWF0aW9uKFZNJiB2bSkKIAogdm9pZCBKU0RvbGxhclZNOjphZGRGdW5jdGlvbihWTSYgdm0sIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IGNoYXIqIG5hbWUsIE5hdGl2ZUZ1bmN0
aW9uIGZ1bmN0aW9uLCB1bnNpZ25lZCBhcmd1bWVudHMpCiB7Ci0gICAgSWRlbnRpZmllciBpZGVu
dGlmaWVyID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIG5hbWUpOworICAgIElkZW50aWZp
ZXIgaWRlbnRpZmllciA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIG5hbWUpOwogICAgIHB1
dERpcmVjdCh2bSwgaWRlbnRpZmllciwgSlNGdW5jdGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmpl
Y3QsIGFyZ3VtZW50cywgaWRlbnRpZmllci5zdHJpbmcoKSwgZnVuY3Rpb24pKTsKIH0KIAogdm9p
ZCBKU0RvbGxhclZNOjphZGRDb25zdHJ1Y3RpYmxlRnVuY3Rpb24oVk0mIHZtLCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBjaGFyKiBuYW1lLCBOYXRpdmVGdW5jdGlvbiBmdW5j
dGlvbiwgdW5zaWduZWQgYXJndW1lbnRzKQogewotICAgIElkZW50aWZpZXIgaWRlbnRpZmllciA9
IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCBuYW1lKTsKKyAgICBJZGVudGlmaWVyIGlkZW50
aWZpZXIgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBuYW1lKTsKICAgICBwdXREaXJlY3Qo
dm0sIGlkZW50aWZpZXIsIEpTRnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBhcmd1
bWVudHMsIGlkZW50aWZpZXIuc3RyaW5nKCksIGZ1bmN0aW9uLCBOb0ludHJpbnNpYywgZnVuY3Rp
b24pKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1ZNSW5zcGVjdG9y
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvVk1JbnNwZWN0
b3IuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMv
Vk1JbnNwZWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNzQsNyArMzc0LDcgQEAgdm9pZCBW
TUluc3BlY3Rvcjo6ZHVtcFJlZ2lzdGVycyhDYWxsRnJhbQogICAgICAgICBkYXRhTG9nKCJEdW1w
aW5nIGhvc3QgZnJhbWUgcmVnaXN0ZXJzIG5vdCBzdXBwb3J0ZWQuXG4iKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KLSAgICBWTSYgdm0gPSAqY29kZUJsb2NrLT52bSgpOworICAgIFZNJiB2bSA9
IGNvZGVCbG9jay0+dm0oKTsKICAgICBhdXRvIHZhbHVlQXNTdHJpbmcgPSBbJl0gKEpTVmFsdWUg
dikgLT4gQ1N0cmluZyB7CiAgICAgICAgIGlmICghdi5pc0NlbGwoKSB8fCBWTUluc3BlY3Rvcjo6
aXNWYWxpZENlbGwoJnZtLmhlYXAsIHJlaW50ZXJwcmV0X2Nhc3Q8SlNDZWxsKj4oSlNWYWx1ZTo6
ZW5jb2RlKHYpKSkpCiAgICAgICAgICAgICByZXR1cm4gdG9DU3RyaW5nKHYpOwpAQCAtNDk3LDcg
KzQ5Nyw3IEBAIHByaXZhdGU6CiAKIHZvaWQgVk1JbnNwZWN0b3I6OmR1bXBDZWxsTWVtb3J5VG9T
dHJlYW0oSlNDZWxsKiBjZWxsLCBQcmludFN0cmVhbSYgb3V0KQogewotICAgIFZNJiB2bSA9ICpj
ZWxsLT52bSgpOworICAgIFZNJiB2bSA9IGNlbGwtPnZtKCk7CiAgICAgU3RydWN0dXJlSUQgc3Ry
dWN0dXJlSUQgPSBjZWxsLT5zdHJ1Y3R1cmVJRCgpOwogICAgIFN0cnVjdHVyZSogc3RydWN0dXJl
ID0gY2VsbC0+c3RydWN0dXJlKHZtKTsKICAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlQW5k
TWlzYyA9IGNlbGwtPmluZGV4aW5nVHlwZUFuZE1pc2MoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21JbnN0YW5jZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUluc3RhbmNlLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUluc3RhbmNlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMTkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03
OSw3ICs3OSw3IEBAIHNpemVfdCBJbnN0YW5jZTo6ZXh0cmFNZW1vcnlBbGxvY2F0ZWQoKSAKIHZv
aWQgSW5zdGFuY2U6OnNldEdsb2JhbCh1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlKQogewogICAg
IEFTU0VSVChtX293bmVyKTsKLSAgICBtX2dsb2JhbHMuZ2V0KClbaV0uYW55cmVmLnNldCgqb3du
ZXI8SlNXZWJBc3NlbWJseUluc3RhbmNlPigpLT52bSgpLCBvd25lcjxKU1dlYkFzc2VtYmx5SW5z
dGFuY2U+KCksIHZhbHVlKTsKKyAgICBtX2dsb2JhbHMuZ2V0KClbaV0uYW55cmVmLnNldChvd25l
cjxKU1dlYkFzc2VtYmx5SW5zdGFuY2U+KCktPnZtKCksIG93bmVyPEpTV2ViQXNzZW1ibHlJbnN0
YW5jZT4oKSwgdmFsdWUpOwogfQogCiBKU1ZhbHVlIEluc3RhbmNlOjpnZXRGdW5jdGlvbldyYXBw
ZXIodW5zaWduZWQgaSkgY29uc3QKQEAgLTkzLDEwICs5MywxMCBAQCBKU1ZhbHVlIEluc3RhbmNl
OjpnZXRGdW5jdGlvbldyYXBwZXIodW5zCiB2b2lkIEluc3RhbmNlOjpzZXRGdW5jdGlvbldyYXBw
ZXIodW5zaWduZWQgaSwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBBU1NFUlQobV9vd25lcik7Ci0g
ICAgQVNTRVJUKHZhbHVlLmlzRnVuY3Rpb24oKm93bmVyPEpTV2ViQXNzZW1ibHlJbnN0YW5jZT4o
KS0+dm0oKSkpOworICAgIEFTU0VSVCh2YWx1ZS5pc0Z1bmN0aW9uKG93bmVyPEpTV2ViQXNzZW1i
bHlJbnN0YW5jZT4oKS0+dm0oKSkpOwogICAgIEFTU0VSVCghbV9mdW5jdGlvbldyYXBwZXJzLmNv
bnRhaW5zKGkpKTsKICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG93bmVyPEpTV2ViQXNzZW1i
bHlJbnN0YW5jZT4oKS0+Y2VsbExvY2soKSk7Ci0gICAgbV9mdW5jdGlvbldyYXBwZXJzLnNldChp
LCBXcml0ZUJhcnJpZXI8VW5rbm93bj4oKm93bmVyPEpTV2ViQXNzZW1ibHlJbnN0YW5jZT4oKS0+
dm0oKSwgb3duZXI8SlNXZWJBc3NlbWJseUluc3RhbmNlPigpLCB2YWx1ZSkpOworICAgIG1fZnVu
Y3Rpb25XcmFwcGVycy5zZXQoaSwgV3JpdGVCYXJyaWVyPFVua25vd24+KG93bmVyPEpTV2ViQXNz
ZW1ibHlJbnN0YW5jZT4oKS0+dm0oKSwgb3duZXI8SlNXZWJBc3NlbWJseUluc3RhbmNlPigpLCB2
YWx1ZSkpOwogICAgIEFTU0VSVChnZXRGdW5jdGlvbldyYXBwZXIoaSkgPT0gdmFsdWUpOwogfQog
CkBAIC0xNDMsNyArMTQzLDcgQEAgYm9vbCBzZXRXYXNtVGFibGVFbGVtZW50KEluc3RhbmNlKiBp
bnN0YQogICAgICAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKiB3YXNtRnVuY3Rpb247CiAgICAgICAg
IFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKiB3YXNtV3JhcHBlckZ1bmN0aW9uOwogCi0gICAg
ICAgIGlmIChpc1dlYkFzc2VtYmx5SG9zdEZ1bmN0aW9uKCppbnN0YW5jZS0+b3duZXI8SlNPYmpl
Y3Q+KCktPnZtKCksIHZhbHVlLCB3YXNtRnVuY3Rpb24sIHdhc21XcmFwcGVyRnVuY3Rpb24pKSB7
CisgICAgICAgIGlmIChpc1dlYkFzc2VtYmx5SG9zdEZ1bmN0aW9uKGluc3RhbmNlLT5vd25lcjxK
U09iamVjdD4oKS0+dm0oKSwgdmFsdWUsIHdhc21GdW5jdGlvbiwgd2FzbVdyYXBwZXJGdW5jdGlv
bikpIHsKICAgICAgICAgICAgIEFTU0VSVCghIXdhc21GdW5jdGlvbiB8fCAhIXdhc21XcmFwcGVy
RnVuY3Rpb24pOwogICAgICAgICAgICAgaWYgKHdhc21GdW5jdGlvbikKICAgICAgICAgICAgICAg
ICBpbnN0YW5jZS0+dGFibGUodGFibGVJbmRleCktPmFzRnVuY3JlZlRhYmxlKCktPnNldEZ1bmN0
aW9uKGluZGV4LCBqc0Nhc3Q8SlNPYmplY3QqPih2YWx1ZSksIHdhc21GdW5jdGlvbi0+aW1wb3J0
YWJsZUZ1bmN0aW9uKCksICZ3YXNtRnVuY3Rpb24tPmluc3RhbmNlKCktPmluc3RhbmNlKCkpOwpA
QCAtMTk2LDcgKzE5Niw3IEBAIGJvb2wgZG9XYXNtVGFibGVGaWxsKEluc3RhbmNlKiBpbnN0YW5j
ZSwKIEVuY29kZWRKU1ZhbHVlIGRvV2FzbVJlZkZ1bmMoSW5zdGFuY2UqIGluc3RhbmNlLCB1aW50
MzJfdCBpbmRleCkKIHsKICAgICBKU1ZhbHVlIHZhbHVlID0gaW5zdGFuY2UtPmdldEZ1bmN0aW9u
V3JhcHBlcihpbmRleCk7Ci0gICAgQVNTRVJUKHZhbHVlLmlzRnVuY3Rpb24oKmluc3RhbmNlLT5v
d25lcjxKU09iamVjdD4oKS0+dm0oKSkpOworICAgIEFTU0VSVCh2YWx1ZS5pc0Z1bmN0aW9uKGlu
c3RhbmNlLT5vd25lcjxKU09iamVjdD4oKS0+dm0oKSkpOwogICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUodmFsdWUpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
VGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21U
YWJsZS5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21UYWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE3LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE3LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNDksNyArMTQ5LDcgQEAgdm9pZCBU
YWJsZTo6c2V0KHVpbnQzMl90IGluZGV4LCBKU1ZhbHVlIAogICAgIFJFTEVBU0VfQVNTRVJUKGlz
QW55cmVmVGFibGUoKSk7CiAgICAgUkVMRUFTRV9BU1NFUlQobV9vd25lcik7CiAgICAgY2xlYXIo
aW5kZXgpOwotICAgIG1fanNWYWx1ZXMuZ2V0KClbaW5kZXggJiBtX21hc2tdLnNldCgqbV9vd25l
ci0+dm0oKSwgbV9vd25lciwgdmFsdWUpOworICAgIG1fanNWYWx1ZXMuZ2V0KClbaW5kZXggJiBt
X21hc2tdLnNldChtX293bmVyLT52bSgpLCBtX293bmVyLCB2YWx1ZSk7CiB9CiAKIEpTVmFsdWUg
VGFibGU6OmdldCh1aW50MzJfdCBpbmRleCkgY29uc3QKQEAgLTE5Myw3ICsxOTMsNyBAQCB2b2lk
IEZ1bmNSZWZUYWJsZTo6c2V0RnVuY3Rpb24odWludDMyX3QgCiAgICAgUkVMRUFTRV9BU1NFUlQo
bV9vd25lcik7CiAgICAgY2xlYXIoaW5kZXgpOwogICAgIGlmIChvcHRpb25hbFdyYXBwZXIpCi0g
ICAgICAgIG1fanNWYWx1ZXMuZ2V0KClbaW5kZXggJiBtX21hc2tdLnNldCgqbV9vd25lci0+dm0o
KSwgbV9vd25lciwgb3B0aW9uYWxXcmFwcGVyKTsKKyAgICAgICAgbV9qc1ZhbHVlcy5nZXQoKVtp
bmRleCAmIG1fbWFza10uc2V0KG1fb3duZXItPnZtKCksIG1fb3duZXIsIG9wdGlvbmFsV3JhcHBl
cik7CiAgICAgbV9pbXBvcnRhYmxlRnVuY3Rpb25zLmdldCgpW2luZGV4ICYgbV9tYXNrXSA9IGZ1
bmN0aW9uOwogICAgIG1faW5zdGFuY2VzLmdldCgpW2luZGV4ICYgbV9tYXNrXSA9IGluc3RhbmNl
OwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3Nl
bWJseS5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTV2ViQXNzZW1ibHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTk2LDggKzE5Niw4IEBA
IHN0YXRpYyB2b2lkIHJlc29sdmUoVk0mIHZtLCBFeGVjU3RhdGUqIGUKICAgICAgICAgcHJvbWlz
ZS0+cmVzb2x2ZShleGVjLCBtb2R1bGVSZWNvcmQpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIEpT
T2JqZWN0KiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjKTsKLSAgICAgICAgcmVz
dWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAibW9kdWxlIl9z
KSwgbW9kdWxlKTsKLSAgICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZy
b21TdHJpbmcoJnZtLCAiaW5zdGFuY2UiX3MpLCBpbnN0YW5jZSk7CisgICAgICAgIHJlc3VsdC0+
cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAibW9kdWxlIl9zKSwgbW9k
dWxlKTsKKyAgICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJp
bmcodm0sICJpbnN0YW5jZSJfcyksIGluc3RhbmNlKTsKICAgICAgICAgcHJvbWlzZS0+cmVzb2x2
ZShleGVjLCByZXN1bHQpOwogICAgIH0KICAgICBDTEVBUl9BTkRfUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgdm9pZCgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pT
V2ViQXNzZW1ibHlJbnN0YW5jZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcAkocmV2aXNpb24gMjQ5MTI4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjAwLDggKzIwMCw4IEBAIEpTV2ViQXNzZW1ibHlJbnN0YW5j
ZSogSlNXZWJBc3NlbWJseUluc3QKIAogICAgIC8vIEZvciBlYWNoIGltcG9ydCBpIGluIG1vZHVs
ZS5pbXBvcnRzOgogICAgIGZvciAoYXV0byYgaW1wb3J0IDogbW9kdWxlSW5mb3JtYXRpb24uaW1w
b3J0cykgewotICAgICAgICBJZGVudGlmaWVyIG1vZHVsZU5hbWUgPSBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKCZ2bSwgU3RyaW5nOjpmcm9tVVRGOChpbXBvcnQubW9kdWxlKSk7Ci0gICAgICAgIElk
ZW50aWZpZXIgZmllbGROYW1lID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIFN0cmluZzo6
ZnJvbVVURjgoaW1wb3J0LmZpZWxkKSk7CisgICAgICAgIElkZW50aWZpZXIgbW9kdWxlTmFtZSA9
IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIFN0cmluZzo6ZnJvbVVURjgoaW1wb3J0Lm1vZHVs
ZSkpOworICAgICAgICBJZGVudGlmaWVyIGZpZWxkTmFtZSA9IElkZW50aWZpZXI6OmZyb21TdHJp
bmcodm0sIFN0cmluZzo6ZnJvbVVURjgoaW1wb3J0LmZpZWxkKSk7CiAgICAgICAgIG1vZHVsZVJl
Y29yZC0+YXBwZW5kUmVxdWVzdGVkTW9kdWxlKG1vZHVsZU5hbWUpOwogICAgICAgICBtb2R1bGVS
ZWNvcmQtPmFkZEltcG9ydEVudHJ5KFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpJbXBvcnRFbnRy
eSB7CiAgICAgICAgICAgICBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6SW1wb3J0RW50cnlUeXBl
OjpTaW5nbGUsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XYXNtVG9KUy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2FzbVRvSlMu
Y3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9X
YXNtVG9KUy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkyLDE4ICs5MiwxOCBAQCBzdGF0aWMgRXhw
ZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFdhCiAgICAgICAgIGppdC5qdW1wVG9FeGNlcHRp
b25IYW5kbGVyKCp2bSk7CiAKICAgICAgICAgdm9pZCAoKnRocm93QmFkSTY0KShFeGVjU3RhdGUq
LCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqKSA9IFtdIChFeGVjU3RhdGUqIGV4ZWMsIEpTV2ViQXNz
ZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UpIC0+IHZvaWQgewotICAgICAgICAgICAgVk0qIHZtID0g
JmV4ZWMtPnZtKCk7CisgICAgICAgICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgICAgICAg
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAKICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KCp2bSk7Ci0gICAgICAgICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGlu
c3RhbmNlLT5nbG9iYWxPYmplY3QoKnZtKTsKLSAgICAgICAgICAgICAgICBhdXRvKiBlcnJvciA9
IEVycm9ySW5zdGFuY2U6OmNyZWF0ZShleGVjLCAqdm0sIGdsb2JhbE9iamVjdC0+ZXJyb3JTdHJ1
Y3R1cmUoRXJyb3JUeXBlOjpUeXBlRXJyb3IpLCAiaTY0IG5vdCBhbGxvd2VkIGFzIHJldHVybiB0
eXBlIG9yIGFyZ3VtZW50IHRvIGFuIGltcG9ydGVkIGZ1bmN0aW9uIl9zKTsKKyAgICAgICAgICAg
ICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICAgICAg
ICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gaW5zdGFuY2UtPmdsb2JhbE9i
amVjdCh2bSk7CisgICAgICAgICAgICAgICAgYXV0byogZXJyb3IgPSBFcnJvckluc3RhbmNlOjpj
cmVhdGUoZXhlYywgdm0sIGdsb2JhbE9iamVjdC0+ZXJyb3JTdHJ1Y3R1cmUoRXJyb3JUeXBlOjpU
eXBlRXJyb3IpLCAiaTY0IG5vdCBhbGxvd2VkIGFzIHJldHVybiB0eXBlIG9yIGFyZ3VtZW50IHRv
IGFuIGltcG9ydGVkIGZ1bmN0aW9uIl9zKTsKICAgICAgICAgICAgICAgICB0aHJvd0V4Y2VwdGlv
bihleGVjLCB0aHJvd1Njb3BlLCBlcnJvcik7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAg
IGdlbmVyaWNVbndpbmQodm0sIGV4ZWMpOwotICAgICAgICAgICAgQVNTRVJUKCEhdm0tPmNhbGxG
cmFtZUZvckNhdGNoKTsKKyAgICAgICAgICAgIEFTU0VSVCghIXZtLmNhbGxGcmFtZUZvckNhdGNo
KTsKICAgICAgICAgfTsKIAogICAgICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoaml0LCBHTE9C
QUxfVEhVTktfSUQsIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CkBAIC0yMjYsOSArMjI2LDkgQEAg
RXhwZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFdhc21FbnRyeQogCiAgICAgICAgIHVpbnQ2
NF90ICgqY2FsbEZ1bmMpKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgU2lnbmF0dXJlSW5kZXgsIHVp
bnQ2NF90KikgPQogICAgICAgICAgICAgW10gKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGNh
bGxlZSwgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXgsIHVpbnQ2NF90KiBidWZmZXIpIC0+
IHVpbnQ2NF90IHsgCi0gICAgICAgICAgICAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAg
ICAgICAgICAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICAgICAgICAgICAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLSAgICAgICAgICAgICAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7CisgICAgICAgICAgICAgICAgYXV0
byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgICAgICAgICAgICAg
Y29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUgPSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNp
Z25hdHVyZUluZGV4KTsKICAgICAgICAgICAgICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdz
OwogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgYXJnTnVtID0gMDsgYXJnTnVtIDwgc2ln
bmF0dXJlLmFyZ3VtZW50Q291bnQoKTsgKythcmdOdW0pIHsKQEAgLTI0NCw3ICsyNDQsNyBAQCBF
eHBlY3RlZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8V2FzbUVudHJ5CiAgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgY2FzZSBGdW5jcmVmOiB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBhcmcgPSBKU1ZhbHVlOjpkZWNvZGUoYnVmZmVyW2FyZ051bV0p
OwotICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGlzV2ViQXNzZW1ibHlIb3N0RnVuY3Rp
b24oKnZtLCBhcmcpIHx8IGFyZy5pc051bGwoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBB
U1NFUlQoaXNXZWJBc3NlbWJseUhvc3RGdW5jdGlvbih2bSwgYXJnKSB8fCBhcmcuaXNOdWxsKCkp
OwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAgICAgY2FzZSBBbnlyZWY6CkBAIC0yNjMsNyArMjYzLDcgQEAgRXhw
ZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFdhc21FbnRyeQogICAgICAgICAgICAgICAgIH0K
IAogICAgICAgICAgICAgICAgIENhbGxEYXRhIGNhbGxEYXRhOwotICAgICAgICAgICAgICAgIENh
bGxUeXBlIGNhbGxUeXBlID0gY2FsbGVlLT5tZXRob2RUYWJsZSgqdm0pLT5nZXRDYWxsRGF0YShj
YWxsZWUsIGNhbGxEYXRhKTsKKyAgICAgICAgICAgICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGNh
bGxlZS0+bWV0aG9kVGFibGUodm0pLT5nZXRDYWxsRGF0YShjYWxsZWUsIGNhbGxEYXRhKTsKICAg
ICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxsVHlwZSAhPSBDYWxsVHlwZTo6Tm9uZSk7
CiAgICAgICAgICAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBjYWxsKGV4ZWMsIGNhbGxlZSwgY2Fs
bFR5cGUsIGNhbGxEYXRhLCBqc1VuZGVmaW5lZCgpLCBhcmdzKTsKICAgICAgICAgICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIDApOwpAQCAtMjgyLDcgKzI4Miw3IEBAIEV4
cGVjdGVkPE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxXYXNtRW50cnkKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgY2FzZSBGdW5jcmVmOiB7CiAgICAgICAgICAgICAgICAgICAgIHJl
YWxSZXN1bHQgPSBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKLSAgICAgICAgICAgICAgICAgICAg
QVNTRVJUKHJlc3VsdC5pc0Z1bmN0aW9uKCp2bSkgfHwgcmVzdWx0LmlzTnVsbCgpKTsKKyAgICAg
ICAgICAgICAgICAgICAgQVNTRVJUKHJlc3VsdC5pc0Z1bmN0aW9uKHZtKSB8fCByZXN1bHQuaXNO
dWxsKCkpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgY2FzZSBBbnlyZWY6IHsKQEAgLTMxNywxMCArMzE3LDEwIEBAIEV4cGVj
dGVkPE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxXYXNtRW50cnkKICAgICAgICAgaml0LmNvcHlDYWxs
ZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtLT50b3BFbnRyeUZyYW1lKTsK
ICAgICAgICAgaml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFy
Z3VtZW50R1BSMCk7CiAgICAgICAgIHZvaWQgKCpkb1Vud2luZGluZykoRXhlY1N0YXRlKikgPSBb
XSAoRXhlY1N0YXRlKiBleGVjKSAtPiB2b2lkIHsKLSAgICAgICAgICAgIFZNKiB2bSA9ICZleGVj
LT52bSgpOworICAgICAgICAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICAgICAgICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgICAgICAgICAgZ2VuZXJp
Y1Vud2luZCh2bSwgZXhlYyk7Ci0gICAgICAgICAgICBBU1NFUlQoISF2bS0+Y2FsbEZyYW1lRm9y
Q2F0Y2gpOworICAgICAgICAgICAgQVNTRVJUKCEhdm0uY2FsbEZyYW1lRm9yQ2F0Y2gpOwogICAg
ICAgICB9OwogICAgICAgICBhdXRvIGV4Y2VwdGlvbkNhbGwgPSBqaXQuY2FsbChPcGVyYXRpb25Q
dHJUYWcpOwogICAgICAgICBqaXQuanVtcFRvRXhjZXB0aW9uSGFuZGxlcigqdm0pOwpAQCAtNTM2
LDcgKzUzNiw3IEBAIEV4cGVjdGVkPE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxXYXNtRW50cnkKICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93UGF0aDsKIAogICAgICAgICBpbnQzMl90
ICgqY29udmVydFRvSTMyKShFeGVjU3RhdGUqLCBKU1ZhbHVlKSA9IFtdIChFeGVjU3RhdGUqIGV4
ZWMsIEpTVmFsdWUgdikgLT4gaW50MzJfdCB7Ci0gICAgICAgICAgICBWTSogdm0gPSAmZXhlYy0+
dm0oKTsKKyAgICAgICAgICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgICAgICAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICAgICAgICAgIHJldHVybiB2
LnRvSW50MzIoZXhlYyk7CiAgICAgICAgIH07CkBAIC01NjUsNyArNTY1LDcgQEAgRXhwZWN0ZWQ8
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFdhc21FbnRyeQogICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1
bXBMaXN0IGRvbmU7CiAKICAgICAgICAgZmxvYXQgKCpjb252ZXJ0VG9GMzIpKEV4ZWNTdGF0ZSos
IEpTVmFsdWUpID0gW10gKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2KSAtPiBmbG9hdCB7Ci0g
ICAgICAgICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICAgICAgICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CiAgICAgICAgICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBl
eGVjKTsKICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4odi50b051bWJlcihl
eGVjKSk7CiAgICAgICAgIH07CkBAIC02MDAsNyArNjAwLDcgQEAgRXhwZWN0ZWQ8TWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPFdhc21FbnRyeQogICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IGRv
bmU7CiAKICAgICAgICAgZG91YmxlICgqY29udmVydFRvRjY0KShFeGVjU3RhdGUqLCBKU1ZhbHVl
KSA9IFtdIChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdikgLT4gZG91YmxlIHsKLSAgICAgICAg
ICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgICAgICAgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKICAgICAgICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwog
ICAgICAgICAgICAgcmV0dXJuIHYudG9OdW1iZXIoZXhlYyk7CiAgICAgICAgIH07CkBAIC02NDMs
MTAgKzY0MywxMCBAQCBFeHBlY3RlZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8V2FzbUVudHJ5CiAg
ICAgICAgIGppdC5qdW1wVG9FeGNlcHRpb25IYW5kbGVyKCp2bSk7CiAKICAgICAgICAgdm9pZCAo
KmRvVW53aW5kaW5nKShFeGVjU3RhdGUqKSA9IFtdIChFeGVjU3RhdGUqIGV4ZWMpIC0+IHZvaWQg
ewotICAgICAgICAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgICAgICAgICBWTSYgdm0g
PSBleGVjLT52bSgpOwogICAgICAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2
bSwgZXhlYyk7CiAgICAgICAgICAgICBnZW5lcmljVW53aW5kKHZtLCBleGVjKTsKLSAgICAgICAg
ICAgIEFTU0VSVCghIXZtLT5jYWxsRnJhbWVGb3JDYXRjaCk7CisgICAgICAgICAgICBBU1NFUlQo
ISF2bS5jYWxsRnJhbWVGb3JDYXRjaCk7CiAgICAgICAgIH07CiAKICAgICAgICAgaml0LmFkZExp
bmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewpAQCAtNjg3LDcgKzY4Nyw3IEBA
IHZvaWQqIHdhc21Ub0pTRXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYywKICAgICAgICAgdGhyb3dF
eGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgZXJyb3IpOwogICAgIH0KIAotICAgIGdlbmVyaWNV
bndpbmQoJnZtLCBleGVjKTsKKyAgICBnZW5lcmljVW53aW5kKHZtLCBleGVjKTsKICAgICBBU1NF
UlQoISF2bS5jYWxsRnJhbWVGb3JDYXRjaCk7CiAgICAgQVNTRVJUKCEhdm0udGFyZ2V0TWFjaGlu
ZVBDRm9yVGhyb3cpOwogICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBtYWtlIHRoaXMgYmV0dGVyOgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1i
bHlGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjEw
LDcgKzIxMCw3IEBAIFdhc206Okluc3RhbmNlKiBXZWJBc3NlbWJseUZ1bmN0aW9uOjpwcmUKIAog
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IFdlYkFzc2VtYmx5RnVuY3Rpb246
OmpzQ2FsbEVudHJ5cG9pbnRTbG93KCkKIHsKLSAgICBWTSYgdm0gPSAqdGhpcy0+dm0oKTsKKyAg
ICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBjb25z
dCBhdXRvJiBzaWduYXR1cmUgPSBXYXNtOjpTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25h
dHVyZUluZGV4KCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNz
ZW1ibHlNZW1vcnlDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNZW1vcnlDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9u
IDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TWVt
b3J5Q29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNi0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjUsNyArNjUsNyBAQCBzdGF0
aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zCiAKICAgICBXYXNtOjpQYWdlQ291
bnQgaW5pdGlhbFBhZ2VDb3VudDsKICAgICB7Ci0gICAgICAgIElkZW50aWZpZXIgaW5pdGlhbCA9
IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiaW5pdGlhbCIpOworICAgICAgICBJZGVudGlm
aWVyIGluaXRpYWwgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiaW5pdGlhbCIpOwogICAg
ICAgICBKU1ZhbHVlIG1pblNpemVWYWx1ZSA9IG1lbW9yeURlc2NyaXB0b3ItPmdldChleGVjLCBp
bml0aWFsKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVk
SlNWYWx1ZSgpKTsKICAgICAgICAgdWludDMyX3Qgc2l6ZSA9IHRvTm9uV3JhcHBpbmdVaW50MzIo
ZXhlYywgbWluU2l6ZVZhbHVlKTsKQEAgLTgxLDcgKzgxLDcgQEAgc3RhdGljIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgY29ucwogICAgIHsKICAgICAgICAgLy8gSW4gV2ViSURMLCAicHJl
c2VudCIgbWVhbnMgdGhhdCBbW0dldF1dIHJlc3VsdCBpcyB1bmRlZmluZWQsIG5vdCBbW0hhc1By
b3BlcnR5XV0gcmVzdWx0LgogICAgICAgICAvLyBodHRwczovL2hleWNhbS5naXRodWIuaW8vd2Vi
aWRsLyNpZGwtZGljdGlvbmFyaWVzCi0gICAgICAgIElkZW50aWZpZXIgbWF4aW11bSA9IElkZW50
aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAibWF4aW11bSIpOworICAgICAgICBJZGVudGlmaWVyIG1h
eGltdW0gPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAibWF4aW11bSIpOwogICAgICAgICBK
U1ZhbHVlIG1heFNpemVWYWx1ZSA9IG1lbW9yeURlc2NyaXB0b3ItPmdldChleGVjLCBtYXhpbXVt
KTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1
ZSgpKTsKICAgICAgICAgaWYgKCFtYXhTaXplVmFsdWUuaXNVbmRlZmluZWQoKSkgewpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rv
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNz
ZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3IuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0y
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
Ni0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMTE0LDE1ICsxMTQsMTUgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCB3ZWJBc3NlbWJseQogCiAgICAgY29uc3QgYXV0byYgaW1wb3J0cyA9IG1vZHVsZS0+
bW9kdWxlSW5mb3JtYXRpb24oKS5pbXBvcnRzOwogICAgIGlmIChpbXBvcnRzLnNpemUoKSkgewot
ICAgICAgICBJZGVudGlmaWVyIG1vZHVsZSA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywg
Im1vZHVsZSIpOwotICAgICAgICBJZGVudGlmaWVyIG5hbWUgPSBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKGV4ZWMsICJuYW1lIik7Ci0gICAgICAgIElkZW50aWZpZXIga2luZCA9IElkZW50aWZpZXI6
OmZyb21TdHJpbmcoZXhlYywgImtpbmQiKTsKKyAgICAgICAgSWRlbnRpZmllciBtb2R1bGUgPSBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAibW9kdWxlIik7CisgICAgICAgIElkZW50aWZpZXIg
bmFtZSA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJuYW1lIik7CisgICAgICAgIElkZW50
aWZpZXIga2luZCA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJraW5kIik7CiAgICAgICAg
IGZvciAoY29uc3QgV2FzbTo6SW1wb3J0JiBpbXAgOiBpbXBvcnRzKSB7CiAgICAgICAgICAgICBK
U09iamVjdCogb2JqID0gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYyk7CiAgICAgICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7Ci0gICAgICAgICAgICBvYmotPnB1
dERpcmVjdCh2bSwgbW9kdWxlLCBqc1N0cmluZyhleGVjLCBTdHJpbmc6OmZyb21VVEY4KGltcC5t
b2R1bGUpKSk7Ci0gICAgICAgICAgICBvYmotPnB1dERpcmVjdCh2bSwgbmFtZSwganNTdHJpbmco
ZXhlYywgU3RyaW5nOjpmcm9tVVRGOChpbXAuZmllbGQpKSk7Ci0gICAgICAgICAgICBvYmotPnB1
dERpcmVjdCh2bSwga2luZCwganNTdHJpbmcoZXhlYywgU3RyaW5nKG1ha2VTdHJpbmcoaW1wLmtp
bmQpKSkpOworICAgICAgICAgICAgb2JqLT5wdXREaXJlY3Qodm0sIG1vZHVsZSwganNTdHJpbmco
dm0sIFN0cmluZzo6ZnJvbVVURjgoaW1wLm1vZHVsZSkpKTsKKyAgICAgICAgICAgIG9iai0+cHV0
RGlyZWN0KHZtLCBuYW1lLCBqc1N0cmluZyh2bSwgU3RyaW5nOjpmcm9tVVRGOChpbXAuZmllbGQp
KSk7CisgICAgICAgICAgICBvYmotPnB1dERpcmVjdCh2bSwga2luZCwganNTdHJpbmcodm0sIFN0
cmluZyhtYWtlU3RyaW5nKGltcC5raW5kKSkpKTsKICAgICAgICAgICAgIHJlc3VsdC0+cHVzaChl
eGVjLCBvYmopOwogICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7
IH0pOwogICAgICAgICB9CkBAIC0xNDYsMTMgKzE0NiwxMyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIHdlYkFzc2VtYmx5CiAKICAgICBjb25zdCBhdXRvJiBleHBvcnRzID0gbW9kdWxl
LT5tb2R1bGVJbmZvcm1hdGlvbigpLmV4cG9ydHM7CiAgICAgaWYgKGV4cG9ydHMuc2l6ZSgpKSB7
Ci0gICAgICAgIElkZW50aWZpZXIgbmFtZSA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywg
Im5hbWUiKTsKLSAgICAgICAgSWRlbnRpZmllciBraW5kID0gSWRlbnRpZmllcjo6ZnJvbVN0cmlu
ZyhleGVjLCAia2luZCIpOworICAgICAgICBJZGVudGlmaWVyIG5hbWUgPSBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCAibmFtZSIpOworICAgICAgICBJZGVudGlmaWVyIGtpbmQgPSBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKHZtLCAia2luZCIpOwogICAgICAgICBmb3IgKGNvbnN0IFdhc206OkV4
cG9ydCYgZXhwIDogZXhwb3J0cykgewogICAgICAgICAgICAgSlNPYmplY3QqIG9iaiA9IGNvbnN0
cnVjdEVtcHR5T2JqZWN0KGV4ZWMpOwogICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCB7IH0pOwotICAgICAgICAgICAgb2JqLT5wdXREaXJlY3Qodm0sIG5hbWUsIGpz
U3RyaW5nKGV4ZWMsIFN0cmluZzo6ZnJvbVVURjgoZXhwLmZpZWxkKSkpOwotICAgICAgICAgICAg
b2JqLT5wdXREaXJlY3Qodm0sIGtpbmQsIGpzU3RyaW5nKGV4ZWMsIFN0cmluZyhtYWtlU3RyaW5n
KGV4cC5raW5kKSkpKTsKKyAgICAgICAgICAgIG9iai0+cHV0RGlyZWN0KHZtLCBuYW1lLCBqc1N0
cmluZyh2bSwgU3RyaW5nOjpmcm9tVVRGOChleHAuZmllbGQpKSk7CisgICAgICAgICAgICBvYmot
PnB1dERpcmVjdCh2bSwga2luZCwganNTdHJpbmcodm0sIFN0cmluZyhtYWtlU3RyaW5nKGV4cC5r
aW5kKSkpKTsKICAgICAgICAgICAgIHJlc3VsdC0+cHVzaChleGVjLCBvYmopOwogICAgICAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgICAgICB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1i
bHlNb2R1bGVSZWNvcmQuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTczLDcgKzczLDcgQEAgdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6ZmluaXNoQ3Jl
YQogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGV4ZWMsIHZtKTsKICAgICBBU1NFUlQoaW5oZXJp
dHModm0sIGluZm8oKSkpOwogICAgIGZvciAoY29uc3QgYXV0byYgZXhwIDogbW9kdWxlSW5mb3Jt
YXRpb24uZXhwb3J0cykgewotICAgICAgICBJZGVudGlmaWVyIGZpZWxkID0gSWRlbnRpZmllcjo6
ZnJvbVN0cmluZygmdm0sIFN0cmluZzo6ZnJvbVVURjgoZXhwLmZpZWxkKSk7CisgICAgICAgIElk
ZW50aWZpZXIgZmllbGQgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBTdHJpbmc6OmZyb21V
VEY4KGV4cC5maWVsZCkpOwogICAgICAgICBhZGRFeHBvcnRFbnRyeShFeHBvcnRFbnRyeTo6Y3Jl
YXRlTG9jYWwoZmllbGQsIGZpZWxkKSk7CiAgICAgfQogfQpAQCAtMTI2LDggKzEyNiw4IEBAIHZv
aWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmxpbmsoRXhlY1MKICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICB9CiAKLSAgICAgICAgSWRlbnRpZmllciBtb2R1bGVOYW1lID0gSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZygmdm0sIFN0cmluZzo6ZnJvbVVURjgoaW1wb3J0Lm1vZHVsZSkpOwot
ICAgICAgICBJZGVudGlmaWVyIGZpZWxkTmFtZSA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZt
LCBTdHJpbmc6OmZyb21VVEY4KGltcG9ydC5maWVsZCkpOworICAgICAgICBJZGVudGlmaWVyIG1v
ZHVsZU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBTdHJpbmc6OmZyb21VVEY4KGlt
cG9ydC5tb2R1bGUpKTsKKyAgICAgICAgSWRlbnRpZmllciBmaWVsZE5hbWUgPSBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKHZtLCBTdHJpbmc6OmZyb21VVEY4KGltcG9ydC5maWVsZCkpOwogICAgICAg
ICBKU1ZhbHVlIHZhbHVlOwogICAgICAgICBpZiAoY3JlYXRpb25Nb2RlID09IFdhc206OkNyZWF0
aW9uTW9kZTo6RnJvbUpTKSB7CiAgICAgICAgICAgICAvLyAxLiBMZXQgbyBiZSB0aGUgcmVzdWx0
YW50IHZhbHVlIG9mIHBlcmZvcm1pbmcgR2V0KGltcG9ydE9iamVjdCwgaS5tb2R1bGVfbmFtZSku
CkBAIC00NDEsNyArNDQxLDcgQEAgdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6bGluayhF
eGVjUwogICAgICAgICBib29sIHNob3VsZFRocm93UmVhZE9ubHlFcnJvciA9IGZhbHNlOwogICAg
ICAgICBib29sIGlnbm9yZVJlYWRPbmx5RXJyb3JzID0gdHJ1ZTsKICAgICAgICAgYm9vbCBwdXRS
ZXN1bHQgPSBmYWxzZTsKLSAgICAgICAgc3ltYm9sVGFibGVQdXRUb3VjaFdhdGNocG9pbnRTZXQo
bW9kdWxlRW52aXJvbm1lbnQsIGV4ZWMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCBTdHJp
bmc6OmZyb21VVEY4KGV4cC5maWVsZCkpLCBleHBvcnRlZFZhbHVlLCBzaG91bGRUaHJvd1JlYWRP
bmx5RXJyb3IsIGlnbm9yZVJlYWRPbmx5RXJyb3JzLCBwdXRSZXN1bHQpOworICAgICAgICBzeW1i
b2xUYWJsZVB1dFRvdWNoV2F0Y2hwb2ludFNldChtb2R1bGVFbnZpcm9ubWVudCwgZXhlYywgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgU3RyaW5nOjpmcm9tVVRGOChleHAuZmllbGQpKSwgZXhw
b3J0ZWRWYWx1ZSwgc2hvdWxkVGhyb3dSZWFkT25seUVycm9yLCBpZ25vcmVSZWFkT25seUVycm9y
cywgcHV0UmVzdWx0KTsKICAgICAgICAgc2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQocHV0UmVzdWx0KTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVRhYmxlQ29uc3RydWN0b3IuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5VGFibGVDb25z
dHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL1dlYkFzc2VtYmx5VGFibGVDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC02MCw3ICs2MCw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnMK
IAogICAgIFdhc206OlRhYmxlRWxlbWVudFR5cGUgdHlwZTsKICAgICB7Ci0gICAgICAgIElkZW50
aWZpZXIgZWxlbWVudElkZW50ID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJlbGVtZW50
Iik7CisgICAgICAgIElkZW50aWZpZXIgZWxlbWVudElkZW50ID0gSWRlbnRpZmllcjo6ZnJvbVN0
cmluZyh2bSwgImVsZW1lbnQiKTsKICAgICAgICAgSlNWYWx1ZSBlbGVtZW50VmFsdWUgPSBtZW1v
cnlEZXNjcmlwdG9yLT5nZXQoZXhlYywgZWxlbWVudElkZW50KTsKICAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICAgICAgU3RyaW5n
IGVsZW1lbnRTdHJpbmcgPSBlbGVtZW50VmFsdWUudG9XVEZTdHJpbmcoZXhlYyk7CkBAIC03Myw3
ICs3Myw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnMKICAgICAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dT
Y29wZSwgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJXZWJBc3NlbWJseS5UYWJsZSBleHBlY3RzIGl0
cyAnZWxlbWVudCcgZmllbGQgdG8gYmUgdGhlIHN0cmluZyAnZnVuY3JlZicgb3IgJ2FueXJlZici
X3MpKSk7CiAgICAgfQogCi0gICAgSWRlbnRpZmllciBpbml0aWFsSWRlbnQgPSBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKCZ2bSwgImluaXRpYWwiKTsKKyAgICBJZGVudGlmaWVyIGluaXRpYWxJZGVu
dCA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJpbml0aWFsIik7CiAgICAgSlNWYWx1ZSBp
bml0aWFsU2l6ZVZhbHVlID0gbWVtb3J5RGVzY3JpcHRvci0+Z2V0KGV4ZWMsIGluaXRpYWxJZGVu
dCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgp
KTsKICAgICB1aW50MzJfdCBpbml0aWFsID0gdG9Ob25XcmFwcGluZ1VpbnQzMihleGVjLCBpbml0
aWFsU2l6ZVZhbHVlKTsKQEAgLTgyLDcgKzgyLDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgY29ucwogICAgIC8vIEluIFdlYklETCwgInByZXNlbnQiIG1lYW5zIHRoYXQg
W1tHZXRdXSByZXN1bHQgaXMgdW5kZWZpbmVkLCBub3QgW1tIYXNQcm9wZXJ0eV1dIHJlc3VsdC4K
ICAgICAvLyBodHRwczovL2hleWNhbS5naXRodWIuaW8vd2ViaWRsLyNpZGwtZGljdGlvbmFyaWVz
CiAgICAgT3B0aW9uYWw8dWludDMyX3Q+IG1heGltdW07Ci0gICAgSWRlbnRpZmllciBtYXhpbXVt
SWRlbnQgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgIm1heGltdW0iKTsKKyAgICBJZGVu
dGlmaWVyIG1heGltdW1JZGVudCA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJtYXhpbXVt
Iik7CiAgICAgSlNWYWx1ZSBtYXhTaXplVmFsdWUgPSBtZW1vcnlEZXNjcmlwdG9yLT5nZXQoZXhl
YywgbWF4aW11bUlkZW50KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVu
Y29kZWRKU1ZhbHVlKCkpOwogICAgIGlmICghbWF4U2l6ZVZhbHVlLmlzVW5kZWZpbmVkKCkpIHsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU4MiBAQAorMjAxOS0wOC0yNyAgTWFyayBM
YW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAgUmVmYWN0b3IgdG8gdXNlIFZNJiBp
bnN0ZWFkIG9mIFZNKiBhdCBhcyBtYW55IHBsYWNlcyBhcyBwb3NzaWJsZS4KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMTE3MgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gIENvdmVy
ZWQgYnkgZXhpc3RpbmcgdGVzdHMuCisKKyAgICAgICAgKiBNb2R1bGVzL2VuY3J5cHRlZG1lZGlh
L2xlZ2FjeS9MZWdhY3lDRE1TZXNzaW9uQ2xlYXJLZXkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Q0RNU2Vzc2lvbkNsZWFyS2V5Ojp1cGRhdGUpOgorICAgICAgICAqIE1vZHVsZXMvcGx1Z2lucy9R
dWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudC5tbToKKyAgICAgICAgKFdlYkNvcmU6OlF1aWNrVGlt
ZVBsdWdpblJlcGxhY2VtZW50OjplbnN1cmVSZXBsYWNlbWVudFNjcmlwdEluamVjdGVkKToKKyAg
ICAgICAgKFdlYkNvcmU6OlF1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50OjppbnN0YWxsUmVwbGFj
ZW1lbnQpOgorICAgICAgICAqIGFuaW1hdGlvbi9LZXlmcmFtZUVmZmVjdC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpwcm9jZXNzS2V5ZnJhbWVMaWtlT2JqZWN0KToKKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9HQ0NvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R0NDb250cm9sbGVyOjpk
dW1wSGVhcCk6CisgICAgICAgICogYmluZGluZ3MvanMvSURCQmluZGluZ1V0aWxpdGllcy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpnZXQpOgorICAgICAgICAoV2ViQ29yZTo6c2V0KToKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9KU0NTU1J1bGVMaXN0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkpTQ1NTUnVsZUxpc3RPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMpOgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5Q3VzdG9tLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkpTQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5OjpkZWZpbmUpOgorICAgICAg
ICAqIGJpbmRpbmdzL2pzL0pTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkpTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyOjpsb29rdXBOYW1lc3BhY2VVUkkpOgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NQ29udmVydFJlY29yZC5oOgorICAgICAgICAqIGJpbmRp
bmdzL2pzL0pTRE9NQ29udmVydFN0cmluZ3MuaDoKKyAgICAgICAgKFdlYkNvcmU6OkpTQ29udmVy
dGVyPElETERPTVN0cmluZz46OmNvbnZlcnQpOgorICAgICAgICAoV2ViQ29yZTo6SlNDb252ZXJ0
ZXI8SURMQnl0ZVN0cmluZz46OmNvbnZlcnQpOgorICAgICAgICAoV2ViQ29yZTo6SlNDb252ZXJ0
ZXI8SURMVVNWU3RyaW5nPjo6Y29udmVydCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01X
aW5kb3dDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3c6OmdldE93blBy
b3BlcnR5U2xvdEJ5SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6YWRkU2NvcGVkQ2hpbGRyZW5J
bmRleGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93OjpkZWZpbmVPd25Qcm9wZXJ0
eSk6CisgICAgICAgIChXZWJDb3JlOjpEaWFsb2dIYW5kbGVyOjpkaWFsb2dDcmVhdGVkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpYWxvZ0hhbmRsZXI6OnJldHVyblZhbHVlIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkpTRE9NV2luZG93OjpzZXRPcGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6
SlNET01XaW5kb3c6OnNldE9wZW5EYXRhYmFzZSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNE
T01XaW5kb3dQcm9wZXJ0aWVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93UHJv
cGVydGllczo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleCk6CisgICAgICAgICogYmluZGluZ3Mv
anMvSlNEZXByZWNhdGVkQ1NTT01WYWx1ZUN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpK
U0RlcHJlY2F0ZWRDU1NPTVZhbHVlT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKToK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SlNFdmVudExpc3RlbmVyOjpoYW5kbGVFdmVudCk6CisgICAgICAgICogYmluZGluZ3Mv
anMvSlNJbWFnZURhdGFDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6dG9KU05ld2x5Q3Jl
YXRlZCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNMYXp5RXZlbnRMaXN0ZW5lci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpKU0xhenlFdmVudExpc3RlbmVyOjppbml0aWFsaXplSlNGdW5jdGlv
biBjb25zdCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNMb2NhdGlvbkN1c3RvbS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpKU0xvY2F0aW9uOjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KToK
KyAgICAgICAgKFdlYkNvcmU6OkpTTG9jYXRpb246OnB1dEJ5SW5kZXgpOgorICAgICAgICAqIGJp
bmRpbmdzL2pzL0pTTm9kZUxpc3RDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNOb2Rl
TGlzdE93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyk6CisgICAgICAgICogYmluZGlu
Z3MvanMvSlNQbHVnaW5FbGVtZW50RnVuY3Rpb25zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBs
dWdpbkVsZW1lbnRDdXN0b21HZXRDYWxsRGF0YSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNS
ZW1vdGVET01XaW5kb3dDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNSZW1vdGVET01X
aW5kb3c6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgpOgorICAgICAgICAqIGJpbmRpbmdzL2pz
L1JlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlcjo6aW52b2tlKToKKyAgICAgICAgKiBiaW5k
aW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENv
bnRyb2xsZXI6OmxpbmtBbmRFdmFsdWF0ZU1vZHVsZVNjcmlwdEluV29ybGQpOgorICAgICAgICAq
IGJpbmRpbmdzL2pzL1NjcmlwdE1vZHVsZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JpcHRNb2R1bGVMb2FkZXI6OnJlc29sdmUpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0TW9k
dWxlTG9hZGVyOjppbXBvcnRNb2R1bGUpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0TW9kdWxl
TG9hZGVyOjpjcmVhdGVJbXBvcnRNZXRhUHJvcGVydGllcyk6CisgICAgICAgICogYmluZGluZ3Mv
anMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNsb25lU2Vy
aWFsaXplcjo6Q2xvbmVTZXJpYWxpemVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNsb25lU2VyaWFs
aXplcjo6d3JpdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVTZXJpYWxpemVyOjpzZXJpYWxp
emUpOgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVEZXNlcmlhbGl6ZXI6OkNhY2hlZFN0cmluZzo6
anNTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVEZXNlcmlhbGl6ZXI6OnJlYWRUZXJt
aW5hbCk6CisgICAgICAgIChXZWJDb3JlOjpDbG9uZURlc2VyaWFsaXplcjo6ZGVzZXJpYWxpemUp
OgorICAgICAgICAqIGJpbmRpbmdzL2pzL1dlYkNvcmVCdWlsdGluTmFtZXMuaDoKKyAgICAgICAg
KFdlYkNvcmU6OldlYkNvcmVCdWlsdGluTmFtZXM6OldlYkNvcmVCdWlsdGluTmFtZXMpOgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL1dlYkNvcmVKU0NsaWVudERhdGEuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SlNWTUNsaWVudERhdGE6OkpTVk1DbGllbnREYXRhKToKKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9XaW5kb3dQcm94eS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXaW5kb3dQcm94eTo6Y2xl
YXJKU1dpbmRvd1Byb3hpZXNOb3RNYXRjaGluZ0RPTVdpbmRvdyk6CisgICAgICAgICogYmluZGlu
Z3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG06CisgICAgICAgIChHZW5lcmF0ZUdldE93blBy
b3BlcnR5U2xvdEJ5SW5kZXgpOgorICAgICAgICAoR2VuZXJhdGVHZXRPd25Qcm9wZXJ0eU5hbWVz
KToKKyAgICAgICAgKEdlbmVyYXRlUHV0QnlJbmRleCk6CisgICAgICAgIChHZW5lcmF0ZURlbGV0
ZVByb3BlcnR5QnlJbmRleCk6CisgICAgICAgIChHZW5lcmF0ZURpY3Rpb25hcnlJbXBsZW1lbnRh
dGlvbkNvbnRlbnQpOgorICAgICAgICAoYWRkVW5zY29wYWJsZVByb3BlcnRpZXMpOgorICAgICAg
ICAoR2VuZXJhdGVJbXBsZW1lbnRhdGlvbik6CisgICAgICAgIChHZW5lcmF0ZUF0dHJpYnV0ZVNl
dHRlckJvZHlEZWZpbml0aW9uKToKKyAgICAgICAgKEdlbmVyYXRlT3BlcmF0aW9uRGVmaW5pdGlv
bik6CisgICAgICAgIChHZW5lcmF0ZVNlcmlhbGl6ZXJEZWZpbml0aW9uKToKKyAgICAgICAgKEdl
bmVyYXRlQ2FsbGJhY2tJbXBsZW1lbnRhdGlvbkNvbnRlbnQpOgorICAgICAgICAoR2VuZXJhdGVD
b25zdHJ1Y3RvckhlbHBlck1ldGhvZHMpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU0ludGVyZmFjZU5hbWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNJbnRlcmZhY2VO
YW1lQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKToKKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNNYXBMaWtlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTTWFw
TGlrZUNvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGllcyk6CisgICAgICAgICogYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTUmVhZE9ubHlNYXBMaWtlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkpTUmVhZE9ubHlNYXBMaWtlQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKToK
KyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0QWN0aXZlRE9NT2JqZWN0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEFjdGl2ZURPTU9iamVjdENvbnN0cnVjdG9y
Ojppbml0aWFsaXplUHJvcGVydGllcyk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdENFUmVhY3Rpb25zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdENFUmVh
Y3Rpb25zQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNv
cmU6OnNldEpTVGVzdENFUmVhY3Rpb25zQXR0cmlidXRlV2l0aENFUmVhY3Rpb25zU2V0dGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdENFUmVhY3Rpb25zUmVmbGVjdEF0dHJpYnV0ZVdp
dGhDRVJlYWN0aW9uc1NldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RDRVJlYWN0
aW9uc1N0cmluZ2lmaWVyQXR0cmlidXRlU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpT
VGVzdENFUmVhY3Rpb25zQXR0cmlidXRlV2l0aENFUmVhY3Rpb25zTm90TmVlZGVkU2V0dGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdENFUmVhY3Rpb25zUmVmbGVjdEF0dHJpYnV0ZVdp
dGhDRVJlYWN0aW9uc05vdE5lZWRlZFNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rl
c3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyQXR0cmlidXRlTm90TmVlZGVkU2V0dGVyKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmll
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyQ29u
c3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpT
VGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXJWYWx1ZVNldHRlcik6CisgICAgICAgIChXZWJDb3Jl
OjpzZXRKU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyVmFsdWVXaXRob3V0UmVhY3Rpb25zU2V0
dGVyKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2FsbFRyYWNl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDYWxsVHJhY2VyQ29uc3RydWN0b3I6Omlu
aXRpYWxpemVQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdENhbGxUcmFj
ZXJUZXN0QXR0cmlidXRlSW50ZXJmYWNlU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpT
VGVzdENhbGxUcmFjZXJUZXN0QXR0cmlidXRlU3BlY2lmaWVkU2V0dGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OnNldEpTVGVzdENhbGxUcmFjZXJUZXN0QXR0cmlidXRlV2l0aFZhcmlhbnRTZXR0ZXIp
OgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsYmFja0ludGVy
ZmFjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0RGljdGlvbmFyeTxUZXN0Q2FsbGJh
Y2tJbnRlcmZhY2U6OkRpY3Rpb25hcnk+KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdENhbGxi
YWNrSW50ZXJmYWNlQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKToKKyAgICAgICAg
KFdlYkNvcmU6OkpTVGVzdENhbGxiYWNrSW50ZXJmYWNlOjpjYWxsYmFja1dpdGhOb1BhcmFtKToK
KyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdENhbGxiYWNrSW50ZXJmYWNlOjpjYWxsYmFja1dpdGhB
cnJheVBhcmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdENhbGxiYWNrSW50ZXJmYWNlOjpj
YWxsYmFja1dpdGhTZXJpYWxpemVkU2NyaXB0VmFsdWVQYXJhbSk6CisgICAgICAgIChXZWJDb3Jl
OjpKU1Rlc3RDYWxsYmFja0ludGVyZmFjZTo6Y2FsbGJhY2tXaXRoU3RyaW5nTGlzdCk6CisgICAg
ICAgIChXZWJDb3JlOjpKU1Rlc3RDYWxsYmFja0ludGVyZmFjZTo6Y2FsbGJhY2tXaXRoQm9vbGVh
bik6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDYWxsYmFja0ludGVyZmFjZTo6Y2FsbGJhY2tS
ZXF1aXJlc1RoaXNUb1Bhc3MpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Q2FsbGJhY2tJbnRl
cmZhY2U6OmNhbGxiYWNrV2l0aEFSZXR1cm5WYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rl
c3RDYWxsYmFja0ludGVyZmFjZTo6Y2FsbGJhY2tUaGF0UmV0aHJvd3NFeGNlcHRpb25zKToKKyAg
ICAgICAgKFdlYkNvcmU6OkpTVGVzdENhbGxiYWNrSW50ZXJmYWNlOjpjYWxsYmFja1RoYXRTa2lw
c0ludm9rZUNoZWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdENhbGxiYWNrSW50ZXJmYWNl
OjpjYWxsYmFja1dpdGhUaGlzT2JqZWN0KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JDb25zdHJ1Y3Rvcjo6
aW5pdGlhbGl6ZVByb3BlcnRpZXMpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RET01KSVQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0RE9NSklUQ29uc3Ry
dWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdERP
TUpJVFByb3RvdHlwZUZ1bmN0aW9uR2V0QXR0cmlidXRlV2l0aG91dFR5cGVDaGVjayk6CisgICAg
ICAgIChXZWJDb3JlOjpqc1Rlc3RET01KSVRQcm90b3R5cGVGdW5jdGlvbkl0ZW1XaXRob3V0VHlw
ZUNoZWNrKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdERPTUpJVFByb3RvdHlwZUZ1bmN0aW9u
SGFzQXR0cmlidXRlV2l0aG91dFR5cGVDaGVjayk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RE
T01KSVRQcm90b3R5cGVGdW5jdGlvbkdldEVsZW1lbnRCeUlkV2l0aG91dFR5cGVDaGVjayk6Cisg
ICAgICAgIChXZWJDb3JlOjpqc1Rlc3RET01KSVRQcm90b3R5cGVGdW5jdGlvbkdldEVsZW1lbnRz
QnlOYW1lV2l0aG91dFR5cGVDaGVjayk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdEVuYWJsZWRCeVNldHRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0
RW5hYmxlZEJ5U2V0dGluZ0NvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGllcyk6CisgICAg
ICAgIChXZWJDb3JlOjpKU1Rlc3RFbmFibGVkQnlTZXR0aW5nUHJvdG90eXBlOjpmaW5pc2hDcmVh
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RFbmFibGVkQnlTZXR0aW5nVGVzdFN1
Yk9iakVuYWJsZWRCeVNldHRpbmdDb25zdHJ1Y3RvclNldHRlcik6CisgICAgICAgIChXZWJDb3Jl
OjpzZXRKU1Rlc3RFbmFibGVkQnlTZXR0aW5nRW5hYmxlZEJ5U2V0dGluZ0F0dHJpYnV0ZVNldHRl
cik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEVuYWJsZWRGb3JD
b250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEVuYWJsZWRGb3JDb250ZXh0Q29u
c3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpT
VGVzdEVuYWJsZWRGb3JDb250ZXh0VGVzdFN1Yk9iakVuYWJsZWRGb3JDb250ZXh0Q29uc3RydWN0
b3JTZXR0ZXIpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVu
dENvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnREaWN0aW9uYXJ5PFRl
c3RFdmVudENvbnN0cnVjdG9yOjpJbml0Pik6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RFdmVu
dENvbnN0cnVjdG9yQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKToKKyAgICAgICAg
KiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRUYXJnZXQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SlNUZXN0RXZlbnRUYXJnZXRDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3Bl
cnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0RXZlbnRUYXJnZXQ6OmdldE93blByb3Bl
cnR5U2xvdEJ5SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0RXZlbnRUYXJnZXQ6Omdl
dE93blByb3BlcnR5TmFtZXMpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RFeGNlcHRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0RXhjZXB0aW9uQ29u
c3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9w
ZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVQcm90
b3R5cGU6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0R2xvYmFsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEdsb2Jh
bE9iamVjdENvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGllcyk6CisgICAgICAgIChXZWJD
b3JlOjpzZXRKU1Rlc3RHbG9iYWxPYmplY3RSZWd1bGFyQXR0cmlidXRlU2V0dGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OnNldEpTVGVzdEdsb2JhbE9iamVjdFB1YmxpY0FuZFByaXZhdGVBdHRyaWJ1
dGVTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0R2xvYmFsT2JqZWN0UHVibGlj
QW5kUHJpdmF0ZUNvbmRpdGlvbmFsQXR0cmlidXRlU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OnNldEpTVGVzdEdsb2JhbE9iamVjdEVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGVTZXR0ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdENFUmVhY3Rpb25zQ29u
c3RydWN0b3JTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0R2xvYmFsT2JqZWN0
VGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXJDb25zdHJ1Y3RvclNldHRlcik6CisgICAgICAgIChX
ZWJDb3JlOjpzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0Q2FsbFRyYWNlckNvbnN0cnVjdG9yU2V0
dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RDYWxsYmFj
a0ludGVyZmFjZUNvbnN0cnVjdG9yU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVz
dEdsb2JhbE9iamVjdFRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvckNvbnN0cnVjdG9y
U2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RET01K
SVRDb25zdHJ1Y3RvclNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RHbG9iYWxP
YmplY3RUZXN0RG9tYWluU2VjdXJpdHlDb25zdHJ1Y3RvclNldHRlcik6CisgICAgICAgIChXZWJD
b3JlOjpzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0RW5hYmxlZEJ5U2V0dGluZ0NvbnN0cnVjdG9y
U2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RFbmFi
bGVkRm9yQ29udGV4dENvbnN0cnVjdG9yU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpT
VGVzdEdsb2JhbE9iamVjdFRlc3RFdmVudENvbnN0cnVjdG9yQ29uc3RydWN0b3JTZXR0ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdEV2ZW50VGFyZ2V0Q29u
c3RydWN0b3JTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0R2xvYmFsT2JqZWN0
VGVzdEV4Y2VwdGlvbkNvbnN0cnVjdG9yU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpT
VGVzdEdsb2JhbE9iamVjdFRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlQ29uc3RydWN0b3JTZXR0ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdEdsb2JhbE9iamVj
dENvbnN0cnVjdG9yU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdEdsb2JhbE9i
amVjdFRlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyQ29uc3RydWN0b3JTZXR0ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdEluZGV4ZWRTZXR0ZXJUaHJv
d2luZ0V4Y2VwdGlvbkNvbnN0cnVjdG9yU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpT
VGVzdEdsb2JhbE9iamVjdFRlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXJDb25zdHJ1Y3Rv
clNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0SW50
ZXJmYWNlQ29uc3RydWN0b3JTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0R2xv
YmFsT2JqZWN0VGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlQ29uc3RydWN0b3JTZXR0ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdEl0ZXJhYmxlQ29u
c3RydWN0b3JTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0R2xvYmFsT2JqZWN0
VGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yQ29uc3RydWN0b3JTZXR0ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE1hcExpa2VDb25zdHJ1Y3RvclNldHRlcik6
CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TWVkaWFRdWVyeUxp
c3RMaXN0ZW5lckNvbnN0cnVjdG9yU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVz
dEdsb2JhbE9iamVjdFRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXJDb25zdHJ1
Y3RvclNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0
TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb25Db25zdHJ1Y3RvclNldHRlcik6
CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRBbmRJbmRl
eGVkU2V0dGVyV2l0aElkZW50aWZpZXJDb25zdHJ1Y3RvclNldHRlcik6CisgICAgICAgIChXZWJD
b3JlOjpzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRDb25zdHJ1Y3RvckNvbnN0cnVjdG9y
U2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdEdsb2JhbE9iamVjdEF1ZGlvQ29u
c3RydWN0b3JTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0R2xvYmFsT2JqZWN0
VGVzdE5hbWVkRGVsZXRlck5vSWRlbnRpZmllckNvbnN0cnVjdG9yU2V0dGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OnNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4
Y2VwdGlvbkNvbnN0cnVjdG9yU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdEds
b2JhbE9iamVjdFRlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllckNvbnN0cnVjdG9yU2V0dGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZERlbGV0
ZXJXaXRoSW5kZXhlZEdldHRlckNvbnN0cnVjdG9yU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OnNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZEdldHRlckNhbGxXaXRoQ29uc3RydWN0b3JT
ZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVk
R2V0dGVyTm9JZGVudGlmaWVyQ29uc3RydWN0b3JTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXJDb25zdHJ1
Y3RvclNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0
TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXJDb25zdHJ1Y3RvclNldHRlcik6CisgICAgICAgIChXZWJD
b3JlOjpzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlv
bkNvbnN0cnVjdG9yU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdEdsb2JhbE9i
amVjdFRlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyQ29uc3RydWN0b3JTZXR0ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkU2V0dGVyV2l0aElu
ZGV4ZWRHZXR0ZXJDb25zdHJ1Y3RvclNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rl
c3RHbG9iYWxPYmplY3RUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlckNv
bnN0cnVjdG9yU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdEdsb2JhbE9iamVj
dFRlc3ROYW1lZFNldHRlcldpdGhPdmVycmlkZUJ1aWx0aW5zQ29uc3RydWN0b3JTZXR0ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkU2V0dGVyV2l0
aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQ29uc3RydWN0b3JTZXR0ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9w
ZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGluc0NvbnN0cnVjdG9yU2V0dGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OnNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29u
c3RydWN0b3JTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0R2xvYmFsT2JqZWN0
VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2VDb25zdHJ1Y3RvclNldHRlcik6
CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0T3ZlcnJpZGVCdWls
dGluc0NvbnN0cnVjdG9yU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdEdsb2Jh
bE9iamVjdFRlc3RQbHVnaW5JbnRlcmZhY2VDb25zdHJ1Y3RvclNldHRlcik6CisgICAgICAgIChX
ZWJDb3JlOjpzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0UmVhZE9ubHlNYXBMaWtlQ29uc3RydWN0
b3JTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFJl
cG9ydEV4dHJhTWVtb3J5Q29zdENvbnN0cnVjdG9yU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OnNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RTZXJpYWxpemF0aW9uQ29uc3RydWN0b3JTZXR0ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFNlcmlhbGl6YXRp
b25JbmRpcmVjdEluaGVyaXRhbmNlQ29uc3RydWN0b3JTZXR0ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Q29uc3RydWN0
b3JTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFNl
cmlhbGl6YXRpb25Jbmhlcml0RmluYWxDb25zdHJ1Y3RvclNldHRlcik6CisgICAgICAgIChXZWJD
b3JlOjpzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJm
YWNlQ29uc3RydWN0b3JTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0R2xvYmFs
T2JqZWN0VGVzdFN0cmluZ2lmaWVyQ29uc3RydWN0b3JTZXR0ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFN0cmluZ2lmaWVyQW5vbnltb3VzT3BlcmF0aW9u
Q29uc3RydWN0b3JTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0R2xvYmFsT2Jq
ZWN0VGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRpb25Db25zdHJ1Y3RvclNldHRlcik6CisgICAg
ICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0U3RyaW5naWZpZXJPcGVyYXRp
b25JbXBsZW1lbnRlZEFzQ29uc3RydWN0b3JTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0
SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uTmFtZWRUb1N0cmluZ0Nv
bnN0cnVjdG9yU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdEdsb2JhbE9iamVj
dFRlc3RTdHJpbmdpZmllclJlYWRPbmx5QXR0cmlidXRlQ29uc3RydWN0b3JTZXR0ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFN0cmluZ2lmaWVyUmVhZFdy
aXRlQXR0cmlidXRlQ29uc3RydWN0b3JTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNU
ZXN0R2xvYmFsT2JqZWN0VGVzdFR5cGVkZWZzQ29uc3RydWN0b3JTZXR0ZXIpOgorICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXJD
b25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6SlNU
ZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllcjo6Z2V0T3duUHJvcGVydHlOYW1lcyk6CisgICAg
ICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2lu
Z0V4Y2VwdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RJbmRleGVkU2V0dGVyVGhy
b3dpbmdFeGNlcHRpb25Db25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6SlNUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uOjpnZXRPd25Q
cm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVz
dEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllckNvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVy
dGllcyk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZp
ZXI6OmdldE93blByb3BlcnR5TmFtZXMpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RJbnRlcmZhY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0SW50ZXJm
YWNlQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6
OnNldEpTVGVzdEludGVyZmFjZUNvbnN0cnVjdG9ySW1wbGVtZW50c1N0YXRpY0F0dHJTZXR0ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c1N0cjJTZXR0
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c1N0cjNT
ZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c05v
ZGVTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0
b3JTdXBwbGVtZW50YWxTdGF0aWNBdHRyU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpT
VGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbFN0cjJTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
c2V0SlNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsU3RyM1NldHRlcik6CisgICAgICAgIChXZWJD
b3JlOjpzZXRKU1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxOb2RlU2V0dGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OnNldEpTVGVzdEludGVyZmFjZVJlZmxlY3RBdHRyaWJ1dGVTZXR0ZXIpOgorICAg
ICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2VMZWFkaW5nVW5k
ZXJzY29yZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RJbnRlcmZhY2VMZWFkaW5nVW5k
ZXJzY29yZUNvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGllcyk6CisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEl0ZXJhYmxlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkpTVGVzdEl0ZXJhYmxlQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKToKKyAg
ICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0
b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JDb25z
dHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNU
ZXN0SlNCdWlsdGluQ29uc3RydWN0b3JUZXN0QXR0cmlidXRlUldDdXN0b21TZXR0ZXIpOgorICAg
ICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3Rl
bmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJD
b25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMpOgorICAgICAgICAqIGJpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlm
aWVyQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6
OkpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllcjo6Z2V0T3duUHJvcGVydHlT
bG90QnlJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0
ZXJOb0lkZW50aWZpZXI6OmdldE93blByb3BlcnR5TmFtZXMpOgorICAgICAgICAoV2ViQ29yZTo6
SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyOjpwdXRCeUluZGV4KToKKyAg
ICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0
dGVyVGhyb3dpbmdFeGNlcHRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRB
bmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb25Db25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVBy
b3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVy
VGhyb3dpbmdFeGNlcHRpb246OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgpOgorICAgICAgICAo
V2ViQ29yZTo6SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246Omdl
dE93blByb3BlcnR5TmFtZXMpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRBbmRJbmRl
eGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246OnB1dEJ5SW5kZXgpOgorICAgICAgICAqIGJpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRp
Zmllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJX
aXRoSWRlbnRpZmllckNvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGllcyk6CisgICAgICAg
IChXZWJDb3JlOjpKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6Z2V0
T3duUHJvcGVydHlTbG90QnlJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZEFu
ZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6Z2V0T3duUHJvcGVydHlOYW1lcyk6CisgICAg
ICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6
cHV0QnlJbmRleCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5h
bWVkQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRDb25zdHJ1
Y3RvckNvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3Jl
OjpKU1Rlc3ROYW1lZENvbnN0cnVjdG9yTmFtZWRDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3Bl
cnRpZXMpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZERl
bGV0ZXJOb0lkZW50aWZpZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWREZWxl
dGVyTm9JZGVudGlmaWVyQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkRGVsZXRlck5vSWRlbnRpZmllcjo6Z2V0T3duUHJvcGVy
dHlTbG90QnlJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZERlbGV0ZXJOb0lk
ZW50aWZpZXI6OmdldE93blByb3BlcnR5TmFtZXMpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0
TmFtZWREZWxldGVyTm9JZGVudGlmaWVyOjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgpOgorICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4
Y2VwdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZERlbGV0ZXJUaHJvd2lu
Z0V4Y2VwdGlvbkNvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGllcyk6CisgICAgICAgIChX
ZWJDb3JlOjpKU1Rlc3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6Z2V0T3duUHJvcGVy
dHlTbG90QnlJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZERlbGV0ZXJUaHJv
d2luZ0V4Y2VwdGlvbjo6Z2V0T3duUHJvcGVydHlOYW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpK
U1Rlc3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6ZGVsZXRlUHJvcGVydHlCeUluZGV4
KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxldGVy
V2l0aElkZW50aWZpZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWREZWxldGVy
V2l0aElkZW50aWZpZXJDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6SlNUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXI6OmdldE93blByb3Bl
cnR5U2xvdEJ5SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWREZWxldGVyV2l0
aElkZW50aWZpZXI6OmdldE93blByb3BlcnR5TmFtZXMpOgorICAgICAgICAoV2ViQ29yZTo6SlNU
ZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXI6OmRlbGV0ZVByb3BlcnR5QnlJbmRleCk6Cisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkRGVsZXRlcldpdGhJ
bmRleGVkR2V0dGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkRGVsZXRlcldp
dGhJbmRleGVkR2V0dGVyQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVkR2V0dGVyOjpnZXRPd25Q
cm9wZXJ0eVNsb3RCeUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkRGVsZXRl
cldpdGhJbmRleGVkR2V0dGVyOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKiBiaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoQ29uc3RydWN0b3I6OmluaXRp
YWxpemVQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkR2V0dGVyQ2Fs
bFdpdGg6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SlNU
ZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aDo6Z2V0T3duUHJvcGVydHlOYW1lcyk6CisgICAgICAgICog
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyQ29uc3Ry
dWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5h
bWVkR2V0dGVyTm9JZGVudGlmaWVyOjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KToKKyAgICAg
ICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyOjpnZXRPd25Qcm9wZXJ0
eU5hbWVzKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRH
ZXR0ZXJXaXRoSWRlbnRpZmllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZEdl
dHRlcldpdGhJZGVudGlmaWVyQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXI6OmdldE93blBy
b3BlcnR5U2xvdEJ5SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRHZXR0ZXJX
aXRoSWRlbnRpZmllcjo6Z2V0T3duUHJvcGVydHlOYW1lcyk6CisgICAgICAgICogYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyQ29uc3RydWN0b3I6Omlu
aXRpYWxpemVQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkU2V0dGVy
Tm9JZGVudGlmaWVyOjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KToKKyAgICAgICAgKFdlYkNv
cmU6OkpTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKToK
KyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyOjpwdXRCeUlu
ZGV4KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0
ZXJUaHJvd2luZ0V4Y2VwdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZFNl
dHRlclRocm93aW5nRXhjZXB0aW9uQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKToK
KyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246Omdl
dE93blByb3BlcnR5U2xvdEJ5SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRT
ZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6Z2V0T3duUHJvcGVydHlOYW1lcyk6CisgICAgICAgIChX
ZWJDb3JlOjpKU1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uOjpwdXRCeUluZGV4KToK
KyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRo
SWRlbnRpZmllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZFNldHRlcldpdGhJ
ZGVudGlmaWVyQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdl
YkNvcmU6OkpTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXI6OmdldE93blByb3BlcnR5U2xv
dEJ5SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRp
Zmllcjo6Z2V0T3duUHJvcGVydHlOYW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1l
ZFNldHRlcldpdGhJZGVudGlmaWVyOjpwdXRCeUluZGV4KToKKyAgICAgICAgKiBiaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQ29uc3Ry
dWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5h
bWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXI6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgpOgor
ICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlcjo6Z2V0
T3duUHJvcGVydHlOYW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZFNldHRlcldp
dGhJbmRleGVkR2V0dGVyOjpwdXRCeUluZGV4KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5k
U2V0dGVyQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNv
cmU6OkpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXI6OmdldE93blBy
b3BlcnR5U2xvdEJ5SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRTZXR0ZXJX
aXRoSW5kZXhlZEdldHRlckFuZFNldHRlcjo6Z2V0T3duUHJvcGVydHlOYW1lcyk6CisgICAgICAg
IChXZWJDb3JlOjpKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyOjpw
dXRCeUluZGV4KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFt
ZWRTZXR0ZXJXaXRoT3ZlcnJpZGVCdWlsdGlucy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rl
c3ROYW1lZFNldHRlcldpdGhPdmVycmlkZUJ1aWx0aW5zQ29uc3RydWN0b3I6OmluaXRpYWxpemVQ
cm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkU2V0dGVyV2l0aE92ZXJy
aWRlQnVpbHRpbnM6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgpOgorICAgICAgICAoV2ViQ29y
ZTo6SlNUZXN0TmFtZWRTZXR0ZXJXaXRoT3ZlcnJpZGVCdWlsdGluczo6Z2V0T3duUHJvcGVydHlO
YW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZFNldHRlcldpdGhPdmVycmlkZUJ1
aWx0aW5zOjpwdXRCeUluZGV4KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXMuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNDb25zdHJ1
Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFt
ZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXM6OmdldE93blByb3BlcnR5U2xvdEJ5SW5k
ZXgpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVBy
b3BlcnRpZXM6OmdldE93blByb3BlcnR5TmFtZXMpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0
TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXM6OnB1dEJ5SW5kZXgpOgorICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdh
YmxlUHJvcGVydGllc0FuZE92ZXJyaWRlQnVpbHRpbnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0
aW5zQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6
OkpTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWls
dGluczo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rl
c3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0FuZE92ZXJyaWRlQnVpbHRpbnM6
OmdldE93blByb3BlcnR5TmFtZXMpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRTZXR0
ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5zOjpwdXRCeUluZGV4
KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROb2RlQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0
aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5vZGVQcm90b3R5cGU6OmZpbmlzaENyZWF0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE5vZGVOYW1lU2V0dGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkpTVGVzdE5vZGU6OnNlcmlhbGl6ZSk6CisgICAgICAgICogYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0
RGljdGlvbmFyeTxUZXN0T2JqOjpEaWN0aW9uYXJ5Pik6CisgICAgICAgIChXZWJDb3JlOjpjb252
ZXJ0RGljdGlvbmFyeVRvSlMpOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydERpY3Rpb25hcnk8
VGVzdE9iajo6RGljdGlvbmFyeVRoYXRTaG91bGROb3RUb2xlcmF0ZU51bGw+KToKKyAgICAgICAg
KFdlYkNvcmU6OmNvbnZlcnREaWN0aW9uYXJ5PFRlc3RPYmo6OkRpY3Rpb25hcnlUaGF0U2hvdWxk
VG9sZXJhdGVOdWxsPik6CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0RGljdGlvbmFyeTxBbHRl
cm5hdGVEaWN0aW9uYXJ5TmFtZT4pOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydERpY3Rpb25h
cnk8VGVzdE9iajo6UGFyZW50RGljdGlvbmFyeT4pOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVy
dERpY3Rpb25hcnk8VGVzdE9iajo6Q2hpbGREaWN0aW9uYXJ5Pik6CisgICAgICAgIChXZWJDb3Jl
Ojpjb252ZXJ0RGljdGlvbmFyeTxUZXN0T2JqOjpDb25kaXRpb25hbERpY3Rpb25hcnlBPik6Cisg
ICAgICAgIChXZWJDb3JlOjpjb252ZXJ0RGljdGlvbmFyeTxUZXN0T2JqOjpDb25kaXRpb25hbERp
Y3Rpb25hcnlCPik6CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0RGljdGlvbmFyeTxUZXN0T2Jq
OjpDb25kaXRpb25hbERpY3Rpb25hcnlDPik6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RPYmpD
b25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6SlNU
ZXN0T2JqUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpKU1Rl
c3RPYmo6OmdldE93blByb3BlcnR5TmFtZXMpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0
T2JqQ29uc3RydWN0b3JTdGF0aWNTdHJpbmdBdHRyU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OnNldEpTVGVzdE9iakVudW1BdHRyU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVz
dE9iakJ5dGVBdHRyU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9iak9jdGV0
QXR0clNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpTaG9ydEF0dHJTZXR0
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqQ2xhbXBlZFNob3J0QXR0clNldHRl
cik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpFbmZvcmNlUmFuZ2VTaG9ydEF0dHJT
ZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqVW5zaWduZWRTaG9ydEF0dHJT
ZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqTG9uZ0F0dHJTZXR0ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqTG9uZ0xvbmdBdHRyU2V0dGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OnNldEpTVGVzdE9ialVuc2lnbmVkTG9uZ0xvbmdBdHRyU2V0dGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9ialN0cmluZ0F0dHJTZXR0ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6c2V0SlNUZXN0T2JqVXN2c3RyaW5nQXR0clNldHRlcik6CisgICAgICAgIChXZWJD
b3JlOjpzZXRKU1Rlc3RPYmpUZXN0T2JqQXR0clNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpz
ZXRKU1Rlc3RPYmpUZXN0TnVsbGFibGVPYmpBdHRyU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OnNldEpTVGVzdE9iakxlbmllbnRUZXN0T2JqQXR0clNldHRlcik6CisgICAgICAgIChXZWJDb3Jl
OjpzZXRKU1Rlc3RPYmpTdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZ1NldHRlcik6
CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpVc3ZzdHJpbmdBdHRyVHJlYXRpbmdOdWxs
QXNFbXB0eVN0cmluZ1NldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpCeXRl
U3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmdTZXR0ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6c2V0SlNUZXN0T2JqU3RyaW5nTG9uZ1JlY29yZEF0dHJTZXR0ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6c2V0SlNUZXN0T2JqVXN2c3RyaW5nTG9uZ1JlY29yZEF0dHJTZXR0ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqU3RyaW5nT2JqUmVjb3JkQXR0clNldHRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpTdHJpbmdOdWxsYWJsZU9ialJlY29yZEF0dHJT
ZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqRGljdGlvbmFyeUF0dHJTZXR0
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqTnVsbGFibGVEaWN0aW9uYXJ5QXR0
clNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpBbm5vdGF0ZWRUeXBlSW5V
bmlvbkF0dHJTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqQW5ub3RhdGVk
VHlwZUluU2VxdWVuY2VBdHRyU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9i
akltcGxlbWVudGF0aW9uRW51bUF0dHJTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNU
ZXN0T2JqWE1MT2JqQXR0clNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpD
cmVhdGVTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqUmVmbGVjdGVkU3Ry
aW5nQXR0clNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRV
U1ZTdHJpbmdBdHRyU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9ialJlZmxl
Y3RlZEludGVncmFsQXR0clNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpS
ZWZsZWN0ZWRVbnNpZ25lZEludGVncmFsQXR0clNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpz
ZXRKU1Rlc3RPYmpSZWZsZWN0ZWRCb29sZWFuQXR0clNldHRlcik6CisgICAgICAgIChXZWJDb3Jl
OjpzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRVUkxBdHRyU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OnNldEpTVGVzdE9ialJlZmxlY3RlZFVTVlVSTEF0dHJTZXR0ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6c2V0SlNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tSW50ZWdyYWxBdHRyU2V0dGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OnNldEpTVGVzdE9ialJlZmxlY3RlZEN1c3RvbUJvb2xlYW5BdHRyU2V0dGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9ialJlZmxlY3RlZEN1c3RvbVVSTEF0dHJT
ZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqRW5hYmxlZEF0UnVudGltZUF0
dHJpYnV0ZVNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpDb25zdHJ1Y3Rv
ckVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGVTdGF0aWNTZXR0ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6c2V0SlNUZXN0T2JqVHlwZWRBcnJheUF0dHJTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
c2V0SlNUZXN0T2JqQ3VzdG9tQXR0clNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rl
c3RPYmpPbmZvb1NldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpPbndlYmtp
dGZvb1NldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpXaXRoRXhlY1N0YXRl
QXR0cmlidXRlU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9ialdpdGhDYWxs
V2l0aEFuZFNldHRlckNhbGxXaXRoQXR0cmlidXRlU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OnNldEpTVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlU2V0dGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0
QW5kRXhlY1N0YXRlQXR0cmlidXRlU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVz
dE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kRXhlY1N0YXRlV2l0aFNwYWNlc0F0dHJp
YnV0ZVNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0
dHIxU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0
cjJTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRy
M1NldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHI0
Q29uc3RydWN0b3JTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqQ29uZGl0
aW9uYWxBdHRyNUNvbnN0cnVjdG9yU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVz
dE9iakNvbmRpdGlvbmFsQXR0cjZDb25zdHJ1Y3RvclNldHRlcik6CisgICAgICAgIChXZWJDb3Jl
OjpzZXRKU1Rlc3RPYmpBbnlBdHRyaWJ1dGVTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0
SlNUZXN0T2JqT2JqZWN0QXR0cmlidXRlU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpT
VGVzdE9iak11dGFibGVQb2ludFNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RP
YmpTdHJhd2JlcnJ5U2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9iaklkU2V0
dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9ialJlcGxhY2VhYmxlQXR0cmlidXRl
U2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9iak51bGxhYmxlTG9uZ1NldHRh
YmxlQXR0cmlidXRlU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9iak51bGxh
YmxlU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGVTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0
SlNUZXN0T2JqTnVsbGFibGVVU1ZTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZVNldHRlcik6CisgICAg
ICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpOdWxsYWJsZUJ5dGVTdHJpbmdTZXR0YWJsZUF0dHJp
YnV0ZVNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpBdHRyaWJ1dGVXaXRo
UmVzZXJ2ZWRFbnVtVHlwZVNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpQ
dXRGb3J3YXJkc0F0dHJpYnV0ZVNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RP
YmpQdXRGb3J3YXJkc051bGxhYmxlQXR0cmlidXRlU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OnNldEpTVGVzdE9ialN0cmluZ2lmaWVyQXR0cmlidXRlU2V0dGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OnNldEpTVGVzdE9iakNvbmRpdGlvbmFsbHlSZWFkV3JpdGVBdHRyaWJ1dGVTZXR0ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBbmRDb25kaXRpb25hbGx5
UmVhZFdyaXRlQXR0cmlidXRlU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9i
akNvbmRpdGlvbmFsbHlFeHBvc2VkVG9XaW5kb3dBdHRyaWJ1dGVTZXR0ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6c2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxseUV4cG9zZWRUb1dvcmtlckF0dHJpYnV0
ZVNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpDb25kaXRpb25hbGx5RXhw
b3NlZFRvV2luZG93QW5kV29ya2VyQXR0cmlidXRlU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkpTVGVzdE9iajo6c2VyaWFsaXplKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpK
U1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0
aWVzKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcmxvYWRl
ZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RP
dmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlQ29uc3RydWN0b3I6OmluaXRpYWxpemVQ
cm9wZXJ0aWVzKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3Zl
cnJpZGVCdWlsdGlucy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RPdmVycmlkZUJ1aWx0
aW5zQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6
OkpTVGVzdE92ZXJyaWRlQnVpbHRpbnM6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgpOgorICAg
ICAgICAoV2ViQ29yZTo6SlNUZXN0T3ZlcnJpZGVCdWlsdGluczo6Z2V0T3duUHJvcGVydHlOYW1l
cyk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFBsdWdpbkludGVy
ZmFjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RQbHVnaW5JbnRlcmZhY2VDb25zdHJ1
Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0UGx1
Z2luSW50ZXJmYWNlOjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KToKKyAgICAgICAgKFdlYkNv
cmU6OkpTVGVzdFBsdWdpbkludGVyZmFjZTo6cHV0QnlJbmRleCk6CisgICAgICAgICogYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFByb21pc2VSZWplY3Rpb25FdmVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpjb252ZXJ0RGljdGlvbmFyeTxUZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50
OjpJbml0Pik6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnRD
b25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMpOgorICAgICAgICAqIGJpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkpTVGVzdFNlcmlhbGl6YXRpb25Db25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0U2VyaWFsaXphdGlvbkZpcnN0U3RyaW5nQXR0cmli
dXRlU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdFNlcmlhbGl6YXRpb25TZWNv
bmRMb25nQXR0cmlidXRlU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdFNlcmlh
bGl6YXRpb25UaGlyZFVuc2VyaWFsaXphYmxlQXR0cmlidXRlU2V0dGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OnNldEpTVGVzdFNlcmlhbGl6YXRpb25Gb3VydGhVbnJlc3RyaWN0ZWREb3VibGVBdHRy
aWJ1dGVTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0U2VyaWFsaXphdGlvbkZp
ZnRoTG9uZ0F0dHJpYnV0ZVNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RTZXJp
YWxpemF0aW9uU2l4dGhUeXBlZGVmQXR0cmlidXRlU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OnNldEpTVGVzdFNlcmlhbGl6YXRpb25TZXZlbnRoRGlyZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1
dGVTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0U2VyaWFsaXphdGlvbkVpZ2h0
aEluZGlyZWN0bHlBdHRyaWJ1dGVTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0
U2VyaWFsaXphdGlvbk5pbnRoT3B0aW9uYWxEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZVNl
dHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RTZXJpYWxpemF0aW9uVGVudGhGcm96
ZW5BcnJheUF0dHJpYnV0ZVNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RTZXJp
YWxpemF0aW9uRWxldmVudGhTZXF1ZW5jZUF0dHJpYnV0ZVNldHRlcik6CisgICAgICAgIChXZWJD
b3JlOjpzZXRKU1Rlc3RTZXJpYWxpemF0aW9uVHdlbGZ0aEludGVyZmFjZVNlcXVlbmNlQXR0cmli
dXRlU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFNlcmlhbGl6YXRpb246OnNlcmlh
bGl6ZSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6
YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFNl
cmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9w
ZXJ0aWVzKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFs
aXphdGlvbkluaGVyaXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0U2VyaWFsaXphdGlv
bkluaGVyaXRDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6c2V0SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRJbmhlcml0TG9uZ0F0dHJpYnV0ZVNl
dHRlcik6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdDo6c2Vy
aWFsaXplKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFs
aXphdGlvbkluaGVyaXRGaW5hbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RTZXJpYWxp
emF0aW9uSW5oZXJpdEZpbmFsQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxGaW5hbExv
bmdBdHRyaWJ1dGVGb29TZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0U2VyaWFs
aXphdGlvbkluaGVyaXRGaW5hbEZpbmFsTG9uZ0F0dHJpYnV0ZUJhclNldHRlcik6CisgICAgICAg
IChXZWJDb3JlOjpKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsOjpzZXJpYWxpemUpOgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0
VmFsdWVJbnRlcmZhY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0U2VyaWFsaXplZFNj
cmlwdFZhbHVlSW50ZXJmYWNlQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVZh
bHVlU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZUludGVyZmFjZUNhY2hlZFZhbHVlU2V0dGVyKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0U3RhbmRhbG9uZURpY3Rpb25hcnkuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Y29udmVydERpY3Rpb25hcnk8RGljdGlvbmFyeUltcGxOYW1lPik6CisgICAgICAgIChX
ZWJDb3JlOjpjb252ZXJ0RGljdGlvbmFyeVRvSlMpOgorICAgICAgICAqIGJpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rl
c3RTdHJpbmdpZmllckNvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGllcyk6CisgICAgICAg
ICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyQW5vbnltb3VzT3Bl
cmF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFN0cmluZ2lmaWVyQW5vbnltb3Vz
T3BlcmF0aW9uQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKToKKyAgICAgICAgKiBi
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvbi5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RTdHJpbmdpZmllck5hbWVkT3BlcmF0aW9uQ29u
c3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25JbXBsZW1lbnRlZEFzLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uSW1wbGVtZW50ZWRB
c0NvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGllcyk6CisgICAgICAgICogYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uTmFtZWRUb1N0cmluZy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9T
dHJpbmdDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMpOgorICAgICAgICAqIGJpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllclJlYWRPbmx5QXR0cmlidXRlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGVD
b25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMpOgorICAgICAgICAqIGJpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJpYnV0ZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1Rlc3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJpYnV0ZUNvbnN0
cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rl
c3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJpYnV0ZUlkZW50aWZpZXJTZXR0ZXIpOgorICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RUeXBlZGVmcy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpKU1Rlc3RUeXBlZGVmc0NvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGll
cyk6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RUeXBlZGVmc1Vuc2lnbmVkTG9uZ0xvbmdB
dHRyU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdFR5cGVkZWZzU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdFR5cGVkZWZz
QXR0cmlidXRlV2l0aENsYW1wU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdFR5
cGVkZWZzQXR0cmlidXRlV2l0aENsYW1wSW5UeXBlZGVmU2V0dGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OnNldEpTVGVzdFR5cGVkZWZzQnVmZmVyU291cmNlQXR0clNldHRlcik6CisgICAgICAgIChX
ZWJDb3JlOjpzZXRKU1Rlc3RUeXBlZGVmc0RvbVRpbWVTdGFtcEF0dHJTZXR0ZXIpOgorICAgICAg
ICAqIGJyaWRnZS9OUF9qc29iamVjdC5jcHA6CisgICAgICAgICogYnJpZGdlL2MvY19pbnN0YW5j
ZS5jcHA6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpDSW5zdGFuY2U6OnN0cmluZ1ZhbHVlIGNv
bnN0KToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OkNJbnN0YW5jZTo6Z2V0UHJvcGVydHlOYW1l
cyk6CisgICAgICAgICogYnJpZGdlL2MvY191dGlsaXR5LmNwcDoKKyAgICAgICAgKEpTQzo6Qmlu
ZGluZ3M6OmlkZW50aWZpZXJGcm9tTlBJZGVudGlmaWVyKToKKyAgICAgICAgKiBicmlkZ2Uvb2Jq
Yy9XZWJTY3JpcHRPYmplY3QubW06CisgICAgICAgICgtW1dlYlNjcmlwdE9iamVjdCBjYWxsV2Vi
U2NyaXB0TWV0aG9kOndpdGhBcmd1bWVudHM6XSk6CisgICAgICAgICgtW1dlYlNjcmlwdE9iamVj
dCBzZXRWYWx1ZTpmb3JLZXk6XSk6CisgICAgICAgICgtW1dlYlNjcmlwdE9iamVjdCB2YWx1ZUZv
cktleTpdKToKKyAgICAgICAgKC1bV2ViU2NyaXB0T2JqZWN0IHJlbW92ZVdlYlNjcmlwdEtleTpd
KToKKyAgICAgICAgKC1bV2ViU2NyaXB0T2JqZWN0IGhhc1dlYlNjcmlwdEtleTpdKToKKyAgICAg
ICAgKiBicmlkZ2Uvb2JqYy9vYmpjX3J1bnRpbWUubW06CisgICAgICAgIChKU0M6OkJpbmRpbmdz
OjpPYmpjRmFsbGJhY2tPYmplY3RJbXA6OmRlZmF1bHRWYWx1ZSk6CisgICAgICAgICogYnJpZGdl
L29iamMvb2JqY191dGlsaXR5Lm1tOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6Y29udmVydE5T
U3RyaW5nVG9TdHJpbmcpOgorICAgICAgICAqIGJyaWRnZS9ydW50aW1lX2FycmF5LmNwcDoKKyAg
ICAgICAgKEpTQzo6UnVudGltZUFycmF5OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKToKKyAgICAgICAg
KiBjb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uUGFyc2VyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpsb2FkVHJpZ2dlcik6CisgICAgICAgIChXZWJD
b3JlOjpDb250ZW50RXh0ZW5zaW9uczo6bG9hZEFjdGlvbik6CisgICAgICAgICogY3J5cHRvL1N1
YnRsZUNyeXB0by5jcHA6CisgICAgICAgIChXZWJDb3JlOjpub3JtYWxpemVDcnlwdG9BbGdvcml0
aG1QYXJhbWV0ZXJzKToKKyAgICAgICAgKiBkb21qaXQvRE9NSklUSGVscGVycy5oOgorICAgICAg
ICAoV2ViQ29yZTo6RE9NSklUOjp0b1dyYXBwZXJTbG93KToKKyAgICAgICAgKiBodG1sL0hUTUxN
ZWRpYUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29udHJvbGxlckpTVmFsdWUpOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6dXBkYXRlQ2FwdGlvbkNvbnRhaW5l
cik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjplbnN1cmVNZWRpYUNvbnRy
b2xzSW5qZWN0ZWRTY3JpcHQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6
c2V0Q29udHJvbGxlckpTUHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxl
bWVudDo6ZGlkQWRkVXNlckFnZW50U2hhZG93Um9vdCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
TWVkaWFFbGVtZW50Ojp1cGRhdGVNZWRpYUNvbnRyb2xzQWZ0ZXJQcmVzZW50YXRpb25Nb2RlQ2hh
bmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OmdldEN1cnJlbnRNZWRp
YUNvbnRyb2xzU3RhdHVzKToKKyAgICAgICAgKiBodG1sL0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBsdWdJbkltYWdlRWxlbWVudDo6ZGlkQWRkVXNl
ckFnZW50U2hhZG93Um9vdCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5k
SG9zdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OmFkZFNl
bGZUb0dsb2JhbE9iamVjdEluV29ybGQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJv
bnRlbmRIb3N0OjpzaG93Q29udGV4dE1lbnUpOgorICAgICAgICAqIGluc3BlY3Rvci9XZWJJbmpl
Y3RlZFNjcmlwdEhvc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViSW5qZWN0ZWRTY3JpcHRI
b3N0OjpzdWJ0eXBlKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnN0cnVjdEludGVybmFsUHJvcGVy
dHkpOgorICAgICAgICAoV2ViQ29yZTo6b2JqZWN0Rm9yUGF5bWVudE9wdGlvbnMpOgorICAgICAg
ICAoV2ViQ29yZTo6b2JqZWN0Rm9yUGF5bWVudEN1cnJlbmN5QW1vdW50KToKKyAgICAgICAgKFdl
YkNvcmU6Om9iamVjdEZvclBheW1lbnRJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6Om9iamVjdEZv
clBheW1lbnRTaGlwcGluZ09wdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpvYmplY3RGb3JQYXlt
ZW50RGV0YWlsc01vZGlmaWVyKToKKyAgICAgICAgKFdlYkNvcmU6Om9iamVjdEZvclBheW1lbnRE
ZXRhaWxzKToKKyAgICAgICAgKFdlYkNvcmU6OmpzU3RyaW5nRm9yUGF5bWVudFJlcXVlc3RTdGF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJJbmplY3RlZFNjcmlwdEhvc3Q6OmdldEludGVybmFs
UHJvcGVydGllcyk6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDYW52YXNB
Z2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDYW52YXNBZ2VudDo6Y29uc29s
ZVN0YXJ0UmVjb3JkaW5nQ2FudmFzKToKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3Bl
Y3RvckRPTUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50Ojpi
dWlsZE9iamVjdEZvckV2ZW50TGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
RE9NQWdlbnQ6OnNjcmlwdFZhbHVlQXNOb2RlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRz
L3BhZ2UvUGFnZUF1ZGl0QWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFnZUF1ZGl0QWdl
bnQ6OnBvcHVsYXRlQXVkaXRPYmplY3QpOgorICAgICAgICAqIHBhZ2UvUGFnZUNvbnNvbGVDbGll
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFnZUNvbnNvbGVDbGllbnQ6OnNjcmVlbnNob3Qp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0N1c3RvbVBhaW50SW1hZ2UuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Q3VzdG9tUGFpbnRJbWFnZTo6ZG9DdXN0b21QYWludCk6CisgICAgICAg
ICogdGVzdGluZy9qcy9XZWJDb3JlVGVzdFN1cHBvcnQuY3BwOgorICAgICAgICAoV2ViQ29yZVRl
c3RTdXBwb3J0OjppbmplY3RJbnRlcm5hbHNPYmplY3QpOgorICAgICAgICAoV2ViQ29yZVRlc3RT
dXBwb3J0OjpzZXR1cE5ld2x5Q3JlYXRlZFNlcnZpY2VXb3JrZXIpOgorICAgICAgICAqIHdvcmts
ZXRzL1BhaW50V29ya2xldEdsb2JhbFNjb3BlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhaW50
V29ya2xldEdsb2JhbFNjb3BlOjpyZWdpc3RlclBhaW50KToKKwogMjAxOS0wOC0yNiAgRGV2aW4g
Um91c3NvICA8ZHJvdXNzb0BhcHBsZS5jb20+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogdW5p
ZnkgYWdlbnQgY29tbWFuZCBlcnJvciBtZXNzYWdlcwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9lbmNyeXB0ZWRtZWRpYS9sZWdhY3kvTGVnYWN5Q0RNU2Vzc2lvbkNsZWFyS2V5LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL2xlZ2Fj
eS9MZWdhY3lDRE1TZXNzaW9uQ2xlYXJLZXkuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL2xlZ2FjeS9MZWdhY3lDRE1TZXNzaW9u
Q2xlYXJLZXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMDksNyArMTA5LDcgQEAgYm9vbCBDRE1TZXNz
aW9uQ2xlYXJLZXk6OnVwZGF0ZShVaW50OEFycgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KIAotICAgICAgICBhdXRvIGtleXNBcnJheVZhbHVlID0gYXNPYmplY3Qoa2V5c0RhdGFWYWx1
ZSktPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAia2V5cyIpKTsK
KyAgICAgICAgYXV0byBrZXlzQXJyYXlWYWx1ZSA9IGFzT2JqZWN0KGtleXNEYXRhVmFsdWUpLT5n
ZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAia2V5cyIpKTsKICAgICAgICAg
aWYgKHNjb3BlLmV4Y2VwdGlvbigpIHx8ICFpc0pTQXJyYXkoa2V5c0FycmF5VmFsdWUpKSB7CiAg
ICAgICAgICAgICBMT0coTWVkaWEsICJDRE1TZXNzaW9uQ2xlYXJLZXk6OnVwZGF0ZSglcCkgLSBm
YWlsZWQ6IGtleXMgYXJyYXkgbWlzc2luZyBvciBlbXB0eSIsIHRoaXMpOwogICAgICAgICAgICAg
YnJlYWs7CkBAIC0xMzMsOCArMTMzLDggQEAgYm9vbCBDRE1TZXNzaW9uQ2xlYXJLZXk6OnVwZGF0
ZShVaW50OEFycgogCiAgICAgICAgICAgICBhdXRvIGtleU9iamVjdCA9IGFzT2JqZWN0KGtleVZh
bHVlKTsKIAotICAgICAgICAgICAgYXV0byBnZXRTdHJpbmdQcm9wZXJ0eSA9IFsmc2NvcGUsICZz
dGF0ZSwgJmtleU9iamVjdF0oY29uc3QgY2hhciogbmFtZSkgLT4gU3RyaW5nIHsKLSAgICAgICAg
ICAgICAgICBhdXRvIHZhbHVlID0ga2V5T2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKCZzdGF0ZSwgbmFtZSkpOworICAgICAgICAgICAgYXV0byBnZXRTdHJpbmdQcm9w
ZXJ0eSA9IFsmc2NvcGUsICZzdGF0ZSwgJmtleU9iamVjdCwgJnZtXShjb25zdCBjaGFyKiBuYW1l
KSAtPiBTdHJpbmcgeworICAgICAgICAgICAgICAgIGF1dG8gdmFsdWUgPSBrZXlPYmplY3QtPmdl
dCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIG5hbWUpKTsKICAgICAgICAgICAg
ICAgICBpZiAoc2NvcGUuZXhjZXB0aW9uKCkgfHwgIXZhbHVlLmlzU3RyaW5nKCkpCiAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiB7IH07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
cGx1Z2lucy9RdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudC5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3BsdWdpbnMvUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQubW0J
KHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGx1Z2lucy9RdWlj
a1RpbWVQbHVnaW5SZXBsYWNlbWVudC5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE1NCw3ICsxNTQs
NyBAQCBib29sIFF1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50OjplbnN1cmVSCiAgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogICAgIEpTQzo6RXhlY1N0YXRlKiBleGVj
ID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CiAgICAgCi0gICAgSlNDOjpKU1ZhbHVlIHJl
cGxhY2VtZW50RnVuY3Rpb24gPSBnbG9iYWxPYmplY3QtPmdldChleGVjLCBKU0M6OklkZW50aWZp
ZXI6OmZyb21TdHJpbmcoZXhlYywgImNyZWF0ZVBsdWdpblJlcGxhY2VtZW50IikpOworICAgIEpT
Qzo6SlNWYWx1ZSByZXBsYWNlbWVudEZ1bmN0aW9uID0gZ2xvYmFsT2JqZWN0LT5nZXQoZXhlYywg
SlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiY3JlYXRlUGx1Z2luUmVwbGFjZW1lbnQi
KSk7CiAgICAgaWYgKHJlcGxhY2VtZW50RnVuY3Rpb24uaXNGdW5jdGlvbih2bSkpCiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIApAQCAtMTg1LDcgKzE4NSw3IEBAIGJvb2wgUXVpY2tUaW1lUGx1
Z2luUmVwbGFjZW1lbnQ6Omluc3RhbGwKICAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9IGdsb2Jh
bE9iamVjdC0+Z2xvYmFsRXhlYygpOwogCiAgICAgLy8gTG9va3VwIHRoZSAiY3JlYXRlUGx1Z2lu
UmVwbGFjZW1lbnQiIGZ1bmN0aW9uLgotICAgIEpTQzo6SlNWYWx1ZSByZXBsYWNlbWVudEZ1bmN0
aW9uID0gZ2xvYmFsT2JqZWN0LT5nZXQoZXhlYywgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KGV4ZWMsICJjcmVhdGVQbHVnaW5SZXBsYWNlbWVudCIpKTsKKyAgICBKU0M6OkpTVmFsdWUgcmVw
bGFjZW1lbnRGdW5jdGlvbiA9IGdsb2JhbE9iamVjdC0+Z2V0KGV4ZWMsIEpTQzo6SWRlbnRpZmll
cjo6ZnJvbVN0cmluZyh2bSwgImNyZWF0ZVBsdWdpblJlcGxhY2VtZW50IikpOwogICAgIGlmIChy
ZXBsYWNlbWVudEZ1bmN0aW9uLmlzVW5kZWZpbmVkT3JOdWxsKCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICBKU0M6OkpTT2JqZWN0KiByZXBsYWNlbWVudE9iamVjdCA9IHJlcGxhY2VtZW50
RnVuY3Rpb24udG9PYmplY3QoZXhlYyk7CkBAIC0yMDksNyArMjA5LDcgQEAgYm9vbCBRdWlja1Rp
bWVQbHVnaW5SZXBsYWNlbWVudDo6aW5zdGFsbAogICAgIH0KIAogICAgIC8vIEdldCB0aGUgPHZp
ZGVvPiBjcmVhdGVkIHRvIHJlcGxhY2UgdGhlIHBsdWctaW4uCi0gICAgSlNDOjpKU1ZhbHVlIHZh
bHVlID0gcmVwbGFjZW1lbnQuZ2V0KGV4ZWMsIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyhl
eGVjLCAidmlkZW8iKSk7CisgICAgSlNDOjpKU1ZhbHVlIHZhbHVlID0gcmVwbGFjZW1lbnQuZ2V0
KGV4ZWMsIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInZpZGVvIikpOwogICAgIGlm
ICghc2NvcGUuZXhjZXB0aW9uKCkgJiYgIXZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCiAgICAg
ICAgIG1fbWVkaWFFbGVtZW50ID0gSlNIVE1MVmlkZW9FbGVtZW50Ojp0b1dyYXBwZWQodm0sIHZh
bHVlKTsKIApAQCAtMjIwLDcgKzIyMCw3IEBAIGJvb2wgUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1l
bnQ6Omluc3RhbGwKICAgICB9CiAKICAgICAvLyBHZXQgdGhlIHNjcmlwdGluZyBpbnRlcmZhY2Uu
Ci0gICAgdmFsdWUgPSByZXBsYWNlbWVudC5nZXQoZXhlYywgSlNDOjpJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKGV4ZWMsICJzY3JpcHRPYmplY3QiKSk7CisgICAgdmFsdWUgPSByZXBsYWNlbWVudC5n
ZXQoZXhlYywgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAic2NyaXB0T2JqZWN0Iikp
OwogICAgIGlmICghc2NvcGUuZXhjZXB0aW9uKCkgJiYgIXZhbHVlLmlzVW5kZWZpbmVkT3JOdWxs
KCkpIHsKICAgICAgICAgbV9zY3JpcHRPYmplY3QgPSB2YWx1ZS50b09iamVjdChleGVjKTsKICAg
ICAgICAgc2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Fu
aW1hdGlvbi9LZXlmcmFtZUVmZmVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YW5pbWF0aW9uL0tleWZyYW1lRWZmZWN0LmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNl
L1dlYkNvcmUvYW5pbWF0aW9uL0tleWZyYW1lRWZmZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTIwOCw3ICsyMDgsNyBAQCBzdGF0aWMgaW5saW5lIEV4Y2VwdGlvbk9yPEtleWZyYW1lRWZmZWN0
CiAgICAgLy8gICAgICAgbmFtZSB0byBJREwgYXR0cmlidXRlIG5hbWUgYWxnb3JpdGhtLgogCiAg
ICAgLy8gMy4gTGV0IGlucHV0IHByb3BlcnRpZXMgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRo
ZSBFbnVtZXJhYmxlT3duTmFtZXMgb3BlcmF0aW9uIHdpdGgga2V5ZnJhbWUgaW5wdXQgYXMgdGhl
IG9iamVjdC4KLSAgICBQcm9wZXJ0eU5hbWVBcnJheSBpbnB1dFByb3BlcnRpZXMoJnZtLCBQcm9w
ZXJ0eU5hbWVNb2RlOjpTdHJpbmdzLCBQcml2YXRlU3ltYm9sTW9kZTo6RXhjbHVkZSk7CisgICAg
UHJvcGVydHlOYW1lQXJyYXkgaW5wdXRQcm9wZXJ0aWVzKHZtLCBQcm9wZXJ0eU5hbWVNb2RlOjpT
dHJpbmdzLCBQcml2YXRlU3ltYm9sTW9kZTo6RXhjbHVkZSk7CiAgICAgSlNPYmplY3Q6OmdldE93
blByb3BlcnR5TmFtZXMoa2V5ZnJhbWVzSW5wdXQuZ2V0KCksICZzdGF0ZSwgaW5wdXRQcm9wZXJ0
aWVzLCBFbnVtZXJhdGlvbk1vZGUoKSk7CiAKICAgICAvLyA0LiBNYWtlIHVwIGEgbmV3IGxpc3Qg
YW5pbWF0aW9uIHByb3BlcnRpZXMgdGhhdCBjb25zaXN0cyBvZiBhbGwgb2YgdGhlIHByb3BlcnRp
ZXMgdGhhdCBhcmUgaW4gYm90aCBpbnB1dCBwcm9wZXJ0aWVzIGFuZCBhbmltYXRhYmxlCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9HQ0NvbnRyb2xsZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0dDQ29udHJvbGxlci5jcHAJKHJldmlzaW9u
IDI0OTEyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0dDQ29udHJvbGxlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3
LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA3LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0xNTAsNyArMTUwLDcgQEAgdm9pZCBHQ0NvbnRyb2xsZXI6OmR1
bXBIZWFwKCkKICAgICBWTSYgdm0gPSBjb21tb25WTSgpOwogICAgIEpTTG9ja0hvbGRlciBsb2Nr
KHZtKTsKIAotICAgIHNhbml0aXplU3RhY2tGb3JWTSgmdm0pOworICAgIHNhbml0aXplU3RhY2tG
b3JWTSh2bSk7CiAKICAgICBTdHJpbmcganNvbkRhdGE7CiAgICAgewpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSURCQmluZGluZ1V0aWxpdGllcy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSURCQmluZGluZ1V0aWxpdGllcy5jcHAJKHJldmlz
aW9uIDI0OTEyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0lEQkJpbmRpbmdVdGls
aXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIENvcHlyaWdo
dCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0
IChDKSAyMDEyIE1pY2hhZWwgUHJ1ZXR0IDxtaWNoYWVsQDY4ay5vcmc+Ci0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQsIDIwMTUsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE0LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02Niw5ICs2Niw5IEBAIHN0YXRpYyBi
b29sIGdldChFeGVjU3RhdGUmIGV4ZWMsIEpTVmFsdWUKICAgICBpZiAoIW9iamVjdC5pc09iamVj
dCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICBWTSYgdm0gPSBleGVjLnZtKCk7CiAg
ICAgYXV0byogb2JqID0gYXNPYmplY3Qob2JqZWN0KTsKLSAgICBJZGVudGlmaWVyIGlkZW50aWZp
ZXIgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZleGVjLnZtKCksIGtleVBhdGhFbGVtZW50KTsK
LSAgICBhdXRvJiB2bSA9IGV4ZWMudm0oKTsKKyAgICBJZGVudGlmaWVyIGlkZW50aWZpZXIgPSBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBrZXlQYXRoRWxlbWVudCk7CiAgICAgaWYgKG9iai0+
aW5oZXJpdHM8SlNBcnJheT4odm0pICYmIGtleVBhdGhFbGVtZW50ID09ICJsZW5ndGgiKSB7CiAg
ICAgICAgIHJlc3VsdCA9IG9iai0+Z2V0KCZleGVjLCBpZGVudGlmaWVyKTsKICAgICAgICAgcmV0
dXJuIHRydWU7CkBAIC03OSwxMyArNzksMTMgQEAgc3RhdGljIGJvb2wgZ2V0KEV4ZWNTdGF0ZSYg
ZXhlYywgSlNWYWx1ZQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICAg
ICAgaWYgKGtleVBhdGhFbGVtZW50ID09ICJ0eXBlIikgewotICAgICAgICAgICAgcmVzdWx0ID0g
anNTdHJpbmcoJnZtLCBqc0Nhc3Q8SlNCbG9iKj4ob2JqKS0+d3JhcHBlZCgpLnR5cGUoKSk7Cisg
ICAgICAgICAgICByZXN1bHQgPSBqc1N0cmluZyh2bSwganNDYXN0PEpTQmxvYio+KG9iaiktPndy
YXBwZWQoKS50eXBlKCkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAg
ICB9CiAgICAgaWYgKG9iai0+aW5oZXJpdHM8SlNGaWxlPih2bSkpIHsKICAgICAgICAgaWYgKGtl
eVBhdGhFbGVtZW50ID09ICJuYW1lIikgewotICAgICAgICAgICAgcmVzdWx0ID0ganNTdHJpbmco
JnZtLCBqc0Nhc3Q8SlNGaWxlKj4ob2JqKS0+d3JhcHBlZCgpLm5hbWUoKSk7CisgICAgICAgICAg
ICByZXN1bHQgPSBqc1N0cmluZyh2bSwganNDYXN0PEpTRmlsZSo+KG9iaiktPndyYXBwZWQoKS5u
YW1lKCkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICAgICAgaWYg
KGtleVBhdGhFbGVtZW50ID09ICJsYXN0TW9kaWZpZWQiKSB7CkBAIC0xMTgsOCArMTE4LDkgQEAg
c3RhdGljIGJvb2wgc2V0KEV4ZWNTdGF0ZSYgZXhlYywgSlNWYWx1ZQogewogICAgIGlmICghY2Fu
U2V0KG9iamVjdCwga2V5UGF0aEVsZW1lbnQpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
SWRlbnRpZmllciBpZGVudGlmaWVyID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmZXhlYy52bSgp
LCBrZXlQYXRoRWxlbWVudCk7Ci0gICAgYXNPYmplY3Qob2JqZWN0KS0+cHV0RGlyZWN0KGV4ZWMu
dm0oKSwgaWRlbnRpZmllciwganNWYWx1ZSk7CisgICAgVk0mIHZtID0gZXhlYy52bSgpOworICAg
IElkZW50aWZpZXIgaWRlbnRpZmllciA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIGtleVBh
dGhFbGVtZW50KTsKKyAgICBhc09iamVjdChvYmplY3QpLT5wdXREaXJlY3Qodm0sIGlkZW50aWZp
ZXIsIGpzVmFsdWUpOwogICAgIHJldHVybiB0cnVlOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0NTU1J1bGVMaXN0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1J1bGVMaXN0Q3VzdG9tLmNwcAkocmV2aXNpb24g
MjQ5MTI4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDU1NSdWxlTGlzdEN1c3Rv
bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA5LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHQgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTM5LDcgKzM5LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIGJv
b2wgSlNDU1NSdWxlTGlzdE93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6Okhh
bmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBj
b25zdCBjaGFyKiogcmVhc29uKQogewogICAgIEpTQ1NTUnVsZUxpc3QqIGpzQ1NTUnVsZUxpc3Qg
PSBqc0Nhc3Q8SlNDU1NSdWxlTGlzdCo+KGhhbmRsZS5zbG90KCktPmFzQ2VsbCgpKTsKLSAgICBp
ZiAoIWpzQ1NTUnVsZUxpc3QtPmhhc0N1c3RvbVByb3BlcnRpZXMoKmpzQ1NTUnVsZUxpc3QtPnZt
KCkpKQorICAgIGlmICghanNDU1NSdWxlTGlzdC0+aGFzQ3VzdG9tUHJvcGVydGllcyhqc0NTU1J1
bGVMaXN0LT52bSgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKENTU1N0eWxl
U2hlZXQqIHN0eWxlU2hlZXQgPSBqc0NTU1J1bGVMaXN0LT53cmFwcGVkKCkuc3R5bGVTaGVldCgp
KSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbUVsZW1lbnRSZWdp
c3RyeUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNDdXN0b21FbGVtZW50UmVnaXN0cnlDdXN0b20uY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbUVsZW1lbnRSZWdpc3RyeUN1c3RvbS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE1LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0xMjksMjUgKzEyOSwyNSBAQCBKU1ZhbHVlIEpTQ3VzdG9t
RWxlbWVudFJlZ2lzdHJ5OjpkZWZpbmUoCiAgICAgUXVhbGlmaWVkTmFtZSBuYW1lKG51bGxBdG9t
KCksIGxvY2FsTmFtZSwgSFRNTE5hbWVzOjp4aHRtbE5hbWVzcGFjZVVSSSk7CiAgICAgYXV0byBl
bGVtZW50SW50ZXJmYWNlID0gSlNDdXN0b21FbGVtZW50SW50ZXJmYWNlOjpjcmVhdGUobmFtZSwg
Y29uc3RydWN0b3IsIGdsb2JhbE9iamVjdCgpKTsKIAotICAgIGF1dG8qIGNvbm5lY3RlZENhbGxi
YWNrID0gZ2V0Q3VzdG9tRWxlbWVudENhbGxiYWNrKHN0YXRlLCBwcm90b3R5cGVPYmplY3QsIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiY29ubmVjdGVkQ2FsbGJhY2siKSk7CisgICAgYXV0
byogY29ubmVjdGVkQ2FsbGJhY2sgPSBnZXRDdXN0b21FbGVtZW50Q2FsbGJhY2soc3RhdGUsIHBy
b3RvdHlwZU9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImNvbm5lY3RlZENhbGxi
YWNrIikpOwogICAgIGlmIChjb25uZWN0ZWRDYWxsYmFjaykKICAgICAgICAgZWxlbWVudEludGVy
ZmFjZS0+c2V0Q29ubmVjdGVkQ2FsbGJhY2soY29ubmVjdGVkQ2FsbGJhY2spOwogICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIEpTVmFsdWUoKSk7CiAKLSAgICBhdXRvKiBkaXNjb25uZWN0
ZWRDYWxsYmFjayA9IGdldEN1c3RvbUVsZW1lbnRDYWxsYmFjayhzdGF0ZSwgcHJvdG90eXBlT2Jq
ZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImRpc2Nvbm5lY3RlZENhbGxiYWNrIikp
OworICAgIGF1dG8qIGRpc2Nvbm5lY3RlZENhbGxiYWNrID0gZ2V0Q3VzdG9tRWxlbWVudENhbGxi
YWNrKHN0YXRlLCBwcm90b3R5cGVPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJk
aXNjb25uZWN0ZWRDYWxsYmFjayIpKTsKICAgICBpZiAoZGlzY29ubmVjdGVkQ2FsbGJhY2spCiAg
ICAgICAgIGVsZW1lbnRJbnRlcmZhY2UtPnNldERpc2Nvbm5lY3RlZENhbGxiYWNrKGRpc2Nvbm5l
Y3RlZENhbGxiYWNrKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkp
OwogCi0gICAgYXV0byogYWRvcHRlZENhbGxiYWNrID0gZ2V0Q3VzdG9tRWxlbWVudENhbGxiYWNr
KHN0YXRlLCBwcm90b3R5cGVPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiYWRv
cHRlZENhbGxiYWNrIikpOworICAgIGF1dG8qIGFkb3B0ZWRDYWxsYmFjayA9IGdldEN1c3RvbUVs
ZW1lbnRDYWxsYmFjayhzdGF0ZSwgcHJvdG90eXBlT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKHZtLCAiYWRvcHRlZENhbGxiYWNrIikpOwogICAgIGlmIChhZG9wdGVkQ2FsbGJhY2spCiAg
ICAgICAgIGVsZW1lbnRJbnRlcmZhY2UtPnNldEFkb3B0ZWRDYWxsYmFjayhhZG9wdGVkQ2FsbGJh
Y2spOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTVmFsdWUoKSk7CiAKLSAgICBh
dXRvKiBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2sgPSBnZXRDdXN0b21FbGVtZW50Q2FsbGJhY2so
c3RhdGUsIHByb3RvdHlwZU9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJhdHRy
aWJ1dGVDaGFuZ2VkQ2FsbGJhY2siKSk7CisgICAgYXV0byogYXR0cmlidXRlQ2hhbmdlZENhbGxi
YWNrID0gZ2V0Q3VzdG9tRWxlbWVudENhbGxiYWNrKHN0YXRlLCBwcm90b3R5cGVPYmplY3QsIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2siKSk7CiAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZSgpKTsKICAgICBpZiAoYXR0cmli
dXRlQ2hhbmdlZENhbGxiYWNrKSB7Ci0gICAgICAgIGF1dG8gb2JzZXJ2ZWRBdHRyaWJ1dGVzVmFs
dWUgPSBjb25zdHJ1Y3Rvci0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3Rh
dGUsICJvYnNlcnZlZEF0dHJpYnV0ZXMiKSk7CisgICAgICAgIGF1dG8gb2JzZXJ2ZWRBdHRyaWJ1
dGVzVmFsdWUgPSBjb25zdHJ1Y3Rvci0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zyh2bSwgIm9ic2VydmVkQXR0cmlidXRlcyIpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgSlNWYWx1ZSgpKTsKICAgICAgICAgaWYgKCFvYnNlcnZlZEF0dHJpYnV0ZXNWYWx1
ZS5pc1VuZGVmaW5lZCgpKSB7CiAgICAgICAgICAgICBhdXRvIG9ic2VydmVkQXR0cmlidXRlcyA9
IGNvbnZlcnQ8SURMU2VxdWVuY2U8SURMRE9NU3RyaW5nPj4oc3RhdGUsIG9ic2VydmVkQXR0cmli
dXRlc1ZhbHVlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tWFBh
dGhOU1Jlc29sdmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0N1c3RvbVhQYXRoTlNSZXNvbHZlci5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMTMg
QWxleGV5IFByb3NrdXJ5YWtvdiAoYXBAbnlwb3AuY29tKQorICogQ29weXJpZ2h0IChDKSAyMDE5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtNzIsNyArNzMsNyBAQCBTdHJpbmcgSlNDdXN0b21YUGF0aE5TUmVzb2x2ZXI6
Omxvb2t1cE5hCiAgICAgRXhlY1N0YXRlKiBleGVjID0gbV9nbG9iYWxPYmplY3QtPmdsb2JhbEV4
ZWMoKTsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgICAgICAKLSAgICBKU1ZhbHVlIGZ1
bmN0aW9uID0gbV9jdXN0b21SZXNvbHZlci0+Z2V0KGV4ZWMsIElkZW50aWZpZXI6OmZyb21TdHJp
bmcoZXhlYywgImxvb2t1cE5hbWVzcGFjZVVSSSIpKTsKKyAgICBKU1ZhbHVlIGZ1bmN0aW9uID0g
bV9jdXN0b21SZXNvbHZlci0+Z2V0KGV4ZWMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJs
b29rdXBOYW1lc3BhY2VVUkkiKSk7CiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5
cGUgY2FsbFR5cGUgPSBnZXRDYWxsRGF0YSh2bSwgZnVuY3Rpb24sIGNhbGxEYXRhKTsKICAgICBp
ZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGU6Ok5vbmUpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRE9NQ29udmVydFJlY29yZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydFJlY29yZC5oCShyZXZpc2lvbiAyNDkxMjgpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRSZWNvcmQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAx
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTg1LDcgKzg1LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgSywgdHlwZW5hbWUg
Vj4gc3RydWN0IAogICAgICAgICBSZXR1cm5UeXBlIHJlc3VsdDsKICAgICAKICAgICAgICAgLy8g
NC4gTGV0IGtleXMgYmUgPyBPLltbT3duUHJvcGVydHlLZXlzXV0oKS4KLSAgICAgICAgSlNDOjpQ
cm9wZXJ0eU5hbWVBcnJheSBrZXlzKCZ2bSwgSlNDOjpQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdz
LCBKU0M6OlByaXZhdGVTeW1ib2xNb2RlOjpFeGNsdWRlKTsKKyAgICAgICAgSlNDOjpQcm9wZXJ0
eU5hbWVBcnJheSBrZXlzKHZtLCBKU0M6OlByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3MsIEpTQzo6
UHJpdmF0ZVN5bWJvbE1vZGU6OkV4Y2x1ZGUpOwogICAgICAgICBvYmplY3QtPm1ldGhvZFRhYmxl
KHZtKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsICZzdGF0ZSwga2V5cywgSlNDOjpFbnVt
ZXJhdGlvbk1vZGUoSlNDOjpEb250RW51bVByb3BlcnRpZXNNb2RlOjpJbmNsdWRlKSk7CiAKICAg
ICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKQEAgLTE1MCw3ICsxNTAsNyBA
QCB0ZW1wbGF0ZTx0eXBlbmFtZSBLLCB0eXBlbmFtZSBWPiBzdHJ1Y3QgCiAgICAgICAgICAgICBh
dXRvIGVzVmFsdWUgPSB0b0pTPFY+KHN0YXRlLCBnbG9iYWxPYmplY3QsIGtleVZhbHVlUGFpci52
YWx1ZSk7CiAKICAgICAgICAgICAgIC8vIDMuIExldCBjcmVhdGVkIGJlICEgQ3JlYXRlRGF0YVBy
b3BlcnR5KHJlc3VsdCwgZXNLZXksIGVzVmFsdWUpLgotICAgICAgICAgICAgYm9vbCBjcmVhdGVk
ID0gcmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0s
IGtleVZhbHVlUGFpci5rZXkpLCBlc1ZhbHVlKTsKKyAgICAgICAgICAgIGJvb2wgY3JlYXRlZCA9
IHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIGtl
eVZhbHVlUGFpci5rZXkpLCBlc1ZhbHVlKTsKIAogICAgICAgICAgICAgLy8gNC4gQXNzZXJ0OiBj
cmVhdGVkIGlzIHRydWUuCiAgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGNyZWF0ZWQsIGNyZWF0
ZWQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0U3RyaW5n
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVy
dFN0cmluZ3MuaAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNET01Db252ZXJ0U3RyaW5ncy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY4LDEyICs2OCwxMiBAQCB0
ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExET01TdHJpCiAKICAgICBzdGF0aWMgSlND
OjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBVbmNhY2hlZFN0
cmluZyYgdmFsdWUpCiAgICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc1N0cmluZygmc3RhdGUs
IHZhbHVlLnN0cmluZyk7CisgICAgICAgIHJldHVybiBKU0M6OmpzU3RyaW5nKHN0YXRlLnZtKCks
IHZhbHVlLnN0cmluZyk7CiAgICAgfQogCiAgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgT3duZWRTdHJpbmcmIHZhbHVlKQogICAgIHsK
LSAgICAgICAgcmV0dXJuIEpTQzo6anNPd25lZFN0cmluZygmc3RhdGUsIHZhbHVlLnN0cmluZyk7
CisgICAgICAgIHJldHVybiBKU0M6OmpzT3duZWRTdHJpbmcoc3RhdGUudm0oKSwgdmFsdWUuc3Ry
aW5nKTsKICAgICB9CiB9OwogCkBAIC05NSwxMiArOTUsMTIgQEAgdGVtcGxhdGU8PiBzdHJ1Y3Qg
SlNDb252ZXJ0ZXI8SURMQnl0ZVN0cgogCiAgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgVW5jYWNoZWRTdHJpbmcmIHZhbHVlKQogICAg
IHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNTdHJpbmcoJnN0YXRlLCB2YWx1ZS5zdHJpbmcpOwor
ICAgICAgICByZXR1cm4gSlNDOjpqc1N0cmluZyhzdGF0ZS52bSgpLCB2YWx1ZS5zdHJpbmcpOwog
ICAgIH0KIAogICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIGNvbnN0IE93bmVkU3RyaW5nJiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBK
U0M6OmpzT3duZWRTdHJpbmcoJnN0YXRlLCB2YWx1ZS5zdHJpbmcpOworICAgICAgICByZXR1cm4g
SlNDOjpqc093bmVkU3RyaW5nKHN0YXRlLnZtKCksIHZhbHVlLnN0cmluZyk7CiAgICAgfQogfTsK
IApAQCAtMTIyLDEyICsxMjIsMTIgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURM
VVNWU3RyaQogCiAgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgY29uc3QgVW5jYWNoZWRTdHJpbmcmIHZhbHVlKQogICAgIHsKLSAgICAgICAgcmV0
dXJuIEpTQzo6anNTdHJpbmcoJnN0YXRlLCB2YWx1ZS5zdHJpbmcpOworICAgICAgICByZXR1cm4g
SlNDOjpqc1N0cmluZyhzdGF0ZS52bSgpLCB2YWx1ZS5zdHJpbmcpOwogICAgIH0KIAogICAgIHN0
YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IE93
bmVkU3RyaW5nJiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzT3duZWRTdHJp
bmcoJnN0YXRlLCB2YWx1ZS5zdHJpbmcpOworICAgICAgICByZXR1cm4gSlNDOjpqc093bmVkU3Ry
aW5nKHN0YXRlLnZtKCksIHZhbHVlLnN0cmluZyk7CiAgICAgfQogfTsKIApJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAkocmV2aXNp
b24gMjQ5MTI4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0
b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwNy0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHly
aWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKQEAgLTIzNiw2ICsyMzYsNyBAQCBib29sIEpTRE9NV2luZG93OjpnZXRPd25Qcm9wZXJ0eVNs
b3QoSlNPCiAvLyAoMykgbmFtZWQgcHJvcGVydGllcyAoaW4gZmFjdCwgdGhlc2Ugc2hvdWxkbid0
IGJlIG9uIHRoZSB3aW5kb3csIHNob3VsZCBiZSBvbiB0aGUgTlBPKS4KIGJvb2wgSlNET01XaW5k
b3c6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRl
KiBzdGF0ZSwgdW5zaWduZWQgaW5kZXgsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKKyAgICBWTSYg
dm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTRE9NV2lu
ZG93Kj4ob2JqZWN0KTsKICAgICBhdXRvJiB3aW5kb3cgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7
CiAgICAgYXV0byogZnJhbWUgPSB3aW5kb3cuZnJhbWUoKTsKQEAgLTI2MCw3ICsyNjEsNyBAQCBi
b29sIEpTRE9NV2luZG93OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluCiAKICAgICAvLyBIYW5kIG9m
ZiBhbGwgY3Jvc3MtZG9tYWluL2ZyYW1lbGVzcyBhY2Nlc3MgdG8ganNET01XaW5kb3dHZXRPd25Q
cm9wZXJ0eVNsb3RSZXN0cmljdGVkQWNjZXNzLgogICAgIGlmIChpc0Nyb3NzT3JpZ2luQWNjZXNz
KCkpCi0gICAgICAgIHJldHVybiBqc0RPTVdpbmRvd0dldE93blByb3BlcnR5U2xvdFJlc3RyaWN0
ZWRBY2Nlc3M8RE9NV2luZG93VHlwZTo6TG9jYWw+KHRoaXNPYmplY3QsIHdpbmRvdywgKnN0YXRl
LCBJZGVudGlmaWVyOjpmcm9tKHN0YXRlLCBpbmRleCksIHNsb3QsIGVycm9yTWVzc2FnZSk7Cisg
ICAgICAgIHJldHVybiBqc0RPTVdpbmRvd0dldE93blByb3BlcnR5U2xvdFJlc3RyaWN0ZWRBY2Nl
c3M8RE9NV2luZG93VHlwZTo6TG9jYWw+KHRoaXNPYmplY3QsIHdpbmRvdywgKnN0YXRlLCBJZGVu
dGlmaWVyOjpmcm9tKHZtLCBpbmRleCksIHNsb3QsIGVycm9yTWVzc2FnZSk7CiAKICAgICAvLyAo
MikgUmVndWxhciBvd24gcHJvcGVydGllcy4KICAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVy
dHlTbG90QnlJbmRleCh0aGlzT2JqZWN0LCBzdGF0ZSwgaW5kZXgsIHNsb3QpOwpAQCAtNDAyLDkg
KzQwMywxMCBAQCBzdGF0aWMgdm9pZCBhZGRTY29wZWRDaGlsZHJlbkluZGV4ZXMoRXhlCiAgICAg
aWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuOwogCisgICAgVk0mIHZtID0gc3RhdGUudm0oKTsK
ICAgICB1bnNpZ25lZCBzY29wZWRDaGlsZENvdW50ID0gZnJhbWUtPnRyZWUoKS5zY29wZWRDaGls
ZENvdW50KCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNjb3BlZENoaWxkQ291bnQ7
ICsraSkKLSAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbSgmc3RhdGUs
IGkpKTsKKyAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbSh2bSwgaSkp
OwogfQogCiAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnLyN3aW5kb3dwcm94eS1vd25w
cm9wZXJ0eWtleXMKQEAgLTQyNCwxMyArNDI2LDE0IEBAIHZvaWQgSlNET01XaW5kb3c6OmdldE93
blByb3BlcnR5TmFtZXMoSlMKIAogYm9vbCBKU0RPTVdpbmRvdzo6ZGVmaW5lT3duUHJvcGVydHko
SlNDOjpKU09iamVjdCogb2JqZWN0LCBKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpQcm9wZXJ0
eU5hbWUgcHJvcGVydHlOYW1lLCBjb25zdCBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3Jp
cHRvciwgYm9vbCBzaG91bGRUaHJvdykKIHsKKyAgICBKU0M6OlZNJiB2bSA9IGV4ZWMtPnZtKCk7
CiAgICAgSlNET01XaW5kb3cqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNET01XaW5kb3cqPihvYmpl
Y3QpOwogICAgIC8vIE9ubHkgYWxsb3cgZGVmaW5pbmcgcHJvcGVydGllcyBpbiB0aGlzIHdheSBi
eSBmcmFtZXMgaW4gdGhlIHNhbWUgb3JpZ2luLCBhcyBpdCBhbGxvd3Mgc2V0dGVycyB0byBiZSBp
bnRyb2R1Y2VkLgogICAgIGlmICghQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1Rv
RE9NV2luZG93KGV4ZWMsIHRoaXNPYmplY3QtPndyYXBwZWQoKSwgVGhyb3dTZWN1cml0eUVycm9y
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gRG9uJ3QgYWxsb3cgc2hhZG93aW5n
IGxvY2F0aW9uIHVzaW5nIGFjY2Vzc29yIHByb3BlcnRpZXMuCi0gICAgaWYgKGRlc2NyaXB0b3Iu
aXNBY2Nlc3NvckRlc2NyaXB0b3IoKSAmJiBwcm9wZXJ0eU5hbWUgPT0gSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyhleGVjLCAibG9jYXRpb24iKSkKKyAgICBpZiAoZGVzY3JpcHRvci5pc0FjY2Vzc29y
RGVzY3JpcHRvcigpICYmIHByb3BlcnR5TmFtZSA9PSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZt
LCAibG9jYXRpb24iKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuIEJhc2U6
OmRlZmluZU93blByb3BlcnR5KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3Jp
cHRvciwgc2hvdWxkVGhyb3cpOwpAQCAtNDkwLDIxICs0OTMsMjMgQEAgcHJpdmF0ZToKIAogaW5s
aW5lIHZvaWQgRGlhbG9nSGFuZGxlcjo6ZGlhbG9nQ3JlYXRlZChET01XaW5kb3cmIGRpYWxvZykK
IHsKKyAgICBWTSYgdm0gPSBtX2V4ZWMudm0oKTsKICAgICBtX2ZyYW1lID0gZGlhbG9nLmZyYW1l
KCk7CiAgICAgCiAgICAgLy8gRklYTUU6IFRoaXMgbG9va3MgbGlrZSBhIGxlYWsgYmV0d2VlbiB0
aGUgbm9ybWFsIHdvcmxkIGFuZCBhbiBpc29sYXRlZAogICAgIC8vICAgICAgICB3b3JsZCBpZiBk
aWFsb2dBcmd1bWVudHMgY29tZXMgZnJvbSBhbiBpc29sYXRlZCB3b3JsZC4KLSAgICBKU0RPTVdp
bmRvdyogZ2xvYmFsT2JqZWN0ID0gdG9KU0RPTVdpbmRvdyhtX2ZyYW1lLmdldCgpLCBub3JtYWxX
b3JsZChtX2V4ZWMudm0oKSkpOworICAgIEpTRE9NV2luZG93KiBnbG9iYWxPYmplY3QgPSB0b0pT
RE9NV2luZG93KG1fZnJhbWUuZ2V0KCksIG5vcm1hbFdvcmxkKHZtKSk7CiAgICAgaWYgKEpTVmFs
dWUgZGlhbG9nQXJndW1lbnRzID0gbV9leGVjLmFyZ3VtZW50KDEpKQotICAgICAgICBnbG9iYWxP
YmplY3QtPnB1dERpcmVjdChtX2V4ZWMudm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmbV9l
eGVjLCAiZGlhbG9nQXJndW1lbnRzIiksIGRpYWxvZ0FyZ3VtZW50cyk7CisgICAgICAgIGdsb2Jh
bE9iamVjdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiZGlhbG9n
QXJndW1lbnRzIiksIGRpYWxvZ0FyZ3VtZW50cyk7CiB9CiAKIGlubGluZSBKU1ZhbHVlIERpYWxv
Z0hhbmRsZXI6OnJldHVyblZhbHVlKCkgY29uc3QKIHsKLSAgICBKU0RPTVdpbmRvdyogZ2xvYmFs
T2JqZWN0ID0gdG9KU0RPTVdpbmRvdyhtX2ZyYW1lLmdldCgpLCBub3JtYWxXb3JsZChtX2V4ZWMu
dm0oKSkpOworICAgIFZNJiB2bSA9IG1fZXhlYy52bSgpOworICAgIEpTRE9NV2luZG93KiBnbG9i
YWxPYmplY3QgPSB0b0pTRE9NV2luZG93KG1fZnJhbWUuZ2V0KCksIG5vcm1hbFdvcmxkKHZtKSk7
CiAgICAgaWYgKCFnbG9iYWxPYmplY3QpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwot
ICAgIElkZW50aWZpZXIgaWRlbnRpZmllciA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJm1fZXhl
YywgInJldHVyblZhbHVlIik7CisgICAgSWRlbnRpZmllciBpZGVudGlmaWVyID0gSWRlbnRpZmll
cjo6ZnJvbVN0cmluZyh2bSwgInJldHVyblZhbHVlIik7CiAgICAgUHJvcGVydHlTbG90IHNsb3Qo
Z2xvYmFsT2JqZWN0LCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6R2V0KTsKICAg
ICBpZiAoIUpTR2xvYmFsT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QoZ2xvYmFsT2JqZWN0LCAm
bV9leGVjLCBpZGVudGlmaWVyLCBzbG90KSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CkBAIC01NzMsNyArNTc4LDggQEAgdm9pZCBKU0RPTVdpbmRvdzo6c2V0T3BlbmVyKEpTQzo6RXhl
Y1N0YQogICAgICAgICB3cmFwcGVkKCkuZGlzb3duT3BlbmVyKCk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9Ci0gICAgcmVwbGFjZVN0YXRpY1Byb3BlcnR5U2xvdChzdGF0ZS52bSgpLCB0aGlzLCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZS52bSgpLCAib3BlbmVyIiksIHZhbHVlKTsKKyAg
ICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIHJlcGxhY2VTdGF0aWNQcm9wZXJ0eVNsb3Qodm0s
IHRoaXMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJvcGVuZXIiKSwgdmFsdWUpOwogfQog
CiBKU1ZhbHVlIEpTRE9NV2luZG93OjpzZWxmKEpTQzo6RXhlY1N0YXRlJikgY29uc3QKQEAgLTY0
NSw3ICs2NTEsOCBAQCB2b2lkIEpTRE9NV2luZG93OjpzZXRPcGVuRGF0YWJhc2UoSlNDOjpFCiAg
ICAgaWYgKCFCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3coJnN0
YXRlLCB3cmFwcGVkKCksIFRocm93U2VjdXJpdHlFcnJvcikpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIHJlcGxhY2VTdGF0aWNQcm9wZXJ0eVNsb3Qoc3RhdGUudm0oKSwgdGhpcywgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZygmc3RhdGUudm0oKSwgIm9wZW5EYXRhYmFzZSIpLCB2YWx1ZSk7CisgICAg
Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICByZXBsYWNlU3RhdGljUHJvcGVydHlTbG90KHZtLCB0
aGlzLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAib3BlbkRhdGFiYXNlIiksIHZhbHVlKTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01XaW5kb3dQcm9wZXJ0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd1Byb3BlcnRpZXMuY3BwCShyZXZpc2lvbiAyNDkx
MjgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd1Byb3BlcnRpZXMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTYtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTEwNCw3ICsxMDQsOCBAQCBib29sIEpTRE9NV2luZG93UHJvcGVy
dGllczo6Z2V0T3duUHJvcGVyCiAKIGJvb2wgSlNET01XaW5kb3dQcm9wZXJ0aWVzOjpnZXRPd25Q
cm9wZXJ0eVNsb3RCeUluZGV4KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogc3RhdGUsIHVu
c2lnbmVkIGluZGV4LCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7Ci0gICAgcmV0dXJuIGdldE93blBy
b3BlcnR5U2xvdChvYmplY3QsIHN0YXRlLCBJZGVudGlmaWVyOjpmcm9tKHN0YXRlLCBpbmRleCks
IHNsb3QpOworICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOworICAgIHJldHVybiBnZXRPd25Qcm9w
ZXJ0eVNsb3Qob2JqZWN0LCBzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbSh2bSwgaW5kZXgpLCBzbG90
KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNEZXByZWNhdGVkQ1NTT01WYWx1ZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEZXByZWNhdGVkQ1NTT01WYWx1ZUN1c3RvbS5j
cHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGVw
cmVjYXRlZENTU09NVmFsdWVDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM4LDcgKzM4
LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIGJvb2wgSlNEZXByZWNhdGVkQ1NTT01WYWx1ZU93
bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+
IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29u
KQogewogICAgIEpTRGVwcmVjYXRlZENTU09NVmFsdWUqIGpzQ1NTVmFsdWUgPSBqc0Nhc3Q8SlNE
ZXByZWNhdGVkQ1NTT01WYWx1ZSo+KGhhbmRsZS5zbG90KCktPmFzQ2VsbCgpKTsKLSAgICBpZiAo
IWpzQ1NTVmFsdWUtPmhhc0N1c3RvbVByb3BlcnRpZXMoKmpzQ1NTVmFsdWUtPnZtKCkpKQorICAg
IGlmICghanNDU1NWYWx1ZS0+aGFzQ3VzdG9tUHJvcGVydGllcyhqc0NTU1ZhbHVlLT52bSgpKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKFVOTElLRUxZKHJlYXNvbikpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5jcHAJKHJl
dmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0
ZW5lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdo
dCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICogIENvcHlyaWdodCAoQykg
MjAwMy0yMDE4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQg
KEMpIDIwMDMtMjAxOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCkBAIC0xMzksNyArMTM5LDcgQEAgdm9pZCBKU0V2ZW50TGlzdGVuZXI6OmhhbmRs
ZUV2ZW50KFNjcmlwdAogCiAgICAgLy8gSWYganNGdW5jdGlvbiBpcyBub3QgYWN0dWFsbHkgYSBm
dW5jdGlvbiwgc2VlIGlmIGl0IGltcGxlbWVudHMgdGhlIEV2ZW50TGlzdGVuZXIgaW50ZXJmYWNl
IGFuZCB1c2UgdGhhdAogICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZTo6Tm9uZSkgewotICAg
ICAgICBoYW5kbGVFdmVudEZ1bmN0aW9uID0ganNGdW5jdGlvbi0+Z2V0KGV4ZWMsIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcoZXhlYywgImhhbmRsZUV2ZW50IikpOworICAgICAgICBoYW5kbGVFdmVu
dEZ1bmN0aW9uID0ganNGdW5jdGlvbi0+Z2V0KGV4ZWMsIElkZW50aWZpZXI6OmZyb21TdHJpbmco
dm0sICJoYW5kbGVFdmVudCIpKTsKICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkgewogICAgICAgICAgICAgYXV0byogZXhjZXB0aW9uID0gc2NvcGUuZXhjZXB0aW9uKCk7
CiAgICAgICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNJbWFnZURhdGFDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW1hZ2VEYXRhQ3VzdG9tLmNwcAkocmV2aXNpb24gMjQ5
MTI4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbWFnZURhdGFDdXN0b20uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
OCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgt
MjAxOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTQzLDcgKzQzLDcgQEAgSlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEV4
ZWNTdGF0ZSogc3RhdAogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8qIGRhdGEg
PSBpbWFnZURhdGEtPmRhdGEoKTsKICAgICBhdXRvKiB3cmFwcGVyID0gY3JlYXRlV3JhcHBlcjxJ
bWFnZURhdGE+KGdsb2JhbE9iamVjdCwgV1RGTW92ZShpbWFnZURhdGEpKTsKLSAgICBJZGVudGlm
aWVyIGRhdGFOYW1lID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhzdGF0ZSwgImRhdGEiKTsKKyAg
ICBJZGVudGlmaWVyIGRhdGFOYW1lID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImRhdGEi
KTsKICAgICB3cmFwcGVyLT5wdXREaXJlY3Qodm0sIGRhdGFOYW1lLCB0b0pTKHN0YXRlLCBnbG9i
YWxPYmplY3QsIGRhdGEpLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IFByb3BlcnR5
QXR0cmlidXRlOjpSZWFkT25seSk7CiAgICAgLy8gRklYTUU6IEFkb3B0IHJlcG9ydEV4dHJhTWVt
b3J5VmlzaXRlZCwgYW5kIHN3aXRjaCB0byByZXBvcnRFeHRyYU1lbW9yeUFsbG9jYXRlZC4KICAg
ICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQyNTk1CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0xhenlFdmVudExpc3RlbmVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0xhenlFdmVudExpc3RlbmVy
LmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNM
YXp5RXZlbnRMaXN0ZW5lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgog
ICogIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICogIENv
cHlyaWdodCAoQykgMjAwMy0yMDE4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAq
ICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQu
CiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC0xNDksNyArMTQ5LDcgQEAgSlNPYmplY3QqIEpTTGF6
eUV2ZW50TGlzdGVuZXI6OmluaXRpYWxpegogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9i
amVjdC0+Z2xvYmFsRXhlYygpOwogCiAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJnczsKLSAg
ICBhcmdzLmFwcGVuZChqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywgbV9ldmVudFBhcmFtZXRlck5h
bWUpKTsKKyAgICBhcmdzLmFwcGVuZChqc05vbnRyaXZpYWxTdHJpbmcodm0sIG1fZXZlbnRQYXJh
bWV0ZXJOYW1lKSk7CiAgICAgYXJncy5hcHBlbmQoanNTdHJpbmdXaXRoQ2FjaGUoZXhlYywgbV9j
b2RlKSk7CiAgICAgQVNTRVJUKCFhcmdzLmhhc092ZXJmbG93ZWQoKSk7CiAKQEAgLTE1OCw3ICsx
NTgsNyBAQCBKU09iamVjdCogSlNMYXp5RXZlbnRMaXN0ZW5lcjo6aW5pdGlhbGl6CiAgICAgaW50
IG92ZXJyaWRlTGluZU51bWJlciA9IG1fc291cmNlUG9zaXRpb24ubV9saW5lLm9uZUJhc2VkSW50
KCk7CiAKICAgICBKU09iamVjdCoganNGdW5jdGlvbiA9IGNvbnN0cnVjdEZ1bmN0aW9uU2tpcHBp
bmdFdmFsRW5hYmxlZENoZWNrKGV4ZWMsCi0gICAgICAgIGV4ZWMtPmxleGljYWxHbG9iYWxPYmpl
Y3QoKSwgYXJncywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCBtX2Z1bmN0aW9uTmFtZSks
CisgICAgICAgIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgYXJncywgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZyh2bSwgbV9mdW5jdGlvbk5hbWUpLAogICAgICAgICBTb3VyY2VPcmlnaW4geyBt
X3NvdXJjZVVSTCwgQ2FjaGVkU2NyaXB0RmV0Y2hlcjo6Y3JlYXRlKGRvY3VtZW50LmNoYXJzZXQo
KSkgfSwKICAgICAgICAgbV9zb3VyY2VVUkwsIG1fc291cmNlUG9zaXRpb24sIG92ZXJyaWRlTGlu
ZU51bWJlcik7CiAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgewpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNMb2NhdGlvbkN1c3RvbS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNMb2NhdGlvbkN1c3RvbS5jcHAJKHJl
dmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTG9jYXRpb25D
dXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBDb3B5cmln
aHQgKEMpIDIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKICAqICBDb3B5cmlnaHQg
KEMpIDIwMDYgSm9uIFNoaWVyIChqc2hpZXJAaWFzdGF0ZS5lZHUpCi0gKiAgQ29weXJpZ2h0IChD
KSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDEwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNldmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDE5IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNldmVkLgogICogIENvcHlyaWdodCAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1
cnlha292IChhcEB3ZWJraXQub3JnKQogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC05OCw3ICs5OCw3IEBAIGJv
b2wgSlNMb2NhdGlvbjo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmQKICAgICBhdXRvKiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PEpTTG9jYXRpb24qPihvYmplY3QpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1Rf
SU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKIAotICAgIGJvb2wgcmVzdWx0ID0gZ2V0T3du
UHJvcGVydHlTbG90Q29tbW9uKCp0aGlzT2JqZWN0LCAqc3RhdGUsIElkZW50aWZpZXI6OmZyb20o
c3RhdGUsIGluZGV4KSwgc2xvdCk7CisgICAgYm9vbCByZXN1bHQgPSBnZXRPd25Qcm9wZXJ0eVNs
b3RDb21tb24oKnRoaXNPYmplY3QsICpzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbSh2bSwgaW5kZXgp
LCBzbG90KTsKICAgICBFWENFUFRJT05fQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSB8fCAhcmVz
dWx0KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7CiAgICAgaWYgKHJl
c3VsdCkKQEAgLTE1NiwxMCArMTU2LDExIEBAIGJvb2wgSlNMb2NhdGlvbjo6cHV0KEpTQ2VsbCog
Y2VsbCwgRXhlY1MKIAogYm9vbCBKU0xvY2F0aW9uOjpwdXRCeUluZGV4KEpTQ2VsbCogY2VsbCwg
RXhlY1N0YXRlKiBzdGF0ZSwgdW5zaWduZWQgaW5kZXgsIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hv
dWxkVGhyb3cpCiB7CisgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byogdGhpc09i
amVjdCA9IGpzQ2FzdDxKU0xvY2F0aW9uKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogCi0gICAgaWYgKHB1dENvbW1vbigqdGhpc09i
amVjdCwgKnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tKHN0YXRlLCBpbmRleCkpKQorICAgIGlmIChw
dXRDb21tb24oKnRoaXNPYmplY3QsICpzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbSh2bSwgaW5kZXgp
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuIEpTT2JqZWN0OjpwdXRCeUlu
ZGV4KGNlbGwsIHN0YXRlLCBpbmRleCwgdmFsdWUsIHNob3VsZFRocm93KTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUxpc3RDdXN0b20uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUxpc3RDdXN0b20uY3BwCShyZXZpc2lv
biAyNDkxMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVMaXN0Q3VzdG9t
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDcsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA3LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MCw3ICs0MCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBK
U0M7CiBib29sIEpTTm9kZUxpc3RPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlND
OjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBTbG90VmlzaXRvciYgdmlzaXRv
ciwgY29uc3QgY2hhcioqIHJlYXNvbikKIHsKICAgICBKU05vZGVMaXN0KiBqc05vZGVMaXN0ID0g
anNDYXN0PEpTTm9kZUxpc3QqPihoYW5kbGUuc2xvdCgpLT5hc0NlbGwoKSk7Ci0gICAgaWYgKCFq
c05vZGVMaXN0LT5oYXNDdXN0b21Qcm9wZXJ0aWVzKCpqc05vZGVMaXN0LT52bSgpKSkKKyAgICBp
ZiAoIWpzTm9kZUxpc3QtPmhhc0N1c3RvbVByb3BlcnRpZXMoanNOb2RlTGlzdC0+dm0oKSkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChqc05vZGVMaXN0LT53cmFwcGVkKCkuaXNM
aXZlTm9kZUxpc3QoKSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQbHVn
aW5FbGVtZW50RnVuY3Rpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1BsdWdpbkVsZW1lbnRGdW5jdGlvbnMuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BsdWdpbkVsZW1lbnRGdW5jdGlvbnMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5
OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQotICogIENvcHlyaWdodCAoQykg
MjAwNC0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQg
KEMpIDIwMDQtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCkBAIC0xNjgsNyArMTY4LDcgQEAgQ2FsbFR5cGUgcGx1Z2luRWxlbWVudEN1c3Rv
bUdldENhbGxEYXRhKAogICAgIGlmIChKU09iamVjdCogc2NyaXB0T2JqZWN0ID0gcGx1Z2luU2Ny
aXB0T2JqZWN0RnJvbVBsdWdpblZpZXdCYXNlKGVsZW1lbnQpKSB7CiAgICAgICAgIENhbGxEYXRh
IHNjcmlwdE9iamVjdENhbGxEYXRhOwogICAgICAgICAKLSAgICAgICAgVk0mIHZtID0gKnNjcmlw
dE9iamVjdC0+dm0oKTsKKyAgICAgICAgVk0mIHZtID0gc2NyaXB0T2JqZWN0LT52bSgpOwogICAg
ICAgICBpZiAoc2NyaXB0T2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmdldENhbGxEYXRhKHNjcmlw
dE9iamVjdCwgc2NyaXB0T2JqZWN0Q2FsbERhdGEpID09IENhbGxUeXBlOjpOb25lKQogICAgICAg
ICAgICAgcmV0dXJuIENhbGxUeXBlOjpOb25lOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1JlbW90ZURPTVdpbmRvd0N1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNSZW1vdGVET01XaW5kb3dDdXN0b20uY3BwCShyZXZpc2lv
biAyNDkxMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1JlbW90ZURPTVdpbmRv
d0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxOC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDMsNiArNDMsNyBAQCBib29sIEpTUmVtb3RlRE9N
V2luZG93OjpnZXRPd25Qcm9wZXJ0eVNsCiAKIGJvb2wgSlNSZW1vdGVET01XaW5kb3c6OmdldE93
blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBzdGF0ZSwg
dW5zaWduZWQgaW5kZXgsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKKyAgICBWTSYgdm0gPSBzdGF0
ZS0+dm0oKTsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTUmVtb3RlRE9NV2luZG93
Kj4ob2JqZWN0KTsKIAogICAgIC8vIEluZGV4ZWQgZ2V0dGVycyB0YWtlIHByZWNlbmRlbmNlIG92
ZXIgcmVndWxhciBwcm9wZXJ0aWVzLCBzbyBjYWNoaW5nIHdvdWxkIGJlIGludmFsaWQuCkBAIC01
MCw3ICs1MSw3IEBAIGJvb2wgSlNSZW1vdGVET01XaW5kb3c6OmdldE93blByb3BlcnR5U2wKIAog
ICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3IgaW5kZXhlZCBwcm9wZXJ0aWVzLgogCi0gICAg
cmV0dXJuIGpzRE9NV2luZG93R2V0T3duUHJvcGVydHlTbG90UmVzdHJpY3RlZEFjY2VzczxET01X
aW5kb3dUeXBlOjpSZW1vdGU+KHRoaXNPYmplY3QsIHRoaXNPYmplY3QtPndyYXBwZWQoKSwgKnN0
YXRlLCBJZGVudGlmaWVyOjpmcm9tKHN0YXRlLCBpbmRleCksIHNsb3QsIFN0cmluZygpKTsKKyAg
ICByZXR1cm4ganNET01XaW5kb3dHZXRPd25Qcm9wZXJ0eVNsb3RSZXN0cmljdGVkQWNjZXNzPERP
TVdpbmRvd1R5cGU6OlJlbW90ZT4odGhpc09iamVjdCwgdGhpc09iamVjdC0+d3JhcHBlZCgpLCAq
c3RhdGUsIElkZW50aWZpZXI6OmZyb20odm0sIGluZGV4KSwgc2xvdCwgU3RyaW5nKCkpOwogfQog
CiBib29sIEpTUmVtb3RlRE9NV2luZG93OjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIHN0
YXRlLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0
eVNsb3QmIHNsb3QpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9SZWFkYWJsZVN0
cmVhbURlZmF1bHRDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9SZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyLmNwcAkocmV2aXNpb24g
MjQ5MTI4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvUmVhZGFibGVTdHJlYW1EZWZh
dWx0Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICog
Q29weXJpZ2h0IChDKSAyMDE2IENhbm9uIEluYy4KLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0y
MDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTU0LDcgKzU0LDcgQEAgSlNDOjpKU1ZhbHVlIFJlYWRhYmxlU3RyZWFt
RGVmYXVsdENvbnRybwogICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2sodm0pOwogICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIGF1dG8gZnVuY3Rpb24gPSBv
YmplY3QuZ2V0KCZzdGF0ZSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgcHJv
cGVydHlOYW1lKSk7CisgICAgYXV0byBmdW5jdGlvbiA9IG9iamVjdC5nZXQoJnN0YXRlLCBKU0M6
OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHByb3BlcnR5TmFtZSkpOwogICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIEpTQzo6SlNWYWx1ZSgpKTsKIAogICAgIGlmICghZnVuY3Rpb24u
aXNGdW5jdGlvbih2bSkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1Njcmlw
dENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L1NjcmlwdENvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgz
LDcgKzE4Myw4IEBAIHZvaWQgU2NyaXB0Q29udHJvbGxlcjo6bG9hZE1vZHVsZVNjcmlwdCgKIAog
SlNDOjpKU1ZhbHVlIFNjcmlwdENvbnRyb2xsZXI6OmxpbmtBbmRFdmFsdWF0ZU1vZHVsZVNjcmlw
dEluV29ybGQoTG9hZGFibGVNb2R1bGVTY3JpcHQmIG1vZHVsZVNjcmlwdCwgRE9NV3JhcHBlcldv
cmxkJiB3b3JsZCkKIHsKLSAgICBKU0xvY2tIb2xkZXIgbG9jayh3b3JsZC52bSgpKTsKKyAgICBK
U0M6OlZNJiB2bSA9IHdvcmxkLnZtKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOwogCiAg
ICAgYXV0byYgcHJveHkgPSBqc1dpbmRvd1Byb3h5KHdvcmxkKTsKICAgICBhdXRvJiBzdGF0ZSA9
ICpwcm94eS53aW5kb3coKS0+Z2xvYmFsRXhlYygpOwpAQCAtMTkzLDcgKzE5NCw3IEBAIEpTQzo6
SlNWYWx1ZSBTY3JpcHRDb250cm9sbGVyOjpsaW5rQW5kRXYKICAgICBSZWY8RnJhbWU+IHByb3Rl
Y3RvcihtX2ZyYW1lKTsKIAogICAgIE5ha2VkUHRyPEpTQzo6RXhjZXB0aW9uPiBldmFsdWF0aW9u
RXhjZXB0aW9uOwotICAgIGF1dG8gcmV0dXJuVmFsdWUgPSBKU0V4ZWNTdGF0ZTo6bGlua0FuZEV2
YWx1YXRlTW9kdWxlKHN0YXRlLCBJZGVudGlmaWVyOjpmcm9tVWlkKCZzdGF0ZS52bSgpLCBtb2R1
bGVTY3JpcHQubW9kdWxlS2V5KCkpLCBqc1VuZGVmaW5lZCgpLCBldmFsdWF0aW9uRXhjZXB0aW9u
KTsKKyAgICBhdXRvIHJldHVyblZhbHVlID0gSlNFeGVjU3RhdGU6OmxpbmtBbmRFdmFsdWF0ZU1v
ZHVsZShzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgbW9kdWxlU2NyaXB0Lm1vZHVsZUtl
eSgpKSwganNVbmRlZmluZWQoKSwgZXZhbHVhdGlvbkV4Y2VwdGlvbik7CiAgICAgaWYgKGV2YWx1
YXRpb25FeGNlcHRpb24pIHsKICAgICAgICAgLy8gRklYTUU6IEdpdmUgYSBjaGFuY2UgdG8gZHVt
cCB0aGUgc3RhY2sgdHJhY2UgaWYgdGhlICJjcm9zc29yaWdpbiIgYXR0cmlidXRlIGFsbG93cy4K
ICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDUz
OQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0TW9kdWxlTG9hZGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRNb2R1bGVM
b2FkZXIuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9TY3JpcHRNb2R1bGVMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTIzLDcgKzEyMyw3
IEBAIEpTQzo6SWRlbnRpZmllciBTY3JpcHRNb2R1bGVMb2FkZXI6OnJlc28KICAgICAgICAgcmV0
dXJuIHsgfTsKICAgICB9CiAKLSAgICByZXR1cm4gSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KCZ2bSwgcmVzdWx0LT5zdHJpbmcoKSk7CisgICAgcmV0dXJuIEpTQzo6SWRlbnRpZmllcjo6ZnJv
bVN0cmluZyh2bSwgcmVzdWx0LT5zdHJpbmcoKSk7CiB9CiAKIHN0YXRpYyB2b2lkIHJlamVjdFRv
UHJvcGFnYXRlTmV0d29ya0Vycm9yKERlZmVycmVkUHJvbWlzZSYgZGVmZXJyZWQsIE1vZHVsZUZl
dGNoRmFpbHVyZUtpbmQgZmFpbHVyZUtpbmQsIEFTQ0lJTGl0ZXJhbCBtZXNzYWdlKQpAQCAtMjU4
LDcgKzI1OCw3IEBAIEpTQzo6SlNJbnRlcm5hbFByb21pc2UqIFNjcmlwdE1vZHVsZUxvYWQKICAg
ICBpZiAoIXJlc3VsdCkKICAgICAgICAgcmV0dXJuIHJlamVjdFByb21pc2Uoc3RhdGUsIGdsb2Jh
bE9iamVjdCwgVHlwZUVycm9yLCByZXN1bHQuZXJyb3IoKSk7CiAKLSAgICByZXR1cm4gSlNDOjpp
bXBvcnRNb2R1bGUoZXhlYywgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgcmVzdWx0
LT5zdHJpbmcoKSksIHBhcmFtZXRlcnMsIEpTQzo6SlNTY3JpcHRGZXRjaGVyOjpjcmVhdGUodm0s
IFdURk1vdmUoc2NyaXB0RmV0Y2hlcikgKSk7CisgICAgcmV0dXJuIEpTQzo6aW1wb3J0TW9kdWxl
KGV4ZWMsIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVzdWx0LT5zdHJpbmcoKSks
IHBhcmFtZXRlcnMsIEpTQzo6SlNTY3JpcHRGZXRjaGVyOjpjcmVhdGUodm0sIFdURk1vdmUoc2Ny
aXB0RmV0Y2hlcikgKSk7CiB9CiAKIEpTQzo6SlNPYmplY3QqIFNjcmlwdE1vZHVsZUxvYWRlcjo6
Y3JlYXRlSW1wb3J0TWV0YVByb3BlcnRpZXMoSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpKU01vZHVsZUxvYWRlciosIEpTQzo6SlNW
YWx1ZSBtb2R1bGVLZXlWYWx1ZSwgSlNDOjpKU01vZHVsZVJlY29yZCosIEpTQzo6SlNWYWx1ZSkK
QEAgLTI3Miw3ICsyNzIsNyBAQCBKU0M6OkpTT2JqZWN0KiBTY3JpcHRNb2R1bGVMb2FkZXI6OmNy
ZWF0CiAgICAgYXV0byogbWV0YVByb3BlcnRpZXMgPSBKU0M6OmNvbnN0cnVjdEVtcHR5T2JqZWN0
KGV4ZWMsIGdsb2JhbE9iamVjdC0+bnVsbFByb3RvdHlwZU9iamVjdFN0cnVjdHVyZSgpKTsKICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKIAotICAgIG1ldGFQcm9wZXJ0
aWVzLT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJ1cmwi
KSwgSlNDOjpqc1N0cmluZygmdm0sIHNvdXJjZVVSTC5zdHJpbmcoKSkpOworICAgIG1ldGFQcm9w
ZXJ0aWVzLT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInVy
bCIpLCBKU0M6OmpzU3RyaW5nKHZtLCBzb3VyY2VVUkwuc3RyaW5nKCkpKTsKICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKIAogICAgIHJldHVybiBtZXRhUHJvcGVydGll
czsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU4
NSw3ICs1ODUsNyBAQCBwcml2YXRlOgogICAgICAgICA6IENsb25lQmFzZShleGVjKQogICAgICAg
ICAsIG1fYnVmZmVyKG91dCkKICAgICAgICAgLCBtX2Jsb2JVUkxzKGJsb2JVUkxzKQotICAgICAg
ICAsIG1fZW1wdHlJZGVudGlmaWVyKElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgZW1wdHlT
dHJpbmcoKSkpCisgICAgICAgICwgbV9lbXB0eUlkZW50aWZpZXIoSWRlbnRpZmllcjo6ZnJvbVN0
cmluZyhleGVjLT52bSgpLCBlbXB0eVN0cmluZygpKSkKICAgICAgICAgLCBtX2NvbnRleHQoY29u
dGV4dCkKICAgICAgICAgLCBtX3NoYXJlZEJ1ZmZlcnMoc2hhcmVkQnVmZmVycykKICNpZiBFTkFC
TEUoV0VCQVNTRU1CTFkpCkBAIC0xMjU3LDcgKzEyNTcsNyBAQCBwcml2YXRlOgogICAgICAgICBp
ZiAoc3RyLmlzTnVsbCgpKQogICAgICAgICAgICAgd3JpdGUobV9lbXB0eUlkZW50aWZpZXIpOwog
ICAgICAgICBlbHNlCi0gICAgICAgICAgICB3cml0ZShJZGVudGlmaWVyOjpmcm9tU3RyaW5nKG1f
ZXhlYywgc3RyKSk7CisgICAgICAgICAgICB3cml0ZShJZGVudGlmaWVyOjpmcm9tU3RyaW5nKG1f
ZXhlYy0+dm0oKSwgc3RyKSk7CiAgICAgfQogCiAgICAgdm9pZCB3cml0ZShjb25zdCBWZWN0b3I8
dWludDhfdD4mIHZlY3RvcikKQEAgLTE1MTgsNyArMTUxOCw3IEBAIFNlcmlhbGl6YXRpb25SZXR1
cm5Db2RlIENsb25lU2VyaWFsaXplcjoKICAgICAgICAgICAgICAgICAgICAgaW5kZXhTdGFjay5y
ZW1vdmVMYXN0KCk7CiAgICAgICAgICAgICAgICAgICAgIGxlbmd0aFN0YWNrLnJlbW92ZUxhc3Qo
KTsKIAotICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0YWNrLmFwcGVuZChQcm9wZXJ0eU5h
bWVBcnJheSgmdm0sIFByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3MsIFByaXZhdGVTeW1ib2xNb2Rl
OjpFeGNsdWRlKSk7CisgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5U3RhY2suYXBwZW5kKFBy
b3BlcnR5TmFtZUFycmF5KHZtLCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzLCBQcml2YXRlU3lt
Ym9sTW9kZTo6RXhjbHVkZSkpOwogICAgICAgICAgICAgICAgICAgICBhcnJheS0+bWV0aG9kVGFi
bGUodm0pLT5nZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoYXJyYXksIG1fZXhlYywgcHJvcGVy
dHlTdGFjay5sYXN0KCksIEVudW1lcmF0aW9uTW9kZSgpKTsKICAgICAgICAgICAgICAgICAgICAg
aWYgKHByb3BlcnR5U3RhY2subGFzdCgpLnNpemUoKSkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgd3JpdGUoTm9uSW5kZXhQcm9wZXJ0aWVzVGFnKTsKQEAgLTE1NjgsNyArMTU2OCw3IEBAIFNl
cmlhbGl6YXRpb25SZXR1cm5Db2RlIENsb25lU2VyaWFsaXplcjoKICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIFNlcmlhbGl6YXRpb25SZXR1cm5Db2RlOjpEYXRhQ2xvbmVFcnJvcjsKICAgICAg
ICAgICAgICAgICBpbnB1dE9iamVjdFN0YWNrLmFwcGVuZChpbk9iamVjdCk7CiAgICAgICAgICAg
ICAgICAgaW5kZXhTdGFjay5hcHBlbmQoMCk7Ci0gICAgICAgICAgICAgICAgcHJvcGVydHlTdGFj
ay5hcHBlbmQoUHJvcGVydHlOYW1lQXJyYXkoJnZtLCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdz
LCBQcml2YXRlU3ltYm9sTW9kZTo6RXhjbHVkZSkpOworICAgICAgICAgICAgICAgIHByb3BlcnR5
U3RhY2suYXBwZW5kKFByb3BlcnR5TmFtZUFycmF5KHZtLCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJp
bmdzLCBQcml2YXRlU3ltYm9sTW9kZTo6RXhjbHVkZSkpOwogICAgICAgICAgICAgICAgIGluT2Jq
ZWN0LT5tZXRob2RUYWJsZSh2bSktPmdldE93blByb3BlcnR5TmFtZXMoaW5PYmplY3QsIG1fZXhl
YywgcHJvcGVydHlTdGFjay5sYXN0KCksIEVudW1lcmF0aW9uTW9kZSgpKTsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIG9iamVjdFN0YXJ0VmlzaXRNZW1iZXI6CkBAIC0xNjM2LDcgKzE2MzYs
NyBAQCBTZXJpYWxpemF0aW9uUmV0dXJuQ29kZSBDbG9uZVNlcmlhbGl6ZXI6CiAgICAgICAgICAg
ICAgICAgICAgIG1hcEl0ZXJhdG9yU3RhY2sucmVtb3ZlTGFzdCgpOwogICAgICAgICAgICAgICAg
ICAgICBKU09iamVjdCogb2JqZWN0ID0gaW5wdXRPYmplY3RTdGFjay5sYXN0KCk7CiAgICAgICAg
ICAgICAgICAgICAgIEFTU0VSVChqc0R5bmFtaWNDYXN0PEpTTWFwKj4odm0sIG9iamVjdCkpOwot
ICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0YWNrLmFwcGVuZChQcm9wZXJ0eU5hbWVBcnJh
eSgmdm0sIFByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3MsIFByaXZhdGVTeW1ib2xNb2RlOjpFeGNs
dWRlKSk7CisgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5U3RhY2suYXBwZW5kKFByb3BlcnR5
TmFtZUFycmF5KHZtLCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzLCBQcml2YXRlU3ltYm9sTW9k
ZTo6RXhjbHVkZSkpOwogICAgICAgICAgICAgICAgICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKHZt
KS0+Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIG1fZXhlYywgcHJvcGVydHlTdGFjay5sYXN0
KCksIEVudW1lcmF0aW9uTW9kZSgpKTsKICAgICAgICAgICAgICAgICAgICAgd3JpdGUoTm9uTWFw
UHJvcGVydGllc1RhZyk7CiAgICAgICAgICAgICAgICAgICAgIGluZGV4U3RhY2suYXBwZW5kKDAp
OwpAQCAtMTY4MCw3ICsxNjgwLDcgQEAgU2VyaWFsaXphdGlvblJldHVybkNvZGUgQ2xvbmVTZXJp
YWxpemVyOgogICAgICAgICAgICAgICAgICAgICBzZXRJdGVyYXRvclN0YWNrLnJlbW92ZUxhc3Qo
KTsKICAgICAgICAgICAgICAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9IGlucHV0T2JqZWN0U3Rh
Y2subGFzdCgpOwogICAgICAgICAgICAgICAgICAgICBBU1NFUlQoanNEeW5hbWljQ2FzdDxKU1Nl
dCo+KHZtLCBvYmplY3QpKTsKLSAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlTdGFjay5hcHBl
bmQoUHJvcGVydHlOYW1lQXJyYXkoJnZtLCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzLCBQcml2
YXRlU3ltYm9sTW9kZTo6RXhjbHVkZSkpOworICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0
YWNrLmFwcGVuZChQcm9wZXJ0eU5hbWVBcnJheSh2bSwgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5n
cywgUHJpdmF0ZVN5bWJvbE1vZGU6OkV4Y2x1ZGUpKTsKICAgICAgICAgICAgICAgICAgICAgb2Jq
ZWN0LT5tZXRob2RUYWJsZSh2bSktPmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBtX2V4ZWMs
IHByb3BlcnR5U3RhY2subGFzdCgpLCBFbnVtZXJhdGlvbk1vZGUoKSk7CiAgICAgICAgICAgICAg
ICAgICAgIHdyaXRlKE5vblNldFByb3BlcnRpZXNUYWcpOwogICAgICAgICAgICAgICAgICAgICBp
bmRleFN0YWNrLmFwcGVuZCgwKTsKQEAgLTE3NzcsNyArMTc3Nyw3IEBAIHByaXZhdGU6CiAgICAg
ICAgIEpTVmFsdWUganNTdHJpbmcoRXhlY1N0YXRlKiBleGVjKQogICAgICAgICB7CiAgICAgICAg
ICAgICBpZiAoIW1fanNTdHJpbmcpCi0gICAgICAgICAgICAgICAgbV9qc1N0cmluZyA9IEpTQzo6
anNTdHJpbmcoZXhlYywgbV9zdHJpbmcpOworICAgICAgICAgICAgICAgIG1fanNTdHJpbmcgPSBK
U0M6OmpzU3RyaW5nKGV4ZWMtPnZtKCksIG1fc3RyaW5nKTsKICAgICAgICAgICAgIHJldHVybiBt
X2pzU3RyaW5nOwogICAgICAgICB9CiAgICAgICAgIGNvbnN0IFN0cmluZyYgc3RyaW5nKCkgeyBy
ZXR1cm4gbV9zdHJpbmc7IH0KQEAgLTI4NjYsNyArMjg2Niw3IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICByZXR1cm4gY2FjaGVkU3RyaW5nLT5qc1N0cmluZyhtX2V4ZWMpOwogICAgICAgICB9CiAg
ICAgICAgIGNhc2UgRW1wdHlTdHJpbmdUYWc6Ci0gICAgICAgICAgICByZXR1cm4ganNFbXB0eVN0
cmluZygmbV9leGVjLT52bSgpKTsKKyAgICAgICAgICAgIHJldHVybiBqc0VtcHR5U3RyaW5nKG1f
ZXhlYy0+dm0oKSk7CiAgICAgICAgIGNhc2UgU3RyaW5nT2JqZWN0VGFnOiB7CiAgICAgICAgICAg
ICBDYWNoZWRTdHJpbmdSZWYgY2FjaGVkU3RyaW5nOwogICAgICAgICAgICAgaWYgKCFyZWFkU3Ry
aW5nRGF0YShjYWNoZWRTdHJpbmcpKQpAQCAtMjg3Nyw3ICsyODc3LDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgfQogICAgICAgICBjYXNlIEVtcHR5U3RyaW5nT2JqZWN0VGFnOiB7CiAgICAgICAgICAg
ICBWTSYgdm0gPSBtX2V4ZWMtPnZtKCk7Ci0gICAgICAgICAgICBTdHJpbmdPYmplY3QqIG9iaiA9
IGNvbnN0cnVjdFN0cmluZyh2bSwgbV9nbG9iYWxPYmplY3QsIGpzRW1wdHlTdHJpbmcoJnZtKSk7
CisgICAgICAgICAgICBTdHJpbmdPYmplY3QqIG9iaiA9IGNvbnN0cnVjdFN0cmluZyh2bSwgbV9n
bG9iYWxPYmplY3QsIGpzRW1wdHlTdHJpbmcodm0pKTsKICAgICAgICAgICAgIG1fZ2NCdWZmZXIu
YXBwZW5kV2l0aENyYXNoT25PdmVyZmxvdyhvYmopOwogICAgICAgICAgICAgcmV0dXJuIG9iajsK
ICAgICAgICAgfQpAQCAtMzE2MiwxMSArMzE2MiwxMSBAQCBEZXNlcmlhbGl6YXRpb25SZXN1bHQg
Q2xvbmVEZXNlcmlhbGl6ZXI6CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChKU1Zh
bHVlIHRlcm1pbmFsID0gcmVhZFRlcm1pbmFsKCkpIHsKLSAgICAgICAgICAgICAgICBwdXRQcm9w
ZXJ0eShvdXRwdXRPYmplY3RTdGFjay5sYXN0KCksIElkZW50aWZpZXI6OmZyb21TdHJpbmcobV9l
eGVjLCBjYWNoZWRTdHJpbmctPnN0cmluZygpKSwgdGVybWluYWwpOworICAgICAgICAgICAgICAg
IHB1dFByb3BlcnR5KG91dHB1dE9iamVjdFN0YWNrLmxhc3QoKSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZyh2bSwgY2FjaGVkU3RyaW5nLT5zdHJpbmcoKSksIHRlcm1pbmFsKTsKICAgICAgICAgICAg
ICAgICBnb3RvIG9iamVjdFN0YXJ0VmlzaXRNZW1iZXI7CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICBzdGF0ZVN0YWNrLmFwcGVuZChPYmplY3RFbmRWaXNpdE1lbWJlcik7Ci0gICAgICAgICAg
ICBwcm9wZXJ0eU5hbWVTdGFjay5hcHBlbmQoSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhtX2V4ZWMs
IGNhY2hlZFN0cmluZy0+c3RyaW5nKCkpKTsKKyAgICAgICAgICAgIHByb3BlcnR5TmFtZVN0YWNr
LmFwcGVuZChJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBjYWNoZWRTdHJpbmctPnN0cmluZygp
KSk7CiAgICAgICAgICAgICBnb3RvIHN0YXRlVW5rbm93bjsKICAgICAgICAgfQogICAgICAgICBj
YXNlIE9iamVjdEVuZFZpc2l0TWVtYmVyOiB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9XZWJDb3JlQnVpbHRpbk5hbWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvV2ViQ29yZUJ1aWx0aW5OYW1lcy5oCShyZXZpc2lvbiAyNDkxMjgpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlQnVpbHRpbk5hbWVzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAoYykgMjAxNSwgQ2Fub24g
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDE4LTIwMTkgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqICBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTM2MCw4ICszNjAsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFdl
YkNvcmVCdWlsdGluTmFtZXMgewogcHVibGljOgotICAgIGV4cGxpY2l0IFdlYkNvcmVCdWlsdGlu
TmFtZXMoSlNDOjpWTSogdm0pCi0gICAgICAgIDogbV92bSgqdm0pCisgICAgZXhwbGljaXQgV2Vi
Q29yZUJ1aWx0aW5OYW1lcyhKU0M6OlZNJiB2bSkKKyAgICAgICAgOiBtX3ZtKHZtKQogICAgICAg
ICBXRUJDT1JFX0NPTU1PTl9QUklWQVRFX0lERU5USUZJRVJTX0VBQ0hfUFJPUEVSVFlfTkFNRShJ
TklUSUFMSVpFX0JVSUxUSU5fTkFNRVMpCiAgICAgewogI2RlZmluZSBFWFBPUlRfTkFNRShuYW1l
KSBtX3ZtLnByb3BlcnR5TmFtZXMtPmFwcGVuZEV4dGVybmFsTmFtZShuYW1lIyNQdWJsaWNOYW1l
KCksIG5hbWUjI1ByaXZhdGVOYW1lKCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvV2ViQ29yZUpTQ2xpZW50RGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvV2ViQ29yZUpTQ2xpZW50RGF0YS5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVKU0NsaWVudERhdGEuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTQyLDcgKzQyLDcgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogSlNWTUNsaWVu
dERhdGE6OkpTVk1DbGllbnREYXRhKFZNJiB2bSkKICAgICA6IG1fYnVpbHRpbkZ1bmN0aW9ucyh2
bSkKLSAgICAsIG1fYnVpbHRpbk5hbWVzKCZ2bSkKKyAgICAsIG1fYnVpbHRpbk5hbWVzKHZtKQog
ICAgICwgbV9ydW50aW1lTWV0aG9kU3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgdm0u
ZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmdldCgpLCBSdW50aW1lTWV0aG9kKSAvLyBI
YXNoOjB4ZjcwYzRhODUKICAgICAsIG1fb3V0cHV0Q29uc3RyYWludFNwYWNlKCJXZWJDb3JlIFdy
YXBwZXIgdy8gT3V0cHV0IENvbnN0cmFpbnQiLCB2bS5oZWFwLCB2bS5kZXN0cnVjdGlibGVPYmpl
Y3RIZWFwQ2VsbFR5cGUuZ2V0KCksIHZtLmZhc3RNYWxsb2NBbGxvY2F0b3IuZ2V0KCkpIC8vIEhh
c2g6MHg3NzI0YzJlNAogICAgICwgbV9nbG9iYWxPYmplY3RPdXRwdXRDb25zdHJhaW50U3BhY2Uo
IldlYkNvcmUgR2xvYmFsIE9iamVjdCB3LyBPdXRwdXQgQ29uc3RyYWludCIsIHZtLmhlYXAsIHZt
LmNlbGxIZWFwQ2VsbFR5cGUuZ2V0KCksIHZtLmZhc3RNYWxsb2NBbGxvY2F0b3IuZ2V0KCkpIC8v
IEhhc2g6MHg1MjJkNmVjOQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2luZG93
UHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dpbmRv
d1Byb3h5LmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvV2luZG93UHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAq
ICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQog
ICogIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICogIENv
cHlyaWdodCAoQykgMjAwNi0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
ICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC0xMzksNyArMTM5LDcgQEAgdm9pZCBXaW5kb3dQcm94
eTo6Y2xlYXJKU1dpbmRvd1Byb3hpZXNObwogICAgICAgICAvLyBDbGVhciB0aGUgZGVidWdnZXIg
YW5kIGNvbnNvbGUgZnJvbSB0aGUgY3VycmVudCB3aW5kb3cgYmVmb3JlIHNldHRpbmcgdGhlIG5l
dyB3aW5kb3cuCiAgICAgICAgIHdpbmRvd1Byb3h5LT5hdHRhY2hEZWJ1Z2dlcihudWxscHRyKTsK
ICAgICAgICAgd2luZG93UHJveHktPndpbmRvdygpLT5zZXRDb25zb2xlQ2xpZW50KG51bGxwdHIp
OwotICAgICAgICBpZiAoYXV0byoganNET01XaW5kb3cgPSBqc0R5bmFtaWNDYXN0PEpTRE9NV2lu
ZG93QmFzZSo+KCp3aW5kb3dQcm94eS0+dm0oKSwgd2luZG93UHJveHktPndpbmRvdygpKSkKKyAg
ICAgICAgaWYgKGF1dG8qIGpzRE9NV2luZG93ID0ganNEeW5hbWljQ2FzdDxKU0RPTVdpbmRvd0Jh
c2UqPih3aW5kb3dQcm94eS0+dm0oKSwgd2luZG93UHJveHktPndpbmRvdygpKSkKICAgICAgICAg
ICAgIGpzRE9NV2luZG93LT53aWxsUmVtb3ZlRnJvbVdpbmRvd1Byb3h5KCk7CiAgICAgfQogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0
b3JKUy5wbQkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHdvcmtpbmcgY29weSkKQEAgLTcyNywyMCArNzI3LDIz
IEBAIHN1YiBHZW5lcmF0ZUdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgKICAgICBteSAkcHJvcGVy
dHlOYW1lR2VuZXJhdGlvbiA9IHN1YiB7CiAgICAgICAgIHJldHVybiBpZiAkZGlkR2VuZXJhdGVQ
cm9wZXJ0eU5hbWU7CiAgICAgICAgIAotICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAg
YXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tKHN0YXRlLCBpbmRleCk7XG4iKTsK
KyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRl
bnRpZmllcjo6ZnJvbSh2bSwgaW5kZXgpO1xuIik7CiAgICAgICAgICRkaWRHZW5lcmF0ZVByb3Bl
cnR5TmFtZSA9IDE7CiAgICAgfTsKICAgICAKKyAgICBteSAkbmFtZWRHZXR0ZXJPcGVyYXRpb24g
PSBHZXROYW1lZEdldHRlck9wZXJhdGlvbigkaW50ZXJmYWNlKTsKKyAgICBteSAkaW5kZXhlZEdl
dHRlck9wZXJhdGlvbiA9IEdldEluZGV4ZWRHZXR0ZXJPcGVyYXRpb24oJGludGVyZmFjZSk7Cisg
ICAgCiAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiYm9vbCAke2NsYXNzTmFtZX06OmdldE93blBy
b3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBzdGF0ZSwgdW5z
aWduZWQgaW5kZXgsIFByb3BlcnR5U2xvdCYgc2xvdClcbiIpOwogICAgIHB1c2goQCRvdXRwdXRB
cnJheSwgIntcbiIpOworICAgIGlmICgkbmFtZWRHZXR0ZXJPcGVyYXRpb24gfHwgJGludGVyZmFj
ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57UGx1Z2lufSkgeworICAgICAgICBwdXNoKEAkb3V0cHV0
QXJyYXksICIgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7XG4iKTsKKyAgICB9CiAgICAgcHVzaChA
JG91dHB1dEFycmF5LCAiICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8JHtjbGFzc05hbWV9
Kj4ob2JqZWN0KTtcbiIpOwogICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7XG4iKTsKICAgICAKLSAgICBteSAk
bmFtZWRHZXR0ZXJPcGVyYXRpb24gPSBHZXROYW1lZEdldHRlck9wZXJhdGlvbigkaW50ZXJmYWNl
KTsKLSAgICBteSAkaW5kZXhlZEdldHRlck9wZXJhdGlvbiA9IEdldEluZGV4ZWRHZXR0ZXJPcGVy
YXRpb24oJGludGVyZmFjZSk7Ci0gICAgCiAgICAgaWYgKCgkbmFtZWRHZXR0ZXJPcGVyYXRpb24g
JiYgJG5hbWVkR2V0dGVyT3BlcmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntNYXlUaHJvd0V4
Y2VwdGlvbn0pIHx8ICgkaW5kZXhlZEdldHRlck9wZXJhdGlvbiAmJiAkaW5kZXhlZEdldHRlck9w
ZXJhdGlvbi0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57TWF5VGhyb3dFeGNlcHRpb259KSkgewotICAg
ICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRShzdGF0ZS0+dm0oKSk7XG4iKTsKKyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5
LCAiICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pO1xuIik7CiAg
ICAgfQogICAgIAogICAgICMgTk9URTogVGhlIGFsb2dpdGhtIGZvciBbW0dldE93blByb3BlcnR5
XV0gY29udGFpbnMgb25seSB0aGUgZm9sbG93aW5nIHN0ZXA6CkBAIC04MzYsNiArODM5LDkgQEAg
c3ViIEdlbmVyYXRlR2V0T3duUHJvcGVydHlOYW1lcwogICAgIAogICAgIHB1c2goQCRvdXRwdXRB
cnJheSwgInZvaWQgJHtjbGFzc05hbWV9OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBv
YmplY3QsIEV4ZWNTdGF0ZSogc3RhdGUsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVz
LCBFbnVtZXJhdGlvbk1vZGUgbW9kZSlcbiIpOwogICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIntc
biIpOworICAgIGlmICgkaW5kZXhlZEdldHRlck9wZXJhdGlvbiB8fCAkbmFtZWRHZXR0ZXJPcGVy
YXRpb24pIHsKKyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIFZNJiB2bSA9IHN0YXRl
LT52bSgpO1xuIik7CisgICAgfQogICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBhdXRvKiB0
aGlzT2JqZWN0ID0ganNDYXN0PCR7Y2xhc3NOYW1lfSo+KG9iamVjdCk7XG4iKTsKICAgICBwdXNo
KEAkb3V0cHV0QXJyYXksICIgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhvYmplY3QsIGlu
Zm8oKSk7XG4iKTsKICAgICAKQEAgLTg0NCw3ICs4NTAsNyBAQCBzdWIgR2VuZXJhdGVHZXRPd25Q
cm9wZXJ0eU5hbWVzCiAgICAgIyBGSVhNRTogVGhpcyBzaG91bGQgc3VwcG9ydCBub24tY29udGln
dW91cyBpbmRpY2VzLgogICAgIGlmICgkaW5kZXhlZEdldHRlck9wZXJhdGlvbikgewogICAgICAg
ICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgZm9yICh1bnNpZ25lZCBpID0gMCwgY291bnQgPSB0
aGlzT2JqZWN0LT53cmFwcGVkKCkubGVuZ3RoKCk7IGkgPCBjb3VudDsgKytpKVxuIik7Ci0gICAg
ICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRp
Zmllcjo6ZnJvbShzdGF0ZSwgaSkpO1xuIik7CisgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwg
IiAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbSh2bSwgaSkpO1xuIik7
CiAgICAgfQogCiAgICAgIyAyLiBJZiB0aGUgb2JqZWN0IHN1cHBvcnRzIG5hbWVkIHByb3BlcnRp
ZXMgYW5kIGRvZXNu4oCZdCBpbXBsZW1lbnQgYW4gaW50ZXJmYWNlCkBAIC04NTUsMTEgKzg2MSwx
MSBAQCBzdWIgR2VuZXJhdGVHZXRPd25Qcm9wZXJ0eU5hbWVzCiAgICAgaWYgKCRuYW1lZEdldHRl
ck9wZXJhdGlvbikgewogICAgICAgICBpZiAoISRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRl
cy0+e0xlZ2FjeVVuZW51bWVyYWJsZU5hbWVkUHJvcGVydGllc30pIHsKICAgICAgICAgICAgIHB1
c2goQCRvdXRwdXRBcnJheSwgIiAgICBmb3IgKGF1dG8mIHByb3BlcnR5TmFtZSA6IHRoaXNPYmpl
Y3QtPndyYXBwZWQoKS5zdXBwb3J0ZWRQcm9wZXJ0eU5hbWVzKCkpXG4iKTsKLSAgICAgICAgICAg
IHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmll
cjo6ZnJvbVN0cmluZyhzdGF0ZSwgcHJvcGVydHlOYW1lKSk7XG4iKTsKKyAgICAgICAgICAgIHB1
c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6
ZnJvbVN0cmluZyh2bSwgcHJvcGVydHlOYW1lKSk7XG4iKTsKICAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBpZiAobW9kZS5pbmNsdWRlRG9udEVu
dW1Qcm9wZXJ0aWVzKCkpIHtcbiIpOwogICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAi
ICAgICAgICBmb3IgKGF1dG8mIHByb3BlcnR5TmFtZSA6IHRoaXNPYmplY3QtPndyYXBwZWQoKS5z
dXBwb3J0ZWRQcm9wZXJ0eU5hbWVzKCkpXG4iKTsKLSAgICAgICAgICAgIHB1c2goQCRvdXRwdXRB
cnJheSwgIiAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb21TdHJp
bmcoc3RhdGUsIHByb3BlcnR5TmFtZSkpO1xuIik7CisgICAgICAgICAgICBwdXNoKEAkb3V0cHV0
QXJyYXksICIgICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKHZtLCBwcm9wZXJ0eU5hbWUpKTtcbiIpOwogICAgICAgICAgICAgcHVzaChAJG91dHB1dEFy
cmF5LCAiICAgIH1cbiIpOwogICAgICAgICB9CiAgICAgfQpAQCAtMTAwNiw2ICsxMDEyLDkgQEAg
c3ViIEdlbmVyYXRlUHV0QnlJbmRleAogICAgIAogICAgIHB1c2goQCRvdXRwdXRBcnJheSwgImJv
b2wgJHtjbGFzc05hbWV9OjpwdXRCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBzdGF0
ZSwgdW5zaWduZWQgaW5kZXgsIEpTVmFsdWUgdmFsdWUsIGJvb2wiIC4gKCEkZWxsaWRlc0NhbGxz
VG9CYXNlID8gIiBzaG91bGRUaHJvdyIgOiAiIikgLiAiKVxuIik7CiAgICAgcHVzaChAJG91dHB1
dEFycmF5LCAie1xuIik7CisgICAgaWYgKCRuYW1lZFNldHRlck9wZXJhdGlvbiB8fCAkaW50ZXJm
YWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntQbHVnaW59KSB7CisgICAgICAgIHB1c2goQCRvdXRw
dXRBcnJheSwgIiAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTtcbiIpOworICAgIH0KICAgICBwdXNo
KEAkb3V0cHV0QXJyYXksICIgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDwke2NsYXNzTmFt
ZX0qPihjZWxsKTtcbiIpOwogICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7XG5cbiIpOwogCkBAIC0xMDE4LDcg
KzEwMjcsNyBAQCBzdWIgR2VuZXJhdGVQdXRCeUluZGV4CiAgICAgICAgIEdlbmVyYXRlQ3VzdG9t
RWxlbWVudFJlYWN0aW9uc1N0YWNrSWZOZWVkZWQoJG91dHB1dEFycmF5LCAkaW5kZXhlZFNldHRl
ck9wZXJhdGlvbiwgIipzdGF0ZSIpOwogICAgIH0KICAgICAKLSAgICBpZiAoJGluZGV4ZWRTZXR0
ZXJPcGVyYXRpb24gKSB7CisgICAgaWYgKCRpbmRleGVkU2V0dGVyT3BlcmF0aW9uKSB7CiAgICAg
ICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBpZiAoTElLRUxZKGluZGV4IDw9IE1BWF9BUlJB
WV9JTkRFWCkpIHtcbiIpOwogICAgICAgICAKICAgICAgICAgR2VuZXJhdGVJbnZva2VJbmRleGVk
UHJvcGVydHlTZXR0ZXIoJG91dHB1dEFycmF5LCAiICAgICAgICAiLCAkaW50ZXJmYWNlLCAkaW5k
ZXhlZFNldHRlck9wZXJhdGlvbiwgImluZGV4IiwgInZhbHVlIik7CkBAIC0xMDI4LDEyICsxMDM3
LDEyIEBAIHN1YiBHZW5lcmF0ZVB1dEJ5SW5kZXgKICAgICB9CiAgICAgCiAgICAgaWYgKCRuYW1l
ZFNldHRlck9wZXJhdGlvbikgewotICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgYXV0
byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tKHN0YXRlLCBpbmRleCk7XG4iKTsKKyAg
ICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRp
Zmllcjo6ZnJvbSh2bSwgaW5kZXgpO1xuIik7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgIG15
ICRhZGRpdGlvbmFsSW5kZW50ID0gIiI7CiAgICAgICAgIGlmICghJG92ZXJyaWRlQnVpbHRpbnMp
IHsKICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBQcm9wZXJ0eVNsb3Qgc2xv
dCB7IHRoaXNPYmplY3QsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpWTUlucXVp
cnkgfTtcbiIpOwotICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIEpTVmFsdWUg
cHJvdG90eXBlID0gdGhpc09iamVjdC0+Z2V0UHJvdG90eXBlRGlyZWN0KHN0YXRlLT52bSgpKTtc
biIpOworICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIEpTVmFsdWUgcHJvdG90
eXBlID0gdGhpc09iamVjdC0+Z2V0UHJvdG90eXBlRGlyZWN0KHZtKTtcbiIpOwogICAgICAgICAg
ICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGlmICghKHByb3RvdHlwZS5pc09iamVjdCgpICYm
IGFzT2JqZWN0KHByb3RvdHlwZSktPmdldFByb3BlcnR5U2xvdChzdGF0ZSwgcHJvcGVydHlOYW1l
LCBzbG90KSkpIHtcbiIpOwogICAgICAgICAgICAgJGFkZGl0aW9uYWxJbmRlbnQgLj0gIiAgICAi
OwogICAgICAgICB9CkBAIC0xMDUzLDcgKzEwNjIsNyBAQCBzdWIgR2VuZXJhdGVQdXRCeUluZGV4
CiAgICAgYXNzZXJ0KCJVc2luZyBib3RoIGEgbmFtZWQgcHJvcGVydHkgc2V0dGVyIGFuZCBbUGx1
Z2luXSB0b2dldGhlciBpcyBub3Qgc3VwcG9ydGVkLiIpIGlmICRuYW1lZFNldHRlck9wZXJhdGlv
biAmJiAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntQbHVnaW59OwogICAgIGlmICgk
aW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntQbHVnaW59KSB7CiAgICAgICAgIEFkZFRv
SW1wbEluY2x1ZGVzKCJKU1BsdWdpbkVsZW1lbnRGdW5jdGlvbnMuaCIpOwotICAgICAgICBwdXNo
KEAkb3V0cHV0QXJyYXksICIgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9t
KHN0YXRlLCBpbmRleCk7XG4iKTsKKyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGF1
dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbSh2bSwgaW5kZXgpO1xuIik7CiAgICAg
ICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBQdXRQcm9wZXJ0eVNsb3QgcHV0UHJvcGVydHlT
bG90KHRoaXNPYmplY3QsIHNob3VsZFRocm93KTtcbiIpOwogICAgICAgICBwdXNoKEAkb3V0cHV0
QXJyYXksICIgICAgYm9vbCBwdXRSZXN1bHQgPSBmYWxzZTtcbiIpOwogICAgICAgICBwdXNoKEAk
b3V0cHV0QXJyYXksICIgICAgaWYgKHBsdWdpbkVsZW1lbnRDdXN0b21QdXQodGhpc09iamVjdCwg
c3RhdGUsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHB1dFByb3BlcnR5U2xvdCwgcHV0UmVzdWx0KSlc
biIpOwpAQCAtMTM0MSw3ICsxMzUwLDggQEAgc3ViIEdlbmVyYXRlRGVsZXRlUHJvcGVydHlCeUlu
ZGV4CiAgICAgaWYgKEdldEluZGV4ZWRHZXR0ZXJPcGVyYXRpb24oJGludGVyZmFjZSkpIHsKICAg
ICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIHJldHVybiAhaW1wbC5pc1N1cHBvcnRlZFBy
b3BlcnR5SW5kZXgoaW5kZXgpO1xuIik7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgcHVzaChAJG91
dHB1dEFycmF5LCAiICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbShzdGF0
ZSwgaW5kZXgpO1xuIik7CisgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBWTSYgdm0g
PSBzdGF0ZS0+dm0oKTtcbiIpOworICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgYXV0
byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tKHZtLCBpbmRleCk7XG4iKTsKIAogICAg
ICAgICAjIEdlbmVyYXRlRGVsZXRlUHJvcGVydHlDb21tb24gaW1wbGVtZW50cyBzdGVwIDIuCiAg
ICAgICAgIEdlbmVyYXRlRGVsZXRlUHJvcGVydHlDb21tb24oJG91dHB1dEFycmF5LCAkaW50ZXJm
YWNlLCAkY2xhc3NOYW1lLCAkb3BlcmF0aW9uLCAkY29uZGl0aW9uYWwpOwpAQCAtMjM0Nyw3ICsy
MzU3LDcgQEAgc3ViIEdlbmVyYXRlRGljdGlvbmFyeUltcGxlbWVudGF0aW9uQ29udAogICAgICAg
ICAgICAgJHJlc3VsdCAuPSAiICAgIGlmIChpc051bGxPclVuZGVmaW5lZClcbiI7CiAgICAgICAg
ICAgICAkcmVzdWx0IC49ICIgICAgICAgICR7a2V5fVZhbHVlID0ganNVbmRlZmluZWQoKTtcbiI7
CiAgICAgICAgICAgICAkcmVzdWx0IC49ICIgICAgZWxzZSB7XG4iOwotICAgICAgICAgICAgJHJl
c3VsdCAuPSAiICAgICAgICAke2tleX1WYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZygmc3RhdGUsIFwiJHtrZXl9XCIpKTtcbiI7CisgICAgICAgICAgICAk
cmVzdWx0IC49ICIgICAgICAgICR7a2V5fVZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBcIiR7a2V5fVwiKSk7XG4iOwogICAgICAgICAgICAgJHJl
c3VsdCAuPSAiICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7XG4i
OwogICAgICAgICAgICAgJHJlc3VsdCAuPSAiICAgIH1cbiI7CiAKQEAgLTI0MzMsMTMgKzI0NDMs
MTMgQEAgc3ViIEdlbmVyYXRlRGljdGlvbmFyeUltcGxlbWVudGF0aW9uQ29udAogCiAgICAgICAg
ICAgICAgICAgICAgICRyZXN1bHQgLj0gIiR7aW5kZW50fSAgICBpZiAoISR7SURMVHlwZX06Omlz
TnVsbFZhbHVlKCR7dmFsdWVFeHByZXNzaW9ufSkpIHtcbiI7CiAgICAgICAgICAgICAgICAgICAg
ICRyZXN1bHQgLj0gIiR7aW5kZW50fSAgICAgICAgYXV0byAke2tleX1WYWx1ZSA9ICR7Y29udmVy
c2lvbkV4cHJlc3Npb259O1xuIjsKLSAgICAgICAgICAgICAgICAgICAgJHJlc3VsdCAuPSAiJHtp
bmRlbnR9ICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKCZ2bSwgXCIke2tleX1cIiksICR7a2V5fVZhbHVlKTtcbiI7CisgICAgICAgICAgICAg
ICAgICAgICRyZXN1bHQgLj0gIiR7aW5kZW50fSAgICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0s
IEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgXCIke2tleX1cIiksICR7a2V5fVZhbHVl
KTtcbiI7CiAgICAgICAgICAgICAgICAgICAgICRyZXN1bHQgLj0gIiR7aW5kZW50fSAgICB9XG4i
OwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIG15ICRjb252
ZXJzaW9uRXhwcmVzc2lvbiA9IE5hdGl2ZVRvSlNWYWx1ZVVzaW5nUmVmZXJlbmNlcygkbWVtYmVy
LCAkdHlwZVNjb3BlLCAkdmFsdWVFeHByZXNzaW9uLCAiZ2xvYmFsT2JqZWN0Iik7CiAKICAgICAg
ICAgICAgICAgICAgICAgJHJlc3VsdCAuPSAiJHtpbmRlbnR9ICAgIGF1dG8gJHtrZXl9VmFsdWUg
PSAke2NvbnZlcnNpb25FeHByZXNzaW9ufTtcbiI7Ci0gICAgICAgICAgICAgICAgICAgICRyZXN1
bHQgLj0gIiR7aW5kZW50fSAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKCZ2bSwgXCIke2tleX1cIiksICR7a2V5fVZhbHVlKTtcbiI7CisgICAgICAg
ICAgICAgICAgICAgICRyZXN1bHQgLj0gIiR7aW5kZW50fSAgICByZXN1bHQtPnB1dERpcmVjdCh2
bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBcIiR7a2V5fVwiKSwgJHtrZXl9VmFs
dWUpO1xuIjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgaWYgKCRuZWVkc1J1
bnRpbWVDaGVjaykgewogICAgICAgICAgICAgICAgICAgICAkcmVzdWx0IC49ICIgICAgfVxuIjsK
QEAgLTM4MzQsNyArMzg0NCw3IEBAIHN1YiBhZGRVbnNjb3BhYmxlUHJvcGVydGllcwogICAgIEFk
ZFRvSW1wbEluY2x1ZGVzKCI8SmF2YVNjcmlwdENvcmUvT2JqZWN0Q29uc3RydWN0b3IuaD4iKTsK
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBKU09iamVjdCYgdW5zY29wYWJsZXMgPSAqY29u
c3RydWN0RW1wdHlPYmplY3QoZ2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKSwgZ2xvYmFsT2Jq
ZWN0KCktPm51bGxQcm90b3R5cGVPYmplY3RTdHJ1Y3R1cmUoKSk7XG4iKTsKICAgICBmb3JlYWNo
IG15ICR1bnNjb3BhYmxlIChAdW5zY29wYWJsZXMpIHsKLSAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgdW5zY29wYWJsZXMucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KCZ2bSwgXCIkdW5zY29wYWJsZVwiKSwganNCb29sZWFuKHRydWUpKTtcbiIpOworICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICB1bnNjb3BhYmxlcy5wdXREaXJlY3Qodm0sIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcodm0sIFwiJHVuc2NvcGFibGVcIiksIGpzQm9vbGVhbih0cnVlKSk7XG4i
KTsKICAgICB9CiAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcHV0RGlyZWN0V2l0aG91dFRy
YW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPnVuc2NvcGFibGVzU3ltYm9sLCAmdW5zY29w
YWJsZXMsIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtIHwgSlNDOjpQcm9wZXJ0eUF0
dHJpYnV0ZTo6UmVhZE9ubHkpO1xuIik7CiB9CkBAIC00MjYwLDcgKzQyNzAsNyBAQCBzdWIgR2Vu
ZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgbXkgJG5hbWUgPSAkb3BlcmF0aW9uT3JB
dHRyaWJ1dGUtPm5hbWU7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAo
ISR7cnVudGltZUVuYWJsZUNvbmRpdGlvbmFsU3RyaW5nfSkge1xuIik7CiAgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgaGFzRGlzYWJsZWRSdW50aW1lUHJvcGVydGllcyA9
IHRydWU7XG4iKTsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBhdXRv
IHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCByZWludGVycHJldF9j
YXN0PGNvbnN0IExDaGFyKj4oXCIkbmFtZVwiKSwgc3RybGVuKFwiJG5hbWVcIikpO1xuIik7Cisg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgYXV0byBwcm9wZXJ0eU5hbWUg
PSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFy
Kj4oXCIkbmFtZVwiKSwgc3RybGVuKFwiJG5hbWVcIikpO1xuIik7CiAgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICAgICAgVk06OkRlbGV0ZVByb3BlcnR5TW9kZVNjb3BlIHNjb3Bl
KHZtLCBWTTo6RGVsZXRlUHJvcGVydHlNb2RlOjpJZ25vcmVDb25maWd1cmFibGUpO1xuIik7CiAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgSlNPYmplY3Q6OmRlbGV0ZVBy
b3BlcnR5KHRoaXMsIGdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCksIHByb3BlcnR5TmFtZSk7
XG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIH1cbiIpOwpAQCAtNDQ5
OSwxMCArNDUwOSwxMSBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICBpZiAo
JGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57SW1wbGljaXRUaGlzfSkgewogICAgICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ0ZW1wbGF0ZTw+IGlubGluZSAke2NsYXNzTmFtZX0q
IElETEF0dHJpYnV0ZTwke2NsYXNzTmFtZX0+OjpjYXN0KEV4ZWNTdGF0ZSYgc3RhdGUsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSlcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICJ7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIFZNJiB2bSA9IHN0
YXRlLnZtKCk7XG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGF1dG8g
ZGVjb2RlZFRoaXNWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpO1xuIik7CiAgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoZGVjb2RlZFRoaXNWYWx1ZS5pc1Vu
ZGVmaW5lZE9yTnVsbCgpKVxuIik7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICAgICAgZGVjb2RlZFRoaXNWYWx1ZSA9IHN0YXRlLnRoaXNWYWx1ZSgpLnRvVGhpcygmc3RhdGUs
IE5vdFN0cmljdE1vZGUpO1xuIik7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICByZXR1cm4gJGNhc3RpbmdGdW5jdGlvbihzdGF0ZS52bSgpLCBkZWNvZGVkVGhpc1ZhbHVlKTsi
KTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiAkY2FzdGluZ0Z1
bmN0aW9uKHZtLCBkZWNvZGVkVGhpc1ZhbHVlKTsiKTsKICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAifVxuXG4iKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAidGVtcGxhdGU8PiBpbmxpbmUgJHtjbGFzc05hbWV9KiBJRExBdHRyaWJ1dGU8
JHtjbGFzc05hbWV9Pjo6Y2FzdChFeGVjU3RhdGUmIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUpXG4iKTsKQEAgLTQ5NzksNyArNDk5MCwxMiBAQCBzdWIgR2VuZXJhdGVBdHRyaWJ1dGVT
ZXR0ZXJCb2R5RGVmaW5pdGlvCiAgICAgCiAgICAgcHVzaChAJG91dHB1dEFycmF5LCAic3RhdGlj
IGlubGluZSBib29sICR7YXR0cmlidXRlU2V0dGVyQm9keU5hbWV9KCIgLiBqb2luKCIsICIsIEBz
aWduYXR1cmVBcmd1bWVudHMpIC4gIilcbiIpOwogICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIntc
biIpOwotICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7XG4iKTsKKyAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgVU5VU0VEX1BBUkFNKHN0YXRl
KTtcbiIpOworICAgIGlmICgkY29kZUdlbmVyYXRvci0+SXNDb25zdHJ1Y3RvclR5cGUoJGF0dHJp
YnV0ZS0+dHlwZSkgfHwgJGF0dHJpYnV0ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57UmVwbGFjZWFi
bGV9IHx8ICRhdHRyaWJ1dGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+e1B1dEZvcndhcmRzfSkgewor
ICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgVk0mIHZtID0gdGhyb3dTY29wZS52bSgp
O1xuIik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTtcbiIpOworICAgIH0KIAogICAgIEdlbmVyYXRlQ3VzdG9t
RWxlbWVudFJlYWN0aW9uc1N0YWNrSWZOZWVkZWQoJG91dHB1dEFycmF5LCAkYXR0cmlidXRlLCAi
c3RhdGUiKTsKIApAQCAtNTAyMywyMSArNTAzOSwyMSBAQCBzdWIgR2VuZXJhdGVBdHRyaWJ1dGVT
ZXR0ZXJCb2R5RGVmaW5pdGlvCiAgICAgICAgIH0KICAgICAgICAgbXkgJGlkID0gJGF0dHJpYnV0
ZS0+bmFtZTsKICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIC8vIFNoYWRvd2luZyBh
IGJ1aWx0LWluIGNvbnN0cnVjdG9yLlxuIik7Ci0gICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwg
IiAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qoc3RhdGUudm0oKSwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZygmc3RhdGUudm0oKSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KFwi
JHtpZH1cIiksIHN0cmxlbihcIiR7aWR9XCIpKSwgdmFsdWUpO1xuIik7CisgICAgICAgIHB1c2go
QCRvdXRwdXRBcnJheSwgIiAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50
aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihcIiR7
aWR9XCIpLCBzdHJsZW4oXCIke2lkfVwiKSksIHZhbHVlKTtcbiIpOwogICAgIH0gZWxzaWYgKCRh
dHRyaWJ1dGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+e1JlcGxhY2VhYmxlfSkgewogICAgICAgICBt
eSAkaWQgPSAkYXR0cmlidXRlLT5uYW1lOwogICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIg
ICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gcHJvcGVydHkuXG4iKTsKICAgICAgICAgaWYgKEF0
dHJpYnV0ZVNob3VsZEJlT25JbnN0YW5jZSgkaW50ZXJmYWNlLCAkYXR0cmlidXRlKSkgewotICAg
ICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIHJldHVybiByZXBsYWNlU3RhdGljUHJv
cGVydHlTbG90KHN0YXRlLnZtKCksICZ0aGlzT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KCZzdGF0ZS52bSgpLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oXCIke2lkfVwiKSwg
c3RybGVuKFwiJHtpZH1cIikpLCB2YWx1ZSk7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQCRvdXRw
dXRBcnJheSwgIiAgICByZXR1cm4gcmVwbGFjZVN0YXRpY1Byb3BlcnR5U2xvdCh2bSwgJnRoaXNP
YmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
TENoYXIqPihcIiR7aWR9XCIpLCBzdHJsZW4oXCIke2lkfVwiKSksIHZhbHVlKTtcbiIpOwogICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIHJldHVy
biB0aGlzT2JqZWN0LnB1dERpcmVjdChzdGF0ZS52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KCZzdGF0ZS52bSgpLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oXCIke2lkfVwiKSwg
c3RybGVuKFwiJHtpZH1cIikpLCB2YWx1ZSk7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQCRvdXRw
dXRBcnJheSwgIiAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6
OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihcIiR7aWR9XCIp
LCBzdHJsZW4oXCIke2lkfVwiKSksIHZhbHVlKTtcbiIpOwogICAgICAgICB9CiAgICAgfSBlbHNp
ZiAoJGF0dHJpYnV0ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57UHV0Rm9yd2FyZHN9KSB7CiAgICAg
ICAgIGFzc2VydCgiW1B1dEZvcndhcmRzXSBpcyBub3QgY29tcGF0aWJsZSB3aXRoIHN0YXRpYyBh
dHRyaWJ1dGVzIikgaWYgJGF0dHJpYnV0ZS0+aXNTdGF0aWM7CiAgICAgICAgIAogICAgICAgICAj
IDMuNS45LjEuIExldCBRIGJlID8gR2V0KE8sIGlkKS4KICAgICAgICAgbXkgJGlkID0gJGF0dHJp
YnV0ZS0+bmFtZTsKLSAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGF1dG8gaWQgPSBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZS52bSgpLCByZWludGVycHJldF9jYXN0PGNvbnN0
IExDaGFyKj4oXCIke2lkfVwiKSwgc3RybGVuKFwiJHtpZH1cIikpO1xuIik7CisgICAgICAgIHB1
c2goQCRvdXRwdXRBcnJheSwgIiAgICBhdXRvIGlkID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2
bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KFwiJHtpZH1cIiksIHN0cmxlbihcIiR7
aWR9XCIpKTtcbiIpOwogICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgYXV0byB2YWx1
ZVRvRm9yd2FyZFRvID0gdGhpc09iamVjdC5nZXQoJnN0YXRlLCBpZCk7XG4iKTsKICAgICAgICAg
cHVzaChAJG91dHB1dEFycmF5LCAiICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
ZmFsc2UpO1xuIik7CiAgICAgICAgIApAQCAtNTA0OSwxMyArNTA2NSwxMyBAQCBzdWIgR2VuZXJh
dGVBdHRyaWJ1dGVTZXR0ZXJCb2R5RGVmaW5pdGlvCiAgICAgICAgIAogICAgICAgICAjIDMuNS45
LjMuIExldCBmb3J3YXJkSWQgYmUgdGhlIGlkZW50aWZpZXIgYXJndW1lbnQgb2YgdGhlIFtQdXRG
b3J3YXJkc10gZXh0ZW5kZWQgYXR0cmlidXRlLgogICAgICAgICBteSAkZm9yd2FyZElkID0gJGF0
dHJpYnV0ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57UHV0Rm9yd2FyZHN9OwotICAgICAgICBwdXNo
KEAkb3V0cHV0QXJyYXksICIgICAgYXV0byBmb3J3YXJkSWQgPSBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKCZzdGF0ZS52bSgpLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oXCIke2Zvcndh
cmRJZH1cIiksIHN0cmxlbihcIiR7Zm9yd2FyZElkfVwiKSk7XG4iKTsKKyAgICAgICAgcHVzaChA
JG91dHB1dEFycmF5LCAiICAgIGF1dG8gZm9yd2FyZElkID0gSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KFwiJHtmb3J3YXJkSWR9XCIpLCBz
dHJsZW4oXCIke2ZvcndhcmRJZH1cIikpO1xuIik7CiAgICAgICAgIAogICAgICAgICAjIDMuNS45
LjQuIFBlcmZvcm0gPyBTZXQoUSwgZm9yd2FyZElkLCBWKS4KICAgICAgICAgIyBGSVhNRTogV2hh
dCBzaG91bGQgdGhlIHNlY29uZCB2YWx1ZSB0byB0aGUgUHV0UHJvcGVydHlTbG90IGJlPwogICAg
ICAgICAjIChodHRwczovL2dpdGh1Yi5jb20vaGV5Y2FtL3dlYmlkbC9pc3N1ZXMvMzY4KQogICAg
ICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgUHV0UHJvcGVydHlTbG90IHNsb3QodmFsdWVU
b0ZvcndhcmRUbywgZmFsc2UpO1xuIik7Ci0gICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAg
ICBhc09iamVjdCh2YWx1ZVRvRm9yd2FyZFRvKS0+bWV0aG9kVGFibGUoc3RhdGUudm0oKSktPnB1
dChhc09iamVjdCh2YWx1ZVRvRm9yd2FyZFRvKSwgJnN0YXRlLCBmb3J3YXJkSWQsIHZhbHVlLCBz
bG90KTtcbiIpOworICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgYXNPYmplY3QodmFs
dWVUb0ZvcndhcmRUbyktPm1ldGhvZFRhYmxlKHZtKS0+cHV0KGFzT2JqZWN0KHZhbHVlVG9Gb3J3
YXJkVG8pLCAmc3RhdGUsIGZvcndhcmRJZCwgdmFsdWUsIHNsb3QpO1xuIik7CiAgICAgICAgIHB1
c2goQCRvdXRwdXRBcnJheSwgIiAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZh
bHNlKTtcbiIpOwogICAgICAgICAKICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIHJl
dHVybiB0cnVlO1xuIik7CkBAIC01MzMyLDcgKzUzNDgsNyBAQCBzdWIgR2VuZXJhdGVPcGVyYXRp
b25EZWZpbml0aW9uCiAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIntcbiIpOwogICAgICAg
ICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTtcbiIpOwogICAg
ICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7XG4iKTsK
LSAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIEpTQzo6TmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcigmdm0sIHN0YXRlKTtcbiIpOworICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXks
ICIgICAgSlNDOjpOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBzdGF0ZSk7XG4iKTsK
ICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pO1xuIik7CiAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7XG4iKTsKICAgICAgICAgcHVzaChAJG91dHB1dEFy
cmF5LCAiICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7XG4iKTsKQEAgLTU0
MzUsMTUgKzU0NTEsMTUgQEAgc3ViIEdlbmVyYXRlU2VyaWFsaXplckRlZmluaXRpb24KICAgICAg
ICAgICAgIGlmICgkYXR0cmlidXRlLT50eXBlLT5pc051bGxhYmxlKSB7CiAgICAgICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKCEke25hbWV9VmFsdWUuaXNOdWxsKCkpIHtc
biIpOwogICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBhdXRvKiAk
e25hbWV9U2VyaWFsaXplZFZhbHVlID0gSlMke2F0dHJpYnV0ZUludGVyZmFjZU5hbWV9OjpzZXJp
YWxpemUoc3RhdGUsICpqc0Nhc3Q8SlMke2F0dHJpYnV0ZUludGVyZmFjZU5hbWV9Kj4oJHtuYW1l
fVZhbHVlKSwgZ2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlKTtcbiIpOwotICAgICAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZygmdm0sIFwiJHtuYW1lfVwiKSwgJHtuYW1lfVNlcmlhbGl6ZWRWYWx1
ZSk7XG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmVz
dWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIFwiJHtuYW1lfVwi
KSwgJHtuYW1lfVNlcmlhbGl6ZWRWYWx1ZSk7XG4iKTsKICAgICAgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiAgICB9IGVsc2VcbiIpOwotICAgICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZygmdm0sIFwiJHtuYW1lfVwiKSwgJHtuYW1lfVZhbHVlKTtcbiIpOworICAgICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgXCIke25hbWV9XCIpLCAke25hbWV9VmFsdWUpO1xuIik7
CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgIGF1dG8qICR7bmFtZX1TZXJpYWxpemVkVmFsdWUgPSBKUyR7YXR0cmlidXRlSW50ZXJm
YWNlTmFtZX06OnNlcmlhbGl6ZShzdGF0ZSwgKmpzQ2FzdDxKUyR7YXR0cmlidXRlSW50ZXJmYWNl
TmFtZX0qPigke25hbWV9VmFsdWUpLCBnbG9iYWxPYmplY3QsIHRocm93U2NvcGUpO1xuIik7Ci0g
ICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmVzdWx0LT5wdXREaXJlY3Qo
dm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCBcIiR7bmFtZX1cIiksICR7bmFtZX1TZXJp
YWxpemVkVmFsdWUpO1xuIik7CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIg
ICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIFwiJHtu
YW1lfVwiKSwgJHtuYW1lfVNlcmlhbGl6ZWRWYWx1ZSk7XG4iKTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJlc3Vs
dC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgXCIke25hbWV9XCIp
LCAke25hbWV9VmFsdWUpO1xuIik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgXCIke25h
bWV9XCIpLCAke25hbWV9VmFsdWUpO1xuIik7CiAgICAgICAgIH0KIAogICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIlxuIik7CkBAIC02MjM0LDcgKzYyNTAsNyBAQCBzdWIgR2VuZXJhdGVDYWxs
YmFja0ltcGxlbWVudGF0aW9uQ29udGVuCiAgICAgICAgICAgICAgICAgJGNhbGxiYWNrSW52b2Nh
dGlvbiA9ICJtX2RhdGEtPmludm9rZUNhbGxiYWNrKHRoaXNWYWx1ZSwgYXJncywgSlNDYWxsYmFj
a0RhdGE6OkNhbGxiYWNrVHlwZTo6RnVuY3Rpb24sIElkZW50aWZpZXIoKSwgcmV0dXJuZWRFeGNl
cHRpb24pIjsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgbXkgJGNhbGxi
YWNrVHlwZSA9ICRudW1PcGVyYXRpb25zID4gMSA/ICJPYmplY3QiIDogIkZ1bmN0aW9uT3JPYmpl
Y3QiOwotICAgICAgICAgICAgICAgICRjYWxsYmFja0ludm9jYXRpb24gPSAibV9kYXRhLT5pbnZv
a2VDYWxsYmFjayh0aGlzVmFsdWUsIGFyZ3MsIEpTQ2FsbGJhY2tEYXRhOjpDYWxsYmFja1R5cGU6
OiR7Y2FsbGJhY2tUeXBlfSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIFwiJHtmdW5jdGlv
bk5hbWV9XCIpLCByZXR1cm5lZEV4Y2VwdGlvbikiOworICAgICAgICAgICAgICAgICRjYWxsYmFj
a0ludm9jYXRpb24gPSAibV9kYXRhLT5pbnZva2VDYWxsYmFjayh0aGlzVmFsdWUsIGFyZ3MsIEpT
Q2FsbGJhY2tEYXRhOjpDYWxsYmFja1R5cGU6OiR7Y2FsbGJhY2tUeXBlfSwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZyh2bSwgXCIke2Z1bmN0aW9uTmFtZX1cIiksIHJldHVybmVkRXhjZXB0aW9uKSI7
CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmICgkb3BlcmF0aW9uLT50eXBlLT5uYW1l
IGVxICJ2b2lkIikgewpAQCAtNzM1MSw3ICs3MzY3LDcgQEAgc3ViIEdlbmVyYXRlQ29uc3RydWN0
b3JIZWxwZXJNZXRob2RzCiAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBwdXREaXJl
Y3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgJHtjbGFzc05hbWV9Ojpwcm90b3R5
cGUodm0sIGdsb2JhbE9iamVjdCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUg
fCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1
dGU6OkRvbnRFbnVtKTtcbiIpOwogICAgIH0KIAotICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAg
ICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0cmlu
Zygmdm0sIFN0cmluZyhcIiR2aXNpYmxlSW50ZXJmYWNlTmFtZVwiX3MpKSwgSlNDOjpQcm9wZXJ0
eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7
XG4iKTsKKyAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9w
ZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcodm0sIFN0cmluZyhcIiR2aXNpYmxl
SW50ZXJmYWNlTmFtZVwiX3MpKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBK
U0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7XG4iKTsKICAgICBwdXNoKEAkb3V0cHV0
QXJyYXksICIgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVt
YmVyKCR7bGVhc3RDb25zdHJ1Y3Rvckxlbmd0aH0pLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpS
ZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTtcbiIpIGlmIGRlZmlu
ZWQgJGxlYXN0Q29uc3RydWN0b3JMZW5ndGg7CiAKICAgICBteSAkY2xhc3NGb3JUaGlzID0gIiR7
Y2xhc3NOYW1lfTo6aW5mbygpIjsKQEAgLTczNjgsNyArNzM4NCw3IEBAIHN1YiBHZW5lcmF0ZUNv
bnN0cnVjdG9ySGVscGVyTWV0aG9kcwogICAgICAgICBteSAkcnVudGltZUVuYWJsZUNvbmRpdGlv
bmFsU3RyaW5nID0gR2VuZXJhdGVSdW50aW1lRW5hYmxlQ29uZGl0aW9uYWxTdHJpbmcoJGludGVy
ZmFjZSwgJG9wZXJhdGlvbk9yQXR0cmlidXRlLCAidHJ1ZSIpOwogICAgICAgICBteSAkbmFtZSA9
ICRvcGVyYXRpb25PckF0dHJpYnV0ZS0+bmFtZTsKICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5
LCAiICAgIGlmICghJHtydW50aW1lRW5hYmxlQ29uZGl0aW9uYWxTdHJpbmd9KSB7XG4iKTsKLSAg
ICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElk
ZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4o
XCIkbmFtZVwiKSwgc3RybGVuKFwiJG5hbWVcIikpO1xuIik7CisgICAgICAgIHB1c2goQCRvdXRw
dXRBcnJheSwgIiAgICAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oXCIkbmFtZVwiKSwgc3RybGVu
KFwiJG5hbWVcIikpO1xuIik7CiAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAg
Vk06OkRlbGV0ZVByb3BlcnR5TW9kZVNjb3BlIHNjb3BlKHZtLCBWTTo6RGVsZXRlUHJvcGVydHlN
b2RlOjpJZ25vcmVDb25maWd1cmFibGUpO1xuIik7CiAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJh
eSwgIiAgICAgICAgSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KHRoaXMsIGdsb2JhbE9iamVjdC5n
bG9iYWxFeGVjKCksIHByb3BlcnR5TmFtZSk7XG4iKTsKICAgICAgICAgcHVzaChAJG91dHB1dEFy
cmF5LCAiICAgIH1cbiIpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTSW50ZXJmYWNlTmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTSW50ZXJmYWNlTmFtZS5jcHAJKHJldmlzaW9uIDI0
OTEyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU0ludGVy
ZmFjZU5hbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OCw3ICs3OCw3IEBAIHRlbXBsYXRlPD4g
SlNWYWx1ZSBKU0ludGVyZmFjZU5hbWVDb25zdHIKIHRlbXBsYXRlPD4gdm9pZCBKU0ludGVyZmFj
ZU5hbWVDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMoVk0mIHZtLCBKU0RPTUdsb2Jh
bE9iamVjdCYgZ2xvYmFsT2JqZWN0KQogewogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlO
YW1lcy0+cHJvdG90eXBlLCBKU0ludGVyZmFjZU5hbWU6OnByb3RvdHlwZSh2bSwgZ2xvYmFsT2Jq
ZWN0KSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IEpTQzo6UHJvcGVydHlB
dHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwot
ICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3Ry
aW5nKCZ2bSwgU3RyaW5nKCJJbnRlcmZhY2VOYW1lIl9zKSksIEpTQzo6UHJvcGVydHlBdHRyaWJ1
dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOworICAgIHB1
dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKHZt
LCBTdHJpbmcoIkludGVyZmFjZU5hbWUiX3MpKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVh
ZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CiAgICAgcHV0RGlyZWN0
KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDApLCBKU0M6OlByb3BlcnR5
QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsK
IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTTWFw
TGlrZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTTWFwTGlrZS5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU01hcExpa2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC05Nyw3ICs5Nyw3IEBAIHRlbXBsYXRlPD4gSlNWYWx1ZSBKU01hcExpa2VDb25zdHJ1Y3RvcjoK
IHRlbXBsYXRlPD4gdm9pZCBKU01hcExpa2VDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRp
ZXMoVk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQogewogICAgIHB1dERp
cmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU01hcExpa2U6OnByb3RvdHlw
ZSh2bSwgZ2xvYmFsT2JqZWN0KSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8
IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0
ZTo6RG9udEVudW0pOwotICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwg
anNOb250cml2aWFsU3RyaW5nKCZ2bSwgU3RyaW5nKCJNYXBMaWtlIl9zKSksIEpTQzo6UHJvcGVy
dHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0p
OworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFs
U3RyaW5nKHZtLCBTdHJpbmcoIk1hcExpa2UiX3MpKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6
UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CiAgICAgcHV0RGly
ZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDApLCBKU0M6OlByb3Bl
cnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVt
KTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
UmVhZE9ubHlNYXBMaWtlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNSZWFkT25seU1hcExpa2UuY3BwCShyZXZpc2lvbiAyNDkxMjgp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNSZWFkT25seU1h
cExpa2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NCw3ICs5NCw3IEBAIHRlbXBsYXRlPD4gSlNW
YWx1ZSBKU1JlYWRPbmx5TWFwTGlrZUNvbnMKIHRlbXBsYXRlPD4gdm9pZCBKU1JlYWRPbmx5TWFw
TGlrZUNvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGllcyhWTSYgdm0sIEpTRE9NR2xvYmFs
T2JqZWN0JiBnbG9iYWxPYmplY3QpCiB7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5h
bWVzLT5wcm90b3R5cGUsIEpTUmVhZE9ubHlNYXBMaWtlOjpwcm90b3R5cGUodm0sIGdsb2JhbE9i
amVjdCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUgfCBKU0M6OlByb3BlcnR5
QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsK
LSAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0
cmluZygmdm0sIFN0cmluZygiUmVhZE9ubHlNYXBMaWtlIl9zKSksIEpTQzo6UHJvcGVydHlBdHRy
aWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOworICAg
IHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5n
KHZtLCBTdHJpbmcoIlJlYWRPbmx5TWFwTGlrZSJfcykpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRl
OjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKICAgICBwdXRE
aXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMCksIEpTQzo6UHJv
cGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVu
dW0pOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0QWN0aXZlRE9NT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0QWN0aXZlRE9NT2JqZWN0LmNwcAkocmV2aXNp
b24gMjQ5MTI4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdEFjdGl2ZURPTU9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNSw3ICsxMDUsNyBA
QCB0ZW1wbGF0ZTw+IEpTVmFsdWUgSlNUZXN0QWN0aXZlRE9NT2JqZWN0CiB0ZW1wbGF0ZTw+IHZv
aWQgSlNUZXN0QWN0aXZlRE9NT2JqZWN0Q29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVz
KFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKIHsKICAgICBwdXREaXJl
Y3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgSlNUZXN0QWN0aXZlRE9NT2JqZWN0
Ojpwcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRv
bnREZWxldGUgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVy
dHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKLSAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFt
ZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZygmdm0sIFN0cmluZygiVGVzdEFjdGl2ZURPTU9i
amVjdCJfcykpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVy
dHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFt
ZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZyh2bSwgU3RyaW5nKCJUZXN0QWN0aXZlRE9NT2Jq
ZWN0Il9zKSksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0
eUF0dHJpYnV0ZTo6RG9udEVudW0pOwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1l
cy0+bGVuZ3RoLCBqc051bWJlcigwKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkg
fCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDRVJlYWN0aW9ucy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dENFUmVhY3Rpb25zLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENFUmVhY3Rpb25zLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTAzLDcgKzEwMyw3IEBAIHRlbXBsYXRlPD4gSlNWYWx1ZSBKU1Rlc3RDRVJlYWN0aW9u
c0NvbnMKIHRlbXBsYXRlPD4gdm9pZCBKU1Rlc3RDRVJlYWN0aW9uc0NvbnN0cnVjdG9yOjppbml0
aWFsaXplUHJvcGVydGllcyhWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3Qp
CiB7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVz
dENFUmVhY3Rpb25zOjpwcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCksIEpTQzo6UHJvcGVydHlB
dHRyaWJ1dGU6OkRvbnREZWxldGUgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8
IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKLSAgICBwdXREaXJlY3Qodm0sIHZt
LnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZygmdm0sIFN0cmluZygiVGVz
dENFUmVhY3Rpb25zIl9zKSksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlND
OjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJv
cGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKHZtLCBTdHJpbmcoIlRlc3RDRVJl
YWN0aW9ucyJfcykpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJv
cGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5
TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRP
bmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwogfQogCkBAIC0yMTYsNiAr
MjE2LDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0Q0VSZWFjdGlvbnNBdHRyaWJ1dAogCiBzdGF0
aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0Q0VSZWFjdGlvbnNBdHRyaWJ1dGVXaXRoQ0VSZWFjdGlv
bnNTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0Q0VSZWFjdGlvbnMmIHRoaXNPYmplY3Qs
IEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CisgICAgVU5VU0VEX1BB
UkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgQ3VzdG9tRWxl
bWVudFJlYWN0aW9uU3RhY2sgY3VzdG9tRWxlbWVudFJlYWN0aW9uU3RhY2soc3RhdGUpOwogICAg
IGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKQEAgLTI0OCw2ICsyNDksNyBAQCBF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RDRVJlYWN0aW9uc1JlZmxlY3RBCiAKIHN0YXRpYyBpbmxpbmUg
Ym9vbCBzZXRKU1Rlc3RDRVJlYWN0aW9uc1JlZmxlY3RBdHRyaWJ1dGVXaXRoQ0VSZWFjdGlvbnNT
ZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0Q0VSZWFjdGlvbnMmIHRoaXNPYmplY3QsIEpT
VmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CisgICAgVU5VU0VEX1BBUkFN
KHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgQ3VzdG9tRWxlbWVu
dFJlYWN0aW9uU3RhY2sgY3VzdG9tRWxlbWVudFJlYWN0aW9uU3RhY2soc3RhdGUpOwogICAgIGF1
dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKQEAgLTI4MCwxNyArMjgyLDE4IEBAIEVu
Y29kZWRKU1ZhbHVlIGpzVGVzdENFUmVhY3Rpb25zU3RyaW5naWYKIAogc3RhdGljIGlubGluZSBi
b29sIHNldEpTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXJBdHRyaWJ1dGVTZXR0ZXIoRXhlY1N0
YXRlJiBzdGF0ZSwgSlNUZXN0Q0VSZWFjdGlvbnMmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUs
IFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OwotICAgIGF1dG8gaWQgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZS52bSgpLCByZWlu
dGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oInN0cmluZ2lmaWVyQXR0cmlidXRlIiksIHN0cmxl
bigic3RyaW5naWZpZXJBdHRyaWJ1dGUiKSk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAg
ICBWTSYgdm0gPSB0aHJvd1Njb3BlLnZtKCk7CisgICAgYXV0byBpZCA9IElkZW50aWZpZXI6OmZy
b21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigic3RyaW5naWZpZXJB
dHRyaWJ1dGUiKSwgc3RybGVuKCJzdHJpbmdpZmllckF0dHJpYnV0ZSIpKTsKICAgICBhdXRvIHZh
bHVlVG9Gb3J3YXJkVG8gPSB0aGlzT2JqZWN0LmdldCgmc3RhdGUsIGlkKTsKICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKICAgICBpZiAoVU5MSUtFTFkoIXZhbHVl
VG9Gb3J3YXJkVG8uaXNPYmplY3QoKSkpIHsKICAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRl
LCB0aHJvd1Njb3BlKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICBhdXRvIGZv
cndhcmRJZCA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLnZtKCksIHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgTENoYXIqPigidmFsdWUiKSwgc3RybGVuKCJ2YWx1ZSIpKTsKKyAgICBhdXRv
IGZvcndhcmRJZCA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgTENoYXIqPigidmFsdWUiKSwgc3RybGVuKCJ2YWx1ZSIpKTsKICAgICBQdXRQcm9wZXJ0
eVNsb3Qgc2xvdCh2YWx1ZVRvRm9yd2FyZFRvLCBmYWxzZSk7Ci0gICAgYXNPYmplY3QodmFsdWVU
b0ZvcndhcmRUbyktPm1ldGhvZFRhYmxlKHN0YXRlLnZtKCkpLT5wdXQoYXNPYmplY3QodmFsdWVU
b0ZvcndhcmRUbyksICZzdGF0ZSwgZm9yd2FyZElkLCB2YWx1ZSwgc2xvdCk7CisgICAgYXNPYmpl
Y3QodmFsdWVUb0ZvcndhcmRUbyktPm1ldGhvZFRhYmxlKHZtKS0+cHV0KGFzT2JqZWN0KHZhbHVl
VG9Gb3J3YXJkVG8pLCAmc3RhdGUsIGZvcndhcmRJZCwgdmFsdWUsIHNsb3QpOwogICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwogICAgIHJldHVybiB0cnVlOwogfQpA
QCAtMzE2LDYgKzMxOSw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdENFUmVhY3Rpb25zQXR0cmli
dXQKIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdENFUmVhY3Rpb25zQXR0cmlidXRlV2l0
aENFUmVhY3Rpb25zTm90TmVlZGVkU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdENFUmVh
Y3Rpb25zJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KQogeworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOwogICAgIEN1c3RvbUVsZW1lbnRSZWFjdGlvbkRpc2FsbG93ZWRTY29wZSBjdXN0b21FbGVt
ZW50UmVhY3Rpb25EaXNhbGxvd2VkU2NvcGU7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qu
d3JhcHBlZCgpOwpAQCAtMzQ4LDYgKzM1Miw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdENFUmVh
Y3Rpb25zUmVmbGVjdEEKIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdENFUmVhY3Rpb25z
UmVmbGVjdEF0dHJpYnV0ZVdpdGhDRVJlYWN0aW9uc05vdE5lZWRlZFNldHRlcihFeGVjU3RhdGUm
IHN0YXRlLCBKU1Rlc3RDRVJlYWN0aW9ucyYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhy
b3dTY29wZSYgdGhyb3dTY29wZSkKIHsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBDdXN0b21FbGVtZW50UmVhY3Rpb25EaXNhbGxv
d2VkU2NvcGUgY3VzdG9tRWxlbWVudFJlYWN0aW9uRGlzYWxsb3dlZFNjb3BlOwogICAgIGF1dG8m
IGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKQEAgLTM4MCwxNyArMzg1LDE4IEBAIEVuY29k
ZWRKU1ZhbHVlIGpzVGVzdENFUmVhY3Rpb25zU3RyaW5naWYKIAogc3RhdGljIGlubGluZSBib29s
IHNldEpTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXJBdHRyaWJ1dGVOb3ROZWVkZWRTZXR0ZXIo
RXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0Q0VSZWFjdGlvbnMmIHRoaXNPYmplY3QsIEpTVmFsdWUg
dmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOwotICAgIGF1dG8gaWQgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZS52bSgp
LCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oInN0cmluZ2lmaWVyQXR0cmlidXRlTm90
TmVlZGVkIiksIHN0cmxlbigic3RyaW5naWZpZXJBdHRyaWJ1dGVOb3ROZWVkZWQiKSk7CisgICAg
VU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBWTSYgdm0gPSB0aHJvd1Njb3BlLnZtKCk7CisgICAg
YXV0byBpZCA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgTENoYXIqPigic3RyaW5naWZpZXJBdHRyaWJ1dGVOb3ROZWVkZWQiKSwgc3RybGVuKCJzdHJp
bmdpZmllckF0dHJpYnV0ZU5vdE5lZWRlZCIpKTsKICAgICBhdXRvIHZhbHVlVG9Gb3J3YXJkVG8g
PSB0aGlzT2JqZWN0LmdldCgmc3RhdGUsIGlkKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIGZhbHNlKTsKICAgICBpZiAoVU5MSUtFTFkoIXZhbHVlVG9Gb3J3YXJkVG8uaXNP
YmplY3QoKSkpIHsKICAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCB0aHJvd1Njb3BlKTsK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICBhdXRvIGZvcndhcmRJZCA9IElkZW50
aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLnZtKCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENo
YXIqPigidmFsdWVXaXRob3V0UmVhY3Rpb25zIiksIHN0cmxlbigidmFsdWVXaXRob3V0UmVhY3Rp
b25zIikpOworICAgIGF1dG8gZm9yd2FyZElkID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwg
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJ2YWx1ZVdpdGhvdXRSZWFjdGlvbnMiKSwg
c3RybGVuKCJ2YWx1ZVdpdGhvdXRSZWFjdGlvbnMiKSk7CiAgICAgUHV0UHJvcGVydHlTbG90IHNs
b3QodmFsdWVUb0ZvcndhcmRUbywgZmFsc2UpOwotICAgIGFzT2JqZWN0KHZhbHVlVG9Gb3J3YXJk
VG8pLT5tZXRob2RUYWJsZShzdGF0ZS52bSgpKS0+cHV0KGFzT2JqZWN0KHZhbHVlVG9Gb3J3YXJk
VG8pLCAmc3RhdGUsIGZvcndhcmRJZCwgdmFsdWUsIHNsb3QpOworICAgIGFzT2JqZWN0KHZhbHVl
VG9Gb3J3YXJkVG8pLT5tZXRob2RUYWJsZSh2bSktPnB1dChhc09iamVjdCh2YWx1ZVRvRm9yd2Fy
ZFRvKSwgJnN0YXRlLCBmb3J3YXJkSWQsIHZhbHVlLCBzbG90KTsKICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDRVJlYWN0aW9uc1N0
cmluZ2lmaWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllci5jcHAJKHJldmlzaW9uIDI0
OTEyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RD
RVJlYWN0aW9uc1N0cmluZ2lmaWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTAsNyArOTAsNyBA
QCB0ZW1wbGF0ZTw+IEpTVmFsdWUgSlNUZXN0Q0VSZWFjdGlvbnNTdHJpCiB0ZW1wbGF0ZTw+IHZv
aWQgSlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllckNvbnN0cnVjdG9yOjppbml0aWFsaXplUHJv
cGVydGllcyhWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCiB7CiAgICAg
cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdENFUmVhY3Rp
b25zU3RyaW5naWZpZXI6OnByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KSwgSlNDOjpQcm9wZXJ0
eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5
IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwotICAgIHB1dERpcmVjdCh2bSwg
dm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKCZ2bSwgU3RyaW5nKCJU
ZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllciJfcykpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpS
ZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKKyAgICBwdXREaXJl
Y3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZyh2bSwgU3Ry
aW5nKCJUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllciJfcykpLCBKU0M6OlByb3BlcnR5QXR0cmli
dXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKICAgICBw
dXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMCksIEpTQzo6
UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9u
dEVudW0pOwogfQogCkBAIC0xOTgsNiArMTk4LDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0Q0VS
ZWFjdGlvbnNTdHJpbmdpZgogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0Q0VSZWFjdGlv
bnNTdHJpbmdpZmllclZhbHVlU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdENFUmVhY3Rp
b25zU3RyaW5naWZpZXImIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRo
cm93U2NvcGUpCiB7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7CiAgICAgQ3VzdG9tRWxlbWVudFJlYWN0aW9uU3RhY2sgY3VzdG9tRWxlbWVu
dFJlYWN0aW9uU3RhY2soc3RhdGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBw
ZWQoKTsKQEAgLTIzMCw2ICsyMzEsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RDRVJlYWN0aW9u
c1N0cmluZ2lmCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RDRVJlYWN0aW9uc1N0cmlu
Z2lmaWVyVmFsdWVXaXRob3V0UmVhY3Rpb25zU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVz
dENFUmVhY3Rpb25zU3RyaW5naWZpZXImIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93
U2NvcGUmIHRocm93U2NvcGUpCiB7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgQ3VzdG9tRWxlbWVudFJlYWN0aW9uRGlzYWxsb3dl
ZFNjb3BlIGN1c3RvbUVsZW1lbnRSZWFjdGlvbkRpc2FsbG93ZWRTY29wZTsKICAgICBhdXRvJiBp
bXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2FsbFRyYWNlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENhbGxUcmFjZXIuY3Bw
CShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0Q2FsbFRyYWNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNyw3ICsxMTcs
NyBAQCB0ZW1wbGF0ZTw+IEpTVmFsdWUgSlNUZXN0Q2FsbFRyYWNlckNvbnN0CiB0ZW1wbGF0ZTw+
IHZvaWQgSlNUZXN0Q2FsbFRyYWNlckNvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGllcyhW
TSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCiB7CiAgICAgcHV0RGlyZWN0
KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdENhbGxUcmFjZXI6OnByb3Rv
dHlwZSh2bSwgZ2xvYmFsT2JqZWN0KSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0
ZSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJp
YnV0ZTo6RG9udEVudW0pOwotICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFt
ZSwganNOb250cml2aWFsU3RyaW5nKCZ2bSwgU3RyaW5nKCJUZXN0Q2FsbFRyYWNlciJfcykpLCBK
U0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6
OkRvbnRFbnVtKTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpz
Tm9udHJpdmlhbFN0cmluZyh2bSwgU3RyaW5nKCJUZXN0Q2FsbFRyYWNlciJfcykpLCBKU0M6OlBy
b3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRF
bnVtKTsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1i
ZXIoMCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0
dHJpYnV0ZTo6RG9udEVudW0pOwogICAgIHJlaWZ5U3RhdGljUHJvcGVydGllcyh2bSwgSlNUZXN0
Q2FsbFRyYWNlcjo6aW5mbygpLCBKU1Rlc3RDYWxsVHJhY2VyQ29uc3RydWN0b3JUYWJsZVZhbHVl
cywgKnRoaXMpOwogfQpAQCAtMjM4LDYgKzIzOCw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdENh
bGxUcmFjZXJUZXN0QXR0cmkKIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdENhbGxUcmFj
ZXJUZXN0QXR0cmlidXRlSW50ZXJmYWNlU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdENh
bGxUcmFjZXImIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2Nv
cGUpCiB7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8g
bmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETEJvb2xlYW4+KHN0YXRlLCB2YWx1ZSk7CkBAIC0yNzMs
NiArMjc0LDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0Q2FsbFRyYWNlclRlc3RBdHRyaQogCiBz
dGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0Q2FsbFRyYWNlclRlc3RBdHRyaWJ1dGVTcGVjaWZp
ZWRTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0Q2FsbFRyYWNlciYgdGhpc09iamVjdCwg
SlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKKyAgICBVTlVTRURfUEFS
QU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBs
ID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8
SURMQm9vbGVhbj4oc3RhdGUsIHZhbHVlKTsKQEAgLTMwOCw2ICszMTAsNyBAQCBFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RDYWxsVHJhY2VyVGVzdEF0dHJpCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRK
U1Rlc3RDYWxsVHJhY2VyVGVzdEF0dHJpYnV0ZVdpdGhWYXJpYW50U2V0dGVyKEV4ZWNTdGF0ZSYg
c3RhdGUsIEpTVGVzdENhbGxUcmFjZXImIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93
U2NvcGUmIHRocm93U2NvcGUpCiB7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBl
ZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETFVuaW9uPElETEJvb2xlYW4s
IElETEZsb2F0LCBJRExET01TdHJpbmc+PihzdGF0ZSwgdmFsdWUpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENhbGxiYWNrSW50ZXJmYWNlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0Q2FsbGJhY2tJbnRlcmZhY2UuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2FsbGJhY2tJbnRlcmZhY2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NCw3ICs5NCw3IEBAIHRlbXBsYXRlPD4gVGVzdENhbGxi
YWNrSW50ZXJmYWNlOjpEaWN0aW8KICAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQpCiAgICAgICAg
IG9wdGlvbmFsTWVtYmVyVmFsdWUgPSBqc1VuZGVmaW5lZCgpOwogICAgIGVsc2UgewotICAgICAg
ICBvcHRpb25hbE1lbWJlclZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKCZzdGF0ZSwgIm9wdGlvbmFsTWVtYmVyIikpOworICAgICAgICBvcHRpb25hbE1l
bWJlclZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZt
LCAib3B0aW9uYWxNZW1iZXIiKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dT
Y29wZSwgeyB9KTsKICAgICB9CiAgICAgaWYgKCFvcHRpb25hbE1lbWJlclZhbHVlLmlzVW5kZWZp
bmVkKCkpIHsKQEAgLTEwNSw3ICsxMDUsNyBAQCB0ZW1wbGF0ZTw+IFRlc3RDYWxsYmFja0ludGVy
ZmFjZTo6RGljdGlvCiAgICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKQogICAgICAgICByZXF1aXJl
ZE1lbWJlclZhbHVlID0ganNVbmRlZmluZWQoKTsKICAgICBlbHNlIHsKLSAgICAgICAgcmVxdWly
ZWRNZW1iZXJWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zygmc3RhdGUsICJyZXF1aXJlZE1lbWJlciIpKTsKKyAgICAgICAgcmVxdWlyZWRNZW1iZXJWYWx1
ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInJlcXVp
cmVkTWVtYmVyIikpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsg
fSk7CiAgICAgfQogICAgIGlmICghcmVxdWlyZWRNZW1iZXJWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7
CkBAIC0xNjAsNyArMTYwLDcgQEAgdGVtcGxhdGU8PiBKU1ZhbHVlIEpTVGVzdENhbGxiYWNrSW50
ZXJmYQogdGVtcGxhdGU8PiB2b2lkIEpTVGVzdENhbGxiYWNrSW50ZXJmYWNlQ29uc3RydWN0b3I6
OmluaXRpYWxpemVQcm9wZXJ0aWVzKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9i
amVjdCkKIHsKICAgICBVTlVTRURfUEFSQU0oZ2xvYmFsT2JqZWN0KTsKLSAgICBwdXREaXJlY3Qo
dm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZygmdm0sIFN0cmlu
ZygiVGVzdENhbGxiYWNrSW50ZXJmYWNlIl9zKSksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJl
YWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOworICAgIHB1dERpcmVj
dCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKHZtLCBTdHJp
bmcoIlRlc3RDYWxsYmFja0ludGVyZmFjZSJfcykpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpS
ZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKICAgICBwdXREaXJl
Y3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMCksIEpTQzo6UHJvcGVy
dHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0p
OwogICAgIHJlaWZ5U3RhdGljUHJvcGVydGllcyh2bSwgbnVsbHB0ciwgSlNUZXN0Q2FsbGJhY2tJ
bnRlcmZhY2VDb25zdHJ1Y3RvclRhYmxlVmFsdWVzLCAqdGhpcyk7CiB9CkBAIC0xODksNyArMTg5
LDcgQEAgQ2FsbGJhY2tSZXN1bHQ8dHlwZW5hbWUgSURMVm9pZDo6SW1wbGVtZQogICAgIEFTU0VS
VCghYXJncy5oYXNPdmVyZmxvd2VkKCkpOwogCiAgICAgTmFrZWRQdHI8SlNDOjpFeGNlcHRpb24+
IHJldHVybmVkRXhjZXB0aW9uOwotICAgIG1fZGF0YS0+aW52b2tlQ2FsbGJhY2sodGhpc1ZhbHVl
LCBhcmdzLCBKU0NhbGxiYWNrRGF0YTo6Q2FsbGJhY2tUeXBlOjpPYmplY3QsIElkZW50aWZpZXI6
OmZyb21TdHJpbmcoJnZtLCAiY2FsbGJhY2tXaXRoTm9QYXJhbSIpLCByZXR1cm5lZEV4Y2VwdGlv
bik7CisgICAgbV9kYXRhLT5pbnZva2VDYWxsYmFjayh0aGlzVmFsdWUsIGFyZ3MsIEpTQ2FsbGJh
Y2tEYXRhOjpDYWxsYmFja1R5cGU6Ok9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwg
ImNhbGxiYWNrV2l0aE5vUGFyYW0iKSwgcmV0dXJuZWRFeGNlcHRpb24pOwogICAgIGlmIChyZXR1
cm5lZEV4Y2VwdGlvbikgewogICAgICAgICByZXBvcnRFeGNlcHRpb24oJnN0YXRlLCByZXR1cm5l
ZEV4Y2VwdGlvbik7CiAgICAgICAgIHJldHVybiBDYWxsYmFja1Jlc3VsdFR5cGU6OkV4Y2VwdGlv
blRocm93bjsKQEAgLTIxNiw3ICsyMTYsNyBAQCBDYWxsYmFja1Jlc3VsdDx0eXBlbmFtZSBJRExW
b2lkOjpJbXBsZW1lCiAgICAgQVNTRVJUKCFhcmdzLmhhc092ZXJmbG93ZWQoKSk7CiAKICAgICBO
YWtlZFB0cjxKU0M6OkV4Y2VwdGlvbj4gcmV0dXJuZWRFeGNlcHRpb247Ci0gICAgbV9kYXRhLT5p
bnZva2VDYWxsYmFjayh0aGlzVmFsdWUsIGFyZ3MsIEpTQ2FsbGJhY2tEYXRhOjpDYWxsYmFja1R5
cGU6Ok9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJjYWxsYmFja1dpdGhBcnJh
eVBhcmFtIiksIHJldHVybmVkRXhjZXB0aW9uKTsKKyAgICBtX2RhdGEtPmludm9rZUNhbGxiYWNr
KHRoaXNWYWx1ZSwgYXJncywgSlNDYWxsYmFja0RhdGE6OkNhbGxiYWNrVHlwZTo6T2JqZWN0LCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiY2FsbGJhY2tXaXRoQXJyYXlQYXJhbSIpLCByZXR1
cm5lZEV4Y2VwdGlvbik7CiAgICAgaWYgKHJldHVybmVkRXhjZXB0aW9uKSB7CiAgICAgICAgIHJl
cG9ydEV4Y2VwdGlvbigmc3RhdGUsIHJldHVybmVkRXhjZXB0aW9uKTsKICAgICAgICAgcmV0dXJu
IENhbGxiYWNrUmVzdWx0VHlwZTo6RXhjZXB0aW9uVGhyb3duOwpAQCAtMjQ0LDcgKzI0NCw3IEBA
IENhbGxiYWNrUmVzdWx0PHR5cGVuYW1lIElETFZvaWQ6OkltcGxlbWUKICAgICBBU1NFUlQoIWFy
Z3MuaGFzT3ZlcmZsb3dlZCgpKTsKIAogICAgIE5ha2VkUHRyPEpTQzo6RXhjZXB0aW9uPiByZXR1
cm5lZEV4Y2VwdGlvbjsKLSAgICBtX2RhdGEtPmludm9rZUNhbGxiYWNrKHRoaXNWYWx1ZSwgYXJn
cywgSlNDYWxsYmFja0RhdGE6OkNhbGxiYWNrVHlwZTo6T2JqZWN0LCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKCZ2bSwgImNhbGxiYWNrV2l0aFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZVBhcmFtIiksIHJl
dHVybmVkRXhjZXB0aW9uKTsKKyAgICBtX2RhdGEtPmludm9rZUNhbGxiYWNrKHRoaXNWYWx1ZSwg
YXJncywgSlNDYWxsYmFja0RhdGE6OkNhbGxiYWNrVHlwZTo6T2JqZWN0LCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCAiY2FsbGJhY2tXaXRoU2VyaWFsaXplZFNjcmlwdFZhbHVlUGFyYW0iKSwg
cmV0dXJuZWRFeGNlcHRpb24pOwogICAgIGlmIChyZXR1cm5lZEV4Y2VwdGlvbikgewogICAgICAg
ICByZXBvcnRFeGNlcHRpb24oJnN0YXRlLCByZXR1cm5lZEV4Y2VwdGlvbik7CiAgICAgICAgIHJl
dHVybiBDYWxsYmFja1Jlc3VsdFR5cGU6OkV4Y2VwdGlvblRocm93bjsKQEAgLTI3MSw3ICsyNzEs
NyBAQCBDYWxsYmFja1Jlc3VsdDx0eXBlbmFtZSBJRExWb2lkOjpJbXBsZW1lCiAgICAgQVNTRVJU
KCFhcmdzLmhhc092ZXJmbG93ZWQoKSk7CiAKICAgICBOYWtlZFB0cjxKU0M6OkV4Y2VwdGlvbj4g
cmV0dXJuZWRFeGNlcHRpb247Ci0gICAgbV9kYXRhLT5pbnZva2VDYWxsYmFjayh0aGlzVmFsdWUs
IGFyZ3MsIEpTQ2FsbGJhY2tEYXRhOjpDYWxsYmFja1R5cGU6Ok9iamVjdCwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZygmdm0sICJjYWxsYmFja1dpdGhTdHJpbmdMaXN0IiksIHJldHVybmVkRXhjZXB0
aW9uKTsKKyAgICBtX2RhdGEtPmludm9rZUNhbGxiYWNrKHRoaXNWYWx1ZSwgYXJncywgSlNDYWxs
YmFja0RhdGE6OkNhbGxiYWNrVHlwZTo6T2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZt
LCAiY2FsbGJhY2tXaXRoU3RyaW5nTGlzdCIpLCByZXR1cm5lZEV4Y2VwdGlvbik7CiAgICAgaWYg
KHJldHVybmVkRXhjZXB0aW9uKSB7CiAgICAgICAgIHJlcG9ydEV4Y2VwdGlvbigmc3RhdGUsIHJl
dHVybmVkRXhjZXB0aW9uKTsKICAgICAgICAgcmV0dXJuIENhbGxiYWNrUmVzdWx0VHlwZTo6RXhj
ZXB0aW9uVGhyb3duOwpAQCAtMjk4LDcgKzI5OCw3IEBAIENhbGxiYWNrUmVzdWx0PHR5cGVuYW1l
IElETFZvaWQ6OkltcGxlbWUKICAgICBBU1NFUlQoIWFyZ3MuaGFzT3ZlcmZsb3dlZCgpKTsKIAog
ICAgIE5ha2VkUHRyPEpTQzo6RXhjZXB0aW9uPiByZXR1cm5lZEV4Y2VwdGlvbjsKLSAgICBtX2Rh
dGEtPmludm9rZUNhbGxiYWNrKHRoaXNWYWx1ZSwgYXJncywgSlNDYWxsYmFja0RhdGE6OkNhbGxi
YWNrVHlwZTo6T2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImNhbGxiYWNrV2l0
aEJvb2xlYW4iKSwgcmV0dXJuZWRFeGNlcHRpb24pOworICAgIG1fZGF0YS0+aW52b2tlQ2FsbGJh
Y2sodGhpc1ZhbHVlLCBhcmdzLCBKU0NhbGxiYWNrRGF0YTo6Q2FsbGJhY2tUeXBlOjpPYmplY3Qs
IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJjYWxsYmFja1dpdGhCb29sZWFuIiksIHJldHVy
bmVkRXhjZXB0aW9uKTsKICAgICBpZiAocmV0dXJuZWRFeGNlcHRpb24pIHsKICAgICAgICAgcmVw
b3J0RXhjZXB0aW9uKCZzdGF0ZSwgcmV0dXJuZWRFeGNlcHRpb24pOwogICAgICAgICByZXR1cm4g
Q2FsbGJhY2tSZXN1bHRUeXBlOjpFeGNlcHRpb25UaHJvd247CkBAIC0zMjYsNyArMzI2LDcgQEAg
Q2FsbGJhY2tSZXN1bHQ8dHlwZW5hbWUgSURMVm9pZDo6SW1wbGVtZQogICAgIEFTU0VSVCghYXJn
cy5oYXNPdmVyZmxvd2VkKCkpOwogCiAgICAgTmFrZWRQdHI8SlNDOjpFeGNlcHRpb24+IHJldHVy
bmVkRXhjZXB0aW9uOwotICAgIG1fZGF0YS0+aW52b2tlQ2FsbGJhY2sodGhpc1ZhbHVlLCBhcmdz
LCBKU0NhbGxiYWNrRGF0YTo6Q2FsbGJhY2tUeXBlOjpPYmplY3QsIElkZW50aWZpZXI6OmZyb21T
dHJpbmcoJnZtLCAiY2FsbGJhY2tSZXF1aXJlc1RoaXNUb1Bhc3MiKSwgcmV0dXJuZWRFeGNlcHRp
b24pOworICAgIG1fZGF0YS0+aW52b2tlQ2FsbGJhY2sodGhpc1ZhbHVlLCBhcmdzLCBKU0NhbGxi
YWNrRGF0YTo6Q2FsbGJhY2tUeXBlOjpPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0s
ICJjYWxsYmFja1JlcXVpcmVzVGhpc1RvUGFzcyIpLCByZXR1cm5lZEV4Y2VwdGlvbik7CiAgICAg
aWYgKHJldHVybmVkRXhjZXB0aW9uKSB7CiAgICAgICAgIHJlcG9ydEV4Y2VwdGlvbigmc3RhdGUs
IHJldHVybmVkRXhjZXB0aW9uKTsKICAgICAgICAgcmV0dXJuIENhbGxiYWNrUmVzdWx0VHlwZTo6
RXhjZXB0aW9uVGhyb3duOwpAQCAtMzUyLDcgKzM1Miw3IEBAIENhbGxiYWNrUmVzdWx0PHR5cGVu
YW1lIElETERPTVN0cmluZzo6SW0KICAgICBBU1NFUlQoIWFyZ3MuaGFzT3ZlcmZsb3dlZCgpKTsK
IAogICAgIE5ha2VkUHRyPEpTQzo6RXhjZXB0aW9uPiByZXR1cm5lZEV4Y2VwdGlvbjsKLSAgICBh
dXRvIGpzUmVzdWx0ID0gbV9kYXRhLT5pbnZva2VDYWxsYmFjayh0aGlzVmFsdWUsIGFyZ3MsIEpT
Q2FsbGJhY2tEYXRhOjpDYWxsYmFja1R5cGU6Ok9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zygmdm0sICJjYWxsYmFja1dpdGhBUmV0dXJuVmFsdWUiKSwgcmV0dXJuZWRFeGNlcHRpb24pOwor
ICAgIGF1dG8ganNSZXN1bHQgPSBtX2RhdGEtPmludm9rZUNhbGxiYWNrKHRoaXNWYWx1ZSwgYXJn
cywgSlNDYWxsYmFja0RhdGE6OkNhbGxiYWNrVHlwZTo6T2JqZWN0LCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKHZtLCAiY2FsbGJhY2tXaXRoQVJldHVyblZhbHVlIiksIHJldHVybmVkRXhjZXB0aW9u
KTsKICAgICBpZiAocmV0dXJuZWRFeGNlcHRpb24pIHsKICAgICAgICAgcmVwb3J0RXhjZXB0aW9u
KCZzdGF0ZSwgcmV0dXJuZWRFeGNlcHRpb24pOwogICAgICAgICByZXR1cm4gQ2FsbGJhY2tSZXN1
bHRUeXBlOjpFeGNlcHRpb25UaHJvd247CkBAIC0zODIsNyArMzgyLDcgQEAgQ2FsbGJhY2tSZXN1
bHQ8dHlwZW5hbWUgSURMRE9NU3RyaW5nOjpJbQogICAgIEFTU0VSVCghYXJncy5oYXNPdmVyZmxv
d2VkKCkpOwogCiAgICAgTmFrZWRQdHI8SlNDOjpFeGNlcHRpb24+IHJldHVybmVkRXhjZXB0aW9u
OwotICAgIGF1dG8ganNSZXN1bHQgPSBtX2RhdGEtPmludm9rZUNhbGxiYWNrKHRoaXNWYWx1ZSwg
YXJncywgSlNDYWxsYmFja0RhdGE6OkNhbGxiYWNrVHlwZTo6T2JqZWN0LCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKCZ2bSwgImNhbGxiYWNrVGhhdFJldGhyb3dzRXhjZXB0aW9ucyIpLCByZXR1cm5l
ZEV4Y2VwdGlvbik7CisgICAgYXV0byBqc1Jlc3VsdCA9IG1fZGF0YS0+aW52b2tlQ2FsbGJhY2so
dGhpc1ZhbHVlLCBhcmdzLCBKU0NhbGxiYWNrRGF0YTo6Q2FsbGJhY2tUeXBlOjpPYmplY3QsIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJjYWxsYmFja1RoYXRSZXRocm93c0V4Y2VwdGlvbnMi
KSwgcmV0dXJuZWRFeGNlcHRpb24pOwogICAgIGlmIChyZXR1cm5lZEV4Y2VwdGlvbikgewogICAg
ICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICAgICAg
dGhyb3dFeGNlcHRpb24oJnN0YXRlLCB0aHJvd1Njb3BlLCByZXR1cm5lZEV4Y2VwdGlvbik7CkBA
IC00MTAsNyArNDEwLDcgQEAgQ2FsbGJhY2tSZXN1bHQ8dHlwZW5hbWUgSURMRE9NU3RyaW5nOjpJ
bQogICAgIEFTU0VSVCghYXJncy5oYXNPdmVyZmxvd2VkKCkpOwogCiAgICAgTmFrZWRQdHI8SlND
OjpFeGNlcHRpb24+IHJldHVybmVkRXhjZXB0aW9uOwotICAgIGF1dG8ganNSZXN1bHQgPSBtX2Rh
dGEtPmludm9rZUNhbGxiYWNrKHRoaXNWYWx1ZSwgYXJncywgSlNDYWxsYmFja0RhdGE6OkNhbGxi
YWNrVHlwZTo6T2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImNhbGxiYWNrVGhh
dFNraXBzSW52b2tlQ2hlY2siKSwgcmV0dXJuZWRFeGNlcHRpb24pOworICAgIGF1dG8ganNSZXN1
bHQgPSBtX2RhdGEtPmludm9rZUNhbGxiYWNrKHRoaXNWYWx1ZSwgYXJncywgSlNDYWxsYmFja0Rh
dGE6OkNhbGxiYWNrVHlwZTo6T2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiY2Fs
bGJhY2tUaGF0U2tpcHNJbnZva2VDaGVjayIpLCByZXR1cm5lZEV4Y2VwdGlvbik7CiAgICAgaWYg
KHJldHVybmVkRXhjZXB0aW9uKSB7CiAgICAgICAgIHJlcG9ydEV4Y2VwdGlvbigmc3RhdGUsIHJl
dHVybmVkRXhjZXB0aW9uKTsKICAgICAgICAgcmV0dXJuIENhbGxiYWNrUmVzdWx0VHlwZTo6RXhj
ZXB0aW9uVGhyb3duOwpAQCAtNDQwLDcgKzQ0MCw3IEBAIENhbGxiYWNrUmVzdWx0PHR5cGVuYW1l
IElETERPTVN0cmluZzo6SW0KICAgICBBU1NFUlQoIWFyZ3MuaGFzT3ZlcmZsb3dlZCgpKTsKIAog
ICAgIE5ha2VkUHRyPEpTQzo6RXhjZXB0aW9uPiByZXR1cm5lZEV4Y2VwdGlvbjsKLSAgICBhdXRv
IGpzUmVzdWx0ID0gbV9kYXRhLT5pbnZva2VDYWxsYmFjayh0aGlzVmFsdWUsIGFyZ3MsIEpTQ2Fs
bGJhY2tEYXRhOjpDYWxsYmFja1R5cGU6Ok9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygm
dm0sICJjYWxsYmFja1dpdGhUaGlzT2JqZWN0IiksIHJldHVybmVkRXhjZXB0aW9uKTsKKyAgICBh
dXRvIGpzUmVzdWx0ID0gbV9kYXRhLT5pbnZva2VDYWxsYmFjayh0aGlzVmFsdWUsIGFyZ3MsIEpT
Q2FsbGJhY2tEYXRhOjpDYWxsYmFja1R5cGU6Ok9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zyh2bSwgImNhbGxiYWNrV2l0aFRoaXNPYmplY3QiKSwgcmV0dXJuZWRFeGNlcHRpb24pOwogICAg
IGlmIChyZXR1cm5lZEV4Y2VwdGlvbikgewogICAgICAgICByZXBvcnRFeGNlcHRpb24oJnN0YXRl
LCByZXR1cm5lZEV4Y2VwdGlvbik7CiAgICAgICAgIHJldHVybiBDYWxsYmFja1Jlc3VsdFR5cGU6
OkV4Y2VwdGlvblRocm93bjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENsYXNz
V2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENsYXNzV2l0aEpTQnVpbHRp
bkNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzksNyArNzksNyBAQCB0ZW1wbGF0
ZTw+IEpTVmFsdWUgSlNUZXN0Q2xhc3NXaXRoSlNCdWlsCiB0ZW1wbGF0ZTw+IHZvaWQgSlNUZXN0
Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3Bl
cnRpZXMoVk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQogewogICAgIHB1
dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3RDbGFzc1dpdGhK
U0J1aWx0aW5Db25zdHJ1Y3Rvcjo6cHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QpLCBKU0M6OlBy
b3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVh
ZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7Ci0gICAgcHV0RGlyZWN0
KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcoJnZtLCBTdHJp
bmcoIlRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvciJfcykpLCBKU0M6OlByb3BlcnR5
QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsK
KyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0
cmluZyh2bSwgU3RyaW5nKCJUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IiX3MpKSwg
SlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRl
OjpEb250RW51bSk7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgs
IGpzTnVtYmVyKDApLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJv
cGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERPTUpJVC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERPTUpJVC5jcHAJKHJl
dmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RET01KSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MDAsNyArNTAwLDcgQEAgdGVt
cGxhdGU8PiBKU1ZhbHVlIEpTVGVzdERPTUpJVENvbnN0cnVjdAogdGVtcGxhdGU8PiB2b2lkIEpT
VGVzdERPTUpJVENvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGllcyhWTSYgdm0sIEpTRE9N
R2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCiB7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9w
ZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdERPTUpJVDo6cHJvdG90eXBlKHZtLCBnbG9iYWxP
YmplY3QpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgSlNDOjpQcm9wZXJ0
eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7
Ci0gICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxT
dHJpbmcoJnZtLCBTdHJpbmcoIlRlc3RET01KSVQiX3MpKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0
ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CisgICAgcHV0
RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcodm0s
IFN0cmluZygiVGVzdERPTUpJVCJfcykpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25s
eSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKICAgICBwdXREaXJlY3Qodm0s
IHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMCksIEpTQzo6UHJvcGVydHlBdHRy
aWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwogfQog
CkBAIC0xMTM0LDcgKzExMzQsNyBAQCBKU0M6OkVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04g
anNUZXN0CiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBWTSYgdm0gPSBzdGF0ZS0+
dm0oKTsKLSAgICBKU0M6Ok5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBzdGF0ZSk7
CisgICAgSlNDOjpOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBzdGF0ZSk7CiAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7
CkBAIC0xMTY2LDcgKzExNjYsNyBAQCBKU0M6OkVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04g
anNUZXN0CiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBWTSYgdm0gPSBzdGF0ZS0+
dm0oKTsKLSAgICBKU0M6Ok5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBzdGF0ZSk7
CisgICAgSlNDOjpOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBzdGF0ZSk7CiAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7
CkBAIC0xMTk0LDcgKzExOTQsNyBAQCBKU0M6OkVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04g
anNUZXN0CiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBWTSYgdm0gPSBzdGF0ZS0+
dm0oKTsKLSAgICBKU0M6Ok5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBzdGF0ZSk7
CisgICAgSlNDOjpOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBzdGF0ZSk7CiAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7
CkBAIC0xMjIyLDcgKzEyMjIsNyBAQCBKU0M6OkVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04g
anNUZXN0CiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBWTSYgdm0gPSBzdGF0ZS0+
dm0oKTsKLSAgICBKU0M6Ok5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBzdGF0ZSk7
CisgICAgSlNDOjpOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBzdGF0ZSk7CiAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7
CkBAIC0xMjUyLDcgKzEyNTIsNyBAQCBKU0M6OkVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04g
anNUZXN0CiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBWTSYgdm0gPSBzdGF0ZS0+
dm0oKTsKLSAgICBKU0M6Ok5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBzdGF0ZSk7
CisgICAgSlNDOjpOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBzdGF0ZSk7CiAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RW5h
YmxlZEJ5U2V0dGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdEVuYWJsZWRCeVNldHRpbmcuY3BwCShyZXZpc2lvbiAyNDkx
MjgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RW5h
YmxlZEJ5U2V0dGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMCw3ICsxMDAsNyBAQCB0ZW1w
bGF0ZTw+IEpTVmFsdWUgSlNUZXN0RW5hYmxlZEJ5U2V0dGluCiB0ZW1wbGF0ZTw+IHZvaWQgSlNU
ZXN0RW5hYmxlZEJ5U2V0dGluZ0NvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGllcyhWTSYg
dm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCiB7CiAgICAgcHV0RGlyZWN0KHZt
LCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdEVuYWJsZWRCeVNldHRpbmc6OnBy
b3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERl
bGV0ZSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0
dHJpYnV0ZTo6RG9udEVudW0pOwotICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+
bmFtZSwganNOb250cml2aWFsU3RyaW5nKCZ2bSwgU3RyaW5nKCJUZXN0RW5hYmxlZEJ5U2V0dGlu
ZyJfcykpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlB
dHRyaWJ1dGU6OkRvbnRFbnVtKTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMt
Pm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZyh2bSwgU3RyaW5nKCJUZXN0RW5hYmxlZEJ5U2V0dGlu
ZyJfcykpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlB
dHRyaWJ1dGU6OkRvbnRFbnVtKTsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMt
Pmxlbmd0aCwganNOdW1iZXIoMCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwg
SlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwogfQogCkBAIC0xMzMsNyArMTMzLDcg
QEAgdm9pZCBKU1Rlc3RFbmFibGVkQnlTZXR0aW5nUHJvdG90eXBlOjpmaQogI2lmIEVOQUJMRShU
RVNUX0ZFQVRVUkUpCiAgICAgaWYgKCFkb3duY2FzdDxEb2N1bWVudD4oanNDYXN0PEpTRE9NR2xv
YmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpLT5z
ZXR0aW5ncygpLnRlc3RTZXR0aW5nRW5hYmxlZCgpKSB7CiAgICAgICAgIGhhc0Rpc2FibGVkUnVu
dGltZVByb3BlcnRpZXMgPSB0cnVlOwotICAgICAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50
aWZpZXI6OmZyb21TdHJpbmcoJnZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oImVu
YWJsZWRCeVNldHRpbmdPcGVyYXRpb24iKSwgc3RybGVuKCJlbmFibGVkQnlTZXR0aW5nT3BlcmF0
aW9uIikpOworICAgICAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb21TdHJp
bmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiZW5hYmxlZEJ5U2V0dGluZ09w
ZXJhdGlvbiIpLCBzdHJsZW4oImVuYWJsZWRCeVNldHRpbmdPcGVyYXRpb24iKSk7CiAgICAgICAg
IFZNOjpEZWxldGVQcm9wZXJ0eU1vZGVTY29wZSBzY29wZSh2bSwgVk06OkRlbGV0ZVByb3BlcnR5
TW9kZTo6SWdub3JlQ29uZmlndXJhYmxlKTsKICAgICAgICAgSlNPYmplY3Q6OmRlbGV0ZVByb3Bl
cnR5KHRoaXMsIGdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCksIHByb3BlcnR5TmFtZSk7CiAg
ICAgfQpAQCAtMTQxLDcgKzE0MSw3IEBAIHZvaWQgSlNUZXN0RW5hYmxlZEJ5U2V0dGluZ1Byb3Rv
dHlwZTo6ZmkKICNpZiBFTkFCTEUoVEVTVF9GRUFUVVJFKQogICAgIGlmICghZG93bmNhc3Q8RG9j
dW1lbnQ+KGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCgpKS0+c2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpKS0+c2V0dGluZ3MoKS50ZXN0U2V0dGluZ0VuYWJsZWQoKSkgewog
ICAgICAgICBoYXNEaXNhYmxlZFJ1bnRpbWVQcm9wZXJ0aWVzID0gdHJ1ZTsKLSAgICAgICAgYXV0
byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBMQ2hhcio+KCJlbmFibGVkQnlTZXR0aW5nQXR0cmlidXRlIiksIHN0cmxlbigi
ZW5hYmxlZEJ5U2V0dGluZ0F0dHJpYnV0ZSIpKTsKKyAgICAgICAgYXV0byBwcm9wZXJ0eU5hbWUg
PSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFy
Kj4oImVuYWJsZWRCeVNldHRpbmdBdHRyaWJ1dGUiKSwgc3RybGVuKCJlbmFibGVkQnlTZXR0aW5n
QXR0cmlidXRlIikpOwogICAgICAgICBWTTo6RGVsZXRlUHJvcGVydHlNb2RlU2NvcGUgc2NvcGUo
dm0sIFZNOjpEZWxldGVQcm9wZXJ0eU1vZGU6Oklnbm9yZUNvbmZpZ3VyYWJsZSk7CiAgICAgICAg
IEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eSh0aGlzLCBnbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhl
YygpLCBwcm9wZXJ0eU5hbWUpOwogICAgIH0KQEAgLTIzNCw5ICsyMzQsMTAgQEAgRW5jb2RlZEpT
VmFsdWUganNUZXN0RW5hYmxlZEJ5U2V0dGluZ1RlcwogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0
SlNUZXN0RW5hYmxlZEJ5U2V0dGluZ1Rlc3RTdWJPYmpFbmFibGVkQnlTZXR0aW5nQ29uc3RydWN0
b3JTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0RW5hYmxlZEJ5U2V0dGluZyYgdGhpc09i
amVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBWTSYg
dm0gPSB0aHJvd1Njb3BlLnZtKCk7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3Ry
dWN0b3IuCi0gICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHN0YXRlLnZtKCksIElkZW50
aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLnZtKCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENo
YXIqPigiVGVzdFN1Yk9iakVuYWJsZWRCeVNldHRpbmciKSwgc3RybGVuKCJUZXN0U3ViT2JqRW5h
YmxlZEJ5U2V0dGluZyIpKSwgdmFsdWUpOworICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVj
dCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBM
Q2hhcio+KCJUZXN0U3ViT2JqRW5hYmxlZEJ5U2V0dGluZyIpLCBzdHJsZW4oIlRlc3RTdWJPYmpF
bmFibGVkQnlTZXR0aW5nIikpLCB2YWx1ZSk7CiB9CiAKIGJvb2wgc2V0SlNUZXN0RW5hYmxlZEJ5
U2V0dGluZ1Rlc3RTdWJPYmpFbmFibGVkQnlTZXR0aW5nQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBz
dGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFs
dWUpCkBAIC0yNjQsNiArMjY1LDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0RW5hYmxlZEJ5U2V0
dGluZ0VuYQogI2lmIEVOQUJMRShURVNUX0ZFQVRVUkUpCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0
SlNUZXN0RW5hYmxlZEJ5U2V0dGluZ0VuYWJsZWRCeVNldHRpbmdBdHRyaWJ1dGVTZXR0ZXIoRXhl
Y1N0YXRlJiBzdGF0ZSwgSlNUZXN0RW5hYmxlZEJ5U2V0dGluZyYgdGhpc09iamVjdCwgSlNWYWx1
ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKKyAgICBVTlVTRURfUEFSQU0oc3Rh
dGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gdGhp
c09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9N
U3RyaW5nPihzdGF0ZSwgdmFsdWUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdEVuYWJsZWRGb3JDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RW5hYmxlZEZvckNv
bnRleHQuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0RW5hYmxlZEZvckNvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC04NSw3ICs4NSw3IEBAIHRlbXBsYXRlPD4gSlNWYWx1ZSBKU1Rlc3RFbmFibGVkRm9yQ29u
dGUKIHRlbXBsYXRlPD4gdm9pZCBKU1Rlc3RFbmFibGVkRm9yQ29udGV4dENvbnN0cnVjdG9yOjpp
bml0aWFsaXplUHJvcGVydGllcyhWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmpl
Y3QpCiB7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpT
VGVzdEVuYWJsZWRGb3JDb250ZXh0Ojpwcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCksIEpTQzo6
UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpS
ZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKLSAgICBwdXREaXJl
Y3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZygmdm0sIFN0
cmluZygiVGVzdEVuYWJsZWRGb3JDb250ZXh0Il9zKSksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6
OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOworICAgIHB1dERp
cmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKHZtLCBT
dHJpbmcoIlRlc3RFbmFibGVkRm9yQ29udGV4dCJfcykpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRl
OjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKICAgICBwdXRE
aXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMCksIEpTQzo6UHJv
cGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVu
dW0pOwogfQogCkBAIC0xODUsOSArMTg1LDEwIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEVuYWJs
ZWRGb3JDb250ZXh0VGUKIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEVuYWJsZWRGb3JD
b250ZXh0VGVzdFN1Yk9iakVuYWJsZWRGb3JDb250ZXh0Q29uc3RydWN0b3JTZXR0ZXIoRXhlY1N0
YXRlJiBzdGF0ZSwgSlNUZXN0RW5hYmxlZEZvckNvbnRleHQmIHRoaXNPYmplY3QsIEpTVmFsdWUg
dmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVk0mIHZtID0gdGhyb3dTY29w
ZS52bSgpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgotICAgIHJl
dHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdChzdGF0ZS52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKCZzdGF0ZS52bSgpLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RTdWJP
YmpFbmFibGVkRm9yQ29udGV4dCIpLCBzdHJsZW4oIlRlc3RTdWJPYmpFbmFibGVkRm9yQ29udGV4
dCIpKSwgdmFsdWUpOworICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0
U3ViT2JqRW5hYmxlZEZvckNvbnRleHQiKSwgc3RybGVuKCJUZXN0U3ViT2JqRW5hYmxlZEZvckNv
bnRleHQiKSksIHZhbHVlKTsKIH0KIAogYm9vbCBzZXRKU1Rlc3RFbmFibGVkRm9yQ29udGV4dFRl
c3RTdWJPYmpFbmFibGVkRm9yQ29udGV4dENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50Q29u
c3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RFdmVudENvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjQ5MTI4KQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50Q29u
c3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NSw3ICs1NSw3IEBAIHRlbXBsYXRlPD4g
VGVzdEV2ZW50Q29uc3RydWN0b3I6OkluaXQgY28KICAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQp
CiAgICAgICAgIGJ1YmJsZXNWYWx1ZSA9IGpzVW5kZWZpbmVkKCk7CiAgICAgZWxzZSB7Ci0gICAg
ICAgIGJ1YmJsZXNWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZygmc3RhdGUsICJidWJibGVzIikpOworICAgICAgICBidWJibGVzVmFsdWUgPSBvYmplY3Qt
PmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJidWJibGVzIikpOwogICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgfQogICAgIGlm
ICghYnViYmxlc1ZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKQEAgLTY3LDcgKzY3LDcgQEAgdGVtcGxh
dGU8PiBUZXN0RXZlbnRDb25zdHJ1Y3Rvcjo6SW5pdCBjbwogICAgIGlmIChpc051bGxPclVuZGVm
aW5lZCkKICAgICAgICAgY2FuY2VsYWJsZVZhbHVlID0ganNVbmRlZmluZWQoKTsKICAgICBlbHNl
IHsKLSAgICAgICAgY2FuY2VsYWJsZVZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImNhbmNlbGFibGUiKSk7CisgICAgICAgIGNhbmNlbGFi
bGVWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwg
ImNhbmNlbGFibGUiKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
eyB9KTsKICAgICB9CiAgICAgaWYgKCFjYW5jZWxhYmxlVmFsdWUuaXNVbmRlZmluZWQoKSkgewpA
QCAtNzksNyArNzksNyBAQCB0ZW1wbGF0ZTw+IFRlc3RFdmVudENvbnN0cnVjdG9yOjpJbml0IGNv
CiAgICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKQogICAgICAgICBjb21wb3NlZFZhbHVlID0ganNV
bmRlZmluZWQoKTsKICAgICBlbHNlIHsKLSAgICAgICAgY29tcG9zZWRWYWx1ZSA9IG9iamVjdC0+
Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJjb21wb3NlZCIpKTsK
KyAgICAgICAgY29tcG9zZWRWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZyh2bSwgImNvbXBvc2VkIikpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHRocm93U2NvcGUsIHsgfSk7CiAgICAgfQogICAgIGlmICghY29tcG9zZWRWYWx1ZS5pc1VuZGVm
aW5lZCgpKSB7CkBAIC05MSw3ICs5MSw3IEBAIHRlbXBsYXRlPD4gVGVzdEV2ZW50Q29uc3RydWN0
b3I6OkluaXQgY28KICAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQpCiAgICAgICAgIGF0dHIyVmFs
dWUgPSBqc1VuZGVmaW5lZCgpOwogICAgIGVsc2UgewotICAgICAgICBhdHRyMlZhbHVlID0gb2Jq
ZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImF0dHIyIikp
OworICAgICAgICBhdHRyMlZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCAiYXR0cjIiKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgeyB9KTsKICAgICB9CiAgICAgaWYgKCFhdHRyMlZhbHVlLmlzVW5kZWZpbmVkKCkp
IHsKQEAgLTEwNCw3ICsxMDQsNyBAQCB0ZW1wbGF0ZTw+IFRlc3RFdmVudENvbnN0cnVjdG9yOjpJ
bml0IGNvCiAgICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKQogICAgICAgICBhdHRyM1ZhbHVlID0g
anNVbmRlZmluZWQoKTsKICAgICBlbHNlIHsKLSAgICAgICAgYXR0cjNWYWx1ZSA9IG9iamVjdC0+
Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJhdHRyMyIpKTsKKyAg
ICAgICAgYXR0cjNWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZyh2bSwgImF0dHIzIikpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2Nv
cGUsIHsgfSk7CiAgICAgfQogICAgIGlmICghYXR0cjNWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7CkBA
IC0xNzgsNyArMTc4LDcgQEAgdGVtcGxhdGU8PiBKU1ZhbHVlIEpTVGVzdEV2ZW50Q29uc3RydWN0
bwogdGVtcGxhdGU8PiB2b2lkIEpTVGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3Rvcjo6aW5p
dGlhbGl6ZVByb3BlcnRpZXMoVk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0
KQogewogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rl
c3RFdmVudENvbnN0cnVjdG9yOjpwcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCksIEpTQzo6UHJv
cGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFk
T25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKLSAgICBwdXREaXJlY3Qo
dm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZygmdm0sIFN0cmlu
ZygiVGVzdEV2ZW50Q29uc3RydWN0b3IiX3MpKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVh
ZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CisgICAgcHV0RGlyZWN0
KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcodm0sIFN0cmlu
ZygiVGVzdEV2ZW50Q29uc3RydWN0b3IiX3MpKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVh
ZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CiAgICAgcHV0RGlyZWN0
KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDEpLCBKU0M6OlByb3BlcnR5
QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsK
IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dEV2ZW50VGFyZ2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRUYXJnZXQuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRUYXJn
ZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Nyw3ICs4Nyw3IEBAIHRlbXBsYXRlPD4gSlNWYWx1
ZSBKU1Rlc3RFdmVudFRhcmdldENvbnMKIHRlbXBsYXRlPD4gdm9pZCBKU1Rlc3RFdmVudFRhcmdl
dENvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGllcyhWTSYgdm0sIEpTRE9NR2xvYmFsT2Jq
ZWN0JiBnbG9iYWxPYmplY3QpCiB7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVz
LT5wcm90b3R5cGUsIEpTVGVzdEV2ZW50VGFyZ2V0Ojpwcm90b3R5cGUodm0sIGdsb2JhbE9iamVj
dCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUgfCBKU0M6OlByb3BlcnR5QXR0
cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKLSAg
ICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0cmlu
Zygmdm0sIFN0cmluZygiVGVzdEV2ZW50VGFyZ2V0Il9zKSksIEpTQzo6UHJvcGVydHlBdHRyaWJ1
dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOworICAgIHB1
dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKHZt
LCBTdHJpbmcoIlRlc3RFdmVudFRhcmdldCJfcykpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpS
ZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKICAgICBwdXREaXJl
Y3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMCksIEpTQzo6UHJvcGVy
dHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0p
OwogfQogCkBAIC0xNjcsNiArMTY3LDcgQEAgYm9vbCBKU1Rlc3RFdmVudFRhcmdldDo6Z2V0T3du
UHJvcGVydHlTbAogCiBib29sIEpTVGVzdEV2ZW50VGFyZ2V0OjpnZXRPd25Qcm9wZXJ0eVNsb3RC
eUluZGV4KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogc3RhdGUsIHVuc2lnbmVkIGluZGV4
LCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CisgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAg
YXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3RFdmVudFRhcmdldCo+KG9iamVjdCk7CiAg
ICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogICAgIGlm
IChMSUtFTFkoaW5kZXggPD0gTUFYX0FSUkFZX0lOREVYKSkgewpAQCAtMTc3LDcgKzE3OCw3IEBA
IGJvb2wgSlNUZXN0RXZlbnRUYXJnZXQ6OmdldE93blByb3BlcnR5U2wKICAgICAgICAgfQogICAg
ICAgICByZXR1cm4gSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgob2JqZWN0LCBz
dGF0ZSwgaW5kZXgsIHNsb3QpOwogICAgIH0KLSAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50
aWZpZXI6OmZyb20oc3RhdGUsIGluZGV4KTsKKyAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50
aWZpZXI6OmZyb20odm0sIGluZGV4KTsKICAgICB1c2luZyBHZXR0ZXJJRExUeXBlID0gSURMSW50
ZXJmYWNlPE5vZGU+OwogICAgIGF1dG8gZ2V0dGVyRnVuY3RvciA9IFtdIChhdXRvJiB0aGlzT2Jq
ZWN0LCBhdXRvIHByb3BlcnR5TmFtZSkgLT4gT3B0aW9uYWw8dHlwZW5hbWUgR2V0dGVySURMVHlw
ZTo6SW1wbGVtZW50YXRpb25UeXBlPiB7CiAgICAgICAgIGF1dG8gcmVzdWx0ID0gdGhpc09iamVj
dC53cmFwcGVkKCkubmFtZWRJdGVtKHByb3BlcnR5TmFtZVRvQXRvbVN0cmluZyhwcm9wZXJ0eU5h
bWUpKTsKQEAgLTE5NSwxMiArMTk2LDEzIEBAIGJvb2wgSlNUZXN0RXZlbnRUYXJnZXQ6OmdldE93
blByb3BlcnR5U2wKIAogdm9pZCBKU1Rlc3RFdmVudFRhcmdldDo6Z2V0T3duUHJvcGVydHlOYW1l
cyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIHN0YXRlLCBQcm9wZXJ0eU5hbWVBcnJheSYg
cHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7CisgICAgVk0mIHZtID0gc3Rh
dGUtPnZtKCk7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3RFdmVudFRhcmdl
dCo+KG9iamVjdCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhvYmplY3QsIGluZm8o
KSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMCwgY291bnQgPSB0aGlzT2JqZWN0LT53cmFwcGVk
KCkubGVuZ3RoKCk7IGkgPCBjb3VudDsgKytpKQotICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJ
ZGVudGlmaWVyOjpmcm9tKHN0YXRlLCBpKSk7CisgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElk
ZW50aWZpZXI6OmZyb20odm0sIGkpKTsKICAgICBmb3IgKGF1dG8mIHByb3BlcnR5TmFtZSA6IHRo
aXNPYmplY3QtPndyYXBwZWQoKS5zdXBwb3J0ZWRQcm9wZXJ0eU5hbWVzKCkpCi0gICAgICAgIHBy
b3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb21TdHJpbmcoc3RhdGUsIHByb3BlcnR5TmFt
ZSkpOworICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZt
LCBwcm9wZXJ0eU5hbWUpKTsKICAgICBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhvYmpl
Y3QsIHN0YXRlLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV4Y2VwdGlvbi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV4Y2Vw
dGlvbi5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RFeGNlcHRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MSw3
ICs4MSw3IEBAIHRlbXBsYXRlPD4gSlNWYWx1ZSBKU1Rlc3RFeGNlcHRpb25Db25zdHIKIHRlbXBs
YXRlPD4gdm9pZCBKU1Rlc3RFeGNlcHRpb25Db25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRp
ZXMoVk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQogewogICAgIHB1dERp
cmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3RFeGNlcHRpb246OnBy
b3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERl
bGV0ZSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0
dHJpYnV0ZTo6RG9udEVudW0pOwotICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+
bmFtZSwganNOb250cml2aWFsU3RyaW5nKCZ2bSwgU3RyaW5nKCJUZXN0RXhjZXB0aW9uIl9zKSks
IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0
ZTo6RG9udEVudW0pOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwg
anNOb250cml2aWFsU3RyaW5nKHZtLCBTdHJpbmcoIlRlc3RFeGNlcHRpb24iX3MpKSwgSlNDOjpQ
cm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250
RW51bSk7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVt
YmVyKDApLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlB
dHRyaWJ1dGU6OkRvbnRFbnVtKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RHZW5lcmF0
ZUlzUmVhY2hhYmxlLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04MSw3ICs4MSw3IEBAIHRlbXBsYXRlPD4gSlNWYWx1ZSBKU1Rlc3RHZW5l
cmF0ZUlzUmVhY2gKIHRlbXBsYXRlPD4gdm9pZCBKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlQ29u
c3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3Qm
IGdsb2JhbE9iamVjdCkKIHsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnBy
b3RvdHlwZSwgSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZTo6cHJvdG90eXBlKHZtLCBnbG9iYWxP
YmplY3QpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgSlNDOjpQcm9wZXJ0
eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7
Ci0gICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxT
dHJpbmcoJnZtLCBTdHJpbmcoIlRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlIl9zKSksIEpTQzo6UHJv
cGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVu
dW0pOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2
aWFsU3RyaW5nKHZtLCBTdHJpbmcoIlRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlIl9zKSksIEpTQzo6
UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9u
dEVudW0pOwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051
bWJlcigwKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5
QXR0cmlidXRlOjpEb250RW51bSk7CiB9CiAKQEAgLTEwNCw3ICsxMDQsNyBAQCB2b2lkIEpTVGVz
dEdlbmVyYXRlSXNSZWFjaGFibGVQcm90b3R5cGU6CiAgICAgYm9vbCBoYXNEaXNhYmxlZFJ1bnRp
bWVQcm9wZXJ0aWVzID0gZmFsc2U7CiAgICAgaWYgKCFqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3Qq
PihnbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+aXNTZWN1cmVDb250
ZXh0KCkpIHsKICAgICAgICAgaGFzRGlzYWJsZWRSdW50aW1lUHJvcGVydGllcyA9IHRydWU7Ci0g
ICAgICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiYVNlY3JldEF0dHJpYnV0ZSIpLCBzdHJsZW4o
ImFTZWNyZXRBdHRyaWJ1dGUiKSk7CisgICAgICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJhU2Vj
cmV0QXR0cmlidXRlIiksIHN0cmxlbigiYVNlY3JldEF0dHJpYnV0ZSIpKTsKICAgICAgICAgVk06
OkRlbGV0ZVByb3BlcnR5TW9kZVNjb3BlIHNjb3BlKHZtLCBWTTo6RGVsZXRlUHJvcGVydHlNb2Rl
OjpJZ25vcmVDb25maWd1cmFibGUpOwogICAgICAgICBKU09iamVjdDo6ZGVsZXRlUHJvcGVydHko
dGhpcywgZ2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKSwgcHJvcGVydHlOYW1lKTsKICAgICB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2xv
YmFsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0R2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdsb2JhbE9iamVj
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2Niw3ICs2NjYsNyBAQCB0ZW1wbGF0ZTw+IEpTVmFs
dWUgSlNUZXN0R2xvYmFsT2JqZWN0Q29uCiB0ZW1wbGF0ZTw+IHZvaWQgSlNUZXN0R2xvYmFsT2Jq
ZWN0Q29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKFZNJiB2bSwgSlNET01HbG9iYWxP
YmplY3QmIGdsb2JhbE9iamVjdCkKIHsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFt
ZXMtPnByb3RvdHlwZSwgZ2xvYmFsT2JqZWN0LmdldFByb3RvdHlwZURpcmVjdCh2bSksIEpTQzo6
UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpS
ZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKLSAgICBwdXREaXJl
Y3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZygmdm0sIFN0
cmluZygiVGVzdEdsb2JhbE9iamVjdCJfcykpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFk
T25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKKyAgICBwdXREaXJlY3Qo
dm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZyh2bSwgU3RyaW5n
KCJUZXN0R2xvYmFsT2JqZWN0Il9zKSksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5
IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwogICAgIHB1dERpcmVjdCh2bSwg
dm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigwKSwgSlNDOjpQcm9wZXJ0eUF0dHJp
YnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CiAgICAg
cmVpZnlTdGF0aWNQcm9wZXJ0aWVzKHZtLCBKU1Rlc3RHbG9iYWxPYmplY3Q6OmluZm8oKSwgSlNU
ZXN0R2xvYmFsT2JqZWN0Q29uc3RydWN0b3JUYWJsZVZhbHVlcywgKnRoaXMpOwogfQpAQCAtODAz
LDYgKzgwMyw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFJlZ3VsYXIKIAog
c3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFJlZ3VsYXJBdHRyaWJ1dGVT
ZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBK
U1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogeworICAgIFVOVVNFRF9QQVJB
TShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwg
PSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJ
RExET01TdHJpbmc+KHN0YXRlLCB2YWx1ZSk7CkBAIC04MzQsNiArODM1LDcgQEAgRW5jb2RlZEpT
VmFsdWUganNUZXN0R2xvYmFsT2JqZWN0UHVibGljQQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0
SlNUZXN0R2xvYmFsT2JqZWN0UHVibGljQW5kUHJpdmF0ZUF0dHJpYnV0ZVNldHRlcihFeGVjU3Rh
dGUmIHN0YXRlLCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUs
IFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qu
d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4o
c3RhdGUsIHZhbHVlKTsKQEAgLTg2OSw2ICs4NzEsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RH
bG9iYWxPYmplY3RQdWJsaWNBCiAjaWYgRU5BQkxFKFRFU1RfRkVBVFVSRSkKIHN0YXRpYyBpbmxp
bmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RQdWJsaWNBbmRQcml2YXRlQ29uZGl0aW9uYWxB
dHRyaWJ1dGVTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlz
T2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogeworICAgIFVO
VVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1
dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0g
Y29udmVydDxJRExET01TdHJpbmc+KHN0YXRlLCB2YWx1ZSk7CkBAIC05MDYsNiArOTA5LDcgQEAg
RW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0RW5hYmxlZAogI2lmIEVOQUJMRShURVNU
X0ZFQVRVUkUpCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0RW5hYmxl
ZEF0UnVudGltZUF0dHJpYnV0ZVNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RHbG9iYWxP
YmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUp
CiB7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0
aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oc3RhdGUsIHZhbHVlKTsKQEAgLTkzNyw5
ICs5NDEsMTAgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdENFUgogCiBz
dGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdENFUmVhY3Rpb25zQ29u
c3RydWN0b3JTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlz
T2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFZN
JiB2bSA9IHRocm93U2NvcGUudm0oKTsKICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25z
dHJ1Y3Rvci4KLSAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qoc3RhdGUudm0oKSwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUudm0oKSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBM
Q2hhcio+KCJUZXN0Q0VSZWFjdGlvbnMiKSwgc3RybGVuKCJUZXN0Q0VSZWFjdGlvbnMiKSksIHZh
bHVlKTsKKyAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZy
b21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdENFUmVhY3Rp
b25zIiksIHN0cmxlbigiVGVzdENFUmVhY3Rpb25zIikpLCB2YWx1ZSk7CiB9CiAKIGJvb2wgc2V0
SlNUZXN0R2xvYmFsT2JqZWN0VGVzdENFUmVhY3Rpb25zQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBz
dGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFs
dWUpCkBAIC05NjEsOSArOTY2LDEwIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVj
dFRlc3RDRVIKIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RD
RVJlYWN0aW9uc1N0cmluZ2lmaWVyQ29uc3RydWN0b3JTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwg
SlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBVTlVT
RURfUEFSQU0oc3RhdGUpOworICAgIFZNJiB2bSA9IHRocm93U2NvcGUudm0oKTsKICAgICAvLyBT
aGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KLSAgICByZXR1cm4gdGhpc09iamVjdC5w
dXREaXJlY3Qoc3RhdGUudm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUudm0oKSwg
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmll
ciIpLCBzdHJsZW4oIlRlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyIikpLCB2YWx1ZSk7CisgICAg
cmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZt
LCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RDRVJlYWN0aW9uc1N0cmluZ2lm
aWVyIiksIHN0cmxlbigiVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXIiKSksIHZhbHVlKTsKIH0K
IAogYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllckNv
bnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQpAQCAtOTg1LDkgKzk5MSwxMCBAQCBFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0Q2FsCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRK
U1Rlc3RHbG9iYWxPYmplY3RUZXN0Q2FsbFRyYWNlckNvbnN0cnVjdG9yU2V0dGVyKEV4ZWNTdGF0
ZSYgc3RhdGUsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwg
VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7
CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBWTSYgdm0gPSB0aHJvd1Njb3BlLnZtKCk7
CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCi0gICAgcmV0dXJuIHRo
aXNPYmplY3QucHV0RGlyZWN0KHN0YXRlLnZtKCksIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0
YXRlLnZtKCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdENhbGxUcmFjZXIi
KSwgc3RybGVuKCJUZXN0Q2FsbFRyYWNlciIpKSwgdmFsdWUpOworICAgIHJldHVybiB0aGlzT2Jq
ZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0Q2FsbFRyYWNlciIpLCBzdHJsZW4oIlRlc3RDYWxsVHJh
Y2VyIikpLCB2YWx1ZSk7CiB9CiAKIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdENhbGxU
cmFjZXJDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFs
dWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKQEAgLTEwMTMsOSArMTAyMCwxMCBAQCBF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0Q2FsCiAjaWYgRU5BQkxFKFRFU1Rf
Q09ORElUSU9OQUwpCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVz
dENhbGxiYWNrSW50ZXJmYWNlQ29uc3RydWN0b3JTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNU
ZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBVTlVTRURf
UEFSQU0oc3RhdGUpOworICAgIFZNJiB2bSA9IHRocm93U2NvcGUudm0oKTsKICAgICAvLyBTaGFk
b3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KLSAgICByZXR1cm4gdGhpc09iamVjdC5wdXRE
aXJlY3Qoc3RhdGUudm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUudm0oKSwgcmVp
bnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0Q2FsbGJhY2tJbnRlcmZhY2UiKSwgc3Ry
bGVuKCJUZXN0Q2FsbGJhY2tJbnRlcmZhY2UiKSksIHZhbHVlKTsKKyAgICByZXR1cm4gdGhpc09i
amVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdENhbGxiYWNrSW50ZXJmYWNlIiksIHN0cmxlbigiVGVz
dENhbGxiYWNrSW50ZXJmYWNlIikpLCB2YWx1ZSk7CiB9CiAKIGJvb2wgc2V0SlNUZXN0R2xvYmFs
T2JqZWN0VGVzdENhbGxiYWNrSW50ZXJmYWNlQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCkBA
IC0xMDM5LDkgKzEwNDcsMTAgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVz
dENsYQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdENsYXNz
V2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yQ29uc3RydWN0b3JTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0
ZSwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBV
TlVTRURfUEFSQU0oc3RhdGUpOworICAgIFZNJiB2bSA9IHRocm93U2NvcGUudm0oKTsKICAgICAv
LyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KLSAgICByZXR1cm4gdGhpc09iamVj
dC5wdXREaXJlY3Qoc3RhdGUudm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUudm0o
KSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0Q2xhc3NXaXRoSlNCdWlsdGlu
Q29uc3RydWN0b3IiKSwgc3RybGVuKCJUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3Ii
KSksIHZhbHVlKTsKKyAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdENs
YXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yIiksIHN0cmxlbigiVGVzdENsYXNzV2l0aEpTQnVp
bHRpbkNvbnN0cnVjdG9yIikpLCB2YWx1ZSk7CiB9CiAKIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2Jq
ZWN0VGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yQ29uc3RydWN0b3IoRXhlY1N0YXRl
KiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
VmFsdWUpCkBAIC0xMDYzLDkgKzEwNzIsMTAgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFs
T2JqZWN0VGVzdERPTQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0
VGVzdERPTUpJVENvbnN0cnVjdG9yU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEdsb2Jh
bE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29w
ZSkKIHsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgVU5VU0VEX1BBUkFNKHN0
YXRlKTsKKyAgICBWTSYgdm0gPSB0aHJvd1Njb3BlLnZtKCk7CiAgICAgLy8gU2hhZG93aW5nIGEg
YnVpbHQtaW4gY29uc3RydWN0b3IuCi0gICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHN0
YXRlLnZtKCksIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLnZtKCksIHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdERPTUpJVCIpLCBzdHJsZW4oIlRlc3RET01KSVQiKSks
IHZhbHVlKTsKKyAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6
OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdERPTUpJ
VCIpLCBzdHJsZW4oIlRlc3RET01KSVQiKSksIHZhbHVlKTsKIH0KIAogYm9vbCBzZXRKU1Rlc3RH
bG9iYWxPYmplY3RUZXN0RE9NSklUQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCkBAIC0xMDg3
LDkgKzEwOTcsMTAgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdERvbQog
CiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdERvbWFpblNlY3Vy
aXR5Q29uc3RydWN0b3JTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0R2xvYmFsT2JqZWN0
JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewot
ICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwor
ICAgIFZNJiB2bSA9IHRocm93U2NvcGUudm0oKTsKICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1p
biBjb25zdHJ1Y3Rvci4KLSAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qoc3RhdGUudm0o
KSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUudm0oKSwgcmVpbnRlcnByZXRfY2FzdDxj
b25zdCBMQ2hhcio+KCJUZXN0RG9tYWluU2VjdXJpdHkiKSwgc3RybGVuKCJUZXN0RG9tYWluU2Vj
dXJpdHkiKSksIHZhbHVlKTsKKyAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigi
VGVzdERvbWFpblNlY3VyaXR5IiksIHN0cmxlbigiVGVzdERvbWFpblNlY3VyaXR5IikpLCB2YWx1
ZSk7CiB9CiAKIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdERvbWFpblNlY3VyaXR5Q29u
c3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCkBAIC0xMTExLDkgKzExMjIsMTAgQEAgRW5jb2RlZEpT
VmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdEVuYQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0
SlNUZXN0R2xvYmFsT2JqZWN0VGVzdEVuYWJsZWRCeVNldHRpbmdDb25zdHJ1Y3RvclNldHRlcihF
eGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUg
dmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVk0mIHZtID0gdGhyb3dTY29w
ZS52bSgpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgotICAgIHJl
dHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdChzdGF0ZS52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKCZzdGF0ZS52bSgpLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RFbmFi
bGVkQnlTZXR0aW5nIiksIHN0cmxlbigiVGVzdEVuYWJsZWRCeVNldHRpbmciKSksIHZhbHVlKTsK
KyAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJp
bmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdEVuYWJsZWRCeVNldHRp
bmciKSwgc3RybGVuKCJUZXN0RW5hYmxlZEJ5U2V0dGluZyIpKSwgdmFsdWUpOwogfQogCiBib29s
IHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RFbmFibGVkQnlTZXR0aW5nQ29uc3RydWN0b3IoRXhl
Y1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkVmFsdWUpCkBAIC0xMTM1LDkgKzExNDcsMTAgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0
R2xvYmFsT2JqZWN0VGVzdEVuYQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFs
T2JqZWN0VGVzdEVuYWJsZWRGb3JDb250ZXh0Q29uc3RydWN0b3JTZXR0ZXIoRXhlY1N0YXRlJiBz
dGF0ZSwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAg
ICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFZNJiB2bSA9IHRocm93U2NvcGUudm0oKTsKICAg
ICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KLSAgICByZXR1cm4gdGhpc09i
amVjdC5wdXREaXJlY3Qoc3RhdGUudm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUu
dm0oKSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0RW5hYmxlZEZvckNvbnRl
eHQiKSwgc3RybGVuKCJUZXN0RW5hYmxlZEZvckNvbnRleHQiKSksIHZhbHVlKTsKKyAgICByZXR1
cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdEVuYWJsZWRGb3JDb250ZXh0IiksIHN0
cmxlbigiVGVzdEVuYWJsZWRGb3JDb250ZXh0IikpLCB2YWx1ZSk7CiB9CiAKIGJvb2wgc2V0SlNU
ZXN0R2xvYmFsT2JqZWN0VGVzdEVuYWJsZWRGb3JDb250ZXh0Q29uc3RydWN0b3IoRXhlY1N0YXRl
KiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
VmFsdWUpCkBAIC0xMTU5LDkgKzExNzIsMTAgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFs
T2JqZWN0VGVzdEV2ZQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0
VGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3RvclNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBK
U1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUm
IHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIFVOVVNF
RF9QQVJBTShzdGF0ZSk7CisgICAgVk0mIHZtID0gdGhyb3dTY29wZS52bSgpOwogICAgIC8vIFNo
YWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgotICAgIHJldHVybiB0aGlzT2JqZWN0LnB1
dERpcmVjdChzdGF0ZS52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZS52bSgpLCBy
ZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RFdmVudENvbnN0cnVjdG9yIiksIHN0
cmxlbigiVGVzdEV2ZW50Q29uc3RydWN0b3IiKSksIHZhbHVlKTsKKyAgICByZXR1cm4gdGhpc09i
amVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdEV2ZW50Q29uc3RydWN0b3IiKSwgc3RybGVuKCJUZXN0
RXZlbnRDb25zdHJ1Y3RvciIpKSwgdmFsdWUpOwogfQogCiBib29sIHNldEpTVGVzdEdsb2JhbE9i
amVjdFRlc3RFdmVudENvbnN0cnVjdG9yQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCkBAIC0x
MTgzLDkgKzExOTcsMTAgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdEV2
ZQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdEV2ZW50VGFy
Z2V0Q29uc3RydWN0b3JTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0R2xvYmFsT2JqZWN0
JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewot
ICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwor
ICAgIFZNJiB2bSA9IHRocm93U2NvcGUudm0oKTsKICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1p
biBjb25zdHJ1Y3Rvci4KLSAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qoc3RhdGUudm0o
KSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUudm0oKSwgcmVpbnRlcnByZXRfY2FzdDxj
b25zdCBMQ2hhcio+KCJUZXN0RXZlbnRUYXJnZXQiKSwgc3RybGVuKCJUZXN0RXZlbnRUYXJnZXQi
KSksIHZhbHVlKTsKKyAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdEV2
ZW50VGFyZ2V0IiksIHN0cmxlbigiVGVzdEV2ZW50VGFyZ2V0IikpLCB2YWx1ZSk7CiB9CiAKIGJv
b2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdEV2ZW50VGFyZ2V0Q29uc3RydWN0b3IoRXhlY1N0
YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkVmFsdWUpCkBAIC0xMjA3LDkgKzEyMjIsMTAgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0R2xv
YmFsT2JqZWN0VGVzdEV4YwogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2Jq
ZWN0VGVzdEV4Y2VwdGlvbkNvbnN0cnVjdG9yU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVz
dEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgVU5VU0VEX1BB
UkFNKHN0YXRlKTsKKyAgICBWTSYgdm0gPSB0aHJvd1Njb3BlLnZtKCk7CiAgICAgLy8gU2hhZG93
aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCi0gICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGly
ZWN0KHN0YXRlLnZtKCksIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLnZtKCksIHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdEV4Y2VwdGlvbiIpLCBzdHJsZW4oIlRlc3RF
eGNlcHRpb24iKSksIHZhbHVlKTsKKyAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0s
IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIq
PigiVGVzdEV4Y2VwdGlvbiIpLCBzdHJsZW4oIlRlc3RFeGNlcHRpb24iKSksIHZhbHVlKTsKIH0K
IAogYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0RXhjZXB0aW9uQ29uc3RydWN0b3IoRXhl
Y1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkVmFsdWUpCkBAIC0xMjMxLDkgKzEyNDcsMTAgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0
R2xvYmFsT2JqZWN0VGVzdEdlbgogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFs
T2JqZWN0VGVzdEdlbmVyYXRlSXNSZWFjaGFibGVDb25zdHJ1Y3RvclNldHRlcihFeGVjU3RhdGUm
IHN0YXRlLCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRo
cm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwor
ICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVk0mIHZtID0gdGhyb3dTY29wZS52bSgpOwog
ICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgotICAgIHJldHVybiB0aGlz
T2JqZWN0LnB1dERpcmVjdChzdGF0ZS52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0
ZS52bSgpLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RHZW5lcmF0ZUlzUmVh
Y2hhYmxlIiksIHN0cmxlbigiVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUiKSksIHZhbHVlKTsKKyAg
ICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmco
dm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdEdlbmVyYXRlSXNSZWFjaGFi
bGUiKSwgc3RybGVuKCJUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZSIpKSwgdmFsdWUpOwogfQogCiBi
b29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlQ29uc3RydWN0
b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkVmFsdWUpCkBAIC0xMjU1LDkgKzEyNzIsMTAgQEAgRW5jb2RlZEpTVmFsdWUg
anNUZXN0R2xvYmFsT2JqZWN0VGVzdEdsbwogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0
R2xvYmFsT2JqZWN0VGVzdEdsb2JhbE9iamVjdENvbnN0cnVjdG9yU2V0dGVyKEV4ZWNTdGF0ZSYg
c3RhdGUsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhy
b3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Cisg
ICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBWTSYgdm0gPSB0aHJvd1Njb3BlLnZtKCk7CiAg
ICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCi0gICAgcmV0dXJuIHRoaXNP
YmplY3QucHV0RGlyZWN0KHN0YXRlLnZtKCksIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRl
LnZtKCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdEdsb2JhbE9iamVjdCIp
LCBzdHJsZW4oIlRlc3RHbG9iYWxPYmplY3QiKSksIHZhbHVlKTsKKyAgICByZXR1cm4gdGhpc09i
amVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdEdsb2JhbE9iamVjdCIpLCBzdHJsZW4oIlRlc3RHbG9i
YWxPYmplY3QiKSksIHZhbHVlKTsKIH0KIAogYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0
R2xvYmFsT2JqZWN0Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCkBAIC0xMjc5LDkgKzEyOTcs
MTAgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdEluZAogCiBzdGF0aWMg
aW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50
aWZpZXJDb25zdHJ1Y3RvclNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RHbG9iYWxPYmpl
Y3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7
Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7
CisgICAgVk0mIHZtID0gdGhyb3dTY29wZS52bSgpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0
LWluIGNvbnN0cnVjdG9yLgotICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdChzdGF0ZS52
bSgpLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZS52bSgpLCByZWludGVycHJldF9jYXN0
PGNvbnN0IExDaGFyKj4oIlRlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyIiksIHN0cmxlbigi
VGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIiKSksIHZhbHVlKTsKKyAgICByZXR1cm4gdGhp
c09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIiKSwg
c3RybGVuKCJUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllciIpKSwgdmFsdWUpOwogfQogCiBi
b29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyQ29u
c3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCkBAIC0xMzAzLDkgKzEzMjIsMTAgQEAgRW5jb2RlZEpT
VmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdEluZAogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0
SlNUZXN0R2xvYmFsT2JqZWN0VGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbkNvbnN0
cnVjdG9yU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09i
amVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBWTSYg
dm0gPSB0aHJvd1Njb3BlLnZtKCk7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3Ry
dWN0b3IuCi0gICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHN0YXRlLnZtKCksIElkZW50
aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLnZtKCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENo
YXIqPigiVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbiIpLCBzdHJsZW4oIlRlc3RJ
bmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24iKSksIHZhbHVlKTsKKyAgICByZXR1cm4gdGhp
c09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlv
biIpLCBzdHJsZW4oIlRlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24iKSksIHZhbHVl
KTsKIH0KIAogYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0SW5kZXhlZFNldHRlclRocm93
aW5nRXhjZXB0aW9uQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCkBAIC0xMzI3LDkgKzEzNDcs
MTAgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdEluZAogCiBzdGF0aWMg
aW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRl
bnRpZmllckNvbnN0cnVjdG9yU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEdsb2JhbE9i
amVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkK
IHsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRl
KTsKKyAgICBWTSYgdm0gPSB0aHJvd1Njb3BlLnZtKCk7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVp
bHQtaW4gY29uc3RydWN0b3IuCi0gICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHN0YXRl
LnZtKCksIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLnZtKCksIHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgTENoYXIqPigiVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllciIpLCBzdHJs
ZW4oIlRlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIiKSksIHZhbHVlKTsKKyAgICByZXR1
cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRp
ZmllciIpLCBzdHJsZW4oIlRlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIiKSksIHZhbHVl
KTsKIH0KIAogYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0SW5kZXhlZFNldHRlcldpdGhJ
ZGVudGlmaWVyQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCkBAIC0xMzU1LDkgKzEzNzYsMTAg
QEAgRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdEludAogI2lmIEVOQUJMRShD
b25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRK
U1Rlc3RHbG9iYWxPYmplY3RUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JTZXR0ZXIoRXhlY1N0YXRl
JiBzdGF0ZSwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
KyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFZNJiB2bSA9IHRocm93U2NvcGUudm0oKTsK
ICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KLSAgICByZXR1cm4gdGhp
c09iamVjdC5wdXREaXJlY3Qoc3RhdGUudm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3Rh
dGUudm0oKSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0SW50ZXJmYWNlIiks
IHN0cmxlbigiVGVzdEludGVyZmFjZSIpKSwgdmFsdWUpOworICAgIHJldHVybiB0aGlzT2JqZWN0
LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBMQ2hhcio+KCJUZXN0SW50ZXJmYWNlIiksIHN0cmxlbigiVGVzdEludGVyZmFjZSIp
KSwgdmFsdWUpOwogfQogCiBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RJbnRlcmZhY2VD
b25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKQEAgLTEzODEsOSArMTQwMywxMCBAQCBFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0SW50CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBz
ZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmVDb25zdHJ1
Y3RvclNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmpl
Y3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVk0mIHZt
ID0gdGhyb3dTY29wZS52bSgpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVj
dG9yLgotICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdChzdGF0ZS52bSgpLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKCZzdGF0ZS52bSgpLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFy
Kj4oIlRlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZSIpLCBzdHJsZW4oIlRlc3RJbnRlcmZh
Y2VMZWFkaW5nVW5kZXJzY29yZSIpKSwgdmFsdWUpOworICAgIHJldHVybiB0aGlzT2JqZWN0LnB1
dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxj
b25zdCBMQ2hhcio+KCJUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmUiKSwgc3RybGVuKCJU
ZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmUiKSksIHZhbHVlKTsKIH0KIAogYm9vbCBzZXRK
U1Rlc3RHbG9iYWxPYmplY3RUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmVDb25zdHJ1Y3Rv
cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRWYWx1ZSkKQEAgLTE0MDUsOSArMTQyOCwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RHbG9iYWxPYmplY3RUZXN0SXRlCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RH
bG9iYWxPYmplY3RUZXN0SXRlcmFibGVDb25zdHJ1Y3RvclNldHRlcihFeGVjU3RhdGUmIHN0YXRl
LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2Nv
cGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIFVO
VVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVk0mIHZtID0gdGhyb3dTY29wZS52bSgpOwogICAgIC8v
IFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgotICAgIHJldHVybiB0aGlzT2JqZWN0
LnB1dERpcmVjdChzdGF0ZS52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZS52bSgp
LCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RJdGVyYWJsZSIpLCBzdHJsZW4o
IlRlc3RJdGVyYWJsZSIpKSwgdmFsdWUpOworICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVj
dCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBM
Q2hhcio+KCJUZXN0SXRlcmFibGUiKSwgc3RybGVuKCJUZXN0SXRlcmFibGUiKSksIHZhbHVlKTsK
IH0KIAogYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0SXRlcmFibGVDb25zdHJ1Y3RvcihF
eGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRWYWx1ZSkKQEAgLTE0MjksOSArMTQ1MywxMCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RHbG9iYWxPYmplY3RUZXN0SlNCCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9i
YWxPYmplY3RUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JDb25zdHJ1Y3RvclNldHRlcihFeGVjU3Rh
dGUmIHN0YXRlLCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUs
IFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVk0mIHZtID0gdGhyb3dTY29wZS52bSgp
OwogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgotICAgIHJldHVybiB0
aGlzT2JqZWN0LnB1dERpcmVjdChzdGF0ZS52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZz
dGF0ZS52bSgpLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RKU0J1aWx0aW5D
b25zdHJ1Y3RvciIpLCBzdHJsZW4oIlRlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvciIpKSwgdmFsdWUp
OworICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0SlNCdWlsdGluQ29u
c3RydWN0b3IiKSwgc3RybGVuKCJUZXN0SlNCdWlsdGluQ29uc3RydWN0b3IiKSksIHZhbHVlKTsK
IH0KIAogYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JD
b25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKQEAgLTE0NTMsOSArMTQ3OCwxMCBAQCBFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0TWFwCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBz
ZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TWFwTGlrZUNvbnN0cnVjdG9yU2V0dGVyKEV4ZWNTdGF0
ZSYgc3RhdGUsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwg
VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7
CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBWTSYgdm0gPSB0aHJvd1Njb3BlLnZtKCk7
CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCi0gICAgcmV0dXJuIHRo
aXNPYmplY3QucHV0RGlyZWN0KHN0YXRlLnZtKCksIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0
YXRlLnZtKCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdE1hcExpa2UiKSwg
c3RybGVuKCJUZXN0TWFwTGlrZSIpKSwgdmFsdWUpOworICAgIHJldHVybiB0aGlzT2JqZWN0LnB1
dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxj
b25zdCBMQ2hhcio+KCJUZXN0TWFwTGlrZSIpLCBzdHJsZW4oIlRlc3RNYXBMaWtlIikpLCB2YWx1
ZSk7CiB9CiAKIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE1hcExpa2VDb25zdHJ1Y3Rv
cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRWYWx1ZSkKQEAgLTE0NzcsOSArMTUwMywxMCBAQCBFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RHbG9iYWxPYmplY3RUZXN0TWVkCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RH
bG9iYWxPYmplY3RUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lckNvbnN0cnVjdG9yU2V0dGVyKEV4
ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2
YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBWTSYgdm0gPSB0aHJvd1Njb3Bl
LnZtKCk7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCi0gICAgcmV0
dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHN0YXRlLnZtKCksIElkZW50aWZpZXI6OmZyb21TdHJp
bmcoJnN0YXRlLnZtKCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdE1lZGlh
UXVlcnlMaXN0TGlzdGVuZXIiKSwgc3RybGVuKCJUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lciIp
KSwgdmFsdWUpOworICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0TWVk
aWFRdWVyeUxpc3RMaXN0ZW5lciIpLCBzdHJsZW4oIlRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVy
IikpLCB2YWx1ZSk7CiB9CiAKIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE1lZGlhUXVl
cnlMaXN0TGlzdGVuZXJDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKQEAgLTE1MDEsOSArMTUy
OCwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtCiAKIHN0YXRp
YyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRBbmRJbmRleGVkU2V0
dGVyTm9JZGVudGlmaWVyQ29uc3RydWN0b3JTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0
R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBVTlVTRURfUEFS
QU0oc3RhdGUpOworICAgIFZNJiB2bSA9IHRocm93U2NvcGUudm0oKTsKICAgICAvLyBTaGFkb3dp
bmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KLSAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJl
Y3Qoc3RhdGUudm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUudm0oKSwgcmVpbnRl
cnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVu
dGlmaWVyIiksIHN0cmxlbigiVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllciIp
KSwgdmFsdWUpOworICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0TmFt
ZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyIiksIHN0cmxlbigiVGVzdE5hbWVkQW5kSW5k
ZXhlZFNldHRlck5vSWRlbnRpZmllciIpKSwgdmFsdWUpOwogfQogCiBib29sIHNldEpTVGVzdEds
b2JhbE9iamVjdFRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXJDb25zdHJ1Y3Rv
cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRWYWx1ZSkKQEAgLTE1MjUsOSArMTU1MywxMCBAQCBFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RH
bG9iYWxPYmplY3RUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb25Db25z
dHJ1Y3RvclNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNP
YmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5V
U0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVk0m
IHZtID0gdGhyb3dTY29wZS52bSgpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0
cnVjdG9yLgotICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdChzdGF0ZS52bSgpLCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZS52bSgpLCByZWludGVycHJldF9jYXN0PGNvbnN0IExD
aGFyKj4oIlRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbiIpLCBzdHJs
ZW4oIlRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbiIpKSwgdmFsdWUp
OworICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0TmFtZWRBbmRJbmRl
eGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24iKSwgc3RybGVuKCJUZXN0TmFtZWRBbmRJbmRleGVk
U2V0dGVyVGhyb3dpbmdFeGNlcHRpb24iKSksIHZhbHVlKTsKIH0KIAogYm9vbCBzZXRKU1Rlc3RH
bG9iYWxPYmplY3RUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb25Db25z
dHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKQEAgLTE1NDksOSArMTU3OCwxMCBAQCBFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRK
U1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXJD
b25zdHJ1Y3RvclNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRo
aXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAg
VU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAg
Vk0mIHZtID0gdGhyb3dTY29wZS52bSgpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNv
bnN0cnVjdG9yLgotICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdChzdGF0ZS52bSgpLCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZS52bSgpLCByZWludGVycHJldF9jYXN0PGNvbnN0
IExDaGFyKj4oIlRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllciIpLCBzdHJs
ZW4oIlRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllciIpKSwgdmFsdWUpOwor
ICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0TmFtZWRBbmRJbmRleGVk
U2V0dGVyV2l0aElkZW50aWZpZXIiKSwgc3RybGVuKCJUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVy
V2l0aElkZW50aWZpZXIiKSksIHZhbHVlKTsKIH0KIAogYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmpl
Y3RUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXJDb25zdHJ1Y3RvcihFeGVj
U3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRWYWx1ZSkKQEAgLTE1NzMsOSArMTYwMywxMCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RH
bG9iYWxPYmplY3RUZXN0TmFtCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxP
YmplY3RUZXN0TmFtZWRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yU2V0dGVyKEV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dT
Y29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAg
VU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBWTSYgdm0gPSB0aHJvd1Njb3BlLnZtKCk7CiAgICAg
Ly8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCi0gICAgcmV0dXJuIHRoaXNPYmpl
Y3QucHV0RGlyZWN0KHN0YXRlLnZtKCksIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLnZt
KCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdE5hbWVkQ29uc3RydWN0b3Ii
KSwgc3RybGVuKCJUZXN0TmFtZWRDb25zdHJ1Y3RvciIpKSwgdmFsdWUpOworICAgIHJldHVybiB0
aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRl
cnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0TmFtZWRDb25zdHJ1Y3RvciIpLCBzdHJsZW4o
IlRlc3ROYW1lZENvbnN0cnVjdG9yIikpLCB2YWx1ZSk7CiB9CiAKIGJvb2wgc2V0SlNUZXN0R2xv
YmFsT2JqZWN0VGVzdE5hbWVkQ29uc3RydWN0b3JDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRl
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkK
QEAgLTE1OTcsOSArMTYyOCwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RB
dWRpb0NvCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RBdWRpb0Nv
bnN0cnVjdG9yU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhp
c09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBW
TSYgdm0gPSB0aHJvd1Njb3BlLnZtKCk7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29u
c3RydWN0b3IuCi0gICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHN0YXRlLnZtKCksIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLnZtKCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
TENoYXIqPigiQXVkaW8iKSwgc3RybGVuKCJBdWRpbyIpKSwgdmFsdWUpOworICAgIHJldHVybiB0
aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRl
cnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJBdWRpbyIpLCBzdHJsZW4oIkF1ZGlvIikpLCB2YWx1
ZSk7CiB9CiAKIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0QXVkaW9Db25zdHJ1Y3RvcihFeGVj
U3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRWYWx1ZSkKQEAgLTE2MjEsOSArMTY1MywxMCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RH
bG9iYWxPYmplY3RUZXN0TmFtCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxP
YmplY3RUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVyQ29uc3RydWN0b3JTZXR0ZXIoRXhlY1N0
YXRlJiBzdGF0ZSwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVl
LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFZNJiB2bSA9IHRocm93U2NvcGUudm0o
KTsKICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KLSAgICByZXR1cm4g
dGhpc09iamVjdC5wdXREaXJlY3Qoc3RhdGUudm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygm
c3RhdGUudm0oKSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0TmFtZWREZWxl
dGVyTm9JZGVudGlmaWVyIiksIHN0cmxlbigiVGVzdE5hbWVkRGVsZXRlck5vSWRlbnRpZmllciIp
KSwgdmFsdWUpOworICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0TmFt
ZWREZWxldGVyTm9JZGVudGlmaWVyIiksIHN0cmxlbigiVGVzdE5hbWVkRGVsZXRlck5vSWRlbnRp
ZmllciIpKSwgdmFsdWUpOwogfQogCiBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1l
ZERlbGV0ZXJOb0lkZW50aWZpZXJDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKQEAgLTE2NDUs
OSArMTY3OCwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtCiAK
IHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWREZWxldGVy
VGhyb3dpbmdFeGNlcHRpb25Db25zdHJ1Y3RvclNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rl
c3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRo
cm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIFVOVVNFRF9Q
QVJBTShzdGF0ZSk7CisgICAgVk0mIHZtID0gdGhyb3dTY29wZS52bSgpOwogICAgIC8vIFNoYWRv
d2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgotICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERp
cmVjdChzdGF0ZS52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZS52bSgpLCByZWlu
dGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2Vw
dGlvbiIpLCBzdHJsZW4oIlRlc3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbiIpKSwgdmFs
dWUpOworICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0TmFtZWREZWxl
dGVyVGhyb3dpbmdFeGNlcHRpb24iKSwgc3RybGVuKCJUZXN0TmFtZWREZWxldGVyVGhyb3dpbmdF
eGNlcHRpb24iKSksIHZhbHVlKTsKIH0KIAogYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0
TmFtZWREZWxldGVyVGhyb3dpbmdFeGNlcHRpb25Db25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRl
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkK
QEAgLTE2NjksOSArMTcwMywxMCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RU
ZXN0TmFtCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFt
ZWREZWxldGVyV2l0aElkZW50aWZpZXJDb25zdHJ1Y3RvclNldHRlcihFeGVjU3RhdGUmIHN0YXRl
LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2Nv
cGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIFVO
VVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVk0mIHZtID0gdGhyb3dTY29wZS52bSgpOwogICAgIC8v
IFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgotICAgIHJldHVybiB0aGlzT2JqZWN0
LnB1dERpcmVjdChzdGF0ZS52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZS52bSgp
LCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3ROYW1lZERlbGV0ZXJXaXRoSWRl
bnRpZmllciIpLCBzdHJsZW4oIlRlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllciIpKSwgdmFs
dWUpOworICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0TmFtZWREZWxl
dGVyV2l0aElkZW50aWZpZXIiKSwgc3RybGVuKCJUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZp
ZXIiKSksIHZhbHVlKTsKIH0KIAogYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRE
ZWxldGVyV2l0aElkZW50aWZpZXJDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKQEAgLTE2OTMs
OSArMTcyOCwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtCiAK
IHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWREZWxldGVy
V2l0aEluZGV4ZWRHZXR0ZXJDb25zdHJ1Y3RvclNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rl
c3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRo
cm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIFVOVVNFRF9Q
QVJBTShzdGF0ZSk7CisgICAgVk0mIHZtID0gdGhyb3dTY29wZS52bSgpOwogICAgIC8vIFNoYWRv
d2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgotICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERp
cmVjdChzdGF0ZS52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZS52bSgpLCByZWlu
dGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdl
dHRlciIpLCBzdHJsZW4oIlRlc3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRlciIpKSwgdmFs
dWUpOworICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0TmFtZWREZWxl
dGVyV2l0aEluZGV4ZWRHZXR0ZXIiKSwgc3RybGVuKCJUZXN0TmFtZWREZWxldGVyV2l0aEluZGV4
ZWRHZXR0ZXIiKSksIHZhbHVlKTsKIH0KIAogYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0
TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXJDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRl
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkK
QEAgLTE3MTcsOSArMTc1MywxMCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RU
ZXN0TmFtCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFt
ZWRHZXR0ZXJDYWxsV2l0aENvbnN0cnVjdG9yU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVz
dEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgVU5VU0VEX1BB
UkFNKHN0YXRlKTsKKyAgICBWTSYgdm0gPSB0aHJvd1Njb3BlLnZtKCk7CiAgICAgLy8gU2hhZG93
aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCi0gICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGly
ZWN0KHN0YXRlLnZtKCksIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLnZtKCksIHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGgiKSwgc3Ry
bGVuKCJUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aCIpKSwgdmFsdWUpOworICAgIHJldHVybiB0aGlz
T2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aCIpLCBzdHJsZW4o
IlRlc3ROYW1lZEdldHRlckNhbGxXaXRoIikpLCB2YWx1ZSk7CiB9CiAKIGJvb2wgc2V0SlNUZXN0
R2xvYmFsT2JqZWN0VGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGhDb25zdHJ1Y3RvcihFeGVjU3RhdGUq
IHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRW
YWx1ZSkKQEAgLTE3NDEsOSArMTc3OCwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxP
YmplY3RUZXN0TmFtCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RU
ZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXJDb25zdHJ1Y3RvclNldHRlcihFeGVjU3RhdGUmIHN0
YXRlLCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93
U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAg
IFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVk0mIHZtID0gdGhyb3dTY29wZS52bSgpOwogICAg
IC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgotICAgIHJldHVybiB0aGlzT2Jq
ZWN0LnB1dERpcmVjdChzdGF0ZS52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZS52
bSgpLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3ROYW1lZEdldHRlck5vSWRl
bnRpZmllciIpLCBzdHJsZW4oIlRlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllciIpKSwgdmFsdWUp
OworICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0TmFtZWRHZXR0ZXJO
b0lkZW50aWZpZXIiKSwgc3RybGVuKCJUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXIiKSksIHZh
bHVlKTsKIH0KIAogYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRHZXR0ZXJOb0lk
ZW50aWZpZXJDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKQEAgLTE3NjUsOSArMTgwMywxMCBA
QCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtCiAKIHN0YXRpYyBpbmxp
bmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmll
ckNvbnN0cnVjdG9yU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEdsb2JhbE9iamVjdCYg
dGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAg
ICBWTSYgdm0gPSB0aHJvd1Njb3BlLnZtKCk7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4g
Y29uc3RydWN0b3IuCi0gICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHN0YXRlLnZtKCks
IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLnZtKCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgTENoYXIqPigiVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXIiKSwgc3RybGVuKCJUZXN0
TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllciIpKSwgdmFsdWUpOworICAgIHJldHVybiB0aGlzT2Jq
ZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllciIpLCBzdHJs
ZW4oIlRlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyIikpLCB2YWx1ZSk7CiB9CiAKIGJvb2wg
c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXJDb25zdHJ1
Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRWYWx1ZSkKQEAgLTE3ODksOSArMTgyOCwxMCBAQCBFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rl
c3RHbG9iYWxPYmplY3RUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXJDb25zdHJ1Y3RvclNldHRl
cihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFs
dWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVk0mIHZtID0gdGhyb3dT
Y29wZS52bSgpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgotICAg
IHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdChzdGF0ZS52bSgpLCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKCZzdGF0ZS52bSgpLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RO
YW1lZFNldHRlck5vSWRlbnRpZmllciIpLCBzdHJsZW4oIlRlc3ROYW1lZFNldHRlck5vSWRlbnRp
ZmllciIpKSwgdmFsdWUpOworICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJU
ZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXIiKSwgc3RybGVuKCJUZXN0TmFtZWRTZXR0ZXJOb0lk
ZW50aWZpZXIiKSksIHZhbHVlKTsKIH0KIAogYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0
TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXJDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKQEAgLTE4
MTMsOSArMTg1MywxMCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFt
CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRTZXR0
ZXJUaHJvd2luZ0V4Y2VwdGlvbkNvbnN0cnVjdG9yU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpT
VGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYg
dGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgVU5VU0VE
X1BBUkFNKHN0YXRlKTsKKyAgICBWTSYgdm0gPSB0aHJvd1Njb3BlLnZtKCk7CiAgICAgLy8gU2hh
ZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCi0gICAgcmV0dXJuIHRoaXNPYmplY3QucHV0
RGlyZWN0KHN0YXRlLnZtKCksIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLnZtKCksIHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNl
cHRpb24iKSwgc3RybGVuKCJUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbiIpKSwgdmFs
dWUpOworICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0TmFtZWRTZXR0
ZXJUaHJvd2luZ0V4Y2VwdGlvbiIpLCBzdHJsZW4oIlRlc3ROYW1lZFNldHRlclRocm93aW5nRXhj
ZXB0aW9uIikpLCB2YWx1ZSk7CiB9CiAKIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE5h
bWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb25Db25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKQEAg
LTE4MzcsOSArMTg3OCwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0
TmFtCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRT
ZXR0ZXJXaXRoSWRlbnRpZmllckNvbnN0cnVjdG9yU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpT
VGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYg
dGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgVU5VU0VE
X1BBUkFNKHN0YXRlKTsKKyAgICBWTSYgdm0gPSB0aHJvd1Njb3BlLnZtKCk7CiAgICAgLy8gU2hh
ZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCi0gICAgcmV0dXJuIHRoaXNPYmplY3QucHV0
RGlyZWN0KHN0YXRlLnZtKCksIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLnZtKCksIHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZp
ZXIiKSwgc3RybGVuKCJUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllciIpKSwgdmFsdWUpOwor
ICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0TmFtZWRTZXR0ZXJXaXRo
SWRlbnRpZmllciIpLCBzdHJsZW4oIlRlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyIikpLCB2
YWx1ZSk7CiB9CiAKIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkU2V0dGVyV2l0
aElkZW50aWZpZXJDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0
aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKQEAgLTE4NjEsOSArMTkwMywx
MCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtCiAKIHN0YXRpYyBp
bmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhl
ZEdldHRlckNvbnN0cnVjdG9yU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEdsb2JhbE9i
amVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkK
IHsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRl
KTsKKyAgICBWTSYgdm0gPSB0aHJvd1Njb3BlLnZtKCk7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVp
bHQtaW4gY29uc3RydWN0b3IuCi0gICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHN0YXRl
LnZtKCksIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLnZtKCksIHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgTENoYXIqPigiVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXIiKSwgc3Ry
bGVuKCJUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlciIpKSwgdmFsdWUpOworICAgIHJl
dHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwg
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhl
ZEdldHRlciIpLCBzdHJsZW4oIlRlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyIikpLCB2
YWx1ZSk7CiB9CiAKIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkU2V0dGVyV2l0
aEluZGV4ZWRHZXR0ZXJDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKQEAgLTE4ODUsOSArMTky
OCwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtCiAKIHN0YXRp
YyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRTZXR0ZXJXaXRoSW5k
ZXhlZEdldHRlckFuZFNldHRlckNvbnN0cnVjdG9yU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpT
VGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYg
dGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgVU5VU0VE
X1BBUkFNKHN0YXRlKTsKKyAgICBWTSYgdm0gPSB0aHJvd1Njb3BlLnZtKCk7CiAgICAgLy8gU2hh
ZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCi0gICAgcmV0dXJuIHRoaXNPYmplY3QucHV0
RGlyZWN0KHN0YXRlLnZtKCksIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLnZtKCksIHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRH
ZXR0ZXJBbmRTZXR0ZXIiKSwgc3RybGVuKCJUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRl
ckFuZFNldHRlciIpKSwgdmFsdWUpOworICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2
bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hh
cio+KCJUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlciIpLCBzdHJsZW4o
IlRlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyIikpLCB2YWx1ZSk7CiB9
CiAKIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRH
ZXR0ZXJBbmRTZXR0ZXJDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKQEAgLTE5MDksOSArMTk1
MywxMCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtCiAKIHN0YXRp
YyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRTZXR0ZXJXaXRoT3Zl
cnJpZGVCdWlsdGluc0NvbnN0cnVjdG9yU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEds
b2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dT
Y29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgVU5VU0VEX1BBUkFN
KHN0YXRlKTsKKyAgICBWTSYgdm0gPSB0aHJvd1Njb3BlLnZtKCk7CiAgICAgLy8gU2hhZG93aW5n
IGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCi0gICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0
KHN0YXRlLnZtKCksIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLnZtKCksIHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRp
bnMiKSwgc3RybGVuKCJUZXN0TmFtZWRTZXR0ZXJXaXRoT3ZlcnJpZGVCdWlsdGlucyIpKSwgdmFs
dWUpOworICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0TmFtZWRTZXR0
ZXJXaXRoT3ZlcnJpZGVCdWlsdGlucyIpLCBzdHJsZW4oIlRlc3ROYW1lZFNldHRlcldpdGhPdmVy
cmlkZUJ1aWx0aW5zIikpLCB2YWx1ZSk7CiB9CiAKIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0
VGVzdE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnNDb25zdHJ1Y3RvcihFeGVjU3RhdGUq
IHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRW
YWx1ZSkKQEAgLTE5MzMsOSArMTk3OCwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxP
YmplY3RUZXN0TmFtCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RU
ZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNDb25zdHJ1Y3RvclNldHRlcihF
eGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUg
dmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVk0mIHZtID0gdGhyb3dTY29w
ZS52bSgpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgotICAgIHJl
dHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdChzdGF0ZS52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKCZzdGF0ZS52bSgpLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3ROYW1l
ZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllcyIpLCBzdHJsZW4oIlRlc3ROYW1lZFNldHRl
cldpdGhVbmZvcmdhYmxlUHJvcGVydGllcyIpKSwgdmFsdWUpOworICAgIHJldHVybiB0aGlzT2Jq
ZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRp
ZXMiKSwgc3RybGVuKCJUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXMiKSks
IHZhbHVlKTsKIH0KIAogYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRTZXR0ZXJX
aXRoVW5mb3JnYWJsZVByb3BlcnRpZXNDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKQEAgLTE5
NTcsOSArMjAwMywxMCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFt
CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRTZXR0
ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5zQ29uc3RydWN0b3JT
ZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBK
U1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFZNJiB2bSA9IHRo
cm93U2NvcGUudm0oKTsKICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4K
LSAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qoc3RhdGUudm0oKSwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZygmc3RhdGUudm0oKSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJU
ZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5z
IiksIHN0cmxlbigiVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3Zl
cnJpZGVCdWlsdGlucyIpKSwgdmFsdWUpOworICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVj
dCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBM
Q2hhcio+KCJUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVycmlk
ZUJ1aWx0aW5zIiksIHN0cmxlbigiVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0
aWVzQW5kT3ZlcnJpZGVCdWlsdGlucyIpKSwgdmFsdWUpOwogfQogCiBib29sIHNldEpTVGVzdEds
b2JhbE9iamVjdFRlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0FuZE92ZXJy
aWRlQnVpbHRpbnNDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0
aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKQEAgLTE5ODEsOSArMjAyOCwx
MCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0T3ZlCiAKIHN0YXRpYyBp
bmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9y
c0NvbnN0cnVjdG9yU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEdsb2JhbE9iamVjdCYg
dGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAg
ICBWTSYgdm0gPSB0aHJvd1Njb3BlLnZtKCk7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4g
Y29uc3RydWN0b3IuCi0gICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHN0YXRlLnZtKCks
IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLnZtKCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgTENoYXIqPigiVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMiKSwgc3RybGVuKCJUZXN0T3Zl
cmxvYWRlZENvbnN0cnVjdG9ycyIpKSwgdmFsdWUpOworICAgIHJldHVybiB0aGlzT2JqZWN0LnB1
dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxj
b25zdCBMQ2hhcio+KCJUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycyIpLCBzdHJsZW4oIlRlc3RP
dmVybG9hZGVkQ29uc3RydWN0b3JzIikpLCB2YWx1ZSk7CiB9CiAKIGJvb2wgc2V0SlNUZXN0R2xv
YmFsT2JqZWN0VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNDb25zdHJ1Y3RvcihFeGVjU3RhdGUq
IHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRW
YWx1ZSkKQEAgLTIwMDUsOSArMjA1MywxMCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxP
YmplY3RUZXN0T3ZlCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RU
ZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZUNvbnN0cnVjdG9yU2V0dGVyKEV4
ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2
YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBWTSYgdm0gPSB0aHJvd1Njb3Bl
LnZtKCk7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCi0gICAgcmV0
dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHN0YXRlLnZtKCksIElkZW50aWZpZXI6OmZyb21TdHJp
bmcoJnN0YXRlLnZtKCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdE92ZXJs
b2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2UiKSwgc3RybGVuKCJUZXN0T3ZlcmxvYWRlZENv
bnN0cnVjdG9yc1dpdGhTZXF1ZW5jZSIpKSwgdmFsdWUpOworICAgIHJldHVybiB0aGlzT2JqZWN0
LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBMQ2hhcio+KCJUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZSIp
LCBzdHJsZW4oIlRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlIikpLCB2YWx1
ZSk7CiB9CiAKIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE92ZXJsb2FkZWRDb25zdHJ1
Y3RvcnNXaXRoU2VxdWVuY2VDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKQEAgLTIwMjksOSAr
MjA3OCwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0T3ZlCiAKIHN0
YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0T3ZlcnJpZGVCdWlsdGlu
c0NvbnN0cnVjdG9yU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEdsb2JhbE9iamVjdCYg
dGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAg
ICBWTSYgdm0gPSB0aHJvd1Njb3BlLnZtKCk7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4g
Y29uc3RydWN0b3IuCi0gICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHN0YXRlLnZtKCks
IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLnZtKCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgTENoYXIqPigiVGVzdE92ZXJyaWRlQnVpbHRpbnMiKSwgc3RybGVuKCJUZXN0T3ZlcnJpZGVC
dWlsdGlucyIpKSwgdmFsdWUpOworICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+
KCJUZXN0T3ZlcnJpZGVCdWlsdGlucyIpLCBzdHJsZW4oIlRlc3RPdmVycmlkZUJ1aWx0aW5zIikp
LCB2YWx1ZSk7CiB9CiAKIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE92ZXJyaWRlQnVp
bHRpbnNDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFs
dWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKQEAgLTIwNTMsOSArMjEwMywxMCBAQCBF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0UGx1CiAKIHN0YXRpYyBpbmxpbmUg
Ym9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0UGx1Z2luSW50ZXJmYWNlQ29uc3RydWN0b3JT
ZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBK
U1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFZNJiB2bSA9IHRo
cm93U2NvcGUudm0oKTsKICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4K
LSAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qoc3RhdGUudm0oKSwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZygmc3RhdGUudm0oKSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJU
ZXN0UGx1Z2luSW50ZXJmYWNlIiksIHN0cmxlbigiVGVzdFBsdWdpbkludGVyZmFjZSIpKSwgdmFs
dWUpOworICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0UGx1Z2luSW50
ZXJmYWNlIiksIHN0cmxlbigiVGVzdFBsdWdpbkludGVyZmFjZSIpKSwgdmFsdWUpOwogfQogCiBi
b29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RQbHVnaW5JbnRlcmZhY2VDb25zdHJ1Y3RvcihF
eGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRWYWx1ZSkKQEAgLTIwNzcsOSArMjEyOCwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RHbG9iYWxPYmplY3RUZXN0UmVhCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9i
YWxPYmplY3RUZXN0UmVhZE9ubHlNYXBMaWtlQ29uc3RydWN0b3JTZXR0ZXIoRXhlY1N0YXRlJiBz
dGF0ZSwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAg
ICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFZNJiB2bSA9IHRocm93U2NvcGUudm0oKTsKICAg
ICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KLSAgICByZXR1cm4gdGhpc09i
amVjdC5wdXREaXJlY3Qoc3RhdGUudm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUu
dm0oKSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0UmVhZE9ubHlNYXBMaWtl
IiksIHN0cmxlbigiVGVzdFJlYWRPbmx5TWFwTGlrZSIpKSwgdmFsdWUpOworICAgIHJldHVybiB0
aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRl
cnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0UmVhZE9ubHlNYXBMaWtlIiksIHN0cmxlbigi
VGVzdFJlYWRPbmx5TWFwTGlrZSIpKSwgdmFsdWUpOwogfQogCiBib29sIHNldEpTVGVzdEdsb2Jh
bE9iamVjdFRlc3RSZWFkT25seU1hcExpa2VDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKQEAg
LTIxMDEsOSArMjE1MywxMCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0
UmVwCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0UmVwb3J0
RXh0cmFNZW1vcnlDb3N0Q29uc3RydWN0b3JTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0
R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBVTlVTRURfUEFS
QU0oc3RhdGUpOworICAgIFZNJiB2bSA9IHRocm93U2NvcGUudm0oKTsKICAgICAvLyBTaGFkb3dp
bmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KLSAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJl
Y3Qoc3RhdGUudm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUudm0oKSwgcmVpbnRl
cnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0UmVwb3J0RXh0cmFNZW1vcnlDb3N0IiksIHN0
cmxlbigiVGVzdFJlcG9ydEV4dHJhTWVtb3J5Q29zdCIpKSwgdmFsdWUpOworICAgIHJldHVybiB0
aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRl
cnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0UmVwb3J0RXh0cmFNZW1vcnlDb3N0IiksIHN0
cmxlbigiVGVzdFJlcG9ydEV4dHJhTWVtb3J5Q29zdCIpKSwgdmFsdWUpOwogfQogCiBib29sIHNl
dEpTVGVzdEdsb2JhbE9iamVjdFRlc3RSZXBvcnRFeHRyYU1lbW9yeUNvc3RDb25zdHJ1Y3RvcihF
eGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRWYWx1ZSkKQEAgLTIxMjUsOSArMjE3OCwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RHbG9iYWxPYmplY3RUZXN0U2VyCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9i
YWxPYmplY3RUZXN0U2VyaWFsaXphdGlvbkNvbnN0cnVjdG9yU2V0dGVyKEV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dT
Y29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAg
VU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBWTSYgdm0gPSB0aHJvd1Njb3BlLnZtKCk7CiAgICAg
Ly8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCi0gICAgcmV0dXJuIHRoaXNPYmpl
Y3QucHV0RGlyZWN0KHN0YXRlLnZtKCksIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLnZt
KCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdFNlcmlhbGl6YXRpb24iKSwg
c3RybGVuKCJUZXN0U2VyaWFsaXphdGlvbiIpKSwgdmFsdWUpOworICAgIHJldHVybiB0aGlzT2Jq
ZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0U2VyaWFsaXphdGlvbiIpLCBzdHJsZW4oIlRlc3RTZXJp
YWxpemF0aW9uIikpLCB2YWx1ZSk7CiB9CiAKIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVz
dFNlcmlhbGl6YXRpb25Db25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKQEAgLTIxNDksOSArMjIw
MywxMCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0U2VyCiAKIHN0YXRp
YyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0U2VyaWFsaXphdGlvbkluZGly
ZWN0SW5oZXJpdGFuY2VDb25zdHJ1Y3RvclNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RH
bG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93
U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIFVOVVNFRF9QQVJB
TShzdGF0ZSk7CisgICAgVk0mIHZtID0gdGhyb3dTY29wZS52bSgpOwogICAgIC8vIFNoYWRvd2lu
ZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgotICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVj
dChzdGF0ZS52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZS52bSgpLCByZWludGVy
cHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0
YW5jZSIpLCBzdHJsZW4oIlRlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZSIpKSwg
dmFsdWUpOworICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0U2VyaWFs
aXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2UiKSwgc3RybGVuKCJUZXN0U2VyaWFsaXphdGlvbklu
ZGlyZWN0SW5oZXJpdGFuY2UiKSksIHZhbHVlKTsKIH0KIAogYm9vbCBzZXRKU1Rlc3RHbG9iYWxP
YmplY3RUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2VDb25zdHJ1Y3RvcihFeGVj
U3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRWYWx1ZSkKQEAgLTIxNzMsOSArMjIyOCwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RH
bG9iYWxPYmplY3RUZXN0U2VyCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxP
YmplY3RUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRDb25zdHJ1Y3RvclNldHRlcihFeGVjU3RhdGUm
IHN0YXRlLCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRo
cm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwor
ICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVk0mIHZtID0gdGhyb3dTY29wZS52bSgpOwog
ICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgotICAgIHJldHVybiB0aGlz
T2JqZWN0LnB1dERpcmVjdChzdGF0ZS52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0
ZS52bSgpLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RTZXJpYWxpemF0aW9u
SW5oZXJpdCIpLCBzdHJsZW4oIlRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdCIpKSwgdmFsdWUpOwor
ICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0U2VyaWFsaXphdGlvbklu
aGVyaXQiKSwgc3RybGVuKCJUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQiKSksIHZhbHVlKTsKIH0K
IAogYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRDb25z
dHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKQEAgLTIxOTcsOSArMjI1MywxMCBAQCBFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0U2VyCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRK
U1Rlc3RHbG9iYWxPYmplY3RUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbENvbnN0cnVjdG9y
U2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwg
SlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBWTSYgdm0gPSB0
aHJvd1Njb3BlLnZtKCk7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3Iu
Ci0gICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHN0YXRlLnZtKCksIElkZW50aWZpZXI6
OmZyb21TdHJpbmcoJnN0YXRlLnZtKCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigi
VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwiKSwgc3RybGVuKCJUZXN0U2VyaWFsaXphdGlv
bkluaGVyaXRGaW5hbCIpKSwgdmFsdWUpOworICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVj
dCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBM
Q2hhcio+KCJUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbCIpLCBzdHJsZW4oIlRlc3RTZXJp
YWxpemF0aW9uSW5oZXJpdEZpbmFsIikpLCB2YWx1ZSk7CiB9CiAKIGJvb2wgc2V0SlNUZXN0R2xv
YmFsT2JqZWN0VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxDb25zdHJ1Y3RvcihFeGVjU3Rh
dGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRWYWx1ZSkKQEAgLTIyMjUsOSArMjI4MiwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9i
YWxPYmplY3RUZXN0U2VyCiAjaWYgRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRp
b24yKQogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RTZXJpYWxp
emVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDb25zdHJ1Y3RvclNldHRlcihFeGVjU3RhdGUmIHN0YXRl
LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2Nv
cGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIFVO
VVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVk0mIHZtID0gdGhyb3dTY29wZS52bSgpOwogICAgIC8v
IFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgotICAgIHJldHVybiB0aGlzT2JqZWN0
LnB1dERpcmVjdChzdGF0ZS52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZS52bSgp
LCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RTZXJpYWxpemVkU2NyaXB0VmFs
dWVJbnRlcmZhY2UiKSwgc3RybGVuKCJUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNl
IikpLCB2YWx1ZSk7CisgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UiKSwgc3RybGVuKCJUZXN0U2VyaWFsaXplZFNj
cmlwdFZhbHVlSW50ZXJmYWNlIikpLCB2YWx1ZSk7CiB9CiAKIGJvb2wgc2V0SlNUZXN0R2xvYmFs
T2JqZWN0VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNvbnN0cnVjdG9yKEV4ZWNT
dGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZFZhbHVlKQpAQCAtMjI1MSw5ICsyMzA5LDEwIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEds
b2JhbE9iamVjdFRlc3RTdHIKIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9i
amVjdFRlc3RTdHJpbmdpZmllckNvbnN0cnVjdG9yU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpT
VGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYg
dGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgVU5VU0VE
X1BBUkFNKHN0YXRlKTsKKyAgICBWTSYgdm0gPSB0aHJvd1Njb3BlLnZtKCk7CiAgICAgLy8gU2hh
ZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCi0gICAgcmV0dXJuIHRoaXNPYmplY3QucHV0
RGlyZWN0KHN0YXRlLnZtKCksIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLnZtKCksIHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdFN0cmluZ2lmaWVyIiksIHN0cmxlbigi
VGVzdFN0cmluZ2lmaWVyIikpLCB2YWx1ZSk7CisgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGly
ZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0
IExDaGFyKj4oIlRlc3RTdHJpbmdpZmllciIpLCBzdHJsZW4oIlRlc3RTdHJpbmdpZmllciIpKSwg
dmFsdWUpOwogfQogCiBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RTdHJpbmdpZmllckNv
bnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQpAQCAtMjI3NSw5ICsyMzM0LDEwIEBAIEVuY29kZWRK
U1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RTdHIKIAogc3RhdGljIGlubGluZSBib29sIHNl
dEpTVGVzdEdsb2JhbE9iamVjdFRlc3RTdHJpbmdpZmllckFub255bW91c09wZXJhdGlvbkNvbnN0
cnVjdG9yU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09i
amVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBWTSYg
dm0gPSB0aHJvd1Njb3BlLnZtKCk7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3Ry
dWN0b3IuCi0gICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHN0YXRlLnZtKCksIElkZW50
aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLnZtKCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENo
YXIqPigiVGVzdFN0cmluZ2lmaWVyQW5vbnltb3VzT3BlcmF0aW9uIiksIHN0cmxlbigiVGVzdFN0
cmluZ2lmaWVyQW5vbnltb3VzT3BlcmF0aW9uIikpLCB2YWx1ZSk7CisgICAgcmV0dXJuIHRoaXNP
YmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJl
dF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RTdHJpbmdpZmllckFub255bW91c09wZXJhdGlvbiIp
LCBzdHJsZW4oIlRlc3RTdHJpbmdpZmllckFub255bW91c09wZXJhdGlvbiIpKSwgdmFsdWUpOwog
fQogCiBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RTdHJpbmdpZmllckFub255bW91c09w
ZXJhdGlvbkNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQpAQCAtMjI5OSw5ICsyMzU5LDEwIEBA
IEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RTdHIKIAogc3RhdGljIGlubGlu
ZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RTdHJpbmdpZmllck5hbWVkT3BlcmF0aW9u
Q29uc3RydWN0b3JTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0
aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAg
IFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAg
IFZNJiB2bSA9IHRocm93U2NvcGUudm0oKTsKICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBj
b25zdHJ1Y3Rvci4KLSAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qoc3RhdGUudm0oKSwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUudm0oKSwgcmVpbnRlcnByZXRfY2FzdDxjb25z
dCBMQ2hhcio+KCJUZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvbiIpLCBzdHJsZW4oIlRlc3RT
dHJpbmdpZmllck5hbWVkT3BlcmF0aW9uIikpLCB2YWx1ZSk7CisgICAgcmV0dXJuIHRoaXNPYmpl
Y3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9j
YXN0PGNvbnN0IExDaGFyKj4oIlRlc3RTdHJpbmdpZmllck5hbWVkT3BlcmF0aW9uIiksIHN0cmxl
bigiVGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRpb24iKSksIHZhbHVlKTsKIH0KIAogYm9vbCBz
ZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvbkNvbnN0cnVj
dG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZFZhbHVlKQpAQCAtMjMyMyw5ICsyMzg0LDEwIEBAIEVuY29kZWRKU1ZhbHVl
IGpzVGVzdEdsb2JhbE9iamVjdFRlc3RTdHIKIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVz
dEdsb2JhbE9iamVjdFRlc3RTdHJpbmdpZmllck9wZXJhdGlvbkltcGxlbWVudGVkQXNDb25zdHJ1
Y3RvclNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmpl
Y3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVk0mIHZt
ID0gdGhyb3dTY29wZS52bSgpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVj
dG9yLgotICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdChzdGF0ZS52bSgpLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKCZzdGF0ZS52bSgpLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFy
Kj4oIlRlc3RTdHJpbmdpZmllck9wZXJhdGlvbkltcGxlbWVudGVkQXMiKSwgc3RybGVuKCJUZXN0
U3RyaW5naWZpZXJPcGVyYXRpb25JbXBsZW1lbnRlZEFzIikpLCB2YWx1ZSk7CisgICAgcmV0dXJu
IHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWlu
dGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RTdHJpbmdpZmllck9wZXJhdGlvbkltcGxl
bWVudGVkQXMiKSwgc3RybGVuKCJUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25JbXBsZW1lbnRlZEFz
IikpLCB2YWx1ZSk7CiB9CiAKIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFN0cmluZ2lm
aWVyT3BlcmF0aW9uSW1wbGVtZW50ZWRBc0NvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQpAQCAt
MjM0Nyw5ICsyNDA5LDEwIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RT
dHIKIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RTdHJpbmdp
Zmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmdDb25zdHJ1Y3RvclNldHRlcihFeGVjU3RhdGUmIHN0
YXRlLCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93
U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAg
IFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVk0mIHZtID0gdGhyb3dTY29wZS52bSgpOwogICAg
IC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgotICAgIHJldHVybiB0aGlzT2Jq
ZWN0LnB1dERpcmVjdChzdGF0ZS52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZS52
bSgpLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RTdHJpbmdpZmllck9wZXJh
dGlvbk5hbWVkVG9TdHJpbmciKSwgc3RybGVuKCJUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25OYW1l
ZFRvU3RyaW5nIikpLCB2YWx1ZSk7CisgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZt
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFy
Kj4oIlRlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmciKSwgc3RybGVuKCJUZXN0
U3RyaW5naWZpZXJPcGVyYXRpb25OYW1lZFRvU3RyaW5nIikpLCB2YWx1ZSk7CiB9CiAKIGJvb2wg
c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uTmFtZWRUb1N0cmlu
Z0NvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQpAQCAtMjM3MSw5ICsyNDM0LDEwIEBAIEVuY29k
ZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RTdHIKIAogc3RhdGljIGlubGluZSBib29s
IHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RTdHJpbmdpZmllclJlYWRPbmx5QXR0cmlidXRlQ29u
c3RydWN0b3JTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlz
T2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFZN
JiB2bSA9IHRocm93U2NvcGUudm0oKTsKICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25z
dHJ1Y3Rvci4KLSAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qoc3RhdGUudm0oKSwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUudm0oKSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBM
Q2hhcio+KCJUZXN0U3RyaW5naWZpZXJSZWFkT25seUF0dHJpYnV0ZSIpLCBzdHJsZW4oIlRlc3RT
dHJpbmdpZmllclJlYWRPbmx5QXR0cmlidXRlIikpLCB2YWx1ZSk7CisgICAgcmV0dXJuIHRoaXNP
YmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJl
dF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RTdHJpbmdpZmllclJlYWRPbmx5QXR0cmlidXRlIiks
IHN0cmxlbigiVGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGUiKSksIHZhbHVlKTsKIH0K
IAogYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0U3RyaW5naWZpZXJSZWFkT25seUF0dHJp
YnV0ZUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQpAQCAtMjM5NSw5ICsyNDU5LDEwIEBAIEVu
Y29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RTdHIKIAogc3RhdGljIGlubGluZSBi
b29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJpYnV0
ZUNvbnN0cnVjdG9yU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEdsb2JhbE9iamVjdCYg
dGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAg
ICBWTSYgdm0gPSB0aHJvd1Njb3BlLnZtKCk7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4g
Y29uc3RydWN0b3IuCi0gICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHN0YXRlLnZtKCks
IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLnZtKCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgTENoYXIqPigiVGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmlidXRlIiksIHN0cmxlbigi
VGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmlidXRlIikpLCB2YWx1ZSk7CisgICAgcmV0dXJu
IHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWlu
dGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJp
YnV0ZSIpLCBzdHJsZW4oIlRlc3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJpYnV0ZSIpKSwgdmFs
dWUpOwogfQogCiBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RTdHJpbmdpZmllclJlYWRX
cml0ZUF0dHJpYnV0ZUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQpAQCAtMjQxOSw5ICsyNDg0
LDEwIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RUeXAKIAogc3RhdGlj
IGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RUeXBlZGVmc0NvbnN0cnVjdG9y
U2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwg
SlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBWTSYgdm0gPSB0
aHJvd1Njb3BlLnZtKCk7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3Iu
Ci0gICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHN0YXRlLnZtKCksIElkZW50aWZpZXI6
OmZyb21TdHJpbmcoJnN0YXRlLnZtKCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigi
VGVzdFR5cGVkZWZzIiksIHN0cmxlbigiVGVzdFR5cGVkZWZzIikpLCB2YWx1ZSk7CisgICAgcmV0
dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBy
ZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RUeXBlZGVmcyIpLCBzdHJsZW4oIlRl
c3RUeXBlZGVmcyIpKSwgdmFsdWUpOwogfQogCiBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRl
c3RUeXBlZGVmc0NvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZp
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyLmNwcAkocmV2aXNpb24gMjQ5MTI4
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4
ZWRTZXR0ZXJOb0lkZW50aWZpZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MCw3ICs4MCw3IEBA
IHRlbXBsYXRlPD4gSlNWYWx1ZSBKU1Rlc3RJbmRleGVkU2V0dGVyTm8KIHRlbXBsYXRlPD4gdm9p
ZCBKU1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyQ29uc3RydWN0b3I6OmluaXRpYWxpemVQ
cm9wZXJ0aWVzKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKIHsKICAg
ICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgSlNUZXN0SW5kZXhl
ZFNldHRlck5vSWRlbnRpZmllcjo6cHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QpLCBKU0M6OlBy
b3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVh
ZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7Ci0gICAgcHV0RGlyZWN0
KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcoJnZtLCBTdHJp
bmcoIlRlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyIl9zKSksIEpTQzo6UHJvcGVydHlBdHRy
aWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOworICAg
IHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5n
KHZtLCBTdHJpbmcoIlRlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyIl9zKSksIEpTQzo6UHJv
cGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVu
dW0pOwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJl
cigwKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0
cmlidXRlOjpEb250RW51bSk7CiB9CiAKQEAgLTE2NiwxMCArMTY2LDExIEBAIGJvb2wgSlNUZXN0
SW5kZXhlZFNldHRlck5vSWRlbnRpZmllcjo6Z2UKIAogdm9pZCBKU1Rlc3RJbmRleGVkU2V0dGVy
Tm9JZGVudGlmaWVyOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNT
dGF0ZSogc3RhdGUsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlv
bk1vZGUgbW9kZSkKIHsKKyAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvKiB0aGlz
T2JqZWN0ID0ganNDYXN0PEpTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIqPihvYmplY3Qp
OwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMob2JqZWN0LCBpbmZvKCkpOwogICAgIGZv
ciAodW5zaWduZWQgaSA9IDAsIGNvdW50ID0gdGhpc09iamVjdC0+d3JhcHBlZCgpLmxlbmd0aCgp
OyBpIDwgY291bnQ7ICsraSkKLSAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6
ZnJvbShzdGF0ZSwgaSkpOworICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpm
cm9tKHZtLCBpKSk7CiAgICAgSlNPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBz
dGF0ZSwgcHJvcGVydHlOYW1lcywgbW9kZSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRp
b24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uY3BwCShyZXZpc2lvbiAy
NDkxMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODAs
NyArODAsNyBAQCB0ZW1wbGF0ZTw+IEpTVmFsdWUgSlNUZXN0SW5kZXhlZFNldHRlclRoCiB0ZW1w
bGF0ZTw+IHZvaWQgSlNUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uQ29uc3RydWN0
b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2Jh
bE9iamVjdCkKIHsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlw
ZSwgSlNUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uOjpwcm90b3R5cGUodm0sIGds
b2JhbE9iamVjdCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUgfCBKU0M6OlBy
b3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRF
bnVtKTsKLSAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJp
dmlhbFN0cmluZygmdm0sIFN0cmluZygiVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlv
biJfcykpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlB
dHRyaWJ1dGU6OkRvbnRFbnVtKTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMt
Pm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZyh2bSwgU3RyaW5nKCJUZXN0SW5kZXhlZFNldHRlclRo
cm93aW5nRXhjZXB0aW9uIl9zKSksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwg
SlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwogICAgIHB1dERpcmVjdCh2bSwgdm0u
cHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigwKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0
ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CiB9CiAKQEAg
LTE2NiwxMCArMTY2LDExIEBAIGJvb2wgSlNUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0
aW8KIAogdm9pZCBKU1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246OmdldE93blBy
b3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBzdGF0ZSwgUHJvcGVydHlO
YW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQogeworICAgIFZN
JiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0
SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uKj4ob2JqZWN0KTsKICAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKG9iamVjdCwgaW5mbygpKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
LCBjb3VudCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKS5sZW5ndGgoKTsgaSA8IGNvdW50OyArK2kp
Ci0gICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb20oc3RhdGUsIGkpKTsK
KyAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbSh2bSwgaSkpOwogICAg
IEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgc3RhdGUsIHByb3BlcnR5TmFt
ZXMsIG1vZGUpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNl
dHRlcldpdGhJZGVudGlmaWVyLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRp
Zmllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg2LDcgKzg2LDcgQEAgdGVtcGxhdGU8PiBKU1Zh
bHVlIEpTVGVzdEluZGV4ZWRTZXR0ZXJXaQogdGVtcGxhdGU8PiB2b2lkIEpTVGVzdEluZGV4ZWRT
ZXR0ZXJXaXRoSWRlbnRpZmllckNvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGllcyhWTSYg
dm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCiB7CiAgICAgcHV0RGlyZWN0KHZt
LCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRl
bnRpZmllcjo6cHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QpLCBKU0M6OlByb3BlcnR5QXR0cmli
dXRlOjpEb250RGVsZXRlIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6
OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7Ci0gICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9w
ZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcoJnZtLCBTdHJpbmcoIlRlc3RJbmRl
eGVkU2V0dGVyV2l0aElkZW50aWZpZXIiX3MpKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVh
ZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CisgICAgcHV0RGlyZWN0
KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcodm0sIFN0cmlu
ZygiVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllciJfcykpLCBKU0M6OlByb3BlcnR5QXR0
cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKICAg
ICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMCksIEpT
Qzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6
RG9udEVudW0pOwogfQogCkBAIC0xNzMsMTAgKzE3MywxMSBAQCBib29sIEpTVGVzdEluZGV4ZWRT
ZXR0ZXJXaXRoSWRlbnRpZmllcjo6CiAKIHZvaWQgSlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVu
dGlmaWVyOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSog
c3RhdGUsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUg
bW9kZSkKIHsKKyAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvKiB0aGlzT2JqZWN0
ID0ganNDYXN0PEpTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcio+KG9iamVjdCk7CiAg
ICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhvYmplY3QsIGluZm8oKSk7CiAgICAgZm9yICh1
bnNpZ25lZCBpID0gMCwgY291bnQgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCkubGVuZ3RoKCk7IGkg
PCBjb3VudDsgKytpKQotICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9t
KHN0YXRlLCBpKSk7CisgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb20o
dm0sIGkpKTsKICAgICBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIHN0YXRl
LCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5jcHAJ
KHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RJbnRlcmZhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzMsNyArMjczLDcg
QEAgdGVtcGxhdGU8PiBKU1ZhbHVlIEpTVGVzdEludGVyZmFjZUNvbnN0cgogdGVtcGxhdGU8PiB2
b2lkIEpTVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGllcyhWTSYg
dm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCiB7CiAgICAgcHV0RGlyZWN0KHZt
LCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdEludGVyZmFjZTo6cHJvdG90eXBl
KHZtLCBnbG9iYWxPYmplY3QpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwg
SlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRl
OjpEb250RW51bSk7Ci0gICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBq
c05vbnRyaXZpYWxTdHJpbmcoJnZtLCBTdHJpbmcoIlRlc3RJbnRlcmZhY2UiX3MpKSwgSlNDOjpQ
cm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250
RW51bSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRy
aXZpYWxTdHJpbmcodm0sIFN0cmluZygiVGVzdEludGVyZmFjZSJfcykpLCBKU0M6OlByb3BlcnR5
QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsK
ICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMSks
IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0
ZTo6RG9udEVudW0pOwogICAgIHJlaWZ5U3RhdGljUHJvcGVydGllcyh2bSwgSlNUZXN0SW50ZXJm
YWNlOjppbmZvKCksIEpTVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yVGFibGVWYWx1ZXMsICp0aGlz
KTsKIH0KQEAgLTUwOCw2ICs1MDgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VD
b25zdHJ1Y3RvCiAjaWYgRU5BQkxFKENvbmRpdGlvbjIyKSB8fCBFTkFCTEUoQ29uZGl0aW9uMjMp
CiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JJbXBsZW1l
bnRzU3RhdGljQXR0clNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlLCBUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlKQogeworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5V
U0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElE
TERPTVN0cmluZz4oc3RhdGUsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIGZhbHNlKTsKQEAgLTU2MSw2ICs1NjIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJ
bnRlcmZhY2VJbXBsZW1lbnRzCiAjaWYgRU5BQkxFKENvbmRpdGlvbjIyKSB8fCBFTkFCTEUoQ29u
ZGl0aW9uMjMpCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0SW50ZXJmYWNlSW1wbGVtZW50
c1N0cjJTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0SW50ZXJmYWNlJiB0aGlzT2JqZWN0
LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogeworICAgIFVOVVNFRF9Q
QVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGlt
cGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVy
dDxJRExET01TdHJpbmc+KHN0YXRlLCB2YWx1ZSk7CkBAIC01OTYsNiArNTk4LDcgQEAgRW5jb2Rl
ZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlSW1wbGVtZW50cwogI2lmIEVOQUJMRShDb25kaXRpb24y
MikgfHwgRU5BQkxFKENvbmRpdGlvbjIzKQogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdElu
dGVyZmFjZUltcGxlbWVudHNTdHIzU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEludGVy
ZmFjZSYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkK
IHsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KTsKICAgICB0aGlzT2JqZWN0LnNldEltcGxlbWVudHNTdHIzKHN0YXRlLCB2YWx1ZSk7CiAgICAg
cmV0dXJuIHRydWU7CkBAIC02MjgsNiArNjMxLDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0SW50
ZXJmYWNlSW1wbGVtZW50cwogI2lmIEVOQUJMRShDb25kaXRpb24yMikgfHwgRU5BQkxFKENvbmRp
dGlvbjIzKQogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEludGVyZmFjZUltcGxlbWVudHNO
b2RlU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEludGVyZmFjZSYgdGhpc09iamVjdCwg
SlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKKyAgICBVTlVTRURfUEFS
QU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBs
ID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8
SURMSW50ZXJmYWNlPE5vZGU+PihzdGF0ZSwgdmFsdWUsIFtdKEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0F0dHJpYnV0ZVR5cGVFcnJvcihzdGF0
ZSwgc2NvcGUsICJUZXN0SW50ZXJmYWNlIiwgImltcGxlbWVudHNOb2RlIiwgIk5vZGUiKTsgfSk7
CkBAIC02ODAsNiArNjg0LDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlQ29uc3Ry
dWN0bwogI2lmIEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENvbmRpdGlvbjEyKQogc3Rh
dGljIGlubGluZSBib29sIHNldEpTVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yU3VwcGxlbWVudGFs
U3RhdGljQXR0clNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKQogeworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERP
TVN0cmluZz4oc3RhdGUsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2Nv
cGUsIGZhbHNlKTsKQEAgLTczMyw2ICs3MzgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbnRl
cmZhY2VTdXBwbGVtZW50CiAjaWYgRU5BQkxFKENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0
aW9uMTIpCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFs
U3RyMlNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RJbnRlcmZhY2UmIHRoaXNPYmplY3Qs
IEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CisgICAgVU5VU0VEX1BB
UkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1w
bCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0
PElETERPTVN0cmluZz4oc3RhdGUsIHZhbHVlKTsKQEAgLTc2OCw2ICs3NzQsNyBAQCBFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50CiAjaWYgRU5BQkxFKENvbmRpdGlvbjEx
KSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIpCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0SW50
ZXJmYWNlU3VwcGxlbWVudGFsU3RyM1NldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RJbnRl
cmZhY2UmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUp
CiB7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7CiAgICAgdGhpc09iamVjdC5zZXRTdXBwbGVtZW50YWxTdHIzKHN0YXRlLCB2YWx1ZSk7CiAg
ICAgcmV0dXJuIHRydWU7CkBAIC04MDAsNiArODA3LDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0
SW50ZXJmYWNlU3VwcGxlbWVudAogI2lmIEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENv
bmRpdGlvbjEyKQogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEludGVyZmFjZVN1cHBsZW1l
bnRhbE5vZGVTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0SW50ZXJmYWNlJiB0aGlzT2Jq
ZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogeworICAgIFVOVVNF
RF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8m
IGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29u
dmVydDxJRExJbnRlcmZhY2U8Tm9kZT4+KHN0YXRlLCB2YWx1ZSwgW10oSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXR0cmlidXRlVHlwZUVycm9y
KHN0YXRlLCBzY29wZSwgIlRlc3RJbnRlcmZhY2UiLCAic3VwcGxlbWVudGFsTm9kZSIsICJOb2Rl
Iik7IH0pOwpAQCAtODM3LDYgKzg0NSw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFj
ZVJlZmxlY3RBdHQKICNpZiBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVOQUJMRShDb25kaXRpb24x
MikKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VSZWZsZWN0QXR0cmlidXRl
U2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEludGVyZmFjZSYgdGhpc09iamVjdCwgSlNW
YWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKKyAgICBVTlVTRURfUEFSQU0o
c3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0g
dGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURM
RE9NU3RyaW5nPihzdGF0ZSwgdmFsdWUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmUuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlTGVhZGlu
Z1VuZGVyc2NvcmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MSw3ICs4MSw3IEBAIHRlbXBsYXRl
PD4gSlNWYWx1ZSBKU1Rlc3RJbnRlcmZhY2VMZWFkaW4KIHRlbXBsYXRlPD4gdm9pZCBKU1Rlc3RJ
bnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZUNvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGll
cyhWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCiB7CiAgICAgcHV0RGly
ZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdEludGVyZmFjZUxlYWRp
bmdVbmRlcnNjb3JlOjpwcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCksIEpTQzo6UHJvcGVydHlB
dHRyaWJ1dGU6OkRvbnREZWxldGUgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8
IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKLSAgICBwdXREaXJlY3Qodm0sIHZt
LnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZygmdm0sIFN0cmluZygiVGVz
dEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlIl9zKSksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6
OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOworICAgIHB1dERp
cmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKHZtLCBT
dHJpbmcoIlRlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZSJfcykpLCBKU0M6OlByb3BlcnR5
QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsK
ICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMCks
IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0
ZTo6RG9udEVudW0pOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0SXRlcmFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJdGVyYWJsZS5jcHAJKHJldmlzaW9uIDI0
OTEyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJ
dGVyYWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg5LDcgKzg5LDcgQEAgdGVtcGxhdGU8PiBK
U1ZhbHVlIEpTVGVzdEl0ZXJhYmxlQ29uc3RydQogdGVtcGxhdGU8PiB2b2lkIEpTVGVzdEl0ZXJh
YmxlQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKFZNJiB2bSwgSlNET01HbG9iYWxP
YmplY3QmIGdsb2JhbE9iamVjdCkKIHsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFt
ZXMtPnByb3RvdHlwZSwgSlNUZXN0SXRlcmFibGU6OnByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0
KSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IEpTQzo6UHJvcGVydHlBdHRy
aWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwotICAg
IHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5n
KCZ2bSwgU3RyaW5nKCJUZXN0SXRlcmFibGUiX3MpKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6
UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CisgICAgcHV0RGly
ZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcodm0sIFN0
cmluZygiVGVzdEl0ZXJhYmxlIl9zKSksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5
IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwogICAgIHB1dERpcmVjdCh2bSwg
dm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigwKSwgSlNDOjpQcm9wZXJ0eUF0dHJp
YnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CiB9CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RKU0J1
aWx0aW5Db25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yLmNwcAkocmV2aXNp
b24gMjQ5MTI4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODUsNyArODUs
NyBAQCB0ZW1wbGF0ZTw+IEpTVmFsdWUgSlNUZXN0SlNCdWlsdGluQ29uc3RyCiB0ZW1wbGF0ZTw+
IHZvaWQgSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVBy
b3BlcnRpZXMoVk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQogewogICAg
IHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3RKU0J1aWx0
aW5Db25zdHJ1Y3Rvcjo6cHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QpLCBKU0M6OlByb3BlcnR5
QXR0cmlidXRlOjpEb250RGVsZXRlIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkg
fCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7Ci0gICAgcHV0RGlyZWN0KHZtLCB2
bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcoJnZtLCBTdHJpbmcoIlRl
c3RKU0J1aWx0aW5Db25zdHJ1Y3RvciJfcykpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFk
T25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKKyAgICBwdXREaXJlY3Qo
dm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZyh2bSwgU3RyaW5n
KCJUZXN0SlNCdWlsdGluQ29uc3RydWN0b3IiX3MpKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6
UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CiAgICAgcHV0RGly
ZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDApLCBKU0M6OlByb3Bl
cnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVt
KTsKIH0KIApAQCAtMjA4LDYgKzIwOCw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEpTQnVpbHRp
bkNvbnN0cnVjdG8KIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEpTQnVpbHRpbkNvbnN0
cnVjdG9yVGVzdEF0dHJpYnV0ZVJXQ3VzdG9tU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVz
dEpTQnVpbHRpbkNvbnN0cnVjdG9yJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKQogeworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOwogICAgIHRoaXNPYmplY3Quc2V0VGVzdEF0dHJpYnV0ZVJXQ3Vz
dG9tKHN0YXRlLCB2YWx1ZSk7CiAgICAgcmV0dXJuIHRydWU7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TWVkaWFRdWVyeUxp
c3RMaXN0ZW5lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg2LDcgKzg2LDcgQEAgdGVtcGxhdGU8
PiBKU1ZhbHVlIEpTVGVzdE1lZGlhUXVlcnlMaXN0TAogdGVtcGxhdGU8PiB2b2lkIEpTVGVzdE1l
ZGlhUXVlcnlMaXN0TGlzdGVuZXJDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMoVk0m
IHZtLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQogewogICAgIHB1dERpcmVjdCh2
bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3Rl
bmVyOjpwcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6
OkRvbnREZWxldGUgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJv
cGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKLSAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5
TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZygmdm0sIFN0cmluZygiVGVzdE1lZGlhUXVl
cnlMaXN0TGlzdGVuZXIiX3MpKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBK
U0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5w
cm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcodm0sIFN0cmluZygiVGVzdE1l
ZGlhUXVlcnlMaXN0TGlzdGVuZXIiX3MpKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9u
bHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CiAgICAgcHV0RGlyZWN0KHZt
LCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDApLCBKU0M6OlByb3BlcnR5QXR0
cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKIH0K
IApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5h
bWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNl
dHRlck5vSWRlbnRpZmllci5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lk
ZW50aWZpZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MSw3ICs4MSw3IEBAIHRlbXBsYXRlPD4g
SlNWYWx1ZSBKU1Rlc3ROYW1lZEFuZEluZGV4ZWQKIHRlbXBsYXRlPD4gdm9pZCBKU1Rlc3ROYW1l
ZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXJDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3Bl
cnRpZXMoVk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQogewogICAgIHB1
dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3ROYW1lZEFuZElu
ZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXI6OnByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KSwgSlND
OjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6
OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwotICAgIHB1dERp
cmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKCZ2bSwg
U3RyaW5nKCJUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyIl9zKSksIEpTQzo6
UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9u
dEVudW0pOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250
cml2aWFsU3RyaW5nKHZtLCBTdHJpbmcoIlRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50
aWZpZXIiX3MpKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3Bl
cnR5QXR0cmlidXRlOjpEb250RW51bSk7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5h
bWVzLT5sZW5ndGgsIGpzTnVtYmVyKDApLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25s
eSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKIH0KIApAQCAtMTY2LDYgKzE2
Niw3IEBAIGJvb2wgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGkKIAogYm9vbCBK
U1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXI6OmdldE93blByb3BlcnR5U2xv
dEJ5SW5kZXgoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBzdGF0ZSwgdW5zaWduZWQgaW5k
ZXgsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKKyAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAg
ICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5v
SWRlbnRpZmllcio+KG9iamVjdCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlz
T2JqZWN0LCBpbmZvKCkpOwogICAgIGlmIChMSUtFTFkoaW5kZXggPD0gTUFYX0FSUkFZX0lOREVY
KSkgewpAQCAtMTc2LDcgKzE3Nyw3IEBAIGJvb2wgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVy
Tm9JZGVudGkKICAgICAgICAgfQogICAgICAgICByZXR1cm4gSlNPYmplY3Q6OmdldE93blByb3Bl
cnR5U2xvdEJ5SW5kZXgob2JqZWN0LCBzdGF0ZSwgaW5kZXgsIHNsb3QpOwogICAgIH0KLSAgICBh
dXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb20oc3RhdGUsIGluZGV4KTsKKyAgICBh
dXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb20odm0sIGluZGV4KTsKICAgICB1c2lu
ZyBHZXR0ZXJJRExUeXBlID0gSURMRE9NU3RyaW5nOwogICAgIGF1dG8gZ2V0dGVyRnVuY3RvciA9
IFtdIChhdXRvJiB0aGlzT2JqZWN0LCBhdXRvIHByb3BlcnR5TmFtZSkgLT4gT3B0aW9uYWw8dHlw
ZW5hbWUgR2V0dGVySURMVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlPiB7CiAgICAgICAgIGF1dG8g
cmVzdWx0ID0gdGhpc09iamVjdC53cmFwcGVkKCkubmFtZWRJdGVtKHByb3BlcnR5TmFtZVRvQXRv
bVN0cmluZyhwcm9wZXJ0eU5hbWUpKTsKQEAgLTE5NCwxMiArMTk1LDEzIEBAIGJvb2wgSlNUZXN0
TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGkKIAogdm9pZCBKU1Rlc3ROYW1lZEFuZEluZGV4
ZWRTZXR0ZXJOb0lkZW50aWZpZXI6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVj
dCwgRXhlY1N0YXRlKiBzdGF0ZSwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVu
dW1lcmF0aW9uTW9kZSBtb2RlKQogeworICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1
dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVu
dGlmaWVyKj4ob2JqZWN0KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKG9iamVjdCwg
aW5mbygpKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwLCBjb3VudCA9IHRoaXNPYmplY3QtPndy
YXBwZWQoKS5sZW5ndGgoKTsgaSA8IGNvdW50OyArK2kpCi0gICAgICAgIHByb3BlcnR5TmFtZXMu
YWRkKElkZW50aWZpZXI6OmZyb20oc3RhdGUsIGkpKTsKKyAgICAgICAgcHJvcGVydHlOYW1lcy5h
ZGQoSWRlbnRpZmllcjo6ZnJvbSh2bSwgaSkpOwogICAgIGZvciAoYXV0byYgcHJvcGVydHlOYW1l
IDogdGhpc09iamVjdC0+d3JhcHBlZCgpLnN1cHBvcnRlZFByb3BlcnR5TmFtZXMoKSkKLSAgICAg
ICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhzdGF0ZSwgcHJvcGVy
dHlOYW1lKSk7CisgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb21TdHJp
bmcodm0sIHByb3BlcnR5TmFtZSkpOwogICAgIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVz
KG9iamVjdCwgc3RhdGUsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwogfQogCkBAIC0yMzMsNiArMjM1
LDcgQEAgYm9vbCBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aQogCiBib29sIEpT
VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllcjo6cHV0QnlJbmRleChKU0NlbGwq
IGNlbGwsIEV4ZWNTdGF0ZSogc3RhdGUsIHVuc2lnbmVkIGluZGV4LCBKU1ZhbHVlIHZhbHVlLCBi
b29sIHNob3VsZFRocm93KQogeworICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8q
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlm
aWVyKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBp
bmZvKCkpOwogCkBAIC0yNDQsOSArMjQ3LDkgQEAgYm9vbCBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRT
ZXR0ZXJOb0lkZW50aQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBhdXRvIHBy
b3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb20oc3RhdGUsIGluZGV4KTsKKyAgICBhdXRvIHBy
b3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb20odm0sIGluZGV4KTsKICAgICBQcm9wZXJ0eVNs
b3Qgc2xvdCB7IHRoaXNPYmplY3QsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpW
TUlucXVpcnkgfTsKLSAgICBKU1ZhbHVlIHByb3RvdHlwZSA9IHRoaXNPYmplY3QtPmdldFByb3Rv
dHlwZURpcmVjdChzdGF0ZS0+dm0oKSk7CisgICAgSlNWYWx1ZSBwcm90b3R5cGUgPSB0aGlzT2Jq
ZWN0LT5nZXRQcm90b3R5cGVEaXJlY3Qodm0pOwogICAgIGlmICghKHByb3RvdHlwZS5pc09iamVj
dCgpICYmIGFzT2JqZWN0KHByb3RvdHlwZSktPmdldFByb3BlcnR5U2xvdChzdGF0ZSwgcHJvcGVy
dHlOYW1lLCBzbG90KSkpIHsKICAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRShzdGF0ZS0+dm0oKSk7CiAgICAgICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0
PElETERPTVN0cmluZz4oKnN0YXRlLCB2YWx1ZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdF
eGNlcHRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5j
cHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTgxLDcgKzgxLDcgQEAgdGVtcGxhdGU8PiBKU1ZhbHVlIEpTVGVz
dE5hbWVkQW5kSW5kZXhlZAogdGVtcGxhdGU8PiB2b2lkIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNl
dHRlclRocm93aW5nRXhjZXB0aW9uQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKFZN
JiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKIHsKICAgICBwdXREaXJlY3Qo
dm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0
dGVyVGhyb3dpbmdFeGNlcHRpb246OnByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KSwgSlNDOjpQ
cm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJl
YWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwotICAgIHB1dERpcmVj
dCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKCZ2bSwgU3Ry
aW5nKCJUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24iX3MpKSwgSlND
OjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpE
b250RW51bSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05v
bnRyaXZpYWxTdHJpbmcodm0sIFN0cmluZygiVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93
aW5nRXhjZXB0aW9uIl9zKSksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlND
OjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJv
cGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigwKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6
UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CiB9CiAKQEAgLTE2
Niw2ICsxNjYsNyBAQCBib29sIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nCiAK
IGJvb2wgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246OmdldE93
blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBzdGF0ZSwg
dW5zaWduZWQgaW5kZXgsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKKyAgICBWTSYgdm0gPSBzdGF0
ZS0+dm0oKTsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkQW5kSW5k
ZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uKj4ob2JqZWN0KTsKICAgICBBU1NFUlRfR0NfT0JK
RUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgaWYgKExJS0VMWShpbmRleCA8
PSBNQVhfQVJSQVlfSU5ERVgpKSB7CkBAIC0xNzYsNyArMTc3LDcgQEAgYm9vbCBKU1Rlc3ROYW1l
ZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBKU09i
amVjdDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChvYmplY3QsIHN0YXRlLCBpbmRleCwgc2xv
dCk7CiAgICAgfQotICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbShzdGF0
ZSwgaW5kZXgpOworICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbSh2bSwg
aW5kZXgpOwogICAgIHVzaW5nIEdldHRlcklETFR5cGUgPSBJRExET01TdHJpbmc7CiAgICAgYXV0
byBnZXR0ZXJGdW5jdG9yID0gW10gKGF1dG8mIHRoaXNPYmplY3QsIGF1dG8gcHJvcGVydHlOYW1l
KSAtPiBPcHRpb25hbDx0eXBlbmFtZSBHZXR0ZXJJRExUeXBlOjpJbXBsZW1lbnRhdGlvblR5cGU+
IHsKICAgICAgICAgYXV0byByZXN1bHQgPSB0aGlzT2JqZWN0LndyYXBwZWQoKS5uYW1lZEl0ZW0o
cHJvcGVydHlOYW1lVG9BdG9tU3RyaW5nKHByb3BlcnR5TmFtZSkpOwpAQCAtMTk0LDEyICsxOTUs
MTMgQEAgYm9vbCBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZwogCiB2b2lkIEpT
VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uOjpnZXRPd25Qcm9wZXJ0
eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogc3RhdGUsIFByb3BlcnR5TmFtZUFy
cmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKKyAgICBWTSYgdm0g
PSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVk
QW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uKj4ob2JqZWN0KTsKICAgICBBU1NFUlRf
R0NfT0JKRUNUX0lOSEVSSVRTKG9iamVjdCwgaW5mbygpKTsKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwLCBjb3VudCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKS5sZW5ndGgoKTsgaSA8IGNvdW50OyAr
K2kpCi0gICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb20oc3RhdGUsIGkp
KTsKKyAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbSh2bSwgaSkpOwog
ICAgIGZvciAoYXV0byYgcHJvcGVydHlOYW1lIDogdGhpc09iamVjdC0+d3JhcHBlZCgpLnN1cHBv
cnRlZFByb3BlcnR5TmFtZXMoKSkKLSAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmll
cjo6ZnJvbVN0cmluZyhzdGF0ZSwgcHJvcGVydHlOYW1lKSk7CisgICAgICAgIHByb3BlcnR5TmFt
ZXMuYWRkKElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHByb3BlcnR5TmFtZSkpOwogICAgIEpT
T2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgc3RhdGUsIHByb3BlcnR5TmFtZXMs
IG1vZGUpOwogfQogCkBAIC0yMzMsNiArMjM1LDcgQEAgYm9vbCBKU1Rlc3ROYW1lZEFuZEluZGV4
ZWRTZXR0ZXJUaHJvd2luZwogCiBib29sIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93
aW5nRXhjZXB0aW9uOjpwdXRCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBzdGF0ZSwg
dW5zaWduZWQgaW5kZXgsIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCiB7CisgICAg
Vk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rl
c3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbio+KGNlbGwpOwogICAgIEFT
U0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKIApAQCAtMjQ0LDkg
KzI0Nyw5IEBAIGJvb2wgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmcKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlm
aWVyOjpmcm9tKHN0YXRlLCBpbmRleCk7CisgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlm
aWVyOjpmcm9tKHZtLCBpbmRleCk7CiAgICAgUHJvcGVydHlTbG90IHNsb3QgeyB0aGlzT2JqZWN0
LCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6Vk1JbnF1aXJ5IH07Ci0gICAgSlNW
YWx1ZSBwcm90b3R5cGUgPSB0aGlzT2JqZWN0LT5nZXRQcm90b3R5cGVEaXJlY3Qoc3RhdGUtPnZt
KCkpOworICAgIEpTVmFsdWUgcHJvdG90eXBlID0gdGhpc09iamVjdC0+Z2V0UHJvdG90eXBlRGly
ZWN0KHZtKTsKICAgICBpZiAoIShwcm90b3R5cGUuaXNPYmplY3QoKSAmJiBhc09iamVjdChwcm90
b3R5cGUpLT5nZXRQcm9wZXJ0eVNsb3Qoc3RhdGUsIHByb3BlcnR5TmFtZSwgc2xvdCkpKSB7CiAg
ICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoc3RhdGUtPnZtKCkp
OwogICAgICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KCpzdGF0
ZSwgdmFsdWUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRB
bmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRl
eGVkU2V0dGVyV2l0aElkZW50aWZpZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OCw3ICs4OCw3
IEBAIHRlbXBsYXRlPD4gSlNWYWx1ZSBKU1Rlc3ROYW1lZEFuZEluZGV4ZWQKIHRlbXBsYXRlPD4g
dm9pZCBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllckNvbnN0cnVjdG9y
Ojppbml0aWFsaXplUHJvcGVydGllcyhWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxP
YmplY3QpCiB7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUs
IEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyOjpwcm90b3R5cGUodm0s
IGdsb2JhbE9iamVjdCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUgfCBKU0M6
OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRv
bnRFbnVtKTsKLSAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9u
dHJpdmlhbFN0cmluZygmdm0sIFN0cmluZygiVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJ
ZGVudGlmaWVyIl9zKSksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQ
cm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVy
dHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKHZtLCBTdHJpbmcoIlRlc3ROYW1lZEFu
ZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllciJfcykpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRl
OjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKICAgICBwdXRE
aXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMCksIEpTQzo6UHJv
cGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVu
dW0pOwogfQogCkBAIC0xNzUsNiArMTc1LDcgQEAgYm9vbCBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRT
ZXR0ZXJXaXRoSWRlbgogCiBib29sIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVu
dGlmaWVyOjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNT
dGF0ZSogc3RhdGUsIHVuc2lnbmVkIGluZGV4LCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CisgICAg
Vk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rl
c3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcio+KG9iamVjdCk7CiAgICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogICAgIGlmIChMSUtF
TFkoaW5kZXggPD0gTUFYX0FSUkFZX0lOREVYKSkgewpAQCAtMTg1LDcgKzE4Niw3IEBAIGJvb2wg
SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW4KICAgICAgICAgfQogICAgICAgICBy
ZXR1cm4gSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgob2JqZWN0LCBzdGF0ZSwg
aW5kZXgsIHNsb3QpOwogICAgIH0KLSAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6
OmZyb20oc3RhdGUsIGluZGV4KTsKKyAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6
OmZyb20odm0sIGluZGV4KTsKICAgICB1c2luZyBHZXR0ZXJJRExUeXBlID0gSURMRE9NU3RyaW5n
OwogICAgIGF1dG8gZ2V0dGVyRnVuY3RvciA9IFtdIChhdXRvJiB0aGlzT2JqZWN0LCBhdXRvIHBy
b3BlcnR5TmFtZSkgLT4gT3B0aW9uYWw8dHlwZW5hbWUgR2V0dGVySURMVHlwZTo6SW1wbGVtZW50
YXRpb25UeXBlPiB7CiAgICAgICAgIGF1dG8gcmVzdWx0ID0gdGhpc09iamVjdC53cmFwcGVkKCku
bmFtZWRJdGVtKHByb3BlcnR5TmFtZVRvQXRvbVN0cmluZyhwcm9wZXJ0eU5hbWUpKTsKQEAgLTIw
MywxMiArMjA0LDEzIEBAIGJvb2wgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW4K
IAogdm9pZCBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6Z2V0T3du
UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIHN0YXRlLCBQcm9wZXJ0
eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7CisgICAg
Vk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rl
c3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcio+KG9iamVjdCk7CiAgICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUyhvYmplY3QsIGluZm8oKSk7CiAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMCwgY291bnQgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCkubGVuZ3RoKCk7IGkgPCBjb3Vu
dDsgKytpKQotICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9tKHN0YXRl
LCBpKSk7CisgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb20odm0sIGkp
KTsKICAgICBmb3IgKGF1dG8mIHByb3BlcnR5TmFtZSA6IHRoaXNPYmplY3QtPndyYXBwZWQoKS5z
dXBwb3J0ZWRQcm9wZXJ0eU5hbWVzKCkpCi0gICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50
aWZpZXI6OmZyb21TdHJpbmcoc3RhdGUsIHByb3BlcnR5TmFtZSkpOworICAgICAgICBwcm9wZXJ0
eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBwcm9wZXJ0eU5hbWUpKTsKICAg
ICBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIHN0YXRlLCBwcm9wZXJ0eU5h
bWVzLCBtb2RlKTsKIH0KIApAQCAtMjQyLDYgKzI0NCw3IEBAIGJvb2wgSlNUZXN0TmFtZWRBbmRJ
bmRleGVkU2V0dGVyV2l0aElkZW4KIAogYm9vbCBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJX
aXRoSWRlbnRpZmllcjo6cHV0QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogc3RhdGUs
IHVuc2lnbmVkIGluZGV4LCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93KQogeworICAg
IFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNU
ZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIqPihjZWxsKTsKICAgICBBU1NF
UlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAKQEAgLTI1Myw5ICsy
NTYsOSBAQCBib29sIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVuCiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmll
cjo6ZnJvbShzdGF0ZSwgaW5kZXgpOworICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmll
cjo6ZnJvbSh2bSwgaW5kZXgpOwogICAgIFByb3BlcnR5U2xvdCBzbG90IHsgdGhpc09iamVjdCwg
UHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6OlZNSW5xdWlyeSB9OwotICAgIEpTVmFs
dWUgcHJvdG90eXBlID0gdGhpc09iamVjdC0+Z2V0UHJvdG90eXBlRGlyZWN0KHN0YXRlLT52bSgp
KTsKKyAgICBKU1ZhbHVlIHByb3RvdHlwZSA9IHRoaXNPYmplY3QtPmdldFByb3RvdHlwZURpcmVj
dCh2bSk7CiAgICAgaWYgKCEocHJvdG90eXBlLmlzT2JqZWN0KCkgJiYgYXNPYmplY3QocHJvdG90
eXBlKS0+Z2V0UHJvcGVydHlTbG90KHN0YXRlLCBwcm9wZXJ0eU5hbWUsIHNsb3QpKSkgewogICAg
ICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHN0YXRlLT52bSgpKTsK
ICAgICAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqc3RhdGUs
IHZhbHVlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3ROYW1lZENvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvci5jcHAJKHJldmlz
aW9uIDI0OTEyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3ROYW1lZENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODIsNyArODIsNyBA
QCB0ZW1wbGF0ZTw+IEpTVmFsdWUgSlNUZXN0TmFtZWRDb25zdHJ1Y3RvCiB0ZW1wbGF0ZTw+IHZv
aWQgSlNUZXN0TmFtZWRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGll
cyhWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCiB7CiAgICAgcHV0RGly
ZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdE5hbWVkQ29uc3RydWN0
b3I6OnByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6
RG9udERlbGV0ZSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9w
ZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwotICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlO
YW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKCZ2bSwgU3RyaW5nKCJUZXN0TmFtZWRDb25z
dHJ1Y3RvciJfcykpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJv
cGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5
TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZyh2bSwgU3RyaW5nKCJUZXN0TmFtZWRDb25z
dHJ1Y3RvciJfcykpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJv
cGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5
TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRP
bmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwogfQogCkBAIC0xMTYsNyAr
MTE2LDcgQEAgdGVtcGxhdGU8PiBKU1ZhbHVlIEpTVGVzdE5hbWVkQ29uc3RydWN0bwogdGVtcGxh
dGU8PiB2b2lkIEpTVGVzdE5hbWVkQ29uc3RydWN0b3JOYW1lZENvbnN0cnVjdG9yOjppbml0aWFs
aXplUHJvcGVydGllcyhWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCiB7
CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdE5h
bWVkQ29uc3RydWN0b3I6OnByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KSwgSlNDOjpQcm9wZXJ0
eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5
IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwotICAgIHB1dERpcmVjdCh2bSwg
dm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKCZ2bSwgU3RyaW5nKCJB
dWRpbyJfcykpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVy
dHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFt
ZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZyh2bSwgU3RyaW5nKCJBdWRpbyJfcykpLCBKU0M6
OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRv
bnRFbnVtKTsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNO
dW1iZXIoMCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0
eUF0dHJpYnV0ZTo6RG9udEVudW0pOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
TmFtZWREZWxldGVyTm9JZGVudGlmaWVyLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkRGVsZXRlck5vSWRl
bnRpZmllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwLDcgKzgwLDcgQEAgdGVtcGxhdGU8PiBK
U1ZhbHVlIEpTVGVzdE5hbWVkRGVsZXRlck5vSQogdGVtcGxhdGU8PiB2b2lkIEpTVGVzdE5hbWVk
RGVsZXRlck5vSWRlbnRpZmllckNvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGllcyhWTSYg
dm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCiB7CiAgICAgcHV0RGlyZWN0KHZt
LCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdE5hbWVkRGVsZXRlck5vSWRlbnRp
Zmllcjo6cHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRl
OjpEb250RGVsZXRlIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlBy
b3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7Ci0gICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0
eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcoJnZtLCBTdHJpbmcoIlRlc3ROYW1lZERl
bGV0ZXJOb0lkZW50aWZpZXIiX3MpKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkg
fCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CisgICAgcHV0RGlyZWN0KHZtLCB2
bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcodm0sIFN0cmluZygiVGVz
dE5hbWVkRGVsZXRlck5vSWRlbnRpZmllciJfcykpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpS
ZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKICAgICBwdXREaXJl
Y3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMCksIEpTQzo6UHJvcGVy
dHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0p
OwogfQogCkBAIC0xNTcsOSArMTU3LDEwIEBAIGJvb2wgSlNUZXN0TmFtZWREZWxldGVyTm9JZGVu
dGlmaWVyOjpnZXQKIAogYm9vbCBKU1Rlc3ROYW1lZERlbGV0ZXJOb0lkZW50aWZpZXI6OmdldE93
blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBzdGF0ZSwg
dW5zaWduZWQgaW5kZXgsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKKyAgICBWTSYgdm0gPSBzdGF0
ZS0+dm0oKTsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkRGVsZXRl
ck5vSWRlbnRpZmllcio+KG9iamVjdCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0
aGlzT2JqZWN0LCBpbmZvKCkpOwotICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6
ZnJvbShzdGF0ZSwgaW5kZXgpOworICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6
ZnJvbSh2bSwgaW5kZXgpOwogICAgIHVzaW5nIEdldHRlcklETFR5cGUgPSBJRExET01TdHJpbmc7
CiAgICAgYXV0byBnZXR0ZXJGdW5jdG9yID0gW10gKGF1dG8mIHRoaXNPYmplY3QsIGF1dG8gcHJv
cGVydHlOYW1lKSAtPiBPcHRpb25hbDx0eXBlbmFtZSBHZXR0ZXJJRExUeXBlOjpJbXBsZW1lbnRh
dGlvblR5cGU+IHsKICAgICAgICAgYXV0byByZXN1bHQgPSB0aGlzT2JqZWN0LndyYXBwZWQoKS5u
YW1lZEl0ZW0ocHJvcGVydHlOYW1lVG9BdG9tU3RyaW5nKHByb3BlcnR5TmFtZSkpOwpAQCAtMTc3
LDEwICsxNzgsMTEgQEAgYm9vbCBKU1Rlc3ROYW1lZERlbGV0ZXJOb0lkZW50aWZpZXI6OmdldAog
CiB2b2lkIEpTVGVzdE5hbWVkRGVsZXRlck5vSWRlbnRpZmllcjo6Z2V0T3duUHJvcGVydHlOYW1l
cyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIHN0YXRlLCBQcm9wZXJ0eU5hbWVBcnJheSYg
cHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7CisgICAgVk0mIHZtID0gc3Rh
dGUtPnZtKCk7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZERlbGV0
ZXJOb0lkZW50aWZpZXIqPihvYmplY3QpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMo
b2JqZWN0LCBpbmZvKCkpOwogICAgIGZvciAoYXV0byYgcHJvcGVydHlOYW1lIDogdGhpc09iamVj
dC0+d3JhcHBlZCgpLnN1cHBvcnRlZFByb3BlcnR5TmFtZXMoKSkKLSAgICAgICAgcHJvcGVydHlO
YW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhzdGF0ZSwgcHJvcGVydHlOYW1lKSk7Cisg
ICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHByb3Bl
cnR5TmFtZSkpOwogICAgIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgc3Rh
dGUsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwogfQogCkBAIC0xOTgsNyArMjAwLDggQEAgYm9vbCBK
U1Rlc3ROYW1lZERlbGV0ZXJOb0lkZW50aWZpZXI6OmRlbAogewogICAgIGF1dG8mIHRoaXNPYmpl
Y3QgPSAqanNDYXN0PEpTVGVzdE5hbWVkRGVsZXRlck5vSWRlbnRpZmllcio+KGNlbGwpOwogICAg
IGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBhdXRvIHByb3BlcnR5TmFt
ZSA9IElkZW50aWZpZXI6OmZyb20oc3RhdGUsIGluZGV4KTsKKyAgICBWTSYgdm0gPSBzdGF0ZS0+
dm0oKTsKKyAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb20odm0sIGluZGV4
KTsKICAgICBpZiAoaXNWaXNpYmxlTmFtZWRQcm9wZXJ0eTxPdmVycmlkZUJ1aWx0aW5zOjpObz4o
KnN0YXRlLCB0aGlzT2JqZWN0LCBwcm9wZXJ0eU5hbWUpKSB7CiAgICAgICAgIHJldHVybiBpbXBs
LmRlbGV0ZU5hbWVkUHJvcGVydHkocHJvcGVydHlOYW1lVG9TdHJpbmcocHJvcGVydHlOYW1lKSk7
CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE5hbWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxldGVyVGhy
b3dpbmdFeGNlcHRpb24uY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxldGVyVGhyb3dpbmdFeGNlcHRp
b24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MCw3ICs4MCw3IEBAIHRlbXBsYXRlPD4gSlNWYWx1
ZSBKU1Rlc3ROYW1lZERlbGV0ZXJUaHIKIHRlbXBsYXRlPD4gdm9pZCBKU1Rlc3ROYW1lZERlbGV0
ZXJUaHJvd2luZ0V4Y2VwdGlvbkNvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGllcyhWTSYg
dm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCiB7CiAgICAgcHV0RGlyZWN0KHZt
LCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdE5hbWVkRGVsZXRlclRocm93aW5n
RXhjZXB0aW9uOjpwcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCksIEpTQzo6UHJvcGVydHlBdHRy
aWJ1dGU6OkRvbnREZWxldGUgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpT
Qzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKLSAgICBwdXREaXJlY3Qodm0sIHZtLnBy
b3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZygmdm0sIFN0cmluZygiVGVzdE5h
bWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9uIl9zKSksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6
OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOworICAgIHB1dERp
cmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKHZtLCBT
dHJpbmcoIlRlc3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbiJfcykpLCBKU0M6OlByb3Bl
cnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVt
KTsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIo
MCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJp
YnV0ZTo6RG9udEVudW0pOwogfQogCkBAIC0xNTcsOSArMTU3LDEwIEBAIGJvb2wgSlNUZXN0TmFt
ZWREZWxldGVyVGhyb3dpbmdFeGNlcHRpb24KIAogYm9vbCBKU1Rlc3ROYW1lZERlbGV0ZXJUaHJv
d2luZ0V4Y2VwdGlvbjo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU09iamVjdCogb2JqZWN0
LCBFeGVjU3RhdGUqIHN0YXRlLCB1bnNpZ25lZCBpbmRleCwgUHJvcGVydHlTbG90JiBzbG90KQog
eworICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8SlNUZXN0TmFtZWREZWxldGVyVGhyb3dpbmdFeGNlcHRpb24qPihvYmplY3QpOwogICAgIEFT
U0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKLSAgICBhdXRvIHBy
b3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb20oc3RhdGUsIGluZGV4KTsKKyAgICBhdXRvIHBy
b3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb20odm0sIGluZGV4KTsKICAgICB1c2luZyBHZXR0
ZXJJRExUeXBlID0gSURMRE9NU3RyaW5nOwogICAgIGF1dG8gZ2V0dGVyRnVuY3RvciA9IFtdIChh
dXRvJiB0aGlzT2JqZWN0LCBhdXRvIHByb3BlcnR5TmFtZSkgLT4gT3B0aW9uYWw8dHlwZW5hbWUg
R2V0dGVySURMVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlPiB7CiAgICAgICAgIGF1dG8gcmVzdWx0
ID0gdGhpc09iamVjdC53cmFwcGVkKCkubmFtZWRJdGVtKHByb3BlcnR5TmFtZVRvQXRvbVN0cmlu
Zyhwcm9wZXJ0eU5hbWUpKTsKQEAgLTE3NywxMCArMTc4LDExIEBAIGJvb2wgSlNUZXN0TmFtZWRE
ZWxldGVyVGhyb3dpbmdFeGNlcHRpb24KIAogdm9pZCBKU1Rlc3ROYW1lZERlbGV0ZXJUaHJvd2lu
Z0V4Y2VwdGlvbjo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3Rh
dGUqIHN0YXRlLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25N
b2RlIG1vZGUpCiB7CisgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byogdGhpc09i
amVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbio+KG9iamVj
dCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhvYmplY3QsIGluZm8oKSk7CiAgICAg
Zm9yIChhdXRvJiBwcm9wZXJ0eU5hbWUgOiB0aGlzT2JqZWN0LT53cmFwcGVkKCkuc3VwcG9ydGVk
UHJvcGVydHlOYW1lcygpKQotICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHN0YXRlLCBwcm9wZXJ0eU5hbWUpKTsKKyAgICAgICAgcHJvcGVydHlOYW1lcy5h
ZGQoSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcHJvcGVydHlOYW1lKSk7CiAgICAgSlNPYmpl
Y3Q6OmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBzdGF0ZSwgcHJvcGVydHlOYW1lcywgbW9k
ZSk7CiB9CiAKQEAgLTIwNSw3ICsyMDcsOCBAQCBib29sIEpTVGVzdE5hbWVkRGVsZXRlclRocm93
aW5nRXhjZXB0aW9uCiB7CiAgICAgYXV0byYgdGhpc09iamVjdCA9ICpqc0Nhc3Q8SlNUZXN0TmFt
ZWREZWxldGVyVGhyb3dpbmdFeGNlcHRpb24qPihjZWxsKTsKICAgICBhdXRvJiBpbXBsID0gdGhp
c09iamVjdC53cmFwcGVkKCk7Ci0gICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpm
cm9tKHN0YXRlLCBpbmRleCk7CisgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CisgICAgYXV0byBw
cm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tKHZtLCBpbmRleCk7CiAgICAgaWYgKGlzVmlz
aWJsZU5hbWVkUHJvcGVydHk8T3ZlcnJpZGVCdWlsdGluczo6Tm8+KCpzdGF0ZSwgdGhpc09iamVj
dCwgcHJvcGVydHlOYW1lKSkgewogICAgICAgICBhdXRvIHJlc3VsdCA9IGltcGwuZGVsZXRlTmFt
ZWRQcm9wZXJ0eShwcm9wZXJ0eU5hbWVUb1N0cmluZyhwcm9wZXJ0eU5hbWUpKTsKICAgICAgICAg
aWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXIuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxldGVy
V2l0aElkZW50aWZpZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NSw3ICs4NSw3IEBAIHRlbXBs
YXRlPD4gSlNWYWx1ZSBKU1Rlc3ROYW1lZERlbGV0ZXJXaXQKIHRlbXBsYXRlPD4gdm9pZCBKU1Rl
c3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllckNvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVy
dGllcyhWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCiB7CiAgICAgcHV0
RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdE5hbWVkRGVsZXRl
cldpdGhJZGVudGlmaWVyOjpwcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCksIEpTQzo6UHJvcGVy
dHlBdHRyaWJ1dGU6OkRvbnREZWxldGUgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25s
eSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKLSAgICBwdXREaXJlY3Qodm0s
IHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZygmdm0sIFN0cmluZygi
VGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyIl9zKSksIEpTQzo6UHJvcGVydHlBdHRyaWJ1
dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOworICAgIHB1
dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKHZt
LCBTdHJpbmcoIlRlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllciJfcykpLCBKU0M6OlByb3Bl
cnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVt
KTsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIo
MCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJp
YnV0ZTo6RG9udEVudW0pOwogfQogCkBAIC0xNjMsOSArMTYzLDEwIEBAIGJvb2wgSlNUZXN0TmFt
ZWREZWxldGVyV2l0aElkZW50aWZpZXI6OmcKIAogYm9vbCBKU1Rlc3ROYW1lZERlbGV0ZXJXaXRo
SWRlbnRpZmllcjo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU09iamVjdCogb2JqZWN0LCBF
eGVjU3RhdGUqIHN0YXRlLCB1bnNpZ25lZCBpbmRleCwgUHJvcGVydHlTbG90JiBzbG90KQogewor
ICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
SlNUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXIqPihvYmplY3QpOwogICAgIEFTU0VSVF9H
Q19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKLSAgICBhdXRvIHByb3BlcnR5
TmFtZSA9IElkZW50aWZpZXI6OmZyb20oc3RhdGUsIGluZGV4KTsKKyAgICBhdXRvIHByb3BlcnR5
TmFtZSA9IElkZW50aWZpZXI6OmZyb20odm0sIGluZGV4KTsKICAgICB1c2luZyBHZXR0ZXJJRExU
eXBlID0gSURMRE9NU3RyaW5nOwogICAgIGF1dG8gZ2V0dGVyRnVuY3RvciA9IFtdIChhdXRvJiB0
aGlzT2JqZWN0LCBhdXRvIHByb3BlcnR5TmFtZSkgLT4gT3B0aW9uYWw8dHlwZW5hbWUgR2V0dGVy
SURMVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlPiB7CiAgICAgICAgIGF1dG8gcmVzdWx0ID0gdGhp
c09iamVjdC53cmFwcGVkKCkubmFtZWRJdGVtKHByb3BlcnR5TmFtZVRvQXRvbVN0cmluZyhwcm9w
ZXJ0eU5hbWUpKTsKQEAgLTE4MywxMCArMTg0LDExIEBAIGJvb2wgSlNUZXN0TmFtZWREZWxldGVy
V2l0aElkZW50aWZpZXI6OmcKIAogdm9pZCBKU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmll
cjo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIHN0YXRl
LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUp
CiB7CisgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpz
Q2FzdDxKU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllcio+KG9iamVjdCk7CiAgICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUyhvYmplY3QsIGluZm8oKSk7CiAgICAgZm9yIChhdXRvJiBw
cm9wZXJ0eU5hbWUgOiB0aGlzT2JqZWN0LT53cmFwcGVkKCkuc3VwcG9ydGVkUHJvcGVydHlOYW1l
cygpKQotICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHN0
YXRlLCBwcm9wZXJ0eU5hbWUpKTsKKyAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmll
cjo6ZnJvbVN0cmluZyh2bSwgcHJvcGVydHlOYW1lKSk7CiAgICAgSlNPYmplY3Q6OmdldE93blBy
b3BlcnR5TmFtZXMob2JqZWN0LCBzdGF0ZSwgcHJvcGVydHlOYW1lcywgbW9kZSk7CiB9CiAKQEAg
LTIwNSw3ICsyMDcsOCBAQCBib29sIEpTVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyOjpk
CiB7CiAgICAgYXV0byYgdGhpc09iamVjdCA9ICpqc0Nhc3Q8SlNUZXN0TmFtZWREZWxldGVyV2l0
aElkZW50aWZpZXIqPihjZWxsKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVk
KCk7Ci0gICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tKHN0YXRlLCBpbmRl
eCk7CisgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CisgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJ
ZGVudGlmaWVyOjpmcm9tKHZtLCBpbmRleCk7CiAgICAgaWYgKGlzVmlzaWJsZU5hbWVkUHJvcGVy
dHk8T3ZlcnJpZGVCdWlsdGluczo6Tm8+KCpzdGF0ZSwgdGhpc09iamVjdCwgcHJvcGVydHlOYW1l
KSkgewogICAgICAgICBpbXBsLm5hbWVkRGVsZXRlcihwcm9wZXJ0eU5hbWVUb1N0cmluZyhwcm9w
ZXJ0eU5hbWUpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRlci5jcHAJKHJldmlzaW9uIDI0
OTEyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RO
YW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgxLDcg
KzgxLDcgQEAgdGVtcGxhdGU8PiBKU1ZhbHVlIEpTVGVzdE5hbWVkRGVsZXRlcldpdAogdGVtcGxh
dGU8PiB2b2lkIEpTVGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVkR2V0dGVyQ29uc3RydWN0b3I6
OmluaXRpYWxpemVQcm9wZXJ0aWVzKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9i
amVjdCkKIHsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwg
SlNUZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXI6OnByb3RvdHlwZSh2bSwgZ2xvYmFs
T2JqZWN0KSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IEpTQzo6UHJvcGVy
dHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0p
OwotICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFs
U3RyaW5nKCZ2bSwgU3RyaW5nKCJUZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXIiX3Mp
KSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmli
dXRlOjpEb250RW51bSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1l
LCBqc05vbnRyaXZpYWxTdHJpbmcodm0sIFN0cmluZygiVGVzdE5hbWVkRGVsZXRlcldpdGhJbmRl
eGVkR2V0dGVyIl9zKSksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQ
cm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVy
dHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigwKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVh
ZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CiB9CiAKQEAgLTE2Niw2
ICsxNjYsNyBAQCBib29sIEpTVGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVkR2V0dGVyCiAKIGJv
b2wgSlNUZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXI6OmdldE93blByb3BlcnR5U2xv
dEJ5SW5kZXgoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBzdGF0ZSwgdW5zaWduZWQgaW5k
ZXgsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKKyAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAg
ICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVk
R2V0dGVyKj4ob2JqZWN0KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmpl
Y3QsIGluZm8oKSk7CiAgICAgaWYgKExJS0VMWShpbmRleCA8PSBNQVhfQVJSQVlfSU5ERVgpKSB7
CkBAIC0xNzYsNyArMTc3LDcgQEAgYm9vbCBKU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdl
dHRlcgogICAgICAgICB9CiAgICAgICAgIHJldHVybiBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlT
bG90QnlJbmRleChvYmplY3QsIHN0YXRlLCBpbmRleCwgc2xvdCk7CiAgICAgfQotICAgIGF1dG8g
cHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbShzdGF0ZSwgaW5kZXgpOworICAgIGF1dG8g
cHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbSh2bSwgaW5kZXgpOwogICAgIHVzaW5nIEdl
dHRlcklETFR5cGUgPSBJRExET01TdHJpbmc7CiAgICAgYXV0byBnZXR0ZXJGdW5jdG9yID0gW10g
KGF1dG8mIHRoaXNPYmplY3QsIGF1dG8gcHJvcGVydHlOYW1lKSAtPiBPcHRpb25hbDx0eXBlbmFt
ZSBHZXR0ZXJJRExUeXBlOjpJbXBsZW1lbnRhdGlvblR5cGU+IHsKICAgICAgICAgYXV0byByZXN1
bHQgPSB0aGlzT2JqZWN0LndyYXBwZWQoKS5uYW1lZEl0ZW0ocHJvcGVydHlOYW1lVG9BdG9tU3Ry
aW5nKHByb3BlcnR5TmFtZSkpOwpAQCAtMTk0LDEyICsxOTUsMTMgQEAgYm9vbCBKU1Rlc3ROYW1l
ZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRlcgogCiB2b2lkIEpTVGVzdE5hbWVkRGVsZXRlcldpdGhJ
bmRleGVkR2V0dGVyOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNT
dGF0ZSogc3RhdGUsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlv
bk1vZGUgbW9kZSkKIHsKKyAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvKiB0aGlz
T2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVkR2V0dGVyKj4ob2Jq
ZWN0KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKG9iamVjdCwgaW5mbygpKTsKICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwLCBjb3VudCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKS5sZW5n
dGgoKTsgaSA8IGNvdW50OyArK2kpCi0gICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZp
ZXI6OmZyb20oc3RhdGUsIGkpKTsKKyAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmll
cjo6ZnJvbSh2bSwgaSkpOwogICAgIGZvciAoYXV0byYgcHJvcGVydHlOYW1lIDogdGhpc09iamVj
dC0+d3JhcHBlZCgpLnN1cHBvcnRlZFByb3BlcnR5TmFtZXMoKSkKLSAgICAgICAgcHJvcGVydHlO
YW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhzdGF0ZSwgcHJvcGVydHlOYW1lKSk7Cisg
ICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHByb3Bl
cnR5TmFtZSkpOwogICAgIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgc3Rh
dGUsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5h
bWVkR2V0dGVyQ2FsbFdpdGguY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTgwLDcgKzgwLDcgQEAgdGVtcGxhdGU8PiBKU1ZhbHVlIEpTVGVz
dE5hbWVkR2V0dGVyQ2FsbAogdGVtcGxhdGU8PiB2b2lkIEpTVGVzdE5hbWVkR2V0dGVyQ2FsbFdp
dGhDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMoVk0mIHZtLCBKU0RPTUdsb2JhbE9i
amVjdCYgZ2xvYmFsT2JqZWN0KQogewogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1l
cy0+cHJvdG90eXBlLCBKU1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoOjpwcm90b3R5cGUodm0sIGds
b2JhbE9iamVjdCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUgfCBKU0M6OlBy
b3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRF
bnVtKTsKLSAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJp
dmlhbFN0cmluZygmdm0sIFN0cmluZygiVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGgiX3MpKSwgSlND
OjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpE
b250RW51bSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05v
bnRyaXZpYWxTdHJpbmcodm0sIFN0cmluZygiVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGgiX3MpKSwg
SlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRl
OjpEb250RW51bSk7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgs
IGpzTnVtYmVyKDApLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJv
cGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKIH0KIApAQCAtMTU3LDkgKzE1NywxMCBAQCBib29s
IEpTVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGg6OmdldE93blByCiAKIGJvb2wgSlNUZXN0TmFtZWRH
ZXR0ZXJDYWxsV2l0aDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU09iamVjdCogb2JqZWN0
LCBFeGVjU3RhdGUqIHN0YXRlLCB1bnNpZ25lZCBpbmRleCwgUHJvcGVydHlTbG90JiBzbG90KQog
eworICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8SlNUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aCo+KG9iamVjdCk7CiAgICAgQVNTRVJUX0dDX09C
SkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwotICAgIGF1dG8gcHJvcGVydHlOYW1l
ID0gSWRlbnRpZmllcjo6ZnJvbShzdGF0ZSwgaW5kZXgpOworICAgIGF1dG8gcHJvcGVydHlOYW1l
ID0gSWRlbnRpZmllcjo6ZnJvbSh2bSwgaW5kZXgpOwogICAgIHVzaW5nIEdldHRlcklETFR5cGUg
PSBJRExET01TdHJpbmc7CiAgICAgYXV0byBnZXR0ZXJGdW5jdG9yID0gW10gKGF1dG8mIHRoaXNP
YmplY3QsIGF1dG8gcHJvcGVydHlOYW1lKSAtPiBPcHRpb25hbDx0eXBlbmFtZSBHZXR0ZXJJRExU
eXBlOjpJbXBsZW1lbnRhdGlvblR5cGU+IHsKICAgICAgICAgYXV0byByZXN1bHQgPSB0aGlzT2Jq
ZWN0LndyYXBwZWQoKS5uYW1lZEl0ZW0od29ybGRGb3JET01PYmplY3QodGhpc09iamVjdCksIHBy
b3BlcnR5TmFtZVRvQXRvbVN0cmluZyhwcm9wZXJ0eU5hbWUpKTsKQEAgLTE3NywxMCArMTc4LDEx
IEBAIGJvb2wgSlNUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aDo6Z2V0T3duUHIKIAogdm9pZCBKU1Rl
c3ROYW1lZEdldHRlckNhbGxXaXRoOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmpl
Y3QsIEV4ZWNTdGF0ZSogc3RhdGUsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBF
bnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKKyAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBh
dXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGgqPihvYmpl
Y3QpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMob2JqZWN0LCBpbmZvKCkpOwogICAg
IGZvciAoYXV0byYgcHJvcGVydHlOYW1lIDogdGhpc09iamVjdC0+d3JhcHBlZCgpLnN1cHBvcnRl
ZFByb3BlcnR5TmFtZXMoKSkKLSAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6
ZnJvbVN0cmluZyhzdGF0ZSwgcHJvcGVydHlOYW1lKSk7CisgICAgICAgIHByb3BlcnR5TmFtZXMu
YWRkKElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHByb3BlcnR5TmFtZSkpOwogICAgIEpTT2Jq
ZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgc3RhdGUsIHByb3BlcnR5TmFtZXMsIG1v
ZGUpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEdldHRlck5vSWRlbnRp
Zmllci5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTgwLDcgKzgwLDcgQEAgdGVtcGxhdGU8PiBKU1ZhbHVlIEpTVGVzdE5hbWVkR2V0
dGVyTm9JZAogdGVtcGxhdGU8PiB2b2lkIEpTVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyQ29u
c3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3Qm
IGdsb2JhbE9iamVjdCkKIHsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnBy
b3RvdHlwZSwgSlNUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXI6OnByb3RvdHlwZSh2bSwgZ2xv
YmFsT2JqZWN0KSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IEpTQzo6UHJv
cGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVu
dW0pOwotICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2
aWFsU3RyaW5nKCZ2bSwgU3RyaW5nKCJUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXIiX3MpKSwg
SlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRl
OjpEb250RW51bSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBq
c05vbnRyaXZpYWxTdHJpbmcodm0sIFN0cmluZygiVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVy
Il9zKSksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0
dHJpYnV0ZTo6RG9udEVudW0pOwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+
bGVuZ3RoLCBqc051bWJlcigwKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBK
U0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CiB9CiAKQEAgLTE1Nyw5ICsxNTcsMTAg
QEAgYm9vbCBKU1Rlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllcjo6Z2V0TwogCiBib29sIEpTVGVz
dE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyOjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTT2Jq
ZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogc3RhdGUsIHVuc2lnbmVkIGluZGV4LCBQcm9wZXJ0eVNs
b3QmIHNsb3QpCiB7CisgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byogdGhpc09i
amVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllcio+KG9iamVjdCk7CiAg
ICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwotICAgIGF1
dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbShzdGF0ZSwgaW5kZXgpOworICAgIGF1
dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbSh2bSwgaW5kZXgpOwogICAgIHVzaW5n
IEdldHRlcklETFR5cGUgPSBJRExET01TdHJpbmc7CiAgICAgYXV0byBnZXR0ZXJGdW5jdG9yID0g
W10gKGF1dG8mIHRoaXNPYmplY3QsIGF1dG8gcHJvcGVydHlOYW1lKSAtPiBPcHRpb25hbDx0eXBl
bmFtZSBHZXR0ZXJJRExUeXBlOjpJbXBsZW1lbnRhdGlvblR5cGU+IHsKICAgICAgICAgYXV0byBy
ZXN1bHQgPSB0aGlzT2JqZWN0LndyYXBwZWQoKS5uYW1lZEl0ZW0ocHJvcGVydHlOYW1lVG9BdG9t
U3RyaW5nKHByb3BlcnR5TmFtZSkpOwpAQCAtMTc3LDEwICsxNzgsMTEgQEAgYm9vbCBKU1Rlc3RO
YW1lZEdldHRlck5vSWRlbnRpZmllcjo6Z2V0TwogCiB2b2lkIEpTVGVzdE5hbWVkR2V0dGVyTm9J
ZGVudGlmaWVyOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0
ZSogc3RhdGUsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1v
ZGUgbW9kZSkKIHsKKyAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvKiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyKj4ob2JqZWN0KTsKICAg
ICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKG9iamVjdCwgaW5mbygpKTsKICAgICBmb3IgKGF1
dG8mIHByb3BlcnR5TmFtZSA6IHRoaXNPYmplY3QtPndyYXBwZWQoKS5zdXBwb3J0ZWRQcm9wZXJ0
eU5hbWVzKCkpCi0gICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb21TdHJp
bmcoc3RhdGUsIHByb3BlcnR5TmFtZSkpOworICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBwcm9wZXJ0eU5hbWUpKTsKICAgICBKU09iamVjdDo6Z2V0
T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIHN0YXRlLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKIH0K
IApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5h
bWVkR2V0dGVyV2l0aElkZW50aWZpZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVy
LmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC04NSw3ICs4NSw3IEBAIHRlbXBsYXRlPD4gSlNWYWx1ZSBKU1Rlc3ROYW1lZEdldHRl
cldpdGgKIHRlbXBsYXRlPD4gdm9pZCBKU1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyQ29u
c3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3Qm
IGdsb2JhbE9iamVjdCkKIHsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnBy
b3RvdHlwZSwgSlNUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllcjo6cHJvdG90eXBlKHZtLCBn
bG9iYWxPYmplY3QpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgSlNDOjpQ
cm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250
RW51bSk7Ci0gICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRy
aXZpYWxTdHJpbmcoJnZtLCBTdHJpbmcoIlRlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyIl9z
KSksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJp
YnV0ZTo6RG9udEVudW0pOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFt
ZSwganNOb250cml2aWFsU3RyaW5nKHZtLCBTdHJpbmcoIlRlc3ROYW1lZEdldHRlcldpdGhJZGVu
dGlmaWVyIl9zKSksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9w
ZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlO
YW1lcy0+bGVuZ3RoLCBqc051bWJlcigwKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9u
bHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CiB9CiAKQEAgLTE2Myw5ICsx
NjMsMTAgQEAgYm9vbCBKU1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyOjpnZQogCiBib29s
IEpTVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXI6OmdldE93blByb3BlcnR5U2xvdEJ5SW5k
ZXgoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBzdGF0ZSwgdW5zaWduZWQgaW5kZXgsIFBy
b3BlcnR5U2xvdCYgc2xvdCkKIHsKKyAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRv
KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXIqPihv
YmplY3QpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygp
KTsKLSAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb20oc3RhdGUsIGluZGV4
KTsKKyAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb20odm0sIGluZGV4KTsK
ICAgICB1c2luZyBHZXR0ZXJJRExUeXBlID0gSURMRE9NU3RyaW5nOwogICAgIGF1dG8gZ2V0dGVy
RnVuY3RvciA9IFtdIChhdXRvJiB0aGlzT2JqZWN0LCBhdXRvIHByb3BlcnR5TmFtZSkgLT4gT3B0
aW9uYWw8dHlwZW5hbWUgR2V0dGVySURMVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlPiB7CiAgICAg
ICAgIGF1dG8gcmVzdWx0ID0gdGhpc09iamVjdC53cmFwcGVkKCkuZ2V0dGVyTmFtZShwcm9wZXJ0
eU5hbWVUb0F0b21TdHJpbmcocHJvcGVydHlOYW1lKSk7CkBAIC0xODMsMTAgKzE4NCwxMSBAQCBi
b29sIEpTVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXI6OmdlCiAKIHZvaWQgSlNUZXN0TmFt
ZWRHZXR0ZXJXaXRoSWRlbnRpZmllcjo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2Jq
ZWN0LCBFeGVjU3RhdGUqIHN0YXRlLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywg
RW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7CisgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAg
YXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVy
Kj4ob2JqZWN0KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKG9iamVjdCwgaW5mbygp
KTsKICAgICBmb3IgKGF1dG8mIHByb3BlcnR5TmFtZSA6IHRoaXNPYmplY3QtPndyYXBwZWQoKS5z
dXBwb3J0ZWRQcm9wZXJ0eU5hbWVzKCkpCi0gICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50
aWZpZXI6OmZyb21TdHJpbmcoc3RhdGUsIHByb3BlcnR5TmFtZSkpOworICAgICAgICBwcm9wZXJ0
eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBwcm9wZXJ0eU5hbWUpKTsKICAg
ICBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIHN0YXRlLCBwcm9wZXJ0eU5h
bWVzLCBtb2RlKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJO
b0lkZW50aWZpZXIuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC04MCw3ICs4MCw3IEBAIHRlbXBsYXRlPD4gSlNWYWx1ZSBKU1Rlc3RO
YW1lZFNldHRlck5vSWQKIHRlbXBsYXRlPD4gdm9pZCBKU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRp
ZmllckNvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGllcyhWTSYgdm0sIEpTRE9NR2xvYmFs
T2JqZWN0JiBnbG9iYWxPYmplY3QpCiB7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5h
bWVzLT5wcm90b3R5cGUsIEpTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyOjpwcm90b3R5cGUo
dm0sIGdsb2JhbE9iamVjdCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUgfCBK
U0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6
OkRvbnRFbnVtKTsKLSAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpz
Tm9udHJpdmlhbFN0cmluZygmdm0sIFN0cmluZygiVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVy
Il9zKSksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0
dHJpYnV0ZTo6RG9udEVudW0pOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+
bmFtZSwganNOb250cml2aWFsU3RyaW5nKHZtLCBTdHJpbmcoIlRlc3ROYW1lZFNldHRlck5vSWRl
bnRpZmllciJfcykpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJv
cGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5
TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRP
bmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwogfQogCkBAIC0xNTcsOSAr
MTU3LDEwIEBAIGJvb2wgSlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXI6OmdldE8KIAogYm9v
bCBKU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllcjo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRl
eChKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIHN0YXRlLCB1bnNpZ25lZCBpbmRleCwgUHJv
cGVydHlTbG90JiBzbG90KQogeworICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8q
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXIqPihvYmpl
Y3QpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsK
LSAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb20oc3RhdGUsIGluZGV4KTsK
KyAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb20odm0sIGluZGV4KTsKICAg
ICB1c2luZyBHZXR0ZXJJRExUeXBlID0gSURMRE9NU3RyaW5nOwogICAgIGF1dG8gZ2V0dGVyRnVu
Y3RvciA9IFtdIChhdXRvJiB0aGlzT2JqZWN0LCBhdXRvIHByb3BlcnR5TmFtZSkgLT4gT3B0aW9u
YWw8dHlwZW5hbWUgR2V0dGVySURMVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlPiB7CiAgICAgICAg
IGF1dG8gcmVzdWx0ID0gdGhpc09iamVjdC53cmFwcGVkKCkubmFtZWRJdGVtKHByb3BlcnR5TmFt
ZVRvQXRvbVN0cmluZyhwcm9wZXJ0eU5hbWUpKTsKQEAgLTE3NywxMCArMTc4LDExIEBAIGJvb2wg
SlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXI6OmdldE8KIAogdm9pZCBKU1Rlc3ROYW1lZFNl
dHRlck5vSWRlbnRpZmllcjo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBF
eGVjU3RhdGUqIHN0YXRlLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVy
YXRpb25Nb2RlIG1vZGUpCiB7CisgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byog
dGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllcio+KG9iamVj
dCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhvYmplY3QsIGluZm8oKSk7CiAgICAg
Zm9yIChhdXRvJiBwcm9wZXJ0eU5hbWUgOiB0aGlzT2JqZWN0LT53cmFwcGVkKCkuc3VwcG9ydGVk
UHJvcGVydHlOYW1lcygpKQotICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHN0YXRlLCBwcm9wZXJ0eU5hbWUpKTsKKyAgICAgICAgcHJvcGVydHlOYW1lcy5h
ZGQoSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcHJvcGVydHlOYW1lKSk7CiAgICAgSlNPYmpl
Y3Q6OmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBzdGF0ZSwgcHJvcGVydHlOYW1lcywgbW9k
ZSk7CiB9CiAKQEAgLTIwNiwxMiArMjA4LDEzIEBAIGJvb2wgSlNUZXN0TmFtZWRTZXR0ZXJOb0lk
ZW50aWZpZXI6OnB1dCgKIAogYm9vbCBKU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllcjo6cHV0
QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogc3RhdGUsIHVuc2lnbmVkIGluZGV4LCBK
U1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93KQogeworICAgIFZNJiB2bSA9IHN0YXRlLT52
bSgpOwogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWRTZXR0ZXJOb0lk
ZW50aWZpZXIqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmpl
Y3QsIGluZm8oKSk7CiAKLSAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb20o
c3RhdGUsIGluZGV4KTsKKyAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb20o
dm0sIGluZGV4KTsKICAgICBQcm9wZXJ0eVNsb3Qgc2xvdCB7IHRoaXNPYmplY3QsIFByb3BlcnR5
U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpWTUlucXVpcnkgfTsKLSAgICBKU1ZhbHVlIHByb3Rv
dHlwZSA9IHRoaXNPYmplY3QtPmdldFByb3RvdHlwZURpcmVjdChzdGF0ZS0+dm0oKSk7CisgICAg
SlNWYWx1ZSBwcm90b3R5cGUgPSB0aGlzT2JqZWN0LT5nZXRQcm90b3R5cGVEaXJlY3Qodm0pOwog
ICAgIGlmICghKHByb3RvdHlwZS5pc09iamVjdCgpICYmIGFzT2JqZWN0KHByb3RvdHlwZSktPmdl
dFByb3BlcnR5U2xvdChzdGF0ZSwgcHJvcGVydHlOYW1lLCBzbG90KSkpIHsKICAgICAgICAgYXV0
byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShzdGF0ZS0+dm0oKSk7CiAgICAgICAg
IGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKnN0YXRlLCB2YWx1ZSk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFt
ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNl
cHRpb24uY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTgwLDcgKzgwLDcgQEAgdGVtcGxhdGU8PiBKU1ZhbHVlIEpTVGVzdE5h
bWVkU2V0dGVyVGhybwogdGVtcGxhdGU8PiB2b2lkIEpTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdF
eGNlcHRpb25Db25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMoVk0mIHZtLCBKU0RPTUds
b2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQogewogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVy
dHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uOjpw
cm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRE
ZWxldGUgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlB
dHRyaWJ1dGU6OkRvbnRFbnVtKTsKLSAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMt
Pm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZygmdm0sIFN0cmluZygiVGVzdE5hbWVkU2V0dGVyVGhy
b3dpbmdFeGNlcHRpb24iX3MpKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBK
U0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5w
cm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcodm0sIFN0cmluZygiVGVzdE5h
bWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24iX3MpKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6
UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CiAgICAgcHV0RGly
ZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDApLCBKU0M6OlByb3Bl
cnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVt
KTsKIH0KIApAQCAtMTU3LDkgKzE1NywxMCBAQCBib29sIEpTVGVzdE5hbWVkU2V0dGVyVGhyb3dp
bmdFeGNlcHRpb246CiAKIGJvb2wgSlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6
Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIHN0
YXRlLCB1bnNpZ25lZCBpbmRleCwgUHJvcGVydHlTbG90JiBzbG90KQogeworICAgIFZNJiB2bSA9
IHN0YXRlLT52bSgpOwogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWRT
ZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbio+KG9iamVjdCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwotICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRl
bnRpZmllcjo6ZnJvbShzdGF0ZSwgaW5kZXgpOworICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRl
bnRpZmllcjo6ZnJvbSh2bSwgaW5kZXgpOwogICAgIHVzaW5nIEdldHRlcklETFR5cGUgPSBJRExE
T01TdHJpbmc7CiAgICAgYXV0byBnZXR0ZXJGdW5jdG9yID0gW10gKGF1dG8mIHRoaXNPYmplY3Qs
IGF1dG8gcHJvcGVydHlOYW1lKSAtPiBPcHRpb25hbDx0eXBlbmFtZSBHZXR0ZXJJRExUeXBlOjpJ
bXBsZW1lbnRhdGlvblR5cGU+IHsKICAgICAgICAgYXV0byByZXN1bHQgPSB0aGlzT2JqZWN0Lndy
YXBwZWQoKS5uYW1lZEl0ZW0ocHJvcGVydHlOYW1lVG9BdG9tU3RyaW5nKHByb3BlcnR5TmFtZSkp
OwpAQCAtMTc3LDEwICsxNzgsMTEgQEAgYm9vbCBKU1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhj
ZXB0aW9uOgogCiB2b2lkIEpTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246OmdldE93
blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBzdGF0ZSwgUHJvcGVy
dHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQogeworICAg
IFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNU
ZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbio+KG9iamVjdCk7CiAgICAgQVNTRVJUX0dD
X09CSkVDVF9JTkhFUklUUyhvYmplY3QsIGluZm8oKSk7CiAgICAgZm9yIChhdXRvJiBwcm9wZXJ0
eU5hbWUgOiB0aGlzT2JqZWN0LT53cmFwcGVkKCkuc3VwcG9ydGVkUHJvcGVydHlOYW1lcygpKQot
ICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHN0YXRlLCBw
cm9wZXJ0eU5hbWUpKTsKKyAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyh2bSwgcHJvcGVydHlOYW1lKSk7CiAgICAgSlNPYmplY3Q6OmdldE93blByb3BlcnR5
TmFtZXMob2JqZWN0LCBzdGF0ZSwgcHJvcGVydHlOYW1lcywgbW9kZSk7CiB9CiAKQEAgLTIwNiwx
MiArMjA4LDEzIEBAIGJvb2wgSlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbjoKIAog
Ym9vbCBKU1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uOjpwdXRCeUluZGV4KEpTQ2Vs
bCogY2VsbCwgRXhlY1N0YXRlKiBzdGF0ZSwgdW5zaWduZWQgaW5kZXgsIEpTVmFsdWUgdmFsdWUs
IGJvb2wgc2hvdWxkVGhyb3cpCiB7CisgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0
byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9u
Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZv
KCkpOwogCi0gICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tKHN0YXRlLCBp
bmRleCk7CisgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tKHZtLCBpbmRl
eCk7CiAgICAgUHJvcGVydHlTbG90IHNsb3QgeyB0aGlzT2JqZWN0LCBQcm9wZXJ0eVNsb3Q6Oklu
dGVybmFsTWV0aG9kVHlwZTo6Vk1JbnF1aXJ5IH07Ci0gICAgSlNWYWx1ZSBwcm90b3R5cGUgPSB0
aGlzT2JqZWN0LT5nZXRQcm90b3R5cGVEaXJlY3Qoc3RhdGUtPnZtKCkpOworICAgIEpTVmFsdWUg
cHJvdG90eXBlID0gdGhpc09iamVjdC0+Z2V0UHJvdG90eXBlRGlyZWN0KHZtKTsKICAgICBpZiAo
IShwcm90b3R5cGUuaXNPYmplY3QoKSAmJiBhc09iamVjdChwcm90b3R5cGUpLT5nZXRQcm9wZXJ0
eVNsb3Qoc3RhdGUsIHByb3BlcnR5TmFtZSwgc2xvdCkpKSB7CiAgICAgICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoc3RhdGUtPnZtKCkpOwogICAgICAgICBhdXRvIG5h
dGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KCpzdGF0ZSwgdmFsdWUpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVy
V2l0aElkZW50aWZpZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyLmNwcAkocmV2
aXNpb24gMjQ5MTI4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04
NSw3ICs4NSw3IEBAIHRlbXBsYXRlPD4gSlNWYWx1ZSBKU1Rlc3ROYW1lZFNldHRlcldpdGgKIHRl
bXBsYXRlPD4gdm9pZCBKU1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyQ29uc3RydWN0b3I6
OmluaXRpYWxpemVQcm9wZXJ0aWVzKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9i
amVjdCkKIHsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwg
SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6cHJvdG90eXBlKHZtLCBnbG9iYWxPYmpl
Y3QpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgSlNDOjpQcm9wZXJ0eUF0
dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7Ci0g
ICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJp
bmcoJnZtLCBTdHJpbmcoIlRlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyIl9zKSksIEpTQzo6
UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9u
dEVudW0pOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250
cml2aWFsU3RyaW5nKHZtLCBTdHJpbmcoIlRlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyIl9z
KSksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJp
YnV0ZTo6RG9udEVudW0pOwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVu
Z3RoLCBqc051bWJlcigwKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6
OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CiB9CiAKQEAgLTE2Myw5ICsxNjMsMTAgQEAg
Ym9vbCBKU1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyOjpnZQogCiBib29sIEpTVGVzdE5h
bWVkU2V0dGVyV2l0aElkZW50aWZpZXI6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmpl
Y3QqIG9iamVjdCwgRXhlY1N0YXRlKiBzdGF0ZSwgdW5zaWduZWQgaW5kZXgsIFByb3BlcnR5U2xv
dCYgc2xvdCkKIHsKKyAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvKiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXIqPihvYmplY3QpOwog
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKLSAgICBh
dXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb20oc3RhdGUsIGluZGV4KTsKKyAgICBh
dXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb20odm0sIGluZGV4KTsKICAgICB1c2lu
ZyBHZXR0ZXJJRExUeXBlID0gSURMRE9NU3RyaW5nOwogICAgIGF1dG8gZ2V0dGVyRnVuY3RvciA9
IFtdIChhdXRvJiB0aGlzT2JqZWN0LCBhdXRvIHByb3BlcnR5TmFtZSkgLT4gT3B0aW9uYWw8dHlw
ZW5hbWUgR2V0dGVySURMVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlPiB7CiAgICAgICAgIGF1dG8g
cmVzdWx0ID0gdGhpc09iamVjdC53cmFwcGVkKCkubmFtZWRJdGVtKHByb3BlcnR5TmFtZVRvQXRv
bVN0cmluZyhwcm9wZXJ0eU5hbWUpKTsKQEAgLTE4MywxMCArMTg0LDExIEBAIGJvb2wgSlNUZXN0
TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6Z2UKIAogdm9pZCBKU1Rlc3ROYW1lZFNldHRlcldp
dGhJZGVudGlmaWVyOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNT
dGF0ZSogc3RhdGUsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlv
bk1vZGUgbW9kZSkKIHsKKyAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvKiB0aGlz
T2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXIqPihvYmplY3Qp
OwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMob2JqZWN0LCBpbmZvKCkpOwogICAgIGZv
ciAoYXV0byYgcHJvcGVydHlOYW1lIDogdGhpc09iamVjdC0+d3JhcHBlZCgpLnN1cHBvcnRlZFBy
b3BlcnR5TmFtZXMoKSkKLSAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyhzdGF0ZSwgcHJvcGVydHlOYW1lKSk7CisgICAgICAgIHByb3BlcnR5TmFtZXMuYWRk
KElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHByb3BlcnR5TmFtZSkpOwogICAgIEpTT2JqZWN0
OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgc3RhdGUsIHByb3BlcnR5TmFtZXMsIG1vZGUp
OwogfQogCkBAIC0yMTIsMTIgKzIxNCwxMyBAQCBib29sIEpTVGVzdE5hbWVkU2V0dGVyV2l0aElk
ZW50aWZpZXI6OnB1CiAKIGJvb2wgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6cHV0
QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogc3RhdGUsIHVuc2lnbmVkIGluZGV4LCBK
U1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93KQogeworICAgIFZNJiB2bSA9IHN0YXRlLT52
bSgpOwogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWRTZXR0ZXJXaXRo
SWRlbnRpZmllcio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09i
amVjdCwgaW5mbygpKTsKIAotICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJv
bShzdGF0ZSwgaW5kZXgpOworICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJv
bSh2bSwgaW5kZXgpOwogICAgIFByb3BlcnR5U2xvdCBzbG90IHsgdGhpc09iamVjdCwgUHJvcGVy
dHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6OlZNSW5xdWlyeSB9OwotICAgIEpTVmFsdWUgcHJv
dG90eXBlID0gdGhpc09iamVjdC0+Z2V0UHJvdG90eXBlRGlyZWN0KHN0YXRlLT52bSgpKTsKKyAg
ICBKU1ZhbHVlIHByb3RvdHlwZSA9IHRoaXNPYmplY3QtPmdldFByb3RvdHlwZURpcmVjdCh2bSk7
CiAgICAgaWYgKCEocHJvdG90eXBlLmlzT2JqZWN0KCkgJiYgYXNPYmplY3QocHJvdG90eXBlKS0+
Z2V0UHJvcGVydHlTbG90KHN0YXRlLCBwcm9wZXJ0eU5hbWUsIHNsb3QpKSkgewogICAgICAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHN0YXRlLT52bSgpKTsKICAgICAg
ICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqc3RhdGUsIHZhbHVl
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RO
YW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhl
ZEdldHRlci5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtODgsNyArODgsNyBAQCB0ZW1wbGF0ZTw+IEpTVmFsdWUgSlNUZXN0
TmFtZWRTZXR0ZXJXaXRoCiB0ZW1wbGF0ZTw+IHZvaWQgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5k
ZXhlZEdldHRlckNvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGllcyhWTSYgdm0sIEpTRE9N
R2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCiB7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9w
ZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXI6
OnByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9u
dERlbGV0ZSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0
eUF0dHJpYnV0ZTo6RG9udEVudW0pOwotICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1l
cy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKCZ2bSwgU3RyaW5nKCJUZXN0TmFtZWRTZXR0ZXJX
aXRoSW5kZXhlZEdldHRlciJfcykpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8
IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKKyAgICBwdXREaXJlY3Qodm0sIHZt
LnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZyh2bSwgU3RyaW5nKCJUZXN0
TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlciJfcykpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRl
OjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKICAgICBwdXRE
aXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMCksIEpTQzo6UHJv
cGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVu
dW0pOwogfQogCkBAIC0xNzUsNiArMTc1LDcgQEAgYm9vbCBKU1Rlc3ROYW1lZFNldHRlcldpdGhJ
bmRleGVkR2V0dGVyOgogCiBib29sIEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXI6
OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBz
dGF0ZSwgdW5zaWduZWQgaW5kZXgsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKKyAgICBWTSYgdm0g
PSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVk
U2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXIqPihvYmplY3QpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1Rf
SU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKICAgICBpZiAoTElLRUxZKGluZGV4IDw9IE1B
WF9BUlJBWV9JTkRFWCkpIHsKQEAgLTE4NSw3ICsxODYsNyBAQCBib29sIEpTVGVzdE5hbWVkU2V0
dGVyV2l0aEluZGV4ZWRHZXR0ZXI6CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIEpTT2JqZWN0
OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KG9iamVjdCwgc3RhdGUsIGluZGV4LCBzbG90KTsK
ICAgICB9Ci0gICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tKHN0YXRlLCBp
bmRleCk7CisgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tKHZtLCBpbmRl
eCk7CiAgICAgdXNpbmcgR2V0dGVySURMVHlwZSA9IElETERPTVN0cmluZzsKICAgICBhdXRvIGdl
dHRlckZ1bmN0b3IgPSBbXSAoYXV0byYgdGhpc09iamVjdCwgYXV0byBwcm9wZXJ0eU5hbWUpIC0+
IE9wdGlvbmFsPHR5cGVuYW1lIEdldHRlcklETFR5cGU6OkltcGxlbWVudGF0aW9uVHlwZT4gewog
ICAgICAgICBhdXRvIHJlc3VsdCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpLm5hbWVkSXRlbShwcm9w
ZXJ0eU5hbWVUb0F0b21TdHJpbmcocHJvcGVydHlOYW1lKSk7CkBAIC0yMDMsMTIgKzIwNCwxMyBA
QCBib29sIEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXI6CiAKIHZvaWQgSlNUZXN0
TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlcjo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVj
dCogb2JqZWN0LCBFeGVjU3RhdGUqIHN0YXRlLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlO
YW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7CisgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7
CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRl
eGVkR2V0dGVyKj4ob2JqZWN0KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKG9iamVj
dCwgaW5mbygpKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwLCBjb3VudCA9IHRoaXNPYmplY3Qt
PndyYXBwZWQoKS5sZW5ndGgoKTsgaSA8IGNvdW50OyArK2kpCi0gICAgICAgIHByb3BlcnR5TmFt
ZXMuYWRkKElkZW50aWZpZXI6OmZyb20oc3RhdGUsIGkpKTsKKyAgICAgICAgcHJvcGVydHlOYW1l
cy5hZGQoSWRlbnRpZmllcjo6ZnJvbSh2bSwgaSkpOwogICAgIGZvciAoYXV0byYgcHJvcGVydHlO
YW1lIDogdGhpc09iamVjdC0+d3JhcHBlZCgpLnN1cHBvcnRlZFByb3BlcnR5TmFtZXMoKSkKLSAg
ICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhzdGF0ZSwgcHJv
cGVydHlOYW1lKSk7CisgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb21T
dHJpbmcodm0sIHByb3BlcnR5TmFtZSkpOwogICAgIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5h
bWVzKG9iamVjdCwgc3RhdGUsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwogfQogCkBAIC0yMzQsMTIg
KzIzNiwxMyBAQCBib29sIEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXI6CiAKIGJv
b2wgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlcjo6cHV0QnlJbmRleChKU0NlbGwq
IGNlbGwsIEV4ZWNTdGF0ZSogc3RhdGUsIHVuc2lnbmVkIGluZGV4LCBKU1ZhbHVlIHZhbHVlLCBi
b29sIHNob3VsZFRocm93KQogeworICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8q
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlcio+
KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygp
KTsKIAotICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbShzdGF0ZSwgaW5k
ZXgpOworICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbSh2bSwgaW5kZXgp
OwogICAgIFByb3BlcnR5U2xvdCBzbG90IHsgdGhpc09iamVjdCwgUHJvcGVydHlTbG90OjpJbnRl
cm5hbE1ldGhvZFR5cGU6OlZNSW5xdWlyeSB9OwotICAgIEpTVmFsdWUgcHJvdG90eXBlID0gdGhp
c09iamVjdC0+Z2V0UHJvdG90eXBlRGlyZWN0KHN0YXRlLT52bSgpKTsKKyAgICBKU1ZhbHVlIHBy
b3RvdHlwZSA9IHRoaXNPYmplY3QtPmdldFByb3RvdHlwZURpcmVjdCh2bSk7CiAgICAgaWYgKCEo
cHJvdG90eXBlLmlzT2JqZWN0KCkgJiYgYXNPYmplY3QocHJvdG90eXBlKS0+Z2V0UHJvcGVydHlT
bG90KHN0YXRlLCBwcm9wZXJ0eU5hbWUsIHNsb3QpKSkgewogICAgICAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHN0YXRlLT52bSgpKTsKICAgICAgICAgYXV0byBuYXRp
dmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqc3RhdGUsIHZhbHVlKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldp
dGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdl
dHRlckFuZFNldHRlci5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVy
QW5kU2V0dGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODgsNyArODgsNyBAQCB0ZW1wbGF0ZTw+
IEpTVmFsdWUgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoCiB0ZW1wbGF0ZTw+IHZvaWQgSlNUZXN0TmFt
ZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlckNvbnN0cnVjdG9yOjppbml0aWFsaXpl
UHJvcGVydGllcyhWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCiB7CiAg
ICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdE5hbWVk
U2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXI6OnByb3RvdHlwZSh2bSwgZ2xvYmFsT2Jq
ZWN0KSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IEpTQzo6UHJvcGVydHlB
dHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwot
ICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3Ry
aW5nKCZ2bSwgU3RyaW5nKCJUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRl
ciJfcykpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlB
dHRyaWJ1dGU6OkRvbnRFbnVtKTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMt
Pm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZyh2bSwgU3RyaW5nKCJUZXN0TmFtZWRTZXR0ZXJXaXRo
SW5kZXhlZEdldHRlckFuZFNldHRlciJfcykpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFk
T25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKICAgICBwdXREaXJlY3Qo
dm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMCksIEpTQzo6UHJvcGVydHlB
dHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwog
fQogCkBAIC0xNzUsNiArMTc1LDcgQEAgYm9vbCBKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVk
R2V0dGVyQQogCiBib29sIEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0
ZXI6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRl
KiBzdGF0ZSwgdW5zaWduZWQgaW5kZXgsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKKyAgICBWTSYg
dm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5h
bWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXIqPihvYmplY3QpOwogICAgIEFTU0VS
VF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKICAgICBpZiAoTElLRUxZ
KGluZGV4IDw9IE1BWF9BUlJBWV9JTkRFWCkpIHsKQEAgLTE4NSw3ICsxODYsNyBAQCBib29sIEpT
VGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBCiAgICAgICAgIH0KICAgICAgICAgcmV0
dXJuIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KG9iamVjdCwgc3RhdGUsIGlu
ZGV4LCBzbG90KTsKICAgICB9Ci0gICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpm
cm9tKHN0YXRlLCBpbmRleCk7CisgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpm
cm9tKHZtLCBpbmRleCk7CiAgICAgdXNpbmcgR2V0dGVySURMVHlwZSA9IElETERPTVN0cmluZzsK
ICAgICBhdXRvIGdldHRlckZ1bmN0b3IgPSBbXSAoYXV0byYgdGhpc09iamVjdCwgYXV0byBwcm9w
ZXJ0eU5hbWUpIC0+IE9wdGlvbmFsPHR5cGVuYW1lIEdldHRlcklETFR5cGU6OkltcGxlbWVudGF0
aW9uVHlwZT4gewogICAgICAgICBhdXRvIHJlc3VsdCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpLm5h
bWVkSXRlbShwcm9wZXJ0eU5hbWVUb0F0b21TdHJpbmcocHJvcGVydHlOYW1lKSk7CkBAIC0yMDMs
MTIgKzIwNCwxMyBAQCBib29sIEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBCiAK
IHZvaWQgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlcjo6Z2V0T3du
UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIHN0YXRlLCBQcm9wZXJ0
eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7CisgICAg
Vk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rl
c3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyKj4ob2JqZWN0KTsKICAgICBB
U1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKG9iamVjdCwgaW5mbygpKTsKICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwLCBjb3VudCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKS5sZW5ndGgoKTsgaSA8IGNv
dW50OyArK2kpCi0gICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb20oc3Rh
dGUsIGkpKTsKKyAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbSh2bSwg
aSkpOwogICAgIGZvciAoYXV0byYgcHJvcGVydHlOYW1lIDogdGhpc09iamVjdC0+d3JhcHBlZCgp
LnN1cHBvcnRlZFByb3BlcnR5TmFtZXMoKSkKLSAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRl
bnRpZmllcjo6ZnJvbVN0cmluZyhzdGF0ZSwgcHJvcGVydHlOYW1lKSk7CisgICAgICAgIHByb3Bl
cnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHByb3BlcnR5TmFtZSkpOwog
ICAgIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgc3RhdGUsIHByb3BlcnR5
TmFtZXMsIG1vZGUpOwogfQogCkBAIC0yNDIsNiArMjQ0LDcgQEAgYm9vbCBKU1Rlc3ROYW1lZFNl
dHRlcldpdGhJbmRleGVkR2V0dGVyQQogCiBib29sIEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4
ZWRHZXR0ZXJBbmRTZXR0ZXI6OnB1dEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIHN0
YXRlLCB1bnNpZ25lZCBpbmRleCwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKIHsK
KyAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0
PEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXIqPihjZWxsKTsKICAg
ICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAKQEAgLTI1
Myw5ICsyNTYsOSBAQCBib29sIEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBCiAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRl
bnRpZmllcjo6ZnJvbShzdGF0ZSwgaW5kZXgpOworICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRl
bnRpZmllcjo6ZnJvbSh2bSwgaW5kZXgpOwogICAgIFByb3BlcnR5U2xvdCBzbG90IHsgdGhpc09i
amVjdCwgUHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6OlZNSW5xdWlyeSB9OwotICAg
IEpTVmFsdWUgcHJvdG90eXBlID0gdGhpc09iamVjdC0+Z2V0UHJvdG90eXBlRGlyZWN0KHN0YXRl
LT52bSgpKTsKKyAgICBKU1ZhbHVlIHByb3RvdHlwZSA9IHRoaXNPYmplY3QtPmdldFByb3RvdHlw
ZURpcmVjdCh2bSk7CiAgICAgaWYgKCEocHJvdG90eXBlLmlzT2JqZWN0KCkgJiYgYXNPYmplY3Qo
cHJvdG90eXBlKS0+Z2V0UHJvcGVydHlTbG90KHN0YXRlLCBwcm9wZXJ0eU5hbWUsIHNsb3QpKSkg
ewogICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHN0YXRlLT52
bSgpKTsKICAgICAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigq
c3RhdGUsIHZhbHVlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhPdmVycmlkZUJ1aWx0aW5zLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRT
ZXR0ZXJXaXRoT3ZlcnJpZGVCdWlsdGlucy5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhP
dmVycmlkZUJ1aWx0aW5zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODAsNyArODAsNyBAQCB0ZW1w
bGF0ZTw+IEpTVmFsdWUgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoCiB0ZW1wbGF0ZTw+IHZvaWQgSlNU
ZXN0TmFtZWRTZXR0ZXJXaXRoT3ZlcnJpZGVCdWlsdGluc0NvbnN0cnVjdG9yOjppbml0aWFsaXpl
UHJvcGVydGllcyhWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCiB7CiAg
ICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdE5hbWVk
U2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnM6OnByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KSwg
SlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1
dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwotICAgIHB1
dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKCZ2
bSwgU3RyaW5nKCJUZXN0TmFtZWRTZXR0ZXJXaXRoT3ZlcnJpZGVCdWlsdGlucyJfcykpLCBKU0M6
OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRv
bnRFbnVtKTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9u
dHJpdmlhbFN0cmluZyh2bSwgU3RyaW5nKCJUZXN0TmFtZWRTZXR0ZXJXaXRoT3ZlcnJpZGVCdWls
dGlucyJfcykpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVy
dHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFt
ZXMtPmxlbmd0aCwganNOdW1iZXIoMCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5
IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwogfQogCkBAIC0xNTcsOSArMTU3
LDEwIEBAIGJvb2wgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoT3ZlcnJpZGVCdWlsdGkKIAogYm9vbCBK
U1Rlc3ROYW1lZFNldHRlcldpdGhPdmVycmlkZUJ1aWx0aW5zOjpnZXRPd25Qcm9wZXJ0eVNsb3RC
eUluZGV4KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogc3RhdGUsIHVuc2lnbmVkIGluZGV4
LCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CisgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAg
YXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZFNldHRlcldpdGhPdmVycmlkZUJ1
aWx0aW5zKj4ob2JqZWN0KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmpl
Y3QsIGluZm8oKSk7Ci0gICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tKHN0
YXRlLCBpbmRleCk7CisgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tKHZt
LCBpbmRleCk7CiAgICAgdXNpbmcgR2V0dGVySURMVHlwZSA9IElETERPTVN0cmluZzsKICAgICBh
dXRvIGdldHRlckZ1bmN0b3IgPSBbXSAoYXV0byYgdGhpc09iamVjdCwgYXV0byBwcm9wZXJ0eU5h
bWUpIC0+IE9wdGlvbmFsPHR5cGVuYW1lIEdldHRlcklETFR5cGU6OkltcGxlbWVudGF0aW9uVHlw
ZT4gewogICAgICAgICBhdXRvIHJlc3VsdCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpLm5hbWVkSXRl
bShwcm9wZXJ0eU5hbWVUb0F0b21TdHJpbmcocHJvcGVydHlOYW1lKSk7CkBAIC0xNzcsMTAgKzE3
OCwxMSBAQCBib29sIEpTVGVzdE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRpCiAKIHZvaWQg
SlNUZXN0TmFtZWRTZXR0ZXJXaXRoT3ZlcnJpZGVCdWlsdGluczo6Z2V0T3duUHJvcGVydHlOYW1l
cyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIHN0YXRlLCBQcm9wZXJ0eU5hbWVBcnJheSYg
cHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7CisgICAgVk0mIHZtID0gc3Rh
dGUtPnZtKCk7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZFNldHRl
cldpdGhPdmVycmlkZUJ1aWx0aW5zKj4ob2JqZWN0KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lO
SEVSSVRTKG9iamVjdCwgaW5mbygpKTsKICAgICBmb3IgKGF1dG8mIHByb3BlcnR5TmFtZSA6IHRo
aXNPYmplY3QtPndyYXBwZWQoKS5zdXBwb3J0ZWRQcm9wZXJ0eU5hbWVzKCkpCi0gICAgICAgIHBy
b3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb21TdHJpbmcoc3RhdGUsIHByb3BlcnR5TmFt
ZSkpOworICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZt
LCBwcm9wZXJ0eU5hbWUpKTsKICAgICBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhvYmpl
Y3QsIHN0YXRlLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKIH0KIApAQCAtMjAyLDEwICsyMDQsMTEg
QEAgYm9vbCBKU1Rlc3ROYW1lZFNldHRlcldpdGhPdmVycmlkZUJ1aWx0aQogCiBib29sIEpTVGVz
dE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnM6OnB1dEJ5SW5kZXgoSlNDZWxsKiBjZWxs
LCBFeGVjU3RhdGUqIHN0YXRlLCB1bnNpZ25lZCBpbmRleCwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCkK
IHsKKyAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganND
YXN0PEpTVGVzdE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnMqPihjZWxsKTsKICAgICBB
U1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAKLSAgICBhdXRv
IHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb20oc3RhdGUsIGluZGV4KTsKKyAgICBhdXRv
IHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb20odm0sIGluZGV4KTsKICAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHN0YXRlLT52bSgpKTsKICAgICBhdXRvIG5h
dGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KCpzdGF0ZSwgdmFsdWUpOwogICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgdHJ1ZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJs
ZVByb3BlcnRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllcy5j
cHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllcy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEwNCw3ICsxMDQsNyBAQCB0ZW1wbGF0ZTw+IEpTVmFsdWUgSlNUZXN0
TmFtZWRTZXR0ZXJXaXRoCiB0ZW1wbGF0ZTw+IHZvaWQgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5m
b3JnYWJsZVByb3BlcnRpZXNDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMoVk0mIHZt
LCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQogewogICAgIHB1dERpcmVjdCh2bSwg
dm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdh
YmxlUHJvcGVydGllczo6cHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QpLCBKU0M6OlByb3BlcnR5
QXR0cmlidXRlOjpEb250RGVsZXRlIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkg
fCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7Ci0gICAgcHV0RGlyZWN0KHZtLCB2
bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcoJnZtLCBTdHJpbmcoIlRl
c3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllcyJfcykpLCBKU0M6OlByb3BlcnR5
QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsK
KyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0
cmluZyh2bSwgU3RyaW5nKCJUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXMi
X3MpKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0
cmlidXRlOjpEb250RW51bSk7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5s
ZW5ndGgsIGpzTnVtYmVyKDApLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpT
Qzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKIH0KIApAQCAtMTgxLDkgKzE4MSwxMCBA
QCBib29sIEpTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wCiAKIGJvb2wgSlNUZXN0
TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXM6OmdldE93blByb3BlcnR5U2xvdEJ5
SW5kZXgoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBzdGF0ZSwgdW5zaWduZWQgaW5kZXgs
IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKKyAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBh
dXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQ
cm9wZXJ0aWVzKj4ob2JqZWN0KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNP
YmplY3QsIGluZm8oKSk7Ci0gICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9t
KHN0YXRlLCBpbmRleCk7CisgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9t
KHZtLCBpbmRleCk7CiAgICAgdXNpbmcgR2V0dGVySURMVHlwZSA9IElETERPTVN0cmluZzsKICAg
ICBhdXRvIGdldHRlckZ1bmN0b3IgPSBbXSAoYXV0byYgdGhpc09iamVjdCwgYXV0byBwcm9wZXJ0
eU5hbWUpIC0+IE9wdGlvbmFsPHR5cGVuYW1lIEdldHRlcklETFR5cGU6OkltcGxlbWVudGF0aW9u
VHlwZT4gewogICAgICAgICBhdXRvIHJlc3VsdCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpLm5hbWVk
SXRlbShwcm9wZXJ0eU5hbWVUb0F0b21TdHJpbmcocHJvcGVydHlOYW1lKSk7CkBAIC0yMDEsMTAg
KzIwMiwxMSBAQCBib29sIEpTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wCiAKIHZv
aWQgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXM6OmdldE93blByb3Bl
cnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBzdGF0ZSwgUHJvcGVydHlOYW1l
QXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQogeworICAgIFZNJiB2
bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFt
ZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXMqPihvYmplY3QpOwogICAgIEFTU0VSVF9H
Q19PQkpFQ1RfSU5IRVJJVFMob2JqZWN0LCBpbmZvKCkpOwogICAgIGZvciAoYXV0byYgcHJvcGVy
dHlOYW1lIDogdGhpc09iamVjdC0+d3JhcHBlZCgpLnN1cHBvcnRlZFByb3BlcnR5TmFtZXMoKSkK
LSAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhzdGF0ZSwg
cHJvcGVydHlOYW1lKSk7CisgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZy
b21TdHJpbmcodm0sIHByb3BlcnR5TmFtZSkpOwogICAgIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0
eU5hbWVzKG9iamVjdCwgc3RhdGUsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwogfQogCkBAIC0yMzAs
MTIgKzIzMiwxMyBAQCBib29sIEpTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wCiAK
IGJvb2wgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXM6OnB1dEJ5SW5k
ZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIHN0YXRlLCB1bnNpZ25lZCBpbmRleCwgSlNWYWx1
ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKIHsKKyAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsK
ICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9y
Z2FibGVQcm9wZXJ0aWVzKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0
aGlzT2JqZWN0LCBpbmZvKCkpOwogCi0gICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVy
Ojpmcm9tKHN0YXRlLCBpbmRleCk7CisgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVy
Ojpmcm9tKHZtLCBpbmRleCk7CiAgICAgUHJvcGVydHlTbG90IHNsb3QgeyB0aGlzT2JqZWN0LCBQ
cm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6Vk1JbnF1aXJ5IH07Ci0gICAgSlNWYWx1
ZSBwcm90b3R5cGUgPSB0aGlzT2JqZWN0LT5nZXRQcm90b3R5cGVEaXJlY3Qoc3RhdGUtPnZtKCkp
OworICAgIEpTVmFsdWUgcHJvdG90eXBlID0gdGhpc09iamVjdC0+Z2V0UHJvdG90eXBlRGlyZWN0
KHZtKTsKICAgICBpZiAoIShwcm90b3R5cGUuaXNPYmplY3QoKSAmJiBhc09iamVjdChwcm90b3R5
cGUpLT5nZXRQcm9wZXJ0eVNsb3Qoc3RhdGUsIHByb3BlcnR5TmFtZSwgc2xvdCkpKSB7CiAgICAg
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoc3RhdGUtPnZtKCkpOwog
ICAgICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KCpzdGF0ZSwg
dmFsdWUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGlu
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVC
dWlsdGlucy5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGll
c0FuZE92ZXJyaWRlQnVpbHRpbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQsNyArMTA0LDcg
QEAgdGVtcGxhdGU8PiBKU1ZhbHVlIEpTVGVzdE5hbWVkU2V0dGVyV2l0aAogdGVtcGxhdGU8PiB2
b2lkIEpTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVC
dWlsdGluc0NvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGllcyhWTSYgdm0sIEpTRE9NR2xv
YmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCiB7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0
eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0
aWVzQW5kT3ZlcnJpZGVCdWlsdGluczo6cHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QpLCBKU0M6
OlByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6
UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7Ci0gICAgcHV0RGly
ZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcoJnZtLCBT
dHJpbmcoIlRlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0FuZE92ZXJyaWRl
QnVpbHRpbnMiX3MpKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlBy
b3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0
eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcodm0sIFN0cmluZygiVGVzdE5hbWVkU2V0
dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGlucyJfcykpLCBKU0M6
OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRv
bnRFbnVtKTsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNO
dW1iZXIoMCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0
eUF0dHJpYnV0ZTo6RG9udEVudW0pOwogfQogCkBAIC0xODEsOSArMTgxLDEwIEBAIGJvb2wgSlNU
ZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3AKIAogYm9vbCBKU1Rlc3ROYW1lZFNldHRl
cldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0FuZE92ZXJyaWRlQnVpbHRpbnM6OmdldE93blByb3Bl
cnR5U2xvdEJ5SW5kZXgoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBzdGF0ZSwgdW5zaWdu
ZWQgaW5kZXgsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKKyAgICBWTSYgdm0gPSBzdGF0ZS0+dm0o
KTsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkU2V0dGVyV2l0aFVu
Zm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGlucyo+KG9iamVjdCk7CiAgICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwotICAgIGF1dG8gcHJv
cGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbShzdGF0ZSwgaW5kZXgpOworICAgIGF1dG8gcHJv
cGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbSh2bSwgaW5kZXgpOwogICAgIHVzaW5nIEdldHRl
cklETFR5cGUgPSBJRExET01TdHJpbmc7CiAgICAgYXV0byBnZXR0ZXJGdW5jdG9yID0gW10gKGF1
dG8mIHRoaXNPYmplY3QsIGF1dG8gcHJvcGVydHlOYW1lKSAtPiBPcHRpb25hbDx0eXBlbmFtZSBH
ZXR0ZXJJRExUeXBlOjpJbXBsZW1lbnRhdGlvblR5cGU+IHsKICAgICAgICAgYXV0byByZXN1bHQg
PSB0aGlzT2JqZWN0LndyYXBwZWQoKS5uYW1lZEl0ZW0ocHJvcGVydHlOYW1lVG9BdG9tU3RyaW5n
KHByb3BlcnR5TmFtZSkpOwpAQCAtMjAxLDEwICsyMDIsMTEgQEAgYm9vbCBKU1Rlc3ROYW1lZFNl
dHRlcldpdGhVbmZvcmdhYmxlUHJvcAogCiB2b2lkIEpTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9y
Z2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGluczo6Z2V0T3duUHJvcGVydHlOYW1lcyhK
U09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIHN0YXRlLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJv
cGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7CisgICAgVk0mIHZtID0gc3RhdGUt
PnZtKCk7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZFNldHRlcldp
dGhVbmZvcmdhYmxlUHJvcGVydGllc0FuZE92ZXJyaWRlQnVpbHRpbnMqPihvYmplY3QpOwogICAg
IEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMob2JqZWN0LCBpbmZvKCkpOwogICAgIGZvciAoYXV0
byYgcHJvcGVydHlOYW1lIDogdGhpc09iamVjdC0+d3JhcHBlZCgpLnN1cHBvcnRlZFByb3BlcnR5
TmFtZXMoKSkKLSAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbVN0cmlu
ZyhzdGF0ZSwgcHJvcGVydHlOYW1lKSk7CisgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50
aWZpZXI6OmZyb21TdHJpbmcodm0sIHByb3BlcnR5TmFtZSkpOwogICAgIEpTT2JqZWN0OjpnZXRP
d25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgc3RhdGUsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwogfQog
CkBAIC0yMjYsMTAgKzIyOCwxMSBAQCBib29sIEpTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2Fi
bGVQcm9wCiAKIGJvb2wgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNB
bmRPdmVycmlkZUJ1aWx0aW5zOjpwdXRCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBz
dGF0ZSwgdW5zaWduZWQgaW5kZXgsIEpTVmFsdWUgdmFsdWUsIGJvb2wpCiB7CisgICAgVk0mIHZt
ID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1l
ZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0FuZE92ZXJyaWRlQnVpbHRpbnMqPihjZWxs
KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAK
LSAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb20oc3RhdGUsIGluZGV4KTsK
KyAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb20odm0sIGluZGV4KTsKICAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHN0YXRlLT52bSgpKTsKICAg
ICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KCpzdGF0ZSwgdmFsdWUp
OwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgdHJ1ZSk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5v
ZGUuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNCw3ICsxMTQs
NyBAQCB0ZW1wbGF0ZTw+IEpTVmFsdWUgSlNUZXN0Tm9kZUNvbnN0cnVjdG9yCiB0ZW1wbGF0ZTw+
IHZvaWQgSlNUZXN0Tm9kZUNvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGllcyhWTSYgdm0s
IEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCiB7CiAgICAgcHV0RGlyZWN0KHZtLCB2
bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdE5vZGU6OnByb3RvdHlwZSh2bSwgZ2xv
YmFsT2JqZWN0KSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IEpTQzo6UHJv
cGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVu
dW0pOwotICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2
aWFsU3RyaW5nKCZ2bSwgU3RyaW5nKCJUZXN0Tm9kZSJfcykpLCBKU0M6OlByb3BlcnR5QXR0cmli
dXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKKyAgICBw
dXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZyh2
bSwgU3RyaW5nKCJUZXN0Tm9kZSJfcykpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25s
eSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKICAgICBwdXREaXJlY3Qodm0s
IHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMCksIEpTQzo6UHJvcGVydHlBdHRy
aWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwogfQog
CkBAIC0xNTAsNDUgKzE1MCw0NSBAQCB2b2lkIEpTVGVzdE5vZGVQcm90b3R5cGU6OmZpbmlzaENy
ZWF0aW9uCiAgICAgYm9vbCBoYXNEaXNhYmxlZFJ1bnRpbWVQcm9wZXJ0aWVzID0gZmFsc2U7CiAg
ICAgaWYgKCFqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QoKSktPnNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKS0+aXNTZWN1cmVDb250ZXh0KCkpIHsKICAgICAgICAgaGFzRGlz
YWJsZWRSdW50aW1lUHJvcGVydGllcyA9IHRydWU7Ci0gICAgICAgIGF1dG8gcHJvcGVydHlOYW1l
ID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENo
YXIqPigiY2FsY3VsYXRlU2VjcmV0UmVzdWx0IiksIHN0cmxlbigiY2FsY3VsYXRlU2VjcmV0UmVz
dWx0IikpOworICAgICAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb21TdHJp
bmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiY2FsY3VsYXRlU2VjcmV0UmVz
dWx0IiksIHN0cmxlbigiY2FsY3VsYXRlU2VjcmV0UmVzdWx0IikpOwogICAgICAgICBWTTo6RGVs
ZXRlUHJvcGVydHlNb2RlU2NvcGUgc2NvcGUodm0sIFZNOjpEZWxldGVQcm9wZXJ0eU1vZGU6Okln
bm9yZUNvbmZpZ3VyYWJsZSk7CiAgICAgICAgIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eSh0aGlz
LCBnbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpLCBwcm9wZXJ0eU5hbWUpOwogICAgIH0KICAg
ICBpZiAoIWpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCgpKS0+c2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpLT5pc1NlY3VyZUNvbnRleHQoKSkgewogICAgICAgICBoYXNEaXNh
YmxlZFJ1bnRpbWVQcm9wZXJ0aWVzID0gdHJ1ZTsKLSAgICAgICAgYXV0byBwcm9wZXJ0eU5hbWUg
PSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hh
cio+KCJnZXRTZWNyZXRCb29sZWFuIiksIHN0cmxlbigiZ2V0U2VjcmV0Qm9vbGVhbiIpKTsKKyAg
ICAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWlu
dGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oImdldFNlY3JldEJvb2xlYW4iKSwgc3RybGVuKCJn
ZXRTZWNyZXRCb29sZWFuIikpOwogICAgICAgICBWTTo6RGVsZXRlUHJvcGVydHlNb2RlU2NvcGUg
c2NvcGUodm0sIFZNOjpEZWxldGVQcm9wZXJ0eU1vZGU6Oklnbm9yZUNvbmZpZ3VyYWJsZSk7CiAg
ICAgICAgIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eSh0aGlzLCBnbG9iYWxPYmplY3QoKS0+Z2xv
YmFsRXhlYygpLCBwcm9wZXJ0eU5hbWUpOwogICAgIH0KICNpZiBFTkFCTEUoVEVTVF9GRUFUVVJF
KQogICAgIGlmICghKGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCgpKS0+
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5pc1NlY3VyZUNvbnRleHQoKSAmJiBSdW50aW1lRW5h
YmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLnRlc3RGZWF0dXJlRW5hYmxlZCgpKSkgewog
ICAgICAgICBoYXNEaXNhYmxlZFJ1bnRpbWVQcm9wZXJ0aWVzID0gdHJ1ZTsKLSAgICAgICAgYXV0
byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBMQ2hhcio+KCJ0ZXN0RmVhdHVyZUdldFNlY3JldEJvb2xlYW4iKSwgc3RybGVu
KCJ0ZXN0RmVhdHVyZUdldFNlY3JldEJvb2xlYW4iKSk7CisgICAgICAgIGF1dG8gcHJvcGVydHlO
YW1lID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBM
Q2hhcio+KCJ0ZXN0RmVhdHVyZUdldFNlY3JldEJvb2xlYW4iKSwgc3RybGVuKCJ0ZXN0RmVhdHVy
ZUdldFNlY3JldEJvb2xlYW4iKSk7CiAgICAgICAgIFZNOjpEZWxldGVQcm9wZXJ0eU1vZGVTY29w
ZSBzY29wZSh2bSwgVk06OkRlbGV0ZVByb3BlcnR5TW9kZTo6SWdub3JlQ29uZmlndXJhYmxlKTsK
ICAgICAgICAgSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KHRoaXMsIGdsb2JhbE9iamVjdCgpLT5n
bG9iYWxFeGVjKCksIHByb3BlcnR5TmFtZSk7CiAgICAgfQogI2VuZGlmCiAgICAgaWYgKCFSdW50
aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLmRvbUl0ZXJhdG9yRW5hYmxlZCgp
KSB7CiAgICAgICAgIGhhc0Rpc2FibGVkUnVudGltZVByb3BlcnRpZXMgPSB0cnVlOwotICAgICAg
ICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCByZWludGVy
cHJldF9jYXN0PGNvbnN0IExDaGFyKj4oImVudHJpZXMiKSwgc3RybGVuKCJlbnRyaWVzIikpOwor
ICAgICAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiZW50cmllcyIpLCBzdHJsZW4oImVudHJpZXMi
KSk7CiAgICAgICAgIFZNOjpEZWxldGVQcm9wZXJ0eU1vZGVTY29wZSBzY29wZSh2bSwgVk06OkRl
bGV0ZVByb3BlcnR5TW9kZTo6SWdub3JlQ29uZmlndXJhYmxlKTsKICAgICAgICAgSlNPYmplY3Q6
OmRlbGV0ZVByb3BlcnR5KHRoaXMsIGdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCksIHByb3Bl
cnR5TmFtZSk7CiAgICAgfQogICAgIGlmICghUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVk
RmVhdHVyZXMoKS5kb21JdGVyYXRvckVuYWJsZWQoKSkgewogICAgICAgICBoYXNEaXNhYmxlZFJ1
bnRpbWVQcm9wZXJ0aWVzID0gdHJ1ZTsKLSAgICAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJr
ZXlzIiksIHN0cmxlbigia2V5cyIpKTsKKyAgICAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oImtl
eXMiKSwgc3RybGVuKCJrZXlzIikpOwogICAgICAgICBWTTo6RGVsZXRlUHJvcGVydHlNb2RlU2Nv
cGUgc2NvcGUodm0sIFZNOjpEZWxldGVQcm9wZXJ0eU1vZGU6Oklnbm9yZUNvbmZpZ3VyYWJsZSk7
CiAgICAgICAgIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eSh0aGlzLCBnbG9iYWxPYmplY3QoKS0+
Z2xvYmFsRXhlYygpLCBwcm9wZXJ0eU5hbWUpOwogICAgIH0KICAgICBpZiAoIVJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkuZG9tSXRlcmF0b3JFbmFibGVkKCkpIHsKICAg
ICAgICAgaGFzRGlzYWJsZWRSdW50aW1lUHJvcGVydGllcyA9IHRydWU7Ci0gICAgICAgIGF1dG8g
cHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgTENoYXIqPigidmFsdWVzIiksIHN0cmxlbigidmFsdWVzIikpOworICAgICAgICBh
dXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgTENoYXIqPigidmFsdWVzIiksIHN0cmxlbigidmFsdWVzIikpOwogICAgICAg
ICBWTTo6RGVsZXRlUHJvcGVydHlNb2RlU2NvcGUgc2NvcGUodm0sIFZNOjpEZWxldGVQcm9wZXJ0
eU1vZGU6Oklnbm9yZUNvbmZpZ3VyYWJsZSk7CiAgICAgICAgIEpTT2JqZWN0OjpkZWxldGVQcm9w
ZXJ0eSh0aGlzLCBnbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpLCBwcm9wZXJ0eU5hbWUpOwog
ICAgIH0KICAgICBpZiAoIVJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCku
ZG9tSXRlcmF0b3JFbmFibGVkKCkpIHsKICAgICAgICAgaGFzRGlzYWJsZWRSdW50aW1lUHJvcGVy
dGllcyA9IHRydWU7Ci0gICAgICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJv
bVN0cmluZygmdm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiZm9yRWFjaCIpLCBz
dHJsZW4oImZvckVhY2giKSk7CisgICAgICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmll
cjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJmb3JFYWNo
IiksIHN0cmxlbigiZm9yRWFjaCIpKTsKICAgICAgICAgVk06OkRlbGV0ZVByb3BlcnR5TW9kZVNj
b3BlIHNjb3BlKHZtLCBWTTo6RGVsZXRlUHJvcGVydHlNb2RlOjpJZ25vcmVDb25maWd1cmFibGUp
OwogICAgICAgICBKU09iamVjdDo6ZGVsZXRlUHJvcGVydHkodGhpcywgZ2xvYmFsT2JqZWN0KCkt
Pmdsb2JhbEV4ZWMoKSwgcHJvcGVydHlOYW1lKTsKICAgICB9CkBAIC0yNzUsNiArMjc1LDcgQEAg
RW5jb2RlZEpTVmFsdWUganNUZXN0Tm9kZU5hbWUoRXhlY1N0YXRlKgogCiBzdGF0aWMgaW5saW5l
IGJvb2wgc2V0SlNUZXN0Tm9kZU5hbWVTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0Tm9k
ZSYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsK
KyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
ICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVW
YWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPihzdGF0ZSwgdmFsdWUpOwpAQCAtNDA5LDcgKzQx
MCw3IEBAIEpTQzo6SlNPYmplY3QqIEpTVGVzdE5vZGU6OnNlcmlhbGl6ZShFeGUKIAogICAgIGF1
dG8gbmFtZVZhbHVlID0ganNUZXN0Tm9kZU5hbWVHZXR0ZXIoc3RhdGUsIHRoaXNPYmplY3QsIHRo
cm93U2NvcGUpOwogICAgIHRocm93U2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKLSAgICByZXN1
bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJuYW1lIiksIG5h
bWVWYWx1ZSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJp
bmcodm0sICJuYW1lIiksIG5hbWVWYWx1ZSk7CiAKICAgICByZXR1cm4gcmVzdWx0OwogfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE9iai5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MzUsNyAr
NDM1LDcgQEAgdGVtcGxhdGU8PiBUZXN0T2JqOjpEaWN0aW9uYXJ5IGNvbnZlcnREaQogICAgIGlm
IChpc051bGxPclVuZGVmaW5lZCkKICAgICAgICAgYW5ub3RhdGVkVHlwZUluU2VxdWVuY2VNZW1i
ZXJWYWx1ZSA9IGpzVW5kZWZpbmVkKCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIGFubm90YXRlZFR5
cGVJblNlcXVlbmNlTWVtYmVyVmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6
OmZyb21TdHJpbmcoJnN0YXRlLCAiYW5ub3RhdGVkVHlwZUluU2VxdWVuY2VNZW1iZXIiKSk7Cisg
ICAgICAgIGFubm90YXRlZFR5cGVJblNlcXVlbmNlTWVtYmVyVmFsdWUgPSBvYmplY3QtPmdldCgm
c3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJhbm5vdGF0ZWRUeXBlSW5TZXF1ZW5j
ZU1lbWJlciIpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0p
OwogICAgIH0KICAgICBpZiAoIWFubm90YXRlZFR5cGVJblNlcXVlbmNlTWVtYmVyVmFsdWUuaXNV
bmRlZmluZWQoKSkgewpAQCAtNDQ2LDcgKzQ0Niw3IEBAIHRlbXBsYXRlPD4gVGVzdE9iajo6RGlj
dGlvbmFyeSBjb252ZXJ0RGkKICAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQpCiAgICAgICAgIGFu
bm90YXRlZFR5cGVJblVuaW9uTWVtYmVyVmFsdWUgPSBqc1VuZGVmaW5lZCgpOwogICAgIGVsc2Ug
ewotICAgICAgICBhbm5vdGF0ZWRUeXBlSW5Vbmlvbk1lbWJlclZhbHVlID0gb2JqZWN0LT5nZXQo
JnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImFubm90YXRlZFR5cGVJblVu
aW9uTWVtYmVyIikpOworICAgICAgICBhbm5vdGF0ZWRUeXBlSW5Vbmlvbk1lbWJlclZhbHVlID0g
b2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiYW5ub3RhdGVk
VHlwZUluVW5pb25NZW1iZXIiKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dT
Y29wZSwgeyB9KTsKICAgICB9CiAgICAgaWYgKCFhbm5vdGF0ZWRUeXBlSW5Vbmlvbk1lbWJlclZh
bHVlLmlzVW5kZWZpbmVkKCkpIHsKQEAgLTQ1Nyw3ICs0NTcsNyBAQCB0ZW1wbGF0ZTw+IFRlc3RP
Ymo6OkRpY3Rpb25hcnkgY29udmVydERpCiAgICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKQogICAg
ICAgICBhbnlUeXBlZGVmVmFsdWVWYWx1ZSA9IGpzVW5kZWZpbmVkKCk7CiAgICAgZWxzZSB7Ci0g
ICAgICAgIGFueVR5cGVkZWZWYWx1ZVZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImFueVR5cGVkZWZWYWx1ZSIpKTsKKyAgICAgICAgYW55
VHlwZWRlZlZhbHVlVmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21T
dHJpbmcodm0sICJhbnlUeXBlZGVmVmFsdWUiKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04odGhyb3dTY29wZSwgeyB9KTsKICAgICB9CiAgICAgaWYgKCFhbnlUeXBlZGVmVmFsdWVWYWx1
ZS5pc1VuZGVmaW5lZCgpKSB7CkBAIC00NjksNyArNDY5LDcgQEAgdGVtcGxhdGU8PiBUZXN0T2Jq
OjpEaWN0aW9uYXJ5IGNvbnZlcnREaQogICAgIGlmIChpc051bGxPclVuZGVmaW5lZCkKICAgICAg
ICAgYW55VmFsdWVWYWx1ZSA9IGpzVW5kZWZpbmVkKCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIGFu
eVZhbHVlVmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmco
JnN0YXRlLCAiYW55VmFsdWUiKSk7CisgICAgICAgIGFueVZhbHVlVmFsdWUgPSBvYmplY3QtPmdl
dCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJhbnlWYWx1ZSIpKTsKICAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0KICAgICBpZiAo
IWFueVZhbHVlVmFsdWUuaXNVbmRlZmluZWQoKSkgewpAQCAtNDgxLDcgKzQ4MSw3IEBAIHRlbXBs
YXRlPD4gVGVzdE9iajo6RGljdGlvbmFyeSBjb252ZXJ0RGkKICAgICBpZiAoaXNOdWxsT3JVbmRl
ZmluZWQpCiAgICAgICAgIGFueVZhbHVlV2l0aE51bGxEZWZhdWx0VmFsdWUgPSBqc1VuZGVmaW5l
ZCgpOwogICAgIGVsc2UgewotICAgICAgICBhbnlWYWx1ZVdpdGhOdWxsRGVmYXVsdFZhbHVlID0g
b2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImFueVZh
bHVlV2l0aE51bGxEZWZhdWx0IikpOworICAgICAgICBhbnlWYWx1ZVdpdGhOdWxsRGVmYXVsdFZh
bHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiYW55
VmFsdWVXaXRoTnVsbERlZmF1bHQiKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgeyB9KTsKICAgICB9CiAgICAgaWYgKCFhbnlWYWx1ZVdpdGhOdWxsRGVmYXVsdFZh
bHVlLmlzVW5kZWZpbmVkKCkpIHsKQEAgLTQ5Myw3ICs0OTMsNyBAQCB0ZW1wbGF0ZTw+IFRlc3RP
Ymo6OkRpY3Rpb25hcnkgY29udmVydERpCiAgICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKQogICAg
ICAgICBib29sZWFuV2l0aERlZmF1bHRWYWx1ZSA9IGpzVW5kZWZpbmVkKCk7CiAgICAgZWxzZSB7
Ci0gICAgICAgIGJvb2xlYW5XaXRoRGVmYXVsdFZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImJvb2xlYW5XaXRoRGVmYXVsdCIpKTsKKyAg
ICAgICAgYm9vbGVhbldpdGhEZWZhdWx0VmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50
aWZpZXI6OmZyb21TdHJpbmcodm0sICJib29sZWFuV2l0aERlZmF1bHQiKSk7CiAgICAgICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICB9CiAgICAgaWYgKCFib29s
ZWFuV2l0aERlZmF1bHRWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7CkBAIC01MDUsNyArNTA1LDcgQEAg
dGVtcGxhdGU8PiBUZXN0T2JqOjpEaWN0aW9uYXJ5IGNvbnZlcnREaQogICAgIGlmIChpc051bGxP
clVuZGVmaW5lZCkKICAgICAgICAgYm9vbGVhbldpdGhvdXREZWZhdWx0VmFsdWUgPSBqc1VuZGVm
aW5lZCgpOwogICAgIGVsc2UgewotICAgICAgICBib29sZWFuV2l0aG91dERlZmF1bHRWYWx1ZSA9
IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJib29s
ZWFuV2l0aG91dERlZmF1bHQiKSk7CisgICAgICAgIGJvb2xlYW5XaXRob3V0RGVmYXVsdFZhbHVl
ID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiYm9vbGVh
bldpdGhvdXREZWZhdWx0IikpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2Nv
cGUsIHsgfSk7CiAgICAgfQogICAgIGlmICghYm9vbGVhbldpdGhvdXREZWZhdWx0VmFsdWUuaXNV
bmRlZmluZWQoKSkgewpAQCAtNTE2LDcgKzUxNiw3IEBAIHRlbXBsYXRlPD4gVGVzdE9iajo6RGlj
dGlvbmFyeSBjb252ZXJ0RGkKICAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQpCiAgICAgICAgIGJ1
ZmZlclNvdXJjZVZhbHVlVmFsdWUgPSBqc1VuZGVmaW5lZCgpOwogICAgIGVsc2UgewotICAgICAg
ICBidWZmZXJTb3VyY2VWYWx1ZVZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKCZzdGF0ZSwgImJ1ZmZlclNvdXJjZVZhbHVlIikpOworICAgICAgICBidWZm
ZXJTb3VyY2VWYWx1ZVZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKHZtLCAiYnVmZmVyU291cmNlVmFsdWUiKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICB9CiAgICAgaWYgKCFidWZmZXJTb3VyY2VWYWx1
ZVZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKQEAgLTUyNyw3ICs1MjcsNyBAQCB0ZW1wbGF0ZTw+IFRl
c3RPYmo6OkRpY3Rpb25hcnkgY29udmVydERpCiAgICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKQog
ICAgICAgICBkaWN0aW9uYXJ5TWVtYmVyVmFsdWUgPSBqc1VuZGVmaW5lZCgpOwogICAgIGVsc2Ug
ewotICAgICAgICBkaWN0aW9uYXJ5TWVtYmVyVmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAiZGljdGlvbmFyeU1lbWJlciIpKTsKKyAgICAg
ICAgZGljdGlvbmFyeU1lbWJlclZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKHZtLCAiZGljdGlvbmFyeU1lbWJlciIpKTsKICAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0KICAgICBpZiAoIWRpY3Rpb25hcnlN
ZW1iZXJWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7CkBAIC01MzgsNyArNTM4LDcgQEAgdGVtcGxhdGU8
PiBUZXN0T2JqOjpEaWN0aW9uYXJ5IGNvbnZlcnREaQogICAgIGlmIChpc051bGxPclVuZGVmaW5l
ZCkKICAgICAgICAgZW51bWVyYXRpb25WYWx1ZVdpdGhEZWZhdWx0VmFsdWUgPSBqc1VuZGVmaW5l
ZCgpOwogICAgIGVsc2UgewotICAgICAgICBlbnVtZXJhdGlvblZhbHVlV2l0aERlZmF1bHRWYWx1
ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJl
bnVtZXJhdGlvblZhbHVlV2l0aERlZmF1bHQiKSk7CisgICAgICAgIGVudW1lcmF0aW9uVmFsdWVX
aXRoRGVmYXVsdFZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKHZtLCAiZW51bWVyYXRpb25WYWx1ZVdpdGhEZWZhdWx0IikpOwogICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgfQogICAgIGlmICghZW51bWVyYXRp
b25WYWx1ZVdpdGhEZWZhdWx0VmFsdWUuaXNVbmRlZmluZWQoKSkgewpAQCAtNTUwLDcgKzU1MCw3
IEBAIHRlbXBsYXRlPD4gVGVzdE9iajo6RGljdGlvbmFyeSBjb252ZXJ0RGkKICAgICBpZiAoaXNO
dWxsT3JVbmRlZmluZWQpCiAgICAgICAgIGVudW1lcmF0aW9uVmFsdWVXaXRoRW1wdHlTdHJpbmdE
ZWZhdWx0VmFsdWUgPSBqc1VuZGVmaW5lZCgpOwogICAgIGVsc2UgewotICAgICAgICBlbnVtZXJh
dGlvblZhbHVlV2l0aEVtcHR5U3RyaW5nRGVmYXVsdFZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRl
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImVudW1lcmF0aW9uVmFsdWVXaXRoRW1w
dHlTdHJpbmdEZWZhdWx0IikpOworICAgICAgICBlbnVtZXJhdGlvblZhbHVlV2l0aEVtcHR5U3Ry
aW5nRGVmYXVsdFZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKHZtLCAiZW51bWVyYXRpb25WYWx1ZVdpdGhFbXB0eVN0cmluZ0RlZmF1bHQiKSk7CiAgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICB9CiAgICAgaWYg
KCFlbnVtZXJhdGlvblZhbHVlV2l0aEVtcHR5U3RyaW5nRGVmYXVsdFZhbHVlLmlzVW5kZWZpbmVk
KCkpIHsKQEAgLTU2Miw3ICs1NjIsNyBAQCB0ZW1wbGF0ZTw+IFRlc3RPYmo6OkRpY3Rpb25hcnkg
Y29udmVydERpCiAgICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKQogICAgICAgICBlbnVtZXJhdGlv
blZhbHVlV2l0aG91dERlZmF1bHRWYWx1ZSA9IGpzVW5kZWZpbmVkKCk7CiAgICAgZWxzZSB7Ci0g
ICAgICAgIGVudW1lcmF0aW9uVmFsdWVXaXRob3V0RGVmYXVsdFZhbHVlID0gb2JqZWN0LT5nZXQo
JnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImVudW1lcmF0aW9uVmFsdWVX
aXRob3V0RGVmYXVsdCIpKTsKKyAgICAgICAgZW51bWVyYXRpb25WYWx1ZVdpdGhvdXREZWZhdWx0
VmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJl
bnVtZXJhdGlvblZhbHVlV2l0aG91dERlZmF1bHQiKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICB9CiAgICAgaWYgKCFlbnVtZXJhdGlvblZhbHVl
V2l0aG91dERlZmF1bHRWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7CkBAIC01NzMsNyArNTczLDcgQEAg
dGVtcGxhdGU8PiBUZXN0T2JqOjpEaWN0aW9uYXJ5IGNvbnZlcnREaQogICAgIGlmIChpc051bGxP
clVuZGVmaW5lZCkKICAgICAgICAgZm9vQWxpYXNWYWx1ZSA9IGpzVW5kZWZpbmVkKCk7CiAgICAg
ZWxzZSB7Ci0gICAgICAgIGZvb0FsaWFzVmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50
aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAiZm9vQWxpYXMiKSk7CisgICAgICAgIGZvb0FsaWFz
VmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJm
b29BbGlhcyIpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0p
OwogICAgIH0KICAgICBpZiAoIWZvb0FsaWFzVmFsdWUuaXNVbmRlZmluZWQoKSkgewpAQCAtNTg1
LDcgKzU4NSw3IEBAIHRlbXBsYXRlPD4gVGVzdE9iajo6RGljdGlvbmFyeSBjb252ZXJ0RGkKICAg
ICBpZiAoaXNOdWxsT3JVbmRlZmluZWQpCiAgICAgICAgIGZvb1dpdGhEZWZhdWx0QWxpYXNWYWx1
ZSA9IGpzVW5kZWZpbmVkKCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIGZvb1dpdGhEZWZhdWx0QWxp
YXNWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3Rh
dGUsICJmb29XaXRoRGVmYXVsdEFsaWFzIikpOworICAgICAgICBmb29XaXRoRGVmYXVsdEFsaWFz
VmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJm
b29XaXRoRGVmYXVsdEFsaWFzIikpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIHsgfSk7CiAgICAgfQogICAgIGlmICghZm9vV2l0aERlZmF1bHRBbGlhc1ZhbHVlLmlz
VW5kZWZpbmVkKCkpIHsKQEAgLTU5Nyw3ICs1OTcsNyBAQCB0ZW1wbGF0ZTw+IFRlc3RPYmo6OkRp
Y3Rpb25hcnkgY29udmVydERpCiAgICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKQogICAgICAgICBp
bnRlZ2VyVmFsdWUgPSBqc1VuZGVmaW5lZCgpOwogICAgIGVsc2UgewotICAgICAgICBpbnRlZ2Vy
VmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRl
LCAiaW50ZWdlciIpKTsKKyAgICAgICAgaW50ZWdlclZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRl
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiaW50ZWdlciIpKTsKICAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0KICAgICBpZiAoIWludGVnZXJW
YWx1ZS5pc1VuZGVmaW5lZCgpKSB7CkBAIC02MDgsNyArNjA4LDcgQEAgdGVtcGxhdGU8PiBUZXN0
T2JqOjpEaWN0aW9uYXJ5IGNvbnZlcnREaQogICAgIGlmIChpc051bGxPclVuZGVmaW5lZCkKICAg
ICAgICAgaW50ZWdlcldpdGhEZWZhdWx0VmFsdWUgPSBqc1VuZGVmaW5lZCgpOwogICAgIGVsc2Ug
ewotICAgICAgICBpbnRlZ2VyV2l0aERlZmF1bHRWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJpbnRlZ2VyV2l0aERlZmF1bHQiKSk7Cisg
ICAgICAgIGludGVnZXJXaXRoRGVmYXVsdFZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiaW50ZWdlcldpdGhEZWZhdWx0IikpOwogICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgfQogICAgIGlmICghaW50
ZWdlcldpdGhEZWZhdWx0VmFsdWUuaXNVbmRlZmluZWQoKSkgewpAQCAtNjIwLDcgKzYyMCw3IEBA
IHRlbXBsYXRlPD4gVGVzdE9iajo6RGljdGlvbmFyeSBjb252ZXJ0RGkKICAgICBpZiAoaXNOdWxs
T3JVbmRlZmluZWQpCiAgICAgICAgIGxhcmdlSW50ZWdlclZhbHVlID0ganNVbmRlZmluZWQoKTsK
ICAgICBlbHNlIHsKLSAgICAgICAgbGFyZ2VJbnRlZ2VyVmFsdWUgPSBvYmplY3QtPmdldCgmc3Rh
dGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAibGFyZ2VJbnRlZ2VyIikpOworICAg
ICAgICBsYXJnZUludGVnZXJWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZyh2bSwgImxhcmdlSW50ZWdlciIpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0KICAgICBpZiAoIWxhcmdlSW50ZWdlclZhbHVl
LmlzVW5kZWZpbmVkKCkpIHsKQEAgLTYzMSw3ICs2MzEsNyBAQCB0ZW1wbGF0ZTw+IFRlc3RPYmo6
OkRpY3Rpb25hcnkgY29udmVydERpCiAgICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKQogICAgICAg
ICBsYXJnZUludGVnZXJXaXRoRGVmYXVsdFZhbHVlID0ganNVbmRlZmluZWQoKTsKICAgICBlbHNl
IHsKLSAgICAgICAgbGFyZ2VJbnRlZ2VyV2l0aERlZmF1bHRWYWx1ZSA9IG9iamVjdC0+Z2V0KCZz
dGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJsYXJnZUludGVnZXJXaXRoRGVm
YXVsdCIpKTsKKyAgICAgICAgbGFyZ2VJbnRlZ2VyV2l0aERlZmF1bHRWYWx1ZSA9IG9iamVjdC0+
Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImxhcmdlSW50ZWdlcldpdGhE
ZWZhdWx0IikpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7
CiAgICAgfQogICAgIGlmICghbGFyZ2VJbnRlZ2VyV2l0aERlZmF1bHRWYWx1ZS5pc1VuZGVmaW5l
ZCgpKSB7CkBAIC02NDMsNyArNjQzLDcgQEAgdGVtcGxhdGU8PiBUZXN0T2JqOjpEaWN0aW9uYXJ5
IGNvbnZlcnREaQogICAgIGlmIChpc051bGxPclVuZGVmaW5lZCkKICAgICAgICAgbnVsbGFibGVF
bnVtVmFsdWUgPSBqc1VuZGVmaW5lZCgpOwogICAgIGVsc2UgewotICAgICAgICBudWxsYWJsZUVu
dW1WYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3Rh
dGUsICJudWxsYWJsZUVudW0iKSk7CisgICAgICAgIG51bGxhYmxlRW51bVZhbHVlID0gb2JqZWN0
LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAibnVsbGFibGVFbnVtIikp
OwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgfQog
ICAgIGlmICghbnVsbGFibGVFbnVtVmFsdWUuaXNVbmRlZmluZWQoKSkgewpAQCAtNjU1LDcgKzY1
NSw3IEBAIHRlbXBsYXRlPD4gVGVzdE9iajo6RGljdGlvbmFyeSBjb252ZXJ0RGkKICAgICBpZiAo
aXNOdWxsT3JVbmRlZmluZWQpCiAgICAgICAgIG51bGxhYmxlSW50ZWdlcldpdGhEZWZhdWx0VmFs
dWUgPSBqc1VuZGVmaW5lZCgpOwogICAgIGVsc2UgewotICAgICAgICBudWxsYWJsZUludGVnZXJX
aXRoRGVmYXVsdFZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKCZzdGF0ZSwgIm51bGxhYmxlSW50ZWdlcldpdGhEZWZhdWx0IikpOworICAgICAgICBudWxs
YWJsZUludGVnZXJXaXRoRGVmYXVsdFZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKHZtLCAibnVsbGFibGVJbnRlZ2VyV2l0aERlZmF1bHQiKSk7CiAgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICB9CiAgICAgaWYg
KCFudWxsYWJsZUludGVnZXJXaXRoRGVmYXVsdFZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKQEAgLTY2
Nyw3ICs2NjcsNyBAQCB0ZW1wbGF0ZTw+IFRlc3RPYmo6OkRpY3Rpb25hcnkgY29udmVydERpCiAg
ICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKQogICAgICAgICBudWxsYWJsZU5vZGVWYWx1ZSA9IGpz
VW5kZWZpbmVkKCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIG51bGxhYmxlTm9kZVZhbHVlID0gb2Jq
ZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgIm51bGxhYmxl
Tm9kZSIpKTsKKyAgICAgICAgbnVsbGFibGVOb2RlVmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUs
IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJudWxsYWJsZU5vZGUiKSk7CiAgICAgICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICB9CiAgICAgaWYgKCFudWxs
YWJsZU5vZGVWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7CkBAIC02NzksNyArNjc5LDcgQEAgdGVtcGxh
dGU8PiBUZXN0T2JqOjpEaWN0aW9uYXJ5IGNvbnZlcnREaQogICAgIGlmIChpc051bGxPclVuZGVm
aW5lZCkKICAgICAgICAgbnVsbGFibGVTdHJpbmdXaXRoRGVmYXVsdFZhbHVlID0ganNVbmRlZmlu
ZWQoKTsKICAgICBlbHNlIHsKLSAgICAgICAgbnVsbGFibGVTdHJpbmdXaXRoRGVmYXVsdFZhbHVl
ID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgIm51
bGxhYmxlU3RyaW5nV2l0aERlZmF1bHQiKSk7CisgICAgICAgIG51bGxhYmxlU3RyaW5nV2l0aERl
ZmF1bHRWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2
bSwgIm51bGxhYmxlU3RyaW5nV2l0aERlZmF1bHQiKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICB9CiAgICAgaWYgKCFudWxsYWJsZVN0cmluZ1dp
dGhEZWZhdWx0VmFsdWUuaXNVbmRlZmluZWQoKSkgewpAQCAtNjkxLDcgKzY5MSw3IEBAIHRlbXBs
YXRlPD4gVGVzdE9iajo6RGljdGlvbmFyeSBjb252ZXJ0RGkKICAgICBpZiAoaXNOdWxsT3JVbmRl
ZmluZWQpCiAgICAgICAgIG51bGxhYmxlVW5pb25NZW1iZXJWYWx1ZSA9IGpzVW5kZWZpbmVkKCk7
CiAgICAgZWxzZSB7Ci0gICAgICAgIG51bGxhYmxlVW5pb25NZW1iZXJWYWx1ZSA9IG9iamVjdC0+
Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJudWxsYWJsZVVuaW9u
TWVtYmVyIikpOworICAgICAgICBudWxsYWJsZVVuaW9uTWVtYmVyVmFsdWUgPSBvYmplY3QtPmdl
dCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJudWxsYWJsZVVuaW9uTWVtYmVy
IikpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAg
fQogICAgIGlmICghbnVsbGFibGVVbmlvbk1lbWJlclZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKQEAg
LTcwMyw3ICs3MDMsNyBAQCB0ZW1wbGF0ZTw+IFRlc3RPYmo6OkRpY3Rpb25hcnkgY29udmVydERp
CiAgICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKQogICAgICAgICByZXF1aXJlZEJ1ZmZlclNvdXJj
ZVZhbHVlVmFsdWUgPSBqc1VuZGVmaW5lZCgpOwogICAgIGVsc2UgewotICAgICAgICByZXF1aXJl
ZEJ1ZmZlclNvdXJjZVZhbHVlVmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6
OmZyb21TdHJpbmcoJnN0YXRlLCAicmVxdWlyZWRCdWZmZXJTb3VyY2VWYWx1ZSIpKTsKKyAgICAg
ICAgcmVxdWlyZWRCdWZmZXJTb3VyY2VWYWx1ZVZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAicmVxdWlyZWRCdWZmZXJTb3VyY2VWYWx1ZSIpKTsK
ICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0KICAg
ICBpZiAoIXJlcXVpcmVkQnVmZmVyU291cmNlVmFsdWVWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7CkBA
IC03MTcsNyArNzE3LDcgQEAgdGVtcGxhdGU8PiBUZXN0T2JqOjpEaWN0aW9uYXJ5IGNvbnZlcnRE
aQogICAgIGlmIChpc051bGxPclVuZGVmaW5lZCkKICAgICAgICAgcmVzdHJpY3RlZERvdWJsZVZh
bHVlID0ganNVbmRlZmluZWQoKTsKICAgICBlbHNlIHsKLSAgICAgICAgcmVzdHJpY3RlZERvdWJs
ZVZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0
ZSwgInJlc3RyaWN0ZWREb3VibGUiKSk7CisgICAgICAgIHJlc3RyaWN0ZWREb3VibGVWYWx1ZSA9
IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInJlc3RyaWN0
ZWREb3VibGUiKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9
KTsKICAgICB9CiAgICAgaWYgKCFyZXN0cmljdGVkRG91YmxlVmFsdWUuaXNVbmRlZmluZWQoKSkg
ewpAQCAtNzI4LDcgKzcyOCw3IEBAIHRlbXBsYXRlPD4gVGVzdE9iajo6RGljdGlvbmFyeSBjb252
ZXJ0RGkKICAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQpCiAgICAgICAgIHJlc3RyaWN0ZWREb3Vi
bGVXaXRoRGVmYXVsdFZhbHVlID0ganNVbmRlZmluZWQoKTsKICAgICBlbHNlIHsKLSAgICAgICAg
cmVzdHJpY3RlZERvdWJsZVdpdGhEZWZhdWx0VmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAicmVzdHJpY3RlZERvdWJsZVdpdGhEZWZhdWx0
IikpOworICAgICAgICByZXN0cmljdGVkRG91YmxlV2l0aERlZmF1bHRWYWx1ZSA9IG9iamVjdC0+
Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInJlc3RyaWN0ZWREb3VibGVX
aXRoRGVmYXVsdCIpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7
IH0pOwogICAgIH0KICAgICBpZiAoIXJlc3RyaWN0ZWREb3VibGVXaXRoRGVmYXVsdFZhbHVlLmlz
VW5kZWZpbmVkKCkpIHsKQEAgLTc0MCw3ICs3NDAsNyBAQCB0ZW1wbGF0ZTw+IFRlc3RPYmo6OkRp
Y3Rpb25hcnkgY29udmVydERpCiAgICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKQogICAgICAgICBy
ZXN0cmljdGVkRmxvYXRWYWx1ZSA9IGpzVW5kZWZpbmVkKCk7CiAgICAgZWxzZSB7Ci0gICAgICAg
IHJlc3RyaWN0ZWRGbG9hdFZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKCZzdGF0ZSwgInJlc3RyaWN0ZWRGbG9hdCIpKTsKKyAgICAgICAgcmVzdHJpY3Rl
ZEZsb2F0VmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmco
dm0sICJyZXN0cmljdGVkRmxvYXQiKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgeyB9KTsKICAgICB9CiAgICAgaWYgKCFyZXN0cmljdGVkRmxvYXRWYWx1ZS5pc1Vu
ZGVmaW5lZCgpKSB7CkBAIC03NTEsNyArNzUxLDcgQEAgdGVtcGxhdGU8PiBUZXN0T2JqOjpEaWN0
aW9uYXJ5IGNvbnZlcnREaQogICAgIGlmIChpc051bGxPclVuZGVmaW5lZCkKICAgICAgICAgcmVz
dHJpY3RlZEZsb2F0V2l0aERlZmF1bHRWYWx1ZSA9IGpzVW5kZWZpbmVkKCk7CiAgICAgZWxzZSB7
Ci0gICAgICAgIHJlc3RyaWN0ZWRGbG9hdFdpdGhEZWZhdWx0VmFsdWUgPSBvYmplY3QtPmdldCgm
c3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAicmVzdHJpY3RlZEZsb2F0V2l0
aERlZmF1bHQiKSk7CisgICAgICAgIHJlc3RyaWN0ZWRGbG9hdFdpdGhEZWZhdWx0VmFsdWUgPSBv
YmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJyZXN0cmljdGVk
RmxvYXRXaXRoRGVmYXVsdCIpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCB7IH0pOwogICAgIH0KICAgICBpZiAoIXJlc3RyaWN0ZWRGbG9hdFdpdGhEZWZhdWx0VmFs
dWUuaXNVbmRlZmluZWQoKSkgewpAQCAtNzYzLDcgKzc2Myw3IEBAIHRlbXBsYXRlPD4gVGVzdE9i
ajo6RGljdGlvbmFyeSBjb252ZXJ0RGkKICAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQpCiAgICAg
ICAgIHNlcXVlbmNlT2ZTdHJpbmdzVmFsdWUgPSBqc1VuZGVmaW5lZCgpOwogICAgIGVsc2Ugewot
ICAgICAgICBzZXF1ZW5jZU9mU3RyaW5nc1ZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgInNlcXVlbmNlT2ZTdHJpbmdzIikpOworICAgICAg
ICBzZXF1ZW5jZU9mU3RyaW5nc1ZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKHZtLCAic2VxdWVuY2VPZlN0cmluZ3MiKSk7CiAgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICB9CiAgICAgaWYgKCFzZXF1ZW5jZU9m
U3RyaW5nc1ZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKQEAgLTc3NCw3ICs3NzQsNyBAQCB0ZW1wbGF0
ZTw+IFRlc3RPYmo6OkRpY3Rpb25hcnkgY29udmVydERpCiAgICAgaWYgKGlzTnVsbE9yVW5kZWZp
bmVkKQogICAgICAgICBzbWFsbEludGVnZXJDbGFtcGVkVmFsdWUgPSBqc1VuZGVmaW5lZCgpOwog
ICAgIGVsc2UgewotICAgICAgICBzbWFsbEludGVnZXJDbGFtcGVkVmFsdWUgPSBvYmplY3QtPmdl
dCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAic21hbGxJbnRlZ2VyQ2xh
bXBlZCIpKTsKKyAgICAgICAgc21hbGxJbnRlZ2VyQ2xhbXBlZFZhbHVlID0gb2JqZWN0LT5nZXQo
JnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAic21hbGxJbnRlZ2VyQ2xhbXBlZCIp
KTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0K
ICAgICBpZiAoIXNtYWxsSW50ZWdlckNsYW1wZWRWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7CkBAIC03
ODUsNyArNzg1LDcgQEAgdGVtcGxhdGU8PiBUZXN0T2JqOjpEaWN0aW9uYXJ5IGNvbnZlcnREaQog
ICAgIGlmIChpc051bGxPclVuZGVmaW5lZCkKICAgICAgICAgc21hbGxJbnRlZ2VyV2l0aERlZmF1
bHRWYWx1ZSA9IGpzVW5kZWZpbmVkKCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIHNtYWxsSW50ZWdl
cldpdGhEZWZhdWx0VmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21T
dHJpbmcoJnN0YXRlLCAic21hbGxJbnRlZ2VyV2l0aERlZmF1bHQiKSk7CisgICAgICAgIHNtYWxs
SW50ZWdlcldpdGhEZWZhdWx0VmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6
OmZyb21TdHJpbmcodm0sICJzbWFsbEludGVnZXJXaXRoRGVmYXVsdCIpKTsKICAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0KICAgICBpZiAoIXNtYWxs
SW50ZWdlcldpdGhEZWZhdWx0VmFsdWUuaXNVbmRlZmluZWQoKSkgewpAQCAtNzk2LDcgKzc5Niw3
IEBAIHRlbXBsYXRlPD4gVGVzdE9iajo6RGljdGlvbmFyeSBjb252ZXJ0RGkKICAgICBpZiAoaXNO
dWxsT3JVbmRlZmluZWQpCiAgICAgICAgIHNtYWxsVW5zaWduZWRJbnRlZ2VyRW5mb3JjZWRSYW5n
ZVZhbHVlID0ganNVbmRlZmluZWQoKTsKICAgICBlbHNlIHsKLSAgICAgICAgc21hbGxVbnNpZ25l
ZEludGVnZXJFbmZvcmNlZFJhbmdlVmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAic21hbGxVbnNpZ25lZEludGVnZXJFbmZvcmNlZFJhbmdl
IikpOworICAgICAgICBzbWFsbFVuc2lnbmVkSW50ZWdlckVuZm9yY2VkUmFuZ2VWYWx1ZSA9IG9i
amVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInNtYWxsVW5zaWdu
ZWRJbnRlZ2VyRW5mb3JjZWRSYW5nZSIpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCB7IH0pOwogICAgIH0KICAgICBpZiAoIXNtYWxsVW5zaWduZWRJbnRlZ2VyRW5m
b3JjZWRSYW5nZVZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKQEAgLTgwNyw3ICs4MDcsNyBAQCB0ZW1w
bGF0ZTw+IFRlc3RPYmo6OkRpY3Rpb25hcnkgY29udmVydERpCiAgICAgaWYgKGlzTnVsbE9yVW5k
ZWZpbmVkKQogICAgICAgICBzbWFsbFVuc2lnbmVkSW50ZWdlcldpdGhEZWZhdWx0VmFsdWUgPSBq
c1VuZGVmaW5lZCgpOwogICAgIGVsc2UgewotICAgICAgICBzbWFsbFVuc2lnbmVkSW50ZWdlcldp
dGhEZWZhdWx0VmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJp
bmcoJnN0YXRlLCAic21hbGxVbnNpZ25lZEludGVnZXJXaXRoRGVmYXVsdCIpKTsKKyAgICAgICAg
c21hbGxVbnNpZ25lZEludGVnZXJXaXRoRGVmYXVsdFZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRl
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAic21hbGxVbnNpZ25lZEludGVnZXJXaXRoRGVm
YXVsdCIpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwog
ICAgIH0KICAgICBpZiAoIXNtYWxsVW5zaWduZWRJbnRlZ2VyV2l0aERlZmF1bHRWYWx1ZS5pc1Vu
ZGVmaW5lZCgpKSB7CkBAIC04MTksNyArODE5LDcgQEAgdGVtcGxhdGU8PiBUZXN0T2JqOjpEaWN0
aW9uYXJ5IGNvbnZlcnREaQogICAgIGlmIChpc051bGxPclVuZGVmaW5lZCkKICAgICAgICAgc3Ry
aW5nVHJlYXROdWxsQXNFbXB0eVN0cmluZ1ZhbHVlID0ganNVbmRlZmluZWQoKTsKICAgICBlbHNl
IHsKLSAgICAgICAgc3RyaW5nVHJlYXROdWxsQXNFbXB0eVN0cmluZ1ZhbHVlID0gb2JqZWN0LT5n
ZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgInN0cmluZ1RyZWF0TnVs
bEFzRW1wdHlTdHJpbmciKSk7CisgICAgICAgIHN0cmluZ1RyZWF0TnVsbEFzRW1wdHlTdHJpbmdW
YWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInN0
cmluZ1RyZWF0TnVsbEFzRW1wdHlTdHJpbmciKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04odGhyb3dTY29wZSwgeyB9KTsKICAgICB9CiAgICAgaWYgKCFzdHJpbmdUcmVhdE51bGxBc0Vt
cHR5U3RyaW5nVmFsdWUuaXNVbmRlZmluZWQoKSkgewpAQCAtODMwLDcgKzgzMCw3IEBAIHRlbXBs
YXRlPD4gVGVzdE9iajo6RGljdGlvbmFyeSBjb252ZXJ0RGkKICAgICBpZiAoaXNOdWxsT3JVbmRl
ZmluZWQpCiAgICAgICAgIHN0cmluZ1dpdGhEZWZhdWx0VmFsdWUgPSBqc1VuZGVmaW5lZCgpOwog
ICAgIGVsc2UgewotICAgICAgICBzdHJpbmdXaXRoRGVmYXVsdFZhbHVlID0gb2JqZWN0LT5nZXQo
JnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgInN0cmluZ1dpdGhEZWZhdWx0
IikpOworICAgICAgICBzdHJpbmdXaXRoRGVmYXVsdFZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRl
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAic3RyaW5nV2l0aERlZmF1bHQiKSk7CiAgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICB9CiAgICAgaWYg
KCFzdHJpbmdXaXRoRGVmYXVsdFZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKQEAgLTg0Miw3ICs4NDIs
NyBAQCB0ZW1wbGF0ZTw+IFRlc3RPYmo6OkRpY3Rpb25hcnkgY29udmVydERpCiAgICAgaWYgKGlz
TnVsbE9yVW5kZWZpbmVkKQogICAgICAgICBzdHJpbmdXaXRob3V0RGVmYXVsdFZhbHVlID0ganNV
bmRlZmluZWQoKTsKICAgICBlbHNlIHsKLSAgICAgICAgc3RyaW5nV2l0aG91dERlZmF1bHRWYWx1
ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJz
dHJpbmdXaXRob3V0RGVmYXVsdCIpKTsKKyAgICAgICAgc3RyaW5nV2l0aG91dERlZmF1bHRWYWx1
ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInN0cmlu
Z1dpdGhvdXREZWZhdWx0IikpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2Nv
cGUsIHsgfSk7CiAgICAgfQogICAgIGlmICghc3RyaW5nV2l0aG91dERlZmF1bHRWYWx1ZS5pc1Vu
ZGVmaW5lZCgpKSB7CkBAIC04NTMsNyArODUzLDcgQEAgdGVtcGxhdGU8PiBUZXN0T2JqOjpEaWN0
aW9uYXJ5IGNvbnZlcnREaQogICAgIGlmIChpc051bGxPclVuZGVmaW5lZCkKICAgICAgICAgdW5p
b25NZW1iZXJWYWx1ZSA9IGpzVW5kZWZpbmVkKCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIHVuaW9u
TWVtYmVyVmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmco
JnN0YXRlLCAidW5pb25NZW1iZXIiKSk7CisgICAgICAgIHVuaW9uTWVtYmVyVmFsdWUgPSBvYmpl
Y3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJ1bmlvbk1lbWJlciIp
KTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0K
ICAgICBpZiAoIXVuaW9uTWVtYmVyVmFsdWUuaXNVbmRlZmluZWQoKSkgewpAQCAtODY0LDcgKzg2
NCw3IEBAIHRlbXBsYXRlPD4gVGVzdE9iajo6RGljdGlvbmFyeSBjb252ZXJ0RGkKICAgICBpZiAo
aXNOdWxsT3JVbmRlZmluZWQpCiAgICAgICAgIHVucmVzdHJpY3RlZERvdWJsZVZhbHVlID0ganNV
bmRlZmluZWQoKTsKICAgICBlbHNlIHsKLSAgICAgICAgdW5yZXN0cmljdGVkRG91YmxlVmFsdWUg
PSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAidW5y
ZXN0cmljdGVkRG91YmxlIikpOworICAgICAgICB1bnJlc3RyaWN0ZWREb3VibGVWYWx1ZSA9IG9i
amVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInVucmVzdHJpY3Rl
ZERvdWJsZSIpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0p
OwogICAgIH0KICAgICBpZiAoIXVucmVzdHJpY3RlZERvdWJsZVZhbHVlLmlzVW5kZWZpbmVkKCkp
IHsKQEAgLTg3NSw3ICs4NzUsNyBAQCB0ZW1wbGF0ZTw+IFRlc3RPYmo6OkRpY3Rpb25hcnkgY29u
dmVydERpCiAgICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKQogICAgICAgICB1bnJlc3RyaWN0ZWRE
b3VibGVXaXRoRGVmYXVsdFZhbHVlID0ganNVbmRlZmluZWQoKTsKICAgICBlbHNlIHsKLSAgICAg
ICAgdW5yZXN0cmljdGVkRG91YmxlV2l0aERlZmF1bHRWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0
ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJ1bnJlc3RyaWN0ZWREb3VibGVXaXRo
RGVmYXVsdCIpKTsKKyAgICAgICAgdW5yZXN0cmljdGVkRG91YmxlV2l0aERlZmF1bHRWYWx1ZSA9
IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInVucmVzdHJp
Y3RlZERvdWJsZVdpdGhEZWZhdWx0IikpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIHsgfSk7CiAgICAgfQogICAgIGlmICghdW5yZXN0cmljdGVkRG91YmxlV2l0aERl
ZmF1bHRWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7CkBAIC04ODcsNyArODg3LDcgQEAgdGVtcGxhdGU8
PiBUZXN0T2JqOjpEaWN0aW9uYXJ5IGNvbnZlcnREaQogICAgIGlmIChpc051bGxPclVuZGVmaW5l
ZCkKICAgICAgICAgdW5yZXN0cmljdGVkRmxvYXRWYWx1ZSA9IGpzVW5kZWZpbmVkKCk7CiAgICAg
ZWxzZSB7Ci0gICAgICAgIHVucmVzdHJpY3RlZEZsb2F0VmFsdWUgPSBvYmplY3QtPmdldCgmc3Rh
dGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAidW5yZXN0cmljdGVkRmxvYXQiKSk7
CisgICAgICAgIHVucmVzdHJpY3RlZEZsb2F0VmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJ1bnJlc3RyaWN0ZWRGbG9hdCIpKTsKICAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0KICAgICBpZiAoIXVu
cmVzdHJpY3RlZEZsb2F0VmFsdWUuaXNVbmRlZmluZWQoKSkgewpAQCAtODk4LDcgKzg5OCw3IEBA
IHRlbXBsYXRlPD4gVGVzdE9iajo6RGljdGlvbmFyeSBjb252ZXJ0RGkKICAgICBpZiAoaXNOdWxs
T3JVbmRlZmluZWQpCiAgICAgICAgIHVucmVzdHJpY3RlZEZsb2F0V2l0aERlZmF1bHRWYWx1ZSA9
IGpzVW5kZWZpbmVkKCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIHVucmVzdHJpY3RlZEZsb2F0V2l0
aERlZmF1bHRWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zygmc3RhdGUsICJ1bnJlc3RyaWN0ZWRGbG9hdFdpdGhEZWZhdWx0IikpOworICAgICAgICB1bnJl
c3RyaWN0ZWRGbG9hdFdpdGhEZWZhdWx0VmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50
aWZpZXI6OmZyb21TdHJpbmcodm0sICJ1bnJlc3RyaWN0ZWRGbG9hdFdpdGhEZWZhdWx0IikpOwog
ICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgfQogICAg
IGlmICghdW5yZXN0cmljdGVkRmxvYXRXaXRoRGVmYXVsdFZhbHVlLmlzVW5kZWZpbmVkKCkpIHsK
QEAgLTkxMCw3ICs5MTAsNyBAQCB0ZW1wbGF0ZTw+IFRlc3RPYmo6OkRpY3Rpb25hcnkgY29udmVy
dERpCiAgICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKQogICAgICAgICB1bnNpZ25lZEludGVnZXJW
YWx1ZSA9IGpzVW5kZWZpbmVkKCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIHVuc2lnbmVkSW50ZWdl
clZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0
ZSwgInVuc2lnbmVkSW50ZWdlciIpKTsKKyAgICAgICAgdW5zaWduZWRJbnRlZ2VyVmFsdWUgPSBv
YmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJ1bnNpZ25lZElu
dGVnZXIiKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsK
ICAgICB9CiAgICAgaWYgKCF1bnNpZ25lZEludGVnZXJWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7CkBA
IC05MjEsNyArOTIxLDcgQEAgdGVtcGxhdGU8PiBUZXN0T2JqOjpEaWN0aW9uYXJ5IGNvbnZlcnRE
aQogICAgIGlmIChpc051bGxPclVuZGVmaW5lZCkKICAgICAgICAgdW5zaWduZWRJbnRlZ2VyV2l0
aERlZmF1bHRWYWx1ZSA9IGpzVW5kZWZpbmVkKCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIHVuc2ln
bmVkSW50ZWdlcldpdGhEZWZhdWx0VmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAidW5zaWduZWRJbnRlZ2VyV2l0aERlZmF1bHQiKSk7Cisg
ICAgICAgIHVuc2lnbmVkSW50ZWdlcldpdGhEZWZhdWx0VmFsdWUgPSBvYmplY3QtPmdldCgmc3Rh
dGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJ1bnNpZ25lZEludGVnZXJXaXRoRGVmYXVs
dCIpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAg
IH0KICAgICBpZiAoIXVuc2lnbmVkSW50ZWdlcldpdGhEZWZhdWx0VmFsdWUuaXNVbmRlZmluZWQo
KSkgewpAQCAtOTMzLDcgKzkzMyw3IEBAIHRlbXBsYXRlPD4gVGVzdE9iajo6RGljdGlvbmFyeSBj
b252ZXJ0RGkKICAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQpCiAgICAgICAgIHVuc2lnbmVkTGFy
Z2VJbnRlZ2VyVmFsdWUgPSBqc1VuZGVmaW5lZCgpOwogICAgIGVsc2UgewotICAgICAgICB1bnNp
Z25lZExhcmdlSW50ZWdlclZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKCZzdGF0ZSwgInVuc2lnbmVkTGFyZ2VJbnRlZ2VyIikpOworICAgICAgICB1bnNp
Z25lZExhcmdlSW50ZWdlclZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCAidW5zaWduZWRMYXJnZUludGVnZXIiKSk7CiAgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICB9CiAgICAgaWYgKCF1bnNpZ25lZExh
cmdlSW50ZWdlclZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKQEAgLTk0NCw3ICs5NDQsNyBAQCB0ZW1w
bGF0ZTw+IFRlc3RPYmo6OkRpY3Rpb25hcnkgY29udmVydERpCiAgICAgaWYgKGlzTnVsbE9yVW5k
ZWZpbmVkKQogICAgICAgICB1bnNpZ25lZExhcmdlSW50ZWdlcldpdGhEZWZhdWx0VmFsdWUgPSBq
c1VuZGVmaW5lZCgpOwogICAgIGVsc2UgewotICAgICAgICB1bnNpZ25lZExhcmdlSW50ZWdlcldp
dGhEZWZhdWx0VmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJp
bmcoJnN0YXRlLCAidW5zaWduZWRMYXJnZUludGVnZXJXaXRoRGVmYXVsdCIpKTsKKyAgICAgICAg
dW5zaWduZWRMYXJnZUludGVnZXJXaXRoRGVmYXVsdFZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRl
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAidW5zaWduZWRMYXJnZUludGVnZXJXaXRoRGVm
YXVsdCIpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwog
ICAgIH0KICAgICBpZiAoIXVuc2lnbmVkTGFyZ2VJbnRlZ2VyV2l0aERlZmF1bHRWYWx1ZS5pc1Vu
ZGVmaW5lZCgpKSB7CkBAIC05NjMsMTM2ICs5NjMsMTM2IEBAIEpTQzo6SlNPYmplY3QqIGNvbnZl
cnREaWN0aW9uYXJ5VG9KUyhKU0MKIAogICAgIGlmICghSURMU2VxdWVuY2U8SURMQ2xhbXBBZGFw
dG9yPElETExvbmc+Pjo6aXNOdWxsVmFsdWUoZGljdGlvbmFyeS5hbm5vdGF0ZWRUeXBlSW5TZXF1
ZW5jZU1lbWJlcikpIHsKICAgICAgICAgYXV0byBhbm5vdGF0ZWRUeXBlSW5TZXF1ZW5jZU1lbWJl
clZhbHVlID0gdG9KUzxJRExTZXF1ZW5jZTxJRExDbGFtcEFkYXB0b3I8SURMTG9uZz4+PihzdGF0
ZSwgZ2xvYmFsT2JqZWN0LCBJRExTZXF1ZW5jZTxJRExDbGFtcEFkYXB0b3I8SURMTG9uZz4+Ojpl
eHRyYWN0VmFsdWVGcm9tTnVsbGFibGUoZGljdGlvbmFyeS5hbm5vdGF0ZWRUeXBlSW5TZXF1ZW5j
ZU1lbWJlcikpOwotICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKCZ2bSwgImFubm90YXRlZFR5cGVJblNlcXVlbmNlTWVtYmVyIiksIGFubm90
YXRlZFR5cGVJblNlcXVlbmNlTWVtYmVyVmFsdWUpOworICAgICAgICByZXN1bHQtPnB1dERpcmVj
dCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiYW5ub3RhdGVkVHlwZUluU2Vx
dWVuY2VNZW1iZXIiKSwgYW5ub3RhdGVkVHlwZUluU2VxdWVuY2VNZW1iZXJWYWx1ZSk7CiAgICAg
fQogICAgIGlmICghSURMVW5pb248SURMRE9NU3RyaW5nLCBJRExDbGFtcEFkYXB0b3I8SURMTG9u
Zz4+Ojppc051bGxWYWx1ZShkaWN0aW9uYXJ5LmFubm90YXRlZFR5cGVJblVuaW9uTWVtYmVyKSkg
ewogICAgICAgICBhdXRvIGFubm90YXRlZFR5cGVJblVuaW9uTWVtYmVyVmFsdWUgPSB0b0pTPElE
TFVuaW9uPElETERPTVN0cmluZywgSURMQ2xhbXBBZGFwdG9yPElETExvbmc+Pj4oc3RhdGUsIGds
b2JhbE9iamVjdCwgSURMVW5pb248SURMRE9NU3RyaW5nLCBJRExDbGFtcEFkYXB0b3I8SURMTG9u
Zz4+OjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUoZGljdGlvbmFyeS5hbm5vdGF0ZWRUeXBlSW5V
bmlvbk1lbWJlcikpOwotICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKCZ2bSwgImFubm90YXRlZFR5cGVJblVuaW9uTWVtYmVyIiksIGFubm90
YXRlZFR5cGVJblVuaW9uTWVtYmVyVmFsdWUpOworICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2
bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiYW5ub3RhdGVkVHlwZUluVW5pb25N
ZW1iZXIiKSwgYW5ub3RhdGVkVHlwZUluVW5pb25NZW1iZXJWYWx1ZSk7CiAgICAgfQogICAgIGF1
dG8gYW55VHlwZWRlZlZhbHVlVmFsdWUgPSB0b0pTPElETEFueT4oZGljdGlvbmFyeS5hbnlUeXBl
ZGVmVmFsdWUpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZy
b21TdHJpbmcoJnZtLCAiYW55VHlwZWRlZlZhbHVlIiksIGFueVR5cGVkZWZWYWx1ZVZhbHVlKTsK
KyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZt
LCAiYW55VHlwZWRlZlZhbHVlIiksIGFueVR5cGVkZWZWYWx1ZVZhbHVlKTsKICAgICBhdXRvIGFu
eVZhbHVlVmFsdWUgPSB0b0pTPElETEFueT4oZGljdGlvbmFyeS5hbnlWYWx1ZSk7Ci0gICAgcmVz
dWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJhbnlW
YWx1ZSIpLCBhbnlWYWx1ZVZhbHVlKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiYW55VmFsdWUiKSwgYW55VmFsdWVWYWx1ZSk7CiAg
ICAgYXV0byBhbnlWYWx1ZVdpdGhOdWxsRGVmYXVsdFZhbHVlID0gdG9KUzxJRExBbnk+KGRpY3Rp
b25hcnkuYW55VmFsdWVXaXRoTnVsbERlZmF1bHQpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZt
LCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiYW55VmFsdWVXaXRoTnVsbERlZmF1
bHQiKSwgYW55VmFsdWVXaXRoTnVsbERlZmF1bHRWYWx1ZSk7CisgICAgcmVzdWx0LT5wdXREaXJl
Y3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImFueVZhbHVlV2l0aE51bGxE
ZWZhdWx0IiksIGFueVZhbHVlV2l0aE51bGxEZWZhdWx0VmFsdWUpOwogICAgIGF1dG8gYm9vbGVh
bldpdGhEZWZhdWx0VmFsdWUgPSB0b0pTPElETEJvb2xlYW4+KGRpY3Rpb25hcnkuYm9vbGVhbldp
dGhEZWZhdWx0KTsKLSAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKCZ2bSwgImJvb2xlYW5XaXRoRGVmYXVsdCIpLCBib29sZWFuV2l0aERlZmF1bHRW
YWx1ZSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0
cmluZyh2bSwgImJvb2xlYW5XaXRoRGVmYXVsdCIpLCBib29sZWFuV2l0aERlZmF1bHRWYWx1ZSk7
CiAgICAgaWYgKCFJRExCb29sZWFuOjppc051bGxWYWx1ZShkaWN0aW9uYXJ5LmJvb2xlYW5XaXRo
b3V0RGVmYXVsdCkpIHsKICAgICAgICAgYXV0byBib29sZWFuV2l0aG91dERlZmF1bHRWYWx1ZSA9
IHRvSlM8SURMQm9vbGVhbj4oSURMQm9vbGVhbjo6ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKGRp
Y3Rpb25hcnkuYm9vbGVhbldpdGhvdXREZWZhdWx0KSk7Ci0gICAgICAgIHJlc3VsdC0+cHV0RGly
ZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiYm9vbGVhbldpdGhvdXRE
ZWZhdWx0IiksIGJvb2xlYW5XaXRob3V0RGVmYXVsdFZhbHVlKTsKKyAgICAgICAgcmVzdWx0LT5w
dXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImJvb2xlYW5XaXRo
b3V0RGVmYXVsdCIpLCBib29sZWFuV2l0aG91dERlZmF1bHRWYWx1ZSk7CiAgICAgfQogICAgIGlm
ICghSURMVW5pb248SURMQXJyYXlCdWZmZXJWaWV3LCBJRExBcnJheUJ1ZmZlcj46OmlzTnVsbFZh
bHVlKGRpY3Rpb25hcnkuYnVmZmVyU291cmNlVmFsdWUpKSB7CiAgICAgICAgIGF1dG8gYnVmZmVy
U291cmNlVmFsdWVWYWx1ZSA9IHRvSlM8SURMVW5pb248SURMQXJyYXlCdWZmZXJWaWV3LCBJRExB
cnJheUJ1ZmZlcj4+KHN0YXRlLCBnbG9iYWxPYmplY3QsIElETFVuaW9uPElETEFycmF5QnVmZmVy
VmlldywgSURMQXJyYXlCdWZmZXI+OjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUoZGljdGlvbmFy
eS5idWZmZXJTb3VyY2VWYWx1ZSkpOwotICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlND
OjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImJ1ZmZlclNvdXJjZVZhbHVlIiksIGJ1ZmZl
clNvdXJjZVZhbHVlVmFsdWUpOworICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiYnVmZmVyU291cmNlVmFsdWUiKSwgYnVmZmVyU291
cmNlVmFsdWVWYWx1ZSk7CiAgICAgfQogICAgIGlmICghSURMRGljdGlvbmFyeTxUZXN0T2JqOjpE
aWN0aW9uYXJ5VGhhdFNob3VsZFRvbGVyYXRlTnVsbD46OmlzTnVsbFZhbHVlKGRpY3Rpb25hcnku
ZGljdGlvbmFyeU1lbWJlcikpIHsKICAgICAgICAgYXV0byBkaWN0aW9uYXJ5TWVtYmVyVmFsdWUg
PSB0b0pTPElETERpY3Rpb25hcnk8VGVzdE9iajo6RGljdGlvbmFyeVRoYXRTaG91bGRUb2xlcmF0
ZU51bGw+PihzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBJRExEaWN0aW9uYXJ5PFRlc3RPYmo6OkRpY3Rp
b25hcnlUaGF0U2hvdWxkVG9sZXJhdGVOdWxsPjo6ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKGRp
Y3Rpb25hcnkuZGljdGlvbmFyeU1lbWJlcikpOwotICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2
bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImRpY3Rpb25hcnlNZW1iZXIiKSwg
ZGljdGlvbmFyeU1lbWJlclZhbHVlKTsKKyAgICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIEpT
Qzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImRpY3Rpb25hcnlNZW1iZXIiKSwgZGljdGlv
bmFyeU1lbWJlclZhbHVlKTsKICAgICB9CiAgICAgYXV0byBlbnVtZXJhdGlvblZhbHVlV2l0aERl
ZmF1bHRWYWx1ZSA9IHRvSlM8SURMRW51bWVyYXRpb248VGVzdE9iajo6RW51bVR5cGU+PihzdGF0
ZSwgZGljdGlvbmFyeS5lbnVtZXJhdGlvblZhbHVlV2l0aERlZmF1bHQpOwotICAgIHJlc3VsdC0+
cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiZW51bWVyYXRp
b25WYWx1ZVdpdGhEZWZhdWx0IiksIGVudW1lcmF0aW9uVmFsdWVXaXRoRGVmYXVsdFZhbHVlKTsK
KyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZt
LCAiZW51bWVyYXRpb25WYWx1ZVdpdGhEZWZhdWx0IiksIGVudW1lcmF0aW9uVmFsdWVXaXRoRGVm
YXVsdFZhbHVlKTsKICAgICBhdXRvIGVudW1lcmF0aW9uVmFsdWVXaXRoRW1wdHlTdHJpbmdEZWZh
dWx0VmFsdWUgPSB0b0pTPElETEVudW1lcmF0aW9uPFRlc3RPYmo6OkVudW1UeXBlPj4oc3RhdGUs
IGRpY3Rpb25hcnkuZW51bWVyYXRpb25WYWx1ZVdpdGhFbXB0eVN0cmluZ0RlZmF1bHQpOwotICAg
IHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAi
ZW51bWVyYXRpb25WYWx1ZVdpdGhFbXB0eVN0cmluZ0RlZmF1bHQiKSwgZW51bWVyYXRpb25WYWx1
ZVdpdGhFbXB0eVN0cmluZ0RlZmF1bHRWYWx1ZSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0s
IEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImVudW1lcmF0aW9uVmFsdWVXaXRoRW1w
dHlTdHJpbmdEZWZhdWx0IiksIGVudW1lcmF0aW9uVmFsdWVXaXRoRW1wdHlTdHJpbmdEZWZhdWx0
VmFsdWUpOwogICAgIGlmICghSURMRW51bWVyYXRpb248VGVzdE9iajo6RW51bVR5cGU+Ojppc051
bGxWYWx1ZShkaWN0aW9uYXJ5LmVudW1lcmF0aW9uVmFsdWVXaXRob3V0RGVmYXVsdCkpIHsKICAg
ICAgICAgYXV0byBlbnVtZXJhdGlvblZhbHVlV2l0aG91dERlZmF1bHRWYWx1ZSA9IHRvSlM8SURM
RW51bWVyYXRpb248VGVzdE9iajo6RW51bVR5cGU+PihzdGF0ZSwgSURMRW51bWVyYXRpb248VGVz
dE9iajo6RW51bVR5cGU+OjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUoZGljdGlvbmFyeS5lbnVt
ZXJhdGlvblZhbHVlV2l0aG91dERlZmF1bHQpKTsKLSAgICAgICAgcmVzdWx0LT5wdXREaXJlY3Qo
dm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJlbnVtZXJhdGlvblZhbHVlV2l0
aG91dERlZmF1bHQiKSwgZW51bWVyYXRpb25WYWx1ZVdpdGhvdXREZWZhdWx0VmFsdWUpOworICAg
ICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZt
LCAiZW51bWVyYXRpb25WYWx1ZVdpdGhvdXREZWZhdWx0IiksIGVudW1lcmF0aW9uVmFsdWVXaXRo
b3V0RGVmYXVsdFZhbHVlKTsKICAgICB9CiAgICAgYXV0byBmb29BbGlhc1ZhbHVlID0gdG9KUzxJ
RExBbnk+KGRpY3Rpb25hcnkuZm9vKTsKLSAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImZvb0FsaWFzIiksIGZvb0FsaWFzVmFsdWUpOwor
ICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0s
ICJmb29BbGlhcyIpLCBmb29BbGlhc1ZhbHVlKTsKICAgICBhdXRvIGZvb1dpdGhEZWZhdWx0QWxp
YXNWYWx1ZSA9IHRvSlM8SURMQW55PihkaWN0aW9uYXJ5LmZvb1dpdGhEZWZhdWx0KTsKLSAgICBy
ZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImZv
b1dpdGhEZWZhdWx0QWxpYXMiKSwgZm9vV2l0aERlZmF1bHRBbGlhc1ZhbHVlKTsKKyAgICByZXN1
bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiZm9vV2l0
aERlZmF1bHRBbGlhcyIpLCBmb29XaXRoRGVmYXVsdEFsaWFzVmFsdWUpOwogICAgIGlmICghSURM
TG9uZzo6aXNOdWxsVmFsdWUoZGljdGlvbmFyeS5pbnRlZ2VyKSkgewogICAgICAgICBhdXRvIGlu
dGVnZXJWYWx1ZSA9IHRvSlM8SURMTG9uZz4oSURMTG9uZzo6ZXh0cmFjdFZhbHVlRnJvbU51bGxh
YmxlKGRpY3Rpb25hcnkuaW50ZWdlcikpOwotICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwg
SlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImludGVnZXIiKSwgaW50ZWdlclZhbHVl
KTsKKyAgICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0
cmluZyh2bSwgImludGVnZXIiKSwgaW50ZWdlclZhbHVlKTsKICAgICB9CiAgICAgYXV0byBpbnRl
Z2VyV2l0aERlZmF1bHRWYWx1ZSA9IHRvSlM8SURMTG9uZz4oZGljdGlvbmFyeS5pbnRlZ2VyV2l0
aERlZmF1bHQpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZy
b21TdHJpbmcoJnZtLCAiaW50ZWdlcldpdGhEZWZhdWx0IiksIGludGVnZXJXaXRoRGVmYXVsdFZh
bHVlKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKHZtLCAiaW50ZWdlcldpdGhEZWZhdWx0IiksIGludGVnZXJXaXRoRGVmYXVsdFZhbHVlKTsK
ICAgICBpZiAoIUlETExvbmdMb25nOjppc051bGxWYWx1ZShkaWN0aW9uYXJ5LmxhcmdlSW50ZWdl
cikpIHsKICAgICAgICAgYXV0byBsYXJnZUludGVnZXJWYWx1ZSA9IHRvSlM8SURMTG9uZ0xvbmc+
KElETExvbmdMb25nOjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUoZGljdGlvbmFyeS5sYXJnZUlu
dGVnZXIpKTsKLSAgICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6
ZnJvbVN0cmluZygmdm0sICJsYXJnZUludGVnZXIiKSwgbGFyZ2VJbnRlZ2VyVmFsdWUpOworICAg
ICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZt
LCAibGFyZ2VJbnRlZ2VyIiksIGxhcmdlSW50ZWdlclZhbHVlKTsKICAgICB9CiAgICAgYXV0byBs
YXJnZUludGVnZXJXaXRoRGVmYXVsdFZhbHVlID0gdG9KUzxJRExMb25nTG9uZz4oZGljdGlvbmFy
eS5sYXJnZUludGVnZXJXaXRoRGVmYXVsdCk7Ci0gICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIEpT
Qzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJsYXJnZUludGVnZXJXaXRoRGVmYXVsdCIp
LCBsYXJnZUludGVnZXJXaXRoRGVmYXVsdFZhbHVlKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2
bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAibGFyZ2VJbnRlZ2VyV2l0aERlZmF1
bHQiKSwgbGFyZ2VJbnRlZ2VyV2l0aERlZmF1bHRWYWx1ZSk7CiAgICAgYXV0byBudWxsYWJsZUVu
dW1WYWx1ZSA9IHRvSlM8SURMTnVsbGFibGU8SURMRW51bWVyYXRpb248VGVzdE9iajo6RW51bVR5
cGU+Pj4oc3RhdGUsIGRpY3Rpb25hcnkubnVsbGFibGVFbnVtKTsKLSAgICByZXN1bHQtPnB1dERp
cmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgIm51bGxhYmxlRW51bSIp
LCBudWxsYWJsZUVudW1WYWx1ZSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRl
bnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIm51bGxhYmxlRW51bSIpLCBudWxsYWJsZUVudW1WYWx1
ZSk7CiAgICAgYXV0byBudWxsYWJsZUludGVnZXJXaXRoRGVmYXVsdFZhbHVlID0gdG9KUzxJRExO
dWxsYWJsZTxJRExMb25nPj4oZGljdGlvbmFyeS5udWxsYWJsZUludGVnZXJXaXRoRGVmYXVsdCk7
Ci0gICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygm
dm0sICJudWxsYWJsZUludGVnZXJXaXRoRGVmYXVsdCIpLCBudWxsYWJsZUludGVnZXJXaXRoRGVm
YXVsdFZhbHVlKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCAibnVsbGFibGVJbnRlZ2VyV2l0aERlZmF1bHQiKSwgbnVsbGFibGVJbnRl
Z2VyV2l0aERlZmF1bHRWYWx1ZSk7CiAgICAgYXV0byBudWxsYWJsZU5vZGVWYWx1ZSA9IHRvSlM8
SURMTnVsbGFibGU8SURMSW50ZXJmYWNlPE5vZGU+Pj4oc3RhdGUsIGdsb2JhbE9iamVjdCwgZGlj
dGlvbmFyeS5udWxsYWJsZU5vZGUpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6Oklk
ZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAibnVsbGFibGVOb2RlIiksIG51bGxhYmxlTm9kZVZh
bHVlKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKHZtLCAibnVsbGFibGVOb2RlIiksIG51bGxhYmxlTm9kZVZhbHVlKTsKICAgICBhdXRvIG51
bGxhYmxlU3RyaW5nV2l0aERlZmF1bHRWYWx1ZSA9IHRvSlM8SURMTnVsbGFibGU8SURMRE9NU3Ry
aW5nPj4oc3RhdGUsIGRpY3Rpb25hcnkubnVsbGFibGVTdHJpbmdXaXRoRGVmYXVsdCk7Ci0gICAg
cmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJu
dWxsYWJsZVN0cmluZ1dpdGhEZWZhdWx0IiksIG51bGxhYmxlU3RyaW5nV2l0aERlZmF1bHRWYWx1
ZSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zyh2bSwgIm51bGxhYmxlU3RyaW5nV2l0aERlZmF1bHQiKSwgbnVsbGFibGVTdHJpbmdXaXRoRGVm
YXVsdFZhbHVlKTsKICAgICBhdXRvIG51bGxhYmxlVW5pb25NZW1iZXJWYWx1ZSA9IHRvSlM8SURM
TnVsbGFibGU8SURMVW5pb248SURMTG9uZywgSURMSW50ZXJmYWNlPE5vZGU+Pj4+KHN0YXRlLCBn
bG9iYWxPYmplY3QsIGRpY3Rpb25hcnkubnVsbGFibGVVbmlvbk1lbWJlcik7Ci0gICAgcmVzdWx0
LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJudWxsYWJs
ZVVuaW9uTWVtYmVyIiksIG51bGxhYmxlVW5pb25NZW1iZXJWYWx1ZSk7CisgICAgcmVzdWx0LT5w
dXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIm51bGxhYmxlVW5p
b25NZW1iZXIiKSwgbnVsbGFibGVVbmlvbk1lbWJlclZhbHVlKTsKICAgICBhdXRvIHJlcXVpcmVk
QnVmZmVyU291cmNlVmFsdWVWYWx1ZSA9IHRvSlM8SURMVW5pb248SURMQXJyYXlCdWZmZXJWaWV3
LCBJRExBcnJheUJ1ZmZlcj4+KHN0YXRlLCBnbG9iYWxPYmplY3QsIGRpY3Rpb25hcnkucmVxdWly
ZWRCdWZmZXJTb3VyY2VWYWx1ZSk7Ci0gICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRl
bnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJyZXF1aXJlZEJ1ZmZlclNvdXJjZVZhbHVlIiksIHJl
cXVpcmVkQnVmZmVyU291cmNlVmFsdWVWYWx1ZSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0s
IEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInJlcXVpcmVkQnVmZmVyU291cmNlVmFs
dWUiKSwgcmVxdWlyZWRCdWZmZXJTb3VyY2VWYWx1ZVZhbHVlKTsKICAgICBpZiAoIUlETERvdWJs
ZTo6aXNOdWxsVmFsdWUoZGljdGlvbmFyeS5yZXN0cmljdGVkRG91YmxlKSkgewogICAgICAgICBh
dXRvIHJlc3RyaWN0ZWREb3VibGVWYWx1ZSA9IHRvSlM8SURMRG91YmxlPihJRExEb3VibGU6OmV4
dHJhY3RWYWx1ZUZyb21OdWxsYWJsZShkaWN0aW9uYXJ5LnJlc3RyaWN0ZWREb3VibGUpKTsKLSAg
ICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygm
dm0sICJyZXN0cmljdGVkRG91YmxlIiksIHJlc3RyaWN0ZWREb3VibGVWYWx1ZSk7CisgICAgICAg
IHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJy
ZXN0cmljdGVkRG91YmxlIiksIHJlc3RyaWN0ZWREb3VibGVWYWx1ZSk7CiAgICAgfQogICAgIGF1
dG8gcmVzdHJpY3RlZERvdWJsZVdpdGhEZWZhdWx0VmFsdWUgPSB0b0pTPElETERvdWJsZT4oZGlj
dGlvbmFyeS5yZXN0cmljdGVkRG91YmxlV2l0aERlZmF1bHQpOwotICAgIHJlc3VsdC0+cHV0RGly
ZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAicmVzdHJpY3RlZERvdWJs
ZVdpdGhEZWZhdWx0IiksIHJlc3RyaWN0ZWREb3VibGVXaXRoRGVmYXVsdFZhbHVlKTsKKyAgICBy
ZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAicmVz
dHJpY3RlZERvdWJsZVdpdGhEZWZhdWx0IiksIHJlc3RyaWN0ZWREb3VibGVXaXRoRGVmYXVsdFZh
bHVlKTsKICAgICBpZiAoIUlETEZsb2F0Ojppc051bGxWYWx1ZShkaWN0aW9uYXJ5LnJlc3RyaWN0
ZWRGbG9hdCkpIHsKICAgICAgICAgYXV0byByZXN0cmljdGVkRmxvYXRWYWx1ZSA9IHRvSlM8SURM
RmxvYXQ+KElETEZsb2F0OjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUoZGljdGlvbmFyeS5yZXN0
cmljdGVkRmxvYXQpKTsKLSAgICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRp
Zmllcjo6ZnJvbVN0cmluZygmdm0sICJyZXN0cmljdGVkRmxvYXQiKSwgcmVzdHJpY3RlZEZsb2F0
VmFsdWUpOworICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCAicmVzdHJpY3RlZEZsb2F0IiksIHJlc3RyaWN0ZWRGbG9hdFZhbHVlKTsK
ICAgICB9CiAgICAgYXV0byByZXN0cmljdGVkRmxvYXRXaXRoRGVmYXVsdFZhbHVlID0gdG9KUzxJ
RExGbG9hdD4oZGljdGlvbmFyeS5yZXN0cmljdGVkRmxvYXRXaXRoRGVmYXVsdCk7Ci0gICAgcmVz
dWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJyZXN0
cmljdGVkRmxvYXRXaXRoRGVmYXVsdCIpLCByZXN0cmljdGVkRmxvYXRXaXRoRGVmYXVsdFZhbHVl
KTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KHZtLCAicmVzdHJpY3RlZEZsb2F0V2l0aERlZmF1bHQiKSwgcmVzdHJpY3RlZEZsb2F0V2l0aERl
ZmF1bHRWYWx1ZSk7CiAgICAgaWYgKCFJRExTZXF1ZW5jZTxJRExET01TdHJpbmc+Ojppc051bGxW
YWx1ZShkaWN0aW9uYXJ5LnNlcXVlbmNlT2ZTdHJpbmdzKSkgewogICAgICAgICBhdXRvIHNlcXVl
bmNlT2ZTdHJpbmdzVmFsdWUgPSB0b0pTPElETFNlcXVlbmNlPElETERPTVN0cmluZz4+KHN0YXRl
LCBnbG9iYWxPYmplY3QsIElETFNlcXVlbmNlPElETERPTVN0cmluZz46OmV4dHJhY3RWYWx1ZUZy
b21OdWxsYWJsZShkaWN0aW9uYXJ5LnNlcXVlbmNlT2ZTdHJpbmdzKSk7Ci0gICAgICAgIHJlc3Vs
dC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAic2VxdWVu
Y2VPZlN0cmluZ3MiKSwgc2VxdWVuY2VPZlN0cmluZ3NWYWx1ZSk7CisgICAgICAgIHJlc3VsdC0+
cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJzZXF1ZW5jZU9m
U3RyaW5ncyIpLCBzZXF1ZW5jZU9mU3RyaW5nc1ZhbHVlKTsKICAgICB9CiAgICAgaWYgKCFJRExD
bGFtcEFkYXB0b3I8SURMQnl0ZT46OmlzTnVsbFZhbHVlKGRpY3Rpb25hcnkuc21hbGxJbnRlZ2Vy
Q2xhbXBlZCkpIHsKICAgICAgICAgYXV0byBzbWFsbEludGVnZXJDbGFtcGVkVmFsdWUgPSB0b0pT
PElETENsYW1wQWRhcHRvcjxJRExCeXRlPj4oSURMQ2xhbXBBZGFwdG9yPElETEJ5dGU+OjpleHRy
YWN0VmFsdWVGcm9tTnVsbGFibGUoZGljdGlvbmFyeS5zbWFsbEludGVnZXJDbGFtcGVkKSk7Ci0g
ICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmco
JnZtLCAic21hbGxJbnRlZ2VyQ2xhbXBlZCIpLCBzbWFsbEludGVnZXJDbGFtcGVkVmFsdWUpOwor
ICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KHZtLCAic21hbGxJbnRlZ2VyQ2xhbXBlZCIpLCBzbWFsbEludGVnZXJDbGFtcGVkVmFsdWUpOwog
ICAgIH0KICAgICBpZiAoIUlETEJ5dGU6OmlzTnVsbFZhbHVlKGRpY3Rpb25hcnkuc21hbGxJbnRl
Z2VyV2l0aERlZmF1bHQpKSB7CiAgICAgICAgIGF1dG8gc21hbGxJbnRlZ2VyV2l0aERlZmF1bHRW
YWx1ZSA9IHRvSlM8SURMQnl0ZT4oSURMQnl0ZTo6ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKGRp
Y3Rpb25hcnkuc21hbGxJbnRlZ2VyV2l0aERlZmF1bHQpKTsKLSAgICAgICAgcmVzdWx0LT5wdXRE
aXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJzbWFsbEludGVnZXJX
aXRoRGVmYXVsdCIpLCBzbWFsbEludGVnZXJXaXRoRGVmYXVsdFZhbHVlKTsKKyAgICAgICAgcmVz
dWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInNtYWxs
SW50ZWdlcldpdGhEZWZhdWx0IiksIHNtYWxsSW50ZWdlcldpdGhEZWZhdWx0VmFsdWUpOwogICAg
IH0KICAgICBpZiAoIUlETEVuZm9yY2VSYW5nZUFkYXB0b3I8SURMT2N0ZXQ+Ojppc051bGxWYWx1
ZShkaWN0aW9uYXJ5LnNtYWxsVW5zaWduZWRJbnRlZ2VyRW5mb3JjZWRSYW5nZSkpIHsKICAgICAg
ICAgYXV0byBzbWFsbFVuc2lnbmVkSW50ZWdlckVuZm9yY2VkUmFuZ2VWYWx1ZSA9IHRvSlM8SURM
RW5mb3JjZVJhbmdlQWRhcHRvcjxJRExPY3RldD4+KElETEVuZm9yY2VSYW5nZUFkYXB0b3I8SURM
T2N0ZXQ+OjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUoZGljdGlvbmFyeS5zbWFsbFVuc2lnbmVk
SW50ZWdlckVuZm9yY2VkUmFuZ2UpKTsKLSAgICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIEpT
Qzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJzbWFsbFVuc2lnbmVkSW50ZWdlckVuZm9y
Y2VkUmFuZ2UiKSwgc21hbGxVbnNpZ25lZEludGVnZXJFbmZvcmNlZFJhbmdlVmFsdWUpOworICAg
ICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZt
LCAic21hbGxVbnNpZ25lZEludGVnZXJFbmZvcmNlZFJhbmdlIiksIHNtYWxsVW5zaWduZWRJbnRl
Z2VyRW5mb3JjZWRSYW5nZVZhbHVlKTsKICAgICB9CiAgICAgYXV0byBzbWFsbFVuc2lnbmVkSW50
ZWdlcldpdGhEZWZhdWx0VmFsdWUgPSB0b0pTPElETE9jdGV0PihkaWN0aW9uYXJ5LnNtYWxsVW5z
aWduZWRJbnRlZ2VyV2l0aERlZmF1bHQpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6
OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAic21hbGxVbnNpZ25lZEludGVnZXJXaXRoRGVm
YXVsdCIpLCBzbWFsbFVuc2lnbmVkSW50ZWdlcldpdGhEZWZhdWx0VmFsdWUpOworICAgIHJlc3Vs
dC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJzbWFsbFVu
c2lnbmVkSW50ZWdlcldpdGhEZWZhdWx0IiksIHNtYWxsVW5zaWduZWRJbnRlZ2VyV2l0aERlZmF1
bHRWYWx1ZSk7CiAgICAgaWYgKCFJRExUcmVhdE51bGxBc0VtcHR5QWRhcHRvcjxJRExET01TdHJp
bmc+Ojppc051bGxWYWx1ZShkaWN0aW9uYXJ5LnN0cmluZ1RyZWF0TnVsbEFzRW1wdHlTdHJpbmcp
KSB7CiAgICAgICAgIGF1dG8gc3RyaW5nVHJlYXROdWxsQXNFbXB0eVN0cmluZ1ZhbHVlID0gdG9K
UzxJRExUcmVhdE51bGxBc0VtcHR5QWRhcHRvcjxJRExET01TdHJpbmc+PihzdGF0ZSwgSURMVHJl
YXROdWxsQXNFbXB0eUFkYXB0b3I8SURMRE9NU3RyaW5nPjo6ZXh0cmFjdFZhbHVlRnJvbU51bGxh
YmxlKGRpY3Rpb25hcnkuc3RyaW5nVHJlYXROdWxsQXNFbXB0eVN0cmluZykpOwotICAgICAgICBy
ZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgInN0
cmluZ1RyZWF0TnVsbEFzRW1wdHlTdHJpbmciKSwgc3RyaW5nVHJlYXROdWxsQXNFbXB0eVN0cmlu
Z1ZhbHVlKTsKKyAgICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6
ZnJvbVN0cmluZyh2bSwgInN0cmluZ1RyZWF0TnVsbEFzRW1wdHlTdHJpbmciKSwgc3RyaW5nVHJl
YXROdWxsQXNFbXB0eVN0cmluZ1ZhbHVlKTsKICAgICB9CiAgICAgYXV0byBzdHJpbmdXaXRoRGVm
YXVsdFZhbHVlID0gdG9KUzxJRExET01TdHJpbmc+KHN0YXRlLCBkaWN0aW9uYXJ5LnN0cmluZ1dp
dGhEZWZhdWx0KTsKLSAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKCZ2bSwgInN0cmluZ1dpdGhEZWZhdWx0IiksIHN0cmluZ1dpdGhEZWZhdWx0VmFs
dWUpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJp
bmcodm0sICJzdHJpbmdXaXRoRGVmYXVsdCIpLCBzdHJpbmdXaXRoRGVmYXVsdFZhbHVlKTsKICAg
ICBpZiAoIUlETERPTVN0cmluZzo6aXNOdWxsVmFsdWUoZGljdGlvbmFyeS5zdHJpbmdXaXRob3V0
RGVmYXVsdCkpIHsKICAgICAgICAgYXV0byBzdHJpbmdXaXRob3V0RGVmYXVsdFZhbHVlID0gdG9K
UzxJRExET01TdHJpbmc+KHN0YXRlLCBJRExET01TdHJpbmc6OmV4dHJhY3RWYWx1ZUZyb21OdWxs
YWJsZShkaWN0aW9uYXJ5LnN0cmluZ1dpdGhvdXREZWZhdWx0KSk7Ci0gICAgICAgIHJlc3VsdC0+
cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAic3RyaW5nV2l0
aG91dERlZmF1bHQiKSwgc3RyaW5nV2l0aG91dERlZmF1bHRWYWx1ZSk7CisgICAgICAgIHJlc3Vs
dC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJzdHJpbmdX
aXRob3V0RGVmYXVsdCIpLCBzdHJpbmdXaXRob3V0RGVmYXVsdFZhbHVlKTsKICAgICB9CiAgICAg
aWYgKCFJRExVbmlvbjxJRExMb25nLCBJRExJbnRlcmZhY2U8Tm9kZT4+Ojppc051bGxWYWx1ZShk
aWN0aW9uYXJ5LnVuaW9uTWVtYmVyKSkgewogICAgICAgICBhdXRvIHVuaW9uTWVtYmVyVmFsdWUg
PSB0b0pTPElETFVuaW9uPElETExvbmcsIElETEludGVyZmFjZTxOb2RlPj4+KHN0YXRlLCBnbG9i
YWxPYmplY3QsIElETFVuaW9uPElETExvbmcsIElETEludGVyZmFjZTxOb2RlPj46OmV4dHJhY3RW
YWx1ZUZyb21OdWxsYWJsZShkaWN0aW9uYXJ5LnVuaW9uTWVtYmVyKSk7Ci0gICAgICAgIHJlc3Vs
dC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAidW5pb25N
ZW1iZXIiKSwgdW5pb25NZW1iZXJWYWx1ZSk7CisgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZt
LCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJ1bmlvbk1lbWJlciIpLCB1bmlvbk1l
bWJlclZhbHVlKTsKICAgICB9CiAgICAgaWYgKCFJRExVbnJlc3RyaWN0ZWREb3VibGU6OmlzTnVs
bFZhbHVlKGRpY3Rpb25hcnkudW5yZXN0cmljdGVkRG91YmxlKSkgewogICAgICAgICBhdXRvIHVu
cmVzdHJpY3RlZERvdWJsZVZhbHVlID0gdG9KUzxJRExVbnJlc3RyaWN0ZWREb3VibGU+KElETFVu
cmVzdHJpY3RlZERvdWJsZTo6ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKGRpY3Rpb25hcnkudW5y
ZXN0cmljdGVkRG91YmxlKSk7Ci0gICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6Oklk
ZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAidW5yZXN0cmljdGVkRG91YmxlIiksIHVucmVzdHJp
Y3RlZERvdWJsZVZhbHVlKTsKKyAgICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRl
bnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInVucmVzdHJpY3RlZERvdWJsZSIpLCB1bnJlc3RyaWN0
ZWREb3VibGVWYWx1ZSk7CiAgICAgfQogICAgIGF1dG8gdW5yZXN0cmljdGVkRG91YmxlV2l0aERl
ZmF1bHRWYWx1ZSA9IHRvSlM8SURMVW5yZXN0cmljdGVkRG91YmxlPihkaWN0aW9uYXJ5LnVucmVz
dHJpY3RlZERvdWJsZVdpdGhEZWZhdWx0KTsKLSAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlND
OjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgInVucmVzdHJpY3RlZERvdWJsZVdpdGhEZWZh
dWx0IiksIHVucmVzdHJpY3RlZERvdWJsZVdpdGhEZWZhdWx0VmFsdWUpOworICAgIHJlc3VsdC0+
cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJ1bnJlc3RyaWN0
ZWREb3VibGVXaXRoRGVmYXVsdCIpLCB1bnJlc3RyaWN0ZWREb3VibGVXaXRoRGVmYXVsdFZhbHVl
KTsKICAgICBpZiAoIUlETFVucmVzdHJpY3RlZEZsb2F0Ojppc051bGxWYWx1ZShkaWN0aW9uYXJ5
LnVucmVzdHJpY3RlZEZsb2F0KSkgewogICAgICAgICBhdXRvIHVucmVzdHJpY3RlZEZsb2F0VmFs
dWUgPSB0b0pTPElETFVucmVzdHJpY3RlZEZsb2F0PihJRExVbnJlc3RyaWN0ZWRGbG9hdDo6ZXh0
cmFjdFZhbHVlRnJvbU51bGxhYmxlKGRpY3Rpb25hcnkudW5yZXN0cmljdGVkRmxvYXQpKTsKLSAg
ICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygm
dm0sICJ1bnJlc3RyaWN0ZWRGbG9hdCIpLCB1bnJlc3RyaWN0ZWRGbG9hdFZhbHVlKTsKKyAgICAg
ICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwg
InVucmVzdHJpY3RlZEZsb2F0IiksIHVucmVzdHJpY3RlZEZsb2F0VmFsdWUpOwogICAgIH0KICAg
ICBhdXRvIHVucmVzdHJpY3RlZEZsb2F0V2l0aERlZmF1bHRWYWx1ZSA9IHRvSlM8SURMVW5yZXN0
cmljdGVkRmxvYXQ+KGRpY3Rpb25hcnkudW5yZXN0cmljdGVkRmxvYXRXaXRoRGVmYXVsdCk7Ci0g
ICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0s
ICJ1bnJlc3RyaWN0ZWRGbG9hdFdpdGhEZWZhdWx0IiksIHVucmVzdHJpY3RlZEZsb2F0V2l0aERl
ZmF1bHRWYWx1ZSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6
ZnJvbVN0cmluZyh2bSwgInVucmVzdHJpY3RlZEZsb2F0V2l0aERlZmF1bHQiKSwgdW5yZXN0cmlj
dGVkRmxvYXRXaXRoRGVmYXVsdFZhbHVlKTsKICAgICBpZiAoIUlETFVuc2lnbmVkTG9uZzo6aXNO
dWxsVmFsdWUoZGljdGlvbmFyeS51bnNpZ25lZEludGVnZXIpKSB7CiAgICAgICAgIGF1dG8gdW5z
aWduZWRJbnRlZ2VyVmFsdWUgPSB0b0pTPElETFVuc2lnbmVkTG9uZz4oSURMVW5zaWduZWRMb25n
OjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUoZGljdGlvbmFyeS51bnNpZ25lZEludGVnZXIpKTsK
LSAgICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zygmdm0sICJ1bnNpZ25lZEludGVnZXIiKSwgdW5zaWduZWRJbnRlZ2VyVmFsdWUpOworICAgICAg
ICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAi
dW5zaWduZWRJbnRlZ2VyIiksIHVuc2lnbmVkSW50ZWdlclZhbHVlKTsKICAgICB9CiAgICAgYXV0
byB1bnNpZ25lZEludGVnZXJXaXRoRGVmYXVsdFZhbHVlID0gdG9KUzxJRExVbnNpZ25lZExvbmc+
KGRpY3Rpb25hcnkudW5zaWduZWRJbnRlZ2VyV2l0aERlZmF1bHQpOwotICAgIHJlc3VsdC0+cHV0
RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAidW5zaWduZWRJbnRl
Z2VyV2l0aERlZmF1bHQiKSwgdW5zaWduZWRJbnRlZ2VyV2l0aERlZmF1bHRWYWx1ZSk7CisgICAg
cmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInVu
c2lnbmVkSW50ZWdlcldpdGhEZWZhdWx0IiksIHVuc2lnbmVkSW50ZWdlcldpdGhEZWZhdWx0VmFs
dWUpOwogICAgIGlmICghSURMVW5zaWduZWRMb25nTG9uZzo6aXNOdWxsVmFsdWUoZGljdGlvbmFy
eS51bnNpZ25lZExhcmdlSW50ZWdlcikpIHsKICAgICAgICAgYXV0byB1bnNpZ25lZExhcmdlSW50
ZWdlclZhbHVlID0gdG9KUzxJRExVbnNpZ25lZExvbmdMb25nPihJRExVbnNpZ25lZExvbmdMb25n
OjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUoZGljdGlvbmFyeS51bnNpZ25lZExhcmdlSW50ZWdl
cikpOwotICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKCZ2bSwgInVuc2lnbmVkTGFyZ2VJbnRlZ2VyIiksIHVuc2lnbmVkTGFyZ2VJbnRlZ2Vy
VmFsdWUpOworICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCAidW5zaWduZWRMYXJnZUludGVnZXIiKSwgdW5zaWduZWRMYXJnZUludGVn
ZXJWYWx1ZSk7CiAgICAgfQogICAgIGF1dG8gdW5zaWduZWRMYXJnZUludGVnZXJXaXRoRGVmYXVs
dFZhbHVlID0gdG9KUzxJRExVbnNpZ25lZExvbmdMb25nPihkaWN0aW9uYXJ5LnVuc2lnbmVkTGFy
Z2VJbnRlZ2VyV2l0aERlZmF1bHQpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6Oklk
ZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAidW5zaWduZWRMYXJnZUludGVnZXJXaXRoRGVmYXVs
dCIpLCB1bnNpZ25lZExhcmdlSW50ZWdlcldpdGhEZWZhdWx0VmFsdWUpOworICAgIHJlc3VsdC0+
cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJ1bnNpZ25lZExh
cmdlSW50ZWdlcldpdGhEZWZhdWx0IiksIHVuc2lnbmVkTGFyZ2VJbnRlZ2VyV2l0aERlZmF1bHRW
YWx1ZSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMTExMSw3ICsxMTExLDcgQEAgdGVt
cGxhdGU8PiBUZXN0T2JqOjpEaWN0aW9uYXJ5VGhhdFNob3VsZAogICAgIGlmIChpc051bGxPclVu
ZGVmaW5lZCkKICAgICAgICAgYm9vbGVhbldpdGhvdXREZWZhdWx0VmFsdWUgPSBqc1VuZGVmaW5l
ZCgpOwogICAgIGVsc2UgewotICAgICAgICBib29sZWFuV2l0aG91dERlZmF1bHRWYWx1ZSA9IG9i
amVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJib29sZWFu
V2l0aG91dERlZmF1bHQiKSk7CisgICAgICAgIGJvb2xlYW5XaXRob3V0RGVmYXVsdFZhbHVlID0g
b2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiYm9vbGVhbldp
dGhvdXREZWZhdWx0IikpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IHsgfSk7CiAgICAgfQogICAgIGlmICghYm9vbGVhbldpdGhvdXREZWZhdWx0VmFsdWUuaXNVbmRl
ZmluZWQoKSkgewpAQCAtMTEyMiw3ICsxMTIyLDcgQEAgdGVtcGxhdGU8PiBUZXN0T2JqOjpEaWN0
aW9uYXJ5VGhhdFNob3VsZAogICAgIGlmIChpc051bGxPclVuZGVmaW5lZCkKICAgICAgICAgbm9u
TnVsbGFibGVOb2RlVmFsdWUgPSBqc1VuZGVmaW5lZCgpOwogICAgIGVsc2UgewotICAgICAgICBu
b25OdWxsYWJsZU5vZGVWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZygmc3RhdGUsICJub25OdWxsYWJsZU5vZGUiKSk7CisgICAgICAgIG5vbk51bGxhYmxl
Tm9kZVZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZt
LCAibm9uTnVsbGFibGVOb2RlIikpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIHsgfSk7CiAgICAgfQogICAgIGlmICghbm9uTnVsbGFibGVOb2RlVmFsdWUuaXNVbmRl
ZmluZWQoKSkgewpAQCAtMTEzNiw3ICsxMTM2LDcgQEAgdGVtcGxhdGU8PiBUZXN0T2JqOjpEaWN0
aW9uYXJ5VGhhdFNob3VsZAogICAgIGlmIChpc051bGxPclVuZGVmaW5lZCkKICAgICAgICAgcmVx
dWlyZWREaWN0aW9uYXJ5TWVtYmVyVmFsdWUgPSBqc1VuZGVmaW5lZCgpOwogICAgIGVsc2Ugewot
ICAgICAgICByZXF1aXJlZERpY3Rpb25hcnlNZW1iZXJWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0
ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJyZXF1aXJlZERpY3Rpb25hcnlNZW1i
ZXIiKSk7CisgICAgICAgIHJlcXVpcmVkRGljdGlvbmFyeU1lbWJlclZhbHVlID0gb2JqZWN0LT5n
ZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAicmVxdWlyZWREaWN0aW9uYXJ5
TWVtYmVyIikpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7
CiAgICAgfQogICAgIGlmICghcmVxdWlyZWREaWN0aW9uYXJ5TWVtYmVyVmFsdWUuaXNVbmRlZmlu
ZWQoKSkgewpAQCAtMTE1MCw3ICsxMTUwLDcgQEAgdGVtcGxhdGU8PiBUZXN0T2JqOjpEaWN0aW9u
YXJ5VGhhdFNob3VsZAogICAgIGlmIChpc051bGxPclVuZGVmaW5lZCkKICAgICAgICAgcmVxdWly
ZWRFbnVtZXJhdGlvblZhbHVlVmFsdWUgPSBqc1VuZGVmaW5lZCgpOwogICAgIGVsc2UgewotICAg
ICAgICByZXF1aXJlZEVudW1lcmF0aW9uVmFsdWVWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJyZXF1aXJlZEVudW1lcmF0aW9uVmFsdWUi
KSk7CisgICAgICAgIHJlcXVpcmVkRW51bWVyYXRpb25WYWx1ZVZhbHVlID0gb2JqZWN0LT5nZXQo
JnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAicmVxdWlyZWRFbnVtZXJhdGlvblZh
bHVlIikpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAg
ICAgfQogICAgIGlmICghcmVxdWlyZWRFbnVtZXJhdGlvblZhbHVlVmFsdWUuaXNVbmRlZmluZWQo
KSkgewpAQCAtMTE3OCw3ICsxMTc4LDcgQEAgdGVtcGxhdGU8PiBUZXN0T2JqOjpEaWN0aW9uYXJ5
VGhhdFNob3VsZAogICAgIGlmIChpc051bGxPclVuZGVmaW5lZCkKICAgICAgICAgYm9vbGVhbldp
dGhvdXREZWZhdWx0VmFsdWUgPSBqc1VuZGVmaW5lZCgpOwogICAgIGVsc2UgewotICAgICAgICBi
b29sZWFuV2l0aG91dERlZmF1bHRWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZygmc3RhdGUsICJib29sZWFuV2l0aG91dERlZmF1bHQiKSk7CisgICAgICAg
IGJvb2xlYW5XaXRob3V0RGVmYXVsdFZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKHZtLCAiYm9vbGVhbldpdGhvdXREZWZhdWx0IikpOwogICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgfQogICAgIGlmICghYm9v
bGVhbldpdGhvdXREZWZhdWx0VmFsdWUuaXNVbmRlZmluZWQoKSkgewpAQCAtMTE4OSw3ICsxMTg5
LDcgQEAgdGVtcGxhdGU8PiBUZXN0T2JqOjpEaWN0aW9uYXJ5VGhhdFNob3VsZAogICAgIGlmIChp
c051bGxPclVuZGVmaW5lZCkKICAgICAgICAgZW51bWVyYXRpb25WYWx1ZVZhbHVlID0ganNVbmRl
ZmluZWQoKTsKICAgICBlbHNlIHsKLSAgICAgICAgZW51bWVyYXRpb25WYWx1ZVZhbHVlID0gb2Jq
ZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImVudW1lcmF0
aW9uVmFsdWUiKSk7CisgICAgICAgIGVudW1lcmF0aW9uVmFsdWVWYWx1ZSA9IG9iamVjdC0+Z2V0
KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImVudW1lcmF0aW9uVmFsdWUiKSk7
CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICB9CiAg
ICAgaWYgKCFlbnVtZXJhdGlvblZhbHVlVmFsdWUuaXNVbmRlZmluZWQoKSkgewpAQCAtMTIxNCw3
ICsxMjE0LDcgQEAgdGVtcGxhdGU8PiBBbHRlcm5hdGVEaWN0aW9uYXJ5TmFtZSBjb252ZQogICAg
IGlmIChpc051bGxPclVuZGVmaW5lZCkKICAgICAgICAgYm9vbGVhbldpdGhvdXREZWZhdWx0VmFs
dWUgPSBqc1VuZGVmaW5lZCgpOwogICAgIGVsc2UgewotICAgICAgICBib29sZWFuV2l0aG91dERl
ZmF1bHRWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygm
c3RhdGUsICJib29sZWFuV2l0aG91dERlZmF1bHQiKSk7CisgICAgICAgIGJvb2xlYW5XaXRob3V0
RGVmYXVsdFZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KHZtLCAiYm9vbGVhbldpdGhvdXREZWZhdWx0IikpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgfQogICAgIGlmICghYm9vbGVhbldpdGhvdXREZWZh
dWx0VmFsdWUuaXNVbmRlZmluZWQoKSkgewpAQCAtMTIyNSw3ICsxMjI1LDcgQEAgdGVtcGxhdGU8
PiBBbHRlcm5hdGVEaWN0aW9uYXJ5TmFtZSBjb252ZQogICAgIGlmIChpc051bGxPclVuZGVmaW5l
ZCkKICAgICAgICAgZW51bWVyYXRpb25WYWx1ZVZhbHVlID0ganNVbmRlZmluZWQoKTsKICAgICBl
bHNlIHsKLSAgICAgICAgZW51bWVyYXRpb25WYWx1ZVZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRl
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImVudW1lcmF0aW9uVmFsdWUiKSk7Cisg
ICAgICAgIGVudW1lcmF0aW9uVmFsdWVWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZyh2bSwgImVudW1lcmF0aW9uVmFsdWUiKSk7CiAgICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICB9CiAgICAgaWYgKCFlbnVtZXJh
dGlvblZhbHVlVmFsdWUuaXNVbmRlZmluZWQoKSkgewpAQCAtMTI1MCw3ICsxMjUwLDcgQEAgdGVt
cGxhdGU8PiBUZXN0T2JqOjpQYXJlbnREaWN0aW9uYXJ5IGNvbgogICAgIGlmIChpc051bGxPclVu
ZGVmaW5lZCkKICAgICAgICAgcGFyZW50TWVtYmVyMVZhbHVlID0ganNVbmRlZmluZWQoKTsKICAg
ICBlbHNlIHsKLSAgICAgICAgcGFyZW50TWVtYmVyMVZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRl
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgInBhcmVudE1lbWJlcjEiKSk7CisgICAg
ICAgIHBhcmVudE1lbWJlcjFWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZyh2bSwgInBhcmVudE1lbWJlcjEiKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICB9CiAgICAgaWYgKCFwYXJlbnRNZW1iZXIxVmFs
dWUuaXNVbmRlZmluZWQoKSkgewpAQCAtMTI2MSw3ICsxMjYxLDcgQEAgdGVtcGxhdGU8PiBUZXN0
T2JqOjpQYXJlbnREaWN0aW9uYXJ5IGNvbgogICAgIGlmIChpc051bGxPclVuZGVmaW5lZCkKICAg
ICAgICAgcGFyZW50TWVtYmVyMlZhbHVlID0ganNVbmRlZmluZWQoKTsKICAgICBlbHNlIHsKLSAg
ICAgICAgcGFyZW50TWVtYmVyMlZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKCZzdGF0ZSwgInBhcmVudE1lbWJlcjIiKSk7CisgICAgICAgIHBhcmVudE1l
bWJlcjJWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2
bSwgInBhcmVudE1lbWJlcjIiKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dT
Y29wZSwgeyB9KTsKICAgICB9CiAgICAgaWYgKCFwYXJlbnRNZW1iZXIyVmFsdWUuaXNVbmRlZmlu
ZWQoKSkgewpAQCAtMTI4Niw3ICsxMjg2LDcgQEAgdGVtcGxhdGU8PiBUZXN0T2JqOjpDaGlsZERp
Y3Rpb25hcnkgY29udgogICAgIGlmIChpc051bGxPclVuZGVmaW5lZCkKICAgICAgICAgcGFyZW50
TWVtYmVyMVZhbHVlID0ganNVbmRlZmluZWQoKTsKICAgICBlbHNlIHsKLSAgICAgICAgcGFyZW50
TWVtYmVyMVZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KCZzdGF0ZSwgInBhcmVudE1lbWJlcjEiKSk7CisgICAgICAgIHBhcmVudE1lbWJlcjFWYWx1ZSA9
IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInBhcmVudE1l
bWJlcjEiKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsK
ICAgICB9CiAgICAgaWYgKCFwYXJlbnRNZW1iZXIxVmFsdWUuaXNVbmRlZmluZWQoKSkgewpAQCAt
MTI5Nyw3ICsxMjk3LDcgQEAgdGVtcGxhdGU8PiBUZXN0T2JqOjpDaGlsZERpY3Rpb25hcnkgY29u
dgogICAgIGlmIChpc051bGxPclVuZGVmaW5lZCkKICAgICAgICAgcGFyZW50TWVtYmVyMlZhbHVl
ID0ganNVbmRlZmluZWQoKTsKICAgICBlbHNlIHsKLSAgICAgICAgcGFyZW50TWVtYmVyMlZhbHVl
ID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgInBh
cmVudE1lbWJlcjIiKSk7CisgICAgICAgIHBhcmVudE1lbWJlcjJWYWx1ZSA9IG9iamVjdC0+Z2V0
KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInBhcmVudE1lbWJlcjIiKSk7CiAg
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICB9CiAgICAg
aWYgKCFwYXJlbnRNZW1iZXIyVmFsdWUuaXNVbmRlZmluZWQoKSkgewpAQCAtMTMwOCw3ICsxMzA4
LDcgQEAgdGVtcGxhdGU8PiBUZXN0T2JqOjpDaGlsZERpY3Rpb25hcnkgY29udgogICAgIGlmIChp
c051bGxPclVuZGVmaW5lZCkKICAgICAgICAgY2hpbGRNZW1iZXIxVmFsdWUgPSBqc1VuZGVmaW5l
ZCgpOwogICAgIGVsc2UgewotICAgICAgICBjaGlsZE1lbWJlcjFWYWx1ZSA9IG9iamVjdC0+Z2V0
KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJjaGlsZE1lbWJlcjEiKSk7
CisgICAgICAgIGNoaWxkTWVtYmVyMVZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKHZtLCAiY2hpbGRNZW1iZXIxIikpOwogICAgICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgfQogICAgIGlmICghY2hpbGRNZW1iZXIx
VmFsdWUuaXNVbmRlZmluZWQoKSkgewpAQCAtMTMxOSw3ICsxMzE5LDcgQEAgdGVtcGxhdGU8PiBU
ZXN0T2JqOjpDaGlsZERpY3Rpb25hcnkgY29udgogICAgIGlmIChpc051bGxPclVuZGVmaW5lZCkK
ICAgICAgICAgY2hpbGRNZW1iZXIyVmFsdWUgPSBqc1VuZGVmaW5lZCgpOwogICAgIGVsc2Ugewot
ICAgICAgICBjaGlsZE1lbWJlcjJWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZygmc3RhdGUsICJjaGlsZE1lbWJlcjIiKSk7CisgICAgICAgIGNoaWxkTWVt
YmVyMlZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZt
LCAiY2hpbGRNZW1iZXIyIikpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2Nv
cGUsIHsgfSk7CiAgICAgfQogICAgIGlmICghY2hpbGRNZW1iZXIyVmFsdWUuaXNVbmRlZmluZWQo
KSkgewpAQCAtMTM0Niw3ICsxMzQ2LDcgQEAgdGVtcGxhdGU8PiBUZXN0T2JqOjpDb25kaXRpb25h
bERpY3Rpb25hcgogICAgIGlmIChpc051bGxPclVuZGVmaW5lZCkKICAgICAgICAgc3RyaW5nV2l0
aG91dERlZmF1bHRWYWx1ZSA9IGpzVW5kZWZpbmVkKCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIHN0
cmluZ1dpdGhvdXREZWZhdWx0VmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6
OmZyb21TdHJpbmcoJnN0YXRlLCAic3RyaW5nV2l0aG91dERlZmF1bHQiKSk7CisgICAgICAgIHN0
cmluZ1dpdGhvdXREZWZhdWx0VmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6
OmZyb21TdHJpbmcodm0sICJzdHJpbmdXaXRob3V0RGVmYXVsdCIpKTsKICAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0KICAgICBpZiAoIXN0cmluZ1dp
dGhvdXREZWZhdWx0VmFsdWUuaXNVbmRlZmluZWQoKSkgewpAQCAtMTM3NSw3ICsxMzc1LDcgQEAg
dGVtcGxhdGU8PiBUZXN0T2JqOjpDb25kaXRpb25hbERpY3Rpb25hcgogICAgIGlmIChpc051bGxP
clVuZGVmaW5lZCkKICAgICAgICAgc3RyaW5nV2l0aG91dERlZmF1bHRWYWx1ZSA9IGpzVW5kZWZp
bmVkKCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIHN0cmluZ1dpdGhvdXREZWZhdWx0VmFsdWUgPSBv
YmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAic3RyaW5n
V2l0aG91dERlZmF1bHQiKSk7CisgICAgICAgIHN0cmluZ1dpdGhvdXREZWZhdWx0VmFsdWUgPSBv
YmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJzdHJpbmdXaXRo
b3V0RGVmYXVsdCIpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7
IH0pOwogICAgIH0KICAgICBpZiAoIXN0cmluZ1dpdGhvdXREZWZhdWx0VmFsdWUuaXNVbmRlZmlu
ZWQoKSkgewpAQCAtMTQwNCw3ICsxNDA0LDcgQEAgdGVtcGxhdGU8PiBUZXN0T2JqOjpDb25kaXRp
b25hbERpY3Rpb25hcgogICAgIGlmIChpc051bGxPclVuZGVmaW5lZCkKICAgICAgICAgc3RyaW5n
V2l0aG91dERlZmF1bHRWYWx1ZSA9IGpzVW5kZWZpbmVkKCk7CiAgICAgZWxzZSB7Ci0gICAgICAg
IHN0cmluZ1dpdGhvdXREZWZhdWx0VmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAic3RyaW5nV2l0aG91dERlZmF1bHQiKSk7CisgICAgICAg
IHN0cmluZ1dpdGhvdXREZWZhdWx0VmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcodm0sICJzdHJpbmdXaXRob3V0RGVmYXVsdCIpKTsKICAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0KICAgICBpZiAoIXN0cmlu
Z1dpdGhvdXREZWZhdWx0VmFsdWUuaXNVbmRlZmluZWQoKSkgewpAQCAtMTk2OCwxOSArMTk2OCwx
OSBAQCB0ZW1wbGF0ZTw+IEpTVmFsdWUgSlNUZXN0T2JqQ29uc3RydWN0b3I6CiB0ZW1wbGF0ZTw+
IHZvaWQgSlNUZXN0T2JqQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKFZNJiB2bSwg
SlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKIHsKICAgICBwdXREaXJlY3Qodm0sIHZt
LnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgSlNUZXN0T2JqOjpwcm90b3R5cGUodm0sIGdsb2Jh
bE9iamVjdCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUgfCBKU0M6OlByb3Bl
cnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVt
KTsKLSAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlh
bFN0cmluZygmdm0sIFN0cmluZygiVGVzdE9iamVjdCJfcykpLCBKU0M6OlByb3BlcnR5QXR0cmli
dXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKKyAgICBw
dXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZyh2
bSwgU3RyaW5nKCJUZXN0T2JqZWN0Il9zKSksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRP
bmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwogICAgIHB1dERpcmVjdCh2
bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigyKSwgSlNDOjpQcm9wZXJ0eUF0
dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CiAg
ICAgcmVpZnlTdGF0aWNQcm9wZXJ0aWVzKHZtLCBKU1Rlc3RPYmo6OmluZm8oKSwgSlNUZXN0T2Jq
Q29uc3RydWN0b3JUYWJsZVZhbHVlcywgKnRoaXMpOwogI2lmIEVOQUJMRShURVNUX0ZFQVRVUkUp
CiAgICAgaWYgKCFSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLnRlc3RG
ZWF0dXJlRW5hYmxlZCgpKSB7Ci0gICAgICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmll
cjo6ZnJvbVN0cmluZygmdm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiZW5hYmxl
ZEF0UnVudGltZUF0dHJpYnV0ZVN0YXRpYyIpLCBzdHJsZW4oImVuYWJsZWRBdFJ1bnRpbWVBdHRy
aWJ1dGVTdGF0aWMiKSk7CisgICAgICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6
ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJlbmFibGVkQXRS
dW50aW1lQXR0cmlidXRlU3RhdGljIiksIHN0cmxlbigiZW5hYmxlZEF0UnVudGltZUF0dHJpYnV0
ZVN0YXRpYyIpKTsKICAgICAgICAgVk06OkRlbGV0ZVByb3BlcnR5TW9kZVNjb3BlIHNjb3BlKHZt
LCBWTTo6RGVsZXRlUHJvcGVydHlNb2RlOjpJZ25vcmVDb25maWd1cmFibGUpOwogICAgICAgICBK
U09iamVjdDo6ZGVsZXRlUHJvcGVydHkodGhpcywgZ2xvYmFsT2JqZWN0Lmdsb2JhbEV4ZWMoKSwg
cHJvcGVydHlOYW1lKTsKICAgICB9CiAjZW5kaWYKICNpZiBFTkFCTEUoVEVTVF9GRUFUVVJFKQog
ICAgIGlmICghUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS50ZXN0RmVh
dHVyZUVuYWJsZWQoKSkgewotICAgICAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6
OmZyb21TdHJpbmcoJnZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oImVuYWJsZWRB
dFJ1bnRpbWVPcGVyYXRpb25TdGF0aWMiKSwgc3RybGVuKCJlbmFibGVkQXRSdW50aW1lT3BlcmF0
aW9uU3RhdGljIikpOworICAgICAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZy
b21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiZW5hYmxlZEF0UnVu
dGltZU9wZXJhdGlvblN0YXRpYyIpLCBzdHJsZW4oImVuYWJsZWRBdFJ1bnRpbWVPcGVyYXRpb25T
dGF0aWMiKSk7CiAgICAgICAgIFZNOjpEZWxldGVQcm9wZXJ0eU1vZGVTY29wZSBzY29wZSh2bSwg
Vk06OkRlbGV0ZVByb3BlcnR5TW9kZTo6SWdub3JlQ29uZmlndXJhYmxlKTsKICAgICAgICAgSlNP
YmplY3Q6OmRlbGV0ZVByb3BlcnR5KHRoaXMsIGdsb2JhbE9iamVjdC5nbG9iYWxFeGVjKCksIHBy
b3BlcnR5TmFtZSk7CiAgICAgfQpAQCAtMjMzNCw4NCArMjMzNCw4NCBAQCB2b2lkIEpTVGVzdE9i
alByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oCiAjaWYgRU5BQkxFKFRFU1RfRkVBVFVSRSkKICAg
ICBpZiAoIVJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkudGVzdEZlYXR1
cmVFbmFibGVkKCkpIHsKICAgICAgICAgaGFzRGlzYWJsZWRSdW50aW1lUHJvcGVydGllcyA9IHRy
dWU7Ci0gICAgICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZygm
dm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiZW5hYmxlZEF0UnVudGltZU9wZXJh
dGlvbiIpLCBzdHJsZW4oImVuYWJsZWRBdFJ1bnRpbWVPcGVyYXRpb24iKSk7CisgICAgICAgIGF1
dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBMQ2hhcio+KCJlbmFibGVkQXRSdW50aW1lT3BlcmF0aW9uIiksIHN0cmxlbigi
ZW5hYmxlZEF0UnVudGltZU9wZXJhdGlvbiIpKTsKICAgICAgICAgVk06OkRlbGV0ZVByb3BlcnR5
TW9kZVNjb3BlIHNjb3BlKHZtLCBWTTo6RGVsZXRlUHJvcGVydHlNb2RlOjpJZ25vcmVDb25maWd1
cmFibGUpOwogICAgICAgICBKU09iamVjdDo6ZGVsZXRlUHJvcGVydHkodGhpcywgZ2xvYmFsT2Jq
ZWN0KCktPmdsb2JhbEV4ZWMoKSwgcHJvcGVydHlOYW1lKTsKICAgICB9CiAjZW5kaWYKICAgICBp
ZiAoISh3b3JsZEZvckRPTU9iamVjdCgqdGhpcykuc29tZVdvcmxkKCkgJiYgUnVudGltZUVuYWJs
ZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS50ZXN0RmVhdHVyZUVuYWJsZWQoKSkpIHsKICAg
ICAgICAgaGFzRGlzYWJsZWRSdW50aW1lUHJvcGVydGllcyA9IHRydWU7Ci0gICAgICAgIGF1dG8g
cHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgTENoYXIqPigiZW5hYmxlZEluU3BlY2lmaWNXb3JsZFdoZW5SdW50aW1lRmVhdHVy
ZUVuYWJsZWQiKSwgc3RybGVuKCJlbmFibGVkSW5TcGVjaWZpY1dvcmxkV2hlblJ1bnRpbWVGZWF0
dXJlRW5hYmxlZCIpKTsKKyAgICAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oImVuYWJsZWRJblNw
ZWNpZmljV29ybGRXaGVuUnVudGltZUZlYXR1cmVFbmFibGVkIiksIHN0cmxlbigiZW5hYmxlZElu
U3BlY2lmaWNXb3JsZFdoZW5SdW50aW1lRmVhdHVyZUVuYWJsZWQiKSk7CiAgICAgICAgIFZNOjpE
ZWxldGVQcm9wZXJ0eU1vZGVTY29wZSBzY29wZSh2bSwgVk06OkRlbGV0ZVByb3BlcnR5TW9kZTo6
SWdub3JlQ29uZmlndXJhYmxlKTsKICAgICAgICAgSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KHRo
aXMsIGdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCksIHByb3BlcnR5TmFtZSk7CiAgICAgfQog
ICAgIGlmICghd29ybGRGb3JET01PYmplY3QoKnRoaXMpLnNvbWVXb3JsZCgpKSB7CiAgICAgICAg
IGhhc0Rpc2FibGVkUnVudGltZVByb3BlcnRpZXMgPSB0cnVlOwotICAgICAgICBhdXRvIHByb3Bl
cnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCByZWludGVycHJldF9jYXN0PGNv
bnN0IExDaGFyKj4oIndvcmxkU3BlY2lmaWNNZXRob2QiKSwgc3RybGVuKCJ3b3JsZFNwZWNpZmlj
TWV0aG9kIikpOworICAgICAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb21T
dHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigid29ybGRTcGVjaWZpY01l
dGhvZCIpLCBzdHJsZW4oIndvcmxkU3BlY2lmaWNNZXRob2QiKSk7CiAgICAgICAgIFZNOjpEZWxl
dGVQcm9wZXJ0eU1vZGVTY29wZSBzY29wZSh2bSwgVk06OkRlbGV0ZVByb3BlcnR5TW9kZTo6SWdu
b3JlQ29uZmlndXJhYmxlKTsKICAgICAgICAgSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KHRoaXMs
IGdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCksIHByb3BlcnR5TmFtZSk7CiAgICAgfQogICAg
IGlmICghanNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRF
eGVjdXRpb25Db250ZXh0KCktPmlzU2VjdXJlQ29udGV4dCgpKSB7CiAgICAgICAgIGhhc0Rpc2Fi
bGVkUnVudGltZVByb3BlcnRpZXMgPSB0cnVlOwotICAgICAgICBhdXRvIHByb3BlcnR5TmFtZSA9
IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFy
Kj4oImNhbGN1bGF0ZVNlY3JldFJlc3VsdCIpLCBzdHJsZW4oImNhbGN1bGF0ZVNlY3JldFJlc3Vs
dCIpKTsKKyAgICAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oImNhbGN1bGF0ZVNlY3JldFJlc3Vs
dCIpLCBzdHJsZW4oImNhbGN1bGF0ZVNlY3JldFJlc3VsdCIpKTsKICAgICAgICAgVk06OkRlbGV0
ZVByb3BlcnR5TW9kZVNjb3BlIHNjb3BlKHZtLCBWTTo6RGVsZXRlUHJvcGVydHlNb2RlOjpJZ25v
cmVDb25maWd1cmFibGUpOwogICAgICAgICBKU09iamVjdDo6ZGVsZXRlUHJvcGVydHkodGhpcywg
Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKSwgcHJvcGVydHlOYW1lKTsKICAgICB9CiAgICAg
aWYgKCFqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKS0+aXNTZWN1cmVDb250ZXh0KCkpIHsKICAgICAgICAgaGFzRGlzYWJs
ZWRSdW50aW1lUHJvcGVydGllcyA9IHRydWU7Ci0gICAgICAgIGF1dG8gcHJvcGVydHlOYW1lID0g
SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIq
PigiZ2V0U2VjcmV0Qm9vbGVhbiIpLCBzdHJsZW4oImdldFNlY3JldEJvb2xlYW4iKSk7CisgICAg
ICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRl
cnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJnZXRTZWNyZXRCb29sZWFuIiksIHN0cmxlbigiZ2V0
U2VjcmV0Qm9vbGVhbiIpKTsKICAgICAgICAgVk06OkRlbGV0ZVByb3BlcnR5TW9kZVNjb3BlIHNj
b3BlKHZtLCBWTTo6RGVsZXRlUHJvcGVydHlNb2RlOjpJZ25vcmVDb25maWd1cmFibGUpOwogICAg
ICAgICBKU09iamVjdDo6ZGVsZXRlUHJvcGVydHkodGhpcywgZ2xvYmFsT2JqZWN0KCktPmdsb2Jh
bEV4ZWMoKSwgcHJvcGVydHlOYW1lKTsKICAgICB9CiAjaWYgRU5BQkxFKFRFU1RfRkVBVFVSRSkK
ICAgICBpZiAoIShqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QoKSktPnNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+aXNTZWN1cmVDb250ZXh0KCkgJiYgUnVudGltZUVuYWJs
ZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS50ZXN0RmVhdHVyZUVuYWJsZWQoKSkpIHsKICAg
ICAgICAgaGFzRGlzYWJsZWRSdW50aW1lUHJvcGVydGllcyA9IHRydWU7Ci0gICAgICAgIGF1dG8g
cHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgTENoYXIqPigidGVzdEZlYXR1cmVHZXRTZWNyZXRCb29sZWFuIiksIHN0cmxlbigi
dGVzdEZlYXR1cmVHZXRTZWNyZXRCb29sZWFuIikpOworICAgICAgICBhdXRvIHByb3BlcnR5TmFt
ZSA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENo
YXIqPigidGVzdEZlYXR1cmVHZXRTZWNyZXRCb29sZWFuIiksIHN0cmxlbigidGVzdEZlYXR1cmVH
ZXRTZWNyZXRCb29sZWFuIikpOwogICAgICAgICBWTTo6RGVsZXRlUHJvcGVydHlNb2RlU2NvcGUg
c2NvcGUodm0sIFZNOjpEZWxldGVQcm9wZXJ0eU1vZGU6Oklnbm9yZUNvbmZpZ3VyYWJsZSk7CiAg
ICAgICAgIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eSh0aGlzLCBnbG9iYWxPYmplY3QoKS0+Z2xv
YmFsRXhlYygpLCBwcm9wZXJ0eU5hbWUpOwogICAgIH0KICNlbmRpZgogICAgIGlmICghanNDYXN0
PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250
ZXh0KCktPmlzRG9jdW1lbnQoKSkgewogICAgICAgICBoYXNEaXNhYmxlZFJ1bnRpbWVQcm9wZXJ0
aWVzID0gdHJ1ZTsKLSAgICAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKCZ2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJjb25kaXRpb25hbGx5
RXhwb3NlZFRvV2luZG93RnVuY3Rpb24iKSwgc3RybGVuKCJjb25kaXRpb25hbGx5RXhwb3NlZFRv
V2luZG93RnVuY3Rpb24iKSk7CisgICAgICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmll
cjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJjb25kaXRp
b25hbGx5RXhwb3NlZFRvV2luZG93RnVuY3Rpb24iKSwgc3RybGVuKCJjb25kaXRpb25hbGx5RXhw
b3NlZFRvV2luZG93RnVuY3Rpb24iKSk7CiAgICAgICAgIFZNOjpEZWxldGVQcm9wZXJ0eU1vZGVT
Y29wZSBzY29wZSh2bSwgVk06OkRlbGV0ZVByb3BlcnR5TW9kZTo6SWdub3JlQ29uZmlndXJhYmxl
KTsKICAgICAgICAgSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KHRoaXMsIGdsb2JhbE9iamVjdCgp
LT5nbG9iYWxFeGVjKCksIHByb3BlcnR5TmFtZSk7CiAgICAgfQogICAgIGlmICghanNDYXN0PEpT
RE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0
KCktPmlzV29ya2VyR2xvYmFsU2NvcGUoKSkgewogICAgICAgICBoYXNEaXNhYmxlZFJ1bnRpbWVQ
cm9wZXJ0aWVzID0gdHJ1ZTsKLSAgICAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKCZ2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJjb25kaXRp
b25hbGx5RXhwb3NlZFRvV29ya2VyRnVuY3Rpb24iKSwgc3RybGVuKCJjb25kaXRpb25hbGx5RXhw
b3NlZFRvV29ya2VyRnVuY3Rpb24iKSk7CisgICAgICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRl
bnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJj
b25kaXRpb25hbGx5RXhwb3NlZFRvV29ya2VyRnVuY3Rpb24iKSwgc3RybGVuKCJjb25kaXRpb25h
bGx5RXhwb3NlZFRvV29ya2VyRnVuY3Rpb24iKSk7CiAgICAgICAgIFZNOjpEZWxldGVQcm9wZXJ0
eU1vZGVTY29wZSBzY29wZSh2bSwgVk06OkRlbGV0ZVByb3BlcnR5TW9kZTo6SWdub3JlQ29uZmln
dXJhYmxlKTsKICAgICAgICAgSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KHRoaXMsIGdsb2JhbE9i
amVjdCgpLT5nbG9iYWxFeGVjKCksIHByb3BlcnR5TmFtZSk7CiAgICAgfQogICAgIGlmICghKGpz
Q2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpLT5pc1NlY3VyZUNvbnRleHQoKXx8IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+
KGdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5hbGxvd3NNZWRpYURl
dmljZXMoKSkpIHsKICAgICAgICAgaGFzRGlzYWJsZWRSdW50aW1lUHJvcGVydGllcyA9IHRydWU7
Ci0gICAgICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0s
IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigibWVkaWFEZXZpY2VzIiksIHN0cmxlbigi
bWVkaWFEZXZpY2VzIikpOworICAgICAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6
OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigibWVkaWFEZXZp
Y2VzIiksIHN0cmxlbigibWVkaWFEZXZpY2VzIikpOwogICAgICAgICBWTTo6RGVsZXRlUHJvcGVy
dHlNb2RlU2NvcGUgc2NvcGUodm0sIFZNOjpEZWxldGVQcm9wZXJ0eU1vZGU6Oklnbm9yZUNvbmZp
Z3VyYWJsZSk7CiAgICAgICAgIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eSh0aGlzLCBnbG9iYWxP
YmplY3QoKS0+Z2xvYmFsRXhlYygpLCBwcm9wZXJ0eU5hbWUpOwogICAgIH0KICAgICBpZiAoIShq
c0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKS0+aXNTZWN1cmVDb250ZXh0KCl8fCBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3Qq
PihnbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+aGFzU2VydmljZVdv
cmtlclNjaGVtZSgpKSkgewogICAgICAgICBoYXNEaXNhYmxlZFJ1bnRpbWVQcm9wZXJ0aWVzID0g
dHJ1ZTsKLSAgICAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KCZ2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJzZXJ2aWNlV29ya2VycyIpLCBz
dHJsZW4oInNlcnZpY2VXb3JrZXJzIikpOworICAgICAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElk
ZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigi
c2VydmljZVdvcmtlcnMiKSwgc3RybGVuKCJzZXJ2aWNlV29ya2VycyIpKTsKICAgICAgICAgVk06
OkRlbGV0ZVByb3BlcnR5TW9kZVNjb3BlIHNjb3BlKHZtLCBWTTo6RGVsZXRlUHJvcGVydHlNb2Rl
OjpJZ25vcmVDb25maWd1cmFibGUpOwogICAgICAgICBKU09iamVjdDo6ZGVsZXRlUHJvcGVydHko
dGhpcywgZ2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKSwgcHJvcGVydHlOYW1lKTsKICAgICB9
CiAjaWYgRU5BQkxFKFRFU1RfRkVBVFVSRSkKICAgICBpZiAoIShSdW50aW1lRW5hYmxlZEZlYXR1
cmVzOjpzaGFyZWRGZWF0dXJlcygpLnRlc3RGZWF0dXJlRW5hYmxlZCgpICYmIFJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkudGVzdEZlYXR1cmUxRW5hYmxlZCgpKSkgewog
ICAgICAgICBoYXNEaXNhYmxlZFJ1bnRpbWVQcm9wZXJ0aWVzID0gdHJ1ZTsKLSAgICAgICAgYXV0
byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBMQ2hhcio+KCJlbmFibGVkQXRSdW50aW1lQXR0cmlidXRlIiksIHN0cmxlbigi
ZW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZSIpKTsKKyAgICAgICAgYXV0byBwcm9wZXJ0eU5hbWUg
PSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFy
Kj4oImVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGUiKSwgc3RybGVuKCJlbmFibGVkQXRSdW50aW1l
QXR0cmlidXRlIikpOwogICAgICAgICBWTTo6RGVsZXRlUHJvcGVydHlNb2RlU2NvcGUgc2NvcGUo
dm0sIFZNOjpEZWxldGVQcm9wZXJ0eU1vZGU6Oklnbm9yZUNvbmZpZ3VyYWJsZSk7CiAgICAgICAg
IEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eSh0aGlzLCBnbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhl
YygpLCBwcm9wZXJ0eU5hbWUpOwogICAgIH0KICNlbmRpZgogICAgIGlmICghanNDYXN0PEpTRE9N
R2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkt
PmlzRG9jdW1lbnQoKSkgewogICAgICAgICBoYXNEaXNhYmxlZFJ1bnRpbWVQcm9wZXJ0aWVzID0g
dHJ1ZTsKLSAgICAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KCZ2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJjb25kaXRpb25hbGx5RXhwb3Nl
ZFRvV2luZG93QXR0cmlidXRlIiksIHN0cmxlbigiY29uZGl0aW9uYWxseUV4cG9zZWRUb1dpbmRv
d0F0dHJpYnV0ZSIpKTsKKyAgICAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oImNvbmRpdGlvbmFs
bHlFeHBvc2VkVG9XaW5kb3dBdHRyaWJ1dGUiKSwgc3RybGVuKCJjb25kaXRpb25hbGx5RXhwb3Nl
ZFRvV2luZG93QXR0cmlidXRlIikpOwogICAgICAgICBWTTo6RGVsZXRlUHJvcGVydHlNb2RlU2Nv
cGUgc2NvcGUodm0sIFZNOjpEZWxldGVQcm9wZXJ0eU1vZGU6Oklnbm9yZUNvbmZpZ3VyYWJsZSk7
CiAgICAgICAgIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eSh0aGlzLCBnbG9iYWxPYmplY3QoKS0+
Z2xvYmFsRXhlYygpLCBwcm9wZXJ0eU5hbWUpOwogICAgIH0KICAgICBpZiAoIWpzQ2FzdDxKU0RP
TUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
LT5pc1dvcmtlckdsb2JhbFNjb3BlKCkpIHsKICAgICAgICAgaGFzRGlzYWJsZWRSdW50aW1lUHJv
cGVydGllcyA9IHRydWU7Ci0gICAgICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6
ZnJvbVN0cmluZygmdm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiY29uZGl0aW9u
YWxseUV4cG9zZWRUb1dvcmtlckF0dHJpYnV0ZSIpLCBzdHJsZW4oImNvbmRpdGlvbmFsbHlFeHBv
c2VkVG9Xb3JrZXJBdHRyaWJ1dGUiKSk7CisgICAgICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRl
bnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJj
b25kaXRpb25hbGx5RXhwb3NlZFRvV29ya2VyQXR0cmlidXRlIiksIHN0cmxlbigiY29uZGl0aW9u
YWxseUV4cG9zZWRUb1dvcmtlckF0dHJpYnV0ZSIpKTsKICAgICAgICAgVk06OkRlbGV0ZVByb3Bl
cnR5TW9kZVNjb3BlIHNjb3BlKHZtLCBWTTo6RGVsZXRlUHJvcGVydHlNb2RlOjpJZ25vcmVDb25m
aWd1cmFibGUpOwogICAgICAgICBKU09iamVjdDo6ZGVsZXRlUHJvcGVydHkodGhpcywgZ2xvYmFs
T2JqZWN0KCktPmdsb2JhbEV4ZWMoKSwgcHJvcGVydHlOYW1lKTsKICAgICB9CkBAIC0yNDIyLDgg
KzI0MjIsOCBAQCB2b2lkIEpTVGVzdE9ialByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oCiAgICAg
cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5pdGVyYXRvclN5bWJvbCwgZ2xvYmFsT2Jq
ZWN0KCktPmFycmF5UHJvdG90eXBlKCktPmdldERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+
YnVpbHRpbk5hbWVzKCkudmFsdWVzUHJpdmF0ZU5hbWUoKSksIHN0YXRpY19jYXN0PHVuc2lnbmVk
PihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOwogICAgIGFkZFZhbHVlSXRlcmFi
bGVNZXRob2RzKCpnbG9iYWxPYmplY3QoKSwgKnRoaXMpOwogICAgIEpTT2JqZWN0JiB1bnNjb3Bh
YmxlcyA9ICpjb25zdHJ1Y3RFbXB0eU9iamVjdChnbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygp
LCBnbG9iYWxPYmplY3QoKS0+bnVsbFByb3RvdHlwZU9iamVjdFN0cnVjdHVyZSgpKTsKLSAgICB1
bnNjb3BhYmxlcy5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAidm9p
ZE1ldGhvZCIpLCBqc0Jvb2xlYW4odHJ1ZSkpOwotICAgIHVuc2NvcGFibGVzLnB1dERpcmVjdCh2
bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJzaG9ydEF0dHIiKSwganNCb29sZWFuKHRy
dWUpKTsKKyAgICB1bnNjb3BhYmxlcy5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJp
bmcodm0sICJ2b2lkTWV0aG9kIiksIGpzQm9vbGVhbih0cnVlKSk7CisgICAgdW5zY29wYWJsZXMu
cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAic2hvcnRBdHRyIiksIGpz
Qm9vbGVhbih0cnVlKSk7CiAgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnBy
b3BlcnR5TmFtZXMtPnVuc2NvcGFibGVzU3ltYm9sLCAmdW5zY29wYWJsZXMsIEpTQzo6UHJvcGVy
dHlBdHRyaWJ1dGU6OkRvbnRFbnVtIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkp
OwogfQogCkBAIC0yNDkyLDEwICsyNDkyLDExIEBAIGJvb2wgSlNUZXN0T2JqOjpnZXRPd25Qcm9w
ZXJ0eVNsb3RCeUluZGUKIAogdm9pZCBKU1Rlc3RPYmo6OmdldE93blByb3BlcnR5TmFtZXMoSlNP
YmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBzdGF0ZSwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3Bl
cnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQogeworICAgIFZNJiB2bSA9IHN0YXRlLT52
bSgpOwogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0T2JqKj4ob2JqZWN0KTsK
ICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKG9iamVjdCwgaW5mbygpKTsKICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwLCBjb3VudCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKS5sZW5ndGgoKTsg
aSA8IGNvdW50OyArK2kpCi0gICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZy
b20oc3RhdGUsIGkpKTsKKyAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJv
bSh2bSwgaSkpOwogICAgIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgc3Rh
dGUsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwogfQogCkBAIC0yNjY1LDYgKzI2NjYsNyBAQCBFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25zdHJ1Y3RvclN0YXRpCiAKIHN0YXRpYyBpbmxpbmUgYm9v
bCBzZXRKU1Rlc3RPYmpDb25zdHJ1Y3RvclN0YXRpY1N0cmluZ0F0dHJTZXR0ZXIoRXhlY1N0YXRl
JiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKKyAgICBV
TlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBh
dXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KHN0YXRlLCB2YWx1ZSk7CiAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC0yNzI1LDYgKzI3
MjcsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpFbnVtQXR0cihFeGVjU3RhCiAKIHN0YXRp
YyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpFbnVtQXR0clNldHRlcihFeGVjU3RhdGUmIHN0YXRl
LCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93
U2NvcGUpCiB7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1
dG8gb3B0aW9uYWxOYXRpdmVWYWx1ZSA9IHBhcnNlRW51bWVyYXRpb248VGVzdE9iajo6RW51bVR5
cGU+KHN0YXRlLCB2YWx1ZSk7CkBAIC0yNzU5LDYgKzI3NjIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RPYmpCeXRlQXR0cihFeGVjU3RhCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RP
YmpCeXRlQXR0clNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3Qs
IEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CisgICAgVU5VU0VEX1BB
UkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1w
bCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0
PElETEJ5dGU+KHN0YXRlLCB2YWx1ZSk7CkBAIC0yNzkwLDYgKzI3OTQsNyBAQCBFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RPYmpPY3RldEF0dHIoRXhlY1N0CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRK
U1Rlc3RPYmpPY3RldEF0dHJTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlz
T2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogeworICAgIFVO
VVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1
dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0g
Y29udmVydDxJRExPY3RldD4oc3RhdGUsIHZhbHVlKTsKQEAgLTI4MjEsNiArMjgyNiw3IEBAIEVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9ialNob3J0QXR0cihFeGVjU3QKIAogc3RhdGljIGlubGluZSBi
b29sIHNldEpTVGVzdE9ialNob3J0QXR0clNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RP
YmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7
CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7
CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZl
VmFsdWUgPSBjb252ZXJ0PElETFNob3J0PihzdGF0ZSwgdmFsdWUpOwpAQCAtMjg1Miw2ICsyODU4
LDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ2xhbXBlZFNob3J0QXR0cgogCiBzdGF0aWMg
aW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQ2xhbXBlZFNob3J0QXR0clNldHRlcihFeGVjU3RhdGUm
IHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUm
IHRocm93U2NvcGUpCiB7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwog
ICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETENsYW1wQWRhcHRvcjxJRExTaG9ydD4+
KHN0YXRlLCB2YWx1ZSk7CkBAIC0yODgzLDYgKzI4OTAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpFbmZvcmNlUmFuZ2VTaG9yCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpF
bmZvcmNlUmFuZ2VTaG9ydEF0dHJTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0
aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogeworICAg
IFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAg
IGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVl
ID0gY29udmVydDxJRExFbmZvcmNlUmFuZ2VBZGFwdG9yPElETFNob3J0Pj4oc3RhdGUsIHZhbHVl
KTsKQEAgLTI5MTQsNiArMjkyMiw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialVuc2lnbmVk
U2hvcnRBdHQKIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialVuc2lnbmVkU2hvcnRB
dHRyU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1
ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKKyAgICBVTlVTRURfUEFSQU0oc3Rh
dGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gdGhp
c09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMVW5z
aWduZWRTaG9ydD4oc3RhdGUsIHZhbHVlKTsKQEAgLTI5NDUsNiArMjk1NCw3IEBAIEVuY29kZWRK
U1ZhbHVlIGpzVGVzdE9iakxvbmdBdHRyKEV4ZWNTdGEKIAogc3RhdGljIGlubGluZSBib29sIHNl
dEpTVGVzdE9iakxvbmdBdHRyU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhp
c09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKKyAgICBV
TlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBh
dXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9
IGNvbnZlcnQ8SURMTG9uZz4oc3RhdGUsIHZhbHVlKTsKQEAgLTI5NzYsNiArMjk4Niw3IEBAIEVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9iakxvbmdMb25nQXR0cihFeGUKIAogc3RhdGljIGlubGluZSBi
b29sIHNldEpTVGVzdE9iakxvbmdMb25nQXR0clNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rl
c3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUp
CiB7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0
aXZlVmFsdWUgPSBjb252ZXJ0PElETExvbmdMb25nPihzdGF0ZSwgdmFsdWUpOwpAQCAtMzAwNyw2
ICszMDE4LDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqVW5zaWduZWRMb25nTG9uZwogCiBz
dGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqVW5zaWduZWRMb25nTG9uZ0F0dHJTZXR0ZXIo
RXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogeworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAg
VU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0Lndy
YXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExVbnNpZ25lZExvbmdM
b25nPihzdGF0ZSwgdmFsdWUpOwpAQCAtMzAzOCw2ICszMDUwLDcgQEAgRW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqU3RyaW5nQXR0cihFeGVjUwogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0
T2JqU3RyaW5nQXR0clNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmpl
Y3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CisgICAgVU5VU0VE
X1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYg
aW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252
ZXJ0PElETERPTVN0cmluZz4oc3RhdGUsIHZhbHVlKTsKQEAgLTMwNjksNiArMzA4Miw3IEBAIEVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9ialVzdnN0cmluZ0F0dHIoRXgKIAogc3RhdGljIGlubGluZSBi
b29sIHNldEpTVGVzdE9ialVzdnN0cmluZ0F0dHJTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNU
ZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KQogeworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5h
dGl2ZVZhbHVlID0gY29udmVydDxJRExVU1ZTdHJpbmc+KHN0YXRlLCB2YWx1ZSk7CkBAIC0zMTAw
LDYgKzMxMTQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpUZXN0T2JqQXR0cihFeGVjCiAK
IHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpUZXN0T2JqQXR0clNldHRlcihFeGVjU3Rh
dGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2Nv
cGUmIHRocm93U2NvcGUpCiB7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgp
OwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETEludGVyZmFjZTxUZXN0T2JqPj4o
c3RhdGUsIHZhbHVlLCBbXShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYg
c2NvcGUpIHsgdGhyb3dBdHRyaWJ1dGVUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlLCAiVGVzdE9iamVj
dCIsICJ0ZXN0T2JqQXR0ciIsICJUZXN0T2JqIik7IH0pOwpAQCAtMzEzMSw2ICszMTQ2LDcgQEAg
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqVGVzdE51bGxhYmxlT2JqQQogCiBzdGF0aWMgaW5saW5l
IGJvb2wgc2V0SlNUZXN0T2JqVGVzdE51bGxhYmxlT2JqQXR0clNldHRlcihFeGVjU3RhdGUmIHN0
YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRo
cm93U2NvcGUpCiB7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAg
IGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETE51bGxhYmxlPElETEludGVyZmFjZTxUZXN0
T2JqPj4+KHN0YXRlLCB2YWx1ZSwgW10oSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93
U2NvcGUmIHNjb3BlKSB7IHRocm93QXR0cmlidXRlVHlwZUVycm9yKHN0YXRlLCBzY29wZSwgIlRl
c3RPYmplY3QiLCAidGVzdE51bGxhYmxlT2JqQXR0ciIsICJUZXN0T2JqIik7IH0pOwpAQCAtMzE2
Miw2ICszMTc4LDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqTGVuaWVudFRlc3RPYmpBdAog
CiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqTGVuaWVudFRlc3RPYmpBdHRyU2V0dGVy
KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwg
VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAg
IFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53
cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMSW50ZXJmYWNlPFRl
c3RPYmo+PihzdGF0ZSwgdmFsdWUsIFtdKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJv
d1Njb3BlJiBzY29wZSkgeyB0aHJvd0F0dHJpYnV0ZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUsICJU
ZXN0T2JqZWN0IiwgImxlbmllbnRUZXN0T2JqQXR0ciIsICJUZXN0T2JqIik7IH0pOwpAQCAtMzIw
Nyw2ICszMjI0LDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqU3RyaW5nQXR0clRyZWF0aQog
CiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqU3RyaW5nQXR0clRyZWF0aW5nTnVsbEFz
RW1wdHlTdHJpbmdTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0
LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogeworICAgIFVOVVNFRF9Q
QVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGlt
cGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVy
dDxJRExUcmVhdE51bGxBc0VtcHR5QWRhcHRvcjxJRExET01TdHJpbmc+PihzdGF0ZSwgdmFsdWUp
OwpAQCAtMzIzOCw2ICszMjU2LDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqVXN2c3RyaW5n
QXR0clRyZQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqVXN2c3RyaW5nQXR0clRy
ZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmdTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2Jq
JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewor
ICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwog
ICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZh
bHVlID0gY29udmVydDxJRExUcmVhdE51bGxBc0VtcHR5QWRhcHRvcjxJRExVU1ZTdHJpbmc+Pihz
dGF0ZSwgdmFsdWUpOwpAQCAtMzI2OSw2ICszMjg4LDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqQnl0ZVN0cmluZ0F0dHJUcgogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQnl0
ZVN0cmluZ0F0dHJUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nU2V0dGVyKEV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSkKIHsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAg
YXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMVHJlYXROdWxsQXNFbXB0eUFkYXB0b3I8SURM
Qnl0ZVN0cmluZz4+KHN0YXRlLCB2YWx1ZSk7CkBAIC0zMzAwLDYgKzMzMjAsNyBAQCBFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdMb25nUmVjb3JkCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBz
ZXRKU1Rlc3RPYmpTdHJpbmdMb25nUmVjb3JkQXR0clNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBK
U1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2Nv
cGUpCiB7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8g
bmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETFJlY29yZDxJRExET01TdHJpbmcsIElETExvbmc+Pihz
dGF0ZSwgdmFsdWUpOwpAQCAtMzMzMSw2ICszMzUyLDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqVXN2c3RyaW5nTG9uZ1JlYwogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqVXN2
c3RyaW5nTG9uZ1JlY29yZEF0dHJTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0
aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogeworICAg
IFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAg
IGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVl
ID0gY29udmVydDxJRExSZWNvcmQ8SURMVVNWU3RyaW5nLCBJRExMb25nPj4oc3RhdGUsIHZhbHVl
KTsKQEAgLTMzNjIsNiArMzM4NCw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialVzdnN0cmlu
Z0xvbmdSZWMKIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialVzdnN0cmluZ0xvbmdS
ZWNvcmRBdHRyU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwg
SlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKKyAgICBVTlVTRURfUEFS
QU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBs
ID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8
SURMUmVjb3JkPElETEJ5dGVTdHJpbmcsIElETExvbmc+PihzdGF0ZSwgdmFsdWUpOwpAQCAtMzM5
Myw2ICszNDE2LDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqU3RyaW5nT2JqUmVjb3JkQQog
CiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqU3RyaW5nT2JqUmVjb3JkQXR0clNldHRl
cihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUs
IFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qu
d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETFJlY29yZDxJRExE
T01TdHJpbmcsIElETEludGVyZmFjZTxUZXN0T2JqPj4+KHN0YXRlLCB2YWx1ZSk7CkBAIC0zNDI0
LDYgKzM0NDgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdOdWxsYWJsZU9iCiAK
IHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpTdHJpbmdOdWxsYWJsZU9ialJlY29yZEF0
dHJTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVl
IHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogeworICAgIFVOVVNFRF9QQVJBTShzdGF0
ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlz
T2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExSZWNv
cmQ8SURMRE9NU3RyaW5nLCBJRExOdWxsYWJsZTxJRExJbnRlcmZhY2U8VGVzdE9iaj4+Pj4oc3Rh
dGUsIHZhbHVlKTsKQEAgLTM0NTUsNiArMzQ4MCw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9i
akRpY3Rpb25hcnlBdHRyKEUKIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakRpY3Rp
b25hcnlBdHRyU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwg
SlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKKyAgICBVTlVTRURfUEFS
QU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBs
ID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8
SURMRGljdGlvbmFyeTxUZXN0T2JqOjpEaWN0aW9uYXJ5Pj4oc3RhdGUsIHZhbHVlKTsKQEAgLTM0
ODYsNiArMzUxMiw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlRGljdGlvbmEK
IAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iak51bGxhYmxlRGljdGlvbmFyeUF0dHJT
ZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZh
bHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogeworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7
CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2Jq
ZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExOdWxsYWJs
ZTxJRExEaWN0aW9uYXJ5PFRlc3RPYmo6OkRpY3Rpb25hcnk+Pj4oc3RhdGUsIHZhbHVlKTsKQEAg
LTM1MTcsNiArMzU0NCw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakFubm90YXRlZFR5cGVJ
blUKIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakFubm90YXRlZFR5cGVJblVuaW9u
QXR0clNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFs
dWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CisgICAgVU5VU0VEX1BBUkFNKHN0
YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRo
aXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETFVu
aW9uPElETERPTVN0cmluZywgSURMQ2xhbXBBZGFwdG9yPElETExvbmc+Pj4oc3RhdGUsIHZhbHVl
KTsKQEAgLTM1NDgsNiArMzU3Niw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakFubm90YXRl
ZFR5cGVJblMKIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakFubm90YXRlZFR5cGVJ
blNlcXVlbmNlQXR0clNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmpl
Y3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CisgICAgVU5VU0VE
X1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYg
aW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252
ZXJ0PElETFNlcXVlbmNlPElETENsYW1wQWRhcHRvcjxJRExMb25nPj4+KHN0YXRlLCB2YWx1ZSk7
CkBAIC0zNTc5LDYgKzM2MDgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpJbXBsZW1lbnRh
dGlvbkVuCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpJbXBsZW1lbnRhdGlvbkVu
dW1BdHRyU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNW
YWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKKyAgICBVTlVTRURfUEFSQU0o
c3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0g
dGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBvcHRpb25hbE5hdGl2ZVZhbHVlID0gcGFy
c2VFbnVtZXJhdGlvbjxBbHRlcm5hdGVFbnVtTmFtZT4oc3RhdGUsIHZhbHVlKTsKQEAgLTM2NDEs
NiArMzY3MSw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialhNTE9iakF0dHIoRXhlY1MKIAog
c3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialhNTE9iakF0dHJTZXR0ZXIoRXhlY1N0YXRl
JiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKQogeworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsK
ICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExJbnRlcmZhY2U8VGVzdE9iaj4+KHN0
YXRlLCB2YWx1ZSwgW10oSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNj
b3BlKSB7IHRocm93QXR0cmlidXRlVHlwZUVycm9yKHN0YXRlLCBzY29wZSwgIlRlc3RPYmplY3Qi
LCAiWE1MT2JqQXR0ciIsICJUZXN0T2JqIik7IH0pOwpAQCAtMzY3Miw2ICszNzAzLDcgQEAgRW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqQ3JlYXRlKEV4ZWNTdGF0ZQogCiBzdGF0aWMgaW5saW5lIGJv
b2wgc2V0SlNUZXN0T2JqQ3JlYXRlU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYg
dGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKKyAg
ICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAg
ICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1
ZSA9IGNvbnZlcnQ8SURMQm9vbGVhbj4oc3RhdGUsIHZhbHVlKTsKQEAgLTM3MDMsNiArMzczNSw3
IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZFN0cmluZ0EKIAogc3RhdGljIGlu
bGluZSBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZFN0cmluZ0F0dHJTZXR0ZXIoRXhlY1N0YXRl
JiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKQogeworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsK
ICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KHN0YXRlLCB2YWx1
ZSk7CkBAIC0zNzM0LDYgKzM3NjcsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0
ZWRVU1ZTdHJpCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRVU1ZT
dHJpbmdBdHRyU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwg
SlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKKyAgICBVTlVTRURfUEFS
QU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBs
ID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8
SURMVVNWU3RyaW5nPihzdGF0ZSwgdmFsdWUpOwpAQCAtMzc2NSw2ICszNzk5LDcgQEAgRW5jb2Rl
ZEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkSW50ZWdyYQogCiBzdGF0aWMgaW5saW5lIGJvb2wg
c2V0SlNUZXN0T2JqUmVmbGVjdGVkSW50ZWdyYWxBdHRyU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUs
IEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dT
Y29wZSkKIHsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0
byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMTG9uZz4oc3RhdGUsIHZhbHVlKTsKQEAgLTM3OTYs
NiArMzgzMSw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZFVuc2lnbmUKIAog
c3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZFVuc2lnbmVkSW50ZWdyYWxB
dHRyU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1
ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKKyAgICBVTlVTRURfUEFSQU0oc3Rh
dGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gdGhp
c09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMVW5z
aWduZWRMb25nPihzdGF0ZSwgdmFsdWUpOwpAQCAtMzgyNyw2ICszODYzLDcgQEAgRW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqUmVmbGVjdGVkQm9vbGVhbgogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0
SlNUZXN0T2JqUmVmbGVjdGVkQm9vbGVhbkF0dHJTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNU
ZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KQogeworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5h
dGl2ZVZhbHVlID0gY29udmVydDxJRExCb29sZWFuPihzdGF0ZSwgdmFsdWUpOwpAQCAtMzg1OCw2
ICszODk1LDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkVVJMQXR0cgogCiBz
dGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkVVJMQXR0clNldHRlcihFeGVj
U3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93
U2NvcGUmIHRocm93U2NvcGUpCiB7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBl
ZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oc3RhdGUs
IHZhbHVlKTsKQEAgLTM4ODksNiArMzkyNyw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialJl
ZmxlY3RlZFVTVlVSTEEKIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialJlZmxlY3Rl
ZFVTVlVSTEF0dHJTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0
LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogeworICAgIFVOVVNFRF9Q
QVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGlt
cGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVy
dDxJRExVU1ZTdHJpbmc+KHN0YXRlLCB2YWx1ZSk7CkBAIC0zOTIwLDYgKzM5NTksNyBAQCBFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRTdHJpbmdBCiAKIHN0YXRpYyBpbmxpbmUgYm9v
bCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRTdHJpbmdBdHRyU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUs
IEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dT
Y29wZSkKIHsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0
byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPihzdGF0ZSwgdmFsdWUpOwpAQCAt
Mzk1MSw2ICszOTkxLDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9t
SQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tSW50ZWdy
YWxBdHRyU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNW
YWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKKyAgICBVTlVTRURfUEFSQU0o
c3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0g
dGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURM
TG9uZz4oc3RhdGUsIHZhbHVlKTsKQEAgLTM5ODIsNiArNDAyMyw3IEBAIEVuY29kZWRKU1ZhbHVl
IGpzVGVzdE9ialJlZmxlY3RlZEN1c3RvbUIKIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVz
dE9ialJlZmxlY3RlZEN1c3RvbUJvb2xlYW5BdHRyU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpT
VGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29w
ZSkKIHsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBu
YXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMQm9vbGVhbj4oc3RhdGUsIHZhbHVlKTsKQEAgLTQwMTMs
NiArNDA1NSw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZEN1c3RvbVUKIAog
c3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZEN1c3RvbVVSTEF0dHJTZXR0
ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVl
LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogeworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0
LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+
KHN0YXRlLCB2YWx1ZSk7CkBAIC00MDQ4LDYgKzQwOTEsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpFbmFibGVkQXRSdW50aW1lCiAjaWYgRU5BQkxFKFRFU1RfRkVBVFVSRSkKIHN0YXRpYyBp
bmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpFbmFibGVkQXRSdW50aW1lQXR0cmlidXRlU2V0dGVyKEV4
ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhy
b3dTY29wZSYgdGhyb3dTY29wZSkKIHsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFw
cGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPihzdGF0
ZSwgdmFsdWUpOwpAQCAtNDA4NCw2ICs0MTI4LDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2Jq
Q29uc3RydWN0b3JFbmFibAogI2lmIEVOQUJMRShURVNUX0ZFQVRVUkUpCiBzdGF0aWMgaW5saW5l
IGJvb2wgc2V0SlNUZXN0T2JqQ29uc3RydWN0b3JFbmFibGVkQXRSdW50aW1lQXR0cmlidXRlU3Rh
dGljU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRo
cm93U2NvcGUpCiB7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5n
PihzdGF0ZSwgdmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFs
c2UpOwpAQCAtNDExNiw2ICs0MTYxLDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqVHlwZWRB
cnJheUF0dHIoRQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqVHlwZWRBcnJheUF0
dHJTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVl
IHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogeworICAgIFVOVVNFRF9QQVJBTShzdGF0
ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlz
T2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExGbG9h
dDMyQXJyYXk+KHN0YXRlLCB2YWx1ZSwgW10oSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRo
cm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXR0cmlidXRlVHlwZUVycm9yKHN0YXRlLCBzY29wZSwg
IlRlc3RPYmplY3QiLCAidHlwZWRBcnJheUF0dHIiLCAiRmxvYXQzMkFycmF5Iik7IH0pOwpAQCAt
NDE0NSw2ICs0MTkxLDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ3VzdG9tQXR0cihFeGVj
UwogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQ3VzdG9tQXR0clNldHRlcihFeGVj
U3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93
U2NvcGUmIHRocm93U2NvcGUpCiB7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgdGhpc09iamVjdC5zZXRDdXN0b21BdHRyKHN0YXRl
LCB2YWx1ZSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC00MTY5LDYgKzQyMTYsNyBAQCBFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpPbmZvbyhFeGVjU3RhdGUqCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBz
ZXRKU1Rlc3RPYmpPbmZvb1NldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNP
YmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CisgICAgVU5V
U0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgc2V0
RXZlbnRIYW5kbGVyQXR0cmlidXRlKHN0YXRlLCB0aGlzT2JqZWN0LCB0aGlzT2JqZWN0LndyYXBw
ZWQoKSwgZXZlbnROYW1lcygpLmZvb0V2ZW50LCB2YWx1ZSk7CiAgICAgcmV0dXJuIHRydWU7CkBA
IC00MTkzLDYgKzQyNDEsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpPbndlYmtpdGZvbyhF
eGVjCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpPbndlYmtpdGZvb1NldHRlcihF
eGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRo
cm93U2NvcGUmIHRocm93U2NvcGUpCiB7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgc2V0RXZlbnRIYW5kbGVyQXR0cmlidXRlKHN0
YXRlLCB0aGlzT2JqZWN0LCB0aGlzT2JqZWN0LndyYXBwZWQoKSwgZXZlbnROYW1lcygpLmZvb0V2
ZW50LCB2YWx1ZSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC00MjE5LDYgKzQyNjgsNyBAQCBFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoRXhlY1N0YXRlQXR0CiAKIHN0YXRpYyBpbmxpbmUgYm9v
bCBzZXRKU1Rlc3RPYmpXaXRoRXhlY1N0YXRlQXR0cmlidXRlU2V0dGVyKEV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSkKIHsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAg
YXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMTG9uZz4oc3RhdGUsIHZhbHVlKTsKQEAgLTQy
NTAsNiArNDMwMCw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialdpdGhDYWxsV2l0aEFuZFMK
IAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialdpdGhDYWxsV2l0aEFuZFNldHRlckNh
bGxXaXRoQXR0cmlidXRlU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09i
amVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKKyAgICBVTlVT
RURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRv
JiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNv
bnZlcnQ8SURMTG9uZz4oc3RhdGUsIHZhbHVlKTsKQEAgLTQyODQsNiArNDMzNSw3IEBAIEVuY29k
ZWRKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRFeGVjdXQKIAogc3RhdGljIGlubGluZSBib29s
IHNldEpTVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlU2V0dGVyKEV4
ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhy
b3dTY29wZSYgdGhyb3dTY29wZSkKIHsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFw
cGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMSW50ZXJmYWNlPFRlc3RP
Ymo+PihzdGF0ZSwgdmFsdWUsIFtdKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Nj
b3BlJiBzY29wZSkgeyB0aHJvd0F0dHJpYnV0ZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUsICJUZXN0
T2JqZWN0IiwgIndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlIiwgIlRlc3RPYmoi
KTsgfSk7CkBAIC00MzIxLDYgKzQzNzMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpXaXRo
U2NyaXB0RXhlY3V0CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dEFuZEV4ZWNTdGF0ZUF0dHJpYnV0ZVNldHRlcihFeGVjU3RhdGUmIHN0
YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRo
cm93U2NvcGUpCiB7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAg
IGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETEludGVyZmFjZTxUZXN0T2JqPj4oc3RhdGUs
IHZhbHVlLCBbXShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUp
IHsgdGhyb3dBdHRyaWJ1dGVUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlLCAiVGVzdE9iamVjdCIsICJ3
aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZEV4ZWNTdGF0ZUF0dHJpYnV0ZSIsICJUZXN0T2Jq
Iik7IH0pOwpAQCAtNDM1OCw2ICs0NDExLDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqV2l0
aFNjcmlwdEV4ZWN1dAogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqV2l0aFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHRBbmRFeGVjU3RhdGVXaXRoU3BhY2VzQXR0cmlidXRlU2V0dGVyKEV4
ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhy
b3dTY29wZSYgdGhyb3dTY29wZSkKIHsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFw
cGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMSW50ZXJmYWNlPFRlc3RP
Ymo+PihzdGF0ZSwgdmFsdWUsIFtdKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Nj
b3BlJiBzY29wZSkgeyB0aHJvd0F0dHJpYnV0ZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUsICJUZXN0
T2JqZWN0IiwgIndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kRXhlY1N0YXRlV2l0aFNwYWNl
c0F0dHJpYnV0ZSIsICJUZXN0T2JqIik7IH0pOwpAQCAtNDM5Niw2ICs0NDUwLDcgQEAgRW5jb2Rl
ZEpTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMQogI2lmIEVOQUJMRShDb25kaXRpb24x
KQogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0cjFTZXR0ZXIo
RXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogeworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAg
VU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0Lndy
YXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExMb25nPihzdGF0ZSwg
dmFsdWUpOwpAQCAtNDQzMyw2ICs0NDg4LDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29u
ZGl0aW9uYWxBdHRyMgogI2lmIEVOQUJMRShDb25kaXRpb24xKSAmJiBFTkFCTEUoQ29uZGl0aW9u
MikKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHIyU2V0dGVy
KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwg
VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAg
IFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53
cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMTG9uZz4oc3RhdGUs
IHZhbHVlKTsKQEAgLTQ0NzAsNiArNDUyNiw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNv
bmRpdGlvbmFsQXR0cjMKICNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlv
bjIpCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyM1NldHRl
cihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUs
IFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qu
d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETExvbmc+KHN0YXRl
LCB2YWx1ZSk7CkBAIC00NTA1LDkgKzQ1NjIsMTAgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2Jq
Q29uZGl0aW9uYWxBdHRyNAogI2lmIEVOQUJMRShDb25kaXRpb24xKQogc3RhdGljIGlubGluZSBi
b29sIHNldEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0cjRDb25zdHJ1Y3RvclNldHRlcihFeGVjU3Rh
dGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2Nv
cGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIFVO
VVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVk0mIHZtID0gdGhyb3dTY29wZS52bSgpOwogICAgIC8v
IFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgotICAgIHJldHVybiB0aGlzT2JqZWN0
LnB1dERpcmVjdChzdGF0ZS52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZS52bSgp
LCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oImNvbmRpdGlvbmFsQXR0cjQiKSwgc3Ry
bGVuKCJjb25kaXRpb25hbEF0dHI0IikpLCB2YWx1ZSk7CisgICAgcmV0dXJuIHRoaXNPYmplY3Qu
cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0
PGNvbnN0IExDaGFyKj4oImNvbmRpdGlvbmFsQXR0cjQiKSwgc3RybGVuKCJjb25kaXRpb25hbEF0
dHI0IikpLCB2YWx1ZSk7CiB9CiAKIGJvb2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNENv
bnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQpAQCAtNDUzNSw5ICs0NTkzLDEwIEBAIEVuY29kZWRK
U1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjUKICNpZiBFTkFCTEUoQ29uZGl0aW9uMSkg
JiYgRU5BQkxFKENvbmRpdGlvbjIpCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQ29u
ZGl0aW9uYWxBdHRyNUNvbnN0cnVjdG9yU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9i
aiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsK
LSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsK
KyAgICBWTSYgdm0gPSB0aHJvd1Njb3BlLnZtKCk7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQt
aW4gY29uc3RydWN0b3IuCi0gICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHN0YXRlLnZt
KCksIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLnZtKCksIHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgTENoYXIqPigiY29uZGl0aW9uYWxBdHRyNSIpLCBzdHJsZW4oImNvbmRpdGlvbmFsQXR0
cjUiKSksIHZhbHVlKTsKKyAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50
aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiY29u
ZGl0aW9uYWxBdHRyNSIpLCBzdHJsZW4oImNvbmRpdGlvbmFsQXR0cjUiKSksIHZhbHVlKTsKIH0K
IAogYm9vbCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHI1Q29uc3RydWN0b3IoRXhlY1N0YXRl
KiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
VmFsdWUpCkBAIC00NTY1LDkgKzQ2MjQsMTAgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29u
ZGl0aW9uYWxBdHRyNgogI2lmIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9u
MikKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHI2Q29uc3Ry
dWN0b3JTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1Zh
bHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFZNJiB2bSA9IHRocm93
U2NvcGUudm0oKTsKICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KLSAg
ICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qoc3RhdGUudm0oKSwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZygmc3RhdGUudm0oKSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJjb25k
aXRpb25hbEF0dHI2IiksIHN0cmxlbigiY29uZGl0aW9uYWxBdHRyNiIpKSwgdmFsdWUpOworICAg
IHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2
bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJjb25kaXRpb25hbEF0dHI2IiksIHN0
cmxlbigiY29uZGl0aW9uYWxBdHRyNiIpKSwgdmFsdWUpOwogfQogCiBib29sIHNldEpTVGVzdE9i
akNvbmRpdGlvbmFsQXR0cjZDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKQEAgLTQ2NDcsNiAr
NDcwNyw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakFueUF0dHJpYnV0ZShFeGUKIAogc3Rh
dGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakFueUF0dHJpYnV0ZVNldHRlcihFeGVjU3RhdGUm
IHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUm
IHRocm93U2NvcGUpCiB7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwog
ICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETEFueT4oc3RhdGUsIHZhbHVlKTsKQEAg
LTQ2NzgsNiArNDczOSw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iak9iamVjdEF0dHJpYnV0
ZSgKIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iak9iamVjdEF0dHJpYnV0ZVNldHRl
cihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUs
IFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qu
d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETE9iamVjdD4oc3Rh
dGUsIHZhbHVlKTsKQEAgLTQ3MjMsNiArNDc4NSw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9i
ak11dGFibGVQb2ludChFeGUKIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iak11dGFi
bGVQb2ludFNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpT
VmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CisgICAgVU5VU0VEX1BBUkFN
KHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9
IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElE
TEludGVyZmFjZTxTVkdQb2ludD4+KHN0YXRlLCB2YWx1ZSwgW10oSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXR0cmlidXRlVHlwZUVycm9yKHN0
YXRlLCBzY29wZSwgIlRlc3RPYmplY3QiLCAibXV0YWJsZVBvaW50IiwgIlNWR1BvaW50Iik7IH0p
OwpAQCAtNDc1NCw2ICs0ODE3LDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqU3RyYXdiZXJy
eShFeGVjUwogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqU3RyYXdiZXJyeVNldHRl
cihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUs
IFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qu
d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETExvbmc+KHN0YXRl
LCB2YWx1ZSk7CkBAIC00Nzk5LDYgKzQ4NjMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpJ
ZChFeGVjU3RhdGUqIHN0CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpJZFNldHRl
cihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUs
IFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qu
d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETExvbmc+KHN0YXRl
LCB2YWx1ZSk7CkBAIC00ODQ0LDkgKzQ5MDksMTAgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2Jq
UmVwbGFjZWFibGVBdHRyaQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqUmVwbGFj
ZWFibGVBdHRyaWJ1dGVTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2Jq
ZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFZNJiB2
bSA9IHRocm93U2NvcGUudm0oKTsKICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBwcm9wZXJ0
eS4KLSAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qoc3RhdGUudm0oKSwgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZygmc3RhdGUudm0oKSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+
KCJyZXBsYWNlYWJsZUF0dHJpYnV0ZSIpLCBzdHJsZW4oInJlcGxhY2VhYmxlQXR0cmlidXRlIikp
LCB2YWx1ZSk7CisgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oInJlcGxhY2Vh
YmxlQXR0cmlidXRlIiksIHN0cmxlbigicmVwbGFjZWFibGVBdHRyaWJ1dGUiKSksIHZhbHVlKTsK
IH0KIAogYm9vbCBzZXRKU1Rlc3RPYmpSZXBsYWNlYWJsZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0
YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1
ZSkKQEAgLTQ5MjYsNiArNDk5Miw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxl
TG9uZ1NldHQKIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iak51bGxhYmxlTG9uZ1Nl
dHRhYmxlQXR0cmlidXRlU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09i
amVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKKyAgICBVTlVT
RURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRv
JiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNv
bnZlcnQ8SURMTnVsbGFibGU8SURMTG9uZz4+KHN0YXRlLCB2YWx1ZSk7CkBAIC00OTU3LDYgKzUw
MjQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZVN0cmluZ1NlCiAKIHN0YXRp
YyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpOdWxsYWJsZVN0cmluZ1NldHRhYmxlQXR0cmlidXRl
U2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2
YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUp
OwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09i
amVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMTnVsbGFi
bGU8SURMRE9NU3RyaW5nPj4oc3RhdGUsIHZhbHVlKTsKQEAgLTQ5ODgsNiArNTA1Niw3IEBAIEVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlVVNWU3RyaW4KIAogc3RhdGljIGlubGluZSBi
b29sIHNldEpTVGVzdE9iak51bGxhYmxlVVNWU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGVTZXR0ZXIo
RXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogeworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAg
VU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0Lndy
YXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExOdWxsYWJsZTxJRExV
U1ZTdHJpbmc+PihzdGF0ZSwgdmFsdWUpOwpAQCAtNTAxOSw2ICs1MDg4LDcgQEAgRW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqTnVsbGFibGVCeXRlU3RyaQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0
SlNUZXN0T2JqTnVsbGFibGVCeXRlU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGVTZXR0ZXIoRXhlY1N0
YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKQogeworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQo
KTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExOdWxsYWJsZTxJRExCeXRlU3Ry
aW5nPj4oc3RhdGUsIHZhbHVlKTsKQEAgLTUwNjQsNiArNTEzNCw3IEBAIEVuY29kZWRKU1ZhbHVl
IGpzVGVzdE9iakF0dHJpYnV0ZVdpdGhSZXMKIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVz
dE9iakF0dHJpYnV0ZVdpdGhSZXNlcnZlZEVudW1UeXBlU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUs
IEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dT
Y29wZSkKIHsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0
byBvcHRpb25hbE5hdGl2ZVZhbHVlID0gcGFyc2VFbnVtZXJhdGlvbjxUZXN0T2JqOjpPcHRpb25h
bD4oc3RhdGUsIHZhbHVlKTsKQEAgLTUxMjYsMTcgKzUxOTcsMTggQEAgRW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqUHV0Rm9yd2FyZHNBdHRyaQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0
T2JqUHV0Rm9yd2FyZHNBdHRyaWJ1dGVTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2Jq
JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewot
ICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBhdXRvIGlkID0gSWRlbnRpZmllcjo6
ZnJvbVN0cmluZygmc3RhdGUudm0oKSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJw
dXRGb3J3YXJkc0F0dHJpYnV0ZSIpLCBzdHJsZW4oInB1dEZvcndhcmRzQXR0cmlidXRlIikpOwor
ICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVk0mIHZtID0gdGhyb3dTY29wZS52bSgpOwor
ICAgIGF1dG8gaWQgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0
PGNvbnN0IExDaGFyKj4oInB1dEZvcndhcmRzQXR0cmlidXRlIiksIHN0cmxlbigicHV0Rm9yd2Fy
ZHNBdHRyaWJ1dGUiKSk7CiAgICAgYXV0byB2YWx1ZVRvRm9yd2FyZFRvID0gdGhpc09iamVjdC5n
ZXQoJnN0YXRlLCBpZCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxz
ZSk7CiAgICAgaWYgKFVOTElLRUxZKCF2YWx1ZVRvRm9yd2FyZFRvLmlzT2JqZWN0KCkpKSB7CiAg
ICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgdGhyb3dTY29wZSk7CiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICB9Ci0gICAgYXV0byBmb3J3YXJkSWQgPSBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKCZzdGF0ZS52bSgpLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIm5hbWUiKSwg
c3RybGVuKCJuYW1lIikpOworICAgIGF1dG8gZm9yd2FyZElkID0gSWRlbnRpZmllcjo6ZnJvbVN0
cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJuYW1lIiksIHN0cmxlbigi
bmFtZSIpKTsKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdCh2YWx1ZVRvRm9yd2FyZFRvLCBmYWxz
ZSk7Ci0gICAgYXNPYmplY3QodmFsdWVUb0ZvcndhcmRUbyktPm1ldGhvZFRhYmxlKHN0YXRlLnZt
KCkpLT5wdXQoYXNPYmplY3QodmFsdWVUb0ZvcndhcmRUbyksICZzdGF0ZSwgZm9yd2FyZElkLCB2
YWx1ZSwgc2xvdCk7CisgICAgYXNPYmplY3QodmFsdWVUb0ZvcndhcmRUbyktPm1ldGhvZFRhYmxl
KHZtKS0+cHV0KGFzT2JqZWN0KHZhbHVlVG9Gb3J3YXJkVG8pLCAmc3RhdGUsIGZvcndhcmRJZCwg
dmFsdWUsIHNsb3QpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2Up
OwogICAgIHJldHVybiB0cnVlOwogfQpAQCAtNTE2MiwxNyArNTIzNCwxOCBAQCBFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RPYmpQdXRGb3J3YXJkc051bGxhCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRK
U1Rlc3RPYmpQdXRGb3J3YXJkc051bGxhYmxlQXR0cmlidXRlU2V0dGVyKEV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgYXV0byBpZCA9
IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLnZtKCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgTENoYXIqPigicHV0Rm9yd2FyZHNOdWxsYWJsZUF0dHJpYnV0ZSIpLCBzdHJsZW4oInB1dEZv
cndhcmRzTnVsbGFibGVBdHRyaWJ1dGUiKSk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAg
ICBWTSYgdm0gPSB0aHJvd1Njb3BlLnZtKCk7CisgICAgYXV0byBpZCA9IElkZW50aWZpZXI6OmZy
b21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigicHV0Rm9yd2FyZHNO
dWxsYWJsZUF0dHJpYnV0ZSIpLCBzdHJsZW4oInB1dEZvcndhcmRzTnVsbGFibGVBdHRyaWJ1dGUi
KSk7CiAgICAgYXV0byB2YWx1ZVRvRm9yd2FyZFRvID0gdGhpc09iamVjdC5nZXQoJnN0YXRlLCBp
ZCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CiAgICAgaWYg
KFVOTElLRUxZKCF2YWx1ZVRvRm9yd2FyZFRvLmlzT2JqZWN0KCkpKSB7CiAgICAgICAgIHRocm93
VHlwZUVycm9yKCZzdGF0ZSwgdGhyb3dTY29wZSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICB9Ci0gICAgYXV0byBmb3J3YXJkSWQgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZS52
bSgpLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIm5hbWUiKSwgc3RybGVuKCJuYW1l
IikpOworICAgIGF1dG8gZm9yd2FyZElkID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVp
bnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJuYW1lIiksIHN0cmxlbigibmFtZSIpKTsKICAg
ICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdCh2YWx1ZVRvRm9yd2FyZFRvLCBmYWxzZSk7Ci0gICAgYXNP
YmplY3QodmFsdWVUb0ZvcndhcmRUbyktPm1ldGhvZFRhYmxlKHN0YXRlLnZtKCkpLT5wdXQoYXNP
YmplY3QodmFsdWVUb0ZvcndhcmRUbyksICZzdGF0ZSwgZm9yd2FyZElkLCB2YWx1ZSwgc2xvdCk7
CisgICAgYXNPYmplY3QodmFsdWVUb0ZvcndhcmRUbyktPm1ldGhvZFRhYmxlKHZtKS0+cHV0KGFz
T2JqZWN0KHZhbHVlVG9Gb3J3YXJkVG8pLCAmc3RhdGUsIGZvcndhcmRJZCwgdmFsdWUsIHNsb3Qp
OwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwogICAgIHJldHVy
biB0cnVlOwogfQpAQCAtNTE5OCw2ICs1MjcxLDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2Jq
U3RyaW5naWZpZXJBdHRyaQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqU3RyaW5n
aWZpZXJBdHRyaWJ1dGVTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2Jq
ZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogeworICAgIFVOVVNF
RF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8m
IGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29u
dmVydDxJRExVU1ZTdHJpbmc+KHN0YXRlLCB2YWx1ZSk7CkBAIC01MjMwLDYgKzUzMDQsNyBAQCBF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbGx5UmVhCiAjaWYgRU5BQkxFKENPTkRJ
VElPTikKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbGx5UmVhZFdy
aXRlQXR0cmlidXRlU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVj
dCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKKyAgICBVTlVTRURf
UEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBp
bXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZl
cnQ8SURMSW50ZXJmYWNlPE5vZGU+PihzdGF0ZSwgdmFsdWUsIFtdKEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0F0dHJpYnV0ZVR5cGVFcnJvcihz
dGF0ZSwgc2NvcGUsICJUZXN0T2JqZWN0IiwgImNvbmRpdGlvbmFsbHlSZWFkV3JpdGVBdHRyaWJ1
dGUiLCAiTm9kZSIpOyB9KTsKQEAgLTUyNjgsNiArNTM0Myw3IEBAIEVuY29kZWRKU1ZhbHVlIGpz
VGVzdE9iakNvbmRpdGlvbmFsQW5kQ28KICNpZiBFTkFCTEUoQ09ORElUSU9OKQogc3RhdGljIGlu
bGluZSBib29sIHNldEpTVGVzdE9iakNvbmRpdGlvbmFsQW5kQ29uZGl0aW9uYWxseVJlYWRXcml0
ZUF0dHJpYnV0ZVNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3Qs
IEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CisgICAgVU5VU0VEX1BB
UkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1w
bCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0
PElETEludGVyZmFjZTxOb2RlPj4oc3RhdGUsIHZhbHVlLCBbXShKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBdHRyaWJ1dGVUeXBlRXJyb3Ioc3Rh
dGUsIHNjb3BlLCAiVGVzdE9iamVjdCIsICJjb25kaXRpb25hbEFuZENvbmRpdGlvbmFsbHlSZWFk
V3JpdGVBdHRyaWJ1dGUiLCAiTm9kZSIpOyB9KTsKQEAgLTUzMDMsNiArNTM3OSw3IEBAIEVuY29k
ZWRKU1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbmFsbHlFeHAKIAogc3RhdGljIGlubGluZSBib29s
IHNldEpTVGVzdE9iakNvbmRpdGlvbmFsbHlFeHBvc2VkVG9XaW5kb3dBdHRyaWJ1dGVTZXR0ZXIo
RXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogeworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAg
VU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0Lndy
YXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExMb25nPihzdGF0ZSwg
dmFsdWUpOwpAQCAtNTMzNCw2ICs1NDExLDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29u
ZGl0aW9uYWxseUV4cAogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9u
YWxseUV4cG9zZWRUb1dvcmtlckF0dHJpYnV0ZVNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rl
c3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUp
CiB7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0
aXZlVmFsdWUgPSBjb252ZXJ0PElETExvbmc+KHN0YXRlLCB2YWx1ZSk7CkBAIC01MzY1LDYgKzU0
NDMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbGx5RXhwCiAKIHN0YXRp
YyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbGx5RXhwb3NlZFRvV2luZG93QW5k
V29ya2VyQXR0cmlidXRlU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09i
amVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKKyAgICBVTlVT
RURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRv
JiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNv
bnZlcnQ8SURMTG9uZz4oc3RhdGUsIHZhbHVlKTsKQEAgLTg1NDgsMTkgKzg2MjcsMTkgQEAgSlND
OjpKU09iamVjdCogSlNUZXN0T2JqOjpzZXJpYWxpemUoRXhlYwogCiAgICAgYXV0byBjcmVhdGVW
YWx1ZSA9IGpzVGVzdE9iakNyZWF0ZUdldHRlcihzdGF0ZSwgdGhpc09iamVjdCwgdGhyb3dTY29w
ZSk7CiAgICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwotICAgIHJlc3VsdC0+cHV0
RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImNyZWF0ZSIpLCBjcmVhdGVW
YWx1ZSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmco
dm0sICJjcmVhdGUiKSwgY3JlYXRlVmFsdWUpOwogCiAgICAgYXV0byByZWFkT25seVN0cmluZ0F0
dHJWYWx1ZSA9IGpzVGVzdE9ialJlYWRPbmx5U3RyaW5nQXR0ckdldHRlcihzdGF0ZSwgdGhpc09i
amVjdCwgdGhyb3dTY29wZSk7CiAgICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwot
ICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgInJl
YWRPbmx5U3RyaW5nQXR0ciIpLCByZWFkT25seVN0cmluZ0F0dHJWYWx1ZSk7CisgICAgcmVzdWx0
LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJyZWFkT25seVN0cmlu
Z0F0dHIiKSwgcmVhZE9ubHlTdHJpbmdBdHRyVmFsdWUpOwogCiAgICAgYXV0byBlbnVtQXR0clZh
bHVlID0ganNUZXN0T2JqRW51bUF0dHJHZXR0ZXIoc3RhdGUsIHRoaXNPYmplY3QsIHRocm93U2Nv
cGUpOwogICAgIHRocm93U2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKLSAgICByZXN1bHQtPnB1
dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJlbnVtQXR0ciIpLCBlbnVt
QXR0clZhbHVlKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZyh2bSwgImVudW1BdHRyIiksIGVudW1BdHRyVmFsdWUpOwogCiAgICAgYXV0byBsb25nQXR0
clZhbHVlID0ganNUZXN0T2JqTG9uZ0F0dHJHZXR0ZXIoc3RhdGUsIHRoaXNPYmplY3QsIHRocm93
U2NvcGUpOwogICAgIHRocm93U2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKLSAgICByZXN1bHQt
PnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJsb25nQXR0ciIpLCBs
b25nQXR0clZhbHVlKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyh2bSwgImxvbmdBdHRyIiksIGxvbmdBdHRyVmFsdWUpOwogCiAgICAgcmV0dXJuIHJl
c3VsdDsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9y
cy5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTczLDcgKzE3Myw3IEBAIHRlbXBsYXRlPD4gSlNWYWx1ZSBKU1Rlc3RPdmVybG9hZGVk
Q29uc3QKIHRlbXBsYXRlPD4gdm9pZCBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3Ry
dWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGds
b2JhbE9iamVjdCkKIHsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3Rv
dHlwZSwgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yczo6cHJvdG90eXBlKHZtLCBnbG9iYWxP
YmplY3QpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgSlNDOjpQcm9wZXJ0
eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7
Ci0gICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxT
dHJpbmcoJnZtLCBTdHJpbmcoIlRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzIl9zKSksIEpTQzo6
UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9u
dEVudW0pOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250
cml2aWFsU3RyaW5nKHZtLCBTdHJpbmcoIlRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzIl9zKSks
IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0
ZTo6RG9udEVudW0pOwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3Ro
LCBqc051bWJlcigwKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlBy
b3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNl
cXVlbmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZS5jcHAJKHJl
dmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTI5LDcgKzEyOSw3IEBAIHRlbXBsYXRlPD4gSlNWYWx1ZSBKU1Rlc3RPdmVybG9h
ZGVkQ29uc3QKIHRlbXBsYXRlPD4gdm9pZCBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0
aFNlcXVlbmNlQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKFZNJiB2bSwgSlNET01H
bG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKIHsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3Bl
cnR5TmFtZXMtPnByb3RvdHlwZSwgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1
ZW5jZTo6cHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRl
OjpEb250RGVsZXRlIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlBy
b3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7Ci0gICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0
eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcoJnZtLCBTdHJpbmcoIlRlc3RPdmVybG9h
ZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlIl9zKSksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6
OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOworICAgIHB1dERp
cmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKHZtLCBT
dHJpbmcoIlRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlIl9zKSksIEpTQzo6
UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9u
dEVudW0pOwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051
bWJlcigwKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5
QXR0cmlidXRlOjpEb250RW51bSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVycmlkZUJ1aWx0aW5zLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcnJpZGVC
dWlsdGlucy5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVycmlkZUJ1aWx0aW5zLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtODgsNyArODgsNyBAQCB0ZW1wbGF0ZTw+IEpTVmFsdWUgSlNUZXN0T3ZlcnJpZGVCdWls
dGluCiB0ZW1wbGF0ZTw+IHZvaWQgSlNUZXN0T3ZlcnJpZGVCdWlsdGluc0NvbnN0cnVjdG9yOjpp
bml0aWFsaXplUHJvcGVydGllcyhWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmpl
Y3QpCiB7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpT
VGVzdE92ZXJyaWRlQnVpbHRpbnM6OnByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KSwgSlNDOjpQ
cm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJl
YWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwotICAgIHB1dERpcmVj
dCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKCZ2bSwgU3Ry
aW5nKCJUZXN0T3ZlcnJpZGVCdWlsdGlucyJfcykpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpS
ZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKKyAgICBwdXREaXJl
Y3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZyh2bSwgU3Ry
aW5nKCJUZXN0T3ZlcnJpZGVCdWlsdGlucyJfcykpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpS
ZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKICAgICBwdXREaXJl
Y3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMCksIEpTQzo6UHJvcGVy
dHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0p
OwogfQogCkBAIC0xNjYsOSArMTY2LDEwIEBAIGJvb2wgSlNUZXN0T3ZlcnJpZGVCdWlsdGluczo6
Z2V0T3duUHJvcGUKIAogYm9vbCBKU1Rlc3RPdmVycmlkZUJ1aWx0aW5zOjpnZXRPd25Qcm9wZXJ0
eVNsb3RCeUluZGV4KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogc3RhdGUsIHVuc2lnbmVk
IGluZGV4LCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CisgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7
CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3RPdmVycmlkZUJ1aWx0aW5zKj4o
b2JqZWN0KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8o
KSk7Ci0gICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tKHN0YXRlLCBpbmRl
eCk7CisgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tKHZtLCBpbmRleCk7
CiAgICAgdXNpbmcgR2V0dGVySURMVHlwZSA9IElETEludGVyZmFjZTxOb2RlPjsKICAgICBhdXRv
IGdldHRlckZ1bmN0b3IgPSBbXSAoYXV0byYgdGhpc09iamVjdCwgYXV0byBwcm9wZXJ0eU5hbWUp
IC0+IE9wdGlvbmFsPHR5cGVuYW1lIEdldHRlcklETFR5cGU6OkltcGxlbWVudGF0aW9uVHlwZT4g
ewogICAgICAgICBhdXRvIHJlc3VsdCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpLm5hbWVkSXRlbShw
cm9wZXJ0eU5hbWVUb0F0b21TdHJpbmcocHJvcGVydHlOYW1lKSk7CkBAIC0xODYsMTAgKzE4Nywx
MSBAQCBib29sIEpTVGVzdE92ZXJyaWRlQnVpbHRpbnM6OmdldE93blByb3BlCiAKIHZvaWQgSlNU
ZXN0T3ZlcnJpZGVCdWlsdGluczo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0
LCBFeGVjU3RhdGUqIHN0YXRlLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51
bWVyYXRpb25Nb2RlIG1vZGUpCiB7CisgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0
byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3RPdmVycmlkZUJ1aWx0aW5zKj4ob2JqZWN0KTsK
ICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKG9iamVjdCwgaW5mbygpKTsKICAgICBmb3Ig
KGF1dG8mIHByb3BlcnR5TmFtZSA6IHRoaXNPYmplY3QtPndyYXBwZWQoKS5zdXBwb3J0ZWRQcm9w
ZXJ0eU5hbWVzKCkpCi0gICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb21T
dHJpbmcoc3RhdGUsIHByb3BlcnR5TmFtZSkpOworICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBwcm9wZXJ0eU5hbWUpKTsKICAgICBKU09iamVjdDo6
Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIHN0YXRlLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsK
IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dFBsdWdpbkludGVyZmFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFBsdWdpbkludGVyZmFjZS5jcHAJKHJldmlzaW9uIDI0
OTEyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RQ
bHVnaW5JbnRlcmZhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OSw3ICs3OSw3IEBAIHRlbXBs
YXRlPD4gSlNWYWx1ZSBKU1Rlc3RQbHVnaW5JbnRlcmZhY2UKIHRlbXBsYXRlPD4gdm9pZCBKU1Rl
c3RQbHVnaW5JbnRlcmZhY2VDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMoVk0mIHZt
LCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQogewogICAgIHB1dERpcmVjdCh2bSwg
dm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3RQbHVnaW5JbnRlcmZhY2U6OnByb3Rv
dHlwZSh2bSwgZ2xvYmFsT2JqZWN0KSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0
ZSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJp
YnV0ZTo6RG9udEVudW0pOwotICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFt
ZSwganNOb250cml2aWFsU3RyaW5nKCZ2bSwgU3RyaW5nKCJUZXN0UGx1Z2luSW50ZXJmYWNlIl9z
KSksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJp
YnV0ZTo6RG9udEVudW0pOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFt
ZSwganNOb250cml2aWFsU3RyaW5nKHZtLCBTdHJpbmcoIlRlc3RQbHVnaW5JbnRlcmZhY2UiX3Mp
KSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmli
dXRlOjpEb250RW51bSk7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5n
dGgsIGpzTnVtYmVyKDApLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6
UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKIH0KIApAQCAtMTQ2LDkgKzE0NiwxMCBAQCBi
b29sIEpTVGVzdFBsdWdpbkludGVyZmFjZTo6Z2V0T3duUHJvcGVyCiAKIGJvb2wgSlNUZXN0UGx1
Z2luSW50ZXJmYWNlOjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTT2JqZWN0KiBvYmplY3Qs
IEV4ZWNTdGF0ZSogc3RhdGUsIHVuc2lnbmVkIGluZGV4LCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7
CisgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2Fz
dDxKU1Rlc3RQbHVnaW5JbnRlcmZhY2UqPihvYmplY3QpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1Rf
SU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKLSAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElk
ZW50aWZpZXI6OmZyb20oc3RhdGUsIGluZGV4KTsKKyAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElk
ZW50aWZpZXI6OmZyb20odm0sIGluZGV4KTsKICAgICBpZiAocGx1Z2luRWxlbWVudEN1c3RvbUdl
dE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBzdGF0ZSwgcHJvcGVydHlOYW1lLCBzbG90KSkK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgcmV0dXJuIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0
eVNsb3RCeUluZGV4KG9iamVjdCwgc3RhdGUsIGluZGV4LCBzbG90KTsKQEAgLTE2OCwxMCArMTY5
LDExIEBAIGJvb2wgSlNUZXN0UGx1Z2luSW50ZXJmYWNlOjpwdXQoSlNDZWxsKiAKIAogYm9vbCBK
U1Rlc3RQbHVnaW5JbnRlcmZhY2U6OnB1dEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUq
IHN0YXRlLCB1bnNpZ25lZCBpbmRleCwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykK
IHsKKyAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganND
YXN0PEpTVGVzdFBsdWdpbkludGVyZmFjZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1Rf
SU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKIAotICAgIGF1dG8gcHJvcGVydHlOYW1lID0g
SWRlbnRpZmllcjo6ZnJvbShzdGF0ZSwgaW5kZXgpOworICAgIGF1dG8gcHJvcGVydHlOYW1lID0g
SWRlbnRpZmllcjo6ZnJvbSh2bSwgaW5kZXgpOwogICAgIFB1dFByb3BlcnR5U2xvdCBwdXRQcm9w
ZXJ0eVNsb3QodGhpc09iamVjdCwgc2hvdWxkVGhyb3cpOwogICAgIGJvb2wgcHV0UmVzdWx0ID0g
ZmFsc2U7CiAgICAgaWYgKHBsdWdpbkVsZW1lbnRDdXN0b21QdXQodGhpc09iamVjdCwgc3RhdGUs
IHByb3BlcnR5TmFtZSwgdmFsdWUsIHB1dFByb3BlcnR5U2xvdCwgcHV0UmVzdWx0KSkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RQcm9taXNlUmVq
ZWN0aW9uRXZlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnQuY3BwCShyZXZpc2lvbiAy
NDkxMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
UHJvbWlzZVJlamVjdGlvbkV2ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTksNyArNTksNyBA
QCB0ZW1wbGF0ZTw+IFRlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnQ6OkluCiAgICAgaWYgKGlzTnVs
bE9yVW5kZWZpbmVkKQogICAgICAgICBidWJibGVzVmFsdWUgPSBqc1VuZGVmaW5lZCgpOwogICAg
IGVsc2UgewotICAgICAgICBidWJibGVzVmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50
aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAiYnViYmxlcyIpKTsKKyAgICAgICAgYnViYmxlc1Zh
bHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiYnVi
YmxlcyIpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwog
ICAgIH0KICAgICBpZiAoIWJ1YmJsZXNWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7CkBAIC03MSw3ICs3
MSw3IEBAIHRlbXBsYXRlPD4gVGVzdFByb21pc2VSZWplY3Rpb25FdmVudDo6SW4KICAgICBpZiAo
aXNOdWxsT3JVbmRlZmluZWQpCiAgICAgICAgIGNhbmNlbGFibGVWYWx1ZSA9IGpzVW5kZWZpbmVk
KCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIGNhbmNlbGFibGVWYWx1ZSA9IG9iamVjdC0+Z2V0KCZz
dGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJjYW5jZWxhYmxlIikpOworICAg
ICAgICBjYW5jZWxhYmxlVmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZy
b21TdHJpbmcodm0sICJjYW5jZWxhYmxlIikpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHRocm93U2NvcGUsIHsgfSk7CiAgICAgfQogICAgIGlmICghY2FuY2VsYWJsZVZhbHVlLmlzVW5k
ZWZpbmVkKCkpIHsKQEAgLTgzLDcgKzgzLDcgQEAgdGVtcGxhdGU8PiBUZXN0UHJvbWlzZVJlamVj
dGlvbkV2ZW50OjpJbgogICAgIGlmIChpc051bGxPclVuZGVmaW5lZCkKICAgICAgICAgY29tcG9z
ZWRWYWx1ZSA9IGpzVW5kZWZpbmVkKCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIGNvbXBvc2VkVmFs
dWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAi
Y29tcG9zZWQiKSk7CisgICAgICAgIGNvbXBvc2VkVmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUs
IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJjb21wb3NlZCIpKTsKICAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0KICAgICBpZiAoIWNvbXBvc2Vk
VmFsdWUuaXNVbmRlZmluZWQoKSkgewpAQCAtOTUsNyArOTUsNyBAQCB0ZW1wbGF0ZTw+IFRlc3RQ
cm9taXNlUmVqZWN0aW9uRXZlbnQ6OkluCiAgICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKQogICAg
ICAgICBwcm9taXNlVmFsdWUgPSBqc1VuZGVmaW5lZCgpOwogICAgIGVsc2UgewotICAgICAgICBw
cm9taXNlVmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmco
JnN0YXRlLCAicHJvbWlzZSIpKTsKKyAgICAgICAgcHJvbWlzZVZhbHVlID0gb2JqZWN0LT5nZXQo
JnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAicHJvbWlzZSIpKTsKICAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0KICAgICBpZiAoIXBy
b21pc2VWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7CkBAIC0xMDksNyArMTA5LDcgQEAgdGVtcGxhdGU8
PiBUZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50OjpJbgogICAgIGlmIChpc051bGxPclVuZGVmaW5l
ZCkKICAgICAgICAgcmVhc29uVmFsdWUgPSBqc1VuZGVmaW5lZCgpOwogICAgIGVsc2UgewotICAg
ICAgICByZWFzb25WYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZygmc3RhdGUsICJyZWFzb24iKSk7CisgICAgICAgIHJlYXNvblZhbHVlID0gb2JqZWN0LT5n
ZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAicmVhc29uIikpOwogICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgfQogICAgIGlmICgh
cmVhc29uVmFsdWUuaXNVbmRlZmluZWQoKSkgewpAQCAtMTgwLDcgKzE4MCw3IEBAIHRlbXBsYXRl
PD4gSlNWYWx1ZSBKU1Rlc3RQcm9taXNlUmVqZWN0aW8KIHRlbXBsYXRlPD4gdm9pZCBKU1Rlc3RQ
cm9taXNlUmVqZWN0aW9uRXZlbnRDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMoVk0m
IHZtLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQogewogICAgIHB1dERpcmVjdCh2
bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3RQcm9taXNlUmVqZWN0aW9uRXZl
bnQ6OnByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6
RG9udERlbGV0ZSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9w
ZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwotICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlO
YW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKCZ2bSwgU3RyaW5nKCJUZXN0UHJvbWlzZVJl
amVjdGlvbkV2ZW50Il9zKSksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlND
OjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJv
cGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKHZtLCBTdHJpbmcoIlRlc3RQcm9t
aXNlUmVqZWN0aW9uRXZlbnQiX3MpKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkg
fCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CiAgICAgcHV0RGlyZWN0KHZtLCB2
bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDIpLCBKU0M6OlByb3BlcnR5QXR0cmli
dXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKIH0KIApJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlh
bGl6YXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRp
b24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjAsNyArMTIwLDcgQEAgdGVtcGxhdGU8PiBKU1Zh
bHVlIEpTVGVzdFNlcmlhbGl6YXRpb25DbwogdGVtcGxhdGU8PiB2b2lkIEpTVGVzdFNlcmlhbGl6
YXRpb25Db25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMoVk0mIHZtLCBKU0RPTUdsb2Jh
bE9iamVjdCYgZ2xvYmFsT2JqZWN0KQogewogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlO
YW1lcy0+cHJvdG90eXBlLCBKU1Rlc3RTZXJpYWxpemF0aW9uOjpwcm90b3R5cGUodm0sIGdsb2Jh
bE9iamVjdCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUgfCBKU0M6OlByb3Bl
cnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVt
KTsKLSAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlh
bFN0cmluZygmdm0sIFN0cmluZygiVGVzdFNlcmlhbGl6YXRpb24iX3MpKSwgSlNDOjpQcm9wZXJ0
eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7
CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxT
dHJpbmcodm0sIFN0cmluZygiVGVzdFNlcmlhbGl6YXRpb24iX3MpKSwgSlNDOjpQcm9wZXJ0eUF0
dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CiAg
ICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDApLCBK
U0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6
OkRvbnRFbnVtKTsKIH0KIApAQCAtMjM4LDYgKzIzOCw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVz
dFNlcmlhbGl6YXRpb25GaXJzdFMKIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFNlcmlh
bGl6YXRpb25GaXJzdFN0cmluZ0F0dHJpYnV0ZVNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rl
c3RTZXJpYWxpemF0aW9uJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKQogeworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAg
ICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KHN0YXRlLCB2YWx1ZSk7
CkBAIC0yNjksNiArMjcwLDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvblNl
Y29uZAogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvblNlY29uZExv
bmdBdHRyaWJ1dGVTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0U2VyaWFsaXphdGlvbiYg
dGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKKyAg
ICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAg
ICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1
ZSA9IGNvbnZlcnQ8SURMTG9uZz4oc3RhdGUsIHZhbHVlKTsKQEAgLTMwMCw2ICszMDIsNyBAQCBF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uVGhpcmRVCiAKIHN0YXRpYyBpbmxpbmUg
Ym9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uVGhpcmRVbnNlcmlhbGl6YWJsZUF0dHJpYnV0ZVNl
dHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RTZXJpYWxpemF0aW9uJiB0aGlzT2JqZWN0LCBK
U1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogeworICAgIFVOVVNFRF9QQVJB
TShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwg
PSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJ
RExJbnRlcmZhY2U8VGVzdEV4Y2VwdGlvbj4+KHN0YXRlLCB2YWx1ZSwgW10oSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXR0cmlidXRlVHlwZUVy
cm9yKHN0YXRlLCBzY29wZSwgIlRlc3RTZXJpYWxpemF0aW9uIiwgInRoaXJkVW5zZXJpYWxpemFi
bGVBdHRyaWJ1dGUiLCAiVGVzdEV4Y2VwdGlvbiIpOyB9KTsKQEAgLTMzMSw2ICszMzQsNyBAQCBF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uRm91cnRoCiAKIHN0YXRpYyBpbmxpbmUg
Ym9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uRm91cnRoVW5yZXN0cmljdGVkRG91YmxlQXR0cmli
dXRlU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdFNlcmlhbGl6YXRpb24mIHRoaXNPYmpl
Y3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CisgICAgVU5VU0VE
X1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYg
aW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252
ZXJ0PElETFVucmVzdHJpY3RlZERvdWJsZT4oc3RhdGUsIHZhbHVlKTsKQEAgLTM2Miw2ICszNjYs
NyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uRmlmdGhMCiAKIHN0YXRpYyBp
bmxpbmUgYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uRmlmdGhMb25nQXR0cmlidXRlU2V0dGVy
KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdFNlcmlhbGl6YXRpb24mIHRoaXNPYmplY3QsIEpTVmFs
dWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CisgICAgVU5VU0VEX1BBUkFNKHN0
YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRo
aXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETExv
bmc+KHN0YXRlLCB2YWx1ZSk7CkBAIC0zOTMsNiArMzk4LDcgQEAgRW5jb2RlZEpTVmFsdWUganNU
ZXN0U2VyaWFsaXphdGlvblNpeHRoVAogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0U2Vy
aWFsaXphdGlvblNpeHRoVHlwZWRlZkF0dHJpYnV0ZVNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBK
U1Rlc3RTZXJpYWxpemF0aW9uJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKQogeworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsK
ICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExEb3VibGU+KHN0YXRlLCB2YWx1ZSk7
CkBAIC00MjQsNiArNDMwLDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvblNl
dmVudAogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvblNldmVudGhE
aXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZVNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rl
c3RTZXJpYWxpemF0aW9uJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKQogeworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAg
ICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExJbnRlcmZhY2U8VGVzdFNlcmlhbGl6YXRp
b25Jbmhlcml0RmluYWw+PihzdGF0ZSwgdmFsdWUsIFtdKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0F0dHJpYnV0ZVR5cGVFcnJvcihzdGF0ZSwg
c2NvcGUsICJUZXN0U2VyaWFsaXphdGlvbiIsICJzZXZlbnRoRGlyZWN0bHlTZXJpYWxpemFibGVB
dHRyaWJ1dGUiLCAiVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwiKTsgfSk7CkBAIC00NTUs
NiArNDYyLDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvbkVpZ2h0aAogCiBz
dGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvbkVpZ2h0aEluZGlyZWN0bHlB
dHRyaWJ1dGVTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0U2VyaWFsaXphdGlvbiYgdGhp
c09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKKyAgICBV
TlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBh
dXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9
IGNvbnZlcnQ8SURMSW50ZXJmYWNlPFRlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5j
ZT4+KHN0YXRlLCB2YWx1ZSwgW10oSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2Nv
cGUmIHNjb3BlKSB7IHRocm93QXR0cmlidXRlVHlwZUVycm9yKHN0YXRlLCBzY29wZSwgIlRlc3RT
ZXJpYWxpemF0aW9uIiwgImVpZ2h0aEluZGlyZWN0bHlBdHRyaWJ1dGUiLCAiVGVzdFNlcmlhbGl6
YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlIik7IH0pOwpAQCAtNDg2LDYgKzQ5NCw3IEBAIEVuY29k
ZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25OaW50aE8KIAogc3RhdGljIGlubGluZSBib29s
IHNldEpTVGVzdFNlcmlhbGl6YXRpb25OaW50aE9wdGlvbmFsRGlyZWN0bHlTZXJpYWxpemFibGVB
dHRyaWJ1dGVTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0U2VyaWFsaXphdGlvbiYgdGhp
c09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKKyAgICBV
TlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBh
dXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9
IGNvbnZlcnQ8SURMTnVsbGFibGU8SURMSW50ZXJmYWNlPFRlc3RTZXJpYWxpemF0aW9uSW5oZXJp
dEZpbmFsPj4+KHN0YXRlLCB2YWx1ZSwgW10oSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRo
cm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXR0cmlidXRlVHlwZUVycm9yKHN0YXRlLCBzY29wZSwg
IlRlc3RTZXJpYWxpemF0aW9uIiwgIm5pbnRoT3B0aW9uYWxEaXJlY3RseVNlcmlhbGl6YWJsZUF0
dHJpYnV0ZSIsICJUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbCIpOyB9KTsKQEAgLTUxNyw2
ICs1MjYsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uVGVudGhGCiAKIHN0
YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uVGVudGhGcm96ZW5BcnJheUF0
dHJpYnV0ZVNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RTZXJpYWxpemF0aW9uJiB0aGlz
T2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogeworICAgIFVO
VVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1
dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0g
Y29udmVydDxJRExGcm96ZW5BcnJheTxJRExCb29sZWFuPj4oc3RhdGUsIHZhbHVlKTsKQEAgLTU0
OCw2ICs1NTgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uRWxldmVuCiAK
IHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uRWxldmVudGhTZXF1ZW5j
ZUF0dHJpYnV0ZVNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RTZXJpYWxpemF0aW9uJiB0
aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogeworICAg
IFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAg
IGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVl
ID0gY29udmVydDxJRExTZXF1ZW5jZTxJRExET01TdHJpbmc+PihzdGF0ZSwgdmFsdWUpOwpAQCAt
NTc5LDYgKzU5MCw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25Ud2VsZnQK
IAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25Ud2VsZnRoSW50ZXJm
YWNlU2VxdWVuY2VBdHRyaWJ1dGVTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0U2VyaWFs
aXphdGlvbiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29w
ZSkKIHsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBu
YXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMU2VxdWVuY2U8SURMSW50ZXJmYWNlPFRlc3RTZXJpYWxp
emF0aW9uSW5oZXJpdEZpbmFsPj4+KHN0YXRlLCB2YWx1ZSk7CkBAIC02MDEsNDkgKzYxMyw0OSBA
QCBKU0M6OkpTT2JqZWN0KiBKU1Rlc3RTZXJpYWxpemF0aW9uOjpzZXJpCiAKICAgICBhdXRvIGZp
cnN0U3RyaW5nQXR0cmlidXRlVmFsdWUgPSBqc1Rlc3RTZXJpYWxpemF0aW9uRmlyc3RTdHJpbmdB
dHRyaWJ1dGVHZXR0ZXIoc3RhdGUsIHRoaXNPYmplY3QsIHRocm93U2NvcGUpOwogICAgIHRocm93
U2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKLSAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJmaXJzdFN0cmluZ0F0dHJpYnV0ZSIpLCBmaXJzdFN0
cmluZ0F0dHJpYnV0ZVZhbHVlKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZyh2bSwgImZpcnN0U3RyaW5nQXR0cmlidXRlIiksIGZpcnN0U3RyaW5nQXR0
cmlidXRlVmFsdWUpOwogCiAgICAgYXV0byBzZWNvbmRMb25nQXR0cmlidXRlVmFsdWUgPSBqc1Rl
c3RTZXJpYWxpemF0aW9uU2Vjb25kTG9uZ0F0dHJpYnV0ZUdldHRlcihzdGF0ZSwgdGhpc09iamVj
dCwgdGhyb3dTY29wZSk7CiAgICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwotICAg
IHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgInNlY29u
ZExvbmdBdHRyaWJ1dGUiKSwgc2Vjb25kTG9uZ0F0dHJpYnV0ZVZhbHVlKTsKKyAgICByZXN1bHQt
PnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInNlY29uZExvbmdBdHRy
aWJ1dGUiKSwgc2Vjb25kTG9uZ0F0dHJpYnV0ZVZhbHVlKTsKIAogICAgIGF1dG8gZm91cnRoVW5y
ZXN0cmljdGVkRG91YmxlQXR0cmlidXRlVmFsdWUgPSBqc1Rlc3RTZXJpYWxpemF0aW9uRm91cnRo
VW5yZXN0cmljdGVkRG91YmxlQXR0cmlidXRlR2V0dGVyKHN0YXRlLCB0aGlzT2JqZWN0LCB0aHJv
d1Njb3BlKTsKICAgICB0aHJvd1Njb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7Ci0gICAgcmVzdWx0
LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiZm91cnRoVW5yZXN0
cmljdGVkRG91YmxlQXR0cmlidXRlIiksIGZvdXJ0aFVucmVzdHJpY3RlZERvdWJsZUF0dHJpYnV0
ZVZhbHVlKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zyh2bSwgImZvdXJ0aFVucmVzdHJpY3RlZERvdWJsZUF0dHJpYnV0ZSIpLCBmb3VydGhVbnJlc3Ry
aWN0ZWREb3VibGVBdHRyaWJ1dGVWYWx1ZSk7CiAKICAgICBhdXRvIGZpZnRoTG9uZ0F0dHJpYnV0
ZVZhbHVlID0ganNUZXN0U2VyaWFsaXphdGlvbkZpZnRoTG9uZ0F0dHJpYnV0ZUdldHRlcihzdGF0
ZSwgdGhpc09iamVjdCwgdGhyb3dTY29wZSk7CiAgICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2Vw
dGlvbigpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KCZ2bSwgImZpZnRoTG9uZ0F0dHJpYnV0ZSIpLCBmaWZ0aExvbmdBdHRyaWJ1dGVWYWx1ZSk7Cisg
ICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJmaWZ0
aExvbmdBdHRyaWJ1dGUiKSwgZmlmdGhMb25nQXR0cmlidXRlVmFsdWUpOwogCiAgICAgYXV0byBz
aXh0aFR5cGVkZWZBdHRyaWJ1dGVWYWx1ZSA9IGpzVGVzdFNlcmlhbGl6YXRpb25TaXh0aFR5cGVk
ZWZBdHRyaWJ1dGVHZXR0ZXIoc3RhdGUsIHRoaXNPYmplY3QsIHRocm93U2NvcGUpOwogICAgIHRo
cm93U2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKLSAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJzaXh0aFR5cGVkZWZBdHRyaWJ1dGUiKSwgc2l4
dGhUeXBlZGVmQXR0cmlidXRlVmFsdWUpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAic2l4dGhUeXBlZGVmQXR0cmlidXRlIiksIHNpeHRoVHlw
ZWRlZkF0dHJpYnV0ZVZhbHVlKTsKIAogICAgIGF1dG8gc2V2ZW50aERpcmVjdGx5U2VyaWFsaXph
YmxlQXR0cmlidXRlVmFsdWUgPSBqc1Rlc3RTZXJpYWxpemF0aW9uU2V2ZW50aERpcmVjdGx5U2Vy
aWFsaXphYmxlQXR0cmlidXRlR2V0dGVyKHN0YXRlLCB0aGlzT2JqZWN0LCB0aHJvd1Njb3BlKTsK
ICAgICB0aHJvd1Njb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7CiAgICAgYXV0byogc2V2ZW50aERp
cmVjdGx5U2VyaWFsaXphYmxlQXR0cmlidXRlU2VyaWFsaXplZFZhbHVlID0gSlNUZXN0U2VyaWFs
aXphdGlvbkluaGVyaXRGaW5hbDo6c2VyaWFsaXplKHN0YXRlLCAqanNDYXN0PEpTVGVzdFNlcmlh
bGl6YXRpb25Jbmhlcml0RmluYWwqPihzZXZlbnRoRGlyZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1
dGVWYWx1ZSksIGdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSk7Ci0gICAgcmVzdWx0LT5wdXREaXJl
Y3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAic2V2ZW50aERpcmVjdGx5U2VyaWFs
aXphYmxlQXR0cmlidXRlIiksIHNldmVudGhEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZVNl
cmlhbGl6ZWRWYWx1ZSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZy
b21TdHJpbmcodm0sICJzZXZlbnRoRGlyZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGUiKSwgc2V2
ZW50aERpcmVjdGx5U2VyaWFsaXphYmxlQXR0cmlidXRlU2VyaWFsaXplZFZhbHVlKTsKIAogICAg
IGF1dG8gZWlnaHRoSW5kaXJlY3RseUF0dHJpYnV0ZVZhbHVlID0ganNUZXN0U2VyaWFsaXphdGlv
bkVpZ2h0aEluZGlyZWN0bHlBdHRyaWJ1dGVHZXR0ZXIoc3RhdGUsIHRoaXNPYmplY3QsIHRocm93
U2NvcGUpOwogICAgIHRocm93U2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKICAgICBhdXRvKiBl
aWdodGhJbmRpcmVjdGx5QXR0cmlidXRlU2VyaWFsaXplZFZhbHVlID0gSlNUZXN0U2VyaWFsaXph
dGlvbkluZGlyZWN0SW5oZXJpdGFuY2U6OnNlcmlhbGl6ZShzdGF0ZSwgKmpzQ2FzdDxKU1Rlc3RT
ZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZSo+KGVpZ2h0aEluZGlyZWN0bHlBdHRyaWJ1
dGVWYWx1ZSksIGdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSk7Ci0gICAgcmVzdWx0LT5wdXREaXJl
Y3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiZWlnaHRoSW5kaXJlY3RseUF0dHJp
YnV0ZSIpLCBlaWdodGhJbmRpcmVjdGx5QXR0cmlidXRlU2VyaWFsaXplZFZhbHVlKTsKKyAgICBy
ZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImVpZ2h0aElu
ZGlyZWN0bHlBdHRyaWJ1dGUiKSwgZWlnaHRoSW5kaXJlY3RseUF0dHJpYnV0ZVNlcmlhbGl6ZWRW
YWx1ZSk7CiAKICAgICBhdXRvIG5pbnRoT3B0aW9uYWxEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJp
YnV0ZVZhbHVlID0ganNUZXN0U2VyaWFsaXphdGlvbk5pbnRoT3B0aW9uYWxEaXJlY3RseVNlcmlh
bGl6YWJsZUF0dHJpYnV0ZUdldHRlcihzdGF0ZSwgdGhpc09iamVjdCwgdGhyb3dTY29wZSk7CiAg
ICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwogICAgIGlmICghbmludGhPcHRpb25h
bERpcmVjdGx5U2VyaWFsaXphYmxlQXR0cmlidXRlVmFsdWUuaXNOdWxsKCkpIHsKICAgICAgICAg
YXV0byogbmludGhPcHRpb25hbERpcmVjdGx5U2VyaWFsaXphYmxlQXR0cmlidXRlU2VyaWFsaXpl
ZFZhbHVlID0gSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbDo6c2VyaWFsaXplKHN0YXRl
LCAqanNDYXN0PEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwqPihuaW50aE9wdGlvbmFs
RGlyZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGVWYWx1ZSksIGdsb2JhbE9iamVjdCwgdGhyb3dT
Y29wZSk7Ci0gICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKCZ2bSwgIm5pbnRoT3B0aW9uYWxEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZSIpLCBu
aW50aE9wdGlvbmFsRGlyZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGVTZXJpYWxpemVkVmFsdWUp
OworICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2
bSwgIm5pbnRoT3B0aW9uYWxEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZSIpLCBuaW50aE9w
dGlvbmFsRGlyZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGVTZXJpYWxpemVkVmFsdWUpOwogICAg
IH0gZWxzZQotICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZygmdm0sICJuaW50aE9wdGlvbmFsRGlyZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGUiKSwg
bmludGhPcHRpb25hbERpcmVjdGx5U2VyaWFsaXphYmxlQXR0cmlidXRlVmFsdWUpOworICAgICAg
ICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIm5pbnRo
T3B0aW9uYWxEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZSIpLCBuaW50aE9wdGlvbmFsRGly
ZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGVWYWx1ZSk7CiAKICAgICBhdXRvIHRlbnRoRnJvemVu
QXJyYXlBdHRyaWJ1dGVWYWx1ZSA9IGpzVGVzdFNlcmlhbGl6YXRpb25UZW50aEZyb3plbkFycmF5
QXR0cmlidXRlR2V0dGVyKHN0YXRlLCB0aGlzT2JqZWN0LCB0aHJvd1Njb3BlKTsKICAgICB0aHJv
d1Njb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7Ci0gICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAidGVudGhGcm96ZW5BcnJheUF0dHJpYnV0ZSIpLCB0
ZW50aEZyb3plbkFycmF5QXR0cmlidXRlVmFsdWUpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZt
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAidGVudGhGcm96ZW5BcnJheUF0dHJpYnV0ZSIp
LCB0ZW50aEZyb3plbkFycmF5QXR0cmlidXRlVmFsdWUpOwogCiAgICAgYXV0byBlbGV2ZW50aFNl
cXVlbmNlQXR0cmlidXRlVmFsdWUgPSBqc1Rlc3RTZXJpYWxpemF0aW9uRWxldmVudGhTZXF1ZW5j
ZUF0dHJpYnV0ZUdldHRlcihzdGF0ZSwgdGhpc09iamVjdCwgdGhyb3dTY29wZSk7CiAgICAgdGhy
b3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImVsZXZlbnRoU2VxdWVuY2VBdHRyaWJ1dGUiKSwg
ZWxldmVudGhTZXF1ZW5jZUF0dHJpYnV0ZVZhbHVlKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2
bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImVsZXZlbnRoU2VxdWVuY2VBdHRyaWJ1dGUi
KSwgZWxldmVudGhTZXF1ZW5jZUF0dHJpYnV0ZVZhbHVlKTsKIAogICAgIHJldHVybiByZXN1bHQ7
CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uSW5k
aXJlY3RJbmhlcml0YW5jZS5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhl
cml0YW5jZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc2LDcgKzc2LDcgQEAgdGVtcGxhdGU8PiBK
U1ZhbHVlIEpTVGVzdFNlcmlhbGl6YXRpb25JbgogdGVtcGxhdGU8PiB2b2lkIEpTVGVzdFNlcmlh
bGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0
aWVzKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKIHsKICAgICBwdXRE
aXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgSlNUZXN0U2VyaWFsaXphdGlv
bkluZGlyZWN0SW5oZXJpdGFuY2U6OnByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KSwgSlNDOjpQ
cm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJl
YWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwotICAgIHB1dERpcmVj
dCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKCZ2bSwgU3Ry
aW5nKCJUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2UiX3MpKSwgSlNDOjpQcm9w
ZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51
bSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZp
YWxTdHJpbmcodm0sIFN0cmluZygiVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNl
Il9zKSksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0
dHJpYnV0ZTo6RG9udEVudW0pOwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+
bGVuZ3RoLCBqc051bWJlcigwKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBK
U0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0LmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb25J
bmhlcml0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODYsNyArODYsNyBAQCB0ZW1wbGF0ZTw+IEpT
VmFsdWUgSlNUZXN0U2VyaWFsaXphdGlvbkluCiB0ZW1wbGF0ZTw+IHZvaWQgSlNUZXN0U2VyaWFs
aXphdGlvbkluaGVyaXRDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMoVk0mIHZtLCBK
U0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQogewogICAgIHB1dERpcmVjdCh2bSwgdm0u
cHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdDo6cHJv
dG90eXBlKHZtLCBnbG9iYWxPYmplY3QpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RGVs
ZXRlIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0
cmlidXRlOjpEb250RW51bSk7Ci0gICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5u
YW1lLCBqc05vbnRyaXZpYWxTdHJpbmcoJnZtLCBTdHJpbmcoIlRlc3RTZXJpYWxpemF0aW9uSW5o
ZXJpdCJfcykpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVy
dHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFt
ZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZyh2bSwgU3RyaW5nKCJUZXN0U2VyaWFsaXphdGlv
bkluaGVyaXQiX3MpKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlBy
b3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0
eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDApLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFk
T25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKIH0KIApAQCAtMTg3LDYg
KzE4Nyw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25JbmhlcmkKIAogc3Rh
dGljIGlubGluZSBib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0SW5oZXJpdExvbmdB
dHRyaWJ1dGVTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVy
aXQmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7
CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7
CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZl
VmFsdWUgPSBjb252ZXJ0PElETExvbmc+KHN0YXRlLCB2YWx1ZSk7CkBAIC0yMDksNyArMjEwLDcg
QEAgSlNDOjpKU09iamVjdCogSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaQogCiAgICAgYXV0byBp
bmhlcml0TG9uZ0F0dHJpYnV0ZVZhbHVlID0ganNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRJbmhl
cml0TG9uZ0F0dHJpYnV0ZUdldHRlcihzdGF0ZSwgdGhpc09iamVjdCwgdGhyb3dTY29wZSk7CiAg
ICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0
KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImluaGVyaXRMb25nQXR0cmlidXRlIiks
IGluaGVyaXRMb25nQXR0cmlidXRlVmFsdWUpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiaW5oZXJpdExvbmdBdHRyaWJ1dGUiKSwgaW5oZXJp
dExvbmdBdHRyaWJ1dGVWYWx1ZSk7CiAKICAgICByZXR1cm4gcmVzdWx0OwogfQpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb25J
bmhlcml0RmluYWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsLmNwcAkocmV2aXNp
b24gMjQ5MTI4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OCw3
ICs4OCw3IEBAIHRlbXBsYXRlPD4gSlNWYWx1ZSBKU1Rlc3RTZXJpYWxpemF0aW9uSW4KIHRlbXBs
YXRlPD4gdm9pZCBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsQ29uc3RydWN0b3I6Omlu
aXRpYWxpemVQcm9wZXJ0aWVzKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVj
dCkKIHsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgSlNU
ZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbDo6cHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3Qp
LCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgSlNDOjpQcm9wZXJ0eUF0dHJp
YnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7Ci0gICAg
cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmco
JnZtLCBTdHJpbmcoIlRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsIl9zKSksIEpTQzo6UHJv
cGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVu
dW0pOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2
aWFsU3RyaW5nKHZtLCBTdHJpbmcoIlRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsIl9zKSks
IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0
ZTo6RG9udEVudW0pOwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3Ro
LCBqc051bWJlcigwKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlBy
b3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CiB9CiAKQEAgLTE5MCw2ICsxOTAsNyBAQCBFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpCiAKIHN0YXRpYyBpbmxpbmUgYm9v
bCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsRmluYWxMb25nQXR0cmlidXRlRm9v
U2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwm
IHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Cisg
ICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAg
ICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFs
dWUgPSBjb252ZXJ0PElETExvbmc+KHN0YXRlLCB2YWx1ZSk7CkBAIC0yMjEsNiArMjIyLDcgQEAg
RW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvbkluaGVyaQogCiBzdGF0aWMgaW5saW5l
IGJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbEZpbmFsTG9uZ0F0dHJpYnV0
ZUJhclNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZp
bmFsJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQog
eworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2
ZVZhbHVlID0gY29udmVydDxJRExMb25nPihzdGF0ZSwgdmFsdWUpOwpAQCAtMjQzLDcgKzI0NSw3
IEBAIEpTQzo6SlNPYmplY3QqIEpTVGVzdFNlcmlhbGl6YXRpb25JbmhlcmkKIAogICAgIGF1dG8g
ZmluYWxMb25nQXR0cmlidXRlQmFyVmFsdWUgPSBqc1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZp
bmFsRmluYWxMb25nQXR0cmlidXRlQmFyR2V0dGVyKHN0YXRlLCB0aGlzT2JqZWN0LCB0aHJvd1Nj
b3BlKTsKICAgICB0aHJvd1Njb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7Ci0gICAgcmVzdWx0LT5w
dXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiZmluYWxMb25nQXR0cmli
dXRlQmFyIiksIGZpbmFsTG9uZ0F0dHJpYnV0ZUJhclZhbHVlKTsKKyAgICByZXN1bHQtPnB1dERp
cmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImZpbmFsTG9uZ0F0dHJpYnV0ZUJh
ciIpLCBmaW5hbExvbmdBdHRyaWJ1dGVCYXJWYWx1ZSk7CiAKICAgICByZXR1cm4gcmVzdWx0Owog
fQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZUludGVyZmFjZS5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIsNyArMTAyLDcgQEAgdGVtcGxhdGU8PiBKU1ZhbHVl
IEpTVGVzdFNlcmlhbGl6ZWRTY3JpcAogdGVtcGxhdGU8PiB2b2lkIEpTVGVzdFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZUludGVyZmFjZUNvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGllcyhWTSYg
dm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCiB7CiAgICAgcHV0RGlyZWN0KHZt
LCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZUludGVyZmFjZTo6cHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QpLCBKU0M6OlByb3BlcnR5QXR0
cmlidXRlOjpEb250RGVsZXRlIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBK
U0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7Ci0gICAgcHV0RGlyZWN0KHZtLCB2bS5w
cm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcoJnZtLCBTdHJpbmcoIlRlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UiX3MpKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0
ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CisgICAgcHV0
RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcodm0s
IFN0cmluZygiVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSJfcykpLCBKU0M6OlBy
b3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRF
bnVtKTsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1i
ZXIoMCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0
dHJpYnV0ZTo6RG9udEVudW0pOwogfQogCkBAIC0yMTQsNiArMjE0LDcgQEAgRW5jb2RlZEpTVmFs
dWUganNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbAogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNU
ZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlVmFsdWVTZXR0ZXIoRXhlY1N0YXRlJiBz
dGF0ZSwgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlJiB0aGlzT2JqZWN0LCBK
U1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogeworICAgIFVOVVNFRF9QQVJB
TShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwg
PSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJ
RExTZXJpYWxpemVkU2NyaXB0VmFsdWU8U2VyaWFsaXplZFNjcmlwdFZhbHVlPj4oc3RhdGUsIHZh
bHVlKTsKQEAgLTI2Miw2ICsyNjMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemVk
U2NyaXB0VmFsCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemVkU2NyaXB0
VmFsdWVJbnRlcmZhY2VDYWNoZWRWYWx1ZVNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUs
IFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qu
d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZTxTZXJpYWxpemVkU2NyaXB0VmFsdWU+PihzdGF0ZSwgdmFsdWUpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0YW5kYWxvbmVE
aWN0aW9uYXJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0U3RhbmRhbG9uZURpY3Rpb25hcnkuY3BwCShyZXZpc2lvbiAyNDkx
MjgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3Rh
bmRhbG9uZURpY3Rpb25hcnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1OCw3IEBAIHRl
bXBsYXRlPD4gRGljdGlvbmFyeUltcGxOYW1lIGNvbnZlcnREaWMKICAgICBpZiAoaXNOdWxsT3JV
bmRlZmluZWQpCiAgICAgICAgIGJvb2xNZW1iZXJWYWx1ZSA9IGpzVW5kZWZpbmVkKCk7CiAgICAg
ZWxzZSB7Ci0gICAgICAgIGJvb2xNZW1iZXJWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJib29sTWVtYmVyIikpOworICAgICAgICBib29s
TWVtYmVyVmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmco
dm0sICJib29sTWVtYmVyIikpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2Nv
cGUsIHsgfSk7CiAgICAgfQogICAgIGlmICghYm9vbE1lbWJlclZhbHVlLmlzVW5kZWZpbmVkKCkp
IHsKQEAgLTY5LDcgKzY5LDcgQEAgdGVtcGxhdGU8PiBEaWN0aW9uYXJ5SW1wbE5hbWUgY29udmVy
dERpYwogICAgIGlmIChpc051bGxPclVuZGVmaW5lZCkKICAgICAgICAgY2FsbGJhY2tNZW1iZXJW
YWx1ZSA9IGpzVW5kZWZpbmVkKCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIGNhbGxiYWNrTWVtYmVy
VmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRl
LCAiY2FsbGJhY2tNZW1iZXIiKSk7CisgICAgICAgIGNhbGxiYWNrTWVtYmVyVmFsdWUgPSBvYmpl
Y3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJjYWxsYmFja01lbWJl
ciIpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAg
IH0KICAgICBpZiAoIWNhbGxiYWNrTWVtYmVyVmFsdWUuaXNVbmRlZmluZWQoKSkgewpAQCAtODAs
NyArODAsNyBAQCB0ZW1wbGF0ZTw+IERpY3Rpb25hcnlJbXBsTmFtZSBjb252ZXJ0RGljCiAgICAg
aWYgKGlzTnVsbE9yVW5kZWZpbmVkKQogICAgICAgICBlbnVtTWVtYmVyVmFsdWUgPSBqc1VuZGVm
aW5lZCgpOwogICAgIGVsc2UgewotICAgICAgICBlbnVtTWVtYmVyVmFsdWUgPSBvYmplY3QtPmdl
dCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAiZW51bU1lbWJlciIpKTsK
KyAgICAgICAgZW51bU1lbWJlclZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKHZtLCAiZW51bU1lbWJlciIpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0KICAgICBpZiAoIWVudW1NZW1iZXJWYWx1ZS5p
c1VuZGVmaW5lZCgpKSB7CkBAIC05Miw3ICs5Miw3IEBAIHRlbXBsYXRlPD4gRGljdGlvbmFyeUlt
cGxOYW1lIGNvbnZlcnREaWMKICAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQpCiAgICAgICAgIHBh
cnRpYWxCb29sZWFuTWVtYmVyVmFsdWUgPSBqc1VuZGVmaW5lZCgpOwogICAgIGVsc2UgewotICAg
ICAgICBwYXJ0aWFsQm9vbGVhbk1lbWJlclZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgInBhcnRpYWxCb29sZWFuTWVtYmVyIikpOworICAg
ICAgICBwYXJ0aWFsQm9vbGVhbk1lbWJlclZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAicGFydGlhbEJvb2xlYW5NZW1iZXIiKSk7CiAgICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICB9CiAgICAgaWYgKCFw
YXJ0aWFsQm9vbGVhbk1lbWJlclZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKQEAgLTEwNSw3ICsxMDUs
NyBAQCB0ZW1wbGF0ZTw+IERpY3Rpb25hcnlJbXBsTmFtZSBjb252ZXJ0RGljCiAgICAgaWYgKGlz
TnVsbE9yVW5kZWZpbmVkKQogICAgICAgICBwYXJ0aWFsQm9vbGVhbk1lbWJlcldpdGhJZ25vcmVk
Q29uZGl0aW9uYWxWYWx1ZSA9IGpzVW5kZWZpbmVkKCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIHBh
cnRpYWxCb29sZWFuTWVtYmVyV2l0aElnbm9yZWRDb25kaXRpb25hbFZhbHVlID0gb2JqZWN0LT5n
ZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgInBhcnRpYWxCb29sZWFu
TWVtYmVyV2l0aElnbm9yZWRDb25kaXRpb25hbCIpKTsKKyAgICAgICAgcGFydGlhbEJvb2xlYW5N
ZW1iZXJXaXRoSWdub3JlZENvbmRpdGlvbmFsVmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJwYXJ0aWFsQm9vbGVhbk1lbWJlcldpdGhJZ25vcmVk
Q29uZGl0aW9uYWwiKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
eyB9KTsKICAgICB9CiAgICAgaWYgKCFwYXJ0aWFsQm9vbGVhbk1lbWJlcldpdGhJZ25vcmVkQ29u
ZGl0aW9uYWxWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7CkBAIC0xMTgsNyArMTE4LDcgQEAgdGVtcGxh
dGU8PiBEaWN0aW9uYXJ5SW1wbE5hbWUgY29udmVydERpYwogICAgIGlmIChpc051bGxPclVuZGVm
aW5lZCkKICAgICAgICAgcGFydGlhbENhbGxiYWNrTWVtYmVyVmFsdWUgPSBqc1VuZGVmaW5lZCgp
OwogICAgIGVsc2UgewotICAgICAgICBwYXJ0aWFsQ2FsbGJhY2tNZW1iZXJWYWx1ZSA9IG9iamVj
dC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJwYXJ0aWFsQ2Fs
bGJhY2tNZW1iZXIiKSk7CisgICAgICAgIHBhcnRpYWxDYWxsYmFja01lbWJlclZhbHVlID0gb2Jq
ZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAicGFydGlhbENhbGxi
YWNrTWVtYmVyIikpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsg
fSk7CiAgICAgfQogICAgIGlmICghcGFydGlhbENhbGxiYWNrTWVtYmVyVmFsdWUuaXNVbmRlZmlu
ZWQoKSkgewpAQCAtMTMxLDcgKzEzMSw3IEBAIHRlbXBsYXRlPD4gRGljdGlvbmFyeUltcGxOYW1l
IGNvbnZlcnREaWMKICAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQpCiAgICAgICAgIHBhcnRpYWxF
bnVtTWVtYmVyVmFsdWUgPSBqc1VuZGVmaW5lZCgpOwogICAgIGVsc2UgewotICAgICAgICBwYXJ0
aWFsRW51bU1lbWJlclZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKCZzdGF0ZSwgInBhcnRpYWxFbnVtTWVtYmVyIikpOworICAgICAgICBwYXJ0aWFsRW51
bU1lbWJlclZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KHZtLCAicGFydGlhbEVudW1NZW1iZXIiKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgeyB9KTsKICAgICB9CiAgICAgaWYgKCFwYXJ0aWFsRW51bU1lbWJlclZhbHVl
LmlzVW5kZWZpbmVkKCkpIHsKQEAgLTE0NCw3ICsxNDQsNyBAQCB0ZW1wbGF0ZTw+IERpY3Rpb25h
cnlJbXBsTmFtZSBjb252ZXJ0RGljCiAgICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKQogICAgICAg
ICBwYXJ0aWFsUmVxdWlyZWRMb25nTWVtYmVyVmFsdWUgPSBqc1VuZGVmaW5lZCgpOwogICAgIGVs
c2UgewotICAgICAgICBwYXJ0aWFsUmVxdWlyZWRMb25nTWVtYmVyVmFsdWUgPSBvYmplY3QtPmdl
dCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAicGFydGlhbFJlcXVpcmVk
TG9uZ01lbWJlciIpKTsKKyAgICAgICAgcGFydGlhbFJlcXVpcmVkTG9uZ01lbWJlclZhbHVlID0g
b2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAicGFydGlhbFJl
cXVpcmVkTG9uZ01lbWJlciIpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCB7IH0pOwogICAgIH0KICAgICBpZiAoIXBhcnRpYWxSZXF1aXJlZExvbmdNZW1iZXJWYWx1
ZS5pc1VuZGVmaW5lZCgpKSB7CkBAIC0xNjAsNyArMTYwLDcgQEAgdGVtcGxhdGU8PiBEaWN0aW9u
YXJ5SW1wbE5hbWUgY29udmVydERpYwogICAgIGlmIChpc051bGxPclVuZGVmaW5lZCkKICAgICAg
ICAgcGFydGlhbFN0cmluZ01lbWJlclZhbHVlID0ganNVbmRlZmluZWQoKTsKICAgICBlbHNlIHsK
LSAgICAgICAgcGFydGlhbFN0cmluZ01lbWJlclZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgInBhcnRpYWxTdHJpbmdNZW1iZXIiKSk7Cisg
ICAgICAgIHBhcnRpYWxTdHJpbmdNZW1iZXJWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInBhcnRpYWxTdHJpbmdNZW1iZXIiKSk7CiAgICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICB9CiAgICAgaWYgKCFw
YXJ0aWFsU3RyaW5nTWVtYmVyVmFsdWUuaXNVbmRlZmluZWQoKSkgewpAQCAtMTczLDcgKzE3Myw3
IEBAIHRlbXBsYXRlPD4gRGljdGlvbmFyeUltcGxOYW1lIGNvbnZlcnREaWMKICAgICBpZiAoaXNO
dWxsT3JVbmRlZmluZWQpCiAgICAgICAgIHBhcnRpYWxTdHJpbmdNZW1iZXJXaXRoRW5hYmxlZEJ5
U2V0dGluZ1ZhbHVlID0ganNVbmRlZmluZWQoKTsKICAgICBlbHNlIHsKLSAgICAgICAgcGFydGlh
bFN0cmluZ01lbWJlcldpdGhFbmFibGVkQnlTZXR0aW5nVmFsdWUgPSBvYmplY3QtPmdldCgmc3Rh
dGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAicGFydGlhbFN0cmluZ01lbWJlcldp
dGhFbmFibGVkQnlTZXR0aW5nIikpOworICAgICAgICBwYXJ0aWFsU3RyaW5nTWVtYmVyV2l0aEVu
YWJsZWRCeVNldHRpbmdWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyh2bSwgInBhcnRpYWxTdHJpbmdNZW1iZXJXaXRoRW5hYmxlZEJ5U2V0dGluZyIpKTsK
ICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0KICAg
ICBpZiAoIXBhcnRpYWxTdHJpbmdNZW1iZXJXaXRoRW5hYmxlZEJ5U2V0dGluZ1ZhbHVlLmlzVW5k
ZWZpbmVkKCkpIHsKQEAgLTE4Niw3ICsxODYsNyBAQCB0ZW1wbGF0ZTw+IERpY3Rpb25hcnlJbXBs
TmFtZSBjb252ZXJ0RGljCiAgICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKQogICAgICAgICBwYXJ0
aWFsVW5zaWduZWRMb25nTWVtYmVyV2l0aEltcGxlbWVudGVkQXNWYWx1ZSA9IGpzVW5kZWZpbmVk
KCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIHBhcnRpYWxVbnNpZ25lZExvbmdNZW1iZXJXaXRoSW1w
bGVtZW50ZWRBc1ZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKCZzdGF0ZSwgInBhcnRpYWxVbnNpZ25lZExvbmdNZW1iZXJXaXRoSW1wbGVtZW50ZWRBcyIp
KTsKKyAgICAgICAgcGFydGlhbFVuc2lnbmVkTG9uZ01lbWJlcldpdGhJbXBsZW1lbnRlZEFzVmFs
dWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJwYXJ0
aWFsVW5zaWduZWRMb25nTWVtYmVyV2l0aEltcGxlbWVudGVkQXMiKSk7CiAgICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICB9CiAgICAgaWYgKCFwYXJ0aWFs
VW5zaWduZWRMb25nTWVtYmVyV2l0aEltcGxlbWVudGVkQXNWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7
CkBAIC0xOTgsNyArMTk4LDcgQEAgdGVtcGxhdGU8PiBEaWN0aW9uYXJ5SW1wbE5hbWUgY29udmVy
dERpYwogICAgIGlmIChpc051bGxPclVuZGVmaW5lZCkKICAgICAgICAgc3RyaW5nTWVtYmVyVmFs
dWUgPSBqc1VuZGVmaW5lZCgpOwogICAgIGVsc2UgewotICAgICAgICBzdHJpbmdNZW1iZXJWYWx1
ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJz
dHJpbmdNZW1iZXIiKSk7CisgICAgICAgIHN0cmluZ01lbWJlclZhbHVlID0gb2JqZWN0LT5nZXQo
JnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAic3RyaW5nTWVtYmVyIikpOwogICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgfQogICAgIGlm
ICghc3RyaW5nTWVtYmVyVmFsdWUuaXNVbmRlZmluZWQoKSkgewpAQCAtMjE2LDY3ICsyMTYsNjcg
QEAgSlNDOjpKU09iamVjdCogY29udmVydERpY3Rpb25hcnlUb0pTKEpTQwogCiAgICAgaWYgKCFJ
RExCb29sZWFuOjppc051bGxWYWx1ZShkaWN0aW9uYXJ5LmJvb2xNZW1iZXIpKSB7CiAgICAgICAg
IGF1dG8gYm9vbE1lbWJlclZhbHVlID0gdG9KUzxJRExCb29sZWFuPihJRExCb29sZWFuOjpleHRy
YWN0VmFsdWVGcm9tTnVsbGFibGUoZGljdGlvbmFyeS5ib29sTWVtYmVyKSk7Ci0gICAgICAgIHJl
c3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiYm9v
bE1lbWJlciIpLCBib29sTWVtYmVyVmFsdWUpOworICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2
bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiYm9vbE1lbWJlciIpLCBib29sTWVt
YmVyVmFsdWUpOwogICAgIH0KICAgICBpZiAoIUlETENhbGxiYWNrRnVuY3Rpb248SlNWb2lkQ2Fs
bGJhY2s+Ojppc051bGxWYWx1ZShkaWN0aW9uYXJ5LmNhbGxiYWNrTWVtYmVyKSkgewogICAgICAg
ICBhdXRvIGNhbGxiYWNrTWVtYmVyVmFsdWUgPSB0b0pTPElETENhbGxiYWNrRnVuY3Rpb248SlNW
b2lkQ2FsbGJhY2s+PihzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBJRExDYWxsYmFja0Z1bmN0aW9uPEpT
Vm9pZENhbGxiYWNrPjo6ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKGRpY3Rpb25hcnkuY2FsbGJh
Y2tNZW1iZXIpKTsKLSAgICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmll
cjo6ZnJvbVN0cmluZygmdm0sICJjYWxsYmFja01lbWJlciIpLCBjYWxsYmFja01lbWJlclZhbHVl
KTsKKyAgICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0
cmluZyh2bSwgImNhbGxiYWNrTWVtYmVyIiksIGNhbGxiYWNrTWVtYmVyVmFsdWUpOwogICAgIH0K
ICAgICBpZiAoIUlETEVudW1lcmF0aW9uPFRlc3RTdGFuZGFsb25lRGljdGlvbmFyeTo6RW51bUlu
U3RhbmRhbG9uZURpY3Rpb25hcnlGaWxlPjo6aXNOdWxsVmFsdWUoZGljdGlvbmFyeS5lbnVtTWVt
YmVyKSkgewogICAgICAgICBhdXRvIGVudW1NZW1iZXJWYWx1ZSA9IHRvSlM8SURMRW51bWVyYXRp
b248VGVzdFN0YW5kYWxvbmVEaWN0aW9uYXJ5OjpFbnVtSW5TdGFuZGFsb25lRGljdGlvbmFyeUZp
bGU+PihzdGF0ZSwgSURMRW51bWVyYXRpb248VGVzdFN0YW5kYWxvbmVEaWN0aW9uYXJ5OjpFbnVt
SW5TdGFuZGFsb25lRGljdGlvbmFyeUZpbGU+OjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUoZGlj
dGlvbmFyeS5lbnVtTWVtYmVyKSk7Ci0gICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6
OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiZW51bU1lbWJlciIpLCBlbnVtTWVtYmVyVmFs
dWUpOworICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKHZtLCAiZW51bU1lbWJlciIpLCBlbnVtTWVtYmVyVmFsdWUpOwogICAgIH0KICNpZiBF
TkFCTEUoQ29uZGl0aW9uYWwxMykgfHwgRU5BQkxFKENvbmRpdGlvbmFsMTQpCiAgICAgaWYgKCFJ
RExCb29sZWFuOjppc051bGxWYWx1ZShkaWN0aW9uYXJ5LnBhcnRpYWxCb29sZWFuTWVtYmVyKSkg
ewogICAgICAgICBhdXRvIHBhcnRpYWxCb29sZWFuTWVtYmVyVmFsdWUgPSB0b0pTPElETEJvb2xl
YW4+KElETEJvb2xlYW46OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZShkaWN0aW9uYXJ5LnBhcnRp
YWxCb29sZWFuTWVtYmVyKSk7Ci0gICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6Oklk
ZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAicGFydGlhbEJvb2xlYW5NZW1iZXIiKSwgcGFydGlh
bEJvb2xlYW5NZW1iZXJWYWx1ZSk7CisgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6
OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJwYXJ0aWFsQm9vbGVhbk1lbWJlciIpLCBwYXJ0
aWFsQm9vbGVhbk1lbWJlclZhbHVlKTsKICAgICB9CiAjZW5kaWYKICNpZiBFTkFCTEUoQ29uZGl0
aW9uYWwxMykgfHwgRU5BQkxFKENvbmRpdGlvbmFsMTQpCiAgICAgaWYgKCFJRExCb29sZWFuOjpp
c051bGxWYWx1ZShkaWN0aW9uYXJ5LnBhcnRpYWxCb29sZWFuTWVtYmVyV2l0aElnbm9yZWRDb25k
aXRpb25hbCkpIHsKICAgICAgICAgYXV0byBwYXJ0aWFsQm9vbGVhbk1lbWJlcldpdGhJZ25vcmVk
Q29uZGl0aW9uYWxWYWx1ZSA9IHRvSlM8SURMQm9vbGVhbj4oSURMQm9vbGVhbjo6ZXh0cmFjdFZh
bHVlRnJvbU51bGxhYmxlKGRpY3Rpb25hcnkucGFydGlhbEJvb2xlYW5NZW1iZXJXaXRoSWdub3Jl
ZENvbmRpdGlvbmFsKSk7Ci0gICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50
aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAicGFydGlhbEJvb2xlYW5NZW1iZXJXaXRoSWdub3JlZENv
bmRpdGlvbmFsIiksIHBhcnRpYWxCb29sZWFuTWVtYmVyV2l0aElnbm9yZWRDb25kaXRpb25hbFZh
bHVlKTsKKyAgICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJv
bVN0cmluZyh2bSwgInBhcnRpYWxCb29sZWFuTWVtYmVyV2l0aElnbm9yZWRDb25kaXRpb25hbCIp
LCBwYXJ0aWFsQm9vbGVhbk1lbWJlcldpdGhJZ25vcmVkQ29uZGl0aW9uYWxWYWx1ZSk7CiAgICAg
fQogI2VuZGlmCiAjaWYgRU5BQkxFKENvbmRpdGlvbmFsMTMpIHx8IEVOQUJMRShDb25kaXRpb25h
bDE0KQogICAgIGlmICghSURMQ2FsbGJhY2tGdW5jdGlvbjxKU1ZvaWRDYWxsYmFjaz46OmlzTnVs
bFZhbHVlKGRpY3Rpb25hcnkucGFydGlhbENhbGxiYWNrTWVtYmVyKSkgewogICAgICAgICBhdXRv
IHBhcnRpYWxDYWxsYmFja01lbWJlclZhbHVlID0gdG9KUzxJRExDYWxsYmFja0Z1bmN0aW9uPEpT
Vm9pZENhbGxiYWNrPj4oc3RhdGUsIGdsb2JhbE9iamVjdCwgSURMQ2FsbGJhY2tGdW5jdGlvbjxK
U1ZvaWRDYWxsYmFjaz46OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZShkaWN0aW9uYXJ5LnBhcnRp
YWxDYWxsYmFja01lbWJlcikpOwotICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgInBhcnRpYWxDYWxsYmFja01lbWJlciIpLCBwYXJ0
aWFsQ2FsbGJhY2tNZW1iZXJWYWx1ZSk7CisgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBK
U0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJwYXJ0aWFsQ2FsbGJhY2tNZW1iZXIiKSwg
cGFydGlhbENhbGxiYWNrTWVtYmVyVmFsdWUpOwogICAgIH0KICNlbmRpZgogI2lmIEVOQUJMRShD
b25kaXRpb25hbDEzKSB8fCBFTkFCTEUoQ29uZGl0aW9uYWwxNCkKICAgICBpZiAoIUlETEVudW1l
cmF0aW9uPFRlc3RTdGFuZGFsb25lRGljdGlvbmFyeTo6RW51bUluU3RhbmRhbG9uZURpY3Rpb25h
cnlGaWxlPjo6aXNOdWxsVmFsdWUoZGljdGlvbmFyeS5wYXJ0aWFsRW51bU1lbWJlcikpIHsKICAg
ICAgICAgYXV0byBwYXJ0aWFsRW51bU1lbWJlclZhbHVlID0gdG9KUzxJRExFbnVtZXJhdGlvbjxU
ZXN0U3RhbmRhbG9uZURpY3Rpb25hcnk6OkVudW1JblN0YW5kYWxvbmVEaWN0aW9uYXJ5RmlsZT4+
KHN0YXRlLCBJRExFbnVtZXJhdGlvbjxUZXN0U3RhbmRhbG9uZURpY3Rpb25hcnk6OkVudW1JblN0
YW5kYWxvbmVEaWN0aW9uYXJ5RmlsZT46OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZShkaWN0aW9u
YXJ5LnBhcnRpYWxFbnVtTWVtYmVyKSk7Ci0gICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBK
U0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAicGFydGlhbEVudW1NZW1iZXIiKSwgcGFy
dGlhbEVudW1NZW1iZXJWYWx1ZSk7CisgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6
OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJwYXJ0aWFsRW51bU1lbWJlciIpLCBwYXJ0aWFs
RW51bU1lbWJlclZhbHVlKTsKICAgICB9CiAjZW5kaWYKICNpZiBFTkFCTEUoQ29uZGl0aW9uYWwx
MykgfHwgRU5BQkxFKENvbmRpdGlvbmFsMTQpCiAgICAgYXV0byBwYXJ0aWFsUmVxdWlyZWRMb25n
TWVtYmVyVmFsdWUgPSB0b0pTPElETExvbmc+KGRpY3Rpb25hcnkucGFydGlhbFJlcXVpcmVkTG9u
Z01lbWJlcik7Ci0gICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJv
bVN0cmluZygmdm0sICJwYXJ0aWFsUmVxdWlyZWRMb25nTWVtYmVyIiksIHBhcnRpYWxSZXF1aXJl
ZExvbmdNZW1iZXJWYWx1ZSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRp
Zmllcjo6ZnJvbVN0cmluZyh2bSwgInBhcnRpYWxSZXF1aXJlZExvbmdNZW1iZXIiKSwgcGFydGlh
bFJlcXVpcmVkTG9uZ01lbWJlclZhbHVlKTsKICNlbmRpZgogI2lmIEVOQUJMRShDb25kaXRpb25h
bDEzKSB8fCBFTkFCTEUoQ29uZGl0aW9uYWwxNCkKICAgICBpZiAoIUlETERPTVN0cmluZzo6aXNO
dWxsVmFsdWUoZGljdGlvbmFyeS5wYXJ0aWFsU3RyaW5nTWVtYmVyKSkgewogICAgICAgICBhdXRv
IHBhcnRpYWxTdHJpbmdNZW1iZXJWYWx1ZSA9IHRvSlM8SURMRE9NU3RyaW5nPihzdGF0ZSwgSURM
RE9NU3RyaW5nOjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUoZGljdGlvbmFyeS5wYXJ0aWFsU3Ry
aW5nTWVtYmVyKSk7Ci0gICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZp
ZXI6OmZyb21TdHJpbmcoJnZtLCAicGFydGlhbFN0cmluZ01lbWJlciIpLCBwYXJ0aWFsU3RyaW5n
TWVtYmVyVmFsdWUpOworICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKHZtLCAicGFydGlhbFN0cmluZ01lbWJlciIpLCBwYXJ0aWFsU3RyaW5n
TWVtYmVyVmFsdWUpOwogICAgIH0KICNlbmRpZgogI2lmIEVOQUJMRShDb25kaXRpb25hbDEzKSB8
fCBFTkFCTEUoQ29uZGl0aW9uYWwxNCkKICAgICBpZiAoZG93bmNhc3Q8RG9jdW1lbnQ+KGpzQ2Fz
dDxKU0RPTUdsb2JhbE9iamVjdCo+KCZnbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250
ZXh0KCkpLT5zZXR0aW5ncygpLnRlc3RTZXR0aW5nRW5hYmxlZCgpKSB7CiAgICAgICAgIGlmICgh
SURMRE9NU3RyaW5nOjppc051bGxWYWx1ZShkaWN0aW9uYXJ5LnBhcnRpYWxTdHJpbmdNZW1iZXJX
aXRoRW5hYmxlZEJ5U2V0dGluZykpIHsKICAgICAgICAgICAgIGF1dG8gcGFydGlhbFN0cmluZ01l
bWJlcldpdGhFbmFibGVkQnlTZXR0aW5nVmFsdWUgPSB0b0pTPElETERPTVN0cmluZz4oc3RhdGUs
IElETERPTVN0cmluZzo6ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKGRpY3Rpb25hcnkucGFydGlh
bFN0cmluZ01lbWJlcldpdGhFbmFibGVkQnlTZXR0aW5nKSk7Ci0gICAgICAgICAgICByZXN1bHQt
PnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgInBhcnRpYWxT
dHJpbmdNZW1iZXJXaXRoRW5hYmxlZEJ5U2V0dGluZyIpLCBwYXJ0aWFsU3RyaW5nTWVtYmVyV2l0
aEVuYWJsZWRCeVNldHRpbmdWYWx1ZSk7CisgICAgICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2
bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAicGFydGlhbFN0cmluZ01lbWJlcldp
dGhFbmFibGVkQnlTZXR0aW5nIiksIHBhcnRpYWxTdHJpbmdNZW1iZXJXaXRoRW5hYmxlZEJ5U2V0
dGluZ1ZhbHVlKTsKICAgICAgICAgfQogICAgIH0KICNlbmRpZgogI2lmIEVOQUJMRShDb25kaXRp
b25hbDEzKSB8fCBFTkFCTEUoQ29uZGl0aW9uYWwxNCkKICAgICBpZiAoIUlETFVuc2lnbmVkTG9u
Zzo6aXNOdWxsVmFsdWUoZGljdGlvbmFyeS5wYXJ0aWFsVW5zaWduZWRMb25nTWVtYmVyKSkgewog
ICAgICAgICBhdXRvIHBhcnRpYWxVbnNpZ25lZExvbmdNZW1iZXJXaXRoSW1wbGVtZW50ZWRBc1Zh
bHVlID0gdG9KUzxJRExVbnNpZ25lZExvbmc+KElETFVuc2lnbmVkTG9uZzo6ZXh0cmFjdFZhbHVl
RnJvbU51bGxhYmxlKGRpY3Rpb25hcnkucGFydGlhbFVuc2lnbmVkTG9uZ01lbWJlcikpOwotICAg
ICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2
bSwgInBhcnRpYWxVbnNpZ25lZExvbmdNZW1iZXJXaXRoSW1wbGVtZW50ZWRBcyIpLCBwYXJ0aWFs
VW5zaWduZWRMb25nTWVtYmVyV2l0aEltcGxlbWVudGVkQXNWYWx1ZSk7CisgICAgICAgIHJlc3Vs
dC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJwYXJ0aWFs
VW5zaWduZWRMb25nTWVtYmVyV2l0aEltcGxlbWVudGVkQXMiKSwgcGFydGlhbFVuc2lnbmVkTG9u
Z01lbWJlcldpdGhJbXBsZW1lbnRlZEFzVmFsdWUpOwogICAgIH0KICNlbmRpZgogICAgIGlmICgh
SURMRE9NU3RyaW5nOjppc051bGxWYWx1ZShkaWN0aW9uYXJ5LnN0cmluZ01lbWJlcikpIHsKICAg
ICAgICAgYXV0byBzdHJpbmdNZW1iZXJWYWx1ZSA9IHRvSlM8SURMRE9NU3RyaW5nPihzdGF0ZSwg
SURMRE9NU3RyaW5nOjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUoZGljdGlvbmFyeS5zdHJpbmdN
ZW1iZXIpKTsKLSAgICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6
ZnJvbVN0cmluZygmdm0sICJzdHJpbmdNZW1iZXIiKSwgc3RyaW5nTWVtYmVyVmFsdWUpOworICAg
ICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZt
LCAic3RyaW5nTWVtYmVyIiksIHN0cmluZ01lbWJlclZhbHVlKTsKICAgICB9CiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RTdHJpbmdpZmllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyLmNwcAkocmV2aXNpb24gMjQ5
MTI4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0
cmluZ2lmaWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODQsNyArODQsNyBAQCB0ZW1wbGF0ZTw+
IEpTVmFsdWUgSlNUZXN0U3RyaW5naWZpZXJDb25zCiB0ZW1wbGF0ZTw+IHZvaWQgSlNUZXN0U3Ry
aW5naWZpZXJDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMoVk0mIHZtLCBKU0RPTUds
b2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQogewogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVy
dHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3RTdHJpbmdpZmllcjo6cHJvdG90eXBlKHZtLCBnbG9i
YWxPYmplY3QpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgSlNDOjpQcm9w
ZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51
bSk7Ci0gICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZp
YWxTdHJpbmcoJnZtLCBTdHJpbmcoIlRlc3RTdHJpbmdpZmllciJfcykpLCBKU0M6OlByb3BlcnR5
QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsK
KyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0
cmluZyh2bSwgU3RyaW5nKCJUZXN0U3RyaW5naWZpZXIiX3MpKSwgSlNDOjpQcm9wZXJ0eUF0dHJp
YnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CiAgICAg
cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDApLCBKU0M6
OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRv
bnRFbnVtKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdFN0cmluZ2lmaWVyQW5vbnltb3VzT3BlcmF0aW9uLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZp
ZXJBbm9ueW1vdXNPcGVyYXRpb24uY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJBbm9ueW1vdXNP
cGVyYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NCw3ICs4NCw3IEBAIHRlbXBsYXRlPD4g
SlNWYWx1ZSBKU1Rlc3RTdHJpbmdpZmllckFub24KIHRlbXBsYXRlPD4gdm9pZCBKU1Rlc3RTdHJp
bmdpZmllckFub255bW91c09wZXJhdGlvbkNvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGll
cyhWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCiB7CiAgICAgcHV0RGly
ZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdFN0cmluZ2lmaWVyQW5v
bnltb3VzT3BlcmF0aW9uOjpwcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCksIEpTQzo6UHJvcGVy
dHlBdHRyaWJ1dGU6OkRvbnREZWxldGUgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25s
eSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKLSAgICBwdXREaXJlY3Qodm0s
IHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZygmdm0sIFN0cmluZygi
VGVzdFN0cmluZ2lmaWVyQW5vbnltb3VzT3BlcmF0aW9uIl9zKSksIEpTQzo6UHJvcGVydHlBdHRy
aWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOworICAg
IHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5n
KHZtLCBTdHJpbmcoIlRlc3RTdHJpbmdpZmllckFub255bW91c09wZXJhdGlvbiJfcykpLCBKU0M6
OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRv
bnRFbnVtKTsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNO
dW1iZXIoMCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0
eUF0dHJpYnV0ZTo6RG9udEVudW0pOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRpb24uY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJOYW1l
ZE9wZXJhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1LDcgKzg1LDcgQEAgdGVtcGxhdGU8
PiBKU1ZhbHVlIEpTVGVzdFN0cmluZ2lmaWVyTmFtZQogdGVtcGxhdGU8PiB2b2lkIEpTVGVzdFN0
cmluZ2lmaWVyTmFtZWRPcGVyYXRpb25Db25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMo
Vk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQogewogICAgIHB1dERpcmVj
dCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3RTdHJpbmdpZmllck5hbWVk
T3BlcmF0aW9uOjpwcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCksIEpTQzo6UHJvcGVydHlBdHRy
aWJ1dGU6OkRvbnREZWxldGUgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpT
Qzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKLSAgICBwdXREaXJlY3Qodm0sIHZtLnBy
b3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZygmdm0sIFN0cmluZygiVGVzdFN0
cmluZ2lmaWVyTmFtZWRPcGVyYXRpb24iX3MpKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVh
ZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CisgICAgcHV0RGlyZWN0
KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcodm0sIFN0cmlu
ZygiVGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRpb24iX3MpKSwgSlNDOjpQcm9wZXJ0eUF0dHJp
YnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CiAgICAg
cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDApLCBKU0M6
OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRv
bnRFbnVtKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uSW1wbGVtZW50ZWRBcy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmlu
Z2lmaWVyT3BlcmF0aW9uSW1wbGVtZW50ZWRBcy5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllck9w
ZXJhdGlvbkltcGxlbWVudGVkQXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NSw3ICs4NSw3IEBA
IHRlbXBsYXRlPD4gSlNWYWx1ZSBKU1Rlc3RTdHJpbmdpZmllck9wZXIKIHRlbXBsYXRlPD4gdm9p
ZCBKU1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbkltcGxlbWVudGVkQXNDb25zdHJ1Y3Rvcjo6aW5p
dGlhbGl6ZVByb3BlcnRpZXMoVk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0
KQogewogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rl
c3RTdHJpbmdpZmllck9wZXJhdGlvbkltcGxlbWVudGVkQXM6OnByb3RvdHlwZSh2bSwgZ2xvYmFs
T2JqZWN0KSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IEpTQzo6UHJvcGVy
dHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0p
OwotICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFs
U3RyaW5nKCZ2bSwgU3RyaW5nKCJUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25JbXBsZW1lbnRlZEFz
Il9zKSksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0
dHJpYnV0ZTo6RG9udEVudW0pOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+
bmFtZSwganNOb250cml2aWFsU3RyaW5nKHZtLCBTdHJpbmcoIlRlc3RTdHJpbmdpZmllck9wZXJh
dGlvbkltcGxlbWVudGVkQXMiX3MpKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkg
fCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CiAgICAgcHV0RGlyZWN0KHZtLCB2
bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDApLCBKU0M6OlByb3BlcnR5QXR0cmli
dXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKIH0KIApJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmlu
Z2lmaWVyT3BlcmF0aW9uTmFtZWRUb1N0cmluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9u
TmFtZWRUb1N0cmluZy5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9T
dHJpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NCw3ICs4NCw3IEBAIHRlbXBsYXRlPD4gSlNW
YWx1ZSBKU1Rlc3RTdHJpbmdpZmllck9wZXIKIHRlbXBsYXRlPD4gdm9pZCBKU1Rlc3RTdHJpbmdp
Zmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmdDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRp
ZXMoVk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQogewogICAgIHB1dERp
cmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3RTdHJpbmdpZmllck9w
ZXJhdGlvbk5hbWVkVG9TdHJpbmc6OnByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KSwgSlNDOjpQ
cm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJl
YWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwotICAgIHB1dERpcmVj
dCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKCZ2bSwgU3Ry
aW5nKCJUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25OYW1lZFRvU3RyaW5nIl9zKSksIEpTQzo6UHJv
cGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVu
dW0pOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2
aWFsU3RyaW5nKHZtLCBTdHJpbmcoIlRlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJp
bmciX3MpKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5
QXR0cmlidXRlOjpEb250RW51bSk7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVz
LT5sZW5ndGgsIGpzTnVtYmVyKDApLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8
IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKIH0KIApJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlB
dHRyaWJ1dGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllclJlYWRPbmx5QXR0cmlidXRlLmNwcAkocmV2aXNp
b24gMjQ5MTI4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04
Niw3ICs4Niw3IEBAIHRlbXBsYXRlPD4gSlNWYWx1ZSBKU1Rlc3RTdHJpbmdpZmllclJlYWQKIHRl
bXBsYXRlPD4gdm9pZCBKU1Rlc3RTdHJpbmdpZmllclJlYWRPbmx5QXR0cmlidXRlQ29uc3RydWN0
b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2Jh
bE9iamVjdCkKIHsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlw
ZSwgSlNUZXN0U3RyaW5naWZpZXJSZWFkT25seUF0dHJpYnV0ZTo6cHJvdG90eXBlKHZtLCBnbG9i
YWxPYmplY3QpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgSlNDOjpQcm9w
ZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51
bSk7Ci0gICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZp
YWxTdHJpbmcoJnZtLCBTdHJpbmcoIlRlc3RTdHJpbmdpZmllclJlYWRPbmx5QXR0cmlidXRlIl9z
KSksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJp
YnV0ZTo6RG9udEVudW0pOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFt
ZSwganNOb250cml2aWFsU3RyaW5nKHZtLCBTdHJpbmcoIlRlc3RTdHJpbmdpZmllclJlYWRPbmx5
QXR0cmlidXRlIl9zKSksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQ
cm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVy
dHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigwKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVh
ZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CiB9CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllclJl
YWRXcml0ZUF0dHJpYnV0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmlidXRlLmNw
cAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmlidXRlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtODcsNyArODcsNyBAQCB0ZW1wbGF0ZTw+IEpTVmFsdWUgSlNUZXN0U3RyaW5naWZp
ZXJSZWFkCiB0ZW1wbGF0ZTw+IHZvaWQgSlNUZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1
dGVDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMoVk0mIHZtLCBKU0RPTUdsb2JhbE9i
amVjdCYgZ2xvYmFsT2JqZWN0KQogewogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1l
cy0+cHJvdG90eXBlLCBKU1Rlc3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJpYnV0ZTo6cHJvdG90
eXBlKHZtLCBnbG9iYWxPYmplY3QpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRl
IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmli
dXRlOjpEb250RW51bSk7Ci0gICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1l
LCBqc05vbnRyaXZpYWxTdHJpbmcoJnZtLCBTdHJpbmcoIlRlc3RTdHJpbmdpZmllclJlYWRXcml0
ZUF0dHJpYnV0ZSJfcykpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6
UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3Bl
cnR5TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZyh2bSwgU3RyaW5nKCJUZXN0U3RyaW5n
aWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGUiX3MpKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVh
ZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CiAgICAgcHV0RGlyZWN0
KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDApLCBKU0M6OlByb3BlcnR5
QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsK
IH0KIApAQCAtMTk0LDYgKzE5NCw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdFN0cmluZ2lmaWVy
UmVhZFdyaXQKIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFN0cmluZ2lmaWVyUmVhZFdy
aXRlQXR0cmlidXRlSWRlbnRpZmllclNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RTdHJp
bmdpZmllclJlYWRXcml0ZUF0dHJpYnV0ZSYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhy
b3dTY29wZSYgdGhyb3dTY29wZSkKIHsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFw
cGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPihzdGF0
ZSwgdmFsdWUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdFR5cGVkZWZzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VHlwZWRlZnMuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VHlwZWRlZnMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzAsNyArMTcwLDcgQEAgdGVtcGxhdGU8PiBKU1ZhbHVl
IEpTVGVzdFR5cGVkZWZzQ29uc3RydQogdGVtcGxhdGU8PiB2b2lkIEpTVGVzdFR5cGVkZWZzQ29u
c3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3Qm
IGdsb2JhbE9iamVjdCkKIHsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnBy
b3RvdHlwZSwgSlNUZXN0VHlwZWRlZnM6OnByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KSwgSlND
OjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6
OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwotICAgIHB1dERp
cmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKCZ2bSwg
U3RyaW5nKCJUZXN0VHlwZWRlZnMiX3MpKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9u
bHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CisgICAgcHV0RGlyZWN0KHZt
LCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcodm0sIFN0cmluZygi
VGVzdFR5cGVkZWZzIl9zKSksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlND
OjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJv
cGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigzKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6
UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CiAgICAgcmVpZnlT
dGF0aWNQcm9wZXJ0aWVzKHZtLCBKU1Rlc3RUeXBlZGVmczo6aW5mbygpLCBKU1Rlc3RUeXBlZGVm
c0NvbnN0cnVjdG9yVGFibGVWYWx1ZXMsICp0aGlzKTsKIH0KQEAgLTI5Nyw2ICsyOTcsNyBAQCBF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1Vuc2lnbmVkTG9uCiAKIHN0YXRpYyBpbmxpbmUg
Ym9vbCBzZXRKU1Rlc3RUeXBlZGVmc1Vuc2lnbmVkTG9uZ0xvbmdBdHRyU2V0dGVyKEV4ZWNTdGF0
ZSYgc3RhdGUsIEpTVGVzdFR5cGVkZWZzJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlKQogeworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5V
U0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBw
ZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExVbnNpZ25lZExvbmdMb25n
PihzdGF0ZSwgdmFsdWUpOwpAQCAtMzI4LDYgKzMyOSw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVz
dFR5cGVkZWZzU2VyaWFsaXplZFMKIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFR5cGVk
ZWZzU2VyaWFsaXplZFNjcmlwdFZhbHVlU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdFR5
cGVkZWZzJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KQogeworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5h
dGl2ZVZhbHVlID0gY29udmVydDxJRExTZXJpYWxpemVkU2NyaXB0VmFsdWU8U2VyaWFsaXplZFNj
cmlwdFZhbHVlPj4oc3RhdGUsIHZhbHVlKTsKQEAgLTM3MSw2ICszNzMsNyBAQCBFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RUeXBlZGVmc0F0dHJpYnV0ZVdpCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRK
U1Rlc3RUeXBlZGVmc0F0dHJpYnV0ZVdpdGhDbGFtcFNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBK
U1Rlc3RUeXBlZGVmcyYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSkKIHsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAg
YXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMQ2xhbXBBZGFwdG9yPElETFVuc2lnbmVkTG9u
Z0xvbmc+PihzdGF0ZSwgdmFsdWUpOwpAQCAtNDAyLDYgKzQwNSw3IEBAIEVuY29kZWRKU1ZhbHVl
IGpzVGVzdFR5cGVkZWZzQXR0cmlidXRlV2kKIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVz
dFR5cGVkZWZzQXR0cmlidXRlV2l0aENsYW1wSW5UeXBlZGVmU2V0dGVyKEV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTVGVzdFR5cGVkZWZzJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKQogeworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsK
ICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExDbGFtcEFkYXB0b3I8SURMTG9uZz4+
KHN0YXRlLCB2YWx1ZSk7CkBAIC00MzMsNiArNDM3LDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0
VHlwZWRlZnNCdWZmZXJTb3VyYwogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0VHlwZWRl
ZnNCdWZmZXJTb3VyY2VBdHRyU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdFR5cGVkZWZz
JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewor
ICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwog
ICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZh
bHVlID0gY29udmVydDxJRExVbmlvbjxJRExBcnJheUJ1ZmZlclZpZXcsIElETEFycmF5QnVmZmVy
Pj4oc3RhdGUsIHZhbHVlKTsKQEAgLTQ2NCw2ICs0NjksNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RUeXBlZGVmc0RvbVRpbWVTdGFtCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RUeXBl
ZGVmc0RvbVRpbWVTdGFtcEF0dHJTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0VHlwZWRl
ZnMmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7
CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7
CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZl
VmFsdWUgPSBjb252ZXJ0PElETFVuc2lnbmVkTG9uZ0xvbmc+KHN0YXRlLCB2YWx1ZSk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvTlBfanNvYmplY3QuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JyaWRnZS9OUF9qc29iamVjdC5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysr
IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9OUF9qc29iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTcgQXBwbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDE5IEFwcGxlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTQ4Nyw3ICs0ODcsNyBAQCBib29sIF9OUE5fRW51bWVyYXRlKE5QUCwgTlBPYmplY3QqIG8s
IE5QCiAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKIAogICAg
ICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKLSAgICAg
ICAgUHJvcGVydHlOYW1lQXJyYXkgcHJvcGVydHlOYW1lcygmdm0sIFByb3BlcnR5TmFtZU1vZGU6
OlN0cmluZ3MsIFByaXZhdGVTeW1ib2xNb2RlOjpFeGNsdWRlKTsKKyAgICAgICAgUHJvcGVydHlO
YW1lQXJyYXkgcHJvcGVydHlOYW1lcyh2bSwgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5ncywgUHJp
dmF0ZVN5bWJvbE1vZGU6OkV4Y2x1ZGUpOwogCiAgICAgICAgIG9iai0+aW1wLT5tZXRob2RUYWJs
ZSh2bSktPmdldFByb3BlcnR5TmFtZXMob2JqLT5pbXAsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIEVu
dW1lcmF0aW9uTW9kZSgpKTsKICAgICAgICAgdW5zaWduZWQgc2l6ZSA9IHN0YXRpY19jYXN0PHVu
c2lnbmVkPihwcm9wZXJ0eU5hbWVzLnNpemUoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlk
Z2UvcnVudGltZV9hcnJheS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdl
L3J1bnRpbWVfYXJyYXkuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9i
cmlkZ2UvcnVudGltZV9hcnJheS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA4LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwMy0yMDE5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzcsNyAr
NzcsNyBAQCB2b2lkIFJ1bnRpbWVBcnJheTo6Z2V0T3duUHJvcGVydHlOYW1lcyhKCiAgICAgUnVu
dGltZUFycmF5KiB0aGlzT2JqZWN0ID0ganNDYXN0PFJ1bnRpbWVBcnJheSo+KG9iamVjdCk7CiAg
ICAgdW5zaWduZWQgbGVuZ3RoID0gdGhpc09iamVjdC0+Z2V0TGVuZ3RoKCk7CiAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQotICAgICAgICBwcm9wZXJ0eU5hbWVzLmFk
ZChJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGkpKTsKKyAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQo
SWRlbnRpZmllcjo6ZnJvbSh2bSwgaSkpOwogCiAgICAgaWYgKG1vZGUuaW5jbHVkZURvbnRFbnVt
UHJvcGVydGllcygpKQogICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZCh2bS5wcm9wZXJ0eU5hbWVz
LT5sZW5ndGgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL2MvY19pbnN0YW5jZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL2MvY19pbnN0YW5jZS5jcHAJKHJl
dmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9jL2NfaW5zdGFuY2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
MywgMjAwNiwgMjAxNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDAzLTIwMTkgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjk1LDcgKzI5NSw3IEBAIEpTVmFsdWUgQ0lu
c3RhbmNlOjpzdHJpbmdWYWx1ZShFeGVjU3RhdGUKICAgICAgICAgcmV0dXJuIHZhbHVlOwogCiAg
ICAgLy8gRmFsbGJhY2sgdG8gZGVmYXVsdCBpbXBsZW1lbnRhdGlvbi4KLSAgICByZXR1cm4ganNO
b250cml2aWFsU3RyaW5nKGV4ZWMsICJOUE9iamVjdCJfcyk7CisgICAgcmV0dXJuIGpzTm9udHJp
dmlhbFN0cmluZyhleGVjLT52bSgpLCAiTlBPYmplY3QiX3MpOwogfQogCiBKU1ZhbHVlIENJbnN0
YW5jZTo6bnVtYmVyVmFsdWUoRXhlY1N0YXRlKikgY29uc3QKQEAgLTM2NiwxMyArMzY2LDE0IEBA
IHZvaWQgQ0luc3RhbmNlOjpnZXRQcm9wZXJ0eU5hbWVzKEV4ZWNTdGEKICAgICAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGZvciAodWludDMy
X3QgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CiAgICAgICAgIElkZW50aWZpZXJSZXAqIGlkZW50
aWZpZXIgPSBzdGF0aWNfY2FzdDxJZGVudGlmaWVyUmVwKj4oaWRlbnRpZmllcnNbaV0pOwogCiAg
ICAgICAgIGlmIChpZGVudGlmaWVyLT5pc1N0cmluZygpKQogICAgICAgICAgICAgbmFtZUFycmF5
LmFkZChpZGVudGlmaWVyRnJvbU5QSWRlbnRpZmllcihleGVjLCBpZGVudGlmaWVyLT5zdHJpbmco
KSkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBuYW1lQXJyYXkuYWRkKElkZW50aWZpZXI6
OmZyb20oZXhlYywgaWRlbnRpZmllci0+bnVtYmVyKCkpKTsKKyAgICAgICAgICAgIG5hbWVBcnJh
eS5hZGQoSWRlbnRpZmllcjo6ZnJvbSh2bSwgaWRlbnRpZmllci0+bnVtYmVyKCkpKTsKICAgICB9
CiAKICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgcmVhbGx5IGNhbGwgTlBOX01lbUZyZWUgYnV0
IHRoYXQncyBpbiBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9jL2NfdXRpbGl0
eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL2MvY191dGlsaXR5LmNw
cAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL2MvY191dGlsaXR5
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDQsIDIwMDYsIDIwMTMgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwNC0yMDE5IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiAoYXBAbnlwb3AuY29tKQog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dApAQCAtMTQ2LDcgKzE0Niw4IEBAIFN0cmluZyBjb252ZXJ0TlBTdHJp
bmdUb1VURjE2KGNvbnN0IE5QU3QKIAogSWRlbnRpZmllciBpZGVudGlmaWVyRnJvbU5QSWRlbnRp
ZmllcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IE5QVVRGOCogbmFtZSkKIHsKLSAgICByZXR1cm4g
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCBjb252ZXJ0VVRGOFRvVVRGMTZXaXRoTGF0aW4x
RmFsbGJhY2sobmFtZSwgLTEpKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIHJldHVy
biBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBjb252ZXJ0VVRGOFRvVVRGMTZXaXRoTGF0aW4x
RmFsbGJhY2sobmFtZSwgLTEpKTsKIH0KIAogfSB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlk
Z2Uvb2JqYy9XZWJTY3JpcHRPYmplY3QubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YnJpZGdlL29iamMvV2ViU2NyaXB0T2JqZWN0Lm1tCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9icmlkZ2Uvb2JqYy9XZWJTY3JpcHRPYmplY3QubW0JKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0zNDcsNyArMzQ3LDcgQEAgLSAoaWQpY2FsbFdlYlNjcmlwdE1ldGhvZDooTlNTdHJpbmcg
KiluYQogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwog
ICAgIFVOVVNFRF9QQVJBTShzY29wZSk7CiAKLSAgICBKU0M6OkpTVmFsdWUgZnVuY3Rpb24gPSBb
c2VsZiBfaW1wXS0+Z2V0KGV4ZWMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgU3RyaW5n
KG5hbWUpKSk7CisgICAgSlNDOjpKU1ZhbHVlIGZ1bmN0aW9uID0gW3NlbGYgX2ltcF0tPmdldChl
eGVjLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBTdHJpbmcobmFtZSkpKTsKICAgICBDYWxs
RGF0YSBjYWxsRGF0YTsKICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGdldENhbGxEYXRhKHZtLCBm
dW5jdGlvbiwgY2FsbERhdGEpOwogICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZTo6Tm9uZSkK
QEAgLTQwNiw3ICs0MDYsNyBAQCAtICh2b2lkKXNldFZhbHVlOihpZCl2YWx1ZSBmb3JLZXk6KE5T
U3RyCiAKICAgICBKU09iamVjdCogb2JqZWN0ID0gSlNDOjpqc0R5bmFtaWNDYXN0PEpTT2JqZWN0
Kj4odm0sIFtzZWxmIF9pbXBdKTsKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChvYmplY3QpOwot
ICAgIG9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5wdXQob2JqZWN0LCBleGVjLCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKGV4ZWMsIFN0cmluZyhrZXkpKSwgY29udmVydE9iamNWYWx1ZVRvVmFsdWUo
ZXhlYywgJnZhbHVlLCBPYmpjT2JqZWN0VHlwZSwgW3NlbGYgX3Jvb3RPYmplY3RdKSwgc2xvdCk7
CisgICAgb2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPnB1dChvYmplY3QsIGV4ZWMsIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcodm0sIFN0cmluZyhrZXkpKSwgY29udmVydE9iamNWYWx1ZVRvVmFsdWUo
ZXhlYywgJnZhbHVlLCBPYmpjT2JqZWN0VHlwZSwgW3NlbGYgX3Jvb3RPYmplY3RdKSwgc2xvdCk7
CiAKICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7CiAgICAgICAgIGFkZEV4
Y2VwdGlvblRvQ29uc29sZShleGVjKTsKQEAgLTQzMiw3ICs0MzIsNyBAQCAtIChpZCl2YWx1ZUZv
cktleTooTlNTdHJpbmcgKilrZXkKICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hf
U0NPUEUodm0pOwogICAgICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2Jh
bEV4ZWMoKTsKIAotICAgICAgICBKU0M6OkpTVmFsdWUgcmVzdWx0ID0gW3NlbGYgX2ltcF0tPmdl
dChleGVjLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsIFN0cmluZyhrZXkpKSk7CisgICAg
ICAgIEpTQzo6SlNWYWx1ZSByZXN1bHQgPSBbc2VsZiBfaW1wXS0+Z2V0KGV4ZWMsIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcodm0sIFN0cmluZyhrZXkpKSk7CiAgICAgICAgIAogICAgICAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7CiAgICAgICAgICAgICBhZGRFeGNlcHRpb25U
b0NvbnNvbGUoZXhlYyk7CkBAIC00NjAsNyArNDYwLDcgQEAgLSAodm9pZClyZW1vdmVXZWJTY3Jp
cHRLZXk6KE5TU3RyaW5nICopawogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BF
KHZtKTsKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsK
IAotICAgIFtzZWxmIF9pbXBdLT5tZXRob2RUYWJsZSh2bSktPmRlbGV0ZVByb3BlcnR5KFtzZWxm
IF9pbXBdLCBleGVjLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsIFN0cmluZyhrZXkpKSk7
CisgICAgW3NlbGYgX2ltcF0tPm1ldGhvZFRhYmxlKHZtKS0+ZGVsZXRlUHJvcGVydHkoW3NlbGYg
X2ltcF0sIGV4ZWMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIFN0cmluZyhrZXkpKSk7CiAK
ICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7CiAgICAgICAgIGFkZEV4Y2Vw
dGlvblRvQ29uc29sZShleGVjKTsKQEAgLTQ3OSw3ICs0NzksNyBAQCAtIChCT09MKWhhc1dlYlNj
cmlwdEtleTooTlNTdHJpbmcgKilrZXkKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9T
Q09QRSh2bSk7CiAgICAgRXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVj
KCk7CiAKLSAgICBCT09MIHJlc3VsdCA9IFtzZWxmIF9pbXBdLT5oYXNQcm9wZXJ0eShleGVjLCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsIFN0cmluZyhrZXkpKSk7CisgICAgQk9PTCByZXN1
bHQgPSBbc2VsZiBfaW1wXS0+aGFzUHJvcGVydHkoZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zyh2bSwgU3RyaW5nKGtleSkpKTsKIAogICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpIHsKICAgICAgICAgYWRkRXhjZXB0aW9uVG9Db25zb2xlKGV4ZWMpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvYnJpZGdlL29iamMvb2JqY19ydW50aW1lLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JyaWRnZS9vYmpjL29iamNfcnVudGltZS5tbQkocmV2aXNpb24gMjQ5MTI4KQor
KysgU291cmNlL1dlYkNvcmUvYnJpZGdlL29iamMvb2JqY19ydW50aW1lLm1tCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwOCwgMjAx
MywgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDQtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5NSw4ICsyOTUsOSBAQCBib29sIE9iamNGYWxsYmFja09i
amVjdEltcDo6ZGVsZXRlUHJvcGVyCiAKIEpTVmFsdWUgT2JqY0ZhbGxiYWNrT2JqZWN0SW1wOjpk
ZWZhdWx0VmFsdWUoY29uc3QgSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcmVm
ZXJyZWRQcmltaXRpdmVUeXBlKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgY29u
c3QgT2JqY0ZhbGxiYWNrT2JqZWN0SW1wKiB0aGlzT2JqZWN0ID0ganNDYXN0PGNvbnN0IE9iamNG
YWxsYmFja09iamVjdEltcCo+KG9iamVjdCk7Ci0gICAgcmV0dXJuIHRoaXNPYmplY3QtPl9pbnN0
YW5jZS0+Z2V0VmFsdWVPZlVuZGVmaW5lZEZpZWxkKGV4ZWMsIElkZW50aWZpZXI6OmZyb21TdHJp
bmcoZXhlYywgdGhpc09iamVjdC0+bV9pdGVtKSk7CisgICAgcmV0dXJuIHRoaXNPYmplY3QtPl9p
bnN0YW5jZS0+Z2V0VmFsdWVPZlVuZGVmaW5lZEZpZWxkKGV4ZWMsIElkZW50aWZpZXI6OmZyb21T
dHJpbmcodm0sIHRoaXNPYmplY3QtPm1faXRlbSkpOwogfQogCiBib29sIE9iamNGYWxsYmFja09i
amVjdEltcDo6dG9Cb29sZWFuKEV4ZWNTdGF0ZSAqKSBjb25zdApJbmRleDogU291cmNlL1dlYkNv
cmUvYnJpZGdlL29iamMvb2JqY191dGlsaXR5Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JyaWRnZS9vYmpjL29iamNfdXRpbGl0eS5tbQkocmV2aXNpb24gMjQ5MTI4KQorKysgU291
cmNlL1dlYkNvcmUvYnJpZGdlL29iamMvb2JqY191dGlsaXR5Lm1tCSh3b3JraW5nIGNvcHkpCkBA
IC0xNTIsOCArMTUyLDkgQEAgT2JqY1ZhbHVlIGNvbnZlcnRWYWx1ZVRvT2JqY1ZhbHVlKEV4ZWNT
dAogCiBKU1ZhbHVlIGNvbnZlcnROU1N0cmluZ1RvU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgTlNT
dHJpbmcgKm5zc3RyaW5nKQogewotICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwotICAgIEpT
VmFsdWUgYVZhbHVlID0ganNTdHJpbmcoZXhlYywgU3RyaW5nKG5zc3RyaW5nKSk7CisgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgSlNWYWx1
ZSBhVmFsdWUgPSBqc1N0cmluZyh2bSwgU3RyaW5nKG5zc3RyaW5nKSk7CiAgICAgcmV0dXJuIGFW
YWx1ZTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVu
dEV4dGVuc2lvblBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY29udGVu
dGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvblBhcnNlci5jcHAJKHJldmlzaW9uIDI0OTEyOCkK
KysrIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25QYXJz
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNC0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTMxLDExICsxMzEsMTEgQEAgc3RhdGljIEV4cGVj
dGVkPFRyaWdnZXIsIHN0ZDo6ZXJyb3JfY29kZQogICAgIFZNJiB2bSA9IGV4ZWMudm0oKTsKICAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAgICBjb25zdCBKU1Zh
bHVlIHRyaWdnZXJPYmplY3QgPSBydWxlT2JqZWN0LmdldCgmZXhlYywgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZygmZXhlYywgInRyaWdnZXIiKSk7CisgICAgY29uc3QgSlNWYWx1ZSB0cmlnZ2VyT2Jq
ZWN0ID0gcnVsZU9iamVjdC5nZXQoJmV4ZWMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJ0
cmlnZ2VyIikpOwogICAgIGlmICghdHJpZ2dlck9iamVjdCB8fCBzY29wZS5leGNlcHRpb24oKSB8
fCAhdHJpZ2dlck9iamVjdC5pc09iamVjdCgpKQogICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0
ZWQoQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OSW52YWxpZFRyaWdnZXIpOwogICAgIAotICAg
IGNvbnN0IEpTVmFsdWUgdXJsRmlsdGVyT2JqZWN0ID0gdHJpZ2dlck9iamVjdC5nZXQoJmV4ZWMs
IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJmV4ZWMsICJ1cmwtZmlsdGVyIikpOworICAgIGNvbnN0
IEpTVmFsdWUgdXJsRmlsdGVyT2JqZWN0ID0gdHJpZ2dlck9iamVjdC5nZXQoJmV4ZWMsIElkZW50
aWZpZXI6OmZyb21TdHJpbmcodm0sICJ1cmwtZmlsdGVyIikpOwogICAgIGlmICghdXJsRmlsdGVy
T2JqZWN0IHx8IHNjb3BlLmV4Y2VwdGlvbigpIHx8ICF1cmxGaWx0ZXJPYmplY3QuaXNTdHJpbmco
KSkKICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKENvbnRlbnRFeHRlbnNpb25FcnJvcjo6
SlNPTkludmFsaWRVUkxGaWx0ZXJJblRyaWdnZXIpOwogCkBAIC0xNDYsMTUgKzE0NiwxNSBAQCBz
dGF0aWMgRXhwZWN0ZWQ8VHJpZ2dlciwgc3RkOjplcnJvcl9jb2RlCiAgICAgVHJpZ2dlciB0cmln
Z2VyOwogICAgIHRyaWdnZXIudXJsRmlsdGVyID0gdXJsRmlsdGVyOwogCi0gICAgY29uc3QgSlNW
YWx1ZSB1cmxGaWx0ZXJDYXNlVmFsdWUgPSB0cmlnZ2VyT2JqZWN0LmdldCgmZXhlYywgSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZygmZXhlYywgInVybC1maWx0ZXItaXMtY2FzZS1zZW5zaXRpdmUiKSk7
CisgICAgY29uc3QgSlNWYWx1ZSB1cmxGaWx0ZXJDYXNlVmFsdWUgPSB0cmlnZ2VyT2JqZWN0Lmdl
dCgmZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInVybC1maWx0ZXItaXMtY2FzZS1z
ZW5zaXRpdmUiKSk7CiAgICAgaWYgKHVybEZpbHRlckNhc2VWYWx1ZSAmJiAhc2NvcGUuZXhjZXB0
aW9uKCkgJiYgdXJsRmlsdGVyQ2FzZVZhbHVlLmlzQm9vbGVhbigpKQogICAgICAgICB0cmlnZ2Vy
LnVybEZpbHRlcklzQ2FzZVNlbnNpdGl2ZSA9IHVybEZpbHRlckNhc2VWYWx1ZS50b0Jvb2xlYW4o
JmV4ZWMpOwogCi0gICAgY29uc3QgSlNWYWx1ZSB0b3BVUkxGaWx0ZXJDYXNlVmFsdWUgPSB0cmln
Z2VyT2JqZWN0LmdldCgmZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmZXhlYywgInRvcC11
cmwtZmlsdGVyLWlzLWNhc2Utc2Vuc2l0aXZlIikpOworICAgIGNvbnN0IEpTVmFsdWUgdG9wVVJM
RmlsdGVyQ2FzZVZhbHVlID0gdHJpZ2dlck9iamVjdC5nZXQoJmV4ZWMsIElkZW50aWZpZXI6OmZy
b21TdHJpbmcodm0sICJ0b3AtdXJsLWZpbHRlci1pcy1jYXNlLXNlbnNpdGl2ZSIpKTsKICAgICBp
ZiAodG9wVVJMRmlsdGVyQ2FzZVZhbHVlICYmICFzY29wZS5leGNlcHRpb24oKSAmJiB0b3BVUkxG
aWx0ZXJDYXNlVmFsdWUuaXNCb29sZWFuKCkpCiAgICAgICAgIHRyaWdnZXIudG9wVVJMQ29uZGl0
aW9uSXNDYXNlU2Vuc2l0aXZlID0gdG9wVVJMRmlsdGVyQ2FzZVZhbHVlLnRvQm9vbGVhbigmZXhl
Yyk7CiAKLSAgICBjb25zdCBKU1ZhbHVlIHJlc291cmNlVHlwZVZhbHVlID0gdHJpZ2dlck9iamVj
dC5nZXQoJmV4ZWMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJmV4ZWMsICJyZXNvdXJjZS10eXBl
IikpOworICAgIGNvbnN0IEpTVmFsdWUgcmVzb3VyY2VUeXBlVmFsdWUgPSB0cmlnZ2VyT2JqZWN0
LmdldCgmZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInJlc291cmNlLXR5cGUiKSk7
CiAgICAgaWYgKCFzY29wZS5leGNlcHRpb24oKSAmJiByZXNvdXJjZVR5cGVWYWx1ZS5pc09iamVj
dCgpKSB7CiAgICAgICAgIGF1dG8gdHlwZUZsYWdzRXJyb3IgPSBnZXRUeXBlRmxhZ3MoZXhlYywg
cmVzb3VyY2VUeXBlVmFsdWUsIHRyaWdnZXIuZmxhZ3MsIHJlYWRSZXNvdXJjZVR5cGUpOwogICAg
ICAgICBpZiAodHlwZUZsYWdzRXJyb3IpCkBAIC0xNjIsNyArMTYyLDcgQEAgc3RhdGljIEV4cGVj
dGVkPFRyaWdnZXIsIHN0ZDo6ZXJyb3JfY29kZQogICAgIH0gZWxzZSBpZiAoIXJlc291cmNlVHlw
ZVZhbHVlLmlzVW5kZWZpbmVkKCkpCiAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChDb250
ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05JbnZhbGlkVHJpZ2dlckZsYWdzQXJyYXkpOwogCi0gICAg
Y29uc3QgSlNWYWx1ZSBsb2FkVHlwZVZhbHVlID0gdHJpZ2dlck9iamVjdC5nZXQoJmV4ZWMsIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcoJmV4ZWMsICJsb2FkLXR5cGUiKSk7CisgICAgY29uc3QgSlNW
YWx1ZSBsb2FkVHlwZVZhbHVlID0gdHJpZ2dlck9iamVjdC5nZXQoJmV4ZWMsIElkZW50aWZpZXI6
OmZyb21TdHJpbmcodm0sICJsb2FkLXR5cGUiKSk7CiAgICAgaWYgKCFzY29wZS5leGNlcHRpb24o
KSAmJiBsb2FkVHlwZVZhbHVlLmlzT2JqZWN0KCkpIHsKICAgICAgICAgYXV0byB0eXBlRmxhZ3NF
cnJvciA9IGdldFR5cGVGbGFncyhleGVjLCBsb2FkVHlwZVZhbHVlLCB0cmlnZ2VyLmZsYWdzLCBy
ZWFkTG9hZFR5cGUpOwogICAgICAgICBpZiAodHlwZUZsYWdzRXJyb3IpCkBAIC0xNzAsNyArMTcw
LDcgQEAgc3RhdGljIEV4cGVjdGVkPFRyaWdnZXIsIHN0ZDo6ZXJyb3JfY29kZQogICAgIH0gZWxz
ZSBpZiAoIWxvYWRUeXBlVmFsdWUuaXNVbmRlZmluZWQoKSkKICAgICAgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKENvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTkludmFsaWRUcmlnZ2VyRmxhZ3NB
cnJheSk7CiAKLSAgICBjb25zdCBKU1ZhbHVlIGlmRG9tYWluVmFsdWUgPSB0cmlnZ2VyT2JqZWN0
LmdldCgmZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmZXhlYywgImlmLWRvbWFpbiIpKTsK
KyAgICBjb25zdCBKU1ZhbHVlIGlmRG9tYWluVmFsdWUgPSB0cmlnZ2VyT2JqZWN0LmdldCgmZXhl
YywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImlmLWRvbWFpbiIpKTsKICAgICBpZiAoIXNj
b3BlLmV4Y2VwdGlvbigpICYmIGlmRG9tYWluVmFsdWUuaXNPYmplY3QoKSkgewogICAgICAgICBh
dXRvIGlmRG9tYWluID0gZ2V0RG9tYWluTGlzdChleGVjLCBhc09iamVjdChpZkRvbWFpblZhbHVl
KSk7CiAgICAgICAgIGlmICghaWZEb21haW4uaGFzX3ZhbHVlKCkpCkBAIC0xODMsNyArMTgzLDcg
QEAgc3RhdGljIEV4cGVjdGVkPFRyaWdnZXIsIHN0ZDo6ZXJyb3JfY29kZQogICAgIH0gZWxzZSBp
ZiAoIWlmRG9tYWluVmFsdWUuaXNVbmRlZmluZWQoKSkKICAgICAgICAgcmV0dXJuIG1ha2VVbmV4
cGVjdGVkKENvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTkludmFsaWRDb25kaXRpb25MaXN0KTsK
IAotICAgIGNvbnN0IEpTVmFsdWUgdW5sZXNzRG9tYWluVmFsdWUgPSB0cmlnZ2VyT2JqZWN0Lmdl
dCgmZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmZXhlYywgInVubGVzcy1kb21haW4iKSk7
CisgICAgY29uc3QgSlNWYWx1ZSB1bmxlc3NEb21haW5WYWx1ZSA9IHRyaWdnZXJPYmplY3QuZ2V0
KCZleGVjLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAidW5sZXNzLWRvbWFpbiIpKTsKICAg
ICBpZiAoIXNjb3BlLmV4Y2VwdGlvbigpICYmIHVubGVzc0RvbWFpblZhbHVlLmlzT2JqZWN0KCkp
IHsKICAgICAgICAgaWYgKHRyaWdnZXIuY29uZGl0aW9uVHlwZSAhPSBUcmlnZ2VyOjpDb25kaXRp
b25UeXBlOjpOb25lKQogICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKENvbnRlbnRF
eHRlbnNpb25FcnJvcjo6SlNPTk11bHRpcGxlQ29uZGl0aW9ucyk7CkBAIC0xOTcsNyArMTk3LDcg
QEAgc3RhdGljIEV4cGVjdGVkPFRyaWdnZXIsIHN0ZDo6ZXJyb3JfY29kZQogICAgIH0gZWxzZSBp
ZiAoIXVubGVzc0RvbWFpblZhbHVlLmlzVW5kZWZpbmVkKCkpCiAgICAgICAgIHJldHVybiBtYWtl
VW5leHBlY3RlZChDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05JbnZhbGlkQ29uZGl0aW9uTGlz
dCk7CiAKLSAgICBjb25zdCBKU1ZhbHVlIGlmVG9wVVJMVmFsdWUgPSB0cmlnZ2VyT2JqZWN0Lmdl
dCgmZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmZXhlYywgImlmLXRvcC11cmwiKSk7Cisg
ICAgY29uc3QgSlNWYWx1ZSBpZlRvcFVSTFZhbHVlID0gdHJpZ2dlck9iamVjdC5nZXQoJmV4ZWMs
IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJpZi10b3AtdXJsIikpOwogICAgIGlmICghc2Nv
cGUuZXhjZXB0aW9uKCkgJiYgaWZUb3BVUkxWYWx1ZS5pc09iamVjdCgpKSB7CiAgICAgICAgIGlm
ICh0cmlnZ2VyLmNvbmRpdGlvblR5cGUgIT0gVHJpZ2dlcjo6Q29uZGl0aW9uVHlwZTo6Tm9uZSkK
ICAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChDb250ZW50RXh0ZW5zaW9uRXJyb3I6
OkpTT05NdWx0aXBsZUNvbmRpdGlvbnMpOwpAQCAtMjExLDcgKzIxMSw3IEBAIHN0YXRpYyBFeHBl
Y3RlZDxUcmlnZ2VyLCBzdGQ6OmVycm9yX2NvZGUKICAgICB9IGVsc2UgaWYgKCFpZlRvcFVSTFZh
bHVlLmlzVW5kZWZpbmVkKCkpCiAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChDb250ZW50
RXh0ZW5zaW9uRXJyb3I6OkpTT05JbnZhbGlkQ29uZGl0aW9uTGlzdCk7CiAKLSAgICBjb25zdCBK
U1ZhbHVlIHVubGVzc1RvcFVSTFZhbHVlID0gdHJpZ2dlck9iamVjdC5nZXQoJmV4ZWMsIElkZW50
aWZpZXI6OmZyb21TdHJpbmcoJmV4ZWMsICJ1bmxlc3MtdG9wLXVybCIpKTsKKyAgICBjb25zdCBK
U1ZhbHVlIHVubGVzc1RvcFVSTFZhbHVlID0gdHJpZ2dlck9iamVjdC5nZXQoJmV4ZWMsIElkZW50
aWZpZXI6OmZyb21TdHJpbmcodm0sICJ1bmxlc3MtdG9wLXVybCIpKTsKICAgICBpZiAoIXNjb3Bl
LmV4Y2VwdGlvbigpICYmIHVubGVzc1RvcFVSTFZhbHVlLmlzT2JqZWN0KCkpIHsKICAgICAgICAg
aWYgKHRyaWdnZXIuY29uZGl0aW9uVHlwZSAhPSBUcmlnZ2VyOjpDb25kaXRpb25UeXBlOjpOb25l
KQogICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKENvbnRlbnRFeHRlbnNpb25FcnJv
cjo6SlNPTk11bHRpcGxlQ29uZGl0aW9ucyk7CkBAIC0yNDUsMTEgKzI0NSwxMSBAQCBzdGF0aWMg
RXhwZWN0ZWQ8T3B0aW9uYWw8QWN0aW9uPiwgc3RkOjplCiAgICAgVk0mIHZtID0gZXhlYy52bSgp
OwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIGNvbnN0
IEpTVmFsdWUgYWN0aW9uT2JqZWN0ID0gcnVsZU9iamVjdC5nZXQoJmV4ZWMsIElkZW50aWZpZXI6
OmZyb21TdHJpbmcoJmV4ZWMsICJhY3Rpb24iKSk7CisgICAgY29uc3QgSlNWYWx1ZSBhY3Rpb25P
YmplY3QgPSBydWxlT2JqZWN0LmdldCgmZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwg
ImFjdGlvbiIpKTsKICAgICBpZiAoc2NvcGUuZXhjZXB0aW9uKCkgfHwgIWFjdGlvbk9iamVjdC5p
c09iamVjdCgpKQogICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoQ29udGVudEV4dGVuc2lv
bkVycm9yOjpKU09OSW52YWxpZEFjdGlvbik7CiAKLSAgICBjb25zdCBKU1ZhbHVlIHR5cGVPYmpl
Y3QgPSBhY3Rpb25PYmplY3QuZ2V0KCZleGVjLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZleGVj
LCAidHlwZSIpKTsKKyAgICBjb25zdCBKU1ZhbHVlIHR5cGVPYmplY3QgPSBhY3Rpb25PYmplY3Qu
Z2V0KCZleGVjLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAidHlwZSIpKTsKICAgICBpZiAo
c2NvcGUuZXhjZXB0aW9uKCkgfHwgIXR5cGVPYmplY3QuaXNTdHJpbmcoKSkKICAgICAgICAgcmV0
dXJuIG1ha2VVbmV4cGVjdGVkKENvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTkludmFsaWRBY3Rp
b25UeXBlKTsKIApAQCAtMjYyLDcgKzI2Miw3IEBAIHN0YXRpYyBFeHBlY3RlZDxPcHRpb25hbDxB
Y3Rpb24+LCBzdGQ6OmUKICAgICBpZiAoYWN0aW9uVHlwZSA9PSAiYmxvY2stY29va2llcyIpCiAg
ICAgICAgIHJldHVybiB7IEFjdGlvbihBY3Rpb25UeXBlOjpCbG9ja0Nvb2tpZXMpIH07CiAgICAg
aWYgKGFjdGlvblR5cGUgPT0gImNzcy1kaXNwbGF5LW5vbmUiKSB7Ci0gICAgICAgIEpTVmFsdWUg
c2VsZWN0b3IgPSBhY3Rpb25PYmplY3QuZ2V0KCZleGVjLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KCZleGVjLCAic2VsZWN0b3IiKSk7CisgICAgICAgIEpTVmFsdWUgc2VsZWN0b3IgPSBhY3Rpb25P
YmplY3QuZ2V0KCZleGVjLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAic2VsZWN0b3IiKSk7
CiAgICAgICAgIGlmIChzY29wZS5leGNlcHRpb24oKSB8fCAhc2VsZWN0b3IuaXNTdHJpbmcoKSkK
ICAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChDb250ZW50RXh0ZW5zaW9uRXJyb3I6
OkpTT05JbnZhbGlkQ1NTRGlzcGxheU5vbmVBY3Rpb25UeXBlKTsKIApAQCAtMjc2LDcgKzI3Niw3
IEBAIHN0YXRpYyBFeHBlY3RlZDxPcHRpb25hbDxBY3Rpb24+LCBzdGQ6OmUKICAgICBpZiAoYWN0
aW9uVHlwZSA9PSAibWFrZS1odHRwcyIpCiAgICAgICAgIHJldHVybiB7IEFjdGlvbihBY3Rpb25U
eXBlOjpNYWtlSFRUUFMpIH07CiAgICAgaWYgKGFjdGlvblR5cGUgPT0gIm5vdGlmeSIpIHsKLSAg
ICAgICAgSlNWYWx1ZSBub3RpZmljYXRpb24gPSBhY3Rpb25PYmplY3QuZ2V0KCZleGVjLCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKCZleGVjLCAibm90aWZpY2F0aW9uIikpOworICAgICAgICBKU1Zh
bHVlIG5vdGlmaWNhdGlvbiA9IGFjdGlvbk9iamVjdC5nZXQoJmV4ZWMsIElkZW50aWZpZXI6OmZy
b21TdHJpbmcodm0sICJub3RpZmljYXRpb24iKSk7CiAgICAgICAgIGlmIChzY29wZS5leGNlcHRp
b24oKSB8fCAhbm90aWZpY2F0aW9uLmlzU3RyaW5nKCkpCiAgICAgICAgICAgICByZXR1cm4gbWFr
ZVVuZXhwZWN0ZWQoQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OSW52YWxpZE5vdGlmaWNhdGlv
bik7CiAgICAgICAgIHJldHVybiB7IEFjdGlvbihBY3Rpb25UeXBlOjpOb3RpZnksIGFzU3RyaW5n
KG5vdGlmaWNhdGlvbiktPnZhbHVlKCZleGVjKSkgfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Ny
eXB0by9TdWJ0bGVDcnlwdG8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0
by9TdWJ0bGVDcnlwdG8uY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9j
cnlwdG8vU3VidGxlQ3J5cHRvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC05NSw3ICs5NSw3IEBAIHN0YXRp
YyBFeGNlcHRpb25PcjxzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHQKIAogICAgIGlmIChXVEY6OmhvbGRz
X2FsdGVybmF0aXZlPFN0cmluZz4oYWxnb3JpdGhtSWRlbnRpZmllcikpIHsKICAgICAgICAgYXV0
byBuZXdQYXJhbXMgPSBTdHJvbmc8SlNPYmplY3Q+KHZtLCBjb25zdHJ1Y3RFbXB0eU9iamVjdCgm
c3RhdGUpKTsKLSAgICAgICAgbmV3UGFyYW1zLT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZy
b21TdHJpbmcoJnZtLCAibmFtZSIpLCBqc1N0cmluZygmc3RhdGUsIFdURjo6Z2V0PFN0cmluZz4o
YWxnb3JpdGhtSWRlbnRpZmllcikpKTsKKyAgICAgICAgbmV3UGFyYW1zLT5wdXREaXJlY3Qodm0s
IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJuYW1lIiksIGpzU3RyaW5nKHZtLCBXVEY6Omdl
dDxTdHJpbmc+KGFsZ29yaXRobUlkZW50aWZpZXIpKSk7CiAgICAgICAgIAogICAgICAgICByZXR1
cm4gbm9ybWFsaXplQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyhzdGF0ZSwgbmV3UGFyYW1zLCBv
cGVyYXRpb24pOwogICAgIH0KQEAgLTI0MSwxMSArMjQxLDExIEBAIHN0YXRpYyBFeGNlcHRpb25P
cjxzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHQKICAgICAgICAgc3dpdGNoICgqaWRlbnRpZmllcikgewog
ICAgICAgICBjYXNlIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OkVDREg6IHsKICAgICAgICAg
ICAgIC8vIFJlbW92ZSB0aGlzIGhhY2sgb25jZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTY5MzMzIGlzIGZpeGVkLgotICAgICAgICAgICAgSlNWYWx1ZSBuYW1lVmFs
dWUgPSB2YWx1ZS5nZXQoKS0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3Rh
dGUsICJuYW1lIikpOwotICAgICAgICAgICAgSlNWYWx1ZSBwdWJsaWNWYWx1ZSA9IHZhbHVlLmdl
dCgpLT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgInB1YmxpYyIp
KTsKKyAgICAgICAgICAgIEpTVmFsdWUgbmFtZVZhbHVlID0gdmFsdWUuZ2V0KCktPmdldCgmc3Rh
dGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJuYW1lIikpOworICAgICAgICAgICAgSlNW
YWx1ZSBwdWJsaWNWYWx1ZSA9IHZhbHVlLmdldCgpLT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCAicHVibGljIikpOwogICAgICAgICAgICAgSlNPYmplY3QqIG5ld1ZhbHVl
ID0gY29uc3RydWN0RW1wdHlPYmplY3QoJnN0YXRlKTsKLSAgICAgICAgICAgIG5ld1ZhbHVlLT5w
dXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAibmFtZSIpLCBuYW1lVmFs
dWUpOwotICAgICAgICAgICAgbmV3VmFsdWUtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZygmdm0sICJwdWJsaWNLZXkiKSwgcHVibGljVmFsdWUpOworICAgICAgICAgICAgbmV3
VmFsdWUtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIm5hbWUiKSwg
bmFtZVZhbHVlKTsKKyAgICAgICAgICAgIG5ld1ZhbHVlLT5wdXREaXJlY3Qodm0sIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcodm0sICJwdWJsaWNLZXkiKSwgcHVibGljVmFsdWUpOwogCiAgICAgICAg
ICAgICBhdXRvIHBhcmFtcyA9IGNvbnZlcnREaWN0aW9uYXJ5PENyeXB0b0FsZ29yaXRobUVjZGhL
ZXlEZXJpdmVQYXJhbXM+KHN0YXRlLCBuZXdWYWx1ZSk7CiAgICAgICAgICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCBFeGNlcHRpb24geyBFeGlzdGluZ0V4Y2VwdGlvbkVycm9yIH0pOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvZG9taml0L0RPTUpJVEhlbHBlcnMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9kb21qaXQvRE9NSklUSGVscGVycy5oCShyZXZpc2lvbiAyNDkxMjgp
CisrKyBTb3VyY2UvV2ViQ29yZS9kb21qaXQvRE9NSklUSGVscGVycy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFs
bCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMu
IEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTU4LDcgKzU4LDcgQEAgSlNDOjpFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIHRvV3JhcAog
ICAgIEFTU0VSVChleGVjKTsKICAgICBBU1NFUlQocmVzdWx0KTsKICAgICBBU1NFUlQoZ2xvYmFs
T2JqZWN0KTsKLSAgICBKU0M6Ok5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJmV4ZWMtPnZt
KCksIGV4ZWMpOworICAgIEpTQzo6TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcihnbG9iYWxP
YmplY3QtPnZtKCksIGV4ZWMpOwogICAgIHJldHVybiBKU0M6OkpTVmFsdWU6OmVuY29kZSh0b0pT
KGV4ZWMsIHN0YXRpY19jYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSwgKnN0
YXRpY19jYXN0PFdyYXBwZWROb2RlKj4ocmVzdWx0KSkpOwogfQogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQz
NzYsNyArNDM3Niw3IEBAIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udHJvbGxlckpTVmFsdWUoSlMK
ICAgICBpZiAoIW1lZGlhSlNXcmFwcGVyT2JqZWN0KQogICAgICAgICByZXR1cm4gSlNDOjpqc051
bGwoKTsKIAotICAgIEpTQzo6SWRlbnRpZmllciBjb250cm9sc0hvc3QgPSBKU0M6OklkZW50aWZp
ZXI6OmZyb21TdHJpbmcoJnZtLCAiY29udHJvbHNIb3N0Iik7CisgICAgSlNDOjpJZGVudGlmaWVy
IGNvbnRyb2xzSG9zdCA9IEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImNvbnRyb2xz
SG9zdCIpOwogICAgIEpTQzo6SlNWYWx1ZSBjb250cm9sc0hvc3RKU1dyYXBwZXIgPSBtZWRpYUpT
V3JhcHBlck9iamVjdC0+Z2V0KCZleGVjLCBjb250cm9sc0hvc3QpOwogICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIEpTQzo6anNOdWxsKCkpOwogCkBAIC00Mzg0LDcgKzQzODQsNyBAQCBz
dGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnRyb2xsZXJKU1ZhbHVlKEpTCiAgICAgaWYgKCFjb250cm9s
c0hvc3RKU1dyYXBwZXJPYmplY3QpCiAgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOwogCi0g
ICAgSlNDOjpJZGVudGlmaWVyIGNvbnRyb2xsZXJJRCA9IEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0
cmluZygmdm0sICJjb250cm9sbGVyIik7CisgICAgSlNDOjpJZGVudGlmaWVyIGNvbnRyb2xsZXJJ
RCA9IEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImNvbnRyb2xsZXIiKTsKICAgICBK
U0M6OkpTVmFsdWUgY29udHJvbGxlckpTV3JhcHBlciA9IGNvbnRyb2xzSG9zdEpTV3JhcHBlck9i
amVjdC0+Z2V0KCZleGVjLCBjb250cm9sbGVySUQpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIEpTQzo6anNOdWxsKCkpOwogCkBAIC00NDQ3LDcgKzQ0NDcsNyBAQCB2b2lkIEhUTUxN
ZWRpYUVsZW1lbnQ6OnVwZGF0ZUNhcHRpb25Db250CiAgICAgICAgIC8vICAgICBOb25lCiAgICAg
ICAgIC8vIFJldHVybiB2YWx1ZToKICAgICAgICAgLy8gICAgIE5vbmUKLSAgICAgICAgYXV0byBt
ZXRob2RWYWx1ZSA9IGNvbnRyb2xsZXJPYmplY3QtPmdldCgmZXhlYywgSlNDOjpJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKCZleGVjLCAidXBkYXRlQ2FwdGlvbkNvbnRhaW5lciIpKTsKKyAgICAgICAg
YXV0byBtZXRob2RWYWx1ZSA9IGNvbnRyb2xsZXJPYmplY3QtPmdldCgmZXhlYywgSlNDOjpJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAidXBkYXRlQ2FwdGlvbkNvbnRhaW5lciIpKTsKICAgICAg
ICAgYXV0byogbWV0aG9kT2JqZWN0ID0gSlNDOjpqc0R5bmFtaWNDYXN0PEpTQzo6SlNPYmplY3Qq
Pih2bSwgbWV0aG9kVmFsdWUpOwogICAgICAgICBpZiAoIW1ldGhvZE9iamVjdCkKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKQEAgLTcyNzEsNyArNzI3MSw3IEBAIGJvb2wgSFRNTE1lZGlhRWxl
bWVudDo6ZW5zdXJlTWVkaWFDb250cm8KICAgICAgICAgYXV0byYgdm0gPSBnbG9iYWxPYmplY3Qu
dm0oKTsKICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogCi0g
ICAgICAgIGF1dG8gZnVuY3Rpb25WYWx1ZSA9IGdsb2JhbE9iamVjdC5nZXQoJmV4ZWMsIEpTQzo6
SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmZXhlYywgImNyZWF0ZUNvbnRyb2xzIikpOworICAgICAg
ICBhdXRvIGZ1bmN0aW9uVmFsdWUgPSBnbG9iYWxPYmplY3QuZ2V0KCZleGVjLCBKU0M6OklkZW50
aWZpZXI6OmZyb21TdHJpbmcodm0sICJjcmVhdGVDb250cm9scyIpKTsKICAgICAgICAgaWYgKGZ1
bmN0aW9uVmFsdWUuaXNGdW5jdGlvbih2bSkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKIApA
QCAtNzMyMyw3ICs3MzIzLDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpzZXRDb250cm9sbGVy
SlNQcgogICAgICAgICBpZiAoIWNvbnRyb2xsZXJPYmplY3QpCiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICAgICAgY29udHJvbGxlck9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5wdXQo
Y29udHJvbGxlck9iamVjdCwgJmV4ZWMsIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmZXhl
YywgcHJvcGVydHlOYW1lKSwgcHJvcGVydHlWYWx1ZSwgcHJvcGVydHlTbG90KTsKKyAgICAgICAg
Y29udHJvbGxlck9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5wdXQoY29udHJvbGxlck9iamVjdCwg
JmV4ZWMsIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcHJvcGVydHlOYW1lKSwgcHJv
cGVydHlWYWx1ZSwgcHJvcGVydHlTbG90KTsKIAogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9
KTsKQEAgLTczNDksNyArNzM0OSw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6ZGlkQWRkVXNl
ckFnZW50U2gKICAgICAgICAgLy8gUmV0dXJuIHZhbHVlOgogICAgICAgICAvLyAgICAgQSByZWZl
cmVuY2UgdG8gdGhlIGNyZWF0ZWQgbWVkaWEgY29udHJvbGxlciBpbnN0YW5jZS4KIAotICAgICAg
ICBhdXRvIGZ1bmN0aW9uVmFsdWUgPSBnbG9iYWxPYmplY3QuZ2V0KCZleGVjLCBKU0M6OklkZW50
aWZpZXI6OmZyb21TdHJpbmcoJmV4ZWMsICJjcmVhdGVDb250cm9scyIpKTsKKyAgICAgICAgYXV0
byBmdW5jdGlvblZhbHVlID0gZ2xvYmFsT2JqZWN0LmdldCgmZXhlYywgSlNDOjpJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKHZtLCAiY3JlYXRlQ29udHJvbHMiKSk7CiAgICAgICAgIGlmIChmdW5jdGlv
blZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAK
QEAgLTczODEsMjEgKzczODEsMjEgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpkaWRBZGRVc2Vy
QWdlbnRTaAogICAgICAgICAvLyBDb25uZWN0IHRoZSBNZWRpYSwgTWVkaWFDb250cm9sbGVySG9z
dCwgYW5kIENvbnRyb2xsZXIgc28gdGhlIEdDIGtub3dzIGFib3V0IHRoZWlyIHJlbGF0aW9uc2hp
cAogICAgICAgICBhdXRvKiBtZWRpYUpTV3JhcHBlck9iamVjdCA9IG1lZGlhSlNXcmFwcGVyLnRv
T2JqZWN0KCZleGVjKTsKICAgICAgICAgc2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKLSAgICAg
ICAgYXV0byBjb250cm9sc0hvc3QgPSBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJmV4ZWMu
dm0oKSwgImNvbnRyb2xzSG9zdCIpOworICAgICAgICBhdXRvIGNvbnRyb2xzSG9zdCA9IEpTQzo6
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImNvbnRyb2xzSG9zdCIpOwogCiAgICAgICAgIEFT
U0VSVCghbWVkaWFKU1dyYXBwZXJPYmplY3QtPmhhc1Byb3BlcnR5KCZleGVjLCBjb250cm9sc0hv
c3QpKTsKIAotICAgICAgICBtZWRpYUpTV3JhcHBlck9iamVjdC0+cHV0RGlyZWN0KGV4ZWMudm0o
KSwgY29udHJvbHNIb3N0LCBtZWRpYUNvbnRyb2xzSG9zdEpTV3JhcHBlciwgSlNDOjpQcm9wZXJ0
eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVt
IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpOworICAgICAgICBtZWRpYUpTV3Jh
cHBlck9iamVjdC0+cHV0RGlyZWN0KHZtLCBjb250cm9sc0hvc3QsIG1lZGlhQ29udHJvbHNIb3N0
SlNXcmFwcGVyLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgSlNDOjpQcm9w
ZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25s
eSk7CiAKICAgICAgICAgYXV0byogbWVkaWFDb250cm9sc0hvc3RKU1dyYXBwZXJPYmplY3QgPSBK
U0M6OmpzRHluYW1pY0Nhc3Q8SlNDOjpKU09iamVjdCo+KHZtLCBtZWRpYUNvbnRyb2xzSG9zdEpT
V3JhcHBlcik7CiAgICAgICAgIGlmICghbWVkaWFDb250cm9sc0hvc3RKU1dyYXBwZXJPYmplY3Qp
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgYXV0byBjb250cm9sbGVyID0g
SlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZleGVjLnZtKCksICJjb250cm9sbGVyIik7Cisg
ICAgICAgIGF1dG8gY29udHJvbGxlciA9IEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwg
ImNvbnRyb2xsZXIiKTsKIAogICAgICAgICBBU1NFUlQoIWNvbnRyb2xsZXJPYmplY3QtPmhhc1By
b3BlcnR5KCZleGVjLCBjb250cm9sbGVyKSk7CiAKLSAgICAgICAgbWVkaWFDb250cm9sc0hvc3RK
U1dyYXBwZXJPYmplY3QtPnB1dERpcmVjdChleGVjLnZtKCksIGNvbnRyb2xsZXIsIGNvbnRyb2xs
ZXJWYWx1ZSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IEpTQzo6UHJvcGVy
dHlBdHRyaWJ1dGU6OkRvbnRFbnVtIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkp
OworICAgICAgICBtZWRpYUNvbnRyb2xzSG9zdEpTV3JhcHBlck9iamVjdC0+cHV0RGlyZWN0KHZt
LCBjb250cm9sbGVyLCBjb250cm9sbGVyVmFsdWUsIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRv
bnREZWxldGUgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8IEpTQzo6UHJvcGVy
dHlBdHRyaWJ1dGU6OlJlYWRPbmx5KTsKIAogICAgICAgICB1cGRhdGVQYWdlU2NhbGVGYWN0b3JK
U1Byb3BlcnR5KCk7CiAgICAgICAgIHVwZGF0ZVVzZXNMVFJVc2VySW50ZXJmYWNlTGF5b3V0RGly
ZWN0aW9uSlNQcm9wZXJ0eSgpOwpAQCAtNzQ0NCw3ICs3NDQ0LDcgQEAgdm9pZCBIVE1MTWVkaWFF
bGVtZW50Ojp1cGRhdGVNZWRpYUNvbnRybwogCiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIGZhbHNlKTsKIAotICAgICAgICBhdXRvIGZ1bmN0aW9uVmFsdWUgPSBjb250cm9sbGVy
T2JqZWN0LT5nZXQoJmV4ZWMsIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmZXhlYywgImhh
bmRsZVByZXNlbnRhdGlvbk1vZGVDaGFuZ2UiKSk7CisgICAgICAgIGF1dG8gZnVuY3Rpb25WYWx1
ZSA9IGNvbnRyb2xsZXJPYmplY3QtPmdldCgmZXhlYywgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKHZtLCAiaGFuZGxlUHJlc2VudGF0aW9uTW9kZUNoYW5nZSIpKTsKICAgICAgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSB8fCBmdW5jdGlvblZhbHVlLmlzVW5kZWZpbmVkT3JO
dWxsKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTc0ODcsNyArNzQ4Nyw3IEBA
IFN0cmluZyBIVE1MTWVkaWFFbGVtZW50OjpnZXRDdXJyZW50TWVkaWEKIAogICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7CiAKLSAgICAgICAgYXV0byBmdW5jdGlvblZh
bHVlID0gY29udHJvbGxlck9iamVjdC0+Z2V0KCZleGVjLCBKU0M6OklkZW50aWZpZXI6OmZyb21T
dHJpbmcoJmV4ZWMsICJnZXRDdXJyZW50Q29udHJvbHNTdGF0dXMiKSk7CisgICAgICAgIGF1dG8g
ZnVuY3Rpb25WYWx1ZSA9IGNvbnRyb2xsZXJPYmplY3QtPmdldCgmZXhlYywgSlNDOjpJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKHZtLCAiZ2V0Q3VycmVudENvbnRyb2xzU3RhdHVzIikpOwogICAgICAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpIHx8IGZ1bmN0aW9uVmFsdWUuaXNVbmRl
ZmluZWRPck51bGwoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIApJbmRleDogU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAy
NDkxMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00MDUsNyArNDA1LDcgQEAgdm9pZCBIVE1MUGx1Z0luSW1hZ2VF
bGVtZW50OjpkaWRBZGRVc2VyQQogICAgIEFTU0VSVCghYXJnTGlzdC5oYXNPdmVyZmxvd2VkKCkp
OwogCiAgICAgLy8gSXQgaXMgZXhwZWN0ZWQgdGhlIEpTIGZpbGUgcHJvdmlkZXMgYSBjcmVhdGVP
dmVybGF5KHNoYWRvd1Jvb3QsIHRpdGxlLCBzdWJ0aXRsZSkgZnVuY3Rpb24uCi0gICAgYXV0byog
b3ZlcmxheSA9IGdsb2JhbE9iamVjdC5nZXQoJnN0YXRlLCBKU0M6OklkZW50aWZpZXI6OmZyb21T
dHJpbmcoJnN0YXRlLCAiY3JlYXRlT3ZlcmxheSIpKS50b09iamVjdCgmc3RhdGUpOworICAgIGF1
dG8qIG92ZXJsYXkgPSBnbG9iYWxPYmplY3QuZ2V0KCZzdGF0ZSwgSlNDOjpJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCAiY3JlYXRlT3ZlcmxheSIpKS50b09iamVjdCgmc3RhdGUpOwogICAgIEFT
U0VSVCghb3ZlcmxheSA9PSAhIXNjb3BlLmV4Y2VwdGlvbigpKTsKICAgICBpZiAoIW92ZXJsYXkp
IHsKICAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuY3BwCShyZXZpc2lvbiAy
NDkxMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDctMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDctMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmln
aHQgKEMpIDIwMDggTWF0dCBMaWxlayA8d2Via2l0QG1hdHRsaWxlay5jb20+CiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CkBAIC0xNTgsNyArMTU4LDcgQEAgdm9pZCBJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OmFk
ZFNlbGZUb0dsbwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKIAog
ICAgIGF1dG8mIGdsb2JhbE9iamVjdCA9ICpKU0M6OmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+
KHN0YXRlLmxleGljYWxHbG9iYWxPYmplY3QoKSk7Ci0gICAgZ2xvYmFsT2JqZWN0LnB1dERpcmVj
dCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgIkluc3BlY3RvckZyb250ZW5k
SG9zdCIpLCB0b0pTPElETEludGVyZmFjZTxJbnNwZWN0b3JGcm9udGVuZEhvc3Q+PihzdGF0ZSwg
Z2xvYmFsT2JqZWN0LCAqdGhpcykpOworICAgIGdsb2JhbE9iamVjdC5wdXREaXJlY3Qodm0sIEpT
Qzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIkluc3BlY3RvckZyb250ZW5kSG9zdCIpLCB0
b0pTPElETEludGVyZmFjZTxJbnNwZWN0b3JGcm9udGVuZEhvc3Q+PihzdGF0ZSwgZ2xvYmFsT2Jq
ZWN0LCAqdGhpcykpOwogICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJlcG9ydEV4Y2VwdGlvbigmc3RhdGUsIHNjb3BlLmV4Y2VwdGlvbigpKTsKIH0KQEAgLTQw
OSw3ICs0MDksOCBAQCB2b2lkIEluc3BlY3RvckZyb250ZW5kSG9zdDo6c2hvd0NvbnRleHRNCiAg
ICAgQVNTRVJUKG1fZnJvbnRlbmRQYWdlKTsKIAogICAgIGF1dG8mIHN0YXRlID0gKmV4ZWNTdGF0
ZUZyb21QYWdlKGRlYnVnZ2VyV29ybGQoKSwgbV9mcm9udGVuZFBhZ2UpOwotICAgIGF1dG8gdmFs
dWUgPSBzdGF0ZS5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmdldCgmc3RhdGUsIEpTQzo6SWRlbnRp
Zmllcjo6ZnJvbVN0cmluZygmc3RhdGUudm0oKSwgIkluc3BlY3RvckZyb250ZW5kQVBJIikpOwor
ICAgIGF1dG8mIHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHZhbHVlID0gc3RhdGUubGV4aWNh
bEdsb2JhbE9iamVjdCgpLT5nZXQoJnN0YXRlLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmco
dm0sICJJbnNwZWN0b3JGcm9udGVuZEFQSSIpKTsKICAgICBBU1NFUlQodmFsdWUpOwogICAgIEFT
U0VSVCh2YWx1ZS5pc09iamVjdCgpKTsKICAgICBhdXRvKiBmcm9udGVuZEFQSU9iamVjdCA9IGFz
T2JqZWN0KHZhbHVlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9XZWJJbmplY3Rl
ZFNjcmlwdEhvc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9X
ZWJJbmplY3RlZFNjcmlwdEhvc3QuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvV2ViSW5qZWN0ZWRTY3JpcHRIb3N0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTQ4LDEzICs0OCwxMyBAQCBKU1ZhbHVlIFdlYkluamVjdGVkU2NyaXB0SG9zdDo6c3VidHlw
ZShFCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBpZiAodmFsdWUuaW5oZXJpdHM8
SlNOb2RlPih2bSkpCi0gICAgICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywgIm5v
ZGUiX3MpOworICAgICAgICByZXR1cm4ganNOb250cml2aWFsU3RyaW5nKHZtLCAibm9kZSJfcyk7
CiAgICAgaWYgKHZhbHVlLmluaGVyaXRzPEpTTm9kZUxpc3Q+KHZtKSkKLSAgICAgICAgcmV0dXJu
IGpzTm9udHJpdmlhbFN0cmluZyhleGVjLCAiYXJyYXkiX3MpOworICAgICAgICByZXR1cm4ganNO
b250cml2aWFsU3RyaW5nKHZtLCAiYXJyYXkiX3MpOwogICAgIGlmICh2YWx1ZS5pbmhlcml0czxK
U0hUTUxDb2xsZWN0aW9uPih2bSkpCi0gICAgICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmco
ZXhlYywgImFycmF5Il9zKTsKKyAgICAgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyh2bSwg
ImFycmF5Il9zKTsKICAgICBpZiAodmFsdWUuaW5oZXJpdHM8SlNET01FeGNlcHRpb24+KHZtKSkK
LSAgICAgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyhleGVjLCAiZXJyb3IiX3MpOworICAg
ICAgICByZXR1cm4ganNOb250cml2aWFsU3RyaW5nKHZtLCAiZXJyb3IiX3MpOwogCiAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CiB9CkBAIC02Myw0NiArNjMsNDYgQEAgSlNWYWx1ZSBXZWJJbmpl
Y3RlZFNjcmlwdEhvc3Q6OnN1YnR5cGUoRQogc3RhdGljIEpTT2JqZWN0KiBjb25zdHJ1Y3RJbnRl
cm5hbFByb3BlcnR5KFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcmIG5hbWUs
IEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgYXV0byogb2JqZWN0ID0gY29uc3RydWN0RW1wdHlPYmpl
Y3QoZXhlYyk7Ci0gICAgb2JqZWN0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJp
bmcoZXhlYywgIm5hbWUiKSwganNTdHJpbmcoZXhlYywgbmFtZSkpOwotICAgIG9iamVjdC0+cHV0
RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJ2YWx1ZSIpLCB2YWx1ZSk7
CisgICAgb2JqZWN0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJu
YW1lIiksIGpzU3RyaW5nKHZtLCBuYW1lKSk7CisgICAgb2JqZWN0LT5wdXREaXJlY3Qodm0sIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJ2YWx1ZSIpLCB2YWx1ZSk7CiAgICAgcmV0dXJuIG9i
amVjdDsKIH0KIAogc3RhdGljIEpTT2JqZWN0KiBvYmplY3RGb3JQYXltZW50T3B0aW9ucyhWTSYg
dm0sIEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgUGF5bWVudE9wdGlvbnMmIHBheW1lbnRPcHRpb25z
KQogewogICAgIGF1dG8qIG9iamVjdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMpOwotICAg
IG9iamVjdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJyZXF1
ZXN0UGF5ZXJOYW1lIiksIGpzQm9vbGVhbihwYXltZW50T3B0aW9ucy5yZXF1ZXN0UGF5ZXJOYW1l
KSk7Ci0gICAgb2JqZWN0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhl
YywgInJlcXVlc3RQYXllckVtYWlsIiksIGpzQm9vbGVhbihwYXltZW50T3B0aW9ucy5yZXF1ZXN0
UGF5ZXJFbWFpbCkpOwotICAgIG9iamVjdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKGV4ZWMsICJyZXF1ZXN0UGF5ZXJQaG9uZSIpLCBqc0Jvb2xlYW4ocGF5bWVudE9wdGlv
bnMucmVxdWVzdFBheWVyUGhvbmUpKTsKLSAgICBvYmplY3QtPnB1dERpcmVjdCh2bSwgSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZyhleGVjLCAicmVxdWVzdFNoaXBwaW5nIiksIGpzQm9vbGVhbihwYXlt
ZW50T3B0aW9ucy5yZXF1ZXN0U2hpcHBpbmcpKTsKLSAgICBvYmplY3QtPnB1dERpcmVjdCh2bSwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCAic2hpcHBpbmdUeXBlIiksIGpzTm9udHJpdmlh
bFN0cmluZyhleGVjLCBjb252ZXJ0RW51bWVyYXRpb25Ub1N0cmluZyhwYXltZW50T3B0aW9ucy5z
aGlwcGluZ1R5cGUpKSk7CisgICAgb2JqZWN0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZy
b21TdHJpbmcodm0sICJyZXF1ZXN0UGF5ZXJOYW1lIiksIGpzQm9vbGVhbihwYXltZW50T3B0aW9u
cy5yZXF1ZXN0UGF5ZXJOYW1lKSk7CisgICAgb2JqZWN0LT5wdXREaXJlY3Qodm0sIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcodm0sICJyZXF1ZXN0UGF5ZXJFbWFpbCIpLCBqc0Jvb2xlYW4ocGF5bWVu
dE9wdGlvbnMucmVxdWVzdFBheWVyRW1haWwpKTsKKyAgICBvYmplY3QtPnB1dERpcmVjdCh2bSwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInJlcXVlc3RQYXllclBob25lIiksIGpzQm9vbGVh
bihwYXltZW50T3B0aW9ucy5yZXF1ZXN0UGF5ZXJQaG9uZSkpOworICAgIG9iamVjdC0+cHV0RGly
ZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAicmVxdWVzdFNoaXBwaW5nIiksIGpz
Qm9vbGVhbihwYXltZW50T3B0aW9ucy5yZXF1ZXN0U2hpcHBpbmcpKTsKKyAgICBvYmplY3QtPnB1
dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInNoaXBwaW5nVHlwZSIpLCBq
c05vbnRyaXZpYWxTdHJpbmcodm0sIGNvbnZlcnRFbnVtZXJhdGlvblRvU3RyaW5nKHBheW1lbnRP
cHRpb25zLnNoaXBwaW5nVHlwZSkpKTsKICAgICByZXR1cm4gb2JqZWN0OwogfQogCiBzdGF0aWMg
SlNPYmplY3QqIG9iamVjdEZvclBheW1lbnRDdXJyZW5jeUFtb3VudChWTSYgdm0sIEV4ZWNTdGF0
ZSogZXhlYywgY29uc3QgUGF5bWVudEN1cnJlbmN5QW1vdW50JiBwYXltZW50Q3VycmVuY3lBbW91
bnQpCiB7CiAgICAgYXV0byogb2JqZWN0ID0gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYyk7Ci0g
ICAgb2JqZWN0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgImN1
cnJlbmN5IiksIGpzU3RyaW5nKGV4ZWMsIHBheW1lbnRDdXJyZW5jeUFtb3VudC5jdXJyZW5jeSkp
OwotICAgIG9iamVjdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMs
ICJ2YWx1ZSIpLCBqc1N0cmluZyhleGVjLCBwYXltZW50Q3VycmVuY3lBbW91bnQudmFsdWUpKTsK
KyAgICBvYmplY3QtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImN1
cnJlbmN5IiksIGpzU3RyaW5nKHZtLCBwYXltZW50Q3VycmVuY3lBbW91bnQuY3VycmVuY3kpKTsK
KyAgICBvYmplY3QtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInZh
bHVlIiksIGpzU3RyaW5nKHZtLCBwYXltZW50Q3VycmVuY3lBbW91bnQudmFsdWUpKTsKICAgICBy
ZXR1cm4gb2JqZWN0OwogfQogCiBzdGF0aWMgSlNPYmplY3QqIG9iamVjdEZvclBheW1lbnRJdGVt
KFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBjb25zdCBQYXltZW50SXRlbSYgcGF5bWVudEl0ZW0p
CiB7CiAgICAgYXV0byogb2JqZWN0ID0gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYyk7Ci0gICAg
b2JqZWN0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgImxhYmVs
IiksIGpzU3RyaW5nKGV4ZWMsIHBheW1lbnRJdGVtLmxhYmVsKSk7Ci0gICAgb2JqZWN0LT5wdXRE
aXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgImFtb3VudCIpLCBvYmplY3RG
b3JQYXltZW50Q3VycmVuY3lBbW91bnQodm0sIGV4ZWMsIHBheW1lbnRJdGVtLmFtb3VudCkpOwot
ICAgIG9iamVjdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJw
ZW5kaW5nIiksIGpzQm9vbGVhbihwYXltZW50SXRlbS5wZW5kaW5nKSk7CisgICAgb2JqZWN0LT5w
dXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJsYWJlbCIpLCBqc1N0cmlu
Zyh2bSwgcGF5bWVudEl0ZW0ubGFiZWwpKTsKKyAgICBvYmplY3QtPnB1dERpcmVjdCh2bSwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImFtb3VudCIpLCBvYmplY3RGb3JQYXltZW50Q3VycmVu
Y3lBbW91bnQodm0sIGV4ZWMsIHBheW1lbnRJdGVtLmFtb3VudCkpOworICAgIG9iamVjdC0+cHV0
RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAicGVuZGluZyIpLCBqc0Jvb2xl
YW4ocGF5bWVudEl0ZW0ucGVuZGluZykpOwogICAgIHJldHVybiBvYmplY3Q7CiB9CiAKIHN0YXRp
YyBKU09iamVjdCogb2JqZWN0Rm9yUGF5bWVudFNoaXBwaW5nT3B0aW9uKFZNJiB2bSwgRXhlY1N0
YXRlKiBleGVjLCBjb25zdCBQYXltZW50U2hpcHBpbmdPcHRpb24mIHBheW1lbnRTaGlwcGluZ09w
dGlvbikKIHsKICAgICBhdXRvKiBvYmplY3QgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjKTsK
LSAgICBvYmplY3QtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCAi
aWQiKSwganNTdHJpbmcoZXhlYywgcGF5bWVudFNoaXBwaW5nT3B0aW9uLmlkKSk7Ci0gICAgb2Jq
ZWN0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgImxhYmVsIiks
IGpzU3RyaW5nKGV4ZWMsIHBheW1lbnRTaGlwcGluZ09wdGlvbi5sYWJlbCkpOwotICAgIG9iamVj
dC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJhbW91bnQiKSwg
b2JqZWN0Rm9yUGF5bWVudEN1cnJlbmN5QW1vdW50KHZtLCBleGVjLCBwYXltZW50U2hpcHBpbmdP
cHRpb24uYW1vdW50KSk7Ci0gICAgb2JqZWN0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZy
b21TdHJpbmcoZXhlYywgInNlbGVjdGVkIiksIGpzQm9vbGVhbihwYXltZW50U2hpcHBpbmdPcHRp
b24uc2VsZWN0ZWQpKTsKKyAgICBvYmplY3QtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyh2bSwgImlkIiksIGpzU3RyaW5nKHZtLCBwYXltZW50U2hpcHBpbmdPcHRpb24uaWQp
KTsKKyAgICBvYmplY3QtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwg
ImxhYmVsIiksIGpzU3RyaW5nKHZtLCBwYXltZW50U2hpcHBpbmdPcHRpb24ubGFiZWwpKTsKKyAg
ICBvYmplY3QtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImFtb3Vu
dCIpLCBvYmplY3RGb3JQYXltZW50Q3VycmVuY3lBbW91bnQodm0sIGV4ZWMsIHBheW1lbnRTaGlw
cGluZ09wdGlvbi5hbW91bnQpKTsKKyAgICBvYmplY3QtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZyh2bSwgInNlbGVjdGVkIiksIGpzQm9vbGVhbihwYXltZW50U2hpcHBpbmdP
cHRpb24uc2VsZWN0ZWQpKTsKICAgICByZXR1cm4gb2JqZWN0OwogfQogCkBAIC0xMTMsMTAgKzEx
MywxMCBAQCBzdGF0aWMgSlNPYmplY3QqIG9iamVjdEZvclBheW1lbnREZXRhaWxzCiAgICAgICAg
IGFkZGl0aW9uYWxEaXNwbGF5SXRlbXMtPnB1dERpcmVjdEluZGV4KGV4ZWMsIGksIG9iamVjdEZv
clBheW1lbnRJdGVtKHZtLCBleGVjLCBtb2RpZmllci5hZGRpdGlvbmFsRGlzcGxheUl0ZW1zW2ld
KSk7CiAKICAgICBhdXRvKiBvYmplY3QgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjKTsKLSAg
ICBvYmplY3QtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCAic3Vw
cG9ydGVkTWV0aG9kcyIpLCBqc1N0cmluZyhleGVjLCBtb2RpZmllci5zdXBwb3J0ZWRNZXRob2Rz
KSk7Ci0gICAgb2JqZWN0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhl
YywgInRvdGFsIiksICFtb2RpZmllci50b3RhbCA/IGpzTnVsbCgpIDogb2JqZWN0Rm9yUGF5bWVu
dEl0ZW0odm0sIGV4ZWMsICptb2RpZmllci50b3RhbCkpOwotICAgIG9iamVjdC0+cHV0RGlyZWN0
KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJhZGRpdGlvbmFsRGlzcGxheUl0ZW1z
IiksIGFkZGl0aW9uYWxEaXNwbGF5SXRlbXMpOwotICAgIG9iamVjdC0+cHV0RGlyZWN0KHZtLCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJkYXRhIiksICFtb2RpZmllci5kYXRhID8ganNO
dWxsKCkgOiBtb2RpZmllci5kYXRhLmdldCgpKTsKKyAgICBvYmplY3QtPnB1dERpcmVjdCh2bSwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInN1cHBvcnRlZE1ldGhvZHMiKSwganNTdHJpbmco
dm0sIG1vZGlmaWVyLnN1cHBvcnRlZE1ldGhvZHMpKTsKKyAgICBvYmplY3QtPnB1dERpcmVjdCh2
bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInRvdGFsIiksICFtb2RpZmllci50b3RhbCA/
IGpzTnVsbCgpIDogb2JqZWN0Rm9yUGF5bWVudEl0ZW0odm0sIGV4ZWMsICptb2RpZmllci50b3Rh
bCkpOworICAgIG9iamVjdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZt
LCAiYWRkaXRpb25hbERpc3BsYXlJdGVtcyIpLCBhZGRpdGlvbmFsRGlzcGxheUl0ZW1zKTsKKyAg
ICBvYmplY3QtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImRhdGEi
KSwgIW1vZGlmaWVyLmRhdGEgPyBqc051bGwoKSA6IG1vZGlmaWVyLmRhdGEuZ2V0KCkpOwogICAg
IHJldHVybiBvYmplY3Q7CiB9CiAKQEAgLTEzNSwyNyArMTM1LDI3IEBAIHN0YXRpYyBKU09iamVj
dCogb2JqZWN0Rm9yUGF5bWVudERldGFpbHMKICAgICAgICAgbW9kaWZpZXJzLT5wdXREaXJlY3RJ
bmRleChleGVjLCBpLCBvYmplY3RGb3JQYXltZW50RGV0YWlsc01vZGlmaWVyKHZtLCBleGVjLCBw
YXltZW50RGV0YWlscy5tb2RpZmllcnNbaV0pKTsKIAogICAgIGF1dG8qIG9iamVjdCA9IGNvbnN0
cnVjdEVtcHR5T2JqZWN0KGV4ZWMpOwotICAgIG9iamVjdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJpZCIpLCBqc1N0cmluZyhleGVjLCBwYXltZW50RGV0YWls
cy5pZCkpOwotICAgIG9iamVjdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KGV4ZWMsICJ0b3RhbCIpLCBvYmplY3RGb3JQYXltZW50SXRlbSh2bSwgZXhlYywgcGF5bWVudERl
dGFpbHMudG90YWwpKTsKLSAgICBvYmplY3QtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyhleGVjLCAiZGlzcGxheUl0ZW1zIiksIGRpc3BsYXlJdGVtcyk7Ci0gICAgb2JqZWN0
LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgInNoaXBwaW5nT3B0
aW9ucyIpLCBzaGlwcGluZ09wdGlvbnMpOwotICAgIG9iamVjdC0+cHV0RGlyZWN0KHZtLCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJtb2RpZmllcnMiKSwgbW9kaWZpZXJzKTsKKyAgICBv
YmplY3QtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImlkIiksIGpz
U3RyaW5nKHZtLCBwYXltZW50RGV0YWlscy5pZCkpOworICAgIG9iamVjdC0+cHV0RGlyZWN0KHZt
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAidG90YWwiKSwgb2JqZWN0Rm9yUGF5bWVudEl0
ZW0odm0sIGV4ZWMsIHBheW1lbnREZXRhaWxzLnRvdGFsKSk7CisgICAgb2JqZWN0LT5wdXREaXJl
Y3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJkaXNwbGF5SXRlbXMiKSwgZGlzcGxh
eUl0ZW1zKTsKKyAgICBvYmplY3QtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zyh2bSwgInNoaXBwaW5nT3B0aW9ucyIpLCBzaGlwcGluZ09wdGlvbnMpOworICAgIG9iamVjdC0+
cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAibW9kaWZpZXJzIiksIG1v
ZGlmaWVycyk7CiAgICAgcmV0dXJuIG9iamVjdDsKIH0KIAotc3RhdGljIEpTU3RyaW5nKiBqc1N0
cmluZ0ZvclBheW1lbnRSZXF1ZXN0U3RhdGUoVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIFBheW1l
bnRSZXF1ZXN0OjpTdGF0ZSBzdGF0ZSkKK3N0YXRpYyBKU1N0cmluZyoganNTdHJpbmdGb3JQYXlt
ZW50UmVxdWVzdFN0YXRlKFZNJiB2bSwgUGF5bWVudFJlcXVlc3Q6OlN0YXRlIHN0YXRlKQogewog
ICAgIHN3aXRjaCAoc3RhdGUpIHsKICAgICBjYXNlIFBheW1lbnRSZXF1ZXN0OjpTdGF0ZTo6Q3Jl
YXRlZDoKLSAgICAgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyhleGVjLCAiY3JlYXRlZCJf
cyk7CisgICAgICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcodm0sICJjcmVhdGVkIl9zKTsK
ICAgICBjYXNlIFBheW1lbnRSZXF1ZXN0OjpTdGF0ZTo6SW50ZXJhY3RpdmU6Ci0gICAgICAgIHJl
dHVybiBqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywgImludGVyYWN0aXZlIl9zKTsKKyAgICAgICAg
cmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyh2bSwgImludGVyYWN0aXZlIl9zKTsKICAgICBjYXNl
IFBheW1lbnRSZXF1ZXN0OjpTdGF0ZTo6Q2xvc2VkOgotICAgICAgICByZXR1cm4ganNOb250cml2
aWFsU3RyaW5nKGV4ZWMsICJjbG9zZWQiX3MpOworICAgICAgICByZXR1cm4ganNOb250cml2aWFs
U3RyaW5nKHZtLCAiY2xvc2VkIl9zKTsKICAgICB9CiAKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICByZXR1cm4ganNFbXB0eVN0cmluZygmdm0pOworICAgIHJldHVybiBqc0VtcHR5U3Ry
aW5nKHZtKTsKIH0KICNlbmRpZgogCkBAIC0xNjksNyArMTY5LDcgQEAgSlNWYWx1ZSBXZWJJbmpl
Y3RlZFNjcmlwdEhvc3Q6OmdldEludGVybgogICAgICAgICBhdXRvKiBhcnJheSA9IGNvbnN0cnVj
dEVtcHR5QXJyYXkoZXhlYywgbnVsbHB0cik7CiAgICAgICAgIGFycmF5LT5wdXREaXJlY3RJbmRl
eChleGVjLCBpbmRleCsrLCBjb25zdHJ1Y3RJbnRlcm5hbFByb3BlcnR5KHZtLCBleGVjLCAib3B0
aW9ucyJfcywgb2JqZWN0Rm9yUGF5bWVudE9wdGlvbnModm0sIGV4ZWMsIHBheW1lbnRSZXF1ZXN0
LT5wYXltZW50T3B0aW9ucygpKSkpOwogICAgICAgICBhcnJheS0+cHV0RGlyZWN0SW5kZXgoZXhl
YywgaW5kZXgrKywgY29uc3RydWN0SW50ZXJuYWxQcm9wZXJ0eSh2bSwgZXhlYywgImRldGFpbHMi
X3MsIG9iamVjdEZvclBheW1lbnREZXRhaWxzKHZtLCBleGVjLCBwYXltZW50UmVxdWVzdC0+cGF5
bWVudERldGFpbHMoKSkpKTsKLSAgICAgICAgYXJyYXktPnB1dERpcmVjdEluZGV4KGV4ZWMsIGlu
ZGV4KyssIGNvbnN0cnVjdEludGVybmFsUHJvcGVydHkodm0sIGV4ZWMsICJzdGF0ZSJfcywganNT
dHJpbmdGb3JQYXltZW50UmVxdWVzdFN0YXRlKHZtLCBleGVjLCBwYXltZW50UmVxdWVzdC0+c3Rh
dGUoKSkpKTsKKyAgICAgICAgYXJyYXktPnB1dERpcmVjdEluZGV4KGV4ZWMsIGluZGV4KyssIGNv
bnN0cnVjdEludGVybmFsUHJvcGVydHkodm0sIGV4ZWMsICJzdGF0ZSJfcywganNTdHJpbmdGb3JQ
YXltZW50UmVxdWVzdFN0YXRlKHZtLCBwYXltZW50UmVxdWVzdC0+c3RhdGUoKSkpKTsKICAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICAgICAgcmV0dXJuIGFycmF5
OwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9y
Q2FudmFzQWdlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9h
Z2VudHMvSW5zcGVjdG9yQ2FudmFzQWdlbnQuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNhbnZhc0FnZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMTkg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC01MzAsMTMgKzUzMCwxNCBAQCB2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50Ojpj
b25zb2xlU3RhcnRSCiAKICAgICBSZWNvcmRpbmdPcHRpb25zIHJlY29yZGluZ09wdGlvbnM7CiAg
ICAgaWYgKG9wdGlvbnMpIHsKLSAgICAgICAgaWYgKEpTQzo6SlNWYWx1ZSBvcHRpb25TaW5nbGVG
cmFtZSA9IG9wdGlvbnMtPmdldCgmZXhlYywgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZl
eGVjLCAic2luZ2xlRnJhbWUiKSkpCisgICAgICAgIEpTQzo6Vk0mIHZtID0gZXhlYy52bSgpOwor
ICAgICAgICBpZiAoSlNDOjpKU1ZhbHVlIG9wdGlvblNpbmdsZUZyYW1lID0gb3B0aW9ucy0+Z2V0
KCZleGVjLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJzaW5nbGVGcmFtZSIpKSkK
ICAgICAgICAgICAgIHJlY29yZGluZ09wdGlvbnMuZnJhbWVDb3VudCA9IG9wdGlvblNpbmdsZUZy
YW1lLnRvQm9vbGVhbigmZXhlYykgPyAxIDogMDsKLSAgICAgICAgaWYgKEpTQzo6SlNWYWx1ZSBv
cHRpb25GcmFtZUNvdW50ID0gb3B0aW9ucy0+Z2V0KCZleGVjLCBKU0M6OklkZW50aWZpZXI6OmZy
b21TdHJpbmcoJmV4ZWMsICJmcmFtZUNvdW50IikpKQorICAgICAgICBpZiAoSlNDOjpKU1ZhbHVl
IG9wdGlvbkZyYW1lQ291bnQgPSBvcHRpb25zLT5nZXQoJmV4ZWMsIEpTQzo6SWRlbnRpZmllcjo6
ZnJvbVN0cmluZyh2bSwgImZyYW1lQ291bnQiKSkpCiAgICAgICAgICAgICByZWNvcmRpbmdPcHRp
b25zLmZyYW1lQ291bnQgPSBvcHRpb25GcmFtZUNvdW50LnRvTnVtYmVyKCZleGVjKTsKLSAgICAg
ICAgaWYgKEpTQzo6SlNWYWx1ZSBvcHRpb25NZW1vcnlMaW1pdCA9IG9wdGlvbnMtPmdldCgmZXhl
YywgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZleGVjLCAibWVtb3J5TGltaXQiKSkpCisg
ICAgICAgIGlmIChKU0M6OkpTVmFsdWUgb3B0aW9uTWVtb3J5TGltaXQgPSBvcHRpb25zLT5nZXQo
JmV4ZWMsIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIm1lbW9yeUxpbWl0IikpKQog
ICAgICAgICAgICAgcmVjb3JkaW5nT3B0aW9ucy5tZW1vcnlMaW1pdCA9IG9wdGlvbk1lbW9yeUxp
bWl0LnRvTnVtYmVyKCZleGVjKTsKLSAgICAgICAgaWYgKEpTQzo6SlNWYWx1ZSBvcHRpb25OYW1l
ID0gb3B0aW9ucy0+Z2V0KCZleGVjLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJmV4ZWMs
ICJuYW1lIikpKQorICAgICAgICBpZiAoSlNDOjpKU1ZhbHVlIG9wdGlvbk5hbWUgPSBvcHRpb25z
LT5nZXQoJmV4ZWMsIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIm5hbWUiKSkpCiAg
ICAgICAgICAgICByZWNvcmRpbmdPcHRpb25zLm5hbWUgPSBvcHRpb25OYW1lLnRvV1RGU3RyaW5n
KCZleGVjKTsKICAgICB9CiAgICAgc3RhcnRSZWNvcmRpbmcoKmluc3BlY3RvckNhbnZhcywgSW5z
cGVjdG9yOjpQcm90b2NvbDo6UmVjb3JkaW5nOjpJbml0aWF0b3I6OkNvbnNvbGUsIFdURk1vdmUo
cmVjb3JkaW5nT3B0aW9ucykpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50
cy9JbnNwZWN0b3JET01BZ2VudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01BZ2VudC5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysr
IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOS0y
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
OS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykg
MjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAy
MDA5IEpvc2VwaCBQZWNvcmFybwogICoKQEAgLTE3MDEsMTkgKzE3MDEsMjAgQEAgUmVmPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRPTTo6RXZlbnRMaXN0ZQogICAgICAgICB9CiAKICAgICAgICAgaWYg
KGhhbmRsZXJPYmplY3QgJiYgZXhlYykgewotICAgICAgICAgICAgSlNDOjpKU0Z1bmN0aW9uKiBo
YW5kbGVyRnVuY3Rpb24gPSBKU0M6OmpzRHluYW1pY0Nhc3Q8SlNDOjpKU0Z1bmN0aW9uKj4oZXhl
Yy0+dm0oKSwgaGFuZGxlck9iamVjdCk7CisgICAgICAgICAgICBKU0M6OlZNJiB2bSA9IGV4ZWMt
PnZtKCk7CisgICAgICAgICAgICBKU0M6OkpTRnVuY3Rpb24qIGhhbmRsZXJGdW5jdGlvbiA9IEpT
Qzo6anNEeW5hbWljQ2FzdDxKU0M6OkpTRnVuY3Rpb24qPih2bSwgaGFuZGxlck9iamVjdCk7CiAK
ICAgICAgICAgICAgIGlmICghaGFuZGxlckZ1bmN0aW9uKSB7Ci0gICAgICAgICAgICAgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUoZXhlYy0+dm0oKSk7CisgICAgICAgICAgICAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogCiAgICAgICAgICAgICAg
ICAgLy8gSWYgdGhlIGhhbmRsZXIgaXMgbm90IGFjdHVhbGx5IGEgZnVuY3Rpb24sIHNlZSBpZiBp
dCBpbXBsZW1lbnRzIHRoZSBFdmVudExpc3RlbmVyIGludGVyZmFjZSBhbmQgdXNlIHRoYXQuCi0g
ICAgICAgICAgICAgICAgYXV0byBoYW5kbGVFdmVudFZhbHVlID0gaGFuZGxlck9iamVjdC0+Z2V0
KGV4ZWMsIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCAiaGFuZGxlRXZlbnQiKSk7
CisgICAgICAgICAgICAgICAgYXV0byBoYW5kbGVFdmVudFZhbHVlID0gaGFuZGxlck9iamVjdC0+
Z2V0KGV4ZWMsIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImhhbmRsZUV2ZW50Iikp
OwogCiAgICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgICAgICAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKIAogICAgICAgICAgICAg
ICAgIGlmIChoYW5kbGVFdmVudFZhbHVlKQotICAgICAgICAgICAgICAgICAgICBoYW5kbGVyRnVu
Y3Rpb24gPSBKU0M6OmpzRHluYW1pY0Nhc3Q8SlNDOjpKU0Z1bmN0aW9uKj4oZXhlYy0+dm0oKSwg
aGFuZGxlRXZlbnRWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIGhhbmRsZXJGdW5jdGlvbiA9
IEpTQzo6anNEeW5hbWljQ2FzdDxKU0M6OkpTRnVuY3Rpb24qPih2bSwgaGFuZGxlRXZlbnRWYWx1
ZSk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChoYW5kbGVyRnVuY3Rpb24gJiYg
IWhhbmRsZXJGdW5jdGlvbi0+aXNIb3N0T3JCdWlsdGluRnVuY3Rpb24oKSkgewpAQCAtMTcyMiw3
ICsxNzIzLDcgQEAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6RXZlbnRMaXN0ZQogICAg
ICAgICAgICAgICAgIGlmIChoYW5kbGVyRnVuY3Rpb24gIT0gaGFuZGxlck9iamVjdCkKICAgICAg
ICAgICAgICAgICAgICAgaGFuZGxlck5hbWUgPSBKU0M6OkpTT2JqZWN0OjpjYWxjdWxhdGVkQ2xh
c3NOYW1lKGhhbmRsZXJPYmplY3QpOwogICAgICAgICAgICAgICAgIGlmIChoYW5kbGVyTmFtZS5p
c0VtcHR5KCkgfHwgaGFuZGxlck5hbWUgPT0gIk9iamVjdCJfcykKLSAgICAgICAgICAgICAgICAg
ICAgaGFuZGxlck5hbWUgPSBoYW5kbGVyRnVuY3Rpb24tPmNhbGN1bGF0ZWREaXNwbGF5TmFtZShl
eGVjLT52bSgpKTsKKyAgICAgICAgICAgICAgICAgICAgaGFuZGxlck5hbWUgPSBoYW5kbGVyRnVu
Y3Rpb24tPmNhbGN1bGF0ZWREaXNwbGF5TmFtZSh2bSk7CiAKICAgICAgICAgICAgICAgICBpZiAo
YXV0byBleGVjdXRhYmxlID0gaGFuZGxlckZ1bmN0aW9uLT5qc0V4ZWN1dGFibGUoKSkgewogICAg
ICAgICAgICAgICAgICAgICBsaW5lTnVtYmVyID0gZXhlY3V0YWJsZS0+Zmlyc3RMaW5lKCkgLSAx
OwpAQCAtMjYwOCw3ICsyNjA5LDcgQEAgTm9kZSogSW5zcGVjdG9yRE9NQWdlbnQ6OnNjcmlwdFZh
bHVlQXNObwogewogICAgIGlmICghdmFsdWUgfHwgIXZhbHVlLmlzT2JqZWN0KCkpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBKU05vZGU6OnRvV3JhcHBlZCgqdmFsdWUuZ2V0
T2JqZWN0KCktPnZtKCksIHZhbHVlLmdldE9iamVjdCgpKTsKKyAgICByZXR1cm4gSlNOb2RlOjp0
b1dyYXBwZWQodmFsdWUuZ2V0T2JqZWN0KCktPnZtKCksIHZhbHVlLmdldE9iamVjdCgpKTsKIH0K
IAogSlNDOjpKU1ZhbHVlIEluc3BlY3RvckRPTUFnZW50Ojpub2RlQXNTY3JpcHRWYWx1ZShKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIE5vZGUqIG5vZGUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZUF1ZGl0QWdlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlQXVkaXRBZ2VudC5jcHAJKHJldmlz
aW9uIDI0OTEyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdl
QXVkaXRBZ2VudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg0LDE2ICs4NCwxNyBAQCB2b2lkIFBh
Z2VBdWRpdEFnZW50Ojpwb3B1bGF0ZUF1ZGl0T2JqZWN0CiAgICAgICAgIHJldHVybjsKIAogICAg
IGlmIChhdXRvKiBnbG9iYWxPYmplY3QgPSBKU0M6OmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+
KGV4ZWNTdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKSkgewotICAgICAgICBKU0M6OkpTTG9j
a0hvbGRlciBsb2NrKGV4ZWNTdGF0ZSk7CisgICAgICAgIEpTQzo6Vk0mIHZtID0gZ2xvYmFsT2Jq
ZWN0LT52bSgpOworICAgICAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKHZtKTsKIAogICAgICAg
ICBpZiAoSlNDOjpKU1ZhbHVlIGpzSW5zcGVjdG9yQXVkaXRBY2Nlc3NpYmlsaXR5T2JqZWN0ID0g
dG9KU05ld2x5Q3JlYXRlZChleGVjU3RhdGUsIGdsb2JhbE9iamVjdCwgSW5zcGVjdG9yQXVkaXRB
Y2Nlc3NpYmlsaXR5T2JqZWN0OjpjcmVhdGUoKnRoaXMpKSkKLSAgICAgICAgICAgIGF1ZGl0T2Jq
ZWN0LT5wdXREaXJlY3QoZXhlY1N0YXRlLT52bSgpLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJp
bmcoZXhlY1N0YXRlLCAiQWNjZXNzaWJpbGl0eSIpLCBqc0luc3BlY3RvckF1ZGl0QWNjZXNzaWJp
bGl0eU9iamVjdCk7CisgICAgICAgICAgICBhdWRpdE9iamVjdC0+cHV0RGlyZWN0KHZtLCBKU0M6
OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJBY2Nlc3NpYmlsaXR5IiksIGpzSW5zcGVjdG9y
QXVkaXRBY2Nlc3NpYmlsaXR5T2JqZWN0KTsKIAogICAgICAgICBpZiAoSlNDOjpKU1ZhbHVlIGpz
SW5zcGVjdG9yQXVkaXRET01PYmplY3QgPSB0b0pTTmV3bHlDcmVhdGVkKGV4ZWNTdGF0ZSwgZ2xv
YmFsT2JqZWN0LCBJbnNwZWN0b3JBdWRpdERPTU9iamVjdDo6Y3JlYXRlKCp0aGlzKSkpCi0gICAg
ICAgICAgICBhdWRpdE9iamVjdC0+cHV0RGlyZWN0KGV4ZWNTdGF0ZS0+dm0oKSwgSlNDOjpJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWNTdGF0ZSwgIkRPTSIpLCBqc0luc3BlY3RvckF1ZGl0RE9N
T2JqZWN0KTsKKyAgICAgICAgICAgIGF1ZGl0T2JqZWN0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRl
bnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIkRPTSIpLCBqc0luc3BlY3RvckF1ZGl0RE9NT2JqZWN0
KTsKIAogICAgICAgICBpZiAoSlNDOjpKU1ZhbHVlIGpzSW5zcGVjdG9yQXVkaXRSZXNvdXJjZXNP
YmplY3QgPSB0b0pTTmV3bHlDcmVhdGVkKGV4ZWNTdGF0ZSwgZ2xvYmFsT2JqZWN0LCBJbnNwZWN0
b3JBdWRpdFJlc291cmNlc09iamVjdDo6Y3JlYXRlKCp0aGlzKSkpCi0gICAgICAgICAgICBhdWRp
dE9iamVjdC0+cHV0RGlyZWN0KGV4ZWNTdGF0ZS0+dm0oKSwgSlNDOjpJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKGV4ZWNTdGF0ZSwgIlJlc291cmNlcyIpLCBqc0luc3BlY3RvckF1ZGl0UmVzb3VyY2Vz
T2JqZWN0KTsKKyAgICAgICAgICAgIGF1ZGl0T2JqZWN0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRl
bnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIlJlc291cmNlcyIpLCBqc0luc3BlY3RvckF1ZGl0UmVz
b3VyY2VzT2JqZWN0KTsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFn
ZUNvbnNvbGVDbGllbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFn
ZUNvbnNvbGVDbGllbnQuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9w
YWdlL1BhZ2VDb25zb2xlQ2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMDIsMTMgKzMw
MiwxNCBAQCBzdGF0aWMgT3B0aW9uYWw8U3RyaW5nPiBzbmFwc2hvdENhbnZhcyhICiAKIHZvaWQg
UGFnZUNvbnNvbGVDbGllbnQ6OnNjcmVlbnNob3QoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBSZWY8
U2NyaXB0QXJndW1lbnRzPiYmIGFyZ3VtZW50cykKIHsKKyAgICBKU0M6OlZNJiB2bSA9IHN0YXRl
LT52bSgpOwogICAgIFN0cmluZyBkYXRhVVJMOwogICAgIEpTQzo6SlNWYWx1ZSB0YXJnZXQ7CiAK
ICAgICBpZiAoYXJndW1lbnRzLT5hcmd1bWVudENvdW50KCkpIHsKICAgICAgICAgYXV0byBwb3Nz
aWJsZVRhcmdldCA9IGFyZ3VtZW50cy0+YXJndW1lbnRBdCgwKTsKIAotICAgICAgICBpZiAoYXV0
byogbm9kZSA9IEpTTm9kZTo6dG9XcmFwcGVkKHN0YXRlLT52bSgpLCBwb3NzaWJsZVRhcmdldCkp
IHsKKyAgICAgICAgaWYgKGF1dG8qIG5vZGUgPSBKU05vZGU6OnRvV3JhcHBlZCh2bSwgcG9zc2li
bGVUYXJnZXQpKSB7CiAgICAgICAgICAgICB0YXJnZXQgPSBwb3NzaWJsZVRhcmdldDsKICAgICAg
ICAgICAgIGlmIChVTkxJS0VMWShJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246Omhhc0Zyb250ZW5k
cygpKSkgewogICAgICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gc25h
cHNob3Q7CkBAIC0zNTcsNyArMzU4LDcgQEAgdm9pZCBQYWdlQ29uc29sZUNsaWVudDo6c2NyZWVu
c2hvdChKU0M6OgogICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVVSTCA9IHNuYXBzaG90LT50
b0RhdGFVUkwoImltYWdlL3BuZyJfcywgV1RGOjpudWxsb3B0LCBQcmVzZXJ2ZVJlc29sdXRpb246
Olllcyk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2Ug
aWYgKGF1dG8qIGltYWdlRGF0YSA9IEpTSW1hZ2VEYXRhOjp0b1dyYXBwZWQoc3RhdGUtPnZtKCks
IHBvc3NpYmxlVGFyZ2V0KSkgeworICAgICAgICB9IGVsc2UgaWYgKGF1dG8qIGltYWdlRGF0YSA9
IEpTSW1hZ2VEYXRhOjp0b1dyYXBwZWQodm0sIHBvc3NpYmxlVGFyZ2V0KSkgewogICAgICAgICAg
ICAgdGFyZ2V0ID0gcG9zc2libGVUYXJnZXQ7CiAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpoYXNGcm9udGVuZHMoKSkpIHsKICAgICAgICAgICAgICAg
ICBhdXRvIHNvdXJjZVNpemUgPSBpbWFnZURhdGEtPnNpemUoKTsKQEAgLTM2NywxMyArMzY4LDEz
IEBAIHZvaWQgUGFnZUNvbnNvbGVDbGllbnQ6OnNjcmVlbnNob3QoSlNDOjoKICAgICAgICAgICAg
ICAgICAgICAgZGF0YVVSTCA9IGltYWdlQnVmZmVyLT50b0RhdGFVUkwoImltYWdlL3BuZyJfcywg
V1RGOjpudWxsb3B0LCBQcmVzZXJ2ZVJlc29sdXRpb246Olllcyk7CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKGF1dG8qIGltYWdlQml0bWFwID0g
SlNJbWFnZUJpdG1hcDo6dG9XcmFwcGVkKHN0YXRlLT52bSgpLCBwb3NzaWJsZVRhcmdldCkpIHsK
KyAgICAgICAgfSBlbHNlIGlmIChhdXRvKiBpbWFnZUJpdG1hcCA9IEpTSW1hZ2VCaXRtYXA6OnRv
V3JhcHBlZCh2bSwgcG9zc2libGVUYXJnZXQpKSB7CiAgICAgICAgICAgICB0YXJnZXQgPSBwb3Nz
aWJsZVRhcmdldDsKICAgICAgICAgICAgIGlmIChVTkxJS0VMWShJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb246Omhhc0Zyb250ZW5kcygpKSkgewogICAgICAgICAgICAgICAgIGlmIChhdXRvKiBpbWFn
ZUJ1ZmZlciA9IGltYWdlQml0bWFwLT5idWZmZXIoKSkKICAgICAgICAgICAgICAgICAgICAgZGF0
YVVSTCA9IGltYWdlQnVmZmVyLT50b0RhdGFVUkwoImltYWdlL3BuZyJfcywgV1RGOjpudWxsb3B0
LCBQcmVzZXJ2ZVJlc29sdXRpb246Olllcyk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxz
ZSBpZiAoYXV0byogY29udGV4dCA9IGNhbnZhc1JlbmRlcmluZ0NvbnRleHQoc3RhdGUtPnZtKCks
IHBvc3NpYmxlVGFyZ2V0KSkgeworICAgICAgICB9IGVsc2UgaWYgKGF1dG8qIGNvbnRleHQgPSBj
YW52YXNSZW5kZXJpbmdDb250ZXh0KHZtLCBwb3NzaWJsZVRhcmdldCkpIHsKICAgICAgICAgICAg
IGF1dG8mIGNhbnZhcyA9IGNvbnRleHQtPmNhbnZhc0Jhc2UoKTsKICAgICAgICAgICAgIGlmIChp
czxIVE1MQ2FudmFzRWxlbWVudD4oY2FudmFzKSkgewogICAgICAgICAgICAgICAgIHRhcmdldCA9
IHBvc3NpYmxlVGFyZ2V0OwpAQCAtNDA4LDkgKzQwOSw5IEBAIHZvaWQgUGFnZUNvbnNvbGVDbGll
bnQ6OnNjcmVlbnNob3QoSlNDOjoKICAgICB9CiAKICAgICBWZWN0b3I8SlNDOjpTdHJvbmc8SlND
OjpVbmtub3duPj4gYWRqdXN0ZWRBcmd1bWVudHM7Ci0gICAgYWRqdXN0ZWRBcmd1bWVudHMuYXBw
ZW5kKHsgc3RhdGUtPnZtKCksIHRhcmdldCA/IHRhcmdldCA6IEpTQzo6anNOb250cml2aWFsU3Ry
aW5nKHN0YXRlLCAiVmlld3BvcnQiX3MpIH0pOworICAgIGFkanVzdGVkQXJndW1lbnRzLmFwcGVu
ZCh7IHZtLCB0YXJnZXQgPyB0YXJnZXQgOiBKU0M6OmpzTm9udHJpdmlhbFN0cmluZyh2bSwgIlZp
ZXdwb3J0Il9zKSB9KTsKICAgICBmb3IgKHNpemVfdCBpID0gKCF0YXJnZXQgPyAwIDogMSk7IGkg
PCBhcmd1bWVudHMtPmFyZ3VtZW50Q291bnQoKTsgKytpKQotICAgICAgICBhZGp1c3RlZEFyZ3Vt
ZW50cy5hcHBlbmQoeyBzdGF0ZS0+dm0oKSwgYXJndW1lbnRzLT5hcmd1bWVudEF0KGkpIH0pOwor
ICAgICAgICBhZGp1c3RlZEFyZ3VtZW50cy5hcHBlbmQoeyB2bSwgYXJndW1lbnRzLT5hcmd1bWVu
dEF0KGkpIH0pOwogICAgIGFyZ3VtZW50cyA9IFNjcmlwdEFyZ3VtZW50czo6Y3JlYXRlKCpzdGF0
ZSwgV1RGTW92ZShhZGp1c3RlZEFyZ3VtZW50cykpOwogICAgIGFkZE1lc3NhZ2UobWFrZVVuaXF1
ZTxJbnNwZWN0b3I6OkNvbnNvbGVNZXNzYWdlPihNZXNzYWdlU291cmNlOjpDb25zb2xlQVBJLCBN
ZXNzYWdlVHlwZTo6SW1hZ2UsIE1lc3NhZ2VMZXZlbDo6TG9nLCBkYXRhVVJMLCBXVEZNb3ZlKGFy
Z3VtZW50cykpKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0N1
c3RvbVBhaW50SW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0N1c3RvbVBhaW50SW1hZ2UuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9DdXN0b21QYWludEltYWdlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMTkgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0xNDcsNyArMTQ3LDcgQEAgSW1hZ2VEcmF3UmVzdWx0IEN1c3RvbVBhaW50SW1hZ2U6
OmRvQ3VzdAogICAgIGF1dG8gc2l6ZSA9IENTU1BhaW50U2l6ZTo6Y3JlYXRlKGRlc3RTaXplLndp
ZHRoKCksIGRlc3RTaXplLmhlaWdodCgpKTsKICAgICBSZWY8U3R5bGVQcm9wZXJ0eU1hcFJlYWRP
bmx5PiBwcm9wZXJ0eU1hcCA9IEhhc2hNYXBTdHlsZVByb3BlcnR5TWFwOjpjcmVhdGUoV1RGTW92
ZShwcm9wZXJ0eVZhbHVlcykpOwogCi0gICAgYXV0byYgdm0gPSAqcGFpbnRDb25zdHJ1Y3Rvci5n
ZXRPYmplY3QoKS0+dm0oKTsKKyAgICBhdXRvJiB2bSA9IHBhaW50Q29uc3RydWN0b3IuZ2V0T2Jq
ZWN0KCktPnZtKCk7CiAgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayh2bSk7CiAgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIGF1dG8mIGdsb2JhbE9iamVjdCA9
ICpwYWludENvbnN0cnVjdG9yLmdldE9iamVjdCgpLT5nbG9iYWxPYmplY3QoKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3Rlc3RpbmcvanMvV2ViQ29yZVRlc3RTdXBwb3J0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL2pzL1dlYkNvcmVUZXN0U3VwcG9ydC5jcHAJKHJl
dmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvanMvV2ViQ29yZVRlc3RT
dXBwb3J0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmln
aHQgKEMpIDIwMTEsIDIwMTUgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU3LDEyICs1NywxMiBAQCB1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKIHZvaWQgaW5qZWN0SW50ZXJuYWxzT2JqZWN0KEpTQ29udGV4dFJlZiBj
b250ZXh0KQogewogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHRvSlMoY29udGV4dCk7Ci0gICAgSlNM
b2NrSG9sZGVyIGxvY2soZXhlYyk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBKU0xv
Y2tIb2xkZXIgbG9jayh2bSk7CiAgICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9
IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSk7
CiAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0Q29udGV4dCA9IGdsb2JhbE9iamVj
dC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwogICAgIGlmIChpczxEb2N1bWVudD4oKnNjcmlw
dENvbnRleHQpKSB7Ci0gICAgICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgICAgIGdsb2Jh
bE9iamVjdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgSW50ZXJu
YWxzOjppbnRlcm5hbHNJZCksIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBJbnRlcm5hbHM6OmNy
ZWF0ZShkb3duY2FzdDxEb2N1bWVudD4oKnNjcmlwdENvbnRleHQpKSkpOworICAgICAgICBnbG9i
YWxPYmplY3QtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgSW50ZXJu
YWxzOjppbnRlcm5hbHNJZCksIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBJbnRlcm5hbHM6OmNy
ZWF0ZShkb3duY2FzdDxEb2N1bWVudD4oKnNjcmlwdENvbnRleHQpKSkpOwogICAgICAgICBnbG9i
YWxPYmplY3QtPmV4cG9zZURvbGxhclZNKHZtKTsKICAgICB9CiB9CkBAIC0yMDAsOSArMjAwLDEw
IEBAIHZvaWQgc2V0dXBOZXdseUNyZWF0ZWRTZXJ2aWNlV29ya2VyKHVpbnQKICAgICAgICAgICAg
IHJldHVybjsKIAogICAgICAgICBhdXRvJiBzdGF0ZSA9ICpnbG9iYWxTY29wZS5leGVjU3RhdGUo
KTsKLSAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2tlcihzdGF0ZS52bSgpKTsKKyAgICAgICAgYXV0
byYgdm0gPSBzdGF0ZS52bSgpOworICAgICAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKHZtKTsKICAg
ICAgICAgYXV0byogY29udGV4dFdyYXBwZXIgPSBzY3JpcHQtPndvcmtlckdsb2JhbFNjb3BlV3Jh
cHBlcigpOwotICAgICAgICBjb250ZXh0V3JhcHBlci0+cHV0RGlyZWN0KHN0YXRlLnZtKCksIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCBJbnRlcm5hbHM6OmludGVybmFsc0lkKSwgdG9K
Uygmc3RhdGUsIGNvbnRleHRXcmFwcGVyLCBTZXJ2aWNlV29ya2VySW50ZXJuYWxzOjpjcmVhdGUo
aWRlbnRpZmllcikpKTsKKyAgICAgICAgY29udGV4dFdyYXBwZXItPnB1dERpcmVjdCh2bSwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgSW50ZXJuYWxzOjppbnRlcm5hbHNJZCksIHRvSlMoJnN0
YXRlLCBjb250ZXh0V3JhcHBlciwgU2VydmljZVdvcmtlckludGVybmFsczo6Y3JlYXRlKGlkZW50
aWZpZXIpKSk7CiAgICAgfSk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShzZXJ2aWNlV29ya2Vy
SWRlbnRpZmllcik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS93b3JrbGV0cy9QYWludFdvcmtsZXRH
bG9iYWxTY29wZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd29ya2xldHMvUGFp
bnRXb3JrbGV0R2xvYmFsU2NvcGUuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvV2Vi
Q29yZS93b3JrbGV0cy9QYWludFdvcmtsZXRHbG9iYWxTY29wZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDE5IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NzEsNyArNzEsNyBAQCBQYWludFdvcmtsZXRHbG9iYWxTY29wZTo6UGFpbnREZWZpbml0aW9uCiAv
LyBodHRwczovL2RyYWZ0cy5jc3MtaG91ZGluaS5vcmcvY3NzLXBhaW50LWFwaS8jcmVnaXN0ZXJp
bmctY3VzdG9tLXBhaW50CiBFeGNlcHRpb25Pcjx2b2lkPiBQYWludFdvcmtsZXRHbG9iYWxTY29w
ZTo6cmVnaXN0ZXJQYWludChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0
JiBnbG9iYWxPYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgU3Ryb25nPEpTT2JqZWN0PiBwYWlu
dENvbnN0cnVjdG9yKQogewotICAgIGF1dG8mIHZtID0gKnBhaW50Q29uc3RydWN0b3ItPnZtKCk7
CisgICAgYXV0byYgdm0gPSBwYWludENvbnN0cnVjdG9yLT52bSgpOwogICAgIEpTQzo6SlNMb2Nr
SG9sZGVyIGxvY2sodm0pOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKIApAQCAtOTEsNyArOTEsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBQYWludFdvcmtsZXRHbG9i
YWxTY29wCiAKICAgICAgICAgVmVjdG9yPFN0cmluZz4gaW5wdXRQcm9wZXJ0aWVzOwogCi0gICAg
ICAgIEpTVmFsdWUgaW5wdXRQcm9wZXJ0aWVzSXRlcmFibGVWYWx1ZSA9IHBhaW50Q29uc3RydWN0
b3ItPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiaW5wdXRQcm9wZXJ0
aWVzIikpOworICAgICAgICBKU1ZhbHVlIGlucHV0UHJvcGVydGllc0l0ZXJhYmxlVmFsdWUgPSBw
YWludENvbnN0cnVjdG9yLT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAi
aW5wdXRQcm9wZXJ0aWVzIikpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBF
eGNlcHRpb24geyBFeGlzdGluZ0V4Y2VwdGlvbkVycm9yIH0pOwogCiAgICAgICAgIGlmICghaW5w
dXRQcm9wZXJ0aWVzSXRlcmFibGVWYWx1ZS5pc1VuZGVmaW5lZCgpKQpAQCAtMTAyLDcgKzEwMiw3
IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFBhaW50V29ya2xldEdsb2JhbFNjb3AKIAogICAgICAgICBW
ZWN0b3I8U3RyaW5nPiBpbnB1dEFyZ3VtZW50czsKIAotICAgICAgICBKU1ZhbHVlIGlucHV0QXJn
dW1lbnRzSXRlcmFibGVWYWx1ZSA9IHBhaW50Q29uc3RydWN0b3ItPmdldCgmc3RhdGUsIElkZW50
aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiaW5wdXRBcmd1bWVudHMiKSk7CisgICAgICAgIEpTVmFs
dWUgaW5wdXRBcmd1bWVudHNJdGVyYWJsZVZhbHVlID0gcGFpbnRDb25zdHJ1Y3Rvci0+Z2V0KCZz
dGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImlucHV0QXJndW1lbnRzIikpOwogICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBFeGNlcHRpb24geyBFeGlzdGluZ0V4Y2Vw
dGlvbkVycm9yIH0pOwogCiAgICAgICAgIGlmICghaW5wdXRBcmd1bWVudHNJdGVyYWJsZVZhbHVl
LmlzVW5kZWZpbmVkKCkpCkBAIC0xMTEsNyArMTExLDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gUGFp
bnRXb3JrbGV0R2xvYmFsU2NvcAogCiAgICAgICAgIC8vIEZJWE1FOiBQYXJzZSBzeW50YXggZm9y
IGlucHV0QXJndW1lbnRzIGhlcmUgKHN0ZXBzIDExIGFuZCAxMikuCiAKLSAgICAgICAgSlNWYWx1
ZSBjb250ZXh0T3B0aW9uc1ZhbHVlID0gcGFpbnRDb25zdHJ1Y3Rvci0+Z2V0KCZzdGF0ZSwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJjb250ZXh0T3B0aW9ucyIpKTsKKyAgICAgICAgSlNW
YWx1ZSBjb250ZXh0T3B0aW9uc1ZhbHVlID0gcGFpbnRDb25zdHJ1Y3Rvci0+Z2V0KCZzdGF0ZSwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImNvbnRleHRPcHRpb25zIikpOwogICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBFeGNlcHRpb24geyBFeGlzdGluZ0V4Y2VwdGlvbkVy
cm9yIH0pOwogICAgICAgICBVTlVTRURfUEFSQU0oY29udGV4dE9wdGlvbnNWYWx1ZSk7CiAKQEAg
LTEyNiw3ICsxMjYsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBQYWludFdvcmtsZXRHbG9iYWxTY29w
CiAgICAgICAgIGlmICghcHJvdG90eXBlVmFsdWUuaXNPYmplY3QoKSkKICAgICAgICAgICAgIHJl
dHVybiBFeGNlcHRpb24geyBUeXBlRXJyb3IsICJUaGUgc2Vjb25kIGFyZ3VtZW50IG11c3QgaGF2
ZSBhIHByb3RvdHlwZSB0aGF0IGlzIGFuIG9iamVjdCIgfTsKIAotICAgICAgICBKU1ZhbHVlIHBh
aW50VmFsdWUgPSBwcm90b3R5cGVWYWx1ZS5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKCZ2bSwgInBhaW50IikpOworICAgICAgICBKU1ZhbHVlIHBhaW50VmFsdWUgPSBwcm90b3R5
cGVWYWx1ZS5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAicGFpbnQiKSk7
CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEV4Y2VwdGlvbiB7IEV4aXN0aW5n
RXhjZXB0aW9uRXJyb3IgfSk7CiAKICAgICAgICAgaWYgKHBhaW50VmFsdWUuaXNVbmRlZmluZWQo
KSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNDkxMzUpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI1IEBACisyMDE5LTA4LTI3ICBNYXJrIExh
bSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBSZWZhY3RvciB0byB1c2UgVk0mIGlu
c3RlYWQgb2YgVk0qIGF0IGFzIG1hbnkgcGxhY2VzIGFzIHBvc3NpYmxlLgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAxMTcyCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9nbGliL0RPTS9XZWJLaXRET01Ob2RlLmNwcDoKKyAgICAgICAgKHdlYmtpdF9k
b21fbm9kZV9mb3JfanNfdmFsdWUpOgorICAgICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvRE9NL0luamVjdGVkQnVuZGxlTm9kZUhhbmRsZS5jcHA6CisgICAgICAgIChXZWJLaXQ6Oklu
amVjdGVkQnVuZGxlTm9kZUhhbmRsZTo6Z2V0T3JDcmVhdGUpOgorICAgICAgICAqIFdlYlByb2Nl
c3MvUGx1Z2lucy9OZXRzY2FwZS9KU05QT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6SlNO
UE9iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyk6CisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVn
aW5zL05ldHNjYXBlL05QSlNPYmplY3QuY3BwOgorICAgICAgICAoV2ViS2l0OjppZGVudGlmaWVy
RnJvbUlkZW50aWZpZXJSZXApOgorICAgICAgICAoV2ViS2l0OjpOUEpTT2JqZWN0OjplbnVtZXJh
dGUpOgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUFJ1bnRpbWVPYmpl
Y3RNYXAuY3BwOgorICAgICAgICAoV2ViS2l0OjpOUFJ1bnRpbWVPYmplY3RNYXA6OmNvbnZlcnRO
UFZhcmlhbnRUb0pTVmFsdWUpOgorICAgICAgICAoV2ViS2l0OjpOUFJ1bnRpbWVPYmplY3RNYXA6
OmNvbnZlcnRKU1ZhbHVlVG9OUFZhcmlhbnQpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJGcmFtZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lOjpjb3VudGVyVmFsdWUp
OgorCiAyMDE5LTA4LTI2ICBEZXZpbiBSb3Vzc28gIDxkcm91c3NvQGFwcGxlLmNvbT4KIAogICAg
ICAgICBXZWIgSW5zcGVjdG9yOiB1c2UgbW9yZSBDKysga2V5d29yZHMgZm9yIGRlZmluaW5nIGFn
ZW50cwpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
bGliL0RPTS9XZWJLaXRET01Ob2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2dsaWIvRE9NL1dlYktpdERPTU5vZGUuY3BwCShy
ZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2dsaWIvRE9NL1dlYktpdERPTU5vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTAs
NSArMTUwLDUgQEAgV2ViS2l0RE9NTm9kZSogd2Via2l0X2RvbV9ub2RlX2Zvcl9qc192YQogICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGpzY192YWx1ZV9pc19vYmplY3QodmFsdWUpLCBudWxscHRy
KTsKIAogICAgIGF1dG8qIGpzT2JqZWN0ID0gSlNWYWx1ZVRvT2JqZWN0KGpzY0NvbnRleHRHZXRK
U0NvbnRleHQoanNjX3ZhbHVlX2dldF9jb250ZXh0KHZhbHVlKSksIGpzY1ZhbHVlR2V0SlNWYWx1
ZSh2YWx1ZSksIG51bGxwdHIpOwotICAgIHJldHVybiBqc09iamVjdCA/IFdlYktpdDo6a2l0KFdl
YkNvcmU6OkpTTm9kZTo6dG9XcmFwcGVkKCp0b0pTKGpzT2JqZWN0KS0+dm0oKSwgdG9KUyhqc09i
amVjdCkpKSA6IG51bGxwdHI7CisgICAgcmV0dXJuIGpzT2JqZWN0ID8gV2ViS2l0OjpraXQoV2Vi
Q29yZTo6SlNOb2RlOjp0b1dyYXBwZWQodG9KUyhqc09iamVjdCktPnZtKCksIHRvSlMoanNPYmpl
Y3QpKSkgOiBudWxscHRyOwogfQpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0RPTS9JbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9ET00vSW5qZWN0ZWRCdW5k
bGVOb2RlSGFuZGxlLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0RPTS9JbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAx
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTcwLDcgKzcwLDcgQEAgc3RhdGljIERPTU5vZGVIYW5kbGVDYWNoZSYgZG9t
Tm9kZUhhbmRsZQogCiBSZWZQdHI8SW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxlPiBJbmplY3RlZEJ1
bmRsZU5vZGVIYW5kbGU6OmdldE9yQ3JlYXRlKEpTQ29udGV4dFJlZiwgSlNPYmplY3RSZWYgb2Jq
ZWN0KQogewotICAgIE5vZGUqIG5vZGUgPSBKU05vZGU6OnRvV3JhcHBlZCgqdG9KUyhvYmplY3Qp
LT52bSgpLCB0b0pTKG9iamVjdCkpOworICAgIE5vZGUqIG5vZGUgPSBKU05vZGU6OnRvV3JhcHBl
ZCh0b0pTKG9iamVjdCktPnZtKCksIHRvSlMob2JqZWN0KSk7CiAgICAgcmV0dXJuIGdldE9yQ3Jl
YXRlKG5vZGUpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9O
ZXRzY2FwZS9KU05QT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9KU05QT2JqZWN0LmNwcAkocmV2aXNpb24gMjQ5MTI4KQor
KysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNOUE9iamVjdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1MSw5ICs0NTEsOSBAQCB2b2lkIEpTTlBPYmplY3Q6Omdl
dE93blByb3BlcnR5TmFtZXMoSlNPCiAgICAgICAgICAgICBjb25zdCBjaGFyKiBzdHJpbmcgPSBp
ZGVudGlmaWVyUmVwLT5zdHJpbmcoKTsKICAgICAgICAgICAgIGludCBsZW5ndGggPSBzdHJsZW4o
c3RyaW5nKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgaWRlbnRpZmllciA9IElkZW50aWZp
ZXI6OmZyb21TdHJpbmcoZXhlYywgU3RyaW5nOjpmcm9tVVRGOFdpdGhMYXRpbjFGYWxsYmFjayhz
dHJpbmcsIGxlbmd0aCkpOworICAgICAgICAgICAgaWRlbnRpZmllciA9IElkZW50aWZpZXI6OmZy
b21TdHJpbmcodm0sIFN0cmluZzo6ZnJvbVVURjhXaXRoTGF0aW4xRmFsbGJhY2soc3RyaW5nLCBs
ZW5ndGgpKTsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBpZGVudGlmaWVyID0gSWRlbnRp
Zmllcjo6ZnJvbShleGVjLCBpZGVudGlmaWVyUmVwLT5udW1iZXIoKSk7CisgICAgICAgICAgICBp
ZGVudGlmaWVyID0gSWRlbnRpZmllcjo6ZnJvbSh2bSwgaWRlbnRpZmllclJlcC0+bnVtYmVyKCkp
OwogCiAgICAgICAgIHByb3BlcnR5TmFtZUFycmF5LmFkZChpZGVudGlmaWVyKTsKICAgICB9Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUEpTT2JqZWN0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRz
Y2FwZS9OUEpTT2JqZWN0LmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBKU09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMC0yMDE5IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
ODIsMTIgKzgyLDEzIEBAIHZvaWQgTlBKU09iamVjdDo6aW5pdGlhbGl6ZShWTSYgdm0sIE5QUnUK
IAogc3RhdGljIElkZW50aWZpZXIgaWRlbnRpZmllckZyb21JZGVudGlmaWVyUmVwKEV4ZWNTdGF0
ZSogZXhlYywgSWRlbnRpZmllclJlcCogaWRlbnRpZmllclJlcCkKIHsKKyAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOwogICAgIEFTU0VSVChpZGVudGlmaWVyUmVwLT5pc1N0cmluZygpKTsKIAogICAg
IGNvbnN0IGNoYXIqIHN0cmluZyA9IGlkZW50aWZpZXJSZXAtPnN0cmluZygpOwogICAgIGludCBs
ZW5ndGggPSBzdHJsZW4oc3RyaW5nKTsKIAotICAgIHJldHVybiBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKGV4ZWMsIFN0cmluZzo6ZnJvbVVURjhXaXRoTGF0aW4xRmFsbGJhY2soc3RyaW5nLCBsZW5n
dGgpKTsKKyAgICByZXR1cm4gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgU3RyaW5nOjpmcm9t
VVRGOFdpdGhMYXRpbjFGYWxsYmFjayhzdHJpbmcsIGxlbmd0aCkpOwogfQogCiBib29sIE5QSlNP
YmplY3Q6Omhhc01ldGhvZChOUElkZW50aWZpZXIgbWV0aG9kTmFtZSkKQEAgLTI1Miw3ICsyNTMs
NyBAQCBib29sIE5QSlNPYmplY3Q6OmVudW1lcmF0ZShOUElkZW50aWZpZXIqCiAgICAgVk0mIHZt
ID0gZXhlYy0+dm0oKTsKICAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CiAKLSAgICBQcm9wZXJ0
eU5hbWVBcnJheSBwcm9wZXJ0eU5hbWVzKCZ2bSwgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5ncywg
UHJpdmF0ZVN5bWJvbE1vZGU6OkV4Y2x1ZGUpOworICAgIFByb3BlcnR5TmFtZUFycmF5IHByb3Bl
cnR5TmFtZXModm0sIFByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3MsIFByaXZhdGVTeW1ib2xNb2Rl
OjpFeGNsdWRlKTsKICAgICBtX2pzT2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmdldFByb3BlcnR5
TmFtZXMobV9qc09iamVjdC5nZXQoKSwgZXhlYywgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25N
b2RlKCkpOwogCiAgICAgTlBJZGVudGlmaWVyKiBuYW1lSWRlbnRpZmllcnMgPSBucG5NZW1OZXdB
cnJheTxOUElkZW50aWZpZXI+KHByb3BlcnR5TmFtZXMuc2l6ZSgpKTsKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05QUnVudGltZU9iamVjdE1hcC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUv
TlBSdW50aW1lT2JqZWN0TWFwLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBSdW50aW1lT2JqZWN0TWFwLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEw
LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0xMjksNyArMTI5LDcgQEAgSlNWYWx1ZSBOUFJ1bnRpbWVPYmplY3RN
YXA6OmNvbnZlcnROUFZhcgogICAgICAgICByZXR1cm4ganNOdW1iZXIodmFyaWFudC52YWx1ZS5k
b3VibGVWYWx1ZSk7CiAKICAgICBjYXNlIE5QVmFyaWFudFR5cGVfU3RyaW5nOgotICAgICAgICBy
ZXR1cm4ganNTdHJpbmcoZXhlYywgU3RyaW5nOjpmcm9tVVRGOFdpdGhMYXRpbjFGYWxsYmFjayh2
YXJpYW50LnZhbHVlLnN0cmluZ1ZhbHVlLlVURjhDaGFyYWN0ZXJzLCAKKyAgICAgICAgcmV0dXJu
IGpzU3RyaW5nKGdsb2JhbE9iamVjdC0+dm0oKSwgU3RyaW5nOjpmcm9tVVRGOFdpdGhMYXRpbjFG
YWxsYmFjayh2YXJpYW50LnZhbHVlLnN0cmluZ1ZhbHVlLlVURjhDaGFyYWN0ZXJzLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2YXJpYW50LnZhbHVlLnN0cmluZ1ZhbHVlLlVURjhMZW5ndGgpKTsKICAgICBjYXNlIE5QVmFy
aWFudFR5cGVfT2JqZWN0OgogICAgICAgICByZXR1cm4gZ2V0T3JDcmVhdGVKU09iamVjdChnbG9i
YWxPYmplY3QsIHZhcmlhbnQudmFsdWUub2JqZWN0VmFsdWUpOwpAQCAtMTQxLDYgKzE0MSw3IEBA
IEpTVmFsdWUgTlBSdW50aW1lT2JqZWN0TWFwOjpjb252ZXJ0TlBWYXIKIAogdm9pZCBOUFJ1bnRp
bWVPYmplY3RNYXA6OmNvbnZlcnRKU1ZhbHVlVG9OUFZhcmlhbnQoRXhlY1N0YXRlKiBleGVjLCBK
U1ZhbHVlIHZhbHVlLCBOUFZhcmlhbnQmIHZhcmlhbnQpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKIAogICAgIFZPSURfVE9fTlBWQVJJ
QU5UKHZhcmlhbnQpOwpAQCAtMTcyLDcgKzE3Myw3IEBAIHZvaWQgTlBSdW50aW1lT2JqZWN0TWFw
Ojpjb252ZXJ0SlNWYWx1ZVQKICAgICB9CiAKICAgICBpZiAodmFsdWUuaXNPYmplY3QoKSkgewot
ICAgICAgICBOUE9iamVjdCogbnBPYmplY3QgPSBnZXRPckNyZWF0ZU5QT2JqZWN0KGV4ZWMtPnZt
KCksIGFzT2JqZWN0KHZhbHVlKSk7CisgICAgICAgIE5QT2JqZWN0KiBucE9iamVjdCA9IGdldE9y
Q3JlYXRlTlBPYmplY3Qodm0sIGFzT2JqZWN0KHZhbHVlKSk7CiAgICAgICAgIE9CSkVDVF9UT19O
UFZBUklBTlQobnBPYmplY3QsIHZhcmlhbnQpOwogICAgICAgICByZXR1cm47CiAgICAgfQpJbmRl
eDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmNwcAkocmV2
aXNpb24gMjQ5MTI4KQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJh
bWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MzgsNyArNzM4LDcgQEAgSlNWYWx1ZVJlZiBXZWJG
cmFtZTo6anNXcmFwcGVyRm9yV29ybGQoSQogCiBTdHJpbmcgV2ViRnJhbWU6OmNvdW50ZXJWYWx1
ZShKU09iamVjdFJlZiBlbGVtZW50KQogewotICAgIGlmICghdG9KUyhlbGVtZW50KS0+aW5oZXJp
dHM8SlNFbGVtZW50PigqdG9KUyhlbGVtZW50KS0+dm0oKSkpCisgICAgaWYgKCF0b0pTKGVsZW1l
bnQpLT5pbmhlcml0czxKU0VsZW1lbnQ+KHRvSlMoZWxlbWVudCktPnZtKCkpKQogICAgICAgICBy
ZXR1cm4gU3RyaW5nKCk7CiAKICAgICByZXR1cm4gY291bnRlclZhbHVlRm9yRWxlbWVudCgmanND
YXN0PEpTRWxlbWVudCo+KHRvSlMoZWxlbWVudCkpLT53cmFwcGVkKCkpOwpJbmRleDogU291cmNl
L1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXRM
ZWdhY3kvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjkgQEAKKzIwMTkt
MDgtMjcgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgorCisgICAgICAgIFJlZmFjdG9y
IHRvIHVzZSBWTSYgaW5zdGVhZCBvZiBWTSogYXQgYXMgbWFueSBwbGFjZXMgYXMgcG9zc2libGUu
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDExNzIK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIERPTS9E
T00ubW06CisgICAgICAgICgrW0RPTU5vZGUgX25vZGVGcm9tSlNXcmFwcGVyOl0pOgorICAgICAg
ICAqIERPTS9ET01VdGlsaXR5Lm1tOgorICAgICAgICAoY3JlYXRlRE9NV3JhcHBlcik6CisgICAg
ICAgICogUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5Ib3N0UHJveHkubW06CisgICAgICAg
IChpZGVudGlmaWVyRnJvbUlkZW50aWZpZXJSZXApOgorICAgICAgICAqIFBsdWdpbnMvSG9zdGVk
L05ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eS5tbToKKyAgICAgICAgKFdlYktpdDo6TmV0c2Nh
cGVQbHVnaW5JbnN0YW5jZVByb3h5OjplbnVtZXJhdGUpOgorICAgICAgICAoV2ViS2l0OjpnZXRP
YmplY3RJRCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6
YWRkVmFsdWVUb0FycmF5KToKKyAgICAgICAgKFdlYktpdDo6TmV0c2NhcGVQbHVnaW5JbnN0YW5j
ZVByb3h5OjpkZW1hcnNoYWxWYWx1ZUZyb21BcnJheSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHNj
YXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6cmV0YWluTG9jYWxPYmplY3QpOgorICAgICAgICAoV2Vi
S2l0OjpOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OnJlbGVhc2VMb2NhbE9iamVjdCk6Cisg
ICAgICAgICogUGx1Z2lucy9Ib3N0ZWQvUHJveHlJbnN0YW5jZS5tbToKKyAgICAgICAgKFdlYktp
dDo6UHJveHlJbnN0YW5jZTo6c3RyaW5nVmFsdWUgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpQ
cm94eUluc3RhbmNlOjpnZXRQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKiBXZWJWaWV3L1dlYkZy
YW1lLm1tOgorICAgICAgICAoLVtXZWJGcmFtZSBfc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlw
dEZyb21TdHJpbmc6d2l0aEdsb2JhbE9iamVjdDppblNjcmlwdFdvcmxkOl0pOgorCiAyMDE5LTA4
LTIzICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgW2dlb2xvY2F0
aW9uXSBSZW5hbWUgaW50ZXJmYWNlcyBhbmQgcmVtb3ZlIFtOb0ludGVyZmFjZU9iamVjdF0KSW5k
ZXg6IFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET00ubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTS5tbQkocmV2aXNpb24gMjQ5MTI4KQorKysgU291
cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTS5tbQkod29ya2luZyBjb3B5KQpAQCAtNTI5LDcg
KzUyOSw3IEBAIC0gKE5TQXJyYXkgKil0ZXh0UmVjdHMKICsgKGlkKV9ub2RlRnJvbUpTV3JhcHBl
cjooSlNPYmplY3RSZWYpanNXcmFwcGVyCiB7CiAgICAgSlNPYmplY3QqIG9iamVjdCA9IHRvSlMo
anNXcmFwcGVyKTsKLSAgICBpZiAoIW9iamVjdC0+aW5oZXJpdHM8SlNOb2RlPigqb2JqZWN0LT52
bSgpKSkKKyAgICBpZiAoIW9iamVjdC0+aW5oZXJpdHM8SlNOb2RlPihvYmplY3QtPnZtKCkpKQog
ICAgICAgICByZXR1cm4gbmlsOwogICAgIHJldHVybiBraXQoJmpzQ2FzdDxKU05vZGUqPihvYmpl
Y3QpLT53cmFwcGVkKCkpOwogfQpJbmRleDogU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RP
TVV0aWxpdHkubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RP
TVV0aWxpdHkubW0JKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L0RPTS9ET01VdGlsaXR5Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgSmFtZXMg
Ry4gU3BldGggKHNwZXRoQGVuZC5jb20pCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC03NCw3ICs3NCw3
IEBACiAKIHN0YXRpYyBXZWJTY3JpcHRPYmplY3QgKmNyZWF0ZURPTVdyYXBwZXIoSlNDOjpKU09i
amVjdCYganNXcmFwcGVyKQogewotICAgIEpTQzo6Vk0mIHZtID0gKmpzV3JhcHBlci52bSgpOwor
ICAgIEpTQzo6Vk0mIHZtID0ganNXcmFwcGVyLnZtKCk7CiAgICAgI2RlZmluZSBXUkFQKGNsYXNz
TmFtZSkgXAogICAgICAgICBpZiAoYXV0byogd3JhcHBlZCA9IFdlYkNvcmU6OkpTIyNjbGFzc05h
bWU6OnRvV3JhcHBlZCh2bSwgJmpzV3JhcHBlcikpIFwKICAgICAgICAgICAgIHJldHVybiBraXQo
d3JhcHBlZCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9QbHVnaW5zL0hvc3RlZC9O
ZXRzY2FwZVBsdWdpbkhvc3RQcm94eS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0TGVn
YWN5L21hYy9QbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkhvc3RQcm94eS5tbQkocmV2aXNp
b24gMjQ5MTI4KQorKysgU291cmNlL1dlYktpdExlZ2FjeS9tYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0
c2NhcGVQbHVnaW5Ib3N0UHJveHkubW0JKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02NjUsNyArNjY1LDcg
QEAgc3RhdGljIElkZW50aWZpZXIgaWRlbnRpZmllckZyb21JZGVudGlmaQogICAgIEFTU0VSVChp
ZGVudGlmaWVyLT5pc1N0cmluZygpKTsKICAgCiAgICAgY29uc3QgY2hhciogc3RyID0gaWRlbnRp
Zmllci0+c3RyaW5nKCk7ICAgIAotICAgIHJldHVybiBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZj
b21tb25WTSgpLCBTdHJpbmc6OmZyb21VVEY4V2l0aExhdGluMUZhbGxiYWNrKHN0ciwgc3RybGVu
KHN0cikpKTsKKyAgICByZXR1cm4gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhjb21tb25WTSgpLCBT
dHJpbmc6OmZyb21VVEY4V2l0aExhdGluMUZhbGxiYWNrKHN0ciwgc3RybGVuKHN0cikpKTsKIH0K
IAoga2Vybl9yZXR1cm5fdCBXS1BDSW52b2tlKG1hY2hfcG9ydF90IGNsaWVudFBvcnQsIHVpbnQz
Ml90IHBsdWdpbklELCB1aW50MzJfdCByZXF1ZXN0SUQsIHVpbnQzMl90IG9iamVjdElELCB1aW50
NjRfdCBzZXJ2ZXJJZGVudGlmaWVyLApJbmRleDogU291cmNlL1dlYktpdExlZ2FjeS9tYWMvUGx1
Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Lm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSW5z
dGFuY2VQcm94eS5tbQkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Lm1tCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDEwLCAy
MDE2IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
OC0yMDE5IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMTI3NSw3ICsxMjc1LDcgQEAgYm9vbCBOZXRzY2FwZVBsdWdpbklu
c3RhbmNlUHJveHk6OmVudW1lcgogCiAgICAgRXhlY1N0YXRlKiBleGVjID0gZnJhbWUtPnNjcmlw
dCgpLmdsb2JhbE9iamVjdChwbHVnaW5Xb3JsZCgpKS0+Z2xvYmFsRXhlYygpOwogIAotICAgIFBy
b3BlcnR5TmFtZUFycmF5IHByb3BlcnR5TmFtZXMoJnZtLCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJp
bmdzLCBQcml2YXRlU3ltYm9sTW9kZTo6RXhjbHVkZSk7CisgICAgUHJvcGVydHlOYW1lQXJyYXkg
cHJvcGVydHlOYW1lcyh2bSwgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5ncywgUHJpdmF0ZVN5bWJv
bE1vZGU6OkV4Y2x1ZGUpOwogICAgIG9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5nZXRQcm9wZXJ0
eU5hbWVzKG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlKCkpOwog
CiAgICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiBhcnJheSA9IGFkb3B0TlMoW1tOU011dGFi
bGVBcnJheSBhbGxvY10gaW5pdF0pOwpAQCAtMTMwMCw3ICsxMzAwLDcgQEAgYm9vbCBOZXRzY2Fw
ZVBsdWdpbkluc3RhbmNlUHJveHk6OmVudW1lcgogCiBzdGF0aWMgYm9vbCBnZXRPYmplY3RJRChO
ZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkqIHBsdWdpbkluc3RhbmNlUHJveHksIEpTT2JqZWN0
KiBvYmplY3QsIHVpbnQ2NF90JiBvYmplY3RJRCkKIHsKLSAgICBKU0M6OlZNJiB2bSA9ICpvYmpl
Y3QtPnZtKCk7CisgICAgSlNDOjpWTSYgdm0gPSBvYmplY3QtPnZtKCk7CiAgICAgaWYgKG9iamVj
dC0+Y2xhc3NJbmZvKHZtKSAhPSBQcm94eVJ1bnRpbWVPYmplY3Q6OmluZm8oKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCkBAIC0xMzE4LDcgKzEzMTgsOCBAQCBzdGF0aWMgYm9vbCBnZXRPYmpl
Y3RJRChOZXRzY2FwZVBsdWdpbkluCiAgICAgCiB2b2lkIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQ
cm94eTo6YWRkVmFsdWVUb0FycmF5KE5TTXV0YWJsZUFycmF5ICphcnJheSwgRXhlY1N0YXRlKiBl
eGVjLCBKU1ZhbHVlIHZhbHVlKQogewotICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOworICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOwogCiAgICAg
aWYgKHZhbHVlLmlzU3RyaW5nKCkpIHsKICAgICAgICAgW2FycmF5IGFkZE9iamVjdDpbTlNOdW1i
ZXIgbnVtYmVyV2l0aEludDpTdHJpbmdWYWx1ZVR5cGVdXTsKQEAgLTEzMzksNyArMTM0MCw3IEBA
IHZvaWQgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjphZGRWYWwKICAgICAgICAgICAgIFth
cnJheSBhZGRPYmplY3Q6W05TTnVtYmVyIG51bWJlcldpdGhJbnQ6b2JqZWN0SURdXTsKICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgIFthcnJheSBhZGRPYmplY3Q6W05TTnVtYmVyIG51bWJl
cldpdGhJbnQ6SlNPYmplY3RWYWx1ZVR5cGVdXTsKLSAgICAgICAgICAgIFthcnJheSBhZGRPYmpl
Y3Q6W05TTnVtYmVyIG51bWJlcldpdGhJbnQ6bV9sb2NhbE9iamVjdHMuaWRGb3JPYmplY3QoZXhl
Yy0+dm0oKSwgb2JqZWN0KV1dOworICAgICAgICAgICAgW2FycmF5IGFkZE9iamVjdDpbTlNOdW1i
ZXIgbnVtYmVyV2l0aEludDptX2xvY2FsT2JqZWN0cy5pZEZvck9iamVjdCh2bSwgb2JqZWN0KV1d
OwogICAgICAgICB9CiAgICAgfSBlbHNlCiAgICAgICAgIFthcnJheSBhZGRPYmplY3Q6W05TTnVt
YmVyIG51bWJlcldpdGhJbnQ6Vm9pZFZhbHVlVHlwZV1dOwpAQCAtMTM5NSw3ICsxMzk2LDcgQEAg
Ym9vbCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OmRlbWFycwogICAgICAgICBjYXNlIFN0
cmluZ1ZhbHVlVHlwZTogewogICAgICAgICAgICAgTlNTdHJpbmcgKnN0cmluZyA9IFthcnJheSBv
YmplY3RBdEluZGV4OmluZGV4KytdOwogICAgICAgICAgICAgCi0gICAgICAgICAgICByZXN1bHQg
PSBqc1N0cmluZyhleGVjLCBTdHJpbmcoc3RyaW5nKSk7CisgICAgICAgICAgICByZXN1bHQgPSBq
c1N0cmluZyhleGVjLT52bSgpLCBTdHJpbmcoc3RyaW5nKSk7CiAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICAgICAgfQogICAgICAgICBjYXNlIEpTT2JqZWN0VmFsdWVUeXBlOiB7CkBAIC0x
NDUzLDcgKzE0NTQsNyBAQCB2b2lkIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6ZGVtYXJz
CiAKIHZvaWQgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpyZXRhaW5Mb2NhbE9iamVjdChK
U0M6OkpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpIHx8IHZhbHVl
LmluaGVyaXRzPFByb3h5UnVudGltZU9iamVjdD4oKnZhbHVlLmdldE9iamVjdCgpLT52bSgpKSkK
KyAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkgfHwgdmFsdWUuaW5oZXJpdHM8UHJveHlSdW50aW1l
T2JqZWN0Pih2YWx1ZS5nZXRPYmplY3QoKS0+dm0oKSkpCiAgICAgICAgIHJldHVybjsKIAogICAg
IG1fbG9jYWxPYmplY3RzLnJldGFpbihhc09iamVjdCh2YWx1ZSkpOwpAQCAtMTQ2MSw3ICsxNDYy
LDcgQEAgdm9pZCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OnJldGFpbgogCiB2b2lkIE5l
dHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6cmVsZWFzZUxvY2FsT2JqZWN0KEpTQzo6SlNWYWx1
ZSB2YWx1ZSkKIHsKLSAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkgfHwgdmFsdWUuaW5oZXJpdHM8
UHJveHlSdW50aW1lT2JqZWN0PigqdmFsdWUuZ2V0T2JqZWN0KCktPnZtKCkpKQorICAgIGlmICgh
dmFsdWUuaXNPYmplY3QoKSB8fCB2YWx1ZS5pbmhlcml0czxQcm94eVJ1bnRpbWVPYmplY3Q+KHZh
bHVlLmdldE9iamVjdCgpLT52bSgpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9sb2NhbE9i
amVjdHMucmVsZWFzZShhc09iamVjdCh2YWx1ZSkpOwpJbmRleDogU291cmNlL1dlYktpdExlZ2Fj
eS9tYWMvUGx1Z2lucy9Ib3N0ZWQvUHJveHlJbnN0YW5jZS5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0TGVnYWN5L21hYy9QbHVnaW5zL0hvc3RlZC9Qcm94eUluc3RhbmNlLm1tCShyZXZp
c2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9QbHVnaW5zL0hvc3RlZC9Q
cm94eUluc3RhbmNlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwOC0yMDEwLCAyMDE2IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE5IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjgyLDcgKzI4Miw3IEBA
IEpTVmFsdWUgUHJveHlJbnN0YW5jZTo6ZGVmYXVsdFZhbHVlKEV4ZWMKIEpTVmFsdWUgUHJveHlJ
bnN0YW5jZTo6c3RyaW5nVmFsdWUoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogewogICAgIC8vIEZJ
WE1FOiBJbXBsZW1lbnQgc29tZXRoaW5nIHNlbnNpYmxlLgotICAgIHJldHVybiBqc0VtcHR5U3Ry
aW5nKGV4ZWMpOworICAgIHJldHVybiBqc0VtcHR5U3RyaW5nKGV4ZWMtPnZtKCkpOwogfQogCiBK
U1ZhbHVlIFByb3h5SW5zdGFuY2U6Om51bWJlclZhbHVlKEV4ZWNTdGF0ZSopIGNvbnN0CkBAIC0z
MTksNiArMzE5LDcgQEAgdm9pZCBQcm94eUluc3RhbmNlOjpnZXRQcm9wZXJ0eU5hbWVzKEV4ZQog
ICAgIAogICAgIE5TQXJyYXkgKmFycmF5ID0gW05TUHJvcGVydHlMaXN0U2VyaWFsaXphdGlvbiBw
cm9wZXJ0eUxpc3RXaXRoRGF0YTooX19icmlkZ2UgTlNEYXRhICopcmVwbHktPm1fcmVzdWx0Lmdl
dCgpIG9wdGlvbnM6TlNQcm9wZXJ0eUxpc3RJbW11dGFibGUgZm9ybWF0Om51bGxwdHIgZXJyb3I6
bnVsbHB0cl07CiAgICAgCisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBmb3IgKE5TTnVt
YmVyICpudW1iZXIgaW4gYXJyYXkpIHsKICAgICAgICAgSWRlbnRpZmllclJlcCogaWRlbnRpZmll
ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8SWRlbnRpZmllclJlcCo+KFtudW1iZXIgbG9uZ0xvbmdWYWx1
ZV0pOwogICAgICAgICBpZiAoIUlkZW50aWZpZXJSZXA6OmlzVmFsaWQoaWRlbnRpZmllcikpCkBA
IC0zMjYsOSArMzI3LDkgQEAgdm9pZCBQcm94eUluc3RhbmNlOjpnZXRQcm9wZXJ0eU5hbWVzKEV4
ZQogCiAgICAgICAgIGlmIChpZGVudGlmaWVyLT5pc1N0cmluZygpKSB7CiAgICAgICAgICAgICBj
b25zdCBjaGFyKiBzdHIgPSBpZGVudGlmaWVyLT5zdHJpbmcoKTsKLSAgICAgICAgICAgIG5hbWVB
cnJheS5hZGQoSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmY29tbW9uVk0oKSwgU3RyaW5nOjpmcm9t
VVRGOFdpdGhMYXRpbjFGYWxsYmFjayhzdHIsIHN0cmxlbihzdHIpKSkpOworICAgICAgICAgICAg
bmFtZUFycmF5LmFkZChJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBTdHJpbmc6OmZyb21VVEY4
V2l0aExhdGluMUZhbGxiYWNrKHN0ciwgc3RybGVuKHN0cikpKSk7CiAgICAgICAgIH0gZWxzZQot
ICAgICAgICAgICAgbmFtZUFycmF5LmFkZChJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGlkZW50aWZp
ZXItPm51bWJlcigpKSk7CisgICAgICAgICAgICBuYW1lQXJyYXkuYWRkKElkZW50aWZpZXI6OmZy
b20odm0sIGlkZW50aWZpZXItPm51bWJlcigpKSk7CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2Uv
V2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0JKHJldmlzaW9uIDI0OTEyOCkK
KysrIFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMTkg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0yMDkwLDcgKzIwOTAsNyBAQCAtIChOU1N0cmluZyAqKV9zdHJpbmdCeUV2YWx1
YXRpbmdKYXZhU2NyCiAKICAgICAvLyBUaGUgZ2xvYmFsIG9iamVjdCBpcyBwcm9iYWJseSBhIHBy
b3h5IG9iamVjdD8gLSBpZiBzbywgd2Uga25vdyBob3cgdG8gdXNlIHRoaXMhCiAgICAgSlNDOjpK
U09iamVjdCogZ2xvYmFsT2JqZWN0T2JqID0gdG9KUyhnbG9iYWxPYmplY3RSZWYpOwotICAgIEpT
Qzo6Vk0mIHZtID0gKmdsb2JhbE9iamVjdE9iai0+dm0oKTsKKyAgICBKU0M6OlZNJiB2bSA9IGds
b2JhbE9iamVjdE9iai0+dm0oKTsKICAgICBpZiAoIXN0cmNtcChnbG9iYWxPYmplY3RPYmotPmNs
YXNzSW5mbyh2bSktPmNsYXNzTmFtZSwgIkpTV2luZG93UHJveHkiKSkKICAgICAgICAgYW55V29y
bGRHbG9iYWxPYmplY3QgPSBKU0M6OmpzRHluYW1pY0Nhc3Q8SlNET01XaW5kb3cqPih2bSwgc3Rh
dGljX2Nhc3Q8SlNXaW5kb3dQcm94eSo+KGdsb2JhbE9iamVjdE9iaiktPndpbmRvdygpKTsKIAo=
</data>
<flag name="commit-queue"
          id="393091"
          type_id="3"
          status="-"
          setter="ews-watchlist"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>377353</attachid>
            <date>2019-08-27 11:06:27 -0700</date>
            <delta_ts>2019-08-27 15:01:00 -0700</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-201172.patch</filename>
            <type>text/plain</type>
            <size>1521865</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjQ5MTUwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExMjkg
QEAKKzIwMTktMDgtMjcgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgorCisgICAgICAg
IFJlZmFjdG9yIHRvIHVzZSBWTSYgaW5zdGVhZCBvZiBWTSogYXQgYXMgbWFueSBwbGFjZXMgYXMg
cG9zc2libGUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMDExNzIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBVc2luZyBWTSYgZG9jdW1lbnRzIG1vcmUgY2xlYXJseSB0aGF0IHRoZSBWTSBwb2ludGVyIGlz
IGV4cGVjdGVkIHRvIG5ldmVyIGJlIG51bGwKKyAgICAgICAgaW4gbW9zdCBjYXNlcy4gIFRoZXJl
IGFyZSBhIGZldyBwbGFjZXMgd2hlcmUgaXQgY2FuIGJlIG51bGwgKGUuZyBKU0xvY2ssIGFuZAor
ICAgICAgICBERkc6OlBsYW4pLiAgVGhvc2Ugd2lsbCBiZSBsZWZ0IHVzaW5nIGEgVk0qLgorCisg
ICAgICAgIEFsc28gY29udmVydGVkIHNvbWUgdXNlcyBvZiBFeGVjU3RhdGUqIHRvIHVzaW5nIFZN
JiBpbnN0ZWFkIHNpbmNlIHRoZSBFeGVjU3RhdGUqCisgICAgICAgIGlzIG9ubHkgdGhlcmUgdG8g
ZmV0Y2ggdGhlIFZNIHBvaW50ZXIuICBEb2luZyB0aGlzIGFsc28gcmVkdWNlcyB0aGUgbnVtYmVy
IG9mCisgICAgICAgIHRpbWVzIHdlIGhhdmUgdG8gY29tcHV0ZSBWTSogZnJvbSBFeGVjU3RhdGUq
LgorCisgICAgICAgIFRoaXMgcGF0Y2ggaXMgbm90IGV4aGF1c3RpdmUgaW4gY29udmVydGluZyB0
byB1c2UgVk0mLCBidXQgYXBwbGllcyB0aGUgY2hhbmdlIHRvCisgICAgICAgIG1hbnkgY29tbW9u
bHkgdXNlZCBwaWVjZXMgb2YgY29kZSBmb3IgYSBzdGFydC4KKworICAgICAgICBBbHNvIGZpeGVk
IGEgbWlzc2luZyBleGNlcHRpb24gY2hlY2sgaW4gSlNTdHJpbmc6OnRvSWRlbnRpZmllcigpIGFu
ZAorICAgICAgICBKU1ZhbHVlOjp0b1Byb3BlcnR5S2V5KCkgZXhwb3NlZCBieSB0aGlzIHBhdGNo
LgorCisgICAgICAgICogQVBJL0FQSUNhc3QuaDoKKyAgICAgICAgKHRvSlMpOgorICAgICAgICAq
IEFQSS9KU0FQSUdsb2JhbE9iamVjdC5tbToKKyAgICAgICAgKEpTQzo6SlNBUElHbG9iYWxPYmpl
Y3Q6Om1vZHVsZUxvYWRlclJlc29sdmUpOgorICAgICAgICAoSlNDOjpKU0FQSUdsb2JhbE9iamVj
dDo6bW9kdWxlTG9hZGVySW1wb3J0TW9kdWxlKToKKyAgICAgICAgKEpTQzo6SlNBUElHbG9iYWxP
YmplY3Q6Om1vZHVsZUxvYWRlckZldGNoKToKKyAgICAgICAgKEpTQzo6SlNBUElHbG9iYWxPYmpl
Y3Q6Om1vZHVsZUxvYWRlckNyZWF0ZUltcG9ydE1ldGFQcm9wZXJ0aWVzKToKKyAgICAgICAgKEpT
Qzo6SlNBUElHbG9iYWxPYmplY3Q6OmxvYWRBbmRFdmFsdWF0ZUpTU2NyaXB0TW9kdWxlKToKKyAg
ICAgICAgKiBBUEkvSlNDYWxsYmFja0NvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SlND
YWxsYmFja0NvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgICogQVBJL0pTQ2Fs
bGJhY2tPYmplY3RGdW5jdGlvbnMuaDoKKyAgICAgICAgKEpTQzo6SlNDYWxsYmFja09iamVjdDxQ
YXJlbnQ+Ojphc0NhbGxiYWNrT2JqZWN0KToKKyAgICAgICAgKEpTQzo6SlNDYWxsYmFja09iamVj
dDxQYXJlbnQ+Ojp+SlNDYWxsYmFja09iamVjdCk6CisgICAgICAgIChKU0M6OkpTQ2FsbGJhY2tP
YmplY3Q8UGFyZW50Pjo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleCk6CisgICAgICAgIChKU0M6
OkpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6cHV0QnlJbmRleCk6CisgICAgICAgIChKU0M6OkpT
Q2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6ZGVsZXRlUHJvcGVydHlCeUluZGV4KToKKyAgICAgICAg
KEpTQzo6SlNDYWxsYmFja09iamVjdDxQYXJlbnQ+OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFt
ZXMpOgorICAgICAgICAqIEFQSS9KU0NvbnRleHQubW06CisgICAgICAgICgtW0pTQ29udGV4dCBk
ZXBlbmRlbmN5SWRlbnRpZmllcnNGb3JNb2R1bGVKU1NjcmlwdDpdKToKKyAgICAgICAgKiBBUEkv
SlNPYmplY3RSZWYuY3BwOgorICAgICAgICAoSlNPYmplY3RNYWtlRnVuY3Rpb24pOgorICAgICAg
ICAoY2xhc3NJbmZvUHJpdmF0ZSk6CisgICAgICAgIChKU09iamVjdEdldFByaXZhdGUpOgorICAg
ICAgICAoSlNPYmplY3RTZXRQcml2YXRlKToKKyAgICAgICAgKEpTT2JqZWN0Q29weVByb3BlcnR5
TmFtZXMpOgorICAgICAgICAoSlNQcm9wZXJ0eU5hbWVBY2N1bXVsYXRvckFkZE5hbWUpOgorICAg
ICAgICAoSlNPYmplY3RHZXRQcm94eVRhcmdldCk6CisgICAgICAgICogQVBJL0pTU2NyaXB0UmVm
LmNwcDoKKyAgICAgICAgKHBhcnNlU2NyaXB0KToKKyAgICAgICAgKiBBUEkvSlNWYWx1ZVJlZi5j
cHA6CisgICAgICAgIChKU1ZhbHVlTWFrZVN0cmluZyk6CisgICAgICAgICogQVBJL09wYXF1ZUpT
U3RyaW5nLmNwcDoKKyAgICAgICAgKE9wYXF1ZUpTU3RyaW5nOjppZGVudGlmaWVyIGNvbnN0KToK
KyAgICAgICAgKiBBUEkvZ2xpYi9KU0NDb250ZXh0LmNwcDoKKyAgICAgICAgKGpzY19jb250ZXh0
X2NoZWNrX3N5bnRheCk6CisgICAgICAgICogS2V5d29yZExvb2t1cEdlbmVyYXRvci5weToKKyAg
ICAgICAgKFRyaWUucHJpbnRTdWJUcmVlQXNDKToKKyAgICAgICAgKiBTY3JpcHRzL3drYnVpbHRp
bnMvYnVpbHRpbnNfZ2VuZXJhdGVfd3JhcHBlcl9oZWFkZXIucHk6CisgICAgICAgIChCdWlsdGlu
c1dyYXBwZXJIZWFkZXJHZW5lcmF0b3IuZ2VuZXJhdGVfY29uc3RydWN0b3IpOgorICAgICAgICAq
IFNjcmlwdHMvd2tidWlsdGlucy9idWlsdGluc190ZW1wbGF0ZXMucHk6CisgICAgICAgICogYmlu
ZGluZ3MvU2NyaXB0RnVuY3Rpb25DYWxsLmNwcDoKKyAgICAgICAgKERlcHJlY2F0ZWQ6OlNjcmlw
dENhbGxBcmd1bWVudEhhbmRsZXI6OmFwcGVuZEFyZ3VtZW50KToKKyAgICAgICAgKERlcHJlY2F0
ZWQ6OlNjcmlwdEZ1bmN0aW9uQ2FsbDo6Y2FsbCk6CisgICAgICAgICogYmluZGluZ3MvU2NyaXB0
VmFsdWUuY3BwOgorICAgICAgICAoSW5zcGVjdG9yOjpqc1RvSW5zcGVjdG9yVmFsdWUpOgorICAg
ICAgICAqIGJ1aWx0aW5zL0J1aWx0aW5FeGVjdXRhYmxlcy5jcHA6CisgICAgICAgIChKU0M6OkJ1
aWx0aW5FeGVjdXRhYmxlczo6Y3JlYXRlRXhlY3V0YWJsZSk6CisgICAgICAgICogYnVpbHRpbnMv
QnVpbHRpbk5hbWVzLmNwcDoKKyAgICAgICAgKEpTQzo6QnVpbHRpbk5hbWVzOjpCdWlsdGluTmFt
ZXMpOgorICAgICAgICAqIGJ1aWx0aW5zL0J1aWx0aW5OYW1lcy5oOgorICAgICAgICAoSlNDOjpC
dWlsdGluTmFtZXM6OmdldFB1YmxpY05hbWUgY29uc3QpOgorICAgICAgICAqIGJ5dGVjb2RlL0J5
dGVjb2RlRHVtcGVyLmNwcDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVEdW1wZXI8QmxvY2s+Ojp2
bSBjb25zdCk6CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaDoKKyAgICAgICAg
KiBieXRlY29kZS9CeXRlY29kZUdlbmVyYXRvcmlmaWNhdGlvbi5jcHA6CisgICAgICAgIChKU0M6
OkJ5dGVjb2RlR2VuZXJhdG9yaWZpY2F0aW9uOjpCeXRlY29kZUdlbmVyYXRvcmlmaWNhdGlvbik6
CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yaWZpY2F0aW9uOjpzdG9yYWdlRm9yR2Vu
ZXJhdG9yTG9jYWwpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcmlmaWNhdGlvbjo6
cnVuKToKKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZUludHJpbnNpY1JlZ2lzdHJ5LmNwcDoK
KyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVJbnRyaW5zaWNSZWdpc3RyeTo6c2VudGluZWxNYXBCdWNr
ZXRWYWx1ZSk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlSW50cmluc2ljUmVnaXN0cnk6OnNlbnRp
bmVsU2V0QnVja2V0VmFsdWUpOgorICAgICAgICAqIGJ5dGVjb2RlL0NhbGxWYXJpYW50Lmg6Cisg
ICAgICAgIChKU0M6OkNhbGxWYXJpYW50OjppbnRlcm5hbEZ1bmN0aW9uIGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6Q2FsbFZhcmlhbnQ6OmZ1bmN0aW9uIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2Fs
bFZhcmlhbnQ6OmlzQ2xvc3VyZUNhbGwgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWxsVmFyaWFu
dDo6ZXhlY3V0YWJsZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhbGxWYXJpYW50OjpmdW5jdGlv
bkV4ZWN1dGFibGUgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWxsVmFyaWFudDo6bmF0aXZlRXhl
Y3V0YWJsZSBjb25zdCk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrOjpkdW1wU291cmNlKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2Nr
OjpDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNldENvbnN0YW50SWRlbnRp
ZmllclNldFJlZ2lzdGVycyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6c2V0TnVtUGFyYW1l
dGVycyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZmluYWxpemVCYXNlbGluZUpJVElubGlu
ZUNhY2hlcyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6dW5saW5rSW5jb21pbmdDYWxscyk6
CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6cmVwbGFjZW1lbnQpOgorICAgICAgICAoSlNDOjpD
b2RlQmxvY2s6OmNvbXB1dGVDYXBhYmlsaXR5TGV2ZWwpOgorICAgICAgICAoSlNDOjpDb2RlQmxv
Y2s6Om5vdGljZUluY29taW5nQ2FsbCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6bmFtZUZv
clJlZ2lzdGVyKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjppbnNlcnRCYXNpY0Jsb2NrQm91
bmRhcmllc0ZvckNvbnRyb2xGbG93UHJvZmlsZXIpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVC
bG9jay5oOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnZtIGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6Q29kZUJsb2NrOjpudW1iZXJPZkFyZ3VtZW50VmFsdWVQcm9maWxlcyk6CisgICAgICAgIChK
U0M6OkNvZGVCbG9jazo6dmFsdWVQcm9maWxlRm9yQXJndW1lbnQpOgorICAgICAgICAqIGJ5dGVj
b2RlL0RlZmVycmVkU291cmNlRHVtcC5jcHA6CisgICAgICAgIChKU0M6OkRlZmVycmVkU291cmNl
RHVtcDo6RGVmZXJyZWRTb3VyY2VEdW1wKToKKyAgICAgICAgKiBieXRlY29kZS9FdmFsQ29kZUJs
b2NrLmg6CisgICAgICAgICogYnl0ZWNvZGUvRnVuY3Rpb25Db2RlQmxvY2suaDoKKyAgICAgICAg
KiBieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcDoKKyAgICAgICAgKEpTQzo6R2V0QnlJZFN0YXR1
czo6Y29tcHV0ZUZyb21MTEludCk6CisgICAgICAgICogYnl0ZWNvZGUvR2xvYmFsQ29kZUJsb2Nr
Lmg6CisgICAgICAgIChKU0M6Okdsb2JhbENvZGVCbG9jazo6R2xvYmFsQ29kZUJsb2NrKToKKyAg
ICAgICAgKiBieXRlY29kZS9Nb2R1bGVQcm9ncmFtQ29kZUJsb2NrLmg6CisgICAgICAgICogYnl0
ZWNvZGUvT2JqZWN0QWxsb2NhdGlvblByb2ZpbGVJbmxpbmVzLmg6CisgICAgICAgIChKU0M6Ok9i
amVjdEFsbG9jYXRpb25Qcm9maWxlQmFzZTxEZXJpdmVkPjo6cG9zc2libGVEZWZhdWx0UHJvcGVy
dHlDb3VudCk6CisgICAgICAgICogYnl0ZWNvZGUvUG9seVByb3RvQWNjZXNzQ2hhaW4uY3BwOgor
ICAgICAgICAoSlNDOjpQb2x5UHJvdG9BY2Nlc3NDaGFpbjo6Y3JlYXRlKToKKyAgICAgICAgKiBi
eXRlY29kZS9Qcm9ncmFtQ29kZUJsb2NrLmg6CisgICAgICAgICogYnl0ZWNvZGUvUHJvcGVydHlD
b25kaXRpb24uY3BwOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6aXNXYXRjaGFi
bGVXaGVuVmFsaWQgY29uc3QpOgorICAgICAgICAqIGJ5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3Bw
OgorICAgICAgICAoSlNDOjpQdXRCeUlkU3RhdHVzOjpjb21wdXRlRnJvbUxMSW50KToKKyAgICAg
ICAgKiBieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHA6CisgICAgICAgIChKU0M6OlN0cnVj
dHVyZVN0dWJJbmZvOjppbml0R2V0QnlJZFNlbGYpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVT
dHViSW5mbzo6aW5pdFB1dEJ5SWRSZXBsYWNlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1
YkluZm86OmluaXRJbkJ5SWRTZWxmKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86
OmFkZEFjY2Vzc0Nhc2UpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6dmlzaXRX
ZWFrUmVmZXJlbmNlcyk6CisgICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3Bw
OgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6VW5saW5rZWRDb2RlQmxvY2spOgor
ICAgICAgICAqIGJ5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmg6CisgICAgICAgIChKU0M6OlVu
bGlua2VkQ29kZUJsb2NrOjphZGRTZXRDb25zdGFudCk6CisgICAgICAgIChKU0M6OlVubGlua2Vk
Q29kZUJsb2NrOjphZGRDb25zdGFudCk6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2Nr
OjphZGRGdW5jdGlvbkRlY2wpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6YWRk
RnVuY3Rpb25FeHByKToKKyAgICAgICAgKiBieXRlY29kZS9VbmxpbmtlZEV2YWxDb2RlQmxvY2su
aDoKKyAgICAgICAgKiBieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrLmg6CisgICAg
ICAgICogYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuY3BwOgorICAgICAgICAo
SlNDOjpnZW5lcmF0ZVVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2spOgorICAgICAgICAoSlNDOjpV
bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUpOgor
ICAgICAgICAqIGJ5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmg6CisgICAgICAg
ICogYnl0ZWNvZGUvVW5saW5rZWRHbG9iYWxDb2RlQmxvY2suaDoKKyAgICAgICAgKEpTQzo6VW5s
aW5rZWRHbG9iYWxDb2RlQmxvY2s6OlVubGlua2VkR2xvYmFsQ29kZUJsb2NrKToKKyAgICAgICAg
KiBieXRlY29kZS9VbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2suaDoKKyAgICAgICAgKiBi
eXRlY29kZS9VbmxpbmtlZFByb2dyYW1Db2RlQmxvY2suaDoKKyAgICAgICAgKiBieXRlY29tcGls
ZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRv
cjo6Qnl0ZWNvZGVHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6
cHVzaExleGljYWxTY29wZUludGVybmFsKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0
b3I6OmVtaXREaXJlY3RQdXRCeUlkKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6
OmdldFZhcmlhYmxlc1VuZGVyVERaKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6
OmFkZEJpZ0ludENvbnN0YW50KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmFk
ZFRlbXBsYXRlT2JqZWN0Q29uc3RhbnQpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRv
cjo6ZW1pdE5ld0RlZmF1bHRDb25zdHJ1Y3Rvcik6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2Vu
ZXJhdG9yOjplbWl0U2V0RnVuY3Rpb25OYW1lSWZOZWVkZWQpOgorICAgICAgICAqIGJ5dGVjb21w
aWxlci9CeXRlY29kZUdlbmVyYXRvci5oOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRv
cjo6dm0gY29uc3QpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cHJvcGVydHlO
YW1lcyBjb25zdCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0Tm9kZUlu
VGFpbFBvc2l0aW9uKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXREZWZp
bmVDbGFzc0VsZW1lbnRzKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRO
b2RlSW5Db25kaXRpb25Db250ZXh0KToKKyAgICAgICAgKiBieXRlY29tcGlsZXIvTm9kZXNDb2Rl
Z2VuLmNwcDoKKyAgICAgICAgKEpTQzo6UmVnRXhwTm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAg
ICAgKEpTQzo6QXJyYXlOb2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpGdW5jdGlv
bkNhbGxSZXNvbHZlTm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVJ
bnRyaW5zaWNOb2RlOjplbWl0X2ludHJpbnNpY19nZXRCeUlkRGlyZWN0UHJpdmF0ZSk6CisgICAg
ICAgIChKU0M6OkJ5dGVjb2RlSW50cmluc2ljTm9kZTo6ZW1pdF9pbnRyaW5zaWNfcHV0QnlJZERp
cmVjdFByaXZhdGUpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUludHJpbnNpY05vZGU6OmVtaXRf
aW50cmluc2ljX3RvT2JqZWN0KToKKyAgICAgICAgKEpTQzo6SW5zdGFuY2VPZk5vZGU6OmVtaXRC
eXRlY29kZSk6CisgICAgICAgICogZGVidWdnZXIvRGVidWdnZXIuY3BwOgorICAgICAgICAqIGRl
YnVnZ2VyL0RlYnVnZ2VyUGFyc2VEYXRhLmNwcDoKKyAgICAgICAgKEpTQzo6Z2F0aGVyRGVidWdn
ZXJQYXJzZURhdGEpOgorICAgICAgICAqIGRlYnVnZ2VyL0RlYnVnZ2VyU2NvcGUuY3BwOgorICAg
ICAgICAoSlNDOjpEZWJ1Z2dlclNjb3BlOjpuZXh0KToKKyAgICAgICAgKEpTQzo6RGVidWdnZXJT
Y29wZTo6bmFtZSBjb25zdCk6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyU2NvcGU6OmxvY2F0aW9u
IGNvbnN0KToKKyAgICAgICAgKiBkZmcvREZHRGVzaXJlZElkZW50aWZpZXJzLmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpEZXNpcmVkSWRlbnRpZmllcnM6OnJlYWxseUFkZCk6CisgICAgICAgICog
ZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QXJyYXlC
dWZmZXJWaWV3V2F0Y2hwb2ludEFkYXB0b3I6OmFkZCk6CisgICAgICAgIChKU0M6OkRGRzo6QWRh
cHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50QWRhcHRvcjo6YWRkKToKKyAgICAgICAgKiBkZmcvREZH
RnJvemVuVmFsdWUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpGcm96ZW5WYWx1ZTo6RnJvemVuVmFs
dWUpOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6R3Jh
cGg6OmNhbk9wdGltaXplU3RyaW5nT2JqZWN0QWNjZXNzKToKKyAgICAgICAgKiBkZmcvREZHSklU
Q29tcGlsZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpsaW5rT1NSRXhp
dHMpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpjb21waWxlRXhjZXB0aW9uSGFu
ZGxlcnMpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpsaW5rKToKKyAgICAgICAg
KEpTQzo6REZHOjplbWl0U3RhY2tPdmVyZmxvd0NoZWNrKToKKyAgICAgICAgKEpTQzo6REZHOjpK
SVRDb21waWxlcjo6Y29tcGlsZUZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21w
aWxlcjo6ZXhjZXB0aW9uQ2hlY2spOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpt
YWtlQ2F0Y2hPU1JFbnRyeUJ1ZmZlcik6CisgICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVyLmg6
CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmV4Y2VwdGlvbkNoZWNrV2l0aENhbGxG
cmFtZVJvbGxiYWNrKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6ZmFzdEV4Y2Vw
dGlvbkNoZWNrKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6dm0pOgorICAgICAg
ICAqIGRmZy9ERkdMYXp5SlNWYWx1ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6TGF6eUpTVmFs
dWU6OmdldFZhbHVlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6REZHOjpMYXp5SlNWYWx1ZTo6ZW1p
dCBjb25zdCk6CisgICAgICAgICogZGZnL0RGR09TUkVudHJ5LmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpwcmVwYXJlT1NSRW50cnkpOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0LmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpPU1JFeGl0Ojpjb21waWxlT1NSRXhpdCk6CisgICAgICAgIChKU0M6
OkRGRzo6T1NSRXhpdDo6ZGVidWdPcGVyYXRpb25QcmludFNwZWN1bGF0aW9uRmFpbHVyZSk6Cisg
ICAgICAgICogZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5oOgorICAgICAgICAoSlNDOjpE
Rkc6OmFkanVzdEZyYW1lQW5kU3RhY2tJbk9TUkV4aXRDb21waWxlclRodW5rKToKKyAgICAgICAg
KiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6bmV3VHlwZWRBcnJh
eVdpdGhTaXplKToKKyAgICAgICAgKEpTQzo6REZHOjpiaW5hcnlPcCk6CisgICAgICAgIChKU0M6
OkRGRzo6Yml0d2lzZUJpbmFyeU9wKToKKyAgICAgICAgKiBkZmcvREZHUGxhbi5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6UGxhbjo6UGxhbik6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZl
SklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdEFsbG9jYXRl
UmF3T2JqZWN0KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVN0
cmluZ1NsaWNlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUN1
cnJlbnRCbG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVD
aGVja1RyYXBzKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdl
dEJ5VmFsT25TdHJpbmcpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21w
aWxlRnJvbUNoYXJDb2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZVN0cmluZ1plcm9MZW5ndGgpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
Ojpjb21waWxlTG9naWNhbE5vdFN0cmluZ09yT3RoZXIpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjplbWl0U3RyaW5nQnJhbmNoKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6ZW1pdFN0cmluZ09yT3RoZXJCcmFuY2gpOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpjYWdlVHlwZWRBcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0R2xvYmFsT2JqZWN0KToKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5ld0Z1bmN0aW9uQ29tbW9uKToKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNyZWF0ZUFjdGl2YXRpb24pOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlQ3JlYXRlRGlyZWN0QXJn
dW1lbnRzKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVNwcmVh
ZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVOZXdBcnJheSk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVOZXdBcnJheVdpdGhT
cHJlYWQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJyYXlT
bGljZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcnJheVB1
c2gpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlVHlwZU9mKToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFsbG9jYXRlUHJvcGVy
dHlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVJl
YWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZl
SklUOjpjb21waWxlTnVrZVN0cnVjdHVyZUFuZFNldEJ1dHRlcmZseSk6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDYWxsRE9NR2V0dGVyKToKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNoZWNrU3ViQ2xhc3MpOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlTmV3U3RyaW5nT2JqZWN0KToKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5ld1R5cGVkQXJyYXlXaXRoU2l6
ZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVOZXdSZWdleHAp
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlU3RvcmVCYXJyaWVy
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVN0cmluZ1JlcGxh
Y2UpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlTWF0ZXJpYWxp
emVOZXdPYmplY3QpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0QWxs
b2NhdGVCdXR0ZXJmbHkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21w
aWxlR2V0TWFwQnVja2V0TmV4dCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVPYmplY3RLZXlzKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZUNyZWF0ZVRoaXMpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpj
b21waWxlTmV3T2JqZWN0KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUxvZ1NoYWRvd0NoaWNrZW5Qcm9sb2d1ZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVMb2dTaGFkb3dDaGlja2VuVGFpbCk6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRQcm90b3R5cGVPZik6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBbGxvY2F0ZU5ld0FycmF5V2l0aFNpemUpOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlUHJvZmlsZVR5cGUpOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlTWFrZVJvcGUpOgorICAg
ICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjp2bSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnByZXBh
cmVGb3JFeHRlcm5hbENhbGwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpl
bWl0QWxsb2NhdGVKU09iamVjdFdpdGhLbm93blNpemUpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjplbWl0QWxsb2NhdGVKU09iamVjdCk6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmVtaXRBbGxvY2F0ZVZhcmlhYmxlU2l6ZWRKU09iamVjdCk6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVtaXRBbGxvY2F0ZURlc3RydWN0aWJsZU9i
amVjdCk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbCk6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVMb2dpY2FsTm90KToKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdEJyYW5jaCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVOb25Q
ZWVwaG9sZUNvbXBhcmVOdWxsT3JVbmRlZmluZWQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNoTnVsbE9yVW5kZWZpbmVkKToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwpOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0T3JPdGhlckxvZ2ljYWxOb3Qp
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlTG9naWNhbE5vdCk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVtaXRPYmplY3RPck90aGVyQnJh
bmNoKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdEJyYW5jaCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRm
Zy9ERkdUaHVua3MuY3BwOgorICAgICAgICAoSlNDOjpERkc6Om9zckV4aXRUaHVua0dlbmVyYXRv
cik6CisgICAgICAgIChKU0M6OkRGRzo6b3NyRXhpdEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcik6
CisgICAgICAgIChKU0M6OkRGRzo6b3NyRW50cnlUaHVua0dlbmVyYXRvcik6CisgICAgICAgICog
ZGZnL0RGR1RodW5rcy5oOgorICAgICAgICAqIGRmZy9ERkdUb0ZUTEZvck9TUkVudHJ5RGVmZXJy
ZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpUb0ZUTEZvck9T
UkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjpjb21waWxhdGlvbkRpZENvbXBsZXRl
KToKKyAgICAgICAgKiBkZmcvREZHV29ya2xpc3QuY3BwOgorICAgICAgICAoSlNDOjpERkc6Oldv
cmtsaXN0Ojp2aXNpdFdlYWtSZWZlcmVuY2VzKToKKyAgICAgICAgKiBkeW5iZW5jaC5jcHA6Cisg
ICAgICAgIChtYWluKToKKyAgICAgICAgKiBmdGwvRlRMTG93ZXJERkdUb0IzLmNwcDoKKyAgICAg
ICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZU1ha2VSb3BlKToKKyAgICAg
ICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZVN0cmluZ1NsaWNlKToKKyAg
ICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Ym9vbGlmeSk6CisgICAgICAgICog
ZnRsL0ZUTFRodW5rcy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Z2VuZXJpY0dlbmVyYXRpb25U
aHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkZUTDo6b3NyRXhpdEdlbmVyYXRpb25UaHVu
a0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkZUTDo6bGF6eVNsb3dQYXRoR2VuZXJhdGlvblRo
dW5rR2VuZXJhdG9yKToKKyAgICAgICAgKiBmdGwvRlRMVGh1bmtzLmg6CisgICAgICAgICogaGVh
cC9DZWxsQ29udGFpbmVyLmg6CisgICAgICAgICogaGVhcC9DZWxsQ29udGFpbmVySW5saW5lcy5o
OgorICAgICAgICAoSlNDOjpDZWxsQ29udGFpbmVyOjp2bSBjb25zdCk6CisgICAgICAgIChKU0M6
OkNlbGxDb250YWluZXI6OmhlYXAgY29uc3QpOgorICAgICAgICAqIGhlYXAvQ29tcGxldGVTdWJz
cGFjZS5jcHA6CisgICAgICAgIChKU0M6OkNvbXBsZXRlU3Vic3BhY2U6OnRyeUFsbG9jYXRlU2xv
dyk6CisgICAgICAgIChKU0M6OkNvbXBsZXRlU3Vic3BhY2U6OnJlYWxsb2NhdGVMYXJnZUFsbG9j
YXRpb25Ob25WaXJ0dWFsKToKKyAgICAgICAgKiBoZWFwL0dDQWN0aXZpdHlDYWxsYmFjay5oOgor
ICAgICAgICAqIGhlYXAvR0NBc3NlcnRpb25zLmg6CisgICAgICAgICogaGVhcC9IYW5kbGVTZXQu
Y3BwOgorICAgICAgICAoSlNDOjpIYW5kbGVTZXQ6OkhhbmRsZVNldCk6CisgICAgICAgICogaGVh
cC9IYW5kbGVTZXQuaDoKKyAgICAgICAgKEpTQzo6SGFuZGxlU2V0Ojp2bSk6CisgICAgICAgICog
aGVhcC9IZWFwLmNwcDoKKyAgICAgICAgKEpTQzo6SGVhcDo6SGVhcCk6CisgICAgICAgIChKU0M6
OkhlYXA6Omxhc3RDaGFuY2VUb0ZpbmFsaXplKToKKyAgICAgICAgKEpTQzo6SGVhcDo6cmVsZWFz
ZURlbGF5ZWRSZWxlYXNlZE9iamVjdHMpOgorICAgICAgICAoSlNDOjpIZWFwOjpwcm90ZWN0KToK
KyAgICAgICAgKEpTQzo6SGVhcDo6dW5wcm90ZWN0KToKKyAgICAgICAgKEpTQzo6SGVhcDo6Zmlu
YWxpemVNYXJrZWRVbmNvbmRpdGlvbmFsRmluYWxpemVycyk6CisgICAgICAgIChKU0M6OkhlYXA6
OmZpbmFsaXplVW5jb25kaXRpb25hbEZpbmFsaXplcnMpOgorICAgICAgICAoSlNDOjpIZWFwOjpj
b21wbGV0ZUFsbEpJVFBsYW5zKToKKyAgICAgICAgKEpTQzo6SGVhcDo6aXRlcmF0ZUV4ZWN1dGlu
Z0FuZENvbXBpbGluZ0NvZGVCbG9ja3MpOgorICAgICAgICAoSlNDOjpIZWFwOjpnYXRoZXJKU1N0
YWNrUm9vdHMpOgorICAgICAgICAoSlNDOjpIZWFwOjpnYXRoZXJTY3JhdGNoQnVmZmVyUm9vdHMp
OgorICAgICAgICAoSlNDOjpIZWFwOjpyZW1vdmVEZWFkQ29tcGlsZXJXb3JrbGlzdEVudHJpZXMp
OgorICAgICAgICAoSlNDOjpIZWFwOjppc0FuYWx5emluZ0hlYXAgY29uc3QpOgorICAgICAgICAo
SlNDOjpIZWFwOjpnYXRoZXJFeHRyYUhlYXBEYXRhKToKKyAgICAgICAgKEpTQzo6SGVhcDo6cHJv
dGVjdGVkT2JqZWN0VHlwZUNvdW50cyk6CisgICAgICAgIChKU0M6OkhlYXA6Om9iamVjdFR5cGVD
b3VudHMpOgorICAgICAgICAoSlNDOjpIZWFwOjpkZWxldGVBbGxDb2RlQmxvY2tzKToKKyAgICAg
ICAgKEpTQzo6SGVhcDo6ZGVsZXRlQWxsVW5saW5rZWRDb2RlQmxvY2tzKToKKyAgICAgICAgKEpT
Qzo6SGVhcDo6ZGVsZXRlVW5tYXJrZWRDb21waWxlZENvZGUpOgorICAgICAgICAoSlNDOjpIZWFw
OjpjaGVja0Nvbm4pOgorICAgICAgICAoSlNDOjpIZWFwOjpydW5FbmRQaGFzZSk6CisgICAgICAg
IChKU0M6OkhlYXA6OnN0b3BUaGVQZXJpcGhlcnkpOgorICAgICAgICAoSlNDOjpIZWFwOjpmaW5h
bGl6ZSk6CisgICAgICAgIChKU0M6OkhlYXA6OnJlcXVlc3RDb2xsZWN0aW9uKToKKyAgICAgICAg
KEpTQzo6SGVhcDo6c3dlZXBJbkZpbmFsaXplKToKKyAgICAgICAgKEpTQzo6SGVhcDo6c3dlZXBB
cnJheUJ1ZmZlcnMpOgorICAgICAgICAoSlNDOjpIZWFwOjpkZWxldGVTb3VyY2VQcm92aWRlckNh
Y2hlcyk6CisgICAgICAgIChKU0M6OkhlYXA6OmRpZEZpbmlzaENvbGxlY3Rpb24pOgorICAgICAg
ICAoSlNDOjpIZWFwOjphZGRDb3JlQ29uc3RyYWludHMpOgorICAgICAgICAqIGhlYXAvSGVhcC5o
OgorICAgICAgICAqIGhlYXAvSGVhcENlbGwuaDoKKyAgICAgICAgKiBoZWFwL0hlYXBDZWxsSW5s
aW5lcy5oOgorICAgICAgICAoSlNDOjpIZWFwQ2VsbDo6aGVhcCBjb25zdCk6CisgICAgICAgIChK
U0M6OkhlYXBDZWxsOjp2bSBjb25zdCk6CisgICAgICAgICogaGVhcC9IZWFwSW5saW5lcy5oOgor
ICAgICAgICAoSlNDOjpIZWFwOjp2bSBjb25zdCk6CisgICAgICAgICogaGVhcC9Jc29TdWJzcGFj
ZVBlclZNLmNwcDoKKyAgICAgICAgKEpTQzo6SXNvU3Vic3BhY2VQZXJWTTo6QXV0b3JlbW92aW5n
SXNvU3Vic3BhY2U6On5BdXRvcmVtb3ZpbmdJc29TdWJzcGFjZSk6CisgICAgICAgICogaGVhcC9M
YXJnZUFsbG9jYXRpb24uY3BwOgorICAgICAgICAoSlNDOjpMYXJnZUFsbG9jYXRpb246OnN3ZWVw
KToKKyAgICAgICAgKEpTQzo6TGFyZ2VBbGxvY2F0aW9uOjphc3NlcnRWYWxpZENlbGwgY29uc3Qp
OgorICAgICAgICAqIGhlYXAvTGFyZ2VBbGxvY2F0aW9uLmg6CisgICAgICAgIChKU0M6Okxhcmdl
QWxsb2NhdGlvbjo6dm0gY29uc3QpOgorICAgICAgICAqIGhlYXAvTG9jYWxBbGxvY2F0b3IuY3Bw
OgorICAgICAgICAoSlNDOjpMb2NhbEFsbG9jYXRvcjo6YWxsb2NhdGVTbG93Q2FzZSk6CisgICAg
ICAgICogaGVhcC9NYXJrZWRCbG9jay5jcHA6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpI
YW5kbGU6OkhhbmRsZSk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjphYm91dFRvTWFya1Ns
b3cpOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6YXNzZXJ0TWFya3NOb3RTdGFsZSk6Cisg
ICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjphcmVNYXJrc1N0YWxlKToKKyAgICAgICAgKEpTQzo6
TWFya2VkQmxvY2s6OmlzTWFya2VkKToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OmFzc2Vy
dFZhbGlkQ2VsbCBjb25zdCk6CisgICAgICAgICogaGVhcC9NYXJrZWRCbG9jay5oOgorICAgICAg
ICAoSlNDOjpNYXJrZWRCbG9jazo6SGFuZGxlOjp2bSBjb25zdCk6CisgICAgICAgIChKU0M6Ok1h
cmtlZEJsb2NrOjp2bSBjb25zdCk6CisgICAgICAgICogaGVhcC9NYXJrZWRCbG9ja0lubGluZXMu
aDoKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OmhlYXAgY29uc3QpOgorICAgICAgICAoSlND
OjpNYXJrZWRCbG9jazo6SGFuZGxlOjpzcGVjaWFsaXplZFN3ZWVwKToKKyAgICAgICAgKiBoZWFw
L1Nsb3RWaXNpdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6dmFsaWRhdGUpOgorICAgICAgICAqIGhl
YXAvU2xvdFZpc2l0b3JJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjp2bSk6
CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjp2bSBjb25zdCk6CisgICAgICAgICogaGVhcC9T
dG9wSWZOZWNlc3NhcnlUaW1lci5jcHA6CisgICAgICAgIChKU0M6OlN0b3BJZk5lY2Vzc2FyeVRp
bWVyOjpTdG9wSWZOZWNlc3NhcnlUaW1lcik6CisgICAgICAgICogaGVhcC9TdG9wSWZOZWNlc3Nh
cnlUaW1lci5oOgorICAgICAgICAqIGhlYXAvU3Ryb25nLmg6CisgICAgICAgIChKU0M6OlN0cm9u
Zzo6b3BlcmF0b3I9KToKKyAgICAgICAgKiBoZWFwL1dlYWtTZXQuaDoKKyAgICAgICAgKEpTQzo6
V2Vha1NldDo6V2Vha1NldCk6CisgICAgICAgIChKU0M6OldlYWtTZXQ6OnZtIGNvbnN0KToKKyAg
ICAgICAgKiBpbnNwZWN0b3IvSlNJbmplY3RlZFNjcmlwdEhvc3QuY3BwOgorICAgICAgICAoSW5z
cGVjdG9yOjpKU0luamVjdGVkU2NyaXB0SG9zdDo6c2F2ZWRSZXN1bHRBbGlhcyBjb25zdCk6Cisg
ICAgICAgIChJbnNwZWN0b3I6OkpTSW5qZWN0ZWRTY3JpcHRIb3N0OjppbnRlcm5hbENvbnN0cnVj
dG9yTmFtZSk6CisgICAgICAgIChJbnNwZWN0b3I6OkpTSW5qZWN0ZWRTY3JpcHRIb3N0OjpzdWJ0
eXBlKToKKyAgICAgICAgKEluc3BlY3Rvcjo6SlNJbmplY3RlZFNjcmlwdEhvc3Q6OmZ1bmN0aW9u
RGV0YWlscyk6CisgICAgICAgIChJbnNwZWN0b3I6OmNvbnN0cnVjdEludGVybmFsUHJvcGVydHkp
OgorICAgICAgICAoSW5zcGVjdG9yOjpKU0luamVjdGVkU2NyaXB0SG9zdDo6Z2V0SW50ZXJuYWxQ
cm9wZXJ0aWVzKToKKyAgICAgICAgKEluc3BlY3Rvcjo6SlNJbmplY3RlZFNjcmlwdEhvc3Q6Ondl
YWtNYXBFbnRyaWVzKToKKyAgICAgICAgKEluc3BlY3Rvcjo6SlNJbmplY3RlZFNjcmlwdEhvc3Q6
OndlYWtTZXRFbnRyaWVzKToKKyAgICAgICAgKEluc3BlY3Rvcjo6SlNJbmplY3RlZFNjcmlwdEhv
c3Q6Oml0ZXJhdG9yRW50cmllcyk6CisgICAgICAgIChJbnNwZWN0b3I6OkpTSW5qZWN0ZWRTY3Jp
cHRIb3N0OjpxdWVyeUluc3RhbmNlcyk6CisgICAgICAgIChJbnNwZWN0b3I6OkpTSW5qZWN0ZWRT
Y3JpcHRIb3N0OjpxdWVyeUhvbGRlcnMpOgorICAgICAgICAqIGluc3BlY3Rvci9KU0phdmFTY3Jp
cHRDYWxsRnJhbWUuY3BwOgorICAgICAgICAoSW5zcGVjdG9yOjp2YWx1ZUZvclNjb3BlTG9jYXRp
b24pOgorICAgICAgICAoSW5zcGVjdG9yOjpKU0phdmFTY3JpcHRDYWxsRnJhbWU6OnNjb3BlRGVz
Y3JpcHRpb25zKToKKyAgICAgICAgKEluc3BlY3Rvcjo6SlNKYXZhU2NyaXB0Q2FsbEZyYW1lOjpm
dW5jdGlvbk5hbWUgY29uc3QpOgorICAgICAgICAoSW5zcGVjdG9yOjpKU0phdmFTY3JpcHRDYWxs
RnJhbWU6OnR5cGUgY29uc3QpOgorICAgICAgICAqIGluc3BlY3Rvci9TY3JpcHRDYWxsU3RhY2tG
YWN0b3J5LmNwcDoKKyAgICAgICAgKEluc3BlY3Rvcjo6ZXh0cmFjdFNvdXJjZUluZm9ybWF0aW9u
RnJvbUV4Y2VwdGlvbik6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBdWRp
dEFnZW50LmNwcDoKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5zcGVjdG9yQXVkaXRBZ2VudDo6cG9w
dWxhdGVBdWRpdE9iamVjdCk6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JI
ZWFwQWdlbnQuY3BwOgorICAgICAgICAoSW5zcGVjdG9yOjpJbnNwZWN0b3JIZWFwQWdlbnQ6Omdj
KToKKyAgICAgICAgKiBpbnRlcnByZXRlci9GcmFtZVRyYWNlcnMuaDoKKyAgICAgICAgKEpTQzo6
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyOjpOYXRpdmVDYWxsRnJhbWVUcmFjZXIpOgorICAgICAgICAq
IGludGVycHJldGVyL0ludGVycHJldGVyLmNwcDoKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6
OmV4ZWN1dGVQcm9ncmFtKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OnByZXBhcmVGb3JS
ZXBlYXRDYWxsKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmV4ZWN1dGUpOgorICAgICAg
ICAoSlNDOjpJbnRlcnByZXRlcjo6ZXhlY3V0ZU1vZHVsZVByb2dyYW0pOgorICAgICAgICAqIGlu
dGVycHJldGVyL1N0YWNrVmlzaXRvci5jcHA6CisgICAgICAgIChKU0M6OlN0YWNrVmlzaXRvcjo6
RnJhbWU6OmNhbGxlZVNhdmVSZWdpc3RlcnNGb3JVbndpbmRpbmcpOgorICAgICAgICAoSlNDOjpT
dGFja1Zpc2l0b3I6OkZyYW1lOjpjb21wdXRlTGluZUFuZENvbHVtbiBjb25zdCk6CisgICAgICAg
ICogaml0L0Fzc2VtYmx5SGVscGVycy5jcHA6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVy
czo6ZW1pdER1bWJWaXJ0dWFsQ2FsbCk6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6
ZW1pdENvbnZlcnRWYWx1ZVRvQm9vbGVhbik6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVy
czo6YnJhbmNoSWZWYWx1ZSk6CisgICAgICAgICogaml0L0Fzc2VtYmx5SGVscGVycy5oOgorICAg
ICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OnZtKToKKyAgICAgICAgKiBqaXQvSklULmNwcDoK
KyAgICAgICAgKEpTQzo6SklUOjpKSVQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRFbnRlck9w
dGltaXphdGlvbkNoZWNrKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZU1haW5Q
YXNzKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUV4Y2VwdGlvbkhhbmRsZXJz
KToKKyAgICAgICAgKiBqaXQvSklULmg6CisgICAgICAgICogaml0L0pJVENhbGwuY3BwOgorICAg
ICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKToKKyAgICAgICAgKiBqaXQv
SklUQ2FsbDMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlQ2FsbEV2YWxTbG93
Q2FzZSk6CisgICAgICAgICogaml0L0pJVEV4Y2VwdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpn
ZW5lcmljVW53aW5kKToKKyAgICAgICAgKiBqaXQvSklURXhjZXB0aW9ucy5oOgorICAgICAgICAq
IGppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkpJVEdldEJ5
SWRHZW5lcmF0b3I6OkpJVEdldEJ5SWRHZW5lcmF0b3IpOgorICAgICAgICAqIGppdC9KSVRPcGNv
ZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2lzX3VuZGVmaW5lZCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qZmFsc2UpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfamVxX251bGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfam5lcV9udWxsKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX2p0cnVlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX3Rocm93KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2NhdGNoKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX2VxX251bGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
bmVxX251bGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2xvb3BfaGludCk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fcHJvbG9ndWUpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWwpOgorICAg
ICAgICAqIGppdC9KSVRPcGNvZGVzMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfamZhbHNlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2p0cnVlKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX3Rocm93KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2Nh
dGNoKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl9wcm9s
b2d1ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFp
bCk6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpvcGVy
YXRpb25OZXdGdW5jdGlvbkNvbW1vbik6CisgICAgICAgIChKU0M6OnRyeUdldEJ5VmFsT3B0aW1p
emUpOgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdFdyaXRlQmFycmllcik6CisgICAgICAgICogaml0L0pJVFRodW5rcy5jcHA6Cisg
ICAgICAgIChKU0M6OkpJVFRodW5rczo6Y3RpTmF0aXZlQ2FsbCk6CisgICAgICAgIChKU0M6OkpJ
VFRodW5rczo6Y3RpTmF0aXZlQ29uc3RydWN0KToKKyAgICAgICAgKEpTQzo6SklUVGh1bmtzOjpj
dGlOYXRpdmVUYWlsQ2FsbCk6CisgICAgICAgIChKU0M6OkpJVFRodW5rczo6Y3RpTmF0aXZlVGFp
bENhbGxXaXRob3V0U2F2ZWRUYWdzKToKKyAgICAgICAgKEpTQzo6SklUVGh1bmtzOjpjdGlJbnRl
cm5hbEZ1bmN0aW9uQ2FsbCk6CisgICAgICAgIChKU0M6OkpJVFRodW5rczo6Y3RpSW50ZXJuYWxG
dW5jdGlvbkNvbnN0cnVjdCk6CisgICAgICAgIChKU0M6OkpJVFRodW5rczo6Y3RpU3R1Yik6Cisg
ICAgICAgIChKU0M6OkpJVFRodW5rczo6aG9zdEZ1bmN0aW9uU3R1Yik6CisgICAgICAgICogaml0
L0pJVFRodW5rcy5oOgorICAgICAgICAqIGppdC9KSVRXb3JrbGlzdC5jcHA6CisgICAgICAgIChK
U0M6OkpJVFdvcmtsaXN0OjpQbGFuOjp2bSk6CisgICAgICAgIChKU0M6OkpJVFdvcmtsaXN0Ojpj
b21wbGV0ZUFsbEZvclZNKToKKyAgICAgICAgKEpTQzo6SklUV29ya2xpc3Q6OnBvbGwpOgorICAg
ICAgICAoSlNDOjpKSVRXb3JrbGlzdDo6Y29tcGlsZUxhdGVyKToKKyAgICAgICAgKEpTQzo6SklU
V29ya2xpc3Q6OmNvbXBpbGVOb3cpOgorICAgICAgICAqIGppdC9SZXBhdGNoLmNwcDoKKyAgICAg
ICAgKEpTQzo6cmVhZFB1dElDQ2FsbFRhcmdldCk6CisgICAgICAgIChKU0M6OmZ0bFRodW5rQXdh
cmVSZXBhdGNoQ2FsbCk6CisgICAgICAgIChKU0M6OmxpbmtTbG93Rm9yKToKKyAgICAgICAgKEpT
Qzo6bGlua0Zvcik6CisgICAgICAgIChKU0M6OmxpbmtEaXJlY3RGb3IpOgorICAgICAgICAoSlND
OjpyZXZlcnRDYWxsKToKKyAgICAgICAgKEpTQzo6dW5saW5rRm9yKToKKyAgICAgICAgKEpTQzo6
bGlua1ZpcnR1YWxGb3IpOgorICAgICAgICAoSlNDOjpsaW5rUG9seW1vcnBoaWNDYWxsKToKKyAg
ICAgICAgKiBqaXQvU3BlY2lhbGl6ZWRUaHVua0pJVC5oOgorICAgICAgICAoSlNDOjpTcGVjaWFs
aXplZFRodW5rSklUOjpTcGVjaWFsaXplZFRodW5rSklUKToKKyAgICAgICAgKiBqaXQvVGh1bmtH
ZW5lcmF0b3IuaDoKKyAgICAgICAgKiBqaXQvVGh1bmtHZW5lcmF0b3JzLmNwcDoKKyAgICAgICAg
KEpTQzo6dGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKToKKyAgICAgICAg
KEpTQzo6c2xvd1BhdGhGb3IpOgorICAgICAgICAoSlNDOjpsaW5rQ2FsbFRodW5rR2VuZXJhdG9y
KToKKyAgICAgICAgKEpTQzo6bGlua1BvbHltb3JwaGljQ2FsbFRodW5rR2VuZXJhdG9yKToKKyAg
ICAgICAgKEpTQzo6dmlydHVhbFRodW5rRm9yKToKKyAgICAgICAgKEpTQzo6bmF0aXZlRm9yR2Vu
ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6bmF0aXZlQ2FsbEdlbmVyYXRvcik6CisgICAgICAgIChK
U0M6Om5hdGl2ZVRhaWxDYWxsR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6bmF0aXZlVGFpbENh
bGxXaXRob3V0U2F2ZWRUYWdzR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6bmF0aXZlQ29uc3Ry
dWN0R2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6aW50ZXJuYWxGdW5jdGlvbkNhbGxHZW5lcmF0
b3IpOgorICAgICAgICAoSlNDOjppbnRlcm5hbEZ1bmN0aW9uQ29uc3RydWN0R2VuZXJhdG9yKToK
KyAgICAgICAgKEpTQzo6YXJpdHlGaXh1cEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OnVucmVh
Y2hhYmxlR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6c3RyaW5nR2V0QnlWYWxHZW5lcmF0b3Ip
OgorICAgICAgICAoSlNDOjpjaGFyVG9TdHJpbmcpOgorICAgICAgICAoSlNDOjpjaGFyQ29kZUF0
VGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpjaGFyQXRUaHVua0dlbmVyYXRvcik6Cisg
ICAgICAgIChKU0M6OmZyb21DaGFyQ29kZVRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6
Y2x6MzJUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OnNxcnRUaHVua0dlbmVyYXRvcik6
CisgICAgICAgIChKU0M6OmZsb29yVGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpjZWls
VGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjp0cnVuY1RodW5rR2VuZXJhdG9yKToKKyAg
ICAgICAgKEpTQzo6cm91bmRUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OmV4cFRodW5r
R2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6bG9nVGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAo
SlNDOjphYnNUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OmltdWxUaHVua0dlbmVyYXRv
cik6CisgICAgICAgIChKU0M6OnJhbmRvbVRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6
Ym91bmRUaGlzTm9BcmdzRnVuY3Rpb25DYWxsR2VuZXJhdG9yKToKKyAgICAgICAgKiBqaXQvVGh1
bmtHZW5lcmF0b3JzLmg6CisgICAgICAgICoganNjLmNwcDoKKyAgICAgICAgKEdsb2JhbE9iamVj
dDo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoR2xvYmFsT2JqZWN0OjphZGRGdW5jdGlvbik6
CisgICAgICAgIChHbG9iYWxPYmplY3Q6Om1vZHVsZUxvYWRlckltcG9ydE1vZHVsZSk6CisgICAg
ICAgIChHbG9iYWxPYmplY3Q6Om1vZHVsZUxvYWRlclJlc29sdmUpOgorICAgICAgICAoR2xvYmFs
T2JqZWN0Ojptb2R1bGVMb2FkZXJDcmVhdGVJbXBvcnRNZXRhUHJvcGVydGllcyk6CisgICAgICAg
IChmdW5jdGlvbkRlc2NyaWJlKToKKyAgICAgICAgKGZ1bmN0aW9uRGVzY3JpYmVBcnJheSk6Cisg
ICAgICAgIChKU0NNZW1vcnlGb290cHJpbnQ6OmFkZFByb3BlcnR5KToKKyAgICAgICAgKGZ1bmN0
aW9uUnVuKToKKyAgICAgICAgKGZ1bmN0aW9uUnVuU3RyaW5nKToKKyAgICAgICAgKGZ1bmN0aW9u
UmVhZEZpbGUpOgorICAgICAgICAoZnVuY3Rpb25DYWxsZXJTb3VyY2VPcmlnaW4pOgorICAgICAg
ICAoZnVuY3Rpb25SZWFkbGluZSk6CisgICAgICAgIChmdW5jdGlvbkRvbGxhckNyZWF0ZVJlYWxt
KToKKyAgICAgICAgKGZ1bmN0aW9uRG9sbGFyRXZhbFNjcmlwdCk6CisgICAgICAgIChmdW5jdGlv
bkRvbGxhckFnZW50R2V0UmVwb3J0KToKKyAgICAgICAgKGZ1bmN0aW9uV2FpdEZvclJlcG9ydCk6
CisgICAgICAgIChmdW5jdGlvbkpTQ09wdGlvbnMpOgorICAgICAgICAoZnVuY3Rpb25DaGVja01v
ZHVsZVN5bnRheCk6CisgICAgICAgIChmdW5jdGlvbkdlbmVyYXRlSGVhcFNuYXBzaG90Rm9yR0NE
ZWJ1Z2dpbmcpOgorICAgICAgICAoZnVuY3Rpb25XZWJBc3NlbWJseU1lbW9yeU1vZGUpOgorICAg
ICAgICAoZHVtcEV4Y2VwdGlvbik6CisgICAgICAgIChjaGVja1VuY2F1Z2h0RXhjZXB0aW9uKToK
KyAgICAgICAgKiBsbGludC9MTEludFNsb3dQYXRocy5jcHA6CisgICAgICAgIChKU0M6OkxMSW50
OjpMTElOVF9TTE9XX1BBVEhfREVDTCk6CisgICAgICAgIChKU0M6OkxMSW50OjpoYW5kbGVIb3N0
Q2FsbCk6CisgICAgICAgICogcGFyc2VyL0FTVEJ1aWxkZXIuaDoKKyAgICAgICAgKEpTQzo6QVNU
QnVpbGRlcjo6QVNUQnVpbGRlcik6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OmNyZWF0ZVJl
c29sdmUpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVHZXR0ZXJPclNldHRlclBy
b3BlcnR5KToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRlUHJvcGVydHkpOgorICAg
ICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVGdW5jRGVjbFN0YXRlbWVudCk6CisgICAgICAg
IChKU0M6OkFTVEJ1aWxkZXI6Om1ha2VGdW5jdGlvbkNhbGxOb2RlKToKKyAgICAgICAgKiBwYXJz
ZXIvTGV4ZXIuY3BwOgorICAgICAgICAoSlNDOjpMZXhlcjxUPjo6TGV4ZXIpOgorICAgICAgICAo
SlNDOjpMZXhlcjxMQ2hhcj46OnBhcnNlSWRlbnRpZmllcik6CisgICAgICAgIChKU0M6OkxleGVy
PFVDaGFyPjo6cGFyc2VJZGVudGlmaWVyKToKKyAgICAgICAgKiBwYXJzZXIvTGV4ZXIuaDoKKyAg
ICAgICAgKEpTQzo6TGV4ZXI8VD46OmxleEV4cGVjdElkZW50aWZpZXIpOgorICAgICAgICAqIHBh
cnNlci9Nb2R1bGVBbmFseXplci5jcHA6CisgICAgICAgIChKU0M6Ok1vZHVsZUFuYWx5emVyOjpN
b2R1bGVBbmFseXplcik6CisgICAgICAgICogcGFyc2VyL01vZHVsZUFuYWx5emVyLmg6CisgICAg
ICAgIChKU0M6Ok1vZHVsZUFuYWx5emVyOjp2bSk6CisgICAgICAgICogcGFyc2VyL1BhcnNlci5j
cHA6CisgICAgICAgIChKU0M6OlBhcnNlcjxMZXhlclR5cGU+OjpQYXJzZXIpOgorICAgICAgICAo
SlNDOjpQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VJbm5lcik6CisgICAgICAgIChKU0M6OlBhcnNl
cjxMZXhlclR5cGU+Ojppc0Fycm93RnVuY3Rpb25QYXJhbWV0ZXJzKToKKyAgICAgICAgKEpTQzo6
UGFyc2VyPExleGVyVHlwZT46OnBhcnNlU291cmNlRWxlbWVudHMpOgorICAgICAgICAoSlNDOjpQ
YXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VNb2R1bGVTb3VyY2VFbGVtZW50cyk6CisgICAgICAgIChK
U0M6OlBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUdlbmVyYXRvckZ1bmN0aW9uU291cmNlRWxlbWVu
dHMpOgorICAgICAgICAoSlNDOjpQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VBc3luY0Z1bmN0aW9u
U291cmNlRWxlbWVudHMpOgorICAgICAgICAoSlNDOjpQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VB
c3luY0dlbmVyYXRvckZ1bmN0aW9uU291cmNlRWxlbWVudHMpOgorICAgICAgICAoSlNDOjpQYXJz
ZXI8TGV4ZXJUeXBlPjo6cGFyc2VTaW5nbGVGdW5jdGlvbik6CisgICAgICAgIChKU0M6OlBhcnNl
cjxMZXhlclR5cGU+OjpwYXJzZVN0YXRlbWVudExpc3RJdGVtKToKKyAgICAgICAgKEpTQzo6UGFy
c2VyPExleGVyVHlwZT46OnBhcnNlT2JqZWN0UmVzdEFzc2lnbm1lbnRFbGVtZW50KToKKyAgICAg
ICAgKEpTQzo6UGFyc2VyPExleGVyVHlwZT46OnBhcnNlQXNzaWdubWVudEVsZW1lbnQpOgorICAg
ICAgICAoSlNDOjpQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VEZXN0cnVjdHVyaW5nUGF0dGVybik6
CisgICAgICAgIChKU0M6OlBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUZvclN0YXRlbWVudCk6Cisg
ICAgICAgIChKU0M6OlBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUJyZWFrU3RhdGVtZW50KToKKyAg
ICAgICAgKEpTQzo6UGFyc2VyPExleGVyVHlwZT46OnBhcnNlQ29udGludWVTdGF0ZW1lbnQpOgor
ICAgICAgICAoSlNDOjpQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VTdGF0ZW1lbnQpOgorICAgICAg
ICAoSlNDOjpQYXJzZXI8TGV4ZXJUeXBlPjo6bWF5YmVQYXJzZUFzeW5jRnVuY3Rpb25EZWNsYXJh
dGlvblN0YXRlbWVudCk6CisgICAgICAgIChKU0M6OlBhcnNlcjxMZXhlclR5cGU+OjpjcmVhdGVH
ZW5lcmF0b3JQYXJhbWV0ZXJzKToKKyAgICAgICAgKEpTQzo6UGFyc2VyPExleGVyVHlwZT46OnBh
cnNlRnVuY3Rpb25JbmZvKToKKyAgICAgICAgKEpTQzo6UGFyc2VyPExleGVyVHlwZT46OnBhcnNl
RnVuY3Rpb25EZWNsYXJhdGlvbik6CisgICAgICAgIChKU0M6OlBhcnNlcjxMZXhlclR5cGU+Ojpw
YXJzZUFzeW5jRnVuY3Rpb25EZWNsYXJhdGlvbik6CisgICAgICAgIChKU0M6OlBhcnNlcjxMZXhl
clR5cGU+OjpwYXJzZUNsYXNzRGVjbGFyYXRpb24pOgorICAgICAgICAoSlNDOjpQYXJzZXI8TGV4
ZXJUeXBlPjo6cGFyc2VDbGFzcyk6CisgICAgICAgIChKU0M6OlBhcnNlcjxMZXhlclR5cGU+Ojpw
YXJzZUltcG9ydENsYXVzZUl0ZW0pOgorICAgICAgICAoSlNDOjpQYXJzZXI8TGV4ZXJUeXBlPjo6
cGFyc2VJbXBvcnREZWNsYXJhdGlvbik6CisgICAgICAgIChKU0M6OlBhcnNlcjxMZXhlclR5cGU+
OjpwYXJzZUV4cG9ydFNwZWNpZmllcik6CisgICAgICAgIChKU0M6OlBhcnNlcjxMZXhlclR5cGU+
OjpwYXJzZUV4cG9ydERlY2xhcmF0aW9uKToKKyAgICAgICAgKEpTQzo6UGFyc2VyPExleGVyVHlw
ZT46OnBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24pOgorICAgICAgICAoSlNDOjpQYXJzZXI8TGV4
ZXJUeXBlPjo6cGFyc2VQcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OlBhcnNlcjxMZXhlclR5cGU+
OjpwYXJzZUdldHRlclNldHRlcik6CisgICAgICAgIChKU0M6OlBhcnNlcjxMZXhlclR5cGU+Ojpw
YXJzZU9iamVjdExpdGVyYWwpOgorICAgICAgICAoSlNDOjpQYXJzZXI8TGV4ZXJUeXBlPjo6cGFy
c2VTdHJpY3RPYmplY3RMaXRlcmFsKToKKyAgICAgICAgKEpTQzo6UGFyc2VyPExleGVyVHlwZT46
OnBhcnNlQ2xhc3NFeHByZXNzaW9uKToKKyAgICAgICAgKEpTQzo6UGFyc2VyPExleGVyVHlwZT46
OnBhcnNlRnVuY3Rpb25FeHByZXNzaW9uKToKKyAgICAgICAgKEpTQzo6UGFyc2VyPExleGVyVHlw
ZT46OnBhcnNlQXN5bmNGdW5jdGlvbkV4cHJlc3Npb24pOgorICAgICAgICAoSlNDOjpQYXJzZXI8
TGV4ZXJUeXBlPjo6cGFyc2VQcmltYXJ5RXhwcmVzc2lvbik6CisgICAgICAgIChKU0M6OlBhcnNl
cjxMZXhlclR5cGU+OjpwYXJzZU1lbWJlckV4cHJlc3Npb24pOgorICAgICAgICAoSlNDOjpQYXJz
ZXI8TGV4ZXJUeXBlPjo6cGFyc2VBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbik6CisgICAgICAgIChK
U0M6OlBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZVVuYXJ5RXhwcmVzc2lvbik6CisgICAgICAgICog
cGFyc2VyL1BhcnNlci5oOgorICAgICAgICAoSlNDOjppc0FyZ3VtZW50cyk6CisgICAgICAgIChK
U0M6OmlzRXZhbCk6CisgICAgICAgIChKU0M6OmlzRXZhbE9yQXJndW1lbnRzSWRlbnRpZmllcik6
CisgICAgICAgIChKU0M6OlNjb3BlOjpTY29wZSk6CisgICAgICAgIChKU0M6OlNjb3BlOjpkZWNs
YXJlUGFyYW1ldGVyKToKKyAgICAgICAgKEpTQzo6U2NvcGU6OnNldElubmVyQXJyb3dGdW5jdGlv
blVzZXNFdmFsQW5kVXNlQXJndW1lbnRzSWZOZWVkZWQpOgorICAgICAgICAoSlNDOjpTY29wZTo6
Y29sbGVjdEZyZWVWYXJpYWJsZXMpOgorICAgICAgICAoSlNDOjpQYXJzZXI6OmNhblJlY3Vyc2Up
OgorICAgICAgICAoSlNDOjpwYXJzZSk6CisgICAgICAgIChKU0M6OnBhcnNlRnVuY3Rpb25Gb3JG
dW5jdGlvbkNvbnN0cnVjdG9yKToKKyAgICAgICAgKiBwYXJzZXIvUGFyc2VyQXJlbmEuaDoKKyAg
ICAgICAgKEpTQzo6SWRlbnRpZmllckFyZW5hOjptYWtlSWRlbnRpZmllcik6CisgICAgICAgIChK
U0M6OklkZW50aWZpZXJBcmVuYTo6bWFrZUVtcHR5SWRlbnRpZmllcik6CisgICAgICAgIChKU0M6
OklkZW50aWZpZXJBcmVuYTo6bWFrZUlkZW50aWZpZXJMQ2hhckZyb21VQ2hhcik6CisgICAgICAg
IChKU0M6OklkZW50aWZpZXJBcmVuYTo6bWFrZU51bWVyaWNJZGVudGlmaWVyKToKKyAgICAgICAg
KiBwYXJzZXIvU3ludGF4Q2hlY2tlci5oOgorICAgICAgICAoSlNDOjpTeW50YXhDaGVja2VyOjpT
eW50YXhDaGVja2VyKToKKyAgICAgICAgKEpTQzo6U3ludGF4Q2hlY2tlcjo6Y3JlYXRlUHJvcGVy
dHkpOgorICAgICAgICAoSlNDOjpTeW50YXhDaGVja2VyOjpjcmVhdGVHZXR0ZXJPclNldHRlclBy
b3BlcnR5KToKKyAgICAgICAgKiBwcm9maWxlci9Qcm9maWxlckJ5dGVjb2RlLmNwcDoKKyAgICAg
ICAgKEpTQzo6UHJvZmlsZXI6OkJ5dGVjb2RlOjp0b0pTIGNvbnN0KToKKyAgICAgICAgKiBwcm9m
aWxlci9Qcm9maWxlckJ5dGVjb2RlU2VxdWVuY2UuY3BwOgorICAgICAgICAoSlNDOjpQcm9maWxl
cjo6Qnl0ZWNvZGVTZXF1ZW5jZTo6YWRkU2VxdWVuY2VQcm9wZXJ0aWVzIGNvbnN0KToKKyAgICAg
ICAgKiBwcm9maWxlci9Qcm9maWxlckJ5dGVjb2Rlcy5jcHA6CisgICAgICAgIChKU0M6OlByb2Zp
bGVyOjpCeXRlY29kZXM6OnRvSlMgY29uc3QpOgorICAgICAgICAqIHByb2ZpbGVyL1Byb2ZpbGVy
Q29tcGlsYXRpb24uY3BwOgorICAgICAgICAoSlNDOjpQcm9maWxlcjo6Q29tcGlsYXRpb246OnRv
SlMgY29uc3QpOgorICAgICAgICAqIHByb2ZpbGVyL1Byb2ZpbGVyQ29tcGlsZWRCeXRlY29kZS5j
cHA6CisgICAgICAgIChKU0M6OlByb2ZpbGVyOjpDb21waWxlZEJ5dGVjb2RlOjp0b0pTIGNvbnN0
KToKKyAgICAgICAgKiBwcm9maWxlci9Qcm9maWxlckV2ZW50LmNwcDoKKyAgICAgICAgKEpTQzo6
UHJvZmlsZXI6OkV2ZW50Ojp0b0pTIGNvbnN0KToKKyAgICAgICAgKiBwcm9maWxlci9Qcm9maWxl
ck9TUkV4aXQuY3BwOgorICAgICAgICAoSlNDOjpQcm9maWxlcjo6T1NSRXhpdDo6dG9KUyBjb25z
dCk6CisgICAgICAgICogcHJvZmlsZXIvUHJvZmlsZXJPU1JFeGl0U2l0ZS5jcHA6CisgICAgICAg
IChKU0M6OlByb2ZpbGVyOjpPU1JFeGl0U2l0ZTo6dG9KUyBjb25zdCk6CisgICAgICAgICogcHJv
ZmlsZXIvUHJvZmlsZXJVSUQuY3BwOgorICAgICAgICAoSlNDOjpQcm9maWxlcjo6VUlEOjp0b0pT
IGNvbnN0KToKKyAgICAgICAgKiBydW50aW1lL0Fic3RyYWN0TW9kdWxlUmVjb3JkLmNwcDoKKyAg
ICAgICAgKEpTQzo6QWJzdHJhY3RNb2R1bGVSZWNvcmQ6OmZpbmlzaENyZWF0aW9uKToKKyAgICAg
ICAgKEpTQzo6QWJzdHJhY3RNb2R1bGVSZWNvcmQ6Omhvc3RSZXNvbHZlSW1wb3J0ZWRNb2R1bGUp
OgorICAgICAgICAoSlNDOjpBYnN0cmFjdE1vZHVsZVJlY29yZDo6cmVzb2x2ZUV4cG9ydEltcGwp
OgorICAgICAgICAoSlNDOjpnZXRFeHBvcnRlZE5hbWVzKToKKyAgICAgICAgKEpTQzo6QWJzdHJh
Y3RNb2R1bGVSZWNvcmQ6OmdldE1vZHVsZU5hbWVzcGFjZSk6CisgICAgICAgICogcnVudGltZS9B
cnJheUJ1ZmZlck5ldXRlcmluZ1dhdGNocG9pbnRTZXQuY3BwOgorICAgICAgICAoSlNDOjpBcnJh
eUJ1ZmZlck5ldXRlcmluZ1dhdGNocG9pbnRTZXQ6OmZpcmVBbGwpOgorICAgICAgICAqIHJ1bnRp
bWUvQXJyYXlJdGVyYXRvclByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OkFycmF5SXRlcmF0
b3JQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKiBydW50aW1lL0FycmF5UHJv
dG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6ZmFzdEpvaW4pOgorICAgICAgICAoSlNDOjphcnJh
eVByb3RvRnVuY1RvTG9jYWxlU3RyaW5nKToKKyAgICAgICAgKEpTQzo6c2xvd0pvaW4pOgorICAg
ICAgICAoSlNDOjphcnJheVByb3RvRnVuY0pvaW4pOgorICAgICAgICAoSlNDOjphcnJheVByb3Rv
RnVuY1B1c2gpOgorICAgICAgICAqIHJ1bnRpbWUvQXN5bmNGdW5jdGlvblByb3RvdHlwZS5jcHA6
CisgICAgICAgIChKU0M6OkFzeW5jRnVuY3Rpb25Qcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKToK
KyAgICAgICAgKiBydW50aW1lL0FzeW5jR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUuY3BwOgor
ICAgICAgICAoSlNDOjpBc3luY0dlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlOjpmaW5pc2hDcmVh
dGlvbik6CisgICAgICAgICogcnVudGltZS9Bc3luY0dlbmVyYXRvclByb3RvdHlwZS5jcHA6Cisg
ICAgICAgIChKU0M6OkFzeW5jR2VuZXJhdG9yUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbik6Cisg
ICAgICAgICogcnVudGltZS9BdG9taWNzT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6QXRvbWlj
c09iamVjdDo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjphdG9taWNzRnVuY1dhaXQp
OgorICAgICAgICAoSlNDOjpvcGVyYXRpb25BdG9taWNzQWRkKToKKyAgICAgICAgKEpTQzo6b3Bl
cmF0aW9uQXRvbWljc0FuZCk6CisgICAgICAgIChKU0M6Om9wZXJhdGlvbkF0b21pY3NDb21wYXJl
RXhjaGFuZ2UpOgorICAgICAgICAoSlNDOjpvcGVyYXRpb25BdG9taWNzRXhjaGFuZ2UpOgorICAg
ICAgICAoSlNDOjpvcGVyYXRpb25BdG9taWNzSXNMb2NrRnJlZSk6CisgICAgICAgIChKU0M6Om9w
ZXJhdGlvbkF0b21pY3NMb2FkKToKKyAgICAgICAgKEpTQzo6b3BlcmF0aW9uQXRvbWljc09yKToK
KyAgICAgICAgKEpTQzo6b3BlcmF0aW9uQXRvbWljc1N0b3JlKToKKyAgICAgICAgKEpTQzo6b3Bl
cmF0aW9uQXRvbWljc1N1Yik6CisgICAgICAgIChKU0M6Om9wZXJhdGlvbkF0b21pY3NYb3IpOgor
ICAgICAgICAqIHJ1bnRpbWUvQmlnSW50UHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6Qmln
SW50UHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OmJpZ0ludFByb3Rv
RnVuY1RvU3RyaW5nKToKKyAgICAgICAgKiBydW50aW1lL0NhY2hlZFR5cGVzLmNwcDoKKyAgICAg
ICAgKEpTQzo6Q2FjaGVkVW5pcXVlZFN0cmluZ0ltcGxCYXNlOjpkZWNvZGUgY29uc3QpOgorICAg
ICAgICAoSlNDOjpDYWNoZWRJZGVudGlmaWVyOjpkZWNvZGUgY29uc3QpOgorICAgICAgICAoSlND
OjpDYWNoZWRKU1ZhbHVlOjpkZWNvZGUgY29uc3QpOgorICAgICAgICAqIHJ1bnRpbWUvQ29kZUNh
Y2hlLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUNhY2hlTWFwOjpwcnVuZVNsb3dDYXNlKToKKyAg
ICAgICAgKEpTQzo6Q29kZUNhY2hlOjpnZXRVbmxpbmtlZEdsb2JhbEZ1bmN0aW9uRXhlY3V0YWJs
ZSk6CisgICAgICAgICogcnVudGltZS9Db2RlQ2FjaGUuaDoKKyAgICAgICAgKEpTQzo6Z2VuZXJh
dGVVbmxpbmtlZENvZGVCbG9ja0ltcGwpOgorICAgICAgICAqIHJ1bnRpbWUvQ29tbW9uSWRlbnRp
ZmllcnMuY3BwOgorICAgICAgICAoSlNDOjpDb21tb25JZGVudGlmaWVyczo6Q29tbW9uSWRlbnRp
ZmllcnMpOgorICAgICAgICAqIHJ1bnRpbWUvQ29tbW9uSWRlbnRpZmllcnMuaDoKKyAgICAgICAg
KiBydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHA6CisgICAgICAgIChKU0M6OlNMT1dfUEFUSF9E
RUNMKToKKyAgICAgICAgKiBydW50aW1lL0NvbXBsZXRpb24uY3BwOgorICAgICAgICAoSlNDOjpj
aGVja1N5bnRheEludGVybmFsKToKKyAgICAgICAgKEpTQzo6Y2hlY2tNb2R1bGVTeW50YXgpOgor
ICAgICAgICAoSlNDOjpsb2FkQW5kRXZhbHVhdGVNb2R1bGUpOgorICAgICAgICAoSlNDOjpsb2Fk
TW9kdWxlKToKKyAgICAgICAgKiBydW50aW1lL0RhdGVDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAg
IChKU0M6OmNhbGxEYXRlKToKKyAgICAgICAgKiBydW50aW1lL0RhdGVQcm90b3R5cGUuY3BwOgor
ICAgICAgICAoSlNDOjpmb3JtYXRMb2NhbGVEYXRlKToKKyAgICAgICAgKEpTQzo6Zm9ybWF0ZURh
dGVJbnN0YW5jZSk6CisgICAgICAgIChKU0M6OkRhdGVQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9u
KToKKyAgICAgICAgKEpTQzo6ZGF0ZVByb3RvRnVuY1RvSVNPU3RyaW5nKToKKyAgICAgICAgKiBy
dW50aW1lL0Vycm9yLmNwcDoKKyAgICAgICAgKEpTQzo6YWRkRXJyb3JJbmZvKToKKyAgICAgICAg
KiBydW50aW1lL0Vycm9ySW5zdGFuY2UuY3BwOgorICAgICAgICAoSlNDOjphcHBlbmRTb3VyY2VU
b0Vycm9yKToKKyAgICAgICAgKEpTQzo6RXJyb3JJbnN0YW5jZTo6ZmluaXNoQ3JlYXRpb24pOgor
ICAgICAgICAoSlNDOjpFcnJvckluc3RhbmNlOjptYXRlcmlhbGl6ZUVycm9ySW5mb0lmTmVlZGVk
KToKKyAgICAgICAgKiBydW50aW1lL0Vycm9yUHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6
RXJyb3JQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6ZXJyb3JQcm90
b0Z1bmNUb1N0cmluZyk6CisgICAgICAgICogcnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmNwcDoK
KyAgICAgICAgKEpTQzo6VGVybWluYXRlZEV4ZWN1dGlvbkVycm9yOjpkZWZhdWx0VmFsdWUpOgor
ICAgICAgICAqIHJ1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpm
dW5jdGlvblByb3RvRnVuY1RvU3RyaW5nKToKKyAgICAgICAgKiBydW50aW1lL0Z1bmN0aW9uUmFy
ZURhdGEuY3BwOgorICAgICAgICAoSlNDOjpGdW5jdGlvblJhcmVEYXRhOjpjbGVhcik6CisgICAg
ICAgICogcnVudGltZS9HZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZS5jcHA6CisgICAgICAgIChK
U0M6OkdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAg
ICogcnVudGltZS9HZW5lcmF0b3JQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpHZW5lcmF0
b3JQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKiBydW50aW1lL0dlbmVyaWNB
cmd1bWVudHNJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkdlbmVyaWNBcmd1bWVudHM8VHlwZT46
OmdldE93blByb3BlcnR5TmFtZXMpOgorICAgICAgICAqIHJ1bnRpbWUvR2V0dGVyU2V0dGVyLmg6
CisgICAgICAgICogcnVudGltZS9JZGVudGlmaWVyLmNwcDoKKyAgICAgICAgKEpTQzo6SWRlbnRp
Zmllcjo6YWRkKToKKyAgICAgICAgKEpTQzo6SWRlbnRpZmllcjo6YWRkOCk6CisgICAgICAgIChK
U0M6OklkZW50aWZpZXI6OmZyb20pOgorICAgICAgICAoSlNDOjpJZGVudGlmaWVyOjpjaGVja0N1
cnJlbnRBdG9tU3RyaW5nVGFibGUpOgorICAgICAgICAqIHJ1bnRpbWUvSWRlbnRpZmllci5oOgor
ICAgICAgICAoSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKToKKyAgICAgICAgKEpTQzo6SWRl
bnRpZmllcjo6Y3JlYXRlTENoYXJGcm9tVUNoYXIpOgorICAgICAgICAoSlNDOjpJZGVudGlmaWVy
OjpJZGVudGlmaWVyKToKKyAgICAgICAgKEpTQzo6SWRlbnRpZmllcjo6YWRkKToKKyAgICAgICAg
KiBydW50aW1lL0lkZW50aWZpZXJJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OklkZW50aWZpZXI6
OklkZW50aWZpZXIpOgorICAgICAgICAoSlNDOjpJZGVudGlmaWVyOjphZGQpOgorICAgICAgICAo
SlNDOjpJZGVudGlmaWVyOjpmcm9tVWlkKToKKyAgICAgICAgKEpTQzo6SWRlbnRpZmllcjo6ZnJv
bVN0cmluZyk6CisgICAgICAgIChKU0M6OmlkZW50aWZpZXJUb0pTVmFsdWUpOgorICAgICAgICAo
SlNDOjppZGVudGlmaWVyVG9TYWZlUHVibGljSlNWYWx1ZSk6CisgICAgICAgICogcnVudGltZS9J
bnRlcm5hbEZ1bmN0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6SW50ZXJuYWxGdW5jdGlvbjo6Zmlu
aXNoQ3JlYXRpb24pOgorICAgICAgICAqIHJ1bnRpbWUvSW50bENvbGxhdG9yLmNwcDoKKyAgICAg
ICAgKEpTQzo6SW50bENvbGxhdG9yOjpyZXNvbHZlZE9wdGlvbnMpOgorICAgICAgICAqIHJ1bnRp
bWUvSW50bENvbGxhdG9yUHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6SW50bENvbGxhdG9y
UHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgICogcnVudGltZS9JbnRsRGF0ZVRp
bWVGb3JtYXQuY3BwOgorICAgICAgICAoSlNDOjpJbnRsRFRGSW50ZXJuYWw6OnRvRGF0ZVRpbWVP
cHRpb25zQW55RGF0ZSk6CisgICAgICAgIChKU0M6OkludGxEYXRlVGltZUZvcm1hdDo6cmVzb2x2
ZWRPcHRpb25zKToKKyAgICAgICAgKEpTQzo6SW50bERhdGVUaW1lRm9ybWF0Ojpmb3JtYXQpOgor
ICAgICAgICAoSlNDOjpJbnRsRGF0ZVRpbWVGb3JtYXQ6OmZvcm1hdFRvUGFydHMpOgorICAgICAg
ICAqIHJ1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0UHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpT
Qzo6SW50bERhdGVUaW1lRm9ybWF0UHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAg
ICogcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0LmNwcDoKKyAgICAgICAgKEpTQzo6SW50bE51bWJl
ckZvcm1hdDo6aW5pdGlhbGl6ZU51bWJlckZvcm1hdCk6CisgICAgICAgIChKU0M6OkludGxOdW1i
ZXJGb3JtYXQ6OmZvcm1hdE51bWJlcik6CisgICAgICAgIChKU0M6OkludGxOdW1iZXJGb3JtYXQ6
OnJlc29sdmVkT3B0aW9ucyk6CisgICAgICAgIChKU0M6OkludGxOdW1iZXJGb3JtYXQ6OmZvcm1h
dFRvUGFydHMpOgorICAgICAgICAqIHJ1bnRpbWUvSW50bE51bWJlckZvcm1hdFByb3RvdHlwZS5j
cHA6CisgICAgICAgIChKU0M6OkludGxOdW1iZXJGb3JtYXRQcm90b3R5cGU6OmZpbmlzaENyZWF0
aW9uKToKKyAgICAgICAgKiBydW50aW1lL0ludGxPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjps
b29rdXBTdXBwb3J0ZWRMb2NhbGVzKToKKyAgICAgICAgKEpTQzo6c3VwcG9ydGVkTG9jYWxlcyk6
CisgICAgICAgIChKU0M6OmludGxPYmplY3RGdW5jR2V0Q2Fub25pY2FsTG9jYWxlcyk6CisgICAg
ICAgICogcnVudGltZS9JbnRsUGx1cmFsUnVsZXMuY3BwOgorICAgICAgICAoSlNDOjpJbnRsUGx1
cmFsUnVsZXM6OmluaXRpYWxpemVQbHVyYWxSdWxlcyk6CisgICAgICAgIChKU0M6OkludGxQbHVy
YWxSdWxlczo6cmVzb2x2ZWRPcHRpb25zKToKKyAgICAgICAgKEpTQzo6SW50bFBsdXJhbFJ1bGVz
OjpzZWxlY3QpOgorICAgICAgICAqIHJ1bnRpbWUvSW50bFBsdXJhbFJ1bGVzUHJvdG90eXBlLmNw
cDoKKyAgICAgICAgKEpTQzo6SW50bFBsdXJhbFJ1bGVzUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlv
bik6CisgICAgICAgICogcnVudGltZS9KU0FycmF5Lmg6CisgICAgICAgIChKU0M6OmFzQXJyYXkp
OgorICAgICAgICAoSlNDOjppc0pTQXJyYXkpOgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheUJ1
ZmZlclByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJQcm90b3R5cGU6
OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmNw
cDoKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlclZpZXc6OnNsb3dEb3duQW5kV2FzdGVNZW1v
cnkpOgorICAgICAgICAqIHJ1bnRpbWUvSlNDSlNWYWx1ZS5jcHA6CisgICAgICAgIChKU0M6OkpT
VmFsdWU6OnB1dFRvUHJpbWl0aXZlQnlJbmRleCk6CisgICAgICAgIChKU0M6OkpTVmFsdWU6OmR1
bXBGb3JCYWNrdHJhY2UgY29uc3QpOgorICAgICAgICAoSlNDOjpKU1ZhbHVlOjp0b1N0cmluZ1Ns
b3dDYXNlIGNvbnN0KToKKyAgICAgICAgKiBydW50aW1lL0pTQ0pTVmFsdWVJbmxpbmVzLmg6Cisg
ICAgICAgIChKU0M6OkpTVmFsdWU6OnRvUHJvcGVydHlLZXkgY29uc3QpOgorICAgICAgICAoSlND
OjpKU1ZhbHVlOjpnZXQgY29uc3QpOgorICAgICAgICAqIHJ1bnRpbWUvSlNDYXN0Lmg6CisgICAg
ICAgIChKU0M6OmpzQ2FzdCk6CisgICAgICAgICogcnVudGltZS9KU0NlbGwuY3BwOgorICAgICAg
ICAoSlNDOjpKU0NlbGw6OmR1bXAgY29uc3QpOgorICAgICAgICAoSlNDOjpKU0NlbGw6OmR1bXBU
b1N0cmVhbSk6CisgICAgICAgIChKU0M6OkpTQ2VsbDo6cHV0QnlJbmRleCk6CisgICAgICAgICog
cnVudGltZS9KU0NlbGxJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkpTQ2VsbDo6c3RydWN0dXJl
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6RXhlY1N0YXRlOjp2bSBjb25zdCk6CisgICAgICAgIChK
U0M6OnRyeUFsbG9jYXRlQ2VsbEhlbHBlcik6CisgICAgICAgICogcnVudGltZS9KU0RhdGFWaWV3
UHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6SlNEYXRhVmlld1Byb3RvdHlwZTo6ZmluaXNo
Q3JlYXRpb24pOgorICAgICAgICAqIHJ1bnRpbWUvSlNGaXhlZEFycmF5LmNwcDoKKyAgICAgICAg
KEpTQzo6SlNGaXhlZEFycmF5OjpkdW1wVG9TdHJlYW0pOgorICAgICAgICAqIHJ1bnRpbWUvSlNG
dW5jdGlvbi5jcHA6CisgICAgICAgIChKU0M6OkpTRnVuY3Rpb246OmZpbmlzaENyZWF0aW9uKToK
KyAgICAgICAgKEpTQzo6UmV0cmlldmVDYWxsZXJGdW5jdGlvbkZ1bmN0b3I6Om9wZXJhdG9yKCkg
Y29uc3QpOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpyZWlmeU5hbWUpOgorICAgICAgICAo
SlNDOjpKU0Z1bmN0aW9uOjpyZWlmeUxhenlCb3VuZE5hbWVJZk5lZWRlZCk6CisgICAgICAgIChK
U0M6OkpTRnVuY3Rpb246OmFzc2VydFR5cGVJbmZvRmxhZ0ludmFyaWFudHMpOgorICAgICAgICAq
IHJ1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmg6CisgICAgICAgIChKU0M6
OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgp
OgorICAgICAgICAoSlNDOjpKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6Z2V0T3du
UHJvcGVydHlOYW1lcyk6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHA6Cisg
ICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0Ojppbml0KToKKyAgICAgICAgKEpTQzo6SlNHbG9i
YWxPYmplY3Q6OmV4cG9zZURvbGxhclZNKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2Jq
ZWN0RnVuY3Rpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6
ZGVjb2RlKToKKyAgICAgICAgKEpTQzo6Z2xvYmFsRnVuY0VzY2FwZSk6CisgICAgICAgIChKU0M6
Omdsb2JhbEZ1bmNVbmVzY2FwZSk6CisgICAgICAgIChKU0M6Omdsb2JhbEZ1bmNCdWlsdGluRGVz
Y3JpYmUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNMZXhpY2FsRW52aXJvbm1lbnQuY3BwOgorICAg
ICAgICAoSlNDOjpKU0xleGljYWxFbnZpcm9ubWVudDo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5h
bWVzKToKKyAgICAgICAgKiBydW50aW1lL0pTTW9kdWxlRW52aXJvbm1lbnQuY3BwOgorICAgICAg
ICAoSlNDOjpKU01vZHVsZUVudmlyb25tZW50OjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAg
ICAoSlNDOjpKU01vZHVsZUVudmlyb25tZW50OjpwdXQpOgorICAgICAgICAoSlNDOjpKU01vZHVs
ZUVudmlyb25tZW50OjpkZWxldGVQcm9wZXJ0eSk6CisgICAgICAgICogcnVudGltZS9KU01vZHVs
ZUxvYWRlci5jcHA6CisgICAgICAgIChKU0M6OkpTTW9kdWxlTG9hZGVyOjpmaW5pc2hDcmVhdGlv
bik6CisgICAgICAgIChKU0M6OkpTTW9kdWxlTG9hZGVyOjpyZXF1ZXN0SW1wb3J0TW9kdWxlKToK
KyAgICAgICAgKEpTQzo6bW9kdWxlTG9hZGVyUGFyc2VNb2R1bGUpOgorICAgICAgICAoSlNDOjpt
b2R1bGVMb2FkZXJSZXF1ZXN0ZWRNb2R1bGVzKToKKyAgICAgICAgKiBydW50aW1lL0pTTW9kdWxl
TmFtZXNwYWNlT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNNb2R1bGVOYW1lc3BhY2VPYmpl
Y3Q6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6SlNNb2R1bGVOYW1lc3BhY2VPYmpl
Y3Q6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgpOgorICAgICAgICAqIHJ1bnRpbWUvSlNNb2R1
bGVSZWNvcmQuY3BwOgorICAgICAgICAoSlNDOjpKU01vZHVsZVJlY29yZDo6aW5zdGFudGlhdGVE
ZWNsYXJhdGlvbnMpOgorICAgICAgICAqIHJ1bnRpbWUvSlNPTk9iamVjdC5jcHA6CisgICAgICAg
IChKU0M6OkpTT05PYmplY3Q6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6UHJvcGVy
dHlOYW1lRm9yRnVuY3Rpb25DYWxsOjp2YWx1ZSBjb25zdCk6CisgICAgICAgIChKU0M6OlN0cmlu
Z2lmaWVyOjpTdHJpbmdpZmllcik6CisgICAgICAgIChKU0M6OlN0cmluZ2lmaWVyOjpzdHJpbmdp
ZnkpOgorICAgICAgICAoSlNDOjpTdHJpbmdpZmllcjo6SG9sZGVyOjphcHBlbmROZXh0UHJvcGVy
dHkpOgorICAgICAgICAoSlNDOjpXYWxrZXI6OndhbGspOgorICAgICAgICAqIHJ1bnRpbWUvSlNP
YmplY3QuY3BwOgorICAgICAgICAoSlNDOjpnZXRDbGFzc1Byb3BlcnR5TmFtZXMpOgorICAgICAg
ICAoSlNDOjpKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleCk6CisgICAgICAgIChK
U0M6OkpTT2JqZWN0OjpwdXRCeUluZGV4KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmRlbGV0
ZVByb3BlcnR5QnlJbmRleCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojp0b1N0cmluZyBjb25z
dCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpyZWlmeUFsbFN0YXRpY1Byb3BlcnRpZXMpOgor
ICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0RGlyZWN0SW5kZXhTbG93T3JCZXlvbmRWZWN0b3JM
ZW5ndGgpOgorICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6SlNP
YmplY3Q6OnB1dEJ5SW5kZXhJbmxpbmUpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6YnV0dGVy
Zmx5UHJlQ2FwYWNpdHkpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6YnV0dGVyZmx5VG90YWxT
aXplKToKKyAgICAgICAgKEpTQzo6bWFrZUlkZW50aWZpZXIpOgorICAgICAgICAqIHJ1bnRpbWUv
SlNQcm9taXNlUHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6SlNQcm9taXNlUHJvdG90eXBl
OjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgICogcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmZpbmlz
aENyZWF0aW9uKToKKyAgICAgICAgKiBydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5o
OgorICAgICAgICAoSlNDOjpwcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKToKKyAgICAgICAgKiBydW50
aW1lL0pTUnVuTG9vcFRpbWVyLmNwcDoKKyAgICAgICAgKEpTQzo6SlNSdW5Mb29wVGltZXI6OkpT
UnVuTG9vcFRpbWVyKToKKyAgICAgICAgKiBydW50aW1lL0pTUnVuTG9vcFRpbWVyLmg6CisgICAg
ICAgICogcnVudGltZS9KU1N0cmluZy5jcHA6CisgICAgICAgIChKU0M6OkpTU3RyaW5nOjpkdW1w
VG9TdHJlYW0pOgorICAgICAgICAoSlNDOjpKU1JvcGVTdHJpbmc6OnJlc29sdmVSb3BlV2l0aEZ1
bmN0aW9uIGNvbnN0KToKKyAgICAgICAgKEpTQzo6anNTdHJpbmdXaXRoQ2FjaGVTbG93Q2FzZSk6
CisgICAgICAgICogcnVudGltZS9KU1N0cmluZy5oOgorICAgICAgICAoSlNDOjpqc0VtcHR5U3Ry
aW5nKToKKyAgICAgICAgKEpTQzo6anNTaW5nbGVDaGFyYWN0ZXJTdHJpbmcpOgorICAgICAgICAo
SlNDOjpqc05vbnRyaXZpYWxTdHJpbmcpOgorICAgICAgICAoSlNDOjpKU1N0cmluZzo6dG9JZGVu
dGlmaWVyIGNvbnN0KToKKyAgICAgICAgKEpTQzo6SlNTdHJpbmc6OnRvQXRvbVN0cmluZyBjb25z
dCk6CisgICAgICAgIChKU0M6OkpTU3RyaW5nOjp0b0V4aXN0aW5nQXRvbVN0cmluZyBjb25zdCk6
CisgICAgICAgIChKU0M6OkpTU3RyaW5nOjp2YWx1ZSBjb25zdCk6CisgICAgICAgIChKU0M6OkpT
U3RyaW5nOjp0cnlHZXRWYWx1ZSBjb25zdCk6CisgICAgICAgIChKU0M6OkpTU3RyaW5nOjpnZXRJ
bmRleCk6CisgICAgICAgIChKU0M6OmpzU3RyaW5nKToKKyAgICAgICAgKEpTQzo6anNTdWJzdHJp
bmcpOgorICAgICAgICAoSlNDOjpqc093bmVkU3RyaW5nKToKKyAgICAgICAgKEpTQzo6anNTdHJp
bmdXaXRoQ2FjaGUpOgorICAgICAgICAoSlNDOjpKU1JvcGVTdHJpbmc6OnVuc2FmZVZpZXcgY29u
c3QpOgorICAgICAgICAoSlNDOjpKU1JvcGVTdHJpbmc6OnZpZXdXaXRoVW5kZXJseWluZ1N0cmlu
ZyBjb25zdCk6CisgICAgICAgIChKU0M6OkpTU3RyaW5nOjp1bnNhZmVWaWV3IGNvbnN0KToKKyAg
ICAgICAgKiBydW50aW1lL0pTU3RyaW5nSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpqc01ha2VO
b250cml2aWFsU3RyaW5nKToKKyAgICAgICAgKEpTQzo6cmVwZWF0Q2hhcmFjdGVyKToKKyAgICAg
ICAgKiBydW50aW1lL0pTU3RyaW5nSm9pbmVyLmNwcDoKKyAgICAgICAgKEpTQzo6SlNTdHJpbmdK
b2luZXI6OmpvaW4pOgorICAgICAgICAqIHJ1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5jcHA6
CisgICAgICAgIChKU0M6OkpTU3ltYm9sVGFibGVPYmplY3Q6OmdldE93bk5vbkluZGV4UHJvcGVy
dHlOYW1lcyk6CisgICAgICAgICogcnVudGltZS9KU1RlbXBsYXRlT2JqZWN0RGVzY3JpcHRvci5j
cHA6CisgICAgICAgIChKU0M6OkpTVGVtcGxhdGVPYmplY3REZXNjcmlwdG9yOjpjcmVhdGVUZW1w
bGF0ZU9iamVjdCk6CisgICAgICAgICogcnVudGltZS9KU1R5cGVkQXJyYXlWaWV3UHJvdG90eXBl
LmNwcDoKKyAgICAgICAgKEpTQzo6dHlwZWRBcnJheVZpZXdQcm90b0dldHRlckZ1bmNUb1N0cmlu
Z1RhZyk6CisgICAgICAgICogcnVudGltZS9MYXp5Q2xhc3NTdHJ1Y3R1cmUuY3BwOgorICAgICAg
ICAoSlNDOjpMYXp5Q2xhc3NTdHJ1Y3R1cmU6OkluaXRpYWxpemVyOjpzZXRDb25zdHJ1Y3Rvcik6
CisgICAgICAgICogcnVudGltZS9MYXp5UHJvcGVydHkuaDoKKyAgICAgICAgKEpTQzo6TGF6eVBy
b3BlcnR5OjpJbml0aWFsaXplcjo6SW5pdGlhbGl6ZXIpOgorICAgICAgICAqIHJ1bnRpbWUvTGl0
ZXJhbFBhcnNlci5jcHA6CisgICAgICAgIChKU0M6OkxpdGVyYWxQYXJzZXI8Q2hhclR5cGU+Ojp0
cnlKU09OUFBhcnNlKToKKyAgICAgICAgKEpTQzo6TGl0ZXJhbFBhcnNlcjxDaGFyVHlwZT46Om1h
a2VJZGVudGlmaWVyKToKKyAgICAgICAgKEpTQzo6TGl0ZXJhbFBhcnNlcjxDaGFyVHlwZT46OnBh
cnNlKToKKyAgICAgICAgKiBydW50aW1lL0xvb2t1cC5oOgorICAgICAgICAoSlNDOjpyZWlmeVN0
YXRpY1Byb3BlcnRpZXMpOgorICAgICAgICAqIHJ1bnRpbWUvTWFwSXRlcmF0b3JQcm90b3R5cGUu
Y3BwOgorICAgICAgICAoSlNDOjpNYXBJdGVyYXRvclByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24p
OgorICAgICAgICAqIHJ1bnRpbWUvTWFwUHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6TWFw
UHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgICogcnVudGltZS9NYXRoT2JqZWN0
LmNwcDoKKyAgICAgICAgKEpTQzo6TWF0aE9iamVjdDo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAg
ICAqIHJ1bnRpbWUvTnVtYmVyQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpOdW1iZXJD
b25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAqIHJ1bnRpbWUvTnVtYmVyUHJv
dG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6bnVtYmVyUHJvdG9GdW5jVG9FeHBvbmVudGlhbCk6
CisgICAgICAgIChKU0M6Om51bWJlclByb3RvRnVuY1RvRml4ZWQpOgorICAgICAgICAoSlNDOjpu
dW1iZXJQcm90b0Z1bmNUb1ByZWNpc2lvbik6CisgICAgICAgIChKU0M6OmludDMyVG9TdHJpbmdJ
bnRlcm5hbCk6CisgICAgICAgIChKU0M6Om51bWJlclRvU3RyaW5nSW50ZXJuYWwpOgorICAgICAg
ICAoSlNDOjppbnQ1MlRvU3RyaW5nKToKKyAgICAgICAgKiBydW50aW1lL09iamVjdENvbnN0cnVj
dG9yLmNwcDoKKyAgICAgICAgKEpTQzo6b2JqZWN0Q29uc3RydWN0b3JHZXRPd25Qcm9wZXJ0eURl
c2NyaXB0b3JzKToKKyAgICAgICAgKEpTQzo6b2JqZWN0Q29uc3RydWN0b3JBc3NpZ24pOgorICAg
ICAgICAoSlNDOjpvYmplY3RDb25zdHJ1Y3RvclZhbHVlcyk6CisgICAgICAgIChKU0M6OmRlZmlu
ZVByb3BlcnRpZXMpOgorICAgICAgICAoSlNDOjpzZXRJbnRlZ3JpdHlMZXZlbCk6CisgICAgICAg
IChKU0M6OnRlc3RJbnRlZ3JpdHlMZXZlbCk6CisgICAgICAgIChKU0M6Om93blByb3BlcnR5S2V5
cyk6CisgICAgICAgICogcnVudGltZS9PYmplY3RQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlND
OjpvYmplY3RQcm90b0Z1bmNUb1N0cmluZyk6CisgICAgICAgICogcnVudGltZS9PcGVyYXRpb25z
Lmg6CisgICAgICAgIChKU0M6OmpzU3RyaW5nKToKKyAgICAgICAgKEpTQzo6anNTdHJpbmdGcm9t
UmVnaXN0ZXJBcnJheSk6CisgICAgICAgIChKU0M6OmpzU3RyaW5nRnJvbUFyZ3VtZW50cyk6Cisg
ICAgICAgICogcnVudGltZS9Qcm9ncmFtRXhlY3V0YWJsZS5jcHA6CisgICAgICAgIChKU0M6OlBy
b2dyYW1FeGVjdXRhYmxlOjppbml0aWFsaXplR2xvYmFsUHJvcGVydGllcyk6CisgICAgICAgICog
cnVudGltZS9Qcm9taXNlRGVmZXJyZWRUaW1lci5jcHA6CisgICAgICAgIChKU0M6OlByb21pc2VE
ZWZlcnJlZFRpbWVyOjpQcm9taXNlRGVmZXJyZWRUaW1lcik6CisgICAgICAgIChKU0M6OlByb21p
c2VEZWZlcnJlZFRpbWVyOjpoYXNQZW5kaW5nUHJvbWlzZSk6CisgICAgICAgIChKU0M6OlByb21p
c2VEZWZlcnJlZFRpbWVyOjpoYXNEZXBlbmRhbmN5SW5QZW5kaW5nUHJvbWlzZSk6CisgICAgICAg
IChKU0M6OlByb21pc2VEZWZlcnJlZFRpbWVyOjpjYW5jZWxQZW5kaW5nUHJvbWlzZSk6CisgICAg
ICAgICogcnVudGltZS9Qcm9wZXJ0eU5hbWVBcnJheS5oOgorICAgICAgICAoSlNDOjpQcm9wZXJ0
eU5hbWVBcnJheTo6UHJvcGVydHlOYW1lQXJyYXkpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eU5h
bWVBcnJheTo6dm0pOgorICAgICAgICAqIHJ1bnRpbWUvUHJvcGVydHlTbG90Lmg6CisgICAgICAg
IChKU0M6OlByb3BlcnR5U2xvdDo6Z2V0VmFsdWUgY29uc3QpOgorICAgICAgICAqIHJ1bnRpbWUv
UHJveHlPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpwZXJmb3JtUHJveHlHZXQpOgorICAgICAg
ICAoSlNDOjpQcm94eU9iamVjdDo6cGVyZm9ybUludGVybmFsTWV0aG9kR2V0T3duUHJvcGVydHkp
OgorICAgICAgICAoSlNDOjpQcm94eU9iamVjdDo6cGVyZm9ybUhhc1Byb3BlcnR5KToKKyAgICAg
ICAgKEpTQzo6UHJveHlPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgpOgorICAgICAg
ICAoSlNDOjpQcm94eU9iamVjdDo6cGVyZm9ybVB1dCk6CisgICAgICAgIChKU0M6OlByb3h5T2Jq
ZWN0OjpwdXRCeUluZGV4Q29tbW9uKToKKyAgICAgICAgKEpTQzo6UHJveHlPYmplY3Q6OnBlcmZv
cm1EZWxldGUpOgorICAgICAgICAoSlNDOjpQcm94eU9iamVjdDo6ZGVsZXRlUHJvcGVydHlCeUlu
ZGV4KToKKyAgICAgICAgKEpTQzo6UHJveHlPYmplY3Q6OnBlcmZvcm1EZWZpbmVPd25Qcm9wZXJ0
eSk6CisgICAgICAgIChKU0M6OlByb3h5T2JqZWN0OjpwZXJmb3JtR2V0T3duUHJvcGVydHlOYW1l
cyk6CisgICAgICAgICogcnVudGltZS9SZWdFeHBHbG9iYWxEYXRhLmNwcDoKKyAgICAgICAgKEpT
Qzo6UmVnRXhwR2xvYmFsRGF0YTo6Z2V0QmFja3JlZik6CisgICAgICAgIChKU0M6OlJlZ0V4cEds
b2JhbERhdGE6OmdldExhc3RQYXJlbik6CisgICAgICAgICogcnVudGltZS9SZWdFeHBNYXRjaGVz
QXJyYXkuY3BwOgorICAgICAgICAoSlNDOjpjcmVhdGVFbXB0eVJlZ0V4cE1hdGNoZXNBcnJheSk6
CisgICAgICAgICogcnVudGltZS9SZWdFeHBNYXRjaGVzQXJyYXkuaDoKKyAgICAgICAgKEpTQzo6
Y3JlYXRlUmVnRXhwTWF0Y2hlc0FycmF5KToKKyAgICAgICAgKiBydW50aW1lL1JlZ0V4cFByb3Rv
dHlwZS5jcHA6CisgICAgICAgIChKU0M6OnJlZ0V4cFByb3RvR2V0dGVyRmxhZ3MpOgorICAgICAg
ICAoSlNDOjpyZWdFeHBQcm90b0dldHRlclNvdXJjZUludGVybmFsKToKKyAgICAgICAgKEpTQzo6
cmVnRXhwUHJvdG9HZXR0ZXJTb3VyY2UpOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwU3RyaW5n
SXRlcmF0b3JQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpSZWdFeHBTdHJpbmdJdGVyYXRv
clByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAqIHJ1bnRpbWUvU2FtcGxpbmdQ
cm9maWxlci5jcHA6CisgICAgICAgIChKU0M6OlNhbXBsaW5nUHJvZmlsZXI6OnByb2Nlc3NVbnZl
cmlmaWVkU3RhY2tUcmFjZXMpOgorICAgICAgICAqIHJ1bnRpbWUvU2NyaXB0RXhlY3V0YWJsZS5j
cHA6CisgICAgICAgIChKU0M6OlNjcmlwdEV4ZWN1dGFibGU6Omluc3RhbGxDb2RlKToKKyAgICAg
ICAgKEpTQzo6U2NyaXB0RXhlY3V0YWJsZTo6bmV3Q29kZUJsb2NrRm9yKToKKyAgICAgICAgKEpT
Qzo6U2NyaXB0RXhlY3V0YWJsZTo6bmV3UmVwbGFjZW1lbnRDb2RlQmxvY2tGb3IpOgorICAgICAg
ICAoSlNDOjpzZXR1cEpJVCk6CisgICAgICAgICogcnVudGltZS9TZXRJdGVyYXRvclByb3RvdHlw
ZS5jcHA6CisgICAgICAgIChKU0M6OlNldEl0ZXJhdG9yUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlv
bik6CisgICAgICAgICogcnVudGltZS9TZXRQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpT
ZXRQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKiBydW50aW1lL1N0YWNrRnJh
bWUuY3BwOgorICAgICAgICAoSlNDOjpTdGFja0ZyYW1lOjpjb21wdXRlTGluZUFuZENvbHVtbiBj
b25zdCk6CisgICAgICAgICogcnVudGltZS9TdHJpbmdDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAg
IChKU0M6OnN0cmluZ0Zyb21DaGFyQ29kZSk6CisgICAgICAgIChKU0M6OnN0cmluZ0Zyb21Db2Rl
UG9pbnQpOgorICAgICAgICAoSlNDOjpzdHJpbmdDb25zdHJ1Y3Rvcik6CisgICAgICAgIChKU0M6
OmNhbGxTdHJpbmdDb25zdHJ1Y3Rvcik6CisgICAgICAgICogcnVudGltZS9TdHJpbmdJdGVyYXRv
clByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OlN0cmluZ0l0ZXJhdG9yUHJvdG90eXBlOjpm
aW5pc2hDcmVhdGlvbik6CisgICAgICAgICogcnVudGltZS9TdHJpbmdPYmplY3QuY3BwOgorICAg
ICAgICAoSlNDOjpTdHJpbmdPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgpOgorICAg
ICAgICAoSlNDOjpTdHJpbmdPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMpOgorICAgICAgICAq
IHJ1bnRpbWUvU3RyaW5nT2JqZWN0Lmg6CisgICAgICAgIChKU0M6OlN0cmluZ09iamVjdDo6Y3Jl
YXRlKToKKyAgICAgICAgKEpTQzo6anNTdHJpbmdXaXRoUmV1c2UpOgorICAgICAgICAoSlNDOjpq
c1N1YnN0cmluZyk6CisgICAgICAgICogcnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3BwOgorICAg
ICAgICAoSlNDOjpTdHJpbmdQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpT
Qzo6U3RyaW5nUHJvdG90eXBlOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpqc1NwbGljZVN1YnN0
cmluZ3MpOgorICAgICAgICAoSlNDOjpqc1NwbGljZVN1YnN0cmluZ3NXaXRoU2VwYXJhdG9ycyk6
CisgICAgICAgIChKU0M6OnJlcGxhY2VVc2luZ1JlZ0V4cFNlYXJjaCk6CisgICAgICAgIChKU0M6
Om9wZXJhdGlvblN0cmluZ1Byb3RvRnVuY1JlcGxhY2VSZWdFeHBFbXB0eVN0cik6CisgICAgICAg
IChKU0M6Om9wZXJhdGlvblN0cmluZ1Byb3RvRnVuY1JlcGxhY2VSZWdFeHBTdHJpbmcpOgorICAg
ICAgICAoSlNDOjpyZXBsYWNlVXNpbmdTdHJpbmdTZWFyY2gpOgorICAgICAgICAoSlNDOjpvcGVy
YXRpb25TdHJpbmdQcm90b0Z1bmNSZXBsYWNlR2VuZXJpYyk6CisgICAgICAgIChKU0M6OnN0cmlu
Z1Byb3RvRnVuY0NoYXJBdCk6CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY1NwbGl0RmFz
dCk6CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY1N1YnN0cik6CisgICAgICAgIChKU0M6
OnN0cmluZ1Byb3RvRnVuY1RvTG93ZXJDYXNlKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9G
dW5jVG9VcHBlckNhc2UpOgorICAgICAgICAoSlNDOjp0b0xvY2FsZUNhc2UpOgorICAgICAgICAo
SlNDOjp0cmltU3RyaW5nKToKKyAgICAgICAgKEpTQzo6bm9ybWFsaXplKToKKyAgICAgICAgKiBy
dW50aW1lL1N0cmluZ1Byb3RvdHlwZUlubGluZXMuaDoKKyAgICAgICAgKEpTQzo6c3RyaW5nU2xp
Y2UpOgorICAgICAgICAqIHJ1bnRpbWUvU3RyaW5nUmVjdXJzaW9uQ2hlY2tlci5jcHA6CisgICAg
ICAgIChKU0M6OlN0cmluZ1JlY3Vyc2lvbkNoZWNrZXI6OmVtcHR5U3RyaW5nKToKKyAgICAgICAg
KiBydW50aW1lL1N0cnVjdHVyZS5jcHA6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6ZGlkVHJh
bnNpdGlvbkZyb21UaGlzU3RydWN0dXJlIGNvbnN0KToKKyAgICAgICAgKiBydW50aW1lL1N0cnVj
dHVyZUlubGluZXMuaDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpkaWRSZXBsYWNlUHJvcGVy
dHkpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnNob3VsZENvbnZlcnRUb1BvbHlQcm90byk6
CisgICAgICAgICogcnVudGltZS9TeW1ib2xDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6
OnN5bWJvbENvbnN0cnVjdG9yS2V5Rm9yKToKKyAgICAgICAgKiBydW50aW1lL1N5bWJvbFByb3Rv
dHlwZS5jcHA6CisgICAgICAgIChKU0M6OlN5bWJvbFByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24p
OgorICAgICAgICAoSlNDOjpzeW1ib2xQcm90b0dldHRlckRlc2NyaXB0aW9uKToKKyAgICAgICAg
KEpTQzo6c3ltYm9sUHJvdG9GdW5jVG9TdHJpbmcpOgorICAgICAgICAqIHJ1bnRpbWUvU3ltYm9s
VGFibGUuY3BwOgorICAgICAgICAoSlNDOjpTeW1ib2xUYWJsZTo6c2V0UmFyZURhdGFDb2RlQmxv
Y2spOgorICAgICAgICAqIHJ1bnRpbWUvVGVzdFJ1bm5lclV0aWxzLmNwcDoKKyAgICAgICAgKEpT
Qzo6Z2V0RXhlY3V0YWJsZUZvckZ1bmN0aW9uKToKKyAgICAgICAgKiBydW50aW1lL1ZNLmNwcDoK
KyAgICAgICAgKEpTQzo6Vk06OlZNKToKKyAgICAgICAgKEpTQzo6Vk06OmdldEhvc3RGdW5jdGlv
bik6CisgICAgICAgIChKU0M6OlZNOjpnZXRDVElJbnRlcm5hbEZ1bmN0aW9uVHJhbXBvbGluZUZv
cik6CisgICAgICAgIChKU0M6OlZNOjpzaHJpbmtGb290cHJpbnRXaGVuSWRsZSk6CisgICAgICAg
IChKU0M6OmxvZ1Nhbml0aXplU3RhY2spOgorICAgICAgICAoSlNDOjpzYW5pdGl6ZVN0YWNrRm9y
Vk0pOgorICAgICAgICAoSlNDOjpWTTo6ZW1wdHlQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yU2xvdyk6
CisgICAgICAgICogcnVudGltZS9WTS5oOgorICAgICAgICAoSlNDOjpWTTo6Z2V0Q1RJU3R1Yik6
CisgICAgICAgIChKU0M6OldlYWtTZXQ6OmhlYXAgY29uc3QpOgorICAgICAgICAqIHJ1bnRpbWUv
Vk1UcmFwcy5jcHA6CisgICAgICAgICogcnVudGltZS9XZWFrTWFwUHJvdG90eXBlLmNwcDoKKyAg
ICAgICAgKEpTQzo6V2Vha01hcFByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAq
IHJ1bnRpbWUvV2Vha09iamVjdFJlZlByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OldlYWtP
YmplY3RSZWZQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKiBydW50aW1lL1dl
YWtTZXRQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpXZWFrU2V0UHJvdG90eXBlOjpmaW5p
c2hDcmVhdGlvbik6CisgICAgICAgICogdG9vbHMvSGVhcFZlcmlmaWVyLmNwcDoKKyAgICAgICAg
KEpTQzo6SGVhcFZlcmlmaWVyOjpwcmludFZlcmlmaWNhdGlvbkhlYWRlcik6CisgICAgICAgIChK
U0M6OkhlYXBWZXJpZmllcjo6dmVyaWZ5Q2VsbExpc3QpOgorICAgICAgICAoSlNDOjpIZWFwVmVy
aWZpZXI6OnZhbGlkYXRlSlNDZWxsKToKKyAgICAgICAgKEpTQzo6SGVhcFZlcmlmaWVyOjpyZXBv
cnRDZWxsKToKKyAgICAgICAgKiB0b29scy9KU0RvbGxhclZNLmNwcDoKKyAgICAgICAgKEpTQzo6
SlNEb2xsYXJWTUNhbGxGcmFtZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpKU0Rv
bGxhclZNQ2FsbEZyYW1lOjphZGRQcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkN1c3RvbUdldHRl
cjo6Z2V0T3duUHJvcGVydHlTbG90KToKKyAgICAgICAgKEpTQzo6Q3VzdG9tR2V0dGVyOjpjdXN0
b21HZXR0ZXIpOgorICAgICAgICAoSlNDOjpDdXN0b21HZXR0ZXI6OmN1c3RvbUdldHRlckFjZXNz
b3IpOgorICAgICAgICAoSlNDOjpET01KSVRHZXR0ZXI6OkRPTUpJVEF0dHJpYnV0ZTo6c2xvd0Nh
bGwpOgorICAgICAgICAoSlNDOjpET01KSVRHZXR0ZXI6OmZpbmlzaENyZWF0aW9uKToKKyAgICAg
ICAgKEpTQzo6RE9NSklUR2V0dGVyQ29tcGxleDo6RE9NSklUQXR0cmlidXRlOjpzbG93Q2FsbCk6
CisgICAgICAgIChKU0M6OkRPTUpJVEdldHRlckNvbXBsZXg6OmZpbmlzaENyZWF0aW9uKToKKyAg
ICAgICAgKEpTQzo6RE9NSklURnVuY3Rpb25PYmplY3Q6OmZ1bmN0aW9uV2l0aG91dFR5cGVDaGVj
ayk6CisgICAgICAgIChKU0M6OkRPTUpJVEZ1bmN0aW9uT2JqZWN0OjpmaW5pc2hDcmVhdGlvbik6
CisgICAgICAgIChKU0M6OkRPTUpJVENoZWNrU3ViQ2xhc3NPYmplY3Q6OmZ1bmN0aW9uV2l0aG91
dFR5cGVDaGVjayk6CisgICAgICAgIChKU0M6OkRPTUpJVENoZWNrU3ViQ2xhc3NPYmplY3Q6OmZp
bmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6RE9NSklUR2V0dGVyQmFzZUpTT2JqZWN0OjpE
T01KSVRBdHRyaWJ1dGU6OnNsb3dDYWxsKToKKyAgICAgICAgKEpTQzo6RE9NSklUR2V0dGVyQmFz
ZUpTT2JqZWN0OjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OmN1c3RvbVNldEFjY2Vz
c29yKToKKyAgICAgICAgKEpTQzo6Y3VzdG9tU2V0VmFsdWUpOgorICAgICAgICAoSlNDOjpKU1Rl
c3RDdXN0b21HZXR0ZXJTZXR0ZXI6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6V2Fz
bVN0cmVhbWluZ1BhcnNlcjo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpnZXRFeGVj
dXRhYmxlRm9yRnVuY3Rpb24pOgorICAgICAgICAoSlNDOjpmdW5jdGlvbkNvZGVCbG9ja0Zvcik6
CisgICAgICAgIChKU0M6OmZ1bmN0aW9uSW5kZXhpbmdNb2RlKToKKyAgICAgICAgKEpTQzo6ZnVu
Y3Rpb25WYWx1ZSk6CisgICAgICAgIChKU0M6OmZ1bmN0aW9uQ3JlYXRlQnVpbHRpbik6CisgICAg
ICAgIChKU0M6OmZ1bmN0aW9uR2V0UHJpdmF0ZVByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6SlNE
b2xsYXJWTTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpKU0RvbGxhclZNOjphZGRG
dW5jdGlvbik6CisgICAgICAgIChKU0M6OkpTRG9sbGFyVk06OmFkZENvbnN0cnVjdGlibGVGdW5j
dGlvbik6CisgICAgICAgICogdG9vbHMvVk1JbnNwZWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpW
TUluc3BlY3Rvcjo6ZHVtcFJlZ2lzdGVycyk6CisgICAgICAgIChKU0M6OlZNSW5zcGVjdG9yOjpk
dW1wQ2VsbE1lbW9yeVRvU3RyZWFtKToKKyAgICAgICAgKiB3YXNtL1dhc21JbnN0YW5jZS5jcHA6
CisgICAgICAgIChKU0M6Oldhc206Okluc3RhbmNlOjpzZXRHbG9iYWwpOgorICAgICAgICAoSlND
OjpXYXNtOjpJbnN0YW5jZTo6c2V0RnVuY3Rpb25XcmFwcGVyKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6c2V0V2FzbVRhYmxlRWxlbWVudCk6CisgICAgICAgIChKU0M6Oldhc206OmRvV2FzbVJlZkZ1
bmMpOgorICAgICAgICAqIHdhc20vV2FzbVRhYmxlLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6
VGFibGU6OnNldCk6CisgICAgICAgIChKU0M6Oldhc206OkZ1bmNSZWZUYWJsZTo6c2V0RnVuY3Rp
b24pOgorICAgICAgICAqIHdhc20vanMvSlNXZWJBc3NlbWJseS5jcHA6CisgICAgICAgIChKU0M6
OnJlc29sdmUpOgorICAgICAgICAqIHdhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcDoK
KyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjpjcmVhdGUpOgorICAgICAgICAq
IHdhc20vanMvV2FzbVRvSlMuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpoYW5kbGVCYWRJNjRV
c2UpOgorICAgICAgICAoSlNDOjpXYXNtOjp3YXNtVG9KUyk6CisgICAgICAgIChKU0M6Oldhc206
Ondhc21Ub0pTRXhjZXB0aW9uKToKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rp
b24uY3BwOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUZ1bmN0aW9uOjpqc0NhbGxFbnRyeXBv
aW50U2xvdyk6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseU1lbW9yeUNvbnN0cnVjdG9y
LmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0SlNXZWJBc3NlbWJseU1lbW9yeSk6CisgICAg
ICAgICogd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAg
KEpTQzo6d2ViQXNzZW1ibHlNb2R1bGVJbXBvcnRzKToKKyAgICAgICAgKEpTQzo6d2ViQXNzZW1i
bHlNb2R1bGVFeHBvcnRzKToKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVj
b3JkLmNwcDoKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmZpbmlzaENy
ZWF0aW9uKToKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmxpbmspOgor
ICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlUYWJsZUNvbnN0cnVjdG9yLmNwcDoKKyAgICAg
ICAgKEpTQzo6Y29uc3RydWN0SlNXZWJBc3NlbWJseVRhYmxlKToKKwogMjAxOS0wOC0yNiAgRGV2
aW4gUm91c3NvICA8ZHJvdXNzb0BhcHBsZS5jb20+CiAKICAgICAgICAgV2ViIEluc3BlY3Rvcjog
dXNlIG1vcmUgQysrIGtleXdvcmRzIGZvciBkZWZpbmluZyBhZ2VudHMKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9LZXl3b3JkTG9va3VwR2VuZXJhdG9yLnB5Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9LZXl3b3JkTG9va3VwR2VuZXJhdG9yLnB5CShyZXZpc2lvbiAy
NDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvS2V5d29yZExvb2t1cEdlbmVyYXRvci5w
eQkod29ya2luZyBjb3B5KQpAQCAtMSw0ICsxLDQgQEAKLSMgQ29weXJpZ2h0IChDKSAyMDExIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChDKSAyMDExLTIwMTkg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogIyBDb3B5cmlnaHQgKEMpIDIwMTIgU29u
eSBOZXR3b3JrIEVudGVydGFpbm1lbnQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAjCiAjIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dApAQCAtMTQ0LDcgKzE0NCw3IEBAIGNsYXNzIFRyaWU6CiAgICAgICAgICAgICBwcmludChz
dHIgKyAiaWYgKCFpc0lkZW50UGFydEluY2x1ZGluZ0VzY2FwZShjb2RlICsgJWQsIG1fY29kZUVu
ZCkpIHsiICUgKGxlbihzZWxmLmZ1bGxQcmVmaXgpKSkKICAgICAgICAgICAgIHByaW50KHN0ciAr
ICIgICAgaW50ZXJuYWxTaGlmdDwlZD4oKTsiICUgbGVuKHNlbGYuZnVsbFByZWZpeCkpCiAgICAg
ICAgICAgICBwcmludChzdHIgKyAiICAgIGlmIChzaG91bGRDcmVhdGVJZGVudGlmaWVyKSIpCi0g
ICAgICAgICAgICBwcmludChzdHIgKyAoIiAgICAgICAgZGF0YS0+aWRlbnQgPSAmbV92bS0+cHJv
cGVydHlOYW1lcy0+JXNLZXl3b3JkOyIgJSBzZWxmLmZ1bGxQcmVmaXgpKQorICAgICAgICAgICAg
cHJpbnQoc3RyICsgKCIgICAgICAgIGRhdGEtPmlkZW50ID0gJm1fdm0ucHJvcGVydHlOYW1lcy0+
JXNLZXl3b3JkOyIgJSBzZWxmLmZ1bGxQcmVmaXgpKQogICAgICAgICAgICAgcHJpbnQoc3RyICsg
IiAgICByZXR1cm4gIiArIHNlbGYudmFsdWUgKyAiOyIpCiAgICAgICAgICAgICBwcmludChzdHIg
KyAifSIpCiAgICAgICAgIHJvb3RJbmRleCA9IGxlbihzZWxmLmZ1bGxQcmVmaXgpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZHluYmVuY2guY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9keW5iZW5jaC5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9keW5iZW5jaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtOTAsMjIgKzkwLDIyIEBA
IGludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKICAgICBXVEY6OmluaXRpYWxpemVNYWlu
VGhyZWFkKCk7CiAgICAgSlNDOjppbml0aWFsaXplVGhyZWFkaW5nKCk7CiAKLSAgICBWTSogdm0g
PSAmVk06OmNyZWF0ZShMYXJnZUhlYXApLmxlYWtSZWYoKTsKKyAgICBWTSYgdm0gPSBWTTo6Y3Jl
YXRlKExhcmdlSGVhcCkubGVha1JlZigpOwogICAgIHsKICAgICAgICAgSlNMb2NrSG9sZGVyIGxv
Y2tlcih2bSk7CiAKICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9Ci0gICAg
ICAgICAgICBKU0dsb2JhbE9iamVjdDo6Y3JlYXRlKCp2bSwgSlNHbG9iYWxPYmplY3Q6OmNyZWF0
ZVN0cnVjdHVyZSgqdm0sIGpzTnVsbCgpKSk7CisgICAgICAgICAgICBKU0dsb2JhbE9iamVjdDo6
Y3JlYXRlKHZtLCBKU0dsb2JhbE9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKHZtLCBqc051bGwoKSkp
OwogICAgICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsK
IAotICAgICAgICBJZGVudGlmaWVyIGlkZW50RiA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhl
YywgImYiKTsKLSAgICAgICAgSWRlbnRpZmllciBpZGVudEcgPSBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKGV4ZWMsICJnIik7CisgICAgICAgIElkZW50aWZpZXIgaWRlbnRGID0gSWRlbnRpZmllcjo6
ZnJvbVN0cmluZyh2bSwgImYiKTsKKyAgICAgICAgSWRlbnRpZmllciBpZGVudEcgPSBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKHZtLCAiZyIpOwogCiAgICAgICAgIFN0cnVjdHVyZSogb2JqZWN0U3Ry
dWN0dXJlID0KLSAgICAgICAgICAgIEpTRmluYWxPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZSgqdm0s
IGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5vYmplY3RQcm90b3R5cGUoKSwgMik7CisgICAg
ICAgICAgICBKU0ZpbmFsT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUodm0sIGdsb2JhbE9iamVjdCwg
Z2xvYmFsT2JqZWN0LT5vYmplY3RQcm90b3R5cGUoKSwgMik7CiAKICAgICAgICAgLy8gTm9uLXN0
cmljdCBkeW5hbWljIGdldCBieSBpZDoKLSAgICAgICAgSlNWYWx1ZSBvYmplY3QgPSBKU0ZpbmFs
T2JqZWN0OjpjcmVhdGUoKnZtLCBvYmplY3RTdHJ1Y3R1cmUpOworICAgICAgICBKU1ZhbHVlIG9i
amVjdCA9IEpTRmluYWxPYmplY3Q6OmNyZWF0ZSh2bSwgb2JqZWN0U3RydWN0dXJlKTsKICAgICAg
ICAgewogICAgICAgICAgICAgUHV0UHJvcGVydHlTbG90IHNsb3Qob2JqZWN0LCBmYWxzZSwgUHV0
UHJvcGVydHlTbG90OjpQdXRCeUlkKTsKICAgICAgICAgICAgIG9iamVjdC5wdXRJbmxpbmUoZXhl
YywgaWRlbnRGLCBqc051bWJlcig0MiksIHNsb3QpOwpAQCAtMTI3LDcgKzEyNyw3IEBAIGludCBt
YWluKGludCBhcmdjLCBjaGFyKiogYXJndikKICAgICAgICAgICAgIH0pOwogCiAgICAgICAgIC8v
IE5vbi1zdHJpY3QgZHluYW1pYyBwdXQgYnkgaWQgcmVwbGFjZToKLSAgICAgICAgb2JqZWN0ID0g
SlNGaW5hbE9iamVjdDo6Y3JlYXRlKCp2bSwgb2JqZWN0U3RydWN0dXJlKTsKKyAgICAgICAgb2Jq
ZWN0ID0gSlNGaW5hbE9iamVjdDo6Y3JlYXRlKHZtLCBvYmplY3RTdHJ1Y3R1cmUpOwogICAgICAg
ICB7CiAgICAgICAgICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChvYmplY3QsIGZhbHNlLCBQdXRQ
cm9wZXJ0eVNsb3Q6OlB1dEJ5SWQpOwogICAgICAgICAgICAgb2JqZWN0LnB1dElubGluZShleGVj
LCBpZGVudEYsIGpzTnVtYmVyKDQyKSwgc2xvdCk7CkBAIC0xNTgsNyArMTU4LDcgQEAgaW50IG1h
aW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQogICAgICAgICAgICAgMTAwMDAwMCwKICAgICAgICAg
ICAgIFsmXSAodW5zaWduZWQgaXRlcmF0aW9uQ291bnQpIHsKICAgICAgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBpdGVyYXRpb25Db3VudDsgaS0tOykgewotICAgICAgICAgICAgICAgICAg
ICBKU1ZhbHVlIG9iamVjdCA9IEpTRmluYWxPYmplY3Q6OmNyZWF0ZSgqdm0sIG9iamVjdFN0cnVj
dHVyZSk7CisgICAgICAgICAgICAgICAgICAgIEpTVmFsdWUgb2JqZWN0ID0gSlNGaW5hbE9iamVj
dDo6Y3JlYXRlKHZtLCBvYmplY3RTdHJ1Y3R1cmUpOwogICAgICAgICAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChvYmplY3QsIGZhbHNl
LCBQdXRQcm9wZXJ0eVNsb3Q6OlB1dEJ5SWQpOwogICAgICAgICAgICAgICAgICAgICAgICAgb2Jq
ZWN0LnB1dElubGluZShleGVjLCBpZGVudEYsIGpzTnVtYmVyKGkpLCBzbG90KTsKQEAgLTE3MSw3
ICsxNzEsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCiAgICAgICAgICAgICB9
KTsKIAogICAgICAgICAvLyBOb24tc3RyaWN0IGR5bmFtaWMgZ2V0IGJ5IGlkIHdpdGggZHluYW1p
YyBzdG9yZSBjb250ZXh0OgotICAgICAgICBvYmplY3QgPSBKU0ZpbmFsT2JqZWN0OjpjcmVhdGUo
KnZtLCBvYmplY3RTdHJ1Y3R1cmUpOworICAgICAgICBvYmplY3QgPSBKU0ZpbmFsT2JqZWN0Ojpj
cmVhdGUodm0sIG9iamVjdFN0cnVjdHVyZSk7CiAgICAgICAgIHsKICAgICAgICAgICAgIFB1dFBy
b3BlcnR5U2xvdCBzbG90KG9iamVjdCwgZmFsc2UpOwogICAgICAgICAgICAgb2JqZWN0LnB1dElu
bGluZShleGVjLCBpZGVudEYsIGpzTnVtYmVyKDQyKSwgc2xvdCk7CkBAIC0xOTMsNyArMTkzLDcg
QEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQogICAgICAgICAgICAgfSk7CiAKICAg
ICAgICAgLy8gTm9uLXN0cmljdCBkeW5hbWljIHB1dCBieSBpZCByZXBsYWNlIHdpdGggZHluYW1p
YyBzdG9yZSBjb250ZXh0OgotICAgICAgICBvYmplY3QgPSBKU0ZpbmFsT2JqZWN0OjpjcmVhdGUo
KnZtLCBvYmplY3RTdHJ1Y3R1cmUpOworICAgICAgICBvYmplY3QgPSBKU0ZpbmFsT2JqZWN0Ojpj
cmVhdGUodm0sIG9iamVjdFN0cnVjdHVyZSk7CiAgICAgICAgIHsKICAgICAgICAgICAgIFB1dFBy
b3BlcnR5U2xvdCBzbG90KG9iamVjdCwgZmFsc2UpOwogICAgICAgICAgICAgb2JqZWN0LnB1dElu
bGluZShleGVjLCBpZGVudEYsIGpzTnVtYmVyKDQyKSwgc2xvdCk7CkBAIC0yMjQsNyArMjI0LDcg
QEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQogICAgICAgICAgICAgMTAwMDAwMCwK
ICAgICAgICAgICAgIFsmXSAodW5zaWduZWQgaXRlcmF0aW9uQ291bnQpIHsKICAgICAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSBpdGVyYXRpb25Db3VudDsgaS0tOykgewotICAgICAgICAg
ICAgICAgICAgICBKU1ZhbHVlIG9iamVjdCA9IEpTRmluYWxPYmplY3Q6OmNyZWF0ZSgqdm0sIG9i
amVjdFN0cnVjdHVyZSk7CisgICAgICAgICAgICAgICAgICAgIEpTVmFsdWUgb2JqZWN0ID0gSlNG
aW5hbE9iamVjdDo6Y3JlYXRlKHZtLCBvYmplY3RTdHJ1Y3R1cmUpOwogICAgICAgICAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChvYmpl
Y3QsIGZhbHNlKTsKICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5wdXRJbmxpbmUoZXhl
YywgaWRlbnRGLCBqc051bWJlcihpKSwgc2xvdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvanNjLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAko
cmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTU1MSwxMiArNTUxLDEyIEBAIHByb3RlY3RlZDoKICAgICAgICAgYWRkRnVu
Y3Rpb24odm0sICJjbGVhclNhbXBsaW5nRmxhZ3MiLCBmdW5jdGlvbkNsZWFyU2FtcGxpbmdGbGFn
cywgMSk7CiAjZW5kaWYKIAotICAgICAgICBwdXREaXJlY3ROYXRpdmVGdW5jdGlvbih2bSwgdGhp
cywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJPU1JFeGl0IiksIDAsIGZ1bmN0aW9uVW5k
ZWZpbmVkMSwgT1NSRXhpdEludHJpbnNpYywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5
QXR0cmlidXRlOjpEb250RW51bSkpOwotICAgICAgICBwdXREaXJlY3ROYXRpdmVGdW5jdGlvbih2
bSwgdGhpcywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJpc0ZpbmFsVGllciIpLCAwLCBm
dW5jdGlvbkZhbHNlLCBJc0ZpbmFsVGllckludHJpbnNpYywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOwotICAgICAgICBwdXREaXJlY3ROYXRpdmVG
dW5jdGlvbih2bSwgdGhpcywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJwcmVkaWN0SW50
MzIiKSwgMCwgZnVuY3Rpb25VbmRlZmluZWQyLCBTZXRJbnQzMkhlYXBQcmVkaWN0aW9uSW50cmlu
c2ljLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7
Ci0gICAgICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9uKHZtLCB0aGlzLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKCZ2bSwgImlzSW50MzIiKSwgMCwgZnVuY3Rpb25Jc0ludDMyLCBDaGVja0ludDMy
SW50cmluc2ljLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRF
bnVtKSk7Ci0gICAgICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9uKHZtLCB0aGlzLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKCZ2bSwgImlzUHVyZU5hTiIpLCAwLCBmdW5jdGlvbklzUHVyZU5hTiwg
Q2hlY2tJbnQzMkludHJpbnNpYywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmli
dXRlOjpEb250RW51bSkpOwotICAgICAgICBwdXREaXJlY3ROYXRpdmVGdW5jdGlvbih2bSwgdGhp
cywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJmaWF0SW50NTIiKSwgMCwgZnVuY3Rpb25J
ZGVudGl0eSwgRmlhdEludDUySW50cmluc2ljLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVy
dHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7CisgICAgICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9u
KHZtLCB0aGlzLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiT1NSRXhpdCIpLCAwLCBmdW5j
dGlvblVuZGVmaW5lZDEsIE9TUkV4aXRJbnRyaW5zaWMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQ
cm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKKyAgICAgICAgcHV0RGlyZWN0TmF0aXZlRnVu
Y3Rpb24odm0sIHRoaXMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJpc0ZpbmFsVGllciIp
LCAwLCBmdW5jdGlvbkZhbHNlLCBJc0ZpbmFsVGllckludHJpbnNpYywgc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOworICAgICAgICBwdXREaXJlY3RO
YXRpdmVGdW5jdGlvbih2bSwgdGhpcywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInByZWRp
Y3RJbnQzMiIpLCAwLCBmdW5jdGlvblVuZGVmaW5lZDIsIFNldEludDMySGVhcFByZWRpY3Rpb25J
bnRyaW5zaWMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVu
dW0pKTsKKyAgICAgICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rpb24odm0sIHRoaXMsIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcodm0sICJpc0ludDMyIiksIDAsIGZ1bmN0aW9uSXNJbnQzMiwgQ2hlY2tJ
bnQzMkludHJpbnNpYywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpE
b250RW51bSkpOworICAgICAgICBwdXREaXJlY3ROYXRpdmVGdW5jdGlvbih2bSwgdGhpcywgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImlzUHVyZU5hTiIpLCAwLCBmdW5jdGlvbklzUHVyZU5h
TiwgQ2hlY2tJbnQzMkludHJpbnNpYywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0
cmlidXRlOjpEb250RW51bSkpOworICAgICAgICBwdXREaXJlY3ROYXRpdmVGdW5jdGlvbih2bSwg
dGhpcywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImZpYXRJbnQ1MiIpLCAwLCBmdW5jdGlv
bklkZW50aXR5LCBGaWF0SW50NTJJbnRyaW5zaWMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9w
ZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKICAgICAgICAgCiAgICAgICAgIGFkZEZ1bmN0aW9u
KHZtLCAiZWZmZWN0ZnVsNDIiLCBmdW5jdGlvbkVmZmVjdGZ1bDQyLCAwKTsKICAgICAgICAgYWRk
RnVuY3Rpb24odm0sICJtYWtlTWFzcXVlcmFkZXIiLCBmdW5jdGlvbk1ha2VNYXNxdWVyYWRlciwg
MCk7CkBAIC02MDAsMjYgKzYwMCwyNiBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIGlmICghYXJndW1l
bnRzLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgSlNBcnJheSogYXJyYXkgPSBjb25zdHJ1Y3RF
bXB0eUFycmF5KGdsb2JhbEV4ZWMoKSwgMCk7CiAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGFyZ3VtZW50cy5zaXplKCk7ICsraSkKLSAgICAgICAgICAgICAgICBhcnJheS0+cHV0
RGlyZWN0SW5kZXgoZ2xvYmFsRXhlYygpLCBpLCBqc1N0cmluZyhnbG9iYWxFeGVjKCksIGFyZ3Vt
ZW50c1tpXSkpOwotICAgICAgICAgICAgcHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKGdsb2JhbEV4ZWMoKSwgImFyZ3VtZW50cyIpLCBhcnJheSk7CisgICAgICAgICAgICAgICAg
YXJyYXktPnB1dERpcmVjdEluZGV4KGdsb2JhbEV4ZWMoKSwgaSwganNTdHJpbmcodm0sIGFyZ3Vt
ZW50c1tpXSkpOworICAgICAgICAgICAgcHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKHZtLCAiYXJndW1lbnRzIiksIGFycmF5KTsKICAgICAgICAgfQogCi0gICAgICAgIHB1dERp
cmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhnbG9iYWxFeGVjKCksICJjb25zb2xlIiks
IGpzVW5kZWZpbmVkKCkpOworICAgICAgICBwdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21T
dHJpbmcodm0sICJjb25zb2xlIiksIGpzVW5kZWZpbmVkKCkpOwogICAgICAgICAKICAgICAgICAg
U3RydWN0dXJlKiBwbGFpbk9iamVjdFN0cnVjdHVyZSA9IEpTRmluYWxPYmplY3Q6OmNyZWF0ZVN0
cnVjdHVyZSh2bSwgdGhpcywgb2JqZWN0UHJvdG90eXBlKCksIDApOwogICAgICAgICAKICAgICAg
ICAgSlNPYmplY3QqIGRvbGxhciA9IEpTRmluYWxPYmplY3Q6OmNyZWF0ZSh2bSwgcGxhaW5PYmpl
Y3RTdHJ1Y3R1cmUpOwotICAgICAgICBwdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJp
bmcoZ2xvYmFsRXhlYygpLCAiJCIpLCBkb2xsYXIpOwotICAgICAgICBwdXREaXJlY3Qodm0sIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcoZ2xvYmFsRXhlYygpLCAiJDI2MiIpLCBkb2xsYXIpOworICAg
ICAgICBwdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICIkIiksIGRvbGxh
cik7CisgICAgICAgIHB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIiQy
NjIiKSwgZG9sbGFyKTsKICAgICAgICAgCiAgICAgICAgIGFkZEZ1bmN0aW9uKHZtLCBkb2xsYXIs
ICJjcmVhdGVSZWFsbSIsIGZ1bmN0aW9uRG9sbGFyQ3JlYXRlUmVhbG0sIDApOwogICAgICAgICBh
ZGRGdW5jdGlvbih2bSwgZG9sbGFyLCAiZGV0YWNoQXJyYXlCdWZmZXIiLCBmdW5jdGlvbkRvbGxh
ckRldGFjaEFycmF5QnVmZmVyLCAxKTsKICAgICAgICAgYWRkRnVuY3Rpb24odm0sIGRvbGxhciwg
ImV2YWxTY3JpcHQiLCBmdW5jdGlvbkRvbGxhckV2YWxTY3JpcHQsIDEpOwogICAgICAgICAKLSAg
ICAgICAgZG9sbGFyLT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZ2xvYmFs
RXhlYygpLCAiZ2xvYmFsIiksIHRoaXMpOworICAgICAgICBkb2xsYXItPnB1dERpcmVjdCh2bSwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImdsb2JhbCIpLCB0aGlzKTsKICAgICAgICAgCiAg
ICAgICAgIEpTT2JqZWN0KiBhZ2VudCA9IEpTRmluYWxPYmplY3Q6OmNyZWF0ZSh2bSwgcGxhaW5P
YmplY3RTdHJ1Y3R1cmUpOwotICAgICAgICBkb2xsYXItPnB1dERpcmVjdCh2bSwgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZyhnbG9iYWxFeGVjKCksICJhZ2VudCIpLCBhZ2VudCk7CisgICAgICAgIGRv
bGxhci0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiYWdlbnQiKSwg
YWdlbnQpOwogICAgICAgICAKICAgICAgICAgLy8gVGhlIHRlc3QyNjIgSU5URVJQUkVUSU5HLm1k
IGRvY3VtZW50IHNheXMgdGhhdCBzb21lIG9mIHRoZXNlIGZ1bmN0aW9ucyBhcmUganVzdCBpbiB0
aGUgbWFpbgogICAgICAgICAvLyB0aHJlYWQgYW5kIHNvbWUgYXJlIGluIHRoZSBvdGhlciB0aHJl
YWRzLiBXZSBqdXN0IHB1dCB0aGVtIGluIGFsbCB0aHJlYWRzLgpAQCAtNjQ2LDcgKzY0Niw3IEBA
IHByb3RlY3RlZDoKICAgICAKICAgICB2b2lkIGFkZEZ1bmN0aW9uKFZNJiB2bSwgSlNPYmplY3Qq
IG9iamVjdCwgY29uc3QgY2hhciogbmFtZSwgTmF0aXZlRnVuY3Rpb24gZnVuY3Rpb24sIHVuc2ln
bmVkIGFyZ3VtZW50cykKICAgICB7Ci0gICAgICAgIElkZW50aWZpZXIgaWRlbnRpZmllciA9IElk
ZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCBuYW1lKTsKKyAgICAgICAgSWRlbnRpZmllciBpZGVu
dGlmaWVyID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgbmFtZSk7CiAgICAgICAgIG9iamVj
dC0+cHV0RGlyZWN0KHZtLCBpZGVudGlmaWVyLCBKU0Z1bmN0aW9uOjpjcmVhdGUodm0sIHRoaXMs
IGFyZ3VtZW50cywgaWRlbnRpZmllci5zdHJpbmcoKSwgZnVuY3Rpb24pKTsKICAgICB9CiAKQEAg
LTg0NCw3ICs4NDQsNyBAQCBKU0ludGVybmFsUHJvbWlzZSogR2xvYmFsT2JqZWN0Ojptb2R1bGVM
CiAgICAgaWYgKCFkaXJlY3RvcnlOYW1lKQogICAgICAgICByZXR1cm4gcmVqZWN0KGNyZWF0ZUVy
cm9yKGV4ZWMsIG1ha2VTdHJpbmcoIkNvdWxkIG5vdCByZXNvbHZlIHRoZSByZWZlcnJlciBuYW1l
ICciLCBTdHJpbmcocmVmZXJyZXIuaW1wbCgpKSwgIicuIikpKTsKIAotICAgIGF1dG8gcmVzdWx0
ID0gSlNDOjppbXBvcnRNb2R1bGUoZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIHJl
c29sdmVQYXRoKGRpcmVjdG9yeU5hbWUudmFsdWUoKSwgTW9kdWxlTmFtZShtb2R1bGVOYW1lKSkp
LCBwYXJhbWV0ZXJzLCBqc1VuZGVmaW5lZCgpKTsKKyAgICBhdXRvIHJlc3VsdCA9IEpTQzo6aW1w
b3J0TW9kdWxlKGV4ZWMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlc29sdmVQYXRoKGRp
cmVjdG9yeU5hbWUudmFsdWUoKSwgTW9kdWxlTmFtZShtb2R1bGVOYW1lKSkpLCBwYXJhbWV0ZXJz
LCBqc1VuZGVmaW5lZCgpKTsKICAgICBpZiAoVU5MSUtFTFkoY2F0Y2hTY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybiByZWplY3QoY2F0Y2hTY29wZS5leGNlcHRpb24oKSk7CiAgICAg
cmV0dXJuIHJlc3VsdDsKQEAgLTg2OCw3ICs4NjgsNyBAQCBJZGVudGlmaWVyIEdsb2JhbE9iamVj
dDo6bW9kdWxlTG9hZGVyUmVzCiAgICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29w
ZSwgY3JlYXRlRXJyb3IoZXhlYywgIkNvdWxkIG5vdCByZXNvbHZlIHRoZSBjdXJyZW50IHdvcmtp
bmcgZGlyZWN0b3J5LiJfcykpOwogICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAgICAgfQot
ICAgICAgICByZXR1cm4gSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIHJlc29sdmVQYXRoKGRp
cmVjdG9yeU5hbWUudmFsdWUoKSwgTW9kdWxlTmFtZShrZXkuaW1wbCgpKSkpOworICAgICAgICBy
ZXR1cm4gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVzb2x2ZVBhdGgoZGlyZWN0b3J5TmFt
ZS52YWx1ZSgpLCBNb2R1bGVOYW1lKGtleS5pbXBsKCkpKSk7CiAgICAgfQogCiAgICAgY29uc3Qg
SWRlbnRpZmllciByZWZlcnJlciA9IHJlZmVycmVyVmFsdWUudG9Qcm9wZXJ0eUtleShleGVjKTsK
QEAgLTg4MCw3ICs4ODAsNyBAQCBJZGVudGlmaWVyIEdsb2JhbE9iamVjdDo6bW9kdWxlTG9hZGVy
UmVzCiAgICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29wZSwgY3JlYXRlRXJyb3Io
ZXhlYywgIkNvdWxkIG5vdCByZXNvbHZlIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LiJf
cykpOwogICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4g
SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIHJlc29sdmVQYXRoKGRpcmVjdG9yeU5hbWUudmFs
dWUoKSwgTW9kdWxlTmFtZShrZXkuaW1wbCgpKSkpOworICAgICAgICByZXR1cm4gSWRlbnRpZmll
cjo6ZnJvbVN0cmluZyh2bSwgcmVzb2x2ZVBhdGgoZGlyZWN0b3J5TmFtZS52YWx1ZSgpLCBNb2R1
bGVOYW1lKGtleS5pbXBsKCkpKSk7CiAgICAgfQogCiAgICAgLy8gSWYgdGhlIHJlZmVycmVyIGV4
aXN0cywgd2UgYXNzdW1lIHRoYXQgdGhlIHJlZmVycmVyIGlzIHRoZSBjb3JyZWN0IGFic29sdXRl
IHBhdGguCkBAIC04ODksNyArODg5LDcgQEAgSWRlbnRpZmllciBHbG9iYWxPYmplY3Q6Om1vZHVs
ZUxvYWRlclJlcwogICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29wZSwgY3JlYXRlRXJy
b3IoZXhlYywgbWFrZVN0cmluZygiQ291bGQgbm90IHJlc29sdmUgdGhlIHJlZmVycmVyIG5hbWUg
JyIsIFN0cmluZyhyZWZlcnJlci5pbXBsKCkpLCAiJy4iKSkpOwogICAgICAgICByZXR1cm4geyB9
OwogICAgIH0KLSAgICByZXR1cm4gSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIHJlc29sdmVQ
YXRoKGRpcmVjdG9yeU5hbWUudmFsdWUoKSwgTW9kdWxlTmFtZShrZXkuaW1wbCgpKSkpOworICAg
IHJldHVybiBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZXNvbHZlUGF0aChkaXJlY3RvcnlO
YW1lLnZhbHVlKCksIE1vZHVsZU5hbWUoa2V5LmltcGwoKSkpKTsKIH0KIAogdGVtcGxhdGU8dHlw
ZW5hbWUgVmVjdG9yPgpAQCAtOTk2LDcgKzk5Niw3IEBAIHB1YmxpYzoKICAgICAgICAgaWYgKCFj
YWNoZUVuYWJsZWQoKSB8fCAhbV9jYWNoZWRCeXRlY29kZSkKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgQnl0ZWNvZGVDYWNoZUVycm9yIGVycm9yOwotICAgICAgICBSZWZQdHI8Q2FjaGVk
Qnl0ZWNvZGU+IGNhY2hlZEJ5dGVjb2RlID0gZW5jb2RlRnVuY3Rpb25Db2RlQmxvY2soKmV4ZWN1
dGFibGUtPnZtKCksIGNvZGVCbG9jaywgZXJyb3IpOworICAgICAgICBSZWZQdHI8Q2FjaGVkQnl0
ZWNvZGU+IGNhY2hlZEJ5dGVjb2RlID0gZW5jb2RlRnVuY3Rpb25Db2RlQmxvY2soZXhlY3V0YWJs
ZS0+dm0oKSwgY29kZUJsb2NrLCBlcnJvcik7CiAgICAgICAgIGlmIChjYWNoZWRCeXRlY29kZSAm
JiAhZXJyb3IuaXNWYWxpZCgpKQogICAgICAgICAgICAgbV9jYWNoZWRCeXRlY29kZS0+YWRkRnVu
Y3Rpb25VcGRhdGUoZXhlY3V0YWJsZSwga2luZCwgKmNhY2hlZEJ5dGVjb2RlKTsKICAgICB9CkBA
IC0xMjA4LDcgKzEyMDgsNyBAQCBKU09iamVjdCogR2xvYmFsT2JqZWN0Ojptb2R1bGVMb2FkZXJD
cmVhCiAgICAgSlNPYmplY3QqIG1ldGFQcm9wZXJ0aWVzID0gY29uc3RydWN0RW1wdHlPYmplY3Qo
ZXhlYywgZ2xvYmFsT2JqZWN0LT5udWxsUHJvdG90eXBlT2JqZWN0U3RydWN0dXJlKCkpOwogICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwogCi0gICAgbWV0YVByb3BlcnRp
ZXMtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJmaWxlbmFtZSIp
LCBrZXkpOworICAgIG1ldGFQcm9wZXJ0aWVzLT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZy
b21TdHJpbmcodm0sICJmaWxlbmFtZSIpLCBrZXkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIG51bGxwdHIpOwogCiAgICAgcmV0dXJuIG1ldGFQcm9wZXJ0aWVzOwpAQCAtMTI4NCw5
ICsxMjg0LDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25EZWIKIAog
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkRlc2NyaWJlKEV4ZWNTdGF0ZSog
ZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGlmIChleGVjLT5hcmd1bWVu
dENvdW50KCkgPCAxKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcoZXhlYywgdG9TdHJpbmco
ZXhlYy0+YXJndW1lbnQoMCkpKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmlu
Zyh2bSwgdG9TdHJpbmcoZXhlYy0+YXJndW1lbnQoMCkpKSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25EZXNjcmliZUFycmF5KEV4ZWNTdGF0ZSogZXhlYykKQEAg
LTEyOTYsOCArMTI5Nyw4IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25E
ZXMKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIEpTT2JqZWN0KiBvYmplY3QgPSBqc0R5
bmFtaWNDYXN0PEpTT2JqZWN0Kj4odm0sIGV4ZWMtPmFyZ3VtZW50KDApKTsKICAgICBpZiAoIW9i
amVjdCkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc05vbnRyaXZpYWxTdHJpbmco
ZXhlYywgIjxub3Qgb2JqZWN0PiJfcykpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNO
b250cml2aWFsU3RyaW5nKGV4ZWMsIHRvU3RyaW5nKCI8QnV0dGVyZmx5OiAiLCBSYXdQb2ludGVy
KG9iamVjdC0+YnV0dGVyZmx5KCkpLCAiOyBwdWJsaWMgbGVuZ3RoOiAiLCBvYmplY3QtPmdldEFy
cmF5TGVuZ3RoKCksICI7IHZlY3RvciBsZW5ndGg6ICIsIG9iamVjdC0+Z2V0VmVjdG9yTGVuZ3Ro
KCksICI+IikpKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc05vbnRyaXZpYWxT
dHJpbmcodm0sICI8bm90IG9iamVjdD4iX3MpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzTm9udHJpdmlhbFN0cmluZyh2bSwgdG9TdHJpbmcoIjxCdXR0ZXJmbHk6ICIsIFJhd1BvaW50
ZXIob2JqZWN0LT5idXR0ZXJmbHkoKSksICI7IHB1YmxpYyBsZW5ndGg6ICIsIG9iamVjdC0+Z2V0
QXJyYXlMZW5ndGgoKSwgIjsgdmVjdG9yIGxlbmd0aDogIiwgb2JqZWN0LT5nZXRWZWN0b3JMZW5n
dGgoKSwgIj4iKSkpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9u
U2xlZXBTZWNvbmRzKEV4ZWNTdGF0ZSogZXhlYykKQEAgLTE0MjAsNyArMTQyMSw3IEBAIHB1Ymxp
YzoKIHByaXZhdGU6CiAgICAgdm9pZCBhZGRQcm9wZXJ0eShWTSYgdm0sIGNvbnN0IGNoYXIqIG5h
bWUsIEpTVmFsdWUgdmFsdWUpCiAgICAgewotICAgICAgICBJZGVudGlmaWVyIGlkZW50aWZpZXIg
PSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgbmFtZSk7CisgICAgICAgIElkZW50aWZpZXIg
aWRlbnRpZmllciA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIG5hbWUpOwogICAgICAgICBw
dXREaXJlY3Qodm0sIGlkZW50aWZpZXIsIHZhbHVlKTsKICAgICB9CiB9OwpAQCAtMTQ4MCw4ICsx
NDgxLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblJ1bgogICAgICAg
ICBhcnJheS0+cHV0RGlyZWN0SW5kZXgoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIGkgLSAx
LCBleGVjLT51bmNoZWNrZWRBcmd1bWVudChpKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIH0KLSAgICBnbG9iYWxPYmplY3QtPnB1
dERpcmVjdCgKLSAgICAgICAgdm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZ2xvYmFsT2JqZWN0
LT5nbG9iYWxFeGVjKCksICJhcmd1bWVudHMiKSwgYXJyYXkpOworICAgIGdsb2JhbE9iamVjdC0+
cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiYXJndW1lbnRzIiksIGFy
cmF5KTsKIAogICAgIE5ha2VkUHRyPEV4Y2VwdGlvbj4gZXhjZXB0aW9uOwogICAgIFN0b3BXYXRj
aCBzdG9wV2F0Y2g7CkBAIC0xNTEzLDggKzE1MTMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGZ1bmN0aW9uUnVuCiAgICAgICAgIGFycmF5LT5wdXREaXJlY3RJbmRleChnbG9iYWxP
YmplY3QtPmdsb2JhbEV4ZWMoKSwgaSAtIDEsIGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KGkpKTsK
ICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAg
ICAgfQotICAgIGdsb2JhbE9iamVjdC0+cHV0RGlyZWN0KAotICAgICAgICB2bSwgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZyhnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwgImFyZ3VtZW50cyIpLCBh
cnJheSk7CisgICAgZ2xvYmFsT2JqZWN0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21T
dHJpbmcodm0sICJhcmd1bWVudHMiKSwgYXJyYXkpOwogCiAgICAgTmFrZWRQdHI8RXhjZXB0aW9u
PiBleGNlcHRpb247CiAgICAgZXZhbHVhdGUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIGpz
Y1NvdXJjZShzb3VyY2UsIGV4ZWMtPmNhbGxlclNvdXJjZU9yaWdpbigpKSwgSlNWYWx1ZSgpLCBl
eGNlcHRpb24pOwpAQCAtMTU4NSw3ICsxNTg0LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBmdW5jdGlvblJlYQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIHNjb3Bl
LCAiQ291bGQgbm90IG9wZW4gZmlsZS4iKTsKIAogICAgIGlmICghaXNCaW5hcnkpCi0gICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcoZXhlYywgU3RyaW5nOjpmcm9tVVRGOFdp
dGhMYXRpbjFGYWxsYmFjayhjb250ZW50LT5kYXRhKCksIGNvbnRlbnQtPmxlbmd0aCgpKSkpOwor
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKHZtLCBTdHJpbmc6OmZyb21V
VEY4V2l0aExhdGluMUZhbGxiYWNrKGNvbnRlbnQtPmRhdGEoKSwgY29udGVudC0+bGVuZ3RoKCkp
KSk7CiAKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmpl
Y3QoKS0+dHlwZWRBcnJheVN0cnVjdHVyZShUeXBlVWludDgpOwogICAgIEpTT2JqZWN0KiByZXN1
bHQgPSBKU1VpbnQ4QXJyYXk6OmNyZWF0ZSh2bSwgc3RydWN0dXJlLCBXVEZNb3ZlKGNvbnRlbnQp
KTsKQEAgLTE2NzEsNyArMTY3MCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVu
Y3Rpb25DYWwKICAgICBTb3VyY2VPcmlnaW4gc291cmNlT3JpZ2luID0gc3RhdGUtPmNhbGxlclNv
dXJjZU9yaWdpbigpOwogICAgIGlmIChzb3VyY2VPcmlnaW4uaXNOdWxsKCkpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNTdHJpbmcoc3RhdGUsIHNvdXJjZU9yaWdpbi5zdHJpbmcoKSkpOworICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNTdHJpbmcoc3RhdGUtPnZtKCksIHNvdXJjZU9yaWdpbi5zdHJpbmco
KSkpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUmVhZGxpbmUo
RXhlY1N0YXRlKiBleGVjKQpAQCAtMTY4NSw3ICsxNjg0LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBmdW5jdGlvblJlYQogICAgICAgICBsaW5lLmFwcGVuZChjKTsKICAgICB9CiAg
ICAgbGluZS5hcHBlbmQoJ1wwJyk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmlu
ZyhleGVjLCBsaW5lLmRhdGEoKSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdHJp
bmcoZXhlYy0+dm0oKSwgbGluZS5kYXRhKCkpKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBmdW5jdGlvblByZWNpc2VUaW1lKEV4ZWNTdGF0ZSopCkBAIC0xODQzLDcgKzE4NDIs
NyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uRG9sCiB7CiAgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKICAgICBHbG9iYWxPYmplY3QqIHJlc3VsdCA9IEdsb2JhbE9iamVj
dDo6Y3JlYXRlKHZtLCBHbG9iYWxPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZSh2bSwganNOdWxsKCkp
LCBWZWN0b3I8U3RyaW5nPigpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdC0+
Z2V0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsICIkIikpKTsKKyAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdC0+Z2V0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCAiJCIpKSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
ZnVuY3Rpb25Eb2xsYXJEZXRhY2hBcnJheUJ1ZmZlcihFeGVjU3RhdGUqIGV4ZWMpCkBAIC0xODYw
LDcgKzE4NTksNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uRG9sCiAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgCiAg
ICAgR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBqc0R5bmFtaWNDYXN0PEdsb2JhbE9iamVj
dCo+KHZtLAotICAgICAgICBleGVjLT50aGlzVmFsdWUoKS5nZXQoZXhlYywgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZyhleGVjLCAiZ2xvYmFsIikpKTsKKyAgICAgICAgZXhlYy0+dGhpc1ZhbHVlKCku
Z2V0KGV4ZWMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJnbG9iYWwiKSkpOwogICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGlmICghZ2xv
YmFsT2JqZWN0KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9u
KGV4ZWMsIHNjb3BlLCBjcmVhdGVFcnJvcihleGVjLCAiRXhwZWN0ZWQgZ2xvYmFsIHRvIHBvaW50
IHRvIGEgZ2xvYmFsIG9iamVjdCJfcykpKTsKQEAgLTIwMDYsNyArMjAwNSw3IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Eb2wKICAgICBpZiAoIXN0cmluZykKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bGwoKSk7CiAgICAgCi0gICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1N0cmluZygmdm0sIHN0cmluZykpOworICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNTdHJpbmcodm0sIHN0cmluZykpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGZ1bmN0aW9uRG9sbGFyQWdlbnRMZWF2aW5nKEV4ZWNTdGF0ZSopCkBAIC0yMDMx
LDcgKzIwMzAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uV2FpCiAg
ICAgaWYgKCFzdHJpbmcpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkp
OwogICAgIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcoJnZtLCBzdHJpbmcp
KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKHZtLCBzdHJpbmcpKTsKIH0K
IAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkhlYXBDYXBhY2l0eShFeGVj
U3RhdGUqIGV4ZWMpCkBAIC0yMDk3LDcgKzIwOTYsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGZ1bmN0aW9uSlNDCiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBKU09iamVj
dCogb3B0aW9uc09iamVjdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMpOwogI2RlZmluZSBG
T1JfRUFDSF9PUFRJT04odHlwZV8sIG5hbWVfLCBkZWZhdWx0VmFsdWVfLCBhdmFpbGFiaWxpdHlf
LCBkZXNjcmlwdGlvbl8pIFwKLSAgICBhZGRPcHRpb24odm0sIG9wdGlvbnNPYmplY3QsIElkZW50
aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgI25hbWVfKSwgT3B0aW9uczo6bmFtZV8oKSk7CisgICAg
YWRkT3B0aW9uKHZtLCBvcHRpb25zT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAj
bmFtZV8pLCBPcHRpb25zOjpuYW1lXygpKTsKICAgICBKU0NfT1BUSU9OUyhGT1JfRUFDSF9PUFRJ
T04pCiAjdW5kZWYgRk9SX0VBQ0hfT1BUSU9OCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShv
cHRpb25zT2JqZWN0KTsKQEAgLTIyNTUsNyArMjI1NCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZnVuY3Rpb25DaGUKICAgICBzdG9wV2F0Y2guc3RvcCgpOwogCiAgICAgaWYgKCF2
YWxpZFN5bnRheCkKLSAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIGpzTm9udHJp
dmlhbFN0cmluZyhleGVjLCB0b1N0cmluZygiU3ludGF4RXJyb3I6ICIsIGVycm9yLm1lc3NhZ2Uo
KSwgIjoiLCBlcnJvci5saW5lKCkpKSk7CisgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHNj
b3BlLCBqc05vbnRyaXZpYWxTdHJpbmcodm0sIHRvU3RyaW5nKCJTeW50YXhFcnJvcjogIiwgZXJy
b3IubWVzc2FnZSgpLCAiOiIsIGVycm9yLmxpbmUoKSkpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzTnVtYmVyKHN0b3BXYXRjaC5nZXRFbGFwc2VkTVMoKSkpOwogfQogCkBAIC0yMjk4
LDcgKzIyOTcsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uR2VuCiAg
ICAgICAgIGpzb25TdHJpbmcgPSBzbmFwc2hvdEJ1aWxkZXIuanNvbigpOwogICAgIH0KICAgICBz
Y29wZS5yZWxlYXNlQXNzZXJ0Tm9FeGNlcHRpb24oKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzU3RyaW5nKCZ2bSwganNvblN0cmluZykpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNTdHJpbmcodm0sIGpzb25TdHJpbmcpKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBmdW5jdGlvblJlc2V0U3VwZXJTYW1wbGVyU3RhdGUoRXhlY1N0YXRlKikKQEAgLTIz
NzgsOSArMjM3Nyw5IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmMK
IAogICAgIGlmIChKU09iamVjdCogb2JqZWN0ID0gZXhlYy0+YXJndW1lbnQoMCkuZ2V0T2JqZWN0
KCkpIHsKICAgICAgICAgaWYgKGF1dG8qIG1lbW9yeSA9IGpzRHluYW1pY0Nhc3Q8SlNXZWJBc3Nl
bWJseU1lbW9yeSo+KHZtLCBvYmplY3QpKQotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1N0cmluZygmdm0sIG1ha2VTdHJpbmcobWVtb3J5LT5tZW1vcnkoKS5tb2RlKCkpKSk7
CisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKHZtLCBtYWtlU3Ry
aW5nKG1lbW9yeS0+bWVtb3J5KCkubW9kZSgpKSkpOwogICAgICAgICBpZiAoYXV0byogaW5zdGFu
Y2UgPSBqc0R5bmFtaWNDYXN0PEpTV2ViQXNzZW1ibHlJbnN0YW5jZSo+KHZtLCBvYmplY3QpKQot
ICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZygmdm0sIG1ha2VTdHJp
bmcoaW5zdGFuY2UtPm1lbW9yeU1vZGUoKSkpKTsKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNTdHJpbmcodm0sIG1ha2VTdHJpbmcoaW5zdGFuY2UtPm1lbW9yeU1vZGUoKSkp
KTsKICAgICB9CiAKICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSwgIldl
YkFzc2VtYmx5TWVtb3J5TW9kZSBleHBlY3RzIGVpdGhlciBhIFdlYkFzc2VtYmx5Lk1lbW9yeSBv
ciBXZWJBc3NlbWJseS5JbnN0YW5jZSJfcyk7CkBAIC0yNTExLDEzICsyNTEwLDEzIEBAIHN0YXRp
YyB2b2lkIGR1bXBFeGNlcHRpb24oR2xvYmFsT2JqZWN0KiAKICAgICBlbHNlCiAgICAgICAgIHBy
aW50ZigiRXhjZXB0aW9uOiA8b3V0IG9mIG1lbW9yeSB3aGlsZSBleHRyYWN0aW5nIGV4Y2VwdGlv
biBzdHJpbmc+XG4iKTsKIAotICAgIElkZW50aWZpZXIgbmFtZUlEID0gSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyhnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwgIm5hbWUiKTsKKyAgICBJZGVudGlm
aWVyIG5hbWVJRCA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJuYW1lIik7CiAgICAgQ0hF
Q0tfRVhDRVBUSU9OKCk7Ci0gICAgSWRlbnRpZmllciBmaWxlTmFtZUlEID0gSWRlbnRpZmllcjo6
ZnJvbVN0cmluZyhnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwgInNvdXJjZVVSTCIpOworICAg
IElkZW50aWZpZXIgZmlsZU5hbWVJRCA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJzb3Vy
Y2VVUkwiKTsKICAgICBDSEVDS19FWENFUFRJT04oKTsKLSAgICBJZGVudGlmaWVyIGxpbmVOdW1i
ZXJJRCA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCks
ICJsaW5lIik7CisgICAgSWRlbnRpZmllciBsaW5lTnVtYmVySUQgPSBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKHZtLCAibGluZSIpOwogICAgIENIRUNLX0VYQ0VQVElPTigpOwotICAgIElkZW50aWZp
ZXIgc3RhY2tJRCA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcoZ2xvYmFsT2JqZWN0LT5nbG9iYWxF
eGVjKCksICJzdGFjayIpOworICAgIElkZW50aWZpZXIgc3RhY2tJRCA9IElkZW50aWZpZXI6OmZy
b21TdHJpbmcodm0sICJzdGFjayIpOwogICAgIENIRUNLX0VYQ0VQVElPTigpOwogCiAgICAgSlNW
YWx1ZSBuYW1lVmFsdWUgPSBleGNlcHRpb24uZ2V0KGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygp
LCBuYW1lSUQpOwpAQCAtMjU1Nyw3ICsyNTU2LDcgQEAgc3RhdGljIGJvb2wgY2hlY2tVbmNhdWdo
dEV4Y2VwdGlvbihWTSYgdgogICAgIH0KIAogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9i
amVjdC0+Z2xvYmFsRXhlYygpOwotICAgIEpTVmFsdWUgZXhjZXB0aW9uQ2xhc3MgPSBnbG9iYWxP
YmplY3QtPmdldChleGVjLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsIGV4cGVjdGVkRXhj
ZXB0aW9uTmFtZSkpOworICAgIEpTVmFsdWUgZXhjZXB0aW9uQ2xhc3MgPSBnbG9iYWxPYmplY3Qt
PmdldChleGVjLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBleHBlY3RlZEV4Y2VwdGlvbk5h
bWUpKTsKICAgICBpZiAoIWV4Y2VwdGlvbkNsYXNzLmlzT2JqZWN0KCkgfHwgc2NvcGUuZXhjZXB0
aW9uKCkpIHsKICAgICAgICAgcHJpbnRmKCJFeHBlY3RlZCB1bmNhdWdodCBleGNlcHRpb24gd2l0
aCBuYW1lICclcycgYnV0IGdpdmVuIGV4Y2VwdGlvbiBjbGFzcyBpcyBub3QgZGVmaW5lZFxuIiwg
ZXhwZWN0ZWRFeGNlcHRpb25OYW1lLnV0ZjgoKS5kYXRhKCkpOwogICAgICAgICByZXR1cm4gZmFs
c2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0FQSUNhc3QuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0FQSUNhc3QuaAkocmV2aXNpb24gMjQ5MTI4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9BUElDYXN0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxOSBBcHBsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0xMTQsNyArMTE0LDcgQEAgaW5saW5lIEpTQzo6SlNPYmplY3QqIHRvSlMoSlNPYmplY3RSZWYg
bwogewogICAgIEpTQzo6SlNPYmplY3QqIG9iamVjdCA9IHVuY2hlY2tlZFRvSlMobyk7CiAgICAg
aWYgKG9iamVjdCkKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQob2JqZWN0LT5tZXRob2RUYWJsZSgq
b2JqZWN0LT52bSgpKSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG9iamVjdC0+bWV0aG9kVGFi
bGUob2JqZWN0LT52bSgpKSk7CiAgICAgcmV0dXJuIG9iamVjdDsKIH0KIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS9KU0FQSUdsb2JhbE9iamVjdC5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJR2xvYmFsT2JqZWN0Lm1tCShyZXZpc2lvbiAy
NDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJR2xvYmFsT2JqZWN0Lm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0xMTYsNyArMTE2LDcgQEAgSWRlbnRpZmllciBKU0FQSUdsb2Jh
bE9iamVjdDo6bW9kdWxlTG9hZAogCiAgICAgYXV0byByZXN1bHQgPSBjb21wdXRlVmFsaWRJbXBv
cnRTcGVjaWZpZXIoYmFzZSwgbmFtZSk7CiAgICAgaWYgKHJlc3VsdCkKLSAgICAgICAgcmV0dXJu
IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCByZXN1bHQudmFsdWUoKSk7CisgICAgICAgIHJl
dHVybiBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZXN1bHQudmFsdWUoKSk7CiAKICAgICB0
aHJvd1ZNRXJyb3IoZXhlYywgc2NvcGUsIGNyZWF0ZUVycm9yKGV4ZWMsIHJlc3VsdC5lcnJvcigp
KSk7CiAgICAgcmV0dXJuIHsgfTsKQEAgLTEzNCw3ICsxMzQsNyBAQCBKU0ludGVybmFsUHJvbWlz
ZSogSlNBUElHbG9iYWxPYmplY3Q6Om1vCiAgICAgfTsKIAogICAgIGF1dG8gaW1wb3J0ID0gWyZd
IChVUkwmIHVybCkgewotICAgICAgICBhdXRvIHJlc3VsdCA9IGltcG9ydE1vZHVsZShleGVjLCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgdXJsKSwganNVbmRlZmluZWQoKSwganNVbmRlZmlu
ZWQoKSk7CisgICAgICAgIGF1dG8gcmVzdWx0ID0gaW1wb3J0TW9kdWxlKGV4ZWMsIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcodm0sIHVybCksIGpzVW5kZWZpbmVkKCksIGpzVW5kZWZpbmVkKCkpOwog
ICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0
dXJuIHJlamVjdChzY29wZS5leGNlcHRpb24oKSk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CkBA
IC0yMDIsNyArMjAyLDcgQEAgSlNJbnRlcm5hbFByb21pc2UqIEpTQVBJR2xvYmFsT2JqZWN0Ojpt
bwogCiAgICAgICAgIE5TVVJMICpzb3VyY2VVUkwgPSBbanNTY3JpcHQgc291cmNlVVJMXTsKICAg
ICAgICAgU3RyaW5nIG9sZE1vZHVsZUtleSB7IFtzb3VyY2VVUkwgYWJzb2x1dGVTdHJpbmddIH07
Ci0gICAgICAgIGlmIChVTkxJS0VMWShJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgb2xkTW9k
dWxlS2V5KSAhPSBtb2R1bGVLZXkpKQorICAgICAgICBpZiAoVU5MSUtFTFkoSWRlbnRpZmllcjo6
ZnJvbVN0cmluZyh2bSwgb2xkTW9kdWxlS2V5KSAhPSBtb2R1bGVLZXkpKQogICAgICAgICAgICAg
cmV0dXJuIHJlamVjdFByb21pc2UobWFrZVN0cmluZygiVGhlIHNhbWUgSlNTY3JpcHQgd2FzIHBy
b3ZpZGVkIGZvciB0d28gZGlmZmVyZW50IGlkZW50aWZpZXJzLCBwcmV2aW91c2x5OiAiLCBvbGRN
b2R1bGVLZXksICIgYW5kIG5vdzogIiwgbW9kdWxlS2V5LnN0cmluZygpKSk7CiAKICAgICAgICAg
YXJncy5hcHBlbmQoc291cmNlKTsKQEAgLTIzNCw3ICsyMzQsNyBAQCBKU09iamVjdCogSlNBUElH
bG9iYWxPYmplY3Q6Om1vZHVsZUxvYWRlCiAgICAgSlNPYmplY3QqIG1ldGFQcm9wZXJ0aWVzID0g
Y29uc3RydWN0RW1wdHlPYmplY3QoZXhlYywgZ2xvYmFsT2JqZWN0LT5udWxsUHJvdG90eXBlT2Jq
ZWN0U3RydWN0dXJlKCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIp
OwogCi0gICAgbWV0YVByb3BlcnRpZXMtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZygmdm0sICJmaWxlbmFtZSIpLCBrZXkpOworICAgIG1ldGFQcm9wZXJ0aWVzLT5wdXREaXJl
Y3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJmaWxlbmFtZSIpLCBrZXkpOwogICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwogCiAgICAgcmV0dXJuIG1ldGFQ
cm9wZXJ0aWVzOwpAQCAtMjc0LDcgKzI3NCw3IEBAIEpTVmFsdWUgSlNBUElHbG9iYWxPYmplY3Q6
OmxvYWRBbmRFdmFsdWEKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxFeGVjKCk7CiAgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgSWRlbnRpZmllciBr
ZXkgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsIFN0cmluZyB7IFtbc2NyaXB0IHNvdXJj
ZVVSTF0gYWJzb2x1dGVTdHJpbmddIH0pOworICAgIElkZW50aWZpZXIga2V5ID0gSWRlbnRpZmll
cjo6ZnJvbVN0cmluZyh2bSwgU3RyaW5nIHsgW1tzY3JpcHQgc291cmNlVVJMXSBhYnNvbHV0ZVN0
cmluZ10gfSk7CiAgICAgSlNJbnRlcm5hbFByb21pc2UqIHByb21pc2UgPSBpbXBvcnRNb2R1bGUo
ZXhlYywga2V5LCBqc1VuZGVmaW5lZCgpLCBqc1VuZGVmaW5lZCgpKTsKICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgIGF1dG8gcmVzdWx0ID0gSlNQcm9taXNlRGVmZXJy
ZWQ6OnRyeUNyZWF0ZShleGVjLCB0aGlzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvSlNDYWxsYmFja0NvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDI0OTEyOCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja0NvbnN0cnVjdG9yLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYs
IDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA2LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00OCw3ICs0OCw3IEBAIEpTQ2FsbGJhY2tDb25zdHJ1
Y3Rvcjo6SlNDYWxsYmFja0NvbnN0cnUKIHZvaWQgSlNDYWxsYmFja0NvbnN0cnVjdG9yOjpmaW5p
c2hDcmVhdGlvbihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0NsYXNzUmVmIGpzQ2xh
c3MpCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsT2JqZWN0LT52bSgpKTsKLSAg
ICBBU1NFUlQoaW5oZXJpdHMoKnZtKCksIGluZm8oKSkpOworICAgIEFTU0VSVChpbmhlcml0cyh2
bSgpLCBpbmZvKCkpKTsKICAgICBpZiAobV9jbGFzcykKICAgICAgICAgSlNDbGFzc1JldGFpbihq
c0NsYXNzKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09i
amVjdEZ1bmN0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
SlNDYWxsYmFja09iamVjdEZ1bmN0aW9ucy5oCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDgsIDIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2
LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAy
MDA3IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC00
Myw3ICs0Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogdGVtcGxhdGUgPGNsYXNzIFBhcmVudD4KIGlu
bGluZSBKU0NhbGxiYWNrT2JqZWN0PFBhcmVudD4qIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6
YXNDYWxsYmFja09iamVjdChKU1ZhbHVlIHZhbHVlKQogewotICAgIEFTU0VSVChhc09iamVjdCh2
YWx1ZSktPmluaGVyaXRzKCp2YWx1ZS5nZXRPYmplY3QoKS0+dm0oKSwgaW5mbygpKSk7CisgICAg
QVNTRVJUKGFzT2JqZWN0KHZhbHVlKS0+aW5oZXJpdHModmFsdWUuZ2V0T2JqZWN0KCktPnZtKCks
IGluZm8oKSkpOwogICAgIHJldHVybiBqc0Nhc3Q8SlNDYWxsYmFja09iamVjdCo+KGFzT2JqZWN0
KHZhbHVlKSk7CiB9CiAKQEAgLTUxLDcgKzUxLDcgQEAgdGVtcGxhdGUgPGNsYXNzIFBhcmVudD4K
IGlubGluZSBKU0NhbGxiYWNrT2JqZWN0PFBhcmVudD4qIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50
Pjo6YXNDYWxsYmFja09iamVjdChFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAg
SlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwotICAgIEFTU0VS
VChhc09iamVjdCh2YWx1ZSktPmluaGVyaXRzKCp2YWx1ZS5nZXRPYmplY3QoKS0+dm0oKSwgaW5m
bygpKSk7CisgICAgQVNTRVJUKGFzT2JqZWN0KHZhbHVlKS0+aW5oZXJpdHModmFsdWUuZ2V0T2Jq
ZWN0KCktPnZtKCksIGluZm8oKSkpOwogICAgIHJldHVybiBqc0Nhc3Q8SlNDYWxsYmFja09iamVj
dCo+KGFzT2JqZWN0KHZhbHVlKSk7CiB9CiAKQEAgLTc0LDE3ICs3NCwxNyBAQCBKU0NhbGxiYWNr
T2JqZWN0PFBhcmVudD46OkpTQ2FsbGJhY2tPYmplCiB0ZW1wbGF0ZSA8Y2xhc3MgUGFyZW50Pgog
SlNDYWxsYmFja09iamVjdDxQYXJlbnQ+Ojp+SlNDYWxsYmFja09iamVjdCgpCiB7Ci0gICAgVk0q
IHZtID0gdGhpcy0+SGVhcENlbGw6OnZtKCk7Ci0gICAgdm0tPmN1cnJlbnRseURlc3RydWN0aW5n
Q2FsbGJhY2tPYmplY3QgPSB0aGlzOworICAgIFZNJiB2bSA9IHRoaXMtPkhlYXBDZWxsOjp2bSgp
OworICAgIHZtLmN1cnJlbnRseURlc3RydWN0aW5nQ2FsbGJhY2tPYmplY3QgPSB0aGlzOwogICAg
IEFTU0VSVChtX2NsYXNzSW5mbyk7Ci0gICAgdm0tPmN1cnJlbnRseURlc3RydWN0aW5nQ2FsbGJh
Y2tPYmplY3RDbGFzc0luZm8gPSBtX2NsYXNzSW5mbzsKKyAgICB2bS5jdXJyZW50bHlEZXN0cnVj
dGluZ0NhbGxiYWNrT2JqZWN0Q2xhc3NJbmZvID0gbV9jbGFzc0luZm87CiAgICAgSlNPYmplY3RS
ZWYgdGhpc1JlZiA9IHRvUmVmKHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4odGhpcykpOwogICAgIGZv
ciAoSlNDbGFzc1JlZiBqc0NsYXNzID0gY2xhc3NSZWYoKTsganNDbGFzczsganNDbGFzcyA9IGpz
Q2xhc3MtPnBhcmVudENsYXNzKSB7CiAgICAgICAgIGlmIChKU09iamVjdEZpbmFsaXplQ2FsbGJh
Y2sgZmluYWxpemUgPSBqc0NsYXNzLT5maW5hbGl6ZSkKICAgICAgICAgICAgIGZpbmFsaXplKHRo
aXNSZWYpOwogICAgIH0KLSAgICB2bS0+Y3VycmVudGx5RGVzdHJ1Y3RpbmdDYWxsYmFja09iamVj
dCA9IG51bGxwdHI7Ci0gICAgdm0tPmN1cnJlbnRseURlc3RydWN0aW5nQ2FsbGJhY2tPYmplY3RD
bGFzc0luZm8gPSBudWxscHRyOworICAgIHZtLmN1cnJlbnRseURlc3RydWN0aW5nQ2FsbGJhY2tP
YmplY3QgPSBudWxscHRyOworICAgIHZtLmN1cnJlbnRseURlc3RydWN0aW5nQ2FsbGJhY2tPYmpl
Y3RDbGFzc0luZm8gPSBudWxscHRyOwogfQogICAgIAogdGVtcGxhdGUgPGNsYXNzIFBhcmVudD4K
QEAgLTIxNSw3ICsyMTUsOCBAQCBib29sIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6Z2V0T3du
UHJvCiB0ZW1wbGF0ZSA8Y2xhc3MgUGFyZW50PgogYm9vbCBKU0NhbGxiYWNrT2JqZWN0PFBhcmVu
dD46OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRl
KiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKLSAg
ICByZXR1cm4gb2JqZWN0LT5tZXRob2RUYWJsZShleGVjLT52bSgpKS0+Z2V0T3duUHJvcGVydHlT
bG90KG9iamVjdCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBwcm9wZXJ0eU5hbWUpLCBz
bG90KTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIHJldHVybiBvYmplY3QtPm1ldGhv
ZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVydHlTbG90KG9iamVjdCwgZXhlYywgSWRlbnRpZmllcjo6
ZnJvbSh2bSwgcHJvcGVydHlOYW1lKSwgc2xvdCk7CiB9CiAKIHRlbXBsYXRlIDxjbGFzcyBQYXJl
bnQ+CkBAIC0zMjAsNyArMzIxLDcgQEAgYm9vbCBKU0NhbGxiYWNrT2JqZWN0PFBhcmVudD46OnB1
dEJ5SW5kZQogICAgIEpTT2JqZWN0UmVmIHRoaXNSZWYgPSB0b1JlZih0aGlzT2JqZWN0KTsKICAg
ICBSZWZQdHI8T3BhcXVlSlNTdHJpbmc+IHByb3BlcnR5TmFtZVJlZjsKICAgICBKU1ZhbHVlUmVm
IHZhbHVlUmVmID0gdG9SZWYoZXhlYywgdmFsdWUpOwotICAgIElkZW50aWZpZXIgcHJvcGVydHlO
YW1lID0gSWRlbnRpZmllcjo6ZnJvbShleGVjLCBwcm9wZXJ0eUluZGV4KTsKKyAgICBJZGVudGlm
aWVyIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb20odm0sIHByb3BlcnR5SW5kZXgpOwog
CiAgICAgZm9yIChKU0NsYXNzUmVmIGpzQ2xhc3MgPSB0aGlzT2JqZWN0LT5jbGFzc1JlZigpOyBq
c0NsYXNzOyBqc0NsYXNzID0ganNDbGFzcy0+cGFyZW50Q2xhc3MpIHsKICAgICAgICAgaWYgKEpT
T2JqZWN0U2V0UHJvcGVydHlDYWxsYmFjayBzZXRQcm9wZXJ0eSA9IGpzQ2xhc3MtPnNldFByb3Bl
cnR5KSB7CkBAIC00MjEsOCArNDIyLDkgQEAgYm9vbCBKU0NhbGxiYWNrT2JqZWN0PFBhcmVudD46
OmRlbGV0ZVBybwogdGVtcGxhdGUgPGNsYXNzIFBhcmVudD4KIGJvb2wgSlNDYWxsYmFja09iamVj
dDxQYXJlbnQ+OjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUq
IGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSkKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgp
OwogICAgIEpTQ2FsbGJhY2tPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNDYWxsYmFja09i
amVjdCo+KGNlbGwpOwotICAgIHJldHVybiB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZShleGVjLT52
bSgpKS0+ZGVsZXRlUHJvcGVydHkodGhpc09iamVjdCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShl
eGVjLCBwcm9wZXJ0eU5hbWUpKTsKKyAgICByZXR1cm4gdGhpc09iamVjdC0+bWV0aG9kVGFibGUo
dm0pLT5kZWxldGVQcm9wZXJ0eSh0aGlzT2JqZWN0LCBleGVjLCBJZGVudGlmaWVyOjpmcm9tKHZt
LCBwcm9wZXJ0eU5hbWUpKTsKIH0KIAogdGVtcGxhdGUgPGNsYXNzIFBhcmVudD4KQEAgLTU0Nyw2
ICs1NDksNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NhbGxiYWNrT2JqZWN0PFBhcmVudD46CiB0ZW1w
bGF0ZSA8Y2xhc3MgUGFyZW50Pgogdm9pZCBKU0NhbGxiYWNrT2JqZWN0PFBhcmVudD46OmdldE93
bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMs
IFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkK
IHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIEpTQ2FsbGJhY2tPYmplY3QqIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8SlNDYWxsYmFja09iamVjdCo+KG9iamVjdCk7CiAgICAgSlNDb250ZXh0
UmVmIGV4ZWNSZWYgPSB0b1JlZihleGVjKTsKICAgICBKU09iamVjdFJlZiB0aGlzUmVmID0gdG9S
ZWYodGhpc09iamVjdCk7CkBAIC01NjUsNyArNTY4LDcgQEAgdm9pZCBKU0NhbGxiYWNrT2JqZWN0
PFBhcmVudD46OmdldE93bk5vbgogICAgICAgICAgICAgICAgIFN0YXRpY1ZhbHVlRW50cnkqIGVu
dHJ5ID0gaXQtPnZhbHVlLmdldCgpOwogICAgICAgICAgICAgICAgIGlmIChlbnRyeS0+Z2V0UHJv
cGVydHkgJiYgKCEoZW50cnktPmF0dHJpYnV0ZXMgJiBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnRF
bnVtKSB8fCBtb2RlLmluY2x1ZGVEb250RW51bVByb3BlcnRpZXMoKSkpIHsKICAgICAgICAgICAg
ICAgICAgICAgQVNTRVJUKCFuYW1lLT5pc1N5bWJvbCgpKTsKLSAgICAgICAgICAgICAgICAgICAg
cHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCBTdHJpbmcobmFt
ZSkpKTsKKyAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6
ZnJvbVN0cmluZyh2bSwgU3RyaW5nKG5hbWUpKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgfQogICAgICAgICB9CkBAIC01NzgsNyArNTgxLDcgQEAgdm9pZCBKU0NhbGxiYWNrT2Jq
ZWN0PFBhcmVudD46OmdldE93bk5vbgogICAgICAgICAgICAgICAgIFN0YXRpY0Z1bmN0aW9uRW50
cnkqIGVudHJ5ID0gaXQtPnZhbHVlLmdldCgpOwogICAgICAgICAgICAgICAgIGlmICghKGVudHJ5
LT5hdHRyaWJ1dGVzICYga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RW51bSkgfHwgbW9kZS5pbmNs
dWRlRG9udEVudW1Qcm9wZXJ0aWVzKCkpIHsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFu
YW1lLT5pc1N5bWJvbCgpKTsKLSAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQo
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCBTdHJpbmcobmFtZSkpKTsKKyAgICAgICAgICAg
ICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgU3Ry
aW5nKG5hbWUpKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dC5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dC5tbQkocmV2aXNpb24gMjQ5
MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHQubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTE1OCw3ICsxNTgsNyBAQCAtIChKU1ZhbHVlICopZGVwZW5kZW5jeUlkZW50aWZp
ZXJzRm9yTW9kCiAgICAgfQogCiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUo
dm0pOwotICAgIEpTQzo6SlNBcnJheSogcmVzdWx0ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVj
dCgpLT5tb2R1bGVMb2FkZXIoKS0+ZGVwZW5kZW5jeUtleXNJZkV2YWx1YXRlZChleGVjLCBKU0M6
OmpzU3RyaW5nKCZ2bSwgW1tzY3JpcHQgc291cmNlVVJMXSBhYnNvbHV0ZVN0cmluZ10pKTsKKyAg
ICBKU0M6OkpTQXJyYXkqIHJlc3VsdCA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+bW9k
dWxlTG9hZGVyKCktPmRlcGVuZGVuY3lLZXlzSWZFdmFsdWF0ZWQoZXhlYywgSlNDOjpqc1N0cmlu
Zyh2bSwgW1tzY3JpcHQgc291cmNlVVJMXSBhYnNvbHV0ZVN0cmluZ10pKTsKICAgICBpZiAoc2Nv
cGUuZXhjZXB0aW9uKCkpIHsKICAgICAgICAgSlNWYWx1ZVJlZiBleGNlcHRpb25WYWx1ZSA9IHRv
UmVmKGV4ZWMsIHNjb3BlLmV4Y2VwdGlvbigpLT52YWx1ZSgpKTsKICAgICAgICAgc2NvcGUuY2xl
YXJFeGNlcHRpb24oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNPYmplY3RS
ZWYuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNPYmplY3RS
ZWYuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pT
T2JqZWN0UmVmLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ3LDEyICsxNDcsMTIgQEAgSlNPYmpl
Y3RSZWYgSlNPYmplY3RNYWtlRnVuY3Rpb24oSlNDb250ZQogICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX0NBVENIX1NDT1BFKHZtKTsKIAogICAgIHN0YXJ0aW5nTGluZU51bWJlciA9IHN0ZDo6bWF4
KDEsIHN0YXJ0aW5nTGluZU51bWJlcik7Ci0gICAgSWRlbnRpZmllciBuYW1lSUQgPSBuYW1lID8g
bmFtZS0+aWRlbnRpZmllcigmdm0pIDogSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCAiYW5v
bnltb3VzIik7CisgICAgSWRlbnRpZmllciBuYW1lSUQgPSBuYW1lID8gbmFtZS0+aWRlbnRpZmll
cigmdm0pIDogSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImFub255bW91cyIpOwogICAgIAog
ICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHBhcmFtZXRlckNvdW50OyBpKyspCi0gICAgICAgIGFyZ3MuYXBwZW5kKGpzU3RyaW5nKGV4
ZWMsIHBhcmFtZXRlck5hbWVzW2ldLT5zdHJpbmcoKSkpOwotICAgIGFyZ3MuYXBwZW5kKGpzU3Ry
aW5nKGV4ZWMsIGJvZHktPnN0cmluZygpKSk7CisgICAgICAgIGFyZ3MuYXBwZW5kKGpzU3RyaW5n
KHZtLCBwYXJhbWV0ZXJOYW1lc1tpXS0+c3RyaW5nKCkpKTsKKyAgICBhcmdzLmFwcGVuZChqc1N0
cmluZyh2bSwgYm9keS0+c3RyaW5nKCkpKTsKICAgICBpZiAoVU5MSUtFTFkoYXJncy5oYXNPdmVy
Zmxvd2VkKCkpKSB7CiAgICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwogICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYywgdGhyb3dTY29wZSk7
CkBAIC01NDYsNyArNTQ2LDcgQEAgYm9vbCBKU09iamVjdERlbGV0ZVByb3BlcnR5KEpTQ29udGV4
dFJlZgogLy8gZHVyaW5nIGRlc3RydWN0aW9uLgogc3RhdGljIGNvbnN0IENsYXNzSW5mbyogY2xh
c3NJbmZvUHJpdmF0ZShKU09iamVjdCoganNPYmplY3QpCiB7Ci0gICAgVk0mIHZtID0gKmpzT2Jq
ZWN0LT52bSgpOworICAgIFZNJiB2bSA9IGpzT2JqZWN0LT52bSgpOwogICAgIAogICAgIGlmICh2
bS5jdXJyZW50bHlEZXN0cnVjdGluZ0NhbGxiYWNrT2JqZWN0ICE9IGpzT2JqZWN0KQogICAgICAg
ICByZXR1cm4ganNPYmplY3QtPmNsYXNzSW5mbyh2bSk7CkBAIC01NTcsNyArNTU3LDcgQEAgc3Rh
dGljIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvUHJpdmF0ZQogdm9pZCogSlNPYmplY3RHZXRQ
cml2YXRlKEpTT2JqZWN0UmVmIG9iamVjdCkKIHsKICAgICBKU09iamVjdCoganNPYmplY3QgPSB1
bmNoZWNrZWRUb0pTKG9iamVjdCk7Ci0gICAgVk0mIHZtID0gKmpzT2JqZWN0LT52bSgpOworICAg
IFZNJiB2bSA9IGpzT2JqZWN0LT52bSgpOwogCiAgICAgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0lu
Zm8gPSBjbGFzc0luZm9Qcml2YXRlKGpzT2JqZWN0KTsKICAgICAKQEAgLTU4Miw3ICs1ODIsNyBA
QCB2b2lkKiBKU09iamVjdEdldFByaXZhdGUoSlNPYmplY3RSZWYgb2JqCiBib29sIEpTT2JqZWN0
U2V0UHJpdmF0ZShKU09iamVjdFJlZiBvYmplY3QsIHZvaWQqIGRhdGEpCiB7CiAgICAgSlNPYmpl
Y3QqIGpzT2JqZWN0ID0gdW5jaGVja2VkVG9KUyhvYmplY3QpOwotICAgIFZNJiB2bSA9ICpqc09i
amVjdC0+dm0oKTsKKyAgICBWTSYgdm0gPSBqc09iamVjdC0+dm0oKTsKIAogICAgIGNvbnN0IENs
YXNzSW5mbyogY2xhc3NJbmZvID0gY2xhc3NJbmZvUHJpdmF0ZShqc09iamVjdCk7CiAgICAgCkBA
IC04MTAsMTIgKzgxMCwxMiBAQCBKU1Byb3BlcnR5TmFtZUFycmF5UmVmIEpTT2JqZWN0Q29weVBy
b3BlCiAgICAgRXhlY1N0YXRlKiBleGVjID0gdG9KUyhjdHgpOwogICAgIEpTTG9ja0hvbGRlciBs
b2NrZXIoZXhlYyk7CiAKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOwogCiAgICAgSlNPYmplY3QqIGpzT2JqZWN0ID0gdG9KUyhvYmplY3QpOwotICAg
IEpTUHJvcGVydHlOYW1lQXJyYXlSZWYgcHJvcGVydHlOYW1lcyA9IG5ldyBPcGFxdWVKU1Byb3Bl
cnR5TmFtZUFycmF5KHZtKTsKKyAgICBKU1Byb3BlcnR5TmFtZUFycmF5UmVmIHByb3BlcnR5TmFt
ZXMgPSBuZXcgT3BhcXVlSlNQcm9wZXJ0eU5hbWVBcnJheSgmdm0pOwogICAgIFByb3BlcnR5TmFt
ZUFycmF5IGFycmF5KHZtLCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzLCBQcml2YXRlU3ltYm9s
TW9kZTo6RXhjbHVkZSk7Ci0gICAganNPYmplY3QtPm1ldGhvZFRhYmxlKCp2bSktPmdldFByb3Bl
cnR5TmFtZXMoanNPYmplY3QsIGV4ZWMsIGFycmF5LCBFbnVtZXJhdGlvbk1vZGUoKSk7CisgICAg
anNPYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0UHJvcGVydHlOYW1lcyhqc09iamVjdCwgZXhl
YywgYXJyYXksIEVudW1lcmF0aW9uTW9kZSgpKTsKIAogICAgIHNpemVfdCBzaXplID0gYXJyYXku
c2l6ZSgpOwogICAgIHByb3BlcnR5TmFtZXMtPmFycmF5LnJlc2VydmVJbml0aWFsQ2FwYWNpdHko
c2l6ZSk7CkBAIC04NTIsOSArODUyLDkgQEAgSlNTdHJpbmdSZWYgSlNQcm9wZXJ0eU5hbWVBcnJh
eUdldE5hbWVBdAogdm9pZCBKU1Byb3BlcnR5TmFtZUFjY3VtdWxhdG9yQWRkTmFtZShKU1Byb3Bl
cnR5TmFtZUFjY3VtdWxhdG9yUmVmIGFycmF5LCBKU1N0cmluZ1JlZiBwcm9wZXJ0eU5hbWUpCiB7
CiAgICAgUHJvcGVydHlOYW1lQXJyYXkqIHByb3BlcnR5TmFtZXMgPSB0b0pTKGFycmF5KTsKLSAg
ICBWTSogdm0gPSBwcm9wZXJ0eU5hbWVzLT52bSgpOworICAgIFZNJiB2bSA9IHByb3BlcnR5TmFt
ZXMtPnZtKCk7CiAgICAgSlNMb2NrSG9sZGVyIGxvY2tlcih2bSk7Ci0gICAgcHJvcGVydHlOYW1l
cy0+YWRkKHByb3BlcnR5TmFtZS0+aWRlbnRpZmllcih2bSkpOworICAgIHByb3BlcnR5TmFtZXMt
PmFkZChwcm9wZXJ0eU5hbWUtPmlkZW50aWZpZXIoJnZtKSk7CiB9CiAKIEpTT2JqZWN0UmVmIEpT
T2JqZWN0R2V0UHJveHlUYXJnZXQoSlNPYmplY3RSZWYgb2JqZWN0UmVmKQpAQCAtODYyLDcgKzg2
Miw3IEBAIEpTT2JqZWN0UmVmIEpTT2JqZWN0R2V0UHJveHlUYXJnZXQoSlNPYmoKICAgICBKU09i
amVjdCogb2JqZWN0ID0gdG9KUyhvYmplY3RSZWYpOwogICAgIGlmICghb2JqZWN0KQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLSAgICBWTSYgdm0gPSAqb2JqZWN0LT52bSgpOworICAgIFZNJiB2
bSA9IG9iamVjdC0+dm0oKTsKICAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKHZtKTsKICAgICBKU09i
amVjdCogcmVzdWx0ID0gbnVsbHB0cjsKICAgICBpZiAoSlNQcm94eSogcHJveHkgPSBqc0R5bmFt
aWNDYXN0PEpTUHJveHkqPih2bSwgb2JqZWN0KSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvSlNTY3JpcHRSZWYuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvSlNTY3JpcHRSZWYuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL0pTU2NyaXB0UmVmLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03NSw3ICs3NSw3IEBA
IHByaXZhdGU6CiBzdGF0aWMgYm9vbCBwYXJzZVNjcmlwdChWTSYgdm0sIGNvbnN0IFNvdXJjZUNv
ZGUmIHNvdXJjZSwgUGFyc2VyRXJyb3ImIGVycm9yKQogewogICAgIHJldHVybiAhIUpTQzo6cGFy
c2U8SlNDOjpQcm9ncmFtTm9kZT4oCi0gICAgICAgICZ2bSwgc291cmNlLCBJZGVudGlmaWVyKCks
IEpTUGFyc2VyQnVpbHRpbk1vZGU6Ok5vdEJ1aWx0aW4sCisgICAgICAgIHZtLCBzb3VyY2UsIElk
ZW50aWZpZXIoKSwgSlNQYXJzZXJCdWlsdGluTW9kZTo6Tm90QnVpbHRpbiwKICAgICAgICAgSlNQ
YXJzZXJTdHJpY3RNb2RlOjpOb3RTdHJpY3QsIEpTUGFyc2VyU2NyaXB0TW9kZTo6Q2xhc3NpYywg
U291cmNlUGFyc2VNb2RlOjpQcm9ncmFtTW9kZSwgU3VwZXJCaW5kaW5nOjpOb3ROZWVkZWQsCiAg
ICAgICAgIGVycm9yKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWYWx1
ZVJlZi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZhbHVl
UmVmLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9K
U1ZhbHVlUmVmLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNDYsOSArMzQ2LDEwIEBA
IEpTVmFsdWVSZWYgSlNWYWx1ZU1ha2VTdHJpbmcoSlNDb250ZXh0UmUKICAgICAgICAgcmV0dXJu
IDA7CiAgICAgfQogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHRvSlMoY3R4KTsKLSAgICBKU0xvY2tI
b2xkZXIgbG9ja2VyKGV4ZWMpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgSlNMb2Nr
SG9sZGVyIGxvY2tlcih2bSk7CiAKLSAgICByZXR1cm4gdG9SZWYoZXhlYywganNTdHJpbmcoZXhl
Yywgc3RyaW5nID8gc3RyaW5nLT5zdHJpbmcoKSA6IFN0cmluZygpKSk7CisgICAgcmV0dXJuIHRv
UmVmKGV4ZWMsIGpzU3RyaW5nKHZtLCBzdHJpbmcgPyBzdHJpbmctPnN0cmluZygpIDogU3RyaW5n
KCkpKTsKIH0KIAogSlNWYWx1ZVJlZiBKU1ZhbHVlTWFrZUZyb21KU09OU3RyaW5nKEpTQ29udGV4
dFJlZiBjdHgsIEpTU3RyaW5nUmVmIHN0cmluZykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvT3BhcXVlSlNTdHJpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvT3BhcXVlSlNTdHJpbmcuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL09wYXF1ZUpTU3RyaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03OCw5
ICs3OCw5IEBAIElkZW50aWZpZXIgT3BhcXVlSlNTdHJpbmc6OmlkZW50aWZpZXIoVk0KICAgICAg
ICAgcmV0dXJuIElkZW50aWZpZXIoSWRlbnRpZmllcjo6RW1wdHlJZGVudGlmaWVyKTsKIAogICAg
IGlmIChtX3N0cmluZy5pczhCaXQoKSkKLSAgICAgICAgcmV0dXJuIElkZW50aWZpZXI6OmZyb21T
dHJpbmcodm0sIG1fc3RyaW5nLmNoYXJhY3RlcnM4KCksIG1fc3RyaW5nLmxlbmd0aCgpKTsKKyAg
ICAgICAgcmV0dXJuIElkZW50aWZpZXI6OmZyb21TdHJpbmcoKnZtLCBtX3N0cmluZy5jaGFyYWN0
ZXJzOCgpLCBtX3N0cmluZy5sZW5ndGgoKSk7CiAKLSAgICByZXR1cm4gSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyh2bSwgbV9zdHJpbmcuY2hhcmFjdGVyczE2KCksIG1fc3RyaW5nLmxlbmd0aCgpKTsK
KyAgICByZXR1cm4gSWRlbnRpZmllcjo6ZnJvbVN0cmluZygqdm0sIG1fc3RyaW5nLmNoYXJhY3Rl
cnMxNigpLCBtX3N0cmluZy5sZW5ndGgoKSk7CiB9CiAKIGNvbnN0IFVDaGFyKiBPcGFxdWVKU1N0
cmluZzo6Y2hhcmFjdGVycygpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIv
SlNDQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9n
bGliL0pTQ0NvbnRleHQuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL2dsaWIvSlNDQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk1MCwxMSAr
OTUwLDExIEBAIEpTQ0NoZWNrU3ludGF4UmVzdWx0IGpzY19jb250ZXh0X2NoZWNrX3MKICAgICBK
U0M6OlBhcnNlckVycm9yIGVycm9yOwogICAgIHN3aXRjaCAobW9kZSkgewogICAgIGNhc2UgSlND
X0NIRUNLX1NZTlRBWF9NT0RFX1NDUklQVDoKLSAgICAgICAgc3VjY2VzcyA9ICEhSlNDOjpwYXJz
ZTxKU0M6OlByb2dyYW1Ob2RlPigmdm0sIHNvdXJjZSwgSlNDOjpJZGVudGlmaWVyKCksIEpTQzo6
SlNQYXJzZXJCdWlsdGluTW9kZTo6Tm90QnVpbHRpbiwKKyAgICAgICAgc3VjY2VzcyA9ICEhSlND
OjpwYXJzZTxKU0M6OlByb2dyYW1Ob2RlPih2bSwgc291cmNlLCBKU0M6OklkZW50aWZpZXIoKSwg
SlNDOjpKU1BhcnNlckJ1aWx0aW5Nb2RlOjpOb3RCdWlsdGluLAogICAgICAgICAgICAgSlNDOjpK
U1BhcnNlclN0cmljdE1vZGU6Ok5vdFN0cmljdCwgSlNDOjpKU1BhcnNlclNjcmlwdE1vZGU6OkNs
YXNzaWMsIEpTQzo6U291cmNlUGFyc2VNb2RlOjpQcm9ncmFtTW9kZSwgSlNDOjpTdXBlckJpbmRp
bmc6Ok5vdE5lZWRlZCwgZXJyb3IpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEpTQ19DSEVD
S19TWU5UQVhfTU9ERV9NT0RVTEU6Ci0gICAgICAgIHN1Y2Nlc3MgPSAhIUpTQzo6cGFyc2U8SlND
OjpNb2R1bGVQcm9ncmFtTm9kZT4oJnZtLCBzb3VyY2UsIEpTQzo6SWRlbnRpZmllcigpLCBKU0M6
OkpTUGFyc2VyQnVpbHRpbk1vZGU6Ok5vdEJ1aWx0aW4sCisgICAgICAgIHN1Y2Nlc3MgPSAhIUpT
Qzo6cGFyc2U8SlNDOjpNb2R1bGVQcm9ncmFtTm9kZT4odm0sIHNvdXJjZSwgSlNDOjpJZGVudGlm
aWVyKCksIEpTQzo6SlNQYXJzZXJCdWlsdGluTW9kZTo6Tm90QnVpbHRpbiwKICAgICAgICAgICAg
IEpTQzo6SlNQYXJzZXJTdHJpY3RNb2RlOjpTdHJpY3QsIEpTQzo6SlNQYXJzZXJTY3JpcHRNb2Rl
OjpNb2R1bGUsIEpTQzo6U291cmNlUGFyc2VNb2RlOjpNb2R1bGVBbmFseXplTW9kZSwgSlNDOjpT
dXBlckJpbmRpbmc6Ok5vdE5lZWRlZCwgZXJyb3IpOwogICAgICAgICBicmVhazsKICAgICB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy93a2J1aWx0aW5zL2J1aWx0aW5zX2dl
bmVyYXRlX3dyYXBwZXJfaGVhZGVyLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9TY3JpcHRzL3drYnVpbHRpbnMvYnVpbHRpbnNfZ2VuZXJhdGVfd3JhcHBlcl9oZWFkZXIu
cHkJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL3dr
YnVpbHRpbnMvYnVpbHRpbnNfZ2VuZXJhdGVfd3JhcHBlcl9oZWFkZXIucHkJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNiArMSw2IEBACiAjIS91c3IvYmluL2VudiBweXRob24KICMKLSMgQ29weXJpZ2h0
IChjKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChj
KSAyMDE2LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogIwogIyBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC05Miw3ICs5Miw3IEBAIGNsYXNzIEJ1aWx0aW5zV3JhcHBlckhl
YWRlckdlbmVyYXRvcihCdWkKICAgICAgICAgbGluZXMgPSBbIiAgICBleHBsaWNpdCBKU0J1aWx0
aW5GdW5jdGlvbnMoSlNDOjpWTSYgdm0pIiwKICAgICAgICAgICAgICAgICAgIiAgICAgICAgOiBt
X3ZtKHZtKSJdCiAgICAgICAgIGZvciBvYmplY3QgaW4gc2VsZi5tb2RlbCgpLm9iamVjdHM6Ci0g
ICAgICAgICAgICBtZW1iZXJfaW5pdCA9ICIgICAgICAgICwgJXMoJm1fdm0pIiAlIHNlbGYubWVt
YmVyX25hbWUob2JqZWN0KQorICAgICAgICAgICAgbWVtYmVyX2luaXQgPSAiICAgICAgICAsICVz
KG1fdm0pIiAlIHNlbGYubWVtYmVyX25hbWUob2JqZWN0KQogICAgICAgICAgICAgbGluZXMuYXBw
ZW5kKEJ1aWx0aW5zR2VuZXJhdG9yLndyYXBfd2l0aF9ndWFyZChvYmplY3QuYW5ub3RhdGlvbnMu
Z2V0KCdjb25kaXRpb25hbCcpLCBtZW1iZXJfaW5pdCkpCiAgICAgICAgIGxpbmVzLmFwcGVuZCgi
ICAgIHsiKQogICAgICAgICBmb3Igb2JqZWN0IGluIHNlbGYubW9kZWwoKS5vYmplY3RzOgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvd2tidWlsdGlucy9idWlsdGluc190ZW1w
bGF0ZXMucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvd2ti
dWlsdGlucy9idWlsdGluc190ZW1wbGF0ZXMucHkJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL3drYnVpbHRpbnMvYnVpbHRpbnNfdGVtcGxhdGVzLnB5
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiAj
Ci0jIENvcHlyaWdodCAoYykgMjAxNC0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyMgQ29weXJpZ2h0IChjKSAyMDE0LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogIyBDb3B5cmlnaHQgKEMpIDIwMTUgQ2Fub24gSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogIwogIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKQEAgLTEyOSw4ICsxMjksOCBAQCAke21hY3JvUHJlZml4fV9GT1JF
QUNIXyR7b2JqZWN0TWFjcm99X0JVCiAgICAgU2VwYXJhdGVIZWFkZXJXcmFwcGVyQm9pbGVycGxh
dGUgPSAoCiAgICAgIiIiY2xhc3MgJHtvYmplY3ROYW1lfUJ1aWx0aW5zV3JhcHBlciA6IHByaXZh
dGUgSlNDOjpXZWFrSGFuZGxlT3duZXIgewogcHVibGljOgotICAgIGV4cGxpY2l0ICR7b2JqZWN0
TmFtZX1CdWlsdGluc1dyYXBwZXIoSlNDOjpWTSogdm0pCi0gICAgICAgIDogbV92bSgqdm0pCisg
ICAgZXhwbGljaXQgJHtvYmplY3ROYW1lfUJ1aWx0aW5zV3JhcHBlcihKU0M6OlZNJiB2bSkKKyAg
ICAgICAgOiBtX3ZtKHZtKQogICAgICAgICAke21hY3JvUHJlZml4fV9GT1JFQUNIXyR7b2JqZWN0
TWFjcm99X0JVSUxUSU5fRlVOQ1RJT05fTkFNRShJTklUSUFMSVpFX0JVSUxUSU5fTkFNRVMpCiAj
ZGVmaW5lIElOSVRJQUxJWkVfQlVJTFRJTl9TT1VSQ0VfTUVNQkVSUyhuYW1lLCBmdW5jdGlvbk5h
bWUsIG92ZXJyaWRkZW5OYW1lLCBsZW5ndGgpICwgbV8jI25hbWUjI1NvdXJjZShKU0M6Om1ha2VT
b3VyY2UoU3RyaW5nSW1wbDo6Y3JlYXRlRnJvbUxpdGVyYWwoc18jI25hbWUsIGxlbmd0aCksIHsg
fSkpCiAgICAgICAgICR7bWFjcm9QcmVmaXh9X0ZPUkVBQ0hfJHtvYmplY3RNYWNyb31fQlVJTFRJ
Tl9DT0RFKElOSVRJQUxJWkVfQlVJTFRJTl9TT1VSQ0VfTUVNQkVSUykKQEAgLTE2Nyw3ICsxNjcs
NyBAQCBpbmxpbmUgSlNDOjpVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogCiAgICAgaWYgKCFt
XyMjbmFtZSMjRXhlY3V0YWJsZSkge1xcCiAgICAgICAgIEpTQzo6SWRlbnRpZmllciBleGVjdXRh
YmxlTmFtZSA9IGZ1bmN0aW9uTmFtZSMjUHVibGljTmFtZSgpO1xcCiAgICAgICAgIGlmIChvdmVy
cmlkZGVuTmFtZSlcXAotICAgICAgICAgICAgZXhlY3V0YWJsZU5hbWUgPSBKU0M6OklkZW50aWZp
ZXI6OmZyb21TdHJpbmcoJm1fdm0sIG92ZXJyaWRkZW5OYW1lKTtcXAorICAgICAgICAgICAgZXhl
Y3V0YWJsZU5hbWUgPSBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcobV92bSwgb3ZlcnJpZGRl
bk5hbWUpO1xcCiAgICAgICAgIG1fIyNuYW1lIyNFeGVjdXRhYmxlID0gSlNDOjpXZWFrPEpTQzo6
VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU+KEpTQzo6Y3JlYXRlQnVpbHRpbkV4ZWN1dGFibGUo
bV92bSwgbV8jI25hbWUjI1NvdXJjZSwgZXhlY3V0YWJsZU5hbWUsIHNfIyNuYW1lIyNDb25zdHJ1
Y3RBYmlsaXR5KSwgdGhpcywgJm1fIyNuYW1lIyNFeGVjdXRhYmxlKTtcXAogICAgIH1cXAogICAg
IHJldHVybiBtXyMjbmFtZSMjRXhlY3V0YWJsZS5nZXQoKTtcXApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2JpbmRpbmdzL1NjcmlwdEZ1bmN0aW9uQ2FsbC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2JpbmRpbmdzL1NjcmlwdEZ1bmN0aW9uQ2FsbC5jcHAJKHJl
dmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9TY3JpcHRG
dW5jdGlvbkNhbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKQEAgLTQyLDE0ICs0MiwxNiBAQCBuYW1lc3BhY2UgRGVwcmVjYXRlZCB7CiAK
IHZvaWQgU2NyaXB0Q2FsbEFyZ3VtZW50SGFuZGxlcjo6YXBwZW5kQXJndW1lbnQoY29uc3QgU3Ry
aW5nJiBhcmd1bWVudCkKIHsKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhtX2V4ZWMpOwotICAgIG1f
YXJndW1lbnRzLmFwcGVuZChqc1N0cmluZyhtX2V4ZWMsIGFyZ3VtZW50KSk7CisgICAgVk0mIHZt
ID0gbV9leGVjLT52bSgpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICBtX2FyZ3Vt
ZW50cy5hcHBlbmQoanNTdHJpbmcodm0sIGFyZ3VtZW50KSk7CiB9CiAKIHZvaWQgU2NyaXB0Q2Fs
bEFyZ3VtZW50SGFuZGxlcjo6YXBwZW5kQXJndW1lbnQoY29uc3QgY2hhciogYXJndW1lbnQpCiB7
Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2sobV9leGVjKTsKLSAgICBtX2FyZ3VtZW50cy5hcHBlbmQo
anNTdHJpbmcobV9leGVjLCBTdHJpbmcoYXJndW1lbnQpKSk7CisgICAgVk0mIHZtID0gbV9leGVj
LT52bSgpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICBtX2FyZ3VtZW50cy5hcHBl
bmQoanNTdHJpbmcodm0sIFN0cmluZyhhcmd1bWVudCkpKTsKIH0KIAogdm9pZCBTY3JpcHRDYWxs
QXJndW1lbnRIYW5kbGVyOjphcHBlbmRBcmd1bWVudChKU1ZhbHVlIGFyZ3VtZW50KQpAQCAtMTA4
LDcgKzExMCw3IEBAIEpTVmFsdWUgU2NyaXB0RnVuY3Rpb25DYWxsOjpjYWxsKGJvb2wmIGgKICAg
ICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogCi0gICAgSlNWYWx1ZSBmdW5jdGlvbiA9IHRoaXNPYmplY3QtPmdldChtX2V4
ZWMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcobV9leGVjLCBtX25hbWUpKTsKKyAgICBKU1ZhbHVl
IGZ1bmN0aW9uID0gdGhpc09iamVjdC0+Z2V0KG1fZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zyh2bSwgbV9uYW1lKSk7CiAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgewog
ICAgICAgICBoYWRFeGNlcHRpb24gPSB0cnVlOwogICAgICAgICByZXR1cm4geyB9OwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2JpbmRpbmdzL1NjcmlwdFZhbHVlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvU2NyaXB0VmFsdWUuY3BwCShyZXZp
c2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvU2NyaXB0VmFs
dWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwNiwgMjAwNywgMjAwOCwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKiBDb3B5cmlnaHQgKGMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTc5LDcgKzc5LDcgQEAgc3RhdGljIFJlZlB0cjxKU09O
OjpWYWx1ZT4ganNUb0luc3BlY3RvcgogICAgICAgICBWTSYgdm0gPSBzY3JpcHRTdGF0ZS52bSgp
OwogICAgICAgICBhdXRvIGluc3BlY3Rvck9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7
CiAgICAgICAgIGF1dG8mIG9iamVjdCA9ICp2YWx1ZS5nZXRPYmplY3QoKTsKLSAgICAgICAgUHJv
cGVydHlOYW1lQXJyYXkgcHJvcGVydHlOYW1lcygmdm0sIFByb3BlcnR5TmFtZU1vZGU6OlN0cmlu
Z3MsIFByaXZhdGVTeW1ib2xNb2RlOjpFeGNsdWRlKTsKKyAgICAgICAgUHJvcGVydHlOYW1lQXJy
YXkgcHJvcGVydHlOYW1lcyh2bSwgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5ncywgUHJpdmF0ZVN5
bWJvbE1vZGU6OkV4Y2x1ZGUpOwogICAgICAgICBvYmplY3QubWV0aG9kVGFibGUodm0pLT5nZXRP
d25Qcm9wZXJ0eU5hbWVzKCZvYmplY3QsICZzY3JpcHRTdGF0ZSwgcHJvcGVydHlOYW1lcywgRW51
bWVyYXRpb25Nb2RlKCkpOwogICAgICAgICBmb3IgKGF1dG8mIG5hbWUgOiBwcm9wZXJ0eU5hbWVz
KSB7CiAgICAgICAgICAgICBhdXRvIGluc3BlY3RvclZhbHVlID0ganNUb0luc3BlY3RvclZhbHVl
KHNjcmlwdFN0YXRlLCBvYmplY3QuZ2V0KCZzY3JpcHRTdGF0ZSwgbmFtZSksIG1heERlcHRoKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9CdWlsdGluRXhlY3V0YWJsZXMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9CdWlsdGlu
RXhlY3V0YWJsZXMuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnVpbHRpbnMvQnVpbHRpbkV4ZWN1dGFibGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIx
Myw3ICsyMTMsNyBAQCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogQnVpbHRpbkV4ZWN1CiAg
ICAgICAgIFBhcnNlckVycm9yIGVycm9yOwogICAgICAgICBKU1BhcnNlckJ1aWx0aW5Nb2RlIGJ1
aWx0aW5Nb2RlID0gaXNCdWlsdGluRGVmYXVsdENsYXNzQ29uc3RydWN0b3IgPyBKU1BhcnNlckJ1
aWx0aW5Nb2RlOjpOb3RCdWlsdGluIDogSlNQYXJzZXJCdWlsdGluTW9kZTo6QnVpbHRpbjsKICAg
ICAgICAgc3RkOjp1bmlxdWVfcHRyPFByb2dyYW1Ob2RlPiBwcm9ncmFtID0gcGFyc2U8UHJvZ3Jh
bU5vZGU+KAotICAgICAgICAgICAgJnZtLCBzb3VyY2UsIElkZW50aWZpZXIoKSwgYnVpbHRpbk1v
ZGUsCisgICAgICAgICAgICB2bSwgc291cmNlLCBJZGVudGlmaWVyKCksIGJ1aWx0aW5Nb2RlLAog
ICAgICAgICAgICAgSlNQYXJzZXJTdHJpY3RNb2RlOjpOb3RTdHJpY3QsIEpTUGFyc2VyU2NyaXB0
TW9kZTo6Q2xhc3NpYywgU291cmNlUGFyc2VNb2RlOjpQcm9ncmFtTW9kZSwgU3VwZXJCaW5kaW5n
OjpOb3ROZWVkZWQsIGVycm9yLAogICAgICAgICAgICAgJnBvc2l0aW9uQmVmb3JlTGFzdE5ld2xp
bmVGcm9tUGFyc2VyLCBjb25zdHJ1Y3RvcktpbmQpOwogCkBAIC0yNTQsNyArMjU0LDcgQEAgVW5s
aW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIEJ1aWx0aW5FeGVjdQogICAgICAgICB9CiAgICAgfQog
Ci0gICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhlY3V0YWJsZSA9IFVu
bGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpjcmVhdGUoJnZtLCBzb3VyY2UsICZtZXRhZGF0YSwg
a2luZCwgY29uc3RydWN0QWJpbGl0eSwgSlNQYXJzZXJTY3JpcHRNb2RlOjpDbGFzc2ljLCBXVEY6
Om51bGxvcHQsIERlcml2ZWRDb250ZXh0VHlwZTo6Tm9uZSwgaXNCdWlsdGluRGVmYXVsdENsYXNz
Q29uc3RydWN0b3IpOworICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4
ZWN1dGFibGUgPSBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y3JlYXRlKHZtLCBzb3VyY2Us
ICZtZXRhZGF0YSwga2luZCwgY29uc3RydWN0QWJpbGl0eSwgSlNQYXJzZXJTY3JpcHRNb2RlOjpD
bGFzc2ljLCBXVEY6Om51bGxvcHQsIERlcml2ZWRDb250ZXh0VHlwZTo6Tm9uZSwgaXNCdWlsdGlu
RGVmYXVsdENsYXNzQ29uc3RydWN0b3IpOwogICAgIHJldHVybiBmdW5jdGlvbkV4ZWN1dGFibGU7
CiB9CiAKQEAgLTI3OCw3ICsyNzgsNyBAQCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogQnVp
bHRpbkV4ZWN1CiAgICAgaWYgKCFtX3VubGlua2VkRXhlY3V0YWJsZXNbaW5kZXhdKSB7XAogICAg
ICAgICBJZGVudGlmaWVyIGV4ZWN1dGFibGVOYW1lID0gbV92bS5wcm9wZXJ0eU5hbWVzLT5idWls
dGluTmFtZXMoKS5mdW5jdGlvbk5hbWUjI1B1YmxpY05hbWUoKTtcCiAgICAgICAgIGlmIChvdmVy
cmlkZU5hbWUpXAotICAgICAgICAgICAgZXhlY3V0YWJsZU5hbWUgPSBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKCZtX3ZtLCBvdmVycmlkZU5hbWUpO1wKKyAgICAgICAgICAgIGV4ZWN1dGFibGVOYW1l
ID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhtX3ZtLCBvdmVycmlkZU5hbWUpO1wKICAgICAgICAg
bV91bmxpbmtlZEV4ZWN1dGFibGVzW2luZGV4XSA9IGNyZWF0ZUJ1aWx0aW5FeGVjdXRhYmxlKG5h
bWUjI1NvdXJjZSgpLCBleGVjdXRhYmxlTmFtZSwgc18jI25hbWUjI0NvbnN0cnVjdEFiaWxpdHkp
O1wKICAgICB9XAogICAgIHJldHVybiBtX3VubGlua2VkRXhlY3V0YWJsZXNbaW5kZXhdO1wKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9CdWlsdGluTmFtZXMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9CdWlsdGluTmFtZXMuY3Bw
CShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvQnVp
bHRpbk5hbWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5
cmlnaHQgKEMpIDIwMTcgWXVzdWtlIFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPi4KKyAq
IENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTcyLDcgKzczLDcgQEAgU3ltYm9sSW1wbDo6
U3RhdGljU3ltYm9sSW1wbCBwb2x5UHJvdG9QcgogCiAvLyBXZSB0cmVhdCB0aGUgZG9sbGFyVk0g
bmFtZSBhcyBhIHNwZWNpYWwgY2FzZSBiZWxvdyBmb3IgJHZtIChiZWNhdXNlIENvbW1vbklkZW50
aWZpZXJzIGRvZXMgbm90CiAvLyB5ZXQgc3VwcG9ydCB0aGUgJCBjaGFyYWN0ZXIpLgotQnVpbHRp
bk5hbWVzOjpCdWlsdGluTmFtZXMoVk0qIHZtLCBDb21tb25JZGVudGlmaWVycyogY29tbW9uSWRl
bnRpZmllcnMpCitCdWlsdGluTmFtZXM6OkJ1aWx0aW5OYW1lcyhWTSYgdm0sIENvbW1vbklkZW50
aWZpZXJzKiBjb21tb25JZGVudGlmaWVycykKICAgICA6IG1fZW1wdHlJZGVudGlmaWVyKGNvbW1v
bklkZW50aWZpZXJzLT5lbXB0eUlkZW50aWZpZXIpCiAgICAgSlNDX0ZPUkVBQ0hfQlVJTFRJTl9G
VU5DVElPTl9OQU1FKElOSVRJQUxJWkVfQlVJTFRJTl9OQU1FU19JTl9KU0MpCiAgICAgSlNDX0NP
TU1PTl9QUklWQVRFX0lERU5USUZJRVJTX0VBQ0hfUFJPUEVSVFlfTkFNRShJTklUSUFMSVpFX0JV
SUxUSU5fTkFNRVNfSU5fSlNDKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5z
L0J1aWx0aW5OYW1lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWls
dGlucy9CdWlsdGluTmFtZXMuaAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J1aWx0aW5zL0J1aWx0aW5OYW1lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE5OCw3
ICsxOTgsNyBAQCBjbGFzcyBCdWlsdGluTmFtZXMgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KEJ1aWx0aW5OYW1lcyk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogICAgIAogcHVibGljOgot
ICAgIEJ1aWx0aW5OYW1lcyhWTSosIENvbW1vbklkZW50aWZpZXJzKik7CisgICAgQnVpbHRpbk5h
bWVzKFZNJiwgQ29tbW9uSWRlbnRpZmllcnMqKTsKIAogICAgIFN5bWJvbEltcGwqIGxvb2tVcFBy
aXZhdGVOYW1lKGNvbnN0IElkZW50aWZpZXImKSBjb25zdDsKICAgICBJZGVudGlmaWVyIGdldFB1
YmxpY05hbWUoVk0mLCBTeW1ib2xJbXBsKikgY29uc3Q7CkBAIC0yMzcsMTAgKzIzNywxMCBAQCBp
bmxpbmUgU3ltYm9sSW1wbCogQnVpbHRpbk5hbWVzOjpsb29rVXBQCiBpbmxpbmUgSWRlbnRpZmll
ciBCdWlsdGluTmFtZXM6OmdldFB1YmxpY05hbWUoVk0mIHZtLCBTeW1ib2xJbXBsKiBzeW1ib2wp
IGNvbnN0CiB7CiAgICAgaWYgKHN5bWJvbC0+aXNQcml2YXRlKCkpCi0gICAgICAgIHJldHVybiBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgc3ltYm9sKTsKKyAgICAgICAgcmV0dXJuIElkZW50
aWZpZXI6OmZyb21TdHJpbmcodm0sIHN5bWJvbCk7CiAgICAgLy8gV2UgaGF2ZSBzcGVjaWFsIGhh
bmRsaW5nIGZvciB3ZWxsLWtub3duIHN5bWJvbHMuCiAgICAgQVNTRVJUKHN5bWJvbC0+c3RhcnRz
V2l0aCgiU3ltYm9sLiIpKTsKLSAgICByZXR1cm4gSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0s
IG1ha2VTdHJpbmcoU3RyaW5nKHN5bWJvbC0+c3Vic3RyaW5nKHN0cmxlbigiU3ltYm9sLiIpKSks
ICJTeW1ib2wiKSk7CisgICAgcmV0dXJuIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIG1ha2VT
dHJpbmcoU3RyaW5nKHN5bWJvbC0+c3Vic3RyaW5nKHN0cmxlbigiU3ltYm9sLiIpKSksICJTeW1i
b2wiKSk7CiB9CiAKIGlubGluZSB2b2lkIEJ1aWx0aW5OYW1lczo6Y2hlY2tQdWJsaWNUb1ByaXZh
dGVNYXBDb25zaXN0ZW5jeShVbmlxdWVkU3RyaW5nSW1wbCogcHVibGljTmFtZSwgVW5pcXVlZFN0
cmluZ0ltcGwqIHByaXZhdGVOYW1lKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlRHVtcGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxNyBZdXN1a2UgU3V6
dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAx
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTQ0LDcgKzQ0LDcgQEAKIG5hbWVzcGFjZSBKU0MgewogCiB0ZW1wbGF0ZTxj
bGFzcyBCbG9jaz4KLVZNKiBCeXRlY29kZUR1bXBlcjxCbG9jaz46OnZtKCkgY29uc3QKK1ZNJiBC
eXRlY29kZUR1bXBlcjxCbG9jaz46OnZtKCkgY29uc3QKIHsKICAgICByZXR1cm4gYmxvY2soKS0+
dm0oKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1
bXBlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRl
Y29kZUR1bXBlci5oCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAK
IC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTcgWXVzdWtlIFN1enVraSA8dXRhdGFuZS50ZWFAZ21h
aWwuY29tPgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzAsNyArNzAsNyBA
QCBwcml2YXRlOgogCiAgICAgQmxvY2sqIGJsb2NrKCkgY29uc3QgeyByZXR1cm4gbV9ibG9jazsg
fQogCi0gICAgQUxXQVlTX0lOTElORSBWTSogdm0oKSBjb25zdDsKKyAgICBBTFdBWVNfSU5MSU5F
IFZNJiB2bSgpIGNvbnN0OwogCiAgICAgQ1N0cmluZyByZWdpc3Rlck5hbWUoaW50IHIpIGNvbnN0
OwogICAgIENTdHJpbmcgY29uc3RhbnROYW1lKGludCBpbmRleCkgY29uc3Q7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVHZW5lcmF0b3JpZmljYXRpb24uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUdl
bmVyYXRvcmlmaWNhdGlvbi5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUdlbmVyYXRvcmlmaWNhdGlvbi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTY4LDcgKzY4LDcgQEAgcHVibGljOgogICAgICAgICAsIG1fY29kZUJsb2NrKGNv
ZGVCbG9jaykKICAgICAgICAgLCBtX2luc3RydWN0aW9ucyhpbnN0cnVjdGlvbnMpCiAgICAgICAg
ICwgbV9ncmFwaChtX2NvZGVCbG9jaywgbV9pbnN0cnVjdGlvbnMpCi0gICAgICAgICwgbV9nZW5l
cmF0b3JGcmFtZVN5bWJvbFRhYmxlKCpjb2RlQmxvY2stPnZtKCksIGdlbmVyYXRvckZyYW1lU3lt
Ym9sVGFibGUpCisgICAgICAgICwgbV9nZW5lcmF0b3JGcmFtZVN5bWJvbFRhYmxlKGNvZGVCbG9j
ay0+dm0oKSwgZ2VuZXJhdG9yRnJhbWVTeW1ib2xUYWJsZSkKICAgICAgICAgLCBtX2dlbmVyYXRv
ckZyYW1lU3ltYm9sVGFibGVJbmRleChnZW5lcmF0b3JGcmFtZVN5bWJvbFRhYmxlSW5kZXgpCiAg
ICAgewogICAgICAgICBmb3IgKEJ5dGVjb2RlQmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBoKSB7
CkBAIC0xNTgsNyArMTU4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgaWYgKE9wdGlvbmFsPFN0b3Jh
Z2U+IHN0b3JhZ2UgPSBtX3N0b3JhZ2VzW2luZGV4XSkKICAgICAgICAgICAgIHJldHVybiAqc3Rv
cmFnZTsKIAotICAgICAgICBJZGVudGlmaWVyIGlkZW50aWZpZXIgPSBJZGVudGlmaWVyOjpmcm9t
KCZ2bSwgaW5kZXgpOworICAgICAgICBJZGVudGlmaWVyIGlkZW50aWZpZXIgPSBJZGVudGlmaWVy
Ojpmcm9tKHZtLCBpbmRleCk7CiAgICAgICAgIHVuc2lnbmVkIGlkZW50aWZpZXJJbmRleCA9IG1f
Y29kZUJsb2NrLT5udW1iZXJPZklkZW50aWZpZXJzKCk7CiAgICAgICAgIG1fY29kZUJsb2NrLT5h
ZGRJZGVudGlmaWVyKGlkZW50aWZpZXIpOwogICAgICAgICBTY29wZU9mZnNldCBzY29wZU9mZnNl
dCA9IG1fZ2VuZXJhdG9yRnJhbWVTeW1ib2xUYWJsZS0+dGFrZU5leHRTY29wZU9mZnNldChOb0xv
Y2tpbmdOZWNlc3NhcnkpOwpAQCAtMjExLDcgKzIxMSw3IEBAIHZvaWQgQnl0ZWNvZGVHZW5lcmF0
b3JpZmljYXRpb246OnJ1bigpCiB7CiAgICAgLy8gV2UgY2FsY3VsYXRlIHRoZSBsaXZlbmVzcyBh
dCBlYWNoIG1lcmdlIHBvaW50LiBUaGlzIGdpdmVzIHVzIHRoZSBpbmZvcm1hdGlvbiB3aGljaCBy
ZWdpc3RlcnMgc2hvdWxkIGJlIHNhdmVkIGFuZCByZXN1bWVkIGNvbnNlcnZhdGl2ZWx5LgogCi0g
ICAgVk0mIHZtID0gKm1fYnl0ZWNvZGVHZW5lcmF0b3Iudm0oKTsKKyAgICBWTSYgdm0gPSBtX2J5
dGVjb2RlR2VuZXJhdG9yLnZtKCk7CiAgICAgewogICAgICAgICBHZW5lcmF0b3JMaXZlbmVzc0Fu
YWx5c2lzIHBhc3MoKnRoaXMpOwogICAgICAgICBwYXNzLnJ1bihtX2NvZGVCbG9jaywgbV9pbnN0
cnVjdGlvbnMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2Rl
SW50cmluc2ljUmVnaXN0cnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9CeXRlY29kZUludHJpbnNpY1JlZ2lzdHJ5LmNwcAkocmV2aXNpb24gMjQ5MTI4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlSW50cmluc2ljUmVn
aXN0cnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdo
dCAoQykgMjAxNSBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+LgotICogQ29w
eXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMDQsMTIgKzEwNCwxMiBAQCBCeXRl
Y29kZUludHJpbnNpY05vZGU6OkVtaXR0ZXJUeXBlIEJ5dGVjCiAKIEpTVmFsdWUgQnl0ZWNvZGVJ
bnRyaW5zaWNSZWdpc3RyeTo6c2VudGluZWxNYXBCdWNrZXRWYWx1ZShCeXRlY29kZUdlbmVyYXRv
ciYgZ2VuZXJhdG9yKQogewotICAgIHJldHVybiBnZW5lcmF0b3Iudm0oKS0+c2VudGluZWxNYXBC
dWNrZXQoKTsKKyAgICByZXR1cm4gZ2VuZXJhdG9yLnZtKCkuc2VudGluZWxNYXBCdWNrZXQoKTsK
IH0KIAogSlNWYWx1ZSBCeXRlY29kZUludHJpbnNpY1JlZ2lzdHJ5OjpzZW50aW5lbFNldEJ1Y2tl
dFZhbHVlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IpCiB7Ci0gICAgcmV0dXJuIGdlbmVy
YXRvci52bSgpLT5zZW50aW5lbFNldEJ1Y2tldCgpOworICAgIHJldHVybiBnZW5lcmF0b3Iudm0o
KS5zZW50aW5lbFNldEJ1Y2tldCgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsVmFyaWFudC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsVmFyaWFudC5oCShyZXZpc2lvbiAy
NDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbFZhcmlhbnQuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQt
MjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTg3LDIxICs4NywyMSBAQCBwdWJsaWM6CiAgICAgCiAgICAgSW50
ZXJuYWxGdW5jdGlvbiogaW50ZXJuYWxGdW5jdGlvbigpIGNvbnN0CiAgICAgewotICAgICAgICBy
ZXR1cm4ganNEeW5hbWljQ2FzdDxJbnRlcm5hbEZ1bmN0aW9uKj4oKm1fY2FsbGVlLT52bSgpLCBt
X2NhbGxlZSk7CisgICAgICAgIHJldHVybiBqc0R5bmFtaWNDYXN0PEludGVybmFsRnVuY3Rpb24q
PihtX2NhbGxlZS0+dm0oKSwgbV9jYWxsZWUpOwogICAgIH0KICAgICAKICAgICBKU0Z1bmN0aW9u
KiBmdW5jdGlvbigpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4ganNEeW5hbWljQ2FzdDxK
U0Z1bmN0aW9uKj4oKm1fY2FsbGVlLT52bSgpLCBtX2NhbGxlZSk7CisgICAgICAgIHJldHVybiBq
c0R5bmFtaWNDYXN0PEpTRnVuY3Rpb24qPihtX2NhbGxlZS0+dm0oKSwgbV9jYWxsZWUpOwogICAg
IH0KICAgICAKLSAgICBib29sIGlzQ2xvc3VyZUNhbGwoKSBjb25zdCB7IHJldHVybiAhIWpzRHlu
YW1pY0Nhc3Q8RXhlY3V0YWJsZUJhc2UqPigqbV9jYWxsZWUtPnZtKCksIG1fY2FsbGVlKTsgfQor
ICAgIGJvb2wgaXNDbG9zdXJlQ2FsbCgpIGNvbnN0IHsgcmV0dXJuICEhanNEeW5hbWljQ2FzdDxF
eGVjdXRhYmxlQmFzZSo+KG1fY2FsbGVlLT52bSgpLCBtX2NhbGxlZSk7IH0KICAgICAKICAgICBF
eGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSgpIGNvbnN0CiAgICAgewogICAgICAgICBpZiAoSlNG
dW5jdGlvbiogZnVuY3Rpb24gPSB0aGlzLT5mdW5jdGlvbigpKQogICAgICAgICAgICAgcmV0dXJu
IGZ1bmN0aW9uLT5leGVjdXRhYmxlKCk7Ci0gICAgICAgIHJldHVybiBqc0R5bmFtaWNDYXN0PEV4
ZWN1dGFibGVCYXNlKj4oKm1fY2FsbGVlLT52bSgpLCBtX2NhbGxlZSk7CisgICAgICAgIHJldHVy
biBqc0R5bmFtaWNDYXN0PEV4ZWN1dGFibGVCYXNlKj4obV9jYWxsZWUtPnZtKCksIG1fY2FsbGVl
KTsKICAgICB9CiAgICAgCiAgICAgSlNDZWxsKiBub25FeGVjdXRhYmxlQ2FsbGVlKCkgY29uc3QK
QEAgLTEyMCwxNCArMTIwLDE0IEBAIHB1YmxpYzoKICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1
bmN0aW9uRXhlY3V0YWJsZSgpIGNvbnN0CiAgICAgewogICAgICAgICBpZiAoRXhlY3V0YWJsZUJh
c2UqIGV4ZWN1dGFibGUgPSB0aGlzLT5leGVjdXRhYmxlKCkpCi0gICAgICAgICAgICByZXR1cm4g
anNEeW5hbWljQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPigqbV9jYWxsZWUtPnZtKCksIGV4ZWN1
dGFibGUpOworICAgICAgICAgICAgcmV0dXJuIGpzRHluYW1pY0Nhc3Q8RnVuY3Rpb25FeGVjdXRh
YmxlKj4obV9jYWxsZWUtPnZtKCksIGV4ZWN1dGFibGUpOwogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKICAgICB9CiAKICAgICBOYXRpdmVFeGVjdXRhYmxlKiBuYXRpdmVFeGVjdXRhYmxlKCkgY29u
c3QKICAgICB7CiAgICAgICAgIGlmIChFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSA9IHRoaXMt
PmV4ZWN1dGFibGUoKSkKLSAgICAgICAgICAgIHJldHVybiBqc0R5bmFtaWNDYXN0PE5hdGl2ZUV4
ZWN1dGFibGUqPigqbV9jYWxsZWUtPnZtKCksIGV4ZWN1dGFibGUpOworICAgICAgICAgICAgcmV0
dXJuIGpzRHluYW1pY0Nhc3Q8TmF0aXZlRXhlY3V0YWJsZSo+KG1fY2FsbGVlLT52bSgpLCBleGVj
dXRhYmxlKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMjQ5MTI4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIyOSw3ICsyMjksNyBAQCB2b2lkIENvZGVCbG9jazo6ZHVtcFNvdXJjZShQ
cmludFN0cmVhbSYgCiAgICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25FeGVjdXRh
YmxlID0gcmVpbnRlcnByZXRfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihleGVjdXRhYmxlKTsK
ICAgICAgICAgU3RyaW5nVmlldyBzb3VyY2UgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPnNvdXJjZSgp
LnByb3ZpZGVyKCktPmdldFJhbmdlKAogICAgICAgICAgICAgZnVuY3Rpb25FeGVjdXRhYmxlLT5w
YXJhbWV0ZXJzU3RhcnRPZmZzZXQoKSwKLSAgICAgICAgICAgIGZ1bmN0aW9uRXhlY3V0YWJsZS0+
dHlwZVByb2ZpbGluZ0VuZE9mZnNldCgqdm0oKSkgKyAxKTsgLy8gVHlwZSBwcm9maWxpbmcgZW5k
IG9mZnNldCBpcyB0aGUgY2hhcmFjdGVyIGJlZm9yZSB0aGUgJ30nLgorICAgICAgICAgICAgZnVu
Y3Rpb25FeGVjdXRhYmxlLT50eXBlUHJvZmlsaW5nRW5kT2Zmc2V0KHZtKCkpICsgMSk7IC8vIFR5
cGUgcHJvZmlsaW5nIGVuZCBvZmZzZXQgaXMgdGhlIGNoYXJhY3RlciBiZWZvcmUgdGhlICd9Jy4K
ICAgICAgICAgCiAgICAgICAgIG91dC5wcmludCgiZnVuY3Rpb24gIiwgaW5mZXJyZWROYW1lKCks
IHNvdXJjZSk7CiAgICAgICAgIHJldHVybjsKQEAgLTI4Miw4ICsyODIsOCBAQCBwcml2YXRlOgog
CiB9IC8vIGFub255bW91cyBuYW1lc3BhY2UKIAotQ29kZUJsb2NrOjpDb2RlQmxvY2soVk0qIHZt
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQ29weVBhcnNlZEJsb2NrVGFnLCBDb2RlQmxvY2smIG90
aGVyKQotICAgIDogSlNDZWxsKCp2bSwgc3RydWN0dXJlKQorQ29kZUJsb2NrOjpDb2RlQmxvY2so
Vk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQ29weVBhcnNlZEJsb2NrVGFnLCBDb2RlQmxv
Y2smIG90aGVyKQorICAgIDogSlNDZWxsKHZtLCBzdHJ1Y3R1cmUpCiAgICAgLCBtX2dsb2JhbE9i
amVjdChvdGhlci5tX2dsb2JhbE9iamVjdCkKICAgICAsIG1fc2hvdWxkQWx3YXlzQmVJbmxpbmVk
KHRydWUpCiAjaWYgRU5BQkxFKEpJVCkKQEAgLTMwMSw4ICszMDEsOCBAQCBDb2RlQmxvY2s6OkNv
ZGVCbG9jayhWTSogdm0sIFN0cnVjdHVyZSogCiAgICAgLCBtX2J5dGVjb2RlQ29zdChvdGhlci5t
X2J5dGVjb2RlQ29zdCkKICAgICAsIG1fc2NvcGVSZWdpc3RlcihvdGhlci5tX3Njb3BlUmVnaXN0
ZXIpCiAgICAgLCBtX2hhc2gob3RoZXIubV9oYXNoKQotICAgICwgbV91bmxpbmtlZENvZGUoKm90
aGVyLnZtKCksIHRoaXMsIG90aGVyLm1fdW5saW5rZWRDb2RlLmdldCgpKQotICAgICwgbV9vd25l
ckV4ZWN1dGFibGUoKm90aGVyLnZtKCksIHRoaXMsIG90aGVyLm1fb3duZXJFeGVjdXRhYmxlLmdl
dCgpKQorICAgICwgbV91bmxpbmtlZENvZGUob3RoZXIudm0oKSwgdGhpcywgb3RoZXIubV91bmxp
bmtlZENvZGUuZ2V0KCkpCisgICAgLCBtX293bmVyRXhlY3V0YWJsZShvdGhlci52bSgpLCB0aGlz
LCBvdGhlci5tX293bmVyRXhlY3V0YWJsZS5nZXQoKSkKICAgICAsIG1fdm0ob3RoZXIubV92bSkK
ICAgICAsIG1faW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcihvdGhlci5tX2luc3RydWN0aW9uc1Jhd1Bv
aW50ZXIpCiAgICAgLCBtX2NvbnN0YW50UmVnaXN0ZXJzKG90aGVyLm1fY29uc3RhbnRSZWdpc3Rl
cnMpCkBAIC0zMjEsNyArMzIxLDcgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soVk0qIHZtLCBTdHJ1
Y3R1cmUqIAogICAgIEFTU0VSVChzb3VyY2UoKS5wcm92aWRlcigpKTsKICAgICBzZXROdW1QYXJh
bWV0ZXJzKG90aGVyLm51bVBhcmFtZXRlcnMoKSk7CiAgICAgCi0gICAgdm0tPmhlYXAuY29kZUJs
b2NrU2V0KCkuYWRkKHRoaXMpOworICAgIHZtLmhlYXAuY29kZUJsb2NrU2V0KCkuYWRkKHRoaXMp
OwogfQogCiB2b2lkIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBDb3B5UGFyc2Vk
QmxvY2tUYWcsIENvZGVCbG9jayYgb3RoZXIpCkBAIC0zNDEsOSArMzQxLDkgQEAgdm9pZCBDb2Rl
QmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgQwogICAgIH0KIH0KIAotQ29kZUJsb2NrOjpD
b2RlQmxvY2soVk0qIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgU2NyaXB0RXhlY3V0YWJsZSog
b3duZXJFeGVjdXRhYmxlLCBVbmxpbmtlZENvZGVCbG9jayogdW5saW5rZWRDb2RlQmxvY2ssIEpT
U2NvcGUqIHNjb3BlKQotICAgIDogSlNDZWxsKCp2bSwgc3RydWN0dXJlKQotICAgICwgbV9nbG9i
YWxPYmplY3QoKnZtLCB0aGlzLCBzY29wZS0+Z2xvYmFsT2JqZWN0KCp2bSkpCitDb2RlQmxvY2s6
OkNvZGVCbG9jayhWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBTY3JpcHRFeGVjdXRhYmxl
KiBvd25lckV4ZWN1dGFibGUsIFVubGlua2VkQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9jaywg
SlNTY29wZSogc2NvcGUpCisgICAgOiBKU0NlbGwodm0sIHN0cnVjdHVyZSkKKyAgICAsIG1fZ2xv
YmFsT2JqZWN0KHZtLCB0aGlzLCBzY29wZS0+Z2xvYmFsT2JqZWN0KHZtKSkKICAgICAsIG1fc2hv
dWxkQWx3YXlzQmVJbmxpbmVkKHRydWUpCiAjaWYgRU5BQkxFKEpJVCkKICAgICAsIG1fY2FwYWJp
bGl0eUxldmVsU3RhdGUoREZHOjpDYXBhYmlsaXR5TGV2ZWxOb3RTZXQpCkBAIC0zNTcsOSArMzU3
LDkgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soVk0qIHZtLCBTdHJ1Y3R1cmUqIAogICAgICwgbV9z
dGVwcGluZ01vZGUoU3RlcHBpbmdNb2RlRGlzYWJsZWQpCiAgICAgLCBtX251bUJyZWFrcG9pbnRz
KDApCiAgICAgLCBtX3Njb3BlUmVnaXN0ZXIodW5saW5rZWRDb2RlQmxvY2stPnNjb3BlUmVnaXN0
ZXIoKSkKLSAgICAsIG1fdW5saW5rZWRDb2RlKCp2bSwgdGhpcywgdW5saW5rZWRDb2RlQmxvY2sp
Ci0gICAgLCBtX293bmVyRXhlY3V0YWJsZSgqdm0sIHRoaXMsIG93bmVyRXhlY3V0YWJsZSkKLSAg
ICAsIG1fdm0odm0pCisgICAgLCBtX3VubGlua2VkQ29kZSh2bSwgdGhpcywgdW5saW5rZWRDb2Rl
QmxvY2spCisgICAgLCBtX293bmVyRXhlY3V0YWJsZSh2bSwgdGhpcywgb3duZXJFeGVjdXRhYmxl
KQorICAgICwgbV92bSgmdm0pCiAgICAgLCBtX2luc3RydWN0aW9uc1Jhd1BvaW50ZXIodW5saW5r
ZWRDb2RlQmxvY2stPmluc3RydWN0aW9ucygpLnJhd1BvaW50ZXIoKSkKICAgICAsIG1fb3NyRXhp
dENvdW50ZXIoMCkKICAgICAsIG1fb3B0aW1pemF0aW9uRGVsYXlDb3VudGVyKDApCkBAIC0zNzMs
NyArMzczLDcgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soVk0qIHZtLCBTdHJ1Y3R1cmUqIAogICAg
IEFTU0VSVChzb3VyY2UoKS5wcm92aWRlcigpKTsKICAgICBzZXROdW1QYXJhbWV0ZXJzKHVubGlu
a2VkQ29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkpOwogICAgIAotICAgIHZtLT5oZWFwLmNvZGVC
bG9ja1NldCgpLmFkZCh0aGlzKTsKKyAgICB2bS5oZWFwLmNvZGVCbG9ja1NldCgpLmFkZCh0aGlz
KTsKIH0KIAogLy8gVGhlIG1haW4gcHVycG9zZSBvZiB0aGlzIGZ1bmN0aW9uIGlzIHRvIGdlbmVy
YXRlIGxpbmtlZCBieXRlY29kZSBmcm9tIHVubGlua2VkIGJ5dGVjb2RlLiBUaGUgcHJvY2VzcwpA
QCAtODgwLDcgKzg4MCw3IEBAIHZvaWQgQ29kZUJsb2NrOjpzZXRDb25zdGFudElkZW50aWZpZXJT
ZXQKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKIAogICAgICAg
ICBmb3IgKGF1dG8gc2V0RW50cnkgOiBzZXQpIHsKLSAgICAgICAgICAgIEpTU3RyaW5nKiBqc1N0
cmluZyA9IGpzT3duZWRTdHJpbmcoJnZtLCBzZXRFbnRyeS5nZXQoKSk7IAorICAgICAgICAgICAg
SlNTdHJpbmcqIGpzU3RyaW5nID0ganNPd25lZFN0cmluZyh2bSwgc2V0RW50cnkuZ2V0KCkpOyAK
ICAgICAgICAgICAgIGpzU2V0LT5hZGQoZXhlYywganNTdHJpbmcpOwogICAgICAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKICAgICAgICAgfQpAQCAtOTQwLDcgKzk0
MCw3IEBAIHZvaWQgQ29kZUJsb2NrOjpzZXROdW1QYXJhbWV0ZXJzKGludCBuZXcKIHsKICAgICBt
X251bVBhcmFtZXRlcnMgPSBuZXdWYWx1ZTsKIAotICAgIG1fYXJndW1lbnRWYWx1ZVByb2ZpbGVz
ID0gUmVmQ291bnRlZEFycmF5PFZhbHVlUHJvZmlsZT4odm0oKS0+Y2FuVXNlSklUKCkgPyBuZXdW
YWx1ZSA6IDApOworICAgIG1fYXJndW1lbnRWYWx1ZVByb2ZpbGVzID0gUmVmQ291bnRlZEFycmF5
PFZhbHVlUHJvZmlsZT4odm0oKS5jYW5Vc2VKSVQoKSA/IG5ld1ZhbHVlIDogMCk7CiB9CiAKIENv
ZGVCbG9jayogQ29kZUJsb2NrOjpzcGVjaWFsT1NSRW50cnlCbG9ja09yTnVsbCgpCkBAIC0xMzY1
LDcgKzEzNjUsNyBAQCB2b2lkIENvZGVCbG9jazo6ZmluYWxpemVCYXNlbGluZUpJVElubGluCiB7
CiAgICAgaWYgKGF1dG8qIGppdERhdGEgPSBtX2ppdERhdGEuZ2V0KCkpIHsKICAgICAgICAgZm9y
IChDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA6IGppdERhdGEtPm1fY2FsbExpbmtJbmZvcykK
LSAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+dmlzaXRXZWFrKCp2bSgpKTsKKyAgICAgICAgICAg
IGNhbGxMaW5rSW5mby0+dmlzaXRXZWFrKHZtKCkpOwogCiAgICAgICAgIGZvciAoU3RydWN0dXJl
U3R1YkluZm8qIHN0dWJJbmZvIDogaml0RGF0YS0+bV9zdHViSW5mb3MpCiAgICAgICAgICAgICBz
dHViSW5mby0+dmlzaXRXZWFrUmVmZXJlbmNlcyh0aGlzKTsKQEAgLTE5MzYsOSArMTkzNiw5IEBA
IHZvaWQgQ29kZUJsb2NrOjp1bmxpbmtJbmNvbWluZ0NhbGxzKCkKICAgICB9CiAgICAgaWYgKGpp
dERhdGEpIHsKICAgICAgICAgd2hpbGUgKGppdERhdGEtPm1faW5jb21pbmdDYWxscy5iZWdpbigp
ICE9IGppdERhdGEtPm1faW5jb21pbmdDYWxscy5lbmQoKSkKLSAgICAgICAgICAgIGppdERhdGEt
Pm1faW5jb21pbmdDYWxscy5iZWdpbigpLT51bmxpbmsoKnZtKCkpOworICAgICAgICAgICAgaml0
RGF0YS0+bV9pbmNvbWluZ0NhbGxzLmJlZ2luKCktPnVubGluayh2bSgpKTsKICAgICAgICAgd2hp
bGUgKGppdERhdGEtPm1faW5jb21pbmdQb2x5bW9ycGhpY0NhbGxzLmJlZ2luKCkgIT0gaml0RGF0
YS0+bV9pbmNvbWluZ1BvbHltb3JwaGljQ2FsbHMuZW5kKCkpCi0gICAgICAgICAgICBqaXREYXRh
LT5tX2luY29taW5nUG9seW1vcnBoaWNDYWxscy5iZWdpbigpLT51bmxpbmsoKnZtKCkpOworICAg
ICAgICAgICAgaml0RGF0YS0+bV9pbmNvbWluZ1BvbHltb3JwaGljQ2FsbHMuYmVnaW4oKS0+dW5s
aW5rKHZtKCkpOwogICAgIH0KICNlbmRpZiAvLyBFTkFCTEUoSklUKQogfQpAQCAtMTk1Nyw3ICsx
OTU3LDcgQEAgQ29kZUJsb2NrKiBDb2RlQmxvY2s6Om5ld1JlcGxhY2VtZW50KCkKICNpZiBFTkFC
TEUoSklUKQogQ29kZUJsb2NrKiBDb2RlQmxvY2s6OnJlcGxhY2VtZW50KCkKIHsKLSAgICBjb25z
dCBDbGFzc0luZm8qIGNsYXNzSW5mbyA9IHRoaXMtPmNsYXNzSW5mbygqdm0oKSk7CisgICAgY29u
c3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8gPSB0aGlzLT5jbGFzc0luZm8odm0oKSk7CiAKICAgICBp
ZiAoY2xhc3NJbmZvID09IEZ1bmN0aW9uQ29kZUJsb2NrOjppbmZvKCkpCiAgICAgICAgIHJldHVy
biBqc0Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4ob3duZXJFeGVjdXRhYmxlKCkpLT5jb2RlQmxv
Y2tGb3IoaXNDb25zdHJ1Y3RvcigpID8gQ29kZUZvckNvbnN0cnVjdCA6IENvZGVGb3JDYWxsKTsK
QEAgLTE5NzcsNyArMTk3Nyw3IEBAIENvZGVCbG9jayogQ29kZUJsb2NrOjpyZXBsYWNlbWVudCgp
CiAKIERGRzo6Q2FwYWJpbGl0eUxldmVsIENvZGVCbG9jazo6Y29tcHV0ZUNhcGFiaWxpdHlMZXZl
bCgpCiB7Ci0gICAgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8gPSB0aGlzLT5jbGFzc0luZm8o
KnZtKCkpOworICAgIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvID0gdGhpcy0+Y2xhc3NJbmZv
KHZtKCkpOwogCiAgICAgaWYgKGNsYXNzSW5mbyA9PSBGdW5jdGlvbkNvZGVCbG9jazo6aW5mbygp
KSB7CiAgICAgICAgIGlmIChpc0NvbnN0cnVjdG9yKCkpCkBAIC0yMjMxLDcgKzIyMzEsNyBAQCB2
b2lkIENvZGVCbG9jazo6bm90aWNlSW5jb21pbmdDYWxsKEV4ZWNTCiAKICAgICAvLyBSZWN1cnNp
dmUgY2FsbHMgd29uJ3QgYmUgaW5saW5lZC4KICAgICBSZWN1cnNpb25DaGVja0Z1bmN0b3IgZnVu
Y3RvcihjYWxsZXJGcmFtZSwgdGhpcywgT3B0aW9uczo6bWF4aW11bUlubGluaW5nRGVwdGgoKSk7
Ci0gICAgdm0oKS0+dG9wQ2FsbEZyYW1lLT5pdGVyYXRlKGZ1bmN0b3IpOworICAgIHZtKCkudG9w
Q2FsbEZyYW1lLT5pdGVyYXRlKGZ1bmN0b3IpOwogCiAgICAgaWYgKGZ1bmN0b3IuZGlkUmVjdXJz
ZSgpKSB7CiAgICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlQ2FsbExpbmsoKSkKQEAgLTI5NDgs
NyArMjk0OCw3IEBAIFN0cmluZyBDb2RlQmxvY2s6Om5hbWVGb3JSZWdpc3RlcihWaXJ0dWEKICAg
ICBmb3IgKGF1dG8mIGNvbnN0YW50UmVnaXN0ZXIgOiBtX2NvbnN0YW50UmVnaXN0ZXJzKSB7CiAg
ICAgICAgIGlmIChjb25zdGFudFJlZ2lzdGVyLmdldCgpLmlzRW1wdHkoKSkKICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICBpZiAoU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0ganNEeW5h
bWljQ2FzdDxTeW1ib2xUYWJsZSo+KCp2bSgpLCBjb25zdGFudFJlZ2lzdGVyLmdldCgpKSkgewor
ICAgICAgICBpZiAoU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0ganNEeW5hbWljQ2FzdDxTeW1i
b2xUYWJsZSo+KHZtKCksIGNvbnN0YW50UmVnaXN0ZXIuZ2V0KCkpKSB7CiAgICAgICAgICAgICBD
b25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKHN5bWJvbFRhYmxlLT5tX2xvY2spOwogICAgICAgICAg
ICAgYXV0byBlbmQgPSBzeW1ib2xUYWJsZS0+ZW5kKGxvY2tlcik7CiAgICAgICAgICAgICBmb3Ig
KGF1dG8gcHRyID0gc3ltYm9sVGFibGUtPmJlZ2luKGxvY2tlcik7IHB0ciAhPSBlbmQ7ICsrcHRy
KSB7CkBAIC0zMTc0LDExICszMTc0LDExIEBAIHZvaWQgQ29kZUJsb2NrOjppbnNlcnRCYXNpY0Js
b2NrQm91bmRhcmkKICAgICAgICAgLy8gbTogb3BfcHJvZmlsZV9jb250cm9sX2Zsb3cKICAgICAg
ICAgaWYgKGJhc2ljQmxvY2tFbmRPZmZzZXQgPCBiYXNpY0Jsb2NrU3RhcnRPZmZzZXQpIHsKICAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGkgKyAxIDwgb2Zmc2V0c0xlbmd0aCk7IC8vIFdlIHNo
b3VsZCBuZXZlciBlbmNvdW50ZXIgZHVtbXkgYmxvY2tzIGF0IHRoZSBlbmQgb2YgYSBDb2RlQmxv
Y2suCi0gICAgICAgICAgICBtZXRhZGF0YS5tX2Jhc2ljQmxvY2tMb2NhdGlvbiA9IHZtKCktPmNv
bnRyb2xGbG93UHJvZmlsZXIoKS0+ZHVtbXlCYXNpY0Jsb2NrKCk7CisgICAgICAgICAgICBtZXRh
ZGF0YS5tX2Jhc2ljQmxvY2tMb2NhdGlvbiA9IHZtKCkuY29udHJvbEZsb3dQcm9maWxlcigpLT5k
dW1teUJhc2ljQmxvY2soKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKLSAg
ICAgICAgQmFzaWNCbG9ja0xvY2F0aW9uKiBiYXNpY0Jsb2NrTG9jYXRpb24gPSB2bSgpLT5jb250
cm9sRmxvd1Byb2ZpbGVyKCktPmdldEJhc2ljQmxvY2tMb2NhdGlvbihvd25lckV4ZWN1dGFibGUo
KS0+c291cmNlSUQoKSwgYmFzaWNCbG9ja1N0YXJ0T2Zmc2V0LCBiYXNpY0Jsb2NrRW5kT2Zmc2V0
KTsKKyAgICAgICAgQmFzaWNCbG9ja0xvY2F0aW9uKiBiYXNpY0Jsb2NrTG9jYXRpb24gPSB2bSgp
LmNvbnRyb2xGbG93UHJvZmlsZXIoKS0+Z2V0QmFzaWNCbG9ja0xvY2F0aW9uKG93bmVyRXhlY3V0
YWJsZSgpLT5zb3VyY2VJRCgpLCBiYXNpY0Jsb2NrU3RhcnRPZmZzZXQsIGJhc2ljQmxvY2tFbmRP
ZmZzZXQpOwogCiAgICAgICAgIC8vIEZpbmQgYWxsIGZ1bmN0aW9ucyB0aGF0IGFyZSBlbmNsb3Nl
ZCB3aXRoaW4gdGhlIHJhbmdlOiBbYmFzaWNCbG9ja1N0YXJ0T2Zmc2V0LCBiYXNpY0Jsb2NrRW5k
T2Zmc2V0XQogICAgICAgICAvLyBhbmQgaW5zZXJ0IHRoZXNlIGZ1bmN0aW9ucycgc3RhcnQvZW5k
IG9mZnNldHMgYXMgZ2FwcyBpbiB0aGUgY3VycmVudCBCYXNpY0Jsb2NrTG9jYXRpb24uCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiAy
NDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEyMCw4ICsxMjAsOCBAQCBwdWJsaWM6CiAgICAgREVDTEFSRV9JTkZP
OwogCiBwcm90ZWN0ZWQ6Ci0gICAgQ29kZUJsb2NrKFZNKiwgU3RydWN0dXJlKiwgQ29weVBhcnNl
ZEJsb2NrVGFnLCBDb2RlQmxvY2smIG90aGVyKTsKLSAgICBDb2RlQmxvY2soVk0qLCBTdHJ1Y3R1
cmUqLCBTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGlua2VkQ29kZUJsb2Nr
KiwgSlNTY29wZSopOworICAgIENvZGVCbG9jayhWTSYsIFN0cnVjdHVyZSosIENvcHlQYXJzZWRC
bG9ja1RhZywgQ29kZUJsb2NrJiBvdGhlcik7CisgICAgQ29kZUJsb2NrKFZNJiwgU3RydWN0dXJl
KiwgU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmtlZENvZGVCbG9jayos
IEpTU2NvcGUqKTsKIAogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBDb3B5UGFyc2VkQmxv
Y2tUYWcsIENvZGVCbG9jayYgb3RoZXIpOwogICAgIGJvb2wgZmluaXNoQ3JlYXRpb24oVk0mLCBT
Y3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGlua2VkQ29kZUJsb2NrKiwgSlNT
Y29wZSopOwpAQCAtNDM2LDcgKzQzNiw3IEBAIHB1YmxpYzoKICAgICAKICAgICBFeGVjdXRhYmxl
VG9Db2RlQmxvY2tFZGdlKiBvd25lckVkZ2UoKSBjb25zdCB7IHJldHVybiBtX293bmVyRWRnZS5n
ZXQoKTsgfQogCi0gICAgVk0qIHZtKCkgY29uc3QgeyByZXR1cm4gbV92bTsgfQorICAgIFZNJiB2
bSgpIGNvbnN0IHsgcmV0dXJuICptX3ZtOyB9CiAKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1Jl
Z2lzdGVyKCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPnRoaXNSZWdpc3RlcigpOyB9
CiAKQEAgLTQ3MiwxMyArNDcyLDEzIEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBudW1iZXJPZkFy
Z3VtZW50VmFsdWVQcm9maWxlcygpCiAgICAgewogICAgICAgICBBU1NFUlQobV9udW1QYXJhbWV0
ZXJzID49IDApOwotICAgICAgICBBU1NFUlQobV9hcmd1bWVudFZhbHVlUHJvZmlsZXMuc2l6ZSgp
ID09IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX251bVBhcmFtZXRlcnMpIHx8ICF2bSgpLT5jYW5V
c2VKSVQoKSk7CisgICAgICAgIEFTU0VSVChtX2FyZ3VtZW50VmFsdWVQcm9maWxlcy5zaXplKCkg
PT0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fbnVtUGFyYW1ldGVycykgfHwgIXZtKCkuY2FuVXNl
SklUKCkpOwogICAgICAgICByZXR1cm4gbV9hcmd1bWVudFZhbHVlUHJvZmlsZXMuc2l6ZSgpOwog
ICAgIH0KIAogICAgIFZhbHVlUHJvZmlsZSYgdmFsdWVQcm9maWxlRm9yQXJndW1lbnQodW5zaWdu
ZWQgYXJndW1lbnRJbmRleCkKICAgICB7Ci0gICAgICAgIEFTU0VSVCh2bSgpLT5jYW5Vc2VKSVQo
KSk7IC8vIFRoaXMgaXMgb25seSBjYWxsZWQgZnJvbSB0aGUgdmFyaW91cyBKSVQgY29tcGlsZXJz
IG9yIHBsYWNlcyB0aGF0IGZpcnN0IGNoZWNrIG51bWJlck9mQXJndW1lbnRWYWx1ZVByb2ZpbGVz
IGJlZm9yZSBjYWxsaW5nIHRoaXMuCisgICAgICAgIEFTU0VSVCh2bSgpLmNhblVzZUpJVCgpKTsg
Ly8gVGhpcyBpcyBvbmx5IGNhbGxlZCBmcm9tIHRoZSB2YXJpb3VzIEpJVCBjb21waWxlcnMgb3Ig
cGxhY2VzIHRoYXQgZmlyc3QgY2hlY2sgbnVtYmVyT2ZBcmd1bWVudFZhbHVlUHJvZmlsZXMgYmVm
b3JlIGNhbGxpbmcgdGhpcy4KICAgICAgICAgVmFsdWVQcm9maWxlJiByZXN1bHQgPSBtX2FyZ3Vt
ZW50VmFsdWVQcm9maWxlc1thcmd1bWVudEluZGV4XTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
ICAgICB9CkBAIC05NzIsNiArOTcyLDggQEAgcHJpdmF0ZToKICAgICBXcml0ZUJhcnJpZXI8VW5s
aW5rZWRDb2RlQmxvY2s+IG1fdW5saW5rZWRDb2RlOwogICAgIFdyaXRlQmFycmllcjxTY3JpcHRF
eGVjdXRhYmxlPiBtX293bmVyRXhlY3V0YWJsZTsKICAgICBXcml0ZUJhcnJpZXI8RXhlY3V0YWJs
ZVRvQ29kZUJsb2NrRWRnZT4gbV9vd25lckVkZ2U7CisgICAgLy8gbV92bSBtdXN0IGJlIGEgcG9p
bnRlciAoaW5zdGVhZCBvZiBhIHJlZmVyZW5jZSkgYmVjYXVzZSB0aGUgSlNDTExJbnRPZmZzZXRz
RXh0cmFjdG9yCisgICAgLy8gY2Fubm90IGhhbmRsZSBpdCBiZWluZyBhIHJlZmVyZW5jZS4KICAg
ICBWTSogbV92bTsKIAogICAgIGNvbnN0IHZvaWQqIG1faW5zdHJ1Y3Rpb25zUmF3UG9pbnRlciB7
IG51bGxwdHIgfTsKQEAgLTEwNjEsNyArMTA2Myw3IEBAIEV4Y2VwdGlvbiogU2NyaXB0RXhlY3V0
YWJsZTo6cHJlcGFyZUZvckUKICNkZWZpbmUgQ09ERUJMT0NLX0xPR19FVkVOVChjb2RlQmxvY2ss
IHN1bW1hcnksIGRldGFpbHMpIFwKICAgICBkbyB7IFwKICAgICAgICAgaWYgKGNvZGVCbG9jaykg
XAotICAgICAgICAgICAgKGNvZGVCbG9jay0+dm0oKS0+bG9nRXZlbnQoY29kZUJsb2NrLCBzdW1t
YXJ5LCBbJl0gKCkgeyByZXR1cm4gdG9DU3RyaW5nIGRldGFpbHM7IH0pKTsgXAorICAgICAgICAg
ICAgKGNvZGVCbG9jay0+dm0oKS5sb2dFdmVudChjb2RlQmxvY2ssIHN1bW1hcnksIFsmXSAoKSB7
IHJldHVybiB0b0NTdHJpbmcgZGV0YWlsczsgfSkpOyBcCiAgICAgfSB3aGlsZSAoMCkKIAogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGVmZXJyZWRTb3VyY2VEdW1wLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGVmZXJyZWRT
b3VyY2VEdW1wLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0RlZmVycmVkU291cmNlRHVtcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMywx
NCArMzMsMTQgQEAKIG5hbWVzcGFjZSBKU0MgewogCiBEZWZlcnJlZFNvdXJjZUR1bXA6OkRlZmVy
cmVkU291cmNlRHVtcChDb2RlQmxvY2sqIGNvZGVCbG9jaykKLSAgICA6IG1fY29kZUJsb2NrKCpj
b2RlQmxvY2stPnZtKCksIGNvZGVCbG9jaykKKyAgICA6IG1fY29kZUJsb2NrKGNvZGVCbG9jay0+
dm0oKSwgY29kZUJsb2NrKQogICAgICwgbV9yb290SklUVHlwZShKSVRUeXBlOjpOb25lKQogewog
fQogCiBEZWZlcnJlZFNvdXJjZUR1bXA6OkRlZmVycmVkU291cmNlRHVtcChDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgQ29kZUJsb2NrKiByb290Q29kZUJsb2NrLCBKSVRUeXBlIHJvb3RKSVRUeXBlLCB1
bnNpZ25lZCBjYWxsZXJCeXRlY29kZUluZGV4KQotICAgIDogbV9jb2RlQmxvY2soKmNvZGVCbG9j
ay0+dm0oKSwgY29kZUJsb2NrKQotICAgICwgbV9yb290Q29kZUJsb2NrKCpjb2RlQmxvY2stPnZt
KCksIHJvb3RDb2RlQmxvY2spCisgICAgOiBtX2NvZGVCbG9jayhjb2RlQmxvY2stPnZtKCksIGNv
ZGVCbG9jaykKKyAgICAsIG1fcm9vdENvZGVCbG9jayhjb2RlQmxvY2stPnZtKCksIHJvb3RDb2Rl
QmxvY2spCiAgICAgLCBtX3Jvb3RKSVRUeXBlKHJvb3RKSVRUeXBlKQogICAgICwgbV9jYWxsZXJC
eXRlY29kZUluZGV4KGNhbGxlckJ5dGVjb2RlSW5kZXgpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvRXZhbENvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FdmFsQ29kZUJsb2NrLmgJKHJldmlzaW9uIDI0OTEyOCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FdmFsQ29kZUJsb2NrLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIw
MTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA4
IENhbWVyb24gWndhcmljaCA8Y3d6d2FyaWNoQHV3YXRlcmxvby5jYT4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKQEAgLTQ0LDE5ICs0NCwxOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiAmdm0uY29kZUJs
b2NrU3BhY2Uuc3BhY2U7CiAgICAgfQogCi0gICAgc3RhdGljIEV2YWxDb2RlQmxvY2sqIGNyZWF0
ZShWTSogdm0sIENvcHlQYXJzZWRCbG9ja1RhZywgRXZhbENvZGVCbG9jayYgb3RoZXIpCisgICAg
c3RhdGljIEV2YWxDb2RlQmxvY2sqIGNyZWF0ZShWTSYgdm0sIENvcHlQYXJzZWRCbG9ja1RhZywg
RXZhbENvZGVCbG9jayYgb3RoZXIpCiAgICAgewotICAgICAgICBFdmFsQ29kZUJsb2NrKiBpbnN0
YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEV2YWxDb2RlQmxvY2s+KHZtLT5oZWFw
KSkKLSAgICAgICAgICAgIEV2YWxDb2RlQmxvY2sodm0sIHZtLT5ldmFsQ29kZUJsb2NrU3RydWN0
dXJlLmdldCgpLCBDb3B5UGFyc2VkQmxvY2ssIG90aGVyKTsKLSAgICAgICAgaW5zdGFuY2UtPmZp
bmlzaENyZWF0aW9uKCp2bSwgQ29weVBhcnNlZEJsb2NrLCBvdGhlcik7CisgICAgICAgIEV2YWxD
b2RlQmxvY2sqIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8RXZhbENvZGVC
bG9jaz4odm0uaGVhcCkpCisgICAgICAgICAgICBFdmFsQ29kZUJsb2NrKHZtLCB2bS5ldmFsQ29k
ZUJsb2NrU3RydWN0dXJlLmdldCgpLCBDb3B5UGFyc2VkQmxvY2ssIG90aGVyKTsKKyAgICAgICAg
aW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKHZtLCBDb3B5UGFyc2VkQmxvY2ssIG90aGVyKTsKICAg
ICAgICAgcmV0dXJuIGluc3RhbmNlOwogICAgIH0KIAotICAgIHN0YXRpYyBFdmFsQ29kZUJsb2Nr
KiBjcmVhdGUoVk0qIHZtLCBFdmFsRXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmtl
ZEV2YWxDb2RlQmxvY2sqIHVubGlua2VkQ29kZUJsb2NrLCBKU1Njb3BlKiBzY29wZSkKKyAgICBz
dGF0aWMgRXZhbENvZGVCbG9jayogY3JlYXRlKFZNJiB2bSwgRXZhbEV4ZWN1dGFibGUqIG93bmVy
RXhlY3V0YWJsZSwgVW5saW5rZWRFdmFsQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9jaywgSlNT
Y29wZSogc2NvcGUpCiAgICAgewotICAgICAgICBFdmFsQ29kZUJsb2NrKiBpbnN0YW5jZSA9IG5l
dyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEV2YWxDb2RlQmxvY2s+KHZtLT5oZWFwKSkKLSAgICAg
ICAgICAgIEV2YWxDb2RlQmxvY2sodm0sIHZtLT5ldmFsQ29kZUJsb2NrU3RydWN0dXJlLmdldCgp
LCBvd25lckV4ZWN1dGFibGUsIHVubGlua2VkQ29kZUJsb2NrLCBzY29wZSk7Ci0gICAgICAgIGlm
ICghaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKCp2bSwgb3duZXJFeGVjdXRhYmxlLCB1bmxpbmtl
ZENvZGVCbG9jaywgc2NvcGUpKQorICAgICAgICBFdmFsQ29kZUJsb2NrKiBpbnN0YW5jZSA9IG5l
dyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEV2YWxDb2RlQmxvY2s+KHZtLmhlYXApKQorICAgICAg
ICAgICAgRXZhbENvZGVCbG9jayh2bSwgdm0uZXZhbENvZGVCbG9ja1N0cnVjdHVyZS5nZXQoKSwg
b3duZXJFeGVjdXRhYmxlLCB1bmxpbmtlZENvZGVCbG9jaywgc2NvcGUpOworICAgICAgICBpZiAo
IWluc3RhbmNlLT5maW5pc2hDcmVhdGlvbih2bSwgb3duZXJFeGVjdXRhYmxlLCB1bmxpbmtlZENv
ZGVCbG9jaywgc2NvcGUpKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIHJl
dHVybiBpbnN0YW5jZTsKICAgICB9CkBAIC02OSwxMiArNjksMTIgQEAgcHVibGljOgogICAgIFVu
bGlua2VkRXZhbENvZGVCbG9jayogdW5saW5rZWRFdmFsQ29kZUJsb2NrKCkgY29uc3QgeyByZXR1
cm4ganNDYXN0PFVubGlua2VkRXZhbENvZGVCbG9jayo+KHVubGlua2VkQ29kZUJsb2NrKCkpOyB9
CiAKIHByaXZhdGU6Ci0gICAgRXZhbENvZGVCbG9jayhWTSogdm0sIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBDb3B5UGFyc2VkQmxvY2tUYWcsIEV2YWxDb2RlQmxvY2smIG90aGVyKQorICAgIEV2YWxD
b2RlQmxvY2soVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQ29weVBhcnNlZEJsb2NrVGFn
LCBFdmFsQ29kZUJsb2NrJiBvdGhlcikKICAgICAgICAgOiBHbG9iYWxDb2RlQmxvY2sodm0sIHN0
cnVjdHVyZSwgQ29weVBhcnNlZEJsb2NrLCBvdGhlcikKICAgICB7CiAgICAgfQogICAgICAgICAK
LSAgICBFdmFsQ29kZUJsb2NrKFZNKiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEV2YWxFeGVj
dXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGlua2VkRXZhbENvZGVCbG9jayogdW5saW5rZWRD
b2RlQmxvY2ssIEpTU2NvcGUqIHNjb3BlKQorICAgIEV2YWxDb2RlQmxvY2soVk0mIHZtLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgRXZhbEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5r
ZWRFdmFsQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9jaywgSlNTY29wZSogc2NvcGUpCiAgICAg
ICAgIDogR2xvYmFsQ29kZUJsb2NrKHZtLCBzdHJ1Y3R1cmUsIG93bmVyRXhlY3V0YWJsZSwgdW5s
aW5rZWRDb2RlQmxvY2ssIHNjb3BlKQogICAgIHsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvRnVuY3Rpb25Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRnVuY3Rpb25Db2RlQmxvY2suaAkocmV2aXNpb24g
MjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Z1bmN0aW9uQ29kZUJs
b2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDA4LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA4LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJp
Z2h0IChDKSAyMDA4IENhbWVyb24gWndhcmljaCA8Y3d6d2FyaWNoQHV3YXRlcmxvby5jYT4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKQEAgLTQ1LDE5ICs0NSwxOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVy
biAmdm0uY29kZUJsb2NrU3BhY2Uuc3BhY2U7CiAgICAgfQogCi0gICAgc3RhdGljIEZ1bmN0aW9u
Q29kZUJsb2NrKiBjcmVhdGUoVk0qIHZtLCBDb3B5UGFyc2VkQmxvY2tUYWcsIEZ1bmN0aW9uQ29k
ZUJsb2NrJiBvdGhlcikKKyAgICBzdGF0aWMgRnVuY3Rpb25Db2RlQmxvY2sqIGNyZWF0ZShWTSYg
dm0sIENvcHlQYXJzZWRCbG9ja1RhZywgRnVuY3Rpb25Db2RlQmxvY2smIG90aGVyKQogICAgIHsK
LSAgICAgICAgRnVuY3Rpb25Db2RlQmxvY2sqIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxv
Y2F0ZUNlbGw8RnVuY3Rpb25Db2RlQmxvY2s+KHZtLT5oZWFwKSkKLSAgICAgICAgICAgIEZ1bmN0
aW9uQ29kZUJsb2NrKHZtLCB2bS0+ZnVuY3Rpb25Db2RlQmxvY2tTdHJ1Y3R1cmUuZ2V0KCksIENv
cHlQYXJzZWRCbG9jaywgb3RoZXIpOwotICAgICAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24o
KnZtLCBDb3B5UGFyc2VkQmxvY2ssIG90aGVyKTsKKyAgICAgICAgRnVuY3Rpb25Db2RlQmxvY2sq
IGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8RnVuY3Rpb25Db2RlQmxvY2s+
KHZtLmhlYXApKQorICAgICAgICAgICAgRnVuY3Rpb25Db2RlQmxvY2sodm0sIHZtLmZ1bmN0aW9u
Q29kZUJsb2NrU3RydWN0dXJlLmdldCgpLCBDb3B5UGFyc2VkQmxvY2ssIG90aGVyKTsKKyAgICAg
ICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKHZtLCBDb3B5UGFyc2VkQmxvY2ssIG90aGVyKTsK
ICAgICAgICAgcmV0dXJuIGluc3RhbmNlOwogICAgIH0KIAotICAgIHN0YXRpYyBGdW5jdGlvbkNv
ZGVCbG9jayogY3JlYXRlKFZNKiB2bSwgRnVuY3Rpb25FeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFi
bGUsIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2sqIHVubGlua2VkQ29kZUJsb2NrLCBKU1Njb3Bl
KiBzY29wZSkKKyAgICBzdGF0aWMgRnVuY3Rpb25Db2RlQmxvY2sqIGNyZWF0ZShWTSYgdm0sIEZ1
bmN0aW9uRXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJs
b2NrKiB1bmxpbmtlZENvZGVCbG9jaywgSlNTY29wZSogc2NvcGUpCiAgICAgewotICAgICAgICBG
dW5jdGlvbkNvZGVCbG9jayogaW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxG
dW5jdGlvbkNvZGVCbG9jaz4odm0tPmhlYXApKQotICAgICAgICAgICAgRnVuY3Rpb25Db2RlQmxv
Y2sodm0sIHZtLT5mdW5jdGlvbkNvZGVCbG9ja1N0cnVjdHVyZS5nZXQoKSwgb3duZXJFeGVjdXRh
YmxlLCB1bmxpbmtlZENvZGVCbG9jaywgc2NvcGUpOwotICAgICAgICBpZiAoIWluc3RhbmNlLT5m
aW5pc2hDcmVhdGlvbigqdm0sIG93bmVyRXhlY3V0YWJsZSwgdW5saW5rZWRDb2RlQmxvY2ssIHNj
b3BlKSkKKyAgICAgICAgRnVuY3Rpb25Db2RlQmxvY2sqIGluc3RhbmNlID0gbmV3IChOb3ROdWxs
LCBhbGxvY2F0ZUNlbGw8RnVuY3Rpb25Db2RlQmxvY2s+KHZtLmhlYXApKQorICAgICAgICAgICAg
RnVuY3Rpb25Db2RlQmxvY2sodm0sIHZtLmZ1bmN0aW9uQ29kZUJsb2NrU3RydWN0dXJlLmdldCgp
LCBvd25lckV4ZWN1dGFibGUsIHVubGlua2VkQ29kZUJsb2NrLCBzY29wZSk7CisgICAgICAgIGlm
ICghaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKHZtLCBvd25lckV4ZWN1dGFibGUsIHVubGlua2Vk
Q29kZUJsb2NrLCBzY29wZSkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAg
cmV0dXJuIGluc3RhbmNlOwogICAgIH0KQEAgLTY4LDEyICs2OCwxMiBAQCBwdWJsaWM6CiAgICAg
fQogCiBwcml2YXRlOgotICAgIEZ1bmN0aW9uQ29kZUJsb2NrKFZNKiB2bSwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIENvcHlQYXJzZWRCbG9ja1RhZywgRnVuY3Rpb25Db2RlQmxvY2smIG90aGVyKQor
ICAgIEZ1bmN0aW9uQ29kZUJsb2NrKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIENvcHlQ
YXJzZWRCbG9ja1RhZywgRnVuY3Rpb25Db2RlQmxvY2smIG90aGVyKQogICAgICAgICA6IENvZGVC
bG9jayh2bSwgc3RydWN0dXJlLCBDb3B5UGFyc2VkQmxvY2ssIG90aGVyKQogICAgIHsKICAgICB9
CiAKLSAgICBGdW5jdGlvbkNvZGVCbG9jayhWTSogdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBG
dW5jdGlvbkV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rZWRGdW5jdGlvbkNvZGVC
bG9jayogdW5saW5rZWRDb2RlQmxvY2ssIEpTU2NvcGUqIHNjb3BlKQorICAgIEZ1bmN0aW9uQ29k
ZUJsb2NrKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEZ1bmN0aW9uRXhlY3V0YWJsZSog
b3duZXJFeGVjdXRhYmxlLCBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVC
bG9jaywgSlNTY29wZSogc2NvcGUpCiAgICAgICAgIDogQ29kZUJsb2NrKHZtLCBzdHJ1Y3R1cmUs
IG93bmVyRXhlY3V0YWJsZSwgdW5saW5rZWRDb2RlQmxvY2ssIHNjb3BlKQogICAgIHsKICAgICB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRTdGF0
dXMuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvR2V0QnlJZFN0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0LDcgKzU0LDcgQEAgYm9v
bCBHZXRCeUlkU3RhdHVzOjphcHBlbmRWYXJpYW50KGNvbnN0IAogCiBHZXRCeUlkU3RhdHVzIEdl
dEJ5SWRTdGF0dXM6OmNvbXB1dGVGcm9tTExJbnQoQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCB1
bnNpZ25lZCBieXRlY29kZUluZGV4LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQogewotICAgIFZN
JiB2bSA9ICpwcm9maWxlZEJsb2NrLT52bSgpOworICAgIFZNJiB2bSA9IHByb2ZpbGVkQmxvY2st
PnZtKCk7CiAgICAgCiAgICAgYXV0byBpbnN0cnVjdGlvbiA9IHByb2ZpbGVkQmxvY2stPmluc3Ry
dWN0aW9ucygpLmF0KGJ5dGVjb2RlSW5kZXgpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvR2xvYmFsQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0dsb2JhbENvZGVCbG9jay5oCShyZXZpc2lvbiAyNDkxMjgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2xvYmFsQ29kZUJsb2NrLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIw
MTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA4
IENhbWVyb24gWndhcmljaCA8Y3d6d2FyaWNoQHV3YXRlcmxvby5jYT4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKQEAgLTQwLDEyICs0MCwxMiBAQCBjbGFzcyBHbG9iYWxDb2RlQmxvY2sgOiBwdWJsaWMgQ29k
ZUJsb2NrCiAgICAgdHlwZWRlZiBDb2RlQmxvY2sgQmFzZTsKIAogcHJvdGVjdGVkOgotICAgIEds
b2JhbENvZGVCbG9jayhWTSogdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBDb3B5UGFyc2VkQmxv
Y2tUYWcsIEdsb2JhbENvZGVCbG9jayYgb3RoZXIpCisgICAgR2xvYmFsQ29kZUJsb2NrKFZNJiB2
bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIENvcHlQYXJzZWRCbG9ja1RhZywgR2xvYmFsQ29kZUJs
b2NrJiBvdGhlcikKICAgICAgICAgOiBDb2RlQmxvY2sodm0sIHN0cnVjdHVyZSwgQ29weVBhcnNl
ZEJsb2NrLCBvdGhlcikKICAgICB7CiAgICAgfQogCi0gICAgR2xvYmFsQ29kZUJsb2NrKFZNKiB2
bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJs
ZSwgVW5saW5rZWRDb2RlQmxvY2sqIHVubGlua2VkQ29kZUJsb2NrLCBKU1Njb3BlKiBzY29wZSkK
KyAgICBHbG9iYWxDb2RlQmxvY2soVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgU2NyaXB0
RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmtlZENvZGVCbG9jayogdW5saW5rZWRD
b2RlQmxvY2ssIEpTU2NvcGUqIHNjb3BlKQogICAgICAgICA6IENvZGVCbG9jayh2bSwgc3RydWN0
dXJlLCBvd25lckV4ZWN1dGFibGUsIHVubGlua2VkQ29kZUJsb2NrLCBzY29wZSkKICAgICB7CiAg
ICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL01vZHVsZVByb2dyYW1D
b2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
TW9kdWxlUHJvZ3JhbUNvZGVCbG9jay5oCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvTW9kdWxlUHJvZ3JhbUNvZGVCbG9jay5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOCBDYW1l
cm9uIFp3YXJpY2ggPGN3endhcmljaEB1d2F0ZXJsb28uY2E+CiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBA
IC00NSwxOSArNDUsMTkgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gJnZtLmNvZGVCbG9ja1Nw
YWNlLnNwYWNlOwogICAgIH0KIAotICAgIHN0YXRpYyBNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKiBj
cmVhdGUoVk0qIHZtLCBDb3B5UGFyc2VkQmxvY2tUYWcsIE1vZHVsZVByb2dyYW1Db2RlQmxvY2sm
IG90aGVyKQorICAgIHN0YXRpYyBNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKiBjcmVhdGUoVk0mIHZt
LCBDb3B5UGFyc2VkQmxvY2tUYWcsIE1vZHVsZVByb2dyYW1Db2RlQmxvY2smIG90aGVyKQogICAg
IHsKLSAgICAgICAgTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayogaW5zdGFuY2UgPSBuZXcgKE5vdE51
bGwsIGFsbG9jYXRlQ2VsbDxNb2R1bGVQcm9ncmFtQ29kZUJsb2NrPih2bS0+aGVhcCkpCi0gICAg
ICAgICAgICBNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKHZtLCB2bS0+bW9kdWxlUHJvZ3JhbUNvZGVC
bG9ja1N0cnVjdHVyZS5nZXQoKSwgQ29weVBhcnNlZEJsb2NrLCBvdGhlcik7Ci0gICAgICAgIGlu
c3RhbmNlLT5maW5pc2hDcmVhdGlvbigqdm0sIENvcHlQYXJzZWRCbG9jaywgb3RoZXIpOworICAg
ICAgICBNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxs
b2NhdGVDZWxsPE1vZHVsZVByb2dyYW1Db2RlQmxvY2s+KHZtLmhlYXApKQorICAgICAgICAgICAg
TW9kdWxlUHJvZ3JhbUNvZGVCbG9jayh2bSwgdm0ubW9kdWxlUHJvZ3JhbUNvZGVCbG9ja1N0cnVj
dHVyZS5nZXQoKSwgQ29weVBhcnNlZEJsb2NrLCBvdGhlcik7CisgICAgICAgIGluc3RhbmNlLT5m
aW5pc2hDcmVhdGlvbih2bSwgQ29weVBhcnNlZEJsb2NrLCBvdGhlcik7CiAgICAgICAgIHJldHVy
biBpbnN0YW5jZTsKICAgICB9CiAKLSAgICBzdGF0aWMgTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayog
Y3JlYXRlKFZNKiB2bSwgTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwg
VW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9jaywgSlNTY29w
ZSogc2NvcGUpCisgICAgc3RhdGljIE1vZHVsZVByb2dyYW1Db2RlQmxvY2sqIGNyZWF0ZShWTSYg
dm0sIE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGlua2VkTW9k
dWxlUHJvZ3JhbUNvZGVCbG9jayogdW5saW5rZWRDb2RlQmxvY2ssIEpTU2NvcGUqIHNjb3BlKQog
ICAgIHsKLSAgICAgICAgTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayogaW5zdGFuY2UgPSBuZXcgKE5v
dE51bGwsIGFsbG9jYXRlQ2VsbDxNb2R1bGVQcm9ncmFtQ29kZUJsb2NrPih2bS0+aGVhcCkpCi0g
ICAgICAgICAgICBNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKHZtLCB2bS0+bW9kdWxlUHJvZ3JhbUNv
ZGVCbG9ja1N0cnVjdHVyZS5nZXQoKSwgb3duZXJFeGVjdXRhYmxlLCB1bmxpbmtlZENvZGVCbG9j
aywgc2NvcGUpOwotICAgICAgICBpZiAoIWluc3RhbmNlLT5maW5pc2hDcmVhdGlvbigqdm0sIG93
bmVyRXhlY3V0YWJsZSwgdW5saW5rZWRDb2RlQmxvY2ssIHNjb3BlKSkKKyAgICAgICAgTW9kdWxl
UHJvZ3JhbUNvZGVCbG9jayogaW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxN
b2R1bGVQcm9ncmFtQ29kZUJsb2NrPih2bS5oZWFwKSkKKyAgICAgICAgICAgIE1vZHVsZVByb2dy
YW1Db2RlQmxvY2sodm0sIHZtLm1vZHVsZVByb2dyYW1Db2RlQmxvY2tTdHJ1Y3R1cmUuZ2V0KCks
IG93bmVyRXhlY3V0YWJsZSwgdW5saW5rZWRDb2RlQmxvY2ssIHNjb3BlKTsKKyAgICAgICAgaWYg
KCFpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24odm0sIG93bmVyRXhlY3V0YWJsZSwgdW5saW5rZWRD
b2RlQmxvY2ssIHNjb3BlKSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICBy
ZXR1cm4gaW5zdGFuY2U7CiAgICAgfQpAQCAtNjgsMTIgKzY4LDEyIEBAIHB1YmxpYzoKICAgICB9
CiAKIHByaXZhdGU6Ci0gICAgTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayhWTSogdm0sIFN0cnVjdHVy
ZSogc3RydWN0dXJlLCBDb3B5UGFyc2VkQmxvY2tUYWcsIE1vZHVsZVByb2dyYW1Db2RlQmxvY2sm
IG90aGVyKQorICAgIE1vZHVsZVByb2dyYW1Db2RlQmxvY2soVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgQ29weVBhcnNlZEJsb2NrVGFnLCBNb2R1bGVQcm9ncmFtQ29kZUJsb2NrJiBvdGhl
cikKICAgICAgICAgOiBHbG9iYWxDb2RlQmxvY2sodm0sIHN0cnVjdHVyZSwgQ29weVBhcnNlZEJs
b2NrLCBvdGhlcikKICAgICB7CiAgICAgfQogCi0gICAgTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayhW
TSogdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZSogb3du
ZXJFeGVjdXRhYmxlLCBVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2sqIHVubGlua2VkQ29k
ZUJsb2NrLCBKU1Njb3BlKiBzY29wZSkKKyAgICBNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKFZNJiB2
bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlKiBvd25lckV4
ZWN1dGFibGUsIFVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayogdW5saW5rZWRDb2RlQmxv
Y2ssIEpTU2NvcGUqIHNjb3BlKQogICAgICAgICA6IEdsb2JhbENvZGVCbG9jayh2bSwgc3RydWN0
dXJlLCBvd25lckV4ZWN1dGFibGUsIHVubGlua2VkQ29kZUJsb2NrLCBzY29wZSkKICAgICB7CiAg
ICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdEFsbG9jYXRp
b25Qcm9maWxlSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9PYmplY3RBbGxvY2F0aW9uUHJvZmlsZUlubGluZXMuaAkocmV2aXNpb24gMjQ5MTI4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdEFsbG9jYXRpb25Qcm9m
aWxlSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTctMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE0Niw3ICsxNDYsNyBAQCBBTFdBWVNfSU5MSU5F
IHVuc2lnbmVkIE9iamVjdEFsbG9jYXRpb25QCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgc2l6
ZV90IGNvdW50ID0gMDsKLSAgICBQcm9wZXJ0eU5hbWVBcnJheSBwcm9wZXJ0eU5hbWVBcnJheSgm
dm0sIFByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3NBbmRTeW1ib2xzLCBQcml2YXRlU3ltYm9sTW9k
ZTo6SW5jbHVkZSk7CisgICAgUHJvcGVydHlOYW1lQXJyYXkgcHJvcGVydHlOYW1lQXJyYXkodm0s
IFByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3NBbmRTeW1ib2xzLCBQcml2YXRlU3ltYm9sTW9kZTo6
SW5jbHVkZSk7CiAgICAgcHJvdG90eXBlLT5zdHJ1Y3R1cmUodm0pLT5nZXRQcm9wZXJ0eU5hbWVz
RnJvbVN0cnVjdHVyZSh2bSwgcHJvcGVydHlOYW1lQXJyYXksIEVudW1lcmF0aW9uTW9kZSgpKTsK
ICAgICBQcm9wZXJ0eU5hbWVBcnJheURhdGE6OlByb3BlcnR5TmFtZVZlY3RvciYgcHJvcGVydHlO
YW1lVmVjdG9yID0gcHJvcGVydHlOYW1lQXJyYXkuZGF0YSgpLT5wcm9wZXJ0eU5hbWVWZWN0b3Io
KTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHByb3BlcnR5TmFtZVZlY3Rvci5zaXplKCk7
ICsraSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHlQcm90b0Fj
Y2Vzc0NoYWluLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvUG9seVByb3RvQWNjZXNzQ2hhaW4uY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seVByb3RvQWNjZXNzQ2hhaW4uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTQwLDcgKzQwLDcgQEAgc3RkOjp1bmlxdWVfcHRyPFBvbHlQcm90b0FjY2Vzc0NoYWlu
PiBQbwogc3RkOjp1bmlxdWVfcHRyPFBvbHlQcm90b0FjY2Vzc0NoYWluPiBQb2x5UHJvdG9BY2Nl
c3NDaGFpbjo6Y3JlYXRlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQ2VsbCogYmFz
ZSwgSlNPYmplY3QqIHRhcmdldCwgYm9vbCYgdXNlc1BvbHlQcm90bykKIHsKICAgICBKU0NlbGwq
IGN1cnJlbnQgPSBiYXNlOwotICAgIFZNJiB2bSA9ICpiYXNlLT52bSgpOworICAgIFZNJiB2bSA9
IGJhc2UtPnZtKCk7CiAKICAgICBib29sIGZvdW5kID0gZmFsc2U7CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qcm9ncmFtQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Byb2dyYW1Db2RlQmxvY2suaAkocmV2aXNp
b24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Byb2dyYW1Db2Rl
QmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDgtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDgtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5
cmlnaHQgKEMpIDIwMDggQ2FtZXJvbiBad2FyaWNoIDxjd3p3YXJpY2hAdXdhdGVybG9vLmNhPgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dApAQCAtNDUsMTkgKzQ1LDE5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0
dXJuICZ2bS5jb2RlQmxvY2tTcGFjZS5zcGFjZTsKICAgICB9CiAKLSAgICBzdGF0aWMgUHJvZ3Jh
bUNvZGVCbG9jayogY3JlYXRlKFZNKiB2bSwgQ29weVBhcnNlZEJsb2NrVGFnLCBQcm9ncmFtQ29k
ZUJsb2NrJiBvdGhlcikKKyAgICBzdGF0aWMgUHJvZ3JhbUNvZGVCbG9jayogY3JlYXRlKFZNJiB2
bSwgQ29weVBhcnNlZEJsb2NrVGFnLCBQcm9ncmFtQ29kZUJsb2NrJiBvdGhlcikKICAgICB7Ci0g
ICAgICAgIFByb2dyYW1Db2RlQmxvY2sqIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0
ZUNlbGw8UHJvZ3JhbUNvZGVCbG9jaz4odm0tPmhlYXApKQotICAgICAgICAgICAgUHJvZ3JhbUNv
ZGVCbG9jayh2bSwgdm0tPnByb2dyYW1Db2RlQmxvY2tTdHJ1Y3R1cmUuZ2V0KCksIENvcHlQYXJz
ZWRCbG9jaywgb3RoZXIpOwotICAgICAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24oKnZtLCBD
b3B5UGFyc2VkQmxvY2ssIG90aGVyKTsKKyAgICAgICAgUHJvZ3JhbUNvZGVCbG9jayogaW5zdGFu
Y2UgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxQcm9ncmFtQ29kZUJsb2NrPih2bS5oZWFw
KSkKKyAgICAgICAgICAgIFByb2dyYW1Db2RlQmxvY2sodm0sIHZtLnByb2dyYW1Db2RlQmxvY2tT
dHJ1Y3R1cmUuZ2V0KCksIENvcHlQYXJzZWRCbG9jaywgb3RoZXIpOworICAgICAgICBpbnN0YW5j
ZS0+ZmluaXNoQ3JlYXRpb24odm0sIENvcHlQYXJzZWRCbG9jaywgb3RoZXIpOwogICAgICAgICBy
ZXR1cm4gaW5zdGFuY2U7CiAgICAgfQogCi0gICAgc3RhdGljIFByb2dyYW1Db2RlQmxvY2sqIGNy
ZWF0ZShWTSogdm0sIFByb2dyYW1FeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGlua2Vk
UHJvZ3JhbUNvZGVCbG9jayogdW5saW5rZWRDb2RlQmxvY2ssIEpTU2NvcGUqIHNjb3BlKQorICAg
IHN0YXRpYyBQcm9ncmFtQ29kZUJsb2NrKiBjcmVhdGUoVk0mIHZtLCBQcm9ncmFtRXhlY3V0YWJs
ZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2sqIHVubGlua2VkQ29k
ZUJsb2NrLCBKU1Njb3BlKiBzY29wZSkKICAgICB7Ci0gICAgICAgIFByb2dyYW1Db2RlQmxvY2sq
IGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8UHJvZ3JhbUNvZGVCbG9jaz4o
dm0tPmhlYXApKQotICAgICAgICAgICAgUHJvZ3JhbUNvZGVCbG9jayh2bSwgdm0tPnByb2dyYW1D
b2RlQmxvY2tTdHJ1Y3R1cmUuZ2V0KCksIG93bmVyRXhlY3V0YWJsZSwgdW5saW5rZWRDb2RlQmxv
Y2ssIHNjb3BlKTsKLSAgICAgICAgaWYgKCFpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24oKnZtLCBv
d25lckV4ZWN1dGFibGUsIHVubGlua2VkQ29kZUJsb2NrLCBzY29wZSkpCisgICAgICAgIFByb2dy
YW1Db2RlQmxvY2sqIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8UHJvZ3Jh
bUNvZGVCbG9jaz4odm0uaGVhcCkpCisgICAgICAgICAgICBQcm9ncmFtQ29kZUJsb2NrKHZtLCB2
bS5wcm9ncmFtQ29kZUJsb2NrU3RydWN0dXJlLmdldCgpLCBvd25lckV4ZWN1dGFibGUsIHVubGlu
a2VkQ29kZUJsb2NrLCBzY29wZSk7CisgICAgICAgIGlmICghaW5zdGFuY2UtPmZpbmlzaENyZWF0
aW9uKHZtLCBvd25lckV4ZWN1dGFibGUsIHVubGlua2VkQ29kZUJsb2NrLCBzY29wZSkpCiAgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgcmV0dXJuIGluc3RhbmNlOwogICAgIH0K
QEAgLTY4LDEyICs2OCwxMiBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgotICAgIFByb2dy
YW1Db2RlQmxvY2soVk0qIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQ29weVBhcnNlZEJsb2Nr
VGFnLCBQcm9ncmFtQ29kZUJsb2NrJiBvdGhlcikKKyAgICBQcm9ncmFtQ29kZUJsb2NrKFZNJiB2
bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIENvcHlQYXJzZWRCbG9ja1RhZywgUHJvZ3JhbUNvZGVC
bG9jayYgb3RoZXIpCiAgICAgICAgIDogR2xvYmFsQ29kZUJsb2NrKHZtLCBzdHJ1Y3R1cmUsIENv
cHlQYXJzZWRCbG9jaywgb3RoZXIpCiAgICAgewogICAgIH0KIAotICAgIFByb2dyYW1Db2RlQmxv
Y2soVk0qIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvZ3JhbUV4ZWN1dGFibGUqIG93bmVy
RXhlY3V0YWJsZSwgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9jaywg
SlNTY29wZSogc2NvcGUpCisgICAgUHJvZ3JhbUNvZGVCbG9jayhWTSYgdm0sIFN0cnVjdHVyZSog
c3RydWN0dXJlLCBQcm9ncmFtRXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmtlZFBy
b2dyYW1Db2RlQmxvY2sqIHVubGlua2VkQ29kZUJsb2NrLCBKU1Njb3BlKiBzY29wZSkKICAgICAg
ICAgOiBHbG9iYWxDb2RlQmxvY2sodm0sIHN0cnVjdHVyZSwgb3duZXJFeGVjdXRhYmxlLCB1bmxp
bmtlZENvZGVCbG9jaywgc2NvcGUpCiAgICAgewogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Qcm9wZXJ0eUNvbmRpdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Byb3BlcnR5Q29uZGl0aW9uLmNwcAkocmV2aXNp
b24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Byb3BlcnR5Q29u
ZGl0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTUtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMyMCw4ICszMjAsNyBAQCBib29sIFByb3Bl
cnR5Q29uZGl0aW9uOjppc1dhdGNoYWJsZVdoZW5WCiAgICAgICAgICAgICBzZXQgPSBzdHJ1Y3R1
cmUtPnByb3BlcnR5UmVwbGFjZW1lbnRXYXRjaHBvaW50U2V0KG9mZnNldCk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgY2FzZSBFbnN1cmVXYXRjaGFiaWxpdHk6Ci0gICAgICAgICAgICBz
ZXQgPSBzdHJ1Y3R1cmUtPmVuc3VyZVByb3BlcnR5UmVwbGFjZW1lbnRXYXRjaHBvaW50U2V0KAot
ICAgICAgICAgICAgICAgICpzdHJ1Y3R1cmUtPnZtKCksIG9mZnNldCk7CisgICAgICAgICAgICBz
ZXQgPSBzdHJ1Y3R1cmUtPmVuc3VyZVByb3BlcnR5UmVwbGFjZW1lbnRXYXRjaHBvaW50U2V0KHN0
cnVjdHVyZS0+dm0oKSwgb2Zmc2V0KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAg
ICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0
dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRC
eUlkU3RhdHVzLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw3ICs0OSw3
IEBAIGJvb2wgUHV0QnlJZFN0YXR1czo6YXBwZW5kVmFyaWFudChjb25zdCAKIAogUHV0QnlJZFN0
YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRnJvbUxMSW50KENvZGVCbG9jayogcHJvZmlsZWRC
bG9jaywgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKIHsK
LSAgICBWTSYgdm0gPSAqcHJvZmlsZWRCbG9jay0+dm0oKTsKKyAgICBWTSYgdm0gPSBwcm9maWxl
ZEJsb2NrLT52bSgpOwogICAgIAogICAgIGF1dG8gaW5zdHJ1Y3Rpb24gPSBwcm9maWxlZEJsb2Nr
LT5pbnN0cnVjdGlvbnMoKS5hdChieXRlY29kZUluZGV4KTsKICAgICBhdXRvIGJ5dGVjb2RlID0g
aW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlJZD4oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAkocmV2aXNpb24gMjQ5
MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZv
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDgsIDIwMTQtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDgtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY0LDcgKzY0LDcgQEAgdm9pZCBTdHJ1Y3R1
cmVTdHViSW5mbzo6aW5pdEdldEJ5SWRTZWxmKAogICAgIGNhY2hlVHlwZSA9IENhY2hlVHlwZTo6
R2V0QnlJZFNlbGY7CiAgICAgCiAgICAgdS5ieUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLnNl
dCgKLSAgICAgICAgKmNvZGVCbG9jay0+dm0oKSwgY29kZUJsb2NrLCBiYXNlT2JqZWN0U3RydWN0
dXJlKTsKKyAgICAgICAgY29kZUJsb2NrLT52bSgpLCBjb2RlQmxvY2ssIGJhc2VPYmplY3RTdHJ1
Y3R1cmUpOwogICAgIHUuYnlJZFNlbGYub2Zmc2V0ID0gb2Zmc2V0OwogfQogCkBAIC04Myw3ICs4
Myw3IEBAIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OmluaXRQdXRCeUlkUmVwbGEKICAgICBjYWNo
ZVR5cGUgPSBDYWNoZVR5cGU6OlB1dEJ5SWRSZXBsYWNlOwogICAgIAogICAgIHUuYnlJZFNlbGYu
YmFzZU9iamVjdFN0cnVjdHVyZS5zZXQoCi0gICAgICAgICpjb2RlQmxvY2stPnZtKCksIGNvZGVC
bG9jaywgYmFzZU9iamVjdFN0cnVjdHVyZSk7CisgICAgICAgIGNvZGVCbG9jay0+dm0oKSwgY29k
ZUJsb2NrLCBiYXNlT2JqZWN0U3RydWN0dXJlKTsKICAgICB1LmJ5SWRTZWxmLm9mZnNldCA9IG9m
ZnNldDsKIH0KIApAQCAtOTIsNyArOTIsNyBAQCB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjppbml0
SW5CeUlkU2VsZihDCiAgICAgY2FjaGVUeXBlID0gQ2FjaGVUeXBlOjpJbkJ5SWRTZWxmOwogCiAg
ICAgdS5ieUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLnNldCgKLSAgICAgICAgKmNvZGVCbG9j
ay0+dm0oKSwgY29kZUJsb2NrLCBiYXNlT2JqZWN0U3RydWN0dXJlKTsKKyAgICAgICAgY29kZUJs
b2NrLT52bSgpLCBjb2RlQmxvY2ssIGJhc2VPYmplY3RTdHJ1Y3R1cmUpOwogICAgIHUuYnlJZFNl
bGYub2Zmc2V0ID0gb2Zmc2V0OwogfQogCkBAIC0xMzUsNyArMTM1LDcgQEAgdm9pZCBTdHJ1Y3R1
cmVTdHViSW5mbzo6YWJvdXRUb0RpZSgpCiBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IFN0cnVjdHVy
ZVN0dWJJbmZvOjphZGRBY2Nlc3NDYXNlKAogICAgIGNvbnN0IEdDU2FmZUNvbmN1cnJlbnRKU0xv
Y2tlciYgbG9ja2VyLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgY29uc3QgSWRlbnRpZmllciYgaWRl
bnQsIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBhY2Nlc3NDYXNlKQogewotICAgIFZNJiB2
bSA9ICpjb2RlQmxvY2stPnZtKCk7CisgICAgVk0mIHZtID0gY29kZUJsb2NrLT52bSgpOwogICAg
IEFTU0VSVCh2bS5oZWFwLmlzRGVmZXJyZWQoKSk7CiAgICAgQWNjZXNzR2VuZXJhdGlvblJlc3Vs
dCByZXN1bHQgPSAoWyZdICgpIC0+IEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgewogICAgICAgICBp
ZiAoU3RydWN0dXJlU3R1YkluZm9JbnRlcm5hbDo6dmVyYm9zZSkKQEAgLTI3Miw3ICsyNzIsNyBA
QCB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjpyZXNldChDb2RlQmxvY2sqCiAKIHZvaWQgU3RydWN0
dXJlU3R1YkluZm86OnZpc2l0V2Vha1JlZmVyZW5jZXMoQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7
Ci0gICAgVk0mIHZtID0gKmNvZGVCbG9jay0+dm0oKTsKKyAgICBWTSYgdm0gPSBjb2RlQmxvY2st
PnZtKCk7CiAgICAgCiAgICAgYnVmZmVyZWRTdHJ1Y3R1cmVzLmdlbmVyaWNGaWx0ZXIoCiAgICAg
ICAgIFsmXSAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpIC0+IGJvb2wgewpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCShy
ZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5r
ZWRDb2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCw4ICs1NCw4IEBAIG5hbWVzcGFj
ZSBKU0MgewogCiBjb25zdCBDbGFzc0luZm8gVW5saW5rZWRDb2RlQmxvY2s6OnNfaW5mbyA9IHsg
IlVubGlua2VkQ29kZUJsb2NrIiwgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01F
VEhPRF9UQUJMRShVbmxpbmtlZENvZGVCbG9jaykgfTsKIAotVW5saW5rZWRDb2RlQmxvY2s6OlVu
bGlua2VkQ29kZUJsb2NrKFZNKiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIENvZGVUeXBlIGNv
ZGVUeXBlLCBjb25zdCBFeGVjdXRhYmxlSW5mbyYgaW5mbywgT3B0aW9uU2V0PENvZGVHZW5lcmF0
aW9uTW9kZT4gY29kZUdlbmVyYXRpb25Nb2RlKQotICAgIDogQmFzZSgqdm0sIHN0cnVjdHVyZSkK
K1VubGlua2VkQ29kZUJsb2NrOjpVbmxpbmtlZENvZGVCbG9jayhWTSYgdm0sIFN0cnVjdHVyZSog
c3RydWN0dXJlLCBDb2RlVHlwZSBjb2RlVHlwZSwgY29uc3QgRXhlY3V0YWJsZUluZm8mIGluZm8s
IE9wdGlvblNldDxDb2RlR2VuZXJhdGlvbk1vZGU+IGNvZGVHZW5lcmF0aW9uTW9kZSkKKyAgICA6
IEJhc2Uodm0sIHN0cnVjdHVyZSkKICAgICAsIG1fdXNlc0V2YWwoaW5mby51c2VzRXZhbCgpKQog
ICAgICwgbV9pc1N0cmljdE1vZGUoaW5mby5pc1N0cmljdE1vZGUoKSkKICAgICAsIG1faXNDb25z
dHJ1Y3RvcihpbmZvLmlzQ29uc3RydWN0b3IoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCShyZXZpc2lvbiAyNDkxMjgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIt
MjAxNiBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTItMjAxOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTE2Myw3ICsxNjMsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBhZGRT
ZXRDb25zdGFudChJZGVudGlmaWVyU2V0JiBzZXQpCiAgICAgewogICAgICAgICBjcmVhdGVSYXJl
RGF0YUlmTmVjZXNzYXJ5KCk7Ci0gICAgICAgIFZNJiB2bSA9ICp0aGlzLT52bSgpOworICAgICAg
ICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgICAgICBhdXRvIGxvY2tlciA9IGxvY2tEdXJpbmdN
YXJraW5nKHZtLmhlYXAsIGNlbGxMb2NrKCkpOwogICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSBt
X2NvbnN0YW50UmVnaXN0ZXJzLnNpemUoKTsKICAgICAgICAgbV9jb25zdGFudFJlZ2lzdGVycy5h
cHBlbmQoV3JpdGVCYXJyaWVyPFVua25vd24+KCkpOwpAQCAtMTczLDcgKzE3Myw3IEBAIHB1Ymxp
YzoKIAogICAgIHVuc2lnbmVkIGFkZENvbnN0YW50KEpTVmFsdWUgdiwgU291cmNlQ29kZVJlcHJl
c2VudGF0aW9uIHNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbiA9IFNvdXJjZUNvZGVSZXByZXNlbnRh
dGlvbjo6T3RoZXIpCiAgICAgewotICAgICAgICBWTSYgdm0gPSAqdGhpcy0+dm0oKTsKKyAgICAg
ICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICAgICAgYXV0byBsb2NrZXIgPSBsb2NrRHVyaW5n
TWFya2luZyh2bS5oZWFwLCBjZWxsTG9jaygpKTsKICAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0g
bV9jb25zdGFudFJlZ2lzdGVycy5zaXplKCk7CiAgICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnMu
YXBwZW5kKFdyaXRlQmFycmllcjxVbmtub3duPigpKTsKQEAgLTE4Myw3ICsxODMsNyBAQCBwdWJs
aWM6CiAgICAgfQogICAgIHVuc2lnbmVkIGFkZENvbnN0YW50KExpbmtUaW1lQ29uc3RhbnQgdHlw
ZSkKICAgICB7Ci0gICAgICAgIFZNJiB2bSA9ICp0aGlzLT52bSgpOworICAgICAgICBWTSYgdm0g
PSB0aGlzLT52bSgpOwogICAgICAgICBhdXRvIGxvY2tlciA9IGxvY2tEdXJpbmdNYXJraW5nKHZt
LmhlYXAsIGNlbGxMb2NrKCkpOwogICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSBtX2NvbnN0YW50
UmVnaXN0ZXJzLnNpemUoKTsKICAgICAgICAgQVNTRVJUKHJlc3VsdCk7CkBAIC0yNDYsNyArMjQ2
LDcgQEAgcHVibGljOgogCiAgICAgdW5zaWduZWQgYWRkRnVuY3Rpb25EZWNsKFVubGlua2VkRnVu
Y3Rpb25FeGVjdXRhYmxlKiBuKQogICAgIHsKLSAgICAgICAgVk0mIHZtID0gKnRoaXMtPnZtKCk7
CisgICAgICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgICAgIGF1dG8gbG9ja2VyID0gbG9j
a0R1cmluZ01hcmtpbmcodm0uaGVhcCwgY2VsbExvY2soKSk7CiAgICAgICAgIHVuc2lnbmVkIHNp
emUgPSBtX2Z1bmN0aW9uRGVjbHMuc2l6ZSgpOwogICAgICAgICBtX2Z1bmN0aW9uRGVjbHMuYXBw
ZW5kKFdyaXRlQmFycmllcjxVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZT4oKSk7CkBAIC0yNTcs
NyArMjU3LDcgQEAgcHVibGljOgogICAgIHNpemVfdCBudW1iZXJPZkZ1bmN0aW9uRGVjbHMoKSB7
IHJldHVybiBtX2Z1bmN0aW9uRGVjbHMuc2l6ZSgpOyB9CiAgICAgdW5zaWduZWQgYWRkRnVuY3Rp
b25FeHByKFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBuKQogICAgIHsKLSAgICAgICAgVk0m
IHZtID0gKnRoaXMtPnZtKCk7CisgICAgICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgICAg
IGF1dG8gbG9ja2VyID0gbG9ja0R1cmluZ01hcmtpbmcodm0uaGVhcCwgY2VsbExvY2soKSk7CiAg
ICAgICAgIHVuc2lnbmVkIHNpemUgPSBtX2Z1bmN0aW9uRXhwcnMuc2l6ZSgpOwogICAgICAgICBt
X2Z1bmN0aW9uRXhwcnMuYXBwZW5kKFdyaXRlQmFycmllcjxVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0
YWJsZT4oKSk7CkBAIC0zNzcsNyArMzc3LDcgQEAgcHVibGljOgogCiAKIHByb3RlY3RlZDoKLSAg
ICBVbmxpbmtlZENvZGVCbG9jayhWTSosIFN0cnVjdHVyZSosIENvZGVUeXBlLCBjb25zdCBFeGVj
dXRhYmxlSW5mbyYsIE9wdGlvblNldDxDb2RlR2VuZXJhdGlvbk1vZGU+KTsKKyAgICBVbmxpbmtl
ZENvZGVCbG9jayhWTSYsIFN0cnVjdHVyZSosIENvZGVUeXBlLCBjb25zdCBFeGVjdXRhYmxlSW5m
byYsIE9wdGlvblNldDxDb2RlR2VuZXJhdGlvbk1vZGU+KTsKIAogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIENvZGVCbG9ja1R5cGU+CiAgICAgVW5saW5rZWRDb2RlQmxvY2soRGVjb2RlciYsIFN0cnVj
dHVyZSosIGNvbnN0IENhY2hlZENvZGVCbG9jazxDb2RlQmxvY2tUeXBlPiYpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRXZhbENvZGVCbG9jay5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEV2YWxDb2Rl
QmxvY2suaAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1VubGlua2VkRXZhbENvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE2IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBS
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE5IEFwcGxlIEluYy4gQWxsIFJpZ2h0
cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzYsMTAgKzM2
LDEwIEBAIHB1YmxpYzoKICAgICB0eXBlZGVmIFVubGlua2VkR2xvYmFsQ29kZUJsb2NrIEJhc2U7
CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0
dXJlRmxhZ3MgfCBTdHJ1Y3R1cmVJc0ltbW9ydGFsOwogCi0gICAgc3RhdGljIFVubGlua2VkRXZh
bENvZGVCbG9jayogY3JlYXRlKFZNKiB2bSwgY29uc3QgRXhlY3V0YWJsZUluZm8mIGluZm8sIE9w
dGlvblNldDxDb2RlR2VuZXJhdGlvbk1vZGU+IGNvZGVHZW5lcmF0aW9uTW9kZSkKKyAgICBzdGF0
aWMgVW5saW5rZWRFdmFsQ29kZUJsb2NrKiBjcmVhdGUoVk0mIHZtLCBjb25zdCBFeGVjdXRhYmxl
SW5mbyYgaW5mbywgT3B0aW9uU2V0PENvZGVHZW5lcmF0aW9uTW9kZT4gY29kZUdlbmVyYXRpb25N
b2RlKQogICAgIHsKLSAgICAgICAgVW5saW5rZWRFdmFsQ29kZUJsb2NrKiBpbnN0YW5jZSA9IG5l
dyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFVubGlua2VkRXZhbENvZGVCbG9jaz4odm0tPmhlYXAp
KSBVbmxpbmtlZEV2YWxDb2RlQmxvY2sodm0sIHZtLT51bmxpbmtlZEV2YWxDb2RlQmxvY2tTdHJ1
Y3R1cmUuZ2V0KCksIGluZm8sIGNvZGVHZW5lcmF0aW9uTW9kZSk7Ci0gICAgICAgIGluc3RhbmNl
LT5maW5pc2hDcmVhdGlvbigqdm0pOworICAgICAgICBVbmxpbmtlZEV2YWxDb2RlQmxvY2sqIGlu
c3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8VW5saW5rZWRFdmFsQ29kZUJsb2Nr
Pih2bS5oZWFwKSkgVW5saW5rZWRFdmFsQ29kZUJsb2NrKHZtLCB2bS51bmxpbmtlZEV2YWxDb2Rl
QmxvY2tTdHJ1Y3R1cmUuZ2V0KCksIGluZm8sIGNvZGVHZW5lcmF0aW9uTW9kZSk7CisgICAgICAg
IGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbih2bSk7CiAgICAgICAgIHJldHVybiBpbnN0YW5jZTsK
ICAgICB9CiAKQEAgLTYzLDcgKzYzLDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBmcmllbmQg
Q2FjaGVkRXZhbENvZGVCbG9jazsKIAotICAgIFVubGlua2VkRXZhbENvZGVCbG9jayhWTSogdm0s
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBFeGVjdXRhYmxlSW5mbyYgaW5mbywgT3B0aW9u
U2V0PENvZGVHZW5lcmF0aW9uTW9kZT4gY29kZUdlbmVyYXRpb25Nb2RlKQorICAgIFVubGlua2Vk
RXZhbENvZGVCbG9jayhWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBFeGVjdXRh
YmxlSW5mbyYgaW5mbywgT3B0aW9uU2V0PENvZGVHZW5lcmF0aW9uTW9kZT4gY29kZUdlbmVyYXRp
b25Nb2RlKQogICAgICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSwgRXZhbENvZGUsIGluZm8sIGNv
ZGVHZW5lcmF0aW9uTW9kZSkKICAgICB7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jay5o
CShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5s
aW5rZWRGdW5jdGlvbkNvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE2IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE5IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBS
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzYsMTAgKzM2LDEw
IEBAIHB1YmxpYzoKICAgICB0eXBlZGVmIFVubGlua2VkQ29kZUJsb2NrIEJhc2U7CiAgICAgc3Rh
dGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3Mg
fCBTdHJ1Y3R1cmVJc0ltbW9ydGFsOwogCi0gICAgc3RhdGljIFVubGlua2VkRnVuY3Rpb25Db2Rl
QmxvY2sqIGNyZWF0ZShWTSogdm0sIENvZGVUeXBlIGNvZGVUeXBlLCBjb25zdCBFeGVjdXRhYmxl
SW5mbyYgaW5mbywgT3B0aW9uU2V0PENvZGVHZW5lcmF0aW9uTW9kZT4gY29kZUdlbmVyYXRpb25N
b2RlKQorICAgIHN0YXRpYyBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKiBjcmVhdGUoVk0mIHZt
LCBDb2RlVHlwZSBjb2RlVHlwZSwgY29uc3QgRXhlY3V0YWJsZUluZm8mIGluZm8sIE9wdGlvblNl
dDxDb2RlR2VuZXJhdGlvbk1vZGU+IGNvZGVHZW5lcmF0aW9uTW9kZSkKICAgICB7Ci0gICAgICAg
IFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2sqIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxv
Y2F0ZUNlbGw8VW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jaz4odm0tPmhlYXApKSBVbmxpbmtlZEZ1
bmN0aW9uQ29kZUJsb2NrKHZtLCB2bS0+dW5saW5rZWRGdW5jdGlvbkNvZGVCbG9ja1N0cnVjdHVy
ZS5nZXQoKSwgY29kZVR5cGUsIGluZm8sIGNvZGVHZW5lcmF0aW9uTW9kZSk7Ci0gICAgICAgIGlu
c3RhbmNlLT5maW5pc2hDcmVhdGlvbigqdm0pOworICAgICAgICBVbmxpbmtlZEZ1bmN0aW9uQ29k
ZUJsb2NrKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFVubGlua2VkRnVu
Y3Rpb25Db2RlQmxvY2s+KHZtLmhlYXApKSBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKHZtLCB2
bS51bmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrU3RydWN0dXJlLmdldCgpLCBjb2RlVHlwZSwgaW5m
bywgY29kZUdlbmVyYXRpb25Nb2RlKTsKKyAgICAgICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9u
KHZtKTsKICAgICAgICAgcmV0dXJuIGluc3RhbmNlOwogICAgIH0KIApAQCAtNDgsNyArNDgsNyBA
QCBwdWJsaWM6CiBwcml2YXRlOgogICAgIGZyaWVuZCBDYWNoZWRGdW5jdGlvbkNvZGVCbG9jazsK
IAotICAgIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2soVk0qIHZtLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgQ29kZVR5cGUgY29kZVR5cGUsIGNvbnN0IEV4ZWN1dGFibGVJbmZvJiBpbmZvLCBPcHRp
b25TZXQ8Q29kZUdlbmVyYXRpb25Nb2RlPiBjb2RlR2VuZXJhdGlvbk1vZGUpCisgICAgVW5saW5r
ZWRGdW5jdGlvbkNvZGVCbG9jayhWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBDb2RlVHlw
ZSBjb2RlVHlwZSwgY29uc3QgRXhlY3V0YWJsZUluZm8mIGluZm8sIE9wdGlvblNldDxDb2RlR2Vu
ZXJhdGlvbk1vZGU+IGNvZGVHZW5lcmF0aW9uTW9kZSkKICAgICAgICAgOiBCYXNlKHZtLCBzdHJ1
Y3R1cmUsIGNvZGVUeXBlLCBpbmZvLCBjb2RlR2VuZXJhdGlvbk1vZGUpCiAgICAgewogICAgIH0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhl
Y3V0YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTItMjAxOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTItMjAxOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTU4LDcgKzU4LDcgQEAgc3RhdGljIFVubGlua2VkRnVuY3Rp
b25Db2RlQmxvY2sqIGdlbmVyYQogICAgIEpTUGFyc2VyU2NyaXB0TW9kZSBzY3JpcHRNb2RlID0g
ZXhlY3V0YWJsZS0+c2NyaXB0TW9kZSgpOwogICAgIEFTU0VSVChpc0Z1bmN0aW9uUGFyc2VNb2Rl
KGV4ZWN1dGFibGUtPnBhcnNlTW9kZSgpKSk7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEZ1bmN0aW9u
Tm9kZT4gZnVuY3Rpb24gPSBwYXJzZTxGdW5jdGlvbk5vZGU+KAotICAgICAgICAmdm0sIHNvdXJj
ZSwgZXhlY3V0YWJsZS0+bmFtZSgpLCBidWlsdGluTW9kZSwgc3RyaWN0TW9kZSwgc2NyaXB0TW9k
ZSwgZXhlY3V0YWJsZS0+cGFyc2VNb2RlKCksIGV4ZWN1dGFibGUtPnN1cGVyQmluZGluZygpLCBl
cnJvciwgbnVsbHB0cik7CisgICAgICAgIHZtLCBzb3VyY2UsIGV4ZWN1dGFibGUtPm5hbWUoKSwg
YnVpbHRpbk1vZGUsIHN0cmljdE1vZGUsIHNjcmlwdE1vZGUsIGV4ZWN1dGFibGUtPnBhcnNlTW9k
ZSgpLCBleGVjdXRhYmxlLT5zdXBlckJpbmRpbmcoKSwgZXJyb3IsIG51bGxwdHIpOwogCiAgICAg
aWYgKCFmdW5jdGlvbikgewogICAgICAgICBBU1NFUlQoZXJyb3IuaXNWYWxpZCgpKTsKQEAgLTcw
LDcgKzcwLDcgQEAgc3RhdGljIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2sqIGdlbmVyYQogCiAg
ICAgYm9vbCBpc0NsYXNzQ29udGV4dCA9IGV4ZWN1dGFibGUtPnN1cGVyQmluZGluZygpID09IFN1
cGVyQmluZGluZzo6TmVlZGVkOwogCi0gICAgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayogcmVz
dWx0ID0gVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jazo6Y3JlYXRlKCZ2bSwgRnVuY3Rpb25Db2Rl
LCBFeGVjdXRhYmxlSW5mbyhmdW5jdGlvbi0+dXNlc0V2YWwoKSwgZnVuY3Rpb24tPmlzU3RyaWN0
TW9kZSgpLCBraW5kID09IENvZGVGb3JDb25zdHJ1Y3QsIGZ1bmN0aW9uS2luZCA9PSBVbmxpbmtl
ZEJ1aWx0aW5GdW5jdGlvbiwgZXhlY3V0YWJsZS0+Y29uc3RydWN0b3JLaW5kKCksIHNjcmlwdE1v
ZGUsIGV4ZWN1dGFibGUtPnN1cGVyQmluZGluZygpLCBwYXJzZU1vZGUsIGV4ZWN1dGFibGUtPmRl
cml2ZWRDb250ZXh0VHlwZSgpLCBmYWxzZSwgaXNDbGFzc0NvbnRleHQsIEV2YWxDb250ZXh0VHlw
ZTo6RnVuY3Rpb25FdmFsQ29udGV4dCksIGNvZGVHZW5lcmF0aW9uTW9kZSk7CisgICAgVW5saW5r
ZWRGdW5jdGlvbkNvZGVCbG9jayogcmVzdWx0ID0gVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jazo6
Y3JlYXRlKHZtLCBGdW5jdGlvbkNvZGUsIEV4ZWN1dGFibGVJbmZvKGZ1bmN0aW9uLT51c2VzRXZh
bCgpLCBmdW5jdGlvbi0+aXNTdHJpY3RNb2RlKCksIGtpbmQgPT0gQ29kZUZvckNvbnN0cnVjdCwg
ZnVuY3Rpb25LaW5kID09IFVubGlua2VkQnVpbHRpbkZ1bmN0aW9uLCBleGVjdXRhYmxlLT5jb25z
dHJ1Y3RvcktpbmQoKSwgc2NyaXB0TW9kZSwgZXhlY3V0YWJsZS0+c3VwZXJCaW5kaW5nKCksIHBh
cnNlTW9kZSwgZXhlY3V0YWJsZS0+ZGVyaXZlZENvbnRleHRUeXBlKCksIGZhbHNlLCBpc0NsYXNz
Q29udGV4dCwgRXZhbENvbnRleHRUeXBlOjpGdW5jdGlvbkV2YWxDb250ZXh0KSwgY29kZUdlbmVy
YXRpb25Nb2RlKTsKIAogICAgIFZhcmlhYmxlRW52aXJvbm1lbnQgcGFyZW50U2NvcGVURFpWYXJp
YWJsZXMgPSBleGVjdXRhYmxlLT5wYXJlbnRTY29wZVREWlZhcmlhYmxlcygpOwogICAgIGVycm9y
ID0gQnl0ZWNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlKHZtLCBmdW5jdGlvbi5nZXQoKSwgc291cmNl
LCByZXN1bHQsIGNvZGVHZW5lcmF0aW9uTW9kZSwgJnBhcmVudFNjb3BlVERaVmFyaWFibGVzKTsK
QEAgLTgxLDggKzgxLDggQEAgc3RhdGljIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2sqIGdlbmVy
YQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLVVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpV
bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZShWTSogdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBj
b25zdCBTb3VyY2VDb2RlJiBwYXJlbnRTb3VyY2UsIEZ1bmN0aW9uTWV0YWRhdGFOb2RlKiBub2Rl
LCBVbmxpbmtlZEZ1bmN0aW9uS2luZCBraW5kLCBDb25zdHJ1Y3RBYmlsaXR5IGNvbnN0cnVjdEFi
aWxpdHksIEpTUGFyc2VyU2NyaXB0TW9kZSBzY3JpcHRNb2RlLCBPcHRpb25hbDxDb21wYWN0VmFy
aWFibGVNYXA6OkhhbmRsZT4gcGFyZW50U2NvcGVURFpWYXJpYWJsZXMsIERlcml2ZWRDb250ZXh0
VHlwZSBkZXJpdmVkQ29udGV4dFR5cGUsIGJvb2wgaXNCdWlsdGluRGVmYXVsdENsYXNzQ29uc3Ry
dWN0b3IpCi0gICAgOiBCYXNlKCp2bSwgc3RydWN0dXJlKQorVW5saW5rZWRGdW5jdGlvbkV4ZWN1
dGFibGU6OlVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIGNvbnN0IFNvdXJjZUNvZGUmIHBhcmVudFNvdXJjZSwgRnVuY3Rpb25NZXRhZGF0YU5v
ZGUqIG5vZGUsIFVubGlua2VkRnVuY3Rpb25LaW5kIGtpbmQsIENvbnN0cnVjdEFiaWxpdHkgY29u
c3RydWN0QWJpbGl0eSwgSlNQYXJzZXJTY3JpcHRNb2RlIHNjcmlwdE1vZGUsIE9wdGlvbmFsPENv
bXBhY3RWYXJpYWJsZU1hcDo6SGFuZGxlPiBwYXJlbnRTY29wZVREWlZhcmlhYmxlcywgRGVyaXZl
ZENvbnRleHRUeXBlIGRlcml2ZWRDb250ZXh0VHlwZSwgYm9vbCBpc0J1aWx0aW5EZWZhdWx0Q2xh
c3NDb25zdHJ1Y3RvcikKKyAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkKICAgICAsIG1fZmlyc3RM
aW5lT2Zmc2V0KG5vZGUtPmZpcnN0TGluZSgpIC0gcGFyZW50U291cmNlLmZpcnN0TGluZSgpLm9u
ZUJhc2VkSW50KCkpCiAgICAgLCBtX2lzSW5TdHJpY3RDb250ZXh0KG5vZGUtPmlzSW5TdHJpY3RD
b250ZXh0KCkpCiAgICAgLCBtX2xpbmVDb3VudChub2RlLT5sYXN0TGluZSgpIC0gbm9kZS0+Zmly
c3RMaW5lKCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRG
dW5jdGlvbkV4ZWN1dGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuaAkocmV2aXNpb24gMjQ5MTI4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRh
YmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDEyLTIwMTggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEyLTIwMTkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02OCwxMSArNjgsMTEgQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gJnZtLnVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlU3BhY2Uuc3BhY2U7CiAgICAg
fQogCi0gICAgc3RhdGljIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBjcmVhdGUoVk0qIHZt
LCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIEZ1bmN0aW9uTWV0YWRhdGFOb2RlKiBub2RlLCBV
bmxpbmtlZEZ1bmN0aW9uS2luZCB1bmxpbmtlZEZ1bmN0aW9uS2luZCwgQ29uc3RydWN0QWJpbGl0
eSBjb25zdHJ1Y3RBYmlsaXR5LCBKU1BhcnNlclNjcmlwdE1vZGUgc2NyaXB0TW9kZSwgT3B0aW9u
YWw8Q29tcGFjdFZhcmlhYmxlTWFwOjpIYW5kbGU+IHBhcmVudFNjb3BlVERaVmFyaWFibGVzLCBE
ZXJpdmVkQ29udGV4dFR5cGUgZGVyaXZlZENvbnRleHRUeXBlLCBib29sIGlzQnVpbHRpbkRlZmF1
bHRDbGFzc0NvbnN0cnVjdG9yID0gZmFsc2UpCisgICAgc3RhdGljIFVubGlua2VkRnVuY3Rpb25F
eGVjdXRhYmxlKiBjcmVhdGUoVk0mIHZtLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIEZ1bmN0
aW9uTWV0YWRhdGFOb2RlKiBub2RlLCBVbmxpbmtlZEZ1bmN0aW9uS2luZCB1bmxpbmtlZEZ1bmN0
aW9uS2luZCwgQ29uc3RydWN0QWJpbGl0eSBjb25zdHJ1Y3RBYmlsaXR5LCBKU1BhcnNlclNjcmlw
dE1vZGUgc2NyaXB0TW9kZSwgT3B0aW9uYWw8Q29tcGFjdFZhcmlhYmxlTWFwOjpIYW5kbGU+IHBh
cmVudFNjb3BlVERaVmFyaWFibGVzLCBEZXJpdmVkQ29udGV4dFR5cGUgZGVyaXZlZENvbnRleHRU
eXBlLCBib29sIGlzQnVpbHRpbkRlZmF1bHRDbGFzc0NvbnN0cnVjdG9yID0gZmFsc2UpCiAgICAg
ewotICAgICAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogaW5zdGFuY2UgPSBuZXcgKE5v
dE51bGwsIGFsbG9jYXRlQ2VsbDxVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZT4odm0tPmhlYXAp
KQotICAgICAgICAgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUodm0sIHZtLT51bmxpbmtl
ZEZ1bmN0aW9uRXhlY3V0YWJsZVN0cnVjdHVyZS5nZXQoKSwgc291cmNlLCBub2RlLCB1bmxpbmtl
ZEZ1bmN0aW9uS2luZCwgY29uc3RydWN0QWJpbGl0eSwgc2NyaXB0TW9kZSwgV1RGTW92ZShwYXJl
bnRTY29wZVREWlZhcmlhYmxlcyksIGRlcml2ZWRDb250ZXh0VHlwZSwgaXNCdWlsdGluRGVmYXVs
dENsYXNzQ29uc3RydWN0b3IpOwotICAgICAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24oKnZt
KTsKKyAgICAgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIGluc3RhbmNlID0gbmV3IChO
b3ROdWxsLCBhbGxvY2F0ZUNlbGw8VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU+KHZtLmhlYXAp
KQorICAgICAgICAgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUodm0sIHZtLnVubGlua2Vk
RnVuY3Rpb25FeGVjdXRhYmxlU3RydWN0dXJlLmdldCgpLCBzb3VyY2UsIG5vZGUsIHVubGlua2Vk
RnVuY3Rpb25LaW5kLCBjb25zdHJ1Y3RBYmlsaXR5LCBzY3JpcHRNb2RlLCBXVEZNb3ZlKHBhcmVu
dFNjb3BlVERaVmFyaWFibGVzKSwgZGVyaXZlZENvbnRleHRUeXBlLCBpc0J1aWx0aW5EZWZhdWx0
Q2xhc3NDb25zdHJ1Y3Rvcik7CisgICAgICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbih2bSk7
CiAgICAgICAgIHJldHVybiBpbnN0YW5jZTsKICAgICB9CiAKQEAgLTIwMCw3ICsyMDAsNyBAQCBw
dWJsaWM6CiAgICAgfTsKIAogcHJpdmF0ZToKLSAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJs
ZShWTSosIFN0cnVjdHVyZSosIGNvbnN0IFNvdXJjZUNvZGUmLCBGdW5jdGlvbk1ldGFkYXRhTm9k
ZSosIFVubGlua2VkRnVuY3Rpb25LaW5kLCBDb25zdHJ1Y3RBYmlsaXR5LCBKU1BhcnNlclNjcmlw
dE1vZGUsIE9wdGlvbmFsPENvbXBhY3RWYXJpYWJsZU1hcDo6SGFuZGxlPiwgIEpTQzo6RGVyaXZl
ZENvbnRleHRUeXBlLCBib29sIGlzQnVpbHRpbkRlZmF1bHRDbGFzc0NvbnN0cnVjdG9yKTsKKyAg
ICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZShWTSYsIFN0cnVjdHVyZSosIGNvbnN0IFNvdXJj
ZUNvZGUmLCBGdW5jdGlvbk1ldGFkYXRhTm9kZSosIFVubGlua2VkRnVuY3Rpb25LaW5kLCBDb25z
dHJ1Y3RBYmlsaXR5LCBKU1BhcnNlclNjcmlwdE1vZGUsIE9wdGlvbmFsPENvbXBhY3RWYXJpYWJs
ZU1hcDo6SGFuZGxlPiwgIEpTQzo6RGVyaXZlZENvbnRleHRUeXBlLCBib29sIGlzQnVpbHRpbkRl
ZmF1bHRDbGFzc0NvbnN0cnVjdG9yKTsKICAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZShE
ZWNvZGVyJiwgY29uc3QgQ2FjaGVkRnVuY3Rpb25FeGVjdXRhYmxlJik7CiAKICAgICB2b2lkIGRl
Y29kZUNhY2hlZENvZGVCbG9ja3MoVk0mKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9VbmxpbmtlZEdsb2JhbENvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEdsb2JhbENvZGVCbG9jay5oCShyZXZpc2lv
biAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRHbG9i
YWxDb2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTItMjAxNiBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTItMjAxOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM0LDcgKzM0LDcgQEAgcHVibGljOgog
ICAgIHR5cGVkZWYgVW5saW5rZWRDb2RlQmxvY2sgQmFzZTsKIAogcHJvdGVjdGVkOgotICAgIFVu
bGlua2VkR2xvYmFsQ29kZUJsb2NrKFZNKiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIENvZGVU
eXBlIGNvZGVUeXBlLCBjb25zdCBFeGVjdXRhYmxlSW5mbyYgaW5mbywgT3B0aW9uU2V0PENvZGVH
ZW5lcmF0aW9uTW9kZT4gY29kZUdlbmVyYXRpb25Nb2RlKQorICAgIFVubGlua2VkR2xvYmFsQ29k
ZUJsb2NrKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIENvZGVUeXBlIGNvZGVUeXBlLCBj
b25zdCBFeGVjdXRhYmxlSW5mbyYgaW5mbywgT3B0aW9uU2V0PENvZGVHZW5lcmF0aW9uTW9kZT4g
Y29kZUdlbmVyYXRpb25Nb2RlKQogICAgICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSwgY29kZVR5
cGUsIGluZm8sIGNvZGVHZW5lcmF0aW9uTW9kZSkKICAgICB7CiAgICAgfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jay5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZE1v
ZHVsZVByb2dyYW1Db2RlQmxvY2suaAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jay5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE3
IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0y
MDE5IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMzcsMTAgKzM3LDEwIEBAIHB1YmxpYzoKICAgICB0eXBlZGVmIFVubGlu
a2VkR2xvYmFsQ29kZUJsb2NrIEJhc2U7CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVj
dHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBTdHJ1Y3R1cmVJc0ltbW9ydGFsOwog
Ci0gICAgc3RhdGljIFVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayogY3JlYXRlKFZNKiB2
bSwgY29uc3QgRXhlY3V0YWJsZUluZm8mIGluZm8sIE9wdGlvblNldDxDb2RlR2VuZXJhdGlvbk1v
ZGU+IGNvZGVHZW5lcmF0aW9uTW9kZSkKKyAgICBzdGF0aWMgVW5saW5rZWRNb2R1bGVQcm9ncmFt
Q29kZUJsb2NrKiBjcmVhdGUoVk0mIHZtLCBjb25zdCBFeGVjdXRhYmxlSW5mbyYgaW5mbywgT3B0
aW9uU2V0PENvZGVHZW5lcmF0aW9uTW9kZT4gY29kZUdlbmVyYXRpb25Nb2RlKQogICAgIHsKLSAg
ICAgICAgVW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKiBpbnN0YW5jZSA9IG5ldyAoTm90
TnVsbCwgYWxsb2NhdGVDZWxsPFVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jaz4odm0tPmhl
YXApKSBVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2sodm0sIHZtLT51bmxpbmtlZE1vZHVs
ZVByb2dyYW1Db2RlQmxvY2tTdHJ1Y3R1cmUuZ2V0KCksIGluZm8sIGNvZGVHZW5lcmF0aW9uTW9k
ZSk7Ci0gICAgICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbigqdm0pOworICAgICAgICBVbmxp
bmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2sqIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxv
Y2F0ZUNlbGw8VW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrPih2bS5oZWFwKSkgVW5saW5r
ZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKHZtLCB2bS51bmxpbmtlZE1vZHVsZVByb2dyYW1Db2Rl
QmxvY2tTdHJ1Y3R1cmUuZ2V0KCksIGluZm8sIGNvZGVHZW5lcmF0aW9uTW9kZSk7CisgICAgICAg
IGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbih2bSk7CiAgICAgICAgIHJldHVybiBpbnN0YW5jZTsK
ICAgICB9CiAKQEAgLTc5LDcgKzc5LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBmcmllbmQg
Q2FjaGVkTW9kdWxlQ29kZUJsb2NrOwogCi0gICAgVW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJs
b2NrKFZNKiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IEV4ZWN1dGFibGVJbmZvJiBp
bmZvLCBPcHRpb25TZXQ8Q29kZUdlbmVyYXRpb25Nb2RlPiBjb2RlR2VuZXJhdGlvbk1vZGUpCisg
ICAgVW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIGNvbnN0IEV4ZWN1dGFibGVJbmZvJiBpbmZvLCBPcHRpb25TZXQ8Q29kZUdlbmVyYXRp
b25Nb2RlPiBjb2RlR2VuZXJhdGlvbk1vZGUpCiAgICAgICAgIDogQmFzZSh2bSwgc3RydWN0dXJl
LCBNb2R1bGVDb2RlLCBpbmZvLCBjb2RlR2VuZXJhdGlvbk1vZGUpCiAgICAgewogICAgIH0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZFByb2dyYW1Db2RlQmxv
Y2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5r
ZWRQcm9ncmFtQ29kZUJsb2NrLmgJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZFByb2dyYW1Db2RlQmxvY2suaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNyBBcHBsZSBJ
bmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOSBBcHBs
ZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTM2LDEwICszNiwxMCBAQCBwdWJsaWM6CiAgICAgdHlwZWRlZiBVbmxpbmtlZEdsb2Jh
bENvZGVCbG9jayBCYXNlOwogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFn
cyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgU3RydWN0dXJlSXNJbW1vcnRhbDsKIAotICAgIHN0
YXRpYyBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2sqIGNyZWF0ZShWTSogdm0sIGNvbnN0IEV4ZWN1
dGFibGVJbmZvJiBpbmZvLCBPcHRpb25TZXQ8Q29kZUdlbmVyYXRpb25Nb2RlPiBjb2RlR2VuZXJh
dGlvbk1vZGUpCisgICAgc3RhdGljIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jayogY3JlYXRlKFZN
JiB2bSwgY29uc3QgRXhlY3V0YWJsZUluZm8mIGluZm8sIE9wdGlvblNldDxDb2RlR2VuZXJhdGlv
bk1vZGU+IGNvZGVHZW5lcmF0aW9uTW9kZSkKICAgICB7Ci0gICAgICAgIFVubGlua2VkUHJvZ3Jh
bUNvZGVCbG9jayogaW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxVbmxpbmtl
ZFByb2dyYW1Db2RlQmxvY2s+KHZtLT5oZWFwKSkgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrKHZt
LCB2bS0+dW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrU3RydWN0dXJlLmdldCgpLCBpbmZvLCBjb2Rl
R2VuZXJhdGlvbk1vZGUpOwotICAgICAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24oKnZtKTsK
KyAgICAgICAgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVs
bCwgYWxsb2NhdGVDZWxsPFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jaz4odm0uaGVhcCkpIFVubGlu
a2VkUHJvZ3JhbUNvZGVCbG9jayh2bSwgdm0udW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrU3RydWN0
dXJlLmdldCgpLCBpbmZvLCBjb2RlR2VuZXJhdGlvbk1vZGUpOworICAgICAgICBpbnN0YW5jZS0+
ZmluaXNoQ3JlYXRpb24odm0pOwogICAgICAgICByZXR1cm4gaW5zdGFuY2U7CiAgICAgfQogCkBA
IC01NCw3ICs1NCw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgZnJpZW5kIENhY2hlZFByb2dy
YW1Db2RlQmxvY2s7CiAKLSAgICBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2soVk0qIHZtLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgRXhlY3V0YWJsZUluZm8mIGluZm8sIE9wdGlvblNldDxD
b2RlR2VuZXJhdGlvbk1vZGU+IGNvZGVHZW5lcmF0aW9uTW9kZSkKKyAgICBVbmxpbmtlZFByb2dy
YW1Db2RlQmxvY2soVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgRXhlY3V0YWJs
ZUluZm8mIGluZm8sIE9wdGlvblNldDxDb2RlR2VuZXJhdGlvbk1vZGU+IGNvZGVHZW5lcmF0aW9u
TW9kZSkKICAgICAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUsIEdsb2JhbENvZGUsIGluZm8sIGNv
ZGVHZW5lcmF0aW9uTW9kZSkKICAgICB7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHJl
dmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0
ZWNvZGVHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMzYsNyArMzM2LDcgQEAgQnl0
ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJgogICAgICwgbV9jb2RlQmxvY2so
dm0sIGNvZGVCbG9jaykKICAgICAsIG1fdGhpc1JlZ2lzdGVyKENhbGxGcmFtZTo6dGhpc0FyZ3Vt
ZW50T2Zmc2V0KCkpCiAgICAgLCBtX2NvZGVUeXBlKEdsb2JhbENvZGUpCi0gICAgLCBtX3ZtKCZ2
bSkKKyAgICAsIG1fdm0odm0pCiAgICAgLCBtX25lZWRzVG9VcGRhdGVBcnJvd0Z1bmN0aW9uQ29u
dGV4dChwcm9ncmFtTm9kZS0+dXNlc0Fycm93RnVuY3Rpb24oKSB8fCBwcm9ncmFtTm9kZS0+dXNl
c0V2YWwoKSkKIHsKICAgICBBU1NFUlRfVU5VU0VEKHBhcmVudFNjb3BlVERaVmFyaWFibGVzLCAh
cGFyZW50U2NvcGVURFpWYXJpYWJsZXMtPnNpemUoKSk7CkBAIC0zODEsNyArMzgxLDcgQEAgQnl0
ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJgogICAgICwgbV9zY29wZU5vZGUo
ZnVuY3Rpb25Ob2RlKQogICAgICwgbV9jb2RlQmxvY2sodm0sIGNvZGVCbG9jaykKICAgICAsIG1f
Y29kZVR5cGUoRnVuY3Rpb25Db2RlKQotICAgICwgbV92bSgmdm0pCisgICAgLCBtX3ZtKHZtKQog
ICAgICwgbV9pc0J1aWx0aW5GdW5jdGlvbihjb2RlQmxvY2stPmlzQnVpbHRpbkZ1bmN0aW9uKCkp
CiAgICAgLCBtX3VzZXNOb25TdHJpY3RFdmFsKGNvZGVCbG9jay0+dXNlc0V2YWwoKSAmJiAhY29k
ZUJsb2NrLT5pc1N0cmljdE1vZGUoKSkKICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGJlIGFibGUg
dG8gaGF2ZSB0YWlsIGNhbGwgZWxpbWluYXRpb24gd2l0aCB0aGUgcHJvZmlsZXIKQEAgLTM5OCw3
ICszOTgsNyBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoVk0mCiAKICAg
ICBhbGxvY2F0ZUNhbGxlZVNhdmVTcGFjZSgpOwogICAgIAotICAgIFN5bWJvbFRhYmxlKiBmdW5j
dGlvblN5bWJvbFRhYmxlID0gU3ltYm9sVGFibGU6OmNyZWF0ZSgqbV92bSk7CisgICAgU3ltYm9s
VGFibGUqIGZ1bmN0aW9uU3ltYm9sVGFibGUgPSBTeW1ib2xUYWJsZTo6Y3JlYXRlKG1fdm0pOwog
ICAgIGZ1bmN0aW9uU3ltYm9sVGFibGUtPnNldFVzZXNOb25TdHJpY3RFdmFsKG1fdXNlc05vblN0
cmljdEV2YWwpOwogICAgIGludCBzeW1ib2xUYWJsZUNvbnN0YW50SW5kZXggPSAwOwogCkBAIC01
NTAsNyArNTUwLDcgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJgog
ICAgICAgICAgICAgICAgICAgICAvLyBub3RpZnlXcml0ZSgpLCBzaW5jZSB0aGF0IHdvdWxkIGJl
IGN1bWJlcnNvbWUuIEFsc28sIHdhdGNoaW5nIGZvcm1hbAogICAgICAgICAgICAgICAgICAgICAv
LyBwYXJhbWV0ZXJzIHdoZW4gImFyZ3VtZW50cyIgaXMgaW4gcGxheSBpcyB1bmxpa2VseSB0byBi
ZSBzdXBlciBwcm9maXRhYmxlLgogICAgICAgICAgICAgICAgICAgICAvLyBTbywgd2UganVzdCBk
aXNhYmxlIGl0LgotICAgICAgICAgICAgICAgICAgICBlbnRyeS5kaXNhYmxlV2F0Y2hpbmcoKm1f
dm0pOworICAgICAgICAgICAgICAgICAgICBlbnRyeS5kaXNhYmxlV2F0Y2hpbmcobV92bSk7CiAg
ICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uU3ltYm9sVGFibGUtPnNldChOb0xvY2tpbmdOZWNl
c3NhcnksIG5hbWUsIGVudHJ5KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
T3BQdXRUb1Njb3BlOjplbWl0KHRoaXMsIG1fbGV4aWNhbEVudmlyb25tZW50UmVnaXN0ZXIsIFVJ
TlRfTUFYLCB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxICsgaSksIEdldFB1dEluZm8oVGhy
b3dJZk5vdEZvdW5kLCBMb2NhbENsb3N1cmVWYXIsIEluaXRpYWxpemF0aW9uTW9kZTo6Tm90SW5p
dGlhbGl6YXRpb24pLCBTeW1ib2xUYWJsZU9yU2NvcGVEZXB0aDo6c3ltYm9sVGFibGUoVmlydHVh
bFJlZ2lzdGVyIHsgc3ltYm9sVGFibGVDb25zdGFudEluZGV4IH0pLCBvZmZzZXQub2Zmc2V0KCkp
OwpAQCAtODA4LDcgKzgwOCw3IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRv
cihWTSYKICAgICAgICAgZW1pdE91dE9mTGluZUNhdGNoSGFuZGxlcih0aHJvd25WYWx1ZS5nZXQo
KSwgbnVsbHB0ciwgdHJ5Rm9ybWFsUGFyYW1ldGVyc0RhdGEpOwogCiAgICAgICAgIC8vIHJldHVy
biBwcm9taXNlQ2FwYWJpbGl0eS5AcmVqZWN0KHRocm93blZhbHVlKQotICAgICAgICBSZWZQdHI8
UmVnaXN0ZXJJRD4gcmVqZWN0ID0gZW1pdEdldEJ5SWQobmV3VGVtcG9yYXJ5KCksIHByb21pc2VD
YXBhYmlsaXR5UmVnaXN0ZXIoKSwgbV92bS0+cHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCku
cmVqZWN0UHJpdmF0ZU5hbWUoKSk7CisgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZWplY3Qg
PSBlbWl0R2V0QnlJZChuZXdUZW1wb3JhcnkoKSwgcHJvbWlzZUNhcGFiaWxpdHlSZWdpc3Rlcigp
LCBtX3ZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLnJlamVjdFByaXZhdGVOYW1lKCkp
OwogCiAgICAgICAgIENhbGxBcmd1bWVudHMgYXJncygqdGhpcywgbnVsbHB0ciwgMSk7CiAgICAg
ICAgIGVtaXRMb2FkKGFyZ3MudGhpc1JlZ2lzdGVyKCksIGpzVW5kZWZpbmVkKCkpOwpAQCAtODE3
LDcgKzgxNyw3IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihWTSYKICAg
ICAgICAgSlNUZXh0UG9zaXRpb24gZGl2b3QoZnVuY3Rpb25Ob2RlLT5maXJzdExpbmUoKSwgZnVu
Y3Rpb25Ob2RlLT5zdGFydE9mZnNldCgpLCBmdW5jdGlvbk5vZGUtPmxpbmVTdGFydE9mZnNldCgp
KTsKIAogICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmVzdWx0ID0gZW1pdENhbGwobmV3VGVt
cG9yYXJ5KCksIHJlamVjdC5nZXQoKSwgTm9FeHBlY3RlZEZ1bmN0aW9uLCBhcmdzLCBkaXZvdCwg
ZGl2b3QsIGRpdm90LCBEZWJ1Z2dhYmxlQ2FsbDo6Tm8pOwotICAgICAgICBlbWl0UmV0dXJuKGVt
aXRHZXRCeUlkKG5ld1RlbXBvcmFyeSgpLCBwcm9taXNlQ2FwYWJpbGl0eVJlZ2lzdGVyKCksIG1f
dm0tPnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLnByb21pc2VQcml2YXRlTmFtZSgpKSk7
CisgICAgICAgIGVtaXRSZXR1cm4oZW1pdEdldEJ5SWQobmV3VGVtcG9yYXJ5KCksIHByb21pc2VD
YXBhYmlsaXR5UmVnaXN0ZXIoKSwgbV92bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5w
cm9taXNlUHJpdmF0ZU5hbWUoKSkpOwogCiAgICAgICAgIGVtaXRMYWJlbChkaWROb3RUaHJvdy5n
ZXQoKSk7CiAgICAgfQpAQCAtODM2LDcgKzgzNiw3IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRl
Y29kZUdlbmVyYXRvcihWTSYKICAgICAvLyBTZXQgdXAgdGhlIGxleGljYWwgZW52aXJvbm1lbnQg
c2NvcGUgYXMgdGhlIGdlbmVyYXRvciBmcmFtZS4gV2Ugc3RvcmUgdGhlIHNhdmVkIGFuZCByZXN1
bWVkIGdlbmVyYXRvciByZWdpc3RlcnMgaW50byB0aGlzIHNjb3BlIHdpdGggdGhlIHN5bWJvbCBr
ZXlzLgogICAgIC8vIFNpbmNlIHRoZXkgYXJlIHN5bWJvbCBrZXllZCwgdGhlc2UgdmFyaWFibGVz
IGNhbm5vdCBiZSByZWFjaGVkIGZyb20gdGhlIHVzdWFsIGNvZGUuCiAgICAgaWYgKGlzR2VuZXJh
dG9yT3JBc3luY0Z1bmN0aW9uQm9keVBhcnNlTW9kZShwYXJzZU1vZGUpKSB7Ci0gICAgICAgIG1f
Z2VuZXJhdG9yRnJhbWVTeW1ib2xUYWJsZS5zZXQoKm1fdm0sIGZ1bmN0aW9uU3ltYm9sVGFibGUp
OworICAgICAgICBtX2dlbmVyYXRvckZyYW1lU3ltYm9sVGFibGUuc2V0KG1fdm0sIGZ1bmN0aW9u
U3ltYm9sVGFibGUpOwogICAgICAgICBtX2dlbmVyYXRvckZyYW1lU3ltYm9sVGFibGVJbmRleCA9
IHN5bWJvbFRhYmxlQ29uc3RhbnRJbmRleDsKICAgICAgICAgaWYgKG1fbGV4aWNhbEVudmlyb25t
ZW50UmVnaXN0ZXIpCiAgICAgICAgICAgICBtb3ZlKGdlbmVyYXRvckZyYW1lUmVnaXN0ZXIoKSwg
bV9sZXhpY2FsRW52aXJvbm1lbnRSZWdpc3Rlcik7CkBAIC04NjAsNyArODYwLDcgQEAgQnl0ZWNv
ZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJgogICAgICwgbV9jb2RlQmxvY2sodm0s
IGNvZGVCbG9jaykKICAgICAsIG1fdGhpc1JlZ2lzdGVyKENhbGxGcmFtZTo6dGhpc0FyZ3VtZW50
T2Zmc2V0KCkpCiAgICAgLCBtX2NvZGVUeXBlKEV2YWxDb2RlKQotICAgICwgbV92bSgmdm0pCisg
ICAgLCBtX3ZtKHZtKQogICAgICwgbV91c2VzTm9uU3RyaWN0RXZhbChjb2RlQmxvY2stPnVzZXNF
dmFsKCkgJiYgIWNvZGVCbG9jay0+aXNTdHJpY3RNb2RlKCkpCiAgICAgLCBtX25lZWRzVG9VcGRh
dGVBcnJvd0Z1bmN0aW9uQ29udGV4dChldmFsTm9kZS0+dXNlc0Fycm93RnVuY3Rpb24oKSB8fCBl
dmFsTm9kZS0+dXNlc0V2YWwoKSkKICAgICAsIG1fZGVyaXZlZENvbnRleHRUeXBlKGNvZGVCbG9j
ay0+ZGVyaXZlZENvbnRleHRUeXBlKCkpCkBAIC05MjMsNyArOTIzLDcgQEAgQnl0ZWNvZGVHZW5l
cmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJgogICAgICwgbV9jb2RlQmxvY2sodm0sIGNvZGVC
bG9jaykKICAgICAsIG1fdGhpc1JlZ2lzdGVyKENhbGxGcmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0
KCkpCiAgICAgLCBtX2NvZGVUeXBlKE1vZHVsZUNvZGUpCi0gICAgLCBtX3ZtKCZ2bSkKKyAgICAs
IG1fdm0odm0pCiAgICAgLCBtX3VzZXNOb25TdHJpY3RFdmFsKGZhbHNlKQogICAgICwgbV9uZWVk
c1RvVXBkYXRlQXJyb3dGdW5jdGlvbkNvbnRleHQobW9kdWxlUHJvZ3JhbU5vZGUtPnVzZXNBcnJv
d0Z1bmN0aW9uKCkgfHwgbW9kdWxlUHJvZ3JhbU5vZGUtPnVzZXNFdmFsKCkpCiB7CkBAIC05MzQs
NyArOTM0LDcgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJgogCiAg
ICAgYWxsb2NhdGVDYWxsZWVTYXZlU3BhY2UoKTsKIAotICAgIFN5bWJvbFRhYmxlKiBtb2R1bGVF
bnZpcm9ubWVudFN5bWJvbFRhYmxlID0gU3ltYm9sVGFibGU6OmNyZWF0ZSgqbV92bSk7CisgICAg
U3ltYm9sVGFibGUqIG1vZHVsZUVudmlyb25tZW50U3ltYm9sVGFibGUgPSBTeW1ib2xUYWJsZTo6
Y3JlYXRlKG1fdm0pOwogICAgIG1vZHVsZUVudmlyb25tZW50U3ltYm9sVGFibGUtPnNldFVzZXNO
b25TdHJpY3RFdmFsKG1fdXNlc05vblN0cmljdEV2YWwpOwogICAgIG1vZHVsZUVudmlyb25tZW50
U3ltYm9sVGFibGUtPnNldFNjb3BlVHlwZShTeW1ib2xUYWJsZTo6U2NvcGVUeXBlOjpMZXhpY2Fs
U2NvcGUpOwogCkBAIC05NzIsNyArOTcyLDcgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2Rl
R2VuZXJhdG9yKFZNJgogCiAgICAgLy8gTm93IGRlY2xhcmUgYWxsIHZhcmlhYmxlcy4KIAotICAg
IGNyZWF0ZVZhcmlhYmxlKG1fdm0tPnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLm1ldGFQ
cml2YXRlTmFtZSgpLCBWYXJLaW5kOjpTY29wZSwgbW9kdWxlRW52aXJvbm1lbnRTeW1ib2xUYWJs
ZSwgVmVyaWZ5RXhpc3RpbmcpOworICAgIGNyZWF0ZVZhcmlhYmxlKG1fdm0ucHJvcGVydHlOYW1l
cy0+YnVpbHRpbk5hbWVzKCkubWV0YVByaXZhdGVOYW1lKCksIFZhcktpbmQ6OlNjb3BlLCBtb2R1
bGVFbnZpcm9ubWVudFN5bWJvbFRhYmxlLCBWZXJpZnlFeGlzdGluZyk7CiAKICAgICBmb3IgKGF1
dG8mIGVudHJ5IDogbW9kdWxlUHJvZ3JhbU5vZGUtPnZhckRlY2xhcmF0aW9ucygpKSB7CiAgICAg
ICAgIEFTU0VSVCghZW50cnkudmFsdWUuaXNMZXQoKSAmJiAhZW50cnkudmFsdWUuaXNDb25zdCgp
KTsKQEAgLTk5NCw3ICs5OTQsNyBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0
b3IoVk0mCiAgICAgaWYgKHNob3VsZEVtaXRUeXBlUHJvZmlsZXJIb29rcygpKQogICAgICAgICBj
b25zdGFudFN5bWJvbFRhYmxlID0gYWRkQ29uc3RhbnRWYWx1ZShtb2R1bGVFbnZpcm9ubWVudFN5
bWJvbFRhYmxlKTsKICAgICBlbHNlCi0gICAgICAgIGNvbnN0YW50U3ltYm9sVGFibGUgPSBhZGRD
b25zdGFudFZhbHVlKG1vZHVsZUVudmlyb25tZW50U3ltYm9sVGFibGUtPmNsb25lU2NvcGVQYXJ0
KCptX3ZtKSk7CisgICAgICAgIGNvbnN0YW50U3ltYm9sVGFibGUgPSBhZGRDb25zdGFudFZhbHVl
KG1vZHVsZUVudmlyb25tZW50U3ltYm9sVGFibGUtPmNsb25lU2NvcGVQYXJ0KG1fdm0pKTsKIAog
ICAgIHB1c2hURFpWYXJpYWJsZXMobGV4aWNhbFZhcmlhYmxlcywgVERaQ2hlY2tPcHRpbWl6YXRp
b246Ok9wdGltaXplLCBURFpSZXF1aXJlbWVudDo6VW5kZXJURFopOwogICAgIGJvb2wgaXNXaXRo
U2NvcGUgPSBmYWxzZTsKQEAgLTIwMTcsNyArMjAxNyw3IEBAIHZvaWQgQnl0ZWNvZGVHZW5lcmF0
b3I6OnB1c2hMZXhpY2FsU2NvcGUKICAgICBpZiAoc2hvdWxkRW1pdERlYnVnSG9va3MoKSkKICAg
ICAgICAgZW52aXJvbm1lbnQubWFya0FsbFZhcmlhYmxlc0FzQ2FwdHVyZWQoKTsKIAotICAgIFN5
bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSA9IFN5bWJvbFRhYmxlOjpjcmVhdGUoKm1fdm0pOworICAg
IFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSA9IFN5bWJvbFRhYmxlOjpjcmVhdGUobV92bSk7CiAg
ICAgc3dpdGNoIChzY29wZVR5cGUpIHsKICAgICBjYXNlIFNjb3BlVHlwZTo6Q2F0Y2hTY29wZToK
ICAgICAgICAgc3ltYm9sVGFibGUtPnNldFNjb3BlVHlwZShTeW1ib2xUYWJsZTo6U2NvcGVUeXBl
OjpDYXRjaFNjb3BlKTsKQEAgLTIwNTQsNyArMjA1NCw3IEBAIHZvaWQgQnl0ZWNvZGVHZW5lcmF0
b3I6OnB1c2hMZXhpY2FsU2NvcGUKICAgICAgICAgICAgIG5ld1Njb3BlID0gYWRkVmFyKCk7CiAg
ICAgICAgIGlmICghY29uc3RhbnRTeW1ib2xUYWJsZSkgewogICAgICAgICAgICAgQVNTRVJUKCFz
aG91bGRFbWl0VHlwZVByb2ZpbGVySG9va3MoKSk7Ci0gICAgICAgICAgICBjb25zdGFudFN5bWJv
bFRhYmxlID0gYWRkQ29uc3RhbnRWYWx1ZShzeW1ib2xUYWJsZS0+Y2xvbmVTY29wZVBhcnQoKm1f
dm0pKTsKKyAgICAgICAgICAgIGNvbnN0YW50U3ltYm9sVGFibGUgPSBhZGRDb25zdGFudFZhbHVl
KHN5bWJvbFRhYmxlLT5jbG9uZVNjb3BlUGFydChtX3ZtKSk7CiAgICAgICAgICAgICBzeW1ib2xU
YWJsZUNvbnN0YW50SW5kZXggPSBjb25zdGFudFN5bWJvbFRhYmxlLT5pbmRleCgpOwogICAgICAg
ICB9CiAgICAgICAgIGlmIChjb25zdGFudFN5bWJvbFRhYmxlUmVzdWx0KQpAQCAtMjY0NSw3ICsy
NjQ1LDcgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXREaXJlYwogCiAgICAg
bV9zdGF0aWNQcm9wZXJ0eUFuYWx5emVyLnB1dEJ5SWQoYmFzZSwgcHJvcGVydHlJbmRleCk7CiAK
LSAgICBQdXRCeUlkRmxhZ3MgdHlwZSA9IChwdXRUeXBlID09IFByb3BlcnR5Tm9kZTo6S25vd25E
aXJlY3QgfHwgcHJvcGVydHkgIT0gbV92bS0+cHJvcGVydHlOYW1lcy0+dW5kZXJzY29yZVByb3Rv
KSA/IFB1dEJ5SWRJc0RpcmVjdCA6IFB1dEJ5SWROb25lOworICAgIFB1dEJ5SWRGbGFncyB0eXBl
ID0gKHB1dFR5cGUgPT0gUHJvcGVydHlOb2RlOjpLbm93bkRpcmVjdCB8fCBwcm9wZXJ0eSAhPSBt
X3ZtLnByb3BlcnR5TmFtZXMtPnVuZGVyc2NvcmVQcm90bykgPyBQdXRCeUlkSXNEaXJlY3QgOiBQ
dXRCeUlkTm9uZTsKICAgICBPcFB1dEJ5SWQ6OmVtaXQodGhpcywgYmFzZSwgcHJvcGVydHlJbmRl
eCwgdmFsdWUsIHR5cGUpOwogICAgIG1fY29kZUJsb2NrLT5hZGRQcm9wZXJ0eUFjY2Vzc0luc3Ry
dWN0aW9uKG1fbGFzdEluc3RydWN0aW9uLm9mZnNldCgpKTsKICAgICByZXR1cm4gdmFsdWU7CkBA
IC0yOTI2LDcgKzI5MjYsNyBAQCBPcHRpb25hbDxDb21wYWN0VmFyaWFibGVNYXA6OkhhbmRsZT4g
Qnl0CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBtX2NhY2hlZFZhcmlhYmxlc1VuZGVyVERaID0g
bV92bS0+bV9jb21wYWN0VmFyaWFibGVNYXAtPmdldChlbnZpcm9ubWVudCk7CisgICAgbV9jYWNo
ZWRWYXJpYWJsZXNVbmRlclREWiA9IG1fdm0ubV9jb21wYWN0VmFyaWFibGVNYXAtPmdldChlbnZp
cm9ubWVudCk7CiAgICAgbV9oYXNDYWNoZWRWYXJpYWJsZXNVbmRlclREWiA9ICFlbnZpcm9ubWVu
dC5pc0VtcHR5KCk7CiAgICAgaWYgKCFtX2hhc0NhY2hlZFZhcmlhYmxlc1VuZGVyVERaKQogICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwpAQCAtMjk1Niw5ICsyOTU2LDkgQEAgUmVnaXN0ZXJJ
RCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXROZXdPYgogSlNWYWx1ZSBCeXRlY29kZUdlbmVyYXRv
cjo6YWRkQmlnSW50Q29uc3RhbnQoY29uc3QgSWRlbnRpZmllciYgaWRlbnRpZmllciwgdWludDhf
dCByYWRpeCwgYm9vbCBzaWduKQogewogICAgIHJldHVybiBtX2JpZ0ludE1hcC5lbnN1cmUoQmln
SW50TWFwRW50cnkoaWRlbnRpZmllci5pbXBsKCksIHJhZGl4LCBzaWduKSwgWyZdIHsKLSAgICAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUoKnZtKCkpOworICAgICAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSgpKTsKICAgICAgICAgYXV0byBwYXJzZUlu
dFNpZ24gPSBzaWduID8gSlNCaWdJbnQ6OlBhcnNlSW50U2lnbjo6U2lnbmVkIDogSlNCaWdJbnQ6
OlBhcnNlSW50U2lnbjo6VW5zaWduZWQ7Ci0gICAgICAgIEpTQmlnSW50KiBiaWdJbnRJbk1hcCA9
IEpTQmlnSW50OjpwYXJzZUludChudWxscHRyLCAqdm0oKSwgaWRlbnRpZmllci5zdHJpbmcoKSwg
cmFkaXgsIEpTQmlnSW50OjpFcnJvclBhcnNlTW9kZTo6VGhyb3dFeGNlcHRpb25zLCBwYXJzZUlu
dFNpZ24pOworICAgICAgICBKU0JpZ0ludCogYmlnSW50SW5NYXAgPSBKU0JpZ0ludDo6cGFyc2VJ
bnQobnVsbHB0ciwgdm0oKSwgaWRlbnRpZmllci5zdHJpbmcoKSwgcmFkaXgsIEpTQmlnSW50OjpF
cnJvclBhcnNlTW9kZTo6VGhyb3dFeGNlcHRpb25zLCBwYXJzZUludFNpZ24pOwogICAgICAgICAv
LyBGSVhNRTogW0VTTmV4dF0gRW5hYmxlcyBhIHdheSB0byB0aHJvdyBhbiBlcnJvciBvbiBCeXRl
Q29kZUdlbmVyYXRvciBzdGVwCiAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xODAxMzkKICAgICAgICAgc2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsK
QEAgLTI5ODMsNyArMjk4Myw3IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjphZGRU
ZW1wbGEKIHsKICAgICBhdXRvIHJlc3VsdCA9IG1fdGVtcGxhdGVPYmplY3REZXNjcmlwdG9yU2V0
LmFkZChXVEZNb3ZlKGRlc2NyaXB0b3IpKTsKICAgICBKU1RlbXBsYXRlT2JqZWN0RGVzY3JpcHRv
ciogZGVzY3JpcHRvclZhbHVlID0gbV90ZW1wbGF0ZURlc2NyaXB0b3JNYXAuZW5zdXJlKGVuZE9m
ZnNldCwgWyZdIHsKLSAgICAgICAgcmV0dXJuIEpTVGVtcGxhdGVPYmplY3REZXNjcmlwdG9yOjpj
cmVhdGUoKnZtKCksIHJlc3VsdC5pdGVyYXRvci0+Y29weVJlZigpLCBlbmRPZmZzZXQpOworICAg
ICAgICByZXR1cm4gSlNUZW1wbGF0ZU9iamVjdERlc2NyaXB0b3I6OmNyZWF0ZSh2bSgpLCByZXN1
bHQuaXRlcmF0b3ItPmNvcHlSZWYoKSwgZW5kT2Zmc2V0KTsKICAgICB9KS5pdGVyYXRvci0+dmFs
dWU7CiAgICAgaW50IGluZGV4ID0gYWRkQ29uc3RhbnRJbmRleCgpOwogICAgIG1fY29kZUJsb2Nr
LT5hZGRDb25zdGFudChkZXNjcmlwdG9yVmFsdWUpOwpAQCAtMzEwOSw3ICszMTA5LDcgQEAgUmVn
aXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXROZXdNZQogUmVnaXN0ZXJJRCogQnl0ZWNv
ZGVHZW5lcmF0b3I6OmVtaXROZXdEZWZhdWx0Q29uc3RydWN0b3IoUmVnaXN0ZXJJRCogZHN0LCBD
b25zdHJ1Y3RvcktpbmQgY29uc3RydWN0b3JLaW5kLCBjb25zdCBJZGVudGlmaWVyJiBuYW1lLAog
ICAgIGNvbnN0IElkZW50aWZpZXImIGVjbWFOYW1lLCBjb25zdCBTb3VyY2VDb2RlJiBjbGFzc1Nv
dXJjZSkKIHsKLSAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IG1f
dm0tPmJ1aWx0aW5FeGVjdXRhYmxlcygpLT5jcmVhdGVEZWZhdWx0Q29uc3RydWN0b3IoY29uc3Ry
dWN0b3JLaW5kLCBuYW1lKTsKKyAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0
YWJsZSA9IG1fdm0uYnVpbHRpbkV4ZWN1dGFibGVzKCktPmNyZWF0ZURlZmF1bHRDb25zdHJ1Y3Rv
cihjb25zdHJ1Y3RvcktpbmQsIG5hbWUpOwogICAgIGV4ZWN1dGFibGUtPnNldEludmFsaWRUeXBl
UHJvZmlsaW5nT2Zmc2V0cygpOwogICAgIGV4ZWN1dGFibGUtPnNldEVjbWFOYW1lKGVjbWFOYW1l
KTsKICAgICBleGVjdXRhYmxlLT5zZXRDbGFzc1NvdXJjZShjbGFzc1NvdXJjZSk7CkBAIC0zMTQ0
LDcgKzMxNDQsNyBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0U2V0RnVuY3Rpb25OCiAg
ICAgICAgIENsYXNzRXhwck5vZGUqIGNsYXNzRXhwck5vZGUgPSBzdGF0aWNfY2FzdDxDbGFzc0V4
cHJOb2RlKj4odmFsdWVOb2RlKTsKICAgICAgICAgaWYgKCFjbGFzc0V4cHJOb2RlLT5lY21hTmFt
ZSgpLmlzTnVsbCgpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAoY2xhc3NFeHBy
Tm9kZS0+aGFzU3RhdGljUHJvcGVydHkobV92bS0+cHJvcGVydHlOYW1lcy0+bmFtZSkpCisgICAg
ICAgIGlmIChjbGFzc0V4cHJOb2RlLT5oYXNTdGF0aWNQcm9wZXJ0eShtX3ZtLnByb3BlcnR5TmFt
ZXMtPm5hbWUpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0gZWxzZQogICAgICAgICByZXR1
cm47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2Vu
ZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxl
ci9CeXRlY29kZUdlbmVyYXRvci5oCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM3OSw5ICszNzksOSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB+Qnl0ZWNvZGVH
ZW5lcmF0b3IoKTsKICAgICAgICAgCi0gICAgICAgIFZNKiB2bSgpIGNvbnN0IHsgcmV0dXJuIG1f
dm07IH0KKyAgICAgICAgVk0mIHZtKCkgY29uc3QgeyByZXR1cm4gbV92bTsgfQogICAgICAgICBQ
YXJzZXJBcmVuYSYgcGFyc2VyQXJlbmEoKSBjb25zdCB7IHJldHVybiBtX3Njb3BlTm9kZS0+cGFy
c2VyQXJlbmEoKTsgfQotICAgICAgICBjb25zdCBDb21tb25JZGVudGlmaWVycyYgcHJvcGVydHlO
YW1lcygpIGNvbnN0IHsgcmV0dXJuICptX3ZtLT5wcm9wZXJ0eU5hbWVzOyB9CisgICAgICAgIGNv
bnN0IENvbW1vbklkZW50aWZpZXJzJiBwcm9wZXJ0eU5hbWVzKCkgY29uc3QgeyByZXR1cm4gKm1f
dm0ucHJvcGVydHlOYW1lczsgfQogCiAgICAgICAgIGJvb2wgaXNDb25zdHJ1Y3RvcigpIGNvbnN0
IHsgcmV0dXJuIG1fY29kZUJsb2NrLT5pc0NvbnN0cnVjdG9yKCk7IH0KICAgICAgICAgRGVyaXZl
ZENvbnRleHRUeXBlIGRlcml2ZWRDb250ZXh0VHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGVyaXZl
ZENvbnRleHRUeXBlOyB9CkBAIC01MDAsNyArNTAwLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIHsKICAgICAgICAgICAgIC8vIE5vZGU6OmVtaXRDb2RlIGFzc3VtZXMgdGhhdCBkc3QsIGlm
IHByb3ZpZGVkLCBpcyBlaXRoZXIgYSBsb2NhbCBvciBhIHJlZmVyZW5jZWQgdGVtcG9yYXJ5Lgog
ICAgICAgICAgICAgQVNTRVJUKCFkc3QgfHwgZHN0ID09IGlnbm9yZWRSZXN1bHQoKSB8fCAhZHN0
LT5pc1RlbXBvcmFyeSgpIHx8IGRzdC0+cmVmQ291bnQoKSk7Ci0gICAgICAgICAgICBpZiAoVU5M
SUtFTFkoIW1fdm0tPmlzU2FmZVRvUmVjdXJzZSgpKSkgeworICAgICAgICAgICAgaWYgKFVOTElL
RUxZKCFtX3ZtLmlzU2FmZVRvUmVjdXJzZSgpKSkgewogICAgICAgICAgICAgICAgIGVtaXRUaHJv
d0V4cHJlc3Npb25Ub29EZWVwRXhjZXB0aW9uKCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAgICAgfQpAQCAtNTM2LDcgKzUzNiw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICB7CiAgICAgICAgICAgICAvLyBOb2RlOjplbWl0Q29kZSBhc3N1bWVzIHRoYXQgZHN0LCBpZiBw
cm92aWRlZCwgaXMgZWl0aGVyIGEgbG9jYWwgb3IgYSByZWZlcmVuY2VkIHRlbXBvcmFyeS4KICAg
ICAgICAgICAgIEFTU0VSVCghZHN0IHx8IGRzdCA9PSBpZ25vcmVkUmVzdWx0KCkgfHwgIWRzdC0+
aXNUZW1wb3JhcnkoKSB8fCBkc3QtPnJlZkNvdW50KCkpOwotICAgICAgICAgICAgaWYgKFVOTElL
RUxZKCFtX3ZtLT5pc1NhZmVUb1JlY3Vyc2UoKSkpCisgICAgICAgICAgICBpZiAoVU5MSUtFTFko
IW1fdm0uaXNTYWZlVG9SZWN1cnNlKCkpKQogICAgICAgICAgICAgICAgIHJldHVybiBlbWl0VGhy
b3dFeHByZXNzaW9uVG9vRGVlcEV4Y2VwdGlvbigpOwogICAgICAgICAgICAgaWYgKFVOTElLRUxZ
KG4tPm5lZWRzRGVidWdIb29rKCkpKQogICAgICAgICAgICAgICAgIGVtaXREZWJ1Z0hvb2sobik7
CkBAIC01NTYsNyArNTU2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFJlZ2lzdGVySUQq
IGVtaXREZWZpbmVDbGFzc0VsZW1lbnRzKFByb3BlcnR5TGlzdE5vZGUqIG4sIFJlZ2lzdGVySUQq
IGNvbnN0cnVjdG9yLCBSZWdpc3RlcklEKiBwcm90b3R5cGUpCiAgICAgICAgIHsKICAgICAgICAg
ICAgIEFTU0VSVChjb25zdHJ1Y3Rvci0+cmVmQ291bnQoKSAmJiBwcm90b3R5cGUtPnJlZkNvdW50
KCkpOwotICAgICAgICAgICAgaWYgKFVOTElLRUxZKCFtX3ZtLT5pc1NhZmVUb1JlY3Vyc2UoKSkp
CisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoIW1fdm0uaXNTYWZlVG9SZWN1cnNlKCkpKQogICAg
ICAgICAgICAgICAgIHJldHVybiBlbWl0VGhyb3dFeHByZXNzaW9uVG9vRGVlcEV4Y2VwdGlvbigp
OwogICAgICAgICAgICAgaWYgKFVOTElLRUxZKG4tPm5lZWRzRGVidWdIb29rKCkpKQogICAgICAg
ICAgICAgICAgIGVtaXREZWJ1Z0hvb2sobik7CkBAIC01NzksNyArNTc5LDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAKICAgICAgICAgdm9pZCBlbWl0Tm9kZUluQ29uZGl0aW9uQ29udGV4dChFeHByZXNz
aW9uTm9kZSogbiwgTGFiZWwmIHRydWVUYXJnZXQsIExhYmVsJiBmYWxzZVRhcmdldCwgRmFsbFRo
cm91Z2hNb2RlIGZhbGxUaHJvdWdoTW9kZSkKICAgICAgICAgewotICAgICAgICAgICAgaWYgKFVO
TElLRUxZKCFtX3ZtLT5pc1NhZmVUb1JlY3Vyc2UoKSkpIHsKKyAgICAgICAgICAgIGlmIChVTkxJ
S0VMWSghbV92bS5pc1NhZmVUb1JlY3Vyc2UoKSkpIHsKICAgICAgICAgICAgICAgICBlbWl0VGhy
b3dFeHByZXNzaW9uVG9vRGVlcEV4Y2VwdGlvbigpOwogICAgICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgICAgIH0KQEAgLTEyOTAsNyArMTI5MCw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAg
ICAgICAgIFN0YXRpY1Byb3BlcnR5QW5hbHl6ZXIgbV9zdGF0aWNQcm9wZXJ0eUFuYWx5emVyOwog
Ci0gICAgICAgIFZNKiBtX3ZtOworICAgICAgICBWTSYgbV92bTsKIAogICAgICAgICBPcGNvZGVJ
RCBtX2xhc3RPcGNvZGVJRCA9IG9wX2VuZDsKICAgICAgICAgSW5zdHJ1Y3Rpb25TdHJlYW06Ok11
dGFibGVSZWYgbV9sYXN0SW5zdHJ1Y3Rpb24geyBtX3dyaXRlci5yZWYoKSB9OwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNw
cAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxl
ci9Ob2Rlc0NvZGVnZW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDYsNyArMTQ2LDcgQEAgUmVn
aXN0ZXJJRCogUmVnRXhwTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dAogCiAgICAgYXV0byBmbGFncyA9
IFlhcnI6OnBhcnNlRmxhZ3MobV9mbGFncy5zdHJpbmcoKSk7CiAgICAgQVNTRVJUKGZsYWdzLmhh
c1ZhbHVlKCkpOwotICAgIFJlZ0V4cCogcmVnRXhwID0gUmVnRXhwOjpjcmVhdGUoKmdlbmVyYXRv
ci52bSgpLCBtX3BhdHRlcm4uc3RyaW5nKCksIGZsYWdzLnZhbHVlKCkpOworICAgIFJlZ0V4cCog
cmVnRXhwID0gUmVnRXhwOjpjcmVhdGUoZ2VuZXJhdG9yLnZtKCksIG1fcGF0dGVybi5zdHJpbmco
KSwgZmxhZ3MudmFsdWUoKSk7CiAgICAgaWYgKHJlZ0V4cC0+aXNWYWxpZCgpKQogICAgICAgICBy
ZXR1cm4gZ2VuZXJhdG9yLmVtaXROZXdSZWdFeHAoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24o
ZHN0KSwgcmVnRXhwKTsKIApAQCAtNDEwLDEyICs0MTAsMTIgQEAgUmVnaXN0ZXJJRCogQXJyYXlO
b2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZQogICAgIGF1dG8gbmV3QXJyYXkgPSBbJl0gKFJlZ2lzdGVy
SUQqIGRzdCwgRWxlbWVudE5vZGUqIGVsZW1lbnRzLCB1bnNpZ25lZCBsZW5ndGgsIGJvb2wgaGFk
VmFyaWFibGVFeHByZXNzaW9uKSB7CiAgICAgICAgIGlmIChsZW5ndGggJiYgIWhhZFZhcmlhYmxl
RXhwcmVzc2lvbikgewogICAgICAgICAgICAgcmVjb21tZW5kZWRJbmRleGluZ1R5cGUgfD0gQ29w
eU9uV3JpdGU7Ci0gICAgICAgICAgICBBU1NFUlQoZ2VuZXJhdG9yLnZtKCktPmhlYXAuaXNEZWZl
cnJlZCgpKTsgLy8gV2UgcnVuIGJ5dGVjb2RlIGdlbmVyYXRvciB1bmRlciBhIERlZmVyR0MuIElm
IHdlIHN0b3BwZWQgZG9pbmcgdGhhdCwgd2UnZCBuZWVkIHRvIHB1dCBhIERlZmVyR0MgaGVyZSBh
cyB3ZSBmaWxsZWQgaW4gdGhlc2Ugc2xvdHMuCi0gICAgICAgICAgICBhdXRvKiBhcnJheSA9IEpT
SW1tdXRhYmxlQnV0dGVyZmx5OjpjcmVhdGUoKmdlbmVyYXRvci52bSgpLCByZWNvbW1lbmRlZElu
ZGV4aW5nVHlwZSwgbGVuZ3RoKTsKKyAgICAgICAgICAgIEFTU0VSVChnZW5lcmF0b3Iudm0oKS5o
ZWFwLmlzRGVmZXJyZWQoKSk7IC8vIFdlIHJ1biBieXRlY29kZSBnZW5lcmF0b3IgdW5kZXIgYSBE
ZWZlckdDLiBJZiB3ZSBzdG9wcGVkIGRvaW5nIHRoYXQsIHdlJ2QgbmVlZCB0byBwdXQgYSBEZWZl
ckdDIGhlcmUgYXMgd2UgZmlsbGVkIGluIHRoZXNlIHNsb3RzLgorICAgICAgICAgICAgYXV0byog
YXJyYXkgPSBKU0ltbXV0YWJsZUJ1dHRlcmZseTo6Y3JlYXRlKGdlbmVyYXRvci52bSgpLCByZWNv
bW1lbmRlZEluZGV4aW5nVHlwZSwgbGVuZ3RoKTsKICAgICAgICAgICAgIHVuc2lnbmVkIGluZGV4
ID0gMDsKICAgICAgICAgICAgIGZvciAoRWxlbWVudE5vZGUqIGVsZW1lbnQgPSBlbGVtZW50czsg
aW5kZXggPCBsZW5ndGg7IGVsZW1lbnQgPSBlbGVtZW50LT5uZXh0KCkpIHsKICAgICAgICAgICAg
ICAgICBBU1NFUlQoZWxlbWVudC0+dmFsdWUoKS0+aXNDb25zdGFudCgpKTsKLSAgICAgICAgICAg
ICAgICBhcnJheS0+c2V0SW5kZXgoKmdlbmVyYXRvci52bSgpLCBpbmRleCsrLCBzdGF0aWNfY2Fz
dDxDb25zdGFudE5vZGUqPihlbGVtZW50LT52YWx1ZSgpKS0+anNWYWx1ZShnZW5lcmF0b3IpKTsK
KyAgICAgICAgICAgICAgICBhcnJheS0+c2V0SW5kZXgoZ2VuZXJhdG9yLnZtKCksIGluZGV4Kyss
IHN0YXRpY19jYXN0PENvbnN0YW50Tm9kZSo+KGVsZW1lbnQtPnZhbHVlKCkpLT5qc1ZhbHVlKGdl
bmVyYXRvcikpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIGdlbmVyYXRvci5l
bWl0TmV3QXJyYXlCdWZmZXIoZHN0LCBhcnJheSwgcmVjb21tZW5kZWRJbmRleGluZ1R5cGUpOwog
ICAgICAgICB9CkBAIC05MzksNyArOTM5LDcgQEAgUmVnaXN0ZXJJRCogRnVuY3Rpb25DYWxsVmFs
dWVOb2RlOjplbWl0QgogCiBSZWdpc3RlcklEKiBGdW5jdGlvbkNhbGxSZXNvbHZlTm9kZTo6ZW1p
dEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkK
IHsKLSAgICBpZiAoVU5MSUtFTFkobV9pZGVudCA9PSBnZW5lcmF0b3Iudm0oKS0+cHJvcGVydHlO
YW1lcy0+YnVpbHRpbk5hbWVzKCkuYXNzZXJ0UHJpdmF0ZU5hbWUoKSkpIHsKKyAgICBpZiAoVU5M
SUtFTFkobV9pZGVudCA9PSBnZW5lcmF0b3Iudm0oKS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFt
ZXMoKS5hc3NlcnRQcml2YXRlTmFtZSgpKSkgewogICAgICAgICBpZiAoQVNTRVJUX0RJU0FCTEVE
KQogICAgICAgICAgICAgcmV0dXJuIGdlbmVyYXRvci5tb3ZlKGRzdCwgZ2VuZXJhdG9yLmVtaXRM
b2FkKG51bGxwdHIsIGpzVW5kZWZpbmVkKCkpKTsKICAgICB9CkBAIC0xMDA0LDcgKzEwMDQsNyBA
QCBSZWdpc3RlcklEKiBCeXRlY29kZUludHJpbnNpY05vZGU6OmVtaXRfCiAgICAgUmVmUHRyPFJl
Z2lzdGVySUQ+IGJhc2UgPSBnZW5lcmF0b3IuZW1pdE5vZGUobm9kZSk7CiAgICAgbm9kZSA9IG5v
ZGUtPm1fbmV4dDsKICAgICBBU1NFUlQobm9kZS0+bV9leHByLT5pc1N0cmluZygpKTsKLSAgICBT
eW1ib2xJbXBsKiBzeW1ib2wgPSBnZW5lcmF0b3Iudm0oKS0+cHJvcGVydHlOYW1lcy0+bG9va1Vw
UHJpdmF0ZU5hbWUoc3RhdGljX2Nhc3Q8U3RyaW5nTm9kZSo+KG5vZGUtPm1fZXhwciktPnZhbHVl
KCkpOworICAgIFN5bWJvbEltcGwqIHN5bWJvbCA9IGdlbmVyYXRvci52bSgpLnByb3BlcnR5TmFt
ZXMtPmxvb2tVcFByaXZhdGVOYW1lKHN0YXRpY19jYXN0PFN0cmluZ05vZGUqPihub2RlLT5tX2V4
cHIpLT52YWx1ZSgpKTsKICAgICBBU1NFUlQoc3ltYm9sKTsKICAgICBBU1NFUlQoIW5vZGUtPm1f
bmV4dCk7CiAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0RGlyZWN0R2V0QnlJZChnZW5lcmF0b3Iu
ZmluYWxEZXN0aW5hdGlvbihkc3QpLCBiYXNlLmdldCgpLCBnZW5lcmF0b3IucGFyc2VyQXJlbmEo
KS5pZGVudGlmaWVyQXJlbmEoKS5tYWtlSWRlbnRpZmllcihnZW5lcmF0b3Iudm0oKSwgc3ltYm9s
KSk7CkBAIC0xMDU1LDcgKzEwNTUsNyBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUludHJpbnNpY05v
ZGU6OmVtaXRfCiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGJhc2UgPSBnZW5lcmF0b3IuZW1pdE5v
ZGUobm9kZSk7CiAgICAgbm9kZSA9IG5vZGUtPm1fbmV4dDsKICAgICBBU1NFUlQobm9kZS0+bV9l
eHByLT5pc1N0cmluZygpKTsKLSAgICBTeW1ib2xJbXBsKiBzeW1ib2wgPSBnZW5lcmF0b3Iudm0o
KS0+cHJvcGVydHlOYW1lcy0+bG9va1VwUHJpdmF0ZU5hbWUoc3RhdGljX2Nhc3Q8U3RyaW5nTm9k
ZSo+KG5vZGUtPm1fZXhwciktPnZhbHVlKCkpOworICAgIFN5bWJvbEltcGwqIHN5bWJvbCA9IGdl
bmVyYXRvci52bSgpLnByb3BlcnR5TmFtZXMtPmxvb2tVcFByaXZhdGVOYW1lKHN0YXRpY19jYXN0
PFN0cmluZ05vZGUqPihub2RlLT5tX2V4cHIpLT52YWx1ZSgpKTsKICAgICBBU1NFUlQoc3ltYm9s
KTsKICAgICBub2RlID0gbm9kZS0+bV9uZXh0OwogICAgIFJlZlB0cjxSZWdpc3RlcklEPiB2YWx1
ZSA9IGdlbmVyYXRvci5lbWl0Tm9kZShub2RlKTsKQEAgLTExNzQsNyArMTE3NCw3IEBAIFJlZ2lz
dGVySUQqIEJ5dGVjb2RlSW50cmluc2ljTm9kZTo6ZW1pdF8KICAgICAgICAgQVNTRVJUKCFub2Rl
LT5tX25leHQpOwogICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLm1vdmUoZHN0LCBnZW5lcmF0b3Iu
ZW1pdFRvT2JqZWN0KHRlbXAuZ2V0KCksIHNyYy5nZXQoKSwgbWVzc2FnZSkpOwogICAgIH0KLSAg
ICByZXR1cm4gZ2VuZXJhdG9yLm1vdmUoZHN0LCBnZW5lcmF0b3IuZW1pdFRvT2JqZWN0KHRlbXAu
Z2V0KCksIHNyYy5nZXQoKSwgZ2VuZXJhdG9yLnZtKCktPnByb3BlcnR5TmFtZXMtPmVtcHR5SWRl
bnRpZmllcikpOworICAgIHJldHVybiBnZW5lcmF0b3IubW92ZShkc3QsIGdlbmVyYXRvci5lbWl0
VG9PYmplY3QodGVtcC5nZXQoKSwgc3JjLmdldCgpLCBnZW5lcmF0b3Iudm0oKS5wcm9wZXJ0eU5h
bWVzLT5lbXB0eUlkZW50aWZpZXIpKTsKIH0KIAogUmVnaXN0ZXJJRCogQnl0ZWNvZGVJbnRyaW5z
aWNOb2RlOjplbWl0X2ludHJpbnNpY19pZFdpdGhQcm9maWxlKEJ5dGVjb2RlR2VuZXJhdG9yJiBn
ZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKQEAgLTEyOTcsNyArMTI5Nyw3IEBAIFJlZ2lzdGVy
SUQqIEJ5dGVjb2RlSW50cmluc2ljTm9kZTo6ZW1pdF8KICAgICAgICAgQVNTRVJUKHR5cGUoKSA9
PSBUeXBlOjpDb25zdGFudCk7IFwKICAgICAgICAgaWYgKGRzdCA9PSBnZW5lcmF0b3IuaWdub3Jl
ZFJlc3VsdCgpKSBcCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsgXAotICAgICAgICByZXR1
cm4gZ2VuZXJhdG9yLmVtaXRMb2FkKGRzdCwgZ2VuZXJhdG9yLnZtKCktPmJ5dGVjb2RlSW50cmlu
c2ljUmVnaXN0cnkoKS5uYW1lIyNWYWx1ZShnZW5lcmF0b3IpKTsgXAorICAgICAgICByZXR1cm4g
Z2VuZXJhdG9yLmVtaXRMb2FkKGRzdCwgZ2VuZXJhdG9yLnZtKCkuYnl0ZWNvZGVJbnRyaW5zaWNS
ZWdpc3RyeSgpLm5hbWUjI1ZhbHVlKGdlbmVyYXRvcikpOyBcCiAgICAgfQogICAgIEpTQ19DT01N
T05fQllURUNPREVfSU5UUklOU0lDX0NPTlNUQU5UU19FQUNIX05BTUUoSlNDX0RFQ0xBUkVfQllU
RUNPREVfSU5UUklOU0lDX0NPTlNUQU5UX0dFTkVSQVRPUlMpCiAjdW5kZWYgSlNDX0RFQ0xBUkVf
QllURUNPREVfSU5UUklOU0lDX0NPTlNUQU5UX0dFTkVSQVRPUlMKQEAgLTIzMjQsNyArMjMyNCw3
IEBAIFJlZ2lzdGVySUQqIEluc3RhbmNlT2ZOb2RlOjplbWl0Qnl0ZWNvZGUKICAgICBnZW5lcmF0
b3IuZW1pdEp1bXBJZkZhbHNlKGlzT2JqZWN0LmdldCgpLCB0eXBlRXJyb3IuZ2V0KCkpOwogCiAg
ICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRp
dm90RW5kKCkpOwotICAgIGdlbmVyYXRvci5lbWl0R2V0QnlJZChoYXNJbnN0YW5jZVZhbHVlLmdl
dCgpLCBjb25zdHJ1Y3Rvci5nZXQoKSwgZ2VuZXJhdG9yLnZtKCktPnByb3BlcnR5TmFtZXMtPmhh
c0luc3RhbmNlU3ltYm9sKTsKKyAgICBnZW5lcmF0b3IuZW1pdEdldEJ5SWQoaGFzSW5zdGFuY2VW
YWx1ZS5nZXQoKSwgY29uc3RydWN0b3IuZ2V0KCksIGdlbmVyYXRvci52bSgpLnByb3BlcnR5TmFt
ZXMtPmhhc0luc3RhbmNlU3ltYm9sKTsKIAogICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbklu
Zm8oZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICBnZW5lcmF0b3IuZW1p
dE92ZXJyaWRlc0hhc0luc3RhbmNlKGlzQ3VzdG9tLmdldCgpLCBjb25zdHJ1Y3Rvci5nZXQoKSwg
aGFzSW5zdGFuY2VWYWx1ZS5nZXQoKSk7CkBAIC0yMzMzLDcgKzIzMzMsNyBAQCBSZWdpc3RlcklE
KiBJbnN0YW5jZU9mTm9kZTo6ZW1pdEJ5dGVjb2RlCiAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wSWZU
cnVlKGlzQ3VzdG9tLmdldCgpLCBjdXN0b20uZ2V0KCkpOwogCiAgICAgZ2VuZXJhdG9yLmVtaXRF
eHByZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwotICAgIGdl
bmVyYXRvci5lbWl0R2V0QnlJZChwcm90b3R5cGUuZ2V0KCksIGNvbnN0cnVjdG9yLmdldCgpLCBn
ZW5lcmF0b3Iudm0oKS0+cHJvcGVydHlOYW1lcy0+cHJvdG90eXBlKTsKKyAgICBnZW5lcmF0b3Iu
ZW1pdEdldEJ5SWQocHJvdG90eXBlLmdldCgpLCBjb25zdHJ1Y3Rvci5nZXQoKSwgZ2VuZXJhdG9y
LnZtKCkucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlKTsKIAogICAgIGdlbmVyYXRvci5lbWl0RXhw
cmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICBnZW5l
cmF0b3IuZW1pdEluc3RhbmNlT2YoZHN0UmVnLmdldCgpLCB2YWx1ZS5nZXQoKSwgcHJvdG90eXBl
LmdldCgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2Vy
LmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2Vy
L0RlYnVnZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiAgQ29w
eXJpZ2h0IChDKSAyMDA4LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
IENvcHlyaWdodCAoQykgMjAwOC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3Jn
KQogICogIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQogICoK
QEAgLTU2LDcgKzU2LDcgQEAgc3RydWN0IEdhdGhlclNvdXJjZVByb3ZpZGVycyA6IHB1YmxpYyBN
YQogICAgICAgICAKICAgICAgICAgSlNDZWxsKiBjZWxsID0gc3RhdGljX2Nhc3Q8SlNDZWxsKj4o
aGVhcENlbGwpOwogICAgICAgICAKLSAgICAgICAgSlNGdW5jdGlvbiogZnVuY3Rpb24gPSBqc0R5
bmFtaWNDYXN0PEpTRnVuY3Rpb24qPigqY2VsbC0+dm0oKSwgY2VsbCk7CisgICAgICAgIEpTRnVu
Y3Rpb24qIGZ1bmN0aW9uID0ganNEeW5hbWljQ2FzdDxKU0Z1bmN0aW9uKj4oY2VsbC0+dm0oKSwg
Y2VsbCk7CiAgICAgICAgIGlmICghZnVuY3Rpb24pCiAgICAgICAgICAgICByZXR1cm4gSXRlcmF0
aW9uU3RhdHVzOjpDb250aW51ZTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVn
Z2VyL0RlYnVnZ2VyUGFyc2VEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGVidWdnZXIvRGVidWdnZXJQYXJzZURhdGEuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJQYXJzZURhdGEuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAx
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTE1NCw3ICsxNTQsNyBAQCBib29sIGdhdGhlckRlYnVnZ2VyUGFyc2VEYXRh
KFZNJiB2bSwgY29uCiAgICAgSlNQYXJzZXJTY3JpcHRNb2RlIHNjcmlwdE1vZGUgPSBEZWJ1Z2dl
clBhcnNlSW5mbzxUPjo6c2NyaXB0TW9kZTsKIAogICAgIFBhcnNlckVycm9yIGVycm9yOwotICAg
IHN0ZDo6dW5pcXVlX3B0cjxSb290Tm9kZT4gcm9vdE5vZGUgPSBwYXJzZTxSb290Tm9kZT4oJnZt
LCBzb3VyY2UsIElkZW50aWZpZXIoKSwKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Um9vdE5vZGU+IHJv
b3ROb2RlID0gcGFyc2U8Um9vdE5vZGU+KHZtLCBzb3VyY2UsIElkZW50aWZpZXIoKSwKICAgICAg
ICAgSlNQYXJzZXJCdWlsdGluTW9kZTo6Tm90QnVpbHRpbiwgc3RyaWN0TW9kZSwgc2NyaXB0TW9k
ZSwgcGFyc2VNb2RlLCBTdXBlckJpbmRpbmc6Ok5vdE5lZWRlZCwKICAgICAgICAgZXJyb3IsIG51
bGxwdHIsIENvbnN0cnVjdG9yS2luZDo6Tm9uZSwgRGVyaXZlZENvbnRleHRUeXBlOjpOb25lLCBF
dmFsQ29udGV4dFR5cGU6Ok5vbmUsCiAgICAgICAgICZkZWJ1Z2dlclBhcnNlRGF0YSk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJTY29wZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyU2NvcGUuY3Bw
CShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVi
dWdnZXJTY29wZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDA4LTIwMDksIDIwMTQsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNjMsNyArMTYz
LDcgQEAgRGVidWdnZXJTY29wZSogRGVidWdnZXJTY29wZTo6bmV4dCgpCiB7CiAgICAgQVNTRVJU
KGlzVmFsaWQoKSk7CiAgICAgaWYgKCFtX25leHQgJiYgbV9zY29wZS0+bmV4dCgpKSB7Ci0gICAg
ICAgIFZNJiB2bSA9ICptX3Njb3BlLT52bSgpOworICAgICAgICBWTSYgdm0gPSBtX3Njb3BlLT52
bSgpOwogICAgICAgICBEZWJ1Z2dlclNjb3BlKiBuZXh0U2NvcGUgPSBjcmVhdGUodm0sIG1fc2Nv
cGUtPm5leHQoKSk7CiAgICAgICAgIG1fbmV4dC5zZXQodm0sIHRoaXMsIG5leHRTY29wZSk7CiAg
ICAgfQpAQCAtMjI0LDcgKzIyNCw3IEBAIGJvb2wgRGVidWdnZXJTY29wZTo6aXNOZXN0ZWRMZXhp
Y2FsU2NvcGUKIAogU3RyaW5nIERlYnVnZ2VyU2NvcGU6Om5hbWUoKSBjb25zdAogewotICAgIFN5
bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSA9IG1fc2NvcGUtPnN5bWJvbFRhYmxlKCp2bSgpKTsKKyAg
ICBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUgPSBtX3Njb3BlLT5zeW1ib2xUYWJsZSh2bSgpKTsK
ICAgICBpZiAoIXN5bWJvbFRhYmxlKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAKQEAgLTIz
Nyw3ICsyMzcsNyBAQCBTdHJpbmcgRGVidWdnZXJTY29wZTo6bmFtZSgpIGNvbnN0CiAKIERlYnVn
Z2VyTG9jYXRpb24gRGVidWdnZXJTY29wZTo6bG9jYXRpb24oKSBjb25zdAogewotICAgIFN5bWJv
bFRhYmxlKiBzeW1ib2xUYWJsZSA9IG1fc2NvcGUtPnN5bWJvbFRhYmxlKCp2bSgpKTsKKyAgICBT
eW1ib2xUYWJsZSogc3ltYm9sVGFibGUgPSBtX3Njb3BlLT5zeW1ib2xUYWJsZSh2bSgpKTsKICAg
ICBpZiAoIXN5bWJvbFRhYmxlKQogICAgICAgICByZXR1cm4gRGVidWdnZXJMb2NhdGlvbigpOwog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRJZGVudGlmaWVycy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkSWRl
bnRpZmllcnMuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Rlc2lyZWRJZGVudGlmaWVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04OSw3ICs4
OSw3IEBAIHZvaWQgRGVzaXJlZElkZW50aWZpZXJzOjpyZWFsbHlBZGQoVk0mIHYKIHsKICAgICBm
b3IgKGF1dG8gcmVwIDogbV9hZGRlZElkZW50aWZpZXJzKSB7CiAgICAgICAgIEFTU0VSVChyZXAt
Pmhhc0F0TGVhc3RPbmVSZWYoKSk7Ci0gICAgICAgIGNvbW1vbkRhdGEtPmRmZ0lkZW50aWZpZXJz
LmFwcGVuZChJZGVudGlmaWVyOjpmcm9tVWlkKCZ2bSwgcmVwKSk7CisgICAgICAgIGNvbW1vbkRh
dGEtPmRmZ0lkZW50aWZpZXJzLmFwcGVuZChJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCByZXApKTsK
ICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdh
dGNocG9pbnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Rlc2lyZWRXYXRjaHBvaW50cy5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzgsNyArMzgsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiB2b2lkIEFy
cmF5QnVmZmVyVmlld1dhdGNocG9pbnRBZGFwdG9yOjphZGQoCiAgICAgQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIEpTQXJyYXlCdWZmZXJWaWV3KiB2aWV3LCBDb21tb25EYXRhJiBjb21tb24pCiB7Ci0g
ICAgVk0mIHZtID0gKmNvZGVCbG9jay0+dm0oKTsKKyAgICBWTSYgdm0gPSBjb2RlQmxvY2stPnZt
KCk7CiAgICAgV2F0Y2hwb2ludCogd2F0Y2hwb2ludCA9IGNvbW1vbi53YXRjaHBvaW50cy5hZGQo
Y29kZUJsb2NrKTsKICAgICBBcnJheUJ1ZmZlck5ldXRlcmluZ1dhdGNocG9pbnRTZXQqIG5ldXRl
cmluZ1dhdGNocG9pbnQgPQogICAgICAgICBBcnJheUJ1ZmZlck5ldXRlcmluZ1dhdGNocG9pbnRT
ZXQ6OmNyZWF0ZSh2bSk7CkBAIC02Niw3ICs2Niw3IEBAIHZvaWQgRnVuY3Rpb25FeGVjdXRhYmxl
QWRhcHRvcjo6YWRkKAogdm9pZCBBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRBZGFwdG9yOjph
ZGQoCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uJiBrZXksIENvbW1vbkRhdGEmIGNvbW1vbikKIHsKLSAgICBWTSYgdm0gPSAqY29kZUJsb2Nr
LT52bSgpOworICAgIFZNJiB2bSA9IGNvZGVCbG9jay0+dm0oKTsKICAgICBzd2l0Y2ggKGtleS5r
aW5kKCkpIHsKICAgICBjYXNlIFByb3BlcnR5Q29uZGl0aW9uOjpFcXVpdmFsZW5jZToKICAgICAg
ICAgY29tbW9uLmFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludHMuYWRkKGtl
eSwgY29kZUJsb2NrKS0+aW5zdGFsbCh2bSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Zyb3plblZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdGcm96ZW5WYWx1ZS5oCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Zyb3plblZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01OCw3ICs1
OCw3IEBAIHB1YmxpYzoKICAgICAgICAgLCBtX3N0cmVuZ3RoKHN0cmVuZ3RoKQogICAgIHsKICAg
ICAgICAgQVNTRVJUKCghIXZhbHVlICYmIHZhbHVlLmlzQ2VsbCgpKSA9PSAhIXN0cnVjdHVyZSk7
Ci0gICAgICAgIEFTU0VSVCghdmFsdWUgfHwgIXZhbHVlLmlzQ2VsbCgpIHx8IHZhbHVlLmFzQ2Vs
bCgpLT5jbGFzc0luZm8oKnZhbHVlLmFzQ2VsbCgpLT52bSgpKSA9PSBzdHJ1Y3R1cmUtPmNsYXNz
SW5mbygpKTsKKyAgICAgICAgQVNTRVJUKCF2YWx1ZSB8fCAhdmFsdWUuaXNDZWxsKCkgfHwgdmFs
dWUuYXNDZWxsKCktPmNsYXNzSW5mbyh2YWx1ZS5hc0NlbGwoKS0+dm0oKSkgPT0gc3RydWN0dXJl
LT5jbGFzc0luZm8oKSk7CiAgICAgICAgIEFTU0VSVCghIXN0cnVjdHVyZSB8fCAoc3RyZW5ndGgg
PT0gV2Vha1ZhbHVlKSk7CiAgICAgfQogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzI1LDcgKzE3MjUsNyBAQCBi
b29sIEdyYXBoOjpjYW5PcHRpbWl6ZVN0cmluZ09iamVjdEFjY2VzCiAgICAgU3RydWN0dXJlKiBz
dHJpbmdPYmplY3RTdHJ1Y3R1cmUgPSBnbG9iYWxPYmplY3RGb3IoY29kZU9yaWdpbiktPnN0cmlu
Z09iamVjdFN0cnVjdHVyZSgpOwogICAgIHJlZ2lzdGVyU3RydWN0dXJlKHN0cmluZ09iamVjdFN0
cnVjdHVyZSk7CiAgICAgQVNTRVJUKHN0cmluZ09iamVjdFN0cnVjdHVyZS0+c3RvcmVkUHJvdG90
eXBlKCkuaXNPYmplY3QoKSk7Ci0gICAgQVNTRVJUKHN0cmluZ09iamVjdFN0cnVjdHVyZS0+c3Rv
cmVkUHJvdG90eXBlKCkuYXNDZWxsKCktPmNsYXNzSW5mbygqc3RyaW5nT2JqZWN0U3RydWN0dXJl
LT5zdG9yZWRQcm90b3R5cGUoKS5hc0NlbGwoKS0+dm0oKSkgPT0gU3RyaW5nUHJvdG90eXBlOjpp
bmZvKCkpOworICAgIEFTU0VSVChzdHJpbmdPYmplY3RTdHJ1Y3R1cmUtPnN0b3JlZFByb3RvdHlw
ZSgpLmFzQ2VsbCgpLT5jbGFzc0luZm8oc3RyaW5nT2JqZWN0U3RydWN0dXJlLT5zdG9yZWRQcm90
b3R5cGUoKS5hc0NlbGwoKS0+dm0oKSkgPT0gU3RyaW5nUHJvdG90eXBlOjppbmZvKCkpOwogCiAg
ICAgaWYgKCF3YXRjaENvbmRpdGlvbnMoZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlNaXNz
Q29uY3VycmVudGx5KG1fdm0sIGdsb2JhbE9iamVjdCwgc3RyaW5nT2JqZWN0U3RydWN0dXJlLCBt
X3ZtLnByb3BlcnR5TmFtZXMtPnRvUHJpbWl0aXZlU3ltYm9sLmltcGwoKSkpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBp
bGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENv
bXBpbGVyLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdKSVRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04NSw3ICs4NSw3IEBAIHZv
aWQgSklUQ29tcGlsZXI6OmxpbmtPU1JFeGl0cygpCiAgICAgICAgIH0KICAgICB9CiAgICAgCi0g
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvc3JFeGl0VGh1bmsgPSB2
bSgpLT5nZXRDVElTdHViKG9zckV4aXRUaHVua0dlbmVyYXRvcik7CisgICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvc3JFeGl0VGh1bmsgPSB2bSgpLmdldENUSVN0dWIo
b3NyRXhpdFRodW5rR2VuZXJhdG9yKTsKICAgICBhdXRvIG9zckV4aXRUaHVua0xhYmVsID0gQ29k
ZUxvY2F0aW9uTGFiZWw8SklUVGh1bmtQdHJUYWc+KG9zckV4aXRUaHVuay5jb2RlKCkpOwogICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2ppdENvZGUtPm9zckV4aXQuc2l6ZSgpOyArK2kp
IHsKICAgICAgICAgT1NSRXhpdENvbXBpbGF0aW9uSW5mbyYgaW5mbyA9IG1fZXhpdENvbXBpbGF0
aW9uSW5mb1tpXTsKQEAgLTk2LDcgKzk2LDcgQEAgdm9pZCBKSVRDb21waWxlcjo6bGlua09TUkV4
aXRzKCkKICAgICAgICAgICAgIGluZm8ubV9yZXBsYWNlbWVudERlc3RpbmF0aW9uID0gbGFiZWwo
KTsKIAogICAgICAgICBqaXRBc3NlcnRIYXNWYWxpZENhbGxGcmFtZSgpOwotICAgICAgICBzdG9y
ZTMyKFRydXN0ZWRJbW0zMihpKSwgJnZtKCktPm9zckV4aXRJbmRleCk7CisgICAgICAgIHN0b3Jl
MzIoVHJ1c3RlZEltbTMyKGkpLCAmdm0oKS5vc3JFeGl0SW5kZXgpOwogICAgICAgICBpZiAoT3B0
aW9uczo6dXNlUHJvYmVPU1JFeGl0KCkpIHsKICAgICAgICAgICAgIEp1bXAgdGFyZ2V0ID0ganVt
cCgpOwogICAgICAgICAgICAgYWRkTGlua1Rhc2soW3RhcmdldCwgb3NyRXhpdFRodW5rTGFiZWxd
IChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CkBAIC0xNDcsMTAgKzE0NywxMCBAQCB2b2lkIEpJ
VENvbXBpbGVyOjpjb21waWxlRXhjZXB0aW9uSGFuZGxlCiAgICAgaWYgKCFtX2V4Y2VwdGlvbkNo
ZWNrc1dpdGhDYWxsRnJhbWVSb2xsYmFjay5lbXB0eSgpKSB7CiAgICAgICAgIG1fZXhjZXB0aW9u
Q2hlY2tzV2l0aENhbGxGcmFtZVJvbGxiYWNrLmxpbmsodGhpcyk7CiAKLSAgICAgICAgY29weUNh
bGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0oKS0+dG9wRW50cnlGcmFt
ZSk7CisgICAgICAgIGNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVy
KHZtKCkudG9wRW50cnlGcmFtZSk7CiAKICAgICAgICAgLy8gbG9va3VwRXhjZXB0aW9uSGFuZGxl
ckZyb21DYWxsZXJGcmFtZSBpcyBwYXNzZWQgdHdvIGFyZ3VtZW50cywgdGhlIFZNIGFuZCB0aGUg
ZXhlYyAodGhlIENhbGxGcmFtZSopLgotICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIodm0oKSks
IEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cigmdm0o
KSksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CiAgICAgICAgIG1vdmUoR1BSSW5mbzo6Y2FsbEZy
YW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CiAgICAgICAgIGFkZFB0cihUcnVz
dGVkSW1tMzIobV9ncmFwaC5zdGFja1BvaW50ZXJPZmZzZXQoKSAqIHNpemVvZihSZWdpc3Rlcikp
LCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogCkBA
IC0xNjEsMTYgKzE2MSwxNiBAQCB2b2lkIEpJVENvbXBpbGVyOjpjb21waWxlRXhjZXB0aW9uSGFu
ZGxlCiAjZW5kaWYKICAgICAgICAgbV9jYWxscy5hcHBlbmQoQ2FsbExpbmtSZWNvcmQoY2FsbChP
cGVyYXRpb25QdHJUYWcpLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KGxvb2t1cEV4Y2Vw
dGlvbkhhbmRsZXJGcm9tQ2FsbGVyRnJhbWUpKSk7CiAKLSAgICAgICAganVtcFRvRXhjZXB0aW9u
SGFuZGxlcigqdm0oKSk7CisgICAgICAgIGp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIodm0oKSk7CiAg
ICAgfQogCiAgICAgaWYgKCFtX2V4Y2VwdGlvbkNoZWNrcy5lbXB0eSgpKSB7CiAgICAgICAgIG1f
ZXhjZXB0aW9uQ2hlY2tzLmxpbmsodGhpcyk7CiAKLSAgICAgICAgY29weUNhbGxlZVNhdmVzVG9F
bnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0oKS0+dG9wRW50cnlGcmFtZSk7CisgICAgICAg
IGNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCkudG9wRW50
cnlGcmFtZSk7CiAKICAgICAgICAgLy8gbG9va3VwRXhjZXB0aW9uSGFuZGxlciBpcyBwYXNzZWQg
dHdvIGFyZ3VtZW50cywgdGhlIFZNIGFuZCB0aGUgZXhlYyAodGhlIENhbGxGcmFtZSopLgotICAg
ICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIodm0oKSksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7Cisg
ICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cigmdm0oKSksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7
CiAgICAgICAgIG1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3Vt
ZW50R1BSMSk7CiAKICNpZiBDUFUoWDg2KQpAQCAtMTgwLDcgKzE4MCw3IEBAIHZvaWQgSklUQ29t
cGlsZXI6OmNvbXBpbGVFeGNlcHRpb25IYW5kbGUKICNlbmRpZgogICAgICAgICBtX2NhbGxzLmFw
cGVuZChDYWxsTGlua1JlY29yZChjYWxsKE9wZXJhdGlvblB0clRhZyksIEZ1bmN0aW9uUHRyPE9w
ZXJhdGlvblB0clRhZz4obG9va3VwRXhjZXB0aW9uSGFuZGxlcikpKTsKIAotICAgICAgICBqdW1w
VG9FeGNlcHRpb25IYW5kbGVyKCp2bSgpKTsKKyAgICAgICAganVtcFRvRXhjZXB0aW9uSGFuZGxl
cih2bSgpKTsKICAgICB9CiB9CiAKQEAgLTI2Niw3ICsyNjYsNyBAQCB2b2lkIEpJVENvbXBpbGVy
OjpsaW5rKExpbmtCdWZmZXImIGxpbmtCCiAgICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9pbkJ5
SWRzLCBsaW5rQnVmZmVyKTsKICAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2luc3RhbmNlT2Zz
LCBsaW5rQnVmZmVyKTsKIAotICAgIGF1dG8gbGlua0NhbGxUaHVuayA9IEZ1bmN0aW9uUHRyPE5v
UHRyVGFnPih2bSgpLT5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLnJldGFnZ2Vk
Q29kZTxOb1B0clRhZz4oKSk7CisgICAgYXV0byBsaW5rQ2FsbFRodW5rID0gRnVuY3Rpb25QdHI8
Tm9QdHJUYWc+KHZtKCkuZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5yZXRhZ2dl
ZENvZGU8Tm9QdHJUYWc+KCkpOwogICAgIGZvciAoYXV0byYgcmVjb3JkIDogbV9qc0NhbGxzKSB7
CiAgICAgICAgIENhbGxMaW5rSW5mbyYgaW5mbyA9ICpyZWNvcmQuaW5mbzsKICAgICAgICAgbGlu
a0J1ZmZlci5saW5rKHJlY29yZC5zbG93Q2FsbCwgbGlua0NhbGxUaHVuayk7CkBAIC0yOTMsNyAr
MjkzLDcgQEAgdm9pZCBKSVRDb21waWxlcjo6bGluayhMaW5rQnVmZmVyJiBsaW5rQgogICAgICAg
ICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4ocmVj
b3JkLmNhbGwpKTsKICAgICB9CiAgICAgCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiBvc3JFeGl0VGh1bmsgPSB2bSgpLT5nZXRDVElTdHViKG9zckV4aXRHZW5lcmF0
aW9uVGh1bmtHZW5lcmF0b3IpOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gb3NyRXhpdFRodW5rID0gdm0oKS5nZXRDVElTdHViKG9zckV4aXRHZW5lcmF0aW9uVGh1
bmtHZW5lcmF0b3IpOwogICAgIGF1dG8gdGFyZ2V0ID0gQ29kZUxvY2F0aW9uTGFiZWw8SklUVGh1
bmtQdHJUYWc+KG9zckV4aXRUaHVuay5jb2RlKCkpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBtX2ppdENvZGUtPm9zckV4aXQuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgT1NSRXhpdENv
bXBpbGF0aW9uSW5mbyYgaW5mbyA9IG1fZXhpdENvbXBpbGF0aW9uSW5mb1tpXTsKQEAgLTM1NCw3
ICszNTQsNyBAQCBzdGF0aWMgdm9pZCBlbWl0U3RhY2tPdmVyZmxvd0NoZWNrKEpJVENvCiAgICAg
aml0LmFkZFB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKGZyYW1lVG9wT2Zmc2V0KSwg
R1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OnJlZ1QxKTsKICAgICBpZiAoVU5M
SUtFTFkobWF4RnJhbWVTaXplID4gT3B0aW9uczo6cmVzZXJ2ZWRab25lU2l6ZSgpKSkKICAgICAg
ICAgc3RhY2tPdmVyZmxvdy5hcHBlbmQoaml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6QWJv
dmUsIEdQUkluZm86OnJlZ1QxLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlcikpOwotICAgIHN0
YWNrT3ZlcmZsb3cuYXBwZW5kKGppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlLCBN
YWNyb0Fzc2VtYmxlcjo6QWJzb2x1dGVBZGRyZXNzKGppdC52bSgpLT5hZGRyZXNzT2ZTb2Z0U3Rh
Y2tMaW1pdCgpKSwgR1BSSW5mbzo6cmVnVDEpKTsKKyAgICBzdGFja092ZXJmbG93LmFwcGVuZChq
aXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZSwgTWFjcm9Bc3NlbWJsZXI6OkFic29s
dXRlQWRkcmVzcyhqaXQudm0oKS5hZGRyZXNzT2ZTb2Z0U3RhY2tMaW1pdCgpKSwgR1BSSW5mbzo6
cmVnVDEpKTsKIH0KIAogdm9pZCBKSVRDb21waWxlcjo6Y29tcGlsZSgpCkBAIC01MTksNyArNTE5
LDcgQEAgdm9pZCBKSVRDb21waWxlcjo6Y29tcGlsZUZ1bmN0aW9uKCkKICAgICBjb2RlQmxvY2so
KS0+c2hyaW5rVG9GaXQoQ29kZUJsb2NrOjpMYXRlU2hyaW5rKTsKIAogICAgIGlmIChyZXF1aXJl
c0FyaXR5Rml4dXApCi0gICAgICAgIGxpbmtCdWZmZXItPmxpbmsoY2FsbEFyaXR5Rml4dXAsIEZ1
bmN0aW9uUHRyPEpJVFRodW5rUHRyVGFnPih2bSgpLT5nZXRDVElTdHViKGFyaXR5Rml4dXBHZW5l
cmF0b3IpLmNvZGUoKSkpOworICAgICAgICBsaW5rQnVmZmVyLT5saW5rKGNhbGxBcml0eUZpeHVw
LCBGdW5jdGlvblB0cjxKSVRUaHVua1B0clRhZz4odm0oKS5nZXRDVElTdHViKGFyaXR5Rml4dXBH
ZW5lcmF0b3IpLmNvZGUoKSkpOwogCiAgICAgZGlzYXNzZW1ibGUoKmxpbmtCdWZmZXIpOwogCkBA
IC02NTMsMTEgKzY1MywxMSBAQCB2b2lkIEpJVENvbXBpbGVyOjpleGNlcHRpb25DaGVjaygpCiAg
ICAgYm9vbCB3aWxsQ2F0Y2hFeGNlcHRpb24gPSBtX2dyYXBoLndpbGxDYXRjaEV4Y2VwdGlvbklu
TWFjaGluZUZyYW1lKG1fc3BlY3VsYXRpdmUtPm1fY3VycmVudE5vZGUtPm9yaWdpbi5mb3JFeGl0
LCBvcENhdGNoT3JpZ2luLCBleGNlcHRpb25IYW5kbGVyKTsgCiAgICAgaWYgKHdpbGxDYXRjaEV4
Y2VwdGlvbikgewogICAgICAgICB1bnNpZ25lZCBzdHJlYW1JbmRleCA9IG1fc3BlY3VsYXRpdmUt
Pm1fb3V0T2ZMaW5lU3RyZWFtSW5kZXggPyAqbV9zcGVjdWxhdGl2ZS0+bV9vdXRPZkxpbmVTdHJl
YW1JbmRleCA6IG1fc3BlY3VsYXRpdmUtPm1fc3RyZWFtLT5zaXplKCk7Ci0gICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wIGhhZEV4Y2VwdGlvbiA9IGVtaXROb25QYXRjaGFibGVFeGNlcHRpb25D
aGVjaygqdm0oKSk7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGhhZEV4Y2VwdGlvbiA9
IGVtaXROb25QYXRjaGFibGVFeGNlcHRpb25DaGVjayh2bSgpKTsKICAgICAgICAgLy8gV2UgYXNz
dW1lIGhlcmUgdGhhdCB0aGlzIGlzIGNhbGxlZCBhZnRlciBjYWxsT3BlYXJ0aW9uKCkvYXBwZW5k
Q2FsbCgpIGlzIGNhbGxlZC4KICAgICAgICAgYXBwZW5kRXhjZXB0aW9uSGFuZGxpbmdPU1JFeGl0
KEV4Y2VwdGlvbkNoZWNrLCBzdHJlYW1JbmRleCwgb3BDYXRjaE9yaWdpbiwgZXhjZXB0aW9uSGFu
ZGxlciwgbV9qaXRDb2RlLT5jb21tb24ubGFzdENhbGxTaXRlKCksIGhhZEV4Y2VwdGlvbik7CiAg
ICAgfSBlbHNlCi0gICAgICAgIG1fZXhjZXB0aW9uQ2hlY2tzLmFwcGVuZChlbWl0RXhjZXB0aW9u
Q2hlY2soKnZtKCkpKTsKKyAgICAgICAgbV9leGNlcHRpb25DaGVja3MuYXBwZW5kKGVtaXRFeGNl
cHRpb25DaGVjayh2bSgpKSk7CiB9CiAKIENhbGxTaXRlSW5kZXggSklUQ29tcGlsZXI6OnJlY29y
ZENhbGxTaXRlQW5kR2VuZXJhdGVFeGNlcHRpb25IYW5kbGluZ09TUkV4aXRJZk5lZWRlZChjb25z
dCBDb2RlT3JpZ2luJiBjYWxsU2l0ZUNvZGVPcmlnaW4sIHVuc2lnbmVkIGV2ZW50U3RyZWFtSW5k
ZXgpCkBAIC02OTEsNyArNjkxLDcgQEAgdm9pZCBKSVRDb21waWxlcjo6bWFrZUNhdGNoT1NSRW50
cnlCdWZmZQogewogICAgIGlmIChtX2dyYXBoLm1fbWF4TG9jYWxzRm9yQ2F0Y2hPU1JFbnRyeSkg
ewogICAgICAgICB1aW50MzJfdCBudW1iZXJPZkxpdmVMb2NhbHMgPSBzdGQ6Om1heCgqbV9ncmFw
aC5tX21heExvY2Fsc0ZvckNhdGNoT1NSRW50cnksIDF1KTsgLy8gTWFrZSBzdXJlIHdlIGFsd2F5
cyBhbGxvY2F0ZSBhIG5vbi1udWxsIGNhdGNoT1NSRW50cnlCdWZmZXIuCi0gICAgICAgIG1faml0
Q29kZS0+Y29tbW9uLmNhdGNoT1NSRW50cnlCdWZmZXIgPSB2bSgpLT5zY3JhdGNoQnVmZmVyRm9y
U2l6ZShzaXplb2YoSlNWYWx1ZSkgKiBudW1iZXJPZkxpdmVMb2NhbHMpOworICAgICAgICBtX2pp
dENvZGUtPmNvbW1vbi5jYXRjaE9TUkVudHJ5QnVmZmVyID0gdm0oKS5zY3JhdGNoQnVmZmVyRm9y
U2l6ZShzaXplb2YoSlNWYWx1ZSkgKiBudW1iZXJPZkxpdmVMb2NhbHMpOwogICAgIH0KIH0KIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAkocmV2aXNp
b24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MS0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMTUwLDEzICsxNTAsMTMgQEAgcHVibGljOgogCiAgICAgdm9p
ZCBleGNlcHRpb25DaGVja1dpdGhDYWxsRnJhbWVSb2xsYmFjaygpCiAgICAgewotICAgICAgICBt
X2V4Y2VwdGlvbkNoZWNrc1dpdGhDYWxsRnJhbWVSb2xsYmFjay5hcHBlbmQoZW1pdEV4Y2VwdGlv
bkNoZWNrKCp2bSgpKSk7CisgICAgICAgIG1fZXhjZXB0aW9uQ2hlY2tzV2l0aENhbGxGcmFtZVJv
bGxiYWNrLmFwcGVuZChlbWl0RXhjZXB0aW9uQ2hlY2sodm0oKSkpOwogICAgIH0KIAogICAgIC8v
IEFkZCBhIGNhbGwgb3V0IGZyb20gSklUIGNvZGUsIHdpdGggYSBmYXN0IGV4Y2VwdGlvbiBjaGVj
ayB0aGF0IHRlc3RzIGlmIHRoZSByZXR1cm4gdmFsdWUgaXMgemVyby4KICAgICB2b2lkIGZhc3RF
eGNlcHRpb25DaGVjaygpCiAgICAgewotICAgICAgICBjYWxsRXhjZXB0aW9uRnV6eigqdm0oKSk7
CisgICAgICAgIGNhbGxFeGNlcHRpb25GdXp6KHZtKCkpOwogICAgICAgICBtX2V4Y2VwdGlvbkNo
ZWNrcy5hcHBlbmQoYnJhbmNoVGVzdFB0cihaZXJvLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikp
OwogICAgIH0KICAgICAKQEAgLTI1NCw3ICsyNTQsNyBAQCBwdWJsaWM6CiAKICAgICBQQ1RvQ29k
ZU9yaWdpbk1hcEJ1aWxkZXImIHBjVG9Db2RlT3JpZ2luTWFwQnVpbGRlcigpIHsgcmV0dXJuIG1f
cGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyOyB9CiAKLSAgICBWTSogdm0oKSB7IHJldHVybiAmbV9n
cmFwaC5tX3ZtOyB9CisgICAgVk0mIHZtKCkgeyByZXR1cm4gbV9ncmFwaC5tX3ZtOyB9CiAKIHBy
aXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIE9TUkV4aXRKdW1wUGxhY2Vob2xkZXI7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xhenlKU1ZhbHVlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xhenlKU1ZhbHVlLmNwcAkocmV2aXNpb24g
MjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMYXp5SlNWYWx1ZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEz
LCAyMDE0LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDksMTEgKzQ5LDExIEBAIEpTVmFsdWUgTGF6eUpT
VmFsdWU6OmdldFZhbHVlKFZNJiB2bSkgY28KICAgICBjYXNlIEtub3duVmFsdWU6CiAgICAgICAg
IHJldHVybiB2YWx1ZSgpLT52YWx1ZSgpOwogICAgIGNhc2UgU2luZ2xlQ2hhcmFjdGVyU3RyaW5n
OgotICAgICAgICByZXR1cm4ganNTaW5nbGVDaGFyYWN0ZXJTdHJpbmcoJnZtLCB1LmNoYXJhY3Rl
cik7CisgICAgICAgIHJldHVybiBqc1NpbmdsZUNoYXJhY3RlclN0cmluZyh2bSwgdS5jaGFyYWN0
ZXIpOwogICAgIGNhc2UgS25vd25TdHJpbmdJbXBsOgotICAgICAgICByZXR1cm4ganNTdHJpbmco
JnZtLCB1LnN0cmluZ0ltcGwpOworICAgICAgICByZXR1cm4ganNTdHJpbmcodm0sIHUuc3RyaW5n
SW1wbCk7CiAgICAgY2FzZSBOZXdTdHJpbmdJbXBsOgotICAgICAgICByZXR1cm4ganNTdHJpbmco
JnZtLCBBdG9tU3RyaW5nSW1wbDo6YWRkKHUuc3RyaW5nSW1wbCkpOworICAgICAgICByZXR1cm4g
anNTdHJpbmcodm0sIEF0b21TdHJpbmdJbXBsOjphZGQodS5zdHJpbmdJbXBsKSk7CiAgICAgfQog
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIEpTVmFsdWUoKTsK
QEAgLTI1MSw3ICsyNTEsNyBAQCB2b2lkIExhenlKU1ZhbHVlOjplbWl0KENDYWxsSGVscGVycyYg
aml0CiAgICAgCiAgICAgaml0LmFkZExpbmtUYXNrKAogICAgICAgICBbY29kZUJsb2NrLCBsYWJl
bCwgdGhpc1ZhbHVlXSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAgSlNW
YWx1ZSByZWFsVmFsdWUgPSB0aGlzVmFsdWUuZ2V0VmFsdWUoKmNvZGVCbG9jay0+dm0oKSk7Cisg
ICAgICAgICAgICBKU1ZhbHVlIHJlYWxWYWx1ZSA9IHRoaXNWYWx1ZS5nZXRWYWx1ZShjb2RlQmxv
Y2stPnZtKCkpOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVhbFZhbHVlLmlzQ2VsbCgp
KTsKIAogICAgICAgICAgICAgY29kZUJsb2NrLT5hZGRDb25zdGFudChyZWFsVmFsdWUpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAJKHJldmlzaW9uIDI0
OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMDksNyArMTA5LDcgQEAgdm9pZCogcHJlcGFyZU9TUkVudHJ5KEV4ZWNT
dGF0ZSogZXhlYywgQwogICAgICAgICAgICAgIiBmcm9tIGJjIyIsIGJ5dGVjb2RlSW5kZXgsICJc
biIpOwogICAgIH0KICAgICAKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0g
PSBleGVjLT52bSgpOwogCiAgICAgc2FuaXRpemVTdGFja0ZvclZNKHZtKTsKICAgICAKQEAgLTIz
OCw3ICsyMzgsNyBAQCB2b2lkKiBwcmVwYXJlT1NSRW50cnkoRXhlY1N0YXRlKiBleGVjLCBDCiAg
ICAgLy8gICAgd291bGQgaGF2ZSBvdGhlcndpc2UganVzdCBrZXB0IHJ1bm5pbmcgYWxiZWl0IGxl
c3MgcXVpY2tseS4KICAgICAKICAgICB1bnNpZ25lZCBmcmFtZVNpemVGb3JDaGVjayA9IGppdENv
ZGUtPmNvbW1vbi5yZXF1aXJlZFJlZ2lzdGVyQ291bnRGb3JFeGVjdXRpb25BbmRFeGl0KCk7Ci0g
ICAgaWYgKFVOTElLRUxZKCF2bS0+ZW5zdXJlU3RhY2tDYXBhY2l0eUZvcigmZXhlYy0+cmVnaXN0
ZXJzKClbdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoZnJhbWVTaXplRm9yQ2hlY2sgLSAxKS5vZmZz
ZXQoKV0pKSkgeworICAgIGlmIChVTkxJS0VMWSghdm0uZW5zdXJlU3RhY2tDYXBhY2l0eUZvcigm
ZXhlYy0+cmVnaXN0ZXJzKClbdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoZnJhbWVTaXplRm9yQ2hl
Y2sgLSAxKS5vZmZzZXQoKV0pKSkgewogICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigp
KQogICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICBPU1IgZmFpbGVkIGJlY2F1c2Ugc3RhY2sgZ3Jv
d3RoIGZhaWxlZC5cbiIpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTI1OCw3ICsyNTgs
NyBAQCB2b2lkKiBwcmVwYXJlT1NSRW50cnkoRXhlY1N0YXRlKiBleGVjLCBDCiAgICAgdW5zaWdu
ZWQgYmFzZWxpbmVGcmFtZVNpemUgPSBlbnRyeS0+bV9leHBlY3RlZFZhbHVlcy5udW1iZXJPZkxv
Y2FscygpOwogICAgIHVuc2lnbmVkIG1heEZyYW1lU2l6ZSA9IHN0ZDo6bWF4KGZyYW1lU2l6ZSwg
YmFzZWxpbmVGcmFtZVNpemUpOwogCi0gICAgUmVnaXN0ZXIqIHNjcmF0Y2ggPSBiaXR3aXNlX2Nh
c3Q8UmVnaXN0ZXIqPih2bS0+c2NyYXRjaEJ1ZmZlckZvclNpemUoc2l6ZW9mKFJlZ2lzdGVyKSAq
ICgyICsgQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMgKyBtYXhGcmFtZVNpemUpKS0+
ZGF0YUJ1ZmZlcigpKTsKKyAgICBSZWdpc3Rlciogc2NyYXRjaCA9IGJpdHdpc2VfY2FzdDxSZWdp
c3Rlcio+KHZtLnNjcmF0Y2hCdWZmZXJGb3JTaXplKHNpemVvZihSZWdpc3RlcikgKiAoMiArIENh
bGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzICsgbWF4RnJhbWVTaXplKSktPmRhdGFCdWZm
ZXIoKSk7CiAgICAgCiAgICAgKmJpdHdpc2VfY2FzdDxzaXplX3QqPihzY3JhdGNoICsgMCkgPSBm
cmFtZVNpemU7CiAgICAgCkBAIC0zMTEsNyArMzExLDcgQEAgdm9pZCogcHJlcGFyZU9TUkVudHJ5
KEV4ZWNTdGF0ZSogZXhlYywgQwogICAgIFJlZ2lzdGVyU2V0IGRvbnRTYXZlUmVnaXN0ZXJzID0g
UmVnaXN0ZXJTZXQoUmVnaXN0ZXJTZXQ6OnN0YWNrUmVnaXN0ZXJzKCksIFJlZ2lzdGVyU2V0Ojph
bGxGUFJzKCkpOwogCiAgICAgdW5zaWduZWQgcmVnaXN0ZXJDb3VudCA9IHJlZ2lzdGVyU2F2ZUxv
Y2F0aW9ucy0+c2l6ZSgpOwotICAgIFZNRW50cnlSZWNvcmQqIHJlY29yZCA9IHZtRW50cnlSZWNv
cmQodm0tPnRvcEVudHJ5RnJhbWUpOworICAgIFZNRW50cnlSZWNvcmQqIHJlY29yZCA9IHZtRW50
cnlSZWNvcmQodm0udG9wRW50cnlGcmFtZSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHJlZ2lzdGVyQ291bnQ7IGkrKykgewogICAgICAgICBSZWdpc3RlckF0T2Zmc2V0IGN1cnJlbnRF
bnRyeSA9IHJlZ2lzdGVyU2F2ZUxvY2F0aW9ucy0+YXQoaSk7CiAgICAgICAgIGlmIChkb250U2F2
ZVJlZ2lzdGVycy5nZXQoY3VycmVudEVudHJ5LnJlZygpKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAyMSwx
NyArMTAyMSwxNyBAQCB2b2lkIE9TUkV4aXQ6OmVtaXRSZXN0b3JlQXJndW1lbnRzKENDYWxsCiAK
IHZvaWQgSklUX09QRVJBVElPTiBPU1JFeGl0Ojpjb21waWxlT1NSRXhpdChFeGVjU3RhdGUqIGV4
ZWMpCiB7Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUoKnZtKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIGlmICh2YWxpZGF0ZURGR0Rv
ZXNHQykgewogICAgICAgICAvLyBXZSdyZSBhYm91dCB0byBleGl0IG9wdGltaXplZCBjb2RlLiBT
bywgdGhlcmUncyBubyBsb25nZXIgYW55IG9wdGltaXplZAogICAgICAgICAvLyBjb2RlIHJ1bm5p
bmcgdGhhdCBleHBlY3RzIG5vIEdDLgotICAgICAgICB2bS0+aGVhcC5zZXRFeHBlY3REb2VzR0Mo
dHJ1ZSk7CisgICAgICAgIHZtLmhlYXAuc2V0RXhwZWN0RG9lc0dDKHRydWUpOwogICAgIH0KIAot
ICAgIGlmICh2bS0+Y2FsbEZyYW1lRm9yQ2F0Y2gpCi0gICAgICAgIFJFTEVBU0VfQVNTRVJUKHZt
LT5jYWxsRnJhbWVGb3JDYXRjaCA9PSBleGVjKTsKKyAgICBpZiAodm0uY2FsbEZyYW1lRm9yQ2F0
Y2gpCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHZtLmNhbGxGcmFtZUZvckNhdGNoID09IGV4ZWMp
OwogCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKICAgICBB
U1NFUlQoY29kZUJsb2NrKTsKQEAgLTEwMzksMTIgKzEwMzksMTIgQEAgdm9pZCBKSVRfT1BFUkFU
SU9OIE9TUkV4aXQ6OmNvbXBpbGVPU1JFeAogCiAgICAgLy8gSXQncyBzb3J0IG9mIHByZWZlcmFi
bGUgdGhhdCB3ZSBkb24ndCBHQyB3aGlsZSBpbiBoZXJlLiBBbnl3YXlzLCBkb2luZyBzbyB3b3Vs
ZG4ndAogICAgIC8vIHJlYWxseSBiZSBwcm9maXRhYmxlLgotICAgIERlZmVyR0NGb3JBV2hpbGUg
ZGVmZXJHQyh2bS0+aGVhcCk7CisgICAgRGVmZXJHQ0ZvckFXaGlsZSBkZWZlckdDKHZtLmhlYXAp
OwogCi0gICAgdWludDMyX3QgZXhpdEluZGV4ID0gdm0tPm9zckV4aXRJbmRleDsKKyAgICB1aW50
MzJfdCBleGl0SW5kZXggPSB2bS5vc3JFeGl0SW5kZXg7CiAgICAgT1NSRXhpdCYgZXhpdCA9IGNv
ZGVCbG9jay0+aml0Q29kZSgpLT5kZmcoKS0+b3NyRXhpdFtleGl0SW5kZXhdOwogCi0gICAgQVNT
RVJUKCF2bS0+Y2FsbEZyYW1lRm9yQ2F0Y2ggfHwgZXhpdC5tX2tpbmQgPT0gR2VuZXJpY1Vud2lu
ZCk7CisgICAgQVNTRVJUKCF2bS5jYWxsRnJhbWVGb3JDYXRjaCB8fCBleGl0Lm1fa2luZCA9PSBH
ZW5lcmljVW53aW5kKTsKICAgICBFWENFUFRJT05fQVNTRVJUX1VOVVNFRChzY29wZSwgISFzY29w
ZS5leGNlcHRpb24oKSB8fCAhZXhpdC5pc0V4Y2VwdGlvbkhhbmRsZXIoKSk7CiAgICAgCiAgICAg
cHJlcGFyZUNvZGVPcmlnaW5Gb3JPU1JFeGl0KGV4ZWMsIGV4aXQubV9jb2RlT3JpZ2luKTsKQEAg
LTEwNjMsOCArMTA2Myw4IEBAIHZvaWQgSklUX09QRVJBVElPTiBPU1JFeGl0Ojpjb21waWxlT1NS
RXgKICAgICAgICAgaWYgKGV4aXQubV9raW5kID09IEdlbmVyaWNVbndpbmQpIHsKICAgICAgICAg
ICAgIC8vIFdlIGFyZSBhY3RpbmcgYXMgYSBkZWZhY3RvIG9wX2NhdGNoIGJlY2F1c2Ugd2UgYXJy
aXZlIGhlcmUgZnJvbSBnZW5lcmljVW53aW5kKCkuCiAgICAgICAgICAgICAvLyBTbywgd2UgbXVz
dCByZXN0b3JlIG91ciBjYWxsIGZyYW1lIGFuZCBzdGFjayBwb2ludGVyLgotICAgICAgICAgICAg
aml0LnJlc3RvcmVDYWxsZWVTYXZlc0Zyb21FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0t
PnRvcEVudHJ5RnJhbWUpOwotICAgICAgICAgICAgaml0LmxvYWRQdHIodm0tPmFkZHJlc3NPZkNh
bGxGcmFtZUZvckNhdGNoKCksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKKyAgICAgICAg
ICAgIGppdC5yZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVy
KHZtLnRvcEVudHJ5RnJhbWUpOworICAgICAgICAgICAgaml0LmxvYWRQdHIodm0uYWRkcmVzc09m
Q2FsbEZyYW1lRm9yQ2F0Y2goKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOwogICAgICAg
ICB9CiAgICAgICAgIGppdC5hZGRQdHIoCiAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW0zMihjb2RlQmxvY2stPnN0YWNrUG9pbnRlck9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVy
KSksCkBAIC0xMDcyLDggKzEwNzIsOCBAQCB2b2lkIEpJVF9PUEVSQVRJT04gT1NSRXhpdDo6Y29t
cGlsZU9TUkV4CiAKICAgICAgICAgaml0LmppdEFzc2VydEhhc1ZhbGlkQ2FsbEZyYW1lKCk7CiAK
LSAgICAgICAgaWYgKFVOTElLRUxZKHZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIgJiYgY29kZUJs
b2NrLT5qaXRDb2RlKCktPmRmZ0NvbW1vbigpLT5jb21waWxhdGlvbikpIHsKLSAgICAgICAgICAg
IFByb2ZpbGVyOjpEYXRhYmFzZSYgZGF0YWJhc2UgPSAqdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxl
cjsKKyAgICAgICAgaWYgKFVOTElLRUxZKHZtLm1fcGVyQnl0ZWNvZGVQcm9maWxlciAmJiBjb2Rl
QmxvY2stPmppdENvZGUoKS0+ZGZnQ29tbW9uKCktPmNvbXBpbGF0aW9uKSkgeworICAgICAgICAg
ICAgUHJvZmlsZXI6OkRhdGFiYXNlJiBkYXRhYmFzZSA9ICp2bS5tX3BlckJ5dGVjb2RlUHJvZmls
ZXI7CiAgICAgICAgICAgICBQcm9maWxlcjo6Q29tcGlsYXRpb24qIGNvbXBpbGF0aW9uID0gY29k
ZUJsb2NrLT5qaXRDb2RlKCktPmRmZ0NvbW1vbigpLT5jb21waWxhdGlvbi5nZXQoKTsKIAogICAg
ICAgICAgICAgUHJvZmlsZXI6Ok9TUkV4aXQqIHByb2ZpbGVyRXhpdCA9IGNvbXBpbGF0aW9uLT5h
ZGRPU1JFeGl0KApAQCAtMTA4Miw3ICsxMDgyLDcgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIE9TUkV4
aXQ6OmNvbXBpbGVPU1JFeAogICAgICAgICAgICAgaml0LmFkZDY0KENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbTMyKDEpLCBDQ2FsbEhlbHBlcnM6OkFic29sdXRlQWRkcmVzcyhwcm9maWxlckV4aXQt
PmNvdW50ZXJBZGRyZXNzKCkpKTsKICAgICAgICAgfQogCi0gICAgICAgIGNvbXBpbGVFeGl0KGpp
dCwgKnZtLCBleGl0LCBvcGVyYW5kcywgcmVjb3ZlcnkpOworICAgICAgICBjb21waWxlRXhpdChq
aXQsIHZtLCBleGl0LCBvcGVyYW5kcywgcmVjb3ZlcnkpOwogCiAgICAgICAgIExpbmtCdWZmZXIg
cGF0Y2hCdWZmZXIoaml0LCBjb2RlQmxvY2spOwogICAgICAgICBleGl0Lm1fY29kZSA9IEZJTkFM
SVpFX0NPREVfSUYoCkBAIC0xMDk2LDcgKzEwOTYsNyBAQCB2b2lkIEpJVF9PUEVSQVRJT04gT1NS
RXhpdDo6Y29tcGlsZU9TUkV4CiAKICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAoZXhp
dC5jb2RlTG9jYXRpb25Gb3JSZXBhdGNoKCksIENvZGVMb2NhdGlvbkxhYmVsPE9TUkV4aXRQdHJU
YWc+KGV4aXQubV9jb2RlLmNvZGUoKSkpOwogCi0gICAgdm0tPm9zckV4aXRKdW1wRGVzdGluYXRp
b24gPSBleGl0Lm1fY29kZS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKKyAgICB2bS5vc3JF
eGl0SnVtcERlc3RpbmF0aW9uID0gZXhpdC5tX2NvZGUuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNz
KCk7CiB9CiAKIHZvaWQgT1NSRXhpdDo6Y29tcGlsZUV4aXQoQ0NhbGxIZWxwZXJzJiBqaXQsIFZN
JiB2bSwgY29uc3QgT1NSRXhpdCYgZXhpdCwgY29uc3QgT3BlcmFuZHM8VmFsdWVSZWNvdmVyeT4m
IG9wZXJhbmRzLCBTcGVjdWxhdGlvblJlY292ZXJ5KiByZWNvdmVyeSkKQEAgLTE2NDcsMTQgKzE2
NDcsMTQgQEAgdm9pZCBPU1JFeGl0Ojpjb21waWxlRXhpdChDQ2FsbEhlbHBlcnMmIAogCiB2b2lk
IEpJVF9PUEVSQVRJT04gT1NSRXhpdDo6ZGVidWdPcGVyYXRpb25QcmludFNwZWN1bGF0aW9uRmFp
bHVyZShFeGVjU3RhdGUqIGV4ZWMsIHZvaWQqIGRlYnVnSW5mb1Jhdywgdm9pZCogc2NyYXRjaCkK
IHsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwog
ICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogCiAgICAgU3BlY3Vs
YXRpb25GYWlsdXJlRGVidWdJbmZvKiBkZWJ1Z0luZm8gPSBzdGF0aWNfY2FzdDxTcGVjdWxhdGlv
bkZhaWx1cmVEZWJ1Z0luZm8qPihkZWJ1Z0luZm9SYXcpOwogICAgIENvZGVCbG9jayogY29kZUJs
b2NrID0gZGVidWdJbmZvLT5jb2RlQmxvY2s7CiAgICAgQ29kZUJsb2NrKiBhbHRlcm5hdGl2ZSA9
IGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKTsKICAgICBkYXRhTG9nKCJTcGVjdWxhdGlvbiBmYWls
dXJlIGluICIsICpjb2RlQmxvY2spOwotICAgIGRhdGFMb2coIiBAIGV4aXQgIyIsIHZtLT5vc3JF
eGl0SW5kZXgsICIgKGJjIyIsIGRlYnVnSW5mby0+Ynl0ZWNvZGVPZmZzZXQsICIsICIsIGV4aXRL
aW5kVG9TdHJpbmcoZGVidWdJbmZvLT5raW5kKSwgIikgd2l0aCAiKTsKKyAgICBkYXRhTG9nKCIg
QCBleGl0ICMiLCB2bS5vc3JFeGl0SW5kZXgsICIgKGJjIyIsIGRlYnVnSW5mby0+Ynl0ZWNvZGVP
ZmZzZXQsICIsICIsIGV4aXRLaW5kVG9TdHJpbmcoZGVidWdJbmZvLT5raW5kKSwgIikgd2l0aCAi
KTsKICAgICBpZiAoYWx0ZXJuYXRpdmUpIHsKICAgICAgICAgZGF0YUxvZygKICAgICAgICAgICAg
ICJleGVjdXRlQ291bnRlciA9ICIsIGFsdGVybmF0aXZlLT5qaXRFeGVjdXRlQ291bnRlcigpLApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21w
aWxlckNvbW1vbi5oCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0
MSw3IEBAIHZvaWQgcmVpZnlJbmxpbmVkQ2FsbEZyYW1lcyhDQ2FsbEhlbHBlcnMKIHZvaWQgYWRq
dXN0QW5kSnVtcFRvVGFyZ2V0KFZNJiwgQ0NhbGxIZWxwZXJzJiwgY29uc3QgT1NSRXhpdEJhc2Um
KTsKIAogdGVtcGxhdGUgPHR5cGVuYW1lIEpJVENvZGVUeXBlPgotdm9pZCBhZGp1c3RGcmFtZUFu
ZFN0YWNrSW5PU1JFeGl0Q29tcGlsZXJUaHVuayhNYWNyb0Fzc2VtYmxlciYgaml0LCBWTSogdm0s
IEpJVFR5cGUgaml0VHlwZSkKK3ZvaWQgYWRqdXN0RnJhbWVBbmRTdGFja0luT1NSRXhpdENvbXBp
bGVyVGh1bmsoTWFjcm9Bc3NlbWJsZXImIGppdCwgVk0mIHZtLCBKSVRUeXBlIGppdFR5cGUpCiB7
CiAgICAgQVNTRVJUKGppdFR5cGUgPT0gSklUVHlwZTo6REZHSklUIHx8IGppdFR5cGUgPT0gSklU
VHlwZTo6RlRMSklUKTsKIApAQCAtNTgsNyArNTgsNyBAQCB2b2lkIGFkanVzdEZyYW1lQW5kU3Rh
Y2tJbk9TUkV4aXRDb21waWxlCiAgICAgaWYgKGlzRlRMT1NSRXhpdCkKICAgICAgICAgc2NyYXRj
aFNpemUgKz0gc2l6ZW9mKHZvaWQqKTsKIAotICAgIFNjcmF0Y2hCdWZmZXIqIHNjcmF0Y2hCdWZm
ZXIgPSB2bS0+c2NyYXRjaEJ1ZmZlckZvclNpemUoc2NyYXRjaFNpemUpOworICAgIFNjcmF0Y2hC
dWZmZXIqIHNjcmF0Y2hCdWZmZXIgPSB2bS5zY3JhdGNoQnVmZmVyRm9yU2l6ZShzY3JhdGNoU2l6
ZSk7CiAgICAgY2hhciogYnVmZmVyID0gc3RhdGljX2Nhc3Q8Y2hhcio+KHNjcmF0Y2hCdWZmZXIt
PmRhdGFCdWZmZXIoKSk7CiAKICAgICBqaXQucHVzaFRvU2F2ZShHUFJJbmZvOjpyZWdUMSk7CkBA
IC04MCw3ICs4MCw3IEBAIHZvaWQgYWRqdXN0RnJhbWVBbmRTdGFja0luT1NSRXhpdENvbXBpbGUK
ICAgICBqaXQucG9wVG9SZXN0b3JlKEdQUkluZm86OnJlZ1QxKTsKIAogICAgIC8vIFdlIG5lZWQg
dG8gcmVzZXQgRlAgaW4gdGhlIGNhc2Ugb2YgYW4gZXhjZXB0aW9uLgotICAgIGppdC5sb2FkUHRy
KHZtLT5hZGRyZXNzT2ZDYWxsRnJhbWVGb3JDYXRjaCgpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAg
aml0LmxvYWRQdHIodm0uYWRkcmVzc09mQ2FsbEZyYW1lRm9yQ2F0Y2goKSwgR1BSSW5mbzo6cmVn
VDApOwogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRpZE5vdEhhdmVFeGNlcHRpb24gPSBqaXQu
YnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgR1BSSW5mbzo6cmVnVDApOwogICAg
IGppdC5tb3ZlKEdQUkluZm86OnJlZ1QwLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CiAg
ICAgZGlkTm90SGF2ZUV4Y2VwdGlvbi5saW5rKCZqaXQpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xODksNyArMTg5LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVmlld0NsYXNzPgogY2hhciogbmV3
VHlwZWRBcnJheVdpdGhTaXplKEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IGludDMyX3Qgc2l6ZSwgY2hhciogdmVjdG9yKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIGlmIChzaXplIDwgMCkgewpAQCAtMjE2LDkgKzIx
Niw5IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIHZvaWQgcHV0V2l0aFRoaXMoRXgKIHRlbXBsYXRl
PHR5cGVuYW1lIEJpZ0ludE9wZXJhdGlvbiwgdHlwZW5hbWUgTnVtYmVyT3BlcmF0aW9uPgogc3Rh
dGljIEFMV0FZU19JTkxJTkUgRW5jb2RlZEpTVmFsdWUgYmluYXJ5T3AoRXhlY1N0YXRlKiBleGVj
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyLCBC
aWdJbnRPcGVyYXRpb24mJiBiaWdJbnRPcCwgTnVtYmVyT3BlcmF0aW9uJiYgbnVtYmVyT3AsIGNv
bnN0IGNoYXIqIGVycm9yTWVzc2FnZSkKIHsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
dm0sIGV4ZWMpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7Cisg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgSlNWYWx1ZSBv
cDEgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMSk7CiAgICAgSlNWYWx1ZSBvcDIgPSBKU1Zh
bHVlOjpkZWNvZGUoZW5jb2RlZE9wMik7CkBAIC0yNDMsOSArMjQzLDkgQEAgc3RhdGljIEFMV0FZ
U19JTkxJTkUgRW5jb2RlZEpTVmFsdWUgYmluYQogdGVtcGxhdGU8dHlwZW5hbWUgQmlnSW50T3Bl
cmF0aW9uLCB0eXBlbmFtZSBJbnQzMk9wZXJhdGlvbj4KIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEVu
Y29kZWRKU1ZhbHVlIGJpdHdpc2VCaW5hcnlPcChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIsIEJpZ0ludE9wZXJhdGlv
biYmIGJpZ0ludE9wLCBJbnQzMk9wZXJhdGlvbiYmIGludDMyT3AsIGNvbnN0IGNoYXIqIGVycm9y
TWVzc2FnZSkKIHsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBleGVj
LT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwotICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7CisgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgSlNWYWx1ZSBvcDEgPSBKU1ZhbHVlOjpk
ZWNvZGUoZW5jb2RlZE9wMSk7CiAgICAgSlNWYWx1ZSBvcDIgPSBKU1ZhbHVlOjpkZWNvZGUoZW5j
b2RlZE9wMik7CkBAIC0yODksNyArMjg5LDcgQEAgZXh0ZXJuICJDIiB7CiAKIEVuY29kZWRKU1Zh
bHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVG9UaGlzKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZE9wKQogewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwg
ZXhlYyk7CiAKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkT3ApLnRvVGhpcyhleGVjLCBOb3RTdHJpY3RNb2RlKSk7CkBAIC0yOTcsNyArMjk3LDcgQEAg
RW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25UbwogCiBFbmNvZGVkSlNWYWx1
ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRvVGhpc1N0cmljdChFeGVjU3RhdGUqIGV4ZWMsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRPcCkKIHsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
dm0sIGV4ZWMpOwogCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZE9wKS50b1RoaXMoZXhlYywgU3RyaWN0TW9kZSkpOwpAQCAtMzA2LDcgKzMwNiw3IEBA
IEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVG8KIEpTQXJyYXkqIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uT2JqZWN0S2V5cyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRPYmplY3QpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogCiAgICAgSlNPYmplY3QqIG9iamVjdCA9IEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkT2JqZWN0KS50b09iamVjdChleGVjKTsKQEAgLTMxOCwxNCArMzE4LDE0IEBAIEpTQXJyYXkq
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uT2JqZWN0S2UKIEpTQXJyYXkqIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uT2JqZWN0S2V5c09iamVjdChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvYmpl
Y3QpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFj
ZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2
bSwgZXhlYyk7CiAgICAgcmV0dXJuIG93blByb3BlcnR5S2V5cyhleGVjLCBvYmplY3QsIFByb3Bl
cnR5TmFtZU1vZGU6OlN0cmluZ3MsIERvbnRFbnVtUHJvcGVydGllc01vZGU6OkV4Y2x1ZGUpOwog
fQogCiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uT2JqZWN0Q3JlYXRlKEV4ZWNTdGF0
ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFByb3RvdHlwZSkKIHsKICAgICBWTSYgdm0g
PSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVj
KTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBKU1ZhbHVlIHByb3RvdHlw
ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkUHJvdG90eXBlKTsKQEAgLTM0MywxNCArMzQzLDE0
IEBAIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25PYmplY3RDcmUKIEpTQ2VsbCogSklU
X09QRVJBVElPTiBvcGVyYXRpb25PYmplY3RDcmVhdGVPYmplY3QoRXhlY1N0YXRlKiBleGVjLCBK
U09iamVjdCogcHJvdG90eXBlKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIHJldHVybiBjb25zdHJ1Y3RFbXB0eU9iamVj
dChleGVjLCBwcm90b3R5cGUpOwogfQogCiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
Q3JlYXRlVGhpcyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBjb25zdHJ1Y3RvciwgdWludDMy
X3QgaW5saW5lQ2FwYWNpdHkpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogICAgIGlmIChjb25zdHJ1Y3Rvci0+dHlwZSgpID09IEpTRnVuY3Rpb25UeXBl
ICYmIGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY29uc3RydWN0b3IpLT5jYW5Vc2VBbGxvY2F0aW9uUHJv
ZmlsZSgpKSB7CiAgICAgICAgIGF1dG8gcmFyZURhdGEgPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNv
bnN0cnVjdG9yKS0+ZW5zdXJlUmFyZURhdGFBbmRBbGxvY2F0aW9uUHJvZmlsZShleGVjLCBpbmxp
bmVDYXBhY2l0eSk7CkBAIC0zNzcsNyArMzc3LDcgQEAgSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbkNyZWF0ZVRoaQogCiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ2FsbE9i
amVjdENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFRhcmdldCkKIHsKLSAgICBWTSogdm0gPSAmZXhl
Yy0+dm0oKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRy
YWNlciB0cmFjZXIodm0sIGV4ZWMpOwogCiAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkVGFyZ2V0KTsKQEAgLTM5MCw5ICszOTAsOSBAQCBKU0NlbGwqIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uQ2FsbE9iamVjCiAKIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRp
b25Ub09iamVjdChFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRUYXJnZXQsIFVuaXF1ZWRTdHJpbmdJbXBsKiBlcnJvck1l
c3NhZ2UpCiB7Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLSAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSgqdm0pOworICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpk
ZWNvZGUoZW5jb2RlZFRhcmdldCk7CiAgICAgQVNTRVJUKCF2YWx1ZS5pc09iamVjdCgpKTsKQEAg
LTQyMiw5ICs0MjIsOSBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZh
CiAKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmFsdWVCaXROb3QoRXhl
Y1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxKQogewotICAgIFZNKiB2bSA9
ICZleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUoKnZtKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CiAKICAgICBKU1ZhbHVlIG9wMSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AxKTsKIApAQCAt
NDkxLDkgKzQ5MSw5IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmEK
IAogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25WYWx1ZUJpdFJTaGlmdChF
eGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRPcDIpCiB7Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsK
LSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSgqdm0pOworICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEpTVmFsdWUgb3AxID0gSlNWYWx1
ZTo6ZGVjb2RlKGVuY29kZWRPcDEpOwogICAgIEpTVmFsdWUgb3AyID0gSlNWYWx1ZTo6ZGVjb2Rl
KGVuY29kZWRPcDIpOwpAQCAtNTA3LDkgKzUwNyw5IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uVmEKIAogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRp
b25WYWx1ZUJpdFVSU2hpZnQoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
T3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKQogewotICAgIFZNKiB2bSA9ICZleGVjLT52
bSgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcih2bSwgZXhlYyk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
KnZtKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBK
U1ZhbHVlIG9wMSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AxKTsKICAgICBKU1ZhbHVlIG9w
MiA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AyKTsKQEAgLTUyMyw3ICs1MjMsNyBAQCBFbmNv
ZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZhCiAKIEVuY29kZWRKU1ZhbHVlIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uVmFsdWVBZGROb3ROdW1iZXIoRXhlY1N0YXRlKiBleGVjLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKQogewot
ICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgCiAgICAgSlNWYWx1
ZSBvcDEgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMSk7CkBAIC01NjAsOSArNTYwLDkgQEAg
RW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25WYQogCiBkb3VibGUgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25Bcml0aEFicyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRPcDEpCiB7Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsK
LSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSgqdm0pOworICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEpTVmFsdWUgb3AxID0gSlNWYWx1
ZTo6ZGVjb2RlKGVuY29kZWRPcDEpOwogICAgIGRvdWJsZSBhID0gb3AxLnRvTnVtYmVyKGV4ZWMp
OwpAQCAtNTcyLDkgKzU3Miw5IEBAIGRvdWJsZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFyaXRo
QWJzKEUKIAogdWludDMyX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Bcml0aENsejMyKEV4ZWNT
dGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSkKIHsKLSAgICBWTSogdm0gPSAm
ZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKCp2bSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwog
CiAgICAgSlNWYWx1ZSBvcDEgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMSk7CiAgICAgdWlu
dDMyX3QgdmFsdWUgPSBvcDEudG9VSW50MzIoZXhlYyk7CkBAIC01ODQsOSArNTg0LDkgQEAgdWlu
dDMyX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Bcml0aENsegogCiBkb3VibGUgSklUX09QRVJB
VElPTiBvcGVyYXRpb25Bcml0aEZSb3VuZChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRPcDEpCiB7Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsK
LSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSgqdm0pOworICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEpTVmFsdWUgb3AxID0gSlNWYWx1
ZTo6ZGVjb2RlKGVuY29kZWRPcDEpOwogICAgIGRvdWJsZSBhID0gb3AxLnRvTnVtYmVyKGV4ZWMp
OwpAQCAtNTk3LDkgKzU5Nyw5IEBAIGRvdWJsZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFyaXRo
RlJvdW4KICNkZWZpbmUgREZHX0FSSVRIX1VOQVJZKGNhcGl0YWxpemVkTmFtZSwgbG93ZXJOYW1l
KSBcCiBkb3VibGUgSklUX09QRVJBVElPTiBvcGVyYXRpb25Bcml0aCMjY2FwaXRhbGl6ZWROYW1l
KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSkgXAogeyBcCi0gICAg
Vk0qIHZtID0gJmV4ZWMtPnZtKCk7IFwKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOyBcCiAgICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7IFwKLSAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSgqdm0pOyBcCisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOyBcCiAgICAgSlNWYWx1ZSBvcDEgPSBKU1ZhbHVlOjpkZWNvZGUoZW5j
b2RlZE9wMSk7IFwKICAgICBkb3VibGUgcmVzdWx0ID0gb3AxLnRvTnVtYmVyKGV4ZWMpOyBcCiAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgUE5hTik7IFwKQEAgLTYxMCw5ICs2MTAsOSBA
QCBkb3VibGUgSklUX09QRVJBVElPTiBvcGVyYXRpb25Bcml0aCMjY2FwCiAKIGRvdWJsZSBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbkFyaXRoU3FydChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRPcDEpCiB7Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgVk0mIHZt
ID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVj
KTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSgqdm0pOworICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEpTVmFsdWUgb3AxID0gSlNW
YWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDEpOwogICAgIGRvdWJsZSBhID0gb3AxLnRvTnVtYmVyKGV4
ZWMpOwpAQCAtNjIyLDkgKzYyMiw5IEBAIGRvdWJsZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFy
aXRoU3FydCgKIAogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25Bcml0aFJv
dW5kKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEFyZ3VtZW50KQogewot
ICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0gICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CiAKICAgICBKU1ZhbHVlIGFyZ3VtZW50ID0gSlNWYWx1ZTo6ZGVjb2RlKGVu
Y29kZWRBcmd1bWVudCk7CiAgICAgZG91YmxlIHZhbHVlT2ZBcmd1bWVudCA9IGFyZ3VtZW50LnRv
TnVtYmVyKGV4ZWMpOwpAQCAtNjM0LDkgKzYzNCw5IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uQXIKIAogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRp
b25Bcml0aEZsb29yKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEFyZ3Vt
ZW50KQogewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0gICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKKyAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBKU1ZhbHVlIGFyZ3VtZW50ID0gSlNWYWx1ZTo6
ZGVjb2RlKGVuY29kZWRBcmd1bWVudCk7CiAgICAgZG91YmxlIHZhbHVlT2ZBcmd1bWVudCA9IGFy
Z3VtZW50LnRvTnVtYmVyKGV4ZWMpOwpAQCAtNjQ2LDkgKzY0Niw5IEBAIEVuY29kZWRKU1ZhbHVl
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXIKIAogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElP
TiBvcGVyYXRpb25Bcml0aENlaWwoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkQXJndW1lbnQpCiB7Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsK
LSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSgqdm0pOworICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEpTVmFsdWUgYXJndW1lbnQgPSBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEFyZ3VtZW50KTsKICAgICBkb3VibGUgdmFsdWVPZkFyZ3Vt
ZW50ID0gYXJndW1lbnQudG9OdW1iZXIoZXhlYyk7CkBAIC02NTgsOSArNjU4LDkgQEAgRW5jb2Rl
ZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25BcgogCiBFbmNvZGVkSlNWYWx1ZSBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbkFyaXRoVHJ1bmMoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkQXJndW1lbnQpCiB7Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZt
LCBleGVjKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSgqdm0pOworICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEpTVmFsdWUgYXJn
dW1lbnQgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEFyZ3VtZW50KTsKICAgICBkb3VibGUgdHJ1
bmNhdGVkVmFsdWVPZkFyZ3VtZW50ID0gYXJndW1lbnQudG9JbnRlZ2VyUHJlc2VydmVOYU4oZXhl
Yyk7CkBAIC02NzEsNyArNjcxLDcgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVy
YXRpb25Bcgogc3RhdGljIEFMV0FZU19JTkxJTkUgRW5jb2RlZEpTVmFsdWUgZ2V0QnlWYWwoRXhl
Y1N0YXRlKiBleGVjLCBKU0NlbGwqIGJhc2UsIHVpbnQzMl90IGluZGV4KQogewogICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4
ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIAog
ICAgIGlmIChiYXNlLT5pc09iamVjdCgpKSB7CiAgICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBh
c09iamVjdChiYXNlKTsKQEAgLTY4OCw3ICs2ODgsNyBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSBF
bmNvZGVkSlNWYWx1ZSBnZXRCCiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
bkdldEJ5VmFsKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRQcm9wZXJ0eSkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgp
OwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6
OmRlY29kZShlbmNvZGVkQmFzZSk7CkBAIC03MjksNyArNzI5LDcgQEAgRW5jb2RlZEpTVmFsdWUg
SklUX09QRVJBVElPTiBvcGVyYXRpb25HZQogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBv
cGVyYXRpb25HZXRCeVZhbENlbGwoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGJhc2UsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRQcm9wZXJ0eSkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwot
ICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBKU1ZhbHVlIHByb3BlcnR5ID0gSlNWYWx1ZTo6ZGVj
b2RlKGVuY29kZWRQcm9wZXJ0eSk7CkBAIC03NjIsMTIgKzc2MiwxMiBAQCBFbmNvZGVkSlNWYWx1
ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdlCiAKIEFMV0FZU19JTkxJTkUgRW5jb2RlZEpTVmFs
dWUgZ2V0QnlWYWxDZWxsSW50KEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBiYXNlLCBpbnQzMl90
IGluZGV4KQogewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAg
CiAgICAgaWYgKGluZGV4IDwgMCkgewogICAgICAgICAvLyBHbyB0aGUgc2xvd2VzdCB3YXkgcG9z
c2libGUgYmVjYXVzZSBuZWdhdGl2ZSBpbmRpY2VzIGRvbid0IHVzZSBpbmRleGVkIHN0b3JhZ2Uu
Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZShiYXNlKS5nZXQoZXhlYywg
SWRlbnRpZmllcjo6ZnJvbShleGVjLCBpbmRleCkpKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShKU1ZhbHVlKGJhc2UpLmdldChleGVjLCBJZGVudGlmaWVyOjpmcm9tKHZtLCBpbmRl
eCkpKTsKICAgICB9CiAKICAgICAvLyBVc2UgdGhpcyBzaW5jZSB3ZSBrbm93IHRoYXQgdGhlIHZh
bHVlIGlzIG91dCBvZiBib3VuZHMuCkBAIC03ODcsNyArNzg3LDcgQEAgRW5jb2RlZEpTVmFsdWUg
SklUX09QRVJBVElPTiBvcGVyYXRpb25HZQogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBv
cGVyYXRpb25HZXRCeVZhbE9iamVjdFN0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogYmFz
ZSwgSlNDZWxsKiBzdHJpbmcpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CiAKQEAgLTgwMCw3ICs4MDAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbkdlCiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
bkdldEJ5VmFsT2JqZWN0U3ltYm9sKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBiYXNlLCBKU0Nl
bGwqIHN5bWJvbCkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxG
cmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIg
dHJhY2VyKHZtLCBleGVjKTsKIAogICAgIGF1dG8gcHJvcGVydHlOYW1lID0gYXNTeW1ib2woc3lt
Ym9sKS0+cHJpdmF0ZU5hbWUoKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGdldEJ5VmFs
T2JqZWN0KGV4ZWMsIHZtLCBhc09iamVjdChiYXNlKSwgcHJvcGVydHlOYW1lKSk7CkBAIC04MDks
NyArODA5LDcgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZQogdm9p
ZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRQcm9wZXJ0
eSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIAogICAgIHB1dEJ5VmFs
SW50ZXJuYWw8dHJ1ZSwgZmFsc2U+KGV4ZWMsIHZtLCBlbmNvZGVkQmFzZSwgZW5jb2RlZFByb3Bl
cnR5LCBlbmNvZGVkVmFsdWUpOwogfQpAQCAtODE3LDcgKzgxNyw3IEBAIHZvaWQgSklUX09QRVJB
VElPTiBvcGVyYXRpb25QdXRCeVZhbFN0cmkKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25Q
dXRCeVZhbE5vblN0cmljdChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRC
YXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvcGVydHksIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRWYWx1ZSkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKHZtLCBleGVjKTsKICAgICAKICAgICBwdXRCeVZhbEludGVybmFsPGZhbHNlLCBmYWxzZT4o
ZXhlYywgdm0sIGVuY29kZWRCYXNlLCBlbmNvZGVkUHJvcGVydHksIGVuY29kZWRWYWx1ZSk7CiB9
CkBAIC04MjUsNyArODI1LDcgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFs
Tm9uUwogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQ2VsbFN0cmljdChFeGVj
U3RhdGUqIGV4ZWMsIEpTQ2VsbCogY2VsbCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFByb3BlcnR5
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgCiAgICAgcHV0QnlWYWxJ
bnRlcm5hbDx0cnVlLCBmYWxzZT4oZXhlYywgdm0sIEpTVmFsdWU6OmVuY29kZShjZWxsKSwgZW5j
b2RlZFByb3BlcnR5LCBlbmNvZGVkVmFsdWUpOwogfQpAQCAtODMzLDcgKzgzMyw3IEBAIHZvaWQg
SklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbENlbGwKIHZvaWQgSklUX09QRVJBVElPTiBv
cGVyYXRpb25QdXRCeVZhbENlbGxOb25TdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGNl
bGwsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRQcm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFZhbHVlKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIodm0sIGV4ZWMpOwogICAgIAogICAgIHB1dEJ5VmFsSW50ZXJuYWw8ZmFsc2UsIGZhbHNlPihl
eGVjLCB2bSwgSlNWYWx1ZTo6ZW5jb2RlKGNlbGwpLCBlbmNvZGVkUHJvcGVydHksIGVuY29kZWRW
YWx1ZSk7CiB9CkBAIC04NDEsNyArODQxLDcgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
blB1dEJ5VmFsQ2VsbAogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQ2VsbFN0
cmluZ1N0cmljdChFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogY2VsbCwgSlNDZWxsKiBzdHJpbmcs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgp
OwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKIAogICAgIHB1dEJ5VmFsQ2VsbFN0
cmluZ0ludGVybmFsPHRydWUsIGZhbHNlPihleGVjLCB2bSwgY2VsbCwgYXNTdHJpbmcoc3RyaW5n
KSwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSkpOwogfQpAQCAtODQ5LDcgKzg0OSw3IEBA
IHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbENlbGwKIHZvaWQgSklUX09QRVJB
VElPTiBvcGVyYXRpb25QdXRCeVZhbENlbGxTdHJpbmdOb25TdHJpY3QoRXhlY1N0YXRlKiBleGVj
LCBKU0NlbGwqIGNlbGwsIEpTQ2VsbCogc3RyaW5nLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFs
dWUpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFj
ZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2
bSwgZXhlYyk7CiAKICAgICBwdXRCeVZhbENlbGxTdHJpbmdJbnRlcm5hbDxmYWxzZSwgZmFsc2U+
KGV4ZWMsIHZtLCBjZWxsLCBhc1N0cmluZyhzdHJpbmcpLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2Rl
ZFZhbHVlKSk7CiB9CkBAIC04NTcsNyArODU3LDcgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvblB1dEJ5VmFsQ2VsbAogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQ2Vs
bFN5bWJvbFN0cmljdChFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogY2VsbCwgSlNDZWxsKiBzeW1i
b2wsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52
bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKIAogICAgIGF1dG8gcHJvcGVy
dHlOYW1lID0gYXNTeW1ib2woc3ltYm9sKS0+cHJpdmF0ZU5hbWUoKTsKICAgICBwdXRCeVZhbENl
bGxJbnRlcm5hbDx0cnVlLCBmYWxzZT4oZXhlYywgdm0sIGNlbGwsIHByb3BlcnR5TmFtZSwgSlNW
YWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSkpOwpAQCAtODY2LDcgKzg2Niw3IEBAIHZvaWQgSklU
X09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbENlbGwKIHZvaWQgSklUX09QRVJBVElPTiBvcGVy
YXRpb25QdXRCeVZhbENlbGxTeW1ib2xOb25TdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwq
IGNlbGwsIEpTQ2VsbCogc3ltYm9sLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7
CiAKICAgICBhdXRvIHByb3BlcnR5TmFtZSA9IGFzU3ltYm9sKHN5bWJvbCktPnByaXZhdGVOYW1l
KCk7CiAgICAgcHV0QnlWYWxDZWxsSW50ZXJuYWw8ZmFsc2UsIGZhbHNlPihleGVjLCB2bSwgY2Vs
bCwgcHJvcGVydHlOYW1lLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSk7CkBAIC04NzUs
NyArODc1LDcgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQ2VsbAogdm9p
ZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNTdHJpY3Qo
RXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogb2JqZWN0LCBpbnQzMl90IGluZGV4LCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgCiAgICAgaWYgKGluZGV4ID49IDApIHsK
ICAgICAgICAgb2JqZWN0LT5wdXRCeUluZGV4SW5saW5lKGV4ZWMsIGluZGV4LCBKU1ZhbHVlOjpk
ZWNvZGUoZW5jb2RlZFZhbHVlKSwgdHJ1ZSk7CkBAIC04ODQsMTIgKzg4NCwxMiBAQCB2b2lkIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxCZXlvCiAgICAgCiAgICAgUHV0UHJvcGVydHlT
bG90IHNsb3Qob2JqZWN0LCB0cnVlKTsKICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+cHV0
KAotICAgICAgICBvYmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgaW5kZXgpLCBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwgc2xvdCk7CisgICAgICAgIG9iamVjdCwgZXhl
YywgSWRlbnRpZmllcjo6ZnJvbSh2bSwgaW5kZXgpLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZh
bHVlKSwgc2xvdCk7CiB9CiAKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbEJl
eW9uZEFycmF5Qm91bmRzTm9uU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9iamVj
dCwgaW50MzJfdCBpbmRleCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIFZN
KiB2bSA9ICZleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZl
Q2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgCiAgICAgaWYgKGluZGV4ID49
IDApIHsKQEAgLTg5OCwxMyArODk4LDEzIEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25Q
dXRCeVZhbEJleW8KICAgICB9CiAgICAgCiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3Qob2JqZWN0
LCBmYWxzZSk7Ci0gICAgb2JqZWN0LT5tZXRob2RUYWJsZSgqdm0pLT5wdXQoCi0gICAgICAgIG9i
amVjdCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpbmRleCksIEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkVmFsdWUpLCBzbG90KTsKKyAgICBvYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+cHV0
KAorICAgICAgICBvYmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20odm0sIGluZGV4KSwgSlNW
YWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSksIHNsb3QpOwogfQogCiB2b2lkIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uUHV0RG91YmxlQnlWYWxCZXlvbmRBcnJheUJvdW5kc1N0cmljdChFeGVjU3Rh
dGUqIGV4ZWMsIEpTT2JqZWN0KiBvYmplY3QsIGludDMyX3QgaW5kZXgsIGRvdWJsZSB2YWx1ZSkK
IHsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwog
ICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIAogICAgIEpT
VmFsdWUganNWYWx1ZSA9IEpTVmFsdWUoSlNWYWx1ZTo6RW5jb2RlQXNEb3VibGUsIHZhbHVlKTsK
QEAgLTkxNSwxMyArOTE1LDEzIEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXREb3Vi
bGVCeVYKICAgICB9CiAgICAgCiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3Qob2JqZWN0LCB0cnVl
KTsKLSAgICBvYmplY3QtPm1ldGhvZFRhYmxlKCp2bSktPnB1dCgKLSAgICAgICAgb2JqZWN0LCBl
eGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGluZGV4KSwganNWYWx1ZSwgc2xvdCk7CisgICAg
b2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPnB1dCgKKyAgICAgICAgb2JqZWN0LCBleGVjLCBJZGVu
dGlmaWVyOjpmcm9tKHZtLCBpbmRleCksIGpzVmFsdWUsIHNsb3QpOwogfQogCiB2b2lkIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uUHV0RG91YmxlQnlWYWxCZXlvbmRBcnJheUJvdW5kc05vblN0cmlj
dChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvYmplY3QsIGludDMyX3QgaW5kZXgsIGRvdWJs
ZSB2YWx1ZSkKIHsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBleGVj
LT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAg
IAogICAgIEpTVmFsdWUganNWYWx1ZSA9IEpTVmFsdWUoSlNWYWx1ZTo6RW5jb2RlQXNEb3VibGUs
IHZhbHVlKTsKQEAgLTkzMiwxNCArOTMyLDE0IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRp
b25QdXREb3VibGVCeVYKICAgICB9CiAgICAgCiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3Qob2Jq
ZWN0LCBmYWxzZSk7Ci0gICAgb2JqZWN0LT5tZXRob2RUYWJsZSgqdm0pLT5wdXQoCi0gICAgICAg
IG9iamVjdCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpbmRleCksIGpzVmFsdWUsIHNs
b3QpOworICAgIG9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5wdXQoCisgICAgICAgIG9iamVjdCwg
ZXhlYywgSWRlbnRpZmllcjo6ZnJvbSh2bSwgaW5kZXgpLCBqc1ZhbHVlLCBzbG90KTsKIH0KIAog
dm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dERvdWJsZUJ5VmFsRGlyZWN0QmV5b25kQXJy
YXlCb3VuZHNTdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogb2JqZWN0LCBpbnQzMl90
IGluZGV4LCBkb3VibGUgdmFsdWUpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAKICAgICBKU1ZhbHVlIGpzVmFsdWUgPSBKU1Zh
bHVlKEpTVmFsdWU6OkVuY29kZUFzRG91YmxlLCB2YWx1ZSk7CiAKQEAgLTk0OSwxMyArOTQ5LDEz
IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXREb3VibGVCeVYKICAgICB9CiAKICAg
ICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChvYmplY3QsIHRydWUpOwotICAgIENvbW1vblNsb3dQYXRo
czo6cHV0RGlyZWN0V2l0aFJlaWZ5KHZtLCBleGVjLCBvYmplY3QsIElkZW50aWZpZXI6OmZyb20o
ZXhlYywgaW5kZXgpLCBqc1ZhbHVlLCBzbG90KTsKKyAgICBDb21tb25TbG93UGF0aHM6OnB1dERp
cmVjdFdpdGhSZWlmeSh2bSwgZXhlYywgb2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tKHZtLCBpbmRl
eCksIGpzVmFsdWUsIHNsb3QpOwogfQogCiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0
RG91YmxlQnlWYWxEaXJlY3RCZXlvbmRBcnJheUJvdW5kc05vblN0cmljdChFeGVjU3RhdGUqIGV4
ZWMsIEpTT2JqZWN0KiBvYmplY3QsIGludDMyX3QgaW5kZXgsIGRvdWJsZSB2YWx1ZSkKIHsKICAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
JnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsK
IAogICAgIEpTVmFsdWUganNWYWx1ZSA9IEpTVmFsdWUoSlNWYWx1ZTo6RW5jb2RlQXNEb3VibGUs
IHZhbHVlKTsKIApAQCAtOTY1LDEzICs5NjUsMTMgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvblB1dERvdWJsZUJ5VgogICAgIH0KIAogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KG9iamVj
dCwgZmFsc2UpOwotICAgIENvbW1vblNsb3dQYXRoczo6cHV0RGlyZWN0V2l0aFJlaWZ5KHZtLCBl
eGVjLCBvYmplY3QsIElkZW50aWZpZXI6OmZyb20oZXhlYywgaW5kZXgpLCBqc1ZhbHVlLCBzbG90
KTsKKyAgICBDb21tb25TbG93UGF0aHM6OnB1dERpcmVjdFdpdGhSZWlmeSh2bSwgZXhlYywgb2Jq
ZWN0LCBJZGVudGlmaWVyOjpmcm9tKHZtLCBpbmRleCksIGpzVmFsdWUsIHNsb3QpOwogfQogCiB2
b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxEaXJlY3RTdHJpY3QoRXhlY1N0YXRl
KiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFByb3BlcnR5LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7
CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgCiAgICAg
cHV0QnlWYWxJbnRlcm5hbDx0cnVlLCB0cnVlPihleGVjLCB2bSwgZW5jb2RlZEJhc2UsIGVuY29k
ZWRQcm9wZXJ0eSwgZW5jb2RlZFZhbHVlKTsKIH0KQEAgLTk3OSw3ICs5NzksNyBAQCB2b2lkIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxEaXJlCiB2b2lkIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uUHV0QnlWYWxEaXJlY3ROb25TdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkQmFzZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFByb3BlcnR5LCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgCiAgICAgcHV0QnlWYWxJbnRlcm5hbDxm
YWxzZSwgdHJ1ZT4oZXhlYywgdm0sIGVuY29kZWRCYXNlLCBlbmNvZGVkUHJvcGVydHksIGVuY29k
ZWRWYWx1ZSk7CiB9CkBAIC05ODcsNyArOTg3LDcgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvblB1dEJ5VmFsRGlyZQogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsRGly
ZWN0Q2VsbFN0cmljdChFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogY2VsbCwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFByb3BlcnR5LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2
bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAg
ICAgCiAgICAgcHV0QnlWYWxJbnRlcm5hbDx0cnVlLCB0cnVlPihleGVjLCB2bSwgSlNWYWx1ZTo6
ZW5jb2RlKGNlbGwpLCBlbmNvZGVkUHJvcGVydHksIGVuY29kZWRWYWx1ZSk7CiB9CkBAIC05OTUs
NyArOTk1LDcgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsRGlyZQogdm9p
ZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsRGlyZWN0Q2VsbE5vblN0cmljdChFeGVj
U3RhdGUqIGV4ZWMsIEpTQ2VsbCogY2VsbCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFByb3BlcnR5
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgCiAgICAgcHV0QnlWYWxJ
bnRlcm5hbDxmYWxzZSwgdHJ1ZT4oZXhlYywgdm0sIEpTVmFsdWU6OmVuY29kZShjZWxsKSwgZW5j
b2RlZFByb3BlcnR5LCBlbmNvZGVkVmFsdWUpOwogfQpAQCAtMTAwMyw3ICsxMDAzLDcgQEAgdm9p
ZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsRGlyZQogdm9pZCBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvblB1dEJ5VmFsRGlyZWN0Q2VsbFN0cmluZ1N0cmljdChFeGVjU3RhdGUqIGV4ZWMs
IEpTQ2VsbCogY2VsbCwgSlNDZWxsKiBzdHJpbmcsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1
ZSkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZt
LCBleGVjKTsKIAogICAgIHB1dEJ5VmFsQ2VsbFN0cmluZ0ludGVybmFsPHRydWUsIHRydWU+KGV4
ZWMsIHZtLCBjZWxsLCBhc1N0cmluZyhzdHJpbmcpLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZh
bHVlKSk7CiB9CkBAIC0xMDExLDcgKzEwMTEsNyBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uUHV0QnlWYWxEaXJlCiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxEaXJl
Y3RDZWxsU3RyaW5nTm9uU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBjZWxsLCBKU0Nl
bGwqIHN0cmluZywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMp
OworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogCiAgICAgcHV0
QnlWYWxDZWxsU3RyaW5nSW50ZXJuYWw8ZmFsc2UsIHRydWU+KGV4ZWMsIHZtLCBjZWxsLCBhc1N0
cmluZyhzdHJpbmcpLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSk7CiB9CkBAIC0xMDE5
LDcgKzEwMTksNyBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxEaXJlCiB2
b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxEaXJlY3RDZWxsU3ltYm9sU3RyaWN0
KEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBjZWxsLCBKU0NlbGwqIHN5bWJvbCwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogCiAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBhc1N5
bWJvbChzeW1ib2wpLT5wcml2YXRlTmFtZSgpOwogICAgIHB1dEJ5VmFsQ2VsbEludGVybmFsPHRy
dWUsIHRydWU+KGV4ZWMsIHZtLCBjZWxsLCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWU6OmRlY29kZShl
bmNvZGVkVmFsdWUpKTsKQEAgLTEwMjgsNyArMTAyOCw3IEBAIHZvaWQgSklUX09QRVJBVElPTiBv
cGVyYXRpb25QdXRCeVZhbERpcmUKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZh
bERpcmVjdENlbGxTeW1ib2xOb25TdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGNlbGws
IEpTQ2VsbCogc3ltYm9sLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwg
ZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAKICAg
ICBhdXRvIHByb3BlcnR5TmFtZSA9IGFzU3ltYm9sKHN5bWJvbCktPnByaXZhdGVOYW1lKCk7CiAg
ICAgcHV0QnlWYWxDZWxsSW50ZXJuYWw8ZmFsc2UsIHRydWU+KGV4ZWMsIHZtLCBjZWxsLCBwcm9w
ZXJ0eU5hbWUsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpKTsKQEAgLTEwMzcsMjAgKzEw
MzcsMjAgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsRGlyZQogdm9pZCBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsRGlyZWN0QmV5b25kQXJyYXlCb3VuZHNTdHJp
Y3QoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogb2JqZWN0LCBpbnQzMl90IGluZGV4LCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgaWYgKGluZGV4ID49IDApIHsKICAg
ICAgICAgb2JqZWN0LT5wdXREaXJlY3RJbmRleChleGVjLCBpbmRleCwgSlNWYWx1ZTo6ZGVjb2Rl
KGVuY29kZWRWYWx1ZSksIDAsIFB1dERpcmVjdEluZGV4U2hvdWxkVGhyb3cpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogICAgIAogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KG9iamVjdCwgdHJ1
ZSk7Ci0gICAgQ29tbW9uU2xvd1BhdGhzOjpwdXREaXJlY3RXaXRoUmVpZnkodm0sIGV4ZWMsIG9i
amVjdCwgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpbmRleCksIEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkVmFsdWUpLCBzbG90KTsKKyAgICBDb21tb25TbG93UGF0aHM6OnB1dERpcmVjdFdpdGhSZWlm
eSh2bSwgZXhlYywgb2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tKHZtLCBpbmRleCksIEpTVmFsdWU6
OmRlY29kZShlbmNvZGVkVmFsdWUpLCBzbG90KTsKIH0KIAogdm9pZCBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvblB1dEJ5VmFsRGlyZWN0QmV5b25kQXJyYXlCb3VuZHNOb25TdHJpY3QoRXhlY1N0YXRl
KiBleGVjLCBKU09iamVjdCogb2JqZWN0LCBpbnQzMl90IGluZGV4LCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkVmFsdWUpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcih2bSwgZXhlYyk7CiAKICAgICBpZiAoaW5kZXggPj0gMCkgewogICAgICAgICBvYmpl
Y3QtPnB1dERpcmVjdEluZGV4KGV4ZWMsIGluZGV4LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZh
bHVlKSk7CkBAIC0xMDU4LDEyICsxMDU4LDEyIEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRp
b25QdXRCeVZhbERpcmUKICAgICB9CiAgICAgCiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3Qob2Jq
ZWN0LCBmYWxzZSk7Ci0gICAgQ29tbW9uU2xvd1BhdGhzOjpwdXREaXJlY3RXaXRoUmVpZnkodm0s
IGV4ZWMsIG9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpbmRleCksIEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkVmFsdWUpLCBzbG90KTsKKyAgICBDb21tb25TbG93UGF0aHM6OnB1dERpcmVj
dFdpdGhSZWlmeSh2bSwgZXhlYywgb2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tKHZtLCBpbmRleCks
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCBzbG90KTsKIH0KIAogRW5jb2RlZEpTVmFs
dWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25BcnJheVB1c2goRXhlY1N0YXRlKiBleGVjLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQXJyYXkqIGFycmF5KQogewotICAgIFZNKiB2bSA9
ICZleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgCiAgICAgYXJyYXktPnB1c2hJbmxpbmUo
ZXhlYywgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSkpOwpAQCAtMTA3Miw3ICsxMDcyLDcg
QEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25BcgogCiBFbmNvZGVkSlNW
YWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFycmF5UHVzaERvdWJsZShFeGVjU3RhdGUqIGV4
ZWMsIGRvdWJsZSB2YWx1ZSwgSlNBcnJheSogYXJyYXkpCiB7Ci0gICAgVk0qIHZtID0gJmV4ZWMt
PnZtKCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFj
ZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICAKICAgICBhcnJheS0+cHVzaElubGluZShleGVjLCBK
U1ZhbHVlKEpTVmFsdWU6OkVuY29kZUFzRG91YmxlLCB2YWx1ZSkpOwpAQCAtMTA4Miw3ICsxMDgy
LDcgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25BcgogRW5jb2RlZEpT
VmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25BcnJheVB1c2hNdWx0aXBsZShFeGVjU3RhdGUq
IGV4ZWMsIEpTQXJyYXkqIGFycmF5LCB2b2lkKiBidWZmZXIsIGludDMyX3QgZWxlbWVudENvdW50
KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0s
IGV4ZWMpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAg
IC8vIFdlIGFzc3VtZSB0aGF0IG11bHRpcGxlIEpTQXJyYXk6OnB1c2ggY2FsbHMgd2l0aCBBcnJh
eVdpdGhJbnQzMi9BcnJheVdpdGhDb250aWd1b3VzIGRvIG5vdCBjYXVzZSBKUyB0cmFwcy4KQEAg
LTExMDYsNyArMTEwNiw3IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
QXIKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXJyYXlQdXNoRG91Ymxl
TXVsdGlwbGUoRXhlY1N0YXRlKiBleGVjLCBKU0FycmF5KiBhcnJheSwgdm9pZCogYnVmZmVyLCBp
bnQzMl90IGVsZW1lbnRDb3VudCkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CiAKICAgICAvLyBXZSBhc3N1bWUgdGhhdCBtdWx0aXBsZSBKU0FycmF5Ojpw
dXNoIGNhbGxzIHdpdGggQXJyYXlXaXRoRG91YmxlIGRvIG5vdCBjYXVzZSBKUyB0cmFwcy4KQEAg
LTExMjUsNyArMTEyNSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
QXIKIAogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25BcnJheVBvcChFeGVj
U3RhdGUqIGV4ZWMsIEpTQXJyYXkqIGFycmF5KQogewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgp
OworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcih2bSwgZXhlYyk7CiAgICAgCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShhcnJheS0+
cG9wKGV4ZWMpKTsKQEAgLTExMzMsNyArMTEzMyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uQXIKICAgICAgICAgCiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvbkFycmF5UG9wQW5kUmVjb3Zlckxlbmd0aChFeGVjU3RhdGUqIGV4ZWMsIEpTQXJy
YXkqIGFycmF5KQogewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAg
ICAgCiAgICAgYXJyYXktPmJ1dHRlcmZseSgpLT5zZXRQdWJsaWNMZW5ndGgoYXJyYXktPmJ1dHRl
cmZseSgpLT5wdWJsaWNMZW5ndGgoKSArIDEpOwpAQCAtMTE0Niw3ICsxMTQ2LDcgQEAgRW5jb2Rl
ZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25SZQogICAgIFN1cGVyU2FtcGxlclNjb3Bl
IHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKICAgICAKICAgICBWTSYgdm0gPSBnbG9iYWxPYmpl
Y3QtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwor
ICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIAogICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUocmVnRXhwT2JqZWN0LT5leGVjSW5saW5lKGV4ZWMsIGdsb2Jh
bE9iamVjdCwgYXJndW1lbnQpKTsKIH0KQEAgLTExNTYsNyArMTE1Niw3IEBAIEVuY29kZWRKU1Zh
bHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUmUKICAgICBTdXBlclNhbXBsZXJTY29wZSBzdXBl
clNhbXBsZXJTY29wZShmYWxzZSk7CiAgICAgCiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52
bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgCiAgICAgSlNWYWx1ZSBhcmd1bWVudCA9IEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkQXJndW1lbnQpOwpAQCAtMTE3Myw3ICsxMTczLDcgQEAgRW5j
b2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25SZQogICAgIFN1cGVyU2FtcGxlclNj
b3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKICAgICAKICAgICBWTSYgdm0gPSBnbG9iYWxP
YmplY3QtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMp
OworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEpTVmFsdWUgYmFzZSA9IEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkQmFzZSk7CkBAIC0xMTk1LDcgKzExOTUsNyBAQCBFbmNvZGVk
SlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblJlCiAgICAgU3VwZXJTYW1wbGVyU2NvcGUg
c3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwogCiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52
bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKIAogICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIApAQCAtMTIyMCw3ICsxMjIwLDcgQEAgRW5jb2Rl
ZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25SZQogICAgIFN1cGVyU2FtcGxlclNjb3Bl
IHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKIAogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+
dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAKICAgICBpZiAoIXJlZ0V4
cE9iamVjdC0+cmVnRXhwKCktPmdsb2JhbCgpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKHJlZ0V4cE9iamVjdC0+ZXhlY0lubGluZShleGVjLCBnbG9iYWxPYmplY3QsIGFyZ3VtZW50
KSk7CkBAIC0xMjMyLDcgKzEyMzIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvblJlCiAgICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2Up
OwogCiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKHZtLCBleGVjKTsKIAogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKIApAQCAtMTI2MCw3ICsxMjYwLDcgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBv
cGVyYXRpb25SZQogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25QYXJzZUlu
dE5vUmFkaXhHZW5lcmljKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgdmFsdWUpCiB7
CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhl
Yyk7CiAKICAgICByZXR1cm4gdG9TdHJpbmdWaWV3KGV4ZWMsIEpTVmFsdWU6OmRlY29kZSh2YWx1
ZSksIFsmXSAoU3RyaW5nVmlldyB2aWV3KSB7CiAgICAgICAgIC8vIFRoaXMgdmVyc2lvbiBpcyBh
cyBpZiByYWRpeCB3YXMgdW5kZWZpbmVkLiBIZW5jZSwgdW5kZWZpbmVkLnRvTnVtYmVyKCkgPT09
IDAuCkBAIC0xMjcxLDcgKzEyNzEsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvblBhCiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblBhcnNlSW50
U3RyaW5nTm9SYWRpeChFeGVjU3RhdGUqIGV4ZWMsIEpTU3RyaW5nKiBzdHJpbmcpCiB7CiAgICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2
bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgYXV0byB2aWV3
V2l0aFN0cmluZyA9IHN0cmluZy0+dmlld1dpdGhVbmRlcmx5aW5nU3RyaW5nKGV4ZWMpOwpAQCAt
MTI4NCw3ICsxMjg0LDcgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25Q
YQogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25QYXJzZUludFN0cmluZyhF
eGVjU3RhdGUqIGV4ZWMsIEpTU3RyaW5nKiBzdHJpbmcsIGludDMyX3QgcmFkaXgpCiB7CiAgICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2
bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgYXV0byB2aWV3
V2l0aFN0cmluZyA9IHN0cmluZy0+dmlld1dpdGhVbmRlcmx5aW5nU3RyaW5nKGV4ZWMpOwpAQCAt
MTI5Niw3ICsxMjk2LDcgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25Q
YQogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25QYXJzZUludEdlbmVyaWMo
RXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSB2YWx1ZSwgaW50MzJfdCByYWRpeCkKIHsK
ICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVj
KTsKIAogICAgIHJldHVybiB0b1N0cmluZ1ZpZXcoZXhlYywgSlNWYWx1ZTo6ZGVjb2RlKHZhbHVl
KSwgWyZdIChTdHJpbmdWaWV3IHZpZXcpIHsKICAgICAgICAgcmV0dXJuIHBhcnNlSW50UmVzdWx0
KHBhcnNlSW50KHZpZXcsIHJhZGl4KSk7CkBAIC0xMzA4LDcgKzEzMDgsNyBAQCBzaXplX3QgSklU
X09QRVJBVElPTiBvcGVyYXRpb25SZWdFeHBUZXN0CiAgICAgU3VwZXJTYW1wbGVyU2NvcGUgc3Vw
ZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwogICAgIAogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+
dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAKICAgICByZXR1cm4gcmVn
RXhwT2JqZWN0LT50ZXN0SW5saW5lKGV4ZWMsIGdsb2JhbE9iamVjdCwgaW5wdXQpOwogfQpAQCAt
MTMxOCw3ICsxMzE4LDcgQEAgc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUmVnRXhwVGVz
dAogICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKICAgICAK
ICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
dm0sIGV4ZWMpOwogCiAgICAgSlNWYWx1ZSBhcmd1bWVudCA9IEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkQXJndW1lbnQpOwogCkBAIC0xMzMzLDcgKzEzMzMsNyBAQCBzaXplX3QgSklUX09QRVJBVElP
TiBvcGVyYXRpb25SZWdFeHBUZXN0CiAgICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVy
U2NvcGUoZmFsc2UpOwogICAgIAogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKLSAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwogCiAgICAgSlNWYWx1ZSBiYXNlID0gSlNWYWx1ZTo6ZGVjb2RlKGVu
Y29kZWRCYXNlKTsKQEAgLTEzNTQsNyArMTM1NCw3IEBAIHNpemVfdCBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvblJlZ0V4cFRlc3QKIAogSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblN1YkJp
Z0ludChFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogb3AxLCBKU0NlbGwqIG9wMikKIHsKLSAgICBW
TSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIAogICAgIEpTQmlnSW50KiBs
ZWZ0T3BlcmFuZCA9IGpzQ2FzdDxKU0JpZ0ludCo+KG9wMSk7CkBAIC0xMzY1LDcgKzEzNjUsNyBA
QCBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uU3ViQmlnSW50CiAKIEpTQ2VsbCogSklU
X09QRVJBVElPTiBvcGVyYXRpb25CaXROb3RCaWdJbnQoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwq
IG9wMSkKIHsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBleGVjLT52
bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogCiAgICAg
SlNCaWdJbnQqIG9wZXJhbmQgPSBqc0Nhc3Q8SlNCaWdJbnQqPihvcDEpOwpAQCAtMTM3NSw3ICsx
Mzc1LDcgQEAgSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkJpdE5vdEJpZwogCiBKU0Nl
bGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTXVsQmlnSW50KEV4ZWNTdGF0ZSogZXhlYywgSlND
ZWxsKiBvcDEsIEpTQ2VsbCogb3AyKQogewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2
bSwgZXhlYyk7CiAKICAgICBKU0JpZ0ludCogbGVmdE9wZXJhbmQgPSBqc0Nhc3Q8SlNCaWdJbnQq
PihvcDEpOwpAQCAtMTM4Niw3ICsxMzg2LDcgQEAgSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbk11bEJpZ0ludAogICAgIAogSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk1vZEJp
Z0ludChFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogb3AxLCBKU0NlbGwqIG9wMikKIHsKLSAgICBW
TSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIAogICAgIEpTQmlnSW50KiBs
ZWZ0T3BlcmFuZCA9IGpzQ2FzdDxKU0JpZ0ludCo+KG9wMSk7CkBAIC0xMzk3LDcgKzEzOTcsNyBA
QCBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTW9kQmlnSW50CiAKIEpTQ2VsbCogSklU
X09QRVJBVElPTiBvcGVyYXRpb25EaXZCaWdJbnQoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIG9w
MSwgSlNDZWxsKiBvcDIpCiB7Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgVk0mIHZt
ID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVj
KTsKICAgICAKICAgICBKU0JpZ0ludCogbGVmdE9wZXJhbmQgPSBqc0Nhc3Q8SlNCaWdJbnQqPihv
cDEpOwpAQCAtMTQwOCw3ICsxNDA4LDcgQEAgSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
bkRpdkJpZ0ludAogCiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUG93QmlnSW50KEV4
ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBvcDEsIEpTQ2VsbCogb3AyKQogewotICAgIFZNKiB2bSA9
ICZleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgCiAgICAgSlNCaWdJbnQqIGxlZnRPcGVy
YW5kID0ganNDYXN0PEpTQmlnSW50Kj4ob3AxKTsKQEAgLTE0MTksNyArMTQxOSw3IEBAIEpTQ2Vs
bCogSklUX09QRVJBVElPTiBvcGVyYXRpb25Qb3dCaWdJbnQKIAogSlNDZWxsKiBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvbkJpdEFuZEJpZ0ludChFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogb3AxLCBK
U0NlbGwqIG9wMikKIHsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwog
CiAgICAgSlNCaWdJbnQqIGxlZnRPcGVyYW5kID0ganNDYXN0PEpTQmlnSW50Kj4ob3AxKTsKQEAg
LTE0MzAsNyArMTQzMCw3IEBAIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25CaXRBbmRC
aWcKIAogSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkJpdExTaGlmdEJpZ0ludChFeGVj
U3RhdGUqIGV4ZWMsIEpTQ2VsbCogb3AxLCBKU0NlbGwqIG9wMikKIHsKLSAgICBWTSogdm0gPSAm
ZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogCiAgICAgSlNCaWdJbnQqIGxlZnRPcGVyYW5kID0g
anNDYXN0PEpTQmlnSW50Kj4ob3AxKTsKQEAgLTE0NDEsNyArMTQ0MSw3IEBAIEpTQ2VsbCogSklU
X09QRVJBVElPTiBvcGVyYXRpb25CaXRMU2hpZnQKIAogSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbkFkZEJpZ0ludChFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogb3AxLCBKU0NlbGwqIG9w
MikKIHsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgp
OwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIAogICAg
IEpTQmlnSW50KiBsZWZ0T3BlcmFuZCA9IGpzQ2FzdDxKU0JpZ0ludCo+KG9wMSk7CkBAIC0xNDUy
LDcgKzE0NTIsNyBAQCBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQWRkQmlnSW50CiAK
IEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25CaXRPckJpZ0ludChFeGVjU3RhdGUqIGV4
ZWMsIEpTQ2VsbCogb3AxLCBKU0NlbGwqIG9wMikKIHsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0o
KTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIodm0sIGV4ZWMpOwogICAgIAogICAgIEpTQmlnSW50KiBsZWZ0T3BlcmFuZCA9IGpzQ2Fz
dDxKU0JpZ0ludCo+KG9wMSk7CkBAIC0xNDYzLDcgKzE0NjMsNyBAQCBKU0NlbGwqIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uQml0T3JCaWdJCiAKIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRp
b25CaXRYb3JCaWdJbnQoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIG9wMSwgSlNDZWxsKiBvcDIp
CiB7Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsK
ICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKIAogICAgIEpTQmln
SW50KiBsZWZ0T3BlcmFuZCA9IGpzQ2FzdDxKU0JpZ0ludCo+KG9wMSk7CkBAIC0xNDc0LDcgKzE0
NzQsNyBAQCBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQml0WG9yQmlnCiAKIHNpemVf
dCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcUNlbGwoRXhlY1N0YXRlKiBl
eGVjLCBKU0NlbGwqIG9wMSwgSlNDZWxsKiBvcDIpCiB7Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZt
KCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIg
dHJhY2VyKHZtLCBleGVjKTsKICAgICAKICAgICByZXR1cm4gSlNWYWx1ZTo6c3RyaWN0RXF1YWxT
bG93Q2FzZUlubGluZShleGVjLCBvcDEsIG9wMik7CkBAIC0xNDgzLDE0ICsxNDgzLDE0IEBAIHNp
emVfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVTdHIKIHNpemVfdCBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvblNhbWVWYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGFy
ZzEsIEVuY29kZWRKU1ZhbHVlIGFyZzIpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAKICAgICByZXR1cm4gc2FtZVZhbHVlKGV4
ZWMsIEpTVmFsdWU6OmRlY29kZShhcmcxKSwgSlNWYWx1ZTo6ZGVjb2RlKGFyZzIpKTsKIH0KIAog
RW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25Ub1ByaW1pdGl2ZShFeGVjU3Rh
dGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIHZhbHVlKQogewotICAgIFZNKiB2bSA9ICZleGVjLT52
bSgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcih2bSwgZXhlYyk7CiAgICAgCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Zh
bHVlOjpkZWNvZGUodmFsdWUpLnRvUHJpbWl0aXZlKGV4ZWMpKTsKQEAgLTE0OTgsNyArMTQ5OCw3
IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVG8KIAogRW5jb2RlZEpT
VmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25Ub051bWJlcihFeGVjU3RhdGUqIGV4ZWMsIEVu
Y29kZWRKU1ZhbHVlIHZhbHVlKQogewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwg
ZXhlYyk7CiAKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKEpTVmFsdWU6OmRl
Y29kZSh2YWx1ZSkudG9OdW1iZXIoZXhlYykpKTsKQEAgLTE1MDcsNyArMTUwNyw3IEBAIEVuY29k
ZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVG8KIEVuY29kZWRKU1ZhbHVlIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uR2V0QnlWYWxXaXRoVGhpcyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVGhpcywgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZFN1YnNjcmlwdCkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwot
ICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkQmFzZSk7CkBAIC0xNTQ2LDIzICsxNTQ2LDIzIEBAIEVuY29kZWRKU1ZhbHVl
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2UKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25Q
dXRCeUlkV2l0aFRoaXNTdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkQmFzZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFRoaXMsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRWYWx1ZSwgVW5pcXVlZFN0cmluZ0ltcGwqIGltcGwpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAKLSAgICBwdXRXaXRoVGhp
czx0cnVlPihleGVjLCBlbmNvZGVkQmFzZSwgZW5jb2RlZFRoaXMsIGVuY29kZWRWYWx1ZSwgSWRl
bnRpZmllcjo6ZnJvbVVpZChleGVjLCBpbXBsKSk7CisgICAgcHV0V2l0aFRoaXM8dHJ1ZT4oZXhl
YywgZW5jb2RlZEJhc2UsIGVuY29kZWRUaGlzLCBlbmNvZGVkVmFsdWUsIElkZW50aWZpZXI6OmZy
b21VaWQodm0sIGltcGwpKTsKIH0KIAogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5
SWRXaXRoVGhpcyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkVGhpcywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBV
bmlxdWVkU3RyaW5nSW1wbCogaW1wbCkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKIAotICAgIHB1dFdpdGhUaGlzPGZhbHNlPihl
eGVjLCBlbmNvZGVkQmFzZSwgZW5jb2RlZFRoaXMsIGVuY29kZWRWYWx1ZSwgSWRlbnRpZmllcjo6
ZnJvbVVpZChleGVjLCBpbXBsKSk7CisgICAgcHV0V2l0aFRoaXM8ZmFsc2U+KGV4ZWMsIGVuY29k
ZWRCYXNlLCBlbmNvZGVkVGhpcywgZW5jb2RlZFZhbHVlLCBJZGVudGlmaWVyOjpmcm9tVWlkKHZt
LCBpbXBsKSk7CiB9CiAKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbFdpdGhU
aGlzU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRUaGlzLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkU3Vic2NyaXB0
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgSWRlbnRpZmllciBwcm9wZXJ0eSA9IEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkU3Vic2NyaXB0KS50b1Byb3BlcnR5S2V5KGV4ZWMpOwpAQCAtMTU3
NCw3ICsxNTc0LDcgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsV2l0aAog
dm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsV2l0aFRoaXMoRXhlY1N0YXRlKiBl
eGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFRo
aXMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3JpcHQsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRWYWx1ZSkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKHZtLCBleGVjKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CiAKICAgICBJZGVudGlmaWVyIHByb3BlcnR5ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRTdWJz
Y3JpcHQpLnRvUHJvcGVydHlLZXkoZXhlYyk7CkBAIC0xNTk2LDcgKzE1OTYsNyBAQCBBTFdBWVNf
SU5MSU5FIHN0YXRpYyB2b2lkIGRlZmluZURhdGFQcm9wCiB2b2lkIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uRGVmaW5lRGF0YVByb3BlcnR5KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGJhc2Us
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRQcm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZh
bHVlLCBpbnQzMl90IGF0dHJpYnV0ZXMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwogCiAgICAgSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUgPSBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZFByb3BlcnR5KS50b1Byb3BlcnR5S2V5KGV4ZWMpOwpAQCAtMTYwOCw3
ICsxNjA4LDcgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkRlZmluZURhdGFQcgogdm9p
ZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkRlZmluZURhdGFQcm9wZXJ0eVN0cmluZyhFeGVjU3Rh
dGUqIGV4ZWMsIEpTT2JqZWN0KiBiYXNlLCBKU1N0cmluZyogcHJvcGVydHksIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRWYWx1ZSwgaW50MzJfdCBhdHRyaWJ1dGVzKQogewogICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwor
ICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIElkZW50aWZpZXIgcHJvcGVydHlO
YW1lID0gcHJvcGVydHktPnRvSWRlbnRpZmllcihleGVjKTsKQEAgLTE2MjAsMTQgKzE2MjAsMTQg
QEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkRlZmluZURhdGFQcgogdm9pZCBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbkRlZmluZURhdGFQcm9wZXJ0eVN0cmluZ0lkZW50KEV4ZWNTdGF0ZSog
ZXhlYywgSlNPYmplY3QqIGJhc2UsIFVuaXF1ZWRTdHJpbmdJbXBsKiBwcm9wZXJ0eSwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBpbnQzMl90IGF0dHJpYnV0ZXMpCiB7CiAgICAgVk0mIHZt
ID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhl
Yyk7Ci0gICAgZGVmaW5lRGF0YVByb3BlcnR5KGV4ZWMsIHZtLCBiYXNlLCBJZGVudGlmaWVyOjpm
cm9tVWlkKCZ2bSwgcHJvcGVydHkpLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwgYXR0
cmlidXRlcyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Cisg
ICAgZGVmaW5lRGF0YVByb3BlcnR5KGV4ZWMsIHZtLCBiYXNlLCBJZGVudGlmaWVyOjpmcm9tVWlk
KHZtLCBwcm9wZXJ0eSksIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCBhdHRyaWJ1dGVz
KTsKIH0KIAogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkRlZmluZURhdGFQcm9wZXJ0eVN5
bWJvbChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBiYXNlLCBTeW1ib2wqIHByb3BlcnR5LCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIGludDMyX3QgYXR0cmlidXRlcykKIHsKICAgICBW
TSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZt
LCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAg
ICBkZWZpbmVEYXRhUHJvcGVydHkoZXhlYywgdm0sIGJhc2UsIElkZW50aWZpZXI6OmZyb21VaWQo
cHJvcGVydHktPnByaXZhdGVOYW1lKCkpLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwg
YXR0cmlidXRlcyk7CiB9CiAKQEAgLTE2NDQsNyArMTY0NCw3IEBAIEFMV0FZU19JTkxJTkUgc3Rh
dGljIHZvaWQgZGVmaW5lQWNjZXNzb3IKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25EZWZp
bmVBY2Nlc3NvclByb3BlcnR5KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGJhc2UsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRQcm9wZXJ0eSwgSlNPYmplY3QqIGdldHRlciwgSlNPYmplY3QqIHNl
dHRlciwgaW50MzJfdCBhdHRyaWJ1dGVzKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0g
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIElkZW50aWZpZXIgcHJvcGVydHlOYW1lID0gSlNWYWx1
ZTo6ZGVjb2RlKGVuY29kZWRQcm9wZXJ0eSkudG9Qcm9wZXJ0eUtleShleGVjKTsKQEAgLTE2NTUs
NyArMTY1NSw3IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25EZWZpbmVBY2Nlc3MKIHZv
aWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25EZWZpbmVBY2Nlc3NvclByb3BlcnR5U3RyaW5nKEV4
ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGJhc2UsIEpTU3RyaW5nKiBwcm9wZXJ0eSwgSlNPYmpl
Y3QqIGdldHRlciwgSlNPYmplY3QqIHNldHRlciwgaW50MzJfdCBhdHRyaWJ1dGVzKQogewogICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigm
dm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwog
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIElkZW50aWZp
ZXIgcHJvcGVydHlOYW1lID0gcHJvcGVydHktPnRvSWRlbnRpZmllcihleGVjKTsKQEAgLTE2NjYs
MjAgKzE2NjYsMjAgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkRlZmluZUFjY2Vzcwog
dm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkRlZmluZUFjY2Vzc29yUHJvcGVydHlTdHJpbmdJ
ZGVudChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBiYXNlLCBVbmlxdWVkU3RyaW5nSW1wbCog
cHJvcGVydHksIEpTT2JqZWN0KiBnZXR0ZXIsIEpTT2JqZWN0KiBzZXR0ZXIsIGludDMyX3QgYXR0
cmlidXRlcykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKLSAgICBkZWZpbmVBY2Nlc3NvclByb3BlcnR5KGV4
ZWMsIHZtLCBiYXNlLCBJZGVudGlmaWVyOjpmcm9tVWlkKCZ2bSwgcHJvcGVydHkpLCBnZXR0ZXIs
IHNldHRlciwgYXR0cmlidXRlcyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2
bSwgZXhlYyk7CisgICAgZGVmaW5lQWNjZXNzb3JQcm9wZXJ0eShleGVjLCB2bSwgYmFzZSwgSWRl
bnRpZmllcjo6ZnJvbVVpZCh2bSwgcHJvcGVydHkpLCBnZXR0ZXIsIHNldHRlciwgYXR0cmlidXRl
cyk7CiB9CiAKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25EZWZpbmVBY2Nlc3NvclByb3Bl
cnR5U3ltYm9sKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGJhc2UsIFN5bWJvbCogcHJvcGVy
dHksIEpTT2JqZWN0KiBnZXR0ZXIsIEpTT2JqZWN0KiBzZXR0ZXIsIGludDMyX3QgYXR0cmlidXRl
cykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZt
LCBleGVjKTsKICAgICBkZWZpbmVBY2Nlc3NvclByb3BlcnR5KGV4ZWMsIHZtLCBiYXNlLCBJZGVu
dGlmaWVyOjpmcm9tVWlkKHByb3BlcnR5LT5wcml2YXRlTmFtZSgpKSwgZ2V0dGVyLCBzZXR0ZXIs
IGF0dHJpYnV0ZXMpOwogfQogCiBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0FycmF5
KEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBhcnJheVN0cnVjdHVyZSwgdm9pZCogYnVmZmVy
LCBzaXplX3Qgc2l6ZSkKIHsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0g
PSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMp
OwogICAgIAogICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8Y2hhcio+KGNvbnN0cnVjdEFycmF5KGV4
ZWMsIGFycmF5U3RydWN0dXJlLCBzdGF0aWNfY2FzdDxKU1ZhbHVlKj4oYnVmZmVyKSwgc2l6ZSkp
OwpAQCAtMTY4NywxNiArMTY4NywxNiBAQCBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5l
d0FycmF5KEV4CiAKIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3RW1wdHlBcnJheShF
eGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogYXJyYXlTdHJ1Y3R1cmUpCiB7Ci0gICAgVk0qIHZt
ID0gJmV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICAKLSAgICByZXR1cm4gYml0d2lzZV9j
YXN0PGNoYXIqPihKU0FycmF5OjpjcmVhdGUoKnZtLCBhcnJheVN0cnVjdHVyZSkpOworICAgIHJl
dHVybiBiaXR3aXNlX2Nhc3Q8Y2hhcio+KEpTQXJyYXk6OmNyZWF0ZSh2bSwgYXJyYXlTdHJ1Y3R1
cmUpKTsKIH0KIAogY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdBcnJheVdpdGhTaXpl
KEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBhcnJheVN0cnVjdHVyZSwgaW50MzJfdCBzaXpl
LCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CiAKICAgICBpZiAoVU5MSUtFTFkoc2l6ZSA8IDApKQpAQCAtMTcxMyw3
ICsxNzEzLDcgQEAgY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdBcnJheVdpdAogY2hh
ciogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplQW5kSGludChFeGVjU3Rh
dGUqIGV4ZWMsIFN0cnVjdHVyZSogYXJyYXlTdHJ1Y3R1cmUsIGludDMyX3Qgc2l6ZSwgaW50MzJf
dCB2ZWN0b3JMZW5ndGhIaW50LCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSkKIHsKICAgICBWTSYgdm0g
PSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVj
KTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBpZiAoVU5MSUtFTFkoc2l6
ZSA8IDApKQpAQCAtMTczMiw3ICsxNzMyLDcgQEAgY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRp
b25OZXdBcnJheVdpdAogSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0FycmF5QnVm
ZmVyKEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBhcnJheVN0cnVjdHVyZSwgSlNDZWxsKiBp
bW11dGFibGVCdXR0ZXJmbHlDZWxsKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxG
cmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIEFTU0VSVCghYXJyYXlTdHJ1Y3R1cmUt
Pm91dE9mTGluZUNhcGFjaXR5KCkpOwogICAgIGF1dG8qIGltbXV0YWJsZUJ1dHRlcmZseSA9IGpz
Q2FzdDxKU0ltbXV0YWJsZUJ1dHRlcmZseSo+KGltbXV0YWJsZUJ1dHRlcmZseUNlbGwpOwogICAg
IEFTU0VSVChhcnJheVN0cnVjdHVyZS0+aW5kZXhpbmdNb2RlKCkgPT0gaW1tdXRhYmxlQnV0dGVy
Zmx5LT5pbmRleGluZ01vZGUoKSB8fCBoYXNBbnlBcnJheVN0b3JhZ2UoYXJyYXlTdHJ1Y3R1cmUt
PmluZGV4aW5nTW9kZSgpKSk7CkBAIC0xNzUyLDcgKzE3NTIsNyBAQCBjaGFyKiBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvbk5ld0ludDhBcnJhCiAgICAgRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMp
OworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIHJldHVy
biByZWludGVycHJldF9jYXN0PGNoYXIqPihjb25zdHJ1Y3RHZW5lcmljVHlwZWRBcnJheVZpZXdX
aXRoQXJndW1lbnRzPEpTSW50OEFycmF5PihleGVjLCBzdHJ1Y3R1cmUsIGVuY29kZWRWYWx1ZSwg
MCwgV1RGOjpudWxsb3B0KSk7CiB9CiAKQEAgLTE3NjYsNyArMTc2Niw3IEBAIGNoYXIqIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uTmV3SW50MTZBcnIKICAgICBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwg
ZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAg
cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGNvbnN0cnVjdEdlbmVyaWNUeXBlZEFycmF5
Vmlld1dpdGhBcmd1bWVudHM8SlNJbnQxNkFycmF5PihleGVjLCBzdHJ1Y3R1cmUsIGVuY29kZWRW
YWx1ZSwgMCwgV1RGOjpudWxsb3B0KSk7CiB9CiAKQEAgLTE3ODAsNyArMTc4MCw3IEBAIGNoYXIq
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3SW50MzJBcnIKICAgICBFeGVjU3RhdGUqIGV4ZWMs
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7
CiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGNvbnN0cnVjdEdlbmVyaWNUeXBl
ZEFycmF5Vmlld1dpdGhBcmd1bWVudHM8SlNJbnQzMkFycmF5PihleGVjLCBzdHJ1Y3R1cmUsIGVu
Y29kZWRWYWx1ZSwgMCwgV1RGOjpudWxsb3B0KSk7CiB9CiAKQEAgLTE3OTQsNyArMTc5NCw3IEBA
IGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3VWludDhBcnIKICAgICBFeGVjU3RhdGUq
IGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUp
CiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIg
dHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwg
ZXhlYyk7CiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGNvbnN0cnVjdEdlbmVy
aWNUeXBlZEFycmF5Vmlld1dpdGhBcmd1bWVudHM8SlNVaW50OEFycmF5PihleGVjLCBzdHJ1Y3R1
cmUsIGVuY29kZWRWYWx1ZSwgMCwgV1RGOjpudWxsb3B0KSk7CiB9CiAKQEAgLTE4MDgsNyArMTgw
OCw3IEBAIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3VWludDhDbGEKICAgICBFeGVj
U3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
VmFsdWUpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVU
cmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cih2bSwgZXhlYyk7CiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGNvbnN0cnVj
dEdlbmVyaWNUeXBlZEFycmF5Vmlld1dpdGhBcmd1bWVudHM8SlNVaW50OENsYW1wZWRBcnJheT4o
ZXhlYywgc3RydWN0dXJlLCBlbmNvZGVkVmFsdWUsIDAsIFdURjo6bnVsbG9wdCkpOwogfQogCkBA
IC0xODIyLDcgKzE4MjIsNyBAQCBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1VpbnQx
NkFyCiAgICAgRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNo
YXIqPihjb25zdHJ1Y3RHZW5lcmljVHlwZWRBcnJheVZpZXdXaXRoQXJndW1lbnRzPEpTVWludDE2
QXJyYXk+KGV4ZWMsIHN0cnVjdHVyZSwgZW5jb2RlZFZhbHVlLCAwLCBXVEY6Om51bGxvcHQpKTsK
IH0KIApAQCAtMTgzNiw3ICsxODM2LDcgQEAgY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25O
ZXdVaW50MzJBcgogICAgIEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwot
ICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICByZXR1cm4gcmVpbnRlcnByZXRf
Y2FzdDxjaGFyKj4oY29uc3RydWN0R2VuZXJpY1R5cGVkQXJyYXlWaWV3V2l0aEFyZ3VtZW50czxK
U1VpbnQzMkFycmF5PihleGVjLCBzdHJ1Y3R1cmUsIGVuY29kZWRWYWx1ZSwgMCwgV1RGOjpudWxs
b3B0KSk7CiB9CiAKQEAgLTE4NTAsNyArMTg1MCw3IEBAIGNoYXIqIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uTmV3RmxvYXQzMkEKICAgICBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgcmV0dXJuIHJlaW50
ZXJwcmV0X2Nhc3Q8Y2hhcio+KGNvbnN0cnVjdEdlbmVyaWNUeXBlZEFycmF5Vmlld1dpdGhBcmd1
bWVudHM8SlNGbG9hdDMyQXJyYXk+KGV4ZWMsIHN0cnVjdHVyZSwgZW5jb2RlZFZhbHVlLCAwLCBX
VEY6Om51bGxvcHQpKTsKIH0KIApAQCAtMTg2NCwyMyArMTg2NCwyMyBAQCBjaGFyKiBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbk5ld0Zsb2F0NjRBCiAgICAgRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4
ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIHJl
dHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPihjb25zdHJ1Y3RHZW5lcmljVHlwZWRBcnJheVZp
ZXdXaXRoQXJndW1lbnRzPEpTRmxvYXQ2NEFycmF5PihleGVjLCBzdHJ1Y3R1cmUsIGVuY29kZWRW
YWx1ZSwgMCwgV1RGOjpudWxsb3B0KSk7CiB9CiAKIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVy
YXRpb25DcmVhdGVBY3RpdmF0aW9uRGlyZWN0KEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIEpTU2NvcGUqIHNjb3BlLCBTeW1ib2xUYWJsZSogdGFibGUsIEVuY29kZWRKU1Zh
bHVlIGluaXRpYWxWYWx1ZUVuY29kZWQpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICBKU1ZhbHVlIGlu
aXRpYWxWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShpbml0aWFsVmFsdWVFbmNvZGVkKTsKICAgICBB
U1NFUlQoaW5pdGlhbFZhbHVlID09IGpzVW5kZWZpbmVkKCkgfHwgaW5pdGlhbFZhbHVlID09IGpz
VERaVmFsdWUoKSk7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CiAgICAgcmV0dXJuIEpTTGV4aWNhbEVudmlyb25t
ZW50OjpjcmVhdGUodm0sIHN0cnVjdHVyZSwgc2NvcGUsIHRhYmxlLCBpbml0aWFsVmFsdWUpOwog
fQogCiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRlRGlyZWN0QXJndW1lbnRz
KEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHVpbnQzMl90IGxlbmd0aCwg
dWludDMyX3QgbWluQ2FwYWNpdHkpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdGFyZ2V0KCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgRGlyZWN0QXJndW1lbnRzKiByZXN1bHQg
PSBEaXJlY3RBcmd1bWVudHM6OmNyZWF0ZSgKICAgICAgICAgdm0sIHN0cnVjdHVyZSwgbGVuZ3Ro
LCBzdGQ6Om1heChsZW5ndGgsIG1pbkNhcGFjaXR5KSk7CiAgICAgLy8gVGhlIGNhbGxlciB3aWxs
IHN0b3JlIHRvIHRoaXMgb2JqZWN0IHdpdGhvdXQgYmFycmllcnMuIE1vc3QgbGlrZWx5LCBhdCB0
aGlzIHBvaW50LCB0aGlzIGlzCkBAIC0xODkzLDcgKzE4OTMsNyBAQCBKU0NlbGwqIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uQ3JlYXRlRGlyCiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
Q3JlYXRlU2NvcGVkQXJndW1lbnRzKEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIFJlZ2lzdGVyKiBhcmd1bWVudFN0YXJ0LCB1aW50MzJfdCBsZW5ndGgsIEpTRnVuY3Rpb24q
IGNhbGxlZSwgSlNMZXhpY2FsRW52aXJvbm1lbnQqIHNjb3BlKQogewogICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRhcmdldCgmdm0sIGV4ZWMpOwor
ICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIAogICAgIC8v
IFdlIGNvdWxkIHBhc3MgdGhlIFNjb3BlZEFyZ3VtZW50c1RhYmxlKiBhcyBhbiBhcmd1bWVudC4g
V2UgY3VycmVudGx5IGRvbid0IGJlY2F1c2UgSQogICAgIC8vIGRpZG4ndCBmZWVsIGxpa2UgY2hh
bmdpbmcgdGhlIG1heCBudW1iZXIgb2YgYXJndW1lbnRzIGZvciBhIHNsb3cgcGF0aCBjYWxsIGZy
b20gNiB0byA3LgpAQCAtMTkwNiw3ICsxOTA2LDcgQEAgSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbkNyZWF0ZVNjbwogSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZUNs
b25lZEFyZ3VtZW50cyhFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBSZWdp
c3RlciogYXJndW1lbnRTdGFydCwgdWludDMyX3QgbGVuZ3RoLCBKU0Z1bmN0aW9uKiBjYWxsZWUp
CiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIg
dGFyZ2V0KCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwg
ZXhlYyk7CiAgICAgcmV0dXJuIENsb25lZEFyZ3VtZW50czo6Y3JlYXRlQnlDb3B5aW5nRnJvbSgK
ICAgICAgICAgZXhlYywgc3RydWN0dXJlLCBhcmd1bWVudFN0YXJ0LCBsZW5ndGgsIGNhbGxlZSk7
CiB9CkBAIC0xOTE0LDcgKzE5MTQsNyBAQCBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
Q3JlYXRlQ2xvCiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRlRGlyZWN0QXJn
dW1lbnRzRHVyaW5nRXhpdChFeGVjU3RhdGUqIGV4ZWMsIElubGluZUNhbGxGcmFtZSogaW5saW5l
Q2FsbEZyYW1lLCBKU0Z1bmN0aW9uKiBjYWxsZWUsIHVpbnQzMl90IGFyZ3VtZW50Q291bnQpCiB7
CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdGFy
Z2V0KCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhl
Yyk7CiAgICAgCiAgICAgRGVmZXJHQ0ZvckFXaGlsZSBkZWZlckdDKHZtLmhlYXApOwogICAgIApA
QCAtMTk0Myw3ICsxOTQzLDcgQEAgSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0
ZURpcgogSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZUNsb25lZEFyZ3VtZW50
c0R1cmluZ0V4aXQoRXhlY1N0YXRlKiBleGVjLCBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxG
cmFtZSwgSlNGdW5jdGlvbiogY2FsbGVlLCB1aW50MzJfdCBhcmd1bWVudENvdW50KQogewogICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRhcmdldCgm
dm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwog
ICAgIAogICAgIERlZmVyR0NGb3JBV2hpbGUgZGVmZXJHQyh2bS5oZWFwKTsKICAgICAKQEAgLTE5
NjksNyArMTk2OSw3IEBAIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25DcmVhdGVDbG8K
IAogSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZVJlc3QoRXhlY1N0YXRlKiBl
eGVjLCBSZWdpc3RlciogYXJndW1lbnRTdGFydCwgdW5zaWduZWQgbnVtYmVyT2ZQYXJhbXNUb1Nr
aXAsIHVuc2lnbmVkIGFycmF5U2l6ZSkKIHsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
dm0sIGV4ZWMpOwogCiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGV4ZWMtPmxl
eGljYWxHbG9iYWxPYmplY3QoKTsKQEAgLTE5ODIsNyArMTk4Miw3IEBAIEpTQ2VsbCogSklUX09Q
RVJBVElPTiBvcGVyYXRpb25DcmVhdGVSZXMKIHNpemVfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
bk9iamVjdElzT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNDZWxsKiBvYmplY3QpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAKICAgICBBU1NFUlQoanNEeW5hbWljQ2FzdDxK
U09iamVjdCo+KHZtLCBvYmplY3QpKTsKICAgICAKQEAgLTE5OTYsNyArMTk5Niw3IEBAIHNpemVf
dCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk9iamVjdElzT2IKIHNpemVfdCBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvbk9iamVjdElzRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU0NlbGwqIG9iamVjdCkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52
bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKIAogICAgIEFTU0VSVChqc0R5
bmFtaWNDYXN0PEpTT2JqZWN0Kj4odm0sIG9iamVjdCkpOwogICAgIApAQCAtMjAxMCw3ICsyMDEw
LDcgQEAgc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uT2JqZWN0SXNGdQogSlNDZWxsKiBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvblR5cGVPZk9iamVjdChFeGVjU3RhdGUqIGV4ZWMsIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQ2VsbCogb2JqZWN0KQogewogICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMp
OworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogCiAgICAgQVNT
RVJUKGpzRHluYW1pY0Nhc3Q8SlNPYmplY3QqPih2bSwgb2JqZWN0KSk7CiAgICAgCkBAIC0yMDI0
LDcgKzIwMjQsNyBAQCBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVHlwZU9mT2JqCiBp
bnQzMl90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVHlwZU9mT2JqZWN0QXNUeXBlb2ZUeXBlKEV4
ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDZWxsKiBvYmpl
Y3QpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFj
ZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2
bSwgZXhlYyk7CiAKICAgICBBU1NFUlQoanNEeW5hbWljQ2FzdDxKU09iamVjdCo+KHZtLCBvYmpl
Y3QpKTsKICAgICAKQEAgLTIwMzgsNyArMjAzOCw3IEBAIGludDMyX3QgSklUX09QRVJBVElPTiBv
cGVyYXRpb25UeXBlT2ZPYmoKIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQWxsb2NhdGVT
aW1wbGVQcm9wZXJ0eVN0b3JhZ2VXaXRoSW5pdGlhbENhcGFjaXR5KEV4ZWNTdGF0ZSogZXhlYykK
IHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBl
eGVjKTsKIAogICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPigKICAgICAgICAgQnV0
dGVyZmx5OjpjcmVhdGVVbmluaXRpYWxpemVkKHZtLCAwLCAwLCBpbml0aWFsT3V0T2ZMaW5lQ2Fw
YWNpdHksIGZhbHNlLCAwKSk7CkBAIC0yMDQ3LDcgKzIwNDcsNyBAQCBjaGFyKiBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvbkFsbG9jYXRlU2ltCiBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFs
bG9jYXRlU2ltcGxlUHJvcGVydHlTdG9yYWdlKEV4ZWNTdGF0ZSogZXhlYywgc2l6ZV90IG5ld1Np
emUpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFj
ZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2
bSwgZXhlYyk7CiAKICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oCiAgICAgICAg
IEJ1dHRlcmZseTo6Y3JlYXRlVW5pbml0aWFsaXplZCh2bSwgMCwgMCwgbmV3U2l6ZSwgZmFsc2Us
IDApKTsKQEAgLTIwNTYsNyArMjA1Niw3IEBAIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
QWxsb2NhdGVTaW0KIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQWxsb2NhdGVDb21wbGV4
UHJvcGVydHlTdG9yYWdlV2l0aEluaXRpYWxDYXBhY2l0eShFeGVjU3RhdGUqIGV4ZWMsIEpTT2Jq
ZWN0KiBvYmplY3QpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcih2bSwgZXhlYyk7CiAKICAgICBBU1NFUlQoIW9iamVjdC0+c3RydWN0dXJlKHZtKS0+
b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+
KApAQCAtMjA2Niw3ICsyMDY2LDcgQEAgY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25BbGxv
Y2F0ZUNvbQogY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25BbGxvY2F0ZUNvbXBsZXhQcm9w
ZXJ0eVN0b3JhZ2UoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogb2JqZWN0LCBzaXplX3QgbmV3
U2l6ZSkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRy
YWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KHZtLCBleGVjKTsKIAogICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPigKICAgICAg
ICAgb2JqZWN0LT5hbGxvY2F0ZU1vcmVPdXRPZkxpbmVTdG9yYWdlKHZtLCBvYmplY3QtPnN0cnVj
dHVyZSh2bSktPm91dE9mTGluZUNhcGFjaXR5KCksIG5ld1NpemUpKTsKQEAgLTIwNzUsNyArMjA3
NSw3IEBAIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQWxsb2NhdGVDb20KIGNoYXIqIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uRW5zdXJlSW50MzIoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwq
IGNlbGwpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVU
cmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cih2bSwgZXhlYyk7CiAgICAgCiAgICAgaWYgKCFjZWxsLT5pc09iamVjdCgpKQogICAgICAgICBy
ZXR1cm4gMDsKQEAgLTIwODgsNyArMjA4OCw3IEBAIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uRW5zdXJlSW50MzIKIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRW5zdXJlRG91Ymxl
KEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBjZWxsKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIAogICAgIGlmICghY2Vs
bC0+aXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0yMTAxLDcgKzIxMDEsNyBAQCBj
aGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkVuc3VyZURvdWJsCiBjaGFyKiBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvbkVuc3VyZUNvbnRpZ3VvdXMoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGNl
bGwpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFj
ZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2
bSwgZXhlYyk7CiAgICAgCiAgICAgaWYgKCFjZWxsLT5pc09iamVjdCgpKQogICAgICAgICByZXR1
cm4gMDsKQEAgLTIxMTQsNyArMjExNCw3IEBAIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
RW5zdXJlQ29udGkKIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRW5zdXJlQXJyYXlTdG9y
YWdlKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBjZWxsKQogewogICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIAogICAgIGlmICgh
Y2VsbC0+aXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0yMTI3LDcgKzIxMjcsNyBA
QCBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkVuc3VyZUFycmF5CiBFbmNvZGVkSlNWYWx1
ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkhhc0dlbmVyaWNQcm9wZXJ0eShFeGVjU3RhdGUqIGV4
ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlVmFsdWUsIEpTQ2VsbCogcHJvcGVydHkpCiB7
CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhl
Yyk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgSlNW
YWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2VWYWx1ZSk7CkBAIC0y
MTQ1LDExICsyMTQ1LDExIEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
SGEKIHNpemVfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkhhc0luZGV4ZWRQcm9wZXJ0eUJ5SW50
KEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBiYXNlQ2VsbCwgaW50MzJfdCBzdWJzY3JpcHQsIGlu
dDMyX3QgaW50ZXJuYWxNZXRob2RUeXBlKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0g
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIEpTT2JqZWN0KiBvYmplY3QgPSBi
YXNlQ2VsbC0+dG9PYmplY3QoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKTsKICAg
ICBpZiAoVU5MSUtFTFkoc3Vic2NyaXB0IDwgMCkpIHsKICAgICAgICAgLy8gR28gdGhlIHNsb3dl
c3Qgd2F5IHBvc3NpYmxlIGJlY2F1c2UgbmVnYXRpdmUgaW5kaWNlcyBkb24ndCB1c2UgaW5kZXhl
ZCBzdG9yYWdlLgotICAgICAgICByZXR1cm4gb2JqZWN0LT5oYXNQcm9wZXJ0eUdlbmVyaWMoZXhl
YywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBzdWJzY3JpcHQpLCBzdGF0aWNfY2FzdDxQcm9wZXJ0
eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZT4oaW50ZXJuYWxNZXRob2RUeXBlKSk7CisgICAgICAg
IHJldHVybiBvYmplY3QtPmhhc1Byb3BlcnR5R2VuZXJpYyhleGVjLCBJZGVudGlmaWVyOjpmcm9t
KHZtLCBzdWJzY3JpcHQpLCBzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9k
VHlwZT4oaW50ZXJuYWxNZXRob2RUeXBlKSk7CiAgICAgfQogICAgIHJldHVybiBvYmplY3QtPmhh
c1Byb3BlcnR5R2VuZXJpYyhleGVjLCBzdWJzY3JpcHQsIHN0YXRpY19jYXN0PFByb3BlcnR5U2xv
dDo6SW50ZXJuYWxNZXRob2RUeXBlPihpbnRlcm5hbE1ldGhvZFR5cGUpKTsKIH0KQEAgLTIxNTcs
NyArMjE1Nyw3IEBAIHNpemVfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkhhc0luZGV4ZWQKIEpT
Q2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRQcm9wZXJ0eUVudW1lcmF0b3IoRXhlY1N0
YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSkKIHsKICAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsK
KyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBKU1ZhbHVlIGJhc2UgPSBKU1Zh
bHVlOjpkZWNvZGUoZW5jb2RlZEJhc2UpOwpAQCAtMjE3Myw3ICsyMTczLDcgQEAgSlNDZWxsKiBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldFByb3BlcgogSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbkdldFByb3BlcnR5RW51bWVyYXRvckNlbGwoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwq
IGNlbGwpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVU
cmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cih2bSwgZXhlYyk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwog
CiAgICAgSlNPYmplY3QqIGJhc2UgPSBjZWxsLT50b09iamVjdChleGVjLCBleGVjLT5sZXhpY2Fs
R2xvYmFsT2JqZWN0KCkpOwpAQCAtMjE4NSwxNCArMjE4NSwxNCBAQCBKU0NlbGwqIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uR2V0UHJvcGVyCiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
VG9JbmRleFN0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIGludDMyX3QgaW5kZXgpCiB7CiAgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwg
ZXhlYyk7Ci0gICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywg
aW5kZXgpLnN0cmluZygpKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBl
eGVjKTsKKyAgICByZXR1cm4ganNTdHJpbmcodm0sIElkZW50aWZpZXI6OmZyb20odm0sIGluZGV4
KS5zdHJpbmcoKSk7CiB9CiAKIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdSZWdl
eHBXaXRoTGFzdEluZGV4KEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiByZWdleHBQdHIsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRMYXN0SW5kZXgpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsK
LSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZl
Q2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAKICAgICBSZWdFeHAqIHJlZ2V4cCA9
IHN0YXRpY19jYXN0PFJlZ0V4cCo+KHJlZ2V4cFB0cik7CiAgICAgQVNTRVJUKHJlZ2V4cC0+aXNW
YWxpZCgpKTsKQEAgLTIyMDIsNyArMjIwMiw3IEBAIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVy
YXRpb25OZXdSZWdleHAKIFN0cmluZ0ltcGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUmVzb2x2
ZVJvcGUoRXhlY1N0YXRlKiBleGVjLCBKU1N0cmluZyogc3RyaW5nKQogewogICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMp
OworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogCiAgICAgcmV0
dXJuIHN0cmluZy0+dmFsdWUoZXhlYykuaW1wbCgpOwogfQpAQCAtMjIxMCw3ICsyMjEwLDcgQEAg
U3RyaW5nSW1wbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25SZXNvbAogSlNTdHJpbmcqIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uU3RyaW5nVmFsdWVPZihFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRBcmd1bWVudCkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CiAKICAgICBKU1ZhbHVlIGFyZ3VtZW50ID0gSlNWYWx1ZTo6ZGVjb2Rl
KGVuY29kZWRBcmd1bWVudCk7CkBAIC0yMjI4LDcgKzIyMjgsNyBAQCBKU1N0cmluZyogSklUX09Q
RVJBVElPTiBvcGVyYXRpb25TdHJpbmdWCiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
U3RyaW5nU3Vic3RyKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBjZWxsLCBpbnQzMl90IGZyb20s
IGludDMyX3Qgc3BhbikKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFj
ZXIgdHJhY2VyKHZtLCBleGVjKTsKIAogICAgIHJldHVybiBqc1N1YnN0cmluZyh2bSwgZXhlYywg
anNDYXN0PEpTU3RyaW5nKj4oY2VsbCksIGZyb20sIHNwYW4pOwogfQpAQCAtMjIzNiw3ICsyMjM2
LDcgQEAgSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblN0cmluZ1N1YgogSlNDZWxsKiBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvblN0cmluZ1NsaWNlKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxs
KiBjZWxsLCBpbnQzMl90IHN0YXJ0LCBpbnQzMl90IGVuZCkKIHsKICAgICBWTSYgdm0gPSBleGVj
LT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKIAogICAgIEpTU3RyaW5n
KiBzdHJpbmcgPSBhc1N0cmluZyhjZWxsKTsKICAgICBzdGF0aWNfYXNzZXJ0KHN0YXRpY19jYXN0
PHVpbnQ2NF90PihKU1N0cmluZzo6TWF4TGVuZ3RoKSA8PSBzdGF0aWNfY2FzdDx1aW50NjRfdD4o
c3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWF4KCkpLCAiIik7CkBAIC0yMjQ2LDcgKzIy
NDYsNyBAQCBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uU3RyaW5nU2xpCiBKU1N0cmlu
ZyogSklUX09QRVJBVElPTiBvcGVyYXRpb25Ub0xvd2VyQ2FzZShFeGVjU3RhdGUqIGV4ZWMsIEpT
U3RyaW5nKiBzdHJpbmcsIHVpbnQzMl90IGZhaWxpbmdJbmRleCkKIHsKICAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsK
KyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKIAogICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIApAQCAtMjI1OCwxMyArMjI1OCwxMyBA
QCBKU1N0cmluZyogSklUX09QRVJBVElPTiBvcGVyYXRpb25Ub0xvd2VyCiAgICAgU3RyaW5nIGxv
d2VyY2FzZWRTdHJpbmcgPSBpbnB1dFN0cmluZy5pczhCaXQoKSA/IGlucHV0U3RyaW5nLmNvbnZl
cnRUb0xvd2VyY2FzZVdpdGhvdXRMb2NhbGVTdGFydGluZ0F0RmFpbGluZ0luZGV4OEJpdChmYWls
aW5nSW5kZXgpIDogaW5wdXRTdHJpbmcuY29udmVydFRvTG93ZXJjYXNlV2l0aG91dExvY2FsZSgp
OwogICAgIGlmIChsb3dlcmNhc2VkU3RyaW5nLmltcGwoKSA9PSBpbnB1dFN0cmluZy5pbXBsKCkp
CiAgICAgICAgIHJldHVybiBzdHJpbmc7Ci0gICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBq
c1N0cmluZyhleGVjLCBsb3dlcmNhc2VkU3RyaW5nKSk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJO
KHNjb3BlLCBqc1N0cmluZyh2bSwgbG93ZXJjYXNlZFN0cmluZykpOwogfQogCiBjaGFyKiBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbkludDMyVG9TdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBpbnQzMl90
IHZhbHVlLCBpbnQzMl90IHJhZGl4KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxG
cmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogCiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwogCkBAIC0yMjc5LDcgKzIyNzksNyBAQCBjaGFyKiBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvbkludDMyVG9TdHJpCiBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbklu
dDUyVG9TdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBpbnQ2NF90IHZhbHVlLCBpbnQzMl90IHJhZGl4
KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0s
IGV4ZWMpOwogCiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCkBA
IC0yMjk0LDcgKzIyOTQsNyBAQCBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkludDUyVG9T
dHJpCiBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkRvdWJsZVRvU3RyaW5nKEV4ZWNTdGF0
ZSogZXhlYywgZG91YmxlIHZhbHVlLCBpbnQzMl90IHJhZGl4KQogewogICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwor
ICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogCiAgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCkBAIC0yMzA5LDcgKzIzMDksNyBAQCBj
aGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkRvdWJsZVRvU3RyCiBjaGFyKiBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvbkludDMyVG9TdHJpbmdXaXRoVmFsaWRSYWRpeChFeGVjU3RhdGUqIGV4ZWMs
IGludDMyX3QgdmFsdWUsIGludDMyX3QgcmFkaXgpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAKICAgICByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDxjaGFyKj4oaW50MzJUb1N0cmluZyh2bSwgdmFsdWUsIHJhZGl4KSk7CiB9CkBA
IC0yMzE3LDcgKzIzMTcsNyBAQCBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkludDMyVG9T
dHJpCiBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkludDUyVG9TdHJpbmdXaXRoVmFsaWRS
YWRpeChFeGVjU3RhdGUqIGV4ZWMsIGludDY0X3QgdmFsdWUsIGludDMyX3QgcmFkaXgpCiB7CiAg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7
CiAKICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oaW50NTJUb1N0cmluZyh2bSwg
dmFsdWUsIHJhZGl4KSk7CiB9CkBAIC0yMzI1LDcgKzIzMjUsNyBAQCBjaGFyKiBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvbkludDUyVG9TdHJpCiBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkRv
dWJsZVRvU3RyaW5nV2l0aFZhbGlkUmFkaXgoRXhlY1N0YXRlKiBleGVjLCBkb3VibGUgdmFsdWUs
IGludDMyX3QgcmFkaXgpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcih2bSwgZXhlYyk7CiAKICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFy
Kj4obnVtYmVyVG9TdHJpbmcodm0sIHZhbHVlLCByYWRpeCkpOwogfQpAQCAtMjMzMywxNSArMjMz
MywxNSBAQCBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkRvdWJsZVRvU3RyCiBKU1N0cmlu
ZyogSklUX09QRVJBVElPTiBvcGVyYXRpb25TaW5nbGVDaGFyYWN0ZXJTdHJpbmcoRXhlY1N0YXRl
KiBleGVjLCBpbnQzMl90IGNoYXJhY3RlcikKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwot
ICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICAKLSAgICByZXR1cm4ganNTaW5n
bGVDaGFyYWN0ZXJTdHJpbmcoZXhlYywgc3RhdGljX2Nhc3Q8VUNoYXI+KGNoYXJhY3RlcikpOwor
ICAgIHJldHVybiBqc1NpbmdsZUNoYXJhY3RlclN0cmluZyh2bSwgc3RhdGljX2Nhc3Q8VUNoYXI+
KGNoYXJhY3RlcikpOwogfQogCiBTeW1ib2wqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3U3lt
Ym9sKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKIAogICAgIHJldHVybiBTeW1ib2w6OmNyZWF0ZSh2
bSk7CiB9CkBAIC0yMzQ5LDcgKzIzNDksNyBAQCBTeW1ib2wqIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uTmV3U3ltYm9sCiBTeW1ib2wqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3U3ltYm9sV2l0
aERlc2NyaXB0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNTdHJpbmcqIGRlc2NyaXB0aW9uKQogewog
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMp
OwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIFN0cmlu
ZyBzdHJpbmcgPSBkZXNjcmlwdGlvbi0+dmFsdWUoZXhlYyk7CkBAIC0yMzYxLDcgKzIzNjEsNyBA
QCBTeW1ib2wqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3U3ltYm9sCiBKU0NlbGwqIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uTmV3U3RyaW5nT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNTdHJp
bmcqIHN0cmluZywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgCiAgICAgcmV0dXJu
IFN0cmluZ09iamVjdDo6Y3JlYXRlKHZtLCBzdHJ1Y3R1cmUsIHN0cmluZyk7CiB9CkBAIC0yMzY5
LDcgKzIzNjksNyBAQCBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3U3RyaW5nCiBK
U1N0cmluZyogSklUX09QRVJBVElPTiBvcGVyYXRpb25Ub1N0cmluZ09uQ2VsbChFeGVjU3RhdGUq
IGV4ZWMsIEpTQ2VsbCogY2VsbCkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICAKICAgICByZXR1cm4gSlNWYWx1ZShjZWxs
KS50b1N0cmluZyhleGVjKTsKIH0KQEAgLTIzNzcsNyArMjM3Nyw3IEBAIEpTU3RyaW5nKiBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvblRvU3RyaW4KIEpTU3RyaW5nKiBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvblRvU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgdmFsdWUpCiB7CiAg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7
CiAKICAgICByZXR1cm4gSlNWYWx1ZTo6ZGVjb2RlKHZhbHVlKS50b1N0cmluZyhleGVjKTsKIH0K
QEAgLTIzODUsNyArMjM4NSw3IEBAIEpTU3RyaW5nKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRv
U3RyaW4KIEpTU3RyaW5nKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNhbGxTdHJpbmdDb25zdHJ1
Y3Rvck9uQ2VsbChFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogY2VsbCkKIHsKICAgICBWTSYgdm0g
PSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVj
KTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKIAogICAgIHJl
dHVybiBzdHJpbmdDb25zdHJ1Y3RvcihleGVjLCBjZWxsKTsKIH0KQEAgLTIzOTMsNyArMjM5Myw3
IEBAIEpTU3RyaW5nKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNhbGxTdHIKIEpTU3RyaW5nKiBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNhbGxTdHJpbmdDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4
ZWMsIEVuY29kZWRKU1ZhbHVlIHZhbHVlKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0g
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogCiAgICAgcmV0dXJuIHN0cmluZ0NvbnN0
cnVjdG9yKGV4ZWMsIEpTVmFsdWU6OmRlY29kZSh2YWx1ZSkpOwogfQpAQCAtMjQwMSw3ICsyNDAx
LDcgQEAgSlNTdHJpbmcqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ2FsbFN0cgogSlNTdHJpbmcq
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTWFrZVJvcGUyKEV4ZWNTdGF0ZSogZXhlYywgSlNTdHJp
bmcqIGxlZnQsIEpTU3RyaW5nKiByaWdodCkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwot
ICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKIAogICAgIHJldHVybiBqc1N0cmluZyhl
eGVjLCBsZWZ0LCByaWdodCk7CiB9CkBAIC0yNDA5LDcgKzI0MDksNyBAQCBKU1N0cmluZyogSklU
X09QRVJBVElPTiBvcGVyYXRpb25NYWtlUm9wCiBKU1N0cmluZyogSklUX09QRVJBVElPTiBvcGVy
YXRpb25NYWtlUm9wZTMoRXhlY1N0YXRlKiBleGVjLCBKU1N0cmluZyogYSwgSlNTdHJpbmcqIGIs
IEpTU3RyaW5nKiBjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIodm0sIGV4ZWMpOwogCiAgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIGEsIGIsIGMp
OwogfQpAQCAtMjQxNyw3ICsyNDE3LDcgQEAgSlNTdHJpbmcqIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uTWFrZVJvcAogSlNTdHJpbmcqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uU3RyQ2F0MihFeGVj
U3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGEsIEVuY29kZWRKU1ZhbHVlIGIpCiB7CiAgICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2
bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgQVNTRVJUKCFK
U1ZhbHVlOjpkZWNvZGUoYSkuaXNTeW1ib2woKSk7CkBAIC0yNDMzLDcgKzI0MzMsNyBAQCBKU1N0
cmluZyogSklUX09QRVJBVElPTiBvcGVyYXRpb25TdHJDYXQyCiBKU1N0cmluZyogSklUX09QRVJB
VElPTiBvcGVyYXRpb25TdHJDYXQzKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgYSwg
RW5jb2RlZEpTVmFsdWUgYiwgRW5jb2RlZEpTVmFsdWUgYykKIHsKICAgICBWTSYgdm0gPSBleGVj
LT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBBU1NFUlQoIUpTVmFsdWU6OmRlY29k
ZShhKS5pc1N5bWJvbCgpKTsKQEAgLTI0NTMsNyArMjQ1Myw3IEBAIGNoYXIqIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uRmluZFN3aXRjaEkKICAgICBFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRWYWx1ZSwgc2l6ZV90IHRhYmxlSW5kZXgpCiB7CiAgICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7Cisg
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgQ29kZUJsb2Nr
KiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKICAgICBTaW1wbGVKdW1wVGFibGUmIHRh
YmxlID0gY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CiAgICAgSlNWYWx1
ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwpAQCAtMjQ2OCw3ICsyNDY4
LDcgQEAgY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25GaW5kU3dpdGNoSQogY2hhciogSklU
X09QRVJBVElPTiBvcGVyYXRpb25Td2l0Y2hTdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBzaXplX3Qg
dGFibGVJbmRleCwgSlNTdHJpbmcqIHN0cmluZykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgp
OwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIFN0cmluZ0ltcGwqIHN0ckltcGwgPSBz
dHJpbmctPnZhbHVlKGV4ZWMpLmltcGwoKTsKQEAgLTI0ODEsNyArMjQ4MSw3IEBAIGNoYXIqIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uU3dpdGNoU3RyaW4KIGludDMyX3QgSklUX09QRVJBVElPTiBv
cGVyYXRpb25Td2l0Y2hTdHJpbmdBbmRHZXRCcmFuY2hPZmZzZXQoRXhlY1N0YXRlKiBleGVjLCBz
aXplX3QgdGFibGVJbmRleCwgSlNTdHJpbmcqIHN0cmluZykKIHsKICAgICBWTSYgdm0gPSBleGVj
LT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIFN0cmluZ0ltcGwqIHN0cklt
cGwgPSBzdHJpbmctPnZhbHVlKGV4ZWMpLmltcGwoKTsKQEAgLTI1MTQsNyArMjUxNCw3IEBAIHVp
bnRwdHJfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmUKIHVpbnRwdHJfdCBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVTdHJpbmdMZXNzKEV4ZWNTdGF0ZSogZXhlYywgSlNTdHJp
bmcqIGEsIEpTU3RyaW5nKiBiKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogCiAgICAgcmV0dXJuIGNvZGVQb2ludENvbXBhcmVM
ZXNzVGhhbihhc1N0cmluZyhhKS0+dmFsdWUoZXhlYyksIGFzU3RyaW5nKGIpLT52YWx1ZShleGVj
KSk7CiB9CkBAIC0yNTIyLDcgKzI1MjIsNyBAQCB1aW50cHRyX3QgSklUX09QRVJBVElPTiBvcGVy
YXRpb25Db21wYXJlCiB1aW50cHRyX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlU3Ry
aW5nTGVzc0VxKEV4ZWNTdGF0ZSogZXhlYywgSlNTdHJpbmcqIGEsIEpTU3RyaW5nKiBiKQogewog
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMp
OwogCiAgICAgcmV0dXJuICFjb2RlUG9pbnRDb21wYXJlTGVzc1RoYW4oYXNTdHJpbmcoYiktPnZh
bHVlKGV4ZWMpLCBhc1N0cmluZyhhKS0+dmFsdWUoZXhlYykpOwogfQpAQCAtMjUzMCw3ICsyNTMw
LDcgQEAgdWludHB0cl90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZQogdWludHB0cl90
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZVN0cmluZ0dyZWF0ZXIoRXhlY1N0YXRlKiBl
eGVjLCBKU1N0cmluZyogYSwgSlNTdHJpbmcqIGIpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAKICAgICByZXR1cm4gY29kZVBv
aW50Q29tcGFyZUxlc3NUaGFuKGFzU3RyaW5nKGIpLT52YWx1ZShleGVjKSwgYXNTdHJpbmcoYSkt
PnZhbHVlKGV4ZWMpKTsKIH0KQEAgLTI1MzgsNyArMjUzOCw3IEBAIHVpbnRwdHJfdCBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbkNvbXBhcmUKIHVpbnRwdHJfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
bkNvbXBhcmVTdHJpbmdHcmVhdGVyRXEoRXhlY1N0YXRlKiBleGVjLCBKU1N0cmluZyogYSwgSlNT
dHJpbmcqIGIpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcih2bSwgZXhlYyk7CiAKICAgICByZXR1cm4gIWNvZGVQb2ludENvbXBhcmVMZXNzVGhhbihh
c1N0cmluZyhhKS0+dmFsdWUoZXhlYyksIGFzU3RyaW5nKGIpLT52YWx1ZShleGVjKSk7CiB9CkBA
IC0yNTQ2LDcgKzI1NDYsNyBAQCB1aW50cHRyX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db21w
YXJlCiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTm90aWZ5V3JpdGUoRXhlY1N0YXRlKiBl
eGVjLCBXYXRjaHBvaW50U2V0KiBzZXQpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAKICAgICBzZXQtPnRvdWNoKHZtLCAiRXhl
Y3V0ZWQgTm90aWZ5V3JpdGUiKTsKIH0KQEAgLTI1NTQsNyArMjU1NCw3IEBAIHZvaWQgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25Ob3RpZnlXcml0ZSgKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRp
b25UaHJvd1N0YWNrT3ZlcmZsb3dGb3JWYXJhcmdzKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBW
TSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZt
LCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgdGhyb3dTdGFja092
ZXJmbG93RXJyb3IoZXhlYywgc2NvcGUpOwogfQpAQCAtMjU2Miw3ICsyNTYyLDcgQEAgdm9pZCBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvblRocm93U3RhY2tPdgogaW50MzJfdCBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvblNpemVPZlZhcmFyZ3MoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkQXJndW1lbnRzLCB1aW50MzJfdCBmaXJzdFZhckFyZ09mZnNldCkKIHsKICAgICBWTSYg
dm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBl
eGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICBK
U1ZhbHVlIGFyZ3VtZW50cyA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQXJndW1lbnRzKTsKICAg
ICAKICAgICByZXR1cm4gc2l6ZU9mVmFyYXJncyhleGVjLCBhcmd1bWVudHMsIGZpcnN0VmFyQXJn
T2Zmc2V0KTsKQEAgLTI1NzEsNyArMjU3MSw3IEBAIGludDMyX3QgSklUX09QRVJBVElPTiBvcGVy
YXRpb25TaXplT2ZWYXIKIGludDMyX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25IYXNPd25Qcm9w
ZXJ0eShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqZWN0LCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkS2V5KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKIAogICAgIEpTVmFsdWUga2V5ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRLZXkpOwpA
QCAtMjU5MSwxNCArMjU5MSwxNCBAQCBpbnQzMl90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSGFz
T3duUHJvCiBpbnQzMl90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTnVtYmVySXNJbnRlZ2VyKEV4
ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7Cisg
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgcmV0dXJuIE51
bWJlckNvbnN0cnVjdG9yOjppc0ludGVnZXJJbXBsKEpTVmFsdWU6OmRlY29kZSh2YWx1ZSkpOwog
fQogCiBpbnQzMl90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXJyYXlJbmRleE9mU3RyaW5nKEV4
ZWNTdGF0ZSogZXhlYywgQnV0dGVyZmx5KiBidXR0ZXJmbHksIEpTU3RyaW5nKiBzZWFyY2hFbGVt
ZW50LCBpbnQzMl90IGluZGV4KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKIAogICAgIGludDMyX3QgbGVuZ3RoID0gYnV0dGVyZmx5LT5wdWJsaWNMZW5n
dGgoKTsKQEAgLTI2MjIsNyArMjYyMiw3IEBAIGludDMyX3QgSklUX09QRVJBVElPTiBvcGVyYXRp
b25BcnJheUluZGUKIGludDMyX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25BcnJheUluZGV4T2ZW
YWx1ZUludDMyT3JDb250aWd1b3VzKEV4ZWNTdGF0ZSogZXhlYywgQnV0dGVyZmx5KiBidXR0ZXJm
bHksIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgaW50MzJfdCBpbmRleCkKIHsKICAgICBW
TSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZt
LCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBKU1ZhbHVlIHNl
YXJjaEVsZW1lbnQgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKQEAgLTI2NDQsNyAr
MjY0NCw3IEBAIGludDMyX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25BcnJheUluZGUKIGludDMy
X3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25BcnJheUluZGV4T2ZWYWx1ZURvdWJsZShFeGVjU3Rh
dGUqIGV4ZWMsIEJ1dHRlcmZseSogYnV0dGVyZmx5LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFs
dWUsIGludDMyX3QgaW5kZXgpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAKICAgICBKU1ZhbHVlIHNlYXJjaEVsZW1lbnQgPSBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKIApAQCAtMjY2NSw3ICsyNjY1LDcgQEAgaW50
MzJfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFycmF5SW5kZQogdm9pZCBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvbkxvYWRWYXJhcmdzKEV4ZWNTdGF0ZSogZXhlYywgaW50MzJfdCBmaXJzdEVsZW1l
bnREZXN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQXJndW1lbnRzLCB1aW50MzJfdCBvZmZzZXQs
IHVpbnQzMl90IGxlbmd0aCwgdWludDMyX3QgbWFuZGF0b3J5TWluaW11bSkKIHsKICAgICBWTSYg
dm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBl
eGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICBK
U1ZhbHVlIGFyZ3VtZW50cyA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQXJndW1lbnRzKTsKICAg
ICAKICAgICBsb2FkVmFyYXJncyhleGVjLCBWaXJ0dWFsUmVnaXN0ZXIoZmlyc3RFbGVtZW50RGVz
dCksIGFyZ3VtZW50cywgb2Zmc2V0LCBsZW5ndGgpOwpAQCAtMjY4OCwxNCArMjY4OCwxNCBAQCBk
b3VibGUgSklUX09QRVJBVElPTiBvcGVyYXRpb25SYW5kb20oSlNHCiAKIEpTQ2VsbCogSklUX09Q
RVJBVElPTiBvcGVyYXRpb25TdHJpbmdGcm9tQ2hhckNvZGUoRXhlY1N0YXRlKiBleGVjLCBpbnQz
Ml90IG9wMSkKIHsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBleGVj
LT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAg
IHJldHVybiBKU0M6OnN0cmluZ0Zyb21DaGFyQ29kZShleGVjLCBvcDEpOwogfQogCiBFbmNvZGVk
SlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblN0cmluZ0Zyb21DaGFyQ29kZVVudHlwZWQo
RXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgVk0q
IHZtID0gJmV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICBKU1ZhbHVlIGNoYXJWYWx1ZSA9
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIGludDMyX3QgY2hJbnQgPSBjaGFy
VmFsdWUudG9VSW50MzIoZXhlYyk7CkBAIC0yNzE4LDcgKzI3MTgsNyBAQCBpbnQ2NF90IEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uQ29udmVydERvCiBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
bk5ld1Jhd09iamVjdChFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBpbnQz
Ml90IGxlbmd0aCwgQnV0dGVyZmx5KiBidXR0ZXJmbHkpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAKICAgICBpZiAoIWJ1dHRl
cmZseQogICAgICAgICAmJiAoc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpIHx8IGhhc0lu
ZGV4ZWRQcm9wZXJ0aWVzKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKSkgewpAQCAtMjc0MCw3
ICsyNzQwLDcgQEAgY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdSYXdPYmplYwogSlND
ZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld09iamVjdFdpdGhCdXR0ZXJmbHkoRXhlY1N0
YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQnV0dGVyZmx5KiBidXR0ZXJmbHkpCiB7
CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhl
Yyk7CiAgICAgCiAgICAgaWYgKCFidXR0ZXJmbHkpIHsKICAgICAgICAgYnV0dGVyZmx5ID0gQnV0
dGVyZmx5OjpjcmVhdGUoCkBAIC0yNzU1LDcgKzI3NTUsNyBAQCBKU0NlbGwqIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uTmV3T2JqZWN0CiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3
T2JqZWN0V2l0aEJ1dHRlcmZseVdpdGhJbmRleGluZ0hlYWRlckFuZFZlY3Rvckxlbmd0aChFeGVj
U3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlLCB1bnNpZ25lZCBsZW5ndGgsIEJ1dHRl
cmZseSogYnV0dGVyZmx5KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZl
Q2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRy
YWNlciB0cmFjZXIodm0sIGV4ZWMpOwogCiAgICAgSW5kZXhpbmdIZWFkZXIgaGVhZGVyOwogICAg
IGhlYWRlci5zZXRWZWN0b3JMZW5ndGgobGVuZ3RoKTsKQEAgLTI3NzcsNyArMjc3Nyw3IEBAIEpT
Q2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdPYmplY3QKIEpTQ2VsbCogSklUX09QRVJB
VElPTiBvcGVyYXRpb25OZXdBcnJheVdpdGhTcHJlYWRTbG93KEV4ZWNTdGF0ZSogZXhlYywgdm9p
ZCogYnVmZmVyLCB1aW50MzJfdCBudW1JdGVtcykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgp
OwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBFbmNvZGVkSlNWYWx1ZSogdmFsdWVzID0gc3Rh
dGljX2Nhc3Q8RW5jb2RlZEpTVmFsdWUqPihidWZmZXIpOwpAQCAtMjgzNSw3ICsyODM1LDcgQEAg
SlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0FycmF5VwogSlNDZWxsKiBvcGVyYXRp
b25DcmVhdGVGaXhlZEFycmF5KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgbGVuZ3RoKQogewog
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMp
OwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIGlmIChK
U0ZpeGVkQXJyYXkqIHJlc3VsdCA9IEpTRml4ZWRBcnJheTo6dHJ5Q3JlYXRlKHZtLCB2bS5maXhl
ZEFycmF5U3RydWN0dXJlLmdldCgpLCBsZW5ndGgpKQpAQCAtMjg0OCw3ICsyODQ4LDcgQEAgSlND
ZWxsKiBvcGVyYXRpb25DcmVhdGVGaXhlZEFycmF5KEV4ZWNTdAogSlNDZWxsKiBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvblNwcmVhZEdlbmVyaWMoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGl0ZXJh
YmxlKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
dm0sIGV4ZWMpOwogCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CiAKQEAgLTI4ODMsNyArMjg4Myw3IEBAIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRp
b25TcHJlYWRHZW4KIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25TcHJlYWRGYXN0QXJy
YXkoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGNlbGwpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAKICAgICBBU1NFUlQoaXNK
U0FycmF5KGNlbGwpKTsKICAgICBKU0FycmF5KiBhcnJheSA9IGpzQ2FzdDxKU0FycmF5Kj4oY2Vs
bCk7CkBAIC0yODk1LDcgKzI4OTUsNyBAQCBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
U3ByZWFkRmFzCiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHJvY2Vzc1R5cGVQcm9maWxl
ckxvZ0RGRyhFeGVjU3RhdGUqIGV4ZWMpIAogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0g
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogCiAgICAgdm0udHlwZVByb2ZpbGVyTG9n
KCktPnByb2Nlc3NMb2dFbnRyaWVzKHZtLCAiTG9nIEZ1bGwsIGNhbGxlZCBmcm9tIGluc2lkZSBE
RkcuIl9zKTsKIH0KQEAgLTI5MDMsMjggKzI5MDMsMjggQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvblByb2Nlc3NUeXBlUAogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRp
b25SZXNvbHZlU2NvcGVGb3JIb2lzdGluZ0Z1bmNEZWNsSW5FdmFsKEV4ZWNTdGF0ZSogZXhlYywg
SlNTY29wZSogc2NvcGUsIFVuaXF1ZWRTdHJpbmdJbXBsKiBpbXBsKQogewogICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMp
OworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgICAgICAK
LSAgICBKU1ZhbHVlIHJlc29sdmVkU2NvcGUgPSBKU1Njb3BlOjpyZXNvbHZlU2NvcGVGb3JIb2lz
dGluZ0Z1bmNEZWNsSW5FdmFsKGV4ZWMsIHNjb3BlLCBJZGVudGlmaWVyOjpmcm9tVWlkKGV4ZWMs
IGltcGwpKTsKKyAgICBKU1ZhbHVlIHJlc29sdmVkU2NvcGUgPSBKU1Njb3BlOjpyZXNvbHZlU2Nv
cGVGb3JIb2lzdGluZ0Z1bmNEZWNsSW5FdmFsKGV4ZWMsIHNjb3BlLCBJZGVudGlmaWVyOjpmcm9t
VWlkKHZtLCBpbXBsKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXNvbHZlZFNjb3Bl
KTsKIH0KICAgICAKIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25SZXNvbHZlU2NvcGUo
RXhlY1N0YXRlKiBleGVjLCBKU1Njb3BlKiBzY29wZSwgVW5pcXVlZFN0cmluZ0ltcGwqIGltcGwp
CiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIg
dHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwg
ZXhlYyk7CiAKLSAgICBKU09iamVjdCogcmVzb2x2ZWRTY29wZSA9IEpTU2NvcGU6OnJlc29sdmUo
ZXhlYywgc2NvcGUsIElkZW50aWZpZXI6OmZyb21VaWQoZXhlYywgaW1wbCkpOworICAgIEpTT2Jq
ZWN0KiByZXNvbHZlZFNjb3BlID0gSlNTY29wZTo6cmVzb2x2ZShleGVjLCBzY29wZSwgSWRlbnRp
Zmllcjo6ZnJvbVVpZCh2bSwgaW1wbCkpOwogICAgIHJldHVybiByZXNvbHZlZFNjb3BlOwogfQog
CiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldER5bmFtaWNWYXIoRXhl
Y1N0YXRlKiBleGVjLCBKU09iamVjdCogc2NvcGUsIFVuaXF1ZWRTdHJpbmdJbXBsKiBpbXBsLCB1
bnNpZ25lZCBnZXRQdXRJbmZvQml0cykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIElkZW50aWZpZXIgaWRlbnQgPSBJZGVudGlmaWVy
Ojpmcm9tVWlkKGV4ZWMsIGltcGwpOworICAgIElkZW50aWZpZXIgaWRlbnQgPSBJZGVudGlmaWVy
Ojpmcm9tVWlkKHZtLCBpbXBsKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwg
SlNWYWx1ZTo6ZW5jb2RlKHNjb3BlLT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgaWRlbnQsIFsmXSAo
Ym9vbCBmb3VuZCwgUHJvcGVydHlTbG90JiBzbG90KSAtPiBKU1ZhbHVlIHsKICAgICAgICAgaWYg
KCFmb3VuZCkgewogICAgICAgICAgICAgR2V0UHV0SW5mbyBnZXRQdXRJbmZvKGdldFB1dEluZm9C
aXRzKTsKQEAgLTI5NTEsNyArMjk1MSw3IEBAIEFMV0FZU19JTkxJTkUgc3RhdGljIHZvaWQgcHV0
RHluYW1pY1ZhcigKIHsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKIAotICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gSWRlbnRpZmllcjo6ZnJvbVVp
ZChleGVjLCBpbXBsKTsKKyAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IElkZW50aWZpZXI6
OmZyb21VaWQodm0sIGltcGwpOwogICAgIEdldFB1dEluZm8gZ2V0UHV0SW5mbyhnZXRQdXRJbmZv
Qml0cyk7CiAgICAgYm9vbCBoYXNQcm9wZXJ0eSA9IHNjb3BlLT5oYXNQcm9wZXJ0eShleGVjLCBp
ZGVudCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB2b2lkKCkpOwpAQCAt
Mjk4MCw3ICsyOTgwLDcgQEAgQUxXQVlTX0lOTElORSBzdGF0aWMgdm9pZCBwdXREeW5hbWljVmFy
KAogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dER5bmFtaWNWYXJTdHJpY3QoRXhlY1N0
YXRlKiBleGVjLCBKU09iamVjdCogc2NvcGUsIEVuY29kZWRKU1ZhbHVlIHZhbHVlLCBVbmlxdWVk
U3RyaW5nSW1wbCogaW1wbCwgdW5zaWduZWQgZ2V0UHV0SW5mb0JpdHMpCiB7CiAgICAgVk0mIHZt
ID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhl
Yyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgY29u
c3RleHByIGJvb2wgaXNTdHJpY3RNb2RlID0gdHJ1ZTsKICAgICByZXR1cm4gcHV0RHluYW1pY1Zh
cihleGVjLCB2bSwgc2NvcGUsIHZhbHVlLCBpbXBsLCBnZXRQdXRJbmZvQml0cywgaXNTdHJpY3RN
b2RlKTsKIH0KQEAgLTI5ODgsNyArMjk4OCw3IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRp
b25QdXREeW5hbWljVmEKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXREeW5hbWljVmFy
Tm9uU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHNjb3BlLCBFbmNvZGVkSlNWYWx1
ZSB2YWx1ZSwgVW5pcXVlZFN0cmluZ0ltcGwqIGltcGwsIHVuc2lnbmVkIGdldFB1dEluZm9CaXRz
KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0s
IGV4ZWMpOwogICAgIGNvbnN0ZXhwciBib29sIGlzU3RyaWN0TW9kZSA9IGZhbHNlOwogICAgIHJl
dHVybiBwdXREeW5hbWljVmFyKGV4ZWMsIHZtLCBzY29wZSwgdmFsdWUsIGltcGwsIGdldFB1dElu
Zm9CaXRzLCBpc1N0cmljdE1vZGUpOwogfQpAQCAtMjk5Niw3ICsyOTk2LDcgQEAgdm9pZCBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvblB1dER5bmFtaWNWYQogaW50MzJfdCBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbk1hcEhhc2goRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBpbnB1dCkKIHsK
ICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVj
KTsKIAogICAgIHJldHVybiBqc01hcEhhc2goZXhlYywgdm0sIEpTVmFsdWU6OmRlY29kZShpbnB1
dCkpOwogfQpAQCAtMzAwNCw3ICszMDA0LDcgQEAgaW50MzJfdCBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbk1hcEhhc2goRQogSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkpTTWFwRmluZEJ1
Y2tldChFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogbWFwLCBFbmNvZGVkSlNWYWx1ZSBrZXksIGlu
dDMyX3QgaGFzaCkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxG
cmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIg
dHJhY2VyKHZtLCBleGVjKTsKICAgICBKU01hcDo6QnVja2V0VHlwZSoqIGJ1Y2tldCA9IGpzQ2Fz
dDxKU01hcCo+KG1hcCktPmZpbmRCdWNrZXQoZXhlYywgSlNWYWx1ZTo6ZGVjb2RlKGtleSksIGhh
c2gpOwogICAgIGlmICghYnVja2V0KQogICAgICAgICByZXR1cm4gdm0uc2VudGluZWxNYXBCdWNr
ZXQoKTsKQEAgLTMwMTQsNyArMzAxNCw3IEBAIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRp
b25KU01hcEZpbmQKIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25KU1NldEZpbmRCdWNr
ZXQoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIG1hcCwgRW5jb2RlZEpTVmFsdWUga2V5LCBpbnQz
Ml90IGhhc2gpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcih2bSwgZXhlYyk7CiAgICAgSlNTZXQ6OkJ1Y2tldFR5cGUqKiBidWNrZXQgPSBqc0Nhc3Q8
SlNTZXQqPihtYXApLT5maW5kQnVja2V0KGV4ZWMsIEpTVmFsdWU6OmRlY29kZShrZXkpLCBoYXNo
KTsKICAgICBpZiAoIWJ1Y2tldCkKICAgICAgICAgcmV0dXJuIHZtLnNlbnRpbmVsU2V0QnVja2V0
KCk7CkBAIC0zMDI0LDcgKzMwMjQsNyBAQCBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
SlNTZXRGaW5kCiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uU2V0QWRkKEV4ZWNTdGF0
ZSogZXhlYywgSlNDZWxsKiBzZXQsIEVuY29kZWRKU1ZhbHVlIGtleSwgaW50MzJfdCBoYXNoKQog
ewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4
ZWMpOwogICAgIGF1dG8qIGJ1Y2tldCA9IGpzQ2FzdDxKU1NldCo+KHNldCktPmFkZE5vcm1hbGl6
ZWQoZXhlYywgSlNWYWx1ZTo6ZGVjb2RlKGtleSksIEpTVmFsdWUoKSwgaGFzaCk7CiAgICAgaWYg
KCFidWNrZXQpCiAgICAgICAgIHJldHVybiB2bS5zZW50aW5lbFNldEJ1Y2tldCgpOwpAQCAtMzAz
NCw3ICszMDM0LDcgQEAgSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblNldEFkZChFeAog
SlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk1hcFNldChFeGVjU3RhdGUqIGV4ZWMsIEpT
Q2VsbCogbWFwLCBFbmNvZGVkSlNWYWx1ZSBrZXksIEVuY29kZWRKU1ZhbHVlIHZhbHVlLCBpbnQz
Ml90IGhhc2gpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcih2bSwgZXhlYyk7CiAgICAgYXV0byogYnVja2V0ID0ganNDYXN0PEpTTWFwKj4obWFwKS0+
YWRkTm9ybWFsaXplZChleGVjLCBKU1ZhbHVlOjpkZWNvZGUoa2V5KSwgSlNWYWx1ZTo6ZGVjb2Rl
KHZhbHVlKSwgaGFzaCk7CiAgICAgaWYgKCFidWNrZXQpCiAgICAgICAgIHJldHVybiB2bS5zZW50
aW5lbE1hcEJ1Y2tldCgpOwpAQCAtMzA0NCwyOCArMzA0NCwyOCBAQCBKU0NlbGwqIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uTWFwU2V0KEV4CiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uV2Vh
a1NldEFkZChFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogc2V0LCBKU0NlbGwqIGtleSwgaW50MzJf
dCBoYXNoKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIodm0sIGV4ZWMpOwogICAgIGpzQ2FzdDxKU1dlYWtTZXQqPihzZXQpLT5hZGQodm0sIGFzT2Jq
ZWN0KGtleSksIEpTVmFsdWUoKSwgaGFzaCk7CiB9CiAKIHZvaWQgSklUX09QRVJBVElPTiBvcGVy
YXRpb25XZWFrTWFwU2V0KEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBtYXAsIEpTQ2VsbCoga2V5
LCBFbmNvZGVkSlNWYWx1ZSB2YWx1ZSwgaW50MzJfdCBoYXNoKQogewogICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwor
ICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIGpzQ2FzdDxK
U1dlYWtNYXAqPihtYXApLT5hZGQodm0sIGFzT2JqZWN0KGtleSksIEpTVmFsdWU6OmRlY29kZSh2
YWx1ZSksIGhhc2gpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
bkdldFByb3RvdHlwZU9mT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmpl
Y3QpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFj
ZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2
bSwgZXhlYyk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aGlzT2JqZWN0LT5nZXRQcm90
b3R5cGUodm0sIGV4ZWMpKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVy
YXRpb25HZXRQcm90b3R5cGVPZihFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRWYWx1ZSkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKHZtLCBleGVjKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CiAKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUp
LnRvVGhpcyhleGVjLCBTdHJpY3RNb2RlKTsKQEAgLTMwODcsNyArMzA4Nyw3IEBAIEVuY29kZWRK
U1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2UKIHZvaWQgSklUX09QRVJBVElPTiBvcGVy
YXRpb25UaHJvd0RGRyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIHZhbHVlVG9UaHJv
dykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZt
LCBleGVjKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAg
c2NvcGUudGhyb3dFeGNlcHRpb24oZXhlYywgSlNWYWx1ZTo6ZGVjb2RlKHZhbHVlVG9UaHJvdykp
OwogfQpAQCAtMzA5NSw3ICszMDk1LDcgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRo
cm93REZHKEV4ZQogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRocm93U3RhdGljRXJyb3Io
RXhlY1N0YXRlKiBleGVjLCBKU1N0cmluZyogbWVzc2FnZSwgdWludDMyX3QgZXJyb3JUeXBlKQog
ewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4
ZWMpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBTdHJp
bmcgZXJyb3JNZXNzYWdlID0gbWVzc2FnZS0+dmFsdWUoZXhlYyk7CiAgICAgc2NvcGUudGhyb3dF
eGNlcHRpb24oZXhlYywgY3JlYXRlRXJyb3IoZXhlYywgc3RhdGljX2Nhc3Q8RXJyb3JUeXBlPihl
cnJvclR5cGUpLCBlcnJvck1lc3NhZ2UpKTsKQEAgLTMxMDUsNyArMzEwNSw3IEBAIGV4dGVybiAi
QyIgdm9pZCBKSVRfT1BFUkFUSU9OIHRyaWdnZXJSZW8KIHsKICAgICAvLyBJdCdzIHNvcnQgb2Yg
cHJlZmVyYWJsZSB0aGF0IHdlIGRvbid0IEdDIHdoaWxlIGluIGhlcmUuIEFueXdheXMsIGRvaW5n
IHNvIHdvdWxkbid0CiAgICAgLy8gcmVhbGx5IGJlIHByb2ZpdGFibGUuCi0gICAgRGVmZXJHQ0Zv
ckFXaGlsZSBkZWZlckdDKGNvZGVCbG9jay0+dm0oKS0+aGVhcCk7CisgICAgRGVmZXJHQ0ZvckFX
aGlsZSBkZWZlckdDKGNvZGVCbG9jay0+dm0oKS5oZWFwKTsKICAgICAKICAgICBzYW5pdGl6ZVN0
YWNrRm9yVk0oY29kZUJsb2NrLT52bSgpKTsKIApAQCAtMzE3OCw3ICszMTc4LDcgQEAgc3RhdGlj
IGJvb2wgc2hvdWxkVHJpZ2dlckZUTENvbXBpbGUoQ29kZQogICAgIHJldHVybiB0cnVlOwogfQog
Ci1zdGF0aWMgdm9pZCB0cmlnZ2VyRlRMUmVwbGFjZW1lbnRDb21waWxlKFZNKiB2bSwgQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIEpJVENvZGUqIGppdENvZGUpCitzdGF0aWMgdm9pZCB0cmlnZ2VyRlRM
UmVwbGFjZW1lbnRDb21waWxlKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVENvZGUq
IGppdENvZGUpCiB7CiAgICAgaWYgKGNvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBHbG9iYWxDb2Rl
KSB7CiAgICAgICAgIC8vIEdsb2JhbCBjb2RlIHJ1bnMgb25jZSwgc28gd2UgZG9uJ3Qgd2FudCB0
byBkbyBhbnl0aGluZy4gV2UgZG9uJ3Qgd2FudCB0byBkZWZlciBpbmRlZmluaXRlbHksCkBAIC0z
MTkxLDcgKzMxOTEsNyBAQCBzdGF0aWMgdm9pZCB0cmlnZ2VyRlRMUmVwbGFjZW1lbnRDb21waWxl
CiAgICAgV29ya2xpc3Q6OlN0YXRlIHdvcmtsaXN0U3RhdGU7CiAgICAgaWYgKFdvcmtsaXN0KiB3
b3JrbGlzdCA9IGV4aXN0aW5nR2xvYmFsRlRMV29ya2xpc3RPck51bGwoKSkgewogICAgICAgICB3
b3JrbGlzdFN0YXRlID0gd29ya2xpc3QtPmNvbXBsZXRlQWxsUmVhZHlQbGFuc0ZvclZNKAotICAg
ICAgICAgICAgKnZtLCBDb21waWxhdGlvbktleShjb2RlQmxvY2stPmJhc2VsaW5lVmVyc2lvbigp
LCBGVExNb2RlKSk7CisgICAgICAgICAgICB2bSwgQ29tcGlsYXRpb25LZXkoY29kZUJsb2NrLT5i
YXNlbGluZVZlcnNpb24oKSwgRlRMTW9kZSkpOwogICAgIH0gZWxzZQogICAgICAgICB3b3JrbGlz
dFN0YXRlID0gV29ya2xpc3Q6Ok5vdEtub3duOwogICAgIApAQCAtMzIyMiw3ICszMjIyLDcgQEAg
c3RhdGljIHZvaWQgdHJpZ2dlckZUTFJlcGxhY2VtZW50Q29tcGlsZQogICAgIENPREVCTE9DS19M
T0dfRVZFTlQoY29kZUJsb2NrLCAidHJpZ2dlckZUTFJlcGxhY2VtZW50IiwgKCkpOwogICAgIC8v
IFdlIG5lZWQgdG8gY29tcGlsZSB0aGUgY29kZS4KICAgICBjb21waWxlKAotICAgICAgICAqdm0s
IGNvZGVCbG9jay0+bmV3UmVwbGFjZW1lbnQoKSwgY29kZUJsb2NrLCBGVExNb2RlLCBVSU5UX01B
WCwKKyAgICAgICAgdm0sIGNvZGVCbG9jay0+bmV3UmVwbGFjZW1lbnQoKSwgY29kZUJsb2NrLCBG
VExNb2RlLCBVSU5UX01BWCwKICAgICAgICAgT3BlcmFuZHM8T3B0aW9uYWw8SlNWYWx1ZT4+KCks
IFRvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjpjcmVhdGUoKSk7CiAKICAgICAvLyBJ
ZiB3ZSByZWFjaGVkIGhlcmUsIHRoZSBjb3VudGVyIGhhcyBub3QgYmUgcmVzZXQuIERvIHRoYXQg
bm93LgpAQCAtMzIzMiw5ICszMjMyLDkgQEAgc3RhdGljIHZvaWQgdHJpZ2dlckZUTFJlcGxhY2Vt
ZW50Q29tcGlsZQogCiB2b2lkIEpJVF9PUEVSQVRJT04gdHJpZ2dlclRpZXJVcE5vdyhFeGVjU3Rh
dGUqIGV4ZWMpCiB7Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLSAg
ICBEZWZlckdDRm9yQVdoaWxlIGRlZmVyR0Modm0tPmhlYXApOworICAgIERlZmVyR0NGb3JBV2hp
bGUgZGVmZXJHQyh2bS5oZWFwKTsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNv
ZGVCbG9jaygpOwogICAgIAogICAgIHNhbml0aXplU3RhY2tGb3JWTSh2bSk7CkBAIC0zMjc3LDE0
ICszMjc3LDE0IEBAIHZvaWQgSklUX09QRVJBVElPTiB0cmlnZ2VyVGllclVwTm93KEV4ZWMKIAog
c3RhdGljIGNoYXIqIHRpZXJVcENvbW1vbihFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIG9yaWdp
bkJ5dGVjb2RlSW5kZXgsIGJvb2wgY2FuT1NSRW50ZXJIZXJlKQogewotICAgIFZNKiB2bSA9ICZl
eGVjLT52bSgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgQ29kZUJsb2NrKiBjb2Rl
QmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKIAogICAgIC8vIFJlc29sdmUgYW55IHBlbmRpbmcg
cGxhbiBmb3IgT1NSIEVudGVyIG9uIHRoaXMgZnVuY3Rpb24uCiAgICAgV29ya2xpc3Q6OlN0YXRl
IHdvcmtsaXN0U3RhdGU7CiAgICAgaWYgKFdvcmtsaXN0KiB3b3JrbGlzdCA9IGV4aXN0aW5nR2xv
YmFsRlRMV29ya2xpc3RPck51bGwoKSkgewogICAgICAgICB3b3JrbGlzdFN0YXRlID0gd29ya2xp
c3QtPmNvbXBsZXRlQWxsUmVhZHlQbGFuc0ZvclZNKAotICAgICAgICAgICAgKnZtLCBDb21waWxh
dGlvbktleShjb2RlQmxvY2stPmJhc2VsaW5lVmVyc2lvbigpLCBGVExGb3JPU1JFbnRyeU1vZGUp
KTsKKyAgICAgICAgICAgIHZtLCBDb21waWxhdGlvbktleShjb2RlQmxvY2stPmJhc2VsaW5lVmVy
c2lvbigpLCBGVExGb3JPU1JFbnRyeU1vZGUpKTsKICAgICB9IGVsc2UKICAgICAgICAgd29ya2xp
c3RTdGF0ZSA9IFdvcmtsaXN0OjpOb3RLbm93bjsKIApAQCAtMzQ2NCw3ICszNDY0LDcgQEAgc3Rh
dGljIGNoYXIqIHRpZXJVcENvbW1vbihFeGVjU3RhdGUqIGV4ZQogCiAgICAgQ09ERUJMT0NLX0xP
R19FVkVOVChjb2RlQmxvY2ssICJ0cmlnZ2VyRlRMT1NSIiwgKCkpOwogICAgIENvbXBpbGF0aW9u
UmVzdWx0IGZvckVudHJ5UmVzdWx0ID0gY29tcGlsZSgKLSAgICAgICAgKnZtLCByZXBsYWNlbWVu
dENvZGVCbG9jaywgY29kZUJsb2NrLCBGVExGb3JPU1JFbnRyeU1vZGUsIG9yaWdpbkJ5dGVjb2Rl
SW5kZXgsCisgICAgICAgIHZtLCByZXBsYWNlbWVudENvZGVCbG9jaywgY29kZUJsb2NrLCBGVExG
b3JPU1JFbnRyeU1vZGUsIG9yaWdpbkJ5dGVjb2RlSW5kZXgsCiAgICAgICAgIG11c3RIYW5kbGVW
YWx1ZXMsIFRvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6OmNyZWF0
ZSh0cmlnZ2VyQWRkcmVzcykpOwogCiAgICAgaWYgKGppdENvZGUtPm5ldmVyRXhlY3V0ZWRFbnRy
eSkKQEAgLTM0OTMsOSArMzQ5Myw5IEBAIHN0YXRpYyBjaGFyKiB0aWVyVXBDb21tb24oRXhlY1N0
YXRlKiBleGUKIAogdm9pZCBKSVRfT1BFUkFUSU9OIHRyaWdnZXJUaWVyVXBOb3dJbkxvb3AoRXhl
Y1N0YXRlKiBleGVjLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KQogewotICAgIFZNKiB2bSA9ICZl
eGVjLT52bSgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0gICAgRGVmZXJHQ0ZvckFXaGlsZSBkZWZlckdDKHZt
LT5oZWFwKTsKKyAgICBEZWZlckdDRm9yQVdoaWxlIGRlZmVyR0Modm0uaGVhcCk7CiAgICAgQ29k
ZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKIAogICAgIHNhbml0aXplU3Rh
Y2tGb3JWTSh2bSk7CkBAIC0zNTI3LDkgKzM1MjcsOSBAQCB2b2lkIEpJVF9PUEVSQVRJT04gdHJp
Z2dlclRpZXJVcE5vd0luTG9vCiAKIGNoYXIqIEpJVF9PUEVSQVRJT04gdHJpZ2dlck9TUkVudHJ5
Tm93KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKIHsKLSAgICBWTSog
dm0gPSAmZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwotICAgIERlZmVyR0NGb3JBV2hpbGUgZGVm
ZXJHQyh2bS0+aGVhcCk7CisgICAgRGVmZXJHQ0ZvckFXaGlsZSBkZWZlckdDKHZtLmhlYXApOwog
ICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7CiAKICAgICBzYW5p
dGl6ZVN0YWNrRm9yVk0odm0pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQ
bGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4u
Y3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Bs
YW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTM3LDcgKzEzNyw3IEBAIFBsYW46OlBsYW4oQ29k
ZUJsb2NrKiBwYXNzZWRDb2RlQmxvY2ssIEMKICAgICBDb21waWxhdGlvbk1vZGUgbW9kZSwgdW5z
aWduZWQgb3NyRW50cnlCeXRlY29kZUluZGV4LAogICAgIGNvbnN0IE9wZXJhbmRzPE9wdGlvbmFs
PEpTVmFsdWU+PiYgbXVzdEhhbmRsZVZhbHVlcykKICAgICA6IG1fbW9kZShtb2RlKQotICAgICwg
bV92bShwYXNzZWRDb2RlQmxvY2stPnZtKCkpCisgICAgLCBtX3ZtKCZwYXNzZWRDb2RlQmxvY2st
PnZtKCkpCiAgICAgLCBtX2NvZGVCbG9jayhwYXNzZWRDb2RlQmxvY2spCiAgICAgLCBtX3Byb2Zp
bGVkREZHQ29kZUJsb2NrKHByb2ZpbGVkREZHQ29kZUJsb2NrKQogICAgICwgbV9tdXN0SGFuZGxl
VmFsdWVzKG11c3RIYW5kbGVWYWx1ZXMpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHJldmlzaW9uIDI0OTEyOCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEx
LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDExLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChD
KSAyMDExIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dApAQCAtNTg4LDcgKzU4OCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxs
KE5vZGUqIG5vZGUKICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhlY3V0YWJsZSA9
IG51bGxwdHI7CiAgICAgaWYgKGlzRGlyZWN0KSB7CiAgICAgICAgIGV4ZWN1dGFibGUgPSBub2Rl
LT5jYXN0T3BlcmFuZDxFeGVjdXRhYmxlQmFzZSo+KCk7Ci0gICAgICAgIGZ1bmN0aW9uRXhlY3V0
YWJsZSA9IGpzRHluYW1pY0Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oKm1faml0LnZtKCksIGV4
ZWN1dGFibGUpOworICAgICAgICBmdW5jdGlvbkV4ZWN1dGFibGUgPSBqc0R5bmFtaWNDYXN0PEZ1
bmN0aW9uRXhlY3V0YWJsZSo+KHZtKCksIGV4ZWN1dGFibGUpOwogICAgIH0KICAgICAKICAgICB1
bnNpZ25lZCBudW1QYXNzZWRBcmdzID0gMDsKQEAgLTYyMiw3ICs2MjIsNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlCiAgICAgICAgICAgICBlbHNlCiAgICAgICAg
ICAgICAgICAgaW5saW5lQ2FsbEZyYW1lID0gbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNh
bGxGcmFtZSgpOwogICAgICAgICAgICAgLy8gZW1pdFNldHVwVmFyYXJnc0ZyYW1lRmFzdENhc2Ug
bW9kaWZpZXMgdGhlIHN0YWNrIHBvaW50ZXIgaWYgaXQgc3VjY2VlZHMuCi0gICAgICAgICAgICBl
bWl0U2V0dXBWYXJhcmdzRnJhbWVGYXN0Q2FzZSgqbV9qaXQudm0oKSwgbV9qaXQsIHNjcmF0Y2hH
UFIyLCBzY3JhdGNoR1BSMSwgc2NyYXRjaEdQUjIsIHNjcmF0Y2hHUFIzLCBpbmxpbmVDYWxsRnJh
bWUsIGRhdGEtPmZpcnN0VmFyQXJnT2Zmc2V0LCBzbG93Q2FzZSk7CisgICAgICAgICAgICBlbWl0
U2V0dXBWYXJhcmdzRnJhbWVGYXN0Q2FzZSh2bSgpLCBtX2ppdCwgc2NyYXRjaEdQUjIsIHNjcmF0
Y2hHUFIxLCBzY3JhdGNoR1BSMiwgc2NyYXRjaEdQUjMsIGlubGluZUNhbGxGcmFtZSwgZGF0YS0+
Zmlyc3RWYXJBcmdPZmZzZXQsIHNsb3dDYXNlKTsKICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpK
dW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7CiAgICAgICAgICAgICBzbG93Q2FzZS5saW5rKCZtX2pp
dCk7CiAgICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRocm93U3RhY2tPdmVyZmxv
d0ZvclZhcmFyZ3MpOwpAQCAtODE3LDcgKzgxNyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVt
aXRDYWxsKE5vZGUqIG5vZGUKICAgICAgICAgbV9qaXQuYWRkUHRyKFRydXN0ZWRJbW0zMihyZXF1
aXJlZEJ5dGVzKSwgSklUQ29tcGlsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICAgICAg
bV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpjYWxsZWVGcmFtZVNsb3QoQ2FsbEZyYW1lU2xvdDo6
Y2FsbGVlKS53aXRoT2Zmc2V0KFBheWxvYWRPZmZzZXQpLCBHUFJJbmZvOjpyZWdUMCk7CiAgICAg
ICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6Y2FsbGVlRnJhbWVTbG90KENhbGxGcmFtZVNs
b3Q6OmNhbGxlZSkud2l0aE9mZnNldChUYWdPZmZzZXQpLCBHUFJJbmZvOjpyZWdUMSk7Ci0gICAg
ICAgIG1faml0LmVtaXREdW1iVmlydHVhbENhbGwoKm1faml0LnZtKCksIGluZm8pOworICAgICAg
ICBtX2ppdC5lbWl0RHVtYlZpcnR1YWxDYWxsKHZtKCksIGluZm8pOwogICAgICAgICAKICAgICAg
ICAgZG9uZS5saW5rKCZtX2ppdCk7CiAgICAgICAgIHNldFJlc3VsdEFuZFJlc2V0U3RhY2soKTsK
QEAgLTE1NzAsNyArMTU3MCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVMb2dpY2Fs
Tm90KE4KICAgICAgICAgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSAh
bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnRJc1N0aWxsVmFsaWQoKTsKICAgICAgICAg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0
Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CiAgICAgICAgIGJvb2wgbmVnYXRlUmVzdWx0ID0g
dHJ1ZTsKLSAgICAgICAgbV9qaXQuZW1pdENvbnZlcnRWYWx1ZVRvQm9vbGVhbigqbV9qaXQudm0o
KSwgYXJnMS5qc1ZhbHVlUmVncygpLCByZXN1bHRHUFIsIHRlbXAuZ3ByKCksIHZhbHVlRlBSLmZw
cigpLCB0ZW1wRlBSLmZwcigpLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIGds
b2JhbE9iamVjdCwgbmVnYXRlUmVzdWx0KTsKKyAgICAgICAgbV9qaXQuZW1pdENvbnZlcnRWYWx1
ZVRvQm9vbGVhbih2bSgpLCBhcmcxLmpzVmFsdWVSZWdzKCksIHJlc3VsdEdQUiwgdGVtcC5ncHIo
KSwgdmFsdWVGUFIuZnByKCksIHRlbXBGUFIuZnByKCksIHNob3VsZENoZWNrTWFzcXVlcmFkZXNB
c1VuZGVmaW5lZCwgZ2xvYmFsT2JqZWN0LCBuZWdhdGVSZXN1bHQpOwogICAgICAgICBib29sZWFu
UmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xNzE1
LDcgKzE3MTUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0QnJhbmNoKE5vZGUqIG5vCiAK
ICAgICAgICAgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSAhbWFzcXVl
cmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnRJc1N0aWxsVmFsaWQoKTsKICAgICAgICAgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG5v
ZGUtPm9yaWdpbi5zZW1hbnRpYyk7Ci0gICAgICAgIGF1dG8gZmFsc2V5ID0gbV9qaXQuYnJhbmNo
SWZGYWxzZXkoKm1faml0LnZtKCksIHZhbHVlUmVncywgcmVzdWx0R1BSLCB0ZW1wLmdwcigpLCB2
YWx1ZUZQUi5mcHIoKSwgdGVtcEZQUi5mcHIoKSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkLCBnbG9iYWxPYmplY3QpOworICAgICAgICBhdXRvIGZhbHNleSA9IG1faml0LmJyYW5j
aElmRmFsc2V5KHZtKCksIHZhbHVlUmVncywgcmVzdWx0R1BSLCB0ZW1wLmdwcigpLCB2YWx1ZUZQ
Ui5mcHIoKSwgdGVtcEZQUi5mcHIoKSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
LCBnbG9iYWxPYmplY3QpOwogICAgICAgICBhZGRCcmFuY2goZmFsc2V5LCBub3RUYWtlbik7CiAg
ICAgICAgIGp1bXAodGFrZW4sIEZvcmNlSnVtcCk7CiAKQEAgLTM5MzksOCArMzkzOSw4IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgbV9qaXQuYWRk
MzIoc3RydWN0dXJlSURHUFIsIGhhc2hHUFIpOwogICAgICAgICBtX2ppdC5hbmQzMihUcnVzdGVk
SW1tMzIoSGFzT3duUHJvcGVydHlDYWNoZTo6bWFzayksIGhhc2hHUFIpOwogICAgICAgICBtX2pp
dC5tdWwzMihUcnVzdGVkSW1tMzIoc2l6ZW9mKEhhc093blByb3BlcnR5Q2FjaGU6OkVudHJ5KSks
IGhhc2hHUFIsIGhhc2hHUFIpOwotICAgICAgICBBU1NFUlQobV9qaXQudm0oKS0+aGFzT3duUHJv
cGVydHlDYWNoZSgpKTsKLSAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKG1faml0LnZt
KCktPmhhc093blByb3BlcnR5Q2FjaGUoKSksIHRlbXBHUFIpOworICAgICAgICBBU1NFUlQodm0o
KS5oYXNPd25Qcm9wZXJ0eUNhY2hlKCkpOworICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1Q
dHIodm0oKS5oYXNPd25Qcm9wZXJ0eUNhY2hlKCkpLCB0ZW1wR1BSKTsKICAgICAgICAgc2xvd1Bh
dGguYXBwZW5kKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIAogICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleCh0ZW1wR1BSLCBoYXNoR1BSLCBNYWNy
b0Fzc2VtYmxlcjo6VGltZXNPbmUsIEhhc093blByb3BlcnR5Q2FjaGU6OkVudHJ5OjpvZmZzZXRP
ZkltcGwoKSksIGltcGxHUFIpKTsKICAgICAgICAgbV9qaXQubG9hZDgoTWFjcm9Bc3NlbWJsZXI6
OkJhc2VJbmRleCh0ZW1wR1BSLCBoYXNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNPbmUsIEhh
c093blByb3BlcnR5Q2FjaGU6OkVudHJ5OjpvZmZzZXRPZlJlc3VsdCgpKSwgcmVzdWx0R1BSKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDY0LmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ3LDcgKzI0Nyw3IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlTm9uUGUKICAgICAgICAgR1BSUmVn
IGxvY2FsR2xvYmFsT2JqZWN0R1BSID0gbG9jYWxHbG9iYWxPYmplY3QuZ3ByKCk7CiAgICAgICAg
IEdQUlJlZyByZW1vdGVHbG9iYWxPYmplY3RHUFIgPSByZW1vdGVHbG9iYWxPYmplY3QuZ3ByKCk7
CiAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9qaXQuZ3Jh
cGgoKSwgbV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3IobV9jdXJyZW50Tm9kZS0+b3JpZ2lu
LnNlbWFudGljKSksIGxvY2FsR2xvYmFsT2JqZWN0R1BSKTsKLSAgICAgICAgbV9qaXQuZW1pdExv
YWRTdHJ1Y3R1cmUoKm1faml0LnZtKCksIGFyZ0dQUiwgcmVzdWx0R1BSLCBzY3JhdGNoLmdwcigp
KTsKKyAgICAgICAgbV9qaXQuZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgYXJnR1BSLCByZXN1bHRH
UFIsIHNjcmF0Y2guZ3ByKCkpOwogICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpB
ZGRyZXNzKHJlc3VsdEdQUiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlbW90
ZUdsb2JhbE9iamVjdEdQUik7CiAgICAgICAgIG1faml0LmNvbXBhcmVQdHIoSklUQ29tcGlsZXI6
OkVxdWFsLCBsb2NhbEdsb2JhbE9iamVjdEdQUiwgcmVtb3RlR2xvYmFsT2JqZWN0R1BSLCByZXN1
bHRHUFIpOwogICAgICAgICBkb25lLmFwcGVuZChtX2ppdC5qdW1wKCkpOwpAQCAtMzAwLDcgKzMw
MCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVlcGgKICAgICAgICAg
R1BSUmVnIGxvY2FsR2xvYmFsT2JqZWN0R1BSID0gbG9jYWxHbG9iYWxPYmplY3QuZ3ByKCk7CiAg
ICAgICAgIEdQUlJlZyByZW1vdGVHbG9iYWxPYmplY3RHUFIgPSByZW1vdGVHbG9iYWxPYmplY3Qu
Z3ByKCk7CiAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9q
aXQuZ3JhcGgoKSwgbV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3IobV9jdXJyZW50Tm9kZS0+
b3JpZ2luLnNlbWFudGljKSksIGxvY2FsR2xvYmFsT2JqZWN0R1BSKTsKLSAgICAgICAgbV9qaXQu
ZW1pdExvYWRTdHJ1Y3R1cmUoKm1faml0LnZtKCksIGFyZ0dQUiwgcmVzdWx0R1BSLCBzY3JhdGNo
LmdwcigpKTsKKyAgICAgICAgbV9qaXQuZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgYXJnR1BSLCBy
ZXN1bHRHUFIsIHNjcmF0Y2guZ3ByKCkpOwogICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBp
bGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSks
IHJlbW90ZUdsb2JhbE9iamVjdEdQUik7CiAgICAgICAgIGJyYW5jaFB0cihKSVRDb21waWxlcjo6
RXF1YWwsIGxvY2FsR2xvYmFsT2JqZWN0R1BSLCByZW1vdGVHbG9iYWxPYmplY3RHUFIsIHRha2Vu
KTsKIApAQCAtNTQ3LDcgKzU0Nyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5v
ZGUqIG5vZGUKICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhlY3V0YWJsZSA9IG51
bGxwdHI7CiAgICAgaWYgKGlzRGlyZWN0KSB7CiAgICAgICAgIGV4ZWN1dGFibGUgPSBub2RlLT5j
YXN0T3BlcmFuZDxFeGVjdXRhYmxlQmFzZSo+KCk7Ci0gICAgICAgIGZ1bmN0aW9uRXhlY3V0YWJs
ZSA9IGpzRHluYW1pY0Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oKm1faml0LnZtKCksIGV4ZWN1
dGFibGUpOworICAgICAgICBmdW5jdGlvbkV4ZWN1dGFibGUgPSBqc0R5bmFtaWNDYXN0PEZ1bmN0
aW9uRXhlY3V0YWJsZSo+KHZtKCksIGV4ZWN1dGFibGUpOwogICAgIH0KICAgICAKICAgICB1bnNp
Z25lZCBudW1QYXNzZWRBcmdzID0gMDsKQEAgLTU4MSw3ICs1ODEsNyBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlCiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAg
ICAgICAgaW5saW5lQ2FsbEZyYW1lID0gbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxG
cmFtZSgpOwogICAgICAgICAgICAgLy8gZW1pdFNldHVwVmFyYXJnc0ZyYW1lRmFzdENhc2UgbW9k
aWZpZXMgdGhlIHN0YWNrIHBvaW50ZXIgaWYgaXQgc3VjY2VlZHMuCi0gICAgICAgICAgICBlbWl0
U2V0dXBWYXJhcmdzRnJhbWVGYXN0Q2FzZSgqbV9qaXQudm0oKSwgbV9qaXQsIHNjcmF0Y2hHUFIy
LCBzY3JhdGNoR1BSMSwgc2NyYXRjaEdQUjIsIHNjcmF0Y2hHUFIzLCBpbmxpbmVDYWxsRnJhbWUs
IGRhdGEtPmZpcnN0VmFyQXJnT2Zmc2V0LCBzbG93Q2FzZSk7CisgICAgICAgICAgICBlbWl0U2V0
dXBWYXJhcmdzRnJhbWVGYXN0Q2FzZSh2bSgpLCBtX2ppdCwgc2NyYXRjaEdQUjIsIHNjcmF0Y2hH
UFIxLCBzY3JhdGNoR1BSMiwgc2NyYXRjaEdQUjMsIGlubGluZUNhbGxGcmFtZSwgZGF0YS0+Zmly
c3RWYXJBcmdPZmZzZXQsIHNsb3dDYXNlKTsKICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1w
IGRvbmUgPSBtX2ppdC5qdW1wKCk7CiAgICAgICAgICAgICBzbG93Q2FzZS5saW5rKCZtX2ppdCk7
CiAgICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRocm93U3RhY2tPdmVyZmxvd0Zv
clZhcmFyZ3MpOwpAQCAtNzY3LDcgKzc2Nyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRD
YWxsKE5vZGUqIG5vZGUKICAgICAgICAgLy8gVGhpcyBpcyB0aGUgcGFydCB3aGVyZSB3ZSBtZWFu
dCB0byBtYWtlIGEgbm9ybWFsIGNhbGwuIE9vcHMuCiAgICAgICAgIG1faml0LmFkZFB0cihUcnVz
dGVkSW1tMzIocmVxdWlyZWRCeXRlcyksIEpJVENvbXBpbGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rl
cik7CiAgICAgICAgIG1faml0LmxvYWQ2NChKSVRDb21waWxlcjo6Y2FsbGVlRnJhbWVTbG90KENh
bGxGcmFtZVNsb3Q6OmNhbGxlZSksIEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAgbV9qaXQuZW1p
dER1bWJWaXJ0dWFsQ2FsbCgqbV9qaXQudm0oKSwgY2FsbExpbmtJbmZvKTsKKyAgICAgICAgbV9q
aXQuZW1pdER1bWJWaXJ0dWFsQ2FsbCh2bSgpLCBjYWxsTGlua0luZm8pOwogICAgICAgICAKICAg
ICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CiAgICAgICAgIHNldFJlc3VsdEFuZFJlc2V0U3RhY2so
KTsKQEAgLTE2MDMsNyArMTYwMyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmpl
Y3RPck90aGUKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh2YWx1ZUdQ
UiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCAKICAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKIAotICAg
ICAgICBtX2ppdC5lbWl0TG9hZFN0cnVjdHVyZSgqbV9qaXQudm0oKSwgdmFsdWVHUFIsIHN0cnVj
dHVyZUdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgIG1faml0LmVtaXRMb2FkU3RydWN0dXJlKHZt
KCksIHZhbHVlR1BSLCBzdHJ1Y3R1cmVHUFIsIHNjcmF0Y2hHUFIpOwogICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgbm9kZVVzZSwgCiAgICAg
ICAgICAgICBtX2ppdC5icmFuY2hQdHIoCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OkVxdWFsLCAKQEAgLTE3MDksNyArMTcwOSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVMb2dpY2FsTm90KE4KICAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLT5ncHIoKTsK
ICAgICAgICAgfQogICAgICAgICBib29sIG5lZ2F0ZVJlc3VsdCA9IHRydWU7Ci0gICAgICAgIG1f
aml0LmVtaXRDb252ZXJ0VmFsdWVUb0Jvb2xlYW4oKm1faml0LnZtKCksIEpTVmFsdWVSZWdzKGFy
ZzFHUFIpLCByZXN1bHRHUFIsIHNjcmF0Y2hHUFIsIHZhbHVlRlBSLmZwcigpLCB0ZW1wRlBSLmZw
cigpLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIGdsb2JhbE9iamVjdCwgbmVn
YXRlUmVzdWx0KTsKKyAgICAgICAgbV9qaXQuZW1pdENvbnZlcnRWYWx1ZVRvQm9vbGVhbih2bSgp
LCBKU1ZhbHVlUmVncyhhcmcxR1BSKSwgcmVzdWx0R1BSLCBzY3JhdGNoR1BSLCB2YWx1ZUZQUi5m
cHIoKSwgdGVtcEZQUi5mcHIoKSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBn
bG9iYWxPYmplY3QsIG5lZ2F0ZVJlc3VsdCk7CiAgICAgICAgIG1faml0Lm9yMzIoVHJ1c3RlZElt
bTMyKFZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOwogICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3Vs
dEdQUiwgbm9kZSwgRGF0YUZvcm1hdEpTQm9vbGVhbik7CiAgICAgICAgIHJldHVybjsKQEAgLTE3
NTQsNyArMTc1NCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRPYmplY3RPck90aGVyQnIK
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHZhbHVlR1BSLCBKU0NlbGw6OnR5
cGVJbmZvRmxhZ3NPZmZzZXQoKSksIAogICAgICAgICAgICAgVHJ1c3RlZEltbTMyKE1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQpKTsKIAotICAgICAgICBtX2ppdC5lbWl0TG9hZFN0cnVjdHVyZSgqbV9q
aXQudm0oKSwgdmFsdWVHUFIsIHN0cnVjdHVyZUdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgIG1f
aml0LmVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHZhbHVlR1BSLCBzdHJ1Y3R1cmVHUFIsIHNjcmF0
Y2hHUFIpOwogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKHZh
bHVlR1BSKSwgbm9kZVVzZSwKICAgICAgICAgICAgIG1faml0LmJyYW5jaFB0cigKICAgICAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIApAQCAtMTg4Miw3ICsxODgyLDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdEJyYW5jaChOb2RlKiBubwogICAgICAgICAgICAgdmFsdWUu
dXNlKCk7CiAKICAgICAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2pp
dC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpOwotICAgICAg
ICAgICAgYXV0byB0cnV0aHkgPSBtX2ppdC5icmFuY2hJZlRydXRoeSgqbV9qaXQudm0oKSwgSlNW
YWx1ZVJlZ3ModmFsdWVHUFIpLCByZXN1bHRHUFIsIHNjcmF0Y2hHUFIsIHZhbHVlRlBSLCB0ZW1w
RlBSLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIGdsb2JhbE9iamVjdCk7Cisg
ICAgICAgICAgICBhdXRvIHRydXRoeSA9IG1faml0LmJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFs
dWVSZWdzKHZhbHVlR1BSKSwgcmVzdWx0R1BSLCBzY3JhdGNoR1BSLCB2YWx1ZUZQUiwgdGVtcEZQ
Uiwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBnbG9iYWxPYmplY3QpOwogICAg
ICAgICAgICAgYWRkQnJhbmNoKHRydXRoeSwgdGFrZW4pOwogICAgICAgICAgICAganVtcChub3RU
YWtlbik7CiAgICAgICAgIH0KQEAgLTE5MDIsNyArMTkwMiw3IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKIAogICAgIGlmICh2YWxpZGF0ZURGR0RvZXNHQykgewog
ICAgICAgICBib29sIGV4cGVjdERvZXNHQyA9IGRvZXNHQyhtX2ppdC5ncmFwaCgpLCBub2RlKTsK
LSAgICAgICAgbV9qaXQuc3RvcmU4KFRydXN0ZWRJbW0zMihleHBlY3REb2VzR0MpLCBtX2ppdC52
bSgpLT5oZWFwLmFkZHJlc3NPZkV4cGVjdERvZXNHQygpKTsKKyAgICAgICAgbV9qaXQuc3RvcmU4
KFRydXN0ZWRJbW0zMihleHBlY3REb2VzR0MpLCB2bSgpLmhlYXAuYWRkcmVzc09mRXhwZWN0RG9l
c0dDKCkpOwogICAgIH0KIAogI2lmIEVOQUJMRShERkdfUkVHSVNURVJfQUxMT0NBVElPTl9WQUxJ
REFUSU9OKQpAQCAtMzkxMiw3ICszOTEyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShOb2RlKiBub2RlKQogICAgICAgICAgICAgR1BSUmVnIGxvY2FsR2xvYmFsT2JqZWN0R1BSID0g
bG9jYWxHbG9iYWxPYmplY3QuZ3ByKCk7CiAgICAgICAgICAgICBHUFJSZWcgcmVtb3RlR2xvYmFs
T2JqZWN0R1BSID0gcmVtb3RlR2xvYmFsT2JqZWN0LmdwcigpOwogICAgICAgICAgICAgbV9qaXQu
bW92ZShUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2ppdC5ncmFwaCgpLCBtX2ppdC5nbG9i
YWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGxvY2FsR2xvYmFsT2JqZWN0R1BS
KTsKLSAgICAgICAgICAgIG1faml0LmVtaXRMb2FkU3RydWN0dXJlKCptX2ppdC52bSgpLCB2YWx1
ZS5ncHIoKSwgcmVzdWx0LmdwcigpLCBzY3JhdGNoLmdwcigpKTsKKyAgICAgICAgICAgIG1faml0
LmVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHZhbHVlLmdwcigpLCByZXN1bHQuZ3ByKCksIHNjcmF0
Y2guZ3ByKCkpOwogICAgICAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVz
cyhyZXN1bHQuZ3ByKCksIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZW1vdGVH
bG9iYWxPYmplY3RHUFIpOyAKICAgICAgICAgICAgIG1faml0LmNvbXBhcmVQdHIoSklUQ29tcGls
ZXI6OkVxdWFsLCBsb2NhbEdsb2JhbE9iamVjdEdQUiwgcmVtb3RlR2xvYmFsT2JqZWN0R1BSLCBy
ZXN1bHQuZ3ByKCkpOwogICAgICAgICB9CkBAIC00MjM0LDkgKzQyMzQsOSBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAKICAgICAgICAgbm90UHJlc2VudEluVGFi
bGUubGluaygmbV9qaXQpOwogICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09
IE1hcE9iamVjdFVzZSkKLSAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cjo6d2Vh
a1BvaW50ZXIobV9qaXQuZ3JhcGgoKSwgbV9qaXQudm0oKS0+c2VudGluZWxNYXBCdWNrZXQoKSks
IHJlc3VsdEdQUik7CisgICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHI6OndlYWtQ
b2ludGVyKG1faml0LmdyYXBoKCksIHZtKCkuc2VudGluZWxNYXBCdWNrZXQoKSksIHJlc3VsdEdQ
Uik7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cjo6
d2Vha1BvaW50ZXIobV9qaXQuZ3JhcGgoKSwgbV9qaXQudm0oKS0+c2VudGluZWxTZXRCdWNrZXQo
KSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHI6Ondl
YWtQb2ludGVyKG1faml0LmdyYXBoKCksIHZtKCkuc2VudGluZWxTZXRCdWNrZXQoKSksIHJlc3Vs
dEdQUik7CiAgICAgICAgIGRvbmUubGluaygmbV9qaXQpOwogICAgICAgICBjZWxsUmVzdWx0KHJl
c3VsdEdQUiwgbm9kZSk7CiAgICAgICAgIGJyZWFrOwpAQCAtNDUwOSw4ICs0NTA5LDggQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgbV9qaXQu
bHNoaWZ0MzIoVHJ1c3RlZEltbTMyKGdldExTQlNldChzaXplb2YoSGFzT3duUHJvcGVydHlDYWNo
ZTo6RW50cnkpKSksIGhhc2hHUFIpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBtX2ppdC5t
dWwzMihUcnVzdGVkSW1tMzIoc2l6ZW9mKEhhc093blByb3BlcnR5Q2FjaGU6OkVudHJ5KSksIGhh
c2hHUFIsIGhhc2hHUFIpOwotICAgICAgICBBU1NFUlQobV9qaXQudm0oKS0+aGFzT3duUHJvcGVy
dHlDYWNoZSgpKTsKLSAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKG1faml0LnZtKCkt
Pmhhc093blByb3BlcnR5Q2FjaGUoKSksIHRlbXBHUFIpOworICAgICAgICBBU1NFUlQodm0oKS5o
YXNPd25Qcm9wZXJ0eUNhY2hlKCkpOworICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIo
dm0oKS5oYXNPd25Qcm9wZXJ0eUNhY2hlKCkpLCB0ZW1wR1BSKTsKICAgICAgICAgc2xvd1BhdGgu
YXBwZW5kKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIAogICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleCh0ZW1wR1BSLCBoYXNoR1BSLCBNYWNyb0Fz
c2VtYmxlcjo6VGltZXNPbmUsIEhhc093blByb3BlcnR5Q2FjaGU6OkVudHJ5OjpvZmZzZXRPZklt
cGwoKSksIGltcGxHUFIpKTsKICAgICAgICAgbV9qaXQubG9hZDgoTWFjcm9Bc3NlbWJsZXI6OkJh
c2VJbmRleCh0ZW1wR1BSLCBoYXNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNPbmUsIEhhc093
blByb3BlcnR5Q2FjaGU6OkVudHJ5OjpvZmZzZXRPZlJlc3VsdCgpKSwgcmVzdWx0R1BSKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3Bw
CShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE2LDggKzExNiw5IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmVtaXRBbGxvY2F0ZVJhd09iamUKIAogICAgIG1faml0Lm1vdmUoVHJ1c3Rl
ZEltbVB0cihudWxscHRyKSwgc3RvcmFnZUdQUik7CiAKKyAgICBWTSYgdm0gPSB0aGlzLT52bSgp
OwogICAgIGlmIChzaXplKSB7Ci0gICAgICAgIGlmIChBbGxvY2F0b3IgYWxsb2NhdG9yID0gbV9q
aXQudm0oKS0+anNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdG9yRm9yTm9uVmly
dHVhbChzaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cykpIHsKKyAgICAg
ICAgaWYgKEFsbG9jYXRvciBhbGxvY2F0b3IgPSB2bS5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlT
cGFjZS5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9j
YXRvcklmRXhpc3RzKSkgewogICAgICAgICAgICAgbV9qaXQuZW1pdEFsbG9jYXRlKHN0b3JhZ2VH
UFIsIEpJVEFsbG9jYXRvcjo6Y29uc3RhbnQoYWxsb2NhdG9yKSwgc2NyYXRjaEdQUiwgc2NyYXRj
aDJHUFIsIHNsb3dDYXNlcyk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG1faml0LmFkZFB0
cigKQEAgLTEzMSw3ICsxMzIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0QWxsb2NhdGVS
YXdPYmplCiAgICAgfQogCiAgICAgc2l6ZV90IGFsbG9jYXRpb25TaXplID0gSlNGaW5hbE9iamVj
dDo6YWxsb2NhdGlvblNpemUoaW5saW5lQ2FwYWNpdHkpOwotICAgIEFsbG9jYXRvciBhbGxvY2F0
b3IgPSBhbGxvY2F0b3JGb3JOb25WaXJ0dWFsQ29uY3VycmVudGx5PEpTRmluYWxPYmplY3Q+KCpt
X2ppdC52bSgpLCBhbGxvY2F0aW9uU2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZF
eGlzdHMpOworICAgIEFsbG9jYXRvciBhbGxvY2F0b3IgPSBhbGxvY2F0b3JGb3JOb25WaXJ0dWFs
Q29uY3VycmVudGx5PEpTRmluYWxPYmplY3Q+KHZtLCBhbGxvY2F0aW9uU2l6ZSwgQWxsb2NhdG9y
Rm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOwogICAgIGlmIChhbGxvY2F0b3IpIHsKICAgICAg
ICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0R1BSLCBKSVRBbGxvY2F0b3I6OmNvbnN0YW50
KGFsbG9jYXRvciksIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgc3RvcmFn
ZUdQUiwgc2NyYXRjaDJHUFIsIHNsb3dDYXNlcyk7CiAgICAgICAgIG1faml0LmVtaXRJbml0aWFs
aXplSW5saW5lU3RvcmFnZShyZXN1bHRHUFIsIHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7
CkBAIC0xNzEsNyArMTcyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdEFsbG9jYXRlUmF3
T2JqZQogICAgIAogICAgIG1faml0LmVtaXRJbml0aWFsaXplT3V0T2ZMaW5lU3RvcmFnZShzdG9y
YWdlR1BSLCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpOwogICAgIAotICAgIG1faml0
Lm11dGF0b3JGZW5jZSgqbV9qaXQudm0oKSk7CisgICAgbV9qaXQubXV0YXRvckZlbmNlKHZtKTsK
IH0KIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdEdldExlbmd0aChJbmxpbmVDYWxsRnJhbWUq
IGlubGluZUNhbGxGcmFtZSwgR1BSUmVnIGxlbmd0aEdQUiwgYm9vbCBpbmNsdWRlVGhpcykKQEAg
LTE1NzEsOCArMTU3Miw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTdHJpbmdTbGlj
ZSgKICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IGRvbmVDYXNlczsKICAgICBDQ2FsbEhlbHBl
cnM6Okp1bXBMaXN0IHNsb3dDYXNlczsKIAorICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAg
YXV0byBub25FbXB0eUNhc2UgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QmVsb3cs
IHN0YXJ0SW5kZXhHUFIsIHRlbXBHUFIpOwotICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cjo6
d2Vha1BvaW50ZXIobV9qaXQuZ3JhcGgoKSwganNFbXB0eVN0cmluZygmdm0oKSkpLCB0ZW1wR1BS
KTsKKyAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1faml0LmdyYXBo
KCksIGpzRW1wdHlTdHJpbmcodm0pKSwgdGVtcEdQUik7CiAgICAgZG9uZUNhc2VzLmFwcGVuZCht
X2ppdC5qdW1wKCkpOwogCiAgICAgbm9uRW1wdHlDYXNlLmxpbmsoJm1faml0KTsKQEAgLTE1OTks
NyArMTYwMSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTdHJpbmdTbGljZSgKICAg
ICBjb250OEJpdC5saW5rKCZtX2ppdCk7CiAKICAgICBtX2ppdC5sc2hpZnQzMihNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbTMyKHNpemVvZih2b2lkKikgPT0gNCA/IDIgOiAzKSwgdGVtcEdQUik7
Ci0gICAgbV9qaXQuYWRkUHRyKFRydXN0ZWRJbW1QdHIobV9qaXQudm0oKS0+c21hbGxTdHJpbmdz
LnNpbmdsZUNoYXJhY3RlclN0cmluZ3MoKSksIHRlbXBHUFIpOworICAgIG1faml0LmFkZFB0cihU
cnVzdGVkSW1tUHRyKHZtLnNtYWxsU3RyaW5ncy5zaW5nbGVDaGFyYWN0ZXJTdHJpbmdzKCkpLCB0
ZW1wR1BSKTsKICAgICBtX2ppdC5sb2FkUHRyKHRlbXBHUFIsIHRlbXBHUFIpOwogCiAgICAgYWRk
U2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKGJpZ0NoYXJhY3RlciwgdGhpcywgb3BlcmF0
aW9uU2luZ2xlQ2hhcmFjdGVyU3RyaW5nLCB0ZW1wR1BSLCB0ZW1wR1BSKSk7CkBAIC0xODY5LDcg
KzE4NzEsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ3VycmVudEJsb2NrCiAgICAg
ICAgIH0KIAogICAgICAgICBpZiAoT3B0aW9uczo6dmFsaWRhdGVERkdFeGNlcHRpb25IYW5kbGlu
ZygpICYmIChtYXlFeGl0KG1faml0LmdyYXBoKCksIG1fY3VycmVudE5vZGUpICE9IERvZXNOb3RF
eGl0IHx8IG1fY3VycmVudE5vZGUtPmlzVGVybWluYWwoKSkpCi0gICAgICAgICAgICBtX2ppdC5q
aXRSZWxlYXNlQXNzZXJ0Tm9FeGNlcHRpb24oKm1faml0LnZtKCkpOworICAgICAgICAgICAgbV9q
aXQuaml0UmVsZWFzZUFzc2VydE5vRXhjZXB0aW9uKG1faml0LnZtKCkpOwogCiAgICAgICAgIG1f
aml0LnBjVG9Db2RlT3JpZ2luTWFwQnVpbGRlcigpLmFwcGVuZEl0ZW0obV9qaXQubGFiZWxJZ25v
cmluZ1dhdGNocG9pbnRzKCksIG1fb3JpZ2luLnNlbWFudGljKTsKIApAQCAtMjA0OSw3ICsyMDUx
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNoZWNrVHJhcHMoTgogICAgIEdQUlJl
ZyB1bnVzZWRHUFIgPSB1bnVzZWQuZ3ByKCk7CiAKICAgICBKSVRDb21waWxlcjo6SnVtcCBuZWVk
VHJhcEhhbmRsaW5nID0gbV9qaXQuYnJhbmNoVGVzdDgoSklUQ29tcGlsZXI6Ok5vblplcm8sCi0g
ICAgICAgIEpJVENvbXBpbGVyOjpBYnNvbHV0ZUFkZHJlc3MobV9qaXQudm0oKS0+bmVlZFRyYXBI
YW5kbGluZ0FkZHJlc3MoKSkpOworICAgICAgICBKSVRDb21waWxlcjo6QWJzb2x1dGVBZGRyZXNz
KG1faml0LnZtKCkubmVlZFRyYXBIYW5kbGluZ0FkZHJlc3MoKSkpOwogCiAgICAgYWRkU2xvd1Bh
dGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKG5lZWRUcmFwSGFuZGxpbmcsIHRoaXMsIG9wZXJhdGlv
bkhhbmRsZVRyYXBzLCB1bnVzZWRHUFIpKTsKICAgICBub1Jlc3VsdChub2RlKTsKQEAgLTIyMTQs
OCArMjIxNiw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uU3QKICAg
ICAvLyA4IGJpdCBzdHJpbmcgdmFsdWVzIGRvbid0IG5lZWQgdGhlIGlzQVNDSUkgY2hlY2suCiAg
ICAgY29udDhCaXQubGluaygmbV9qaXQpOwogCisgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAg
ICBtX2ppdC5sc2hpZnQzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHNpemVvZih2b2lk
KikgPT0gNCA/IDIgOiAzKSwgc2NyYXRjaFJlZyk7Ci0gICAgbV9qaXQuYWRkUHRyKFRydXN0ZWRJ
bW1QdHIobV9qaXQudm0oKS0+c21hbGxTdHJpbmdzLnNpbmdsZUNoYXJhY3RlclN0cmluZ3MoKSks
IHNjcmF0Y2hSZWcpOworICAgIG1faml0LmFkZFB0cihUcnVzdGVkSW1tUHRyKHZtLnNtYWxsU3Ry
aW5ncy5zaW5nbGVDaGFyYWN0ZXJTdHJpbmdzKCkpLCBzY3JhdGNoUmVnKTsKICAgICBtX2ppdC5s
b2FkUHRyKHNjcmF0Y2hSZWcsIHNjcmF0Y2hSZWcpOwogCiAgICAgYWRkU2xvd1BhdGhHZW5lcmF0
b3IoCkBAIC0yMjM2LDggKzIyMzksOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0
QnlWYWxPblN0CiAgICAgICAgICAgICAvLyBvbiBhIHN0cmluZ1Byb3RvdHlwZUNoYWluSXNTYW5l
KCkgZ3VhcmFudGVlaW5nIHRoYXQgdGhlIHByb3RvdHlwZXMgaGF2ZSBubyBuZWdhdGl2ZQogICAg
ICAgICAgICAgLy8gaW5kZXhlZCBwcm9wZXJ0aWVzIGVpdGhlci4KICAgICAgICAgICAgIC8vIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDQ2NjgKLSAgICAgICAgICAg
IG1faml0LmdyYXBoKCkucmVnaXN0ZXJBbmRXYXRjaFN0cnVjdHVyZVRyYW5zaXRpb24oZ2xvYmFs
T2JqZWN0LT5zdHJpbmdQcm90b3R5cGUoKS0+c3RydWN0dXJlKCptX2ppdC52bSgpKSk7Ci0gICAg
ICAgICAgICBtX2ppdC5ncmFwaCgpLnJlZ2lzdGVyQW5kV2F0Y2hTdHJ1Y3R1cmVUcmFuc2l0aW9u
KGdsb2JhbE9iamVjdC0+b2JqZWN0UHJvdG90eXBlKCktPnN0cnVjdHVyZSgqbV9qaXQudm0oKSkp
OworICAgICAgICAgICAgbV9qaXQuZ3JhcGgoKS5yZWdpc3RlckFuZFdhdGNoU3RydWN0dXJlVHJh
bnNpdGlvbihnbG9iYWxPYmplY3QtPnN0cmluZ1Byb3RvdHlwZSgpLT5zdHJ1Y3R1cmUodm0pKTsK
KyAgICAgICAgICAgIG1faml0LmdyYXBoKCkucmVnaXN0ZXJBbmRXYXRjaFN0cnVjdHVyZVRyYW5z
aXRpb24oZ2xvYmFsT2JqZWN0LT5vYmplY3RQcm90b3R5cGUoKS0+c3RydWN0dXJlKHZtKSk7CiAg
ICAgICAgICAgICBwcm90b3R5cGVDaGFpbklzU2FuZSA9IGdsb2JhbE9iamVjdC0+c3RyaW5nUHJv
dG90eXBlQ2hhaW5Jc1NhbmUoKTsKICAgICAgICAgfQogICAgICAgICBpZiAocHJvdG90eXBlQ2hh
aW5Jc1NhbmUpIHsKQEAgLTIyOTgsNyArMjMwMSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVGcm9tQ2hhckNvZGUKIAogICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7
CiAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJv
dmUsIHByb3BlcnR5UmVnLCBUcnVzdGVkSW1tMzIobWF4U2luZ2xlQ2hhcmFjdGVyU3RyaW5nKSkp
OwotICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cihtX2ppdC52bSgpLT5zbWFsbFN0cmluZ3Mu
c2luZ2xlQ2hhcmFjdGVyU3RyaW5ncygpKSwgc21hbGxTdHJpbmdzUmVnKTsKKyAgICBtX2ppdC5t
b3ZlKFRydXN0ZWRJbW1QdHIodm0oKS5zbWFsbFN0cmluZ3Muc2luZ2xlQ2hhcmFjdGVyU3RyaW5n
cygpKSwgc21hbGxTdHJpbmdzUmVnKTsKICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVy
OjpCYXNlSW5kZXgoc21hbGxTdHJpbmdzUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6
OlNjYWxlUHRyLCAwKSwgc2NyYXRjaFJlZyk7CiAKICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0
LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgc2NyYXRjaFJlZykpOwpAQCAtNjcw
NSw3ICs2NzA4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVN0cmluZ1plcm9MZQog
ICAgIEdQUlRlbXBvcmFyeSBlcSh0aGlzKTsKICAgICBHUFJSZWcgZXFHUFIgPSBlcS5ncHIoKTsK
IAotICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9qaXQuZ3JhcGgo
KSwganNFbXB0eVN0cmluZyhtX2ppdC52bSgpKSksIGVxR1BSKTsKKyAgICBtX2ppdC5tb3ZlKFRy
dXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1faml0LmdyYXBoKCksIGpzRW1wdHlTdHJpbmcodm0o
KSkpLCBlcUdQUik7CiAgICAgbV9qaXQuY29tcGFyZVB0cihDQ2FsbEhlbHBlcnM6OkVxdWFsLCBz
dHJHUFIsIGVxR1BSLCBlcUdQUik7CiAgICAgdW5ibGVzc2VkQm9vbGVhblJlc3VsdChlcUdQUiwg
bm9kZSk7CiB9CkBAIC02NzIyLDcgKzY3MjUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlTG9naWNhbE5vdFN0CiAgICAgREZHX1RZUEVfQ0hFQ0soCiAgICAgICAgIHZhbHVlUmVncywg
bm9kZS0+Y2hpbGQxKCksICh+U3BlY0NlbGxDaGVjaykgfCBTcGVjU3RyaW5nLCBtX2ppdC5icmFu
Y2hJZk5vdFN0cmluZyhjZWxsR1BSKSk7CiAKLSAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHI6
OndlYWtQb2ludGVyKG1faml0LmdyYXBoKCksIGpzRW1wdHlTdHJpbmcobV9qaXQudm0oKSkpLCB0
ZW1wR1BSKTsKKyAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1faml0
LmdyYXBoKCksIGpzRW1wdHlTdHJpbmcodm0oKSkpLCB0ZW1wR1BSKTsKICAgICBtX2ppdC5jb21w
YXJlUHRyKENDYWxsSGVscGVyczo6RXF1YWwsIGNlbGxHUFIsIHRlbXBHUFIsIHRlbXBHUFIpOwog
ICAgIGF1dG8gZG9uZSA9IG1faml0Lmp1bXAoKTsKIApAQCAtNjc0NCw3ICs2NzQ3LDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdFN0cmluZ0JyYW5jaChFZAogCiAgICAgc3BlY3VsYXRlU3Ry
aW5nKG5vZGVVc2UsIHN0ckdQUik7CiAKLSAgICBicmFuY2hQdHIoQ0NhbGxIZWxwZXJzOjpFcXVh
bCwgc3RyR1BSLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2ppdC5ncmFwaCgpLCBqc0Vt
cHR5U3RyaW5nKG1faml0LnZtKCkpKSwgbm90VGFrZW4pOworICAgIGJyYW5jaFB0cihDQ2FsbEhl
bHBlcnM6OkVxdWFsLCBzdHJHUFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1faml0Lmdy
YXBoKCksIGpzRW1wdHlTdHJpbmcodm0oKSkpLCBub3RUYWtlbik7CiAgICAganVtcCh0YWtlbik7
CiAKICAgICBub1Jlc3VsdChtX2N1cnJlbnROb2RlKTsKQEAgLTY3NjEsNyArNjc2NCw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRTdHJpbmdPck90aGVyQnIKICAgICBHUFJSZWcgY2VsbEdQ
UiA9IHZhbHVlUmVncy5wYXlsb2FkR1BSKCk7CiAgICAgREZHX1RZUEVfQ0hFQ0sodmFsdWVSZWdz
LCBub2RlVXNlLCAoflNwZWNDZWxsQ2hlY2spIHwgU3BlY1N0cmluZywgbV9qaXQuYnJhbmNoSWZO
b3RTdHJpbmcoY2VsbEdQUikpOwogCi0gICAgYnJhbmNoUHRyKENDYWxsSGVscGVyczo6RXF1YWws
IGNlbGxHUFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1faml0LmdyYXBoKCksIGpzRW1w
dHlTdHJpbmcobV9qaXQudm0oKSkpLCBub3RUYWtlbik7CisgICAgYnJhbmNoUHRyKENDYWxsSGVs
cGVyczo6RXF1YWwsIGNlbGxHUFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1faml0Lmdy
YXBoKCksIGpzRW1wdHlTdHJpbmcodm0oKSkpLCBub3RUYWtlbik7CiAgICAganVtcCh0YWtlbiwg
Rm9yY2VKdW1wKTsKIAogICAgIG5vdENlbGwubGluaygmbV9qaXQpOwpAQCAtNjc5NCw4ICs2Nzk3
LDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2FnZVR5cGVkQXJyYXlTdG9yYQogICAgICAgICBy
ZXR1cm47CiAgICAgCiAgICAgaWYgKEdpZ2FjYWdlOjpjYW5QcmltaXRpdmVHaWdhY2FnZUJlRGlz
YWJsZWQoKSkgewotICAgICAgICBpZiAobV9qaXQudm0oKS0+cHJpbWl0aXZlR2lnYWNhZ2VFbmFi
bGVkKCkuaXNTdGlsbFZhbGlkKCkpCi0gICAgICAgICAgICBtX2ppdC5ncmFwaCgpLndhdGNocG9p
bnRzKCkuYWRkTGF6aWx5KG1faml0LnZtKCktPnByaW1pdGl2ZUdpZ2FjYWdlRW5hYmxlZCgpKTsK
KyAgICAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKKyAgICAgICAgaWYgKHZtLnByaW1pdGl2ZUdp
Z2FjYWdlRW5hYmxlZCgpLmlzU3RpbGxWYWxpZCgpKQorICAgICAgICAgICAgbV9qaXQuZ3JhcGgo
KS53YXRjaHBvaW50cygpLmFkZExhemlseSh2bS5wcmltaXRpdmVHaWdhY2FnZUVuYWJsZWQoKSk7
CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC03MDMyLDcgKzcw
MzYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0R2xvYmFsT2JqCiAgICAgU3Bl
Y3VsYXRlQ2VsbE9wZXJhbmQgb2JqZWN0KHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICBHUFJU
ZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwot
ICAgIG1faml0LmVtaXRMb2FkU3RydWN0dXJlKCptX2ppdC52bSgpLCBvYmplY3QuZ3ByKCksIHJl
c3VsdC5ncHIoKSwgc2NyYXRjaC5ncHIoKSk7CisgICAgbV9qaXQuZW1pdExvYWRTdHJ1Y3R1cmUo
dm0oKSwgb2JqZWN0LmdwcigpLCByZXN1bHQuZ3ByKCksIHNjcmF0Y2guZ3ByKCkpOwogICAgIG1f
aml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MocmVzdWx0LmdwcigpLCBTdHJ1Y3R1cmU6
Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVzdWx0LmdwcigpKTsKICAgICBjZWxsUmVzdWx0KHJl
c3VsdC5ncHIoKSwgbm9kZSk7CiB9CkBAIC03MjA0LDcgKzcyMDgsNyBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlTmV3RnVuY3Rpb25DCiAgICAgbV9qaXQuc3RvcmVQdHIoVHJ1c3RlZElt
bVB0cihudWxscHRyKSwgSklUQ29tcGlsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBKU0Z1bmN0aW9u
OjpvZmZzZXRPZlJhcmVEYXRhKCkpKTsKICAgICAKICAgICBpZiAoZXhlY3V0YWJsZS0+aXNBbm9u
eW1vdXNCdWlsdGluRnVuY3Rpb24oKSkgewotICAgICAgICBWTSYgdm0gPSAqbV9qaXQudm0oKTsK
KyAgICAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICAgICAgbV9qaXQubXV0YXRvckZlbmNl
KHZtKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IGFsbG9jYXRvcih0aGlzKTsKICAgICAgICAgQWxs
b2NhdG9yIGFsbG9jYXRvclZhbHVlID0gYWxsb2NhdG9yRm9yTm9uVmlydHVhbENvbmN1cnJlbnRs
eTxGdW5jdGlvblJhcmVEYXRhPih2bSwgc2l6ZW9mKEZ1bmN0aW9uUmFyZURhdGEpLCBBbGxvY2F0
b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CkBAIC03MjIzLDcgKzcyMjcsNyBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlTmV3RnVuY3Rpb25DCiAgICAgICAgIG1faml0Lm11dGF0
b3JGZW5jZSh2bSk7CiAgICAgICAgIG1faml0LnN0b3JlUHRyKHNjcmF0Y2gxR1BSLCBKSVRDb21w
aWxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIEpTRnVuY3Rpb246Om9mZnNldE9mUmFyZURhdGEoKSkp
OwogICAgIH0gZWxzZQotICAgICAgICBtX2ppdC5tdXRhdG9yRmVuY2UoKm1faml0LnZtKCkpOwor
ICAgICAgICBtX2ppdC5tdXRhdG9yRmVuY2Uodm0oKSk7CiAKIH0KIApAQCAtNzUxMiw3ICs3NTE2
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNyZWF0ZUFjdGl2YQogICAgICAgICAg
ICAgICAgIHJlc3VsdEdQUiwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGUo
U2NvcGVPZmZzZXQoaSkpKSk7CiAgICAgfQogICAgIAotICAgIG1faml0Lm11dGF0b3JGZW5jZSgq
bV9qaXQudm0oKSk7CisgICAgbV9qaXQubXV0YXRvckZlbmNlKHZtKCkpOwogCiAjaWYgVVNFKEpT
VkFMVUU2NCkKICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKQEAgLTc2NzcsNyArNzY4MSw3IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDcmVhdGVEaXJlY3QKICAgICAgICAgICAgIGRv
bmUubGluaygmbV9qaXQpOwogICAgIH0KICAgICAgICAgCi0gICAgbV9qaXQubXV0YXRvckZlbmNl
KCptX2ppdC52bSgpKTsKKyAgICBtX2ppdC5tdXRhdG9yRmVuY2Uodm0oKSk7CiAgICAgICAgIAog
ICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKIH0KQEAgLTc4OTcsNyArNzkwMSw3IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTcHJlYWQoTm9kZSoKICAgICAgICAgbV9qaXQu
bHNoaWZ0MzIoVHJ1c3RlZEltbTMyKDMpLCBzY3JhdGNoMUdQUik7CiAgICAgICAgIG1faml0LmFk
ZDMyKFRydXN0ZWRJbW0zMihKU0ZpeGVkQXJyYXk6Om9mZnNldE9mRGF0YSgpKSwgc2NyYXRjaDFH
UFIpOwogCi0gICAgICAgIG1faml0LmVtaXRBbGxvY2F0ZVZhcmlhYmxlU2l6ZWRDZWxsPEpTRml4
ZWRBcnJheT4oKm1faml0LnZtKCksIHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cihtX2ppdC5ncmFw
aCgpLnJlZ2lzdGVyU3RydWN0dXJlKG1faml0LmdyYXBoKCkubV92bS5maXhlZEFycmF5U3RydWN0
dXJlLmdldCgpKSksIHNjcmF0Y2gxR1BSLCBzY3JhdGNoMUdQUiwgc2NyYXRjaDJHUFIsIHNsb3dQ
YXRoKTsKKyAgICAgICAgbV9qaXQuZW1pdEFsbG9jYXRlVmFyaWFibGVTaXplZENlbGw8SlNGaXhl
ZEFycmF5Pih2bSgpLCByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHIobV9qaXQuZ3JhcGgoKS5yZWdp
c3RlclN0cnVjdHVyZShtX2ppdC5ncmFwaCgpLm1fdm0uZml4ZWRBcnJheVN0cnVjdHVyZS5nZXQo
KSkpLCBzY3JhdGNoMUdQUiwgc2NyYXRjaDFHUFIsIHNjcmF0Y2gyR1BSLCBzbG93UGF0aCk7CiAg
ICAgICAgIG1faml0LnN0b3JlMzIobGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhy
ZXN1bHRHUFIsIEpTRml4ZWRBcnJheTo6b2Zmc2V0T2ZTaXplKCkpKTsKIAogICAgICAgICBtX2pp
dC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGFyZ3VtZW50LCBKU09iamVjdDo6YnV0
dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoMUdQUik7CkBAIC03OTM4LDcgKzc5NDIsNyBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlU3ByZWFkKE5vZGUqCiAgICAgICAgICAgICBkb25lLmFw
cGVuZChtX2ppdC5qdW1wKCkpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBtX2ppdC5t
dXRhdG9yRmVuY2UoKm1faml0LnZtKCkpOworICAgICAgICBtX2ppdC5tdXRhdG9yRmVuY2Uodm0o
KSk7CiAKICAgICAgICAgc2xvd1BhdGgubGluaygmbV9qaXQpOwogICAgICAgICBhZGRTbG93UGF0
aEdlbmVyYXRvcihzbG93UGF0aENhbGwobV9qaXQuanVtcCgpLCB0aGlzLCBvcGVyYXRpb25TcHJl
YWRGYXN0QXJyYXksIHJlc3VsdEdQUiwgYXJndW1lbnQpKTsKQEAgLTgwNDksNyArODA1Myw3IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVOZXdBcnJheShOb2QKICAgICB9CiAKICAgICBz
aXplX3Qgc2NyYXRjaFNpemUgPSBzaXplb2YoRW5jb2RlZEpTVmFsdWUpICogbm9kZS0+bnVtQ2hp
bGRyZW4oKTsKLSAgICBTY3JhdGNoQnVmZmVyKiBzY3JhdGNoQnVmZmVyID0gbV9qaXQudm0oKS0+
c2NyYXRjaEJ1ZmZlckZvclNpemUoc2NyYXRjaFNpemUpOworICAgIFNjcmF0Y2hCdWZmZXIqIHNj
cmF0Y2hCdWZmZXIgPSB2bSgpLnNjcmF0Y2hCdWZmZXJGb3JTaXplKHNjcmF0Y2hTaXplKTsKICAg
ICBFbmNvZGVkSlNWYWx1ZSogYnVmZmVyID0gc2NyYXRjaEJ1ZmZlciA/IHN0YXRpY19jYXN0PEVu
Y29kZWRKU1ZhbHVlKj4oc2NyYXRjaEJ1ZmZlci0+ZGF0YUJ1ZmZlcigpKSA6IG51bGxwdHI7CiAK
ICAgICBmb3IgKHVuc2lnbmVkIG9wZXJhbmRJZHggPSAwOyBvcGVyYW5kSWR4IDwgbm9kZS0+bnVt
Q2hpbGRyZW4oKTsgKytvcGVyYW5kSWR4KSB7CkBAIC04MjIxLDcgKzgyMjUsNyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlTmV3QXJyYXlXaXRoCiAKICAgICBBU1NFUlQobm9kZS0+bnVt
Q2hpbGRyZW4oKSk7CiAgICAgc2l6ZV90IHNjcmF0Y2hTaXplID0gc2l6ZW9mKEVuY29kZWRKU1Zh
bHVlKSAqIG5vZGUtPm51bUNoaWxkcmVuKCk7Ci0gICAgU2NyYXRjaEJ1ZmZlciogc2NyYXRjaEJ1
ZmZlciA9IG1faml0LnZtKCktPnNjcmF0Y2hCdWZmZXJGb3JTaXplKHNjcmF0Y2hTaXplKTsKKyAg
ICBTY3JhdGNoQnVmZmVyKiBzY3JhdGNoQnVmZmVyID0gdm0oKS5zY3JhdGNoQnVmZmVyRm9yU2l6
ZShzY3JhdGNoU2l6ZSk7CiAgICAgRW5jb2RlZEpTVmFsdWUqIGJ1ZmZlciA9IHN0YXRpY19jYXN0
PEVuY29kZWRKU1ZhbHVlKj4oc2NyYXRjaEJ1ZmZlci0+ZGF0YUJ1ZmZlcigpKTsKIAogICAgIEJp
dFZlY3RvciogYml0VmVjdG9yID0gbm9kZS0+Yml0VmVjdG9yKCk7CkBAIC04NDM0LDcgKzg0Mzgs
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJyYXlTbGljZShOCiAgICAgICAgICAg
ICBlbWl0QWxsb2NhdGVCdXR0ZXJmbHkoc3RvcmFnZVJlc3VsdEdQUiwgc2l6ZUdQUiwgc2NyYXRj
aEdQUiwgc2NyYXRjaDJHUFIsIHJlc3VsdEdQUiwgc2xvd0Nhc2VzKTsKICAgICAgICAgICAgIGVt
aXRJbml0aWFsaXplQnV0dGVyZmx5KHN0b3JhZ2VSZXN1bHRHUFIsIHNpemVHUFIsIGVtcHR5VmFs
dWVSZWdzLCBzY3JhdGNoR1BSKTsKICAgICAgICAgICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0PEpT
QXJyYXk+KHJlc3VsdEdQUiwgdGVtcFZhbHVlLCBzdG9yYWdlUmVzdWx0R1BSLCBzY3JhdGNoR1BS
LCBzY3JhdGNoMkdQUiwgc2xvd0Nhc2VzKTsKLSAgICAgICAgICAgIG1faml0Lm11dGF0b3JGZW5j
ZSgqbV9qaXQudm0oKSk7CisgICAgICAgICAgICBtX2ppdC5tdXRhdG9yRmVuY2Uodm0oKSk7CiAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0Lmp1bXAo
KSk7CiAgICAgICAgIH0KQEAgLTg3NzgsNyArODc4Miw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVBcnJheVB1c2goTm8KICAgICAgICAgc2xvd1BhdGgubGluaygmbV9qaXQpOwogCiAg
ICAgICAgIHNpemVfdCBzY3JhdGNoU2l6ZSA9IHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKiBlbGVt
ZW50Q291bnQ7Ci0gICAgICAgIFNjcmF0Y2hCdWZmZXIqIHNjcmF0Y2hCdWZmZXIgPSBtX2ppdC52
bSgpLT5zY3JhdGNoQnVmZmVyRm9yU2l6ZShzY3JhdGNoU2l6ZSk7CisgICAgICAgIFNjcmF0Y2hC
dWZmZXIqIHNjcmF0Y2hCdWZmZXIgPSB2bSgpLnNjcmF0Y2hCdWZmZXJGb3JTaXplKHNjcmF0Y2hT
aXplKTsKICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKHN0YXRpY19jYXN0PEVuY29k
ZWRKU1ZhbHVlKj4oc2NyYXRjaEJ1ZmZlci0+ZGF0YUJ1ZmZlcigpKSksIGJ1ZmZlckdQUik7CiAg
ICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cihzY3JhdGNoQnVmZmVyLT5hZGRyZXNzT2ZB
Y3RpdmVMZW5ndGgoKSksIHN0b3JhZ2VMZW5ndGhHUFIpOwogICAgICAgICBtX2ppdC5zdG9yZVB0
cihUcnVzdGVkSW1tUHRyKHNjcmF0Y2hTaXplKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3Rv
cmFnZUxlbmd0aEdQUikpOwpAQCAtODg1Miw3ICs4ODU2LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZUFycmF5UHVzaChObwogICAgICAgICBzbG93UGF0aC5saW5rKCZtX2ppdCk7CiAK
ICAgICAgICAgc2l6ZV90IHNjcmF0Y2hTaXplID0gc2l6ZW9mKGRvdWJsZSkgKiBlbGVtZW50Q291
bnQ7Ci0gICAgICAgIFNjcmF0Y2hCdWZmZXIqIHNjcmF0Y2hCdWZmZXIgPSBtX2ppdC52bSgpLT5z
Y3JhdGNoQnVmZmVyRm9yU2l6ZShzY3JhdGNoU2l6ZSk7CisgICAgICAgIFNjcmF0Y2hCdWZmZXIq
IHNjcmF0Y2hCdWZmZXIgPSB2bSgpLnNjcmF0Y2hCdWZmZXJGb3JTaXplKHNjcmF0Y2hTaXplKTsK
ICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKHN0YXRpY19jYXN0PEVuY29kZWRKU1Zh
bHVlKj4oc2NyYXRjaEJ1ZmZlci0+ZGF0YUJ1ZmZlcigpKSksIGJ1ZmZlckdQUik7CiAgICAgICAg
IG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cihzY3JhdGNoQnVmZmVyLT5hZGRyZXNzT2ZBY3RpdmVM
ZW5ndGgoKSksIHN0b3JhZ2VMZW5ndGhHUFIpOwogICAgICAgICBtX2ppdC5zdG9yZVB0cihUcnVz
dGVkSW1tUHRyKHNjcmF0Y2hTaXplKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUxl
bmd0aEdQUikpOwpAQCAtODkzMyw3ICs4OTM3LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUFycmF5UHVzaChObwogICAgICAgICBzbG93UGF0aC5saW5rKCZtX2ppdCk7CiAKICAgICAg
ICAgc2l6ZV90IHNjcmF0Y2hTaXplID0gc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSAqIGVsZW1lbnRD
b3VudDsKLSAgICAgICAgU2NyYXRjaEJ1ZmZlciogc2NyYXRjaEJ1ZmZlciA9IG1faml0LnZtKCkt
PnNjcmF0Y2hCdWZmZXJGb3JTaXplKHNjcmF0Y2hTaXplKTsKKyAgICAgICAgU2NyYXRjaEJ1ZmZl
ciogc2NyYXRjaEJ1ZmZlciA9IHZtKCkuc2NyYXRjaEJ1ZmZlckZvclNpemUoc2NyYXRjaFNpemUp
OwogICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIoc3RhdGljX2Nhc3Q8RW5jb2RlZEpT
VmFsdWUqPihzY3JhdGNoQnVmZmVyLT5kYXRhQnVmZmVyKCkpKSwgYnVmZmVyR1BSKTsKICAgICAg
ICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKHNjcmF0Y2hCdWZmZXItPmFkZHJlc3NPZkFjdGl2
ZUxlbmd0aCgpKSwgc3RvcmFnZUxlbmd0aEdQUik7CiAgICAgICAgIG1faml0LnN0b3JlUHRyKFRy
dXN0ZWRJbW1QdHIoc2NyYXRjaFNpemUpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdl
TGVuZ3RoR1BSKSk7CkBAIC05MTAyLDcgKzkxMDYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlVHlwZU9mKE5vZGUqCiAgICAgbV9qaXQuZW1pdFR5cGVPZigKICAgICAgICAgdmFsdWVS
ZWdzLCByZXN1bHRHUFIsCiAgICAgICAgIFsmXSAoVHlwZW9mVHlwZSB0eXBlLCBib29sIGZhbGxz
VGhyb3VnaCkgewotICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyOjp3ZWFrUG9p
bnRlcihtX2ppdC5ncmFwaCgpLCBtX2ppdC52bSgpLT5zbWFsbFN0cmluZ3MudHlwZVN0cmluZyh0
eXBlKSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHI6
OndlYWtQb2ludGVyKG1faml0LmdyYXBoKCksIHZtKCkuc21hbGxTdHJpbmdzLnR5cGVTdHJpbmco
dHlwZSkpLCByZXN1bHRHUFIpOwogICAgICAgICAgICAgaWYgKCFmYWxsc1Rocm91Z2gpCiAgICAg
ICAgICAgICAgICAgZG9uZS5hcHBlbmQobV9qaXQuanVtcCgpKTsKICAgICAgICAgfSwKQEAgLTky
MTYsNyArOTIyMCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBbGxvY2F0ZVByb3AK
ICAgICAKICAgICBzaXplX3Qgc2l6ZSA9IGluaXRpYWxPdXRPZkxpbmVDYXBhY2l0eSAqIHNpemVv
ZihKU1ZhbHVlKTsKIAotICAgIEFsbG9jYXRvciBhbGxvY2F0b3IgPSBtX2ppdC52bSgpLT5qc1Zh
bHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemUsIEFs
bG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKKyAgICBBbGxvY2F0b3IgYWxsb2Nh
dG9yID0gdm0oKS5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0b3JGb3JOb25W
aXJ0dWFsKHNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKIAogICAg
IGlmICghYWxsb2NhdG9yIHx8IG5vZGUtPnRyYW5zaXRpb24oKS0+cHJldmlvdXMtPmNvdWxkSGF2
ZUluZGV4aW5nSGVhZGVyKCkpIHsKICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0
aGlzLCBub2RlLT5jaGlsZDEoKSk7CkBAIC05MjYwLDcgKzkyNjQsNyBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlUmVhbGxvY2F0ZVByCiAgICAgc2l6ZV90IG5ld1NpemUgPSBvbGRTaXpl
ICogb3V0T2ZMaW5lR3Jvd3RoRmFjdG9yOwogICAgIEFTU0VSVChuZXdTaXplID09IG5vZGUtPnRy
YW5zaXRpb24oKS0+bmV4dC0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAqIHNpemVvZihKU1ZhbHVlKSk7
CiAgICAgCi0gICAgQWxsb2NhdG9yIGFsbG9jYXRvciA9IG1faml0LnZtKCktPmpzVmFsdWVHaWdh
Y2FnZUF1eGlsaWFyeVNwYWNlLmFsbG9jYXRvckZvck5vblZpcnR1YWwobmV3U2l6ZSwgQWxsb2Nh
dG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOworICAgIEFsbG9jYXRvciBhbGxvY2F0b3Ig
PSB2bSgpLmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLmFsbG9jYXRvckZvck5vblZpcnR1
YWwobmV3U2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOwogCiAgICAg
aWYgKCFhbGxvY2F0b3IgfHwgbm9kZS0+dHJhbnNpdGlvbigpLT5wcmV2aW91cy0+Y291bGRIYXZl
SW5kZXhpbmdIZWFkZXIoKSkgewogICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRo
aXMsIG5vZGUtPmNoaWxkMSgpKTsKQEAgLTkzMTUsNyArOTMxOSw3IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVOdWtlU3RydWN0dXIKICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3By
KCk7CiAgICAgR1BSUmVnIHN0b3JhZ2VHUFIgPSBzdG9yYWdlLmdwcigpOwogCi0gICAgbV9qaXQu
bnVrZVN0cnVjdHVyZUFuZFN0b3JlQnV0dGVyZmx5KCptX2ppdC52bSgpLCBzdG9yYWdlR1BSLCBi
YXNlR1BSKTsKKyAgICBtX2ppdC5udWtlU3RydWN0dXJlQW5kU3RvcmVCdXR0ZXJmbHkodm0oKSwg
c3RvcmFnZUdQUiwgYmFzZUdQUik7CiAgICAgCiAgICAgbm9SZXN1bHQobm9kZSk7CiB9CkBAIC05
NDQ1LDcgKzk0NDksNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ2FsbERPTUdldHRl
CiAKICAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVu
dHM8Sl9KSVRPcGVyYXRpb25fRUpJPihDQ2FsbEhlbHBlcnM6OkNlbGxWYWx1ZShiYXNlR1BSKSwg
aWRlbnRpZmllclVJRChub2RlLT5jYWxsRE9NR2V0dGVyRGF0YSgpLT5pZGVudGlmaWVyTnVtYmVy
KSk7Ci0gICAgICAgIG1faml0LnN0b3JlUHRyKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCAm
bV9qaXQudm0oKS0+dG9wQ2FsbEZyYW1lKTsKKyAgICAgICAgbV9qaXQuc3RvcmVQdHIoR1BSSW5m
bzo6Y2FsbEZyYW1lUmVnaXN0ZXIsICZ2bSgpLnRvcENhbGxGcmFtZSk7CiAgICAgICAgIG1faml0
LmVtaXRTdG9yZUNvZGVPcmlnaW4obV9jdXJyZW50Tm9kZS0+b3JpZ2luLnNlbWFudGljKTsKICAg
ICAgICAgbV9qaXQuYXBwZW5kQ2FsbChnZXR0ZXIucmV0YWdnZWQ8Q0Z1bmN0aW9uUHRyVGFnPigp
KTsKICAgICAgICAgbV9qaXQuc2V0dXBSZXN1bHRzKHJlc3VsdFJlZ3MpOwpAQCAtOTQ5Myw3ICs5
NDk3LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNoZWNrU3ViQ2xhcwogICAgICAg
ICBHUFJSZWcgb3RoZXJHUFIgPSBvdGhlci5ncHIoKTsKICAgICAgICAgR1BSUmVnIHNwZWNpZmll
ZEdQUiA9IHNwZWNpZmllZC5ncHIoKTsKIAotICAgICAgICBtX2ppdC5lbWl0TG9hZFN0cnVjdHVy
ZSgqbV9qaXQudm0oKSwgYmFzZUdQUiwgb3RoZXJHUFIsIHNwZWNpZmllZEdQUik7CisgICAgICAg
IG1faml0LmVtaXRMb2FkU3RydWN0dXJlKHZtKCksIGJhc2VHUFIsIG90aGVyR1BSLCBzcGVjaWZp
ZWRHUFIpOwogICAgICAgICBtX2ppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhvdGhl
ckdQUiwgU3RydWN0dXJlOjpjbGFzc0luZm9PZmZzZXQoKSksIG90aGVyR1BSKTsKICAgICAgICAg
bV9qaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobm9kZS0+Y2xhc3NJbmZvKCkp
LCBzcGVjaWZpZWRHUFIpOwogCkBAIC05ODAyLDcgKzk4MDYsNyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlTmV3U3RyaW5nT2JqCiAgICAgICAgIEpJVENvbXBpbGVyOjpBZGRyZXNzKHJl
c3VsdEdQUiwgSlNXcmFwcGVyT2JqZWN0OjppbnRlcm5hbFZhbHVlT2Zmc2V0KCkgKyBPQkpFQ1Rf
T0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpKTsKICNlbmRpZgogICAgIAotICAg
IG1faml0Lm11dGF0b3JGZW5jZSgqbV9qaXQudm0oKSk7CisgICAgbV9qaXQubXV0YXRvckZlbmNl
KHZtKCkpOwogICAgIAogICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbCgKICAg
ICAgICAgc2xvd1BhdGgsIHRoaXMsIG9wZXJhdGlvbk5ld1N0cmluZ09iamVjdCwgcmVzdWx0R1BS
LCBvcGVyYW5kR1BSLCBub2RlLT5zdHJ1Y3R1cmUoKSkpOwpAQCAtOTg2OSw3ICs5ODczLDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5ld1R5cGVkQXJyYQogICAgICAgICBtX2ppdC5h
bmQzMihUcnVzdGVkSW1tMzIofjcpLCBzY3JhdGNoR1BSKTsKICAgICB9CiAgICAgbV9qaXQuZW1p
dEFsbG9jYXRlVmFyaWFibGVTaXplZCgKLSAgICAgICAgc3RvcmFnZUdQUiwgbV9qaXQudm0oKS0+
cHJpbWl0aXZlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZSwgc2NyYXRjaEdQUiwgc2NyYXRjaEdQUiwK
KyAgICAgICAgc3RvcmFnZUdQUiwgdm0oKS5wcmltaXRpdmVHaWdhY2FnZUF1eGlsaWFyeVNwYWNl
LCBzY3JhdGNoR1BSLCBzY3JhdGNoR1BSLAogICAgICAgICBzY3JhdGNoR1BSMiwgc2xvd0Nhc2Vz
KTsKICAgICAKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25lID0gbV9qaXQuYnJhbmNoVGVz
dDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBzaXplR1BSKTsKQEAgLTk5MTIsNyArOTkxNiw3IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVOZXdUeXBlZEFycmEKICAgICAgICAgVHJ1c3Rl
ZEltbTMyKEZhc3RUeXBlZEFycmF5KSwKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
cmVzdWx0R1BSLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZNb2RlKCkpKTsKICAgICAKLSAg
ICBtX2ppdC5tdXRhdG9yRmVuY2UoKm1faml0LnZtKCkpOworICAgIG1faml0Lm11dGF0b3JGZW5j
ZSh2bSgpKTsKICAgICAKICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aENhbGwoCiAg
ICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uTmV3VHlwZWRBcnJheVdpdGhTaXplRm9y
VHlwZSh0eXBlZEFycmF5VHlwZSksCkBAIC05OTQ1LDcgKzk5NDksNyBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlTmV3UmVnZXhwKE5vCiAgICAgICAgIFRydXN0ZWRJbW1QdHIobm9kZS0+
Y2VsbE9wZXJhbmQoKSksCiAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhyZXN1bHRHUFIs
IFJlZ0V4cE9iamVjdDo6b2Zmc2V0T2ZSZWdFeHBBbmRMYXN0SW5kZXhJc05vdFdyaXRhYmxlRmxh
ZygpKSk7CiAgICAgbV9qaXQuc3RvcmVWYWx1ZShsYXN0SW5kZXhSZWdzLCBDQ2FsbEhlbHBlcnM6
OkFkZHJlc3MocmVzdWx0R1BSLCBSZWdFeHBPYmplY3Q6Om9mZnNldE9mTGFzdEluZGV4KCkpKTsK
LSAgICBtX2ppdC5tdXRhdG9yRmVuY2UoKm1faml0LnZtKCkpOworICAgIG1faml0Lm11dGF0b3JG
ZW5jZSh2bSgpKTsKIAogICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChzbG93
UGF0aCwgdGhpcywgb3BlcmF0aW9uTmV3UmVnZXhwV2l0aExhc3RJbmRleCwgcmVzdWx0R1BSLCBy
ZWdleHAsIGxhc3RJbmRleFJlZ3MpKTsKIApAQCAtMTEwODcsOSArMTEwOTEsOSBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlU3RvcmVCYXJyaWVyCiAgICAgSklUQ29tcGlsZXI6Okp1bXBM
aXN0IG9rOwogICAgIAogICAgIGlmIChpc0ZlbmNlZCkgewotICAgICAgICBvay5hcHBlbmQobV9q
aXQuYmFycmllckJyYW5jaCgqbV9qaXQudm0oKSwgYmFzZUdQUiwgc2NyYXRjaDFHUFIpKTsKKyAg
ICAgICAgb2suYXBwZW5kKG1faml0LmJhcnJpZXJCcmFuY2godm0oKSwgYmFzZUdQUiwgc2NyYXRj
aDFHUFIpKTsKICAgICAgICAgCi0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vRmVuY2UgPSBt
X2ppdC5qdW1wSWZNdXRhdG9yRmVuY2VOb3ROZWVkZWQoKm1faml0LnZtKCkpOworICAgICAgICBK
SVRDb21waWxlcjo6SnVtcCBub0ZlbmNlID0gbV9qaXQuanVtcElmTXV0YXRvckZlbmNlTm90TmVl
ZGVkKHZtKCkpOwogICAgICAgICBtX2ppdC5tZW1vcnlGZW5jZSgpOwogICAgICAgICBvay5hcHBl
bmQobV9qaXQuYmFycmllckJyYW5jaFdpdGhvdXRGZW5jZShiYXNlR1BSKSk7CiAgICAgICAgIG5v
RmVuY2UubGluaygmbV9qaXQpOwpAQCAtMTE0MjAsNyArMTE0MjQsNyBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlU3RyaW5nUmVwbGFjCiAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLnVzZUtp
bmQoKSA9PSBTdHJpbmdVc2UKICAgICAgICAgJiYgbm9kZS0+Y2hpbGQyKCkudXNlS2luZCgpID09
IFJlZ0V4cE9iamVjdFVzZQogICAgICAgICAmJiBub2RlLT5jaGlsZDMoKS51c2VLaW5kKCkgPT0g
U3RyaW5nVXNlKSB7Ci0gICAgICAgIGlmIChKU1N0cmluZyogcmVwbGFjZSA9IG5vZGUtPmNoaWxk
MygpLT5keW5hbWljQ2FzdENvbnN0YW50PEpTU3RyaW5nKj4oKm1faml0LnZtKCkpKSB7CisgICAg
ICAgIGlmIChKU1N0cmluZyogcmVwbGFjZSA9IG5vZGUtPmNoaWxkMygpLT5keW5hbWljQ2FzdENv
bnN0YW50PEpTU3RyaW5nKj4odm0oKSkpIHsKICAgICAgICAgICAgIGlmICghcmVwbGFjZS0+bGVu
Z3RoKCkpIHsKICAgICAgICAgICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBzdHJpbmcodGhp
cywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5k
IHJlZ0V4cCh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CkBAIC0xMTU1NCw3ICsxMTU1OCw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVMYXp5SlNDb25zdGEKIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVNYXRlcmlhbGl6ZU5ld09iamVjdChOb2RlKiBub2RlKQogewogICAgIFJlZ2lz
dGVyZWRTdHJ1Y3R1cmUgc3RydWN0dXJlID0gbm9kZS0+c3RydWN0dXJlU2V0KCkuYXQoMCk7Ci0g
ICAgQVNTRVJUKG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgMCktPmR5bmFtaWNDYXN0
Q29uc3RhbnQ8U3RydWN0dXJlKj4oKm1faml0LnZtKCkpID09IHN0cnVjdHVyZS5nZXQoKSk7Cisg
ICAgQVNTRVJUKG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgMCktPmR5bmFtaWNDYXN0
Q29uc3RhbnQ8U3RydWN0dXJlKj4odm0oKSkgPT0gc3RydWN0dXJlLmdldCgpKTsKIAogICAgIE9i
amVjdE1hdGVyaWFsaXphdGlvbkRhdGEmIGRhdGEgPSBub2RlLT5vYmplY3RNYXRlcmlhbGl6YXRp
b25EYXRhKCk7CiAgICAgICAgIApAQCAtMTE4NDIsNyArMTE4NDYsNyBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjplbWl0QWxsb2NhdGVCdXR0ZXJmCiAgICAgZGlkTm90T3ZlcmZsb3cubGluaygmbV9q
aXQpOwogI2VuZGlmCiAgICAgbV9qaXQuZW1pdEFsbG9jYXRlVmFyaWFibGVTaXplZCgKLSAgICAg
ICAgc3RvcmFnZVJlc3VsdEdQUiwgbV9qaXQudm0oKS0+anNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5
U3BhY2UsIHNjcmF0Y2gyLCBzY3JhdGNoMSwgc2NyYXRjaDMsIHNsb3dDYXNlcyk7CisgICAgICAg
IHN0b3JhZ2VSZXN1bHRHUFIsIHZtKCkuanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UsIHNj
cmF0Y2gyLCBzY3JhdGNoMSwgc2NyYXRjaDMsIHNsb3dDYXNlcyk7CiAgICAgbV9qaXQuYWRkUHRy
KFRydXN0ZWRJbW0zMihzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSwgc3RvcmFnZVJlc3VsdEdQUik7
CiAKICAgICBtX2ppdC5zdG9yZTMyKHNpemVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0
b3JhZ2VSZXN1bHRHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpOwpAQCAt
MTE5MzksMTAgKzExOTQzLDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRNYXBC
dWNrZXQKICAgICBub3RCdWNrZXQubGluaygmbV9qaXQpOwogICAgIEpTQ2VsbCogc2VudGluZWwg
PSBudWxscHRyOwogICAgIGlmIChub2RlLT5idWNrZXRPd25lclR5cGUoKSA9PSBCdWNrZXRPd25l
clR5cGU6Ok1hcCkKLSAgICAgICAgc2VudGluZWwgPSBtX2ppdC52bSgpLT5zZW50aW5lbE1hcEJ1
Y2tldCgpOworICAgICAgICBzZW50aW5lbCA9IHZtKCkuc2VudGluZWxNYXBCdWNrZXQoKTsKICAg
ICBlbHNlIHsKICAgICAgICAgQVNTRVJUKG5vZGUtPmJ1Y2tldE93bmVyVHlwZSgpID09IEJ1Y2tl
dE93bmVyVHlwZTo6U2V0KTsKLSAgICAgICAgc2VudGluZWwgPSBtX2ppdC52bSgpLT5zZW50aW5l
bFNldEJ1Y2tldCgpOworICAgICAgICBzZW50aW5lbCA9IHZtKCkuc2VudGluZWxTZXRCdWNrZXQo
KTsKICAgICB9CiAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2pp
dC5ncmFwaCgpLCBzZW50aW5lbCksIHJlc3VsdEdQUik7CiAgICAgZG9uZS5saW5rKCZtX2ppdCk7
CkBAIC0xMjUxNiwxMSArMTI1MjAsMTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9i
amVjdEtleXMoTgogICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KG5vZGUtPmNoaWxkMSgpLCBv
YmplY3RHUFIpOwogCiAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dDYXNl
czsKLSAgICAgICAgICAgIG1faml0LmVtaXRMb2FkU3RydWN0dXJlKCptX2ppdC52bSgpLCBvYmpl
Y3RHUFIsIHN0cnVjdHVyZUdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBtX2ppdC5lbWl0
TG9hZFN0cnVjdHVyZSh2bSgpLCBvYmplY3RHUFIsIHN0cnVjdHVyZUdQUiwgc2NyYXRjaEdQUik7
CiAgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHJ1Y3R1
cmVHUFIsIFN0cnVjdHVyZTo6cHJldmlvdXNPclJhcmVEYXRhT2Zmc2V0KCkpLCBzY3JhdGNoR1BS
KTsKIAogICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hUZXN0UHRyKEND
YWxsSGVscGVyczo6WmVybywgc2NyYXRjaEdQUikpOwotICAgICAgICAgICAgc2xvd0Nhc2VzLmFw
cGVuZChtX2ppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6OkVxdWFsLCBDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3Moc2NyYXRjaEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgVHJ1c3RlZElt
bTMyKGJpdHdpc2VfY2FzdDxpbnQzMl90PihtX2ppdC52bSgpLT5zdHJ1Y3R1cmVTdHJ1Y3R1cmUt
PnN0cnVjdHVyZUlEKCkpKSkpOworICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5i
cmFuY2gzMihDQ2FsbEhlbHBlcnM6OkVxdWFsLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRj
aEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKGJpdHdpc2Vf
Y2FzdDxpbnQzMl90Pih2bSgpLnN0cnVjdHVyZVN0cnVjdHVyZS0+c3RydWN0dXJlSUQoKSkpKSk7
CiAKICAgICAgICAgICAgIG1faml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0
Y2hHUFIsIFN0cnVjdHVyZVJhcmVEYXRhOjpvZmZzZXRPZkNhY2hlZE93bktleXMoKSksIHNjcmF0
Y2hHUFIpOwogCkBAIC0xMjY2MCw3ICsxMjY2NCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVDcmVhdGVUaGlzKE4KIAogICAgIG1faml0LmxvYWQ4KEpJVENvbXBpbGVyOjpBZGRyZXNz
KHN0cnVjdHVyZUdQUiwgU3RydWN0dXJlOjppbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgaW5saW5l
Q2FwYWNpdHlHUFIpOwogICAgIG1faml0LmVtaXRJbml0aWFsaXplSW5saW5lU3RvcmFnZShyZXN1
bHRHUFIsIGlubGluZUNhcGFjaXR5R1BSKTsKLSAgICBtX2ppdC5tdXRhdG9yRmVuY2UoKm1faml0
LnZtKCkpOworICAgIG1faml0Lm11dGF0b3JGZW5jZSh2bSgpKTsKIAogICAgIGFkZFNsb3dQYXRo
R2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9uQ3JlYXRlVGhp
cywgcmVzdWx0R1BSLCBjYWxsZWVHUFIsIG5vZGUtPmlubGluZUNhcGFjaXR5KCkpKTsKIApAQCAt
MTI2ODEsMTQgKzEyNjg1LDE0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVOZXdPYmpl
Y3QoTm8KIAogICAgIFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgc3RydWN0dXJlID0gbm9kZS0+c3RydWN0
dXJlKCk7CiAgICAgc2l6ZV90IGFsbG9jYXRpb25TaXplID0gSlNGaW5hbE9iamVjdDo6YWxsb2Nh
dGlvblNpemUoc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKLSAgICBBbGxvY2F0b3IgYWxs
b2NhdG9yVmFsdWUgPSBhbGxvY2F0b3JGb3JOb25WaXJ0dWFsQ29uY3VycmVudGx5PEpTRmluYWxP
YmplY3Q+KCptX2ppdC52bSgpLCBhbGxvY2F0aW9uU2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxs
b2NhdG9ySWZFeGlzdHMpOworICAgIEFsbG9jYXRvciBhbGxvY2F0b3JWYWx1ZSA9IGFsbG9jYXRv
ckZvck5vblZpcnR1YWxDb25jdXJyZW50bHk8SlNGaW5hbE9iamVjdD4odm0oKSwgYWxsb2NhdGlv
blNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKICAgICBpZiAoIWFs
bG9jYXRvclZhbHVlKQogICAgICAgICBzbG93UGF0aC5hcHBlbmQobV9qaXQuanVtcCgpKTsKICAg
ICBlbHNlIHsKICAgICAgICAgYXV0byBidXR0ZXJmbHkgPSBUcnVzdGVkSW1tUHRyKG51bGxwdHIp
OwogICAgICAgICBlbWl0QWxsb2NhdGVKU09iamVjdChyZXN1bHRHUFIsIEpJVEFsbG9jYXRvcjo6
Y29uc3RhbnQoYWxsb2NhdG9yVmFsdWUpLCBhbGxvY2F0b3JHUFIsIFRydXN0ZWRJbW1QdHIoc3Ry
dWN0dXJlKSwgYnV0dGVyZmx5LCBzY3JhdGNoR1BSLCBzbG93UGF0aCk7CiAgICAgICAgIG1faml0
LmVtaXRJbml0aWFsaXplSW5saW5lU3RvcmFnZShyZXN1bHRHUFIsIHN0cnVjdHVyZS0+aW5saW5l
Q2FwYWNpdHkoKSk7Ci0gICAgICAgIG1faml0Lm11dGF0b3JGZW5jZSgqbV9qaXQudm0oKSk7Cisg
ICAgICAgIG1faml0Lm11dGF0b3JGZW5jZSh2bSgpKTsKICAgICB9CiAKICAgICBhZGRTbG93UGF0
aEdlbmVyYXRvcihzbG93UGF0aENhbGwoc2xvd1BhdGgsIHRoaXMsIG9wZXJhdGlvbk5ld09iamVj
dCwgcmVzdWx0R1BSLCBzdHJ1Y3R1cmUpKTsKQEAgLTEyNzMxLDcgKzEyNzM1LDcgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUxvZ1NoYWRvd0NoaQogICAgIEdQUlRlbXBvcmFyeSBzaGFk
b3dQYWNrZXQodGhpcyk7CiAgICAgR1BSUmVnIHNoYWRvd1BhY2tldFJlZyA9IHNoYWRvd1BhY2tl
dC5ncHIoKTsKIAotICAgIG1faml0LmVuc3VyZVNoYWRvd0NoaWNrZW5QYWNrZXQoKm1faml0LnZt
KCksIHNoYWRvd1BhY2tldFJlZywgc2NyYXRjaDFSZWcsIHNjcmF0Y2gyUmVnKTsKKyAgICBtX2pp
dC5lbnN1cmVTaGFkb3dDaGlja2VuUGFja2V0KHZtKCksIHNoYWRvd1BhY2tldFJlZywgc2NyYXRj
aDFSZWcsIHNjcmF0Y2gyUmVnKTsKIAogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIHNjb3BlKHRo
aXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICBHUFJSZWcgc2NvcGVSZWcgPSBzY29wZS5ncHIoKTsK
QEAgLTEyNzUzLDcgKzEyNzU3LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUxvZ1No
YWRvd0NoaQogICAgIEdQUlRlbXBvcmFyeSBzaGFkb3dQYWNrZXQodGhpcyk7CiAgICAgR1BSUmVn
IHNoYWRvd1BhY2tldFJlZyA9IHNoYWRvd1BhY2tldC5ncHIoKTsKIAotICAgIG1faml0LmVuc3Vy
ZVNoYWRvd0NoaWNrZW5QYWNrZXQoKm1faml0LnZtKCksIHNoYWRvd1BhY2tldFJlZywgc2NyYXRj
aDFSZWcsIHNjcmF0Y2gyUmVnKTsKKyAgICBtX2ppdC5lbnN1cmVTaGFkb3dDaGlja2VuUGFja2V0
KHZtKCksIHNoYWRvd1BhY2tldFJlZywgc2NyYXRjaDFSZWcsIHNjcmF0Y2gyUmVnKTsKIAogICAg
IEpTVmFsdWVPcGVyYW5kIHRoaXNWYWx1ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgSlNW
YWx1ZVJlZ3MgdGhpc1JlZ3MgPSB0aGlzVmFsdWUuanNWYWx1ZVJlZ3MoKTsKQEAgLTEyOTczLDcg
KzEyOTc3LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldFByb3RvdHlwZQogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAotICAgICAgICBtX2ppdC5lbWl0TG9hZFN0cnVj
dHVyZSgqbV9qaXQudm0oKSwgb2JqZWN0R1BSLCB0ZW1wR1BSLCB0ZW1wMkdQUik7CisgICAgICAg
IG1faml0LmVtaXRMb2FkU3RydWN0dXJlKHZtKCksIG9iamVjdEdQUiwgdGVtcEdQUiwgdGVtcDJH
UFIpOwogCiAgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gbV9zdGF0ZS5mb3JOb2RlKG5v
ZGUtPmNoaWxkMSgpKTsKICAgICAgICAgaWYgKCh2YWx1ZS5tX3R5cGUgJiYgISh2YWx1ZS5tX3R5
cGUgJiB+U3BlY09iamVjdCkpICYmIHZhbHVlLm1fc3RydWN0dXJlLmlzRmluaXRlKCkpIHsKQEAg
LTEzMTc0LDcgKzEzMTc4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFsbG9jYXRl
TmV3QQogCiAgICAgZW1pdEFsbG9jYXRlSlNPYmplY3Q8SlNBcnJheT4ocmVzdWx0R1BSLCBUcnVz
dGVkSW1tUHRyKHN0cnVjdHVyZSksIHN0b3JhZ2VHUFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BS
LCBzbG93Q2FzZXMpOwogCi0gICAgbV9qaXQubXV0YXRvckZlbmNlKCptX2ppdC52bSgpKTsKKyAg
ICBtX2ppdC5tdXRhdG9yRmVuY2Uodm0oKSk7CiAKICAgICBhZGRTbG93UGF0aEdlbmVyYXRvciht
YWtlVW5pcXVlPENhbGxBcnJheUFsbG9jYXRvcldpdGhWYXJpYWJsZVNpemVTbG93UGF0aEdlbmVy
YXRvcj4oCiAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6
ZSwgcmVzdWx0R1BSLApAQCAtMTM0MDEsNyArMTM0MDUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlUHJvZmlsZVR5cGUoCiAgICAgfQogCiAgICAgLy8gTG9hZCB0aGUgVHlwZVByb2Zp
bGVyTG9nIGludG8gU2NyYXRjaDIuCi0gICAgVHlwZVByb2ZpbGVyTG9nKiBjYWNoZWRUeXBlUHJv
ZmlsZXJMb2cgPSBtX2ppdC52bSgpLT50eXBlUHJvZmlsZXJMb2coKTsKKyAgICBUeXBlUHJvZmls
ZXJMb2cqIGNhY2hlZFR5cGVQcm9maWxlckxvZyA9IHZtKCkudHlwZVByb2ZpbGVyTG9nKCk7CiAg
ICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKGNhY2hlZFR5cGVQcm9maWxlckxvZyksIHNjcmF0
Y2gyR1BSKTsKIAogICAgIC8vIExvYWQgdGhlIG5leHQgTG9nRW50cnkgaW50byBTY3JhdGNoMS4K
QEAgLTEzNjUxLDE0ICsxMzY1NSwxNCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTWFr
ZVJvcGUoTm9kCiAgICAgR1BSUmVnIHNjcmF0Y2gyR1BSID0gc2NyYXRjaDIuZ3ByKCk7CiAKICAg
ICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dQYXRoOwotICAgIEFsbG9jYXRvciBhbGxvY2F0
b3JWYWx1ZSA9IGFsbG9jYXRvckZvck5vblZpcnR1YWxDb25jdXJyZW50bHk8SlNSb3BlU3RyaW5n
PigqbV9qaXQudm0oKSwgc2l6ZW9mKEpTUm9wZVN0cmluZyksIEFsbG9jYXRvckZvck1vZGU6OkFs
bG9jYXRvcklmRXhpc3RzKTsKLSAgICBlbWl0QWxsb2NhdGVKU0NlbGwocmVzdWx0R1BSLCBKSVRB
bGxvY2F0b3I6OmNvbnN0YW50KGFsbG9jYXRvclZhbHVlKSwgYWxsb2NhdG9yR1BSLCBUcnVzdGVk
SW1tUHRyKG1faml0LmdyYXBoKCkucmVnaXN0ZXJTdHJ1Y3R1cmUobV9qaXQudm0oKS0+c3RyaW5n
U3RydWN0dXJlLmdldCgpKSksIHNjcmF0Y2hHUFIsIHNsb3dQYXRoKTsKKyAgICBBbGxvY2F0b3Ig
YWxsb2NhdG9yVmFsdWUgPSBhbGxvY2F0b3JGb3JOb25WaXJ0dWFsQ29uY3VycmVudGx5PEpTUm9w
ZVN0cmluZz4odm0oKSwgc2l6ZW9mKEpTUm9wZVN0cmluZyksIEFsbG9jYXRvckZvck1vZGU6OkFs
bG9jYXRvcklmRXhpc3RzKTsKKyAgICBlbWl0QWxsb2NhdGVKU0NlbGwocmVzdWx0R1BSLCBKSVRB
bGxvY2F0b3I6OmNvbnN0YW50KGFsbG9jYXRvclZhbHVlKSwgYWxsb2NhdG9yR1BSLCBUcnVzdGVk
SW1tUHRyKG1faml0LmdyYXBoKCkucmVnaXN0ZXJTdHJ1Y3R1cmUodm0oKS5zdHJpbmdTdHJ1Y3R1
cmUuZ2V0KCkpKSwgc2NyYXRjaEdQUiwgc2xvd1BhdGgpOwogCiAgICAgLy8gVGhpcyBwdXRzIG51
bGxwdHIgZm9yIHRoZSBmaXJzdCBmaWJlci4gSXQgbWFrZXMgdmlzaXRDaGlsZHJlbiBzYWZlIGV2
ZW4gaWYgdGhpcyBKU1JvcGVTdHJpbmcgaXMgZGlzY2FyZGVkIGR1ZSB0byB0aGUgc3BlY3VsYXRp
b24gZmFpbHVyZSBpbiB0aGUgZm9sbG93aW5nIHBhdGguCiAgICAgbV9qaXQuc3RvcmVQdHIoVHJ1
c3RlZEltbVB0cihKU1N0cmluZzo6aXNSb3BlSW5Qb2ludGVyKSwgQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKHJlc3VsdEdQUiwgSlNSb3BlU3RyaW5nOjpvZmZzZXRPZkZpYmVyMCgpKSk7CiAKICAgICB7
Ci0gICAgICAgIGlmIChKU1N0cmluZyogc3RyaW5nID0gZWRnZXNbMF0tPmR5bmFtaWNDYXN0Q29u
c3RhbnQ8SlNTdHJpbmcqPigqbV9qaXQudm0oKSkpIHsKKyAgICAgICAgaWYgKEpTU3RyaW5nKiBz
dHJpbmcgPSBlZGdlc1swXS0+ZHluYW1pY0Nhc3RDb25zdGFudDxKU1N0cmluZyo+KHZtKCkpKSB7
CiAgICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMihzdHJpbmctPmlzOEJpdCgpID8g
U3RyaW5nSW1wbDo6ZmxhZ0lzOEJpdCgpIDogMCksIHNjcmF0Y2hHUFIpOwogICAgICAgICAgICAg
bV9qaXQubW92ZShUcnVzdGVkSW1tMzIoc3RyaW5nLT5sZW5ndGgoKSksIGFsbG9jYXRvckdQUik7
CiAgICAgICAgIH0gZWxzZSB7CkBAIC0xMzY5MCw3ICsxMzY5NCw3IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVNYWtlUm9wZShOb2QKICAgICB9CiAKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAxOyBpIDwgbnVtT3BHUFJzOyArK2kpIHsKLSAgICAgICAgaWYgKEpTU3RyaW5nKiBzdHJpbmcg
PSBlZGdlc1tpXS0+ZHluYW1pY0Nhc3RDb25zdGFudDxKU1N0cmluZyo+KCptX2ppdC52bSgpKSkg
eworICAgICAgICBpZiAoSlNTdHJpbmcqIHN0cmluZyA9IGVkZ2VzW2ldLT5keW5hbWljQ2FzdENv
bnN0YW50PEpTU3RyaW5nKj4odm0oKSkpIHsKICAgICAgICAgICAgIG1faml0LmFuZDMyKFRydXN0
ZWRJbW0zMihzdHJpbmctPmlzOEJpdCgpID8gU3RyaW5nSW1wbDo6ZmxhZ0lzOEJpdCgpIDogMCks
IHNjcmF0Y2hHUFIpOwogICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKICAgICAgICAgICAg
ICAgICBVbmNvdW50YWJsZSwgSlNWYWx1ZVNvdXJjZSgpLCBudWxscHRyLApAQCAtMTM3NTgsMTAg
KzEzNzYyLDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVNYWtlUm9wZShOb2QKIAog
ICAgIGF1dG8gaXNOb25FbXB0eVN0cmluZyA9IG1faml0LmJyYW5jaFRlc3QzMihDQ2FsbEhlbHBl
cnM6Ok5vblplcm8sIGFsbG9jYXRvckdQUik7CiAKLSAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1Q
dHI6OndlYWtQb2ludGVyKG1faml0LmdyYXBoKCksIGpzRW1wdHlTdHJpbmcoJm1faml0LmdyYXBo
KCkubV92bSkpLCByZXN1bHRHUFIpOworICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cjo6d2Vh
a1BvaW50ZXIobV9qaXQuZ3JhcGgoKSwganNFbXB0eVN0cmluZyhtX2ppdC5ncmFwaCgpLm1fdm0p
KSwgcmVzdWx0R1BSKTsKIAogICAgIGlzTm9uRW1wdHlTdHJpbmcubGluaygmbV9qaXQpOwotICAg
IG1faml0Lm11dGF0b3JGZW5jZSgqbV9qaXQudm0oKSk7CisgICAgbV9qaXQubXV0YXRvckZlbmNl
KHZtKCkpOwogCiAgICAgc3dpdGNoIChudW1PcEdQUnMpIHsKICAgICBjYXNlIDI6CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lv
biAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmgJKHdvcmtpbmcgY29weSkKQEAgLTExMyw3ICsxMTMsNyBAQCBwdWJsaWM6CiAKICAgICBWTSYg
dm0oKQogICAgIHsKLSAgICAgICAgcmV0dXJuICptX2ppdC52bSgpOworICAgICAgICByZXR1cm4g
bV9qaXQudm0oKTsKICAgICB9CiAKICAgICBzdHJ1Y3QgVHJ1c3RlZEltbVB0ciB7CkBAIC05OTEs
NyArOTkxLDcgQEAgcHVibGljOgogICAgICAgICAvLyBhbnl3YXkgc2luY2UgaXQgd2FzIG5vdCBi
ZWluZyB1cGRhdGVkIGJ5IEpJVCdlZCBjb2RlIGJ5IGRlc2lnbi4KIAogICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgc2l6ZW9mKHZvaWQqKSAvIDQ7IGkrKykKLSAgICAgICAgICAgIG1f
aml0LnN0b3JlMzIoVHJ1c3RlZEltbTMyKDB4YmFkYmVlZiksIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hh
cio+KCZtX2ppdC52bSgpLT50b3BDYWxsRnJhbWUpICsgaSAqIDQpOworICAgICAgICAgICAgbV9q
aXQuc3RvcmUzMihUcnVzdGVkSW1tMzIoMHhiYWRiZWVmKSwgcmVpbnRlcnByZXRfY2FzdDxjaGFy
Kj4oJnZtKCkudG9wQ2FsbEZyYW1lKSArIGkgKiA0KTsKICAgICB9CiAjZWxzZQogICAgIHZvaWQg
cHJlcGFyZUZvckV4dGVybmFsQ2FsbCgpIHsgfQpAQCAtMTUxOCw3ICsxNTE4LDcgQEAgcHVibGlj
OgogICAgICAgICBHUFJSZWcgcmVzdWx0R1BSLCBTdHJ1Y3R1cmVUeXBlIHN0cnVjdHVyZSwgU3Rv
cmFnZVR5cGUgc3RvcmFnZSwgR1BSUmVnIHNjcmF0Y2hHUFIxLAogICAgICAgICBHUFJSZWcgc2Ny
YXRjaEdQUjIsIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYgc2xvd1BhdGgsIHNpemVfdCBzaXpl
KQogICAgIHsKLSAgICAgICAgbV9qaXQuZW1pdEFsbG9jYXRlSlNPYmplY3RXaXRoS25vd25TaXpl
PENsYXNzVHlwZT4oKm1faml0LnZtKCksIHJlc3VsdEdQUiwgc3RydWN0dXJlLCBzdG9yYWdlLCBz
Y3JhdGNoR1BSMSwgc2NyYXRjaEdQUjIsIHNsb3dQYXRoLCBzaXplKTsKKyAgICAgICAgbV9qaXQu
ZW1pdEFsbG9jYXRlSlNPYmplY3RXaXRoS25vd25TaXplPENsYXNzVHlwZT4odm0oKSwgcmVzdWx0
R1BSLCBzdHJ1Y3R1cmUsIHN0b3JhZ2UsIHNjcmF0Y2hHUFIxLCBzY3JhdGNoR1BSMiwgc2xvd1Bh
dGgsIHNpemUpOwogICAgIH0KIAogICAgIC8vIENvbnZlbmllbmNlIGFsbG9jYXRvciBmb3IgYSBi
dWlsdC1pbiBvYmplY3QuCkBAIC0xNTI2LDIwICsxNTI2LDIwIEBAIHB1YmxpYzoKICAgICB2b2lk
IGVtaXRBbGxvY2F0ZUpTT2JqZWN0KEdQUlJlZyByZXN1bHRHUFIsIFN0cnVjdHVyZVR5cGUgc3Ry
dWN0dXJlLCBTdG9yYWdlVHlwZSBzdG9yYWdlLAogICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUjEs
IEdQUlJlZyBzY3JhdGNoR1BSMiwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBzbG93UGF0aCkK
ICAgICB7Ci0gICAgICAgIG1faml0LmVtaXRBbGxvY2F0ZUpTT2JqZWN0PENsYXNzVHlwZT4oKm1f
aml0LnZtKCksIHJlc3VsdEdQUiwgc3RydWN0dXJlLCBzdG9yYWdlLCBzY3JhdGNoR1BSMSwgc2Ny
YXRjaEdQUjIsIHNsb3dQYXRoKTsKKyAgICAgICAgbV9qaXQuZW1pdEFsbG9jYXRlSlNPYmplY3Q8
Q2xhc3NUeXBlPih2bSgpLCByZXN1bHRHUFIsIHN0cnVjdHVyZSwgc3RvcmFnZSwgc2NyYXRjaEdQ
UjEsIHNjcmF0Y2hHUFIyLCBzbG93UGF0aCk7CiAgICAgfQogCiAgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIENsYXNzVHlwZSwgdHlwZW5hbWUgU3RydWN0dXJlVHlwZT4gLy8gU3RydWN0dXJlVHlwZSBh
bmQgU3RvcmFnZVR5cGUgY2FuIGJlIEdQUiBvciBJbW1QdHIuCiAgICAgdm9pZCBlbWl0QWxsb2Nh
dGVWYXJpYWJsZVNpemVkSlNPYmplY3QoR1BSUmVnIHJlc3VsdEdQUiwgU3RydWN0dXJlVHlwZSBz
dHJ1Y3R1cmUsIEdQUlJlZyBhbGxvY2F0aW9uU2l6ZSwgR1BSUmVnIHNjcmF0Y2hHUFIxLCBHUFJS
ZWcgc2NyYXRjaEdQUjIsIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYgc2xvd1BhdGgpCiAgICAg
ewotICAgICAgICBtX2ppdC5lbWl0QWxsb2NhdGVWYXJpYWJsZVNpemVkSlNPYmplY3Q8Q2xhc3NU
eXBlPigqbV9qaXQudm0oKSwgcmVzdWx0R1BSLCBzdHJ1Y3R1cmUsIGFsbG9jYXRpb25TaXplLCBz
Y3JhdGNoR1BSMSwgc2NyYXRjaEdQUjIsIHNsb3dQYXRoKTsKKyAgICAgICAgbV9qaXQuZW1pdEFs
bG9jYXRlVmFyaWFibGVTaXplZEpTT2JqZWN0PENsYXNzVHlwZT4odm0oKSwgcmVzdWx0R1BSLCBz
dHJ1Y3R1cmUsIGFsbG9jYXRpb25TaXplLCBzY3JhdGNoR1BSMSwgc2NyYXRjaEdQUjIsIHNsb3dQ
YXRoKTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDbGFzc1R5cGU+CiAgICAgdm9p
ZCBlbWl0QWxsb2NhdGVEZXN0cnVjdGlibGVPYmplY3QoR1BSUmVnIHJlc3VsdEdQUiwgUmVnaXN0
ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmUsIAogICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUjEsIEdQ
UlJlZyBzY3JhdGNoR1BSMiwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBzbG93UGF0aCkKICAg
ICB7Ci0gICAgICAgIG1faml0LmVtaXRBbGxvY2F0ZURlc3RydWN0aWJsZU9iamVjdDxDbGFzc1R5
cGU+KCptX2ppdC52bSgpLCByZXN1bHRHUFIsIHN0cnVjdHVyZS5nZXQoKSwgc2NyYXRjaEdQUjEs
IHNjcmF0Y2hHUFIyLCBzbG93UGF0aCk7CisgICAgICAgIG1faml0LmVtaXRBbGxvY2F0ZURlc3Ry
dWN0aWJsZU9iamVjdDxDbGFzc1R5cGU+KHZtKCksIHJlc3VsdEdQUiwgc3RydWN0dXJlLmdldCgp
LCBzY3JhdGNoR1BSMSwgc2NyYXRjaEdQUjIsIHNsb3dQYXRoKTsKICAgICB9CiAKICAgICB2b2lk
IGVtaXRBbGxvY2F0ZVJhd09iamVjdChHUFJSZWcgcmVzdWx0R1BSLCBSZWdpc3RlcmVkU3RydWN0
dXJlLCBHUFJSZWcgc3RvcmFnZUdQUiwgdW5zaWduZWQgbnVtRWxlbWVudHMsIHVuc2lnbmVkIHZl
Y3Rvckxlbmd0aCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaHVua3MuY3Bw
CShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5r
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDExLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDExLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MCwxNSArNDAsMTUgQEAKIAogbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBERkcgewogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IG9zckV4aXRUaHVua0dlbmVyYXRvcihWTSogdm0pCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IG9zckV4aXRUaHVua0dlbmVyYXRvcihWTSYgdm0pCiB7CiAgICAgTWFj
cm9Bc3NlbWJsZXIgaml0OwotICAgIGppdC5wcm9iZShPU1JFeGl0OjpleGVjdXRlT1NSRXhpdCwg
dm0pOworICAgIGppdC5wcm9iZShPU1JFeGl0OjpleGVjdXRlT1NSRXhpdCwgJnZtKTsKICAgICBM
aW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lEKTsKICAgICByZXR1cm4g
RklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJERkcgT1NSIGV4aXQg
dGh1bmsiKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvc3JF
eGl0R2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKFZNKiB2bSkKK01hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz4gb3NyRXhpdEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcihWTSYgdm0p
CiB7CiAgICAgTWFjcm9Bc3NlbWJsZXIgaml0OwogCkBAIC01Niw3ICs1Niw3IEBAIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3MKICAgICBhZGp1c3RGcmFtZUFuZFN0YWNr
SW5PU1JFeGl0Q29tcGlsZXJUaHVuazxERkc6OkpJVENvZGU+KGppdCwgdm0sIEpJVFR5cGU6OkRG
R0pJVCk7CiAgICAgCiAgICAgc2l6ZV90IHNjcmF0Y2hTaXplID0gc2l6ZW9mKEVuY29kZWRKU1Zh
bHVlKSAqIChHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycyArIEZQUkluZm86Om51bWJlck9mUmVn
aXN0ZXJzKTsKLSAgICBTY3JhdGNoQnVmZmVyKiBzY3JhdGNoQnVmZmVyID0gdm0tPnNjcmF0Y2hC
dWZmZXJGb3JTaXplKHNjcmF0Y2hTaXplKTsKKyAgICBTY3JhdGNoQnVmZmVyKiBzY3JhdGNoQnVm
ZmVyID0gdm0uc2NyYXRjaEJ1ZmZlckZvclNpemUoc2NyYXRjaFNpemUpOwogICAgIEVuY29kZWRK
U1ZhbHVlKiBidWZmZXIgPSBzdGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+KHNjcmF0Y2hCdWZm
ZXItPmRhdGFCdWZmZXIoKSk7CiAgICAgCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEdQ
UkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyArK2kpIHsKQEAgLTk5LDcgKzk5LDcgQEAgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvcwogI2VuZGlmCiAgICAgfQogCi0gICAg
aml0LmZhckp1bXAoTWFjcm9Bc3NlbWJsZXI6OkFic29sdXRlQWRkcmVzcygmdm0tPm9zckV4aXRK
dW1wRGVzdGluYXRpb24pLCBPU1JFeGl0UHRyVGFnKTsKKyAgICBqaXQuZmFySnVtcChNYWNyb0Fz
c2VtYmxlcjo6QWJzb2x1dGVBZGRyZXNzKCZ2bS5vc3JFeGl0SnVtcERlc3RpbmF0aW9uKSwgT1NS
RXhpdFB0clRhZyk7CiAKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RI
VU5LX0lEKTsKICAgICAKQEAgLTEwOCw3ICsxMDgsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IG9zCiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIs
IEpJVFRodW5rUHRyVGFnLCAiREZHIE9TUiBleGl0IGdlbmVyYXRpb24gdGh1bmsiKTsKIH0KIAot
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvc3JFbnRyeVRodW5rR2VuZXJh
dG9yKFZNKiB2bSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3NyRW50
cnlUaHVua0dlbmVyYXRvcihWTSYgdm0pCiB7CiAgICAgQXNzZW1ibHlIZWxwZXJzIGppdChudWxs
cHRyKTsKIApAQCAtMTQxLDcgKzE0MSw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gb3MKICAgICBqaXQuYWJvcnRXaXRoUmVhc29uKERGR1VucmVhc29uYWJsZU9TUkVu
dHJ5SnVtcERlc3RpbmF0aW9uKTsKIAogICAgIG9rLmxpbmsoJmppdCk7Ci0gICAgaml0LnJlc3Rv
cmVDYWxsZWVTYXZlc0Zyb21FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0tPnRvcEVudHJ5
RnJhbWUpOworICAgIGppdC5yZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tRW50cnlGcmFtZUNhbGxlZVNh
dmVzQnVmZmVyKHZtLnRvcEVudHJ5RnJhbWUpOwogICAgIGppdC5lbWl0TWF0ZXJpYWxpemVUYWdD
aGVja1JlZ2lzdGVycygpOwogCiAgICAgaml0LmZhckp1bXAoR1BSSW5mbzo6cmVnVDEsIEdQUklu
Zm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHVGh1bmtzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdU
aHVua3MuaAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdUaHVua3MuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTEtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM1LDkgKzM1LDkgQEAgY2xhc3MgVk07CiAK
IG5hbWVzcGFjZSBERkcgewogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
IG9zckV4aXRUaHVua0dlbmVyYXRvcihWTSopOwotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiBvc3JFeGl0R2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKFZNKik7Ci1NYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9zckVudHJ5VGh1bmtHZW5lcmF0b3IoVk0q
KTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3NyRXhpdFRodW5rR2Vu
ZXJhdG9yKFZNJik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9zckV4
aXRHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IoVk0mKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gb3NyRW50cnlUaHVua0dlbmVyYXRvcihWTSYpOwogCiB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6REZHCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVG9G
VExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRD
b21waWxhdGlvbkNhbGxiYWNrLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNhbGxi
YWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC03NCw3ICs3NCw3IEBAIHZvaWQgVG9GVExGb3JPU1JFbnRy
eURlZmVycmVkQ29tcGlsYXRpb24KICAgICAgICAgCiAgICAgc3dpdGNoIChyZXN1bHQpIHsKICAg
ICBjYXNlIENvbXBpbGF0aW9uU3VjY2Vzc2Z1bDogewotICAgICAgICBqaXRDb2RlLT5zZXRPU1JF
bnRyeUJsb2NrKCpjb2RlQmxvY2stPnZtKCksIHByb2ZpbGVkREZHQ29kZUJsb2NrLCBjb2RlQmxv
Y2spOworICAgICAgICBqaXRDb2RlLT5zZXRPU1JFbnRyeUJsb2NrKGNvZGVCbG9jay0+dm0oKSwg
cHJvZmlsZWRERkdDb2RlQmxvY2ssIGNvZGVCbG9jayk7CiAgICAgICAgIHVuc2lnbmVkIG9zckVu
dHJ5Qnl0ZWNvZGUgPSBjb2RlQmxvY2stPmppdENvZGUoKS0+ZnRsRm9yT1NSRW50cnkoKS0+Ynl0
ZWNvZGVJbmRleCgpOwogICAgICAgICBqaXRDb2RlLT50aWVyVXBFbnRyeVRyaWdnZXJzLnNldChv
c3JFbnRyeUJ5dGVjb2RlLCBKSVRDb2RlOjpUcmlnZ2VyUmVhc29uOjpDb21waWxhdGlvbkRvbmUp
OwogICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29y
a2xpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29y
a2xpc3QuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1dvcmtsaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM4MCw3ICszODAsNyBAQCB2b2lk
IFdvcmtsaXN0OjpyZXN1bWVBbGxUaHJlYWRzKCkKIAogdm9pZCBXb3JrbGlzdDo6dmlzaXRXZWFr
UmVmZXJlbmNlcyhTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKLSAgICBWTSogdm0gPSB2aXNpdG9y
LmhlYXAoKS0+dm0oKTsKKyAgICBWTSogdm0gPSAmdmlzaXRvci5oZWFwKCktPnZtKCk7CiAgICAg
ewogICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcigqbV9sb2NrKTsKICAgICAgICAgZm9yIChQbGFu
TWFwOjppdGVyYXRvciBpdGVyID0gbV9wbGFucy5iZWdpbigpOyBpdGVyICE9IG1fcGxhbnMuZW5k
KCk7ICsraXRlcikgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRG
R1RvQjMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93
ZXJERkdUb0IzLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02ODY5LDcgKzY4Njks
NyBAQCBwcml2YXRlOgogICAgICAgICBtX291dC5icmFuY2gobV9vdXQuaXNaZXJvMzIoZmxhZ3NB
bmRMZW5ndGgubGVuZ3RoKSwgcmFyZWx5KGVtcHR5Q2FzZSksIHVzdWFsbHkoY29udGludWF0aW9u
KSk7CiAKICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhlbXB0
eUNhc2UsIHNsb3dQYXRoKTsKLSAgICAgICAgVmFsdWVGcm9tQmxvY2sgZW1wdHlSZXN1bHQgPSBt
X291dC5hbmNob3Iod2Vha1BvaW50ZXIoanNFbXB0eVN0cmluZygmbV9ncmFwaC5tX3ZtKSkpOwor
ICAgICAgICBWYWx1ZUZyb21CbG9jayBlbXB0eVJlc3VsdCA9IG1fb3V0LmFuY2hvcih3ZWFrUG9p
bnRlcihqc0VtcHR5U3RyaW5nKG1fZ3JhcGgubV92bSkpKTsKICAgICAgICAgbV9vdXQuanVtcChj
b250aW51YXRpb24pOwogICAgICAgICAKICAgICAgICAgbV9vdXQuYXBwZW5kVG8oc2xvd1BhdGgs
IGNvbnRpbnVhdGlvbik7CkBAIC0xMjI4Miw3ICsxMjI4Miw3IEBAIHByaXZhdGU6CiAgICAgICAg
IFZlY3RvcjxWYWx1ZUZyb21CbG9jaywgNT4gcmVzdWx0czsKIAogICAgICAgICBtX291dC5hcHBl
bmRUbyhlbXB0eUNhc2UsIG5vdEVtcHR5Q2FzZSk7Ci0gICAgICAgIHJlc3VsdHMuYXBwZW5kKG1f
b3V0LmFuY2hvcih3ZWFrUG9pbnRlcihqc0VtcHR5U3RyaW5nKCZ2bSgpKSkpKTsKKyAgICAgICAg
cmVzdWx0cy5hcHBlbmQobV9vdXQuYW5jaG9yKHdlYWtQb2ludGVyKGpzRW1wdHlTdHJpbmcodm0o
KSkpKSk7CiAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKIAogICAgICAgICBtX291
dC5hcHBlbmRUbyhub3RFbXB0eUNhc2UsIG9uZUNoYXJDYXNlKTsKQEAgLTEzODgwLDcgKzEzODgw
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgZWRnZSwgQ2VsbENhc2VTcGVjdWxh
dGVzT2JqZWN0LCBTcGVjdWxhdGVOdWxsT3JVbmRlZmluZWQsCiAgICAgICAgICAgICAgICAgICAg
IE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbikpOwogICAgICAgICBjYXNlIFN0cmluZ1VzZToKLSAg
ICAgICAgICAgIHJldHVybiBtX291dC5ub3RFcXVhbChsb3dTdHJpbmcoZWRnZSksIHdlYWtQb2lu
dGVyKGpzRW1wdHlTdHJpbmcoJm1fZ3JhcGgubV92bSkpKTsKKyAgICAgICAgICAgIHJldHVybiBt
X291dC5ub3RFcXVhbChsb3dTdHJpbmcoZWRnZSksIHdlYWtQb2ludGVyKGpzRW1wdHlTdHJpbmco
bV9ncmFwaC5tX3ZtKSkpOwogICAgICAgICBjYXNlIFN0cmluZ09yT3RoZXJVc2U6IHsKICAgICAg
ICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0pTVmFsdWUoZWRnZSwgTWFudWFsT3BlcmFuZFNwZWN1
bGF0aW9uKTsKIApAQCAtMTM4OTIsNyArMTM4OTIsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAg
CiAgICAgICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGNlbGxD
YXNlLCBub3RDZWxsQ2FzZSk7CiAgICAgICAgICAgICBGVExfVFlQRV9DSEVDSyhqc1ZhbHVlVmFs
dWUodmFsdWUpLCBlZGdlLCAoflNwZWNDZWxsQ2hlY2spIHwgU3BlY1N0cmluZywgaXNOb3RTdHJp
bmcodmFsdWUpKTsKLSAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIHN0cmluZ1Jlc3VsdCA9IG1f
b3V0LmFuY2hvcihtX291dC5ub3RFcXVhbCh2YWx1ZSwgd2Vha1BvaW50ZXIoanNFbXB0eVN0cmlu
ZygmbV9ncmFwaC5tX3ZtKSkpKTsKKyAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIHN0cmluZ1Jl
c3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5ub3RFcXVhbCh2YWx1ZSwgd2Vha1BvaW50ZXIoanNF
bXB0eVN0cmluZyhtX2dyYXBoLm1fdm0pKSkpOwogICAgICAgICAgICAgbV9vdXQuanVtcChjb250
aW51YXRpb24pOwogCiAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhub3RDZWxsQ2FzZSwgY29u
dGludWF0aW9uKTsKQEAgLTEzOTQ5LDcgKzEzOTQ5LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
ICAgICB1bnN1cmUoYmlnSW50Q2FzZSksIHVuc3VyZShub3RTdHJpbmdPckJpZ0ludENhc2UpKTsK
IAogICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oc3RyaW5nQ2FzZSwgYmlnSW50Q2FzZSk7Ci0g
ICAgICAgICAgICByZXN1bHRzLmFwcGVuZChtX291dC5hbmNob3IobV9vdXQubm90RXF1YWwodmFs
dWUsIHdlYWtQb2ludGVyKGpzRW1wdHlTdHJpbmcoJm1fZ3JhcGgubV92bSkpKSkpOworICAgICAg
ICAgICAgcmVzdWx0cy5hcHBlbmQobV9vdXQuYW5jaG9yKG1fb3V0Lm5vdEVxdWFsKHZhbHVlLCB3
ZWFrUG9pbnRlcihqc0VtcHR5U3RyaW5nKG1fZ3JhcGgubV92bSkpKSkpOwogICAgICAgICAgICAg
bV9vdXQuanVtcChjb250aW51YXRpb24pOwogCiAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhi
aWdJbnRDYXNlLCBub3RTdHJpbmdPckJpZ0ludENhc2UpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExUaHVua3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMVGh1bmtzLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExUaHVua3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw3
IEBAIGVudW0gY2xhc3MgRnJhbWVBbmRTdGFja0FkanVzdG1lbnRSZXF1aXIKIH07CiAKIHN0YXRp
YyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGdlbmVyaWNHZW5lcmF0aW9u
VGh1bmtHZW5lcmF0b3IoCi0gICAgVk0qIHZtLCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+
IGdlbmVyYXRpb25GdW5jdGlvbiwgUHRyVGFnIHJlc3VsdFRhZywgY29uc3QgY2hhciogbmFtZSwg
dW5zaWduZWQgZXh0cmFQb3BzVG9SZXN0b3JlLCBGcmFtZUFuZFN0YWNrQWRqdXN0bWVudFJlcXVp
cmVtZW50IGZyYW1lQW5kU3RhY2tBZGp1c3RtZW50UmVxdWlyZW1lbnQpCisgICAgVk0mIHZtLCBG
dW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGdlbmVyYXRpb25GdW5jdGlvbiwgUHRyVGFnIHJl
c3VsdFRhZywgY29uc3QgY2hhciogbmFtZSwgdW5zaWduZWQgZXh0cmFQb3BzVG9SZXN0b3JlLCBG
cmFtZUFuZFN0YWNrQWRqdXN0bWVudFJlcXVpcmVtZW50IGZyYW1lQW5kU3RhY2tBZGp1c3RtZW50
UmVxdWlyZW1lbnQpCiB7CiAgICAgQXNzZW1ibHlIZWxwZXJzIGppdChudWxscHRyKTsKIApAQCAt
NzMsNyArNzMsNyBAQCBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyCiAg
ICAgICAgIG51bWJlck9mUmVxdWlyZWRQb3BzKys7CiAgICAgfSB3aGlsZSAoc3RhY2tNaXNhbGln
bm1lbnQgJSBzdGFja0FsaWdubWVudEJ5dGVzKCkpOwogICAgIAotICAgIFNjcmF0Y2hCdWZmZXIq
IHNjcmF0Y2hCdWZmZXIgPSB2bS0+c2NyYXRjaEJ1ZmZlckZvclNpemUocmVxdWlyZWRTY3JhdGNo
TWVtb3J5U2l6ZUluQnl0ZXMoKSk7CisgICAgU2NyYXRjaEJ1ZmZlciogc2NyYXRjaEJ1ZmZlciA9
IHZtLnNjcmF0Y2hCdWZmZXJGb3JTaXplKHJlcXVpcmVkU2NyYXRjaE1lbW9yeVNpemVJbkJ5dGVz
KCkpOwogICAgIGNoYXIqIGJ1ZmZlciA9IHN0YXRpY19jYXN0PGNoYXIqPihzY3JhdGNoQnVmZmVy
LT5kYXRhQnVmZmVyKCkpOwogICAgIAogICAgIHNhdmVBbGxSZWdpc3RlcnMoaml0LCBidWZmZXIp
OwpAQCAtMTI4LDE0ICsxMjgsMTQgQEAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0cgogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0
clRhZywgIiVzIiwgbmFtZSk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gb3NyRXhpdEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcihWTSogdm0pCitNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9zckV4aXRHZW5lcmF0aW9uVGh1bmtHZW5lcmF0
b3IoVk0mIHZtKQogewogICAgIHVuc2lnbmVkIGV4dHJhUG9wc1RvUmVzdG9yZSA9IDA7CiAgICAg
cmV0dXJuIGdlbmVyaWNHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IoCiAgICAgICAgIHZtLCBjb21w
aWxlRlRMT1NSRXhpdCwgT1NSRXhpdFB0clRhZywgIkZUTCBPU1IgZXhpdCBnZW5lcmF0aW9uIHRo
dW5rIiwgZXh0cmFQb3BzVG9SZXN0b3JlLCBGcmFtZUFuZFN0YWNrQWRqdXN0bWVudFJlcXVpcmVt
ZW50OjpOZWVkZWQpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
IGxhenlTbG93UGF0aEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcihWTSogdm0pCitNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGxhenlTbG93UGF0aEdlbmVyYXRpb25UaHVua0dl
bmVyYXRvcihWTSYgdm0pCiB7CiAgICAgdW5zaWduZWQgZXh0cmFQb3BzVG9SZXN0b3JlID0gMTsK
ICAgICByZXR1cm4gZ2VuZXJpY0dlbmVyYXRpb25UaHVua0dlbmVyYXRvcigKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVGh1bmtzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExUaHVua3MuaAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExUaHVua3MuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM4LDgg
KzM4LDggQEAgY2xhc3MgVk07CiAKIG5hbWVzcGFjZSBGVEwgewogCi1NYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9zckV4aXRHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IoVk0q
KTsKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gbGF6eVNsb3dQYXRoR2Vu
ZXJhdGlvblRodW5rR2VuZXJhdG9yKFZNKik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IG9zckV4aXRHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IoVk0mKTsKK01hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gbGF6eVNsb3dQYXRoR2VuZXJhdGlvblRodW5r
R2VuZXJhdG9yKFZNJik7CiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHNs
b3dQYXRoQ2FsbFRodW5rR2VuZXJhdG9yKGNvbnN0IFNsb3dQYXRoQ2FsbEtleSYpOwogCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBLZXlUeXBlQXJndW1lbnQ+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9DZWxsQ29udGFpbmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvQ2VsbENvbnRhaW5lci5oCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9DZWxsQ29udGFpbmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTgsNyArNTgs
NyBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KICAgICAKLSAgICBWTSogdm0oKSBjb25zdDsKKyAg
ICBWTSYgdm0oKSBjb25zdDsKICAgICBIZWFwKiBoZWFwKCkgY29uc3Q7CiAgICAgCiAgICAgZXhw
bGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICEhbV9lbmNvZGVkUG9pbnRlcjsg
fQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ2VsbENvbnRhaW5lcklubGluZXMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9DZWxsQ29udGFpbmVy
SW5saW5lcy5oCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9DZWxsQ29udGFpbmVySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMzLDcgKzMzLDcgQEAKIAog
bmFtZXNwYWNlIEpTQyB7CiAKLWlubGluZSBWTSogQ2VsbENvbnRhaW5lcjo6dm0oKSBjb25zdAor
aW5saW5lIFZNJiBDZWxsQ29udGFpbmVyOjp2bSgpIGNvbnN0CiB7CiAgICAgaWYgKGlzTGFyZ2VB
bGxvY2F0aW9uKCkpCiAgICAgICAgIHJldHVybiBsYXJnZUFsbG9jYXRpb24oKS52bSgpOwpAQCAt
NDIsNyArNDIsNyBAQCBpbmxpbmUgVk0qIENlbGxDb250YWluZXI6OnZtKCkgY29uc3QKIAogaW5s
aW5lIEhlYXAqIENlbGxDb250YWluZXI6OmhlYXAoKSBjb25zdAogewotICAgIHJldHVybiAmdm0o
KS0+aGVhcDsKKyAgICByZXR1cm4gJnZtKCkuaGVhcDsKIH0KIAogaW5saW5lIGJvb2wgQ2VsbENv
bnRhaW5lcjo6aXNNYXJrZWQoSGVhcENlbGwqIGNlbGwpIGNvbnN0CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9Db21wbGV0ZVN1YnNwYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db21wbGV0ZVN1YnNwYWNlLmNwcAkocmV2aXNpb24gMjQ5
MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29tcGxldGVTdWJzcGFjZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEyNSw3ICsxMjUsNyBAQCB2b2lkKiBDb21wbGV0ZVN1YnNwYWNl
Ojp0cnlBbGxvY2F0ZVNsb3coCiAgICAgaWYgKHZhbGlkYXRlREZHRG9lc0dDKQogICAgICAgICBS
RUxFQVNFX0FTU0VSVCh2bS5oZWFwLmV4cGVjdERvZXNHQygpKTsKIAotICAgIHNhbml0aXplU3Rh
Y2tGb3JWTSgmdm0pOworICAgIHNhbml0aXplU3RhY2tGb3JWTSh2bSk7CiAgICAgCiAgICAgaWYg
KEFsbG9jYXRvciBhbGxvY2F0b3IgPSBhbGxvY2F0b3JGb3Ioc2l6ZSwgQWxsb2NhdG9yRm9yTW9k
ZTo6RW5zdXJlQWxsb2NhdG9yKSkKICAgICAgICAgcmV0dXJuIGFsbG9jYXRvci5hbGxvY2F0ZShk
ZWZlcnJhbENvbnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6UmV0dXJuTnVsbCk7CkBAIC0x
NjksNyArMTY5LDcgQEAgdm9pZCogQ29tcGxldGVTdWJzcGFjZTo6cmVhbGxvY2F0ZUxhcmdlQQog
ICAgIEFTU0VSVChvbGRBbGxvY2F0aW9uLT5hdHRyaWJ1dGVzKCkuY2VsbEtpbmQgPT0gSGVhcENl
bGw6OkF1eGlsaWFyeSk7CiAgICAgQVNTRVJUKHNpemUgPiBNYXJrZWRTcGFjZTo6bGFyZ2VDdXRv
ZmYpOwogCi0gICAgc2FuaXRpemVTdGFja0ZvclZNKCZ2bSk7CisgICAgc2FuaXRpemVTdGFja0Zv
clZNKHZtKTsKIAogICAgIGlmIChzaXplIDw9IE9wdGlvbnM6OmxhcmdlQWxsb2NhdGlvbkN1dG9m
ZigpCiAgICAgICAgICYmIHNpemUgPD0gTWFya2VkU3BhY2U6OmxhcmdlQ3V0b2ZmKSB7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0FjdGl2aXR5Q2FsbGJhY2suaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0FjdGl2aXR5Q2FsbGJhY2suaAko
cmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NBY3Rpdml0
eUNhbGxiYWNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDEwLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjUsNyArNjUsNyBAQCBwcm90ZWN0ZWQ6
CiAgICAgdmlydHVhbCBkb3VibGUgZ2NUaW1lU2xpY2Uoc2l6ZV90IGJ5dGVzKSA9IDA7CiAgICAg
dmlydHVhbCBkb3VibGUgZGVhdGhSYXRlKEhlYXAmKSA9IDA7CiAKLSAgICBHQ0FjdGl2aXR5Q2Fs
bGJhY2soVk0qIHZtKQorICAgIEdDQWN0aXZpdHlDYWxsYmFjayhWTSYgdm0pCiAgICAgICAgIDog
QmFzZSh2bSkKICAgICAgICAgLCBtX2VuYWJsZWQodHJ1ZSkKICAgICAgICAgLCBtX2RlbGF5KHNf
ZGVjYWRlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NBc3NlcnRpb25zLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NBc3NlcnRpb25zLmgJ
KHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDQXNzZXJ0
aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTItMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQg
KEMpIDIwMTUgSWdhbGlhIFMuTC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTM3LDcgKzM3LDcgQEAK
IAogI2RlZmluZSBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKG9iamVjdCwgY2xhc3NJbmZvKSBk
byB7XAogICAgIEFTU0VSVF9HQ19PQkpFQ1RfTE9PS1NfVkFMSUQob2JqZWN0KTsgXAotICAgIFJF
TEVBU0VfQVNTRVJUKG9iamVjdC0+aW5oZXJpdHMoKm9iamVjdC0+SlNDOjpKU0NlbGw6OnZtKCks
IGNsYXNzSW5mbykpOyBcCisgICAgUkVMRUFTRV9BU1NFUlQob2JqZWN0LT5pbmhlcml0cyhvYmpl
Y3QtPkpTQzo6SlNDZWxsOjp2bSgpLCBjbGFzc0luZm8pKTsgXAogfSB3aGlsZSAoMCkKIAogLy8g
VXNlZCB0byBhdm9pZCB0cmlnZ2VyaW5nIC1XdW5kZWZpbmVkLWJvb2wtY29udmVyc2lvbi4KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hhbmRsZVNldC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGFuZGxlU2V0LmNwcAkocmV2aXNpb24gMjQ5
MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGFuZGxlU2V0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAx
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTM0LDcgKzM0LDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLUhhbmRsZVNl
dDo6SGFuZGxlU2V0KFZNKiB2bSkKK0hhbmRsZVNldDo6SGFuZGxlU2V0KFZNJiB2bSkKICAgICA6
IG1fdm0odm0pCiB7CiAgICAgZ3JvdygpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSGFuZGxlU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SGFuZGxlU2V0LmgJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0hhbmRsZVNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMSwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY1LDEwICs2NSwxMCBAQCBjbGFz
cyBIYW5kbGVTZXQgewogcHVibGljOgogICAgIHN0YXRpYyBIYW5kbGVTZXQqIGhlYXBGb3IoSGFu
ZGxlU2xvdCk7CiAKLSAgICBIYW5kbGVTZXQoVk0qKTsKKyAgICBIYW5kbGVTZXQoVk0mKTsKICAg
ICB+SGFuZGxlU2V0KCk7CiAKLSAgICBWTSogdm0oKTsKKyAgICBWTSYgdm0oKTsKIAogICAgIEhh
bmRsZVNsb3QgYWxsb2NhdGUoKTsKICAgICB2b2lkIGRlYWxsb2NhdGUoSGFuZGxlU2xvdCk7CkBA
IC05Miw3ICs5Miw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBpc0xpdmVOb2RlKE5vZGUqKTsKICNl
bmRpZgogCi0gICAgVk0qIG1fdm07CisgICAgVk0mIG1fdm07CiAgICAgRG91Ymx5TGlua2VkTGlz
dDxIYW5kbGVCbG9jaz4gbV9ibG9ja0xpc3Q7CiAKICAgICBTZW50aW5lbExpbmtlZExpc3Q8Tm9k
ZT4gbV9zdHJvbmdMaXN0OwpAQCAtMTA1LDcgKzEwNSw3IEBAIGlubGluZSBIYW5kbGVTZXQqIEhh
bmRsZVNldDo6aGVhcEZvcihIYW4KICAgICByZXR1cm4gdG9Ob2RlKGhhbmRsZSktPmhhbmRsZVNl
dCgpOwogfQogCi1pbmxpbmUgVk0qIEhhbmRsZVNldDo6dm0oKQoraW5saW5lIFZNJiBIYW5kbGVT
ZXQ6OnZtKCkKIHsKICAgICByZXR1cm4gbV92bTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0hlYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0hlYXAuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9IZWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ0LDE3ICsxNDQsMTcgQEAgc2l6ZV90
IHByb3BvcnRpb25hbEhlYXBTaXplKHNpemVfdCBoZWFwUwogICAgIHJldHVybiBPcHRpb25zOjps
YXJnZUhlYXBHcm93dGhGYWN0b3IoKSAqIGhlYXBTaXplOwogfQogCi1ib29sIGlzVmFsaWRTaGFy
ZWRJbnN0YW5jZVRocmVhZFN0YXRlKFZNKiB2bSkKK2Jvb2wgaXNWYWxpZFNoYXJlZEluc3RhbmNl
VGhyZWFkU3RhdGUoVk0mIHZtKQogewotICAgIHJldHVybiB2bS0+Y3VycmVudFRocmVhZElzSG9s
ZGluZ0FQSUxvY2soKTsKKyAgICByZXR1cm4gdm0uY3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxv
Y2soKTsKIH0KIAotYm9vbCBpc1ZhbGlkVGhyZWFkU3RhdGUoVk0qIHZtKQorYm9vbCBpc1ZhbGlk
VGhyZWFkU3RhdGUoVk0mIHZtKQogewotICAgIGlmICh2bS0+YXRvbVN0cmluZ1RhYmxlKCkgIT0g
VGhyZWFkOjpjdXJyZW50KCkuYXRvbVN0cmluZ1RhYmxlKCkpCisgICAgaWYgKHZtLmF0b21TdHJp
bmdUYWJsZSgpICE9IFRocmVhZDo6Y3VycmVudCgpLmF0b21TdHJpbmdUYWJsZSgpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAodm0tPmlzU2hhcmVkSW5zdGFuY2UoKSAmJiAhaXNW
YWxpZFNoYXJlZEluc3RhbmNlVGhyZWFkU3RhdGUodm0pKQorICAgIGlmICh2bS5pc1NoYXJlZElu
c3RhbmNlKCkgJiYgIWlzVmFsaWRTaGFyZWRJbnN0YW5jZVRocmVhZFN0YXRlKHZtKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuIHRydWU7CkBAIC0yODIsNyArMjgyLDcgQEAg
cHJpdmF0ZToKICAgICBIZWFwJiBtX2hlYXA7CiB9OwogCi1IZWFwOjpIZWFwKFZNKiB2bSwgSGVh
cFR5cGUgaGVhcFR5cGUpCitIZWFwOjpIZWFwKFZNJiB2bSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAg
ICAgOiBtX2hlYXBUeXBlKGhlYXBUeXBlKQogICAgICwgbV9yYW1TaXplKE9wdGlvbnM6OmZvcmNl
UkFNU2l6ZSgpID8gT3B0aW9uczo6Zm9yY2VSQU1TaXplKCkgOiByYW1TaXplKCkpCiAgICAgLCBt
X21pbkJ5dGVzUGVyQ3ljbGUobWluSGVhcFNpemUobV9oZWFwVHlwZSwgbV9yYW1TaXplKSkKQEAg
LTQwMiw3ICs0MDIsNyBAQCB2b2lkIEhlYXA6Omxhc3RDaGFuY2VUb0ZpbmFsaXplKCkKICAgICAK
ICAgICBtX2lzU2h1dHRpbmdEb3duID0gdHJ1ZTsKICAgICAKLSAgICBSRUxFQVNFX0FTU0VSVCgh
bV92bS0+ZW50cnlTY29wZSk7CisgICAgUkVMRUFTRV9BU1NFUlQoIW1fdm0uZW50cnlTY29wZSk7
CiAgICAgUkVMRUFTRV9BU1NFUlQobV9tdXRhdG9yU3RhdGUgPT0gTXV0YXRvclN0YXRlOjpSdW5u
aW5nKTsKICAgICAKICAgICBpZiAobV9jb2xsZWN0Q29udGludW91c2x5VGhyZWFkKSB7CkBAIC00
OTgsNyArNDk4LDcgQEAgdm9pZCBIZWFwOjpyZWxlYXNlRGVsYXllZFJlbGVhc2VkT2JqZWN0cwog
ICAgIC8vIGFuZCB1c2UgYSB0ZW1wIFZlY3RvciBmb3IgdGhlIGFjdHVhbCByZWxlYXNpbmcuCiAg
ICAgaWYgKCFtX2RlbGF5ZWRSZWxlYXNlUmVjdXJzaW9uQ291bnQrKykgewogICAgICAgICB3aGls
ZSAoIW1fZGVsYXllZFJlbGVhc2VPYmplY3RzLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgQVNT
RVJUKG1fdm0tPmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOworICAgICAgICAgICAg
QVNTRVJUKG1fdm0uY3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7CiAKICAgICAgICAg
ICAgIGF1dG8gb2JqZWN0c1RvUmVsZWFzZSA9IFdURk1vdmUobV9kZWxheWVkUmVsZWFzZU9iamVj
dHMpOwogCkBAIC01NzEsNyArNTcxLDcgQEAgdm9pZCBIZWFwOjpyZXBvcnRBYmFuZG9uZWRPYmpl
Y3RHcmFwaCgpCiB2b2lkIEhlYXA6OnByb3RlY3QoSlNWYWx1ZSBrKQogewogICAgIEFTU0VSVChr
KTsKLSAgICBBU1NFUlQobV92bS0+Y3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7Cisg
ICAgQVNTRVJUKG1fdm0uY3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7CiAKICAgICBp
ZiAoIWsuaXNDZWxsKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTU4Miw3ICs1ODIsNyBAQCB2b2lk
IEhlYXA6OnByb3RlY3QoSlNWYWx1ZSBrKQogYm9vbCBIZWFwOjp1bnByb3RlY3QoSlNWYWx1ZSBr
KQogewogICAgIEFTU0VSVChrKTsKLSAgICBBU1NFUlQobV92bS0+Y3VycmVudFRocmVhZElzSG9s
ZGluZ0FQSUxvY2soKSk7CisgICAgQVNTRVJUKG1fdm0uY3VycmVudFRocmVhZElzSG9sZGluZ0FQ
SUxvY2soKSk7CiAKICAgICBpZiAoIWsuaXNDZWxsKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
QEAgLTYwMywzNCArNjAzLDM0IEBAIHZvaWQgSGVhcDo6ZmluYWxpemVNYXJrZWRVbmNvbmRpdGlv
bmFsRmkKIHsKICAgICBjZWxsU2V0LmZvckVhY2hNYXJrZWRDZWxsKAogICAgICAgICBbJl0gKEhl
YXBDZWxsKiBjZWxsLCBIZWFwQ2VsbDo6S2luZCkgewotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8
Q2VsbFR5cGUqPihjZWxsKS0+ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoKnZtKCkpOworICAgICAg
ICAgICAgc3RhdGljX2Nhc3Q8Q2VsbFR5cGUqPihjZWxsKS0+ZmluYWxpemVVbmNvbmRpdGlvbmFs
bHkodm0oKSk7CiAgICAgICAgIH0pOwogfQogCiB2b2lkIEhlYXA6OmZpbmFsaXplVW5jb25kaXRp
b25hbEZpbmFsaXplcnMoKQogewotICAgIHZtKCktPmJ1aWx0aW5FeGVjdXRhYmxlcygpLT5maW5h
bGl6ZVVuY29uZGl0aW9uYWxseSgpOwotICAgIGZpbmFsaXplTWFya2VkVW5jb25kaXRpb25hbEZp
bmFsaXplcnM8RnVuY3Rpb25FeGVjdXRhYmxlPih2bSgpLT5mdW5jdGlvbkV4ZWN1dGFibGVTcGFj
ZS5zcGFjZSk7Ci0gICAgZmluYWxpemVNYXJrZWRVbmNvbmRpdGlvbmFsRmluYWxpemVyczxTeW1i
b2xUYWJsZT4odm0oKS0+c3ltYm9sVGFibGVTcGFjZSk7Ci0gICAgdm0oKS0+Zm9yRWFjaENvZGVC
bG9ja1NwYWNlKAorICAgIHZtKCkuYnVpbHRpbkV4ZWN1dGFibGVzKCktPmZpbmFsaXplVW5jb25k
aXRpb25hbGx5KCk7CisgICAgZmluYWxpemVNYXJrZWRVbmNvbmRpdGlvbmFsRmluYWxpemVyczxG
dW5jdGlvbkV4ZWN1dGFibGU+KHZtKCkuZnVuY3Rpb25FeGVjdXRhYmxlU3BhY2Uuc3BhY2UpOwor
ICAgIGZpbmFsaXplTWFya2VkVW5jb25kaXRpb25hbEZpbmFsaXplcnM8U3ltYm9sVGFibGU+KHZt
KCkuc3ltYm9sVGFibGVTcGFjZSk7CisgICAgdm0oKS5mb3JFYWNoQ29kZUJsb2NrU3BhY2UoCiAg
ICAgICAgIFsmXSAoYXV0byYgc3BhY2UpIHsKICAgICAgICAgICAgIHRoaXMtPmZpbmFsaXplTWFy
a2VkVW5jb25kaXRpb25hbEZpbmFsaXplcnM8Q29kZUJsb2NrPihzcGFjZS5zZXQpOwogICAgICAg
ICB9KTsKLSAgICBmaW5hbGl6ZU1hcmtlZFVuY29uZGl0aW9uYWxGaW5hbGl6ZXJzPEV4ZWN1dGFi
bGVUb0NvZGVCbG9ja0VkZ2U+KHZtKCktPmV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2VzV2l0aEZp
bmFsaXplcnMpOwotICAgIGZpbmFsaXplTWFya2VkVW5jb25kaXRpb25hbEZpbmFsaXplcnM8U3Ry
dWN0dXJlUmFyZURhdGE+KHZtKCktPnN0cnVjdHVyZVJhcmVEYXRhU3BhY2UpOwotICAgIGZpbmFs
aXplTWFya2VkVW5jb25kaXRpb25hbEZpbmFsaXplcnM8VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFi
bGU+KHZtKCktPnVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlU3BhY2Uuc2V0KTsKLSAgICBpZiAo
dm0oKS0+bV93ZWFrU2V0U3BhY2UpCi0gICAgICAgIGZpbmFsaXplTWFya2VkVW5jb25kaXRpb25h
bEZpbmFsaXplcnM8SlNXZWFrU2V0Pigqdm0oKS0+bV93ZWFrU2V0U3BhY2UpOwotICAgIGlmICh2
bSgpLT5tX3dlYWtNYXBTcGFjZSkKLSAgICAgICAgZmluYWxpemVNYXJrZWRVbmNvbmRpdGlvbmFs
RmluYWxpemVyczxKU1dlYWtNYXA+KCp2bSgpLT5tX3dlYWtNYXBTcGFjZSk7Ci0gICAgaWYgKHZt
KCktPm1fd2Vha09iamVjdFJlZlNwYWNlKQotICAgICAgICBmaW5hbGl6ZU1hcmtlZFVuY29uZGl0
aW9uYWxGaW5hbGl6ZXJzPEpTV2Vha09iamVjdFJlZj4oKnZtKCktPm1fd2Vha09iamVjdFJlZlNw
YWNlKTsKLSAgICBpZiAodm0oKS0+bV9lcnJvckluc3RhbmNlU3BhY2UpCi0gICAgICAgIGZpbmFs
aXplTWFya2VkVW5jb25kaXRpb25hbEZpbmFsaXplcnM8RXJyb3JJbnN0YW5jZT4oKnZtKCktPm1f
ZXJyb3JJbnN0YW5jZVNwYWNlKTsKKyAgICBmaW5hbGl6ZU1hcmtlZFVuY29uZGl0aW9uYWxGaW5h
bGl6ZXJzPEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U+KHZtKCkuZXhlY3V0YWJsZVRvQ29kZUJs
b2NrRWRnZXNXaXRoRmluYWxpemVycyk7CisgICAgZmluYWxpemVNYXJrZWRVbmNvbmRpdGlvbmFs
RmluYWxpemVyczxTdHJ1Y3R1cmVSYXJlRGF0YT4odm0oKS5zdHJ1Y3R1cmVSYXJlRGF0YVNwYWNl
KTsKKyAgICBmaW5hbGl6ZU1hcmtlZFVuY29uZGl0aW9uYWxGaW5hbGl6ZXJzPFVubGlua2VkRnVu
Y3Rpb25FeGVjdXRhYmxlPih2bSgpLnVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlU3BhY2Uuc2V0
KTsKKyAgICBpZiAodm0oKS5tX3dlYWtTZXRTcGFjZSkKKyAgICAgICAgZmluYWxpemVNYXJrZWRV
bmNvbmRpdGlvbmFsRmluYWxpemVyczxKU1dlYWtTZXQ+KCp2bSgpLm1fd2Vha1NldFNwYWNlKTsK
KyAgICBpZiAodm0oKS5tX3dlYWtNYXBTcGFjZSkKKyAgICAgICAgZmluYWxpemVNYXJrZWRVbmNv
bmRpdGlvbmFsRmluYWxpemVyczxKU1dlYWtNYXA+KCp2bSgpLm1fd2Vha01hcFNwYWNlKTsKKyAg
ICBpZiAodm0oKS5tX3dlYWtPYmplY3RSZWZTcGFjZSkKKyAgICAgICAgZmluYWxpemVNYXJrZWRV
bmNvbmRpdGlvbmFsRmluYWxpemVyczxKU1dlYWtPYmplY3RSZWY+KCp2bSgpLm1fd2Vha09iamVj
dFJlZlNwYWNlKTsKKyAgICBpZiAodm0oKS5tX2Vycm9ySW5zdGFuY2VTcGFjZSkKKyAgICAgICAg
ZmluYWxpemVNYXJrZWRVbmNvbmRpdGlvbmFsRmluYWxpemVyczxFcnJvckluc3RhbmNlPigqdm0o
KS5tX2Vycm9ySW5zdGFuY2VTcGFjZSk7CiAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCi0gICAg
aWYgKHZtKCktPm1fd2ViQXNzZW1ibHlDb2RlQmxvY2tTcGFjZSkKLSAgICAgICAgZmluYWxpemVN
YXJrZWRVbmNvbmRpdGlvbmFsRmluYWxpemVyczxKU1dlYkFzc2VtYmx5Q29kZUJsb2NrPigqdm0o
KS0+bV93ZWJBc3NlbWJseUNvZGVCbG9ja1NwYWNlKTsKKyAgICBpZiAodm0oKS5tX3dlYkFzc2Vt
Ymx5Q29kZUJsb2NrU3BhY2UpCisgICAgICAgIGZpbmFsaXplTWFya2VkVW5jb25kaXRpb25hbEZp
bmFsaXplcnM8SlNXZWJBc3NlbWJseUNvZGVCbG9jaz4oKnZtKCkubV93ZWJBc3NlbWJseUNvZGVC
bG9ja1NwYWNlKTsKICNlbmRpZgogfQogCkBAIC02NDksOSArNjQ5LDkgQEAgdm9pZCBIZWFwOjpj
b21wbGV0ZUFsbEpJVFBsYW5zKCkKICAgICBpZiAoIVZNOjpjYW5Vc2VKSVQoKSkKICAgICAgICAg
cmV0dXJuOwogI2lmIEVOQUJMRShKSVQpCi0gICAgSklUV29ya2xpc3Q6OmVuc3VyZUdsb2JhbFdv
cmtsaXN0KCkuY29tcGxldGVBbGxGb3JWTSgqbV92bSk7CisgICAgSklUV29ya2xpc3Q6OmVuc3Vy
ZUdsb2JhbFdvcmtsaXN0KCkuY29tcGxldGVBbGxGb3JWTShtX3ZtKTsKICNlbmRpZiAvLyBFTkFC
TEUoSklUKQotICAgIERGRzo6Y29tcGxldGVBbGxQbGFuc0ZvclZNKCptX3ZtKTsKKyAgICBERkc6
OmNvbXBsZXRlQWxsUGxhbnNGb3JWTShtX3ZtKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgRnVu
Yz4KQEAgLTY1OSw3ICs2NTksNyBAQCB2b2lkIEhlYXA6Oml0ZXJhdGVFeGVjdXRpbmdBbmRDb21w
aWxpbmdDCiB7CiAgICAgbV9jb2RlQmxvY2tzLT5pdGVyYXRlQ3VycmVudGx5RXhlY3V0aW5nKGZ1
bmMpOwogICAgIGlmIChWTTo6Y2FuVXNlSklUKCkpCi0gICAgICAgIERGRzo6aXRlcmF0ZUNvZGVC
bG9ja3NGb3JHQygqbV92bSwgZnVuYyk7CisgICAgICAgIERGRzo6aXRlcmF0ZUNvZGVCbG9ja3NG
b3JHQyhtX3ZtLCBmdW5jKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KQEAgLTcwOCw3
ICs3MDgsNyBAQCB2b2lkIEhlYXA6OmdhdGhlclN0YWNrUm9vdHMoQ29uc2VydmF0aXZlCiB2b2lk
IEhlYXA6OmdhdGhlckpTU3RhY2tSb290cyhDb25zZXJ2YXRpdmVSb290cyYgcm9vdHMpCiB7CiAj
aWYgRU5BQkxFKENfTE9PUCkKLSAgICBtX3ZtLT5pbnRlcnByZXRlci0+Y2xvb3BTdGFjaygpLmdh
dGhlckNvbnNlcnZhdGl2ZVJvb3RzKHJvb3RzLCAqbV9qaXRTdHViUm91dGluZXMsICptX2NvZGVC
bG9ja3MpOworICAgIG1fdm0uaW50ZXJwcmV0ZXItPmNsb29wU3RhY2soKS5nYXRoZXJDb25zZXJ2
YXRpdmVSb290cyhyb290cywgKm1faml0U3R1YlJvdXRpbmVzLCAqbV9jb2RlQmxvY2tzKTsKICNl
bHNlCiAgICAgVU5VU0VEX1BBUkFNKHJvb3RzKTsKICNlbmRpZgpAQCAtNzE5LDcgKzcxOSw3IEBA
IHZvaWQgSGVhcDo6Z2F0aGVyU2NyYXRjaEJ1ZmZlclJvb3RzKENvbnMKICNpZiBFTkFCTEUoREZH
X0pJVCkKICAgICBpZiAoIVZNOjpjYW5Vc2VKSVQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIG1f
dm0tPmdhdGhlclNjcmF0Y2hCdWZmZXJSb290cyhyb290cyk7CisgICAgbV92bS5nYXRoZXJTY3Jh
dGNoQnVmZmVyUm9vdHMocm9vdHMpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0ocm9vdHMpOwog
I2VuZGlmCkBAIC03MzksMTMgKzczOSwxMyBAQCB2b2lkIEhlYXA6OnJlbW92ZURlYWRDb21waWxl
cldvcmtsaXN0RW50CiAgICAgaWYgKCFWTTo6Y2FuVXNlSklUKCkpCiAgICAgICAgIHJldHVybjsK
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSBERkc6Om51bWJlck9mV29ya2xpc3RzKCk7IGktLTspCi0g
ICAgICAgIERGRzo6ZXhpc3RpbmdXb3JrbGlzdEZvckluZGV4KGkpLnJlbW92ZURlYWRQbGFucygq
bV92bSk7CisgICAgICAgIERGRzo6ZXhpc3RpbmdXb3JrbGlzdEZvckluZGV4KGkpLnJlbW92ZURl
YWRQbGFucyhtX3ZtKTsKICNlbmRpZgogfQogCiBib29sIEhlYXA6OmlzQW5hbHl6aW5nSGVhcCgp
IGNvbnN0CiB7Ci0gICAgSGVhcFByb2ZpbGVyKiBoZWFwUHJvZmlsZXIgPSBtX3ZtLT5oZWFwUHJv
ZmlsZXIoKTsKKyAgICBIZWFwUHJvZmlsZXIqIGhlYXBQcm9maWxlciA9IG1fdm0uaGVhcFByb2Zp
bGVyKCk7CiAgICAgaWYgKFVOTElLRUxZKGhlYXBQcm9maWxlcikpCiAgICAgICAgIHJldHVybiBo
ZWFwUHJvZmlsZXItPmFjdGl2ZUhlYXBBbmFseXplcigpOwogICAgIHJldHVybiBmYWxzZTsKQEAg
LTc3NSw3ICs3NzUsNyBAQCB2b2lkIEhlYXA6OmdhdGhlckV4dHJhSGVhcERhdGEoSGVhcFByb2Zp
CiB7CiAgICAgaWYgKGF1dG8qIGFuYWx5emVyID0gaGVhcFByb2ZpbGVyLmFjdGl2ZUhlYXBBbmFs
eXplcigpKSB7CiAgICAgICAgIEhlYXBJdGVyYXRpb25TY29wZSBoZWFwSXRlcmF0aW9uU2NvcGUo
KnRoaXMpOwotICAgICAgICBHYXRoZXJFeHRyYUhlYXBEYXRhIGZ1bmN0b3IoKm1fdm0sICphbmFs
eXplcik7CisgICAgICAgIEdhdGhlckV4dHJhSGVhcERhdGEgZnVuY3RvcihtX3ZtLCAqYW5hbHl6
ZXIpOwogICAgICAgICBtX29iamVjdFNwYWNlLmZvckVhY2hMaXZlQ2VsbChoZWFwSXRlcmF0aW9u
U2NvcGUsIGZ1bmN0b3IpOwogICAgIH0KIH0KQEAgLTkwMiw3ICs5MDIsNyBAQCBzdGQ6OnVuaXF1
ZV9wdHI8VHlwZUNvdW50U2V0PiBIZWFwOjpwcm90CiAgICAgc3RkOjp1bmlxdWVfcHRyPFR5cGVD
b3VudFNldD4gcmVzdWx0ID0gbWFrZVVuaXF1ZTxUeXBlQ291bnRTZXQ+KCk7CiAgICAgZm9yRWFj
aFByb3RlY3RlZENlbGwoCiAgICAgICAgIFsmXSAoSlNDZWxsKiBjZWxsKSB7Ci0gICAgICAgICAg
ICByZWNvcmRUeXBlKCp2bSgpLCAqcmVzdWx0LCBjZWxsKTsKKyAgICAgICAgICAgIHJlY29yZFR5
cGUodm0oKSwgKnJlc3VsdCwgY2VsbCk7CiAgICAgICAgIH0pOwogICAgIHJldHVybiByZXN1bHQ7
CiB9CkBAIC05MTUsNyArOTE1LDcgQEAgc3RkOjp1bmlxdWVfcHRyPFR5cGVDb3VudFNldD4gSGVh
cDo6b2JqZQogICAgICAgICBpdGVyYXRpb25TY29wZSwKICAgICAgICAgWyZdIChIZWFwQ2VsbCog
Y2VsbCwgSGVhcENlbGw6OktpbmQga2luZCkgLT4gSXRlcmF0aW9uU3RhdHVzIHsKICAgICAgICAg
ICAgIGlmIChpc0pTQ2VsbEtpbmQoa2luZCkpCi0gICAgICAgICAgICAgICAgcmVjb3JkVHlwZSgq
dm0oKSwgKnJlc3VsdCwgc3RhdGljX2Nhc3Q8SlNDZWxsKj4oY2VsbCkpOworICAgICAgICAgICAg
ICAgIHJlY29yZFR5cGUodm0oKSwgKnJlc3VsdCwgc3RhdGljX2Nhc3Q8SlNDZWxsKj4oY2VsbCkp
OwogICAgICAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6Q29udGludWU7CiAgICAgICAg
IH0pOwogICAgIHJldHVybiByZXN1bHQ7CkBAIC05MjYsNyArOTI2LDcgQEAgdm9pZCBIZWFwOjpk
ZWxldGVBbGxDb2RlQmxvY2tzKERlbGV0ZUFsbAogICAgIGlmIChtX2NvbGxlY3Rpb25TY29wZSAm
JiBlZmZvcnQgPT0gRGVsZXRlQWxsQ29kZUlmTm90Q29sbGVjdGluZykKICAgICAgICAgcmV0dXJu
OwogCi0gICAgVk0mIHZtID0gKm1fdm07CisgICAgVk0mIHZtID0gbV92bTsKICAgICBQcmV2ZW50
Q29sbGVjdGlvblNjb3BlIHByZXZlbnRDb2xsZWN0aW9uU2NvcGUoKnRoaXMpOwogICAgIAogICAg
IC8vIElmIEphdmFTY3JpcHQgaXMgcnVubmluZywgaXQncyBub3Qgc2FmZSB0byBkZWxldGUgYWxs
IEphdmFTY3JpcHQgY29kZSwgc2luY2UKQEAgLTk3MSw3ICs5NzEsNyBAQCB2b2lkIEhlYXA6OmRl
bGV0ZUFsbFVubGlua2VkQ29kZUJsb2NrcyhECiAgICAgaWYgKG1fY29sbGVjdGlvblNjb3BlICYm
IGVmZm9ydCA9PSBEZWxldGVBbGxDb2RlSWZOb3RDb2xsZWN0aW5nKQogICAgICAgICByZXR1cm47
CiAKLSAgICBWTSYgdm0gPSAqbV92bTsKKyAgICBWTSYgdm0gPSBtX3ZtOwogICAgIFByZXZlbnRD
b2xsZWN0aW9uU2NvcGUgcHJldmVudENvbGxlY3Rpb25TY29wZSgqdGhpcyk7CiAKICAgICBSRUxF
QVNFX0FTU0VSVCghbV9jb2xsZWN0aW9uU2NvcGUpOwpAQCAtOTg2LDggKzk4Niw4IEBAIHZvaWQg
SGVhcDo6ZGVsZXRlQWxsVW5saW5rZWRDb2RlQmxvY2tzKEQKIAogdm9pZCBIZWFwOjpkZWxldGVV
bm1hcmtlZENvbXBpbGVkQ29kZSgpCiB7Ci0gICAgdm0oKS0+Zm9yRWFjaFNjcmlwdEV4ZWN1dGFi
bGVTcGFjZShbXSAoYXV0byYgc3BhY2UpIHsgc3BhY2Uuc3BhY2Uuc3dlZXAoKTsgfSk7Ci0gICAg
dm0oKS0+Zm9yRWFjaENvZGVCbG9ja1NwYWNlKFtdIChhdXRvJiBzcGFjZSkgeyBzcGFjZS5zcGFj
ZS5zd2VlcCgpOyB9KTsgLy8gU3dlZXBpbmcgbXVzdCBvY2N1ciBiZWZvcmUgZGVsZXRpbmcgc3R1
YnMsIG90aGVyd2lzZSB0aGUgc3R1YnMgbWlnaHQgc3RpbGwgdGhpbmsgdGhleSdyZSBhbGl2ZSBh
cyB0aGV5IGdldCBkZWxldGVkLgorICAgIHZtKCkuZm9yRWFjaFNjcmlwdEV4ZWN1dGFibGVTcGFj
ZShbXSAoYXV0byYgc3BhY2UpIHsgc3BhY2Uuc3BhY2Uuc3dlZXAoKTsgfSk7CisgICAgdm0oKS5m
b3JFYWNoQ29kZUJsb2NrU3BhY2UoW10gKGF1dG8mIHNwYWNlKSB7IHNwYWNlLnNwYWNlLnN3ZWVw
KCk7IH0pOyAvLyBTd2VlcGluZyBtdXN0IG9jY3VyIGJlZm9yZSBkZWxldGluZyBzdHVicywgb3Ro
ZXJ3aXNlIHRoZSBzdHVicyBtaWdodCBzdGlsbCB0aGluayB0aGV5J3JlIGFsaXZlIGFzIHRoZXkg
Z2V0IGRlbGV0ZWQuCiAgICAgbV9qaXRTdHViUm91dGluZXMtPmRlbGV0ZVVubWFya2VkSmV0dGlz
b25lZFN0dWJSb3V0aW5lcygpOwogfQogCkBAIC0xMTgxLDEwICsxMTgxLDEwIEBAIHZvaWQgSGVh
cDo6Y2hlY2tDb25uKEdDQ29uZHVjdG9yIGNvbm4pCiAgICAgdW5zaWduZWQgd29ybGRTdGF0ZSA9
IG1fd29ybGRTdGF0ZS5sb2FkKCk7CiAgICAgc3dpdGNoIChjb25uKSB7CiAgICAgY2FzZSBHQ0Nv
bmR1Y3Rvcjo6TXV0YXRvcjoKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQod29ybGRTdGF0ZSAmIG11
dGF0b3JIYXNDb25uQml0LCB3b3JsZFN0YXRlLCBhc0ludChtX2xhc3RQaGFzZSksIGFzSW50KG1f
Y3VycmVudFBoYXNlKSwgYXNJbnQobV9uZXh0UGhhc2UpLCB2bSgpLT5pZCgpLCBWTTo6bnVtYmVy
T2ZJRHMoKSwgdm0oKS0+aXNFbnRlcmVkKCkpOworICAgICAgICBSRUxFQVNFX0FTU0VSVCh3b3Js
ZFN0YXRlICYgbXV0YXRvckhhc0Nvbm5CaXQsIHdvcmxkU3RhdGUsIGFzSW50KG1fbGFzdFBoYXNl
KSwgYXNJbnQobV9jdXJyZW50UGhhc2UpLCBhc0ludChtX25leHRQaGFzZSksIHZtKCkuaWQoKSwg
Vk06Om51bWJlck9mSURzKCksIHZtKCkuaXNFbnRlcmVkKCkpOwogICAgICAgICByZXR1cm47CiAg
ICAgY2FzZSBHQ0NvbmR1Y3Rvcjo6Q29sbGVjdG9yOgotICAgICAgICBSRUxFQVNFX0FTU0VSVCgh
KHdvcmxkU3RhdGUgJiBtdXRhdG9ySGFzQ29ubkJpdCksIHdvcmxkU3RhdGUsIGFzSW50KG1fbGFz
dFBoYXNlKSwgYXNJbnQobV9jdXJyZW50UGhhc2UpLCBhc0ludChtX25leHRQaGFzZSksIHZtKCkt
PmlkKCksIFZNOjpudW1iZXJPZklEcygpLCB2bSgpLT5pc0VudGVyZWQoKSk7CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUKCEod29ybGRTdGF0ZSAmIG11dGF0b3JIYXNDb25uQml0KSwgd29ybGRTdGF0
ZSwgYXNJbnQobV9sYXN0UGhhc2UpLCBhc0ludChtX2N1cnJlbnRQaGFzZSksIGFzSW50KG1fbmV4
dFBoYXNlKSwgdm0oKS5pZCgpLCBWTTo6bnVtYmVyT2ZJRHMoKSwgdm0oKS5pc0VudGVyZWQoKSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKQEAgLTE1MDgsOCArMTUwOCw4IEBAIE5FVkVSX0lOTElORSBib29sIEhlYXA6OnJ1bkVuZFBo
YXNlKEdDQ28KICAgICAgICAgbV92ZXJpZmllci0+dmVyaWZ5KEhlYXBWZXJpZmllcjo6UGhhc2U6
OkFmdGVyTWFya2luZyk7CiAgICAgfQogICAgICAgICAKLSAgICBpZiAodm0oKS0+dHlwZVByb2Zp
bGVyKCkpCi0gICAgICAgIHZtKCktPnR5cGVQcm9maWxlcigpLT5pbnZhbGlkYXRlVHlwZVNldENh
Y2hlKCp2bSgpKTsKKyAgICBpZiAodm0oKS50eXBlUHJvZmlsZXIoKSkKKyAgICAgICAgdm0oKS50
eXBlUHJvZmlsZXIoKS0+aW52YWxpZGF0ZVR5cGVTZXRDYWNoZSh2bSgpKTsKIAogICAgIHJlYXBX
ZWFrSGFuZGxlcygpOwogICAgIHBydW5lU3RhbGVFbnRyaWVzRnJvbVdlYWtHQ01hcHMoKTsKQEAg
LTE2NDgsMTUgKzE2NDgsMTUgQEAgdm9pZCBIZWFwOjpzdG9wVGhlUGVyaXBoZXJ5KEdDQ29uZHVj
dG9yIAogI2lmIEVOQUJMRShKSVQpCiAgICAgaWYgKFZNOjpjYW5Vc2VKSVQoKSkgewogICAgICAg
ICBEZWZlckdDRm9yQVdoaWxlIGF3aGlsZSgqdGhpcyk7Ci0gICAgICAgIGlmIChKSVRXb3JrbGlz
dDo6ZW5zdXJlR2xvYmFsV29ya2xpc3QoKS5jb21wbGV0ZUFsbEZvclZNKCptX3ZtKQorICAgICAg
ICBpZiAoSklUV29ya2xpc3Q6OmVuc3VyZUdsb2JhbFdvcmtsaXN0KCkuY29tcGxldGVBbGxGb3JW
TShtX3ZtKQogICAgICAgICAgICAgJiYgY29ubiA9PSBHQ0NvbmR1Y3Rvcjo6Q29sbGVjdG9yKQog
ICAgICAgICAgICAgc2V0R0NEaWRKSVQoKTsKICAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkK
ICAgICBVTlVTRURfUEFSQU0oY29ubik7CiAgICAgCi0gICAgaWYgKGF1dG8qIHNoYWRvd0NoaWNr
ZW4gPSB2bSgpLT5zaGFkb3dDaGlja2VuKCkpCi0gICAgICAgIHNoYWRvd0NoaWNrZW4tPnVwZGF0
ZSgqdm0oKSwgdm0oKS0+dG9wQ2FsbEZyYW1lKTsKKyAgICBpZiAoYXV0byogc2hhZG93Q2hpY2tl
biA9IHZtKCkuc2hhZG93Q2hpY2tlbigpKQorICAgICAgICBzaGFkb3dDaGlja2VuLT51cGRhdGUo
dm0oKSwgdm0oKS50b3BDYWxsRnJhbWUpOwogICAgIAogICAgIG1fc3RydWN0dXJlSURUYWJsZS5m
bHVzaE9sZFRhYmxlcygpOwogICAgIG1fb2JqZWN0U3BhY2Uuc3RvcEFsbG9jYXRpbmcoKTsKQEAg
LTIwOTcsMTMgKzIwOTcsMTMgQEAgdm9pZCBIZWFwOjpmaW5hbGl6ZSgpCiAgICAgICAgIHN3ZWVw
SW5GaW5hbGl6ZSgpOwogICAgIH0KICAgICAKLSAgICBpZiAoSGFzT3duUHJvcGVydHlDYWNoZSog
Y2FjaGUgPSB2bSgpLT5oYXNPd25Qcm9wZXJ0eUNhY2hlKCkpCisgICAgaWYgKEhhc093blByb3Bl
cnR5Q2FjaGUqIGNhY2hlID0gdm0oKS5oYXNPd25Qcm9wZXJ0eUNhY2hlKCkpCiAgICAgICAgIGNh
Y2hlLT5jbGVhcigpOwogCiAgICAgaW1tdXRhYmxlQnV0dGVyZmx5VG9TdHJpbmdDYWNoZS5jbGVh
cigpOwogICAgIAogICAgIGZvciAoY29uc3QgSGVhcEZpbmFsaXplckNhbGxiYWNrJiBjYWxsYmFj
ayA6IG1faGVhcEZpbmFsaXplckNhbGxiYWNrcykKLSAgICAgICAgY2FsbGJhY2sucnVuKCp2bSgp
KTsKKyAgICAgICAgY2FsbGJhY2sucnVuKHZtKCkpOwogICAgIAogICAgIGlmIChzaG91bGRTd2Vl
cFN5bmNocm9ub3VzbHkoKSkKICAgICAgICAgc3dlZXBTeW5jaHJvbm91c2x5KCk7CkBAIC0yMTE4
LDggKzIxMTgsOCBAQCBIZWFwOjpUaWNrZXQgSGVhcDo6cmVxdWVzdENvbGxlY3Rpb24oR0NSCiB7
CiAgICAgc3RvcElmTmVjZXNzYXJ5KCk7CiAgICAgCi0gICAgQVNTRVJUKHZtKCktPmN1cnJlbnRU
aHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOwotICAgIFJFTEVBU0VfQVNTRVJUKHZtKCktPmF0b21T
dHJpbmdUYWJsZSgpID09IFRocmVhZDo6Y3VycmVudCgpLmF0b21TdHJpbmdUYWJsZSgpKTsKKyAg
ICBBU1NFUlQodm0oKS5jdXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsKKyAgICBSRUxF
QVNFX0FTU0VSVCh2bSgpLmF0b21TdHJpbmdUYWJsZSgpID09IFRocmVhZDo6Y3VycmVudCgpLmF0
b21TdHJpbmdUYWJsZSgpKTsKICAgICAKICAgICBMb2NrSG9sZGVyIGxvY2tlcigqbV90aHJlYWRM
b2NrKTsKICAgICAvLyBXZSBtYXkgYmUgYWJsZSB0byBzdGVhbCB0aGUgY29ubi4gVGhhdCBvbmx5
IHdvcmtzIGlmIHRoZSBjb2xsZWN0b3IgaXMgZGVmaW5pdGVseSBub3QgcnVubmluZwpAQCAtMjE1
MCw3ICsyMTUwLDcgQEAgdm9pZCBIZWFwOjp3YWl0Rm9yQ29sbGVjdGlvbihUaWNrZXQgdGljawog
dm9pZCBIZWFwOjpzd2VlcEluRmluYWxpemUoKQogewogICAgIG1fb2JqZWN0U3BhY2Uuc3dlZXBM
YXJnZUFsbG9jYXRpb25zKCk7Ci0gICAgdm0oKS0+ZWFnZXJseVN3ZXB0RGVzdHJ1Y3RpYmxlT2Jq
ZWN0U3BhY2Uuc3dlZXAoKTsKKyAgICB2bSgpLmVhZ2VybHlTd2VwdERlc3RydWN0aWJsZU9iamVj
dFNwYWNlLnN3ZWVwKCk7CiB9CiAKIHZvaWQgSGVhcDo6c3VzcGVuZENvbXBpbGVyVGhyZWFkcygp
CkBAIC0yMjI3LDcgKzIyMjcsNyBAQCB2b2lkIEhlYXA6OnBydW5lU3RhbGVFbnRyaWVzRnJvbVdl
YWtHQ01hCiAKIHZvaWQgSGVhcDo6c3dlZXBBcnJheUJ1ZmZlcnMoKQogewotICAgIG1fYXJyYXlC
dWZmZXJzLnN3ZWVwKCp2bSgpKTsKKyAgICBtX2FycmF5QnVmZmVycy5zd2VlcCh2bSgpKTsKIH0K
IAogdm9pZCBIZWFwOjpzbmFwc2hvdFVuc3dlcHQoKQpAQCAtMjIzOSw3ICsyMjM5LDcgQEAgdm9p
ZCBIZWFwOjpzbmFwc2hvdFVuc3dlcHQoKQogdm9pZCBIZWFwOjpkZWxldGVTb3VyY2VQcm92aWRl
ckNhY2hlcygpCiB7CiAgICAgaWYgKG1fbGFzdENvbGxlY3Rpb25TY29wZSAmJiBtX2xhc3RDb2xs
ZWN0aW9uU2NvcGUudmFsdWUoKSA9PSBDb2xsZWN0aW9uU2NvcGU6OkZ1bGwpCi0gICAgICAgIG1f
dm0tPmNsZWFyU291cmNlUHJvdmlkZXJDYWNoZXMoKTsKKyAgICAgICAgbV92bS5jbGVhclNvdXJj
ZVByb3ZpZGVyQ2FjaGVzKCk7CiB9CiAKIHZvaWQgSGVhcDo6bm90aWZ5SW5jcmVtZW50YWxTd2Vl
cGVyKCkKQEAgLTIzNTksNyArMjM1OSw3IEBAIHZvaWQgSGVhcDo6ZGlkRmluaXNoQ29sbGVjdGlv
bigpCiAgICAgQVNTRVJUKGV4dGVybmFsTWVtb3J5U2l6ZSgpIDw9IGV4dHJhTWVtb3J5U2l6ZSgp
KTsKICNlbmRpZgogCi0gICAgaWYgKEhlYXBQcm9maWxlciogaGVhcFByb2ZpbGVyID0gbV92bS0+
aGVhcFByb2ZpbGVyKCkpIHsKKyAgICBpZiAoSGVhcFByb2ZpbGVyKiBoZWFwUHJvZmlsZXIgPSBt
X3ZtLmhlYXBQcm9maWxlcigpKSB7CiAgICAgICAgIGdhdGhlckV4dHJhSGVhcERhdGEoKmhlYXBQ
cm9maWxlcik7CiAgICAgICAgIHJlbW92ZURlYWRIZWFwU25hcHNob3ROb2RlcygqaGVhcFByb2Zp
bGVyKTsKICAgICB9CkBAIC0yNzI5LDExICsyNzI5LDExIEBAIHZvaWQgSGVhcDo6YWRkQ29yZUNv
bnN0cmFpbnRzKCkKICAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpIHsK
IAogI2lmIEpTQ19PQkpDX0FQSV9FTkFCTEVECi0gICAgICAgICAgICBzY2FuRXh0ZXJuYWxSZW1l
bWJlcmVkU2V0KCptX3ZtLCBzbG90VmlzaXRvcik7CisgICAgICAgICAgICBzY2FuRXh0ZXJuYWxS
ZW1lbWJlcmVkU2V0KG1fdm0sIHNsb3RWaXNpdG9yKTsKICNlbmRpZgotICAgICAgICAgICAgaWYg
KG1fdm0tPnNtYWxsU3RyaW5ncy5uZWVkc1RvQmVWaXNpdGVkKCptX2NvbGxlY3Rpb25TY29wZSkp
IHsKKyAgICAgICAgICAgIGlmIChtX3ZtLnNtYWxsU3RyaW5ncy5uZWVkc1RvQmVWaXNpdGVkKCpt
X2NvbGxlY3Rpb25TY29wZSkpIHsKICAgICAgICAgICAgICAgICBTZXRSb290TWFya1JlYXNvblNj
b3BlIHJvb3RTY29wZShzbG90VmlzaXRvciwgU2xvdFZpc2l0b3I6OlJvb3RNYXJrUmVhc29uOjpT
dHJvbmdSZWZlcmVuY2VzKTsKLSAgICAgICAgICAgICAgICBtX3ZtLT5zbWFsbFN0cmluZ3Mudmlz
aXRTdHJvbmdSZWZlcmVuY2VzKHNsb3RWaXNpdG9yKTsKKyAgICAgICAgICAgICAgICBtX3ZtLnNt
YWxsU3RyaW5ncy52aXNpdFN0cm9uZ1JlZmVyZW5jZXMoc2xvdFZpc2l0b3IpOwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICB7CkBAIC0yNzQ5LDggKzI3NDksOCBAQCB2
b2lkIEhlYXA6OmFkZENvcmVDb25zdHJhaW50cygpCiAKICAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgICBTZXRSb290TWFya1JlYXNvblNjb3BlIHJvb3RTY29wZShzbG90VmlzaXRvciwgU2xv
dFZpc2l0b3I6OlJvb3RNYXJrUmVhc29uOjpWTUV4Y2VwdGlvbnMpOwotICAgICAgICAgICAgICAg
IHNsb3RWaXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKG1fdm0tPmV4Y2VwdGlvbigpKTsKLSAgICAg
ICAgICAgICAgICBzbG90VmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChtX3ZtLT5sYXN0RXhjZXB0
aW9uKCkpOworICAgICAgICAgICAgICAgIHNsb3RWaXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKG1f
dm0uZXhjZXB0aW9uKCkpOworICAgICAgICAgICAgICAgIHNsb3RWaXNpdG9yLmFwcGVuZFVuYmFy
cmllcmVkKG1fdm0ubGFzdEV4Y2VwdGlvbigpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSwK
ICAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5RXhlY3V0aW9uKTsKQEAgLTI3
NjksNyArMjc2OSw3IEBAIHZvaWQgSGVhcDo6YWRkQ29yZUNvbnN0cmFpbnRzKCkKICAgICAgICAg
ICAgIFNldFJvb3RNYXJrUmVhc29uU2NvcGUgcm9vdFNjb3BlKHNsb3RWaXNpdG9yLCBTbG90Vmlz
aXRvcjo6Um9vdE1hcmtSZWFzb246OkRlYnVnZ2VyKTsKIAogI2lmIEVOQUJMRShTQU1QTElOR19Q
Uk9GSUxFUikKLSAgICAgICAgICAgIGlmIChTYW1wbGluZ1Byb2ZpbGVyKiBzYW1wbGluZ1Byb2Zp
bGVyID0gbV92bS0+c2FtcGxpbmdQcm9maWxlcigpKSB7CisgICAgICAgICAgICBpZiAoU2FtcGxp
bmdQcm9maWxlciogc2FtcGxpbmdQcm9maWxlciA9IG1fdm0uc2FtcGxpbmdQcm9maWxlcigpKSB7
CiAgICAgICAgICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIoc2FtcGxpbmdQcm9maWxlci0+Z2V0
TG9jaygpKTsKICAgICAgICAgICAgICAgICBzYW1wbGluZ1Byb2ZpbGVyLT5wcm9jZXNzVW52ZXJp
ZmllZFN0YWNrVHJhY2VzKCk7CiAgICAgICAgICAgICAgICAgc2FtcGxpbmdQcm9maWxlci0+dmlz
aXQoc2xvdFZpc2l0b3IpOwpAQCAtMjc3OCwxMCArMjc3OCwxMCBAQCB2b2lkIEhlYXA6OmFkZENv
cmVDb25zdHJhaW50cygpCiAgICAgICAgICAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKFNBTVBMSU5H
X1BST0ZJTEVSKQogCi0gICAgICAgICAgICBpZiAobV92bS0+dHlwZVByb2ZpbGVyKCkpCi0gICAg
ICAgICAgICAgICAgbV92bS0+dHlwZVByb2ZpbGVyTG9nKCktPnZpc2l0KHNsb3RWaXNpdG9yKTsK
KyAgICAgICAgICAgIGlmIChtX3ZtLnR5cGVQcm9maWxlcigpKQorICAgICAgICAgICAgICAgIG1f
dm0udHlwZVByb2ZpbGVyTG9nKCktPnZpc2l0KHNsb3RWaXNpdG9yKTsKICAgICAgICAgICAgIAot
ICAgICAgICAgICAgaWYgKGF1dG8qIHNoYWRvd0NoaWNrZW4gPSBtX3ZtLT5zaGFkb3dDaGlja2Vu
KCkpCisgICAgICAgICAgICBpZiAoYXV0byogc2hhZG93Q2hpY2tlbiA9IG1fdm0uc2hhZG93Q2hp
Y2tlbigpKQogICAgICAgICAgICAgICAgIHNoYWRvd0NoaWNrZW4tPnZpc2l0Q2hpbGRyZW4oc2xv
dFZpc2l0b3IpOwogICAgICAgICB9LAogICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3Jl
eWVkQnlFeGVjdXRpb24pOwpAQCAtMjgzMCw3ICsyODMwLDcgQEAgdm9pZCBIZWFwOjphZGRDb3Jl
Q29uc3RyYWludHMoKQogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIGlzIGFsbW9zdCBj
ZXJ0YWlubHkgdW5uZWNlc3NhcnkuCiAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NjgyOQogICAgICAgICAgICAgICAgIERGRzo6aXRl
cmF0ZUNvZGVCbG9ja3NGb3JHQygKLSAgICAgICAgICAgICAgICAgICAgKm1fdm0sCisgICAgICAg
ICAgICAgICAgICAgIG1fdm0sCiAgICAgICAgICAgICAgICAgICAgIFsmXSAoQ29kZUJsb2NrKiBj
b2RlQmxvY2spIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHNsb3RWaXNpdG9yLmFwcGVuZFVu
YmFycmllcmVkKGNvZGVCbG9jayk7CiAgICAgICAgICAgICAgICAgICAgIH0pOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzksMTIgKzEzOSwxMiBA
QCBwdWJsaWM6CiAgICAgLy8gVGFrZSB0aGlzIGlmIHlvdSBrbm93IHRoYXQgZnJvbS0+Y2VsbFN0
YXRlKCkgPCBiYXJyaWVyVGhyZXNob2xkLgogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgd3Jp
dGVCYXJyaWVyU2xvd1BhdGgoY29uc3QgSlNDZWxsKiBmcm9tKTsKIAotICAgIEhlYXAoVk0qLCBI
ZWFwVHlwZSk7CisgICAgSGVhcChWTSYsIEhlYXBUeXBlKTsKICAgICB+SGVhcCgpOwogICAgIHZv
aWQgbGFzdENoYW5jZVRvRmluYWxpemUoKTsKICAgICB2b2lkIHJlbGVhc2VEZWxheWVkUmVsZWFz
ZWRPYmplY3RzKCk7CiAKLSAgICBWTSogdm0oKSBjb25zdDsKKyAgICBWTSYgdm0oKSBjb25zdDsK
IAogICAgIE1hcmtlZFNwYWNlJiBvYmplY3RTcGFjZSgpIHsgcmV0dXJuIG1fb2JqZWN0U3BhY2U7
IH0KICAgICBNYWNoaW5lVGhyZWFkcyYgbWFjaGluZVRocmVhZHMoKSB7IHJldHVybiAqbV9tYWNo
aW5lVGhyZWFkczsgfQpAQCAtNjQyLDcgKzY0Miw3IEBAIHByaXZhdGU6CiAKICAgICB1bnNpZ25l
ZCBtX2JhcnJpZXJUaHJlc2hvbGQgeyBPcHRpb25zOjpmb3JjZUZlbmNlZEJhcnJpZXIoKSA/IHRh
dXRvbG9naWNhbFRocmVzaG9sZCA6IGJsYWNrVGhyZXNob2xkIH07CiAKLSAgICBWTSogbV92bTsK
KyAgICBWTSYgbV92bTsKICAgICBTZWNvbmRzIG1fbGFzdEZ1bGxHQ0xlbmd0aCB7IDEwX21zIH07
CiAgICAgU2Vjb25kcyBtX2xhc3RFZGVuR0NMZW5ndGggeyAxMF9tcyB9OwogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwQ2VsbC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBDZWxsLmgJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBDZWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTczLDcg
KzczLDcgQEAgcHVibGljOgogICAgIC8vIHJlY29tbWVuZGVkIHRvIHVzZSBpdCBmb3IgdG9vIG1h
bnkgb3RoZXIgdGhpbmdzLCBzaW5jZSB0aGUgbGFyZ2UgYWxsb2NhdGlvbiBjdXRvZmYgaXMKICAg
ICAvLyBhIHJ1bnRpbWUgb3B0aW9uIGFuZCBpdHMgZGVmYXVsdCB2YWx1ZSBpcyBzbWFsbCAoNDAw
IGJ5dGVzKS4KICAgICBIZWFwKiBoZWFwKCkgY29uc3Q7Ci0gICAgVk0qIHZtKCkgY29uc3Q7Cisg
ICAgVk0mIHZtKCkgY29uc3Q7CiAgICAgCiAgICAgc2l6ZV90IGNlbGxTaXplKCkgY29uc3Q7CiAg
ICAgQ2VsbEF0dHJpYnV0ZXMgY2VsbEF0dHJpYnV0ZXMoKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBDZWxsSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBDZWxsSW5saW5lcy5oCShyZXZpc2lvbiAyNDkxMjgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwQ2VsbElubGluZXMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAx
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTU2LDEwICs1NiwxMCBAQCBBTFdBWVNfSU5MSU5FIExhcmdlQWxsb2NhdGlv
biYgSGVhcENlbGw6CiAKIEFMV0FZU19JTkxJTkUgSGVhcCogSGVhcENlbGw6OmhlYXAoKSBjb25z
dAogewotICAgIHJldHVybiAmdm0oKS0+aGVhcDsKKyAgICByZXR1cm4gJnZtKCkuaGVhcDsKIH0K
IAotQUxXQVlTX0lOTElORSBWTSogSGVhcENlbGw6OnZtKCkgY29uc3QKK0FMV0FZU19JTkxJTkUg
Vk0mIEhlYXBDZWxsOjp2bSgpIGNvbnN0CiB7CiAgICAgaWYgKGlzTGFyZ2VBbGxvY2F0aW9uKCkp
CiAgICAgICAgIHJldHVybiBsYXJnZUFsbG9jYXRpb24oKS52bSgpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5lcy5oCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE5IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MzgsOSArMzgsOSBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotQUxXQVlTX0lOTElORSBWTSogSGVh
cDo6dm0oKSBjb25zdAorQUxXQVlTX0lOTElORSBWTSYgSGVhcDo6dm0oKSBjb25zdAogewotICAg
IHJldHVybiBiaXR3aXNlX2Nhc3Q8Vk0qPihiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pih0aGlzKSAt
IE9CSkVDVF9PRkZTRVRPRihWTSwgaGVhcCkpOworICAgIHJldHVybiAqYml0d2lzZV9jYXN0PFZN
Kj4oYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4odGhpcykgLSBPQkpFQ1RfT0ZGU0VUT0YoVk0sIGhl
YXApKTsKIH0KIAogQUxXQVlTX0lOTElORSBIZWFwKiBIZWFwOjpoZWFwKGNvbnN0IEhlYXBDZWxs
KiBjZWxsKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvU3Vic3BhY2VQZXJW
TS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvU3Vic3Bh
Y2VQZXJWTS5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0lzb1N1YnNwYWNlUGVyVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQxLDcgKzQxLDcgQEAgcHVi
bGljOgogICAgIH5BdXRvcmVtb3ZpbmdJc29TdWJzcGFjZSgpCiAgICAgewogICAgICAgICBhdXRv
IGxvY2tlciA9IGhvbGRMb2NrKG1fcGVyVk0ubV9sb2NrKTsKLSAgICAgICAgbV9wZXJWTS5tX3N1
YnNwYWNlUGVyVk0ucmVtb3ZlKHNwYWNlKCkuaGVhcCgpLT52bSgpKTsKKyAgICAgICAgbV9wZXJW
TS5tX3N1YnNwYWNlUGVyVk0ucmVtb3ZlKCZzcGFjZSgpLmhlYXAoKS0+dm0oKSk7CiAgICAgfQog
CiBwcml2YXRlOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTGFyZ2VBbGxvY2F0
aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9MYXJnZUFs
bG9jYXRpb24uY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9MYXJnZUFsbG9jYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTc3LDcgKzE3Nyw3
IEBAIHZvaWQgTGFyZ2VBbGxvY2F0aW9uOjpzd2VlcCgpCiAgICAgCiAgICAgaWYgKG1faGFzVmFs
aWRDZWxsICYmICFpc0xpdmUoKSkgewogICAgICAgICBpZiAobV9hdHRyaWJ1dGVzLmRlc3RydWN0
aW9uID09IE5lZWRzRGVzdHJ1Y3Rpb24pCi0gICAgICAgICAgICBtX3N1YnNwYWNlLT5kZXN0cm95
KCp2bSgpLCBzdGF0aWNfY2FzdDxKU0NlbGwqPihjZWxsKCkpKTsKKyAgICAgICAgICAgIG1fc3Vi
c3BhY2UtPmRlc3Ryb3kodm0oKSwgc3RhdGljX2Nhc3Q8SlNDZWxsKj4oY2VsbCgpKSk7CiAgICAg
ICAgIG1faGFzVmFsaWRDZWxsID0gZmFsc2U7CiAgICAgfQogfQpAQCAtMTk4LDcgKzE5OCw3IEBA
IHZvaWQgTGFyZ2VBbGxvY2F0aW9uOjpkdW1wKFByaW50U3RyZWFtJiAKICNpZiAhQVNTRVJUX0RJ
U0FCTEVECiB2b2lkIExhcmdlQWxsb2NhdGlvbjo6YXNzZXJ0VmFsaWRDZWxsKFZNJiB2bSwgSGVh
cENlbGwqIGNlbGwpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKCZ2bSA9PSB0aGlzLT52bSgpKTsKKyAg
ICBBU1NFUlQoJnZtID09ICZ0aGlzLT52bSgpKTsKICAgICBBU1NFUlQoY2VsbCA9PSB0aGlzLT5j
ZWxsKCkpOwogICAgIEFTU0VSVChtX2hhc1ZhbGlkQ2VsbCk7CiB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9MYXJnZUFsbG9jYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9MYXJnZUFsbG9jYXRpb24uaAkocmV2aXNpb24gMjQ5MTI4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTGFyZ2VBbGxvY2F0aW9uLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC02NSw3ICs2NSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGxhc3RDaGFuY2VUb0Zp
bmFsaXplKCk7CiAgICAgCiAgICAgSGVhcCogaGVhcCgpIGNvbnN0IHsgcmV0dXJuIG1fd2Vha1Nl
dC5oZWFwKCk7IH0KLSAgICBWTSogdm0oKSBjb25zdCB7IHJldHVybiBtX3dlYWtTZXQudm0oKTsg
fQorICAgIFZNJiB2bSgpIGNvbnN0IHsgcmV0dXJuIG1fd2Vha1NldC52bSgpOyB9CiAgICAgV2Vh
a1NldCYgd2Vha1NldCgpIHsgcmV0dXJuIG1fd2Vha1NldDsgfQogCiAgICAgdW5zaWduZWQgaW5k
ZXhJblNwYWNlKCkgeyByZXR1cm4gbV9pbmRleEluU3BhY2U7IH0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0xvY2FsQWxsb2NhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9Mb2NhbEFsbG9jYXRvci5jcHAJKHJldmlzaW9uIDI0OTEyOCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xvY2FsQWxsb2NhdG9yLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTE0LDcgKzExNCw3IEBAIHZvaWQqIExvY2FsQWxsb2NhdG9yOjphbGxvY2F0
ZVNsb3dDYXNlKEcKIHsKICAgICBTdXBlclNhbXBsZXJTY29wZSBzdXBlclNhbXBsZXJTY29wZShm
YWxzZSk7CiAgICAgSGVhcCYgaGVhcCA9ICptX2RpcmVjdG9yeS0+bV9oZWFwOwotICAgIEFTU0VS
VChoZWFwLnZtKCktPmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOworICAgIEFTU0VS
VChoZWFwLnZtKCkuY3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7CiAgICAgZG9UZXN0
Q29sbGVjdGlvbnNJZk5lZWRlZChkZWZlcnJhbENvbnRleHQpOwogCiAgICAgQVNTRVJUKCFtX2Rp
cmVjdG9yeS0+bWFya2VkU3BhY2UoKS5pc0l0ZXJhdGluZygpKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjYsNyArNjYsNyBAQCBNYXJrZWRCbG9jazo6SGFuZGxlOjpIYW5kbGUoSGVhcCYgaGVhcCwg
CiAgICAgOiBtX2FsaWduZWRNZW1vcnlBbGxvY2F0b3IoYWxpZ25lZE1lbW9yeUFsbG9jYXRvcikK
ICAgICAsIG1fd2Vha1NldChoZWFwLnZtKCksIENlbGxDb250YWluZXIoKSkKIHsKLSAgICBtX2Js
b2NrID0gbmV3IChOb3ROdWxsLCBibG9ja1NwYWNlKSBNYXJrZWRCbG9jaygqaGVhcC52bSgpLCAq
dGhpcyk7CisgICAgbV9ibG9jayA9IG5ldyAoTm90TnVsbCwgYmxvY2tTcGFjZSkgTWFya2VkQmxv
Y2soaGVhcC52bSgpLCAqdGhpcyk7CiAgICAgCiAgICAgbV93ZWFrU2V0LnNldENvbnRhaW5lcigq
bV9ibG9jayk7CiAgICAgCkBAIC0yMDcsNyArMjA3LDcgQEAgdm9pZCBNYXJrZWRCbG9jazo6SGFu
ZGxlOjpyZXN1bWVBbGxvY2F0aQogCiB2b2lkIE1hcmtlZEJsb2NrOjphYm91dFRvTWFya1Nsb3co
SGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24pCiB7Ci0gICAgQVNTRVJUKHZtKCktPmhlYXAub2Jq
ZWN0U3BhY2UoKS5pc01hcmtpbmcoKSk7CisgICAgQVNTRVJUKHZtKCkuaGVhcC5vYmplY3RTcGFj
ZSgpLmlzTWFya2luZygpKTsKICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKGZvb3RlcigpLm1f
bG9jayk7CiAgICAgCiAgICAgaWYgKCFhcmVNYXJrc1N0YWxlKG1hcmtpbmdWZXJzaW9uKSkKQEAg
LTI3NSwxMyArMjc1LDEzIEBAIHZvaWQgTWFya2VkQmxvY2s6OnJlc2V0TWFya3MoKQogI2lmICFB
U1NFUlRfRElTQUJMRUQKIHZvaWQgTWFya2VkQmxvY2s6OmFzc2VydE1hcmtzTm90U3RhbGUoKQog
ewotICAgIEFTU0VSVChmb290ZXIoKS5tX21hcmtpbmdWZXJzaW9uID09IHZtKCktPmhlYXAub2Jq
ZWN0U3BhY2UoKS5tYXJraW5nVmVyc2lvbigpKTsKKyAgICBBU1NFUlQoZm9vdGVyKCkubV9tYXJr
aW5nVmVyc2lvbiA9PSB2bSgpLmhlYXAub2JqZWN0U3BhY2UoKS5tYXJraW5nVmVyc2lvbigpKTsK
IH0KICNlbmRpZiAvLyAhQVNTRVJUX0RJU0FCTEVECiAKIGJvb2wgTWFya2VkQmxvY2s6OmFyZU1h
cmtzU3RhbGUoKQogewotICAgIHJldHVybiBhcmVNYXJrc1N0YWxlKHZtKCktPmhlYXAub2JqZWN0
U3BhY2UoKS5tYXJraW5nVmVyc2lvbigpKTsKKyAgICByZXR1cm4gYXJlTWFya3NTdGFsZSh2bSgp
LmhlYXAub2JqZWN0U3BhY2UoKS5tYXJraW5nVmVyc2lvbigpKTsKIH0KIAogYm9vbCBNYXJrZWRC
bG9jazo6SGFuZGxlOjphcmVNYXJrc1N0YWxlKCkKQEAgLTI5MSw3ICsyOTEsNyBAQCBib29sIE1h
cmtlZEJsb2NrOjpIYW5kbGU6OmFyZU1hcmtzU3RhbGUoCiAKIGJvb2wgTWFya2VkQmxvY2s6Omlz
TWFya2VkKGNvbnN0IHZvaWQqIHApCiB7Ci0gICAgcmV0dXJuIGlzTWFya2VkKHZtKCktPmhlYXAu
b2JqZWN0U3BhY2UoKS5tYXJraW5nVmVyc2lvbigpLCBwKTsKKyAgICByZXR1cm4gaXNNYXJrZWQo
dm0oKS5oZWFwLm9iamVjdFNwYWNlKCkubWFya2luZ1ZlcnNpb24oKSwgcCk7CiB9CiAKIHZvaWQg
TWFya2VkQmxvY2s6OkhhbmRsZTo6ZGlkQ29uc3VtZUZyZWVMaXN0KCkKQEAgLTM3MSw3ICszNzEs
NyBAQCB2b2lkIE1hcmtlZEJsb2NrOjpIYW5kbGU6OmRpZFJlbW92ZUZyb21ECiAjaWYgIUFTU0VS
VF9ESVNBQkxFRAogdm9pZCBNYXJrZWRCbG9jazo6YXNzZXJ0VmFsaWRDZWxsKFZNJiB2bSwgSGVh
cENlbGwqIGNlbGwpIGNvbnN0CiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQoJnZtID09IHRoaXMtPnZt
KCkpOworICAgIFJFTEVBU0VfQVNTRVJUKCZ2bSA9PSAmdGhpcy0+dm0oKSk7CiAgICAgUkVMRUFT
RV9BU1NFUlQoY29uc3RfY2FzdDxNYXJrZWRCbG9jayo+KHRoaXMpLT5oYW5kbGUoKS5jZWxsQWxp
Z24oY2VsbCkgPT0gY2VsbCk7CiB9CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hcmtlZEJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTWFya2VkQmxvY2suaAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMTI0LDcgKzEyNCw3
IEBAIHB1YmxpYzoKICAgICAgICAgQWxpZ25lZE1lbW9yeUFsbG9jYXRvciogYWxpZ25lZE1lbW9y
eUFsbG9jYXRvcigpIGNvbnN0OwogICAgICAgICBIZWFwKiBoZWFwKCkgY29uc3Q7CiAgICAgICAg
IGlubGluZSBNYXJrZWRTcGFjZSogc3BhY2UoKSBjb25zdDsKLSAgICAgICAgVk0qIHZtKCkgY29u
c3Q7CisgICAgICAgIFZNJiB2bSgpIGNvbnN0OwogICAgICAgICBXZWFrU2V0JiB3ZWFrU2V0KCk7
CiAgICAgICAgICAgICAKICAgICAgICAgZW51bSBTd2VlcE1vZGUgeyBTd2VlcE9ubHksIFN3ZWVw
VG9GcmVlTGlzdCB9OwpAQCAtMjU3LDYgKzI1Nyw4IEBAIHB1YmxpYzoKICAgICAgICAgZnJpZW5k
IGNsYXNzIE1hcmtlZEJsb2NrOwogICAgICAgICAKICAgICAgICAgSGFuZGxlJiBtX2hhbmRsZTsK
KyAgICAgICAgLy8gbV92bSBtdXN0IHJlbWFpbiBhIHBvaW50ZXIgKGluc3RlYWQgb2YgYSByZWZl
cmVuY2UpIGJlY2F1c2UgSlNDTExJbnRPZmZzZXRzRXh0cmFjdG9yCisgICAgICAgIC8vIHdpbGwg
ZmFpbCBvdGhlcndpc2UuCiAgICAgICAgIFZNKiBtX3ZtOwogICAgICAgICBTdWJzcGFjZSogbV9z
dWJzcGFjZTsKIApAQCAtMzE1LDcgKzMxNyw3IEBAIHB1YmxpYzoKICAgICBIYW5kbGUmIGhhbmRs
ZSgpOwogICAgIGNvbnN0IEhhbmRsZSYgaGFuZGxlKCkgY29uc3Q7CiAgICAgICAgIAotICAgIFZN
KiB2bSgpIGNvbnN0OworICAgIFZNJiB2bSgpIGNvbnN0OwogICAgIGlubGluZSBIZWFwKiBoZWFw
KCkgY29uc3Q7CiAgICAgaW5saW5lIE1hcmtlZFNwYWNlKiBzcGFjZSgpIGNvbnN0OwogCkBAIC00
NzEsMTQgKzQ3MywxNCBAQCBpbmxpbmUgSGVhcCogTWFya2VkQmxvY2s6OkhhbmRsZTo6aGVhcCgp
CiAgICAgcmV0dXJuIG1fd2Vha1NldC5oZWFwKCk7CiB9CiAKLWlubGluZSBWTSogTWFya2VkQmxv
Y2s6OkhhbmRsZTo6dm0oKSBjb25zdAoraW5saW5lIFZNJiBNYXJrZWRCbG9jazo6SGFuZGxlOjp2
bSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fd2Vha1NldC52bSgpOwogfQogCi1pbmxpbmUgVk0q
IE1hcmtlZEJsb2NrOjp2bSgpIGNvbnN0CitpbmxpbmUgVk0mIE1hcmtlZEJsb2NrOjp2bSgpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIGZvb3RlcigpLm1fdm07CisgICAgcmV0dXJuICpmb290ZXIoKS5t
X3ZtOwogfQogCiBpbmxpbmUgV2Vha1NldCYgTWFya2VkQmxvY2s6OkhhbmRsZTo6d2Vha1NldCgp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9ja0lubGluZXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9ja0lubGlu
ZXMuaAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFy
a2VkQmxvY2tJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTUyLDcgKzUyLDcgQEAgaW5saW5l
IGJvb2wgTWFya2VkQmxvY2s6Omhhc0FueU5ld2x5QWxsbwogCiBpbmxpbmUgSGVhcCogTWFya2Vk
QmxvY2s6OmhlYXAoKSBjb25zdAogewotICAgIHJldHVybiAmdm0oKS0+aGVhcDsKKyAgICByZXR1
cm4gJnZtKCkuaGVhcDsKIH0KIAogaW5saW5lIE1hcmtlZFNwYWNlKiBNYXJrZWRCbG9jazo6c3Bh
Y2UoKSBjb25zdApAQCAtMjUzLDcgKzI1Myw3IEBAIHZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6
c3BlY2lhbGl6ZWRTd2UKICAgICAKICAgICB1bnNpZ25lZCBjZWxsU2l6ZSA9IHRoaXMtPmNlbGxT
aXplKCk7CiAgICAgCi0gICAgVk0mIHZtID0gKnRoaXMtPnZtKCk7CisgICAgVk0mIHZtID0gdGhp
cy0+dm0oKTsKICAgICBhdXRvIGRlc3Ryb3kgPSBbJl0gKHZvaWQqIGNlbGwpIHsKICAgICAgICAg
SlNDZWxsKiBqc0NlbGwgPSBzdGF0aWNfY2FzdDxKU0NlbGwqPihjZWxsKTsKICAgICAgICAgaWYg
KCFqc0NlbGwtPmlzWmFwcGVkKCkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L1Nsb3RWaXNpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9TbG90VmlzaXRvci5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAsNyArNjAsNyBA
QCBzdGF0aWMgdm9pZCB2YWxpZGF0ZShKU0NlbGwqIGNlbGwpCiAKICAgICAvLyBCb3RoIHRoZSBj
ZWxsJ3Mgc3RydWN0dXJlLCBhbmQgdGhlIGNlbGwncyBzdHJ1Y3R1cmUncyBzdHJ1Y3R1cmUgc2hv
dWxkIGJlIHRoZSBTdHJ1Y3R1cmUgU3RydWN0dXJlLgogICAgIC8vIEkgaGF0ZSB0aGlzIHNlbnRl
bmNlLgotICAgIFZNJiB2bSA9ICpjZWxsLT52bSgpOworICAgIFZNJiB2bSA9IGNlbGwtPnZtKCk7
CiAgICAgaWYgKGNlbGwtPnN0cnVjdHVyZSgpLT5zdHJ1Y3R1cmUoKS0+SlNDZWxsOjpjbGFzc0lu
Zm8odm0pICE9IGNlbGwtPnN0cnVjdHVyZSgpLT5KU0NlbGw6OmNsYXNzSW5mbyh2bSkpIHsKICAg
ICAgICAgY29uc3QgY2hhciogcGFyZW50Q2xhc3NOYW1lID0gMDsKICAgICAgICAgY29uc3QgY2hh
ciogb3VyQ2xhc3NOYW1lID0gMDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Ns
b3RWaXNpdG9ySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTE3NiwxMiArMTc2LDEyIEBAIGlubGluZSBIZWFwKiBTbG90VmlzaXRvcjo6aGVhcCgpIGNvbnN0
CiAKIGlubGluZSBWTSYgU2xvdFZpc2l0b3I6OnZtKCkKIHsKLSAgICByZXR1cm4gKm1faGVhcC52
bSgpOworICAgIHJldHVybiBtX2hlYXAudm0oKTsKIH0KIAogaW5saW5lIGNvbnN0IFZNJiBTbG90
VmlzaXRvcjo6dm0oKSBjb25zdAogewotICAgIHJldHVybiAqbV9oZWFwLnZtKCk7CisgICAgcmV0
dXJuIG1faGVhcC52bSgpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3RvcElmTmVjZXNzYXJ5VGltZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N0b3BJZk5lY2Vzc2FyeVRpbWVyLmNw
cAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3RvcElm
TmVjZXNzYXJ5VGltZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNi0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzAsNyArMzAsNyBAQAogCiBu
YW1lc3BhY2UgSlNDIHsKIAotU3RvcElmTmVjZXNzYXJ5VGltZXI6OlN0b3BJZk5lY2Vzc2FyeVRp
bWVyKFZNKiB2bSkKK1N0b3BJZk5lY2Vzc2FyeVRpbWVyOjpTdG9wSWZOZWNlc3NhcnlUaW1lcihW
TSYgdm0pCiAgICAgOiBCYXNlKHZtKQogewogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvU3RvcElmTmVjZXNzYXJ5VGltZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9TdG9wSWZOZWNlc3NhcnlUaW1lci5oCShyZXZpc2lvbiAyNDkxMjgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdG9wSWZOZWNlc3NhcnlUaW1lci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTM0LDcgKzM0LDcgQEAgY2xhc3MgSGVhcDsKIGNsYXNzIFN0b3BJZk5lY2Vzc2Fy
eVRpbWVyIDogcHVibGljIEpTUnVuTG9vcFRpbWVyIHsKIHB1YmxpYzoKICAgICB1c2luZyBCYXNl
ID0gSlNSdW5Mb29wVGltZXI7Ci0gICAgZXhwbGljaXQgU3RvcElmTmVjZXNzYXJ5VGltZXIoVk0q
KTsKKyAgICBleHBsaWNpdCBTdG9wSWZOZWNlc3NhcnlUaW1lcihWTSYpOwogICAgIAogICAgIHZv
aWQgZG9Xb3JrKFZNJikgb3ZlcnJpZGU7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9TdHJvbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9TdHJvbmcuaAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvU3Ryb25nLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTEyLDcgKzExMiw3IEBAIHB1YmxpYzoKICAgICAg
ICAgICAgIHJldHVybiAqdGhpczsKICAgICAgICAgfQogCi0gICAgICAgIHNldCgqSGFuZGxlU2V0
OjpoZWFwRm9yKG90aGVyLnNsb3QoKSktPnZtKCksIG90aGVyLmdldCgpKTsKKyAgICAgICAgc2V0
KEhhbmRsZVNldDo6aGVhcEZvcihvdGhlci5zbG90KCkpLT52bSgpLCBvdGhlci5nZXQoKSk7CiAg
ICAgICAgIHJldHVybiAqdGhpczsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL1dlYWtTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9XZWFrU2V0LmgJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL1dlYWtTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTItMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTItMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQxLDcgKzQxLDcgQEAgcHVibGljOgog
ICAgIHN0YXRpYyBXZWFrSW1wbCogYWxsb2NhdGUoSlNWYWx1ZSwgV2Vha0hhbmRsZU93bmVyKiA9
IDAsIHZvaWQqIGNvbnRleHQgPSAwKTsKICAgICBzdGF0aWMgdm9pZCBkZWFsbG9jYXRlKFdlYWtJ
bXBsKik7CiAKLSAgICBXZWFrU2V0KFZNKiwgQ2VsbENvbnRhaW5lcik7CisgICAgV2Vha1NldChW
TSYsIENlbGxDb250YWluZXIpOwogICAgIH5XZWFrU2V0KCk7CiAgICAgdm9pZCBsYXN0Q2hhbmNl
VG9GaW5hbGl6ZSgpOwogICAgIApAQCAtNDksNyArNDksNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBz
ZXRDb250YWluZXIoQ2VsbENvbnRhaW5lciBjb250YWluZXIpIHsgbV9jb250YWluZXIgPSBjb250
YWluZXI7IH0KIAogICAgIEhlYXAqIGhlYXAoKSBjb25zdDsKLSAgICBWTSogdm0oKSBjb25zdDsK
KyAgICBWTSYgdm0oKSBjb25zdDsKIAogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0OwogICAgIGJv
b2wgaXNUcml2aWFsbHlEZXN0cnVjdGlibGUoKSBjb25zdDsKQEAgLTcwLDExICs3MCwxMSBAQCBw
cml2YXRlOgogICAgIFdlYWtCbG9jazo6RnJlZUNlbGwqIG1fYWxsb2NhdG9yOwogICAgIFdlYWtC
bG9jayogbV9uZXh0QWxsb2NhdG9yOwogICAgIERvdWJseUxpbmtlZExpc3Q8V2Vha0Jsb2NrPiBt
X2Jsb2NrczsKLSAgICBWTSogbV92bTsKKyAgICBWTSYgbV92bTsKICAgICBDZWxsQ29udGFpbmVy
IG1fY29udGFpbmVyOwogfTsKIAotaW5saW5lIFdlYWtTZXQ6OldlYWtTZXQoVk0qIHZtLCBDZWxs
Q29udGFpbmVyIGNvbnRhaW5lcikKK2lubGluZSBXZWFrU2V0OjpXZWFrU2V0KFZNJiB2bSwgQ2Vs
bENvbnRhaW5lciBjb250YWluZXIpCiAgICAgOiBtX2FsbG9jYXRvcigwKQogICAgICwgbV9uZXh0
QWxsb2NhdG9yKDApCiAgICAgLCBtX3ZtKHZtKQpAQCAtODIsNyArODIsNyBAQCBpbmxpbmUgV2Vh
a1NldDo6V2Vha1NldChWTSogdm0sIENlbGxDb250CiB7CiB9CiAKLWlubGluZSBWTSogV2Vha1Nl
dDo6dm0oKSBjb25zdAoraW5saW5lIFZNJiBXZWFrU2V0Ojp2bSgpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIG1fdm07CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTSW5q
ZWN0ZWRTY3JpcHRIb3N0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL0pTSW5qZWN0ZWRTY3JpcHRIb3N0LmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0luamVjdGVkU2NyaXB0SG9zdC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEz
LCAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMjAsNyArMTIwLDcgQEAgSlNWYWx1ZSBKU0luamVj
dGVkU2NyaXB0SG9zdDo6c2F2ZWRSZXN1bAogICAgIGF1dG8gc2F2ZWRSZXN1bHRBbGlhcyA9IGlt
cGwoKS5zYXZlZFJlc3VsdEFsaWFzKCk7CiAgICAgaWYgKCFzYXZlZFJlc3VsdEFsaWFzKQogICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgc2F2
ZWRSZXN1bHRBbGlhcy52YWx1ZSgpKTsKKyAgICByZXR1cm4ganNTdHJpbmcoZXhlYy0+dm0oKSwg
c2F2ZWRSZXN1bHRBbGlhcy52YWx1ZSgpKTsKIH0KIAogSlNWYWx1ZSBKU0luamVjdGVkU2NyaXB0
SG9zdDo6ZXZhbHVhdGVXaXRoU2NvcGVFeHRlbnNpb24oRXhlY1N0YXRlKiBleGVjKQpAQCAtMTQ5
LDggKzE0OSw5IEBAIEpTVmFsdWUgSlNJbmplY3RlZFNjcmlwdEhvc3Q6OmludGVybmFsQ28KICAg
ICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CiAKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIEpTT2JqZWN0KiBvYmplY3Qg
PSBqc0Nhc3Q8SlNPYmplY3QqPihleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKS50b1RoaXMoZXhl
YywgTm90U3RyaWN0TW9kZSkpOwotICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBKU09iamVjdDo6
Y2FsY3VsYXRlZENsYXNzTmFtZShvYmplY3QpKTsKKyAgICByZXR1cm4ganNTdHJpbmcodm0sIEpT
T2JqZWN0OjpjYWxjdWxhdGVkQ2xhc3NOYW1lKG9iamVjdCkpOwogfQogCiBKU1ZhbHVlIEpTSW5q
ZWN0ZWRTY3JpcHRIb3N0Ojppc0hUTUxBbGxDb2xsZWN0aW9uKEV4ZWNTdGF0ZSogZXhlYykKQEAg
LTE5Niw0MSArMTk3LDQxIEBAIEpTVmFsdWUgSlNJbmplY3RlZFNjcmlwdEhvc3Q6OnN1YnR5cGUo
RXgKIAogICAgIGlmIChhdXRvKiBvYmplY3QgPSBqc0R5bmFtaWNDYXN0PEpTT2JqZWN0Kj4odm0s
IHZhbHVlKSkgewogICAgICAgICBpZiAob2JqZWN0LT5pc0Vycm9ySW5zdGFuY2UoKSkKLSAgICAg
ICAgICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywgImVycm9yIl9zKTsKKyAgICAg
ICAgICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcodm0sICJlcnJvciJfcyk7CiAKICAgICAg
ICAgLy8gQ29uc2lkZXIgY2xhc3MgY29uc3RydWN0b3IgZnVuY3Rpb25zIGNsYXNzIG9iamVjdHMu
CiAgICAgICAgIEpTRnVuY3Rpb24qIGZ1bmN0aW9uID0ganNEeW5hbWljQ2FzdDxKU0Z1bmN0aW9u
Kj4odm0sIHZhbHVlKTsKICAgICAgICAgaWYgKGZ1bmN0aW9uICYmIGZ1bmN0aW9uLT5pc0NsYXNz
Q29uc3RydWN0b3JGdW5jdGlvbigpKQotICAgICAgICAgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0
cmluZyhleGVjLCAiY2xhc3MiX3MpOworICAgICAgICAgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0
cmluZyh2bSwgImNsYXNzIl9zKTsKIAogICAgICAgICBpZiAob2JqZWN0LT5pbmhlcml0czxKU0Fy
cmF5Pih2bSkpCi0gICAgICAgICAgICByZXR1cm4ganNOb250cml2aWFsU3RyaW5nKGV4ZWMsICJh
cnJheSJfcyk7CisgICAgICAgICAgICByZXR1cm4ganNOb250cml2aWFsU3RyaW5nKHZtLCAiYXJy
YXkiX3MpOwogICAgICAgICBpZiAob2JqZWN0LT5pbmhlcml0czxEaXJlY3RBcmd1bWVudHM+KHZt
KSB8fCBvYmplY3QtPmluaGVyaXRzPFNjb3BlZEFyZ3VtZW50cz4odm0pKQotICAgICAgICAgICAg
cmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyhleGVjLCAiYXJyYXkiX3MpOworICAgICAgICAgICAg
cmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyh2bSwgImFycmF5Il9zKTsKIAogICAgICAgICBpZiAo
b2JqZWN0LT5pbmhlcml0czxEYXRlSW5zdGFuY2U+KHZtKSkKLSAgICAgICAgICAgIHJldHVybiBq
c05vbnRyaXZpYWxTdHJpbmcoZXhlYywgImRhdGUiX3MpOworICAgICAgICAgICAgcmV0dXJuIGpz
Tm9udHJpdmlhbFN0cmluZyh2bSwgImRhdGUiX3MpOwogICAgICAgICBpZiAob2JqZWN0LT5pbmhl
cml0czxSZWdFeHBPYmplY3Q+KHZtKSkKLSAgICAgICAgICAgIHJldHVybiBqc05vbnRyaXZpYWxT
dHJpbmcoZXhlYywgInJlZ2V4cCJfcyk7CisgICAgICAgICAgICByZXR1cm4ganNOb250cml2aWFs
U3RyaW5nKHZtLCAicmVnZXhwIl9zKTsKICAgICAgICAgaWYgKG9iamVjdC0+aW5oZXJpdHM8UHJv
eHlPYmplY3Q+KHZtKSkKLSAgICAgICAgICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcoZXhl
YywgInByb3h5Il9zKTsKKyAgICAgICAgICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcodm0s
ICJwcm94eSJfcyk7CiAKICAgICAgICAgaWYgKG9iamVjdC0+aW5oZXJpdHM8SlNNYXA+KHZtKSkK
LSAgICAgICAgICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywgIm1hcCJfcyk7Cisg
ICAgICAgICAgICByZXR1cm4ganNOb250cml2aWFsU3RyaW5nKHZtLCAibWFwIl9zKTsKICAgICAg
ICAgaWYgKG9iamVjdC0+aW5oZXJpdHM8SlNTZXQ+KHZtKSkKLSAgICAgICAgICAgIHJldHVybiBq
c05vbnRyaXZpYWxTdHJpbmcoZXhlYywgInNldCJfcyk7CisgICAgICAgICAgICByZXR1cm4ganNO
b250cml2aWFsU3RyaW5nKHZtLCAic2V0Il9zKTsKICAgICAgICAgaWYgKG9iamVjdC0+aW5oZXJp
dHM8SlNXZWFrTWFwPih2bSkpCi0gICAgICAgICAgICByZXR1cm4ganNOb250cml2aWFsU3RyaW5n
KGV4ZWMsICJ3ZWFrbWFwIl9zKTsKKyAgICAgICAgICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJp
bmcodm0sICJ3ZWFrbWFwIl9zKTsKICAgICAgICAgaWYgKG9iamVjdC0+aW5oZXJpdHM8SlNXZWFr
U2V0Pih2bSkpCi0gICAgICAgICAgICByZXR1cm4ganNOb250cml2aWFsU3RyaW5nKGV4ZWMsICJ3
ZWFrc2V0Il9zKTsKKyAgICAgICAgICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcodm0sICJ3
ZWFrc2V0Il9zKTsKIAogICAgICAgICBpZiAob2JqZWN0LT5pbmhlcml0czxKU1N0cmluZ0l0ZXJh
dG9yPih2bSkpCi0gICAgICAgICAgICByZXR1cm4ganNOb250cml2aWFsU3RyaW5nKGV4ZWMsICJp
dGVyYXRvciJfcyk7CisgICAgICAgICAgICByZXR1cm4ganNOb250cml2aWFsU3RyaW5nKHZtLCAi
aXRlcmF0b3IiX3MpOwogCiAgICAgICAgIGlmIChvYmplY3QtPmdldERpcmVjdCh2bSwgdm0ucHJv
cGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkuYXJyYXlJdGVyYXRvck5leHRJbmRleFByaXZhdGVO
YW1lKCkpCiAgICAgICAgICAgICB8fCBvYmplY3QtPmdldERpcmVjdCh2bSwgdm0ucHJvcGVydHlO
YW1lcy0+YnVpbHRpbk5hbWVzKCkubWFwQnVja2V0UHJpdmF0ZU5hbWUoKSkKICAgICAgICAgICAg
IHx8IG9iamVjdC0+Z2V0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMo
KS5zZXRCdWNrZXRQcml2YXRlTmFtZSgpKSkKLSAgICAgICAgICAgIHJldHVybiBqc05vbnRyaXZp
YWxTdHJpbmcoZXhlYywgIml0ZXJhdG9yIl9zKTsKKyAgICAgICAgICAgIHJldHVybiBqc05vbnRy
aXZpYWxTdHJpbmcodm0sICJpdGVyYXRvciJfcyk7CiAKICAgICAgICAgaWYgKG9iamVjdC0+aW5o
ZXJpdHM8SlNJbnQ4QXJyYXk+KHZtKQogICAgICAgICAgICAgfHwgb2JqZWN0LT5pbmhlcml0czxK
U0ludDE2QXJyYXk+KHZtKQpAQCAtMjQxLDcgKzI0Miw3IEBAIEpTVmFsdWUgSlNJbmplY3RlZFNj
cmlwdEhvc3Q6OnN1YnR5cGUoRXgKICAgICAgICAgICAgIHx8IG9iamVjdC0+aW5oZXJpdHM8SlNV
aW50MzJBcnJheT4odm0pCiAgICAgICAgICAgICB8fCBvYmplY3QtPmluaGVyaXRzPEpTRmxvYXQz
MkFycmF5Pih2bSkKICAgICAgICAgICAgIHx8IG9iamVjdC0+aW5oZXJpdHM8SlNGbG9hdDY0QXJy
YXk+KHZtKSkKLSAgICAgICAgICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywgImFy
cmF5Il9zKTsKKyAgICAgICAgICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcodm0sICJhcnJh
eSJfcyk7CiAgICAgfQogCiAgICAgcmV0dXJuIGltcGwoKS5zdWJ0eXBlKGV4ZWMsIHZhbHVlKTsK
QEAgLTI3NiwyMCArMjc3LDIwIEBAIEpTVmFsdWUgSlNJbmplY3RlZFNjcmlwdEhvc3Q6OmZ1bmN0
aW9uRGUKIAogICAgIFN0cmluZyBzY3JpcHRJRCA9IFN0cmluZzo6bnVtYmVyKHNvdXJjZUNvZGUt
PnByb3ZpZGVyKCktPmFzSUQoKSk7CiAgICAgSlNPYmplY3QqIGxvY2F0aW9uID0gY29uc3RydWN0
RW1wdHlPYmplY3QoZXhlYyk7Ci0gICAgbG9jYXRpb24tPnB1dERpcmVjdCh2bSwgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZyhleGVjLCAic2NyaXB0SWQiKSwganNTdHJpbmcoZXhlYywgc2NyaXB0SUQp
KTsKLSAgICBsb2NhdGlvbi0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4
ZWMsICJsaW5lTnVtYmVyIiksIGpzTnVtYmVyKGxpbmVOdW1iZXIpKTsKLSAgICBsb2NhdGlvbi0+
cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJjb2x1bW5OdW1iZXIi
KSwganNOdW1iZXIoY29sdW1uTnVtYmVyKSk7CisgICAgbG9jYXRpb24tPnB1dERpcmVjdCh2bSwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInNjcmlwdElkIiksIGpzU3RyaW5nKHZtLCBzY3Jp
cHRJRCkpOworICAgIGxvY2F0aW9uLT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJp
bmcodm0sICJsaW5lTnVtYmVyIiksIGpzTnVtYmVyKGxpbmVOdW1iZXIpKTsKKyAgICBsb2NhdGlv
bi0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiY29sdW1uTnVtYmVy
IiksIGpzTnVtYmVyKGNvbHVtbk51bWJlcikpOwogCiAgICAgSlNPYmplY3QqIHJlc3VsdCA9IGNv
bnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJsb2NhdGlvbiIpLCBsb2NhdGlvbik7CisgICAgcmVz
dWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJsb2NhdGlvbiIp
LCBsb2NhdGlvbik7CiAKICAgICBTdHJpbmcgbmFtZSA9IGZ1bmN0aW9uLT5uYW1lKHZtKTsKICAg
ICBpZiAoIW5hbWUuaXNFbXB0eSgpKQotICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCAibmFtZSIpLCBqc1N0cmluZyhleGVjLCBuYW1lKSk7
CisgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZt
LCAibmFtZSIpLCBqc1N0cmluZyh2bSwgbmFtZSkpOwogCiAgICAgU3RyaW5nIGRpc3BsYXlOYW1l
ID0gZnVuY3Rpb24tPmRpc3BsYXlOYW1lKHZtKTsKICAgICBpZiAoIWRpc3BsYXlOYW1lLmlzRW1w
dHkoKSkKLSAgICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJp
bmcoZXhlYywgImRpc3BsYXlOYW1lIiksIGpzU3RyaW5nKGV4ZWMsIGRpc3BsYXlOYW1lKSk7Cisg
ICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAi
ZGlzcGxheU5hbWUiKSwganNTdHJpbmcodm0sIGRpc3BsYXlOYW1lKSk7CiAKICAgICByZXR1cm4g
cmVzdWx0OwogfQpAQCAtMjk4LDggKzI5OSw4IEBAIHN0YXRpYyBKU09iamVjdCogY29uc3RydWN0
SW50ZXJuYWxQcm9wZXIKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIEpTT2JqZWN0
KiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjKTsKLSAgICByZXN1bHQtPnB1dERp
cmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCAibmFtZSIpLCBqc1N0cmluZyhl
eGVjLCBuYW1lKSk7Ci0gICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21T
dHJpbmcoZXhlYywgInZhbHVlIiksIHZhbHVlKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIm5hbWUiKSwganNTdHJpbmcodm0sIG5hbWUpKTsK
KyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInZh
bHVlIiksIHZhbHVlKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0zMjMsMTYgKzMyNCwx
NiBAQCBKU1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRIb3N0OjpnZXRJbnRlcm5hCiAgICAgICAgIHN3
aXRjaCAocHJvbWlzZS0+c3RhdHVzKHZtKSkgewogICAgICAgICBjYXNlIEpTUHJvbWlzZTo6U3Rh
dHVzOjpQZW5kaW5nOgogICAgICAgICAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgICAgICAgICAg
YXJyYXktPnB1dERpcmVjdEluZGV4KGV4ZWMsIGluZGV4KyssIGNvbnN0cnVjdEludGVybmFsUHJv
cGVydHkoZXhlYywgInN0YXR1cyJfcywganNOb250cml2aWFsU3RyaW5nKGV4ZWMsICJwZW5kaW5n
Il9zKSkpOworICAgICAgICAgICAgYXJyYXktPnB1dERpcmVjdEluZGV4KGV4ZWMsIGluZGV4Kyss
IGNvbnN0cnVjdEludGVybmFsUHJvcGVydHkoZXhlYywgInN0YXR1cyJfcywganNOb250cml2aWFs
U3RyaW5nKHZtLCAicGVuZGluZyJfcykpKTsKICAgICAgICAgICAgIHJldHVybiBhcnJheTsKICAg
ICAgICAgY2FzZSBKU1Byb21pc2U6OlN0YXR1czo6RnVsZmlsbGVkOgotICAgICAgICAgICAgYXJy
YXktPnB1dERpcmVjdEluZGV4KGV4ZWMsIGluZGV4KyssIGNvbnN0cnVjdEludGVybmFsUHJvcGVy
dHkoZXhlYywgInN0YXR1cyJfcywganNOb250cml2aWFsU3RyaW5nKGV4ZWMsICJyZXNvbHZlZCJf
cykpKTsKKyAgICAgICAgICAgIGFycmF5LT5wdXREaXJlY3RJbmRleChleGVjLCBpbmRleCsrLCBj
b25zdHJ1Y3RJbnRlcm5hbFByb3BlcnR5KGV4ZWMsICJzdGF0dXMiX3MsIGpzTm9udHJpdmlhbFN0
cmluZyh2bSwgInJlc29sdmVkIl9zKSkpOwogICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgSlNWYWx1ZSgpKTsKICAgICAgICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKICAgICAg
ICAgICAgIGFycmF5LT5wdXREaXJlY3RJbmRleChleGVjLCBpbmRleCsrLCBjb25zdHJ1Y3RJbnRl
cm5hbFByb3BlcnR5KGV4ZWMsICJyZXN1bHQiX3MsIHByb21pc2UtPnJlc3VsdCh2bSkpKTsKICAg
ICAgICAgICAgIHJldHVybiBhcnJheTsKICAgICAgICAgY2FzZSBKU1Byb21pc2U6OlN0YXR1czo6
UmVqZWN0ZWQ6Ci0gICAgICAgICAgICBhcnJheS0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaW5kZXgr
KywgY29uc3RydWN0SW50ZXJuYWxQcm9wZXJ0eShleGVjLCAic3RhdHVzIl9zLCBqc05vbnRyaXZp
YWxTdHJpbmcoZXhlYywgInJlamVjdGVkIl9zKSkpOworICAgICAgICAgICAgYXJyYXktPnB1dERp
cmVjdEluZGV4KGV4ZWMsIGluZGV4KyssIGNvbnN0cnVjdEludGVybmFsUHJvcGVydHkoZXhlYywg
InN0YXR1cyJfcywganNOb250cml2aWFsU3RyaW5nKHZtLCAicmVqZWN0ZWQiX3MpKSk7CiAgICAg
ICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkpOwogICAgICAgICAg
ICAgc2NvcGUucmVsZWFzZSgpOwogICAgICAgICAgICAgYXJyYXktPnB1dERpcmVjdEluZGV4KGV4
ZWMsIGluZGV4KyssIGNvbnN0cnVjdEludGVybmFsUHJvcGVydHkoZXhlYywgInJlc3VsdCJfcywg
cHJvbWlzZS0+cmVzdWx0KHZtKSkpOwpAQCAtNDA0LDcgKzQwNSw3IEBAIEpTVmFsdWUgSlNJbmpl
Y3RlZFNjcmlwdEhvc3Q6OmdldEludGVybmEKICAgICAgICAgICAgIGFycmF5LT5wdXREaXJlY3RJ
bmRleChleGVjLCBpbmRleCsrLCBjb25zdHJ1Y3RJbnRlcm5hbFByb3BlcnR5KGV4ZWMsICJtYXAi
LCBpdGVyYXRlZFZhbHVlKSk7CiAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBKU1ZhbHVlKCkpOwogICAgICAgICAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgICAgICAgICAg
YXJyYXktPnB1dERpcmVjdEluZGV4KGV4ZWMsIGluZGV4KyssIGNvbnN0cnVjdEludGVybmFsUHJv
cGVydHkoZXhlYywgImtpbmQiLCBqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywga2luZCkpKTsKKyAg
ICAgICAgICAgIGFycmF5LT5wdXREaXJlY3RJbmRleChleGVjLCBpbmRleCsrLCBjb25zdHJ1Y3RJ
bnRlcm5hbFByb3BlcnR5KGV4ZWMsICJraW5kIiwganNOb250cml2aWFsU3RyaW5nKHZtLCBraW5k
KSkpOwogICAgICAgICAgICAgcmV0dXJuIGFycmF5OwogICAgICAgICB9CiAKQEAgLTQyOCw3ICs0
MjksNyBAQCBKU1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRIb3N0OjpnZXRJbnRlcm5hCiAgICAgICAg
ICAgICBhcnJheS0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaW5kZXgrKywgY29uc3RydWN0SW50ZXJu
YWxQcm9wZXJ0eShleGVjLCAic2V0IiwgaXRlcmF0ZWRWYWx1ZSkpOwogICAgICAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZSgpKTsKICAgICAgICAgICAgIHNjb3BlLnJl
bGVhc2UoKTsKLSAgICAgICAgICAgIGFycmF5LT5wdXREaXJlY3RJbmRleChleGVjLCBpbmRleCsr
LCBjb25zdHJ1Y3RJbnRlcm5hbFByb3BlcnR5KGV4ZWMsICJraW5kIiwganNOb250cml2aWFsU3Ry
aW5nKGV4ZWMsIGtpbmQpKSk7CisgICAgICAgICAgICBhcnJheS0+cHV0RGlyZWN0SW5kZXgoZXhl
YywgaW5kZXgrKywgY29uc3RydWN0SW50ZXJuYWxQcm9wZXJ0eShleGVjLCAia2luZCIsIGpzTm9u
dHJpdmlhbFN0cmluZyh2bSwga2luZCkpKTsKICAgICAgICAgICAgIHJldHVybiBhcnJheTsKICAg
ICAgICAgfQogICAgIH0KQEAgLTUwNCw4ICs1MDUsOCBAQCBKU1ZhbHVlIEpTSW5qZWN0ZWRTY3Jp
cHRIb3N0Ojp3ZWFrTWFwRW50CiAKICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXgg
PCBidWZmZXIuc2l6ZSgpOyBpbmRleCArPSAyKSB7CiAgICAgICAgIEpTT2JqZWN0KiBlbnRyeSA9
IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMpOwotICAgICAgICBlbnRyeS0+cHV0RGlyZWN0KHZt
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJrZXkiKSwgYnVmZmVyLmF0KGluZGV4KSk7
Ci0gICAgICAgIGVudHJ5LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhl
YywgInZhbHVlIiksIGJ1ZmZlci5hdChpbmRleCArIDEpKTsKKyAgICAgICAgZW50cnktPnB1dERp
cmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImtleSIpLCBidWZmZXIuYXQoaW5k
ZXgpKTsKKyAgICAgICAgZW50cnktPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zyh2bSwgInZhbHVlIiksIGJ1ZmZlci5hdChpbmRleCArIDEpKTsKICAgICAgICAgYXJyYXktPnB1
dERpcmVjdEluZGV4KGV4ZWMsIGluZGV4IC8gMiwgZW50cnkpOwogICAgICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkpOwogICAgIH0KQEAgLTU1NCw3ICs1NTUsNyBAQCBK
U1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRIb3N0Ojp3ZWFrU2V0RW50CiAKICAgICBmb3IgKHVuc2ln
bmVkIGluZGV4ID0gMDsgaW5kZXggPCBidWZmZXIuc2l6ZSgpOyArK2luZGV4KSB7CiAgICAgICAg
IEpTT2JqZWN0KiBlbnRyeSA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMpOwotICAgICAgICBl
bnRyeS0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJ2YWx1ZSIp
LCBidWZmZXIuYXQoaW5kZXgpKTsKKyAgICAgICAgZW50cnktPnB1dERpcmVjdCh2bSwgSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZyh2bSwgInZhbHVlIiksIGJ1ZmZlci5hdChpbmRleCkpOwogICAgICAg
ICBhcnJheS0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaW5kZXgsIGVudHJ5KTsKICAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZSgpKTsKICAgICB9CkBAIC02NTMsNyArNjU0
LDcgQEAgSlNWYWx1ZSBKU0luamVjdGVkU2NyaXB0SG9zdDo6aXRlcmF0b3JFbgogICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCiAgICAgICAgIEpTT2JqZWN0KiBlbnRy
eSA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMpOwotICAgICAgICBlbnRyeS0+cHV0RGlyZWN0
KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJ2YWx1ZSIpLCBuZXh0VmFsdWUpOwor
ICAgICAgICBlbnRyeS0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAi
dmFsdWUiKSwgbmV4dFZhbHVlKTsKICAgICAgICAgYXJyYXktPnB1dERpcmVjdEluZGV4KGV4ZWMs
IGksIGVudHJ5KTsKICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgewog
ICAgICAgICAgICAgc2NvcGUucmVsZWFzZSgpOwpAQCAtNzIyLDcgKzcyMyw3IEBAIEpTVmFsdWUg
SlNJbmplY3RlZFNjcmlwdEhvc3Q6OnF1ZXJ5SW5zdGEKICAgICBpZiAoY2hlY2tGb3JiaWRkZW5Q
cm90b3R5cGUoZXhlYywgb2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LT5wcm9taXNlUHJvdG90
eXBlKCkpKQogICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsICJxdWVy
eUluc3RhbmNlcyBjYW5ub3QgYmUgY2FsbGVkIHdpdGggUHJvbWlzZS4iX3MpOwogCi0gICAgc2Fu
aXRpemVTdGFja0ZvclZNKCZ2bSk7CisgICAgc2FuaXRpemVTdGFja0ZvclZNKHZtKTsKICAgICB2
bS5oZWFwLmNvbGxlY3ROb3coU3luYywgQ29sbGVjdGlvblNjb3BlOjpGdWxsKTsKIAogICAgIEpT
QXJyYXkqIGFycmF5ID0gY29uc3RydWN0RW1wdHlBcnJheShleGVjLCBudWxscHRyKTsKQEAgLTgw
MCw3ICs4MDEsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBhbmFseXplRWRnZShKU0NlbGwqIGZyb20s
IEpTQ2VsbCogdG8sIFNsb3RWaXNpdG9yOjpSb290TWFya1JlYXNvbiByZWFzb24pCiAgICAgewog
ICAgICAgICBBU1NFUlQodG8pOwotICAgICAgICBBU1NFUlQodG8tPnZtKCktPmhlYXBQcm9maWxl
cigpLT5hY3RpdmVIZWFwQW5hbHl6ZXIoKSA9PSB0aGlzKTsKKyAgICAgICAgQVNTRVJUKHRvLT52
bSgpLmhlYXBQcm9maWxlcigpLT5hY3RpdmVIZWFwQW5hbHl6ZXIoKSA9PSB0aGlzKTsKIAogICAg
ICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbXV0ZXgpOwogCkBAIC05MDAsNyArOTAxLDcg
QEAgSlNWYWx1ZSBKU0luamVjdGVkU2NyaXB0SG9zdDo6cXVlcnlIb2xkZQogICAgIHsKICAgICAg
ICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwogICAgICAgICBQcmV2ZW50Q29sbGVjdGlvblNj
b3BlIHByZXZlbnRDb2xsZWN0aW9uU2NvcGUodm0uaGVhcCk7Ci0gICAgICAgIHNhbml0aXplU3Rh
Y2tGb3JWTSgmdm0pOworICAgICAgICBzYW5pdGl6ZVN0YWNrRm9yVk0odm0pOwogCiAgICAgICAg
IEhlYXBIb2xkZXJGaW5kZXIgaG9sZGVyRmluZGVyKHZtLmVuc3VyZUhlYXBQcm9maWxlcigpLCB0
YXJnZXQuYXNDZWxsKCkpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L0pTSmF2YVNjcmlwdENhbGxGcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9KU0phdmFTY3JpcHRDYWxsRnJhbWUuY3BwCShyZXZpc2lvbiAyNDkx
MjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTSmF2YVNjcmlwdENhbGxG
cmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDE0LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMjEsOSArMTIxLDkgQEAgc3RhdGljIEpTVmFs
dWUgdmFsdWVGb3JTY29wZUxvY2F0aW9uKEV4ZQogICAgIC8vIERlYnVnZ2VyLkxvY2F0aW9uIHBy
b3RvY29sIG9iamVjdC4KICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIEpTT2JqZWN0KiBy
ZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjKTsKLSAgICByZXN1bHQtPnB1dERpcmVj
dCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCAic2NyaXB0SWQiKSwganNTdHJpbmco
ZXhlYywgU3RyaW5nOjpudW1iZXIobG9jYXRpb24uc291cmNlSUQpKSk7Ci0gICAgcmVzdWx0LT5w
dXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgImxpbmVOdW1iZXIiKSwg
anNOdW1iZXIobG9jYXRpb24ubGluZSkpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJjb2x1bW5OdW1iZXIiKSwganNOdW1iZXIobG9jYXRp
b24uY29sdW1uKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21T
dHJpbmcodm0sICJzY3JpcHRJZCIpLCBqc1N0cmluZyh2bSwgU3RyaW5nOjpudW1iZXIobG9jYXRp
b24uc291cmNlSUQpKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZy
b21TdHJpbmcodm0sICJsaW5lTnVtYmVyIiksIGpzTnVtYmVyKGxvY2F0aW9uLmxpbmUpKTsKKyAg
ICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImNvbHVt
bk51bWJlciIpLCBqc051bWJlcihsb2NhdGlvbi5jb2x1bW4pKTsKICAgICByZXR1cm4gcmVzdWx0
OwogfQogCkBAIC0xNDMsOSArMTQzLDkgQEAgSlNWYWx1ZSBKU0phdmFTY3JpcHRDYWxsRnJhbWU6
OnNjb3BlRGVzYwogICAgIGZvciAoRGVidWdnZXJTY29wZTo6aXRlcmF0b3IgaXRlciA9IHNjb3Bl
Q2hhaW4tPmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKICAgICAgICAgRGVidWdnZXJT
Y29wZSogc2NvcGUgPSBpdGVyLmdldCgpOwogICAgICAgICBKU09iamVjdCogZGVzY3JpcHRpb24g
PSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjKTsKLSAgICAgICAgZGVzY3JpcHRpb24tPnB1dERp
cmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCAidHlwZSIpLCB2YWx1ZUZvclNj
b3BlVHlwZShzY29wZSkpOwotICAgICAgICBkZXNjcmlwdGlvbi0+cHV0RGlyZWN0KHZtLCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJuYW1lIiksIGpzU3RyaW5nKGV4ZWMsIHNjb3BlLT5u
YW1lKCkpKTsKLSAgICAgICAgZGVzY3JpcHRpb24tPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZyhleGVjLCAibG9jYXRpb24iKSwgdmFsdWVGb3JTY29wZUxvY2F0aW9uKGV4ZWMs
IHNjb3BlLT5sb2NhdGlvbigpKSk7CisgICAgICAgIGRlc2NyaXB0aW9uLT5wdXREaXJlY3Qodm0s
IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJ0eXBlIiksIHZhbHVlRm9yU2NvcGVUeXBlKHNj
b3BlKSk7CisgICAgICAgIGRlc2NyaXB0aW9uLT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZy
b21TdHJpbmcodm0sICJuYW1lIiksIGpzU3RyaW5nKHZtLCBzY29wZS0+bmFtZSgpKSk7CisgICAg
ICAgIGRlc2NyaXB0aW9uLT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0s
ICJsb2NhdGlvbiIpLCB2YWx1ZUZvclNjb3BlTG9jYXRpb24oZXhlYywgc2NvcGUtPmxvY2F0aW9u
KCkpKTsKICAgICAgICAgYXJyYXktPnB1dERpcmVjdEluZGV4KGV4ZWMsIGluZGV4KyssIGRlc2Ny
aXB0aW9uKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBKU1ZhbHVl
KCkpOwogICAgIH0KQEAgLTE3NSw3ICsxNzUsNyBAQCBKU1ZhbHVlIEpTSmF2YVNjcmlwdENhbGxG
cmFtZTo6Y29sdW1uKEV4CiAKIEpTVmFsdWUgSlNKYXZhU2NyaXB0Q2FsbEZyYW1lOjpmdW5jdGlv
bk5hbWUoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogewotICAgIHJldHVybiBqc1N0cmluZyhleGVj
LCBpbXBsKCkuZnVuY3Rpb25OYW1lKCkpOworICAgIHJldHVybiBqc1N0cmluZyhleGVjLT52bSgp
LCBpbXBsKCkuZnVuY3Rpb25OYW1lKCkpOwogfQogCiBKU1ZhbHVlIEpTSmF2YVNjcmlwdENhbGxG
cmFtZTo6c2NvcGVDaGFpbihFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CkBAIC0yMTgsMTEgKzIxOCwx
MiBAQCBKU1ZhbHVlIEpTSmF2YVNjcmlwdENhbGxGcmFtZTo6aXNUYWlsRGVsCiAKIEpTVmFsdWUg
SlNKYXZhU2NyaXB0Q2FsbEZyYW1lOjp0eXBlKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKIHsKKyAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIHN3aXRjaCAoaW1wbCgpLnR5cGUoKSkgewogICAg
IGNhc2UgRGVidWdnZXJDYWxsRnJhbWU6OkZ1bmN0aW9uVHlwZToKLSAgICAgICAgcmV0dXJuIGpz
Tm9udHJpdmlhbFN0cmluZyhleGVjLCAiZnVuY3Rpb24iX3MpOworICAgICAgICByZXR1cm4ganNO
b250cml2aWFsU3RyaW5nKHZtLCAiZnVuY3Rpb24iX3MpOwogICAgIGNhc2UgRGVidWdnZXJDYWxs
RnJhbWU6OlByb2dyYW1UeXBlOgotICAgICAgICByZXR1cm4ganNOb250cml2aWFsU3RyaW5nKGV4
ZWMsICJwcm9ncmFtIl9zKTsKKyAgICAgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyh2bSwg
InByb2dyYW0iX3MpOwogICAgIH0KIAogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9TY3JpcHRDYWxsU3RhY2tGYWN0b3J5LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL1NjcmlwdENh
bGxTdGFja0ZhY3RvcnkuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL1NjcmlwdENhbGxTdGFja0ZhY3RvcnkuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKGMpIDIwMTAgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxMiBSZXNlYXJj
aCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCkBAIC0xMjksOSAr
MTI5LDkgQEAgc3RhdGljIGJvb2wgZXh0cmFjdFNvdXJjZUluZm9ybWF0aW9uRnJvbQogICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKIAogICAgIC8vIEZJWE1FOiA8aHR0
cDovL3dlYmtpdC5vcmcvYi8xMTUwODc+IFdlYiBJbnNwZWN0b3I6IFNob3VsZCBub3QgbmVlZCB0
byBldmFsdWF0ZSBKYXZhU2NyaXB0IGhhbmRsaW5nIGV4Y2VwdGlvbnMKLSAgICBKU1ZhbHVlIGxp
bmVWYWx1ZSA9IGV4Y2VwdGlvbk9iamVjdC0+Z2V0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKGV4ZWMsICJsaW5lIikpOwotICAgIEpTVmFsdWUgY29sdW1uVmFsdWUgPSBleGNlcHRp
b25PYmplY3QtPmdldERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCAiY29s
dW1uIikpOwotICAgIEpTVmFsdWUgc291cmNlVVJMVmFsdWUgPSBleGNlcHRpb25PYmplY3QtPmdl
dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCAic291cmNlVVJMIikpOwor
ICAgIEpTVmFsdWUgbGluZVZhbHVlID0gZXhjZXB0aW9uT2JqZWN0LT5nZXREaXJlY3Qodm0sIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJsaW5lIikpOworICAgIEpTVmFsdWUgY29sdW1uVmFs
dWUgPSBleGNlcHRpb25PYmplY3QtPmdldERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zyh2bSwgImNvbHVtbiIpKTsKKyAgICBKU1ZhbHVlIHNvdXJjZVVSTFZhbHVlID0gZXhjZXB0aW9u
T2JqZWN0LT5nZXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJzb3VyY2VV
UkwiKSk7CiAgICAgCiAgICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKICAgICBpZiAobGluZVZhbHVl
ICYmIGxpbmVWYWx1ZS5pc051bWJlcigpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBdWRpdEFnZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBdWRpdEFnZW50LmNw
cAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9h
Z2VudHMvSW5zcGVjdG9yQXVkaXRBZ2VudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNiw5ICsx
MzYsMTAgQEAgdm9pZCBJbnNwZWN0b3JBdWRpdEFnZW50Ojpwb3B1bGF0ZUF1ZGl0TwogICAgIGlm
ICghZXhlY1N0YXRlKQogICAgICAgICByZXR1cm47CiAKLSAgICBKU0M6OkpTTG9ja0hvbGRlciBs
b2NrKGV4ZWNTdGF0ZSk7CisgICAgSlNDOjpWTSYgdm0gPSBleGVjU3RhdGUtPnZtKCk7CisgICAg
SlNDOjpKU0xvY2tIb2xkZXIgbG9jayh2bSk7CiAKLSAgICBhdWRpdE9iamVjdC0+cHV0RGlyZWN0
KGV4ZWNTdGF0ZS0+dm0oKSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWNTdGF0ZSwg
IlZlcnNpb24iKSwgSlNDOjpKU1ZhbHVlKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1ZGl0OjpWRVJT
SU9OKSk7CisgICAgYXVkaXRPYmplY3QtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCAiVmVyc2lvbiIpLCBKU0M6OkpTVmFsdWUoSW5zcGVjdG9yOjpQcm90b2Nv
bDo6QXVkaXQ6OlZFUlNJT04pKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JIZWFwQWdl
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdl
bnRzL0luc3BlY3RvckhlYXBBZ2VudC5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckhlYXBBZ2VudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1
LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC05MCw3ICs5MCw3IEBAIHZvaWQgSW5zcGVjdG9ySGVhcEFnZW50Ojpn
YyhFcnJvclN0cmluZyYKIHsKICAgICBWTSYgdm0gPSBtX2Vudmlyb25tZW50LnZtKCk7CiAgICAg
SlNMb2NrSG9sZGVyIGxvY2sodm0pOwotICAgIHNhbml0aXplU3RhY2tGb3JWTSgmdm0pOworICAg
IHNhbml0aXplU3RhY2tGb3JWTSh2bSk7CiAgICAgdm0uaGVhcC5jb2xsZWN0Tm93KFN5bmMsIENv
bGxlY3Rpb25TY29wZTo6RnVsbCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnRlcnByZXRlci9GcmFtZVRyYWNlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW50ZXJwcmV0ZXIvRnJhbWVUcmFjZXJzLmgJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9GcmFtZVRyYWNlcnMuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTgzLDEzICs4MywxMyBAQCBBTFdBWVNfSU5MSU5FIHN0YXRpYyB2b2lkIGFzc2Vy
dFN0YWNrUG9pCiAKIGNsYXNzIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB7CiBwdWJsaWM6Ci0gICAg
QUxXQVlTX0lOTElORSBOYXRpdmVDYWxsRnJhbWVUcmFjZXIoVk0qIHZtLCBDYWxsRnJhbWUqIGNh
bGxGcmFtZSkKKyAgICBBTFdBWVNfSU5MSU5FIE5hdGl2ZUNhbGxGcmFtZVRyYWNlcihWTSYgdm0s
IENhbGxGcmFtZSogY2FsbEZyYW1lKQogICAgIHsKLSAgICAgICAgQVNTRVJUKHZtKTsKKyAgICAg
ICAgQVNTRVJUKCZ2bSk7CiAgICAgICAgIEFTU0VSVChjYWxsRnJhbWUpOwotICAgICAgICBBU1NF
UlQocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oY2FsbEZyYW1lKSA8IHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCo+KHZtLT50b3BFbnRyeUZyYW1lKSk7CisgICAgICAgIEFTU0VSVChyZWludGVycHJldF9j
YXN0PHZvaWQqPihjYWxsRnJhbWUpIDwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4odm0udG9wRW50
cnlGcmFtZSkpOwogICAgICAgICBhc3NlcnRTdGFja1BvaW50ZXJJc0FsaWduZWQoKTsKLSAgICAg
ICAgdm0tPnRvcENhbGxGcmFtZSA9IGNhbGxGcmFtZTsKKyAgICAgICAgdm0udG9wQ2FsbEZyYW1l
ID0gY2FsbEZyYW1lOwogICAgIH0KIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNjYyLDcgKzY2Miw3IEBAIHZvaWQgSW50ZXJwcmV0ZXI6Om5vdGlmeURlYnVn
Z2VyT2ZFeGNlcHQKIEpTVmFsdWUgSW50ZXJwcmV0ZXI6OmV4ZWN1dGVQcm9ncmFtKGNvbnN0IFNv
dXJjZUNvZGUmIHNvdXJjZSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTT2JqZWN0KiB0aGlzT2Jq
KQogewogICAgIEpTU2NvcGUqIHNjb3BlID0gdGhpc09iai0+Z2xvYmFsT2JqZWN0KCktPmdsb2Jh
bFNjb3BlKCk7Ci0gICAgVk0mIHZtID0gKnNjb3BlLT52bSgpOworICAgIFZNJiB2bSA9IHNjb3Bl
LT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwog
CiAgICAgUHJvZ3JhbUV4ZWN1dGFibGUqIHByb2dyYW0gPSBQcm9ncmFtRXhlY3V0YWJsZTo6Y3Jl
YXRlKGNhbGxGcmFtZSwgc291cmNlKTsKQEAgLTk4Nyw3ICs5ODcsNyBAQCBKU09iamVjdCogSW50
ZXJwcmV0ZXI6OmV4ZWN1dGVDb25zdHJ1Y3QoCiAKIENhbGxGcmFtZUNsb3N1cmUgSW50ZXJwcmV0
ZXI6OnByZXBhcmVGb3JSZXBlYXRDYWxsKEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25FeGVj
dXRhYmxlLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgUHJvdG9DYWxsRnJhbWUqIHByb3RvQ2FsbEZy
YW1lLCBKU0Z1bmN0aW9uKiBmdW5jdGlvbiwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
LCBKU1Njb3BlKiBzY29wZSwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKLSAgICBWTSYgdm0gPSAq
c2NvcGUtPnZtKCk7CisgICAgVk0mIHZtID0gc2NvcGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgdGhyb3dTY29wZS5hc3NlcnROb0V4
Y2VwdGlvbigpOwogICAgIApAQCAtMTAxMiw3ICsxMDEyLDcgQEAgQ2FsbEZyYW1lQ2xvc3VyZSBJ
bnRlcnByZXRlcjo6cHJlcGFyZUZvcgogCiBKU1ZhbHVlIEludGVycHJldGVyOjpleGVjdXRlKEV2
YWxFeGVjdXRhYmxlKiBldmFsLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNWYWx1ZSB0aGlzVmFs
dWUsIEpTU2NvcGUqIHNjb3BlKQogewotICAgIFZNJiB2bSA9ICpzY29wZS0+dm0oKTsKKyAgICBW
TSYgdm0gPSBzY29wZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKIAogICAgIEFTU0VSVCgmdm0gPT0gJmNhbGxGcmFtZS0+dm0oKSk7CkBAIC0x
MTYxLDcgKzExNjEsNyBAQCBKU1ZhbHVlIEludGVycHJldGVyOjpleGVjdXRlKEV2YWxFeGVjdXRh
CiAKIEpTVmFsdWUgSW50ZXJwcmV0ZXI6OmV4ZWN1dGVNb2R1bGVQcm9ncmFtKE1vZHVsZVByb2dy
YW1FeGVjdXRhYmxlKiBleGVjdXRhYmxlLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNNb2R1bGVF
bnZpcm9ubWVudCogc2NvcGUpCiB7Ci0gICAgVk0mIHZtID0gKnNjb3BlLT52bSgpOworICAgIFZN
JiB2bSA9IHNjb3BlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogCiAgICAgQVNTRVJUKCZ2bSA9PSAmY2FsbEZyYW1lLT52bSgpKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3Iu
Y3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0
ZXIvU3RhY2tWaXNpdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3NCw3ICsyNzQsNyBAQCBP
cHRpb25hbDxSZWdpc3RlckF0T2Zmc2V0TGlzdD4gU3RhY2tWaXNpCiAgICAgfQogCiAgICAgaWYg
KGNhbGxlZSgpLmlzQ2VsbCgpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBqc1RvV2FzbUlDQ2FsbGVl
ID0ganNEeW5hbWljQ2FzdDxKU1RvV2FzbUlDQ2FsbGVlKj4oKmNhbGxlZSgpLmFzQ2VsbCgpLT52
bSgpLCBjYWxsZWUoKS5hc0NlbGwoKSkpCisgICAgICAgIGlmIChhdXRvKiBqc1RvV2FzbUlDQ2Fs
bGVlID0ganNEeW5hbWljQ2FzdDxKU1RvV2FzbUlDQ2FsbGVlKj4oY2FsbGVlKCkuYXNDZWxsKCkt
PnZtKCksIGNhbGxlZSgpLmFzQ2VsbCgpKSkKICAgICAgICAgICAgIHJldHVybiBqc1RvV2FzbUlD
Q2FsbGVlLT5mdW5jdGlvbigpLT51c2VkQ2FsbGVlU2F2ZVJlZ2lzdGVycygpOwogICAgIH0KICNl
bmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCkBAIC00MTQsNyArNDE0LDcgQEAgdm9pZCBTdGFj
a1Zpc2l0b3I6OkZyYW1lOjpjb21wdXRlTGluZUFuZAogICAgIGxpbmUgPSBkaXZvdExpbmUgKyBj
b2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLT5maXJzdExpbmUoKTsKICAgICBjb2x1bW4gPSBk
aXZvdENvbHVtbiArIChkaXZvdExpbmUgPyAxIDogY29kZUJsb2NrLT5maXJzdExpbmVDb2x1bW5P
ZmZzZXQoKSk7CiAKLSAgICBpZiAoT3B0aW9uYWw8aW50PiBvdmVycmlkZUxpbmVOdW1iZXIgPSBj
b2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLT5vdmVycmlkZUxpbmVOdW1iZXIoKmNvZGVCbG9j
ay0+dm0oKSkpCisgICAgaWYgKE9wdGlvbmFsPGludD4gb3ZlcnJpZGVMaW5lTnVtYmVyID0gY29k
ZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKS0+b3ZlcnJpZGVMaW5lTnVtYmVyKGNvZGVCbG9jay0+
dm0oKSkpCiAgICAgICAgIGxpbmUgPSBvdmVycmlkZUxpbmVOdW1iZXIudmFsdWUoKTsKIH0KIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAko
cmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhl
bHBlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MzQsNyArNjM0LDcgQEAgdm9pZCBBc3NlbWJs
eUhlbHBlcnM6OmVtaXREdW1iVmlydHVhbENhbAogICAgIENhbGwgY2FsbCA9IG5lYXJDYWxsKCk7
CiAgICAgYWRkTGlua1Rhc2soCiAgICAgICAgIFs9LCAmdm1dIChMaW5rQnVmZmVyJiBsaW5rQnVm
ZmVyKSB7Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQ
dHJUYWc+IHZpcnR1YWxUaHVuayA9IHZpcnR1YWxUaHVua0Zvcigmdm0sICppbmZvKTsKKyAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91dGluZVB0clRhZz4gdmlydHVh
bFRodW5rID0gdmlydHVhbFRodW5rRm9yKHZtLCAqaW5mbyk7CiAgICAgICAgICAgICBpbmZvLT5z
ZXRTbG93U3R1YihjcmVhdGVKSVRTdHViUm91dGluZSh2aXJ0dWFsVGh1bmssIHZtLCBudWxscHRy
LCB0cnVlKSk7CiAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgQ29kZUxvY2F0aW9u
TGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KHZpcnR1YWxUaHVuay5jb2RlKCkpKTsKICAgICAg
ICAgfSk7CkBAIC03MjcsNyArNzI3LDcgQEAgdm9pZCBBc3NlbWJseUhlbHBlcnM6OmVtaXRDb252
ZXJ0VmFsdWVUbwogICAgIGRvbmUuYXBwZW5kKGp1bXAoKSk7CiAKICAgICBpc1N0cmluZy5saW5r
KHRoaXMpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihqc0VtcHR5U3RyaW5nKCZ2bSkpLCByZXN1
bHQpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihqc0VtcHR5U3RyaW5nKHZtKSksIHJlc3VsdCk7
CiAgICAgY29tcGFyZVB0cihpbnZlcnQgPyBFcXVhbCA6IE5vdEVxdWFsLCB2YWx1ZS5wYXlsb2Fk
R1BSKCksIHJlc3VsdCwgcmVzdWx0KTsKICAgICBkb25lLmFwcGVuZChqdW1wKCkpOwogCkBAIC04
MTcsNyArODE3LDcgQEAgQXNzZW1ibHlIZWxwZXJzOjpKdW1wTGlzdCBBc3NlbWJseUhlbHBlcgog
ICAgIH0KIAogICAgIGlzU3RyaW5nLmxpbmsodGhpcyk7Ci0gICAgdHJ1dGh5LmFwcGVuZChicmFu
Y2hQdHIoaW52ZXJ0ID8gRXF1YWwgOiBOb3RFcXVhbCwgdmFsdWUucGF5bG9hZEdQUigpLCBUcnVz
dGVkSW1tUHRyKGpzRW1wdHlTdHJpbmcoJnZtKSkpKTsKKyAgICB0cnV0aHkuYXBwZW5kKGJyYW5j
aFB0cihpbnZlcnQgPyBFcXVhbCA6IE5vdEVxdWFsLCB2YWx1ZS5wYXlsb2FkR1BSKCksIFRydXN0
ZWRJbW1QdHIoanNFbXB0eVN0cmluZyh2bSkpKSk7CiAgICAgZG9uZS5hcHBlbmQoanVtcCgpKTsK
IAogICAgIGlzQmlnSW50LmxpbmsodGhpcyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0Fzc2VtYmx5SGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTYyLDcg
KzYyLDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIENvZGVCbG9jayogY29kZUJsb2NrKCkgeyBy
ZXR1cm4gbV9jb2RlQmxvY2s7IH0KLSAgICBWTSYgdm0oKSB7IHJldHVybiAqbV9jb2RlQmxvY2st
PnZtKCk7IH0KKyAgICBWTSYgdm0oKSB7IHJldHVybiBtX2NvZGVCbG9jay0+dm0oKTsgfQogICAg
IEFzc2VtYmxlclR5cGVfVCYgYXNzZW1ibGVyKCkgeyByZXR1cm4gbV9hc3NlbWJsZXI7IH0KIAog
ICAgIHZvaWQgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklULmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAwOC0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwOC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzQsMTIgKzc0LDEyIEBAIHZvaWQgY3Rp
UGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkEKICAgICAgICAgbmV3Q2FsbGVlRnVuY3Rp
b24ucmV0YWdnZWQ8T3BlcmF0aW9uUHRyVGFnPigpKTsKIH0KIAotSklUOjpKSVQoVk0qIHZtLCBD
b2RlQmxvY2sqIGNvZGVCbG9jaywgdW5zaWduZWQgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVPZmZzZXQp
Ci0gICAgOiBKU0ludGVyZmFjZUpJVCh2bSwgY29kZUJsb2NrKQotICAgICwgbV9pbnRlcnByZXRl
cih2bS0+aW50ZXJwcmV0ZXIpCitKSVQ6OkpJVChWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2Nr
LCB1bnNpZ25lZCBsb29wT1NSRW50cnlCeXRlY29kZU9mZnNldCkKKyAgICA6IEpTSW50ZXJmYWNl
SklUKCZ2bSwgY29kZUJsb2NrKQorICAgICwgbV9pbnRlcnByZXRlcih2bS5pbnRlcnByZXRlcikK
ICAgICAsIG1fbGFiZWxzKGNvZGVCbG9jayA/IGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuc2l6
ZSgpIDogMCkKICAgICAsIG1fYnl0ZWNvZGVPZmZzZXQoc3RkOjpudW1lcmljX2xpbWl0czx1bnNp
Z25lZD46Om1heCgpKQotICAgICwgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIoKnZtKQorICAg
ICwgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIodm0pCiAgICAgLCBtX2NhbkJlT3B0aW1pemVk
KGZhbHNlKQogICAgICwgbV9zaG91bGRFbWl0UHJvZmlsaW5nKGZhbHNlKQogICAgICwgbV9zaG91
bGRVc2VJbmRleE1hc2tpbmcoT3B0aW9uczo6ZW5hYmxlU3BlY3RyZU1pdGlnYXRpb25zKCkpCkBA
IC0xMDIsNyArMTAyLDcgQEAgdm9pZCBKSVQ6OmVtaXRFbnRlck9wdGltaXphdGlvbkNoZWNrKCkK
ICAgICBza2lwT3B0aW1pemUuYXBwZW5kKGJyYW5jaEFkZDMyKFNpZ25lZCwgVHJ1c3RlZEltbTMy
KE9wdGlvbnM6OmV4ZWN1dGlvbkNvdW50ZXJJbmNyZW1lbnRGb3JFbnRyeSgpKSwgQWJzb2x1dGVB
ZGRyZXNzKG1fY29kZUJsb2NrLT5hZGRyZXNzT2ZKSVRFeGVjdXRlQ291bnRlcigpKSkpOwogICAg
IEFTU0VSVCghbV9ieXRlY29kZU9mZnNldCk7CiAKLSAgICBjb3B5Q2FsbGVlU2F2ZXNGcm9tRnJh
bWVPclJlZ2lzdGVyVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0oKS0+dG9wRW50cnlG
cmFtZSk7CisgICAgY29weUNhbGxlZVNhdmVzRnJvbUZyYW1lT3JSZWdpc3RlclRvRW50cnlGcmFt
ZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCkudG9wRW50cnlGcmFtZSk7CiAKICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbk9wdGltaXplLCBtX2J5dGVjb2RlT2Zmc2V0KTsKICAgICBza2lwT3B0aW1p
emUuYXBwZW5kKGJyYW5jaFRlc3RQdHIoWmVybywgcmV0dXJuVmFsdWVHUFIpKTsKQEAgLTE5MSw3
ICsxOTEsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAKICAgICBtX2Nh
bGxMaW5rSW5mb0luZGV4ID0gMDsKIAotICAgIFZNJiB2bSA9ICptX2NvZGVCbG9jay0+dm0oKTsK
KyAgICBWTSYgdm0gPSBtX2NvZGVCbG9jay0+dm0oKTsKICAgICB1bnNpZ25lZCBzdGFydEJ5dGVj
b2RlT2Zmc2V0ID0gMDsKICAgICBpZiAobV9sb29wT1NSRW50cnlCeXRlY29kZU9mZnNldCAmJiAo
bV9jb2RlQmxvY2stPmluaGVyaXRzPFByb2dyYW1Db2RlQmxvY2s+KHZtKSB8fCBtX2NvZGVCbG9j
ay0+aW5oZXJpdHM8TW9kdWxlUHJvZ3JhbUNvZGVCbG9jaz4odm0pKSkgewogICAgICAgICAvLyBX
ZSBjYW4gb25seSBkbyB0aGlzIG9wdGltaXphdGlvbiBiZWNhdXNlIHdlIGV4ZWN1dGUgUHJvZ3Jh
bUNvZGVCbG9jaydzIGV4YWN0bHkgb25jZS4KQEAgLTkzMywxMSArOTMzLDExIEBAIHZvaWQgSklU
Ojpwcml2YXRlQ29tcGlsZUV4Y2VwdGlvbkhhbmRsZXIKICAgICBpZiAoIW1fZXhjZXB0aW9uQ2hl
Y2tzV2l0aENhbGxGcmFtZVJvbGxiYWNrLmVtcHR5KCkpIHsKICAgICAgICAgbV9leGNlcHRpb25D
aGVja3NXaXRoQ2FsbEZyYW1lUm9sbGJhY2subGluayh0aGlzKTsKIAotICAgICAgICBjb3B5Q2Fs
bGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgpLT50b3BFbnRyeUZyYW1l
KTsKKyAgICAgICAgY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIo
dm0oKS50b3BFbnRyeUZyYW1lKTsKIAogICAgICAgICAvLyBsb29rdXBFeGNlcHRpb25IYW5kbGVy
RnJvbUNhbGxlckZyYW1lIGlzIHBhc3NlZCB0d28gYXJndW1lbnRzLCB0aGUgVk0gYW5kIHRoZSBl
eGVjICh0aGUgQ2FsbEZyYW1lKikuCiAKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKHZtKCkp
LCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoJnZt
KCkpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwogICAgICAgICBtb3ZlKEdQUkluZm86OmNhbGxG
cmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOwogCiAjaWYgQ1BVKFg4NikKQEAg
LTk0NiwxNyArOTQ2LDE3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUV4Y2VwdGlvbkhhbmRs
ZXIKICAgICAgICAgcG9rZShHUFJJbmZvOjphcmd1bWVudEdQUjEsIDEpOwogI2VuZGlmCiAgICAg
ICAgIG1fY2FsbHMuYXBwZW5kKENhbGxSZWNvcmQoY2FsbChPcGVyYXRpb25QdHJUYWcpLCBzdGQ6
Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCksIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0
clRhZz4obG9va3VwRXhjZXB0aW9uSGFuZGxlckZyb21DYWxsZXJGcmFtZSkpKTsKLSAgICAgICAg
anVtcFRvRXhjZXB0aW9uSGFuZGxlcigqdm0oKSk7CisgICAgICAgIGp1bXBUb0V4Y2VwdGlvbkhh
bmRsZXIodm0oKSk7CiAgICAgfQogCiAgICAgaWYgKCFtX2V4Y2VwdGlvbkNoZWNrcy5lbXB0eSgp
IHx8IG1fYnlWYWxDb21waWxhdGlvbkluZm8uc2l6ZSgpKSB7CiAgICAgICAgIG1fZXhjZXB0aW9u
SGFuZGxlciA9IGxhYmVsKCk7CiAgICAgICAgIG1fZXhjZXB0aW9uQ2hlY2tzLmxpbmsodGhpcyk7
CiAKLSAgICAgICAgY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIo
dm0oKS0+dG9wRW50cnlGcmFtZSk7CisgICAgICAgIGNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFt
ZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCkudG9wRW50cnlGcmFtZSk7CiAKICAgICAgICAgLy8gbG9v
a3VwRXhjZXB0aW9uSGFuZGxlciBpcyBwYXNzZWQgdHdvIGFyZ3VtZW50cywgdGhlIFZNIGFuZCB0
aGUgZXhlYyAodGhlIENhbGxGcmFtZSopLgotICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIodm0o
KSksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cigm
dm0oKSksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CiAgICAgICAgIG1vdmUoR1BSSW5mbzo6Y2Fs
bEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CiAKICNpZiBDUFUoWDg2KQpA
QCAtOTY1LDcgKzk2NSw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUV4Y2VwdGlvbkhhbmRs
ZXIKICAgICAgICAgcG9rZShHUFJJbmZvOjphcmd1bWVudEdQUjEsIDEpOwogI2VuZGlmCiAgICAg
ICAgIG1fY2FsbHMuYXBwZW5kKENhbGxSZWNvcmQoY2FsbChPcGVyYXRpb25QdHJUYWcpLCBzdGQ6
Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCksIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0
clRhZz4obG9va3VwRXhjZXB0aW9uSGFuZGxlcikpKTsKLSAgICAgICAganVtcFRvRXhjZXB0aW9u
SGFuZGxlcigqdm0oKSk7CisgICAgICAgIGp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIodm0oKSk7CiAg
ICAgfQogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlzaW9uIDI0OTEyOCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0x
OTIsNDEgKzE5Miw0MyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RhdGljIGNvbnN0IGlu
dCBwYXRjaFB1dEJ5SWREZWZhdWx0T2Zmc2V0ID0gMjU2OwogCiAgICAgcHVibGljOgotICAgICAg
ICBKSVQoVk0qLCBDb2RlQmxvY2sqID0gMCwgdW5zaWduZWQgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVP
ZmZzZXQgPSAwKTsKKyAgICAgICAgSklUKFZNJiwgQ29kZUJsb2NrKiA9IDAsIHVuc2lnbmVkIGxv
b3BPU1JFbnRyeUJ5dGVjb2RlT2Zmc2V0ID0gMCk7CiAgICAgICAgIH5KSVQoKTsKIAorICAgICAg
ICBWTSYgdm0oKSB7IHJldHVybiAqSlNJbnRlcmZhY2VKSVQ6OnZtKCk7IH0KKwogICAgICAgICB2
b2lkIGNvbXBpbGVXaXRob3V0TGlua2luZyhKSVRDb21waWxhdGlvbkVmZm9ydCk7CiAgICAgICAg
IENvbXBpbGF0aW9uUmVzdWx0IGxpbmsoKTsKIAogICAgICAgICB2b2lkIGRvTWFpblRocmVhZFBy
ZXBhcmF0aW9uQmVmb3JlQ29tcGlsZSgpOwogICAgICAgICAKLSAgICAgICAgc3RhdGljIENvbXBp
bGF0aW9uUmVzdWx0IGNvbXBpbGUoVk0qIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUQ29t
cGlsYXRpb25FZmZvcnQgZWZmb3J0LCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IDApCisgICAg
ICAgIHN0YXRpYyBDb21waWxhdGlvblJlc3VsdCBjb21waWxlKFZNJiB2bSwgQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCwgdW5zaWduZWQgYnl0ZWNvZGVP
ZmZzZXQgPSAwKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gSklUKHZtLCBjb2RlQmxv
Y2ssIGJ5dGVjb2RlT2Zmc2V0KS5wcml2YXRlQ29tcGlsZShlZmZvcnQpOwogICAgICAgICB9CiAg
ICAgICAgIAotICAgICAgICBzdGF0aWMgdm9pZCBjb21waWxlR2V0QnlWYWwoY29uc3QgQ29uY3Vy
cmVudEpTTG9ja2VyJiBsb2NrZXIsIFZNKiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5VmFs
SW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEpJVEFycmF5
TW9kZSBhcnJheU1vZGUpCisgICAgICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVHZXRCeVZhbChjb25z
dCBDb25jdXJyZW50SlNMb2NrZXImIGxvY2tlciwgVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9j
aywgQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywg
SklUQXJyYXlNb2RlIGFycmF5TW9kZSkKICAgICAgICAgewogICAgICAgICAgICAgSklUIGppdCh2
bSwgY29kZUJsb2NrKTsKICAgICAgICAgICAgIGppdC5tX2J5dGVjb2RlT2Zmc2V0ID0gYnlWYWxJ
bmZvLT5ieXRlY29kZUluZGV4OwogICAgICAgICAgICAgaml0LnByaXZhdGVDb21waWxlR2V0QnlW
YWwobG9ja2VyLCBieVZhbEluZm8sIHJldHVybkFkZHJlc3MsIGFycmF5TW9kZSk7CiAgICAgICAg
IH0KIAotICAgICAgICBzdGF0aWMgdm9pZCBjb21waWxlR2V0QnlWYWxXaXRoQ2FjaGVkSWQoVk0q
IHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFk
ZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKQor
ICAgICAgICBzdGF0aWMgdm9pZCBjb21waWxlR2V0QnlWYWxXaXRoQ2FjaGVkSWQoVk0mIHZtLCBD
b2RlQmxvY2sqIGNvZGVCbG9jaywgQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQ
dHIgcmV0dXJuQWRkcmVzcywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKQogICAgICAg
ICB7CiAgICAgICAgICAgICBKSVQgaml0KHZtLCBjb2RlQmxvY2spOwogICAgICAgICAgICAgaml0
Lm1fYnl0ZWNvZGVPZmZzZXQgPSBieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXg7CiAgICAgICAgICAg
ICBqaXQucHJpdmF0ZUNvbXBpbGVHZXRCeVZhbFdpdGhDYWNoZWRJZChieVZhbEluZm8sIHJldHVy
bkFkZHJlc3MsIHByb3BlcnR5TmFtZSk7CiAgICAgICAgIH0KIAotICAgICAgICBzdGF0aWMgdm9p
ZCBjb21waWxlUHV0QnlWYWwoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIsIFZNKiB2
bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRy
ZXNzUHRyIHJldHVybkFkZHJlc3MsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUpCisgICAgICAgIHN0
YXRpYyB2b2lkIGNvbXBpbGVQdXRCeVZhbChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImIGxvY2tl
ciwgVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnlWYWxJbmZvKiBieVZhbEluZm8sIFJl
dHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlNb2RlIGFycmF5TW9kZSkKICAg
ICAgICAgewogICAgICAgICAgICAgSklUIGppdCh2bSwgY29kZUJsb2NrKTsKICAgICAgICAgICAg
IGppdC5tX2J5dGVjb2RlT2Zmc2V0ID0gYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4OwogICAgICAg
ICAgICAgaml0LnByaXZhdGVDb21waWxlUHV0QnlWYWw8T3BQdXRCeVZhbD4obG9ja2VyLCBieVZh
bEluZm8sIHJldHVybkFkZHJlc3MsIGFycmF5TW9kZSk7CiAgICAgICAgIH0KICAgICAgICAgCi0g
ICAgICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVEaXJlY3RQdXRCeVZhbChjb25zdCBDb25jdXJyZW50
SlNMb2NrZXImIGxvY2tlciwgVk0qIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnlWYWxJbmZv
KiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlNb2Rl
IGFycmF5TW9kZSkKKyAgICAgICAgc3RhdGljIHZvaWQgY29tcGlsZURpcmVjdFB1dEJ5VmFsKGNv
bnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBWTSYgdm0sIENvZGVCbG9jayogY29kZUJs
b2NrLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNz
LCBKSVRBcnJheU1vZGUgYXJyYXlNb2RlKQogICAgICAgICB7CiAgICAgICAgICAgICBKSVQgaml0
KHZtLCBjb2RlQmxvY2spOwogICAgICAgICAgICAgaml0Lm1fYnl0ZWNvZGVPZmZzZXQgPSBieVZh
bEluZm8tPmJ5dGVjb2RlSW5kZXg7CkBAIC0yMzQsMTQgKzIzNiwxNCBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgfQogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotICAgICAgICBz
dGF0aWMgdm9pZCBjb21waWxlUHV0QnlWYWxXaXRoQ2FjaGVkSWQoVk0qIHZtLCBDb2RlQmxvY2sq
IGNvZGVCbG9jaywgQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJu
QWRkcmVzcywgUHV0S2luZCBwdXRLaW5kLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUp
CisgICAgICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVQdXRCeVZhbFdpdGhDYWNoZWRJZChWTSYgdm0s
IENvZGVCbG9jayogY29kZUJsb2NrLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVz
c1B0ciByZXR1cm5BZGRyZXNzLCBQdXRLaW5kIHB1dEtpbmQsIGNvbnN0IElkZW50aWZpZXImIHBy
b3BlcnR5TmFtZSkKICAgICAgICAgewogICAgICAgICAgICAgSklUIGppdCh2bSwgY29kZUJsb2Nr
KTsKICAgICAgICAgICAgIGppdC5tX2J5dGVjb2RlT2Zmc2V0ID0gYnlWYWxJbmZvLT5ieXRlY29k
ZUluZGV4OwogICAgICAgICAgICAgaml0LnByaXZhdGVDb21waWxlUHV0QnlWYWxXaXRoQ2FjaGVk
SWQ8T3A+KGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywgcHV0S2luZCwgcHJvcGVydHlOYW1lKTsK
ICAgICAgICAgfQogCi0gICAgICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVIYXNJbmRleGVkUHJvcGVy
dHkoVk0qIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnlWYWxJbmZvKiBieVZhbEluZm8sIFJl
dHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlNb2RlIGFycmF5TW9kZSkKKyAg
ICAgICAgc3RhdGljIHZvaWQgY29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShWTSYgdm0sIENvZGVC
bG9jayogY29kZUJsb2NrLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciBy
ZXR1cm5BZGRyZXNzLCBKSVRBcnJheU1vZGUgYXJyYXlNb2RlKQogICAgICAgICB7CiAgICAgICAg
ICAgICBKSVQgaml0KHZtLCBjb2RlQmxvY2spOwogICAgICAgICAgICAgaml0Lm1fYnl0ZWNvZGVP
ZmZzZXQgPSBieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXg7CkBAIC0yOTUsMTIgKzI5NywxMiBAQCBu
YW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2b2lkIGV4Y2VwdGlvbkNoZWNrKCkKICAgICAgICAg
ewotICAgICAgICAgICAgbV9leGNlcHRpb25DaGVja3MuYXBwZW5kKGVtaXRFeGNlcHRpb25DaGVj
aygqdm0oKSkpOworICAgICAgICAgICAgbV9leGNlcHRpb25DaGVja3MuYXBwZW5kKGVtaXRFeGNl
cHRpb25DaGVjayh2bSgpKSk7CiAgICAgICAgIH0KIAogICAgICAgICB2b2lkIGV4Y2VwdGlvbkNo
ZWNrV2l0aENhbGxGcmFtZVJvbGxiYWNrKCkKICAgICAgICAgewotICAgICAgICAgICAgbV9leGNl
cHRpb25DaGVja3NXaXRoQ2FsbEZyYW1lUm9sbGJhY2suYXBwZW5kKGVtaXRFeGNlcHRpb25DaGVj
aygqdm0oKSkpOworICAgICAgICAgICAgbV9leGNlcHRpb25DaGVja3NXaXRoQ2FsbEZyYW1lUm9s
bGJhY2suYXBwZW5kKGVtaXRFeGNlcHRpb25DaGVjayh2bSgpKSk7CiAgICAgICAgIH0KIAogICAg
ICAgICB2b2lkIHByaXZhdGVDb21waWxlRXhjZXB0aW9uSGFuZGxlcnMoKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAJKHJldmlzaW9uIDI0OTEyOCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjU0LDcgKzI1NCw3IEBAIHZvaWQgSklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2Fz
ZShjb25zdCAKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHJlZ2lzdGVyT2Zmc2V0ICogc2l6ZW9m
KFJlZ2lzdGVyKSArIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSksIGNhbGxGcmFtZVJlZ2lzdGVy
LCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAKICAgICBlbWl0TG9hZChjYWxsZWUsIHJlZ1QxLCBy
ZWdUMCk7Ci0gICAgZW1pdER1bWJWaXJ0dWFsQ2FsbCgqdm0oKSwgaW5mbyk7CisgICAgZW1pdER1
bWJWaXJ0dWFsQ2FsbCh2bSgpLCBpbmZvKTsKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNr
UG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZy
YW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRl
ckFsaWdubWVudCgpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAJ
KHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE2Miw3ICsxNjIsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZUNh
bGxFdmFsU2xvd0Nhc2UoY29uc3QgCiAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihyZWdpc3Rlck9m
ZnNldCAqIHNpemVvZihSZWdpc3RlcikgKyBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpLCBjYWxs
RnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogCiAgICAgbG9hZDY0KEFkZHJl
c3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIHNpemVvZihSZWdpc3RlcikgKiBDYWxsRnJhbWVTbG90
OjpjYWxsZWUgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpLCByZWdUMCk7Ci0gICAgZW1pdER1
bWJWaXJ0dWFsQ2FsbCgqdm0oKSwgaW5mbyk7CisgICAgZW1pdER1bWJWaXJ0dWFsQ2FsbCh2bSgp
LCBpbmZvKTsKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvciht
X2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNr
UG9pbnRlclJlZ2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEV4Y2VwdGlvbnMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURXhjZXB0aW9ucy5jcHAJKHJldmlz
aW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURXhjZXB0aW9ucy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDEyLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEyLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC00MywyMiArNDMsMjIgQEAKIAogbmFtZXNwYWNlIEpTQyB7
CiAKLXZvaWQgZ2VuZXJpY1Vud2luZChWTSogdm0sIEV4ZWNTdGF0ZSogY2FsbEZyYW1lKQordm9p
ZCBnZW5lcmljVW53aW5kKFZNJiB2bSwgRXhlY1N0YXRlKiBjYWxsRnJhbWUpCiB7Ci0gICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUoKnZtKTsKLSAgICBDYWxsRnJhbWUqIHRvcEpT
Q2FsbEZyYW1lID0gdm0tPnRvcEpTQ2FsbEZyYW1lKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfQ0FUQ0hfU0NPUEUodm0pOworICAgIENhbGxGcmFtZSogdG9wSlNDYWxsRnJhbWUgPSB2bS50
b3BKU0NhbGxGcmFtZSgpOwogICAgIGlmIChPcHRpb25zOjpicmVha09uVGhyb3coKSkgewogICAg
ICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IHRvcEpTQ2FsbEZyYW1lLT5jb2RlQmxvY2soKTsK
ICAgICAgICAgZGF0YUxvZygiSW4gY2FsbCBmcmFtZSAiLCBSYXdQb2ludGVyKHRvcEpTQ2FsbEZy
YW1lKSwgIiBmb3IgY29kZSBibG9jayAiLCBjb2RlQmxvY2ssICJcbiIpOwogICAgICAgICBDUkFT
SCgpOwogICAgIH0KICAgICAKLSAgICBpZiAoYXV0byogc2hhZG93Q2hpY2tlbiA9IHZtLT5zaGFk
b3dDaGlja2VuKCkpCi0gICAgICAgIHNoYWRvd0NoaWNrZW4tPmxvZygqdm0sIHRvcEpTQ2FsbEZy
YW1lLCBTaGFkb3dDaGlja2VuOjpQYWNrZXQ6OnRocm93UGFja2V0KCkpOworICAgIGlmIChhdXRv
KiBzaGFkb3dDaGlja2VuID0gdm0uc2hhZG93Q2hpY2tlbigpKQorICAgICAgICBzaGFkb3dDaGlj
a2VuLT5sb2codm0sIHRvcEpTQ2FsbEZyYW1lLCBTaGFkb3dDaGlja2VuOjpQYWNrZXQ6OnRocm93
UGFja2V0KCkpOwogCiAgICAgRXhjZXB0aW9uKiBleGNlcHRpb24gPSBzY29wZS5leGNlcHRpb24o
KTsKICAgICBSRUxFQVNFX0FTU0VSVChleGNlcHRpb24pOwotICAgIEhhbmRsZXJJbmZvKiBoYW5k
bGVyID0gdm0tPmludGVycHJldGVyLT51bndpbmQoKnZtLCBjYWxsRnJhbWUsIGV4Y2VwdGlvbik7
IC8vIFRoaXMgbWF5IHVwZGF0ZSBjYWxsRnJhbWUuCisgICAgSGFuZGxlckluZm8qIGhhbmRsZXIg
PSB2bS5pbnRlcnByZXRlci0+dW53aW5kKHZtLCBjYWxsRnJhbWUsIGV4Y2VwdGlvbik7IC8vIFRo
aXMgbWF5IHVwZGF0ZSBjYWxsRnJhbWUuCiAKICAgICB2b2lkKiBjYXRjaFJvdXRpbmU7CiAgICAg
Y29uc3QgSW5zdHJ1Y3Rpb24qIGNhdGNoUENGb3JJbnRlcnByZXRlciA9IG51bGxwdHI7CkBAIC04
NCwxMiArODQsMTIgQEAgdm9pZCBnZW5lcmljVW53aW5kKFZNKiB2bSwgRXhlY1N0YXRlKiBjYQog
ICAgIH0gZWxzZQogICAgICAgICBjYXRjaFJvdXRpbmUgPSBMTEludDo6Z2V0Q29kZVB0cjxFeGNl
cHRpb25IYW5kbGVyUHRyVGFnPihoYW5kbGVVbmNhdWdodEV4Y2VwdGlvbikuZXhlY3V0YWJsZUFk
ZHJlc3MoKTsKIAotICAgIEFTU0VSVChiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihjYWxsRnJhbWUp
IDwgYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4odm0tPnRvcEVudHJ5RnJhbWUpKTsKKyAgICBBU1NF
UlQoYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oY2FsbEZyYW1lKSA8IGJpdHdpc2VfY2FzdDx1aW50
cHRyX3Q+KHZtLnRvcEVudHJ5RnJhbWUpKTsKIAogICAgIGFzc2VydElzVGFnZ2VkV2l0aChjYXRj
aFJvdXRpbmUsIEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWcpOwotICAgIHZtLT5jYWxsRnJhbWVGb3JD
YXRjaCA9IGNhbGxGcmFtZTsKLSAgICB2bS0+dGFyZ2V0TWFjaGluZVBDRm9yVGhyb3cgPSBjYXRj
aFJvdXRpbmU7Ci0gICAgdm0tPnRhcmdldEludGVycHJldGVyUENGb3JUaHJvdyA9IGNhdGNoUENG
b3JJbnRlcnByZXRlcjsKKyAgICB2bS5jYWxsRnJhbWVGb3JDYXRjaCA9IGNhbGxGcmFtZTsKKyAg
ICB2bS50YXJnZXRNYWNoaW5lUENGb3JUaHJvdyA9IGNhdGNoUm91dGluZTsKKyAgICB2bS50YXJn
ZXRJbnRlcnByZXRlclBDRm9yVGhyb3cgPSBjYXRjaFBDRm9ySW50ZXJwcmV0ZXI7CiAgICAgCiAg
ICAgUkVMRUFTRV9BU1NFUlQoY2F0Y2hSb3V0aW5lKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklURXhjZXB0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklURXhjZXB0aW9ucy5oCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVEV4Y2VwdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMw
LDYgKzMwLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBFeGVjU3RhdGU7CiBjbGFzcyBWTTsK
IAotdm9pZCBnZW5lcmljVW53aW5kKFZNKiwgRXhlY1N0YXRlKik7Cit2b2lkIGdlbmVyaWNVbndp
bmQoVk0mLCBFeGVjU3RhdGUqKTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNw
cAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxp
bmVDYWNoZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMDUsNyArMTA1LDcgQEAg
SklUR2V0QnlJZEdlbmVyYXRvcjo6SklUR2V0QnlJZEdlbmVyYXRvcgogICAgIENvZGVCbG9jayog
Y29kZUJsb2NrLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXggY2FsbFNpdGUs
IGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLAogICAgIFVuaXF1ZWRTdHJpbmdJbXBs
KiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWVSZWdzIGJhc2UsIEpTVmFsdWVSZWdzIHZhbHVlLCBBY2Nl
c3NUeXBlIGFjY2Vzc1R5cGUpCiAgICAgOiBKSVRCeUlkR2VuZXJhdG9yKGNvZGVCbG9jaywgY29k
ZU9yaWdpbiwgY2FsbFNpdGUsIGFjY2Vzc1R5cGUsIHVzZWRSZWdpc3RlcnMsIGJhc2UsIHZhbHVl
KQotICAgICwgbV9pc0xlbmd0aEFjY2Vzcyhwcm9wZXJ0eU5hbWUgPT0gY29kZUJsb2NrLT52bSgp
LT5wcm9wZXJ0eU5hbWVzLT5sZW5ndGguaW1wbCgpKQorICAgICwgbV9pc0xlbmd0aEFjY2Vzcyhw
cm9wZXJ0eU5hbWUgPT0gY29kZUJsb2NrLT52bSgpLnByb3BlcnR5TmFtZXMtPmxlbmd0aC5pbXBs
KCkpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoYmFzZS5wYXlsb2FkR1BSKCkgIT0gdmFsdWUudGFn
R1BSKCkpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJf
NjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rl
czMyXzY0LmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGNvZGVzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zODAsNyArMzgwLDcgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfamZhbHNlKGNvbnN0IEluc3RydWN0aQogICAgIEdQUlJlZyBzY3Jh
dGNoMSA9IHJlZ1QyOwogICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QzOwogICAgIGJvb2wgc2hv
dWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKLSAgICBhZGRKdW1wKGJyYW5j
aElmRmFsc2V5KCp2bSgpLCB2YWx1ZSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJl
Z1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHRhcmdldCk7CisgICAgYWRkSnVtcChicmFuY2hJZkZhbHNleSh2bSgpLCB2
YWx1ZSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01h
c3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdl
dCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2p0cnVlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCkBAIC0zOTQsNyArMzk0LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfanRy
dWUoY29uc3QgSW5zdHJ1Y3RpbwogICAgIEpTVmFsdWVSZWdzIHZhbHVlKHJlZ1QxLCByZWdUMCk7
CiAgICAgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDI7CiAgICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVn
VDM7Ci0gICAgYWRkSnVtcChicmFuY2hJZlRydXRoeSgqdm0oKSwgdmFsdWUsIHNjcmF0Y2gxLCBz
Y3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOworICAgIGFkZEp1bXAo
YnJhbmNoSWZUcnV0aHkodm0oKSwgdmFsdWUsIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwg
ZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qZXFfbnVs
bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtODE1LDEwICs4MTUs
MTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdGhyb3coY29uc3QgSW5zdHJ1Y3RpbwogewogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVGhyb3c+KCk7CiAgICAgQVNT
RVJUKHJlZ1QwID09IHJldHVyblZhbHVlR1BSKTsKLSAgICBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5
RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgpLT50b3BFbnRyeUZyYW1lKTsKKyAgICBjb3B5Q2Fs
bGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgpLnRvcEVudHJ5RnJhbWUp
OwogICAgIGVtaXRMb2FkKGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCksIHJlZ1QxLCByZWdUMCk7
CiAgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uVGhyb3csIEpTVmFs
dWVSZWdzKHJlZ1QxLCByZWdUMCkpOwotICAgIGp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIoKnZtKCkp
OworICAgIGp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIodm0oKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0
X29wX3RvX251bWJlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAt
ODczLDcgKzg3Myw3IEBAIHZvaWQgSklUOjplbWl0X29wX2NhdGNoKGNvbnN0IEluc3RydWN0aW8K
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcENhdGNoPigp
OwogCi0gICAgcmVzdG9yZUNhbGxlZVNhdmVzRnJvbUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZl
cih2bSgpLT50b3BFbnRyeUZyYW1lKTsKKyAgICByZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tRW50cnlG
cmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCkudG9wRW50cnlGcmFtZSk7CiAKICAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIobV92bSksIHJlZ1QzKTsKICAgICAvLyBvcGVyYXRpb25UaHJvdyByZXR1cm5z
IHRoZSBjYWxsRnJhbWUgZm9yIHRoZSBoYW5kbGVyLgpAQCAtODg0LDcgKzg4NCw3IEBAIHZvaWQg
SklUOjplbWl0X29wX2NhdGNoKGNvbnN0IEluc3RydWN0aW8KIAogICAgIGNhbGxPcGVyYXRpb25O
b0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbkNoZWNrSWZFeGNlcHRpb25Jc1VuY2F0Y2hhYmxlQW5k
Tm90aWZ5UHJvZmlsZXIpOwogICAgIEp1bXAgaXNDYXRjaGFibGVFeGNlcHRpb24gPSBicmFuY2hU
ZXN0MzIoWmVybywgcmV0dXJuVmFsdWVHUFIpOwotICAgIGp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIo
KnZtKCkpOworICAgIGp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIodm0oKSk7CiAgICAgaXNDYXRjaGFi
bGVFeGNlcHRpb24ubGluayh0aGlzKTsKIAogICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX3ZtKSwg
cmVnVDMpOwpAQCAtMTM1OCwxNCArMTM1OCwxNCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wcm9maWxl
X3R5cGUoY29uc3QgSW5zCiAKIHZvaWQgSklUOjplbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl9w
cm9sb2d1ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIFJF
TEVBU0VfQVNTRVJUKHZtKCktPnNoYWRvd0NoaWNrZW4oKSk7CisgICAgUkVMRUFTRV9BU1NFUlQo
dm0oKS5zaGFkb3dDaGlja2VuKCkpOwogICAgIHVwZGF0ZVRvcENhbGxGcmFtZSgpOwogICAgIHN0
YXRpY19hc3NlcnQobm9uQXJnR1BSMCAhPSByZWdUMCAmJiBub25BcmdHUFIwICE9IHJlZ1QyLCAi
d2Ugd2lsbCBoYXZlIHByb2JsZW1zIGlmIHRoaXMgaXMgdHJ1ZS4iKTsKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcExvZ1NoYWRvd0NoaWNrZW5Qcm9sb2d1ZT4o
KTsKICAgICBHUFJSZWcgc2hhZG93UGFja2V0UmVnID0gcmVnVDA7CiAgICAgR1BSUmVnIHNjcmF0
Y2gxUmVnID0gbm9uQXJnR1BSMDsgLy8gVGhpcyBtdXN0IGJlIGEgbm9uLWFyZ3VtZW50IHJlZ2lz
dGVyLgogICAgIEdQUlJlZyBzY3JhdGNoMlJlZyA9IHJlZ1QyOwotICAgIGVuc3VyZVNoYWRvd0No
aWNrZW5QYWNrZXQoKnZtKCksIHNoYWRvd1BhY2tldFJlZywgc2NyYXRjaDFSZWcsIHNjcmF0Y2gy
UmVnKTsKKyAgICBlbnN1cmVTaGFkb3dDaGlja2VuUGFja2V0KHZtKCksIHNoYWRvd1BhY2tldFJl
Zywgc2NyYXRjaDFSZWcsIHNjcmF0Y2gyUmVnKTsKIAogICAgIHNjcmF0Y2gxUmVnID0gcmVnVDQ7
CiAgICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUub2Zmc2V0KCksIHJlZ1QzKTsK
QEAgLTEzNzQsMTQgKzEzNzQsMTQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlj
a2VuX3BybwogCiB2b2lkIEpJVDo6ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpbChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIFJFTEVBU0VfQVNTRVJU
KHZtKCktPnNoYWRvd0NoaWNrZW4oKSk7CisgICAgUkVMRUFTRV9BU1NFUlQodm0oKS5zaGFkb3dD
aGlja2VuKCkpOwogICAgIHVwZGF0ZVRvcENhbGxGcmFtZSgpOwogICAgIHN0YXRpY19hc3NlcnQo
bm9uQXJnR1BSMCAhPSByZWdUMCAmJiBub25BcmdHUFIwICE9IHJlZ1QyLCAid2Ugd2lsbCBoYXZl
IHByb2JsZW1zIGlmIHRoaXMgaXMgdHJ1ZS4iKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcExvZ1NoYWRvd0NoaWNrZW5UYWlsPigpOwogICAgIEdQUlJlZyBz
aGFkb3dQYWNrZXRSZWcgPSByZWdUMDsKICAgICBHUFJSZWcgc2NyYXRjaDFSZWcgPSBub25BcmdH
UFIwOyAvLyBUaGlzIG11c3QgYmUgYSBub24tYXJndW1lbnQgcmVnaXN0ZXIuCiAgICAgR1BSUmVn
IHNjcmF0Y2gyUmVnID0gcmVnVDI7Ci0gICAgZW5zdXJlU2hhZG93Q2hpY2tlblBhY2tldCgqdm0o
KSwgc2hhZG93UGFja2V0UmVnLCBzY3JhdGNoMVJlZywgc2NyYXRjaDJSZWcpOworICAgIGVuc3Vy
ZVNoYWRvd0NoaWNrZW5QYWNrZXQodm0oKSwgc2hhZG93UGFja2V0UmVnLCBzY3JhdGNoMVJlZywg
c2NyYXRjaDJSZWcpOwogICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3RoaXNWYWx1ZS5v
ZmZzZXQoKSwgcmVnVDIpOwogICAgIGVtaXRMb2FkVGFnKGJ5dGVjb2RlLm1fdGhpc1ZhbHVlLm9m
ZnNldCgpLCByZWdUMSk7CiAgICAgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MocmVnVDEsIHJlZ1QyKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkocmV2aXNpb24g
MjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjMyLDcgKzIzMiw3IEBAIHZvaWQgSklUOjplbWl0X29wX2lzX3VuZGVm
aW5lZChjb25zdCBJbnMKICAgICBKdW1wIG5vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1w
KCk7CiAKICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKLSAgICBlbWl0
TG9hZFN0cnVjdHVyZSgqdm0oKSwgcmVnVDAsIHJlZ1QxLCByZWdUMik7CisgICAgZW1pdExvYWRT
dHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QxLCByZWdUMik7CiAgICAgbW92ZShUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKICAgICBsb2FkUHRyKEFk
ZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMSk7CiAg
ICAgY29tcGFyZVB0cihFcXVhbCwgcmVnVDAsIHJlZ1QxLCByZWdUMCk7CkBAIC0zOTEsNyArMzkx
LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfamZhbHNlKGNvbnN0IEluc3RydWN0aQogICAgIGJvb2wg
c2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKIAogICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9jb25kaXRpb24ub2Zmc2V0KCksIHZhbHVlKTsKLSAg
ICBhZGRKdW1wKGJyYW5jaElmRmFsc2V5KCp2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0
Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOworICAgIGFk
ZEp1bXAoYnJhbmNoSWZGYWxzZXkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwg
c2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfamVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKQEAgLTQwNSw3ICs0MDUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qZXFfbnVsbChjb25zdCBJ
bnN0cnVjCiAKICAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1
ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCiAgICAgSnVtcCBpc05vdE1h
c3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBK
U0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkKSk7Ci0gICAgZW1pdExvYWRTdHJ1Y3R1cmUoKnZtKCksIHJlZ1QwLCByZWdUMiwg
cmVnVDEpOworICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEp
OwogICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBy
ZWdUMCk7CiAgICAgYWRkSnVtcChicmFuY2hQdHIoRXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVj
dHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdldCk7CiAgICAgSnVtcCBt
YXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbiA9IGp1bXAoKTsKQEAgLTQyOSw3ICs0Mjks
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX251bGwoY29uc3QgSW5zdHJ1CiAKICAgICAvLyBG
aXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQg
Yml0IG9uIHRoZSBzdHJ1Y3R1cmUuCiAgICAgYWRkSnVtcChicmFuY2hUZXN0OChaZXJvLCBBZGRy
ZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkKSksIHRhcmdldCk7Ci0gICAgZW1pdExvYWRTdHJ1Y3R1cmUo
KnZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOworICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCks
IHJlZ1QwLCByZWdUMiwgcmVnVDEpOwogICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CiAgICAgYWRkSnVtcChicmFuY2hQdHIoTm90RXF1
YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdU
MCksIHRhcmdldCk7CiAgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7CkBAIC01MTAs
NyArNTEwLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfanRydWUoY29uc3QgSW5zdHJ1Y3RpbwogICAg
IEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOwogICAgIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkID0gdHJ1ZTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fY29uZGl0aW9uLm9mZnNldCgpLCB2YWx1ZSk7Ci0gICAgYWRkSnVtcChicmFuY2hJZlRydXRo
eSgqdm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAs
IGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAgICBhZGRKdW1wKGJyYW5jaElmVHJ1dGh5KHZt
KCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJl
Z1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHRhcmdldCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX25lcShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNTM3LDEwICs1MzcsMTAgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfdGhyb3coY29uc3QgSW5zdHJ1Y3RpbwogewogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVGhyb3c+KCk7CiAgICAgQVNTRVJUKHJlZ1Qw
ID09IHJldHVyblZhbHVlR1BSKTsKLSAgICBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxs
ZWVTYXZlc0J1ZmZlcih2bSgpLT50b3BFbnRyeUZyYW1lKTsKKyAgICBjb3B5Q2FsbGVlU2F2ZXNU
b0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgpLnRvcEVudHJ5RnJhbWUpOwogICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZS5vZmZzZXQoKSwgcmVnVDApOwog
ICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRocm93LCByZWdUMCk7
Ci0gICAganVtcFRvRXhjZXB0aW9uSGFuZGxlcigqdm0oKSk7CisgICAganVtcFRvRXhjZXB0aW9u
SGFuZGxlcih2bSgpKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CkBAIC02OTEsNyArNjkx
LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3RpbwogewogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ2F0Y2g+KCk7CiAKLSAgICBy
ZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCktPnRv
cEVudHJ5RnJhbWUpOworICAgIHJlc3RvcmVDYWxsZWVTYXZlc0Zyb21FbnRyeUZyYW1lQ2FsbGVl
U2F2ZXNCdWZmZXIodm0oKS50b3BFbnRyeUZyYW1lKTsKIAogICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihtX3ZtKSwgcmVnVDMpOwogICAgIGxvYWQ2NChBZGRyZXNzKHJlZ1QzLCBWTTo6Y2FsbEZyYW1l
Rm9yQ2F0Y2hPZmZzZXQoKSksIGNhbGxGcmFtZVJlZ2lzdGVyKTsKQEAgLTcwMSw3ICs3MDEsNyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChjb25zdCBJbnN0cnVjdGlvCiAKICAgICBjYWxsT3Bl
cmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25DaGVja0lmRXhjZXB0aW9uSXNVbmNhdGNo
YWJsZUFuZE5vdGlmeVByb2ZpbGVyKTsKICAgICBKdW1wIGlzQ2F0Y2hhYmxlRXhjZXB0aW9uID0g
YnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BSKTsKLSAgICBqdW1wVG9FeGNlcHRpb25I
YW5kbGVyKCp2bSgpKTsKKyAgICBqdW1wVG9FeGNlcHRpb25IYW5kbGVyKHZtKCkpOwogICAgIGlz
Q2F0Y2hhYmxlRXhjZXB0aW9uLmxpbmsodGhpcyk7CiAKICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
bV92bSksIHJlZ1QzKTsKQEAgLTgyNCw3ICs4MjQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lcV9u
dWxsKGNvbnN0IEluc3RydWN0CiAgICAgSnVtcCB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
ID0ganVtcCgpOwogCiAgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0g
ICAgZW1pdExvYWRTdHJ1Y3R1cmUoKnZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOworICAgIGVt
aXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwogICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CiAgICAgbG9h
ZFB0cihBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVn
VDIpOwogICAgIGNvbXBhcmVQdHIoRXF1YWwsIHJlZ1QwLCByZWdUMiwgcmVnVDApOwpAQCAtODU3
LDcgKzg1Nyw3IEBAIHZvaWQgSklUOjplbWl0X29wX25lcV9udWxsKGNvbnN0IEluc3RydWMKICAg
ICBKdW1wIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7CiAKICAgICBpc01h
c3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKLSAgICBlbWl0TG9hZFN0cnVjdHVyZSgq
dm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7CisgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwg
cmVnVDAsIHJlZ1QyLCByZWdUMSk7CiAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIFN0
cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMik7CiAgICAgY29tcGFyZVB0cihO
b3RFcXVhbCwgcmVnVDAsIHJlZ1QyLCByZWdUMCk7CkBAIC0xMDM0LDcgKzEwMzQsNyBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfbG9vcF9oaW50KGNvbnN0IEluCiAgICAgaWYgKGNhbkJlT3B0aW1p
emVkKCkpIHsKICAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAotICAgICAgICBjb3B5
Q2FsbGVlU2F2ZXNGcm9tRnJhbWVPclJlZ2lzdGVyVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZm
ZXIodm0oKS0+dG9wRW50cnlGcmFtZSk7CisgICAgICAgIGNvcHlDYWxsZWVTYXZlc0Zyb21GcmFt
ZU9yUmVnaXN0ZXJUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgpLnRvcEVudHJ5RnJh
bWUpOwogCiAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uT3B0aW1pemUsIG1fYnl0ZWNv
ZGVPZmZzZXQpOwogICAgICAgICBKdW1wIG5vT3B0aW1pemVkRW50cnkgPSBicmFuY2hUZXN0UHRy
KFplcm8sIHJldHVyblZhbHVlR1BSKTsKQEAgLTE0ODAsMjggKzE0ODAsMjggQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfcHJvZmlsZV90eXBlKGNvbnN0IElucwogCiB2b2lkIEpJVDo6ZW1pdF9vcF9sb2df
c2hhZG93X2NoaWNrZW5fcHJvbG9ndWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKLSAgICBSRUxFQVNFX0FTU0VSVCh2bSgpLT5zaGFkb3dDaGlja2VuKCkpOworICAg
IFJFTEVBU0VfQVNTRVJUKHZtKCkuc2hhZG93Q2hpY2tlbigpKTsKICAgICB1cGRhdGVUb3BDYWxs
RnJhbWUoKTsKICAgICBzdGF0aWNfYXNzZXJ0KG5vbkFyZ0dQUjAgIT0gcmVnVDAgJiYgbm9uQXJn
R1BSMCAhPSByZWdUMiwgIndlIHdpbGwgaGF2ZSBwcm9ibGVtcyBpZiB0aGlzIGlzIHRydWUuIik7
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BMb2dTaGFkb3dD
aGlja2VuUHJvbG9ndWU+KCk7CiAgICAgR1BSUmVnIHNoYWRvd1BhY2tldFJlZyA9IHJlZ1QwOwog
ICAgIEdQUlJlZyBzY3JhdGNoMVJlZyA9IG5vbkFyZ0dQUjA7IC8vIFRoaXMgbXVzdCBiZSBhIG5v
bi1hcmd1bWVudCByZWdpc3Rlci4KICAgICBHUFJSZWcgc2NyYXRjaDJSZWcgPSByZWdUMjsKLSAg
ICBlbnN1cmVTaGFkb3dDaGlja2VuUGFja2V0KCp2bSgpLCBzaGFkb3dQYWNrZXRSZWcsIHNjcmF0
Y2gxUmVnLCBzY3JhdGNoMlJlZyk7CisgICAgZW5zdXJlU2hhZG93Q2hpY2tlblBhY2tldCh2bSgp
LCBzaGFkb3dQYWNrZXRSZWcsIHNjcmF0Y2gxUmVnLCBzY3JhdGNoMlJlZyk7CiAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLm9mZnNldCgpLCByZWdUMyk7CiAgICAg
bG9nU2hhZG93Q2hpY2tlblByb2xvZ3VlUGFja2V0KHNoYWRvd1BhY2tldFJlZywgc2NyYXRjaDFS
ZWcsIHJlZ1QzKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3Rh
aWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBSRUxFQVNF
X0FTU0VSVCh2bSgpLT5zaGFkb3dDaGlja2VuKCkpOworICAgIFJFTEVBU0VfQVNTRVJUKHZtKCku
c2hhZG93Q2hpY2tlbigpKTsKICAgICB1cGRhdGVUb3BDYWxsRnJhbWUoKTsKICAgICBzdGF0aWNf
YXNzZXJ0KG5vbkFyZ0dQUjAgIT0gcmVnVDAgJiYgbm9uQXJnR1BSMCAhPSByZWdUMiwgIndlIHdp
bGwgaGF2ZSBwcm9ibGVtcyBpZiB0aGlzIGlzIHRydWUuIik7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BMb2dTaGFkb3dDaGlja2VuVGFpbD4oKTsKICAgICBH
UFJSZWcgc2hhZG93UGFja2V0UmVnID0gcmVnVDA7CiAgICAgR1BSUmVnIHNjcmF0Y2gxUmVnID0g
bm9uQXJnR1BSMDsgLy8gVGhpcyBtdXN0IGJlIGEgbm9uLWFyZ3VtZW50IHJlZ2lzdGVyLgogICAg
IEdQUlJlZyBzY3JhdGNoMlJlZyA9IHJlZ1QyOwotICAgIGVuc3VyZVNoYWRvd0NoaWNrZW5QYWNr
ZXQoKnZtKCksIHNoYWRvd1BhY2tldFJlZywgc2NyYXRjaDFSZWcsIHNjcmF0Y2gyUmVnKTsKKyAg
ICBlbnN1cmVTaGFkb3dDaGlja2VuUGFja2V0KHZtKCksIHNoYWRvd1BhY2tldFJlZywgc2NyYXRj
aDFSZWcsIHNjcmF0Y2gyUmVnKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fdGhpc1ZhbHVlLm9mZnNldCgpLCByZWdUMik7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX3Njb3BlLm9mZnNldCgpLCByZWdUMyk7CiAgICAgbG9nU2hhZG93Q2hpY2tl
blRhaWxQYWNrZXQoc2hhZG93UGFja2V0UmVnLCBKU1ZhbHVlUmVncyhyZWdUMiksIHJlZ1QzLCBt
X2NvZGVCbG9jaywgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlT2Zmc2V0KSk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDI0OTEy
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTkzLDcgKzkzLDcgQEAgdm9pZCAqIF9SZXR1cm5BZGRyZXNzKHZvaWQpOwog
I2VuZGlmCiAKICNpZiBFTkFCTEUoT1BDT0RFX1NBTVBMSU5HKQotI2RlZmluZSBDVElfU0FNUExF
UiB2bS0+aW50ZXJwcmV0ZXItPnNhbXBsZXIoKQorI2RlZmluZSBDVElfU0FNUExFUiB2bS5pbnRl
cnByZXRlci0+c2FtcGxlcigpCiAjZWxzZQogI2RlZmluZSBDVElfU0FNUExFUiAwCiAjZW5kaWYK
QEAgLTEwMiwzMyArMTAyLDM0IEBAIHZvaWQgKiBfUmV0dXJuQWRkcmVzcyh2b2lkKTsKIHZvaWQg
SklUX09QRVJBVElPTiBvcGVyYXRpb25UaHJvd1N0YWNrT3ZlcmZsb3dFcnJvcihFeGVjU3RhdGUq
IGV4ZWMsIENvZGVCbG9jayogY29kZUJsb2NrKQogewogICAgIC8vIFdlIHBhc3MgaW4gb3VyIG93
biBjb2RlIGJsb2NrLCBiZWNhdXNlIHRoZSBjYWxsZnJhbWUgaGFzbid0IGJlZW4gcG9wdWxhdGVk
LgotICAgIFZNKiB2bSA9IGNvZGVCbG9jay0+dm0oKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSgqdm0pOwotICAgIGV4ZWMtPmNvbnZlcnRUb1N0YWNrT3ZlcmZsb3dGcmFt
ZSgqdm0sIGNvZGVCbG9jayk7CisgICAgVk0mIHZtID0gY29kZUJsb2NrLT52bSgpOworICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBleGVjLT5jb252ZXJ0VG9T
dGFja092ZXJmbG93RnJhbWUodm0sIGNvZGVCbG9jayk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgdGhyb3dTdGFja092ZXJmbG93RXJyb3IoZXhlYywg
c2NvcGUpOwogfQogCi12b2lkIEpJVF9PUEVSQVRJT04gdGhyb3dTdGFja092ZXJmbG93RXJyb3JG
cm9tVGh1bmsoVk0qIHZtLCBFeGVjU3RhdGUqIGV4ZWMpCit2b2lkIEpJVF9PUEVSQVRJT04gdGhy
b3dTdGFja092ZXJmbG93RXJyb3JGcm9tVGh1bmsoVk0qIHZtUG9pbnRlciwgRXhlY1N0YXRlKiBl
eGVjKQogewotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7CisgICAg
Vk0mIHZtID0gKnZtUG9pbnRlcjsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAg
dGhyb3dTdGFja092ZXJmbG93RXJyb3IoZXhlYywgc2NvcGUpOwogICAgIGdlbmVyaWNVbndpbmQo
dm0sIGV4ZWMpOwotICAgIEFTU0VSVCh2bS0+dGFyZ2V0TWFjaGluZVBDRm9yVGhyb3cpOworICAg
IEFTU0VSVCh2bS50YXJnZXRNYWNoaW5lUENGb3JUaHJvdyk7CiB9CiAKIGludDMyX3QgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25DYWxsQXJpdHlDaGVjayhFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAg
Vk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUoKnZtKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIGludDMyX3QgbWlzc2luZ0FyZ0NvdW50ID0gQ29t
bW9uU2xvd1BhdGhzOjphcml0eUNoZWNrRm9yKGV4ZWMsICp2bSwgQ29kZUZvckNhbGwpOworICAg
IGludDMyX3QgbWlzc2luZ0FyZ0NvdW50ID0gQ29tbW9uU2xvd1BhdGhzOjphcml0eUNoZWNrRm9y
KGV4ZWMsIHZtLCBDb2RlRm9yQ2FsbCk7CiAgICAgaWYgKFVOTElLRUxZKG1pc3NpbmdBcmdDb3Vu
dCA8IDApKSB7CiAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gQ29tbW9uU2xvd1BhdGhz
Ojpjb2RlQmxvY2tGcm9tQ2FsbEZyYW1lQ2FsbGVlKGV4ZWMsIENvZGVGb3JDYWxsKTsKLSAgICAg
ICAgZXhlYy0+Y29udmVydFRvU3RhY2tPdmVyZmxvd0ZyYW1lKCp2bSwgY29kZUJsb2NrKTsKKyAg
ICAgICAgZXhlYy0+Y29udmVydFRvU3RhY2tPdmVyZmxvd0ZyYW1lKHZtLCBjb2RlQmxvY2spOwog
ICAgICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLSAgICAgICAg
dGhyb3dTdGFja092ZXJmbG93RXJyb3Iodm0tPnRvcENhbGxGcmFtZSwgc2NvcGUpOworICAgICAg
ICB0aHJvd1N0YWNrT3ZlcmZsb3dFcnJvcih2bS50b3BDYWxsRnJhbWUsIHNjb3BlKTsKICAgICB9
CiAKICAgICByZXR1cm4gbWlzc2luZ0FyZ0NvdW50OwpAQCAtMTM2LDE1ICsxMzcsMTUgQEAgaW50
MzJfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNhbGxBcml0eQogCiBpbnQzMl90IEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uQ29uc3RydWN0QXJpdHlDaGVjayhFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0g
ICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUoKnZtKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIGludDMyX3QgbWlzc2luZ0FyZ0NvdW50ID0g
Q29tbW9uU2xvd1BhdGhzOjphcml0eUNoZWNrRm9yKGV4ZWMsICp2bSwgQ29kZUZvckNvbnN0cnVj
dCk7CisgICAgaW50MzJfdCBtaXNzaW5nQXJnQ291bnQgPSBDb21tb25TbG93UGF0aHM6OmFyaXR5
Q2hlY2tGb3IoZXhlYywgdm0sIENvZGVGb3JDb25zdHJ1Y3QpOwogICAgIGlmIChVTkxJS0VMWSht
aXNzaW5nQXJnQ291bnQgPCAwKSkgewogICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IENv
bW1vblNsb3dQYXRoczo6Y29kZUJsb2NrRnJvbUNhbGxGcmFtZUNhbGxlZShleGVjLCBDb2RlRm9y
Q29uc3RydWN0KTsKLSAgICAgICAgZXhlYy0+Y29udmVydFRvU3RhY2tPdmVyZmxvd0ZyYW1lKCp2
bSwgY29kZUJsb2NrKTsKKyAgICAgICAgZXhlYy0+Y29udmVydFRvU3RhY2tPdmVyZmxvd0ZyYW1l
KHZtLCBjb2RlQmxvY2spOwogICAgICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZt
LCBleGVjKTsKLSAgICAgICAgdGhyb3dTdGFja092ZXJmbG93RXJyb3Iodm0tPnRvcENhbGxGcmFt
ZSwgc2NvcGUpOworICAgICAgICB0aHJvd1N0YWNrT3ZlcmZsb3dFcnJvcih2bS50b3BDYWxsRnJh
bWUsIHNjb3BlKTsKICAgICB9CiAKICAgICByZXR1cm4gbWlzc2luZ0FyZ0NvdW50OwpAQCAtMTUy
LDcgKzE1Myw3IEBAIGludDMyX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db25zdHJ1Y3QKIAog
RW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25UcnlHZXRCeUlkKEV4ZWNTdGF0
ZSogZXhlYywgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBFbmNvZGVkSlNWYWx1ZSBiYXNl
LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQogewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwor
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cih2bSwgZXhlYyk7CiAgICAgSWRlbnRpZmllciBpZGVudCA9IElkZW50aWZpZXI6OmZyb21VaWQo
dm0sIHVpZCk7CiAgICAgc3R1YkluZm8tPnRvb2tTbG93UGF0aCA9IHRydWU7CkBAIC0xNjcsNyAr
MTY4LDcgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25UcgogCiBFbmNv
ZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRyeUdldEJ5SWRHZW5lcmljKEV4ZWNT
dGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgYmFzZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkK
IHsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwog
ICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIElkZW50aWZp
ZXIgaWRlbnQgPSBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCB1aWQpOwogCkBAIC0xODAsOSArMTgx
LDkgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25UcgogCiBFbmNvZGVk
SlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZShFeGVjU3Rh
dGUqIGV4ZWMsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgRW5jb2RlZEpTVmFsdWUgYmFz
ZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKIHsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsK
KyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIodm0sIGV4ZWMpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7
CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIElkZW50aWZp
ZXIgaWRlbnQgPSBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCB1aWQpOwogCiAgICAgSlNWYWx1ZSBi
YXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoYmFzZSk7CkBAIC0xOTEsNyArMTkyLDcgQEAgRW5j
b2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25UcgogICAgIGJhc2VWYWx1ZS5nZXRQ
cm9wZXJ0eVNsb3QoZXhlYywgaWRlbnQsIHNsb3QpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogCi0gICAgaWYgKHN0dWJJbmZvLT5jb25zaWRlckNh
Y2hpbmcoKnZtLCBleGVjLT5jb2RlQmxvY2soKSwgYmFzZVZhbHVlLnN0cnVjdHVyZU9yTnVsbCgp
KSAmJiAhc2xvdC5pc1RhaW50ZWRCeU9wYXF1ZU9iamVjdCgpICYmIChzbG90LmlzQ2FjaGVhYmxl
VmFsdWUoKSB8fCBzbG90LmlzQ2FjaGVhYmxlR2V0dGVyKCkgfHwgc2xvdC5pc1Vuc2V0KCkpKQor
ICAgIGlmIChzdHViSW5mby0+Y29uc2lkZXJDYWNoaW5nKHZtLCBleGVjLT5jb2RlQmxvY2soKSwg
YmFzZVZhbHVlLnN0cnVjdHVyZU9yTnVsbCgpKSAmJiAhc2xvdC5pc1RhaW50ZWRCeU9wYXF1ZU9i
amVjdCgpICYmIChzbG90LmlzQ2FjaGVhYmxlVmFsdWUoKSB8fCBzbG90LmlzQ2FjaGVhYmxlR2V0
dGVyKCkgfHwgc2xvdC5pc1Vuc2V0KCkpKQogICAgICAgICByZXBhdGNoR2V0QnlJRChleGVjLCBi
YXNlVmFsdWUsIGlkZW50LCBzbG90LCAqc3R1YkluZm8sIEdldEJ5SURLaW5kOjpUcnkpOwogCiAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShzbG90LmdldFB1cmVSZXN1bHQoKSk7CkBAIC0yMDAs
OSArMjAxLDkgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25UcgogRW5j
b2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRCeUlkRGlyZWN0KEV4ZWNTdGF0
ZSogZXhlYywgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBFbmNvZGVkSlNWYWx1ZSBiYXNl
LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0g
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKLSAgICBJZGVudGlmaWVyIGlkZW50ID0gSWRlbnRpZmllcjo6ZnJv
bVVpZCgmdm0sIHVpZCk7CisgICAgSWRlbnRpZmllciBpZGVudCA9IElkZW50aWZpZXI6OmZyb21V
aWQodm0sIHVpZCk7CiAgICAgc3R1YkluZm8tPnRvb2tTbG93UGF0aCA9IHRydWU7CiAKICAgICBK
U1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShiYXNlKTsKQEAgLTIxNyw5ICsyMTgs
OSBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdlCiBFbmNvZGVkSlNW
YWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5SWREaXJlY3RHZW5lcmljKEV4ZWNTdGF0
ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgYmFzZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKIHsK
ICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVj
KTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgSWRlbnRp
ZmllciBpZGVudCA9IElkZW50aWZpZXI6OmZyb21VaWQoJnZtLCB1aWQpOworICAgIElkZW50aWZp
ZXIgaWRlbnQgPSBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCB1aWQpOwogCiAgICAgSlNWYWx1ZSBi
YXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoYmFzZSk7CiAgICAgUHJvcGVydHlTbG90IHNsb3Qo
YmFzZVZhbHVlLCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6R2V0T3duUHJvcGVy
dHkpOwpAQCAtMjMzLDkgKzIzNCw5IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uR2UKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0QnlJZERp
cmVjdE9wdGltaXplKEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZv
LCBFbmNvZGVkSlNWYWx1ZSBiYXNlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQogewogICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0s
IGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBJZGVudGlmaWVyIGlk
ZW50ID0gSWRlbnRpZmllcjo6ZnJvbVVpZCgmdm0sIHVpZCk7CisgICAgSWRlbnRpZmllciBpZGVu
dCA9IElkZW50aWZpZXI6OmZyb21VaWQodm0sIHVpZCk7CiAKICAgICBKU1ZhbHVlIGJhc2VWYWx1
ZSA9IEpTVmFsdWU6OmRlY29kZShiYXNlKTsKICAgICBQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFs
dWUsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpHZXRPd25Qcm9wZXJ0eSk7CkBA
IC0yNTMsNyArMjU0LDcgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25H
ZQogewogICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKICAg
ICAKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwog
ICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIAogICAgIHN0
dWJJbmZvLT50b29rU2xvd1BhdGggPSB0cnVlOwpAQCAtMjYzLDcgKzI2NCw3IEBAIEVuY29kZWRK
U1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2UKICAgICBJZGVudGlmaWVyIGlkZW50ID0g
SWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgdWlkKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGJhc2VW
YWx1ZS5nZXQoZXhlYywgaWRlbnQsIHNsb3QpOwogCi0gICAgTE9HX0lDKChJQ0V2ZW50OjpPcGVy
YXRpb25HZXRCeUlkLCBiYXNlVmFsdWUuY2xhc3NJbmZvT3JOdWxsKCp2bSksIGlkZW50LCBiYXNl
VmFsdWUgPT0gc2xvdC5zbG90QmFzZSgpKSk7CisgICAgTE9HX0lDKChJQ0V2ZW50OjpPcGVyYXRp
b25HZXRCeUlkLCBiYXNlVmFsdWUuY2xhc3NJbmZvT3JOdWxsKHZtKSwgaWRlbnQsIGJhc2VWYWx1
ZSA9PSBzbG90LnNsb3RCYXNlKCkpKTsKIAogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVz
dWx0KTsKIH0KQEAgLTI3Miw3ICsyNzMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvbkdlCiB7CiAgICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUo
ZmFsc2UpOwogICAgIAotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAg
ICAgCiAgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoYmFzZSk7CkBAIC0y
ODAsNyArMjgxLDcgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZQog
ICAgIElkZW50aWZpZXIgaWRlbnQgPSBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCB1aWQpOwogICAg
IEpTVmFsdWUgcmVzdWx0ID0gYmFzZVZhbHVlLmdldChleGVjLCBpZGVudCwgc2xvdCk7CiAgICAg
Ci0gICAgTE9HX0lDKChJQ0V2ZW50OjpPcGVyYXRpb25HZXRCeUlkR2VuZXJpYywgYmFzZVZhbHVl
LmNsYXNzSW5mb09yTnVsbCgqdm0pLCBpZGVudCwgYmFzZVZhbHVlID09IHNsb3Quc2xvdEJhc2Uo
KSkpOworICAgIExPR19JQygoSUNFdmVudDo6T3BlcmF0aW9uR2V0QnlJZEdlbmVyaWMsIGJhc2VW
YWx1ZS5jbGFzc0luZm9Pck51bGwodm0pLCBpZGVudCwgYmFzZVZhbHVlID09IHNsb3Quc2xvdEJh
c2UoKSkpOwogICAgIAogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KQEAg
LTI4OSw3ICsyOTAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdl
CiB7CiAgICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwogICAg
IAotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAg
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgSWRlbnRpZmll
ciBpZGVudCA9IElkZW50aWZpZXI6OmZyb21VaWQodm0sIHVpZCk7CiAKQEAgLTI5Nyw5ICsyOTgs
OSBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdlCiAKICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGJhc2VWYWx1ZS5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgaWRlbnQs
IFsmXSAoYm9vbCBmb3VuZCwgUHJvcGVydHlTbG90JiBzbG90KSAtPiBKU1ZhbHVlIHsKICAgICAg
ICAgCi0gICAgICAgIExPR19JQygoSUNFdmVudDo6T3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCBi
YXNlVmFsdWUuY2xhc3NJbmZvT3JOdWxsKCp2bSksIGlkZW50LCBiYXNlVmFsdWUgPT0gc2xvdC5z
bG90QmFzZSgpKSk7CisgICAgICAgIExPR19JQygoSUNFdmVudDo6T3BlcmF0aW9uR2V0QnlJZE9w
dGltaXplLCBiYXNlVmFsdWUuY2xhc3NJbmZvT3JOdWxsKHZtKSwgaWRlbnQsIGJhc2VWYWx1ZSA9
PSBzbG90LnNsb3RCYXNlKCkpKTsKICAgICAgICAgCi0gICAgICAgIGlmIChzdHViSW5mby0+Y29u
c2lkZXJDYWNoaW5nKCp2bSwgZXhlYy0+Y29kZUJsb2NrKCksIGJhc2VWYWx1ZS5zdHJ1Y3R1cmVP
ck51bGwoKSkpCisgICAgICAgIGlmIChzdHViSW5mby0+Y29uc2lkZXJDYWNoaW5nKHZtLCBleGVj
LT5jb2RlQmxvY2soKSwgYmFzZVZhbHVlLnN0cnVjdHVyZU9yTnVsbCgpKSkKICAgICAgICAgICAg
IHJlcGF0Y2hHZXRCeUlEKGV4ZWMsIGJhc2VWYWx1ZSwgaWRlbnQsIHNsb3QsICpzdHViSW5mbywg
R2V0QnlJREtpbmQ6Ok5vcm1hbCk7CiAgICAgICAgIHJldHVybiBmb3VuZCA/IHNsb3QuZ2V0VmFs
dWUoZXhlYywgaWRlbnQpIDoganNVbmRlZmluZWQoKTsKICAgICB9KSk7CkBAIC0zMDksNyArMzEw
LDcgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZQogewogICAgIFN1
cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKIAotICAgIFZNKiB2bSA9
ICZleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgSWRlbnRpZmllciBpZGVudCA9IElkZW50
aWZpZXI6OmZyb21VaWQodm0sIHVpZCk7CiAKQEAgLTMyNiw3ICszMjcsNyBAQCBFbmNvZGVkSlNW
YWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdlCiB7CiAgICAgU3VwZXJTYW1wbGVyU2NvcGUg
c3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwogCi0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Cisg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KHZtLCBleGVjKTsKICAgICBJZGVudGlmaWVyIGlkZW50ID0gSWRlbnRpZmllcjo6ZnJvbVVpZCh2
bSwgdWlkKTsKIApAQCAtMzQxLDcgKzM0Miw3IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uR2UKIHsKICAgICBTdXBlclNhbXBsZXJTY29wZSBzdXBlclNhbXBsZXJTY29w
ZShmYWxzZSk7CiAgICAgCi0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsK
ICAgICBJZGVudGlmaWVyIGlkZW50ID0gSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgdWlkKTsKIApA
QCAtMzUwLDkgKzM1MSw5IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
R2UKIAogICAgIFByb3BlcnR5U2xvdCBzbG90KHRoaXNWYWx1ZSwgUHJvcGVydHlTbG90OjpJbnRl
cm5hbE1ldGhvZFR5cGU6OkdldCk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShiYXNlVmFs
dWUuZ2V0UHJvcGVydHlTbG90KGV4ZWMsIGlkZW50LCBzbG90LCBbJl0gKGJvb2wgZm91bmQsIFBy
b3BlcnR5U2xvdCYgc2xvdCkgLT4gSlNWYWx1ZSB7Ci0gICAgICAgIExPR19JQygoSUNFdmVudDo6
T3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemUsIGJhc2VWYWx1ZS5jbGFzc0luZm9Pck51
bGwoKnZtKSwgaWRlbnQsIGJhc2VWYWx1ZSA9PSBzbG90LnNsb3RCYXNlKCkpKTsKKyAgICAgICAg
TE9HX0lDKChJQ0V2ZW50OjpPcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZSwgYmFzZVZh
bHVlLmNsYXNzSW5mb09yTnVsbCh2bSksIGlkZW50LCBiYXNlVmFsdWUgPT0gc2xvdC5zbG90QmFz
ZSgpKSk7CiAgICAgICAgIAotICAgICAgICBpZiAoc3R1YkluZm8tPmNvbnNpZGVyQ2FjaGluZygq
dm0sIGV4ZWMtPmNvZGVCbG9jaygpLCBiYXNlVmFsdWUuc3RydWN0dXJlT3JOdWxsKCkpKQorICAg
ICAgICBpZiAoc3R1YkluZm8tPmNvbnNpZGVyQ2FjaGluZyh2bSwgZXhlYy0+Y29kZUJsb2NrKCks
IGJhc2VWYWx1ZS5zdHJ1Y3R1cmVPck51bGwoKSkpCiAgICAgICAgICAgICByZXBhdGNoR2V0QnlJ
RChleGVjLCBiYXNlVmFsdWUsIGlkZW50LCBzbG90LCAqc3R1YkluZm8sIEdldEJ5SURLaW5kOjpX
aXRoVGhpcyk7CiAgICAgICAgIHJldHVybiBmb3VuZCA/IHNsb3QuZ2V0VmFsdWUoZXhlYywgaWRl
bnQpIDoganNVbmRlZmluZWQoKTsKICAgICB9KSk7CkBAIC0zNjMsMTIgKzM2NCwxMiBAQCBFbmNv
ZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkluCiAgICAgU3VwZXJTYW1wbGVyU2Nv
cGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwogCiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsK
LSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZl
Q2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgc3R1YkluZm8tPnRvb2tTbG93UGF0aCA9IHRydWU7
CiAKLSAgICBJZGVudGlmaWVyIGlkZW50ID0gSWRlbnRpZmllcjo6ZnJvbVVpZCgmdm0sIHVpZCk7
CisgICAgSWRlbnRpZmllciBpZGVudCA9IElkZW50aWZpZXI6OmZyb21VaWQodm0sIHVpZCk7CiAK
ICAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShiYXNlKTsKICAgICBpZiAo
IWJhc2VWYWx1ZS5pc09iamVjdCgpKSB7CkBAIC0zODksMTAgKzM5MCwxMCBAQCBFbmNvZGVkSlNW
YWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkluCiAgICAgU3VwZXJTYW1wbGVyU2NvcGUgc3Vw
ZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwogCiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwogCi0gICAgSWRlbnRpZmllciBpZGVudCA9IElkZW50aWZpZXI6OmZyb21V
aWQoJnZtLCB1aWQpOworICAgIElkZW50aWZpZXIgaWRlbnQgPSBJZGVudGlmaWVyOjpmcm9tVWlk
KHZtLCB1aWQpOwogCiAgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoYmFz
ZSk7CiAgICAgaWYgKCFiYXNlVmFsdWUuaXNPYmplY3QoKSkgewpAQCAtNDEzLDEwICs0MTQsMTAg
QEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25JbgogICAgIFN1cGVyU2Ft
cGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKIAogICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIElkZW50aWZpZXIgaWRlbnQgPSBJZGVu
dGlmaWVyOjpmcm9tVWlkKCZ2bSwgdWlkKTsKKyAgICBJZGVudGlmaWVyIGlkZW50ID0gSWRlbnRp
Zmllcjo6ZnJvbVVpZCh2bSwgdWlkKTsKIAogICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gSlNWYWx1
ZTo6ZGVjb2RlKGJhc2UpOwogICAgIGlmICghYmFzZVZhbHVlLmlzT2JqZWN0KCkpIHsKQEAgLTQz
OSw3ICs0NDAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkluCiB7
CiAgICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwogICAgIAot
ICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAKICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihDb21tb25TbG93UGF0aHM6Om9wSW5CeVZhbChleGVjLCBi
YXNlLCBKU1ZhbHVlOjpkZWNvZGUoa2V5KSkpKTsKQEAgLTQ0OSw3ICs0NTAsNyBAQCB2b2lkIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZFN0cmljCiB7CiAgICAgU3VwZXJTYW1wbGVyU2Nv
cGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwogICAgIAotICAgIFZNKiB2bSA9ICZleGVjLT52
bSgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcih2bSwgZXhlYyk7CiAgICAgCiAgICAgc3R1YkluZm8tPnRvb2tTbG93UGF0aCA9IHRy
dWU7CkBAIC00NTksMTQgKzQ2MCwxNCBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0
QnlJZFN0cmljCiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3QoYmFzZVZhbHVlLCB0cnVlLCBleGVj
LT5jb2RlQmxvY2soKS0+cHV0QnlJZENvbnRleHQoKSk7CiAgICAgYmFzZVZhbHVlLnB1dElubGlu
ZShleGVjLCBpZGVudCwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSksIHNsb3QpOwogICAg
IAotICAgIExPR19JQygoSUNFdmVudDo6T3BlcmF0aW9uUHV0QnlJZFN0cmljdCwgYmFzZVZhbHVl
LmNsYXNzSW5mb09yTnVsbCgqdm0pLCBpZGVudCwgc2xvdC5iYXNlKCkgPT0gYmFzZVZhbHVlKSk7
CisgICAgTE9HX0lDKChJQ0V2ZW50OjpPcGVyYXRpb25QdXRCeUlkU3RyaWN0LCBiYXNlVmFsdWUu
Y2xhc3NJbmZvT3JOdWxsKHZtKSwgaWRlbnQsIHNsb3QuYmFzZSgpID09IGJhc2VWYWx1ZSkpOwog
fQogCiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdChFeGVjU3Rh
dGUqIGV4ZWMsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZFZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgVW5pcXVlZFN0cmluZ0ltcGwq
IHVpZCkKIHsKICAgICBTdXBlclNhbXBsZXJTY29wZSBzdXBlclNhbXBsZXJTY29wZShmYWxzZSk7
CiAgICAgCi0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICAKICAg
ICBzdHViSW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsKQEAgLTQ3Niw3ICs0NzcsNyBAQCB2b2lk
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZE5vblN0CiAgICAgUHV0UHJvcGVydHlTbG90
IHNsb3QoYmFzZVZhbHVlLCBmYWxzZSwgZXhlYy0+Y29kZUJsb2NrKCktPnB1dEJ5SWRDb250ZXh0
KCkpOwogICAgIGJhc2VWYWx1ZS5wdXRJbmxpbmUoZXhlYywgaWRlbnQsIEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkVmFsdWUpLCBzbG90KTsKIAotICAgIExPR19JQygoSUNFdmVudDo6T3BlcmF0aW9u
UHV0QnlJZE5vblN0cmljdCwgYmFzZVZhbHVlLmNsYXNzSW5mb09yTnVsbCgqdm0pLCBpZGVudCwg
c2xvdC5iYXNlKCkgPT0gYmFzZVZhbHVlKSk7CisgICAgTE9HX0lDKChJQ0V2ZW50OjpPcGVyYXRp
b25QdXRCeUlkTm9uU3RyaWN0LCBiYXNlVmFsdWUuY2xhc3NJbmZvT3JOdWxsKHZtKSwgaWRlbnQs
IHNsb3QuYmFzZSgpID09IGJhc2VWYWx1ZSkpOwogfQogCiB2b2lkIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdChFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZVN0dWJJ
bmZvKiBzdHViSW5mbywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkQmFzZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKQEAgLTQ4NCwxMiArNDg1LDEy
IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkRGlyZWMKICAgICBTdXBlclNh
bXBsZXJTY29wZSBzdXBlclNhbXBsZXJTY29wZShmYWxzZSk7CiAgICAgCiAgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7
CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgCiAgICAg
c3R1YkluZm8tPnRvb2tTbG93UGF0aCA9IHRydWU7CiAgICAgCiAgICAgSlNWYWx1ZSBiYXNlVmFs
dWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2UpOwotICAgIElkZW50aWZpZXIgaWRlbnQg
PSBJZGVudGlmaWVyOjpmcm9tVWlkKCZ2bSwgdWlkKTsKKyAgICBJZGVudGlmaWVyIGlkZW50ID0g
SWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgdWlkKTsKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChi
YXNlVmFsdWUsIHRydWUsIGV4ZWMtPmNvZGVCbG9jaygpLT5wdXRCeUlkQ29udGV4dCgpKTsKICAg
ICBDb21tb25TbG93UGF0aHM6OnB1dERpcmVjdFdpdGhSZWlmeSh2bSwgZXhlYywgYXNPYmplY3Qo
YmFzZVZhbHVlKSwgaWRlbnQsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCBzbG90KTsK
IApAQCAtNTAxLDEyICs1MDIsMTIgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5
SWREaXJlYwogICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsK
ICAgICAKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZt
LCBleGVjKTsKICAgICAKICAgICBzdHViSW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsKICAgICAK
ICAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQmFzZSk7Ci0g
ICAgSWRlbnRpZmllciBpZGVudCA9IElkZW50aWZpZXI6OmZyb21VaWQoJnZtLCB1aWQpOworICAg
IElkZW50aWZpZXIgaWRlbnQgPSBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCB1aWQpOwogICAgIFB1
dFByb3BlcnR5U2xvdCBzbG90KGJhc2VWYWx1ZSwgZmFsc2UsIGV4ZWMtPmNvZGVCbG9jaygpLT5w
dXRCeUlkQ29udGV4dCgpKTsKICAgICBDb21tb25TbG93UGF0aHM6OnB1dERpcmVjdFdpdGhSZWlm
eSh2bSwgZXhlYywgYXNPYmplY3QoYmFzZVZhbHVlKSwgaWRlbnQsIEpTVmFsdWU6OmRlY29kZShl
bmNvZGVkVmFsdWUpLCBzbG90KTsKIApAQCAtNTE3LDkgKzUxOCw5IEBAIHZvaWQgSklUX09QRVJB
VElPTiBvcGVyYXRpb25QdXRCeUlkU3RyaWMKIHsKICAgICBTdXBlclNhbXBsZXJTY29wZSBzdXBl
clNhbXBsZXJTY29wZShmYWxzZSk7CiAgICAgCi0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Cisg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KHZtLCBleGVjKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSgqdm0pOwor
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIElkZW50aWZp
ZXIgaWRlbnQgPSBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCB1aWQpOwogICAgIEFjY2Vzc1R5cGUg
YWNjZXNzVHlwZSA9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLT5hY2Nlc3NUeXBl
KTsKQEAgLTUyOSwxNyArNTMwLDE3IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRC
eUlkU3RyaWMKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOwog
ICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KGJhc2VWYWx1ZSwgdHJ1ZSwgY29kZUJsb2NrLT5wdXRC
eUlkQ29udGV4dCgpKTsKIAotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZVZhbHVlLmlz
Q2VsbCgpID8gYmFzZVZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKnZtKSA6IG51bGxwdHI7Cisg
ICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlVmFsdWUuaXNDZWxsKCkgPyBiYXNlVmFsdWUu
YXNDZWxsKCktPnN0cnVjdHVyZSh2bSkgOiBudWxscHRyOwogICAgIGJhc2VWYWx1ZS5wdXRJbmxp
bmUoZXhlYywgaWRlbnQsIHZhbHVlLCBzbG90KTsKIAotICAgIExPR19JQygoSUNFdmVudDo6T3Bl
cmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXplLCBiYXNlVmFsdWUuY2xhc3NJbmZvT3JOdWxsKCp2
bSksIGlkZW50LCBzbG90LmJhc2UoKSA9PSBiYXNlVmFsdWUpKTsKKyAgICBMT0dfSUMoKElDRXZl
bnQ6Ok9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZSwgYmFzZVZhbHVlLmNsYXNzSW5mb09y
TnVsbCh2bSksIGlkZW50LCBzbG90LmJhc2UoKSA9PSBiYXNlVmFsdWUpKTsKIAogICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAKICAgICBpZiAoYWNjZXNzVHlwZSAhPSBz
dGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby0+YWNjZXNzVHlwZSkpCiAgICAgICAgIHJl
dHVybjsKICAgICAKLSAgICBpZiAoc3R1YkluZm8tPmNvbnNpZGVyQ2FjaGluZygqdm0sIGNvZGVC
bG9jaywgc3RydWN0dXJlKSkKKyAgICBpZiAoc3R1YkluZm8tPmNvbnNpZGVyQ2FjaGluZyh2bSwg
Y29kZUJsb2NrLCBzdHJ1Y3R1cmUpKQogICAgICAgICByZXBhdGNoUHV0QnlJRChleGVjLCBiYXNl
VmFsdWUsIHN0cnVjdHVyZSwgaWRlbnQsIHNsb3QsICpzdHViSW5mbywgTm90RGlyZWN0KTsKIH0K
IApAQCAtNTQ3LDkgKzU0OCw5IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlk
Tm9uU3QKIHsKICAgICBTdXBlclNhbXBsZXJTY29wZSBzdXBlclNhbXBsZXJTY29wZShmYWxzZSk7
CiAgICAgCi0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLSAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSgqdm0pOworICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIElkZW50aWZpZXIgaWRlbnQgPSBJZGVudGlmaWVy
Ojpmcm9tVWlkKHZtLCB1aWQpOwogICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSA9IHN0YXRpY19j
YXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLT5hY2Nlc3NUeXBlKTsKQEAgLTU1OSwxNyArNTYwLDE3
IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkTm9uU3QKICAgICBDb2RlQmxv
Y2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOwogICAgIFB1dFByb3BlcnR5U2xvdCBz
bG90KGJhc2VWYWx1ZSwgZmFsc2UsIGNvZGVCbG9jay0+cHV0QnlJZENvbnRleHQoKSk7CiAKLSAg
ICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2VWYWx1ZS5pc0NlbGwoKSA/IGJhc2VWYWx1ZS5h
c0NlbGwoKS0+c3RydWN0dXJlKCp2bSkgOiBudWxscHRyOyAgICAKKyAgICBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA9IGJhc2VWYWx1ZS5pc0NlbGwoKSA/IGJhc2VWYWx1ZS5hc0NlbGwoKS0+c3RydWN0
dXJlKHZtKSA6IG51bGxwdHI7CiAgICAgYmFzZVZhbHVlLnB1dElubGluZShleGVjLCBpZGVudCwg
dmFsdWUsIHNsb3QpOwogCi0gICAgTE9HX0lDKChJQ0V2ZW50OjpPcGVyYXRpb25QdXRCeUlkTm9u
U3RyaWN0T3B0aW1pemUsIGJhc2VWYWx1ZS5jbGFzc0luZm9Pck51bGwoKnZtKSwgaWRlbnQsIHNs
b3QuYmFzZSgpID09IGJhc2VWYWx1ZSkpOworICAgIExPR19JQygoSUNFdmVudDo6T3BlcmF0aW9u
UHV0QnlJZE5vblN0cmljdE9wdGltaXplLCBiYXNlVmFsdWUuY2xhc3NJbmZvT3JOdWxsKHZtKSwg
aWRlbnQsIHNsb3QuYmFzZSgpID09IGJhc2VWYWx1ZSkpOwogCiAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgdm9pZCgpKTsKIAogICAgIGlmIChhY2Nlc3NUeXBlICE9IHN0YXRpY19jYXN0
PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLT5hY2Nlc3NUeXBlKSkKICAgICAgICAgcmV0dXJuOwogICAg
IAotICAgIGlmIChzdHViSW5mby0+Y29uc2lkZXJDYWNoaW5nKCp2bSwgY29kZUJsb2NrLCBzdHJ1
Y3R1cmUpKQorICAgIGlmIChzdHViSW5mby0+Y29uc2lkZXJDYWNoaW5nKHZtLCBjb2RlQmxvY2ss
IHN0cnVjdHVyZSkpCiAgICAgICAgIHJlcGF0Y2hQdXRCeUlEKGV4ZWMsIGJhc2VWYWx1ZSwgc3Ry
dWN0dXJlLCBpZGVudCwgc2xvdCwgKnN0dWJJbmZvLCBOb3REaXJlY3QpOwogfQogCkBAIC01Nzgs
MTAgKzU3OSwxMCBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVjCiAg
ICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwogICAgIAogICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigm
dm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwog
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICAKLSAgICBJZGVu
dGlmaWVyIGlkZW50ID0gSWRlbnRpZmllcjo6ZnJvbVVpZCgmdm0sIHVpZCk7CisgICAgSWRlbnRp
ZmllciBpZGVudCA9IElkZW50aWZpZXI6OmZyb21VaWQodm0sIHVpZCk7CiAgICAgQWNjZXNzVHlw
ZSBhY2Nlc3NUeXBlID0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8tPmFjY2Vzc1R5
cGUpOwogCiAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUp
OwpAQCAtNjA3LDEwICs2MDgsMTAgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5
SWREaXJlYwogICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsK
ICAgICAKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZt
LCBleGVjKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAg
Ci0gICAgSWRlbnRpZmllciBpZGVudCA9IElkZW50aWZpZXI6OmZyb21VaWQoJnZtLCB1aWQpOwor
ICAgIElkZW50aWZpZXIgaWRlbnQgPSBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCB1aWQpOwogICAg
IEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSA9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZv
LT5hY2Nlc3NUeXBlKTsKIAogICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5j
b2RlZFZhbHVlKTsKQEAgLTc2OSw3ICs3NzAsNyBAQCBzdGF0aWMgT3B0aW1pemF0aW9uUmVzdWx0
IHRyeVB1dEJ5VmFsT3B0CiAgICAgICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBl
eGVjLT5jb2RlQmxvY2soKTsKICAgICAgICAgICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9j
a2VyKGNvZGVCbG9jay0+bV9sb2NrKTsKICAgICAgICAgICAgICAgICBieVZhbEluZm8tPmFycmF5
UHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlciwgY29kZUJsb2NrLCBzdHJ1
Y3R1cmUpOwotICAgICAgICAgICAgICAgIEpJVDo6Y29tcGlsZVB1dEJ5VmFsKGxvY2tlciwgJnZt
LCBjb2RlQmxvY2ssIGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywgYXJyYXlNb2RlKTsKKyAgICAg
ICAgICAgICAgICBKSVQ6OmNvbXBpbGVQdXRCeVZhbChsb2NrZXIsIHZtLCBjb2RlQmxvY2ssIGJ5
VmFsSW5mbywgcmV0dXJuQWRkcmVzcywgYXJyYXlNb2RlKTsKICAgICAgICAgICAgICAgICBvcHRp
bWl6YXRpb25SZXN1bHQgPSBPcHRpbWl6YXRpb25SZXN1bHQ6Ok9wdGltaXplZDsKICAgICAgICAg
ICAgIH0KICAgICAgICAgfQpAQCAtNzg3LDcgKzc4OCw3IEBAIHN0YXRpYyBPcHRpbWl6YXRpb25S
ZXN1bHQgdHJ5UHV0QnlWYWxPcHQKICAgICAgICAgICAgIEFTU0VSVCghYnlWYWxJbmZvLT5zdHVi
Um91dGluZSk7CiAgICAgICAgICAgICBpZiAoYnlWYWxJbmZvLT5zZWVuKSB7CiAgICAgICAgICAg
ICAgICAgaWYgKGJ5VmFsSW5mby0+Y2FjaGVkSWQgPT0gcHJvcGVydHlOYW1lKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIEpJVDo6Y29tcGlsZVB1dEJ5VmFsV2l0aENhY2hlZElkPE9wUHV0QnlWYWw+
KCZ2bSwgZXhlYy0+Y29kZUJsb2NrKCksIGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywgTm90RGly
ZWN0LCBwcm9wZXJ0eU5hbWUpOworICAgICAgICAgICAgICAgICAgICBKSVQ6OmNvbXBpbGVQdXRC
eVZhbFdpdGhDYWNoZWRJZDxPcFB1dEJ5VmFsPih2bSwgZXhlYy0+Y29kZUJsb2NrKCksIGJ5VmFs
SW5mbywgcmV0dXJuQWRkcmVzcywgTm90RGlyZWN0LCBwcm9wZXJ0eU5hbWUpOwogICAgICAgICAg
ICAgICAgICAgICBvcHRpbWl6YXRpb25SZXN1bHQgPSBPcHRpbWl6YXRpb25SZXN1bHQ6Ok9wdGlt
aXplZDsKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAvLyBT
ZWVtIGxpa2UgYSBnZW5lcmljIHByb3BlcnR5IGFjY2VzcyBzaXRlLgpAQCAtODIxLDcgKzgyMiw3
IEBAIHN0YXRpYyBPcHRpbWl6YXRpb25SZXN1bHQgdHJ5UHV0QnlWYWxPcHQKIHZvaWQgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbE9wdGltaXplKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZEJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFN1YnNjcmlw
dCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBCeVZhbEluZm8qIGJ5VmFsSW5mbykKIHsK
ICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVj
KTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBKU1Zh
bHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQmFzZVZhbHVlKTsKQEAgLTg1
OCw3ICs4NTksNyBAQCBzdGF0aWMgT3B0aW1pemF0aW9uUmVzdWx0IHRyeURpcmVjdFB1dEJ5CiAg
ICAgICAgICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9j
ayk7CiAgICAgICAgICAgICAgICAgYnlWYWxJbmZvLT5hcnJheVByb2ZpbGUtPmNvbXB1dGVVcGRh
dGVkUHJlZGljdGlvbihsb2NrZXIsIGNvZGVCbG9jaywgc3RydWN0dXJlKTsKIAotICAgICAgICAg
ICAgICAgIEpJVDo6Y29tcGlsZURpcmVjdFB1dEJ5VmFsKGxvY2tlciwgJnZtLCBjb2RlQmxvY2ss
IGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywgYXJyYXlNb2RlKTsKKyAgICAgICAgICAgICAgICBK
SVQ6OmNvbXBpbGVEaXJlY3RQdXRCeVZhbChsb2NrZXIsIHZtLCBjb2RlQmxvY2ssIGJ5VmFsSW5m
bywgcmV0dXJuQWRkcmVzcywgYXJyYXlNb2RlKTsKICAgICAgICAgICAgICAgICBvcHRpbWl6YXRp
b25SZXN1bHQgPSBPcHRpbWl6YXRpb25SZXN1bHQ6Ok9wdGltaXplZDsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQpAQCAtODc0LDcgKzg3NSw3IEBAIHN0YXRpYyBPcHRpbWl6YXRpb25SZXN1bHQg
dHJ5RGlyZWN0UHV0QnkKICAgICAgICAgICAgIEFTU0VSVCghYnlWYWxJbmZvLT5zdHViUm91dGlu
ZSk7CiAgICAgICAgICAgICBpZiAoYnlWYWxJbmZvLT5zZWVuKSB7CiAgICAgICAgICAgICAgICAg
aWYgKGJ5VmFsSW5mby0+Y2FjaGVkSWQgPT0gcHJvcGVydHlOYW1lKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIEpJVDo6Y29tcGlsZVB1dEJ5VmFsV2l0aENhY2hlZElkPE9wUHV0QnlWYWxEaXJlY3Q+
KCZ2bSwgZXhlYy0+Y29kZUJsb2NrKCksIGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywgRGlyZWN0
LCBwcm9wZXJ0eU5hbWUpOworICAgICAgICAgICAgICAgICAgICBKSVQ6OmNvbXBpbGVQdXRCeVZh
bFdpdGhDYWNoZWRJZDxPcFB1dEJ5VmFsRGlyZWN0Pih2bSwgZXhlYy0+Y29kZUJsb2NrKCksIGJ5
VmFsSW5mbywgcmV0dXJuQWRkcmVzcywgRGlyZWN0LCBwcm9wZXJ0eU5hbWUpOwogICAgICAgICAg
ICAgICAgICAgICBvcHRpbWl6YXRpb25SZXN1bHQgPSBPcHRpbWl6YXRpb25SZXN1bHQ6Ok9wdGlt
aXplZDsKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAvLyBT
ZWVtIGxpa2UgYSBnZW5lcmljIHByb3BlcnR5IGFjY2VzcyBzaXRlLgpAQCAtOTA4LDcgKzkwOSw3
IEBAIHN0YXRpYyBPcHRpbWl6YXRpb25SZXN1bHQgdHJ5RGlyZWN0UHV0QnkKIHZvaWQgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE9wdGltaXplKEV4ZWNTdGF0ZSogZXhlYywg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFN1
YnNjcmlwdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBCeVZhbEluZm8qIGJ5VmFsSW5m
bykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZt
LCBleGVjKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAg
ICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQmFzZVZhbHVlKTsK
QEAgLTkzMCw3ICs5MzEsNyBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRGlyZWN0UHV0
QnlWCiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxHZW5lcmljKEV4ZWNTdGF0
ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZFN1YnNjcmlwdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBCeVZhbEluZm8q
IGJ5VmFsSW5mbykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxG
cmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIg
dHJhY2VyKHZtLCBleGVjKTsKICAgICAKICAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6
OmRlY29kZShlbmNvZGVkQmFzZVZhbHVlKTsKICAgICBKU1ZhbHVlIHN1YnNjcmlwdCA9IEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkU3Vic2NyaXB0KTsKQEAgLTk0Myw3ICs5NDQsNyBAQCB2b2lkIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxHZW5lCiB2b2lkIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uRGlyZWN0UHV0QnlWYWxHZW5lcmljKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZEJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFN1YnNjcmlwdCwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBCeVZhbEluZm8qIGJ5VmFsSW5mbykKIHsKICAgICBW
TSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZt
LCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAg
ICAKICAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQmFzZVZh
bHVlKTsKICAgICBKU1ZhbHVlIHN1YnNjcmlwdCA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkU3Vi
c2NyaXB0KTsKQEAgLTk1NCw4ICs5NTUsOCBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
RGlyZWN0UHV0QnlWCiAKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ2Fs
bEV2YWwoRXhlY1N0YXRlKiBleGVjLCBFeGVjU3RhdGUqIGV4ZWNDYWxsZWUpCiB7Ci0gICAgVk0q
IHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
KnZtKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIGV4ZWNDYWxsZWUtPnNldENvZGVCbG9jaygwKTsKICAg
ICAKQEAgLTk3MSwyNCArOTcyLDI0IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uQ2EKIHN0YXRpYyBTbG93UGF0aFJldHVyblR5cGUgaGFuZGxlSG9zdENhbGwoRXhlY1N0
YXRlKiBleGVjQ2FsbGVlLCBKU1ZhbHVlIGNhbGxlZSwgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0lu
Zm8pCiB7CiAgICAgRXhlY1N0YXRlKiBleGVjID0gZXhlY0NhbGxlZS0+Y2FsbGVyRnJhbWUoKTsK
LSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSgqdm0pOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgZXhlY0NhbGxlZS0+c2V0Q29kZUJsb2Nr
KDApOwogCiAgICAgaWYgKGNhbGxMaW5rSW5mby0+c3BlY2lhbGl6YXRpb25LaW5kKCkgPT0gQ29k
ZUZvckNhbGwpIHsKICAgICAgICAgQ2FsbERhdGEgY2FsbERhdGE7Ci0gICAgICAgIENhbGxUeXBl
IGNhbGxUeXBlID0gZ2V0Q2FsbERhdGEoKnZtLCBjYWxsZWUsIGNhbGxEYXRhKTsKKyAgICAgICAg
Q2FsbFR5cGUgY2FsbFR5cGUgPSBnZXRDYWxsRGF0YSh2bSwgY2FsbGVlLCBjYWxsRGF0YSk7CiAg
ICAgCiAgICAgICAgIEFTU0VSVChjYWxsVHlwZSAhPSBDYWxsVHlwZTo6SlMpOwogICAgIAogICAg
ICAgICBpZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGU6Okhvc3QpIHsKICAgICAgICAgICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWNDYWxsZWUpOwogICAgICAgICAgICAgZXhl
Y0NhbGxlZS0+c2V0Q2FsbGVlKGFzT2JqZWN0KGNhbGxlZSkpOwotICAgICAgICAgICAgdm0tPmhv
c3RDYWxsUmV0dXJuVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoY2FsbERhdGEubmF0aXZlLmZ1bmN0
aW9uKGV4ZWNDYWxsZWUpKTsKKyAgICAgICAgICAgIHZtLmhvc3RDYWxsUmV0dXJuVmFsdWUgPSBK
U1ZhbHVlOjpkZWNvZGUoY2FsbERhdGEubmF0aXZlLmZ1bmN0aW9uKGV4ZWNDYWxsZWUpKTsKICAg
ICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpIHsKICAgICAgICAgICAg
ICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KAotICAgICAgICAgICAgICAgICAgICB2bS0+Z2V0Q1RJ
U3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLnJldGFnZ2VkQ29k
ZTxKU0VudHJ5UHRyVGFnPigpLmV4ZWN1dGFibGVBZGRyZXNzKCksCisgICAgICAgICAgICAgICAg
ICAgIHZtLmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9y
KS5yZXRhZ2dlZENvZGU8SlNFbnRyeVB0clRhZz4oKS5leGVjdXRhYmxlQWRkcmVzcygpLAogICAg
ICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PHZvaWQqPihLZWVwVGhlRnJhbWUpKTsK
ICAgICAgICAgICAgIH0KIApAQCAtMTAwMCwyNCArMTAwMSwyNCBAQCBzdGF0aWMgU2xvd1BhdGhS
ZXR1cm5UeXBlIGhhbmRsZUhvc3RDYWxsCiAgICAgICAgIEFTU0VSVChjYWxsVHlwZSA9PSBDYWxs
VHlwZTo6Tm9uZSk7CiAgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHNjb3BlLCBjcmVhdGVO
b3RBRnVuY3Rpb25FcnJvcihleGVjLCBjYWxsZWUpKTsKICAgICAgICAgcmV0dXJuIGVuY29kZVJl
c3VsdCgKLSAgICAgICAgICAgIHZtLT5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxT
bG93UGF0aEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPEpTRW50cnlQdHJUYWc+KCkuZXhlY3V0YWJs
ZUFkZHJlc3MoKSwKKyAgICAgICAgICAgIHZtLmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9t
Q2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8SlNFbnRyeVB0clRhZz4oKS5leGVj
dXRhYmxlQWRkcmVzcygpLAogICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oS2Vl
cFRoZUZyYW1lKSk7CiAgICAgfQogCiAgICAgQVNTRVJUKGNhbGxMaW5rSW5mby0+c3BlY2lhbGl6
YXRpb25LaW5kKCkgPT0gQ29kZUZvckNvbnN0cnVjdCk7CiAgICAgCiAgICAgQ29uc3RydWN0RGF0
YSBjb25zdHJ1Y3REYXRhOwotICAgIENvbnN0cnVjdFR5cGUgY29uc3RydWN0VHlwZSA9IGdldENv
bnN0cnVjdERhdGEoKnZtLCBjYWxsZWUsIGNvbnN0cnVjdERhdGEpOworICAgIENvbnN0cnVjdFR5
cGUgY29uc3RydWN0VHlwZSA9IGdldENvbnN0cnVjdERhdGEodm0sIGNhbGxlZSwgY29uc3RydWN0
RGF0YSk7CiAgICAgCiAgICAgQVNTRVJUKGNvbnN0cnVjdFR5cGUgIT0gQ29uc3RydWN0VHlwZTo6
SlMpOwogICAgIAogICAgIGlmIChjb25zdHJ1Y3RUeXBlID09IENvbnN0cnVjdFR5cGU6Okhvc3Qp
IHsKICAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlY0NhbGxlZSk7
CiAgICAgICAgIGV4ZWNDYWxsZWUtPnNldENhbGxlZShhc09iamVjdChjYWxsZWUpKTsKLSAgICAg
ICAgdm0tPmhvc3RDYWxsUmV0dXJuVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoY29uc3RydWN0RGF0
YS5uYXRpdmUuZnVuY3Rpb24oZXhlY0NhbGxlZSkpOworICAgICAgICB2bS5ob3N0Q2FsbFJldHVy
blZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGNvbnN0cnVjdERhdGEubmF0aXZlLmZ1bmN0aW9uKGV4
ZWNDYWxsZWUpKTsKICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgewog
ICAgICAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdCgKLSAgICAgICAgICAgICAgICB2bS0+Z2V0
Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLnJldGFnZ2Vk
Q29kZTxKU0VudHJ5UHRyVGFnPigpLmV4ZWN1dGFibGVBZGRyZXNzKCksCisgICAgICAgICAgICAg
ICAgdm0uZ2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3Ip
LnJldGFnZ2VkQ29kZTxKU0VudHJ5UHRyVGFnPigpLmV4ZWN1dGFibGVBZGRyZXNzKCksCiAgICAg
ICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oS2VlcFRoZUZyYW1lKSk7CiAgICAg
ICAgIH0KIApAQCAtMTAyNywxNSArMTAyOCwxNSBAQCBzdGF0aWMgU2xvd1BhdGhSZXR1cm5UeXBl
IGhhbmRsZUhvc3RDYWxsCiAgICAgQVNTRVJUKGNvbnN0cnVjdFR5cGUgPT0gQ29uc3RydWN0VHlw
ZTo6Tm9uZSk7CiAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIGNyZWF0ZU5vdEFDb25z
dHJ1Y3RvckVycm9yKGV4ZWMsIGNhbGxlZSkpOwogICAgIHJldHVybiBlbmNvZGVSZXN1bHQoCi0g
ICAgICAgIHZtLT5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVy
YXRvcikucmV0YWdnZWRDb2RlPEpTRW50cnlQdHJUYWc+KCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwK
KyAgICAgICAgdm0uZ2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5l
cmF0b3IpLnJldGFnZ2VkQ29kZTxKU0VudHJ5UHRyVGFnPigpLmV4ZWN1dGFibGVBZGRyZXNzKCks
CiAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEtlZXBUaGVGcmFtZSkpOwogfQogCiBT
bG93UGF0aFJldHVyblR5cGUgSklUX09QRVJBVElPTiBvcGVyYXRpb25MaW5rQ2FsbChFeGVjU3Rh
dGUqIGV4ZWNDYWxsZWUsIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvKQogewogICAgIEV4ZWNT
dGF0ZSogZXhlYyA9IGV4ZWNDYWxsZWUtPmNhbGxlckZyYW1lKCk7Ci0gICAgVk0qIHZtID0gJmV4
ZWMtPnZtKCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSgqdm0p
OworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQgPSBj
YWxsTGlua0luZm8tPnNwZWNpYWxpemF0aW9uS2luZCgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRy
YWNlciB0cmFjZXIodm0sIGV4ZWMpOwpAQCAtMTA0NSw4ICsxMDQ2LDggQEAgU2xvd1BhdGhSZXR1
cm5UeXBlIEpJVF9PUEVSQVRJT04gb3BlcmF0aQogICAgIEpTVmFsdWUgY2FsbGVlQXNWYWx1ZSA9
IGV4ZWNDYWxsZWUtPmd1YXJhbnRlZWRKU1ZhbHVlQ2FsbGVlKCk7CiAgICAgSlNDZWxsKiBjYWxs
ZWVBc0Z1bmN0aW9uQ2VsbCA9IGdldEpTRnVuY3Rpb24oY2FsbGVlQXNWYWx1ZSk7CiAgICAgaWYg
KCFjYWxsZWVBc0Z1bmN0aW9uQ2VsbCkgewotICAgICAgICBpZiAoYXV0byogaW50ZXJuYWxGdW5j
dGlvbiA9IGpzRHluYW1pY0Nhc3Q8SW50ZXJuYWxGdW5jdGlvbio+KCp2bSwgY2FsbGVlQXNWYWx1
ZSkpIHsKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBj
b2RlUHRyID0gdm0tPmdldENUSUludGVybmFsRnVuY3Rpb25UcmFtcG9saW5lRm9yKGtpbmQpOwor
ICAgICAgICBpZiAoYXV0byogaW50ZXJuYWxGdW5jdGlvbiA9IGpzRHluYW1pY0Nhc3Q8SW50ZXJu
YWxGdW5jdGlvbio+KHZtLCBjYWxsZWVBc1ZhbHVlKSkgeworICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGNvZGVQdHIgPSB2bS5nZXRDVElJbnRlcm5hbEZ1
bmN0aW9uVHJhbXBvbGluZUZvcihraW5kKTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCEh
Y29kZVB0cik7CiAKICAgICAgICAgICAgIGlmICghY2FsbExpbmtJbmZvLT5zZWVuT25jZSgpKQpA
QCAtMTA2NywxNCArMTA2OCwxNCBAQCBTbG93UGF0aFJldHVyblR5cGUgSklUX09QRVJBVElPTiBv
cGVyYXRpCiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGNvZGVQdHI7
CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBudWxscHRyOwogICAgIGlmIChleGVjdXRhYmxl
LT5pc0hvc3RGdW5jdGlvbigpKSB7Ci0gICAgICAgIGNvZGVQdHIgPSBqc1RvV2FzbUlDQ29kZVB0
cigqdm0sIGtpbmQsIGNhbGxlZSk7CisgICAgICAgIGNvZGVQdHIgPSBqc1RvV2FzbUlDQ29kZVB0
cih2bSwga2luZCwgY2FsbGVlKTsKICAgICAgICAgaWYgKCFjb2RlUHRyKQogICAgICAgICAgICAg
Y29kZVB0ciA9IGV4ZWN1dGFibGUtPmVudHJ5cG9pbnRGb3Ioa2luZCwgTXVzdENoZWNrQXJpdHkp
OwogICAgIH0gZWxzZSB7CiAgICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25FeGVj
dXRhYmxlID0gc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oZXhlY3V0YWJsZSk7CiAK
ICAgICAgICAgYXV0byBoYW5kbGVUaHJvd0V4Y2VwdGlvbiA9IFsmXSAoKSB7Ci0gICAgICAgICAg
ICB2b2lkKiB0aHJvd1RhcmdldCA9IHZtLT5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNh
bGxTbG93UGF0aEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPEpTRW50cnlQdHJUYWc+KCkuZXhlY3V0
YWJsZUFkZHJlc3MoKTsKKyAgICAgICAgICAgIHZvaWQqIHRocm93VGFyZ2V0ID0gdm0uZ2V0Q1RJ
U3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLnJldGFnZ2VkQ29k
ZTxKU0VudHJ5UHRyVGFnPigpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAgICAgICAgICAgICByZXR1
cm4gZW5jb2RlUmVzdWx0KHRocm93VGFyZ2V0LCByZWludGVycHJldF9jYXN0PHZvaWQqPihLZWVw
VGhlRnJhbWUpKTsKICAgICAgICAgfTsKIApAQCAtMTA4NCw3ICsxMDg1LDcgQEAgU2xvd1BhdGhS
ZXR1cm5UeXBlIEpJVF9PUEVSQVRJT04gb3BlcmF0aQogICAgICAgICB9CiAKICAgICAgICAgQ29k
ZUJsb2NrKiogY29kZUJsb2NrU2xvdCA9IGV4ZWNDYWxsZWUtPmFkZHJlc3NPZkNvZGVCbG9jaygp
OwotICAgICAgICBFeGNlcHRpb24qIGVycm9yID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5wcmVwYXJl
Rm9yRXhlY3V0aW9uPEZ1bmN0aW9uRXhlY3V0YWJsZT4oKnZtLCBjYWxsZWUsIHNjb3BlLCBraW5k
LCAqY29kZUJsb2NrU2xvdCk7CisgICAgICAgIEV4Y2VwdGlvbiogZXJyb3IgPSBmdW5jdGlvbkV4
ZWN1dGFibGUtPnByZXBhcmVGb3JFeGVjdXRpb248RnVuY3Rpb25FeGVjdXRhYmxlPih2bSwgY2Fs
bGVlLCBzY29wZSwga2luZCwgKmNvZGVCbG9ja1Nsb3QpOwogICAgICAgICBFWENFUFRJT05fQVNT
RVJUKHRocm93U2NvcGUuZXhjZXB0aW9uKCkgPT0gZXJyb3IpOwogICAgICAgICBpZiAoVU5MSUtF
TFkoZXJyb3IpKQogICAgICAgICAgICAgcmV0dXJuIGhhbmRsZVRocm93RXhjZXB0aW9uKCk7CkBA
IC0xMTA3LDggKzExMDgsOCBAQCBTbG93UGF0aFJldHVyblR5cGUgSklUX09QRVJBVElPTiBvcGVy
YXRpCiAKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25MaW5rRGlyZWN0Q2FsbChFeGVjU3Rh
dGUqIGV4ZWMsIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvLCBKU0Z1bmN0aW9uKiBjYWxsZWUp
CiB7Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSgqdm0pOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0
byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBDb2RlU3BlY2lh
bGl6YXRpb25LaW5kIGtpbmQgPSBjYWxsTGlua0luZm8tPnNwZWNpYWxpemF0aW9uS2luZCgpOwog
ICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwpAQCAtMTE0MSw3ICsx
MTQyLDcgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxpbmtEaXJlY3RDYQogCiAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKGlzQ2FsbChraW5kKSB8fCBmdW5jdGlvbkV4ZWN1dGFibGUtPmNv
bnN0cnVjdEFiaWxpdHkoKSAhPSBDb25zdHJ1Y3RBYmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3QpOwog
ICAgICAgICAKLSAgICAgICAgRXhjZXB0aW9uKiBlcnJvciA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+
cHJlcGFyZUZvckV4ZWN1dGlvbjxGdW5jdGlvbkV4ZWN1dGFibGU+KCp2bSwgY2FsbGVlLCBzY29w
ZSwga2luZCwgY29kZUJsb2NrKTsKKyAgICAgICAgRXhjZXB0aW9uKiBlcnJvciA9IGZ1bmN0aW9u
RXhlY3V0YWJsZS0+cHJlcGFyZUZvckV4ZWN1dGlvbjxGdW5jdGlvbkV4ZWN1dGFibGU+KHZtLCBj
YWxsZWUsIHNjb3BlLCBraW5kLCBjb2RlQmxvY2spOwogICAgICAgICBFWENFUFRJT05fQVNTRVJU
X1VOVVNFRCh0aHJvd1Njb3BlLCB0aHJvd1Njb3BlLmV4Y2VwdGlvbigpID09IGVycm9yKTsKICAg
ICAgICAgaWYgKFVOTElLRUxZKGVycm9yKSkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTExNTks
OCArMTE2MCw4IEBAIGlubGluZSBTbG93UGF0aFJldHVyblR5cGUgdmlydHVhbEZvcldpdGgKICAg
ICBFeGVjU3RhdGUqIGV4ZWNDYWxsZWUsIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvLCBKU0Nl
bGwqJiBjYWxsZWVBc0Z1bmN0aW9uQ2VsbCkKIHsKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBleGVj
Q2FsbGVlLT5jYWxsZXJGcmFtZSgpOwotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKKyAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwogCiAgICAgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kID0gY2FsbExpbmtJbmZvLT5zcGVj
aWFsaXphdGlvbktpbmQoKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBl
eGVjKTsKQEAgLTExNjgsOCArMTE2OSw4IEBAIGlubGluZSBTbG93UGF0aFJldHVyblR5cGUgdmly
dHVhbEZvcldpdGgKICAgICBKU1ZhbHVlIGNhbGxlZUFzVmFsdWUgPSBleGVjQ2FsbGVlLT5ndWFy
YW50ZWVkSlNWYWx1ZUNhbGxlZSgpOwogICAgIGNhbGxlZUFzRnVuY3Rpb25DZWxsID0gZ2V0SlNG
dW5jdGlvbihjYWxsZWVBc1ZhbHVlKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhbGxlZUFzRnVuY3Rp
b25DZWxsKSkgewotICAgICAgICBpZiAoanNEeW5hbWljQ2FzdDxJbnRlcm5hbEZ1bmN0aW9uKj4o
KnZtLCBjYWxsZWVBc1ZhbHVlKSkgewotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
PEpTRW50cnlQdHJUYWc+IGNvZGVQdHIgPSB2bS0+Z2V0Q1RJSW50ZXJuYWxGdW5jdGlvblRyYW1w
b2xpbmVGb3Ioa2luZCk7CisgICAgICAgIGlmIChqc0R5bmFtaWNDYXN0PEludGVybmFsRnVuY3Rp
b24qPih2bSwgY2FsbGVlQXNWYWx1ZSkpIHsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29k
ZVB0cjxKU0VudHJ5UHRyVGFnPiBjb2RlUHRyID0gdm0uZ2V0Q1RJSW50ZXJuYWxGdW5jdGlvblRy
YW1wb2xpbmVGb3Ioa2luZCk7CiAgICAgICAgICAgICBBU1NFUlQoISFjb2RlUHRyKTsKICAgICAg
ICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQoY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpLCBy
ZWludGVycHJldF9jYXN0PHZvaWQqPihjYWxsTGlua0luZm8tPmNhbGxNb2RlKCkgPT0gQ2FsbE1v
ZGU6OlRhaWwgPyBSZXVzZVRoZUZyYW1lIDogS2VlcFRoZUZyYW1lKSk7CiAgICAgICAgIH0KQEAg
LTExODUsMTYgKzExODYsMTYgQEAgaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSB2aXJ0dWFsRm9y
V2l0aAogICAgICAgICBpZiAoIWlzQ2FsbChraW5kKSAmJiBmdW5jdGlvbkV4ZWN1dGFibGUtPmNv
bnN0cnVjdEFiaWxpdHkoKSA9PSBDb25zdHJ1Y3RBYmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3QpIHsK
ICAgICAgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEFD
b25zdHJ1Y3RvckVycm9yKGV4ZWMsIGZ1bmN0aW9uKSk7CiAgICAgICAgICAgICByZXR1cm4gZW5j
b2RlUmVzdWx0KAotICAgICAgICAgICAgICAgIHZtLT5nZXRDVElTdHViKHRocm93RXhjZXB0aW9u
RnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPEpTRW50cnlQdHJUYWc+KCku
ZXhlY3V0YWJsZUFkZHJlc3MoKSwKKyAgICAgICAgICAgICAgICB2bS5nZXRDVElTdHViKHRocm93
RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPEpTRW50cnlQ
dHJUYWc+KCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwKICAgICAgICAgICAgICAgICByZWludGVycHJl
dF9jYXN0PHZvaWQqPihLZWVwVGhlRnJhbWUpKTsKICAgICAgICAgfQogCiAgICAgICAgIENvZGVC
bG9jayoqIGNvZGVCbG9ja1Nsb3QgPSBleGVjQ2FsbGVlLT5hZGRyZXNzT2ZDb2RlQmxvY2soKTsK
LSAgICAgICAgRXhjZXB0aW9uKiBlcnJvciA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+cHJlcGFyZUZv
ckV4ZWN1dGlvbjxGdW5jdGlvbkV4ZWN1dGFibGU+KCp2bSwgZnVuY3Rpb24sIHNjb3BlLCBraW5k
LCAqY29kZUJsb2NrU2xvdCk7CisgICAgICAgIEV4Y2VwdGlvbiogZXJyb3IgPSBmdW5jdGlvbkV4
ZWN1dGFibGUtPnByZXBhcmVGb3JFeGVjdXRpb248RnVuY3Rpb25FeGVjdXRhYmxlPih2bSwgZnVu
Y3Rpb24sIHNjb3BlLCBraW5kLCAqY29kZUJsb2NrU2xvdCk7CiAgICAgICAgIEVYQ0VQVElPTl9B
U1NFUlQodGhyb3dTY29wZS5leGNlcHRpb24oKSA9PSBlcnJvcik7CiAgICAgICAgIGlmIChVTkxJ
S0VMWShlcnJvcikpIHsKICAgICAgICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQoCi0gICAgICAg
ICAgICAgICAgdm0tPmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2Vu
ZXJhdG9yKS5yZXRhZ2dlZENvZGU8SlNFbnRyeVB0clRhZz4oKS5leGVjdXRhYmxlQWRkcmVzcygp
LAorICAgICAgICAgICAgICAgIHZtLmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNs
b3dQYXRoR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8SlNFbnRyeVB0clRhZz4oKS5leGVjdXRhYmxl
QWRkcmVzcygpLAogICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEtlZXBU
aGVGcmFtZSkpOwogICAgICAgICB9CiAgICAgfQpAQCAtMTIyMiw3ICsxMjIzLDcgQEAgU2xvd1Bh
dGhSZXR1cm5UeXBlIEpJVF9PUEVSQVRJT04gb3BlcmF0aQogCiBzaXplX3QgSklUX09QRVJBVElP
TiBvcGVyYXRpb25Db21wYXJlTGVzcyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpCiB7Ci0gICAgVk0qIHZtID0gJmV4
ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVU
cmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICAKICAgICByZXR1cm4ganNMZXNzPHRydWU+KGV4
ZWMsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AxKSwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRP
cDIpKTsKQEAgLTEyMzAsNyArMTIzMSw3IEBAIHNpemVfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
bkNvbXBhcmVMZXMKIAogc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZUxlc3NF
cShFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRPcDIpCiB7Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgVk0mIHZt
ID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVj
KTsKIAogICAgIHJldHVybiBqc0xlc3NFcTx0cnVlPihleGVjLCBKU1ZhbHVlOjpkZWNvZGUoZW5j
b2RlZE9wMSksIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AyKSk7CkBAIC0xMjM4LDcgKzEyMzks
NyBAQCBzaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlTGVzCiAKIHNpemVfdCBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyKEV4ZWNTdGF0ZSogZXhlYywgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMikKIHsKLSAg
ICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogCiAgICAgcmV0dXJuIGpzTGVz
czxmYWxzZT4oZXhlYywgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDIpLCBKU1ZhbHVlOjpkZWNv
ZGUoZW5jb2RlZE9wMSkpOwpAQCAtMTI0Niw3ICsxMjQ3LDcgQEAgc2l6ZV90IEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uQ29tcGFyZUdyZQogCiBzaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25D
b21wYXJlR3JlYXRlckVxKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9w
MSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMikKIHsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0o
KTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIodm0sIGV4ZWMpOwogCiAgICAgcmV0dXJuIGpzTGVzc0VxPGZhbHNlPihleGVjLCBKU1Zh
bHVlOjpkZWNvZGUoZW5jb2RlZE9wMiksIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AxKSk7CkBA
IC0xMjU0LDcgKzEyNTUsNyBAQCBzaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJl
R3JlCiAKIHNpemVfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVFcShFeGVjU3RhdGUq
IGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRP
cDIpCiB7Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKIAogICAgIHJl
dHVybiBKU1ZhbHVlOjplcXVhbFNsb3dDYXNlSW5saW5lKGV4ZWMsIEpTVmFsdWU6OmRlY29kZShl
bmNvZGVkT3AxKSwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDIpKTsKQEAgLTEyNjYsNyArMTI2
Nyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ28KIHNpemVfdCBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVTdHJpbmdFcShFeGVjU3RhdGUqIGV4ZWMsIEpT
Q2VsbCogbGVmdCwgSlNDZWxsKiByaWdodCkKICNlbmRpZgogewotICAgIFZNKiB2bSA9ICZleGVj
LT52bSgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcih2bSwgZXhlYyk7CiAKICAgICBib29sIHJlc3VsdCA9IGFzU3RyaW5nKGxlZnQp
LT5lcXVhbChleGVjLCBhc1N0cmluZyhyaWdodCkpOwpAQCAtMTI3OSw3ICsxMjgwLDcgQEAgc2l6
ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZVN0cgogCiBzaXplX3QgSklUX09QRVJB
VElPTiBvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKQogewotICAgIFZNKiB2
bSA9ICZleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAKICAgICBKU1ZhbHVlIHNyYzEgPSBKU1Zh
bHVlOjpkZWNvZGUoZW5jb2RlZE9wMSk7CkBAIC0xMjkwLDE0ICsxMjkxLDE0IEBAIHNpemVfdCBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVTdHIKIAogRW5jb2RlZEpTVmFsdWUgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25OZXdBcnJheVdpdGhQcm9maWxlKEV4ZWNTdGF0ZSogZXhlYywgQXJy
YXlBbGxvY2F0aW9uUHJvZmlsZSogcHJvZmlsZSwgY29uc3QgSlNWYWx1ZSogdmFsdWVzLCBpbnQg
c2l6ZSkKIHsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBleGVjLT52
bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoY29uc3RydWN0QXJyYXlOZWdhdGl2ZUluZGV4ZWQoZXhlYywg
cHJvZmlsZSwgdmFsdWVzLCBzaXplKSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUoRXhlY1N0YXRlKiBleGVjLCBB
cnJheUFsbG9jYXRpb25Qcm9maWxlKiBwcm9maWxlLCBFbmNvZGVkSlNWYWx1ZSBzaXplKQogewot
ICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgSlNWYWx1ZSBzaXpl
VmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoc2l6ZSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShjb25zdHJ1Y3RBcnJheVdpdGhTaXplUXVpcmsoZXhlYywgcHJvZmlsZSwgZXhlYy0+bGV4aWNh
bEdsb2JhbE9iamVjdCgpLCBzaXplVmFsdWUpKTsKQEAgLTEzMTAsNyArMTMxMSw3IEBAIHN0YXRp
YyBFbmNvZGVkSlNWYWx1ZSBvcGVyYXRpb25OZXdGdW5jdGkKIHsKICAgICBWTSYgdm0gPSBleGVj
LT52bSgpOwogICAgIEFTU0VSVChmdW5jdGlvbkV4ZWN1dGFibGUtPmluaGVyaXRzPEZ1bmN0aW9u
RXhlY3V0YWJsZT4odm0pKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwg
ZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAg
aWYgKGlzSW52YWxpZGF0ZWQpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoRnVuY3Rp
b25UeXBlOjpjcmVhdGVXaXRoSW52YWxpZGF0ZWRSZWFsbG9jYXRpb25XYXRjaHBvaW50KHZtLCBz
dGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihmdW5jdGlvbkV4ZWN1dGFibGUpLCBzY29w
ZSkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoRnVuY3Rpb25UeXBlOjpjcmVhdGUodm0s
IHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGZ1bmN0aW9uRXhlY3V0YWJsZSksIHNj
b3BlKSk7CkBAIC0xMzYwLDcgKzEzNjEsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvbk5lCiAgICAgCiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uU2V0RnVuY3Rp
b25OYW1lKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBmdW5jQ2VsbCwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZE5hbWUpCiB7Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsK
IAogICAgIEpTRnVuY3Rpb24qIGZ1bmMgPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KGZ1bmNDZWxsKTsK
QEAgLTEzNzAsNyArMTM3MSw3IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25TZXRGdW5j
dGlvbk4KIAogSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld09iamVjdChFeGVjU3Rh
dGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlKQogewotICAgIFZNKiB2bSA9ICZleGVjLT52
bSgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcih2bSwgZXhlYyk7CiAKICAgICByZXR1cm4gY29uc3RydWN0RW1wdHlPYmplY3QoZXhl
Yywgc3RydWN0dXJlKTsKQEAgLTEzODAsNyArMTM4MSw3IEBAIEpTQ2VsbCogSklUX09QRVJBVElP
TiBvcGVyYXRpb25OZXdSZWdleHAKIHsKICAgICBTdXBlclNhbXBsZXJTY29wZSBzdXBlclNhbXBs
ZXJTY29wZShmYWxzZSk7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcih2bSwgZXhlYyk7CiAKICAgICBSZWdFeHAqIHJlZ2V4cCA9IHN0YXRpY19jYXN0PFJl
Z0V4cCo+KHJlZ2V4cFB0cik7CiAgICAgQVNTRVJUKHJlZ2V4cC0+aXNWYWxpZCgpKTsKQEAgLTEz
OTQsNyArMTM5NSw3IEBAIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdSZWdleHAK
IFVudXNlZFB0ciBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkhhbmRsZVRyYXBzKEV4ZWNTdGF0ZSog
ZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRy
YWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KHZtLCBleGVjKTsKICAgICBBU1NFUlQodm0ubmVlZFRyYXBIYW5kbGluZygpKTsKICAgICB2bS5o
YW5kbGVUcmFwcyhleGVjKTsKICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTE0MDMsNyArMTQwNCw3
IEBAIFVudXNlZFB0ciBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkhhbmRsZVQKIHZvaWQgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25EZWJ1ZyhFeGVjU3RhdGUqIGV4ZWMsIGludDMyX3QgZGVidWdIb29r
VHlwZSkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRy
YWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KHZtLCBleGVjKTsKIAogICAgIHZtLmludGVycHJldGVyLT5kZWJ1ZyhleGVjLCBzdGF0aWNfY2Fz
dDxEZWJ1Z0hvb2tUeXBlPihkZWJ1Z0hvb2tUeXBlKSk7CiB9CkBAIC0xNDE4LDcgKzE0MTksNyBA
QCBzdGF0aWMgdm9pZCB1cGRhdGVBbGxQcmVkaWN0aW9uc0FuZE9wdGltCiBTbG93UGF0aFJldHVy
blR5cGUgSklUX09QRVJBVElPTiBvcGVyYXRpb25PcHRpbWl6ZShFeGVjU3RhdGUqIGV4ZWMsIHVp
bnQzMl90IGJ5dGVjb2RlSW5kZXgpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAKICAgICAvLyBEZWZlciBHQyBmb3IgYSB3aGls
ZSBzbyB0aGF0IGl0IGRvZXNuJ3QgcnVuIGJldHdlZW4gd2hlbiB3ZSBlbnRlciBpbnRvIHRoaXMK
ICAgICAvLyBzbG93IHBhdGggYW5kIHdoZW4gd2UgZmlndXJlIG91dCB0aGUgc3RhdGUgb2Ygb3Vy
IGNvZGUgYmxvY2suIFRoaXMgcHJldmVudHMKQEAgLTE2NjMsNyArMTY2NCw3IEBAIFNsb3dQYXRo
UmV0dXJuVHlwZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGkKIGNoYXIqIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNoKEV4ZWNTdGF0ZSogZXhlYywgdWludDMyX3QgYnl0ZWNv
ZGVJbmRleCkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKHZtLCBleGVjKTsKIAogICAgIENvZGVCbG9jayogb3B0aW1pemVkUmVwbGFjZW1lbnQgPSBl
eGVjLT5jb2RlQmxvY2soKS0+cmVwbGFjZW1lbnQoKTsKICAgICBpZiAoVU5MSUtFTFkoIW9wdGlt
aXplZFJlcGxhY2VtZW50KSkKQEAgLTE2ODQsNyArMTY4NSw3IEBAIGNoYXIqIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uVHJ5T1NSRW50ZXIKIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVHJ5
T1NSRW50ZXJBdENhdGNoQW5kVmFsdWVQcm9maWxlKEV4ZWNTdGF0ZSogZXhlYywgdWludDMyX3Qg
Ynl0ZWNvZGVJbmRleCkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFj
ZXIgdHJhY2VyKHZtLCBleGVjKTsKIAogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+
Y29kZUJsb2NrKCk7CiAgICAgQ29kZUJsb2NrKiBvcHRpbWl6ZWRSZXBsYWNlbWVudCA9IGNvZGVC
bG9jay0+cmVwbGFjZW1lbnQoKTsKQEAgLTE3MTYsNyArMTcxNyw3IEBAIGNoYXIqIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uVHJ5T1NSRW50ZXIKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25Q
dXRCeUluZGV4KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEFycmF5VmFs
dWUsIGludDMyX3QgaW5kZXgsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICBW
TSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZt
LCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKIAog
ICAgIEpTVmFsdWUgYXJyYXlWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQXJyYXlWYWx1
ZSk7CiAgICAgQVNTRVJUKGlzSlNBcnJheShhcnJheVZhbHVlKSk7CkBAIC0xNzQ1LDcgKzE3NDYs
NyBAQCBzdGF0aWMgdm9pZCBwdXRBY2Nlc3NvckJ5VmFsKEV4ZWNTdGF0ZSogCiB2b2lkIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uUHV0R2V0dGVyQnlJZChFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCog
b2JqZWN0LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBpbnQzMl90IG9wdGlvbnMsIEpTQ2VsbCog
Z2V0dGVyKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIodm0sIGV4ZWMpOwogCiAgICAgQVNTRVJUKG9iamVjdCAmJiBvYmplY3QtPmlzT2JqZWN0KCkp
OwogICAgIEpTT2JqZWN0KiBiYXNlT2JqID0gb2JqZWN0LT5nZXRPYmplY3QoKTsKQEAgLTE3NTcs
NyArMTc1OCw3IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRHZXR0ZXJCeUkKIHZv
aWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRTZXR0ZXJCeUlkKEV4ZWNTdGF0ZSogZXhlYywg
SlNDZWxsKiBvYmplY3QsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIGludDMyX3Qgb3B0aW9ucywg
SlNDZWxsKiBzZXR0ZXIpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcih2bSwgZXhlYyk7CiAKICAgICBBU1NFUlQob2JqZWN0ICYmIG9iamVjdC0+aXNP
YmplY3QoKSk7CiAgICAgSlNPYmplY3QqIGJhc2VPYmogPSBvYmplY3QtPmdldE9iamVjdCgpOwpA
QCAtMTc2OSw3ICsxNzcwLDcgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dFNldHRl
ckJ5SQogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEdldHRlckJ5VmFsKEV4ZWNTdGF0
ZSogZXhlYywgSlNDZWxsKiBiYXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkU3Vic2NyaXB0LCBp
bnQzMl90IGF0dHJpYnV0ZSwgSlNDZWxsKiBnZXR0ZXIpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAKICAgICBwdXRBY2Nlc3Nv
ckJ5VmFsKGV4ZWMsIGFzT2JqZWN0KGJhc2UpLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFN1YnNj
cmlwdCksIGF0dHJpYnV0ZSwgYXNPYmplY3QoZ2V0dGVyKSwgQWNjZXNzb3JUeXBlOjpHZXR0ZXIp
OwogfQpAQCAtMTc3Nyw3ICsxNzc4LDcgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1
dEdldHRlckJ5Vgogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dFNldHRlckJ5VmFsKEV4
ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBiYXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkU3Vic2Ny
aXB0LCBpbnQzMl90IGF0dHJpYnV0ZSwgSlNDZWxsKiBzZXR0ZXIpCiB7CiAgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7
CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAKICAgICBwdXRB
Y2Nlc3NvckJ5VmFsKGV4ZWMsIGFzT2JqZWN0KGJhc2UpLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2Rl
ZFN1YnNjcmlwdCksIGF0dHJpYnV0ZSwgYXNPYmplY3Qoc2V0dGVyKSwgQWNjZXNzb3JUeXBlOjpT
ZXR0ZXIpOwogfQpAQCAtMTc4Niw3ICsxNzg3LDcgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvblB1dFNldHRlckJ5Vgogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEdldHRlclNl
dHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogb2JqZWN0LCBVbmlxdWVkU3RyaW5nSW1wbCog
dWlkLCBpbnQzMl90IGF0dHJpYnV0ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEdldHRlclZhbHVl
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkU2V0dGVyVmFsdWUpCiB7CiAgICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7Cisg
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAKICAgICBBU1NFUlQo
b2JqZWN0ICYmIG9iamVjdC0+aXNPYmplY3QoKSk7CiAgICAgSlNPYmplY3QqIGJhc2VPYmplY3Qg
PSBhc09iamVjdChvYmplY3QpOwpAQCAtMTgwMiw3ICsxODAzLDcgQEAgdm9pZCBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvblB1dEdldHRlclNldAogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1
dEdldHRlclNldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogb2JqZWN0LCBVbmlxdWVkU3Ry
aW5nSW1wbCogdWlkLCBpbnQzMl90IGF0dHJpYnV0ZSwgSlNDZWxsKiBnZXR0ZXJDZWxsLCBKU0Nl
bGwqIHNldHRlckNlbGwpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcih2bSwgZXhlYyk7CiAKICAgICBBU1NFUlQob2JqZWN0ICYmIG9iamVjdC0+aXNP
YmplY3QoKSk7CiAgICAgSlNPYmplY3QqIGJhc2VPYmplY3QgPSBhc09iamVjdChvYmplY3QpOwpA
QCAtMTgxOCw3ICsxODE5LDcgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEdldHRl
clNldAogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblBvcFNjb3BlKEV4ZWNTdGF0ZSogZXhl
YywgaW50MzJfdCBzY29wZVJlZykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKIAogICAgIEpTU2NvcGUqIHNjb3BlID0gZXhlYy0+
dW5jaGVja2VkUihzY29wZVJlZykuUmVnaXN0ZXI6OnNjb3BlKCk7CiAgICAgZXhlYy0+dW5jaGVj
a2VkUihzY29wZVJlZykgPSBzY29wZS0+bmV4dCgpOwpAQCAtMTgyNyw3ICsxODI4LDcgQEAgdm9p
ZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblBvcFNjb3BlKEV4ZQogaW50MzJfdCBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvbkluc3RhbmNlT2ZDdXN0b20oRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkVmFsdWUsIEpTT2JqZWN0KiBjb25zdHJ1Y3RvciwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZEhhc0luc3RhbmNlKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogCiAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6
OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIEpTVmFsdWUgaGFzSW5zdGFuY2VWYWx1ZSA9IEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkSGFzSW5zdGFuY2UpOwpAQCAtMTkzNCw3ICsxOTM1LDcgQEAg
c3RhdGljIE9wdGltaXphdGlvblJlc3VsdCB0cnlHZXRCeVZhbE9wdAogICAgICAgICAgICAgICAg
IENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2spOwogICAgICAgICAg
ICAgICAgIGJ5VmFsSW5mby0+YXJyYXlQcm9maWxlLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24o
bG9ja2VyLCBjb2RlQmxvY2ssIHN0cnVjdHVyZSk7CiAKLSAgICAgICAgICAgICAgICBKSVQ6OmNv
bXBpbGVHZXRCeVZhbChsb2NrZXIsICZ2bSwgY29kZUJsb2NrLCBieVZhbEluZm8sIHJldHVybkFk
ZHJlc3MsIGFycmF5TW9kZSk7CisgICAgICAgICAgICAgICAgSklUOjpjb21waWxlR2V0QnlWYWwo
bG9ja2VyLCB2bSwgY29kZUJsb2NrLCBieVZhbEluZm8sIHJldHVybkFkZHJlc3MsIGFycmF5TW9k
ZSk7CiAgICAgICAgICAgICAgICAgb3B0aW1pemF0aW9uUmVzdWx0ID0gT3B0aW1pemF0aW9uUmVz
dWx0OjpPcHRpbWl6ZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTE5NTIsNyArMTk1
Myw3IEBAIHN0YXRpYyBPcHRpbWl6YXRpb25SZXN1bHQgdHJ5R2V0QnlWYWxPcHQKICAgICAgICAg
ICAgIEFTU0VSVCghYnlWYWxJbmZvLT5zdHViUm91dGluZSk7CiAgICAgICAgICAgICBpZiAoYnlW
YWxJbmZvLT5zZWVuKSB7CiAgICAgICAgICAgICAgICAgaWYgKGJ5VmFsSW5mby0+Y2FjaGVkSWQg
PT0gcHJvcGVydHlOYW1lKSB7Ci0gICAgICAgICAgICAgICAgICAgIEpJVDo6Y29tcGlsZUdldEJ5
VmFsV2l0aENhY2hlZElkKCZ2bSwgZXhlYy0+Y29kZUJsb2NrKCksIGJ5VmFsSW5mbywgcmV0dXJu
QWRkcmVzcywgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgSklUOjpjb21waWxl
R2V0QnlWYWxXaXRoQ2FjaGVkSWQodm0sIGV4ZWMtPmNvZGVCbG9jaygpLCBieVZhbEluZm8sIHJl
dHVybkFkZHJlc3MsIHByb3BlcnR5TmFtZSk7CiAgICAgICAgICAgICAgICAgICAgIG9wdGltaXph
dGlvblJlc3VsdCA9IE9wdGltaXphdGlvblJlc3VsdDo6T3B0aW1pemVkOwogICAgICAgICAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIFNlZW0gbGlrZSBhIGdlbmVyaWMg
cHJvcGVydHkgYWNjZXNzIHNpdGUuCkBAIC0xOTg4LDcgKzE5ODksNyBAQCBleHRlcm4gIkMiIHsK
IEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0QnlWYWxHZW5lcmljKEV4
ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRTdWJzY3JpcHQsIEJ5VmFsSW5mbyogYnlWYWxJbmZvKQogewogICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMp
OworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIEpTVmFs
dWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNlKTsKICAgICBKU1ZhbHVl
IHN1YnNjcmlwdCA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkU3Vic2NyaXB0KTsKIApAQCAtMTk5
OSw3ICsyMDAwLDcgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZQog
RW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplKEV4
ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRTdWJzY3JpcHQsIEJ5VmFsSW5mbyogYnlWYWxJbmZvKQogewogICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMp
OworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEpTVmFsdWUgYmFzZVZhbHVl
ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNlKTsKQEAgLTIwMTksNyArMjAyMCw3IEBAIEVu
Y29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2UKIEVuY29kZWRKU1ZhbHVlIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uSGFzSW5kZXhlZFByb3BlcnR5RGVmYXVsdChFeGVjU3RhdGUq
IGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
U3Vic2NyaXB0LCBCeVZhbEluZm8qIGJ5VmFsSW5mbykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52
bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICBKU1ZhbHVlIGJhc2VW
YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQmFzZSk7CiAgICAgSlNWYWx1ZSBzdWJzY3Jp
cHQgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFN1YnNjcmlwdCk7CiAgICAgCkBAIC0yMDM2LDcg
KzIwMzcsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkhhCiAgICAg
ICAgIC8vIEF0dGVtcHQgdG8gb3B0aW1pemUuCiAgICAgICAgIEpJVEFycmF5TW9kZSBhcnJheU1v
ZGUgPSBqaXRBcnJheU1vZGVGb3JTdHJ1Y3R1cmUob2JqZWN0LT5zdHJ1Y3R1cmUodm0pKTsKICAg
ICAgICAgaWYgKGFycmF5TW9kZSAhPSBieVZhbEluZm8tPmFycmF5TW9kZSkgewotICAgICAgICAg
ICAgSklUOjpjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KCZ2bSwgZXhlYy0+Y29kZUJsb2NrKCks
IGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0cihPVVJfUkVUVVJOX0FERFJFU1MpLCBhcnJheU1v
ZGUpOworICAgICAgICAgICAgSklUOjpjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KHZtLCBleGVj
LT5jb2RlQmxvY2soKSwgYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyKE9VUl9SRVRVUk5fQURE
UkVTUyksIGFycmF5TW9kZSk7CiAgICAgICAgICAgICBkaWRPcHRpbWl6ZSA9IHRydWU7CiAgICAg
ICAgIH0KICAgICB9CkBAIC0yMDY2LDcgKzIwNjcsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbkhhCiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
bkhhc0luZGV4ZWRQcm9wZXJ0eUdlbmVyaWMoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkQmFzZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFN1YnNjcmlwdCwgQnlWYWxJbmZv
KiBieVZhbEluZm8pCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcih2bSwgZXhlYyk7CiAgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNv
ZGUoZW5jb2RlZEJhc2UpOwogICAgIEpTVmFsdWUgc3Vic2NyaXB0ID0gSlNWYWx1ZTo6ZGVjb2Rl
KGVuY29kZWRTdWJzY3JpcHQpOwogICAgIApAQCAtMjA4Niw3ICsyMDg3LDcgQEAgRW5jb2RlZEpT
VmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25IYQogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJB
VElPTiBvcGVyYXRpb25HZXRCeVZhbFN0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRCYXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkU3Vic2NyaXB0LCBCeVZhbElu
Zm8qIGJ5VmFsSW5mbykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFj
ZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CiAgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJh
c2UpOwogICAgIEpTVmFsdWUgc3Vic2NyaXB0ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRTdWJz
Y3JpcHQpOwpAQCAtMjEyNCwxNCArMjEyNSwxNCBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvbkRlCiBzaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25EZWxldGVCeUlk
KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIFVuaXF1ZWRTdHJp
bmdJbXBsKiB1aWQpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcih2bSwgZXhlYyk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogCiAgICAgSlNPYmplY3QqIGJhc2VPYmogPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJh
c2UpLnRvT2JqZWN0KGV4ZWMpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNl
KTsKICAgICBpZiAoIWJhc2VPYmopCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBib29sIGNv
dWxkRGVsZXRlID0gYmFzZU9iai0+bWV0aG9kVGFibGUodm0pLT5kZWxldGVQcm9wZXJ0eShiYXNl
T2JqLCBleGVjLCBJZGVudGlmaWVyOjpmcm9tVWlkKCZ2bSwgdWlkKSk7CisgICAgYm9vbCBjb3Vs
ZERlbGV0ZSA9IGJhc2VPYmotPm1ldGhvZFRhYmxlKHZtKS0+ZGVsZXRlUHJvcGVydHkoYmFzZU9i
aiwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgdWlkKSk7CiAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgZmFsc2UpOwogICAgIGlmICghY291bGREZWxldGUgJiYgZXhlYy0+Y29k
ZUJsb2NrKCktPmlzU3RyaWN0TW9kZSgpKQogICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBz
Y29wZSwgVW5hYmxlVG9EZWxldGVQcm9wZXJ0eUVycm9yKTsKQEAgLTIxNDYsNyArMjE0Nyw3IEBA
IEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRGUKIHNpemVfdCBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbkRlbGV0ZUJ5VmFsKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZEJhc2UsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRLZXkpCiB7CiAgICAgVk0mIHZt
ID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhl
Yyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgSlNPYmplY3QqIGJhc2VP
YmogPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2UpLnRvT2JqZWN0KGV4ZWMpOwpAQCAtMjE3
Myw3ICsyMTc0LDcgQEAgc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRGVsZXRlQnlWYQog
SlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1c2hXaXRoU2NvcGUoRXhlY1N0YXRlKiBl
eGVjLCBKU0NlbGwqIGN1cnJlbnRTY29wZUNlbGwsIEVuY29kZWRKU1ZhbHVlIG9iamVjdFZhbHVl
KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0s
IGV4ZWMpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAg
IEpTT2JqZWN0KiBvYmplY3QgPSBKU1ZhbHVlOjpkZWNvZGUob2JqZWN0VmFsdWUpLnRvT2JqZWN0
KGV4ZWMpOwpAQCAtMjE4Nyw3ICsyMTg4LDcgQEAgSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvblB1c2hXaXRoUwogSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1c2hXaXRoU2Nv
cGVPYmplY3QoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGN1cnJlbnRTY29wZUNlbGwsIEpTT2Jq
ZWN0KiBvYmplY3QpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcih2bSwgZXhlYyk7CiAgICAgSlNTY29wZSogY3VycmVudFNjb3BlID0ganNDYXN0PEpT
U2NvcGUqPihjdXJyZW50U2NvcGVDZWxsKTsKICAgICByZXR1cm4gSlNXaXRoU2NvcGU6OmNyZWF0
ZSh2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBjdXJyZW50U2NvcGUsIG9iamVjdCk7
CiB9CkBAIC0yMTk1LDcgKzIxOTYsNyBAQCBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
UHVzaFdpdGhTCiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkluc3RhbmNl
T2YoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRQcm90bykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6
ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgSlNWYWx1ZSBwcm90byA9IEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkUHJvdG8pOwogICAgIApAQCAtMjIwNiw3ICsyMjA3LDcgQEAgRW5jb2RlZEpTVmFs
dWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25JbgogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElP
TiBvcGVyYXRpb25JbnN0YW5jZU9mR2VuZXJpYyhFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZVN0
dWJJbmZvKiBzdHViSW5mbywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkUHJvdG8pCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkVmFsdWUpOwogICAgIEpTVmFsdWUgcHJvdG8gPSBKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZFByb3RvKTsKICAgICAKQEAgLTIyMTksNyArMjIyMCw3IEBAIEVuY29kZWRKU1ZhbHVl
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSW4KIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uSW5zdGFuY2VPZk9wdGltaXplKEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlU3R1
YkluZm8qIHN0dWJJbmZvLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRQcm90bykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVU
cmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFs
dWUpOwogICAgIEpTVmFsdWUgcHJvdG8gPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFByb3RvKTsK
QEAgLTIyMzYsMTQgKzIyMzcsMTQgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVy
YXRpb25JbgogaW50MzJfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblNpemVGcmFtZUZvckZvcndh
cmRBcmd1bWVudHMoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSwgaW50MzJfdCBudW1V
c2VkU3RhY2tTbG90cywgaW50MzJfdCkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICByZXR1cm4gc2l6ZUZyYW1lRm9yRm9y
d2FyZEFyZ3VtZW50cyhleGVjLCB2bSwgbnVtVXNlZFN0YWNrU2xvdHMpOwogfQogCiBpbnQzMl90
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uU2l6ZUZyYW1lRm9yVmFyYXJncyhFeGVjU3RhdGUqIGV4
ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRBcmd1bWVudHMsIGludDMyX3QgbnVtVXNlZFN0YWNr
U2xvdHMsIGludDMyX3QgZmlyc3RWYXJBcmdPZmZzZXQpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgSlNWYWx1ZSBhcmd1
bWVudHMgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEFyZ3VtZW50cyk7CiAgICAgcmV0dXJuIHNp
emVGcmFtZUZvclZhcmFyZ3MoZXhlYywgdm0sIGFyZ3VtZW50cywgbnVtVXNlZFN0YWNrU2xvdHMs
IGZpcnN0VmFyQXJnT2Zmc2V0KTsKIH0KQEAgLTIyNTEsNyArMjI1Miw3IEBAIGludDMyX3QgSklU
X09QRVJBVElPTiBvcGVyYXRpb25TaXplRnJhbWUKIENhbGxGcmFtZSogSklUX09QRVJBVElPTiBv
cGVyYXRpb25TZXR1cEZvcndhcmRBcmd1bWVudHNGcmFtZShFeGVjU3RhdGUqIGV4ZWMsIENhbGxG
cmFtZSogbmV3Q2FsbEZyYW1lLCBFbmNvZGVkSlNWYWx1ZSwgaW50MzJfdCwgaW50MzJfdCBsZW5n
dGgpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFj
ZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2
bSwgZXhlYyk7CiAgICAgc2V0dXBGb3J3YXJkQXJndW1lbnRzRnJhbWUoZXhlYywgbmV3Q2FsbEZy
YW1lLCBsZW5ndGgpOwogICAgIHJldHVybiBuZXdDYWxsRnJhbWU7CiB9CkBAIC0yMjU5LDcgKzIy
NjAsNyBAQCBDYWxsRnJhbWUqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uU2V0dXBGCiBDYWxsRnJh
bWUqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uU2V0dXBWYXJhcmdzRnJhbWUoRXhlY1N0YXRlKiBl
eGVjLCBDYWxsRnJhbWUqIG5ld0NhbGxGcmFtZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEFyZ3Vt
ZW50cywgaW50MzJfdCBmaXJzdFZhckFyZ09mZnNldCwgaW50MzJfdCBsZW5ndGgpCiB7CiAgICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2
bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAg
ICAgSlNWYWx1ZSBhcmd1bWVudHMgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEFyZ3VtZW50cyk7
CiAgICAgc2V0dXBWYXJhcmdzRnJhbWUoZXhlYywgbmV3Q2FsbEZyYW1lLCBhcmd1bWVudHMsIGZp
cnN0VmFyQXJnT2Zmc2V0LCBsZW5ndGgpOwogICAgIHJldHVybiBuZXdDYWxsRnJhbWU7CkBAIC0y
MjY4LDcgKzIyNjksNyBAQCBDYWxsRnJhbWUqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uU2V0dXBW
CiBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblN3aXRjaENoYXJXaXRoVW5rbm93bktleVR5
cGUoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkS2V5LCBzaXplX3QgdGFi
bGVJbmRleCkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKHZtLCBleGVjKTsKICAgICBKU1ZhbHVlIGtleSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVk
S2V5KTsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOwogCkBA
IC0yMjg4LDcgKzIyODksNyBAQCBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblN3aXRjaENo
YXJXCiBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblN3aXRjaEltbVdpdGhVbmtub3duS2V5
VHlwZShFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRLZXksIHNpemVfdCB0
YWJsZUluZGV4KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIodm0sIGV4ZWMpOwogICAgIEpTVmFsdWUga2V5ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRLZXkpOwogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7CiAK
QEAgLTIzMDcsNyArMjMwOCw3IEBAIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uU3dpdGNo
SW1tV2kKIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uU3dpdGNoU3RyaW5nV2l0aFVua25v
d25LZXlUeXBlKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEtleSwgc2l6
ZV90IHRhYmxlSW5kZXgpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgSlNWYWx1ZSBrZXkgPSBKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZEtleSk7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2so
KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTIz
MzEsNyArMjMzMiw3IEBAIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uU3dpdGNoU3RyaW4K
IEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0RnJvbVNjb3BlKEV4ZWNT
dGF0ZSogZXhlYywgY29uc3QgSW5zdHJ1Y3Rpb24qIHBjKQogewogICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxv
Y2sgPSBleGVjLT5jb2RlQmxvY2soKTsKQEAgLTIzNzIsNyArMjM3Myw3IEBAIEVuY29kZWRKU1Zh
bHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2UKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRp
b25QdXRUb1Njb3BlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSW5zdHJ1Y3Rpb24qIHBjKQogewog
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMp
OwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAg
Q29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKQEAgLTI0MjQsOSArMjQy
NSw5IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRUb1Njb3BlKEUKIAogdm9pZCBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvblRocm93KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZEV4Y2VwdGlvblZhbHVlKQogewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwor
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cih2bSwgZXhlYyk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsK
KyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBKU1ZhbHVl
IGV4Y2VwdGlvblZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRFeGNlcHRpb25WYWx1ZSk7
CiAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIGV4Y2VwdGlvblZhbHVlKTsKQEAgLTI0
MzgsNyArMjQzOSw3IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25UaHJvdyhFeGVjU3QK
IGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUmVhbGxvY2F0ZUJ1dHRlcmZseVRvSGF2ZVBy
b3BlcnR5U3RvcmFnZVdpdGhJbml0aWFsQ2FwYWNpdHkoRXhlY1N0YXRlKiBleGVjLCBKU09iamVj
dCogb2JqZWN0KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIodm0sIGV4ZWMpOwogCiAgICAgQVNTRVJUKCFvYmplY3QtPnN0cnVjdHVyZSh2bSktPm91
dE9mTGluZUNhcGFjaXR5KCkpOwogICAgIEJ1dHRlcmZseSogcmVzdWx0ID0gb2JqZWN0LT5hbGxv
Y2F0ZU1vcmVPdXRPZkxpbmVTdG9yYWdlKHZtLCAwLCBpbml0aWFsT3V0T2ZMaW5lQ2FwYWNpdHkp
OwpAQCAtMjQ0OSw3ICsyNDUwLDcgQEAgY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25SZWFs
bG9jYXRlQgogY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25SZWFsbG9jYXRlQnV0dGVyZmx5
VG9Hcm93UHJvcGVydHlTdG9yYWdlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9iamVjdCwg
c2l6ZV90IG5ld1NpemUpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcih2bSwgZXhlYyk7CiAKICAgICBCdXR0ZXJmbHkqIHJlc3VsdCA9IG9iamVjdC0+
YWxsb2NhdGVNb3JlT3V0T2ZMaW5lU3RvcmFnZSh2bSwgb2JqZWN0LT5zdHJ1Y3R1cmUodm0pLT5v
dXRPZkxpbmVDYXBhY2l0eSgpLCBuZXdTaXplKTsKICAgICBvYmplY3QtPm51a2VTdHJ1Y3R1cmVB
bmRTZXRCdXR0ZXJmbHkodm0sIG9iamVjdC0+c3RydWN0dXJlSUQoKSwgcmVzdWx0KTsKQEAgLTI0
NTgsMjMgKzI0NTksMjQgQEAgY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25SZWFsbG9jYXRl
QgogCiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uT1NSV3JpdGVCYXJyaWVyKEV4ZWNTdGF0
ZSogZXhlYywgSlNDZWxsKiBjZWxsKQogewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2
bSwgZXhlYyk7Ci0gICAgdm0tPmhlYXAud3JpdGVCYXJyaWVyKGNlbGwpOworICAgIHZtLmhlYXAu
d3JpdGVCYXJyaWVyKGNlbGwpOwogfQogCiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uV3Jp
dGVCYXJyaWVyU2xvd1BhdGgoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGNlbGwpCiB7Ci0gICAg
Vk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLSAgICB2bS0+aGVhcC53cml0ZUJh
cnJpZXJTbG93UGF0aChjZWxsKTsKKyAgICB2bS5oZWFwLndyaXRlQmFycmllclNsb3dQYXRoKGNl
bGwpOwogfQogCi12b2lkIEpJVF9PUEVSQVRJT04gbG9va3VwRXhjZXB0aW9uSGFuZGxlcihWTSog
dm0sIEV4ZWNTdGF0ZSogZXhlYykKK3ZvaWQgSklUX09QRVJBVElPTiBsb29rdXBFeGNlcHRpb25I
YW5kbGVyKFZNKiB2bVBvaW50ZXIsIEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSAq
dm1Qb2ludGVyOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwog
ICAgIGdlbmVyaWNVbndpbmQodm0sIGV4ZWMpOwotICAgIEFTU0VSVCh2bS0+dGFyZ2V0TWFjaGlu
ZVBDRm9yVGhyb3cpOworICAgIEFTU0VSVCh2bS50YXJnZXRNYWNoaW5lUENGb3JUaHJvdyk7CiB9
CiAKIHZvaWQgSklUX09QRVJBVElPTiBsb29rdXBFeGNlcHRpb25IYW5kbGVyRnJvbUNhbGxlckZy
YW1lKFZNKiB2bSwgRXhlY1N0YXRlKiBleGVjKQpAQCAtMjQ4Niw3ICsyNDg4LDcgQEAgdm9pZCBK
SVRfT1BFUkFUSU9OIGxvb2t1cEV4Y2VwdGlvbkhhbmRsZQogCiB2b2lkIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uVk1IYW5kbGVFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjKQogewotICAgIFZNKiB2
bSA9ICZleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgZ2VuZXJpY1Vud2luZCh2bSwgZXhl
Yyk7CiB9CkBAIC0yNDk4LDkgKzI1MDAsOSBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
Vk1IYW5kbGVFeGNlCiAvLyB0ZXN0aW5nLgogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkV4
Y2VwdGlvbkZ1enooRXhlY1N0YXRlKiBleGVjKQogewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgp
OworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcih2bSwgZXhlYyk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZt
KTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VE
X1BBUkFNKHNjb3BlKTsKICNpZiBDT01QSUxFUihHQ0NfQ09NUEFUSUJMRSkKICAgICB2b2lkKiBy
ZXR1cm5QQyA9IF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKTsKQEAgLTI1MTAsNyArMjUxMiw3
IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25FeGNlcHRpb25GdXoKIAogQUxXQVlTX0lO
TElORSBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgdW5wcm9maWxlZEFkZChFeGVjU3RhdGUqIGV4ZWMs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpCiB7
Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICAKICAgICBKU1Zh
bHVlIG9wMSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AxKTsKQEAgLTI1MjEsNyArMjUyMyw3
IEBAIEFMV0FZU19JTkxJTkUgc3RhdGljIEVuY29kZWRKU1ZhbHVlIHVucHIKIAogQUxXQVlTX0lO
TElORSBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgcHJvZmlsZWRBZGQoRXhlY1N0YXRlKiBleGVjLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyLCBBcml0
aFByb2ZpbGUmIGFyaXRoUHJvZmlsZSkKIHsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
dm0sIGV4ZWMpOwogICAgIAogICAgIEpTVmFsdWUgb3AxID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRPcDEpOwpAQCAtMjU0Nyw3ICsyNTQ5LDcgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElP
TiBvcGVyYXRpb25WYQogCiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZh
bHVlQWRkUHJvZmlsZWRPcHRpbWl6ZShFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIsIEpJVEFkZElDKiBhZGRJQykKIHsK
LSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIAogICAgIEpTVmFs
dWUgb3AxID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDEpOwpAQCAtMjU3MSw3ICsyNTczLDcg
QEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25WYQogCiBFbmNvZGVkSlNW
YWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZhbHVlQWRkUHJvZmlsZWROb09wdGltaXplKEV4
ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZE9wMiwgSklUQWRkSUMqIGFkZElDKQogewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgp
OworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcih2bSwgZXhlYyk7CiAKICAgICBBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IGFkZElD
LT5hcml0aFByb2ZpbGUoKTsKQEAgLTI1ODEsNyArMjU4Myw3IEBAIEVuY29kZWRKU1ZhbHVlIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uVmEKIAogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBv
cGVyYXRpb25WYWx1ZUFkZE9wdGltaXplKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMiwgSklUQWRkSUMqIGFkZElDKQog
ewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAg
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAKICAgICBKU1ZhbHVl
IG9wMSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AxKTsKQEAgLTI2MDEsNyArMjYwMyw3IEBA
IEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmEKIAogRW5jb2RlZEpTVmFs
dWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25WYWx1ZUFkZE5vT3B0aW1pemUoRXhlY1N0YXRlKiBl
eGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3Ay
LCBKSVRBZGRJQyopCiB7Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsK
ICAgICAKICAgICBKU1ZhbHVlIG9wMSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AxKTsKQEAg
LTI2MzgsNyArMjY0MCw3IEBAIEFMV0FZU19JTkxJTkUgc3RhdGljIEVuY29kZWRKU1ZhbHVlIHBy
b2YKIAogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25WYWx1ZU11bChFeGVj
U3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRPcDIpCiB7Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKIAog
ICAgIHJldHVybiB1bnByb2ZpbGVkTXVsKGV4ZWMsIGVuY29kZWRPcDEsIGVuY29kZWRPcDIpOwpA
QCAtMjY0Niw3ICsyNjQ4LDcgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRp
b25WYQogCiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZhbHVlTXVsTm9P
cHRpbWl6ZShFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRPcDIsIEpJVE11bElDKikKIHsKLSAgICBWTSogdm0gPSAmZXhlYy0+
dm0oKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIodm0sIGV4ZWMpOwogCiAgICAgcmV0dXJuIHVucHJvZmlsZWRNdWwoZXhlYywgZW5j
b2RlZE9wMSwgZW5jb2RlZE9wMik7CkBAIC0yNjU0LDcgKzI2NTYsNyBAQCBFbmNvZGVkSlNWYWx1
ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZhCiAKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uVmFsdWVNdWxPcHRpbWl6ZShFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIsIEpJVE11bElDKiBtdWxJ
QykKIHsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgp
OwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogCiAgICAgYXV0
byBub25PcHRpbWl6ZVZhcmlhbnQgPSBvcGVyYXRpb25WYWx1ZU11bE5vT3B0aW1pemU7CkBAIC0y
NjcxLDcgKzI2NzMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZh
CiAKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmFsdWVNdWxQcm9maWxl
ZChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRPcDIsIEFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKQogewotICAgIFZNKiB2
bSA9ICZleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAKICAgICBBU1NFUlQoYXJpdGhQcm9maWxl
KTsKQEAgLTI2ODAsNyArMjY4Miw3IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uVmEKIAogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25WYWx1ZU11
bFByb2ZpbGVkT3B0aW1pemUoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
T3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyLCBKSVRNdWxJQyogbXVsSUMpCiB7Ci0gICAg
Vk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKIAogICAgIEFyaXRoUHJvZmlsZSog
YXJpdGhQcm9maWxlID0gbXVsSUMtPmFyaXRoUHJvZmlsZSgpOwpAQCAtMjY5OCw3ICsyNzAwLDcg
QEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25WYQogCiBFbmNvZGVkSlNW
YWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZhbHVlTXVsUHJvZmlsZWROb09wdGltaXplKEV4
ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZE9wMiwgSklUTXVsSUMqIG11bElDKQogewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgp
OworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcih2bSwgZXhlYyk7CiAKICAgICBBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG11bElD
LT5hcml0aFByb2ZpbGUoKTsKQEAgLTI3MTAsNyArMjcxMiw3IEBAIEFMV0FZU19JTkxJTkUgc3Rh
dGljIEVuY29kZWRKU1ZhbHVlIHVucHIKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBOYXRpdmVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcih2bSwgZXhlYyk7CiAgICAgCiAgICAgSlNWYWx1ZSBvcGVyYW5kID0gSlNWYWx1ZTo6ZGVj
b2RlKGVuY29kZWRPcGVyYW5kKTsKICAgICAKQEAgLTI3MjksNyArMjczMSw3IEBAIEFMV0FZU19J
TkxJTkUgc3RhdGljIEVuY29kZWRKU1ZhbHVlIHByb2YKIHsKICAgICBWTSYgdm0gPSBleGVjLT52
bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAKICAgICBKU1ZhbHVlIG9wZXJhbmQgPSBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZE9wZXJhbmQpOwogICAgIGFyaXRoUHJvZmlsZS5vYnNlcnZlTEhTKG9w
ZXJhbmQpOwpAQCAtMjc2Niw3ICsyNzY4LDcgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElP
TiBvcGVyYXRpb25BcgogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBl
eGVjKTsKICAgICAKICAgICBKU1ZhbHVlIG9wZXJhbmQgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2Rl
ZE9wZXJhbmQpOwogCkBAIC0yNzk5LDcgKzI4MDEsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbkFyCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
dm0sIGV4ZWMpOwogCiAgICAgSlNWYWx1ZSBvcGVyYW5kID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRPcGVyYW5kKTsKIApAQCAtMjg0OCw3ICsyODUwLDcgQEAgQUxXQVlTX0lOTElORSBzdGF0aWMg
RW5jb2RlZEpTVmFsdWUgcHJvZgogCiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvblZhbHVlU3ViKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMikKIHsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsK
KyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIodm0sIGV4ZWMpOwogICAgIHJldHVybiB1bnByb2ZpbGVkU3ViKGV4ZWMsIGVuY29kZWRPcDEs
IGVuY29kZWRPcDIpOwogfQpAQCAtMjg1NywxNSArMjg1OSwxNSBAQCBFbmNvZGVkSlNWYWx1ZSBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvblZhCiB7CiAgICAgQVNTRVJUKGFyaXRoUHJvZmlsZSk7CiAK
LSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogCi0gICAgcmV0dXJuIHBy
b2ZpbGVkU3ViKCp2bSwgZXhlYywgZW5jb2RlZE9wMSwgZW5jb2RlZE9wMiwgKmFyaXRoUHJvZmls
ZSk7CisgICAgcmV0dXJuIHByb2ZpbGVkU3ViKHZtLCBleGVjLCBlbmNvZGVkT3AxLCBlbmNvZGVk
T3AyLCAqYXJpdGhQcm9maWxlKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBv
cGVyYXRpb25WYWx1ZVN1Yk9wdGltaXplKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMiwgSklUU3ViSUMqIHN1YklDKQog
ewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAg
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAKICAgICBhdXRvIG5v
bk9wdGltaXplVmFyaWFudCA9IG9wZXJhdGlvblZhbHVlU3ViTm9PcHRpbWl6ZTsKQEAgLTI4ODIs
NyArMjg4NCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmEKIAog
RW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25WYWx1ZVN1Yk5vT3B0aW1pemUo
RXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkT3AyLCBKSVRTdWJJQyopCiB7Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Cisg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KHZtLCBleGVjKTsKIAogICAgIHJldHVybiB1bnByb2ZpbGVkU3ViKGV4ZWMsIGVuY29kZWRPcDEs
IGVuY29kZWRPcDIpOwpAQCAtMjg5MCw3ICsyODkyLDcgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25WYQogCiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvblZhbHVlU3ViUHJvZmlsZWRPcHRpbWl6ZShFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIsIEpJVFN1YklDKiBzdWJJ
QykKIHsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgp
OwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogCiAgICAgQXJp
dGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBzdWJJQy0+YXJpdGhQcm9maWxlKCk7CkBAIC0yOTAz
LDMwICsyOTA1LDMwIEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmEK
ICAgICBleGVjLT5jb2RlQmxvY2soKS0+ZHVtcE1hdGhJQ1N0YXRzKCk7CiAjZW5kaWYKIAotICAg
IHJldHVybiBwcm9maWxlZFN1Yigqdm0sIGV4ZWMsIGVuY29kZWRPcDEsIGVuY29kZWRPcDIsICph
cml0aFByb2ZpbGUsIGZhbHNlKTsKKyAgICByZXR1cm4gcHJvZmlsZWRTdWIodm0sIGV4ZWMsIGVu
Y29kZWRPcDEsIGVuY29kZWRPcDIsICphcml0aFByb2ZpbGUsIGZhbHNlKTsKIH0KIAogRW5jb2Rl
ZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25WYWx1ZVN1YlByb2ZpbGVkTm9PcHRpbWl6
ZShFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRPcDIsIEpJVFN1YklDKiBzdWJJQykKIHsKLSAgICBWTSogdm0gPSAmZXhlYy0+
dm0oKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIodm0sIGV4ZWMpOwogCiAgICAgQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBz
dWJJQy0+YXJpdGhQcm9maWxlKCk7CiAgICAgQVNTRVJUKGFyaXRoUHJvZmlsZSk7Ci0gICAgcmV0
dXJuIHByb2ZpbGVkU3ViKCp2bSwgZXhlYywgZW5jb2RlZE9wMSwgZW5jb2RlZE9wMiwgKmFyaXRo
UHJvZmlsZSk7CisgICAgcmV0dXJuIHByb2ZpbGVkU3ViKHZtLCBleGVjLCBlbmNvZGVkT3AxLCBl
bmNvZGVkT3AyLCAqYXJpdGhQcm9maWxlKTsKIH0KIAogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvblByb2Nlc3NUeXBlUHJvZmlsZXJMb2coRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4
ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIHZt
LnR5cGVQcm9maWxlckxvZygpLT5wcm9jZXNzTG9nRW50cmllcyh2bSwgIkxvZyBGdWxsLCBjYWxs
ZWQgZnJvbSBpbnNpZGUgYmFzZWxpbmUgSklUIl9zKTsKIH0KIAogdm9pZCBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvblByb2Nlc3NTaGFkb3dDaGlja2VuTG9nKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
JnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsK
ICAgICBSRUxFQVNFX0FTU0VSVCh2bS5zaGFkb3dDaGlja2VuKCkpOwogICAgIHZtLnNoYWRvd0No
aWNrZW4oKS0+dXBkYXRlKHZtLCBleGVjKTsKIH0KQEAgLTI5MzQsMTIgKzI5MzYsMTIgQEAgdm9p
ZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblByb2Nlc3NTaGFkbwogaW50MzJfdCBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvbkNoZWNrSWZFeGNlcHRpb25Jc1VuY2F0Y2hhYmxlQW5kTm90aWZ5UHJvZmls
ZXIoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKICAgICBSRUxFQVNFX0FTU0VSVCghIXNjb3BlLmV4Y2VwdGlvbigpKTsKIAog
ICAgIGlmIChpc1Rlcm1pbmF0ZWRFeGVjdXRpb25FeGNlcHRpb24odm0sIHNjb3BlLmV4Y2VwdGlv
bigpKSkgewotICAgICAgICBnZW5lcmljVW53aW5kKCZ2bSwgZXhlYyk7CisgICAgICAgIGdlbmVy
aWNVbndpbmQodm0sIGV4ZWMpOwogICAgICAgICByZXR1cm4gMTsKICAgICB9CiAgICAgcmV0dXJu
IDA7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNj
ZXNzLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMTIsNyArMTIxMiw3IEBA
IHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKHVuc2lnbmVkIG93bmUKICAgICBpZiAobW9kZSA9
PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlKQog
ICAgICAgICBvd25lck5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwogCi0gICAgSnVt
cCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuID0gYmFycmllckJyYW5jaCgqdm0oKSwgcmVnVDAs
IHJlZ1QxKTsKKyAgICBKdW1wIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBiYXJyaWVyQnJh
bmNoKHZtKCksIHJlZ1QwLCByZWdUMSk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Xcml0
ZUJhcnJpZXJTbG93UGF0aCwgcmVnVDApOwogICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4u
bGluayh0aGlzKTsKIApAQCAtMTI1MCw3ICsxMjUwLDcgQEAgdm9pZCBKSVQ6OmVtaXRXcml0ZUJh
cnJpZXIodW5zaWduZWQgb3duZQogICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlckJhc2UgfHwg
bW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUpCiAgICAgICAgIG93bmVyTm90Q2VsbCA9
IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CiAKLSAgICBKdW1wIG93bmVySXNSZW1lbWJlcmVkT3JJ
bkVkZW4gPSBiYXJyaWVyQnJhbmNoKCp2bSgpLCByZWdUMSwgcmVnVDIpOworICAgIEp1bXAgb3du
ZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IGJhcnJpZXJCcmFuY2godm0oKSwgcmVnVDEsIHJlZ1Qy
KTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbldyaXRlQmFycmllclNsb3dQYXRoLCByZWdU
MSk7CiAgICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5saW5rKHRoaXMpOwogCkBAIC0xMjc4
LDcgKzEyNzgsNyBAQCB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyCiAK
IHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIpCiB7Ci0gICAgSnVtcCBv
d25lcklzUmVtZW1iZXJlZE9ySW5FZGVuID0gYmFycmllckJyYW5jaCgqdm0oKSwgb3duZXIsIHJl
Z1QwKTsKKyAgICBKdW1wIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBiYXJyaWVyQnJhbmNo
KHZtKCksIG93bmVyLCByZWdUMCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Xcml0ZUJh
cnJpZXJTbG93UGF0aCwgb3duZXIpOwogICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4ubGlu
ayh0aGlzKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUVGh1bmtzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRodW5rcy5jcHAJ
KHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUVGh1bmtz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTItMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTItMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ1LDQzICs0NSw0MyBAQCBKSVRUaHVua3M6On5KSVRU
aHVua3MoKQogewogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+IEpJ
VFRodW5rczo6Y3RpTmF0aXZlQ2FsbChWTSogdm0pCitNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklU
VGh1bmtQdHJUYWc+IEpJVFRodW5rczo6Y3RpTmF0aXZlQ2FsbChWTSYgdm0pCiB7CiAgICAgQVNT
RVJUKFZNOjpjYW5Vc2VKSVQoKSk7CiAgICAgcmV0dXJuIGN0aVN0dWIodm0sIG5hdGl2ZUNhbGxH
ZW5lcmF0b3IpLmNvZGUoKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFRodW5rUHRy
VGFnPiBKSVRUaHVua3M6OmN0aU5hdGl2ZUNvbnN0cnVjdChWTSogdm0pCitNYWNyb0Fzc2VtYmxl
ckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+IEpJVFRodW5rczo6Y3RpTmF0aXZlQ29uc3RydWN0KFZN
JiB2bSkKIHsKICAgICBBU1NFUlQoVk06OmNhblVzZUpJVCgpKTsKICAgICByZXR1cm4gY3RpU3R1
Yih2bSwgbmF0aXZlQ29uc3RydWN0R2VuZXJhdG9yKS5jb2RlKCk7CiB9CiAKLU1hY3JvQXNzZW1i
bGVyQ29kZVB0cjxKSVRUaHVua1B0clRhZz4gSklUVGh1bmtzOjpjdGlOYXRpdmVUYWlsQ2FsbChW
TSogdm0pCitNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+IEpJVFRodW5rczo6
Y3RpTmF0aXZlVGFpbENhbGwoVk0mIHZtKQogewogICAgIEFTU0VSVChWTTo6Y2FuVXNlSklUKCkp
OwogICAgIHJldHVybiBjdGlTdHViKHZtLCBuYXRpdmVUYWlsQ2FsbEdlbmVyYXRvcikuY29kZSgp
OwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+IEpJVFRodW5rczo6
Y3RpTmF0aXZlVGFpbENhbGxXaXRob3V0U2F2ZWRUYWdzKFZNKiB2bSkKK01hY3JvQXNzZW1ibGVy
Q29kZVB0cjxKSVRUaHVua1B0clRhZz4gSklUVGh1bmtzOjpjdGlOYXRpdmVUYWlsQ2FsbFdpdGhv
dXRTYXZlZFRhZ3MoVk0mIHZtKQogewogICAgIEFTU0VSVChWTTo6Y2FuVXNlSklUKCkpOwogICAg
IHJldHVybiBjdGlTdHViKHZtLCBuYXRpdmVUYWlsQ2FsbFdpdGhvdXRTYXZlZFRhZ3NHZW5lcmF0
b3IpLmNvZGUoKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFnPiBK
SVRUaHVua3M6OmN0aUludGVybmFsRnVuY3Rpb25DYWxsKFZNKiB2bSkKK01hY3JvQXNzZW1ibGVy
Q29kZVB0cjxKSVRUaHVua1B0clRhZz4gSklUVGh1bmtzOjpjdGlJbnRlcm5hbEZ1bmN0aW9uQ2Fs
bChWTSYgdm0pCiB7CiAgICAgQVNTRVJUKFZNOjpjYW5Vc2VKSVQoKSk7CiAgICAgcmV0dXJuIGN0
aVN0dWIodm0sIGludGVybmFsRnVuY3Rpb25DYWxsR2VuZXJhdG9yKS5jb2RlKCk7CiB9CiAKLU1h
Y3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRUaHVua1B0clRhZz4gSklUVGh1bmtzOjpjdGlJbnRlcm5h
bEZ1bmN0aW9uQ29uc3RydWN0KFZNKiB2bSkKK01hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRUaHVu
a1B0clRhZz4gSklUVGh1bmtzOjpjdGlJbnRlcm5hbEZ1bmN0aW9uQ29uc3RydWN0KFZNJiB2bSkK
IHsKICAgICBBU1NFUlQoVk06OmNhblVzZUpJVCgpKTsKICAgICByZXR1cm4gY3RpU3R1Yih2bSwg
aW50ZXJuYWxGdW5jdGlvbkNvbnN0cnVjdEdlbmVyYXRvcikuY29kZSgpOwogfQogCi1NYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVFRodW5rczo6Y3RpU3R1YihWTSogdm0s
IFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvcikKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gSklUVGh1bmtzOjpjdGlTdHViKFZNJiB2bSwgVGh1bmtHZW5lcmF0b3IgZ2VuZXJh
dG9yKQogewogICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7CiAgICAgQ1RJU3R1Yk1hcDo6
QWRkUmVzdWx0IGVudHJ5ID0gbV9jdGlTdHViTWFwLmFkZChnZW5lcmF0b3IsIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4oKSk7CkBAIC0xMDgsMTIgKzEwOCwxMiBAQCB2b2lk
IEpJVFRodW5rczo6ZmluYWxpemUoSGFuZGxlPFVua25vd24+CiAgICAgd2Vha1JlbW92ZSgqbV9o
b3N0RnVuY3Rpb25TdHViTWFwLCBzdGQ6Om1ha2VfdHVwbGUobmF0aXZlRXhlY3V0YWJsZS0+ZnVu
Y3Rpb24oKSwgbmF0aXZlRXhlY3V0YWJsZS0+Y29uc3RydWN0b3IoKSwgbmF0aXZlRXhlY3V0YWJs
ZS0+bmFtZSgpKSwgbmF0aXZlRXhlY3V0YWJsZSk7CiB9CiAKLU5hdGl2ZUV4ZWN1dGFibGUqIEpJ
VFRodW5rczo6aG9zdEZ1bmN0aW9uU3R1YihWTSogdm0sIFRhZ2dlZE5hdGl2ZUZ1bmN0aW9uIGZ1
bmN0aW9uLCBUYWdnZWROYXRpdmVGdW5jdGlvbiBjb25zdHJ1Y3RvciwgY29uc3QgU3RyaW5nJiBu
YW1lKQorTmF0aXZlRXhlY3V0YWJsZSogSklUVGh1bmtzOjpob3N0RnVuY3Rpb25TdHViKFZNJiB2
bSwgVGFnZ2VkTmF0aXZlRnVuY3Rpb24gZnVuY3Rpb24sIFRhZ2dlZE5hdGl2ZUZ1bmN0aW9uIGNv
bnN0cnVjdG9yLCBjb25zdCBTdHJpbmcmIG5hbWUpCiB7CiAgICAgcmV0dXJuIGhvc3RGdW5jdGlv
blN0dWIodm0sIGZ1bmN0aW9uLCBjb25zdHJ1Y3RvciwgbnVsbHB0ciwgTm9JbnRyaW5zaWMsIG51
bGxwdHIsIG5hbWUpOwogfQogCi1OYXRpdmVFeGVjdXRhYmxlKiBKSVRUaHVua3M6Omhvc3RGdW5j
dGlvblN0dWIoVk0qIHZtLCBUYWdnZWROYXRpdmVGdW5jdGlvbiBmdW5jdGlvbiwgVGFnZ2VkTmF0
aXZlRnVuY3Rpb24gY29uc3RydWN0b3IsIFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvciwgSW50cmlu
c2ljIGludHJpbnNpYywgY29uc3QgRE9NSklUOjpTaWduYXR1cmUqIHNpZ25hdHVyZSwgY29uc3Qg
U3RyaW5nJiBuYW1lKQorTmF0aXZlRXhlY3V0YWJsZSogSklUVGh1bmtzOjpob3N0RnVuY3Rpb25T
dHViKFZNJiB2bSwgVGFnZ2VkTmF0aXZlRnVuY3Rpb24gZnVuY3Rpb24sIFRhZ2dlZE5hdGl2ZUZ1
bmN0aW9uIGNvbnN0cnVjdG9yLCBUaHVua0dlbmVyYXRvciBnZW5lcmF0b3IsIEludHJpbnNpYyBp
bnRyaW5zaWMsIGNvbnN0IERPTUpJVDo6U2lnbmF0dXJlKiBzaWduYXR1cmUsIGNvbnN0IFN0cmlu
ZyYgbmFtZSkKIHsKICAgICBBU1NFUlQoIWlzQ29tcGlsYXRpb25UaHJlYWQoKSk7ICAgIAogICAg
IEFTU0VSVChWTTo6Y2FuVXNlSklUKCkpOwpAQCAtMTMyLDEyICsxMzIsMTIgQEAgTmF0aXZlRXhl
Y3V0YWJsZSogSklUVGh1bmtzOjpob3N0RnVuY3RpbwogICAgIAogICAgIFJlZjxKSVRDb2RlPiBm
b3JDb25zdHJ1Y3QgPSBhZG9wdFJlZigqbmV3IE5hdGl2ZUpJVENvZGUoTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpTRW50cnlQdHJUYWc+OjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoY3RpTmF0aXZl
Q29uc3RydWN0KHZtKS5yZXRhZ2dlZDxKU0VudHJ5UHRyVGFnPigpKSwgSklUVHlwZTo6SG9zdENh
bGxUaHVuaywgTm9JbnRyaW5zaWMpKTsKICAgICAKLSAgICBOYXRpdmVFeGVjdXRhYmxlKiBuYXRp
dmVFeGVjdXRhYmxlID0gTmF0aXZlRXhlY3V0YWJsZTo6Y3JlYXRlKCp2bSwgZm9yQ2FsbC5yZWxl
YXNlTm9uTnVsbCgpLCBmdW5jdGlvbiwgV1RGTW92ZShmb3JDb25zdHJ1Y3QpLCBjb25zdHJ1Y3Rv
ciwgbmFtZSk7CisgICAgTmF0aXZlRXhlY3V0YWJsZSogbmF0aXZlRXhlY3V0YWJsZSA9IE5hdGl2
ZUV4ZWN1dGFibGU6OmNyZWF0ZSh2bSwgZm9yQ2FsbC5yZWxlYXNlTm9uTnVsbCgpLCBmdW5jdGlv
biwgV1RGTW92ZShmb3JDb25zdHJ1Y3QpLCBjb25zdHJ1Y3RvciwgbmFtZSk7CiAgICAgd2Vha0Fk
ZCgqbV9ob3N0RnVuY3Rpb25TdHViTWFwLCBzdGQ6Om1ha2VfdHVwbGUoZnVuY3Rpb24sIGNvbnN0
cnVjdG9yLCBuYW1lKSwgV2VhazxOYXRpdmVFeGVjdXRhYmxlPihuYXRpdmVFeGVjdXRhYmxlLCB0
aGlzKSk7CiAgICAgcmV0dXJuIG5hdGl2ZUV4ZWN1dGFibGU7CiB9CiAKLU5hdGl2ZUV4ZWN1dGFi
bGUqIEpJVFRodW5rczo6aG9zdEZ1bmN0aW9uU3R1YihWTSogdm0sIFRhZ2dlZE5hdGl2ZUZ1bmN0
aW9uIGZ1bmN0aW9uLCBUaHVua0dlbmVyYXRvciBnZW5lcmF0b3IsIEludHJpbnNpYyBpbnRyaW5z
aWMsIGNvbnN0IFN0cmluZyYgbmFtZSkKK05hdGl2ZUV4ZWN1dGFibGUqIEpJVFRodW5rczo6aG9z
dEZ1bmN0aW9uU3R1YihWTSYgdm0sIFRhZ2dlZE5hdGl2ZUZ1bmN0aW9uIGZ1bmN0aW9uLCBUaHVu
a0dlbmVyYXRvciBnZW5lcmF0b3IsIEludHJpbnNpYyBpbnRyaW5zaWMsIGNvbnN0IFN0cmluZyYg
bmFtZSkKIHsKICAgICByZXR1cm4gaG9zdEZ1bmN0aW9uU3R1Yih2bSwgZnVuY3Rpb24sIGNhbGxI
b3N0RnVuY3Rpb25Bc0NvbnN0cnVjdG9yLCBnZW5lcmF0b3IsIGludHJpbnNpYywgbnVsbHB0ciwg
bmFtZSk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRodW5rcy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUVGh1bmtzLmgJKHJldmlz
aW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUVGh1bmtzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIw
MTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEy
LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC01MSwxOSArNTEsMTkgQEAgcHVibGljOgogICAgIEpJVFRodW5rcygp
OwogICAgIHZpcnR1YWwgfkpJVFRodW5rcygpOwogCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
PEpJVFRodW5rUHRyVGFnPiBjdGlOYXRpdmVDYWxsKFZNKik7Ci0gICAgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyPEpJVFRodW5rUHRyVGFnPiBjdGlOYXRpdmVDb25zdHJ1Y3QoVk0qKTsKLSAgICBNYWNy
b0Fzc2VtYmxlckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+IGN0aU5hdGl2ZVRhaWxDYWxsKFZNKik7
Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFnPiBjdGlOYXRpdmVUYWls
Q2FsbFdpdGhvdXRTYXZlZFRhZ3MoVk0qKTsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklU
VGh1bmtQdHJUYWc+IGN0aUludGVybmFsRnVuY3Rpb25DYWxsKFZNKik7Ci0gICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFnPiBjdGlJbnRlcm5hbEZ1bmN0aW9uQ29uc3RydWN0
KFZNKik7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFnPiBjdGlOYXRp
dmVDYWxsKFZNJik7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFnPiBj
dGlOYXRpdmVDb25zdHJ1Y3QoVk0mKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUVGh1
bmtQdHJUYWc+IGN0aU5hdGl2ZVRhaWxDYWxsKFZNJik7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyPEpJVFRodW5rUHRyVGFnPiBjdGlOYXRpdmVUYWlsQ2FsbFdpdGhvdXRTYXZlZFRhZ3MoVk0m
KTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+IGN0aUludGVybmFs
RnVuY3Rpb25DYWxsKFZNJik7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFRodW5rUHRy
VGFnPiBjdGlJbnRlcm5hbEZ1bmN0aW9uQ29uc3RydWN0KFZNJik7CiAKLSAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGN0aVN0dWIoVk0qLCBUaHVua0dlbmVyYXRvcik7
CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBjdGlTdHViKFZNJiwg
VGh1bmtHZW5lcmF0b3IpOwogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gZXhpc3RpbmdDVElTdHViKFRodW5rR2VuZXJhdG9yKTsKIAotICAgIE5hdGl2ZUV4ZWN1dGFi
bGUqIGhvc3RGdW5jdGlvblN0dWIoVk0qLCBUYWdnZWROYXRpdmVGdW5jdGlvbiwgVGFnZ2VkTmF0
aXZlRnVuY3Rpb24gY29uc3RydWN0b3IsIGNvbnN0IFN0cmluZyYgbmFtZSk7Ci0gICAgTmF0aXZl
RXhlY3V0YWJsZSogaG9zdEZ1bmN0aW9uU3R1YihWTSosIFRhZ2dlZE5hdGl2ZUZ1bmN0aW9uLCBU
YWdnZWROYXRpdmVGdW5jdGlvbiBjb25zdHJ1Y3RvciwgVGh1bmtHZW5lcmF0b3IsIEludHJpbnNp
YywgY29uc3QgRE9NSklUOjpTaWduYXR1cmUqLCBjb25zdCBTdHJpbmcmIG5hbWUpOwotICAgIE5h
dGl2ZUV4ZWN1dGFibGUqIGhvc3RGdW5jdGlvblN0dWIoVk0qLCBUYWdnZWROYXRpdmVGdW5jdGlv
biwgVGh1bmtHZW5lcmF0b3IsIEludHJpbnNpYywgY29uc3QgU3RyaW5nJiBuYW1lKTsKKyAgICBO
YXRpdmVFeGVjdXRhYmxlKiBob3N0RnVuY3Rpb25TdHViKFZNJiwgVGFnZ2VkTmF0aXZlRnVuY3Rp
b24sIFRhZ2dlZE5hdGl2ZUZ1bmN0aW9uIGNvbnN0cnVjdG9yLCBjb25zdCBTdHJpbmcmIG5hbWUp
OworICAgIE5hdGl2ZUV4ZWN1dGFibGUqIGhvc3RGdW5jdGlvblN0dWIoVk0mLCBUYWdnZWROYXRp
dmVGdW5jdGlvbiwgVGFnZ2VkTmF0aXZlRnVuY3Rpb24gY29uc3RydWN0b3IsIFRodW5rR2VuZXJh
dG9yLCBJbnRyaW5zaWMsIGNvbnN0IERPTUpJVDo6U2lnbmF0dXJlKiwgY29uc3QgU3RyaW5nJiBu
YW1lKTsKKyAgICBOYXRpdmVFeGVjdXRhYmxlKiBob3N0RnVuY3Rpb25TdHViKFZNJiwgVGFnZ2Vk
TmF0aXZlRnVuY3Rpb24sIFRodW5rR2VuZXJhdG9yLCBJbnRyaW5zaWMsIGNvbnN0IFN0cmluZyYg
bmFtZSk7CiAKICAgICB2b2lkIGNsZWFySG9zdEZ1bmN0aW9uU3R1YnMoKTsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRXb3JrbGlzdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRXb3JrbGlzdC5jcHAJKHJldmlzaW9uIDI0OTEyOCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUV29ya2xpc3QuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTc1LDcgKzc1LDcgQEAgcHVibGljOgogICAgIH0KICAgICAKICAgICBDb2RlQmxvY2sqIGNv
ZGVCbG9jaygpIHsgcmV0dXJuIG1fY29kZUJsb2NrOyB9Ci0gICAgVk0qIHZtKCkgeyByZXR1cm4g
bV9jb2RlQmxvY2stPnZtKCk7IH0KKyAgICBWTSYgdm0oKSB7IHJldHVybiBtX2NvZGVCbG9jay0+
dm0oKTsgfQogICAgIAogICAgIGJvb2wgaXNGaW5pc2hlZENvbXBpbGluZygpCiAgICAgewpAQCAt
MTc5LDcgKzE3OSw3IEBAIGJvb2wgSklUV29ya2xpc3Q6OmNvbXBsZXRlQWxsRm9yVk0oVk0mIHYK
ICAgICAgICAgICAgICAgICBib29sIGRpZEZpbmRVbmZpbmlzaGVkUGxhbiA9IGZhbHNlOwogICAg
ICAgICAgICAgICAgIG1fcGxhbnMucmVtb3ZlQWxsTWF0Y2hpbmcoCiAgICAgICAgICAgICAgICAg
ICAgIFsmXSAoUmVmUHRyPFBsYW4+JiBwbGFuKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBp
ZiAocGxhbi0+dm0oKSAhPSAmdm0pCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJnBsYW4t
PnZtKCkgIT0gJnZtKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcGxhbi0+aXNGaW5pc2hlZENvbXBpbGluZygp
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlkRmluZFVuZmluaXNoZWRQbGFuID0g
dHJ1ZTsKQEAgLTIxNiw3ICsyMTYsNyBAQCB2b2lkIEpJVFdvcmtsaXN0Ojpwb2xsKFZNJiB2bSkK
ICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIoKm1fbG9jayk7CiAgICAgICAgIG1fcGxhbnMucmVt
b3ZlQWxsTWF0Y2hpbmcoCiAgICAgICAgICAgICBbJl0gKFJlZlB0cjxQbGFuPiYgcGxhbikgewot
ICAgICAgICAgICAgICAgIGlmIChwbGFuLT52bSgpICE9ICZ2bSkKKyAgICAgICAgICAgICAgICBp
ZiAoJnBsYW4tPnZtKCkgIT0gJnZtKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgICAgICAgICAgaWYgKCFwbGFuLT5pc0ZpbmlzaGVkQ29tcGlsaW5nKCkpCiAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTIzMCw3ICsyMzAsNyBAQCB2b2lkIEpJ
VFdvcmtsaXN0Ojpwb2xsKFZNJiB2bSkKIAogdm9pZCBKSVRXb3JrbGlzdDo6Y29tcGlsZUxhdGVy
KENvZGVCbG9jayogY29kZUJsb2NrLCB1bnNpZ25lZCBsb29wT1NSRW50cnlCeXRlY29kZU9mZnNl
dCkKIHsKLSAgICBEZWZlckdDIGRlZmVyR0MoY29kZUJsb2NrLT52bSgpLT5oZWFwKTsKKyAgICBE
ZWZlckdDIGRlZmVyR0MoY29kZUJsb2NrLT52bSgpLmhlYXApOwogICAgIFJFTEVBU0VfQVNTRVJU
KGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkludGVycHJldGVyVGh1bmspOwogICAg
IAogICAgIGlmIChjb2RlQmxvY2stPm1fZGlkRmFpbEpJVENvbXBpbGF0aW9uKSB7CkBAIC0yODIs
OCArMjgyLDggQEAgdm9pZCBKSVRXb3JrbGlzdDo6Y29tcGlsZUxhdGVyKENvZGVCbG9jawogCiB2
b2lkIEpJVFdvcmtsaXN0Ojpjb21waWxlTm93KENvZGVCbG9jayogY29kZUJsb2NrLCB1bnNpZ25l
ZCBsb29wT1NSRW50cnlCeXRlY29kZU9mZnNldCkKIHsKLSAgICBWTSogdm0gPSBjb2RlQmxvY2st
PnZtKCk7Ci0gICAgRGVmZXJHQyBkZWZlckdDKHZtLT5oZWFwKTsKKyAgICBWTSYgdm0gPSBjb2Rl
QmxvY2stPnZtKCk7CisgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwogICAgIGlmIChjb2Rl
QmxvY2stPmppdFR5cGUoKSAhPSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5rKQogICAgICAgICBy
ZXR1cm47CiAgICAgCkBAIC0yOTYsNyArMjk2LDcgQEAgdm9pZCBKSVRXb3JrbGlzdDo6Y29tcGls
ZU5vdyhDb2RlQmxvY2sqIAogICAgIGlmIChpc1BsYW5uZWQpIHsKICAgICAgICAgUkVMRUFTRV9B
U1NFUlQoT3B0aW9uczo6dXNlQ29uY3VycmVudEpJVCgpKTsKICAgICAgICAgLy8gVGhpcyBpcyBl
eHBlbnNpdmUsIGJ1dCBwcm9iYWJseSBnb29kIGVub3VnaC4KLSAgICAgICAgY29tcGxldGVBbGxG
b3JWTSgqdm0pOworICAgICAgICBjb21wbGV0ZUFsbEZvclZNKHZtKTsKICAgICB9CiAgICAgCiAg
ICAgLy8gTm93IGl0IG1pZ2h0IGJlIGNvbXBpbGVkIQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9SZXBhdGNoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L1JlcGF0Y2guY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L1JlcGF0Y2guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Nyw3ICs3Nyw3IEBAIHN0YXRp
YyBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IHJlYWQKICNpZiBFTkFCTEUoRlRMX0pJVCkK
ICAgICBpZiAoY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6RlRMSklUKSB7CiAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRUaHVua1B0clRhZz4gdGh1bmsgPSBNYWNyb0Fz
c2VtYmxlckNvZGVQdHI8T3BlcmF0aW9uUHRyVGFnPjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRy
ZXNzKHRhcmdldC5leGVjdXRhYmxlQWRkcmVzcygpKS5yZXRhZ2dlZDxKSVRUaHVua1B0clRhZz4o
KTsKLSAgICAgICAgcmV0dXJuIGNvZGVCbG9jay0+dm0oKS0+ZnRsVGh1bmtzLT5rZXlGb3JTbG93
UGF0aENhbGxUaHVuayh0aHVuaykuY2FsbFRhcmdldCgpLnJldGFnZ2VkPENGdW5jdGlvblB0clRh
Zz4oKTsKKyAgICAgICAgcmV0dXJuIGNvZGVCbG9jay0+dm0oKS5mdGxUaHVua3MtPmtleUZvclNs
b3dQYXRoQ2FsbFRodW5rKHRodW5rKS5jYWxsVGFyZ2V0KCkucmV0YWdnZWQ8Q0Z1bmN0aW9uUHRy
VGFnPigpOwogICAgIH0KICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGNvZGVCbG9jayk7CkBAIC04
OSw3ICs4OSw3IEBAIHZvaWQgZnRsVGh1bmtBd2FyZVJlcGF0Y2hDYWxsKENvZGVCbG9jayoKIHsK
ICNpZiBFTkFCTEUoRlRMX0pJVCkKICAgICBpZiAoY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklU
VHlwZTo6RlRMSklUKSB7Ci0gICAgICAgIFZNJiB2bSA9ICpjb2RlQmxvY2stPnZtKCk7CisgICAg
ICAgIFZNJiB2bSA9IGNvZGVCbG9jay0+dm0oKTsKICAgICAgICAgRlRMOjpUaHVua3MmIHRodW5r
cyA9ICp2bS5mdGxUaHVua3M7CiAgICAgICAgIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4g
dGFyZ2V0ID0gTWFjcm9Bc3NlbWJsZXI6OnJlYWRDYWxsVGFyZ2V0PE9wZXJhdGlvblB0clRhZz4o
Y2FsbCk7CiAgICAgICAgIGF1dG8gc2xvd1BhdGhUaHVuayA9IE1hY3JvQXNzZW1ibGVyQ29kZVB0
cjxKSVRUaHVua1B0clRhZz46OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyh0YXJnZXQucmV0
YWdnZWRFeGVjdXRhYmxlQWRkcmVzczxKSVRUaHVua1B0clRhZz4oKSk7CkBAIC03OTksMjEgKzc5
OSwyMSBAQCB2b2lkIHJlcGF0Y2hJbnN0YW5jZU9mKAogICAgICAgICBmdGxUaHVua0F3YXJlUmVw
YXRjaENhbGwoZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLnNsb3dQYXRoQ2FsbExvY2F0aW9u
KCksIG9wZXJhdGlvbkluc3RhbmNlT2ZHZW5lcmljKTsKIH0KIAotc3RhdGljIHZvaWQgbGlua1Ns
b3dGb3IoVk0qLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiBjb2RlUmVmKQorc3RhdGljIHZvaWQgbGlua1Nsb3dG
b3IoVk0mLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFN0dWJSb3V0aW5lUHRyVGFnPiBjb2RlUmVmKQogewogICAgIE1hY3JvQXNzZW1ibGVyOjpy
ZXBhdGNoTmVhckNhbGwoY2FsbExpbmtJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbigpLCBDb2RlTG9j
YXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4oY29kZVJlZi5jb2RlKCkpKTsKIH0KIAot
c3RhdGljIHZvaWQgbGlua1Nsb3dGb3IoVk0qIHZtLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5m
bywgVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yKQorc3RhdGljIHZvaWQgbGlua1Nsb3dGb3IoVk0m
IHZtLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywgVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9y
KQogewotICAgIGxpbmtTbG93Rm9yKHZtLCBjYWxsTGlua0luZm8sIHZtLT5nZXRDVElTdHViKGdl
bmVyYXRvcikucmV0YWdnZWQ8SklUU3R1YlJvdXRpbmVQdHJUYWc+KCkpOworICAgIGxpbmtTbG93
Rm9yKHZtLCBjYWxsTGlua0luZm8sIHZtLmdldENUSVN0dWIoZ2VuZXJhdG9yKS5yZXRhZ2dlZDxK
SVRTdHViUm91dGluZVB0clRhZz4oKSk7CiB9CiAKLXN0YXRpYyB2b2lkIGxpbmtTbG93Rm9yKFZN
KiB2bSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8pCitzdGF0aWMgdm9pZCBsaW5rU2xvd0Zv
cihWTSYgdm0sIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvKQogewogICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRTdHViUm91dGluZVB0clRhZz4gdmlydHVhbFRodW5rID0gdmlydHVhbFRo
dW5rRm9yKHZtLCBjYWxsTGlua0luZm8pOwogICAgIGxpbmtTbG93Rm9yKHZtLCBjYWxsTGlua0lu
Zm8sIHZpcnR1YWxUaHVuayk7Ci0gICAgY2FsbExpbmtJbmZvLnNldFNsb3dTdHViKGNyZWF0ZUpJ
VFN0dWJSb3V0aW5lKHZpcnR1YWxUaHVuaywgKnZtLCBudWxscHRyLCB0cnVlKSk7CisgICAgY2Fs
bExpbmtJbmZvLnNldFNsb3dTdHViKGNyZWF0ZUpJVFN0dWJSb3V0aW5lKHZpcnR1YWxUaHVuaywg
dm0sIG51bGxwdHIsIHRydWUpKTsKIH0KIAogc3RhdGljIEpTQ2VsbCogd2ViQXNzZW1ibHlPd25l
cihKU0NlbGwqIGNhbGxlZSkKQEAgLTg1OSwxMSArODU5LDExIEBAIHZvaWQgbGlua0ZvcigKICAg
ICAgICAgY2FsbGVlQ29kZUJsb2NrLT5saW5rSW5jb21pbmdDYWxsKGNhbGxlckZyYW1lLCAmY2Fs
bExpbmtJbmZvKTsKIAogICAgIGlmIChjYWxsTGlua0luZm8uc3BlY2lhbGl6YXRpb25LaW5kKCkg
PT0gQ29kZUZvckNhbGwgJiYgY2FsbExpbmtJbmZvLmFsbG93U3R1YnMoKSkgewotICAgICAgICBs
aW5rU2xvd0Zvcigmdm0sIGNhbGxMaW5rSW5mbywgbGlua1BvbHltb3JwaGljQ2FsbFRodW5rR2Vu
ZXJhdG9yKTsKKyAgICAgICAgbGlua1Nsb3dGb3Iodm0sIGNhbGxMaW5rSW5mbywgbGlua1BvbHlt
b3JwaGljQ2FsbFRodW5rR2VuZXJhdG9yKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAK
LSAgICBsaW5rU2xvd0Zvcigmdm0sIGNhbGxMaW5rSW5mbyk7CisgICAgbGlua1Nsb3dGb3Iodm0s
IGNhbGxMaW5rSW5mbyk7CiB9CiAKIHZvaWQgbGlua0RpcmVjdEZvcigKQEAgLTg3NCwxMCArODc0
LDEwIEBAIHZvaWQgbGlua0RpcmVjdEZvcigKICAgICAKICAgICBDb2RlQmxvY2sqIGNhbGxlckNv
ZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOwogCi0gICAgVk0qIHZtID0gY2FsbGVyQ29kZUJs
b2NrLT52bSgpOworICAgIFZNJiB2bSA9IGNhbGxlckNvZGVCbG9jay0+dm0oKTsKICAgICAKICAg
ICBBU1NFUlQoIWNhbGxMaW5rSW5mby5pc0xpbmtlZCgpKTsKLSAgICBjYWxsTGlua0luZm8uc2V0
Q29kZUJsb2NrKCp2bSwgY2FsbGVyQ29kZUJsb2NrLCBqc0Nhc3Q8RnVuY3Rpb25Db2RlQmxvY2sq
PihjYWxsZWVDb2RlQmxvY2spKTsKKyAgICBjYWxsTGlua0luZm8uc2V0Q29kZUJsb2NrKHZtLCBj
YWxsZXJDb2RlQmxvY2ssIGpzQ2FzdDxGdW5jdGlvbkNvZGVCbG9jayo+KGNhbGxlZUNvZGVCbG9j
aykpOwogICAgIGlmIChzaG91bGREdW1wRGlzYXNzZW1ibHlGb3IoY2FsbGVyQ29kZUJsb2NrKSkK
ICAgICAgICAgZGF0YUxvZygiTGlua2luZyBjYWxsIGluICIsIEZ1bGxDb2RlT3JpZ2luKGNhbGxl
ckNvZGVCbG9jaywgY2FsbExpbmtJbmZvLmNvZGVPcmlnaW4oKSksICIgdG8gIiwgcG9pbnRlckR1
bXAoY2FsbGVlQ29kZUJsb2NrKSwgIiwgZW50cnlwb2ludCBhdCAiLCBjb2RlUHRyLCAiXG4iKTsK
IApAQCAtODkzLDEyICs4OTMsMTIgQEAgdm9pZCBsaW5rU2xvd0ZvcigKICAgICBFeGVjU3RhdGUq
IGV4ZWMsIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvKQogewogICAgIENvZGVCbG9jayogY2Fs
bGVyQ29kZUJsb2NrID0gZXhlYy0+Y2FsbGVyRnJhbWUoKS0+Y29kZUJsb2NrKCk7Ci0gICAgVk0q
IHZtID0gY2FsbGVyQ29kZUJsb2NrLT52bSgpOworICAgIFZNJiB2bSA9IGNhbGxlckNvZGVCbG9j
ay0+dm0oKTsKICAgICAKICAgICBsaW5rU2xvd0Zvcih2bSwgY2FsbExpbmtJbmZvKTsKIH0KIAot
c3RhdGljIHZvaWQgcmV2ZXJ0Q2FsbChWTSogdm0sIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZv
LCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+IGNvZGVSZWYpCitz
dGF0aWMgdm9pZCByZXZlcnRDYWxsKFZNJiB2bSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8s
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91dGluZVB0clRhZz4gY29kZVJlZikKIHsK
ICAgICBpZiAoY2FsbExpbmtJbmZvLmlzRGlyZWN0KCkpIHsKICAgICAgICAgY2FsbExpbmtJbmZv
LmNsZWFyQ29kZUJsb2NrKCk7CkBAIC05MzAsNyArOTMwLDcgQEAgdm9pZCB1bmxpbmtGb3IoVk0m
IHZtLCBDYWxsTGlua0luZm8mIGNhbAogICAgIGlmIChPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHko
KSkKICAgICAgICAgZGF0YUxvZygiVW5saW5raW5nIGNhbGwgYXQgIiwgY2FsbExpbmtJbmZvLmhv
dFBhdGhPdGhlcigpLCAiXG4iKTsKICAgICAKLSAgICByZXZlcnRDYWxsKCZ2bSwgY2FsbExpbmtJ
bmZvLCB2bS5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLnJldGFnZ2VkPEpJVFN0
dWJSb3V0aW5lUHRyVGFnPigpKTsKKyAgICByZXZlcnRDYWxsKHZtLCBjYWxsTGlua0luZm8sIHZt
LmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikucmV0YWdnZWQ8SklUU3R1YlJvdXRp
bmVQdHJUYWc+KCkpOwogfQogCiBzdGF0aWMgdm9pZCBsaW5rVmlydHVhbEZvcihFeGVjU3RhdGUq
IGV4ZWMsIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvKQpAQCAtOTQyLDggKzk0Miw4IEBAIHN0
YXRpYyB2b2lkIGxpbmtWaXJ0dWFsRm9yKEV4ZWNTdGF0ZSogZXgKICAgICBpZiAoc2hvdWxkRHVt
cERpc2Fzc2VtYmx5Rm9yKGNhbGxlckNvZGVCbG9jaykpCiAgICAgICAgIGRhdGFMb2coIkxpbmtp
bmcgdmlydHVhbCBjYWxsIGF0ICIsIEZ1bGxDb2RlT3JpZ2luKGNhbGxlckNvZGVCbG9jaywgY2Fs
bGVyRnJhbWUtPmNvZGVPcmlnaW4oKSksICJcbiIpOwogCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiB2aXJ0dWFsVGh1bmsgPSB2aXJ0dWFsVGh1bmtGb3Io
JnZtLCBjYWxsTGlua0luZm8pOwotICAgIHJldmVydENhbGwoJnZtLCBjYWxsTGlua0luZm8sIHZp
cnR1YWxUaHVuayk7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRy
VGFnPiB2aXJ0dWFsVGh1bmsgPSB2aXJ0dWFsVGh1bmtGb3Iodm0sIGNhbGxMaW5rSW5mbyk7Cisg
ICAgcmV2ZXJ0Q2FsbCh2bSwgY2FsbExpbmtJbmZvLCB2aXJ0dWFsVGh1bmspOwogICAgIGNhbGxM
aW5rSW5mby5zZXRTbG93U3R1YihjcmVhdGVKSVRTdHViUm91dGluZSh2aXJ0dWFsVGh1bmssIHZt
LCBudWxscHRyLCB0cnVlKSk7CiAgICAgY2FsbExpbmtJbmZvLnNldENsZWFyZWRCeVZpcnR1YWwo
KTsKIH0KQEAgLTEyNDQsNyArMTI0NCw3IEBAIHZvaWQgbGlua1BvbHltb3JwaGljQ2FsbCgKICAg
ICAvLyBUaGUgb3JpZ2luYWwgc2xvdyBwYXRoIGlzIHVucmVhY2hhYmxlIG9uIDY0LWJpdHMsIGJ1
dCBzdGlsbAogICAgIC8vIHJlYWNoYWJsZSBvbiAzMi1iaXRzIHNpbmNlIGEgbm9uLWNlbGwgY2Fs
bGVlIHdpbGwgYWx3YXlzCiAgICAgLy8gdHJpZ2dlciB0aGUgc2xvdyBwYXRoCi0gICAgbGlua1Ns
b3dGb3IoJnZtLCBjYWxsTGlua0luZm8pOworICAgIGxpbmtTbG93Rm9yKHZtLCBjYWxsTGlua0lu
Zm8pOwogICAgIAogICAgIC8vIElmIHRoZXJlIGhhZCBiZWVuIGEgcHJldmlvdXMgc3R1YiByb3V0
aW5lLCB0aGF0IG9uZSB3aWxsIGRpZSBhcyBzb29uIGFzIHRoZSBHQyBydW5zIGFuZCBzZWVzCiAg
ICAgLy8gdGhhdCBpdCdzIG5vIGxvbmdlciBvbiBzdGFjay4KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvU3BlY2lhbGl6ZWRUaHVua0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvU3BlY2lhbGl6ZWRUaHVua0pJVC5oCShyZXZpc2lvbiAyNDkxMjgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NwZWNpYWxpemVkVGh1bmtKSVQuaAkod29y
a2luZyBjb3B5KQpAQCAtMzcsOCArMzcsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBT
cGVjaWFsaXplZFRodW5rSklUIDogcHVibGljIEpTSW50ZXJmYWNlSklUIHsKICAgICBwdWJsaWM6
CiAgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgVGhpc0FyZ3VtZW50ID0gLTE7Ci0gICAgICAgIFNw
ZWNpYWxpemVkVGh1bmtKSVQoVk0qIHZtLCBpbnQgZXhwZWN0ZWRBcmdDb3VudCkKLSAgICAgICAg
ICAgIDogSlNJbnRlcmZhY2VKSVQodm0pCisgICAgICAgIFNwZWNpYWxpemVkVGh1bmtKSVQoVk0m
IHZtLCBpbnQgZXhwZWN0ZWRBcmdDb3VudCkKKyAgICAgICAgICAgIDogSlNJbnRlcmZhY2VKSVQo
JnZtKQogICAgICAgICB7CiAgICAgICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZSgpOwogICAg
ICAgICAgICAgZW1pdFNhdmVUaGVuTWF0ZXJpYWxpemVUYWdSZWdpc3RlcnMoKTsKQEAgLTQ2LDgg
KzQ2LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBtX2ZhaWx1cmVzLmFwcGVuZChi
cmFuY2gzMihOb3RFcXVhbCwgcGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50
KSwgVHJ1c3RlZEltbTMyKGV4cGVjdGVkQXJnQ291bnQgKyAxKSkpOwogICAgICAgICB9CiAgICAg
ICAgIAotICAgICAgICBleHBsaWNpdCBTcGVjaWFsaXplZFRodW5rSklUKFZNKiB2bSkKLSAgICAg
ICAgICAgIDogSlNJbnRlcmZhY2VKSVQodm0pCisgICAgICAgIGV4cGxpY2l0IFNwZWNpYWxpemVk
VGh1bmtKSVQoVk0mIHZtKQorICAgICAgICAgICAgOiBKU0ludGVyZmFjZUpJVCgmdm0pCiAgICAg
ICAgIHsKICAgICAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKCk7CiAgICAgICAgICAgICBl
bWl0U2F2ZVRoZW5NYXRlcmlhbGl6ZVRhZ1JlZ2lzdGVycygpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3IuaAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMzMsNyArMzMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIGNsYXNzIFZNOwogdGVtcGxhdGU8UHRy
VGFnPiBjbGFzcyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY7CiAKLXVzaW5nIFRodW5rR2VuZXJhdG9y
ID0gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiAoKikoVk0qKTsKK3VzaW5n
IFRodW5rR2VuZXJhdG9yID0gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiAo
KikoVk0mKTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjAsNyArNjAsNyBAQCBpbmxpbmUgdm9pZCBlbWl0UG9pbnRlclZhbGlkYXRpb24oQ0Nh
bGxICiAKIC8vIFdlIHdpbGwganVtcCBoZXJlIGlmIHRoZSBKSVQgY29kZSB0cmllcyB0byBtYWtl
IGEgY2FsbCwgYnV0IHRoZQogLy8gbGlua2luZyBoZWxwZXIgKEMrKyBjb2RlKSBkZWNpZGVzIHRv
IHRocm93IGFuIGV4Y2VwdGlvbiBpbnN0ZWFkLgotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiB0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IoVk0qIHZt
KQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiB0aHJvd0V4Y2VwdGlvbkZy
b21DYWxsU2xvd1BhdGhHZW5lcmF0b3IoVk0mIHZtKQogewogICAgIENDYWxsSGVscGVycyBqaXQ7
CiAgICAgCkBAIC02OCwyMyArNjgsMjMgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiB0aAogICAgIC8vIGV2ZW4gdGhvdWdoIHdlIHdvbid0IHVzZSBpdC4KICAgICBqaXQu
cHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKEdQUkluZm86Om5vblByZXNlcnZlZE5vblJl
dHVybkdQUik7CiAKLSAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2
ZXNCdWZmZXIodm0tPnRvcEVudHJ5RnJhbWUpOworICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb0Vu
dHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bS50b3BFbnRyeUZyYW1lKTsKIAotICAgIGppdC5z
ZXR1cEFyZ3VtZW50czxkZWNsdHlwZShsb29rdXBFeGNlcHRpb25IYW5kbGVyKT4oQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tUHRyKHZtKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOworICAg
IGppdC5zZXR1cEFyZ3VtZW50czxkZWNsdHlwZShsb29rdXBFeGNlcHRpb25IYW5kbGVyKT4oQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKCZ2bSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVy
KTsKICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodGFnQ0Z1bmN0aW9u
UHRyPE9wZXJhdGlvblB0clRhZz4obG9va3VwRXhjZXB0aW9uSGFuZGxlcikpLCBHUFJJbmZvOjpu
b25BcmdHUFIwKTsKICAgICBlbWl0UG9pbnRlclZhbGlkYXRpb24oaml0LCBHUFJJbmZvOjpub25B
cmdHUFIwLCBPcGVyYXRpb25QdHJUYWcpOwogICAgIGppdC5jYWxsKEdQUkluZm86Om5vbkFyZ0dQ
UjAsIE9wZXJhdGlvblB0clRhZyk7Ci0gICAgaml0Lmp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIoKnZt
KTsKKyAgICBqaXQuanVtcFRvRXhjZXB0aW9uSGFuZGxlcih2bSk7CiAKICAgICBMaW5rQnVmZmVy
IHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lEKTsKICAgICByZXR1cm4gRklOQUxJWkVf
Q09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJUaHJvdyBleGNlcHRpb24gZnJvbSBj
YWxsIHNsb3cgcGF0aCB0aHVuayIpOwogfQogCi1zdGF0aWMgdm9pZCBzbG93UGF0aEZvcihDQ2Fs
bEhlbHBlcnMmIGppdCwgVk0qIHZtLCBTcHJ0X0pJVE9wZXJhdGlvbl9FQ2xpIHNsb3dQYXRoRnVu
Y3Rpb24pCitzdGF0aWMgdm9pZCBzbG93UGF0aEZvcihDQ2FsbEhlbHBlcnMmIGppdCwgVk0mIHZt
LCBTcHJ0X0pJVE9wZXJhdGlvbl9FQ2xpIHNsb3dQYXRoRnVuY3Rpb24pCiB7Ci0gICAgaml0LnNh
bml0aXplU3RhY2tJbmxpbmUoKnZtLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKKyAgICBqaXQuc2Fu
aXRpemVTdGFja0lubGluZSh2bSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7CiAgICAgaml0LmVtaXRG
dW5jdGlvblByb2xvZ3VlKCk7Ci0gICAgaml0LnN0b3JlUHRyKEdQUkluZm86OmNhbGxGcmFtZVJl
Z2lzdGVyLCAmdm0tPnRvcENhbGxGcmFtZSk7CisgICAgaml0LnN0b3JlUHRyKEdQUkluZm86OmNh
bGxGcmFtZVJlZ2lzdGVyLCAmdm0udG9wQ2FsbEZyYW1lKTsKICNpZiBPUyhXSU5ET1dTKSAmJiBD
UFUoWDg2XzY0KQogICAgIC8vIFdpbmRvd3MgWDg2XzY0IG5lZWRzIHNvbWUgc3BhY2UgcG9pbnRl
ZCB0byBieSBhcmcwIGZvciByZXR1cm4gdHlwZXMgbGFyZ2VyIHRoYW4gNjQgYml0cy4KICAgICAv
LyBPdGhlciBhcmd1bWVudCB2YWx1ZXMgYXJlIHNoaWZ0IGJ5IDEuIFVzZSBzcGFjZSBvbiB0aGUg
c3RhY2sgZm9yIG91ciB0d28gcmV0dXJuIHZhbHVlcy4KQEAgLTEzMSw3ICsxMzEsNyBAQCBzdGF0
aWMgdm9pZCBzbG93UGF0aEZvcihDQ2FsbEhlbHBlcnMmIGppCiAgICAgaml0LmZhckp1bXAoR1BS
SW5mbzo6cmV0dXJuVmFsdWVHUFIsIEpTRW50cnlQdHJUYWcpOwogfQogCi1NYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQor
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBsaW5rQ2FsbFRodW5rR2VuZXJh
dG9yKFZNJiB2bSkKIHsKICAgICAvLyBUaGUgcmV0dXJuIGFkZHJlc3MgaXMgb24gdGhlIHN0YWNr
IG9yIGluIHRoZSBsaW5rIHJlZ2lzdGVyLiBXZSB3aWxsIGhlbmNlCiAgICAgLy8gc2F2ZSB0aGUg
cmV0dXJuIGFkZHJlc3MgdG8gdGhlIGNhbGwgZnJhbWUgd2hpbGUgd2UgbWFrZSBhIEMrKyBmdW5j
dGlvbiBjYWxsCkBAIC0xNDgsNyArMTQ4LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiBsaQogCiAvLyBGb3IgY2xvc3VyZSBvcHRpbWl6YXRpb25zLCB3ZSBvbmx5IGlu
Y2x1ZGUgY2FsbHMsIHNpbmNlIGlmIHlvdSdyZSB1c2luZyBjbG9zdXJlcyBmb3IKIC8vIG9iamVj
dCBjb25zdHJ1Y3Rpb24gdGhlbiB5b3UncmUgZ29pbmcgdG8gbG9zZSBiaWcgdGltZSBhbnl3YXku
Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGxpbmtQb2x5bW9ycGhpY0Nh
bGxUaHVua0dlbmVyYXRvcihWTSogdm0pCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IGxpbmtQb2x5bW9ycGhpY0NhbGxUaHVua0dlbmVyYXRvcihWTSYgdm0pCiB7CiAgICAg
Q0NhbGxIZWxwZXJzIGppdDsKIApAQCAtMTYyLDcgKzE2Miw3IEBAIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gbGkKIC8vIHBhdGggdmlydHVhbCBjYWxsIHNvIHRoYXQgd2Ug
Y2FuIGVuYWJsZSBmYXN0IHRhaWwgY2FsbHMgZm9yIG1lZ2Ftb3JwaGljCiAvLyB2aXJ0dWFsIGNh
bGxzIGJ5IHVzaW5nIHRoZSBzaHVmZmxlci4KIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNDg4MzEKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91dGlu
ZVB0clRhZz4gdmlydHVhbFRodW5rRm9yKFZNKiB2bSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0lu
Zm8pCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHZpcnR1YWxU
aHVua0ZvcihWTSYgdm0sIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvKQogewogICAgIC8vIFRo
ZSBjYWxsZWUgaXMgaW4gcmVnVDAgKGZvciBKU1ZBTFVFMzJfNjQsIHRoZSB0YWcgaXMgaW4gcmVn
VDEpLgogICAgIC8vIFRoZSByZXR1cm4gYWRkcmVzcyBpcyBvbiB0aGUgc3RhY2ssIG9yIGluIHRo
ZSBsaW5rIHJlZ2lzdGVyLiBXZSB3aWxsIGhlbmNlCkBAIC0yMjEsNyArMjIxLDcgQEAgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRyVAogCiAgICAgbm90SlNGdW5jdGlvbi5s
aW5rKCZqaXQpOwogICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuYnJhbmNoSWZOb3RUeXBlKEdQUklu
Zm86OnJlZ1QwLCBJbnRlcm5hbEZ1bmN0aW9uVHlwZSkpOwotICAgIHZvaWQqIGV4ZWN1dGFibGVB
ZGRyZXNzID0gdm0tPmdldENUSUludGVybmFsRnVuY3Rpb25UcmFtcG9saW5lRm9yKGNhbGxMaW5r
SW5mby5zcGVjaWFsaXphdGlvbktpbmQoKSkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKKyAgICB2b2lk
KiBleGVjdXRhYmxlQWRkcmVzcyA9IHZtLmdldENUSUludGVybmFsRnVuY3Rpb25UcmFtcG9saW5l
Rm9yKGNhbGxMaW5rSW5mby5zcGVjaWFsaXphdGlvbktpbmQoKSkuZXhlY3V0YWJsZUFkZHJlc3Mo
KTsKICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoZXhlY3V0YWJsZUFk
ZHJlc3MpLCBHUFJJbmZvOjpyZWdUNCk7CiAgICAgaml0Lmp1bXAoKS5saW5rVG8oY2FsbENvZGUs
ICZqaXQpOwogCkBAIC0yNDAsMTQgKzI0MCwxNCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
U3R1YlJvdXRpbmVQdHJUCiBlbnVtIFRodW5rRW50cnlUeXBlIHsgRW50ZXJWaWFDYWxsLCBFbnRl
clZpYUp1bXBXaXRoU2F2ZWRUYWdzLCBFbnRlclZpYUp1bXBXaXRob3V0U2F2ZWRUYWdzIH07CiBl
bnVtIGNsYXNzIFRodW5rRnVuY3Rpb25UeXBlIHsgSlNGdW5jdGlvbiwgSW50ZXJuYWxGdW5jdGlv
biB9OwogCi1zdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBuYXRp
dmVGb3JHZW5lcmF0b3IoVk0qIHZtLCBUaHVua0Z1bmN0aW9uVHlwZSB0aHVua0Z1bmN0aW9uVHlw
ZSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kLCBUaHVua0VudHJ5VHlwZSBlbnRyeVR5cGUg
PSBFbnRlclZpYUNhbGwpCitzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBuYXRpdmVGb3JHZW5lcmF0b3IoVk0mIHZtLCBUaHVua0Z1bmN0aW9uVHlwZSB0aHVua0Z1
bmN0aW9uVHlwZSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kLCBUaHVua0VudHJ5VHlwZSBl
bnRyeVR5cGUgPSBFbnRlclZpYUNhbGwpCiB7CiAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJl
IGFibGUgdG8gbG9nIFNoYWRvd0NoaWNrZW4gcHJvbG9ndWUgcGFja2V0cy4KICAgICAvLyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU1Njg5CiAgICAgCiAgICAgaW50
IGV4ZWN1dGFibGVPZmZzZXRUb0Z1bmN0aW9uID0gTmF0aXZlRXhlY3V0YWJsZTo6b2Zmc2V0T2ZO
YXRpdmVGdW5jdGlvbkZvcihraW5kKTsKICAgICAKLSAgICBKU0ludGVyZmFjZUpJVCBqaXQodm0p
OworICAgIEpTSW50ZXJmYWNlSklUIGppdCgmdm0pOwogCiAgICAgc3dpdGNoIChlbnRyeVR5cGUp
IHsKICAgICBjYXNlIEVudGVyVmlhQ2FsbDoKQEAgLTI2Niw3ICsyNjYsNyBAQCBzdGF0aWMgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyCiAgICAgfQogCiAgICAgaml0LmVtaXRQdXRU
b0NhbGxGcmFtZUhlYWRlcigwLCBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spOwotICAgIGppdC5z
dG9yZVB0cihKU0ludGVyZmFjZUpJVDo6Y2FsbEZyYW1lUmVnaXN0ZXIsICZ2bS0+dG9wQ2FsbEZy
YW1lKTsKKyAgICBqaXQuc3RvcmVQdHIoSlNJbnRlcmZhY2VKSVQ6OmNhbGxGcmFtZVJlZ2lzdGVy
LCAmdm0udG9wQ2FsbEZyYW1lKTsKIAogI2lmIENQVShYODYpCiAgICAgLy8gQ2FsbGluZyBjb252
ZW50aW9uOiAgICAgIGYoZWN4LCBlZHgsIC4uLik7CkBAIC0zNjMsMTIgKzM2MywxMiBAQCBzdGF0
aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyCiAKICAgICAvLyBDaGVjayBmb3Ig
YW4gZXhjZXB0aW9uCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBqaXQubG9hZDY0KHZtLT5hZGRy
ZXNzT2ZFeGNlcHRpb24oKSwgSlNJbnRlcmZhY2VKSVQ6OnJlZ1QyKTsKKyAgICBqaXQubG9hZDY0
KHZtLmFkZHJlc3NPZkV4Y2VwdGlvbigpLCBKU0ludGVyZmFjZUpJVDo6cmVnVDIpOwogICAgIEpT
SW50ZXJmYWNlSklUOjpKdW1wIGV4Y2VwdGlvbkhhbmRsZXIgPSBqaXQuYnJhbmNoVGVzdDY0KEpT
SW50ZXJmYWNlSklUOjpOb25aZXJvLCBKU0ludGVyZmFjZUpJVDo6cmVnVDIpOwogI2Vsc2UKICAg
ICBKU0ludGVyZmFjZUpJVDo6SnVtcCBleGNlcHRpb25IYW5kbGVyID0gaml0LmJyYW5jaDMyKAog
ICAgICAgICBKU0ludGVyZmFjZUpJVDo6Tm90RXF1YWwsCi0gICAgICAgIEpTSW50ZXJmYWNlSklU
OjpBYnNvbHV0ZUFkZHJlc3Modm0tPmFkZHJlc3NPZkV4Y2VwdGlvbigpKSwKKyAgICAgICAgSlNJ
bnRlcmZhY2VKSVQ6OkFic29sdXRlQWRkcmVzcyh2bS5hZGRyZXNzT2ZFeGNlcHRpb24oKSksCiAg
ICAgICAgIEpTSW50ZXJmYWNlSklUOjpUcnVzdGVkSW1tMzIoMCkpOwogI2VuZGlmCiAKQEAgLTM3
OSw4ICszNzksOCBAQCBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyCiAg
ICAgLy8gSGFuZGxlIGFuIGV4Y2VwdGlvbgogICAgIGV4Y2VwdGlvbkhhbmRsZXIubGluaygmaml0
KTsKIAotICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZl
cih2bS0+dG9wRW50cnlGcmFtZSk7Ci0gICAgaml0LnN0b3JlUHRyKEpTSW50ZXJmYWNlSklUOjpj
YWxsRnJhbWVSZWdpc3RlciwgJnZtLT50b3BDYWxsRnJhbWUpOworICAgIGppdC5jb3B5Q2FsbGVl
U2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bS50b3BFbnRyeUZyYW1lKTsKKyAg
ICBqaXQuc3RvcmVQdHIoSlNJbnRlcmZhY2VKSVQ6OmNhbGxGcmFtZVJlZ2lzdGVyLCAmdm0udG9w
Q2FsbEZyYW1lKTsKIAogI2lmIENQVShYODYpICYmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgaml0
LnN1YlB0cihKU0ludGVyZmFjZUpJVDo6VHJ1c3RlZEltbTMyKDQpLCBKU0ludGVyZmFjZUpJVDo6
c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwpAQCAtNDAxLDQ1ICs0MDEsNDUgQEAgc3RhdGljIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0cgogICAgIGppdC5hZGRQdHIoSlNJbnRlcmZhY2VK
SVQ6OlRydXN0ZWRJbW0zMig0ICogc2l6ZW9mKGludDY0X3QpKSwgSlNJbnRlcmZhY2VKSVQ6OnN0
YWNrUG9pbnRlclJlZ2lzdGVyKTsKICNlbmRpZgogCi0gICAgaml0Lmp1bXBUb0V4Y2VwdGlvbkhh
bmRsZXIoKnZtKTsKKyAgICBqaXQuanVtcFRvRXhjZXB0aW9uSGFuZGxlcih2bSk7CiAKICAgICBM
aW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lEKTsKICAgICByZXR1cm4g
RklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsICIlcyAlcyVzIHRyYW1w
b2xpbmUiLCB0aHVua0Z1bmN0aW9uVHlwZSA9PSBUaHVua0Z1bmN0aW9uVHlwZTo6SlNGdW5jdGlv
biA/ICJuYXRpdmUiIDogImludGVybmFsIiwgZW50cnlUeXBlID09IEVudGVyVmlhSnVtcFdpdGhT
YXZlZFRhZ3MgPyAiVGFpbCBXaXRoIFNhdmVkIFRhZ3MgIiA6IGVudHJ5VHlwZSA9PSBFbnRlclZp
YUp1bXBXaXRob3V0U2F2ZWRUYWdzID8gIlRhaWwgV2l0aG91dCBTYXZlZCBUYWdzICIgOiAiIiwg
dG9DU3RyaW5nKGtpbmQpLmRhdGEoKSk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gbmF0aXZlQ2FsbEdlbmVyYXRvcihWTSogdm0pCitNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IG5hdGl2ZUNhbGxHZW5lcmF0b3IoVk0mIHZtKQogewogICAg
IHJldHVybiBuYXRpdmVGb3JHZW5lcmF0b3Iodm0sIFRodW5rRnVuY3Rpb25UeXBlOjpKU0Z1bmN0
aW9uLCBDb2RlRm9yQ2FsbCk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gbmF0aXZlVGFpbENhbGxHZW5lcmF0b3IoVk0qIHZtKQorTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBuYXRpdmVUYWlsQ2FsbEdlbmVyYXRvcihWTSYgdm0pCiB7CiAg
ICAgcmV0dXJuIG5hdGl2ZUZvckdlbmVyYXRvcih2bSwgVGh1bmtGdW5jdGlvblR5cGU6OkpTRnVu
Y3Rpb24sIENvZGVGb3JDYWxsLCBFbnRlclZpYUp1bXBXaXRoU2F2ZWRUYWdzKTsKIH0KIAotTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBuYXRpdmVUYWlsQ2FsbFdpdGhvdXRT
YXZlZFRhZ3NHZW5lcmF0b3IoVk0qIHZtKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiBuYXRpdmVUYWlsQ2FsbFdpdGhvdXRTYXZlZFRhZ3NHZW5lcmF0b3IoVk0mIHZtKQog
ewogICAgIHJldHVybiBuYXRpdmVGb3JHZW5lcmF0b3Iodm0sIFRodW5rRnVuY3Rpb25UeXBlOjpK
U0Z1bmN0aW9uLCBDb2RlRm9yQ2FsbCwgRW50ZXJWaWFKdW1wV2l0aG91dFNhdmVkVGFncyk7CiB9
CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gbmF0aXZlQ29uc3RydWN0
R2VuZXJhdG9yKFZNKiB2bSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
bmF0aXZlQ29uc3RydWN0R2VuZXJhdG9yKFZNJiB2bSkKIHsKICAgICByZXR1cm4gbmF0aXZlRm9y
R2VuZXJhdG9yKHZtLCBUaHVua0Z1bmN0aW9uVHlwZTo6SlNGdW5jdGlvbiwgQ29kZUZvckNvbnN0
cnVjdCk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gaW50ZXJu
YWxGdW5jdGlvbkNhbGxHZW5lcmF0b3IoVk0qIHZtKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBpbnRlcm5hbEZ1bmN0aW9uQ2FsbEdlbmVyYXRvcihWTSYgdm0pCiB7CiAg
ICAgcmV0dXJuIG5hdGl2ZUZvckdlbmVyYXRvcih2bSwgVGh1bmtGdW5jdGlvblR5cGU6OkludGVy
bmFsRnVuY3Rpb24sIENvZGVGb3JDYWxsKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBpbnRlcm5hbEZ1bmN0aW9uQ29uc3RydWN0R2VuZXJhdG9yKFZNKiB2bSkK
K01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gaW50ZXJuYWxGdW5jdGlvbkNv
bnN0cnVjdEdlbmVyYXRvcihWTSYgdm0pCiB7CiAgICAgcmV0dXJuIG5hdGl2ZUZvckdlbmVyYXRv
cih2bSwgVGh1bmtGdW5jdGlvblR5cGU6OkludGVybmFsRnVuY3Rpb24sIENvZGVGb3JDb25zdHJ1
Y3QpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGFyaXR5Rml4
dXBHZW5lcmF0b3IoVk0qIHZtKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiBhcml0eUZpeHVwR2VuZXJhdG9yKFZNJiB2bSkKIHsKLSAgICBKU0ludGVyZmFjZUpJVCBqaXQo
dm0pOworICAgIEpTSW50ZXJmYWNlSklUIGppdCgmdm0pOwogCiAgICAgLy8gV2UgZW50ZXIgd2l0
aCBmaXh1cCBjb3VudCBpbiBhcmd1bWVudEdQUjAKICAgICAvLyBXZSBoYXZlIHRoZSBndWFyYW50
ZWUgdGhhdCBhMCwgYTEsIGEyLCB0MywgdDQgYW5kIHQ1IChvciB0MCBmb3IgV2luZG93cykgYXJl
IGFsbCBkaXN0aW5jdCA6LSkKQEAgLTU5MCw5ICs1OTAsOSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IGFyCiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZm
ZXIsIEpJVFRodW5rUHRyVGFnLCAiZml4dXAgYXJpdHkiKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiB1bnJlYWNoYWJsZUdlbmVyYXRvcihWTSogdm0pCitNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHVucmVhY2hhYmxlR2VuZXJhdG9yKFZN
JiB2bSkKIHsKLSAgICBKU0ludGVyZmFjZUpJVCBqaXQodm0pOworICAgIEpTSW50ZXJmYWNlSklU
IGppdCgmdm0pOwogCiAgICAgaml0LmJyZWFrcG9pbnQoKTsKIApAQCAtNjAwLDcgKzYwMCw3IEBA
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gdW4KICAgICByZXR1cm4gRklO
QUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJ1bnJlYWNoYWJsZSB0aHVu
ayIpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHN0cmluZ0dl
dEJ5VmFsR2VuZXJhdG9yKFZNKiB2bSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gc3RyaW5nR2V0QnlWYWxHZW5lcmF0b3IoVk0mIHZtKQogewogICAgIC8vIHJlZ1QwIGlz
IEpTU3RyaW5nKiwgYW5kIHJlZ1QxICg2NGJpdCkgb3IgcmVnVDIgKDMyYml0KSBpcyBpbnQgaW5k
ZXguCiAgICAgLy8gUmV0dXJuIHJlZ1QwID0gcmVzdWx0IEpTU3RyaW5nKiBpZiBzdWNjZWVkcy4g
T3RoZXJ3aXNlLCByZXR1cm4gcmVnVDAgPSAwLgpAQCAtNjE0LDcgKzYxNCw3IEBAIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gc3QKICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9
IEdQUkluZm86OnJlZ1QxOwogI2VuZGlmCiAKLSAgICBKU0ludGVyZmFjZUpJVCBqaXQodm0pOwor
ICAgIEpTSW50ZXJmYWNlSklUIGppdCgmdm0pOwogICAgIEpTSW50ZXJmYWNlSklUOjpKdW1wTGlz
dCBmYWlsdXJlczsKICAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwogCkBAIC02NDAsNyArNjQw
LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBzdAogICAgIGNvbnQ4
Qml0LmxpbmsoJmppdCk7CiAKICAgICBmYWlsdXJlcy5hcHBlbmQoaml0LmJyYW5jaDMyKEpTSW50
ZXJmYWNlSklUOjpBYm92ZSwgc3RyaW5nR1BSLCBKU0ludGVyZmFjZUpJVDo6VHJ1c3RlZEltbTMy
KG1heFNpbmdsZUNoYXJhY3RlclN0cmluZykpKTsKLSAgICBqaXQubW92ZShKU0ludGVyZmFjZUpJ
VDo6VHJ1c3RlZEltbVB0cih2bS0+c21hbGxTdHJpbmdzLnNpbmdsZUNoYXJhY3RlclN0cmluZ3Mo
KSksIGluZGV4R1BSKTsKKyAgICBqaXQubW92ZShKU0ludGVyZmFjZUpJVDo6VHJ1c3RlZEltbVB0
cih2bS5zbWFsbFN0cmluZ3Muc2luZ2xlQ2hhcmFjdGVyU3RyaW5ncygpKSwgaW5kZXhHUFIpOwog
ICAgIGppdC5sb2FkUHRyKEpTSW50ZXJmYWNlSklUOjpCYXNlSW5kZXgoaW5kZXhHUFIsIHN0cmlu
Z0dQUiwgSlNJbnRlcmZhY2VKSVQ6OlNjYWxlUHRyLCAwKSwgc3RyaW5nR1BSKTsKICAgICBqaXQu
cmV0KCk7CiAKQEAgLTY4Miw0MiArNjgyLDQyIEBAIHN0YXRpYyB2b2lkIHN0cmluZ0NoYXJMb2Fk
KFNwZWNpYWxpemVkVGgKICAgICBjb250OEJpdC5saW5rKCZqaXQpOwogfQogCi1zdGF0aWMgdm9p
ZCBjaGFyVG9TdHJpbmcoU3BlY2lhbGl6ZWRUaHVua0pJVCYgaml0LCBWTSogdm0sIE1hY3JvQXNz
ZW1ibGVyOjpSZWdpc3RlcklEIHNyYywgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgZHN0LCBN
YWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBzY3JhdGNoKQorc3RhdGljIHZvaWQgY2hhclRvU3Ry
aW5nKFNwZWNpYWxpemVkVGh1bmtKSVQmIGppdCwgVk0mIHZtLCBNYWNyb0Fzc2VtYmxlcjo6UmVn
aXN0ZXJJRCBzcmMsIE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIGRzdCwgTWFjcm9Bc3NlbWJs
ZXI6OlJlZ2lzdGVySUQgc2NyYXRjaCkKIHsKICAgICBqaXQuYXBwZW5kRmFpbHVyZShqaXQuYnJh
bmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlLCBzcmMsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tMzIobWF4U2luZ2xlQ2hhcmFjdGVyU3RyaW5nKSkpOwotICAgIGppdC5tb3ZlKE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHZtLT5zbWFsbFN0cmluZ3Muc2luZ2xlQ2hhcmFjdGVyU3Ry
aW5ncygpKSwgc2NyYXRjaCk7CisgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW1QdHIodm0uc21hbGxTdHJpbmdzLnNpbmdsZUNoYXJhY3RlclN0cmluZ3MoKSksIHNjcmF0Y2gp
OwogICAgIGppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc2NyYXRjaCwgc3Jj
LCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIDApLCBkc3QpOwogICAgIGppdC5hcHBlbmRGYWls
dXJlKGppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBkc3QpKTsKIH0KIAot
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBjaGFyQ29kZUF0VGh1bmtHZW5l
cmF0b3IoVk0qIHZtKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBjaGFy
Q29kZUF0VGh1bmtHZW5lcmF0b3IoVk0mIHZtKQogewogICAgIFNwZWNpYWxpemVkVGh1bmtKSVQg
aml0KHZtLCAxKTsKICAgICBzdHJpbmdDaGFyTG9hZChqaXQpOwogICAgIGppdC5yZXR1cm5JbnQz
MihTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCk7Ci0gICAgcmV0dXJuIGppdC5maW5hbGl6ZSh2
bS0+aml0U3R1YnMtPmN0aU5hdGl2ZVRhaWxDYWxsKHZtKSwgImNoYXJDb2RlQXQiKTsKKyAgICBy
ZXR1cm4gaml0LmZpbmFsaXplKHZtLmppdFN0dWJzLT5jdGlOYXRpdmVUYWlsQ2FsbCh2bSksICJj
aGFyQ29kZUF0Iik7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
Y2hhckF0VGh1bmtHZW5lcmF0b3IoVk0qIHZtKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiBjaGFyQXRUaHVua0dlbmVyYXRvcihWTSYgdm0pCiB7CiAgICAgU3BlY2lhbGl6
ZWRUaHVua0pJVCBqaXQodm0sIDEpOwogICAgIHN0cmluZ0NoYXJMb2FkKGppdCk7CiAgICAgY2hh
clRvU3RyaW5nKGppdCwgdm0sIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwLCBTcGVjaWFsaXpl
ZFRodW5rSklUOjpyZWdUMCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDEpOwogICAgIGppdC5y
ZXR1cm5KU0NlbGwoU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDApOwotICAgIHJldHVybiBqaXQu
ZmluYWxpemUodm0tPmppdFN0dWJzLT5jdGlOYXRpdmVUYWlsQ2FsbCh2bSksICJjaGFyQXQiKTsK
KyAgICByZXR1cm4gaml0LmZpbmFsaXplKHZtLmppdFN0dWJzLT5jdGlOYXRpdmVUYWlsQ2FsbCh2
bSksICJjaGFyQXQiKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiBmcm9tQ2hhckNvZGVUaHVua0dlbmVyYXRvcihWTSogdm0pCitNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IGZyb21DaGFyQ29kZVRodW5rR2VuZXJhdG9yKFZNJiB2bSkKIHsK
ICAgICBTcGVjaWFsaXplZFRodW5rSklUIGppdCh2bSwgMSk7CiAgICAgLy8gbG9hZCBjaGFyIGNv
ZGUKICAgICBqaXQubG9hZEludDMyQXJndW1lbnQoMCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVn
VDApOwogICAgIGNoYXJUb1N0cmluZyhqaXQsIHZtLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdU
MCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1Qx
KTsKICAgICBqaXQucmV0dXJuSlNDZWxsKFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwKTsKLSAg
ICByZXR1cm4gaml0LmZpbmFsaXplKHZtLT5qaXRTdHVicy0+Y3RpTmF0aXZlVGFpbENhbGwodm0p
LCAiZnJvbUNoYXJDb2RlIik7CisgICAgcmV0dXJuIGppdC5maW5hbGl6ZSh2bS5qaXRTdHVicy0+
Y3RpTmF0aXZlVGFpbENhbGwodm0pLCAiZnJvbUNoYXJDb2RlIik7CiB9CiAKLU1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gY2x6MzJUaHVua0dlbmVyYXRvcihWTSogdm0pCitN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGNsejMyVGh1bmtHZW5lcmF0b3Io
Vk0mIHZtKQogewogICAgIFNwZWNpYWxpemVkVGh1bmtKSVQgaml0KHZtLCAxKTsKICAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcCBub25JbnRBcmdKdW1wOwpAQCAtNzM1LDE5ICs3MzUsMTkgQEAgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBjbAogICAgIH0gZWxzZQogICAgICAg
ICBqaXQuYXBwZW5kRmFpbHVyZShub25JbnRBcmdKdW1wKTsKIAotICAgIHJldHVybiBqaXQuZmlu
YWxpemUodm0tPmppdFN0dWJzLT5jdGlOYXRpdmVUYWlsQ2FsbCh2bSksICJjbHozMiIpOworICAg
IHJldHVybiBqaXQuZmluYWxpemUodm0uaml0U3R1YnMtPmN0aU5hdGl2ZVRhaWxDYWxsKHZtKSwg
ImNsejMyIik7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gc3Fy
dFRodW5rR2VuZXJhdG9yKFZNKiB2bSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gc3FydFRodW5rR2VuZXJhdG9yKFZNJiB2bSkKIHsKICAgICBTcGVjaWFsaXplZFRodW5r
SklUIGppdCh2bSwgMSk7CiAgICAgaWYgKCFqaXQuc3VwcG9ydHNGbG9hdGluZ1BvaW50U3FydCgp
KQotICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPjo6
Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKHZtLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCh2bSkp
OworICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPjo6
Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKHZtLmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKHZtKSk7
CiAKICAgICBqaXQubG9hZERvdWJsZUFyZ3VtZW50KDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OmZw
UmVnVDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwKTsKICAgICBqaXQuc3FydERvdWJsZShT
cGVjaWFsaXplZFRodW5rSklUOjpmcFJlZ1QwLCBTcGVjaWFsaXplZFRodW5rSklUOjpmcFJlZ1Qw
KTsKICAgICBqaXQucmV0dXJuRG91YmxlKFNwZWNpYWxpemVkVGh1bmtKSVQ6OmZwUmVnVDApOwot
ICAgIHJldHVybiBqaXQuZmluYWxpemUodm0tPmppdFN0dWJzLT5jdGlOYXRpdmVUYWlsQ2FsbCh2
bSksICJzcXJ0Iik7CisgICAgcmV0dXJuIGppdC5maW5hbGl6ZSh2bS5qaXRTdHVicy0+Y3RpTmF0
aXZlVGFpbENhbGwodm0pLCAic3FydCIpOwogfQogCiAKQEAgLTg5OCwxMiArODk4LDEyIEBAIGRl
ZmluZVVuYXJ5RG91YmxlT3BXcmFwcGVyKHRydW5jKTsKIAogc3RhdGljIGNvbnN0IGRvdWJsZSBo
YWxmQ29uc3RhbnQgPSAwLjU7CiAgICAgCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IGZsb29yVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPiBmbG9vclRodW5rR2VuZXJhdG9yKFZNJiB2bSkKIHsKICAgICBTcGVj
aWFsaXplZFRodW5rSklUIGppdCh2bSwgMSk7CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm9u
SW50SnVtcDsKICAgICBpZiAoIVVuYXJ5RG91YmxlT3BXcmFwcGVyKGZsb29yKSB8fCAhaml0LnN1
cHBvcnRzRmxvYXRpbmdQb2ludCgpKQotICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKHZtLT5qaXRTdHVi
cy0+Y3RpTmF0aXZlQ2FsbCh2bSkpOworICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKHZtLmppdFN0dWJz
LT5jdGlOYXRpdmVDYWxsKHZtKSk7CiAgICAgaml0LmxvYWRJbnQzMkFyZ3VtZW50KDAsIFNwZWNp
YWxpemVkVGh1bmtKSVQ6OnJlZ1QwLCBub25JbnRKdW1wKTsKICAgICBqaXQucmV0dXJuSW50MzIo
U3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDApOwogICAgIG5vbkludEp1bXAubGluaygmaml0KTsK
QEAgLTkxNiw3ICs5MTYsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
IGZsCiAgICAgICAgIGppdC5yZXR1cm5JbnQzMihTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCk7
CiAgICAgICAgIGRvdWJsZVJlc3VsdC5saW5rKCZqaXQpOwogICAgICAgICBqaXQucmV0dXJuRG91
YmxlKFNwZWNpYWxpemVkVGh1bmtKSVQ6OmZwUmVnVDApOwotICAgICAgICByZXR1cm4gaml0LmZp
bmFsaXplKHZtLT5qaXRTdHVicy0+Y3RpTmF0aXZlVGFpbENhbGwodm0pLCAiZmxvb3IiKTsKKyAg
ICAgICAgcmV0dXJuIGppdC5maW5hbGl6ZSh2bS5qaXRTdHVicy0+Y3RpTmF0aXZlVGFpbENhbGwo
dm0pLCAiZmxvb3IiKTsKICAgICB9CiAKICAgICBTcGVjaWFsaXplZFRodW5rSklUOjpKdW1wIGlu
dFJlc3VsdDsKQEAgLTkzOCwxNCArOTM4LDE0IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gZmwKICAgICBqaXQucmV0dXJuSW50MzIoU3BlY2lhbGl6ZWRUaHVua0pJVDo6
cmVnVDApOwogICAgIGRvdWJsZVJlc3VsdC5saW5rKCZqaXQpOwogICAgIGppdC5yZXR1cm5Eb3Vi
bGUoU3BlY2lhbGl6ZWRUaHVua0pJVDo6ZnBSZWdUMCk7Ci0gICAgcmV0dXJuIGppdC5maW5hbGl6
ZSh2bS0+aml0U3R1YnMtPmN0aU5hdGl2ZVRhaWxDYWxsKHZtKSwgImZsb29yIik7CisgICAgcmV0
dXJuIGppdC5maW5hbGl6ZSh2bS5qaXRTdHVicy0+Y3RpTmF0aXZlVGFpbENhbGwodm0pLCAiZmxv
b3IiKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBjZWlsVGh1
bmtHZW5lcmF0b3IoVk0qIHZtKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiBjZWlsVGh1bmtHZW5lcmF0b3IoVk0mIHZtKQogewogICAgIFNwZWNpYWxpemVkVGh1bmtKSVQg
aml0KHZtLCAxKTsKICAgICBpZiAoIVVuYXJ5RG91YmxlT3BXcmFwcGVyKGNlaWwpIHx8ICFqaXQu
c3VwcG9ydHNGbG9hdGluZ1BvaW50KCkpCi0gICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+OjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYodm0tPmppdFN0
dWJzLT5jdGlOYXRpdmVDYWxsKHZtKSk7CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+OjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYodm0uaml0U3R1
YnMtPmN0aU5hdGl2ZUNhbGwodm0pKTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub25JbnRK
dW1wOwogICAgIGppdC5sb2FkSW50MzJBcmd1bWVudCgwLCBTcGVjaWFsaXplZFRodW5rSklUOjpy
ZWdUMCwgbm9uSW50SnVtcCk7CiAgICAgaml0LnJldHVybkludDMyKFNwZWNpYWxpemVkVGh1bmtK
SVQ6OnJlZ1QwKTsKQEAgLTk2MSwxNCArOTYxLDE0IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gY2UKICAgICBqaXQucmV0dXJuSW50MzIoU3BlY2lhbGl6ZWRUaHVua0pJ
VDo6cmVnVDApOwogICAgIGRvdWJsZVJlc3VsdC5saW5rKCZqaXQpOwogICAgIGppdC5yZXR1cm5E
b3VibGUoU3BlY2lhbGl6ZWRUaHVua0pJVDo6ZnBSZWdUMCk7Ci0gICAgcmV0dXJuIGppdC5maW5h
bGl6ZSh2bS0+aml0U3R1YnMtPmN0aU5hdGl2ZVRhaWxDYWxsKHZtKSwgImNlaWwiKTsKKyAgICBy
ZXR1cm4gaml0LmZpbmFsaXplKHZtLmppdFN0dWJzLT5jdGlOYXRpdmVUYWlsQ2FsbCh2bSksICJj
ZWlsIik7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gdHJ1bmNU
aHVua0dlbmVyYXRvcihWTSogdm0pCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IHRydW5jVGh1bmtHZW5lcmF0b3IoVk0mIHZtKQogewogICAgIFNwZWNpYWxpemVkVGh1bmtK
SVQgaml0KHZtLCAxKTsKICAgICBpZiAoIVVuYXJ5RG91YmxlT3BXcmFwcGVyKHRydW5jKSB8fCAh
aml0LnN1cHBvcnRzRmxvYXRpbmdQb2ludCgpKQotICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKHZtLT5q
aXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCh2bSkpOworICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKHZtLmpp
dFN0dWJzLT5jdGlOYXRpdmVDYWxsKHZtKSk7CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm9u
SW50SnVtcDsKICAgICBqaXQubG9hZEludDMyQXJndW1lbnQoMCwgU3BlY2lhbGl6ZWRUaHVua0pJ
VDo6cmVnVDAsIG5vbkludEp1bXApOwogICAgIGppdC5yZXR1cm5JbnQzMihTcGVjaWFsaXplZFRo
dW5rSklUOjpyZWdUMCk7CkBAIC05ODQsMTQgKzk4NCwxNCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IHRyCiAgICAgaml0LnJldHVybkludDMyKFNwZWNpYWxpemVkVGh1
bmtKSVQ6OnJlZ1QwKTsKICAgICBkb3VibGVSZXN1bHQubGluaygmaml0KTsKICAgICBqaXQucmV0
dXJuRG91YmxlKFNwZWNpYWxpemVkVGh1bmtKSVQ6OmZwUmVnVDApOwotICAgIHJldHVybiBqaXQu
ZmluYWxpemUodm0tPmppdFN0dWJzLT5jdGlOYXRpdmVUYWlsQ2FsbCh2bSksICJ0cnVuYyIpOwor
ICAgIHJldHVybiBqaXQuZmluYWxpemUodm0uaml0U3R1YnMtPmN0aU5hdGl2ZVRhaWxDYWxsKHZt
KSwgInRydW5jIik7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
cm91bmRUaHVua0dlbmVyYXRvcihWTSogdm0pCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IHJvdW5kVGh1bmtHZW5lcmF0b3IoVk0mIHZtKQogewogICAgIFNwZWNpYWxpemVk
VGh1bmtKSVQgaml0KHZtLCAxKTsKICAgICBpZiAoIVVuYXJ5RG91YmxlT3BXcmFwcGVyKGpzUm91
bmQpIHx8ICFqaXQuc3VwcG9ydHNGbG9hdGluZ1BvaW50KCkpCi0gICAgICAgIHJldHVybiBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+OjpjcmVhdGVTZWxmTWFuYWdlZENvZGVS
ZWYodm0tPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKHZtKSk7CisgICAgICAgIHJldHVybiBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+OjpjcmVhdGVTZWxmTWFuYWdlZENvZGVS
ZWYodm0uaml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwodm0pKTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcCBub25JbnRKdW1wOwogICAgIGppdC5sb2FkSW50MzJBcmd1bWVudCgwLCBTcGVjaWFsaXpl
ZFRodW5rSklUOjpyZWdUMCwgbm9uSW50SnVtcCk7CiAgICAgaml0LnJldHVybkludDMyKFNwZWNp
YWxpemVkVGh1bmtKSVQ6OnJlZ1QwKTsKQEAgLTEwMTgsNDAgKzEwMTgsNDAgQEAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBybwogICAgIGppdC5yZXR1cm5JbnQzMihTcGVj
aWFsaXplZFRodW5rSklUOjpyZWdUMCk7CiAgICAgZG91YmxlUmVzdWx0LmxpbmsoJmppdCk7CiAg
ICAgaml0LnJldHVybkRvdWJsZShTcGVjaWFsaXplZFRodW5rSklUOjpmcFJlZ1QwKTsKLSAgICBy
ZXR1cm4gaml0LmZpbmFsaXplKHZtLT5qaXRTdHVicy0+Y3RpTmF0aXZlVGFpbENhbGwodm0pLCAi
cm91bmQiKTsKKyAgICByZXR1cm4gaml0LmZpbmFsaXplKHZtLmppdFN0dWJzLT5jdGlOYXRpdmVU
YWlsQ2FsbCh2bSksICJyb3VuZCIpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IGV4cFRodW5rR2VuZXJhdG9yKFZNKiB2bSkKK01hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz4gZXhwVGh1bmtHZW5lcmF0b3IoVk0mIHZtKQogewogICAgIGlmICgh
VW5hcnlEb3VibGVPcFdyYXBwZXIoZXhwKSkKLSAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz46OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZih2bS0+aml0
U3R1YnMtPmN0aU5hdGl2ZUNhbGwodm0pKTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz46OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZih2bS5qaXRT
dHVicy0+Y3RpTmF0aXZlQ2FsbCh2bSkpOwogICAgIFNwZWNpYWxpemVkVGh1bmtKSVQgaml0KHZt
LCAxKTsKICAgICBpZiAoIWppdC5zdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkKLSAgICAgICAgcmV0
dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz46OmNyZWF0ZVNlbGZNYW5h
Z2VkQ29kZVJlZih2bS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwodm0pKTsKKyAgICAgICAgcmV0
dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz46OmNyZWF0ZVNlbGZNYW5h
Z2VkQ29kZVJlZih2bS5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCh2bSkpOwogICAgIGppdC5sb2Fk
RG91YmxlQXJndW1lbnQoMCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6ZnBSZWdUMCwgU3BlY2lhbGl6
ZWRUaHVua0pJVDo6cmVnVDApOwogICAgIGppdC5jYWxsRG91YmxlVG9Eb3VibGVQcmVzZXJ2aW5n
UmV0dXJuKFVuYXJ5RG91YmxlT3BXcmFwcGVyKGV4cCkpOwogICAgIGppdC5yZXR1cm5Eb3VibGUo
U3BlY2lhbGl6ZWRUaHVua0pJVDo6ZnBSZWdUMCk7Ci0gICAgcmV0dXJuIGppdC5maW5hbGl6ZSh2
bS0+aml0U3R1YnMtPmN0aU5hdGl2ZVRhaWxDYWxsKHZtKSwgImV4cCIpOworICAgIHJldHVybiBq
aXQuZmluYWxpemUodm0uaml0U3R1YnMtPmN0aU5hdGl2ZVRhaWxDYWxsKHZtKSwgImV4cCIpOwog
fQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGxvZ1RodW5rR2VuZXJh
dG9yKFZNKiB2bSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gbG9nVGh1
bmtHZW5lcmF0b3IoVk0mIHZtKQogewogICAgIGlmICghVW5hcnlEb3VibGVPcFdyYXBwZXIobG9n
KSkKLSAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz46
OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZih2bS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwodm0p
KTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz46
OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZih2bS5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCh2bSkp
OwogICAgIFNwZWNpYWxpemVkVGh1bmtKSVQgaml0KHZtLCAxKTsKICAgICBpZiAoIWppdC5zdXBw
b3J0c0Zsb2F0aW5nUG9pbnQoKSkKLSAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz46OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZih2bS0+aml0U3R1YnMt
PmN0aU5hdGl2ZUNhbGwodm0pKTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz46OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZih2bS5qaXRTdHVicy0+
Y3RpTmF0aXZlQ2FsbCh2bSkpOwogICAgIGppdC5sb2FkRG91YmxlQXJndW1lbnQoMCwgU3BlY2lh
bGl6ZWRUaHVua0pJVDo6ZnBSZWdUMCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDApOwogICAg
IGppdC5jYWxsRG91YmxlVG9Eb3VibGVQcmVzZXJ2aW5nUmV0dXJuKFVuYXJ5RG91YmxlT3BXcmFw
cGVyKGxvZykpOwogICAgIGppdC5yZXR1cm5Eb3VibGUoU3BlY2lhbGl6ZWRUaHVua0pJVDo6ZnBS
ZWdUMCk7Ci0gICAgcmV0dXJuIGppdC5maW5hbGl6ZSh2bS0+aml0U3R1YnMtPmN0aU5hdGl2ZVRh
aWxDYWxsKHZtKSwgImxvZyIpOworICAgIHJldHVybiBqaXQuZmluYWxpemUodm0uaml0U3R1YnMt
PmN0aU5hdGl2ZVRhaWxDYWxsKHZtKSwgImxvZyIpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IGFic1RodW5rR2VuZXJhdG9yKFZNKiB2bSkKK01hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gYWJzVGh1bmtHZW5lcmF0b3IoVk0mIHZtKQogewog
ICAgIFNwZWNpYWxpemVkVGh1bmtKSVQgaml0KHZtLCAxKTsKICAgICBpZiAoIWppdC5zdXBwb3J0
c0Zsb2F0aW5nUG9pbnRBYnMoKSkKLSAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz46OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZih2bS0+aml0U3R1YnMt
PmN0aU5hdGl2ZUNhbGwodm0pKTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz46OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZih2bS5qaXRTdHVicy0+
Y3RpTmF0aXZlQ2FsbCh2bSkpOwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICB1bnNpZ25lZCB2
aXJ0dWFsUmVnaXN0ZXJJbmRleCA9IENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXQoMCk7CkBAIC0x
MTAxLDEwICsxMTAxLDEwIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
YWIKICAgICBqaXQuYWJzRG91YmxlKFNwZWNpYWxpemVkVGh1bmtKSVQ6OmZwUmVnVDAsIFNwZWNp
YWxpemVkVGh1bmtKSVQ6OmZwUmVnVDEpOwogICAgIGppdC5yZXR1cm5Eb3VibGUoU3BlY2lhbGl6
ZWRUaHVua0pJVDo6ZnBSZWdUMSk7CiAjZW5kaWYKLSAgICByZXR1cm4gaml0LmZpbmFsaXplKHZt
LT5qaXRTdHVicy0+Y3RpTmF0aXZlVGFpbENhbGwodm0pLCAiYWJzIik7CisgICAgcmV0dXJuIGpp
dC5maW5hbGl6ZSh2bS5qaXRTdHVicy0+Y3RpTmF0aXZlVGFpbENhbGwodm0pLCAiYWJzIik7CiB9
CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gaW11bFRodW5rR2VuZXJh
dG9yKFZNKiB2bSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gaW11bFRo
dW5rR2VuZXJhdG9yKFZNJiB2bSkKIHsKICAgICBTcGVjaWFsaXplZFRodW5rSklUIGppdCh2bSwg
Mik7CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm9uSW50QXJnMEp1bXA7CkBAIC0xMTMyLDI2
ICsxMTMyLDI2IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gaW0KICAg
ICB9IGVsc2UKICAgICAgICAgaml0LmFwcGVuZEZhaWx1cmUobm9uSW50QXJnMUp1bXApOwogCi0g
ICAgcmV0dXJuIGppdC5maW5hbGl6ZSh2bS0+aml0U3R1YnMtPmN0aU5hdGl2ZVRhaWxDYWxsKHZt
KSwgImltdWwiKTsKKyAgICByZXR1cm4gaml0LmZpbmFsaXplKHZtLmppdFN0dWJzLT5jdGlOYXRp
dmVUYWlsQ2FsbCh2bSksICJpbXVsIik7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gcmFuZG9tVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQorTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiByYW5kb21UaHVua0dlbmVyYXRvcihWTSYgdm0pCiB7CiAg
ICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQodm0sIDApOwogICAgIGlmICghaml0LnN1cHBvcnRz
RmxvYXRpbmdQb2ludCgpKQotICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKHZtLT5qaXRTdHVicy0+Y3Rp
TmF0aXZlQ2FsbCh2bSkpOworICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKHZtLmppdFN0dWJzLT5jdGlO
YXRpdmVDYWxsKHZtKSk7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGppdC5lbWl0UmFuZG9t
VGh1bmsoKnZtLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCwgU3BlY2lhbGl6ZWRUaHVua0pJ
VDo6cmVnVDEsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QyLCBTcGVjaWFsaXplZFRodW5rSklU
OjpyZWdUMywgU3BlY2lhbGl6ZWRUaHVua0pJVDo6ZnBSZWdUMCk7CisgICAgaml0LmVtaXRSYW5k
b21UaHVuayh2bSwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDAsIFNwZWNpYWxpemVkVGh1bmtK
SVQ6OnJlZ1QxLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMiwgU3BlY2lhbGl6ZWRUaHVua0pJ
VDo6cmVnVDMsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OmZwUmVnVDApOwogICAgIGppdC5yZXR1cm5E
b3VibGUoU3BlY2lhbGl6ZWRUaHVua0pJVDo6ZnBSZWdUMCk7CiAKLSAgICByZXR1cm4gaml0LmZp
bmFsaXplKHZtLT5qaXRTdHVicy0+Y3RpTmF0aXZlVGFpbENhbGwodm0pLCAicmFuZG9tIik7Cisg
ICAgcmV0dXJuIGppdC5maW5hbGl6ZSh2bS5qaXRTdHVicy0+Y3RpTmF0aXZlVGFpbENhbGwodm0p
LCAicmFuZG9tIik7CiAjZWxzZQotICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+OjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYodm0tPmppdFN0dWJzLT5jdGlO
YXRpdmVDYWxsKHZtKSk7CisgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz46OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZih2bS5qaXRTdHVicy0+Y3RpTmF0aXZl
Q2FsbCh2bSkpOwogI2VuZGlmCiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gYm91bmRUaGlzTm9BcmdzRnVuY3Rpb25DYWxsR2VuZXJhdG9yKFZNKiB2bSkKK01hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gYm91bmRUaGlzTm9BcmdzRnVuY3Rpb25D
YWxsR2VuZXJhdG9yKFZNJiB2bSkKIHsKICAgICBDQ2FsbEhlbHBlcnMgaml0OwogICAgIApAQCAt
MTE5NCwxNSArMTE5NCwxNSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
IGJvCiAgICAgCiAgICAgaml0Lm5lZ1B0cihHUFJJbmZvOjpyZWdUMik7CiAgICAgaml0LmFkZFB0
cihDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBHUFJJbmZvOjpyZWdUMik7Ci0g
ICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGhhdmVTdGFja1NwYWNlID0gaml0LmJyYW5jaFB0cihDQ2Fs
bEhlbHBlcnM6OkJlbG93T3JFcXVhbCwgQ0NhbGxIZWxwZXJzOjpBYnNvbHV0ZUFkZHJlc3Modm0t
PmFkZHJlc3NPZlNvZnRTdGFja0xpbWl0KCkpLCBHUFJJbmZvOjpyZWdUMik7CisgICAgQ0NhbGxI
ZWxwZXJzOjpKdW1wIGhhdmVTdGFja1NwYWNlID0gaml0LmJyYW5jaFB0cihDQ2FsbEhlbHBlcnM6
OkJlbG93T3JFcXVhbCwgQ0NhbGxIZWxwZXJzOjpBYnNvbHV0ZUFkZHJlc3Modm0uYWRkcmVzc09m
U29mdFN0YWNrTGltaXQoKSksIEdQUkluZm86OnJlZ1QyKTsKIAogICAgIC8vIFRocm93IFN0YWNr
IE92ZXJmbG93IGV4Y2VwdGlvbgotICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVD
YWxsZWVTYXZlc0J1ZmZlcih2bS0+dG9wRW50cnlGcmFtZSk7Ci0gICAgaml0LnNldHVwQXJndW1l
bnRzPGRlY2x0eXBlKHRocm93U3RhY2tPdmVyZmxvd0Vycm9yRnJvbVRodW5rKT4oQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tUHRyKHZtKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOworICAg
IGppdC5jb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bS50b3BF
bnRyeUZyYW1lKTsKKyAgICBqaXQuc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUodGhyb3dTdGFja092
ZXJmbG93RXJyb3JGcm9tVGh1bmspPihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoJnZtKSwg
R1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOwogICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbVB0cih0YWdDRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPih0aHJvd1N0YWNr
T3ZlcmZsb3dFcnJvckZyb21UaHVuaykpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKICAgICBlbWl0
UG9pbnRlclZhbGlkYXRpb24oaml0LCBHUFJJbmZvOjpub25BcmdHUFIwLCBPcGVyYXRpb25QdHJU
YWcpOwogICAgIGppdC5jYWxsKEdQUkluZm86Om5vbkFyZ0dQUjAsIE9wZXJhdGlvblB0clRhZyk7
Ci0gICAgaml0Lmp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIoKnZtKTsKKyAgICBqaXQuanVtcFRvRXhj
ZXB0aW9uSGFuZGxlcih2bSk7CiAKICAgICBoYXZlU3RhY2tTcGFjZS5saW5rKCZqaXQpOwogICAg
IGppdC5tb3ZlKEdQUkluZm86OnJlZ1QyLCBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lz
dGVyKTsKQEAgLTEyNTAsNyArMTI1MCw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gYm8KICAgICBqaXQucmV0KCk7CiAgICAgCiAgICAgTGlua0J1ZmZlciBsaW5rQnVm
ZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lEKTsKLSAgICBsaW5rQnVmZmVyLmxpbmsobm9Db2RlLCBD
b2RlTG9jYXRpb25MYWJlbDxKSVRUaHVua1B0clRhZz4odm0tPmppdFN0dWJzLT5jdGlOYXRpdmVU
YWlsQ2FsbFdpdGhvdXRTYXZlZFRhZ3Modm0pKSk7CisgICAgbGlua0J1ZmZlci5saW5rKG5vQ29k
ZSwgQ29kZUxvY2F0aW9uTGFiZWw8SklUVGh1bmtQdHJUYWc+KHZtLmppdFN0dWJzLT5jdGlOYXRp
dmVUYWlsQ2FsbFdpdGhvdXRTYXZlZFRhZ3Modm0pKSk7CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NP
REUoCiAgICAgICAgIGxpbmtCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCAiU3BlY2lhbGl6ZWQgdGh1
bmsgZm9yIGJvdW5kIGZ1bmN0aW9uIGNhbGxzIHdpdGggbm8gYXJndW1lbnRzIik7CiB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmgJKHJldmlzaW9u
IDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEw
LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEwLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0zNSwzOSArMzUsMzkgQEAgY2xhc3MgQ2FsbExpbmtJbmZvOwog
dGVtcGxhdGU8UHRyVGFnPiBjbGFzcyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY7CiBjbGFzcyBWTTsK
IAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiB0aHJvd0V4Y2VwdGlvbkZy
b21DYWxsU2xvd1BhdGhHZW5lcmF0b3IoVk0qKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gdGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKFZNJik7
CiAKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gbGlua0NhbGxUaHVuayhW
TSosIENhbGxMaW5rSW5mbyYsIENvZGVTcGVjaWFsaXphdGlvbktpbmQpOwotTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKFZNKik7Ci1N
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGxpbmtQb2x5bW9ycGhpY0NhbGxU
aHVua0dlbmVyYXRvcihWTSopOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiBsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKFZNJik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IGxpbmtQb2x5bW9ycGhpY0NhbGxUaHVua0dlbmVyYXRvcihWTSYpOwogCi1N
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHZpcnR1YWxUaHVua0Zv
cihWTSosIENhbGxMaW5rSW5mbyYpOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0
aW5lUHRyVGFnPiB2aXJ0dWFsVGh1bmtGb3IoVk0mLCBDYWxsTGlua0luZm8mKTsKIAotTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBuYXRpdmVDYWxsR2VuZXJhdG9yKFZNKik7
Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG5hdGl2ZUNvbnN0cnVjdEdl
bmVyYXRvcihWTSopOwotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBuYXRp
dmVUYWlsQ2FsbEdlbmVyYXRvcihWTSopOwotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiBuYXRpdmVUYWlsQ2FsbFdpdGhvdXRTYXZlZFRhZ3NHZW5lcmF0b3IoVk0qKTsKLU1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gaW50ZXJuYWxGdW5jdGlvbkNhbGxH
ZW5lcmF0b3IoVk0qKTsKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gaW50
ZXJuYWxGdW5jdGlvbkNvbnN0cnVjdEdlbmVyYXRvcihWTSopOwotTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBhcml0eUZpeHVwR2VuZXJhdG9yKFZNKik7Ci1NYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHVucmVhY2hhYmxlR2VuZXJhdG9yKFZNKik7Ci1N
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHN0cmluZ0dldEJ5VmFsR2VuZXJh
dG9yKFZNKik7Ci0KLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gY2hhckNv
ZGVBdFRodW5rR2VuZXJhdG9yKFZNKik7Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IGNoYXJBdFRodW5rR2VuZXJhdG9yKFZNKik7Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IGNsejMyVGh1bmtHZW5lcmF0b3IoVk0qKTsKLU1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz4gZnJvbUNoYXJDb2RlVGh1bmtHZW5lcmF0b3IoVk0qKTsK
LU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gYWJzVGh1bmtHZW5lcmF0b3Io
Vk0qKTsKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gY2VpbFRodW5rR2Vu
ZXJhdG9yKFZNKik7Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGV4cFRo
dW5rR2VuZXJhdG9yKFZNKik7Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
IGZsb29yVGh1bmtHZW5lcmF0b3IoVk0qKTsKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gbG9nVGh1bmtHZW5lcmF0b3IoVk0qKTsKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gcm91bmRUaHVua0dlbmVyYXRvcihWTSopOwotTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiBzcXJ0VGh1bmtHZW5lcmF0b3IoVk0qKTsKLU1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gaW11bFRodW5rR2VuZXJhdG9yKFZNKik7Ci1N
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHJhbmRvbVRodW5rR2VuZXJhdG9y
KFZNKik7Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHRydW5jVGh1bmtH
ZW5lcmF0b3IoVk0qKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gbmF0
aXZlQ2FsbEdlbmVyYXRvcihWTSYpOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBuYXRpdmVDb25zdHJ1Y3RHZW5lcmF0b3IoVk0mKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz4gbmF0aXZlVGFpbENhbGxHZW5lcmF0b3IoVk0mKTsKK01hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gbmF0aXZlVGFpbENhbGxXaXRob3V0U2F2ZWRU
YWdzR2VuZXJhdG9yKFZNJik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
IGludGVybmFsRnVuY3Rpb25DYWxsR2VuZXJhdG9yKFZNJik7CitNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IGludGVybmFsRnVuY3Rpb25Db25zdHJ1Y3RHZW5lcmF0b3IoVk0m
KTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gYXJpdHlGaXh1cEdlbmVy
YXRvcihWTSYpOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiB1bnJlYWNo
YWJsZUdlbmVyYXRvcihWTSYpOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiBzdHJpbmdHZXRCeVZhbEdlbmVyYXRvcihWTSYpOworCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IGNoYXJDb2RlQXRUaHVua0dlbmVyYXRvcihWTSYpOworTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBjaGFyQXRUaHVua0dlbmVyYXRvcihWTSYpOwor
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBjbHozMlRodW5rR2VuZXJhdG9y
KFZNJik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGZyb21DaGFyQ29k
ZVRodW5rR2VuZXJhdG9yKFZNJik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IGFic1RodW5rR2VuZXJhdG9yKFZNJik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IGNlaWxUaHVua0dlbmVyYXRvcihWTSYpOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPiBleHBUaHVua0dlbmVyYXRvcihWTSYpOworTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiBmbG9vclRodW5rR2VuZXJhdG9yKFZNJik7CitNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGxvZ1RodW5rR2VuZXJhdG9yKFZNJik7CitN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHJvdW5kVGh1bmtHZW5lcmF0b3Io
Vk0mKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gc3FydFRodW5rR2Vu
ZXJhdG9yKFZNJik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGltdWxU
aHVua0dlbmVyYXRvcihWTSYpOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiByYW5kb21UaHVua0dlbmVyYXRvcihWTSYpOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiB0cnVuY1RodW5rR2VuZXJhdG9yKFZNJik7CiAKLU1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gYm91bmRUaGlzTm9BcmdzRnVuY3Rpb25DYWxsR2VuZXJhdG9y
KFZNKik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGJvdW5kVGhpc05v
QXJnc0Z1bmN0aW9uQ2FsbEdlbmVyYXRvcihWTSYpOwogfQogI2VuZGlmIC8vIEVOQUJMRShKSVQp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5j
cHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTElu
dFNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc3LDcgKzc3LDcgQEAgbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBMTEludCB7CiAKICNkZWZpbmUgTExJTlRfQkVHSU5fTk9fU0VUX1BD
KCkgXAogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7ICAgICAgXAotICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsgXAorICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIodm0sIGV4ZWMpOyBcCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSkKIAogI2lmbmRlZiBOREVCVUcKQEAgLTUyOSw3ICs1MjksNyBAQCBMTElOVF9TTE9X
X1BBVEhfREVDTChzdGFja19jaGVjaykKICAgICAvLyBJdCdzIG9rIHRvIGNyZWF0ZSB0aGUgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyIGhlcmUgYmVmb3JlIHdlCiAgICAgLy8gY29udmVydFRvU3RhY2tP
dmVyZmxvd0ZyYW1lKCkgYmVjYXVzZSB0aGlzIGZ1bmN0aW9uIGlzIGFsd2F5cyBjYWxsZWQKICAg
ICAvLyBhZnRlciB0aGUgZnJhbWUgaGFzIGJlZW4gcHJvcHVsYXRlZCB3aXRoIGEgcHJvcGVyIENv
ZGVCbG9jayBhbmQgY2FsbGVlLgotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZt
LCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKIAog
ICAgIExMSU5UX1NFVF9QQ19GT1JfU1RVQlMoKTsKIApAQCAtMTQ0MSw3ICsxNDQxLDcgQEAgc3Rh
dGljIFNsb3dQYXRoUmV0dXJuVHlwZSBoYW5kbGVIb3N0Q2FsbAogICAgICAgICBBU1NFUlQoY2Fs
bFR5cGUgIT0gQ2FsbFR5cGU6OkpTKTsKICAgICAKICAgICAgICAgaWYgKGNhbGxUeXBlID09IENh
bGxUeXBlOjpIb3N0KSB7Ci0gICAgICAgICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KCZ2bSwgZXhlY0NhbGxlZSk7CisgICAgICAgICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKHZtLCBleGVjQ2FsbGVlKTsKICAgICAgICAgICAgIGV4ZWNDYWxsZWUtPnNldENhbGxlZShh
c09iamVjdChjYWxsZWUpKTsKICAgICAgICAgICAgIHZtLmhvc3RDYWxsUmV0dXJuVmFsdWUgPSBK
U1ZhbHVlOjpkZWNvZGUoY2FsbERhdGEubmF0aXZlLmZ1bmN0aW9uKGV4ZWNDYWxsZWUpKTsKICAg
ICAgICAgICAgIExMSU5UX0NBTExfUkVUVVJOKGV4ZWNDYWxsZWUsIGV4ZWNDYWxsZWUsIExMSW50
OjpnZXRDb2RlUHRyKGdldEhvc3RDYWxsUmV0dXJuVmFsdWUpLCBDRnVuY3Rpb25QdHJUYWcpOwpA
QCAtMTQ2MSw3ICsxNDYxLDcgQEAgc3RhdGljIFNsb3dQYXRoUmV0dXJuVHlwZSBoYW5kbGVIb3N0
Q2FsbAogICAgIEFTU0VSVChjb25zdHJ1Y3RUeXBlICE9IENvbnN0cnVjdFR5cGU6OkpTKTsKICAg
ICAKICAgICBpZiAoY29uc3RydWN0VHlwZSA9PSBDb25zdHJ1Y3RUeXBlOjpIb3N0KSB7Ci0gICAg
ICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjQ2FsbGVlKTsKKyAgICAg
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlY0NhbGxlZSk7CiAgICAgICAg
IGV4ZWNDYWxsZWUtPnNldENhbGxlZShhc09iamVjdChjYWxsZWUpKTsKICAgICAgICAgdm0uaG9z
dENhbGxSZXR1cm5WYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShjb25zdHJ1Y3REYXRhLm5hdGl2ZS5m
dW5jdGlvbihleGVjQ2FsbGVlKSk7CiAgICAgICAgIExMSU5UX0NBTExfUkVUVVJOKGV4ZWNDYWxs
ZWUsIGV4ZWNDYWxsZWUsIExMSW50OjpnZXRDb2RlUHRyKGdldEhvc3RDYWxsUmV0dXJuVmFsdWUp
LCBDRnVuY3Rpb25QdHJUYWcpOwpAQCAtMTc3Nyw3ICsxNzc3LDcgQEAgTExJTlRfU0xPV19QQVRI
X0RFQ0woc2xvd19wYXRoX2hhbmRsZV9leAogewogICAgIExMSU5UX0JFR0lOX05PX1NFVF9QQygp
OwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBnZW5lcmljVW53aW5kKCZ2bSwg
ZXhlYyk7CisgICAgZ2VuZXJpY1Vud2luZCh2bSwgZXhlYyk7CiAgICAgTExJTlRfRU5EX0lNUEwo
KTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9BU1RCdWlsZGVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9BU1RCdWlsZGVyLmgJ
KHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvQVNUQnVp
bGRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMCwgMjAxMywgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTAtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTc4LDcgKzc4LDcgQEAgY2xhc3MgQVNU
QnVpbGRlciB7CiAgICAgICAgIE9wZXJhdG9yIG1fb3A7CiAgICAgfTsKIHB1YmxpYzoKLSAgICBB
U1RCdWlsZGVyKFZNKiB2bSwgUGFyc2VyQXJlbmEmIHBhcnNlckFyZW5hLCBTb3VyY2VDb2RlKiBz
b3VyY2VDb2RlKQorICAgIEFTVEJ1aWxkZXIoVk0mIHZtLCBQYXJzZXJBcmVuYSYgcGFyc2VyQXJl
bmEsIFNvdXJjZUNvZGUqIHNvdXJjZUNvZGUpCiAgICAgICAgIDogbV92bSh2bSkKICAgICAgICAg
LCBtX3BhcnNlckFyZW5hKHBhcnNlckFyZW5hKQogICAgICAgICAsIG1fc291cmNlQ29kZShzb3Vy
Y2VDb2RlKQpAQCAtMTk2LDExICsxOTYsMTEgQEAgcHVibGljOgogICAgIGJvb2wgaXNJbXBvcnRN
ZXRhKEV4cHJlc3Npb25Ob2RlKiBub2RlKSB7IHJldHVybiBub2RlLT5pc0ltcG9ydE1ldGEoKTsg
fQogICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVSZXNvbHZlKGNvbnN0IEpTVG9rZW5Mb2NhdGlv
biYgbG9jYXRpb24sIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBjb25zdCBKU1RleHRQb3NpdGlv
biYgc3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBlbmQpCiAgICAgewotICAgICAgICBpZiAo
bV92bS0+cHJvcGVydHlOYW1lcy0+YXJndW1lbnRzID09IGlkZW50KQorICAgICAgICBpZiAobV92
bS5wcm9wZXJ0eU5hbWVzLT5hcmd1bWVudHMgPT0gaWRlbnQpCiAgICAgICAgICAgICB1c2VzQXJn
dW1lbnRzKCk7CiAKICAgICAgICAgaWYgKGlkZW50LmlzU3ltYm9sKCkpIHsKLSAgICAgICAgICAg
IGlmIChCeXRlY29kZUludHJpbnNpY05vZGU6OkVtaXR0ZXJUeXBlIGVtaXR0ZXIgPSBtX3ZtLT5i
eXRlY29kZUludHJpbnNpY1JlZ2lzdHJ5KCkubG9va3VwKGlkZW50KSkKKyAgICAgICAgICAgIGlm
IChCeXRlY29kZUludHJpbnNpY05vZGU6OkVtaXR0ZXJUeXBlIGVtaXR0ZXIgPSBtX3ZtLmJ5dGVj
b2RlSW50cmluc2ljUmVnaXN0cnkoKS5sb29rdXAoaWRlbnQpKQogICAgICAgICAgICAgICAgIHJl
dHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIEJ5dGVjb2RlSW50cmluc2ljTm9kZShCeXRlY29kZUlu
dHJpbnNpY05vZGU6OlR5cGU6OkNvbnN0YW50LCBsb2NhdGlvbiwgZW1pdHRlciwgaWRlbnQsIG51
bGxwdHIsIHN0YXJ0LCBzdGFydCwgZW5kKTsKICAgICAgICAgfQogCkBAIC00ODIsNyArNDgyLDcg
QEAgcHVibGljOgogICAgICAgICBmdW5jdGlvbkluZm8uYm9keS0+c2V0TG9jKGZ1bmN0aW9uSW5m
by5zdGFydExpbmUsIGZ1bmN0aW9uSW5mby5lbmRMaW5lLCBsb2NhdGlvbi5zdGFydE9mZnNldCwg
bG9jYXRpb24ubGluZVN0YXJ0T2Zmc2V0KTsKICAgICAgICAgZnVuY3Rpb25JbmZvLmJvZHktPnNl
dEVjbWFOYW1lKCpuYW1lKTsKICAgICAgICAgU291cmNlQ29kZSBzb3VyY2UgPSBtX3NvdXJjZUNv
ZGUtPnN1YkV4cHJlc3Npb24oZnVuY3Rpb25JbmZvLnN0YXJ0T2Zmc2V0LCBmdW5jdGlvbkluZm8u
ZW5kT2Zmc2V0LCBmdW5jdGlvbkluZm8uc3RhcnRMaW5lLCBmdW5jdGlvbkluZm8ucGFyYW1ldGVy
c1N0YXJ0Q29sdW1uKTsKLSAgICAgICAgTWV0aG9kRGVmaW5pdGlvbk5vZGUqIG1ldGhvZERlZiA9
IG5ldyAobV9wYXJzZXJBcmVuYSkgTWV0aG9kRGVmaW5pdGlvbk5vZGUobG9jYXRpb24sIG1fdm0t
PnByb3BlcnR5TmFtZXMtPm51bGxJZGVudGlmaWVyLCBmdW5jdGlvbkluZm8uYm9keSwgc291cmNl
KTsKKyAgICAgICAgTWV0aG9kRGVmaW5pdGlvbk5vZGUqIG1ldGhvZERlZiA9IG5ldyAobV9wYXJz
ZXJBcmVuYSkgTWV0aG9kRGVmaW5pdGlvbk5vZGUobG9jYXRpb24sIG1fdm0ucHJvcGVydHlOYW1l
cy0+bnVsbElkZW50aWZpZXIsIGZ1bmN0aW9uSW5mby5ib2R5LCBzb3VyY2UpOwogICAgICAgICBy
ZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBQcm9wZXJ0eU5vZGUoKm5hbWUsIG1ldGhvZERlZiwg
dHlwZSwgUHJvcGVydHlOb2RlOjpVbmtub3duLCBTdXBlckJpbmRpbmc6Ok5lZWRlZCwgdGFnKTsK
ICAgICB9CiAKQEAgLTQ5MiwxNyArNDkyLDE3IEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKG5h
bWUpOwogICAgICAgICBmdW5jdGlvbkluZm8uYm9keS0+c2V0TG9jKGZ1bmN0aW9uSW5mby5zdGFy
dExpbmUsIGZ1bmN0aW9uSW5mby5lbmRMaW5lLCBsb2NhdGlvbi5zdGFydE9mZnNldCwgbG9jYXRp
b24ubGluZVN0YXJ0T2Zmc2V0KTsKICAgICAgICAgU291cmNlQ29kZSBzb3VyY2UgPSBtX3NvdXJj
ZUNvZGUtPnN1YkV4cHJlc3Npb24oZnVuY3Rpb25JbmZvLnN0YXJ0T2Zmc2V0LCBmdW5jdGlvbklu
Zm8uZW5kT2Zmc2V0LCBmdW5jdGlvbkluZm8uc3RhcnRMaW5lLCBmdW5jdGlvbkluZm8ucGFyYW1l
dGVyc1N0YXJ0Q29sdW1uKTsKLSAgICAgICAgTWV0aG9kRGVmaW5pdGlvbk5vZGUqIG1ldGhvZERl
ZiA9IG5ldyAobV9wYXJzZXJBcmVuYSkgTWV0aG9kRGVmaW5pdGlvbk5vZGUobG9jYXRpb24sIG1f
dm0tPnByb3BlcnR5TmFtZXMtPm51bGxJZGVudGlmaWVyLCBmdW5jdGlvbkluZm8uYm9keSwgc291
cmNlKTsKKyAgICAgICAgTWV0aG9kRGVmaW5pdGlvbk5vZGUqIG1ldGhvZERlZiA9IG5ldyAobV9w
YXJzZXJBcmVuYSkgTWV0aG9kRGVmaW5pdGlvbk5vZGUobG9jYXRpb24sIG1fdm0ucHJvcGVydHlO
YW1lcy0+bnVsbElkZW50aWZpZXIsIGZ1bmN0aW9uSW5mby5ib2R5LCBzb3VyY2UpOwogICAgICAg
ICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBQcm9wZXJ0eU5vZGUobmFtZSwgbWV0aG9kRGVm
LCB0eXBlLCBQcm9wZXJ0eU5vZGU6OlVua25vd24sIFN1cGVyQmluZGluZzo6TmVlZGVkLCB0YWcp
OwogICAgIH0KIAotICAgIE5FVkVSX0lOTElORSBQcm9wZXJ0eU5vZGUqIGNyZWF0ZUdldHRlck9y
U2V0dGVyUHJvcGVydHkoVk0qIHZtLCBQYXJzZXJBcmVuYSYgcGFyc2VyQXJlbmEsIGNvbnN0IEpT
VG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIFByb3BlcnR5Tm9kZTo6VHlwZSB0eXBlLCBib29sLAor
ICAgIE5FVkVSX0lOTElORSBQcm9wZXJ0eU5vZGUqIGNyZWF0ZUdldHRlck9yU2V0dGVyUHJvcGVy
dHkoVk0mIHZtLCBQYXJzZXJBcmVuYSYgcGFyc2VyQXJlbmEsIGNvbnN0IEpTVG9rZW5Mb2NhdGlv
biYgbG9jYXRpb24sIFByb3BlcnR5Tm9kZTo6VHlwZSB0eXBlLCBib29sLAogICAgICAgICBkb3Vi
bGUgbmFtZSwgY29uc3QgUGFyc2VyRnVuY3Rpb25JbmZvPEFTVEJ1aWxkZXI+JiBmdW5jdGlvbklu
Zm8sIENsYXNzRWxlbWVudFRhZyB0YWcpCiAgICAgewogICAgICAgICBmdW5jdGlvbkluZm8uYm9k
eS0+c2V0TG9jKGZ1bmN0aW9uSW5mby5zdGFydExpbmUsIGZ1bmN0aW9uSW5mby5lbmRMaW5lLCBs
b2NhdGlvbi5zdGFydE9mZnNldCwgbG9jYXRpb24ubGluZVN0YXJ0T2Zmc2V0KTsKICAgICAgICAg
Y29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBwYXJzZXJBcmVuYS5pZGVudGlmaWVyQXJlbmEoKS5t
YWtlTnVtZXJpY0lkZW50aWZpZXIodm0sIG5hbWUpOwogICAgICAgICBTb3VyY2VDb2RlIHNvdXJj
ZSA9IG1fc291cmNlQ29kZS0+c3ViRXhwcmVzc2lvbihmdW5jdGlvbkluZm8uc3RhcnRPZmZzZXQs
IGZ1bmN0aW9uSW5mby5lbmRPZmZzZXQsIGZ1bmN0aW9uSW5mby5zdGFydExpbmUsIGZ1bmN0aW9u
SW5mby5wYXJhbWV0ZXJzU3RhcnRDb2x1bW4pOwotICAgICAgICBNZXRob2REZWZpbml0aW9uTm9k
ZSogbWV0aG9kRGVmID0gbmV3IChtX3BhcnNlckFyZW5hKSBNZXRob2REZWZpbml0aW9uTm9kZShs
b2NhdGlvbiwgdm0tPnByb3BlcnR5TmFtZXMtPm51bGxJZGVudGlmaWVyLCBmdW5jdGlvbkluZm8u
Ym9keSwgc291cmNlKTsKKyAgICAgICAgTWV0aG9kRGVmaW5pdGlvbk5vZGUqIG1ldGhvZERlZiA9
IG5ldyAobV9wYXJzZXJBcmVuYSkgTWV0aG9kRGVmaW5pdGlvbk5vZGUobG9jYXRpb24sIHZtLnBy
b3BlcnR5TmFtZXMtPm51bGxJZGVudGlmaWVyLCBmdW5jdGlvbkluZm8uYm9keSwgc291cmNlKTsK
ICAgICAgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgUHJvcGVydHlOb2RlKGlkZW50LCBt
ZXRob2REZWYsIHR5cGUsIFByb3BlcnR5Tm9kZTo6VW5rbm93biwgU3VwZXJCaW5kaW5nOjpOZWVk
ZWQsIHRhZyk7CiAgICAgfQogCkBAIC01MjEsNyArNTIxLDcgQEAgcHVibGljOgogICAgIHsKICAg
ICAgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgUHJvcGVydHlOb2RlKG5vZGUsIHR5cGUs
IHB1dFR5cGUsIHN1cGVyQmluZGluZywgdGFnKTsKICAgICB9Ci0gICAgUHJvcGVydHlOb2RlKiBj
cmVhdGVQcm9wZXJ0eShWTSogdm0sIFBhcnNlckFyZW5hJiBwYXJzZXJBcmVuYSwgZG91YmxlIHBy
b3BlcnR5TmFtZSwgRXhwcmVzc2lvbk5vZGUqIG5vZGUsIFByb3BlcnR5Tm9kZTo6VHlwZSB0eXBl
LCBQcm9wZXJ0eU5vZGU6OlB1dFR5cGUgcHV0VHlwZSwgYm9vbCwgU3VwZXJCaW5kaW5nIHN1cGVy
QmluZGluZywgQ2xhc3NFbGVtZW50VGFnIHRhZykKKyAgICBQcm9wZXJ0eU5vZGUqIGNyZWF0ZVBy
b3BlcnR5KFZNJiB2bSwgUGFyc2VyQXJlbmEmIHBhcnNlckFyZW5hLCBkb3VibGUgcHJvcGVydHlO
YW1lLCBFeHByZXNzaW9uTm9kZSogbm9kZSwgUHJvcGVydHlOb2RlOjpUeXBlIHR5cGUsIFByb3Bl
cnR5Tm9kZTo6UHV0VHlwZSBwdXRUeXBlLCBib29sLCBTdXBlckJpbmRpbmcgc3VwZXJCaW5kaW5n
LCBDbGFzc0VsZW1lbnRUYWcgdGFnKQogICAgIHsKICAgICAgICAgcmV0dXJuIG5ldyAobV9wYXJz
ZXJBcmVuYSkgUHJvcGVydHlOb2RlKHBhcnNlckFyZW5hLmlkZW50aWZpZXJBcmVuYSgpLm1ha2VO
dW1lcmljSWRlbnRpZmllcih2bSwgcHJvcGVydHlOYW1lKSwgbm9kZSwgdHlwZSwgcHV0VHlwZSwg
c3VwZXJCaW5kaW5nLCB0YWcpOwogICAgIH0KQEAgLTU1OCw3ICs1NTgsNyBAQCBwdWJsaWM6CiAg
ICAgewogICAgICAgICBGdW5jRGVjbE5vZGUqIGRlY2wgPSBuZXcgKG1fcGFyc2VyQXJlbmEpIEZ1
bmNEZWNsTm9kZShsb2NhdGlvbiwgKmZ1bmN0aW9uSW5mby5uYW1lLCBmdW5jdGlvbkluZm8uYm9k
eSwKICAgICAgICAgICAgIG1fc291cmNlQ29kZS0+c3ViRXhwcmVzc2lvbihmdW5jdGlvbkluZm8u
c3RhcnRPZmZzZXQsIGZ1bmN0aW9uSW5mby5lbmRPZmZzZXQsIGZ1bmN0aW9uSW5mby5zdGFydExp
bmUsIGZ1bmN0aW9uSW5mby5wYXJhbWV0ZXJzU3RhcnRDb2x1bW4pKTsKLSAgICAgICAgaWYgKCpm
dW5jdGlvbkluZm8ubmFtZSA9PSBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5hcmd1bWVudHMpCisgICAg
ICAgIGlmICgqZnVuY3Rpb25JbmZvLm5hbWUgPT0gbV92bS5wcm9wZXJ0eU5hbWVzLT5hcmd1bWVu
dHMpCiAgICAgICAgICAgICB1c2VzQXJndW1lbnRzKCk7CiAgICAgICAgIGZ1bmN0aW9uSW5mby5i
b2R5LT5zZXRMb2MoZnVuY3Rpb25JbmZvLnN0YXJ0TGluZSwgZnVuY3Rpb25JbmZvLmVuZExpbmUs
IGxvY2F0aW9uLnN0YXJ0T2Zmc2V0LCBsb2NhdGlvbi5saW5lU3RhcnRPZmZzZXQpOwogICAgICAg
ICByZXR1cm4gZGVjbDsKQEAgLTExMzMsNyArMTEzMyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICBzdGF0aWNfY2FzdDxDbGFzc0V4cHJOb2RlKj4oZGVmYXVsdFZhbHVlKS0+c2V0RWNtYU5hbWUo
aWRlbnQpOwogICAgIH0KIAotICAgIFZNKiBtX3ZtOworICAgIFZNJiBtX3ZtOwogICAgIFBhcnNl
ckFyZW5hJiBtX3BhcnNlckFyZW5hOwogICAgIFNvdXJjZUNvZGUqIG1fc291cmNlQ29kZTsKICAg
ICBTY29wZSBtX3Njb3BlOwpAQCAtMTQwNSw3ICsxNDA1LDcgQEAgRXhwcmVzc2lvbk5vZGUqIEFT
VEJ1aWxkZXI6Om1ha2VGdW5jdGlvbgogICAgIGlmIChmdW5jLT5pc1Jlc29sdmVOb2RlKCkpIHsK
ICAgICAgICAgUmVzb2x2ZU5vZGUqIHJlc29sdmUgPSBzdGF0aWNfY2FzdDxSZXNvbHZlTm9kZSo+
KGZ1bmMpOwogICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyID0gcmVzb2x2ZS0+
aWRlbnRpZmllcigpOwotICAgICAgICBpZiAoaWRlbnRpZmllciA9PSBtX3ZtLT5wcm9wZXJ0eU5h
bWVzLT5ldmFsKSB7CisgICAgICAgIGlmIChpZGVudGlmaWVyID09IG1fdm0ucHJvcGVydHlOYW1l
cy0+ZXZhbCkgewogICAgICAgICAgICAgdXNlc0V2YWwoKTsKICAgICAgICAgICAgIHJldHVybiBu
ZXcgKG1fcGFyc2VyQXJlbmEpIEV2YWxGdW5jdGlvbkNhbGxOb2RlKGxvY2F0aW9uLCBhcmdzLCBk
aXZvdCwgZGl2b3RTdGFydCwgZGl2b3RFbmQpOwogICAgICAgICB9CkBAIC0xNDIwLDkgKzE0MjAs
OSBAQCBFeHByZXNzaW9uTm9kZSogQVNUQnVpbGRlcjo6bWFrZUZ1bmN0aW9uCiAgICAgQVNTRVJU
KGZ1bmMtPmlzRG90QWNjZXNzb3JOb2RlKCkpOwogICAgIERvdEFjY2Vzc29yTm9kZSogZG90ID0g
c3RhdGljX2Nhc3Q8RG90QWNjZXNzb3JOb2RlKj4oZnVuYyk7CiAgICAgRnVuY3Rpb25DYWxsRG90
Tm9kZSogbm9kZSA9IG51bGxwdHI7Ci0gICAgaWYgKCFwcmV2aW91c0Jhc2VXYXNTdXBlciAmJiAo
ZG90LT5pZGVudGlmaWVyKCkgPT0gbV92bS0+cHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCku
Y2FsbFB1YmxpY05hbWUoKSB8fCBkb3QtPmlkZW50aWZpZXIoKSA9PSBtX3ZtLT5wcm9wZXJ0eU5h
bWVzLT5idWlsdGluTmFtZXMoKS5jYWxsUHJpdmF0ZU5hbWUoKSkpCisgICAgaWYgKCFwcmV2aW91
c0Jhc2VXYXNTdXBlciAmJiAoZG90LT5pZGVudGlmaWVyKCkgPT0gbV92bS5wcm9wZXJ0eU5hbWVz
LT5idWlsdGluTmFtZXMoKS5jYWxsUHVibGljTmFtZSgpIHx8IGRvdC0+aWRlbnRpZmllcigpID09
IG1fdm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkuY2FsbFByaXZhdGVOYW1lKCkpKQog
ICAgICAgICBub2RlID0gbmV3IChtX3BhcnNlckFyZW5hKSBDYWxsRnVuY3Rpb25DYWxsRG90Tm9k
ZShsb2NhdGlvbiwgZG90LT5iYXNlKCksIGRvdC0+aWRlbnRpZmllcigpLCBhcmdzLCBkaXZvdCwg
ZGl2b3RTdGFydCwgZGl2b3RFbmQsIGNhbGxPckFwcGx5Q2hpbGREZXB0aCk7Ci0gICAgZWxzZSBp
ZiAoIXByZXZpb3VzQmFzZVdhc1N1cGVyICYmIChkb3QtPmlkZW50aWZpZXIoKSA9PSBtX3ZtLT5w
cm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5hcHBseVB1YmxpY05hbWUoKSB8fCBkb3QtPmlk
ZW50aWZpZXIoKSA9PSBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5hcHBseVBy
aXZhdGVOYW1lKCkpKSB7CisgICAgZWxzZSBpZiAoIXByZXZpb3VzQmFzZVdhc1N1cGVyICYmIChk
b3QtPmlkZW50aWZpZXIoKSA9PSBtX3ZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLmFw
cGx5UHVibGljTmFtZSgpIHx8IGRvdC0+aWRlbnRpZmllcigpID09IG1fdm0ucHJvcGVydHlOYW1l
cy0+YnVpbHRpbk5hbWVzKCkuYXBwbHlQcml2YXRlTmFtZSgpKSkgewogICAgICAgICAvLyBGSVhN
RTogVGhpcyBjaGVjayBpcyBvbmx5IG5lZWRlZCBiZWNhdXNlIHdlIGhhdmVuJ3QgdGF1Z2h0IHRo
ZSBieXRlY29kZSBnZW5lcmF0b3IgdG8gaW5saW5lCiAgICAgICAgIC8vIFJlZmxlY3QuYXBwbHkg
eWV0LiBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5MDY2OC4K
ICAgICAgICAgaWYgKCFkb3QtPmJhc2UoKS0+aXNSZXNvbHZlTm9kZSgpIHx8IHN0YXRpY19jYXN0
PFJlc29sdmVOb2RlKj4oZG90LT5iYXNlKCkpLT5pZGVudGlmaWVyKCkgIT0gIlJlZmxlY3QiKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9MZXhlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9MZXhlci5jcHAJKHJldmlzaW9uIDI0OTEy
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTGV4ZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJy
aSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQotICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE3IEFw
cGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAx
OSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3
IENhbWVyb24gWndhcmljaCAoY3d6d2FyaWNoQHV3YXRlcmxvby5jYSkKICAqICBDb3B5cmlnaHQg
KEMpIDIwMTAgWm9sdGFuIEhlcmN6ZWcgKHpoZXJjemVnQGluZi51LXN6ZWdlZC5odSkKICAqICBD
b3B5cmlnaHQgKEMpIDIwMTIgTWF0aGlhcyBCeW5lbnMgKG1hdGhpYXNAcWl3aS5iZSkKQEAgLTQ5
Myw3ICs0OTMsNyBAQCBzdGF0aWMgY29uc3RleHByIGNvbnN0IExDaGFyIHNpbmdsZUNoYXJhCiB9
OwogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLUxleGVyPFQ+OjpMZXhlcihWTSogdm0sIEpTUGFy
c2VyQnVpbHRpbk1vZGUgYnVpbHRpbk1vZGUsIEpTUGFyc2VyU2NyaXB0TW9kZSBzY3JpcHRNb2Rl
KQorTGV4ZXI8VD46OkxleGVyKFZNJiB2bSwgSlNQYXJzZXJCdWlsdGluTW9kZSBidWlsdGluTW9k
ZSwgSlNQYXJzZXJTY3JpcHRNb2RlIHNjcmlwdE1vZGUpCiAgICAgOiBtX2lzUmVwYXJzaW5nRnVu
Y3Rpb24oZmFsc2UpCiAgICAgLCBtX3ZtKHZtKQogICAgICwgbV9wYXJzaW5nQnVpbHRpbkZ1bmN0
aW9uKGJ1aWx0aW5Nb2RlID09IEpTUGFyc2VyQnVpbHRpbk1vZGU6OkJ1aWx0aW4pCkBAIC05NjAs
MTQgKzk2MCwxNCBAQCB0ZW1wbGF0ZSA8Ym9vbCBzaG91bGRDcmVhdGVJZGVudGlmaWVyPiBBCiAg
ICAgICAgIGludCBpZGVudGlmaWVyTGVuZ3RoID0gY3VycmVudFNvdXJjZVB0cigpIC0gaWRlbnRp
ZmllclN0YXJ0OwogICAgICAgICBpZGVudCA9IG1ha2VJZGVudGlmaWVyKGlkZW50aWZpZXJTdGFy
dCwgaWRlbnRpZmllckxlbmd0aCk7CiAgICAgICAgIGlmIChtX3BhcnNpbmdCdWlsdGluRnVuY3Rp
b24pIHsKLSAgICAgICAgICAgIGlmICghaXNTYWZlQnVpbHRpbklkZW50aWZpZXIoKm1fdm0sIGlk
ZW50KSAmJiAhaXNQcml2YXRlTmFtZSkgeworICAgICAgICAgICAgaWYgKCFpc1NhZmVCdWlsdGlu
SWRlbnRpZmllcihtX3ZtLCBpZGVudCkgJiYgIWlzUHJpdmF0ZU5hbWUpIHsKICAgICAgICAgICAg
ICAgICBtX2xleEVycm9yTWVzc2FnZSA9IG1ha2VTdHJpbmcoIlRoZSB1c2Ugb2YgJyIsIGlkZW50
LT5zdHJpbmcoKSwgIicgaXMgZGlzYWxsb3dlZCBpbiBidWlsdGluIGZ1bmN0aW9ucy4iKTsKICAg
ICAgICAgICAgICAgICByZXR1cm4gRVJST1JUT0s7CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICBpZiAoaXNQcml2YXRlTmFtZSkKLSAgICAgICAgICAgICAgICBpZGVudCA9ICZtX2FyZW5hLT5t
YWtlSWRlbnRpZmllcihtX3ZtLCBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5sb29rVXBQcml2YXRlTmFt
ZSgqaWRlbnQpKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKCppZGVudCA9PSBtX3ZtLT5wcm9wZXJ0
eU5hbWVzLT51bmRlZmluZWRLZXl3b3JkKQotICAgICAgICAgICAgICAgIHRva2VuRGF0YS0+aWRl
bnQgPSAmbV92bS0+cHJvcGVydHlOYW1lcy0+dW5kZWZpbmVkUHJpdmF0ZU5hbWU7CisgICAgICAg
ICAgICAgICAgaWRlbnQgPSAmbV9hcmVuYS0+bWFrZUlkZW50aWZpZXIobV92bSwgbV92bS5wcm9w
ZXJ0eU5hbWVzLT5sb29rVXBQcml2YXRlTmFtZSgqaWRlbnQpKTsKKyAgICAgICAgICAgIGVsc2Ug
aWYgKCppZGVudCA9PSBtX3ZtLnByb3BlcnR5TmFtZXMtPnVuZGVmaW5lZEtleXdvcmQpCisgICAg
ICAgICAgICAgICAgdG9rZW5EYXRhLT5pZGVudCA9ICZtX3ZtLnByb3BlcnR5TmFtZXMtPnVuZGVm
aW5lZFByaXZhdGVOYW1lOwogICAgICAgICAgICAgaWYgKCFpZGVudCkKICAgICAgICAgICAgICAg
ICByZXR1cm4gSU5WQUxJRF9QUklWQVRFX05BTUVfRVJST1JUT0s7CiAgICAgICAgIH0KQEAgLTEw
MzgsMTQgKzEwMzgsMTQgQEAgdGVtcGxhdGUgPGJvb2wgc2hvdWxkQ3JlYXRlSWRlbnRpZmllcj4g
QQogICAgICAgICBlbHNlCiAgICAgICAgICAgICBpZGVudCA9IG1ha2VJZGVudGlmaWVyKGlkZW50
aWZpZXJTdGFydCwgaWRlbnRpZmllckxlbmd0aCk7CiAgICAgICAgIGlmIChtX3BhcnNpbmdCdWls
dGluRnVuY3Rpb24pIHsKLSAgICAgICAgICAgIGlmICghaXNTYWZlQnVpbHRpbklkZW50aWZpZXIo
Km1fdm0sIGlkZW50KSAmJiAhaXNQcml2YXRlTmFtZSkgeworICAgICAgICAgICAgaWYgKCFpc1Nh
ZmVCdWlsdGluSWRlbnRpZmllcihtX3ZtLCBpZGVudCkgJiYgIWlzUHJpdmF0ZU5hbWUpIHsKICAg
ICAgICAgICAgICAgICBtX2xleEVycm9yTWVzc2FnZSA9IG1ha2VTdHJpbmcoIlRoZSB1c2Ugb2Yg
JyIsIGlkZW50LT5zdHJpbmcoKSwgIicgaXMgZGlzYWxsb3dlZCBpbiBidWlsdGluIGZ1bmN0aW9u
cy4iKTsKICAgICAgICAgICAgICAgICByZXR1cm4gRVJST1JUT0s7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBpZiAoaXNQcml2YXRlTmFtZSkKLSAgICAgICAgICAgICAgICBpZGVudCA9ICZt
X2FyZW5hLT5tYWtlSWRlbnRpZmllcihtX3ZtLCBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5sb29rVXBQ
cml2YXRlTmFtZSgqaWRlbnQpKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKCppZGVudCA9PSBtX3Zt
LT5wcm9wZXJ0eU5hbWVzLT51bmRlZmluZWRLZXl3b3JkKQotICAgICAgICAgICAgICAgIHRva2Vu
RGF0YS0+aWRlbnQgPSAmbV92bS0+cHJvcGVydHlOYW1lcy0+dW5kZWZpbmVkUHJpdmF0ZU5hbWU7
CisgICAgICAgICAgICAgICAgaWRlbnQgPSAmbV9hcmVuYS0+bWFrZUlkZW50aWZpZXIobV92bSwg
bV92bS5wcm9wZXJ0eU5hbWVzLT5sb29rVXBQcml2YXRlTmFtZSgqaWRlbnQpKTsKKyAgICAgICAg
ICAgIGVsc2UgaWYgKCppZGVudCA9PSBtX3ZtLnByb3BlcnR5TmFtZXMtPnVuZGVmaW5lZEtleXdv
cmQpCisgICAgICAgICAgICAgICAgdG9rZW5EYXRhLT5pZGVudCA9ICZtX3ZtLnByb3BlcnR5TmFt
ZXMtPnVuZGVmaW5lZFByaXZhdGVOYW1lOwogICAgICAgICAgICAgaWYgKCFpZGVudCkKICAgICAg
ICAgICAgICAgICByZXR1cm4gSU5WQUxJRF9QUklWQVRFX05BTUVfRVJST1JUT0s7CiAgICAgICAg
IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTGV4ZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0xleGVyLmgJKHJldmlzaW9uIDI0OTEy
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTGV4ZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkg
UG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDMsIDIw
MDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTEsIDIwMTIsIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMi0yMDE5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqICBDb3B5cmlnaHQgKEMpIDIwMTAgWm9s
dGFuIEhlcmN6ZWcgKHpoZXJjemVnQGluZi51LXN6ZWdlZC5odSkKICAqCiAgKiAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAt
NTAsNyArNTAsNyBAQCBjbGFzcyBMZXhlciB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CiAKIHB1YmxpYzoKLSAgICBMZXhlcihWTSosIEpTUGFyc2VyQnVpbHRpbk1vZGUsIEpTUGFyc2Vy
U2NyaXB0TW9kZSk7CisgICAgTGV4ZXIoVk0mLCBKU1BhcnNlckJ1aWx0aW5Nb2RlLCBKU1BhcnNl
clNjcmlwdE1vZGUpOwogICAgIH5MZXhlcigpOwogCiAgICAgLy8gQ2hhcmFjdGVyIG1hbmlwdWxh
dGlvbiBmdW5jdGlvbnMuCkBAIC0yMjcsNyArMjI3LDcgQEAgcHJpdmF0ZToKIAogICAgIElkZW50
aWZpZXJBcmVuYSogbV9hcmVuYTsKIAotICAgIFZNKiBtX3ZtOworICAgIFZNJiBtX3ZtOwogICAg
IGJvb2wgbV9wYXJzaW5nQnVpbHRpbkZ1bmN0aW9uOwogICAgIEpTUGFyc2VyU2NyaXB0TW9kZSBt
X3NjcmlwdE1vZGU7CiB9OwpAQCAtMzkyLDcgKzM5Miw3IEBAIEFMV0FZU19JTkxJTkUgSlNUb2tl
blR5cGUgTGV4ZXI8VD46OmxleEUKICAgICB0b2tlblJlY29yZC0+bV9lbmRQb3NpdGlvbiA9IGN1
cnJlbnRQb3NpdGlvbigpOwogI2lmICFBU1NFUlRfRElTQUJMRUQKICAgICBpZiAobV9wYXJzaW5n
QnVpbHRpbkZ1bmN0aW9uKSB7Ci0gICAgICAgIGlmICghaXNTYWZlQnVpbHRpbklkZW50aWZpZXIo
Km1fdm0sIHRva2VuRGF0YS0+aWRlbnQpKQorICAgICAgICBpZiAoIWlzU2FmZUJ1aWx0aW5JZGVu
dGlmaWVyKG1fdm0sIHRva2VuRGF0YS0+aWRlbnQpKQogICAgICAgICAgICAgcmV0dXJuIEVSUk9S
VE9LOwogICAgIH0KICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9N
b2R1bGVBbmFseXplci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Bh
cnNlci9Nb2R1bGVBbmFseXplci5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9wYXJzZXIvTW9kdWxlQW5hbHl6ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE5IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MzYsOCArMzYsOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogCiBNb2R1bGVBbmFseXplcjo6TW9kdWxl
QW5hbHl6ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBtb2R1bGVLZXksIGNv
bnN0IFNvdXJjZUNvZGUmIHNvdXJjZUNvZGUsIGNvbnN0IFZhcmlhYmxlRW52aXJvbm1lbnQmIGRl
Y2xhcmVkVmFyaWFibGVzLCBjb25zdCBWYXJpYWJsZUVudmlyb25tZW50JiBsZXhpY2FsVmFyaWFi
bGVzKQotICAgIDogbV92bSgmZXhlYy0+dm0oKSkKLSAgICAsIG1fbW9kdWxlUmVjb3JkKCptX3Zt
LCBKU01vZHVsZVJlY29yZDo6Y3JlYXRlKGV4ZWMsICptX3ZtLCBleGVjLT5sZXhpY2FsR2xvYmFs
T2JqZWN0KCktPm1vZHVsZVJlY29yZFN0cnVjdHVyZSgpLCBtb2R1bGVLZXksIHNvdXJjZUNvZGUs
IGRlY2xhcmVkVmFyaWFibGVzLCBsZXhpY2FsVmFyaWFibGVzKSkKKyAgICA6IG1fdm0oZXhlYy0+
dm0oKSkKKyAgICAsIG1fbW9kdWxlUmVjb3JkKG1fdm0sIEpTTW9kdWxlUmVjb3JkOjpjcmVhdGUo
ZXhlYywgbV92bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5tb2R1bGVSZWNvcmRTdHJ1
Y3R1cmUoKSwgbW9kdWxlS2V5LCBzb3VyY2VDb2RlLCBkZWNsYXJlZFZhcmlhYmxlcywgbGV4aWNh
bFZhcmlhYmxlcykpCiB7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIv
TW9kdWxlQW5hbHl6ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFy
c2VyL01vZHVsZUFuYWx5emVyLmgJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9wYXJzZXIvTW9kdWxlQW5hbHl6ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zOSwxNCArMzks
MTQgQEAgcHVibGljOgogCiAgICAgSlNNb2R1bGVSZWNvcmQqIGFuYWx5emUoTW9kdWxlUHJvZ3Jh
bU5vZGUmKTsKIAotICAgIFZNJiB2bSgpIHsgcmV0dXJuICptX3ZtOyB9CisgICAgVk0mIHZtKCkg
eyByZXR1cm4gbV92bTsgfQogCiAgICAgSlNNb2R1bGVSZWNvcmQqIG1vZHVsZVJlY29yZCgpIHsg
cmV0dXJuIG1fbW9kdWxlUmVjb3JkLmdldCgpOyB9CiAKIHByaXZhdGU6CiAgICAgdm9pZCBleHBv
cnRWYXJpYWJsZShNb2R1bGVQcm9ncmFtTm9kZSYsIGNvbnN0IFJlZlB0cjxVbmlxdWVkU3RyaW5n
SW1wbD4mLCBjb25zdCBWYXJpYWJsZUVudmlyb25tZW50RW50cnkmKTsKIAotICAgIFZNKiBtX3Zt
OworICAgIFZNJiBtX3ZtOwogICAgIFN0cm9uZzxKU01vZHVsZVJlY29yZD4gbV9tb2R1bGVSZWNv
cmQ7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwCShy
ZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNiw3ICsxMjYsNyBAQCB2b2lkIFBhcnNlcjxMZXhlclR5
cGU+Ojpsb2dFcnJvcihib29sIHNoCiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBMZXhlclR5cGU+
Ci1QYXJzZXI8TGV4ZXJUeXBlPjo6UGFyc2VyKFZNKiB2bSwgY29uc3QgU291cmNlQ29kZSYgc291
cmNlLCBKU1BhcnNlckJ1aWx0aW5Nb2RlIGJ1aWx0aW5Nb2RlLCBKU1BhcnNlclN0cmljdE1vZGUg
c3RyaWN0TW9kZSwgSlNQYXJzZXJTY3JpcHRNb2RlIHNjcmlwdE1vZGUsIFNvdXJjZVBhcnNlTW9k
ZSBwYXJzZU1vZGUsIFN1cGVyQmluZGluZyBzdXBlckJpbmRpbmcsIENvbnN0cnVjdG9yS2luZCBk
ZWZhdWx0Q29uc3RydWN0b3JLaW5kLCBEZXJpdmVkQ29udGV4dFR5cGUgZGVyaXZlZENvbnRleHRU
eXBlLCBib29sIGlzRXZhbENvbnRleHQsIEV2YWxDb250ZXh0VHlwZSBldmFsQ29udGV4dFR5cGUs
IERlYnVnZ2VyUGFyc2VEYXRhKiBkZWJ1Z2dlclBhcnNlRGF0YSkKK1BhcnNlcjxMZXhlclR5cGU+
OjpQYXJzZXIoVk0mIHZtLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIEpTUGFyc2VyQnVpbHRp
bk1vZGUgYnVpbHRpbk1vZGUsIEpTUGFyc2VyU3RyaWN0TW9kZSBzdHJpY3RNb2RlLCBKU1BhcnNl
clNjcmlwdE1vZGUgc2NyaXB0TW9kZSwgU291cmNlUGFyc2VNb2RlIHBhcnNlTW9kZSwgU3VwZXJC
aW5kaW5nIHN1cGVyQmluZGluZywgQ29uc3RydWN0b3JLaW5kIGRlZmF1bHRDb25zdHJ1Y3Rvcktp
bmQsIERlcml2ZWRDb250ZXh0VHlwZSBkZXJpdmVkQ29udGV4dFR5cGUsIGJvb2wgaXNFdmFsQ29u
dGV4dCwgRXZhbENvbnRleHRUeXBlIGV2YWxDb250ZXh0VHlwZSwgRGVidWdnZXJQYXJzZURhdGEq
IGRlYnVnZ2VyUGFyc2VEYXRhKQogICAgIDogbV92bSh2bSkKICAgICAsIG1fc291cmNlKCZzb3Vy
Y2UpCiAgICAgLCBtX2hhc1N0YWNrT3ZlcmZsb3coZmFsc2UpCkBAIC0xNDYsNyArMTQ2LDcgQEAg
UGFyc2VyPExleGVyVHlwZT46OlBhcnNlcihWTSogdm0sIGNvbnN0IAogICAgIG1fdG9rZW4ubV9s
b2NhdGlvbi5zdGFydE9mZnNldCA9IHNvdXJjZS5zdGFydE9mZnNldCgpOwogICAgIG1fdG9rZW4u
bV9sb2NhdGlvbi5lbmRPZmZzZXQgPSBzb3VyY2Uuc3RhcnRPZmZzZXQoKTsKICAgICBtX3Rva2Vu
Lm1fbG9jYXRpb24ubGluZVN0YXJ0T2Zmc2V0ID0gc291cmNlLnN0YXJ0T2Zmc2V0KCk7Ci0gICAg
bV9mdW5jdGlvbkNhY2hlID0gdm0tPmFkZFNvdXJjZVByb3ZpZGVyQ2FjaGUoc291cmNlLnByb3Zp
ZGVyKCkpOworICAgIG1fZnVuY3Rpb25DYWNoZSA9IHZtLmFkZFNvdXJjZVByb3ZpZGVyQ2FjaGUo
c291cmNlLnByb3ZpZGVyKCkpOwogICAgIG1fZXhwcmVzc2lvbkVycm9yQ2xhc3NpZmllciA9IG51
bGxwdHI7CiAKICAgICBTY29wZVJlZiBzY29wZSA9IHB1c2hTY29wZSgpOwpAQCAtMjEyLDcgKzIx
Miw3IEBAIFN0cmluZyBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VJbm5lcihjb24KIHsKICAgICBT
dHJpbmcgcGFyc2VFcnJvciA9IFN0cmluZygpOwogCi0gICAgQVNUQnVpbGRlciBjb250ZXh0KGNv
bnN0X2Nhc3Q8Vk0qPihtX3ZtKSwgbV9wYXJzZXJBcmVuYSwgY29uc3RfY2FzdDxTb3VyY2VDb2Rl
Kj4obV9zb3VyY2UpKTsKKyAgICBBU1RCdWlsZGVyIGNvbnRleHQoY29uc3RfY2FzdDxWTSY+KG1f
dm0pLCBtX3BhcnNlckFyZW5hLCBjb25zdF9jYXN0PFNvdXJjZUNvZGUqPihtX3NvdXJjZSkpOwog
ICAgIFNjb3BlUmVmIHNjb3BlID0gY3VycmVudFNjb3BlKCk7CiAgICAgc2NvcGUtPnNldElzTGV4
aWNhbFNjb3BlKCk7CiAgICAgU2V0Rm9yU2NvcGU8RnVuY3Rpb25QYXJzZVBoYXNlPiBmdW5jdGlv
blBhcnNlUGhhc2VQb2lzb25lcihtX3BhcnNlclN0YXRlLmZ1bmN0aW9uUGFyc2VQaGFzZSwgRnVu
Y3Rpb25QYXJzZVBoYXNlOjpCb2R5KTsKQEAgLTI3Niw3ICsyNzYsNyBAQCBTdHJpbmcgUGFyc2Vy
PExleGVyVHlwZT46OnBhcnNlSW5uZXIoY29uCiAgICAgICAgIHZhckRlY2xhcmF0aW9ucy5tYXJr
VmFyaWFibGVBc0NhcHR1cmVkKGVudHJ5KTsKIAogICAgIGlmIChpc0dlbmVyYXRvcldyYXBwZXJQ
YXJzZU1vZGUocGFyc2VNb2RlKSB8fCBpc0FzeW5jRnVuY3Rpb25PckFzeW5jR2VuZXJhdG9yV3Jh
cHBlclBhcnNlTW9kZShwYXJzZU1vZGUpKSB7Ci0gICAgICAgIGlmIChzY29wZS0+dXNlZFZhcmlh
Ymxlc0NvbnRhaW5zKG1fdm0tPnByb3BlcnR5TmFtZXMtPmFyZ3VtZW50cy5pbXBsKCkpKQorICAg
ICAgICBpZiAoc2NvcGUtPnVzZWRWYXJpYWJsZXNDb250YWlucyhtX3ZtLnByb3BlcnR5TmFtZXMt
PmFyZ3VtZW50cy5pbXBsKCkpKQogICAgICAgICAgICAgY29udGV4dC5wcm9wYWdhdGVBcmd1bWVu
dHNVc2UoKTsKICAgICB9CiAKQEAgLTI5NCw3ICsyOTQsNyBAQCBTdHJpbmcgUGFyc2VyPExleGVy
VHlwZT46OnBhcnNlSW5uZXIoY29uCiAgICAgICAgIGNvbnN0IEhhc2hTZXQ8VW5pcXVlZFN0cmlu
Z0ltcGwqPiYgY2xvc2VkVmFyaWFibGVDYW5kaWRhdGVzID0gc2NvcGUtPmNsb3NlZFZhcmlhYmxl
Q2FuZGlkYXRlcygpOwogICAgICAgICBmb3IgKFVuaXF1ZWRTdHJpbmdJbXBsKiBjYW5kaWRhdGUg
OiBjbG9zZWRWYXJpYWJsZUNhbmRpZGF0ZXMpIHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBh
bGxvdyBhc3luYyB0byBsZWFrIGJlY2F1c2UgaXQgYXBwZWFyaW5nIGFzIGEgY2xvc2VkIHZhcmlh
YmxlIGlzIGEgc2lkZSBlZmZlY3Qgb2YgdHJ5aW5nIHRvIHBhcnNlIGFzeW5jIGFycm93IGZ1bmN0
aW9ucy4KLSAgICAgICAgICAgIGlmICghbGV4aWNhbFZhcmlhYmxlcy5jb250YWlucyhjYW5kaWRh
dGUpICYmICF2YXJEZWNsYXJhdGlvbnMuY29udGFpbnMoY2FuZGlkYXRlKSAmJiAhY2FuZGlkYXRl
LT5pc1N5bWJvbCgpICYmIGNhbmRpZGF0ZSAhPSBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5hc3luYy5p
bXBsKCkpIHsKKyAgICAgICAgICAgIGlmICghbGV4aWNhbFZhcmlhYmxlcy5jb250YWlucyhjYW5k
aWRhdGUpICYmICF2YXJEZWNsYXJhdGlvbnMuY29udGFpbnMoY2FuZGlkYXRlKSAmJiAhY2FuZGlk
YXRlLT5pc1N5bWJvbCgpICYmIGNhbmRpZGF0ZSAhPSBtX3ZtLnByb3BlcnR5TmFtZXMtPmFzeW5j
LmltcGwoKSkgewogICAgICAgICAgICAgICAgIGRhdGFMb2coIkJhZCBnbG9iYWwgY2FwdHVyZSBp
biBidWlsdGluOiAnIiwgY2FuZGlkYXRlLCAiJ1xuIik7CiAgICAgICAgICAgICAgICAgZGF0YUxv
ZyhtX3NvdXJjZS0+dmlldygpKTsKICAgICAgICAgICAgICAgICBDUkFTSCgpOwpAQCAtMzMwLDcg
KzMzMCw3IEBAIGJvb2wgUGFyc2VyPExleGVyVHlwZT46OmlzQXJyb3dGdW5jdGlvblAKICAgICAg
ICAgICAgIG5leHQoKTsKICAgICAgICAgICAgIGlzQXJyb3dGdW5jdGlvbiA9IG1hdGNoKEFSUk9X
RlVOQ1RJT04pOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgU3ludGF4Q2hlY2tlciBz
eW50YXhDaGVja2VyKGNvbnN0X2Nhc3Q8Vk0qPihtX3ZtKSwgbV9sZXhlci5nZXQoKSk7CisgICAg
ICAgICAgICBTeW50YXhDaGVja2VyIHN5bnRheENoZWNrZXIoY29uc3RfY2FzdDxWTSY+KG1fdm0p
LCBtX2xleGVyLmdldCgpKTsKICAgICAgICAgICAgIC8vIFdlIG1ha2UgZmFrZSBzY29wZSwgb3Ro
ZXJ3aXNlIHBhcnNlRm9ybWFsUGFyYW1ldGVycyB3aWxsIGFkZCB2YXJpYWJsZSB0byBjdXJyZW50
IHNjb3BlIHRoYXQgbGVhZCB0byBlcnJvcnMKICAgICAgICAgICAgIEF1dG9Qb3BTY29wZVJlZiBm
YWtlU2NvcGUodGhpcywgcHVzaFNjb3BlKCkpOwogICAgICAgICAgICAgZmFrZVNjb3BlLT5zZXRT
b3VyY2VQYXJzZU1vZGUoU291cmNlUGFyc2VNb2RlOjpBcnJvd0Z1bmN0aW9uTW9kZSk7CkBAIC0z
NzcsMTkgKzM3NywxOSBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTb3VyY2VF
CiAgICAgICAgIGlmIChzaG91bGRDaGVja0ZvclVzZVN0cmljdCkgewogICAgICAgICAgICAgaWYg
KGRpcmVjdGl2ZSkgewogICAgICAgICAgICAgICAgIC8vICJ1c2Ugc3RyaWN0IiBtdXN0IGJlIHRo
ZSBleGFjdCBsaXRlcmFsIHdpdGhvdXQgZXNjYXBlIHNlcXVlbmNlcyBvciBsaW5lIGNvbnRpbnVh
dGlvbi4KLSAgICAgICAgICAgICAgICBpZiAoZGlyZWN0aXZlTGl0ZXJhbExlbmd0aCA9PSBsZW5n
dGhPZlVzZVN0cmljdExpdGVyYWwgJiYgbV92bS0+cHJvcGVydHlOYW1lcy0+dXNlU3RyaWN0SWRl
bnRpZmllciA9PSAqZGlyZWN0aXZlKSB7CisgICAgICAgICAgICAgICAgaWYgKGRpcmVjdGl2ZUxp
dGVyYWxMZW5ndGggPT0gbGVuZ3RoT2ZVc2VTdHJpY3RMaXRlcmFsICYmIG1fdm0ucHJvcGVydHlO
YW1lcy0+dXNlU3RyaWN0SWRlbnRpZmllciA9PSAqZGlyZWN0aXZlKSB7CiAgICAgICAgICAgICAg
ICAgICAgIHNldFN0cmljdE1vZGUoKTsKICAgICAgICAgICAgICAgICAgICAgc2hvdWxkQ2hlY2tG
b3JVc2VTdHJpY3QgPSBmYWxzZTsgLy8gV2Ugc2F3ICJ1c2Ugc3RyaWN0IiwgdGhlcmUgaXMgbm8g
bmVlZCB0byBrZWVwIGNoZWNraW5nIGZvciBpdC4KICAgICAgICAgICAgICAgICAgICAgaWYgKCFp
c1ZhbGlkU3RyaWN0TW9kZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobV9wYXJz
ZXJTdGF0ZS5sYXN0RnVuY3Rpb25OYW1lKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKG1fdm0tPnByb3BlcnR5TmFtZXMtPmFyZ3VtZW50cyA9PSAqbV9wYXJzZXJTdGF0ZS5sYXN0
RnVuY3Rpb25OYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX3ZtLnByb3Bl
cnR5TmFtZXMtPmFyZ3VtZW50cyA9PSAqbV9wYXJzZXJTdGF0ZS5sYXN0RnVuY3Rpb25OYW1lKQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZW1hbnRpY0ZhaWwoIkNhbm5vdCBuYW1l
IGEgZnVuY3Rpb24gJ2FyZ3VtZW50cycgaW4gc3RyaWN0IG1vZGUiKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAobV92bS0+cHJvcGVydHlOYW1lcy0+ZXZhbCA9PSAqbV9wYXJzZXJT
dGF0ZS5sYXN0RnVuY3Rpb25OYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICht
X3ZtLnByb3BlcnR5TmFtZXMtPmV2YWwgPT0gKm1fcGFyc2VyU3RhdGUubGFzdEZ1bmN0aW9uTmFt
ZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VtYW50aWNGYWlsKCJDYW5ub3Qg
bmFtZSBhIGZ1bmN0aW9uICdldmFsJyBpbiBzdHJpY3QgbW9kZSIpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0RlY2xhcmVkVmFyaWFi
bGUobV92bS0+cHJvcGVydHlOYW1lcy0+YXJndW1lbnRzKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChoYXNEZWNsYXJlZFZhcmlhYmxlKG1fdm0ucHJvcGVydHlOYW1lcy0+YXJndW1lbnRz
KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZW1hbnRpY0ZhaWwoIkNhbm5vdCBkZWNs
YXJlIGEgdmFyaWFibGUgbmFtZWQgJ2FyZ3VtZW50cycgaW4gc3RyaWN0IG1vZGUiKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChoYXNEZWNsYXJlZFZhcmlhYmxlKG1fdm0tPnByb3BlcnR5
TmFtZXMtPmV2YWwpKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0RlY2xhcmVkVmFy
aWFibGUobV92bS5wcm9wZXJ0eU5hbWVzLT5ldmFsKSkKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzZW1hbnRpY0ZhaWwoIkNhbm5vdCBkZWNsYXJlIGEgdmFyaWFibGUgbmFtZWQgJ2V2YWwn
IGluIHN0cmljdCBtb2RlIik7CiAgICAgICAgICAgICAgICAgICAgICAgICBzZW1hbnRpY0ZhaWxJ
ZlRydWUoY3VycmVudFNjb3BlKCktPmhhc05vblNpbXBsZVBhcmFtZXRlckxpc3QoKSwgIid1c2Ug
c3RyaWN0JyBkaXJlY3RpdmUgbm90IGFsbG93ZWQgaW5zaWRlIGEgZnVuY3Rpb24gd2l0aCBhIG5v
bi1zaW1wbGUgcGFyYW1ldGVyIGxpc3QiKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHNlbWFu
dGljRmFpbElmRmFsc2UoaXNWYWxpZFN0cmljdE1vZGUoKSwgIkludmFsaWQgcGFyYW1ldGVycyBv
ciBmdW5jdGlvbiBuYW1lIGluIHN0cmljdCBtb2RlIik7CkBAIC00MjEsNyArNDIxLDcgQEAgdGVt
cGxhdGUgPHR5cGVuYW1lIExleGVyVHlwZT4KIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4g
VHJlZVNvdXJjZUVsZW1lbnRzIFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZU1vZHVsZVNvdXJjZUVs
ZW1lbnRzKFRyZWVCdWlsZGVyJiBjb250ZXh0LCBTb3VyY2VQYXJzZU1vZGUgcGFyc2VNb2RlKQog
ewogICAgIFRyZWVTb3VyY2VFbGVtZW50cyBzb3VyY2VFbGVtZW50cyA9IGNvbnRleHQuY3JlYXRl
U291cmNlRWxlbWVudHMoKTsKLSAgICBTeW50YXhDaGVja2VyIHN5bnRheENoZWNrZXIoY29uc3Rf
Y2FzdDxWTSo+KG1fdm0pLCBtX2xleGVyLmdldCgpKTsKKyAgICBTeW50YXhDaGVja2VyIHN5bnRh
eENoZWNrZXIoY29uc3RfY2FzdDxWTSY+KG1fdm0pLCBtX2xleGVyLmdldCgpKTsKIAogICAgIHdo
aWxlICh0cnVlKSB7CiAgICAgICAgIFRyZWVTdGF0ZW1lbnQgc3RhdGVtZW50ID0gMDsKQEAgLTUw
MCw3ICs1MDAsNyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTb3VyY2VFCiAg
ICAgaW50IHBhcmFtZXRlcnNTdGFydCA9IG1fdG9rZW4ubV9sb2NhdGlvbi5zdGFydE9mZnNldDsK
IAogICAgIFBhcnNlckZ1bmN0aW9uSW5mbzxUcmVlQnVpbGRlcj4gaW5mbzsKLSAgICBpbmZvLm5h
bWUgPSAmbV92bS0+cHJvcGVydHlOYW1lcy0+bnVsbElkZW50aWZpZXI7CisgICAgaW5mby5uYW1l
ID0gJm1fdm0ucHJvcGVydHlOYW1lcy0+bnVsbElkZW50aWZpZXI7CiAgICAgY3JlYXRlR2VuZXJh
dG9yUGFyYW1ldGVycyhjb250ZXh0LCBpbmZvLnBhcmFtZXRlckNvdW50KTsKICAgICBpbmZvLnN0
YXJ0T2Zmc2V0ID0gcGFyYW1ldGVyc1N0YXJ0OwogICAgIGluZm8uc3RhcnRMaW5lID0gdG9rZW5M
aW5lKCk7CkBAIC01MTEsNyArNTExLDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBU
cmVlU291cmNlRQogICAgICAgICBnZW5lcmF0b3JCb2R5U2NvcGUtPnNldENvbnN0cnVjdG9yS2lu
ZChDb25zdHJ1Y3RvcktpbmQ6Ok5vbmUpOwogICAgICAgICBnZW5lcmF0b3JCb2R5U2NvcGUtPnNl
dEV4cGVjdGVkU3VwZXJCaW5kaW5nKG1fc3VwZXJCaW5kaW5nKTsKIAotICAgICAgICBTeW50YXhD
aGVja2VyIGdlbmVyYXRvckZ1bmN0aW9uQ29udGV4dChjb25zdF9jYXN0PFZNKj4obV92bSksIG1f
bGV4ZXIuZ2V0KCkpOworICAgICAgICBTeW50YXhDaGVja2VyIGdlbmVyYXRvckZ1bmN0aW9uQ29u
dGV4dChjb25zdF9jYXN0PFZNJj4obV92bSksIG1fbGV4ZXIuZ2V0KCkpOwogICAgICAgICBmYWls
SWZGYWxzZShwYXJzZVNvdXJjZUVsZW1lbnRzKGdlbmVyYXRvckZ1bmN0aW9uQ29udGV4dCwgbW9k
ZSksICJDYW5ub3QgcGFyc2UgdGhlIGJvZHkgb2YgYSBnZW5lcmF0b3IiKTsKICAgICAgICAgcG9w
U2NvcGUoZ2VuZXJhdG9yQm9keVNjb3BlLCBUcmVlQnVpbGRlcjo6TmVlZHNGcmVlVmFyaWFibGVJ
bmZvKTsKICAgICB9CkBAIC01NDIsNyArNTQyLDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWls
ZGVyPiBUcmVlU291cmNlRQogICAgIGludCBwYXJhbWV0ZXJzU3RhcnQgPSBtX3Rva2VuLm1fbG9j
YXRpb24uc3RhcnRPZmZzZXQ7CiAKICAgICBQYXJzZXJGdW5jdGlvbkluZm88VHJlZUJ1aWxkZXI+
IGluZm87Ci0gICAgaW5mby5uYW1lID0gJm1fdm0tPnByb3BlcnR5TmFtZXMtPm51bGxJZGVudGlm
aWVyOworICAgIGluZm8ubmFtZSA9ICZtX3ZtLnByb3BlcnR5TmFtZXMtPm51bGxJZGVudGlmaWVy
OwogICAgIGNyZWF0ZUdlbmVyYXRvclBhcmFtZXRlcnMoY29udGV4dCwgaW5mby5wYXJhbWV0ZXJD
b3VudCk7CiAgICAgaW5mby5zdGFydE9mZnNldCA9IHBhcmFtZXRlcnNTdGFydDsKICAgICBpbmZv
LnN0YXJ0TGluZSA9IHRva2VuTGluZSgpOwpAQCAtNTUyLDcgKzU1Miw3IEBAIHRlbXBsYXRlIDxj
bGFzcyBUcmVlQnVpbGRlcj4gVHJlZVNvdXJjZUUKICAgICB7CiAgICAgICAgIEF1dG9Qb3BTY29w
ZVJlZiBhc3luY0Z1bmN0aW9uQm9keVNjb3BlKHRoaXMsIHB1c2hTY29wZSgpKTsKICAgICAgICAg
YXN5bmNGdW5jdGlvbkJvZHlTY29wZS0+c2V0U291cmNlUGFyc2VNb2RlKGlubmVyUGFyc2VNb2Rl
KTsKLSAgICAgICAgU3ludGF4Q2hlY2tlciBzeW50YXhDaGVja2VyKGNvbnN0X2Nhc3Q8Vk0qPiht
X3ZtKSwgbV9sZXhlci5nZXQoKSk7CisgICAgICAgIFN5bnRheENoZWNrZXIgc3ludGF4Q2hlY2tl
cihjb25zdF9jYXN0PFZNJj4obV92bSksIG1fbGV4ZXIuZ2V0KCkpOwogICAgICAgICBpZiAoaXNB
cnJvd0Z1bmN0aW9uQm9keUV4cHJlc3Npb24pIHsKICAgICAgICAgICAgIGlmIChtX2RlYnVnZ2Vy
UGFyc2VEYXRhKQogICAgICAgICAgICAgICAgIGZhaWxJZkZhbHNlKHBhcnNlQXJyb3dGdW5jdGlv
blNpbmdsZUV4cHJlc3Npb25Cb2R5U291cmNlRWxlbWVudHMoY29udGV4dCksICJDYW5ub3QgcGFy
c2UgdGhlIGJvZHkgb2YgYXN5bmMgYXJyb3cgZnVuY3Rpb24iKTsKQEAgLTU5Myw3ICs1OTMsNyBA
QCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTb3VyY2VFCiAgICAgaW50IHBhcmFt
ZXRlcnNTdGFydCA9IG1fdG9rZW4ubV9sb2NhdGlvbi5zdGFydE9mZnNldDsKICAgICAKICAgICBQ
YXJzZXJGdW5jdGlvbkluZm88VHJlZUJ1aWxkZXI+IGluZm87Ci0gICAgaW5mby5uYW1lID0gJm1f
dm0tPnByb3BlcnR5TmFtZXMtPm51bGxJZGVudGlmaWVyOworICAgIGluZm8ubmFtZSA9ICZtX3Zt
LnByb3BlcnR5TmFtZXMtPm51bGxJZGVudGlmaWVyOwogICAgIGNyZWF0ZUdlbmVyYXRvclBhcmFt
ZXRlcnMoY29udGV4dCwgaW5mby5wYXJhbWV0ZXJDb3VudCk7CiAgICAgaW5mby5zdGFydE9mZnNl
dCA9IHBhcmFtZXRlcnNTdGFydDsKICAgICBpbmZvLnN0YXJ0TGluZSA9IHRva2VuTGluZSgpOwpA
QCAtNjAxLDcgKzYwMSw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVNvdXJj
ZUUKICAgICB7CiAgICAgICAgIEF1dG9Qb3BTY29wZVJlZiBhc3luY0Z1bmN0aW9uQm9keVNjb3Bl
KHRoaXMsIHB1c2hTY29wZSgpKTsKICAgICAgICAgYXN5bmNGdW5jdGlvbkJvZHlTY29wZS0+c2V0
U291cmNlUGFyc2VNb2RlKGlubmVyUGFyc2VNb2RlKTsKLSAgICAgICAgU3ludGF4Q2hlY2tlciBz
eW50YXhDaGVja2VyKGNvbnN0X2Nhc3Q8Vk0qPihtX3ZtKSwgbV9sZXhlci5nZXQoKSk7CisgICAg
ICAgIFN5bnRheENoZWNrZXIgc3ludGF4Q2hlY2tlcihjb25zdF9jYXN0PFZNJj4obV92bSksIG1f
bGV4ZXIuZ2V0KCkpOwogICAgICAgICBpZiAoaXNBcnJvd0Z1bmN0aW9uQm9keUV4cHJlc3Npb24p
IHsKICAgICAgICAgICAgIGlmIChtX2RlYnVnZ2VyUGFyc2VEYXRhKQogICAgICAgICAgICAgICAg
IGZhaWxJZkZhbHNlKHBhcnNlQXJyb3dGdW5jdGlvblNpbmdsZUV4cHJlc3Npb25Cb2R5U291cmNl
RWxlbWVudHMoY29udGV4dCksICJDYW5ub3QgcGFyc2UgdGhlIGJvZHkgb2YgYXN5bmMgYXJyb3cg
ZnVuY3Rpb24iKTsKQEAgLTYzOCw3ICs2MzgsNyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxk
ZXI+IFRyZWVTb3VyY2VFCiAgICAgICAgIHN0YXRlbWVudCA9IHBhcnNlRnVuY3Rpb25EZWNsYXJh
dGlvbihjb250ZXh0LCBFeHBvcnRUeXBlOjpOb3RFeHBvcnRlZCwgRGVjbGFyYXRpb25EZWZhdWx0
Q29udGV4dDo6U3RhbmRhcmQsIGZ1bmN0aW9uQ29uc3RydWN0b3JQYXJhbWV0ZXJzRW5kUG9zaXRp
b24pOwogICAgICAgICBicmVhazsKICAgICBjYXNlIElERU5UOgotICAgICAgICBpZiAoKm1fdG9r
ZW4ubV9kYXRhLmlkZW50ID09IG1fdm0tPnByb3BlcnR5TmFtZXMtPmFzeW5jICYmICFtX3Rva2Vu
Lm1fZGF0YS5lc2NhcGVkKSB7CisgICAgICAgIGlmICgqbV90b2tlbi5tX2RhdGEuaWRlbnQgPT0g
bV92bS5wcm9wZXJ0eU5hbWVzLT5hc3luYyAmJiAhbV90b2tlbi5tX2RhdGEuZXNjYXBlZCkgewog
ICAgICAgICAgICAgbmV4dCgpOwogICAgICAgICAgICAgZmFpbElmRmFsc2UobWF0Y2goRlVOQ1RJ
T04pICYmICFtX2xleGVyLT5oYXNMaW5lVGVybWluYXRvckJlZm9yZVRva2VuKCksICJDYW5ub3Qg
cGFyc2UgdGhlIGFzeW5jIGZ1bmN0aW9uIik7CiAgICAgICAgICAgICBzdGF0ZW1lbnQgPSBwYXJz
ZUFzeW5jRnVuY3Rpb25EZWNsYXJhdGlvbihjb250ZXh0LCBFeHBvcnRUeXBlOjpOb3RFeHBvcnRl
ZCwgRGVjbGFyYXRpb25EZWZhdWx0Q29udGV4dDo6U3RhbmRhcmQsIGZ1bmN0aW9uQ29uc3RydWN0
b3JQYXJhbWV0ZXJzRW5kUG9zaXRpb24pOwpAQCAtNzA3LDcgKzcwNyw3IEBAIHRlbXBsYXRlIDxj
bGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWUKICAgICAgICAgcmVzdWx0ID0gcGFyc2VGdW5j
dGlvbkRlY2xhcmF0aW9uKGNvbnRleHQpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIElERU5U
OgotICAgICAgICBpZiAoVU5MSUtFTFkoKm1fdG9rZW4ubV9kYXRhLmlkZW50ID09IG1fdm0tPnBy
b3BlcnR5TmFtZXMtPmFzeW5jICYmICFtX3Rva2VuLm1fZGF0YS5lc2NhcGVkKSkgeworICAgICAg
ICBpZiAoVU5MSUtFTFkoKm1fdG9rZW4ubV9kYXRhLmlkZW50ID09IG1fdm0ucHJvcGVydHlOYW1l
cy0+YXN5bmMgJiYgIW1fdG9rZW4ubV9kYXRhLmVzY2FwZWQpKSB7CiAgICAgICAgICAgICAvLyBF
YWdlcmx5IHBhcnNlIGFzIEFzeW5jRnVuY3Rpb25EZWNsYXJhdGlvbi4gVGhpcyBpcyB0aGUgdW5j
b21tb24gY2FzZSwKICAgICAgICAgICAgIC8vIGJ1dCBjb3VsZCBiZSBtaXN0YWtlbmx5IHBhcnNl
ZCBhcyBhbiBBc3luY0Z1bmN0aW9uRXhwcmVzc2lvbi4KICAgICAgICAgICAgIFNhdmVQb2ludCBz
YXZlUG9pbnQgPSBjcmVhdGVTYXZlUG9pbnQoKTsKQEAgLTEwNDAsNyArMTA0MCw3IEBAIHRlbXBs
YXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZURlc3RydWMKICAgICB9CiAKICAgICBpZiAoc3Ry
aWN0TW9kZSgpICYmIG1fcGFyc2VyU3RhdGUubGFzdElkZW50aWZpZXIgJiYgY29udGV4dC5pc1Jl
c29sdmUoZWxlbWVudCkpIHsKLSAgICAgICAgYm9vbCBpc0V2YWxPckFyZ3VtZW50cyA9IG1fdm0t
PnByb3BlcnR5TmFtZXMtPmV2YWwgPT0gKm1fcGFyc2VyU3RhdGUubGFzdElkZW50aWZpZXIgfHwg
bV92bS0+cHJvcGVydHlOYW1lcy0+YXJndW1lbnRzID09ICptX3BhcnNlclN0YXRlLmxhc3RJZGVu
dGlmaWVyOworICAgICAgICBib29sIGlzRXZhbE9yQXJndW1lbnRzID0gbV92bS5wcm9wZXJ0eU5h
bWVzLT5ldmFsID09ICptX3BhcnNlclN0YXRlLmxhc3RJZGVudGlmaWVyIHx8IG1fdm0ucHJvcGVy
dHlOYW1lcy0+YXJndW1lbnRzID09ICptX3BhcnNlclN0YXRlLmxhc3RJZGVudGlmaWVyOwogICAg
ICAgICBpZiAoaXNFdmFsT3JBcmd1bWVudHMgJiYgc3RyaWN0TW9kZSgpKQogICAgICAgICAgICAg
cmVjbGFzc2lmeUV4cHJlc3Npb25FcnJvcihFcnJvckluZGljYXRlc1BhdHRlcm4sIEVycm9ySW5k
aWNhdGVzTm90aGluZyk7CiAgICAgICAgIGZhaWxJZlRydWVJZlN0cmljdChpc0V2YWxPckFyZ3Vt
ZW50cywgIkNhbm5vdCBtb2RpZnkgJyIsIG1fcGFyc2VyU3RhdGUubGFzdElkZW50aWZpZXItPmlt
cGwoKSwgIicgaW4gc3RyaWN0IG1vZGUiKTsKQEAgLTEwNjgsNyArMTA2OCw3IEBAIHRlbXBsYXRl
IDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZURlc3RydWMKICAgICBzZW1hbnRpY0ZhaWxJZkZhbHNl
KGVsZW1lbnQgJiYgY29udGV4dC5pc0Fzc2lnbm1lbnRMb2NhdGlvbihlbGVtZW50KSwgIkludmFs
aWQgZGVzdHJ1Y3R1cmluZyBhc3NpZ25tZW50IHRhcmdldCIpOwogCiAgICAgaWYgKHN0cmljdE1v
ZGUoKSAmJiBtX3BhcnNlclN0YXRlLmxhc3RJZGVudGlmaWVyICYmIGNvbnRleHQuaXNSZXNvbHZl
KGVsZW1lbnQpKSB7Ci0gICAgICAgIGJvb2wgaXNFdmFsT3JBcmd1bWVudHMgPSBtX3ZtLT5wcm9w
ZXJ0eU5hbWVzLT5ldmFsID09ICptX3BhcnNlclN0YXRlLmxhc3RJZGVudGlmaWVyIHx8IG1fdm0t
PnByb3BlcnR5TmFtZXMtPmFyZ3VtZW50cyA9PSAqbV9wYXJzZXJTdGF0ZS5sYXN0SWRlbnRpZmll
cjsKKyAgICAgICAgYm9vbCBpc0V2YWxPckFyZ3VtZW50cyA9IG1fdm0ucHJvcGVydHlOYW1lcy0+
ZXZhbCA9PSAqbV9wYXJzZXJTdGF0ZS5sYXN0SWRlbnRpZmllciB8fCBtX3ZtLnByb3BlcnR5TmFt
ZXMtPmFyZ3VtZW50cyA9PSAqbV9wYXJzZXJTdGF0ZS5sYXN0SWRlbnRpZmllcjsKICAgICAgICAg
ZmFpbElmVHJ1ZUlmU3RyaWN0KGlzRXZhbE9yQXJndW1lbnRzLCAiQ2Fubm90IG1vZGlmeSAnIiwg
bV9wYXJzZXJTdGF0ZS5sYXN0SWRlbnRpZmllci0+aW1wbCgpLCAiJyBpbiBzdHJpY3QgbW9kZSIp
OwogICAgIH0KIApAQCAtMTE5Niw3ICsxMTk2LDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWls
ZGVyPiBUcmVlRGVzdHJ1YwogICAgICAgICAgICAgICAgIHByb3BhZ2F0ZUVycm9yKCk7CiAgICAg
ICAgICAgICAgICAgaWYgKCFpbm5lclBhdHRlcm4pCiAgICAgICAgICAgICAgICAgICAgIHJldHVy
biAwOwotICAgICAgICAgICAgICAgIGNvbnRleHQuYXBwZW5kT2JqZWN0UGF0dGVyblJlc3RFbnRy
eSgqbV92bSwgb2JqZWN0UGF0dGVybiwgbG9jYXRpb24sIGlubmVyUGF0dGVybik7CisgICAgICAg
ICAgICAgICAgY29udGV4dC5hcHBlbmRPYmplY3RQYXR0ZXJuUmVzdEVudHJ5KG1fdm0sIG9iamVj
dFBhdHRlcm4sIGxvY2F0aW9uLCBpbm5lclBhdHRlcm4pOwogICAgICAgICAgICAgICAgIHJlc3RF
bGVtZW50V2FzRm91bmQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGNvbnRleHQuc2V0Q29udGFp
bnNPYmplY3RSZXN0RWxlbWVudChvYmplY3RQYXR0ZXJuLCByZXN0RWxlbWVudFdhc0ZvdW5kKTsK
ICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTEyMTUsNyArMTIxNSw3IEBAIHRlbXBsYXRlIDxj
bGFzcyBUcmVlQnVpbGRlcj4gVHJlZURlc3RydWMKICAgICAgICAgICAgICAgICAgICAgaW5uZXJQ
YXR0ZXJuID0gcGFyc2VCaW5kaW5nT3JBc3NpZ25tZW50RWxlbWVudChjb250ZXh0LCBraW5kLCBl
eHBvcnRUeXBlLCBkdXBsaWNhdGVJZGVudGlmaWVyLCBoYXNEZXN0cnVjdHVyaW5nUGF0dGVybiwg
YmluZGluZ0NvbnRleHQsIGRlcHRoICsgMSk7CiAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAg
ICAgICAgICAgICAgICAgIGlmIChraW5kID09IERlc3RydWN0dXJpbmdLaW5kOjpEZXN0cnVjdHVy
ZVRvRXhwcmVzc2lvbnMpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaXNFdmFsT3JB
cmd1bWVudHMgPSBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5ldmFsID09ICpwcm9wZXJ0eU5hbWUgfHwg
bV92bS0+cHJvcGVydHlOYW1lcy0+YXJndW1lbnRzID09ICpwcm9wZXJ0eU5hbWU7CisgICAgICAg
ICAgICAgICAgICAgICAgICBib29sIGlzRXZhbE9yQXJndW1lbnRzID0gbV92bS5wcm9wZXJ0eU5h
bWVzLT5ldmFsID09ICpwcm9wZXJ0eU5hbWUgfHwgbV92bS5wcm9wZXJ0eU5hbWVzLT5hcmd1bWVu
dHMgPT0gKnByb3BlcnR5TmFtZTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0V2YWxP
ckFyZ3VtZW50cyAmJiBzdHJpY3RNb2RlKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmVjbGFzc2lmeUV4cHJlc3Npb25FcnJvcihFcnJvckluZGljYXRlc1BhdHRlcm4sIEVycm9ySW5k
aWNhdGVzTm90aGluZyk7CiAgICAgICAgICAgICAgICAgICAgICAgICBmYWlsSWZUcnVlSWZTdHJp
Y3QoaXNFdmFsT3JBcmd1bWVudHMsICJDYW5ub3QgbW9kaWZ5ICciLCBwcm9wZXJ0eU5hbWUtPmlt
cGwoKSwgIicgaW4gc3RyaWN0IG1vZGUiKTsKQEAgLTEyMjgsNyArMTIyOCw3IEBAIHRlbXBsYXRl
IDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZURlc3RydWMKICAgICAgICAgICAgICAgICBzd2l0Y2gg
KG1fdG9rZW4ubV90eXBlKSB7CiAgICAgICAgICAgICAgICAgY2FzZSBET1VCTEU6CiAgICAgICAg
ICAgICAgICAgY2FzZSBJTlRFR0VSOgotICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWUg
PSAmbV9wYXJzZXJBcmVuYS5pZGVudGlmaWVyQXJlbmEoKS5tYWtlTnVtZXJpY0lkZW50aWZpZXIo
Y29uc3RfY2FzdDxWTSo+KG1fdm0pLCBtX3Rva2VuLm1fZGF0YS5kb3VibGVWYWx1ZSk7CisgICAg
ICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZSA9ICZtX3BhcnNlckFyZW5hLmlkZW50aWZpZXJB
cmVuYSgpLm1ha2VOdW1lcmljSWRlbnRpZmllcihjb25zdF9jYXN0PFZNJj4obV92bSksIG1fdG9r
ZW4ubV9kYXRhLmRvdWJsZVZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICAgY2FzZSBTVFJJTkc6CiAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TmFt
ZSA9IG1fdG9rZW4ubV9kYXRhLmlkZW50OwpAQCAtMTI2Nyw3ICsxMjY3LDcgQEAgdGVtcGxhdGUg
PGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRGVzdHJ1YwogICAgICAgICAgICAgVHJlZUV4cHJlc3Np
b24gZGVmYXVsdFZhbHVlID0gcGFyc2VEZWZhdWx0VmFsdWVGb3JEZXN0cnVjdHVyaW5nUGF0dGVy
bihjb250ZXh0KTsKICAgICAgICAgICAgIHByb3BhZ2F0ZUVycm9yKCk7CiAgICAgICAgICAgICBp
ZiAocHJvcGVydHlFeHByZXNzaW9uKSB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC5hcHBlbmRP
YmplY3RQYXR0ZXJuRW50cnkoKm1fdm0sIG9iamVjdFBhdHRlcm4sIGxvY2F0aW9uLCBwcm9wZXJ0
eUV4cHJlc3Npb24sIGlubmVyUGF0dGVybiwgZGVmYXVsdFZhbHVlKTsKKyAgICAgICAgICAgICAg
ICBjb250ZXh0LmFwcGVuZE9iamVjdFBhdHRlcm5FbnRyeShtX3ZtLCBvYmplY3RQYXR0ZXJuLCBs
b2NhdGlvbiwgcHJvcGVydHlFeHByZXNzaW9uLCBpbm5lclBhdHRlcm4sIGRlZmF1bHRWYWx1ZSk7
CiAgICAgICAgICAgICAgICAgY29udGV4dC5zZXRDb250YWluc0NvbXB1dGVkUHJvcGVydHkob2Jq
ZWN0UGF0dGVybiwgdHJ1ZSk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAg
IEFTU0VSVChwcm9wZXJ0eU5hbWUpOwpAQCAtMTM5OCw3ICsxMzk4LDcgQEAgdGVtcGxhdGUgPGNs
YXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZQogICAgICAgICBKU1RleHRQb3NpdGlvbiBpbkxv
Y2F0aW9uID0gdG9rZW5TdGFydFBvc2l0aW9uKCk7CiAgICAgICAgIGJvb2wgaXNPZkVudW1lcmF0
aW9uID0gZmFsc2U7CiAgICAgICAgIGlmICghbWF0Y2goSU5UT0tFTikpIHsKLSAgICAgICAgICAg
IGZhaWxJZkZhbHNlKG1hdGNoQ29udGV4dHVhbEtleXdvcmQobV92bS0+cHJvcGVydHlOYW1lcy0+
b2YpLCAiRXhwZWN0ZWQgZWl0aGVyICdpbicgb3IgJ29mJyBpbiBlbnVtZXJhdGlvbiBzeW50YXgi
KTsKKyAgICAgICAgICAgIGZhaWxJZkZhbHNlKG1hdGNoQ29udGV4dHVhbEtleXdvcmQobV92bS5w
cm9wZXJ0eU5hbWVzLT5vZiksICJFeHBlY3RlZCBlaXRoZXIgJ2luJyBvciAnb2YnIGluIGVudW1l
cmF0aW9uIHN5bnRheCIpOwogICAgICAgICAgICAgaXNPZkVudW1lcmF0aW9uID0gdHJ1ZTsKICAg
ICAgICAgICAgIG5leHQoKTsKICAgICAgICAgfSBlbHNlIHsKQEAgLTE0NDgsNyArMTQ0OCw3IEBA
IHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWUKICAgICAgICAgICAgIGRl
Y2xzU3RhcnQgPSB0b2tlblN0YXJ0UG9zaXRpb24oKTsKICAgICAgICAgICAgIHBhdHRlcm4gPSB0
cnlQYXJzZURlc3RydWN0dXJpbmdQYXR0ZXJuRXhwcmVzc2lvbihjb250ZXh0LCBBc3NpZ25tZW50
Q29udGV4dDo6RGVjbGFyYXRpb25TdGF0ZW1lbnQpOwogICAgICAgICAgICAgZGVjbHNFbmQgPSBs
YXN0VG9rZW5FbmRQb3NpdGlvbigpOwotICAgICAgICAgICAgaWYgKHBhdHRlcm4gJiYgKG1hdGNo
KElOVE9LRU4pIHx8IG1hdGNoQ29udGV4dHVhbEtleXdvcmQobV92bS0+cHJvcGVydHlOYW1lcy0+
b2YpKSkKKyAgICAgICAgICAgIGlmIChwYXR0ZXJuICYmIChtYXRjaChJTlRPS0VOKSB8fCBtYXRj
aENvbnRleHR1YWxLZXl3b3JkKG1fdm0ucHJvcGVydHlOYW1lcy0+b2YpKSkKICAgICAgICAgICAg
ICAgICBnb3RvIGVudW1lcmF0aW9uTG9vcDsKICAgICAgICAgICAgIHBhdHRlcm4gPSBUcmVlRGVz
dHJ1Y3R1cmluZ1BhdHRlcm4oMCk7CiAgICAgICAgICAgICByZXN0b3JlU2F2ZVBvaW50KHNhdmVQ
b2ludCk7CkBAIC0xNTAzLDcgKzE1MDMsNyBAQCBlbnVtZXJhdGlvbkxvb3A6CiAgICAgZmFpbElm
RmFsc2Uobm9uTEhTQ291bnQgPT0gbV9wYXJzZXJTdGF0ZS5ub25MSFNDb3VudCwgIkV4cGVjdGVk
IGEgcmVmZXJlbmNlIG9uIHRoZSBsZWZ0IGhhbmQgc2lkZSBvZiBhbiBlbnVtZXJhdGlvbiBzdGF0
ZW1lbnQiKTsKICAgICBib29sIGlzT2ZFbnVtZXJhdGlvbiA9IGZhbHNlOwogICAgIGlmICghbWF0
Y2goSU5UT0tFTikpIHsKLSAgICAgICAgZmFpbElmRmFsc2UobWF0Y2hDb250ZXh0dWFsS2V5d29y
ZChtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5vZiksICJFeHBlY3RlZCBlaXRoZXIgJ2luJyBvciAnb2Yn
IGluIGVudW1lcmF0aW9uIHN5bnRheCIpOworICAgICAgICBmYWlsSWZGYWxzZShtYXRjaENvbnRl
eHR1YWxLZXl3b3JkKG1fdm0ucHJvcGVydHlOYW1lcy0+b2YpLCAiRXhwZWN0ZWQgZWl0aGVyICdp
bicgb3IgJ29mJyBpbiBlbnVtZXJhdGlvbiBzeW50YXgiKTsKICAgICAgICAgaXNPZkVudW1lcmF0
aW9uID0gdHJ1ZTsKICAgICAgICAgbmV4dCgpOwogICAgIH0gZWxzZSB7CkBAIC0xNTU4LDcgKzE1
NTgsNyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lCiAgICAgCiAg
ICAgaWYgKGF1dG9TZW1pQ29sb24oKSkgewogICAgICAgICBzZW1hbnRpY0ZhaWxJZkZhbHNlKGJy
ZWFrSXNWYWxpZCgpLCAiJ2JyZWFrJyBpcyBvbmx5IHZhbGlkIGluc2lkZSBhIHN3aXRjaCBvciBs
b29wIHN0YXRlbWVudCIpOwotICAgICAgICByZXR1cm4gY29udGV4dC5jcmVhdGVCcmVha1N0YXRl
bWVudChsb2NhdGlvbiwgJm1fdm0tPnByb3BlcnR5TmFtZXMtPm51bGxJZGVudGlmaWVyLCBzdGFy
dCwgZW5kKTsKKyAgICAgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlQnJlYWtTdGF0ZW1lbnQobG9j
YXRpb24sICZtX3ZtLnByb3BlcnR5TmFtZXMtPm51bGxJZGVudGlmaWVyLCBzdGFydCwgZW5kKTsK
ICAgICB9CiAgICAgZmFpbElmRmFsc2UobWF0Y2hTcGVjSWRlbnRpZmllcigpLCAiRXhwZWN0ZWQg
YW4gaWRlbnRpZmllciBhcyB0aGUgdGFyZ2V0IGZvciBhIGJyZWFrIHN0YXRlbWVudCIpOwogICAg
IGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gbV90b2tlbi5tX2RhdGEuaWRlbnQ7CkBAIC0xNTgw
LDcgKzE1ODAsNyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lCiAg
ICAgCiAgICAgaWYgKGF1dG9TZW1pQ29sb24oKSkgewogICAgICAgICBzZW1hbnRpY0ZhaWxJZkZh
bHNlKGNvbnRpbnVlSXNWYWxpZCgpLCAiJ2NvbnRpbnVlJyBpcyBvbmx5IHZhbGlkIGluc2lkZSBh
IGxvb3Agc3RhdGVtZW50Iik7Ci0gICAgICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUNvbnRpbnVl
U3RhdGVtZW50KGxvY2F0aW9uLCAmbV92bS0+cHJvcGVydHlOYW1lcy0+bnVsbElkZW50aWZpZXIs
IHN0YXJ0LCBlbmQpOworICAgICAgICByZXR1cm4gY29udGV4dC5jcmVhdGVDb250aW51ZVN0YXRl
bWVudChsb2NhdGlvbiwgJm1fdm0ucHJvcGVydHlOYW1lcy0+bnVsbElkZW50aWZpZXIsIHN0YXJ0
LCBlbmQpOwogICAgIH0KICAgICBmYWlsSWZGYWxzZShtYXRjaFNwZWNJZGVudGlmaWVyKCksICJF
eHBlY3RlZCBhbiBpZGVudGlmaWVyIGFzIHRoZSB0YXJnZXQgZm9yIGEgY29udGludWUgc3RhdGVt
ZW50Iik7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSBtX3Rva2VuLm1fZGF0YS5pZGVu
dDsKQEAgLTE5NTAsNyArMTk1MCw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJl
ZVN0YXRlbWUKICAgICAgICAgZ290byBkZWZhdWx0Q2FzZTsKICAgICB9CiAgICAgY2FzZSBJREVO
VDoKLSAgICAgICAgaWYgKFVOTElLRUxZKCptX3Rva2VuLm1fZGF0YS5pZGVudCA9PSBtX3ZtLT5w
cm9wZXJ0eU5hbWVzLT5hc3luYyAmJiAhbV90b2tlbi5tX2RhdGEuZXNjYXBlZCkpIHsKKyAgICAg
ICAgaWYgKFVOTElLRUxZKCptX3Rva2VuLm1fZGF0YS5pZGVudCA9PSBtX3ZtLnByb3BlcnR5TmFt
ZXMtPmFzeW5jICYmICFtX3Rva2VuLm1fZGF0YS5lc2NhcGVkKSkgewogICAgICAgICAgICAgaWYg
KG1heWJlUGFyc2VBc3luY0Z1bmN0aW9uRGVjbGFyYXRpb25TdGF0ZW1lbnQoY29udGV4dCwgcmVz
dWx0LCBwYXJlbnRBbGxvd3NGdW5jdGlvbkRlY2xhcmF0aW9uQXNTdGF0ZW1lbnQpKQogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0yMDM5LDcgKzIwMzksNyBAQCB0ZW1wbGF0
ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGV4
ZXJUeXBlPgogdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBib29sIFBhcnNlcjxMZXhlclR5
cGU+OjptYXliZVBhcnNlQXN5bmNGdW5jdGlvbkRlY2xhcmF0aW9uU3RhdGVtZW50KFRyZWVCdWls
ZGVyJiBjb250ZXh0LCBUcmVlU3RhdGVtZW50JiByZXN1bHQsIGJvb2wgcGFyZW50QWxsb3dzRnVu
Y3Rpb25EZWNsYXJhdGlvbkFzU3RhdGVtZW50KQogewotICAgIEFTU0VSVChtYXRjaENvbnRleHR1
YWxLZXl3b3JkKG1fdm0tPnByb3BlcnR5TmFtZXMtPmFzeW5jKSk7CisgICAgQVNTRVJUKG1hdGNo
Q29udGV4dHVhbEtleXdvcmQobV92bS5wcm9wZXJ0eU5hbWVzLT5hc3luYykpOwogICAgIFNhdmVQ
b2ludCBzYXZlUG9pbnQgPSBjcmVhdGVTYXZlUG9pbnQoKTsKICAgICBuZXh0KCk7CiAgICAgaWYg
KG1hdGNoKEZVTkNUSU9OKSAmJiAhbV9sZXhlci0+aGFzTGluZVRlcm1pbmF0b3JCZWZvcmVUb2tl
bigpKSB7CkBAIC0yMzAwLDE1ICsyMzAwLDE1IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRl
cj4gdHlwZW5hbWUgVHIKICAgICB9OwogCiAgICAgLy8gQGdlbmVyYXRvcgotICAgIGFkZFBhcmFt
ZXRlcihtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5nZW5lcmF0b3JQcml2YXRlTmFtZSk7CisgICAgYWRk
UGFyYW1ldGVyKG1fdm0ucHJvcGVydHlOYW1lcy0+Z2VuZXJhdG9yUHJpdmF0ZU5hbWUpOwogICAg
IC8vIEBnZW5lcmF0b3JTdGF0ZQotICAgIGFkZFBhcmFtZXRlcihtX3ZtLT5wcm9wZXJ0eU5hbWVz
LT5nZW5lcmF0b3JTdGF0ZVByaXZhdGVOYW1lKTsKKyAgICBhZGRQYXJhbWV0ZXIobV92bS5wcm9w
ZXJ0eU5hbWVzLT5nZW5lcmF0b3JTdGF0ZVByaXZhdGVOYW1lKTsKICAgICAvLyBAZ2VuZXJhdG9y
VmFsdWUKLSAgICBhZGRQYXJhbWV0ZXIobV92bS0+cHJvcGVydHlOYW1lcy0+Z2VuZXJhdG9yVmFs
dWVQcml2YXRlTmFtZSk7CisgICAgYWRkUGFyYW1ldGVyKG1fdm0ucHJvcGVydHlOYW1lcy0+Z2Vu
ZXJhdG9yVmFsdWVQcml2YXRlTmFtZSk7CiAgICAgLy8gQGdlbmVyYXRvclJlc3VtZU1vZGUKLSAg
ICBhZGRQYXJhbWV0ZXIobV92bS0+cHJvcGVydHlOYW1lcy0+Z2VuZXJhdG9yUmVzdW1lTW9kZVBy
aXZhdGVOYW1lKTsKKyAgICBhZGRQYXJhbWV0ZXIobV92bS5wcm9wZXJ0eU5hbWVzLT5nZW5lcmF0
b3JSZXN1bWVNb2RlUHJpdmF0ZU5hbWUpOwogICAgIC8vIEBnZW5lcmF0b3JGcmFtZQotICAgIGFk
ZFBhcmFtZXRlcihtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5nZW5lcmF0b3JGcmFtZVByaXZhdGVOYW1l
KTsKKyAgICBhZGRQYXJhbWV0ZXIobV92bS5wcm9wZXJ0eU5hbWVzLT5nZW5lcmF0b3JGcmFtZVBy
aXZhdGVOYW1lKTsKIAogICAgIHJldHVybiBwYXJhbWV0ZXJzOwogfQpAQCAtMjQxMiw3ICsyNDEy
LDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBib29sIFBhcnNlcgogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgfTsKIAotICAgIFN5bnRheENoZWNrZXIgc3ludGF4Q2hlY2tlcihj
b25zdF9jYXN0PFZNKj4obV92bSksIG1fbGV4ZXIuZ2V0KCkpOworICAgIFN5bnRheENoZWNrZXIg
c3ludGF4Q2hlY2tlcihjb25zdF9jYXN0PFZNJj4obV92bSksIG1fbGV4ZXIuZ2V0KCkpOwogCiAg
ICAgaWYgKFVOTElLRUxZKChTb3VyY2VQYXJzZU1vZGVTZXQoU291cmNlUGFyc2VNb2RlOjpBcnJv
d0Z1bmN0aW9uTW9kZSwgU291cmNlUGFyc2VNb2RlOjpBc3luY0Fycm93RnVuY3Rpb25Nb2RlKS5j
b250YWlucyhtb2RlKSkpKSB7CiAgICAgICAgIHN0YXJ0TG9jYXRpb24gPSB0b2tlbkxvY2F0aW9u
KCk7CkBAIC0yNTg5LDggKzI1ODksOCBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IGJv
b2wgUGFyc2VyCiAgICAgaWYgKGZ1bmN0aW9uU2NvcGUtPnN0cmljdE1vZGUoKSAmJiByZXF1aXJl
bWVudHMgIT0gRnVuY3Rpb25OYW1lUmVxdWlyZW1lbnRzOjpVbm5hbWVkKSB7CiAgICAgICAgIEFT
U0VSVChmdW5jdGlvbkluZm8ubmFtZSk7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKFNvdXJjZVBh
cnNlTW9kZVNldChTb3VyY2VQYXJzZU1vZGU6Ok5vcm1hbEZ1bmN0aW9uTW9kZSwgU291cmNlUGFy
c2VNb2RlOjpNZXRob2RNb2RlLCBTb3VyY2VQYXJzZU1vZGU6OkFycm93RnVuY3Rpb25Nb2RlLCBT
b3VyY2VQYXJzZU1vZGU6OkdlbmVyYXRvckJvZHlNb2RlLCBTb3VyY2VQYXJzZU1vZGU6OkdlbmVy
YXRvcldyYXBwZXJGdW5jdGlvbk1vZGUpLmNvbnRhaW5zKG1vZGUpIHx8IGlzQXN5bmNGdW5jdGlv
bk9yQXN5bmNHZW5lcmF0b3JXcmFwcGVyUGFyc2VNb2RlKG1vZGUpKTsKLSAgICAgICAgc2VtYW50
aWNGYWlsSWZUcnVlKG1fdm0tPnByb3BlcnR5TmFtZXMtPmFyZ3VtZW50cyA9PSAqZnVuY3Rpb25J
bmZvLm5hbWUsICInIiwgZnVuY3Rpb25JbmZvLm5hbWUtPmltcGwoKSwgIicgaXMgbm90IGEgdmFs
aWQgZnVuY3Rpb24gbmFtZSBpbiBzdHJpY3QgbW9kZSIpOwotICAgICAgICBzZW1hbnRpY0ZhaWxJ
ZlRydWUobV92bS0+cHJvcGVydHlOYW1lcy0+ZXZhbCA9PSAqZnVuY3Rpb25JbmZvLm5hbWUsICIn
IiwgZnVuY3Rpb25JbmZvLm5hbWUtPmltcGwoKSwgIicgaXMgbm90IGEgdmFsaWQgZnVuY3Rpb24g
bmFtZSBpbiBzdHJpY3QgbW9kZSIpOworICAgICAgICBzZW1hbnRpY0ZhaWxJZlRydWUobV92bS5w
cm9wZXJ0eU5hbWVzLT5hcmd1bWVudHMgPT0gKmZ1bmN0aW9uSW5mby5uYW1lLCAiJyIsIGZ1bmN0
aW9uSW5mby5uYW1lLT5pbXBsKCksICInIGlzIG5vdCBhIHZhbGlkIGZ1bmN0aW9uIG5hbWUgaW4g
c3RyaWN0IG1vZGUiKTsKKyAgICAgICAgc2VtYW50aWNGYWlsSWZUcnVlKG1fdm0ucHJvcGVydHlO
YW1lcy0+ZXZhbCA9PSAqZnVuY3Rpb25JbmZvLm5hbWUsICInIiwgZnVuY3Rpb25JbmZvLm5hbWUt
PmltcGwoKSwgIicgaXMgbm90IGEgdmFsaWQgZnVuY3Rpb24gbmFtZSBpbiBzdHJpY3QgbW9kZSIp
OwogICAgIH0KIAogICAgIEpTVG9rZW5Mb2NhdGlvbiBsb2NhdGlvbiA9IEpTVG9rZW5Mb2NhdGlv
bihtX3Rva2VuLm1fbG9jYXRpb24pOwpAQCAtMjY5Miw3ICsyNjkyLDcgQEAgdGVtcGxhdGUgPGNs
YXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZQogICAgICAgICAvLwogICAgICAgICAvLyBJbiB0
aGlzIGNhc2UsIHdlIHVzZSAiKmRlZmF1bHQqIiBhcyB0aGlzIGZ1bmN0aW9uIGRlY2xhcmF0aW9u
J3MgbmFtZS4KICAgICAgICAgcmVxdWlyZW1lbnRzID0gRnVuY3Rpb25OYW1lUmVxdWlyZW1lbnRz
OjpOb25lOwotICAgICAgICBmdW5jdGlvbkluZm8ubmFtZSA9ICZtX3ZtLT5wcm9wZXJ0eU5hbWVz
LT5zdGFyRGVmYXVsdFByaXZhdGVOYW1lOworICAgICAgICBmdW5jdGlvbkluZm8ubmFtZSA9ICZt
X3ZtLnByb3BlcnR5TmFtZXMtPnN0YXJEZWZhdWx0UHJpdmF0ZU5hbWU7CiAgICAgfQogCiAgICAg
ZmFpbElmRmFsc2UoKHBhcnNlRnVuY3Rpb25JbmZvKGNvbnRleHQsIHJlcXVpcmVtZW50cywgcGFy
c2VNb2RlLCB0cnVlLCBDb25zdHJ1Y3RvcktpbmQ6Ok5vbmUsIFN1cGVyQmluZGluZzo6Tm90TmVl
ZGVkLCBmdW5jdGlvbktleXdvcmRTdGFydCwgZnVuY3Rpb25JbmZvLCBGdW5jdGlvbkRlZmluaXRp
b25UeXBlOjpEZWNsYXJhdGlvbiwgZnVuY3Rpb25Db25zdHJ1Y3RvclBhcmFtZXRlcnNFbmRQb3Np
dGlvbikpLCAiQ2Fubm90IHBhcnNlIHRoaXMgZnVuY3Rpb24iKTsKQEAgLTI3NTAsNyArMjc1MCw3
IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWUKICAgICAgICAgLy8K
ICAgICAgICAgLy8gSW4gdGhpcyBjYXNlLCB3ZSB1c2UgIipkZWZhdWx0KiIgYXMgdGhpcyBmdW5j
dGlvbiBkZWNsYXJhdGlvbidzIG5hbWUuCiAgICAgICAgIHJlcXVpcmVtZW50cyA9IEZ1bmN0aW9u
TmFtZVJlcXVpcmVtZW50czo6Tm9uZTsKLSAgICAgICAgZnVuY3Rpb25JbmZvLm5hbWUgPSAmbV92
bS0+cHJvcGVydHlOYW1lcy0+c3RhckRlZmF1bHRQcml2YXRlTmFtZTsKKyAgICAgICAgZnVuY3Rp
b25JbmZvLm5hbWUgPSAmbV92bS5wcm9wZXJ0eU5hbWVzLT5zdGFyRGVmYXVsdFByaXZhdGVOYW1l
OwogICAgIH0KIAogICAgIGZhaWxJZkZhbHNlKChwYXJzZUZ1bmN0aW9uSW5mbyhjb250ZXh0LCBy
ZXF1aXJlbWVudHMsIHBhcnNlTW9kZSwgdHJ1ZSwgQ29uc3RydWN0b3JLaW5kOjpOb25lLCBTdXBl
ckJpbmRpbmc6Ok5vdE5lZWRlZCwgZnVuY3Rpb25LZXl3b3JkU3RhcnQsIGZ1bmN0aW9uSW5mbywg
RnVuY3Rpb25EZWZpbml0aW9uVHlwZTo6RGVjbGFyYXRpb24sIGZ1bmN0aW9uQ29uc3RydWN0b3JQ
YXJhbWV0ZXJzRW5kUG9zaXRpb24pKSwgIkNhbm5vdCBwYXJzZSB0aGlzIGFzeW5jIGZ1bmN0aW9u
Iik7CkBAIC0yNzk2LDcgKzI3OTYsNyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRy
ZWVTdGF0ZW1lCiAgICAgICAgIC8vCiAgICAgICAgIC8vIEluIHRoaXMgY2FzZSwgd2UgdXNlICIq
ZGVmYXVsdCoiIGFzIHRoaXMgY2xhc3MgZGVjbGFyYXRpb24ncyBuYW1lLgogICAgICAgICByZXF1
aXJlbWVudHMgPSBGdW5jdGlvbk5hbWVSZXF1aXJlbWVudHM6Ok5vbmU7Ci0gICAgICAgIGluZm8u
Y2xhc3NOYW1lID0gJm1fdm0tPnByb3BlcnR5TmFtZXMtPnN0YXJEZWZhdWx0UHJpdmF0ZU5hbWU7
CisgICAgICAgIGluZm8uY2xhc3NOYW1lID0gJm1fdm0ucHJvcGVydHlOYW1lcy0+c3RhckRlZmF1
bHRQcml2YXRlTmFtZTsKICAgICB9CiAKICAgICBUcmVlQ2xhc3NFeHByZXNzaW9uIGNsYXNzRXhw
ciA9IHBhcnNlQ2xhc3MoY29udGV4dCwgcmVxdWlyZW1lbnRzLCBpbmZvKTsKQEAgLTI4NzAsNyAr
Mjg3MCw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUNsYXNzRXgKIAogICAg
ICAgICAvLyBGb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHksICJzdGF0aWMiIGlzIGEgbm9uLXJl
c2VydmVkIGtleXdvcmQgaW4gbm9uLXN0cmljdCBtb2RlLgogICAgICAgICBDbGFzc0VsZW1lbnRU
YWcgdGFnID0gQ2xhc3NFbGVtZW50VGFnOjpJbnN0YW5jZTsKLSAgICAgICAgaWYgKG1hdGNoKFJF
U0VSVkVEX0lGX1NUUklDVCkgJiYgKm1fdG9rZW4ubV9kYXRhLmlkZW50ID09IG1fdm0tPnByb3Bl
cnR5TmFtZXMtPnN0YXRpY0tleXdvcmQpIHsKKyAgICAgICAgaWYgKG1hdGNoKFJFU0VSVkVEX0lG
X1NUUklDVCkgJiYgKm1fdG9rZW4ubV9kYXRhLmlkZW50ID09IG1fdm0ucHJvcGVydHlOYW1lcy0+
c3RhdGljS2V5d29yZCkgewogICAgICAgICAgICAgU2F2ZVBvaW50IHNhdmVQb2ludCA9IGNyZWF0
ZVNhdmVQb2ludCgpOwogICAgICAgICAgICAgbmV4dCgpOwogICAgICAgICAgICAgaWYgKG1hdGNo
KE9QRU5QQVJFTikpIHsKQEAgLTI4ODEsNyArMjg4MSw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVl
QnVpbGRlcj4gVHJlZUNsYXNzRXgKICAgICAgICAgfQogCiAgICAgICAgIC8vIEZJWE1FOiBGaWd1
cmUgb3V0IGEgd2F5IHRvIHNoYXJlIG1vcmUgY29kZSB3aXRoIHBhcnNlUHJvcGVydHkuCi0gICAg
ICAgIGNvbnN0IENvbW1vbklkZW50aWZpZXJzJiBwcm9wZXJ0eU5hbWVzID0gKm1fdm0tPnByb3Bl
cnR5TmFtZXM7CisgICAgICAgIGNvbnN0IENvbW1vbklkZW50aWZpZXJzJiBwcm9wZXJ0eU5hbWVz
ID0gKm1fdm0ucHJvcGVydHlOYW1lczsKICAgICAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQg
PSAmcHJvcGVydHlOYW1lcy5udWxsSWRlbnRpZmllcjsKICAgICAgICAgVHJlZUV4cHJlc3Npb24g
Y29tcHV0ZWRQcm9wZXJ0eU5hbWUgPSAwOwogICAgICAgICBib29sIGlzR2V0dGVyID0gZmFsc2U7
CkBAIC0yODk5LDcgKzI4OTksNyBAQCBwYXJzZU1ldGhvZDoKICAgICAgICAgICAgIG5leHQoKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIElERU5UOgotICAgICAgICAgICAgaWYg
KFVOTElLRUxZKCptX3Rva2VuLm1fZGF0YS5pZGVudCA9PSBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5h
c3luYyAmJiAhbV90b2tlbi5tX2RhdGEuZXNjYXBlZCkpIHsKKyAgICAgICAgICAgIGlmIChVTkxJ
S0VMWSgqbV90b2tlbi5tX2RhdGEuaWRlbnQgPT0gbV92bS5wcm9wZXJ0eU5hbWVzLT5hc3luYyAm
JiAhbV90b2tlbi5tX2RhdGEuZXNjYXBlZCkpIHsKICAgICAgICAgICAgICAgICBpZiAoIWlzR2Vu
ZXJhdG9yTWV0aG9kUGFyc2VNb2RlKHBhcnNlTW9kZSkgJiYgIWlzQXN5bmNNZXRob2RQYXJzZU1v
ZGUocGFyc2VNb2RlKSkgewogICAgICAgICAgICAgICAgICAgICBpZGVudCA9IG1fdG9rZW4ubV9k
YXRhLmlkZW50OwogICAgICAgICAgICAgICAgICAgICBuZXh0KCk7CkBAIC0yOTI0LDcgKzI5MjQs
NyBAQCBwYXJzZU1ldGhvZDoKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIERPVUJM
RToKICAgICAgICAgY2FzZSBJTlRFR0VSOgotICAgICAgICAgICAgaWRlbnQgPSAmbV9wYXJzZXJB
cmVuYS5pZGVudGlmaWVyQXJlbmEoKS5tYWtlTnVtZXJpY0lkZW50aWZpZXIoY29uc3RfY2FzdDxW
TSo+KG1fdm0pLCBtX3Rva2VuLm1fZGF0YS5kb3VibGVWYWx1ZSk7CisgICAgICAgICAgICBpZGVu
dCA9ICZtX3BhcnNlckFyZW5hLmlkZW50aWZpZXJBcmVuYSgpLm1ha2VOdW1lcmljSWRlbnRpZmll
cihjb25zdF9jYXN0PFZNJj4obV92bSksIG1fdG9rZW4ubV9kYXRhLmRvdWJsZVZhbHVlKTsKICAg
ICAgICAgICAgIEFTU0VSVChpZGVudCk7CiAgICAgICAgICAgICBuZXh0KCk7CiAgICAgICAgICAg
ICBicmVhazsKQEAgLTI5NTEsOCArMjk1MSw4IEBAIHBhcnNlTWV0aG9kOgogICAgICAgICAgICAg
Ym9vbCBpc0NvbnN0cnVjdG9yID0gdGFnID09IENsYXNzRWxlbWVudFRhZzo6SW5zdGFuY2UgJiYg
KmlkZW50ID09IHByb3BlcnR5TmFtZXMuY29uc3RydWN0b3I7CiAgICAgICAgICAgICBpZiAoaXNB
c3luY01ldGhvZFBhcnNlTW9kZShwYXJzZU1vZGUpIHx8IGlzQXN5bmNHZW5lcmF0b3JNZXRob2RQ
YXJzZU1vZGUocGFyc2VNb2RlKSB8fCBpc0dlbmVyYXRvck1ldGhvZFBhcnNlTW9kZShwYXJzZU1v
ZGUpKSB7CiAgICAgICAgICAgICAgICAgaXNDb25zdHJ1Y3RvciA9IGZhbHNlOwotICAgICAgICAg
ICAgICAgIHNlbWFudGljRmFpbElmVHJ1ZSgqaWRlbnQgPT0gbV92bS0+cHJvcGVydHlOYW1lcy0+
cHJvdG90eXBlLCAiQ2Fubm90IGRlY2xhcmUgIiwgc3RyaW5nQXJ0aWNsZUZvckZ1bmN0aW9uTW9k
ZShwYXJzZU1vZGUpLCBzdHJpbmdGb3JGdW5jdGlvbk1vZGUocGFyc2VNb2RlKSwgIiBuYW1lZCAn
cHJvdG90eXBlJyIpOwotICAgICAgICAgICAgICAgIHNlbWFudGljRmFpbElmVHJ1ZSgqaWRlbnQg
PT0gbV92bS0+cHJvcGVydHlOYW1lcy0+Y29uc3RydWN0b3IsICJDYW5ub3QgZGVjbGFyZSAiLCBz
dHJpbmdBcnRpY2xlRm9yRnVuY3Rpb25Nb2RlKHBhcnNlTW9kZSksIHN0cmluZ0ZvckZ1bmN0aW9u
TW9kZShwYXJzZU1vZGUpLCAiIG5hbWVkICdjb25zdHJ1Y3RvciciKTsKKyAgICAgICAgICAgICAg
ICBzZW1hbnRpY0ZhaWxJZlRydWUoKmlkZW50ID09IG1fdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90
eXBlLCAiQ2Fubm90IGRlY2xhcmUgIiwgc3RyaW5nQXJ0aWNsZUZvckZ1bmN0aW9uTW9kZShwYXJz
ZU1vZGUpLCBzdHJpbmdGb3JGdW5jdGlvbk1vZGUocGFyc2VNb2RlKSwgIiBuYW1lZCAncHJvdG90
eXBlJyIpOworICAgICAgICAgICAgICAgIHNlbWFudGljRmFpbElmVHJ1ZSgqaWRlbnQgPT0gbV92
bS5wcm9wZXJ0eU5hbWVzLT5jb25zdHJ1Y3RvciwgIkNhbm5vdCBkZWNsYXJlICIsIHN0cmluZ0Fy
dGljbGVGb3JGdW5jdGlvbk1vZGUocGFyc2VNb2RlKSwgc3RyaW5nRm9yRnVuY3Rpb25Nb2RlKHBh
cnNlTW9kZSksICIgbmFtZWQgJ2NvbnN0cnVjdG9yJyIpOwogICAgICAgICAgICAgfQogCiAgICAg
ICAgICAgICBtZXRob2RJbmZvLm5hbWUgPSBpc0NvbnN0cnVjdG9yID8gaW5mby5jbGFzc05hbWUg
OiBpZGVudDsKQEAgLTMyMTgsMTAgKzMyMTgsMTAgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWls
ZGVyPiB0eXBlbmFtZSBUcgogICAgICAgICAvLyBlLmcuCiAgICAgICAgIC8vICAgICAqIGFzIG5h
bWVzcGFjZQogICAgICAgICBBU1NFUlQobWF0Y2goVElNRVMpKTsKLSAgICAgICAgaW1wb3J0ZWRO
YW1lID0gJm1fdm0tPnByb3BlcnR5TmFtZXMtPnRpbWVzSWRlbnRpZmllcjsKKyAgICAgICAgaW1w
b3J0ZWROYW1lID0gJm1fdm0ucHJvcGVydHlOYW1lcy0+dGltZXNJZGVudGlmaWVyOwogICAgICAg
ICBuZXh0KCk7CiAKLSAgICAgICAgZmFpbElmRmFsc2UobWF0Y2hDb250ZXh0dWFsS2V5d29yZCht
X3ZtLT5wcm9wZXJ0eU5hbWVzLT5hcyksICJFeHBlY3RlZCAnYXMnIGJlZm9yZSBpbXBvcnRlZCBi
aW5kaW5nIG5hbWUiKTsKKyAgICAgICAgZmFpbElmRmFsc2UobWF0Y2hDb250ZXh0dWFsS2V5d29y
ZChtX3ZtLnByb3BlcnR5TmFtZXMtPmFzKSwgIkV4cGVjdGVkICdhcycgYmVmb3JlIGltcG9ydGVk
IGJpbmRpbmcgbmFtZSIpOwogICAgICAgICBuZXh0KCk7CiAKICAgICAgICAgZmFpbElmRmFsc2Uo
bWF0Y2hTcGVjSWRlbnRpZmllcigpLCAiRXhwZWN0ZWQgYSB2YXJpYWJsZSBuYW1lIGZvciB0aGUg
aW1wb3J0IGRlY2xhcmF0aW9uIik7CkBAIC0zMjQ0LDcgKzMyNDQsNyBAQCB0ZW1wbGF0ZSA8Y2xh
c3MgVHJlZUJ1aWxkZXI+IHR5cGVuYW1lIFRyCiAgICAgICAgIGltcG9ydGVkTmFtZSA9IGxvY2Fs
TmFtZTsKICAgICAgICAgbmV4dCgpOwogCi0gICAgICAgIGlmIChtYXRjaENvbnRleHR1YWxLZXl3
b3JkKG1fdm0tPnByb3BlcnR5TmFtZXMtPmFzKSkgeworICAgICAgICBpZiAobWF0Y2hDb250ZXh0
dWFsS2V5d29yZChtX3ZtLnByb3BlcnR5TmFtZXMtPmFzKSkgewogICAgICAgICAgICAgbmV4dCgp
OwogICAgICAgICAgICAgZmFpbElmRmFsc2UobWF0Y2hTcGVjSWRlbnRpZmllcigpLCAiRXhwZWN0
ZWQgYSB2YXJpYWJsZSBuYW1lIGZvciB0aGUgaW1wb3J0IGRlY2xhcmF0aW9uIik7CiAgICAgICAg
ICAgICBsb2NhbE5hbWVUb2tlbiA9IG1fdG9rZW47CkBAIC0zMjYwLDcgKzMyNjAsNyBAQCB0ZW1w
bGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IHR5cGVuYW1lIFRyCiAgICAgICAgIEFTU0VSVChtYXRj
aFNwZWNJZGVudGlmaWVyKCkpOwogICAgICAgICBsb2NhbE5hbWVUb2tlbiA9IG1fdG9rZW47CiAg
ICAgICAgIGxvY2FsTmFtZSA9IG1fdG9rZW4ubV9kYXRhLmlkZW50OwotICAgICAgICBpbXBvcnRl
ZE5hbWUgPSAmbV92bS0+cHJvcGVydHlOYW1lcy0+ZGVmYXVsdEtleXdvcmQ7CisgICAgICAgIGlt
cG9ydGVkTmFtZSA9ICZtX3ZtLnByb3BlcnR5TmFtZXMtPmRlZmF1bHRLZXl3b3JkOwogICAgICAg
ICBuZXh0KCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTMzMzgsNyArMzMzOCw3IEBAIHRl
bXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWUKICAgICAvLyBGcm9tQ2xhdXNl
IDoKICAgICAvLyBmcm9tIE1vZHVsZVNwZWNpZmllcgogCi0gICAgZmFpbElmRmFsc2UobWF0Y2hD
b250ZXh0dWFsS2V5d29yZChtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5mcm9tKSwgIkV4cGVjdGVkICdm
cm9tJyBiZWZvcmUgaW1wb3J0ZWQgbW9kdWxlIG5hbWUiKTsKKyAgICBmYWlsSWZGYWxzZShtYXRj
aENvbnRleHR1YWxLZXl3b3JkKG1fdm0ucHJvcGVydHlOYW1lcy0+ZnJvbSksICJFeHBlY3RlZCAn
ZnJvbScgYmVmb3JlIGltcG9ydGVkIG1vZHVsZSBuYW1lIik7CiAgICAgbmV4dCgpOwogCiAgICAg
YXV0byBtb2R1bGVOYW1lID0gcGFyc2VNb2R1bGVOYW1lKGNvbnRleHQpOwpAQCAtMzM2Myw3ICsz
MzYzLDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiB0eXBlbmFtZSBUcgogICAgIGNv
bnN0IElkZW50aWZpZXIqIGV4cG9ydGVkTmFtZSA9IGxvY2FsTmFtZTsKICAgICBuZXh0KCk7CiAK
LSAgICBpZiAobWF0Y2hDb250ZXh0dWFsS2V5d29yZChtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5hcykp
IHsKKyAgICBpZiAobWF0Y2hDb250ZXh0dWFsS2V5d29yZChtX3ZtLnByb3BlcnR5TmFtZXMtPmFz
KSkgewogICAgICAgICBuZXh0KCk7CiAgICAgICAgIGZhaWxJZkZhbHNlKG1hdGNoSWRlbnRpZmll
ck9yS2V5d29yZCgpLCAiRXhwZWN0ZWQgYW4gZXhwb3J0ZWQgbmFtZSBmb3IgdGhlIGV4cG9ydCBk
ZWNsYXJhdGlvbiIpOwogICAgICAgICBleHBvcnRlZE5hbWUgPSBtX3Rva2VuLm1fZGF0YS5pZGVu
dDsKQEAgLTMzODgsNyArMzM4OCw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJl
ZVN0YXRlbWUKICAgICAgICAgLy8gZXhwb3J0ICogRnJvbUNsYXVzZSA7CiAgICAgICAgIG5leHQo
KTsKIAotICAgICAgICBmYWlsSWZGYWxzZShtYXRjaENvbnRleHR1YWxLZXl3b3JkKG1fdm0tPnBy
b3BlcnR5TmFtZXMtPmZyb20pLCAiRXhwZWN0ZWQgJ2Zyb20nIGJlZm9yZSBleHBvcnRlZCBtb2R1
bGUgbmFtZSIpOworICAgICAgICBmYWlsSWZGYWxzZShtYXRjaENvbnRleHR1YWxLZXl3b3JkKG1f
dm0ucHJvcGVydHlOYW1lcy0+ZnJvbSksICJFeHBlY3RlZCAnZnJvbScgYmVmb3JlIGV4cG9ydGVk
IG1vZHVsZSBuYW1lIik7CiAgICAgICAgIG5leHQoKTsKICAgICAgICAgYXV0byBtb2R1bGVOYW1l
ID0gcGFyc2VNb2R1bGVOYW1lKGNvbnRleHQpOwogICAgICAgICBmYWlsSWZGYWxzZShtb2R1bGVO
YW1lLCAiQ2Fubm90IHBhcnNlIHRoZSAnZnJvbScgY2xhdXNlIik7CkBAIC0zNDIwLDcgKzM0MjAs
NyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lCiAgICAgICAgICAg
ICBpZiAobWF0Y2goSURFTlQpKQogICAgICAgICAgICAgICAgIGxvY2FsTmFtZSA9IG1fdG9rZW4u
bV9kYXRhLmlkZW50OwogICAgICAgICAgICAgcmVzdG9yZVNhdmVQb2ludChzYXZlUG9pbnQpOwot
ICAgICAgICB9IGVsc2UgaWYgKG1hdGNoQ29udGV4dHVhbEtleXdvcmQobV92bS0+cHJvcGVydHlO
YW1lcy0+YXN5bmMpKSB7CisgICAgICAgIH0gZWxzZSBpZiAobWF0Y2hDb250ZXh0dWFsS2V5d29y
ZChtX3ZtLnByb3BlcnR5TmFtZXMtPmFzeW5jKSkgewogICAgICAgICAgICAgU2F2ZVBvaW50IHNh
dmVQb2ludCA9IGNyZWF0ZVNhdmVQb2ludCgpOwogICAgICAgICAgICAgbmV4dCgpOwogICAgICAg
ICAgICAgaWYgKG1hdGNoKEZVTkNUSU9OKSAmJiAhbV9sZXhlci0+aGFzTGluZVRlcm1pbmF0b3JC
ZWZvcmVUb2tlbigpKSB7CkBAIC0zNDMzLDcgKzM0MzMsNyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJl
ZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lCiAgICAgICAgIH0KIAogICAgICAgICBpZiAoIWxvY2FsTmFt
ZSkKLSAgICAgICAgICAgIGxvY2FsTmFtZSA9ICZtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5zdGFyRGVm
YXVsdFByaXZhdGVOYW1lOworICAgICAgICAgICAgbG9jYWxOYW1lID0gJm1fdm0ucHJvcGVydHlO
YW1lcy0+c3RhckRlZmF1bHRQcml2YXRlTmFtZTsKIAogICAgICAgICBpZiAoaXNGdW5jdGlvbk9y
Q2xhc3NEZWNsYXJhdGlvbikgewogICAgICAgICAgICAgaWYgKHN0YXJ0c1dpdGhGdW5jdGlvbikg
ewpAQCAtMzQ0NCw3ICszNDQ0LDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVl
U3RhdGVtZQogICAgICAgICAgICAgfSBlbHNlIGlmIChtYXRjaChDTEFTU1RPS0VOKSkgewogICAg
ICAgICAgICAgICAgIHJlc3VsdCA9IHBhcnNlQ2xhc3NEZWNsYXJhdGlvbihjb250ZXh0LCBFeHBv
cnRUeXBlOjpOb3RFeHBvcnRlZCwgRGVjbGFyYXRpb25EZWZhdWx0Q29udGV4dDo6RXhwb3J0RGVm
YXVsdCk7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIEFTU0VSVChtYXRj
aENvbnRleHR1YWxLZXl3b3JkKG1fdm0tPnByb3BlcnR5TmFtZXMtPmFzeW5jKSk7CisgICAgICAg
ICAgICAgICAgQVNTRVJUKG1hdGNoQ29udGV4dHVhbEtleXdvcmQobV92bS5wcm9wZXJ0eU5hbWVz
LT5hc3luYykpOwogICAgICAgICAgICAgICAgIG5leHQoKTsKICAgICAgICAgICAgICAgICBEZXB0
aE1hbmFnZXIgc3RhdGVtZW50RGVwdGgoJm1fc3RhdGVtZW50RGVwdGgpOwogICAgICAgICAgICAg
ICAgIG1fc3RhdGVtZW50RGVwdGggPSAxOwpAQCAtMzQ2NSwxOCArMzQ2NSwxOCBAQCB0ZW1wbGF0
ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lCiAgICAgICAgICAgICBUcmVlRXhwcmVz
c2lvbiBleHByZXNzaW9uID0gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbihjb250ZXh0KTsKICAg
ICAgICAgICAgIGZhaWxJZkZhbHNlKGV4cHJlc3Npb24sICJDYW5ub3QgcGFyc2UgZXhwcmVzc2lv
biIpOwogCi0gICAgICAgICAgICBEZWNsYXJhdGlvblJlc3VsdE1hc2sgZGVjbGFyYXRpb25SZXN1
bHQgPSBkZWNsYXJlVmFyaWFibGUoJm1fdm0tPnByb3BlcnR5TmFtZXMtPnN0YXJEZWZhdWx0UHJp
dmF0ZU5hbWUsIERlY2xhcmF0aW9uVHlwZTo6Q29uc3REZWNsYXJhdGlvbik7CisgICAgICAgICAg
ICBEZWNsYXJhdGlvblJlc3VsdE1hc2sgZGVjbGFyYXRpb25SZXN1bHQgPSBkZWNsYXJlVmFyaWFi
bGUoJm1fdm0ucHJvcGVydHlOYW1lcy0+c3RhckRlZmF1bHRQcml2YXRlTmFtZSwgRGVjbGFyYXRp
b25UeXBlOjpDb25zdERlY2xhcmF0aW9uKTsKICAgICAgICAgICAgIGlmIChkZWNsYXJhdGlvblJl
c3VsdCAmIERlY2xhcmF0aW9uUmVzdWx0OjpJbnZhbGlkRHVwbGljYXRlRGVjbGFyYXRpb24pCiAg
ICAgICAgICAgICAgICAgaW50ZXJuYWxGYWlsV2l0aE1lc3NhZ2UoZmFsc2UsICJPbmx5IG9uZSAn
ZGVmYXVsdCcgZXhwb3J0IGlzIGFsbG93ZWQiKTsKIAotICAgICAgICAgICAgVHJlZUV4cHJlc3Np
b24gYXNzaWdubWVudCA9IGNvbnRleHQuY3JlYXRlQXNzaWduUmVzb2x2ZShsb2NhdGlvbiwgbV92
bS0+cHJvcGVydHlOYW1lcy0+c3RhckRlZmF1bHRQcml2YXRlTmFtZSwgZXhwcmVzc2lvbiwgc3Rh
cnQsIHN0YXJ0LCB0b2tlbkVuZFBvc2l0aW9uKCksIEFzc2lnbm1lbnRDb250ZXh0OjpDb25zdERl
Y2xhcmF0aW9uU3RhdGVtZW50KTsKKyAgICAgICAgICAgIFRyZWVFeHByZXNzaW9uIGFzc2lnbm1l
bnQgPSBjb250ZXh0LmNyZWF0ZUFzc2lnblJlc29sdmUobG9jYXRpb24sIG1fdm0ucHJvcGVydHlO
YW1lcy0+c3RhckRlZmF1bHRQcml2YXRlTmFtZSwgZXhwcmVzc2lvbiwgc3RhcnQsIHN0YXJ0LCB0
b2tlbkVuZFBvc2l0aW9uKCksIEFzc2lnbm1lbnRDb250ZXh0OjpDb25zdERlY2xhcmF0aW9uU3Rh
dGVtZW50KTsKICAgICAgICAgICAgIHJlc3VsdCA9IGNvbnRleHQuY3JlYXRlRXhwclN0YXRlbWVu
dChsb2NhdGlvbiwgYXNzaWdubWVudCwgc3RhcnQsIHRva2VuRW5kUG9zaXRpb24oKSk7CiAgICAg
ICAgICAgICBmYWlsSWZGYWxzZShhdXRvU2VtaUNvbG9uKCksICJFeHBlY3RlZCBhICc7JyBmb2xs
b3dpbmcgYSB0YXJnZXRlZCBleHBvcnQgZGVjbGFyYXRpb24iKTsKICAgICAgICAgfQogICAgICAg
ICBmYWlsSWZGYWxzZShyZXN1bHQsICJDYW5ub3QgcGFyc2UgdGhlIGRlY2xhcmF0aW9uIik7CiAK
LSAgICAgICAgc2VtYW50aWNGYWlsSWZGYWxzZShleHBvcnROYW1lKG1fdm0tPnByb3BlcnR5TmFt
ZXMtPmRlZmF1bHRLZXl3b3JkKSwgIk9ubHkgb25lICdkZWZhdWx0JyBleHBvcnQgaXMgYWxsb3dl
ZCIpOwotICAgICAgICBtX21vZHVsZVNjb3BlRGF0YS0+ZXhwb3J0QmluZGluZygqbG9jYWxOYW1l
LCBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5kZWZhdWx0S2V5d29yZCk7CisgICAgICAgIHNlbWFudGlj
RmFpbElmRmFsc2UoZXhwb3J0TmFtZShtX3ZtLnByb3BlcnR5TmFtZXMtPmRlZmF1bHRLZXl3b3Jk
KSwgIk9ubHkgb25lICdkZWZhdWx0JyBleHBvcnQgaXMgYWxsb3dlZCIpOworICAgICAgICBtX21v
ZHVsZVNjb3BlRGF0YS0+ZXhwb3J0QmluZGluZygqbG9jYWxOYW1lLCBtX3ZtLnByb3BlcnR5TmFt
ZXMtPmRlZmF1bHRLZXl3b3JkKTsKICAgICAgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlRXhwb3J0
RGVmYXVsdERlY2xhcmF0aW9uKGV4cG9ydExvY2F0aW9uLCByZXN1bHQsICpsb2NhbE5hbWUpOwog
ICAgIH0KIApAQCAtMzUxMCw3ICszNTEwLDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVy
PiBUcmVlU3RhdGVtZQogICAgICAgICBoYW5kbGVQcm9kdWN0aW9uT3JGYWlsMihDTE9TRUJSQUNF
LCAifSIsICJlbmQiLCAiZXhwb3J0IGxpc3QiKTsKIAogICAgICAgICB0eXBlbmFtZSBUcmVlQnVp
bGRlcjo6TW9kdWxlTmFtZSBtb2R1bGVOYW1lID0gMDsKLSAgICAgICAgaWYgKG1hdGNoQ29udGV4
dHVhbEtleXdvcmQobV92bS0+cHJvcGVydHlOYW1lcy0+ZnJvbSkpIHsKKyAgICAgICAgaWYgKG1h
dGNoQ29udGV4dHVhbEtleXdvcmQobV92bS5wcm9wZXJ0eU5hbWVzLT5mcm9tKSkgewogICAgICAg
ICAgICAgbmV4dCgpOwogICAgICAgICAgICAgbW9kdWxlTmFtZSA9IHBhcnNlTW9kdWxlTmFtZShj
b250ZXh0KTsKICAgICAgICAgICAgIGZhaWxJZkZhbHNlKG1vZHVsZU5hbWUsICJDYW5ub3QgcGFy
c2UgdGhlICdmcm9tJyBjbGF1c2UiKTsKQEAgLTM1NjYsNyArMzU2Niw3IEBAIHRlbXBsYXRlIDxj
bGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWUKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAg
ICAgIGNhc2UgSURFTlQ6Ci0gICAgICAgICAgICBpZiAoKm1fdG9rZW4ubV9kYXRhLmlkZW50ID09
IG1fdm0tPnByb3BlcnR5TmFtZXMtPmFzeW5jICYmICFtX3Rva2VuLm1fZGF0YS5lc2NhcGVkKSB7
CisgICAgICAgICAgICBpZiAoKm1fdG9rZW4ubV9kYXRhLmlkZW50ID09IG1fdm0ucHJvcGVydHlO
YW1lcy0+YXN5bmMgJiYgIW1fdG9rZW4ubV9kYXRhLmVzY2FwZWQpIHsKICAgICAgICAgICAgICAg
ICBuZXh0KCk7CiAgICAgICAgICAgICAgICAgc2VtYW50aWNGYWlsSWZGYWxzZShtYXRjaChGVU5D
VElPTikgJiYgIW1fbGV4ZXItPmhhc0xpbmVUZXJtaW5hdG9yQmVmb3JlVG9rZW4oKSwgIkV4cGVj
dGVkICdmdW5jdGlvbicga2V5d29yZCBmb2xsb3dpbmcgJ2FzeW5jJyBrZXl3b3JkIHdpdGggbm8g
cHJlY2VkaW5nIGxpbmUgdGVybWluYXRvciIpOwogICAgICAgICAgICAgICAgIERlcHRoTWFuYWdl
ciBzdGF0ZW1lbnREZXB0aCgmbV9zdGF0ZW1lbnREZXB0aCk7CkBAIC0zNjkyLDcgKzM2OTIsNyBA
QCB0ZW1wbGF0ZSA8dHlwZW5hbWUgVHJlZUJ1aWxkZXI+IFRyZWVFeHByCiAgICAgICAgICAgICBy
ZXN0b3JlU2F2ZVBvaW50KHNhdmVQb2ludCk7CiAgICAgICAgICAgICBib29sIGlzQXN5bmNBcnJv
dyA9IGZhbHNlOwogICAgICAgICAgICAgaWYgKFVOTElLRUxZKGNsYXNzaWZpZXIuaW5kaWNhdGVz
UG9zc2libGVBc3luY0Fycm93RnVuY3Rpb24oKSkpIHsKLSAgICAgICAgICAgICAgICBpZiAobWF0
Y2hDb250ZXh0dWFsS2V5d29yZChtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5hc3luYykpIHsKKyAgICAg
ICAgICAgICAgICBpZiAobWF0Y2hDb250ZXh0dWFsS2V5d29yZChtX3ZtLnByb3BlcnR5TmFtZXMt
PmFzeW5jKSkgewogICAgICAgICAgICAgICAgICAgICBuZXh0KCk7CiAgICAgICAgICAgICAgICAg
ICAgIGlzQXN5bmNBcnJvdyA9ICFtX2xleGVyLT5oYXNMaW5lVGVybWluYXRvckJlZm9yZVRva2Vu
KCk7CiAgICAgICAgICAgICAgICAgfQpAQCAtMzc2Nyw4ICszNzY3LDggQEAgdGVtcGxhdGUgPHR5
cGVuYW1lIFRyZWVCdWlsZGVyPiBUcmVlRXhwcgogICAgICAgICBtX3BhcnNlclN0YXRlLmFzc2ln
bm1lbnRDb3VudCsrOwogICAgICAgICBuZXh0KFRyZWVCdWlsZGVyOjpEb250QnVpbGRTdHJpbmdz
KTsKICAgICAgICAgaWYgKHN0cmljdE1vZGUoKSAmJiBtX3BhcnNlclN0YXRlLmxhc3RJZGVudGlm
aWVyICYmIGNvbnRleHQuaXNSZXNvbHZlKGxocykpIHsKLSAgICAgICAgICAgIGZhaWxJZlRydWVJ
ZlN0cmljdChtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5ldmFsID09ICptX3BhcnNlclN0YXRlLmxhc3RJ
ZGVudGlmaWVyLCAiQ2Fubm90IG1vZGlmeSAnZXZhbCcgaW4gc3RyaWN0IG1vZGUiKTsKLSAgICAg
ICAgICAgIGZhaWxJZlRydWVJZlN0cmljdChtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5hcmd1bWVudHMg
PT0gKm1fcGFyc2VyU3RhdGUubGFzdElkZW50aWZpZXIsICJDYW5ub3QgbW9kaWZ5ICdhcmd1bWVu
dHMnIGluIHN0cmljdCBtb2RlIik7CisgICAgICAgICAgICBmYWlsSWZUcnVlSWZTdHJpY3QobV92
bS5wcm9wZXJ0eU5hbWVzLT5ldmFsID09ICptX3BhcnNlclN0YXRlLmxhc3RJZGVudGlmaWVyLCAi
Q2Fubm90IG1vZGlmeSAnZXZhbCcgaW4gc3RyaWN0IG1vZGUiKTsKKyAgICAgICAgICAgIGZhaWxJ
ZlRydWVJZlN0cmljdChtX3ZtLnByb3BlcnR5TmFtZXMtPmFyZ3VtZW50cyA9PSAqbV9wYXJzZXJT
dGF0ZS5sYXN0SWRlbnRpZmllciwgIkNhbm5vdCBtb2RpZnkgJ2FyZ3VtZW50cycgaW4gc3RyaWN0
IG1vZGUiKTsKICAgICAgICAgICAgIG1fcGFyc2VyU3RhdGUubGFzdElkZW50aWZpZXIgPSAwOwog
ICAgICAgICB9CiAgICAgICAgIGxocyA9IHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oY29udGV4
dCk7CkBAIC0zOTcxLDcgKzM5NzEsNyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRy
ZWVQcm9wZXJ0CiBwYXJzZVByb3BlcnR5OgogICAgIHN3aXRjaCAobV90b2tlbi5tX3R5cGUpIHsK
ICAgICBjYXNlIElERU5UOgotICAgICAgICBpZiAoVU5MSUtFTFkoKm1fdG9rZW4ubV9kYXRhLmlk
ZW50ID09IG1fdm0tPnByb3BlcnR5TmFtZXMtPmFzeW5jICYmICFtX3Rva2VuLm1fZGF0YS5lc2Nh
cGVkKSkgeworICAgICAgICBpZiAoVU5MSUtFTFkoKm1fdG9rZW4ubV9kYXRhLmlkZW50ID09IG1f
dm0ucHJvcGVydHlOYW1lcy0+YXN5bmMgJiYgIW1fdG9rZW4ubV9kYXRhLmVzY2FwZWQpKSB7CiAg
ICAgICAgICAgICBpZiAocGFyc2VNb2RlID09IFNvdXJjZVBhcnNlTW9kZTo6TWV0aG9kTW9kZSkg
ewogICAgICAgICAgICAgICAgIFNhdmVQb2ludCBzYXZlUG9pbnQgPSBjcmVhdGVTYXZlUG9pbnQo
KTsKICAgICAgICAgICAgICAgICBuZXh0KCk7CkBAIC00MDAxLDcgKzQwMDEsNyBAQCBuYW1lZFBy
b3BlcnR5OgogICAgICAgICB1bnNpZ25lZCBnZXR0ZXJPclNldHRlclN0YXJ0T2Zmc2V0ID0gdG9r
ZW5TdGFydCgpOwogICAgICAgICBKU1Rva2VuIGlkZW50VG9rZW4gPSBtX3Rva2VuOwogCi0gICAg
ICAgIGlmIChjb21wbGV0ZSB8fCAod2FzSWRlbnQgJiYgIWlzR2VuZXJhdG9yTWV0aG9kUGFyc2VN
b2RlKHBhcnNlTW9kZSkgICYmICgqaWRlbnQgPT0gbV92bS0+cHJvcGVydHlOYW1lcy0+Z2V0IHx8
ICppZGVudCA9PSBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5zZXQpKSkKKyAgICAgICAgaWYgKGNvbXBs
ZXRlIHx8ICh3YXNJZGVudCAmJiAhaXNHZW5lcmF0b3JNZXRob2RQYXJzZU1vZGUocGFyc2VNb2Rl
KSAgJiYgKCppZGVudCA9PSBtX3ZtLnByb3BlcnR5TmFtZXMtPmdldCB8fCAqaWRlbnQgPT0gbV92
bS5wcm9wZXJ0eU5hbWVzLT5zZXQpKSkKICAgICAgICAgICAgIG5leHRFeHBlY3RJZGVudGlmaWVy
KExleGVyRmxhZ3NJZ25vcmVSZXNlcnZlZFdvcmRzKTsKICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgbmV4dEV4cGVjdElkZW50aWZpZXIoTGV4ZXJGbGFnc0lnbm9yZVJlc2VydmVkV29yZHMgfCBU
cmVlQnVpbGRlcjo6RG9udEJ1aWxkS2V5d29yZHMpOwpAQCAtNDAxMSw3ICs0MDExLDcgQEAgbmFt
ZWRQcm9wZXJ0eToKICAgICAgICAgICAgIFRyZWVFeHByZXNzaW9uIG5vZGUgPSBwYXJzZUFzc2ln
bm1lbnRFeHByZXNzaW9uT3JQcm9wYWdhdGVFcnJvckNsYXNzKGNvbnRleHQpOwogICAgICAgICAg
ICAgZmFpbElmRmFsc2Uobm9kZSwgIkNhbm5vdCBwYXJzZSBleHByZXNzaW9uIGZvciBwcm9wZXJ0
eSBkZWNsYXJhdGlvbiIpOwogICAgICAgICAgICAgY29udGV4dC5zZXRFbmRPZmZzZXQobm9kZSwg
bV9sZXhlci0+Y3VycmVudE9mZnNldCgpKTsKLSAgICAgICAgICAgIEluZmVyTmFtZSBpbmZlck5h
bWUgPSBpZGVudCAmJiAqaWRlbnQgPT0gbV92bS0+cHJvcGVydHlOYW1lcy0+dW5kZXJzY29yZVBy
b3RvID8gSW5mZXJOYW1lOjpEaXNhbGxvd2VkIDogSW5mZXJOYW1lOjpBbGxvd2VkOworICAgICAg
ICAgICAgSW5mZXJOYW1lIGluZmVyTmFtZSA9IGlkZW50ICYmICppZGVudCA9PSBtX3ZtLnByb3Bl
cnR5TmFtZXMtPnVuZGVyc2NvcmVQcm90byA/IEluZmVyTmFtZTo6RGlzYWxsb3dlZCA6IEluZmVy
TmFtZTo6QWxsb3dlZDsKICAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZVByb3BlcnR5
KGlkZW50LCBub2RlLCBQcm9wZXJ0eU5vZGU6OkNvbnN0YW50LCBQcm9wZXJ0eU5vZGU6OlVua25v
d24sIGNvbXBsZXRlLCBTdXBlckJpbmRpbmc6Ok5vdE5lZWRlZCwgaW5mZXJOYW1lLCBDbGFzc0Vs
ZW1lbnRUYWc6Ok5vKTsKICAgICAgICAgfQogCkBAIC00MDI4LDcgKzQwMjgsNyBAQCBuYW1lZFBy
b3BlcnR5OgogICAgICAgICAgICAgc2VtYW50aWNGYWlsdXJlRHVlVG9LZXl3b3JkQ2hlY2tpbmdU
b2tlbihpZGVudFRva2VuLCAic2hvcnRoYW5kIHByb3BlcnR5IG5hbWUiKTsKICAgICAgICAgICAg
IEpTVGV4dFBvc2l0aW9uIHN0YXJ0ID0gdG9rZW5TdGFydFBvc2l0aW9uKCk7CiAgICAgICAgICAg
ICBKU1Rva2VuTG9jYXRpb24gbG9jYXRpb24odG9rZW5Mb2NhdGlvbigpKTsKLSAgICAgICAgICAg
IGN1cnJlbnRTY29wZSgpLT51c2VWYXJpYWJsZShpZGVudCwgbV92bS0+cHJvcGVydHlOYW1lcy0+
ZXZhbCA9PSAqaWRlbnQpOworICAgICAgICAgICAgY3VycmVudFNjb3BlKCktPnVzZVZhcmlhYmxl
KGlkZW50LCBtX3ZtLnByb3BlcnR5TmFtZXMtPmV2YWwgPT0gKmlkZW50KTsKICAgICAgICAgICAg
IGlmIChjdXJyZW50U2NvcGUoKS0+aXNBcnJvd0Z1bmN0aW9uKCkpCiAgICAgICAgICAgICAgICAg
Y3VycmVudFNjb3BlKCktPnNldElubmVyQXJyb3dGdW5jdGlvblVzZXNFdmFsKCk7CiAgICAgICAg
ICAgICBUcmVlRXhwcmVzc2lvbiBub2RlID0gY29udGV4dC5jcmVhdGVSZXNvbHZlKGxvY2F0aW9u
LCAqaWRlbnQsIHN0YXJ0LCBsYXN0VG9rZW5FbmRQb3NpdGlvbigpKTsKQEAgLTQwMzksOSArNDAz
OSw5IEBAIG5hbWVkUHJvcGVydHk6CiAgICAgICAgICAgICBjbGFzc2lmeUV4cHJlc3Npb25FcnJv
cihFcnJvckluZGljYXRlc1BhdHRlcm4pOwogCiAgICAgICAgIFByb3BlcnR5Tm9kZTo6VHlwZSB0
eXBlOwotICAgICAgICBpZiAoKmlkZW50ID09IG1fdm0tPnByb3BlcnR5TmFtZXMtPmdldCkKKyAg
ICAgICAgaWYgKCppZGVudCA9PSBtX3ZtLnByb3BlcnR5TmFtZXMtPmdldCkKICAgICAgICAgICAg
IHR5cGUgPSBQcm9wZXJ0eU5vZGU6OkdldHRlcjsKLSAgICAgICAgZWxzZSBpZiAoKmlkZW50ID09
IG1fdm0tPnByb3BlcnR5TmFtZXMtPnNldCkKKyAgICAgICAgZWxzZSBpZiAoKmlkZW50ID09IG1f
dm0ucHJvcGVydHlOYW1lcy0+c2V0KQogICAgICAgICAgICAgdHlwZSA9IFByb3BlcnR5Tm9kZTo6
U2V0dGVyOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBmYWlsV2l0aE1lc3NhZ2UoIkV4cGVj
dGVkIGEgJzonIGZvbGxvd2luZyB0aGUgcHJvcGVydHkgbmFtZSAnIiwgaWRlbnQtPmltcGwoKSwg
IiciKTsKQEAgLTQwNTMsNyArNDA1Myw3IEBAIG5hbWVkUHJvcGVydHk6CiAgICAgICAgIG5leHQo
KTsKIAogICAgICAgICBpZiAobWF0Y2goT1BFTlBBUkVOKSkgewotICAgICAgICAgICAgY29uc3Qg
SWRlbnRpZmllciYgaWRlbnQgPSBtX3BhcnNlckFyZW5hLmlkZW50aWZpZXJBcmVuYSgpLm1ha2VO
dW1lcmljSWRlbnRpZmllcihjb25zdF9jYXN0PFZNKj4obV92bSksIHByb3BlcnR5TmFtZSk7Cisg
ICAgICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IG1fcGFyc2VyQXJlbmEuaWRlbnRp
ZmllckFyZW5hKCkubWFrZU51bWVyaWNJZGVudGlmaWVyKGNvbnN0X2Nhc3Q8Vk0mPihtX3ZtKSwg
cHJvcGVydHlOYW1lKTsKICAgICAgICAgICAgIGF1dG8gbWV0aG9kID0gcGFyc2VQcm9wZXJ0eU1l
dGhvZChjb250ZXh0LCAmaWRlbnQsIHBhcnNlTW9kZSk7CiAgICAgICAgICAgICBwcm9wYWdhdGVF
cnJvcigpOwogICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlUHJvcGVydHkoJmlkZW50
LCBtZXRob2QsIFByb3BlcnR5Tm9kZTo6Q29uc3RhbnQsIFByb3BlcnR5Tm9kZTo6VW5rbm93biwg
Y29tcGxldGUsIFN1cGVyQmluZGluZzo6TmVlZGVkLCBJbmZlck5hbWU6OkFsbG93ZWQsIENsYXNz
RWxlbWVudFRhZzo6Tm8pOwpAQCAtNDA2NCw3ICs0MDY0LDcgQEAgbmFtZWRQcm9wZXJ0eToKICAg
ICAgICAgVHJlZUV4cHJlc3Npb24gbm9kZSA9IHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oY29u
dGV4dCk7CiAgICAgICAgIGZhaWxJZkZhbHNlKG5vZGUsICJDYW5ub3QgcGFyc2UgZXhwcmVzc2lv
biBmb3IgcHJvcGVydHkgZGVjbGFyYXRpb24iKTsKICAgICAgICAgY29udGV4dC5zZXRFbmRPZmZz
ZXQobm9kZSwgbV9sZXhlci0+Y3VycmVudE9mZnNldCgpKTsKLSAgICAgICAgcmV0dXJuIGNvbnRl
eHQuY3JlYXRlUHJvcGVydHkoY29uc3RfY2FzdDxWTSo+KG1fdm0pLCBtX3BhcnNlckFyZW5hLCBw
cm9wZXJ0eU5hbWUsIG5vZGUsIFByb3BlcnR5Tm9kZTo6Q29uc3RhbnQsIFByb3BlcnR5Tm9kZTo6
VW5rbm93biwgY29tcGxldGUsIFN1cGVyQmluZGluZzo6Tm90TmVlZGVkLCBDbGFzc0VsZW1lbnRU
YWc6Ok5vKTsKKyAgICAgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlUHJvcGVydHkoY29uc3RfY2Fz
dDxWTSY+KG1fdm0pLCBtX3BhcnNlckFyZW5hLCBwcm9wZXJ0eU5hbWUsIG5vZGUsIFByb3BlcnR5
Tm9kZTo6Q29uc3RhbnQsIFByb3BlcnR5Tm9kZTo6VW5rbm93biwgY29tcGxldGUsIFN1cGVyQmlu
ZGluZzo6Tm90TmVlZGVkLCBDbGFzc0VsZW1lbnRUYWc6Ok5vKTsKICAgICB9CiAgICAgY2FzZSBP
UEVOQlJBQ0tFVDogewogICAgICAgICBuZXh0KCk7CkBAIC00MDczLDcgKzQwNzMsNyBAQCBuYW1l
ZFByb3BlcnR5OgogICAgICAgICBoYW5kbGVQcm9kdWN0aW9uT3JGYWlsKENMT1NFQlJBQ0tFVCwg
Il0iLCAiZW5kIiwgImNvbXB1dGVkIHByb3BlcnR5IG5hbWUiKTsKIAogICAgICAgICBpZiAobWF0
Y2goT1BFTlBBUkVOKSkgewotICAgICAgICAgICAgYXV0byBtZXRob2QgPSBwYXJzZVByb3BlcnR5
TWV0aG9kKGNvbnRleHQsICZtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5udWxsSWRlbnRpZmllciwgcGFy
c2VNb2RlKTsKKyAgICAgICAgICAgIGF1dG8gbWV0aG9kID0gcGFyc2VQcm9wZXJ0eU1ldGhvZChj
b250ZXh0LCAmbV92bS5wcm9wZXJ0eU5hbWVzLT5udWxsSWRlbnRpZmllciwgcGFyc2VNb2RlKTsK
ICAgICAgICAgICAgIHByb3BhZ2F0ZUVycm9yKCk7CiAgICAgICAgICAgICByZXR1cm4gY29udGV4
dC5jcmVhdGVQcm9wZXJ0eShwcm9wZXJ0eU5hbWUsIG1ldGhvZCwgc3RhdGljX2Nhc3Q8UHJvcGVy
dHlOb2RlOjpUeXBlPihQcm9wZXJ0eU5vZGU6OkNvbnN0YW50IHwgUHJvcGVydHlOb2RlOjpDb21w
dXRlZCksIFByb3BlcnR5Tm9kZTo6S25vd25EaXJlY3QsIGNvbXBsZXRlLCBTdXBlckJpbmRpbmc6
Ok5lZWRlZCwgQ2xhc3NFbGVtZW50VGFnOjpObyk7CiAgICAgICAgIH0KQEAgLTQxMjYsOSArNDEy
Niw5IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVByb3BlcnQKIAogICAgIGlm
IChtYXRjaFNwZWNJZGVudGlmaWVyKCkgfHwgbWF0Y2goU1RSSU5HKSB8fCBtX3Rva2VuLm1fdHlw
ZSAmIEtleXdvcmRUb2tlbkZsYWcpIHsKICAgICAgICAgc3RyaW5nUHJvcGVydHlOYW1lID0gbV90
b2tlbi5tX2RhdGEuaWRlbnQ7Ci0gICAgICAgIHNlbWFudGljRmFpbElmVHJ1ZSh0YWcgPT0gQ2xh
c3NFbGVtZW50VGFnOjpTdGF0aWMgJiYgKnN0cmluZ1Byb3BlcnR5TmFtZSA9PSBtX3ZtLT5wcm9w
ZXJ0eU5hbWVzLT5wcm90b3R5cGUsCisgICAgICAgIHNlbWFudGljRmFpbElmVHJ1ZSh0YWcgPT0g
Q2xhc3NFbGVtZW50VGFnOjpTdGF0aWMgJiYgKnN0cmluZ1Byb3BlcnR5TmFtZSA9PSBtX3ZtLnBy
b3BlcnR5TmFtZXMtPnByb3RvdHlwZSwKICAgICAgICAgICAgICJDYW5ub3QgZGVjbGFyZSBhIHN0
YXRpYyBtZXRob2QgbmFtZWQgJ3Byb3RvdHlwZSciKTsKLSAgICAgICAgc2VtYW50aWNGYWlsSWZU
cnVlKHRhZyA9PSBDbGFzc0VsZW1lbnRUYWc6Okluc3RhbmNlICYmICpzdHJpbmdQcm9wZXJ0eU5h
bWUgPT0gbV92bS0+cHJvcGVydHlOYW1lcy0+Y29uc3RydWN0b3IsCisgICAgICAgIHNlbWFudGlj
RmFpbElmVHJ1ZSh0YWcgPT0gQ2xhc3NFbGVtZW50VGFnOjpJbnN0YW5jZSAmJiAqc3RyaW5nUHJv
cGVydHlOYW1lID09IG1fdm0ucHJvcGVydHlOYW1lcy0+Y29uc3RydWN0b3IsCiAgICAgICAgICAg
ICAiQ2Fubm90IGRlY2xhcmUgYSBnZXR0ZXIgb3Igc2V0dGVyIG5hbWVkICdjb25zdHJ1Y3Rvcici
KTsKICAgICAgICAgbmV4dCgpOwogICAgIH0gZWxzZSBpZiAobWF0Y2goRE9VQkxFKSB8fCBtYXRj
aChJTlRFR0VSKSkgewpAQCAtNDE1Nyw3ICs0MTU3LDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVC
dWlsZGVyPiBUcmVlUHJvcGVydAogICAgIGlmIChjb21wdXRlZFByb3BlcnR5TmFtZSkKICAgICAg
ICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlR2V0dGVyT3JTZXR0ZXJQcm9wZXJ0eShsb2NhdGlvbiwg
c3RhdGljX2Nhc3Q8UHJvcGVydHlOb2RlOjpUeXBlPih0eXBlIHwgUHJvcGVydHlOb2RlOjpDb21w
dXRlZCksIHN0cmljdCwgY29tcHV0ZWRQcm9wZXJ0eU5hbWUsIGluZm8sIHRhZyk7CiAKLSAgICBy
ZXR1cm4gY29udGV4dC5jcmVhdGVHZXR0ZXJPclNldHRlclByb3BlcnR5KGNvbnN0X2Nhc3Q8Vk0q
PihtX3ZtKSwgbV9wYXJzZXJBcmVuYSwgbG9jYXRpb24sIHR5cGUsIHN0cmljdCwgbnVtZXJpY1By
b3BlcnR5TmFtZSwgaW5mbywgdGFnKTsKKyAgICByZXR1cm4gY29udGV4dC5jcmVhdGVHZXR0ZXJP
clNldHRlclByb3BlcnR5KGNvbnN0X2Nhc3Q8Vk0mPihtX3ZtKSwgbV9wYXJzZXJBcmVuYSwgbG9j
YXRpb24sIHR5cGUsIHN0cmljdCwgbnVtZXJpY1Byb3BlcnR5TmFtZSwgaW5mbywgdGFnKTsKIH0K
IAogdGVtcGxhdGUgPHR5cGVuYW1lIExleGVyVHlwZT4KQEAgLTQyMjQsNyArNDIyNCw3IEBAIHRl
bXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUV4cHJlc3MKIAogICAgIGJvb2wgc2VlblVu
ZGVyc2NvcmVQcm90byA9IGZhbHNlOwogICAgIGlmIChzaG91bGRDaGVja1Byb3BlcnR5Rm9yVW5k
ZXJzY29yZVByb3RvRHVwbGljYXRlKGNvbnRleHQsIHByb3BlcnR5KSkKLSAgICAgICAgc2VlblVu
ZGVyc2NvcmVQcm90byA9ICpjb250ZXh0LmdldE5hbWUocHJvcGVydHkpID09IG1fdm0tPnByb3Bl
cnR5TmFtZXMtPnVuZGVyc2NvcmVQcm90bzsKKyAgICAgICAgc2VlblVuZGVyc2NvcmVQcm90byA9
ICpjb250ZXh0LmdldE5hbWUocHJvcGVydHkpID09IG1fdm0ucHJvcGVydHlOYW1lcy0+dW5kZXJz
Y29yZVByb3RvOwogCiAgICAgVHJlZVByb3BlcnR5TGlzdCBwcm9wZXJ0eUxpc3QgPSBjb250ZXh0
LmNyZWF0ZVByb3BlcnR5TGlzdChsb2NhdGlvbiwgcHJvcGVydHkpOwogICAgIFRyZWVQcm9wZXJ0
eUxpc3QgdGFpbCA9IHByb3BlcnR5TGlzdDsKQEAgLTQyNDAsNyArNDI0MCw3IEBAIHRlbXBsYXRl
IDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUV4cHJlc3MKICAgICAgICAgICAgIHJldHVybiBwYXJz
ZVN0cmljdE9iamVjdExpdGVyYWwoY29udGV4dCk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKHNo
b3VsZENoZWNrUHJvcGVydHlGb3JVbmRlcnNjb3JlUHJvdG9EdXBsaWNhdGUoY29udGV4dCwgcHJv
cGVydHkpKSB7Ci0gICAgICAgICAgICBpZiAoKmNvbnRleHQuZ2V0TmFtZShwcm9wZXJ0eSkgPT0g
bV92bS0+cHJvcGVydHlOYW1lcy0+dW5kZXJzY29yZVByb3RvKSB7CisgICAgICAgICAgICBpZiAo
KmNvbnRleHQuZ2V0TmFtZShwcm9wZXJ0eSkgPT0gbV92bS5wcm9wZXJ0eU5hbWVzLT51bmRlcnNj
b3JlUHJvdG8pIHsKICAgICAgICAgICAgICAgICBzZW1hbnRpY0ZhaWxJZlRydWUoc2VlblVuZGVy
c2NvcmVQcm90bywgIkF0dGVtcHRlZCB0byByZWRlZmluZSBfX3Byb3RvX18gcHJvcGVydHkiKTsK
ICAgICAgICAgICAgICAgICBzZWVuVW5kZXJzY29yZVByb3RvID0gdHJ1ZTsKICAgICAgICAgICAg
IH0KQEAgLTQyNzQsNyArNDI3NCw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJl
ZUV4cHJlc3MKIAogICAgIGJvb2wgc2VlblVuZGVyc2NvcmVQcm90byA9IGZhbHNlOwogICAgIGlm
IChzaG91bGRDaGVja1Byb3BlcnR5Rm9yVW5kZXJzY29yZVByb3RvRHVwbGljYXRlKGNvbnRleHQs
IHByb3BlcnR5KSkKLSAgICAgICAgc2VlblVuZGVyc2NvcmVQcm90byA9ICpjb250ZXh0LmdldE5h
bWUocHJvcGVydHkpID09IG1fdm0tPnByb3BlcnR5TmFtZXMtPnVuZGVyc2NvcmVQcm90bzsKKyAg
ICAgICAgc2VlblVuZGVyc2NvcmVQcm90byA9ICpjb250ZXh0LmdldE5hbWUocHJvcGVydHkpID09
IG1fdm0ucHJvcGVydHlOYW1lcy0+dW5kZXJzY29yZVByb3RvOwogCiAgICAgVHJlZVByb3BlcnR5
TGlzdCBwcm9wZXJ0eUxpc3QgPSBjb250ZXh0LmNyZWF0ZVByb3BlcnR5TGlzdChsb2NhdGlvbiwg
cHJvcGVydHkpOwogICAgIFRyZWVQcm9wZXJ0eUxpc3QgdGFpbCA9IHByb3BlcnR5TGlzdDsKQEAg
LTQyODYsNyArNDI4Niw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUV4cHJl
c3MKICAgICAgICAgcHJvcGVydHkgPSBwYXJzZVByb3BlcnR5KGNvbnRleHQsIHRydWUpOwogICAg
ICAgICBmYWlsSWZGYWxzZShwcm9wZXJ0eSwgIkNhbm5vdCBwYXJzZSBvYmplY3QgbGl0ZXJhbCBw
cm9wZXJ0eSIpOwogICAgICAgICBpZiAoc2hvdWxkQ2hlY2tQcm9wZXJ0eUZvclVuZGVyc2NvcmVQ
cm90b0R1cGxpY2F0ZShjb250ZXh0LCBwcm9wZXJ0eSkpIHsKLSAgICAgICAgICAgIGlmICgqY29u
dGV4dC5nZXROYW1lKHByb3BlcnR5KSA9PSBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT51bmRlcnNjb3Jl
UHJvdG8pIHsKKyAgICAgICAgICAgIGlmICgqY29udGV4dC5nZXROYW1lKHByb3BlcnR5KSA9PSBt
X3ZtLnByb3BlcnR5TmFtZXMtPnVuZGVyc2NvcmVQcm90bykgewogICAgICAgICAgICAgICAgIHNl
bWFudGljRmFpbElmVHJ1ZShzZWVuVW5kZXJzY29yZVByb3RvLCAiQXR0ZW1wdGVkIHRvIHJlZGVm
aW5lIF9fcHJvdG9fXyBwcm9wZXJ0eSIpOwogICAgICAgICAgICAgICAgIHNlZW5VbmRlcnNjb3Jl
UHJvdG8gPSB0cnVlOwogICAgICAgICAgICAgfQpAQCAtNDM4MSw3ICs0MzgxLDcgQEAgdGVtcGxh
dGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlQ2xhc3NFeAogewogICAgIEFTU0VSVChtYXRjaChD
TEFTU1RPS0VOKSk7CiAgICAgUGFyc2VyQ2xhc3NJbmZvPFRyZWVCdWlsZGVyPiBpbmZvOwotICAg
IGluZm8uY2xhc3NOYW1lID0gJm1fdm0tPnByb3BlcnR5TmFtZXMtPm51bGxJZGVudGlmaWVyOwor
ICAgIGluZm8uY2xhc3NOYW1lID0gJm1fdm0ucHJvcGVydHlOYW1lcy0+bnVsbElkZW50aWZpZXI7
CiAgICAgcmV0dXJuIHBhcnNlQ2xhc3MoY29udGV4dCwgRnVuY3Rpb25OYW1lUmVxdWlyZW1lbnRz
OjpOb25lLCBpbmZvKTsKIH0KIApAQCAtNDM5Myw3ICs0MzkzLDcgQEAgdGVtcGxhdGUgPGNsYXNz
IFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzcwogICAgIHVuc2lnbmVkIGZ1bmN0aW9uS2V5d29yZFN0
YXJ0ID0gdG9rZW5TdGFydCgpOwogICAgIG5leHQoKTsKICAgICBQYXJzZXJGdW5jdGlvbkluZm88
VHJlZUJ1aWxkZXI+IGZ1bmN0aW9uSW5mbzsKLSAgICBmdW5jdGlvbkluZm8ubmFtZSA9ICZtX3Zt
LT5wcm9wZXJ0eU5hbWVzLT5udWxsSWRlbnRpZmllcjsKKyAgICBmdW5jdGlvbkluZm8ubmFtZSA9
ICZtX3ZtLnByb3BlcnR5TmFtZXMtPm51bGxJZGVudGlmaWVyOwogICAgIFNvdXJjZVBhcnNlTW9k
ZSBwYXJzZU1vZGUgPSBTb3VyY2VQYXJzZU1vZGU6Ok5vcm1hbEZ1bmN0aW9uTW9kZTsKICAgICBp
ZiAoY29uc3VtZShUSU1FUykpCiAgICAgICAgIHBhcnNlTW9kZSA9IFNvdXJjZVBhcnNlTW9kZTo6
R2VuZXJhdG9yV3JhcHBlckZ1bmN0aW9uTW9kZTsKQEAgLTQ0MTQsNyArNDQxNCw3IEBAIHRlbXBs
YXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUV4cHJlc3MKICAgICAgICAgcGFyc2VNb2RlID0g
U291cmNlUGFyc2VNb2RlOjpBc3luY0dlbmVyYXRvcldyYXBwZXJGdW5jdGlvbk1vZGU7CiAKICAg
ICBQYXJzZXJGdW5jdGlvbkluZm88VHJlZUJ1aWxkZXI+IGZ1bmN0aW9uSW5mbzsKLSAgICBmdW5j
dGlvbkluZm8ubmFtZSA9ICZtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5udWxsSWRlbnRpZmllcjsKKyAg
ICBmdW5jdGlvbkluZm8ubmFtZSA9ICZtX3ZtLnByb3BlcnR5TmFtZXMtPm51bGxJZGVudGlmaWVy
OwogICAgIGZhaWxJZkZhbHNlKHBhcnNlRnVuY3Rpb25JbmZvKGNvbnRleHQsIEZ1bmN0aW9uTmFt
ZVJlcXVpcmVtZW50czo6Tm9uZSwgcGFyc2VNb2RlLCBmYWxzZSwgQ29uc3RydWN0b3JLaW5kOjpO
b25lLCBTdXBlckJpbmRpbmc6Ok5vdE5lZWRlZCwgZnVuY3Rpb25LZXl3b3JkU3RhcnQsIGZ1bmN0
aW9uSW5mbywgRnVuY3Rpb25EZWZpbml0aW9uVHlwZTo6RXhwcmVzc2lvbiksIHBhcnNlTW9kZSA9
PSBTb3VyY2VQYXJzZU1vZGU6OkFzeW5jRnVuY3Rpb25Nb2RlID8gIkNhbm5vdCBwYXJzZSBhc3lu
YyBmdW5jdGlvbiBleHByZXNzaW9uIiA6ICJDYW5ub3QgcGFyc2UgYXN5bmMgZ2VuZXJhdG9yIGZ1
bmN0aW9uIGV4cHJlc3Npb24iKTsKICAgICByZXR1cm4gY29udGV4dC5jcmVhdGVGdW5jdGlvbkV4
cHIobG9jYXRpb24sIGZ1bmN0aW9uSW5mbyk7CiB9CkBAIC00NTI2LDcgKzQ1MjYsNyBAQCB0ZW1w
bGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVFeHByZXNzCiAKICAgICAgICAgZ290byBpZGVu
dGlmaWVyRXhwcmVzc2lvbjsKICAgICBjYXNlIElERU5UOiB7Ci0gICAgICAgIGlmIChVTkxJS0VM
WSgqbV90b2tlbi5tX2RhdGEuaWRlbnQgPT0gbV92bS0+cHJvcGVydHlOYW1lcy0+YXN5bmMgJiYg
IW1fdG9rZW4ubV9kYXRhLmVzY2FwZWQpKSB7CisgICAgICAgIGlmIChVTkxJS0VMWSgqbV90b2tl
bi5tX2RhdGEuaWRlbnQgPT0gbV92bS5wcm9wZXJ0eU5hbWVzLT5hc3luYyAmJiAhbV90b2tlbi5t
X2RhdGEuZXNjYXBlZCkpIHsKICAgICAgICAgICAgIEpTVGV4dFBvc2l0aW9uIHN0YXJ0ID0gdG9r
ZW5TdGFydFBvc2l0aW9uKCk7CiAgICAgICAgICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9
IG1fdG9rZW4ubV9kYXRhLmlkZW50OwogICAgICAgICAgICAgSlNUb2tlbkxvY2F0aW9uIGxvY2F0
aW9uKHRva2VuTG9jYXRpb24oKSk7CkBAIC00NTUxLDcgKzQ1NTEsNyBAQCB0ZW1wbGF0ZSA8Y2xh
c3MgVHJlZUJ1aWxkZXI+IFRyZWVFeHByZXNzCiAgICAgICAgIGlmIChVTkxJS0VMWShtYXRjaChB
UlJPV0ZVTkNUSU9OKSkpCiAgICAgICAgICAgICByZXR1cm4gMDsKIAotICAgICAgICByZXR1cm4g
Y3JlYXRlUmVzb2x2ZUFuZFVzZVZhcmlhYmxlKGNvbnRleHQsIGlkZW50LCAqaWRlbnQgPT0gbV92
bS0+cHJvcGVydHlOYW1lcy0+ZXZhbCwgc3RhcnQsIGxvY2F0aW9uKTsKKyAgICAgICAgcmV0dXJu
IGNyZWF0ZVJlc29sdmVBbmRVc2VWYXJpYWJsZShjb250ZXh0LCBpZGVudCwgKmlkZW50ID09IG1f
dm0ucHJvcGVydHlOYW1lcy0+ZXZhbCwgc3RhcnQsIGxvY2F0aW9uKTsKICAgICB9CiAgICAgY2Fz
ZSBCSUdJTlQ6IHsKICAgICAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSBtX3Rva2VuLm1f
ZGF0YS5iaWdJbnRTdHJpbmc7CkBAIC00NzM2LDcgKzQ3MzYsNyBAQCB0ZW1wbGF0ZSA8Y2xhc3Mg
VHJlZUJ1aWxkZXI+IFRyZWVFeHByZXNzCiAgICAgYm9vbCBiYXNlSXNOZXdUYXJnZXQgPSBmYWxz
ZTsKICAgICBpZiAobmV3Q291bnQgJiYgbWF0Y2goRE9UKSkgewogICAgICAgICBuZXh0KCk7Ci0g
ICAgICAgIGlmIChtYXRjaENvbnRleHR1YWxLZXl3b3JkKG1fdm0tPnByb3BlcnR5TmFtZXMtPnRh
cmdldCkpIHsKKyAgICAgICAgaWYgKG1hdGNoQ29udGV4dHVhbEtleXdvcmQobV92bS5wcm9wZXJ0
eU5hbWVzLT50YXJnZXQpKSB7CiAgICAgICAgICAgICBTY29wZVJlZiBjbG9zZXN0T3JkaW5hcnlG
dW5jdGlvblNjb3BlID0gY2xvc2VzdFBhcmVudE9yZGluYXJ5RnVuY3Rpb25Ob25MZXhpY2FsU2Nv
cGUoKTsKICAgICAgICAgICAgIHNlbWFudGljRmFpbElmRmFsc2UoY3VycmVudFNjb3BlKCktPmlz
RnVuY3Rpb24oKSB8fCBjbG9zZXN0T3JkaW5hcnlGdW5jdGlvblNjb3BlLT5ldmFsQ29udGV4dFR5
cGUoKSA9PSBFdmFsQ29udGV4dFR5cGU6OkZ1bmN0aW9uRXZhbENvbnRleHQsICJuZXcudGFyZ2V0
IGlzIG9ubHkgdmFsaWQgaW5zaWRlIGZ1bmN0aW9ucyIpOwogICAgICAgICAgICAgYmFzZUlzTmV3
VGFyZ2V0ID0gdHJ1ZTsKQEAgLTQ3NzcsOSArNDc3Nyw5IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVl
QnVpbGRlcj4gVHJlZUV4cHJlc3MKICAgICAgICAgbmV4dCgpOwogICAgICAgICBKU1RleHRQb3Np
dGlvbiBleHByZXNzaW9uRW5kID0gbGFzdFRva2VuRW5kUG9zaXRpb24oKTsKICAgICAgICAgaWYg
KGNvbnN1bWUoRE9UKSkgewotICAgICAgICAgICAgaWYgKG1hdGNoQ29udGV4dHVhbEtleXdvcmQo
bV92bS0+cHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkubWV0YVB1YmxpY05hbWUoKSkpIHsK
KyAgICAgICAgICAgIGlmIChtYXRjaENvbnRleHR1YWxLZXl3b3JkKG1fdm0ucHJvcGVydHlOYW1l
cy0+YnVpbHRpbk5hbWVzKCkubWV0YVB1YmxpY05hbWUoKSkpIHsKICAgICAgICAgICAgICAgICBz
ZW1hbnRpY0ZhaWxJZkZhbHNlKG1fc2NyaXB0TW9kZSA9PSBKU1BhcnNlclNjcmlwdE1vZGU6Ok1v
ZHVsZSwgImltcG9ydC5tZXRhIGlzIG9ubHkgdmFsaWQgaW5zaWRlIG1vZHVsZXMiKTsKLSAgICAg
ICAgICAgICAgICBiYXNlID0gY29udGV4dC5jcmVhdGVJbXBvcnRNZXRhRXhwcihsb2NhdGlvbiwg
Y3JlYXRlUmVzb2x2ZUFuZFVzZVZhcmlhYmxlKGNvbnRleHQsICZtX3ZtLT5wcm9wZXJ0eU5hbWVz
LT5tZXRhUHJpdmF0ZU5hbWUsIGZhbHNlLCBleHByZXNzaW9uU3RhcnQsIGxvY2F0aW9uKSk7Cisg
ICAgICAgICAgICAgICAgYmFzZSA9IGNvbnRleHQuY3JlYXRlSW1wb3J0TWV0YUV4cHIobG9jYXRp
b24sIGNyZWF0ZVJlc29sdmVBbmRVc2VWYXJpYWJsZShjb250ZXh0LCAmbV92bS5wcm9wZXJ0eU5h
bWVzLT5tZXRhUHJpdmF0ZU5hbWUsIGZhbHNlLCBleHByZXNzaW9uU3RhcnQsIGxvY2F0aW9uKSk7
CiAgICAgICAgICAgICAgICAgbmV4dCgpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgICAgICBmYWlsSWZUcnVlKG1hdGNoKElERU5UKSwgIlwiaW1wb3J0LlwiIGNhbiBvbmx5IGZv
bGxvd2VkIHdpdGggbWV0YSIpOwpAQCAtNDc5Myw3ICs0NzkzLDcgQEAgdGVtcGxhdGUgPGNsYXNz
IFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzcwogICAgICAgICAgICAgYmFzZSA9IGNvbnRleHQuY3Jl
YXRlSW1wb3J0RXhwcihsb2NhdGlvbiwgZXhwciwgZXhwcmVzc2lvblN0YXJ0LCBleHByZXNzaW9u
RW5kLCBsYXN0VG9rZW5FbmRQb3NpdGlvbigpKTsKICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAo
IWJhc2VJc05ld1RhcmdldCkgewotICAgICAgICBjb25zdCBib29sIGlzQXN5bmMgPSBtYXRjaENv
bnRleHR1YWxLZXl3b3JkKG1fdm0tPnByb3BlcnR5TmFtZXMtPmFzeW5jKTsKKyAgICAgICAgY29u
c3QgYm9vbCBpc0FzeW5jID0gbWF0Y2hDb250ZXh0dWFsS2V5d29yZChtX3ZtLnByb3BlcnR5TmFt
ZXMtPmFzeW5jKTsKIAogICAgICAgICBiYXNlID0gcGFyc2VQcmltYXJ5RXhwcmVzc2lvbihjb250
ZXh0KTsKICAgICAgICAgZmFpbElmRmFsc2UoYmFzZSwgIkNhbm5vdCBwYXJzZSBiYXNlIGV4cHJl
c3Npb24iKTsKQEAgLTQ4NjMsNyArNDg2Myw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRl
cj4gVHJlZUV4cHJlc3MKICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHVzZWRWYXJpYWJsZXNT
aXplID0gY3VycmVudFNjb3BlKCktPmN1cnJlbnRVc2VkVmFyaWFibGVzU2l6ZSgpOwogICAgICAg
ICAgICAgICAgICAgICBKU1RleHRQb3NpdGlvbiBleHByZXNzaW9uRW5kID0gbGFzdFRva2VuRW5k
UG9zaXRpb24oKTsKICAgICAgICAgICAgICAgICAgICAgT3B0aW9uYWw8Q2FsbE9yQXBwbHlEZXB0
aFNjb3BlPiBjYWxsT3JBcHBseURlcHRoU2NvcGU7Ci0gICAgICAgICAgICAgICAgICAgIHJlY29y
ZENhbGxPckFwcGx5RGVwdGg8VHJlZUJ1aWxkZXI+KHRoaXMsICptX3ZtLCBjYWxsT3JBcHBseURl
cHRoU2NvcGUsIGJhc2UpOworICAgICAgICAgICAgICAgICAgICByZWNvcmRDYWxsT3JBcHBseURl
cHRoPFRyZWVCdWlsZGVyPih0aGlzLCBtX3ZtLCBjYWxsT3JBcHBseURlcHRoU2NvcGUsIGJhc2Up
OwogCiAgICAgICAgICAgICAgICAgICAgIFRyZWVBcmd1bWVudHMgYXJndW1lbnRzID0gcGFyc2VB
cmd1bWVudHMoY29udGV4dCk7CiAKQEAgLTQ5NTIsNyArNDk1Miw3IEBAIHRlbXBsYXRlIDxjbGFz
cyBUcmVlQnVpbGRlcj4gVHJlZUV4cHJlc3MKICAgICB1bnNpZ25lZCBmdW5jdGlvbktleXdvcmRT
dGFydCA9IHRva2VuU3RhcnQoKTsKICAgICBsb2NhdGlvbiA9IHRva2VuTG9jYXRpb24oKTsKICAg
ICBQYXJzZXJGdW5jdGlvbkluZm88VHJlZUJ1aWxkZXI+IGluZm87Ci0gICAgaW5mby5uYW1lID0g
Jm1fdm0tPnByb3BlcnR5TmFtZXMtPm51bGxJZGVudGlmaWVyOworICAgIGluZm8ubmFtZSA9ICZt
X3ZtLnByb3BlcnR5TmFtZXMtPm51bGxJZGVudGlmaWVyOwogCiAgICAgU291cmNlUGFyc2VNb2Rl
IHBhcnNlTW9kZSA9IGlzQXN5bmMgPyBTb3VyY2VQYXJzZU1vZGU6OkFzeW5jQXJyb3dGdW5jdGlv
bk1vZGUgOiBTb3VyY2VQYXJzZU1vZGU6OkFycm93RnVuY3Rpb25Nb2RlOwogICAgIGZhaWxJZkZh
bHNlKChwYXJzZUZ1bmN0aW9uSW5mbyhjb250ZXh0LCBGdW5jdGlvbk5hbWVSZXF1aXJlbWVudHM6
OlVubmFtZWQsIHBhcnNlTW9kZSwgdHJ1ZSwgQ29uc3RydWN0b3JLaW5kOjpOb25lLCBTdXBlckJp
bmRpbmc6Ok5vdE5lZWRlZCwgZnVuY3Rpb25LZXl3b3JkU3RhcnQsIGluZm8sIEZ1bmN0aW9uRGVm
aW5pdGlvblR5cGU6OkV4cHJlc3Npb24pKSwgIkNhbm5vdCBwYXJzZSBhcnJvdyBmdW5jdGlvbiBl
eHByZXNzaW9uIik7CkBAIC01MDM4LDcgKzUwMzgsNyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1
aWxkZXI+IFRyZWVFeHByZXNzCiAgICAgYm9vbCBpc0V2YWxPckFyZ3VtZW50cyA9IGZhbHNlOwog
ICAgIGlmIChzdHJpY3RNb2RlKCkpIHsKICAgICAgICAgaWYgKGNvbnRleHQuaXNSZXNvbHZlKGV4
cHIpKQotICAgICAgICAgICAgaXNFdmFsT3JBcmd1bWVudHMgPSAqbV9wYXJzZXJTdGF0ZS5sYXN0
SWRlbnRpZmllciA9PSBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5ldmFsIHx8ICptX3BhcnNlclN0YXRl
Lmxhc3RJZGVudGlmaWVyID09IG1fdm0tPnByb3BlcnR5TmFtZXMtPmFyZ3VtZW50czsKKyAgICAg
ICAgICAgIGlzRXZhbE9yQXJndW1lbnRzID0gKm1fcGFyc2VyU3RhdGUubGFzdElkZW50aWZpZXIg
PT0gbV92bS5wcm9wZXJ0eU5hbWVzLT5ldmFsIHx8ICptX3BhcnNlclN0YXRlLmxhc3RJZGVudGlm
aWVyID09IG1fdm0ucHJvcGVydHlOYW1lcy0+YXJndW1lbnRzOwogICAgIH0KICAgICBmYWlsSWZU
cnVlSWZTdHJpY3QoaXNFdmFsT3JBcmd1bWVudHMgJiYgaGFzUHJlZml4VXBkYXRlT3AsICJDYW5u
b3QgbW9kaWZ5ICciLCBtX3BhcnNlclN0YXRlLmxhc3RJZGVudGlmaWVyLT5pbXBsKCksICInIGlu
IHN0cmljdCBtb2RlIik7CiAgICAgc3dpdGNoIChtX3Rva2VuLm1fdHlwZSkgewpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5oCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcg
KzEsNyBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBv
cnRlbkBrZGUub3JnKQogICogIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBv
c3QuY29tKQotICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwg
MjAxMCwgMjAxMSwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29w
eXJpZ2h0IChDKSAyMDAzLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKQEAgLTExNywxNSArMTE3LDE1IEBAIHN0cnVjdCBTY29wZUxhYmVs
SW5mbyB7CiAgICAgYm9vbCBpc0xvb3A7CiB9OwogCi1BTFdBWVNfSU5MSU5FIHN0YXRpYyBib29s
IGlzQXJndW1lbnRzKGNvbnN0IFZNKiB2bSwgY29uc3QgSWRlbnRpZmllciogaWRlbnQpCitBTFdB
WVNfSU5MSU5FIHN0YXRpYyBib29sIGlzQXJndW1lbnRzKGNvbnN0IFZNJiB2bSwgY29uc3QgSWRl
bnRpZmllciogaWRlbnQpCiB7Ci0gICAgcmV0dXJuIHZtLT5wcm9wZXJ0eU5hbWVzLT5hcmd1bWVu
dHMgPT0gKmlkZW50OworICAgIHJldHVybiB2bS5wcm9wZXJ0eU5hbWVzLT5hcmd1bWVudHMgPT0g
KmlkZW50OwogfQotQUxXQVlTX0lOTElORSBzdGF0aWMgYm9vbCBpc0V2YWwoY29uc3QgVk0qIHZt
LCBjb25zdCBJZGVudGlmaWVyKiBpZGVudCkKK0FMV0FZU19JTkxJTkUgc3RhdGljIGJvb2wgaXNF
dmFsKGNvbnN0IFZNJiB2bSwgY29uc3QgSWRlbnRpZmllciogaWRlbnQpCiB7Ci0gICAgcmV0dXJu
IHZtLT5wcm9wZXJ0eU5hbWVzLT5ldmFsID09ICppZGVudDsKKyAgICByZXR1cm4gdm0ucHJvcGVy
dHlOYW1lcy0+ZXZhbCA9PSAqaWRlbnQ7CiB9Ci1BTFdBWVNfSU5MSU5FIHN0YXRpYyBib29sIGlz
RXZhbE9yQXJndW1lbnRzSWRlbnRpZmllcihjb25zdCBWTSogdm0sIGNvbnN0IElkZW50aWZpZXIq
IGlkZW50KQorQUxXQVlTX0lOTElORSBzdGF0aWMgYm9vbCBpc0V2YWxPckFyZ3VtZW50c0lkZW50
aWZpZXIoY29uc3QgVk0mIHZtLCBjb25zdCBJZGVudGlmaWVyKiBpZGVudCkKIHsKICAgICByZXR1
cm4gaXNFdmFsKHZtLCBpZGVudCkgfHwgaXNBcmd1bWVudHModm0sIGlkZW50KTsKIH0KQEAgLTE1
Niw3ICsxNTYsNyBAQCBzdHJ1Y3QgU2NvcGUgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNj
b3BlKTsKIAogcHVibGljOgotICAgIFNjb3BlKGNvbnN0IFZNKiB2bSwgYm9vbCBpc0Z1bmN0aW9u
LCBib29sIGlzR2VuZXJhdG9yLCBib29sIHN0cmljdE1vZGUsIGJvb2wgaXNBcnJvd0Z1bmN0aW9u
LCBib29sIGlzQXN5bmNGdW5jdGlvbikKKyAgICBTY29wZShjb25zdCBWTSYgdm0sIGJvb2wgaXNG
dW5jdGlvbiwgYm9vbCBpc0dlbmVyYXRvciwgYm9vbCBzdHJpY3RNb2RlLCBib29sIGlzQXJyb3dG
dW5jdGlvbiwgYm9vbCBpc0FzeW5jRnVuY3Rpb24pCiAgICAgICAgIDogbV92bSh2bSkKICAgICAg
ICAgLCBtX3NoYWRvd3NBcmd1bWVudHMoZmFsc2UpCiAgICAgICAgICwgbV91c2VzRXZhbChmYWxz
ZSkKQEAgLTQ4OSw3ICs0ODksNyBAQCBwdWJsaWM6CiAgICAgICAgIGJvb2wgaXNBcmd1bWVudHNJ
ZGVudCA9IGlzQXJndW1lbnRzKG1fdm0sIGlkZW50KTsKICAgICAgICAgYXV0byBhZGRSZXN1bHQg
PSBtX2RlY2xhcmVkVmFyaWFibGVzLmFkZChpZGVudC0+aW1wbCgpKTsKICAgICAgICAgYm9vbCBp
c1ZhbGlkU3RyaWN0TW9kZSA9IChhZGRSZXN1bHQuaXNOZXdFbnRyeSB8fCAhYWRkUmVzdWx0Lml0
ZXJhdG9yLT52YWx1ZS5pc1BhcmFtZXRlcigpKQotICAgICAgICAgICAgJiYgbV92bS0+cHJvcGVy
dHlOYW1lcy0+ZXZhbCAhPSAqaWRlbnQgJiYgIWlzQXJndW1lbnRzSWRlbnQ7CisgICAgICAgICAg
ICAmJiBtX3ZtLnByb3BlcnR5TmFtZXMtPmV2YWwgIT0gKmlkZW50ICYmICFpc0FyZ3VtZW50c0lk
ZW50OwogICAgICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmNsZWFySXNWYXIoKTsKICAg
ICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5zZXRJc1BhcmFtZXRlcigpOwogICAgICAg
ICBtX2lzVmFsaWRTdHJpY3RNb2RlID0gbV9pc1ZhbGlkU3RyaWN0TW9kZSAmJiBpc1ZhbGlkU3Ry
aWN0TW9kZTsKQEAgLTU3Myw3ICs1NzMsNyBAQCBwdWJsaWM6CiAgICAgICAgIGlmIChtX3VzZXNF
dmFsKQogICAgICAgICAgICAgc2V0SW5uZXJBcnJvd0Z1bmN0aW9uVXNlc0V2YWwoKTsKICAgICAg
ICAgCi0gICAgICAgIGlmICh1c2VkVmFyaWFibGVzQ29udGFpbnMobV92bS0+cHJvcGVydHlOYW1l
cy0+YXJndW1lbnRzLmltcGwoKSkpCisgICAgICAgIGlmICh1c2VkVmFyaWFibGVzQ29udGFpbnMo
bV92bS5wcm9wZXJ0eU5hbWVzLT5hcmd1bWVudHMuaW1wbCgpKSkKICAgICAgICAgICAgIHNldElu
bmVyQXJyb3dGdW5jdGlvblVzZXNBcmd1bWVudHMoKTsKICAgICB9CiAKQEAgLTU5NSw3ICs1OTUs
NyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAg
ICAgICAgICAgICAgICAvLyAiYXJndW1lbnRzIiByZWZlcmVuY2Ugc2hvdWxkIGJlIHJlc29sdmVk
IGF0IGZ1bmN0aW9uIGJvdWRhcnkuCi0gICAgICAgICAgICAgICAgICAgIGlmIChuZXN0ZWRTY29w
ZS0+aXNGdW5jdGlvbkJvdW5kYXJ5KCkgJiYgbmVzdGVkU2NvcGUtPmhhc0FyZ3VtZW50cygpICYm
IGltcGwgPT0gbV92bS0+cHJvcGVydHlOYW1lcy0+YXJndW1lbnRzLmltcGwoKSAmJiAhbmVzdGVk
U2NvcGUtPmlzQXJyb3dGdW5jdGlvbkJvdW5kYXJ5KCkpCisgICAgICAgICAgICAgICAgICAgIGlm
IChuZXN0ZWRTY29wZS0+aXNGdW5jdGlvbkJvdW5kYXJ5KCkgJiYgbmVzdGVkU2NvcGUtPmhhc0Fy
Z3VtZW50cygpICYmIGltcGwgPT0gbV92bS5wcm9wZXJ0eU5hbWVzLT5hcmd1bWVudHMuaW1wbCgp
ICYmICFuZXN0ZWRTY29wZS0+aXNBcnJvd0Z1bmN0aW9uQm91bmRhcnkoKSkKICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9u
U2V0LmFkZChpbXBsKTsKQEAgLTc5NSw3ICs3OTUsNyBAQCBwcml2YXRlOgogICAgICAgICBtX2lz
QXN5bmNGdW5jdGlvbkJvdW5kYXJ5ID0gdHJ1ZTsKICAgICB9CiAKLSAgICBjb25zdCBWTSogbV92
bTsKKyAgICBjb25zdCBWTSYgbV92bTsKICAgICBib29sIG1fc2hhZG93c0FyZ3VtZW50czsKICAg
ICBib29sIG1fdXNlc0V2YWw7CiAgICAgYm9vbCBtX25lZWRzRnVsbEFjdGl2YXRpb247CkBAIC04
ODUsNyArODg1LDcgQEAgY2xhc3MgUGFyc2VyIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKIAogcHVibGljOgotICAgIFBhcnNlcihWTSosIGNvbnN0IFNvdXJjZUNvZGUmLCBKU1BhcnNl
ckJ1aWx0aW5Nb2RlLCBKU1BhcnNlclN0cmljdE1vZGUsIEpTUGFyc2VyU2NyaXB0TW9kZSwgU291
cmNlUGFyc2VNb2RlLCBTdXBlckJpbmRpbmcsIENvbnN0cnVjdG9yS2luZCBkZWZhdWx0Q29uc3Ry
dWN0b3JLaW5kID0gQ29uc3RydWN0b3JLaW5kOjpOb25lLCBEZXJpdmVkQ29udGV4dFR5cGUgPSBE
ZXJpdmVkQ29udGV4dFR5cGU6Ok5vbmUsIGJvb2wgaXNFdmFsQ29udGV4dCA9IGZhbHNlLCBFdmFs
Q29udGV4dFR5cGUgPSBFdmFsQ29udGV4dFR5cGU6Ok5vbmUsIERlYnVnZ2VyUGFyc2VEYXRhKiA9
IG51bGxwdHIpOworICAgIFBhcnNlcihWTSYsIGNvbnN0IFNvdXJjZUNvZGUmLCBKU1BhcnNlckJ1
aWx0aW5Nb2RlLCBKU1BhcnNlclN0cmljdE1vZGUsIEpTUGFyc2VyU2NyaXB0TW9kZSwgU291cmNl
UGFyc2VNb2RlLCBTdXBlckJpbmRpbmcsIENvbnN0cnVjdG9yS2luZCBkZWZhdWx0Q29uc3RydWN0
b3JLaW5kID0gQ29uc3RydWN0b3JLaW5kOjpOb25lLCBEZXJpdmVkQ29udGV4dFR5cGUgPSBEZXJp
dmVkQ29udGV4dFR5cGU6Ok5vbmUsIGJvb2wgaXNFdmFsQ29udGV4dCA9IGZhbHNlLCBFdmFsQ29u
dGV4dFR5cGUgPSBFdmFsQ29udGV4dFR5cGU6Ok5vbmUsIERlYnVnZ2VyUGFyc2VEYXRhKiA9IG51
bGxwdHIpOwogICAgIH5QYXJzZXIoKTsKIAogICAgIHRlbXBsYXRlIDxjbGFzcyBQYXJzZWROb2Rl
PgpAQCAtMTY4Myw3ICsxNjgzLDcgQEAgcHJpdmF0ZToKICAgICAKICAgICBib29sIGNhblJlY3Vy
c2UoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fdm0tPmlzU2FmZVRvUmVjdXJzZSgpOworICAg
ICAgICByZXR1cm4gbV92bS5pc1NhZmVUb1JlY3Vyc2UoKTsKICAgICB9CiAgICAgCiAgICAgY29u
c3QgSlNUZXh0UG9zaXRpb24mIGxhc3RUb2tlbkVuZFBvc2l0aW9uKCkgY29uc3QKQEAgLTE4NjYs
NyArMTg2Niw3IEBAIHByaXZhdGU6CiAgICAgICAgIG1fZXJyb3JNZXNzYWdlID0gU3RyaW5nKCk7
CiAgICAgfQogCi0gICAgVk0qIG1fdm07CisgICAgVk0mIG1fdm07CiAgICAgY29uc3QgU291cmNl
Q29kZSogbV9zb3VyY2U7CiAgICAgUGFyc2VyQXJlbmEgbV9wYXJzZXJBcmVuYTsKICAgICBzdGQ6
OnVuaXF1ZV9wdHI8TGV4ZXJUeXBlPiBtX2xleGVyOwpAQCAtMTk5Nyw3ICsxOTk3LDcgQEAgc3Rk
Ojp1bmlxdWVfcHRyPFBhcnNlZE5vZGU+IFBhcnNlcjxMZXhlcgogCiB0ZW1wbGF0ZSA8Y2xhc3Mg
UGFyc2VkTm9kZT4KIHN0ZDo6dW5pcXVlX3B0cjxQYXJzZWROb2RlPiBwYXJzZSgKLSAgICBWTSog
dm0sIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwKKyAgICBWTSYgdm0sIGNvbnN0IFNvdXJjZUNv
ZGUmIHNvdXJjZSwKICAgICBjb25zdCBJZGVudGlmaWVyJiBuYW1lLCBKU1BhcnNlckJ1aWx0aW5N
b2RlIGJ1aWx0aW5Nb2RlLAogICAgIEpTUGFyc2VyU3RyaWN0TW9kZSBzdHJpY3RNb2RlLCBKU1Bh
cnNlclNjcmlwdE1vZGUgc2NyaXB0TW9kZSwgU291cmNlUGFyc2VNb2RlIHBhcnNlTW9kZSwgU3Vw
ZXJCaW5kaW5nIHN1cGVyQmluZGluZywKICAgICBQYXJzZXJFcnJvciYgZXJyb3IsIEpTVGV4dFBv
c2l0aW9uKiBwb3NpdGlvbkJlZm9yZUxhc3ROZXdsaW5lID0gbnVsbHB0ciwKQEAgLTIwNTcsMTIg
KzIwNTcsMTIgQEAgaW5saW5lIHN0ZDo6dW5pcXVlX3B0cjxQcm9ncmFtTm9kZT4gcGFycwogICAg
IGJvb2wgaXNFdmFsTm9kZSA9IGZhbHNlOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxQcm9ncmFtTm9k
ZT4gcmVzdWx0OwogICAgIGlmIChzb3VyY2UucHJvdmlkZXIoKS0+c291cmNlKCkuaXM4Qml0KCkp
IHsKLSAgICAgICAgUGFyc2VyPExleGVyPExDaGFyPj4gcGFyc2VyKCZ2bSwgc291cmNlLCBKU1Bh
cnNlckJ1aWx0aW5Nb2RlOjpOb3RCdWlsdGluLCBKU1BhcnNlclN0cmljdE1vZGU6Ok5vdFN0cmlj
dCwgSlNQYXJzZXJTY3JpcHRNb2RlOjpDbGFzc2ljLCBTb3VyY2VQYXJzZU1vZGU6OlByb2dyYW1N
b2RlLCBTdXBlckJpbmRpbmc6Ok5vdE5lZWRlZCwgQ29uc3RydWN0b3JLaW5kOjpOb25lLCBEZXJp
dmVkQ29udGV4dFR5cGU6Ok5vbmUsIGlzRXZhbE5vZGUsIEV2YWxDb250ZXh0VHlwZTo6Tm9uZSwg
bnVsbHB0cik7CisgICAgICAgIFBhcnNlcjxMZXhlcjxMQ2hhcj4+IHBhcnNlcih2bSwgc291cmNl
LCBKU1BhcnNlckJ1aWx0aW5Nb2RlOjpOb3RCdWlsdGluLCBKU1BhcnNlclN0cmljdE1vZGU6Ok5v
dFN0cmljdCwgSlNQYXJzZXJTY3JpcHRNb2RlOjpDbGFzc2ljLCBTb3VyY2VQYXJzZU1vZGU6OlBy
b2dyYW1Nb2RlLCBTdXBlckJpbmRpbmc6Ok5vdE5lZWRlZCwgQ29uc3RydWN0b3JLaW5kOjpOb25l
LCBEZXJpdmVkQ29udGV4dFR5cGU6Ok5vbmUsIGlzRXZhbE5vZGUsIEV2YWxDb250ZXh0VHlwZTo6
Tm9uZSwgbnVsbHB0cik7CiAgICAgICAgIHJlc3VsdCA9IHBhcnNlci5wYXJzZTxQcm9ncmFtTm9k
ZT4oZXJyb3IsIG5hbWUsIFNvdXJjZVBhcnNlTW9kZTo6UHJvZ3JhbU1vZGUsIFBhcnNpbmdDb250
ZXh0OjpGdW5jdGlvbkNvbnN0cnVjdG9yLCBmdW5jdGlvbkNvbnN0cnVjdG9yUGFyYW1ldGVyc0Vu
ZFBvc2l0aW9uKTsKICAgICAgICAgaWYgKHBvc2l0aW9uQmVmb3JlTGFzdE5ld2xpbmUpCiAgICAg
ICAgICAgICAqcG9zaXRpb25CZWZvcmVMYXN0TmV3bGluZSA9IHBhcnNlci5wb3NpdGlvbkJlZm9y
ZUxhc3ROZXdsaW5lKCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgUGFyc2VyPExleGVyPFVDaGFy
Pj4gcGFyc2VyKCZ2bSwgc291cmNlLCBKU1BhcnNlckJ1aWx0aW5Nb2RlOjpOb3RCdWlsdGluLCBK
U1BhcnNlclN0cmljdE1vZGU6Ok5vdFN0cmljdCwgSlNQYXJzZXJTY3JpcHRNb2RlOjpDbGFzc2lj
LCBTb3VyY2VQYXJzZU1vZGU6OlByb2dyYW1Nb2RlLCBTdXBlckJpbmRpbmc6Ok5vdE5lZWRlZCwg
Q29uc3RydWN0b3JLaW5kOjpOb25lLCBEZXJpdmVkQ29udGV4dFR5cGU6Ok5vbmUsIGlzRXZhbE5v
ZGUsIEV2YWxDb250ZXh0VHlwZTo6Tm9uZSwgbnVsbHB0cik7CisgICAgICAgIFBhcnNlcjxMZXhl
cjxVQ2hhcj4+IHBhcnNlcih2bSwgc291cmNlLCBKU1BhcnNlckJ1aWx0aW5Nb2RlOjpOb3RCdWls
dGluLCBKU1BhcnNlclN0cmljdE1vZGU6Ok5vdFN0cmljdCwgSlNQYXJzZXJTY3JpcHRNb2RlOjpD
bGFzc2ljLCBTb3VyY2VQYXJzZU1vZGU6OlByb2dyYW1Nb2RlLCBTdXBlckJpbmRpbmc6Ok5vdE5l
ZWRlZCwgQ29uc3RydWN0b3JLaW5kOjpOb25lLCBEZXJpdmVkQ29udGV4dFR5cGU6Ok5vbmUsIGlz
RXZhbE5vZGUsIEV2YWxDb250ZXh0VHlwZTo6Tm9uZSwgbnVsbHB0cik7CiAgICAgICAgIHJlc3Vs
dCA9IHBhcnNlci5wYXJzZTxQcm9ncmFtTm9kZT4oZXJyb3IsIG5hbWUsIFNvdXJjZVBhcnNlTW9k
ZTo6UHJvZ3JhbU1vZGUsIFBhcnNpbmdDb250ZXh0OjpGdW5jdGlvbkNvbnN0cnVjdG9yLCBmdW5j
dGlvbkNvbnN0cnVjdG9yUGFyYW1ldGVyc0VuZFBvc2l0aW9uKTsKICAgICAgICAgaWYgKHBvc2l0
aW9uQmVmb3JlTGFzdE5ld2xpbmUpCiAgICAgICAgICAgICAqcG9zaXRpb25CZWZvcmVMYXN0TmV3
bGluZSA9IHBhcnNlci5wb3NpdGlvbkJlZm9yZUxhc3ROZXdsaW5lKCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlckFyZW5hLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXJBcmVuYS5oCShyZXZpc2lvbiAyNDkxMjgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlckFyZW5hLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTggQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTkgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC00NCwxMiArNDQsMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KIAogICAg
ICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLSAgICAgICAgQUxXQVlTX0lOTElORSBjb25zdCBJ
ZGVudGlmaWVyJiBtYWtlSWRlbnRpZmllcihWTSosIGNvbnN0IFQqIGNoYXJhY3RlcnMsIHNpemVf
dCBsZW5ndGgpOwotICAgICAgICBBTFdBWVNfSU5MSU5FIGNvbnN0IElkZW50aWZpZXImIG1ha2VF
bXB0eUlkZW50aWZpZXIoVk0qKTsKLSAgICAgICAgQUxXQVlTX0lOTElORSBjb25zdCBJZGVudGlm
aWVyJiBtYWtlSWRlbnRpZmllckxDaGFyRnJvbVVDaGFyKFZNKiwgY29uc3QgVUNoYXIqIGNoYXJh
Y3RlcnMsIHNpemVfdCBsZW5ndGgpOwotICAgICAgICBBTFdBWVNfSU5MSU5FIGNvbnN0IElkZW50
aWZpZXImIG1ha2VJZGVudGlmaWVyKFZNKiwgU3ltYm9sSW1wbCopOworICAgICAgICBBTFdBWVNf
SU5MSU5FIGNvbnN0IElkZW50aWZpZXImIG1ha2VJZGVudGlmaWVyKFZNJiwgY29uc3QgVCogY2hh
cmFjdGVycywgc2l6ZV90IGxlbmd0aCk7CisgICAgICAgIEFMV0FZU19JTkxJTkUgY29uc3QgSWRl
bnRpZmllciYgbWFrZUVtcHR5SWRlbnRpZmllcihWTSYpOworICAgICAgICBBTFdBWVNfSU5MSU5F
IGNvbnN0IElkZW50aWZpZXImIG1ha2VJZGVudGlmaWVyTENoYXJGcm9tVUNoYXIoVk0mLCBjb25z
dCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCk7CisgICAgICAgIEFMV0FZU19JTkxJ
TkUgY29uc3QgSWRlbnRpZmllciYgbWFrZUlkZW50aWZpZXIoVk0mLCBTeW1ib2xJbXBsKik7CiAK
LSAgICAgICAgY29uc3QgSWRlbnRpZmllciYgbWFrZU51bWVyaWNJZGVudGlmaWVyKFZNKiwgZG91
YmxlIG51bWJlcik7CisgICAgICAgIGNvbnN0IElkZW50aWZpZXImIG1ha2VOdW1lcmljSWRlbnRp
ZmllcihWTSYsIGRvdWJsZSBudW1iZXIpOwogCiAgICAgcHVibGljOgogICAgICAgICBzdGF0aWMg
Y29uc3QgaW50IE1heGltdW1DYWNoYWJsZUNoYXJhY3RlciA9IDEyODsKQEAgLTcwLDEwICs3MCwx
MCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB9OwogCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+
Ci0gICAgQUxXQVlTX0lOTElORSBjb25zdCBJZGVudGlmaWVyJiBJZGVudGlmaWVyQXJlbmE6Om1h
a2VJZGVudGlmaWVyKFZNKiB2bSwgY29uc3QgVCogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCkK
KyAgICBBTFdBWVNfSU5MSU5FIGNvbnN0IElkZW50aWZpZXImIElkZW50aWZpZXJBcmVuYTo6bWFr
ZUlkZW50aWZpZXIoVk0mIHZtLCBjb25zdCBUKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoKQog
ICAgIHsKICAgICAgICAgaWYgKCFsZW5ndGgpCi0gICAgICAgICAgICByZXR1cm4gdm0tPnByb3Bl
cnR5TmFtZXMtPmVtcHR5SWRlbnRpZmllcjsKKyAgICAgICAgICAgIHJldHVybiB2bS5wcm9wZXJ0
eU5hbWVzLT5lbXB0eUlkZW50aWZpZXI7CiAgICAgICAgIGlmIChjaGFyYWN0ZXJzWzBdID49IE1h
eGltdW1DYWNoYWJsZUNoYXJhY3RlcikgewogICAgICAgICAgICAgbV9pZGVudGlmaWVycy5hcHBl
bmQoSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgY2hhcmFjdGVycywgbGVuZ3RoKSk7CiAgICAg
ICAgICAgICByZXR1cm4gbV9pZGVudGlmaWVycy5sYXN0KCk7CkBAIC05MywyMiArOTMsMjIgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHJldHVybiBtX2lkZW50aWZpZXJzLmxhc3QoKTsKICAg
ICB9CiAKLSAgICBBTFdBWVNfSU5MSU5FIGNvbnN0IElkZW50aWZpZXImIElkZW50aWZpZXJBcmVu
YTo6bWFrZUlkZW50aWZpZXIoVk0qLCBTeW1ib2xJbXBsKiBzeW1ib2wpCisgICAgQUxXQVlTX0lO
TElORSBjb25zdCBJZGVudGlmaWVyJiBJZGVudGlmaWVyQXJlbmE6Om1ha2VJZGVudGlmaWVyKFZN
JiwgU3ltYm9sSW1wbCogc3ltYm9sKQogICAgIHsKICAgICAgICAgQVNTRVJUKHN5bWJvbCk7CiAg
ICAgICAgIG1faWRlbnRpZmllcnMuYXBwZW5kKElkZW50aWZpZXI6OmZyb21VaWQoKnN5bWJvbCkp
OwogICAgICAgICByZXR1cm4gbV9pZGVudGlmaWVycy5sYXN0KCk7CiAgICAgfQogCi0gICAgQUxX
QVlTX0lOTElORSBjb25zdCBJZGVudGlmaWVyJiBJZGVudGlmaWVyQXJlbmE6Om1ha2VFbXB0eUlk
ZW50aWZpZXIoVk0qIHZtKQorICAgIEFMV0FZU19JTkxJTkUgY29uc3QgSWRlbnRpZmllciYgSWRl
bnRpZmllckFyZW5hOjptYWtlRW1wdHlJZGVudGlmaWVyKFZNJiB2bSkKICAgICB7Ci0gICAgICAg
IHJldHVybiB2bS0+cHJvcGVydHlOYW1lcy0+ZW1wdHlJZGVudGlmaWVyOworICAgICAgICByZXR1
cm4gdm0ucHJvcGVydHlOYW1lcy0+ZW1wdHlJZGVudGlmaWVyOwogICAgIH0KIAotICAgIEFMV0FZ
U19JTkxJTkUgY29uc3QgSWRlbnRpZmllciYgSWRlbnRpZmllckFyZW5hOjptYWtlSWRlbnRpZmll
ckxDaGFyRnJvbVVDaGFyKFZNKiB2bSwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBs
ZW5ndGgpCisgICAgQUxXQVlTX0lOTElORSBjb25zdCBJZGVudGlmaWVyJiBJZGVudGlmaWVyQXJl
bmE6Om1ha2VJZGVudGlmaWVyTENoYXJGcm9tVUNoYXIoVk0mIHZtLCBjb25zdCBVQ2hhciogY2hh
cmFjdGVycywgc2l6ZV90IGxlbmd0aCkKICAgICB7CiAgICAgICAgIGlmICghbGVuZ3RoKQotICAg
ICAgICAgICAgcmV0dXJuIHZtLT5wcm9wZXJ0eU5hbWVzLT5lbXB0eUlkZW50aWZpZXI7CisgICAg
ICAgICAgICByZXR1cm4gdm0ucHJvcGVydHlOYW1lcy0+ZW1wdHlJZGVudGlmaWVyOwogICAgICAg
ICBpZiAoY2hhcmFjdGVyc1swXSA+PSBNYXhpbXVtQ2FjaGFibGVDaGFyYWN0ZXIpIHsKICAgICAg
ICAgICAgIG1faWRlbnRpZmllcnMuYXBwZW5kKElkZW50aWZpZXI6OmNyZWF0ZUxDaGFyRnJvbVVD
aGFyKHZtLCBjaGFyYWN0ZXJzLCBsZW5ndGgpKTsKICAgICAgICAgICAgIHJldHVybiBtX2lkZW50
aWZpZXJzLmxhc3QoKTsKQEAgLTEyOCw3ICsxMjgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgcmV0dXJuIG1faWRlbnRpZmllcnMubGFzdCgpOwogICAgIH0KICAgICAKLSAgICBpbmxpbmUg
Y29uc3QgSWRlbnRpZmllciYgSWRlbnRpZmllckFyZW5hOjptYWtlTnVtZXJpY0lkZW50aWZpZXIo
Vk0qIHZtLCBkb3VibGUgbnVtYmVyKQorICAgIGlubGluZSBjb25zdCBJZGVudGlmaWVyJiBJZGVu
dGlmaWVyQXJlbmE6Om1ha2VOdW1lcmljSWRlbnRpZmllcihWTSYgdm0sIGRvdWJsZSBudW1iZXIp
CiAgICAgewogICAgICAgICAvLyBGSVhNRTogV2h5IGRvZXNuJ3QgdGhpcyB1c2UgdGhlIElkZW50
aWZpZXI6OmZyb20gb3ZlcmxvYWQgdGhhdCB0YWtlcyBhIGRvdWJsZT8KICAgICAgICAgLy8gU2Vl
bXMgd2UgYXJlIG1pc3Npbmcgb3V0IG9uIG11bHRpcGxlIG9wdGltaXphdGlvbnMgYnkgbm90IHVz
aW5nIGl0LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9TeW50YXhDaGVja2Vy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9TeW50YXhDaGVj
a2VyLmgJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIv
U3ludGF4Q2hlY2tlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMCwgMjAxMywgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY0LDcgKzY0LDcgQEAg
cHVibGljOgogICAgICAgICBTeW50YXhDaGVja2VyKiBtX2NvbnRleHQ7CiAgICAgfTsKICAgICAK
LSAgICBTeW50YXhDaGVja2VyKFZNKiAsIHZvaWQqKQorICAgIFN5bnRheENoZWNrZXIoVk0mICwg
dm9pZCopCiAgICAgewogICAgIH0KIApAQCAtMjI2LDcgKzIyNiw3IEBAIHB1YmxpYzoKICAgICB7
CiAgICAgICAgIHJldHVybiBQcm9wZXJ0eSh0eXBlKTsKICAgICB9Ci0gICAgUHJvcGVydHkgY3Jl
YXRlUHJvcGVydHkoVk0qIHZtLCBQYXJzZXJBcmVuYSYgcGFyc2VyQXJlbmEsIGRvdWJsZSBuYW1l
LCBpbnQsIFByb3BlcnR5Tm9kZTo6VHlwZSB0eXBlLCBQcm9wZXJ0eU5vZGU6OlB1dFR5cGUsIGJv
b2wgY29tcGxldGUsIFN1cGVyQmluZGluZywgQ2xhc3NFbGVtZW50VGFnKQorICAgIFByb3BlcnR5
IGNyZWF0ZVByb3BlcnR5KFZNJiB2bSwgUGFyc2VyQXJlbmEmIHBhcnNlckFyZW5hLCBkb3VibGUg
bmFtZSwgaW50LCBQcm9wZXJ0eU5vZGU6OlR5cGUgdHlwZSwgUHJvcGVydHlOb2RlOjpQdXRUeXBl
LCBib29sIGNvbXBsZXRlLCBTdXBlckJpbmRpbmcsIENsYXNzRWxlbWVudFRhZykKICAgICB7CiAg
ICAgICAgIGlmICghY29tcGxldGUpCiAgICAgICAgICAgICByZXR1cm4gUHJvcGVydHkodHlwZSk7
CkBAIC0yOTcsNyArMjk3LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIFByb3Bl
cnR5KHR5cGUpOwogICAgIH0KLSAgICBQcm9wZXJ0eSBjcmVhdGVHZXR0ZXJPclNldHRlclByb3Bl
cnR5KFZNKiB2bSwgUGFyc2VyQXJlbmEmIHBhcnNlckFyZW5hLCBjb25zdCBKU1Rva2VuTG9jYXRp
b24mLCBQcm9wZXJ0eU5vZGU6OlR5cGUgdHlwZSwgYm9vbCBzdHJpY3QsIGRvdWJsZSBuYW1lLCBj
b25zdCBQYXJzZXJGdW5jdGlvbkluZm88U3ludGF4Q2hlY2tlcj4mLCBDbGFzc0VsZW1lbnRUYWcp
CisgICAgUHJvcGVydHkgY3JlYXRlR2V0dGVyT3JTZXR0ZXJQcm9wZXJ0eShWTSYgdm0sIFBhcnNl
ckFyZW5hJiBwYXJzZXJBcmVuYSwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgUHJvcGVydHlOb2Rl
OjpUeXBlIHR5cGUsIGJvb2wgc3RyaWN0LCBkb3VibGUgbmFtZSwgY29uc3QgUGFyc2VyRnVuY3Rp
b25JbmZvPFN5bnRheENoZWNrZXI+JiwgQ2xhc3NFbGVtZW50VGFnKQogICAgIHsKICAgICAgICAg
aWYgKCFzdHJpY3QpCiAgICAgICAgICAgICByZXR1cm4gUHJvcGVydHkodHlwZSk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJCeXRlY29kZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyQnl0ZWNvZGUu
Y3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIv
UHJvZmlsZXJCeXRlY29kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzgsOCArMzgsOCBAQCBKU1ZhbHVl
IEJ5dGVjb2RlOjp0b0pTKEV4ZWNTdGF0ZSogZXhlYykgCiAgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKICAgICBKU09iamVjdCogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYyk7CiAg
ICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmJ5dGVjb2RlSW5kZXgs
IGpzTnVtYmVyKG1fYnl0ZWNvZGVJbmRleCkpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCB2
bS5wcm9wZXJ0eU5hbWVzLT5vcGNvZGUsIGpzU3RyaW5nKGV4ZWMsIFN0cmluZzo6ZnJvbVVURjgo
b3Bjb2RlTmFtZXNbbV9vcGNvZGVJRF0pKSk7Ci0gICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIHZt
LnByb3BlcnR5TmFtZXMtPmRlc2NyaXB0aW9uLCBqc1N0cmluZyhleGVjLCBTdHJpbmc6OmZyb21V
VEY4KG1fZGVzY3JpcHRpb24pKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIHZtLnByb3Bl
cnR5TmFtZXMtPm9wY29kZSwganNTdHJpbmcodm0sIFN0cmluZzo6ZnJvbVVURjgob3Bjb2RlTmFt
ZXNbbV9vcGNvZGVJRF0pKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5
TmFtZXMtPmRlc2NyaXB0aW9uLCBqc1N0cmluZyh2bSwgU3RyaW5nOjpmcm9tVVRGOChtX2Rlc2Ny
aXB0aW9uKSkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9wcm9maWxlci9Qcm9maWxlckJ5dGVjb2RlU2VxdWVuY2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlckJ5dGVjb2RlU2VxdWVu
Y2UuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmls
ZXIvUHJvZmlsZXJCeXRlY29kZVNlcXVlbmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTgzLDcg
KzgzLDcgQEAgdm9pZCBCeXRlY29kZVNlcXVlbmNlOjphZGRTZXF1ZW5jZVByb3BlcgogICAgIEpT
QXJyYXkqIGhlYWRlciA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgMCk7CiAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbV9oZWFkZXIuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaGVhZGVyLT5wdXREaXJlY3RJbmRl
eChleGVjLCBpLCBqc1N0cmluZyhleGVjLCBTdHJpbmc6OmZyb21VVEY4KG1faGVhZGVyW2ldKSkp
OworICAgICAgICBoZWFkZXItPnB1dERpcmVjdEluZGV4KGV4ZWMsIGksIGpzU3RyaW5nKHZtLCBT
dHJpbmc6OmZyb21VVEY4KG1faGVhZGVyW2ldKSkpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCB2b2lkKCkpOwogICAgIH0KICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgdm0u
cHJvcGVydHlOYW1lcy0+aGVhZGVyLCBoZWFkZXIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3Byb2ZpbGVyL1Byb2ZpbGVyQnl0ZWNvZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJCeXRlY29kZXMuY3BwCShyZXZpc2lvbiAy
NDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJCeXRlY29k
ZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTItMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTU3LDkgKzU3LDkgQEAgSlNWYWx1ZSBCeXRlY29kZXM6OnRv
SlMoRXhlY1N0YXRlKiBleGVjKQogICAgIEpTT2JqZWN0KiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0
eU9iamVjdChleGVjKTsKICAgICAKICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVy
dHlOYW1lcy0+Ynl0ZWNvZGVzSUQsIGpzTnVtYmVyKG1faWQpKTsKLSAgICByZXN1bHQtPnB1dERp
cmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+aW5mZXJyZWROYW1lLCBqc1N0cmluZyhleGVjLCBT
dHJpbmc6OmZyb21VVEY4KG1faW5mZXJyZWROYW1lKSkpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0
KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5zb3VyY2VDb2RlLCBqc1N0cmluZyhleGVjLCBTdHJpbmc6
OmZyb21VVEY4KG1fc291cmNlQ29kZSkpKTsKLSAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgdm0u
cHJvcGVydHlOYW1lcy0+aGFzaCwganNTdHJpbmcoZXhlYywgU3RyaW5nOjpmcm9tVVRGOCh0b0NT
dHJpbmcobV9oYXNoKSkpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlO
YW1lcy0+aW5mZXJyZWROYW1lLCBqc1N0cmluZyh2bSwgU3RyaW5nOjpmcm9tVVRGOChtX2luZmVy
cmVkTmFtZSkpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+
c291cmNlQ29kZSwganNTdHJpbmcodm0sIFN0cmluZzo6ZnJvbVVURjgobV9zb3VyY2VDb2RlKSkp
OworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5oYXNoLCBqc1N0
cmluZyh2bSwgU3RyaW5nOjpmcm9tVVRGOCh0b0NTdHJpbmcobV9oYXNoKSkpKTsKICAgICByZXN1
bHQtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+aW5zdHJ1Y3Rpb25Db3VudCwganNO
dW1iZXIobV9pbnN0cnVjdGlvbkNvdW50KSk7CiAgICAgYWRkU2VxdWVuY2VQcm9wZXJ0aWVzKGV4
ZWMsIHJlc3VsdCk7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIv
UHJvZmlsZXJDb21waWxhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3Byb2ZpbGVyL1Byb2ZpbGVyQ29tcGlsYXRpb24uY3BwCShyZXZpc2lvbiAyNDkxMjgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJDb21waWxhdGlvbi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEy
LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEyLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0xMTksNyArMTE5LDcgQEAgSlNWYWx1ZSBDb21waWxhdGlvbjo6
dG9KUyhFeGVjU3RhdGUqIGV4ZQogICAgIEpTT2JqZWN0KiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0
eU9iamVjdChleGVjKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAg
IHJlc3VsdC0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5ieXRlY29kZXNJRCwganNO
dW1iZXIobV9ieXRlY29kZXMtPmlkKCkpKTsKLSAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgdm0u
cHJvcGVydHlOYW1lcy0+Y29tcGlsYXRpb25LaW5kLCBqc1N0cmluZyhleGVjLCBTdHJpbmc6OmZy
b21VVEY4KHRvQ1N0cmluZyhtX2tpbmQpKSkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCB2
bS5wcm9wZXJ0eU5hbWVzLT5jb21waWxhdGlvbktpbmQsIGpzU3RyaW5nKHZtLCBTdHJpbmc6OmZy
b21VVEY4KHRvQ1N0cmluZyhtX2tpbmQpKSkpOwogICAgIAogICAgIEpTQXJyYXkqIHByb2ZpbGVk
Qnl0ZWNvZGVzID0gY29uc3RydWN0RW1wdHlBcnJheShleGVjLCAwKTsKICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCB7IH0pOwpAQCAtMTc2LDkgKzE3Niw5IEBAIEpTVmFsdWUgQ29tcGls
YXRpb246OnRvSlMoRXhlY1N0YXRlKiBleGUKICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgdm0u
cHJvcGVydHlOYW1lcy0+bnVtSW5saW5lZEdldEJ5SWRzLCBqc051bWJlcihtX251bUlubGluZWRH
ZXRCeUlkcykpOwogICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5u
dW1JbmxpbmVkUHV0QnlJZHMsIGpzTnVtYmVyKG1fbnVtSW5saW5lZFB1dEJ5SWRzKSk7CiAgICAg
cmVzdWx0LT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm51bUlubGluZWRDYWxscywg
anNOdW1iZXIobV9udW1JbmxpbmVkQ2FsbHMpKTsKLSAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwg
dm0ucHJvcGVydHlOYW1lcy0+amV0dGlzb25SZWFzb24sIGpzU3RyaW5nKGV4ZWMsIFN0cmluZzo6
ZnJvbVVURjgodG9DU3RyaW5nKG1famV0dGlzb25SZWFzb24pKSkpOworICAgIHJlc3VsdC0+cHV0
RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5qZXR0aXNvblJlYXNvbiwganNTdHJpbmcodm0s
IFN0cmluZzo6ZnJvbVVURjgodG9DU3RyaW5nKG1famV0dGlzb25SZWFzb24pKSkpOwogICAgIGlm
ICghbV9hZGRpdGlvbmFsSmV0dGlzb25SZWFzb24uaXNOdWxsKCkpCi0gICAgICAgIHJlc3VsdC0+
cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5hZGRpdGlvbmFsSmV0dGlzb25SZWFzb24s
IGpzU3RyaW5nKGV4ZWMsIFN0cmluZzo6ZnJvbVVURjgobV9hZGRpdGlvbmFsSmV0dGlzb25SZWFz
b24pKSk7CisgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5h
ZGRpdGlvbmFsSmV0dGlzb25SZWFzb24sIGpzU3RyaW5nKHZtLCBTdHJpbmc6OmZyb21VVEY4KG1f
YWRkaXRpb25hbEpldHRpc29uUmVhc29uKSkpOwogICAgIAogICAgIHJlc3VsdC0+cHV0RGlyZWN0
KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT51aWQsIG1fdWlkLnRvSlMoZXhlYykpOwogICAgIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyQ29tcGlsZWRCeXRlY29k
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2Zp
bGVyQ29tcGlsZWRCeXRlY29kZS5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlckNvbXBpbGVkQnl0ZWNvZGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTQ4LDcgKzQ4LDcgQEAgSlNWYWx1ZSBDb21waWxlZEJ5dGVjb2RlOjp0b0pTKEV4ZWNT
dGF0ZQogICAgIEpTT2JqZWN0KiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjKTsK
ICAgICAKICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+b3JpZ2lu
LCBtX29yaWdpbi50b0pTKGV4ZWMpKTsKLSAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgdm0ucHJv
cGVydHlOYW1lcy0+ZGVzY3JpcHRpb24sIGpzU3RyaW5nKGV4ZWMsIFN0cmluZzo6ZnJvbVVURjgo
bV9kZXNjcmlwdGlvbikpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlO
YW1lcy0+ZGVzY3JpcHRpb24sIGpzU3RyaW5nKHZtLCBTdHJpbmc6OmZyb21VVEY4KG1fZGVzY3Jp
cHRpb24pKSk7CiAgICAgCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlckV2ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJFdmVudC5jcHAJKHJldmlzaW9uIDI0
OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlckV2ZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2
LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC01Myw5ICs1Myw5IEBAIEpTVmFsdWUgRXZlbnQ6OnRvSlMoRXhlY1N0
YXRlKiBleGVjKSBjb24KICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1l
cy0+Ynl0ZWNvZGVzSUQsIGpzTnVtYmVyKG1fYnl0ZWNvZGVzLT5pZCgpKSk7CiAgICAgaWYgKG1f
Y29tcGlsYXRpb24pCiAgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5h
bWVzLT5jb21waWxhdGlvblVJRCwgbV9jb21waWxhdGlvbi0+dWlkKCkudG9KUyhleGVjKSk7Ci0g
ICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnN1bW1hcnksIGpzU3Ry
aW5nKGV4ZWMsIFN0cmluZzo6ZnJvbVVURjgobV9zdW1tYXJ5KSkpOworICAgIHJlc3VsdC0+cHV0
RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5zdW1tYXJ5LCBqc1N0cmluZyh2bSwgU3RyaW5n
Ojpmcm9tVVRGOChtX3N1bW1hcnkpKSk7CiAgICAgaWYgKG1fZGV0YWlsLmxlbmd0aCgpKQotICAg
ICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+ZGV0YWlsLCBqc1N0
cmluZyhleGVjLCBTdHJpbmc6OmZyb21VVEY4KG1fZGV0YWlsKSkpOworICAgICAgICByZXN1bHQt
PnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+ZGV0YWlsLCBqc1N0cmluZyh2bSwgU3Ry
aW5nOjpmcm9tVVRGOChtX2RldGFpbCkpKTsKICAgICAKICAgICByZXR1cm4gcmVzdWx0OwogfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyT1NSRXhpdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyT1NS
RXhpdC5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9m
aWxlci9Qcm9maWxlck9TUkV4aXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUxLDcgKzUxLDcgQEAgSlNW
YWx1ZSBPU1JFeGl0Ojp0b0pTKEV4ZWNTdGF0ZSogZXhlYykgYwogICAgIEpTT2JqZWN0KiByZXN1
bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjKTsKICAgICByZXN1bHQtPnB1dERpcmVjdCh2
bSwgdm0ucHJvcGVydHlOYW1lcy0+aWQsIGpzTnVtYmVyKG1faWQpKTsKICAgICByZXN1bHQtPnB1
dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+b3JpZ2luLCBtX29yaWdpbi50b0pTKGV4ZWMp
KTsKLSAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+ZXhpdEtpbmQs
IGpzU3RyaW5nKGV4ZWMsIGV4aXRLaW5kVG9TdHJpbmcobV9leGl0S2luZCkpKTsKKyAgICByZXN1
bHQtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+ZXhpdEtpbmQsIGpzU3RyaW5nKHZt
LCBleGl0S2luZFRvU3RyaW5nKG1fZXhpdEtpbmQpKSk7CiAgICAgcmVzdWx0LT5wdXREaXJlY3Qo
dm0sIHZtLnByb3BlcnR5TmFtZXMtPmlzV2F0Y2hwb2ludCwganNCb29sZWFuKG1faXNXYXRjaHBv
aW50KSk7CiAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmNvdW50
LCBqc051bWJlcihtX2NvdW50ZXIpKTsKICAgICByZXR1cm4gcmVzdWx0OwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyT1NSRXhpdFNpdGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlck9TUkV4aXRTaXRl
LmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVy
L1Byb2ZpbGVyT1NSRXhpdFNpdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDEsNyArNDEsNyBA
QCBKU1ZhbHVlIE9TUkV4aXRTaXRlOjp0b0pTKEV4ZWNTdGF0ZSogZXhlCiAgICAgSlNBcnJheSog
cmVzdWx0ID0gY29uc3RydWN0RW1wdHlBcnJheShleGVjLCAwKTsKICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCB7IH0pOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2NvZGVB
ZGRyZXNzZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgcmVzdWx0LT5wdXREaXJlY3RJbmRleChl
eGVjLCBpLCBqc1N0cmluZyhleGVjLCB0b1N0cmluZyhSYXdQb2ludGVyKG1fY29kZUFkZHJlc3Nl
c1tpXS5kYXRhTG9jYXRpb24oKSkpKSk7CisgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0SW5kZXgo
ZXhlYywgaSwganNTdHJpbmcodm0sIHRvU3RyaW5nKFJhd1BvaW50ZXIobV9jb2RlQWRkcmVzc2Vz
W2ldLmRhdGFMb2NhdGlvbigpKSkpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgeyB9KTsKICAgICB9CiAgICAgcmV0dXJuIHJlc3VsdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9wcm9maWxlci9Qcm9maWxlclVJRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyVUlELmNwcAkocmV2aXNpb24gMjQ5MTI4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyVUlELmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC00OSw3ICs0OSw3IEBAIHZvaWQgVUlEOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNv
bnN0CiAKIEpTVmFsdWUgVUlEOjp0b0pTKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKIHsKLSAgICBy
ZXR1cm4ganNTdHJpbmcoZXhlYywgdG9TdHJpbmcoKnRoaXMpKTsKKyAgICByZXR1cm4ganNTdHJp
bmcoZXhlYy0+dm0oKSwgdG9TdHJpbmcoKnRoaXMpKTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OlByb2ZpbGVyCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BYnN0cmFj
dE1vZHVsZVJlY29yZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQWJzdHJhY3RNb2R1bGVSZWNvcmQuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BYnN0cmFjdE1vZHVsZVJlY29yZC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIw
MTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC02NSw3ICs2NSw3IEBAIHZvaWQgQWJzdHJhY3RNb2R1bGVSZWNvcmQ6OmZp
bmlzaENyZWF0aW8KICAgICBKU01hcCogbWFwID0gSlNNYXA6OmNyZWF0ZShleGVjLCB2bSwgZ2xv
YmFsT2JqZWN0KHZtKS0+bWFwU3RydWN0dXJlKCkpOwogICAgIHNjb3BlLnJlbGVhc2VBc3NlcnRO
b0V4Y2VwdGlvbigpOwogICAgIG1fZGVwZW5kZW5jaWVzTWFwLnNldCh2bSwgdGhpcywgbWFwKTsK
LSAgICBwdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiZGVwZW5kZW5j
aWVzTWFwIl9zKSwgbV9kZXBlbmRlbmNpZXNNYXAuZ2V0KCkpOworICAgIHB1dERpcmVjdCh2bSwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImRlcGVuZGVuY2llc01hcCJfcyksIG1fZGVwZW5k
ZW5jaWVzTWFwLmdldCgpKTsKIH0KIAogdm9pZCBBYnN0cmFjdE1vZHVsZVJlY29yZDo6dmlzaXRD
aGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQpAQCAtMTQ4LDcgKzE0
OCw3IEBAIEFic3RyYWN0TW9kdWxlUmVjb3JkKiBBYnN0cmFjdE1vZHVsZVJlY28KICAgICBKU1Zh
bHVlIG1vZHVsZU5hbWVWYWx1ZSA9IGlkZW50aWZpZXJUb0pTVmFsdWUodm0sIG1vZHVsZU5hbWUp
OwogICAgIEpTVmFsdWUgZW50cnkgPSBtX2RlcGVuZGVuY2llc01hcC0+SlNNYXA6OmdldChleGVj
LCBtb2R1bGVOYW1lVmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxw
dHIpOwotICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwganNDYXN0PEFic3RyYWN0TW9kdWxl
UmVjb3JkKj4oZW50cnkuZ2V0KGV4ZWMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgIm1v
ZHVsZSIpKSkpOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwganNDYXN0PEFic3RyYWN0
TW9kdWxlUmVjb3JkKj4oZW50cnkuZ2V0KGV4ZWMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0s
ICJtb2R1bGUiKSkpKTsKIH0KIAogYXV0byBBYnN0cmFjdE1vZHVsZVJlY29yZDo6cmVzb2x2ZUlt
cG9ydChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIGxvY2FsTmFtZSkgLT4gUmVz
b2x1dGlvbgpAQCAtNTQxLDcgKzU0MSw3IEBAIGF1dG8gQWJzdHJhY3RNb2R1bGVSZWNvcmQ6OnJl
c29sdmVFeHBvcnQKICAgICAgICAgLy8gRW5xdWV1ZSB0aGUgdGFza3MgaW4gcmV2ZXJzZSBvcmRl
ci4KICAgICAgICAgZm9yIChhdXRvIGl0ZXJhdG9yID0gcXVlcnkubW9kdWxlUmVjb3JkLT5zdGFy
RXhwb3J0RW50cmllcygpLnJiZWdpbigpLCBlbmQgPSBxdWVyeS5tb2R1bGVSZWNvcmQtPnN0YXJF
eHBvcnRFbnRyaWVzKCkucmVuZCgpOyBpdGVyYXRvciAhPSBlbmQ7ICsraXRlcmF0b3IpIHsKICAg
ICAgICAgICAgIGNvbnN0IFJlZlB0cjxVbmlxdWVkU3RyaW5nSW1wbD4mIHN0YXJNb2R1bGVOYW1l
ID0gKml0ZXJhdG9yOwotICAgICAgICAgICAgQWJzdHJhY3RNb2R1bGVSZWNvcmQqIGltcG9ydGVk
TW9kdWxlUmVjb3JkID0gcXVlcnkubW9kdWxlUmVjb3JkLT5ob3N0UmVzb2x2ZUltcG9ydGVkTW9k
dWxlKGV4ZWMsIElkZW50aWZpZXI6OmZyb21VaWQoZXhlYywgc3Rhck1vZHVsZU5hbWUuZ2V0KCkp
KTsKKyAgICAgICAgICAgIEFic3RyYWN0TW9kdWxlUmVjb3JkKiBpbXBvcnRlZE1vZHVsZVJlY29y
ZCA9IHF1ZXJ5Lm1vZHVsZVJlY29yZC0+aG9zdFJlc29sdmVJbXBvcnRlZE1vZHVsZShleGVjLCBJ
ZGVudGlmaWVyOjpmcm9tVWlkKHZtLCBzdGFyTW9kdWxlTmFtZS5nZXQoKSkpOwogICAgICAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwogICAgICAgICAgICAgcGVuZGlu
Z1Rhc2tzLmFwcGVuZChUYXNrIHsgUmVzb2x2ZVF1ZXJ5KGltcG9ydGVkTW9kdWxlUmVjb3JkLCBx
dWVyeS5leHBvcnROYW1lLmdldCgpKSwgVHlwZTo6UXVlcnkgfSk7CiAgICAgICAgIH0KQEAgLTcy
MCw3ICs3MjAsNyBAQCBzdGF0aWMgdm9pZCBnZXRFeHBvcnRlZE5hbWVzKEV4ZWNTdGF0ZSogCiAg
ICAgICAgIH0KIAogICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHN0YXJNb2R1bGVOYW1lIDogbW9k
dWxlUmVjb3JkLT5zdGFyRXhwb3J0RW50cmllcygpKSB7Ci0gICAgICAgICAgICBBYnN0cmFjdE1v
ZHVsZVJlY29yZCogcmVxdWVzdGVkTW9kdWxlUmVjb3JkID0gbW9kdWxlUmVjb3JkLT5ob3N0UmVz
b2x2ZUltcG9ydGVkTW9kdWxlKGV4ZWMsIElkZW50aWZpZXI6OmZyb21VaWQoZXhlYywgc3Rhck1v
ZHVsZU5hbWUuZ2V0KCkpKTsKKyAgICAgICAgICAgIEFic3RyYWN0TW9kdWxlUmVjb3JkKiByZXF1
ZXN0ZWRNb2R1bGVSZWNvcmQgPSBtb2R1bGVSZWNvcmQtPmhvc3RSZXNvbHZlSW1wb3J0ZWRNb2R1
bGUoZXhlYywgSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgc3Rhck1vZHVsZU5hbWUuZ2V0KCkpKTsK
ICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAgICAgICAg
ICAgICBwZW5kaW5nTW9kdWxlcy5hcHBlbmQocmVxdWVzdGVkTW9kdWxlUmVjb3JkKTsKICAgICAg
ICAgfQpAQCAtNzQzLDcgKzc0Myw3IEBAIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0KiBBYnN0cmFj
dE1vZHVsZVIKIAogICAgIFZlY3RvcjxzdGQ6OnBhaXI8SWRlbnRpZmllciwgUmVzb2x1dGlvbj4+
IHJlc29sdXRpb25zOwogICAgIGZvciAoYXV0byYgbmFtZSA6IGV4cG9ydGVkTmFtZXMpIHsKLSAg
ICAgICAgSWRlbnRpZmllciBpZGVudCA9IElkZW50aWZpZXI6OmZyb21VaWQoZXhlYywgbmFtZS5n
ZXQoKSk7CisgICAgICAgIElkZW50aWZpZXIgaWRlbnQgPSBJZGVudGlmaWVyOjpmcm9tVWlkKHZt
LCBuYW1lLmdldCgpKTsKICAgICAgICAgY29uc3QgUmVzb2x1dGlvbiByZXNvbHV0aW9uID0gcmVz
b2x2ZUV4cG9ydChleGVjLCBpZGVudCk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIG51bGxwdHIpOwogICAgICAgICBzd2l0Y2ggKHJlc29sdXRpb24udHlwZSkgewpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXJOZXV0ZXJpbmdXYXRjaHBv
aW50U2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9B
cnJheUJ1ZmZlck5ldXRlcmluZ1dhdGNocG9pbnRTZXQuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUJ1ZmZlck5ldXRlcmluZ1dhdGNo
cG9pbnRTZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTYyLDcgKzYyLDcgQEAgU3RydWN0dXJlKiBBcnJh
eUJ1ZmZlck5ldXRlcmluZ1dhdGNocG9pbgogCiB2b2lkIEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0
Y2hwb2ludFNldDo6ZmlyZUFsbCgpCiB7Ci0gICAgbV9zZXQtPmZpcmVBbGwoKnZtKCksICJBcnJh
eSBidWZmZXIgd2FzIG5ldXRlcmVkIik7CisgICAgbV9zZXQtPmZpcmVBbGwodm0oKSwgIkFycmF5
IGJ1ZmZlciB3YXMgbmV1dGVyZWQiKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUl0ZXJhdG9yUHJvdG90eXBlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUl0ZXJhdG9y
UHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQXJyYXlJdGVyYXRvclByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlLCBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOSBBcHBsZSwgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00Myw3
ICs0Myw3IEBAIHZvaWQgQXJyYXlJdGVyYXRvclByb3RvdHlwZTo6ZmluaXNoQ3JlYXQKIHsKICAg
ICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZv
KCkpKTsKLSAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1l
cy0+dG9TdHJpbmdUYWdTeW1ib2wsIGpzU3RyaW5nKCZ2bSwgIkFycmF5IEl0ZXJhdG9yIiksIFBy
b3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSk7
CisgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPnRv
U3RyaW5nVGFnU3ltYm9sLCBqc1N0cmluZyh2bSwgIkFycmF5IEl0ZXJhdG9yIiksIFByb3BlcnR5
QXR0cmlidXRlOjpEb250RW51bSB8IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSk7CiAgICAg
SlNDX0JVSUxUSU5fRlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lUSU9OKHZtLnByb3BlcnR5TmFtZXMt
Pm5leHQsIGFycmF5SXRlcmF0b3JQcm90b3R5cGVOZXh0Q29kZUdlbmVyYXRvciwgc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOwogfQogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwCShy
ZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVBy
b3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHly
aWdodCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29w
eXJpZ2h0IChDKSAyMDAzLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
IENvcHlyaWdodCAoQykgMjAwMy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqICBDb3B5cmlnaHQgKEMpIDIwMDMgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKICAqICBD
b3B5cmlnaHQgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiAoYXBAbnlwb3AuY29tKQogICoK
QEAgLTUzMywxOSArNTMzLDE5IEBAIGlubGluZSBKU1ZhbHVlIGZhc3RKb2luKEV4ZWNTdGF0ZSYg
c3RhdGUKICAgICAgICAgICAgIGdvdG8gZ2VuZXJhbENhc2U7CiAgICAgICAgIHN3aXRjaCAoc2Vw
YXJhdG9yLmxlbmd0aCgpKSB7CiAgICAgICAgIGNhc2UgMDoKLSAgICAgICAgICAgIFJFTEVBU0Vf
QU5EX1JFVFVSTihzY29wZSwganNFbXB0eVN0cmluZygmc3RhdGUpKTsKKyAgICAgICAgICAgIFJF
TEVBU0VfQU5EX1JFVFVSTihzY29wZSwganNFbXB0eVN0cmluZyh2bSkpOwogICAgICAgICBjYXNl
IDE6IHsKICAgICAgICAgICAgIGlmIChsZW5ndGggPD0gMSkKLSAgICAgICAgICAgICAgICBSRUxF
QVNFX0FORF9SRVRVUk4oc2NvcGUsIGpzRW1wdHlTdHJpbmcoJnN0YXRlKSk7CisgICAgICAgICAg
ICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBqc0VtcHR5U3RyaW5nKHZtKSk7CiAgICAg
ICAgICAgICBpZiAoc2VwYXJhdG9yLmlzOEJpdCgpKQogICAgICAgICAgICAgICAgIFJFTEVBU0Vf
QU5EX1JFVFVSTihzY29wZSwgcmVwZWF0Q2hhcmFjdGVyKHN0YXRlLCBzZXBhcmF0b3IuY2hhcmFj
dGVyczgoKVswXSwgbGVuZ3RoIC0gMSkpOwogICAgICAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJO
KHNjb3BlLCByZXBlYXRDaGFyYWN0ZXIoc3RhdGUsIHNlcGFyYXRvci5jaGFyYWN0ZXJzMTYoKVsw
XSwgbGVuZ3RoIC0gMSkpOwogICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgSlNTdHJpbmcq
IHJlc3VsdCA9IGpzRW1wdHlTdHJpbmcoJnN0YXRlKTsKKyAgICAgICAgICAgIEpTU3RyaW5nKiBy
ZXN1bHQgPSBqc0VtcHR5U3RyaW5nKHZtKTsKICAgICAgICAgICAgIGlmIChsZW5ndGggPD0gMSkK
ICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogCi0gICAgICAgICAgICBKU1N0cmluZyog
b3BlcmFuZCA9IGpzU3RyaW5nKCZ2bSwgc2VwYXJhdG9yLnRvU3RyaW5nKCkpOworICAgICAgICAg
ICAgSlNTdHJpbmcqIG9wZXJhbmQgPSBqc1N0cmluZyh2bSwgc2VwYXJhdG9yLnRvU3RyaW5nKCkp
OwogICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICAgICAg
ICAgIHVuc2lnbmVkIGNvdW50ID0gbGVuZ3RoIC0gMTsKICAgICAgICAgICAgIGZvciAoOzspIHsK
QEAgLTY5OSw3ICs2OTksNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJv
dG9GCiAgICAgICAgIEpTVmFsdWUgZWxlbWVudCA9IHRoaXNPYmplY3QtPmdldEluZGV4KGV4ZWMs
IGkpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgp
KTsKICAgICAgICAgaWYgKGVsZW1lbnQuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgICAg
IGVsZW1lbnQgPSBqc0VtcHR5U3RyaW5nKGV4ZWMpOworICAgICAgICAgICAgZWxlbWVudCA9IGpz
RW1wdHlTdHJpbmcodm0pOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIEpTVmFsdWUgY29u
dmVyc2lvbkZ1bmN0aW9uID0gZWxlbWVudC5nZXQoZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+dG9M
b2NhbGVTdHJpbmcpOwogICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5j
b2RlZEpTVmFsdWUoKSk7CkBAIC03MjgsNyArNzI4LDcgQEAgc3RhdGljIEpTVmFsdWUgc2xvd0pv
aW4oRXhlY1N0YXRlJiBleGVjLAogCiAgICAgLy8gNS4gSWYgbGVuIGlzIHplcm8sIHJldHVybiB0
aGUgZW1wdHkgU3RyaW5nLgogICAgIGlmICghbGVuZ3RoKQotICAgICAgICByZXR1cm4ganNFbXB0
eVN0cmluZygmZXhlYyk7CisgICAgICAgIHJldHVybiBqc0VtcHR5U3RyaW5nKHZtKTsKIAogICAg
IC8vIDYuIExldCBlbGVtZW50MCBiZSBHZXQoTywgIjAiKS4KICAgICBKU1ZhbHVlIGVsZW1lbnQw
ID0gdGhpc09iamVjdC0+Z2V0SW5kZXgoJmV4ZWMsIDApOwpAQCAtNzM3LDcgKzczNyw3IEBAIHN0
YXRpYyBKU1ZhbHVlIHNsb3dKb2luKEV4ZWNTdGF0ZSYgZXhlYywKICAgICAvLyA3LiBJZiBlbGVt
ZW50MCBpcyB1bmRlZmluZWQgb3IgbnVsbCwgbGV0IFIgYmUgdGhlIGVtcHR5IFN0cmluZzsgb3Ro
ZXJ3aXNlLCBsZXQgUiBiZSA/IFRvU3RyaW5nKGVsZW1lbnQwKS4KICAgICBKU1N0cmluZyogciA9
IG51bGxwdHI7CiAgICAgaWYgKGVsZW1lbnQwLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAg
IHIgPSBqc0VtcHR5U3RyaW5nKCZleGVjKTsKKyAgICAgICAgciA9IGpzRW1wdHlTdHJpbmcodm0p
OwogICAgIGVsc2UKICAgICAgICAgciA9IGVsZW1lbnQwLnRvU3RyaW5nKCZleGVjKTsKICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwpAQCAtNzQ3LDcgKzc0Nyw3IEBAIHN0YXRp
YyBKU1ZhbHVlIHNsb3dKb2luKEV4ZWNTdGF0ZSYgZXhlYywKICAgICAvLyA5LmUgSW5jcmVhc2Ug
ayBieSAxLi4KICAgICBmb3IgKHVpbnQ2NF90IGsgPSAxOyBrIDwgbGVuZ3RoOyArK2spIHsKICAg
ICAgICAgLy8gYi4gTGV0IGVsZW1lbnQgYmUgPyBHZXQoTywgISBUb1N0cmluZyhrKSkuCi0gICAg
ICAgIEpTVmFsdWUgZWxlbWVudCA9IHRoaXNPYmplY3QtPmdldCgmZXhlYywgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZygmZXhlYywgQXRvbVN0cmluZzo6bnVtYmVyKGspKSk7CisgICAgICAgIEpTVmFs
dWUgZWxlbWVudCA9IHRoaXNPYmplY3QtPmdldCgmZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zyh2bSwgQXRvbVN0cmluZzo6bnVtYmVyKGspKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIHsgfSk7CiAKICAgICAgICAgLy8gYy4gSWYgZWxlbWVudCBpcyB1bmRlZmluZWQg
b3IgbnVsbCwgbGV0IG5leHQgYmUgdGhlIGVtcHR5IFN0cmluZzsgb3RoZXJ3aXNlLCBsZXQgbmV4
dCBiZSA/IFRvU3RyaW5nKGVsZW1lbnQpLgpAQCAtNzU1LDcgKzc1NSw3IEBAIHN0YXRpYyBKU1Zh
bHVlIHNsb3dKb2luKEV4ZWNTdGF0ZSYgZXhlYywKICAgICAgICAgaWYgKGVsZW1lbnQuaXNVbmRl
ZmluZWRPck51bGwoKSkgewogICAgICAgICAgICAgaWYgKCFzZXBhcmF0b3ItPmxlbmd0aCgpKQog
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgbmV4dCA9IGpzRW1wdHlTdHJp
bmcoJmV4ZWMpOworICAgICAgICAgICAgbmV4dCA9IGpzRW1wdHlTdHJpbmcodm0pOwogICAgICAg
ICB9IGVsc2UKICAgICAgICAgICAgIG5leHQgPSBlbGVtZW50LnRvU3RyaW5nKCZleGVjKTsKICAg
ICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKQEAgLTc5Nyw3ICs3OTcsNyBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgICAgIGlmIChV
TkxJS0VMWShsZW5ndGggPiBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgfHwg
IWNhblVzZUZhc3RKb2luKHRoaXNPYmplY3QpKSkgewogICAgICAgICAgICAgdWludDY0X3QgbGVu
Z3RoNjQgPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4obGVuZ3RoKTsKICAgICAgICAgICAgIEFTU0VS
VChzdGF0aWNfY2FzdDxkb3VibGU+KGxlbmd0aDY0KSA9PSBsZW5ndGgpOwotICAgICAgICAgICAg
SlNTdHJpbmcqIGpzU2VwYXJhdG9yID0ganNTaW5nbGVDaGFyYWN0ZXJTdHJpbmcoZXhlYywgY29t
bWEpOworICAgICAgICAgICAgSlNTdHJpbmcqIGpzU2VwYXJhdG9yID0ganNTaW5nbGVDaGFyYWN0
ZXJTdHJpbmcodm0sIGNvbW1hKTsKICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogCiAgICAgICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4o
c2NvcGUsIEpTVmFsdWU6OmVuY29kZShzbG93Sm9pbigqZXhlYywgdGhpc09iamVjdCwganNTZXBh
cmF0b3IsIGxlbmd0aDY0KSkpOwpAQCAtODg4LDcgKzg4OCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICAgICAgICAgIHRoaXNPYmotPm1ldGhvZFRhYmxl
KHZtKS0+cHV0QnlJbmRleCh0aGlzT2JqLCBleGVjLCBsZW5ndGggKyBuLCBleGVjLT51bmNoZWNr
ZWRBcmd1bWVudChuKSwgdHJ1ZSk7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgUHV0UHJv
cGVydHlTbG90IHNsb3QodGhpc09iaik7Ci0gICAgICAgICAgICBJZGVudGlmaWVyIHByb3BlcnR5
TmFtZSA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgSlNWYWx1ZShzdGF0aWNfY2FzdDxp
bnQ2NF90PihsZW5ndGgpICsgc3RhdGljX2Nhc3Q8aW50NjRfdD4obikpLnRvV1RGU3RyaW5nKGV4
ZWMpKTsKKyAgICAgICAgICAgIElkZW50aWZpZXIgcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6
ZnJvbVN0cmluZyh2bSwgSlNWYWx1ZShzdGF0aWNfY2FzdDxpbnQ2NF90PihsZW5ndGgpICsgc3Rh
dGljX2Nhc3Q8aW50NjRfdD4obikpLnRvV1RGU3RyaW5nKGV4ZWMpKTsKICAgICAgICAgICAgIHRo
aXNPYmotPm1ldGhvZFRhYmxlKHZtKS0+cHV0KHRoaXNPYmosIGV4ZWMsIHByb3BlcnR5TmFtZSwg
ZXhlYy0+dW5jaGVja2VkQXJndW1lbnQobiksIHNsb3QpOwogICAgICAgICB9CiAgICAgICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXN5bmNGdW5jdGlvblByb3RvdHlwZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXN5bmNGdW5jdGlvblByb3Rv
dHlwZS5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0FzeW5jRnVuY3Rpb25Qcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxNiBDYWl0bGluIFBvdHRlciA8Y2FpdHBAaWdh
bGlhLmNvbT4uCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00OSw3ICs1MCw3IEBA
IHZvaWQgQXN5bmNGdW5jdGlvblByb3RvdHlwZTo6ZmluaXNoQ3JlYXQKICAgICBCYXNlOjpmaW5p
c2hDcmVhdGlvbih2bSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKICAgICBw
dXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBq
c051bWJlcigwKSwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUgfCBQcm9wZXJ0eUF0dHJp
YnV0ZTo6UmVhZE9ubHkgfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwotICAgIHB1dERp
cmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT50b1N0cmluZ1RhZ1N5
bWJvbCwganNTdHJpbmcoJnZtLCAiQXN5bmNGdW5jdGlvbiIpLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6
RG9udEVudW0gfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpOworICAgIHB1dERpcmVjdFdp
dGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT50b1N0cmluZ1RhZ1N5bWJvbCwg
anNTdHJpbmcodm0sICJBc3luY0Z1bmN0aW9uIiksIFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51
bSB8IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpT
QwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXN5bmNHZW5lcmF0b3JGdW5j
dGlvblByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQXN5bmNHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDI0OTEy
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FzeW5jR2VuZXJhdG9yRnVuY3Rp
b25Qcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENv
cHlyaWdodCAoQykgMjAxNyBPbGVrc2FuZHIgU2thY2hrb3YgPGdza2FjaGtvdkBnbWFpbC5jb20+
LgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDksNyArNTAsNyBAQCB2b2lkIEFz
eW5jR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGU6OmZpCiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRp
b24odm0pOwogICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7CiAgICAgcHV0RGlyZWN0
V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIo
MCksIFByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJl
YWRPbmx5IHwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKLSAgICBwdXREaXJlY3RXaXRo
b3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+dG9TdHJpbmdUYWdTeW1ib2wsIGpz
U3RyaW5nKCZ2bSwgIkFzeW5jR2VuZXJhdG9yRnVuY3Rpb24iKSwgUHJvcGVydHlBdHRyaWJ1dGU6
OkRvbnRFbnVtIHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KTsKKyAgICBwdXREaXJlY3RX
aXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+dG9TdHJpbmdUYWdTeW1ib2ws
IGpzU3RyaW5nKHZtLCAiQXN5bmNHZW5lcmF0b3JGdW5jdGlvbiIpLCBQcm9wZXJ0eUF0dHJpYnV0
ZTo6RG9udEVudW0gfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FzeW5jR2Vu
ZXJhdG9yUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Bc3luY0dlbmVyYXRvclByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FzeW5jR2VuZXJhdG9yUHJvdG90eXBlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIw
MTcgT2xla3NhbmRyIFNrYWNoa292IDxnc2thY2hrb3ZAZ21haWwuY29tPi4KKyAqIENvcHlyaWdo
dCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ4LDcgKzQ5LDcgQEAgdm9pZCBBc3luY0dlbmVyYXRvclBy
b3RvdHlwZTo6ZmluaXNoQ3JlYQogewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAg
ICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOwotICAgIHB1dERpcmVjdFdpdGhvdXRUcmFu
c2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT50b1N0cmluZ1RhZ1N5bWJvbCwganNTdHJpbmco
JnZtLCAiQXN5bmNHZW5lcmF0b3IiKSwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtIHwgUHJv
cGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KTsKKyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlv
bih2bSwgdm0ucHJvcGVydHlOYW1lcy0+dG9TdHJpbmdUYWdTeW1ib2wsIGpzU3RyaW5nKHZtLCAi
QXN5bmNHZW5lcmF0b3IiKSwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtIHwgUHJvcGVydHlB
dHRyaWJ1dGU6OlJlYWRPbmx5KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BdG9taWNzT2JqZWN0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BdG9taWNzT2JqZWN0LmNwcAkocmV2aXNp
b24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXRvbWljc09iamVj
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04MSw3ICs4MSw3IEBAIHZvaWQgQXRvbWljc09iamVj
dDo6ZmluaXNoQ3JlYXRpb24oVk0mIHYKICAgICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkp
OwogICAgIAogI2RlZmluZSBQVVRfRElSRUNUX05BVElWRV9GVU5DKGxvd2VyTmFtZSwgdXBwZXJO
YW1lLCBjb3VudCkgXAotICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9uV2l0aG91dFRyYW5zaXRp
b24odm0sIGdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICNsb3dlck5h
bWUpLCBjb3VudCwgYXRvbWljc0Z1bmMgIyMgdXBwZXJOYW1lLCBBdG9taWNzICMjIHVwcGVyTmFt
ZSAjIyBJbnRyaW5zaWMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6
RG9udEVudW0pKTsKKyAgICBwdXREaXJlY3ROYXRpdmVGdW5jdGlvbldpdGhvdXRUcmFuc2l0aW9u
KHZtLCBnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICNsb3dlck5hbWUp
LCBjb3VudCwgYXRvbWljc0Z1bmMgIyMgdXBwZXJOYW1lLCBBdG9taWNzICMjIHVwcGVyTmFtZSAj
IyBJbnRyaW5zaWMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9u
dEVudW0pKTsKICAgICBGT1JfRUFDSF9BVE9NSUNTX0ZVTkMoUFVUX0RJUkVDVF9OQVRJVkVfRlVO
QykKICN1bmRlZiBQVVRfRElSRUNUX05BVElWRV9GVU5DCiB9CkBAIC00MjUsNyArNDI1LDcgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhdG9taWNzRnVuYwogICAgICAgICByZXN1bHRT
dHJpbmcgPSAidGltZWQtb3V0IjsKICAgICBlbHNlCiAgICAgICAgIHJlc3VsdFN0cmluZyA9ICJv
ayI7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyhleGVjLCByZXN1bHRTdHJp
bmcpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKHZtLCByZXN1bHRTdHJp
bmcpKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhdG9taWNzRnVuY1dha2Uo
RXhlY1N0YXRlKiBleGVjKQpAQCAtNDY4LDcgKzQ2OCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgYXRvbWljc0Z1bmMKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uQXRvbWljc0FkZChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGJhc2UsIEVuY29k
ZWRKU1ZhbHVlIGluZGV4LCBFbmNvZGVkSlNWYWx1ZSBvcGVyYW5kKQogewogICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMp
OworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIEpTVmFs
dWUgYXJnc1tdID0ge0pTVmFsdWU6OmRlY29kZShiYXNlKSwgSlNWYWx1ZTo6ZGVjb2RlKGluZGV4
KSwgSlNWYWx1ZTo6ZGVjb2RlKG9wZXJhbmQpfTsKICAgICByZXR1cm4gYXRvbWljT3BlcmF0aW9u
V2l0aEFyZ3Modm0sIGV4ZWMsIGFyZ3MsIEFkZEZ1bmMoKSk7CiB9CkBAIC00NzYsNyArNDc2LDcg
QEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25BdAogRW5jb2RlZEpTVmFs
dWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25BdG9taWNzQW5kKEV4ZWNTdGF0ZSogZXhlYywgRW5j
b2RlZEpTVmFsdWUgYmFzZSwgRW5jb2RlZEpTVmFsdWUgaW5kZXgsIEVuY29kZWRKU1ZhbHVlIG9w
ZXJhbmQpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVU
cmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cih2bSwgZXhlYyk7CiAgICAgSlNWYWx1ZSBhcmdzW10gPSB7SlNWYWx1ZTo6ZGVjb2RlKGJhc2Up
LCBKU1ZhbHVlOjpkZWNvZGUoaW5kZXgpLCBKU1ZhbHVlOjpkZWNvZGUob3BlcmFuZCl9OwogICAg
IHJldHVybiBhdG9taWNPcGVyYXRpb25XaXRoQXJncyh2bSwgZXhlYywgYXJncywgQW5kRnVuYygp
KTsKIH0KQEAgLTQ4NCw3ICs0ODQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbkF0CiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkF0b21pY3ND
b21wYXJlRXhjaGFuZ2UoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBiYXNlLCBFbmNv
ZGVkSlNWYWx1ZSBpbmRleCwgRW5jb2RlZEpTVmFsdWUgZXhwZWN0ZWQsIEVuY29kZWRKU1ZhbHVl
IG5ld1ZhbHVlKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIodm0sIGV4ZWMpOwogICAgIEpTVmFsdWUgYXJnc1tdID0ge0pTVmFsdWU6OmRlY29kZShi
YXNlKSwgSlNWYWx1ZTo6ZGVjb2RlKGluZGV4KSwgSlNWYWx1ZTo6ZGVjb2RlKGV4cGVjdGVkKSwg
SlNWYWx1ZTo6ZGVjb2RlKG5ld1ZhbHVlKX07CiAgICAgcmV0dXJuIGF0b21pY09wZXJhdGlvbldp
dGhBcmdzKHZtLCBleGVjLCBhcmdzLCBDb21wYXJlRXhjaGFuZ2VGdW5jKCkpOwogfQpAQCAtNDky
LDcgKzQ5Miw3IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXQKIEVu
Y29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXRvbWljc0V4Y2hhbmdlKEV4ZWNT
dGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgYmFzZSwgRW5jb2RlZEpTVmFsdWUgaW5kZXgsIEVu
Y29kZWRKU1ZhbHVlIG9wZXJhbmQpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgSlNWYWx1ZSBhcmdzW10gPSB7SlNWYWx1
ZTo6ZGVjb2RlKGJhc2UpLCBKU1ZhbHVlOjpkZWNvZGUoaW5kZXgpLCBKU1ZhbHVlOjpkZWNvZGUo
b3BlcmFuZCl9OwogICAgIHJldHVybiBhdG9taWNPcGVyYXRpb25XaXRoQXJncyh2bSwgZXhlYywg
YXJncywgRXhjaGFuZ2VGdW5jKCkpOwogfQpAQCAtNTAwLDE0ICs1MDAsMTQgQEAgRW5jb2RlZEpT
VmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25BdAogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJB
VElPTiBvcGVyYXRpb25BdG9taWNzSXNMb2NrRnJlZShFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRK
U1ZhbHVlIHNpemUpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcih2bSwgZXhlYyk7CiAgICAgcmV0dXJuIGlzTG9ja0ZyZWUoZXhlYywgSlNWYWx1ZTo6
ZGVjb2RlKHNpemUpKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRp
b25BdG9taWNzTG9hZChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGJhc2UsIEVuY29k
ZWRKU1ZhbHVlIGluZGV4KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZl
Q2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRy
YWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIEpTVmFsdWUgYXJnc1tdID0ge0pTVmFsdWU6OmRl
Y29kZShiYXNlKSwgSlNWYWx1ZTo6ZGVjb2RlKGluZGV4KX07CiAgICAgcmV0dXJuIGF0b21pY09w
ZXJhdGlvbldpdGhBcmdzKHZtLCBleGVjLCBhcmdzLCBMb2FkRnVuYygpKTsKIH0KQEAgLTUxNSw3
ICs1MTUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkF0CiBFbmNv
ZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkF0b21pY3NPcihFeGVjU3RhdGUqIGV4
ZWMsIEVuY29kZWRKU1ZhbHVlIGJhc2UsIEVuY29kZWRKU1ZhbHVlIGluZGV4LCBFbmNvZGVkSlNW
YWx1ZSBvcGVyYW5kKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIEpTVmFsdWUgYXJnc1tdID0ge0pTVmFsdWU6OmRlY29k
ZShiYXNlKSwgSlNWYWx1ZTo6ZGVjb2RlKGluZGV4KSwgSlNWYWx1ZTo6ZGVjb2RlKG9wZXJhbmQp
fTsKICAgICByZXR1cm4gYXRvbWljT3BlcmF0aW9uV2l0aEFyZ3Modm0sIGV4ZWMsIGFyZ3MsIE9y
RnVuYygpKTsKIH0KQEAgLTUyMyw3ICs1MjMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvbkF0CiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkF0
b21pY3NTdG9yZShFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGJhc2UsIEVuY29kZWRK
U1ZhbHVlIGluZGV4LCBFbmNvZGVkSlNWYWx1ZSBvcGVyYW5kKQogewogICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwor
ICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIEpTVmFsdWUg
YXJnc1tdID0ge0pTVmFsdWU6OmRlY29kZShiYXNlKSwgSlNWYWx1ZTo6ZGVjb2RlKGluZGV4KSwg
SlNWYWx1ZTo6ZGVjb2RlKG9wZXJhbmQpfTsKICAgICByZXR1cm4gYXRvbWljT3BlcmF0aW9uV2l0
aEFyZ3Modm0sIGV4ZWMsIGFyZ3MsIFN0b3JlRnVuYygpKTsKIH0KQEAgLTUzMSw3ICs1MzEsNyBA
QCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkF0CiBFbmNvZGVkSlNWYWx1
ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkF0b21pY3NTdWIoRXhlY1N0YXRlKiBleGVjLCBFbmNv
ZGVkSlNWYWx1ZSBiYXNlLCBFbmNvZGVkSlNWYWx1ZSBpbmRleCwgRW5jb2RlZEpTVmFsdWUgb3Bl
cmFuZCkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRy
YWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KHZtLCBleGVjKTsKICAgICBKU1ZhbHVlIGFyZ3NbXSA9IHtKU1ZhbHVlOjpkZWNvZGUoYmFzZSks
IEpTVmFsdWU6OmRlY29kZShpbmRleCksIEpTVmFsdWU6OmRlY29kZShvcGVyYW5kKX07CiAgICAg
cmV0dXJuIGF0b21pY09wZXJhdGlvbldpdGhBcmdzKHZtLCBleGVjLCBhcmdzLCBTdWJGdW5jKCkp
OwogfQpAQCAtNTM5LDcgKzUzOSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uQXQKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXRvbWljc1hv
cihFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGJhc2UsIEVuY29kZWRKU1ZhbHVlIGlu
ZGV4LCBFbmNvZGVkSlNWYWx1ZSBvcGVyYW5kKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIEpTVmFsdWUgYXJnc1tdID0g
e0pTVmFsdWU6OmRlY29kZShiYXNlKSwgSlNWYWx1ZTo6ZGVjb2RlKGluZGV4KSwgSlNWYWx1ZTo6
ZGVjb2RlKG9wZXJhbmQpfTsKICAgICByZXR1cm4gYXRvbWljT3BlcmF0aW9uV2l0aEFyZ3Modm0s
IGV4ZWMsIGFyZ3MsIFhvckZ1bmMoKSk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9CaWdJbnRQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0JpZ0ludFByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0JpZ0ludFByb3RvdHlwZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE3IENhaW8g
TGltYSA8dGljYWlvbGltYUBnbWFpbC5jb20+LgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtNzIsNyArNzIsNyBAQCB2b2lkIEJpZ0ludFByb3RvdHlwZTo6ZmluaXNoQ3JlYXRp
b24oVk0mCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIEFTU0VSVChpbmhl
cml0cyh2bSwgaW5mbygpKSk7Ci0gICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZt
LnByb3BlcnR5TmFtZXMtPnRvU3RyaW5nVGFnU3ltYm9sLCBqc1N0cmluZygmdm0sICJCaWdJbnQi
KSwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtIHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRP
bmx5KTsKKyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1l
cy0+dG9TdHJpbmdUYWdTeW1ib2wsIGpzU3RyaW5nKHZtLCAiQmlnSW50IiksIFByb3BlcnR5QXR0
cmlidXRlOjpEb250RW51bSB8IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSk7CiB9CiAKIC8v
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCkBAIC0xMTAsNyArMTEwLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBiaWdJbnRQcm90bwogICAgIGlmIChyZXN1bHRTdHJpbmcubGVuZ3RoKCkgPT0gMSkKICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh2bS5zbWFsbFN0cmluZ3Muc2luZ2xlQ2hhcmFj
dGVyU3RyaW5nKHJlc3VsdFN0cmluZ1swXSkpOwogCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc05vbnRyaXZpYWxTdHJpbmcoJnZtLCByZXN1bHRTdHJpbmcpKTsKKyAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzTm9udHJpdmlhbFN0cmluZyh2bSwgcmVzdWx0U3RyaW5nKSk7CiB9CiAK
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYmlnSW50UHJvdG9GdW5jVG9Mb2NhbGVTdHJp
bmcoRXhlY1N0YXRlKiBzdGF0ZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0NhY2hlZFR5cGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9DYWNoZWRUeXBlcy5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0NhY2hlZFR5cGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzExLDcg
KzcxMSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGlmICghbV9pc1N5bWJvbCkKICAgICAgICAg
ICAgICAgICByZXR1cm4gQXRvbVN0cmluZ0ltcGw6OmFkZChidWZmZXIsIG1fbGVuZ3RoKS5sZWFr
UmVmKCk7CiAKLSAgICAgICAgICAgIElkZW50aWZpZXIgaWRlbnQgPSBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKCZkZWNvZGVyLnZtKCksIGJ1ZmZlciwgbV9sZW5ndGgpOworICAgICAgICAgICAgSWRl
bnRpZmllciBpZGVudCA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcoZGVjb2Rlci52bSgpLCBidWZm
ZXIsIG1fbGVuZ3RoKTsKICAgICAgICAgICAgIFN0cmluZyBzdHIgPSBkZWNvZGVyLnZtKCkucHJv
cGVydHlOYW1lcy0+bG9va1VwUHJpdmF0ZU5hbWUoaWRlbnQpOwogICAgICAgICAgICAgU3RyaW5n
SW1wbCogaW1wbCA9IHN0ci5yZWxlYXNlSW1wbCgpLmdldCgpOwogICAgICAgICAgICAgQVNTRVJU
KGltcGwtPmlzU3ltYm9sKCkpOwpAQCAtNzczLDcgKzc3Myw3IEBAIHB1YmxpYzoKICAgICAgICAg
aWYgKHN0ci5pc051bGwoKSkKICAgICAgICAgICAgIHJldHVybiBJZGVudGlmaWVyKCk7CiAKLSAg
ICAgICAgcmV0dXJuIElkZW50aWZpZXI6OmZyb21VaWQoJmRlY29kZXIudm0oKSwgKFVuaXF1ZWRT
dHJpbmdJbXBsKilzdHIuaW1wbCgpKTsKKyAgICAgICAgcmV0dXJuIElkZW50aWZpZXI6OmZyb21V
aWQoZGVjb2Rlci52bSgpLCAoVW5pcXVlZFN0cmluZ0ltcGwqKXN0ci5pbXBsKCkpOwogICAgIH0K
IAogICAgIHZvaWQgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIElkZW50aWZpZXImIGlkZW50KSBj
b25zdApAQCAtMTMxNCw3ICsxMzE0LDcgQEAgcHVibGljOgogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIGNhc2UgRW5jb2RlZFR5cGU6OlN0cmluZzogewogICAgICAgICAgICAgU3RyaW5nSW1w
bCogaW1wbCA9IHRoaXMtPmJ1ZmZlcjxDYWNoZWRVbmlxdWVkU3RyaW5nSW1wbD4oKS0+ZGVjb2Rl
KGRlY29kZXIpOwotICAgICAgICAgICAgdiA9IGpzU3RyaW5nKCZkZWNvZGVyLnZtKCksIGFkb3B0
UmVmKCppbXBsKSk7CisgICAgICAgICAgICB2ID0ganNTdHJpbmcoZGVjb2Rlci52bSgpLCBhZG9w
dFJlZigqaW1wbCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2Fz
ZSBFbmNvZGVkVHlwZTo6SW1tdXRhYmxlQnV0dGVyZmx5OgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ29kZUNhY2hlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Db2RlQ2FjaGUuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2RlQ2FjaGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00NSw3ICs0NSw3IEBAIHZvaWQgQ29kZUNhY2hlTWFwOjpwcnVuZVNsb3dDYXNlKCkKICAgICB3
aGlsZSAobV9zaXplID4gbV9jYXBhY2l0eSB8fCAhY2FuUHJ1bmVRdWlja2x5KCkpIHsKICAgICAg
ICAgTWFwVHlwZTo6aXRlcmF0b3IgaXQgPSBtX21hcC5iZWdpbigpOwogCi0gICAgICAgIHdyaXRl
Q29kZUJsb2NrKCppdC0+dmFsdWUuY2VsbC0+dm0oKSwgaXQtPmtleSwgaXQtPnZhbHVlKTsKKyAg
ICAgICAgd3JpdGVDb2RlQmxvY2soaXQtPnZhbHVlLmNlbGwtPnZtKCksIGl0LT5rZXksIGl0LT52
YWx1ZSk7CiAKICAgICAgICAgbV9zaXplIC09IGl0LT5rZXkubGVuZ3RoKCk7CiAgICAgICAgIG1f
bWFwLnJlbW92ZShpdCk7CkBAIC0xNTEsNyArMTUxLDcgQEAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1
dGFibGUqIENvZGVDYWNoZTo6ZwogICAgIC8vIFRoZSBGdW5jdGlvbiBjb25zdHJ1Y3RvciBvbmx5
IGhhcyBhY2Nlc3MgdG8gZ2xvYmFsIHZhcmlhYmxlcywgc28gbm8gdmFyaWFibGVzIHdpbGwgYmUg
dW5kZXIgVERaIHVubGVzcyB0aGV5J3JlCiAgICAgLy8gaW4gdGhlIGdsb2JhbCBsZXhpY2FsIGVu
dmlyb25tZW50LCB3aGljaCB3ZSBhbHdheXMgVERaIGNoZWNrIGFjY2Vzc2VzIGZyb20uCiAgICAg
Q29uc3RydWN0QWJpbGl0eSBjb25zdHJ1Y3RBYmlsaXR5ID0gY29uc3RydWN0QWJpbGl0eUZvclBh
cnNlTW9kZShtZXRhZGF0YS0+cGFyc2VNb2RlKCkpOwotICAgIFVubGlua2VkRnVuY3Rpb25FeGVj
dXRhYmxlKiBmdW5jdGlvbkV4ZWN1dGFibGUgPSBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6
Y3JlYXRlKCZ2bSwgc291cmNlLCBtZXRhZGF0YSwgVW5saW5rZWROb3JtYWxGdW5jdGlvbiwgY29u
c3RydWN0QWJpbGl0eSwgSlNQYXJzZXJTY3JpcHRNb2RlOjpDbGFzc2ljLCBXVEY6Om51bGxvcHQs
IERlcml2ZWRDb250ZXh0VHlwZTo6Tm9uZSk7CisgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFi
bGUqIGZ1bmN0aW9uRXhlY3V0YWJsZSA9IFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpjcmVh
dGUodm0sIHNvdXJjZSwgbWV0YWRhdGEsIFVubGlua2VkTm9ybWFsRnVuY3Rpb24sIGNvbnN0cnVj
dEFiaWxpdHksIEpTUGFyc2VyU2NyaXB0TW9kZTo6Q2xhc3NpYywgV1RGOjpudWxsb3B0LCBEZXJp
dmVkQ29udGV4dFR5cGU6Ok5vbmUpOwogCiAgICAgaWYgKCFzb3VyY2UucHJvdmlkZXIoKS0+c291
cmNlVVJMRGlyZWN0aXZlKCkuaXNOdWxsKCkpCiAgICAgICAgIGZ1bmN0aW9uRXhlY3V0YWJsZS0+
c2V0U291cmNlVVJMRGlyZWN0aXZlKHNvdXJjZS5wcm92aWRlcigpLT5zb3VyY2VVUkxEaXJlY3Rp
dmUoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2RlQ2FjaGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2RlQ2FjaGUuaAko
cmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29kZUNh
Y2hlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2NCw3ICsyNjQsNyBAQCBVbmxpbmtlZENvZGVCbG9j
a1R5cGUqIGdlbmVyYXRlVW5saW5rZWRDCiB7CiAgICAgdHlwZWRlZiB0eXBlbmFtZSBDYWNoZVR5
cGVzPFVubGlua2VkQ29kZUJsb2NrVHlwZT46OlJvb3ROb2RlIFJvb3ROb2RlOwogICAgIHN0ZDo6
dW5pcXVlX3B0cjxSb290Tm9kZT4gcm9vdE5vZGUgPSBwYXJzZTxSb290Tm9kZT4oCi0gICAgICAg
ICZ2bSwgc291cmNlLCBJZGVudGlmaWVyKCksIEpTUGFyc2VyQnVpbHRpbk1vZGU6Ok5vdEJ1aWx0
aW4sIHN0cmljdE1vZGUsIHNjcmlwdE1vZGUsIENhY2hlVHlwZXM8VW5saW5rZWRDb2RlQmxvY2tU
eXBlPjo6cGFyc2VNb2RlLCBTdXBlckJpbmRpbmc6Ok5vdE5lZWRlZCwgZXJyb3IsIG51bGxwdHIs
IENvbnN0cnVjdG9yS2luZDo6Tm9uZSwgZGVyaXZlZENvbnRleHRUeXBlLCBldmFsQ29udGV4dFR5
cGUpOworICAgICAgICB2bSwgc291cmNlLCBJZGVudGlmaWVyKCksIEpTUGFyc2VyQnVpbHRpbk1v
ZGU6Ok5vdEJ1aWx0aW4sIHN0cmljdE1vZGUsIHNjcmlwdE1vZGUsIENhY2hlVHlwZXM8VW5saW5r
ZWRDb2RlQmxvY2tUeXBlPjo6cGFyc2VNb2RlLCBTdXBlckJpbmRpbmc6Ok5vdE5lZWRlZCwgZXJy
b3IsIG51bGxwdHIsIENvbnN0cnVjdG9yS2luZDo6Tm9uZSwgZGVyaXZlZENvbnRleHRUeXBlLCBl
dmFsQ29udGV4dFR5cGUpOwogICAgIGlmICghcm9vdE5vZGUpCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogCkBAIC0yODEsNyArMjgxLDcgQEAgVW5saW5rZWRDb2RlQmxvY2tUeXBlKiBnZW5lcmF0
ZVVubGlua2VkQwogICAgIGJvb2wgaXNTdHJpY3RNb2RlID0gcm9vdE5vZGUtPmZlYXR1cmVzKCkg
JiBTdHJpY3RNb2RlRmVhdHVyZTsKICAgICBFeGVjdXRhYmxlSW5mbyBleGVjdXRhYmxlSW5mbyh1
c2VzRXZhbCwgaXNTdHJpY3RNb2RlLCBmYWxzZSwgZmFsc2UsIENvbnN0cnVjdG9yS2luZDo6Tm9u
ZSwgc2NyaXB0TW9kZSwgU3VwZXJCaW5kaW5nOjpOb3ROZWVkZWQsIENhY2hlVHlwZXM8VW5saW5r
ZWRDb2RlQmxvY2tUeXBlPjo6cGFyc2VNb2RlLCBkZXJpdmVkQ29udGV4dFR5cGUsIGlzQXJyb3dG
dW5jdGlvbkNvbnRleHQsIGZhbHNlLCBldmFsQ29udGV4dFR5cGUpOwogCi0gICAgVW5saW5rZWRD
b2RlQmxvY2tUeXBlKiB1bmxpbmtlZENvZGVCbG9jayA9IFVubGlua2VkQ29kZUJsb2NrVHlwZTo6
Y3JlYXRlKCZ2bSwgZXhlY3V0YWJsZUluZm8sIGNvZGVHZW5lcmF0aW9uTW9kZSk7CisgICAgVW5s
aW5rZWRDb2RlQmxvY2tUeXBlKiB1bmxpbmtlZENvZGVCbG9jayA9IFVubGlua2VkQ29kZUJsb2Nr
VHlwZTo6Y3JlYXRlKHZtLCBleGVjdXRhYmxlSW5mbywgY29kZUdlbmVyYXRpb25Nb2RlKTsKICAg
ICB1bmxpbmtlZENvZGVCbG9jay0+cmVjb3JkUGFyc2Uocm9vdE5vZGUtPmZlYXR1cmVzKCksIHJv
b3ROb2RlLT5oYXNDYXB0dXJlZFZhcmlhYmxlcygpLCBsaW5lQ291bnQsIHVubGlua2VkRW5kQ29s
dW1uKTsKICAgICBpZiAoIXNvdXJjZS5wcm92aWRlcigpLT5zb3VyY2VVUkxEaXJlY3RpdmUoKS5p
c051bGwoKSkKICAgICAgICAgdW5saW5rZWRDb2RlQmxvY2stPnNldFNvdXJjZVVSTERpcmVjdGl2
ZShzb3VyY2UucHJvdmlkZXIoKS0+c291cmNlVVJMRGlyZWN0aXZlKCkpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uSWRlbnRpZmllcnMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vbklkZW50aWZpZXJzLmNwcAko
cmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9u
SWRlbnRpZmllcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqICBD
b3B5cmlnaHQgKEMpIDIwMDMsIDIwMDcsIDIwMDksIDIwMTIsIDIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDE5IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0zMyw3ICszMyw3
IEBAIG5hbWVzcGFjZSBKU0MgewogI2RlZmluZSBJTklUSUFMSVpFX1BSSVZBVEVfTkFNRShuYW1l
KSAsIG5hbWUjI1ByaXZhdGVOYW1lKG1fYnVpbHRpbk5hbWVzLT5uYW1lIyNQcml2YXRlTmFtZSgp
KQogI2RlZmluZSBJTklUSUFMSVpFX1NZTUJPTChuYW1lKSAsIG5hbWUjI1N5bWJvbChtX2J1aWx0
aW5OYW1lcy0+bmFtZSMjU3ltYm9sKCkpCiAKLUNvbW1vbklkZW50aWZpZXJzOjpDb21tb25JZGVu
dGlmaWVycyhWTSogdm0pCitDb21tb25JZGVudGlmaWVyczo6Q29tbW9uSWRlbnRpZmllcnMoVk0m
IHZtKQogICAgIDogbnVsbElkZW50aWZpZXIoKQogICAgICwgZW1wdHlJZGVudGlmaWVyKElkZW50
aWZpZXI6OkVtcHR5SWRlbnRpZmllcikKICAgICAsIHVuZGVyc2NvcmVQcm90byhJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKHZtLCAiX19wcm90b19fIikpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Db21tb25JZGVudGlmaWVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vbklkZW50aWZpZXJzLmgJKHJldmlzaW9uIDI0OTEyOCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vbklkZW50aWZpZXJzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogIENvcHlyaWdodCAoQykgMjAwMy0y
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIw
MDMtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAq
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYwpAQCAtMjgyLDcgKzI4Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIENvbW1v
bklkZW50aWZpZXJzIHsKICAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ29tbW9uSWRlbnRp
ZmllcnMpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICBwcml2YXRlOgotICAgICAgICBD
b21tb25JZGVudGlmaWVycyhWTSopOworICAgICAgICBDb21tb25JZGVudGlmaWVycyhWTSYpOwog
ICAgICAgICB+Q29tbW9uSWRlbnRpZmllcnMoKTsKICAgICAgICAgZnJpZW5kIGNsYXNzIFZNOwog
ICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQ
YXRocy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29t
bW9uU2xvd1BhdGhzLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzIsNyAr
NzIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogI2RlZmluZSBCRUdJTl9OT19TRVRfUEMoKSBcCiAg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsgICAgICBcCi0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcigmdm0sIGV4ZWMpOyBcCisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2
bSwgZXhlYyk7IFwKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsgXAogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKQogCkBAIC0xODAsNyArMTgwLDcgQEAg
U0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2NhbGxfYXJpdHlDaGVjawogICAgIGlmIChVTkxJS0VM
WShzbG90c1RvQWRkIDwgMCkpIHsKICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBDb21t
b25TbG93UGF0aHM6OmNvZGVCbG9ja0Zyb21DYWxsRnJhbWVDYWxsZWUoZXhlYywgQ29kZUZvckNh
bGwpOwogICAgICAgICBleGVjLT5jb252ZXJ0VG9TdGFja092ZXJmbG93RnJhbWUodm0sIGNvZGVC
bG9jayk7Ci0gICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsK
KyAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgICAg
IEVycm9ySGFuZGxpbmdTY29wZSBlcnJvclNjb3BlKHZtKTsKICAgICAgICAgdGhyb3dTY29wZS5y
ZWxlYXNlKCk7CiAgICAgICAgIHRocm93QXJpdHlDaGVja1N0YWNrT3ZlcmZsb3dFcnJvcihleGVj
LCB0aHJvd1Njb3BlKTsKQEAgLTE5Niw3ICsxOTYsNyBAQCBTTE9XX1BBVEhfREVDTChzbG93X3Bh
dGhfY29uc3RydWN0X2FyaXR5CiAgICAgaWYgKFVOTElLRUxZKHNsb3RzVG9BZGQgPCAwKSkgewog
ICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IENvbW1vblNsb3dQYXRoczo6Y29kZUJsb2Nr
RnJvbUNhbGxGcmFtZUNhbGxlZShleGVjLCBDb2RlRm9yQ29uc3RydWN0KTsKICAgICAgICAgZXhl
Yy0+Y29udmVydFRvU3RhY2tPdmVyZmxvd0ZyYW1lKHZtLCBjb2RlQmxvY2spOwotICAgICAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgICAgICBFcnJvckhhbmRsaW5nU2Nv
cGUgZXJyb3JTY29wZSh2bSk7CiAgICAgICAgIHRocm93QXJpdHlDaGVja1N0YWNrT3ZlcmZsb3dF
cnJvcihleGVjLCB0aHJvd1Njb3BlKTsKICAgICAgICAgUkVUVVJOX1RXTyhiaXR3aXNlX2Nhc3Q8
dm9pZCo+KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oMSkpLCBleGVjKTsKQEAgLTEwMTIsNyArMTAx
Miw3IEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF90b19pbmRleF9zdHJpbmcKICAgICBhdXRv
IGJ5dGVjb2RlID0gcGMtPmFzPE9wVG9JbmRleFN0cmluZz4oKTsKICAgICBKU1ZhbHVlIGluZGV4
VmFsdWUgPSBHRVQoYnl0ZWNvZGUubV9pbmRleCkuanNWYWx1ZSgpOwogICAgIEFTU0VSVChpbmRl
eFZhbHVlLmlzVUludDMyQXNBbnlJbnQoKSk7Ci0gICAgUkVUVVJOKGpzU3RyaW5nKGV4ZWMsIElk
ZW50aWZpZXI6OmZyb20oZXhlYywgaW5kZXhWYWx1ZS5hc1VJbnQzMkFzQW55SW50KCkpLnN0cmlu
ZygpKSk7CisgICAgUkVUVVJOKGpzU3RyaW5nKHZtLCBJZGVudGlmaWVyOjpmcm9tKHZtLCBpbmRl
eFZhbHVlLmFzVUludDMyQXNBbnlJbnQoKSkuc3RyaW5nKCkpKTsKIH0KIAogU0xPV19QQVRIX0RF
Q0woc2xvd19wYXRoX3Byb2ZpbGVfdHlwZV9jbGVhcl9sb2cpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Db21wbGV0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Db21wbGV0aW9uLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tcGxldGlvbi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ5LDcgKzQ5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiBzdGF0aWMgaW5saW5lIGJvb2wg
Y2hlY2tTeW50YXhJbnRlcm5hbChWTSYgdm0sIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgUGFy
c2VyRXJyb3ImIGVycm9yKQogewogICAgIHJldHVybiAhIXBhcnNlPFByb2dyYW1Ob2RlPigKLSAg
ICAgICAgJnZtLCBzb3VyY2UsIElkZW50aWZpZXIoKSwgSlNQYXJzZXJCdWlsdGluTW9kZTo6Tm90
QnVpbHRpbiwKKyAgICAgICAgdm0sIHNvdXJjZSwgSWRlbnRpZmllcigpLCBKU1BhcnNlckJ1aWx0
aW5Nb2RlOjpOb3RCdWlsdGluLAogICAgICAgICBKU1BhcnNlclN0cmljdE1vZGU6Ok5vdFN0cmlj
dCwgSlNQYXJzZXJTY3JpcHRNb2RlOjpDbGFzc2ljLCBTb3VyY2VQYXJzZU1vZGU6OlByb2dyYW1N
b2RlLCBTdXBlckJpbmRpbmc6Ok5vdE5lZWRlZCwgZXJyb3IpOwogfQogCkBAIC04MSw3ICs4MSw3
IEBAIGJvb2wgY2hlY2tNb2R1bGVTeW50YXgoRXhlY1N0YXRlKiBleGVjLCAKICAgICBKU0xvY2tI
b2xkZXIgbG9jayh2bSk7CiAgICAgUkVMRUFTRV9BU1NFUlQodm0uYXRvbVN0cmluZ1RhYmxlKCkg
PT0gVGhyZWFkOjpjdXJyZW50KCkuYXRvbVN0cmluZ1RhYmxlKCkpOwogICAgIHN0ZDo6dW5pcXVl
X3B0cjxNb2R1bGVQcm9ncmFtTm9kZT4gbW9kdWxlUHJvZ3JhbU5vZGUgPSBwYXJzZTxNb2R1bGVQ
cm9ncmFtTm9kZT4oCi0gICAgICAgICZ2bSwgc291cmNlLCBJZGVudGlmaWVyKCksIEpTUGFyc2Vy
QnVpbHRpbk1vZGU6Ok5vdEJ1aWx0aW4sCisgICAgICAgIHZtLCBzb3VyY2UsIElkZW50aWZpZXIo
KSwgSlNQYXJzZXJCdWlsdGluTW9kZTo6Tm90QnVpbHRpbiwKICAgICAgICAgSlNQYXJzZXJTdHJp
Y3RNb2RlOjpTdHJpY3QsIEpTUGFyc2VyU2NyaXB0TW9kZTo6TW9kdWxlLCBTb3VyY2VQYXJzZU1v
ZGU6Ok1vZHVsZUFuYWx5emVNb2RlLCBTdXBlckJpbmRpbmc6Ok5vdE5lZWRlZCwgZXJyb3IpOwog
ICAgIGlmICghbW9kdWxlUHJvZ3JhbU5vZGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTIx
OSw3ICsyMTksNyBAQCBKU0ludGVybmFsUHJvbWlzZSogbG9hZEFuZEV2YWx1YXRlTW9kdWxlCiAg
ICAgUkVMRUFTRV9BU1NFUlQodm0uYXRvbVN0cmluZ1RhYmxlKCkgPT0gVGhyZWFkOjpjdXJyZW50
KCkuYXRvbVN0cmluZ1RhYmxlKCkpOwogICAgIFJFTEVBU0VfQVNTRVJUKCF2bS5pc0NvbGxlY3Rv
ckJ1c3lPbkN1cnJlbnRUaHJlYWQoKSk7CiAKLSAgICByZXR1cm4gdm0udm1FbnRyeUdsb2JhbE9i
amVjdChleGVjKS0+bW9kdWxlTG9hZGVyKCktPmxvYWRBbmRFdmFsdWF0ZU1vZHVsZShleGVjLCBp
ZGVudGlmaWVyVG9KU1ZhbHVlKHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsIG1vZHVs
ZU5hbWUpKSwgcGFyYW1ldGVycywgc2NyaXB0RmV0Y2hlcik7CisgICAgcmV0dXJuIHZtLnZtRW50
cnlHbG9iYWxPYmplY3QoZXhlYyktPm1vZHVsZUxvYWRlcigpLT5sb2FkQW5kRXZhbHVhdGVNb2R1
bGUoZXhlYywgaWRlbnRpZmllclRvSlNWYWx1ZSh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2
bSwgbW9kdWxlTmFtZSkpLCBwYXJhbWV0ZXJzLCBzY3JpcHRGZXRjaGVyKTsKIH0KIAogSlNJbnRl
cm5hbFByb21pc2UqIGxvYWRBbmRFdmFsdWF0ZU1vZHVsZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0
IFNvdXJjZUNvZGUmIHNvdXJjZSwgSlNWYWx1ZSBzY3JpcHRGZXRjaGVyKQpAQCAtMjQ4LDcgKzI0
OCw3IEBAIEpTSW50ZXJuYWxQcm9taXNlKiBsb2FkTW9kdWxlKEV4ZWNTdGF0ZSoKICAgICBSRUxF
QVNFX0FTU0VSVCh2bS5hdG9tU3RyaW5nVGFibGUoKSA9PSBUaHJlYWQ6OmN1cnJlbnQoKS5hdG9t
U3RyaW5nVGFibGUoKSk7CiAgICAgUkVMRUFTRV9BU1NFUlQoIXZtLmlzQ29sbGVjdG9yQnVzeU9u
Q3VycmVudFRocmVhZCgpKTsKIAotICAgIHJldHVybiB2bS52bUVudHJ5R2xvYmFsT2JqZWN0KGV4
ZWMpLT5tb2R1bGVMb2FkZXIoKS0+bG9hZE1vZHVsZShleGVjLCBpZGVudGlmaWVyVG9KU1ZhbHVl
KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsIG1vZHVsZU5hbWUpKSwgcGFyYW1ldGVy
cywgc2NyaXB0RmV0Y2hlcik7CisgICAgcmV0dXJuIHZtLnZtRW50cnlHbG9iYWxPYmplY3QoZXhl
YyktPm1vZHVsZUxvYWRlcigpLT5sb2FkTW9kdWxlKGV4ZWMsIGlkZW50aWZpZXJUb0pTVmFsdWUo
dm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIG1vZHVsZU5hbWUpKSwgcGFyYW1ldGVycywg
c2NyaXB0RmV0Y2hlcik7CiB9CiAKIEpTSW50ZXJuYWxQcm9taXNlKiBsb2FkTW9kdWxlKEV4ZWNT
dGF0ZSogZXhlYywgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBKU1ZhbHVlIHNjcmlwdEZldGNo
ZXIpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlQ29uc3RydWN0b3Iu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVDb25z
dHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0RhdGVDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBA
CiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtk
ZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwNC0yMDE5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTE2MCw3ICsxNjAsNyBAQCBz
dGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsCiAgICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKICAgICBHcmVnb3JpYW5EYXRlVGltZSB0czsKICAgICBtc1RvR3JlZ29yaWFuRGF0
ZVRpbWUodm0sIFdhbGxUaW1lOjpub3coKS5zZWNvbmRzU2luY2VFcG9jaCgpLm1pbGxpc2Vjb25k
cygpLCBXVEY6OkxvY2FsVGltZSwgdHMpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNO
b250cml2aWFsU3RyaW5nKCZ2bSwgZm9ybWF0RGF0ZVRpbWUodHMsIERhdGVUaW1lRm9ybWF0RGF0
ZUFuZFRpbWUsIGZhbHNlKSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOb250cml2
aWFsU3RyaW5nKHZtLCBmb3JtYXREYXRlVGltZSh0cywgRGF0ZVRpbWVGb3JtYXREYXRlQW5kVGlt
ZSwgZmFsc2UpKSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVBhcnNl
KEV4ZWNTdGF0ZSogZXhlYykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Rh
dGVQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0RhdGVQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9EYXRlUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2
ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChw
b3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwOCwgMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMTkgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogIENvcHlyaWdodCAoQykgMjAwOCwgMjAw
OSBUb3JjaCBNb2JpbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqICBDb3B5cmlnaHQg
KEMpIDIwMTAgVG9yY2ggTW9iaWxlIChCZWlqaW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKQEAgLTE0NCw2ICsxNDQsNyBAQCBzdGF0aWMgQ0ZEYXRlRm9ybWF0dGVyU3R5bGUg
c3R5bGVGcm9tQXJnCiAKIHN0YXRpYyBKU0NlbGwqIGZvcm1hdExvY2FsZURhdGUoRXhlY1N0YXRl
KiBleGVjLCBEYXRlSW5zdGFuY2UqLCBkb3VibGUgdGltZUluTWlsbGlzZWNvbmRzLCBMb2NhbGVE
YXRlVGltZUZvcm1hdCBmb3JtYXQpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBD
RkRhdGVGb3JtYXR0ZXJTdHlsZSBkYXRlU3R5bGUgPSAoZm9ybWF0ICE9IExvY2FsZVRpbWUgPyBr
Q0ZEYXRlRm9ybWF0dGVyTG9uZ1N0eWxlIDoga0NGRGF0ZUZvcm1hdHRlck5vU3R5bGUpOwogICAg
IENGRGF0ZUZvcm1hdHRlclN0eWxlIHRpbWVTdHlsZSA9IChmb3JtYXQgIT0gTG9jYWxlRGF0ZSA/
IGtDRkRhdGVGb3JtYXR0ZXJMb25nU3R5bGUgOiBrQ0ZEYXRlRm9ybWF0dGVyTm9TdHlsZSk7CiAK
QEAgLTE2NywzNSArMTY4LDM3IEBAIHN0YXRpYyBKU0NlbGwqIGZvcm1hdExvY2FsZURhdGUoRXhl
Y1N0YXQKICAgICBhdXRvIGZvcm1hdHRlciA9IGFkb3B0Q0YoQ0ZEYXRlRm9ybWF0dGVyQ3JlYXRl
KGtDRkFsbG9jYXRvckRlZmF1bHQsIGFkb3B0Q0YoQ0ZMb2NhbGVDb3B5Q3VycmVudCgpKS5nZXQo
KSwgZGF0ZVN0eWxlLCB0aW1lU3R5bGUpKTsKICAgICBpZiAodXNlQ3VzdG9tRm9ybWF0KQogICAg
ICAgICBDRkRhdGVGb3JtYXR0ZXJTZXRGb3JtYXQoZm9ybWF0dGVyLmdldCgpLCBjdXN0b21Gb3Jt
YXRTdHJpbmcuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSk7Ci0gICAgcmV0dXJuIGpzTm9udHJpdmlh
bFN0cmluZyhleGVjLCBhZG9wdENGKENGRGF0ZUZvcm1hdHRlckNyZWF0ZVN0cmluZ1dpdGhBYnNv
bHV0ZVRpbWUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgZm9ybWF0dGVyLmdldCgpLCBhYnNvbHV0ZVRp
bWUpKS5nZXQoKSk7CisgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyh2bSwgYWRvcHRDRihD
RkRhdGVGb3JtYXR0ZXJDcmVhdGVTdHJpbmdXaXRoQWJzb2x1dGVUaW1lKGtDRkFsbG9jYXRvckRl
ZmF1bHQsIGZvcm1hdHRlci5nZXQoKSwgYWJzb2x1dGVUaW1lKSkuZ2V0KCkpOwogfQogCiAjZWxp
ZiAhVUNPTkZJR19OT19GT1JNQVRUSU5HCiAKIHN0YXRpYyBKU0NlbGwqIGZvcm1hdExvY2FsZURh
dGUoRXhlY1N0YXRlKiBleGVjLCBEYXRlSW5zdGFuY2UqLCBkb3VibGUgdGltZUluTWlsbGlzZWNv
bmRzLCBMb2NhbGVEYXRlVGltZUZvcm1hdCBmb3JtYXQpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKICAgICBVRGF0ZUZvcm1hdFN0eWxlIHRpbWVTdHlsZSA9IChmb3JtYXQgIT0gTG9jYWxl
RGF0ZSA/IFVEQVRfTE9ORyA6IFVEQVRfTk9ORSk7CiAgICAgVURhdGVGb3JtYXRTdHlsZSBkYXRl
U3R5bGUgPSAoZm9ybWF0ICE9IExvY2FsZVRpbWUgPyBVREFUX0xPTkcgOiBVREFUX05PTkUpOwog
CiAgICAgVUVycm9yQ29kZSBzdGF0dXMgPSBVX1pFUk9fRVJST1I7CiAgICAgVURhdGVGb3JtYXQq
IGRmID0gdWRhdF9vcGVuKHRpbWVTdHlsZSwgZGF0ZVN0eWxlLCAwLCAwLCAtMSwgMCwgMCwgJnN0
YXR1cyk7CiAgICAgaWYgKCFkZikKLSAgICAgICAgcmV0dXJuIGpzRW1wdHlTdHJpbmcoZXhlYyk7
CisgICAgICAgIHJldHVybiBqc0VtcHR5U3RyaW5nKHZtKTsKIAogICAgIFVDaGFyIGJ1ZmZlclsx
MjhdOwogICAgIGludDMyX3QgbGVuZ3RoOwogICAgIGxlbmd0aCA9IHVkYXRfZm9ybWF0KGRmLCB0
aW1lSW5NaWxsaXNlY29uZHMsIGJ1ZmZlciwgMTI4LCAwLCAmc3RhdHVzKTsKICAgICB1ZGF0X2Ns
b3NlKGRmKTsKICAgICBpZiAoc3RhdHVzICE9IFVfWkVST19FUlJPUikKLSAgICAgICAgcmV0dXJu
IGpzRW1wdHlTdHJpbmcoZXhlYyk7CisgICAgICAgIHJldHVybiBqc0VtcHR5U3RyaW5nKHZtKTsK
IAotICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywgU3RyaW5nKGJ1ZmZlciwgbGVu
Z3RoKSk7CisgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyh2bSwgU3RyaW5nKGJ1ZmZlciwg
bGVuZ3RoKSk7CiB9CiAKICNlbHNlCiAKIHN0YXRpYyBKU0NlbGwqIGZvcm1hdExvY2FsZURhdGUo
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBHcmVnb3JpYW5EYXRlVGltZSYgZ2R0LCBMb2NhbGVEYXRl
VGltZUZvcm1hdCBmb3JtYXQpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICNpZiBPUyhX
SU5ET1dTKQogICAgIFNZU1RFTVRJTUUgc3lzdGVtVGltZTsKICAgICBtZW1zZXQoJnN5c3RlbVRp
bWUsIDAsIHNpemVvZihzeXN0ZW1UaW1lKSk7CkBAIC0yMzAsNyArMjMzLDcgQEAgc3RhdGljIEpT
Q2VsbCogZm9ybWF0TG9jYWxlRGF0ZShFeGVjU3RhdAogICAgIGlmIChsZW5ndGgpCiAgICAgICAg
IGxlbmd0aC0tOwogCi0gICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyhleGVjLCBTdHJpbmco
YnVmZmVyLmRhdGEoKSwgbGVuZ3RoKSk7CisgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyh2
bSwgU3RyaW5nKGJ1ZmZlci5kYXRhKCksIGxlbmd0aCkpOwogCiAjZWxzZSAvLyBPUyhXSU5ET1dT
KQogCkBAIC0yNjksNyArMjcyLDcgQEAgc3RhdGljIEpTQ2VsbCogZm9ybWF0TG9jYWxlRGF0ZShF
eGVjU3RhdAogI2VuZGlmCiAKICAgICBpZiAocmV0ID09IDApCi0gICAgICAgIHJldHVybiBqc0Vt
cHR5U3RyaW5nKGV4ZWMpOworICAgICAgICByZXR1cm4ganNFbXB0eVN0cmluZyh2bSk7CiAKICAg
ICAvLyBDb3B5IG9yaWdpbmFsIGludG8gdGhlIGJ1ZmZlcgogICAgIGlmICh5ZWFyTmVlZHNPZmZz
ZXQgJiYgZm9ybWF0ICE9IExvY2FsZVRpbWUpIHsKQEAgLTI5OSwxOSArMzAyLDIwIEBAIHN0YXRp
YyBKU0NlbGwqIGZvcm1hdExvY2FsZURhdGUoRXhlY1N0YXQKICAgICBpZiAobGVuZ3RoICE9IHN0
YXRpY19jYXN0PHNpemVfdD4oLTEpKSB7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bGVuZ3RoOyArK2kpCiAgICAgICAgICAgICBidWZmZXJbaV0gPSBzdGF0aWNfY2FzdDxVQ2hhcj4o
dGVtcGJ1ZmZlcltpXSk7Ci0gICAgICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywg
U3RyaW5nKGJ1ZmZlciwgbGVuZ3RoKSk7CisgICAgICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJp
bmcodm0sIFN0cmluZyhidWZmZXIsIGxlbmd0aCkpOwogICAgIH0KICNlbmRpZgogCi0gICAgcmV0
dXJuIGpzTm9udHJpdmlhbFN0cmluZyhleGVjLCB0aW1lYnVmZmVyKTsKKyAgICByZXR1cm4ganNO
b250cml2aWFsU3RyaW5nKHZtLCB0aW1lYnVmZmVyKTsKICNlbmRpZiAvLyBPUyhXSU5ET1dTKQog
fQogCiBzdGF0aWMgSlNDZWxsKiBmb3JtYXRMb2NhbGVEYXRlKEV4ZWNTdGF0ZSogZXhlYywgRGF0
ZUluc3RhbmNlKiBkYXRlT2JqZWN0LCBkb3VibGUsIExvY2FsZURhdGVUaW1lRm9ybWF0IGZvcm1h
dCkKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGNvbnN0IEdyZWdvcmlhbkRhdGVU
aW1lKiBncmVnb3JpYW5EYXRlVGltZSA9IGRhdGVPYmplY3QtPmdyZWdvcmlhbkRhdGVUaW1lKGV4
ZWMpOwogICAgIGlmICghZ3JlZ29yaWFuRGF0ZVRpbWUpCi0gICAgICAgIHJldHVybiBqc05vbnRy
aXZpYWxTdHJpbmcoZXhlYywgIkludmFsaWQgRGF0ZSJfcyk7CisgICAgICAgIHJldHVybiBqc05v
bnRyaXZpYWxTdHJpbmcodm0sICJJbnZhbGlkIERhdGUiX3MpOwogICAgIHJldHVybiBmb3JtYXRM
b2NhbGVEYXRlKGV4ZWMsICpncmVnb3JpYW5EYXRlVGltZSwgZm9ybWF0KTsKIH0KIApAQCAtMzMw
LDkgKzMzNCw5IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBmb3JtYXRlRGF0ZUluc3RhbmMKICAg
ICAgICAgPyB0aGlzRGF0ZU9iai0+Z3JlZ29yaWFuRGF0ZVRpbWVVVEMoZXhlYykKICAgICAgICAg
OiB0aGlzRGF0ZU9iai0+Z3JlZ29yaWFuRGF0ZVRpbWUoZXhlYyk7CiAgICAgaWYgKCFncmVnb3Jp
YW5EYXRlVGltZSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc05vbnRyaXZpYWxT
dHJpbmcoZXhlYywgU3RyaW5nKCJJbnZhbGlkIERhdGUiX3MpKSk7CisgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNOb250cml2aWFsU3RyaW5nKHZtLCBTdHJpbmcoIkludmFsaWQgRGF0
ZSJfcykpKTsKIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOb250cml2aWFsU3RyaW5n
KGV4ZWMsIGZvcm1hdERhdGVUaW1lKCpncmVnb3JpYW5EYXRlVGltZSwgZm9ybWF0LCBhc1VUQ1Zh
cmlhbnQpKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc05vbnRyaXZpYWxTdHJpbmco
dm0sIGZvcm1hdERhdGVUaW1lKCpncmVnb3JpYW5EYXRlVGltZSwgZm9ybWF0LCBhc1VUQ1Zhcmlh
bnQpKSk7CiB9CiAKIC8vIENvbnZlcnRzIGEgbGlzdCBvZiBhcmd1bWVudHMgc2VudCB0byBhIERh
dGUgbWVtYmVyIGZ1bmN0aW9uIGludG8gbWlsbGlzZWNvbmRzLCB1cGRhdGluZwpAQCAtNTAyLDEw
ICs1MDYsMTAgQEAgdm9pZCBEYXRlUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYgdgogICAg
IEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8o
KSkpOwogCi0gICAgSWRlbnRpZmllciB0b1VUQ1N0cmluZ05hbWUgPSBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKCZ2bSwgInRvVVRDU3RyaW5nIl9zKTsKKyAgICBJZGVudGlmaWVyIHRvVVRDU3RyaW5n
TmFtZSA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJ0b1VUQ1N0cmluZyJfcyk7CiAgICAg
SlNGdW5jdGlvbiogdG9VVENTdHJpbmdGdW5jdGlvbiA9IEpTRnVuY3Rpb246OmNyZWF0ZSh2bSwg
Z2xvYmFsT2JqZWN0LCAwLCB0b1VUQ1N0cmluZ05hbWUuc3RyaW5nKCksIGRhdGVQcm90b0Z1bmNU
b1VUQ1N0cmluZyk7CiAgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHRvVVRDU3Ry
aW5nTmFtZSwgdG9VVENTdHJpbmdGdW5jdGlvbiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3Bl
cnR5QXR0cmlidXRlOjpEb250RW51bSkpOwotICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9u
KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgInRvR01UU3RyaW5nIl9zKSwgdG9VVENT
dHJpbmdGdW5jdGlvbiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpE
b250RW51bSkpOworICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKHZtLCAidG9HTVRTdHJpbmciX3MpLCB0b1VUQ1N0cmluZ0Z1bmN0aW9uLCBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7CiAKICNp
ZiBFTkFCTEUoSU5UTCkKICAgICBKU0NfQlVJTFRJTl9GVU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJ
T04oInRvTG9jYWxlU3RyaW5nIiwgZGF0ZVByb3RvdHlwZVRvTG9jYWxlU3RyaW5nQ29kZUdlbmVy
YXRvciwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkp
OwpAQCAtNTQ3LDcgKzU1MSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVBy
b3RvRnUKIAogICAgIGNvbnN0IEdyZWdvcmlhbkRhdGVUaW1lKiBncmVnb3JpYW5EYXRlVGltZSA9
IHRoaXNEYXRlT2JqLT5ncmVnb3JpYW5EYXRlVGltZVVUQyhleGVjKTsKICAgICBpZiAoIWdyZWdv
cmlhbkRhdGVUaW1lKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTm9udHJpdmlh
bFN0cmluZyhleGVjLCBTdHJpbmcoIkludmFsaWQgRGF0ZSJfcykpKTsKKyAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc05vbnRyaXZpYWxTdHJpbmcodm0sIFN0cmluZygiSW52YWxpZCBE
YXRlIl9zKSkpOwogICAgIC8vIE1heGltdW0gYW1vdW50IG9mIHNwYWNlIHdlIG5lZWQgaW4gYnVm
ZmVyOiA3IChtYXguIGRpZ2l0cyBpbiB5ZWFyKSArIDIgKiA1ICgyIGNoYXJhY3RlcnMgZWFjaCBm
b3IgbW9udGgsIGRheSwgaG91ciwgbWludXRlLCBzZWNvbmQpICsgNCAoLiArIDMgZGlnaXRzIGZv
ciBtaWxsaXNlY29uZHMpCiAgICAgLy8gNiBmb3IgZm9ybWF0dGluZyBhbmQgb25lIGZvciBudWxs
IHRlcm1pbmF0aW9uID0gMjguIFdlIGFkZCBvbmUgZXh0cmEgY2hhcmFjdGVyIHRvIGFsbG93IHVz
IHRvIGZvcmNlIG51bGwgdGVybWluYXRpb24uCiAgICAgY2hhciBidWZmZXJbMjhdOwpAQCAtNTY0
LDkgKzU2OCw5IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnUKIAog
ICAgIEFTU0VSVChjaGFyYWN0ZXJzV3JpdHRlbiA+IDAgJiYgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KGNoYXJhY3RlcnNXcml0dGVuKSA8IHNpemVvZihidWZmZXIpKTsKICAgICBpZiAoc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KGNoYXJhY3RlcnNXcml0dGVuKSA+PSBzaXplb2YoYnVmZmVyKSkKLSAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0VtcHR5U3RyaW5nKGV4ZWMpKTsKKyAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0VtcHR5U3RyaW5nKHZtKSk7CiAKLSAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzTm9udHJpdmlhbFN0cmluZyhleGVjLCBTdHJpbmcoYnVmZmVyLCBj
aGFyYWN0ZXJzV3JpdHRlbikpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTm9udHJp
dmlhbFN0cmluZyh2bSwgU3RyaW5nKGJ1ZmZlciwgY2hhcmFjdGVyc1dyaXR0ZW4pKSk7CiB9CiAK
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1RvRGF0ZVN0cmluZyhF
eGVjU3RhdGUqIGV4ZWMpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJv
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3Iu
Y3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9F
cnJvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyNiw5ICsyMjYsOSBAQCBib29sIGFkZEVycm9y
SW5mbyhWTSYgdm0sIFZlY3RvcjxTdGFja0ZyCiAgICAgICAgIG9iai0+cHV0RGlyZWN0KHZtLCB2
bS5wcm9wZXJ0eU5hbWVzLT5saW5lLCBqc051bWJlcihsaW5lKSk7CiAgICAgICAgIG9iai0+cHV0
RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5jb2x1bW4sIGpzTnVtYmVyKGNvbHVtbikpOwog
ICAgICAgICBpZiAoIXNvdXJjZVVSTC5pc0VtcHR5KCkpCi0gICAgICAgICAgICBvYmotPnB1dERp
cmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+c291cmNlVVJMLCBqc1N0cmluZygmdm0sIHNvdXJj
ZVVSTCkpOworICAgICAgICAgICAgb2JqLT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMt
PnNvdXJjZVVSTCwganNTdHJpbmcodm0sIHNvdXJjZVVSTCkpOwogCi0gICAgICAgIG9iai0+cHV0
RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5zdGFjaywganNTdHJpbmcoJnZtLCBJbnRlcnBy
ZXRlcjo6c3RhY2tUcmFjZUFzU3RyaW5nKHZtLCAqc3RhY2tUcmFjZSkpLCBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7CisgICAgICAgIG9iai0+cHV0
RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5zdGFjaywganNTdHJpbmcodm0sIEludGVycHJl
dGVyOjpzdGFja1RyYWNlQXNTdHJpbmcodm0sICpzdGFja1RyYWNlKSksIHN0YXRpY19jYXN0PHVu
c2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKIAogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CkBAIC0yNjUsNyArMjY1LDcgQEAgSlNPYmplY3QqIGFkZEVycm9ySW5mbyhD
YWxsRnJhbWUqIGNhbGxGcgogICAgIGlmIChsaW5lICE9IC0xKQogICAgICAgICBlcnJvci0+cHV0
RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5saW5lLCBqc051bWJlcihsaW5lKSk7CiAgICAg
aWYgKCFzb3VyY2VVUkwuaXNOdWxsKCkpCi0gICAgICAgIGVycm9yLT5wdXREaXJlY3Qodm0sIHZt
LnByb3BlcnR5TmFtZXMtPnNvdXJjZVVSTCwganNTdHJpbmcoJnZtLCBzb3VyY2VVUkwpKTsKKyAg
ICAgICAgZXJyb3ItPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+c291cmNlVVJMLCBq
c1N0cmluZyh2bSwgc291cmNlVVJMKSk7CiAgICAgcmV0dXJuIGVycm9yOwogfQogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvckluc3RhbmNlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvckluc3RhbmNlLmNwcAkocmV2
aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JJbnN0
YW5jZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdo
dCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29weXJp
Z2h0IChDKSAyMDAzLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENv
cHlyaWdodCAoQykgMjAwMy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTgwLDggKzgwLDggQEAgc3RhdGljIHZvaWQgYXBwZW5kU291
cmNlVG9FcnJvcihDYWxsRnJhbQogICAgIGlmICghZXhwcmVzc2lvblN0b3AgfHwgZXhwcmVzc2lv
blN0YXJ0ID4gc3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VTdHJpbmcubGVuZ3RoKCkpKQogICAgICAg
ICByZXR1cm47CiAgICAgCi0gICAgVk0qIHZtID0gJmNhbGxGcmFtZS0+dm0oKTsKLSAgICBKU1Zh
bHVlIGpzTWVzc2FnZSA9IGV4Y2VwdGlvbi0+Z2V0RGlyZWN0KCp2bSwgdm0tPnByb3BlcnR5TmFt
ZXMtPm1lc3NhZ2UpOworICAgIFZNJiB2bSA9IGNhbGxGcmFtZS0+dm0oKTsKKyAgICBKU1ZhbHVl
IGpzTWVzc2FnZSA9IGV4Y2VwdGlvbi0+Z2V0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5t
ZXNzYWdlKTsKICAgICBpZiAoIWpzTWVzc2FnZSB8fCAhanNNZXNzYWdlLmlzU3RyaW5nKCkpCiAg
ICAgICAgIHJldHVybjsKICAgICAKQEAgLTEwNSw3ICsxMDUsNyBAQCBzdGF0aWMgdm9pZCBhcHBl
bmRTb3VyY2VUb0Vycm9yKENhbGxGcmFtCiAgICAgICAgICAgICBzdG9wLS07CiAgICAgICAgIG1l
c3NhZ2UgPSBhcHBlbmRlcihtZXNzYWdlLCBjb2RlQmxvY2stPnNvdXJjZSgpLnByb3ZpZGVyKCkt
PmdldFJhbmdlKHN0YXJ0LCBzdG9wKS50b1N0cmluZygpLCB0eXBlLCBFcnJvckluc3RhbmNlOjpG
b3VuZEFwcHJveGltYXRlU291cmNlKTsKICAgICB9Ci0gICAgZXhjZXB0aW9uLT5wdXREaXJlY3Qo
KnZtLCB2bS0+cHJvcGVydHlOYW1lcy0+bWVzc2FnZSwganNTdHJpbmcodm0sIG1lc3NhZ2UpKTsK
KyAgICBleGNlcHRpb24tPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bWVzc2FnZSwg
anNTdHJpbmcodm0sIG1lc3NhZ2UpKTsKIAogfQogCkBAIC0xMTQsNyArMTE0LDcgQEAgdm9pZCBF
cnJvckluc3RhbmNlOjpmaW5pc2hDcmVhdGlvbihFeGVjUwogICAgIEJhc2U6OmZpbmlzaENyZWF0
aW9uKHZtKTsKICAgICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOwogICAgIGlmICghbWVz
c2FnZS5pc051bGwoKSkKLSAgICAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5t
ZXNzYWdlLCBqc1N0cmluZygmdm0sIG1lc3NhZ2UpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJv
cGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7CisgICAgICAgIHB1dERpcmVjdCh2bSwgdm0ucHJv
cGVydHlOYW1lcy0+bWVzc2FnZSwganNTdHJpbmcodm0sIG1lc3NhZ2UpLCBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7CiAKICAgICBzdGQ6OnVuaXF1
ZV9wdHI8VmVjdG9yPFN0YWNrRnJhbWU+PiBzdGFja1RyYWNlID0gZ2V0U3RhY2tUcmFjZShleGVj
LCB2bSwgdGhpcywgdXNlQ3VycmVudEZyYW1lKTsKICAgICB7CkBAIC0yNDEsOSArMjQxLDkgQEAg
Ym9vbCBFcnJvckluc3RhbmNlOjptYXRlcmlhbGl6ZUVycm9ySW5mbwogICAgICAgICBwdXREaXJl
Y3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxpbmUsIGpzTnVtYmVyKG1fbGluZSkpOwogICAgICAg
ICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmNvbHVtbiwganNOdW1iZXIobV9jb2x1
bW4pKTsKICAgICAgICAgaWYgKCFtX3NvdXJjZVVSTC5pc0VtcHR5KCkpCi0gICAgICAgICAgICBw
dXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnNvdXJjZVVSTCwganNTdHJpbmcoJnZtLCBX
VEZNb3ZlKG1fc291cmNlVVJMKSkpOworICAgICAgICAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9w
ZXJ0eU5hbWVzLT5zb3VyY2VVUkwsIGpzU3RyaW5nKHZtLCBXVEZNb3ZlKG1fc291cmNlVVJMKSkp
OwogCi0gICAgICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+c3RhY2ssIGpzU3Ry
aW5nKCZ2bSwgV1RGTW92ZShtX3N0YWNrU3RyaW5nKSksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQ
cm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKKyAgICAgICAgcHV0RGlyZWN0KHZtLCB2bS5w
cm9wZXJ0eU5hbWVzLT5zdGFjaywganNTdHJpbmcodm0sIFdURk1vdmUobV9zdGFja1N0cmluZykp
LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7CiAg
ICAgfQogCiAgICAgbV9lcnJvckluZm9NYXRlcmlhbGl6ZWQgPSB0cnVlOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yUHJvdG90eXBlLmNwcAkocmV2aXNp
b24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JQcm90b3R5
cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQg
KEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQotICogIENvcHlyaWdo
dCAoQykgMjAwMywgMjAwOCwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtNjQsOCArNjQsOCBAQCB2b2lkIEVycm9yUHJvdG90
eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYgCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0p
OwogICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7Ci0gICAgcHV0RGlyZWN0V2l0aG91
dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzU3RyaW5nKCZ2bSwgbmFt
ZSksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsK
LSAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+bWVz
c2FnZSwganNFbXB0eVN0cmluZygmdm0pLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlB
dHRyaWJ1dGU6OkRvbnRFbnVtKSk7CisgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0s
IHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzU3RyaW5nKHZtLCBuYW1lKSwgc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOworICAgIHB1dERpcmVjdFdp
dGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5tZXNzYWdlLCBqc0VtcHR5U3Ry
aW5nKHZtKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51
bSkpOwogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRnVuY3Rpb25zIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTIwLDExICsxMjAsMTEgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBlcnJvclByb3RvRgogCiAgICAgLy8gOC4gSWYgbmFtZSBpcyB0
aGUgZW1wdHkgU3RyaW5nLCByZXR1cm4gbXNnLgogICAgIGlmICghbmFtZVN0cmluZy5sZW5ndGgo
KSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShtZXNzYWdlLmlzU3RyaW5nKCkgPyBt
ZXNzYWdlIDoganNTdHJpbmcoZXhlYywgbWVzc2FnZVN0cmluZykpOworICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKG1lc3NhZ2UuaXNTdHJpbmcoKSA/IG1lc3NhZ2UgOiBqc1N0cmluZyh2
bSwgbWVzc2FnZVN0cmluZykpOwogCiAgICAgLy8gOS4gSWYgbXNnIGlzIHRoZSBlbXB0eSBTdHJp
bmcsIHJldHVybiBuYW1lLgogICAgIGlmICghbWVzc2FnZVN0cmluZy5sZW5ndGgoKSkKLSAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShuYW1lLmlzU3RyaW5nKCkgPyBuYW1lIDoganNTdHJp
bmcoZXhlYywgbmFtZVN0cmluZykpOworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKG5h
bWUuaXNTdHJpbmcoKSA/IG5hbWUgOiBqc1N0cmluZyh2bSwgbmFtZVN0cmluZykpOwogCiAgICAg
Ly8gMTAuIFJldHVybiB0aGUgcmVzdWx0IG9mIGNvbmNhdGVuYXRpbmcgbmFtZSwgIjoiLCBhIHNp
bmdsZSBzcGFjZSBjaGFyYWN0ZXIsIGFuZCBtc2cuCiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNj
b3BlLCBKU1ZhbHVlOjplbmNvZGUoanNNYWtlTm9udHJpdmlhbFN0cmluZyhleGVjLCBuYW1lU3Ry
aW5nLCAiOiAiLCBtZXNzYWdlU3RyaW5nKSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5jcHAJKHJldmlzaW9uIDI0OTEyOCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1MCw3IEBAIGNvbnN0IENsYXNzSW5mbyBUZXJtaW5hdGVk
RXhlY3V0aW9uRXJyb3IKIEpTVmFsdWUgVGVybWluYXRlZEV4ZWN1dGlvbkVycm9yOjpkZWZhdWx0
VmFsdWUoY29uc3QgSlNPYmplY3QqLCBFeGVjU3RhdGUqIGV4ZWMsIFByZWZlcnJlZFByaW1pdGl2
ZVR5cGUgaGludCkKIHsKICAgICBpZiAoaGludCA9PSBQcmVmZXJTdHJpbmcpCi0gICAgICAgIHJl
dHVybiBqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywgU3RyaW5nKCJKYXZhU2NyaXB0IGV4ZWN1dGlv
biB0ZXJtaW5hdGVkLiJfcykpOworICAgICAgICByZXR1cm4ganNOb250cml2aWFsU3RyaW5nKGV4
ZWMtPnZtKCksIFN0cmluZygiSmF2YVNjcmlwdCBleGVjdXRpb24gdGVybWluYXRlZC4iX3MpKTsK
ICAgICByZXR1cm4gSlNWYWx1ZShQTmFOKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjQ5
MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMp
IDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQotICogIENvcHlyaWdodCAo
QykgMjAwMy0yMDA5LCAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogIENvcHlyaWdodCAoQykgMjAwMy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTg5LDcgKzg5LDcgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBmdW5jdGlvblBybwogCiAgICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSog
ZXhlY3V0YWJsZSA9IGZ1bmN0aW9uLT5qc0V4ZWN1dGFibGUoKTsKICAgICAgICAgaWYgKGV4ZWN1
dGFibGUtPmlzQ2xhc3MoKSkKLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNT
dHJpbmcoZXhlYywgZXhlY3V0YWJsZS0+Y2xhc3NTb3VyY2UoKS52aWV3KCkudG9TdHJpbmcoKSkp
OworICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyh2bSwgZXhlY3V0
YWJsZS0+Y2xhc3NTb3VyY2UoKS52aWV3KCkudG9TdHJpbmcoKSkpOwogCiAgICAgICAgIFN0cmlu
ZyBmdW5jdGlvbkhlYWRlcjsKICAgICAgICAgc3dpdGNoIChleGVjdXRhYmxlLT5wYXJzZU1vZGUo
KSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25SYXJlRGF0
YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rp
b25SYXJlRGF0YS5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0Z1bmN0aW9uUmFyZURhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODgsNyAr
ODgsNyBAQCB2b2lkIEZ1bmN0aW9uUmFyZURhdGE6OmNsZWFyKGNvbnN0IGNoYXIqCiB7CiAgICAg
bV9vYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5jbGVhcigpOwogICAgIG1faW50ZXJuYWxGdW5jdGlv
bkFsbG9jYXRpb25Qcm9maWxlLmNsZWFyKCk7Ci0gICAgbV9vYmplY3RBbGxvY2F0aW9uUHJvZmls
ZVdhdGNocG9pbnQuZmlyZUFsbCgqdm0oKSwgcmVhc29uKTsKKyAgICBtX29iamVjdEFsbG9jYXRp
b25Qcm9maWxlV2F0Y2hwb2ludC5maXJlQWxsKHZtKCksIHJlYXNvbik7CiB9CiAKIHZvaWQgRnVu
Y3Rpb25SYXJlRGF0YTo6QWxsb2NhdGlvblByb2ZpbGVDbGVhcmluZ1dhdGNocG9pbnQ6OmZpcmVJ
bnRlcm5hbChWTSYsIGNvbnN0IEZpcmVEZXRhaWwmKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBl
LmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
R2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxNSBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRl
YUBnbWFpbC5jb20+LgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTEsNyArNTIs
NyBAQCB2b2lkIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlOjpmaW5pc2hDCiAgICAgQmFzZTo6
ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7CiAg
ICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0
aCwganNOdW1iZXIoMCksIFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IFByb3BlcnR5QXR0
cmlidXRlOjpEb250RW51bSk7Ci0gICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZt
LnByb3BlcnR5TmFtZXMtPnRvU3RyaW5nVGFnU3ltYm9sLCBqc1N0cmluZygmdm0sICJHZW5lcmF0
b3JGdW5jdGlvbiIpLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBQcm9wZXJ0eUF0dHJp
YnV0ZTo6UmVhZE9ubHkpOworICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5w
cm9wZXJ0eU5hbWVzLT50b1N0cmluZ1RhZ1N5bWJvbCwganNTdHJpbmcodm0sICJHZW5lcmF0b3JG
dW5jdGlvbiIpLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBQcm9wZXJ0eUF0dHJpYnV0
ZTo6UmVhZE9ubHkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyYXRvclByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJhdG9yUHJvdG90eXBlLmNwcAkocmV2
aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJhdG9y
UHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgWXVzdWtlIFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPi4KKyAq
IENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ4LDcgKzQ5LDcgQEAgdm9pZCBHZW5lcmF0
b3JQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKAogewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9u
KHZtKTsKICAgICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOwotICAgIHB1dERpcmVjdFdp
dGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT50b1N0cmluZ1RhZ1N5bWJvbCwg
anNTdHJpbmcoJnZtLCAiR2VuZXJhdG9yIiksIFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8
IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSk7CisgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5z
aXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPnRvU3RyaW5nVGFnU3ltYm9sLCBqc1N0cmluZyh2
bSwgIkdlbmVyYXRvciIpLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBQcm9wZXJ0eUF0
dHJpYnV0ZTo6UmVhZE9ubHkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lu
bGluZXMuaAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTkyLDE4ICs5
MiwxOCBAQCBib29sIEdlbmVyaWNBcmd1bWVudHM8VHlwZT46OmdldE93blByb3BlCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBUeXBlPgogdm9pZCBHZW5lcmljQXJndW1lbnRzPFR5cGU+OjpnZXRPd25Qcm9w
ZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1l
QXJyYXkmIGFycmF5LCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKKyAgICBWTSYgdm0gPSBleGVj
LT52bSgpOwogICAgIFR5cGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8VHlwZSo+KG9iamVjdCk7CiAK
ICAgICBpZiAoYXJyYXkuaW5jbHVkZVN0cmluZ1Byb3BlcnRpZXMoKSkgewogICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgdGhpc09iamVjdC0+aW50ZXJuYWxMZW5ndGgoKTsgKytpKSB7
CiAgICAgICAgICAgICBpZiAoIXRoaXNPYmplY3QtPmlzTWFwcGVkQXJndW1lbnQoaSkpCiAgICAg
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBhcnJheS5hZGQoSWRlbnRpZmllcjo6
ZnJvbShleGVjLCBpKSk7CisgICAgICAgICAgICBhcnJheS5hZGQoSWRlbnRpZmllcjo6ZnJvbSh2
bSwgaSkpOwogICAgICAgICB9CiAgICAgfQogCiAgICAgaWYgKG1vZGUuaW5jbHVkZURvbnRFbnVt
UHJvcGVydGllcygpICYmICF0aGlzT2JqZWN0LT5vdmVycm9kZVRoaW5ncygpKSB7Ci0gICAgICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgICAgIGFycmF5LmFkZCh2bS5wcm9wZXJ0eU5hbWVz
LT5sZW5ndGgpOwogICAgICAgICBhcnJheS5hZGQodm0ucHJvcGVydHlOYW1lcy0+Y2FsbGVlKTsK
ICAgICAgICAgaWYgKGFycmF5LmluY2x1ZGVTeW1ib2xQcm9wZXJ0aWVzKCkpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZXR0ZXJTZXR0ZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZXR0ZXJTZXR0ZXIuaAkocmV2aXNpb24gMjQ5
MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2V0dGVyU2V0dGVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0y
MDAxIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAx
IFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0
LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtODcsOCArODcsOCBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCi0gICAgYm9vbCBpc0dldHRl
ck51bGwoKSBjb25zdCB7IHJldHVybiAhIWpzRHluYW1pY0Nhc3Q8TnVsbEdldHRlckZ1bmN0aW9u
Kj4oKm1fZ2V0dGVyLmdldCgpLT52bSgpLCBtX2dldHRlci5nZXQoKSk7IH0KLSAgICBib29sIGlz
U2V0dGVyTnVsbCgpIGNvbnN0IHsgcmV0dXJuICEhanNEeW5hbWljQ2FzdDxOdWxsU2V0dGVyRnVu
Y3Rpb24qPigqbV9zZXR0ZXIuZ2V0KCktPnZtKCksIG1fc2V0dGVyLmdldCgpKTsgfQorICAgIGJv
b2wgaXNHZXR0ZXJOdWxsKCkgY29uc3QgeyByZXR1cm4gISFqc0R5bmFtaWNDYXN0PE51bGxHZXR0
ZXJGdW5jdGlvbio+KG1fZ2V0dGVyLmdldCgpLT52bSgpLCBtX2dldHRlci5nZXQoKSk7IH0KKyAg
ICBib29sIGlzU2V0dGVyTnVsbCgpIGNvbnN0IHsgcmV0dXJuICEhanNEeW5hbWljQ2FzdDxOdWxs
U2V0dGVyRnVuY3Rpb24qPihtX3NldHRlci5nZXQoKS0+dm0oKSwgbV9zZXR0ZXIuZ2V0KCkpOyB9
CiAKICAgICBKU09iamVjdCogc2V0dGVyKCkgY29uc3QgeyByZXR1cm4gbV9zZXR0ZXIuZ2V0KCk7
IH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSWRlbnRpZmllci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSWRlbnRpZmllci5j
cHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lk
ZW50aWZpZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqICBDb3B5
cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMTIgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDE5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0z
NSwyOCArMzUsMjMgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLVJlZjxTdHJpbmdJbXBsPiBJZGVu
dGlmaWVyOjphZGQoVk0qIHZtLCBjb25zdCBjaGFyKiBjKQorUmVmPFN0cmluZ0ltcGw+IElkZW50
aWZpZXI6OmFkZChWTSYgdm0sIGNvbnN0IGNoYXIqIGMpCiB7CiAgICAgQVNTRVJUKGMpOwogICAg
IEFTU0VSVChjWzBdKTsKICAgICBpZiAoIWNbMV0pCi0gICAgICAgIHJldHVybiB2bS0+c21hbGxT
dHJpbmdzLnNpbmdsZUNoYXJhY3RlclN0cmluZ1JlcChjWzBdKTsKKyAgICAgICAgcmV0dXJuIHZt
LnNtYWxsU3RyaW5ncy5zaW5nbGVDaGFyYWN0ZXJTdHJpbmdSZXAoY1swXSk7CiAKICAgICByZXR1
cm4gKkF0b21TdHJpbmdJbXBsOjphZGQoYyk7CiB9CiAKLVJlZjxTdHJpbmdJbXBsPiBJZGVudGlm
aWVyOjphZGQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBjaGFyKiBjKQotewotICAgIHJldHVybiBh
ZGQoJmV4ZWMtPnZtKCksIGMpOwotfQotCi1SZWY8U3RyaW5nSW1wbD4gSWRlbnRpZmllcjo6YWRk
OChWTSogdm0sIGNvbnN0IFVDaGFyKiBzLCBpbnQgbGVuZ3RoKQorUmVmPFN0cmluZ0ltcGw+IElk
ZW50aWZpZXI6OmFkZDgoVk0mIHZtLCBjb25zdCBVQ2hhciogcywgaW50IGxlbmd0aCkKIHsKICAg
ICBpZiAobGVuZ3RoID09IDEpIHsKICAgICAgICAgVUNoYXIgYyA9IHNbMF07CiAgICAgICAgIEFT
U0VSVChpc0xhdGluMShjKSk7CiAgICAgICAgIGlmIChjYW5Vc2VTaW5nbGVDaGFyYWN0ZXJTdHJp
bmcoYykpCi0gICAgICAgICAgICByZXR1cm4gdm0tPnNtYWxsU3RyaW5ncy5zaW5nbGVDaGFyYWN0
ZXJTdHJpbmdSZXAoYyk7CisgICAgICAgICAgICByZXR1cm4gdm0uc21hbGxTdHJpbmdzLnNpbmds
ZUNoYXJhY3RlclN0cmluZ1JlcChjKTsKICAgICB9CiAgICAgaWYgKCFsZW5ndGgpCiAgICAgICAg
IHJldHVybiAqU3RyaW5nSW1wbDo6ZW1wdHkoKTsKQEAgLTY0LDM0ICs1OSwxOSBAQCBSZWY8U3Ry
aW5nSW1wbD4gSWRlbnRpZmllcjo6YWRkOChWTSogdm0sCiAgICAgcmV0dXJuICpBdG9tU3RyaW5n
SW1wbDo6YWRkKHMsIGxlbmd0aCk7CiB9CiAKLUlkZW50aWZpZXIgSWRlbnRpZmllcjo6ZnJvbShF
eGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHZhbHVlKQotewotICAgIHJldHVybiBJZGVudGlmaWVy
KGV4ZWMsIGV4ZWMtPnZtKCkubnVtZXJpY1N0cmluZ3MuYWRkKHZhbHVlKSk7Ci19Ci0KLUlkZW50
aWZpZXIgSWRlbnRpZmllcjo6ZnJvbShFeGVjU3RhdGUqIGV4ZWMsIGludCB2YWx1ZSkKK0lkZW50
aWZpZXIgSWRlbnRpZmllcjo6ZnJvbShWTSYgdm0sIHVuc2lnbmVkIHZhbHVlKQogewotICAgIHJl
dHVybiBJZGVudGlmaWVyKGV4ZWMsIGV4ZWMtPnZtKCkubnVtZXJpY1N0cmluZ3MuYWRkKHZhbHVl
KSk7CisgICAgcmV0dXJuIElkZW50aWZpZXIodm0sIHZtLm51bWVyaWNTdHJpbmdzLmFkZCh2YWx1
ZSkpOwogfQogCi1JZGVudGlmaWVyIElkZW50aWZpZXI6OmZyb20oRXhlY1N0YXRlKiBleGVjLCBk
b3VibGUgdmFsdWUpCitJZGVudGlmaWVyIElkZW50aWZpZXI6OmZyb20oVk0mIHZtLCBpbnQgdmFs
dWUpCiB7Ci0gICAgcmV0dXJuIElkZW50aWZpZXIoZXhlYywgZXhlYy0+dm0oKS5udW1lcmljU3Ry
aW5ncy5hZGQodmFsdWUpKTsKKyAgICByZXR1cm4gSWRlbnRpZmllcih2bSwgdm0ubnVtZXJpY1N0
cmluZ3MuYWRkKHZhbHVlKSk7CiB9CiAKLUlkZW50aWZpZXIgSWRlbnRpZmllcjo6ZnJvbShWTSog
dm0sIHVuc2lnbmVkIHZhbHVlKQorSWRlbnRpZmllciBJZGVudGlmaWVyOjpmcm9tKFZNJiB2bSwg
ZG91YmxlIHZhbHVlKQogewotICAgIHJldHVybiBJZGVudGlmaWVyKHZtLCB2bS0+bnVtZXJpY1N0
cmluZ3MuYWRkKHZhbHVlKSk7Ci19Ci0KLUlkZW50aWZpZXIgSWRlbnRpZmllcjo6ZnJvbShWTSog
dm0sIGludCB2YWx1ZSkKLXsKLSAgICByZXR1cm4gSWRlbnRpZmllcih2bSwgdm0tPm51bWVyaWNT
dHJpbmdzLmFkZCh2YWx1ZSkpOwotfQotCi1JZGVudGlmaWVyIElkZW50aWZpZXI6OmZyb20oVk0q
IHZtLCBkb3VibGUgdmFsdWUpCi17Ci0gICAgcmV0dXJuIElkZW50aWZpZXIodm0sIHZtLT5udW1l
cmljU3RyaW5ncy5hZGQodmFsdWUpKTsKKyAgICByZXR1cm4gSWRlbnRpZmllcih2bSwgdm0ubnVt
ZXJpY1N0cmluZ3MuYWRkKHZhbHVlKSk7CiB9CiAKIHZvaWQgSWRlbnRpZmllcjo6ZHVtcChQcmlu
dFN0cmVhbSYgb3V0KSBjb25zdApAQCAtMTA5LDI0ICs4OSwxOCBAQCB2b2lkIElkZW50aWZpZXI6
OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgCiAKICNpZm5kZWYgTkRFQlVHCiAKLXZvaWQgSWRlbnRp
Zmllcjo6Y2hlY2tDdXJyZW50QXRvbVN0cmluZ1RhYmxlKFZNKiB2bSkKK3ZvaWQgSWRlbnRpZmll
cjo6Y2hlY2tDdXJyZW50QXRvbVN0cmluZ1RhYmxlKFZNJiB2bSkKIHsKICAgICAvLyBDaGVjayB0
aGUgaWRlbnRpZmllciB0YWJsZSBhY2Nlc3NpYmxlIHRocm91Z2ggdGhlIHRocmVhZHNwZWNpZmlj
IG1hdGNoZXMgdGhlCiAgICAgLy8gdm0ncyBpZGVudGlmaWVyIHRhYmxlLgotICAgIEFTU0VSVF9V
TlVTRUQodm0sIHZtLT5hdG9tU3RyaW5nVGFibGUoKSA9PSBUaHJlYWQ6OmN1cnJlbnQoKS5hdG9t
U3RyaW5nVGFibGUoKSk7Ci19Ci0KLXZvaWQgSWRlbnRpZmllcjo6Y2hlY2tDdXJyZW50QXRvbVN0
cmluZ1RhYmxlKEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBjaGVja0N1cnJlbnRBdG9tU3RyaW5n
VGFibGUoJmV4ZWMtPnZtKCkpOworICAgIEFTU0VSVF9VTlVTRUQodm0sIHZtLmF0b21TdHJpbmdU
YWJsZSgpID09IFRocmVhZDo6Y3VycmVudCgpLmF0b21TdHJpbmdUYWJsZSgpKTsKIH0KIAogI2Vs
c2UKIAogLy8gVGhlc2Ugb25seSBleGlzdHMgc28gdGhhdCBvdXIgZXhwb3J0cyBhcmUgdGhlIHNh
bWUgZm9yIGRlYnVnIGFuZCByZWxlYXNlIGJ1aWxkcy4KIC8vIFRoaXMgd291bGQgYmUgYW4gUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKSwgYnV0IHdlJ3JlIGluIE5ERUJVRyBvbmx5IGNvZGUg
aGVyZSEKLU5PX1JFVFVSTl9EVUVfVE9fQ1JBU0ggdm9pZCBJZGVudGlmaWVyOjpjaGVja0N1cnJl
bnRBdG9tU3RyaW5nVGFibGUoVk0qKSB7IENSQVNIKCk7IH0KLU5PX1JFVFVSTl9EVUVfVE9fQ1JB
U0ggdm9pZCBJZGVudGlmaWVyOjpjaGVja0N1cnJlbnRBdG9tU3RyaW5nVGFibGUoRXhlY1N0YXRl
KikgeyBDUkFTSCgpOyB9CitOT19SRVRVUk5fRFVFX1RPX0NSQVNIIHZvaWQgSWRlbnRpZmllcjo6
Y2hlY2tDdXJyZW50QXRvbVN0cmluZ1RhYmxlKFZNJikgeyBDUkFTSCgpOyB9CiAKICNlbmRpZgog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JZGVudGlmaWVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSWRlbnRpZmllci5oCShyZXZp
c2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JZGVudGlmaWVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogIENvcHlyaWdodCAoQykg
MjAwMywgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTExMSwzMSArMTExLDI2IEBA
IHB1YmxpYzoKIAogICAgIC8vIE9ubHkgdG8gYmUgdXNlZCB3aXRoIHN0cmluZyBsaXRlcmFscy4K
ICAgICB0ZW1wbGF0ZTx1bnNpZ25lZCBjaGFyYWN0ZXJzQ291bnQ+Ci0gICAgc3RhdGljIElkZW50
aWZpZXIgZnJvbVN0cmluZyhWTSosIGNvbnN0IGNoYXIgKCZjaGFyYWN0ZXJzKVtjaGFyYWN0ZXJz
Q291bnRdKTsKLSAgICB0ZW1wbGF0ZTx1bnNpZ25lZCBjaGFyYWN0ZXJzQ291bnQ+Ci0gICAgc3Rh
dGljIElkZW50aWZpZXIgZnJvbVN0cmluZyhFeGVjU3RhdGUqLCBjb25zdCBjaGFyICgmY2hhcmFj
dGVycylbY2hhcmFjdGVyc0NvdW50XSk7Ci0gICAgc3RhdGljIElkZW50aWZpZXIgZnJvbVN0cmlu
ZyhWTSosIGNvbnN0IExDaGFyKiwgaW50IGxlbmd0aCk7Ci0gICAgc3RhdGljIElkZW50aWZpZXIg
ZnJvbVN0cmluZyhWTSosIGNvbnN0IFVDaGFyKiwgaW50IGxlbmd0aCk7Ci0gICAgc3RhdGljIElk
ZW50aWZpZXIgZnJvbVN0cmluZyhWTSosIGNvbnN0IFN0cmluZyYpOwotICAgIHN0YXRpYyBJZGVu
dGlmaWVyIGZyb21TdHJpbmcoRXhlY1N0YXRlKiwgQXRvbVN0cmluZ0ltcGwqKTsKLSAgICBzdGF0
aWMgSWRlbnRpZmllciBmcm9tU3RyaW5nKEV4ZWNTdGF0ZSosIGNvbnN0IEF0b21TdHJpbmcmKTsK
LSAgICBzdGF0aWMgSWRlbnRpZmllciBmcm9tU3RyaW5nKEV4ZWNTdGF0ZSosIGNvbnN0IFN0cmlu
ZyYpOwotICAgIHN0YXRpYyBJZGVudGlmaWVyIGZyb21TdHJpbmcoRXhlY1N0YXRlKiwgY29uc3Qg
Y2hhciopOwotICAgIHN0YXRpYyBJZGVudGlmaWVyIGZyb21TdHJpbmcoVk0qIHZtLCBjb25zdCBW
ZWN0b3I8TENoYXI+JiBjaGFyYWN0ZXJzKSB7IHJldHVybiBmcm9tU3RyaW5nKHZtLCBjaGFyYWN0
ZXJzLmRhdGEoKSwgY2hhcmFjdGVycy5zaXplKCkpOyB9CisgICAgc3RhdGljIElkZW50aWZpZXIg
ZnJvbVN0cmluZyhWTSYsIGNvbnN0IGNoYXIgKCZjaGFyYWN0ZXJzKVtjaGFyYWN0ZXJzQ291bnRd
KTsKKyAgICBzdGF0aWMgSWRlbnRpZmllciBmcm9tU3RyaW5nKFZNJiwgQVNDSUlMaXRlcmFsKTsK
KyAgICBzdGF0aWMgSWRlbnRpZmllciBmcm9tU3RyaW5nKFZNJiwgY29uc3QgTENoYXIqLCBpbnQg
bGVuZ3RoKTsKKyAgICBzdGF0aWMgSWRlbnRpZmllciBmcm9tU3RyaW5nKFZNJiwgY29uc3QgVUNo
YXIqLCBpbnQgbGVuZ3RoKTsKKyAgICBzdGF0aWMgSWRlbnRpZmllciBmcm9tU3RyaW5nKFZNJiwg
Y29uc3QgU3RyaW5nJik7CisgICAgc3RhdGljIElkZW50aWZpZXIgZnJvbVN0cmluZyhWTSYsIEF0
b21TdHJpbmdJbXBsKik7CisgICAgc3RhdGljIElkZW50aWZpZXIgZnJvbVN0cmluZyhWTSYsIGNv
bnN0IEF0b21TdHJpbmcmKTsKKyAgICBzdGF0aWMgSWRlbnRpZmllciBmcm9tU3RyaW5nKFZNJiB2
bSwgU3ltYm9sSW1wbCopOworICAgIHN0YXRpYyBJZGVudGlmaWVyIGZyb21TdHJpbmcoVk0mLCBj
b25zdCBjaGFyKik7CisgICAgc3RhdGljIElkZW50aWZpZXIgZnJvbVN0cmluZyhWTSYgdm0sIGNv
bnN0IFZlY3RvcjxMQ2hhcj4mIGNoYXJhY3RlcnMpIHsgcmV0dXJuIGZyb21TdHJpbmcodm0sIGNo
YXJhY3RlcnMuZGF0YSgpLCBjaGFyYWN0ZXJzLnNpemUoKSk7IH0KIAotICAgIHN0YXRpYyBJZGVu
dGlmaWVyIGZyb21VaWQoVk0qLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKTsKLSAgICBzdGF0aWMg
SWRlbnRpZmllciBmcm9tVWlkKEV4ZWNTdGF0ZSosIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpOwor
ICAgIHN0YXRpYyBJZGVudGlmaWVyIGZyb21VaWQoVk0mLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlk
KTsKICAgICBzdGF0aWMgSWRlbnRpZmllciBmcm9tVWlkKGNvbnN0IFByaXZhdGVOYW1lJik7CiAg
ICAgc3RhdGljIElkZW50aWZpZXIgZnJvbVVpZChTeW1ib2xJbXBsJik7CiAKLSAgICBzdGF0aWMg
SWRlbnRpZmllciBjcmVhdGVMQ2hhckZyb21VQ2hhcihWTSogdm0sIGNvbnN0IFVDaGFyKiBzLCBp
bnQgbGVuZ3RoKSB7IHJldHVybiBJZGVudGlmaWVyKHZtLCBhZGQ4KHZtLCBzLCBsZW5ndGgpKTsg
fQorICAgIHN0YXRpYyBJZGVudGlmaWVyIGNyZWF0ZUxDaGFyRnJvbVVDaGFyKFZNJiB2bSwgY29u
c3QgVUNoYXIqIHMsIGludCBsZW5ndGgpIHsgcmV0dXJuIElkZW50aWZpZXIodm0sIGFkZDgodm0s
IHMsIGxlbmd0aCkpOyB9CiAKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgSWRlbnRpZmll
ciBmcm9tKEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHkpOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0
YXRpYyBJZGVudGlmaWVyIGZyb20oRXhlY1N0YXRlKiwgaW50IHkpOwotICAgIHN0YXRpYyBJZGVu
dGlmaWVyIGZyb20oRXhlY1N0YXRlKiwgZG91YmxlIHkpOwotICAgIHN0YXRpYyBJZGVudGlmaWVy
IGZyb20oVk0qLCB1bnNpZ25lZCB5KTsKLSAgICBzdGF0aWMgSWRlbnRpZmllciBmcm9tKFZNKiwg
aW50IHkpOwotICAgIHN0YXRpYyBJZGVudGlmaWVyIGZyb20oVk0qLCBkb3VibGUgeSk7CisgICAg
SlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIElkZW50aWZpZXIgZnJvbShWTSYsIHVuc2lnbmVkIHkp
OworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBJZGVudGlmaWVyIGZyb20oVk0mLCBpbnQg
eSk7CisgICAgc3RhdGljIElkZW50aWZpZXIgZnJvbShWTSYsIGRvdWJsZSB5KTsKIAogICAgIGJv
b2wgaXNOdWxsKCkgY29uc3QgeyByZXR1cm4gbV9zdHJpbmcuaXNOdWxsKCk7IH0KICAgICBib29s
IGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX3N0cmluZy5pc0VtcHR5KCk7IH0KQEAgLTE1Nyw4
ICsxNTIsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgU3RyaW5nSW1w
bCogYSwgY29uc3QgU3RyaW5nSW1wbCogYikgeyByZXR1cm4gOjplcXVhbChhLCBiKTsgfQogCiAg
ICAgLy8gT25seSB0byBiZSB1c2VkIHdpdGggc3RyaW5nIGxpdGVyYWxzLgotICAgIEpTX0VYUE9S
VF9QUklWQVRFIHN0YXRpYyBSZWY8U3RyaW5nSW1wbD4gYWRkKFZNKiwgY29uc3QgY2hhciopOwot
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBSZWY8U3RyaW5nSW1wbD4gYWRkKEV4ZWNTdGF0
ZSosIGNvbnN0IGNoYXIqKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgUmVmPFN0cmlu
Z0ltcGw+IGFkZChWTSYsIGNvbnN0IGNoYXIqKTsKIAogICAgIHZvaWQgZHVtcChQcmludFN0cmVh
bSYpIGNvbnN0OwogCkBAIC0xNjcsMTQgKzE2MSwxNCBAQCBwcml2YXRlOgogCiAgICAgLy8gT25s
eSB0byBiZSB1c2VkIHdpdGggc3RyaW5nIGxpdGVyYWxzLgogICAgIHRlbXBsYXRlPHVuc2lnbmVk
IGNoYXJhY3RlcnNDb3VudD4KLSAgICBJZGVudGlmaWVyKFZNKiB2bSwgY29uc3QgY2hhciAoJmNo
YXJhY3RlcnMpW2NoYXJhY3RlcnNDb3VudF0pIDogbV9zdHJpbmcoYWRkKHZtLCBjaGFyYWN0ZXJz
KSkgeyBBU1NFUlQobV9zdHJpbmcuaW1wbCgpLT5pc0F0b20oKSk7IH0KKyAgICBJZGVudGlmaWVy
KFZNJiB2bSwgY29uc3QgY2hhciAoJmNoYXJhY3RlcnMpW2NoYXJhY3RlcnNDb3VudF0pIDogbV9z
dHJpbmcoYWRkKHZtLCBjaGFyYWN0ZXJzKSkgeyBBU1NFUlQobV9zdHJpbmcuaW1wbCgpLT5pc0F0
b20oKSk7IH0KIAotICAgIElkZW50aWZpZXIoVk0qIHZtLCBjb25zdCBMQ2hhciogcywgaW50IGxl
bmd0aCkgOiBtX3N0cmluZyhhZGQodm0sIHMsIGxlbmd0aCkpIHsgQVNTRVJUKG1fc3RyaW5nLmlt
cGwoKS0+aXNBdG9tKCkpOyB9Ci0gICAgSWRlbnRpZmllcihWTSogdm0sIGNvbnN0IFVDaGFyKiBz
LCBpbnQgbGVuZ3RoKSA6IG1fc3RyaW5nKGFkZCh2bSwgcywgbGVuZ3RoKSkgeyBBU1NFUlQobV9z
dHJpbmcuaW1wbCgpLT5pc0F0b20oKSk7IH0KLSAgICBJZGVudGlmaWVyKEV4ZWNTdGF0ZSosIEF0
b21TdHJpbmdJbXBsKik7Ci0gICAgSWRlbnRpZmllcihFeGVjU3RhdGUqLCBjb25zdCBBdG9tU3Ry
aW5nJik7Ci0gICAgSWRlbnRpZmllcihWTSogdm0sIGNvbnN0IFN0cmluZyYgc3RyaW5nKSA6IG1f
c3RyaW5nKGFkZCh2bSwgc3RyaW5nLmltcGwoKSkpIHsgQVNTRVJUKG1fc3RyaW5nLmltcGwoKS0+
aXNBdG9tKCkpOyB9Ci0gICAgSWRlbnRpZmllcihWTSogdm0sIFN0cmluZ0ltcGwqIHJlcCkgOiBt
X3N0cmluZyhhZGQodm0sIHJlcCkpIHsgQVNTRVJUKG1fc3RyaW5nLmltcGwoKS0+aXNBdG9tKCkp
OyB9CisgICAgSWRlbnRpZmllcihWTSYgdm0sIGNvbnN0IExDaGFyKiBzLCBpbnQgbGVuZ3RoKSA6
IG1fc3RyaW5nKGFkZCh2bSwgcywgbGVuZ3RoKSkgeyBBU1NFUlQobV9zdHJpbmcuaW1wbCgpLT5p
c0F0b20oKSk7IH0KKyAgICBJZGVudGlmaWVyKFZNJiB2bSwgY29uc3QgVUNoYXIqIHMsIGludCBs
ZW5ndGgpIDogbV9zdHJpbmcoYWRkKHZtLCBzLCBsZW5ndGgpKSB7IEFTU0VSVChtX3N0cmluZy5p
bXBsKCktPmlzQXRvbSgpKTsgfQorICAgIElkZW50aWZpZXIoVk0mLCBBdG9tU3RyaW5nSW1wbCop
OworICAgIElkZW50aWZpZXIoVk0mLCBjb25zdCBBdG9tU3RyaW5nJik7CisgICAgSWRlbnRpZmll
cihWTSYgdm0sIGNvbnN0IFN0cmluZyYgc3RyaW5nKSA6IG1fc3RyaW5nKGFkZCh2bSwgc3RyaW5n
LmltcGwoKSkpIHsgQVNTRVJUKG1fc3RyaW5nLmltcGwoKS0+aXNBdG9tKCkpOyB9CisgICAgSWRl
bnRpZmllcihWTSYgdm0sIFN0cmluZ0ltcGwqIHJlcCkgOiBtX3N0cmluZyhhZGQodm0sIHJlcCkp
IHsgQVNTRVJUKG1fc3RyaW5nLmltcGwoKS0+aXNBdG9tKCkpOyB9CiAKICAgICBJZGVudGlmaWVy
KFN5bWJvbEltcGwmIHVpZCkKICAgICAgICAgOiBtX3N0cmluZygmdWlkKQpAQCAtMTg3LDE5ICsx
ODEsMTYgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBJZGVudGlmaWVy
JiBhLCBjb25zdCBJZGVudGlmaWVyJiBiKSB7IHJldHVybiBhLm1fc3RyaW5nLmltcGwoKSA9PSBi
Lm1fc3RyaW5nLmltcGwoKTsgfQogICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IElkZW50aWZp
ZXImIGEsIGNvbnN0IExDaGFyKiBiKSB7IHJldHVybiBlcXVhbChhLm1fc3RyaW5nLmltcGwoKSwg
Yik7IH0KIAotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBzdGF0aWMgUmVmPFN0cmluZ0ltcGw+
IGFkZChWTSosIGNvbnN0IFQqLCBpbnQgbGVuZ3RoKTsKLSAgICBzdGF0aWMgUmVmPFN0cmluZ0lt
cGw+IGFkZDgoVk0qLCBjb25zdCBVQ2hhciosIGludCBsZW5ndGgpOworICAgIHRlbXBsYXRlIDx0
eXBlbmFtZSBUPiBzdGF0aWMgUmVmPFN0cmluZ0ltcGw+IGFkZChWTSYsIGNvbnN0IFQqLCBpbnQg
bGVuZ3RoKTsKKyAgICBzdGF0aWMgUmVmPFN0cmluZ0ltcGw+IGFkZDgoVk0mLCBjb25zdCBVQ2hh
ciosIGludCBsZW5ndGgpOwogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBBTFdBWVNfSU5MSU5F
IHN0YXRpYyBib29sIGNhblVzZVNpbmdsZUNoYXJhY3RlclN0cmluZyhUKTsKIAotICAgIHN0YXRp
YyBSZWY8U3RyaW5nSW1wbD4gYWRkKEV4ZWNTdGF0ZSosIFN0cmluZ0ltcGwqKTsKLSAgICBzdGF0
aWMgUmVmPFN0cmluZ0ltcGw+IGFkZChWTSosIFN0cmluZ0ltcGwqKTsKKyAgICBzdGF0aWMgUmVm
PFN0cmluZ0ltcGw+IGFkZChWTSYsIFN0cmluZ0ltcGwqKTsKIAogI2lmbmRlZiBOREVCVUcKLSAg
ICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBjaGVja0N1cnJlbnRBdG9tU3RyaW5nVGFi
bGUoRXhlY1N0YXRlKik7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgY2hlY2tD
dXJyZW50QXRvbVN0cmluZ1RhYmxlKFZNKik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGlj
IHZvaWQgY2hlY2tDdXJyZW50QXRvbVN0cmluZ1RhYmxlKFZNJik7CiAjZWxzZQotICAgIEpTX0VY
UE9SVF9QUklWQVRFIE5PX1JFVFVSTl9EVUVfVE9fQ1JBU0ggc3RhdGljIHZvaWQgY2hlY2tDdXJy
ZW50QXRvbVN0cmluZ1RhYmxlKEV4ZWNTdGF0ZSopOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIE5P
X1JFVFVSTl9EVUVfVE9fQ1JBU0ggc3RhdGljIHZvaWQgY2hlY2tDdXJyZW50QXRvbVN0cmluZ1Rh
YmxlKFZNKik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgTk9fUkVUVVJOX0RVRV9UT19DUkFTSCBz
dGF0aWMgdm9pZCBjaGVja0N1cnJlbnRBdG9tU3RyaW5nVGFibGUoVk0mKTsKICNlbmRpZgogfTsK
IApAQCAtMjE1LDEyICsyMDYsMTIgQEAgdGVtcGxhdGUgPD4gQUxXQVlTX0lOTElORSBib29sIElk
ZW50aWZpZQogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLVJlZjxTdHJpbmdJbXBsPiBJZGVu
dGlmaWVyOjphZGQoVk0qIHZtLCBjb25zdCBUKiBzLCBpbnQgbGVuZ3RoKQorUmVmPFN0cmluZ0lt
cGw+IElkZW50aWZpZXI6OmFkZChWTSYgdm0sIGNvbnN0IFQqIHMsIGludCBsZW5ndGgpCiB7CiAg
ICAgaWYgKGxlbmd0aCA9PSAxKSB7CiAgICAgICAgIFQgYyA9IHNbMF07CiAgICAgICAgIGlmIChj
YW5Vc2VTaW5nbGVDaGFyYWN0ZXJTdHJpbmcoYykpCi0gICAgICAgICAgICByZXR1cm4gdm0tPnNt
YWxsU3RyaW5ncy5zaW5nbGVDaGFyYWN0ZXJTdHJpbmdSZXAoYyk7CisgICAgICAgICAgICByZXR1
cm4gdm0uc21hbGxTdHJpbmdzLnNpbmdsZUNoYXJhY3RlclN0cmluZ1JlcChjKTsKICAgICB9CiAg
ICAgaWYgKCFsZW5ndGgpCiAgICAgICAgIHJldHVybiAqU3RyaW5nSW1wbDo6ZW1wdHkoKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lkZW50aWZpZXJJbmxpbmVzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSWRlbnRpZmllcklubGlu
ZXMuaAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SWRlbnRpZmllcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE0LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMSw1OCArMzEsNDUgQEAKIAogbmFt
ZXNwYWNlIEpTQyAgewogCi1pbmxpbmUgSWRlbnRpZmllcjo6SWRlbnRpZmllcihFeGVjU3RhdGUq
IGV4ZWMsIEF0b21TdHJpbmdJbXBsKiBzdHJpbmcpCitpbmxpbmUgSWRlbnRpZmllcjo6SWRlbnRp
ZmllcihWTSYgdm0sIEF0b21TdHJpbmdJbXBsKiBzdHJpbmcpCiAgICAgOiBtX3N0cmluZyhzdHJp
bmcpCiB7CiAjaWZuZGVmIE5ERUJVRwotICAgIGNoZWNrQ3VycmVudEF0b21TdHJpbmdUYWJsZShl
eGVjKTsKKyAgICBjaGVja0N1cnJlbnRBdG9tU3RyaW5nVGFibGUodm0pOwogICAgIGlmIChzdHJp
bmcpCiAgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoIXN0cmluZy0+bGVuZ3RoKCkgfHwgc3Ry
aW5nLT5pc1N5bWJvbCgpIHx8IEF0b21TdHJpbmdJbXBsOjppc0luQXRvbVN0cmluZ1RhYmxlKHN0
cmluZyksICJUaGUgYXRvbWljIHN0cmluZyBjb21lcyBmcm9tIGFuIG90aGVyIHRocmVhZCEiKTsK
ICNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGV4ZWMpOworICAgIFVOVVNFRF9QQVJBTSh2bSk7CiAj
ZW5kaWYKIH0KIAotaW5saW5lIElkZW50aWZpZXI6OklkZW50aWZpZXIoRXhlY1N0YXRlKiBleGVj
LCBjb25zdCBBdG9tU3RyaW5nJiBzdHJpbmcpCitpbmxpbmUgSWRlbnRpZmllcjo6SWRlbnRpZmll
cihWTSYgdm0sIGNvbnN0IEF0b21TdHJpbmcmIHN0cmluZykKICAgICA6IG1fc3RyaW5nKHN0cmlu
Zy5zdHJpbmcoKSkKIHsKICNpZm5kZWYgTkRFQlVHCi0gICAgY2hlY2tDdXJyZW50QXRvbVN0cmlu
Z1RhYmxlKGV4ZWMpOworICAgIGNoZWNrQ3VycmVudEF0b21TdHJpbmdUYWJsZSh2bSk7CiAgICAg
aWYgKCFzdHJpbmcuaXNOdWxsKCkpCiAgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoIXN0cmlu
Zy5sZW5ndGgoKSB8fCBzdHJpbmcuaW1wbCgpLT5pc1N5bWJvbCgpIHx8IEF0b21TdHJpbmdJbXBs
Ojppc0luQXRvbVN0cmluZ1RhYmxlKHN0cmluZy5pbXBsKCkpLCAiVGhlIGF0b21pYyBzdHJpbmcg
Y29tZXMgZnJvbSBhbiBvdGhlciB0aHJlYWQhIik7CiAjZWxzZQotICAgIFVOVVNFRF9QQVJBTShl
eGVjKTsKKyAgICBVTlVTRURfUEFSQU0odm0pOwogI2VuZGlmCiB9CiAKLWlubGluZSBSZWY8U3Ry
aW5nSW1wbD4gSWRlbnRpZmllcjo6YWRkKEV4ZWNTdGF0ZSogZXhlYywgU3RyaW5nSW1wbCogcikK
LXsKLSNpZm5kZWYgTkRFQlVHCi0gICAgY2hlY2tDdXJyZW50QXRvbVN0cmluZ1RhYmxlKGV4ZWMp
OwotI2VuZGlmCi0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICByZXR1cm4gKkF0b21TdHJp
bmdJbXBsOjphZGRXaXRoU3RyaW5nVGFibGVQcm92aWRlcih2bSwgcik7Ci19Ci1pbmxpbmUgUmVm
PFN0cmluZ0ltcGw+IElkZW50aWZpZXI6OmFkZChWTSogdm0sIFN0cmluZ0ltcGwqIHIpCitpbmxp
bmUgUmVmPFN0cmluZ0ltcGw+IElkZW50aWZpZXI6OmFkZChWTSYgdm0sIFN0cmluZ0ltcGwqIHIp
CiB7CiAjaWZuZGVmIE5ERUJVRwogICAgIGNoZWNrQ3VycmVudEF0b21TdHJpbmdUYWJsZSh2bSk7
CiAjZW5kaWYKLSAgICByZXR1cm4gKkF0b21TdHJpbmdJbXBsOjphZGRXaXRoU3RyaW5nVGFibGVQ
cm92aWRlcigqdm0sIHIpOworICAgIHJldHVybiAqQXRvbVN0cmluZ0ltcGw6OmFkZFdpdGhTdHJp
bmdUYWJsZVByb3ZpZGVyKHZtLCByKTsKIH0KIAotaW5saW5lIElkZW50aWZpZXIgSWRlbnRpZmll
cjo6ZnJvbVVpZChWTSogdm0sIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCitpbmxpbmUgSWRlbnRp
ZmllciBJZGVudGlmaWVyOjpmcm9tVWlkKFZNJiB2bSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkK
IHsKICAgICBpZiAoIXVpZCB8fCAhdWlkLT5pc1N5bWJvbCgpKQogICAgICAgICByZXR1cm4gSWRl
bnRpZmllcih2bSwgdWlkKTsKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U3ltYm9sSW1wbCY+KCp1
aWQpOwogfQogCi1pbmxpbmUgSWRlbnRpZmllciBJZGVudGlmaWVyOjpmcm9tVWlkKEV4ZWNTdGF0
ZSogZXhlYywgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKLXsKLSAgICByZXR1cm4gZnJvbVVpZCgm
ZXhlYy0+dm0oKSwgdWlkKTsKLX0KLQogaW5saW5lIElkZW50aWZpZXIgSWRlbnRpZmllcjo6ZnJv
bVVpZChjb25zdCBQcml2YXRlTmFtZSYgbmFtZSkKIHsKICAgICByZXR1cm4gbmFtZS51aWQoKTsK
QEAgLTk0LDY0ICs4MSw2MyBAQCBpbmxpbmUgSWRlbnRpZmllciBJZGVudGlmaWVyOjpmcm9tVWlk
KFN5CiB9CiAKIHRlbXBsYXRlPHVuc2lnbmVkIGNoYXJhY3RlcnNDb3VudD4KLWlubGluZSBJZGVu
dGlmaWVyIElkZW50aWZpZXI6OmZyb21TdHJpbmcoVk0qIHZtLCBjb25zdCBjaGFyICgmY2hhcmFj
dGVycylbY2hhcmFjdGVyc0NvdW50XSkKK2lubGluZSBJZGVudGlmaWVyIElkZW50aWZpZXI6OmZy
b21TdHJpbmcoVk0mIHZtLCBjb25zdCBjaGFyICgmY2hhcmFjdGVycylbY2hhcmFjdGVyc0NvdW50
XSkKIHsKLSAgICByZXR1cm4gSWRlbnRpZmllcih2bSwgY2hhcmFjdGVycyk7CisgICAgcmV0dXJu
IElkZW50aWZpZXIoJnZtLCBjaGFyYWN0ZXJzKTsKIH0KIAotdGVtcGxhdGU8dW5zaWduZWQgY2hh
cmFjdGVyc0NvdW50PgotaW5saW5lIElkZW50aWZpZXIgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhF
eGVjU3RhdGUqIGV4ZWMsIGNvbnN0IGNoYXIgKCZjaGFyYWN0ZXJzKVtjaGFyYWN0ZXJzQ291bnRd
KQoraW5saW5lIElkZW50aWZpZXIgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhWTSYgdm0sIEFTQ0lJ
TGl0ZXJhbCBzKQogewotICAgIHJldHVybiBJZGVudGlmaWVyKCZleGVjLT52bSgpLCBjaGFyYWN0
ZXJzKTsKKyAgICByZXR1cm4gSWRlbnRpZmllcih2bSwgU3RyaW5nKHMpKTsKIH0KIAotaW5saW5l
IElkZW50aWZpZXIgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhWTSogdm0sIGNvbnN0IExDaGFyKiBz
LCBpbnQgbGVuZ3RoKQoraW5saW5lIElkZW50aWZpZXIgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhW
TSYgdm0sIGNvbnN0IExDaGFyKiBzLCBpbnQgbGVuZ3RoKQogewogICAgIHJldHVybiBJZGVudGlm
aWVyKHZtLCBzLCBsZW5ndGgpOwogfQogCi1pbmxpbmUgSWRlbnRpZmllciBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKFZNKiB2bSwgY29uc3QgVUNoYXIqIHMsIGludCBsZW5ndGgpCitpbmxpbmUgSWRl
bnRpZmllciBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKFZNJiB2bSwgY29uc3QgVUNoYXIqIHMsIGlu
dCBsZW5ndGgpCiB7CiAgICAgcmV0dXJuIElkZW50aWZpZXIodm0sIHMsIGxlbmd0aCk7CiB9CiAK
LWlubGluZSBJZGVudGlmaWVyIElkZW50aWZpZXI6OmZyb21TdHJpbmcoVk0qIHZtLCBjb25zdCBT
dHJpbmcmIHN0cmluZykKK2lubGluZSBJZGVudGlmaWVyIElkZW50aWZpZXI6OmZyb21TdHJpbmco
Vk0mIHZtLCBjb25zdCBTdHJpbmcmIHN0cmluZykKIHsKICAgICByZXR1cm4gSWRlbnRpZmllcih2
bSwgc3RyaW5nLmltcGwoKSk7CiB9CiAKLWlubGluZSBJZGVudGlmaWVyIElkZW50aWZpZXI6OmZy
b21TdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcmIHN0cmluZykKK2lubGluZSBJ
ZGVudGlmaWVyIElkZW50aWZpZXI6OmZyb21TdHJpbmcoVk0mIHZtLCBBdG9tU3RyaW5nSW1wbCog
YXRvbVN0cmluZ0ltcGwpCiB7Ci0gICAgcmV0dXJuIElkZW50aWZpZXIoJmV4ZWMtPnZtKCksIHN0
cmluZy5pbXBsKCkpOworICAgIHJldHVybiBJZGVudGlmaWVyKHZtLCBhdG9tU3RyaW5nSW1wbCk7
CiB9CiAKLWlubGluZSBJZGVudGlmaWVyIElkZW50aWZpZXI6OmZyb21TdHJpbmcoRXhlY1N0YXRl
KiBleGVjLCBBdG9tU3RyaW5nSW1wbCogYXRvbVN0cmluZykKK2lubGluZSBJZGVudGlmaWVyIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcoVk0mIHZtLCBjb25zdCBBdG9tU3RyaW5nJiBhdG9tU3RyaW5n
KQogewotICAgIHJldHVybiBJZGVudGlmaWVyKGV4ZWMsIGF0b21TdHJpbmcpOworICAgIHJldHVy
biBJZGVudGlmaWVyKHZtLCBhdG9tU3RyaW5nKTsKIH0KIAotaW5saW5lIElkZW50aWZpZXIgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEF0b21TdHJpbmcmIGF0
b21TdHJpbmcpCitpbmxpbmUgSWRlbnRpZmllciBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKFZNJiB2
bSwgU3ltYm9sSW1wbCogc3ltYm9sSW1wbCkKIHsKLSAgICByZXR1cm4gSWRlbnRpZmllcihleGVj
LCBhdG9tU3RyaW5nKTsKKyAgICByZXR1cm4gSWRlbnRpZmllcih2bSwgc3ltYm9sSW1wbCk7CiB9
CiAKLWlubGluZSBJZGVudGlmaWVyIElkZW50aWZpZXI6OmZyb21TdHJpbmcoRXhlY1N0YXRlKiBl
eGVjLCBjb25zdCBjaGFyKiBzKQoraW5saW5lIElkZW50aWZpZXIgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZyhWTSYgdm0sIGNvbnN0IGNoYXIqIHMpCiB7Ci0gICAgcmV0dXJuIElkZW50aWZpZXIoZXhl
YywgQXRvbVN0cmluZyhzKSk7CisgICAgcmV0dXJuIElkZW50aWZpZXIodm0sIEF0b21TdHJpbmco
cykpOwogfQogCiBpbmxpbmUgSlNWYWx1ZSBpZGVudGlmaWVyVG9KU1ZhbHVlKFZNJiB2bSwgY29u
c3QgSWRlbnRpZmllciYgaWRlbnRpZmllcikKIHsKICAgICBpZiAoaWRlbnRpZmllci5pc1N5bWJv
bCgpKQogICAgICAgICByZXR1cm4gU3ltYm9sOjpjcmVhdGUodm0sIHN0YXRpY19jYXN0PFN5bWJv
bEltcGwmPigqaWRlbnRpZmllci5pbXBsKCkpKTsKLSAgICByZXR1cm4ganNTdHJpbmcoJnZtLCBp
ZGVudGlmaWVyLmltcGwoKSk7CisgICAgcmV0dXJuIGpzU3RyaW5nKHZtLCBpZGVudGlmaWVyLmlt
cGwoKSk7CiB9CiAKIGlubGluZSBKU1ZhbHVlIGlkZW50aWZpZXJUb1NhZmVQdWJsaWNKU1ZhbHVl
KFZNJiB2bSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnRpZmllcikgCiB7CiAgICAgaWYgKGlkZW50
aWZpZXIuaXNTeW1ib2woKSAmJiAhaWRlbnRpZmllci5pc1ByaXZhdGVOYW1lKCkpCiAgICAgICAg
IHJldHVybiBTeW1ib2w6OmNyZWF0ZSh2bSwgc3RhdGljX2Nhc3Q8U3ltYm9sSW1wbCY+KCppZGVu
dGlmaWVyLmltcGwoKSkpOwotICAgIHJldHVybiBqc1N0cmluZygmdm0sIGlkZW50aWZpZXIuaW1w
bCgpKTsKKyAgICByZXR1cm4ganNTdHJpbmcodm0sIGlkZW50aWZpZXIuaW1wbCgpKTsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bnRlcm5hbEZ1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbnRlcm5hbEZ1bmN0aW9uLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZXJuYWxGdW5jdGlvbi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTUyLDcgKzUyLDcgQEAgdm9pZCBJbnRlcm5hbEZ1bmN0aW9uOjpmaW5pc2hDcmVhdGlv
bihWTQogICAgIEFTU0VSVChtZXRob2RUYWJsZSh2bSktPmdldENhbGxEYXRhID09IEludGVybmFs
RnVuY3Rpb246OmluZm8oKS0+bWV0aG9kVGFibGUuZ2V0Q2FsbERhdGEpOwogICAgIEFTU0VSVCht
ZXRob2RUYWJsZSh2bSktPmdldENvbnN0cnVjdERhdGEgPT0gSW50ZXJuYWxGdW5jdGlvbjo6aW5m
bygpLT5tZXRob2RUYWJsZS5nZXRDb25zdHJ1Y3REYXRhKTsKICAgICBBU1NFUlQodHlwZSgpID09
IEludGVybmFsRnVuY3Rpb25UeXBlKTsKLSAgICBKU1N0cmluZyogbmFtZVN0cmluZyA9IGpzU3Ry
aW5nKCZ2bSwgbmFtZSk7CisgICAgSlNTdHJpbmcqIG5hbWVTdHJpbmcgPSBqc1N0cmluZyh2bSwg
bmFtZSk7CiAgICAgbV9vcmlnaW5hbE5hbWUuc2V0KHZtLCB0aGlzLCBuYW1lU3RyaW5nKTsKICAg
ICBpZiAobmFtZVZpc2liaWxpdHkgPT0gTmFtZVZpc2liaWxpdHk6OlZpc2libGUpIHsKICAgICAg
ICAgaWYgKG5hbWVBZGRpdGlvbk1vZGUgPT0gTmFtZUFkZGl0aW9uTW9kZTo6V2l0aFN0cnVjdHVy
ZVRyYW5zaXRpb24pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsQ29s
bGF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
dGxDb2xsYXRvci5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0ludGxDb2xsYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBA
CiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE1IEFuZHkgVmFuV2Fnb25lciAoYW5keUB2YW53YWdv
bmVyLmZhbWlseSkKICAqIENvcHlyaWdodCAoQykgMjAxNSBTdWtvbHNhayBTYWtzaHV3b25nIChz
dWtvbHNha0BnbWFpbC5jb20pCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMu
IEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOSBBcHBsZSBJ
bmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTQxMiwxMyArNDEyLDEzIEBAIEpTT2JqZWN0KiBJbnRsQ29sbGF0b3I6OnJlc29sdmVkT3B0
aW9ucygKICAgICB9CiAKICAgICBKU09iamVjdCogb3B0aW9ucyA9IGNvbnN0cnVjdEVtcHR5T2Jq
ZWN0KCZzdGF0ZSk7Ci0gICAgb3B0aW9ucy0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVz
LT5sb2NhbGUsIGpzU3RyaW5nKCZzdGF0ZSwgbV9sb2NhbGUpKTsKLSAgICBvcHRpb25zLT5wdXRE
aXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnVzYWdlLCBqc05vbnRyaXZpYWxTdHJpbmcoJnN0
YXRlLCB1c2FnZVN0cmluZyhtX3VzYWdlKSkpOwotICAgIG9wdGlvbnMtPnB1dERpcmVjdCh2bSwg
dm0ucHJvcGVydHlOYW1lcy0+c2Vuc2l0aXZpdHksIGpzTm9udHJpdmlhbFN0cmluZygmc3RhdGUs
IHNlbnNpdGl2aXR5U3RyaW5nKG1fc2Vuc2l0aXZpdHkpKSk7CisgICAgb3B0aW9ucy0+cHV0RGly
ZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sb2NhbGUsIGpzU3RyaW5nKHZtLCBtX2xvY2FsZSkp
OworICAgIG9wdGlvbnMtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+dXNhZ2UsIGpz
Tm9udHJpdmlhbFN0cmluZyh2bSwgdXNhZ2VTdHJpbmcobV91c2FnZSkpKTsKKyAgICBvcHRpb25z
LT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnNlbnNpdGl2aXR5LCBqc05vbnRyaXZp
YWxTdHJpbmcodm0sIHNlbnNpdGl2aXR5U3RyaW5nKG1fc2Vuc2l0aXZpdHkpKSk7CiAgICAgb3B0
aW9ucy0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5pZ25vcmVQdW5jdHVhdGlvbiwg
anNCb29sZWFuKG1faWdub3JlUHVuY3R1YXRpb24pKTsKLSAgICBvcHRpb25zLT5wdXREaXJlY3Qo
dm0sIHZtLnByb3BlcnR5TmFtZXMtPmNvbGxhdGlvbiwganNTdHJpbmcoJnN0YXRlLCBtX2NvbGxh
dGlvbikpOworICAgIG9wdGlvbnMtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+Y29s
bGF0aW9uLCBqc1N0cmluZyh2bSwgbV9jb2xsYXRpb24pKTsKICAgICBvcHRpb25zLT5wdXREaXJl
Y3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm51bWVyaWMsIGpzQm9vbGVhbihtX251bWVyaWMpKTsK
LSAgICBvcHRpb25zLT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmNhc2VGaXJzdCwg
anNOb250cml2aWFsU3RyaW5nKCZzdGF0ZSwgY2FzZUZpcnN0U3RyaW5nKG1fY2FzZUZpcnN0KSkp
OworICAgIG9wdGlvbnMtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+Y2FzZUZpcnN0
LCBqc05vbnRyaXZpYWxTdHJpbmcodm0sIGNhc2VGaXJzdFN0cmluZyhtX2Nhc2VGaXJzdCkpKTsK
ICAgICByZXR1cm4gb3B0aW9uczsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSW50bENvbGxhdG9yUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9JbnRsQ29sbGF0b3JQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAy
NDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsQ29sbGF0b3JQcm90
b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdo
dCAoQykgMjAxNSBBbmR5IFZhbldhZ29uZXIgKGFuZHlAdmFud2Fnb25lci5mYW1pbHkpCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTc1LDcgKzc1LDcgQEAgdm9pZCBJ
bnRsQ29sbGF0b3JQcm90b3R5cGU6OmZpbmlzaENyZWF0aQogewogICAgIEJhc2U6OmZpbmlzaENy
ZWF0aW9uKHZtKTsKIAotICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9w
ZXJ0eU5hbWVzLT50b1N0cmluZ1RhZ1N5bWJvbCwganNTdHJpbmcoJnZtLCAiT2JqZWN0IiksIFBy
b3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSk7
CisgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPnRv
U3RyaW5nVGFnU3ltYm9sLCBqc1N0cmluZyh2bSwgIk9iamVjdCIpLCBQcm9wZXJ0eUF0dHJpYnV0
ZTo6RG9udEVudW0gfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpOwogfQogCiBzdGF0aWMg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBJbnRsQ29sbGF0b3JGdW5jQ29tcGFyZShFeGVj
U3RhdGUqIHN0YXRlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERh
dGVUaW1lRm9ybWF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRsRGF0ZVRpbWVGb3JtYXQuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxNSBBbmR5IFZhbldh
Z29uZXIgKGFuZHlAdmFud2Fnb25lci5mYW1pbHkpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYt
MjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTMxNiw3ICszMTYsNyBAQCBzdGF0aWMgSlNPYmplY3QqIHRvRGF0ZVRp
bWVPcHRpb25zQW55RGF0CiAgICAgICAgIC8vIGEuIEZvciBlYWNoIG9mIHRoZSBwcm9wZXJ0eSBu
YW1lcyAieWVhciIsICJtb250aCIsICJkYXkiOgogICAgICAgICAvLyBpLiBMZXQgc3RhdHVzIGJl
IENyZWF0ZURhdGVQcm9wZXJ0eU9yVGhyb3cob3B0aW9ucywgcHJvcCwgIm51bWVyaWMiKS4KICAg
ICAgICAgLy8gaWkuIFJldHVybklmQWJydXB0KHN0YXR1cykuCi0gICAgICAgIEpTU3RyaW5nKiBu
dW1lcmljID0ganNOb250cml2aWFsU3RyaW5nKCZleGVjLCAibnVtZXJpYyJfcyk7CisgICAgICAg
IEpTU3RyaW5nKiBudW1lcmljID0ganNOb250cml2aWFsU3RyaW5nKHZtLCAibnVtZXJpYyJfcyk7
CiAKICAgICAgICAgb3B0aW9ucy0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT55ZWFy
LCBudW1lcmljKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7
CkBAIC04NDgsNDIgKzg0OCw0MiBAQCBKU09iamVjdCogSW50bERhdGVUaW1lRm9ybWF0OjpyZXNv
bHZlZE9wCiAgICAgfQogCiAgICAgSlNPYmplY3QqIG9wdGlvbnMgPSBjb25zdHJ1Y3RFbXB0eU9i
amVjdCgmZXhlYyk7Ci0gICAgb3B0aW9ucy0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVz
LT5sb2NhbGUsIGpzTm9udHJpdmlhbFN0cmluZygmZXhlYywgbV9sb2NhbGUpKTsKLSAgICBvcHRp
b25zLT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmNhbGVuZGFyLCBqc05vbnRyaXZp
YWxTdHJpbmcoJmV4ZWMsIG1fY2FsZW5kYXIpKTsKLSAgICBvcHRpb25zLT5wdXREaXJlY3Qodm0s
IHZtLnByb3BlcnR5TmFtZXMtPm51bWJlcmluZ1N5c3RlbSwganNOb250cml2aWFsU3RyaW5nKCZl
eGVjLCBtX251bWJlcmluZ1N5c3RlbSkpOwotICAgIG9wdGlvbnMtPnB1dERpcmVjdCh2bSwgdm0u
cHJvcGVydHlOYW1lcy0+dGltZVpvbmUsIGpzTm9udHJpdmlhbFN0cmluZygmZXhlYywgbV90aW1l
Wm9uZSkpOworICAgIG9wdGlvbnMtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bG9j
YWxlLCBqc05vbnRyaXZpYWxTdHJpbmcodm0sIG1fbG9jYWxlKSk7CisgICAgb3B0aW9ucy0+cHV0
RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5jYWxlbmRhciwganNOb250cml2aWFsU3RyaW5n
KHZtLCBtX2NhbGVuZGFyKSk7CisgICAgb3B0aW9ucy0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0
eU5hbWVzLT5udW1iZXJpbmdTeXN0ZW0sIGpzTm9udHJpdmlhbFN0cmluZyh2bSwgbV9udW1iZXJp
bmdTeXN0ZW0pKTsKKyAgICBvcHRpb25zLT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMt
PnRpbWVab25lLCBqc05vbnRyaXZpYWxTdHJpbmcodm0sIG1fdGltZVpvbmUpKTsKIAogICAgIGlm
IChtX3dlZWtkYXkgIT0gV2Vla2RheTo6Tm9uZSkKLSAgICAgICAgb3B0aW9ucy0+cHV0RGlyZWN0
KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT53ZWVrZGF5LCBqc05vbnRyaXZpYWxTdHJpbmcoJmV4ZWMs
IHdlZWtkYXlTdHJpbmcobV93ZWVrZGF5KSkpOworICAgICAgICBvcHRpb25zLT5wdXREaXJlY3Qo
dm0sIHZtLnByb3BlcnR5TmFtZXMtPndlZWtkYXksIGpzTm9udHJpdmlhbFN0cmluZyh2bSwgd2Vl
a2RheVN0cmluZyhtX3dlZWtkYXkpKSk7CiAKICAgICBpZiAobV9lcmEgIT0gRXJhOjpOb25lKQot
ICAgICAgICBvcHRpb25zLT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmVyYSwganNO
b250cml2aWFsU3RyaW5nKCZleGVjLCBlcmFTdHJpbmcobV9lcmEpKSk7CisgICAgICAgIG9wdGlv
bnMtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+ZXJhLCBqc05vbnRyaXZpYWxTdHJp
bmcodm0sIGVyYVN0cmluZyhtX2VyYSkpKTsKIAogICAgIGlmIChtX3llYXIgIT0gWWVhcjo6Tm9u
ZSkKLSAgICAgICAgb3B0aW9ucy0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT55ZWFy
LCBqc05vbnRyaXZpYWxTdHJpbmcoJmV4ZWMsIHllYXJTdHJpbmcobV95ZWFyKSkpOworICAgICAg
ICBvcHRpb25zLT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnllYXIsIGpzTm9udHJp
dmlhbFN0cmluZyh2bSwgeWVhclN0cmluZyhtX3llYXIpKSk7CiAKICAgICBpZiAobV9tb250aCAh
PSBNb250aDo6Tm9uZSkKLSAgICAgICAgb3B0aW9ucy0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0
eU5hbWVzLT5tb250aCwganNOb250cml2aWFsU3RyaW5nKCZleGVjLCBtb250aFN0cmluZyhtX21v
bnRoKSkpOworICAgICAgICBvcHRpb25zLT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMt
Pm1vbnRoLCBqc05vbnRyaXZpYWxTdHJpbmcodm0sIG1vbnRoU3RyaW5nKG1fbW9udGgpKSk7CiAK
ICAgICBpZiAobV9kYXkgIT0gRGF5OjpOb25lKQotICAgICAgICBvcHRpb25zLT5wdXREaXJlY3Qo
dm0sIHZtLnByb3BlcnR5TmFtZXMtPmRheSwganNOb250cml2aWFsU3RyaW5nKCZleGVjLCBkYXlT
dHJpbmcobV9kYXkpKSk7CisgICAgICAgIG9wdGlvbnMtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVy
dHlOYW1lcy0+ZGF5LCBqc05vbnRyaXZpYWxTdHJpbmcodm0sIGRheVN0cmluZyhtX2RheSkpKTsK
IAogICAgIGlmIChtX2hvdXIgIT0gSG91cjo6Tm9uZSkKLSAgICAgICAgb3B0aW9ucy0+cHV0RGly
ZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5ob3VyLCBqc05vbnRyaXZpYWxTdHJpbmcoJmV4ZWMs
IGhvdXJTdHJpbmcobV9ob3VyKSkpOworICAgICAgICBvcHRpb25zLT5wdXREaXJlY3Qodm0sIHZt
LnByb3BlcnR5TmFtZXMtPmhvdXIsIGpzTm9udHJpdmlhbFN0cmluZyh2bSwgaG91clN0cmluZyht
X2hvdXIpKSk7CiAKICAgICBpZiAoIW1faG91ckN5Y2xlLmlzTnVsbCgpKSB7Ci0gICAgICAgIG9w
dGlvbnMtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+aG91ckN5Y2xlLCBqc05vbnRy
aXZpYWxTdHJpbmcoJmV4ZWMsIG1faG91ckN5Y2xlKSk7CisgICAgICAgIG9wdGlvbnMtPnB1dERp
cmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+aG91ckN5Y2xlLCBqc05vbnRyaXZpYWxTdHJpbmco
dm0sIG1faG91ckN5Y2xlKSk7CiAgICAgICAgIG9wdGlvbnMtPnB1dERpcmVjdCh2bSwgdm0ucHJv
cGVydHlOYW1lcy0+aG91cjEyLCBqc0Jvb2xlYW4obV9ob3VyQ3ljbGUgPT0gImgxMSIgfHwgbV9o
b3VyQ3ljbGUgPT0gImgxMiIpKTsKICAgICB9CiAKICAgICBpZiAobV9taW51dGUgIT0gTWludXRl
OjpOb25lKQotICAgICAgICBvcHRpb25zLT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMt
Pm1pbnV0ZSwganNOb250cml2aWFsU3RyaW5nKCZleGVjLCBtaW51dGVTdHJpbmcobV9taW51dGUp
KSk7CisgICAgICAgIG9wdGlvbnMtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bWlu
dXRlLCBqc05vbnRyaXZpYWxTdHJpbmcodm0sIG1pbnV0ZVN0cmluZyhtX21pbnV0ZSkpKTsKIAog
ICAgIGlmIChtX3NlY29uZCAhPSBTZWNvbmQ6Ok5vbmUpCi0gICAgICAgIG9wdGlvbnMtPnB1dERp
cmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+c2Vjb25kLCBqc05vbnRyaXZpYWxTdHJpbmcoJmV4
ZWMsIHNlY29uZFN0cmluZyhtX3NlY29uZCkpKTsKKyAgICAgICAgb3B0aW9ucy0+cHV0RGlyZWN0
KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5zZWNvbmQsIGpzTm9udHJpdmlhbFN0cmluZyh2bSwgc2Vj
b25kU3RyaW5nKG1fc2Vjb25kKSkpOwogCiAgICAgaWYgKG1fdGltZVpvbmVOYW1lICE9IFRpbWVa
b25lTmFtZTo6Tm9uZSkKLSAgICAgICAgb3B0aW9ucy0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0
eU5hbWVzLT50aW1lWm9uZU5hbWUsIGpzTm9udHJpdmlhbFN0cmluZygmZXhlYywgdGltZVpvbmVO
YW1lU3RyaW5nKG1fdGltZVpvbmVOYW1lKSkpOworICAgICAgICBvcHRpb25zLT5wdXREaXJlY3Qo
dm0sIHZtLnByb3BlcnR5TmFtZXMtPnRpbWVab25lTmFtZSwganNOb250cml2aWFsU3RyaW5nKHZt
LCB0aW1lWm9uZU5hbWVTdHJpbmcobV90aW1lWm9uZU5hbWUpKSk7CiAKICAgICByZXR1cm4gb3B0
aW9uczsKIH0KQEAgLTkxNSw3ICs5MTUsNyBAQCBKU1ZhbHVlIEludGxEYXRlVGltZUZvcm1hdDo6
Zm9ybWF0KEV4ZWNTCiAgICAgaWYgKFVfRkFJTFVSRShzdGF0dXMpKQogICAgICAgICByZXR1cm4g
dGhyb3dUeXBlRXJyb3IoJmV4ZWMsIHNjb3BlLCAiZmFpbGVkIHRvIGZvcm1hdCBkYXRlIHZhbHVl
Il9zKTsKIAotICAgIHJldHVybiBqc1N0cmluZygmZXhlYywgU3RyaW5nKHJlc3VsdC5kYXRhKCks
IHJlc3VsdExlbmd0aCkpOworICAgIHJldHVybiBqc1N0cmluZyh2bSwgU3RyaW5nKHJlc3VsdC5k
YXRhKCksIHJlc3VsdExlbmd0aCkpOwogfQogCiAjaWYgSlNDX0lDVV9IQVNfVUZJRUxEUE9TSVRF
UgpAQCAtMTAxOCw4ICsxMDE4LDggQEAgSlNWYWx1ZSBJbnRsRGF0ZVRpbWVGb3JtYXQ6OmZvcm1h
dFRvUGFydAogICAgICAgICByZXR1cm4gdGhyb3dPdXRPZk1lbW9yeUVycm9yKCZleGVjLCBzY29w
ZSk7CiAKICAgICBhdXRvIHJlc3VsdFN0cmluZyA9IFN0cmluZyhyZXN1bHQuZGF0YSgpLCByZXN1
bHRMZW5ndGgpOwotICAgIGF1dG8gdHlwZVByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb21T
dHJpbmcoJnZtLCAidHlwZSIpOwotICAgIGF1dG8gbGl0ZXJhbFN0cmluZyA9IGpzU3RyaW5nKCZl
eGVjLCAibGl0ZXJhbCJfcyk7CisgICAgYXV0byB0eXBlUHJvcGVydHlOYW1lID0gSWRlbnRpZmll
cjo6ZnJvbVN0cmluZyh2bSwgInR5cGUiKTsKKyAgICBhdXRvIGxpdGVyYWxTdHJpbmcgPSBqc1N0
cmluZyh2bSwgImxpdGVyYWwiX3MpOwogCiAgICAgaW50MzJfdCBwcmV2aW91c0VuZEluZGV4ID0g
MDsKICAgICBpbnQzMl90IGJlZ2luSW5kZXggPSAwOwpAQCAtMTAzMCw3ICsxMDMwLDcgQEAgSlNW
YWx1ZSBJbnRsRGF0ZVRpbWVGb3JtYXQ6OmZvcm1hdFRvUGFydAogICAgICAgICAgICAgYmVnaW5J
bmRleCA9IGVuZEluZGV4ID0gcmVzdWx0TGVuZ3RoOwogCiAgICAgICAgIGlmIChwcmV2aW91c0Vu
ZEluZGV4IDwgYmVnaW5JbmRleCkgewotICAgICAgICAgICAgYXV0byB2YWx1ZSA9IGpzU3RyaW5n
KCZleGVjLCByZXN1bHRTdHJpbmcuc3Vic3RyaW5nKHByZXZpb3VzRW5kSW5kZXgsIGJlZ2luSW5k
ZXggLSBwcmV2aW91c0VuZEluZGV4KSk7CisgICAgICAgICAgICBhdXRvIHZhbHVlID0ganNTdHJp
bmcodm0sIHJlc3VsdFN0cmluZy5zdWJzdHJpbmcocHJldmlvdXNFbmRJbmRleCwgYmVnaW5JbmRl
eCAtIHByZXZpb3VzRW5kSW5kZXgpKTsKICAgICAgICAgICAgIEpTT2JqZWN0KiBwYXJ0ID0gY29u
c3RydWN0RW1wdHlPYmplY3QoJmV4ZWMpOwogICAgICAgICAgICAgcGFydC0+cHV0RGlyZWN0KHZt
LCB0eXBlUHJvcGVydHlOYW1lLCBsaXRlcmFsU3RyaW5nKTsKICAgICAgICAgICAgIHBhcnQtPnB1
dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+dmFsdWUsIHZhbHVlKTsKQEAgLTEwNDAsOCAr
MTA0MCw4IEBAIEpTVmFsdWUgSW50bERhdGVUaW1lRm9ybWF0Ojpmb3JtYXRUb1BhcnQKICAgICAg
ICAgcHJldmlvdXNFbmRJbmRleCA9IGVuZEluZGV4OwogCiAgICAgICAgIGlmIChmaWVsZFR5cGUg
Pj0gMCkgewotICAgICAgICAgICAgYXV0byB0eXBlID0ganNTdHJpbmcoJmV4ZWMsIHBhcnRUeXBl
U3RyaW5nKFVEYXRlRm9ybWF0RmllbGQoZmllbGRUeXBlKSkpOwotICAgICAgICAgICAgYXV0byB2
YWx1ZSA9IGpzU3RyaW5nKCZleGVjLCByZXN1bHRTdHJpbmcuc3Vic3RyaW5nKGJlZ2luSW5kZXgs
IGVuZEluZGV4IC0gYmVnaW5JbmRleCkpOworICAgICAgICAgICAgYXV0byB0eXBlID0ganNTdHJp
bmcodm0sIHBhcnRUeXBlU3RyaW5nKFVEYXRlRm9ybWF0RmllbGQoZmllbGRUeXBlKSkpOworICAg
ICAgICAgICAgYXV0byB2YWx1ZSA9IGpzU3RyaW5nKHZtLCByZXN1bHRTdHJpbmcuc3Vic3RyaW5n
KGJlZ2luSW5kZXgsIGVuZEluZGV4IC0gYmVnaW5JbmRleCkpOwogICAgICAgICAgICAgSlNPYmpl
Y3QqIHBhcnQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdCgmZXhlYyk7CiAgICAgICAgICAgICBwYXJ0
LT5wdXREaXJlY3Qodm0sIHR5cGVQcm9wZXJ0eU5hbWUsIHR5cGUpOwogICAgICAgICAgICAgcGFy
dC0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT52YWx1ZSwgdmFsdWUpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0UHJvdG90eXBl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0
ZVRpbWVGb3JtYXRQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXRQcm90b3R5cGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxNSBBbmR5
IFZhbldhZ29uZXIgKGFuZHlAdmFud2Fnb25lci5mYW1pbHkpCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2
LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC04OSw3ICs4OSw3IEBAIHZvaWQgSW50bERhdGVUaW1lRm9ybWF0UHJv
dG90eXBlOjpmaW5pc2gKICAgICBVTlVTRURfUEFSQU0oZ2xvYmFsT2JqZWN0KTsKICNlbmRpZgog
Ci0gICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPnRv
U3RyaW5nVGFnU3ltYm9sLCBqc1N0cmluZygmdm0sICJPYmplY3QiKSwgUHJvcGVydHlBdHRyaWJ1
dGU6OkRvbnRFbnVtIHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KTsKKyAgICBwdXREaXJl
Y3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+dG9TdHJpbmdUYWdTeW1i
b2wsIGpzU3RyaW5nKHZtLCAiT2JqZWN0IiksIFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8
IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSk7CiB9CiAKIHN0YXRpYyBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIEludGxEYXRlVGltZUZvcm1hdEZ1bmNGb3JtYXREYXRlVGltZShFeGVj
U3RhdGUqIHN0YXRlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51
bWJlckZvcm1hdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSW50bE51bWJlckZvcm1hdC5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDcgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxNSBBbmR5IFZhbldhZ29uZXIg
KGFuZHlAdmFud2Fnb25lci5mYW1pbHkpCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTYgU3Vrb2xzYWsg
U2Frc2h1d29uZyAoc3Vrb2xzYWtAZ21haWwuY29tKQotICogQ29weXJpZ2h0IChDKSAyMDE2LTIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2
LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0xOTUsNyArMTk1LDcgQEAgdm9pZCBJbnRsTnVtYmVyRm9ybWF0Ojpp
bml0aWFsaXplTnVtYmVyRgogCiAgICAgbV9udW1iZXJpbmdTeXN0ZW0gPSByZXN1bHQuZ2V0KCJu
dSJfcyk7CiAKLSAgICBTdHJpbmcgc3R5bGVTdHJpbmcgPSBpbnRsU3RyaW5nT3B0aW9uKHN0YXRl
LCBvcHRpb25zLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgInN0eWxlIiksIHsgImRlY2lt
YWwiLCAicGVyY2VudCIsICJjdXJyZW5jeSIgfSwgInN0eWxlIG11c3QgYmUgZWl0aGVyIFwiZGVj
aW1hbFwiLCBcInBlcmNlbnRcIiwgb3IgXCJjdXJyZW5jeVwiIiwgImRlY2ltYWwiKTsKKyAgICBT
dHJpbmcgc3R5bGVTdHJpbmcgPSBpbnRsU3RyaW5nT3B0aW9uKHN0YXRlLCBvcHRpb25zLCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAic3R5bGUiKSwgeyAiZGVjaW1hbCIsICJwZXJjZW50Iiwg
ImN1cnJlbmN5IiB9LCAic3R5bGUgbXVzdCBiZSBlaXRoZXIgXCJkZWNpbWFsXCIsIFwicGVyY2Vu
dFwiLCBvciBcImN1cnJlbmN5XCIiLCAiZGVjaW1hbCIpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIHZvaWQoKSk7CiAgICAgaWYgKHN0eWxlU3RyaW5nID09ICJkZWNpbWFsIikKICAg
ICAgICAgbV9zdHlsZSA9IFN0eWxlOjpEZWNpbWFsOwpAQCAtMjA2LDcgKzIwNiw3IEBAIHZvaWQg
SW50bE51bWJlckZvcm1hdDo6aW5pdGlhbGl6ZU51bWJlckYKICAgICBlbHNlCiAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogCi0gICAgU3RyaW5nIGN1cnJlbmN5ID0gaW50bFN0cmluZ09w
dGlvbihzdGF0ZSwgb3B0aW9ucywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJjdXJyZW5j
eSIpLCB7IH0sIG51bGxwdHIsIG51bGxwdHIpOworICAgIFN0cmluZyBjdXJyZW5jeSA9IGludGxT
dHJpbmdPcHRpb24oc3RhdGUsIG9wdGlvbnMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJj
dXJyZW5jeSIpLCB7IH0sIG51bGxwdHIsIG51bGxwdHIpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIHZvaWQoKSk7CiAgICAgaWYgKCFjdXJyZW5jeS5pc051bGwoKSkgewogICAgICAg
ICBpZiAoY3VycmVuY3kubGVuZ3RoKCkgIT0gMyB8fCAhY3VycmVuY3kuaXNBbGxTcGVjaWFsQ2hh
cmFjdGVyczxpc0FTQ0lJQWxwaGE+KCkpIHsKQEAgLTIyNyw3ICsyMjcsNyBAQCB2b2lkIEludGxO
dW1iZXJGb3JtYXQ6OmluaXRpYWxpemVOdW1iZXJGCiAgICAgICAgIGN1cnJlbmN5RGlnaXRzID0g
Y29tcHV0ZUN1cnJlbmN5RGlnaXRzKGN1cnJlbmN5KTsKICAgICB9CiAKLSAgICBTdHJpbmcgY3Vy
cmVuY3lEaXNwbGF5U3RyaW5nID0gaW50bFN0cmluZ09wdGlvbihzdGF0ZSwgb3B0aW9ucywgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJjdXJyZW5jeURpc3BsYXkiKSwgeyAiY29kZSIsICJz
eW1ib2wiLCAibmFtZSIgfSwgImN1cnJlbmN5RGlzcGxheSBtdXN0IGJlIGVpdGhlciBcImNvZGVc
IiwgXCJzeW1ib2xcIiwgb3IgXCJuYW1lXCIiLCAic3ltYm9sIik7CisgICAgU3RyaW5nIGN1cnJl
bmN5RGlzcGxheVN0cmluZyA9IGludGxTdHJpbmdPcHRpb24oc3RhdGUsIG9wdGlvbnMsIElkZW50
aWZpZXI6OmZyb21TdHJpbmcodm0sICJjdXJyZW5jeURpc3BsYXkiKSwgeyAiY29kZSIsICJzeW1i
b2wiLCAibmFtZSIgfSwgImN1cnJlbmN5RGlzcGxheSBtdXN0IGJlIGVpdGhlciBcImNvZGVcIiwg
XCJzeW1ib2xcIiwgb3IgXCJuYW1lXCIiLCAic3ltYm9sIik7CiAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgdm9pZCgpKTsKICAgICBpZiAobV9zdHlsZSA9PSBTdHlsZTo6Q3VycmVuY3kp
IHsKICAgICAgICAgaWYgKGN1cnJlbmN5RGlzcGxheVN0cmluZyA9PSAiY29kZSIpCkBAIC0yNDAs
MTMgKzI0MCwxMyBAQCB2b2lkIEludGxOdW1iZXJGb3JtYXQ6OmluaXRpYWxpemVOdW1iZXJGCiAg
ICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CiAKLSAgICB1bnNpZ25lZCBt
aW5pbXVtSW50ZWdlckRpZ2l0cyA9IGludGxOdW1iZXJPcHRpb24oc3RhdGUsIG9wdGlvbnMsIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAibWluaW11bUludGVnZXJEaWdpdHMiKSwgMSwgMjEs
IDEpOworICAgIHVuc2lnbmVkIG1pbmltdW1JbnRlZ2VyRGlnaXRzID0gaW50bE51bWJlck9wdGlv
bihzdGF0ZSwgb3B0aW9ucywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIm1pbmltdW1JbnRl
Z2VyRGlnaXRzIiksIDEsIDIxLCAxKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2
b2lkKCkpOwogICAgIG1fbWluaW11bUludGVnZXJEaWdpdHMgPSBtaW5pbXVtSW50ZWdlckRpZ2l0
czsKIAogICAgIHVuc2lnbmVkIG1pbmltdW1GcmFjdGlvbkRpZ2l0c0RlZmF1bHQgPSAobV9zdHls
ZSA9PSBTdHlsZTo6Q3VycmVuY3kpID8gY3VycmVuY3lEaWdpdHMgOiAwOwogCi0gICAgdW5zaWdu
ZWQgbWluaW11bUZyYWN0aW9uRGlnaXRzID0gaW50bE51bWJlck9wdGlvbihzdGF0ZSwgb3B0aW9u
cywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJtaW5pbXVtRnJhY3Rpb25EaWdpdHMiKSwg
MCwgMjAsIG1pbmltdW1GcmFjdGlvbkRpZ2l0c0RlZmF1bHQpOworICAgIHVuc2lnbmVkIG1pbmlt
dW1GcmFjdGlvbkRpZ2l0cyA9IGludGxOdW1iZXJPcHRpb24oc3RhdGUsIG9wdGlvbnMsIElkZW50
aWZpZXI6OmZyb21TdHJpbmcodm0sICJtaW5pbXVtRnJhY3Rpb25EaWdpdHMiKSwgMCwgMjAsIG1p
bmltdW1GcmFjdGlvbkRpZ2l0c0RlZmF1bHQpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIHZvaWQoKSk7CiAgICAgbV9taW5pbXVtRnJhY3Rpb25EaWdpdHMgPSBtaW5pbXVtRnJhY3Rp
b25EaWdpdHM7CiAKQEAgLTI1OCwyNyArMjU4LDI3IEBAIHZvaWQgSW50bE51bWJlckZvcm1hdDo6
aW5pdGlhbGl6ZU51bWJlckYKICAgICBlbHNlCiAgICAgICAgIG1heGltdW1GcmFjdGlvbkRpZ2l0
c0RlZmF1bHQgPSBzdGQ6Om1heChtaW5pbXVtRnJhY3Rpb25EaWdpdHMsIDN1KTsKIAotICAgIHVu
c2lnbmVkIG1heGltdW1GcmFjdGlvbkRpZ2l0cyA9IGludGxOdW1iZXJPcHRpb24oc3RhdGUsIG9w
dGlvbnMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAibWF4aW11bUZyYWN0aW9uRGlnaXRz
IiksIG1pbmltdW1GcmFjdGlvbkRpZ2l0cywgMjAsIG1heGltdW1GcmFjdGlvbkRpZ2l0c0RlZmF1
bHQpOworICAgIHVuc2lnbmVkIG1heGltdW1GcmFjdGlvbkRpZ2l0cyA9IGludGxOdW1iZXJPcHRp
b24oc3RhdGUsIG9wdGlvbnMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJtYXhpbXVtRnJh
Y3Rpb25EaWdpdHMiKSwgbWluaW11bUZyYWN0aW9uRGlnaXRzLCAyMCwgbWF4aW11bUZyYWN0aW9u
RGlnaXRzRGVmYXVsdCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsK
ICAgICBtX21heGltdW1GcmFjdGlvbkRpZ2l0cyA9IG1heGltdW1GcmFjdGlvbkRpZ2l0czsKIAot
ICAgIEpTVmFsdWUgbWluaW11bVNpZ25pZmljYW50RGlnaXRzVmFsdWUgPSBvcHRpb25zLT5nZXQo
JnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgIm1pbmltdW1TaWduaWZpY2FudERp
Z2l0cyIpKTsKKyAgICBKU1ZhbHVlIG1pbmltdW1TaWduaWZpY2FudERpZ2l0c1ZhbHVlID0gb3B0
aW9ucy0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIm1pbmltdW1TaWdu
aWZpY2FudERpZ2l0cyIpKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkp
OwogCi0gICAgSlNWYWx1ZSBtYXhpbXVtU2lnbmlmaWNhbnREaWdpdHNWYWx1ZSA9IG9wdGlvbnMt
PmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAibWF4aW11bVNpZ25pZmlj
YW50RGlnaXRzIikpOworICAgIEpTVmFsdWUgbWF4aW11bVNpZ25pZmljYW50RGlnaXRzVmFsdWUg
PSBvcHRpb25zLT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAibWF4aW11
bVNpZ25pZmljYW50RGlnaXRzIikpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZv
aWQoKSk7CiAKICAgICBpZiAoIW1pbmltdW1TaWduaWZpY2FudERpZ2l0c1ZhbHVlLmlzVW5kZWZp
bmVkKCkgfHwgIW1heGltdW1TaWduaWZpY2FudERpZ2l0c1ZhbHVlLmlzVW5kZWZpbmVkKCkpIHsK
LSAgICAgICAgdW5zaWduZWQgbWluaW11bVNpZ25pZmljYW50RGlnaXRzID0gaW50bERlZmF1bHRO
dW1iZXJPcHRpb24oc3RhdGUsIG1pbmltdW1TaWduaWZpY2FudERpZ2l0c1ZhbHVlLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKCZ2bSwgIm1pbmltdW1TaWduaWZpY2FudERpZ2l0cyIpLCAxLCAyMSwg
MSk7CisgICAgICAgIHVuc2lnbmVkIG1pbmltdW1TaWduaWZpY2FudERpZ2l0cyA9IGludGxEZWZh
dWx0TnVtYmVyT3B0aW9uKHN0YXRlLCBtaW5pbXVtU2lnbmlmaWNhbnREaWdpdHNWYWx1ZSwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIm1pbmltdW1TaWduaWZpY2FudERpZ2l0cyIpLCAxLCAy
MSwgMSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7Ci0gICAg
ICAgIHVuc2lnbmVkIG1heGltdW1TaWduaWZpY2FudERpZ2l0cyA9IGludGxEZWZhdWx0TnVtYmVy
T3B0aW9uKHN0YXRlLCBtYXhpbXVtU2lnbmlmaWNhbnREaWdpdHNWYWx1ZSwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZygmdm0sICJtYXhpbXVtU2lnbmlmaWNhbnREaWdpdHMiKSwgbWluaW11bVNpZ25p
ZmljYW50RGlnaXRzLCAyMSwgMjEpOworICAgICAgICB1bnNpZ25lZCBtYXhpbXVtU2lnbmlmaWNh
bnREaWdpdHMgPSBpbnRsRGVmYXVsdE51bWJlck9wdGlvbihzdGF0ZSwgbWF4aW11bVNpZ25pZmlj
YW50RGlnaXRzVmFsdWUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJtYXhpbXVtU2lnbmlm
aWNhbnREaWdpdHMiKSwgbWluaW11bVNpZ25pZmljYW50RGlnaXRzLCAyMSwgMjEpOwogICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogICAgICAgICBtX21pbmltdW1T
aWduaWZpY2FudERpZ2l0cyA9IG1pbmltdW1TaWduaWZpY2FudERpZ2l0czsKICAgICAgICAgbV9t
YXhpbXVtU2lnbmlmaWNhbnREaWdpdHMgPSBtYXhpbXVtU2lnbmlmaWNhbnREaWdpdHM7CiAgICAg
fQogCiAgICAgYm9vbCB1c2VzRmFsbGJhY2s7Ci0gICAgYm9vbCB1c2VHcm91cGluZyA9IGludGxC
b29sZWFuT3B0aW9uKHN0YXRlLCBvcHRpb25zLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwg
InVzZUdyb3VwaW5nIiksIHVzZXNGYWxsYmFjayk7CisgICAgYm9vbCB1c2VHcm91cGluZyA9IGlu
dGxCb29sZWFuT3B0aW9uKHN0YXRlLCBvcHRpb25zLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZt
LCAidXNlR3JvdXBpbmciKSwgdXNlc0ZhbGxiYWNrKTsKICAgICBpZiAodXNlc0ZhbGxiYWNrKQog
ICAgICAgICB1c2VHcm91cGluZyA9IHRydWU7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgdm9pZCgpKTsKQEAgLTM2NCw3ICszNjQsNyBAQCBKU1ZhbHVlIEludGxOdW1iZXJGb3JtYXQ6
OmZvcm1hdE51bWJlcihFCiAgICAgaWYgKFVfRkFJTFVSRShzdGF0dXMpKQogICAgICAgICByZXR1
cm4gdGhyb3dFeGNlcHRpb24oJnN0YXRlLCBzY29wZSwgY3JlYXRlRXJyb3IoJnN0YXRlLCAiRmFp
bGVkIHRvIGZvcm1hdCBhIG51bWJlci4iX3MpKTsKIAotICAgIHJldHVybiBqc1N0cmluZygmc3Rh
dGUsIFN0cmluZyhidWZmZXIuZGF0YSgpLCBsZW5ndGgpKTsKKyAgICByZXR1cm4ganNTdHJpbmco
dm0sIFN0cmluZyhidWZmZXIuZGF0YSgpLCBsZW5ndGgpKTsKIH0KIAogQVNDSUlMaXRlcmFsIElu
dGxOdW1iZXJGb3JtYXQ6OnN0eWxlU3RyaW5nKFN0eWxlIHN0eWxlKQpAQCAtNDE1LDIyICs0MTUs
MjIgQEAgSlNPYmplY3QqIEludGxOdW1iZXJGb3JtYXQ6OnJlc29sdmVkT3B0aQogICAgIH0KIAog
ICAgIEpTT2JqZWN0KiBvcHRpb25zID0gY29uc3RydWN0RW1wdHlPYmplY3QoJnN0YXRlKTsKLSAg
ICBvcHRpb25zLT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxvY2FsZSwganNTdHJp
bmcoJnN0YXRlLCBtX2xvY2FsZSkpOwotICAgIG9wdGlvbnMtPnB1dERpcmVjdCh2bSwgSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZygmdm0sICJudW1iZXJpbmdTeXN0ZW0iKSwganNTdHJpbmcoJnN0YXRl
LCBtX251bWJlcmluZ1N5c3RlbSkpOwotICAgIG9wdGlvbnMtPnB1dERpcmVjdCh2bSwgSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZygmdm0sICJzdHlsZSIpLCBqc05vbnRyaXZpYWxTdHJpbmcoJnN0YXRl
LCBzdHlsZVN0cmluZyhtX3N0eWxlKSkpOworICAgIG9wdGlvbnMtPnB1dERpcmVjdCh2bSwgdm0u
cHJvcGVydHlOYW1lcy0+bG9jYWxlLCBqc1N0cmluZyh2bSwgbV9sb2NhbGUpKTsKKyAgICBvcHRp
b25zLT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJudW1iZXJpbmdT
eXN0ZW0iKSwganNTdHJpbmcodm0sIG1fbnVtYmVyaW5nU3lzdGVtKSk7CisgICAgb3B0aW9ucy0+
cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAic3R5bGUiKSwganNOb250
cml2aWFsU3RyaW5nKHZtLCBzdHlsZVN0cmluZyhtX3N0eWxlKSkpOwogICAgIGlmIChtX3N0eWxl
ID09IFN0eWxlOjpDdXJyZW5jeSkgewotICAgICAgICBvcHRpb25zLT5wdXREaXJlY3Qodm0sIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiY3VycmVuY3kiKSwganNOb250cml2aWFsU3RyaW5n
KCZzdGF0ZSwgbV9jdXJyZW5jeSkpOwotICAgICAgICBvcHRpb25zLT5wdXREaXJlY3Qodm0sIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiY3VycmVuY3lEaXNwbGF5IiksIGpzTm9udHJpdmlh
bFN0cmluZygmc3RhdGUsIGN1cnJlbmN5RGlzcGxheVN0cmluZyhtX2N1cnJlbmN5RGlzcGxheSkp
KTsKKyAgICAgICAgb3B0aW9ucy0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KHZtLCAiY3VycmVuY3kiKSwganNOb250cml2aWFsU3RyaW5nKHZtLCBtX2N1cnJlbmN5KSk7Cisg
ICAgICAgIG9wdGlvbnMtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwg
ImN1cnJlbmN5RGlzcGxheSIpLCBqc05vbnRyaXZpYWxTdHJpbmcodm0sIGN1cnJlbmN5RGlzcGxh
eVN0cmluZyhtX2N1cnJlbmN5RGlzcGxheSkpKTsKICAgICB9Ci0gICAgb3B0aW9ucy0+cHV0RGly
ZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgIm1pbmltdW1JbnRlZ2VyRGlnaXRz
IiksIGpzTnVtYmVyKG1fbWluaW11bUludGVnZXJEaWdpdHMpKTsKLSAgICBvcHRpb25zLT5wdXRE
aXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAibWluaW11bUZyYWN0aW9uRGln
aXRzIiksIGpzTnVtYmVyKG1fbWluaW11bUZyYWN0aW9uRGlnaXRzKSk7Ci0gICAgb3B0aW9ucy0+
cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgIm1heGltdW1GcmFjdGlv
bkRpZ2l0cyIpLCBqc051bWJlcihtX21heGltdW1GcmFjdGlvbkRpZ2l0cykpOworICAgIG9wdGlv
bnMtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIm1pbmltdW1JbnRl
Z2VyRGlnaXRzIiksIGpzTnVtYmVyKG1fbWluaW11bUludGVnZXJEaWdpdHMpKTsKKyAgICBvcHRp
b25zLT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJtaW5pbXVtRnJh
Y3Rpb25EaWdpdHMiKSwganNOdW1iZXIobV9taW5pbXVtRnJhY3Rpb25EaWdpdHMpKTsKKyAgICBv
cHRpb25zLT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJtYXhpbXVt
RnJhY3Rpb25EaWdpdHMiKSwganNOdW1iZXIobV9tYXhpbXVtRnJhY3Rpb25EaWdpdHMpKTsKICAg
ICBpZiAobV9taW5pbXVtU2lnbmlmaWNhbnREaWdpdHMpIHsKICAgICAgICAgQVNTRVJUKG1fbWF4
aW11bVNpZ25pZmljYW50RGlnaXRzKTsKLSAgICAgICAgb3B0aW9ucy0+cHV0RGlyZWN0KHZtLCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgIm1pbmltdW1TaWduaWZpY2FudERpZ2l0cyIpLCBq
c051bWJlcihtX21pbmltdW1TaWduaWZpY2FudERpZ2l0cykpOwotICAgICAgICBvcHRpb25zLT5w
dXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAibWF4aW11bVNpZ25pZmlj
YW50RGlnaXRzIiksIGpzTnVtYmVyKG1fbWF4aW11bVNpZ25pZmljYW50RGlnaXRzKSk7CisgICAg
ICAgIG9wdGlvbnMtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIm1p
bmltdW1TaWduaWZpY2FudERpZ2l0cyIpLCBqc051bWJlcihtX21pbmltdW1TaWduaWZpY2FudERp
Z2l0cykpOworICAgICAgICBvcHRpb25zLT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21T
dHJpbmcodm0sICJtYXhpbXVtU2lnbmlmaWNhbnREaWdpdHMiKSwganNOdW1iZXIobV9tYXhpbXVt
U2lnbmlmaWNhbnREaWdpdHMpKTsKICAgICB9Ci0gICAgb3B0aW9ucy0+cHV0RGlyZWN0KHZtLCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgInVzZUdyb3VwaW5nIiksIGpzQm9vbGVhbihtX3Vz
ZUdyb3VwaW5nKSk7CisgICAgb3B0aW9ucy0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKHZtLCAidXNlR3JvdXBpbmciKSwganNCb29sZWFuKG1fdXNlR3JvdXBpbmcpKTsKICAg
ICByZXR1cm4gb3B0aW9uczsKIH0KIApAQCAtNTM0LDggKzUzNCw4IEBAIEpTVmFsdWUgSW50bE51
bWJlckZvcm1hdDo6Zm9ybWF0VG9QYXJ0cygKICAgICB1bnNpZ25lZCBpbmRleCA9IDA7CiAKICAg
ICBhdXRvIHJlc3VsdFN0cmluZyA9IFN0cmluZyhyZXN1bHQuZGF0YSgpLCByZXN1bHRMZW5ndGgp
OwotICAgIGF1dG8gdHlwZVByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZt
LCAidHlwZSIpOwotICAgIGF1dG8gbGl0ZXJhbFN0cmluZyA9IGpzU3RyaW5nKCZleGVjLCAibGl0
ZXJhbCJfcyk7CisgICAgYXV0byB0eXBlUHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbVN0
cmluZyh2bSwgInR5cGUiKTsKKyAgICBhdXRvIGxpdGVyYWxTdHJpbmcgPSBqc1N0cmluZyh2bSwg
ImxpdGVyYWwiX3MpOwogCiAgICAgaW50MzJfdCBjdXJyZW50SW5kZXggPSAwOwogICAgIHdoaWxl
IChjdXJyZW50SW5kZXggPCByZXN1bHRMZW5ndGgpIHsKQEAgLTU0Myw4ICs1NDMsOCBAQCBKU1Zh
bHVlIEludGxOdW1iZXJGb3JtYXQ6OmZvcm1hdFRvUGFydHMoCiAgICAgICAgIGF1dG8gZmllbGRU
eXBlID0gZmllbGRzW2N1cnJlbnRJbmRleF0udHlwZTsKICAgICAgICAgd2hpbGUgKGN1cnJlbnRJ
bmRleCA8IHJlc3VsdExlbmd0aCAmJiBmaWVsZHNbY3VycmVudEluZGV4XS50eXBlID09IGZpZWxk
VHlwZSkKICAgICAgICAgICAgICsrY3VycmVudEluZGV4OwotICAgICAgICBhdXRvIHBhcnRUeXBl
ID0gZmllbGRUeXBlID09IGxpdGVyYWxGaWVsZFR5cGUgPyBsaXRlcmFsU3RyaW5nIDoganNTdHJp
bmcoJmV4ZWMsIHBhcnRUeXBlU3RyaW5nKFVOdW1iZXJGb3JtYXRGaWVsZHMoZmllbGRUeXBlKSwg
dmFsdWUpKTsKLSAgICAgICAgYXV0byBwYXJ0VmFsdWUgPSBqc1N1YnN0cmluZygmdm0sIHJlc3Vs
dFN0cmluZywgc3RhcnRJbmRleCwgY3VycmVudEluZGV4IC0gc3RhcnRJbmRleCk7CisgICAgICAg
IGF1dG8gcGFydFR5cGUgPSBmaWVsZFR5cGUgPT0gbGl0ZXJhbEZpZWxkVHlwZSA/IGxpdGVyYWxT
dHJpbmcgOiBqc1N0cmluZyh2bSwgcGFydFR5cGVTdHJpbmcoVU51bWJlckZvcm1hdEZpZWxkcyhm
aWVsZFR5cGUpLCB2YWx1ZSkpOworICAgICAgICBhdXRvIHBhcnRWYWx1ZSA9IGpzU3Vic3RyaW5n
KHZtLCByZXN1bHRTdHJpbmcsIHN0YXJ0SW5kZXgsIGN1cnJlbnRJbmRleCAtIHN0YXJ0SW5kZXgp
OwogICAgICAgICBKU09iamVjdCogcGFydCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KCZleGVjKTsK
ICAgICAgICAgcGFydC0+cHV0RGlyZWN0KHZtLCB0eXBlUHJvcGVydHlOYW1lLCBwYXJ0VHlwZSk7
CiAgICAgICAgIHBhcnQtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+dmFsdWUsIHBh
cnRWYWx1ZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVy
Rm9ybWF0UHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbnRsTnVtYmVyRm9ybWF0UHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjQ5MTI4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdFByb3RvdHlw
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChD
KSAyMDE1IEFuZHkgVmFuV2Fnb25lciAoYW5keUB2YW53YWdvbmVyLmZhbWlseSkKLSAqIENvcHly
aWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTg2LDcgKzg2LDcgQEAgdm9pZCBJbnRsTnVtYmVy
Rm9ybWF0UHJvdG90eXBlOjpmaW5pc2hDcgogICAgIFVOVVNFRF9QQVJBTShnbG9iYWxPYmplY3Qp
OwogI2VuZGlmCiAKLSAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVy
dHlOYW1lcy0+dG9TdHJpbmdUYWdTeW1ib2wsIGpzU3RyaW5nKCZ2bSwgIk9iamVjdCIpLCBQcm9w
ZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpOwor
ICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT50b1N0
cmluZ1RhZ1N5bWJvbCwganNTdHJpbmcodm0sICJPYmplY3QiKSwgUHJvcGVydHlBdHRyaWJ1dGU6
OkRvbnRFbnVtIHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KTsKIH0KIAogc3RhdGljIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSW50bE51bWJlckZvcm1hdEZ1bmNGb3JtYXROdW1i
ZXIoRXhlY1N0YXRlKiBzdGF0ZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0ludGxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0ludGxPYmplY3QuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbnRsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcg
QEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQW5keSBWYW5XYWdvbmVyIChhbmR5QHZhbndh
Z29uZXIuZmFtaWx5KQogICogQ29weXJpZ2h0IChDKSAyMDE1IFN1a29sc2FrIFNha3NodXdvbmcg
KHN1a29sc2FrQGdtYWlsLmNvbSkKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTgyMiw3ICs4MjIsNyBAQCBzdGF0aWMgSlNBcnJheSogbG9va3VwU3VwcG9ydGVkTG9jYWxlcyhF
CiAgICAgICAgIFN0cmluZyBub0V4dGVuc2lvbnNMb2NhbGUgPSByZW1vdmVVbmljb2RlTG9jYWxl
RXh0ZW5zaW9uKGxvY2FsZSk7CiAgICAgICAgIFN0cmluZyBhdmFpbGFibGVMb2NhbGUgPSBiZXN0
QXZhaWxhYmxlTG9jYWxlKGF2YWlsYWJsZUxvY2FsZXMsIG5vRXh0ZW5zaW9uc0xvY2FsZSk7CiAg
ICAgICAgIGlmICghYXZhaWxhYmxlTG9jYWxlLmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBzdWJz
ZXQtPnB1dERpcmVjdEluZGV4KCZzdGF0ZSwgaW5kZXgrKywganNTdHJpbmcoJnN0YXRlLCBsb2Nh
bGUpKTsKKyAgICAgICAgICAgIHN1YnNldC0+cHV0RGlyZWN0SW5kZXgoJnN0YXRlLCBpbmRleCsr
LCBqc1N0cmluZyh2bSwgbG9jYWxlKSk7CiAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCBudWxscHRyKTsKICAgICAgICAgfQogICAgIH0KQEAgLTg1OSw3ICs4NTksNyBAQCBK
U1ZhbHVlIHN1cHBvcnRlZExvY2FsZXMoRXhlY1N0YXRlJiBzdGF0CiAgICAgICAgIDogbG9va3Vw
U3VwcG9ydGVkTG9jYWxlcyhzdGF0ZSwgYXZhaWxhYmxlTG9jYWxlcywgcmVxdWVzdGVkTG9jYWxl
cyk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZSgpKTsKIAotICAgIFBy
b3BlcnR5TmFtZUFycmF5IGtleXMoJnZtLCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzLCBQcml2
YXRlU3ltYm9sTW9kZTo6RXhjbHVkZSk7CisgICAgUHJvcGVydHlOYW1lQXJyYXkga2V5cyh2bSwg
UHJvcGVydHlOYW1lTW9kZTo6U3RyaW5ncywgUHJpdmF0ZVN5bWJvbE1vZGU6OkV4Y2x1ZGUpOwog
ICAgIHN1cHBvcnRlZExvY2FsZXMtPmdldE93blByb3BlcnR5TmFtZXMoc3VwcG9ydGVkTG9jYWxl
cywgJnN0YXRlLCBrZXlzLCBFbnVtZXJhdGlvbk1vZGUoKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgSlNWYWx1ZSgpKTsKIApAQCAtOTM3LDcgKzkzNyw3IEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgaW50bE9iamVjdEYKICAgICB9CiAKICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIGxvY2FsZUFycmF5LT5wdXREaXJlY3RJ
bmRleChzdGF0ZSwgaSwganNTdHJpbmcoc3RhdGUsIGxvY2FsZUxpc3RbaV0pKTsKKyAgICAgICAg
bG9jYWxlQXJyYXktPnB1dERpcmVjdEluZGV4KHN0YXRlLCBpLCBqc1N0cmluZyh2bSwgbG9jYWxl
TGlzdFtpXSkpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNW
YWx1ZSgpKTsKICAgICB9CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShsb2NhbGVBcnJheSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUGx1cmFsUnVsZXMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxQbHVyYWxS
dWxlcy5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0ludGxQbHVyYWxSdWxlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNCwzNCArMTM0LDM0
IEBAIHZvaWQgSW50bFBsdXJhbFJ1bGVzOjppbml0aWFsaXplUGx1cmFsUnUKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAotICAgIFN0cmluZyB0eXBlU3RyaW5nID0gaW50bFN0cmluZ09wdGlvbihl
eGVjLCBvcHRpb25zLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgInR5cGUiKSwgeyAiY2Fy
ZGluYWwiLCAib3JkaW5hbCIgfSwgInR5cGUgbXVzdCBiZSBcImNhcmRpbmFsXCIgb3IgXCJvcmRp
bmFsXCIiLCAiY2FyZGluYWwiKTsKKyAgICBTdHJpbmcgdHlwZVN0cmluZyA9IGludGxTdHJpbmdP
cHRpb24oZXhlYywgb3B0aW9ucywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInR5cGUiKSwg
eyAiY2FyZGluYWwiLCAib3JkaW5hbCIgfSwgInR5cGUgbXVzdCBiZSBcImNhcmRpbmFsXCIgb3Ig
XCJvcmRpbmFsXCIiLCAiY2FyZGluYWwiKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCB2b2lkKCkpOwogICAgIG1fdHlwZSA9IHR5cGVTdHJpbmcgPT0gIm9yZGluYWwiID8gVVBMVVJB
TF9UWVBFX09SRElOQUwgOiBVUExVUkFMX1RZUEVfQ0FSRElOQUw7CiAKLSAgICB1bnNpZ25lZCBt
aW5pbXVtSW50ZWdlckRpZ2l0cyA9IGludGxOdW1iZXJPcHRpb24oZXhlYywgb3B0aW9ucywgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJtaW5pbXVtSW50ZWdlckRpZ2l0cyIpLCAxLCAyMSwg
MSk7CisgICAgdW5zaWduZWQgbWluaW11bUludGVnZXJEaWdpdHMgPSBpbnRsTnVtYmVyT3B0aW9u
KGV4ZWMsIG9wdGlvbnMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJtaW5pbXVtSW50ZWdl
ckRpZ2l0cyIpLCAxLCAyMSwgMSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9p
ZCgpKTsKICAgICBtX21pbmltdW1JbnRlZ2VyRGlnaXRzID0gbWluaW11bUludGVnZXJEaWdpdHM7
CiAKICAgICB1bnNpZ25lZCBtaW5pbXVtRnJhY3Rpb25EaWdpdHNEZWZhdWx0ID0gMDsKLSAgICB1
bnNpZ25lZCBtaW5pbXVtRnJhY3Rpb25EaWdpdHMgPSBpbnRsTnVtYmVyT3B0aW9uKGV4ZWMsIG9w
dGlvbnMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAibWluaW11bUZyYWN0aW9uRGlnaXRz
IiksIDAsIDIwLCBtaW5pbXVtRnJhY3Rpb25EaWdpdHNEZWZhdWx0KTsKKyAgICB1bnNpZ25lZCBt
aW5pbXVtRnJhY3Rpb25EaWdpdHMgPSBpbnRsTnVtYmVyT3B0aW9uKGV4ZWMsIG9wdGlvbnMsIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJtaW5pbXVtRnJhY3Rpb25EaWdpdHMiKSwgMCwgMjAs
IG1pbmltdW1GcmFjdGlvbkRpZ2l0c0RlZmF1bHQpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIHZvaWQoKSk7CiAgICAgbV9taW5pbXVtRnJhY3Rpb25EaWdpdHMgPSBtaW5pbXVtRnJh
Y3Rpb25EaWdpdHM7CiAKICAgICB1bnNpZ25lZCBtYXhpbXVtRnJhY3Rpb25EaWdpdHNEZWZhdWx0
ID0gc3RkOjptYXgobWluaW11bUZyYWN0aW9uRGlnaXRzLCAzdSk7Ci0gICAgdW5zaWduZWQgbWF4
aW11bUZyYWN0aW9uRGlnaXRzID0gaW50bE51bWJlck9wdGlvbihleGVjLCBvcHRpb25zLCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgIm1heGltdW1GcmFjdGlvbkRpZ2l0cyIpLCBtaW5pbXVt
RnJhY3Rpb25EaWdpdHMsIDIwLCBtYXhpbXVtRnJhY3Rpb25EaWdpdHNEZWZhdWx0KTsKKyAgICB1
bnNpZ25lZCBtYXhpbXVtRnJhY3Rpb25EaWdpdHMgPSBpbnRsTnVtYmVyT3B0aW9uKGV4ZWMsIG9w
dGlvbnMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJtYXhpbXVtRnJhY3Rpb25EaWdpdHMi
KSwgbWluaW11bUZyYWN0aW9uRGlnaXRzLCAyMCwgbWF4aW11bUZyYWN0aW9uRGlnaXRzRGVmYXVs
dCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKICAgICBtX21heGlt
dW1GcmFjdGlvbkRpZ2l0cyA9IG1heGltdW1GcmFjdGlvbkRpZ2l0czsKIAotICAgIEpTVmFsdWUg
bWluaW11bVNpZ25pZmljYW50RGlnaXRzVmFsdWUgPSBvcHRpb25zLT5nZXQoJmV4ZWMsIElkZW50
aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAibWluaW11bVNpZ25pZmljYW50RGlnaXRzIikpOworICAg
IEpTVmFsdWUgbWluaW11bVNpZ25pZmljYW50RGlnaXRzVmFsdWUgPSBvcHRpb25zLT5nZXQoJmV4
ZWMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJtaW5pbXVtU2lnbmlmaWNhbnREaWdpdHMi
KSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKIAotICAgIEpTVmFs
dWUgbWF4aW11bVNpZ25pZmljYW50RGlnaXRzVmFsdWUgPSBvcHRpb25zLT5nZXQoJmV4ZWMsIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAibWF4aW11bVNpZ25pZmljYW50RGlnaXRzIikpOwor
ICAgIEpTVmFsdWUgbWF4aW11bVNpZ25pZmljYW50RGlnaXRzVmFsdWUgPSBvcHRpb25zLT5nZXQo
JmV4ZWMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJtYXhpbXVtU2lnbmlmaWNhbnREaWdp
dHMiKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKIAogICAgIGlm
ICghbWluaW11bVNpZ25pZmljYW50RGlnaXRzVmFsdWUuaXNVbmRlZmluZWQoKSB8fCAhbWF4aW11
bVNpZ25pZmljYW50RGlnaXRzVmFsdWUuaXNVbmRlZmluZWQoKSkgewotICAgICAgICB1bnNpZ25l
ZCBtaW5pbXVtU2lnbmlmaWNhbnREaWdpdHMgPSBpbnRsTnVtYmVyT3B0aW9uKGV4ZWMsIG9wdGlv
bnMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAibWluaW11bVNpZ25pZmljYW50RGlnaXRz
IiksIDEsIDIxLCAxKTsKKyAgICAgICAgdW5zaWduZWQgbWluaW11bVNpZ25pZmljYW50RGlnaXRz
ID0gaW50bE51bWJlck9wdGlvbihleGVjLCBvcHRpb25zLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KHZtLCAibWluaW11bVNpZ25pZmljYW50RGlnaXRzIiksIDEsIDIxLCAxKTsKICAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKLSAgICAgICAgdW5zaWduZWQgbWF4aW11
bVNpZ25pZmljYW50RGlnaXRzID0gaW50bE51bWJlck9wdGlvbihleGVjLCBvcHRpb25zLCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgIm1heGltdW1TaWduaWZpY2FudERpZ2l0cyIpLCBtaW5p
bXVtU2lnbmlmaWNhbnREaWdpdHMsIDIxLCAyMSk7CisgICAgICAgIHVuc2lnbmVkIG1heGltdW1T
aWduaWZpY2FudERpZ2l0cyA9IGludGxOdW1iZXJPcHRpb24oZXhlYywgb3B0aW9ucywgSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZyh2bSwgIm1heGltdW1TaWduaWZpY2FudERpZ2l0cyIpLCBtaW5pbXVt
U2lnbmlmaWNhbnREaWdpdHMsIDIxLCAyMSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIHZvaWQoKSk7CiAgICAgICAgIG1fbWluaW11bVNpZ25pZmljYW50RGlnaXRzID0gbWlu
aW11bVNpZ25pZmljYW50RGlnaXRzOwogICAgICAgICBtX21heGltdW1TaWduaWZpY2FudERpZ2l0
cyA9IG1heGltdW1TaWduaWZpY2FudERpZ2l0czsKQEAgLTIwNywxNCArMjA3LDE0IEBAIEpTT2Jq
ZWN0KiBJbnRsUGx1cmFsUnVsZXM6OnJlc29sdmVkT3B0aW8KICAgICB9CiAKICAgICBKU09iamVj
dCogb3B0aW9ucyA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KCZleGVjKTsKLSAgICBvcHRpb25zLT5w
dXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxvY2FsZSwganNOb250cml2aWFsU3RyaW5n
KCZleGVjLCBtX2xvY2FsZSkpOwotICAgIG9wdGlvbnMtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZygmdm0sICJ0eXBlIiksIGpzTm9udHJpdmlhbFN0cmluZygmZXhlYywgbV90
eXBlID09IFVQTFVSQUxfVFlQRV9PUkRJTkFMID8gIm9yZGluYWwiX3MgOiAiY2FyZGluYWwiX3Mp
KTsKLSAgICBvcHRpb25zLT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZt
LCAibWluaW11bUludGVnZXJEaWdpdHMiKSwganNOdW1iZXIobV9taW5pbXVtSW50ZWdlckRpZ2l0
cykpOwotICAgIG9wdGlvbnMtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygm
dm0sICJtaW5pbXVtRnJhY3Rpb25EaWdpdHMiKSwganNOdW1iZXIobV9taW5pbXVtRnJhY3Rpb25E
aWdpdHMpKTsKLSAgICBvcHRpb25zLT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJp
bmcoJnZtLCAibWF4aW11bUZyYWN0aW9uRGlnaXRzIiksIGpzTnVtYmVyKG1fbWF4aW11bUZyYWN0
aW9uRGlnaXRzKSk7CisgICAgb3B0aW9ucy0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVz
LT5sb2NhbGUsIGpzTm9udHJpdmlhbFN0cmluZyh2bSwgbV9sb2NhbGUpKTsKKyAgICBvcHRpb25z
LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJ0eXBlIiksIGpzTm9u
dHJpdmlhbFN0cmluZyh2bSwgbV90eXBlID09IFVQTFVSQUxfVFlQRV9PUkRJTkFMID8gIm9yZGlu
YWwiX3MgOiAiY2FyZGluYWwiX3MpKTsKKyAgICBvcHRpb25zLT5wdXREaXJlY3Qodm0sIElkZW50
aWZpZXI6OmZyb21TdHJpbmcodm0sICJtaW5pbXVtSW50ZWdlckRpZ2l0cyIpLCBqc051bWJlciht
X21pbmltdW1JbnRlZ2VyRGlnaXRzKSk7CisgICAgb3B0aW9ucy0+cHV0RGlyZWN0KHZtLCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAibWluaW11bUZyYWN0aW9uRGlnaXRzIiksIGpzTnVtYmVy
KG1fbWluaW11bUZyYWN0aW9uRGlnaXRzKSk7CisgICAgb3B0aW9ucy0+cHV0RGlyZWN0KHZtLCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAibWF4aW11bUZyYWN0aW9uRGlnaXRzIiksIGpzTnVt
YmVyKG1fbWF4aW11bUZyYWN0aW9uRGlnaXRzKSk7CiAgICAgaWYgKG1fbWluaW11bVNpZ25pZmlj
YW50RGlnaXRzKSB7Ci0gICAgICAgIG9wdGlvbnMtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZygmdm0sICJtaW5pbXVtU2lnbmlmaWNhbnREaWdpdHMiKSwganNOdW1iZXIobV9t
aW5pbXVtU2lnbmlmaWNhbnREaWdpdHMudmFsdWUoKSkpOwotICAgICAgICBvcHRpb25zLT5wdXRE
aXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAibWF4aW11bVNpZ25pZmljYW50
RGlnaXRzIiksIGpzTnVtYmVyKG1fbWF4aW11bVNpZ25pZmljYW50RGlnaXRzLnZhbHVlKCkpKTsK
KyAgICAgICAgb3B0aW9ucy0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZt
LCAibWluaW11bVNpZ25pZmljYW50RGlnaXRzIiksIGpzTnVtYmVyKG1fbWluaW11bVNpZ25pZmlj
YW50RGlnaXRzLnZhbHVlKCkpKTsKKyAgICAgICAgb3B0aW9ucy0+cHV0RGlyZWN0KHZtLCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAibWF4aW11bVNpZ25pZmljYW50RGlnaXRzIiksIGpzTnVt
YmVyKG1fbWF4aW11bVNpZ25pZmljYW50RGlnaXRzLnZhbHVlKCkpKTsKICAgICB9CiAKICNpZiBI
QVZFKElDVV9QTFVSQUxSVUxFU19LRVlXT1JEUykKQEAgLTIzNCwxMCArMjM0LDEwIEBAIEpTT2Jq
ZWN0KiBJbnRsUGx1cmFsUnVsZXM6OnJlc29sdmVkT3B0aW8KICAgICB1bnNpZ25lZCBpbmRleCA9
IDA7CiAgICAgd2hpbGUgKGNvbnN0IGNoYXIqIHJlc3VsdCA9IHVlbnVtX25leHQoa2V5d29yZHMu
Z2V0KCksICZyZXN1bHRMZW5ndGgsICZzdGF0dXMpKSB7CiAgICAgICAgIEFTU0VSVChVX1NVQ0NF
U1Moc3RhdHVzKSk7Ci0gICAgICAgIGNhdGVnb3JpZXMtPnB1dERpcmVjdEluZGV4KCZleGVjLCBp
bmRleCsrLCBqc05vbnRyaXZpYWxTdHJpbmcoJmV4ZWMsIFN0cmluZyhyZXN1bHQsIHJlc3VsdExl
bmd0aCkpKTsKKyAgICAgICAgY2F0ZWdvcmllcy0+cHV0RGlyZWN0SW5kZXgoJmV4ZWMsIGluZGV4
KyssIGpzTm9udHJpdmlhbFN0cmluZyh2bSwgU3RyaW5nKHJlc3VsdCwgcmVzdWx0TGVuZ3RoKSkp
OwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgIH0KLSAgICBv
cHRpb25zLT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAicGx1cmFs
Q2F0ZWdvcmllcyIpLCBjYXRlZ29yaWVzKTsKKyAgICBvcHRpb25zLT5wdXREaXJlY3Qodm0sIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJwbHVyYWxDYXRlZ29yaWVzIiksIGNhdGVnb3JpZXMp
OwogI2VuZGlmCiAKICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIG9wdGlvbnMpOwpAQCAt
MjU0LDcgKzI1NCw3IEBAIEpTVmFsdWUgSW50bFBsdXJhbFJ1bGVzOjpzZWxlY3QoRXhlY1N0YXQK
ICAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKCZleGVjLCBzY29wZSwgIkludGwuUGx1cmFs
UnVsZXMucHJvdG90eXBlLnNlbGVjdCBjYWxsZWQgb24gdmFsdWUgdGhhdCdzIG5vdCBhbiBvYmpl
Y3QgaW5pdGlhbGl6ZWQgYXMgYSBQbHVyYWxSdWxlcyJfcyk7CiAKICAgICBpZiAoIXN0ZDo6aXNm
aW5pdGUodmFsdWUpKQotICAgICAgICByZXR1cm4ganNOb250cml2aWFsU3RyaW5nKCZleGVjLCAi
b3RoZXIiX3MpOworICAgICAgICByZXR1cm4ganNOb250cml2aWFsU3RyaW5nKHZtLCAib3RoZXIi
X3MpOwogCiAjaWYgSEFWRShJQ1VfUExVUkFMUlVMRVNfV0lUSF9GT1JNQVQpCiAgICAgVUVycm9y
Q29kZSBzdGF0dXMgPSBVX1pFUk9fRVJST1I7CkBAIC0yODYsNyArMjg2LDcgQEAgSlNWYWx1ZSBJ
bnRsUGx1cmFsUnVsZXM6OnNlbGVjdChFeGVjU3RhdAogICAgICAgICByZXR1cm4gdGhyb3dUeXBl
RXJyb3IoJmV4ZWMsIHNjb3BlLCAiZmFpbGVkIHRvIHNlbGVjdCBwbHVyYWwgdmFsdWUiX3MpOwog
I2VuZGlmCiAKLSAgICByZXR1cm4ganNTdHJpbmcoJmV4ZWMsIFN0cmluZyhyZXN1bHQuZGF0YSgp
LCBsZW5ndGgpKTsKKyAgICByZXR1cm4ganNTdHJpbmcodm0sIFN0cmluZyhyZXN1bHQuZGF0YSgp
LCBsZW5ndGgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbnRsUGx1cmFsUnVsZXNQcm90b3R5cGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxQbHVyYWxSdWxlc1Byb3RvdHlw
ZS5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0ludGxQbHVyYWxSdWxlc1Byb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2
IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE4IEFuZHkgVmFuV2Fnb25lciAoYW5keUB2YW53
YWdvbmVyLmZhbWlseSkKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTc0LDcgKzc1
LDcgQEAgdm9pZCBJbnRsUGx1cmFsUnVsZXNQcm90b3R5cGU6OmZpbmlzaENyZQogewogICAgIEJh
c2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKIAotICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9u
KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT50b1N0cmluZ1RhZ1N5bWJvbCwganNTdHJpbmcoJnZtLCAi
T2JqZWN0IiksIFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8IFByb3BlcnR5QXR0cmlidXRl
OjpSZWFkT25seSk7CisgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3Bl
cnR5TmFtZXMtPnRvU3RyaW5nVGFnU3ltYm9sLCBqc1N0cmluZyh2bSwgIk9iamVjdCIpLCBQcm9w
ZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpOwog
fQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEludGxQbHVyYWxSdWxlc1Byb3RvdHlw
ZUZ1bmNTZWxlY3QoRXhlY1N0YXRlKiBzdGF0ZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0FycmF5LmgJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8q
CiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9y
ZykKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtMjg5LDcgKzI4OSw3IEBAIEpTQXJy
YXkqIGFzQXJyYXkoSlNWYWx1ZSk7CiAKIGlubGluZSBKU0FycmF5KiBhc0FycmF5KEpTQ2VsbCog
Y2VsbCkKIHsKLSAgICBBU1NFUlQoY2VsbC0+aW5oZXJpdHM8SlNBcnJheT4oKmNlbGwtPnZtKCkp
KTsKKyAgICBBU1NFUlQoY2VsbC0+aW5oZXJpdHM8SlNBcnJheT4oY2VsbC0+dm0oKSkpOwogICAg
IHJldHVybiBqc0Nhc3Q8SlNBcnJheSo+KGNlbGwpOwogfQogCkBAIC0zMDAsNyArMzAwLDcgQEAg
aW5saW5lIEpTQXJyYXkqIGFzQXJyYXkoSlNWYWx1ZSB2YWx1ZSkKIAogaW5saW5lIGJvb2wgaXNK
U0FycmF5KEpTQ2VsbCogY2VsbCkKIHsKLSAgICBBU1NFUlQoKGNlbGwtPmNsYXNzSW5mbygqY2Vs
bC0+dm0oKSkgPT0gSlNBcnJheTo6aW5mbygpKSA9PSAoY2VsbC0+dHlwZSgpID09IEFycmF5VHlw
ZSkpOworICAgIEFTU0VSVCgoY2VsbC0+Y2xhc3NJbmZvKGNlbGwtPnZtKCkpID09IEpTQXJyYXk6
OmluZm8oKSkgPT0gKGNlbGwtPnR5cGUoKSA9PSBBcnJheVR5cGUpKTsKICAgICByZXR1cm4gY2Vs
bC0+dHlwZSgpID09IEFycmF5VHlwZTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5jcHAJKHJldmlz
aW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZm
ZXJQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMywgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTExNiw3ICsxMTYsNyBAQCB2b2lk
IEpTQXJyYXlCdWZmZXJQcm90b3R5cGU6OmZpbmlzaENyZWF0CiAgICAgQmFzZTo6ZmluaXNoQ3Jl
YXRpb24odm0pOwogICAgIAogICAgIEpTQ19OQVRJVkVfRlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lU
SU9OKHZtLnByb3BlcnR5TmFtZXMtPnNsaWNlLCBhcnJheUJ1ZmZlclByb3RvRnVuY1NsaWNlLCBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSwgMik7Ci0g
ICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPnRvU3Ry
aW5nVGFnU3ltYm9sLCBqc1N0cmluZygmdm0sIGFycmF5QnVmZmVyU2hhcmluZ01vZGVOYW1lKG1f
c2hhcmluZ01vZGUpKSwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtIHwgUHJvcGVydHlBdHRy
aWJ1dGU6OlJlYWRPbmx5KTsKKyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0u
cHJvcGVydHlOYW1lcy0+dG9TdHJpbmdUYWdTeW1ib2wsIGpzU3RyaW5nKHZtLCBhcnJheUJ1ZmZl
clNoYXJpbmdNb2RlTmFtZShtX3NoYXJpbmdNb2RlKSksIFByb3BlcnR5QXR0cmlidXRlOjpEb250
RW51bSB8IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSk7CiAgICAgaWYgKG1fc2hhcmluZ01v
ZGUgPT0gQXJyYXlCdWZmZXJTaGFyaW5nTW9kZTo6RGVmYXVsdCkKICAgICAgICAgSlNDX05BVElW
RV9HRVRURVJfV0lUSE9VVF9UUkFOU0lUSU9OKHZtLnByb3BlcnR5TmFtZXMtPmJ5dGVMZW5ndGgs
IGFycmF5QnVmZmVyUHJvdG9HZXR0ZXJGdW5jQnl0ZUxlbmd0aCwgUHJvcGVydHlBdHRyaWJ1dGU6
OkRvbnRFbnVtIHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KTsKICAgICBlbHNlCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZp
ZXcuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0FycmF5QnVmZmVyVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1Niw3ICsyNTYsNyBA
QCBBcnJheUJ1ZmZlciogSlNBcnJheUJ1ZmZlclZpZXc6OnNsb3dEb3duCiAgICAgLy8gdXAuIEJ1
dCBpZiB5b3UgZG8gKmFueXRoaW5nKiB0byB0cmlnZ2VyIGEgR0Mgd2F0ZXJtYXJrIGNoZWNrLCBp
dCB3aWxsIGtub3cKICAgICAvLyB0aGF0IHlvdSAqaGFkKiBkb25lIHRob3NlIGFsbG9jYXRpb25z
IGFuZCBpdCB3aWxsIEdDIGFwcHJvcHJpYXRlbHkuCiAgICAgSGVhcCogaGVhcCA9IEhlYXA6Omhl
YXAodGhpcyk7Ci0gICAgVk0mIHZtID0gKmhlYXAtPnZtKCk7CisgICAgVk0mIHZtID0gaGVhcC0+
dm0oKTsKICAgICBEZWZlckdDRm9yQVdoaWxlIGRlZmVyR0MoKmhlYXApOwogCiAgICAgUkVMRUFT
RV9BU1NFUlQoIWhhc0luZGV4aW5nSGVhZGVyKHZtKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0NKU1ZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNyArMSw3IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAxIEhhcnJpIFBv
cnRlbiAocG9ydGVuQGtkZS5vcmcpCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxIFBldGVyIEtlbGx5
IChwbWtAcG9zdC5jb20pCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDE5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMTUsNyAr
MjE1LDcgQEAgYm9vbCBKU1ZhbHVlOjpwdXRUb1ByaW1pdGl2ZUJ5SW5kZXgoRXhlYwogCiAgICAg
aWYgKHByb3BlcnR5TmFtZSA+IE1BWF9BUlJBWV9JTkRFWCkgewogICAgICAgICBQdXRQcm9wZXJ0
eVNsb3Qgc2xvdCgqdGhpcywgc2hvdWxkVGhyb3cpOwotICAgICAgICByZXR1cm4gcHV0VG9Qcmlt
aXRpdmUoZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBwcm9wZXJ0eU5hbWUpLCB2YWx1ZSwg
c2xvdCk7CisgICAgICAgIHJldHVybiBwdXRUb1ByaW1pdGl2ZShleGVjLCBJZGVudGlmaWVyOjpm
cm9tKHZtLCBwcm9wZXJ0eU5hbWUpLCB2YWx1ZSwgc2xvdCk7CiAgICAgfQogICAgIAogICAgIEpT
T2JqZWN0KiBwcm90b3R5cGUgPSBzeW50aGVzaXplUHJvdG90eXBlKGV4ZWMpOwpAQCAtMzE1LDcg
KzMxNSw3IEBAIHZvaWQgSlNWYWx1ZTo6ZHVtcEZvckJhY2t0cmFjZShQcmludFN0cmUKICAgICBl
bHNlIGlmIChpc0RvdWJsZSgpKQogICAgICAgICBvdXQucHJpbnRmKCIlbGYiLCBhc0RvdWJsZSgp
KTsKICAgICBlbHNlIGlmIChpc0NlbGwoKSkgewotICAgICAgICBWTSYgdm0gPSAqYXNDZWxsKCkt
PnZtKCk7CisgICAgICAgIFZNJiB2bSA9IGFzQ2VsbCgpLT52bSgpOwogICAgICAgICBpZiAoYXND
ZWxsKCktPmluaGVyaXRzPEpTU3RyaW5nPih2bSkpIHsKICAgICAgICAgICAgIEpTU3RyaW5nKiBz
dHJpbmcgPSBhc1N0cmluZyhhc0NlbGwoKSk7CiAgICAgICAgICAgICBjb25zdCBTdHJpbmdJbXBs
KiBpbXBsID0gc3RyaW5nLT50cnlHZXRWYWx1ZUltcGwoKTsKQEAgLTM2MCw3ICszNjAsNyBAQCBK
U1N0cmluZyogSlNWYWx1ZTo6dG9TdHJpbmdTbG93Q2FzZShFeGVjCiAKICAgICBhdXRvIGVycm9y
VmFsdWUgPSBbJl0gKCkgLT4gSlNTdHJpbmcqIHsKICAgICAgICAgaWYgKHJldHVybkVtcHR5U3Ry
aW5nT25FcnJvcikKLSAgICAgICAgICAgIHJldHVybiBqc0VtcHR5U3RyaW5nKGV4ZWMpOworICAg
ICAgICAgICAgcmV0dXJuIGpzRW1wdHlTdHJpbmcodm0pOwogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKICAgICB9OwogICAgIApAQCAtMzY5LDEwICszNjksMTAgQEAgSlNTdHJpbmcqIEpTVmFsdWU6
OnRvU3RyaW5nU2xvd0Nhc2UoRXhlYwogICAgICAgICBhdXRvIGludGVnZXIgPSBhc0ludDMyKCk7
CiAgICAgICAgIGlmIChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW50ZWdlcikgPD0gOSkKICAgICAg
ICAgICAgIHJldHVybiB2bS5zbWFsbFN0cmluZ3Muc2luZ2xlQ2hhcmFjdGVyU3RyaW5nKGludGVn
ZXIgKyAnMCcpOwotICAgICAgICByZXR1cm4ganNOb250cml2aWFsU3RyaW5nKCZ2bSwgdm0ubnVt
ZXJpY1N0cmluZ3MuYWRkKGludGVnZXIpKTsKKyAgICAgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0
cmluZyh2bSwgdm0ubnVtZXJpY1N0cmluZ3MuYWRkKGludGVnZXIpKTsKICAgICB9CiAgICAgaWYg
KGlzRG91YmxlKCkpCi0gICAgICAgIHJldHVybiBqc1N0cmluZygmdm0sIHZtLm51bWVyaWNTdHJp
bmdzLmFkZChhc0RvdWJsZSgpKSk7CisgICAgICAgIHJldHVybiBqc1N0cmluZyh2bSwgdm0ubnVt
ZXJpY1N0cmluZ3MuYWRkKGFzRG91YmxlKCkpKTsKICAgICBpZiAoaXNUcnVlKCkpCiAgICAgICAg
IHJldHVybiB2bS5zbWFsbFN0cmluZ3MudHJ1ZVN0cmluZygpOwogICAgIGlmIChpc0ZhbHNlKCkp
CkBAIC0zODksNyArMzg5LDcgQEAgSlNTdHJpbmcqIEpTVmFsdWU6OnRvU3RyaW5nU2xvd0Nhc2Uo
RXhlYwogICAgICAgICBKU0JpZ0ludCogYmlnSW50ID0gYXNCaWdJbnQoKnRoaXMpOwogICAgICAg
ICBpZiAoYXV0byBkaWdpdCA9IGJpZ0ludC0+c2luZ2xlRGlnaXRWYWx1ZUZvclN0cmluZygpKQog
ICAgICAgICAgICAgcmV0dXJuIHZtLnNtYWxsU3RyaW5ncy5zaW5nbGVDaGFyYWN0ZXJTdHJpbmco
KmRpZ2l0ICsgJzAnKTsKLSAgICAgICAgSlNTdHJpbmcqIHJldHVyblN0cmluZyA9IGpzTm9udHJp
dmlhbFN0cmluZygmdm0sIGJpZ0ludC0+dG9TdHJpbmcoZXhlYywgMTApKTsKKyAgICAgICAgSlNT
dHJpbmcqIHJldHVyblN0cmluZyA9IGpzTm9udHJpdmlhbFN0cmluZyh2bSwgYmlnSW50LT50b1N0
cmluZyhleGVjLCAxMCkpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlcnJv
clZhbHVlKCkpOwogICAgICAgICByZXR1cm4gcmV0dXJuU3RyaW5nOwogICAgIH0KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWVJbmxpbmVzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZUlubGluZXMuaAko
cmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNW
YWx1ZUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTEtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY4Niw3ICs2ODYsOSBAQCBBTFdBWVNf
SU5MSU5FIElkZW50aWZpZXIgSlNWYWx1ZTo6dG9Qcm9wCiAgICAgaWYgKHByaW1pdGl2ZS5pc1N5
bWJvbCgpKQogICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIElkZW50aWZpZXI6OmZy
b21VaWQoYXNTeW1ib2wocHJpbWl0aXZlKS0+cHJpdmF0ZU5hbWUoKSkpOwogCi0gICAgUkVMRUFT
RV9BTkRfUkVUVVJOKHNjb3BlLCBwcmltaXRpdmUudG9TdHJpbmcoZXhlYyktPnRvSWRlbnRpZmll
cihleGVjKSk7CisgICAgYXV0byBzdHJpbmcgPSBwcmltaXRpdmUudG9TdHJpbmcoZXhlYyk7Cisg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAgICBSRUxFQVNFX0FORF9SRVRV
Uk4oc2NvcGUsIHN0cmluZy0+dG9JZGVudGlmaWVyKGV4ZWMpKTsKIH0KIAogaW5saW5lIEpTVmFs
dWUgSlNWYWx1ZTo6dG9QcmltaXRpdmUoRXhlY1N0YXRlKiBleGVjLCBQcmVmZXJyZWRQcmltaXRp
dmVUeXBlIHByZWZlcnJlZFR5cGUpIGNvbnN0CkBAIC05NjUsNyArOTY3LDcgQEAgQUxXQVlTX0lO
TElORSBKU1ZhbHVlIEpTVmFsdWU6OmdldChFeGVjUwogewogICAgIGlmIChMSUtFTFkocHJvcGVy
dHlOYW1lIDw9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSkpCiAgICAgICAg
IHJldHVybiBnZXQoZXhlYywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHByb3BlcnR5TmFtZSkpOwot
ICAgIHJldHVybiBnZXQoZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBzdGF0aWNfY2FzdDxk
b3VibGU+KHByb3BlcnR5TmFtZSkpKTsKKyAgICByZXR1cm4gZ2V0KGV4ZWMsIElkZW50aWZpZXI6
OmZyb20oZXhlYy0+dm0oKSwgc3RhdGljX2Nhc3Q8ZG91YmxlPihwcm9wZXJ0eU5hbWUpKSk7CiB9
CiAKIGlubGluZSBib29sIEpTVmFsdWU6OnB1dChFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFt
ZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2FzdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2FzdC5oCShyZXZpc2lvbiAyNDkxMjgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Nhc3QuaAkod29ya2luZyBjb3B5
KQpAQCAtMzMsNyArMzMsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUbywgdHlwZW5hbWUgRnJvbT4K
IGlubGluZSBUbyBqc0Nhc3QoRnJvbSogZnJvbSkKIHsKICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6
aXNfYmFzZV9vZjxKU0NlbGwsIHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX3BvaW50ZXI8VG8+Ojp0eXBl
Pjo6dmFsdWUgJiYgc3RkOjppc19iYXNlX29mPEpTQ2VsbCwgdHlwZW5hbWUgc3RkOjpyZW1vdmVf
cG9pbnRlcjxGcm9tPjo6dHlwZT46OnZhbHVlLCAiSlMgY2FzdGluZyBleHBlY3RzIHRoYXQgdGhl
IHR5cGVzIHlvdSBhcmUgY2FzdGluZyB0by9mcm9tIGFyZSBzdWJjbGFzc2VzIG9mIEpTQ2VsbCIp
OwotICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKCFmcm9tIHx8IGZyb20tPkpT
Q2VsbDo6aW5oZXJpdHMoKmZyb20tPkpTQ2VsbDo6dm0oKSwgc3RkOjpyZW1vdmVfcG9pbnRlcjxU
bz46OnR5cGU6OmluZm8oKSkpOworICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9O
KCFmcm9tIHx8IGZyb20tPkpTQ2VsbDo6aW5oZXJpdHMoZnJvbS0+SlNDZWxsOjp2bSgpLCBzdGQ6
OnJlbW92ZV9wb2ludGVyPFRvPjo6dHlwZTo6aW5mbygpKSk7CiAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PFRvPihmcm9tKTsKIH0KIApAQCAtNDEsNyArNDEsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBU
bz4KIGlubGluZSBUbyBqc0Nhc3QoSlNWYWx1ZSBmcm9tKQogewogICAgIHN0YXRpY19hc3NlcnQo
c3RkOjppc19iYXNlX29mPEpTQ2VsbCwgdHlwZW5hbWUgc3RkOjpyZW1vdmVfcG9pbnRlcjxUbz46
OnR5cGU+Ojp2YWx1ZSwgIkpTIGNhc3RpbmcgZXhwZWN0cyB0aGF0IHRoZSB0eXBlcyB5b3UgYXJl
IGNhc3RpbmcgdG8gaXMgYSBzdWJjbGFzcyBvZiBKU0NlbGwiKTsKLSAgICBBU1NFUlRfV0lUSF9T
RUNVUklUWV9JTVBMSUNBVElPTihmcm9tLmlzQ2VsbCgpICYmIGZyb20uYXNDZWxsKCktPkpTQ2Vs
bDo6aW5oZXJpdHMoKmZyb20uYXNDZWxsKCktPnZtKCksIHN0ZDo6cmVtb3ZlX3BvaW50ZXI8VG8+
Ojp0eXBlOjppbmZvKCkpKTsKKyAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihm
cm9tLmlzQ2VsbCgpICYmIGZyb20uYXNDZWxsKCktPkpTQ2VsbDo6aW5oZXJpdHMoZnJvbS5hc0Nl
bGwoKS0+dm0oKSwgc3RkOjpyZW1vdmVfcG9pbnRlcjxUbz46OnR5cGU6OmluZm8oKSkpOwogICAg
IHJldHVybiBzdGF0aWNfY2FzdDxUbz4oZnJvbS5hc0NlbGwoKSk7CiB9CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEgSGFycmkgUG9y
dGVuIChwb3J0ZW5Aa2RlLm9yZykKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkg
KHBta0Bwb3N0LmNvbSkKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxOCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTQ2LDEyICs0
NiwxMiBAQCB2b2lkIEpTQ2VsbDo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCiAKIHZvaWQgSlNDZWxs
OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7Ci0gICAgbWV0aG9kVGFibGUoKnZtKCkp
LT5kdW1wVG9TdHJlYW0odGhpcywgb3V0KTsKKyAgICBtZXRob2RUYWJsZSh2bSgpKS0+ZHVtcFRv
U3RyZWFtKHRoaXMsIG91dCk7CiB9CiAKIHZvaWQgSlNDZWxsOjpkdW1wVG9TdHJlYW0oY29uc3Qg
SlNDZWxsKiBjZWxsLCBQcmludFN0cmVhbSYgb3V0KQogewotICAgIG91dC5wcmludGYoIjwlcCwg
JXM+IiwgY2VsbCwgY2VsbC0+Y2xhc3NOYW1lKCpjZWxsLT52bSgpKSk7CisgICAgb3V0LnByaW50
ZigiPCVwLCAlcz4iLCBjZWxsLCBjZWxsLT5jbGFzc05hbWUoY2VsbC0+dm0oKSkpOwogfQogCiBz
aXplX3QgSlNDZWxsOjplc3RpbWF0ZWRTaXplSW5CeXRlcyhWTSYgdm0pIGNvbnN0CkBAIC0xMTgs
MTIgKzExOCwxMyBAQCBib29sIEpTQ2VsbDo6cHV0KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlCiAK
IGJvb2wgSlNDZWxsOjpwdXRCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1
bnNpZ25lZCBpZGVudGlmaWVyLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93KQogewor
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgaWYgKGNlbGwtPmlzU3RyaW5nKCkgfHwgY2Vs
bC0+aXNTeW1ib2woKSB8fCBjZWxsLT5pc0JpZ0ludCgpKSB7CiAgICAgICAgIFB1dFByb3BlcnR5
U2xvdCBzbG90KGNlbGwsIHNob3VsZFRocm93KTsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWUoY2Vs
bCkucHV0VG9QcmltaXRpdmUoZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpZGVudGlmaWVy
KSwgdmFsdWUsIHNsb3QpOworICAgICAgICByZXR1cm4gSlNWYWx1ZShjZWxsKS5wdXRUb1ByaW1p
dGl2ZShleGVjLCBJZGVudGlmaWVyOjpmcm9tKHZtLCBpZGVudGlmaWVyKSwgdmFsdWUsIHNsb3Qp
OwogICAgIH0KICAgICBKU09iamVjdCogdGhpc09iamVjdCA9IGNlbGwtPnRvT2JqZWN0KGV4ZWMs
IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSk7Ci0gICAgcmV0dXJuIHRoaXNPYmplY3QtPm1l
dGhvZFRhYmxlKGV4ZWMtPnZtKCkpLT5wdXRCeUluZGV4KHRoaXNPYmplY3QsIGV4ZWMsIGlkZW50
aWZpZXIsIHZhbHVlLCBzaG91bGRUaHJvdyk7CisgICAgcmV0dXJuIHRoaXNPYmplY3QtPm1ldGhv
ZFRhYmxlKHZtKS0+cHV0QnlJbmRleCh0aGlzT2JqZWN0LCBleGVjLCBpZGVudGlmaWVyLCB2YWx1
ZSwgc2hvdWxkVGhyb3cpOwogfQogCiBib29sIEpTQ2VsbDo6ZGVsZXRlUHJvcGVydHkoSlNDZWxs
KiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBpZGVudGlmaWVyKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsSW5saW5lcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbElubGluZXMuaAkocmV2aXNp
b24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsSW5saW5l
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjEsNyArMTIxLDcgQEAgaW5saW5lIEluZGV4aW5nVHlw
ZSBKU0NlbGw6OmluZGV4aW5nTW9kZQogCiBBTFdBWVNfSU5MSU5FIFN0cnVjdHVyZSogSlNDZWxs
OjpzdHJ1Y3R1cmUoKSBjb25zdAogewotICAgIHJldHVybiBzdHJ1Y3R1cmUoKnZtKCkpOworICAg
IHJldHVybiBzdHJ1Y3R1cmUodm0oKSk7CiB9CiAKIEFMV0FZU19JTkxJTkUgU3RydWN0dXJlKiBK
U0NlbGw6OnN0cnVjdHVyZShWTSYgdm0pIGNvbnN0CkBAIC0xNDIsMTAgKzE0MiwxMCBAQCBBTFdB
WVNfSU5MSU5FIFZNJiBFeGVjU3RhdGU6OnZtKCkgY29uc3QKIHsKICAgICBKU0NlbGwqIGNhbGxl
ZSA9IHRoaXMtPmNhbGxlZSgpLmFzQ2VsbCgpOwogICAgIEFTU0VSVChjYWxsZWUpOwotICAgIEFT
U0VSVChjYWxsZWUtPnZtKCkpOworICAgIEFTU0VSVCgmY2FsbGVlLT52bSgpKTsKICAgICBBU1NF
UlQoIWNhbGxlZS0+aXNMYXJnZUFsbG9jYXRpb24oKSk7CiAgICAgLy8gVGhpcyBpcyBhbiBpbXBv
cnRhbnQgb3B0aW1pemF0aW9uIHNpbmNlIHdlIGFjY2VzcyB0aGlzIHNvIG9mdGVuLgotICAgIHJl
dHVybiAqY2FsbGVlLT5tYXJrZWRCbG9jaygpLnZtKCk7CisgICAgcmV0dXJuIGNhbGxlZS0+bWFy
a2VkQmxvY2soKS52bSgpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3Bh
Y2VBY2Nlc3M+CkBAIC0xNjcsNyArMTY3LDcgQEAgaW5saW5lIEFsbG9jYXRvciBhbGxvY2F0b3JG
b3JOb25WaXJ0dWFsQwogdGVtcGxhdGU8dHlwZW5hbWUgVD4KIEFMV0FZU19JTkxJTkUgdm9pZCog
dHJ5QWxsb2NhdGVDZWxsSGVscGVyKEhlYXAmIGhlYXAsIHNpemVfdCBzaXplLCBHQ0RlZmVycmFs
Q29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUgZmFpbHVyZU1v
ZGUpCiB7Ci0gICAgVk0mIHZtID0gKmhlYXAudm0oKTsKKyAgICBWTSYgdm0gPSBoZWFwLnZtKCk7
CiAgICAgQVNTRVJUKGRlZmVycmFsQ29udGV4dCB8fCAhRGlzYWxsb3dHQzo6aXNJbkVmZmVjdE9u
Q3VycmVudFRocmVhZCgpKTsKICAgICBBU1NFUlQoc2l6ZSA+PSBzaXplb2YoVCkpOwogICAgIEpT
Q2VsbCogcmVzdWx0ID0gc3RhdGljX2Nhc3Q8SlNDZWxsKj4oc3Vic3BhY2VGb3I8VD4odm0pLT5h
bGxvY2F0ZU5vblZpcnR1YWwodm0sIHNpemUsIGRlZmVycmFsQ29udGV4dCwgZmFpbHVyZU1vZGUp
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGF0YVZpZXdQcm90b3R5
cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGF0
YVZpZXdQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0RhdGFWaWV3UHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0xMDksNyArMTA5LDcgQEAgSlNEYXRhVmlld1Byb3RvdHlwZSogSlNEYXRhVmlld1Byb3RvdHlw
ZQogdm9pZCBKU0RhdGFWaWV3UHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbihKU0M6OlZNJiB2bSkK
IHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7Ci0gICAgcHV0RGlyZWN0V2l0aG91dFRy
YW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPnRvU3RyaW5nVGFnU3ltYm9sLCBqc1N0cmlu
Zygmdm0sICJEYXRhVmlldyIpLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBQcm9wZXJ0
eUF0dHJpYnV0ZTo6UmVhZE9ubHkpOworICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZt
LCB2bS5wcm9wZXJ0eU5hbWVzLT50b1N0cmluZ1RhZ1N5bWJvbCwganNTdHJpbmcodm0sICJEYXRh
VmlldyIpLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6
UmVhZE9ubHkpOwogfQogCiBTdHJ1Y3R1cmUqIEpTRGF0YVZpZXdQcm90b3R5cGU6OmNyZWF0ZVN0
cnVjdHVyZSgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRml4ZWRBcnJh
eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGaXhl
ZEFycmF5LmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNGaXhlZEFycmF5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01NCw3ICs1NCw3IEBAIHZvaWQg
SlNGaXhlZEFycmF5Ojpjb3B5VG9Bcmd1bWVudHMoRXhlY1MKIAogdm9pZCBKU0ZpeGVkQXJyYXk6
OmR1bXBUb1N0cmVhbShjb25zdCBKU0NlbGwqIGNlbGwsIFByaW50U3RyZWFtJiBvdXQpCiB7Ci0g
ICAgVk0mIHZtID0gKmNlbGwtPnZtKCk7CisgICAgVk0mIHZtID0gY2VsbC0+dm0oKTsKICAgICBj
b25zdCBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PGNvbnN0IEpTRml4ZWRBcnJheSo+KGNlbGwp
OwogICAgIG91dC5wcmludGYoIjwlcCwgJXMsIFsldV0sIFsiLCB0aGlzT2JqZWN0LCB0aGlzT2Jq
ZWN0LT5jbGFzc05hbWUodm0pLCB0aGlzT2JqZWN0LT5sZW5ndGgoKSk7CiAgICAgQ29tbWFQcmlu
dGVyIGNvbW1hOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlv
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5j
dGlvbi5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTRnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAq
ICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMiBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQog
ICogIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICogIENv
cHlyaWdodCAoQykgMjAwMy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
ICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3IENhbWVyb24gWndhcmljaCAoY3d6d2FyaWNoQHV3YXRl
cmxvby5jYSkKICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgTWFrcyBPcmxvdmljaAogICogIENvcHly
aWdodCAoQykgMjAxNSBDYW5vbiBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCkBAIC0xMzksNyAr
MTM5LDcgQEAgdm9pZCBKU0Z1bmN0aW9uOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIAogICAgIG1f
ZXhlY3V0YWJsZS5zZXQodm0sIHRoaXMsIGV4ZWN1dGFibGUpOwogICAgIC8vIFNvbWUgTmF0aXZl
RXhlY3V0YWJsZSBmdW5jdGlvbnMsIGxpa2UgSlNCb3VuZEZ1bmN0aW9uLCBkZWNpZGUgdG8gbGF6
aWx5IGFsbG9jYXRlIHRoZWlyIG5hbWUgc3RyaW5nLgogICAgIGlmICghbmFtZS5pc051bGwoKSkK
LSAgICAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc1N0cmluZygm
dm0sIG5hbWUpLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBQcm9wZXJ0eUF0dHJpYnV0
ZTo6RG9udEVudW0pOworICAgICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm5h
bWUsIGpzU3RyaW5nKHZtLCBuYW1lKSwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgUHJv
cGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5
TmFtZXMtPmxlbmd0aCwganNOdW1iZXIobGVuZ3RoKSwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRP
bmx5IHwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKIH0KIApAQCAtMzM0LDcgKzMzNCw3
IEBAIHB1YmxpYzoKIAogICAgICAgICBKU0NlbGwqIGNhbGxlZSA9IHZpc2l0b3ItPmNhbGxlZSgp
LmFzQ2VsbCgpOwogCi0gICAgICAgIGlmIChjYWxsZWUgJiYgY2FsbGVlLT5pbmhlcml0czxKU0Jv
dW5kRnVuY3Rpb24+KCpjYWxsZWUtPnZtKCkpKQorICAgICAgICBpZiAoY2FsbGVlICYmIGNhbGxl
ZS0+aW5oZXJpdHM8SlNCb3VuZEZ1bmN0aW9uPihjYWxsZWUtPnZtKCkpKQogICAgICAgICAgICAg
cmV0dXJuIFN0YWNrVmlzaXRvcjo6Q29udGludWU7CiAKICAgICAgICAgaWYgKCFtX2hhc0ZvdW5k
RnJhbWUgJiYgKGNhbGxlZSAhPSBtX3RhcmdldENhbGxlZSkpCkBAIC03NTIsNyArNzUyLDcgQEAg
dm9pZCBKU0Z1bmN0aW9uOjpyZWlmeU5hbWUoVk0mIHZtLCBFeGVjUwogICAgICAgICBuYW1lID0g
bWFrZVN0cmluZygic2V0ICIsIG5hbWUpOwogCiAgICAgcmFyZURhdGEtPnNldEhhc1JlaWZpZWRO
YW1lKCk7Ci0gICAgcHV0RGlyZWN0KHZtLCBwcm9wSUQsIGpzU3RyaW5nKGV4ZWMsIG5hbWUpLCBp
bml0aWFsQXR0cmlidXRlcyk7CisgICAgcHV0RGlyZWN0KHZtLCBwcm9wSUQsIGpzU3RyaW5nKHZt
LCBuYW1lKSwgaW5pdGlhbEF0dHJpYnV0ZXMpOwogfQogCiBKU0Z1bmN0aW9uOjpQcm9wZXJ0eVN0
YXR1cyBKU0Z1bmN0aW9uOjpyZWlmeUxhenlQcm9wZXJ0eUlmTmVlZGVkKFZNJiB2bSwgRXhlY1N0
YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQpAQCAtODE5LDcgKzgxOSw3IEBA
IEpTRnVuY3Rpb246OlByb3BlcnR5U3RhdHVzIEpTRnVuY3Rpb246OnIKICAgICAgICAgU3RyaW5n
IG5hbWUgPSBtYWtlU3RyaW5nKCJib3VuZCAiLCBzdGF0aWNfY2FzdDxOYXRpdmVFeGVjdXRhYmxl
Kj4obV9leGVjdXRhYmxlLmdldCgpKS0+bmFtZSgpKTsKICAgICAgICAgdW5zaWduZWQgaW5pdGlh
bEF0dHJpYnV0ZXMgPSBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBQcm9wZXJ0eUF0dHJp
YnV0ZTo6UmVhZE9ubHk7CiAgICAgICAgIHJhcmVEYXRhLT5zZXRIYXNSZWlmaWVkTmFtZSgpOwot
ICAgICAgICBwdXREaXJlY3Qodm0sIG5hbWVJZGVudCwganNTdHJpbmcoZXhlYywgbmFtZSksIGlu
aXRpYWxBdHRyaWJ1dGVzKTsKKyAgICAgICAgcHV0RGlyZWN0KHZtLCBuYW1lSWRlbnQsIGpzU3Ry
aW5nKHZtLCBuYW1lKSwgaW5pdGlhbEF0dHJpYnV0ZXMpOwogICAgIH0KICAgICByZXR1cm4gUHJv
cGVydHlTdGF0dXM6OlJlaWZpZWQ7CiB9CkBAIC04MjgsNyArODI4LDcgQEAgSlNGdW5jdGlvbjo6
UHJvcGVydHlTdGF0dXMgSlNGdW5jdGlvbjo6cgogdm9pZCBKU0Z1bmN0aW9uOjphc3NlcnRUeXBl
SW5mb0ZsYWdJbnZhcmlhbnRzKCkKIHsKICAgICAvLyBJZiB5b3UgY2hhbmdlIHRoaXMsIHlvdSds
bCBuZWVkIHRvIHVwZGF0ZSBzcGVjdWxhdGlvbkZyb21DbGFzc0luZm8uCi0gICAgY29uc3QgQ2xh
c3NJbmZvKiBpbmZvID0gY2xhc3NJbmZvKCp2bSgpKTsKKyAgICBjb25zdCBDbGFzc0luZm8qIGlu
Zm8gPSBjbGFzc0luZm8odm0oKSk7CiAgICAgaWYgKCEoaW5saW5lVHlwZUZsYWdzKCkgJiBJbXBs
ZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNlKSkKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaW5mbyA9
PSBKU0JvdW5kRnVuY3Rpb246OmluZm8oKSk7CiAgICAgZWxzZQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXdJbmxpbmVzLmgJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oCSh3b3JraW5nIGNvcHkp
CkBAIC00ODIsMTggKzQ4MiwyMCBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgogYm9vbCBK
U0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6ZGVsZXRlUHJvcGVydHlCeUluZGV4KAog
ICAgIEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUp
CiB7Ci0gICAgcmV0dXJuIGNlbGwtPm1ldGhvZFRhYmxlKGV4ZWMtPnZtKCkpLT5kZWxldGVQcm9w
ZXJ0eShjZWxsLCBleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIHByb3BlcnR5TmFtZSkpOwor
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgcmV0dXJuIGNlbGwtPm1ldGhvZFRhYmxlKHZt
KS0+ZGVsZXRlUHJvcGVydHkoY2VsbCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbSh2bSwgcHJvcGVy
dHlOYW1lKSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+CiB2b2lkIEpTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKAogICAgIEpTT2Jq
ZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIGFycmF5LCBF
bnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIEpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3Kj4ob2JqZWN0KTsKIAogICAgIGlmIChhcnJheS5pbmNsdWRlU3RyaW5nUHJvcGVy
dGllcygpKSB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0aGlzT2JqZWN0LT5t
X2xlbmd0aDsgKytpKQotICAgICAgICAgICAgYXJyYXkuYWRkKElkZW50aWZpZXI6OmZyb20oZXhl
YywgaSkpOworICAgICAgICAgICAgYXJyYXkuYWRkKElkZW50aWZpZXI6OmZyb20odm0sIGkpKTsK
ICAgICB9CiAgICAgCiAgICAgcmV0dXJuIEJhc2U6OmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0
LCBleGVjLCBhcnJheSwgbW9kZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0dsb2JhbE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTc2Niw3ICs3NjYsNyBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0Ojppbml0KFZNJiB2bSkKICAg
ICBtX2FycmF5Q29uc3RydWN0b3Iuc2V0KHZtLCB0aGlzLCBhcnJheUNvbnN0cnVjdG9yKTsKICAg
ICAKICAgICBSZWdFeHBDb25zdHJ1Y3RvciogcmVnRXhwQ29uc3RydWN0b3IgPSBSZWdFeHBDb25z
dHJ1Y3Rvcjo6Y3JlYXRlKHZtLCBSZWdFeHBDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKHZt
LCB0aGlzLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSwgbV9yZWdFeHBQcm90b3R5cGUuZ2V0
KCksIG1fc3BlY2llc0dldHRlclNldHRlci5nZXQoKSk7Ci0gICAgbV9yZWdFeHBHbG9iYWxEYXRh
LmNhY2hlZFJlc3VsdCgpLnJlY29yZCh2bSwgdGhpcywgbnVsbHB0ciwganNFbXB0eVN0cmluZygm
dm0pLCBNYXRjaFJlc3VsdCgwLCAwKSk7CisgICAgbV9yZWdFeHBHbG9iYWxEYXRhLmNhY2hlZFJl
c3VsdCgpLnJlY29yZCh2bSwgdGhpcywgbnVsbHB0ciwganNFbXB0eVN0cmluZyh2bSksIE1hdGNo
UmVzdWx0KDAsIDApKTsKICAgICAKICNpZiBFTkFCTEUoU0hBUkVEX0FSUkFZX0JVRkZFUikKICAg
ICBKU1NoYXJlZEFycmF5QnVmZmVyQ29uc3RydWN0b3IqIHNoYXJlZEFycmF5QnVmZmVyQ29uc3Ry
dWN0b3IgPSBudWxscHRyOwpAQCAtODQ5LDcgKzg0OSw3IEBAIGNhcGl0YWxOYW1lICMjIENvbnN0
cnVjdG9yKiBsb3dlck5hbWUgIyMKIAogI2lmIEVOQUJMRShTSEFSRURfQVJSQVlfQlVGRkVSKQog
ICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5TaGFy
ZWRBcnJheUJ1ZmZlciwgc2hhcmVkQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvciwgc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOwotICAgIHB1dERpcmVjdFdp
dGhvdXRUcmFuc2l0aW9uKHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJBdG9taWNz
IiksIGF0b21pY3NPYmplY3QsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0
ZTo6RG9udEVudW0pKTsKKyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZyh2bSwgIkF0b21pY3MiKSwgYXRvbWljc09iamVjdCwgc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOwogI2VuZGlmCiAKICNk
ZWZpbmUgUFVUX0NPTlNUUlVDVE9SX0ZPUl9TSU1QTEVfVFlQRShjYXBpdGFsTmFtZSwgbG93ZXJO
YW1lLCBwcm9wZXJOYW1lLCBpbnN0YW5jZVR5cGUsIGpzTmFtZSwgcHJvdG90eXBlQmFzZSwgZmVh
dHVyZUZsYWcpIFwKQEAgLTExMDMsNyArMTEwMyw3IEBAIGNhcGl0YWxOYW1lICMjIENvbnN0cnVj
dG9yKiBsb3dlck5hbWUgIyMKICAgICAgICAgICAgICAgICBpbml0LnNldChXZWJBc3NlbWJseVRv
SlNDYWxsZWU6OmNyZWF0ZVN0cnVjdHVyZShpbml0LnZtLCBpbml0Lm93bmVyLCBqc051bGwoKSkp
OwogICAgICAgICAgICAgfSk7CiAgICAgICAgIGF1dG8qIHdlYkFzc2VtYmx5ID0gSlNXZWJBc3Nl
bWJseTo6Y3JlYXRlKHZtLCB0aGlzLCBKU1dlYkFzc2VtYmx5OjpjcmVhdGVTdHJ1Y3R1cmUodm0s
IHRoaXMsIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSk7Ci0gICAgICAgIHB1dERpcmVjdFdpdGhv
dXRUcmFuc2l0aW9uKHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJXZWJBc3NlbWJs
eSIpLCB3ZWJBc3NlbWJseSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRl
OjpEb250RW51bSkpOworICAgICAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIldlYkFzc2VtYmx5IiksIHdlYkFzc2VtYmx5LCBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7CiAKICNkZWZp
bmUgQ1JFQVRFX1dFQkFTU0VNQkxZX1BST1RPVFlQRShjYXBpdGFsTmFtZSwgbG93ZXJOYW1lLCBw
cm9wZXJOYW1lLCBpbnN0YW5jZVR5cGUsIGpzTmFtZSwgcHJvdG90eXBlQmFzZSwgZmVhdHVyZUZs
YWcpIFwKICAgICBpZiAoZmVhdHVyZUZsYWcpIHtcCkBAIC0xODMxLDcgKzE4MzEsNyBAQCB2b2lk
IEpTR2xvYmFsT2JqZWN0OjpleHBvc2VEb2xsYXJWTShWTSYgCiAgICAgfTsKICAgICBhZGRTdGF0
aWNHbG9iYWxzKGV4dHJhU3RhdGljR2xvYmFscywgV1RGX0FSUkFZX0xFTkdUSChleHRyYVN0YXRp
Y0dsb2JhbHMpKTsKIAotICAgIHB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhn
bG9iYWxFeGVjKCksICIkdm0iKSwgZG9sbGFyVk0sIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9w
ZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKKyAgICBwdXREaXJlY3Qodm0sIElkZW50aWZpZXI6
OmZyb21TdHJpbmcodm0sICIkdm0iKSwgZG9sbGFyVk0sIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQ
cm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKIH0KIAogdm9pZCBKU0dsb2JhbE9iamVjdDo6
YWRkU3RhdGljR2xvYmFscyhHbG9iYWxQcm9wZXJ0eUluZm8qIGdsb2JhbHMsIGludCBjb3VudCkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rp
b25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ds
b2JhbE9iamVjdEZ1bmN0aW9ucy5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDIgSGFy
cmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIg
S2VsbHkgKHBta0Bwb3N0LmNvbSkKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTkgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogIENvcHlyaWdodCAoQykgMjAwNyBDYW1l
cm9uIFp3YXJpY2ggKGN3endhcmljaEB1d2F0ZXJsb28uY2EpCiAgKiAgQ29weXJpZ2h0IChDKSAy
MDA3IE1ha3MgT3Jsb3ZpY2gKICAqCkBAIC0xNTIsNyArMTUyLDcgQEAgc3RhdGljIEpTVmFsdWUg
ZW5jb2RlKEV4ZWNTdGF0ZSogZXhlYywgYwogCiAgICAgaWYgKFVOTElLRUxZKGJ1aWxkZXIuaGFz
T3ZlcmZsb3dlZCgpKSkKICAgICAgICAgcmV0dXJuIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVj
LCBzY29wZSk7Ci0gICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIGJ1aWxkZXIudG9TdHJpbmcoKSk7
CisgICAgcmV0dXJuIGpzU3RyaW5nKHZtLCBidWlsZGVyLnRvU3RyaW5nKCkpOwogfQogCiBzdGF0
aWMgSlNWYWx1ZSBlbmNvZGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBCaXRtYXA8MjU2PiYgZG9O
b3RFc2NhcGUpCkBAIC0yNDEsNyArMjQxLDcgQEAgc3RhdGljIEpTVmFsdWUgZGVjb2RlKEV4ZWNT
dGF0ZSogZXhlYywgYwogICAgIH0KICAgICBpZiAoVU5MSUtFTFkoYnVpbGRlci5oYXNPdmVyZmxv
d2VkKCkpKQogICAgICAgICByZXR1cm4gdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMsIHNjb3Bl
KTsKLSAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGpzU3RyaW5nKCZ2bSwgYnVpbGRlci50
b1N0cmluZygpKSk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBqc1N0cmluZyh2bSwg
YnVpbGRlci50b1N0cmluZygpKSk7CiB9CiAKIHN0YXRpYyBKU1ZhbHVlIGRlY29kZShFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IEJpdG1hcDwyNTY+JiBkb05vdFVuZXNjYXBlLCBib29sIHN0cmljdCkK
QEAgLTYwMSw2ICs2MDEsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1
bmNFCiAgICAgKTsKIAogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9TdHJpbmdWaWV3KGV4
ZWMsIGV4ZWMtPmFyZ3VtZW50KDApLCBbJl0gKFN0cmluZ1ZpZXcgdmlldykgeworICAgICAgICBW
TSYgdm0gPSBleGVjLT52bSgpOwogICAgICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CiAgICAg
ICAgIGlmICh2aWV3LmlzOEJpdCgpKSB7CiAgICAgICAgICAgICBjb25zdCBMQ2hhciogYyA9IHZp
ZXcuY2hhcmFjdGVyczgoKTsKQEAgLTYxMyw3ICs2MTQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGdsb2JhbEZ1bmNFCiAgICAgICAgICAgICAgICAgICAgIGFwcGVuZEJ5dGVBc0hl
eCh1LCBidWlsZGVyKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgYnVpbGRlci50b1N0cmluZygpKTsKKyAgICAgICAg
ICAgIHJldHVybiBqc1N0cmluZyh2bSwgYnVpbGRlci50b1N0cmluZygpKTsKICAgICAgICAgfQog
CiAgICAgICAgIGNvbnN0IFVDaGFyKiBjID0gdmlldy5jaGFyYWN0ZXJzMTYoKTsKQEAgLTYzMSw3
ICs2MzIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNFCiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgYnVp
bGRlci50b1N0cmluZygpKTsKKyAgICAgICAgcmV0dXJuIGpzU3RyaW5nKHZtLCBidWlsZGVyLnRv
U3RyaW5nKCkpOwogICAgIH0pKTsKIH0KIApAQCAtNjg3LDcgKzY4OCw3IEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY1UKICAgICAgICAgICAgIH0KICAgICAgICAgfQog
Ci0gICAgICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBidWlsZGVyLnRvU3RyaW5nKCkpOworICAg
ICAgICByZXR1cm4ganNTdHJpbmcoZXhlYy0+dm0oKSwgYnVpbGRlci50b1N0cmluZygpKTsKICAg
ICB9KSk7CiB9CiAKQEAgLTgwNCw3ICs4MDUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGdsb2JhbEZ1bmNCCiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVu
Y0J1aWx0aW5EZXNjcmliZShFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1N0cmluZyhleGVjLCB0b1N0cmluZyhleGVjLT5hcmd1bWVudCgwKSkpKTsKKyAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKGV4ZWMtPnZtKCksIHRvU3RyaW5nKGV4
ZWMtPmFyZ3VtZW50KDApKSkpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGds
b2JhbEZ1bmNJbXBvcnRNb2R1bGUoRXhlY1N0YXRlKiBleGVjKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNMZXhpY2FsRW52aXJvbm1lbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTGV4aWNhbEVudmlyb25tZW50LmNwcAko
cmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMZXhp
Y2FsRW52aXJvbm1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSwgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTczLDYg
KzczLDcgQEAgdm9pZCBKU0xleGljYWxFbnZpcm9ubWVudDo6Z2V0T3duTm9uSW5kZQogICAgIHsK
ICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcih0aGlzT2JqZWN0LT5zeW1ib2xUYWJs
ZSgpLT5tX2xvY2spOwogICAgICAgICBTeW1ib2xUYWJsZTo6TWFwOjppdGVyYXRvciBlbmQgPSB0
aGlzT2JqZWN0LT5zeW1ib2xUYWJsZSgpLT5lbmQobG9ja2VyKTsKKyAgICAgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKICAgICAgICAgZm9yIChTeW1ib2xUYWJsZTo6TWFwOjppdGVyYXRvciBpdCA9
IHRoaXNPYmplY3QtPnN5bWJvbFRhYmxlKCktPmJlZ2luKGxvY2tlcik7IGl0ICE9IGVuZDsgKytp
dCkgewogICAgICAgICAgICAgaWYgKGl0LT52YWx1ZS5nZXRBdHRyaWJ1dGVzKCkgJiBQcm9wZXJ0
eUF0dHJpYnV0ZTo6RG9udEVudW0gJiYgIW1vZGUuaW5jbHVkZURvbnRFbnVtUHJvcGVydGllcygp
KQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtODAsNyArODEsNyBAQCB2b2lkIEpTTGV4
aWNhbEVudmlyb25tZW50OjpnZXRPd25Ob25JbmRlCiAgICAgICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgICAgICBpZiAoaXQtPmtleS0+aXNTeW1ib2woKSAmJiAhcHJvcGVydHlOYW1lcy5p
bmNsdWRlU3ltYm9sUHJvcGVydGllcygpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbVVpZChleGVjLCBpdC0+
a2V5LmdldCgpKSk7CisgICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpm
cm9tVWlkKHZtLCBpdC0+a2V5LmdldCgpKSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgLy8gU2tp
cCB0aGUgSlNTeW1ib2xUYWJsZU9iamVjdCdzIGltcGxlbWVudGF0aW9uIG9mIGdldE93bk5vbklu
ZGV4UHJvcGVydHlOYW1lcwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNN
b2R1bGVFbnZpcm9ubWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNNb2R1bGVFbnZpcm9ubWVudC5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlRW52aXJvbm1lbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0y
MDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtODEsNyArODEsNyBAQCBib29sIEpTTW9kdWxlRW52aXJvbm1lbnQ6Omdl
dE93blByb3BlcnR5CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNNb2R1bGVFbnZpcm9ubWVudCogdGhpc09i
amVjdCA9IGpzQ2FzdDxKU01vZHVsZUVudmlyb25tZW50Kj4oY2VsbCk7Ci0gICAgQWJzdHJhY3RN
b2R1bGVSZWNvcmQ6OlJlc29sdXRpb24gcmVzb2x1dGlvbiA9IHRoaXNPYmplY3QtPm1vZHVsZVJl
Y29yZCgpLT5yZXNvbHZlSW1wb3J0KGV4ZWMsIElkZW50aWZpZXI6OmZyb21VaWQoZXhlYywgcHJv
cGVydHlOYW1lLnVpZCgpKSk7CisgICAgQWJzdHJhY3RNb2R1bGVSZWNvcmQ6OlJlc29sdXRpb24g
cmVzb2x1dGlvbiA9IHRoaXNPYmplY3QtPm1vZHVsZVJlY29yZCgpLT5yZXNvbHZlSW1wb3J0KGV4
ZWMsIElkZW50aWZpZXI6OmZyb21VaWQodm0sIHByb3BlcnR5TmFtZS51aWQoKSkpOwogICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKICAgICBpZiAocmVzb2x1dGlvbi50eXBl
ID09IEFic3RyYWN0TW9kdWxlUmVjb3JkOjpSZXNvbHV0aW9uOjpUeXBlOjpSZXNvbHZlZCkgewog
ICAgICAgICAvLyBXaGVuIHJlc29sdmVJbXBvcnQgcmVzb2x2ZXMgdGhlIHJlc29sdXRpb24sIHRo
ZSBpbXBvcnRlZCBtb2R1bGUgZW52aXJvbm1lbnQgbXVzdCBoYXZlIHRoZSBiaW5kaW5nLgpAQCAt
MTE4LDcgKzExOCw3IEBAIGJvb2wgSlNNb2R1bGVFbnZpcm9ubWVudDo6cHV0KEpTQ2VsbCogY2UK
IAogICAgIEpTTW9kdWxlRW52aXJvbm1lbnQqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNNb2R1bGVF
bnZpcm9ubWVudCo+KGNlbGwpOwogICAgIC8vIEFsbCBpbXBvcnRlZCBiaW5kaW5ncyBhcmUgaW1t
dXRhYmxlLgotICAgIEFic3RyYWN0TW9kdWxlUmVjb3JkOjpSZXNvbHV0aW9uIHJlc29sdXRpb24g
PSB0aGlzT2JqZWN0LT5tb2R1bGVSZWNvcmQoKS0+cmVzb2x2ZUltcG9ydChleGVjLCBJZGVudGlm
aWVyOjpmcm9tVWlkKGV4ZWMsIHByb3BlcnR5TmFtZS51aWQoKSkpOworICAgIEFic3RyYWN0TW9k
dWxlUmVjb3JkOjpSZXNvbHV0aW9uIHJlc29sdXRpb24gPSB0aGlzT2JqZWN0LT5tb2R1bGVSZWNv
cmQoKS0+cmVzb2x2ZUltcG9ydChleGVjLCBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCBwcm9wZXJ0
eU5hbWUudWlkKCkpKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7CiAg
ICAgaWYgKHJlc29sdXRpb24udHlwZSA9PSBBYnN0cmFjdE1vZHVsZVJlY29yZDo6UmVzb2x1dGlv
bjo6VHlwZTo6UmVzb2x2ZWQpIHsKICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUs
IFJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKQEAgLTEzNCw3ICsxMzQsNyBAQCBib29sIEpT
TW9kdWxlRW52aXJvbm1lbnQ6OmRlbGV0ZVByb3BlcnR5CiAKICAgICBKU01vZHVsZUVudmlyb25t
ZW50KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTTW9kdWxlRW52aXJvbm1lbnQqPihjZWxsKTsKICAg
ICAvLyBBbGwgaW1wb3J0ZWQgYmluZGluZ3MgYXJlIGltbXV0YWJsZS4KLSAgICBBYnN0cmFjdE1v
ZHVsZVJlY29yZDo6UmVzb2x1dGlvbiByZXNvbHV0aW9uID0gdGhpc09iamVjdC0+bW9kdWxlUmVj
b3JkKCktPnJlc29sdmVJbXBvcnQoZXhlYywgSWRlbnRpZmllcjo6ZnJvbVVpZChleGVjLCBwcm9w
ZXJ0eU5hbWUudWlkKCkpKTsKKyAgICBBYnN0cmFjdE1vZHVsZVJlY29yZDo6UmVzb2x1dGlvbiBy
ZXNvbHV0aW9uID0gdGhpc09iamVjdC0+bW9kdWxlUmVjb3JkKCktPnJlc29sdmVJbXBvcnQoZXhl
YywgSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgcHJvcGVydHlOYW1lLnVpZCgpKSk7CiAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwogICAgIGlmIChyZXNvbHV0aW9uLnR5cGUg
PT0gQWJzdHJhY3RNb2R1bGVSZWNvcmQ6OlJlc29sdXRpb246OlR5cGU6OlJlc29sdmVkKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U01vZHVsZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNNb2R1bGVMb2FkZXIuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTggQXBwbGUgSW5jLiBB
bGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTkgQXBwbGUgSW5j
LiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDE2IFl1c3VrZSBTdXp1
a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4uCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0xMDksNyAr
MTA5LDcgQEAgdm9pZCBKU01vZHVsZUxvYWRlcjo6ZmluaXNoQ3JlYXRpb24oRXhlYwogICAgIEFT
U0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7CiAgICAgSlNNYXAqIG1hcCA9IEpTTWFwOjpjcmVh
dGUoZXhlYywgdm0sIGdsb2JhbE9iamVjdC0+bWFwU3RydWN0dXJlKCkpOwogICAgIHNjb3BlLnJl
bGVhc2VBc3NlcnROb0V4Y2VwdGlvbigpOwotICAgIHB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZygmdm0sICJyZWdpc3RyeSIpLCBtYXApOworICAgIHB1dERpcmVjdCh2bSwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInJlZ2lzdHJ5IiksIG1hcCk7CiB9CiAKIC8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KQEAgLTI0MSw3ICsyNDEsNyBAQCBKU0ludGVybmFsUHJvbWlzZSogSlNNb2R1
bGVMb2FkZXI6OnJlcXVlCiAgICAgQVNTRVJUKGNhbGxUeXBlICE9IENhbGxUeXBlOjpOb25lKTsK
IAogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3VtZW50czsKLSAgICBhcmd1bWVudHMuYXBw
ZW5kKGpzU3RyaW5nKGV4ZWMsIG1vZHVsZUtleS5pbXBsKCkpKTsKKyAgICBhcmd1bWVudHMuYXBw
ZW5kKGpzU3RyaW5nKHZtLCBtb2R1bGVLZXkuaW1wbCgpKSk7CiAgICAgYXJndW1lbnRzLmFwcGVu
ZChwYXJhbWV0ZXJzKTsKICAgICBhcmd1bWVudHMuYXBwZW5kKHNjcmlwdEZldGNoZXIpOwogICAg
IEFTU0VSVCghYXJndW1lbnRzLmhhc092ZXJmbG93ZWQoKSk7CkBAIC00MjAsNyArNDIwLDcgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtb2R1bGVMb2FkZQogCiAgICAgUGFyc2VyRXJy
b3IgZXJyb3I7CiAgICAgc3RkOjp1bmlxdWVfcHRyPE1vZHVsZVByb2dyYW1Ob2RlPiBtb2R1bGVQ
cm9ncmFtTm9kZSA9IHBhcnNlPE1vZHVsZVByb2dyYW1Ob2RlPigKLSAgICAgICAgJnZtLCBzb3Vy
Y2VDb2RlLCBJZGVudGlmaWVyKCksIEpTUGFyc2VyQnVpbHRpbk1vZGU6Ok5vdEJ1aWx0aW4sCisg
ICAgICAgIHZtLCBzb3VyY2VDb2RlLCBJZGVudGlmaWVyKCksIEpTUGFyc2VyQnVpbHRpbk1vZGU6
Ok5vdEJ1aWx0aW4sCiAgICAgICAgIEpTUGFyc2VyU3RyaWN0TW9kZTo6U3RyaWN0LCBKU1BhcnNl
clNjcmlwdE1vZGU6Ok1vZHVsZSwgU291cmNlUGFyc2VNb2RlOjpNb2R1bGVBbmFseXplTW9kZSwg
U3VwZXJCaW5kaW5nOjpOb3ROZWVkZWQsIGVycm9yKTsKICAgICBpZiAoZXJyb3IuaXNWYWxpZCgp
KQogICAgICAgICByZXR1cm4gcmVqZWN0KGVycm9yLnRvRXJyb3JPYmplY3QoZXhlYy0+bGV4aWNh
bEdsb2JhbE9iamVjdCgpLCBzb3VyY2VDb2RlKSk7CkBAIC00NDcsNyArNDQ3LDcgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtb2R1bGVMb2FkZQogICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIHNpemVfdCBpID0gMDsKICAgICBmb3Ig
KGF1dG8mIGtleSA6IG1vZHVsZVJlY29yZC0+cmVxdWVzdGVkTW9kdWxlcygpKSB7Ci0gICAgICAg
IHJlc3VsdC0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaSsrLCBqc1N0cmluZyhleGVjLCBrZXkuZ2V0
KCkpKTsKKyAgICAgICAgcmVzdWx0LT5wdXREaXJlY3RJbmRleChleGVjLCBpKyssIGpzU3RyaW5n
KHZtLCBrZXkuZ2V0KCkpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5j
b2RlZEpTVmFsdWUoKSk7CiAgICAgfQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlTmFtZXNwYWNl
T2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U01vZHVsZU5hbWVzcGFjZU9iamVjdC5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlTmFtZXNwYWNlT2JqZWN0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAx
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTczLDcgKzczLDcgQEAgdm9pZCBKU01vZHVsZU5hbWVzcGFjZU9iamVjdDo6
ZmluaXNoQ3JlYQogICAgICAgICB9CiAgICAgfQogCi0gICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9w
ZXJ0eU5hbWVzLT50b1N0cmluZ1RhZ1N5bWJvbCwganNTdHJpbmcoJnZtLCAiTW9kdWxlIiksIFBy
b3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8IFByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRl
IHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnBy
b3BlcnR5TmFtZXMtPnRvU3RyaW5nVGFnU3ltYm9sLCBqc1N0cmluZyh2bSwgIk1vZHVsZSIpLCBQ
cm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0
ZSB8IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSk7CiAKICAgICAvLyBodHRwOi8vd3d3LmVj
bWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtbW9kdWxlLW5hbWVzcGFjZS1l
eG90aWMtb2JqZWN0cy1nZXRwcm90b3R5cGVvZgogICAgIC8vIGh0dHA6Ly93d3cuZWNtYS1pbnRl
cm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1tb2R1bGUtbmFtZXNwYWNlLWV4b3RpYy1v
YmplY3RzLXNldHByb3RvdHlwZW9mLXYKQEAgLTE3Myw4ICsxNzMsOSBAQCBib29sIEpTTW9kdWxl
TmFtZXNwYWNlT2JqZWN0OjpnZXRPd25Qcm9wCiAKIGJvb2wgSlNNb2R1bGVOYW1lc3BhY2VPYmpl
Y3Q6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmplY3QqIGNlbGwsIEV4ZWNTdGF0ZSog
ZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CisgICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBKU01vZHVsZU5hbWVzcGFjZU9iamVjdCogdGhpc09i
amVjdCA9IGpzQ2FzdDxKU01vZHVsZU5hbWVzcGFjZU9iamVjdCo+KGNlbGwpOwotICAgIHJldHVy
biB0aGlzT2JqZWN0LT5nZXRPd25Qcm9wZXJ0eVNsb3RDb21tb24oZXhlYywgSWRlbnRpZmllcjo6
ZnJvbShleGVjLCBwcm9wZXJ0eU5hbWUpLCBzbG90KTsKKyAgICByZXR1cm4gdGhpc09iamVjdC0+
Z2V0T3duUHJvcGVydHlTbG90Q29tbW9uKGV4ZWMsIElkZW50aWZpZXI6OmZyb20odm0sIHByb3Bl
cnR5TmFtZSksIHNsb3QpOwogfQogCiBib29sIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0OjpwdXQo
SlNDZWxsKiwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3Bl
cnR5U2xvdCYgc2xvdCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9k
dWxlUmVjb3JkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU01vZHVsZVJlY29yZC5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlUmVjb3JkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE4
MCw3ICsxODAsNyBAQCB2b2lkIEpTTW9kdWxlUmVjb3JkOjppbnN0YW50aWF0ZURlY2xhcmF0CiAg
ICAgICAgIFZhck9mZnNldCBvZmZzZXQgPSBlbnRyeS52YXJPZmZzZXQoKTsKICAgICAgICAgaWYg
KCFvZmZzZXQuaXNTdGFjaygpKSB7CiAgICAgICAgICAgICBib29sIHB1dFJlc3VsdCA9IGZhbHNl
OwotICAgICAgICAgICAgc3ltYm9sVGFibGVQdXRUb3VjaFdhdGNocG9pbnRTZXQobW9kdWxlRW52
aXJvbm1lbnQsIGV4ZWMsIElkZW50aWZpZXI6OmZyb21VaWQoZXhlYywgdmFyaWFibGUua2V5Lmdl
dCgpKSwganNVbmRlZmluZWQoKSwgLyogc2hvdWxkVGhyb3dSZWFkT25seUVycm9yICovIGZhbHNl
LCAvKiBpZ25vcmVSZWFkT25seUVycm9ycyAqLyB0cnVlLCBwdXRSZXN1bHQpOworICAgICAgICAg
ICAgc3ltYm9sVGFibGVQdXRUb3VjaFdhdGNocG9pbnRTZXQobW9kdWxlRW52aXJvbm1lbnQsIGV4
ZWMsIElkZW50aWZpZXI6OmZyb21VaWQodm0sIHZhcmlhYmxlLmtleS5nZXQoKSksIGpzVW5kZWZp
bmVkKCksIC8qIHNob3VsZFRocm93UmVhZE9ubHlFcnJvciAqLyBmYWxzZSwgLyogaWdub3JlUmVh
ZE9ubHlFcnJvcnMgKi8gdHJ1ZSwgcHV0UmVzdWx0KTsKICAgICAgICAgICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAgICAgICAgIH0KICAgICB9CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09OT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09OT2JqZWN0LmNwcAkocmV2aXNpb24gMjQ5MTI4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPTk9iamVjdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIw
MTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC02NCw3ICs2NCw3IEBAIHZvaWQgSlNPTk9iamVjdDo6ZmluaXNoQ3JlYXRp
b24oVk0mIHZtKQogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBBU1NFUlQoaW5o
ZXJpdHModm0sIGluZm8oKSkpOwogCi0gICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0s
IHZtLnByb3BlcnR5TmFtZXMtPnRvU3RyaW5nVGFnU3ltYm9sLCBqc1N0cmluZygmdm0sICJKU09O
IiksIFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8IFByb3BlcnR5QXR0cmlidXRlOjpSZWFk
T25seSk7CisgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFt
ZXMtPnRvU3RyaW5nVGFnU3ltYm9sLCBqc1N0cmluZyh2bSwgIkpTT04iKSwgUHJvcGVydHlBdHRy
aWJ1dGU6OkRvbnRFbnVtIHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KTsKIH0KIAogLy8g
UHJvcGVydHlOYW1lRm9yRnVuY3Rpb25DYWxsIG9iamVjdHMgbXVzdCBiZSBvbiB0aGUgc3RhY2ss
IHNpbmNlIHRoZSBKU1ZhbHVlIHRoYXQgdGhleSBjcmVhdGUgaXMgbm90IG1hcmtlZC4KQEAgLTIw
NSwxMyArMjA1LDEzIEBAIGlubGluZSBQcm9wZXJ0eU5hbWVGb3JGdW5jdGlvbkNhbGw6OlByb3AK
IEpTVmFsdWUgUHJvcGVydHlOYW1lRm9yRnVuY3Rpb25DYWxsOjp2YWx1ZShFeGVjU3RhdGUqIGV4
ZWMpIGNvbnN0CiB7CiAgICAgaWYgKCFtX3ZhbHVlKSB7CisgICAgICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CiAgICAgICAgIGlmIChtX2lkZW50aWZpZXIpCi0gICAgICAgICAgICBtX3ZhbHVlID0g
anNTdHJpbmcoZXhlYywgbV9pZGVudGlmaWVyLT5zdHJpbmcoKSk7CisgICAgICAgICAgICBtX3Zh
bHVlID0ganNTdHJpbmcodm0sIG1faWRlbnRpZmllci0+c3RyaW5nKCkpOwogICAgICAgICBlbHNl
IHsKLSAgICAgICAgICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgICAgICAgICBpZiAobV9u
dW1iZXIgPD0gOSkKICAgICAgICAgICAgICAgICByZXR1cm4gdm0uc21hbGxTdHJpbmdzLnNpbmds
ZUNoYXJhY3RlclN0cmluZyhtX251bWJlciArICcwJyk7Ci0gICAgICAgICAgICBtX3ZhbHVlID0g
anNOb250cml2aWFsU3RyaW5nKCZ2bSwgdm0ubnVtZXJpY1N0cmluZ3MuYWRkKG1fbnVtYmVyKSk7
CisgICAgICAgICAgICBtX3ZhbHVlID0ganNOb250cml2aWFsU3RyaW5nKHZtLCB2bS5udW1lcmlj
U3RyaW5ncy5hZGQobV9udW1iZXIpKTsKICAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4gbV92
YWx1ZTsKQEAgLTIyMiw3ICsyMjIsNyBAQCBKU1ZhbHVlIFByb3BlcnR5TmFtZUZvckZ1bmN0aW9u
Q2FsbDo6dmFsCiBTdHJpbmdpZmllcjo6U3RyaW5naWZpZXIoRXhlY1N0YXRlKiBleGVjLCBKU1Zh
bHVlIHJlcGxhY2VyLCBKU1ZhbHVlIHNwYWNlKQogICAgIDogbV9leGVjKGV4ZWMpCiAgICAgLCBt
X3JlcGxhY2VyKHJlcGxhY2VyKQotICAgICwgbV9hcnJheVJlcGxhY2VyUHJvcGVydHlOYW1lcygm
ZXhlYy0+dm0oKSwgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5ncywgUHJpdmF0ZVN5bWJvbE1vZGU6
OkV4Y2x1ZGUpCisgICAgLCBtX2FycmF5UmVwbGFjZXJQcm9wZXJ0eU5hbWVzKGV4ZWMtPnZtKCks
IFByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3MsIFByaXZhdGVTeW1ib2xNb2RlOjpFeGNsdWRlKQog
ewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwpAQCAtMjg3LDcgKzI4Nyw3IEBAIEpTVmFsdWUgU3RyaW5naWZpZXI6OnN0
cmluZ2lmeShKU1ZhbHVlIHYKICAgICB9CiAgICAgaWYgKFVOTElLRUxZKHN0cmluZ2lmeVJlc3Vs
dCAhPSBTdHJpbmdpZnlTdWNjZWVkZWQpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
LSAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGpzU3RyaW5nKG1fZXhlYywgcmVzdWx0LnRv
U3RyaW5nKCkpKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGpzU3RyaW5nKHZtLCBy
ZXN1bHQudG9TdHJpbmcoKSkpOwogfQogCiBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgU3RyaW5naWZp
ZXI6OnRvSlNPTihKU1ZhbHVlIGJhc2VWYWx1ZSwgY29uc3QgUHJvcGVydHlOYW1lRm9yRnVuY3Rp
b25DYWxsJiBwcm9wZXJ0eU5hbWUpCkBAIC00OTYsNyArNDk2LDcgQEAgYm9vbCBTdHJpbmdpZmll
cjo6SG9sZGVyOjphcHBlbmROZXh0UHJvcAogICAgICAgICAgICAgaWYgKHN0cmluZ2lmaWVyLm1f
dXNpbmdBcnJheVJlcGxhY2VyKQogICAgICAgICAgICAgICAgIG1fcHJvcGVydHlOYW1lcyA9IHN0
cmluZ2lmaWVyLm1fYXJyYXlSZXBsYWNlclByb3BlcnR5TmFtZXMuZGF0YSgpOwogICAgICAgICAg
ICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgUHJvcGVydHlOYW1lQXJyYXkgb2JqZWN0UHJvcGVy
dHlOYW1lcygmdm0sIFByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3MsIFByaXZhdGVTeW1ib2xNb2Rl
OjpFeGNsdWRlKTsKKyAgICAgICAgICAgICAgICBQcm9wZXJ0eU5hbWVBcnJheSBvYmplY3RQcm9w
ZXJ0eU5hbWVzKHZtLCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzLCBQcml2YXRlU3ltYm9sTW9k
ZTo6RXhjbHVkZSk7CiAgICAgICAgICAgICAgICAgbV9vYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+
Z2V0T3duUHJvcGVydHlOYW1lcyhtX29iamVjdCwgZXhlYywgb2JqZWN0UHJvcGVydHlOYW1lcywg
RW51bWVyYXRpb25Nb2RlKCkpOwogICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIGZhbHNlKTsKICAgICAgICAgICAgICAgICBtX3Byb3BlcnR5TmFtZXMgPSBvYmplY3RQ
cm9wZXJ0eU5hbWVzLnJlbGVhc2VEYXRhKCk7CkBAIC03MDUsNyArNzA1LDcgQEAgTkVWRVJfSU5M
SU5FIEpTVmFsdWUgV2Fsa2VyOjp3YWxrKEpTVmFsdQogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgY2FzZSBBcnJheUVuZFZpc2l0TWVtYmVyOiB7CiAgICAgICAgICAgICAgICAgSlNBcnJheSog
YXJyYXkgPSBqc0Nhc3Q8SlNBcnJheSo+KG1hcmtlZFN0YWNrLmxhc3QoKSk7Ci0gICAgICAgICAg
ICAgICAgSlNWYWx1ZSBmaWx0ZXJlZFZhbHVlID0gY2FsbFJldml2ZXIoYXJyYXksIGpzU3RyaW5n
KG1fZXhlYywgU3RyaW5nOjpudW1iZXIoaW5kZXhTdGFjay5sYXN0KCkpKSwgb3V0VmFsdWUpOwor
ICAgICAgICAgICAgICAgIEpTVmFsdWUgZmlsdGVyZWRWYWx1ZSA9IGNhbGxSZXZpdmVyKGFycmF5
LCBqc1N0cmluZyh2bSwgU3RyaW5nOjpudW1iZXIoaW5kZXhTdGFjay5sYXN0KCkpKSwgb3V0VmFs
dWUpOwogICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAg
ICAgICAgICAgICAgICAgaWYgKGZpbHRlcmVkVmFsdWUuaXNVbmRlZmluZWQoKSkKICAgICAgICAg
ICAgICAgICAgICAgYXJyYXktPm1ldGhvZFRhYmxlKHZtKS0+ZGVsZXRlUHJvcGVydHlCeUluZGV4
KGFycmF5LCBtX2V4ZWMsIGluZGV4U3RhY2subGFzdCgpKTsKQEAgLTcyNSw3ICs3MjUsNyBAQCBO
RVZFUl9JTkxJTkUgSlNWYWx1ZSBXYWxrZXI6OndhbGsoSlNWYWx1CiAgICAgICAgICAgICAgICAg
SlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KGluVmFsdWUpOwogICAgICAgICAgICAgICAgIG1h
cmtlZFN0YWNrLmFwcGVuZFdpdGhDcmFzaE9uT3ZlcmZsb3cob2JqZWN0KTsKICAgICAgICAgICAg
ICAgICBpbmRleFN0YWNrLmFwcGVuZCgwKTsKLSAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0YWNr
LmFwcGVuZChQcm9wZXJ0eU5hbWVBcnJheSgmdm0sIFByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3Ms
IFByaXZhdGVTeW1ib2xNb2RlOjpFeGNsdWRlKSk7CisgICAgICAgICAgICAgICAgcHJvcGVydHlT
dGFjay5hcHBlbmQoUHJvcGVydHlOYW1lQXJyYXkodm0sIFByb3BlcnR5TmFtZU1vZGU6OlN0cmlu
Z3MsIFByaXZhdGVTeW1ib2xNb2RlOjpFeGNsdWRlKSk7CiAgICAgICAgICAgICAgICAgb2JqZWN0
LT5tZXRob2RUYWJsZSh2bSktPmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBtX2V4ZWMsIHBy
b3BlcnR5U3RhY2subGFzdCgpLCBFbnVtZXJhdGlvbk1vZGUoKSk7CiAgICAgICAgICAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICAgICAgICAgIH0KQEAgLTc2Miw3
ICs3NjIsNyBAQCBORVZFUl9JTkxJTkUgSlNWYWx1ZSBXYWxrZXI6OndhbGsoSlNWYWx1CiAgICAg
ICAgICAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9IGpzQ2FzdDxKU09iamVjdCo+KG1hcmtlZFN0
YWNrLmxhc3QoKSk7CiAgICAgICAgICAgICAgICAgSWRlbnRpZmllciBwcm9wID0gcHJvcGVydHlT
dGFjay5sYXN0KClbaW5kZXhTdGFjay5sYXN0KCldOwogICAgICAgICAgICAgICAgIFB1dFByb3Bl
cnR5U2xvdCBzbG90KG9iamVjdCk7Ci0gICAgICAgICAgICAgICAgSlNWYWx1ZSBmaWx0ZXJlZFZh
bHVlID0gY2FsbFJldml2ZXIob2JqZWN0LCBqc1N0cmluZyhtX2V4ZWMsIHByb3Auc3RyaW5nKCkp
LCBvdXRWYWx1ZSk7CisgICAgICAgICAgICAgICAgSlNWYWx1ZSBmaWx0ZXJlZFZhbHVlID0gY2Fs
bFJldml2ZXIob2JqZWN0LCBqc1N0cmluZyh2bSwgcHJvcC5zdHJpbmcoKSksIG91dFZhbHVlKTsK
ICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgICAg
ICAgICAgICAgIGlmIChmaWx0ZXJlZFZhbHVlLmlzVW5kZWZpbmVkKCkpCiAgICAgICAgICAgICAg
ICAgICAgIG9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5kZWxldGVQcm9wZXJ0eShvYmplY3QsIG1f
ZXhlYywgcHJvcCk7CkBAIC03OTMsNyArNzkzLDcgQEAgTkVWRVJfSU5MSU5FIEpTVmFsdWUgV2Fs
a2VyOjp3YWxrKEpTVmFsdQogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KGZpbmFsSG9sZGVyKTsK
ICAgICBmaW5hbEhvbGRlci0+bWV0aG9kVGFibGUodm0pLT5wdXQoZmluYWxIb2xkZXIsIG1fZXhl
Yywgdm0ucHJvcGVydHlOYW1lcy0+ZW1wdHlJZGVudGlmaWVyLCBvdXRWYWx1ZSwgc2xvdCk7CiAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKLSAgICBSRUxFQVNFX0FORF9SRVRV
Uk4oc2NvcGUsIGNhbGxSZXZpdmVyKGZpbmFsSG9sZGVyLCBqc0VtcHR5U3RyaW5nKG1fZXhlYyks
IG91dFZhbHVlKSk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBjYWxsUmV2aXZlcihm
aW5hbEhvbGRlciwganNFbXB0eVN0cmluZyh2bSksIG91dFZhbHVlKSk7CiB9CiAKIC8vIEVDTUEt
MjYyIHY1IDE1LjEyLjIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2Jq
ZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09i
amVjdC5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAg
Q29weXJpZ2h0IChDKSAxOTk5LTIwMDEgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKICAq
ICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKLSAqICBDb3B5
cmlnaHQgKEMpIDIwMDMtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAg
Q29weXJpZ2h0IChDKSAyMDAzLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICogIENvcHlyaWdodCAoQykgMjAwNyBFcmljIFNlaWRlbCAoZXJpY0B3ZWJraXQub3JnKQogICoK
ICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCkBAIC04Nyw3ICs4Nyw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBnZXRDbGFzc1By
b3BlcnR5TmFtZXMKIAogICAgICAgICBmb3IgKGF1dG8gaXRlciA9IHRhYmxlLT5iZWdpbigpOyBp
dGVyICE9IHRhYmxlLT5lbmQoKTsgKytpdGVyKSB7CiAgICAgICAgICAgICBpZiAoIShpdGVyLT5h
dHRyaWJ1dGVzKCkgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pIHx8IG1vZGUuaW5jbHVk
ZURvbnRFbnVtUHJvcGVydGllcygpKQotICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRk
KElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCBpdGVyLmtleSgpKSk7CisgICAgICAgICAgICAg
ICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgaXRlci5rZXko
KSkpOwogICAgICAgICB9CiAgICAgfQogfQpAQCAtNTk4LDEyICs1OTgsMTQgQEAgU3RyaW5nIEpT
T2JqZWN0OjpjYWxjdWxhdGVkQ2xhc3NOYW1lKEpTTwogCiBib29sIEpTT2JqZWN0OjpnZXRPd25Q
cm9wZXJ0eVNsb3RCeUluZGV4KEpTT2JqZWN0KiB0aGlzT2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMs
IHVuc2lnbmVkIGksIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52
bSgpOworCiAgICAgLy8gTkIuIFRoZSBmYWN0IHRoYXQgd2UncmUgZGlyZWN0bHkgY29uc3VsdGlu
ZyBvdXIgaW5kZXhlZCBzdG9yYWdlIGltcGxpZXMgdGhhdCBpdCBpcyBub3QKICAgICAvLyBsZWdh
bCBmb3IgYW55b25lIHRvIG92ZXJyaWRlIGdldE93blByb3BlcnR5U2xvdCgpIHdpdGhvdXQgYWxz
byBvdmVycmlkaW5nCiAgICAgLy8gZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleCgpLgogICAgIAog
ICAgIGlmIChpID4gTUFYX0FSUkFZX0lOREVYKQotICAgICAgICByZXR1cm4gdGhpc09iamVjdC0+
bWV0aG9kVGFibGUoZXhlYy0+dm0oKSktPmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBl
eGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGkpLCBzbG90KTsKKyAgICAgICAgcmV0dXJuIHRo
aXNPYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3Qs
IGV4ZWMsIElkZW50aWZpZXI6OmZyb20odm0sIGkpLCBzbG90KTsKICAgICAKICAgICBzd2l0Y2gg
KHRoaXNPYmplY3QtPmluZGV4aW5nVHlwZSgpKSB7CiAgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJ
TkdfVFlQRVM6CkBAIC04NjIsNyArODY0LDcgQEAgYm9vbCBKU09iamVjdDo6cHV0QnlJbmRleChK
U0NlbGwqIGNlbGwsIAogCiAgICAgaWYgKHByb3BlcnR5TmFtZSA+IE1BWF9BUlJBWV9JTkRFWCkg
ewogICAgICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChjZWxsLCBzaG91bGRUaHJvdyk7Ci0gICAg
ICAgIHJldHVybiB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPnB1dCh0aGlzT2JqZWN0LCBl
eGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIHByb3BlcnR5TmFtZSksIHZhbHVlLCBzbG90KTsK
KyAgICAgICAgcmV0dXJuIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+cHV0KHRoaXNPYmpl
Y3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20odm0sIHByb3BlcnR5TmFtZSksIHZhbHVlLCBzbG90
KTsKICAgICB9CiAKICAgICB0aGlzT2JqZWN0LT5lbnN1cmVXcml0YWJsZSh2bSk7CkBAIC0yMDIy
LDcgKzIwMjQsNyBAQCBib29sIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlNDCiAg
ICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNPYmplY3QqPihjZWxsKTsKICAgICAK
ICAgICBpZiAoaSA+IE1BWF9BUlJBWV9JTkRFWCkKLSAgICAgICAgcmV0dXJuIHRoaXNPYmplY3Qt
Pm1ldGhvZFRhYmxlKHZtKS0+ZGVsZXRlUHJvcGVydHkodGhpc09iamVjdCwgZXhlYywgSWRlbnRp
Zmllcjo6ZnJvbShleGVjLCBpKSk7CisgICAgICAgIHJldHVybiB0aGlzT2JqZWN0LT5tZXRob2RU
YWJsZSh2bSktPmRlbGV0ZVByb3BlcnR5KHRoaXNPYmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZy
b20odm0sIGkpKTsKICAgICAKICAgICBzd2l0Y2ggKHRoaXNPYmplY3QtPmluZGV4aW5nTW9kZSgp
KSB7CiAgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQRVM6CkBAIC0yNDQ2LDcgKzI0NDgs
NyBAQCBKU1N0cmluZyogSlNPYmplY3Q6OnRvU3RyaW5nKEV4ZWNTdGF0ZSogCiAgICAgVk0mIHZt
ID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CiAgICAgSlNWYWx1ZSBwcmltaXRpdmUgPSB0b1ByaW1pdGl2ZShleGVjLCBQcmVmZXJTdHJpbmcp
OwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGpzRW1wdHlTdHJpbmcoZXhlYykpOwor
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGpzRW1wdHlTdHJpbmcodm0pKTsKICAgICBS
RUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHByaW1pdGl2ZS50b1N0cmluZyhleGVjKSk7CiB9CiAK
QEAgLTI1MTksNyArMjUyMSw3IEBAIHZvaWQgSlNPYmplY3Q6OnJlaWZ5QWxsU3RhdGljUHJvcGVy
dGllcygKIAogICAgICAgICBmb3IgKGF1dG8mIHZhbHVlIDogKmhhc2hUYWJsZSkgewogICAgICAg
ICAgICAgdW5zaWduZWQgYXR0cmlidXRlczsKLSAgICAgICAgICAgIGF1dG8ga2V5ID0gSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZygmdm0sIHZhbHVlLm1fa2V5KTsKKyAgICAgICAgICAgIGF1dG8ga2V5
ID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgdmFsdWUubV9rZXkpOwogICAgICAgICAgICAg
UHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gZ2V0RGlyZWN0T2Zmc2V0KHZtLCBrZXksIGF0dHJpYnV0
ZXMpOwogICAgICAgICAgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCiAgICAgICAgICAg
ICAgICAgcmVpZnlTdGF0aWNQcm9wZXJ0eSh2bSwgaGFzaFRhYmxlLT5jbGFzc0ZvclRoaXMsIGtl
eSwgdmFsdWUsICp0aGlzKTsKQEAgLTMwNjQsNyArMzA2Niw3IEBAIGJvb2wgSlNPYmplY3Q6OnB1
dERpcmVjdEluZGV4U2xvd09yQmV5b24KICAgICBpZiAoIWNhbkRvRmFzdFB1dERpcmVjdEluZGV4
KHZtLCB0aGlzKSkgewogICAgICAgICBQcm9wZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRvcjsKICAg
ICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKHZhbHVlLCBhdHRyaWJ1dGVzKTsKLSAgICAg
ICAgcmV0dXJuIG1ldGhvZFRhYmxlKHZtKS0+ZGVmaW5lT3duUHJvcGVydHkodGhpcywgZXhlYywg
SWRlbnRpZmllcjo6ZnJvbShleGVjLCBpKSwgZGVzY3JpcHRvciwgbW9kZSA9PSBQdXREaXJlY3RJ
bmRleFNob3VsZFRocm93KTsKKyAgICAgICAgcmV0dXJuIG1ldGhvZFRhYmxlKHZtKS0+ZGVmaW5l
T3duUHJvcGVydHkodGhpcywgZXhlYywgSWRlbnRpZmllcjo6ZnJvbSh2bSwgaSksIGRlc2NyaXB0
b3IsIG1vZGUgPT0gUHV0RGlyZWN0SW5kZXhTaG91bGRUaHJvdyk7CiAgICAgfQogCiAgICAgLy8g
aSBzaG91bGQgYmUgYSB2YWxpZCBhcnJheSBpbmRleCB0aGF0IGlzIG91dHNpZGUgb2YgdGhlIGN1
cnJlbnQgdmVjdG9yLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmpl
Y3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVj
dC5oCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U09iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOTgsMTEgKzE5OCwxMiBAQCBwdWJsaWM6CiAg
ICAgLy8gVGhpcyBwZXJmb3JtcyB0aGUgRUNNQVNjcmlwdCBTZXQoKSBvcGVyYXRpb24uCiAgICAg
QUxXQVlTX0lOTElORSBib29sIHB1dEJ5SW5kZXhJbmxpbmUoRXhlY1N0YXRlKiBleGVjLCB1bnNp
Z25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCiAgICAg
eworICAgICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgICAgICBpZiAoY2FuU2V0SW5kZXhR
dWlja2x5KHByb3BlcnR5TmFtZSwgdmFsdWUpKSB7Ci0gICAgICAgICAgICBzZXRJbmRleFF1aWNr
bHkoZXhlYy0+dm0oKSwgcHJvcGVydHlOYW1lLCB2YWx1ZSk7CisgICAgICAgICAgICBzZXRJbmRl
eFF1aWNrbHkodm0sIHByb3BlcnR5TmFtZSwgdmFsdWUpOwogICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG1ldGhvZFRhYmxlKGV4ZWMtPnZtKCkpLT5w
dXRCeUluZGV4KHRoaXMsIGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNob3VsZFRocm93KTsK
KyAgICAgICAgcmV0dXJuIG1ldGhvZFRhYmxlKHZtKS0+cHV0QnlJbmRleCh0aGlzLCBleGVjLCBw
cm9wZXJ0eU5hbWUsIHZhbHVlLCBzaG91bGRUaHJvdyk7CiAgICAgfQogICAgICAgICAKICAgICAv
LyBUaGlzIGlzIHNpbWlsYXIgdG8gdGhlIHB1dERpcmVjdCogbWV0aG9kczoKQEAgLTE1NDksNyAr
MTU1MCw3IEBAIGlubGluZSBzaXplX3Qgb2Zmc2V0SW5CdXR0ZXJmbHkoUHJvcGVydHkKIAogaW5s
aW5lIHNpemVfdCBKU09iamVjdDo6YnV0dGVyZmx5UHJlQ2FwYWNpdHkoKQogewotICAgIFZNJiB2
bSA9ICp0aGlzLT52bSgpOworICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgaWYgKFVOTElL
RUxZKGhhc0luZGV4aW5nSGVhZGVyKHZtKSkpCiAgICAgICAgIHJldHVybiBidXR0ZXJmbHkoKS0+
aW5kZXhpbmdIZWFkZXIoKS0+cHJlQ2FwYWNpdHkoc3RydWN0dXJlKHZtKSk7CiAgICAgcmV0dXJu
IDA7CkBAIC0xNTU3LDcgKzE1NTgsNyBAQCBpbmxpbmUgc2l6ZV90IEpTT2JqZWN0OjpidXR0ZXJm
bHlQcmVDYXBhCiAKIGlubGluZSBzaXplX3QgSlNPYmplY3Q6OmJ1dHRlcmZseVRvdGFsU2l6ZSgp
CiB7Ci0gICAgVk0mIHZtID0gKnRoaXMtPnZtKCk7CisgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsK
ICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHRoaXMtPnN0cnVjdHVyZSh2bSk7CiAgICAgQnV0
dGVyZmx5KiBidXR0ZXJmbHkgPSB0aGlzLT5idXR0ZXJmbHkoKTsKICAgICBzaXplX3QgcHJlQ2Fw
YWNpdHk7CkBAIC0xNjA2LDEyICsxNjA3LDEyIEBAIENPTVBJTEVfQVNTRVJUKCEoc2l6ZW9mKEpT
T2JqZWN0KSAlIHNpemUKIHRlbXBsYXRlPHVuc2lnbmVkIGNoYXJhY3RlcnNDb3VudD4KIEFMV0FZ
U19JTkxJTkUgSWRlbnRpZmllciBtYWtlSWRlbnRpZmllcihWTSYgdm0sIGNvbnN0IGNoYXIgKCZj
aGFyYWN0ZXJzKVtjaGFyYWN0ZXJzQ291bnRdKQogewotICAgIHJldHVybiBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKCZ2bSwgY2hhcmFjdGVycyk7CisgICAgcmV0dXJuIElkZW50aWZpZXI6OmZyb21T
dHJpbmcodm0sIGNoYXJhY3RlcnMpOwogfQogCiBBTFdBWVNfSU5MSU5FIElkZW50aWZpZXIgbWFr
ZUlkZW50aWZpZXIoVk0mIHZtLCBjb25zdCBjaGFyKiBuYW1lKQogewotICAgIHJldHVybiBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgbmFtZSk7CisgICAgcmV0dXJuIElkZW50aWZpZXI6OmZy
b21TdHJpbmcodm0sIG5hbWUpOwogfQogCiBBTFdBWVNfSU5MSU5FIElkZW50aWZpZXIgbWFrZUlk
ZW50aWZpZXIoVk0mLCBjb25zdCBJZGVudGlmaWVyJiBuYW1lKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9taXNlUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb21pc2VQcm90b3R5cGUuY3BwCShyZXZp
c2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb21pc2VQ
cm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTc2LDcgKzc2LDcgQEAgSlNQcm9taXNlUHJvdG90
eXBlOjpKU1Byb21pc2VQcm90b3R5cGUoVgogdm9pZCBKU1Byb21pc2VQcm90b3R5cGU6OmZpbmlz
aENyZWF0aW9uKFZNJiB2bSwgU3RydWN0dXJlKikKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlv
bih2bSk7Ci0gICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFt
ZXMtPnRvU3RyaW5nVGFnU3ltYm9sLCBqc1N0cmluZygmdm0sICJQcm9taXNlIiksIFByb3BlcnR5
QXR0cmlidXRlOjpEb250RW51bSB8IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSk7CisgICAg
cHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPnRvU3RyaW5n
VGFnU3ltYm9sLCBqc1N0cmluZyh2bSwgIlByb21pc2UiKSwgUHJvcGVydHlBdHRyaWJ1dGU6OkRv
bnRFbnVtIHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KTsKIH0KIAogdm9pZCBKU1Byb21p
c2VQcm90b3R5cGU6OmFkZE93bkludGVybmFsU2xvdHMoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuY3BwCShyZXZpc2lvbiAyNDkxMjgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNC0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjgsNyArNjgsNyBAQCB2b2lkIEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcjo6ZmluaXNoQ3JlCiAgICAgQVNTRVJUKG1fZW5kR2VuZXJpY1Byb3BlcnR5
SW5kZXggPT0gdmVjdG9yLnNpemUoKSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZl
Y3Rvci5zaXplKCk7ICsraSkgewogICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVy
ID0gdmVjdG9yW2ldOwotICAgICAgICBtX3Byb3BlcnR5TmFtZXMuZ2V0KClbaV0uc2V0KHZtLCB0
aGlzLCBqc1N0cmluZygmdm0sIGlkZW50aWZpZXIuc3RyaW5nKCkpKTsKKyAgICAgICAgbV9wcm9w
ZXJ0eU5hbWVzLmdldCgpW2ldLnNldCh2bSwgdGhpcywganNTdHJpbmcodm0sIGlkZW50aWZpZXIu
c3RyaW5nKCkpKTsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oCShyZXZpc2lvbiAy
NDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTExMCw3ICsxMTAsNyBAQCBpbmxpbmUgSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBwcm9wZXJ0CiAKICAgICB1aW50MzJfdCBudW1iZXJTdHJ1
Y3R1cmVQcm9wZXJ0aWVzID0gMDsKIAotICAgIFByb3BlcnR5TmFtZUFycmF5IHByb3BlcnR5TmFt
ZXMoJnZtLCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzLCBQcml2YXRlU3ltYm9sTW9kZTo6RXhj
bHVkZSk7CisgICAgUHJvcGVydHlOYW1lQXJyYXkgcHJvcGVydHlOYW1lcyh2bSwgUHJvcGVydHlO
YW1lTW9kZTo6U3RyaW5ncywgUHJpdmF0ZVN5bWJvbE1vZGU6OkV4Y2x1ZGUpOwogCiAgICAgaWYg
KHN0cnVjdHVyZS0+Y2FuQWNjZXNzUHJvcGVydGllc1F1aWNrbHlGb3JFbnVtZXJhdGlvbigpICYm
IGluZGV4ZWRMZW5ndGggPT0gYmFzZS0+Z2V0QXJyYXlMZW5ndGgoKSkgewogICAgICAgICBiYXNl
LT5tZXRob2RUYWJsZSh2bSktPmdldFN0cnVjdHVyZVByb3BlcnR5TmFtZXMoYmFzZSwgZXhlYywg
cHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlKCkpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNSdW5Mb29wVGltZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUnVuTG9vcFRpbWVyLmNwcAkocmV2aXNpb24gMjQ5MTI4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNSdW5Mb29wVGltZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0y
MDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
Mi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMzA3LDggKzMwNyw4IEBAIHZvaWQgSlNSdW5Mb29wVGltZXI6OnRp
bWVyRGlkRmlyZSgpCiAgICAgZG9Xb3JrKCp2bSk7CiB9CiAKLUpTUnVuTG9vcFRpbWVyOjpKU1J1
bkxvb3BUaW1lcihWTSogdm0pCi0gICAgOiBtX2FwaUxvY2sodm0tPmFwaUxvY2soKSkKK0pTUnVu
TG9vcFRpbWVyOjpKU1J1bkxvb3BUaW1lcihWTSYgdm0pCisgICAgOiBtX2FwaUxvY2sodm0uYXBp
TG9jaygpKQogewogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1J1
bkxvb3BUaW1lci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTUnVuTG9vcFRpbWVyLmgJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTUnVuTG9vcFRpbWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0x
MDMsNyArMTAzLDcgQEAgcHVibGljOgogICAgICAgICBIYXNoTWFwPFJlZjxKU0xvY2s+LCBzdGQ6
OnVuaXF1ZV9wdHI8UGVyVk1EYXRhPj4gbV9tYXBwaW5nOwogICAgIH07CiAKLSAgICBKU1J1bkxv
b3BUaW1lcihWTSopOworICAgIEpTUnVuTG9vcFRpbWVyKFZNJik7CiAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgdmlydHVhbCB+SlNSdW5Mb29wVGltZXIoKTsKICAgICB2aXJ0dWFsIHZvaWQgZG9Xb3Jr
KFZNJikgPSAwOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmlu
Zy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJp
bmcuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1N0cmluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogIENv
cHlyaWdodCAoQykgMTk5OS0yMDAyIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCiAgKiAg
Q29weXJpZ2h0IChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0gKiAgQ29weXJp
Z2h0IChDKSAyMDA0LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENv
cHlyaWdodCAoQykgMjAwNC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCkBAIC03MSw3ICs3MSw3IEBAIHZvaWQgSlNTdHJpbmc6OmRlc3Ry
b3koSlNDZWxsKiBjZWxsKQogCiB2b2lkIEpTU3RyaW5nOjpkdW1wVG9TdHJlYW0oY29uc3QgSlND
ZWxsKiBjZWxsLCBQcmludFN0cmVhbSYgb3V0KQogewotICAgIFZNJiB2bSA9ICpjZWxsLT52bSgp
OworICAgIFZNJiB2bSA9IGNlbGwtPnZtKCk7CiAgICAgY29uc3QgSlNTdHJpbmcqIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8Y29uc3QgSlNTdHJpbmcqPihjZWxsKTsKICAgICBvdXQucHJpbnRmKCI8JXAs
ICVzLCBbJXVdLCAiLCB0aGlzT2JqZWN0LCB0aGlzT2JqZWN0LT5jbGFzc05hbWUodm0pLCB0aGlz
T2JqZWN0LT5sZW5ndGgoKSk7CiAgICAgdWludHB0cl90IHBvaW50ZXIgPSB0aGlzT2JqZWN0LT5t
X2ZpYmVyOwpAQCAtMjk0LDcgKzI5NCw3IEBAIGNvbnN0IFN0cmluZyYgSlNSb3BlU3RyaW5nOjpy
ZXNvbHZlUm9wZVcKIHsKICAgICBBU1NFUlQoaXNSb3BlKCkpOwogICAgIAotICAgIFZNJiB2bSA9
ICp0aGlzLT52bSgpOworICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgaWYgKGlzU3Vic3Ry
aW5nKCkpIHsKICAgICAgICAgQVNTRVJUKCFzdWJzdHJpbmdCYXNlKCktPmlzUm9wZSgpKTsKICAg
ICAgICAgYXV0byBuZXdJbXBsID0gc3Vic3RyaW5nQmFzZSgpLT52YWx1ZUludGVybmFsKCkuc3Vi
c3RyaW5nU2hhcmluZ0ltcGwoc3Vic3RyaW5nT2Zmc2V0KCksIGxlbmd0aCgpKTsKQEAgLTUwMiw3
ICs1MDIsNyBAQCBKU1N0cmluZyoganNTdHJpbmdXaXRoQ2FjaGVTbG93Q2FzZShWTSYgCiAgICAg
aWYgKEpTU3RyaW5nKiBzdHJpbmcgPSB2bS5zdHJpbmdDYWNoZS5nZXQoJnN0cmluZ0ltcGwpKQog
ICAgICAgICByZXR1cm4gc3RyaW5nOwogCi0gICAgSlNTdHJpbmcqIHN0cmluZyA9IGpzU3RyaW5n
KCZ2bSwgU3RyaW5nKHN0cmluZ0ltcGwpKTsKKyAgICBKU1N0cmluZyogc3RyaW5nID0ganNTdHJp
bmcodm0sIFN0cmluZyhzdHJpbmdJbXBsKSk7CiAgICAgdm0ubGFzdENhY2hlZFN0cmluZy5zZXQo
dm0sIHN0cmluZyk7CiAgICAgcmV0dXJuIHN0cmluZzsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuaAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsMjYg
KzQxLDIxIEBAIGNsYXNzIEpTU3RyaW5nOwogY2xhc3MgSlNSb3BlU3RyaW5nOwogY2xhc3MgTExJ
bnRPZmZzZXRzRXh0cmFjdG9yOwogCi1KU1N0cmluZyoganNFbXB0eVN0cmluZyhWTSopOwotSlNT
dHJpbmcqIGpzRW1wdHlTdHJpbmcoRXhlY1N0YXRlKik7Ci1KU1N0cmluZyoganNTdHJpbmcoVk0q
LCBjb25zdCBTdHJpbmcmKTsgLy8gcmV0dXJucyBlbXB0eSBzdHJpbmcgaWYgcGFzc2VkIG51bGwg
c3RyaW5nCi1KU1N0cmluZyoganNTdHJpbmcoRXhlY1N0YXRlKiwgY29uc3QgU3RyaW5nJik7IC8v
IHJldHVybnMgZW1wdHkgc3RyaW5nIGlmIHBhc3NlZCBudWxsIHN0cmluZwotCi1KU1N0cmluZyog
anNTaW5nbGVDaGFyYWN0ZXJTdHJpbmcoVk0qLCBVQ2hhcik7Ci1KU1N0cmluZyoganNTaW5nbGVD
aGFyYWN0ZXJTdHJpbmcoRXhlY1N0YXRlKiwgVUNoYXIpOwotSlNTdHJpbmcqIGpzU3Vic3RyaW5n
KFZNKiwgY29uc3QgU3RyaW5nJiwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwor
SlNTdHJpbmcqIGpzRW1wdHlTdHJpbmcoVk0mKTsKK0pTU3RyaW5nKiBqc1N0cmluZyhWTSYsIGNv
bnN0IFN0cmluZyYpOyAvLyByZXR1cm5zIGVtcHR5IHN0cmluZyBpZiBwYXNzZWQgbnVsbCBzdHJp
bmcKKworSlNTdHJpbmcqIGpzU2luZ2xlQ2hhcmFjdGVyU3RyaW5nKFZNJiwgVUNoYXIpOworSlNT
dHJpbmcqIGpzU3Vic3RyaW5nKFZNJiwgY29uc3QgU3RyaW5nJiwgdW5zaWduZWQgb2Zmc2V0LCB1
bnNpZ25lZCBsZW5ndGgpOwogCiAvLyBOb24tdHJpdmlhbCBzdHJpbmdzIGFyZSB0d28gb3IgbW9y
ZSBjaGFyYWN0ZXJzIGxvbmcuCiAvLyBUaGVzZSBmdW5jdGlvbnMgYXJlIGZhc3RlciB0aGFuIGp1
c3QgY2FsbGluZyBqc1N0cmluZy4KLUpTU3RyaW5nKiBqc05vbnRyaXZpYWxTdHJpbmcoVk0qLCBj
b25zdCBTdHJpbmcmKTsKLUpTU3RyaW5nKiBqc05vbnRyaXZpYWxTdHJpbmcoRXhlY1N0YXRlKiwg
Y29uc3QgU3RyaW5nJik7Ci1KU1N0cmluZyoganNOb250cml2aWFsU3RyaW5nKEV4ZWNTdGF0ZSos
IFN0cmluZyYmKTsKK0pTU3RyaW5nKiBqc05vbnRyaXZpYWxTdHJpbmcoVk0mLCBjb25zdCBTdHJp
bmcmKTsKK0pTU3RyaW5nKiBqc05vbnRyaXZpYWxTdHJpbmcoVk0mLCBTdHJpbmcmJik7CiAKIC8v
IFNob3VsZCBiZSB1c2VkIGZvciBzdHJpbmdzIHRoYXQgYXJlIG93bmVkIGJ5IGFuIG9iamVjdCB0
aGF0IHdpbGwKIC8vIGxpa2VseSBvdXRsaXZlIHRoZSBKU1ZhbHVlIHRoaXMgbWFrZXMsIHN1Y2gg
YXMgdGhlIHBhcnNlIHRyZWUgb3IgYQogLy8gRE9NIG9iamVjdCB0aGF0IGNvbnRhaW5zIGEgU3Ry
aW5nCi1KU1N0cmluZyoganNPd25lZFN0cmluZyhWTSosIGNvbnN0IFN0cmluZyYpOwotSlNTdHJp
bmcqIGpzT3duZWRTdHJpbmcoRXhlY1N0YXRlKiwgY29uc3QgU3RyaW5nJik7CitKU1N0cmluZyog
anNPd25lZFN0cmluZyhWTSYsIGNvbnN0IFN0cmluZyYpOwogCiBib29sIGlzSlNTdHJpbmcoSlND
ZWxsKik7CiBib29sIGlzSlNTdHJpbmcoSlNWYWx1ZSk7CkBAIC0yMzgsMjAgKzIzMywyMCBAQCBw
cml2YXRlOgogCiAgICAgU3RyaW5nVmlldyB1bnNhZmVWaWV3KEV4ZWNTdGF0ZSopIGNvbnN0Owog
Ci0gICAgZnJpZW5kIEpTU3RyaW5nKiBqc1N0cmluZyhWTSosIGNvbnN0IFN0cmluZyYpOworICAg
IGZyaWVuZCBKU1N0cmluZyoganNTdHJpbmcoVk0mLCBjb25zdCBTdHJpbmcmKTsKICAgICBmcmll
bmQgSlNTdHJpbmcqIGpzU3RyaW5nKEV4ZWNTdGF0ZSosIEpTU3RyaW5nKiwgSlNTdHJpbmcqKTsK
ICAgICBmcmllbmQgSlNTdHJpbmcqIGpzU3RyaW5nKEV4ZWNTdGF0ZSosIGNvbnN0IFN0cmluZyYs
IEpTU3RyaW5nKik7CiAgICAgZnJpZW5kIEpTU3RyaW5nKiBqc1N0cmluZyhFeGVjU3RhdGUqLCBK
U1N0cmluZyosIGNvbnN0IFN0cmluZyYpOwogICAgIGZyaWVuZCBKU1N0cmluZyoganNTdHJpbmco
RXhlY1N0YXRlKiwgY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJik7CiAgICAgZnJpZW5kIEpT
U3RyaW5nKiBqc1N0cmluZyhFeGVjU3RhdGUqLCBKU1N0cmluZyosIEpTU3RyaW5nKiwgSlNTdHJp
bmcqKTsKICAgICBmcmllbmQgSlNTdHJpbmcqIGpzU3RyaW5nKEV4ZWNTdGF0ZSosIGNvbnN0IFN0
cmluZyYsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpOwotICAgIGZyaWVuZCBKU1N0cmlu
ZyoganNTaW5nbGVDaGFyYWN0ZXJTdHJpbmcoVk0qLCBVQ2hhcik7Ci0gICAgZnJpZW5kIEpTU3Ry
aW5nKiBqc05vbnRyaXZpYWxTdHJpbmcoVk0qLCBjb25zdCBTdHJpbmcmKTsKLSAgICBmcmllbmQg
SlNTdHJpbmcqIGpzTm9udHJpdmlhbFN0cmluZyhWTSosIFN0cmluZyYmKTsKLSAgICBmcmllbmQg
SlNTdHJpbmcqIGpzU3Vic3RyaW5nKFZNKiwgY29uc3QgU3RyaW5nJiwgdW5zaWduZWQsIHVuc2ln
bmVkKTsKKyAgICBmcmllbmQgSlNTdHJpbmcqIGpzU2luZ2xlQ2hhcmFjdGVyU3RyaW5nKFZNJiwg
VUNoYXIpOworICAgIGZyaWVuZCBKU1N0cmluZyoganNOb250cml2aWFsU3RyaW5nKFZNJiwgY29u
c3QgU3RyaW5nJik7CisgICAgZnJpZW5kIEpTU3RyaW5nKiBqc05vbnRyaXZpYWxTdHJpbmcoVk0m
LCBTdHJpbmcmJik7CisgICAgZnJpZW5kIEpTU3RyaW5nKiBqc1N1YnN0cmluZyhWTSYsIGNvbnN0
IFN0cmluZyYsIHVuc2lnbmVkLCB1bnNpZ25lZCk7CiAgICAgZnJpZW5kIEpTU3RyaW5nKiBqc1N1
YnN0cmluZyhWTSYsIEV4ZWNTdGF0ZSosIEpTU3RyaW5nKiwgdW5zaWduZWQsIHVuc2lnbmVkKTsK
ICAgICBmcmllbmQgSlNTdHJpbmcqIGpzU3Vic3RyaW5nT2ZSZXNvbHZlZChWTSYsIEdDRGVmZXJy
YWxDb250ZXh0KiwgSlNTdHJpbmcqLCB1bnNpZ25lZCwgdW5zaWduZWQpOwotICAgIGZyaWVuZCBK
U1N0cmluZyoganNPd25lZFN0cmluZyhWTSosIGNvbnN0IFN0cmluZyYpOworICAgIGZyaWVuZCBK
U1N0cmluZyoganNPd25lZFN0cmluZyhWTSYsIGNvbnN0IFN0cmluZyYpOwogfTsKIAogLy8gTk9U
RTogVGhpcyBjbGFzcyBjYW5ub3Qgb3ZlcnJpZGUgSlNTdHJpbmcncyBkZXN0cnVjdG9yLiBKU1N0
cmluZydzIGRlc3RydWN0b3IgaXMgY2FsbGVkIGRpcmVjdGx5CkBAIC00MDIsNyArMzk3LDcgQEAg
cHVibGljOgogICAgICAgICAgICAgc3dpdGNoIChtX3N0cmluZ3Muc2l6ZSgpKSB7CiAgICAgICAg
ICAgICBjYXNlIDA6IHsKICAgICAgICAgICAgICAgICBBU1NFUlQoIW1fbGVuZ3RoKTsKLSAgICAg
ICAgICAgICAgICByZXN1bHQgPSBqc0VtcHR5U3RyaW5nKCZtX3ZtKTsKKyAgICAgICAgICAgICAg
ICByZXN1bHQgPSBqc0VtcHR5U3RyaW5nKG1fdm0pOwogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgY2FzZSAxOiB7CkBAIC03MTksNDEgKzcxNCw0NSBA
QCBpbmxpbmUgSlNTdHJpbmcqIGFzU3RyaW5nKEpTVmFsdWUgdmFsdWUpCiB9CiAKIC8vIFRoaXMg
TVVTVCBOT1QgR0MuCi1pbmxpbmUgSlNTdHJpbmcqIGpzRW1wdHlTdHJpbmcoVk0qIHZtKQoraW5s
aW5lIEpTU3RyaW5nKiBqc0VtcHR5U3RyaW5nKFZNJiB2bSkKIHsKLSAgICByZXR1cm4gdm0tPnNt
YWxsU3RyaW5ncy5lbXB0eVN0cmluZygpOworICAgIHJldHVybiB2bS5zbWFsbFN0cmluZ3MuZW1w
dHlTdHJpbmcoKTsKIH0KIAotQUxXQVlTX0lOTElORSBKU1N0cmluZyoganNTaW5nbGVDaGFyYWN0
ZXJTdHJpbmcoVk0qIHZtLCBVQ2hhciBjKQorQUxXQVlTX0lOTElORSBKU1N0cmluZyoganNTaW5n
bGVDaGFyYWN0ZXJTdHJpbmcoVk0mIHZtLCBVQ2hhciBjKQogewogICAgIGlmICh2YWxpZGF0ZURG
R0RvZXNHQykKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQodm0tPmhlYXAuZXhwZWN0RG9lc0dDKCkp
OworICAgICAgICBSRUxFQVNFX0FTU0VSVCh2bS5oZWFwLmV4cGVjdERvZXNHQygpKTsKICAgICBp
ZiAoYyA8PSBtYXhTaW5nbGVDaGFyYWN0ZXJTdHJpbmcpCi0gICAgICAgIHJldHVybiB2bS0+c21h
bGxTdHJpbmdzLnNpbmdsZUNoYXJhY3RlclN0cmluZyhjKTsKLSAgICByZXR1cm4gSlNTdHJpbmc6
OmNyZWF0ZSgqdm0sIFN0cmluZ0ltcGw6OmNyZWF0ZSgmYywgMSkpOworICAgICAgICByZXR1cm4g
dm0uc21hbGxTdHJpbmdzLnNpbmdsZUNoYXJhY3RlclN0cmluZyhjKTsKKyAgICByZXR1cm4gSlNT
dHJpbmc6OmNyZWF0ZSh2bSwgU3RyaW5nSW1wbDo6Y3JlYXRlKCZjLCAxKSk7CiB9CiAKLWlubGlu
ZSBKU1N0cmluZyoganNOb250cml2aWFsU3RyaW5nKFZNKiB2bSwgY29uc3QgU3RyaW5nJiBzKQor
aW5saW5lIEpTU3RyaW5nKiBqc05vbnRyaXZpYWxTdHJpbmcoVk0mIHZtLCBjb25zdCBTdHJpbmcm
IHMpCiB7CiAgICAgQVNTRVJUKHMubGVuZ3RoKCkgPiAxKTsKLSAgICByZXR1cm4gSlNTdHJpbmc6
OmNyZWF0ZSgqdm0sICpzLmltcGwoKSk7CisgICAgcmV0dXJuIEpTU3RyaW5nOjpjcmVhdGUodm0s
ICpzLmltcGwoKSk7CiB9CiAKLWlubGluZSBKU1N0cmluZyoganNOb250cml2aWFsU3RyaW5nKFZN
KiB2bSwgU3RyaW5nJiYgcykKK2lubGluZSBKU1N0cmluZyoganNOb250cml2aWFsU3RyaW5nKFZN
JiB2bSwgU3RyaW5nJiYgcykKIHsKICAgICBBU1NFUlQocy5sZW5ndGgoKSA+IDEpOwotICAgIHJl
dHVybiBKU1N0cmluZzo6Y3JlYXRlKCp2bSwgcy5yZWxlYXNlSW1wbCgpLnJlbGVhc2VOb25OdWxs
KCkpOworICAgIHJldHVybiBKU1N0cmluZzo6Y3JlYXRlKHZtLCBzLnJlbGVhc2VJbXBsKCkucmVs
ZWFzZU5vbk51bGwoKSk7CiB9CiAKIEFMV0FZU19JTkxJTkUgSWRlbnRpZmllciBKU1N0cmluZzo6
dG9JZGVudGlmaWVyKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKIHsKLSAgICByZXR1cm4gSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZyhleGVjLCB0b0F0b21TdHJpbmcoZXhlYykpOworICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwor
ICAgIEF0b21TdHJpbmcgYXRvbVN0cmluZyA9IHRvQXRvbVN0cmluZyhleGVjKTsKKyAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAgIHJldHVybiBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKHZtLCBhdG9tU3RyaW5nKTsKIH0KIAogQUxXQVlTX0lOTElORSBBdG9tU3RyaW5nIEpT
U3RyaW5nOjp0b0F0b21TdHJpbmcoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogewogICAgIGlmICh2
YWxpZGF0ZURGR0RvZXNHQykKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQodm0oKS0+aGVhcC5leHBl
Y3REb2VzR0MoKSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHZtKCkuaGVhcC5leHBlY3REb2Vz
R0MoKSk7CiAgICAgaWYgKGlzUm9wZSgpKQogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29u
c3QgSlNSb3BlU3RyaW5nKj4odGhpcyktPnJlc29sdmVSb3BlVG9BdG9tU3RyaW5nKGV4ZWMpOwog
ICAgIHJldHVybiBBdG9tU3RyaW5nKHZhbHVlSW50ZXJuYWwoKSk7CkBAIC03NjIsNyArNzYxLDcg
QEAgQUxXQVlTX0lOTElORSBBdG9tU3RyaW5nIEpTU3RyaW5nOjp0b0F0bwogQUxXQVlTX0lOTElO
RSBSZWZQdHI8QXRvbVN0cmluZ0ltcGw+IEpTU3RyaW5nOjp0b0V4aXN0aW5nQXRvbVN0cmluZyhF
eGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiB7CiAgICAgaWYgKHZhbGlkYXRlREZHRG9lc0dDKQotICAg
ICAgICBSRUxFQVNFX0FTU0VSVCh2bSgpLT5oZWFwLmV4cGVjdERvZXNHQygpKTsKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlQodm0oKS5oZWFwLmV4cGVjdERvZXNHQygpKTsKICAgICBpZiAoaXNSb3Bl
KCkpCiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBKU1JvcGVTdHJpbmcqPih0aGlz
KS0+cmVzb2x2ZVJvcGVUb0V4aXN0aW5nQXRvbVN0cmluZyhleGVjKTsKICAgICBpZiAodmFsdWVJ
bnRlcm5hbCgpLmltcGwoKS0+aXNBdG9tKCkpCkBAIC03NzMsNyArNzcyLDcgQEAgQUxXQVlTX0lO
TElORSBSZWZQdHI8QXRvbVN0cmluZ0ltcGw+IEpTUwogaW5saW5lIGNvbnN0IFN0cmluZyYgSlNT
dHJpbmc6OnZhbHVlKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKIHsKICAgICBpZiAodmFsaWRhdGVE
RkdEb2VzR0MpCi0gICAgICAgIFJFTEVBU0VfQVNTRVJUKHZtKCktPmhlYXAuZXhwZWN0RG9lc0dD
KCkpOworICAgICAgICBSRUxFQVNFX0FTU0VSVCh2bSgpLmhlYXAuZXhwZWN0RG9lc0dDKCkpOwog
ICAgIGlmIChpc1JvcGUoKSkKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IEpTUm9w
ZVN0cmluZyo+KHRoaXMpLT5yZXNvbHZlUm9wZShleGVjKTsKICAgICByZXR1cm4gdmFsdWVJbnRl
cm5hbCgpOwpAQCAtNzgzLDcgKzc4Miw3IEBAIGlubGluZSBjb25zdCBTdHJpbmcmIEpTU3RyaW5n
Ojp0cnlHZXRWYWwKIHsKICAgICBpZiAoYWxsb2NhdGlvbkFsbG93ZWQpIHsKICAgICAgICAgaWYg
KHZhbGlkYXRlREZHRG9lc0dDKQotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQodm0oKS0+aGVh
cC5leHBlY3REb2VzR0MoKSk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCh2bSgpLmhlYXAu
ZXhwZWN0RG9lc0dDKCkpOwogICAgICAgICBpZiAoaXNSb3BlKCkpIHsKICAgICAgICAgICAgIC8v
IFBhc3MgbnVsbHB0ciBmb3IgdGhlIEV4ZWNTdGF0ZSBzbyB0aGF0IHJlc29sdmVSb3BlIGRvZXMg
bm90IHRocm93IGluIHRoZSBldmVudCBvZiBhbiBPT00gZXJyb3IuCiAgICAgICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8Y29uc3QgSlNSb3BlU3RyaW5nKj4odGhpcyktPnJlc29sdmVSb3BlKG51
bGxwdHIpOwpAQCAtODAwLDIwICs3OTksMjAgQEAgaW5saW5lIEpTU3RyaW5nKiBKU1N0cmluZzo6
Z2V0SW5kZXgoRXhlYwogICAgIEFTU0VSVChjYW5HZXRJbmRleChpKSk7CiAgICAgU3RyaW5nVmll
dyB2aWV3ID0gdW5zYWZlVmlldyhleGVjKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBudWxscHRyKTsKLSAgICByZXR1cm4ganNTaW5nbGVDaGFyYWN0ZXJTdHJpbmcoZXhlYywgdmll
d1tpXSk7CisgICAgcmV0dXJuIGpzU2luZ2xlQ2hhcmFjdGVyU3RyaW5nKHZtLCB2aWV3W2ldKTsK
IH0KIAotaW5saW5lIEpTU3RyaW5nKiBqc1N0cmluZyhWTSogdm0sIGNvbnN0IFN0cmluZyYgcykK
K2lubGluZSBKU1N0cmluZyoganNTdHJpbmcoVk0mIHZtLCBjb25zdCBTdHJpbmcmIHMpCiB7CiAg
ICAgaW50IHNpemUgPSBzLmxlbmd0aCgpOwogICAgIGlmICghc2l6ZSkKLSAgICAgICAgcmV0dXJu
IHZtLT5zbWFsbFN0cmluZ3MuZW1wdHlTdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIHZtLnNtYWxs
U3RyaW5ncy5lbXB0eVN0cmluZygpOwogICAgIGlmIChzaXplID09IDEpIHsKICAgICAgICAgVUNo
YXIgYyA9IHMuY2hhcmFjdGVyQXQoMCk7CiAgICAgICAgIGlmIChjIDw9IG1heFNpbmdsZUNoYXJh
Y3RlclN0cmluZykKLSAgICAgICAgICAgIHJldHVybiB2bS0+c21hbGxTdHJpbmdzLnNpbmdsZUNo
YXJhY3RlclN0cmluZyhjKTsKKyAgICAgICAgICAgIHJldHVybiB2bS5zbWFsbFN0cmluZ3Muc2lu
Z2xlQ2hhcmFjdGVyU3RyaW5nKGMpOwogICAgIH0KLSAgICByZXR1cm4gSlNTdHJpbmc6OmNyZWF0
ZSgqdm0sICpzLmltcGwoKSk7CisgICAgcmV0dXJuIEpTU3RyaW5nOjpjcmVhdGUodm0sICpzLmlt
cGwoKSk7CiB9CiAKIGlubGluZSBKU1N0cmluZyoganNTdWJzdHJpbmcoVk0mIHZtLCBFeGVjU3Rh
dGUqIGV4ZWMsIEpTU3RyaW5nKiBiYXNlLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0
aCkKQEAgLTg3Miw1MCArODcxLDQzIEBAIGlubGluZSBKU1N0cmluZyoganNTdWJzdHJpbmcoRXhl
Y1N0YXRlKiAKICAgICByZXR1cm4ganNTdWJzdHJpbmcoZXhlYy0+dm0oKSwgZXhlYywgcywgb2Zm
c2V0LCBsZW5ndGgpOwogfQogCi1pbmxpbmUgSlNTdHJpbmcqIGpzU3Vic3RyaW5nKFZNKiB2bSwg
Y29uc3QgU3RyaW5nJiBzLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKK2lubGlu
ZSBKU1N0cmluZyoganNTdWJzdHJpbmcoVk0mIHZtLCBjb25zdCBTdHJpbmcmIHMsIHVuc2lnbmVk
IG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQogewogICAgIEFTU0VSVChvZmZzZXQgPD0gcy5sZW5n
dGgoKSk7CiAgICAgQVNTRVJUKGxlbmd0aCA8PSBzLmxlbmd0aCgpKTsKICAgICBBU1NFUlQob2Zm
c2V0ICsgbGVuZ3RoIDw9IHMubGVuZ3RoKCkpOwogICAgIGlmICghbGVuZ3RoKQotICAgICAgICBy
ZXR1cm4gdm0tPnNtYWxsU3RyaW5ncy5lbXB0eVN0cmluZygpOworICAgICAgICByZXR1cm4gdm0u
c21hbGxTdHJpbmdzLmVtcHR5U3RyaW5nKCk7CiAgICAgaWYgKGxlbmd0aCA9PSAxKSB7CiAgICAg
ICAgIFVDaGFyIGMgPSBzLmNoYXJhY3RlckF0KG9mZnNldCk7CiAgICAgICAgIGlmIChjIDw9IG1h
eFNpbmdsZUNoYXJhY3RlclN0cmluZykKLSAgICAgICAgICAgIHJldHVybiB2bS0+c21hbGxTdHJp
bmdzLnNpbmdsZUNoYXJhY3RlclN0cmluZyhjKTsKKyAgICAgICAgICAgIHJldHVybiB2bS5zbWFs
bFN0cmluZ3Muc2luZ2xlQ2hhcmFjdGVyU3RyaW5nKGMpOwogICAgIH0KICAgICBhdXRvIGltcGwg
PSBTdHJpbmdJbXBsOjpjcmVhdGVTdWJzdHJpbmdTaGFyaW5nSW1wbCgqcy5pbXBsKCksIG9mZnNl
dCwgbGVuZ3RoKTsKICAgICBpZiAoaW1wbC0+aXNTdWJTdHJpbmcoKSkKLSAgICAgICAgcmV0dXJu
IEpTU3RyaW5nOjpjcmVhdGVIYXNPdGhlck93bmVyKCp2bSwgV1RGTW92ZShpbXBsKSk7Ci0gICAg
cmV0dXJuIEpTU3RyaW5nOjpjcmVhdGUoKnZtLCBXVEZNb3ZlKGltcGwpKTsKKyAgICAgICAgcmV0
dXJuIEpTU3RyaW5nOjpjcmVhdGVIYXNPdGhlck93bmVyKHZtLCBXVEZNb3ZlKGltcGwpKTsKKyAg
ICByZXR1cm4gSlNTdHJpbmc6OmNyZWF0ZSh2bSwgV1RGTW92ZShpbXBsKSk7CiB9CiAKLWlubGlu
ZSBKU1N0cmluZyoganNPd25lZFN0cmluZyhWTSogdm0sIGNvbnN0IFN0cmluZyYgcykKK2lubGlu
ZSBKU1N0cmluZyoganNPd25lZFN0cmluZyhWTSYgdm0sIGNvbnN0IFN0cmluZyYgcykKIHsKICAg
ICBpbnQgc2l6ZSA9IHMubGVuZ3RoKCk7CiAgICAgaWYgKCFzaXplKQotICAgICAgICByZXR1cm4g
dm0tPnNtYWxsU3RyaW5ncy5lbXB0eVN0cmluZygpOworICAgICAgICByZXR1cm4gdm0uc21hbGxT
dHJpbmdzLmVtcHR5U3RyaW5nKCk7CiAgICAgaWYgKHNpemUgPT0gMSkgewogICAgICAgICBVQ2hh
ciBjID0gcy5jaGFyYWN0ZXJBdCgwKTsKICAgICAgICAgaWYgKGMgPD0gbWF4U2luZ2xlQ2hhcmFj
dGVyU3RyaW5nKQotICAgICAgICAgICAgcmV0dXJuIHZtLT5zbWFsbFN0cmluZ3Muc2luZ2xlQ2hh
cmFjdGVyU3RyaW5nKGMpOworICAgICAgICAgICAgcmV0dXJuIHZtLnNtYWxsU3RyaW5ncy5zaW5n
bGVDaGFyYWN0ZXJTdHJpbmcoYyk7CiAgICAgfQotICAgIHJldHVybiBKU1N0cmluZzo6Y3JlYXRl
SGFzT3RoZXJPd25lcigqdm0sICpzLmltcGwoKSk7CisgICAgcmV0dXJuIEpTU3RyaW5nOjpjcmVh
dGVIYXNPdGhlck93bmVyKHZtLCAqcy5pbXBsKCkpOwogfQogCi1pbmxpbmUgSlNTdHJpbmcqIGpz
RW1wdHlTdHJpbmcoRXhlY1N0YXRlKiBleGVjKSB7IHJldHVybiBqc0VtcHR5U3RyaW5nKCZleGVj
LT52bSgpKTsgfQotaW5saW5lIEpTU3RyaW5nKiBqc1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IFN0cmluZyYgcykgeyByZXR1cm4ganNTdHJpbmcoJmV4ZWMtPnZtKCksIHMpOyB9Ci1pbmxp
bmUgSlNTdHJpbmcqIGpzU2luZ2xlQ2hhcmFjdGVyU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgVUNo
YXIgYykgeyByZXR1cm4ganNTaW5nbGVDaGFyYWN0ZXJTdHJpbmcoJmV4ZWMtPnZtKCksIGMpOyB9
Ci1pbmxpbmUgSlNTdHJpbmcqIGpzTm9udHJpdmlhbFN0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IFN0cmluZyYgcykgeyByZXR1cm4ganNOb250cml2aWFsU3RyaW5nKCZleGVjLT52bSgpLCBz
KTsgfQotaW5saW5lIEpTU3RyaW5nKiBqc05vbnRyaXZpYWxTdHJpbmcoRXhlY1N0YXRlKiBleGVj
LCBTdHJpbmcmJiBzKSB7IHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcoJmV4ZWMtPnZtKCksIFdU
Rk1vdmUocykpOyB9Ci1pbmxpbmUgSlNTdHJpbmcqIGpzT3duZWRTdHJpbmcoRXhlY1N0YXRlKiBl
eGVjLCBjb25zdCBTdHJpbmcmIHMpIHsgcmV0dXJuIGpzT3duZWRTdHJpbmcoJmV4ZWMtPnZtKCks
IHMpOyB9Ci0KIEFMV0FZU19JTkxJTkUgSlNTdHJpbmcqIGpzU3RyaW5nV2l0aENhY2hlKEV4ZWNT
dGF0ZSogZXhlYywgY29uc3QgU3RyaW5nJiBzKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CiAgICAgU3RyaW5nSW1wbCogc3RyaW5nSW1wbCA9IHMuaW1wbCgpOwogICAgIGlmICghc3RyaW5n
SW1wbCB8fCAhc3RyaW5nSW1wbC0+bGVuZ3RoKCkpCi0gICAgICAgIHJldHVybiBqc0VtcHR5U3Ry
aW5nKCZ2bSk7CisgICAgICAgIHJldHVybiBqc0VtcHR5U3RyaW5nKHZtKTsKIAogICAgIGlmIChz
dHJpbmdJbXBsLT5sZW5ndGgoKSA9PSAxKSB7CiAgICAgICAgIFVDaGFyIHNpbmdsZUNoYXJhY3Rl
ciA9ICgqc3RyaW5nSW1wbClbMHVdOwpAQCAtOTgwLDcgKzk3Miw3IEBAIGlubGluZSBib29sIGlz
SlNTdHJpbmcoSlNWYWx1ZSB2KQogQUxXQVlTX0lOTElORSBTdHJpbmdWaWV3IEpTUm9wZVN0cmlu
Zzo6dW5zYWZlVmlldyhFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiB7CiAgICAgaWYgKHZhbGlkYXRl
REZHRG9lc0dDKQotICAgICAgICBSRUxFQVNFX0FTU0VSVCh2bSgpLT5oZWFwLmV4cGVjdERvZXNH
QygpKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQodm0oKS5oZWFwLmV4cGVjdERvZXNHQygpKTsK
ICAgICBpZiAoaXNTdWJzdHJpbmcoKSkgewogICAgICAgICBhdXRvJiBiYXNlID0gc3Vic3RyaW5n
QmFzZSgpLT52YWx1ZUludGVybmFsKCk7CiAgICAgICAgIGlmIChiYXNlLmlzOEJpdCgpKQpAQCAt
OTkzLDcgKzk4NSw3IEBAIEFMV0FZU19JTkxJTkUgU3RyaW5nVmlldyBKU1JvcGVTdHJpbmc6OnUK
IEFMV0FZU19JTkxJTkUgU3RyaW5nVmlld1dpdGhVbmRlcmx5aW5nU3RyaW5nIEpTUm9wZVN0cmlu
Zzo6dmlld1dpdGhVbmRlcmx5aW5nU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKIHsKICAg
ICBpZiAodmFsaWRhdGVERkdEb2VzR0MpCi0gICAgICAgIFJFTEVBU0VfQVNTRVJUKHZtKCktPmhl
YXAuZXhwZWN0RG9lc0dDKCkpOworICAgICAgICBSRUxFQVNFX0FTU0VSVCh2bSgpLmhlYXAuZXhw
ZWN0RG9lc0dDKCkpOwogICAgIGlmIChpc1N1YnN0cmluZygpKSB7CiAgICAgICAgIGF1dG8mIGJh
c2UgPSBzdWJzdHJpbmdCYXNlKCktPnZhbHVlSW50ZXJuYWwoKTsKICAgICAgICAgaWYgKGJhc2Uu
aXM4Qml0KCkpCkBAIC0xMDA3LDcgKzk5OSw3IEBAIEFMV0FZU19JTkxJTkUgU3RyaW5nVmlld1dp
dGhVbmRlcmx5aW5nU3QKIEFMV0FZU19JTkxJTkUgU3RyaW5nVmlldyBKU1N0cmluZzo6dW5zYWZl
VmlldyhFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiB7CiAgICAgaWYgKHZhbGlkYXRlREZHRG9lc0dD
KQotICAgICAgICBSRUxFQVNFX0FTU0VSVCh2bSgpLT5oZWFwLmV4cGVjdERvZXNHQygpKTsKKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlQodm0oKS5oZWFwLmV4cGVjdERvZXNHQygpKTsKICAgICBpZiAo
aXNSb3BlKCkpCiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBKU1JvcGVTdHJpbmcq
Pih0aGlzKS0+dW5zYWZlVmlldyhleGVjKTsKICAgICByZXR1cm4gdmFsdWVJbnRlcm5hbCgpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdJbmxpbmVzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdJbmxpbmVz
LmgJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
U3RyaW5nSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNi0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDQsOSArNDQsOSBAQCBib29sIEpT
U3RyaW5nOjplcXVhbChFeGVjU3RhdGUqIGV4ZWMsIEpTCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1l
IFN0cmluZ1R5cGU+Ci1pbmxpbmUgSlNWYWx1ZSBqc01ha2VOb250cml2aWFsU3RyaW5nKEV4ZWNT
dGF0ZSogZXhlYywgU3RyaW5nVHlwZSYmIHN0cmluZykKK2lubGluZSBKU1ZhbHVlIGpzTWFrZU5v
bnRyaXZpYWxTdHJpbmcoVk0mIHZtLCBTdHJpbmdUeXBlJiYgc3RyaW5nKQogewotICAgIHJldHVy
biBqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywgc3RkOjpmb3J3YXJkPFN0cmluZ1R5cGU+KHN0cmlu
ZykpOworICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcodm0sIHN0ZDo6Zm9yd2FyZDxTdHJp
bmdUeXBlPihzdHJpbmcpKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgU3RyaW5nVHlwZSwgdHlw
ZW5hbWUuLi4gU3RyaW5nVHlwZXM+CkBAIC01OCw3ICs1OCw3IEBAIGlubGluZSBKU1ZhbHVlIGpz
TWFrZU5vbnRyaXZpYWxTdHJpbmcoRXgKICAgICBpZiAoVU5MSUtFTFkoIXJlc3VsdCkpCiAgICAg
ICAgIHJldHVybiB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYywgc2NvcGUpOwogICAgIEFTU0VS
VChyZXN1bHQubGVuZ3RoKCkgPD0gSlNTdHJpbmc6Ok1heExlbmd0aCk7Ci0gICAgcmV0dXJuIGpz
Tm9udHJpdmlhbFN0cmluZyhleGVjLCBXVEZNb3ZlKHJlc3VsdCkpOworICAgIHJldHVybiBqc05v
bnRyaXZpYWxTdHJpbmcodm0sIFdURk1vdmUocmVzdWx0KSk7CiB9CiAKIHRlbXBsYXRlIDx0eXBl
bmFtZSBDaGFyYWN0ZXJUeXBlPgpAQCAtNzYsNyArNzYsNyBAQCBpbmxpbmUgSlNTdHJpbmcqIHJl
cGVhdENoYXJhY3RlcihFeGVjU3RhCiAKICAgICBzdGQ6OmZpbGxfbihidWZmZXIsIHJlcGVhdENv
dW50LCBjaGFyYWN0ZXIpOwogCi0gICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBqc1N0cmlu
ZygmZXhlYywgV1RGTW92ZShpbXBsKSkpOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwg
anNTdHJpbmcodm0sIFdURk1vdmUoaW1wbCkpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZ0pvaW5lci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdKb2luZXIu
Y3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1N0cmluZ0pvaW5lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDEyLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMTEsNyArMTExLDcgQEAgSlNW
YWx1ZSBKU1N0cmluZ0pvaW5lcjo6am9pbihFeGVjU3RhdGUmIAogICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIEpTVmFsdWUoKSk7CiAKICAgICBpZiAoIWxlbmd0aCkKLSAgICAgICAgcmV0
dXJuIGpzRW1wdHlTdHJpbmcoJnN0YXRlKTsKKyAgICAgICAgcmV0dXJuIGpzRW1wdHlTdHJpbmco
dm0pOwogCiAgICAgU3RyaW5nIHJlc3VsdDsKICAgICBpZiAobV9pc0FsbDhCaXQpCkBAIC0xMjIs
NyArMTIyLDcgQEAgSlNWYWx1ZSBKU1N0cmluZ0pvaW5lcjo6am9pbihFeGVjU3RhdGUmIAogICAg
IGlmIChyZXN1bHQuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiB0aHJvd091dE9mTWVtb3J5RXJy
b3IoJnN0YXRlLCBzY29wZSk7CiAKLSAgICByZXR1cm4ganNTdHJpbmcoJnN0YXRlLCBXVEZNb3Zl
KHJlc3VsdCkpOworICAgIHJldHVybiBqc1N0cmluZyh2bSwgV1RGTW92ZShyZXN1bHQpKTsKIH0K
IAogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9i
amVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNT
eW1ib2xUYWJsZU9iamVjdC5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTU1LDYgKzU1LDcgQEAgYm9vbCBKU1N5bWJvbFRhYmxlT2JqZWN0OjpkZWxldGVQcm9wZXJ0
eQogCiB2b2lkIEpTU3ltYm9sVGFibGVPYmplY3Q6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1l
cyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBw
cm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKKyAgICBWTSYgdm0gPSBleGVj
LT52bSgpOwogICAgIEpTU3ltYm9sVGFibGVPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNT
eW1ib2xUYWJsZU9iamVjdCo+KG9iamVjdCk7CiAgICAgewogICAgICAgICBDb25jdXJyZW50SlNM
b2NrZXIgbG9ja2VyKHRoaXNPYmplY3QtPnN5bWJvbFRhYmxlKCktPm1fbG9jayk7CkBAIC02Myw3
ICs2NCw3IEBAIHZvaWQgSlNTeW1ib2xUYWJsZU9iamVjdDo6Z2V0T3duTm9uSW5kZXgKICAgICAg
ICAgICAgIGlmICghKGl0LT52YWx1ZS5nZXRBdHRyaWJ1dGVzKCkgJiBQcm9wZXJ0eUF0dHJpYnV0
ZTo6RG9udEVudW0pIHx8IG1vZGUuaW5jbHVkZURvbnRFbnVtUHJvcGVydGllcygpKSB7CiAgICAg
ICAgICAgICAgICAgaWYgKGl0LT5rZXktPmlzU3ltYm9sKCkgJiYgIXByb3BlcnR5TmFtZXMuaW5j
bHVkZVN5bWJvbFByb3BlcnRpZXMoKSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbVVpZChleGVj
LCBpdC0+a2V5LmdldCgpKSk7CisgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRl
bnRpZmllcjo6ZnJvbVVpZCh2bSwgaXQtPmtleS5nZXQoKSkpOwogICAgICAgICAgICAgfQogICAg
ICAgICB9CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUZW1w
bGF0ZU9iamVjdERlc2NyaXB0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTVGVtcGxhdGVPYmplY3REZXNjcmlwdG9yLmNwcAkocmV2aXNpb24gMjQ5
MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUZW1wbGF0ZU9iamVjdERl
c2NyaXB0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHly
aWdodCAoQykgMjAxNSBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+LgotICog
Q29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNi0yMDE5IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjgsMTIgKzY4LDEyIEBAIEpTQXJyYXkq
IEpTVGVtcGxhdGVPYmplY3REZXNjcmlwdG9yOjpjcmUKICAgICBmb3IgKHVuc2lnbmVkIGluZGV4
ID0gMDsgaW5kZXggPCBjb3VudDsgKytpbmRleCkgewogICAgICAgICBhdXRvIGNvb2tlZCA9IGRl
c2NyaXB0b3IoKS5jb29rZWRTdHJpbmdzKClbaW5kZXhdOwogICAgICAgICBpZiAoY29va2VkKQot
ICAgICAgICAgICAgdGVtcGxhdGVPYmplY3QtPnB1dERpcmVjdEluZGV4KGV4ZWMsIGluZGV4LCBq
c1N0cmluZyhleGVjLCBjb29rZWQudmFsdWUoKSksIFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25s
eSB8IFByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlLCBQdXREaXJlY3RJbmRleExpa2VQdXRE
aXJlY3QpOworICAgICAgICAgICAgdGVtcGxhdGVPYmplY3QtPnB1dERpcmVjdEluZGV4KGV4ZWMs
IGluZGV4LCBqc1N0cmluZyh2bSwgY29va2VkLnZhbHVlKCkpLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6
UmVhZE9ubHkgfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSwgUHV0RGlyZWN0SW5kZXhM
aWtlUHV0RGlyZWN0KTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgdGVtcGxhdGVPYmplY3Qt
PnB1dERpcmVjdEluZGV4KGV4ZWMsIGluZGV4LCBqc1VuZGVmaW5lZCgpLCBQcm9wZXJ0eUF0dHJp
YnV0ZTo6UmVhZE9ubHkgfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSwgUHV0RGlyZWN0
SW5kZXhMaWtlUHV0RGlyZWN0KTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
bnVsbHB0cik7CiAKLSAgICAgICAgcmF3T2JqZWN0LT5wdXREaXJlY3RJbmRleChleGVjLCBpbmRl
eCwganNTdHJpbmcoZXhlYywgZGVzY3JpcHRvcigpLnJhd1N0cmluZ3MoKVtpbmRleF0pLCBQcm9w
ZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSwg
UHV0RGlyZWN0SW5kZXhMaWtlUHV0RGlyZWN0KTsKKyAgICAgICAgcmF3T2JqZWN0LT5wdXREaXJl
Y3RJbmRleChleGVjLCBpbmRleCwganNTdHJpbmcodm0sIGRlc2NyaXB0b3IoKS5yYXdTdHJpbmdz
KClbaW5kZXhdKSwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgUHJvcGVydHlBdHRyaWJ1
dGU6OkRvbnREZWxldGUsIFB1dERpcmVjdEluZGV4TGlrZVB1dERpcmVjdCk7CiAgICAgICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwogICAgIH0KIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5Vmll
d1Byb3RvdHlwZS5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTVHlwZWRBcnJheVZpZXdQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMjU3LDIzICsyNTcsMjMgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
dHlwZQogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgc3dpdGNoICh0aGlzVmFsdWUuZ2V0
T2JqZWN0KCktPmNsYXNzSW5mbyh2bSktPnR5cGVkQXJyYXlTdG9yYWdlVHlwZSkgewogICAgIGNh
c2UgVHlwZVVpbnQ4Q2xhbXBlZDoKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0
cmluZygmdm0sICJVaW50OENsYW1wZWRBcnJheSIpKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1N0cmluZyh2bSwgIlVpbnQ4Q2xhbXBlZEFycmF5IikpOwogICAgIGNhc2UgVHlw
ZUludDMyOgotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKCZ2bSwgIklu
dDMyQXJyYXkiKSk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcodm0s
ICJJbnQzMkFycmF5IikpOwogICAgIGNhc2UgVHlwZVVpbnQzMjoKLSAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1N0cmluZygmdm0sICJVaW50MzJBcnJheSIpKTsKKyAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyh2bSwgIlVpbnQzMkFycmF5IikpOwogICAgIGNh
c2UgVHlwZUZsb2F0NjQ6Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmco
JnZtLCAiRmxvYXQ2NEFycmF5IikpOworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
U3RyaW5nKHZtLCAiRmxvYXQ2NEFycmF5IikpOwogICAgIGNhc2UgVHlwZUZsb2F0MzI6Ci0gICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcoJnZtLCAiRmxvYXQzMkFycmF5Iikp
OworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKHZtLCAiRmxvYXQzMkFy
cmF5IikpOwogICAgIGNhc2UgVHlwZUludDg6Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNTdHJpbmcoJnZtLCAiSW50OEFycmF5IikpOworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzU3RyaW5nKHZtLCAiSW50OEFycmF5IikpOwogICAgIGNhc2UgVHlwZVVpbnQ4Ogot
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKCZ2bSwgIlVpbnQ4QXJyYXki
KSk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcodm0sICJVaW50OEFy
cmF5IikpOwogICAgIGNhc2UgVHlwZUludDE2OgotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzU3RyaW5nKCZ2bSwgIkludDE2QXJyYXkiKSk7CisgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNTdHJpbmcodm0sICJJbnQxNkFycmF5IikpOwogICAgIGNhc2UgVHlwZVVpbnQx
NjoKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZygmdm0sICJVaW50MTZB
cnJheSIpKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyh2bSwgIlVp
bnQxNkFycmF5IikpOwogICAgIGNhc2UgTm90VHlwZWRBcnJheToKICAgICBjYXNlIFR5cGVEYXRh
VmlldzoKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xhenlDbGFzc1N0cnVjdHVyZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTGF6eUNsYXNzU3Ry
dWN0dXJlLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvTGF6eUNsYXNzU3RydWN0dXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04NCw3ICs4NCw3IEBA
IHZvaWQgTGF6eUNsYXNzU3RydWN0dXJlOjpJbml0aWFsaXplcjo6c2UKICAgICBlbHNlCiAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgCi0gICAgc2V0Q29uc3RydWN0
b3IoSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIG5hbWUpLCBjb25zdHJ1Y3Rvcik7CisgICAg
c2V0Q29uc3RydWN0b3IoSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgbmFtZSksIGNvbnN0cnVj
dG9yKTsKIH0KIAogdm9pZCBMYXp5Q2xhc3NTdHJ1Y3R1cmU6OnZpc2l0KFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTGF6eVByb3BlcnR5
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTGF6eVByb3Bl
cnR5LmgJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0xhenlQcm9wZXJ0eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQwLDcgKzQwLDcgQEAgY2xhc3MgTGF6eVBy
b3BlcnR5IHsKIHB1YmxpYzoKICAgICBzdHJ1Y3QgSW5pdGlhbGl6ZXIgewogICAgICAgICBJbml0
aWFsaXplcihPd25lclR5cGUqIG93bmVyLCBMYXp5UHJvcGVydHkmIHByb3BlcnR5KQotICAgICAg
ICAgICAgOiB2bSgqSGVhcDo6aGVhcChvd25lciktPnZtKCkpCisgICAgICAgICAgICA6IHZtKEhl
YXA6OmhlYXAob3duZXIpLT52bSgpKQogICAgICAgICAgICAgLCBvd25lcihvd25lcikKICAgICAg
ICAgICAgICwgcHJvcGVydHkocHJvcGVydHkpCiAgICAgICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0xpdGVyYWxQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xpdGVyYWxQYXJzZXIuY3BwCShyZXZpc2lvbiAyNDkx
MjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9MaXRlcmFsUGFyc2VyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkt
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDktMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgTWF0aGlhcyBCeW5lbnMgKG1hdGhpYXNAcWl3aS5iZSkKICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
QEAgLTU5LDE3ICs1OSwxNyBAQCBib29sIExpdGVyYWxQYXJzZXI8Q2hhclR5cGU+Ojp0cnlKU09O
UFBhCiAgICAgZG8gewogICAgICAgICBWZWN0b3I8SlNPTlBQYXRoRW50cnk+IHBhdGg7CiAgICAg
ICAgIC8vIFVuZ3VhcmRlZCBuZXh0IHRvIHN0YXJ0IG9mZiB0aGUgbGV4ZXIKLSAgICAgICAgSWRl
bnRpZmllciBuYW1lID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIG1fbGV4ZXIuY3VycmVu
dFRva2VuKCktPnN0YXJ0LCBtX2xleGVyLmN1cnJlbnRUb2tlbigpLT5lbmQgLSBtX2xleGVyLmN1
cnJlbnRUb2tlbigpLT5zdGFydCk7CisgICAgICAgIElkZW50aWZpZXIgbmFtZSA9IElkZW50aWZp
ZXI6OmZyb21TdHJpbmcodm0sIG1fbGV4ZXIuY3VycmVudFRva2VuKCktPnN0YXJ0LCBtX2xleGVy
LmN1cnJlbnRUb2tlbigpLT5lbmQgLSBtX2xleGVyLmN1cnJlbnRUb2tlbigpLT5zdGFydCk7CiAg
ICAgICAgIEpTT05QUGF0aEVudHJ5IGVudHJ5OwogICAgICAgICBpZiAobmFtZSA9PSB2bS5wcm9w
ZXJ0eU5hbWVzLT52YXJLZXl3b3JkKSB7CiAgICAgICAgICAgICBpZiAobV9sZXhlci5uZXh0KCkg
IT0gVG9rSWRlbnRpZmllcikKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
ICAgICBlbnRyeS5tX3R5cGUgPSBKU09OUFBhdGhFbnRyeVR5cGVEZWNsYXJlVmFyOwotICAgICAg
ICAgICAgZW50cnkubV9wYXRoRW50cnlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0s
IG1fbGV4ZXIuY3VycmVudFRva2VuKCktPnN0YXJ0LCBtX2xleGVyLmN1cnJlbnRUb2tlbigpLT5l
bmQgLSBtX2xleGVyLmN1cnJlbnRUb2tlbigpLT5zdGFydCk7CisgICAgICAgICAgICBlbnRyeS5t
X3BhdGhFbnRyeU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBtX2xleGVyLmN1cnJl
bnRUb2tlbigpLT5zdGFydCwgbV9sZXhlci5jdXJyZW50VG9rZW4oKS0+ZW5kIC0gbV9sZXhlci5j
dXJyZW50VG9rZW4oKS0+c3RhcnQpOwogICAgICAgICAgICAgcGF0aC5hcHBlbmQoZW50cnkpOwog
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgZW50cnkubV90eXBlID0gSlNPTlBQYXRoRW50
cnlUeXBlRG90OwotICAgICAgICAgICAgZW50cnkubV9wYXRoRW50cnlOYW1lID0gSWRlbnRpZmll
cjo6ZnJvbVN0cmluZygmdm0sIG1fbGV4ZXIuY3VycmVudFRva2VuKCktPnN0YXJ0LCBtX2xleGVy
LmN1cnJlbnRUb2tlbigpLT5lbmQgLSBtX2xleGVyLmN1cnJlbnRUb2tlbigpLT5zdGFydCk7Cisg
ICAgICAgICAgICBlbnRyeS5tX3BhdGhFbnRyeU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KHZtLCBtX2xleGVyLmN1cnJlbnRUb2tlbigpLT5zdGFydCwgbV9sZXhlci5jdXJyZW50VG9rZW4o
KS0+ZW5kIC0gbV9sZXhlci5jdXJyZW50VG9rZW4oKS0+c3RhcnQpOwogICAgICAgICAgICAgcGF0
aC5hcHBlbmQoZW50cnkpOwogICAgICAgICB9CiAgICAgICAgIGlmIChpc0xleGVyS2V5d29yZChl
bnRyeS5tX3BhdGhFbnRyeU5hbWUpKQpAQCAtOTYsNyArOTYsNyBAQCBib29sIExpdGVyYWxQYXJz
ZXI8Q2hhclR5cGU+Ojp0cnlKU09OUFBhCiAgICAgICAgICAgICAgICAgZW50cnkubV90eXBlID0g
SlNPTlBQYXRoRW50cnlUeXBlRG90OwogICAgICAgICAgICAgICAgIGlmIChtX2xleGVyLm5leHQo
KSAhPSBUb2tJZGVudGlmaWVyKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgICAgICAgICAgZW50cnkubV9wYXRoRW50cnlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbVN0
cmluZygmdm0sIG1fbGV4ZXIuY3VycmVudFRva2VuKCktPnN0YXJ0LCBtX2xleGVyLmN1cnJlbnRU
b2tlbigpLT5lbmQgLSBtX2xleGVyLmN1cnJlbnRUb2tlbigpLT5zdGFydCk7CisgICAgICAgICAg
ICAgICAgZW50cnkubV9wYXRoRW50cnlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwg
bV9sZXhlci5jdXJyZW50VG9rZW4oKS0+c3RhcnQsIG1fbGV4ZXIuY3VycmVudFRva2VuKCktPmVu
ZCAtIG1fbGV4ZXIuY3VycmVudFRva2VuKCktPnN0YXJ0KTsKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNhc2UgVG9rTFBhcmVuOiB7CkBAIC0xMzYs
NDAgKzEzNiw0MiBAQCBib29sIExpdGVyYWxQYXJzZXI8Q2hhclR5cGU+Ojp0cnlKU09OUFBhCiB0
ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhclR5cGU+CiBBTFdBWVNfSU5MSU5FIGNvbnN0IElkZW50aWZp
ZXIgTGl0ZXJhbFBhcnNlcjxDaGFyVHlwZT46Om1ha2VJZGVudGlmaWVyKGNvbnN0IExDaGFyKiBj
aGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoKQogeworICAgIFZNJiB2bSA9IG1fZXhlYy0+dm0oKTsK
ICAgICBpZiAoIWxlbmd0aCkKLSAgICAgICAgcmV0dXJuIG1fZXhlYy0+dm0oKS5wcm9wZXJ0eU5h
bWVzLT5lbXB0eUlkZW50aWZpZXI7CisgICAgICAgIHJldHVybiB2bS5wcm9wZXJ0eU5hbWVzLT5l
bXB0eUlkZW50aWZpZXI7CiAgICAgaWYgKGNoYXJhY3RlcnNbMF0gPj0gTWF4aW11bUNhY2hhYmxl
Q2hhcmFjdGVyKQotICAgICAgICByZXR1cm4gSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmbV9leGVj
LT52bSgpLCBjaGFyYWN0ZXJzLCBsZW5ndGgpOworICAgICAgICByZXR1cm4gSWRlbnRpZmllcjo6
ZnJvbVN0cmluZyh2bSwgY2hhcmFjdGVycywgbGVuZ3RoKTsKIAogICAgIGlmIChsZW5ndGggPT0g
MSkgewogICAgICAgICBpZiAoIW1fc2hvcnRJZGVudGlmaWVyc1tjaGFyYWN0ZXJzWzBdXS5pc051
bGwoKSkKICAgICAgICAgICAgIHJldHVybiBtX3Nob3J0SWRlbnRpZmllcnNbY2hhcmFjdGVyc1sw
XV07Ci0gICAgICAgIG1fc2hvcnRJZGVudGlmaWVyc1tjaGFyYWN0ZXJzWzBdXSA9IElkZW50aWZp
ZXI6OmZyb21TdHJpbmcoJm1fZXhlYy0+dm0oKSwgY2hhcmFjdGVycywgbGVuZ3RoKTsKKyAgICAg
ICAgbV9zaG9ydElkZW50aWZpZXJzW2NoYXJhY3RlcnNbMF1dID0gSWRlbnRpZmllcjo6ZnJvbVN0
cmluZyh2bSwgY2hhcmFjdGVycywgbGVuZ3RoKTsKICAgICAgICAgcmV0dXJuIG1fc2hvcnRJZGVu
dGlmaWVyc1tjaGFyYWN0ZXJzWzBdXTsKICAgICB9CiAgICAgaWYgKCFtX3JlY2VudElkZW50aWZp
ZXJzW2NoYXJhY3RlcnNbMF1dLmlzTnVsbCgpICYmIElkZW50aWZpZXI6OmVxdWFsKG1fcmVjZW50
SWRlbnRpZmllcnNbY2hhcmFjdGVyc1swXV0uaW1wbCgpLCBjaGFyYWN0ZXJzLCBsZW5ndGgpKQog
ICAgICAgICByZXR1cm4gbV9yZWNlbnRJZGVudGlmaWVyc1tjaGFyYWN0ZXJzWzBdXTsKLSAgICBt
X3JlY2VudElkZW50aWZpZXJzW2NoYXJhY3RlcnNbMF1dID0gSWRlbnRpZmllcjo6ZnJvbVN0cmlu
ZygmbV9leGVjLT52bSgpLCBjaGFyYWN0ZXJzLCBsZW5ndGgpOworICAgIG1fcmVjZW50SWRlbnRp
ZmllcnNbY2hhcmFjdGVyc1swXV0gPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBjaGFyYWN0
ZXJzLCBsZW5ndGgpOwogICAgIHJldHVybiBtX3JlY2VudElkZW50aWZpZXJzW2NoYXJhY3RlcnNb
MF1dOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhclR5cGU+CiBBTFdBWVNfSU5MSU5FIGNv
bnN0IElkZW50aWZpZXIgTGl0ZXJhbFBhcnNlcjxDaGFyVHlwZT46Om1ha2VJZGVudGlmaWVyKGNv
bnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoKQogeworICAgIFZNJiB2bSA9IG1f
ZXhlYy0+dm0oKTsKICAgICBpZiAoIWxlbmd0aCkKLSAgICAgICAgcmV0dXJuIG1fZXhlYy0+dm0o
KS5wcm9wZXJ0eU5hbWVzLT5lbXB0eUlkZW50aWZpZXI7CisgICAgICAgIHJldHVybiB2bS5wcm9w
ZXJ0eU5hbWVzLT5lbXB0eUlkZW50aWZpZXI7CiAgICAgaWYgKGNoYXJhY3RlcnNbMF0gPj0gTWF4
aW11bUNhY2hhYmxlQ2hhcmFjdGVyKQotICAgICAgICByZXR1cm4gSWRlbnRpZmllcjo6ZnJvbVN0
cmluZygmbV9leGVjLT52bSgpLCBjaGFyYWN0ZXJzLCBsZW5ndGgpOworICAgICAgICByZXR1cm4g
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgY2hhcmFjdGVycywgbGVuZ3RoKTsKIAogICAgIGlm
IChsZW5ndGggPT0gMSkgewogICAgICAgICBpZiAoIW1fc2hvcnRJZGVudGlmaWVyc1tjaGFyYWN0
ZXJzWzBdXS5pc051bGwoKSkKICAgICAgICAgICAgIHJldHVybiBtX3Nob3J0SWRlbnRpZmllcnNb
Y2hhcmFjdGVyc1swXV07Ci0gICAgICAgIG1fc2hvcnRJZGVudGlmaWVyc1tjaGFyYWN0ZXJzWzBd
XSA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJm1fZXhlYy0+dm0oKSwgY2hhcmFjdGVycywgbGVu
Z3RoKTsKKyAgICAgICAgbV9zaG9ydElkZW50aWZpZXJzW2NoYXJhY3RlcnNbMF1dID0gSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZyh2bSwgY2hhcmFjdGVycywgbGVuZ3RoKTsKICAgICAgICAgcmV0dXJu
IG1fc2hvcnRJZGVudGlmaWVyc1tjaGFyYWN0ZXJzWzBdXTsKICAgICB9CiAgICAgaWYgKCFtX3Jl
Y2VudElkZW50aWZpZXJzW2NoYXJhY3RlcnNbMF1dLmlzTnVsbCgpICYmIElkZW50aWZpZXI6OmVx
dWFsKG1fcmVjZW50SWRlbnRpZmllcnNbY2hhcmFjdGVyc1swXV0uaW1wbCgpLCBjaGFyYWN0ZXJz
LCBsZW5ndGgpKQogICAgICAgICByZXR1cm4gbV9yZWNlbnRJZGVudGlmaWVyc1tjaGFyYWN0ZXJz
WzBdXTsKLSAgICBtX3JlY2VudElkZW50aWZpZXJzW2NoYXJhY3RlcnNbMF1dID0gSWRlbnRpZmll
cjo6ZnJvbVN0cmluZygmbV9leGVjLT52bSgpLCBjaGFyYWN0ZXJzLCBsZW5ndGgpOworICAgIG1f
cmVjZW50SWRlbnRpZmllcnNbY2hhcmFjdGVyc1swXV0gPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KHZtLCBjaGFyYWN0ZXJzLCBsZW5ndGgpOwogICAgIHJldHVybiBtX3JlY2VudElkZW50aWZpZXJz
W2NoYXJhY3RlcnNbMF1dOwogfQogCkBAIC05NjEsOSArOTYzLDkgQEAgSlNWYWx1ZSBMaXRlcmFs
UGFyc2VyPENoYXJUeXBlPjo6cGFyc2UoUAogICAgICAgICAgICAgICAgICAgICBjYXNlIFRva1N0
cmluZzogewogICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgTGV4ZXI6OkxpdGVyYWxQ
YXJzZXJUb2tlblB0ciBzdHJpbmdUb2tlbiA9IG1fbGV4ZXIuY3VycmVudFRva2VuKCk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoc3RyaW5nVG9rZW4tPnN0cmluZ0lzOEJpdCkKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBsYXN0VmFsdWUgPSBqc1N0cmluZyhtX2V4ZWMsIG1ha2VJ
ZGVudGlmaWVyKHN0cmluZ1Rva2VuLT5zdHJpbmdUb2tlbjgsIHN0cmluZ1Rva2VuLT5zdHJpbmdM
ZW5ndGgpLnN0cmluZygpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0VmFsdWUg
PSBqc1N0cmluZyh2bSwgbWFrZUlkZW50aWZpZXIoc3RyaW5nVG9rZW4tPnN0cmluZ1Rva2VuOCwg
c3RyaW5nVG9rZW4tPnN0cmluZ0xlbmd0aCkuc3RyaW5nKCkpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RWYWx1ZSA9IGpzU3Ry
aW5nKG1fZXhlYywgbWFrZUlkZW50aWZpZXIoc3RyaW5nVG9rZW4tPnN0cmluZ1Rva2VuMTYsIHN0
cmluZ1Rva2VuLT5zdHJpbmdMZW5ndGgpLnN0cmluZygpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBsYXN0VmFsdWUgPSBqc1N0cmluZyh2bSwgbWFrZUlkZW50aWZpZXIoc3RyaW5nVG9r
ZW4tPnN0cmluZ1Rva2VuMTYsIHN0cmluZ1Rva2VuLT5zdHJpbmdMZW5ndGgpLnN0cmluZygpKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgIG1fbGV4ZXIubmV4dCgpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0xvb2t1cC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0xvb2t1cC5oCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Mb29rdXAuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYg
QEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5A
a2RlLm9yZykKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtMzk5LDcgKzM5OSw3IEBA
IGlubGluZSB2b2lkIHJlaWZ5U3RhdGljUHJvcGVydGllcyhWTSYgdm0KICAgICBmb3IgKGF1dG8m
IHZhbHVlIDogdmFsdWVzKSB7CiAgICAgICAgIGlmICghdmFsdWUubV9rZXkpCiAgICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgYXV0byBrZXkgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2
bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KHZhbHVlLm1fa2V5KSwgc3RybGVuKHZh
bHVlLm1fa2V5KSk7CisgICAgICAgIGF1dG8ga2V5ID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2
bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KHZhbHVlLm1fa2V5KSwgc3RybGVuKHZh
bHVlLm1fa2V5KSk7CiAgICAgICAgIHJlaWZ5U3RhdGljUHJvcGVydHkodm0sIGNsYXNzSW5mbywg
a2V5LCB2YWx1ZSwgdGhpc09iaik7CiAgICAgfQogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvTWFwSXRlcmF0b3JQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcEl0ZXJhdG9yUHJvdG90eXBlLmNwcAkocmV2aXNp
b24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwSXRlcmF0b3JQ
cm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMywgMjAxNiBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTkgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzgsNyArMzgsNyBAQCB2b2lkIE1h
cEl0ZXJhdG9yUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvCiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRp
b24odm0pOwogICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7CiAKLSAgICBwdXREaXJl
Y3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+dG9TdHJpbmdUYWdTeW1i
b2wsIGpzU3RyaW5nKCZ2bSwgIk1hcCBJdGVyYXRvciIpLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9u
dEVudW0gfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpOworICAgIHB1dERpcmVjdFdpdGhv
dXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT50b1N0cmluZ1RhZ1N5bWJvbCwganNT
dHJpbmcodm0sICJNYXAgSXRlcmF0b3IiKSwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtIHwg
UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KTsKICAgICBKU0NfQlVJTFRJTl9GVU5DVElPTl9X
SVRIT1VUX1RSQU5TSVRJT04odm0ucHJvcGVydHlOYW1lcy0+bmV4dCwgbWFwSXRlcmF0b3JQcm90
b3R5cGVOZXh0Q29kZUdlbmVyYXRvciwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0
cmlidXRlOjpEb250RW51bSkpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9NYXBQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL01hcFByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcFByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtNzMsNyArNzMsNyBAQCB2b2lkIE1hcFByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZt
CiAgICAgSlNGdW5jdGlvbiogZW50cmllcyA9IEpTRnVuY3Rpb246OmNyZWF0ZSh2bSwgbWFwUHJv
dG90eXBlRW50cmllc0NvZGVHZW5lcmF0b3Iodm0pLCBnbG9iYWxPYmplY3QpOwogICAgIHB1dERp
cmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMo
KS5lbnRyaWVzUHVibGljTmFtZSgpLCBlbnRyaWVzLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJv
cGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7CiAgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRp
b24odm0sIHZtLnByb3BlcnR5TmFtZXMtPml0ZXJhdG9yU3ltYm9sLCBlbnRyaWVzLCBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7Ci0gICAgcHV0RGly
ZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPnRvU3RyaW5nVGFnU3lt
Ym9sLCBqc1N0cmluZygmdm0sICJNYXAiKSwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtIHwg
UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KTsKKyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNp
dGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+dG9TdHJpbmdUYWdTeW1ib2wsIGpzU3RyaW5nKHZt
LCAiTWFwIiksIFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8IFByb3BlcnR5QXR0cmlidXRl
OjpSZWFkT25seSk7CiAKICAgICBKU0NfTkFUSVZFX0dFVFRFUl9XSVRIT1VUX1RSQU5TSVRJT04o
dm0ucHJvcGVydHlOYW1lcy0+c2l6ZSwgbWFwUHJvdG9GdW5jU2l6ZSwgUHJvcGVydHlBdHRyaWJ1
dGU6OkRvbnRFbnVtIHwgUHJvcGVydHlBdHRyaWJ1dGU6OkFjY2Vzc29yKTsKIH0KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hdGhPYmplY3QuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hdGhPYmplY3QuY3BwCShyZXZpc2lvbiAy
NDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXRoT2JqZWN0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5
LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmlnaHQgKEMpIDIw
MDctMjAwOCwgMjAxMywgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4K
KyAqICBDb3B5cmlnaHQgKEMpIDIwMDctMjAxOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2
ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC03OCw1MSArNzgsNTEgQEAgdm9pZCBNYXRoT2Jq
ZWN0OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIAogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZt
KTsKICAgICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOwogCi0gICAgcHV0RGlyZWN0V2l0
aG91dFRyYW5zaXRpb24odm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiRSIpLCBqc051
bWJlcihNYXRoOjpleHAoMS4wKSksIFByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgUHJv
cGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtIHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KTsK
LSAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zygmdm0sICJMTjIiKSwganNOdW1iZXIoTWF0aDo6bG9nKDIuMCkpLCBQcm9wZXJ0eUF0dHJpYnV0
ZTo6RG9udERlbGV0ZSB8IFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8IFByb3BlcnR5QXR0
cmlidXRlOjpSZWFkT25seSk7Ci0gICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiTE4xMCIpLCBqc051bWJlcihNYXRoOjpsb2coMTAu
MCkpLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IFByb3BlcnR5QXR0cmlidXRlOjpE
b250RW51bSB8IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSk7Ci0gICAgcHV0RGlyZWN0V2l0
aG91dFRyYW5zaXRpb24odm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiTE9HMkUiKSwg
anNOdW1iZXIoMS4wIC8gTWF0aDo6bG9nKDIuMCkpLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERl
bGV0ZSB8IFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8IFByb3BlcnR5QXR0cmlidXRlOjpS
ZWFkT25seSk7Ci0gICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIElkZW50aWZpZXI6
OmZyb21TdHJpbmcoJnZtLCAiTE9HMTBFIiksIGpzTnVtYmVyKDAuNDM0Mjk0NDgxOTAzMjUxOCks
IFByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRF
bnVtIHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KTsKLSAgICBwdXREaXJlY3RXaXRob3V0
VHJhbnNpdGlvbih2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJQSSIpLCBqc051bWJl
cihwaURvdWJsZSksIFByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgUHJvcGVydHlBdHRy
aWJ1dGU6OkRvbnRFbnVtIHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KTsKLSAgICBwdXRE
aXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJT
UVJUMV8yIiksIGpzTnVtYmVyKHNxcnQoMC41KSksIFByb3BlcnR5QXR0cmlidXRlOjpEb250RGVs
ZXRlIHwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtIHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJl
YWRPbmx5KTsKLSAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZygmdm0sICJTUVJUMiIpLCBqc051bWJlcihzcXJ0KDIuMCkpLCBQcm9wZXJ0eUF0
dHJpYnV0ZTo6RG9udERlbGV0ZSB8IFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8IFByb3Bl
cnR5QXR0cmlidXRlOjpSZWFkT25seSk7Ci0gICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24o
dm0sIHZtLnByb3BlcnR5TmFtZXMtPnRvU3RyaW5nVGFnU3ltYm9sLCBqc1N0cmluZygmdm0sICJN
YXRoIiksIFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8IFByb3BlcnR5QXR0cmlidXRlOjpS
ZWFkT25seSk7Ci0KLSAgICBwdXREaXJlY3ROYXRpdmVGdW5jdGlvbldpdGhvdXRUcmFuc2l0aW9u
KHZtLCBnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiYWJzIiksIDEs
IG1hdGhQcm90b0Z1bmNBYnMsIEFic0ludHJpbnNpYywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFBy
b3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOwotICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9u
V2l0aG91dFRyYW5zaXRpb24odm0sIGdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zygmdm0sICJhY29zIiksIDEsIG1hdGhQcm90b0Z1bmNBQ29zLCBBQ29zSW50cmluc2ljLCBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7Ci0gICAgcHV0
RGlyZWN0TmF0aXZlRnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImFzaW4iKSwgMSwgbWF0aFByb3RvRnVuY0FTaW4s
IEFTaW5JbnRyaW5zaWMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6
RG9udEVudW0pKTsKLSAgICBwdXREaXJlY3ROYXRpdmVGdW5jdGlvbldpdGhvdXRUcmFuc2l0aW9u
KHZtLCBnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiYXRhbiIpLCAx
LCBtYXRoUHJvdG9GdW5jQVRhbiwgQVRhbkludHJpbnNpYywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOwotICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0
aW9uV2l0aG91dFRyYW5zaXRpb24odm0sIGdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZygmdm0sICJhY29zaCIpLCAxLCBtYXRoUHJvdG9GdW5jQUNvc2gsIEFDb3NoSW50cmluc2lj
LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7Ci0g
ICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbih2bSwgZ2xvYmFsT2Jq
ZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImFzaW5oIiksIDEsIG1hdGhQcm90b0Z1
bmNBU2luaCwgQVNpbmhJbnRyaW5zaWMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0
dHJpYnV0ZTo6RG9udEVudW0pKTsKLSAgICBwdXREaXJlY3ROYXRpdmVGdW5jdGlvbldpdGhvdXRU
cmFuc2l0aW9uKHZtLCBnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAi
YXRhbmgiKSwgMSwgbWF0aFByb3RvRnVuY0FUYW5oLCBBVGFuaEludHJpbnNpYywgc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOwotICAgIHB1dERpcmVj
dE5hdGl2ZUZ1bmN0aW9uV2l0aG91dFRyYW5zaXRpb24odm0sIGdsb2JhbE9iamVjdCwgSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZygmdm0sICJhdGFuMiIpLCAyLCBtYXRoUHJvdG9GdW5jQVRhbjIsIE5v
SW50cmluc2ljLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRF
bnVtKSk7Ci0gICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbih2bSwg
Z2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImNicnQiKSwgMSwgbWF0
aFByb3RvRnVuY0NicnQsIENicnRJbnRyaW5zaWMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9w
ZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKLSAgICBwdXREaXJlY3ROYXRpdmVGdW5jdGlvbldp
dGhvdXRUcmFuc2l0aW9uKHZtLCBnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmco
JnZtLCAiY2VpbCIpLCAxLCBtYXRoUHJvdG9GdW5jQ2VpbCwgQ2VpbEludHJpbnNpYywgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOwotICAgIHB1dERp
cmVjdE5hdGl2ZUZ1bmN0aW9uV2l0aG91dFRyYW5zaXRpb24odm0sIGdsb2JhbE9iamVjdCwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJjbHozMiIpLCAxLCBtYXRoUHJvdG9GdW5jQ2x6MzIs
IENsejMySW50cmluc2ljLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6
OkRvbnRFbnVtKSk7Ci0gICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rpb25XaXRob3V0VHJhbnNpdGlv
bih2bSwgZ2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImNvcyIpLCAx
LCBtYXRoUHJvdG9GdW5jQ29zLCBDb3NJbnRyaW5zaWMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQ
cm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKLSAgICBwdXREaXJlY3ROYXRpdmVGdW5jdGlv
bldpdGhvdXRUcmFuc2l0aW9uKHZtLCBnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJp
bmcoJnZtLCAiY29zaCIpLCAxLCBtYXRoUHJvdG9GdW5jQ29zaCwgQ29zaEludHJpbnNpYywgc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOwotICAgIHB1
dERpcmVjdE5hdGl2ZUZ1bmN0aW9uV2l0aG91dFRyYW5zaXRpb24odm0sIGdsb2JhbE9iamVjdCwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJleHAiKSwgMSwgbWF0aFByb3RvRnVuY0V4cCwg
RXhwSW50cmluc2ljLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRv
bnRFbnVtKSk7Ci0gICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbih2
bSwgZ2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImV4cG0xIiksIDEs
IG1hdGhQcm90b0Z1bmNFeHBtMSwgRXhwbTFJbnRyaW5zaWMsIHN0YXRpY19jYXN0PHVuc2lnbmVk
PihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKLSAgICBwdXREaXJlY3ROYXRpdmVGdW5j
dGlvbldpdGhvdXRUcmFuc2l0aW9uKHZtLCBnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21T
dHJpbmcoJnZtLCAiZmxvb3IiKSwgMSwgbWF0aFByb3RvRnVuY0Zsb29yLCBGbG9vckludHJpbnNp
Yywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOwot
ICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9uV2l0aG91dFRyYW5zaXRpb24odm0sIGdsb2JhbE9i
amVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJmcm91bmQiKSwgMSwgbWF0aFByb3Rv
RnVuY0Zyb3VuZCwgRlJvdW5kSW50cmluc2ljLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVy
dHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7Ci0gICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rpb25XaXRo
b3V0VHJhbnNpdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2
bSwgImh5cG90IiksIDIsIG1hdGhQcm90b0Z1bmNIeXBvdCwgTm9JbnRyaW5zaWMsIHN0YXRpY19j
YXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKLSAgICBwdXREaXJl
Y3ROYXRpdmVGdW5jdGlvbldpdGhvdXRUcmFuc2l0aW9uKHZtLCBnbG9iYWxPYmplY3QsIElkZW50
aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAibG9nIiksIDEsIG1hdGhQcm90b0Z1bmNMb2csIExvZ0lu
dHJpbnNpYywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51
bSkpOwotICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9uV2l0aG91dFRyYW5zaXRpb24odm0sIGds
b2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJsb2cxMCIpLCAxLCBtYXRo
UHJvdG9GdW5jTG9nMTAsIExvZzEwSW50cmluc2ljLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJv
cGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7Ci0gICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rpb25X
aXRob3V0VHJhbnNpdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KCZ2bSwgImxvZzFwIiksIDEsIG1hdGhQcm90b0Z1bmNMb2cxcCwgTG9nMXBJbnRyaW5zaWMsIHN0
YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKLSAgICBw
dXREaXJlY3ROYXRpdmVGdW5jdGlvbldpdGhvdXRUcmFuc2l0aW9uKHZtLCBnbG9iYWxPYmplY3Qs
IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAibG9nMiIpLCAxLCBtYXRoUHJvdG9GdW5jTG9n
MiwgTG9nMkludHJpbnNpYywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRl
OjpEb250RW51bSkpOwotICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9uV2l0aG91dFRyYW5zaXRp
b24odm0sIGdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJtYXgiKSwg
MiwgbWF0aFByb3RvRnVuY01heCwgTWF4SW50cmluc2ljLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7Ci0gICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rp
b25XaXRob3V0VHJhbnNpdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKCZ2bSwgIm1pbiIpLCAyLCBtYXRoUHJvdG9GdW5jTWluLCBNaW5JbnRyaW5zaWMsIHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKLSAgICBwdXRE
aXJlY3ROYXRpdmVGdW5jdGlvbldpdGhvdXRUcmFuc2l0aW9uKHZtLCBnbG9iYWxPYmplY3QsIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAicG93IiksIDIsIG1hdGhQcm90b0Z1bmNQb3csIFBv
d0ludHJpbnNpYywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250
RW51bSkpOwotICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9uV2l0aG91dFRyYW5zaXRpb24odm0s
IGdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJyYW5kb20iKSwgMCwg
bWF0aFByb3RvRnVuY1JhbmRvbSwgUmFuZG9tSW50cmluc2ljLCBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7Ci0gICAgcHV0RGlyZWN0TmF0aXZlRnVu
Y3Rpb25XaXRob3V0VHJhbnNpdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKCZ2bSwgInJvdW5kIiksIDEsIG1hdGhQcm90b0Z1bmNSb3VuZCwgUm91bmRJbnRyaW5z
aWMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsK
LSAgICBwdXREaXJlY3ROYXRpdmVGdW5jdGlvbldpdGhvdXRUcmFuc2l0aW9uKHZtLCBnbG9iYWxP
YmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAic2lnbiIpLCAxLCBtYXRoUHJvdG9G
dW5jU2lnbiwgTm9JbnRyaW5zaWMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJp
YnV0ZTo6RG9udEVudW0pKTsKLSAgICBwdXREaXJlY3ROYXRpdmVGdW5jdGlvbldpdGhvdXRUcmFu
c2l0aW9uKHZtLCBnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAic2lu
IiksIDEsIG1hdGhQcm90b0Z1bmNTaW4sIFNpbkludHJpbnNpYywgc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOwotICAgIHB1dERpcmVjdE5hdGl2ZUZ1
bmN0aW9uV2l0aG91dFRyYW5zaXRpb24odm0sIGdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZygmdm0sICJzaW5oIiksIDEsIG1hdGhQcm90b0Z1bmNTaW5oLCBTaW5oSW50cmluc2lj
LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7Ci0g
ICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbih2bSwgZ2xvYmFsT2Jq
ZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgInNxcnQiKSwgMSwgbWF0aFByb3RvRnVu
Y1NxcnQsIFNxcnRJbnRyaW5zaWMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJp
YnV0ZTo6RG9udEVudW0pKTsKLSAgICBwdXREaXJlY3ROYXRpdmVGdW5jdGlvbldpdGhvdXRUcmFu
c2l0aW9uKHZtLCBnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAidGFu
IiksIDEsIG1hdGhQcm90b0Z1bmNUYW4sIFRhbkludHJpbnNpYywgc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOwotICAgIHB1dERpcmVjdE5hdGl2ZUZ1
bmN0aW9uV2l0aG91dFRyYW5zaXRpb24odm0sIGdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZygmdm0sICJ0YW5oIiksIDEsIG1hdGhQcm90b0Z1bmNUYW5oLCBUYW5oSW50cmluc2lj
LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7Ci0g
ICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbih2bSwgZ2xvYmFsT2Jq
ZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgInRydW5jIiksIDEsIG1hdGhQcm90b0Z1
bmNUcnVuYywgVHJ1bmNJbnRyaW5zaWMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0
dHJpYnV0ZTo6RG9udEVudW0pKTsKLSAgICBwdXREaXJlY3ROYXRpdmVGdW5jdGlvbldpdGhvdXRU
cmFuc2l0aW9uKHZtLCBnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAi
aW11bCIpLCAyLCBtYXRoUHJvdG9GdW5jSU11bCwgSU11bEludHJpbnNpYywgc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOworICAgIHB1dERpcmVjdFdp
dGhvdXRUcmFuc2l0aW9uKHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiRSIpLCBqc051
bWJlcihNYXRoOjpleHAoMS4wKSksIFByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgUHJv
cGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtIHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KTsK
KyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zyh2bSwgIkxOMiIpLCBqc051bWJlcihNYXRoOjpsb2coMi4wKSksIFByb3BlcnR5QXR0cmlidXRl
OjpEb250RGVsZXRlIHwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtIHwgUHJvcGVydHlBdHRy
aWJ1dGU6OlJlYWRPbmx5KTsKKyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIkxOMTAiKSwganNOdW1iZXIoTWF0aDo6bG9nKDEwLjAp
KSwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUgfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9u
dEVudW0gfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpOworICAgIHB1dERpcmVjdFdpdGhv
dXRUcmFuc2l0aW9uKHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiTE9HMkUiKSwganNO
dW1iZXIoMS4wIC8gTWF0aDo6bG9nKDIuMCkpLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0
ZSB8IFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8IFByb3BlcnR5QXR0cmlidXRlOjpSZWFk
T25seSk7CisgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIElkZW50aWZpZXI6OmZy
b21TdHJpbmcodm0sICJMT0cxMEUiKSwganNOdW1iZXIoMC40MzQyOTQ0ODE5MDMyNTE4KSwgUHJv
cGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUgfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0g
fCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpOworICAgIHB1dERpcmVjdFdpdGhvdXRUcmFu
c2l0aW9uKHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiUEkiKSwganNOdW1iZXIocGlE
b3VibGUpLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IFByb3BlcnR5QXR0cmlidXRl
OjpEb250RW51bSB8IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSk7CisgICAgcHV0RGlyZWN0
V2l0aG91dFRyYW5zaXRpb24odm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJTUVJUMV8y
IiksIGpzTnVtYmVyKHNxcnQoMC41KSksIFByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwg
UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtIHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5
KTsKKyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZyh2bSwgIlNRUlQyIiksIGpzTnVtYmVyKHNxcnQoMi4wKSksIFByb3BlcnR5QXR0cmlidXRl
OjpEb250RGVsZXRlIHwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtIHwgUHJvcGVydHlBdHRy
aWJ1dGU6OlJlYWRPbmx5KTsKKyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0u
cHJvcGVydHlOYW1lcy0+dG9TdHJpbmdUYWdTeW1ib2wsIGpzU3RyaW5nKHZtLCAiTWF0aCIpLCBQ
cm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkp
OworCisgICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbih2bSwgZ2xv
YmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiYWJzIiksIDEsIG1hdGhQcm90
b0Z1bmNBYnMsIEFic0ludHJpbnNpYywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0
cmlidXRlOjpEb250RW51bSkpOworICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9uV2l0aG91dFRy
YW5zaXRpb24odm0sIGdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImFj
b3MiKSwgMSwgbWF0aFByb3RvRnVuY0FDb3MsIEFDb3NJbnRyaW5zaWMsIHN0YXRpY19jYXN0PHVu
c2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKKyAgICBwdXREaXJlY3ROYXRp
dmVGdW5jdGlvbldpdGhvdXRUcmFuc2l0aW9uKHZtLCBnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6
OmZyb21TdHJpbmcodm0sICJhc2luIiksIDEsIG1hdGhQcm90b0Z1bmNBU2luLCBBU2luSW50cmlu
c2ljLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7
CisgICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbih2bSwgZ2xvYmFs
T2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiYXRhbiIpLCAxLCBtYXRoUHJvdG9G
dW5jQVRhbiwgQVRhbkludHJpbnNpYywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0
cmlidXRlOjpEb250RW51bSkpOworICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9uV2l0aG91dFRy
YW5zaXRpb24odm0sIGdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImFj
b3NoIiksIDEsIG1hdGhQcm90b0Z1bmNBQ29zaCwgQUNvc2hJbnRyaW5zaWMsIHN0YXRpY19jYXN0
PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKKyAgICBwdXREaXJlY3RO
YXRpdmVGdW5jdGlvbldpdGhvdXRUcmFuc2l0aW9uKHZtLCBnbG9iYWxPYmplY3QsIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcodm0sICJhc2luaCIpLCAxLCBtYXRoUHJvdG9GdW5jQVNpbmgsIEFTaW5o
SW50cmluc2ljLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRF
bnVtKSk7CisgICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbih2bSwg
Z2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiYXRhbmgiKSwgMSwgbWF0
aFByb3RvRnVuY0FUYW5oLCBBVGFuaEludHJpbnNpYywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFBy
b3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOworICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9u
V2l0aG91dFRyYW5zaXRpb24odm0sIGdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zyh2bSwgImF0YW4yIiksIDIsIG1hdGhQcm90b0Z1bmNBVGFuMiwgTm9JbnRyaW5zaWMsIHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKKyAgICBwdXRE
aXJlY3ROYXRpdmVGdW5jdGlvbldpdGhvdXRUcmFuc2l0aW9uKHZtLCBnbG9iYWxPYmplY3QsIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJjYnJ0IiksIDEsIG1hdGhQcm90b0Z1bmNDYnJ0LCBD
YnJ0SW50cmluc2ljLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRv
bnRFbnVtKSk7CisgICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbih2
bSwgZ2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiY2VpbCIpLCAxLCBt
YXRoUHJvdG9GdW5jQ2VpbCwgQ2VpbEludHJpbnNpYywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFBy
b3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOworICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9u
V2l0aG91dFRyYW5zaXRpb24odm0sIGdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zyh2bSwgImNsejMyIiksIDEsIG1hdGhQcm90b0Z1bmNDbHozMiwgQ2x6MzJJbnRyaW5zaWMsIHN0
YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKKyAgICBw
dXREaXJlY3ROYXRpdmVGdW5jdGlvbldpdGhvdXRUcmFuc2l0aW9uKHZtLCBnbG9iYWxPYmplY3Qs
IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJjb3MiKSwgMSwgbWF0aFByb3RvRnVuY0Nvcywg
Q29zSW50cmluc2ljLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRv
bnRFbnVtKSk7CisgICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbih2
bSwgZ2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiY29zaCIpLCAxLCBt
YXRoUHJvdG9GdW5jQ29zaCwgQ29zaEludHJpbnNpYywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFBy
b3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOworICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9u
V2l0aG91dFRyYW5zaXRpb24odm0sIGdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zyh2bSwgImV4cCIpLCAxLCBtYXRoUHJvdG9GdW5jRXhwLCBFeHBJbnRyaW5zaWMsIHN0YXRpY19j
YXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKKyAgICBwdXREaXJl
Y3ROYXRpdmVGdW5jdGlvbldpdGhvdXRUcmFuc2l0aW9uKHZtLCBnbG9iYWxPYmplY3QsIElkZW50
aWZpZXI6OmZyb21TdHJpbmcodm0sICJleHBtMSIpLCAxLCBtYXRoUHJvdG9GdW5jRXhwbTEsIEV4
cG0xSW50cmluc2ljLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRv
bnRFbnVtKSk7CisgICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbih2
bSwgZ2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiZmxvb3IiKSwgMSwg
bWF0aFByb3RvRnVuY0Zsb29yLCBGbG9vckludHJpbnNpYywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOworICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0
aW9uV2l0aG91dFRyYW5zaXRpb24odm0sIGdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZyh2bSwgImZyb3VuZCIpLCAxLCBtYXRoUHJvdG9GdW5jRnJvdW5kLCBGUm91bmRJbnRyaW5z
aWMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsK
KyAgICBwdXREaXJlY3ROYXRpdmVGdW5jdGlvbldpdGhvdXRUcmFuc2l0aW9uKHZtLCBnbG9iYWxP
YmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJoeXBvdCIpLCAyLCBtYXRoUHJvdG9G
dW5jSHlwb3QsIE5vSW50cmluc2ljLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRy
aWJ1dGU6OkRvbnRFbnVtKSk7CisgICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rpb25XaXRob3V0VHJh
bnNpdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAibG9n
IiksIDEsIG1hdGhQcm90b0Z1bmNMb2csIExvZ0ludHJpbnNpYywgc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOworICAgIHB1dERpcmVjdE5hdGl2ZUZ1
bmN0aW9uV2l0aG91dFRyYW5zaXRpb24odm0sIGdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyh2bSwgImxvZzEwIiksIDEsIG1hdGhQcm90b0Z1bmNMb2cxMCwgTG9nMTBJbnRyaW5z
aWMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsK
KyAgICBwdXREaXJlY3ROYXRpdmVGdW5jdGlvbldpdGhvdXRUcmFuc2l0aW9uKHZtLCBnbG9iYWxP
YmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJsb2cxcCIpLCAxLCBtYXRoUHJvdG9G
dW5jTG9nMXAsIExvZzFwSW50cmluc2ljLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlB
dHRyaWJ1dGU6OkRvbnRFbnVtKSk7CisgICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rpb25XaXRob3V0
VHJhbnNpdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAi
bG9nMiIpLCAxLCBtYXRoUHJvdG9GdW5jTG9nMiwgTG9nMkludHJpbnNpYywgc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOworICAgIHB1dERpcmVjdE5h
dGl2ZUZ1bmN0aW9uV2l0aG91dFRyYW5zaXRpb24odm0sIGdsb2JhbE9iamVjdCwgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZyh2bSwgIm1heCIpLCAyLCBtYXRoUHJvdG9GdW5jTWF4LCBNYXhJbnRyaW5z
aWMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsK
KyAgICBwdXREaXJlY3ROYXRpdmVGdW5jdGlvbldpdGhvdXRUcmFuc2l0aW9uKHZtLCBnbG9iYWxP
YmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJtaW4iKSwgMiwgbWF0aFByb3RvRnVu
Y01pbiwgTWluSW50cmluc2ljLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1
dGU6OkRvbnRFbnVtKSk7CisgICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rpb25XaXRob3V0VHJhbnNp
dGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAicG93Iiks
IDIsIG1hdGhQcm90b0Z1bmNQb3csIFBvd0ludHJpbnNpYywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOworICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0
aW9uV2l0aG91dFRyYW5zaXRpb24odm0sIGdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZyh2bSwgInJhbmRvbSIpLCAwLCBtYXRoUHJvdG9GdW5jUmFuZG9tLCBSYW5kb21JbnRyaW5z
aWMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsK
KyAgICBwdXREaXJlY3ROYXRpdmVGdW5jdGlvbldpdGhvdXRUcmFuc2l0aW9uKHZtLCBnbG9iYWxP
YmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJyb3VuZCIpLCAxLCBtYXRoUHJvdG9G
dW5jUm91bmQsIFJvdW5kSW50cmluc2ljLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlB
dHRyaWJ1dGU6OkRvbnRFbnVtKSk7CisgICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rpb25XaXRob3V0
VHJhbnNpdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAi
c2lnbiIpLCAxLCBtYXRoUHJvdG9GdW5jU2lnbiwgTm9JbnRyaW5zaWMsIHN0YXRpY19jYXN0PHVu
c2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKKyAgICBwdXREaXJlY3ROYXRp
dmVGdW5jdGlvbldpdGhvdXRUcmFuc2l0aW9uKHZtLCBnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6
OmZyb21TdHJpbmcodm0sICJzaW4iKSwgMSwgbWF0aFByb3RvRnVuY1NpbiwgU2luSW50cmluc2lj
LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7Cisg
ICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbih2bSwgZ2xvYmFsT2Jq
ZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAic2luaCIpLCAxLCBtYXRoUHJvdG9GdW5j
U2luaCwgU2luaEludHJpbnNpYywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmli
dXRlOjpEb250RW51bSkpOworICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9uV2l0aG91dFRyYW5z
aXRpb24odm0sIGdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInNxcnQi
KSwgMSwgbWF0aFByb3RvRnVuY1NxcnQsIFNxcnRJbnRyaW5zaWMsIHN0YXRpY19jYXN0PHVuc2ln
bmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKKyAgICBwdXREaXJlY3ROYXRpdmVG
dW5jdGlvbldpdGhvdXRUcmFuc2l0aW9uKHZtLCBnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZy
b21TdHJpbmcodm0sICJ0YW4iKSwgMSwgbWF0aFByb3RvRnVuY1RhbiwgVGFuSW50cmluc2ljLCBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7CisgICAg
cHV0RGlyZWN0TmF0aXZlRnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbih2bSwgZ2xvYmFsT2JqZWN0
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAidGFuaCIpLCAxLCBtYXRoUHJvdG9GdW5jVGFu
aCwgVGFuaEludHJpbnNpYywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRl
OjpEb250RW51bSkpOworICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9uV2l0aG91dFRyYW5zaXRp
b24odm0sIGdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInRydW5jIiks
IDEsIG1hdGhQcm90b0Z1bmNUcnVuYywgVHJ1bmNJbnRyaW5zaWMsIHN0YXRpY19jYXN0PHVuc2ln
bmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKKyAgICBwdXREaXJlY3ROYXRpdmVG
dW5jdGlvbldpdGhvdXRUcmFuc2l0aW9uKHZtLCBnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZy
b21TdHJpbmcodm0sICJpbXVsIiksIDIsIG1hdGhQcm90b0Z1bmNJTXVsLCBJTXVsSW50cmluc2lj
LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7CiB9
CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGdW5jdGlvbnMgLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL051bWJlckNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9OdW1iZXJDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlckNvbnN0cnVjdG9yLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIw
MDAsMjAwMyBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQotICogIENvcHlyaWdodCAoQykg
MjAwNywgMjAwOCwgMjAxMSwgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDctMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC03MCwxOSArNzAsMTkgQEAgdm9pZCBOdW1i
ZXJDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24oVgogICAgIHB1dERpcmVjdFdpdGhvdXRUcmFu
c2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIG51bWJlclByb3RvdHlwZSwg
UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtIHwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnREZWxl
dGUgfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpOwogICAgIHB1dERpcmVjdFdpdGhvdXRU
cmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDEpLCBQcm9w
ZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwog
Ci0gICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIElkZW50aWZpZXI6OmZyb21TdHJp
bmcoJnZtLCAiRVBTSUxPTiIpLCBqc0RvdWJsZU51bWJlcihzdGQ6Om51bWVyaWNfbGltaXRzPGRv
dWJsZT46OmVwc2lsb24oKSksIFByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgUHJvcGVy
dHlBdHRyaWJ1dGU6OkRvbnRFbnVtIHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KTsKLSAg
ICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygm
dm0sICJNQVhfVkFMVUUiKSwganNEb3VibGVOdW1iZXIoMS43OTc2OTMxMzQ4NjIzMTU3RSszMDgp
LCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IFByb3BlcnR5QXR0cmlidXRlOjpEb250
RW51bSB8IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSk7Ci0gICAgcHV0RGlyZWN0V2l0aG91
dFRyYW5zaXRpb24odm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiTUlOX1ZBTFVFIiks
IGpzRG91YmxlTnVtYmVyKDVFLTMyNCksIFByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwg
UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtIHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5
KTsKLSAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZygmdm0sICJNQVhfU0FGRV9JTlRFR0VSIiksIGpzRG91YmxlTnVtYmVyKG1heFNhZmVJbnRl
Z2VyKCkpLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IFByb3BlcnR5QXR0cmlidXRl
OjpEb250RW51bSB8IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSk7Ci0gICAgcHV0RGlyZWN0
V2l0aG91dFRyYW5zaXRpb24odm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiTUlOX1NB
RkVfSU5URUdFUiIpLCBqc0RvdWJsZU51bWJlcihtaW5TYWZlSW50ZWdlcigpKSwgUHJvcGVydHlB
dHRyaWJ1dGU6OkRvbnREZWxldGUgfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBQcm9w
ZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpOwotICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9u
KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgIk5FR0FUSVZFX0lORklOSVRZIiksIGpz
RG91YmxlTnVtYmVyKC1zdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OmluZmluaXR5KCkpLCBQ
cm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51
bSB8IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSk7Ci0gICAgcHV0RGlyZWN0V2l0aG91dFRy
YW5zaXRpb24odm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiUE9TSVRJVkVfSU5GSU5J
VFkiKSwganNEb3VibGVOdW1iZXIoc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjppbmZpbml0
eSgpKSwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUgfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6
RG9udEVudW0gfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpOworICAgIHB1dERpcmVjdFdp
dGhvdXRUcmFuc2l0aW9uKHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiRVBTSUxPTiIp
LCBqc0RvdWJsZU51bWJlcihzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OmVwc2lsb24oKSks
IFByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRF
bnVtIHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KTsKKyAgICBwdXREaXJlY3RXaXRob3V0
VHJhbnNpdGlvbih2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIk1BWF9WQUxVRSIpLCBq
c0RvdWJsZU51bWJlcigxLjc5NzY5MzEzNDg2MjMxNTdFKzMwOCksIFByb3BlcnR5QXR0cmlidXRl
OjpEb250RGVsZXRlIHwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtIHwgUHJvcGVydHlBdHRy
aWJ1dGU6OlJlYWRPbmx5KTsKKyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIk1JTl9WQUxVRSIpLCBqc0RvdWJsZU51bWJlcig1RS0z
MjQpLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IFByb3BlcnR5QXR0cmlidXRlOjpE
b250RW51bSB8IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSk7CisgICAgcHV0RGlyZWN0V2l0
aG91dFRyYW5zaXRpb24odm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJNQVhfU0FGRV9J
TlRFR0VSIiksIGpzRG91YmxlTnVtYmVyKG1heFNhZmVJbnRlZ2VyKCkpLCBQcm9wZXJ0eUF0dHJp
YnV0ZTo6RG9udERlbGV0ZSB8IFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8IFByb3BlcnR5
QXR0cmlidXRlOjpSZWFkT25seSk7CisgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0s
IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJNSU5fU0FGRV9JTlRFR0VSIiksIGpzRG91Ymxl
TnVtYmVyKG1pblNhZmVJbnRlZ2VyKCkpLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8
IFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25s
eSk7CisgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIElkZW50aWZpZXI6OmZyb21T
dHJpbmcodm0sICJORUdBVElWRV9JTkZJTklUWSIpLCBqc0RvdWJsZU51bWJlcigtc3RkOjpudW1l
cmljX2xpbWl0czxkb3VibGU+OjppbmZpbml0eSgpKSwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRE
ZWxldGUgfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6
UmVhZE9ubHkpOworICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKHZtLCAiUE9TSVRJVkVfSU5GSU5JVFkiKSwganNEb3VibGVOdW1iZXIoc3Rk
OjpudW1lcmljX2xpbWl0czxkb3VibGU+OjppbmZpbml0eSgpKSwgUHJvcGVydHlBdHRyaWJ1dGU6
OkRvbnREZWxldGUgfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBQcm9wZXJ0eUF0dHJp
YnV0ZTo6UmVhZE9ubHkpOwogICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5w
cm9wZXJ0eU5hbWVzLT5OYU4sIGpzTmFOKCksIFByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRl
IHwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtIHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRP
bmx5KTsKIAogICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5h
bWVzLT5wYXJzZUludCwgbnVtYmVyUHJvdG90eXBlLT5nbG9iYWxPYmplY3Qodm0pLT5wYXJzZUlu
dEZ1bmN0aW9uKCksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9u
dEVudW0pKTsKICAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlO
YW1lcy0+cGFyc2VGbG9hdCwgbnVtYmVyUHJvdG90eXBlLT5nbG9iYWxPYmplY3Qodm0pLT5wYXJz
ZUZsb2F0RnVuY3Rpb24oKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRl
OjpEb250RW51bSkpOwogCi0gICAgSlNDX05BVElWRV9JTlRSSU5TSUNfRlVOQ1RJT05fV0lUSE9V
VF9UUkFOU0lUSU9OKElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiaXNJbnRlZ2VyIiksIG51
bWJlckNvbnN0cnVjdG9yRnVuY0lzSW50ZWdlciwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3Bl
cnR5QXR0cmlidXRlOjpEb250RW51bSksIDEsIE51bWJlcklzSW50ZWdlckludHJpbnNpYyk7Cisg
ICAgSlNDX05BVElWRV9JTlRSSU5TSUNfRlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lUSU9OKElkZW50
aWZpZXI6OmZyb21TdHJpbmcodm0sICJpc0ludGVnZXIiKSwgbnVtYmVyQ29uc3RydWN0b3JGdW5j
SXNJbnRlZ2VyLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRF
bnVtKSwgMSwgTnVtYmVySXNJbnRlZ2VySW50cmluc2ljKTsKIH0KIAogLy8gRUNNQSAxNS43LjEK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlclByb3RvdHlwZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyUHJvdG90
eXBlLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvTnVtYmVyUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8q
CiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAsMjAwMyBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBr
ZGUub3JnKQotICogIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAxMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA3LTIwMTkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtNDIyLDcgKzQy
Miw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbnVtYmVyUHJvdG8KIAogICAgIC8v
IEhhbmRsZSBOYU4gYW5kIEluZmluaXR5LgogICAgIGlmICghc3RkOjppc2Zpbml0ZSh4KSkKLSAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywgU3Ry
aW5nOjpudW1iZXIoeCkpKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc05vbnRy
aXZpYWxTdHJpbmcodm0sIFN0cmluZzo6bnVtYmVyKHgpKSk7CiAKICAgICBpZiAoIWluUmFuZ2Up
CiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgc2NvcGUsIGNyZWF0ZVJhbmdlRXJy
b3IoZXhlYywgInRvRXhwb25lbnRpYWwoKSBhcmd1bWVudCBtdXN0IGJlIGJldHdlZW4gMCBhbmQg
MjAiX3MpKTsKQEAgLTQzNSw3ICs0MzUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IG51bWJlclByb3RvCiAgICAgaXNVbmRlZmluZWQKICAgICAgICAgPyBjb252ZXJ0ZXIuVG9FeHBv
bmVudGlhbCh4LCAtMSwgJmJ1aWxkZXIpCiAgICAgICAgIDogY29udmVydGVyLlRvRXhwb25lbnRp
YWwoeCwgZGVjaW1hbFBsYWNlc0luRXhwb25lbnQsICZidWlsZGVyKTsKLSAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKGV4ZWMsIGJ1aWxkZXIuRmluYWxpemUoKSkpOworICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcodm0sIGJ1aWxkZXIuRmluYWxpemUoKSkpOwog
fQogCiAvLyB0b0ZpeGVkIGNvbnZlcnRzIGEgbnVtYmVyIHRvIGEgc3RyaW5nLCBhbHdheXMgZm9y
bWF0dGluZyBhcyBhbiBhIGRlY2ltYWwgZnJhY3Rpb24uCkBAIC00NjMsMTMgKzQ2MywxMyBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG51bWJlclByb3RvCiAgICAgLy8gVGhpcyBhbHNv
IGNvdmVycyBJbmluaXR5LCBhbmQgc3RydWN0dXJlIHRoZSBjaGVjayBzbyB0aGF0IE5hTgogICAg
IC8vIHZhbHVlcyBhcmUgYWxzbyBoYW5kbGVkIGJ5IG51bWJlclRvU3RyaW5nCiAgICAgaWYgKCEo
ZmFicyh4KSA8IDFlKzIxKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmlu
ZyhleGVjLCBTdHJpbmc6Om51bWJlcih4KSkpOworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzU3RyaW5nKHZtLCBTdHJpbmc6Om51bWJlcih4KSkpOwogCiAgICAgLy8gVGhlIGNoZWNr
IGFib3ZlIHdpbGwgcmV0dXJuIGZhbHNlIGZvciBOYU4gb3IgSW5maW5pdHksIHRoZXNlIHdpbGwg
YmUKICAgICAvLyBoYW5kbGVkIGJ5IG51bWJlclRvU3RyaW5nLgogICAgIEFTU0VSVChzdGQ6Omlz
ZmluaXRlKHgpKTsKIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcoZXhlYywg
U3RyaW5nOjpudW1iZXJUb1N0cmluZ0ZpeGVkV2lkdGgoeCwgZGVjaW1hbFBsYWNlcykpKTsKKyAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKHZtLCBTdHJpbmc6Om51bWJlclRvU3Ry
aW5nRml4ZWRXaWR0aCh4LCBkZWNpbWFsUGxhY2VzKSkpOwogfQogCiAvLyB0b1ByZWNpc2lvbiBj
b252ZXJ0cyBhIG51bWJlciB0byBhIHN0cmluZywgdGFraW5nIGFuIGFyZ3VtZW50IHNwZWNpZnlp
bmcgYQpAQCAtNDk2LDE2ICs0OTYsMTYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBu
dW1iZXJQcm90bwogCiAgICAgLy8gVG8gcHJlY2lzaW9uIGNhbGxlZCB3aXRoIG5vIGFyZ3VtZW50
IGlzIHRyZWF0ZWQgYXMgVG9TdHJpbmcuCiAgICAgaWYgKGlzVW5kZWZpbmVkKQotICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKGV4ZWMsIFN0cmluZzo6bnVtYmVyKHgpKSk7
CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcodm0sIFN0cmluZzo6bnVt
YmVyKHgpKSk7CiAKICAgICAvLyBIYW5kbGUgTmFOIGFuZCBJbmZpbml0eS4KICAgICBpZiAoIXN0
ZDo6aXNmaW5pdGUoeCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOb250cml2
aWFsU3RyaW5nKGV4ZWMsIFN0cmluZzo6bnVtYmVyKHgpKSk7CisgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNOb250cml2aWFsU3RyaW5nKHZtLCBTdHJpbmc6Om51bWJlcih4KSkpOwog
CiAgICAgaWYgKCFpblJhbmdlKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIHNj
b3BlLCBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsICJ0b1ByZWNpc2lvbigpIGFyZ3VtZW50IG11c3Qg
YmUgYmV0d2VlbiAxIGFuZCAyMSJfcykpOwogCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1N0cmluZyhleGVjLCBTdHJpbmc6Om51bWJlclRvU3RyaW5nRml4ZWRQcmVjaXNpb24oeCwgc2ln
bmlmaWNhbnRGaWd1cmVzLCBLZWVwVHJhaWxpbmdaZXJvcykpKTsKKyAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzU3RyaW5nKHZtLCBTdHJpbmc6Om51bWJlclRvU3RyaW5nRml4ZWRQcmVjaXNp
b24oeCwgc2lnbmlmaWNhbnRGaWd1cmVzLCBLZWVwVHJhaWxpbmdaZXJvcykpKTsKIH0KIAogc3Rh
dGljIEFMV0FZU19JTkxJTkUgSlNTdHJpbmcqIGludDMyVG9TdHJpbmdJbnRlcm5hbChWTSYgdm0s
IGludDMyX3QgdmFsdWUsIGludDMyX3QgcmFkaXgpCkBAIC01MTksOSArNTE5LDkgQEAgc3RhdGlj
IEFMV0FZU19JTkxJTkUgSlNTdHJpbmcqIGludDMyVG9TdAogICAgIH0KIAogICAgIGlmIChyYWRp
eCA9PSAxMCkKLSAgICAgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZygmdm0sIHZtLm51bWVy
aWNTdHJpbmdzLmFkZCh2YWx1ZSkpOworICAgICAgICByZXR1cm4ganNOb250cml2aWFsU3RyaW5n
KHZtLCB2bS5udW1lcmljU3RyaW5ncy5hZGQodmFsdWUpKTsKIAotICAgIHJldHVybiBqc05vbnRy
aXZpYWxTdHJpbmcoJnZtLCB0b1N0cmluZ1dpdGhSYWRpeEludGVybmFsKHZhbHVlLCByYWRpeCkp
OworICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcodm0sIHRvU3RyaW5nV2l0aFJhZGl4SW50
ZXJuYWwodmFsdWUsIHJhZGl4KSk7CiAKIH0KIApAQCAtNTM0LDEzICs1MzQsMTMgQEAgc3RhdGlj
IEFMV0FZU19JTkxJTkUgSlNTdHJpbmcqIG51bWJlclRvUwogICAgICAgICByZXR1cm4gaW50MzJU
b1N0cmluZ0ludGVybmFsKHZtLCBpbnRlZ2VyVmFsdWUsIHJhZGl4KTsKIAogICAgIGlmIChyYWRp
eCA9PSAxMCkKLSAgICAgICAgcmV0dXJuIGpzU3RyaW5nKCZ2bSwgdm0ubnVtZXJpY1N0cmluZ3Mu
YWRkKGRvdWJsZVZhbHVlKSk7CisgICAgICAgIHJldHVybiBqc1N0cmluZyh2bSwgdm0ubnVtZXJp
Y1N0cmluZ3MuYWRkKGRvdWJsZVZhbHVlKSk7CiAKICAgICBpZiAoIXN0ZDo6aXNmaW5pdGUoZG91
YmxlVmFsdWUpKQotICAgICAgICByZXR1cm4ganNOb250cml2aWFsU3RyaW5nKCZ2bSwgU3RyaW5n
OjpudW1iZXIoZG91YmxlVmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmlu
Zyh2bSwgU3RyaW5nOjpudW1iZXIoZG91YmxlVmFsdWUpKTsKIAogICAgIFJhZGl4QnVmZmVyIGJ1
ZmZlcjsKLSAgICByZXR1cm4ganNTdHJpbmcoJnZtLCB0b1N0cmluZ1dpdGhSYWRpeEludGVybmFs
KGJ1ZmZlciwgZG91YmxlVmFsdWUsIHJhZGl4KSk7CisgICAgcmV0dXJuIGpzU3RyaW5nKHZtLCB0
b1N0cmluZ1dpdGhSYWRpeEludGVybmFsKGJ1ZmZlciwgZG91YmxlVmFsdWUsIHJhZGl4KSk7CiB9
CiAKIEpTU3RyaW5nKiBpbnQzMlRvU3RyaW5nKFZNJiB2bSwgaW50MzJfdCB2YWx1ZSwgaW50MzJf
dCByYWRpeCkKQEAgLTU1OSw3ICs1NTksNyBAQCBKU1N0cmluZyogaW50NTJUb1N0cmluZyhWTSYg
dm0sIGludDY0X3QgCiAgICAgfQogCiAgICAgaWYgKHJhZGl4ID09IDEwKQotICAgICAgICByZXR1
cm4ganNOb250cml2aWFsU3RyaW5nKCZ2bSwgdm0ubnVtZXJpY1N0cmluZ3MuYWRkKHN0YXRpY19j
YXN0PGRvdWJsZT4odmFsdWUpKSk7CisgICAgICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmco
dm0sIHZtLm51bWVyaWNTdHJpbmdzLmFkZChzdGF0aWNfY2FzdDxkb3VibGU+KHZhbHVlKSkpOwog
CiAgICAgLy8gUG9zaXRpb24gdGhlIGRlY2ltYWwgcG9pbnQgYXQgdGhlIGNlbnRlciBvZiB0aGUg
c3RyaW5nLCBzZXQKICAgICAvLyB0aGUgc3RhcnRPZlJlc3VsdFN0cmluZyBwb2ludGVyIHRvIHBv
aW50IGF0IHRoZSBkZWNpbWFsIHBvaW50LgpAQCAtNTY4LDcgKzU2OCw3IEBAIEpTU3RyaW5nKiBp
bnQ1MlRvU3RyaW5nKFZNJiB2bSwgaW50NjRfdCAKICAgICBjaGFyKiBzdGFydE9mUmVzdWx0U3Ry
aW5nID0gZGVjaW1hbFBvaW50OwogICAgICpkZWNpbWFsUG9pbnQgPSAnXDAnOwogCi0gICAgcmV0
dXJuIGpzTm9udHJpdmlhbFN0cmluZygmdm0sIGludDUyVG9TdHJpbmdXaXRoUmFkaXgoc3RhcnRP
ZlJlc3VsdFN0cmluZywgdmFsdWUsIHJhZGl4KSk7CisgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0
cmluZyh2bSwgaW50NTJUb1N0cmluZ1dpdGhSYWRpeChzdGFydE9mUmVzdWx0U3RyaW5nLCB2YWx1
ZSwgcmFkaXgpKTsKIH0KIAogSlNTdHJpbmcqIG51bWJlclRvU3RyaW5nKFZNJiB2bSwgZG91Ymxl
IGRvdWJsZVZhbHVlLCBpbnQzMl90IHJhZGl4KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjQ5MTI4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5
OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQotICogIENvcHlyaWdodCAoQykg
MjAwOC0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQg
KEMpIDIwMDgtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCkBAIC0yMDQsNyArMjA0LDcgQEAgSlNWYWx1ZSBvYmplY3RDb25zdHJ1Y3Rvckdl
dE93blByb3BlcnR5RAogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFByb3BlcnR5TmFtZUFycmF5IHByb3Bl
cnRpZXMoJnZtLCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzQW5kU3ltYm9scywgUHJpdmF0ZVN5
bWJvbE1vZGU6OkV4Y2x1ZGUpOworICAgIFByb3BlcnR5TmFtZUFycmF5IHByb3BlcnRpZXModm0s
IFByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3NBbmRTeW1ib2xzLCBQcml2YXRlU3ltYm9sTW9kZTo6
RXhjbHVkZSk7CiAgICAgb2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmdldE93blByb3BlcnR5TmFt
ZXMob2JqZWN0LCBleGVjLCBwcm9wZXJ0aWVzLCBFbnVtZXJhdGlvbk1vZGUoRG9udEVudW1Qcm9w
ZXJ0aWVzTW9kZTo6SW5jbHVkZSkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsg
fSk7CiAKQEAgLTM3Myw3ICszNzMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9i
amVjdENvbnN0CiAgICAgICAgIC8vIEZvciBleGFtcGxlLCBbW0dldF1dIG9mIHNvdXJjZSBvYmpl
Y3QgY291bGQgY29uZmlndXJlIHNldHRlciB0byB0YXJnZXQgb2JqZWN0LiBTbyBkaXNhYmxlIHRo
ZSBmYXN0IHBhdGguCiAgICAgICAgIHRhcmdldENhblBlcmZvcm1GYXN0UHV0ID0gZmFsc2U7CiAK
LSAgICAgICAgUHJvcGVydHlOYW1lQXJyYXkgcHJvcGVydGllcygmdm0sIFByb3BlcnR5TmFtZU1v
ZGU6OlN0cmluZ3NBbmRTeW1ib2xzLCBQcml2YXRlU3ltYm9sTW9kZTo6RXhjbHVkZSk7CisgICAg
ICAgIFByb3BlcnR5TmFtZUFycmF5IHByb3BlcnRpZXModm0sIFByb3BlcnR5TmFtZU1vZGU6OlN0
cmluZ3NBbmRTeW1ib2xzLCBQcml2YXRlU3ltYm9sTW9kZTo6RXhjbHVkZSk7CiAgICAgICAgIHNv
dXJjZS0+bWV0aG9kVGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKHNvdXJjZSwgZXhlYywg
cHJvcGVydGllcywgRW51bWVyYXRpb25Nb2RlKERvbnRFbnVtUHJvcGVydGllc01vZGU6OkluY2x1
ZGUpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIApAQCAtNDQw
LDcgKzQ0MCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3QKICAg
ICBKU0FycmF5KiB2YWx1ZXMgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIG51bGxwdHIpOwog
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKLSAgICBQcm9wZXJ0eU5hbWVB
cnJheSBwcm9wZXJ0aWVzKCZ2bSwgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5ncywgUHJpdmF0ZVN5
bWJvbE1vZGU6OkV4Y2x1ZGUpOworICAgIFByb3BlcnR5TmFtZUFycmF5IHByb3BlcnRpZXModm0s
IFByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3MsIFByaXZhdGVTeW1ib2xNb2RlOjpFeGNsdWRlKTsK
ICAgICB0YXJnZXQtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVydHlOYW1lcyh0YXJnZXQs
IGV4ZWMsIHByb3BlcnRpZXMsIEVudW1lcmF0aW9uTW9kZShEb250RW51bVByb3BlcnRpZXNNb2Rl
OjpJbmNsdWRlKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIApAQCAt
NjAwLDcgKzYwMCw3IEBAIHN0YXRpYyBKU1ZhbHVlIGRlZmluZVByb3BlcnRpZXMoRXhlY1N0YXQK
ICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKIAotICAgIFByb3BlcnR5TmFtZUFycmF5IHByb3BlcnR5TmFtZXMoJnZtLCBQ
cm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzQW5kU3ltYm9scywgUHJpdmF0ZVN5bWJvbE1vZGU6OkV4
Y2x1ZGUpOworICAgIFByb3BlcnR5TmFtZUFycmF5IHByb3BlcnR5TmFtZXModm0sIFByb3BlcnR5
TmFtZU1vZGU6OlN0cmluZ3NBbmRTeW1ib2xzLCBQcml2YXRlU3ltYm9sTW9kZTo6RXhjbHVkZSk7
CiAgICAgYXNPYmplY3QocHJvcGVydGllcyktPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVy
dHlOYW1lcyhhc09iamVjdChwcm9wZXJ0aWVzKSwgZXhlYywgcHJvcGVydHlOYW1lcywgRW51bWVy
YXRpb25Nb2RlKERvbnRFbnVtUHJvcGVydGllc01vZGU6OkV4Y2x1ZGUpKTsKICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgIHNpemVfdCBudW1Qcm9wZXJ0aWVzID0gcHJv
cGVydHlOYW1lcy5zaXplKCk7CkBAIC02OTEsNyArNjkxLDcgQEAgYm9vbCBzZXRJbnRlZ3JpdHlM
ZXZlbChFeGVjU3RhdGUqIGV4ZWMsIAogICAgIGlmIChVTkxJS0VMWSghc3VjY2VzcykpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgIFByb3BlcnR5TmFtZUFycmF5IHByb3BlcnRpZXMoJnZt
LCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzQW5kU3ltYm9scywgUHJpdmF0ZVN5bWJvbE1vZGU6
OkV4Y2x1ZGUpOworICAgIFByb3BlcnR5TmFtZUFycmF5IHByb3BlcnRpZXModm0sIFByb3BlcnR5
TmFtZU1vZGU6OlN0cmluZ3NBbmRTeW1ib2xzLCBQcml2YXRlU3ltYm9sTW9kZTo6RXhjbHVkZSk7
CiAgICAgb2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0
LCBleGVjLCBwcm9wZXJ0aWVzLCBFbnVtZXJhdGlvbk1vZGUoRG9udEVudW1Qcm9wZXJ0aWVzTW9k
ZTo6SW5jbHVkZSkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKIApA
QCAtNzM4LDcgKzczOCw3IEBAIGJvb2wgdGVzdEludGVncml0eUxldmVsKEV4ZWNTdGF0ZSogZXhl
YywKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gNi4gTGV0IGtleXMgYmUgPyBPLltb
T3duUHJvcGVydHlLZXlzXV0oKS4KLSAgICBQcm9wZXJ0eU5hbWVBcnJheSBrZXlzKCZ2bSwgUHJv
cGVydHlOYW1lTW9kZTo6U3RyaW5nc0FuZFN5bWJvbHMsIFByaXZhdGVTeW1ib2xNb2RlOjpFeGNs
dWRlKTsKKyAgICBQcm9wZXJ0eU5hbWVBcnJheSBrZXlzKHZtLCBQcm9wZXJ0eU5hbWVNb2RlOjpT
dHJpbmdzQW5kU3ltYm9scywgUHJpdmF0ZVN5bWJvbE1vZGU6OkV4Y2x1ZGUpOwogICAgIG9iamVj
dC0+bWV0aG9kVGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgZXhlYywga2V5
cywgRW51bWVyYXRpb25Nb2RlKERvbnRFbnVtUHJvcGVydGllc01vZGU6OkluY2x1ZGUpKTsKICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCkBAIC05MTcsNyArOTE3LDcgQEAg
SlNBcnJheSogb3duUHJvcGVydHlLZXlzKEV4ZWNTdGF0ZSogZXhlYwogICAgICAgICB9CiAgICAg
fQogCi0gICAgUHJvcGVydHlOYW1lQXJyYXkgcHJvcGVydGllcygmdm0sIHByb3BlcnR5TmFtZU1v
ZGUsIFByaXZhdGVTeW1ib2xNb2RlOjpFeGNsdWRlKTsKKyAgICBQcm9wZXJ0eU5hbWVBcnJheSBw
cm9wZXJ0aWVzKHZtLCBwcm9wZXJ0eU5hbWVNb2RlLCBQcml2YXRlU3ltYm9sTW9kZTo6RXhjbHVk
ZSk7CiAgICAgb2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmdldE93blByb3BlcnR5TmFtZXMob2Jq
ZWN0LCBleGVjLCBwcm9wZXJ0aWVzLCBFbnVtZXJhdGlvbk1vZGUoZG9udEVudW1Qcm9wZXJ0aWVz
TW9kZSkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwogCkBAIC05
MzUsNyArOTM1LDcgQEAgSlNBcnJheSogb3duUHJvcGVydHlLZXlzKEV4ZWNTdGF0ZSogZXhlYwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtUHJv
cGVydGllczsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGF1
dG8mIGlkZW50aWZpZXIgPSBwcm9wZXJ0aWVzW2ldOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBBU1NFUlQoIWlkZW50aWZpZXIuaXNTeW1ib2woKSk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG5ld0J1dHRlcmZseS0+c2V0SW5kZXgodm0sIGksIGpzT3duZWRTdHJp
bmcoJnZtLCBpZGVudGlmaWVyLnN0cmluZygpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG5ld0J1dHRlcmZseS0+c2V0SW5kZXgodm0sIGksIGpzT3duZWRTdHJpbmcodm0sIGlk
ZW50aWZpZXIuc3RyaW5nKCkpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUtPnNldENhY2hlZE93bktleXModm0s
IG5ld0J1dHRlcmZseSk7CkBAIC05NTUsNyArOTU1LDcgQEAgSlNBcnJheSogb3duUHJvcGVydHlL
ZXlzKEV4ZWNTdGF0ZSogZXhlYwogICAgICAgICAgICAgICAgICAgICBjb25zdCBhdXRvJiBpZGVu
dGlmaWVyID0gcHJvcGVydGllc1tpXTsKICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnR5
TmFtZU1vZGUgPT0gUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5ncykgewogICAgICAgICAgICAgICAg
ICAgICAgICAgQVNTRVJUKCFpZGVudGlmaWVyLmlzU3ltYm9sKCkpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgYnVmZmVyW2ldLnNldCh2bSwga2V5cywganNPd25lZFN0cmluZygmdm0sIGlkZW50
aWZpZXIuc3RyaW5nKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcltpXS5zZXQo
dm0sIGtleXMsIGpzT3duZWRTdHJpbmcodm0sIGlkZW50aWZpZXIuc3RyaW5nKCkpKTsKICAgICAg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChp
ZGVudGlmaWVyLmlzU3ltYm9sKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyW2ld
LnNldCh2bSwga2V5cywgU3ltYm9sOjpjcmVhdGUodm0sIHN0YXRpY19jYXN0PFN5bWJvbEltcGwm
PigqaWRlbnRpZmllci5pbXBsKCkpKSk7CkBAIC05ODAsNyArOTgwLDcgQEAgSlNBcnJheSogb3du
UHJvcGVydHlLZXlzKEV4ZWNTdGF0ZSogZXhlYwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IG51bVByb3BlcnRpZXM7IGkrKykgewogICAgICAgICAgICAgY29uc3QgYXV0byYgaWRlbnRp
ZmllciA9IHByb3BlcnRpZXNbaV07CiAgICAgICAgICAgICBBU1NFUlQoIWlkZW50aWZpZXIuaXNT
eW1ib2woKSk7Ci0gICAgICAgICAgICBwdXNoRGlyZWN0KGV4ZWMsIGtleXMsIGpzT3duZWRTdHJp
bmcoZXhlYywgaWRlbnRpZmllci5zdHJpbmcoKSkpOworICAgICAgICAgICAgcHVzaERpcmVjdChl
eGVjLCBrZXlzLCBqc093bmVkU3RyaW5nKHZtLCBpZGVudGlmaWVyLnN0cmluZygpKSk7CiAgICAg
ICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKICAgICAgICAgfQog
ICAgICAgICBicmVhazsKQEAgLTEwMDksNyArMTAwOSw3IEBAIEpTQXJyYXkqIG93blByb3BlcnR5
S2V5cyhFeGVjU3RhdGUqIGV4ZWMKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
ICAgIH0KIAotICAgICAgICAgICAgcHVzaERpcmVjdChleGVjLCBrZXlzLCBqc093bmVkU3RyaW5n
KGV4ZWMsIGlkZW50aWZpZXIuc3RyaW5nKCkpKTsKKyAgICAgICAgICAgIHB1c2hEaXJlY3QoZXhl
Yywga2V5cywganNPd25lZFN0cmluZyh2bSwgaWRlbnRpZmllci5zdHJpbmcoKSkpOwogICAgICAg
ICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAgICAgICAgIH0KIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RQcm90b3R5
cGUuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9PYmplY3RQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoK
ICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3Jn
KQotICogIENvcHlyaWdodCAoQykgMjAwOC0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC0zNDQsNyArMzQ0LDcgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90bwogICAgICAgICBpZiAoIW5ld1N0cmlu
ZykKICAgICAgICAgICAgIHJldHVybiB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYywgc2NvcGUp
OwogCi0gICAgICAgIGF1dG8gcmVzdWx0ID0ganNOb250cml2aWFsU3RyaW5nKCZ2bSwgbmV3U3Ry
aW5nKTsKKyAgICAgICAgYXV0byByZXN1bHQgPSBqc05vbnRyaXZpYWxTdHJpbmcodm0sIG5ld1N0
cmluZyk7CiAgICAgICAgIHRoaXNPYmplY3QtPnN0cnVjdHVyZSh2bSktPnNldE9iamVjdFRvU3Ry
aW5nVmFsdWUoZXhlYywgdm0sIHJlc3VsdCwgdG9TdHJpbmdUYWdTbG90KTsKICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKICAgICB9KSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL09wZXJhdGlvbnMuaAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBA
IEFMV0FZU19JTkxJTkUgSlNTdHJpbmcqIGpzU3RyaW5nKEV4ZWNTdGEKICAgICAgICAgcmV0dXJu
IHMyOwogICAgIHVuc2lnbmVkIGxlbmd0aDIgPSBzMi0+bGVuZ3RoKCk7CiAgICAgaWYgKCFsZW5n
dGgyKQotICAgICAgICByZXR1cm4ganNTdHJpbmcoJnZtLCB1MSk7CisgICAgICAgIHJldHVybiBq
c1N0cmluZyh2bSwgdTEpOwogICAgIHN0YXRpY19hc3NlcnQoSlNTdHJpbmc6Ok1heExlbmd0aCA9
PSBzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptYXgoKSwgIiIpOwogICAgIGlmIChzdW1P
dmVyZmxvd3M8aW50MzJfdD4obGVuZ3RoMSwgbGVuZ3RoMikpIHsKICAgICAgICAgdGhyb3dPdXRP
Zk1lbW9yeUVycm9yKGV4ZWMsIHNjb3BlKTsKQEAgLTYwLDcgKzYwLDcgQEAgQUxXQVlTX0lOTElO
RSBKU1N0cmluZyoganNTdHJpbmcoRXhlY1N0YQogICAgIC8vIFdlIGNvbnNlcnZhdGl2ZWx5IGNv
bnNpZGVyIHRoZSBjb3N0IG9mIHUxLiBDdXJyZW50bHksIHdlIGFyZSBub3QgY29uc2lkZXJpbmcg
YWJvdXQgaXM4Qml0KCkgY2FzZSBiZWNhdXNlIDE2LWJpdAogICAgIC8vIHN0cmluZ3MgYXJlIHJl
bGF0aXZlbHkgcmFyZS4gQnV0IHdlIGNhbiBkbyB0aGF0IGlmIHdlIG5lZWQgdG8gY29uc2lkZXIg
aXQuCiAgICAgaWYgKHMyLT5pc1JvcGUoKSB8fCAoU3RyaW5nSW1wbDo6aGVhZGVyU2l6ZTxMQ2hh
cj4oKSArIGxlbmd0aDEgKyBsZW5ndGgyKSA+PSBzaXplb2YoSlNSb3BlU3RyaW5nKSkKLSAgICAg
ICAgcmV0dXJuIEpTUm9wZVN0cmluZzo6Y3JlYXRlKHZtLCBqc1N0cmluZygmdm0sIHUxKSwgczIp
OworICAgICAgICByZXR1cm4gSlNSb3BlU3RyaW5nOjpjcmVhdGUodm0sIGpzU3RyaW5nKHZtLCB1
MSksIHMyKTsKIAogICAgIEFTU0VSVCghczItPmlzUm9wZSgpKTsKICAgICBjb25zdCBTdHJpbmcm
IHUyID0gczItPnZhbHVlKGV4ZWMpOwpAQCAtODAsNyArODAsNyBAQCBBTFdBWVNfSU5MSU5FIEpT
U3RyaW5nKiBqc1N0cmluZyhFeGVjU3RhCiAKICAgICB1bnNpZ25lZCBsZW5ndGgxID0gczEtPmxl
bmd0aCgpOwogICAgIGlmICghbGVuZ3RoMSkKLSAgICAgICAgcmV0dXJuIGpzU3RyaW5nKCZ2bSwg
dTIpOworICAgICAgICByZXR1cm4ganNTdHJpbmcodm0sIHUyKTsKICAgICB1bnNpZ25lZCBsZW5n
dGgyID0gdTIubGVuZ3RoKCk7CiAgICAgaWYgKCFsZW5ndGgyKQogICAgICAgICByZXR1cm4gczE7
CkBAIC05Myw3ICs5Myw3IEBAIEFMV0FZU19JTkxJTkUgSlNTdHJpbmcqIGpzU3RyaW5nKEV4ZWNT
dGEKICAgICAvLyAoMSkgQ29zdCBvZiBtYWtpbmcgSlNTdHJpbmcgICAgOiBzaXplb2YoSlNTdHJp
bmcpIChmb3IgbmV3IHN0cmluZykgKyBzaXplb2YoU3RyaW5nSW1wbCBoZWFkZXIpICsgbGVuZ3Ro
MSArIGxlbmd0aDIKICAgICAvLyAoMikgQ29zdCBvZiBtYWtpbmcgSlNSb3BlU3RyaW5nOiBzaXpl
b2YoSlNTdHJpbmcpIChmb3IgdTIpICsgc2l6ZW9mKEpTUm9wZVN0cmluZykKICAgICBpZiAoczEt
PmlzUm9wZSgpIHx8IChTdHJpbmdJbXBsOjpoZWFkZXJTaXplPExDaGFyPigpICsgbGVuZ3RoMSAr
IGxlbmd0aDIpID49IHNpemVvZihKU1JvcGVTdHJpbmcpKQotICAgICAgICByZXR1cm4gSlNSb3Bl
U3RyaW5nOjpjcmVhdGUodm0sIHMxLCBqc1N0cmluZygmdm0sIHUyKSk7CisgICAgICAgIHJldHVy
biBKU1JvcGVTdHJpbmc6OmNyZWF0ZSh2bSwgczEsIGpzU3RyaW5nKHZtLCB1MikpOwogCiAgICAg
QVNTRVJUKCFzMS0+aXNSb3BlKCkpOwogICAgIGNvbnN0IFN0cmluZyYgdTEgPSBzMS0+dmFsdWUo
ZXhlYyk7CkBAIC0xNTksMTAgKzE1OSwxMCBAQCBBTFdBWVNfSU5MSU5FIEpTU3RyaW5nKiBqc1N0
cmluZyhFeGVjU3RhCiAKICAgICB1bnNpZ25lZCBsZW5ndGgxID0gdTEubGVuZ3RoKCk7CiAgICAg
aWYgKCFsZW5ndGgxKQotICAgICAgICByZXR1cm4ganNTdHJpbmcoJnZtLCB1Mik7CisgICAgICAg
IHJldHVybiBqc1N0cmluZyh2bSwgdTIpOwogICAgIHVuc2lnbmVkIGxlbmd0aDIgPSB1Mi5sZW5n
dGgoKTsKICAgICBpZiAoIWxlbmd0aDIpCi0gICAgICAgIHJldHVybiBqc1N0cmluZygmdm0sIHUx
KTsKKyAgICAgICAgcmV0dXJuIGpzU3RyaW5nKHZtLCB1MSk7CiAgICAgc3RhdGljX2Fzc2VydChK
U1N0cmluZzo6TWF4TGVuZ3RoID09IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1heCgp
LCAiIik7CiAgICAgaWYgKHN1bU92ZXJmbG93czxpbnQzMl90PihsZW5ndGgxLCBsZW5ndGgyKSkg
ewogICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYywgc2NvcGUpOwpAQCAtMTcyLDcg
KzE3Miw3IEBAIEFMV0FZU19JTkxJTkUgSlNTdHJpbmcqIGpzU3RyaW5nKEV4ZWNTdGEKICAgICAv
LyAoMSkgQ29zdCBvZiBtYWtpbmcgSlNTdHJpbmcgICAgOiBzaXplb2YoSlNTdHJpbmcpIChmb3Ig
bmV3IHN0cmluZykgKyBzaXplb2YoU3RyaW5nSW1wbCBoZWFkZXIpICsgbGVuZ3RoMSArIGxlbmd0
aDIKICAgICAvLyAoMikgQ29zdCBvZiBtYWtpbmcgSlNSb3BlU3RyaW5nOiBzaXplb2YoSlNTdHJp
bmcpIChmb3IgdTEpICsgc2l6ZW9mKEpTU3RyaW5nKSAoZm9yIHUyKSArIHNpemVvZihKU1JvcGVT
dHJpbmcpCiAgICAgaWYgKChTdHJpbmdJbXBsOjpoZWFkZXJTaXplPExDaGFyPigpICsgbGVuZ3Ro
MSArIGxlbmd0aDIpID49IChzaXplb2YoSlNSb3BlU3RyaW5nKSArIHNpemVvZihKU1N0cmluZykp
KQotICAgICAgICByZXR1cm4gSlNSb3BlU3RyaW5nOjpjcmVhdGUodm0sIGpzU3RyaW5nKCZ2bSwg
dTEpLCBqc1N0cmluZygmdm0sIHUyKSk7CisgICAgICAgIHJldHVybiBKU1JvcGVTdHJpbmc6OmNy
ZWF0ZSh2bSwganNTdHJpbmcodm0sIHUxKSwganNTdHJpbmcodm0sIHUyKSk7CiAKICAgICBTdHJp
bmcgbmV3U3RyaW5nID0gdHJ5TWFrZVN0cmluZyh1MSwgdTIpOwogICAgIGlmICghbmV3U3RyaW5n
KSB7CkBAIC0xODQsOCArMTg0LDggQEAgQUxXQVlTX0lOTElORSBKU1N0cmluZyoganNTdHJpbmco
RXhlY1N0YQogCiBBTFdBWVNfSU5MSU5FIEpTU3RyaW5nKiBqc1N0cmluZyhFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IFN0cmluZyYgdTEsIGNvbnN0IFN0cmluZyYgdTIsIGNvbnN0IFN0cmluZyYgdTMp
CiB7Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUoKnZtKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIHVuc2lnbmVkIGxlbmd0aDEgPSB1
MS5sZW5ndGgoKTsKICAgICB1bnNpZ25lZCBsZW5ndGgyID0gdTIubGVuZ3RoKCk7CkBAIC0yMTIs
MjEgKzIxMiwyMSBAQCBBTFdBWVNfSU5MSU5FIEpTU3RyaW5nKiBqc1N0cmluZyhFeGVjU3RhCiAg
ICAgLy8gKDEpIENvc3Qgb2YgbWFraW5nIEpTU3RyaW5nICAgIDogc2l6ZW9mKEpTU3RyaW5nKSAo
Zm9yIG5ldyBzdHJpbmcpICsgc2l6ZW9mKFN0cmluZ0ltcGwgaGVhZGVyKSArIGxlbmd0aDEgKyBs
ZW5ndGgyICsgbGVuZ3RoMwogICAgIC8vICgyKSBDb3N0IG9mIG1ha2luZyBKU1JvcGVTdHJpbmc6
IHNpemVvZihKU1N0cmluZykgKGZvciB1MSkgKyBzaXplb2YoSlNTdHJpbmcpIChmb3IgdTIpICsg
c2l6ZW9mKEpTU3RyaW5nKSAoZm9yIHUzKSArIHNpemVvZihKU1JvcGVTdHJpbmcpCiAgICAgaWYg
KChTdHJpbmdJbXBsOjpoZWFkZXJTaXplPExDaGFyPigpICsgbGVuZ3RoMSArIGxlbmd0aDIgKyBs
ZW5ndGgzKSA+PSAoc2l6ZW9mKEpTUm9wZVN0cmluZykgKyBzaXplb2YoSlNTdHJpbmcpICogMikp
Ci0gICAgICAgIHJldHVybiBKU1JvcGVTdHJpbmc6OmNyZWF0ZSgqdm0sIGpzU3RyaW5nKHZtLCB1
MSksIGpzU3RyaW5nKHZtLCB1MiksIGpzU3RyaW5nKHZtLCB1MykpOworICAgICAgICByZXR1cm4g
SlNSb3BlU3RyaW5nOjpjcmVhdGUodm0sIGpzU3RyaW5nKHZtLCB1MSksIGpzU3RyaW5nKHZtLCB1
MiksIGpzU3RyaW5nKHZtLCB1MykpOwogCiAgICAgU3RyaW5nIG5ld1N0cmluZyA9IHRyeU1ha2VT
dHJpbmcodTEsIHUyLCB1Myk7CiAgICAgaWYgKCFuZXdTdHJpbmcpIHsKICAgICAgICAgdGhyb3dP
dXRPZk1lbW9yeUVycm9yKGV4ZWMsIHNjb3BlKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAg
ICAgfQotICAgIHJldHVybiBKU1N0cmluZzo6Y3JlYXRlKCp2bSwgbmV3U3RyaW5nLnJlbGVhc2VJ
bXBsKCkucmVsZWFzZU5vbk51bGwoKSk7CisgICAgcmV0dXJuIEpTU3RyaW5nOjpjcmVhdGUodm0s
IG5ld1N0cmluZy5yZWxlYXNlSW1wbCgpLnJlbGVhc2VOb25OdWxsKCkpOwogfQogCiBBTFdBWVNf
SU5MSU5FIEpTVmFsdWUganNTdHJpbmdGcm9tUmVnaXN0ZXJBcnJheShFeGVjU3RhdGUqIGV4ZWMs
IFJlZ2lzdGVyKiBzdHJpbmdzLCB1bnNpZ25lZCBjb3VudCkKIHsKLSAgICBWTSogdm0gPSAmZXhl
Yy0+dm0oKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSgqdm0pOwotICAg
IEpTUm9wZVN0cmluZzo6Um9wZUJ1aWxkZXI8UmVjb3JkT3ZlcmZsb3c+IHJvcGVCdWlsZGVyKCp2
bSk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CisgICAgSlNSb3BlU3RyaW5nOjpSb3BlQnVpbGRlcjxSZWNvcmRPdmVy
Zmxvdz4gcm9wZUJ1aWxkZXIodm0pOwogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNv
dW50OyArK2kpIHsKICAgICAgICAgSlNWYWx1ZSB2ID0gc3RyaW5nc1stc3RhdGljX2Nhc3Q8aW50
PihpKV0uanNWYWx1ZSgpOwpAQCAtMjQxLDkgKzI0MSw5IEBAIEFMV0FZU19JTkxJTkUgSlNWYWx1
ZSBqc1N0cmluZ0Zyb21SZWdpc3QKIAogQUxXQVlTX0lOTElORSBKU1ZhbHVlIGpzU3RyaW5nRnJv
bUFyZ3VtZW50cyhFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdGhpc1ZhbHVlKQogewotICAgIFZN
KiB2bSA9ICZleGVjLT52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KCp2bSk7Ci0gICAgSlNSb3BlU3RyaW5nOjpSb3BlQnVpbGRlcjxSZWNvcmRPdmVyZmxvdz4gcm9w
ZUJ1aWxkZXIoKnZtKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBKU1JvcGVTdHJpbmc6OlJvcGVCdWlsZGVy
PFJlY29yZE92ZXJmbG93PiByb3BlQnVpbGRlcih2bSk7CiAgICAgSlNTdHJpbmcqIHN0ciA9IHRo
aXNWYWx1ZS50b1N0cmluZyhleGVjKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7
IH0pOwogICAgIHJvcGVCdWlsZGVyLmFwcGVuZChzdHIpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvUHJvZ3JhbUV4ZWN1dGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb2dyYW1FeGVjdXRhYmxlLmNwcAkocmV2aXNpb24g
MjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvZ3JhbUV4ZWN1dGFi
bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzksNyArMTc5LDcgQEAgSlNPYmplY3QqIFByb2dy
YW1FeGVjdXRhYmxlOjppbml0aWFsaXplRwogCiAgICAgZm9yIChhdXRvJiBlbnRyeSA6IHZhcmlh
YmxlRGVjbGFyYXRpb25zKSB7CiAgICAgICAgIEFTU0VSVChlbnRyeS52YWx1ZS5pc1ZhcigpKTsK
LSAgICAgICAgZ2xvYmFsT2JqZWN0LT5hZGRWYXIoY2FsbEZyYW1lLCBJZGVudGlmaWVyOjpmcm9t
VWlkKCZ2bSwgZW50cnkua2V5LmdldCgpKSk7CisgICAgICAgIGdsb2JhbE9iamVjdC0+YWRkVmFy
KGNhbGxGcmFtZSwgSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgZW50cnkua2V5LmdldCgpKSk7CiAg
ICAgICAgIHRocm93U2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKICAgICB9CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb21pc2VEZWZlcnJlZFRpbWVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9taXNlRGVmZXJyZWRU
aW1lci5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1Byb21pc2VEZWZlcnJlZFRpbWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM5LDcgKzM5
LDcgQEAgc3RhdGljIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogfQogCiBQcm9taXNlRGVm
ZXJyZWRUaW1lcjo6UHJvbWlzZURlZmVycmVkVGltZXIoVk0mIHZtKQotICAgIDogQmFzZSgmdm0p
CisgICAgOiBCYXNlKHZtKQogewogfQogCkBAIC0xMjEsMTMgKzEyMSwxMyBAQCB2b2lkIFByb21p
c2VEZWZlcnJlZFRpbWVyOjphZGRQZW5kaW5nUHJvCiAKIGJvb2wgUHJvbWlzZURlZmVycmVkVGlt
ZXI6Omhhc1BlbmRpbmdQcm9taXNlKEpTUHJvbWlzZURlZmVycmVkKiB0aWNrZXQpCiB7Ci0gICAg
QVNTRVJUKHRpY2tldC0+dm0oKS0+Y3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7Cisg
ICAgQVNTRVJUKHRpY2tldC0+dm0oKS5jdXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsK
ICAgICByZXR1cm4gbV9wZW5kaW5nUHJvbWlzZXMuY29udGFpbnModGlja2V0KTsKIH0KIAogYm9v
bCBQcm9taXNlRGVmZXJyZWRUaW1lcjo6aGFzRGVwZW5kYW5jeUluUGVuZGluZ1Byb21pc2UoSlNQ
cm9taXNlRGVmZXJyZWQqIHRpY2tldCwgSlNDZWxsKiBkZXBlbmRlbmN5KQogewotICAgIEFTU0VS
VCh0aWNrZXQtPnZtKCktPmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOworICAgIEFT
U0VSVCh0aWNrZXQtPnZtKCkuY3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7CiAgICAg
QVNTRVJUKG1fcGVuZGluZ1Byb21pc2VzLmNvbnRhaW5zKHRpY2tldCkpOwogCiAgICAgYXV0byBy
ZXN1bHQgPSBtX3BlbmRpbmdQcm9taXNlcy5nZXQodGlja2V0KTsKQEAgLTEzNiw3ICsxMzYsNyBA
QCBib29sIFByb21pc2VEZWZlcnJlZFRpbWVyOjpoYXNEZXBlbmRhbmN5CiAKIGJvb2wgUHJvbWlz
ZURlZmVycmVkVGltZXI6OmNhbmNlbFBlbmRpbmdQcm9taXNlKEpTUHJvbWlzZURlZmVycmVkKiB0
aWNrZXQpCiB7Ci0gICAgQVNTRVJUKHRpY2tldC0+dm0oKS0+Y3VycmVudFRocmVhZElzSG9sZGlu
Z0FQSUxvY2soKSk7CisgICAgQVNTRVJUKHRpY2tldC0+dm0oKS5jdXJyZW50VGhyZWFkSXNIb2xk
aW5nQVBJTG9jaygpKTsKICAgICBib29sIHJlc3VsdCA9IG1fcGVuZGluZ1Byb21pc2VzLnJlbW92
ZSh0aWNrZXQpOwogCiAgICAgaWYgKHJlc3VsdCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1Byb3BlcnR5TmFtZUFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlOYW1lQXJyYXkuaAkocmV2aXNpb24gMjQ5MTI4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlOYW1lQXJyYXkuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA2LCAy
MDA4LCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQg
KEMpIDIwMDYtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYwpAQCAtNDcsNyArNDcsNyBAQCBwcml2YXRlOgogLy8gRklYTUU6IFJlbmFtZSB0
byBQcm9wZXJ0eU5hbWVBcnJheUJ1aWxkZXIuCiBjbGFzcyBQcm9wZXJ0eU5hbWVBcnJheSB7CiBw
dWJsaWM6Ci0gICAgUHJvcGVydHlOYW1lQXJyYXkoVk0qIHZtLCBQcm9wZXJ0eU5hbWVNb2RlIHBy
b3BlcnR5TmFtZU1vZGUsIFByaXZhdGVTeW1ib2xNb2RlIHByaXZhdGVTeW1ib2xNb2RlKQorICAg
IFByb3BlcnR5TmFtZUFycmF5KFZNJiB2bSwgUHJvcGVydHlOYW1lTW9kZSBwcm9wZXJ0eU5hbWVN
b2RlLCBQcml2YXRlU3ltYm9sTW9kZSBwcml2YXRlU3ltYm9sTW9kZSkKICAgICAgICAgOiBtX2Rh
dGEoUHJvcGVydHlOYW1lQXJyYXlEYXRhOjpjcmVhdGUoKSkKICAgICAgICAgLCBtX3ZtKHZtKQog
ICAgICAgICAsIG1fcHJvcGVydHlOYW1lTW9kZShwcm9wZXJ0eU5hbWVNb2RlKQpAQCAtNTUsNyAr
NTUsNyBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KIAotICAgIFZNKiB2bSgpIHsgcmV0dXJuIG1f
dm07IH0KKyAgICBWTSYgdm0oKSB7IHJldHVybiBtX3ZtOyB9CiAKICAgICB2b2lkIGFkZCh1aW50
MzJfdCBpbmRleCkKICAgICB7CkBAIC05MSw3ICs5MSw3IEBAIHByaXZhdGU6CiAKICAgICBSZWZQ
dHI8UHJvcGVydHlOYW1lQXJyYXlEYXRhPiBtX2RhdGE7CiAgICAgSGFzaFNldDxVbmlxdWVkU3Ry
aW5nSW1wbCo+IG1fc2V0OwotICAgIFZNKiBtX3ZtOworICAgIFZNJiBtX3ZtOwogICAgIFByb3Bl
cnR5TmFtZU1vZGUgbV9wcm9wZXJ0eU5hbWVNb2RlOwogICAgIFByaXZhdGVTeW1ib2xNb2RlIG1f
cHJpdmF0ZVN5bWJvbE1vZGU7CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUHJvcGVydHlTbG90LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvUHJvcGVydHlTbG90LmgJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5U2xvdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA1LTIwMTkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTQxNiwxMyArNDE2LDE0
IEBAIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBQcm9wZXJ0eVNsb3Q6OmdldFYKIAogQUxXQVlTX0lO
TElORSBKU1ZhbHVlIFByb3BlcnR5U2xvdDo6Z2V0VmFsdWUoRXhlY1N0YXRlKiBleGVjLCB1bnNp
Z25lZCBwcm9wZXJ0eU5hbWUpIGNvbnN0CiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAg
ICBpZiAobV9wcm9wZXJ0eVR5cGUgPT0gVHlwZVZhbHVlKQogICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZGVjb2RlKG1fZGF0YS52YWx1ZSk7CiAgICAgaWYgKG1fcHJvcGVydHlUeXBlID09IFR5cGVH
ZXR0ZXIpCiAgICAgICAgIHJldHVybiBmdW5jdGlvbkdldHRlcihleGVjKTsKICAgICBpZiAobV9w
cm9wZXJ0eVR5cGUgPT0gVHlwZUN1c3RvbUFjY2Vzc29yKQotICAgICAgICByZXR1cm4gY3VzdG9t
QWNjZXNzb3JHZXR0ZXIoZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBwcm9wZXJ0eU5hbWUp
KTsKLSAgICByZXR1cm4gY3VzdG9tR2V0dGVyKGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywg
cHJvcGVydHlOYW1lKSk7CisgICAgICAgIHJldHVybiBjdXN0b21BY2Nlc3NvckdldHRlcihleGVj
LCBJZGVudGlmaWVyOjpmcm9tKHZtLCBwcm9wZXJ0eU5hbWUpKTsKKyAgICByZXR1cm4gY3VzdG9t
R2V0dGVyKGV4ZWMsIElkZW50aWZpZXI6OmZyb20odm0sIHByb3BlcnR5TmFtZSkpOwogfQogCiB9
IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1By
b3h5T2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Qcm94eU9iamVjdC5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1Byb3h5T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY2LDcgKzE2
Niw3IEBAIHN0YXRpYyBKU1ZhbHVlIHBlcmZvcm1Qcm94eUdldChFeGVjU3RhdGUKIAogICAgIE1h
cmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3VtZW50czsKICAgICBhcmd1bWVudHMuYXBwZW5kKHRhcmdl
dCk7Ci0gICAgYXJndW1lbnRzLmFwcGVuZChpZGVudGlmaWVyVG9TYWZlUHVibGljSlNWYWx1ZSh2
bSwgSWRlbnRpZmllcjo6ZnJvbVVpZCgmdm0sIHByb3BlcnR5TmFtZS51aWQoKSkpKTsKKyAgICBh
cmd1bWVudHMuYXBwZW5kKGlkZW50aWZpZXJUb1NhZmVQdWJsaWNKU1ZhbHVlKHZtLCBJZGVudGlm
aWVyOjpmcm9tVWlkKHZtLCBwcm9wZXJ0eU5hbWUudWlkKCkpKSk7CiAgICAgYXJndW1lbnRzLmFw
cGVuZChyZWNlaXZlcik7CiAgICAgQVNTRVJUKCFhcmd1bWVudHMuaGFzT3ZlcmZsb3dlZCgpKTsK
ICAgICBKU1ZhbHVlIHRyYXBSZXN1bHQgPSBjYWxsKGV4ZWMsIGdldEhhbmRsZXIsIGNhbGxUeXBl
LCBjYWxsRGF0YSwgaGFuZGxlciwgYXJndW1lbnRzKTsKQEAgLTIzOCw3ICsyMzgsNyBAQCBib29s
IFByb3h5T2JqZWN0OjpwZXJmb3JtSW50ZXJuYWxNZXRob2RHCiAKICAgICBNYXJrZWRBcmd1bWVu
dEJ1ZmZlciBhcmd1bWVudHM7CiAgICAgYXJndW1lbnRzLmFwcGVuZCh0YXJnZXQpOwotICAgIGFy
Z3VtZW50cy5hcHBlbmQoaWRlbnRpZmllclRvU2FmZVB1YmxpY0pTVmFsdWUodm0sIElkZW50aWZp
ZXI6OmZyb21VaWQoJnZtLCBwcm9wZXJ0eU5hbWUudWlkKCkpKSk7CisgICAgYXJndW1lbnRzLmFw
cGVuZChpZGVudGlmaWVyVG9TYWZlUHVibGljSlNWYWx1ZSh2bSwgSWRlbnRpZmllcjo6ZnJvbVVp
ZCh2bSwgcHJvcGVydHlOYW1lLnVpZCgpKSkpOwogICAgIEFTU0VSVCghYXJndW1lbnRzLmhhc092
ZXJmbG93ZWQoKSk7CiAgICAgSlNWYWx1ZSB0cmFwUmVzdWx0ID0gY2FsbChleGVjLCBnZXRPd25Q
cm9wZXJ0eURlc2NyaXB0b3JNZXRob2QsIGNhbGxUeXBlLCBjYWxsRGF0YSwgaGFuZGxlciwgYXJn
dW1lbnRzKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7CkBAIC0zNDcs
NyArMzQ3LDcgQEAgYm9vbCBQcm94eU9iamVjdDo6cGVyZm9ybUhhc1Byb3BlcnR5KEV4ZQogCiAg
ICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJndW1lbnRzOwogICAgIGFyZ3VtZW50cy5hcHBlbmQo
dGFyZ2V0KTsKLSAgICBhcmd1bWVudHMuYXBwZW5kKGlkZW50aWZpZXJUb1NhZmVQdWJsaWNKU1Zh
bHVlKHZtLCBJZGVudGlmaWVyOjpmcm9tVWlkKCZ2bSwgcHJvcGVydHlOYW1lLnVpZCgpKSkpOwor
ICAgIGFyZ3VtZW50cy5hcHBlbmQoaWRlbnRpZmllclRvU2FmZVB1YmxpY0pTVmFsdWUodm0sIElk
ZW50aWZpZXI6OmZyb21VaWQodm0sIHByb3BlcnR5TmFtZS51aWQoKSkpKTsKICAgICBBU1NFUlQo
IWFyZ3VtZW50cy5oYXNPdmVyZmxvd2VkKCkpOwogICAgIEpTVmFsdWUgdHJhcFJlc3VsdCA9IGNh
bGwoZXhlYywgaGFzTWV0aG9kLCBjYWxsVHlwZSwgY2FsbERhdGEsIGhhbmRsZXIsIGFyZ3VtZW50
cyk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwpAQCAtNDEzLDggKzQx
Myw5IEBAIGJvb2wgUHJveHlPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdChKU08KIAogYm9vbCBQ
cm94eU9iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU09iamVjdCogb2JqZWN0LCBF
eGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90
KQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgUHJveHlPYmplY3QqIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8UHJveHlPYmplY3QqPihvYmplY3QpOwotICAgIElkZW50aWZpZXIgaWRlbnQg
PSBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIHByb3BlcnR5TmFtZSk7IAorICAgIElkZW50aWZpZXIg
aWRlbnQgPSBJZGVudGlmaWVyOjpmcm9tKHZtLCBwcm9wZXJ0eU5hbWUpOwogICAgIHJldHVybiB0
aGlzT2JqZWN0LT5nZXRPd25Qcm9wZXJ0eVNsb3RDb21tb24oZXhlYywgaWRlbnQuaW1wbCgpLCBz
bG90KTsKIH0KIApAQCAtNDUwLDcgKzQ1MSw3IEBAIGJvb2wgUHJveHlPYmplY3Q6OnBlcmZvcm1Q
dXQoRXhlY1N0YXRlKiAKIAogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3VtZW50czsKICAg
ICBhcmd1bWVudHMuYXBwZW5kKHRhcmdldCk7Ci0gICAgYXJndW1lbnRzLmFwcGVuZChpZGVudGlm
aWVyVG9TYWZlUHVibGljSlNWYWx1ZSh2bSwgSWRlbnRpZmllcjo6ZnJvbVVpZCgmdm0sIHByb3Bl
cnR5TmFtZS51aWQoKSkpKTsKKyAgICBhcmd1bWVudHMuYXBwZW5kKGlkZW50aWZpZXJUb1NhZmVQ
dWJsaWNKU1ZhbHVlKHZtLCBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCBwcm9wZXJ0eU5hbWUudWlk
KCkpKSk7CiAgICAgYXJndW1lbnRzLmFwcGVuZChwdXRWYWx1ZSk7CiAgICAgYXJndW1lbnRzLmFw
cGVuZCh0aGlzVmFsdWUpOwogICAgIEFTU0VSVCghYXJndW1lbnRzLmhhc092ZXJmbG93ZWQoKSk7
CkBAIC00OTgsNyArNDk5LDcgQEAgYm9vbCBQcm94eU9iamVjdDo6cHV0QnlJbmRleENvbW1vbihF
eGVjUwogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwotICAgIElkZW50aWZpZXIgaWRlbnQgPSBJZGVudGlmaWVyOjpm
cm9tKGV4ZWMsIHByb3BlcnR5TmFtZSk7CisgICAgSWRlbnRpZmllciBpZGVudCA9IElkZW50aWZp
ZXI6OmZyb20odm0sIHByb3BlcnR5TmFtZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgZmFsc2UpOwogICAgIGF1dG8gcGVyZm9ybURlZmF1bHRQdXQgPSBbJl0gKCkgewogICAgICAg
ICBKU09iamVjdCogdGFyZ2V0ID0gdGhpcy0+dGFyZ2V0KCk7CkBAIC02NTMsNyArNjU0LDcgQEAg
Ym9vbCBQcm94eU9iamVjdDo6cGVyZm9ybURlbGV0ZShFeGVjU3RhdAogCiAgICAgTWFya2VkQXJn
dW1lbnRCdWZmZXIgYXJndW1lbnRzOwogICAgIGFyZ3VtZW50cy5hcHBlbmQodGFyZ2V0KTsKLSAg
ICBhcmd1bWVudHMuYXBwZW5kKGlkZW50aWZpZXJUb1NhZmVQdWJsaWNKU1ZhbHVlKHZtLCBJZGVu
dGlmaWVyOjpmcm9tVWlkKCZ2bSwgcHJvcGVydHlOYW1lLnVpZCgpKSkpOworICAgIGFyZ3VtZW50
cy5hcHBlbmQoaWRlbnRpZmllclRvU2FmZVB1YmxpY0pTVmFsdWUodm0sIElkZW50aWZpZXI6OmZy
b21VaWQodm0sIHByb3BlcnR5TmFtZS51aWQoKSkpKTsKICAgICBBU1NFUlQoIWFyZ3VtZW50cy5o
YXNPdmVyZmxvd2VkKCkpOwogICAgIEpTVmFsdWUgdHJhcFJlc3VsdCA9IGNhbGwoZXhlYywgZGVs
ZXRlUHJvcGVydHlNZXRob2QsIGNhbGxUeXBlLCBjYWxsRGF0YSwgaGFuZGxlciwgYXJndW1lbnRz
KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7CkBAIC02OTcsMTEgKzY5
OCwxMiBAQCBib29sIFByb3h5T2JqZWN0OjpkZWxldGVQcm9wZXJ0eShKU0NlbGwqCiAKIGJvb2wg
UHJveHlPYmplY3Q6OmRlbGV0ZVByb3BlcnR5QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0
ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7CiAgICAgUHJveHlPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8UHJveHlPYmplY3QqPihj
ZWxsKTsKLSAgICBJZGVudGlmaWVyIGlkZW50ID0gSWRlbnRpZmllcjo6ZnJvbShleGVjLCBwcm9w
ZXJ0eU5hbWUpOyAKKyAgICBJZGVudGlmaWVyIGlkZW50ID0gSWRlbnRpZmllcjo6ZnJvbSh2bSwg
cHJvcGVydHlOYW1lKTsKICAgICBhdXRvIHBlcmZvcm1EZWZhdWx0RGVsZXRlID0gWyZdICgpIC0+
IGJvb2wgewogICAgICAgICBKU09iamVjdCogdGFyZ2V0ID0gdGhpc09iamVjdC0+dGFyZ2V0KCk7
Ci0gICAgICAgIHJldHVybiB0YXJnZXQtPm1ldGhvZFRhYmxlKGV4ZWMtPnZtKCkpLT5kZWxldGVQ
cm9wZXJ0eUJ5SW5kZXgodGFyZ2V0LCBleGVjLCBwcm9wZXJ0eU5hbWUpOworICAgICAgICByZXR1
cm4gdGFyZ2V0LT5tZXRob2RUYWJsZSh2bSktPmRlbGV0ZVByb3BlcnR5QnlJbmRleCh0YXJnZXQs
IGV4ZWMsIHByb3BlcnR5TmFtZSk7CiAgICAgfTsKICAgICByZXR1cm4gdGhpc09iamVjdC0+cGVy
Zm9ybURlbGV0ZShleGVjLCBpZGVudC5pbXBsKCksIHBlcmZvcm1EZWZhdWx0RGVsZXRlKTsKIH0K
QEAgLTg1NSw3ICs4NTcsNyBAQCBib29sIFByb3h5T2JqZWN0OjpwZXJmb3JtRGVmaW5lT3duUHJv
cGVyCiAKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmd1bWVudHM7CiAgICAgYXJndW1lbnRz
LmFwcGVuZCh0YXJnZXQpOwotICAgIGFyZ3VtZW50cy5hcHBlbmQoaWRlbnRpZmllclRvU2FmZVB1
YmxpY0pTVmFsdWUodm0sIElkZW50aWZpZXI6OmZyb21VaWQoJnZtLCBwcm9wZXJ0eU5hbWUudWlk
KCkpKSk7CisgICAgYXJndW1lbnRzLmFwcGVuZChpZGVudGlmaWVyVG9TYWZlUHVibGljSlNWYWx1
ZSh2bSwgSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgcHJvcGVydHlOYW1lLnVpZCgpKSkpOwogICAg
IGFyZ3VtZW50cy5hcHBlbmQoZGVzY3JpcHRvck9iamVjdCk7CiAgICAgQVNTRVJUKCFhcmd1bWVu
dHMuaGFzT3ZlcmZsb3dlZCgpKTsKICAgICBKU1ZhbHVlIHRyYXBSZXN1bHQgPSBjYWxsKGV4ZWMs
IGRlZmluZVByb3BlcnR5TWV0aG9kLCBjYWxsVHlwZSwgY2FsbERhdGEsIGhhbmRsZXIsIGFyZ3Vt
ZW50cyk7CkBAIC05NTIsNyArOTU0LDcgQEAgdm9pZCBQcm94eU9iamVjdDo6cGVyZm9ybUdldE93
blByb3BlcnR5TgogICAgIEpTVmFsdWUgYXJyYXlMaWtlT2JqZWN0ID0gY2FsbChleGVjLCBvd25L
ZXlzTWV0aG9kLCBjYWxsVHlwZSwgY2FsbERhdGEsIGhhbmRsZXIsIGFyZ3VtZW50cyk7CiAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKIAotICAgIFByb3BlcnR5TmFtZUFy
cmF5IHRyYXBSZXN1bHQoJnZtLCBwcm9wZXJ0eU5hbWVzLnByb3BlcnR5TmFtZU1vZGUoKSwgcHJv
cGVydHlOYW1lcy5wcml2YXRlU3ltYm9sTW9kZSgpKTsKKyAgICBQcm9wZXJ0eU5hbWVBcnJheSB0
cmFwUmVzdWx0KHZtLCBwcm9wZXJ0eU5hbWVzLnByb3BlcnR5TmFtZU1vZGUoKSwgcHJvcGVydHlO
YW1lcy5wcml2YXRlU3ltYm9sTW9kZSgpKTsKICAgICBIYXNoU2V0PFVuaXF1ZWRTdHJpbmdJbXBs
Kj4gdW5jaGVja2VkUmVzdWx0S2V5czsKICAgICB7CiAgICAgICAgIEhhc2hTZXQ8UmVmUHRyPFVu
aXF1ZWRTdHJpbmdJbXBsPj4gc2VlbktleXM7CkBAIC0xMDA2LDcgKzEwMDgsNyBAQCB2b2lkIFBy
b3h5T2JqZWN0OjpwZXJmb3JtR2V0T3duUHJvcGVydHlOCiAgICAgYm9vbCB0YXJnZXRJc0V4ZW5z
aWJsZSA9IHRhcmdldC0+aXNFeHRlbnNpYmxlKGV4ZWMpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIHZvaWQoKSk7CiAKLSAgICBQcm9wZXJ0eU5hbWVBcnJheSB0YXJnZXRLZXlzKCZ2
bSwgcHJvcGVydHlOYW1lcy5wcm9wZXJ0eU5hbWVNb2RlKCksIHByb3BlcnR5TmFtZXMucHJpdmF0
ZVN5bWJvbE1vZGUoKSk7CisgICAgUHJvcGVydHlOYW1lQXJyYXkgdGFyZ2V0S2V5cyh2bSwgcHJv
cGVydHlOYW1lcy5wcm9wZXJ0eU5hbWVNb2RlKCksIHByb3BlcnR5TmFtZXMucHJpdmF0ZVN5bWJv
bE1vZGUoKSk7CiAgICAgdGFyZ2V0LT5tZXRob2RUYWJsZSh2bSktPmdldE93blByb3BlcnR5TmFt
ZXModGFyZ2V0LCBleGVjLCB0YXJnZXRLZXlzLCBlbnVtZXJhdGlvbk1vZGUpOwogICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAgICAgVmVjdG9yPFVuaXF1ZWRTdHJpbmdJ
bXBsKj4gdGFyZ2V0Q29uZmlndXJhYmxlS2V5czsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1JlZ0V4cEdsb2JhbERhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cEdsb2JhbERhdGEuY3BwCShyZXZpc2lvbiAyNDkxMjgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBHbG9iYWxEYXRhLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTEsNyArNTEsNyBAQCBKU1ZhbHVlIFJlZ0V4cEdsb2JhbERhdGE6
OmdldEJhY2tyZWYoRXhlCiAgICAgICAgIGlmICghcmVzdWx0LmlzVW5kZWZpbmVkKCkpCiAgICAg
ICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KLSAgICByZXR1cm4ganNFbXB0eVN0cmluZygm
dm0pOworICAgIHJldHVybiBqc0VtcHR5U3RyaW5nKHZtKTsKIH0KIAogSlNWYWx1ZSBSZWdFeHBH
bG9iYWxEYXRhOjpnZXRMYXN0UGFyZW4oRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCog
b3duZXIpCkBAIC03MCw3ICs3MCw3IEBAIEpTVmFsdWUgUmVnRXhwR2xvYmFsRGF0YTo6Z2V0TGFz
dFBhcmVuKEUKICAgICAgICAgaWYgKCFyZXN1bHQuaXNVbmRlZmluZWQoKSkKICAgICAgICAgICAg
IHJldHVybiByZXN1bHQ7CiAgICAgfQotICAgIHJldHVybiBqc0VtcHR5U3RyaW5nKCZ2bSk7Cisg
ICAgcmV0dXJuIGpzRW1wdHlTdHJpbmcodm0pOwogfQogCiBKU1ZhbHVlIFJlZ0V4cEdsb2JhbERh
dGE6OmdldExlZnRDb250ZXh0KEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIG93bmVy
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwTWF0Y2hlc0FycmF5
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBN
YXRjaGVzQXJyYXkuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9SZWdFeHBNYXRjaGVzQXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDcs
NyArNDcsNyBAQCBKU0FycmF5KiBjcmVhdGVFbXB0eVJlZ0V4cE1hdGNoZXNBcnJheShKCiAgICAg
ICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjk3ODYKICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoYXJyYXkpOwogCi0gICAgICAgIGFycmF5LT5pbml0aWFsaXpl
SW5kZXhXaXRob3V0QmFycmllcihzY29wZSwgMCwganNFbXB0eVN0cmluZygmdm0pKTsKKyAgICAg
ICAgYXJyYXktPmluaXRpYWxpemVJbmRleFdpdGhvdXRCYXJyaWVyKHNjb3BlLCAwLCBqc0VtcHR5
U3RyaW5nKHZtKSk7CiAgICAgICAgIAogICAgICAgICBpZiAodW5zaWduZWQgbnVtU3VicGF0dGVy
bnMgPSByZWdFeHAtPm51bVN1YnBhdHRlcm5zKCkpIHsKICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDE7IGkgPD0gbnVtU3VicGF0dGVybnM7ICsraSkKQEAgLTU4LDcgKzU4LDcgQEAgSlNB
cnJheSogY3JlYXRlRW1wdHlSZWdFeHBNYXRjaGVzQXJyYXkoSgogICAgICAgICBhcnJheSA9IHRy
eUNyZWF0ZVVuaW5pdGlhbGl6ZWRSZWdFeHBNYXRjaGVzQXJyYXkoc2NvcGUsICZkZWZlcnJhbENv
bnRleHQsIGdsb2JhbE9iamVjdC0+cmVnRXhwTWF0Y2hlc0FycmF5U3RydWN0dXJlKCksIHJlZ0V4
cC0+bnVtU3VicGF0dGVybnMoKSArIDEpOwogICAgICAgICBSRUxFQVNFX0FTU0VSVChhcnJheSk7
CiAgICAgICAgIAotICAgICAgICBhcnJheS0+aW5pdGlhbGl6ZUluZGV4V2l0aG91dEJhcnJpZXIo
c2NvcGUsIDAsIGpzRW1wdHlTdHJpbmcoJnZtKSwgQXJyYXlXaXRoQ29udGlndW91cyk7CisgICAg
ICAgIGFycmF5LT5pbml0aWFsaXplSW5kZXhXaXRob3V0QmFycmllcihzY29wZSwgMCwganNFbXB0
eVN0cmluZyh2bSksIEFycmF5V2l0aENvbnRpZ3VvdXMpOwogICAgICAgICAKICAgICAgICAgaWYg
KHVuc2lnbmVkIG51bVN1YnBhdHRlcm5zID0gcmVnRXhwLT5udW1TdWJwYXR0ZXJucygpKSB7CiAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDw9IG51bVN1YnBhdHRlcm5zOyArK2kp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBNYXRjaGVzQXJyYXku
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBNYXRj
aGVzQXJyYXkuaAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvUmVnRXhwTWF0Y2hlc0FycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogIENvcHlyaWdodCAoQykgMjAwOC0yMDE4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBS
ZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxOSBBcHBsZSBJbmMuIEFsbCBSaWdo
dHMgUmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC0xNTksNyArMTU5LDcgQEAgQUxX
QVlTX0lOTElORSBKU0FycmF5KiBjcmVhdGVSZWdFeHBNYXRjaAogICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAxOyBpIDw9IG51bVN1YnBhdHRlcm5zOyArK2kpIHsKICAgICAgICAgICAgIFN0cmlu
ZyBncm91cE5hbWUgPSByZWdFeHAtPmdldENhcHR1cmVHcm91cE5hbWUoaSk7CiAgICAgICAgICAg
ICBpZiAoIWdyb3VwTmFtZS5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgZ3JvdXBzLT5wdXRE
aXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCBncm91cE5hbWUpLCBhcnJheS0+
Z2V0SW5kZXhRdWlja2x5KGkpKTsKKyAgICAgICAgICAgICAgICBncm91cHMtPnB1dERpcmVjdCh2
bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgZ3JvdXBOYW1lKSwgYXJyYXktPmdldEluZGV4
UXVpY2tseShpKSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIGFycmF5OwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwUHJvdG90eXBlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBQcm90b3R5cGUuY3Bw
CShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdF
eHBQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBD
b3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQotICog
IENvcHlyaWdodCAoQykgMjAwMy0yMDE3IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4K
KyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2
ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC0zNDQsNyArMzQ0LDcgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCByZWdFeHBQcm90bwogICAgIGF1dG8gZmxhZ3MgPSBmbGFnc1N0cmlu
ZyhleGVjLCBhc09iamVjdCh0aGlzVmFsdWUpKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNT
dHJpbmcoZXhlYywgZmxhZ3MuZGF0YSgpKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1N0cmluZyh2bSwgZmxhZ3MuZGF0YSgpKSk7CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFy
YWN0ZXJUeXBlPgpAQCAtMzc1LDYgKzM3NSw3IEBAIGlubGluZSB2b2lkIGFwcGVuZExpbmVUZXJt
aW5hdG9yRXNjYXBlPFUKIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgogc3RhdGlj
IGlubGluZSBKU1ZhbHVlIHJlZ0V4cFByb3RvR2V0dGVyU291cmNlSW50ZXJuYWwoRXhlY1N0YXRl
KiBleGVjLCBjb25zdCBTdHJpbmcmIHBhdHRlcm4sIGNvbnN0IENoYXJhY3RlclR5cGUqIGNoYXJh
Y3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAg
IGJvb2wgcHJldmlvdXNDaGFyYWN0ZXJXYXNCYWNrc2xhc2ggPSBmYWxzZTsKICAgICBib29sIGlu
QnJhY2tldHMgPSBmYWxzZTsKICAgICBib29sIHNob3VsZEVzY2FwZSA9IGZhbHNlOwpAQCAtMzg1
LDcgKzM4Niw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSByZWdFeHBQcm90b0dldHRlclMKICAg
ICAvLyBzb3VyY2UgY2Fubm90IGV2ZXIgdmFsaWRseSBiZSAiIi4gSWYgdGhlIHNvdXJjZSBpcyBl
bXB0eSwgcmV0dXJuIGEgZGlmZmVyZW50IFBhdHRlcm4KICAgICAvLyB0aGF0IHdvdWxkIG1hdGNo
IHRoZSBzYW1lIHRoaW5nLgogICAgIGlmICghbGVuZ3RoKQotICAgICAgICByZXR1cm4ganNOb250
cml2aWFsU3RyaW5nKGV4ZWMsICIoPzopIl9zKTsKKyAgICAgICAgcmV0dXJuIGpzTm9udHJpdmlh
bFN0cmluZyh2bSwgIig/OikiX3MpOwogCiAgICAgLy8gZWFybHkgcmV0dXJuIGZvciBzdHJpbmdz
IHRoYXQgZG9uJ3QgY29udGFpbiBhIGZvcndhcmRzIHNsYXNoIGFuZCBMaW5lVGVybWluYXRvcgog
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewpAQCAtNDE2LDcgKzQx
Nyw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSByZWdFeHBQcm90b0dldHRlclMKICAgICB9CiAK
ICAgICBpZiAoIXNob3VsZEVzY2FwZSkKLSAgICAgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIHBh
dHRlcm4pOworICAgICAgICByZXR1cm4ganNTdHJpbmcodm0sIHBhdHRlcm4pOwogCiAgICAgcHJl
dmlvdXNDaGFyYWN0ZXJXYXNCYWNrc2xhc2ggPSBmYWxzZTsKICAgICBpbkJyYWNrZXRzID0gZmFs
c2U7CkBAIC00NTAsNyArNDUxLDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIHJlZ0V4cFByb3Rv
R2V0dGVyUwogICAgICAgICAgICAgcHJldmlvdXNDaGFyYWN0ZXJXYXNCYWNrc2xhc2ggPSBjaCA9
PSAnXFwnOwogICAgIH0KIAotICAgIHJldHVybiBqc1N0cmluZyhleGVjLCByZXN1bHQudG9TdHJp
bmcoKSk7CisgICAgcmV0dXJuIGpzU3RyaW5nKHZtLCByZXN1bHQudG9TdHJpbmcoKSk7CiB9CiAK
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVnRXhwUHJvdG9HZXR0ZXJTb3VyY2UoRXhl
Y1N0YXRlKiBleGVjKQpAQCAtNDYyLDcgKzQ2Myw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgcmVnRXhwUHJvdG8KICAgICBhdXRvKiByZWdleHAgPSBqc0R5bmFtaWNDYXN0PFJlZ0V4
cE9iamVjdCo+KHZtLCB0aGlzVmFsdWUpOwogICAgIGlmIChVTkxJS0VMWSghcmVnZXhwKSkgewog
ICAgICAgICBpZiAodGhpc1ZhbHVlLmluaGVyaXRzPFJlZ0V4cFByb3RvdHlwZT4odm0pKQotICAg
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyhleGVjLCAiKD86KSJfcykp
OworICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyh2bSwgIig/Oiki
X3MpKTsKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUsICJUaGUg
UmVnRXhwLnByb3RvdHlwZS5zb3VyY2UgZ2V0dGVyIGNhbiBvbmx5IGJlIGNhbGxlZCBvbiBhIFJl
Z0V4cCBvYmplY3QiX3MpOwogICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvUmVnRXhwU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cFN0cmluZ0l0ZXJhdG9yUHJvdG90eXBl
LmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
UmVnRXhwU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxOSBBbGV4ZXkgU2h2YXlrYSA8c2h2YWlr
YWxlc2hAZ21haWwuY29tPi4KKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQzLDcg
KzQ0LDcgQEAgdm9pZCBSZWdFeHBTdHJpbmdJdGVyYXRvclByb3RvdHlwZTo6ZmluaQogewogICAg
IEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8o
KSkpOwotICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVz
LT50b1N0cmluZ1RhZ1N5bWJvbCwganNTdHJpbmcoJnZtLCAiUmVnRXhwIFN0cmluZyBJdGVyYXRv
ciIpLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVh
ZE9ubHkpOworICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5h
bWVzLT50b1N0cmluZ1RhZ1N5bWJvbCwganNTdHJpbmcodm0sICJSZWdFeHAgU3RyaW5nIEl0ZXJh
dG9yIiksIFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8IFByb3BlcnR5QXR0cmlidXRlOjpS
ZWFkT25seSk7CiAgICAgSlNDX0JVSUxUSU5fRlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lUSU9OKHZt
LnByb3BlcnR5TmFtZXMtPm5leHQsIHJlZ0V4cFN0cmluZ0l0ZXJhdG9yUHJvdG90eXBlTmV4dENv
ZGVHZW5lcmF0b3IsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9u
dEVudW0pKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxp
bmdQcm9maWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU2FtcGxpbmdQcm9maWxlci5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01NDksNyArNTQ5LDcgQEAgdm9pZCBTYW1wbGluZ1Byb2ZpbGVyOjpwcm9jZXNzVW52ZXJpZmll
ZAogICAgICAgICAgICAgfTsKIAogICAgICAgICAgICAgaWYgKGNhbGxlZUNlbGwtPnR5cGUoKSAh
PSBKU0Z1bmN0aW9uVHlwZSkgewotICAgICAgICAgICAgICAgIGlmIChKU09iamVjdCogb2JqZWN0
ID0ganNEeW5hbWljQ2FzdDxKU09iamVjdCo+KCpjYWxsZWVDZWxsLT52bSgpLCBjYWxsZWVDZWxs
KSkKKyAgICAgICAgICAgICAgICBpZiAoSlNPYmplY3QqIG9iamVjdCA9IGpzRHluYW1pY0Nhc3Q8
SlNPYmplY3QqPihjYWxsZWVDZWxsLT52bSgpLCBjYWxsZWVDZWxsKSkKICAgICAgICAgICAgICAg
ICAgICAgYWRkQ2FsbGVlKG9iamVjdCk7CiAKICAgICAgICAgICAgICAgICBpZiAoIWFscmVhZHlI
YXNFeGVjdXRhYmxlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NyaXB0
RXhlY3V0YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU2NyaXB0RXhlY3V0YWJsZS5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1NjcmlwdEV4ZWN1dGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMTMsNyArMTEzLDcgQEAgdm9pZCBTY3JpcHRFeGVjdXRhYmxlOjpjbGVhckNvZGUoSXNvQ2Vs
bAogCiB2b2lkIFNjcmlwdEV4ZWN1dGFibGU6Omluc3RhbGxDb2RlKENvZGVCbG9jayogY29kZUJs
b2NrKQogewotICAgIGluc3RhbGxDb2RlKCpjb2RlQmxvY2stPnZtKCksIGNvZGVCbG9jaywgY29k
ZUJsb2NrLT5jb2RlVHlwZSgpLCBjb2RlQmxvY2stPnNwZWNpYWxpemF0aW9uS2luZCgpKTsKKyAg
ICBpbnN0YWxsQ29kZShjb2RlQmxvY2stPnZtKCksIGNvZGVCbG9jaywgY29kZUJsb2NrLT5jb2Rl
VHlwZSgpLCBjb2RlQmxvY2stPnNwZWNpYWxpemF0aW9uS2luZCgpKTsKIH0KIAogdm9pZCBTY3Jp
cHRFeGVjdXRhYmxlOjppbnN0YWxsQ29kZShWTSYgdm0sIENvZGVCbG9jayogZ2VuZXJpY0NvZGVC
bG9jaywgQ29kZVR5cGUgY29kZVR5cGUsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKQEAg
LTI0OSwxNiArMjQ5LDE2IEBAIGJvb2wgU2NyaXB0RXhlY3V0YWJsZTo6aGFzQ2xlYXJhYmxlQ29k
ZSgKIENvZGVCbG9jayogU2NyaXB0RXhlY3V0YWJsZTo6bmV3Q29kZUJsb2NrRm9yKAogICAgIENv
ZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCwgSlNGdW5jdGlvbiogZnVuY3Rpb24sIEpTU2NvcGUq
IHNjb3BlLCBFeGNlcHRpb24qJiBleGNlcHRpb24pCiB7Ci0gICAgVk0qIHZtID0gc2NvcGUtPnZt
KCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSgqdm0pOworICAg
IFZNJiB2bSA9IHNjb3BlLT52bSgpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwogCi0gICAgQVNTRVJUKHZtLT5oZWFwLmlzRGVmZXJyZWQoKSk7CisgICAg
QVNTRVJUKHZtLmhlYXAuaXNEZWZlcnJlZCgpKTsKICAgICBBU1NFUlQoZW5kQ29sdW1uKCkgIT0g
VUlOVF9NQVgpOwogCi0gICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHNjb3BlLT5n
bG9iYWxPYmplY3QoKnZtKTsKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gc2Nv
cGUtPmdsb2JhbE9iamVjdCh2bSk7CiAgICAgRXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0
LT5nbG9iYWxFeGVjKCk7CiAKLSAgICBpZiAoY2xhc3NJbmZvKCp2bSkgPT0gRXZhbEV4ZWN1dGFi
bGU6OmluZm8oKSkgeworICAgIGlmIChjbGFzc0luZm8odm0pID09IEV2YWxFeGVjdXRhYmxlOjpp
bmZvKCkpIHsKICAgICAgICAgRXZhbEV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBqc0Nhc3Q8RXZh
bEV4ZWN1dGFibGUqPih0aGlzKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoa2luZCA9PSBDb2Rl
Rm9yQ2FsbCk7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFleGVjdXRhYmxlLT5tX2V2YWxDb2Rl
QmxvY2spOwpAQCAtMjc1LDcgKzI3NSw3IEBAIENvZGVCbG9jayogU2NyaXB0RXhlY3V0YWJsZTo6
bmV3Q29kZUJsb2MKICAgICAgICAgcmV0dXJuIGNvZGVCbG9jazsKICAgICB9CiAgICAgCi0gICAg
aWYgKGNsYXNzSW5mbygqdm0pID09IFByb2dyYW1FeGVjdXRhYmxlOjppbmZvKCkpIHsKKyAgICBp
ZiAoY2xhc3NJbmZvKHZtKSA9PSBQcm9ncmFtRXhlY3V0YWJsZTo6aW5mbygpKSB7CiAgICAgICAg
IFByb2dyYW1FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0ganNDYXN0PFByb2dyYW1FeGVjdXRhYmxl
Kj4odGhpcyk7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGtpbmQgPT0gQ29kZUZvckNhbGwpOwog
ICAgICAgICBSRUxFQVNFX0FTU0VSVCghZXhlY3V0YWJsZS0+bV9wcm9ncmFtQ29kZUJsb2NrKTsK
QEAgLTI5Miw3ICsyOTIsNyBAQCBDb2RlQmxvY2sqIFNjcmlwdEV4ZWN1dGFibGU6Om5ld0NvZGVC
bG9jCiAgICAgICAgIHJldHVybiBjb2RlQmxvY2s7CiAgICAgfQogCi0gICAgaWYgKGNsYXNzSW5m
bygqdm0pID09IE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlOjppbmZvKCkpIHsKKyAgICBpZiAoY2xh
c3NJbmZvKHZtKSA9PSBNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZTo6aW5mbygpKSB7CiAgICAgICAg
IE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0ganNDYXN0PE1vZHVsZVByb2dy
YW1FeGVjdXRhYmxlKj4odGhpcyk7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGtpbmQgPT0gQ29k
ZUZvckNhbGwpOwogICAgICAgICBSRUxFQVNFX0FTU0VSVCghZXhlY3V0YWJsZS0+bV9tb2R1bGVQ
cm9ncmFtQ29kZUJsb2NrKTsKQEAgLTMwOSw3ICszMDksNyBAQCBDb2RlQmxvY2sqIFNjcmlwdEV4
ZWN1dGFibGU6Om5ld0NvZGVCbG9jCiAgICAgICAgIHJldHVybiBjb2RlQmxvY2s7CiAgICAgfQog
Ci0gICAgUkVMRUFTRV9BU1NFUlQoY2xhc3NJbmZvKCp2bSkgPT0gRnVuY3Rpb25FeGVjdXRhYmxl
OjppbmZvKCkpOworICAgIFJFTEVBU0VfQVNTRVJUKGNsYXNzSW5mbyh2bSkgPT0gRnVuY3Rpb25F
eGVjdXRhYmxlOjppbmZvKCkpOwogICAgIFJFTEVBU0VfQVNTRVJUKGZ1bmN0aW9uKTsKICAgICBG
dW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBqc0Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxl
Kj4odGhpcyk7CiAgICAgUkVMRUFTRV9BU1NFUlQoIWV4ZWN1dGFibGUtPmNvZGVCbG9ja0Zvcihr
aW5kKSk7CkBAIC0zMjYsNyArMzI2LDcgQEAgQ29kZUJsb2NrKiBTY3JpcHRFeGVjdXRhYmxlOjpu
ZXdDb2RlQmxvYwogICAgIH0KICAgICBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKiB1bmxpbmtl
ZENvZGVCbG9jayA9IAogICAgICAgICBleGVjdXRhYmxlLT5tX3VubGlua2VkRXhlY3V0YWJsZS0+
dW5saW5rZWRDb2RlQmxvY2tGb3IoCi0gICAgICAgICAgICAqdm0sIGV4ZWN1dGFibGUtPnNvdXJj
ZSgpLCBraW5kLCBjb2RlR2VuZXJhdGlvbk1vZGUsIGVycm9yLCAKKyAgICAgICAgICAgIHZtLCBl
eGVjdXRhYmxlLT5zb3VyY2UoKSwga2luZCwgY29kZUdlbmVyYXRpb25Nb2RlLCBlcnJvciwgCiAg
ICAgICAgICAgICBleGVjdXRhYmxlLT5wYXJzZU1vZGUoKSk7CiAgICAgcmVjb3JkUGFyc2UoCiAg
ICAgICAgIGV4ZWN1dGFibGUtPm1fdW5saW5rZWRFeGVjdXRhYmxlLT5mZWF0dXJlcygpLCAKQEAg
LTM0NSwxMyArMzQ1LDEzIEBAIENvZGVCbG9jayogU2NyaXB0RXhlY3V0YWJsZTo6bmV3Q29kZUJs
b2MKIENvZGVCbG9jayogU2NyaXB0RXhlY3V0YWJsZTo6bmV3UmVwbGFjZW1lbnRDb2RlQmxvY2tG
b3IoCiAgICAgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQogewotICAgIFZNJiB2bSA9ICp0
aGlzLT52bSgpOworICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgaWYgKGNsYXNzSW5mbyh2
bSkgPT0gRXZhbEV4ZWN1dGFibGU6OmluZm8oKSkgewogICAgICAgICBSRUxFQVNFX0FTU0VSVChr
aW5kID09IENvZGVGb3JDYWxsKTsKICAgICAgICAgRXZhbEV4ZWN1dGFibGUqIGV4ZWN1dGFibGUg
PSBqc0Nhc3Q8RXZhbEV4ZWN1dGFibGUqPih0aGlzKTsKICAgICAgICAgRXZhbENvZGVCbG9jayog
YmFzZWxpbmUgPSBzdGF0aWNfY2FzdDxFdmFsQ29kZUJsb2NrKj4oCiAgICAgICAgICAgICBleGVj
dXRhYmxlLT5jb2RlQmxvY2soKS0+YmFzZWxpbmVWZXJzaW9uKCkpOwotICAgICAgICBFdmFsQ29k
ZUJsb2NrKiByZXN1bHQgPSBFdmFsQ29kZUJsb2NrOjpjcmVhdGUoJnZtLAorICAgICAgICBFdmFs
Q29kZUJsb2NrKiByZXN1bHQgPSBFdmFsQ29kZUJsb2NrOjpjcmVhdGUodm0sCiAgICAgICAgICAg
ICBDb2RlQmxvY2s6OkNvcHlQYXJzZWRCbG9jaywgKmJhc2VsaW5lKTsKICAgICAgICAgcmVzdWx0
LT5zZXRBbHRlcm5hdGl2ZSh2bSwgYmFzZWxpbmUpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwpA
QCAtMzYyLDcgKzM2Miw3IEBAIENvZGVCbG9jayogU2NyaXB0RXhlY3V0YWJsZTo6bmV3UmVwbGFj
ZW0KICAgICAgICAgUHJvZ3JhbUV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBqc0Nhc3Q8UHJvZ3Jh
bUV4ZWN1dGFibGUqPih0aGlzKTsKICAgICAgICAgUHJvZ3JhbUNvZGVCbG9jayogYmFzZWxpbmUg
PSBzdGF0aWNfY2FzdDxQcm9ncmFtQ29kZUJsb2NrKj4oCiAgICAgICAgICAgICBleGVjdXRhYmxl
LT5jb2RlQmxvY2soKS0+YmFzZWxpbmVWZXJzaW9uKCkpOwotICAgICAgICBQcm9ncmFtQ29kZUJs
b2NrKiByZXN1bHQgPSBQcm9ncmFtQ29kZUJsb2NrOjpjcmVhdGUoJnZtLAorICAgICAgICBQcm9n
cmFtQ29kZUJsb2NrKiByZXN1bHQgPSBQcm9ncmFtQ29kZUJsb2NrOjpjcmVhdGUodm0sCiAgICAg
ICAgICAgICBDb2RlQmxvY2s6OkNvcHlQYXJzZWRCbG9jaywgKmJhc2VsaW5lKTsKICAgICAgICAg
cmVzdWx0LT5zZXRBbHRlcm5hdGl2ZSh2bSwgYmFzZWxpbmUpOwogICAgICAgICByZXR1cm4gcmVz
dWx0OwpAQCAtMzczLDcgKzM3Myw3IEBAIENvZGVCbG9jayogU2NyaXB0RXhlY3V0YWJsZTo6bmV3
UmVwbGFjZW0KICAgICAgICAgTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBq
c0Nhc3Q8TW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUqPih0aGlzKTsKICAgICAgICAgTW9kdWxlUHJv
Z3JhbUNvZGVCbG9jayogYmFzZWxpbmUgPSBzdGF0aWNfY2FzdDxNb2R1bGVQcm9ncmFtQ29kZUJs
b2NrKj4oCiAgICAgICAgICAgICBleGVjdXRhYmxlLT5jb2RlQmxvY2soKS0+YmFzZWxpbmVWZXJz
aW9uKCkpOwotICAgICAgICBNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKiByZXN1bHQgPSBNb2R1bGVQ
cm9ncmFtQ29kZUJsb2NrOjpjcmVhdGUoJnZtLAorICAgICAgICBNb2R1bGVQcm9ncmFtQ29kZUJs
b2NrKiByZXN1bHQgPSBNb2R1bGVQcm9ncmFtQ29kZUJsb2NrOjpjcmVhdGUodm0sCiAgICAgICAg
ICAgICBDb2RlQmxvY2s6OkNvcHlQYXJzZWRCbG9jaywgKmJhc2VsaW5lKTsKICAgICAgICAgcmVz
dWx0LT5zZXRBbHRlcm5hdGl2ZSh2bSwgYmFzZWxpbmUpOwogICAgICAgICByZXR1cm4gcmVzdWx0
OwpAQCAtMzgzLDcgKzM4Myw3IEBAIENvZGVCbG9jayogU2NyaXB0RXhlY3V0YWJsZTo6bmV3UmVw
bGFjZW0KICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBqc0Nhc3Q8RnVuY3Rp
b25FeGVjdXRhYmxlKj4odGhpcyk7CiAgICAgRnVuY3Rpb25Db2RlQmxvY2sqIGJhc2VsaW5lID0g
c3RhdGljX2Nhc3Q8RnVuY3Rpb25Db2RlQmxvY2sqPigKICAgICAgICAgZXhlY3V0YWJsZS0+Y29k
ZUJsb2NrRm9yKGtpbmQpLT5iYXNlbGluZVZlcnNpb24oKSk7Ci0gICAgRnVuY3Rpb25Db2RlQmxv
Y2sqIHJlc3VsdCA9IEZ1bmN0aW9uQ29kZUJsb2NrOjpjcmVhdGUoJnZtLAorICAgIEZ1bmN0aW9u
Q29kZUJsb2NrKiByZXN1bHQgPSBGdW5jdGlvbkNvZGVCbG9jazo6Y3JlYXRlKHZtLAogICAgICAg
ICBDb2RlQmxvY2s6OkNvcHlQYXJzZWRCbG9jaywgKmJhc2VsaW5lKTsKICAgICByZXN1bHQtPnNl
dEFsdGVybmF0aXZlKHZtLCBiYXNlbGluZSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTM5Nyw3
ICszOTcsNyBAQCBzdGF0aWMgdm9pZCBzZXR1cExMSW50KENvZGVCbG9jayogY29kZUJsCiBzdGF0
aWMgdm9pZCBzZXR1cEpJVChWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrKQogewogI2lmIEVO
QUJMRShKSVQpCi0gICAgQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0ID0gSklUOjpjb21waWxlKCZ2
bSwgY29kZUJsb2NrLCBKSVRDb21waWxhdGlvbk11c3RTdWNjZWVkKTsKKyAgICBDb21waWxhdGlv
blJlc3VsdCByZXN1bHQgPSBKSVQ6OmNvbXBpbGUodm0sIGNvZGVCbG9jaywgSklUQ29tcGlsYXRp
b25NdXN0U3VjY2VlZCk7CiAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0ID09IENvbXBpbGF0aW9u
U3VjY2Vzc2Z1bCk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTSh2bSk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TZXRJdGVyYXRvclByb3RvdHlwZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2V0SXRlcmF0b3JQcm90b3R5cGUu
Y3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
ZXRJdGVyYXRvclByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE2IEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOSBBcHBsZSwgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zOSw3ICszOSw3
IEBAIHZvaWQgU2V0SXRlcmF0b3JQcm90b3R5cGU6OmZpbmlzaENyZWF0aW8KICAgICBBU1NFUlQo
aW5oZXJpdHModm0sIGluZm8oKSkpOwogCiAgICAgSlNDX0JVSUxUSU5fRlVOQ1RJT05fV0lUSE9V
VF9UUkFOU0lUSU9OKCJuZXh0Iiwgc2V0SXRlcmF0b3JQcm90b3R5cGVOZXh0Q29kZUdlbmVyYXRv
ciwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOwot
ICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT50b1N0
cmluZ1RhZ1N5bWJvbCwganNTdHJpbmcoJnZtLCAiU2V0IEl0ZXJhdG9yIiksIFByb3BlcnR5QXR0
cmlidXRlOjpEb250RW51bSB8IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSk7CisgICAgcHV0
RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPnRvU3RyaW5nVGFn
U3ltYm9sLCBqc1N0cmluZyh2bSwgIlNldCBJdGVyYXRvciIpLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6
RG9udEVudW0gfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpOwogfQogCiB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TZXRQcm90b3R5cGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NldFByb3RvdHlwZS5jcHAJKHJldmlz
aW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NldFByb3RvdHlw
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDEzLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzEsNyArNzEsNyBAQCB2b2lkIFNldFByb3RvdHlw
ZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtCiAgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24o
dm0sIHZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLnZhbHVlc1B1YmxpY05hbWUoKSwg
dmFsdWVzLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVt
KSk7CiAgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMt
PmJ1aWx0aW5OYW1lcygpLmtleXNQdWJsaWNOYW1lKCksIHZhbHVlcywgc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOwogICAgIHB1dERpcmVjdFdpdGhv
dXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5pdGVyYXRvclN5bWJvbCwgdmFsdWVz
LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7Ci0g
ICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPnRvU3Ry
aW5nVGFnU3ltYm9sLCBqc1N0cmluZygmdm0sICJTZXQiKSwgUHJvcGVydHlBdHRyaWJ1dGU6OkRv
bnRFbnVtIHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KTsKKyAgICBwdXREaXJlY3RXaXRo
b3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+dG9TdHJpbmdUYWdTeW1ib2wsIGpz
U3RyaW5nKHZtLCAiU2V0IiksIFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8IFByb3BlcnR5
QXR0cmlidXRlOjpSZWFkT25seSk7CiAKICAgICBKU0NfTkFUSVZFX0dFVFRFUl9XSVRIT1VUX1RS
QU5TSVRJT04odm0ucHJvcGVydHlOYW1lcy0+c2l6ZSwgc2V0UHJvdG9GdW5jU2l6ZSwgUHJvcGVy
dHlBdHRyaWJ1dGU6OkRvbnRFbnVtIHwgUHJvcGVydHlBdHRyaWJ1dGU6OkFjY2Vzc29yKTsKIH0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0YWNrRnJhbWUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0YWNrRnJhbWUuY3BwCShy
ZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdGFja0Zy
YW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTExNCw3ICsxMTQsNyBAQCB2b2lkIFN0YWNrRnJh
bWU6OmNvbXB1dGVMaW5lQW5kQ29sdW1uKHVuCiAgICAgbV9jb2RlQmxvY2stPmV4cHJlc3Npb25S
YW5nZUZvckJ5dGVjb2RlT2Zmc2V0KG1fYnl0ZWNvZGVPZmZzZXQsIGRpdm90LCB1bnVzZWRTdGFy
dE9mZnNldCwgdW51c2VkRW5kT2Zmc2V0LCBsaW5lLCBjb2x1bW4pOwogCiAgICAgU2NyaXB0RXhl
Y3V0YWJsZSogZXhlY3V0YWJsZSA9IG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKTsKLSAg
ICBpZiAoT3B0aW9uYWw8aW50PiBvdmVycmlkZUxpbmVOdW1iZXIgPSBleGVjdXRhYmxlLT5vdmVy
cmlkZUxpbmVOdW1iZXIoKm1fY29kZUJsb2NrLT52bSgpKSkKKyAgICBpZiAoT3B0aW9uYWw8aW50
PiBvdmVycmlkZUxpbmVOdW1iZXIgPSBleGVjdXRhYmxlLT5vdmVycmlkZUxpbmVOdW1iZXIobV9j
b2RlQmxvY2stPnZtKCkpKQogICAgICAgICBsaW5lID0gb3ZlcnJpZGVMaW5lTnVtYmVyLnZhbHVl
KCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ0NvbnN0
cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
dHJpbmdDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cmluZ0NvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEgSGFycmkgUG9ydGVu
IChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwOCwgMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMTkg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAt
ODAsNyArODAsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpCiAg
ICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKICAgICAgICAgdW5zaWduZWQgY29kZSA9IGV4ZWMtPnVu
Y2hlY2tlZEFyZ3VtZW50KDApLnRvVUludDMyKGV4ZWMpOwogICAgICAgICAvLyBOb3QgY2hlY2tp
bmcgZm9yIGFuIGV4Y2VwdGlvbiBoZXJlIGlzIG9rIGJlY2F1c2UganNTaW5nbGVDaGFyYWN0ZXJT
dHJpbmcgd2lsbCBqdXN0IGZldGNoIGFuIHVudXNlZCBzdHJpbmcgaWYgdGhlcmUncyBhbiBleGNl
cHRpb24uCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNTaW5nbGVDaGFyYWN0ZXJT
dHJpbmcoZXhlYywgY29kZSkpOworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU2lu
Z2xlQ2hhcmFjdGVyU3RyaW5nKHZtLCBjb2RlKSk7CiAgICAgfQogCiAgICAgTENoYXIqIGJ1ZjhC
aXQ7CkBAIC05OCwxNiArOTgsMTYgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgc3RyaQogICAgICAgICAgICAgICAgIGJ1ZjE2Qml0W2ldID0gc3RhdGljX2Nhc3Q8VUNoYXI+
KGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KGkpLnRvVUludDMyKGV4ZWMpKTsKICAgICAgICAgICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6
ZW5jb2RlKGpzU3RyaW5nKGV4ZWMsIFdURk1vdmUoaW1wbDE2Qml0KSkpKTsKKyAgICAgICAgICAg
IFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKHZtLCBX
VEZNb3ZlKGltcGwxNkJpdCkpKSk7CiAgICAgICAgIH0KICAgICAgICAgYnVmOEJpdFtpXSA9IHN0
YXRpY19jYXN0PExDaGFyPihjaGFyYWN0ZXIpOwogICAgIH0KLSAgICBSRUxFQVNFX0FORF9SRVRV
Uk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyhleGVjLCBXVEZNb3ZlKGltcGw4Qml0
KSkpKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShqc1N0
cmluZyh2bSwgV1RGTW92ZShpbXBsOEJpdCkpKSk7CiB9CiAKIEpTU3RyaW5nKiBKU0NfSE9TVF9D
QUxMIHN0cmluZ0Zyb21DaGFyQ29kZShFeGVjU3RhdGUqIGV4ZWMsIGludDMyX3QgYXJnKQogewot
ICAgIHJldHVybiBqc1NpbmdsZUNoYXJhY3RlclN0cmluZyhleGVjLCBhcmcpOworICAgIHJldHVy
biBqc1NpbmdsZUNoYXJhY3RlclN0cmluZyhleGVjLT52bSgpLCBhcmcpOwogfQogCiBzdGF0aWMg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdGcm9tQ29kZVBvaW50KEV4ZWNTdGF0
ZSogZXhlYykKQEAgLTEzNiw3ICsxMzYsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBzdHJpCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBSRUxFQVNFX0FORF9SRVRVUk4o
c2NvcGUsIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyhleGVjLCBidWlsZGVyLnRvU3RyaW5nKCkp
KSk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUoanNTdHJp
bmcodm0sIGJ1aWxkZXIudG9TdHJpbmcoKSkpKTsKIH0KIAogc3RhdGljIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgY29uc3RydWN0V2l0aFN0cmluZ0NvbnN0cnVjdG9yKEV4ZWNTdGF0ZSog
ZXhlYykKQEAgLTE1NywxNSArMTU3LDE3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGNvbnMKIAogSlNTdHJpbmcqIHN0cmluZ0NvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhl
YywgSlNWYWx1ZSBhcmd1bWVudCkKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGlm
IChhcmd1bWVudC5pc1N5bWJvbCgpKQotICAgICAgICByZXR1cm4ganNOb250cml2aWFsU3RyaW5n
KGV4ZWMsIGFzU3ltYm9sKGFyZ3VtZW50KS0+ZGVzY3JpcHRpdmVTdHJpbmcoKSk7CisgICAgICAg
IHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcodm0sIGFzU3ltYm9sKGFyZ3VtZW50KS0+ZGVzY3Jp
cHRpdmVTdHJpbmcoKSk7CiAgICAgcmV0dXJuIGFyZ3VtZW50LnRvU3RyaW5nKGV4ZWMpOwogfQog
CiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsU3RyaW5nQ29uc3RydWN0
b3IoRXhlY1N0YXRlKiBleGVjKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgaWYg
KCFleGVjLT5hcmd1bWVudENvdW50KCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNFbXB0eVN0cmluZyhleGVjKSk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNF
bXB0eVN0cmluZyh2bSkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoc3RyaW5nQ29uc3Ry
dWN0b3IoZXhlYywgZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkpKTsKIH0KIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ0l0ZXJhdG9y
UHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSwgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTkgQXBwbGUsIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxNSBZdXN1a2UgU3V6dWtpIDx1
dGF0YW5lLnRlYUBnbWFpbC5jb20+LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtNDEsNyArNDEsNyBA
QCB2b2lkIFN0cmluZ0l0ZXJhdG9yUHJvdG90eXBlOjpmaW5pc2hDcmVhCiB7CiAgICAgQmFzZTo6
ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7Ci0g
ICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPnRvU3Ry
aW5nVGFnU3ltYm9sLCBqc1N0cmluZygmdm0sICJTdHJpbmcgSXRlcmF0b3IiKSwgUHJvcGVydHlB
dHRyaWJ1dGU6OkRvbnRFbnVtIHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KTsKKyAgICBw
dXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+dG9TdHJpbmdU
YWdTeW1ib2wsIGpzU3RyaW5nKHZtLCAiU3RyaW5nIEl0ZXJhdG9yIiksIFByb3BlcnR5QXR0cmli
dXRlOjpEb250RW51bSB8IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSk7CiAgICAgSlNDX0JV
SUxUSU5fRlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lUSU9OKHZtLnByb3BlcnR5TmFtZXMtPm5leHQs
IHN0cmluZ0l0ZXJhdG9yUHJvdG90eXBlTmV4dENvZGVHZW5lcmF0b3IsIHN0YXRpY19jYXN0PHVu
c2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKIH0KIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdPYmplY3QuY3BwCShyZXZpc2lvbiAy
NDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdPYmplY3QuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5
OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQotICogIENvcHlyaWdodCAoQykg
MjAwNC0yMDA4LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5
cmlnaHQgKEMpIDIwMDQtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljCkBAIC01Nyw3ICs1Nyw4IEBAIGJvb2wgU3RyaW5nT2JqZWN0OjpnZXRP
d25Qcm9wZXJ0eVNsb3RCeUkKICAgICBTdHJpbmdPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
U3RyaW5nT2JqZWN0Kj4ob2JqZWN0KTsKICAgICBpZiAodGhpc09iamVjdC0+aW50ZXJuYWxWYWx1
ZSgpLT5nZXRTdHJpbmdQcm9wZXJ0eVNsb3QoZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KSkKICAg
ICAgICAgcmV0dXJuIHRydWU7ICAgIAotICAgIHJldHVybiBKU09iamVjdDo6Z2V0T3duUHJvcGVy
dHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgcHJvcGVydHlO
YW1lKSwgc2xvdCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICByZXR1cm4gSlNPYmpl
Y3Q6OmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBleGVjLCBJZGVudGlmaWVyOjpmcm9t
KHZtLCBwcm9wZXJ0eU5hbWUpLCBzbG90KTsKIH0KIAogYm9vbCBTdHJpbmdPYmplY3Q6OnB1dChK
U0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwg
SlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQpAQCAtMTQ2LDExICsxNDcsMTIg
QEAgYm9vbCBTdHJpbmdPYmplY3Q6OmRlbGV0ZVByb3BlcnR5QnlJbmRleAogCiB2b2lkIFN0cmlu
Z09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUq
IGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUg
bW9kZSkKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIFN0cmluZ09iamVjdCogdGhp
c09iamVjdCA9IGpzQ2FzdDxTdHJpbmdPYmplY3QqPihvYmplY3QpOwogICAgIGlmIChwcm9wZXJ0
eU5hbWVzLmluY2x1ZGVTdHJpbmdQcm9wZXJ0aWVzKCkpIHsKICAgICAgICAgaW50IHNpemUgPSB0
aGlzT2JqZWN0LT5pbnRlcm5hbFZhbHVlKCktPmxlbmd0aCgpOwogICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IHNpemU7ICsraSkKLSAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50
aWZpZXI6OmZyb20oZXhlYywgaSkpOworICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRl
bnRpZmllcjo6ZnJvbSh2bSwgaSkpOwogICAgIH0KICAgICByZXR1cm4gSlNPYmplY3Q6OmdldE93
blByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7CiB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdPYmplY3QuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdPYmplY3QuaAko
cmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5n
T2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdo
dCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29weXJp
Z2h0IChDKSAyMDA3LTIwMDgsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogIENvcHlyaWdodCAoQykgMjAwNy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTMyLDcgKzMyLDcgQEAgcHVibGljOgogCiAgICAg
c3RhdGljIFN0cmluZ09iamVjdCogY3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUp
CiAgICAgewotICAgICAgICBKU1N0cmluZyogc3RyaW5nID0ganNFbXB0eVN0cmluZygmdm0pOwor
ICAgICAgICBKU1N0cmluZyogc3RyaW5nID0ganNFbXB0eVN0cmluZyh2bSk7CiAgICAgICAgIFN0
cmluZ09iamVjdCogb2JqZWN0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8U3RyaW5nT2Jq
ZWN0Pih2bS5oZWFwKSkgU3RyaW5nT2JqZWN0KHZtLCBzdHJ1Y3R1cmUpOwogICAgICAgICBvYmpl
Y3QtPmZpbmlzaENyZWF0aW9uKHZtLCBzdHJpbmcpOwogICAgICAgICByZXR1cm4gb2JqZWN0OwpA
QCAtODUsNyArODUsNyBAQCBzdGF0aWMgaW5saW5lIEpTU3RyaW5nKiBqc1N0cmluZ1dpdGhSZXVz
CiAgICAgICAgIEFTU0VSVChhc1N0cmluZyhvcmlnaW5hbFZhbHVlKS0+dmFsdWUoZXhlYykgPT0g
c3RyaW5nKTsKICAgICAgICAgcmV0dXJuIGFzU3RyaW5nKG9yaWdpbmFsVmFsdWUpOwogICAgIH0K
LSAgICByZXR1cm4ganNTdHJpbmcoJmV4ZWMtPnZtKCksIHN0cmluZyk7CisgICAgcmV0dXJuIGpz
U3RyaW5nKGV4ZWMtPnZtKCksIHN0cmluZyk7CiB9CiAKIC8vIEhlbHBlciB0aGF0IHRyaWVzIHRv
IHVzZSB0aGUgSlNTdHJpbmcgc3Vic3RyaW5nIHNoYXJpbmcgbWVjaGFuaXNtIGlmICdvcmlnaW5h
bFZhbHVlJyBpcyBhIEpTU3RyaW5nLgpAQCAtOTksNyArOTksNyBAQCBzdGF0aWMgaW5saW5lIEpT
U3RyaW5nKiBqc1N1YnN0cmluZyhFeGVjCiAgICAgICAgIEFTU0VSVChhc1N0cmluZyhvcmlnaW5h
bFZhbHVlKS0+dmFsdWUoZXhlYykgPT0gc3RyaW5nKTsKICAgICAgICAgcmV0dXJuIGpzU3Vic3Ry
aW5nKGV4ZWMsIGFzU3RyaW5nKG9yaWdpbmFsVmFsdWUpLCBvZmZzZXQsIGxlbmd0aCk7CiAgICAg
fQotICAgIHJldHVybiBqc1N1YnN0cmluZygmZXhlYy0+dm0oKSwgc3RyaW5nLCBvZmZzZXQsIGxl
bmd0aCk7CisgICAgcmV0dXJuIGpzU3Vic3RyaW5nKGV4ZWMtPnZtKCksIHN0cmluZywgb2Zmc2V0
LCBsZW5ndGgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjQ5
MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTYzLDEwICsxNjMsMTAgQEAgdm9pZCBTdHJpbmdQcm90b3R5
cGU6OmZpbmlzaENyZWF0aW9uKFZNJgogCiAgICAgSlNGdW5jdGlvbiogdHJpbVN0YXJ0RnVuY3Rp
b24gPSBKU0Z1bmN0aW9uOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgMCwgInRyaW1TdGFydCJf
cywgc3RyaW5nUHJvdG9GdW5jVHJpbVN0YXJ0LCBOb0ludHJpbnNpYyk7CiAgICAgSlNGdW5jdGlv
biogdHJpbUVuZEZ1bmN0aW9uID0gSlNGdW5jdGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3Qs
IDAsICJ0cmltRW5kIl9zLCBzdHJpbmdQcm90b0Z1bmNUcmltRW5kLCBOb0ludHJpbnNpYyk7Ci0g
ICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmco
JnZtLCAidHJpbVN0YXJ0IiksIHRyaW1TdGFydEZ1bmN0aW9uLCBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7Ci0gICAgcHV0RGlyZWN0V2l0aG91dFRy
YW5zaXRpb24odm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAidHJpbUxlZnQiKSwgdHJp
bVN0YXJ0RnVuY3Rpb24sIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6
RG9udEVudW0pKTsKLSAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZygmdm0sICJ0cmltRW5kIiksIHRyaW1FbmRGdW5jdGlvbiwgc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOwotICAgIHB1dERpcmVj
dFdpdGhvdXRUcmFuc2l0aW9uKHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgInRyaW1S
aWdodCIpLCB0cmltRW5kRnVuY3Rpb24sIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0
dHJpYnV0ZTo6RG9udEVudW0pKTsKKyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInRyaW1TdGFydCIpLCB0cmltU3RhcnRGdW5jdGlv
biwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOwor
ICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KHZtLCAidHJpbUxlZnQiKSwgdHJpbVN0YXJ0RnVuY3Rpb24sIHN0YXRpY19jYXN0PHVuc2lnbmVk
PihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKKyAgICBwdXREaXJlY3RXaXRob3V0VHJh
bnNpdGlvbih2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInRyaW1FbmQiKSwgdHJpbUVu
ZEZ1bmN0aW9uLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRF
bnVtKSk7CisgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIElkZW50aWZpZXI6OmZy
b21TdHJpbmcodm0sICJ0cmltUmlnaHQiKSwgdHJpbUVuZEZ1bmN0aW9uLCBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7CiAKICAgICBKU0Z1bmN0aW9u
KiBpdGVyYXRvckZ1bmN0aW9uID0gSlNGdW5jdGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3Qs
IDAsICJbU3ltYm9sLml0ZXJhdG9yXSJfcywgc3RyaW5nUHJvdG9GdW5jSXRlcmF0b3IsIE5vSW50
cmluc2ljKTsKICAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlO
YW1lcy0+aXRlcmF0b3JTeW1ib2wsIGl0ZXJhdG9yRnVuY3Rpb24sIHN0YXRpY19jYXN0PHVuc2ln
bmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKQEAgLTE3Nyw3ICsxNzcsNyBAQCB2
b2lkIFN0cmluZ1Byb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0mCiAKIFN0cmluZ1Byb3RvdHlw
ZSogU3RyaW5nUHJvdG90eXBlOjpjcmVhdGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKLSAgICBKU1N0cmluZyogZW1wdHkgPSBq
c0VtcHR5U3RyaW5nKCZ2bSk7CisgICAgSlNTdHJpbmcqIGVtcHR5ID0ganNFbXB0eVN0cmluZyh2
bSk7CiAgICAgU3RyaW5nUHJvdG90eXBlKiBwcm90b3R5cGUgPSBuZXcgKE5vdE51bGwsIGFsbG9j
YXRlQ2VsbDxTdHJpbmdQcm90b3R5cGU+KHZtLmhlYXApKSBTdHJpbmdQcm90b3R5cGUodm0sIHN0
cnVjdHVyZSk7CiAgICAgcHJvdG90eXBlLT5maW5pc2hDcmVhdGlvbih2bSwgZ2xvYmFsT2JqZWN0
LCBlbXB0eSk7CiAgICAgcmV0dXJuIHByb3RvdHlwZTsKQEAgLTMyMyw3ICszMjMsNyBAQCBzdGF0
aWMgQUxXQVlTX0lOTElORSBKU1N0cmluZyoganNTcGxpY2VTCiAgICAgICAgIGlmIChwb3NpdGlv
biA8PSAwICYmIGxlbmd0aCA+PSBzb3VyY2VTaXplKQogICAgICAgICAgICAgcmV0dXJuIHNvdXJj
ZVZhbDsKICAgICAgICAgLy8gV2UgY291bGQgY2FsbCBTdHJpbmc6OnN1YnN0cmluZ1NoYXJpbmdJ
bXBsKCksIGJ1dCB0aGlzIHdvdWxkIHJlc3VsdCBpbiByZWR1bmRhbnQgY2hlY2tzLgotICAgICAg
ICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGpzU3RyaW5nKGV4ZWMsIFN0cmluZ0ltcGw6OmNy
ZWF0ZVN1YnN0cmluZ1NoYXJpbmdJbXBsKCpzb3VyY2UuaW1wbCgpLCBzdGQ6Om1heCgwLCBwb3Np
dGlvbiksIHN0ZDo6bWluKHNvdXJjZVNpemUsIGxlbmd0aCkpKSk7CisgICAgICAgIFJFTEVBU0Vf
QU5EX1JFVFVSTihzY29wZSwganNTdHJpbmcodm0sIFN0cmluZ0ltcGw6OmNyZWF0ZVN1YnN0cmlu
Z1NoYXJpbmdJbXBsKCpzb3VyY2UuaW1wbCgpLCBzdGQ6Om1heCgwLCBwb3NpdGlvbiksIHN0ZDo6
bWluKHNvdXJjZVNpemUsIGxlbmd0aCkpKSk7CiAgICAgfQogCiAgICAgLy8gV2Uga25vdyB0aGF0
IHRoZSBzdW0gb2Ygc3Vic3RyaW5nUmFuZ2VzIGxlbmd0aHMgY2Fubm90IGV4Y2VlZCBsZW5ndGgg
b2YKQEAgLTMzNiw3ICszMzYsNyBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSBKU1N0cmluZyoganNT
cGxpY2VTCiAgICAgQVNTRVJUKHRvdGFsTGVuZ3RoIDw9IFN0cmluZzo6TWF4TGVuZ3RoKTsKIAog
ICAgIGlmICghdG90YWxMZW5ndGgpCi0gICAgICAgIHJldHVybiBqc0VtcHR5U3RyaW5nKGV4ZWMp
OworICAgICAgICByZXR1cm4ganNFbXB0eVN0cmluZyh2bSk7CiAKICAgICBpZiAoc291cmNlLmlz
OEJpdCgpKSB7CiAgICAgICAgIExDaGFyKiBidWZmZXI7CkBAIC0zNTUsNyArMzU1LDcgQEAgc3Rh
dGljIEFMV0FZU19JTkxJTkUgSlNTdHJpbmcqIGpzU3BsaWNlUwogICAgICAgICAgICAgfQogICAg
ICAgICB9CiAKLSAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBqc1N0cmluZyhleGVj
LCBXVEZNb3ZlKGltcGwpKSk7CisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwganNT
dHJpbmcodm0sIFdURk1vdmUoaW1wbCkpKTsKICAgICB9CiAKICAgICBVQ2hhciogYnVmZmVyOwpA
QCAtMzc1LDcgKzM3NSw3IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpTU3RyaW5nKiBqc1NwbGlj
ZVMKICAgICAgICAgfQogICAgIH0KIAotICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwganNT
dHJpbmcoZXhlYywgV1RGTW92ZShpbXBsKSkpOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29w
ZSwganNTdHJpbmcodm0sIFdURk1vdmUoaW1wbCkpKTsKIH0KIAogc3RhdGljIEFMV0FZU19JTkxJ
TkUgSlNTdHJpbmcqIGpzU3BsaWNlU3Vic3RyaW5nc1dpdGhTZXBhcmF0b3JzKEV4ZWNTdGF0ZSog
ZXhlYywgSlNTdHJpbmcqIHNvdXJjZVZhbCwgY29uc3QgU3RyaW5nJiBzb3VyY2UsIGNvbnN0IFN0
cmluZ1JhbmdlKiBzdWJzdHJpbmdSYW5nZXMsIGludCByYW5nZUNvdW50LCBjb25zdCBTdHJpbmcq
IHNlcGFyYXRvcnMsIGludCBzZXBhcmF0b3JDb3VudCkKQEAgLTM5MCw3ICszOTAsNyBAQCBzdGF0
aWMgQUxXQVlTX0lOTElORSBKU1N0cmluZyoganNTcGxpY2VTCiAgICAgICAgIGlmIChwb3NpdGlv
biA8PSAwICYmIGxlbmd0aCA+PSBzb3VyY2VTaXplKQogICAgICAgICAgICAgcmV0dXJuIHNvdXJj
ZVZhbDsKICAgICAgICAgLy8gV2UgY291bGQgY2FsbCBTdHJpbmc6OnN1YnN0cmluZ1NoYXJpbmdJ
bXBsKCksIGJ1dCB0aGlzIHdvdWxkIHJlc3VsdCBpbiByZWR1bmRhbnQgY2hlY2tzLgotICAgICAg
ICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGpzU3RyaW5nKGV4ZWMsIFN0cmluZ0ltcGw6OmNy
ZWF0ZVN1YnN0cmluZ1NoYXJpbmdJbXBsKCpzb3VyY2UuaW1wbCgpLCBzdGQ6Om1heCgwLCBwb3Np
dGlvbiksIHN0ZDo6bWluKHNvdXJjZVNpemUsIGxlbmd0aCkpKSk7CisgICAgICAgIFJFTEVBU0Vf
QU5EX1JFVFVSTihzY29wZSwganNTdHJpbmcodm0sIFN0cmluZ0ltcGw6OmNyZWF0ZVN1YnN0cmlu
Z1NoYXJpbmdJbXBsKCpzb3VyY2UuaW1wbCgpLCBzdGQ6Om1heCgwLCBwb3NpdGlvbiksIHN0ZDo6
bWluKHNvdXJjZVNpemUsIGxlbmd0aCkpKSk7CiAgICAgfQogCiAgICAgQ2hlY2tlZDxpbnQsIFJl
Y29yZE92ZXJmbG93PiB0b3RhbExlbmd0aCA9IDA7CkBAIC00MDgsNyArNDA4LDcgQEAgc3RhdGlj
IEFMV0FZU19JTkxJTkUgSlNTdHJpbmcqIGpzU3BsaWNlUwogICAgIH0KIAogICAgIGlmICghdG90
YWxMZW5ndGgpCi0gICAgICAgIHJldHVybiBqc0VtcHR5U3RyaW5nKGV4ZWMpOworICAgICAgICBy
ZXR1cm4ganNFbXB0eVN0cmluZyh2bSk7CiAKICAgICBpZiAoc291cmNlLmlzOEJpdCgpICYmIGFs
bFNlcGFyYXRvcnM4Qml0KSB7CiAgICAgICAgIExDaGFyKiBidWZmZXI7CkBAIC00MzcsNyArNDM3
LDcgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgSlNTdHJpbmcqIGpzU3BsaWNlUwogICAgICAgICAg
ICAgfQogICAgICAgICB9ICAgICAgICAKIAotICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2Nv
cGUsIGpzU3RyaW5nKGV4ZWMsIFdURk1vdmUoaW1wbCkpKTsKKyAgICAgICAgUkVMRUFTRV9BTkRf
UkVUVVJOKHNjb3BlLCBqc1N0cmluZyh2bSwgV1RGTW92ZShpbXBsKSkpOwogICAgIH0KIAogICAg
IFVDaGFyKiBidWZmZXI7CkBAIC00NzAsNyArNDcwLDcgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUg
SlNTdHJpbmcqIGpzU3BsaWNlUwogICAgICAgICB9CiAgICAgfQogCi0gICAgUkVMRUFTRV9BTkRf
UkVUVVJOKHNjb3BlLCBqc1N0cmluZyhleGVjLCBXVEZNb3ZlKGltcGwpKSk7CisgICAgUkVMRUFT
RV9BTkRfUkVUVVJOKHNjb3BlLCBqc1N0cmluZyh2bSwgV1RGTW92ZShpbXBsKSkpOwogfQogCiAj
ZGVmaW5lIE9VVF9PRl9NRU1PUlkoZXhlY19fLCBzY29wZV9fKSBcCkBAIC01OTMsMTQgKzU5Mywx
NCBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSBKU1N0cmluZyogcmVwbGFjZVVzCiAgICAgICAgICAg
ICAgICAgaWYgKG1hdGNoU3RhcnQgPCAwKQogICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuVmFs
dWUgPSBqc1VuZGVmaW5lZCgpOwogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICAgICAgcGF0dGVyblZhbHVlID0ganNTdWJzdHJpbmcoJnZtLCBzb3VyY2UsIG1hdGNoU3RhcnQs
IG1hdGNoTGVuKTsKKyAgICAgICAgICAgICAgICAgICAgcGF0dGVyblZhbHVlID0ganNTdWJzdHJp
bmcodm0sIHNvdXJjZSwgbWF0Y2hTdGFydCwgbWF0Y2hMZW4pOwogCiAgICAgICAgICAgICAgICAg
Y2FjaGVkQ2FsbC5hcHBlbmRBcmd1bWVudChwYXR0ZXJuVmFsdWUpOwogCiAgICAgICAgICAgICAg
ICAgaWYgKGkgJiYgaGFzTmFtZWRDYXB0dXJlcykgewogICAgICAgICAgICAgICAgICAgICBTdHJp
bmcgZ3JvdXBOYW1lID0gcmVnRXhwLT5nZXRDYXB0dXJlR3JvdXBOYW1lKGkpOwogICAgICAgICAg
ICAgICAgICAgICBpZiAoIWdyb3VwTmFtZS5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgICAg
ICAgICBncm91cHMtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIGdy
b3VwTmFtZSksIHBhdHRlcm5WYWx1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBncm91cHMt
PnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgZ3JvdXBOYW1lKSwgcGF0
dGVyblZhbHVlKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKQEAgLTY1OSw3
ICs2NTksNyBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSBKU1N0cmluZyogcmVwbGFjZVVzCiAgICAg
ICAgICAgICAgICAgICAgIGlmIChtYXRjaFN0YXJ0IDwgMCkKICAgICAgICAgICAgICAgICAgICAg
ICAgIHBhdHRlcm5WYWx1ZSA9IGpzVW5kZWZpbmVkKCk7CiAgICAgICAgICAgICAgICAgICAgIGVs
c2UgewotICAgICAgICAgICAgICAgICAgICAgICAgcGF0dGVyblZhbHVlID0ganNTdWJzdHJpbmco
JnZtLCBzb3VyY2UsIG1hdGNoU3RhcnQsIG1hdGNoTGVuKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHBhdHRlcm5WYWx1ZSA9IGpzU3Vic3RyaW5nKHZtLCBzb3VyY2UsIG1hdGNoU3RhcnQsIG1h
dGNoTGVuKTsKICAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIG51bGxwdHIpOwogICAgICAgICAgICAgICAgICAgICB9CiAKQEAgLTY2OCw3ICs2NjgsNyBA
QCBzdGF0aWMgQUxXQVlTX0lOTElORSBKU1N0cmluZyogcmVwbGFjZVVzCiAgICAgICAgICAgICAg
ICAgICAgIGlmIChpICYmIGhhc05hbWVkQ2FwdHVyZXMpIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgIFN0cmluZyBncm91cE5hbWUgPSByZWdFeHAtPmdldENhcHR1cmVHcm91cE5hbWUoaSk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWdyb3VwTmFtZS5pc0VtcHR5KCkpCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZ3JvdXBzLT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZy
b21TdHJpbmcoJnZtLCBncm91cE5hbWUpLCBwYXR0ZXJuVmFsdWUpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdyb3Vwcy0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KHZtLCBncm91cE5hbWUpLCBwYXR0ZXJuVmFsdWUpOwogICAgICAgICAgICAgICAgICAgICB9CiAK
ICAgICAgICAgICAgICAgICB9CkBAIC03MzEsNyArNzMxLDcgQEAgSlNDZWxsKiBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvblN0cmluZ1BybwogICAgIEV4ZWNTdGF0ZSogZXhlYywgSlNTdHJpbmcqIHRo
aXNWYWx1ZSwgUmVnRXhwT2JqZWN0KiBzZWFyY2hWYWx1ZSkKIHsKICAgICBWTSYgdm0gPSBleGVj
LT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBSZWdFeHAqIHJlZ0V4cCA9IHNlYXJj
aFZhbHVlLT5yZWdFeHAoKTsKQEAgLTc1NCw3ICs3NTQsNyBAQCBKU0NlbGwqIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uU3RyaW5nUHJvCiAgICAgRXhlY1N0YXRlKiBleGVjLCBKU1N0cmluZyogdGhp
c1ZhbHVlLCBSZWdFeHBPYmplY3QqIHNlYXJjaFZhbHVlLCBKU1N0cmluZyogcmVwbGFjZVN0cmlu
ZykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZt
LCBleGVjKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAg
ICBDYWxsRGF0YSBjYWxsRGF0YTsKQEAgLTc5OCw3ICs3OTgsNyBAQCBzdGF0aWMgQUxXQVlTX0lO
TElORSBKU1N0cmluZyogcmVwbGFjZVVzCiAgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBnZXRDYWxs
RGF0YSh2bSwgcmVwbGFjZVZhbHVlLCBjYWxsRGF0YSk7CiAgICAgaWYgKGNhbGxUeXBlICE9IENh
bGxUeXBlOjpOb25lKSB7CiAgICAgICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7Ci0gICAg
ICAgIGF1dG8qIHN1YnN0cmluZyA9IGpzU3Vic3RyaW5nKCZ2bSwgc3RyaW5nLCBtYXRjaFN0YXJ0
LCBzZWFyY2hTdHJpbmcuaW1wbCgpLT5sZW5ndGgoKSk7CisgICAgICAgIGF1dG8qIHN1YnN0cmlu
ZyA9IGpzU3Vic3RyaW5nKHZtLCBzdHJpbmcsIG1hdGNoU3RhcnQsIHNlYXJjaFN0cmluZy5pbXBs
KCktPmxlbmd0aCgpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0
cik7CiAgICAgICAgIGFyZ3MuYXBwZW5kKHN1YnN0cmluZyk7CiAgICAgICAgIGFyZ3MuYXBwZW5k
KGpzTnVtYmVyKG1hdGNoU3RhcnQpKTsKQEAgLTkzMyw3ICs5MzMsNyBAQCBKU0NlbGwqIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uU3RyaW5nUHJvCiAgICAgRW5jb2RlZEpTVmFsdWUgcmVwbGFjZVZh
bHVlKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
dm0sIGV4ZWMpOwogICAgIAogICAgIHJldHVybiByZXBsYWNlKAogICAgICAgICB2bSwgZXhlYywg
SlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSksIEpTVmFsdWU6OmRlY29kZShzZWFyY2hWYWx1ZSks
CkBAIC05NzQsMTQgKzk3NCwxNCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmlu
Z1Byb3RvCiAgICAgaWYgKGEwLmlzVUludDMyKCkpIHsKICAgICAgICAgdWludDMyX3QgaSA9IGEw
LmFzVUludDMyKCk7CiAgICAgICAgIGlmIChpIDwgdmlldy5sZW5ndGgoKSkKLSAgICAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNTaW5nbGVDaGFyYWN0ZXJTdHJpbmcoZXhlYywgdmll
d1tpXSkpOwotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzRW1wdHlTdHJpbmcoZXhl
YykpOworICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1NpbmdsZUNoYXJhY3Rl
clN0cmluZyh2bSwgdmlld1tpXSkpOworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
RW1wdHlTdHJpbmcodm0pKTsKICAgICB9CiAgICAgZG91YmxlIGRwb3MgPSBhMC50b0ludGVnZXIo
ZXhlYyk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7
CiAgICAgaWYgKGRwb3MgPj0gMCAmJiBkcG9zIDwgdmlldy5sZW5ndGgoKSkKLSAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1NpbmdsZUNoYXJhY3RlclN0cmluZyhleGVjLCB2aWV3W3N0
YXRpY19jYXN0PHVuc2lnbmVkPihkcG9zKV0pKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzRW1wdHlTdHJpbmcoZXhlYykpOworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
U2luZ2xlQ2hhcmFjdGVyU3RyaW5nKHZtLCB2aWV3W3N0YXRpY19jYXN0PHVuc2lnbmVkPihkcG9z
KV0pKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzRW1wdHlTdHJpbmcodm0pKTsKIH0K
IAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNDaGFyQ29kZUF0
KEV4ZWNTdGF0ZSogZXhlYykKQEAgLTEyNzAsNyArMTI3MCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICAgICAgQVNTRVJUKGxpbWl0KTsKIAogICAgICAg
ICBkbyB7Ci0gICAgICAgICAgICByZXN1bHQtPnB1dERpcmVjdEluZGV4KGV4ZWMsIHBvc2l0aW9u
LCBqc1NpbmdsZUNoYXJhY3RlclN0cmluZyhleGVjLCBpbnB1dFtwb3NpdGlvbl0pKTsKKyAgICAg
ICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0SW5kZXgoZXhlYywgcG9zaXRpb24sIGpzU2luZ2xlQ2hh
cmFjdGVyU3RyaW5nKHZtLCBpbnB1dFtwb3NpdGlvbl0pKTsKICAgICAgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgICAgICB9IHdoaWxlICgr
K3Bvc2l0aW9uIDwgbGltaXQpOwogCkBAIC0xMzY2LDcgKzEzNjYsNyBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgZG91YmxlIGxlbmd0aCA9IGExLmlzVW5k
ZWZpbmVkKCkgPyBsZW4gOiBhMS50b0ludGVnZXIoZXhlYyk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgaWYgKHN0YXJ0ID49IGxlbiB8fCBs
ZW5ndGggPD0gMCkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0VtcHR5U3RyaW5n
KGV4ZWMpKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0VtcHR5U3RyaW5nKHZt
KSk7CiAgICAgaWYgKHN0YXJ0IDwgMCkgewogICAgICAgICBzdGFydCArPSBsZW47CiAgICAgICAg
IGlmIChzdGFydCA8IDApCkBAIC0xMzc5LDcgKzEzNzksNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgc2NvcGUucmVsZWFzZSgpOwogICAgIGlmIChqc1N0
cmluZykKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N1YnN0cmluZyhleGVjLCBq
c1N0cmluZywgc3Vic3RyaW5nU3RhcnQsIHN1YnN0cmluZ0xlbmd0aCkpOwotICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNTdWJzdHJpbmcoJnZtLCB1U3RyaW5nLCBzdWJzdHJpbmdTdGFydCwg
c3Vic3RyaW5nTGVuZ3RoKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N1YnN0cmlu
Zyh2bSwgdVN0cmluZywgc3Vic3RyaW5nU3RhcnQsIHN1YnN0cmluZ0xlbmd0aCkpOwogfQogCiBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGJ1aWx0aW5TdHJpbmdTdWJzdHJJbnRlcm5hbChF
eGVjU3RhdGUqIGV4ZWMpCkBAIC0xNDU1LDcgKzE0NTUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgU3RyaW5nIGxvd2VyY2FzZWRTdHJpbmcgPSBzLmNv
bnZlcnRUb0xvd2VyY2FzZVdpdGhvdXRMb2NhbGUoKTsKICAgICBpZiAobG93ZXJjYXNlZFN0cmlu
Zy5pbXBsKCkgPT0gcy5pbXBsKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoc1Zh
bCk7Ci0gICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUoanNTdHJp
bmcoZXhlYywgbG93ZXJjYXNlZFN0cmluZykpKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2Nv
cGUsIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyh2bSwgbG93ZXJjYXNlZFN0cmluZykpKTsKIH0K
IAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNUb1VwcGVyQ2Fz
ZShFeGVjU3RhdGUqIGV4ZWMpCkBAIC0xNDczLDcgKzE0NzMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgU3RyaW5nIHVwcGVyY2FzZWRTdHJpbmcgPSBz
LmNvbnZlcnRUb1VwcGVyY2FzZVdpdGhvdXRMb2NhbGUoKTsKICAgICBpZiAodXBwZXJjYXNlZFN0
cmluZy5pbXBsKCkgPT0gcy5pbXBsKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
c1ZhbCk7Ci0gICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUoanNT
dHJpbmcoZXhlYywgdXBwZXJjYXNlZFN0cmluZykpKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4o
c2NvcGUsIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyh2bSwgdXBwZXJjYXNlZFN0cmluZykpKTsK
IH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNMb2NhbGVD
b21wYXJlKEV4ZWNTdGF0ZSogZXhlYykKQEAgLTE2MDEsNyArMTYwMSw3IEBAIHN0YXRpYyBFbmNv
ZGVkSlNWYWx1ZSB0b0xvY2FsZUNhc2UoRXhlY1MKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBl
RXJyb3Ioc3RhdGUsIHNjb3BlLCB1X2Vycm9yTmFtZShlcnJvcikpOwogCiAgICAgLy8gMTguIFJl
dHVybiBMLgotICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKGpz
U3RyaW5nKHN0YXRlLCBsb3dlcikpKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpT
VmFsdWU6OmVuY29kZShqc1N0cmluZyh2bSwgbG93ZXIpKSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jVG9Mb2NhbGVMb3dlckNhc2UoRXhlY1N0YXRl
KiBzdGF0ZSkKQEAgLTE2NTAsNyArMTY1MCw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSB0cmlt
U3RyaW5nKEV4ZWNTdGEKICAgICBpZiAobGVmdCA9PSAwICYmIHJpZ2h0ID09IHN0ci5sZW5ndGgo
KSAmJiB0aGlzVmFsdWUuaXNTdHJpbmcoKSkKICAgICAgICAgcmV0dXJuIHRoaXNWYWx1ZTsKIAot
ICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwganNTdHJpbmcoZXhlYywgc3RyLnN1YnN0cmlu
Z1NoYXJpbmdJbXBsKGxlZnQsIHJpZ2h0IC0gbGVmdCkpKTsKKyAgICBSRUxFQVNFX0FORF9SRVRV
Uk4oc2NvcGUsIGpzU3RyaW5nKHZtLCBzdHIuc3Vic3RyaW5nU2hhcmluZ0ltcGwobGVmdCwgcmln
aHQgLSBsZWZ0KSkpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1By
b3RvRnVuY1RyaW0oRXhlY1N0YXRlKiBleGVjKQpAQCAtMTkwMSw3ICsxOTAxLDcgQEAgc3RhdGlj
IEpTVmFsdWUgbm9ybWFsaXplKEV4ZWNTdGF0ZSogZXhlYwogICAgIHVub3JtMl9ub3JtYWxpemUo
bm9ybWFsaXplciwgY2hhcmFjdGVycywgdmlldy5sZW5ndGgoKSwgYnVmZmVyLCBub3JtYWxpemVk
U3RyaW5nTGVuZ3RoLCAmc3RhdHVzKTsKICAgICBBU1NFUlQoVV9TVUNDRVNTKHN0YXR1cykpOwog
Ci0gICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBqc1N0cmluZygmdm0sIFdURk1vdmUocmVz
dWx0KSkpOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwganNTdHJpbmcodm0sIFdURk1v
dmUocmVzdWx0KSkpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1By
b3RvRnVuY05vcm1hbGl6ZShFeGVjU3RhdGUqIGV4ZWMpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGVJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlSW5saW5lcy5oCShyZXZp
c2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdQcm90
b3R5cGVJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAgQUxXQVlTX0lO
TElORSBKU1N0cmluZyogc3RyaW5nU2xpY2UoRXhlYwogICAgICAgICAgICAgdG8gPSBsZW5ndGg7
CiAgICAgICAgIHJldHVybiBqc1N1YnN0cmluZyh2bSwgZXhlYywgc3RyaW5nLCBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oZnJvbSksIHN0YXRpY19jYXN0PHVuc2lnbmVkPih0bykgLSBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oZnJvbSkpOwogICAgIH0KLSAgICByZXR1cm4ganNFbXB0eVN0cmluZygmdm0p
OworICAgIHJldHVybiBqc0VtcHR5U3RyaW5nKHZtKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlND
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdSZWN1cnNpb25DaGVj
a2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJp
bmdSZWN1cnNpb25DaGVja2VyLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUmVjdXJzaW9uQ2hlY2tlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogIENvcHlyaWdodCAoQykgMjAxMS0yMDEyLCAyMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMTEt
MjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
CkBAIC0zNSw3ICszNSw3IEBAIEpTVmFsdWUgU3RyaW5nUmVjdXJzaW9uQ2hlY2tlcjo6dGhyb3dT
dGEKIAogSlNWYWx1ZSBTdHJpbmdSZWN1cnNpb25DaGVja2VyOjplbXB0eVN0cmluZygpCiB7Ci0g
ICAgcmV0dXJuIGpzRW1wdHlTdHJpbmcobV9leGVjKTsKKyAgICByZXR1cm4ganNFbXB0eVN0cmlu
ZyhtX2V4ZWMtPnZtKCkpOwogfQogCiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TdHJ1Y3R1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0cnVjdHVyZS5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMjYsOSAr
MTAyNiw5IEBAIHZvaWQgU3RydWN0dXJlOjpkaWRUcmFuc2l0aW9uRnJvbVRoaXNTdHIKIAogICAg
IGlmIChkZWZlcnJlZCkgewogICAgICAgICBBU1NFUlQoZGVmZXJyZWQtPnN0cnVjdHVyZSgpID09
IHRoaXMpOwotICAgICAgICBtX3RyYW5zaXRpb25XYXRjaHBvaW50U2V0LmZpcmVBbGwoKnZtKCks
IGRlZmVycmVkKTsKKyAgICAgICAgbV90cmFuc2l0aW9uV2F0Y2hwb2ludFNldC5maXJlQWxsKHZt
KCksIGRlZmVycmVkKTsKICAgICB9IGVsc2UKLSAgICAgICAgbV90cmFuc2l0aW9uV2F0Y2hwb2lu
dFNldC5maXJlQWxsKCp2bSgpLCBTdHJ1Y3R1cmVGaXJlRGV0YWlsKHRoaXMpKTsKKyAgICAgICAg
bV90cmFuc2l0aW9uV2F0Y2hwb2ludFNldC5maXJlQWxsKHZtKCksIFN0cnVjdHVyZUZpcmVEZXRh
aWwodGhpcykpOwogfQogCiB2b2lkIFN0cnVjdHVyZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNl
bGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMzI5LDcgKzMyOSw3IEBAIGlubGluZSB2b2lkIFN0cnVjdHVyZTo6ZGlkUmVwbGFj
ZVByb3BlcnQKICAgICBXYXRjaHBvaW50U2V0KiBzZXQgPSBtYXAtPmdldChvZmZzZXQpOwogICAg
IGlmIChMSUtFTFkoIXNldCkpCiAgICAgICAgIHJldHVybjsKLSAgICBzZXQtPmZpcmVBbGwoKnZt
KCksICJQcm9wZXJ0eSBkaWQgZ2V0IHJlcGxhY2VkIik7CisgICAgc2V0LT5maXJlQWxsKHZtKCks
ICJQcm9wZXJ0eSBkaWQgZ2V0IHJlcGxhY2VkIik7CiB9CiAKIGlubGluZSBXYXRjaHBvaW50U2V0
KiBTdHJ1Y3R1cmU6OnByb3BlcnR5UmVwbGFjZW1lbnRXYXRjaHBvaW50U2V0KFByb3BlcnR5T2Zm
c2V0IG9mZnNldCkKQEAgLTU1OSw3ICs1NTksNyBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgU3RydWN0
dXJlOjpzaG91bGRDb252CiAgICAgaWYgKGEtPnN0b3JlZFByb3RvdHlwZSgpID09IGItPnN0b3Jl
ZFByb3RvdHlwZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBWTSYgdm0gPSAqYS0+
dm0oKTsKKyAgICBWTSYgdm0gPSBhLT52bSgpOwogICAgIEpTT2JqZWN0KiBhT2JqID0gYS0+c3Rv
cmVkUHJvdG90eXBlT2JqZWN0KCk7CiAgICAgSlNPYmplY3QqIGJPYmogPSBiLT5zdG9yZWRQcm90
b3R5cGVPYmplY3QoKTsKICAgICB3aGlsZSAoYU9iaiAmJiBiT2JqKSB7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sQ29uc3RydWN0b3IuY3BwCShy
ZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xD
b25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDEyLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqIENvcHlyaWdodCAoQykgMjAxNSBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5j
b20+LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtNjQsNyArNjQsNyBAQCBTeW1ib2xDb25zdHJ1Y3Rv
cjo6U3ltYm9sQ29uc3RydWN0b3IoVk0mCiB9CiAKICNkZWZpbmUgSU5JVElBTElaRV9XRUxMX0tO
T1dOX1NZTUJPTFMobmFtZSkgXAotcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIElkZW50
aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAjbmFtZSksIFN5bWJvbDo6Y3JlYXRlKHZtLCBzdGF0aWNf
Y2FzdDxTeW1ib2xJbXBsJj4oKnZtLnByb3BlcnR5TmFtZXMtPm5hbWUjI1N5bWJvbC5pbXBsKCkp
KSwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtIHwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRE
ZWxldGUgfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpOworcHV0RGlyZWN0V2l0aG91dFRy
YW5zaXRpb24odm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICNuYW1lKSwgU3ltYm9sOjpj
cmVhdGUodm0sIHN0YXRpY19jYXN0PFN5bWJvbEltcGwmPigqdm0ucHJvcGVydHlOYW1lcy0+bmFt
ZSMjU3ltYm9sLmltcGwoKSkpLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBQcm9wZXJ0
eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSk7CiAK
IHZvaWQgU3ltYm9sQ29uc3RydWN0b3I6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgU3ltYm9sUHJv
dG90eXBlKiBwcm90b3R5cGUpCiB7CkBAIC0xMjEsNyArMTIxLDcgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBzeW1ib2xDb25zdAogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogCiAgICAgQVNTRVJUKHVpZC5zeW1ib2xSZWdpc3RyeSgpID09ICZ2
bS5zeW1ib2xSZWdpc3RyeSgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5n
KGV4ZWMsICZ1aWQpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKHZtLCAm
dWlkKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU3ltYm9sUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyNDkxMjgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xQcm90b3R5cGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwg
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTItMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgWXVzdWtlIFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPi4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKQEAgLTYyLDcgKzYyLDcgQEAgU3ltYm9sUHJvdG90eXBlOjpTeW1ib2xQcm90b3R5cGUo
Vk0mIHZtLAogdm9pZCBTeW1ib2xQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2
bSk7Ci0gICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMt
PnRvU3RyaW5nVGFnU3ltYm9sLCBqc1N0cmluZygmdm0sICJTeW1ib2wiKSwgUHJvcGVydHlBdHRy
aWJ1dGU6OkRvbnRFbnVtIHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KTsKKyAgICBwdXRE
aXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+dG9TdHJpbmdUYWdT
eW1ib2wsIGpzU3RyaW5nKHZtLCAiU3ltYm9sIiksIFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51
bSB8IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKHZt
LCBpbmZvKCkpKTsKIAogICAgIEpTRnVuY3Rpb24qIHRvUHJpbWl0aXZlRnVuY3Rpb24gPSBKU0Z1
bmN0aW9uOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgMSwgIltTeW1ib2wudG9QcmltaXRpdmVd
Il9zLCBzeW1ib2xQcm90b0Z1bmNWYWx1ZU9mLCBOb0ludHJpbnNpYyk7CkBAIC05OCw3ICs5OCw3
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3ltYm9sUHJvdG8KICAgICAgICAgcmV0
dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUsIFN5bWJvbERlc2NyaXB0aW9uVHlwZUVy
cm9yKTsKICAgICBzY29wZS5yZWxlYXNlKCk7CiAgICAgY29uc3QgYXV0byBkZXNjcmlwdGlvbiA9
IHN5bWJvbC0+ZGVzY3JpcHRpb24oKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGRlc2Ny
aXB0aW9uLmlzTnVsbCgpID8ganNVbmRlZmluZWQoKSA6IGpzU3RyaW5nKCZ2bSwgZGVzY3JpcHRp
b24pKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGRlc2NyaXB0aW9uLmlzTnVsbCgpID8g
anNVbmRlZmluZWQoKSA6IGpzU3RyaW5nKHZtLCBkZXNjcmlwdGlvbikpOwogfQogCiBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN5bWJvbFByb3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGF0ZSog
ZXhlYykKQEAgLTEwOSw3ICsxMDksNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN5
bWJvbFByb3RvCiAgICAgU3ltYm9sKiBzeW1ib2wgPSB0cnlFeHRyYWN0U3ltYm9sKHZtLCBleGVj
LT50aGlzVmFsdWUoKSk7CiAgICAgaWYgKCFzeW1ib2wpCiAgICAgICAgIHJldHVybiB0aHJvd1ZN
VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBTeW1ib2xUb1N0cmluZ1R5cGVFcnJvcik7Ci0gICAgUkVM
RUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUoanNOb250cml2aWFsU3RyaW5n
KCZ2bSwgc3ltYm9sLT5kZXNjcmlwdGl2ZVN0cmluZygpKSkpOworICAgIFJFTEVBU0VfQU5EX1JF
VFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKGpzTm9udHJpdmlhbFN0cmluZyh2bSwgc3ltYm9s
LT5kZXNjcmlwdGl2ZVN0cmluZygpKSkpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIHN5bWJvbFByb3RvRnVuY1ZhbHVlT2YoRXhlY1N0YXRlKiBleGVjKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmNwcAkocmV2aXNpb24gMjQ5
MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwg
MjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTItMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIxMyw3ICsyMTMsNyBAQCB2b2lkIFN5bWJvbFRhYmxl
OjpzZXRSYXJlRGF0YUNvZGVCbG9jayhDCiAgICAgICAgIG1fcmFyZURhdGEgPSBtYWtlVW5pcXVl
PFN5bWJvbFRhYmxlUmFyZURhdGE+KCk7CiAKICAgICBBU1NFUlQoIW1fcmFyZURhdGEtPm1fY29k
ZUJsb2NrKTsKLSAgICBtX3JhcmVEYXRhLT5tX2NvZGVCbG9jay5zZXQoKmNvZGVCbG9jay0+dm0o
KSwgdGhpcywgY29kZUJsb2NrKTsKKyAgICBtX3JhcmVEYXRhLT5tX2NvZGVCbG9jay5zZXQoY29k
ZUJsb2NrLT52bSgpLCB0aGlzLCBjb2RlQmxvY2spOwogfQogCiBHbG9iYWxWYXJpYWJsZUlEIFN5
bWJvbFRhYmxlOjp1bmlxdWVJREZvclZhcmlhYmxlKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYs
IFVuaXF1ZWRTdHJpbmdJbXBsKiBrZXksIFZNJiB2bSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1Rlc3RSdW5uZXJVdGlscy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVzdFJ1bm5lclV0aWxzLmNwcAkocmV2aXNpb24gMjQ5MTI4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVzdFJ1bm5lclV0aWxzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTM4LDcgKzM4LDcgQEAgRnVuY3Rpb25FeGVjdXRhYmxlKiBnZXRF
eGVjdXRhYmxlRm9yRnVuYwogICAgIGlmICghdGhlRnVuY3Rpb25WYWx1ZS5pc0NlbGwoKSkKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBWTSYgdm0gPSAqdGhlRnVuY3Rpb25WYWx1ZS5h
c0NlbGwoKS0+dm0oKTsKKyAgICBWTSYgdm0gPSB0aGVGdW5jdGlvblZhbHVlLmFzQ2VsbCgpLT52
bSgpOwogICAgIEpTRnVuY3Rpb24qIHRoZUZ1bmN0aW9uID0ganNEeW5hbWljQ2FzdDxKU0Z1bmN0
aW9uKj4odm0sIHRoZUZ1bmN0aW9uVmFsdWUpOwogICAgIGlmICghdGhlRnVuY3Rpb24pCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Vk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNw
cAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTEsNyArMjUxLDcgQEAgVk06OlZNKFZNVHlwZSB2bVR5
cGUsIEhlYXBUeXBlIGhlYXBUeXBlKQogI2lmIFVTRShDRikKICAgICAsIG1fcnVuTG9vcChDRlJ1
bkxvb3BHZXRDdXJyZW50KCkpCiAjZW5kaWYgLy8gVVNFKENGKQotICAgICwgaGVhcCh0aGlzLCBo
ZWFwVHlwZSkKKyAgICAsIGhlYXAoKnRoaXMsIGhlYXBUeXBlKQogICAgICwgZmFzdE1hbGxvY0Fs
bG9jYXRvcihtYWtlVW5pcXVlPEZhc3RNYWxsb2NBbGlnbmVkTWVtb3J5QWxsb2NhdG9yPigpKQog
ICAgICwgcHJpbWl0aXZlR2lnYWNhZ2VBbGxvY2F0b3IobWFrZVVuaXF1ZTxHaWdhY2FnZUFsaWdu
ZWRNZW1vcnlBbGxvY2F0b3I+KEdpZ2FjYWdlOjpQcmltaXRpdmUpKQogICAgICwganNWYWx1ZUdp
Z2FjYWdlQWxsb2NhdG9yKG1ha2VVbmlxdWU8R2lnYWNhZ2VBbGlnbmVkTWVtb3J5QWxsb2NhdG9y
PihHaWdhY2FnZTo6SlNWYWx1ZSkpCkBAIC0zMzcsNyArMzM3LDcgQEAgVk06OlZNKFZNVHlwZSB2
bVR5cGUsIEhlYXBUeXBlIGhlYXBUeXBlKQogCiAgICAgc21hbGxTdHJpbmdzLmluaXRpYWxpemVD
b21tb25TdHJpbmdzKCp0aGlzKTsKIAotICAgIHByb3BlcnR5TmFtZXMgPSBuZXcgQ29tbW9uSWRl
bnRpZmllcnModGhpcyk7CisgICAgcHJvcGVydHlOYW1lcyA9IG5ldyBDb21tb25JZGVudGlmaWVy
cygqdGhpcyk7CiAgICAgdGVybWluYXRlZEV4ZWN1dGlvbkVycm9yU3RydWN0dXJlLnNldCgqdGhp
cywgVGVybWluYXRlZEV4ZWN1dGlvbkVycm9yOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpz
TnVsbCgpKSk7CiAgICAgcHJvcGVydHlOYW1lRW51bWVyYXRvclN0cnVjdHVyZS5zZXQoKnRoaXMs
IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051
bGwoKSkpOwogICAgIGN1c3RvbUdldHRlclNldHRlclN0cnVjdHVyZS5zZXQoKnRoaXMsIEN1c3Rv
bUdldHRlclNldHRlcjo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwpAQCAt
NzAzLDcgKzcwMyw3IEBAIE5hdGl2ZUV4ZWN1dGFibGUqIFZNOjpnZXRIb3N0RnVuY3Rpb24oTmEK
ICNpZiBFTkFCTEUoSklUKQogICAgIGlmIChjYW5Vc2VKSVQoKSkgewogICAgICAgICByZXR1cm4g
aml0U3R1YnMtPmhvc3RGdW5jdGlvblN0dWIoCi0gICAgICAgICAgICB0aGlzLCBmdW5jdGlvbiwg
Y29uc3RydWN0b3IsCisgICAgICAgICAgICAqdGhpcywgZnVuY3Rpb24sIGNvbnN0cnVjdG9yLAog
ICAgICAgICAgICAgaW50cmluc2ljICE9IE5vSW50cmluc2ljID8gdGh1bmtHZW5lcmF0b3JGb3JJ
bnRyaW5zaWMoaW50cmluc2ljKSA6IDAsCiAgICAgICAgICAgICBpbnRyaW5zaWMsIHNpZ25hdHVy
ZSwgbmFtZSk7CiAgICAgfQpAQCAtNzE4LDggKzcxOCw4IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVB0
cjxKU0VudHJ5UHRyVGFnPiBWTToKICNpZiBFTkFCTEUoSklUKQogICAgIGlmIChjYW5Vc2VKSVQo
KSkgewogICAgICAgICBpZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkKLSAgICAgICAgICAgIHJldHVy
biBqaXRTdHVicy0+Y3RpSW50ZXJuYWxGdW5jdGlvbkNhbGwodGhpcykucmV0YWdnZWQ8SlNFbnRy
eVB0clRhZz4oKTsKLSAgICAgICAgcmV0dXJuIGppdFN0dWJzLT5jdGlJbnRlcm5hbEZ1bmN0aW9u
Q29uc3RydWN0KHRoaXMpLnJldGFnZ2VkPEpTRW50cnlQdHJUYWc+KCk7CisgICAgICAgICAgICBy
ZXR1cm4gaml0U3R1YnMtPmN0aUludGVybmFsRnVuY3Rpb25DYWxsKCp0aGlzKS5yZXRhZ2dlZDxK
U0VudHJ5UHRyVGFnPigpOworICAgICAgICByZXR1cm4gaml0U3R1YnMtPmN0aUludGVybmFsRnVu
Y3Rpb25Db25zdHJ1Y3QoKnRoaXMpLnJldGFnZ2VkPEpTRW50cnlQdHJUYWc+KCk7CiAgICAgfQog
I2VuZGlmCiAgICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpCkBAIC03NzEsNyArNzcxLDcgQEAg
dm9pZCBWTTo6ZGVsZXRlQWxsQ29kZShEZWxldGVBbGxDb2RlRWZmbwogdm9pZCBWTTo6c2hyaW5r
Rm9vdHByaW50V2hlbklkbGUoKQogewogICAgIHdoZW5JZGxlKFs9XSAoKSB7Ci0gICAgICAgIHNh
bml0aXplU3RhY2tGb3JWTSh0aGlzKTsKKyAgICAgICAgc2FuaXRpemVTdGFja0ZvclZNKCp0aGlz
KTsKICAgICAgICAgZGVsZXRlQWxsQ29kZShEZWxldGVBbGxDb2RlSWZOb3RDb2xsZWN0aW5nKTsK
ICAgICAgICAgaGVhcC5jb2xsZWN0Tm93KFN5bmNocm9ub3VzbmVzczo6U3luYywgQ29sbGVjdGlv
blNjb3BlOjpGdWxsKTsKICAgICAgICAgLy8gRklYTUU6IENvbnNpZGVyIHN0b3BwaW5nIHZhcmlv
dXMgYXV0b21hdGljIHRocmVhZHMgaGVyZS4KQEAgLTkyNSwxNiArOTI1LDE2IEBAIHZvaWQgVk06
OmdhdGhlclNjcmF0Y2hCdWZmZXJSb290cyhDb25zZXIKIH0KICNlbmRpZgogCi12b2lkIGxvZ1Nh
bml0aXplU3RhY2soVk0qIHZtKQordm9pZCBsb2dTYW5pdGl6ZVN0YWNrKFZNJiB2bSkKIHsKLSAg
ICBpZiAoT3B0aW9uczo6dmVyYm9zZVNhbml0aXplU3RhY2soKSAmJiB2bS0+dG9wQ2FsbEZyYW1l
KSB7CisgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VTYW5pdGl6ZVN0YWNrKCkgJiYgdm0udG9wQ2Fs
bEZyYW1lKSB7CiAgICAgICAgIGludCBkdW1teTsKICAgICAgICAgYXV0byYgc3RhY2tCb3VuZHMg
PSBUaHJlYWQ6OmN1cnJlbnQoKS5zdGFjaygpOwogICAgICAgICBkYXRhTG9nKAotICAgICAgICAg
ICAgIlNhbml0aXppbmcgc3RhY2sgZm9yIFZNID0gIiwgUmF3UG9pbnRlcih2bSksICIgd2l0aCB0
b3AgY2FsbCBmcmFtZSBhdCAiLCBSYXdQb2ludGVyKHZtLT50b3BDYWxsRnJhbWUpLAorICAgICAg
ICAgICAgIlNhbml0aXppbmcgc3RhY2sgZm9yIFZNID0gIiwgUmF3UG9pbnRlcigmdm0pLCAiIHdp
dGggdG9wIGNhbGwgZnJhbWUgYXQgIiwgUmF3UG9pbnRlcih2bS50b3BDYWxsRnJhbWUpLAogICAg
ICAgICAgICAgIiwgY3VycmVudCBzdGFjayBwb2ludGVyIGF0ICIsIFJhd1BvaW50ZXIoJmR1bW15
KSwgIiwgaW4gIiwKLSAgICAgICAgICAgIHBvaW50ZXJEdW1wKHZtLT50b3BDYWxsRnJhbWUtPmNv
ZGVCbG9jaygpKSwgIiwgbGFzdCBjb2RlIG9yaWdpbiA9ICIsCi0gICAgICAgICAgICB2bS0+dG9w
Q2FsbEZyYW1lLT5jb2RlT3JpZ2luKCksICIsIGxhc3Qgc3RhY2sgdG9wID0gIiwgUmF3UG9pbnRl
cih2bS0+bGFzdFN0YWNrVG9wKCkpLCAiLCBpbiBzdGFjayByYW5nZSBbIiwgUmF3UG9pbnRlcihz
dGFja0JvdW5kcy5vcmlnaW4oKSksICIsICIsIFJhd1BvaW50ZXIoc3RhY2tCb3VuZHMuZW5kKCkp
LCAiXVxuIik7CisgICAgICAgICAgICBwb2ludGVyRHVtcCh2bS50b3BDYWxsRnJhbWUtPmNvZGVC
bG9jaygpKSwgIiwgbGFzdCBjb2RlIG9yaWdpbiA9ICIsCisgICAgICAgICAgICB2bS50b3BDYWxs
RnJhbWUtPmNvZGVPcmlnaW4oKSwgIiwgbGFzdCBzdGFjayB0b3AgPSAiLCBSYXdQb2ludGVyKHZt
Lmxhc3RTdGFja1RvcCgpKSwgIiwgaW4gc3RhY2sgcmFuZ2UgWyIsIFJhd1BvaW50ZXIoc3RhY2tC
b3VuZHMub3JpZ2luKCkpLCAiLCAiLCBSYXdQb2ludGVyKHN0YWNrQm91bmRzLmVuZCgpKSwgIl1c
biIpOwogICAgIH0KIH0KIApAQCAtMTE0MywxOCArMTE0MywxOCBAQCB2b2lkIFF1ZXVlZFRhc2s6
OnJ1bigpCiAgICAgbV9taWNyb3Rhc2stPnJ1bihtX2dsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygp
KTsKIH0KIAotdm9pZCBzYW5pdGl6ZVN0YWNrRm9yVk0oVk0qIHZtKQordm9pZCBzYW5pdGl6ZVN0
YWNrRm9yVk0oVk0mIHZtKQogewogICAgIGxvZ1Nhbml0aXplU3RhY2sodm0pOwotICAgIGlmICh2
bS0+dG9wQ2FsbEZyYW1lKSB7CisgICAgaWYgKHZtLnRvcENhbGxGcmFtZSkgewogICAgICAgICBh
dXRvJiBzdGFja0JvdW5kcyA9IFRocmVhZDo6Y3VycmVudCgpLnN0YWNrKCk7Ci0gICAgICAgIEFT
U0VSVCh2bS0+Y3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7Ci0gICAgICAgIEFTU0VS
VF9VTlVTRUQoc3RhY2tCb3VuZHMsIHN0YWNrQm91bmRzLmNvbnRhaW5zKHZtLT5sYXN0U3RhY2tU
b3AoKSkpOworICAgICAgICBBU1NFUlQodm0uY3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2so
KSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoc3RhY2tCb3VuZHMsIHN0YWNrQm91bmRzLmNvbnRh
aW5zKHZtLmxhc3RTdGFja1RvcCgpKSk7CiAgICAgfQogI2lmIEVOQUJMRShDX0xPT1ApCi0gICAg
dm0tPmludGVycHJldGVyLT5jbG9vcFN0YWNrKCkuc2FuaXRpemVTdGFjaygpOworICAgIHZtLmlu
dGVycHJldGVyLT5jbG9vcFN0YWNrKCkuc2FuaXRpemVTdGFjaygpOwogI2Vsc2UKLSAgICBzYW5p
dGl6ZVN0YWNrRm9yVk1JbXBsKHZtKTsKKyAgICBzYW5pdGl6ZVN0YWNrRm9yVk1JbXBsKCZ2bSk7
CiAjZW5kaWYKIH0KIApAQCAtMTM1MCw3ICsxMzUwLDcgQEAgSlNDZWxsKiBWTTo6c2VudGluZWxN
YXBCdWNrZXRTbG93KCkKIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciogVk06OmVtcHR5UHJvcGVy
dHlOYW1lRW51bWVyYXRvclNsb3coKQogewogICAgIEFTU0VSVCghbV9lbXB0eVByb3BlcnR5TmFt
ZUVudW1lcmF0b3IpOwotICAgIFByb3BlcnR5TmFtZUFycmF5IHByb3BlcnR5TmFtZXModGhpcywg
UHJvcGVydHlOYW1lTW9kZTo6U3RyaW5ncywgUHJpdmF0ZVN5bWJvbE1vZGU6OkV4Y2x1ZGUpOwor
ICAgIFByb3BlcnR5TmFtZUFycmF5IHByb3BlcnR5TmFtZXMoKnRoaXMsIFByb3BlcnR5TmFtZU1v
ZGU6OlN0cmluZ3MsIFByaXZhdGVTeW1ib2xNb2RlOjpFeGNsdWRlKTsKICAgICBhdXRvKiBlbnVt
ZXJhdG9yID0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjcmVhdGUoKnRoaXMsIG51bGxwdHIs
IDAsIDAsIFdURk1vdmUocHJvcGVydHlOYW1lcykpOwogICAgIG1fZW1wdHlQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yLnNldCgqdGhpcywgZW51bWVyYXRvcik7CiAgICAgcmV0dXJuIGVudW1lcmF0b3I7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHJldmlzaW9uIDI0OTEyOCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHdvcmtpbmcgY29weSkKQEAgLTY3
NCw3ICs2NzQsNyBAQCBwdWJsaWM6CiAgICAgc3RkOjp1bmlxdWVfcHRyPEpJVFRodW5rcz4gaml0
U3R1YnM7CiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBnZXRDVElT
dHViKFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvcikKICAgICB7Ci0gICAgICAgIHJldHVybiBqaXRT
dHVicy0+Y3RpU3R1Yih0aGlzLCBnZW5lcmF0b3IpOworICAgICAgICByZXR1cm4gaml0U3R1YnMt
PmN0aVN0dWIoKnRoaXMsIGdlbmVyYXRvcik7CiAgICAgfQogCiAjZW5kaWYgLy8gRU5BQkxFKEpJ
VCkKQEAgLTExMDgsMTQgKzExMDgsMTQgQEAgaW5saW5lIHZvaWQgVk06OnNldEluaXRpYWxpemlu
Z09iamVjdENsYQogCiBpbmxpbmUgSGVhcCogV2Vha1NldDo6aGVhcCgpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuICZtX3ZtLT5oZWFwOworICAgIHJldHVybiAmbV92bS5oZWFwOwogfQogCiAjaWYgIUVO
QUJMRShDX0xPT1ApCiBleHRlcm4gIkMiIHZvaWQgc2FuaXRpemVTdGFja0ZvclZNSW1wbChWTSop
OwogI2VuZGlmCiAKLUpTX0VYUE9SVF9QUklWQVRFIHZvaWQgc2FuaXRpemVTdGFja0ZvclZNKFZN
Kik7Ci12b2lkIGxvZ1Nhbml0aXplU3RhY2soVk0qKTsKK0pTX0VYUE9SVF9QUklWQVRFIHZvaWQg
c2FuaXRpemVTdGFja0ZvclZNKFZNJik7Cit2b2lkIGxvZ1Nhbml0aXplU3RhY2soVk0mKTsKIAog
fSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9W
TVRyYXBzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9W
TVRyYXBzLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVk1UcmFwcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDE3LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yMTUsNyArMjE1LDcgQEAgcHVi
bGljOgogICAgICAgICAgICAgICAgICAgICByZXR1cm4gU2lnbmFsQWN0aW9uOjpOb3RIYW5kbGVk
OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBBU1NFUlQoY3VycmVudENvZGVC
bG9jay0+aGFzSW5zdGFsbGVkVk1UcmFwQnJlYWtwb2ludHMoKSk7Ci0gICAgICAgICAgICAgICAg
Vk0mIHZtID0gKmN1cnJlbnRDb2RlQmxvY2stPnZtKCk7CisgICAgICAgICAgICAgICAgVk0mIHZt
ID0gY3VycmVudENvZGVCbG9jay0+dm0oKTsKIAogICAgICAgICAgICAgICAgIC8vIFdlIGFyZSBp
biBKSVQgY29kZSBzbyBpdCdzIHNhZmUgdG8gYWNxdWlyZSB0aGlzIGxvY2suCiAgICAgICAgICAg
ICAgICAgYXV0byBjb2RlQmxvY2tTZXRMb2NrZXIgPSBob2xkTG9jayh2bS5oZWFwLmNvZGVCbG9j
a1NldCgpLmdldExvY2soKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9X
ZWFrTWFwUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9XZWFrTWFwUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha01hcFByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE2IEFwcGxl
LCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOSBB
cHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC00OCw3ICs0OCw3IEBAIHZvaWQgV2Vha01hcFByb3RvdHlwZTo6ZmluaXNoQ3Jl
YXRpb24oVk0KICAgICBKU0NfTkFUSVZFX0lOVFJJTlNJQ19GVU5DVElPTl9XSVRIT1VUX1RSQU5T
SVRJT04odm0ucHJvcGVydHlOYW1lcy0+aGFzLCBwcm90b0Z1bmNXZWFrTWFwSGFzLCBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSwgMSwgSlNXZWFrTWFw
SGFzSW50cmluc2ljKTsKICAgICBKU0NfTkFUSVZFX0lOVFJJTlNJQ19GVU5DVElPTl9XSVRIT1VU
X1RSQU5TSVRJT04odm0ucHJvcGVydHlOYW1lcy0+c2V0LCBwcm90b0Z1bmNXZWFrTWFwU2V0LCBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSwgMiwgSlNX
ZWFrTWFwU2V0SW50cmluc2ljKTsKIAotICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZt
LCB2bS5wcm9wZXJ0eU5hbWVzLT50b1N0cmluZ1RhZ1N5bWJvbCwganNTdHJpbmcoJnZtLCAiV2Vh
a01hcCIpLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6
UmVhZE9ubHkpOworICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0
eU5hbWVzLT50b1N0cmluZ1RhZ1N5bWJvbCwganNTdHJpbmcodm0sICJXZWFrTWFwIiksIFByb3Bl
cnR5QXR0cmlidXRlOjpEb250RW51bSB8IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSk7CiB9
CiAKIEFMV0FZU19JTkxJTkUgc3RhdGljIEpTV2Vha01hcCogZ2V0V2Vha01hcChDYWxsRnJhbWUq
IGNhbGxGcmFtZSwgSlNWYWx1ZSB2YWx1ZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1dlYWtPYmplY3RSZWZQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtPYmplY3RSZWZQcm90b3R5cGUuY3BwCShyZXZpc2lv
biAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrT2JqZWN0UmVm
UHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBAQCB2b2lkIFdlYWtP
YmplY3RSZWZQcm90b3R5cGU6OmZpbmlzaENyZWF0CiAgICAgLy8gRklYTUU6IEl0IHdvdWxkbid0
IGJlIGhhcmQgdG8gbWFrZSB0aGlzIGFuIGludHJpbnNpYy4KICAgICBKU0NfTkFUSVZFX0ZVTkNU
SU9OX1dJVEhPVVRfVFJBTlNJVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5kZXJlZiwgcHJvdG9GdW5j
V2Vha1JlZkRlcmVmLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRv
bnRFbnVtKSwgMCk7CiAKLSAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJv
cGVydHlOYW1lcy0+dG9TdHJpbmdUYWdTeW1ib2wsIGpzU3RyaW5nKCZ2bSwgIldlYWtSZWYiKSwg
UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtIHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5
KTsKKyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+
dG9TdHJpbmdUYWdTeW1ib2wsIGpzU3RyaW5nKHZtLCAiV2Vha1JlZiIpLCBQcm9wZXJ0eUF0dHJp
YnV0ZTo6RG9udEVudW0gfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpOwogfQogCiBBTFdB
WVNfSU5MSU5FIHN0YXRpYyBKU1dlYWtPYmplY3RSZWYqIGdldFdlYWtSZWYoQ2FsbEZyYW1lKiBj
YWxsRnJhbWUsIEpTVmFsdWUgdmFsdWUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9XZWFrU2V0UHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9XZWFrU2V0UHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha1NldFByb3RvdHlwZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYg
QXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0y
MDE5IEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTQ2LDcgKzQ2LDcgQEAgdm9pZCBXZWFrU2V0UHJvdG90eXBlOjpmaW5p
c2hDcmVhdGlvbihWTQogICAgIEpTQ19OQVRJVkVfSU5UUklOU0lDX0ZVTkNUSU9OX1dJVEhPVVRf
VFJBTlNJVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5oYXMsIHByb3RvRnVuY1dlYWtTZXRIYXMsIHN0
YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pLCAxLCBKU1dl
YWtTZXRIYXNJbnRyaW5zaWMpOwogICAgIEpTQ19OQVRJVkVfSU5UUklOU0lDX0ZVTkNUSU9OX1dJ
VEhPVVRfVFJBTlNJVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5hZGQsIHByb3RvRnVuY1dlYWtTZXRB
ZGQsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pLCAx
LCBKU1dlYWtTZXRBZGRJbnRyaW5zaWMpOwogCi0gICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRp
b24odm0sIHZtLnByb3BlcnR5TmFtZXMtPnRvU3RyaW5nVGFnU3ltYm9sLCBqc1N0cmluZygmdm0s
ICJXZWFrU2V0IiksIFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8IFByb3BlcnR5QXR0cmli
dXRlOjpSZWFkT25seSk7CisgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnBy
b3BlcnR5TmFtZXMtPnRvU3RyaW5nVGFnU3ltYm9sLCBqc1N0cmluZyh2bSwgIldlYWtTZXQiKSwg
UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtIHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5
KTsKIH0KIAogQUxXQVlTX0lOTElORSBzdGF0aWMgSlNXZWFrU2V0KiBnZXRXZWFrU2V0KENhbGxG
cmFtZSogY2FsbEZyYW1lLCBKU1ZhbHVlIHZhbHVlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3Rvb2xzL0hlYXBWZXJpZmllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3Rvb2xzL0hlYXBWZXJpZmllci5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS90b29scy9IZWFwVmVyaWZpZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMTQ0LDEyICsxNDQsMTIgQEAgdm9pZCBIZWFwVmVyaWZpZXI6OnByaW50VmVyaWZpY2F0aW9u
SGVhZAogICAgIENvbGxlY3Rpb25TY29wZSBzY29wZSA9IGN1cnJlbnRDeWNsZSgpLnNjb3BlOwog
ICAgIE1vbm90b25pY1RpbWUgZ2NDeWNsZVRpbWVzdGFtcCA9IGN1cnJlbnRDeWNsZSgpLnRpbWVz
dGFtcDsKICAgICBkYXRhTG9nKCJWZXJpZnlpbmcgaGVhcCBpbiBbcCIsIGdldEN1cnJlbnRQcm9j
ZXNzSUQoKSwgIiwgIiwgVGhyZWFkOjpjdXJyZW50KCksICJdIHZtICIsCi0gICAgICAgIFJhd1Bv
aW50ZXIobV9oZWFwLT52bSgpKSwgIiBvbiAiLCBzY29wZSwgIiBHQyBAICIsIGdjQ3ljbGVUaW1l
c3RhbXAsICJcbiIpOworICAgICAgICBSYXdQb2ludGVyKCZtX2hlYXAtPnZtKCkpLCAiIG9uICIs
IHNjb3BlLCAiIEdDIEAgIiwgZ2NDeWNsZVRpbWVzdGFtcCwgIlxuIik7CiB9CiAKIGJvb2wgSGVh
cFZlcmlmaWVyOjp2ZXJpZnlDZWxsTGlzdChQaGFzZSBwaGFzZSwgQ2VsbExpc3QmIGxpc3QpCiB7
Ci0gICAgVk0mIHZtID0gKm1faGVhcC0+dm0oKTsKKyAgICBWTSYgdm0gPSBtX2hlYXAtPnZtKCk7
CiAgICAgYXV0byYgbGl2ZUNlbGxzID0gbGlzdC5jZWxscygpOwogCiAgICAgYm9vbCBsaXN0TmFt
ZVByaW50ZWQgPSBmYWxzZTsKQEAgLTIyMiw3ICsyMjIsNyBAQCBib29sIEhlYXBWZXJpZmllcjo6
dmFsaWRhdGVKU0NlbGwoVk0qIGV4CiAgICAgaWYgKGV4cGVjdGVkVk0pIHsKICAgICAgICAgVk0m
IHZtID0gKmV4cGVjdGVkVk07CiAKLSAgICAgICAgVk0qIGNlbGxWTSA9IGNlbGwtPnZtKCk7Cisg
ICAgICAgIFZNKiBjZWxsVk0gPSAmY2VsbC0+dm0oKTsKICAgICAgICAgaWYgKGNlbGxWTSAhPSBl
eHBlY3RlZFZNKSB7CiAgICAgICAgICAgICBwcmludEhlYWRlckFuZENlbGwoKTsKICAgICAgICAg
ICAgIGRhdGFMb2coIiBpcyBmcm9tIGEgZGlmZmVyZW50IFZNOiBleHBlY3RlZDoiLCBSYXdQb2lu
dGVyKGV4cGVjdGVkVk0pLCAiIGFjdHVhbDoiLCBSYXdQb2ludGVyKGNlbGxWTSksICJcbiIpOwpA
QCAtMjU1LDcgKzI1NSw3IEBAIGJvb2wgSGVhcFZlcmlmaWVyOjp2YWxpZGF0ZUpTQ2VsbChWTSog
ZXgKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogCi0gICAgICAgIFZNKiBz
dHJ1Y3R1cmVWTSA9IHN0cnVjdHVyZS0+dm0oKTsKKyAgICAgICAgVk0qIHN0cnVjdHVyZVZNID0g
JnN0cnVjdHVyZS0+dm0oKTsKICAgICAgICAgaWYgKHN0cnVjdHVyZVZNICE9IGV4cGVjdGVkVk0p
IHsKICAgICAgICAgICAgIHByaW50SGVhZGVyQW5kQ2VsbCgpOwogICAgICAgICAgICAgZGF0YUxv
ZygiIGhhcyBzdHJ1Y3R1cmUgIiwgUmF3UG9pbnRlcihzdHJ1Y3R1cmUpLCAiIGZyb20gYSBkaWZm
ZXJlbnQgVk06IGV4cGVjdGVkOiIsIFJhd1BvaW50ZXIoZXhwZWN0ZWRWTSksICIgYWN0dWFsOiIs
IFJhd1BvaW50ZXIoc3RydWN0dXJlVk0pLCAiXG4iKTsKQEAgLTMwNSw3ICszMDUsNyBAQCBib29s
IEhlYXBWZXJpZmllcjo6dmFsaWRhdGVKU0NlbGwoVk0qIGV4CiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIFZNKiBzdHJ1Y3R1cmVTdHJ1Y3R1
cmVWTSA9IHN0cnVjdHVyZVN0cnVjdHVyZS0+dm0oKTsKKyAgICAgICAgVk0qIHN0cnVjdHVyZVN0
cnVjdHVyZVZNID0gJnN0cnVjdHVyZVN0cnVjdHVyZS0+dm0oKTsKICAgICAgICAgaWYgKHN0cnVj
dHVyZVN0cnVjdHVyZVZNICE9IGV4cGVjdGVkVk0pIHsKICAgICAgICAgICAgIHByaW50SGVhZGVy
QW5kQ2VsbCgpOwogICAgICAgICAgICAgZGF0YUxvZygiIGhhcyBzdHJ1Y3R1cmUgIiwgUmF3UG9p
bnRlcihzdHJ1Y3R1cmUpLCAiIHdob3NlIHN0cnVjdHVyZSAiLCBSYXdQb2ludGVyKHN0cnVjdHVy
ZVN0cnVjdHVyZSksICIgaXMgZnJvbSBhIGRpZmZlcmVudCBWTTogZXhwZWN0ZWQ6IiwgUmF3UG9p
bnRlcihleHBlY3RlZFZNKSwgIiBhY3R1YWw6IiwgUmF3UG9pbnRlcihzdHJ1Y3R1cmVTdHJ1Y3R1
cmVWTSksICJcbiIpOwpAQCAtMzY1LDcgKzM2NSw3IEBAIHZvaWQgSGVhcFZlcmlmaWVyOjp2ZXJp
ZnkoSGVhcFZlcmlmaWVyOjoKIHZvaWQgSGVhcFZlcmlmaWVyOjpyZXBvcnRDZWxsKENlbGxQcm9m
aWxlJiBwcm9maWxlLCBpbnQgY3ljbGVJbmRleCwgSGVhcFZlcmlmaWVyOjpHQ0N5Y2xlJiBjeWNs
ZSwgQ2VsbExpc3QmIGxpc3QsIGNvbnN0IGNoYXIqIHByZWZpeCkKIHsKICAgICBIZWFwQ2VsbCog
Y2VsbCA9IHByb2ZpbGUuY2VsbCgpOwotICAgIFZNKiB2bSA9IG1faGVhcC0+dm0oKTsKKyAgICBW
TSYgdm0gPSBtX2hlYXAtPnZtKCk7CiAKICAgICBpZiAocHJlZml4KQogICAgICAgICBkYXRhTG9n
KHByZWZpeCk7CkBAIC0zODcsNyArMzg3LDcgQEAgdm9pZCBIZWFwVmVyaWZpZXI6OnJlcG9ydENl
bGwoQ2VsbFByb2ZpbAogCiAgICAgaWYgKHByb2ZpbGUuaXNMaXZlKCkgJiYgcHJvZmlsZS5pc0pT
Q2VsbCgpKSB7CiAgICAgICAgIEpTQ2VsbCoganNDZWxsID0gcHJvZmlsZS5qc0NlbGwoKTsKLSAg
ICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBqc0NlbGwtPnN0cnVjdHVyZSgqdm0pOworICAg
ICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGpzQ2VsbC0+c3RydWN0dXJlKHZtKTsKICAgICAg
ICAgZGF0YUxvZygiIHN0cnVjdHVyZToiLCBSYXdQb2ludGVyKHN0cnVjdHVyZSkpOwogICAgICAg
ICBpZiAoanNDZWxsLT5pc09iamVjdCgpKSB7CiAgICAgICAgICAgICBKU09iamVjdCogb2JqID0g
c3RhdGljX2Nhc3Q8SlNPYmplY3QqPihjZWxsKTsKQEAgLTM5OSw3ICszOTksNyBAQCB2b2lkIEhl
YXBWZXJpZmllcjo6cmVwb3J0Q2VsbChDZWxsUHJvZmlsCiAgICAgfQogCiAgICAgZGF0YUxvZygi
IGluICIsIGN5Y2xlLnNjb3BlLCAiIEdDWyIsIGN5Y2xlSW5kZXgsICJdIGluICciLCBsaXN0Lm5h
bWUoKSwgIicgbGlzdCBpbiBWTSAiLAotICAgICAgICBSYXdQb2ludGVyKHZtKSwgIiByZWNvcmRl
ZCBhdCB0aW1lICIsIHByb2ZpbGUudGltZXN0YW1wKCksICJcbiIpOworICAgICAgICBSYXdQb2lu
dGVyKCZ2bSksICIgcmVjb3JkZWQgYXQgdGltZSAiLCBwcm9maWxlLnRpbWVzdGFtcCgpLCAiXG4i
KTsKICAgICBpZiAocHJvZmlsZS5zdGFja1RyYWNlKCkpCiAgICAgICAgIGRhdGFMb2coKnByb2Zp
bGUuc3RhY2tUcmFjZSgpKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9K
U0RvbGxhclZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMv
SlNEb2xsYXJWTS5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS90b29scy9KU0RvbGxhclZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTksNyArOTksNyBAQCBw
dWJsaWM6CiAgICAgICAgICAgICBpZiAoZnJhbWVJbmRleCsrICE9IHJlcXVlc3RlZEZyYW1lSW5k
ZXgpCiAgICAgICAgICAgICAgICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6Q29udGludWU7CiAKLSAg
ICAgICAgICAgIGFkZFByb3BlcnR5KHZtLCAibmFtZSIsIGpzU3RyaW5nKCZ2bSwgdmlzaXRvci0+
ZnVuY3Rpb25OYW1lKCkpKTsKKyAgICAgICAgICAgIGFkZFByb3BlcnR5KHZtLCAibmFtZSIsIGpz
U3RyaW5nKHZtLCB2aXNpdG9yLT5mdW5jdGlvbk5hbWUoKSkpOwogCiAgICAgICAgICAgICBpZiAo
dmlzaXRvci0+Y2FsbGVlKCkuaXNDZWxsKCkpCiAgICAgICAgICAgICAgICAgYWRkUHJvcGVydHko
dm0sICJjYWxsZWUiLCB2aXNpdG9yLT5jYWxsZWUoKS5hc0NlbGwoKSk7CkBAIC0xMjMsNyArMTIz
LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICB2b2lkIGFkZFByb3BlcnR5KFZNJiB2bSwgY29u
c3QgY2hhciogbmFtZSwgSlNWYWx1ZSB2YWx1ZSkKICAgICB7Ci0gICAgICAgIElkZW50aWZpZXIg
aWRlbnRpZmllciA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCBuYW1lKTsKKyAgICAgICAg
SWRlbnRpZmllciBpZGVudGlmaWVyID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgbmFtZSk7
CiAgICAgICAgIHB1dERpcmVjdCh2bSwgaWRlbnRpZmllciwgdmFsdWUpOwogICAgIH0KIH07CkBA
IC0zNjksMTMgKzM2OSwxNCBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9w
ZXJ0eVNsb3QoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUg
cHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiAgICAgeworICAgICAgICBWTSYgdm0g
PSBleGVjLT52bSgpOwogICAgICAgICBDdXN0b21HZXR0ZXIqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
Q3VzdG9tR2V0dGVyKj4ob2JqZWN0KTsKLSAgICAgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBQcm9w
ZXJ0eU5hbWUoSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCAiY3VzdG9tR2V0dGVyIikpKSB7
CisgICAgICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gUHJvcGVydHlOYW1lKElkZW50aWZpZXI6OmZy
b21TdHJpbmcodm0sICJjdXN0b21HZXR0ZXIiKSkpIHsKICAgICAgICAgICAgIHNsb3Quc2V0Q2Fj
aGVhYmxlQ3VzdG9tKHRoaXNPYmplY3QsIFByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwg
UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVt
LCB0aGlzT2JqZWN0LT5jdXN0b21HZXR0ZXIpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gUHJvcGVydHlO
YW1lKElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgImN1c3RvbUdldHRlckFjY2Vzc29yIikp
KSB7CisgICAgICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gUHJvcGVydHlOYW1lKElkZW50aWZpZXI6
OmZyb21TdHJpbmcodm0sICJjdXN0b21HZXR0ZXJBY2Nlc3NvciIpKSkgewogICAgICAgICAgICAg
c2xvdC5zZXRDYWNoZWFibGVDdXN0b20odGhpc09iamVjdCwgUHJvcGVydHlBdHRyaWJ1dGU6OkRv
bnREZWxldGUgfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBQcm9wZXJ0eUF0dHJpYnV0
ZTo6RG9udEVudW0gfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tQWNjZXNzb3IsIHRoaXNPYmpl
Y3QtPmN1c3RvbUdldHRlckFjZXNzb3IpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
ICAgIH0KQEAgLTM5Miw3ICszOTMsNyBAQCBwcml2YXRlOgogICAgICAgICBDdXN0b21HZXR0ZXIq
IHRoaXNPYmplY3QgPSBqc0R5bmFtaWNDYXN0PEN1c3RvbUdldHRlcio+KHZtLCBKU1ZhbHVlOjpk
ZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgICAgIGlmICghdGhpc09iamVjdCkKICAgICAgICAgICAg
IHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsKLSAgICAgICAgYm9vbCBzaG91
bGRUaHJvdyA9IHRoaXNPYmplY3QtPmdldChleGVjLCBQcm9wZXJ0eU5hbWUoSWRlbnRpZmllcjo6
ZnJvbVN0cmluZyhleGVjLCAic2hvdWxkVGhyb3ciKSkpLnRvQm9vbGVhbihleGVjKTsKKyAgICAg
ICAgYm9vbCBzaG91bGRUaHJvdyA9IHRoaXNPYmplY3QtPmdldChleGVjLCBQcm9wZXJ0eU5hbWUo
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInNob3VsZFRocm93IikpKS50b0Jvb2xlYW4oZXhl
Yyk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkp
OwogICAgICAgICBpZiAoc2hvdWxkVGhyb3cpCiAgICAgICAgICAgICByZXR1cm4gdGhyb3dWTVR5
cGVFcnJvcihleGVjLCBzY29wZSk7CkBAIC00MDcsNyArNDA4LDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBqc0R5bmFtaWNDYXN0PEpTT2JqZWN0Kj4odm0sIEpT
VmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICAgICAgaWYgKCF0aGlzT2JqZWN0KQogICAg
ICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUpOwotICAgICAgICBi
b29sIHNob3VsZFRocm93ID0gdGhpc09iamVjdC0+Z2V0KGV4ZWMsIFByb3BlcnR5TmFtZShJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJzaG91bGRUaHJvdyIpKSkudG9Cb29sZWFuKGV4ZWMp
OworICAgICAgICBib29sIHNob3VsZFRocm93ID0gdGhpc09iamVjdC0+Z2V0KGV4ZWMsIFByb3Bl
cnR5TmFtZShJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAic2hvdWxkVGhyb3ciKSkpLnRvQm9v
bGVhbihleGVjKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpT
VmFsdWUoKSk7CiAgICAgICAgIGlmIChzaG91bGRUaHJvdykKICAgICAgICAgICAgIHJldHVybiB0
aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsKQEAgLTYxMiw3ICs2MTMsNyBAQCBwdWJsaWM6
CiAgICAgICAgIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIHNsb3dDYWxsKEV4
ZWNTdGF0ZSogZXhlYywgdm9pZCogcG9pbnRlcikKICAgICAgICAgewogICAgICAgICAgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKLSAgICAgICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIoJnZtLCBleGVjKTsKKyAgICAgICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
dm0sIGV4ZWMpOwogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihz
dGF0aWNfY2FzdDxET01KSVRHZXR0ZXIqPihwb2ludGVyKS0+dmFsdWUoKSkpOwogICAgICAgICB9
CiAKQEAgLTY1MSw3ICs2NTIsNyBAQCB2b2lkIERPTUpJVEdldHRlcjo6ZmluaXNoQ3JlYXRpb24o
Vk0mIHZtCiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIGNvbnN0IERPTUpJVDo6
R2V0dGVyU2V0dGVyKiBkb21KSVQgPSAmRE9NSklUR2V0dGVyRE9NSklUOwogICAgIGF1dG8qIGN1
c3RvbUdldHRlclNldHRlciA9IERPTUF0dHJpYnV0ZUdldHRlclNldHRlcjo6Y3JlYXRlKHZtLCBk
b21KSVQtPmdldHRlcigpLCBudWxscHRyLCBET01BdHRyaWJ1dGVBbm5vdGF0aW9uIHsgRE9NSklU
Tm9kZTo6aW5mbygpLCBkb21KSVQgfSk7Ci0gICAgcHV0RGlyZWN0Q3VzdG9tQWNjZXNzb3Iodm0s
IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiY3VzdG9tR2V0dGVyIiksIGN1c3RvbUdldHRl
clNldHRlciwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgUHJvcGVydHlBdHRyaWJ1dGU6
OkN1c3RvbUFjY2Vzc29yKTsKKyAgICBwdXREaXJlY3RDdXN0b21BY2Nlc3Nvcih2bSwgSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZyh2bSwgImN1c3RvbUdldHRlciIpLCBjdXN0b21HZXR0ZXJTZXR0ZXIs
IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IFByb3BlcnR5QXR0cmlidXRlOjpDdXN0b21B
Y2Nlc3Nvcik7CiB9CiAKIGNsYXNzIERPTUpJVEdldHRlckNvbXBsZXggOiBwdWJsaWMgRE9NSklU
Tm9kZSB7CkBAIC02OTUsNyArNjk2LDcgQEAgcHVibGljOgogICAgICAgICBzdGF0aWMgRW5jb2Rl
ZEpTVmFsdWUgSklUX09QRVJBVElPTiBzbG93Q2FsbChFeGVjU3RhdGUqIGV4ZWMsIHZvaWQqIHBv
aW50ZXIpCiAgICAgICAgIHsKICAgICAgICAgICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAg
ICAgICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgICAg
ICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICAgICAgICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICAgICAgICAgIGF1dG8q
IG9iamVjdCA9IHN0YXRpY19jYXN0PERPTUpJVE5vZGUqPihwb2ludGVyKTsKICAgICAgICAgICAg
IGF1dG8qIGRvbWppdEdldHRlckNvbXBsZXggPSBqc0R5bmFtaWNDYXN0PERPTUpJVEdldHRlckNv
bXBsZXgqPih2bSwgb2JqZWN0KTsKQEAgLTc2MSw4ICs3NjIsOCBAQCB2b2lkIERPTUpJVEdldHRl
ckNvbXBsZXg6OmZpbmlzaENyZWF0aW9uCiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwog
ICAgIGNvbnN0IERPTUpJVDo6R2V0dGVyU2V0dGVyKiBkb21KSVQgPSAmRE9NSklUR2V0dGVyQ29t
cGxleERPTUpJVDsKICAgICBhdXRvKiBjdXN0b21HZXR0ZXJTZXR0ZXIgPSBET01BdHRyaWJ1dGVH
ZXR0ZXJTZXR0ZXI6OmNyZWF0ZSh2bSwgZG9tSklULT5nZXR0ZXIoKSwgbnVsbHB0ciwgRE9NQXR0
cmlidXRlQW5ub3RhdGlvbiB7IERPTUpJVEdldHRlckNvbXBsZXg6OmluZm8oKSwgZG9tSklUIH0p
OwotICAgIHB1dERpcmVjdEN1c3RvbUFjY2Vzc29yKHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KCZ2bSwgImN1c3RvbUdldHRlciIpLCBjdXN0b21HZXR0ZXJTZXR0ZXIsIFByb3BlcnR5QXR0cmli
dXRlOjpSZWFkT25seSB8IFByb3BlcnR5QXR0cmlidXRlOjpDdXN0b21BY2Nlc3Nvcik7Ci0gICAg
cHV0RGlyZWN0TmF0aXZlRnVuY3Rpb24odm0sIGdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZygmdm0sICJlbmFibGVFeGNlcHRpb24iKSwgMCwgZnVuY3Rpb25FbmFibGVFeGNlcHRp
b24sIE5vSW50cmluc2ljLCAwKTsKKyAgICBwdXREaXJlY3RDdXN0b21BY2Nlc3Nvcih2bSwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImN1c3RvbUdldHRlciIpLCBjdXN0b21HZXR0ZXJTZXR0
ZXIsIFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IFByb3BlcnR5QXR0cmlidXRlOjpDdXN0
b21BY2Nlc3Nvcik7CisgICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rpb24odm0sIGdsb2JhbE9iamVj
dCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImVuYWJsZUV4Y2VwdGlvbiIpLCAwLCBmdW5j
dGlvbkVuYWJsZUV4Y2VwdGlvbiwgTm9JbnRyaW5zaWMsIDApOwogfQogCiBjbGFzcyBET01KSVRG
dW5jdGlvbk9iamVjdCA6IHB1YmxpYyBET01KSVROb2RlIHsKQEAgLTgwMyw3ICs4MDQsNyBAQCBw
dWJsaWM6CiAgICAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gZnVuY3Rpb25X
aXRob3V0VHlwZUNoZWNrKEV4ZWNTdGF0ZSogZXhlYywgRE9NSklUTm9kZSogbm9kZSkKICAgICB7
CiAgICAgICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRy
YWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcih2bSwgZXhlYyk7CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIo
bm9kZS0+dmFsdWUoKSkpOwogICAgIH0KIApAQCAtODMzLDcgKzgzNCw3IEBAIHN0YXRpYyBjb25z
dCBET01KSVQ6OlNpZ25hdHVyZSBET01KSVRGdW4KIHZvaWQgRE9NSklURnVuY3Rpb25PYmplY3Q6
OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKIHsK
ICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7Ci0gICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rp
b24odm0sIGdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJmdW5jIiks
IDAsIGZ1bmN0aW9uV2l0aFR5cGVDaGVjaywgTm9JbnRyaW5zaWMsICZET01KSVRGdW5jdGlvbk9i
amVjdFNpZ25hdHVyZSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpS
ZWFkT25seSkpOworICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9uKHZtLCBnbG9iYWxPYmplY3Qs
IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJmdW5jIiksIDAsIGZ1bmN0aW9uV2l0aFR5cGVD
aGVjaywgTm9JbnRyaW5zaWMsICZET01KSVRGdW5jdGlvbk9iamVjdFNpZ25hdHVyZSwgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSkpOwogfQogCiBjbGFz
cyBET01KSVRDaGVja1N1YkNsYXNzT2JqZWN0IDogcHVibGljIERPTUpJVE5vZGUgewpAQCAtODc0
LDcgKzg3NSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJB
VElPTiBmdW5jdGlvbldpdGhvdXRUeXBlQ2hlY2soRXhlY1N0YXRlKiBleGVjLCBET01KSVROb2Rl
KiBub2RlKQogICAgIHsKICAgICAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICAgICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgICAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc051bWJlcihub2RlLT52YWx1ZSgpKSk7CiAgICAgfQogCkBAIC04ODcsNyArODg4LDcg
QEAgc3RhdGljIGNvbnN0IERPTUpJVDo6U2lnbmF0dXJlIERPTUpJVENoZQogdm9pZCBET01KSVRD
aGVja1N1YkNsYXNzT2JqZWN0OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QpCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwotICAgIHB1
dERpcmVjdE5hdGl2ZUZ1bmN0aW9uKHZtLCBnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21T
dHJpbmcoJnZtLCAiZnVuYyIpLCAwLCBmdW5jdGlvbldpdGhUeXBlQ2hlY2ssIE5vSW50cmluc2lj
LCAmRE9NSklUQ2hlY2tTdWJDbGFzc09iamVjdFNpZ25hdHVyZSwgc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSkpOworICAgIHB1dERpcmVjdE5hdGl2ZUZ1
bmN0aW9uKHZtLCBnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJmdW5j
IiksIDAsIGZ1bmN0aW9uV2l0aFR5cGVDaGVjaywgTm9JbnRyaW5zaWMsICZET01KSVRDaGVja1N1
YkNsYXNzT2JqZWN0U2lnbmF0dXJlLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRy
aWJ1dGU6OlJlYWRPbmx5KSk7CiB9CiAKIGNsYXNzIERPTUpJVEdldHRlckJhc2VKU09iamVjdCA6
IHB1YmxpYyBET01KSVROb2RlIHsKQEAgLTkzMSw3ICs5MzIsNyBAQCBwdWJsaWM6CiAgICAgICAg
IHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIHNsb3dDYWxsKEV4ZWNTdGF0ZSog
ZXhlYywgdm9pZCogcG9pbnRlcikKICAgICAgICAgewogICAgICAgICAgICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKLSAgICAgICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBl
eGVjKTsKKyAgICAgICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMp
OwogICAgICAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9IHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4o
cG9pbnRlcik7CiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKG9iamVjdC0+Z2V0
UHJvdG90eXBlRGlyZWN0KHZtKSk7CiAgICAgICAgIH0KQEAgLTk3MSw3ICs5NzIsNyBAQCB2b2lk
IERPTUpJVEdldHRlckJhc2VKU09iamVjdDo6ZmluaXNoQ3JlCiAgICAgQmFzZTo6ZmluaXNoQ3Jl
YXRpb24odm0pOwogICAgIGNvbnN0IERPTUpJVDo6R2V0dGVyU2V0dGVyKiBkb21KSVQgPSAmRE9N
SklUR2V0dGVyQmFzZUpTT2JqZWN0RE9NSklUOwogICAgIGF1dG8qIGN1c3RvbUdldHRlclNldHRl
ciA9IERPTUF0dHJpYnV0ZUdldHRlclNldHRlcjo6Y3JlYXRlKHZtLCBkb21KSVQtPmdldHRlcigp
LCBudWxscHRyLCBET01BdHRyaWJ1dGVBbm5vdGF0aW9uIHsgSlNPYmplY3Q6OmluZm8oKSwgZG9t
SklUIH0pOwotICAgIHB1dERpcmVjdEN1c3RvbUFjY2Vzc29yKHZtLCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKCZ2bSwgImN1c3RvbUdldHRlciIpLCBjdXN0b21HZXR0ZXJTZXR0ZXIsIFByb3BlcnR5
QXR0cmlidXRlOjpSZWFkT25seSB8IFByb3BlcnR5QXR0cmlidXRlOjpDdXN0b21BY2Nlc3Nvcik7
CisgICAgcHV0RGlyZWN0Q3VzdG9tQWNjZXNzb3Iodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmco
dm0sICJjdXN0b21HZXR0ZXIiKSwgY3VzdG9tR2V0dGVyU2V0dGVyLCBQcm9wZXJ0eUF0dHJpYnV0
ZTo6UmVhZE9ubHkgfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tQWNjZXNzb3IpOwogfQogCiBj
bGFzcyBNZXNzYWdlIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPE1lc3NhZ2U+IHsKQEAg
LTEwMzUsNyArMTAzNiw3IEBAIHN0YXRpYyBib29sIGN1c3RvbVNldEFjY2Vzc29yKEV4ZWNTdGF0
ZSoKICAgICBSRUxFQVNFX0FTU0VSVCh2YWx1ZS5pc09iamVjdCgpKTsKICAgICBKU09iamVjdCog
b2JqZWN0ID0gYXNPYmplY3QodmFsdWUpOwogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KG9iamVj
dCk7Ci0gICAgb2JqZWN0LT5wdXQob2JqZWN0LCBleGVjLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KCZ2bSwgInJlc3VsdCIpLCBKU1ZhbHVlOjpkZWNvZGUodGhpc09iamVjdCksIHNsb3QpOworICAg
IG9iamVjdC0+cHV0KG9iamVjdCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInJl
c3VsdCIpLCBKU1ZhbHVlOjpkZWNvZGUodGhpc09iamVjdCksIHNsb3QpOwogCiAgICAgcmV0dXJu
IHRydWU7CiB9CkBAIC0xMDUwLDcgKzEwNTEsNyBAQCBzdGF0aWMgYm9vbCBjdXN0b21TZXRWYWx1
ZShFeGVjU3RhdGUqIGV4CiAgICAgUkVMRUFTRV9BU1NFUlQodmFsdWUuaXNPYmplY3QoKSk7CiAg
ICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KHZhbHVlKTsKICAgICBQdXRQcm9wZXJ0eVNs
b3Qgc2xvdChvYmplY3QpOwotICAgIG9iamVjdC0+cHV0KG9iamVjdCwgZXhlYywgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZygmdm0sICJyZXN1bHQiKSwgSlNWYWx1ZTo6ZGVjb2RlKHNsb3RWYWx1ZSks
IHNsb3QpOworICAgIG9iamVjdC0+cHV0KG9iamVjdCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZyh2bSwgInJlc3VsdCIpLCBKU1ZhbHVlOjpkZWNvZGUoc2xvdFZhbHVlKSwgc2xvdCk7CiAK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTEwNTksOSArMTA2MCw5IEBAIHZvaWQgSlNUZXN0Q3Vz
dG9tR2V0dGVyU2V0dGVyOjpmaW5pc2hDcmUKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2
bSk7CiAKLSAgICBwdXREaXJlY3RDdXN0b21BY2Nlc3Nvcih2bSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZygmdm0sICJjdXN0b21WYWx1ZSIpLAorICAgIHB1dERpcmVjdEN1c3RvbUFjY2Vzc29yKHZt
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiY3VzdG9tVmFsdWUiKSwKICAgICAgICAgQ3Vz
dG9tR2V0dGVyU2V0dGVyOjpjcmVhdGUodm0sIGN1c3RvbUdldFZhbHVlLCBjdXN0b21TZXRWYWx1
ZSksIDApOwotICAgIHB1dERpcmVjdEN1c3RvbUFjY2Vzc29yKHZtLCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKCZ2bSwgImN1c3RvbUFjY2Vzc29yIiksCisgICAgcHV0RGlyZWN0Q3VzdG9tQWNjZXNz
b3Iodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJjdXN0b21BY2Nlc3NvciIpLAogICAg
ICAgICBDdXN0b21HZXR0ZXJTZXR0ZXI6OmNyZWF0ZSh2bSwgY3VzdG9tR2V0QWNjZXNzb3IsIGN1
c3RvbVNldEFjY2Vzc29yKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRl
OjpDdXN0b21BY2Nlc3NvcikpOwogfQogCkBAIC0xMTM4LDggKzExMzksOCBAQCBwdWJsaWM6CiAg
ICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKIAogICAgICAgICBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0ID0gdGhpcy0+Z2xvYmFsT2JqZWN0KHZtKTsKLSAgICAgICAgcHV0RGly
ZWN0TmF0aXZlRnVuY3Rpb24odm0sIGdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zygmdm0sICJhZGRCeXRlcyIpLCAwLCBmdW5jdGlvbldhc21TdHJlYW1pbmdQYXJzZXJBZGRCeXRl
cywgTm9JbnRyaW5zaWMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6
RG9udEVudW0pKTsKLSAgICAgICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rpb24odm0sIGdsb2JhbE9i
amVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJmaW5hbGl6ZSIpLCAwLCBmdW5jdGlv
bldhc21TdHJlYW1pbmdQYXJzZXJGaW5hbGl6ZSwgTm9JbnRyaW5zaWMsIHN0YXRpY19jYXN0PHVu
c2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKKyAgICAgICAgcHV0RGlyZWN0
TmF0aXZlRnVuY3Rpb24odm0sIGdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2
bSwgImFkZEJ5dGVzIiksIDAsIGZ1bmN0aW9uV2FzbVN0cmVhbWluZ1BhcnNlckFkZEJ5dGVzLCBO
b0ludHJpbnNpYywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250
RW51bSkpOworICAgICAgICBwdXREaXJlY3ROYXRpdmVGdW5jdGlvbih2bSwgZ2xvYmFsT2JqZWN0
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiZmluYWxpemUiKSwgMCwgZnVuY3Rpb25XYXNt
U3RyZWFtaW5nUGFyc2VyRmluYWxpemUsIE5vSW50cmluc2ljLCBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7CiAgICAgfQogCiAgICAgREVDTEFSRV9J
TkZPOwpAQCAtMTMzMCw3ICsxMzMxLDcgQEAgc3RhdGljIEZ1bmN0aW9uRXhlY3V0YWJsZSogZ2V0
RXhlY3V0YWJsZQogICAgIGlmICghdGhlRnVuY3Rpb25WYWx1ZS5pc0NlbGwoKSkKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAgICAgCi0gICAgVk0mIHZtID0gKnRoZUZ1bmN0aW9uVmFsdWUuYXND
ZWxsKCktPnZtKCk7CisgICAgVk0mIHZtID0gdGhlRnVuY3Rpb25WYWx1ZS5hc0NlbGwoKS0+dm0o
KTsKICAgICBKU0Z1bmN0aW9uKiB0aGVGdW5jdGlvbiA9IGpzRHluYW1pY0Nhc3Q8SlNGdW5jdGlv
bio+KHZtLCB0aGVGdW5jdGlvblZhbHVlKTsKICAgICBpZiAoIXRoZUZ1bmN0aW9uKQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKQEAgLTE0OTgsNyArMTQ5OSw3IEBAIHN0YXRpYyBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmMKICAgICBXVEY6OlN0cmluZ1ByaW50U3RyZWFtIHN0cmVh
bTsKICAgICBpZiAoY29kZUJsb2NrKSB7CiAgICAgICAgIHN0cmVhbS5wcmludCgqY29kZUJsb2Nr
KTsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyhleGVjLCBzdHJlYW0u
dG9TdHJpbmcoKSkpOworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKGV4
ZWMtPnZtKCksIHN0cmVhbS50b1N0cmluZygpKSk7CiAgICAgfQogICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CkBAIC0xNjMxLDcgKzE2MzIsNyBAQCBzdGF0aWMg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jCiAKICAgICBXVEY6OlN0cmluZ1ByaW50
U3RyZWFtIHN0cmVhbTsKICAgICBzdHJlYW0ucHJpbnQoSW5kZXhpbmdUeXBlRHVtcChleGVjLT51
bmNoZWNrZWRBcmd1bWVudCgwKS5nZXRPYmplY3QoKS0+aW5kZXhpbmdNb2RlKCkpKTsKLSAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKGV4ZWMsIHN0cmVhbS50b1N0cmluZygpKSk7
CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyhleGVjLT52bSgpLCBzdHJlYW0u
dG9TdHJpbmcoKSkpOwogfQogCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBm
dW5jdGlvbklubGluZUNhcGFjaXR5KEV4ZWNTdGF0ZSogZXhlYykKQEAgLTE2NTQsNyArMTY1NSw3
IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmMKICAgICAgICAgc3Ry
ZWFtLnByaW50KGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KGkpKTsKICAgICB9CiAgICAgCi0gICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyhleGVjLCBzdHJlYW0udG9TdHJpbmcoKSkp
OworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcoZXhlYy0+dm0oKSwgc3RyZWFt
LnRvU3RyaW5nKCkpKTsKIH0KIAogLy8gR2V0cyB0aGUgcGlkIG9mIHRoZSBjdXJyZW50IHByb2Nl
c3MuCkBAIC0xODYwLDcgKzE4NjEsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBmdW5jCiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUo
KSk7CiAKICAgICBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UgPSBtYWtlU291cmNlKGZ1bmN0aW9u
VGV4dCwgeyB9KTsKLSAgICBKU0Z1bmN0aW9uKiBmdW5jID0gSlNGdW5jdGlvbjo6Y3JlYXRlKHZt
LCBjcmVhdGVCdWlsdGluRXhlY3V0YWJsZSh2bSwgc291cmNlLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKCZ2bSwgImZvbyIpLCBDb25zdHJ1Y3RvcktpbmQ6Ok5vbmUsIENvbnN0cnVjdEFiaWxpdHk6
OkNhbm5vdENvbnN0cnVjdCktPmxpbmsodm0sIG51bGxwdHIsIHNvdXJjZSksIGV4ZWMtPmxleGlj
YWxHbG9iYWxPYmplY3QoKSk7CisgICAgSlNGdW5jdGlvbiogZnVuYyA9IEpTRnVuY3Rpb246OmNy
ZWF0ZSh2bSwgY3JlYXRlQnVpbHRpbkV4ZWN1dGFibGUodm0sIHNvdXJjZSwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZyh2bSwgImZvbyIpLCBDb25zdHJ1Y3RvcktpbmQ6Ok5vbmUsIENvbnN0cnVjdEFi
aWxpdHk6OkNhbm5vdENvbnN0cnVjdCktPmxpbmsodm0sIG51bGxwdHIsIHNvdXJjZSksIGV4ZWMt
PmxleGljYWxHbG9iYWxPYmplY3QoKSk7CiAKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGZ1
bmMpOwogfQpAQCAtMTg3NSw3ICsxODc2LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZnVuYwogCiAgICAgU3RyaW5nIHN0ciA9IGFzU3RyaW5nKGV4ZWMtPmFyZ3VtZW50
KDEpKS0+dmFsdWUoZXhlYyk7CiAKLSAgICBTeW1ib2xJbXBsKiBzeW1ib2wgPSB2bS5wcm9wZXJ0
eU5hbWVzLT5sb29rVXBQcml2YXRlTmFtZShJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsIHN0
cikpOworICAgIFN5bWJvbEltcGwqIHN5bWJvbCA9IHZtLnByb3BlcnR5TmFtZXMtPmxvb2tVcFBy
aXZhdGVOYW1lKElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHN0cikpOwogICAgIGlmICghc3lt
Ym9sKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIHNjb3BlLCAiVW5rbm93biBw
cml2YXRlIG5hbWUuIik7CiAKQEAgLTIyMjksMTMgKzIyMzAsMTMgQEAgdm9pZCBKU0RvbGxhclZN
OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiAgICAgYWRkRnVuY3Rpb24odm0sICJjcmFzaCIsIGZ1
bmN0aW9uQ3Jhc2gsIDApOwogICAgIGFkZEZ1bmN0aW9uKHZtLCAiYnJlYWtwb2ludCIsIGZ1bmN0
aW9uQnJlYWtwb2ludCwgMCk7CiAKLSAgICBwdXREaXJlY3ROYXRpdmVGdW5jdGlvbih2bSwgZ2xv
YmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImRmZ1RydWUiKSwgMCwgZnVu
Y3Rpb25ERkdUcnVlLCBERkdUcnVlSW50cmluc2ljLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJv
cGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7Ci0gICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rpb24o
dm0sIGdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJmdGxUcnVlIiks
IDAsIGZ1bmN0aW9uRlRMVHJ1ZSwgRlRMVHJ1ZUludHJpbnNpYywgc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOworICAgIHB1dERpcmVjdE5hdGl2ZUZ1
bmN0aW9uKHZtLCBnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJkZmdU
cnVlIiksIDAsIGZ1bmN0aW9uREZHVHJ1ZSwgREZHVHJ1ZUludHJpbnNpYywgc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOworICAgIHB1dERpcmVjdE5h
dGl2ZUZ1bmN0aW9uKHZtLCBnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0s
ICJmdGxUcnVlIiksIDAsIGZ1bmN0aW9uRlRMVHJ1ZSwgRlRMVHJ1ZUludHJpbnNpYywgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOwogCi0gICAgcHV0
RGlyZWN0TmF0aXZlRnVuY3Rpb24odm0sIGdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZygmdm0sICJjcHVNZmVuY2UiKSwgMCwgZnVuY3Rpb25DcHVNZmVuY2UsIENQVU1mZW5jZUlu
dHJpbnNpYywgMCk7Ci0gICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rpb24odm0sIGdsb2JhbE9iamVj
dCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJjcHVSZHRzYyIpLCAwLCBmdW5jdGlvbkNw
dVJkdHNjLCBDUFVSZHRzY0ludHJpbnNpYywgMCk7Ci0gICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rp
b24odm0sIGdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJjcHVDcHVp
ZCIpLCAwLCBmdW5jdGlvbkNwdUNwdWlkLCBDUFVDcHVpZEludHJpbnNpYywgMCk7Ci0gICAgcHV0
RGlyZWN0TmF0aXZlRnVuY3Rpb24odm0sIGdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZygmdm0sICJjcHVQYXVzZSIpLCAwLCBmdW5jdGlvbkNwdVBhdXNlLCBDUFVQYXVzZUludHJp
bnNpYywgMCk7CisgICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rpb24odm0sIGdsb2JhbE9iamVjdCwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImNwdU1mZW5jZSIpLCAwLCBmdW5jdGlvbkNwdU1m
ZW5jZSwgQ1BVTWZlbmNlSW50cmluc2ljLCAwKTsKKyAgICBwdXREaXJlY3ROYXRpdmVGdW5jdGlv
bih2bSwgZ2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiY3B1UmR0c2Mi
KSwgMCwgZnVuY3Rpb25DcHVSZHRzYywgQ1BVUmR0c2NJbnRyaW5zaWMsIDApOworICAgIHB1dERp
cmVjdE5hdGl2ZUZ1bmN0aW9uKHZtLCBnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJp
bmcodm0sICJjcHVDcHVpZCIpLCAwLCBmdW5jdGlvbkNwdUNwdWlkLCBDUFVDcHVpZEludHJpbnNp
YywgMCk7CisgICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rpb24odm0sIGdsb2JhbE9iamVjdCwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImNwdVBhdXNlIiksIDAsIGZ1bmN0aW9uQ3B1UGF1c2Us
IENQVVBhdXNlSW50cmluc2ljLCAwKTsKICAgICBhZGRGdW5jdGlvbih2bSwgImNwdUNsZmx1c2gi
LCBmdW5jdGlvbkNwdUNsZmx1c2gsIDIpOwogCiAgICAgYWRkRnVuY3Rpb24odm0sICJsbGludFRy
dWUiLCBmdW5jdGlvbkxMaW50VHJ1ZSwgMCk7CkBAIC0yMzM0LDEzICsyMzM1LDEzIEBAIHZvaWQg
SlNEb2xsYXJWTTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQogCiB2b2lkIEpTRG9sbGFyVk06OmFk
ZEZ1bmN0aW9uKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgY2hh
ciogbmFtZSwgTmF0aXZlRnVuY3Rpb24gZnVuY3Rpb24sIHVuc2lnbmVkIGFyZ3VtZW50cykKIHsK
LSAgICBJZGVudGlmaWVyIGlkZW50aWZpZXIgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwg
bmFtZSk7CisgICAgSWRlbnRpZmllciBpZGVudGlmaWVyID0gSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zyh2bSwgbmFtZSk7CiAgICAgcHV0RGlyZWN0KHZtLCBpZGVudGlmaWVyLCBKU0Z1bmN0aW9uOjpj
cmVhdGUodm0sIGdsb2JhbE9iamVjdCwgYXJndW1lbnRzLCBpZGVudGlmaWVyLnN0cmluZygpLCBm
dW5jdGlvbikpOwogfQogCiB2b2lkIEpTRG9sbGFyVk06OmFkZENvbnN0cnVjdGlibGVGdW5jdGlv
bihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IGNoYXIqIG5hbWUs
IE5hdGl2ZUZ1bmN0aW9uIGZ1bmN0aW9uLCB1bnNpZ25lZCBhcmd1bWVudHMpCiB7Ci0gICAgSWRl
bnRpZmllciBpZGVudGlmaWVyID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIG5hbWUpOwor
ICAgIElkZW50aWZpZXIgaWRlbnRpZmllciA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIG5h
bWUpOwogICAgIHB1dERpcmVjdCh2bSwgaWRlbnRpZmllciwgSlNGdW5jdGlvbjo6Y3JlYXRlKHZt
LCBnbG9iYWxPYmplY3QsIGFyZ3VtZW50cywgaWRlbnRpZmllci5zdHJpbmcoKSwgZnVuY3Rpb24s
IE5vSW50cmluc2ljLCBmdW5jdGlvbikpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvdG9vbHMvVk1JbnNwZWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS90b29scy9WTUluc3BlY3Rvci5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS90b29scy9WTUluc3BlY3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3
NCw3ICszNzQsNyBAQCB2b2lkIFZNSW5zcGVjdG9yOjpkdW1wUmVnaXN0ZXJzKENhbGxGcmFtCiAg
ICAgICAgIGRhdGFMb2coIkR1bXBpbmcgaG9zdCBmcmFtZSByZWdpc3RlcnMgbm90IHN1cHBvcnRl
ZC5cbiIpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIFZNJiB2bSA9ICpjb2RlQmxvY2st
PnZtKCk7CisgICAgVk0mIHZtID0gY29kZUJsb2NrLT52bSgpOwogICAgIGF1dG8gdmFsdWVBc1N0
cmluZyA9IFsmXSAoSlNWYWx1ZSB2KSAtPiBDU3RyaW5nIHsKICAgICAgICAgaWYgKCF2LmlzQ2Vs
bCgpIHx8IFZNSW5zcGVjdG9yOjppc1ZhbGlkQ2VsbCgmdm0uaGVhcCwgcmVpbnRlcnByZXRfY2Fz
dDxKU0NlbGwqPihKU1ZhbHVlOjplbmNvZGUodikpKSkKICAgICAgICAgICAgIHJldHVybiB0b0NT
dHJpbmcodik7CkBAIC00OTcsNyArNDk3LDcgQEAgcHJpdmF0ZToKIAogdm9pZCBWTUluc3BlY3Rv
cjo6ZHVtcENlbGxNZW1vcnlUb1N0cmVhbShKU0NlbGwqIGNlbGwsIFByaW50U3RyZWFtJiBvdXQp
CiB7Ci0gICAgVk0mIHZtID0gKmNlbGwtPnZtKCk7CisgICAgVk0mIHZtID0gY2VsbC0+dm0oKTsK
ICAgICBTdHJ1Y3R1cmVJRCBzdHJ1Y3R1cmVJRCA9IGNlbGwtPnN0cnVjdHVyZUlEKCk7CiAgICAg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBjZWxsLT5zdHJ1Y3R1cmUodm0pOwogICAgIEluZGV4aW5n
VHlwZSBpbmRleGluZ1R5cGVBbmRNaXNjID0gY2VsbC0+aW5kZXhpbmdUeXBlQW5kTWlzYygpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUluc3RhbmNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtSW5zdGFuY2UuY3BwCShyZXZp
c2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtSW5zdGFuY2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTctMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTc5LDcgKzc5LDcgQEAgc2l6ZV90IEluc3RhbmNlOjpleHRyYU1l
bW9yeUFsbG9jYXRlZCgpIAogdm9pZCBJbnN0YW5jZTo6c2V0R2xvYmFsKHVuc2lnbmVkIGksIEpT
VmFsdWUgdmFsdWUpCiB7CiAgICAgQVNTRVJUKG1fb3duZXIpOwotICAgIG1fZ2xvYmFscy5nZXQo
KVtpXS5hbnlyZWYuc2V0KCpvd25lcjxKU1dlYkFzc2VtYmx5SW5zdGFuY2U+KCktPnZtKCksIG93
bmVyPEpTV2ViQXNzZW1ibHlJbnN0YW5jZT4oKSwgdmFsdWUpOworICAgIG1fZ2xvYmFscy5nZXQo
KVtpXS5hbnlyZWYuc2V0KG93bmVyPEpTV2ViQXNzZW1ibHlJbnN0YW5jZT4oKS0+dm0oKSwgb3du
ZXI8SlNXZWJBc3NlbWJseUluc3RhbmNlPigpLCB2YWx1ZSk7CiB9CiAKIEpTVmFsdWUgSW5zdGFu
Y2U6OmdldEZ1bmN0aW9uV3JhcHBlcih1bnNpZ25lZCBpKSBjb25zdApAQCAtOTMsMTAgKzkzLDEw
IEBAIEpTVmFsdWUgSW5zdGFuY2U6OmdldEZ1bmN0aW9uV3JhcHBlcih1bnMKIHZvaWQgSW5zdGFu
Y2U6OnNldEZ1bmN0aW9uV3JhcHBlcih1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlKQogewogICAg
IEFTU0VSVChtX293bmVyKTsKLSAgICBBU1NFUlQodmFsdWUuaXNGdW5jdGlvbigqb3duZXI8SlNX
ZWJBc3NlbWJseUluc3RhbmNlPigpLT52bSgpKSk7CisgICAgQVNTRVJUKHZhbHVlLmlzRnVuY3Rp
b24ob3duZXI8SlNXZWJBc3NlbWJseUluc3RhbmNlPigpLT52bSgpKSk7CiAgICAgQVNTRVJUKCFt
X2Z1bmN0aW9uV3JhcHBlcnMuY29udGFpbnMoaSkpOwogICAgIGF1dG8gbG9ja2VyID0gaG9sZExv
Y2sob3duZXI8SlNXZWJBc3NlbWJseUluc3RhbmNlPigpLT5jZWxsTG9jaygpKTsKLSAgICBtX2Z1
bmN0aW9uV3JhcHBlcnMuc2V0KGksIFdyaXRlQmFycmllcjxVbmtub3duPigqb3duZXI8SlNXZWJB
c3NlbWJseUluc3RhbmNlPigpLT52bSgpLCBvd25lcjxKU1dlYkFzc2VtYmx5SW5zdGFuY2U+KCks
IHZhbHVlKSk7CisgICAgbV9mdW5jdGlvbldyYXBwZXJzLnNldChpLCBXcml0ZUJhcnJpZXI8VW5r
bm93bj4ob3duZXI8SlNXZWJBc3NlbWJseUluc3RhbmNlPigpLT52bSgpLCBvd25lcjxKU1dlYkFz
c2VtYmx5SW5zdGFuY2U+KCksIHZhbHVlKSk7CiAgICAgQVNTRVJUKGdldEZ1bmN0aW9uV3JhcHBl
cihpKSA9PSB2YWx1ZSk7CiB9CiAKQEAgLTE0Myw3ICsxNDMsNyBAQCBib29sIHNldFdhc21UYWJs
ZUVsZW1lbnQoSW5zdGFuY2UqIGluc3RhCiAgICAgICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24qIHdh
c21GdW5jdGlvbjsKICAgICAgICAgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24qIHdhc21XcmFw
cGVyRnVuY3Rpb247CiAKLSAgICAgICAgaWYgKGlzV2ViQXNzZW1ibHlIb3N0RnVuY3Rpb24oKmlu
c3RhbmNlLT5vd25lcjxKU09iamVjdD4oKS0+dm0oKSwgdmFsdWUsIHdhc21GdW5jdGlvbiwgd2Fz
bVdyYXBwZXJGdW5jdGlvbikpIHsKKyAgICAgICAgaWYgKGlzV2ViQXNzZW1ibHlIb3N0RnVuY3Rp
b24oaW5zdGFuY2UtPm93bmVyPEpTT2JqZWN0PigpLT52bSgpLCB2YWx1ZSwgd2FzbUZ1bmN0aW9u
LCB3YXNtV3JhcHBlckZ1bmN0aW9uKSkgewogICAgICAgICAgICAgQVNTRVJUKCEhd2FzbUZ1bmN0
aW9uIHx8ICEhd2FzbVdyYXBwZXJGdW5jdGlvbik7CiAgICAgICAgICAgICBpZiAod2FzbUZ1bmN0
aW9uKQogICAgICAgICAgICAgICAgIGluc3RhbmNlLT50YWJsZSh0YWJsZUluZGV4KS0+YXNGdW5j
cmVmVGFibGUoKS0+c2V0RnVuY3Rpb24oaW5kZXgsIGpzQ2FzdDxKU09iamVjdCo+KHZhbHVlKSwg
d2FzbUZ1bmN0aW9uLT5pbXBvcnRhYmxlRnVuY3Rpb24oKSwgJndhc21GdW5jdGlvbi0+aW5zdGFu
Y2UoKS0+aW5zdGFuY2UoKSk7CkBAIC0xOTYsNyArMTk2LDcgQEAgYm9vbCBkb1dhc21UYWJsZUZp
bGwoSW5zdGFuY2UqIGluc3RhbmNlLAogRW5jb2RlZEpTVmFsdWUgZG9XYXNtUmVmRnVuYyhJbnN0
YW5jZSogaW5zdGFuY2UsIHVpbnQzMl90IGluZGV4KQogewogICAgIEpTVmFsdWUgdmFsdWUgPSBp
bnN0YW5jZS0+Z2V0RnVuY3Rpb25XcmFwcGVyKGluZGV4KTsKLSAgICBBU1NFUlQodmFsdWUuaXNG
dW5jdGlvbigqaW5zdGFuY2UtPm93bmVyPEpTT2JqZWN0PigpLT52bSgpKSk7CisgICAgQVNTRVJU
KHZhbHVlLmlzRnVuY3Rpb24oaW5zdGFuY2UtPm93bmVyPEpTT2JqZWN0PigpLT52bSgpKSk7CiAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh2YWx1ZSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21UYWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbVRhYmxlLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE0
OSw3ICsxNDksNyBAQCB2b2lkIFRhYmxlOjpzZXQodWludDMyX3QgaW5kZXgsIEpTVmFsdWUgCiAg
ICAgUkVMRUFTRV9BU1NFUlQoaXNBbnlyZWZUYWJsZSgpKTsKICAgICBSRUxFQVNFX0FTU0VSVCht
X293bmVyKTsKICAgICBjbGVhcihpbmRleCk7Ci0gICAgbV9qc1ZhbHVlcy5nZXQoKVtpbmRleCAm
IG1fbWFza10uc2V0KCptX293bmVyLT52bSgpLCBtX293bmVyLCB2YWx1ZSk7CisgICAgbV9qc1Zh
bHVlcy5nZXQoKVtpbmRleCAmIG1fbWFza10uc2V0KG1fb3duZXItPnZtKCksIG1fb3duZXIsIHZh
bHVlKTsKIH0KIAogSlNWYWx1ZSBUYWJsZTo6Z2V0KHVpbnQzMl90IGluZGV4KSBjb25zdApAQCAt
MTkzLDcgKzE5Myw3IEBAIHZvaWQgRnVuY1JlZlRhYmxlOjpzZXRGdW5jdGlvbih1aW50MzJfdCAK
ICAgICBSRUxFQVNFX0FTU0VSVChtX293bmVyKTsKICAgICBjbGVhcihpbmRleCk7CiAgICAgaWYg
KG9wdGlvbmFsV3JhcHBlcikKLSAgICAgICAgbV9qc1ZhbHVlcy5nZXQoKVtpbmRleCAmIG1fbWFz
a10uc2V0KCptX293bmVyLT52bSgpLCBtX293bmVyLCBvcHRpb25hbFdyYXBwZXIpOworICAgICAg
ICBtX2pzVmFsdWVzLmdldCgpW2luZGV4ICYgbV9tYXNrXS5zZXQobV9vd25lci0+dm0oKSwgbV9v
d25lciwgb3B0aW9uYWxXcmFwcGVyKTsKICAgICBtX2ltcG9ydGFibGVGdW5jdGlvbnMuZ2V0KClb
aW5kZXggJiBtX21hc2tdID0gZnVuY3Rpb247CiAgICAgbV9pbnN0YW5jZXMuZ2V0KClbaW5kZXgg
JiBtX21hc2tdID0gaW5zdGFuY2U7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5LmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0xOTYsOCArMTk2LDggQEAgc3RhdGljIHZvaWQgcmVzb2x2ZShWTSYgdm0sIEV4ZWNTdGF0
ZSogZQogICAgICAgICBwcm9taXNlLT5yZXNvbHZlKGV4ZWMsIG1vZHVsZVJlY29yZCk7CiAgICAg
fSBlbHNlIHsKICAgICAgICAgSlNPYmplY3QqIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0
KGV4ZWMpOwotICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZygmdm0sICJtb2R1bGUiX3MpLCBtb2R1bGUpOwotICAgICAgICByZXN1bHQtPnB1dERpcmVj
dCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJpbnN0YW5jZSJfcyksIGluc3RhbmNl
KTsKKyAgICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmco
dm0sICJtb2R1bGUiX3MpLCBtb2R1bGUpOworICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImluc3RhbmNlIl9zKSwgaW5zdGFuY2UpOwogICAg
ICAgICBwcm9taXNlLT5yZXNvbHZlKGV4ZWMsIHJlc3VsdCk7CiAgICAgfQogICAgIENMRUFSX0FO
RF9SRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuY3Bw
CShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dl
YkFzc2VtYmx5SW5zdGFuY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDAsOCArMjAwLDggQEAg
SlNXZWJBc3NlbWJseUluc3RhbmNlKiBKU1dlYkFzc2VtYmx5SW5zdAogCiAgICAgLy8gRm9yIGVh
Y2ggaW1wb3J0IGkgaW4gbW9kdWxlLmltcG9ydHM6CiAgICAgZm9yIChhdXRvJiBpbXBvcnQgOiBt
b2R1bGVJbmZvcm1hdGlvbi5pbXBvcnRzKSB7Ci0gICAgICAgIElkZW50aWZpZXIgbW9kdWxlTmFt
ZSA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCBTdHJpbmc6OmZyb21VVEY4KGltcG9ydC5t
b2R1bGUpKTsKLSAgICAgICAgSWRlbnRpZmllciBmaWVsZE5hbWUgPSBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKCZ2bSwgU3RyaW5nOjpmcm9tVVRGOChpbXBvcnQuZmllbGQpKTsKKyAgICAgICAgSWRl
bnRpZmllciBtb2R1bGVOYW1lID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgU3RyaW5nOjpm
cm9tVVRGOChpbXBvcnQubW9kdWxlKSk7CisgICAgICAgIElkZW50aWZpZXIgZmllbGROYW1lID0g
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgU3RyaW5nOjpmcm9tVVRGOChpbXBvcnQuZmllbGQp
KTsKICAgICAgICAgbW9kdWxlUmVjb3JkLT5hcHBlbmRSZXF1ZXN0ZWRNb2R1bGUobW9kdWxlTmFt
ZSk7CiAgICAgICAgIG1vZHVsZVJlY29yZC0+YWRkSW1wb3J0RW50cnkoV2ViQXNzZW1ibHlNb2R1
bGVSZWNvcmQ6OkltcG9ydEVudHJ5IHsKICAgICAgICAgICAgIFdlYkFzc2VtYmx5TW9kdWxlUmVj
b3JkOjpJbXBvcnRFbnRyeVR5cGU6OlNpbmdsZSwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL1dhc21Ub0pTLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9XYXNtVG9KUy5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL1dhc21Ub0pTLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTIsMTgg
KzkyLDE4IEBAIHN0YXRpYyBFeHBlY3RlZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8V2EKICAgICAg
ICAgaml0Lmp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIoKnZtKTsKIAogICAgICAgICB2b2lkICgqdGhy
b3dCYWRJNjQpKEV4ZWNTdGF0ZSosIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSopID0gW10gKEV4ZWNT
dGF0ZSogZXhlYywgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSkgLT4gdm9pZCB7Ci0g
ICAgICAgICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICAgICAgICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CiAgICAgICAgICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBl
eGVjKTsKIAogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKLSAgICAgICAgICAgICAgICBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0ID0gaW5zdGFuY2UtPmdsb2JhbE9iamVjdCgqdm0pOwotICAgICAgICAg
ICAgICAgIGF1dG8qIGVycm9yID0gRXJyb3JJbnN0YW5jZTo6Y3JlYXRlKGV4ZWMsICp2bSwgZ2xv
YmFsT2JqZWN0LT5lcnJvclN0cnVjdHVyZShFcnJvclR5cGU6OlR5cGVFcnJvciksICJpNjQgbm90
IGFsbG93ZWQgYXMgcmV0dXJuIHR5cGUgb3IgYXJndW1lbnQgdG8gYW4gaW1wb3J0ZWQgZnVuY3Rp
b24iX3MpOworICAgICAgICAgICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOworICAgICAgICAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qg
PSBpbnN0YW5jZS0+Z2xvYmFsT2JqZWN0KHZtKTsKKyAgICAgICAgICAgICAgICBhdXRvKiBlcnJv
ciA9IEVycm9ySW5zdGFuY2U6OmNyZWF0ZShleGVjLCB2bSwgZ2xvYmFsT2JqZWN0LT5lcnJvclN0
cnVjdHVyZShFcnJvclR5cGU6OlR5cGVFcnJvciksICJpNjQgbm90IGFsbG93ZWQgYXMgcmV0dXJu
IHR5cGUgb3IgYXJndW1lbnQgdG8gYW4gaW1wb3J0ZWQgZnVuY3Rpb24iX3MpOwogICAgICAgICAg
ICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGVycm9yKTsKICAgICAgICAg
ICAgIH0KIAogICAgICAgICAgICAgZ2VuZXJpY1Vud2luZCh2bSwgZXhlYyk7Ci0gICAgICAgICAg
ICBBU1NFUlQoISF2bS0+Y2FsbEZyYW1lRm9yQ2F0Y2gpOworICAgICAgICAgICAgQVNTRVJUKCEh
dm0uY2FsbEZyYW1lRm9yQ2F0Y2gpOwogICAgICAgICB9OwogCiAgICAgICAgIExpbmtCdWZmZXIg
bGlua0J1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsK
QEAgLTIyNiw5ICsyMjYsOSBAQCBFeHBlY3RlZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8V2FzbUVu
dHJ5CiAKICAgICAgICAgdWludDY0X3QgKCpjYWxsRnVuYykoRXhlY1N0YXRlKiwgSlNPYmplY3Qq
LCBTaWduYXR1cmVJbmRleCwgdWludDY0X3QqKSA9CiAgICAgICAgICAgICBbXSAoRXhlY1N0YXRl
KiBleGVjLCBKU09iamVjdCogY2FsbGVlLCBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCwg
dWludDY0X3QqIGJ1ZmZlcikgLT4gdWludDY0X3QgeyAKLSAgICAgICAgICAgICAgICBWTSogdm0g
PSAmZXhlYy0+dm0oKTsKKyAgICAgICAgICAgICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAg
ICAgICAgICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwotICAg
ICAgICAgICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsK
KyAgICAgICAgICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKICAgICAgICAgICAgICAgICBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSA9IFNpZ25hdHVy
ZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgpOwogICAgICAgICAgICAgICAgIE1hcmtl
ZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBhcmdO
dW0gPSAwOyBhcmdOdW0gPCBzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpOyArK2FyZ051bSkgewpA
QCAtMjQ0LDcgKzI0NCw3IEBAIEV4cGVjdGVkPE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxXYXNtRW50
cnkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICBj
YXNlIEZ1bmNyZWY6IHsKICAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IEpTVmFsdWU6OmRl
Y29kZShidWZmZXJbYXJnTnVtXSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoaXNX
ZWJBc3NlbWJseUhvc3RGdW5jdGlvbigqdm0sIGFyZykgfHwgYXJnLmlzTnVsbCgpKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIEFTU0VSVChpc1dlYkFzc2VtYmx5SG9zdEZ1bmN0aW9uKHZtLCBh
cmcpIHx8IGFyZy5pc051bGwoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBjYXNlIEFueXJlZjoKQEAg
LTI2Myw3ICsyNjMsNyBAQCBFeHBlY3RlZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8V2FzbUVudHJ5
CiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgQ2FsbERhdGEgY2FsbERhdGE7
Ci0gICAgICAgICAgICAgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBjYWxsZWUtPm1ldGhvZFRhYmxl
KCp2bSktPmdldENhbGxEYXRhKGNhbGxlZSwgY2FsbERhdGEpOworICAgICAgICAgICAgICAgIENh
bGxUeXBlIGNhbGxUeXBlID0gY2FsbGVlLT5tZXRob2RUYWJsZSh2bSktPmdldENhbGxEYXRhKGNh
bGxlZSwgY2FsbERhdGEpOwogICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxUeXBl
ICE9IENhbGxUeXBlOjpOb25lKTsKICAgICAgICAgICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGNh
bGwoZXhlYywgY2FsbGVlLCBjYWxsVHlwZSwgY2FsbERhdGEsIGpzVW5kZWZpbmVkKCksIGFyZ3Mp
OwogICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgMCk7CkBA
IC0yODIsNyArMjgyLDcgQEAgRXhwZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFdhc21FbnRy
eQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBjYXNlIEZ1bmNyZWY6IHsKICAg
ICAgICAgICAgICAgICAgICAgcmVhbFJlc3VsdCA9IEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwot
ICAgICAgICAgICAgICAgICAgICBBU1NFUlQocmVzdWx0LmlzRnVuY3Rpb24oKnZtKSB8fCByZXN1
bHQuaXNOdWxsKCkpOworICAgICAgICAgICAgICAgICAgICBBU1NFUlQocmVzdWx0LmlzRnVuY3Rp
b24odm0pIHx8IHJlc3VsdC5pc051bGwoKSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBjYXNlIEFueXJlZjogewpAQCAtMzE3
LDEwICszMTcsMTAgQEAgRXhwZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFdhc21FbnRyeQog
ICAgICAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIo
dm0tPnRvcEVudHJ5RnJhbWUpOwogICAgICAgICBqaXQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVS
ZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKICAgICAgICAgdm9pZCAoKmRvVW53aW5k
aW5nKShFeGVjU3RhdGUqKSA9IFtdIChFeGVjU3RhdGUqIGV4ZWMpIC0+IHZvaWQgewotICAgICAg
ICAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgICAgICAgICBWTSYgdm0gPSBleGVjLT52
bSgpOwogICAgICAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7
CiAgICAgICAgICAgICBnZW5lcmljVW53aW5kKHZtLCBleGVjKTsKLSAgICAgICAgICAgIEFTU0VS
VCghIXZtLT5jYWxsRnJhbWVGb3JDYXRjaCk7CisgICAgICAgICAgICBBU1NFUlQoISF2bS5jYWxs
RnJhbWVGb3JDYXRjaCk7CiAgICAgICAgIH07CiAgICAgICAgIGF1dG8gZXhjZXB0aW9uQ2FsbCA9
IGppdC5jYWxsKE9wZXJhdGlvblB0clRhZyk7CiAgICAgICAgIGppdC5qdW1wVG9FeGNlcHRpb25I
YW5kbGVyKCp2bSk7CkBAIC01MzYsNyArNTM2LDcgQEAgRXhwZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPFdhc21FbnRyeQogICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dQYXRo
OwogCiAgICAgICAgIGludDMyX3QgKCpjb252ZXJ0VG9JMzIpKEV4ZWNTdGF0ZSosIEpTVmFsdWUp
ID0gW10gKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2KSAtPiBpbnQzMl90IHsKLSAgICAgICAg
ICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgICAgICAgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKICAgICAgICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwog
ICAgICAgICAgICAgcmV0dXJuIHYudG9JbnQzMihleGVjKTsKICAgICAgICAgfTsKQEAgLTU2NSw3
ICs1NjUsNyBAQCBFeHBlY3RlZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8V2FzbUVudHJ5CiAgICAg
ICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgZG9uZTsKIAogICAgICAgICBmbG9hdCAoKmNvbnZl
cnRUb0YzMikoRXhlY1N0YXRlKiwgSlNWYWx1ZSkgPSBbXSAoRXhlY1N0YXRlKiBleGVjLCBKU1Zh
bHVlIHYpIC0+IGZsb2F0IHsKLSAgICAgICAgICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAg
ICAgICAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICAgICAgICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PGZsb2F0Pih2LnRvTnVtYmVyKGV4ZWMpKTsKICAgICAgICAgfTsKQEAgLTYwMCw3ICs2MDAsNyBA
QCBFeHBlY3RlZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8V2FzbUVudHJ5CiAgICAgICAgIENDYWxs
SGVscGVyczo6SnVtcExpc3QgZG9uZTsKIAogICAgICAgICBkb3VibGUgKCpjb252ZXJ0VG9GNjQp
KEV4ZWNTdGF0ZSosIEpTVmFsdWUpID0gW10gKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2KSAt
PiBkb3VibGUgewotICAgICAgICAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgICAgICAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgICAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcih2bSwgZXhlYyk7CiAgICAgICAgICAgICByZXR1cm4gdi50b051bWJlcihleGVjKTsK
ICAgICAgICAgfTsKQEAgLTY0MywxMCArNjQzLDEwIEBAIEV4cGVjdGVkPE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxXYXNtRW50cnkKICAgICAgICAgaml0Lmp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIoKnZt
KTsKIAogICAgICAgICB2b2lkICgqZG9VbndpbmRpbmcpKEV4ZWNTdGF0ZSopID0gW10gKEV4ZWNT
dGF0ZSogZXhlYykgLT4gdm9pZCB7Ci0gICAgICAgICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsK
KyAgICAgICAgICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgICAgICAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICAgICAgICAgIGdlbmVyaWNVbndpbmQo
dm0sIGV4ZWMpOwotICAgICAgICAgICAgQVNTRVJUKCEhdm0tPmNhbGxGcmFtZUZvckNhdGNoKTsK
KyAgICAgICAgICAgIEFTU0VSVCghIXZtLmNhbGxGcmFtZUZvckNhdGNoKTsKICAgICAgICAgfTsK
IAogICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7
CkBAIC02ODcsNyArNjg3LDcgQEAgdm9pZCogd2FzbVRvSlNFeGNlcHRpb24oRXhlY1N0YXRlKiBl
eGVjLAogICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBlcnJvcik7CiAg
ICAgfQogCi0gICAgZ2VuZXJpY1Vud2luZCgmdm0sIGV4ZWMpOworICAgIGdlbmVyaWNVbndpbmQo
dm0sIGV4ZWMpOwogICAgIEFTU0VSVCghIXZtLmNhbGxGcmFtZUZvckNhdGNoKTsKICAgICBBU1NF
UlQoISF2bS50YXJnZXRNYWNoaW5lUENGb3JUaHJvdyk7CiAgICAgLy8gRklYTUU6IFdlIGNvdWxk
IG1ha2UgdGhpcyBiZXR0ZXI6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9X
ZWJBc3NlbWJseUZ1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2
LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0yMTAsNyArMjEwLDcgQEAgV2FzbTo6SW5zdGFuY2UqIFdlYkFzc2Vt
Ymx5RnVuY3Rpb246OnByZQogCiBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4g
V2ViQXNzZW1ibHlGdW5jdGlvbjo6anNDYWxsRW50cnlwb2ludFNsb3coKQogewotICAgIFZNJiB2
bSA9ICp0aGlzLT52bSgpOworICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgQ0NhbGxIZWxw
ZXJzIGppdDsKIAogICAgIGNvbnN0IGF1dG8mIHNpZ25hdHVyZSA9IFdhc206OlNpZ25hdHVyZUlu
Zm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1lbW9yeUNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1lbW9yeUNvbnN0
cnVjdG9yLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvV2ViQXNzZW1ibHlNZW1vcnlDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC02NSw3ICs2NSw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnMK
IAogICAgIFdhc206OlBhZ2VDb3VudCBpbml0aWFsUGFnZUNvdW50OwogICAgIHsKLSAgICAgICAg
SWRlbnRpZmllciBpbml0aWFsID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJpbml0aWFs
Iik7CisgICAgICAgIElkZW50aWZpZXIgaW5pdGlhbCA9IElkZW50aWZpZXI6OmZyb21TdHJpbmco
dm0sICJpbml0aWFsIik7CiAgICAgICAgIEpTVmFsdWUgbWluU2l6ZVZhbHVlID0gbWVtb3J5RGVz
Y3JpcHRvci0+Z2V0KGV4ZWMsIGluaXRpYWwpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgICAgICB1aW50MzJfdCBzaXplID0g
dG9Ob25XcmFwcGluZ1VpbnQzMihleGVjLCBtaW5TaXplVmFsdWUpOwpAQCAtODEsNyArODEsNyBA
QCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zCiAgICAgewogICAgICAg
ICAvLyBJbiBXZWJJREwsICJwcmVzZW50IiBtZWFucyB0aGF0IFtbR2V0XV0gcmVzdWx0IGlzIHVu
ZGVmaW5lZCwgbm90IFtbSGFzUHJvcGVydHldXSByZXN1bHQuCiAgICAgICAgIC8vIGh0dHBzOi8v
aGV5Y2FtLmdpdGh1Yi5pby93ZWJpZGwvI2lkbC1kaWN0aW9uYXJpZXMKLSAgICAgICAgSWRlbnRp
ZmllciBtYXhpbXVtID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJtYXhpbXVtIik7Cisg
ICAgICAgIElkZW50aWZpZXIgbWF4aW11bSA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJt
YXhpbXVtIik7CiAgICAgICAgIEpTVmFsdWUgbWF4U2l6ZVZhbHVlID0gbWVtb3J5RGVzY3JpcHRv
ci0+Z2V0KGV4ZWMsIG1heGltdW0pOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgICAgICBpZiAoIW1heFNpemVWYWx1ZS5pc1Vu
ZGVmaW5lZCgpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3Nl
bWJseU1vZHVsZUNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24g
MjQ5MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1
bGVDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMTQsMTUgKzExNCwxNSBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5CiAKICAgICBjb25zdCBhdXRv
JiBpbXBvcnRzID0gbW9kdWxlLT5tb2R1bGVJbmZvcm1hdGlvbigpLmltcG9ydHM7CiAgICAgaWYg
KGltcG9ydHMuc2l6ZSgpKSB7Ci0gICAgICAgIElkZW50aWZpZXIgbW9kdWxlID0gSWRlbnRpZmll
cjo6ZnJvbVN0cmluZyhleGVjLCAibW9kdWxlIik7Ci0gICAgICAgIElkZW50aWZpZXIgbmFtZSA9
IElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgIm5hbWUiKTsKLSAgICAgICAgSWRlbnRpZmll
ciBraW5kID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCAia2luZCIpOworICAgICAgICBJ
ZGVudGlmaWVyIG1vZHVsZSA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJtb2R1bGUiKTsK
KyAgICAgICAgSWRlbnRpZmllciBuYW1lID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIm5h
bWUiKTsKKyAgICAgICAgSWRlbnRpZmllciBraW5kID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2
bSwgImtpbmQiKTsKICAgICAgICAgZm9yIChjb25zdCBXYXNtOjpJbXBvcnQmIGltcCA6IGltcG9y
dHMpIHsKICAgICAgICAgICAgIEpTT2JqZWN0KiBvYmogPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChl
eGVjKTsKICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsK
LSAgICAgICAgICAgIG9iai0+cHV0RGlyZWN0KHZtLCBtb2R1bGUsIGpzU3RyaW5nKGV4ZWMsIFN0
cmluZzo6ZnJvbVVURjgoaW1wLm1vZHVsZSkpKTsKLSAgICAgICAgICAgIG9iai0+cHV0RGlyZWN0
KHZtLCBuYW1lLCBqc1N0cmluZyhleGVjLCBTdHJpbmc6OmZyb21VVEY4KGltcC5maWVsZCkpKTsK
LSAgICAgICAgICAgIG9iai0+cHV0RGlyZWN0KHZtLCBraW5kLCBqc1N0cmluZyhleGVjLCBTdHJp
bmcobWFrZVN0cmluZyhpbXAua2luZCkpKSk7CisgICAgICAgICAgICBvYmotPnB1dERpcmVjdCh2
bSwgbW9kdWxlLCBqc1N0cmluZyh2bSwgU3RyaW5nOjpmcm9tVVRGOChpbXAubW9kdWxlKSkpOwor
ICAgICAgICAgICAgb2JqLT5wdXREaXJlY3Qodm0sIG5hbWUsIGpzU3RyaW5nKHZtLCBTdHJpbmc6
OmZyb21VVEY4KGltcC5maWVsZCkpKTsKKyAgICAgICAgICAgIG9iai0+cHV0RGlyZWN0KHZtLCBr
aW5kLCBqc1N0cmluZyh2bSwgU3RyaW5nKG1ha2VTdHJpbmcoaW1wLmtpbmQpKSkpOwogICAgICAg
ICAgICAgcmVzdWx0LT5wdXNoKGV4ZWMsIG9iaik7CiAgICAgICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgICAgIH0KQEAgLTE0NiwxMyArMTQ2LDEzIEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgd2ViQXNzZW1ibHkKIAogICAgIGNvbnN0IGF1
dG8mIGV4cG9ydHMgPSBtb2R1bGUtPm1vZHVsZUluZm9ybWF0aW9uKCkuZXhwb3J0czsKICAgICBp
ZiAoZXhwb3J0cy5zaXplKCkpIHsKLSAgICAgICAgSWRlbnRpZmllciBuYW1lID0gSWRlbnRpZmll
cjo6ZnJvbVN0cmluZyhleGVjLCAibmFtZSIpOwotICAgICAgICBJZGVudGlmaWVyIGtpbmQgPSBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJraW5kIik7CisgICAgICAgIElkZW50aWZpZXIg
bmFtZSA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJuYW1lIik7CisgICAgICAgIElkZW50
aWZpZXIga2luZCA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJraW5kIik7CiAgICAgICAg
IGZvciAoY29uc3QgV2FzbTo6RXhwb3J0JiBleHAgOiBleHBvcnRzKSB7CiAgICAgICAgICAgICBK
U09iamVjdCogb2JqID0gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYyk7CiAgICAgICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7Ci0gICAgICAgICAgICBvYmotPnB1
dERpcmVjdCh2bSwgbmFtZSwganNTdHJpbmcoZXhlYywgU3RyaW5nOjpmcm9tVVRGOChleHAuZmll
bGQpKSk7Ci0gICAgICAgICAgICBvYmotPnB1dERpcmVjdCh2bSwga2luZCwganNTdHJpbmcoZXhl
YywgU3RyaW5nKG1ha2VTdHJpbmcoZXhwLmtpbmQpKSkpOworICAgICAgICAgICAgb2JqLT5wdXRE
aXJlY3Qodm0sIG5hbWUsIGpzU3RyaW5nKHZtLCBTdHJpbmc6OmZyb21VVEY4KGV4cC5maWVsZCkp
KTsKKyAgICAgICAgICAgIG9iai0+cHV0RGlyZWN0KHZtLCBraW5kLCBqc1N0cmluZyh2bSwgU3Ry
aW5nKG1ha2VTdHJpbmcoZXhwLmtpbmQpKSkpOwogICAgICAgICAgICAgcmVzdWx0LT5wdXNoKGV4
ZWMsIG9iaik7CiAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsg
fSk7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFz
c2VtYmx5TW9kdWxlUmVjb3JkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAJKHJldmlzaW9uIDI0OTEyOCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3Jk
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzMsNyArNzMsNyBAQCB2b2lkIFdlYkFzc2VtYmx5TW9k
dWxlUmVjb3JkOjpmaW5pc2hDcmVhCiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZXhlYywgdm0p
OwogICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7CiAgICAgZm9yIChjb25zdCBhdXRv
JiBleHAgOiBtb2R1bGVJbmZvcm1hdGlvbi5leHBvcnRzKSB7Ci0gICAgICAgIElkZW50aWZpZXIg
ZmllbGQgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgU3RyaW5nOjpmcm9tVVRGOChleHAu
ZmllbGQpKTsKKyAgICAgICAgSWRlbnRpZmllciBmaWVsZCA9IElkZW50aWZpZXI6OmZyb21TdHJp
bmcodm0sIFN0cmluZzo6ZnJvbVVURjgoZXhwLmZpZWxkKSk7CiAgICAgICAgIGFkZEV4cG9ydEVu
dHJ5KEV4cG9ydEVudHJ5OjpjcmVhdGVMb2NhbChmaWVsZCwgZmllbGQpKTsKICAgICB9CiB9CkBA
IC0xMjYsOCArMTI2LDggQEAgdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6bGluayhFeGVj
UwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAgICAgICBJZGVudGlmaWVy
IG1vZHVsZU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgU3RyaW5nOjpmcm9tVVRG
OChpbXBvcnQubW9kdWxlKSk7Ci0gICAgICAgIElkZW50aWZpZXIgZmllbGROYW1lID0gSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZygmdm0sIFN0cmluZzo6ZnJvbVVURjgoaW1wb3J0LmZpZWxkKSk7Cisg
ICAgICAgIElkZW50aWZpZXIgbW9kdWxlTmFtZSA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0s
IFN0cmluZzo6ZnJvbVVURjgoaW1wb3J0Lm1vZHVsZSkpOworICAgICAgICBJZGVudGlmaWVyIGZp
ZWxkTmFtZSA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIFN0cmluZzo6ZnJvbVVURjgoaW1w
b3J0LmZpZWxkKSk7CiAgICAgICAgIEpTVmFsdWUgdmFsdWU7CiAgICAgICAgIGlmIChjcmVhdGlv
bk1vZGUgPT0gV2FzbTo6Q3JlYXRpb25Nb2RlOjpGcm9tSlMpIHsKICAgICAgICAgICAgIC8vIDEu
IExldCBvIGJlIHRoZSByZXN1bHRhbnQgdmFsdWUgb2YgcGVyZm9ybWluZyBHZXQoaW1wb3J0T2Jq
ZWN0LCBpLm1vZHVsZV9uYW1lKS4KQEAgLTQ0MSw3ICs0NDEsNyBAQCB2b2lkIFdlYkFzc2VtYmx5
TW9kdWxlUmVjb3JkOjpsaW5rKEV4ZWNTCiAgICAgICAgIGJvb2wgc2hvdWxkVGhyb3dSZWFkT25s
eUVycm9yID0gZmFsc2U7CiAgICAgICAgIGJvb2wgaWdub3JlUmVhZE9ubHlFcnJvcnMgPSB0cnVl
OwogICAgICAgICBib29sIHB1dFJlc3VsdCA9IGZhbHNlOwotICAgICAgICBzeW1ib2xUYWJsZVB1
dFRvdWNoV2F0Y2hwb2ludFNldChtb2R1bGVFbnZpcm9ubWVudCwgZXhlYywgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZygmdm0sIFN0cmluZzo6ZnJvbVVURjgoZXhwLmZpZWxkKSksIGV4cG9ydGVkVmFs
dWUsIHNob3VsZFRocm93UmVhZE9ubHlFcnJvciwgaWdub3JlUmVhZE9ubHlFcnJvcnMsIHB1dFJl
c3VsdCk7CisgICAgICAgIHN5bWJvbFRhYmxlUHV0VG91Y2hXYXRjaHBvaW50U2V0KG1vZHVsZUVu
dmlyb25tZW50LCBleGVjLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBTdHJpbmc6OmZyb21V
VEY4KGV4cC5maWVsZCkpLCBleHBvcnRlZFZhbHVlLCBzaG91bGRUaHJvd1JlYWRPbmx5RXJyb3Is
IGlnbm9yZVJlYWRPbmx5RXJyb3JzLCBwdXRSZXN1bHQpOwogICAgICAgICBzY29wZS5hc3NlcnRO
b0V4Y2VwdGlvbigpOwogICAgICAgICBSRUxFQVNFX0FTU0VSVChwdXRSZXN1bHQpOwogICAgIH0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5VGFibGVDb25z
dHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
V2ViQXNzZW1ibHlUYWJsZUNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlUYWJsZUNvbnN0cnVjdG9yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTYtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTYwLDcgKzYwLDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgY29ucwogCiAgICAgV2FzbTo6VGFibGVFbGVtZW50VHlwZSB0eXBlOwog
ICAgIHsKLSAgICAgICAgSWRlbnRpZmllciBlbGVtZW50SWRlbnQgPSBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKCZ2bSwgImVsZW1lbnQiKTsKKyAgICAgICAgSWRlbnRpZmllciBlbGVtZW50SWRlbnQg
PSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiZWxlbWVudCIpOwogICAgICAgICBKU1ZhbHVl
IGVsZW1lbnRWYWx1ZSA9IG1lbW9yeURlc2NyaXB0b3ItPmdldChleGVjLCBlbGVtZW50SWRlbnQp
OwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVl
KCkpOwogICAgICAgICBTdHJpbmcgZWxlbWVudFN0cmluZyA9IGVsZW1lbnRWYWx1ZS50b1dURlN0
cmluZyhleGVjKTsKQEAgLTczLDcgKzczLDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgY29ucwogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4
Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIldlYkFzc2Vt
Ymx5LlRhYmxlIGV4cGVjdHMgaXRzICdlbGVtZW50JyBmaWVsZCB0byBiZSB0aGUgc3RyaW5nICdm
dW5jcmVmJyBvciAnYW55cmVmJyJfcykpKTsKICAgICB9CiAKLSAgICBJZGVudGlmaWVyIGluaXRp
YWxJZGVudCA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiaW5pdGlhbCIpOworICAgIElk
ZW50aWZpZXIgaW5pdGlhbElkZW50ID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImluaXRp
YWwiKTsKICAgICBKU1ZhbHVlIGluaXRpYWxTaXplVmFsdWUgPSBtZW1vcnlEZXNjcmlwdG9yLT5n
ZXQoZXhlYywgaW5pdGlhbElkZW50KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2Nv
cGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIHVpbnQzMl90IGluaXRpYWwgPSB0b05vbldyYXBw
aW5nVWludDMyKGV4ZWMsIGluaXRpYWxTaXplVmFsdWUpOwpAQCAtODIsNyArODIsNyBAQCBzdGF0
aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zCiAgICAgLy8gSW4gV2ViSURMLCAi
cHJlc2VudCIgbWVhbnMgdGhhdCBbW0dldF1dIHJlc3VsdCBpcyB1bmRlZmluZWQsIG5vdCBbW0hh
c1Byb3BlcnR5XV0gcmVzdWx0LgogICAgIC8vIGh0dHBzOi8vaGV5Y2FtLmdpdGh1Yi5pby93ZWJp
ZGwvI2lkbC1kaWN0aW9uYXJpZXMKICAgICBPcHRpb25hbDx1aW50MzJfdD4gbWF4aW11bTsKLSAg
ICBJZGVudGlmaWVyIG1heGltdW1JZGVudCA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAi
bWF4aW11bSIpOworICAgIElkZW50aWZpZXIgbWF4aW11bUlkZW50ID0gSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyh2bSwgIm1heGltdW0iKTsKICAgICBKU1ZhbHVlIG1heFNpemVWYWx1ZSA9IG1lbW9y
eURlc2NyaXB0b3ItPmdldChleGVjLCBtYXhpbXVtSWRlbnQpOwogICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgaWYgKCFtYXhTaXplVmFs
dWUuaXNVbmRlZmluZWQoKSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjQ5MTI4KQorKysg
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTgyIEBA
CisyMDE5LTA4LTI3ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBS
ZWZhY3RvciB0byB1c2UgVk0mIGluc3RlYWQgb2YgVk0qIGF0IGFzIG1hbnkgcGxhY2VzIGFzIHBv
c3NpYmxlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjAxMTcyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
Tm8gbmV3IHRlc3RzLiAgQ292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAqIE1v
ZHVsZXMvZW5jcnlwdGVkbWVkaWEvbGVnYWN5L0xlZ2FjeUNETVNlc3Npb25DbGVhcktleS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDRE1TZXNzaW9uQ2xlYXJLZXk6OnVwZGF0ZSk6CisgICAgICAg
ICogTW9kdWxlcy9wbHVnaW5zL1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Lm1tOgorICAgICAg
ICAoV2ViQ29yZTo6UXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQ6OmVuc3VyZVJlcGxhY2VtZW50
U2NyaXB0SW5qZWN0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6UXVpY2tUaW1lUGx1Z2luUmVwbGFj
ZW1lbnQ6Omluc3RhbGxSZXBsYWNlbWVudCk6CisgICAgICAgICogYW5pbWF0aW9uL0tleWZyYW1l
RWZmZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnByb2Nlc3NLZXlmcmFtZUxpa2VPYmplY3Qp
OgorICAgICAgICAqIGJpbmRpbmdzL2pzL0dDQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpHQ0NvbnRyb2xsZXI6OmR1bXBIZWFwKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9JREJC
aW5kaW5nVXRpbGl0aWVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmdldCk6CisgICAgICAgIChX
ZWJDb3JlOjpzZXQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQ1NTUnVsZUxpc3RDdXN0b20u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNDU1NSdWxlTGlzdE93bmVyOjppc1JlYWNoYWJsZUZy
b21PcGFxdWVSb290cyk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNDdXN0b21FbGVtZW50UmVn
aXN0cnlDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNDdXN0b21FbGVtZW50UmVnaXN0
cnk6OmRlZmluZSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNDdXN0b21YUGF0aE5TUmVzb2x2
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNDdXN0b21YUGF0aE5TUmVzb2x2ZXI6Omxvb2t1
cE5hbWVzcGFjZVVSSSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01Db252ZXJ0UmVjb3Jk
Lmg6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01Db252ZXJ0U3RyaW5ncy5oOgorICAgICAg
ICAoV2ViQ29yZTo6SlNDb252ZXJ0ZXI8SURMRE9NU3RyaW5nPjo6Y29udmVydCk6CisgICAgICAg
IChXZWJDb3JlOjpKU0NvbnZlcnRlcjxJRExCeXRlU3RyaW5nPjo6Y29udmVydCk6CisgICAgICAg
IChXZWJDb3JlOjpKU0NvbnZlcnRlcjxJRExVU1ZTdHJpbmc+Ojpjb252ZXJ0KToKKyAgICAgICAg
KiBiaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpK
U0RPTVdpbmRvdzo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleCk6CisgICAgICAgIChXZWJDb3Jl
OjphZGRTY29wZWRDaGlsZHJlbkluZGV4ZXMpOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5k
b3c6OmRlZmluZU93blByb3BlcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OkRpYWxvZ0hhbmRsZXI6
OmRpYWxvZ0NyZWF0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6RGlhbG9nSGFuZGxlcjo6cmV0dXJu
VmFsdWUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3c6OnNldE9wZW5lcik6
CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvdzo6c2V0T3BlbkRhdGFiYXNlKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9KU0RPTVdpbmRvd1Byb3BlcnRpZXMuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SlNET01XaW5kb3dQcm9wZXJ0aWVzOjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KToK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RlcHJlY2F0ZWRDU1NPTVZhbHVlQ3VzdG9tLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkpTRGVwcmVjYXRlZENTU09NVmFsdWVPd25lcjo6aXNSZWFjaGFi
bGVGcm9tT3BhcXVlUm9vdHMpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5l
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0V2ZW50TGlzdGVuZXI6OmhhbmRsZUV2ZW50KToK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0ltYWdlRGF0YUN1c3RvbS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjp0b0pTTmV3bHlDcmVhdGVkKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0xhenlF
dmVudExpc3RlbmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTTGF6eUV2ZW50TGlzdGVuZXI6
OmluaXRpYWxpemVKU0Z1bmN0aW9uIGNvbnN0KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0xv
Y2F0aW9uQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTTG9jYXRpb246OmdldE93blBy
b3BlcnR5U2xvdEJ5SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SlNMb2NhdGlvbjo6cHV0QnlJ
bmRleCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNOb2RlTGlzdEN1c3RvbS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpKU05vZGVMaXN0T3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3Rz
KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1BsdWdpbkVsZW1lbnRGdW5jdGlvbnMuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6cGx1Z2luRWxlbWVudEN1c3RvbUdldENhbGxEYXRhKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9KU1JlbW90ZURPTVdpbmRvd0N1c3RvbS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpKU1JlbW90ZURPTVdpbmRvdzo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleCk6Cisg
ICAgICAgICogYmluZGluZ3MvanMvUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyOjppbnZv
a2UpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6bGlua0FuZEV2YWx1YXRlTW9kdWxlU2NyaXB0
SW5Xb3JsZCk6CisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0TW9kdWxlTG9hZGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdE1vZHVsZUxvYWRlcjo6cmVzb2x2ZSk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JpcHRNb2R1bGVMb2FkZXI6OmltcG9ydE1vZHVsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JpcHRNb2R1bGVMb2FkZXI6OmNyZWF0ZUltcG9ydE1ldGFQcm9wZXJ0aWVzKToK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q2xvbmVTZXJpYWxpemVyOjpDbG9uZVNlcmlhbGl6ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6Q2xvbmVTZXJpYWxpemVyOjp3cml0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDbG9u
ZVNlcmlhbGl6ZXI6OnNlcmlhbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpDbG9uZURlc2VyaWFs
aXplcjo6Q2FjaGVkU3RyaW5nOjpqc1N0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpDbG9uZURl
c2VyaWFsaXplcjo6cmVhZFRlcm1pbmFsKToKKyAgICAgICAgKFdlYkNvcmU6OkNsb25lRGVzZXJp
YWxpemVyOjpkZXNlcmlhbGl6ZSk6CisgICAgICAgICogYmluZGluZ3MvanMvV2ViQ29yZUJ1aWx0
aW5OYW1lcy5oOgorICAgICAgICAoV2ViQ29yZTo6V2ViQ29yZUJ1aWx0aW5OYW1lczo6V2ViQ29y
ZUJ1aWx0aW5OYW1lcyk6CisgICAgICAgICogYmluZGluZ3MvanMvV2ViQ29yZUpTQ2xpZW50RGF0
YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1ZNQ2xpZW50RGF0YTo6SlNWTUNsaWVudERhdGEp
OgorICAgICAgICAqIGJpbmRpbmdzL2pzL1dpbmRvd1Byb3h5LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OldpbmRvd1Byb3h5OjpjbGVhckpTV2luZG93UHJveGllc05vdE1hdGNoaW5nRE9NV2luZG93
KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbToKKyAgICAg
ICAgKEdlbmVyYXRlR2V0T3duUHJvcGVydHlTbG90QnlJbmRleCk6CisgICAgICAgIChHZW5lcmF0
ZUdldE93blByb3BlcnR5TmFtZXMpOgorICAgICAgICAoR2VuZXJhdGVQdXRCeUluZGV4KToKKyAg
ICAgICAgKEdlbmVyYXRlRGVsZXRlUHJvcGVydHlCeUluZGV4KToKKyAgICAgICAgKEdlbmVyYXRl
RGljdGlvbmFyeUltcGxlbWVudGF0aW9uQ29udGVudCk6CisgICAgICAgIChhZGRVbnNjb3BhYmxl
UHJvcGVydGllcyk6CisgICAgICAgIChHZW5lcmF0ZUltcGxlbWVudGF0aW9uKToKKyAgICAgICAg
KEdlbmVyYXRlQXR0cmlidXRlU2V0dGVyQm9keURlZmluaXRpb24pOgorICAgICAgICAoR2VuZXJh
dGVPcGVyYXRpb25EZWZpbml0aW9uKToKKyAgICAgICAgKEdlbmVyYXRlU2VyaWFsaXplckRlZmlu
aXRpb24pOgorICAgICAgICAoR2VuZXJhdGVDYWxsYmFja0ltcGxlbWVudGF0aW9uQ29udGVudCk6
CisgICAgICAgIChHZW5lcmF0ZUNvbnN0cnVjdG9ySGVscGVyTWV0aG9kcyk6CisgICAgICAgICog
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTSW50ZXJmYWNlTmFtZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpKU0ludGVyZmFjZU5hbWVDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMp
OgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU01hcExpa2UuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SlNNYXBMaWtlQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVz
KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNSZWFkT25seU1hcExpa2Uu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNSZWFkT25seU1hcExpa2VDb25zdHJ1Y3Rvcjo6aW5p
dGlhbGl6ZVByb3BlcnRpZXMpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RBY3RpdmVET01PYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0QWN0aXZl
RE9NT2JqZWN0Q29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKToKKyAgICAgICAgKiBi
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q0VSZWFjdGlvbnMuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SlNUZXN0Q0VSZWFjdGlvbnNDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRp
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0Q0VSZWFjdGlvbnNBdHRyaWJ1dGVXaXRo
Q0VSZWFjdGlvbnNTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0Q0VSZWFjdGlv
bnNSZWZsZWN0QXR0cmlidXRlV2l0aENFUmVhY3Rpb25zU2V0dGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OnNldEpTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXJBdHRyaWJ1dGVTZXR0ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0Q0VSZWFjdGlvbnNBdHRyaWJ1dGVXaXRoQ0VSZWFjdGlv
bnNOb3ROZWVkZWRTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0Q0VSZWFjdGlv
bnNSZWZsZWN0QXR0cmlidXRlV2l0aENFUmVhY3Rpb25zTm90TmVlZGVkU2V0dGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OnNldEpTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXJBdHRyaWJ1dGVOb3RO
ZWVkZWRTZXR0ZXIpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RD
RVJlYWN0aW9uc1N0cmluZ2lmaWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdENFUmVh
Y3Rpb25zU3RyaW5naWZpZXJDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllclZhbHVlU2V0dGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXJWYWx1
ZVdpdGhvdXRSZWFjdGlvbnNTZXR0ZXIpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RDYWxsVHJhY2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdENhbGxU
cmFjZXJDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6c2V0SlNUZXN0Q2FsbFRyYWNlclRlc3RBdHRyaWJ1dGVJbnRlcmZhY2VTZXR0ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0Q2FsbFRyYWNlclRlc3RBdHRyaWJ1dGVTcGVjaWZpZWRT
ZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0Q2FsbFRyYWNlclRlc3RBdHRyaWJ1
dGVXaXRoVmFyaWFudFNldHRlcik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdENhbGxiYWNrSW50ZXJmYWNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnRE
aWN0aW9uYXJ5PFRlc3RDYWxsYmFja0ludGVyZmFjZTo6RGljdGlvbmFyeT4pOgorICAgICAgICAo
V2ViQ29yZTo6SlNUZXN0Q2FsbGJhY2tJbnRlcmZhY2VDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVBy
b3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Q2FsbGJhY2tJbnRlcmZhY2U6OmNh
bGxiYWNrV2l0aE5vUGFyYW0pOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Q2FsbGJhY2tJbnRl
cmZhY2U6OmNhbGxiYWNrV2l0aEFycmF5UGFyYW0pOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0
Q2FsbGJhY2tJbnRlcmZhY2U6OmNhbGxiYWNrV2l0aFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZVBhcmFt
KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdENhbGxiYWNrSW50ZXJmYWNlOjpjYWxsYmFja1dp
dGhTdHJpbmdMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdENhbGxiYWNrSW50ZXJmYWNl
OjpjYWxsYmFja1dpdGhCb29sZWFuKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdENhbGxiYWNr
SW50ZXJmYWNlOjpjYWxsYmFja1JlcXVpcmVzVGhpc1RvUGFzcyk6CisgICAgICAgIChXZWJDb3Jl
OjpKU1Rlc3RDYWxsYmFja0ludGVyZmFjZTo6Y2FsbGJhY2tXaXRoQVJldHVyblZhbHVlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkpTVGVzdENhbGxiYWNrSW50ZXJmYWNlOjpjYWxsYmFja1RoYXRSZXRo
cm93c0V4Y2VwdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Q2FsbGJhY2tJbnRlcmZh
Y2U6OmNhbGxiYWNrVGhhdFNraXBzSW52b2tlQ2hlY2spOgorICAgICAgICAoV2ViQ29yZTo6SlNU
ZXN0Q2FsbGJhY2tJbnRlcmZhY2U6OmNhbGxiYWNrV2l0aFRoaXNPYmplY3QpOgorICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1
Y3Rvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25z
dHJ1Y3RvckNvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGllcyk6CisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERPTUpJVC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpKU1Rlc3RET01KSVRDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6anNUZXN0RE9NSklUUHJvdG90eXBlRnVuY3Rpb25HZXRBdHRyaWJ1dGVXaXRo
b3V0VHlwZUNoZWNrKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdERPTUpJVFByb3RvdHlwZUZ1
bmN0aW9uSXRlbVdpdGhvdXRUeXBlQ2hlY2spOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0RE9N
SklUUHJvdG90eXBlRnVuY3Rpb25IYXNBdHRyaWJ1dGVXaXRob3V0VHlwZUNoZWNrKToKKyAgICAg
ICAgKFdlYkNvcmU6OmpzVGVzdERPTUpJVFByb3RvdHlwZUZ1bmN0aW9uR2V0RWxlbWVudEJ5SWRX
aXRob3V0VHlwZUNoZWNrKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdERPTUpJVFByb3RvdHlw
ZUZ1bmN0aW9uR2V0RWxlbWVudHNCeU5hbWVXaXRob3V0VHlwZUNoZWNrKToKKyAgICAgICAgKiBi
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RW5hYmxlZEJ5U2V0dGluZy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpKU1Rlc3RFbmFibGVkQnlTZXR0aW5nQ29uc3RydWN0b3I6OmluaXRpYWxp
emVQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEVuYWJsZWRCeVNldHRpbmdQ
cm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdEVu
YWJsZWRCeVNldHRpbmdUZXN0U3ViT2JqRW5hYmxlZEJ5U2V0dGluZ0NvbnN0cnVjdG9yU2V0dGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdEVuYWJsZWRCeVNldHRpbmdFbmFibGVkQnlT
ZXR0aW5nQXR0cmlidXRlU2V0dGVyKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0RW5hYmxlZEZvckNvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0
RW5hYmxlZEZvckNvbnRleHRDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0RW5hYmxlZEZvckNvbnRleHRUZXN0U3ViT2JqRW5hYmxl
ZEZvckNvbnRleHRDb25zdHJ1Y3RvclNldHRlcik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdEV2ZW50Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Y29udmVydERpY3Rpb25hcnk8VGVzdEV2ZW50Q29uc3RydWN0b3I6OkluaXQ+KToKKyAgICAgICAg
KFdlYkNvcmU6OkpTVGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVBy
b3BlcnRpZXMpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVu
dFRhcmdldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RFdmVudFRhcmdldENvbnN0cnVj
dG9yOjppbml0aWFsaXplUHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RFdmVu
dFRhcmdldDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpK
U1Rlc3RFdmVudFRhcmdldDo6Z2V0T3duUHJvcGVydHlOYW1lcyk6CisgICAgICAgICogYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV4Y2VwdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpKU1Rlc3RFeGNlcHRpb25Db25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMpOgorICAg
ICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVDb25zdHJ1
Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0R2Vu
ZXJhdGVJc1JlYWNoYWJsZVByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAqIGJp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RHbG9iYWxPYmplY3QuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SlNUZXN0R2xvYmFsT2JqZWN0Q29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0
aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdEdsb2JhbE9iamVjdFJlZ3VsYXJBdHRy
aWJ1dGVTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0R2xvYmFsT2JqZWN0UHVi
bGljQW5kUHJpdmF0ZUF0dHJpYnV0ZVNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rl
c3RHbG9iYWxPYmplY3RQdWJsaWNBbmRQcml2YXRlQ29uZGl0aW9uYWxBdHRyaWJ1dGVTZXR0ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0R2xvYmFsT2JqZWN0RW5hYmxlZEF0UnVudGlt
ZUF0dHJpYnV0ZVNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RHbG9iYWxPYmpl
Y3RUZXN0Q0VSZWFjdGlvbnNDb25zdHJ1Y3RvclNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpz
ZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllckNvbnN0cnVjdG9y
U2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RDYWxs
VHJhY2VyQ29uc3RydWN0b3JTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0R2xv
YmFsT2JqZWN0VGVzdENhbGxiYWNrSW50ZXJmYWNlQ29uc3RydWN0b3JTZXR0ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdENsYXNzV2l0aEpTQnVpbHRpbkNv
bnN0cnVjdG9yQ29uc3RydWN0b3JTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0
R2xvYmFsT2JqZWN0VGVzdERPTUpJVENvbnN0cnVjdG9yU2V0dGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OnNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3REb21haW5TZWN1cml0eUNvbnN0cnVjdG9yU2V0
dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RFbmFibGVk
QnlTZXR0aW5nQ29uc3RydWN0b3JTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0
R2xvYmFsT2JqZWN0VGVzdEVuYWJsZWRGb3JDb250ZXh0Q29uc3RydWN0b3JTZXR0ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdEV2ZW50Q29uc3RydWN0b3JD
b25zdHJ1Y3RvclNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RHbG9iYWxPYmpl
Y3RUZXN0RXZlbnRUYXJnZXRDb25zdHJ1Y3RvclNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpz
ZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0RXhjZXB0aW9uQ29uc3RydWN0b3JTZXR0ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdEdlbmVyYXRlSXNSZWFjaGFi
bGVDb25zdHJ1Y3RvclNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RHbG9iYWxP
YmplY3RUZXN0R2xvYmFsT2JqZWN0Q29uc3RydWN0b3JTZXR0ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXJDb25z
dHJ1Y3RvclNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RHbG9iYWxPYmplY3RU
ZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uQ29uc3RydWN0b3JTZXR0ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdEluZGV4ZWRTZXR0ZXJXaXRo
SWRlbnRpZmllckNvbnN0cnVjdG9yU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVz
dEdsb2JhbE9iamVjdFRlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvclNldHRlcik6CisgICAgICAgIChX
ZWJDb3JlOjpzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2Nv
cmVDb25zdHJ1Y3RvclNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RHbG9iYWxP
YmplY3RUZXN0SXRlcmFibGVDb25zdHJ1Y3RvclNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpz
ZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JDb25zdHJ1Y3RvclNl
dHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TWFwTGlr
ZUNvbnN0cnVjdG9yU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdEdsb2JhbE9i
amVjdFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyQ29uc3RydWN0b3JTZXR0ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRl
ck5vSWRlbnRpZmllckNvbnN0cnVjdG9yU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpT
VGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlv
bkNvbnN0cnVjdG9yU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdEdsb2JhbE9i
amVjdFRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllckNvbnN0cnVjdG9yU2V0
dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZENv
bnN0cnVjdG9yQ29uc3RydWN0b3JTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0
R2xvYmFsT2JqZWN0QXVkaW9Db25zdHJ1Y3RvclNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpz
ZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVyQ29uc3RydWN0
b3JTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE5h
bWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9uQ29uc3RydWN0b3JTZXR0ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlm
aWVyQ29uc3RydWN0b3JTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0R2xvYmFs
T2JqZWN0VGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVkR2V0dGVyQ29uc3RydWN0b3JTZXR0ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkR2V0dGVy
Q2FsbFdpdGhDb25zdHJ1Y3RvclNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RH
bG9iYWxPYmplY3RUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXJDb25zdHJ1Y3RvclNldHRlcik6
CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRHZXR0ZXJX
aXRoSWRlbnRpZmllckNvbnN0cnVjdG9yU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpT
VGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllckNvbnN0cnVjdG9yU2V0
dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZFNl
dHRlclRocm93aW5nRXhjZXB0aW9uQ29uc3RydWN0b3JTZXR0ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXJDb25z
dHJ1Y3RvclNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RHbG9iYWxPYmplY3RU
ZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckNvbnN0cnVjdG9yU2V0dGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OnNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZFNldHRlcldpdGhJbmRl
eGVkR2V0dGVyQW5kU2V0dGVyQ29uc3RydWN0b3JTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnND
b25zdHJ1Y3RvclNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RHbG9iYWxPYmpl
Y3RUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNDb25zdHJ1Y3RvclNldHRl
cik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRTZXR0
ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5zQ29uc3RydWN0b3JT
ZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE92ZXJs
b2FkZWRDb25zdHJ1Y3RvcnNDb25zdHJ1Y3RvclNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpz
ZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5j
ZUNvbnN0cnVjdG9yU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdEdsb2JhbE9i
amVjdFRlc3RPdmVycmlkZUJ1aWx0aW5zQ29uc3RydWN0b3JTZXR0ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFBsdWdpbkludGVyZmFjZUNvbnN0cnVjdG9y
U2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RSZWFk
T25seU1hcExpa2VDb25zdHJ1Y3RvclNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rl
c3RHbG9iYWxPYmplY3RUZXN0UmVwb3J0RXh0cmFNZW1vcnlDb3N0Q29uc3RydWN0b3JTZXR0ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFNlcmlhbGl6YXRp
b25Db25zdHJ1Y3RvclNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RHbG9iYWxP
YmplY3RUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2VDb25zdHJ1Y3RvclNldHRl
cik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0U2VyaWFsaXph
dGlvbkluaGVyaXRDb25zdHJ1Y3RvclNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rl
c3RHbG9iYWxPYmplY3RUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbENvbnN0cnVjdG9yU2V0
dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RTZXJpYWxp
emVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDb25zdHJ1Y3RvclNldHRlcik6CisgICAgICAgIChXZWJD
b3JlOjpzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0U3RyaW5naWZpZXJDb25zdHJ1Y3RvclNldHRl
cik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0U3RyaW5naWZp
ZXJBbm9ueW1vdXNPcGVyYXRpb25Db25zdHJ1Y3RvclNldHRlcik6CisgICAgICAgIChXZWJDb3Jl
OjpzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvbkNvbnN0
cnVjdG9yU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdEdsb2JhbE9iamVjdFRl
c3RTdHJpbmdpZmllck9wZXJhdGlvbkltcGxlbWVudGVkQXNDb25zdHJ1Y3RvclNldHRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0U3RyaW5naWZpZXJPcGVy
YXRpb25OYW1lZFRvU3RyaW5nQ29uc3RydWN0b3JTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGVDb25z
dHJ1Y3RvclNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RHbG9iYWxPYmplY3RU
ZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGVDb25zdHJ1Y3RvclNldHRlcik6CisgICAg
ICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0VHlwZWRlZnNDb25zdHJ1Y3Rv
clNldHRlcik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4
ZWRTZXR0ZXJOb0lkZW50aWZpZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0SW5kZXhl
ZFNldHRlck5vSWRlbnRpZmllckNvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGllcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyOjpnZXRPd25Q
cm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpT
VGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbkNvbnN0cnVjdG9yOjppbml0aWFsaXpl
UHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dp
bmdFeGNlcHRpb246OmdldE93blByb3BlcnR5TmFtZXMpOgorICAgICAgICAqIGJpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyQ29uc3RydWN0
b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEluZGV4
ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6Z2V0T3duUHJvcGVydHlOYW1lcyk6CisgICAgICAgICog
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMp
OgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JJbXBsZW1l
bnRzU3RhdGljQXR0clNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RJbnRlcmZh
Y2VJbXBsZW1lbnRzU3RyMlNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RJbnRl
cmZhY2VJbXBsZW1lbnRzU3RyM1NldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RJ
bnRlcmZhY2VJbXBsZW1lbnRzTm9kZVNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rl
c3RJbnRlcmZhY2VDb25zdHJ1Y3RvclN1cHBsZW1lbnRhbFN0YXRpY0F0dHJTZXR0ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsU3RyMlNldHRlcik6
CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxTdHIzU2V0
dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbE5v
ZGVTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0SW50ZXJmYWNlUmVmbGVjdEF0
dHJpYnV0ZVNldHRlcik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVz
dEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0
aWVzKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SXRlcmFibGUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0SXRlcmFibGVDb25zdHJ1Y3Rvcjo6aW5pdGlh
bGl6ZVByb3BlcnRpZXMpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RKU0J1aWx0aW5Db25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RKU0J1
aWx0aW5Db25zdHJ1Y3RvckNvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGllcyk6CisgICAg
ICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvclRlc3RBdHRyaWJ1dGVS
V0N1c3RvbVNldHRlcik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TWVk
aWFRdWVyeUxpc3RMaXN0ZW5lckNvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGllcyk6Cisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNl
dHRlck5vSWRlbnRpZmllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZEFuZElu
ZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXJDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMp
OgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlm
aWVyOjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVz
dE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllcjo6Z2V0T3duUHJvcGVydHlOYW1lcyk6
CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZp
ZXI6OnB1dEJ5SW5kZXgpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbkNvbnN0
cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RO
YW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6Z2V0T3duUHJvcGVydHlTbG90
QnlJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJU
aHJvd2luZ0V4Y2VwdGlvbjo6Z2V0T3duUHJvcGVydHlOYW1lcyk6CisgICAgICAgIChXZWJDb3Jl
OjpKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6cHV0QnlJbmRl
eCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5k
ZXhlZFNldHRlcldpdGhJZGVudGlmaWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5h
bWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyQ29uc3RydWN0b3I6OmluaXRpYWxpemVQ
cm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRl
cldpdGhJZGVudGlmaWVyOjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KToKKyAgICAgICAgKFdl
YkNvcmU6OkpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyOjpnZXRPd25Q
cm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkQW5kSW5kZXhlZFNl
dHRlcldpdGhJZGVudGlmaWVyOjpwdXRCeUluZGV4KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpKU1Rlc3ROYW1lZENvbnN0cnVjdG9yQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVz
KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkQ29uc3RydWN0b3JOYW1lZENvbnN0cnVj
dG9yOjppbml0aWFsaXplUHJvcGVydGllcyk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE5hbWVkRGVsZXRlck5vSWRlbnRpZmllci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpKU1Rlc3ROYW1lZERlbGV0ZXJOb0lkZW50aWZpZXJDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6
ZVByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWREZWxldGVyTm9JZGVu
dGlmaWVyOjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkpT
VGVzdE5hbWVkRGVsZXRlck5vSWRlbnRpZmllcjo6Z2V0T3duUHJvcGVydHlOYW1lcyk6CisgICAg
ICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZERlbGV0ZXJOb0lkZW50aWZpZXI6OmRlbGV0ZVByb3Bl
cnR5QnlJbmRleCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5h
bWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVz
dE5hbWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9uQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9w
ZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkRGVsZXRlclRocm93aW5nRXhj
ZXB0aW9uOjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkpT
VGVzdE5hbWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9uOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKToK
KyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9uOjpk
ZWxldGVQcm9wZXJ0eUJ5SW5kZXgpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpKU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllckNvbnN0cnVjdG9yOjppbml0aWFsaXpl
UHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRl
bnRpZmllcjo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpK
U1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllcjo6Z2V0T3duUHJvcGVydHlOYW1lcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllcjo6ZGVsZXRl
UHJvcGVydHlCeUluZGV4KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SlNUZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXJDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6
ZVByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWREZWxldGVyV2l0aElu
ZGV4ZWRHZXR0ZXI6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgpOgorICAgICAgICAoV2ViQ29y
ZTo6SlNUZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXI6OmdldE93blByb3BlcnR5TmFt
ZXMpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEdldHRl
ckNhbGxXaXRoLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkR2V0dGVyQ2FsbFdp
dGhDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6
SlNUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleCk6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoOjpnZXRPd25Qcm9wZXJ0
eU5hbWVzKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRH
ZXR0ZXJOb0lkZW50aWZpZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRHZXR0
ZXJOb0lkZW50aWZpZXJDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXI6OmdldE93blByb3BlcnR5
U2xvdEJ5SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRHZXR0ZXJOb0lkZW50
aWZpZXI6OmdldE93blByb3BlcnR5TmFtZXMpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkpTVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXJDb25zdHJ1Y3Rvcjo6aW5pdGlh
bGl6ZVByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRHZXR0ZXJXaXRo
SWRlbnRpZmllcjo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleCk6CisgICAgICAgIChXZWJDb3Jl
OjpKU1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKToK
KyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJOb0lk
ZW50aWZpZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50
aWZpZXJDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6SlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXI6OmdldE93blByb3BlcnR5U2xvdEJ5SW5k
ZXgpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXI6Omdl
dE93blByb3BlcnR5TmFtZXMpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRTZXR0ZXJO
b0lkZW50aWZpZXI6OnB1dEJ5SW5kZXgpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkpTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb25Db25zdHJ1Y3Rvcjo6aW5p
dGlhbGl6ZVByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRTZXR0ZXJU
aHJvd2luZ0V4Y2VwdGlvbjo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleCk6CisgICAgICAgIChX
ZWJDb3JlOjpKU1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uOjpnZXRPd25Qcm9wZXJ0
eU5hbWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNl
cHRpb246OnB1dEJ5SW5kZXgpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpT
VGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXJDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3Bl
cnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmll
cjo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RO
YW1lZFNldHRlcldpdGhJZGVudGlmaWVyOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKToKKyAgICAgICAg
KFdlYkNvcmU6OkpTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXI6OnB1dEJ5SW5kZXgpOgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJ
bmRleGVkR2V0dGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkU2V0dGVyV2l0
aEluZGV4ZWRHZXR0ZXJDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlcjo6Z2V0T3duUHJv
cGVydHlTbG90QnlJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZFNldHRlcldp
dGhJbmRleGVkR2V0dGVyOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKFdlYkNvcmU6
OkpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXI6OnB1dEJ5SW5kZXgpOgorICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVk
R2V0dGVyQW5kU2V0dGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkU2V0dGVy
V2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXJDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRp
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRl
ckFuZFNldHRlcjo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleCk6CisgICAgICAgIChXZWJDb3Jl
OjpKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyOjpnZXRPd25Qcm9w
ZXJ0eU5hbWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4
ZWRHZXR0ZXJBbmRTZXR0ZXI6OnB1dEJ5SW5kZXgpOgorICAgICAgICAqIGJpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhPdmVycmlkZUJ1aWx0aW5zLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnNDb25z
dHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0
TmFtZWRTZXR0ZXJXaXRoT3ZlcnJpZGVCdWlsdGluczo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRl
eCk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZFNldHRlcldpdGhPdmVycmlkZUJ1aWx0
aW5zOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVk
U2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnM6OnB1dEJ5SW5kZXgpOgorICAgICAgICAqIGJpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVy
dGllcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdh
YmxlUHJvcGVydGllc0NvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGllcyk6CisgICAgICAg
IChXZWJDb3JlOjpKU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllczo6Z2V0
T3duUHJvcGVydHlTbG90QnlJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZFNl
dHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllczo6Z2V0T3duUHJvcGVydHlOYW1lcyk6CisgICAg
ICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllczo6
cHV0QnlJbmRleCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5h
bWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGlucy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVy
dGllc0FuZE92ZXJyaWRlQnVpbHRpbnNDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMp
OgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3Bl
cnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5zOjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KToKKyAg
ICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVz
QW5kT3ZlcnJpZGVCdWlsdGluczo6Z2V0T3duUHJvcGVydHlOYW1lcyk6CisgICAgICAgIChXZWJD
b3JlOjpKU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0FuZE92ZXJyaWRl
QnVpbHRpbnM6OnB1dEJ5SW5kZXgpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3ROb2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5vZGVDb25zdHJ1Y3Rv
cjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Tm9kZVBy
b3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0Tm9k
ZU5hbWVTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Tm9kZTo6c2VyaWFsaXplKToK
KyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OmNvbnZlcnREaWN0aW9uYXJ5PFRlc3RPYmo6OkRpY3Rpb25hcnk+KToKKyAg
ICAgICAgKFdlYkNvcmU6OmNvbnZlcnREaWN0aW9uYXJ5VG9KUyk6CisgICAgICAgIChXZWJDb3Jl
Ojpjb252ZXJ0RGljdGlvbmFyeTxUZXN0T2JqOjpEaWN0aW9uYXJ5VGhhdFNob3VsZE5vdFRvbGVy
YXRlTnVsbD4pOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydERpY3Rpb25hcnk8VGVzdE9iajo6
RGljdGlvbmFyeVRoYXRTaG91bGRUb2xlcmF0ZU51bGw+KToKKyAgICAgICAgKFdlYkNvcmU6OmNv
bnZlcnREaWN0aW9uYXJ5PEFsdGVybmF0ZURpY3Rpb25hcnlOYW1lPik6CisgICAgICAgIChXZWJD
b3JlOjpjb252ZXJ0RGljdGlvbmFyeTxUZXN0T2JqOjpQYXJlbnREaWN0aW9uYXJ5Pik6CisgICAg
ICAgIChXZWJDb3JlOjpjb252ZXJ0RGljdGlvbmFyeTxUZXN0T2JqOjpDaGlsZERpY3Rpb25hcnk+
KToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnREaWN0aW9uYXJ5PFRlc3RPYmo6OkNvbmRpdGlv
bmFsRGljdGlvbmFyeUE+KToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnREaWN0aW9uYXJ5PFRl
c3RPYmo6OkNvbmRpdGlvbmFsRGljdGlvbmFyeUI+KToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnZl
cnREaWN0aW9uYXJ5PFRlc3RPYmo6OkNvbmRpdGlvbmFsRGljdGlvbmFyeUM+KToKKyAgICAgICAg
KFdlYkNvcmU6OkpTVGVzdE9iakNvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGllcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1Rlc3RPYmpQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OkpTVGVzdE9iajo6Z2V0T3duUHJvcGVydHlOYW1lcyk6CisgICAgICAg
IChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpDb25zdHJ1Y3RvclN0YXRpY1N0cmluZ0F0dHJTZXR0ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqRW51bUF0dHJTZXR0ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqQnl0ZUF0dHJTZXR0ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6c2V0SlNUZXN0T2JqT2N0ZXRBdHRyU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpT
VGVzdE9ialNob3J0QXR0clNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpD
bGFtcGVkU2hvcnRBdHRyU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9iakVu
Zm9yY2VSYW5nZVNob3J0QXR0clNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RP
YmpVbnNpZ25lZFNob3J0QXR0clNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RP
YmpMb25nQXR0clNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpMb25nTG9u
Z0F0dHJTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqVW5zaWduZWRMb25n
TG9uZ0F0dHJTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqU3RyaW5nQXR0
clNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpVc3ZzdHJpbmdBdHRyU2V0
dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9ialRlc3RPYmpBdHRyU2V0dGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9ialRlc3ROdWxsYWJsZU9iakF0dHJTZXR0ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqTGVuaWVudFRlc3RPYmpBdHRyU2V0dGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9ialN0cmluZ0F0dHJUcmVhdGluZ051bGxB
c0VtcHR5U3RyaW5nU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9ialVzdnN0
cmluZ0F0dHJUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nU2V0dGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OnNldEpTVGVzdE9iakJ5dGVTdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZ1Nl
dHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpTdHJpbmdMb25nUmVjb3JkQXR0
clNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpVc3ZzdHJpbmdMb25nUmVj
b3JkQXR0clNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpTdHJpbmdPYmpS
ZWNvcmRBdHRyU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9ialN0cmluZ051
bGxhYmxlT2JqUmVjb3JkQXR0clNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RP
YmpEaWN0aW9uYXJ5QXR0clNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpO
dWxsYWJsZURpY3Rpb25hcnlBdHRyU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVz
dE9iakFubm90YXRlZFR5cGVJblVuaW9uQXR0clNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpz
ZXRKU1Rlc3RPYmpBbm5vdGF0ZWRUeXBlSW5TZXF1ZW5jZUF0dHJTZXR0ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6c2V0SlNUZXN0T2JqSW1wbGVtZW50YXRpb25FbnVtQXR0clNldHRlcik6CisgICAg
ICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpYTUxPYmpBdHRyU2V0dGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OnNldEpTVGVzdE9iakNyZWF0ZVNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRK
U1Rlc3RPYmpSZWZsZWN0ZWRTdHJpbmdBdHRyU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNl
dEpTVGVzdE9ialJlZmxlY3RlZFVTVlN0cmluZ0F0dHJTZXR0ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6c2V0SlNUZXN0T2JqUmVmbGVjdGVkSW50ZWdyYWxBdHRyU2V0dGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OnNldEpTVGVzdE9ialJlZmxlY3RlZFVuc2lnbmVkSW50ZWdyYWxBdHRyU2V0dGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9ialJlZmxlY3RlZEJvb2xlYW5BdHRyU2V0dGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9ialJlZmxlY3RlZFVSTEF0dHJTZXR0ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqUmVmbGVjdGVkVVNWVVJMQXR0clNldHRl
cik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21JbnRlZ3Jh
bEF0dHJTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqUmVmbGVjdGVkQ3Vz
dG9tQm9vbGVhbkF0dHJTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqUmVm
bGVjdGVkQ3VzdG9tVVJMQXR0clNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RP
YmpFbmFibGVkQXRSdW50aW1lQXR0cmlidXRlU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNl
dEpTVGVzdE9iakNvbnN0cnVjdG9yRW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZVN0YXRpY1NldHRl
cik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpUeXBlZEFycmF5QXR0clNldHRlcik6
CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpDdXN0b21BdHRyU2V0dGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OnNldEpTVGVzdE9iak9uZm9vU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OnNldEpTVGVzdE9iak9ud2Via2l0Zm9vU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpT
VGVzdE9ialdpdGhFeGVjU3RhdGVBdHRyaWJ1dGVTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
c2V0SlNUZXN0T2JqV2l0aENhbGxXaXRoQW5kU2V0dGVyQ2FsbFdpdGhBdHRyaWJ1dGVTZXR0ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHRBdHRyaWJ1dGVTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqV2l0aFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRFeGVjU3RhdGVBdHRyaWJ1dGVTZXR0ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRFeGVj
U3RhdGVXaXRoU3BhY2VzQXR0cmlidXRlU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpT
VGVzdE9iakNvbmRpdGlvbmFsQXR0cjFTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNU
ZXN0T2JqQ29uZGl0aW9uYWxBdHRyMlNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rl
c3RPYmpDb25kaXRpb25hbEF0dHIzU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVz
dE9iakNvbmRpdGlvbmFsQXR0cjRDb25zdHJ1Y3RvclNldHRlcik6CisgICAgICAgIChXZWJDb3Jl
OjpzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHI1Q29uc3RydWN0b3JTZXR0ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNkNvbnN0cnVjdG9yU2V0dGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9iakFueUF0dHJpYnV0ZVNldHRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpPYmplY3RBdHRyaWJ1dGVTZXR0ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqTXV0YWJsZVBvaW50U2V0dGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OnNldEpTVGVzdE9ialN0cmF3YmVycnlTZXR0ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6c2V0SlNUZXN0T2JqSWRTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2Jq
UmVwbGFjZWFibGVBdHRyaWJ1dGVTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0
T2JqTnVsbGFibGVMb25nU2V0dGFibGVBdHRyaWJ1dGVTZXR0ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6c2V0SlNUZXN0T2JqTnVsbGFibGVTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZVNldHRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpOdWxsYWJsZVVTVlN0cmluZ1NldHRhYmxlQXR0
cmlidXRlU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9iak51bGxhYmxlQnl0
ZVN0cmluZ1NldHRhYmxlQXR0cmlidXRlU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpT
VGVzdE9iakF0dHJpYnV0ZVdpdGhSZXNlcnZlZEVudW1UeXBlU2V0dGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OnNldEpTVGVzdE9ialB1dEZvcndhcmRzQXR0cmlidXRlU2V0dGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OnNldEpTVGVzdE9ialB1dEZvcndhcmRzTnVsbGFibGVBdHRyaWJ1dGVTZXR0ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqU3RyaW5naWZpZXJBdHRyaWJ1dGVTZXR0
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxseVJlYWRXcml0
ZUF0dHJpYnV0ZVNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpDb25kaXRp
b25hbEFuZENvbmRpdGlvbmFsbHlSZWFkV3JpdGVBdHRyaWJ1dGVTZXR0ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6c2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxseUV4cG9zZWRUb1dpbmRvd0F0dHJpYnV0
ZVNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpDb25kaXRpb25hbGx5RXhw
b3NlZFRvV29ya2VyQXR0cmlidXRlU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVz
dE9iakNvbmRpdGlvbmFsbHlFeHBvc2VkVG9XaW5kb3dBbmRXb3JrZXJBdHRyaWJ1dGVTZXR0ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0T2JqOjpzZXJpYWxpemUpOgorICAgICAgICAqIGJp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNDb25zdHJ1Y3Rv
cjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2VDb25z
dHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMpOgorICAgICAgICAqIGJpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RPdmVycmlkZUJ1aWx0aW5zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkpTVGVzdE92ZXJyaWRlQnVpbHRpbnNDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMp
OgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0T3ZlcnJpZGVCdWlsdGluczo6Z2V0T3duUHJvcGVy
dHlTbG90QnlJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RPdmVycmlkZUJ1aWx0aW5z
OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0UGx1Z2luSW50ZXJmYWNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFBs
dWdpbkludGVyZmFjZUNvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGllcyk6CisgICAgICAg
IChXZWJDb3JlOjpKU1Rlc3RQbHVnaW5JbnRlcmZhY2U6OmdldE93blByb3BlcnR5U2xvdEJ5SW5k
ZXgpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0UGx1Z2luSW50ZXJmYWNlOjpwdXRCeUluZGV4
KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0UHJvbWlzZVJlamVj
dGlvbkV2ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnREaWN0aW9uYXJ5PFRlc3RQ
cm9taXNlUmVqZWN0aW9uRXZlbnQ6OkluaXQ+KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFBy
b21pc2VSZWplY3Rpb25FdmVudENvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGllcyk6Cisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb24uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0U2VyaWFsaXphdGlvbkNvbnN0cnVjdG9yOjppbml0
aWFsaXplUHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RTZXJpYWxpemF0
aW9uRmlyc3RTdHJpbmdBdHRyaWJ1dGVTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNU
ZXN0U2VyaWFsaXphdGlvblNlY29uZExvbmdBdHRyaWJ1dGVTZXR0ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6c2V0SlNUZXN0U2VyaWFsaXphdGlvblRoaXJkVW5zZXJpYWxpemFibGVBdHRyaWJ1dGVT
ZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0U2VyaWFsaXphdGlvbkZvdXJ0aFVu
cmVzdHJpY3RlZERvdWJsZUF0dHJpYnV0ZVNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRK
U1Rlc3RTZXJpYWxpemF0aW9uRmlmdGhMb25nQXR0cmlidXRlU2V0dGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OnNldEpTVGVzdFNlcmlhbGl6YXRpb25TaXh0aFR5cGVkZWZBdHRyaWJ1dGVTZXR0ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0U2VyaWFsaXphdGlvblNldmVudGhEaXJlY3Rs
eVNlcmlhbGl6YWJsZUF0dHJpYnV0ZVNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rl
c3RTZXJpYWxpemF0aW9uRWlnaHRoSW5kaXJlY3RseUF0dHJpYnV0ZVNldHRlcik6CisgICAgICAg
IChXZWJDb3JlOjpzZXRKU1Rlc3RTZXJpYWxpemF0aW9uTmludGhPcHRpb25hbERpcmVjdGx5U2Vy
aWFsaXphYmxlQXR0cmlidXRlU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdFNl
cmlhbGl6YXRpb25UZW50aEZyb3plbkFycmF5QXR0cmlidXRlU2V0dGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OnNldEpTVGVzdFNlcmlhbGl6YXRpb25FbGV2ZW50aFNlcXVlbmNlQXR0cmlidXRlU2V0
dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdFNlcmlhbGl6YXRpb25Ud2VsZnRoSW50
ZXJmYWNlU2VxdWVuY2VBdHRyaWJ1dGVTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0
U2VyaWFsaXphdGlvbjo6c2VyaWFsaXplKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2UuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SlNUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2VDb25zdHJ1
Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdENvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVy
dGllcyk6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdElu
aGVyaXRMb25nQXR0cmlidXRlU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFNlcmlh
bGl6YXRpb25Jbmhlcml0OjpzZXJpYWxpemUpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxDb25zdHJ1Y3Rvcjo6aW5pdGlh
bGl6ZVByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0U2VyaWFsaXphdGlv
bkluaGVyaXRGaW5hbEZpbmFsTG9uZ0F0dHJpYnV0ZUZvb1NldHRlcik6CisgICAgICAgIChXZWJD
b3JlOjpzZXRKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsRmluYWxMb25nQXR0cmlidXRl
QmFyU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0
RmluYWw6OnNlcmlhbGl6ZSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDb25zdHJ1Y3Rvcjo6aW5pdGlh
bGl6ZVByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0U2VyaWFsaXplZFNj
cmlwdFZhbHVlSW50ZXJmYWNlVmFsdWVTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNU
ZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ2FjaGVkVmFsdWVTZXR0ZXIpOgorICAg
ICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdGFuZGFsb25lRGljdGlvbmFy
eS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0RGljdGlvbmFyeTxEaWN0aW9uYXJ5SW1w
bE5hbWU+KToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnREaWN0aW9uYXJ5VG9KUyk6CisgICAg
ICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkpTVGVzdFN0cmluZ2lmaWVyQ29uc3RydWN0b3I6OmluaXRpYWxpemVQ
cm9wZXJ0aWVzKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3Ry
aW5naWZpZXJBbm9ueW1vdXNPcGVyYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0
U3RyaW5naWZpZXJBbm9ueW1vdXNPcGVyYXRpb25Db25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3Bl
cnRpZXMpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdp
Zmllck5hbWVkT3BlcmF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFN0cmluZ2lm
aWVyTmFtZWRPcGVyYXRpb25Db25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMpOgorICAg
ICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllck9wZXJhdGlv
bkltcGxlbWVudGVkQXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0U3RyaW5naWZpZXJP
cGVyYXRpb25JbXBsZW1lbnRlZEFzQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKToK
KyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJPcGVy
YXRpb25OYW1lZFRvU3RyaW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFN0cmluZ2lm
aWVyT3BlcmF0aW9uTmFtZWRUb1N0cmluZ0NvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGll
cyk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVy
UmVhZE9ubHlBdHRyaWJ1dGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0U3RyaW5naWZp
ZXJSZWFkT25seUF0dHJpYnV0ZUNvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGllcyk6Cisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyUmVhZFdy
aXRlQXR0cmlidXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFN0cmluZ2lmaWVyUmVh
ZFdyaXRlQXR0cmlidXRlQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKToKKyAgICAg
ICAgKFdlYkNvcmU6OnNldEpTVGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmlidXRlSWRlbnRp
ZmllclNldHRlcik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFR5
cGVkZWZzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFR5cGVkZWZzQ29uc3RydWN0b3I6
OmluaXRpYWxpemVQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdFR5cGVk
ZWZzVW5zaWduZWRMb25nTG9uZ0F0dHJTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNU
ZXN0VHlwZWRlZnNTZXJpYWxpemVkU2NyaXB0VmFsdWVTZXR0ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6c2V0SlNUZXN0VHlwZWRlZnNBdHRyaWJ1dGVXaXRoQ2xhbXBTZXR0ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6c2V0SlNUZXN0VHlwZWRlZnNBdHRyaWJ1dGVXaXRoQ2xhbXBJblR5cGVkZWZTZXR0
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0VHlwZWRlZnNCdWZmZXJTb3VyY2VBdHRy
U2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdFR5cGVkZWZzRG9tVGltZVN0YW1w
QXR0clNldHRlcik6CisgICAgICAgICogYnJpZGdlL05QX2pzb2JqZWN0LmNwcDoKKyAgICAgICAg
KiBicmlkZ2UvYy9jX2luc3RhbmNlLmNwcDoKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OkNJbnN0
YW5jZTo6c3RyaW5nVmFsdWUgY29uc3QpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6Q0luc3Rh
bmNlOjpnZXRQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKiBicmlkZ2UvYy9jX3V0aWxpdHkuY3Bw
OgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6aWRlbnRpZmllckZyb21OUElkZW50aWZpZXIpOgor
ICAgICAgICAqIGJyaWRnZS9vYmpjL1dlYlNjcmlwdE9iamVjdC5tbToKKyAgICAgICAgKC1bV2Vi
U2NyaXB0T2JqZWN0IGNhbGxXZWJTY3JpcHRNZXRob2Q6d2l0aEFyZ3VtZW50czpdKToKKyAgICAg
ICAgKC1bV2ViU2NyaXB0T2JqZWN0IHNldFZhbHVlOmZvcktleTpdKToKKyAgICAgICAgKC1bV2Vi
U2NyaXB0T2JqZWN0IHZhbHVlRm9yS2V5Ol0pOgorICAgICAgICAoLVtXZWJTY3JpcHRPYmplY3Qg
cmVtb3ZlV2ViU2NyaXB0S2V5Ol0pOgorICAgICAgICAoLVtXZWJTY3JpcHRPYmplY3QgaGFzV2Vi
U2NyaXB0S2V5Ol0pOgorICAgICAgICAqIGJyaWRnZS9vYmpjL29iamNfcnVudGltZS5tbToKKyAg
ICAgICAgKEpTQzo6QmluZGluZ3M6Ok9iamNGYWxsYmFja09iamVjdEltcDo6ZGVmYXVsdFZhbHVl
KToKKyAgICAgICAgKiBicmlkZ2Uvb2JqYy9vYmpjX3V0aWxpdHkubW06CisgICAgICAgIChKU0M6
OkJpbmRpbmdzOjpjb252ZXJ0TlNTdHJpbmdUb1N0cmluZyk6CisgICAgICAgICogYnJpZGdlL3J1
bnRpbWVfYXJyYXkuY3BwOgorICAgICAgICAoSlNDOjpSdW50aW1lQXJyYXk6OmdldE93blByb3Bl
cnR5TmFtZXMpOgorICAgICAgICAqIGNvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25Q
YXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OmxvYWRUcmln
Z2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpsb2FkQWN0aW9uKToK
KyAgICAgICAgKiBjcnlwdG8vU3VidGxlQ3J5cHRvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om5v
cm1hbGl6ZUNyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnMpOgorICAgICAgICAqIGRvbWppdC9ET01K
SVRIZWxwZXJzLmg6CisgICAgICAgIChXZWJDb3JlOjpET01KSVQ6OnRvV3JhcHBlclNsb3cpOgor
ICAgICAgICAqIGh0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpj
b250cm9sbGVySlNWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50Ojp1
cGRhdGVDYXB0aW9uQ29udGFpbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1l
bnQ6OmVuc3VyZU1lZGlhQ29udHJvbHNJbmplY3RlZFNjcmlwdCk6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MTWVkaWFFbGVtZW50OjpzZXRDb250cm9sbGVySlNQcm9wZXJ0eSk6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpkaWRBZGRVc2VyQWdlbnRTaGFkb3dSb290KToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OnVwZGF0ZU1lZGlhQ29udHJvbHNBZnRl
clByZXNlbnRhdGlvbk1vZGVDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxl
bWVudDo6Z2V0Q3VycmVudE1lZGlhQ29udHJvbHNTdGF0dXMpOgorICAgICAgICAqIGh0bWwvSFRN
TFBsdWdJbkltYWdlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MUGx1Z0luSW1h
Z2VFbGVtZW50OjpkaWRBZGRVc2VyQWdlbnRTaGFkb3dSb290KToKKyAgICAgICAgKiBpbnNwZWN0
b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckZyb250ZW5kSG9zdDo6YWRkU2VsZlRvR2xvYmFsT2JqZWN0SW5Xb3JsZCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OnNob3dDb250ZXh0TWVudSk6CisgICAgICAg
ICogaW5zcGVjdG9yL1dlYkluamVjdGVkU2NyaXB0SG9zdC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJJbmplY3RlZFNjcmlwdEhvc3Q6OnN1YnR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6Y29u
c3RydWN0SW50ZXJuYWxQcm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpvYmplY3RGb3JQYXlt
ZW50T3B0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpvYmplY3RGb3JQYXltZW50Q3VycmVuY3lB
bW91bnQpOgorICAgICAgICAoV2ViQ29yZTo6b2JqZWN0Rm9yUGF5bWVudEl0ZW0pOgorICAgICAg
ICAoV2ViQ29yZTo6b2JqZWN0Rm9yUGF5bWVudFNoaXBwaW5nT3B0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6Om9iamVjdEZvclBheW1lbnREZXRhaWxzTW9kaWZpZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6b2JqZWN0Rm9yUGF5bWVudERldGFpbHMpOgorICAgICAgICAoV2ViQ29yZTo6anNTdHJpbmdG
b3JQYXltZW50UmVxdWVzdFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkluamVjdGVkU2Ny
aXB0SG9zdDo6Z2V0SW50ZXJuYWxQcm9wZXJ0aWVzKToKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdl
bnRzL0luc3BlY3RvckNhbnZhc0FnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckNhbnZhc0FnZW50Ojpjb25zb2xlU3RhcnRSZWNvcmRpbmdDYW52YXMpOgorICAgICAgICAqIGlu
c3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yRXZlbnRMaXN0ZW5lcik6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6c2NyaXB0VmFsdWVBc05vZGUpOgorICAgICAg
ICAqIGluc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlQXVkaXRBZ2VudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpQYWdlQXVkaXRBZ2VudDo6cG9wdWxhdGVBdWRpdE9iamVjdCk6CisgICAgICAgICog
cGFnZS9QYWdlQ29uc29sZUNsaWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdlQ29uc29s
ZUNsaWVudDo6c2NyZWVuc2hvdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ3VzdG9t
UGFpbnRJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21QYWludEltYWdlOjpkb0N1
c3RvbVBhaW50KToKKyAgICAgICAgKiB0ZXN0aW5nL2pzL1dlYkNvcmVUZXN0U3VwcG9ydC5jcHA6
CisgICAgICAgIChXZWJDb3JlVGVzdFN1cHBvcnQ6OmluamVjdEludGVybmFsc09iamVjdCk6Cisg
ICAgICAgIChXZWJDb3JlVGVzdFN1cHBvcnQ6OnNldHVwTmV3bHlDcmVhdGVkU2VydmljZVdvcmtl
cik6CisgICAgICAgICogd29ya2xldHMvUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UGFpbnRXb3JrbGV0R2xvYmFsU2NvcGU6OnJlZ2lzdGVyUGFpbnQpOgor
CiAyMDE5LTA4LTI2ICBEZXZpbiBSb3Vzc28gIDxkcm91c3NvQGFwcGxlLmNvbT4KIAogICAgICAg
ICBXZWIgSW5zcGVjdG9yOiB1bmlmeSBhZ2VudCBjb21tYW5kIGVycm9yIG1lc3NhZ2VzCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL2xlZ2FjeS9MZWdhY3lDRE1T
ZXNzaW9uQ2xlYXJLZXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
ZW5jcnlwdGVkbWVkaWEvbGVnYWN5L0xlZ2FjeUNETVNlc3Npb25DbGVhcktleS5jcHAJKHJldmlz
aW9uIDI0OTEyOCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW5jcnlwdGVkbWVkaWEvbGVn
YWN5L0xlZ2FjeUNETVNlc3Npb25DbGVhcktleS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqIAogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEwOSw3ICsx
MDksNyBAQCBib29sIENETVNlc3Npb25DbGVhcktleTo6dXBkYXRlKFVpbnQ4QXJyCiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogCi0gICAgICAgIGF1dG8ga2V5c0FycmF5VmFsdWUgPSBh
c09iamVjdChrZXlzRGF0YVZhbHVlKS0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zygmc3RhdGUsICJrZXlzIikpOworICAgICAgICBhdXRvIGtleXNBcnJheVZhbHVlID0gYXNPYmpl
Y3Qoa2V5c0RhdGFWYWx1ZSktPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0s
ICJrZXlzIikpOwogICAgICAgICBpZiAoc2NvcGUuZXhjZXB0aW9uKCkgfHwgIWlzSlNBcnJheShr
ZXlzQXJyYXlWYWx1ZSkpIHsKICAgICAgICAgICAgIExPRyhNZWRpYSwgIkNETVNlc3Npb25DbGVh
cktleTo6dXBkYXRlKCVwKSAtIGZhaWxlZDoga2V5cyBhcnJheSBtaXNzaW5nIG9yIGVtcHR5Iiwg
dGhpcyk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTEzMyw4ICsxMzMsOCBAQCBib29sIENETVNl
c3Npb25DbGVhcktleTo6dXBkYXRlKFVpbnQ4QXJyCiAKICAgICAgICAgICAgIGF1dG8ga2V5T2Jq
ZWN0ID0gYXNPYmplY3Qoa2V5VmFsdWUpOwogCi0gICAgICAgICAgICBhdXRvIGdldFN0cmluZ1By
b3BlcnR5ID0gWyZzY29wZSwgJnN0YXRlLCAma2V5T2JqZWN0XShjb25zdCBjaGFyKiBuYW1lKSAt
PiBTdHJpbmcgewotICAgICAgICAgICAgICAgIGF1dG8gdmFsdWUgPSBrZXlPYmplY3QtPmdldCgm
c3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCBuYW1lKSk7CisgICAgICAgICAg
ICBhdXRvIGdldFN0cmluZ1Byb3BlcnR5ID0gWyZzY29wZSwgJnN0YXRlLCAma2V5T2JqZWN0LCAm
dm1dKGNvbnN0IGNoYXIqIG5hbWUpIC0+IFN0cmluZyB7CisgICAgICAgICAgICAgICAgYXV0byB2
YWx1ZSA9IGtleU9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwg
bmFtZSkpOwogICAgICAgICAgICAgICAgIGlmIChzY29wZS5leGNlcHRpb24oKSB8fCAhdmFsdWUu
aXNTdHJpbmcoKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKIApJbmRleDogU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9wbHVnaW5zL1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Lm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGx1Z2lucy9RdWlja1RpbWVQ
bHVnaW5SZXBsYWNlbWVudC5tbQkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9wbHVnaW5zL1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Lm1tCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMTU0LDcgKzE1NCw3IEBAIGJvb2wgUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQ6
OmVuc3VyZVIKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CiAgICAg
SlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKICAgICAK
LSAgICBKU0M6OkpTVmFsdWUgcmVwbGFjZW1lbnRGdW5jdGlvbiA9IGdsb2JhbE9iamVjdC0+Z2V0
KGV4ZWMsIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCAiY3JlYXRlUGx1Z2luUmVw
bGFjZW1lbnQiKSk7CisgICAgSlNDOjpKU1ZhbHVlIHJlcGxhY2VtZW50RnVuY3Rpb24gPSBnbG9i
YWxPYmplY3QtPmdldChleGVjLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJjcmVh
dGVQbHVnaW5SZXBsYWNlbWVudCIpKTsKICAgICBpZiAocmVwbGFjZW1lbnRGdW5jdGlvbi5pc0Z1
bmN0aW9uKHZtKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgCkBAIC0xODUsNyArMTg1LDcg
QEAgYm9vbCBRdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudDo6aW5zdGFsbAogICAgIEpTQzo6RXhl
Y1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CiAKICAgICAvLyBMb29r
dXAgdGhlICJjcmVhdGVQbHVnaW5SZXBsYWNlbWVudCIgZnVuY3Rpb24uCi0gICAgSlNDOjpKU1Zh
bHVlIHJlcGxhY2VtZW50RnVuY3Rpb24gPSBnbG9iYWxPYmplY3QtPmdldChleGVjLCBKU0M6Oklk
ZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgImNyZWF0ZVBsdWdpblJlcGxhY2VtZW50IikpOwor
ICAgIEpTQzo6SlNWYWx1ZSByZXBsYWNlbWVudEZ1bmN0aW9uID0gZ2xvYmFsT2JqZWN0LT5nZXQo
ZXhlYywgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiY3JlYXRlUGx1Z2luUmVwbGFj
ZW1lbnQiKSk7CiAgICAgaWYgKHJlcGxhY2VtZW50RnVuY3Rpb24uaXNVbmRlZmluZWRPck51bGwo
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIEpTQzo6SlNPYmplY3QqIHJlcGxhY2VtZW50
T2JqZWN0ID0gcmVwbGFjZW1lbnRGdW5jdGlvbi50b09iamVjdChleGVjKTsKQEAgLTIwOSw3ICsy
MDksNyBAQCBib29sIFF1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50OjppbnN0YWxsCiAgICAgfQog
CiAgICAgLy8gR2V0IHRoZSA8dmlkZW8+IGNyZWF0ZWQgdG8gcmVwbGFjZSB0aGUgcGx1Zy1pbi4K
LSAgICBKU0M6OkpTVmFsdWUgdmFsdWUgPSByZXBsYWNlbWVudC5nZXQoZXhlYywgSlNDOjpJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJ2aWRlbyIpKTsKKyAgICBKU0M6OkpTVmFsdWUgdmFs
dWUgPSByZXBsYWNlbWVudC5nZXQoZXhlYywgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZt
LCAidmlkZW8iKSk7CiAgICAgaWYgKCFzY29wZS5leGNlcHRpb24oKSAmJiAhdmFsdWUuaXNVbmRl
ZmluZWRPck51bGwoKSkKICAgICAgICAgbV9tZWRpYUVsZW1lbnQgPSBKU0hUTUxWaWRlb0VsZW1l
bnQ6OnRvV3JhcHBlZCh2bSwgdmFsdWUpOwogCkBAIC0yMjAsNyArMjIwLDcgQEAgYm9vbCBRdWlj
a1RpbWVQbHVnaW5SZXBsYWNlbWVudDo6aW5zdGFsbAogICAgIH0KIAogICAgIC8vIEdldCB0aGUg
c2NyaXB0aW5nIGludGVyZmFjZS4KLSAgICB2YWx1ZSA9IHJlcGxhY2VtZW50LmdldChleGVjLCBK
U0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgInNjcmlwdE9iamVjdCIpKTsKKyAgICB2
YWx1ZSA9IHJlcGxhY2VtZW50LmdldChleGVjLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmco
dm0sICJzY3JpcHRPYmplY3QiKSk7CiAgICAgaWYgKCFzY29wZS5leGNlcHRpb24oKSAmJiAhdmFs
dWUuaXNVbmRlZmluZWRPck51bGwoKSkgewogICAgICAgICBtX3NjcmlwdE9iamVjdCA9IHZhbHVl
LnRvT2JqZWN0KGV4ZWMpOwogICAgICAgICBzY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0tleWZyYW1lRWZmZWN0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vS2V5ZnJhbWVFZmZlY3QuY3BwCShyZXZpc2lv
biAyNDkxMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vS2V5ZnJhbWVFZmZlY3QuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
Ny0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMjA4LDcgKzIwOCw3IEBAIHN0YXRpYyBpbmxpbmUgRXhjZXB0
aW9uT3I8S2V5ZnJhbWVFZmZlY3QKICAgICAvLyAgICAgICBuYW1lIHRvIElETCBhdHRyaWJ1dGUg
bmFtZSBhbGdvcml0aG0uCiAKICAgICAvLyAzLiBMZXQgaW5wdXQgcHJvcGVydGllcyBiZSB0aGUg
cmVzdWx0IG9mIGNhbGxpbmcgdGhlIEVudW1lcmFibGVPd25OYW1lcyBvcGVyYXRpb24gd2l0aCBr
ZXlmcmFtZSBpbnB1dCBhcyB0aGUgb2JqZWN0LgotICAgIFByb3BlcnR5TmFtZUFycmF5IGlucHV0
UHJvcGVydGllcygmdm0sIFByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3MsIFByaXZhdGVTeW1ib2xN
b2RlOjpFeGNsdWRlKTsKKyAgICBQcm9wZXJ0eU5hbWVBcnJheSBpbnB1dFByb3BlcnRpZXModm0s
IFByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3MsIFByaXZhdGVTeW1ib2xNb2RlOjpFeGNsdWRlKTsK
ICAgICBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhrZXlmcmFtZXNJbnB1dC5nZXQoKSwg
JnN0YXRlLCBpbnB1dFByb3BlcnRpZXMsIEVudW1lcmF0aW9uTW9kZSgpKTsKIAogICAgIC8vIDQu
IE1ha2UgdXAgYSBuZXcgbGlzdCBhbmltYXRpb24gcHJvcGVydGllcyB0aGF0IGNvbnNpc3RzIG9m
IGFsbCBvZiB0aGUgcHJvcGVydGllcyB0aGF0IGFyZSBpbiBib3RoIGlucHV0IHByb3BlcnRpZXMg
YW5kIGFuaW1hdGFibGUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0dDQ29udHJv
bGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvR0NDb250
cm9sbGVyLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvR0NDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDctMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE1MCw3ICsxNTAsNyBAQCB2
b2lkIEdDQ29udHJvbGxlcjo6ZHVtcEhlYXAoKQogICAgIFZNJiB2bSA9IGNvbW1vblZNKCk7CiAg
ICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOwogCi0gICAgc2FuaXRpemVTdGFja0ZvclZNKCZ2bSk7
CisgICAgc2FuaXRpemVTdGFja0ZvclZNKHZtKTsKIAogICAgIFN0cmluZyBqc29uRGF0YTsKICAg
ICB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9JREJCaW5kaW5n
VXRpbGl0aWVzLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSURCQmluZGluZ1V0aWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3
IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTIgTWljaGFlbCBQcnVldHQgPG1pY2hhZWxANjhr
Lm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSwgMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY2
LDkgKzY2LDkgQEAgc3RhdGljIGJvb2wgZ2V0KEV4ZWNTdGF0ZSYgZXhlYywgSlNWYWx1ZQogICAg
IGlmICghb2JqZWN0LmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIFZN
JiB2bSA9IGV4ZWMudm0oKTsKICAgICBhdXRvKiBvYmogPSBhc09iamVjdChvYmplY3QpOwotICAg
IElkZW50aWZpZXIgaWRlbnRpZmllciA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJmV4ZWMudm0o
KSwga2V5UGF0aEVsZW1lbnQpOwotICAgIGF1dG8mIHZtID0gZXhlYy52bSgpOworICAgIElkZW50
aWZpZXIgaWRlbnRpZmllciA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIGtleVBhdGhFbGVt
ZW50KTsKICAgICBpZiAob2JqLT5pbmhlcml0czxKU0FycmF5Pih2bSkgJiYga2V5UGF0aEVsZW1l
bnQgPT0gImxlbmd0aCIpIHsKICAgICAgICAgcmVzdWx0ID0gb2JqLT5nZXQoJmV4ZWMsIGlkZW50
aWZpZXIpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTc5LDEzICs3OSwxMyBAQCBzdGF0aWMg
Ym9vbCBnZXQoRXhlY1N0YXRlJiBleGVjLCBKU1ZhbHVlCiAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICAgICAgfQogICAgICAgICBpZiAoa2V5UGF0aEVsZW1lbnQgPT0gInR5cGUiKSB7Ci0g
ICAgICAgICAgICByZXN1bHQgPSBqc1N0cmluZygmdm0sIGpzQ2FzdDxKU0Jsb2IqPihvYmopLT53
cmFwcGVkKCkudHlwZSgpKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IGpzU3RyaW5nKHZtLCBqc0Nh
c3Q8SlNCbG9iKj4ob2JqKS0+d3JhcHBlZCgpLnR5cGUoKSk7CiAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICAgICAgfQogICAgIH0KICAgICBpZiAob2JqLT5pbmhlcml0czxKU0ZpbGU+KHZt
KSkgewogICAgICAgICBpZiAoa2V5UGF0aEVsZW1lbnQgPT0gIm5hbWUiKSB7Ci0gICAgICAgICAg
ICByZXN1bHQgPSBqc1N0cmluZygmdm0sIGpzQ2FzdDxKU0ZpbGUqPihvYmopLT53cmFwcGVkKCku
bmFtZSgpKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IGpzU3RyaW5nKHZtLCBqc0Nhc3Q8SlNGaWxl
Kj4ob2JqKS0+d3JhcHBlZCgpLm5hbWUoKSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICAgICAgfQogICAgICAgICBpZiAoa2V5UGF0aEVsZW1lbnQgPT0gImxhc3RNb2RpZmllZCIpIHsK
QEAgLTExOCw4ICsxMTgsOSBAQCBzdGF0aWMgYm9vbCBzZXQoRXhlY1N0YXRlJiBleGVjLCBKU1Zh
bHVlCiB7CiAgICAgaWYgKCFjYW5TZXQob2JqZWN0LCBrZXlQYXRoRWxlbWVudCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBJZGVudGlmaWVyIGlkZW50aWZpZXIgPSBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKCZleGVjLnZtKCksIGtleVBhdGhFbGVtZW50KTsKLSAgICBhc09iamVjdChvYmpl
Y3QpLT5wdXREaXJlY3QoZXhlYy52bSgpLCBpZGVudGlmaWVyLCBqc1ZhbHVlKTsKKyAgICBWTSYg
dm0gPSBleGVjLnZtKCk7CisgICAgSWRlbnRpZmllciBpZGVudGlmaWVyID0gSWRlbnRpZmllcjo6
ZnJvbVN0cmluZyh2bSwga2V5UGF0aEVsZW1lbnQpOworICAgIGFzT2JqZWN0KG9iamVjdCktPnB1
dERpcmVjdCh2bSwgaWRlbnRpZmllciwganNWYWx1ZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NTUnVsZUxpc3RDdXN0b20uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NTUnVsZUxpc3RD
dXN0b20uY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0NTU1J1bGVMaXN0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHQgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodCByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzksNyArMzksNyBAQCB1c2lu
ZyBuYW1lc3BhY2UgSlNDOwogYm9vbCBKU0NTU1J1bGVMaXN0T3duZXI6OmlzUmVhY2hhYmxlRnJv
bU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgU2xv
dFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAgSlNDU1NSdWxl
TGlzdCoganNDU1NSdWxlTGlzdCA9IGpzQ2FzdDxKU0NTU1J1bGVMaXN0Kj4oaGFuZGxlLnNsb3Qo
KS0+YXNDZWxsKCkpOwotICAgIGlmICghanNDU1NSdWxlTGlzdC0+aGFzQ3VzdG9tUHJvcGVydGll
cygqanNDU1NSdWxlTGlzdC0+dm0oKSkpCisgICAgaWYgKCFqc0NTU1J1bGVMaXN0LT5oYXNDdXN0
b21Qcm9wZXJ0aWVzKGpzQ1NTUnVsZUxpc3QtPnZtKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKICAgICBpZiAoQ1NTU3R5bGVTaGVldCogc3R5bGVTaGVldCA9IGpzQ1NTUnVsZUxpc3QtPndy
YXBwZWQoKS5zdHlsZVNoZWV0KCkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbUVsZW1lbnRSZWdpc3RyeUN1c3RvbS5jcHAJKHJl
dmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tRWxl
bWVudFJlZ2lzdHJ5Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEyOSwyNSArMTI5LDI1
IEBAIEpTVmFsdWUgSlNDdXN0b21FbGVtZW50UmVnaXN0cnk6OmRlZmluZSgKICAgICBRdWFsaWZp
ZWROYW1lIG5hbWUobnVsbEF0b20oKSwgbG9jYWxOYW1lLCBIVE1MTmFtZXM6OnhodG1sTmFtZXNw
YWNlVVJJKTsKICAgICBhdXRvIGVsZW1lbnRJbnRlcmZhY2UgPSBKU0N1c3RvbUVsZW1lbnRJbnRl
cmZhY2U6OmNyZWF0ZShuYW1lLCBjb25zdHJ1Y3RvciwgZ2xvYmFsT2JqZWN0KCkpOwogCi0gICAg
YXV0byogY29ubmVjdGVkQ2FsbGJhY2sgPSBnZXRDdXN0b21FbGVtZW50Q2FsbGJhY2soc3RhdGUs
IHByb3RvdHlwZU9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJjb25uZWN0ZWRD
YWxsYmFjayIpKTsKKyAgICBhdXRvKiBjb25uZWN0ZWRDYWxsYmFjayA9IGdldEN1c3RvbUVsZW1l
bnRDYWxsYmFjayhzdGF0ZSwgcHJvdG90eXBlT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KHZtLCAiY29ubmVjdGVkQ2FsbGJhY2siKSk7CiAgICAgaWYgKGNvbm5lY3RlZENhbGxiYWNrKQog
ICAgICAgICBlbGVtZW50SW50ZXJmYWNlLT5zZXRDb25uZWN0ZWRDYWxsYmFjayhjb25uZWN0ZWRD
YWxsYmFjayk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZSgpKTsKIAot
ICAgIGF1dG8qIGRpc2Nvbm5lY3RlZENhbGxiYWNrID0gZ2V0Q3VzdG9tRWxlbWVudENhbGxiYWNr
KHN0YXRlLCBwcm90b3R5cGVPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiZGlz
Y29ubmVjdGVkQ2FsbGJhY2siKSk7CisgICAgYXV0byogZGlzY29ubmVjdGVkQ2FsbGJhY2sgPSBn
ZXRDdXN0b21FbGVtZW50Q2FsbGJhY2soc3RhdGUsIHByb3RvdHlwZU9iamVjdCwgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZyh2bSwgImRpc2Nvbm5lY3RlZENhbGxiYWNrIikpOwogICAgIGlmIChkaXNj
b25uZWN0ZWRDYWxsYmFjaykKICAgICAgICAgZWxlbWVudEludGVyZmFjZS0+c2V0RGlzY29ubmVj
dGVkQ2FsbGJhY2soZGlzY29ubmVjdGVkQ2FsbGJhY2spOwogICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIEpTVmFsdWUoKSk7CiAKLSAgICBhdXRvKiBhZG9wdGVkQ2FsbGJhY2sgPSBnZXRD
dXN0b21FbGVtZW50Q2FsbGJhY2soc3RhdGUsIHByb3RvdHlwZU9iamVjdCwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZygmdm0sICJhZG9wdGVkQ2FsbGJhY2siKSk7CisgICAgYXV0byogYWRvcHRlZENh
bGxiYWNrID0gZ2V0Q3VzdG9tRWxlbWVudENhbGxiYWNrKHN0YXRlLCBwcm90b3R5cGVPYmplY3Qs
IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJhZG9wdGVkQ2FsbGJhY2siKSk7CiAgICAgaWYg
KGFkb3B0ZWRDYWxsYmFjaykKICAgICAgICAgZWxlbWVudEludGVyZmFjZS0+c2V0QWRvcHRlZENh
bGxiYWNrKGFkb3B0ZWRDYWxsYmFjayk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
SlNWYWx1ZSgpKTsKIAotICAgIGF1dG8qIGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayA9IGdldEN1
c3RvbUVsZW1lbnRDYWxsYmFjayhzdGF0ZSwgcHJvdG90eXBlT2JqZWN0LCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKCZ2bSwgImF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayIpKTsKKyAgICBhdXRvKiBh
dHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2sgPSBnZXRDdXN0b21FbGVtZW50Q2FsbGJhY2soc3RhdGUs
IHByb3RvdHlwZU9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImF0dHJpYnV0ZUNo
YW5nZWRDYWxsYmFjayIpKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVl
KCkpOwogICAgIGlmIChhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2spIHsKLSAgICAgICAgYXV0byBv
YnNlcnZlZEF0dHJpYnV0ZXNWYWx1ZSA9IGNvbnN0cnVjdG9yLT5nZXQoJnN0YXRlLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgIm9ic2VydmVkQXR0cmlidXRlcyIpKTsKKyAgICAgICAg
YXV0byBvYnNlcnZlZEF0dHJpYnV0ZXNWYWx1ZSA9IGNvbnN0cnVjdG9yLT5nZXQoJnN0YXRlLCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAib2JzZXJ2ZWRBdHRyaWJ1dGVzIikpOwogICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkpOwogICAgICAgICBpZiAoIW9i
c2VydmVkQXR0cmlidXRlc1ZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKICAgICAgICAgICAgIGF1dG8g
b2JzZXJ2ZWRBdHRyaWJ1dGVzID0gY29udmVydDxJRExTZXF1ZW5jZTxJRExET01TdHJpbmc+Pihz
dGF0ZSwgb2JzZXJ2ZWRBdHRyaWJ1dGVzVmFsdWUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNDdXN0b21YUGF0aE5TUmVzb2x2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyLmNwcAkocmV2aXNp
b24gMjQ5MTI4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21YUGF0aE5T
UmVzb2x2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHly
aWdodCAoQykgMjAwNywgMjAxMyBBbGV4ZXkgUHJvc2t1cnlha292IChhcEBueXBvcC5jb20pCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03Miw3ICs3Myw3IEBAIFN0cmluZyBKU0N1
c3RvbVhQYXRoTlNSZXNvbHZlcjo6bG9va3VwTmEKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBtX2ds
b2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAg
ICAgIAotICAgIEpTVmFsdWUgZnVuY3Rpb24gPSBtX2N1c3RvbVJlc29sdmVyLT5nZXQoZXhlYywg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCAibG9va3VwTmFtZXNwYWNlVVJJIikpOworICAg
IEpTVmFsdWUgZnVuY3Rpb24gPSBtX2N1c3RvbVJlc29sdmVyLT5nZXQoZXhlYywgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZyh2bSwgImxvb2t1cE5hbWVzcGFjZVVSSSIpKTsKICAgICBDYWxsRGF0YSBj
YWxsRGF0YTsKICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGdldENhbGxEYXRhKHZtLCBmdW5jdGlv
biwgY2FsbERhdGEpOwogICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZTo6Tm9uZSkgewpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0UmVjb3JkLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0UmVjb3JkLmgJ
KHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29u
dmVydFJlY29yZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODUsNyArODUsNyBAQCB0ZW1wbGF0ZTx0
eXBlbmFtZSBLLCB0eXBlbmFtZSBWPiBzdHJ1Y3QgCiAgICAgICAgIFJldHVyblR5cGUgcmVzdWx0
OwogICAgIAogICAgICAgICAvLyA0LiBMZXQga2V5cyBiZSA/IE8uW1tPd25Qcm9wZXJ0eUtleXNd
XSgpLgotICAgICAgICBKU0M6OlByb3BlcnR5TmFtZUFycmF5IGtleXMoJnZtLCBKU0M6OlByb3Bl
cnR5TmFtZU1vZGU6OlN0cmluZ3MsIEpTQzo6UHJpdmF0ZVN5bWJvbE1vZGU6OkV4Y2x1ZGUpOwor
ICAgICAgICBKU0M6OlByb3BlcnR5TmFtZUFycmF5IGtleXModm0sIEpTQzo6UHJvcGVydHlOYW1l
TW9kZTo6U3RyaW5ncywgSlNDOjpQcml2YXRlU3ltYm9sTW9kZTo6RXhjbHVkZSk7CiAgICAgICAg
IG9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgJnN0
YXRlLCBrZXlzLCBKU0M6OkVudW1lcmF0aW9uTW9kZShKU0M6OkRvbnRFbnVtUHJvcGVydGllc01v
ZGU6OkluY2x1ZGUpKTsKIAogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0p
OwpAQCAtMTUwLDcgKzE1MCw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIEssIHR5cGVuYW1lIFY+IHN0
cnVjdCAKICAgICAgICAgICAgIGF1dG8gZXNWYWx1ZSA9IHRvSlM8Vj4oc3RhdGUsIGdsb2JhbE9i
amVjdCwga2V5VmFsdWVQYWlyLnZhbHVlKTsKIAogICAgICAgICAgICAgLy8gMy4gTGV0IGNyZWF0
ZWQgYmUgISBDcmVhdGVEYXRhUHJvcGVydHkocmVzdWx0LCBlc0tleSwgZXNWYWx1ZSkuCi0gICAg
ICAgICAgICBib29sIGNyZWF0ZWQgPSByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKCZ2bSwga2V5VmFsdWVQYWlyLmtleSksIGVzVmFsdWUpOworICAgICAg
ICAgICAgYm9vbCBjcmVhdGVkID0gcmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmll
cjo6ZnJvbVN0cmluZyh2bSwga2V5VmFsdWVQYWlyLmtleSksIGVzVmFsdWUpOwogCiAgICAgICAg
ICAgICAvLyA0LiBBc3NlcnQ6IGNyZWF0ZWQgaXMgdHJ1ZS4KICAgICAgICAgICAgIEFTU0VSVF9V
TlVTRUQoY3JlYXRlZCwgY3JlYXRlZCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RPTUNvbnZlcnRTdHJpbmdzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01Db252ZXJ0U3RyaW5ncy5oCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRTdHJpbmdzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtNjgsMTIgKzY4LDEyIEBAIHRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETERPTVN0
cmkKIAogICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIGNvbnN0IFVuY2FjaGVkU3RyaW5nJiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBK
U0M6OmpzU3RyaW5nKCZzdGF0ZSwgdmFsdWUuc3RyaW5nKTsKKyAgICAgICAgcmV0dXJuIEpTQzo6
anNTdHJpbmcoc3RhdGUudm0oKSwgdmFsdWUuc3RyaW5nKTsKICAgICB9CiAKICAgICBzdGF0aWMg
SlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBPd25lZFN0
cmluZyYgdmFsdWUpCiAgICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc093bmVkU3RyaW5nKCZz
dGF0ZSwgdmFsdWUuc3RyaW5nKTsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNPd25lZFN0cmluZyhz
dGF0ZS52bSgpLCB2YWx1ZS5zdHJpbmcpOwogICAgIH0KIH07CiAKQEAgLTk1LDEyICs5NSwxMiBA
QCB0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExCeXRlU3RyCiAKICAgICBzdGF0aWMg
SlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBVbmNhY2hl
ZFN0cmluZyYgdmFsdWUpCiAgICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc1N0cmluZygmc3Rh
dGUsIHZhbHVlLnN0cmluZyk7CisgICAgICAgIHJldHVybiBKU0M6OmpzU3RyaW5nKHN0YXRlLnZt
KCksIHZhbHVlLnN0cmluZyk7CiAgICAgfQogCiAgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgT3duZWRTdHJpbmcmIHZhbHVlKQogICAg
IHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNPd25lZFN0cmluZygmc3RhdGUsIHZhbHVlLnN0cmlu
Zyk7CisgICAgICAgIHJldHVybiBKU0M6OmpzT3duZWRTdHJpbmcoc3RhdGUudm0oKSwgdmFsdWUu
c3RyaW5nKTsKICAgICB9CiB9OwogCkBAIC0xMjIsMTIgKzEyMiwxMiBAQCB0ZW1wbGF0ZTw+IHN0
cnVjdCBKU0NvbnZlcnRlcjxJRExVU1ZTdHJpCiAKICAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBVbmNhY2hlZFN0cmluZyYgdmFsdWUp
CiAgICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc1N0cmluZygmc3RhdGUsIHZhbHVlLnN0cmlu
Zyk7CisgICAgICAgIHJldHVybiBKU0M6OmpzU3RyaW5nKHN0YXRlLnZtKCksIHZhbHVlLnN0cmlu
Zyk7CiAgICAgfQogCiAgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgY29uc3QgT3duZWRTdHJpbmcmIHZhbHVlKQogICAgIHsKLSAgICAgICAgcmV0
dXJuIEpTQzo6anNPd25lZFN0cmluZygmc3RhdGUsIHZhbHVlLnN0cmluZyk7CisgICAgICAgIHJl
dHVybiBKU0M6OmpzT3duZWRTdHJpbmcoc3RhdGUudm0oKSwgdmFsdWUuc3RyaW5nKTsKICAgICB9
CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3Rv
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5k
b3dDdXN0b20uY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMjM2LDYgKzIzNiw3IEBAIGJvb2wgSlNET01XaW5k
b3c6OmdldE93blByb3BlcnR5U2xvdChKU08KIC8vICgzKSBuYW1lZCBwcm9wZXJ0aWVzIChpbiBm
YWN0LCB0aGVzZSBzaG91bGRuJ3QgYmUgb24gdGhlIHdpbmRvdywgc2hvdWxkIGJlIG9uIHRoZSBO
UE8pLgogYm9vbCBKU0RPTVdpbmRvdzo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU09iamVj
dCogb2JqZWN0LCBFeGVjU3RhdGUqIHN0YXRlLCB1bnNpZ25lZCBpbmRleCwgUHJvcGVydHlTbG90
JiBzbG90KQogeworICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8qIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8SlNET01XaW5kb3cqPihvYmplY3QpOwogICAgIGF1dG8mIHdpbmRvdyA9IHRo
aXNPYmplY3QtPndyYXBwZWQoKTsKICAgICBhdXRvKiBmcmFtZSA9IHdpbmRvdy5mcmFtZSgpOwpA
QCAtMjYwLDcgKzI2MSw3IEBAIGJvb2wgSlNET01XaW5kb3c6OmdldE93blByb3BlcnR5U2xvdEJ5
SW4KIAogICAgIC8vIEhhbmQgb2ZmIGFsbCBjcm9zcy1kb21haW4vZnJhbWVsZXNzIGFjY2VzcyB0
byBqc0RPTVdpbmRvd0dldE93blByb3BlcnR5U2xvdFJlc3RyaWN0ZWRBY2Nlc3MuCiAgICAgaWYg
KGlzQ3Jvc3NPcmlnaW5BY2Nlc3MoKSkKLSAgICAgICAgcmV0dXJuIGpzRE9NV2luZG93R2V0T3du
UHJvcGVydHlTbG90UmVzdHJpY3RlZEFjY2VzczxET01XaW5kb3dUeXBlOjpMb2NhbD4odGhpc09i
amVjdCwgd2luZG93LCAqc3RhdGUsIElkZW50aWZpZXI6OmZyb20oc3RhdGUsIGluZGV4KSwgc2xv
dCwgZXJyb3JNZXNzYWdlKTsKKyAgICAgICAgcmV0dXJuIGpzRE9NV2luZG93R2V0T3duUHJvcGVy
dHlTbG90UmVzdHJpY3RlZEFjY2VzczxET01XaW5kb3dUeXBlOjpMb2NhbD4odGhpc09iamVjdCwg
d2luZG93LCAqc3RhdGUsIElkZW50aWZpZXI6OmZyb20odm0sIGluZGV4KSwgc2xvdCwgZXJyb3JN
ZXNzYWdlKTsKIAogICAgIC8vICgyKSBSZWd1bGFyIG93biBwcm9wZXJ0aWVzLgogICAgIHJldHVy
biBCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KHRoaXNPYmplY3QsIHN0YXRlLCBpbmRl
eCwgc2xvdCk7CkBAIC00MDIsOSArNDAzLDEwIEBAIHN0YXRpYyB2b2lkIGFkZFNjb3BlZENoaWxk
cmVuSW5kZXhlcyhFeGUKICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm47CiAKKyAgICBW
TSYgdm0gPSBzdGF0ZS52bSgpOwogICAgIHVuc2lnbmVkIHNjb3BlZENoaWxkQ291bnQgPSBmcmFt
ZS0+dHJlZSgpLnNjb3BlZENoaWxkQ291bnQoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgc2NvcGVkQ2hpbGRDb3VudDsgKytpKQotICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVu
dGlmaWVyOjpmcm9tKCZzdGF0ZSwgaSkpOworICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVu
dGlmaWVyOjpmcm9tKHZtLCBpKSk7CiB9CiAKIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5v
cmcvI3dpbmRvd3Byb3h5LW93bnByb3BlcnR5a2V5cwpAQCAtNDI0LDEzICs0MjYsMTQgQEAgdm9p
ZCBKU0RPTVdpbmRvdzo6Z2V0T3duUHJvcGVydHlOYW1lcyhKUwogCiBib29sIEpTRE9NV2luZG93
OjpkZWZpbmVPd25Qcm9wZXJ0eShKU0M6OkpTT2JqZWN0KiBvYmplY3QsIEpTQzo6RXhlY1N0YXRl
KiBleGVjLCBKU0M6OlByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIGNvbnN0IEpTQzo6UHJvcGVy
dHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBib29sIHNob3VsZFRocm93KQogeworICAgIEpTQzo6
Vk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBKU0RPTVdpbmRvdyogdGhpc09iamVjdCA9IGpzQ2Fz
dDxKU0RPTVdpbmRvdyo+KG9iamVjdCk7CiAgICAgLy8gT25seSBhbGxvdyBkZWZpbmluZyBwcm9w
ZXJ0aWVzIGluIHRoaXMgd2F5IGJ5IGZyYW1lcyBpbiB0aGUgc2FtZSBvcmlnaW4sIGFzIGl0IGFs
bG93cyBzZXR0ZXJzIHRvIGJlIGludHJvZHVjZWQuCiAgICAgaWYgKCFCaW5kaW5nU2VjdXJpdHk6
OnNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3coZXhlYywgdGhpc09iamVjdC0+d3JhcHBlZCgp
LCBUaHJvd1NlY3VyaXR5RXJyb3IpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBE
b24ndCBhbGxvdyBzaGFkb3dpbmcgbG9jYXRpb24gdXNpbmcgYWNjZXNzb3IgcHJvcGVydGllcy4K
LSAgICBpZiAoZGVzY3JpcHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigpICYmIHByb3BlcnR5TmFt
ZSA9PSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJsb2NhdGlvbiIpKQorICAgIGlmIChk
ZXNjcmlwdG9yLmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkgJiYgcHJvcGVydHlOYW1lID09IElkZW50
aWZpZXI6OmZyb21TdHJpbmcodm0sICJsb2NhdGlvbiIpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKICAgICByZXR1cm4gQmFzZTo6ZGVmaW5lT3duUHJvcGVydHkodGhpc09iamVjdCwgZXhlYywg
cHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCBzaG91bGRUaHJvdyk7CkBAIC00OTAsMjEgKzQ5Mywy
MyBAQCBwcml2YXRlOgogCiBpbmxpbmUgdm9pZCBEaWFsb2dIYW5kbGVyOjpkaWFsb2dDcmVhdGVk
KERPTVdpbmRvdyYgZGlhbG9nKQogeworICAgIFZNJiB2bSA9IG1fZXhlYy52bSgpOwogICAgIG1f
ZnJhbWUgPSBkaWFsb2cuZnJhbWUoKTsKICAgICAKICAgICAvLyBGSVhNRTogVGhpcyBsb29rcyBs
aWtlIGEgbGVhayBiZXR3ZWVuIHRoZSBub3JtYWwgd29ybGQgYW5kIGFuIGlzb2xhdGVkCiAgICAg
Ly8gICAgICAgIHdvcmxkIGlmIGRpYWxvZ0FyZ3VtZW50cyBjb21lcyBmcm9tIGFuIGlzb2xhdGVk
IHdvcmxkLgotICAgIEpTRE9NV2luZG93KiBnbG9iYWxPYmplY3QgPSB0b0pTRE9NV2luZG93KG1f
ZnJhbWUuZ2V0KCksIG5vcm1hbFdvcmxkKG1fZXhlYy52bSgpKSk7CisgICAgSlNET01XaW5kb3cq
IGdsb2JhbE9iamVjdCA9IHRvSlNET01XaW5kb3cobV9mcmFtZS5nZXQoKSwgbm9ybWFsV29ybGQo
dm0pKTsKICAgICBpZiAoSlNWYWx1ZSBkaWFsb2dBcmd1bWVudHMgPSBtX2V4ZWMuYXJndW1lbnQo
MSkpCi0gICAgICAgIGdsb2JhbE9iamVjdC0+cHV0RGlyZWN0KG1fZXhlYy52bSgpLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKCZtX2V4ZWMsICJkaWFsb2dBcmd1bWVudHMiKSwgZGlhbG9nQXJndW1l
bnRzKTsKKyAgICAgICAgZ2xvYmFsT2JqZWN0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZy
b21TdHJpbmcodm0sICJkaWFsb2dBcmd1bWVudHMiKSwgZGlhbG9nQXJndW1lbnRzKTsKIH0KIAog
aW5saW5lIEpTVmFsdWUgRGlhbG9nSGFuZGxlcjo6cmV0dXJuVmFsdWUoKSBjb25zdAogewotICAg
IEpTRE9NV2luZG93KiBnbG9iYWxPYmplY3QgPSB0b0pTRE9NV2luZG93KG1fZnJhbWUuZ2V0KCks
IG5vcm1hbFdvcmxkKG1fZXhlYy52bSgpKSk7CisgICAgVk0mIHZtID0gbV9leGVjLnZtKCk7Cisg
ICAgSlNET01XaW5kb3cqIGdsb2JhbE9iamVjdCA9IHRvSlNET01XaW5kb3cobV9mcmFtZS5nZXQo
KSwgbm9ybWFsV29ybGQodm0pKTsKICAgICBpZiAoIWdsb2JhbE9iamVjdCkKICAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgSWRlbnRpZmllciBpZGVudGlmaWVyID0gSWRlbnRpZmll
cjo6ZnJvbVN0cmluZygmbV9leGVjLCAicmV0dXJuVmFsdWUiKTsKKyAgICBJZGVudGlmaWVyIGlk
ZW50aWZpZXIgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAicmV0dXJuVmFsdWUiKTsKICAg
ICBQcm9wZXJ0eVNsb3Qgc2xvdChnbG9iYWxPYmplY3QsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxN
ZXRob2RUeXBlOjpHZXQpOwogICAgIGlmICghSlNHbG9iYWxPYmplY3Q6OmdldE93blByb3BlcnR5
U2xvdChnbG9iYWxPYmplY3QsICZtX2V4ZWMsIGlkZW50aWZpZXIsIHNsb3QpKQogICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKQEAgLTU3Myw3ICs1NzgsOCBAQCB2b2lkIEpTRE9NV2luZG93
OjpzZXRPcGVuZXIoSlNDOjpFeGVjU3RhCiAgICAgICAgIHdyYXBwZWQoKS5kaXNvd25PcGVuZXIo
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICByZXBsYWNlU3RhdGljUHJvcGVydHlTbG90
KHN0YXRlLnZtKCksIHRoaXMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLnZtKCksICJv
cGVuZXIiKSwgdmFsdWUpOworICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgcmVwbGFjZVN0
YXRpY1Byb3BlcnR5U2xvdCh2bSwgdGhpcywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIm9w
ZW5lciIpLCB2YWx1ZSk7CiB9CiAKIEpTVmFsdWUgSlNET01XaW5kb3c6OnNlbGYoSlNDOjpFeGVj
U3RhdGUmKSBjb25zdApAQCAtNjQ1LDcgKzY1MSw4IEBAIHZvaWQgSlNET01XaW5kb3c6OnNldE9w
ZW5EYXRhYmFzZShKU0M6OkUKICAgICBpZiAoIUJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dB
Y2Nlc3NUb0RPTVdpbmRvdygmc3RhdGUsIHdyYXBwZWQoKSwgVGhyb3dTZWN1cml0eUVycm9yKSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgcmVwbGFjZVN0YXRpY1Byb3BlcnR5U2xvdChzdGF0ZS52
bSgpLCB0aGlzLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZS52bSgpLCAib3BlbkRhdGFi
YXNlIiksIHZhbHVlKTsKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIHJlcGxhY2VTdGF0
aWNQcm9wZXJ0eVNsb3Qodm0sIHRoaXMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJvcGVu
RGF0YWJhc2UiKSwgdmFsdWUpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd1Byb3BlcnRpZXMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93UHJvcGVydGll
cy5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RE9NV2luZG93UHJvcGVydGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTA0LDcgKzEwNCw4IEBAIGJv
b2wgSlNET01XaW5kb3dQcm9wZXJ0aWVzOjpnZXRPd25Qcm9wZXIKIAogYm9vbCBKU0RPTVdpbmRv
d1Byb3BlcnRpZXM6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmplY3QqIG9iamVjdCwg
RXhlY1N0YXRlKiBzdGF0ZSwgdW5zaWduZWQgaW5kZXgsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsK
LSAgICByZXR1cm4gZ2V0T3duUHJvcGVydHlTbG90KG9iamVjdCwgc3RhdGUsIElkZW50aWZpZXI6
OmZyb20oc3RhdGUsIGluZGV4KSwgc2xvdCk7CisgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7Cisg
ICAgcmV0dXJuIGdldE93blByb3BlcnR5U2xvdChvYmplY3QsIHN0YXRlLCBJZGVudGlmaWVyOjpm
cm9tKHZtLCBpbmRleCksIHNsb3QpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RlcHJlY2F0ZWRDU1NPTVZhbHVlQ3VzdG9t
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RlcHJlY2F0
ZWRDU1NPTVZhbHVlQ3VzdG9tLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNEZXByZWNhdGVkQ1NTT01WYWx1ZUN1c3RvbS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDE5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMzgsNyArMzgsNyBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogYm9vbCBKU0Rl
cHJlY2F0ZWRDU1NPTVZhbHVlT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6
SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0b3ImIHZpc2l0b3Is
IGNvbnN0IGNoYXIqKiByZWFzb24pCiB7CiAgICAgSlNEZXByZWNhdGVkQ1NTT01WYWx1ZSoganND
U1NWYWx1ZSA9IGpzQ2FzdDxKU0RlcHJlY2F0ZWRDU1NPTVZhbHVlKj4oaGFuZGxlLnNsb3QoKS0+
YXNDZWxsKCkpOwotICAgIGlmICghanNDU1NWYWx1ZS0+aGFzQ3VzdG9tUHJvcGVydGllcygqanND
U1NWYWx1ZS0+dm0oKSkpCisgICAgaWYgKCFqc0NTU1ZhbHVlLT5oYXNDdXN0b21Qcm9wZXJ0aWVz
KGpzQ1NTVmFsdWUtPnZtKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoVU5M
SUtFTFkocmVhc29uKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRM
aXN0ZW5lci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNF
dmVudExpc3RlbmVyLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNFdmVudExpc3RlbmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYg
QEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20p
Ci0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2Vy
dmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDE5IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBS
ZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTEzOSw3ICsxMzksNyBAQCB2b2lkIEpT
RXZlbnRMaXN0ZW5lcjo6aGFuZGxlRXZlbnQoU2NyaXB0CiAKICAgICAvLyBJZiBqc0Z1bmN0aW9u
IGlzIG5vdCBhY3R1YWxseSBhIGZ1bmN0aW9uLCBzZWUgaWYgaXQgaW1wbGVtZW50cyB0aGUgRXZl
bnRMaXN0ZW5lciBpbnRlcmZhY2UgYW5kIHVzZSB0aGF0CiAgICAgaWYgKGNhbGxUeXBlID09IENh
bGxUeXBlOjpOb25lKSB7Ci0gICAgICAgIGhhbmRsZUV2ZW50RnVuY3Rpb24gPSBqc0Z1bmN0aW9u
LT5nZXQoZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCAiaGFuZGxlRXZlbnQiKSk7
CisgICAgICAgIGhhbmRsZUV2ZW50RnVuY3Rpb24gPSBqc0Z1bmN0aW9uLT5nZXQoZXhlYywgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImhhbmRsZUV2ZW50IikpOwogICAgICAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7CiAgICAgICAgICAgICBhdXRvKiBleGNlcHRpb24g
PSBzY29wZS5leGNlcHRpb24oKTsKICAgICAgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ltYWdlRGF0YUN1c3RvbS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbWFnZURhdGFDdXN0
b20uY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0ltYWdlRGF0YUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwOC0yMDE5IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDMsNyArNDMsNyBAQCBKU1ZhbHVl
IHRvSlNOZXdseUNyZWF0ZWQoRXhlY1N0YXRlKiBzdGF0CiAgICAgVk0mIHZtID0gc3RhdGUtPnZt
KCk7CiAgICAgYXV0byogZGF0YSA9IGltYWdlRGF0YS0+ZGF0YSgpOwogICAgIGF1dG8qIHdyYXBw
ZXIgPSBjcmVhdGVXcmFwcGVyPEltYWdlRGF0YT4oZ2xvYmFsT2JqZWN0LCBXVEZNb3ZlKGltYWdl
RGF0YSkpOwotICAgIElkZW50aWZpZXIgZGF0YU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KHN0YXRlLCAiZGF0YSIpOworICAgIElkZW50aWZpZXIgZGF0YU5hbWUgPSBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCAiZGF0YSIpOwogICAgIHdyYXBwZXItPnB1dERpcmVjdCh2bSwgZGF0YU5h
bWUsIHRvSlMoc3RhdGUsIGdsb2JhbE9iamVjdCwgZGF0YSksIFByb3BlcnR5QXR0cmlidXRlOjpE
b250RGVsZXRlIHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KTsKICAgICAvLyBGSVhNRTog
QWRvcHQgcmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkLCBhbmQgc3dpdGNoIHRvIHJlcG9ydEV4dHJh
TWVtb3J5QWxsb2NhdGVkLgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNDI1OTUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTGF6eUV2
ZW50TGlzdGVuZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTTGF6eUV2ZW50TGlzdGVuZXIuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0xhenlFdmVudExpc3RlbmVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxIFBldGVyIEtlbGx5IChw
bWtAcG9zdC5jb20pCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTggQXBwbGUgSW5jLiBBbGwg
UmlnaHRzIFJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDE5IEFwcGxlIEluYy4g
QWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTE0OSw3ICsxNDks
NyBAQCBKU09iamVjdCogSlNMYXp5RXZlbnRMaXN0ZW5lcjo6aW5pdGlhbGl6CiAgICAgRXhlY1N0
YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CiAKICAgICBNYXJrZWRBcmd1
bWVudEJ1ZmZlciBhcmdzOwotICAgIGFyZ3MuYXBwZW5kKGpzTm9udHJpdmlhbFN0cmluZyhleGVj
LCBtX2V2ZW50UGFyYW1ldGVyTmFtZSkpOworICAgIGFyZ3MuYXBwZW5kKGpzTm9udHJpdmlhbFN0
cmluZyh2bSwgbV9ldmVudFBhcmFtZXRlck5hbWUpKTsKICAgICBhcmdzLmFwcGVuZChqc1N0cmlu
Z1dpdGhDYWNoZShleGVjLCBtX2NvZGUpKTsKICAgICBBU1NFUlQoIWFyZ3MuaGFzT3ZlcmZsb3dl
ZCgpKTsKIApAQCAtMTU4LDcgKzE1OCw3IEBAIEpTT2JqZWN0KiBKU0xhenlFdmVudExpc3RlbmVy
Ojppbml0aWFsaXoKICAgICBpbnQgb3ZlcnJpZGVMaW5lTnVtYmVyID0gbV9zb3VyY2VQb3NpdGlv
bi5tX2xpbmUub25lQmFzZWRJbnQoKTsKIAogICAgIEpTT2JqZWN0KiBqc0Z1bmN0aW9uID0gY29u
c3RydWN0RnVuY3Rpb25Ta2lwcGluZ0V2YWxFbmFibGVkQ2hlY2soZXhlYywKLSAgICAgICAgZXhl
Yy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBhcmdzLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4
ZWMsIG1fZnVuY3Rpb25OYW1lKSwKKyAgICAgICAgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
LCBhcmdzLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBtX2Z1bmN0aW9uTmFtZSksCiAgICAg
ICAgIFNvdXJjZU9yaWdpbiB7IG1fc291cmNlVVJMLCBDYWNoZWRTY3JpcHRGZXRjaGVyOjpjcmVh
dGUoZG9jdW1lbnQuY2hhcnNldCgpKSB9LAogICAgICAgICBtX3NvdXJjZVVSTCwgbV9zb3VyY2VQ
b3NpdGlvbiwgb3ZlcnJpZGVMaW5lTnVtYmVyKTsKICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0xvY2F0aW9u
Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0xv
Y2F0aW9uQ3VzdG9tLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNMb2NhdGlvbkN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3
IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUu
b3JnKQogICogIENvcHlyaWdodCAoQykgMjAwNiBKb24gU2hpZXIgKGpzaGllckBpYXN0YXRlLmVk
dSkKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgs
IDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2V2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAy
MDAzLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2V2ZWQuCiAgKiAgQ29weXJpZ2h0IChD
KSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YgKGFwQHdlYmtpdC5vcmcpCiAgKgogICogIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
QEAgLTk4LDcgKzk4LDcgQEAgYm9vbCBKU0xvY2F0aW9uOjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUlu
ZAogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNMb2NhdGlvbio+KG9iamVjdCk7CiAg
ICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogCi0gICAg
Ym9vbCByZXN1bHQgPSBnZXRPd25Qcm9wZXJ0eVNsb3RDb21tb24oKnRoaXNPYmplY3QsICpzdGF0
ZSwgSWRlbnRpZmllcjo6ZnJvbShzdGF0ZSwgaW5kZXgpLCBzbG90KTsKKyAgICBib29sIHJlc3Vs
dCA9IGdldE93blByb3BlcnR5U2xvdENvbW1vbigqdGhpc09iamVjdCwgKnN0YXRlLCBJZGVudGlm
aWVyOjpmcm9tKHZtLCBpbmRleCksIHNsb3QpOwogICAgIEVYQ0VQVElPTl9BU1NFUlQoIXNjb3Bl
LmV4Y2VwdGlvbigpIHx8ICFyZXN1bHQpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IGZhbHNlKTsKICAgICBpZiAocmVzdWx0KQpAQCAtMTU2LDEwICsxNTYsMTEgQEAgYm9vbCBKU0xv
Y2F0aW9uOjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjUwogCiBib29sIEpTTG9jYXRpb246OnB1dEJ5
SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIHN0YXRlLCB1bnNpZ25lZCBpbmRleCwgSlNW
YWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKIHsKKyAgICBWTSYgdm0gPSBzdGF0ZS0+dm0o
KTsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTTG9jYXRpb24qPihjZWxsKTsKICAg
ICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAKLSAgICBp
ZiAocHV0Q29tbW9uKCp0aGlzT2JqZWN0LCAqc3RhdGUsIElkZW50aWZpZXI6OmZyb20oc3RhdGUs
IGluZGV4KSkpCisgICAgaWYgKHB1dENvbW1vbigqdGhpc09iamVjdCwgKnN0YXRlLCBJZGVudGlm
aWVyOjpmcm9tKHZtLCBpbmRleCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZXR1
cm4gSlNPYmplY3Q6OnB1dEJ5SW5kZXgoY2VsbCwgc3RhdGUsIGluZGV4LCB2YWx1ZSwgc2hvdWxk
VGhyb3cpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlTGlzdEN1c3Rv
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlTGlz
dEN1c3RvbS5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTTm9kZUxpc3RDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQwLDcgKzQwLDcg
QEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIGJvb2wgSlNOb2RlTGlzdE93bmVyOjppc1JlYWNoYWJs
ZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCos
IFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQogewogICAgIEpTTm9k
ZUxpc3QqIGpzTm9kZUxpc3QgPSBqc0Nhc3Q8SlNOb2RlTGlzdCo+KGhhbmRsZS5zbG90KCktPmFz
Q2VsbCgpKTsKLSAgICBpZiAoIWpzTm9kZUxpc3QtPmhhc0N1c3RvbVByb3BlcnRpZXMoKmpzTm9k
ZUxpc3QtPnZtKCkpKQorICAgIGlmICghanNOb2RlTGlzdC0+aGFzQ3VzdG9tUHJvcGVydGllcyhq
c05vZGVMaXN0LT52bSgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKGpzTm9k
ZUxpc3QtPndyYXBwZWQoKS5pc0xpdmVOb2RlTGlzdCgpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1BsdWdpbkVsZW1lbnRGdW5jdGlvbnMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGx1Z2luRWxlbWVudEZ1bmN0aW9ucy5jcHAJ
KHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGx1Z2lu
RWxlbWVudEZ1bmN0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgog
ICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcp
Ci0gKiAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogIENvcHlyaWdodCAoQykgMjAwNC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTE2OCw3ICsxNjgsNyBAQCBDYWxsVHlw
ZSBwbHVnaW5FbGVtZW50Q3VzdG9tR2V0Q2FsbERhdGEoCiAgICAgaWYgKEpTT2JqZWN0KiBzY3Jp
cHRPYmplY3QgPSBwbHVnaW5TY3JpcHRPYmplY3RGcm9tUGx1Z2luVmlld0Jhc2UoZWxlbWVudCkp
IHsKICAgICAgICAgQ2FsbERhdGEgc2NyaXB0T2JqZWN0Q2FsbERhdGE7CiAgICAgICAgIAotICAg
ICAgICBWTSYgdm0gPSAqc2NyaXB0T2JqZWN0LT52bSgpOworICAgICAgICBWTSYgdm0gPSBzY3Jp
cHRPYmplY3QtPnZtKCk7CiAgICAgICAgIGlmIChzY3JpcHRPYmplY3QtPm1ldGhvZFRhYmxlKHZt
KS0+Z2V0Q2FsbERhdGEoc2NyaXB0T2JqZWN0LCBzY3JpcHRPYmplY3RDYWxsRGF0YSkgPT0gQ2Fs
bFR5cGU6Ok5vbmUpCiAgICAgICAgICAgICByZXR1cm4gQ2FsbFR5cGU6Ok5vbmU7CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUmVtb3RlRE9NV2luZG93Q3VzdG9tLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1JlbW90ZURPTVdpbmRv
d0N1c3RvbS5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTUmVtb3RlRE9NV2luZG93Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00Myw2ICs0Myw3
IEBAIGJvb2wgSlNSZW1vdGVET01XaW5kb3c6OmdldE93blByb3BlcnR5U2wKIAogYm9vbCBKU1Jl
bW90ZURPTVdpbmRvdzo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU09iamVjdCogb2JqZWN0
LCBFeGVjU3RhdGUqIHN0YXRlLCB1bnNpZ25lZCBpbmRleCwgUHJvcGVydHlTbG90JiBzbG90KQog
eworICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8SlNSZW1vdGVET01XaW5kb3cqPihvYmplY3QpOwogCiAgICAgLy8gSW5kZXhlZCBnZXR0ZXJz
IHRha2UgcHJlY2VuZGVuY2Ugb3ZlciByZWd1bGFyIHByb3BlcnRpZXMsIHNvIGNhY2hpbmcgd291
bGQgYmUgaW52YWxpZC4KQEAgLTUwLDcgKzUxLDcgQEAgYm9vbCBKU1JlbW90ZURPTVdpbmRvdzo6
Z2V0T3duUHJvcGVydHlTbAogCiAgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBpbmRleGVk
IHByb3BlcnRpZXMuCiAKLSAgICByZXR1cm4ganNET01XaW5kb3dHZXRPd25Qcm9wZXJ0eVNsb3RS
ZXN0cmljdGVkQWNjZXNzPERPTVdpbmRvd1R5cGU6OlJlbW90ZT4odGhpc09iamVjdCwgdGhpc09i
amVjdC0+d3JhcHBlZCgpLCAqc3RhdGUsIElkZW50aWZpZXI6OmZyb20oc3RhdGUsIGluZGV4KSwg
c2xvdCwgU3RyaW5nKCkpOworICAgIHJldHVybiBqc0RPTVdpbmRvd0dldE93blByb3BlcnR5U2xv
dFJlc3RyaWN0ZWRBY2Nlc3M8RE9NV2luZG93VHlwZTo6UmVtb3RlPih0aGlzT2JqZWN0LCB0aGlz
T2JqZWN0LT53cmFwcGVkKCksICpzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbSh2bSwgaW5kZXgpLCBz
bG90LCBTdHJpbmcoKSk7CiB9CiAKIGJvb2wgSlNSZW1vdGVET01XaW5kb3c6OnB1dChKU0NlbGwq
IGNlbGwsIEV4ZWNTdGF0ZSogc3RhdGUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFs
dWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL1JlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1JlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRy
b2xsZXIuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9SZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQ2Fub24gSW5jLgotICogQ29w
eXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkLCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTQsNyArNTQsNyBAQCBKU0M6OkpT
VmFsdWUgUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvCiAgICAgSlNDOjpKU0xvY2tIb2xkZXIg
bG9jayh2bSk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0g
ICAgYXV0byBmdW5jdGlvbiA9IG9iamVjdC5nZXQoJnN0YXRlLCBKU0M6OklkZW50aWZpZXI6OmZy
b21TdHJpbmcoJnN0YXRlLCBwcm9wZXJ0eU5hbWUpKTsKKyAgICBhdXRvIGZ1bmN0aW9uID0gb2Jq
ZWN0LmdldCgmc3RhdGUsIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcHJvcGVydHlO
YW1lKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNDOjpKU1ZhbHVlKCkpOwog
CiAgICAgaWYgKCFmdW5jdGlvbi5pc0Z1bmN0aW9uKHZtKSkgewpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDI0OTEy
OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xODMsNyArMTgzLDggQEAgdm9pZCBTY3JpcHRDb250cm9sbGVyOjps
b2FkTW9kdWxlU2NyaXB0KAogCiBKU0M6OkpTVmFsdWUgU2NyaXB0Q29udHJvbGxlcjo6bGlua0Fu
ZEV2YWx1YXRlTW9kdWxlU2NyaXB0SW5Xb3JsZChMb2FkYWJsZU1vZHVsZVNjcmlwdCYgbW9kdWxl
U2NyaXB0LCBET01XcmFwcGVyV29ybGQmIHdvcmxkKQogewotICAgIEpTTG9ja0hvbGRlciBsb2Nr
KHdvcmxkLnZtKCkpOworICAgIEpTQzo6Vk0mIHZtID0gd29ybGQudm0oKTsKKyAgICBKU0xvY2tI
b2xkZXIgbG9jayh2bSk7CiAKICAgICBhdXRvJiBwcm94eSA9IGpzV2luZG93UHJveHkod29ybGQp
OwogICAgIGF1dG8mIHN0YXRlID0gKnByb3h5LndpbmRvdygpLT5nbG9iYWxFeGVjKCk7CkBAIC0x
OTMsNyArMTk0LDcgQEAgSlNDOjpKU1ZhbHVlIFNjcmlwdENvbnRyb2xsZXI6OmxpbmtBbmRFdgog
ICAgIFJlZjxGcmFtZT4gcHJvdGVjdG9yKG1fZnJhbWUpOwogCiAgICAgTmFrZWRQdHI8SlNDOjpF
eGNlcHRpb24+IGV2YWx1YXRpb25FeGNlcHRpb247Ci0gICAgYXV0byByZXR1cm5WYWx1ZSA9IEpT
RXhlY1N0YXRlOjpsaW5rQW5kRXZhbHVhdGVNb2R1bGUoc3RhdGUsIElkZW50aWZpZXI6OmZyb21V
aWQoJnN0YXRlLnZtKCksIG1vZHVsZVNjcmlwdC5tb2R1bGVLZXkoKSksIGpzVW5kZWZpbmVkKCks
IGV2YWx1YXRpb25FeGNlcHRpb24pOworICAgIGF1dG8gcmV0dXJuVmFsdWUgPSBKU0V4ZWNTdGF0
ZTo6bGlua0FuZEV2YWx1YXRlTW9kdWxlKHN0YXRlLCBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCBt
b2R1bGVTY3JpcHQubW9kdWxlS2V5KCkpLCBqc1VuZGVmaW5lZCgpLCBldmFsdWF0aW9uRXhjZXB0
aW9uKTsKICAgICBpZiAoZXZhbHVhdGlvbkV4Y2VwdGlvbikgewogICAgICAgICAvLyBGSVhNRTog
R2l2ZSBhIGNoYW5jZSB0byBkdW1wIHRoZSBzdGFjayB0cmFjZSBpZiB0aGUgImNyb3Nzb3JpZ2lu
IiBhdHRyaWJ1dGUgYWxsb3dzLgogICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTY0NTM5CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9T
Y3JpcHRNb2R1bGVMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL1NjcmlwdE1vZHVsZUxvYWRlci5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdE1vZHVsZUxvYWRlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTkgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0xMjMsNyArMTIzLDcgQEAgSlNDOjpJZGVudGlmaWVyIFNjcmlwdE1vZHVsZUxvYWRl
cjo6cmVzbwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAotICAgIHJldHVybiBKU0M6Oklk
ZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCByZXN1bHQtPnN0cmluZygpKTsKKyAgICByZXR1cm4g
SlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZXN1bHQtPnN0cmluZygpKTsKIH0KIAog
c3RhdGljIHZvaWQgcmVqZWN0VG9Qcm9wYWdhdGVOZXR3b3JrRXJyb3IoRGVmZXJyZWRQcm9taXNl
JiBkZWZlcnJlZCwgTW9kdWxlRmV0Y2hGYWlsdXJlS2luZCBmYWlsdXJlS2luZCwgQVNDSUlMaXRl
cmFsIG1lc3NhZ2UpCkBAIC0yNTgsNyArMjU4LDcgQEAgSlNDOjpKU0ludGVybmFsUHJvbWlzZSog
U2NyaXB0TW9kdWxlTG9hZAogICAgIGlmICghcmVzdWx0KQogICAgICAgICByZXR1cm4gcmVqZWN0
UHJvbWlzZShzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBUeXBlRXJyb3IsIHJlc3VsdC5lcnJvcigpKTsK
IAotICAgIHJldHVybiBKU0M6OmltcG9ydE1vZHVsZShleGVjLCBKU0M6OklkZW50aWZpZXI6OmZy
b21TdHJpbmcoJnZtLCByZXN1bHQtPnN0cmluZygpKSwgcGFyYW1ldGVycywgSlNDOjpKU1Njcmlw
dEZldGNoZXI6OmNyZWF0ZSh2bSwgV1RGTW92ZShzY3JpcHRGZXRjaGVyKSApKTsKKyAgICByZXR1
cm4gSlNDOjppbXBvcnRNb2R1bGUoZXhlYywgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZt
LCByZXN1bHQtPnN0cmluZygpKSwgcGFyYW1ldGVycywgSlNDOjpKU1NjcmlwdEZldGNoZXI6OmNy
ZWF0ZSh2bSwgV1RGTW92ZShzY3JpcHRGZXRjaGVyKSApKTsKIH0KIAogSlNDOjpKU09iamVjdCog
U2NyaXB0TW9kdWxlTG9hZGVyOjpjcmVhdGVJbXBvcnRNZXRhUHJvcGVydGllcyhKU0M6OkpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OkpTTW9k
dWxlTG9hZGVyKiwgSlNDOjpKU1ZhbHVlIG1vZHVsZUtleVZhbHVlLCBKU0M6OkpTTW9kdWxlUmVj
b3JkKiwgSlNDOjpKU1ZhbHVlKQpAQCAtMjcyLDcgKzI3Miw3IEBAIEpTQzo6SlNPYmplY3QqIFNj
cmlwdE1vZHVsZUxvYWRlcjo6Y3JlYXQKICAgICBhdXRvKiBtZXRhUHJvcGVydGllcyA9IEpTQzo6
Y29uc3RydWN0RW1wdHlPYmplY3QoZXhlYywgZ2xvYmFsT2JqZWN0LT5udWxsUHJvdG90eXBlT2Jq
ZWN0U3RydWN0dXJlKCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIp
OwogCi0gICAgbWV0YVByb3BlcnRpZXMtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKCZ2bSwgInVybCIpLCBKU0M6OmpzU3RyaW5nKCZ2bSwgc291cmNlVVJMLnN0cmlu
ZygpKSk7CisgICAgbWV0YVByb3BlcnRpZXMtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKHZtLCAidXJsIiksIEpTQzo6anNTdHJpbmcodm0sIHNvdXJjZVVSTC5zdHJp
bmcoKSkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwogCiAgICAg
cmV0dXJuIG1ldGFQcm9wZXJ0aWVzOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
U2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOS0y
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
OS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtNTg1LDcgKzU4NSw3IEBAIHByaXZhdGU6CiAgICAgICAgIDogQ2xv
bmVCYXNlKGV4ZWMpCiAgICAgICAgICwgbV9idWZmZXIob3V0KQogICAgICAgICAsIG1fYmxvYlVS
THMoYmxvYlVSTHMpCi0gICAgICAgICwgbV9lbXB0eUlkZW50aWZpZXIoSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyhleGVjLCBlbXB0eVN0cmluZygpKSkKKyAgICAgICAgLCBtX2VtcHR5SWRlbnRpZmll
cihJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMtPnZtKCksIGVtcHR5U3RyaW5nKCkpKQogICAg
ICAgICAsIG1fY29udGV4dChjb250ZXh0KQogICAgICAgICAsIG1fc2hhcmVkQnVmZmVycyhzaGFy
ZWRCdWZmZXJzKQogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKQEAgLTEyNTcsNyArMTI1Nyw3IEBA
IHByaXZhdGU6CiAgICAgICAgIGlmIChzdHIuaXNOdWxsKCkpCiAgICAgICAgICAgICB3cml0ZSht
X2VtcHR5SWRlbnRpZmllcik7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHdyaXRlKElkZW50
aWZpZXI6OmZyb21TdHJpbmcobV9leGVjLCBzdHIpKTsKKyAgICAgICAgICAgIHdyaXRlKElkZW50
aWZpZXI6OmZyb21TdHJpbmcobV9leGVjLT52bSgpLCBzdHIpKTsKICAgICB9CiAKICAgICB2b2lk
IHdyaXRlKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgdmVjdG9yKQpAQCAtMTUxOCw3ICsxNTE4LDcg
QEAgU2VyaWFsaXphdGlvblJldHVybkNvZGUgQ2xvbmVTZXJpYWxpemVyOgogICAgICAgICAgICAg
ICAgICAgICBpbmRleFN0YWNrLnJlbW92ZUxhc3QoKTsKICAgICAgICAgICAgICAgICAgICAgbGVu
Z3RoU3RhY2sucmVtb3ZlTGFzdCgpOwogCi0gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5U3Rh
Y2suYXBwZW5kKFByb3BlcnR5TmFtZUFycmF5KCZ2bSwgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5n
cywgUHJpdmF0ZVN5bWJvbE1vZGU6OkV4Y2x1ZGUpKTsKKyAgICAgICAgICAgICAgICAgICAgcHJv
cGVydHlTdGFjay5hcHBlbmQoUHJvcGVydHlOYW1lQXJyYXkodm0sIFByb3BlcnR5TmFtZU1vZGU6
OlN0cmluZ3MsIFByaXZhdGVTeW1ib2xNb2RlOjpFeGNsdWRlKSk7CiAgICAgICAgICAgICAgICAg
ICAgIGFycmF5LT5tZXRob2RUYWJsZSh2bSktPmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhh
cnJheSwgbV9leGVjLCBwcm9wZXJ0eVN0YWNrLmxhc3QoKSwgRW51bWVyYXRpb25Nb2RlKCkpOwog
ICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydHlTdGFjay5sYXN0KCkuc2l6ZSgpKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICB3cml0ZShOb25JbmRleFByb3BlcnRpZXNUYWcpOwpAQCAt
MTU2OCw3ICsxNTY4LDcgQEAgU2VyaWFsaXphdGlvblJldHVybkNvZGUgQ2xvbmVTZXJpYWxpemVy
OgogICAgICAgICAgICAgICAgICAgICByZXR1cm4gU2VyaWFsaXphdGlvblJldHVybkNvZGU6OkRh
dGFDbG9uZUVycm9yOwogICAgICAgICAgICAgICAgIGlucHV0T2JqZWN0U3RhY2suYXBwZW5kKGlu
T2JqZWN0KTsKICAgICAgICAgICAgICAgICBpbmRleFN0YWNrLmFwcGVuZCgwKTsKLSAgICAgICAg
ICAgICAgICBwcm9wZXJ0eVN0YWNrLmFwcGVuZChQcm9wZXJ0eU5hbWVBcnJheSgmdm0sIFByb3Bl
cnR5TmFtZU1vZGU6OlN0cmluZ3MsIFByaXZhdGVTeW1ib2xNb2RlOjpFeGNsdWRlKSk7CisgICAg
ICAgICAgICAgICAgcHJvcGVydHlTdGFjay5hcHBlbmQoUHJvcGVydHlOYW1lQXJyYXkodm0sIFBy
b3BlcnR5TmFtZU1vZGU6OlN0cmluZ3MsIFByaXZhdGVTeW1ib2xNb2RlOjpFeGNsdWRlKSk7CiAg
ICAgICAgICAgICAgICAgaW5PYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVydHlO
YW1lcyhpbk9iamVjdCwgbV9leGVjLCBwcm9wZXJ0eVN0YWNrLmxhc3QoKSwgRW51bWVyYXRpb25N
b2RlKCkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgb2JqZWN0U3RhcnRWaXNpdE1lbWJl
cjoKQEAgLTE2MzYsNyArMTYzNiw3IEBAIFNlcmlhbGl6YXRpb25SZXR1cm5Db2RlIENsb25lU2Vy
aWFsaXplcjoKICAgICAgICAgICAgICAgICAgICAgbWFwSXRlcmF0b3JTdGFjay5yZW1vdmVMYXN0
KCk7CiAgICAgICAgICAgICAgICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBpbnB1dE9iamVjdFN0
YWNrLmxhc3QoKTsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGpzRHluYW1pY0Nhc3Q8SlNN
YXAqPih2bSwgb2JqZWN0KSk7Ci0gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5U3RhY2suYXBw
ZW5kKFByb3BlcnR5TmFtZUFycmF5KCZ2bSwgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5ncywgUHJp
dmF0ZVN5bWJvbE1vZGU6OkV4Y2x1ZGUpKTsKKyAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlT
dGFjay5hcHBlbmQoUHJvcGVydHlOYW1lQXJyYXkodm0sIFByb3BlcnR5TmFtZU1vZGU6OlN0cmlu
Z3MsIFByaXZhdGVTeW1ib2xNb2RlOjpFeGNsdWRlKSk7CiAgICAgICAgICAgICAgICAgICAgIG9i
amVjdC0+bWV0aG9kVGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgbV9leGVj
LCBwcm9wZXJ0eVN0YWNrLmxhc3QoKSwgRW51bWVyYXRpb25Nb2RlKCkpOwogICAgICAgICAgICAg
ICAgICAgICB3cml0ZShOb25NYXBQcm9wZXJ0aWVzVGFnKTsKICAgICAgICAgICAgICAgICAgICAg
aW5kZXhTdGFjay5hcHBlbmQoMCk7CkBAIC0xNjgwLDcgKzE2ODAsNyBAQCBTZXJpYWxpemF0aW9u
UmV0dXJuQ29kZSBDbG9uZVNlcmlhbGl6ZXI6CiAgICAgICAgICAgICAgICAgICAgIHNldEl0ZXJh
dG9yU3RhY2sucmVtb3ZlTGFzdCgpOwogICAgICAgICAgICAgICAgICAgICBKU09iamVjdCogb2Jq
ZWN0ID0gaW5wdXRPYmplY3RTdGFjay5sYXN0KCk7CiAgICAgICAgICAgICAgICAgICAgIEFTU0VS
VChqc0R5bmFtaWNDYXN0PEpTU2V0Kj4odm0sIG9iamVjdCkpOwotICAgICAgICAgICAgICAgICAg
ICBwcm9wZXJ0eVN0YWNrLmFwcGVuZChQcm9wZXJ0eU5hbWVBcnJheSgmdm0sIFByb3BlcnR5TmFt
ZU1vZGU6OlN0cmluZ3MsIFByaXZhdGVTeW1ib2xNb2RlOjpFeGNsdWRlKSk7CisgICAgICAgICAg
ICAgICAgICAgIHByb3BlcnR5U3RhY2suYXBwZW5kKFByb3BlcnR5TmFtZUFycmF5KHZtLCBQcm9w
ZXJ0eU5hbWVNb2RlOjpTdHJpbmdzLCBQcml2YXRlU3ltYm9sTW9kZTo6RXhjbHVkZSkpOwogICAg
ICAgICAgICAgICAgICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVydHlO
YW1lcyhvYmplY3QsIG1fZXhlYywgcHJvcGVydHlTdGFjay5sYXN0KCksIEVudW1lcmF0aW9uTW9k
ZSgpKTsKICAgICAgICAgICAgICAgICAgICAgd3JpdGUoTm9uU2V0UHJvcGVydGllc1RhZyk7CiAg
ICAgICAgICAgICAgICAgICAgIGluZGV4U3RhY2suYXBwZW5kKDApOwpAQCAtMTc3Nyw3ICsxNzc3
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgSlNWYWx1ZSBqc1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMp
CiAgICAgICAgIHsKICAgICAgICAgICAgIGlmICghbV9qc1N0cmluZykKLSAgICAgICAgICAgICAg
ICBtX2pzU3RyaW5nID0gSlNDOjpqc1N0cmluZyhleGVjLCBtX3N0cmluZyk7CisgICAgICAgICAg
ICAgICAgbV9qc1N0cmluZyA9IEpTQzo6anNTdHJpbmcoZXhlYy0+dm0oKSwgbV9zdHJpbmcpOwog
ICAgICAgICAgICAgcmV0dXJuIG1fanNTdHJpbmc7CiAgICAgICAgIH0KICAgICAgICAgY29uc3Qg
U3RyaW5nJiBzdHJpbmcoKSB7IHJldHVybiBtX3N0cmluZzsgfQpAQCAtMjg2Niw3ICsyODY2LDcg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybiBjYWNoZWRTdHJpbmctPmpzU3RyaW5nKG1f
ZXhlYyk7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBFbXB0eVN0cmluZ1RhZzoKLSAgICAgICAg
ICAgIHJldHVybiBqc0VtcHR5U3RyaW5nKCZtX2V4ZWMtPnZtKCkpOworICAgICAgICAgICAgcmV0
dXJuIGpzRW1wdHlTdHJpbmcobV9leGVjLT52bSgpKTsKICAgICAgICAgY2FzZSBTdHJpbmdPYmpl
Y3RUYWc6IHsKICAgICAgICAgICAgIENhY2hlZFN0cmluZ1JlZiBjYWNoZWRTdHJpbmc7CiAgICAg
ICAgICAgICBpZiAoIXJlYWRTdHJpbmdEYXRhKGNhY2hlZFN0cmluZykpCkBAIC0yODc3LDcgKzI4
NzcsNyBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgICAgIGNhc2UgRW1wdHlTdHJpbmdPYmpl
Y3RUYWc6IHsKICAgICAgICAgICAgIFZNJiB2bSA9IG1fZXhlYy0+dm0oKTsKLSAgICAgICAgICAg
IFN0cmluZ09iamVjdCogb2JqID0gY29uc3RydWN0U3RyaW5nKHZtLCBtX2dsb2JhbE9iamVjdCwg
anNFbXB0eVN0cmluZygmdm0pKTsKKyAgICAgICAgICAgIFN0cmluZ09iamVjdCogb2JqID0gY29u
c3RydWN0U3RyaW5nKHZtLCBtX2dsb2JhbE9iamVjdCwganNFbXB0eVN0cmluZyh2bSkpOwogICAg
ICAgICAgICAgbV9nY0J1ZmZlci5hcHBlbmRXaXRoQ3Jhc2hPbk92ZXJmbG93KG9iaik7CiAgICAg
ICAgICAgICByZXR1cm4gb2JqOwogICAgICAgICB9CkBAIC0zMTYyLDExICszMTYyLDExIEBAIERl
c2VyaWFsaXphdGlvblJlc3VsdCBDbG9uZURlc2VyaWFsaXplcjoKICAgICAgICAgICAgIH0KIAog
ICAgICAgICAgICAgaWYgKEpTVmFsdWUgdGVybWluYWwgPSByZWFkVGVybWluYWwoKSkgewotICAg
ICAgICAgICAgICAgIHB1dFByb3BlcnR5KG91dHB1dE9iamVjdFN0YWNrLmxhc3QoKSwgSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZyhtX2V4ZWMsIGNhY2hlZFN0cmluZy0+c3RyaW5nKCkpLCB0ZXJtaW5h
bCk7CisgICAgICAgICAgICAgICAgcHV0UHJvcGVydHkob3V0cHV0T2JqZWN0U3RhY2subGFzdCgp
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBjYWNoZWRTdHJpbmctPnN0cmluZygpKSwgdGVy
bWluYWwpOwogICAgICAgICAgICAgICAgIGdvdG8gb2JqZWN0U3RhcnRWaXNpdE1lbWJlcjsKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIHN0YXRlU3RhY2suYXBwZW5kKE9iamVjdEVuZFZpc2l0
TWVtYmVyKTsKLSAgICAgICAgICAgIHByb3BlcnR5TmFtZVN0YWNrLmFwcGVuZChJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKG1fZXhlYywgY2FjaGVkU3RyaW5nLT5zdHJpbmcoKSkpOworICAgICAgICAg
ICAgcHJvcGVydHlOYW1lU3RhY2suYXBwZW5kKElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIGNh
Y2hlZFN0cmluZy0+c3RyaW5nKCkpKTsKICAgICAgICAgICAgIGdvdG8gc3RhdGVVbmtub3duOwog
ICAgICAgICB9CiAgICAgICAgIGNhc2UgT2JqZWN0RW5kVmlzaXRNZW1iZXI6IHsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVCdWlsdGluTmFtZXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlQnVpbHRpbk5hbWVzLmgJKHJl
dmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVCdWls
dGluTmFtZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJp
Z2h0IChjKSAyMDE1LCBDYW5vbiBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAgQ29weXJp
Z2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmln
aHQgKEMpIDIwMTgtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzYwLDggKzM2MCw4IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogY2xhc3MgV2ViQ29yZUJ1aWx0aW5OYW1lcyB7CiBwdWJsaWM6Ci0gICAgZXhw
bGljaXQgV2ViQ29yZUJ1aWx0aW5OYW1lcyhKU0M6OlZNKiB2bSkKLSAgICAgICAgOiBtX3ZtKCp2
bSkKKyAgICBleHBsaWNpdCBXZWJDb3JlQnVpbHRpbk5hbWVzKEpTQzo6Vk0mIHZtKQorICAgICAg
ICA6IG1fdm0odm0pCiAgICAgICAgIFdFQkNPUkVfQ09NTU9OX1BSSVZBVEVfSURFTlRJRklFUlNf
RUFDSF9QUk9QRVJUWV9OQU1FKElOSVRJQUxJWkVfQlVJTFRJTl9OQU1FUykKICAgICB7CiAjZGVm
aW5lIEVYUE9SVF9OQU1FKG5hbWUpIG1fdm0ucHJvcGVydHlOYW1lcy0+YXBwZW5kRXh0ZXJuYWxO
YW1lKG5hbWUjI1B1YmxpY05hbWUoKSwgbmFtZSMjUHJpdmF0ZU5hbWUoKSk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlSlNDbGllbnREYXRhLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlSlNDbGllbnREYXRhLmNwcAko
cmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZUpT
Q2xpZW50RGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDIsNyArNDIsNyBAQCB1c2luZyBuYW1lc3Bh
Y2UgSlNDOwogCiBKU1ZNQ2xpZW50RGF0YTo6SlNWTUNsaWVudERhdGEoVk0mIHZtKQogICAgIDog
bV9idWlsdGluRnVuY3Rpb25zKHZtKQotICAgICwgbV9idWlsdGluTmFtZXMoJnZtKQorICAgICwg
bV9idWlsdGluTmFtZXModm0pCiAgICAgLCBtX3J1bnRpbWVNZXRob2RTcGFjZSBJU09fU1VCU1BB
Q0VfSU5JVCh2bS5oZWFwLCB2bS5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuZ2V0KCks
IFJ1bnRpbWVNZXRob2QpIC8vIEhhc2g6MHhmNzBjNGE4NQogICAgICwgbV9vdXRwdXRDb25zdHJh
aW50U3BhY2UoIldlYkNvcmUgV3JhcHBlciB3LyBPdXRwdXQgQ29uc3RyYWludCIsIHZtLmhlYXAs
IHZtLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5nZXQoKSwgdm0uZmFzdE1hbGxvY0Fs
bG9jYXRvci5nZXQoKSkgLy8gSGFzaDoweDc3MjRjMmU0CiAgICAgLCBtX2dsb2JhbE9iamVjdE91
dHB1dENvbnN0cmFpbnRTcGFjZSgiV2ViQ29yZSBHbG9iYWwgT2JqZWN0IHcvIE91dHB1dCBDb25z
dHJhaW50Iiwgdm0uaGVhcCwgdm0uY2VsbEhlYXBDZWxsVHlwZS5nZXQoKSwgdm0uZmFzdE1hbGxv
Y0FsbG9jYXRvci5nZXQoKSkgLy8gSGFzaDoweDUyMmQ2ZWM5CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9XaW5kb3dQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvV2luZG93UHJveHkuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XaW5kb3dQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNyArMSw3IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAxIEhhcnJpIFBvcnRl
biAocG9ydGVuQGtkZS5vcmcpCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxIFBldGVyIEtlbGx5IChw
bWtAcG9zdC5jb20pCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE5IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTEzOSw3ICsxMzks
NyBAQCB2b2lkIFdpbmRvd1Byb3h5OjpjbGVhckpTV2luZG93UHJveGllc05vCiAgICAgICAgIC8v
IENsZWFyIHRoZSBkZWJ1Z2dlciBhbmQgY29uc29sZSBmcm9tIHRoZSBjdXJyZW50IHdpbmRvdyBi
ZWZvcmUgc2V0dGluZyB0aGUgbmV3IHdpbmRvdy4KICAgICAgICAgd2luZG93UHJveHktPmF0dGFj
aERlYnVnZ2VyKG51bGxwdHIpOwogICAgICAgICB3aW5kb3dQcm94eS0+d2luZG93KCktPnNldENv
bnNvbGVDbGllbnQobnVsbHB0cik7Ci0gICAgICAgIGlmIChhdXRvKiBqc0RPTVdpbmRvdyA9IGpz
RHluYW1pY0Nhc3Q8SlNET01XaW5kb3dCYXNlKj4oKndpbmRvd1Byb3h5LT52bSgpLCB3aW5kb3dQ
cm94eS0+d2luZG93KCkpKQorICAgICAgICBpZiAoYXV0byoganNET01XaW5kb3cgPSBqc0R5bmFt
aWNDYXN0PEpTRE9NV2luZG93QmFzZSo+KHdpbmRvd1Byb3h5LT52bSgpLCB3aW5kb3dQcm94eS0+
d2luZG93KCkpKQogICAgICAgICAgICAganNET01XaW5kb3ctPndpbGxSZW1vdmVGcm9tV2luZG93
UHJveHkoKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
Q29kZUdlbmVyYXRvckpTLnBtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkod29ya2luZyBjb3B5
KQpAQCAtNzI3LDIwICs3MjcsMjMgQEAgc3ViIEdlbmVyYXRlR2V0T3duUHJvcGVydHlTbG90QnlJ
bmRleAogICAgIG15ICRwcm9wZXJ0eU5hbWVHZW5lcmF0aW9uID0gc3ViIHsKICAgICAgICAgcmV0
dXJuIGlmICRkaWRHZW5lcmF0ZVByb3BlcnR5TmFtZTsKICAgICAgICAgCi0gICAgICAgIHB1c2go
QCRvdXRwdXRBcnJheSwgIiAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb20o
c3RhdGUsIGluZGV4KTtcbiIpOworICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgYXV0
byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tKHZtLCBpbmRleCk7XG4iKTsKICAgICAg
ICAgJGRpZEdlbmVyYXRlUHJvcGVydHlOYW1lID0gMTsKICAgICB9OwogICAgIAorICAgIG15ICRu
YW1lZEdldHRlck9wZXJhdGlvbiA9IEdldE5hbWVkR2V0dGVyT3BlcmF0aW9uKCRpbnRlcmZhY2Up
OworICAgIG15ICRpbmRleGVkR2V0dGVyT3BlcmF0aW9uID0gR2V0SW5kZXhlZEdldHRlck9wZXJh
dGlvbigkaW50ZXJmYWNlKTsKKyAgICAKICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJib29sICR7
Y2xhc3NOYW1lfTo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU09iamVjdCogb2JqZWN0LCBF
eGVjU3RhdGUqIHN0YXRlLCB1bnNpZ25lZCBpbmRleCwgUHJvcGVydHlTbG90JiBzbG90KVxuIik7
CiAgICAgcHVzaChAJG91dHB1dEFycmF5LCAie1xuIik7CisgICAgaWYgKCRuYW1lZEdldHRlck9w
ZXJhdGlvbiB8fCAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntQbHVnaW59KSB7Cisg
ICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTtcbiIp
OworICAgIH0KICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgYXV0byogdGhpc09iamVjdCA9
IGpzQ2FzdDwke2NsYXNzTmFtZX0qPihvYmplY3QpO1xuIik7CiAgICAgcHVzaChAJG91dHB1dEFy
cmF5LCAiICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTtc
biIpOwogICAgIAotICAgIG15ICRuYW1lZEdldHRlck9wZXJhdGlvbiA9IEdldE5hbWVkR2V0dGVy
T3BlcmF0aW9uKCRpbnRlcmZhY2UpOwotICAgIG15ICRpbmRleGVkR2V0dGVyT3BlcmF0aW9uID0g
R2V0SW5kZXhlZEdldHRlck9wZXJhdGlvbigkaW50ZXJmYWNlKTsKLSAgICAKICAgICBpZiAoKCRu
YW1lZEdldHRlck9wZXJhdGlvbiAmJiAkbmFtZWRHZXR0ZXJPcGVyYXRpb24tPmV4dGVuZGVkQXR0
cmlidXRlcy0+e01heVRocm93RXhjZXB0aW9ufSkgfHwgKCRpbmRleGVkR2V0dGVyT3BlcmF0aW9u
ICYmICRpbmRleGVkR2V0dGVyT3BlcmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntNYXlUaHJv
d0V4Y2VwdGlvbn0pKSB7Ci0gICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHN0YXRlLT52bSgpKTtcbiIpOworICAgICAg
ICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7XG4iKTsKICAgICB9CiAgICAgCiAgICAgIyBOT1RFOiBUaGUgYWxvZ2l0aG0g
Zm9yIFtbR2V0T3duUHJvcGVydHldXSBjb250YWlucyBvbmx5IHRoZSBmb2xsb3dpbmcgc3RlcDoK
QEAgLTgzNiw2ICs4MzksOSBAQCBzdWIgR2VuZXJhdGVHZXRPd25Qcm9wZXJ0eU5hbWVzCiAgICAg
CiAgICAgcHVzaChAJG91dHB1dEFycmF5LCAidm9pZCAke2NsYXNzTmFtZX06OmdldE93blByb3Bl
cnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBzdGF0ZSwgUHJvcGVydHlOYW1l
QXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKVxuIik7CiAgICAgcHVz
aChAJG91dHB1dEFycmF5LCAie1xuIik7CisgICAgaWYgKCRpbmRleGVkR2V0dGVyT3BlcmF0aW9u
IHx8ICRuYW1lZEdldHRlck9wZXJhdGlvbikgeworICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXks
ICIgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7XG4iKTsKKyAgICB9CiAgICAgcHVzaChAJG91dHB1
dEFycmF5LCAiICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8JHtjbGFzc05hbWV9Kj4ob2Jq
ZWN0KTtcbiIpOwogICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBBU1NFUlRfR0NfT0JKRUNU
X0lOSEVSSVRTKG9iamVjdCwgaW5mbygpKTtcbiIpOwogICAgIApAQCAtODQ0LDcgKzg1MCw3IEBA
IHN1YiBHZW5lcmF0ZUdldE93blByb3BlcnR5TmFtZXMKICAgICAjIEZJWE1FOiBUaGlzIHNob3Vs
ZCBzdXBwb3J0IG5vbi1jb250aWd1b3VzIGluZGljZXMuCiAgICAgaWYgKCRpbmRleGVkR2V0dGVy
T3BlcmF0aW9uKSB7CiAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwLCBjb3VudCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKS5sZW5ndGgoKTsgaSA8IGNv
dW50OyArK2kpXG4iKTsKLSAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICBwcm9w
ZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9tKHN0YXRlLCBpKSk7XG4iKTsKKyAgICAgICAg
cHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVy
Ojpmcm9tKHZtLCBpKSk7XG4iKTsKICAgICB9CiAKICAgICAjIDIuIElmIHRoZSBvYmplY3Qgc3Vw
cG9ydHMgbmFtZWQgcHJvcGVydGllcyBhbmQgZG9lc27igJl0IGltcGxlbWVudCBhbiBpbnRlcmZh
Y2UKQEAgLTg1NSwxMSArODYxLDExIEBAIHN1YiBHZW5lcmF0ZUdldE93blByb3BlcnR5TmFtZXMK
ICAgICBpZiAoJG5hbWVkR2V0dGVyT3BlcmF0aW9uKSB7CiAgICAgICAgIGlmICghJGludGVyZmFj
ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57TGVnYWN5VW5lbnVtZXJhYmxlTmFtZWRQcm9wZXJ0aWVz
fSkgewogICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGZvciAoYXV0byYgcHJv
cGVydHlOYW1lIDogdGhpc09iamVjdC0+d3JhcHBlZCgpLnN1cHBvcnRlZFByb3BlcnR5TmFtZXMo
KSlcbiIpOwotICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICBwcm9wZXJ0
eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHN0YXRlLCBwcm9wZXJ0eU5hbWUpKTtc
biIpOworICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICBwcm9wZXJ0eU5h
bWVzLmFkZChJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBwcm9wZXJ0eU5hbWUpKTtcbiIpOwog
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGlm
IChtb2RlLmluY2x1ZGVEb250RW51bVByb3BlcnRpZXMoKSkge1xuIik7CiAgICAgICAgICAgICBw
dXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgIGZvciAoYXV0byYgcHJvcGVydHlOYW1lIDogdGhp
c09iamVjdC0+d3JhcHBlZCgpLnN1cHBvcnRlZFByb3BlcnR5TmFtZXMoKSlcbiIpOwotICAgICAg
ICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQo
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyhzdGF0ZSwgcHJvcGVydHlOYW1lKSk7XG4iKTsKKyAgICAg
ICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRk
KElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHByb3BlcnR5TmFtZSkpO1xuIik7CiAgICAgICAg
ICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgfVxuIik7CiAgICAgICAgIH0KICAgICB9CkBA
IC0xMDA2LDYgKzEwMTIsOSBAQCBzdWIgR2VuZXJhdGVQdXRCeUluZGV4CiAgICAgCiAgICAgcHVz
aChAJG91dHB1dEFycmF5LCAiYm9vbCAke2NsYXNzTmFtZX06OnB1dEJ5SW5kZXgoSlNDZWxsKiBj
ZWxsLCBFeGVjU3RhdGUqIHN0YXRlLCB1bnNpZ25lZCBpbmRleCwgSlNWYWx1ZSB2YWx1ZSwgYm9v
bCIgLiAoISRlbGxpZGVzQ2FsbHNUb0Jhc2UgPyAiIHNob3VsZFRocm93IiA6ICIiKSAuICIpXG4i
KTsKICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJ7XG4iKTsKKyAgICBpZiAoJG5hbWVkU2V0dGVy
T3BlcmF0aW9uIHx8ICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+e1BsdWdpbn0pIHsK
KyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpO1xu
Iik7CisgICAgfQogICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBhdXRvKiB0aGlzT2JqZWN0
ID0ganNDYXN0PCR7Y2xhc3NOYW1lfSo+KGNlbGwpO1xuIik7CiAgICAgcHVzaChAJG91dHB1dEFy
cmF5LCAiICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTtc
blxuIik7CiAKQEAgLTEwMTgsNyArMTAyNyw3IEBAIHN1YiBHZW5lcmF0ZVB1dEJ5SW5kZXgKICAg
ICAgICAgR2VuZXJhdGVDdXN0b21FbGVtZW50UmVhY3Rpb25zU3RhY2tJZk5lZWRlZCgkb3V0cHV0
QXJyYXksICRpbmRleGVkU2V0dGVyT3BlcmF0aW9uLCAiKnN0YXRlIik7CiAgICAgfQogICAgIAot
ICAgIGlmICgkaW5kZXhlZFNldHRlck9wZXJhdGlvbiApIHsKKyAgICBpZiAoJGluZGV4ZWRTZXR0
ZXJPcGVyYXRpb24pIHsKICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGlmIChMSUtF
TFkoaW5kZXggPD0gTUFYX0FSUkFZX0lOREVYKSkge1xuIik7CiAgICAgICAgIAogICAgICAgICBH
ZW5lcmF0ZUludm9rZUluZGV4ZWRQcm9wZXJ0eVNldHRlcigkb3V0cHV0QXJyYXksICIgICAgICAg
ICIsICRpbnRlcmZhY2UsICRpbmRleGVkU2V0dGVyT3BlcmF0aW9uLCAiaW5kZXgiLCAidmFsdWUi
KTsKQEAgLTEwMjgsMTIgKzEwMzcsMTIgQEAgc3ViIEdlbmVyYXRlUHV0QnlJbmRleAogICAgIH0K
ICAgICAKICAgICBpZiAoJG5hbWVkU2V0dGVyT3BlcmF0aW9uKSB7Ci0gICAgICAgIHB1c2goQCRv
dXRwdXRBcnJheSwgIiAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb20oc3Rh
dGUsIGluZGV4KTtcbiIpOworICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgYXV0byBw
cm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tKHZtLCBpbmRleCk7XG4iKTsKICAgICAgICAg
ICAgICAgICAKICAgICAgICAgbXkgJGFkZGl0aW9uYWxJbmRlbnQgPSAiIjsKICAgICAgICAgaWYg
KCEkb3ZlcnJpZGVCdWlsdGlucykgewogICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAi
ICAgIFByb3BlcnR5U2xvdCBzbG90IHsgdGhpc09iamVjdCwgUHJvcGVydHlTbG90OjpJbnRlcm5h
bE1ldGhvZFR5cGU6OlZNSW5xdWlyeSB9O1xuIik7Ci0gICAgICAgICAgICBwdXNoKEAkb3V0cHV0
QXJyYXksICIgICAgSlNWYWx1ZSBwcm90b3R5cGUgPSB0aGlzT2JqZWN0LT5nZXRQcm90b3R5cGVE
aXJlY3Qoc3RhdGUtPnZtKCkpO1xuIik7CisgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXks
ICIgICAgSlNWYWx1ZSBwcm90b3R5cGUgPSB0aGlzT2JqZWN0LT5nZXRQcm90b3R5cGVEaXJlY3Qo
dm0pO1xuIik7CiAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgaWYgKCEocHJv
dG90eXBlLmlzT2JqZWN0KCkgJiYgYXNPYmplY3QocHJvdG90eXBlKS0+Z2V0UHJvcGVydHlTbG90
KHN0YXRlLCBwcm9wZXJ0eU5hbWUsIHNsb3QpKSkge1xuIik7CiAgICAgICAgICAgICAkYWRkaXRp
b25hbEluZGVudCAuPSAiICAgICI7CiAgICAgICAgIH0KQEAgLTEwNTMsNyArMTA2Miw3IEBAIHN1
YiBHZW5lcmF0ZVB1dEJ5SW5kZXgKICAgICBhc3NlcnQoIlVzaW5nIGJvdGggYSBuYW1lZCBwcm9w
ZXJ0eSBzZXR0ZXIgYW5kIFtQbHVnaW5dIHRvZ2V0aGVyIGlzIG5vdCBzdXBwb3J0ZWQuIikgaWYg
JG5hbWVkU2V0dGVyT3BlcmF0aW9uICYmICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+
e1BsdWdpbn07CiAgICAgaWYgKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+e1BsdWdp
bn0pIHsKICAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIkpTUGx1Z2luRWxlbWVudEZ1bmN0aW9u
cy5oIik7Ci0gICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBhdXRvIHByb3BlcnR5TmFt
ZSA9IElkZW50aWZpZXI6OmZyb20oc3RhdGUsIGluZGV4KTtcbiIpOworICAgICAgICBwdXNoKEAk
b3V0cHV0QXJyYXksICIgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tKHZt
LCBpbmRleCk7XG4iKTsKICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIFB1dFByb3Bl
cnR5U2xvdCBwdXRQcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgc2hvdWxkVGhyb3cpO1xuIik7CiAg
ICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBib29sIHB1dFJlc3VsdCA9IGZhbHNlO1xu
Iik7CiAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBpZiAocGx1Z2luRWxlbWVudEN1
c3RvbVB1dCh0aGlzT2JqZWN0LCBzdGF0ZSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgcHV0UHJvcGVy
dHlTbG90LCBwdXRSZXN1bHQpKVxuIik7CkBAIC0xMzQxLDcgKzEzNTAsOCBAQCBzdWIgR2VuZXJh
dGVEZWxldGVQcm9wZXJ0eUJ5SW5kZXgKICAgICBpZiAoR2V0SW5kZXhlZEdldHRlck9wZXJhdGlv
bigkaW50ZXJmYWNlKSkgewogICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgcmV0dXJu
ICFpbXBsLmlzU3VwcG9ydGVkUHJvcGVydHlJbmRleChpbmRleCk7XG4iKTsKICAgICB9IGVsc2Ug
ewotICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJ
ZGVudGlmaWVyOjpmcm9tKHN0YXRlLCBpbmRleCk7XG4iKTsKKyAgICAgICAgcHVzaChAJG91dHB1
dEFycmF5LCAiICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpO1xuIik7CisgICAgICAgIHB1c2goQCRv
dXRwdXRBcnJheSwgIiAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb20odm0s
IGluZGV4KTtcbiIpOwogCiAgICAgICAgICMgR2VuZXJhdGVEZWxldGVQcm9wZXJ0eUNvbW1vbiBp
bXBsZW1lbnRzIHN0ZXAgMi4KICAgICAgICAgR2VuZXJhdGVEZWxldGVQcm9wZXJ0eUNvbW1vbigk
b3V0cHV0QXJyYXksICRpbnRlcmZhY2UsICRjbGFzc05hbWUsICRvcGVyYXRpb24sICRjb25kaXRp
b25hbCk7CkBAIC0yMzQ3LDcgKzIzNTcsNyBAQCBzdWIgR2VuZXJhdGVEaWN0aW9uYXJ5SW1wbGVt
ZW50YXRpb25Db250CiAgICAgICAgICAgICAkcmVzdWx0IC49ICIgICAgaWYgKGlzTnVsbE9yVW5k
ZWZpbmVkKVxuIjsKICAgICAgICAgICAgICRyZXN1bHQgLj0gIiAgICAgICAgJHtrZXl9VmFsdWUg
PSBqc1VuZGVmaW5lZCgpO1xuIjsKICAgICAgICAgICAgICRyZXN1bHQgLj0gIiAgICBlbHNlIHtc
biI7Ci0gICAgICAgICAgICAkcmVzdWx0IC49ICIgICAgICAgICR7a2V5fVZhbHVlID0gb2JqZWN0
LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgXCIke2tleX1cIikp
O1xuIjsKKyAgICAgICAgICAgICRyZXN1bHQgLj0gIiAgICAgICAgJHtrZXl9VmFsdWUgPSBvYmpl
Y3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIFwiJHtrZXl9XCIpKTtc
biI7CiAgICAgICAgICAgICAkcmVzdWx0IC49ICIgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgeyB9KTtcbiI7CiAgICAgICAgICAgICAkcmVzdWx0IC49ICIgICAgfVxuIjsK
IApAQCAtMjQzMywxMyArMjQ0MywxMyBAQCBzdWIgR2VuZXJhdGVEaWN0aW9uYXJ5SW1wbGVtZW50
YXRpb25Db250CiAKICAgICAgICAgICAgICAgICAgICAgJHJlc3VsdCAuPSAiJHtpbmRlbnR9ICAg
IGlmICghJHtJRExUeXBlfTo6aXNOdWxsVmFsdWUoJHt2YWx1ZUV4cHJlc3Npb259KSkge1xuIjsK
ICAgICAgICAgICAgICAgICAgICAgJHJlc3VsdCAuPSAiJHtpbmRlbnR9ICAgICAgICBhdXRvICR7
a2V5fVZhbHVlID0gJHtjb252ZXJzaW9uRXhwcmVzc2lvbn07XG4iOwotICAgICAgICAgICAgICAg
ICAgICAkcmVzdWx0IC49ICIke2luZGVudH0gICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBK
U0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCBcIiR7a2V5fVwiKSwgJHtrZXl9VmFsdWUp
O1xuIjsKKyAgICAgICAgICAgICAgICAgICAgJHJlc3VsdCAuPSAiJHtpbmRlbnR9ICAgICAgICBy
ZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBcIiR7
a2V5fVwiKSwgJHtrZXl9VmFsdWUpO1xuIjsKICAgICAgICAgICAgICAgICAgICAgJHJlc3VsdCAu
PSAiJHtpbmRlbnR9ICAgIH1cbiI7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgICAgICAgICAgbXkgJGNvbnZlcnNpb25FeHByZXNzaW9uID0gTmF0aXZlVG9KU1ZhbHVlVXNp
bmdSZWZlcmVuY2VzKCRtZW1iZXIsICR0eXBlU2NvcGUsICR2YWx1ZUV4cHJlc3Npb24sICJnbG9i
YWxPYmplY3QiKTsKIAogICAgICAgICAgICAgICAgICAgICAkcmVzdWx0IC49ICIke2luZGVudH0g
ICAgYXV0byAke2tleX1WYWx1ZSA9ICR7Y29udmVyc2lvbkV4cHJlc3Npb259O1xuIjsKLSAgICAg
ICAgICAgICAgICAgICAgJHJlc3VsdCAuPSAiJHtpbmRlbnR9ICAgIHJlc3VsdC0+cHV0RGlyZWN0
KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCBcIiR7a2V5fVwiKSwgJHtrZXl9
VmFsdWUpO1xuIjsKKyAgICAgICAgICAgICAgICAgICAgJHJlc3VsdCAuPSAiJHtpbmRlbnR9ICAg
IHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIFwi
JHtrZXl9XCIpLCAke2tleX1WYWx1ZSk7XG4iOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICBpZiAoJG5lZWRzUnVudGltZUNoZWNrKSB7CiAgICAgICAgICAgICAgICAgICAgICRy
ZXN1bHQgLj0gIiAgICB9XG4iOwpAQCAtMzgzNCw3ICszODQ0LDcgQEAgc3ViIGFkZFVuc2NvcGFi
bGVQcm9wZXJ0aWVzCiAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIjxKYXZhU2NyaXB0Q29yZS9PYmpl
Y3RDb25zdHJ1Y3Rvci5oPiIpOwogICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEpTT2JqZWN0
JiB1bnNjb3BhYmxlcyA9ICpjb25zdHJ1Y3RFbXB0eU9iamVjdChnbG9iYWxPYmplY3QoKS0+Z2xv
YmFsRXhlYygpLCBnbG9iYWxPYmplY3QoKS0+bnVsbFByb3RvdHlwZU9iamVjdFN0cnVjdHVyZSgp
KTtcbiIpOwogICAgIGZvcmVhY2ggbXkgJHVuc2NvcGFibGUgKEB1bnNjb3BhYmxlcykgewotICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICB1bnNjb3BhYmxlcy5wdXREaXJlY3Qodm0sIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCBcIiR1bnNjb3BhYmxlXCIpLCBqc0Jvb2xlYW4odHJ1
ZSkpO1xuIik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHVuc2NvcGFibGVzLnB1
dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgXCIkdW5zY29wYWJsZVwiKSwg
anNCb29sZWFuKHRydWUpKTtcbiIpOwogICAgIH0KICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+dW5zY29w
YWJsZXNTeW1ib2wsICZ1bnNjb3BhYmxlcywgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVu
dW0gfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSk7XG4iKTsKIH0KQEAgLTQyNjAs
NyArNDI3MCw3IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgICAgICBteSAk
bmFtZSA9ICRvcGVyYXRpb25PckF0dHJpYnV0ZS0+bmFtZTsKICAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgIGlmICghJHtydW50aW1lRW5hYmxlQ29uZGl0aW9uYWxTdHJpbmd9KSB7
XG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBoYXNEaXNhYmxl
ZFJ1bnRpbWVQcm9wZXJ0aWVzID0gdHJ1ZTtcbiIpOwotICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zygmdm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihcIiRuYW1lXCIpLCBzdHJsZW4o
XCIkbmFtZVwiKSk7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAg
ICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihcIiRuYW1lXCIpLCBzdHJsZW4oXCIkbmFtZVwiKSk7XG4i
KTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBWTTo6RGVsZXRlUHJv
cGVydHlNb2RlU2NvcGUgc2NvcGUodm0sIFZNOjpEZWxldGVQcm9wZXJ0eU1vZGU6Oklnbm9yZUNv
bmZpZ3VyYWJsZSk7XG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAg
ICBKU09iamVjdDo6ZGVsZXRlUHJvcGVydHkodGhpcywgZ2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4
ZWMoKSwgcHJvcGVydHlOYW1lKTtcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgfVxuIik7CkBAIC00NDk5LDEwICs0NTA5LDExIEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVu
dGF0aW9uCiAgICAgICAgIGlmICgkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntJbXBs
aWNpdFRoaXN9KSB7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgInRlbXBsYXRlPD4g
aW5saW5lICR7Y2xhc3NOYW1lfSogSURMQXR0cmlidXRlPCR7Y2xhc3NOYW1lfT46OmNhc3QoRXhl
Y1N0YXRlJiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlKVxuIik7CiAgICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgVk0mIHZtID0gc3RhdGUudm0oKTtcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgYXV0byBkZWNvZGVkVGhpc1ZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKHRo
aXNWYWx1ZSk7XG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmIChk
ZWNvZGVkVGhpc1ZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpXG4iKTsKICAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgICAgICBkZWNvZGVkVGhpc1ZhbHVlID0gc3RhdGUudGhpc1Zh
bHVlKCkudG9UaGlzKCZzdGF0ZSwgTm90U3RyaWN0TW9kZSk7XG4iKTsKLSAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiAkY2FzdGluZ0Z1bmN0aW9uKHN0YXRlLnZtKCks
IGRlY29kZWRUaGlzVmFsdWUpOyIpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIg
ICAgcmV0dXJuICRjYXN0aW5nRnVuY3Rpb24odm0sIGRlY29kZWRUaGlzVmFsdWUpOyIpOwogICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG5cbiIpOwogICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ0ZW1wbGF0ZTw+IGlubGluZSAke2NsYXNz
TmFtZX0qIElETEF0dHJpYnV0ZTwke2NsYXNzTmFtZX0+OjpjYXN0KEV4ZWNTdGF0ZSYgc3RhdGUs
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSlcbiIpOwpAQCAtNDk3OSw3ICs0OTkwLDEyIEBAIHN1
YiBHZW5lcmF0ZUF0dHJpYnV0ZVNldHRlckJvZHlEZWZpbml0aW8KICAgICAKICAgICBwdXNoKEAk
b3V0cHV0QXJyYXksICJzdGF0aWMgaW5saW5lIGJvb2wgJHthdHRyaWJ1dGVTZXR0ZXJCb2R5TmFt
ZX0oIiAuIGpvaW4oIiwgIiwgQHNpZ25hdHVyZUFyZ3VtZW50cykgLiAiKVxuIik7CiAgICAgcHVz
aChAJG91dHB1dEFycmF5LCAie1xuIik7Ci0gICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTtcbiIpOworICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAg
ICBVTlVTRURfUEFSQU0oc3RhdGUpO1xuIik7CisgICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5Jc0Nv
bnN0cnVjdG9yVHlwZSgkYXR0cmlidXRlLT50eXBlKSB8fCAkYXR0cmlidXRlLT5leHRlbmRlZEF0
dHJpYnV0ZXMtPntSZXBsYWNlYWJsZX0gfHwgJGF0dHJpYnV0ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
LT57UHV0Rm9yd2FyZHN9KSB7CisgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBWTSYg
dm0gPSB0aHJvd1Njb3BlLnZtKCk7XG4iKTsKKyAgICB9IGVsc2UgeworICAgICAgICBwdXNoKEAk
b3V0cHV0QXJyYXksICIgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpO1xuIik7CisgICAgfQog
CiAgICAgR2VuZXJhdGVDdXN0b21FbGVtZW50UmVhY3Rpb25zU3RhY2tJZk5lZWRlZCgkb3V0cHV0
QXJyYXksICRhdHRyaWJ1dGUsICJzdGF0ZSIpOwogCkBAIC01MDIzLDIxICs1MDM5LDIxIEBAIHN1
YiBHZW5lcmF0ZUF0dHJpYnV0ZVNldHRlckJvZHlEZWZpbml0aW8KICAgICAgICAgfQogICAgICAg
ICBteSAkaWQgPSAkYXR0cmlidXRlLT5uYW1lOwogICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXks
ICIgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuXG4iKTsKLSAgICAgICAg
cHVzaChAJG91dHB1dEFycmF5LCAiICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdChzdGF0
ZS52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZS52bSgpLCByZWludGVycHJldF9j
YXN0PGNvbnN0IExDaGFyKj4oXCIke2lkfVwiKSwgc3RybGVuKFwiJHtpZH1cIikpLCB2YWx1ZSk7
XG4iKTsKKyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIHJldHVybiB0aGlzT2JqZWN0
LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBMQ2hhcio+KFwiJHtpZH1cIiksIHN0cmxlbihcIiR7aWR9XCIpKSwgdmFsdWUpO1xu
Iik7CiAgICAgfSBlbHNpZiAoJGF0dHJpYnV0ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57UmVwbGFj
ZWFibGV9KSB7CiAgICAgICAgIG15ICRpZCA9ICRhdHRyaWJ1dGUtPm5hbWU7CiAgICAgICAgIHB1
c2goQCRvdXRwdXRBcnJheSwgIiAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBwcm9wZXJ0eS5c
biIpOwogICAgICAgICBpZiAoQXR0cmlidXRlU2hvdWxkQmVPbkluc3RhbmNlKCRpbnRlcmZhY2Us
ICRhdHRyaWJ1dGUpKSB7Ci0gICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgcmV0
dXJuIHJlcGxhY2VTdGF0aWNQcm9wZXJ0eVNsb3Qoc3RhdGUudm0oKSwgJnRoaXNPYmplY3QsIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLnZtKCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
TENoYXIqPihcIiR7aWR9XCIpLCBzdHJsZW4oXCIke2lkfVwiKSksIHZhbHVlKTtcbiIpOworICAg
ICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIHJldHVybiByZXBsYWNlU3RhdGljUHJv
cGVydHlTbG90KHZtLCAmdGhpc09iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVp
bnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KFwiJHtpZH1cIiksIHN0cmxlbihcIiR7aWR9XCIp
KSwgdmFsdWUpO1xuIik7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBwdXNoKEAkb3V0
cHV0QXJyYXksICIgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHN0YXRlLnZtKCksIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLnZtKCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
TENoYXIqPihcIiR7aWR9XCIpLCBzdHJsZW4oXCIke2lkfVwiKSksIHZhbHVlKTtcbiIpOworICAg
ICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERp
cmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25z
dCBMQ2hhcio+KFwiJHtpZH1cIiksIHN0cmxlbihcIiR7aWR9XCIpKSwgdmFsdWUpO1xuIik7CiAg
ICAgICAgIH0KICAgICB9IGVsc2lmICgkYXR0cmlidXRlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntQ
dXRGb3J3YXJkc30pIHsKICAgICAgICAgYXNzZXJ0KCJbUHV0Rm9yd2FyZHNdIGlzIG5vdCBjb21w
YXRpYmxlIHdpdGggc3RhdGljIGF0dHJpYnV0ZXMiKSBpZiAkYXR0cmlidXRlLT5pc1N0YXRpYzsK
ICAgICAgICAgCiAgICAgICAgICMgMy41LjkuMS4gTGV0IFEgYmUgPyBHZXQoTywgaWQpLgogICAg
ICAgICBteSAkaWQgPSAkYXR0cmlidXRlLT5uYW1lOwotICAgICAgICBwdXNoKEAkb3V0cHV0QXJy
YXksICIgICAgYXV0byBpZCA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLnZtKCksIHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihcIiR7aWR9XCIpLCBzdHJsZW4oXCIke2lkfVwi
KSk7XG4iKTsKKyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGF1dG8gaWQgPSBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oXCIk
e2lkfVwiKSwgc3RybGVuKFwiJHtpZH1cIikpO1xuIik7CiAgICAgICAgIHB1c2goQCRvdXRwdXRB
cnJheSwgIiAgICBhdXRvIHZhbHVlVG9Gb3J3YXJkVG8gPSB0aGlzT2JqZWN0LmdldCgmc3RhdGUs
IGlkKTtcbiIpOwogICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7XG4iKTsKICAgICAgICAgCkBAIC01MDQ5LDEzICs1
MDY1LDEzIEBAIHN1YiBHZW5lcmF0ZUF0dHJpYnV0ZVNldHRlckJvZHlEZWZpbml0aW8KICAgICAg
ICAgCiAgICAgICAgICMgMy41LjkuMy4gTGV0IGZvcndhcmRJZCBiZSB0aGUgaWRlbnRpZmllciBh
cmd1bWVudCBvZiB0aGUgW1B1dEZvcndhcmRzXSBleHRlbmRlZCBhdHRyaWJ1dGUuCiAgICAgICAg
IG15ICRmb3J3YXJkSWQgPSAkYXR0cmlidXRlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntQdXRGb3J3
YXJkc307Ci0gICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBhdXRvIGZvcndhcmRJZCA9
IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLnZtKCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgTENoYXIqPihcIiR7Zm9yd2FyZElkfVwiKSwgc3RybGVuKFwiJHtmb3J3YXJkSWR9XCIpKTtc
biIpOworICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgYXV0byBmb3J3YXJkSWQgPSBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4o
XCIke2ZvcndhcmRJZH1cIiksIHN0cmxlbihcIiR7Zm9yd2FyZElkfVwiKSk7XG4iKTsKICAgICAg
ICAgCiAgICAgICAgICMgMy41LjkuNC4gUGVyZm9ybSA/IFNldChRLCBmb3J3YXJkSWQsIFYpLgog
ICAgICAgICAjIEZJWE1FOiBXaGF0IHNob3VsZCB0aGUgc2Vjb25kIHZhbHVlIHRvIHRoZSBQdXRQ
cm9wZXJ0eVNsb3QgYmU/CiAgICAgICAgICMgKGh0dHBzOi8vZ2l0aHViLmNvbS9oZXljYW0vd2Vi
aWRsL2lzc3Vlcy8zNjgpCiAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBQdXRQcm9w
ZXJ0eVNsb3Qgc2xvdCh2YWx1ZVRvRm9yd2FyZFRvLCBmYWxzZSk7XG4iKTsKLSAgICAgICAgcHVz
aChAJG91dHB1dEFycmF5LCAiICAgIGFzT2JqZWN0KHZhbHVlVG9Gb3J3YXJkVG8pLT5tZXRob2RU
YWJsZShzdGF0ZS52bSgpKS0+cHV0KGFzT2JqZWN0KHZhbHVlVG9Gb3J3YXJkVG8pLCAmc3RhdGUs
IGZvcndhcmRJZCwgdmFsdWUsIHNsb3QpO1xuIik7CisgICAgICAgIHB1c2goQCRvdXRwdXRBcnJh
eSwgIiAgICBhc09iamVjdCh2YWx1ZVRvRm9yd2FyZFRvKS0+bWV0aG9kVGFibGUodm0pLT5wdXQo
YXNPYmplY3QodmFsdWVUb0ZvcndhcmRUbyksICZzdGF0ZSwgZm9yd2FyZElkLCB2YWx1ZSwgc2xv
dCk7XG4iKTsKICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgZmFsc2UpO1xuIik7CiAgICAgICAgIAogICAgICAgICBwdXNoKEAk
b3V0cHV0QXJyYXksICIgICAgcmV0dXJuIHRydWU7XG4iKTsKQEAgLTUzMzIsNyArNTM0OCw3IEBA
IHN1YiBHZW5lcmF0ZU9wZXJhdGlvbkRlZmluaXRpb24KICAgICAgICAgcHVzaChAJG91dHB1dEFy
cmF5LCAie1xuIik7CiAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBVTlVTRURfUEFS
QU0oc3RhdGUpO1xuIik7CiAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBWTSYgdm0g
PSBzdGF0ZS0+dm0oKTtcbiIpOwotICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgSlND
OjpOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgc3RhdGUpO1xuIik7CisgICAgICAg
IHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBKU0M6Ok5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIodm0sIHN0YXRlKTtcbiIpOwogICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgYXV0
byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7XG4iKTsKICAgICAgICAgcHVz
aChAJG91dHB1dEFycmF5LCAiICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTtcbiIpOwogICAg
ICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndy
YXBwZWQoKTtcbiIpOwpAQCAtNTQzNSwxNSArNTQ1MSwxNSBAQCBzdWIgR2VuZXJhdGVTZXJpYWxp
emVyRGVmaW5pdGlvbgogICAgICAgICAgICAgaWYgKCRhdHRyaWJ1dGUtPnR5cGUtPmlzTnVsbGFi
bGUpIHsKICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoISR7bmFt
ZX1WYWx1ZS5pc051bGwoKSkge1xuIik7CiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgICAgIGF1dG8qICR7bmFtZX1TZXJpYWxpemVkVmFsdWUgPSBKUyR7YXR0cmlidXRl
SW50ZXJmYWNlTmFtZX06OnNlcmlhbGl6ZShzdGF0ZSwgKmpzQ2FzdDxKUyR7YXR0cmlidXRlSW50
ZXJmYWNlTmFtZX0qPigke25hbWV9VmFsdWUpLCBnbG9iYWxPYmplY3QsIHRocm93U2NvcGUpO1xu
Iik7Ci0gICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHJlc3VsdC0+
cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgXCIke25hbWV9XCIpLCAk
e25hbWV9U2VyaWFsaXplZFZhbHVlKTtcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZyh2bSwgXCIke25hbWV9XCIpLCAke25hbWV9U2VyaWFsaXplZFZhbHVlKTtcbiIpOwogICAg
ICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIH0gZWxzZVxuIik7Ci0gICAgICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZt
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgXCIke25hbWV9XCIpLCAke25hbWV9VmFsdWUp
O1xuIik7CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHJlc3Vs
dC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBcIiR7bmFtZX1cIiks
ICR7bmFtZX1WYWx1ZSk7XG4iKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgYXV0byogJHtuYW1lfVNlcmlhbGl6ZWRWYWx1ZSA9
IEpTJHthdHRyaWJ1dGVJbnRlcmZhY2VOYW1lfTo6c2VyaWFsaXplKHN0YXRlLCAqanNDYXN0PEpT
JHthdHRyaWJ1dGVJbnRlcmZhY2VOYW1lfSo+KCR7bmFtZX1WYWx1ZSksIGdsb2JhbE9iamVjdCwg
dGhyb3dTY29wZSk7XG4iKTsKLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIFwiJHtu
YW1lfVwiKSwgJHtuYW1lfVNlcmlhbGl6ZWRWYWx1ZSk7XG4iKTsKKyAgICAgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZyh2bSwgXCIke25hbWV9XCIpLCAke25hbWV9U2VyaWFsaXplZFZhbHVlKTtcbiIp
OwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJp
bmcoJnZtLCBcIiR7bmFtZX1cIiksICR7bmFtZX1WYWx1ZSk7XG4iKTsKKyAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCBcIiR7bmFtZX1cIiksICR7bmFtZX1WYWx1ZSk7XG4iKTsKICAgICAgICAg
fQogCiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiXG4iKTsKQEAgLTYyMzQsNyArNjI1MCw3
IEBAIHN1YiBHZW5lcmF0ZUNhbGxiYWNrSW1wbGVtZW50YXRpb25Db250ZW4KICAgICAgICAgICAg
ICAgICAkY2FsbGJhY2tJbnZvY2F0aW9uID0gIm1fZGF0YS0+aW52b2tlQ2FsbGJhY2sodGhpc1Zh
bHVlLCBhcmdzLCBKU0NhbGxiYWNrRGF0YTo6Q2FsbGJhY2tUeXBlOjpGdW5jdGlvbiwgSWRlbnRp
ZmllcigpLCByZXR1cm5lZEV4Y2VwdGlvbikiOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAgICAgICAgICBteSAkY2FsbGJhY2tUeXBlID0gJG51bU9wZXJhdGlvbnMgPiAxID8gIk9iamVj
dCIgOiAiRnVuY3Rpb25Pck9iamVjdCI7Ci0gICAgICAgICAgICAgICAgJGNhbGxiYWNrSW52b2Nh
dGlvbiA9ICJtX2RhdGEtPmludm9rZUNhbGxiYWNrKHRoaXNWYWx1ZSwgYXJncywgSlNDYWxsYmFj
a0RhdGE6OkNhbGxiYWNrVHlwZTo6JHtjYWxsYmFja1R5cGV9LCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKCZ2bSwgXCIke2Z1bmN0aW9uTmFtZX1cIiksIHJldHVybmVkRXhjZXB0aW9uKSI7CisgICAg
ICAgICAgICAgICAgJGNhbGxiYWNrSW52b2NhdGlvbiA9ICJtX2RhdGEtPmludm9rZUNhbGxiYWNr
KHRoaXNWYWx1ZSwgYXJncywgSlNDYWxsYmFja0RhdGE6OkNhbGxiYWNrVHlwZTo6JHtjYWxsYmFj
a1R5cGV9LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBcIiR7ZnVuY3Rpb25OYW1lfVwiKSwg
cmV0dXJuZWRFeGNlcHRpb24pIjsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKCRv
cGVyYXRpb24tPnR5cGUtPm5hbWUgZXEgInZvaWQiKSB7CkBAIC03MzUxLDcgKzczNjcsNyBAQCBz
dWIgR2VuZXJhdGVDb25zdHJ1Y3RvckhlbHBlck1ldGhvZHMKICAgICAgICAgcHVzaChAJG91dHB1
dEFycmF5LCAiICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCAk
e2NsYXNzTmFtZX06OnByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KSwgSlNDOjpQcm9wZXJ0eUF0
dHJpYnV0ZTo6RG9udERlbGV0ZSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwg
SlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pO1xuIik7CiAgICAgfQogCi0gICAgcHVz
aChAJG91dHB1dEFycmF5LCAiICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFt
ZSwganNOb250cml2aWFsU3RyaW5nKCZ2bSwgU3RyaW5nKFwiJHZpc2libGVJbnRlcmZhY2VOYW1l
XCJfcykpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlB
dHRyaWJ1dGU6OkRvbnRFbnVtKTtcbiIpOworICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBw
dXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZyh2
bSwgU3RyaW5nKFwiJHZpc2libGVJbnRlcmZhY2VOYW1lXCJfcykpLCBKU0M6OlByb3BlcnR5QXR0
cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTtcbiIp
OwogICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5
TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoJHtsZWFzdENvbnN0cnVjdG9yTGVuZ3RofSksIEpTQzo6
UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9u
dEVudW0pO1xuIikgaWYgZGVmaW5lZCAkbGVhc3RDb25zdHJ1Y3Rvckxlbmd0aDsKIAogICAgIG15
ICRjbGFzc0ZvclRoaXMgPSAiJHtjbGFzc05hbWV9OjppbmZvKCkiOwpAQCAtNzM2OCw3ICs3Mzg0
LDcgQEAgc3ViIEdlbmVyYXRlQ29uc3RydWN0b3JIZWxwZXJNZXRob2RzCiAgICAgICAgIG15ICRy
dW50aW1lRW5hYmxlQ29uZGl0aW9uYWxTdHJpbmcgPSBHZW5lcmF0ZVJ1bnRpbWVFbmFibGVDb25k
aXRpb25hbFN0cmluZygkaW50ZXJmYWNlLCAkb3BlcmF0aW9uT3JBdHRyaWJ1dGUsICJ0cnVlIik7
CiAgICAgICAgIG15ICRuYW1lID0gJG9wZXJhdGlvbk9yQXR0cmlidXRlLT5uYW1lOwogICAgICAg
ICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgaWYgKCEke3J1bnRpbWVFbmFibGVDb25kaXRpb25h
bFN0cmluZ30pIHtcbiIpOwotICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgIGF1
dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgTENoYXIqPihcIiRuYW1lXCIpLCBzdHJsZW4oXCIkbmFtZVwiKSk7XG4iKTsK
KyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICBhdXRvIHByb3BlcnR5TmFtZSA9
IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIq
PihcIiRuYW1lXCIpLCBzdHJsZW4oXCIkbmFtZVwiKSk7XG4iKTsKICAgICAgICAgcHVzaChAJG91
dHB1dEFycmF5LCAiICAgICAgICBWTTo6RGVsZXRlUHJvcGVydHlNb2RlU2NvcGUgc2NvcGUodm0s
IFZNOjpEZWxldGVQcm9wZXJ0eU1vZGU6Oklnbm9yZUNvbmZpZ3VyYWJsZSk7XG4iKTsKICAgICAg
ICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICBKU09iamVjdDo6ZGVsZXRlUHJvcGVydHko
dGhpcywgZ2xvYmFsT2JqZWN0Lmdsb2JhbEV4ZWMoKSwgcHJvcGVydHlOYW1lKTtcbiIpOwogICAg
ICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgfVxuIik7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNJbnRlcmZhY2VOYW1lLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNJbnRlcmZhY2VO
YW1lLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTSW50ZXJmYWNlTmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4LDcg
Kzc4LDcgQEAgdGVtcGxhdGU8PiBKU1ZhbHVlIEpTSW50ZXJmYWNlTmFtZUNvbnN0cgogdGVtcGxh
dGU8PiB2b2lkIEpTSW50ZXJmYWNlTmFtZUNvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGll
cyhWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCiB7CiAgICAgcHV0RGly
ZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTSW50ZXJmYWNlTmFtZTo6cHJv
dG90eXBlKHZtLCBnbG9iYWxPYmplY3QpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RGVs
ZXRlIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0
cmlidXRlOjpEb250RW51bSk7Ci0gICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5u
YW1lLCBqc05vbnRyaXZpYWxTdHJpbmcoJnZtLCBTdHJpbmcoIkludGVyZmFjZU5hbWUiX3MpKSwg
SlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRl
OjpEb250RW51bSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBq
c05vbnRyaXZpYWxTdHJpbmcodm0sIFN0cmluZygiSW50ZXJmYWNlTmFtZSJfcykpLCBKU0M6OlBy
b3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRF
bnVtKTsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1i
ZXIoMCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0
dHJpYnV0ZTo6RG9udEVudW0pOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNNYXBMaWtlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNNYXBMaWtlLmNwcAkocmV2aXNpb24gMjQ5MTI4
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTTWFwTGlrZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTk3LDcgKzk3LDcgQEAgdGVtcGxhdGU8PiBKU1ZhbHVlIEpT
TWFwTGlrZUNvbnN0cnVjdG9yOgogdGVtcGxhdGU8PiB2b2lkIEpTTWFwTGlrZUNvbnN0cnVjdG9y
Ojppbml0aWFsaXplUHJvcGVydGllcyhWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxP
YmplY3QpCiB7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUs
IEpTTWFwTGlrZTo6cHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QpLCBKU0M6OlByb3BlcnR5QXR0
cmlidXRlOjpEb250RGVsZXRlIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBK
U0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7Ci0gICAgcHV0RGlyZWN0KHZtLCB2bS5w
cm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcoJnZtLCBTdHJpbmcoIk1hcExp
a2UiX3MpKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5
QXR0cmlidXRlOjpEb250RW51bSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVz
LT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcodm0sIFN0cmluZygiTWFwTGlrZSJfcykpLCBKU0M6
OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRv
bnRFbnVtKTsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNO
dW1iZXIoMCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0
eUF0dHJpYnV0ZTo6RG9udEVudW0pOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNSZWFkT25seU1hcExpa2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1JlYWRPbmx5TWFwTGlrZS5j
cHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1JlYWRPbmx5TWFwTGlrZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk0LDcgKzk0
LDcgQEAgdGVtcGxhdGU8PiBKU1ZhbHVlIEpTUmVhZE9ubHlNYXBMaWtlQ29ucwogdGVtcGxhdGU8
PiB2b2lkIEpTUmVhZE9ubHlNYXBMaWtlQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVz
KFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKIHsKICAgICBwdXREaXJl
Y3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgSlNSZWFkT25seU1hcExpa2U6OnBy
b3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERl
bGV0ZSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0
dHJpYnV0ZTo6RG9udEVudW0pOwotICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+
bmFtZSwganNOb250cml2aWFsU3RyaW5nKCZ2bSwgU3RyaW5nKCJSZWFkT25seU1hcExpa2UiX3Mp
KSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmli
dXRlOjpEb250RW51bSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1l
LCBqc05vbnRyaXZpYWxTdHJpbmcodm0sIFN0cmluZygiUmVhZE9ubHlNYXBMaWtlIl9zKSksIEpT
Qzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6
RG9udEVudW0pOwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBq
c051bWJlcigwKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3Bl
cnR5QXR0cmlidXRlOjpEb250RW51bSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RBY3RpdmVET01PYmplY3QuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RBY3RpdmVE
T01PYmplY3QuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0QWN0aXZlRE9NT2JqZWN0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTA1LDcgKzEwNSw3IEBAIHRlbXBsYXRlPD4gSlNWYWx1ZSBKU1Rlc3RBY3RpdmVET01P
YmplY3QKIHRlbXBsYXRlPD4gdm9pZCBKU1Rlc3RBY3RpdmVET01PYmplY3RDb25zdHJ1Y3Rvcjo6
aW5pdGlhbGl6ZVByb3BlcnRpZXMoVk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2Jq
ZWN0KQogewogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBK
U1Rlc3RBY3RpdmVET01PYmplY3Q6OnByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KSwgSlNDOjpQ
cm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJl
YWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwotICAgIHB1dERpcmVj
dCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKCZ2bSwgU3Ry
aW5nKCJUZXN0QWN0aXZlRE9NT2JqZWN0Il9zKSksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJl
YWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOworICAgIHB1dERpcmVj
dCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKHZtLCBTdHJp
bmcoIlRlc3RBY3RpdmVET01PYmplY3QiX3MpKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVh
ZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CiAgICAgcHV0RGlyZWN0
KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDApLCBKU0M6OlByb3BlcnR5
QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsK
IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dENFUmVhY3Rpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q0VSZWFjdGlvbnMuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q0VSZWFjdGlv
bnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDMsNyArMTAzLDcgQEAgdGVtcGxhdGU8PiBKU1Zh
bHVlIEpTVGVzdENFUmVhY3Rpb25zQ29ucwogdGVtcGxhdGU8PiB2b2lkIEpTVGVzdENFUmVhY3Rp
b25zQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKFZNJiB2bSwgSlNET01HbG9iYWxP
YmplY3QmIGdsb2JhbE9iamVjdCkKIHsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFt
ZXMtPnByb3RvdHlwZSwgSlNUZXN0Q0VSZWFjdGlvbnM6OnByb3RvdHlwZSh2bSwgZ2xvYmFsT2Jq
ZWN0KSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IEpTQzo6UHJvcGVydHlB
dHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwot
ICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3Ry
aW5nKCZ2bSwgU3RyaW5nKCJUZXN0Q0VSZWFjdGlvbnMiX3MpKSwgSlNDOjpQcm9wZXJ0eUF0dHJp
YnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CisgICAg
cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmco
dm0sIFN0cmluZygiVGVzdENFUmVhY3Rpb25zIl9zKSksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6
OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwogICAgIHB1dERp
cmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigwKSwgSlNDOjpQcm9w
ZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51
bSk7CiB9CiAKQEAgLTIxNiw2ICsyMTYsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RDRVJlYWN0
aW9uc0F0dHJpYnV0CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RDRVJlYWN0aW9uc0F0
dHJpYnV0ZVdpdGhDRVJlYWN0aW9uc1NldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RDRVJl
YWN0aW9ucyYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29w
ZSkKIHsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKICAgICBDdXN0b21FbGVtZW50UmVhY3Rpb25TdGFjayBjdXN0b21FbGVtZW50UmVhY3Rp
b25TdGFjayhzdGF0ZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwpA
QCAtMjQ4LDYgKzI0OSw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdENFUmVhY3Rpb25zUmVmbGVj
dEEKIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdENFUmVhY3Rpb25zUmVmbGVjdEF0dHJp
YnV0ZVdpdGhDRVJlYWN0aW9uc1NldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RDRVJlYWN0
aW9ucyYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkK
IHsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KTsKICAgICBDdXN0b21FbGVtZW50UmVhY3Rpb25TdGFjayBjdXN0b21FbGVtZW50UmVhY3Rpb25T
dGFjayhzdGF0ZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwpAQCAt
MjgwLDE3ICsyODIsMTggQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdp
ZgogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllckF0
dHJpYnV0ZVNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RDRVJlYWN0aW9ucyYgdGhpc09i
amVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgYXV0byBpZCA9IElkZW50aWZpZXI6OmZyb21TdHJp
bmcoJnN0YXRlLnZtKCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigic3RyaW5naWZp
ZXJBdHRyaWJ1dGUiKSwgc3RybGVuKCJzdHJpbmdpZmllckF0dHJpYnV0ZSIpKTsKKyAgICBVTlVT
RURfUEFSQU0oc3RhdGUpOworICAgIFZNJiB2bSA9IHRocm93U2NvcGUudm0oKTsKKyAgICBhdXRv
IGlkID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBM
Q2hhcio+KCJzdHJpbmdpZmllckF0dHJpYnV0ZSIpLCBzdHJsZW4oInN0cmluZ2lmaWVyQXR0cmli
dXRlIikpOwogICAgIGF1dG8gdmFsdWVUb0ZvcndhcmRUbyA9IHRoaXNPYmplY3QuZ2V0KCZzdGF0
ZSwgaWQpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwogICAg
IGlmIChVTkxJS0VMWSghdmFsdWVUb0ZvcndhcmRUby5pc09iamVjdCgpKSkgewogICAgICAgICB0
aHJvd1R5cGVFcnJvcigmc3RhdGUsIHRocm93U2NvcGUpOwogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQotICAgIGF1dG8gZm9yd2FyZElkID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3Rh
dGUudm0oKSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJ2YWx1ZSIpLCBzdHJsZW4o
InZhbHVlIikpOworICAgIGF1dG8gZm9yd2FyZElkID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2
bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJ2YWx1ZSIpLCBzdHJsZW4oInZhbHVl
IikpOwogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KHZhbHVlVG9Gb3J3YXJkVG8sIGZhbHNlKTsK
LSAgICBhc09iamVjdCh2YWx1ZVRvRm9yd2FyZFRvKS0+bWV0aG9kVGFibGUoc3RhdGUudm0oKSkt
PnB1dChhc09iamVjdCh2YWx1ZVRvRm9yd2FyZFRvKSwgJnN0YXRlLCBmb3J3YXJkSWQsIHZhbHVl
LCBzbG90KTsKKyAgICBhc09iamVjdCh2YWx1ZVRvRm9yd2FyZFRvKS0+bWV0aG9kVGFibGUodm0p
LT5wdXQoYXNPYmplY3QodmFsdWVUb0ZvcndhcmRUbyksICZzdGF0ZSwgZm9yd2FyZElkLCB2YWx1
ZSwgc2xvdCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CiAg
ICAgcmV0dXJuIHRydWU7CiB9CkBAIC0zMTYsNiArMzE5LDcgQEAgRW5jb2RlZEpTVmFsdWUganNU
ZXN0Q0VSZWFjdGlvbnNBdHRyaWJ1dAogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0Q0VS
ZWFjdGlvbnNBdHRyaWJ1dGVXaXRoQ0VSZWFjdGlvbnNOb3ROZWVkZWRTZXR0ZXIoRXhlY1N0YXRl
JiBzdGF0ZSwgSlNUZXN0Q0VSZWFjdGlvbnMmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRo
cm93U2NvcGUmIHRocm93U2NvcGUpCiB7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgQ3VzdG9tRWxlbWVudFJlYWN0aW9uRGlzYWxs
b3dlZFNjb3BlIGN1c3RvbUVsZW1lbnRSZWFjdGlvbkRpc2FsbG93ZWRTY29wZTsKICAgICBhdXRv
JiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CkBAIC0zNDgsNiArMzUyLDcgQEAgRW5jb2Rl
ZEpTVmFsdWUganNUZXN0Q0VSZWFjdGlvbnNSZWZsZWN0QQogCiBzdGF0aWMgaW5saW5lIGJvb2wg
c2V0SlNUZXN0Q0VSZWFjdGlvbnNSZWZsZWN0QXR0cmlidXRlV2l0aENFUmVhY3Rpb25zTm90TmVl
ZGVkU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdENFUmVhY3Rpb25zJiB0aGlzT2JqZWN0
LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogeworICAgIFVOVVNFRF9Q
QVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIEN1c3RvbUVs
ZW1lbnRSZWFjdGlvbkRpc2FsbG93ZWRTY29wZSBjdXN0b21FbGVtZW50UmVhY3Rpb25EaXNhbGxv
d2VkU2NvcGU7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwpAQCAtMzgw
LDE3ICszODUsMTggQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZgog
CiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllckF0dHJp
YnV0ZU5vdE5lZWRlZFNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RDRVJlYWN0aW9ucyYg
dGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgYXV0byBpZCA9IElkZW50aWZpZXI6OmZy
b21TdHJpbmcoJnN0YXRlLnZtKCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigic3Ry
aW5naWZpZXJBdHRyaWJ1dGVOb3ROZWVkZWQiKSwgc3RybGVuKCJzdHJpbmdpZmllckF0dHJpYnV0
ZU5vdE5lZWRlZCIpKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFZNJiB2bSA9IHRo
cm93U2NvcGUudm0oKTsKKyAgICBhdXRvIGlkID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwg
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJzdHJpbmdpZmllckF0dHJpYnV0ZU5vdE5l
ZWRlZCIpLCBzdHJsZW4oInN0cmluZ2lmaWVyQXR0cmlidXRlTm90TmVlZGVkIikpOwogICAgIGF1
dG8gdmFsdWVUb0ZvcndhcmRUbyA9IHRoaXNPYmplY3QuZ2V0KCZzdGF0ZSwgaWQpOwogICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwogICAgIGlmIChVTkxJS0VMWSgh
dmFsdWVUb0ZvcndhcmRUby5pc09iamVjdCgpKSkgewogICAgICAgICB0aHJvd1R5cGVFcnJvcigm
c3RhdGUsIHRocm93U2NvcGUpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIGF1
dG8gZm9yd2FyZElkID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUudm0oKSwgcmVpbnRl
cnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJ2YWx1ZVdpdGhvdXRSZWFjdGlvbnMiKSwgc3RybGVu
KCJ2YWx1ZVdpdGhvdXRSZWFjdGlvbnMiKSk7CisgICAgYXV0byBmb3J3YXJkSWQgPSBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oInZhbHVl
V2l0aG91dFJlYWN0aW9ucyIpLCBzdHJsZW4oInZhbHVlV2l0aG91dFJlYWN0aW9ucyIpKTsKICAg
ICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdCh2YWx1ZVRvRm9yd2FyZFRvLCBmYWxzZSk7Ci0gICAgYXNP
YmplY3QodmFsdWVUb0ZvcndhcmRUbyktPm1ldGhvZFRhYmxlKHN0YXRlLnZtKCkpLT5wdXQoYXNP
YmplY3QodmFsdWVUb0ZvcndhcmRUbyksICZzdGF0ZSwgZm9yd2FyZElkLCB2YWx1ZSwgc2xvdCk7
CisgICAgYXNPYmplY3QodmFsdWVUb0ZvcndhcmRUbyktPm1ldGhvZFRhYmxlKHZtKS0+cHV0KGFz
T2JqZWN0KHZhbHVlVG9Gb3J3YXJkVG8pLCAmc3RhdGUsIGZvcndhcmRJZCwgdmFsdWUsIHNsb3Qp
OwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwogICAgIHJldHVy
biB0cnVlOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lm
aWVyLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC05MCw3ICs5MCw3IEBAIHRlbXBsYXRlPD4gSlNWYWx1ZSBKU1Rlc3RDRVJlYWN0aW9u
c1N0cmkKIHRlbXBsYXRlPD4gdm9pZCBKU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyQ29uc3Ry
dWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGds
b2JhbE9iamVjdCkKIHsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3Rv
dHlwZSwgSlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllcjo6cHJvdG90eXBlKHZtLCBnbG9iYWxP
YmplY3QpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgSlNDOjpQcm9wZXJ0
eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7
Ci0gICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxT
dHJpbmcoJnZtLCBTdHJpbmcoIlRlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyIl9zKSksIEpTQzo6
UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9u
dEVudW0pOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250
cml2aWFsU3RyaW5nKHZtLCBTdHJpbmcoIlRlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyIl9zKSks
IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0
ZTo6RG9udEVudW0pOwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3Ro
LCBqc051bWJlcigwKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlBy
b3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CiB9CiAKQEAgLTE5OCw2ICsxOTgsNyBAQCBFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmCiAKIHN0YXRpYyBpbmxpbmUgYm9v
bCBzZXRKU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyVmFsdWVTZXR0ZXIoRXhlY1N0YXRlJiBz
dGF0ZSwgSlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllciYgdGhpc09iamVjdCwgSlNWYWx1ZSB2
YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUp
OwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBDdXN0b21FbGVtZW50UmVhY3Rp
b25TdGFjayBjdXN0b21FbGVtZW50UmVhY3Rpb25TdGFjayhzdGF0ZSk7CiAgICAgYXV0byYgaW1w
bCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwpAQCAtMjMwLDYgKzIzMSw3IEBAIEVuY29kZWRKU1Zh
bHVlIGpzVGVzdENFUmVhY3Rpb25zU3RyaW5naWYKIAogc3RhdGljIGlubGluZSBib29sIHNldEpT
VGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXJWYWx1ZVdpdGhvdXRSZWFjdGlvbnNTZXR0ZXIoRXhl
Y1N0YXRlJiBzdGF0ZSwgSlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllciYgdGhpc09iamVjdCwg
SlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKKyAgICBVTlVTRURfUEFS
QU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBDdXN0b21FbGVt
ZW50UmVhY3Rpb25EaXNhbGxvd2VkU2NvcGUgY3VzdG9tRWxlbWVudFJlYWN0aW9uRGlzYWxsb3dl
ZFNjb3BlOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsVHJhY2VyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0Q2FsbFRyYWNlci5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsVHJhY2VyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTE3LDcgKzExNyw3IEBAIHRlbXBsYXRlPD4gSlNWYWx1ZSBKU1Rlc3RDYWxsVHJh
Y2VyQ29uc3QKIHRlbXBsYXRlPD4gdm9pZCBKU1Rlc3RDYWxsVHJhY2VyQ29uc3RydWN0b3I6Omlu
aXRpYWxpemVQcm9wZXJ0aWVzKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVj
dCkKIHsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgSlNU
ZXN0Q2FsbFRyYWNlcjo6cHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QpLCBKU0M6OlByb3BlcnR5
QXR0cmlidXRlOjpEb250RGVsZXRlIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkg
fCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7Ci0gICAgcHV0RGlyZWN0KHZtLCB2
bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcoJnZtLCBTdHJpbmcoIlRl
c3RDYWxsVHJhY2VyIl9zKSksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlND
OjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJv
cGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKHZtLCBTdHJpbmcoIlRlc3RDYWxs
VHJhY2VyIl9zKSksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9w
ZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlO
YW1lcy0+bGVuZ3RoLCBqc051bWJlcigwKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9u
bHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CiAgICAgcmVpZnlTdGF0aWNQ
cm9wZXJ0aWVzKHZtLCBKU1Rlc3RDYWxsVHJhY2VyOjppbmZvKCksIEpTVGVzdENhbGxUcmFjZXJD
b25zdHJ1Y3RvclRhYmxlVmFsdWVzLCAqdGhpcyk7CiB9CkBAIC0yMzgsNiArMjM4LDcgQEAgRW5j
b2RlZEpTVmFsdWUganNUZXN0Q2FsbFRyYWNlclRlc3RBdHRyaQogCiBzdGF0aWMgaW5saW5lIGJv
b2wgc2V0SlNUZXN0Q2FsbFRyYWNlclRlc3RBdHRyaWJ1dGVJbnRlcmZhY2VTZXR0ZXIoRXhlY1N0
YXRlJiBzdGF0ZSwgSlNUZXN0Q2FsbFRyYWNlciYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwg
VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAg
IFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53
cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMQm9vbGVhbj4oc3Rh
dGUsIHZhbHVlKTsKQEAgLTI3Myw2ICsyNzQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RDYWxs
VHJhY2VyVGVzdEF0dHJpCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RDYWxsVHJhY2Vy
VGVzdEF0dHJpYnV0ZVNwZWNpZmllZFNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RDYWxs
VHJhY2VyJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KQogeworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5h
dGl2ZVZhbHVlID0gY29udmVydDxJRExCb29sZWFuPihzdGF0ZSwgdmFsdWUpOwpAQCAtMzA4LDYg
KzMxMCw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdENhbGxUcmFjZXJUZXN0QXR0cmkKIAogc3Rh
dGljIGlubGluZSBib29sIHNldEpTVGVzdENhbGxUcmFjZXJUZXN0QXR0cmlidXRlV2l0aFZhcmlh
bnRTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0Q2FsbFRyYWNlciYgdGhpc09iamVjdCwg
SlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKKyAgICBVTlVTRURfUEFS
QU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBs
ID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8
SURMVW5pb248SURMQm9vbGVhbiwgSURMRmxvYXQsIElETERPTVN0cmluZz4+KHN0YXRlLCB2YWx1
ZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
Q2FsbGJhY2tJbnRlcmZhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsYmFja0ludGVyZmFjZS5jcHAJKHJldmlzaW9u
IDI0OTEyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RDYWxsYmFja0ludGVyZmFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk0LDcgKzk0LDcgQEAg
dGVtcGxhdGU8PiBUZXN0Q2FsbGJhY2tJbnRlcmZhY2U6OkRpY3RpbwogICAgIGlmIChpc051bGxP
clVuZGVmaW5lZCkKICAgICAgICAgb3B0aW9uYWxNZW1iZXJWYWx1ZSA9IGpzVW5kZWZpbmVkKCk7
CiAgICAgZWxzZSB7Ci0gICAgICAgIG9wdGlvbmFsTWVtYmVyVmFsdWUgPSBvYmplY3QtPmdldCgm
c3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAib3B0aW9uYWxNZW1iZXIiKSk7
CisgICAgICAgIG9wdGlvbmFsTWVtYmVyVmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50
aWZpZXI6OmZyb21TdHJpbmcodm0sICJvcHRpb25hbE1lbWJlciIpKTsKICAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0KICAgICBpZiAoIW9wdGlvbmFs
TWVtYmVyVmFsdWUuaXNVbmRlZmluZWQoKSkgewpAQCAtMTA1LDcgKzEwNSw3IEBAIHRlbXBsYXRl
PD4gVGVzdENhbGxiYWNrSW50ZXJmYWNlOjpEaWN0aW8KICAgICBpZiAoaXNOdWxsT3JVbmRlZmlu
ZWQpCiAgICAgICAgIHJlcXVpcmVkTWVtYmVyVmFsdWUgPSBqc1VuZGVmaW5lZCgpOwogICAgIGVs
c2UgewotICAgICAgICByZXF1aXJlZE1lbWJlclZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgInJlcXVpcmVkTWVtYmVyIikpOworICAgICAg
ICByZXF1aXJlZE1lbWJlclZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCAicmVxdWlyZWRNZW1iZXIiKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICB9CiAgICAgaWYgKCFyZXF1aXJlZE1lbWJlclZh
bHVlLmlzVW5kZWZpbmVkKCkpIHsKQEAgLTE2MCw3ICsxNjAsNyBAQCB0ZW1wbGF0ZTw+IEpTVmFs
dWUgSlNUZXN0Q2FsbGJhY2tJbnRlcmZhCiB0ZW1wbGF0ZTw+IHZvaWQgSlNUZXN0Q2FsbGJhY2tJ
bnRlcmZhY2VDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMoVk0mIHZtLCBKU0RPTUds
b2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQogewogICAgIFVOVVNFRF9QQVJBTShnbG9iYWxPYmpl
Y3QpOwotICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2
aWFsU3RyaW5nKCZ2bSwgU3RyaW5nKCJUZXN0Q2FsbGJhY2tJbnRlcmZhY2UiX3MpKSwgSlNDOjpQ
cm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250
RW51bSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRy
aXZpYWxTdHJpbmcodm0sIFN0cmluZygiVGVzdENhbGxiYWNrSW50ZXJmYWNlIl9zKSksIEpTQzo6
UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9u
dEVudW0pOwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051
bWJlcigwKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5
QXR0cmlidXRlOjpEb250RW51bSk7CiAgICAgcmVpZnlTdGF0aWNQcm9wZXJ0aWVzKHZtLCBudWxs
cHRyLCBKU1Rlc3RDYWxsYmFja0ludGVyZmFjZUNvbnN0cnVjdG9yVGFibGVWYWx1ZXMsICp0aGlz
KTsKIH0KQEAgLTE4OSw3ICsxODksNyBAQCBDYWxsYmFja1Jlc3VsdDx0eXBlbmFtZSBJRExWb2lk
OjpJbXBsZW1lCiAgICAgQVNTRVJUKCFhcmdzLmhhc092ZXJmbG93ZWQoKSk7CiAKICAgICBOYWtl
ZFB0cjxKU0M6OkV4Y2VwdGlvbj4gcmV0dXJuZWRFeGNlcHRpb247Ci0gICAgbV9kYXRhLT5pbnZv
a2VDYWxsYmFjayh0aGlzVmFsdWUsIGFyZ3MsIEpTQ2FsbGJhY2tEYXRhOjpDYWxsYmFja1R5cGU6
Ok9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJjYWxsYmFja1dpdGhOb1BhcmFt
IiksIHJldHVybmVkRXhjZXB0aW9uKTsKKyAgICBtX2RhdGEtPmludm9rZUNhbGxiYWNrKHRoaXNW
YWx1ZSwgYXJncywgSlNDYWxsYmFja0RhdGE6OkNhbGxiYWNrVHlwZTo6T2JqZWN0LCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKHZtLCAiY2FsbGJhY2tXaXRoTm9QYXJhbSIpLCByZXR1cm5lZEV4Y2Vw
dGlvbik7CiAgICAgaWYgKHJldHVybmVkRXhjZXB0aW9uKSB7CiAgICAgICAgIHJlcG9ydEV4Y2Vw
dGlvbigmc3RhdGUsIHJldHVybmVkRXhjZXB0aW9uKTsKICAgICAgICAgcmV0dXJuIENhbGxiYWNr
UmVzdWx0VHlwZTo6RXhjZXB0aW9uVGhyb3duOwpAQCAtMjE2LDcgKzIxNiw3IEBAIENhbGxiYWNr
UmVzdWx0PHR5cGVuYW1lIElETFZvaWQ6OkltcGxlbWUKICAgICBBU1NFUlQoIWFyZ3MuaGFzT3Zl
cmZsb3dlZCgpKTsKIAogICAgIE5ha2VkUHRyPEpTQzo6RXhjZXB0aW9uPiByZXR1cm5lZEV4Y2Vw
dGlvbjsKLSAgICBtX2RhdGEtPmludm9rZUNhbGxiYWNrKHRoaXNWYWx1ZSwgYXJncywgSlNDYWxs
YmFja0RhdGE6OkNhbGxiYWNrVHlwZTo6T2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2
bSwgImNhbGxiYWNrV2l0aEFycmF5UGFyYW0iKSwgcmV0dXJuZWRFeGNlcHRpb24pOworICAgIG1f
ZGF0YS0+aW52b2tlQ2FsbGJhY2sodGhpc1ZhbHVlLCBhcmdzLCBKU0NhbGxiYWNrRGF0YTo6Q2Fs
bGJhY2tUeXBlOjpPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJjYWxsYmFja1dp
dGhBcnJheVBhcmFtIiksIHJldHVybmVkRXhjZXB0aW9uKTsKICAgICBpZiAocmV0dXJuZWRFeGNl
cHRpb24pIHsKICAgICAgICAgcmVwb3J0RXhjZXB0aW9uKCZzdGF0ZSwgcmV0dXJuZWRFeGNlcHRp
b24pOwogICAgICAgICByZXR1cm4gQ2FsbGJhY2tSZXN1bHRUeXBlOjpFeGNlcHRpb25UaHJvd247
CkBAIC0yNDQsNyArMjQ0LDcgQEAgQ2FsbGJhY2tSZXN1bHQ8dHlwZW5hbWUgSURMVm9pZDo6SW1w
bGVtZQogICAgIEFTU0VSVCghYXJncy5oYXNPdmVyZmxvd2VkKCkpOwogCiAgICAgTmFrZWRQdHI8
SlNDOjpFeGNlcHRpb24+IHJldHVybmVkRXhjZXB0aW9uOwotICAgIG1fZGF0YS0+aW52b2tlQ2Fs
bGJhY2sodGhpc1ZhbHVlLCBhcmdzLCBKU0NhbGxiYWNrRGF0YTo6Q2FsbGJhY2tUeXBlOjpPYmpl
Y3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiY2FsbGJhY2tXaXRoU2VyaWFsaXplZFNj
cmlwdFZhbHVlUGFyYW0iKSwgcmV0dXJuZWRFeGNlcHRpb24pOworICAgIG1fZGF0YS0+aW52b2tl
Q2FsbGJhY2sodGhpc1ZhbHVlLCBhcmdzLCBKU0NhbGxiYWNrRGF0YTo6Q2FsbGJhY2tUeXBlOjpP
YmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJjYWxsYmFja1dpdGhTZXJpYWxpemVk
U2NyaXB0VmFsdWVQYXJhbSIpLCByZXR1cm5lZEV4Y2VwdGlvbik7CiAgICAgaWYgKHJldHVybmVk
RXhjZXB0aW9uKSB7CiAgICAgICAgIHJlcG9ydEV4Y2VwdGlvbigmc3RhdGUsIHJldHVybmVkRXhj
ZXB0aW9uKTsKICAgICAgICAgcmV0dXJuIENhbGxiYWNrUmVzdWx0VHlwZTo6RXhjZXB0aW9uVGhy
b3duOwpAQCAtMjcxLDcgKzI3MSw3IEBAIENhbGxiYWNrUmVzdWx0PHR5cGVuYW1lIElETFZvaWQ6
OkltcGxlbWUKICAgICBBU1NFUlQoIWFyZ3MuaGFzT3ZlcmZsb3dlZCgpKTsKIAogICAgIE5ha2Vk
UHRyPEpTQzo6RXhjZXB0aW9uPiByZXR1cm5lZEV4Y2VwdGlvbjsKLSAgICBtX2RhdGEtPmludm9r
ZUNhbGxiYWNrKHRoaXNWYWx1ZSwgYXJncywgSlNDYWxsYmFja0RhdGE6OkNhbGxiYWNrVHlwZTo6
T2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImNhbGxiYWNrV2l0aFN0cmluZ0xp
c3QiKSwgcmV0dXJuZWRFeGNlcHRpb24pOworICAgIG1fZGF0YS0+aW52b2tlQ2FsbGJhY2sodGhp
c1ZhbHVlLCBhcmdzLCBKU0NhbGxiYWNrRGF0YTo6Q2FsbGJhY2tUeXBlOjpPYmplY3QsIElkZW50
aWZpZXI6OmZyb21TdHJpbmcodm0sICJjYWxsYmFja1dpdGhTdHJpbmdMaXN0IiksIHJldHVybmVk
RXhjZXB0aW9uKTsKICAgICBpZiAocmV0dXJuZWRFeGNlcHRpb24pIHsKICAgICAgICAgcmVwb3J0
RXhjZXB0aW9uKCZzdGF0ZSwgcmV0dXJuZWRFeGNlcHRpb24pOwogICAgICAgICByZXR1cm4gQ2Fs
bGJhY2tSZXN1bHRUeXBlOjpFeGNlcHRpb25UaHJvd247CkBAIC0yOTgsNyArMjk4LDcgQEAgQ2Fs
bGJhY2tSZXN1bHQ8dHlwZW5hbWUgSURMVm9pZDo6SW1wbGVtZQogICAgIEFTU0VSVCghYXJncy5o
YXNPdmVyZmxvd2VkKCkpOwogCiAgICAgTmFrZWRQdHI8SlNDOjpFeGNlcHRpb24+IHJldHVybmVk
RXhjZXB0aW9uOwotICAgIG1fZGF0YS0+aW52b2tlQ2FsbGJhY2sodGhpc1ZhbHVlLCBhcmdzLCBK
U0NhbGxiYWNrRGF0YTo6Q2FsbGJhY2tUeXBlOjpPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJp
bmcoJnZtLCAiY2FsbGJhY2tXaXRoQm9vbGVhbiIpLCByZXR1cm5lZEV4Y2VwdGlvbik7CisgICAg
bV9kYXRhLT5pbnZva2VDYWxsYmFjayh0aGlzVmFsdWUsIGFyZ3MsIEpTQ2FsbGJhY2tEYXRhOjpD
YWxsYmFja1R5cGU6Ok9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImNhbGxiYWNr
V2l0aEJvb2xlYW4iKSwgcmV0dXJuZWRFeGNlcHRpb24pOwogICAgIGlmIChyZXR1cm5lZEV4Y2Vw
dGlvbikgewogICAgICAgICByZXBvcnRFeGNlcHRpb24oJnN0YXRlLCByZXR1cm5lZEV4Y2VwdGlv
bik7CiAgICAgICAgIHJldHVybiBDYWxsYmFja1Jlc3VsdFR5cGU6OkV4Y2VwdGlvblRocm93bjsK
QEAgLTMyNiw3ICszMjYsNyBAQCBDYWxsYmFja1Jlc3VsdDx0eXBlbmFtZSBJRExWb2lkOjpJbXBs
ZW1lCiAgICAgQVNTRVJUKCFhcmdzLmhhc092ZXJmbG93ZWQoKSk7CiAKICAgICBOYWtlZFB0cjxK
U0M6OkV4Y2VwdGlvbj4gcmV0dXJuZWRFeGNlcHRpb247Ci0gICAgbV9kYXRhLT5pbnZva2VDYWxs
YmFjayh0aGlzVmFsdWUsIGFyZ3MsIEpTQ2FsbGJhY2tEYXRhOjpDYWxsYmFja1R5cGU6Ok9iamVj
dCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJjYWxsYmFja1JlcXVpcmVzVGhpc1RvUGFz
cyIpLCByZXR1cm5lZEV4Y2VwdGlvbik7CisgICAgbV9kYXRhLT5pbnZva2VDYWxsYmFjayh0aGlz
VmFsdWUsIGFyZ3MsIEpTQ2FsbGJhY2tEYXRhOjpDYWxsYmFja1R5cGU6Ok9iamVjdCwgSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZyh2bSwgImNhbGxiYWNrUmVxdWlyZXNUaGlzVG9QYXNzIiksIHJldHVy
bmVkRXhjZXB0aW9uKTsKICAgICBpZiAocmV0dXJuZWRFeGNlcHRpb24pIHsKICAgICAgICAgcmVw
b3J0RXhjZXB0aW9uKCZzdGF0ZSwgcmV0dXJuZWRFeGNlcHRpb24pOwogICAgICAgICByZXR1cm4g
Q2FsbGJhY2tSZXN1bHRUeXBlOjpFeGNlcHRpb25UaHJvd247CkBAIC0zNTIsNyArMzUyLDcgQEAg
Q2FsbGJhY2tSZXN1bHQ8dHlwZW5hbWUgSURMRE9NU3RyaW5nOjpJbQogICAgIEFTU0VSVCghYXJn
cy5oYXNPdmVyZmxvd2VkKCkpOwogCiAgICAgTmFrZWRQdHI8SlNDOjpFeGNlcHRpb24+IHJldHVy
bmVkRXhjZXB0aW9uOwotICAgIGF1dG8ganNSZXN1bHQgPSBtX2RhdGEtPmludm9rZUNhbGxiYWNr
KHRoaXNWYWx1ZSwgYXJncywgSlNDYWxsYmFja0RhdGE6OkNhbGxiYWNrVHlwZTo6T2JqZWN0LCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImNhbGxiYWNrV2l0aEFSZXR1cm5WYWx1ZSIpLCBy
ZXR1cm5lZEV4Y2VwdGlvbik7CisgICAgYXV0byBqc1Jlc3VsdCA9IG1fZGF0YS0+aW52b2tlQ2Fs
bGJhY2sodGhpc1ZhbHVlLCBhcmdzLCBKU0NhbGxiYWNrRGF0YTo6Q2FsbGJhY2tUeXBlOjpPYmpl
Y3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJjYWxsYmFja1dpdGhBUmV0dXJuVmFsdWUi
KSwgcmV0dXJuZWRFeGNlcHRpb24pOwogICAgIGlmIChyZXR1cm5lZEV4Y2VwdGlvbikgewogICAg
ICAgICByZXBvcnRFeGNlcHRpb24oJnN0YXRlLCByZXR1cm5lZEV4Y2VwdGlvbik7CiAgICAgICAg
IHJldHVybiBDYWxsYmFja1Jlc3VsdFR5cGU6OkV4Y2VwdGlvblRocm93bjsKQEAgLTM4Miw3ICsz
ODIsNyBAQCBDYWxsYmFja1Jlc3VsdDx0eXBlbmFtZSBJRExET01TdHJpbmc6OkltCiAgICAgQVNT
RVJUKCFhcmdzLmhhc092ZXJmbG93ZWQoKSk7CiAKICAgICBOYWtlZFB0cjxKU0M6OkV4Y2VwdGlv
bj4gcmV0dXJuZWRFeGNlcHRpb247Ci0gICAgYXV0byBqc1Jlc3VsdCA9IG1fZGF0YS0+aW52b2tl
Q2FsbGJhY2sodGhpc1ZhbHVlLCBhcmdzLCBKU0NhbGxiYWNrRGF0YTo6Q2FsbGJhY2tUeXBlOjpP
YmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiY2FsbGJhY2tUaGF0UmV0aHJvd3NF
eGNlcHRpb25zIiksIHJldHVybmVkRXhjZXB0aW9uKTsKKyAgICBhdXRvIGpzUmVzdWx0ID0gbV9k
YXRhLT5pbnZva2VDYWxsYmFjayh0aGlzVmFsdWUsIGFyZ3MsIEpTQ2FsbGJhY2tEYXRhOjpDYWxs
YmFja1R5cGU6Ok9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImNhbGxiYWNrVGhh
dFJldGhyb3dzRXhjZXB0aW9ucyIpLCByZXR1cm5lZEV4Y2VwdGlvbik7CiAgICAgaWYgKHJldHVy
bmVkRXhjZXB0aW9uKSB7CiAgICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogICAgICAgICB0aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHRocm93U2NvcGUsIHJl
dHVybmVkRXhjZXB0aW9uKTsKQEAgLTQxMCw3ICs0MTAsNyBAQCBDYWxsYmFja1Jlc3VsdDx0eXBl
bmFtZSBJRExET01TdHJpbmc6OkltCiAgICAgQVNTRVJUKCFhcmdzLmhhc092ZXJmbG93ZWQoKSk7
CiAKICAgICBOYWtlZFB0cjxKU0M6OkV4Y2VwdGlvbj4gcmV0dXJuZWRFeGNlcHRpb247Ci0gICAg
YXV0byBqc1Jlc3VsdCA9IG1fZGF0YS0+aW52b2tlQ2FsbGJhY2sodGhpc1ZhbHVlLCBhcmdzLCBK
U0NhbGxiYWNrRGF0YTo6Q2FsbGJhY2tUeXBlOjpPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJp
bmcoJnZtLCAiY2FsbGJhY2tUaGF0U2tpcHNJbnZva2VDaGVjayIpLCByZXR1cm5lZEV4Y2VwdGlv
bik7CisgICAgYXV0byBqc1Jlc3VsdCA9IG1fZGF0YS0+aW52b2tlQ2FsbGJhY2sodGhpc1ZhbHVl
LCBhcmdzLCBKU0NhbGxiYWNrRGF0YTo6Q2FsbGJhY2tUeXBlOjpPYmplY3QsIElkZW50aWZpZXI6
OmZyb21TdHJpbmcodm0sICJjYWxsYmFja1RoYXRTa2lwc0ludm9rZUNoZWNrIiksIHJldHVybmVk
RXhjZXB0aW9uKTsKICAgICBpZiAocmV0dXJuZWRFeGNlcHRpb24pIHsKICAgICAgICAgcmVwb3J0
RXhjZXB0aW9uKCZzdGF0ZSwgcmV0dXJuZWRFeGNlcHRpb24pOwogICAgICAgICByZXR1cm4gQ2Fs
bGJhY2tSZXN1bHRUeXBlOjpFeGNlcHRpb25UaHJvd247CkBAIC00NDAsNyArNDQwLDcgQEAgQ2Fs
bGJhY2tSZXN1bHQ8dHlwZW5hbWUgSURMRE9NU3RyaW5nOjpJbQogICAgIEFTU0VSVCghYXJncy5o
YXNPdmVyZmxvd2VkKCkpOwogCiAgICAgTmFrZWRQdHI8SlNDOjpFeGNlcHRpb24+IHJldHVybmVk
RXhjZXB0aW9uOwotICAgIGF1dG8ganNSZXN1bHQgPSBtX2RhdGEtPmludm9rZUNhbGxiYWNrKHRo
aXNWYWx1ZSwgYXJncywgSlNDYWxsYmFja0RhdGE6OkNhbGxiYWNrVHlwZTo6T2JqZWN0LCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImNhbGxiYWNrV2l0aFRoaXNPYmplY3QiKSwgcmV0dXJu
ZWRFeGNlcHRpb24pOworICAgIGF1dG8ganNSZXN1bHQgPSBtX2RhdGEtPmludm9rZUNhbGxiYWNr
KHRoaXNWYWx1ZSwgYXJncywgSlNDYWxsYmFja0RhdGE6OkNhbGxiYWNrVHlwZTo6T2JqZWN0LCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiY2FsbGJhY2tXaXRoVGhpc09iamVjdCIpLCByZXR1
cm5lZEV4Y2VwdGlvbik7CiAgICAgaWYgKHJldHVybmVkRXhjZXB0aW9uKSB7CiAgICAgICAgIHJl
cG9ydEV4Y2VwdGlvbigmc3RhdGUsIHJldHVybmVkRXhjZXB0aW9uKTsKICAgICAgICAgcmV0dXJu
IENhbGxiYWNrUmVzdWx0VHlwZTo6RXhjZXB0aW9uVGhyb3duOwpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0
cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IuY3BwCShyZXZpc2lv
biAyNDkxMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03
OSw3ICs3OSw3IEBAIHRlbXBsYXRlPD4gSlNWYWx1ZSBKU1Rlc3RDbGFzc1dpdGhKU0J1aWwKIHRl
bXBsYXRlPD4gdm9pZCBKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvckNvbnN0cnVj
dG9yOjppbml0aWFsaXplUHJvcGVydGllcyhWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9i
YWxPYmplY3QpCiB7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5
cGUsIEpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yOjpwcm90b3R5cGUodm0sIGds
b2JhbE9iamVjdCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUgfCBKU0M6OlBy
b3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRF
bnVtKTsKLSAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJp
dmlhbFN0cmluZygmdm0sIFN0cmluZygiVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9y
Il9zKSksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0
dHJpYnV0ZTo6RG9udEVudW0pOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+
bmFtZSwganNOb250cml2aWFsU3RyaW5nKHZtLCBTdHJpbmcoIlRlc3RDbGFzc1dpdGhKU0J1aWx0
aW5Db25zdHJ1Y3RvciJfcykpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpT
Qzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKICAgICBwdXREaXJlY3Qodm0sIHZtLnBy
b3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6
OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwogfQogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RE9NSklULmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0RE9NSklULmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERPTUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTUwMCw3ICs1MDAsNyBAQCB0ZW1wbGF0ZTw+IEpTVmFsdWUgSlNUZXN0RE9NSklUQ29uc3RydWN0
CiB0ZW1wbGF0ZTw+IHZvaWQgSlNUZXN0RE9NSklUQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9w
ZXJ0aWVzKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKIHsKICAgICBw
dXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgSlNUZXN0RE9NSklUOjpw
cm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRE
ZWxldGUgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlB
dHRyaWJ1dGU6OkRvbnRFbnVtKTsKLSAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMt
Pm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZygmdm0sIFN0cmluZygiVGVzdERPTUpJVCJfcykpLCBK
U0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6
OkRvbnRFbnVtKTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpz
Tm9udHJpdmlhbFN0cmluZyh2bSwgU3RyaW5nKCJUZXN0RE9NSklUIl9zKSksIEpTQzo6UHJvcGVy
dHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0p
OwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigw
KSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmli
dXRlOjpEb250RW51bSk7CiB9CiAKQEAgLTExMzQsNyArMTEzNCw3IEBAIEpTQzo6RW5jb2RlZEpT
VmFsdWUgSklUX09QRVJBVElPTiBqc1Rlc3QKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwog
ICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwotICAgIEpTQzo6TmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcigmdm0sIHN0YXRlKTsKKyAgICBKU0M6Ok5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIodm0sIHN0YXRlKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNh
c3RlZFRoaXMtPndyYXBwZWQoKTsKQEAgLTExNjYsNyArMTE2Niw3IEBAIEpTQzo6RW5jb2RlZEpT
VmFsdWUgSklUX09QRVJBVElPTiBqc1Rlc3QKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwog
ICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwotICAgIEpTQzo6TmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcigmdm0sIHN0YXRlKTsKKyAgICBKU0M6Ok5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIodm0sIHN0YXRlKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNh
c3RlZFRoaXMtPndyYXBwZWQoKTsKQEAgLTExOTQsNyArMTE5NCw3IEBAIEpTQzo6RW5jb2RlZEpT
VmFsdWUgSklUX09QRVJBVElPTiBqc1Rlc3QKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwog
ICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwotICAgIEpTQzo6TmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcigmdm0sIHN0YXRlKTsKKyAgICBKU0M6Ok5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIodm0sIHN0YXRlKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNh
c3RlZFRoaXMtPndyYXBwZWQoKTsKQEAgLTEyMjIsNyArMTIyMiw3IEBAIEpTQzo6RW5jb2RlZEpT
VmFsdWUgSklUX09QRVJBVElPTiBqc1Rlc3QKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwog
ICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwotICAgIEpTQzo6TmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcigmdm0sIHN0YXRlKTsKKyAgICBKU0M6Ok5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIodm0sIHN0YXRlKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNh
c3RlZFRoaXMtPndyYXBwZWQoKTsKQEAgLTEyNTIsNyArMTI1Miw3IEBAIEpTQzo6RW5jb2RlZEpT
VmFsdWUgSklUX09QRVJBVElPTiBqc1Rlc3QKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwog
ICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwotICAgIEpTQzo6TmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcigmdm0sIHN0YXRlKTsKKyAgICBKU0M6Ok5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIodm0sIHN0YXRlKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNh
c3RlZFRoaXMtPndyYXBwZWQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RFbmFibGVkQnlTZXR0aW5nLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RW5hYmxlZEJ5U2V0dGlu
Zy5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RFbmFibGVkQnlTZXR0aW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTAwLDcgKzEwMCw3IEBAIHRlbXBsYXRlPD4gSlNWYWx1ZSBKU1Rlc3RFbmFibGVkQnlTZXR0aW4K
IHRlbXBsYXRlPD4gdm9pZCBKU1Rlc3RFbmFibGVkQnlTZXR0aW5nQ29uc3RydWN0b3I6OmluaXRp
YWxpemVQcm9wZXJ0aWVzKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkK
IHsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgSlNUZXN0
RW5hYmxlZEJ5U2V0dGluZzo6cHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QpLCBKU0M6OlByb3Bl
cnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9u
bHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7Ci0gICAgcHV0RGlyZWN0KHZt
LCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcoJnZtLCBTdHJpbmco
IlRlc3RFbmFibGVkQnlTZXR0aW5nIl9zKSksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRP
bmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOworICAgIHB1dERpcmVjdCh2
bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKHZtLCBTdHJpbmco
IlRlc3RFbmFibGVkQnlTZXR0aW5nIl9zKSksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRP
bmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwogICAgIHB1dERpcmVjdCh2
bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigwKSwgSlNDOjpQcm9wZXJ0eUF0
dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CiB9
CiAKQEAgLTEzMyw3ICsxMzMsNyBAQCB2b2lkIEpTVGVzdEVuYWJsZWRCeVNldHRpbmdQcm90b3R5
cGU6OmZpCiAjaWYgRU5BQkxFKFRFU1RfRkVBVFVSRSkKICAgICBpZiAoIWRvd25jYXN0PERvY3Vt
ZW50Pihqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKSktPnNldHRpbmdzKCkudGVzdFNldHRpbmdFbmFibGVkKCkpIHsKICAg
ICAgICAgaGFzRGlzYWJsZWRSdW50aW1lUHJvcGVydGllcyA9IHRydWU7Ci0gICAgICAgIGF1dG8g
cHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgTENoYXIqPigiZW5hYmxlZEJ5U2V0dGluZ09wZXJhdGlvbiIpLCBzdHJsZW4oImVu
YWJsZWRCeVNldHRpbmdPcGVyYXRpb24iKSk7CisgICAgICAgIGF1dG8gcHJvcGVydHlOYW1lID0g
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+
KCJlbmFibGVkQnlTZXR0aW5nT3BlcmF0aW9uIiksIHN0cmxlbigiZW5hYmxlZEJ5U2V0dGluZ09w
ZXJhdGlvbiIpKTsKICAgICAgICAgVk06OkRlbGV0ZVByb3BlcnR5TW9kZVNjb3BlIHNjb3BlKHZt
LCBWTTo6RGVsZXRlUHJvcGVydHlNb2RlOjpJZ25vcmVDb25maWd1cmFibGUpOwogICAgICAgICBK
U09iamVjdDo6ZGVsZXRlUHJvcGVydHkodGhpcywgZ2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMo
KSwgcHJvcGVydHlOYW1lKTsKICAgICB9CkBAIC0xNDEsNyArMTQxLDcgQEAgdm9pZCBKU1Rlc3RF
bmFibGVkQnlTZXR0aW5nUHJvdG90eXBlOjpmaQogI2lmIEVOQUJMRShURVNUX0ZFQVRVUkUpCiAg
ICAgaWYgKCFkb3duY2FzdDxEb2N1bWVudD4oanNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xv
YmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpLT5zZXR0aW5ncygpLnRlc3RT
ZXR0aW5nRW5hYmxlZCgpKSB7CiAgICAgICAgIGhhc0Rpc2FibGVkUnVudGltZVByb3BlcnRpZXMg
PSB0cnVlOwotICAgICAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb21TdHJp
bmcoJnZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oImVuYWJsZWRCeVNldHRpbmdB
dHRyaWJ1dGUiKSwgc3RybGVuKCJlbmFibGVkQnlTZXR0aW5nQXR0cmlidXRlIikpOworICAgICAg
ICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiZW5hYmxlZEJ5U2V0dGluZ0F0dHJpYnV0ZSIpLCBzdHJs
ZW4oImVuYWJsZWRCeVNldHRpbmdBdHRyaWJ1dGUiKSk7CiAgICAgICAgIFZNOjpEZWxldGVQcm9w
ZXJ0eU1vZGVTY29wZSBzY29wZSh2bSwgVk06OkRlbGV0ZVByb3BlcnR5TW9kZTo6SWdub3JlQ29u
ZmlndXJhYmxlKTsKICAgICAgICAgSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KHRoaXMsIGdsb2Jh
bE9iamVjdCgpLT5nbG9iYWxFeGVjKCksIHByb3BlcnR5TmFtZSk7CiAgICAgfQpAQCAtMjM0LDkg
KzIzNCwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RFbmFibGVkQnlTZXR0aW5nVGVzCiAKIHN0
YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RFbmFibGVkQnlTZXR0aW5nVGVzdFN1Yk9iakVuYWJs
ZWRCeVNldHRpbmdDb25zdHJ1Y3RvclNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RFbmFi
bGVkQnlTZXR0aW5nJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBVTlVTRURfUEFS
QU0oc3RhdGUpOworICAgIFZNJiB2bSA9IHRocm93U2NvcGUudm0oKTsKICAgICAvLyBTaGFkb3dp
bmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KLSAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJl
Y3Qoc3RhdGUudm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUudm0oKSwgcmVpbnRl
cnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0U3ViT2JqRW5hYmxlZEJ5U2V0dGluZyIpLCBz
dHJsZW4oIlRlc3RTdWJPYmpFbmFibGVkQnlTZXR0aW5nIikpLCB2YWx1ZSk7CisgICAgcmV0dXJu
IHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWlu
dGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RTdWJPYmpFbmFibGVkQnlTZXR0aW5nIiks
IHN0cmxlbigiVGVzdFN1Yk9iakVuYWJsZWRCeVNldHRpbmciKSksIHZhbHVlKTsKIH0KIAogYm9v
bCBzZXRKU1Rlc3RFbmFibGVkQnlTZXR0aW5nVGVzdFN1Yk9iakVuYWJsZWRCeVNldHRpbmdDb25z
dHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKQEAgLTI2NCw2ICsyNjUsNyBAQCBFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RFbmFibGVkQnlTZXR0aW5nRW5hCiAjaWYgRU5BQkxFKFRFU1RfRkVBVFVSRSkKIHN0
YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RFbmFibGVkQnlTZXR0aW5nRW5hYmxlZEJ5U2V0dGlu
Z0F0dHJpYnV0ZVNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RFbmFibGVkQnlTZXR0aW5n
JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewor
ICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwog
ICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZh
bHVlID0gY29udmVydDxJRExET01TdHJpbmc+KHN0YXRlLCB2YWx1ZSk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RW5hYmxlZEZvckNvbnRleHQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RFbmFibGVkRm9yQ29udGV4dC5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFbmFibGVkRm9yQ29udGV4
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1LDcgKzg1LDcgQEAgdGVtcGxhdGU8PiBKU1ZhbHVl
IEpTVGVzdEVuYWJsZWRGb3JDb250ZQogdGVtcGxhdGU8PiB2b2lkIEpTVGVzdEVuYWJsZWRGb3JD
b250ZXh0Q29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKFZNJiB2bSwgSlNET01HbG9i
YWxPYmplY3QmIGdsb2JhbE9iamVjdCkKIHsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5
TmFtZXMtPnByb3RvdHlwZSwgSlNUZXN0RW5hYmxlZEZvckNvbnRleHQ6OnByb3RvdHlwZSh2bSwg
Z2xvYmFsT2JqZWN0KSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IEpTQzo6
UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9u
dEVudW0pOwotICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250
cml2aWFsU3RyaW5nKCZ2bSwgU3RyaW5nKCJUZXN0RW5hYmxlZEZvckNvbnRleHQiX3MpKSwgSlND
OjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpE
b250RW51bSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05v
bnRyaXZpYWxTdHJpbmcodm0sIFN0cmluZygiVGVzdEVuYWJsZWRGb3JDb250ZXh0Il9zKSksIEpT
Qzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6
RG9udEVudW0pOwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBq
c051bWJlcigwKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3Bl
cnR5QXR0cmlidXRlOjpEb250RW51bSk7CiB9CiAKQEAgLTE4NSw5ICsxODUsMTAgQEAgRW5jb2Rl
ZEpTVmFsdWUganNUZXN0RW5hYmxlZEZvckNvbnRleHRUZQogCiBzdGF0aWMgaW5saW5lIGJvb2wg
c2V0SlNUZXN0RW5hYmxlZEZvckNvbnRleHRUZXN0U3ViT2JqRW5hYmxlZEZvckNvbnRleHRDb25z
dHJ1Y3RvclNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RFbmFibGVkRm9yQ29udGV4dCYg
dGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAg
ICBWTSYgdm0gPSB0aHJvd1Njb3BlLnZtKCk7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4g
Y29uc3RydWN0b3IuCi0gICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHN0YXRlLnZtKCks
IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLnZtKCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgTENoYXIqPigiVGVzdFN1Yk9iakVuYWJsZWRGb3JDb250ZXh0IiksIHN0cmxlbigiVGVzdFN1
Yk9iakVuYWJsZWRGb3JDb250ZXh0IikpLCB2YWx1ZSk7CisgICAgcmV0dXJuIHRoaXNPYmplY3Qu
cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0
PGNvbnN0IExDaGFyKj4oIlRlc3RTdWJPYmpFbmFibGVkRm9yQ29udGV4dCIpLCBzdHJsZW4oIlRl
c3RTdWJPYmpFbmFibGVkRm9yQ29udGV4dCIpKSwgdmFsdWUpOwogfQogCiBib29sIHNldEpTVGVz
dEVuYWJsZWRGb3JDb250ZXh0VGVzdFN1Yk9iakVuYWJsZWRGb3JDb250ZXh0Q29uc3RydWN0b3Io
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkVmFsdWUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50Q29uc3RydWN0b3IuY3Bw
CShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1LDcg
KzU1LDcgQEAgdGVtcGxhdGU8PiBUZXN0RXZlbnRDb25zdHJ1Y3Rvcjo6SW5pdCBjbwogICAgIGlm
IChpc051bGxPclVuZGVmaW5lZCkKICAgICAgICAgYnViYmxlc1ZhbHVlID0ganNVbmRlZmluZWQo
KTsKICAgICBlbHNlIHsKLSAgICAgICAgYnViYmxlc1ZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRl
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImJ1YmJsZXMiKSk7CisgICAgICAgIGJ1
YmJsZXNWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2
bSwgImJ1YmJsZXMiKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
eyB9KTsKICAgICB9CiAgICAgaWYgKCFidWJibGVzVmFsdWUuaXNVbmRlZmluZWQoKSkgewpAQCAt
NjcsNyArNjcsNyBAQCB0ZW1wbGF0ZTw+IFRlc3RFdmVudENvbnN0cnVjdG9yOjpJbml0IGNvCiAg
ICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKQogICAgICAgICBjYW5jZWxhYmxlVmFsdWUgPSBqc1Vu
ZGVmaW5lZCgpOwogICAgIGVsc2UgewotICAgICAgICBjYW5jZWxhYmxlVmFsdWUgPSBvYmplY3Qt
PmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAiY2FuY2VsYWJsZSIp
KTsKKyAgICAgICAgY2FuY2VsYWJsZVZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKHZtLCAiY2FuY2VsYWJsZSIpKTsKICAgICAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0KICAgICBpZiAoIWNhbmNlbGFibGVWYWx1
ZS5pc1VuZGVmaW5lZCgpKSB7CkBAIC03OSw3ICs3OSw3IEBAIHRlbXBsYXRlPD4gVGVzdEV2ZW50
Q29uc3RydWN0b3I6OkluaXQgY28KICAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQpCiAgICAgICAg
IGNvbXBvc2VkVmFsdWUgPSBqc1VuZGVmaW5lZCgpOwogICAgIGVsc2UgewotICAgICAgICBjb21w
b3NlZFZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZz
dGF0ZSwgImNvbXBvc2VkIikpOworICAgICAgICBjb21wb3NlZFZhbHVlID0gb2JqZWN0LT5nZXQo
JnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiY29tcG9zZWQiKSk7CiAgICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICB9CiAgICAgaWYgKCFj
b21wb3NlZFZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKQEAgLTkxLDcgKzkxLDcgQEAgdGVtcGxhdGU8
PiBUZXN0RXZlbnRDb25zdHJ1Y3Rvcjo6SW5pdCBjbwogICAgIGlmIChpc051bGxPclVuZGVmaW5l
ZCkKICAgICAgICAgYXR0cjJWYWx1ZSA9IGpzVW5kZWZpbmVkKCk7CiAgICAgZWxzZSB7Ci0gICAg
ICAgIGF0dHIyVmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJp
bmcoJnN0YXRlLCAiYXR0cjIiKSk7CisgICAgICAgIGF0dHIyVmFsdWUgPSBvYmplY3QtPmdldCgm
c3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJhdHRyMiIpKTsKICAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0KICAgICBpZiAoIWF0dHIy
VmFsdWUuaXNVbmRlZmluZWQoKSkgewpAQCAtMTA0LDcgKzEwNCw3IEBAIHRlbXBsYXRlPD4gVGVz
dEV2ZW50Q29uc3RydWN0b3I6OkluaXQgY28KICAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQpCiAg
ICAgICAgIGF0dHIzVmFsdWUgPSBqc1VuZGVmaW5lZCgpOwogICAgIGVsc2UgewotICAgICAgICBh
dHRyM1ZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZz
dGF0ZSwgImF0dHIzIikpOworICAgICAgICBhdHRyM1ZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRl
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiYXR0cjMiKSk7CiAgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICB9CiAgICAgaWYgKCFhdHRyM1ZhbHVl
LmlzVW5kZWZpbmVkKCkpIHsKQEAgLTE3OCw3ICsxNzgsNyBAQCB0ZW1wbGF0ZTw+IEpTVmFsdWUg
SlNUZXN0RXZlbnRDb25zdHJ1Y3RvCiB0ZW1wbGF0ZTw+IHZvaWQgSlNUZXN0RXZlbnRDb25zdHJ1
Y3RvckNvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGllcyhWTSYgdm0sIEpTRE9NR2xvYmFs
T2JqZWN0JiBnbG9iYWxPYmplY3QpCiB7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5h
bWVzLT5wcm90b3R5cGUsIEpTVGVzdEV2ZW50Q29uc3RydWN0b3I6OnByb3RvdHlwZSh2bSwgZ2xv
YmFsT2JqZWN0KSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IEpTQzo6UHJv
cGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVu
dW0pOwotICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2
aWFsU3RyaW5nKCZ2bSwgU3RyaW5nKCJUZXN0RXZlbnRDb25zdHJ1Y3RvciJfcykpLCBKU0M6OlBy
b3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRF
bnVtKTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJp
dmlhbFN0cmluZyh2bSwgU3RyaW5nKCJUZXN0RXZlbnRDb25zdHJ1Y3RvciJfcykpLCBKU0M6OlBy
b3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRF
bnVtKTsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1i
ZXIoMSksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0
dHJpYnV0ZTo6RG9udEVudW0pOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRUYXJnZXQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudFRhcmdldC5jcHAJ
KHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RFdmVudFRhcmdldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3LDcgKzg3LDcg
QEAgdGVtcGxhdGU8PiBKU1ZhbHVlIEpTVGVzdEV2ZW50VGFyZ2V0Q29ucwogdGVtcGxhdGU8PiB2
b2lkIEpTVGVzdEV2ZW50VGFyZ2V0Q29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKFZN
JiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKIHsKICAgICBwdXREaXJlY3Qo
dm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgSlNUZXN0RXZlbnRUYXJnZXQ6OnByb3Rv
dHlwZSh2bSwgZ2xvYmFsT2JqZWN0KSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0
ZSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJp
YnV0ZTo6RG9udEVudW0pOwotICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFt
ZSwganNOb250cml2aWFsU3RyaW5nKCZ2bSwgU3RyaW5nKCJUZXN0RXZlbnRUYXJnZXQiX3MpKSwg
SlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRl
OjpEb250RW51bSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBq
c05vbnRyaXZpYWxTdHJpbmcodm0sIFN0cmluZygiVGVzdEV2ZW50VGFyZ2V0Il9zKSksIEpTQzo6
UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9u
dEVudW0pOwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051
bWJlcigwKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5
QXR0cmlidXRlOjpEb250RW51bSk7CiB9CiAKQEAgLTE2Nyw2ICsxNjcsNyBAQCBib29sIEpTVGVz
dEV2ZW50VGFyZ2V0OjpnZXRPd25Qcm9wZXJ0eVNsCiAKIGJvb2wgSlNUZXN0RXZlbnRUYXJnZXQ6
OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBz
dGF0ZSwgdW5zaWduZWQgaW5kZXgsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKKyAgICBWTSYgdm0g
PSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdEV2ZW50
VGFyZ2V0Kj4ob2JqZWN0KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmpl
Y3QsIGluZm8oKSk7CiAgICAgaWYgKExJS0VMWShpbmRleCA8PSBNQVhfQVJSQVlfSU5ERVgpKSB7
CkBAIC0xNzcsNyArMTc4LDcgQEAgYm9vbCBKU1Rlc3RFdmVudFRhcmdldDo6Z2V0T3duUHJvcGVy
dHlTbAogICAgICAgICB9CiAgICAgICAgIHJldHVybiBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlT
bG90QnlJbmRleChvYmplY3QsIHN0YXRlLCBpbmRleCwgc2xvdCk7CiAgICAgfQotICAgIGF1dG8g
cHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbShzdGF0ZSwgaW5kZXgpOworICAgIGF1dG8g
cHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbSh2bSwgaW5kZXgpOwogICAgIHVzaW5nIEdl
dHRlcklETFR5cGUgPSBJRExJbnRlcmZhY2U8Tm9kZT47CiAgICAgYXV0byBnZXR0ZXJGdW5jdG9y
ID0gW10gKGF1dG8mIHRoaXNPYmplY3QsIGF1dG8gcHJvcGVydHlOYW1lKSAtPiBPcHRpb25hbDx0
eXBlbmFtZSBHZXR0ZXJJRExUeXBlOjpJbXBsZW1lbnRhdGlvblR5cGU+IHsKICAgICAgICAgYXV0
byByZXN1bHQgPSB0aGlzT2JqZWN0LndyYXBwZWQoKS5uYW1lZEl0ZW0ocHJvcGVydHlOYW1lVG9B
dG9tU3RyaW5nKHByb3BlcnR5TmFtZSkpOwpAQCAtMTk1LDEyICsxOTYsMTMgQEAgYm9vbCBKU1Rl
c3RFdmVudFRhcmdldDo6Z2V0T3duUHJvcGVydHlTbAogCiB2b2lkIEpTVGVzdEV2ZW50VGFyZ2V0
OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogc3RhdGUs
IFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkK
IHsKKyAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganND
YXN0PEpTVGVzdEV2ZW50VGFyZ2V0Kj4ob2JqZWN0KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lO
SEVSSVRTKG9iamVjdCwgaW5mbygpKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwLCBjb3VudCA9
IHRoaXNPYmplY3QtPndyYXBwZWQoKS5sZW5ndGgoKTsgaSA8IGNvdW50OyArK2kpCi0gICAgICAg
IHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb20oc3RhdGUsIGkpKTsKKyAgICAgICAg
cHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbSh2bSwgaSkpOwogICAgIGZvciAoYXV0
byYgcHJvcGVydHlOYW1lIDogdGhpc09iamVjdC0+d3JhcHBlZCgpLnN1cHBvcnRlZFByb3BlcnR5
TmFtZXMoKSkKLSAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbVN0cmlu
ZyhzdGF0ZSwgcHJvcGVydHlOYW1lKSk7CisgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50
aWZpZXI6OmZyb21TdHJpbmcodm0sIHByb3BlcnR5TmFtZSkpOwogICAgIEpTT2JqZWN0OjpnZXRP
d25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgc3RhdGUsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwogfQog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXhj
ZXB0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0RXhjZXB0aW9uLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV4Y2VwdGlvbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTgxLDcgKzgxLDcgQEAgdGVtcGxhdGU8PiBKU1ZhbHVlIEpTVGVzdEV4
Y2VwdGlvbkNvbnN0cgogdGVtcGxhdGU8PiB2b2lkIEpTVGVzdEV4Y2VwdGlvbkNvbnN0cnVjdG9y
Ojppbml0aWFsaXplUHJvcGVydGllcyhWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxP
YmplY3QpCiB7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUs
IEpTVGVzdEV4Y2VwdGlvbjo6cHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QpLCBKU0M6OlByb3Bl
cnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9u
bHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7Ci0gICAgcHV0RGlyZWN0KHZt
LCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcoJnZtLCBTdHJpbmco
IlRlc3RFeGNlcHRpb24iX3MpKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBK
U0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5w
cm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcodm0sIFN0cmluZygiVGVzdEV4
Y2VwdGlvbiJfcykpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJv
cGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5
TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRP
bmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwogfQogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2VuZXJhdGVJc1JlYWNo
YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2VuZXJhdGVJ
c1JlYWNoYWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgxLDcgKzgxLDcgQEAgdGVtcGxhdGU8
PiBKU1ZhbHVlIEpTVGVzdEdlbmVyYXRlSXNSZWFjaAogdGVtcGxhdGU8PiB2b2lkIEpTVGVzdEdl
bmVyYXRlSXNSZWFjaGFibGVDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMoVk0mIHZt
LCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQogewogICAgIHB1dERpcmVjdCh2bSwg
dm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlOjpw
cm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRE
ZWxldGUgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlB
dHRyaWJ1dGU6OkRvbnRFbnVtKTsKLSAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMt
Pm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZygmdm0sIFN0cmluZygiVGVzdEdlbmVyYXRlSXNSZWFj
aGFibGUiX3MpKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3Bl
cnR5QXR0cmlidXRlOjpEb250RW51bSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5h
bWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcodm0sIFN0cmluZygiVGVzdEdlbmVyYXRlSXNS
ZWFjaGFibGUiX3MpKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlBy
b3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0
eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDApLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFk
T25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKIH0KIApAQCAtMTA0LDcg
KzEwNCw3IEBAIHZvaWQgSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZVByb3RvdHlwZToKICAgICBi
b29sIGhhc0Rpc2FibGVkUnVudGltZVByb3BlcnRpZXMgPSBmYWxzZTsKICAgICBpZiAoIWpzQ2Fz
dDxKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpLT5pc1NlY3VyZUNvbnRleHQoKSkgewogICAgICAgICBoYXNEaXNhYmxlZFJ1bnRpbWVQ
cm9wZXJ0aWVzID0gdHJ1ZTsKLSAgICAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKCZ2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJhU2VjcmV0
QXR0cmlidXRlIiksIHN0cmxlbigiYVNlY3JldEF0dHJpYnV0ZSIpKTsKKyAgICAgICAgYXV0byBw
cm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0
PGNvbnN0IExDaGFyKj4oImFTZWNyZXRBdHRyaWJ1dGUiKSwgc3RybGVuKCJhU2VjcmV0QXR0cmli
dXRlIikpOwogICAgICAgICBWTTo6RGVsZXRlUHJvcGVydHlNb2RlU2NvcGUgc2NvcGUodm0sIFZN
OjpEZWxldGVQcm9wZXJ0eU1vZGU6Oklnbm9yZUNvbmZpZ3VyYWJsZSk7CiAgICAgICAgIEpTT2Jq
ZWN0OjpkZWxldGVQcm9wZXJ0eSh0aGlzLCBnbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpLCBw
cm9wZXJ0eU5hbWUpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RHbG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RHbG9iYWxPYmplY3QuY3BwCShy
ZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0R2xvYmFsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjY2LDcgKzY2Niw3
IEBAIHRlbXBsYXRlPD4gSlNWYWx1ZSBKU1Rlc3RHbG9iYWxPYmplY3RDb24KIHRlbXBsYXRlPD4g
dm9pZCBKU1Rlc3RHbG9iYWxPYmplY3RDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMo
Vk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQogewogICAgIHB1dERpcmVj
dCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBnbG9iYWxPYmplY3QuZ2V0UHJvdG90
eXBlRGlyZWN0KHZtKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IEpTQzo6
UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9u
dEVudW0pOwotICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250
cml2aWFsU3RyaW5nKCZ2bSwgU3RyaW5nKCJUZXN0R2xvYmFsT2JqZWN0Il9zKSksIEpTQzo6UHJv
cGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVu
dW0pOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2
aWFsU3RyaW5nKHZtLCBTdHJpbmcoIlRlc3RHbG9iYWxPYmplY3QiX3MpKSwgSlNDOjpQcm9wZXJ0
eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7
CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDAp
LCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1
dGU6OkRvbnRFbnVtKTsKICAgICByZWlmeVN0YXRpY1Byb3BlcnRpZXModm0sIEpTVGVzdEdsb2Jh
bE9iamVjdDo6aW5mbygpLCBKU1Rlc3RHbG9iYWxPYmplY3RDb25zdHJ1Y3RvclRhYmxlVmFsdWVz
LCAqdGhpcyk7CiB9CkBAIC04MDMsNiArODAzLDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0R2xv
YmFsT2JqZWN0UmVndWxhcgogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2Jq
ZWN0UmVndWxhckF0dHJpYnV0ZVNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RHbG9iYWxP
YmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUp
CiB7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0
aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oc3RhdGUsIHZhbHVlKTsKQEAgLTgzNCw2
ICs4MzUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RQdWJsaWNBCiAKIHN0
YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RQdWJsaWNBbmRQcml2YXRlQXR0
cmlidXRlU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09i
amVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKKyAgICBVTlVT
RURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRv
JiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNv
bnZlcnQ8SURMRE9NU3RyaW5nPihzdGF0ZSwgdmFsdWUpOwpAQCAtODY5LDYgKzg3MSw3IEBAIEVu
Y29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFB1YmxpY0EKICNpZiBFTkFCTEUoVEVTVF9G
RUFUVVJFKQogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFB1YmxpY0Fu
ZFByaXZhdGVDb25kaXRpb25hbEF0dHJpYnV0ZVNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rl
c3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRo
cm93U2NvcGUpCiB7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAg
IGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oc3RhdGUsIHZhbHVlKTsK
QEAgLTkwNiw2ICs5MDksNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RFbmFi
bGVkCiAjaWYgRU5BQkxFKFRFU1RfRkVBVFVSRSkKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rl
c3RHbG9iYWxPYmplY3RFbmFibGVkQXRSdW50aW1lQXR0cmlidXRlU2V0dGVyKEV4ZWNTdGF0ZSYg
c3RhdGUsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhy
b3dTY29wZSYgdGhyb3dTY29wZSkKIHsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFw
cGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPihzdGF0
ZSwgdmFsdWUpOwpAQCAtOTM3LDkgKzk0MSwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9i
YWxPYmplY3RUZXN0Q0VSCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmpl
Y3RUZXN0Q0VSZWFjdGlvbnNDb25zdHJ1Y3RvclNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rl
c3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRo
cm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIFVOVVNFRF9Q
QVJBTShzdGF0ZSk7CisgICAgVk0mIHZtID0gdGhyb3dTY29wZS52bSgpOwogICAgIC8vIFNoYWRv
d2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgotICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERp
cmVjdChzdGF0ZS52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZS52bSgpLCByZWlu
dGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RDRVJlYWN0aW9ucyIpLCBzdHJsZW4oIlRl
c3RDRVJlYWN0aW9ucyIpKSwgdmFsdWUpOworICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVj
dCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBM
Q2hhcio+KCJUZXN0Q0VSZWFjdGlvbnMiKSwgc3RybGVuKCJUZXN0Q0VSZWFjdGlvbnMiKSksIHZh
bHVlKTsKIH0KIAogYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0Q0VSZWFjdGlvbnNDb25z
dHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKQEAgLTk2MSw5ICs5NjYsMTAgQEAgRW5jb2RlZEpTVmFs
dWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdENFUgogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNU
ZXN0R2xvYmFsT2JqZWN0VGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXJDb25zdHJ1Y3RvclNldHRl
cihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFs
dWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVk0mIHZtID0gdGhyb3dT
Y29wZS52bSgpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgotICAg
IHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdChzdGF0ZS52bSgpLCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKCZzdGF0ZS52bSgpLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RD
RVJlYWN0aW9uc1N0cmluZ2lmaWVyIiksIHN0cmxlbigiVGVzdENFUmVhY3Rpb25zU3RyaW5naWZp
ZXIiKSksIHZhbHVlKTsKKyAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50
aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVz
dENFUmVhY3Rpb25zU3RyaW5naWZpZXIiKSwgc3RybGVuKCJUZXN0Q0VSZWFjdGlvbnNTdHJpbmdp
ZmllciIpKSwgdmFsdWUpOwogfQogCiBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RDRVJl
YWN0aW9uc1N0cmluZ2lmaWVyQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCkBAIC05ODUsOSAr
OTkxLDEwIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RDYWwKIAogc3Rh
dGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RDYWxsVHJhY2VyQ29uc3Ry
dWN0b3JTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2Jq
ZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFZNJiB2
bSA9IHRocm93U2NvcGUudm0oKTsKICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1
Y3Rvci4KLSAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qoc3RhdGUudm0oKSwgSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZygmc3RhdGUudm0oKSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hh
cio+KCJUZXN0Q2FsbFRyYWNlciIpLCBzdHJsZW4oIlRlc3RDYWxsVHJhY2VyIikpLCB2YWx1ZSk7
CisgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RDYWxsVHJhY2VyIiks
IHN0cmxlbigiVGVzdENhbGxUcmFjZXIiKSksIHZhbHVlKTsKIH0KIAogYm9vbCBzZXRKU1Rlc3RH
bG9iYWxPYmplY3RUZXN0Q2FsbFRyYWNlckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQpAQCAt
MTAxMyw5ICsxMDIwLDEwIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RD
YWwKICNpZiBFTkFCTEUoVEVTVF9DT05ESVRJT05BTCkKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRK
U1Rlc3RHbG9iYWxPYmplY3RUZXN0Q2FsbGJhY2tJbnRlcmZhY2VDb25zdHJ1Y3RvclNldHRlcihF
eGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUg
dmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVk0mIHZtID0gdGhyb3dTY29w
ZS52bSgpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgotICAgIHJl
dHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdChzdGF0ZS52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKCZzdGF0ZS52bSgpLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RDYWxs
YmFja0ludGVyZmFjZSIpLCBzdHJsZW4oIlRlc3RDYWxsYmFja0ludGVyZmFjZSIpKSwgdmFsdWUp
OworICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0Q2FsbGJhY2tJbnRl
cmZhY2UiKSwgc3RybGVuKCJUZXN0Q2FsbGJhY2tJbnRlcmZhY2UiKSksIHZhbHVlKTsKIH0KIAog
Ym9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0Q2FsbGJhY2tJbnRlcmZhY2VDb25zdHJ1Y3Rv
cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRWYWx1ZSkKQEAgLTEwMzksOSArMTA0NywxMCBAQCBFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RHbG9iYWxPYmplY3RUZXN0Q2xhCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RH
bG9iYWxPYmplY3RUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JDb25zdHJ1Y3RvclNl
dHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpT
VmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVk0mIHZtID0gdGhy
b3dTY29wZS52bSgpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgot
ICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdChzdGF0ZS52bSgpLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKCZzdGF0ZS52bSgpLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRl
c3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvciIpLCBzdHJsZW4oIlRlc3RDbGFzc1dpdGhK
U0J1aWx0aW5Db25zdHJ1Y3RvciIpKSwgdmFsdWUpOworICAgIHJldHVybiB0aGlzT2JqZWN0LnB1
dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxj
b25zdCBMQ2hhcio+KCJUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IiKSwgc3RybGVu
KCJUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IiKSksIHZhbHVlKTsKIH0KIAogYm9v
bCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JD
b25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKQEAgLTEwNjMsOSArMTA3MiwxMCBAQCBFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0RE9NCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBz
ZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0RE9NSklUQ29uc3RydWN0b3JTZXR0ZXIoRXhlY1N0YXRl
JiBzdGF0ZSwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
KyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFZNJiB2bSA9IHRocm93U2NvcGUudm0oKTsK
ICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KLSAgICByZXR1cm4gdGhp
c09iamVjdC5wdXREaXJlY3Qoc3RhdGUudm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3Rh
dGUudm0oKSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0RE9NSklUIiksIHN0
cmxlbigiVGVzdERPTUpJVCIpKSwgdmFsdWUpOworICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERp
cmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25z
dCBMQ2hhcio+KCJUZXN0RE9NSklUIiksIHN0cmxlbigiVGVzdERPTUpJVCIpKSwgdmFsdWUpOwog
fQogCiBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RET01KSVRDb25zdHJ1Y3RvcihFeGVj
U3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRWYWx1ZSkKQEAgLTEwODcsOSArMTA5NywxMCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RH
bG9iYWxPYmplY3RUZXN0RG9tCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxP
YmplY3RUZXN0RG9tYWluU2VjdXJpdHlDb25zdHJ1Y3RvclNldHRlcihFeGVjU3RhdGUmIHN0YXRl
LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2Nv
cGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIFVO
VVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVk0mIHZtID0gdGhyb3dTY29wZS52bSgpOwogICAgIC8v
IFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgotICAgIHJldHVybiB0aGlzT2JqZWN0
LnB1dERpcmVjdChzdGF0ZS52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZS52bSgp
LCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3REb21haW5TZWN1cml0eSIpLCBz
dHJsZW4oIlRlc3REb21haW5TZWN1cml0eSIpKSwgdmFsdWUpOworICAgIHJldHVybiB0aGlzT2Jq
ZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0RG9tYWluU2VjdXJpdHkiKSwgc3RybGVuKCJUZXN0RG9t
YWluU2VjdXJpdHkiKSksIHZhbHVlKTsKIH0KIAogYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RU
ZXN0RG9tYWluU2VjdXJpdHlDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKQEAgLTExMTEsOSAr
MTEyMiwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0RW5hCiAKIHN0
YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0RW5hYmxlZEJ5U2V0dGlu
Z0NvbnN0cnVjdG9yU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEdsb2JhbE9iamVjdCYg
dGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAg
ICBWTSYgdm0gPSB0aHJvd1Njb3BlLnZtKCk7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4g
Y29uc3RydWN0b3IuCi0gICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHN0YXRlLnZtKCks
IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLnZtKCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgTENoYXIqPigiVGVzdEVuYWJsZWRCeVNldHRpbmciKSwgc3RybGVuKCJUZXN0RW5hYmxlZEJ5
U2V0dGluZyIpKSwgdmFsdWUpOworICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+
KCJUZXN0RW5hYmxlZEJ5U2V0dGluZyIpLCBzdHJsZW4oIlRlc3RFbmFibGVkQnlTZXR0aW5nIikp
LCB2YWx1ZSk7CiB9CiAKIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdEVuYWJsZWRCeVNl
dHRpbmdDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFs
dWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKQEAgLTExMzUsOSArMTE0NywxMCBAQCBF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0RW5hCiAKIHN0YXRpYyBpbmxpbmUg
Ym9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0RW5hYmxlZEZvckNvbnRleHRDb25zdHJ1Y3Rv
clNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3Qs
IEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVk0mIHZtID0g
dGhyb3dTY29wZS52bSgpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9y
LgotICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdChzdGF0ZS52bSgpLCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKCZzdGF0ZS52bSgpLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4o
IlRlc3RFbmFibGVkRm9yQ29udGV4dCIpLCBzdHJsZW4oIlRlc3RFbmFibGVkRm9yQ29udGV4dCIp
KSwgdmFsdWUpOworICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0RW5h
YmxlZEZvckNvbnRleHQiKSwgc3RybGVuKCJUZXN0RW5hYmxlZEZvckNvbnRleHQiKSksIHZhbHVl
KTsKIH0KIAogYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0RW5hYmxlZEZvckNvbnRleHRD
b25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKQEAgLTExNTksOSArMTE3MiwxMCBAQCBFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0RXZlCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBz
ZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0RXZlbnRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yU2V0dGVy
KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1
ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBWTSYgdm0gPSB0aHJvd1Nj
b3BlLnZtKCk7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCi0gICAg
cmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHN0YXRlLnZtKCksIElkZW50aWZpZXI6OmZyb21T
dHJpbmcoJnN0YXRlLnZtKCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdEV2
ZW50Q29uc3RydWN0b3IiKSwgc3RybGVuKCJUZXN0RXZlbnRDb25zdHJ1Y3RvciIpKSwgdmFsdWUp
OworICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0RXZlbnRDb25zdHJ1
Y3RvciIpLCBzdHJsZW4oIlRlc3RFdmVudENvbnN0cnVjdG9yIikpLCB2YWx1ZSk7CiB9CiAKIGJv
b2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3RvcihF
eGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRWYWx1ZSkKQEAgLTExODMsOSArMTE5NywxMCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RHbG9iYWxPYmplY3RUZXN0RXZlCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9i
YWxPYmplY3RUZXN0RXZlbnRUYXJnZXRDb25zdHJ1Y3RvclNldHRlcihFeGVjU3RhdGUmIHN0YXRl
LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2Nv
cGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIFVO
VVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVk0mIHZtID0gdGhyb3dTY29wZS52bSgpOwogICAgIC8v
IFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgotICAgIHJldHVybiB0aGlzT2JqZWN0
LnB1dERpcmVjdChzdGF0ZS52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZS52bSgp
LCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RFdmVudFRhcmdldCIpLCBzdHJs
ZW4oIlRlc3RFdmVudFRhcmdldCIpKSwgdmFsdWUpOworICAgIHJldHVybiB0aGlzT2JqZWN0LnB1
dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxj
b25zdCBMQ2hhcio+KCJUZXN0RXZlbnRUYXJnZXQiKSwgc3RybGVuKCJUZXN0RXZlbnRUYXJnZXQi
KSksIHZhbHVlKTsKIH0KIAogYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0RXZlbnRUYXJn
ZXRDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKQEAgLTEyMDcsOSArMTIyMiwxMCBAQCBFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0RXhjCiAKIHN0YXRpYyBpbmxpbmUgYm9v
bCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0RXhjZXB0aW9uQ29uc3RydWN0b3JTZXR0ZXIoRXhl
Y1N0YXRlJiBzdGF0ZSwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZh
bHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFZNJiB2bSA9IHRocm93U2NvcGUu
dm0oKTsKICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KLSAgICByZXR1
cm4gdGhpc09iamVjdC5wdXREaXJlY3Qoc3RhdGUudm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zygmc3RhdGUudm0oKSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0RXhjZXB0
aW9uIiksIHN0cmxlbigiVGVzdEV4Y2VwdGlvbiIpKSwgdmFsdWUpOworICAgIHJldHVybiB0aGlz
T2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0RXhjZXB0aW9uIiksIHN0cmxlbigiVGVzdEV4Y2Vw
dGlvbiIpKSwgdmFsdWUpOwogfQogCiBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RFeGNl
cHRpb25Db25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFs
dWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKQEAgLTEyMzEsOSArMTI0NywxMCBAQCBF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0R2VuCiAKIHN0YXRpYyBpbmxpbmUg
Ym9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZUNvbnN0cnVj
dG9yU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVj
dCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBWTSYgdm0g
PSB0aHJvd1Njb3BlLnZtKCk7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0
b3IuCi0gICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHN0YXRlLnZtKCksIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcoJnN0YXRlLnZtKCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIq
PigiVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUiKSwgc3RybGVuKCJUZXN0R2VuZXJhdGVJc1JlYWNo
YWJsZSIpKSwgdmFsdWUpOworICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJU
ZXN0R2VuZXJhdGVJc1JlYWNoYWJsZSIpLCBzdHJsZW4oIlRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxl
IikpLCB2YWx1ZSk7CiB9CiAKIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdEdlbmVyYXRl
SXNSZWFjaGFibGVDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0
aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKQEAgLTEyNTUsOSArMTI3Miwx
MCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0R2xvCiAKIHN0YXRpYyBp
bmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0R2xvYmFsT2JqZWN0Q29uc3RydWN0
b3JTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0
LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFZNJiB2bSA9
IHRocm93U2NvcGUudm0oKTsKICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rv
ci4KLSAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qoc3RhdGUudm0oKSwgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZygmc3RhdGUudm0oKSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+
KCJUZXN0R2xvYmFsT2JqZWN0IiksIHN0cmxlbigiVGVzdEdsb2JhbE9iamVjdCIpKSwgdmFsdWUp
OworICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0R2xvYmFsT2JqZWN0
IiksIHN0cmxlbigiVGVzdEdsb2JhbE9iamVjdCIpKSwgdmFsdWUpOwogfQogCiBib29sIHNldEpT
VGVzdEdsb2JhbE9iamVjdFRlc3RHbG9iYWxPYmplY3RDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0
YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1
ZSkKQEAgLTEyNzksOSArMTI5NywxMCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmpl
Y3RUZXN0SW5kCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0
SW5kZXhlZFNldHRlck5vSWRlbnRpZmllckNvbnN0cnVjdG9yU2V0dGVyKEV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dT
Y29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAg
VU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBWTSYgdm0gPSB0aHJvd1Njb3BlLnZtKCk7CiAgICAg
Ly8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCi0gICAgcmV0dXJuIHRoaXNPYmpl
Y3QucHV0RGlyZWN0KHN0YXRlLnZtKCksIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLnZt
KCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdEluZGV4ZWRTZXR0ZXJOb0lk
ZW50aWZpZXIiKSwgc3RybGVuKCJUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllciIpKSwgdmFs
dWUpOworICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0SW5kZXhlZFNl
dHRlck5vSWRlbnRpZmllciIpLCBzdHJsZW4oIlRlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVy
IikpLCB2YWx1ZSk7CiB9CiAKIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdEluZGV4ZWRT
ZXR0ZXJOb0lkZW50aWZpZXJDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKQEAgLTEzMDMsOSAr
MTMyMiwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0SW5kCiAKIHN0
YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0SW5kZXhlZFNldHRlclRo
cm93aW5nRXhjZXB0aW9uQ29uc3RydWN0b3JTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0
R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBVTlVTRURfUEFS
QU0oc3RhdGUpOworICAgIFZNJiB2bSA9IHRocm93U2NvcGUudm0oKTsKICAgICAvLyBTaGFkb3dp
bmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KLSAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJl
Y3Qoc3RhdGUudm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUudm0oKSwgcmVpbnRl
cnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0
aW9uIiksIHN0cmxlbigiVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbiIpKSwgdmFs
dWUpOworICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0SW5kZXhlZFNl
dHRlclRocm93aW5nRXhjZXB0aW9uIiksIHN0cmxlbigiVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2lu
Z0V4Y2VwdGlvbiIpKSwgdmFsdWUpOwogfQogCiBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRl
c3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb25Db25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0
YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1
ZSkKQEAgLTEzMjcsOSArMTM0NywxMCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmpl
Y3RUZXN0SW5kCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0
SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyQ29uc3RydWN0b3JTZXR0ZXIoRXhlY1N0YXRlJiBz
dGF0ZSwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAg
ICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFZNJiB2bSA9IHRocm93U2NvcGUudm0oKTsKICAg
ICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KLSAgICByZXR1cm4gdGhpc09i
amVjdC5wdXREaXJlY3Qoc3RhdGUudm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUu
dm0oKSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0SW5kZXhlZFNldHRlcldp
dGhJZGVudGlmaWVyIiksIHN0cmxlbigiVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllciIp
KSwgdmFsdWUpOworICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0SW5k
ZXhlZFNldHRlcldpdGhJZGVudGlmaWVyIiksIHN0cmxlbigiVGVzdEluZGV4ZWRTZXR0ZXJXaXRo
SWRlbnRpZmllciIpKSwgdmFsdWUpOwogfQogCiBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRl
c3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXJDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRl
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkK
QEAgLTEzNTUsOSArMTM3NiwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RU
ZXN0SW50CiAjaWYgRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24yKQogc3Rh
dGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RJbnRlcmZhY2VDb25zdHJ1
Y3RvclNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmpl
Y3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVk0mIHZt
ID0gdGhyb3dTY29wZS52bSgpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVj
dG9yLgotICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdChzdGF0ZS52bSgpLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKCZzdGF0ZS52bSgpLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFy
Kj4oIlRlc3RJbnRlcmZhY2UiKSwgc3RybGVuKCJUZXN0SW50ZXJmYWNlIikpLCB2YWx1ZSk7Cisg
ICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RJbnRlcmZhY2UiKSwgc3Ry
bGVuKCJUZXN0SW50ZXJmYWNlIikpLCB2YWx1ZSk7CiB9CiAKIGJvb2wgc2V0SlNUZXN0R2xvYmFs
T2JqZWN0VGVzdEludGVyZmFjZUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQpAQCAtMTM4MSw5
ICsxNDAzLDEwIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RJbnQKIAog
c3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RJbnRlcmZhY2VMZWFk
aW5nVW5kZXJzY29yZUNvbnN0cnVjdG9yU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEds
b2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dT
Y29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgVU5VU0VEX1BBUkFN
KHN0YXRlKTsKKyAgICBWTSYgdm0gPSB0aHJvd1Njb3BlLnZtKCk7CiAgICAgLy8gU2hhZG93aW5n
IGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCi0gICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0
KHN0YXRlLnZtKCksIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLnZtKCksIHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlIiks
IHN0cmxlbigiVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlIikpLCB2YWx1ZSk7CisgICAg
cmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZt
LCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RJbnRlcmZhY2VMZWFkaW5nVW5k
ZXJzY29yZSIpLCBzdHJsZW4oIlRlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZSIpKSwgdmFs
dWUpOwogfQogCiBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RJbnRlcmZhY2VMZWFkaW5n
VW5kZXJzY29yZUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQpAQCAtMTQwNSw5ICsxNDI4LDEw
IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RJdGUKIAogc3RhdGljIGlu
bGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RJdGVyYWJsZUNvbnN0cnVjdG9yU2V0
dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNW
YWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBWTSYgdm0gPSB0aHJv
d1Njb3BlLnZtKCk7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCi0g
ICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHN0YXRlLnZtKCksIElkZW50aWZpZXI6OmZy
b21TdHJpbmcoJnN0YXRlLnZtKCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVz
dEl0ZXJhYmxlIiksIHN0cmxlbigiVGVzdEl0ZXJhYmxlIikpLCB2YWx1ZSk7CisgICAgcmV0dXJu
IHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWlu
dGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RJdGVyYWJsZSIpLCBzdHJsZW4oIlRlc3RJ
dGVyYWJsZSIpKSwgdmFsdWUpOwogfQogCiBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RJ
dGVyYWJsZUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQpAQCAtMTQyOSw5ICsxNDUzLDEwIEBA
IEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RKU0IKIAogc3RhdGljIGlubGlu
ZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvckNvbnN0
cnVjdG9yU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09i
amVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBWTSYg
dm0gPSB0aHJvd1Njb3BlLnZtKCk7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3Ry
dWN0b3IuCi0gICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHN0YXRlLnZtKCksIElkZW50
aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLnZtKCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENo
YXIqPigiVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yIiksIHN0cmxlbigiVGVzdEpTQnVpbHRpbkNv
bnN0cnVjdG9yIikpLCB2YWx1ZSk7CisgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZt
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFy
Kj4oIlRlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvciIpLCBzdHJsZW4oIlRlc3RKU0J1aWx0aW5Db25z
dHJ1Y3RvciIpKSwgdmFsdWUpOwogfQogCiBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RK
U0J1aWx0aW5Db25zdHJ1Y3RvckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQpAQCAtMTQ1Myw5
ICsxNDc4LDEwIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RNYXAKIAog
c3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RNYXBMaWtlQ29uc3Ry
dWN0b3JTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2Jq
ZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFZNJiB2
bSA9IHRocm93U2NvcGUudm0oKTsKICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1
Y3Rvci4KLSAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qoc3RhdGUudm0oKSwgSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZygmc3RhdGUudm0oKSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hh
cio+KCJUZXN0TWFwTGlrZSIpLCBzdHJsZW4oIlRlc3RNYXBMaWtlIikpLCB2YWx1ZSk7CisgICAg
cmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZt
LCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RNYXBMaWtlIiksIHN0cmxlbigi
VGVzdE1hcExpa2UiKSksIHZhbHVlKTsKIH0KIAogYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RU
ZXN0TWFwTGlrZUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQpAQCAtMTQ3Nyw5ICsxNTAzLDEw
IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RNZWQKIAogc3RhdGljIGlu
bGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVy
Q29uc3RydWN0b3JTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0
aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAg
IFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAg
IFZNJiB2bSA9IHRocm93U2NvcGUudm0oKTsKICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBj
b25zdHJ1Y3Rvci4KLSAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qoc3RhdGUudm0oKSwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUudm0oKSwgcmVpbnRlcnByZXRfY2FzdDxjb25z
dCBMQ2hhcio+KCJUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lciIpLCBzdHJsZW4oIlRlc3RNZWRp
YVF1ZXJ5TGlzdExpc3RlbmVyIikpLCB2YWx1ZSk7CisgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0
RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNv
bnN0IExDaGFyKj4oIlRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyIiksIHN0cmxlbigiVGVzdE1l
ZGlhUXVlcnlMaXN0TGlzdGVuZXIiKSksIHZhbHVlKTsKIH0KIAogYm9vbCBzZXRKU1Rlc3RHbG9i
YWxPYmplY3RUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSog
c3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZh
bHVlKQpAQCAtMTUwMSw5ICsxNTI4LDEwIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9i
amVjdFRlc3ROYW0KIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRl
c3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXJDb25zdHJ1Y3RvclNldHRlcihFeGVj
U3RhdGUmIHN0YXRlLCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFs
dWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVk0mIHZtID0gdGhyb3dTY29wZS52
bSgpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgotICAgIHJldHVy
biB0aGlzT2JqZWN0LnB1dERpcmVjdChzdGF0ZS52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KCZzdGF0ZS52bSgpLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3ROYW1lZEFu
ZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIiKSwgc3RybGVuKCJUZXN0TmFtZWRBbmRJbmRleGVk
U2V0dGVyTm9JZGVudGlmaWVyIikpLCB2YWx1ZSk7CisgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0
RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNv
bnN0IExDaGFyKj4oIlRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIiKSwgc3Ry
bGVuKCJUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyIikpLCB2YWx1ZSk7CiB9
CiAKIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5v
SWRlbnRpZmllckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQpAQCAtMTUyNSw5ICsxNTUzLDEw
IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3ROYW0KIAogc3RhdGljIGlu
bGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJU
aHJvd2luZ0V4Y2VwdGlvbkNvbnN0cnVjdG9yU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVz
dEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgVU5VU0VEX1BB
UkFNKHN0YXRlKTsKKyAgICBWTSYgdm0gPSB0aHJvd1Njb3BlLnZtKCk7CiAgICAgLy8gU2hhZG93
aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCi0gICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGly
ZWN0KHN0YXRlLnZtKCksIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLnZtKCksIHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93
aW5nRXhjZXB0aW9uIiksIHN0cmxlbigiVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5n
RXhjZXB0aW9uIikpLCB2YWx1ZSk7CisgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZt
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFy
Kj4oIlRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbiIpLCBzdHJsZW4o
IlRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbiIpKSwgdmFsdWUpOwog
fQogCiBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJU
aHJvd2luZ0V4Y2VwdGlvbkNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQpAQCAtMTU0OSw5ICsx
NTc4LDEwIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3ROYW0KIAogc3Rh
dGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZEFuZEluZGV4ZWRT
ZXR0ZXJXaXRoSWRlbnRpZmllckNvbnN0cnVjdG9yU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpT
VGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYg
dGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgVU5VU0VE
X1BBUkFNKHN0YXRlKTsKKyAgICBWTSYgdm0gPSB0aHJvd1Njb3BlLnZtKCk7CiAgICAgLy8gU2hh
ZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCi0gICAgcmV0dXJuIHRoaXNPYmplY3QucHV0
RGlyZWN0KHN0YXRlLnZtKCksIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLnZtKCksIHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldp
dGhJZGVudGlmaWVyIiksIHN0cmxlbigiVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVu
dGlmaWVyIikpLCB2YWx1ZSk7CisgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4o
IlRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllciIpLCBzdHJsZW4oIlRlc3RO
YW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllciIpKSwgdmFsdWUpOwogfQogCiBib29s
IHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRp
ZmllckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQpAQCAtMTU3Myw5ICsxNjAzLDEwIEBAIEVu
Y29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3ROYW0KIAogc3RhdGljIGlubGluZSBi
b29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZENvbnN0cnVjdG9yQ29uc3RydWN0b3JT
ZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBK
U1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFZNJiB2bSA9IHRo
cm93U2NvcGUudm0oKTsKICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4K
LSAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qoc3RhdGUudm0oKSwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZygmc3RhdGUudm0oKSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJU
ZXN0TmFtZWRDb25zdHJ1Y3RvciIpLCBzdHJsZW4oIlRlc3ROYW1lZENvbnN0cnVjdG9yIikpLCB2
YWx1ZSk7CisgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3ROYW1lZENv
bnN0cnVjdG9yIiksIHN0cmxlbigiVGVzdE5hbWVkQ29uc3RydWN0b3IiKSksIHZhbHVlKTsKIH0K
IAogYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRDb25zdHJ1Y3RvckNvbnN0cnVj
dG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZFZhbHVlKQpAQCAtMTU5Nyw5ICsxNjI4LDEwIEBAIEVuY29kZWRKU1ZhbHVl
IGpzVGVzdEdsb2JhbE9iamVjdEF1ZGlvQ28KIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVz
dEdsb2JhbE9iamVjdEF1ZGlvQ29uc3RydWN0b3JTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNU
ZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBVTlVTRURf
UEFSQU0oc3RhdGUpOworICAgIFZNJiB2bSA9IHRocm93U2NvcGUudm0oKTsKICAgICAvLyBTaGFk
b3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KLSAgICByZXR1cm4gdGhpc09iamVjdC5wdXRE
aXJlY3Qoc3RhdGUudm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUudm0oKSwgcmVp
bnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJBdWRpbyIpLCBzdHJsZW4oIkF1ZGlvIikpLCB2
YWx1ZSk7CisgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIkF1ZGlvIiksIHN0
cmxlbigiQXVkaW8iKSksIHZhbHVlKTsKIH0KIAogYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RB
dWRpb0NvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQpAQCAtMTYyMSw5ICsxNjUzLDEwIEBAIEVu
Y29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3ROYW0KIAogc3RhdGljIGlubGluZSBi
b29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZERlbGV0ZXJOb0lkZW50aWZpZXJDb25z
dHJ1Y3RvclNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNP
YmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5V
U0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVk0m
IHZtID0gdGhyb3dTY29wZS52bSgpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0
cnVjdG9yLgotICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdChzdGF0ZS52bSgpLCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZS52bSgpLCByZWludGVycHJldF9jYXN0PGNvbnN0IExD
aGFyKj4oIlRlc3ROYW1lZERlbGV0ZXJOb0lkZW50aWZpZXIiKSwgc3RybGVuKCJUZXN0TmFtZWRE
ZWxldGVyTm9JZGVudGlmaWVyIikpLCB2YWx1ZSk7CisgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0
RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNv
bnN0IExDaGFyKj4oIlRlc3ROYW1lZERlbGV0ZXJOb0lkZW50aWZpZXIiKSwgc3RybGVuKCJUZXN0
TmFtZWREZWxldGVyTm9JZGVudGlmaWVyIikpLCB2YWx1ZSk7CiB9CiAKIGJvb2wgc2V0SlNUZXN0
R2xvYmFsT2JqZWN0VGVzdE5hbWVkRGVsZXRlck5vSWRlbnRpZmllckNvbnN0cnVjdG9yKEV4ZWNT
dGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZFZhbHVlKQpAQCAtMTY0NSw5ICsxNjc4LDEwIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEds
b2JhbE9iamVjdFRlc3ROYW0KIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9i
amVjdFRlc3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbkNvbnN0cnVjdG9yU2V0dGVyKEV4
ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2
YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBWTSYgdm0gPSB0aHJvd1Njb3Bl
LnZtKCk7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCi0gICAgcmV0
dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHN0YXRlLnZtKCksIElkZW50aWZpZXI6OmZyb21TdHJp
bmcoJnN0YXRlLnZtKCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdE5hbWVk
RGVsZXRlclRocm93aW5nRXhjZXB0aW9uIiksIHN0cmxlbigiVGVzdE5hbWVkRGVsZXRlclRocm93
aW5nRXhjZXB0aW9uIikpLCB2YWx1ZSk7CisgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0
KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExD
aGFyKj4oIlRlc3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbiIpLCBzdHJsZW4oIlRlc3RO
YW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbiIpKSwgdmFsdWUpOwogfQogCiBib29sIHNldEpT
VGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbkNvbnN0cnVj
dG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZFZhbHVlKQpAQCAtMTY2OSw5ICsxNzAzLDEwIEBAIEVuY29kZWRKU1ZhbHVl
IGpzVGVzdEdsb2JhbE9iamVjdFRlc3ROYW0KIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVz
dEdsb2JhbE9iamVjdFRlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllckNvbnN0cnVjdG9yU2V0
dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNW
YWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBWTSYgdm0gPSB0aHJv
d1Njb3BlLnZtKCk7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCi0g
ICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHN0YXRlLnZtKCksIElkZW50aWZpZXI6OmZy
b21TdHJpbmcoJnN0YXRlLnZtKCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVz
dE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyIiksIHN0cmxlbigiVGVzdE5hbWVkRGVsZXRlcldp
dGhJZGVudGlmaWVyIikpLCB2YWx1ZSk7CisgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0
KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExD
aGFyKj4oIlRlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllciIpLCBzdHJsZW4oIlRlc3ROYW1l
ZERlbGV0ZXJXaXRoSWRlbnRpZmllciIpKSwgdmFsdWUpOwogfQogCiBib29sIHNldEpTVGVzdEds
b2JhbE9iamVjdFRlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllckNvbnN0cnVjdG9yKEV4ZWNT
dGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZFZhbHVlKQpAQCAtMTY5Myw5ICsxNzI4LDEwIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEds
b2JhbE9iamVjdFRlc3ROYW0KIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9i
amVjdFRlc3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRlckNvbnN0cnVjdG9yU2V0dGVyKEV4
ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2
YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBWTSYgdm0gPSB0aHJvd1Njb3Bl
LnZtKCk7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCi0gICAgcmV0
dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHN0YXRlLnZtKCksIElkZW50aWZpZXI6OmZyb21TdHJp
bmcoJnN0YXRlLnZtKCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdE5hbWVk
RGVsZXRlcldpdGhJbmRleGVkR2V0dGVyIiksIHN0cmxlbigiVGVzdE5hbWVkRGVsZXRlcldpdGhJ
bmRleGVkR2V0dGVyIikpLCB2YWx1ZSk7CisgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0
KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExD
aGFyKj4oIlRlc3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRlciIpLCBzdHJsZW4oIlRlc3RO
YW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRlciIpKSwgdmFsdWUpOwogfQogCiBib29sIHNldEpT
VGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRlckNvbnN0cnVj
dG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZFZhbHVlKQpAQCAtMTcxNyw5ICsxNzUzLDEwIEBAIEVuY29kZWRKU1ZhbHVl
IGpzVGVzdEdsb2JhbE9iamVjdFRlc3ROYW0KIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVz
dEdsb2JhbE9iamVjdFRlc3ROYW1lZEdldHRlckNhbGxXaXRoQ29uc3RydWN0b3JTZXR0ZXIoRXhl
Y1N0YXRlJiBzdGF0ZSwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZh
bHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFZNJiB2bSA9IHRocm93U2NvcGUu
dm0oKTsKICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KLSAgICByZXR1
cm4gdGhpc09iamVjdC5wdXREaXJlY3Qoc3RhdGUudm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zygmc3RhdGUudm0oKSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0TmFtZWRH
ZXR0ZXJDYWxsV2l0aCIpLCBzdHJsZW4oIlRlc3ROYW1lZEdldHRlckNhbGxXaXRoIikpLCB2YWx1
ZSk7CisgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3ROYW1lZEdldHRl
ckNhbGxXaXRoIiksIHN0cmxlbigiVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGgiKSksIHZhbHVlKTsK
IH0KIAogYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aENv
bnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQpAQCAtMTc0MSw5ICsxNzc4LDEwIEBAIEVuY29kZWRK
U1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3ROYW0KIAogc3RhdGljIGlubGluZSBib29sIHNl
dEpTVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllckNvbnN0cnVjdG9y
U2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwg
SlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBWTSYgdm0gPSB0
aHJvd1Njb3BlLnZtKCk7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3Iu
Ci0gICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHN0YXRlLnZtKCksIElkZW50aWZpZXI6
OmZyb21TdHJpbmcoJnN0YXRlLnZtKCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigi
VGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyIiksIHN0cmxlbigiVGVzdE5hbWVkR2V0dGVyTm9J
ZGVudGlmaWVyIikpLCB2YWx1ZSk7CisgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZt
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFy
Kj4oIlRlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllciIpLCBzdHJsZW4oIlRlc3ROYW1lZEdldHRl
ck5vSWRlbnRpZmllciIpKSwgdmFsdWUpOwogfQogCiBib29sIHNldEpTVGVzdEdsb2JhbE9iamVj
dFRlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUs
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQpA
QCAtMTc2NSw5ICsxODAzLDEwIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRl
c3ROYW0KIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1l
ZEdldHRlcldpdGhJZGVudGlmaWVyQ29uc3RydWN0b3JTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwg
SlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBVTlVT
RURfUEFSQU0oc3RhdGUpOworICAgIFZNJiB2bSA9IHRocm93U2NvcGUudm0oKTsKICAgICAvLyBT
aGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KLSAgICByZXR1cm4gdGhpc09iamVjdC5w
dXREaXJlY3Qoc3RhdGUudm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUudm0oKSwg
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRp
ZmllciIpLCBzdHJsZW4oIlRlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyIikpLCB2YWx1ZSk7
CisgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3ROYW1lZEdldHRlcldp
dGhJZGVudGlmaWVyIiksIHN0cmxlbigiVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXIiKSks
IHZhbHVlKTsKIH0KIAogYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRHZXR0ZXJX
aXRoSWRlbnRpZmllckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQpAQCAtMTc4OSw5ICsxODI4
LDEwIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3ROYW0KIAogc3RhdGlj
IGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZFNldHRlck5vSWRlbnRp
ZmllckNvbnN0cnVjdG9yU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEdsb2JhbE9iamVj
dCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsK
LSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsK
KyAgICBWTSYgdm0gPSB0aHJvd1Njb3BlLnZtKCk7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQt
aW4gY29uc3RydWN0b3IuCi0gICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHN0YXRlLnZt
KCksIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLnZtKCksIHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgTENoYXIqPigiVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyIiksIHN0cmxlbigiVGVz
dE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyIikpLCB2YWx1ZSk7CisgICAgcmV0dXJuIHRoaXNPYmpl
Y3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9j
YXN0PGNvbnN0IExDaGFyKj4oIlRlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllciIpLCBzdHJsZW4o
IlRlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllciIpKSwgdmFsdWUpOwogfQogCiBib29sIHNldEpT
VGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllckNvbnN0cnVjdG9yKEV4
ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZFZhbHVlKQpAQCAtMTgxMyw5ICsxODUzLDEwIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVz
dEdsb2JhbE9iamVjdFRlc3ROYW0KIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2Jh
bE9iamVjdFRlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uQ29uc3RydWN0b3JTZXR0ZXIo
RXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVl
IHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFZNJiB2bSA9IHRocm93U2Nv
cGUudm0oKTsKICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KLSAgICBy
ZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qoc3RhdGUudm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZygmc3RhdGUudm0oKSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0TmFt
ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbiIpLCBzdHJsZW4oIlRlc3ROYW1lZFNldHRlclRocm93
aW5nRXhjZXB0aW9uIikpLCB2YWx1ZSk7CisgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0
KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExD
aGFyKj4oIlRlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uIiksIHN0cmxlbigiVGVzdE5h
bWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24iKSksIHZhbHVlKTsKIH0KIAogYm9vbCBzZXRKU1Rl
c3RHbG9iYWxPYmplY3RUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbkNvbnN0cnVjdG9y
KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFZhbHVlKQpAQCAtMTgzNyw5ICsxODc4LDEwIEBAIEVuY29kZWRKU1ZhbHVlIGpz
VGVzdEdsb2JhbE9iamVjdFRlc3ROYW0KIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEds
b2JhbE9iamVjdFRlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyQ29uc3RydWN0b3JTZXR0ZXIo
RXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVl
IHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFZNJiB2bSA9IHRocm93U2Nv
cGUudm0oKTsKICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KLSAgICBy
ZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qoc3RhdGUudm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZygmc3RhdGUudm0oKSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0TmFt
ZWRTZXR0ZXJXaXRoSWRlbnRpZmllciIpLCBzdHJsZW4oIlRlc3ROYW1lZFNldHRlcldpdGhJZGVu
dGlmaWVyIikpLCB2YWx1ZSk7CisgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4o
IlRlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyIiksIHN0cmxlbigiVGVzdE5hbWVkU2V0dGVy
V2l0aElkZW50aWZpZXIiKSksIHZhbHVlKTsKIH0KIAogYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmpl
Y3RUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVl
KQpAQCAtMTg2MSw5ICsxOTAzLDEwIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVj
dFRlc3ROYW0KIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RO
YW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQ29uc3RydWN0b3JTZXR0ZXIoRXhlY1N0YXRlJiBz
dGF0ZSwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAg
ICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFZNJiB2bSA9IHRocm93U2NvcGUudm0oKTsKICAg
ICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KLSAgICByZXR1cm4gdGhpc09i
amVjdC5wdXREaXJlY3Qoc3RhdGUudm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUu
dm0oKSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0TmFtZWRTZXR0ZXJXaXRo
SW5kZXhlZEdldHRlciIpLCBzdHJsZW4oIlRlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVy
IikpLCB2YWx1ZSk7CisgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RO
YW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyIiksIHN0cmxlbigiVGVzdE5hbWVkU2V0dGVyV2l0
aEluZGV4ZWRHZXR0ZXIiKSksIHZhbHVlKTsKIH0KIAogYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmpl
Y3RUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSog
c3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZh
bHVlKQpAQCAtMTg4NSw5ICsxOTI4LDEwIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9i
amVjdFRlc3ROYW0KIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRl
c3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyQ29uc3RydWN0b3JTZXR0ZXIo
RXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVl
IHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFZNJiB2bSA9IHRocm93U2Nv
cGUudm0oKTsKICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KLSAgICBy
ZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qoc3RhdGUudm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZygmc3RhdGUudm0oKSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0TmFt
ZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlciIpLCBzdHJsZW4oIlRlc3ROYW1lZFNl
dHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyIikpLCB2YWx1ZSk7CisgICAgcmV0dXJuIHRo
aXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVy
cHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVy
QW5kU2V0dGVyIiksIHN0cmxlbigiVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRT
ZXR0ZXIiKSksIHZhbHVlKTsKIH0KIAogYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFt
ZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSog
c3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZh
bHVlKQpAQCAtMTkwOSw5ICsxOTUzLDEwIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9i
amVjdFRlc3ROYW0KIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRl
c3ROYW1lZFNldHRlcldpdGhPdmVycmlkZUJ1aWx0aW5zQ29uc3RydWN0b3JTZXR0ZXIoRXhlY1N0
YXRlJiBzdGF0ZSwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVl
LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFZNJiB2bSA9IHRocm93U2NvcGUudm0o
KTsKICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KLSAgICByZXR1cm4g
dGhpc09iamVjdC5wdXREaXJlY3Qoc3RhdGUudm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygm
c3RhdGUudm0oKSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0TmFtZWRTZXR0
ZXJXaXRoT3ZlcnJpZGVCdWlsdGlucyIpLCBzdHJsZW4oIlRlc3ROYW1lZFNldHRlcldpdGhPdmVy
cmlkZUJ1aWx0aW5zIikpLCB2YWx1ZSk7CisgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0
KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExD
aGFyKj4oIlRlc3ROYW1lZFNldHRlcldpdGhPdmVycmlkZUJ1aWx0aW5zIiksIHN0cmxlbigiVGVz
dE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnMiKSksIHZhbHVlKTsKIH0KIAogYm9vbCBz
ZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRTZXR0ZXJXaXRoT3ZlcnJpZGVCdWlsdGluc0Nv
bnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQpAQCAtMTkzMyw5ICsxOTc4LDEwIEBAIEVuY29kZWRK
U1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3ROYW0KIAogc3RhdGljIGlubGluZSBib29sIHNl
dEpTVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGll
c0NvbnN0cnVjdG9yU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEdsb2JhbE9iamVjdCYg
dGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAg
ICBWTSYgdm0gPSB0aHJvd1Njb3BlLnZtKCk7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4g
Y29uc3RydWN0b3IuCi0gICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHN0YXRlLnZtKCks
IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLnZtKCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgTENoYXIqPigiVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzIiksIHN0
cmxlbigiVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzIikpLCB2YWx1ZSk7
CisgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3ROYW1lZFNldHRlcldp
dGhVbmZvcmdhYmxlUHJvcGVydGllcyIpLCBzdHJsZW4oIlRlc3ROYW1lZFNldHRlcldpdGhVbmZv
cmdhYmxlUHJvcGVydGllcyIpKSwgdmFsdWUpOwogfQogCiBib29sIHNldEpTVGVzdEdsb2JhbE9i
amVjdFRlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0NvbnN0cnVjdG9yKEV4
ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZFZhbHVlKQpAQCAtMTk1Nyw5ICsyMDAzLDEwIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVz
dEdsb2JhbE9iamVjdFRlc3ROYW0KIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2Jh
bE9iamVjdFRlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0FuZE92ZXJyaWRl
QnVpbHRpbnNDb25zdHJ1Y3RvclNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RHbG9iYWxP
YmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUp
CiB7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIFVOVVNFRF9QQVJBTShzdGF0
ZSk7CisgICAgVk0mIHZtID0gdGhyb3dTY29wZS52bSgpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1
aWx0LWluIGNvbnN0cnVjdG9yLgotICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdChzdGF0
ZS52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZS52bSgpLCByZWludGVycHJldF9j
YXN0PGNvbnN0IExDaGFyKj4oIlRlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGll
c0FuZE92ZXJyaWRlQnVpbHRpbnMiKSwgc3RybGVuKCJUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3Jn
YWJsZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5zIikpLCB2YWx1ZSk7CisgICAgcmV0dXJu
IHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWlu
dGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxl
UHJvcGVydGllc0FuZE92ZXJyaWRlQnVpbHRpbnMiKSwgc3RybGVuKCJUZXN0TmFtZWRTZXR0ZXJX
aXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5zIikpLCB2YWx1ZSk7CiB9
CiAKIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2Fi
bGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGluc0NvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVl
KQpAQCAtMTk4MSw5ICsyMDI4LDEwIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVj
dFRlc3RPdmUKIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RP
dmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3JTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwg
SlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBVTlVT
RURfUEFSQU0oc3RhdGUpOworICAgIFZNJiB2bSA9IHRocm93U2NvcGUudm0oKTsKICAgICAvLyBT
aGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KLSAgICByZXR1cm4gdGhpc09iamVjdC5w
dXREaXJlY3Qoc3RhdGUudm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUudm0oKSwg
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9y
cyIpLCBzdHJsZW4oIlRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzIikpLCB2YWx1ZSk7CisgICAg
cmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZt
LCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RPdmVybG9hZGVkQ29uc3RydWN0
b3JzIiksIHN0cmxlbigiVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMiKSksIHZhbHVlKTsKIH0K
IAogYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0Nv
bnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQpAQCAtMjAwNSw5ICsyMDUzLDEwIEBAIEVuY29kZWRK
U1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RPdmUKIAogc3RhdGljIGlubGluZSBib29sIHNl
dEpTVGVzdEdsb2JhbE9iamVjdFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNl
Q29uc3RydWN0b3JTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0
aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAg
IFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAg
IFZNJiB2bSA9IHRocm93U2NvcGUudm0oKTsKICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBj
b25zdHJ1Y3Rvci4KLSAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qoc3RhdGUudm0oKSwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUudm0oKSwgcmVpbnRlcnByZXRfY2FzdDxjb25z
dCBMQ2hhcio+KCJUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZSIpLCBzdHJs
ZW4oIlRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlIikpLCB2YWx1ZSk7Cisg
ICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RPdmVybG9hZGVkQ29uc3Ry
dWN0b3JzV2l0aFNlcXVlbmNlIiksIHN0cmxlbigiVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNX
aXRoU2VxdWVuY2UiKSksIHZhbHVlKTsKIH0KIAogYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RU
ZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZUNvbnN0cnVjdG9yKEV4ZWNTdGF0
ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFZhbHVlKQpAQCAtMjAyOSw5ICsyMDc4LDEwIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2Jh
bE9iamVjdFRlc3RPdmUKIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVj
dFRlc3RPdmVycmlkZUJ1aWx0aW5zQ29uc3RydWN0b3JTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwg
SlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBVTlVT
RURfUEFSQU0oc3RhdGUpOworICAgIFZNJiB2bSA9IHRocm93U2NvcGUudm0oKTsKICAgICAvLyBT
aGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KLSAgICByZXR1cm4gdGhpc09iamVjdC5w
dXREaXJlY3Qoc3RhdGUudm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUudm0oKSwg
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0T3ZlcnJpZGVCdWlsdGlucyIpLCBz
dHJsZW4oIlRlc3RPdmVycmlkZUJ1aWx0aW5zIikpLCB2YWx1ZSk7CisgICAgcmV0dXJuIHRoaXNP
YmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJl
dF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RPdmVycmlkZUJ1aWx0aW5zIiksIHN0cmxlbigiVGVz
dE92ZXJyaWRlQnVpbHRpbnMiKSksIHZhbHVlKTsKIH0KIAogYm9vbCBzZXRKU1Rlc3RHbG9iYWxP
YmplY3RUZXN0T3ZlcnJpZGVCdWlsdGluc0NvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQpAQCAt
MjA1Myw5ICsyMTAzLDEwIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RQ
bHUKIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RQbHVnaW5J
bnRlcmZhY2VDb25zdHJ1Y3RvclNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RHbG9iYWxP
YmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUp
CiB7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIFVOVVNFRF9QQVJBTShzdGF0
ZSk7CisgICAgVk0mIHZtID0gdGhyb3dTY29wZS52bSgpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1
aWx0LWluIGNvbnN0cnVjdG9yLgotICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdChzdGF0
ZS52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZS52bSgpLCByZWludGVycHJldF9j
YXN0PGNvbnN0IExDaGFyKj4oIlRlc3RQbHVnaW5JbnRlcmZhY2UiKSwgc3RybGVuKCJUZXN0UGx1
Z2luSW50ZXJmYWNlIikpLCB2YWx1ZSk7CisgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0
KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExD
aGFyKj4oIlRlc3RQbHVnaW5JbnRlcmZhY2UiKSwgc3RybGVuKCJUZXN0UGx1Z2luSW50ZXJmYWNl
IikpLCB2YWx1ZSk7CiB9CiAKIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFBsdWdpbklu
dGVyZmFjZUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQpAQCAtMjA3Nyw5ICsyMTI4LDEwIEBA
IEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RSZWEKIAogc3RhdGljIGlubGlu
ZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RSZWFkT25seU1hcExpa2VDb25zdHJ1Y3Rv
clNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3Qs
IEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVk0mIHZtID0g
dGhyb3dTY29wZS52bSgpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9y
LgotICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdChzdGF0ZS52bSgpLCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKCZzdGF0ZS52bSgpLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4o
IlRlc3RSZWFkT25seU1hcExpa2UiKSwgc3RybGVuKCJUZXN0UmVhZE9ubHlNYXBMaWtlIikpLCB2
YWx1ZSk7CisgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RSZWFkT25s
eU1hcExpa2UiKSwgc3RybGVuKCJUZXN0UmVhZE9ubHlNYXBMaWtlIikpLCB2YWx1ZSk7CiB9CiAK
IGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFJlYWRPbmx5TWFwTGlrZUNvbnN0cnVjdG9y
KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFZhbHVlKQpAQCAtMjEwMSw5ICsyMTUzLDEwIEBAIEVuY29kZWRKU1ZhbHVlIGpz
VGVzdEdsb2JhbE9iamVjdFRlc3RSZXAKIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEds
b2JhbE9iamVjdFRlc3RSZXBvcnRFeHRyYU1lbW9yeUNvc3RDb25zdHJ1Y3RvclNldHRlcihFeGVj
U3RhdGUmIHN0YXRlLCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFs
dWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVk0mIHZtID0gdGhyb3dTY29wZS52
bSgpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgotICAgIHJldHVy
biB0aGlzT2JqZWN0LnB1dERpcmVjdChzdGF0ZS52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KCZzdGF0ZS52bSgpLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RSZXBvcnRF
eHRyYU1lbW9yeUNvc3QiKSwgc3RybGVuKCJUZXN0UmVwb3J0RXh0cmFNZW1vcnlDb3N0IikpLCB2
YWx1ZSk7CisgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RSZXBvcnRF
eHRyYU1lbW9yeUNvc3QiKSwgc3RybGVuKCJUZXN0UmVwb3J0RXh0cmFNZW1vcnlDb3N0IikpLCB2
YWx1ZSk7CiB9CiAKIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFJlcG9ydEV4dHJhTWVt
b3J5Q29zdENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQpAQCAtMjEyNSw5ICsyMTc4LDEwIEBA
IEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RTZXIKIAogc3RhdGljIGlubGlu
ZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RTZXJpYWxpemF0aW9uQ29uc3RydWN0b3JT
ZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBK
U1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFZNJiB2bSA9IHRo
cm93U2NvcGUudm0oKTsKICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4K
LSAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qoc3RhdGUudm0oKSwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZygmc3RhdGUudm0oKSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJU
ZXN0U2VyaWFsaXphdGlvbiIpLCBzdHJsZW4oIlRlc3RTZXJpYWxpemF0aW9uIikpLCB2YWx1ZSk7
CisgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RTZXJpYWxpemF0aW9u
IiksIHN0cmxlbigiVGVzdFNlcmlhbGl6YXRpb24iKSksIHZhbHVlKTsKIH0KIAogYm9vbCBzZXRK
U1Rlc3RHbG9iYWxPYmplY3RUZXN0U2VyaWFsaXphdGlvbkNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSog
c3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZh
bHVlKQpAQCAtMjE0OSw5ICsyMjAzLDEwIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9i
amVjdFRlc3RTZXIKIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRl
c3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZUNvbnN0cnVjdG9yU2V0dGVyKEV4ZWNT
dGF0ZSYgc3RhdGUsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1
ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBWTSYgdm0gPSB0aHJvd1Njb3BlLnZt
KCk7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCi0gICAgcmV0dXJu
IHRoaXNPYmplY3QucHV0RGlyZWN0KHN0YXRlLnZtKCksIElkZW50aWZpZXI6OmZyb21TdHJpbmco
JnN0YXRlLnZtKCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdFNlcmlhbGl6
YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlIiksIHN0cmxlbigiVGVzdFNlcmlhbGl6YXRpb25JbmRp
cmVjdEluaGVyaXRhbmNlIikpLCB2YWx1ZSk7CisgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGly
ZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0
IExDaGFyKj4oIlRlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZSIpLCBzdHJsZW4o
IlRlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZSIpKSwgdmFsdWUpOwogfQogCiBi
b29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0
YW5jZUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQpAQCAtMjE3Myw5ICsyMjI4LDEwIEBAIEVu
Y29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RTZXIKIAogc3RhdGljIGlubGluZSBi
b29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdENvbnN0cnVj
dG9yU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVj
dCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBWTSYgdm0g
PSB0aHJvd1Njb3BlLnZtKCk7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0
b3IuCi0gICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHN0YXRlLnZtKCksIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcoJnN0YXRlLnZtKCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIq
PigiVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0IiksIHN0cmxlbigiVGVzdFNlcmlhbGl6YXRpb25J
bmhlcml0IikpLCB2YWx1ZSk7CisgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4o
IlRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdCIpLCBzdHJsZW4oIlRlc3RTZXJpYWxpemF0aW9uSW5o
ZXJpdCIpKSwgdmFsdWUpOwogfQogCiBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RTZXJp
YWxpemF0aW9uSW5oZXJpdENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQpAQCAtMjE5Nyw5ICsy
MjUzLDEwIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RTZXIKIAogc3Rh
dGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RTZXJpYWxpemF0aW9uSW5o
ZXJpdEZpbmFsQ29uc3RydWN0b3JTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0R2xvYmFs
T2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KQogewotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBVTlVTRURfUEFSQU0oc3Rh
dGUpOworICAgIFZNJiB2bSA9IHRocm93U2NvcGUudm0oKTsKICAgICAvLyBTaGFkb3dpbmcgYSBi
dWlsdC1pbiBjb25zdHJ1Y3Rvci4KLSAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qoc3Rh
dGUudm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUudm0oKSwgcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbCIpLCBzdHJs
ZW4oIlRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsIikpLCB2YWx1ZSk7CisgICAgcmV0dXJu
IHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWlu
dGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFs
IiksIHN0cmxlbigiVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwiKSksIHZhbHVlKTsKIH0K
IAogYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5h
bENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQpAQCAtMjIyNSw5ICsyMjgyLDEwIEBAIEVuY29k
ZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RTZXIKICNpZiBFTkFCTEUoQ29uZGl0aW9u
MSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xv
YmFsT2JqZWN0VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNvbnN0cnVjdG9yU2V0
dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNW
YWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBWTSYgdm0gPSB0aHJv
d1Njb3BlLnZtKCk7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCi0g
ICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHN0YXRlLnZtKCksIElkZW50aWZpZXI6OmZy
b21TdHJpbmcoJnN0YXRlLnZtKCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVz
dFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSIpLCBzdHJsZW4oIlRlc3RTZXJpYWxpemVk
U2NyaXB0VmFsdWVJbnRlcmZhY2UiKSksIHZhbHVlKTsKKyAgICByZXR1cm4gdGhpc09iamVjdC5w
dXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgTENoYXIqPigiVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSIpLCBzdHJs
ZW4oIlRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UiKSksIHZhbHVlKTsKIH0KIAog
Ym9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJm
YWNlQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCkBAIC0yMjUxLDkgKzIzMDksMTAgQEAgRW5j
b2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdFN0cgogCiBzdGF0aWMgaW5saW5lIGJv
b2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFN0cmluZ2lmaWVyQ29uc3RydWN0b3JTZXR0ZXIo
RXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVl
IHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFZNJiB2bSA9IHRocm93U2Nv
cGUudm0oKTsKICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KLSAgICBy
ZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qoc3RhdGUudm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZygmc3RhdGUudm0oKSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0U3Ry
aW5naWZpZXIiKSwgc3RybGVuKCJUZXN0U3RyaW5naWZpZXIiKSksIHZhbHVlKTsKKyAgICByZXR1
cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdFN0cmluZ2lmaWVyIiksIHN0cmxlbigi
VGVzdFN0cmluZ2lmaWVyIikpLCB2YWx1ZSk7CiB9CiAKIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2Jq
ZWN0VGVzdFN0cmluZ2lmaWVyQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCkBAIC0yMjc1LDkg
KzIzMzQsMTAgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdFN0cgogCiBz
dGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFN0cmluZ2lmaWVyQW5v
bnltb3VzT3BlcmF0aW9uQ29uc3RydWN0b3JTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0
R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBVTlVTRURfUEFS
QU0oc3RhdGUpOworICAgIFZNJiB2bSA9IHRocm93U2NvcGUudm0oKTsKICAgICAvLyBTaGFkb3dp
bmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KLSAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJl
Y3Qoc3RhdGUudm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUudm0oKSwgcmVpbnRl
cnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0U3RyaW5naWZpZXJBbm9ueW1vdXNPcGVyYXRp
b24iKSwgc3RybGVuKCJUZXN0U3RyaW5naWZpZXJBbm9ueW1vdXNPcGVyYXRpb24iKSksIHZhbHVl
KTsKKyAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21T
dHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdFN0cmluZ2lmaWVy
QW5vbnltb3VzT3BlcmF0aW9uIiksIHN0cmxlbigiVGVzdFN0cmluZ2lmaWVyQW5vbnltb3VzT3Bl
cmF0aW9uIikpLCB2YWx1ZSk7CiB9CiAKIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFN0
cmluZ2lmaWVyQW5vbnltb3VzT3BlcmF0aW9uQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCkBA
IC0yMjk5LDkgKzIzNTksMTAgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVz
dFN0cgogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFN0cmlu
Z2lmaWVyTmFtZWRPcGVyYXRpb25Db25zdHJ1Y3RvclNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBK
U1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUm
IHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIFVOVVNF
RF9QQVJBTShzdGF0ZSk7CisgICAgVk0mIHZtID0gdGhyb3dTY29wZS52bSgpOwogICAgIC8vIFNo
YWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgotICAgIHJldHVybiB0aGlzT2JqZWN0LnB1
dERpcmVjdChzdGF0ZS52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZS52bSgpLCBy
ZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RTdHJpbmdpZmllck5hbWVkT3BlcmF0
aW9uIiksIHN0cmxlbigiVGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRpb24iKSksIHZhbHVlKTsK
KyAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJp
bmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdFN0cmluZ2lmaWVyTmFt
ZWRPcGVyYXRpb24iKSwgc3RybGVuKCJUZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvbiIpKSwg
dmFsdWUpOwogfQogCiBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RTdHJpbmdpZmllck5h
bWVkT3BlcmF0aW9uQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCkBAIC0yMzIzLDkgKzIzODQs
MTAgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdFN0cgogCiBzdGF0aWMg
aW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9u
SW1wbGVtZW50ZWRBc0NvbnN0cnVjdG9yU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEds
b2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dT
Y29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgVU5VU0VEX1BBUkFN
KHN0YXRlKTsKKyAgICBWTSYgdm0gPSB0aHJvd1Njb3BlLnZtKCk7CiAgICAgLy8gU2hhZG93aW5n
IGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCi0gICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0
KHN0YXRlLnZtKCksIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLnZtKCksIHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uSW1wbGVtZW50
ZWRBcyIpLCBzdHJsZW4oIlRlc3RTdHJpbmdpZmllck9wZXJhdGlvbkltcGxlbWVudGVkQXMiKSks
IHZhbHVlKTsKKyAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6
OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdFN0cmlu
Z2lmaWVyT3BlcmF0aW9uSW1wbGVtZW50ZWRBcyIpLCBzdHJsZW4oIlRlc3RTdHJpbmdpZmllck9w
ZXJhdGlvbkltcGxlbWVudGVkQXMiKSksIHZhbHVlKTsKIH0KIAogYm9vbCBzZXRKU1Rlc3RHbG9i
YWxPYmplY3RUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25JbXBsZW1lbnRlZEFzQ29uc3RydWN0b3Io
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkVmFsdWUpCkBAIC0yMzQ3LDkgKzI0MDksMTAgQEAgRW5jb2RlZEpTVmFsdWUganNU
ZXN0R2xvYmFsT2JqZWN0VGVzdFN0cgogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xv
YmFsT2JqZWN0VGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uTmFtZWRUb1N0cmluZ0NvbnN0cnVjdG9y
U2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwg
SlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBWTSYgdm0gPSB0
aHJvd1Njb3BlLnZtKCk7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3Iu
Ci0gICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHN0YXRlLnZtKCksIElkZW50aWZpZXI6
OmZyb21TdHJpbmcoJnN0YXRlLnZtKCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigi
VGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uTmFtZWRUb1N0cmluZyIpLCBzdHJsZW4oIlRlc3RTdHJp
bmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmciKSksIHZhbHVlKTsKKyAgICByZXR1cm4gdGhp
c09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uTmFtZWRUb1N0
cmluZyIpLCBzdHJsZW4oIlRlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmciKSks
IHZhbHVlKTsKIH0KIAogYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0U3RyaW5naWZpZXJP
cGVyYXRpb25OYW1lZFRvU3RyaW5nQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCkBAIC0yMzcx
LDkgKzI0MzQsMTAgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdFN0cgog
CiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFN0cmluZ2lmaWVy
UmVhZE9ubHlBdHRyaWJ1dGVDb25zdHJ1Y3RvclNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rl
c3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRo
cm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIFVOVVNFRF9Q
QVJBTShzdGF0ZSk7CisgICAgVk0mIHZtID0gdGhyb3dTY29wZS52bSgpOwogICAgIC8vIFNoYWRv
d2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgotICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERp
cmVjdChzdGF0ZS52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZS52bSgpLCByZWlu
dGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RTdHJpbmdpZmllclJlYWRPbmx5QXR0cmli
dXRlIiksIHN0cmxlbigiVGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGUiKSksIHZhbHVl
KTsKKyAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21T
dHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdFN0cmluZ2lmaWVy
UmVhZE9ubHlBdHRyaWJ1dGUiKSwgc3RybGVuKCJUZXN0U3RyaW5naWZpZXJSZWFkT25seUF0dHJp
YnV0ZSIpKSwgdmFsdWUpOwogfQogCiBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RTdHJp
bmdpZmllclJlYWRPbmx5QXR0cmlidXRlQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCkBAIC0y
Mzk1LDkgKzI0NTksMTAgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdFN0
cgogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFN0cmluZ2lm
aWVyUmVhZFdyaXRlQXR0cmlidXRlQ29uc3RydWN0b3JTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwg
SlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBVTlVT
RURfUEFSQU0oc3RhdGUpOworICAgIFZNJiB2bSA9IHRocm93U2NvcGUudm0oKTsKICAgICAvLyBT
aGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KLSAgICByZXR1cm4gdGhpc09iamVjdC5w
dXREaXJlY3Qoc3RhdGUudm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUudm0oKSwg
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVB
dHRyaWJ1dGUiKSwgc3RybGVuKCJUZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGUiKSks
IHZhbHVlKTsKKyAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6
OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdFN0cmlu
Z2lmaWVyUmVhZFdyaXRlQXR0cmlidXRlIiksIHN0cmxlbigiVGVzdFN0cmluZ2lmaWVyUmVhZFdy
aXRlQXR0cmlidXRlIikpLCB2YWx1ZSk7CiB9CiAKIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0
VGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmlidXRlQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBz
dGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFs
dWUpCkBAIC0yNDE5LDkgKzI0ODQsMTAgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2Jq
ZWN0VGVzdFR5cAogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVz
dFR5cGVkZWZzQ29uc3RydWN0b3JTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0R2xvYmFs
T2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KQogewotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBVTlVTRURfUEFSQU0oc3Rh
dGUpOworICAgIFZNJiB2bSA9IHRocm93U2NvcGUudm0oKTsKICAgICAvLyBTaGFkb3dpbmcgYSBi
dWlsdC1pbiBjb25zdHJ1Y3Rvci4KLSAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qoc3Rh
dGUudm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUudm0oKSwgcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0VHlwZWRlZnMiKSwgc3RybGVuKCJUZXN0VHlwZWRlZnMi
KSksIHZhbHVlKTsKKyAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdFR5
cGVkZWZzIiksIHN0cmxlbigiVGVzdFR5cGVkZWZzIikpLCB2YWx1ZSk7CiB9CiAKIGJvb2wgc2V0
SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFR5cGVkZWZzQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0
ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5k
ZXhlZFNldHRlck5vSWRlbnRpZmllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIu
Y3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTgwLDcgKzgwLDcgQEAgdGVtcGxhdGU8PiBKU1ZhbHVlIEpTVGVzdEluZGV4ZWRTZXR0
ZXJObwogdGVtcGxhdGU8PiB2b2lkIEpTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXJDb25z
dHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMoVk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCYg
Z2xvYmFsT2JqZWN0KQogewogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJv
dG90eXBlLCBKU1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyOjpwcm90b3R5cGUodm0sIGds
b2JhbE9iamVjdCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUgfCBKU0M6OlBy
b3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRF
bnVtKTsKLSAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJp
dmlhbFN0cmluZygmdm0sIFN0cmluZygiVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIiX3Mp
KSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmli
dXRlOjpEb250RW51bSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1l
LCBqc05vbnRyaXZpYWxTdHJpbmcodm0sIFN0cmluZygiVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50
aWZpZXIiX3MpKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3Bl
cnR5QXR0cmlidXRlOjpEb250RW51bSk7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5h
bWVzLT5sZW5ndGgsIGpzTnVtYmVyKDApLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25s
eSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKIH0KIApAQCAtMTY2LDEwICsx
NjYsMTEgQEAgYm9vbCBKU1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyOjpnZQogCiB2b2lk
IEpTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXI6OmdldE93blByb3BlcnR5TmFtZXMoSlNP
YmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBzdGF0ZSwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3Bl
cnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQogeworICAgIFZNJiB2bSA9IHN0YXRlLT52
bSgpOwogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0SW5kZXhlZFNldHRlck5v
SWRlbnRpZmllcio+KG9iamVjdCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhvYmpl
Y3QsIGluZm8oKSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMCwgY291bnQgPSB0aGlzT2JqZWN0
LT53cmFwcGVkKCkubGVuZ3RoKCk7IGkgPCBjb3VudDsgKytpKQotICAgICAgICBwcm9wZXJ0eU5h
bWVzLmFkZChJZGVudGlmaWVyOjpmcm9tKHN0YXRlLCBpKSk7CisgICAgICAgIHByb3BlcnR5TmFt
ZXMuYWRkKElkZW50aWZpZXI6OmZyb20odm0sIGkpKTsKICAgICBKU09iamVjdDo6Z2V0T3duUHJv
cGVydHlOYW1lcyhvYmplY3QsIHN0YXRlLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKIH0KIApJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRT
ZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2Vw
dGlvbi5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC04MCw3ICs4MCw3IEBAIHRlbXBsYXRlPD4gSlNWYWx1ZSBKU1Rlc3RJ
bmRleGVkU2V0dGVyVGgKIHRlbXBsYXRlPD4gdm9pZCBKU1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dp
bmdFeGNlcHRpb25Db25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMoVk0mIHZtLCBKU0RP
TUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQogewogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJv
cGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRp
b246OnByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6
RG9udERlbGV0ZSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9w
ZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwotICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlO
YW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKCZ2bSwgU3RyaW5nKCJUZXN0SW5kZXhlZFNl
dHRlclRocm93aW5nRXhjZXB0aW9uIl9zKSksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRP
bmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOworICAgIHB1dERpcmVjdCh2
bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKHZtLCBTdHJpbmco
IlRlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24iX3MpKSwgSlNDOjpQcm9wZXJ0eUF0
dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CiAg
ICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDApLCBK
U0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6
OkRvbnRFbnVtKTsKIH0KIApAQCAtMTY2LDEwICsxNjYsMTEgQEAgYm9vbCBKU1Rlc3RJbmRleGVk
U2V0dGVyVGhyb3dpbmdFeGNlcHRpbwogCiB2b2lkIEpTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2lu
Z0V4Y2VwdGlvbjo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3Rh
dGUqIHN0YXRlLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25N
b2RlIG1vZGUpCiB7CisgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byogdGhpc09i
amVjdCA9IGpzQ2FzdDxKU1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24qPihvYmpl
Y3QpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMob2JqZWN0LCBpbmZvKCkpOwogICAg
IGZvciAodW5zaWduZWQgaSA9IDAsIGNvdW50ID0gdGhpc09iamVjdC0+d3JhcHBlZCgpLmxlbmd0
aCgpOyBpIDwgY291bnQ7ICsraSkKLSAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmll
cjo6ZnJvbShzdGF0ZSwgaSkpOworICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVy
Ojpmcm9tKHZtLCBpKSk7CiAgICAgSlNPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0
LCBzdGF0ZSwgcHJvcGVydHlOYW1lcywgbW9kZSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZp
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIuY3BwCShyZXZpc2lvbiAyNDkx
MjgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5k
ZXhlZFNldHRlcldpdGhJZGVudGlmaWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODYsNyArODYs
NyBAQCB0ZW1wbGF0ZTw+IEpTVmFsdWUgSlNUZXN0SW5kZXhlZFNldHRlcldpCiB0ZW1wbGF0ZTw+
IHZvaWQgSlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyQ29uc3RydWN0b3I6OmluaXRp
YWxpemVQcm9wZXJ0aWVzKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkK
IHsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgSlNUZXN0
SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyOjpwcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCks
IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUgfCBKU0M6OlByb3BlcnR5QXR0cmli
dXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKLSAgICBw
dXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZygm
dm0sIFN0cmluZygiVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllciJfcykpLCBKU0M6OlBy
b3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRF
bnVtKTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJp
dmlhbFN0cmluZyh2bSwgU3RyaW5nKCJUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyIl9z
KSksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJp
YnV0ZTo6RG9udEVudW0pOwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVu
Z3RoLCBqc051bWJlcigwKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6
OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CiB9CiAKQEAgLTE3MywxMCArMTczLDExIEBA
IGJvb2wgSlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyOjoKIAogdm9pZCBKU1Rlc3RJ
bmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXI6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3Qq
IG9iamVjdCwgRXhlY1N0YXRlKiBzdGF0ZSwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFt
ZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQogeworICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwog
ICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVu
dGlmaWVyKj4ob2JqZWN0KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKG9iamVjdCwg
aW5mbygpKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwLCBjb3VudCA9IHRoaXNPYmplY3QtPndy
YXBwZWQoKS5sZW5ndGgoKTsgaSA8IGNvdW50OyArK2kpCi0gICAgICAgIHByb3BlcnR5TmFtZXMu
YWRkKElkZW50aWZpZXI6OmZyb20oc3RhdGUsIGkpKTsKKyAgICAgICAgcHJvcGVydHlOYW1lcy5h
ZGQoSWRlbnRpZmllcjo6ZnJvbSh2bSwgaSkpOwogICAgIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0
eU5hbWVzKG9iamVjdCwgc3RhdGUsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwogfQogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0SW50ZXJmYWNlLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI3Myw3ICsyNzMsNyBAQCB0ZW1wbGF0ZTw+IEpTVmFsdWUgSlNUZXN0SW50ZXJmYWNl
Q29uc3RyCiB0ZW1wbGF0ZTw+IHZvaWQgSlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3I6OmluaXRp
YWxpemVQcm9wZXJ0aWVzKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkK
IHsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgSlNUZXN0
SW50ZXJmYWNlOjpwcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCksIEpTQzo6UHJvcGVydHlBdHRy
aWJ1dGU6OkRvbnREZWxldGUgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpT
Qzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKLSAgICBwdXREaXJlY3Qodm0sIHZtLnBy
b3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZygmdm0sIFN0cmluZygiVGVzdElu
dGVyZmFjZSJfcykpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJv
cGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5
TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZyh2bSwgU3RyaW5nKCJUZXN0SW50ZXJmYWNl
Il9zKSksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0
dHJpYnV0ZTo6RG9udEVudW0pOwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+
bGVuZ3RoLCBqc051bWJlcigxKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBK
U0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CiAgICAgcmVpZnlTdGF0aWNQcm9wZXJ0
aWVzKHZtLCBKU1Rlc3RJbnRlcmZhY2U6OmluZm8oKSwgSlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0
b3JUYWJsZVZhbHVlcywgKnRoaXMpOwogfQpAQCAtNTA4LDYgKzUwOCw3IEBAIEVuY29kZWRKU1Zh
bHVlIGpzVGVzdEludGVyZmFjZUNvbnN0cnVjdG8KICNpZiBFTkFCTEUoQ29uZGl0aW9uMjIpIHx8
IEVOQUJMRShDb25kaXRpb24yMykKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RJbnRlcmZh
Y2VDb25zdHJ1Y3RvckltcGxlbWVudHNTdGF0aWNBdHRyU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUs
IEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CisgICAgVU5VU0VEX1BB
UkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byBuYXRp
dmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPihzdGF0ZSwgdmFsdWUpOwogICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwpAQCAtNTYxLDYgKzU2Miw3IEBAIEVu
Y29kZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUltcGxlbWVudHMKICNpZiBFTkFCTEUoQ29uZGl0
aW9uMjIpIHx8IEVOQUJMRShDb25kaXRpb24yMykKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rl
c3RJbnRlcmZhY2VJbXBsZW1lbnRzU3RyMlNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RJ
bnRlcmZhY2UmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2Nv
cGUpCiB7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8g
bmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oc3RhdGUsIHZhbHVlKTsKQEAgLTU5
Niw2ICs1OTgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzCiAj
aWYgRU5BQkxFKENvbmRpdGlvbjIyKSB8fCBFTkFCTEUoQ29uZGl0aW9uMjMpCiBzdGF0aWMgaW5s
aW5lIGJvb2wgc2V0SlNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c1N0cjNTZXR0ZXIoRXhlY1N0YXRl
JiBzdGF0ZSwgSlNUZXN0SW50ZXJmYWNlJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlKQogeworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5V
U0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIHRoaXNPYmplY3Quc2V0SW1wbGVtZW50c1N0cjMo
c3RhdGUsIHZhbHVlKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTYyOCw2ICs2MzEsNyBAQCBFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzCiAjaWYgRU5BQkxFKENvbmRpdGlv
bjIyKSB8fCBFTkFCTEUoQ29uZGl0aW9uMjMpCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0
SW50ZXJmYWNlSW1wbGVtZW50c05vZGVTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0SW50
ZXJmYWNlJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KQogeworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5h
dGl2ZVZhbHVlID0gY29udmVydDxJRExJbnRlcmZhY2U8Tm9kZT4+KHN0YXRlLCB2YWx1ZSwgW10o
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXR0
cmlidXRlVHlwZUVycm9yKHN0YXRlLCBzY29wZSwgIlRlc3RJbnRlcmZhY2UiLCAiaW1wbGVtZW50
c05vZGUiLCAiTm9kZSIpOyB9KTsKQEAgLTY4MCw2ICs2ODQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvCiAjaWYgRU5BQkxFKENvbmRpdGlvbjExKSB8fCBFTkFC
TEUoQ29uZGl0aW9uMTIpCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0SW50ZXJmYWNlQ29u
c3RydWN0b3JTdXBwbGVtZW50YWxTdGF0aWNBdHRyU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpT
VmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CisgICAgVU5VU0VEX1BBUkFN
KHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byBuYXRpdmVW
YWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPihzdGF0ZSwgdmFsdWUpOwogICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwpAQCAtNzMzLDYgKzczOCw3IEBAIEVuY29k
ZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFjZVN1cHBsZW1lbnQKICNpZiBFTkFCTEUoQ29uZGl0aW9u
MTEpIHx8IEVOQUJMRShDb25kaXRpb24xMikKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RJ
bnRlcmZhY2VTdXBwbGVtZW50YWxTdHIyU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdElu
dGVyZmFjZSYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29w
ZSkKIHsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBu
YXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPihzdGF0ZSwgdmFsdWUpOwpAQCAtNzY4
LDYgKzc3NCw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFjZVN1cHBsZW1lbnQKICNp
ZiBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVOQUJMRShDb25kaXRpb24xMikKIHN0YXRpYyBpbmxp
bmUgYm9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxTdHIzU2V0dGVyKEV4ZWNTdGF0
ZSYgc3RhdGUsIEpTVGVzdEludGVyZmFjZSYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhy
b3dTY29wZSYgdGhyb3dTY29wZSkKIHsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICB0aGlzT2JqZWN0LnNldFN1cHBsZW1lbnRhbFN0
cjMoc3RhdGUsIHZhbHVlKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTgwMCw2ICs4MDcsNyBAQCBF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50CiAjaWYgRU5BQkxFKENvbmRp
dGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIpCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNU
ZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsTm9kZVNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rl
c3RJbnRlcmZhY2UmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93
U2NvcGUpCiB7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1
dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETEludGVyZmFjZTxOb2RlPj4oc3RhdGUsIHZhbHVl
LCBbXShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhy
b3dBdHRyaWJ1dGVUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlLCAiVGVzdEludGVyZmFjZSIsICJzdXBw
bGVtZW50YWxOb2RlIiwgIk5vZGUiKTsgfSk7CkBAIC04MzcsNiArODQ1LDcgQEAgRW5jb2RlZEpT
VmFsdWUganNUZXN0SW50ZXJmYWNlUmVmbGVjdEF0dAogI2lmIEVOQUJMRShDb25kaXRpb24xMSkg
fHwgRU5BQkxFKENvbmRpdGlvbjEyKQogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEludGVy
ZmFjZVJlZmxlY3RBdHRyaWJ1dGVTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0SW50ZXJm
YWNlJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQog
eworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2
ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KHN0YXRlLCB2YWx1ZSk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlTGVhZGlu
Z1VuZGVyc2NvcmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZS5jcHAJKHJldmlz
aW9uIDI0OTEyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgx
LDcgKzgxLDcgQEAgdGVtcGxhdGU8PiBKU1ZhbHVlIEpTVGVzdEludGVyZmFjZUxlYWRpbgogdGVt
cGxhdGU8PiB2b2lkIEpTVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlQ29uc3RydWN0b3I6
OmluaXRpYWxpemVQcm9wZXJ0aWVzKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9i
amVjdCkKIHsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwg
SlNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmU6OnByb3RvdHlwZSh2bSwgZ2xvYmFsT2Jq
ZWN0KSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IEpTQzo6UHJvcGVydHlB
dHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwot
ICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3Ry
aW5nKCZ2bSwgU3RyaW5nKCJUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmUiX3MpKSwgSlND
OjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpE
b250RW51bSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05v
bnRyaXZpYWxTdHJpbmcodm0sIFN0cmluZygiVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3Jl
Il9zKSksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0
dHJpYnV0ZTo6RG9udEVudW0pOwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+
bGVuZ3RoLCBqc051bWJlcigwKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBK
U0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJdGVyYWJsZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEl0ZXJh
YmxlLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdEl0ZXJhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODksNyAr
ODksNyBAQCB0ZW1wbGF0ZTw+IEpTVmFsdWUgSlNUZXN0SXRlcmFibGVDb25zdHJ1CiB0ZW1wbGF0
ZTw+IHZvaWQgSlNUZXN0SXRlcmFibGVDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMo
Vk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQogewogICAgIHB1dERpcmVj
dCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3RJdGVyYWJsZTo6cHJvdG90
eXBlKHZtLCBnbG9iYWxPYmplY3QpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRl
IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmli
dXRlOjpEb250RW51bSk7Ci0gICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1l
LCBqc05vbnRyaXZpYWxTdHJpbmcoJnZtLCBTdHJpbmcoIlRlc3RJdGVyYWJsZSJfcykpLCBKU0M6
OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRv
bnRFbnVtKTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9u
dHJpdmlhbFN0cmluZyh2bSwgU3RyaW5nKCJUZXN0SXRlcmFibGUiX3MpKSwgSlNDOjpQcm9wZXJ0
eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7
CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDAp
LCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1
dGU6OkRvbnRFbnVtKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SlNCdWlsdGluQ29u
c3RydWN0b3IuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3IuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC04NSw3ICs4NSw3IEBAIHRlbXBsYXRlPD4gSlNWYWx1ZSBKU1Rlc3RKU0J1aWx0
aW5Db25zdHIKIHRlbXBsYXRlPD4gdm9pZCBKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvckNvbnN0
cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGllcyhWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBn
bG9iYWxPYmplY3QpCiB7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90
b3R5cGUsIEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yOjpwcm90b3R5cGUodm0sIGdsb2JhbE9i
amVjdCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUgfCBKU0M6OlByb3BlcnR5
QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsK
LSAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0
cmluZygmdm0sIFN0cmluZygiVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yIl9zKSksIEpTQzo6UHJv
cGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVu
dW0pOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2
aWFsU3RyaW5nKHZtLCBTdHJpbmcoIlRlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvciJfcykpLCBKU0M6
OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRv
bnRFbnVtKTsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNO
dW1iZXIoMCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0
eUF0dHJpYnV0ZTo6RG9udEVudW0pOwogfQogCkBAIC0yMDgsNiArMjA4LDcgQEAgRW5jb2RlZEpT
VmFsdWUganNUZXN0SlNCdWlsdGluQ29uc3RydWN0bwogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0
SlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JUZXN0QXR0cmlidXRlUldDdXN0b21TZXR0ZXIoRXhl
Y1N0YXRlJiBzdGF0ZSwgSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3ImIHRoaXNPYmplY3QsIEpT
VmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CisgICAgVU5VU0VEX1BBUkFN
KHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgdGhpc09iamVjdC5z
ZXRUZXN0QXR0cmlidXRlUldDdXN0b20oc3RhdGUsIHZhbHVlKTsKICAgICByZXR1cm4gdHJ1ZTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RNZWRp
YVF1ZXJ5TGlzdExpc3RlbmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5jcHAJKHJl
dmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODYs
NyArODYsNyBAQCB0ZW1wbGF0ZTw+IEpTVmFsdWUgSlNUZXN0TWVkaWFRdWVyeUxpc3RMCiB0ZW1w
bGF0ZTw+IHZvaWQgSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lckNvbnN0cnVjdG9yOjppbml0
aWFsaXplUHJvcGVydGllcyhWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3Qp
CiB7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVz
dE1lZGlhUXVlcnlMaXN0TGlzdGVuZXI6OnByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KSwgSlND
OjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6
OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwotICAgIHB1dERp
cmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKCZ2bSwg
U3RyaW5nKCJUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lciJfcykpLCBKU0M6OlByb3BlcnR5QXR0
cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKKyAg
ICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0cmlu
Zyh2bSwgU3RyaW5nKCJUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lciJfcykpLCBKU0M6OlByb3Bl
cnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVt
KTsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIo
MCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJp
YnV0ZTo6RG9udEVudW0pOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyLmNwcAkocmV2aXNpb24gMjQ5MTI4
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVk
QW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgxLDcg
KzgxLDcgQEAgdGVtcGxhdGU8PiBKU1ZhbHVlIEpTVGVzdE5hbWVkQW5kSW5kZXhlZAogdGVtcGxh
dGU8PiB2b2lkIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllckNvbnN0cnVj
dG9yOjppbml0aWFsaXplUHJvcGVydGllcyhWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9i
YWxPYmplY3QpCiB7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5
cGUsIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllcjo6cHJvdG90eXBlKHZt
LCBnbG9iYWxPYmplY3QpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgSlND
OjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpE
b250RW51bSk7Ci0gICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05v
bnRyaXZpYWxTdHJpbmcoJnZtLCBTdHJpbmcoIlRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lk
ZW50aWZpZXIiX3MpKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlBy
b3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0
eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcodm0sIFN0cmluZygiVGVzdE5hbWVkQW5k
SW5kZXhlZFNldHRlck5vSWRlbnRpZmllciJfcykpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpS
ZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKICAgICBwdXREaXJl
Y3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMCksIEpTQzo6UHJvcGVy
dHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0p
OwogfQogCkBAIC0xNjYsNiArMTY2LDcgQEAgYm9vbCBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0
ZXJOb0lkZW50aQogCiBib29sIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmll
cjo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUq
IHN0YXRlLCB1bnNpZ25lZCBpbmRleCwgUHJvcGVydHlTbG90JiBzbG90KQogeworICAgIFZNJiB2
bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFt
ZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyKj4ob2JqZWN0KTsKICAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgaWYgKExJS0VMWShpbmRl
eCA8PSBNQVhfQVJSQVlfSU5ERVgpKSB7CkBAIC0xNzYsNyArMTc3LDcgQEAgYm9vbCBKU1Rlc3RO
YW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aQogICAgICAgICB9CiAgICAgICAgIHJldHVybiBK
U09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChvYmplY3QsIHN0YXRlLCBpbmRleCwg
c2xvdCk7CiAgICAgfQotICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbShz
dGF0ZSwgaW5kZXgpOworICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbSh2
bSwgaW5kZXgpOwogICAgIHVzaW5nIEdldHRlcklETFR5cGUgPSBJRExET01TdHJpbmc7CiAgICAg
YXV0byBnZXR0ZXJGdW5jdG9yID0gW10gKGF1dG8mIHRoaXNPYmplY3QsIGF1dG8gcHJvcGVydHlO
YW1lKSAtPiBPcHRpb25hbDx0eXBlbmFtZSBHZXR0ZXJJRExUeXBlOjpJbXBsZW1lbnRhdGlvblR5
cGU+IHsKICAgICAgICAgYXV0byByZXN1bHQgPSB0aGlzT2JqZWN0LndyYXBwZWQoKS5uYW1lZEl0
ZW0ocHJvcGVydHlOYW1lVG9BdG9tU3RyaW5nKHByb3BlcnR5TmFtZSkpOwpAQCAtMTk0LDEyICsx
OTUsMTMgQEAgYm9vbCBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aQogCiB2b2lk
IEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllcjo6Z2V0T3duUHJvcGVydHlO
YW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIHN0YXRlLCBQcm9wZXJ0eU5hbWVBcnJh
eSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7CisgICAgVk0mIHZtID0g
c3RhdGUtPnZtKCk7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZEFu
ZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIqPihvYmplY3QpOwogICAgIEFTU0VSVF9HQ19PQkpF
Q1RfSU5IRVJJVFMob2JqZWN0LCBpbmZvKCkpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDAsIGNv
dW50ID0gdGhpc09iamVjdC0+d3JhcHBlZCgpLmxlbmd0aCgpOyBpIDwgY291bnQ7ICsraSkKLSAg
ICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbShzdGF0ZSwgaSkpOworICAg
ICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9tKHZtLCBpKSk7CiAgICAgZm9y
IChhdXRvJiBwcm9wZXJ0eU5hbWUgOiB0aGlzT2JqZWN0LT53cmFwcGVkKCkuc3VwcG9ydGVkUHJv
cGVydHlOYW1lcygpKQotICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKHN0YXRlLCBwcm9wZXJ0eU5hbWUpKTsKKyAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQo
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcHJvcGVydHlOYW1lKSk7CiAgICAgSlNPYmplY3Q6
OmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBzdGF0ZSwgcHJvcGVydHlOYW1lcywgbW9kZSk7
CiB9CiAKQEAgLTIzMyw2ICsyMzUsNyBAQCBib29sIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRl
ck5vSWRlbnRpCiAKIGJvb2wgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVy
OjpwdXRCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBzdGF0ZSwgdW5zaWduZWQgaW5k
ZXgsIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCiB7CisgICAgVk0mIHZtID0gc3Rh
dGUtPnZtKCk7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZEFuZElu
ZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lO
SEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAKQEAgLTI0NCw5ICsyNDcsOSBAQCBib29sIEpT
VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpCiAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KIAotICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbShzdGF0ZSwg
aW5kZXgpOworICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbSh2bSwgaW5k
ZXgpOwogICAgIFByb3BlcnR5U2xvdCBzbG90IHsgdGhpc09iamVjdCwgUHJvcGVydHlTbG90OjpJ
bnRlcm5hbE1ldGhvZFR5cGU6OlZNSW5xdWlyeSB9OwotICAgIEpTVmFsdWUgcHJvdG90eXBlID0g
dGhpc09iamVjdC0+Z2V0UHJvdG90eXBlRGlyZWN0KHN0YXRlLT52bSgpKTsKKyAgICBKU1ZhbHVl
IHByb3RvdHlwZSA9IHRoaXNPYmplY3QtPmdldFByb3RvdHlwZURpcmVjdCh2bSk7CiAgICAgaWYg
KCEocHJvdG90eXBlLmlzT2JqZWN0KCkgJiYgYXNPYmplY3QocHJvdG90eXBlKS0+Z2V0UHJvcGVy
dHlTbG90KHN0YXRlLCBwcm9wZXJ0eU5hbWUsIHNsb3QpKSkgewogICAgICAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHN0YXRlLT52bSgpKTsKICAgICAgICAgYXV0byBu
YXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqc3RhdGUsIHZhbHVlKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZElu
ZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRl
clRocm93aW5nRXhjZXB0aW9uLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRo
cm93aW5nRXhjZXB0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODEsNyArODEsNyBAQCB0ZW1w
bGF0ZTw+IEpTVmFsdWUgSlNUZXN0TmFtZWRBbmRJbmRleGVkCiB0ZW1wbGF0ZTw+IHZvaWQgSlNU
ZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb25Db25zdHJ1Y3Rvcjo6aW5p
dGlhbGl6ZVByb3BlcnRpZXMoVk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0
KQogewogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rl
c3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6cHJvdG90eXBlKHZtLCBn
bG9iYWxPYmplY3QpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgSlNDOjpQ
cm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250
RW51bSk7Ci0gICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRy
aXZpYWxTdHJpbmcoJnZtLCBTdHJpbmcoIlRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2lu
Z0V4Y2VwdGlvbiJfcykpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6
UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3Bl
cnR5TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZyh2bSwgU3RyaW5nKCJUZXN0TmFtZWRB
bmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24iX3MpKSwgSlNDOjpQcm9wZXJ0eUF0dHJp
YnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CiAgICAg
cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDApLCBKU0M6
OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRv
bnRFbnVtKTsKIH0KIApAQCAtMTY2LDYgKzE2Niw3IEBAIGJvb2wgSlNUZXN0TmFtZWRBbmRJbmRl
eGVkU2V0dGVyVGhyb3dpbmcKIAogYm9vbCBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJv
d2luZ0V4Y2VwdGlvbjo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU09iamVjdCogb2JqZWN0
LCBFeGVjU3RhdGUqIHN0YXRlLCB1bnNpZ25lZCBpbmRleCwgUHJvcGVydHlTbG90JiBzbG90KQog
eworICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24qPihvYmplY3Qp
OwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKICAg
ICBpZiAoTElLRUxZKGluZGV4IDw9IE1BWF9BUlJBWV9JTkRFWCkpIHsKQEAgLTE3Niw3ICsxNzcs
NyBAQCBib29sIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nCiAgICAgICAgIH0K
ICAgICAgICAgcmV0dXJuIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KG9iamVj
dCwgc3RhdGUsIGluZGV4LCBzbG90KTsKICAgICB9Ci0gICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJ
ZGVudGlmaWVyOjpmcm9tKHN0YXRlLCBpbmRleCk7CisgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJ
ZGVudGlmaWVyOjpmcm9tKHZtLCBpbmRleCk7CiAgICAgdXNpbmcgR2V0dGVySURMVHlwZSA9IElE
TERPTVN0cmluZzsKICAgICBhdXRvIGdldHRlckZ1bmN0b3IgPSBbXSAoYXV0byYgdGhpc09iamVj
dCwgYXV0byBwcm9wZXJ0eU5hbWUpIC0+IE9wdGlvbmFsPHR5cGVuYW1lIEdldHRlcklETFR5cGU6
OkltcGxlbWVudGF0aW9uVHlwZT4gewogICAgICAgICBhdXRvIHJlc3VsdCA9IHRoaXNPYmplY3Qu
d3JhcHBlZCgpLm5hbWVkSXRlbShwcm9wZXJ0eU5hbWVUb0F0b21TdHJpbmcocHJvcGVydHlOYW1l
KSk7CkBAIC0xOTQsMTIgKzE5NSwxMyBAQCBib29sIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRl
clRocm93aW5nCiAKIHZvaWQgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNl
cHRpb246OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBz
dGF0ZSwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBt
b2RlKQogeworICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8qIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24qPihv
YmplY3QpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMob2JqZWN0LCBpbmZvKCkpOwog
ICAgIGZvciAodW5zaWduZWQgaSA9IDAsIGNvdW50ID0gdGhpc09iamVjdC0+d3JhcHBlZCgpLmxl
bmd0aCgpOyBpIDwgY291bnQ7ICsraSkKLSAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRp
Zmllcjo6ZnJvbShzdGF0ZSwgaSkpOworICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlm
aWVyOjpmcm9tKHZtLCBpKSk7CiAgICAgZm9yIChhdXRvJiBwcm9wZXJ0eU5hbWUgOiB0aGlzT2Jq
ZWN0LT53cmFwcGVkKCkuc3VwcG9ydGVkUHJvcGVydHlOYW1lcygpKQotICAgICAgICBwcm9wZXJ0
eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHN0YXRlLCBwcm9wZXJ0eU5hbWUpKTsK
KyAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcHJv
cGVydHlOYW1lKSk7CiAgICAgSlNPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBz
dGF0ZSwgcHJvcGVydHlOYW1lcywgbW9kZSk7CiB9CiAKQEAgLTIzMyw2ICsyMzUsNyBAQCBib29s
IEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nCiAKIGJvb2wgSlNUZXN0TmFtZWRB
bmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246OnB1dEJ5SW5kZXgoSlNDZWxsKiBjZWxs
LCBFeGVjU3RhdGUqIHN0YXRlLCB1bnNpZ25lZCBpbmRleCwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBz
aG91bGRUaHJvdykKIHsKKyAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvKiB0aGlz
T2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0
aW9uKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBp
bmZvKCkpOwogCkBAIC0yNDQsOSArMjQ3LDkgQEAgYm9vbCBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRT
ZXR0ZXJUaHJvd2luZwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBhdXRvIHBy
b3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb20oc3RhdGUsIGluZGV4KTsKKyAgICBhdXRvIHBy
b3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb20odm0sIGluZGV4KTsKICAgICBQcm9wZXJ0eVNs
b3Qgc2xvdCB7IHRoaXNPYmplY3QsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpW
TUlucXVpcnkgfTsKLSAgICBKU1ZhbHVlIHByb3RvdHlwZSA9IHRoaXNPYmplY3QtPmdldFByb3Rv
dHlwZURpcmVjdChzdGF0ZS0+dm0oKSk7CisgICAgSlNWYWx1ZSBwcm90b3R5cGUgPSB0aGlzT2Jq
ZWN0LT5nZXRQcm90b3R5cGVEaXJlY3Qodm0pOwogICAgIGlmICghKHByb3RvdHlwZS5pc09iamVj
dCgpICYmIGFzT2JqZWN0KHByb3RvdHlwZSktPmdldFByb3BlcnR5U2xvdChzdGF0ZSwgcHJvcGVy
dHlOYW1lLCBzbG90KSkpIHsKICAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRShzdGF0ZS0+dm0oKSk7CiAgICAgICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0
PElETERPTVN0cmluZz4oKnN0YXRlLCB2YWx1ZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50
aWZpZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5jcHAJKHJl
dmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTg4LDcgKzg4LDcgQEAgdGVtcGxhdGU8PiBKU1ZhbHVlIEpTVGVzdE5hbWVkQW5k
SW5kZXhlZAogdGVtcGxhdGU8PiB2b2lkIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJ
ZGVudGlmaWVyQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKFZNJiB2bSwgSlNET01H
bG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKIHsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3Bl
cnR5TmFtZXMtPnByb3RvdHlwZSwgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50
aWZpZXI6OnByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0
ZTo6RG9udERlbGV0ZSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQ
cm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwotICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVy
dHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKCZ2bSwgU3RyaW5nKCJUZXN0TmFtZWRB
bmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIiX3MpKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0
ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CisgICAgcHV0
RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcodm0s
IFN0cmluZygiVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyIl9zKSksIEpT
Qzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6
RG9udEVudW0pOwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBq
c051bWJlcigwKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3Bl
cnR5QXR0cmlidXRlOjpEb250RW51bSk7CiB9CiAKQEAgLTE3NSw2ICsxNzUsNyBAQCBib29sIEpT
VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVuCiAKIGJvb2wgSlNUZXN0TmFtZWRBbmRJ
bmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXI6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNP
YmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBzdGF0ZSwgdW5zaWduZWQgaW5kZXgsIFByb3BlcnR5
U2xvdCYgc2xvdCkKIHsKKyAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvKiB0aGlz
T2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVy
Kj4ob2JqZWN0KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGlu
Zm8oKSk7CiAgICAgaWYgKExJS0VMWShpbmRleCA8PSBNQVhfQVJSQVlfSU5ERVgpKSB7CkBAIC0x
ODUsNyArMTg2LDcgQEAgYm9vbCBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbgog
ICAgICAgICB9CiAgICAgICAgIHJldHVybiBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90QnlJ
bmRleChvYmplY3QsIHN0YXRlLCBpbmRleCwgc2xvdCk7CiAgICAgfQotICAgIGF1dG8gcHJvcGVy
dHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbShzdGF0ZSwgaW5kZXgpOworICAgIGF1dG8gcHJvcGVy
dHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbSh2bSwgaW5kZXgpOwogICAgIHVzaW5nIEdldHRlcklE
TFR5cGUgPSBJRExET01TdHJpbmc7CiAgICAgYXV0byBnZXR0ZXJGdW5jdG9yID0gW10gKGF1dG8m
IHRoaXNPYmplY3QsIGF1dG8gcHJvcGVydHlOYW1lKSAtPiBPcHRpb25hbDx0eXBlbmFtZSBHZXR0
ZXJJRExUeXBlOjpJbXBsZW1lbnRhdGlvblR5cGU+IHsKICAgICAgICAgYXV0byByZXN1bHQgPSB0
aGlzT2JqZWN0LndyYXBwZWQoKS5uYW1lZEl0ZW0ocHJvcGVydHlOYW1lVG9BdG9tU3RyaW5nKHBy
b3BlcnR5TmFtZSkpOwpAQCAtMjAzLDEyICsyMDQsMTMgQEAgYm9vbCBKU1Rlc3ROYW1lZEFuZElu
ZGV4ZWRTZXR0ZXJXaXRoSWRlbgogCiB2b2lkIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldp
dGhJZGVudGlmaWVyOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNT
dGF0ZSogc3RhdGUsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlv
bk1vZGUgbW9kZSkKIHsKKyAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvKiB0aGlz
T2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVy
Kj4ob2JqZWN0KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKG9iamVjdCwgaW5mbygp
KTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwLCBjb3VudCA9IHRoaXNPYmplY3QtPndyYXBwZWQo
KS5sZW5ndGgoKTsgaSA8IGNvdW50OyArK2kpCi0gICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElk
ZW50aWZpZXI6OmZyb20oc3RhdGUsIGkpKTsKKyAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRl
bnRpZmllcjo6ZnJvbSh2bSwgaSkpOwogICAgIGZvciAoYXV0byYgcHJvcGVydHlOYW1lIDogdGhp
c09iamVjdC0+d3JhcHBlZCgpLnN1cHBvcnRlZFByb3BlcnR5TmFtZXMoKSkKLSAgICAgICAgcHJv
cGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhzdGF0ZSwgcHJvcGVydHlOYW1l
KSk7CisgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0s
IHByb3BlcnR5TmFtZSkpOwogICAgIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVj
dCwgc3RhdGUsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwogfQogCkBAIC0yNDIsNiArMjQ0LDcgQEAg
Ym9vbCBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbgogCiBib29sIEpTVGVzdE5h
bWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyOjpwdXRCeUluZGV4KEpTQ2VsbCogY2Vs
bCwgRXhlY1N0YXRlKiBzdGF0ZSwgdW5zaWduZWQgaW5kZXgsIEpTVmFsdWUgdmFsdWUsIGJvb2wg
c2hvdWxkVGhyb3cpCiB7CisgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byogdGhp
c09iamVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmll
cio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5m
bygpKTsKIApAQCAtMjUzLDkgKzI1Niw5IEBAIGJvb2wgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0
dGVyV2l0aElkZW4KICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgYXV0byBwcm9w
ZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tKHN0YXRlLCBpbmRleCk7CisgICAgYXV0byBwcm9w
ZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tKHZtLCBpbmRleCk7CiAgICAgUHJvcGVydHlTbG90
IHNsb3QgeyB0aGlzT2JqZWN0LCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6Vk1J
bnF1aXJ5IH07Ci0gICAgSlNWYWx1ZSBwcm90b3R5cGUgPSB0aGlzT2JqZWN0LT5nZXRQcm90b3R5
cGVEaXJlY3Qoc3RhdGUtPnZtKCkpOworICAgIEpTVmFsdWUgcHJvdG90eXBlID0gdGhpc09iamVj
dC0+Z2V0UHJvdG90eXBlRGlyZWN0KHZtKTsKICAgICBpZiAoIShwcm90b3R5cGUuaXNPYmplY3Qo
KSAmJiBhc09iamVjdChwcm90b3R5cGUpLT5nZXRQcm9wZXJ0eVNsb3Qoc3RhdGUsIHByb3BlcnR5
TmFtZSwgc2xvdCkpKSB7CiAgICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUoc3RhdGUtPnZtKCkpOwogICAgICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJ
RExET01TdHJpbmc+KCpzdGF0ZSwgdmFsdWUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZENv
bnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC04Miw3ICs4Miw3IEBAIHRlbXBsYXRlPD4gSlNWYWx1ZSBKU1Rlc3ROYW1lZENvbnN0
cnVjdG8KIHRlbXBsYXRlPD4gdm9pZCBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yQ29uc3RydWN0b3I6
OmluaXRpYWxpemVQcm9wZXJ0aWVzKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9i
amVjdCkKIHsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwg
SlNUZXN0TmFtZWRDb25zdHJ1Y3Rvcjo6cHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QpLCBKU0M6
OlByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6
UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7Ci0gICAgcHV0RGly
ZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcoJnZtLCBT
dHJpbmcoIlRlc3ROYW1lZENvbnN0cnVjdG9yIl9zKSksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6
OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOworICAgIHB1dERp
cmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKHZtLCBT
dHJpbmcoIlRlc3ROYW1lZENvbnN0cnVjdG9yIl9zKSksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6
OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwogICAgIHB1dERp
cmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigwKSwgSlNDOjpQcm9w
ZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51
bSk7CiB9CiAKQEAgLTExNiw3ICsxMTYsNyBAQCB0ZW1wbGF0ZTw+IEpTVmFsdWUgSlNUZXN0TmFt
ZWRDb25zdHJ1Y3RvCiB0ZW1wbGF0ZTw+IHZvaWQgSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvck5hbWVk
Q29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKFZNJiB2bSwgSlNET01HbG9iYWxPYmpl
Y3QmIGdsb2JhbE9iamVjdCkKIHsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMt
PnByb3RvdHlwZSwgSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvcjo6cHJvdG90eXBlKHZtLCBnbG9iYWxP
YmplY3QpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgSlNDOjpQcm9wZXJ0
eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7
Ci0gICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxT
dHJpbmcoJnZtLCBTdHJpbmcoIkF1ZGlvIl9zKSksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJl
YWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOworICAgIHB1dERpcmVj
dCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKHZtLCBTdHJp
bmcoIkF1ZGlvIl9zKSksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQ
cm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVy
dHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigwKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVh
ZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CiB9CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZERlbGV0ZXJO
b0lkZW50aWZpZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZERlbGV0ZXJOb0lkZW50aWZpZXIuY3BwCShyZXZpc2lv
biAyNDkxMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODAsNyAr
ODAsNyBAQCB0ZW1wbGF0ZTw+IEpTVmFsdWUgSlNUZXN0TmFtZWREZWxldGVyTm9JCiB0ZW1wbGF0
ZTw+IHZvaWQgSlNUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVyQ29uc3RydWN0b3I6OmluaXRp
YWxpemVQcm9wZXJ0aWVzKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkK
IHsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgSlNUZXN0
TmFtZWREZWxldGVyTm9JZGVudGlmaWVyOjpwcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCksIEpT
Qzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRl
OjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKLSAgICBwdXRE
aXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZygmdm0s
IFN0cmluZygiVGVzdE5hbWVkRGVsZXRlck5vSWRlbnRpZmllciJfcykpLCBKU0M6OlByb3BlcnR5
QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsK
KyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0
cmluZyh2bSwgU3RyaW5nKCJUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVyIl9zKSksIEpTQzo6
UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9u
dEVudW0pOwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051
bWJlcigwKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5
QXR0cmlidXRlOjpEb250RW51bSk7CiB9CiAKQEAgLTE1Nyw5ICsxNTcsMTAgQEAgYm9vbCBKU1Rl
c3ROYW1lZERlbGV0ZXJOb0lkZW50aWZpZXI6OmdldAogCiBib29sIEpTVGVzdE5hbWVkRGVsZXRl
ck5vSWRlbnRpZmllcjo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU09iamVjdCogb2JqZWN0
LCBFeGVjU3RhdGUqIHN0YXRlLCB1bnNpZ25lZCBpbmRleCwgUHJvcGVydHlTbG90JiBzbG90KQog
eworICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8SlNUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVyKj4ob2JqZWN0KTsKICAgICBBU1NFUlRf
R0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7Ci0gICAgYXV0byBwcm9wZXJ0
eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tKHN0YXRlLCBpbmRleCk7CisgICAgYXV0byBwcm9wZXJ0
eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tKHZtLCBpbmRleCk7CiAgICAgdXNpbmcgR2V0dGVySURM
VHlwZSA9IElETERPTVN0cmluZzsKICAgICBhdXRvIGdldHRlckZ1bmN0b3IgPSBbXSAoYXV0byYg
dGhpc09iamVjdCwgYXV0byBwcm9wZXJ0eU5hbWUpIC0+IE9wdGlvbmFsPHR5cGVuYW1lIEdldHRl
cklETFR5cGU6OkltcGxlbWVudGF0aW9uVHlwZT4gewogICAgICAgICBhdXRvIHJlc3VsdCA9IHRo
aXNPYmplY3Qud3JhcHBlZCgpLm5hbWVkSXRlbShwcm9wZXJ0eU5hbWVUb0F0b21TdHJpbmcocHJv
cGVydHlOYW1lKSk7CkBAIC0xNzcsMTAgKzE3OCwxMSBAQCBib29sIEpTVGVzdE5hbWVkRGVsZXRl
ck5vSWRlbnRpZmllcjo6Z2V0CiAKIHZvaWQgSlNUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVy
OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogc3RhdGUs
IFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkK
IHsKKyAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganND
YXN0PEpTVGVzdE5hbWVkRGVsZXRlck5vSWRlbnRpZmllcio+KG9iamVjdCk7CiAgICAgQVNTRVJU
X0dDX09CSkVDVF9JTkhFUklUUyhvYmplY3QsIGluZm8oKSk7CiAgICAgZm9yIChhdXRvJiBwcm9w
ZXJ0eU5hbWUgOiB0aGlzT2JqZWN0LT53cmFwcGVkKCkuc3VwcG9ydGVkUHJvcGVydHlOYW1lcygp
KQotICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHN0YXRl
LCBwcm9wZXJ0eU5hbWUpKTsKKyAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6
ZnJvbVN0cmluZyh2bSwgcHJvcGVydHlOYW1lKSk7CiAgICAgSlNPYmplY3Q6OmdldE93blByb3Bl
cnR5TmFtZXMob2JqZWN0LCBzdGF0ZSwgcHJvcGVydHlOYW1lcywgbW9kZSk7CiB9CiAKQEAgLTE5
OCw3ICsyMDAsOCBAQCBib29sIEpTVGVzdE5hbWVkRGVsZXRlck5vSWRlbnRpZmllcjo6ZGVsCiB7
CiAgICAgYXV0byYgdGhpc09iamVjdCA9ICpqc0Nhc3Q8SlNUZXN0TmFtZWREZWxldGVyTm9JZGVu
dGlmaWVyKj4oY2VsbCk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwot
ICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbShzdGF0ZSwgaW5kZXgpOwor
ICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOworICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRp
Zmllcjo6ZnJvbSh2bSwgaW5kZXgpOwogICAgIGlmIChpc1Zpc2libGVOYW1lZFByb3BlcnR5PE92
ZXJyaWRlQnVpbHRpbnM6Ok5vPigqc3RhdGUsIHRoaXNPYmplY3QsIHByb3BlcnR5TmFtZSkpIHsK
ICAgICAgICAgcmV0dXJuIGltcGwuZGVsZXRlTmFtZWRQcm9wZXJ0eShwcm9wZXJ0eU5hbWVUb1N0
cmluZyhwcm9wZXJ0eU5hbWUpKTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxldGVyVGhyb3dpbmdFeGNlcHRpb24uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5jcHAJKHJldmlzaW9uIDI0OTEyOCkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZERl
bGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwLDcgKzgwLDcg
QEAgdGVtcGxhdGU8PiBKU1ZhbHVlIEpTVGVzdE5hbWVkRGVsZXRlclRocgogdGVtcGxhdGU8PiB2
b2lkIEpTVGVzdE5hbWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9uQ29uc3RydWN0b3I6OmluaXRp
YWxpemVQcm9wZXJ0aWVzKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkK
IHsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgSlNUZXN0
TmFtZWREZWxldGVyVGhyb3dpbmdFeGNlcHRpb246OnByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0
KSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IEpTQzo6UHJvcGVydHlBdHRy
aWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwotICAg
IHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5n
KCZ2bSwgU3RyaW5nKCJUZXN0TmFtZWREZWxldGVyVGhyb3dpbmdFeGNlcHRpb24iX3MpKSwgSlND
OjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpE
b250RW51bSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05v
bnRyaXZpYWxTdHJpbmcodm0sIFN0cmluZygiVGVzdE5hbWVkRGVsZXRlclRocm93aW5nRXhjZXB0
aW9uIl9zKSksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0
eUF0dHJpYnV0ZTo6RG9udEVudW0pOwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1l
cy0+bGVuZ3RoLCBqc051bWJlcigwKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkg
fCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CiB9CiAKQEAgLTE1Nyw5ICsxNTcs
MTAgQEAgYm9vbCBKU1Rlc3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbgogCiBib29sIEpT
VGVzdE5hbWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9uOjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUlu
ZGV4KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogc3RhdGUsIHVuc2lnbmVkIGluZGV4LCBQ
cm9wZXJ0eVNsb3QmIHNsb3QpCiB7CisgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0
byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlv
bio+KG9iamVjdCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBp
bmZvKCkpOwotICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbShzdGF0ZSwg
aW5kZXgpOworICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbSh2bSwgaW5k
ZXgpOwogICAgIHVzaW5nIEdldHRlcklETFR5cGUgPSBJRExET01TdHJpbmc7CiAgICAgYXV0byBn
ZXR0ZXJGdW5jdG9yID0gW10gKGF1dG8mIHRoaXNPYmplY3QsIGF1dG8gcHJvcGVydHlOYW1lKSAt
PiBPcHRpb25hbDx0eXBlbmFtZSBHZXR0ZXJJRExUeXBlOjpJbXBsZW1lbnRhdGlvblR5cGU+IHsK
ICAgICAgICAgYXV0byByZXN1bHQgPSB0aGlzT2JqZWN0LndyYXBwZWQoKS5uYW1lZEl0ZW0ocHJv
cGVydHlOYW1lVG9BdG9tU3RyaW5nKHByb3BlcnR5TmFtZSkpOwpAQCAtMTc3LDEwICsxNzgsMTEg
QEAgYm9vbCBKU1Rlc3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbgogCiB2b2lkIEpTVGVz
dE5hbWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9uOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2Jq
ZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogc3RhdGUsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0
eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKKyAgICBWTSYgdm0gPSBzdGF0ZS0+dm0o
KTsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkRGVsZXRlclRocm93
aW5nRXhjZXB0aW9uKj4ob2JqZWN0KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKG9i
amVjdCwgaW5mbygpKTsKICAgICBmb3IgKGF1dG8mIHByb3BlcnR5TmFtZSA6IHRoaXNPYmplY3Qt
PndyYXBwZWQoKS5zdXBwb3J0ZWRQcm9wZXJ0eU5hbWVzKCkpCi0gICAgICAgIHByb3BlcnR5TmFt
ZXMuYWRkKElkZW50aWZpZXI6OmZyb21TdHJpbmcoc3RhdGUsIHByb3BlcnR5TmFtZSkpOworICAg
ICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBwcm9wZXJ0
eU5hbWUpKTsKICAgICBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIHN0YXRl
LCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKIH0KIApAQCAtMjA1LDcgKzIwNyw4IEBAIGJvb2wgSlNU
ZXN0TmFtZWREZWxldGVyVGhyb3dpbmdFeGNlcHRpb24KIHsKICAgICBhdXRvJiB0aGlzT2JqZWN0
ID0gKmpzQ2FzdDxKU1Rlc3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbio+KGNlbGwpOwog
ICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBhdXRvIHByb3BlcnR5
TmFtZSA9IElkZW50aWZpZXI6OmZyb20oc3RhdGUsIGluZGV4KTsKKyAgICBWTSYgdm0gPSBzdGF0
ZS0+dm0oKTsKKyAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb20odm0sIGlu
ZGV4KTsKICAgICBpZiAoaXNWaXNpYmxlTmFtZWRQcm9wZXJ0eTxPdmVycmlkZUJ1aWx0aW5zOjpO
bz4oKnN0YXRlLCB0aGlzT2JqZWN0LCBwcm9wZXJ0eU5hbWUpKSB7CiAgICAgICAgIGF1dG8gcmVz
dWx0ID0gaW1wbC5kZWxldGVOYW1lZFByb3BlcnR5KHByb3BlcnR5TmFtZVRvU3RyaW5nKHByb3Bl
cnR5TmFtZSkpOwogICAgICAgICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKSB7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxldGVy
V2l0aElkZW50aWZpZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllci5jcHAJKHJl
dmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTg1LDcgKzg1LDcgQEAgdGVtcGxhdGU8PiBKU1ZhbHVlIEpTVGVzdE5hbWVkRGVsZXRlcldpdAog
dGVtcGxhdGU8PiB2b2lkIEpTVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyQ29uc3RydWN0
b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2Jh
bE9iamVjdCkKIHsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlw
ZSwgSlNUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXI6OnByb3RvdHlwZSh2bSwgZ2xvYmFs
T2JqZWN0KSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IEpTQzo6UHJvcGVy
dHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0p
OwotICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFs
U3RyaW5nKCZ2bSwgU3RyaW5nKCJUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXIiX3MpKSwg
SlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRl
OjpEb250RW51bSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBq
c05vbnRyaXZpYWxTdHJpbmcodm0sIFN0cmluZygiVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlm
aWVyIl9zKSksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0
eUF0dHJpYnV0ZTo6RG9udEVudW0pOwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1l
cy0+bGVuZ3RoLCBqc051bWJlcigwKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkg
fCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CiB9CiAKQEAgLTE2Myw5ICsxNjMs
MTAgQEAgYm9vbCBKU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllcjo6ZwogCiBib29sIEpT
VGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyOjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4
KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogc3RhdGUsIHVuc2lnbmVkIGluZGV4LCBQcm9w
ZXJ0eVNsb3QmIHNsb3QpCiB7CisgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byog
dGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllcio+KG9i
amVjdCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkp
OwotICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbShzdGF0ZSwgaW5kZXgp
OworICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbSh2bSwgaW5kZXgpOwog
ICAgIHVzaW5nIEdldHRlcklETFR5cGUgPSBJRExET01TdHJpbmc7CiAgICAgYXV0byBnZXR0ZXJG
dW5jdG9yID0gW10gKGF1dG8mIHRoaXNPYmplY3QsIGF1dG8gcHJvcGVydHlOYW1lKSAtPiBPcHRp
b25hbDx0eXBlbmFtZSBHZXR0ZXJJRExUeXBlOjpJbXBsZW1lbnRhdGlvblR5cGU+IHsKICAgICAg
ICAgYXV0byByZXN1bHQgPSB0aGlzT2JqZWN0LndyYXBwZWQoKS5uYW1lZEl0ZW0ocHJvcGVydHlO
YW1lVG9BdG9tU3RyaW5nKHByb3BlcnR5TmFtZSkpOwpAQCAtMTgzLDEwICsxODQsMTEgQEAgYm9v
bCBKU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllcjo6ZwogCiB2b2lkIEpTVGVzdE5hbWVk
RGVsZXRlcldpdGhJZGVudGlmaWVyOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmpl
Y3QsIEV4ZWNTdGF0ZSogc3RhdGUsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBF
bnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKKyAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBh
dXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVy
Kj4ob2JqZWN0KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKG9iamVjdCwgaW5mbygp
KTsKICAgICBmb3IgKGF1dG8mIHByb3BlcnR5TmFtZSA6IHRoaXNPYmplY3QtPndyYXBwZWQoKS5z
dXBwb3J0ZWRQcm9wZXJ0eU5hbWVzKCkpCi0gICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50
aWZpZXI6OmZyb21TdHJpbmcoc3RhdGUsIHByb3BlcnR5TmFtZSkpOworICAgICAgICBwcm9wZXJ0
eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBwcm9wZXJ0eU5hbWUpKTsKICAg
ICBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIHN0YXRlLCBwcm9wZXJ0eU5h
bWVzLCBtb2RlKTsKIH0KIApAQCAtMjA1LDcgKzIwNyw4IEBAIGJvb2wgSlNUZXN0TmFtZWREZWxl
dGVyV2l0aElkZW50aWZpZXI6OmQKIHsKICAgICBhdXRvJiB0aGlzT2JqZWN0ID0gKmpzQ2FzdDxK
U1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllcio+KGNlbGwpOwogICAgIGF1dG8mIGltcGwg
PSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZp
ZXI6OmZyb20oc3RhdGUsIGluZGV4KTsKKyAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKKyAgICBh
dXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb20odm0sIGluZGV4KTsKICAgICBpZiAo
aXNWaXNpYmxlTmFtZWRQcm9wZXJ0eTxPdmVycmlkZUJ1aWx0aW5zOjpObz4oKnN0YXRlLCB0aGlz
T2JqZWN0LCBwcm9wZXJ0eU5hbWUpKSB7CiAgICAgICAgIGltcGwubmFtZWREZWxldGVyKHByb3Bl
cnR5TmFtZVRvU3RyaW5nKHByb3BlcnR5TmFtZSkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZERl
bGV0ZXJXaXRoSW5kZXhlZEdldHRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVkR2V0
dGVyLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVkR2V0dGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtODEsNyArODEsNyBAQCB0ZW1wbGF0ZTw+IEpTVmFsdWUgSlNUZXN0TmFt
ZWREZWxldGVyV2l0CiB0ZW1wbGF0ZTw+IHZvaWQgSlNUZXN0TmFtZWREZWxldGVyV2l0aEluZGV4
ZWRHZXR0ZXJDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMoVk0mIHZtLCBKU0RPTUds
b2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQogewogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVy
dHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRlcjo6
cHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250
RGVsZXRlIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5
QXR0cmlidXRlOjpEb250RW51bSk7Ci0gICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVz
LT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcoJnZtLCBTdHJpbmcoIlRlc3ROYW1lZERlbGV0ZXJX
aXRoSW5kZXhlZEdldHRlciJfcykpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8
IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKKyAgICBwdXREaXJlY3Qodm0sIHZt
LnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZyh2bSwgU3RyaW5nKCJUZXN0
TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXIiX3MpKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0
ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CiAgICAgcHV0
RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDApLCBKU0M6OlBy
b3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRF
bnVtKTsKIH0KIApAQCAtMTY2LDYgKzE2Niw3IEBAIGJvb2wgSlNUZXN0TmFtZWREZWxldGVyV2l0
aEluZGV4ZWRHZXR0ZXIKIAogYm9vbCBKU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRl
cjo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUq
IHN0YXRlLCB1bnNpZ25lZCBpbmRleCwgUHJvcGVydHlTbG90JiBzbG90KQogeworICAgIFZNJiB2
bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFt
ZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXIqPihvYmplY3QpOwogICAgIEFTU0VSVF9HQ19PQkpF
Q1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKICAgICBpZiAoTElLRUxZKGluZGV4IDw9
IE1BWF9BUlJBWV9JTkRFWCkpIHsKQEAgLTE3Niw3ICsxNzcsNyBAQCBib29sIEpTVGVzdE5hbWVk
RGVsZXRlcldpdGhJbmRleGVkR2V0dGVyCiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIEpTT2Jq
ZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KG9iamVjdCwgc3RhdGUsIGluZGV4LCBzbG90
KTsKICAgICB9Ci0gICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tKHN0YXRl
LCBpbmRleCk7CisgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tKHZtLCBp
bmRleCk7CiAgICAgdXNpbmcgR2V0dGVySURMVHlwZSA9IElETERPTVN0cmluZzsKICAgICBhdXRv
IGdldHRlckZ1bmN0b3IgPSBbXSAoYXV0byYgdGhpc09iamVjdCwgYXV0byBwcm9wZXJ0eU5hbWUp
IC0+IE9wdGlvbmFsPHR5cGVuYW1lIEdldHRlcklETFR5cGU6OkltcGxlbWVudGF0aW9uVHlwZT4g
ewogICAgICAgICBhdXRvIHJlc3VsdCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpLm5hbWVkSXRlbShw
cm9wZXJ0eU5hbWVUb0F0b21TdHJpbmcocHJvcGVydHlOYW1lKSk7CkBAIC0xOTQsMTIgKzE5NSwx
MyBAQCBib29sIEpTVGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVkR2V0dGVyCiAKIHZvaWQgSlNU
ZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXI6OmdldE93blByb3BlcnR5TmFtZXMoSlNP
YmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBzdGF0ZSwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3Bl
cnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQogeworICAgIFZNJiB2bSA9IHN0YXRlLT52
bSgpOwogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWREZWxldGVyV2l0
aEluZGV4ZWRHZXR0ZXIqPihvYmplY3QpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMo
b2JqZWN0LCBpbmZvKCkpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDAsIGNvdW50ID0gdGhpc09i
amVjdC0+d3JhcHBlZCgpLmxlbmd0aCgpOyBpIDwgY291bnQ7ICsraSkKLSAgICAgICAgcHJvcGVy
dHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbShzdGF0ZSwgaSkpOworICAgICAgICBwcm9wZXJ0
eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9tKHZtLCBpKSk7CiAgICAgZm9yIChhdXRvJiBwcm9w
ZXJ0eU5hbWUgOiB0aGlzT2JqZWN0LT53cmFwcGVkKCkuc3VwcG9ydGVkUHJvcGVydHlOYW1lcygp
KQotICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHN0YXRl
LCBwcm9wZXJ0eU5hbWUpKTsKKyAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6
ZnJvbVN0cmluZyh2bSwgcHJvcGVydHlOYW1lKSk7CiAgICAgSlNPYmplY3Q6OmdldE93blByb3Bl
cnR5TmFtZXMob2JqZWN0LCBzdGF0ZSwgcHJvcGVydHlOYW1lcywgbW9kZSk7CiB9CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEdldHRl
ckNhbGxXaXRoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aC5jcHAJKHJldmlzaW9uIDI0OTEy
OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1l
ZEdldHRlckNhbGxXaXRoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODAsNyArODAsNyBAQCB0ZW1w
bGF0ZTw+IEpTVmFsdWUgSlNUZXN0TmFtZWRHZXR0ZXJDYWxsCiB0ZW1wbGF0ZTw+IHZvaWQgSlNU
ZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aENvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGllcyhW
TSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCiB7CiAgICAgcHV0RGlyZWN0
KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdE5hbWVkR2V0dGVyQ2FsbFdp
dGg6OnByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6
RG9udERlbGV0ZSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9w
ZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwotICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlO
YW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKCZ2bSwgU3RyaW5nKCJUZXN0TmFtZWRHZXR0
ZXJDYWxsV2l0aCJfcykpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6
UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3Bl
cnR5TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZyh2bSwgU3RyaW5nKCJUZXN0TmFtZWRH
ZXR0ZXJDYWxsV2l0aCJfcykpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpT
Qzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKICAgICBwdXREaXJlY3Qodm0sIHZtLnBy
b3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6
OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwogfQogCkBAIC0x
NTcsOSArMTU3LDEwIEBAIGJvb2wgSlNUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aDo6Z2V0T3duUHIK
IAogYm9vbCBKU1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoOjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUlu
ZGV4KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogc3RhdGUsIHVuc2lnbmVkIGluZGV4LCBQ
cm9wZXJ0eVNsb3QmIHNsb3QpCiB7CisgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0
byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoKj4ob2JqZWN0
KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7Ci0g
ICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tKHN0YXRlLCBpbmRleCk7Cisg
ICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tKHZtLCBpbmRleCk7CiAgICAg
dXNpbmcgR2V0dGVySURMVHlwZSA9IElETERPTVN0cmluZzsKICAgICBhdXRvIGdldHRlckZ1bmN0
b3IgPSBbXSAoYXV0byYgdGhpc09iamVjdCwgYXV0byBwcm9wZXJ0eU5hbWUpIC0+IE9wdGlvbmFs
PHR5cGVuYW1lIEdldHRlcklETFR5cGU6OkltcGxlbWVudGF0aW9uVHlwZT4gewogICAgICAgICBh
dXRvIHJlc3VsdCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpLm5hbWVkSXRlbSh3b3JsZEZvckRPTU9i
amVjdCh0aGlzT2JqZWN0KSwgcHJvcGVydHlOYW1lVG9BdG9tU3RyaW5nKHByb3BlcnR5TmFtZSkp
OwpAQCAtMTc3LDEwICsxNzgsMTEgQEAgYm9vbCBKU1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoOjpn
ZXRPd25QcgogCiB2b2lkIEpTVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGg6OmdldE93blByb3BlcnR5
TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBzdGF0ZSwgUHJvcGVydHlOYW1lQXJy
YXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQogeworICAgIFZNJiB2bSA9
IHN0YXRlLT52bSgpOwogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWRH
ZXR0ZXJDYWxsV2l0aCo+KG9iamVjdCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhv
YmplY3QsIGluZm8oKSk7CiAgICAgZm9yIChhdXRvJiBwcm9wZXJ0eU5hbWUgOiB0aGlzT2JqZWN0
LT53cmFwcGVkKCkuc3VwcG9ydGVkUHJvcGVydHlOYW1lcygpKQotICAgICAgICBwcm9wZXJ0eU5h
bWVzLmFkZChJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHN0YXRlLCBwcm9wZXJ0eU5hbWUpKTsKKyAg
ICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcHJvcGVy
dHlOYW1lKSk7CiAgICAgSlNPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBzdGF0
ZSwgcHJvcGVydHlOYW1lcywgbW9kZSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkR2V0dGVyTm9JZGVu
dGlmaWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODAsNyArODAsNyBAQCB0ZW1wbGF0ZTw+IEpT
VmFsdWUgSlNUZXN0TmFtZWRHZXR0ZXJOb0lkCiB0ZW1wbGF0ZTw+IHZvaWQgSlNUZXN0TmFtZWRH
ZXR0ZXJOb0lkZW50aWZpZXJDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMoVk0mIHZt
LCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQogewogICAgIHB1dERpcmVjdCh2bSwg
dm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3ROYW1lZEdldHRlck5vSWRlbnRpZmll
cjo6cHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpE
b250RGVsZXRlIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3Bl
cnR5QXR0cmlidXRlOjpEb250RW51bSk7Ci0gICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5h
bWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcoJnZtLCBTdHJpbmcoIlRlc3ROYW1lZEdldHRl
ck5vSWRlbnRpZmllciJfcykpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpT
Qzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnBy
b3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZyh2bSwgU3RyaW5nKCJUZXN0TmFt
ZWRHZXR0ZXJOb0lkZW50aWZpZXIiX3MpKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9u
bHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CiAgICAgcHV0RGlyZWN0KHZt
LCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDApLCBKU0M6OlByb3BlcnR5QXR0
cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKIH0K
IApAQCAtMTU3LDkgKzE1NywxMCBAQCBib29sIEpTVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVy
OjpnZXRPCiAKIGJvb2wgSlNUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXI6OmdldE93blByb3Bl
cnR5U2xvdEJ5SW5kZXgoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBzdGF0ZSwgdW5zaWdu
ZWQgaW5kZXgsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKKyAgICBWTSYgdm0gPSBzdGF0ZS0+dm0o
KTsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkR2V0dGVyTm9JZGVu
dGlmaWVyKj4ob2JqZWN0KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmpl
Y3QsIGluZm8oKSk7Ci0gICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tKHN0
YXRlLCBpbmRleCk7CisgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tKHZt
LCBpbmRleCk7CiAgICAgdXNpbmcgR2V0dGVySURMVHlwZSA9IElETERPTVN0cmluZzsKICAgICBh
dXRvIGdldHRlckZ1bmN0b3IgPSBbXSAoYXV0byYgdGhpc09iamVjdCwgYXV0byBwcm9wZXJ0eU5h
bWUpIC0+IE9wdGlvbmFsPHR5cGVuYW1lIEdldHRlcklETFR5cGU6OkltcGxlbWVudGF0aW9uVHlw
ZT4gewogICAgICAgICBhdXRvIHJlc3VsdCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpLm5hbWVkSXRl
bShwcm9wZXJ0eU5hbWVUb0F0b21TdHJpbmcocHJvcGVydHlOYW1lKSk7CkBAIC0xNzcsMTAgKzE3
OCwxMSBAQCBib29sIEpTVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyOjpnZXRPCiAKIHZvaWQg
SlNUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXI6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmpl
Y3QqIG9iamVjdCwgRXhlY1N0YXRlKiBzdGF0ZSwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5
TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQogeworICAgIFZNJiB2bSA9IHN0YXRlLT52bSgp
OwogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWRHZXR0ZXJOb0lkZW50
aWZpZXIqPihvYmplY3QpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMob2JqZWN0LCBp
bmZvKCkpOwogICAgIGZvciAoYXV0byYgcHJvcGVydHlOYW1lIDogdGhpc09iamVjdC0+d3JhcHBl
ZCgpLnN1cHBvcnRlZFByb3BlcnR5TmFtZXMoKSkKLSAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQo
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyhzdGF0ZSwgcHJvcGVydHlOYW1lKSk7CisgICAgICAgIHBy
b3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHByb3BlcnR5TmFtZSkp
OwogICAgIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgc3RhdGUsIHByb3Bl
cnR5TmFtZXMsIG1vZGUpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVk
R2V0dGVyV2l0aElkZW50aWZpZXIuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRp
Zmllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1LDcgKzg1LDcgQEAgdGVtcGxhdGU8PiBKU1Zh
bHVlIEpTVGVzdE5hbWVkR2V0dGVyV2l0aAogdGVtcGxhdGU8PiB2b2lkIEpTVGVzdE5hbWVkR2V0
dGVyV2l0aElkZW50aWZpZXJDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMoVk0mIHZt
LCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQogewogICAgIHB1dERpcmVjdCh2bSwg
dm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlm
aWVyOjpwcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6
OkRvbnREZWxldGUgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJv
cGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKLSAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5
TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZygmdm0sIFN0cmluZygiVGVzdE5hbWVkR2V0
dGVyV2l0aElkZW50aWZpZXIiX3MpKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkg
fCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CisgICAgcHV0RGlyZWN0KHZtLCB2
bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcodm0sIFN0cmluZygiVGVz
dE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXIiX3MpKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6
UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CiAgICAgcHV0RGly
ZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDApLCBKU0M6OlByb3Bl
cnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVt
KTsKIH0KIApAQCAtMTYzLDkgKzE2MywxMCBAQCBib29sIEpTVGVzdE5hbWVkR2V0dGVyV2l0aElk
ZW50aWZpZXI6OmdlCiAKIGJvb2wgSlNUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllcjo6Z2V0
T3duUHJvcGVydHlTbG90QnlJbmRleChKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIHN0YXRl
LCB1bnNpZ25lZCBpbmRleCwgUHJvcGVydHlTbG90JiBzbG90KQogeworICAgIFZNJiB2bSA9IHN0
YXRlLT52bSgpOwogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWRHZXR0
ZXJXaXRoSWRlbnRpZmllcio+KG9iamVjdCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklU
Uyh0aGlzT2JqZWN0LCBpbmZvKCkpOwotICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmll
cjo6ZnJvbShzdGF0ZSwgaW5kZXgpOworICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmll
cjo6ZnJvbSh2bSwgaW5kZXgpOwogICAgIHVzaW5nIEdldHRlcklETFR5cGUgPSBJRExET01TdHJp
bmc7CiAgICAgYXV0byBnZXR0ZXJGdW5jdG9yID0gW10gKGF1dG8mIHRoaXNPYmplY3QsIGF1dG8g
cHJvcGVydHlOYW1lKSAtPiBPcHRpb25hbDx0eXBlbmFtZSBHZXR0ZXJJRExUeXBlOjpJbXBsZW1l
bnRhdGlvblR5cGU+IHsKICAgICAgICAgYXV0byByZXN1bHQgPSB0aGlzT2JqZWN0LndyYXBwZWQo
KS5nZXR0ZXJOYW1lKHByb3BlcnR5TmFtZVRvQXRvbVN0cmluZyhwcm9wZXJ0eU5hbWUpKTsKQEAg
LTE4MywxMCArMTg0LDExIEBAIGJvb2wgSlNUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllcjo6
Z2UKIAogdm9pZCBKU1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyOjpnZXRPd25Qcm9wZXJ0
eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogc3RhdGUsIFByb3BlcnR5TmFtZUFy
cmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKKyAgICBWTSYgdm0g
PSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVk
R2V0dGVyV2l0aElkZW50aWZpZXIqPihvYmplY3QpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5I
RVJJVFMob2JqZWN0LCBpbmZvKCkpOwogICAgIGZvciAoYXV0byYgcHJvcGVydHlOYW1lIDogdGhp
c09iamVjdC0+d3JhcHBlZCgpLnN1cHBvcnRlZFByb3BlcnR5TmFtZXMoKSkKLSAgICAgICAgcHJv
cGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhzdGF0ZSwgcHJvcGVydHlOYW1l
KSk7CisgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0s
IHByb3BlcnR5TmFtZSkpOwogICAgIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVj
dCwgc3RhdGUsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllci5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRl
ck5vSWRlbnRpZmllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwLDcgKzgwLDcgQEAgdGVtcGxh
dGU8PiBKU1ZhbHVlIEpTVGVzdE5hbWVkU2V0dGVyTm9JZAogdGVtcGxhdGU8PiB2b2lkIEpTVGVz
dE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVz
KFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKIHsKICAgICBwdXREaXJl
Y3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgSlNUZXN0TmFtZWRTZXR0ZXJOb0lk
ZW50aWZpZXI6OnByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KSwgSlNDOjpQcm9wZXJ0eUF0dHJp
YnV0ZTo6RG9udERlbGV0ZSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlND
OjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwotICAgIHB1dERpcmVjdCh2bSwgdm0ucHJv
cGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKCZ2bSwgU3RyaW5nKCJUZXN0TmFt
ZWRTZXR0ZXJOb0lkZW50aWZpZXIiX3MpKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9u
bHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CisgICAgcHV0RGlyZWN0KHZt
LCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcodm0sIFN0cmluZygi
VGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyIl9zKSksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6
OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwogICAgIHB1dERp
cmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigwKSwgSlNDOjpQcm9w
ZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51
bSk7CiB9CiAKQEAgLTE1Nyw5ICsxNTcsMTAgQEAgYm9vbCBKU1Rlc3ROYW1lZFNldHRlck5vSWRl
bnRpZmllcjo6Z2V0TwogCiBib29sIEpTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyOjpnZXRP
d25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogc3RhdGUs
IHVuc2lnbmVkIGluZGV4LCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CisgICAgVk0mIHZtID0gc3Rh
dGUtPnZtKCk7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZFNldHRl
ck5vSWRlbnRpZmllcio+KG9iamVjdCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0
aGlzT2JqZWN0LCBpbmZvKCkpOwotICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6
ZnJvbShzdGF0ZSwgaW5kZXgpOworICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6
ZnJvbSh2bSwgaW5kZXgpOwogICAgIHVzaW5nIEdldHRlcklETFR5cGUgPSBJRExET01TdHJpbmc7
CiAgICAgYXV0byBnZXR0ZXJGdW5jdG9yID0gW10gKGF1dG8mIHRoaXNPYmplY3QsIGF1dG8gcHJv
cGVydHlOYW1lKSAtPiBPcHRpb25hbDx0eXBlbmFtZSBHZXR0ZXJJRExUeXBlOjpJbXBsZW1lbnRh
dGlvblR5cGU+IHsKICAgICAgICAgYXV0byByZXN1bHQgPSB0aGlzT2JqZWN0LndyYXBwZWQoKS5u
YW1lZEl0ZW0ocHJvcGVydHlOYW1lVG9BdG9tU3RyaW5nKHByb3BlcnR5TmFtZSkpOwpAQCAtMTc3
LDEwICsxNzgsMTEgQEAgYm9vbCBKU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllcjo6Z2V0Twog
CiB2b2lkIEpTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyOjpnZXRPd25Qcm9wZXJ0eU5hbWVz
KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogc3RhdGUsIFByb3BlcnR5TmFtZUFycmF5JiBw
cm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKKyAgICBWTSYgdm0gPSBzdGF0
ZS0+dm0oKTsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkU2V0dGVy
Tm9JZGVudGlmaWVyKj4ob2JqZWN0KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKG9i
amVjdCwgaW5mbygpKTsKICAgICBmb3IgKGF1dG8mIHByb3BlcnR5TmFtZSA6IHRoaXNPYmplY3Qt
PndyYXBwZWQoKS5zdXBwb3J0ZWRQcm9wZXJ0eU5hbWVzKCkpCi0gICAgICAgIHByb3BlcnR5TmFt
ZXMuYWRkKElkZW50aWZpZXI6OmZyb21TdHJpbmcoc3RhdGUsIHByb3BlcnR5TmFtZSkpOworICAg
ICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBwcm9wZXJ0
eU5hbWUpKTsKICAgICBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIHN0YXRl
LCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKIH0KIApAQCAtMjA2LDEyICsyMDgsMTMgQEAgYm9vbCBK
U1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllcjo6cHV0KAogCiBib29sIEpTVGVzdE5hbWVkU2V0
dGVyTm9JZGVudGlmaWVyOjpwdXRCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBzdGF0
ZSwgdW5zaWduZWQgaW5kZXgsIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCiB7Cisg
ICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxK
U1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllcio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpF
Q1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKIAotICAgIGF1dG8gcHJvcGVydHlOYW1l
ID0gSWRlbnRpZmllcjo6ZnJvbShzdGF0ZSwgaW5kZXgpOworICAgIGF1dG8gcHJvcGVydHlOYW1l
ID0gSWRlbnRpZmllcjo6ZnJvbSh2bSwgaW5kZXgpOwogICAgIFByb3BlcnR5U2xvdCBzbG90IHsg
dGhpc09iamVjdCwgUHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6OlZNSW5xdWlyeSB9
OwotICAgIEpTVmFsdWUgcHJvdG90eXBlID0gdGhpc09iamVjdC0+Z2V0UHJvdG90eXBlRGlyZWN0
KHN0YXRlLT52bSgpKTsKKyAgICBKU1ZhbHVlIHByb3RvdHlwZSA9IHRoaXNPYmplY3QtPmdldFBy
b3RvdHlwZURpcmVjdCh2bSk7CiAgICAgaWYgKCEocHJvdG90eXBlLmlzT2JqZWN0KCkgJiYgYXNP
YmplY3QocHJvdG90eXBlKS0+Z2V0UHJvcGVydHlTbG90KHN0YXRlLCBwcm9wZXJ0eU5hbWUsIHNs
b3QpKSkgewogICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHN0
YXRlLT52bSgpKTsKICAgICAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3Ry
aW5nPigqc3RhdGUsIHZhbHVlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFt
ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlclRocm93
aW5nRXhjZXB0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODAsNyArODAsNyBAQCB0ZW1wbGF0
ZTw+IEpTVmFsdWUgSlNUZXN0TmFtZWRTZXR0ZXJUaHJvCiB0ZW1wbGF0ZTw+IHZvaWQgSlNUZXN0
TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbkNvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVy
dGllcyhWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCiB7CiAgICAgcHV0
RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdE5hbWVkU2V0dGVy
VGhyb3dpbmdFeGNlcHRpb246OnByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KSwgSlNDOjpQcm9w
ZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRP
bmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwotICAgIHB1dERpcmVjdCh2
bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKCZ2bSwgU3RyaW5n
KCJUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbiJfcykpLCBKU0M6OlByb3BlcnR5QXR0
cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKKyAg
ICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0cmlu
Zyh2bSwgU3RyaW5nKCJUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbiJfcykpLCBKU0M6
OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRv
bnRFbnVtKTsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNO
dW1iZXIoMCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0
eUF0dHJpYnV0ZTo6RG9udEVudW0pOwogfQogCkBAIC0xNTcsOSArMTU3LDEwIEBAIGJvb2wgSlNU
ZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbjoKIAogYm9vbCBKU1Rlc3ROYW1lZFNldHRl
clRocm93aW5nRXhjZXB0aW9uOjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTT2JqZWN0KiBv
YmplY3QsIEV4ZWNTdGF0ZSogc3RhdGUsIHVuc2lnbmVkIGluZGV4LCBQcm9wZXJ0eVNsb3QmIHNs
b3QpCiB7CisgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byogdGhpc09iamVjdCA9
IGpzQ2FzdDxKU1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uKj4ob2JqZWN0KTsKICAg
ICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7Ci0gICAgYXV0
byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tKHN0YXRlLCBpbmRleCk7CisgICAgYXV0
byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tKHZtLCBpbmRleCk7CiAgICAgdXNpbmcg
R2V0dGVySURMVHlwZSA9IElETERPTVN0cmluZzsKICAgICBhdXRvIGdldHRlckZ1bmN0b3IgPSBb
XSAoYXV0byYgdGhpc09iamVjdCwgYXV0byBwcm9wZXJ0eU5hbWUpIC0+IE9wdGlvbmFsPHR5cGVu
YW1lIEdldHRlcklETFR5cGU6OkltcGxlbWVudGF0aW9uVHlwZT4gewogICAgICAgICBhdXRvIHJl
c3VsdCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpLm5hbWVkSXRlbShwcm9wZXJ0eU5hbWVUb0F0b21T
dHJpbmcocHJvcGVydHlOYW1lKSk7CkBAIC0xNzcsMTAgKzE3OCwxMSBAQCBib29sIEpTVGVzdE5h
bWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246CiAKIHZvaWQgSlNUZXN0TmFtZWRTZXR0ZXJUaHJv
d2luZ0V4Y2VwdGlvbjo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVj
U3RhdGUqIHN0YXRlLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRp
b25Nb2RlIG1vZGUpCiB7CisgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byogdGhp
c09iamVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uKj4ob2Jq
ZWN0KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKG9iamVjdCwgaW5mbygpKTsKICAg
ICBmb3IgKGF1dG8mIHByb3BlcnR5TmFtZSA6IHRoaXNPYmplY3QtPndyYXBwZWQoKS5zdXBwb3J0
ZWRQcm9wZXJ0eU5hbWVzKCkpCi0gICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6
OmZyb21TdHJpbmcoc3RhdGUsIHByb3BlcnR5TmFtZSkpOworICAgICAgICBwcm9wZXJ0eU5hbWVz
LmFkZChJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBwcm9wZXJ0eU5hbWUpKTsKICAgICBKU09i
amVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIHN0YXRlLCBwcm9wZXJ0eU5hbWVzLCBt
b2RlKTsKIH0KIApAQCAtMjA2LDEyICsyMDgsMTMgQEAgYm9vbCBKU1Rlc3ROYW1lZFNldHRlclRo
cm93aW5nRXhjZXB0aW9uOgogCiBib29sIEpTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRp
b246OnB1dEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIHN0YXRlLCB1bnNpZ25lZCBp
bmRleCwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKIHsKKyAgICBWTSYgdm0gPSBz
dGF0ZS0+dm0oKTsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkU2V0
dGVyVGhyb3dpbmdFeGNlcHRpb24qPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAKLSAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50
aWZpZXI6OmZyb20oc3RhdGUsIGluZGV4KTsKKyAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50
aWZpZXI6OmZyb20odm0sIGluZGV4KTsKICAgICBQcm9wZXJ0eVNsb3Qgc2xvdCB7IHRoaXNPYmpl
Y3QsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpWTUlucXVpcnkgfTsKLSAgICBK
U1ZhbHVlIHByb3RvdHlwZSA9IHRoaXNPYmplY3QtPmdldFByb3RvdHlwZURpcmVjdChzdGF0ZS0+
dm0oKSk7CisgICAgSlNWYWx1ZSBwcm90b3R5cGUgPSB0aGlzT2JqZWN0LT5nZXRQcm90b3R5cGVE
aXJlY3Qodm0pOwogICAgIGlmICghKHByb3RvdHlwZS5pc09iamVjdCgpICYmIGFzT2JqZWN0KHBy
b3RvdHlwZSktPmdldFByb3BlcnR5U2xvdChzdGF0ZSwgcHJvcGVydHlOYW1lLCBzbG90KSkpIHsK
ICAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShzdGF0ZS0+dm0o
KSk7CiAgICAgICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKnN0
YXRlLCB2YWx1ZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0
aElkZW50aWZpZXIuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTg1LDcgKzg1LDcgQEAgdGVtcGxhdGU8PiBKU1ZhbHVlIEpTVGVz
dE5hbWVkU2V0dGVyV2l0aAogdGVtcGxhdGU8PiB2b2lkIEpTVGVzdE5hbWVkU2V0dGVyV2l0aElk
ZW50aWZpZXJDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMoVk0mIHZtLCBKU0RPTUds
b2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQogewogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVy
dHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyOjpwcm90
b3R5cGUodm0sIGdsb2JhbE9iamVjdCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnREZWxl
dGUgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRy
aWJ1dGU6OkRvbnRFbnVtKTsKLSAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm5h
bWUsIGpzTm9udHJpdmlhbFN0cmluZygmdm0sIFN0cmluZygiVGVzdE5hbWVkU2V0dGVyV2l0aElk
ZW50aWZpZXIiX3MpKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlBy
b3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0
eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcodm0sIFN0cmluZygiVGVzdE5hbWVkU2V0
dGVyV2l0aElkZW50aWZpZXIiX3MpKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkg
fCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CiAgICAgcHV0RGlyZWN0KHZtLCB2
bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDApLCBKU0M6OlByb3BlcnR5QXR0cmli
dXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKIH0KIApA
QCAtMTYzLDkgKzE2MywxMCBAQCBib29sIEpTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXI6
OmdlCiAKIGJvb2wgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6Z2V0T3duUHJvcGVy
dHlTbG90QnlJbmRleChKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIHN0YXRlLCB1bnNpZ25l
ZCBpbmRleCwgUHJvcGVydHlTbG90JiBzbG90KQogeworICAgIFZNJiB2bSA9IHN0YXRlLT52bSgp
OwogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRl
bnRpZmllcio+KG9iamVjdCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2Jq
ZWN0LCBpbmZvKCkpOwotICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbShz
dGF0ZSwgaW5kZXgpOworICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbSh2
bSwgaW5kZXgpOwogICAgIHVzaW5nIEdldHRlcklETFR5cGUgPSBJRExET01TdHJpbmc7CiAgICAg
YXV0byBnZXR0ZXJGdW5jdG9yID0gW10gKGF1dG8mIHRoaXNPYmplY3QsIGF1dG8gcHJvcGVydHlO
YW1lKSAtPiBPcHRpb25hbDx0eXBlbmFtZSBHZXR0ZXJJRExUeXBlOjpJbXBsZW1lbnRhdGlvblR5
cGU+IHsKICAgICAgICAgYXV0byByZXN1bHQgPSB0aGlzT2JqZWN0LndyYXBwZWQoKS5uYW1lZEl0
ZW0ocHJvcGVydHlOYW1lVG9BdG9tU3RyaW5nKHByb3BlcnR5TmFtZSkpOwpAQCAtMTgzLDEwICsx
ODQsMTEgQEAgYm9vbCBKU1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyOjpnZQogCiB2b2lk
IEpTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXI6OmdldE93blByb3BlcnR5TmFtZXMoSlNP
YmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBzdGF0ZSwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3Bl
cnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQogeworICAgIFZNJiB2bSA9IHN0YXRlLT52
bSgpOwogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWRTZXR0ZXJXaXRo
SWRlbnRpZmllcio+KG9iamVjdCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhvYmpl
Y3QsIGluZm8oKSk7CiAgICAgZm9yIChhdXRvJiBwcm9wZXJ0eU5hbWUgOiB0aGlzT2JqZWN0LT53
cmFwcGVkKCkuc3VwcG9ydGVkUHJvcGVydHlOYW1lcygpKQotICAgICAgICBwcm9wZXJ0eU5hbWVz
LmFkZChJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHN0YXRlLCBwcm9wZXJ0eU5hbWUpKTsKKyAgICAg
ICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcHJvcGVydHlO
YW1lKSk7CiAgICAgSlNPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBzdGF0ZSwg
cHJvcGVydHlOYW1lcywgbW9kZSk7CiB9CiAKQEAgLTIxMiwxMiArMjE0LDEzIEBAIGJvb2wgSlNU
ZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6cHUKIAogYm9vbCBKU1Rlc3ROYW1lZFNldHRl
cldpdGhJZGVudGlmaWVyOjpwdXRCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBzdGF0
ZSwgdW5zaWduZWQgaW5kZXgsIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCiB7Cisg
ICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxK
U1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09C
SkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogCi0gICAgYXV0byBwcm9wZXJ0eU5h
bWUgPSBJZGVudGlmaWVyOjpmcm9tKHN0YXRlLCBpbmRleCk7CisgICAgYXV0byBwcm9wZXJ0eU5h
bWUgPSBJZGVudGlmaWVyOjpmcm9tKHZtLCBpbmRleCk7CiAgICAgUHJvcGVydHlTbG90IHNsb3Qg
eyB0aGlzT2JqZWN0LCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6Vk1JbnF1aXJ5
IH07Ci0gICAgSlNWYWx1ZSBwcm90b3R5cGUgPSB0aGlzT2JqZWN0LT5nZXRQcm90b3R5cGVEaXJl
Y3Qoc3RhdGUtPnZtKCkpOworICAgIEpTVmFsdWUgcHJvdG90eXBlID0gdGhpc09iamVjdC0+Z2V0
UHJvdG90eXBlRGlyZWN0KHZtKTsKICAgICBpZiAoIShwcm90b3R5cGUuaXNPYmplY3QoKSAmJiBh
c09iamVjdChwcm90b3R5cGUpLT5nZXRQcm9wZXJ0eVNsb3Qoc3RhdGUsIHByb3BlcnR5TmFtZSwg
c2xvdCkpKSB7CiAgICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
c3RhdGUtPnZtKCkpOwogICAgICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01T
dHJpbmc+KCpzdGF0ZSwgdmFsdWUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RO
YW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0
aEluZGV4ZWRHZXR0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OCw3ICs4OCw3IEBAIHRlbXBs
YXRlPD4gSlNWYWx1ZSBKU1Rlc3ROYW1lZFNldHRlcldpdGgKIHRlbXBsYXRlPD4gdm9pZCBKU1Rl
c3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9w
ZXJ0aWVzKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKIHsKICAgICBw
dXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgSlNUZXN0TmFtZWRTZXR0
ZXJXaXRoSW5kZXhlZEdldHRlcjo6cHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QpLCBKU0M6OlBy
b3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVh
ZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7Ci0gICAgcHV0RGlyZWN0
KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcoJnZtLCBTdHJp
bmcoIlRlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyIl9zKSksIEpTQzo6UHJvcGVydHlB
dHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwor
ICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3Ry
aW5nKHZtLCBTdHJpbmcoIlRlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyIl9zKSksIEpT
Qzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6
RG9udEVudW0pOwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBq
c051bWJlcigwKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3Bl
cnR5QXR0cmlidXRlOjpEb250RW51bSk7CiB9CiAKQEAgLTE3NSw2ICsxNzUsNyBAQCBib29sIEpT
VGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXI6CiAKIGJvb2wgSlNUZXN0TmFtZWRTZXR0
ZXJXaXRoSW5kZXhlZEdldHRlcjo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU09iamVjdCog
b2JqZWN0LCBFeGVjU3RhdGUqIHN0YXRlLCB1bnNpZ25lZCBpbmRleCwgUHJvcGVydHlTbG90JiBz
bG90KQogeworICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8qIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlcio+KG9iamVjdCk7CiAg
ICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogICAgIGlm
IChMSUtFTFkoaW5kZXggPD0gTUFYX0FSUkFZX0lOREVYKSkgewpAQCAtMTg1LDcgKzE4Niw3IEBA
IGJvb2wgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlcjoKICAgICAgICAgfQogICAg
ICAgICByZXR1cm4gSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgob2JqZWN0LCBz
dGF0ZSwgaW5kZXgsIHNsb3QpOwogICAgIH0KLSAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50
aWZpZXI6OmZyb20oc3RhdGUsIGluZGV4KTsKKyAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50
aWZpZXI6OmZyb20odm0sIGluZGV4KTsKICAgICB1c2luZyBHZXR0ZXJJRExUeXBlID0gSURMRE9N
U3RyaW5nOwogICAgIGF1dG8gZ2V0dGVyRnVuY3RvciA9IFtdIChhdXRvJiB0aGlzT2JqZWN0LCBh
dXRvIHByb3BlcnR5TmFtZSkgLT4gT3B0aW9uYWw8dHlwZW5hbWUgR2V0dGVySURMVHlwZTo6SW1w
bGVtZW50YXRpb25UeXBlPiB7CiAgICAgICAgIGF1dG8gcmVzdWx0ID0gdGhpc09iamVjdC53cmFw
cGVkKCkubmFtZWRJdGVtKHByb3BlcnR5TmFtZVRvQXRvbVN0cmluZyhwcm9wZXJ0eU5hbWUpKTsK
QEAgLTIwMywxMiArMjA0LDEzIEBAIGJvb2wgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdl
dHRlcjoKIAogdm9pZCBKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyOjpnZXRPd25Q
cm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogc3RhdGUsIFByb3BlcnR5
TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKKyAgICBW
TSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVz
dE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXIqPihvYmplY3QpOwogICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFMob2JqZWN0LCBpbmZvKCkpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDAs
IGNvdW50ID0gdGhpc09iamVjdC0+d3JhcHBlZCgpLmxlbmd0aCgpOyBpIDwgY291bnQ7ICsraSkK
LSAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbShzdGF0ZSwgaSkpOwor
ICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9tKHZtLCBpKSk7CiAgICAg
Zm9yIChhdXRvJiBwcm9wZXJ0eU5hbWUgOiB0aGlzT2JqZWN0LT53cmFwcGVkKCkuc3VwcG9ydGVk
UHJvcGVydHlOYW1lcygpKQotICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHN0YXRlLCBwcm9wZXJ0eU5hbWUpKTsKKyAgICAgICAgcHJvcGVydHlOYW1lcy5h
ZGQoSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcHJvcGVydHlOYW1lKSk7CiAgICAgSlNPYmpl
Y3Q6OmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBzdGF0ZSwgcHJvcGVydHlOYW1lcywgbW9k
ZSk7CiB9CiAKQEAgLTIzNCwxMiArMjM2LDEzIEBAIGJvb2wgSlNUZXN0TmFtZWRTZXR0ZXJXaXRo
SW5kZXhlZEdldHRlcjoKIAogYm9vbCBKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVy
OjpwdXRCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBzdGF0ZSwgdW5zaWduZWQgaW5k
ZXgsIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCiB7CisgICAgVk0mIHZtID0gc3Rh
dGUtPnZtKCk7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZFNldHRl
cldpdGhJbmRleGVkR2V0dGVyKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklU
Uyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogCi0gICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlm
aWVyOjpmcm9tKHN0YXRlLCBpbmRleCk7CisgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlm
aWVyOjpmcm9tKHZtLCBpbmRleCk7CiAgICAgUHJvcGVydHlTbG90IHNsb3QgeyB0aGlzT2JqZWN0
LCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6Vk1JbnF1aXJ5IH07Ci0gICAgSlNW
YWx1ZSBwcm90b3R5cGUgPSB0aGlzT2JqZWN0LT5nZXRQcm90b3R5cGVEaXJlY3Qoc3RhdGUtPnZt
KCkpOworICAgIEpTVmFsdWUgcHJvdG90eXBlID0gdGhpc09iamVjdC0+Z2V0UHJvdG90eXBlRGly
ZWN0KHZtKTsKICAgICBpZiAoIShwcm90b3R5cGUuaXNPYmplY3QoKSAmJiBhc09iamVjdChwcm90
b3R5cGUpLT5nZXRQcm9wZXJ0eVNsb3Qoc3RhdGUsIHByb3BlcnR5TmFtZSwgc2xvdCkpKSB7CiAg
ICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoc3RhdGUtPnZtKCkp
OwogICAgICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KCpzdGF0
ZSwgdmFsdWUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1l
ZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyLmNwcAkocmV2aXNpb24gMjQ5MTI4KQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0
dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OCw3
ICs4OCw3IEBAIHRlbXBsYXRlPD4gSlNWYWx1ZSBKU1Rlc3ROYW1lZFNldHRlcldpdGgKIHRlbXBs
YXRlPD4gdm9pZCBKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyQ29u
c3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3Qm
IGdsb2JhbE9iamVjdCkKIHsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnBy
b3RvdHlwZSwgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlcjo6cHJv
dG90eXBlKHZtLCBnbG9iYWxPYmplY3QpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RGVs
ZXRlIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0
cmlidXRlOjpEb250RW51bSk7Ci0gICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5u
YW1lLCBqc05vbnRyaXZpYWxTdHJpbmcoJnZtLCBTdHJpbmcoIlRlc3ROYW1lZFNldHRlcldpdGhJ
bmRleGVkR2V0dGVyQW5kU2V0dGVyIl9zKSksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRP
bmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOworICAgIHB1dERpcmVjdCh2
bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKHZtLCBTdHJpbmco
IlRlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyIl9zKSksIEpTQzo6UHJv
cGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVu
dW0pOwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJl
cigwKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0
cmlidXRlOjpEb250RW51bSk7CiB9CiAKQEAgLTE3NSw2ICsxNzUsNyBAQCBib29sIEpTVGVzdE5h
bWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBCiAKIGJvb2wgSlNUZXN0TmFtZWRTZXR0ZXJXaXRo
SW5kZXhlZEdldHRlckFuZFNldHRlcjo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU09iamVj
dCogb2JqZWN0LCBFeGVjU3RhdGUqIHN0YXRlLCB1bnNpZ25lZCBpbmRleCwgUHJvcGVydHlTbG90
JiBzbG90KQogeworICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8qIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlcio+
KG9iamVjdCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZv
KCkpOwogICAgIGlmIChMSUtFTFkoaW5kZXggPD0gTUFYX0FSUkFZX0lOREVYKSkgewpAQCAtMTg1
LDcgKzE4Niw3IEBAIGJvb2wgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckEKICAg
ICAgICAgfQogICAgICAgICByZXR1cm4gSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdEJ5SW5k
ZXgob2JqZWN0LCBzdGF0ZSwgaW5kZXgsIHNsb3QpOwogICAgIH0KLSAgICBhdXRvIHByb3BlcnR5
TmFtZSA9IElkZW50aWZpZXI6OmZyb20oc3RhdGUsIGluZGV4KTsKKyAgICBhdXRvIHByb3BlcnR5
TmFtZSA9IElkZW50aWZpZXI6OmZyb20odm0sIGluZGV4KTsKICAgICB1c2luZyBHZXR0ZXJJRExU
eXBlID0gSURMRE9NU3RyaW5nOwogICAgIGF1dG8gZ2V0dGVyRnVuY3RvciA9IFtdIChhdXRvJiB0
aGlzT2JqZWN0LCBhdXRvIHByb3BlcnR5TmFtZSkgLT4gT3B0aW9uYWw8dHlwZW5hbWUgR2V0dGVy
SURMVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlPiB7CiAgICAgICAgIGF1dG8gcmVzdWx0ID0gdGhp
c09iamVjdC53cmFwcGVkKCkubmFtZWRJdGVtKHByb3BlcnR5TmFtZVRvQXRvbVN0cmluZyhwcm9w
ZXJ0eU5hbWUpKTsKQEAgLTIwMywxMiArMjA0LDEzIEBAIGJvb2wgSlNUZXN0TmFtZWRTZXR0ZXJX
aXRoSW5kZXhlZEdldHRlckEKIAogdm9pZCBKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0
dGVyQW5kU2V0dGVyOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNT
dGF0ZSogc3RhdGUsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlv
bk1vZGUgbW9kZSkKIHsKKyAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvKiB0aGlz
T2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0
ZXIqPihvYmplY3QpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMob2JqZWN0LCBpbmZv
KCkpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDAsIGNvdW50ID0gdGhpc09iamVjdC0+d3JhcHBl
ZCgpLmxlbmd0aCgpOyBpIDwgY291bnQ7ICsraSkKLSAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQo
SWRlbnRpZmllcjo6ZnJvbShzdGF0ZSwgaSkpOworICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJ
ZGVudGlmaWVyOjpmcm9tKHZtLCBpKSk7CiAgICAgZm9yIChhdXRvJiBwcm9wZXJ0eU5hbWUgOiB0
aGlzT2JqZWN0LT53cmFwcGVkKCkuc3VwcG9ydGVkUHJvcGVydHlOYW1lcygpKQotICAgICAgICBw
cm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHN0YXRlLCBwcm9wZXJ0eU5h
bWUpKTsKKyAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2
bSwgcHJvcGVydHlOYW1lKSk7CiAgICAgSlNPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMob2Jq
ZWN0LCBzdGF0ZSwgcHJvcGVydHlOYW1lcywgbW9kZSk7CiB9CiAKQEAgLTI0Miw2ICsyNDQsNyBA
QCBib29sIEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBCiAKIGJvb2wgSlNUZXN0
TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlcjo6cHV0QnlJbmRleChKU0NlbGwq
IGNlbGwsIEV4ZWNTdGF0ZSogc3RhdGUsIHVuc2lnbmVkIGluZGV4LCBKU1ZhbHVlIHZhbHVlLCBi
b29sIHNob3VsZFRocm93KQogeworICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8q
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFu
ZFNldHRlcio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVj
dCwgaW5mbygpKTsKIApAQCAtMjUzLDkgKzI1Niw5IEBAIGJvb2wgSlNUZXN0TmFtZWRTZXR0ZXJX
aXRoSW5kZXhlZEdldHRlckEKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgYXV0
byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tKHN0YXRlLCBpbmRleCk7CisgICAgYXV0
byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tKHZtLCBpbmRleCk7CiAgICAgUHJvcGVy
dHlTbG90IHNsb3QgeyB0aGlzT2JqZWN0LCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlw
ZTo6Vk1JbnF1aXJ5IH07Ci0gICAgSlNWYWx1ZSBwcm90b3R5cGUgPSB0aGlzT2JqZWN0LT5nZXRQ
cm90b3R5cGVEaXJlY3Qoc3RhdGUtPnZtKCkpOworICAgIEpTVmFsdWUgcHJvdG90eXBlID0gdGhp
c09iamVjdC0+Z2V0UHJvdG90eXBlRGlyZWN0KHZtKTsKICAgICBpZiAoIShwcm90b3R5cGUuaXNP
YmplY3QoKSAmJiBhc09iamVjdChwcm90b3R5cGUpLT5nZXRQcm9wZXJ0eVNsb3Qoc3RhdGUsIHBy
b3BlcnR5TmFtZSwgc2xvdCkpKSB7CiAgICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUoc3RhdGUtPnZtKCkpOwogICAgICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29u
dmVydDxJRExET01TdHJpbmc+KCpzdGF0ZSwgdmFsdWUpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRlQnVp
bHRpbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhPdmVycmlkZUJ1aWx0aW5zLmNwcAkocmV2aXNp
b24gMjQ5MTI4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC04MCw3ICs4MCw3IEBAIHRlbXBsYXRlPD4gSlNWYWx1ZSBKU1Rlc3ROYW1lZFNldHRlcldpdGgK
IHRlbXBsYXRlPD4gdm9pZCBKU1Rlc3ROYW1lZFNldHRlcldpdGhPdmVycmlkZUJ1aWx0aW5zQ29u
c3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3Qm
IGdsb2JhbE9iamVjdCkKIHsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnBy
b3RvdHlwZSwgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoT3ZlcnJpZGVCdWlsdGluczo6cHJvdG90eXBl
KHZtLCBnbG9iYWxPYmplY3QpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwg
SlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRl
OjpEb250RW51bSk7Ci0gICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBq
c05vbnRyaXZpYWxTdHJpbmcoJnZtLCBTdHJpbmcoIlRlc3ROYW1lZFNldHRlcldpdGhPdmVycmlk
ZUJ1aWx0aW5zIl9zKSksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQ
cm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVy
dHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKHZtLCBTdHJpbmcoIlRlc3ROYW1lZFNl
dHRlcldpdGhPdmVycmlkZUJ1aWx0aW5zIl9zKSksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJl
YWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwogICAgIHB1dERpcmVj
dCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigwKSwgSlNDOjpQcm9wZXJ0
eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7
CiB9CiAKQEAgLTE1Nyw5ICsxNTcsMTAgQEAgYm9vbCBKU1Rlc3ROYW1lZFNldHRlcldpdGhPdmVy
cmlkZUJ1aWx0aQogCiBib29sIEpTVGVzdE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnM6
OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBz
dGF0ZSwgdW5zaWduZWQgaW5kZXgsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKKyAgICBWTSYgdm0g
PSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVk
U2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnMqPihvYmplY3QpOwogICAgIEFTU0VSVF9HQ19PQkpF
Q1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKLSAgICBhdXRvIHByb3BlcnR5TmFtZSA9
IElkZW50aWZpZXI6OmZyb20oc3RhdGUsIGluZGV4KTsKKyAgICBhdXRvIHByb3BlcnR5TmFtZSA9
IElkZW50aWZpZXI6OmZyb20odm0sIGluZGV4KTsKICAgICB1c2luZyBHZXR0ZXJJRExUeXBlID0g
SURMRE9NU3RyaW5nOwogICAgIGF1dG8gZ2V0dGVyRnVuY3RvciA9IFtdIChhdXRvJiB0aGlzT2Jq
ZWN0LCBhdXRvIHByb3BlcnR5TmFtZSkgLT4gT3B0aW9uYWw8dHlwZW5hbWUgR2V0dGVySURMVHlw
ZTo6SW1wbGVtZW50YXRpb25UeXBlPiB7CiAgICAgICAgIGF1dG8gcmVzdWx0ID0gdGhpc09iamVj
dC53cmFwcGVkKCkubmFtZWRJdGVtKHByb3BlcnR5TmFtZVRvQXRvbVN0cmluZyhwcm9wZXJ0eU5h
bWUpKTsKQEAgLTE3NywxMCArMTc4LDExIEBAIGJvb2wgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoT3Zl
cnJpZGVCdWlsdGkKIAogdm9pZCBKU1Rlc3ROYW1lZFNldHRlcldpdGhPdmVycmlkZUJ1aWx0aW5z
OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogc3RhdGUs
IFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkK
IHsKKyAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganND
YXN0PEpTVGVzdE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnMqPihvYmplY3QpOwogICAg
IEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMob2JqZWN0LCBpbmZvKCkpOwogICAgIGZvciAoYXV0
byYgcHJvcGVydHlOYW1lIDogdGhpc09iamVjdC0+d3JhcHBlZCgpLnN1cHBvcnRlZFByb3BlcnR5
TmFtZXMoKSkKLSAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbVN0cmlu
ZyhzdGF0ZSwgcHJvcGVydHlOYW1lKSk7CisgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50
aWZpZXI6OmZyb21TdHJpbmcodm0sIHByb3BlcnR5TmFtZSkpOwogICAgIEpTT2JqZWN0OjpnZXRP
d25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgc3RhdGUsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwogfQog
CkBAIC0yMDIsMTAgKzIwNCwxMSBAQCBib29sIEpTVGVzdE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRl
QnVpbHRpCiAKIGJvb2wgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoT3ZlcnJpZGVCdWlsdGluczo6cHV0
QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogc3RhdGUsIHVuc2lnbmVkIGluZGV4LCBK
U1ZhbHVlIHZhbHVlLCBib29sKQogeworICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1
dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWRTZXR0ZXJXaXRoT3ZlcnJpZGVCdWls
dGlucyo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwg
aW5mbygpKTsKIAotICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbShzdGF0
ZSwgaW5kZXgpOworICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbSh2bSwg
aW5kZXgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoc3RhdGUt
PnZtKCkpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKnN0
YXRlLCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB0cnVlKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1l
ZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aFVu
Zm9yZ2FibGVQcm9wZXJ0aWVzLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2Fi
bGVQcm9wZXJ0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA0LDcgKzEwNCw3IEBAIHRlbXBs
YXRlPD4gSlNWYWx1ZSBKU1Rlc3ROYW1lZFNldHRlcldpdGgKIHRlbXBsYXRlPD4gdm9pZCBKU1Rl
c3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0NvbnN0cnVjdG9yOjppbml0aWFs
aXplUHJvcGVydGllcyhWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCiB7
CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdE5h
bWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzOjpwcm90b3R5cGUodm0sIGdsb2JhbE9i
amVjdCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUgfCBKU0M6OlByb3BlcnR5
QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsK
LSAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0
cmluZygmdm0sIFN0cmluZygiVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVz
Il9zKSksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0
dHJpYnV0ZTo6RG9udEVudW0pOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+
bmFtZSwganNOb250cml2aWFsU3RyaW5nKHZtLCBTdHJpbmcoIlRlc3ROYW1lZFNldHRlcldpdGhV
bmZvcmdhYmxlUHJvcGVydGllcyJfcykpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25s
eSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKICAgICBwdXREaXJlY3Qodm0s
IHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMCksIEpTQzo6UHJvcGVydHlBdHRy
aWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwogfQog
CkBAIC0xODEsOSArMTgxLDEwIEBAIGJvb2wgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJs
ZVByb3AKIAogYm9vbCBKU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllczo6
Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIHN0
YXRlLCB1bnNpZ25lZCBpbmRleCwgUHJvcGVydHlTbG90JiBzbG90KQogeworICAgIFZNJiB2bSA9
IHN0YXRlLT52bSgpOwogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWRT
ZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXMqPihvYmplY3QpOwogICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKLSAgICBhdXRvIHByb3BlcnR5TmFt
ZSA9IElkZW50aWZpZXI6OmZyb20oc3RhdGUsIGluZGV4KTsKKyAgICBhdXRvIHByb3BlcnR5TmFt
ZSA9IElkZW50aWZpZXI6OmZyb20odm0sIGluZGV4KTsKICAgICB1c2luZyBHZXR0ZXJJRExUeXBl
ID0gSURMRE9NU3RyaW5nOwogICAgIGF1dG8gZ2V0dGVyRnVuY3RvciA9IFtdIChhdXRvJiB0aGlz
T2JqZWN0LCBhdXRvIHByb3BlcnR5TmFtZSkgLT4gT3B0aW9uYWw8dHlwZW5hbWUgR2V0dGVySURM
VHlwZTo6SW1wbGVtZW50YXRpb25UeXBlPiB7CiAgICAgICAgIGF1dG8gcmVzdWx0ID0gdGhpc09i
amVjdC53cmFwcGVkKCkubmFtZWRJdGVtKHByb3BlcnR5TmFtZVRvQXRvbVN0cmluZyhwcm9wZXJ0
eU5hbWUpKTsKQEAgLTIwMSwxMCArMjAyLDExIEBAIGJvb2wgSlNUZXN0TmFtZWRTZXR0ZXJXaXRo
VW5mb3JnYWJsZVByb3AKIAogdm9pZCBKU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJv
cGVydGllczo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUq
IHN0YXRlLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2Rl
IG1vZGUpCiB7CisgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byogdGhpc09iamVj
dCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllcyo+KG9i
amVjdCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhvYmplY3QsIGluZm8oKSk7CiAg
ICAgZm9yIChhdXRvJiBwcm9wZXJ0eU5hbWUgOiB0aGlzT2JqZWN0LT53cmFwcGVkKCkuc3VwcG9y
dGVkUHJvcGVydHlOYW1lcygpKQotICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKHN0YXRlLCBwcm9wZXJ0eU5hbWUpKTsKKyAgICAgICAgcHJvcGVydHlOYW1l
cy5hZGQoSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcHJvcGVydHlOYW1lKSk7CiAgICAgSlNP
YmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBzdGF0ZSwgcHJvcGVydHlOYW1lcywg
bW9kZSk7CiB9CiAKQEAgLTIzMCwxMiArMjMyLDEzIEBAIGJvb2wgSlNUZXN0TmFtZWRTZXR0ZXJX
aXRoVW5mb3JnYWJsZVByb3AKIAogYm9vbCBKU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxl
UHJvcGVydGllczo6cHV0QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogc3RhdGUsIHVu
c2lnbmVkIGluZGV4LCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93KQogeworICAgIFZN
JiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0
TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXMqPihjZWxsKTsKICAgICBBU1NFUlRf
R0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAKLSAgICBhdXRvIHByb3Bl
cnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb20oc3RhdGUsIGluZGV4KTsKKyAgICBhdXRvIHByb3Bl
cnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb20odm0sIGluZGV4KTsKICAgICBQcm9wZXJ0eVNsb3Qg
c2xvdCB7IHRoaXNPYmplY3QsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpWTUlu
cXVpcnkgfTsKLSAgICBKU1ZhbHVlIHByb3RvdHlwZSA9IHRoaXNPYmplY3QtPmdldFByb3RvdHlw
ZURpcmVjdChzdGF0ZS0+dm0oKSk7CisgICAgSlNWYWx1ZSBwcm90b3R5cGUgPSB0aGlzT2JqZWN0
LT5nZXRQcm90b3R5cGVEaXJlY3Qodm0pOwogICAgIGlmICghKHByb3RvdHlwZS5pc09iamVjdCgp
ICYmIGFzT2JqZWN0KHByb3RvdHlwZSktPmdldFByb3BlcnR5U2xvdChzdGF0ZSwgcHJvcGVydHlO
YW1lLCBzbG90KSkpIHsKICAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRShzdGF0ZS0+dm0oKSk7CiAgICAgICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElE
TERPTVN0cmluZz4oKnN0YXRlLCB2YWx1ZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRp
ZXNBbmRPdmVycmlkZUJ1aWx0aW5zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVBy
b3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5zLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0
aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGlucy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEwNCw3ICsxMDQsNyBAQCB0ZW1wbGF0ZTw+IEpTVmFsdWUgSlNUZXN0TmFtZWRTZXR0
ZXJXaXRoCiB0ZW1wbGF0ZTw+IHZvaWQgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVBy
b3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5zQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0
aWVzKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKIHsKICAgICBwdXRE
aXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgSlNUZXN0TmFtZWRTZXR0ZXJX
aXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5zOjpwcm90b3R5cGUodm0s
IGdsb2JhbE9iamVjdCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUgfCBKU0M6
OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRv
bnRFbnVtKTsKLSAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9u
dHJpdmlhbFN0cmluZygmdm0sIFN0cmluZygiVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQ
cm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGlucyJfcykpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRl
OjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKKyAgICBwdXRE
aXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZyh2bSwg
U3RyaW5nKCJUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVycmlk
ZUJ1aWx0aW5zIl9zKSksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQ
cm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVy
dHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigwKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVh
ZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CiB9CiAKQEAgLTE4MSw5
ICsxODEsMTAgQEAgYm9vbCBKU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcAogCiBi
b29sIEpTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVC
dWlsdGluczo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU09iamVjdCogb2JqZWN0LCBFeGVj
U3RhdGUqIHN0YXRlLCB1bnNpZ25lZCBpbmRleCwgUHJvcGVydHlTbG90JiBzbG90KQogeworICAg
IFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNU
ZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5z
Kj4ob2JqZWN0KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGlu
Zm8oKSk7Ci0gICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tKHN0YXRlLCBp
bmRleCk7CisgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tKHZtLCBpbmRl
eCk7CiAgICAgdXNpbmcgR2V0dGVySURMVHlwZSA9IElETERPTVN0cmluZzsKICAgICBhdXRvIGdl
dHRlckZ1bmN0b3IgPSBbXSAoYXV0byYgdGhpc09iamVjdCwgYXV0byBwcm9wZXJ0eU5hbWUpIC0+
IE9wdGlvbmFsPHR5cGVuYW1lIEdldHRlcklETFR5cGU6OkltcGxlbWVudGF0aW9uVHlwZT4gewog
ICAgICAgICBhdXRvIHJlc3VsdCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpLm5hbWVkSXRlbShwcm9w
ZXJ0eU5hbWVUb0F0b21TdHJpbmcocHJvcGVydHlOYW1lKSk7CkBAIC0yMDEsMTAgKzIwMiwxMSBA
QCBib29sIEpTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wCiAKIHZvaWQgSlNUZXN0
TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5zOjpn
ZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogc3RhdGUsIFBy
b3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsK
KyAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0
PEpTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWls
dGlucyo+KG9iamVjdCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhvYmplY3QsIGlu
Zm8oKSk7CiAgICAgZm9yIChhdXRvJiBwcm9wZXJ0eU5hbWUgOiB0aGlzT2JqZWN0LT53cmFwcGVk
KCkuc3VwcG9ydGVkUHJvcGVydHlOYW1lcygpKQotICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKHN0YXRlLCBwcm9wZXJ0eU5hbWUpKTsKKyAgICAgICAgcHJv
cGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcHJvcGVydHlOYW1lKSk7
CiAgICAgSlNPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBzdGF0ZSwgcHJvcGVy
dHlOYW1lcywgbW9kZSk7CiB9CiAKQEAgLTIyNiwxMCArMjI4LDExIEBAIGJvb2wgSlNUZXN0TmFt
ZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3AKIAogYm9vbCBKU1Rlc3ROYW1lZFNldHRlcldpdGhV
bmZvcmdhYmxlUHJvcGVydGllc0FuZE92ZXJyaWRlQnVpbHRpbnM6OnB1dEJ5SW5kZXgoSlNDZWxs
KiBjZWxsLCBFeGVjU3RhdGUqIHN0YXRlLCB1bnNpZ25lZCBpbmRleCwgSlNWYWx1ZSB2YWx1ZSwg
Ym9vbCkKIHsKKyAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvKiB0aGlzT2JqZWN0
ID0ganNDYXN0PEpTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3Zl
cnJpZGVCdWlsdGlucyo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhp
c09iamVjdCwgaW5mbygpKTsKIAotICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6
ZnJvbShzdGF0ZSwgaW5kZXgpOworICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6
ZnJvbSh2bSwgaW5kZXgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUoc3RhdGUtPnZtKCkpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0
cmluZz4oKnN0YXRlLCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3Bl
LCB0cnVlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3ROb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb2RlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTE0LDcgKzExNCw3IEBAIHRlbXBsYXRlPD4gSlNWYWx1ZSBKU1Rlc3ROb2RlQ29u
c3RydWN0b3IKIHRlbXBsYXRlPD4gdm9pZCBKU1Rlc3ROb2RlQ29uc3RydWN0b3I6OmluaXRpYWxp
emVQcm9wZXJ0aWVzKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKIHsK
ICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgSlNUZXN0Tm9k
ZTo6cHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpE
b250RGVsZXRlIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3Bl
cnR5QXR0cmlidXRlOjpEb250RW51bSk7Ci0gICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5h
bWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcoJnZtLCBTdHJpbmcoIlRlc3ROb2RlIl9zKSks
IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0
ZTo6RG9udEVudW0pOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwg
anNOb250cml2aWFsU3RyaW5nKHZtLCBTdHJpbmcoIlRlc3ROb2RlIl9zKSksIEpTQzo6UHJvcGVy
dHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0p
OwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigw
KSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmli
dXRlOjpEb250RW51bSk7CiB9CiAKQEAgLTE1MCw0NSArMTUwLDQ1IEBAIHZvaWQgSlNUZXN0Tm9k
ZVByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24KICAgICBib29sIGhhc0Rpc2FibGVkUnVudGltZVBy
b3BlcnRpZXMgPSBmYWxzZTsKICAgICBpZiAoIWpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGds
b2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5pc1NlY3VyZUNvbnRleHQo
KSkgewogICAgICAgICBoYXNEaXNhYmxlZFJ1bnRpbWVQcm9wZXJ0aWVzID0gdHJ1ZTsKLSAgICAg
ICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgcmVpbnRl
cnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJjYWxjdWxhdGVTZWNyZXRSZXN1bHQiKSwgc3RybGVu
KCJjYWxjdWxhdGVTZWNyZXRSZXN1bHQiKSk7CisgICAgICAgIGF1dG8gcHJvcGVydHlOYW1lID0g
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+
KCJjYWxjdWxhdGVTZWNyZXRSZXN1bHQiKSwgc3RybGVuKCJjYWxjdWxhdGVTZWNyZXRSZXN1bHQi
KSk7CiAgICAgICAgIFZNOjpEZWxldGVQcm9wZXJ0eU1vZGVTY29wZSBzY29wZSh2bSwgVk06OkRl
bGV0ZVByb3BlcnR5TW9kZTo6SWdub3JlQ29uZmlndXJhYmxlKTsKICAgICAgICAgSlNPYmplY3Q6
OmRlbGV0ZVByb3BlcnR5KHRoaXMsIGdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCksIHByb3Bl
cnR5TmFtZSk7CiAgICAgfQogICAgIGlmICghanNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xv
YmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmlzU2VjdXJlQ29udGV4dCgp
KSB7CiAgICAgICAgIGhhc0Rpc2FibGVkUnVudGltZVByb3BlcnRpZXMgPSB0cnVlOwotICAgICAg
ICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCByZWludGVy
cHJldF9jYXN0PGNvbnN0IExDaGFyKj4oImdldFNlY3JldEJvb2xlYW4iKSwgc3RybGVuKCJnZXRT
ZWNyZXRCb29sZWFuIikpOworICAgICAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6
OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiZ2V0U2VjcmV0
Qm9vbGVhbiIpLCBzdHJsZW4oImdldFNlY3JldEJvb2xlYW4iKSk7CiAgICAgICAgIFZNOjpEZWxl
dGVQcm9wZXJ0eU1vZGVTY29wZSBzY29wZSh2bSwgVk06OkRlbGV0ZVByb3BlcnR5TW9kZTo6SWdu
b3JlQ29uZmlndXJhYmxlKTsKICAgICAgICAgSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KHRoaXMs
IGdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCksIHByb3BlcnR5TmFtZSk7CiAgICAgfQogI2lm
IEVOQUJMRShURVNUX0ZFQVRVUkUpCiAgICAgaWYgKCEoanNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0
Kj4oZ2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmlzU2VjdXJlQ29u
dGV4dCgpICYmIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkudGVzdEZl
YXR1cmVFbmFibGVkKCkpKSB7CiAgICAgICAgIGhhc0Rpc2FibGVkUnVudGltZVByb3BlcnRpZXMg
PSB0cnVlOwotICAgICAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb21TdHJp
bmcoJnZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oInRlc3RGZWF0dXJlR2V0U2Vj
cmV0Qm9vbGVhbiIpLCBzdHJsZW4oInRlc3RGZWF0dXJlR2V0U2VjcmV0Qm9vbGVhbiIpKTsKKyAg
ICAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWlu
dGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oInRlc3RGZWF0dXJlR2V0U2VjcmV0Qm9vbGVhbiIp
LCBzdHJsZW4oInRlc3RGZWF0dXJlR2V0U2VjcmV0Qm9vbGVhbiIpKTsKICAgICAgICAgVk06OkRl
bGV0ZVByb3BlcnR5TW9kZVNjb3BlIHNjb3BlKHZtLCBWTTo6RGVsZXRlUHJvcGVydHlNb2RlOjpJ
Z25vcmVDb25maWd1cmFibGUpOwogICAgICAgICBKU09iamVjdDo6ZGVsZXRlUHJvcGVydHkodGhp
cywgZ2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKSwgcHJvcGVydHlOYW1lKTsKICAgICB9CiAj
ZW5kaWYKICAgICBpZiAoIVJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCku
ZG9tSXRlcmF0b3JFbmFibGVkKCkpIHsKICAgICAgICAgaGFzRGlzYWJsZWRSdW50aW1lUHJvcGVy
dGllcyA9IHRydWU7Ci0gICAgICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJv
bVN0cmluZygmdm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiZW50cmllcyIpLCBz
dHJsZW4oImVudHJpZXMiKSk7CisgICAgICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmll
cjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJlbnRyaWVz
IiksIHN0cmxlbigiZW50cmllcyIpKTsKICAgICAgICAgVk06OkRlbGV0ZVByb3BlcnR5TW9kZVNj
b3BlIHNjb3BlKHZtLCBWTTo6RGVsZXRlUHJvcGVydHlNb2RlOjpJZ25vcmVDb25maWd1cmFibGUp
OwogICAgICAgICBKU09iamVjdDo6ZGVsZXRlUHJvcGVydHkodGhpcywgZ2xvYmFsT2JqZWN0KCkt
Pmdsb2JhbEV4ZWMoKSwgcHJvcGVydHlOYW1lKTsKICAgICB9CiAgICAgaWYgKCFSdW50aW1lRW5h
YmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLmRvbUl0ZXJhdG9yRW5hYmxlZCgpKSB7CiAg
ICAgICAgIGhhc0Rpc2FibGVkUnVudGltZVByb3BlcnRpZXMgPSB0cnVlOwotICAgICAgICBhdXRv
IHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCByZWludGVycHJldF9j
YXN0PGNvbnN0IExDaGFyKj4oImtleXMiKSwgc3RybGVuKCJrZXlzIikpOworICAgICAgICBhdXRv
IHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgTENoYXIqPigia2V5cyIpLCBzdHJsZW4oImtleXMiKSk7CiAgICAgICAgIFZNOjpE
ZWxldGVQcm9wZXJ0eU1vZGVTY29wZSBzY29wZSh2bSwgVk06OkRlbGV0ZVByb3BlcnR5TW9kZTo6
SWdub3JlQ29uZmlndXJhYmxlKTsKICAgICAgICAgSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KHRo
aXMsIGdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCksIHByb3BlcnR5TmFtZSk7CiAgICAgfQog
ICAgIGlmICghUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS5kb21JdGVy
YXRvckVuYWJsZWQoKSkgewogICAgICAgICBoYXNEaXNhYmxlZFJ1bnRpbWVQcm9wZXJ0aWVzID0g
dHJ1ZTsKLSAgICAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KCZ2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJ2YWx1ZXMiKSwgc3RybGVuKCJ2
YWx1ZXMiKSk7CisgICAgICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbVN0
cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJ2YWx1ZXMiKSwgc3RybGVu
KCJ2YWx1ZXMiKSk7CiAgICAgICAgIFZNOjpEZWxldGVQcm9wZXJ0eU1vZGVTY29wZSBzY29wZSh2
bSwgVk06OkRlbGV0ZVByb3BlcnR5TW9kZTo6SWdub3JlQ29uZmlndXJhYmxlKTsKICAgICAgICAg
SlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KHRoaXMsIGdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVj
KCksIHByb3BlcnR5TmFtZSk7CiAgICAgfQogICAgIGlmICghUnVudGltZUVuYWJsZWRGZWF0dXJl
czo6c2hhcmVkRmVhdHVyZXMoKS5kb21JdGVyYXRvckVuYWJsZWQoKSkgewogICAgICAgICBoYXNE
aXNhYmxlZFJ1bnRpbWVQcm9wZXJ0aWVzID0gdHJ1ZTsKLSAgICAgICAgYXV0byBwcm9wZXJ0eU5h
bWUgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBM
Q2hhcio+KCJmb3JFYWNoIiksIHN0cmxlbigiZm9yRWFjaCIpKTsKKyAgICAgICAgYXV0byBwcm9w
ZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNv
bnN0IExDaGFyKj4oImZvckVhY2giKSwgc3RybGVuKCJmb3JFYWNoIikpOwogICAgICAgICBWTTo6
RGVsZXRlUHJvcGVydHlNb2RlU2NvcGUgc2NvcGUodm0sIFZNOjpEZWxldGVQcm9wZXJ0eU1vZGU6
Oklnbm9yZUNvbmZpZ3VyYWJsZSk7CiAgICAgICAgIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eSh0
aGlzLCBnbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpLCBwcm9wZXJ0eU5hbWUpOwogICAgIH0K
QEAgLTI3NSw2ICsyNzUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROb2RlTmFtZShFeGVjU3Rh
dGUqCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3ROb2RlTmFtZVNldHRlcihFeGVjU3Rh
dGUmIHN0YXRlLCBKU1Rlc3ROb2RlJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKQogeworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQo
KTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KHN0YXRlLCB2
YWx1ZSk7CkBAIC00MDksNyArNDEwLDcgQEAgSlNDOjpKU09iamVjdCogSlNUZXN0Tm9kZTo6c2Vy
aWFsaXplKEV4ZQogCiAgICAgYXV0byBuYW1lVmFsdWUgPSBqc1Rlc3ROb2RlTmFtZUdldHRlcihz
dGF0ZSwgdGhpc09iamVjdCwgdGhyb3dTY29wZSk7CiAgICAgdGhyb3dTY29wZS5hc3NlcnROb0V4
Y2VwdGlvbigpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKCZ2bSwgIm5hbWUiKSwgbmFtZVZhbHVlKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIm5hbWUiKSwgbmFtZVZhbHVlKTsKIAogICAgIHJl
dHVybiByZXN1bHQ7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0T2JqLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQzNSw3ICs0MzUsNyBAQCB0ZW1wbGF0ZTw+IFRlc3RPYmo6OkRpY3Rpb25h
cnkgY29udmVydERpCiAgICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKQogICAgICAgICBhbm5vdGF0
ZWRUeXBlSW5TZXF1ZW5jZU1lbWJlclZhbHVlID0ganNVbmRlZmluZWQoKTsKICAgICBlbHNlIHsK
LSAgICAgICAgYW5ub3RhdGVkVHlwZUluU2VxdWVuY2VNZW1iZXJWYWx1ZSA9IG9iamVjdC0+Z2V0
KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJhbm5vdGF0ZWRUeXBlSW5T
ZXF1ZW5jZU1lbWJlciIpKTsKKyAgICAgICAgYW5ub3RhdGVkVHlwZUluU2VxdWVuY2VNZW1iZXJW
YWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImFu
bm90YXRlZFR5cGVJblNlcXVlbmNlTWVtYmVyIikpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgfQogICAgIGlmICghYW5ub3RhdGVkVHlwZUluU2Vx
dWVuY2VNZW1iZXJWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7CkBAIC00NDYsNyArNDQ2LDcgQEAgdGVt
cGxhdGU8PiBUZXN0T2JqOjpEaWN0aW9uYXJ5IGNvbnZlcnREaQogICAgIGlmIChpc051bGxPclVu
ZGVmaW5lZCkKICAgICAgICAgYW5ub3RhdGVkVHlwZUluVW5pb25NZW1iZXJWYWx1ZSA9IGpzVW5k
ZWZpbmVkKCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIGFubm90YXRlZFR5cGVJblVuaW9uTWVtYmVy
VmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRl
LCAiYW5ub3RhdGVkVHlwZUluVW5pb25NZW1iZXIiKSk7CisgICAgICAgIGFubm90YXRlZFR5cGVJ
blVuaW9uTWVtYmVyVmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21T
dHJpbmcodm0sICJhbm5vdGF0ZWRUeXBlSW5Vbmlvbk1lbWJlciIpKTsKICAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0KICAgICBpZiAoIWFubm90YXRl
ZFR5cGVJblVuaW9uTWVtYmVyVmFsdWUuaXNVbmRlZmluZWQoKSkgewpAQCAtNDU3LDcgKzQ1Nyw3
IEBAIHRlbXBsYXRlPD4gVGVzdE9iajo6RGljdGlvbmFyeSBjb252ZXJ0RGkKICAgICBpZiAoaXNO
dWxsT3JVbmRlZmluZWQpCiAgICAgICAgIGFueVR5cGVkZWZWYWx1ZVZhbHVlID0ganNVbmRlZmlu
ZWQoKTsKICAgICBlbHNlIHsKLSAgICAgICAgYW55VHlwZWRlZlZhbHVlVmFsdWUgPSBvYmplY3Qt
PmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAiYW55VHlwZWRlZlZh
bHVlIikpOworICAgICAgICBhbnlUeXBlZGVmVmFsdWVWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0
ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImFueVR5cGVkZWZWYWx1ZSIpKTsKICAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0KICAgICBpZiAo
IWFueVR5cGVkZWZWYWx1ZVZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKQEAgLTQ2OSw3ICs0NjksNyBA
QCB0ZW1wbGF0ZTw+IFRlc3RPYmo6OkRpY3Rpb25hcnkgY29udmVydERpCiAgICAgaWYgKGlzTnVs
bE9yVW5kZWZpbmVkKQogICAgICAgICBhbnlWYWx1ZVZhbHVlID0ganNVbmRlZmluZWQoKTsKICAg
ICBlbHNlIHsKLSAgICAgICAgYW55VmFsdWVWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJhbnlWYWx1ZSIpKTsKKyAgICAgICAgYW55VmFs
dWVWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwg
ImFueVZhbHVlIikpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsg
fSk7CiAgICAgfQogICAgIGlmICghYW55VmFsdWVWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7CkBAIC00
ODEsNyArNDgxLDcgQEAgdGVtcGxhdGU8PiBUZXN0T2JqOjpEaWN0aW9uYXJ5IGNvbnZlcnREaQog
ICAgIGlmIChpc051bGxPclVuZGVmaW5lZCkKICAgICAgICAgYW55VmFsdWVXaXRoTnVsbERlZmF1
bHRWYWx1ZSA9IGpzVW5kZWZpbmVkKCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIGFueVZhbHVlV2l0
aE51bGxEZWZhdWx0VmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21T
dHJpbmcoJnN0YXRlLCAiYW55VmFsdWVXaXRoTnVsbERlZmF1bHQiKSk7CisgICAgICAgIGFueVZh
bHVlV2l0aE51bGxEZWZhdWx0VmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6
OmZyb21TdHJpbmcodm0sICJhbnlWYWx1ZVdpdGhOdWxsRGVmYXVsdCIpKTsKICAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0KICAgICBpZiAoIWFueVZh
bHVlV2l0aE51bGxEZWZhdWx0VmFsdWUuaXNVbmRlZmluZWQoKSkgewpAQCAtNDkzLDcgKzQ5Myw3
IEBAIHRlbXBsYXRlPD4gVGVzdE9iajo6RGljdGlvbmFyeSBjb252ZXJ0RGkKICAgICBpZiAoaXNO
dWxsT3JVbmRlZmluZWQpCiAgICAgICAgIGJvb2xlYW5XaXRoRGVmYXVsdFZhbHVlID0ganNVbmRl
ZmluZWQoKTsKICAgICBlbHNlIHsKLSAgICAgICAgYm9vbGVhbldpdGhEZWZhdWx0VmFsdWUgPSBv
YmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAiYm9vbGVh
bldpdGhEZWZhdWx0IikpOworICAgICAgICBib29sZWFuV2l0aERlZmF1bHRWYWx1ZSA9IG9iamVj
dC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImJvb2xlYW5XaXRoRGVm
YXVsdCIpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwog
ICAgIH0KICAgICBpZiAoIWJvb2xlYW5XaXRoRGVmYXVsdFZhbHVlLmlzVW5kZWZpbmVkKCkpIHsK
QEAgLTUwNSw3ICs1MDUsNyBAQCB0ZW1wbGF0ZTw+IFRlc3RPYmo6OkRpY3Rpb25hcnkgY29udmVy
dERpCiAgICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKQogICAgICAgICBib29sZWFuV2l0aG91dERl
ZmF1bHRWYWx1ZSA9IGpzVW5kZWZpbmVkKCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIGJvb2xlYW5X
aXRob3V0RGVmYXVsdFZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKCZzdGF0ZSwgImJvb2xlYW5XaXRob3V0RGVmYXVsdCIpKTsKKyAgICAgICAgYm9vbGVh
bldpdGhvdXREZWZhdWx0VmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZy
b21TdHJpbmcodm0sICJib29sZWFuV2l0aG91dERlZmF1bHQiKSk7CiAgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICB9CiAgICAgaWYgKCFib29sZWFuV2l0
aG91dERlZmF1bHRWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7CkBAIC01MTYsNyArNTE2LDcgQEAgdGVt
cGxhdGU8PiBUZXN0T2JqOjpEaWN0aW9uYXJ5IGNvbnZlcnREaQogICAgIGlmIChpc051bGxPclVu
ZGVmaW5lZCkKICAgICAgICAgYnVmZmVyU291cmNlVmFsdWVWYWx1ZSA9IGpzVW5kZWZpbmVkKCk7
CiAgICAgZWxzZSB7Ci0gICAgICAgIGJ1ZmZlclNvdXJjZVZhbHVlVmFsdWUgPSBvYmplY3QtPmdl
dCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAiYnVmZmVyU291cmNlVmFs
dWUiKSk7CisgICAgICAgIGJ1ZmZlclNvdXJjZVZhbHVlVmFsdWUgPSBvYmplY3QtPmdldCgmc3Rh
dGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJidWZmZXJTb3VyY2VWYWx1ZSIpKTsKICAg
ICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0KICAgICBp
ZiAoIWJ1ZmZlclNvdXJjZVZhbHVlVmFsdWUuaXNVbmRlZmluZWQoKSkgewpAQCAtNTI3LDcgKzUy
Nyw3IEBAIHRlbXBsYXRlPD4gVGVzdE9iajo6RGljdGlvbmFyeSBjb252ZXJ0RGkKICAgICBpZiAo
aXNOdWxsT3JVbmRlZmluZWQpCiAgICAgICAgIGRpY3Rpb25hcnlNZW1iZXJWYWx1ZSA9IGpzVW5k
ZWZpbmVkKCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIGRpY3Rpb25hcnlNZW1iZXJWYWx1ZSA9IG9i
amVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJkaWN0aW9u
YXJ5TWVtYmVyIikpOworICAgICAgICBkaWN0aW9uYXJ5TWVtYmVyVmFsdWUgPSBvYmplY3QtPmdl
dCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJkaWN0aW9uYXJ5TWVtYmVyIikp
OwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgfQog
ICAgIGlmICghZGljdGlvbmFyeU1lbWJlclZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKQEAgLTUzOCw3
ICs1MzgsNyBAQCB0ZW1wbGF0ZTw+IFRlc3RPYmo6OkRpY3Rpb25hcnkgY29udmVydERpCiAgICAg
aWYgKGlzTnVsbE9yVW5kZWZpbmVkKQogICAgICAgICBlbnVtZXJhdGlvblZhbHVlV2l0aERlZmF1
bHRWYWx1ZSA9IGpzVW5kZWZpbmVkKCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIGVudW1lcmF0aW9u
VmFsdWVXaXRoRGVmYXVsdFZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKCZzdGF0ZSwgImVudW1lcmF0aW9uVmFsdWVXaXRoRGVmYXVsdCIpKTsKKyAgICAg
ICAgZW51bWVyYXRpb25WYWx1ZVdpdGhEZWZhdWx0VmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUs
IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJlbnVtZXJhdGlvblZhbHVlV2l0aERlZmF1bHQi
KSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICB9
CiAgICAgaWYgKCFlbnVtZXJhdGlvblZhbHVlV2l0aERlZmF1bHRWYWx1ZS5pc1VuZGVmaW5lZCgp
KSB7CkBAIC01NTAsNyArNTUwLDcgQEAgdGVtcGxhdGU8PiBUZXN0T2JqOjpEaWN0aW9uYXJ5IGNv
bnZlcnREaQogICAgIGlmIChpc051bGxPclVuZGVmaW5lZCkKICAgICAgICAgZW51bWVyYXRpb25W
YWx1ZVdpdGhFbXB0eVN0cmluZ0RlZmF1bHRWYWx1ZSA9IGpzVW5kZWZpbmVkKCk7CiAgICAgZWxz
ZSB7Ci0gICAgICAgIGVudW1lcmF0aW9uVmFsdWVXaXRoRW1wdHlTdHJpbmdEZWZhdWx0VmFsdWUg
PSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAiZW51
bWVyYXRpb25WYWx1ZVdpdGhFbXB0eVN0cmluZ0RlZmF1bHQiKSk7CisgICAgICAgIGVudW1lcmF0
aW9uVmFsdWVXaXRoRW1wdHlTdHJpbmdEZWZhdWx0VmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUs
IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJlbnVtZXJhdGlvblZhbHVlV2l0aEVtcHR5U3Ry
aW5nRGVmYXVsdCIpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7
IH0pOwogICAgIH0KICAgICBpZiAoIWVudW1lcmF0aW9uVmFsdWVXaXRoRW1wdHlTdHJpbmdEZWZh
dWx0VmFsdWUuaXNVbmRlZmluZWQoKSkgewpAQCAtNTYyLDcgKzU2Miw3IEBAIHRlbXBsYXRlPD4g
VGVzdE9iajo6RGljdGlvbmFyeSBjb252ZXJ0RGkKICAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQp
CiAgICAgICAgIGVudW1lcmF0aW9uVmFsdWVXaXRob3V0RGVmYXVsdFZhbHVlID0ganNVbmRlZmlu
ZWQoKTsKICAgICBlbHNlIHsKLSAgICAgICAgZW51bWVyYXRpb25WYWx1ZVdpdGhvdXREZWZhdWx0
VmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRl
LCAiZW51bWVyYXRpb25WYWx1ZVdpdGhvdXREZWZhdWx0IikpOworICAgICAgICBlbnVtZXJhdGlv
blZhbHVlV2l0aG91dERlZmF1bHRWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZyh2bSwgImVudW1lcmF0aW9uVmFsdWVXaXRob3V0RGVmYXVsdCIpKTsKICAg
ICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0KICAgICBp
ZiAoIWVudW1lcmF0aW9uVmFsdWVXaXRob3V0RGVmYXVsdFZhbHVlLmlzVW5kZWZpbmVkKCkpIHsK
QEAgLTU3Myw3ICs1NzMsNyBAQCB0ZW1wbGF0ZTw+IFRlc3RPYmo6OkRpY3Rpb25hcnkgY29udmVy
dERpCiAgICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKQogICAgICAgICBmb29BbGlhc1ZhbHVlID0g
anNVbmRlZmluZWQoKTsKICAgICBlbHNlIHsKLSAgICAgICAgZm9vQWxpYXNWYWx1ZSA9IG9iamVj
dC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJmb29BbGlhcyIp
KTsKKyAgICAgICAgZm9vQWxpYXNWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZyh2bSwgImZvb0FsaWFzIikpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgfQogICAgIGlmICghZm9vQWxpYXNWYWx1ZS5pc1Vu
ZGVmaW5lZCgpKSB7CkBAIC01ODUsNyArNTg1LDcgQEAgdGVtcGxhdGU8PiBUZXN0T2JqOjpEaWN0
aW9uYXJ5IGNvbnZlcnREaQogICAgIGlmIChpc051bGxPclVuZGVmaW5lZCkKICAgICAgICAgZm9v
V2l0aERlZmF1bHRBbGlhc1ZhbHVlID0ganNVbmRlZmluZWQoKTsKICAgICBlbHNlIHsKLSAgICAg
ICAgZm9vV2l0aERlZmF1bHRBbGlhc1ZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImZvb1dpdGhEZWZhdWx0QWxpYXMiKSk7CisgICAgICAg
IGZvb1dpdGhEZWZhdWx0QWxpYXNWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZyh2bSwgImZvb1dpdGhEZWZhdWx0QWxpYXMiKSk7CiAgICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICB9CiAgICAgaWYgKCFmb29XaXRo
RGVmYXVsdEFsaWFzVmFsdWUuaXNVbmRlZmluZWQoKSkgewpAQCAtNTk3LDcgKzU5Nyw3IEBAIHRl
bXBsYXRlPD4gVGVzdE9iajo6RGljdGlvbmFyeSBjb252ZXJ0RGkKICAgICBpZiAoaXNOdWxsT3JV
bmRlZmluZWQpCiAgICAgICAgIGludGVnZXJWYWx1ZSA9IGpzVW5kZWZpbmVkKCk7CiAgICAgZWxz
ZSB7Ci0gICAgICAgIGludGVnZXJWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZygmc3RhdGUsICJpbnRlZ2VyIikpOworICAgICAgICBpbnRlZ2VyVmFsdWUg
PSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJpbnRlZ2Vy
IikpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAg
fQogICAgIGlmICghaW50ZWdlclZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKQEAgLTYwOCw3ICs2MDgs
NyBAQCB0ZW1wbGF0ZTw+IFRlc3RPYmo6OkRpY3Rpb25hcnkgY29udmVydERpCiAgICAgaWYgKGlz
TnVsbE9yVW5kZWZpbmVkKQogICAgICAgICBpbnRlZ2VyV2l0aERlZmF1bHRWYWx1ZSA9IGpzVW5k
ZWZpbmVkKCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIGludGVnZXJXaXRoRGVmYXVsdFZhbHVlID0g
b2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImludGVn
ZXJXaXRoRGVmYXVsdCIpKTsKKyAgICAgICAgaW50ZWdlcldpdGhEZWZhdWx0VmFsdWUgPSBvYmpl
Y3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJpbnRlZ2VyV2l0aERl
ZmF1bHQiKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsK
ICAgICB9CiAgICAgaWYgKCFpbnRlZ2VyV2l0aERlZmF1bHRWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7
CkBAIC02MjAsNyArNjIwLDcgQEAgdGVtcGxhdGU8PiBUZXN0T2JqOjpEaWN0aW9uYXJ5IGNvbnZl
cnREaQogICAgIGlmIChpc051bGxPclVuZGVmaW5lZCkKICAgICAgICAgbGFyZ2VJbnRlZ2VyVmFs
dWUgPSBqc1VuZGVmaW5lZCgpOwogICAgIGVsc2UgewotICAgICAgICBsYXJnZUludGVnZXJWYWx1
ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJs
YXJnZUludGVnZXIiKSk7CisgICAgICAgIGxhcmdlSW50ZWdlclZhbHVlID0gb2JqZWN0LT5nZXQo
JnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAibGFyZ2VJbnRlZ2VyIikpOwogICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgfQogICAgIGlm
ICghbGFyZ2VJbnRlZ2VyVmFsdWUuaXNVbmRlZmluZWQoKSkgewpAQCAtNjMxLDcgKzYzMSw3IEBA
IHRlbXBsYXRlPD4gVGVzdE9iajo6RGljdGlvbmFyeSBjb252ZXJ0RGkKICAgICBpZiAoaXNOdWxs
T3JVbmRlZmluZWQpCiAgICAgICAgIGxhcmdlSW50ZWdlcldpdGhEZWZhdWx0VmFsdWUgPSBqc1Vu
ZGVmaW5lZCgpOwogICAgIGVsc2UgewotICAgICAgICBsYXJnZUludGVnZXJXaXRoRGVmYXVsdFZh
bHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwg
ImxhcmdlSW50ZWdlcldpdGhEZWZhdWx0IikpOworICAgICAgICBsYXJnZUludGVnZXJXaXRoRGVm
YXVsdFZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZt
LCAibGFyZ2VJbnRlZ2VyV2l0aERlZmF1bHQiKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04odGhyb3dTY29wZSwgeyB9KTsKICAgICB9CiAgICAgaWYgKCFsYXJnZUludGVnZXJXaXRoRGVm
YXVsdFZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKQEAgLTY0Myw3ICs2NDMsNyBAQCB0ZW1wbGF0ZTw+
IFRlc3RPYmo6OkRpY3Rpb25hcnkgY29udmVydERpCiAgICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVk
KQogICAgICAgICBudWxsYWJsZUVudW1WYWx1ZSA9IGpzVW5kZWZpbmVkKCk7CiAgICAgZWxzZSB7
Ci0gICAgICAgIG51bGxhYmxlRW51bVZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgIm51bGxhYmxlRW51bSIpKTsKKyAgICAgICAgbnVsbGFi
bGVFbnVtVmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmco
dm0sICJudWxsYWJsZUVudW0iKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dT
Y29wZSwgeyB9KTsKICAgICB9CiAgICAgaWYgKCFudWxsYWJsZUVudW1WYWx1ZS5pc1VuZGVmaW5l
ZCgpKSB7CkBAIC02NTUsNyArNjU1LDcgQEAgdGVtcGxhdGU8PiBUZXN0T2JqOjpEaWN0aW9uYXJ5
IGNvbnZlcnREaQogICAgIGlmIChpc051bGxPclVuZGVmaW5lZCkKICAgICAgICAgbnVsbGFibGVJ
bnRlZ2VyV2l0aERlZmF1bHRWYWx1ZSA9IGpzVW5kZWZpbmVkKCk7CiAgICAgZWxzZSB7Ci0gICAg
ICAgIG51bGxhYmxlSW50ZWdlcldpdGhEZWZhdWx0VmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUs
IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAibnVsbGFibGVJbnRlZ2VyV2l0aERlZmF1
bHQiKSk7CisgICAgICAgIG51bGxhYmxlSW50ZWdlcldpdGhEZWZhdWx0VmFsdWUgPSBvYmplY3Qt
PmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJudWxsYWJsZUludGVnZXJX
aXRoRGVmYXVsdCIpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7
IH0pOwogICAgIH0KICAgICBpZiAoIW51bGxhYmxlSW50ZWdlcldpdGhEZWZhdWx0VmFsdWUuaXNV
bmRlZmluZWQoKSkgewpAQCAtNjY3LDcgKzY2Nyw3IEBAIHRlbXBsYXRlPD4gVGVzdE9iajo6RGlj
dGlvbmFyeSBjb252ZXJ0RGkKICAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQpCiAgICAgICAgIG51
bGxhYmxlTm9kZVZhbHVlID0ganNVbmRlZmluZWQoKTsKICAgICBlbHNlIHsKLSAgICAgICAgbnVs
bGFibGVOb2RlVmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJp
bmcoJnN0YXRlLCAibnVsbGFibGVOb2RlIikpOworICAgICAgICBudWxsYWJsZU5vZGVWYWx1ZSA9
IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIm51bGxhYmxl
Tm9kZSIpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwog
ICAgIH0KICAgICBpZiAoIW51bGxhYmxlTm9kZVZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKQEAgLTY3
OSw3ICs2NzksNyBAQCB0ZW1wbGF0ZTw+IFRlc3RPYmo6OkRpY3Rpb25hcnkgY29udmVydERpCiAg
ICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKQogICAgICAgICBudWxsYWJsZVN0cmluZ1dpdGhEZWZh
dWx0VmFsdWUgPSBqc1VuZGVmaW5lZCgpOwogICAgIGVsc2UgewotICAgICAgICBudWxsYWJsZVN0
cmluZ1dpdGhEZWZhdWx0VmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZy
b21TdHJpbmcoJnN0YXRlLCAibnVsbGFibGVTdHJpbmdXaXRoRGVmYXVsdCIpKTsKKyAgICAgICAg
bnVsbGFibGVTdHJpbmdXaXRoRGVmYXVsdFZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAibnVsbGFibGVTdHJpbmdXaXRoRGVmYXVsdCIpKTsKICAg
ICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0KICAgICBp
ZiAoIW51bGxhYmxlU3RyaW5nV2l0aERlZmF1bHRWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7CkBAIC02
OTEsNyArNjkxLDcgQEAgdGVtcGxhdGU8PiBUZXN0T2JqOjpEaWN0aW9uYXJ5IGNvbnZlcnREaQog
ICAgIGlmIChpc051bGxPclVuZGVmaW5lZCkKICAgICAgICAgbnVsbGFibGVVbmlvbk1lbWJlclZh
bHVlID0ganNVbmRlZmluZWQoKTsKICAgICBlbHNlIHsKLSAgICAgICAgbnVsbGFibGVVbmlvbk1l
bWJlclZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZz
dGF0ZSwgIm51bGxhYmxlVW5pb25NZW1iZXIiKSk7CisgICAgICAgIG51bGxhYmxlVW5pb25NZW1i
ZXJWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwg
Im51bGxhYmxlVW5pb25NZW1iZXIiKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgeyB9KTsKICAgICB9CiAgICAgaWYgKCFudWxsYWJsZVVuaW9uTWVtYmVyVmFsdWUu
aXNVbmRlZmluZWQoKSkgewpAQCAtNzAzLDcgKzcwMyw3IEBAIHRlbXBsYXRlPD4gVGVzdE9iajo6
RGljdGlvbmFyeSBjb252ZXJ0RGkKICAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQpCiAgICAgICAg
IHJlcXVpcmVkQnVmZmVyU291cmNlVmFsdWVWYWx1ZSA9IGpzVW5kZWZpbmVkKCk7CiAgICAgZWxz
ZSB7Ci0gICAgICAgIHJlcXVpcmVkQnVmZmVyU291cmNlVmFsdWVWYWx1ZSA9IG9iamVjdC0+Z2V0
KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJyZXF1aXJlZEJ1ZmZlclNv
dXJjZVZhbHVlIikpOworICAgICAgICByZXF1aXJlZEJ1ZmZlclNvdXJjZVZhbHVlVmFsdWUgPSBv
YmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJyZXF1aXJlZEJ1
ZmZlclNvdXJjZVZhbHVlIikpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2Nv
cGUsIHsgfSk7CiAgICAgfQogICAgIGlmICghcmVxdWlyZWRCdWZmZXJTb3VyY2VWYWx1ZVZhbHVl
LmlzVW5kZWZpbmVkKCkpIHsKQEAgLTcxNyw3ICs3MTcsNyBAQCB0ZW1wbGF0ZTw+IFRlc3RPYmo6
OkRpY3Rpb25hcnkgY29udmVydERpCiAgICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKQogICAgICAg
ICByZXN0cmljdGVkRG91YmxlVmFsdWUgPSBqc1VuZGVmaW5lZCgpOwogICAgIGVsc2UgewotICAg
ICAgICByZXN0cmljdGVkRG91YmxlVmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAicmVzdHJpY3RlZERvdWJsZSIpKTsKKyAgICAgICAgcmVz
dHJpY3RlZERvdWJsZVZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKHZtLCAicmVzdHJpY3RlZERvdWJsZSIpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0KICAgICBpZiAoIXJlc3RyaWN0ZWREb3VibGVW
YWx1ZS5pc1VuZGVmaW5lZCgpKSB7CkBAIC03MjgsNyArNzI4LDcgQEAgdGVtcGxhdGU8PiBUZXN0
T2JqOjpEaWN0aW9uYXJ5IGNvbnZlcnREaQogICAgIGlmIChpc051bGxPclVuZGVmaW5lZCkKICAg
ICAgICAgcmVzdHJpY3RlZERvdWJsZVdpdGhEZWZhdWx0VmFsdWUgPSBqc1VuZGVmaW5lZCgpOwog
ICAgIGVsc2UgewotICAgICAgICByZXN0cmljdGVkRG91YmxlV2l0aERlZmF1bHRWYWx1ZSA9IG9i
amVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJyZXN0cmlj
dGVkRG91YmxlV2l0aERlZmF1bHQiKSk7CisgICAgICAgIHJlc3RyaWN0ZWREb3VibGVXaXRoRGVm
YXVsdFZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZt
LCAicmVzdHJpY3RlZERvdWJsZVdpdGhEZWZhdWx0IikpOwogICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgfQogICAgIGlmICghcmVzdHJpY3RlZERvdWJs
ZVdpdGhEZWZhdWx0VmFsdWUuaXNVbmRlZmluZWQoKSkgewpAQCAtNzQwLDcgKzc0MCw3IEBAIHRl
bXBsYXRlPD4gVGVzdE9iajo6RGljdGlvbmFyeSBjb252ZXJ0RGkKICAgICBpZiAoaXNOdWxsT3JV
bmRlZmluZWQpCiAgICAgICAgIHJlc3RyaWN0ZWRGbG9hdFZhbHVlID0ganNVbmRlZmluZWQoKTsK
ICAgICBlbHNlIHsKLSAgICAgICAgcmVzdHJpY3RlZEZsb2F0VmFsdWUgPSBvYmplY3QtPmdldCgm
c3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAicmVzdHJpY3RlZEZsb2F0Iikp
OworICAgICAgICByZXN0cmljdGVkRmxvYXRWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInJlc3RyaWN0ZWRGbG9hdCIpKTsKICAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0KICAgICBpZiAoIXJlc3Ry
aWN0ZWRGbG9hdFZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKQEAgLTc1MSw3ICs3NTEsNyBAQCB0ZW1w
bGF0ZTw+IFRlc3RPYmo6OkRpY3Rpb25hcnkgY29udmVydERpCiAgICAgaWYgKGlzTnVsbE9yVW5k
ZWZpbmVkKQogICAgICAgICByZXN0cmljdGVkRmxvYXRXaXRoRGVmYXVsdFZhbHVlID0ganNVbmRl
ZmluZWQoKTsKICAgICBlbHNlIHsKLSAgICAgICAgcmVzdHJpY3RlZEZsb2F0V2l0aERlZmF1bHRW
YWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUs
ICJyZXN0cmljdGVkRmxvYXRXaXRoRGVmYXVsdCIpKTsKKyAgICAgICAgcmVzdHJpY3RlZEZsb2F0
V2l0aERlZmF1bHRWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZyh2bSwgInJlc3RyaWN0ZWRGbG9hdFdpdGhEZWZhdWx0IikpOwogICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgfQogICAgIGlmICghcmVzdHJpY3Rl
ZEZsb2F0V2l0aERlZmF1bHRWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7CkBAIC03NjMsNyArNzYzLDcg
QEAgdGVtcGxhdGU8PiBUZXN0T2JqOjpEaWN0aW9uYXJ5IGNvbnZlcnREaQogICAgIGlmIChpc051
bGxPclVuZGVmaW5lZCkKICAgICAgICAgc2VxdWVuY2VPZlN0cmluZ3NWYWx1ZSA9IGpzVW5kZWZp
bmVkKCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIHNlcXVlbmNlT2ZTdHJpbmdzVmFsdWUgPSBvYmpl
Y3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAic2VxdWVuY2VP
ZlN0cmluZ3MiKSk7CisgICAgICAgIHNlcXVlbmNlT2ZTdHJpbmdzVmFsdWUgPSBvYmplY3QtPmdl
dCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJzZXF1ZW5jZU9mU3RyaW5ncyIp
KTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0K
ICAgICBpZiAoIXNlcXVlbmNlT2ZTdHJpbmdzVmFsdWUuaXNVbmRlZmluZWQoKSkgewpAQCAtNzc0
LDcgKzc3NCw3IEBAIHRlbXBsYXRlPD4gVGVzdE9iajo6RGljdGlvbmFyeSBjb252ZXJ0RGkKICAg
ICBpZiAoaXNOdWxsT3JVbmRlZmluZWQpCiAgICAgICAgIHNtYWxsSW50ZWdlckNsYW1wZWRWYWx1
ZSA9IGpzVW5kZWZpbmVkKCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIHNtYWxsSW50ZWdlckNsYW1w
ZWRWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3Rh
dGUsICJzbWFsbEludGVnZXJDbGFtcGVkIikpOworICAgICAgICBzbWFsbEludGVnZXJDbGFtcGVk
VmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJz
bWFsbEludGVnZXJDbGFtcGVkIikpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIHsgfSk7CiAgICAgfQogICAgIGlmICghc21hbGxJbnRlZ2VyQ2xhbXBlZFZhbHVlLmlz
VW5kZWZpbmVkKCkpIHsKQEAgLTc4NSw3ICs3ODUsNyBAQCB0ZW1wbGF0ZTw+IFRlc3RPYmo6OkRp
Y3Rpb25hcnkgY29udmVydERpCiAgICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKQogICAgICAgICBz
bWFsbEludGVnZXJXaXRoRGVmYXVsdFZhbHVlID0ganNVbmRlZmluZWQoKTsKICAgICBlbHNlIHsK
LSAgICAgICAgc21hbGxJbnRlZ2VyV2l0aERlZmF1bHRWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0
ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJzbWFsbEludGVnZXJXaXRoRGVmYXVs
dCIpKTsKKyAgICAgICAgc21hbGxJbnRlZ2VyV2l0aERlZmF1bHRWYWx1ZSA9IG9iamVjdC0+Z2V0
KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInNtYWxsSW50ZWdlcldpdGhEZWZh
dWx0IikpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAg
ICAgfQogICAgIGlmICghc21hbGxJbnRlZ2VyV2l0aERlZmF1bHRWYWx1ZS5pc1VuZGVmaW5lZCgp
KSB7CkBAIC03OTYsNyArNzk2LDcgQEAgdGVtcGxhdGU8PiBUZXN0T2JqOjpEaWN0aW9uYXJ5IGNv
bnZlcnREaQogICAgIGlmIChpc051bGxPclVuZGVmaW5lZCkKICAgICAgICAgc21hbGxVbnNpZ25l
ZEludGVnZXJFbmZvcmNlZFJhbmdlVmFsdWUgPSBqc1VuZGVmaW5lZCgpOwogICAgIGVsc2Ugewot
ICAgICAgICBzbWFsbFVuc2lnbmVkSW50ZWdlckVuZm9yY2VkUmFuZ2VWYWx1ZSA9IG9iamVjdC0+
Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJzbWFsbFVuc2lnbmVk
SW50ZWdlckVuZm9yY2VkUmFuZ2UiKSk7CisgICAgICAgIHNtYWxsVW5zaWduZWRJbnRlZ2VyRW5m
b3JjZWRSYW5nZVZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKHZtLCAic21hbGxVbnNpZ25lZEludGVnZXJFbmZvcmNlZFJhbmdlIikpOwogICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgfQogICAgIGlmICghc21h
bGxVbnNpZ25lZEludGVnZXJFbmZvcmNlZFJhbmdlVmFsdWUuaXNVbmRlZmluZWQoKSkgewpAQCAt
ODA3LDcgKzgwNyw3IEBAIHRlbXBsYXRlPD4gVGVzdE9iajo6RGljdGlvbmFyeSBjb252ZXJ0RGkK
ICAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQpCiAgICAgICAgIHNtYWxsVW5zaWduZWRJbnRlZ2Vy
V2l0aERlZmF1bHRWYWx1ZSA9IGpzVW5kZWZpbmVkKCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIHNt
YWxsVW5zaWduZWRJbnRlZ2VyV2l0aERlZmF1bHRWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJzbWFsbFVuc2lnbmVkSW50ZWdlcldpdGhE
ZWZhdWx0IikpOworICAgICAgICBzbWFsbFVuc2lnbmVkSW50ZWdlcldpdGhEZWZhdWx0VmFsdWUg
PSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJzbWFsbFVu
c2lnbmVkSW50ZWdlcldpdGhEZWZhdWx0IikpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHRocm93U2NvcGUsIHsgfSk7CiAgICAgfQogICAgIGlmICghc21hbGxVbnNpZ25lZEludGVnZXJX
aXRoRGVmYXVsdFZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKQEAgLTgxOSw3ICs4MTksNyBAQCB0ZW1w
bGF0ZTw+IFRlc3RPYmo6OkRpY3Rpb25hcnkgY29udmVydERpCiAgICAgaWYgKGlzTnVsbE9yVW5k
ZWZpbmVkKQogICAgICAgICBzdHJpbmdUcmVhdE51bGxBc0VtcHR5U3RyaW5nVmFsdWUgPSBqc1Vu
ZGVmaW5lZCgpOwogICAgIGVsc2UgewotICAgICAgICBzdHJpbmdUcmVhdE51bGxBc0VtcHR5U3Ry
aW5nVmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0
YXRlLCAic3RyaW5nVHJlYXROdWxsQXNFbXB0eVN0cmluZyIpKTsKKyAgICAgICAgc3RyaW5nVHJl
YXROdWxsQXNFbXB0eVN0cmluZ1ZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKHZtLCAic3RyaW5nVHJlYXROdWxsQXNFbXB0eVN0cmluZyIpKTsKICAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0KICAgICBpZiAo
IXN0cmluZ1RyZWF0TnVsbEFzRW1wdHlTdHJpbmdWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7CkBAIC04
MzAsNyArODMwLDcgQEAgdGVtcGxhdGU8PiBUZXN0T2JqOjpEaWN0aW9uYXJ5IGNvbnZlcnREaQog
ICAgIGlmIChpc051bGxPclVuZGVmaW5lZCkKICAgICAgICAgc3RyaW5nV2l0aERlZmF1bHRWYWx1
ZSA9IGpzVW5kZWZpbmVkKCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIHN0cmluZ1dpdGhEZWZhdWx0
VmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRl
LCAic3RyaW5nV2l0aERlZmF1bHQiKSk7CisgICAgICAgIHN0cmluZ1dpdGhEZWZhdWx0VmFsdWUg
PSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJzdHJpbmdX
aXRoRGVmYXVsdCIpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7
IH0pOwogICAgIH0KICAgICBpZiAoIXN0cmluZ1dpdGhEZWZhdWx0VmFsdWUuaXNVbmRlZmluZWQo
KSkgewpAQCAtODQyLDcgKzg0Miw3IEBAIHRlbXBsYXRlPD4gVGVzdE9iajo6RGljdGlvbmFyeSBj
b252ZXJ0RGkKICAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQpCiAgICAgICAgIHN0cmluZ1dpdGhv
dXREZWZhdWx0VmFsdWUgPSBqc1VuZGVmaW5lZCgpOwogICAgIGVsc2UgewotICAgICAgICBzdHJp
bmdXaXRob3V0RGVmYXVsdFZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKCZzdGF0ZSwgInN0cmluZ1dpdGhvdXREZWZhdWx0IikpOworICAgICAgICBzdHJp
bmdXaXRob3V0RGVmYXVsdFZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCAic3RyaW5nV2l0aG91dERlZmF1bHQiKSk7CiAgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICB9CiAgICAgaWYgKCFzdHJpbmdXaXRo
b3V0RGVmYXVsdFZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKQEAgLTg1Myw3ICs4NTMsNyBAQCB0ZW1w
bGF0ZTw+IFRlc3RPYmo6OkRpY3Rpb25hcnkgY29udmVydERpCiAgICAgaWYgKGlzTnVsbE9yVW5k
ZWZpbmVkKQogICAgICAgICB1bmlvbk1lbWJlclZhbHVlID0ganNVbmRlZmluZWQoKTsKICAgICBl
bHNlIHsKLSAgICAgICAgdW5pb25NZW1iZXJWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJ1bmlvbk1lbWJlciIpKTsKKyAgICAgICAgdW5p
b25NZW1iZXJWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zyh2bSwgInVuaW9uTWVtYmVyIikpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIHsgfSk7CiAgICAgfQogICAgIGlmICghdW5pb25NZW1iZXJWYWx1ZS5pc1VuZGVmaW5l
ZCgpKSB7CkBAIC04NjQsNyArODY0LDcgQEAgdGVtcGxhdGU8PiBUZXN0T2JqOjpEaWN0aW9uYXJ5
IGNvbnZlcnREaQogICAgIGlmIChpc051bGxPclVuZGVmaW5lZCkKICAgICAgICAgdW5yZXN0cmlj
dGVkRG91YmxlVmFsdWUgPSBqc1VuZGVmaW5lZCgpOwogICAgIGVsc2UgewotICAgICAgICB1bnJl
c3RyaWN0ZWREb3VibGVWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZygmc3RhdGUsICJ1bnJlc3RyaWN0ZWREb3VibGUiKSk7CisgICAgICAgIHVucmVzdHJp
Y3RlZERvdWJsZVZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKHZtLCAidW5yZXN0cmljdGVkRG91YmxlIikpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgfQogICAgIGlmICghdW5yZXN0cmljdGVkRG91Ymxl
VmFsdWUuaXNVbmRlZmluZWQoKSkgewpAQCAtODc1LDcgKzg3NSw3IEBAIHRlbXBsYXRlPD4gVGVz
dE9iajo6RGljdGlvbmFyeSBjb252ZXJ0RGkKICAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQpCiAg
ICAgICAgIHVucmVzdHJpY3RlZERvdWJsZVdpdGhEZWZhdWx0VmFsdWUgPSBqc1VuZGVmaW5lZCgp
OwogICAgIGVsc2UgewotICAgICAgICB1bnJlc3RyaWN0ZWREb3VibGVXaXRoRGVmYXVsdFZhbHVl
ID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgInVu
cmVzdHJpY3RlZERvdWJsZVdpdGhEZWZhdWx0IikpOworICAgICAgICB1bnJlc3RyaWN0ZWREb3Vi
bGVXaXRoRGVmYXVsdFZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKHZtLCAidW5yZXN0cmljdGVkRG91YmxlV2l0aERlZmF1bHQiKSk7CiAgICAgICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICB9CiAgICAgaWYgKCF1bnJl
c3RyaWN0ZWREb3VibGVXaXRoRGVmYXVsdFZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKQEAgLTg4Nyw3
ICs4ODcsNyBAQCB0ZW1wbGF0ZTw+IFRlc3RPYmo6OkRpY3Rpb25hcnkgY29udmVydERpCiAgICAg
aWYgKGlzTnVsbE9yVW5kZWZpbmVkKQogICAgICAgICB1bnJlc3RyaWN0ZWRGbG9hdFZhbHVlID0g
anNVbmRlZmluZWQoKTsKICAgICBlbHNlIHsKLSAgICAgICAgdW5yZXN0cmljdGVkRmxvYXRWYWx1
ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJ1
bnJlc3RyaWN0ZWRGbG9hdCIpKTsKKyAgICAgICAgdW5yZXN0cmljdGVkRmxvYXRWYWx1ZSA9IG9i
amVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInVucmVzdHJpY3Rl
ZEZsb2F0IikpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7
CiAgICAgfQogICAgIGlmICghdW5yZXN0cmljdGVkRmxvYXRWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7
CkBAIC04OTgsNyArODk4LDcgQEAgdGVtcGxhdGU8PiBUZXN0T2JqOjpEaWN0aW9uYXJ5IGNvbnZl
cnREaQogICAgIGlmIChpc051bGxPclVuZGVmaW5lZCkKICAgICAgICAgdW5yZXN0cmljdGVkRmxv
YXRXaXRoRGVmYXVsdFZhbHVlID0ganNVbmRlZmluZWQoKTsKICAgICBlbHNlIHsKLSAgICAgICAg
dW5yZXN0cmljdGVkRmxvYXRXaXRoRGVmYXVsdFZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgInVucmVzdHJpY3RlZEZsb2F0V2l0aERlZmF1
bHQiKSk7CisgICAgICAgIHVucmVzdHJpY3RlZEZsb2F0V2l0aERlZmF1bHRWYWx1ZSA9IG9iamVj
dC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInVucmVzdHJpY3RlZEZs
b2F0V2l0aERlZmF1bHQiKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29w
ZSwgeyB9KTsKICAgICB9CiAgICAgaWYgKCF1bnJlc3RyaWN0ZWRGbG9hdFdpdGhEZWZhdWx0VmFs
dWUuaXNVbmRlZmluZWQoKSkgewpAQCAtOTEwLDcgKzkxMCw3IEBAIHRlbXBsYXRlPD4gVGVzdE9i
ajo6RGljdGlvbmFyeSBjb252ZXJ0RGkKICAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQpCiAgICAg
ICAgIHVuc2lnbmVkSW50ZWdlclZhbHVlID0ganNVbmRlZmluZWQoKTsKICAgICBlbHNlIHsKLSAg
ICAgICAgdW5zaWduZWRJbnRlZ2VyVmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAidW5zaWduZWRJbnRlZ2VyIikpOworICAgICAgICB1bnNp
Z25lZEludGVnZXJWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZyh2bSwgInVuc2lnbmVkSW50ZWdlciIpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0KICAgICBpZiAoIXVuc2lnbmVkSW50ZWdlclZhbHVl
LmlzVW5kZWZpbmVkKCkpIHsKQEAgLTkyMSw3ICs5MjEsNyBAQCB0ZW1wbGF0ZTw+IFRlc3RPYmo6
OkRpY3Rpb25hcnkgY29udmVydERpCiAgICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKQogICAgICAg
ICB1bnNpZ25lZEludGVnZXJXaXRoRGVmYXVsdFZhbHVlID0ganNVbmRlZmluZWQoKTsKICAgICBl
bHNlIHsKLSAgICAgICAgdW5zaWduZWRJbnRlZ2VyV2l0aERlZmF1bHRWYWx1ZSA9IG9iamVjdC0+
Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJ1bnNpZ25lZEludGVn
ZXJXaXRoRGVmYXVsdCIpKTsKKyAgICAgICAgdW5zaWduZWRJbnRlZ2VyV2l0aERlZmF1bHRWYWx1
ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInVuc2ln
bmVkSW50ZWdlcldpdGhEZWZhdWx0IikpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIHsgfSk7CiAgICAgfQogICAgIGlmICghdW5zaWduZWRJbnRlZ2VyV2l0aERlZmF1
bHRWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7CkBAIC05MzMsNyArOTMzLDcgQEAgdGVtcGxhdGU8PiBU
ZXN0T2JqOjpEaWN0aW9uYXJ5IGNvbnZlcnREaQogICAgIGlmIChpc051bGxPclVuZGVmaW5lZCkK
ICAgICAgICAgdW5zaWduZWRMYXJnZUludGVnZXJWYWx1ZSA9IGpzVW5kZWZpbmVkKCk7CiAgICAg
ZWxzZSB7Ci0gICAgICAgIHVuc2lnbmVkTGFyZ2VJbnRlZ2VyVmFsdWUgPSBvYmplY3QtPmdldCgm
c3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAidW5zaWduZWRMYXJnZUludGVn
ZXIiKSk7CisgICAgICAgIHVuc2lnbmVkTGFyZ2VJbnRlZ2VyVmFsdWUgPSBvYmplY3QtPmdldCgm
c3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJ1bnNpZ25lZExhcmdlSW50ZWdlciIp
KTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0K
ICAgICBpZiAoIXVuc2lnbmVkTGFyZ2VJbnRlZ2VyVmFsdWUuaXNVbmRlZmluZWQoKSkgewpAQCAt
OTQ0LDcgKzk0NCw3IEBAIHRlbXBsYXRlPD4gVGVzdE9iajo6RGljdGlvbmFyeSBjb252ZXJ0RGkK
ICAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQpCiAgICAgICAgIHVuc2lnbmVkTGFyZ2VJbnRlZ2Vy
V2l0aERlZmF1bHRWYWx1ZSA9IGpzVW5kZWZpbmVkKCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIHVu
c2lnbmVkTGFyZ2VJbnRlZ2VyV2l0aERlZmF1bHRWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJ1bnNpZ25lZExhcmdlSW50ZWdlcldpdGhE
ZWZhdWx0IikpOworICAgICAgICB1bnNpZ25lZExhcmdlSW50ZWdlcldpdGhEZWZhdWx0VmFsdWUg
PSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJ1bnNpZ25l
ZExhcmdlSW50ZWdlcldpdGhEZWZhdWx0IikpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHRocm93U2NvcGUsIHsgfSk7CiAgICAgfQogICAgIGlmICghdW5zaWduZWRMYXJnZUludGVnZXJX
aXRoRGVmYXVsdFZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKQEAgLTk2MywxMzYgKzk2MywxMzYgQEAg
SlNDOjpKU09iamVjdCogY29udmVydERpY3Rpb25hcnlUb0pTKEpTQwogCiAgICAgaWYgKCFJRExT
ZXF1ZW5jZTxJRExDbGFtcEFkYXB0b3I8SURMTG9uZz4+Ojppc051bGxWYWx1ZShkaWN0aW9uYXJ5
LmFubm90YXRlZFR5cGVJblNlcXVlbmNlTWVtYmVyKSkgewogICAgICAgICBhdXRvIGFubm90YXRl
ZFR5cGVJblNlcXVlbmNlTWVtYmVyVmFsdWUgPSB0b0pTPElETFNlcXVlbmNlPElETENsYW1wQWRh
cHRvcjxJRExMb25nPj4+KHN0YXRlLCBnbG9iYWxPYmplY3QsIElETFNlcXVlbmNlPElETENsYW1w
QWRhcHRvcjxJRExMb25nPj46OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZShkaWN0aW9uYXJ5LmFu
bm90YXRlZFR5cGVJblNlcXVlbmNlTWVtYmVyKSk7Ci0gICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0
KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiYW5ub3RhdGVkVHlwZUluU2Vx
dWVuY2VNZW1iZXIiKSwgYW5ub3RhdGVkVHlwZUluU2VxdWVuY2VNZW1iZXJWYWx1ZSk7CisgICAg
ICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0s
ICJhbm5vdGF0ZWRUeXBlSW5TZXF1ZW5jZU1lbWJlciIpLCBhbm5vdGF0ZWRUeXBlSW5TZXF1ZW5j
ZU1lbWJlclZhbHVlKTsKICAgICB9CiAgICAgaWYgKCFJRExVbmlvbjxJRExET01TdHJpbmcsIElE
TENsYW1wQWRhcHRvcjxJRExMb25nPj46OmlzTnVsbFZhbHVlKGRpY3Rpb25hcnkuYW5ub3RhdGVk
VHlwZUluVW5pb25NZW1iZXIpKSB7CiAgICAgICAgIGF1dG8gYW5ub3RhdGVkVHlwZUluVW5pb25N
ZW1iZXJWYWx1ZSA9IHRvSlM8SURMVW5pb248SURMRE9NU3RyaW5nLCBJRExDbGFtcEFkYXB0b3I8
SURMTG9uZz4+PihzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBJRExVbmlvbjxJRExET01TdHJpbmcsIElE
TENsYW1wQWRhcHRvcjxJRExMb25nPj46OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZShkaWN0aW9u
YXJ5LmFubm90YXRlZFR5cGVJblVuaW9uTWVtYmVyKSk7Ci0gICAgICAgIHJlc3VsdC0+cHV0RGly
ZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiYW5ub3RhdGVkVHlwZUlu
VW5pb25NZW1iZXIiKSwgYW5ub3RhdGVkVHlwZUluVW5pb25NZW1iZXJWYWx1ZSk7CisgICAgICAg
IHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJh
bm5vdGF0ZWRUeXBlSW5Vbmlvbk1lbWJlciIpLCBhbm5vdGF0ZWRUeXBlSW5Vbmlvbk1lbWJlclZh
bHVlKTsKICAgICB9CiAgICAgYXV0byBhbnlUeXBlZGVmVmFsdWVWYWx1ZSA9IHRvSlM8SURMQW55
PihkaWN0aW9uYXJ5LmFueVR5cGVkZWZWYWx1ZSk7Ci0gICAgcmVzdWx0LT5wdXREaXJlY3Qodm0s
IEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJhbnlUeXBlZGVmVmFsdWUiKSwgYW55
VHlwZWRlZlZhbHVlVmFsdWUpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50
aWZpZXI6OmZyb21TdHJpbmcodm0sICJhbnlUeXBlZGVmVmFsdWUiKSwgYW55VHlwZWRlZlZhbHVl
VmFsdWUpOwogICAgIGF1dG8gYW55VmFsdWVWYWx1ZSA9IHRvSlM8SURMQW55PihkaWN0aW9uYXJ5
LmFueVZhbHVlKTsKLSAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKCZ2bSwgImFueVZhbHVlIiksIGFueVZhbHVlVmFsdWUpOworICAgIHJlc3VsdC0+
cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJhbnlWYWx1ZSIp
LCBhbnlWYWx1ZVZhbHVlKTsKICAgICBhdXRvIGFueVZhbHVlV2l0aE51bGxEZWZhdWx0VmFsdWUg
PSB0b0pTPElETEFueT4oZGljdGlvbmFyeS5hbnlWYWx1ZVdpdGhOdWxsRGVmYXVsdCk7Ci0gICAg
cmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJh
bnlWYWx1ZVdpdGhOdWxsRGVmYXVsdCIpLCBhbnlWYWx1ZVdpdGhOdWxsRGVmYXVsdFZhbHVlKTsK
KyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZt
LCAiYW55VmFsdWVXaXRoTnVsbERlZmF1bHQiKSwgYW55VmFsdWVXaXRoTnVsbERlZmF1bHRWYWx1
ZSk7CiAgICAgYXV0byBib29sZWFuV2l0aERlZmF1bHRWYWx1ZSA9IHRvSlM8SURMQm9vbGVhbj4o
ZGljdGlvbmFyeS5ib29sZWFuV2l0aERlZmF1bHQpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZt
LCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiYm9vbGVhbldpdGhEZWZhdWx0Iiks
IGJvb2xlYW5XaXRoRGVmYXVsdFZhbHVlKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlND
OjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiYm9vbGVhbldpdGhEZWZhdWx0IiksIGJvb2xl
YW5XaXRoRGVmYXVsdFZhbHVlKTsKICAgICBpZiAoIUlETEJvb2xlYW46OmlzTnVsbFZhbHVlKGRp
Y3Rpb25hcnkuYm9vbGVhbldpdGhvdXREZWZhdWx0KSkgewogICAgICAgICBhdXRvIGJvb2xlYW5X
aXRob3V0RGVmYXVsdFZhbHVlID0gdG9KUzxJRExCb29sZWFuPihJRExCb29sZWFuOjpleHRyYWN0
VmFsdWVGcm9tTnVsbGFibGUoZGljdGlvbmFyeS5ib29sZWFuV2l0aG91dERlZmF1bHQpKTsKLSAg
ICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygm
dm0sICJib29sZWFuV2l0aG91dERlZmF1bHQiKSwgYm9vbGVhbldpdGhvdXREZWZhdWx0VmFsdWUp
OworICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKHZtLCAiYm9vbGVhbldpdGhvdXREZWZhdWx0IiksIGJvb2xlYW5XaXRob3V0RGVmYXVsdFZh
bHVlKTsKICAgICB9CiAgICAgaWYgKCFJRExVbmlvbjxJRExBcnJheUJ1ZmZlclZpZXcsIElETEFy
cmF5QnVmZmVyPjo6aXNOdWxsVmFsdWUoZGljdGlvbmFyeS5idWZmZXJTb3VyY2VWYWx1ZSkpIHsK
ICAgICAgICAgYXV0byBidWZmZXJTb3VyY2VWYWx1ZVZhbHVlID0gdG9KUzxJRExVbmlvbjxJRExB
cnJheUJ1ZmZlclZpZXcsIElETEFycmF5QnVmZmVyPj4oc3RhdGUsIGdsb2JhbE9iamVjdCwgSURM
VW5pb248SURMQXJyYXlCdWZmZXJWaWV3LCBJRExBcnJheUJ1ZmZlcj46OmV4dHJhY3RWYWx1ZUZy
b21OdWxsYWJsZShkaWN0aW9uYXJ5LmJ1ZmZlclNvdXJjZVZhbHVlKSk7Ci0gICAgICAgIHJlc3Vs
dC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiYnVmZmVy
U291cmNlVmFsdWUiKSwgYnVmZmVyU291cmNlVmFsdWVWYWx1ZSk7CisgICAgICAgIHJlc3VsdC0+
cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJidWZmZXJTb3Vy
Y2VWYWx1ZSIpLCBidWZmZXJTb3VyY2VWYWx1ZVZhbHVlKTsKICAgICB9CiAgICAgaWYgKCFJRExE
aWN0aW9uYXJ5PFRlc3RPYmo6OkRpY3Rpb25hcnlUaGF0U2hvdWxkVG9sZXJhdGVOdWxsPjo6aXNO
dWxsVmFsdWUoZGljdGlvbmFyeS5kaWN0aW9uYXJ5TWVtYmVyKSkgewogICAgICAgICBhdXRvIGRp
Y3Rpb25hcnlNZW1iZXJWYWx1ZSA9IHRvSlM8SURMRGljdGlvbmFyeTxUZXN0T2JqOjpEaWN0aW9u
YXJ5VGhhdFNob3VsZFRvbGVyYXRlTnVsbD4+KHN0YXRlLCBnbG9iYWxPYmplY3QsIElETERpY3Rp
b25hcnk8VGVzdE9iajo6RGljdGlvbmFyeVRoYXRTaG91bGRUb2xlcmF0ZU51bGw+OjpleHRyYWN0
VmFsdWVGcm9tTnVsbGFibGUoZGljdGlvbmFyeS5kaWN0aW9uYXJ5TWVtYmVyKSk7Ci0gICAgICAg
IHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAi
ZGljdGlvbmFyeU1lbWJlciIpLCBkaWN0aW9uYXJ5TWVtYmVyVmFsdWUpOworICAgICAgICByZXN1
bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiZGljdGlv
bmFyeU1lbWJlciIpLCBkaWN0aW9uYXJ5TWVtYmVyVmFsdWUpOwogICAgIH0KICAgICBhdXRvIGVu
dW1lcmF0aW9uVmFsdWVXaXRoRGVmYXVsdFZhbHVlID0gdG9KUzxJRExFbnVtZXJhdGlvbjxUZXN0
T2JqOjpFbnVtVHlwZT4+KHN0YXRlLCBkaWN0aW9uYXJ5LmVudW1lcmF0aW9uVmFsdWVXaXRoRGVm
YXVsdCk7Ci0gICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0
cmluZygmdm0sICJlbnVtZXJhdGlvblZhbHVlV2l0aERlZmF1bHQiKSwgZW51bWVyYXRpb25WYWx1
ZVdpdGhEZWZhdWx0VmFsdWUpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50
aWZpZXI6OmZyb21TdHJpbmcodm0sICJlbnVtZXJhdGlvblZhbHVlV2l0aERlZmF1bHQiKSwgZW51
bWVyYXRpb25WYWx1ZVdpdGhEZWZhdWx0VmFsdWUpOwogICAgIGF1dG8gZW51bWVyYXRpb25WYWx1
ZVdpdGhFbXB0eVN0cmluZ0RlZmF1bHRWYWx1ZSA9IHRvSlM8SURMRW51bWVyYXRpb248VGVzdE9i
ajo6RW51bVR5cGU+PihzdGF0ZSwgZGljdGlvbmFyeS5lbnVtZXJhdGlvblZhbHVlV2l0aEVtcHR5
U3RyaW5nRGVmYXVsdCk7Ci0gICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmll
cjo6ZnJvbVN0cmluZygmdm0sICJlbnVtZXJhdGlvblZhbHVlV2l0aEVtcHR5U3RyaW5nRGVmYXVs
dCIpLCBlbnVtZXJhdGlvblZhbHVlV2l0aEVtcHR5U3RyaW5nRGVmYXVsdFZhbHVlKTsKKyAgICBy
ZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiZW51
bWVyYXRpb25WYWx1ZVdpdGhFbXB0eVN0cmluZ0RlZmF1bHQiKSwgZW51bWVyYXRpb25WYWx1ZVdp
dGhFbXB0eVN0cmluZ0RlZmF1bHRWYWx1ZSk7CiAgICAgaWYgKCFJRExFbnVtZXJhdGlvbjxUZXN0
T2JqOjpFbnVtVHlwZT46OmlzTnVsbFZhbHVlKGRpY3Rpb25hcnkuZW51bWVyYXRpb25WYWx1ZVdp
dGhvdXREZWZhdWx0KSkgewogICAgICAgICBhdXRvIGVudW1lcmF0aW9uVmFsdWVXaXRob3V0RGVm
YXVsdFZhbHVlID0gdG9KUzxJRExFbnVtZXJhdGlvbjxUZXN0T2JqOjpFbnVtVHlwZT4+KHN0YXRl
LCBJRExFbnVtZXJhdGlvbjxUZXN0T2JqOjpFbnVtVHlwZT46OmV4dHJhY3RWYWx1ZUZyb21OdWxs
YWJsZShkaWN0aW9uYXJ5LmVudW1lcmF0aW9uVmFsdWVXaXRob3V0RGVmYXVsdCkpOwotICAgICAg
ICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwg
ImVudW1lcmF0aW9uVmFsdWVXaXRob3V0RGVmYXVsdCIpLCBlbnVtZXJhdGlvblZhbHVlV2l0aG91
dERlZmF1bHRWYWx1ZSk7CisgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50
aWZpZXI6OmZyb21TdHJpbmcodm0sICJlbnVtZXJhdGlvblZhbHVlV2l0aG91dERlZmF1bHQiKSwg
ZW51bWVyYXRpb25WYWx1ZVdpdGhvdXREZWZhdWx0VmFsdWUpOwogICAgIH0KICAgICBhdXRvIGZv
b0FsaWFzVmFsdWUgPSB0b0pTPElETEFueT4oZGljdGlvbmFyeS5mb28pOwotICAgIHJlc3VsdC0+
cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiZm9vQWxpYXMi
KSwgZm9vQWxpYXNWYWx1ZSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRp
Zmllcjo6ZnJvbVN0cmluZyh2bSwgImZvb0FsaWFzIiksIGZvb0FsaWFzVmFsdWUpOwogICAgIGF1
dG8gZm9vV2l0aERlZmF1bHRBbGlhc1ZhbHVlID0gdG9KUzxJRExBbnk+KGRpY3Rpb25hcnkuZm9v
V2l0aERlZmF1bHQpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6
OmZyb21TdHJpbmcoJnZtLCAiZm9vV2l0aERlZmF1bHRBbGlhcyIpLCBmb29XaXRoRGVmYXVsdEFs
aWFzVmFsdWUpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZy
b21TdHJpbmcodm0sICJmb29XaXRoRGVmYXVsdEFsaWFzIiksIGZvb1dpdGhEZWZhdWx0QWxpYXNW
YWx1ZSk7CiAgICAgaWYgKCFJRExMb25nOjppc051bGxWYWx1ZShkaWN0aW9uYXJ5LmludGVnZXIp
KSB7CiAgICAgICAgIGF1dG8gaW50ZWdlclZhbHVlID0gdG9KUzxJRExMb25nPihJRExMb25nOjpl
eHRyYWN0VmFsdWVGcm9tTnVsbGFibGUoZGljdGlvbmFyeS5pbnRlZ2VyKSk7Ci0gICAgICAgIHJl
c3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiaW50
ZWdlciIpLCBpbnRlZ2VyVmFsdWUpOworICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlND
OjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiaW50ZWdlciIpLCBpbnRlZ2VyVmFsdWUpOwog
ICAgIH0KICAgICBhdXRvIGludGVnZXJXaXRoRGVmYXVsdFZhbHVlID0gdG9KUzxJRExMb25nPihk
aWN0aW9uYXJ5LmludGVnZXJXaXRoRGVmYXVsdCk7Ci0gICAgcmVzdWx0LT5wdXREaXJlY3Qodm0s
IEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJpbnRlZ2VyV2l0aERlZmF1bHQiKSwg
aW50ZWdlcldpdGhEZWZhdWx0VmFsdWUpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6
OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJpbnRlZ2VyV2l0aERlZmF1bHQiKSwgaW50ZWdl
cldpdGhEZWZhdWx0VmFsdWUpOwogICAgIGlmICghSURMTG9uZ0xvbmc6OmlzTnVsbFZhbHVlKGRp
Y3Rpb25hcnkubGFyZ2VJbnRlZ2VyKSkgewogICAgICAgICBhdXRvIGxhcmdlSW50ZWdlclZhbHVl
ID0gdG9KUzxJRExMb25nTG9uZz4oSURMTG9uZ0xvbmc6OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJs
ZShkaWN0aW9uYXJ5LmxhcmdlSW50ZWdlcikpOwotICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2
bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImxhcmdlSW50ZWdlciIpLCBsYXJn
ZUludGVnZXJWYWx1ZSk7CisgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50
aWZpZXI6OmZyb21TdHJpbmcodm0sICJsYXJnZUludGVnZXIiKSwgbGFyZ2VJbnRlZ2VyVmFsdWUp
OwogICAgIH0KICAgICBhdXRvIGxhcmdlSW50ZWdlcldpdGhEZWZhdWx0VmFsdWUgPSB0b0pTPElE
TExvbmdMb25nPihkaWN0aW9uYXJ5LmxhcmdlSW50ZWdlcldpdGhEZWZhdWx0KTsKLSAgICByZXN1
bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImxhcmdl
SW50ZWdlcldpdGhEZWZhdWx0IiksIGxhcmdlSW50ZWdlcldpdGhEZWZhdWx0VmFsdWUpOworICAg
IHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJs
YXJnZUludGVnZXJXaXRoRGVmYXVsdCIpLCBsYXJnZUludGVnZXJXaXRoRGVmYXVsdFZhbHVlKTsK
ICAgICBhdXRvIG51bGxhYmxlRW51bVZhbHVlID0gdG9KUzxJRExOdWxsYWJsZTxJRExFbnVtZXJh
dGlvbjxUZXN0T2JqOjpFbnVtVHlwZT4+PihzdGF0ZSwgZGljdGlvbmFyeS5udWxsYWJsZUVudW0p
OwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmco
JnZtLCAibnVsbGFibGVFbnVtIiksIG51bGxhYmxlRW51bVZhbHVlKTsKKyAgICByZXN1bHQtPnB1
dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAibnVsbGFibGVFbnVt
IiksIG51bGxhYmxlRW51bVZhbHVlKTsKICAgICBhdXRvIG51bGxhYmxlSW50ZWdlcldpdGhEZWZh
dWx0VmFsdWUgPSB0b0pTPElETE51bGxhYmxlPElETExvbmc+PihkaWN0aW9uYXJ5Lm51bGxhYmxl
SW50ZWdlcldpdGhEZWZhdWx0KTsKLSAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgIm51bGxhYmxlSW50ZWdlcldpdGhEZWZhdWx0IiksIG51
bGxhYmxlSW50ZWdlcldpdGhEZWZhdWx0VmFsdWUpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZt
LCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJudWxsYWJsZUludGVnZXJXaXRoRGVm
YXVsdCIpLCBudWxsYWJsZUludGVnZXJXaXRoRGVmYXVsdFZhbHVlKTsKICAgICBhdXRvIG51bGxh
YmxlTm9kZVZhbHVlID0gdG9KUzxJRExOdWxsYWJsZTxJRExJbnRlcmZhY2U8Tm9kZT4+PihzdGF0
ZSwgZ2xvYmFsT2JqZWN0LCBkaWN0aW9uYXJ5Lm51bGxhYmxlTm9kZSk7Ci0gICAgcmVzdWx0LT5w
dXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJudWxsYWJsZU5v
ZGUiKSwgbnVsbGFibGVOb2RlVmFsdWUpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6
OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJudWxsYWJsZU5vZGUiKSwgbnVsbGFibGVOb2Rl
VmFsdWUpOwogICAgIGF1dG8gbnVsbGFibGVTdHJpbmdXaXRoRGVmYXVsdFZhbHVlID0gdG9KUzxJ
RExOdWxsYWJsZTxJRExET01TdHJpbmc+PihzdGF0ZSwgZGljdGlvbmFyeS5udWxsYWJsZVN0cmlu
Z1dpdGhEZWZhdWx0KTsKLSAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKCZ2bSwgIm51bGxhYmxlU3RyaW5nV2l0aERlZmF1bHQiKSwgbnVsbGFibGVT
dHJpbmdXaXRoRGVmYXVsdFZhbHVlKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAibnVsbGFibGVTdHJpbmdXaXRoRGVmYXVsdCIpLCBu
dWxsYWJsZVN0cmluZ1dpdGhEZWZhdWx0VmFsdWUpOwogICAgIGF1dG8gbnVsbGFibGVVbmlvbk1l
bWJlclZhbHVlID0gdG9KUzxJRExOdWxsYWJsZTxJRExVbmlvbjxJRExMb25nLCBJRExJbnRlcmZh
Y2U8Tm9kZT4+Pj4oc3RhdGUsIGdsb2JhbE9iamVjdCwgZGljdGlvbmFyeS5udWxsYWJsZVVuaW9u
TWVtYmVyKTsKLSAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKCZ2bSwgIm51bGxhYmxlVW5pb25NZW1iZXIiKSwgbnVsbGFibGVVbmlvbk1lbWJlclZh
bHVlKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKHZtLCAibnVsbGFibGVVbmlvbk1lbWJlciIpLCBudWxsYWJsZVVuaW9uTWVtYmVyVmFsdWUp
OwogICAgIGF1dG8gcmVxdWlyZWRCdWZmZXJTb3VyY2VWYWx1ZVZhbHVlID0gdG9KUzxJRExVbmlv
bjxJRExBcnJheUJ1ZmZlclZpZXcsIElETEFycmF5QnVmZmVyPj4oc3RhdGUsIGdsb2JhbE9iamVj
dCwgZGljdGlvbmFyeS5yZXF1aXJlZEJ1ZmZlclNvdXJjZVZhbHVlKTsKLSAgICByZXN1bHQtPnB1
dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgInJlcXVpcmVkQnVm
ZmVyU291cmNlVmFsdWUiKSwgcmVxdWlyZWRCdWZmZXJTb3VyY2VWYWx1ZVZhbHVlKTsKKyAgICBy
ZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAicmVx
dWlyZWRCdWZmZXJTb3VyY2VWYWx1ZSIpLCByZXF1aXJlZEJ1ZmZlclNvdXJjZVZhbHVlVmFsdWUp
OwogICAgIGlmICghSURMRG91YmxlOjppc051bGxWYWx1ZShkaWN0aW9uYXJ5LnJlc3RyaWN0ZWRE
b3VibGUpKSB7CiAgICAgICAgIGF1dG8gcmVzdHJpY3RlZERvdWJsZVZhbHVlID0gdG9KUzxJRExE
b3VibGU+KElETERvdWJsZTo6ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKGRpY3Rpb25hcnkucmVz
dHJpY3RlZERvdWJsZSkpOwotICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgInJlc3RyaWN0ZWREb3VibGUiKSwgcmVzdHJpY3RlZERv
dWJsZVZhbHVlKTsKKyAgICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmll
cjo6ZnJvbVN0cmluZyh2bSwgInJlc3RyaWN0ZWREb3VibGUiKSwgcmVzdHJpY3RlZERvdWJsZVZh
bHVlKTsKICAgICB9CiAgICAgYXV0byByZXN0cmljdGVkRG91YmxlV2l0aERlZmF1bHRWYWx1ZSA9
IHRvSlM8SURMRG91YmxlPihkaWN0aW9uYXJ5LnJlc3RyaWN0ZWREb3VibGVXaXRoRGVmYXVsdCk7
Ci0gICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygm
dm0sICJyZXN0cmljdGVkRG91YmxlV2l0aERlZmF1bHQiKSwgcmVzdHJpY3RlZERvdWJsZVdpdGhE
ZWZhdWx0VmFsdWUpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6
OmZyb21TdHJpbmcodm0sICJyZXN0cmljdGVkRG91YmxlV2l0aERlZmF1bHQiKSwgcmVzdHJpY3Rl
ZERvdWJsZVdpdGhEZWZhdWx0VmFsdWUpOwogICAgIGlmICghSURMRmxvYXQ6OmlzTnVsbFZhbHVl
KGRpY3Rpb25hcnkucmVzdHJpY3RlZEZsb2F0KSkgewogICAgICAgICBhdXRvIHJlc3RyaWN0ZWRG
bG9hdFZhbHVlID0gdG9KUzxJRExGbG9hdD4oSURMRmxvYXQ6OmV4dHJhY3RWYWx1ZUZyb21OdWxs
YWJsZShkaWN0aW9uYXJ5LnJlc3RyaWN0ZWRGbG9hdCkpOwotICAgICAgICByZXN1bHQtPnB1dERp
cmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgInJlc3RyaWN0ZWRGbG9h
dCIpLCByZXN0cmljdGVkRmxvYXRWYWx1ZSk7CisgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZt
LCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJyZXN0cmljdGVkRmxvYXQiKSwgcmVz
dHJpY3RlZEZsb2F0VmFsdWUpOwogICAgIH0KICAgICBhdXRvIHJlc3RyaWN0ZWRGbG9hdFdpdGhE
ZWZhdWx0VmFsdWUgPSB0b0pTPElETEZsb2F0PihkaWN0aW9uYXJ5LnJlc3RyaWN0ZWRGbG9hdFdp
dGhEZWZhdWx0KTsKLSAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKCZ2bSwgInJlc3RyaWN0ZWRGbG9hdFdpdGhEZWZhdWx0IiksIHJlc3RyaWN0ZWRG
bG9hdFdpdGhEZWZhdWx0VmFsdWUpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6Oklk
ZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJyZXN0cmljdGVkRmxvYXRXaXRoRGVmYXVsdCIpLCBy
ZXN0cmljdGVkRmxvYXRXaXRoRGVmYXVsdFZhbHVlKTsKICAgICBpZiAoIUlETFNlcXVlbmNlPElE
TERPTVN0cmluZz46OmlzTnVsbFZhbHVlKGRpY3Rpb25hcnkuc2VxdWVuY2VPZlN0cmluZ3MpKSB7
CiAgICAgICAgIGF1dG8gc2VxdWVuY2VPZlN0cmluZ3NWYWx1ZSA9IHRvSlM8SURMU2VxdWVuY2U8
SURMRE9NU3RyaW5nPj4oc3RhdGUsIGdsb2JhbE9iamVjdCwgSURMU2VxdWVuY2U8SURMRE9NU3Ry
aW5nPjo6ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKGRpY3Rpb25hcnkuc2VxdWVuY2VPZlN0cmlu
Z3MpKTsKLSAgICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJv
bVN0cmluZygmdm0sICJzZXF1ZW5jZU9mU3RyaW5ncyIpLCBzZXF1ZW5jZU9mU3RyaW5nc1ZhbHVl
KTsKKyAgICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0
cmluZyh2bSwgInNlcXVlbmNlT2ZTdHJpbmdzIiksIHNlcXVlbmNlT2ZTdHJpbmdzVmFsdWUpOwog
ICAgIH0KICAgICBpZiAoIUlETENsYW1wQWRhcHRvcjxJRExCeXRlPjo6aXNOdWxsVmFsdWUoZGlj
dGlvbmFyeS5zbWFsbEludGVnZXJDbGFtcGVkKSkgewogICAgICAgICBhdXRvIHNtYWxsSW50ZWdl
ckNsYW1wZWRWYWx1ZSA9IHRvSlM8SURMQ2xhbXBBZGFwdG9yPElETEJ5dGU+PihJRExDbGFtcEFk
YXB0b3I8SURMQnl0ZT46OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZShkaWN0aW9uYXJ5LnNtYWxs
SW50ZWdlckNsYW1wZWQpKTsKLSAgICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRl
bnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJzbWFsbEludGVnZXJDbGFtcGVkIiksIHNtYWxsSW50
ZWdlckNsYW1wZWRWYWx1ZSk7CisgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6Oklk
ZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJzbWFsbEludGVnZXJDbGFtcGVkIiksIHNtYWxsSW50
ZWdlckNsYW1wZWRWYWx1ZSk7CiAgICAgfQogICAgIGlmICghSURMQnl0ZTo6aXNOdWxsVmFsdWUo
ZGljdGlvbmFyeS5zbWFsbEludGVnZXJXaXRoRGVmYXVsdCkpIHsKICAgICAgICAgYXV0byBzbWFs
bEludGVnZXJXaXRoRGVmYXVsdFZhbHVlID0gdG9KUzxJRExCeXRlPihJRExCeXRlOjpleHRyYWN0
VmFsdWVGcm9tTnVsbGFibGUoZGljdGlvbmFyeS5zbWFsbEludGVnZXJXaXRoRGVmYXVsdCkpOwot
ICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KCZ2bSwgInNtYWxsSW50ZWdlcldpdGhEZWZhdWx0IiksIHNtYWxsSW50ZWdlcldpdGhEZWZhdWx0
VmFsdWUpOworICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCAic21hbGxJbnRlZ2VyV2l0aERlZmF1bHQiKSwgc21hbGxJbnRlZ2VyV2l0
aERlZmF1bHRWYWx1ZSk7CiAgICAgfQogICAgIGlmICghSURMRW5mb3JjZVJhbmdlQWRhcHRvcjxJ
RExPY3RldD46OmlzTnVsbFZhbHVlKGRpY3Rpb25hcnkuc21hbGxVbnNpZ25lZEludGVnZXJFbmZv
cmNlZFJhbmdlKSkgewogICAgICAgICBhdXRvIHNtYWxsVW5zaWduZWRJbnRlZ2VyRW5mb3JjZWRS
YW5nZVZhbHVlID0gdG9KUzxJRExFbmZvcmNlUmFuZ2VBZGFwdG9yPElETE9jdGV0Pj4oSURMRW5m
b3JjZVJhbmdlQWRhcHRvcjxJRExPY3RldD46OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZShkaWN0
aW9uYXJ5LnNtYWxsVW5zaWduZWRJbnRlZ2VyRW5mb3JjZWRSYW5nZSkpOwotICAgICAgICByZXN1
bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgInNtYWxs
VW5zaWduZWRJbnRlZ2VyRW5mb3JjZWRSYW5nZSIpLCBzbWFsbFVuc2lnbmVkSW50ZWdlckVuZm9y
Y2VkUmFuZ2VWYWx1ZSk7CisgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50
aWZpZXI6OmZyb21TdHJpbmcodm0sICJzbWFsbFVuc2lnbmVkSW50ZWdlckVuZm9yY2VkUmFuZ2Ui
KSwgc21hbGxVbnNpZ25lZEludGVnZXJFbmZvcmNlZFJhbmdlVmFsdWUpOwogICAgIH0KICAgICBh
dXRvIHNtYWxsVW5zaWduZWRJbnRlZ2VyV2l0aERlZmF1bHRWYWx1ZSA9IHRvSlM8SURMT2N0ZXQ+
KGRpY3Rpb25hcnkuc21hbGxVbnNpZ25lZEludGVnZXJXaXRoRGVmYXVsdCk7Ci0gICAgcmVzdWx0
LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJzbWFsbFVu
c2lnbmVkSW50ZWdlcldpdGhEZWZhdWx0IiksIHNtYWxsVW5zaWduZWRJbnRlZ2VyV2l0aERlZmF1
bHRWYWx1ZSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJv
bVN0cmluZyh2bSwgInNtYWxsVW5zaWduZWRJbnRlZ2VyV2l0aERlZmF1bHQiKSwgc21hbGxVbnNp
Z25lZEludGVnZXJXaXRoRGVmYXVsdFZhbHVlKTsKICAgICBpZiAoIUlETFRyZWF0TnVsbEFzRW1w
dHlBZGFwdG9yPElETERPTVN0cmluZz46OmlzTnVsbFZhbHVlKGRpY3Rpb25hcnkuc3RyaW5nVHJl
YXROdWxsQXNFbXB0eVN0cmluZykpIHsKICAgICAgICAgYXV0byBzdHJpbmdUcmVhdE51bGxBc0Vt
cHR5U3RyaW5nVmFsdWUgPSB0b0pTPElETFRyZWF0TnVsbEFzRW1wdHlBZGFwdG9yPElETERPTVN0
cmluZz4+KHN0YXRlLCBJRExUcmVhdE51bGxBc0VtcHR5QWRhcHRvcjxJRExET01TdHJpbmc+Ojpl
eHRyYWN0VmFsdWVGcm9tTnVsbGFibGUoZGljdGlvbmFyeS5zdHJpbmdUcmVhdE51bGxBc0VtcHR5
U3RyaW5nKSk7Ci0gICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6
OmZyb21TdHJpbmcoJnZtLCAic3RyaW5nVHJlYXROdWxsQXNFbXB0eVN0cmluZyIpLCBzdHJpbmdU
cmVhdE51bGxBc0VtcHR5U3RyaW5nVmFsdWUpOworICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2
bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAic3RyaW5nVHJlYXROdWxsQXNFbXB0
eVN0cmluZyIpLCBzdHJpbmdUcmVhdE51bGxBc0VtcHR5U3RyaW5nVmFsdWUpOwogICAgIH0KICAg
ICBhdXRvIHN0cmluZ1dpdGhEZWZhdWx0VmFsdWUgPSB0b0pTPElETERPTVN0cmluZz4oc3RhdGUs
IGRpY3Rpb25hcnkuc3RyaW5nV2l0aERlZmF1bHQpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZt
LCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAic3RyaW5nV2l0aERlZmF1bHQiKSwg
c3RyaW5nV2l0aERlZmF1bHRWYWx1ZSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInN0cmluZ1dpdGhEZWZhdWx0IiksIHN0cmluZ1dp
dGhEZWZhdWx0VmFsdWUpOwogICAgIGlmICghSURMRE9NU3RyaW5nOjppc051bGxWYWx1ZShkaWN0
aW9uYXJ5LnN0cmluZ1dpdGhvdXREZWZhdWx0KSkgewogICAgICAgICBhdXRvIHN0cmluZ1dpdGhv
dXREZWZhdWx0VmFsdWUgPSB0b0pTPElETERPTVN0cmluZz4oc3RhdGUsIElETERPTVN0cmluZzo6
ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKGRpY3Rpb25hcnkuc3RyaW5nV2l0aG91dERlZmF1bHQp
KTsKLSAgICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0
cmluZygmdm0sICJzdHJpbmdXaXRob3V0RGVmYXVsdCIpLCBzdHJpbmdXaXRob3V0RGVmYXVsdFZh
bHVlKTsKKyAgICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJv
bVN0cmluZyh2bSwgInN0cmluZ1dpdGhvdXREZWZhdWx0IiksIHN0cmluZ1dpdGhvdXREZWZhdWx0
VmFsdWUpOwogICAgIH0KICAgICBpZiAoIUlETFVuaW9uPElETExvbmcsIElETEludGVyZmFjZTxO
b2RlPj46OmlzTnVsbFZhbHVlKGRpY3Rpb25hcnkudW5pb25NZW1iZXIpKSB7CiAgICAgICAgIGF1
dG8gdW5pb25NZW1iZXJWYWx1ZSA9IHRvSlM8SURMVW5pb248SURMTG9uZywgSURMSW50ZXJmYWNl
PE5vZGU+Pj4oc3RhdGUsIGdsb2JhbE9iamVjdCwgSURMVW5pb248SURMTG9uZywgSURMSW50ZXJm
YWNlPE5vZGU+Pjo6ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKGRpY3Rpb25hcnkudW5pb25NZW1i
ZXIpKTsKLSAgICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJv
bVN0cmluZygmdm0sICJ1bmlvbk1lbWJlciIpLCB1bmlvbk1lbWJlclZhbHVlKTsKKyAgICAgICAg
cmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInVu
aW9uTWVtYmVyIiksIHVuaW9uTWVtYmVyVmFsdWUpOwogICAgIH0KICAgICBpZiAoIUlETFVucmVz
dHJpY3RlZERvdWJsZTo6aXNOdWxsVmFsdWUoZGljdGlvbmFyeS51bnJlc3RyaWN0ZWREb3VibGUp
KSB7CiAgICAgICAgIGF1dG8gdW5yZXN0cmljdGVkRG91YmxlVmFsdWUgPSB0b0pTPElETFVucmVz
dHJpY3RlZERvdWJsZT4oSURMVW5yZXN0cmljdGVkRG91YmxlOjpleHRyYWN0VmFsdWVGcm9tTnVs
bGFibGUoZGljdGlvbmFyeS51bnJlc3RyaWN0ZWREb3VibGUpKTsKLSAgICAgICAgcmVzdWx0LT5w
dXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJ1bnJlc3RyaWN0
ZWREb3VibGUiKSwgdW5yZXN0cmljdGVkRG91YmxlVmFsdWUpOworICAgICAgICByZXN1bHQtPnB1
dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAidW5yZXN0cmljdGVk
RG91YmxlIiksIHVucmVzdHJpY3RlZERvdWJsZVZhbHVlKTsKICAgICB9CiAgICAgYXV0byB1bnJl
c3RyaWN0ZWREb3VibGVXaXRoRGVmYXVsdFZhbHVlID0gdG9KUzxJRExVbnJlc3RyaWN0ZWREb3Vi
bGU+KGRpY3Rpb25hcnkudW5yZXN0cmljdGVkRG91YmxlV2l0aERlZmF1bHQpOwotICAgIHJlc3Vs
dC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAidW5yZXN0
cmljdGVkRG91YmxlV2l0aERlZmF1bHQiKSwgdW5yZXN0cmljdGVkRG91YmxlV2l0aERlZmF1bHRW
YWx1ZSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0
cmluZyh2bSwgInVucmVzdHJpY3RlZERvdWJsZVdpdGhEZWZhdWx0IiksIHVucmVzdHJpY3RlZERv
dWJsZVdpdGhEZWZhdWx0VmFsdWUpOwogICAgIGlmICghSURMVW5yZXN0cmljdGVkRmxvYXQ6Omlz
TnVsbFZhbHVlKGRpY3Rpb25hcnkudW5yZXN0cmljdGVkRmxvYXQpKSB7CiAgICAgICAgIGF1dG8g
dW5yZXN0cmljdGVkRmxvYXRWYWx1ZSA9IHRvSlM8SURMVW5yZXN0cmljdGVkRmxvYXQ+KElETFVu
cmVzdHJpY3RlZEZsb2F0OjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUoZGljdGlvbmFyeS51bnJl
c3RyaWN0ZWRGbG9hdCkpOwotICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgInVucmVzdHJpY3RlZEZsb2F0IiksIHVucmVzdHJpY3Rl
ZEZsb2F0VmFsdWUpOworICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKHZtLCAidW5yZXN0cmljdGVkRmxvYXQiKSwgdW5yZXN0cmljdGVkRmxv
YXRWYWx1ZSk7CiAgICAgfQogICAgIGF1dG8gdW5yZXN0cmljdGVkRmxvYXRXaXRoRGVmYXVsdFZh
bHVlID0gdG9KUzxJRExVbnJlc3RyaWN0ZWRGbG9hdD4oZGljdGlvbmFyeS51bnJlc3RyaWN0ZWRG
bG9hdFdpdGhEZWZhdWx0KTsKLSAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKCZ2bSwgInVucmVzdHJpY3RlZEZsb2F0V2l0aERlZmF1bHQiKSwgdW5y
ZXN0cmljdGVkRmxvYXRXaXRoRGVmYXVsdFZhbHVlKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2
bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAidW5yZXN0cmljdGVkRmxvYXRXaXRo
RGVmYXVsdCIpLCB1bnJlc3RyaWN0ZWRGbG9hdFdpdGhEZWZhdWx0VmFsdWUpOwogICAgIGlmICgh
SURMVW5zaWduZWRMb25nOjppc051bGxWYWx1ZShkaWN0aW9uYXJ5LnVuc2lnbmVkSW50ZWdlcikp
IHsKICAgICAgICAgYXV0byB1bnNpZ25lZEludGVnZXJWYWx1ZSA9IHRvSlM8SURMVW5zaWduZWRM
b25nPihJRExVbnNpZ25lZExvbmc6OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZShkaWN0aW9uYXJ5
LnVuc2lnbmVkSW50ZWdlcikpOwotICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgInVuc2lnbmVkSW50ZWdlciIpLCB1bnNpZ25lZElu
dGVnZXJWYWx1ZSk7CisgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZp
ZXI6OmZyb21TdHJpbmcodm0sICJ1bnNpZ25lZEludGVnZXIiKSwgdW5zaWduZWRJbnRlZ2VyVmFs
dWUpOwogICAgIH0KICAgICBhdXRvIHVuc2lnbmVkSW50ZWdlcldpdGhEZWZhdWx0VmFsdWUgPSB0
b0pTPElETFVuc2lnbmVkTG9uZz4oZGljdGlvbmFyeS51bnNpZ25lZEludGVnZXJXaXRoRGVmYXVs
dCk7Ci0gICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zygmdm0sICJ1bnNpZ25lZEludGVnZXJXaXRoRGVmYXVsdCIpLCB1bnNpZ25lZEludGVnZXJXaXRo
RGVmYXVsdFZhbHVlKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKHZtLCAidW5zaWduZWRJbnRlZ2VyV2l0aERlZmF1bHQiKSwgdW5zaWduZWRJ
bnRlZ2VyV2l0aERlZmF1bHRWYWx1ZSk7CiAgICAgaWYgKCFJRExVbnNpZ25lZExvbmdMb25nOjpp
c051bGxWYWx1ZShkaWN0aW9uYXJ5LnVuc2lnbmVkTGFyZ2VJbnRlZ2VyKSkgewogICAgICAgICBh
dXRvIHVuc2lnbmVkTGFyZ2VJbnRlZ2VyVmFsdWUgPSB0b0pTPElETFVuc2lnbmVkTG9uZ0xvbmc+
KElETFVuc2lnbmVkTG9uZ0xvbmc6OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZShkaWN0aW9uYXJ5
LnVuc2lnbmVkTGFyZ2VJbnRlZ2VyKSk7Ci0gICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBK
U0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAidW5zaWduZWRMYXJnZUludGVnZXIiKSwg
dW5zaWduZWRMYXJnZUludGVnZXJWYWx1ZSk7CisgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZt
LCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJ1bnNpZ25lZExhcmdlSW50ZWdlciIp
LCB1bnNpZ25lZExhcmdlSW50ZWdlclZhbHVlKTsKICAgICB9CiAgICAgYXV0byB1bnNpZ25lZExh
cmdlSW50ZWdlcldpdGhEZWZhdWx0VmFsdWUgPSB0b0pTPElETFVuc2lnbmVkTG9uZ0xvbmc+KGRp
Y3Rpb25hcnkudW5zaWduZWRMYXJnZUludGVnZXJXaXRoRGVmYXVsdCk7Ci0gICAgcmVzdWx0LT5w
dXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJ1bnNpZ25lZExh
cmdlSW50ZWdlcldpdGhEZWZhdWx0IiksIHVuc2lnbmVkTGFyZ2VJbnRlZ2VyV2l0aERlZmF1bHRW
YWx1ZSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0
cmluZyh2bSwgInVuc2lnbmVkTGFyZ2VJbnRlZ2VyV2l0aERlZmF1bHQiKSwgdW5zaWduZWRMYXJn
ZUludGVnZXJXaXRoRGVmYXVsdFZhbHVlKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0x
MTExLDcgKzExMTEsNyBAQCB0ZW1wbGF0ZTw+IFRlc3RPYmo6OkRpY3Rpb25hcnlUaGF0U2hvdWxk
CiAgICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKQogICAgICAgICBib29sZWFuV2l0aG91dERlZmF1
bHRWYWx1ZSA9IGpzVW5kZWZpbmVkKCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIGJvb2xlYW5XaXRo
b3V0RGVmYXVsdFZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKCZzdGF0ZSwgImJvb2xlYW5XaXRob3V0RGVmYXVsdCIpKTsKKyAgICAgICAgYm9vbGVhbldp
dGhvdXREZWZhdWx0VmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21T
dHJpbmcodm0sICJib29sZWFuV2l0aG91dERlZmF1bHQiKSk7CiAgICAgICAgIFJFVFVSTl9JRl9F
WENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICB9CiAgICAgaWYgKCFib29sZWFuV2l0aG91
dERlZmF1bHRWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7CkBAIC0xMTIyLDcgKzExMjIsNyBAQCB0ZW1w
bGF0ZTw+IFRlc3RPYmo6OkRpY3Rpb25hcnlUaGF0U2hvdWxkCiAgICAgaWYgKGlzTnVsbE9yVW5k
ZWZpbmVkKQogICAgICAgICBub25OdWxsYWJsZU5vZGVWYWx1ZSA9IGpzVW5kZWZpbmVkKCk7CiAg
ICAgZWxzZSB7Ci0gICAgICAgIG5vbk51bGxhYmxlTm9kZVZhbHVlID0gb2JqZWN0LT5nZXQoJnN0
YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgIm5vbk51bGxhYmxlTm9kZSIpKTsK
KyAgICAgICAgbm9uTnVsbGFibGVOb2RlVmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50
aWZpZXI6OmZyb21TdHJpbmcodm0sICJub25OdWxsYWJsZU5vZGUiKSk7CiAgICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICB9CiAgICAgaWYgKCFub25OdWxs
YWJsZU5vZGVWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7CkBAIC0xMTM2LDcgKzExMzYsNyBAQCB0ZW1w
bGF0ZTw+IFRlc3RPYmo6OkRpY3Rpb25hcnlUaGF0U2hvdWxkCiAgICAgaWYgKGlzTnVsbE9yVW5k
ZWZpbmVkKQogICAgICAgICByZXF1aXJlZERpY3Rpb25hcnlNZW1iZXJWYWx1ZSA9IGpzVW5kZWZp
bmVkKCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIHJlcXVpcmVkRGljdGlvbmFyeU1lbWJlclZhbHVl
ID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgInJl
cXVpcmVkRGljdGlvbmFyeU1lbWJlciIpKTsKKyAgICAgICAgcmVxdWlyZWREaWN0aW9uYXJ5TWVt
YmVyVmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0s
ICJyZXF1aXJlZERpY3Rpb25hcnlNZW1iZXIiKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04odGhyb3dTY29wZSwgeyB9KTsKICAgICB9CiAgICAgaWYgKCFyZXF1aXJlZERpY3Rpb25hcnlN
ZW1iZXJWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7CkBAIC0xMTUwLDcgKzExNTAsNyBAQCB0ZW1wbGF0
ZTw+IFRlc3RPYmo6OkRpY3Rpb25hcnlUaGF0U2hvdWxkCiAgICAgaWYgKGlzTnVsbE9yVW5kZWZp
bmVkKQogICAgICAgICByZXF1aXJlZEVudW1lcmF0aW9uVmFsdWVWYWx1ZSA9IGpzVW5kZWZpbmVk
KCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIHJlcXVpcmVkRW51bWVyYXRpb25WYWx1ZVZhbHVlID0g
b2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgInJlcXVp
cmVkRW51bWVyYXRpb25WYWx1ZSIpKTsKKyAgICAgICAgcmVxdWlyZWRFbnVtZXJhdGlvblZhbHVl
VmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJy
ZXF1aXJlZEVudW1lcmF0aW9uVmFsdWUiKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgeyB9KTsKICAgICB9CiAgICAgaWYgKCFyZXF1aXJlZEVudW1lcmF0aW9uVmFs
dWVWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7CkBAIC0xMTc4LDcgKzExNzgsNyBAQCB0ZW1wbGF0ZTw+
IFRlc3RPYmo6OkRpY3Rpb25hcnlUaGF0U2hvdWxkCiAgICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVk
KQogICAgICAgICBib29sZWFuV2l0aG91dERlZmF1bHRWYWx1ZSA9IGpzVW5kZWZpbmVkKCk7CiAg
ICAgZWxzZSB7Ci0gICAgICAgIGJvb2xlYW5XaXRob3V0RGVmYXVsdFZhbHVlID0gb2JqZWN0LT5n
ZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImJvb2xlYW5XaXRob3V0
RGVmYXVsdCIpKTsKKyAgICAgICAgYm9vbGVhbldpdGhvdXREZWZhdWx0VmFsdWUgPSBvYmplY3Qt
PmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJib29sZWFuV2l0aG91dERl
ZmF1bHQiKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsK
ICAgICB9CiAgICAgaWYgKCFib29sZWFuV2l0aG91dERlZmF1bHRWYWx1ZS5pc1VuZGVmaW5lZCgp
KSB7CkBAIC0xMTg5LDcgKzExODksNyBAQCB0ZW1wbGF0ZTw+IFRlc3RPYmo6OkRpY3Rpb25hcnlU
aGF0U2hvdWxkCiAgICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKQogICAgICAgICBlbnVtZXJhdGlv
blZhbHVlVmFsdWUgPSBqc1VuZGVmaW5lZCgpOwogICAgIGVsc2UgewotICAgICAgICBlbnVtZXJh
dGlvblZhbHVlVmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJp
bmcoJnN0YXRlLCAiZW51bWVyYXRpb25WYWx1ZSIpKTsKKyAgICAgICAgZW51bWVyYXRpb25WYWx1
ZVZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAi
ZW51bWVyYXRpb25WYWx1ZSIpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCB7IH0pOwogICAgIH0KICAgICBpZiAoIWVudW1lcmF0aW9uVmFsdWVWYWx1ZS5pc1VuZGVm
aW5lZCgpKSB7CkBAIC0xMjE0LDcgKzEyMTQsNyBAQCB0ZW1wbGF0ZTw+IEFsdGVybmF0ZURpY3Rp
b25hcnlOYW1lIGNvbnZlCiAgICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKQogICAgICAgICBib29s
ZWFuV2l0aG91dERlZmF1bHRWYWx1ZSA9IGpzVW5kZWZpbmVkKCk7CiAgICAgZWxzZSB7Ci0gICAg
ICAgIGJvb2xlYW5XaXRob3V0RGVmYXVsdFZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImJvb2xlYW5XaXRob3V0RGVmYXVsdCIpKTsKKyAg
ICAgICAgYm9vbGVhbldpdGhvdXREZWZhdWx0VmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJib29sZWFuV2l0aG91dERlZmF1bHQiKSk7CiAgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICB9CiAgICAgaWYg
KCFib29sZWFuV2l0aG91dERlZmF1bHRWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7CkBAIC0xMjI1LDcg
KzEyMjUsNyBAQCB0ZW1wbGF0ZTw+IEFsdGVybmF0ZURpY3Rpb25hcnlOYW1lIGNvbnZlCiAgICAg
aWYgKGlzTnVsbE9yVW5kZWZpbmVkKQogICAgICAgICBlbnVtZXJhdGlvblZhbHVlVmFsdWUgPSBq
c1VuZGVmaW5lZCgpOwogICAgIGVsc2UgewotICAgICAgICBlbnVtZXJhdGlvblZhbHVlVmFsdWUg
PSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAiZW51
bWVyYXRpb25WYWx1ZSIpKTsKKyAgICAgICAgZW51bWVyYXRpb25WYWx1ZVZhbHVlID0gb2JqZWN0
LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiZW51bWVyYXRpb25WYWx1
ZSIpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAg
IH0KICAgICBpZiAoIWVudW1lcmF0aW9uVmFsdWVWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7CkBAIC0x
MjUwLDcgKzEyNTAsNyBAQCB0ZW1wbGF0ZTw+IFRlc3RPYmo6OlBhcmVudERpY3Rpb25hcnkgY29u
CiAgICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKQogICAgICAgICBwYXJlbnRNZW1iZXIxVmFsdWUg
PSBqc1VuZGVmaW5lZCgpOwogICAgIGVsc2UgewotICAgICAgICBwYXJlbnRNZW1iZXIxVmFsdWUg
PSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAicGFy
ZW50TWVtYmVyMSIpKTsKKyAgICAgICAgcGFyZW50TWVtYmVyMVZhbHVlID0gb2JqZWN0LT5nZXQo
JnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAicGFyZW50TWVtYmVyMSIpKTsKICAg
ICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0KICAgICBp
ZiAoIXBhcmVudE1lbWJlcjFWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7CkBAIC0xMjYxLDcgKzEyNjEs
NyBAQCB0ZW1wbGF0ZTw+IFRlc3RPYmo6OlBhcmVudERpY3Rpb25hcnkgY29uCiAgICAgaWYgKGlz
TnVsbE9yVW5kZWZpbmVkKQogICAgICAgICBwYXJlbnRNZW1iZXIyVmFsdWUgPSBqc1VuZGVmaW5l
ZCgpOwogICAgIGVsc2UgewotICAgICAgICBwYXJlbnRNZW1iZXIyVmFsdWUgPSBvYmplY3QtPmdl
dCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAicGFyZW50TWVtYmVyMiIp
KTsKKyAgICAgICAgcGFyZW50TWVtYmVyMlZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAicGFyZW50TWVtYmVyMiIpKTsKICAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0KICAgICBpZiAoIXBhcmVudE1l
bWJlcjJWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7CkBAIC0xMjg2LDcgKzEyODYsNyBAQCB0ZW1wbGF0
ZTw+IFRlc3RPYmo6OkNoaWxkRGljdGlvbmFyeSBjb252CiAgICAgaWYgKGlzTnVsbE9yVW5kZWZp
bmVkKQogICAgICAgICBwYXJlbnRNZW1iZXIxVmFsdWUgPSBqc1VuZGVmaW5lZCgpOwogICAgIGVs
c2UgewotICAgICAgICBwYXJlbnRNZW1iZXIxVmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAicGFyZW50TWVtYmVyMSIpKTsKKyAgICAgICAg
cGFyZW50TWVtYmVyMVZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKHZtLCAicGFyZW50TWVtYmVyMSIpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0KICAgICBpZiAoIXBhcmVudE1lbWJlcjFWYWx1ZS5p
c1VuZGVmaW5lZCgpKSB7CkBAIC0xMjk3LDcgKzEyOTcsNyBAQCB0ZW1wbGF0ZTw+IFRlc3RPYmo6
OkNoaWxkRGljdGlvbmFyeSBjb252CiAgICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKQogICAgICAg
ICBwYXJlbnRNZW1iZXIyVmFsdWUgPSBqc1VuZGVmaW5lZCgpOwogICAgIGVsc2UgewotICAgICAg
ICBwYXJlbnRNZW1iZXIyVmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZy
b21TdHJpbmcoJnN0YXRlLCAicGFyZW50TWVtYmVyMiIpKTsKKyAgICAgICAgcGFyZW50TWVtYmVy
MlZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAi
cGFyZW50TWVtYmVyMiIpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3Bl
LCB7IH0pOwogICAgIH0KICAgICBpZiAoIXBhcmVudE1lbWJlcjJWYWx1ZS5pc1VuZGVmaW5lZCgp
KSB7CkBAIC0xMzA4LDcgKzEzMDgsNyBAQCB0ZW1wbGF0ZTw+IFRlc3RPYmo6OkNoaWxkRGljdGlv
bmFyeSBjb252CiAgICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKQogICAgICAgICBjaGlsZE1lbWJl
cjFWYWx1ZSA9IGpzVW5kZWZpbmVkKCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIGNoaWxkTWVtYmVy
MVZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0
ZSwgImNoaWxkTWVtYmVyMSIpKTsKKyAgICAgICAgY2hpbGRNZW1iZXIxVmFsdWUgPSBvYmplY3Qt
PmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJjaGlsZE1lbWJlcjEiKSk7
CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICB9CiAg
ICAgaWYgKCFjaGlsZE1lbWJlcjFWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7CkBAIC0xMzE5LDcgKzEz
MTksNyBAQCB0ZW1wbGF0ZTw+IFRlc3RPYmo6OkNoaWxkRGljdGlvbmFyeSBjb252CiAgICAgaWYg
KGlzTnVsbE9yVW5kZWZpbmVkKQogICAgICAgICBjaGlsZE1lbWJlcjJWYWx1ZSA9IGpzVW5kZWZp
bmVkKCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIGNoaWxkTWVtYmVyMlZhbHVlID0gb2JqZWN0LT5n
ZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImNoaWxkTWVtYmVyMiIp
KTsKKyAgICAgICAgY2hpbGRNZW1iZXIyVmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50
aWZpZXI6OmZyb21TdHJpbmcodm0sICJjaGlsZE1lbWJlcjIiKSk7CiAgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICB9CiAgICAgaWYgKCFjaGlsZE1lbWJl
cjJWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7CkBAIC0xMzQ2LDcgKzEzNDYsNyBAQCB0ZW1wbGF0ZTw+
IFRlc3RPYmo6OkNvbmRpdGlvbmFsRGljdGlvbmFyCiAgICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVk
KQogICAgICAgICBzdHJpbmdXaXRob3V0RGVmYXVsdFZhbHVlID0ganNVbmRlZmluZWQoKTsKICAg
ICBlbHNlIHsKLSAgICAgICAgc3RyaW5nV2l0aG91dERlZmF1bHRWYWx1ZSA9IG9iamVjdC0+Z2V0
KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJzdHJpbmdXaXRob3V0RGVm
YXVsdCIpKTsKKyAgICAgICAgc3RyaW5nV2l0aG91dERlZmF1bHRWYWx1ZSA9IG9iamVjdC0+Z2V0
KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInN0cmluZ1dpdGhvdXREZWZhdWx0
IikpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAg
fQogICAgIGlmICghc3RyaW5nV2l0aG91dERlZmF1bHRWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7CkBA
IC0xMzc1LDcgKzEzNzUsNyBAQCB0ZW1wbGF0ZTw+IFRlc3RPYmo6OkNvbmRpdGlvbmFsRGljdGlv
bmFyCiAgICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKQogICAgICAgICBzdHJpbmdXaXRob3V0RGVm
YXVsdFZhbHVlID0ganNVbmRlZmluZWQoKTsKICAgICBlbHNlIHsKLSAgICAgICAgc3RyaW5nV2l0
aG91dERlZmF1bHRWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZygmc3RhdGUsICJzdHJpbmdXaXRob3V0RGVmYXVsdCIpKTsKKyAgICAgICAgc3RyaW5nV2l0
aG91dERlZmF1bHRWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZyh2bSwgInN0cmluZ1dpdGhvdXREZWZhdWx0IikpOwogICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgfQogICAgIGlmICghc3RyaW5nV2l0aG91dERl
ZmF1bHRWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7CkBAIC0xNDA0LDcgKzE0MDQsNyBAQCB0ZW1wbGF0
ZTw+IFRlc3RPYmo6OkNvbmRpdGlvbmFsRGljdGlvbmFyCiAgICAgaWYgKGlzTnVsbE9yVW5kZWZp
bmVkKQogICAgICAgICBzdHJpbmdXaXRob3V0RGVmYXVsdFZhbHVlID0ganNVbmRlZmluZWQoKTsK
ICAgICBlbHNlIHsKLSAgICAgICAgc3RyaW5nV2l0aG91dERlZmF1bHRWYWx1ZSA9IG9iamVjdC0+
Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJzdHJpbmdXaXRob3V0
RGVmYXVsdCIpKTsKKyAgICAgICAgc3RyaW5nV2l0aG91dERlZmF1bHRWYWx1ZSA9IG9iamVjdC0+
Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInN0cmluZ1dpdGhvdXREZWZh
dWx0IikpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAg
ICAgfQogICAgIGlmICghc3RyaW5nV2l0aG91dERlZmF1bHRWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7
CkBAIC0xOTY4LDE5ICsxOTY4LDE5IEBAIHRlbXBsYXRlPD4gSlNWYWx1ZSBKU1Rlc3RPYmpDb25z
dHJ1Y3RvcjoKIHRlbXBsYXRlPD4gdm9pZCBKU1Rlc3RPYmpDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6
ZVByb3BlcnRpZXMoVk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQogewog
ICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3RPYmo6
OnByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9u
dERlbGV0ZSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0
eUF0dHJpYnV0ZTo6RG9udEVudW0pOwotICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1l
cy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKCZ2bSwgU3RyaW5nKCJUZXN0T2JqZWN0Il9zKSks
IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0
ZTo6RG9udEVudW0pOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwg
anNOb250cml2aWFsU3RyaW5nKHZtLCBTdHJpbmcoIlRlc3RPYmplY3QiX3MpKSwgSlNDOjpQcm9w
ZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51
bSk7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVy
KDIpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRy
aWJ1dGU6OkRvbnRFbnVtKTsKICAgICByZWlmeVN0YXRpY1Byb3BlcnRpZXModm0sIEpTVGVzdE9i
ajo6aW5mbygpLCBKU1Rlc3RPYmpDb25zdHJ1Y3RvclRhYmxlVmFsdWVzLCAqdGhpcyk7CiAjaWYg
RU5BQkxFKFRFU1RfRkVBVFVSRSkKICAgICBpZiAoIVJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNo
YXJlZEZlYXR1cmVzKCkudGVzdEZlYXR1cmVFbmFibGVkKCkpIHsKLSAgICAgICAgYXV0byBwcm9w
ZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgcmVpbnRlcnByZXRfY2FzdDxj
b25zdCBMQ2hhcio+KCJlbmFibGVkQXRSdW50aW1lQXR0cmlidXRlU3RhdGljIiksIHN0cmxlbigi
ZW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZVN0YXRpYyIpKTsKKyAgICAgICAgYXV0byBwcm9wZXJ0
eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0
IExDaGFyKj4oImVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGVTdGF0aWMiKSwgc3RybGVuKCJlbmFi
bGVkQXRSdW50aW1lQXR0cmlidXRlU3RhdGljIikpOwogICAgICAgICBWTTo6RGVsZXRlUHJvcGVy
dHlNb2RlU2NvcGUgc2NvcGUodm0sIFZNOjpEZWxldGVQcm9wZXJ0eU1vZGU6Oklnbm9yZUNvbmZp
Z3VyYWJsZSk7CiAgICAgICAgIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eSh0aGlzLCBnbG9iYWxP
YmplY3QuZ2xvYmFsRXhlYygpLCBwcm9wZXJ0eU5hbWUpOwogICAgIH0KICNlbmRpZgogI2lmIEVO
QUJMRShURVNUX0ZFQVRVUkUpCiAgICAgaWYgKCFSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFy
ZWRGZWF0dXJlcygpLnRlc3RGZWF0dXJlRW5hYmxlZCgpKSB7Ci0gICAgICAgIGF1dG8gcHJvcGVy
dHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgTENoYXIqPigiZW5hYmxlZEF0UnVudGltZU9wZXJhdGlvblN0YXRpYyIpLCBzdHJsZW4oImVu
YWJsZWRBdFJ1bnRpbWVPcGVyYXRpb25TdGF0aWMiKSk7CisgICAgICAgIGF1dG8gcHJvcGVydHlO
YW1lID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBM
Q2hhcio+KCJlbmFibGVkQXRSdW50aW1lT3BlcmF0aW9uU3RhdGljIiksIHN0cmxlbigiZW5hYmxl
ZEF0UnVudGltZU9wZXJhdGlvblN0YXRpYyIpKTsKICAgICAgICAgVk06OkRlbGV0ZVByb3BlcnR5
TW9kZVNjb3BlIHNjb3BlKHZtLCBWTTo6RGVsZXRlUHJvcGVydHlNb2RlOjpJZ25vcmVDb25maWd1
cmFibGUpOwogICAgICAgICBKU09iamVjdDo6ZGVsZXRlUHJvcGVydHkodGhpcywgZ2xvYmFsT2Jq
ZWN0Lmdsb2JhbEV4ZWMoKSwgcHJvcGVydHlOYW1lKTsKICAgICB9CkBAIC0yMzM0LDg0ICsyMzM0
LDg0IEBAIHZvaWQgSlNUZXN0T2JqUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbigKICNpZiBFTkFC
TEUoVEVTVF9GRUFUVVJFKQogICAgIGlmICghUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVk
RmVhdHVyZXMoKS50ZXN0RmVhdHVyZUVuYWJsZWQoKSkgewogICAgICAgICBoYXNEaXNhYmxlZFJ1
bnRpbWVQcm9wZXJ0aWVzID0gdHJ1ZTsKLSAgICAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJl
bmFibGVkQXRSdW50aW1lT3BlcmF0aW9uIiksIHN0cmxlbigiZW5hYmxlZEF0UnVudGltZU9wZXJh
dGlvbiIpKTsKKyAgICAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oImVuYWJsZWRBdFJ1bnRpbWVP
cGVyYXRpb24iKSwgc3RybGVuKCJlbmFibGVkQXRSdW50aW1lT3BlcmF0aW9uIikpOwogICAgICAg
ICBWTTo6RGVsZXRlUHJvcGVydHlNb2RlU2NvcGUgc2NvcGUodm0sIFZNOjpEZWxldGVQcm9wZXJ0
eU1vZGU6Oklnbm9yZUNvbmZpZ3VyYWJsZSk7CiAgICAgICAgIEpTT2JqZWN0OjpkZWxldGVQcm9w
ZXJ0eSh0aGlzLCBnbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpLCBwcm9wZXJ0eU5hbWUpOwog
ICAgIH0KICNlbmRpZgogICAgIGlmICghKHdvcmxkRm9yRE9NT2JqZWN0KCp0aGlzKS5zb21lV29y
bGQoKSAmJiBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLnRlc3RGZWF0
dXJlRW5hYmxlZCgpKSkgewogICAgICAgICBoYXNEaXNhYmxlZFJ1bnRpbWVQcm9wZXJ0aWVzID0g
dHJ1ZTsKLSAgICAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KCZ2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJlbmFibGVkSW5TcGVjaWZpY1dv
cmxkV2hlblJ1bnRpbWVGZWF0dXJlRW5hYmxlZCIpLCBzdHJsZW4oImVuYWJsZWRJblNwZWNpZmlj
V29ybGRXaGVuUnVudGltZUZlYXR1cmVFbmFibGVkIikpOworICAgICAgICBhdXRvIHByb3BlcnR5
TmFtZSA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
TENoYXIqPigiZW5hYmxlZEluU3BlY2lmaWNXb3JsZFdoZW5SdW50aW1lRmVhdHVyZUVuYWJsZWQi
KSwgc3RybGVuKCJlbmFibGVkSW5TcGVjaWZpY1dvcmxkV2hlblJ1bnRpbWVGZWF0dXJlRW5hYmxl
ZCIpKTsKICAgICAgICAgVk06OkRlbGV0ZVByb3BlcnR5TW9kZVNjb3BlIHNjb3BlKHZtLCBWTTo6
RGVsZXRlUHJvcGVydHlNb2RlOjpJZ25vcmVDb25maWd1cmFibGUpOwogICAgICAgICBKU09iamVj
dDo6ZGVsZXRlUHJvcGVydHkodGhpcywgZ2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKSwgcHJv
cGVydHlOYW1lKTsKICAgICB9CiAgICAgaWYgKCF3b3JsZEZvckRPTU9iamVjdCgqdGhpcykuc29t
ZVdvcmxkKCkpIHsKICAgICAgICAgaGFzRGlzYWJsZWRSdW50aW1lUHJvcGVydGllcyA9IHRydWU7
Ci0gICAgICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0s
IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigid29ybGRTcGVjaWZpY01ldGhvZCIpLCBz
dHJsZW4oIndvcmxkU3BlY2lmaWNNZXRob2QiKSk7CisgICAgICAgIGF1dG8gcHJvcGVydHlOYW1l
ID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hh
cio+KCJ3b3JsZFNwZWNpZmljTWV0aG9kIiksIHN0cmxlbigid29ybGRTcGVjaWZpY01ldGhvZCIp
KTsKICAgICAgICAgVk06OkRlbGV0ZVByb3BlcnR5TW9kZVNjb3BlIHNjb3BlKHZtLCBWTTo6RGVs
ZXRlUHJvcGVydHlNb2RlOjpJZ25vcmVDb25maWd1cmFibGUpOwogICAgICAgICBKU09iamVjdDo6
ZGVsZXRlUHJvcGVydHkodGhpcywgZ2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKSwgcHJvcGVy
dHlOYW1lKTsKICAgICB9CiAgICAgaWYgKCFqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihnbG9i
YWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+aXNTZWN1cmVDb250ZXh0KCkp
IHsKICAgICAgICAgaGFzRGlzYWJsZWRSdW50aW1lUHJvcGVydGllcyA9IHRydWU7Ci0gICAgICAg
IGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiY2FsY3VsYXRlU2VjcmV0UmVzdWx0IiksIHN0cmxlbigi
Y2FsY3VsYXRlU2VjcmV0UmVzdWx0IikpOworICAgICAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElk
ZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigi
Y2FsY3VsYXRlU2VjcmV0UmVzdWx0IiksIHN0cmxlbigiY2FsY3VsYXRlU2VjcmV0UmVzdWx0Iikp
OwogICAgICAgICBWTTo6RGVsZXRlUHJvcGVydHlNb2RlU2NvcGUgc2NvcGUodm0sIFZNOjpEZWxl
dGVQcm9wZXJ0eU1vZGU6Oklnbm9yZUNvbmZpZ3VyYWJsZSk7CiAgICAgICAgIEpTT2JqZWN0Ojpk
ZWxldGVQcm9wZXJ0eSh0aGlzLCBnbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpLCBwcm9wZXJ0
eU5hbWUpOwogICAgIH0KICAgICBpZiAoIWpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2Jh
bE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5pc1NlY3VyZUNvbnRleHQoKSkg
ewogICAgICAgICBoYXNEaXNhYmxlZFJ1bnRpbWVQcm9wZXJ0aWVzID0gdHJ1ZTsKLSAgICAgICAg
YXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJnZXRTZWNyZXRCb29sZWFuIiksIHN0cmxlbigiZ2V0U2Vj
cmV0Qm9vbGVhbiIpKTsKKyAgICAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oImdldFNlY3JldEJv
b2xlYW4iKSwgc3RybGVuKCJnZXRTZWNyZXRCb29sZWFuIikpOwogICAgICAgICBWTTo6RGVsZXRl
UHJvcGVydHlNb2RlU2NvcGUgc2NvcGUodm0sIFZNOjpEZWxldGVQcm9wZXJ0eU1vZGU6Oklnbm9y
ZUNvbmZpZ3VyYWJsZSk7CiAgICAgICAgIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eSh0aGlzLCBn
bG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpLCBwcm9wZXJ0eU5hbWUpOwogICAgIH0KICNpZiBF
TkFCTEUoVEVTVF9GRUFUVVJFKQogICAgIGlmICghKGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+
KGdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5pc1NlY3VyZUNvbnRl
eHQoKSAmJiBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLnRlc3RGZWF0
dXJlRW5hYmxlZCgpKSkgewogICAgICAgICBoYXNEaXNhYmxlZFJ1bnRpbWVQcm9wZXJ0aWVzID0g
dHJ1ZTsKLSAgICAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KCZ2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJ0ZXN0RmVhdHVyZUdldFNlY3Jl
dEJvb2xlYW4iKSwgc3RybGVuKCJ0ZXN0RmVhdHVyZUdldFNlY3JldEJvb2xlYW4iKSk7CisgICAg
ICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRl
cnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJ0ZXN0RmVhdHVyZUdldFNlY3JldEJvb2xlYW4iKSwg
c3RybGVuKCJ0ZXN0RmVhdHVyZUdldFNlY3JldEJvb2xlYW4iKSk7CiAgICAgICAgIFZNOjpEZWxl
dGVQcm9wZXJ0eU1vZGVTY29wZSBzY29wZSh2bSwgVk06OkRlbGV0ZVByb3BlcnR5TW9kZTo6SWdu
b3JlQ29uZmlndXJhYmxlKTsKICAgICAgICAgSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KHRoaXMs
IGdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCksIHByb3BlcnR5TmFtZSk7CiAgICAgfQogI2Vu
ZGlmCiAgICAgaWYgKCFqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QoKSkt
PnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+aXNEb2N1bWVudCgpKSB7CiAgICAgICAgIGhhc0Rp
c2FibGVkUnVudGltZVByb3BlcnRpZXMgPSB0cnVlOwotICAgICAgICBhdXRvIHByb3BlcnR5TmFt
ZSA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExD
aGFyKj4oImNvbmRpdGlvbmFsbHlFeHBvc2VkVG9XaW5kb3dGdW5jdGlvbiIpLCBzdHJsZW4oImNv
bmRpdGlvbmFsbHlFeHBvc2VkVG9XaW5kb3dGdW5jdGlvbiIpKTsKKyAgICAgICAgYXV0byBwcm9w
ZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNv
bnN0IExDaGFyKj4oImNvbmRpdGlvbmFsbHlFeHBvc2VkVG9XaW5kb3dGdW5jdGlvbiIpLCBzdHJs
ZW4oImNvbmRpdGlvbmFsbHlFeHBvc2VkVG9XaW5kb3dGdW5jdGlvbiIpKTsKICAgICAgICAgVk06
OkRlbGV0ZVByb3BlcnR5TW9kZVNjb3BlIHNjb3BlKHZtLCBWTTo6RGVsZXRlUHJvcGVydHlNb2Rl
OjpJZ25vcmVDb25maWd1cmFibGUpOwogICAgICAgICBKU09iamVjdDo6ZGVsZXRlUHJvcGVydHko
dGhpcywgZ2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKSwgcHJvcGVydHlOYW1lKTsKICAgICB9
CiAgICAgaWYgKCFqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QoKSktPnNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+aXNXb3JrZXJHbG9iYWxTY29wZSgpKSB7CiAgICAgICAg
IGhhc0Rpc2FibGVkUnVudGltZVByb3BlcnRpZXMgPSB0cnVlOwotICAgICAgICBhdXRvIHByb3Bl
cnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCByZWludGVycHJldF9jYXN0PGNv
bnN0IExDaGFyKj4oImNvbmRpdGlvbmFsbHlFeHBvc2VkVG9Xb3JrZXJGdW5jdGlvbiIpLCBzdHJs
ZW4oImNvbmRpdGlvbmFsbHlFeHBvc2VkVG9Xb3JrZXJGdW5jdGlvbiIpKTsKKyAgICAgICAgYXV0
byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9j
YXN0PGNvbnN0IExDaGFyKj4oImNvbmRpdGlvbmFsbHlFeHBvc2VkVG9Xb3JrZXJGdW5jdGlvbiIp
LCBzdHJsZW4oImNvbmRpdGlvbmFsbHlFeHBvc2VkVG9Xb3JrZXJGdW5jdGlvbiIpKTsKICAgICAg
ICAgVk06OkRlbGV0ZVByb3BlcnR5TW9kZVNjb3BlIHNjb3BlKHZtLCBWTTo6RGVsZXRlUHJvcGVy
dHlNb2RlOjpJZ25vcmVDb25maWd1cmFibGUpOwogICAgICAgICBKU09iamVjdDo6ZGVsZXRlUHJv
cGVydHkodGhpcywgZ2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKSwgcHJvcGVydHlOYW1lKTsK
ICAgICB9CiAgICAgaWYgKCEoanNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0
KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmlzU2VjdXJlQ29udGV4dCgpfHwganNDYXN0
PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250
ZXh0KCktPmFsbG93c01lZGlhRGV2aWNlcygpKSkgewogICAgICAgICBoYXNEaXNhYmxlZFJ1bnRp
bWVQcm9wZXJ0aWVzID0gdHJ1ZTsKLSAgICAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKCZ2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJtZWRp
YURldmljZXMiKSwgc3RybGVuKCJtZWRpYURldmljZXMiKSk7CisgICAgICAgIGF1dG8gcHJvcGVy
dHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25z
dCBMQ2hhcio+KCJtZWRpYURldmljZXMiKSwgc3RybGVuKCJtZWRpYURldmljZXMiKSk7CiAgICAg
ICAgIFZNOjpEZWxldGVQcm9wZXJ0eU1vZGVTY29wZSBzY29wZSh2bSwgVk06OkRlbGV0ZVByb3Bl
cnR5TW9kZTo6SWdub3JlQ29uZmlndXJhYmxlKTsKICAgICAgICAgSlNPYmplY3Q6OmRlbGV0ZVBy
b3BlcnR5KHRoaXMsIGdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCksIHByb3BlcnR5TmFtZSk7
CiAgICAgfQogICAgIGlmICghKGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVj
dCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5pc1NlY3VyZUNvbnRleHQoKXx8IGpzQ2Fz
dDxKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpLT5oYXNTZXJ2aWNlV29ya2VyU2NoZW1lKCkpKSB7CiAgICAgICAgIGhhc0Rpc2FibGVk
UnVudGltZVByb3BlcnRpZXMgPSB0cnVlOwotICAgICAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElk
ZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4o
InNlcnZpY2VXb3JrZXJzIiksIHN0cmxlbigic2VydmljZVdvcmtlcnMiKSk7CisgICAgICAgIGF1
dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBMQ2hhcio+KCJzZXJ2aWNlV29ya2VycyIpLCBzdHJsZW4oInNlcnZpY2VXb3Jr
ZXJzIikpOwogICAgICAgICBWTTo6RGVsZXRlUHJvcGVydHlNb2RlU2NvcGUgc2NvcGUodm0sIFZN
OjpEZWxldGVQcm9wZXJ0eU1vZGU6Oklnbm9yZUNvbmZpZ3VyYWJsZSk7CiAgICAgICAgIEpTT2Jq
ZWN0OjpkZWxldGVQcm9wZXJ0eSh0aGlzLCBnbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpLCBw
cm9wZXJ0eU5hbWUpOwogICAgIH0KICNpZiBFTkFCTEUoVEVTVF9GRUFUVVJFKQogICAgIGlmICgh
KFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkudGVzdEZlYXR1cmVFbmFi
bGVkKCkgJiYgUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS50ZXN0RmVh
dHVyZTFFbmFibGVkKCkpKSB7CiAgICAgICAgIGhhc0Rpc2FibGVkUnVudGltZVByb3BlcnRpZXMg
PSB0cnVlOwotICAgICAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb21TdHJp
bmcoJnZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oImVuYWJsZWRBdFJ1bnRpbWVB
dHRyaWJ1dGUiKSwgc3RybGVuKCJlbmFibGVkQXRSdW50aW1lQXR0cmlidXRlIikpOworICAgICAg
ICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiZW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZSIpLCBzdHJs
ZW4oImVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGUiKSk7CiAgICAgICAgIFZNOjpEZWxldGVQcm9w
ZXJ0eU1vZGVTY29wZSBzY29wZSh2bSwgVk06OkRlbGV0ZVByb3BlcnR5TW9kZTo6SWdub3JlQ29u
ZmlndXJhYmxlKTsKICAgICAgICAgSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KHRoaXMsIGdsb2Jh
bE9iamVjdCgpLT5nbG9iYWxFeGVjKCksIHByb3BlcnR5TmFtZSk7CiAgICAgfQogI2VuZGlmCiAg
ICAgaWYgKCFqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QoKSktPnNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKS0+aXNEb2N1bWVudCgpKSB7CiAgICAgICAgIGhhc0Rpc2FibGVk
UnVudGltZVByb3BlcnRpZXMgPSB0cnVlOwotICAgICAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElk
ZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4o
ImNvbmRpdGlvbmFsbHlFeHBvc2VkVG9XaW5kb3dBdHRyaWJ1dGUiKSwgc3RybGVuKCJjb25kaXRp
b25hbGx5RXhwb3NlZFRvV2luZG93QXR0cmlidXRlIikpOworICAgICAgICBhdXRvIHByb3BlcnR5
TmFtZSA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
TENoYXIqPigiY29uZGl0aW9uYWxseUV4cG9zZWRUb1dpbmRvd0F0dHJpYnV0ZSIpLCBzdHJsZW4o
ImNvbmRpdGlvbmFsbHlFeHBvc2VkVG9XaW5kb3dBdHRyaWJ1dGUiKSk7CiAgICAgICAgIFZNOjpE
ZWxldGVQcm9wZXJ0eU1vZGVTY29wZSBzY29wZSh2bSwgVk06OkRlbGV0ZVByb3BlcnR5TW9kZTo6
SWdub3JlQ29uZmlndXJhYmxlKTsKICAgICAgICAgSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KHRo
aXMsIGdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCksIHByb3BlcnR5TmFtZSk7CiAgICAgfQog
ICAgIGlmICghanNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KCkpLT5zY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCktPmlzV29ya2VyR2xvYmFsU2NvcGUoKSkgewogICAgICAgICBo
YXNEaXNhYmxlZFJ1bnRpbWVQcm9wZXJ0aWVzID0gdHJ1ZTsKLSAgICAgICAgYXV0byBwcm9wZXJ0
eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25z
dCBMQ2hhcio+KCJjb25kaXRpb25hbGx5RXhwb3NlZFRvV29ya2VyQXR0cmlidXRlIiksIHN0cmxl
bigiY29uZGl0aW9uYWxseUV4cG9zZWRUb1dvcmtlckF0dHJpYnV0ZSIpKTsKKyAgICAgICAgYXV0
byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9j
YXN0PGNvbnN0IExDaGFyKj4oImNvbmRpdGlvbmFsbHlFeHBvc2VkVG9Xb3JrZXJBdHRyaWJ1dGUi
KSwgc3RybGVuKCJjb25kaXRpb25hbGx5RXhwb3NlZFRvV29ya2VyQXR0cmlidXRlIikpOwogICAg
ICAgICBWTTo6RGVsZXRlUHJvcGVydHlNb2RlU2NvcGUgc2NvcGUodm0sIFZNOjpEZWxldGVQcm9w
ZXJ0eU1vZGU6Oklnbm9yZUNvbmZpZ3VyYWJsZSk7CiAgICAgICAgIEpTT2JqZWN0OjpkZWxldGVQ
cm9wZXJ0eSh0aGlzLCBnbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpLCBwcm9wZXJ0eU5hbWUp
OwogICAgIH0KQEAgLTI0MjIsOCArMjQyMiw4IEBAIHZvaWQgSlNUZXN0T2JqUHJvdG90eXBlOjpm
aW5pc2hDcmVhdGlvbigKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPml0ZXJh
dG9yU3ltYm9sLCBnbG9iYWxPYmplY3QoKS0+YXJyYXlQcm90b3R5cGUoKS0+Z2V0RGlyZWN0KHZt
LCB2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS52YWx1ZXNQcml2YXRlTmFtZSgpKSwg
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7
CiAgICAgYWRkVmFsdWVJdGVyYWJsZU1ldGhvZHMoKmdsb2JhbE9iamVjdCgpLCAqdGhpcyk7CiAg
ICAgSlNPYmplY3QmIHVuc2NvcGFibGVzID0gKmNvbnN0cnVjdEVtcHR5T2JqZWN0KGdsb2JhbE9i
amVjdCgpLT5nbG9iYWxFeGVjKCksIGdsb2JhbE9iamVjdCgpLT5udWxsUHJvdG90eXBlT2JqZWN0
U3RydWN0dXJlKCkpOwotICAgIHVuc2NvcGFibGVzLnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZygmdm0sICJ2b2lkTWV0aG9kIiksIGpzQm9vbGVhbih0cnVlKSk7Ci0gICAgdW5z
Y29wYWJsZXMucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgInNob3J0
QXR0ciIpLCBqc0Jvb2xlYW4odHJ1ZSkpOworICAgIHVuc2NvcGFibGVzLnB1dERpcmVjdCh2bSwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInZvaWRNZXRob2QiKSwganNCb29sZWFuKHRydWUp
KTsKKyAgICB1bnNjb3BhYmxlcy5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmco
dm0sICJzaG9ydEF0dHIiKSwganNCb29sZWFuKHRydWUpKTsKICAgICBwdXREaXJlY3RXaXRob3V0
VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+dW5zY29wYWJsZXNTeW1ib2wsICZ1bnNj
b3BhYmxlcywgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBKU0M6OlByb3BlcnR5
QXR0cmlidXRlOjpSZWFkT25seSk7CiB9CiAKQEAgLTI0OTIsMTAgKzI0OTIsMTEgQEAgYm9vbCBK
U1Rlc3RPYmo6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZQogCiB2b2lkIEpTVGVzdE9iajo6Z2V0
T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIHN0YXRlLCBQcm9w
ZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7Cisg
ICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxK
U1Rlc3RPYmoqPihvYmplY3QpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMob2JqZWN0
LCBpbmZvKCkpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDAsIGNvdW50ID0gdGhpc09iamVjdC0+
d3JhcHBlZCgpLmxlbmd0aCgpOyBpIDwgY291bnQ7ICsraSkKLSAgICAgICAgcHJvcGVydHlOYW1l
cy5hZGQoSWRlbnRpZmllcjo6ZnJvbShzdGF0ZSwgaSkpOworICAgICAgICBwcm9wZXJ0eU5hbWVz
LmFkZChJZGVudGlmaWVyOjpmcm9tKHZtLCBpKSk7CiAgICAgSlNPYmplY3Q6OmdldE93blByb3Bl
cnR5TmFtZXMob2JqZWN0LCBzdGF0ZSwgcHJvcGVydHlOYW1lcywgbW9kZSk7CiB9CiAKQEAgLTI2
NjUsNiArMjY2Niw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNvbnN0cnVjdG9yU3RhdGkK
IAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakNvbnN0cnVjdG9yU3RhdGljU3RyaW5n
QXR0clNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKQogeworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmlu
Zz4oc3RhdGUsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZh
bHNlKTsKQEAgLTI3MjUsNiArMjcyNyw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakVudW1B
dHRyKEV4ZWNTdGEKIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakVudW1BdHRyU2V0
dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1
ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwog
ICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVj
dC53cmFwcGVkKCk7CiAgICAgYXV0byBvcHRpb25hbE5hdGl2ZVZhbHVlID0gcGFyc2VFbnVtZXJh
dGlvbjxUZXN0T2JqOjpFbnVtVHlwZT4oc3RhdGUsIHZhbHVlKTsKQEAgLTI3NTksNiArMjc2Miw3
IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakJ5dGVBdHRyKEV4ZWNTdGEKIAogc3RhdGljIGlu
bGluZSBib29sIHNldEpTVGVzdE9iakJ5dGVBdHRyU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpT
VGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29w
ZSkKIHsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBu
YXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMQnl0ZT4oc3RhdGUsIHZhbHVlKTsKQEAgLTI3OTAsNiAr
Mjc5NCw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iak9jdGV0QXR0cihFeGVjU3QKIAogc3Rh
dGljIGlubGluZSBib29sIHNldEpTVGVzdE9iak9jdGV0QXR0clNldHRlcihFeGVjU3RhdGUmIHN0
YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRo
cm93U2NvcGUpCiB7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAg
IGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETE9jdGV0PihzdGF0ZSwgdmFsdWUpOwpAQCAt
MjgyMSw2ICsyODI2LDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqU2hvcnRBdHRyKEV4ZWNT
dAogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqU2hvcnRBdHRyU2V0dGVyKEV4ZWNT
dGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dT
Y29wZSYgdGhyb3dTY29wZSkKIHsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVk
KCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMU2hvcnQ+KHN0YXRlLCB2YWx1
ZSk7CkBAIC0yODUyLDYgKzI4NTgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDbGFtcGVk
U2hvcnRBdHRyCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpDbGFtcGVkU2hvcnRB
dHRyU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1
ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKKyAgICBVTlVTRURfUEFSQU0oc3Rh
dGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gdGhp
c09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMQ2xh
bXBBZGFwdG9yPElETFNob3J0Pj4oc3RhdGUsIHZhbHVlKTsKQEAgLTI4ODMsNiArMjg5MCw3IEBA
IEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakVuZm9yY2VSYW5nZVNob3IKIAogc3RhdGljIGlubGlu
ZSBib29sIHNldEpTVGVzdE9iakVuZm9yY2VSYW5nZVNob3J0QXR0clNldHRlcihFeGVjU3RhdGUm
IHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUm
IHRocm93U2NvcGUpCiB7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwog
ICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETEVuZm9yY2VSYW5nZUFkYXB0b3I8SURM
U2hvcnQ+PihzdGF0ZSwgdmFsdWUpOwpAQCAtMjkxNCw2ICsyOTIyLDcgQEAgRW5jb2RlZEpTVmFs
dWUganNUZXN0T2JqVW5zaWduZWRTaG9ydEF0dAogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNU
ZXN0T2JqVW5zaWduZWRTaG9ydEF0dHJTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2Jq
JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewor
ICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwog
ICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZh
bHVlID0gY29udmVydDxJRExVbnNpZ25lZFNob3J0PihzdGF0ZSwgdmFsdWUpOwpAQCAtMjk0NSw2
ICsyOTU0LDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqTG9uZ0F0dHIoRXhlY1N0YQogCiBz
dGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqTG9uZ0F0dHJTZXR0ZXIoRXhlY1N0YXRlJiBz
dGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKQogeworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAg
ICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExMb25nPihzdGF0ZSwgdmFsdWUpOwpAQCAt
Mjk3Niw2ICsyOTg2LDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqTG9uZ0xvbmdBdHRyKEV4
ZQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqTG9uZ0xvbmdBdHRyU2V0dGVyKEV4
ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhy
b3dTY29wZSYgdGhyb3dTY29wZSkKIHsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFw
cGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMTG9uZ0xvbmc+KHN0YXRl
LCB2YWx1ZSk7CkBAIC0zMDA3LDYgKzMwMTgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpV
bnNpZ25lZExvbmdMb25nCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpVbnNpZ25l
ZExvbmdMb25nQXR0clNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmpl
Y3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CisgICAgVU5VU0VE
X1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYg
aW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252
ZXJ0PElETFVuc2lnbmVkTG9uZ0xvbmc+KHN0YXRlLCB2YWx1ZSk7CkBAIC0zMDM4LDYgKzMwNTAs
NyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdBdHRyKEV4ZWNTCiAKIHN0YXRpYyBp
bmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpTdHJpbmdBdHRyU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUs
IEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dT
Y29wZSkKIHsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0
byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPihzdGF0ZSwgdmFsdWUpOwpAQCAt
MzA2OSw2ICszMDgyLDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqVXN2c3RyaW5nQXR0cihF
eAogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqVXN2c3RyaW5nQXR0clNldHRlcihF
eGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRo
cm93U2NvcGUmIHRocm93U2NvcGUpCiB7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3Jh
cHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETFVTVlN0cmluZz4oc3Rh
dGUsIHZhbHVlKTsKQEAgLTMxMDAsNiArMzExNCw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9i
alRlc3RPYmpBdHRyKEV4ZWMKIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialRlc3RP
YmpBdHRyU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNW
YWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKKyAgICBVTlVTRURfUEFSQU0o
c3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0g
dGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURM
SW50ZXJmYWNlPFRlc3RPYmo+PihzdGF0ZSwgdmFsdWUsIFtdKEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0F0dHJpYnV0ZVR5cGVFcnJvcihzdGF0
ZSwgc2NvcGUsICJUZXN0T2JqZWN0IiwgInRlc3RPYmpBdHRyIiwgIlRlc3RPYmoiKTsgfSk7CkBA
IC0zMTMxLDYgKzMxNDYsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpUZXN0TnVsbGFibGVP
YmpBCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpUZXN0TnVsbGFibGVPYmpBdHRy
U2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2
YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUp
OwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09i
amVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMTnVsbGFi
bGU8SURMSW50ZXJmYWNlPFRlc3RPYmo+Pj4oc3RhdGUsIHZhbHVlLCBbXShKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBdHRyaWJ1dGVUeXBlRXJy
b3Ioc3RhdGUsIHNjb3BlLCAiVGVzdE9iamVjdCIsICJ0ZXN0TnVsbGFibGVPYmpBdHRyIiwgIlRl
c3RPYmoiKTsgfSk7CkBAIC0zMTYyLDYgKzMxNzgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpMZW5pZW50VGVzdE9iakF0CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpMZW5p
ZW50VGVzdE9iakF0dHJTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2Jq
ZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogeworICAgIFVOVVNF
RF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8m
IGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29u
dmVydDxJRExJbnRlcmZhY2U8VGVzdE9iaj4+KHN0YXRlLCB2YWx1ZSwgW10oSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXR0cmlidXRlVHlwZUVy
cm9yKHN0YXRlLCBzY29wZSwgIlRlc3RPYmplY3QiLCAibGVuaWVudFRlc3RPYmpBdHRyIiwgIlRl
c3RPYmoiKTsgfSk7CkBAIC0zMjA3LDYgKzMyMjQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpTdHJpbmdBdHRyVHJlYXRpCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpTdHJp
bmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZ1NldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBK
U1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2Nv
cGUpCiB7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8g
bmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETFRyZWF0TnVsbEFzRW1wdHlBZGFwdG9yPElETERPTVN0
cmluZz4+KHN0YXRlLCB2YWx1ZSk7CkBAIC0zMjM4LDYgKzMyNTYsNyBAQCBFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RPYmpVc3ZzdHJpbmdBdHRyVHJlCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rl
c3RPYmpVc3ZzdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZ1NldHRlcihFeGVjU3Rh
dGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2Nv
cGUmIHRocm93U2NvcGUpCiB7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgp
OwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETFRyZWF0TnVsbEFzRW1wdHlBZGFw
dG9yPElETFVTVlN0cmluZz4+KHN0YXRlLCB2YWx1ZSk7CkBAIC0zMjY5LDYgKzMyODgsNyBAQCBF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpCeXRlU3RyaW5nQXR0clRyCiAKIHN0YXRpYyBpbmxpbmUg
Ym9vbCBzZXRKU1Rlc3RPYmpCeXRlU3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmdT
ZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZh
bHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogeworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7
CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2Jq
ZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExUcmVhdE51
bGxBc0VtcHR5QWRhcHRvcjxJRExCeXRlU3RyaW5nPj4oc3RhdGUsIHZhbHVlKTsKQEAgLTMzMDAs
NiArMzMyMCw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialN0cmluZ0xvbmdSZWNvcmQKIAog
c3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialN0cmluZ0xvbmdSZWNvcmRBdHRyU2V0dGVy
KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwg
VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAg
IFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53
cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMUmVjb3JkPElETERP
TVN0cmluZywgSURMTG9uZz4+KHN0YXRlLCB2YWx1ZSk7CkBAIC0zMzMxLDYgKzMzNTIsNyBAQCBF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpVc3ZzdHJpbmdMb25nUmVjCiAKIHN0YXRpYyBpbmxpbmUg
Ym9vbCBzZXRKU1Rlc3RPYmpVc3ZzdHJpbmdMb25nUmVjb3JkQXR0clNldHRlcihFeGVjU3RhdGUm
IHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUm
IHRocm93U2NvcGUpCiB7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwog
ICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETFJlY29yZDxJRExVU1ZTdHJpbmcsIElE
TExvbmc+PihzdGF0ZSwgdmFsdWUpOwpAQCAtMzM2Miw2ICszMzg0LDcgQEAgRW5jb2RlZEpTVmFs
dWUganNUZXN0T2JqVXN2c3RyaW5nTG9uZ1JlYwogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNU
ZXN0T2JqVXN2c3RyaW5nTG9uZ1JlY29yZEF0dHJTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNU
ZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KQogeworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5h
dGl2ZVZhbHVlID0gY29udmVydDxJRExSZWNvcmQ8SURMQnl0ZVN0cmluZywgSURMTG9uZz4+KHN0
YXRlLCB2YWx1ZSk7CkBAIC0zMzkzLDYgKzM0MTYsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpTdHJpbmdPYmpSZWNvcmRBCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpTdHJp
bmdPYmpSZWNvcmRBdHRyU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09i
amVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKKyAgICBVTlVT
RURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRv
JiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNv
bnZlcnQ8SURMUmVjb3JkPElETERPTVN0cmluZywgSURMSW50ZXJmYWNlPFRlc3RPYmo+Pj4oc3Rh
dGUsIHZhbHVlKTsKQEAgLTM0MjQsNiArMzQ0OCw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9i
alN0cmluZ051bGxhYmxlT2IKIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialN0cmlu
Z051bGxhYmxlT2JqUmVjb3JkQXR0clNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmom
IHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Cisg
ICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAg
ICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFs
dWUgPSBjb252ZXJ0PElETFJlY29yZDxJRExET01TdHJpbmcsIElETE51bGxhYmxlPElETEludGVy
ZmFjZTxUZXN0T2JqPj4+PihzdGF0ZSwgdmFsdWUpOwpAQCAtMzQ1NSw2ICszNDgwLDcgQEAgRW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqRGljdGlvbmFyeUF0dHIoRQogCiBzdGF0aWMgaW5saW5lIGJv
b2wgc2V0SlNUZXN0T2JqRGljdGlvbmFyeUF0dHJTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNU
ZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KQogeworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5h
dGl2ZVZhbHVlID0gY29udmVydDxJRExEaWN0aW9uYXJ5PFRlc3RPYmo6OkRpY3Rpb25hcnk+Pihz
dGF0ZSwgdmFsdWUpOwpAQCAtMzQ4Niw2ICszNTEyLDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqTnVsbGFibGVEaWN0aW9uYQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqTnVs
bGFibGVEaWN0aW9uYXJ5QXR0clNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRo
aXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CisgICAg
VU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAg
YXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUg
PSBjb252ZXJ0PElETE51bGxhYmxlPElETERpY3Rpb25hcnk8VGVzdE9iajo6RGljdGlvbmFyeT4+
PihzdGF0ZSwgdmFsdWUpOwpAQCAtMzUxNyw2ICszNTQ0LDcgQEAgRW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqQW5ub3RhdGVkVHlwZUluVQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2Jq
QW5ub3RhdGVkVHlwZUluVW5pb25BdHRyU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9i
aiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsK
KyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
ICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVW
YWx1ZSA9IGNvbnZlcnQ8SURMVW5pb248SURMRE9NU3RyaW5nLCBJRExDbGFtcEFkYXB0b3I8SURM
TG9uZz4+PihzdGF0ZSwgdmFsdWUpOwpAQCAtMzU0OCw2ICszNTc2LDcgQEAgRW5jb2RlZEpTVmFs
dWUganNUZXN0T2JqQW5ub3RhdGVkVHlwZUluUwogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNU
ZXN0T2JqQW5ub3RhdGVkVHlwZUluU2VxdWVuY2VBdHRyU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUs
IEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dT
Y29wZSkKIHsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0
byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMU2VxdWVuY2U8SURMQ2xhbXBBZGFwdG9yPElETExv
bmc+Pj4oc3RhdGUsIHZhbHVlKTsKQEAgLTM1NzksNiArMzYwOCw3IEBAIEVuY29kZWRKU1ZhbHVl
IGpzVGVzdE9iakltcGxlbWVudGF0aW9uRW4KIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVz
dE9iakltcGxlbWVudGF0aW9uRW51bUF0dHJTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0
T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQog
eworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG9wdGlv
bmFsTmF0aXZlVmFsdWUgPSBwYXJzZUVudW1lcmF0aW9uPEFsdGVybmF0ZUVudW1OYW1lPihzdGF0
ZSwgdmFsdWUpOwpAQCAtMzY0MSw2ICszNjcxLDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2Jq
WE1MT2JqQXR0cihFeGVjUwogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqWE1MT2Jq
QXR0clNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFs
dWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CisgICAgVU5VU0VEX1BBUkFNKHN0
YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRo
aXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETElu
dGVyZmFjZTxUZXN0T2JqPj4oc3RhdGUsIHZhbHVlLCBbXShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBdHRyaWJ1dGVUeXBlRXJyb3Ioc3RhdGUs
IHNjb3BlLCAiVGVzdE9iamVjdCIsICJYTUxPYmpBdHRyIiwgIlRlc3RPYmoiKTsgfSk7CkBAIC0z
NjcyLDYgKzM3MDMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDcmVhdGUoRXhlY1N0YXRl
CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpDcmVhdGVTZXR0ZXIoRXhlY1N0YXRl
JiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKQogeworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsK
ICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExCb29sZWFuPihzdGF0ZSwgdmFsdWUp
OwpAQCAtMzcwMyw2ICszNzM1LDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVk
U3RyaW5nQQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkU3RyaW5n
QXR0clNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFs
dWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CisgICAgVU5VU0VEX1BBUkFNKHN0
YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRo
aXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERP
TVN0cmluZz4oc3RhdGUsIHZhbHVlKTsKQEAgLTM3MzQsNiArMzc2Nyw3IEBAIEVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9ialJlZmxlY3RlZFVTVlN0cmkKIAogc3RhdGljIGlubGluZSBib29sIHNldEpT
VGVzdE9ialJlZmxlY3RlZFVTVlN0cmluZ0F0dHJTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNU
ZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KQogeworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5h
dGl2ZVZhbHVlID0gY29udmVydDxJRExVU1ZTdHJpbmc+KHN0YXRlLCB2YWx1ZSk7CkBAIC0zNzY1
LDYgKzM3OTksNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRJbnRlZ3JhCiAK
IHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRJbnRlZ3JhbEF0dHJTZXR0
ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVl
LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogeworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0
LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExMb25nPihzdGF0
ZSwgdmFsdWUpOwpAQCAtMzc5Niw2ICszODMxLDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2Jq
UmVmbGVjdGVkVW5zaWduZQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVj
dGVkVW5zaWduZWRJbnRlZ3JhbEF0dHJTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2Jq
JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewor
ICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwog
ICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZh
bHVlID0gY29udmVydDxJRExVbnNpZ25lZExvbmc+KHN0YXRlLCB2YWx1ZSk7CkBAIC0zODI3LDYg
KzM4NjMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRCb29sZWFuCiAKIHN0
YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRCb29sZWFuQXR0clNldHRlcihF
eGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRo
cm93U2NvcGUmIHRocm93U2NvcGUpCiB7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3Jh
cHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETEJvb2xlYW4+KHN0YXRl
LCB2YWx1ZSk7CkBAIC0zODU4LDYgKzM4OTUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpS
ZWZsZWN0ZWRVUkxBdHRyCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0
ZWRVUkxBdHRyU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwg
SlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKKyAgICBVTlVTRURfUEFS
QU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBs
ID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8
SURMRE9NU3RyaW5nPihzdGF0ZSwgdmFsdWUpOwpAQCAtMzg4OSw2ICszOTI3LDcgQEAgRW5jb2Rl
ZEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkVVNWVVJMQQogCiBzdGF0aWMgaW5saW5lIGJvb2wg
c2V0SlNUZXN0T2JqUmVmbGVjdGVkVVNWVVJMQXR0clNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBK
U1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2Nv
cGUpCiB7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8g
bmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETFVTVlN0cmluZz4oc3RhdGUsIHZhbHVlKTsKQEAgLTM5
MjAsNiArMzk1OSw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZFN0cmluZ0EK
IAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZFN0cmluZ0F0dHJTZXR0
ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVl
LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogeworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0
LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+
KHN0YXRlLCB2YWx1ZSk7CkBAIC0zOTUxLDYgKzM5OTEsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpSZWZsZWN0ZWRDdXN0b21JCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpS
ZWZsZWN0ZWRDdXN0b21JbnRlZ3JhbEF0dHJTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0
T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQog
eworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2
ZVZhbHVlID0gY29udmVydDxJRExMb25nPihzdGF0ZSwgdmFsdWUpOwpAQCAtMzk4Miw2ICs0MDIz
LDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tQgogCiBzdGF0aWMg
aW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tQm9vbGVhbkF0dHJTZXR0ZXIo
RXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogeworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAg
VU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0Lndy
YXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExCb29sZWFuPihzdGF0
ZSwgdmFsdWUpOwpAQCAtNDAxMyw2ICs0MDU1LDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2Jq
UmVmbGVjdGVkQ3VzdG9tVQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVj
dGVkQ3VzdG9tVVJMQXR0clNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNP
YmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CisgICAgVU5V
U0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0
byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBj
b252ZXJ0PElETERPTVN0cmluZz4oc3RhdGUsIHZhbHVlKTsKQEAgLTQwNDgsNiArNDA5MSw3IEBA
IEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakVuYWJsZWRBdFJ1bnRpbWUKICNpZiBFTkFCTEUoVEVT
VF9GRUFUVVJFKQogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakVuYWJsZWRBdFJ1bnRp
bWVBdHRyaWJ1dGVTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0
LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogeworICAgIFVOVVNFRF9Q
QVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGlt
cGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVy
dDxJRExET01TdHJpbmc+KHN0YXRlLCB2YWx1ZSk7CkBAIC00MDg0LDYgKzQxMjgsNyBAQCBFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25zdHJ1Y3RvckVuYWJsCiAjaWYgRU5BQkxFKFRFU1RfRkVB
VFVSRSkKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpDb25zdHJ1Y3RvckVuYWJsZWRB
dFJ1bnRpbWVBdHRyaWJ1dGVTdGF0aWNTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2
YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUp
OwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0g
Y29udmVydDxJRExET01TdHJpbmc+KHN0YXRlLCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC00MTE2LDYgKzQxNjEsNyBAQCBFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RPYmpUeXBlZEFycmF5QXR0cihFCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRK
U1Rlc3RPYmpUeXBlZEFycmF5QXR0clNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmom
IHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Cisg
ICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAg
ICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFs
dWUgPSBjb252ZXJ0PElETEZsb2F0MzJBcnJheT4oc3RhdGUsIHZhbHVlLCBbXShKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBdHRyaWJ1dGVUeXBl
RXJyb3Ioc3RhdGUsIHNjb3BlLCAiVGVzdE9iamVjdCIsICJ0eXBlZEFycmF5QXR0ciIsICJGbG9h
dDMyQXJyYXkiKTsgfSk7CkBAIC00MTQ1LDYgKzQxOTEsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpDdXN0b21BdHRyKEV4ZWNTCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpD
dXN0b21BdHRyU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwg
SlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKKyAgICBVTlVTRURfUEFS
QU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICB0aGlzT2JqZWN0
LnNldEN1c3RvbUF0dHIoc3RhdGUsIHZhbHVlKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTQxNjks
NiArNDIxNiw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iak9uZm9vKEV4ZWNTdGF0ZSoKIAog
c3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iak9uZm9vU2V0dGVyKEV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSkKIHsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsKICAgICBzZXRFdmVudEhhbmRsZXJBdHRyaWJ1dGUoc3RhdGUsIHRoaXNPYmpl
Y3QsIHRoaXNPYmplY3Qud3JhcHBlZCgpLCBldmVudE5hbWVzKCkuZm9vRXZlbnQsIHZhbHVlKTsK
ICAgICByZXR1cm4gdHJ1ZTsKQEAgLTQxOTMsNiArNDI0MSw3IEBAIEVuY29kZWRKU1ZhbHVlIGpz
VGVzdE9iak9ud2Via2l0Zm9vKEV4ZWMKIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9i
ak9ud2Via2l0Zm9vU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVj
dCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKKyAgICBVTlVTRURf
UEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBzZXRFdmVu
dEhhbmRsZXJBdHRyaWJ1dGUoc3RhdGUsIHRoaXNPYmplY3QsIHRoaXNPYmplY3Qud3JhcHBlZCgp
LCBldmVudE5hbWVzKCkuZm9vRXZlbnQsIHZhbHVlKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTQy
MTksNiArNDI2OCw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialdpdGhFeGVjU3RhdGVBdHQK
IAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialdpdGhFeGVjU3RhdGVBdHRyaWJ1dGVT
ZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZh
bHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogeworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7
CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2Jq
ZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExMb25nPihz
dGF0ZSwgdmFsdWUpOwpAQCAtNDI1MCw2ICs0MzAwLDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqV2l0aENhbGxXaXRoQW5kUwogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqV2l0
aENhbGxXaXRoQW5kU2V0dGVyQ2FsbFdpdGhBdHRyaWJ1dGVTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0
ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQogeworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBh
dXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExMb25nPihzdGF0ZSwgdmFsdWUpOwpAQCAtNDI4
NCw2ICs0MzM1LDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dAog
CiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHRBdHRyaWJ1dGVTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0
LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogeworICAgIFVOVVNFRF9Q
QVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGlt
cGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVy
dDxJRExJbnRlcmZhY2U8VGVzdE9iaj4+KHN0YXRlLCB2YWx1ZSwgW10oSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXR0cmlidXRlVHlwZUVycm9y
KHN0YXRlLCBzY29wZSwgIlRlc3RPYmplY3QiLCAid2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRB
dHRyaWJ1dGUiLCAiVGVzdE9iaiIpOyB9KTsKQEAgLTQzMjEsNiArNDM3Myw3IEBAIEVuY29kZWRK
U1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRFeGVjdXQKIAogc3RhdGljIGlubGluZSBib29sIHNl
dEpTVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kRXhlY1N0YXRlQXR0cmlidXRl
U2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2
YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUp
OwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09i
amVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMSW50ZXJm
YWNlPFRlc3RPYmo+PihzdGF0ZSwgdmFsdWUsIFtdKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0F0dHJpYnV0ZVR5cGVFcnJvcihzdGF0ZSwgc2Nv
cGUsICJUZXN0T2JqZWN0IiwgIndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kRXhlY1N0YXRl
QXR0cmlidXRlIiwgIlRlc3RPYmoiKTsgfSk7CkBAIC00MzU4LDYgKzQ0MTEsNyBAQCBFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBz
ZXRKU1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZEV4ZWNTdGF0ZVdpdGhTcGFj
ZXNBdHRyaWJ1dGVTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0
LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogeworICAgIFVOVVNFRF9Q
QVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGlt
cGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVy
dDxJRExJbnRlcmZhY2U8VGVzdE9iaj4+KHN0YXRlLCB2YWx1ZSwgW10oSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXR0cmlidXRlVHlwZUVycm9y
KHN0YXRlLCBzY29wZSwgIlRlc3RPYmplY3QiLCAid2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRB
bmRFeGVjU3RhdGVXaXRoU3BhY2VzQXR0cmlidXRlIiwgIlRlc3RPYmoiKTsgfSk7CkBAIC00Mzk2
LDYgKzQ0NTAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHIxCiAj
aWYgRU5BQkxFKENvbmRpdGlvbjEpCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQ29u
ZGl0aW9uYWxBdHRyMVNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmpl
Y3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CisgICAgVU5VU0VE
X1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYg
aW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252
ZXJ0PElETExvbmc+KHN0YXRlLCB2YWx1ZSk7CkBAIC00NDMzLDYgKzQ0ODgsNyBAQCBFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHIyCiAjaWYgRU5BQkxFKENvbmRpdGlvbjEp
ICYmIEVOQUJMRShDb25kaXRpb24yKQogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakNv
bmRpdGlvbmFsQXR0cjJTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2Jq
ZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogeworICAgIFVOVVNF
RF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8m
IGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29u
dmVydDxJRExMb25nPihzdGF0ZSwgdmFsdWUpOwpAQCAtNDQ3MCw2ICs0NTI2LDcgQEAgRW5jb2Rl
ZEpTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMwogI2lmIEVOQUJMRShDb25kaXRpb24x
KSB8fCBFTkFCTEUoQ29uZGl0aW9uMikKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpD
b25kaXRpb25hbEF0dHIzU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09i
amVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKKyAgICBVTlVT
RURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRv
JiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNv
bnZlcnQ8SURMTG9uZz4oc3RhdGUsIHZhbHVlKTsKQEAgLTQ1MDUsOSArNDU2MiwxMCBAQCBFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHI0CiAjaWYgRU5BQkxFKENvbmRpdGlv
bjEpCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNENvbnN0
cnVjdG9yU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNW
YWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBWTSYgdm0gPSB0aHJv
d1Njb3BlLnZtKCk7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCi0g
ICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHN0YXRlLnZtKCksIElkZW50aWZpZXI6OmZy
b21TdHJpbmcoJnN0YXRlLnZtKCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiY29u
ZGl0aW9uYWxBdHRyNCIpLCBzdHJsZW4oImNvbmRpdGlvbmFsQXR0cjQiKSksIHZhbHVlKTsKKyAg
ICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmco
dm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiY29uZGl0aW9uYWxBdHRyNCIpLCBz
dHJsZW4oImNvbmRpdGlvbmFsQXR0cjQiKSksIHZhbHVlKTsKIH0KIAogYm9vbCBzZXRKU1Rlc3RP
YmpDb25kaXRpb25hbEF0dHI0Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCkBAIC00NTM1LDkg
KzQ1OTMsMTAgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNQogI2lm
IEVOQUJMRShDb25kaXRpb24xKSAmJiBFTkFCTEUoQ29uZGl0aW9uMikKIHN0YXRpYyBpbmxpbmUg
Ym9vbCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHI1Q29uc3RydWN0b3JTZXR0ZXIoRXhlY1N0
YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBV
TlVTRURfUEFSQU0oc3RhdGUpOworICAgIFZNJiB2bSA9IHRocm93U2NvcGUudm0oKTsKICAgICAv
LyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KLSAgICByZXR1cm4gdGhpc09iamVj
dC5wdXREaXJlY3Qoc3RhdGUudm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUudm0o
KSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJjb25kaXRpb25hbEF0dHI1IiksIHN0
cmxlbigiY29uZGl0aW9uYWxBdHRyNSIpKSwgdmFsdWUpOworICAgIHJldHVybiB0aGlzT2JqZWN0
LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBMQ2hhcio+KCJjb25kaXRpb25hbEF0dHI1IiksIHN0cmxlbigiY29uZGl0aW9uYWxB
dHRyNSIpKSwgdmFsdWUpOwogfQogCiBib29sIHNldEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0cjVD
b25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKQEAgLTQ1NjUsOSArNDYyNCwxMCBAQCBFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHI2CiAjaWYgRU5BQkxFKENvbmRpdGlvbjEp
IHx8IEVOQUJMRShDb25kaXRpb24yKQogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakNv
bmRpdGlvbmFsQXR0cjZDb25zdHJ1Y3RvclNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RP
YmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7
Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7
CisgICAgVk0mIHZtID0gdGhyb3dTY29wZS52bSgpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0
LWluIGNvbnN0cnVjdG9yLgotICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdChzdGF0ZS52
bSgpLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZS52bSgpLCByZWludGVycHJldF9jYXN0
PGNvbnN0IExDaGFyKj4oImNvbmRpdGlvbmFsQXR0cjYiKSwgc3RybGVuKCJjb25kaXRpb25hbEF0
dHI2IikpLCB2YWx1ZSk7CisgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oImNv
bmRpdGlvbmFsQXR0cjYiKSwgc3RybGVuKCJjb25kaXRpb25hbEF0dHI2IikpLCB2YWx1ZSk7CiB9
CiAKIGJvb2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNkNvbnN0cnVjdG9yKEV4ZWNTdGF0
ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFZhbHVlKQpAQCAtNDY0Nyw2ICs0NzA3LDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQW55
QXR0cmlidXRlKEV4ZQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQW55QXR0cmli
dXRlU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1
ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKKyAgICBVTlVTRURfUEFSQU0oc3Rh
dGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gdGhp
c09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMQW55
PihzdGF0ZSwgdmFsdWUpOwpAQCAtNDY3OCw2ICs0NzM5LDcgQEAgRW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqT2JqZWN0QXR0cmlidXRlKAogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2Jq
T2JqZWN0QXR0cmlidXRlU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09i
amVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKKyAgICBVTlVT
RURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRv
JiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNv
bnZlcnQ8SURMT2JqZWN0PihzdGF0ZSwgdmFsdWUpOwpAQCAtNDcyMyw2ICs0Nzg1LDcgQEAgRW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqTXV0YWJsZVBvaW50KEV4ZQogCiBzdGF0aWMgaW5saW5lIGJv
b2wgc2V0SlNUZXN0T2JqTXV0YWJsZVBvaW50U2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVz
dE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkK
IHsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRp
dmVWYWx1ZSA9IGNvbnZlcnQ8SURMSW50ZXJmYWNlPFNWR1BvaW50Pj4oc3RhdGUsIHZhbHVlLCBb
XShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dB
dHRyaWJ1dGVUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlLCAiVGVzdE9iamVjdCIsICJtdXRhYmxlUG9p
bnQiLCAiU1ZHUG9pbnQiKTsgfSk7CkBAIC00NzU0LDYgKzQ4MTcsNyBAQCBFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RPYmpTdHJhd2JlcnJ5KEV4ZWNTCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rl
c3RPYmpTdHJhd2JlcnJ5U2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09i
amVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKKyAgICBVTlVT
RURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRv
JiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNv
bnZlcnQ8SURMTG9uZz4oc3RhdGUsIHZhbHVlKTsKQEAgLTQ3OTksNiArNDg2Myw3IEBAIEVuY29k
ZWRKU1ZhbHVlIGpzVGVzdE9iaklkKEV4ZWNTdGF0ZSogc3QKIAogc3RhdGljIGlubGluZSBib29s
IHNldEpTVGVzdE9iaklkU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09i
amVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKKyAgICBVTlVT
RURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRv
JiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNv
bnZlcnQ8SURMTG9uZz4oc3RhdGUsIHZhbHVlKTsKQEAgLTQ4NDQsOSArNDkwOSwxMCBAQCBFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZXBsYWNlYWJsZUF0dHJpCiAKIHN0YXRpYyBpbmxpbmUgYm9v
bCBzZXRKU1Rlc3RPYmpSZXBsYWNlYWJsZUF0dHJpYnV0ZVNldHRlcihFeGVjU3RhdGUmIHN0YXRl
LCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93
U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIFVOVVNFRF9QQVJB
TShzdGF0ZSk7CisgICAgVk0mIHZtID0gdGhyb3dTY29wZS52bSgpOwogICAgIC8vIFNoYWRvd2lu
ZyBhIGJ1aWx0LWluIHByb3BlcnR5LgotICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdChz
dGF0ZS52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZS52bSgpLCByZWludGVycHJl
dF9jYXN0PGNvbnN0IExDaGFyKj4oInJlcGxhY2VhYmxlQXR0cmlidXRlIiksIHN0cmxlbigicmVw
bGFjZWFibGVBdHRyaWJ1dGUiKSksIHZhbHVlKTsKKyAgICByZXR1cm4gdGhpc09iamVjdC5wdXRE
aXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgTENoYXIqPigicmVwbGFjZWFibGVBdHRyaWJ1dGUiKSwgc3RybGVuKCJyZXBsYWNlYWJsZUF0
dHJpYnV0ZSIpKSwgdmFsdWUpOwogfQogCiBib29sIHNldEpTVGVzdE9ialJlcGxhY2VhYmxlQXR0
cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQpAQCAtNDkyNiw2ICs0OTkyLDcgQEAgRW5jb2RlZEpTVmFs
dWUganNUZXN0T2JqTnVsbGFibGVMb25nU2V0dAogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNU
ZXN0T2JqTnVsbGFibGVMb25nU2V0dGFibGVBdHRyaWJ1dGVTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0
ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQogeworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBh
dXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExOdWxsYWJsZTxJRExMb25nPj4oc3RhdGUsIHZh
bHVlKTsKQEAgLTQ5NTcsNiArNTAyNCw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iak51bGxh
YmxlU3RyaW5nU2UKIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iak51bGxhYmxlU3Ry
aW5nU2V0dGFibGVBdHRyaWJ1dGVTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0
aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogeworICAg
IFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAg
IGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVl
ID0gY29udmVydDxJRExOdWxsYWJsZTxJRExET01TdHJpbmc+PihzdGF0ZSwgdmFsdWUpOwpAQCAt
NDk4OCw2ICs1MDU2LDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqTnVsbGFibGVVU1ZTdHJp
bgogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqTnVsbGFibGVVU1ZTdHJpbmdTZXR0
YWJsZUF0dHJpYnV0ZVNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmpl
Y3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CisgICAgVU5VU0VE
X1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYg
aW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252
ZXJ0PElETE51bGxhYmxlPElETFVTVlN0cmluZz4+KHN0YXRlLCB2YWx1ZSk7CkBAIC01MDE5LDYg
KzUwODgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZUJ5dGVTdHJpCiAKIHN0
YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpOdWxsYWJsZUJ5dGVTdHJpbmdTZXR0YWJsZUF0
dHJpYnV0ZVNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpT
VmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CisgICAgVU5VU0VEX1BBUkFN
KHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9
IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElE
TE51bGxhYmxlPElETEJ5dGVTdHJpbmc+PihzdGF0ZSwgdmFsdWUpOwpAQCAtNTA2NCw2ICs1MTM0
LDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQXR0cmlidXRlV2l0aFJlcwogCiBzdGF0aWMg
aW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQXR0cmlidXRlV2l0aFJlc2VydmVkRW51bVR5cGVTZXR0
ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVl
LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogeworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0
LndyYXBwZWQoKTsKICAgICBhdXRvIG9wdGlvbmFsTmF0aXZlVmFsdWUgPSBwYXJzZUVudW1lcmF0
aW9uPFRlc3RPYmo6Ok9wdGlvbmFsPihzdGF0ZSwgdmFsdWUpOwpAQCAtNTEyNiwxNyArNTE5Nywx
OCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQdXRGb3J3YXJkc0F0dHJpCiAKIHN0YXRpYyBp
bmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpQdXRGb3J3YXJkc0F0dHJpYnV0ZVNldHRlcihFeGVjU3Rh
dGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2Nv
cGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIGF1
dG8gaWQgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZS52bSgpLCByZWludGVycHJldF9j
YXN0PGNvbnN0IExDaGFyKj4oInB1dEZvcndhcmRzQXR0cmlidXRlIiksIHN0cmxlbigicHV0Rm9y
d2FyZHNBdHRyaWJ1dGUiKSk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBWTSYgdm0g
PSB0aHJvd1Njb3BlLnZtKCk7CisgICAgYXV0byBpZCA9IElkZW50aWZpZXI6OmZyb21TdHJpbmco
dm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigicHV0Rm9yd2FyZHNBdHRyaWJ1dGUi
KSwgc3RybGVuKCJwdXRGb3J3YXJkc0F0dHJpYnV0ZSIpKTsKICAgICBhdXRvIHZhbHVlVG9Gb3J3
YXJkVG8gPSB0aGlzT2JqZWN0LmdldCgmc3RhdGUsIGlkKTsKICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHRocm93U2NvcGUsIGZhbHNlKTsKICAgICBpZiAoVU5MSUtFTFkoIXZhbHVlVG9Gb3J3YXJk
VG8uaXNPYmplY3QoKSkpIHsKICAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCB0aHJvd1Nj
b3BlKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICBhdXRvIGZvcndhcmRJZCA9
IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLnZtKCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgTENoYXIqPigibmFtZSIpLCBzdHJsZW4oIm5hbWUiKSk7CisgICAgYXV0byBmb3J3YXJkSWQg
PSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFy
Kj4oIm5hbWUiKSwgc3RybGVuKCJuYW1lIikpOwogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KHZh
bHVlVG9Gb3J3YXJkVG8sIGZhbHNlKTsKLSAgICBhc09iamVjdCh2YWx1ZVRvRm9yd2FyZFRvKS0+
bWV0aG9kVGFibGUoc3RhdGUudm0oKSktPnB1dChhc09iamVjdCh2YWx1ZVRvRm9yd2FyZFRvKSwg
JnN0YXRlLCBmb3J3YXJkSWQsIHZhbHVlLCBzbG90KTsKKyAgICBhc09iamVjdCh2YWx1ZVRvRm9y
d2FyZFRvKS0+bWV0aG9kVGFibGUodm0pLT5wdXQoYXNPYmplY3QodmFsdWVUb0ZvcndhcmRUbyks
ICZzdGF0ZSwgZm9yd2FyZElkLCB2YWx1ZSwgc2xvdCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCBmYWxzZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC01MTYyLDE3ICs1
MjM0LDE4IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialB1dEZvcndhcmRzTnVsbGEKIAogc3Rh
dGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialB1dEZvcndhcmRzTnVsbGFibGVBdHRyaWJ1dGVT
ZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZh
bHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKLSAgICBhdXRvIGlkID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUudm0oKSwg
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJwdXRGb3J3YXJkc051bGxhYmxlQXR0cmli
dXRlIiksIHN0cmxlbigicHV0Rm9yd2FyZHNOdWxsYWJsZUF0dHJpYnV0ZSIpKTsKKyAgICBVTlVT
RURfUEFSQU0oc3RhdGUpOworICAgIFZNJiB2bSA9IHRocm93U2NvcGUudm0oKTsKKyAgICBhdXRv
IGlkID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBM
Q2hhcio+KCJwdXRGb3J3YXJkc051bGxhYmxlQXR0cmlidXRlIiksIHN0cmxlbigicHV0Rm9yd2Fy
ZHNOdWxsYWJsZUF0dHJpYnV0ZSIpKTsKICAgICBhdXRvIHZhbHVlVG9Gb3J3YXJkVG8gPSB0aGlz
T2JqZWN0LmdldCgmc3RhdGUsIGlkKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2Nv
cGUsIGZhbHNlKTsKICAgICBpZiAoVU5MSUtFTFkoIXZhbHVlVG9Gb3J3YXJkVG8uaXNPYmplY3Qo
KSkpIHsKICAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCB0aHJvd1Njb3BlKTsKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICBhdXRvIGZvcndhcmRJZCA9IElkZW50aWZpZXI6
OmZyb21TdHJpbmcoJnN0YXRlLnZtKCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigi
bmFtZSIpLCBzdHJsZW4oIm5hbWUiKSk7CisgICAgYXV0byBmb3J3YXJkSWQgPSBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIm5hbWUiKSwg
c3RybGVuKCJuYW1lIikpOwogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KHZhbHVlVG9Gb3J3YXJk
VG8sIGZhbHNlKTsKLSAgICBhc09iamVjdCh2YWx1ZVRvRm9yd2FyZFRvKS0+bWV0aG9kVGFibGUo
c3RhdGUudm0oKSktPnB1dChhc09iamVjdCh2YWx1ZVRvRm9yd2FyZFRvKSwgJnN0YXRlLCBmb3J3
YXJkSWQsIHZhbHVlLCBzbG90KTsKKyAgICBhc09iamVjdCh2YWx1ZVRvRm9yd2FyZFRvKS0+bWV0
aG9kVGFibGUodm0pLT5wdXQoYXNPYmplY3QodmFsdWVUb0ZvcndhcmRUbyksICZzdGF0ZSwgZm9y
d2FyZElkLCB2YWx1ZSwgc2xvdCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3Bl
LCBmYWxzZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC01MTk4LDYgKzUyNzEsNyBAQCBFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdpZmllckF0dHJpCiAKIHN0YXRpYyBpbmxpbmUgYm9v
bCBzZXRKU1Rlc3RPYmpTdHJpbmdpZmllckF0dHJpYnV0ZVNldHRlcihFeGVjU3RhdGUmIHN0YXRl
LCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93
U2NvcGUpCiB7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1
dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETFVTVlN0cmluZz4oc3RhdGUsIHZhbHVlKTsKQEAg
LTUyMzAsNiArNTMwNCw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbmFsbHlS
ZWEKICNpZiBFTkFCTEUoQ09ORElUSU9OKQogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9i
akNvbmRpdGlvbmFsbHlSZWFkV3JpdGVBdHRyaWJ1dGVTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwg
SlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Nj
b3BlKQogeworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRv
IG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExJbnRlcmZhY2U8Tm9kZT4+KHN0YXRlLCB2YWx1ZSwg
W10oSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93
QXR0cmlidXRlVHlwZUVycm9yKHN0YXRlLCBzY29wZSwgIlRlc3RPYmplY3QiLCAiY29uZGl0aW9u
YWxseVJlYWRXcml0ZUF0dHJpYnV0ZSIsICJOb2RlIik7IH0pOwpAQCAtNTI2OCw2ICs1MzQzLDcg
QEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxBbmRDbwogI2lmIEVOQUJMRShD
T05ESVRJT04pCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBbmRD
b25kaXRpb25hbGx5UmVhZFdyaXRlQXR0cmlidXRlU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpT
VGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29w
ZSkKIHsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBu
YXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMSW50ZXJmYWNlPE5vZGU+PihzdGF0ZSwgdmFsdWUsIFtd
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0F0
dHJpYnV0ZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUsICJUZXN0T2JqZWN0IiwgImNvbmRpdGlvbmFs
QW5kQ29uZGl0aW9uYWxseVJlYWRXcml0ZUF0dHJpYnV0ZSIsICJOb2RlIik7IH0pOwpAQCAtNTMw
Myw2ICs1Mzc5LDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxseUV4cAog
CiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxseUV4cG9zZWRUb1dp
bmRvd0F0dHJpYnV0ZVNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmpl
Y3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CisgICAgVU5VU0VE
X1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYg
aW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252
ZXJ0PElETExvbmc+KHN0YXRlLCB2YWx1ZSk7CkBAIC01MzM0LDYgKzU0MTEsNyBAQCBFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbGx5RXhwCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBz
ZXRKU1Rlc3RPYmpDb25kaXRpb25hbGx5RXhwb3NlZFRvV29ya2VyQXR0cmlidXRlU2V0dGVyKEV4
ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhy
b3dTY29wZSYgdGhyb3dTY29wZSkKIHsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFw
cGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMTG9uZz4oc3RhdGUsIHZh
bHVlKTsKQEAgLTUzNjUsNiArNTQ0Myw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNvbmRp
dGlvbmFsbHlFeHAKIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakNvbmRpdGlvbmFs
bHlFeHBvc2VkVG9XaW5kb3dBbmRXb3JrZXJBdHRyaWJ1dGVTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0
ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQogeworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBh
dXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExMb25nPihzdGF0ZSwgdmFsdWUpOwpAQCAtODU0
OCwxOSArODYyNywxOSBAQCBKU0M6OkpTT2JqZWN0KiBKU1Rlc3RPYmo6OnNlcmlhbGl6ZShFeGVj
CiAKICAgICBhdXRvIGNyZWF0ZVZhbHVlID0ganNUZXN0T2JqQ3JlYXRlR2V0dGVyKHN0YXRlLCB0
aGlzT2JqZWN0LCB0aHJvd1Njb3BlKTsKICAgICB0aHJvd1Njb3BlLmFzc2VydE5vRXhjZXB0aW9u
KCk7Ci0gICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZt
LCAiY3JlYXRlIiksIGNyZWF0ZVZhbHVlKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImNyZWF0ZSIpLCBjcmVhdGVWYWx1ZSk7CiAKICAgICBh
dXRvIHJlYWRPbmx5U3RyaW5nQXR0clZhbHVlID0ganNUZXN0T2JqUmVhZE9ubHlTdHJpbmdBdHRy
R2V0dGVyKHN0YXRlLCB0aGlzT2JqZWN0LCB0aHJvd1Njb3BlKTsKICAgICB0aHJvd1Njb3BlLmFz
c2VydE5vRXhjZXB0aW9uKCk7Ci0gICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6
OmZyb21TdHJpbmcoJnZtLCAicmVhZE9ubHlTdHJpbmdBdHRyIiksIHJlYWRPbmx5U3RyaW5nQXR0
clZhbHVlKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zyh2bSwgInJlYWRPbmx5U3RyaW5nQXR0ciIpLCByZWFkT25seVN0cmluZ0F0dHJWYWx1ZSk7CiAK
ICAgICBhdXRvIGVudW1BdHRyVmFsdWUgPSBqc1Rlc3RPYmpFbnVtQXR0ckdldHRlcihzdGF0ZSwg
dGhpc09iamVjdCwgdGhyb3dTY29wZSk7CiAgICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlv
bigpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2
bSwgImVudW1BdHRyIiksIGVudW1BdHRyVmFsdWUpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZt
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiZW51bUF0dHIiKSwgZW51bUF0dHJWYWx1ZSk7
CiAKICAgICBhdXRvIGxvbmdBdHRyVmFsdWUgPSBqc1Rlc3RPYmpMb25nQXR0ckdldHRlcihzdGF0
ZSwgdGhpc09iamVjdCwgdGhyb3dTY29wZSk7CiAgICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2Vw
dGlvbigpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KCZ2bSwgImxvbmdBdHRyIiksIGxvbmdBdHRyVmFsdWUpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0
KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAibG9uZ0F0dHIiKSwgbG9uZ0F0dHJWYWx1
ZSk7CiAKICAgICByZXR1cm4gcmVzdWx0OwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RP
dmVybG9hZGVkQ29uc3RydWN0b3JzLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3Rv
cnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzMsNyArMTczLDcgQEAgdGVtcGxhdGU8PiBKU1Zh
bHVlIEpTVGVzdE92ZXJsb2FkZWRDb25zdAogdGVtcGxhdGU8PiB2b2lkIEpTVGVzdE92ZXJsb2Fk
ZWRDb25zdHJ1Y3RvcnNDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMoVk0mIHZtLCBK
U0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQogewogICAgIHB1dERpcmVjdCh2bSwgdm0u
cHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzOjpw
cm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRE
ZWxldGUgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlB
dHRyaWJ1dGU6OkRvbnRFbnVtKTsKLSAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMt
Pm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZygmdm0sIFN0cmluZygiVGVzdE92ZXJsb2FkZWRDb25z
dHJ1Y3RvcnMiX3MpKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlBy
b3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0
eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcodm0sIFN0cmluZygiVGVzdE92ZXJsb2Fk
ZWRDb25zdHJ1Y3RvcnMiX3MpKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBK
U0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5w
cm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDApLCBKU0M6OlByb3BlcnR5QXR0cmlidXRl
OjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKIH0KIApJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJsb2Fk
ZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3Jz
V2l0aFNlcXVlbmNlLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2Vx
dWVuY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjksNyArMTI5LDcgQEAgdGVtcGxhdGU8PiBK
U1ZhbHVlIEpTVGVzdE92ZXJsb2FkZWRDb25zdAogdGVtcGxhdGU8PiB2b2lkIEpTVGVzdE92ZXJs
b2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2VDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3Bl
cnRpZXMoVk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQogewogICAgIHB1
dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3RPdmVybG9hZGVk
Q29uc3RydWN0b3JzV2l0aFNlcXVlbmNlOjpwcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCksIEpT
Qzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRl
OjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKLSAgICBwdXRE
aXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZygmdm0s
IFN0cmluZygiVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2UiX3MpKSwgSlND
OjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpE
b250RW51bSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05v
bnRyaXZpYWxTdHJpbmcodm0sIFN0cmluZygiVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRo
U2VxdWVuY2UiX3MpKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlBy
b3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0
eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDApLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFk
T25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKIH0KIApJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJyaWRlQnVpbHRp
bnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RPdmVycmlkZUJ1aWx0aW5zLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJyaWRlQnVpbHRp
bnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OCw3ICs4OCw3IEBAIHRlbXBsYXRlPD4gSlNWYWx1
ZSBKU1Rlc3RPdmVycmlkZUJ1aWx0aW4KIHRlbXBsYXRlPD4gdm9pZCBKU1Rlc3RPdmVycmlkZUJ1
aWx0aW5zQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKFZNJiB2bSwgSlNET01HbG9i
YWxPYmplY3QmIGdsb2JhbE9iamVjdCkKIHsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5
TmFtZXMtPnByb3RvdHlwZSwgSlNUZXN0T3ZlcnJpZGVCdWlsdGluczo6cHJvdG90eXBlKHZtLCBn
bG9iYWxPYmplY3QpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgSlNDOjpQ
cm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250
RW51bSk7Ci0gICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRy
aXZpYWxTdHJpbmcoJnZtLCBTdHJpbmcoIlRlc3RPdmVycmlkZUJ1aWx0aW5zIl9zKSksIEpTQzo6
UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9u
dEVudW0pOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250
cml2aWFsU3RyaW5nKHZtLCBTdHJpbmcoIlRlc3RPdmVycmlkZUJ1aWx0aW5zIl9zKSksIEpTQzo6
UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9u
dEVudW0pOwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051
bWJlcigwKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5
QXR0cmlidXRlOjpEb250RW51bSk7CiB9CiAKQEAgLTE2Niw5ICsxNjYsMTAgQEAgYm9vbCBKU1Rl
c3RPdmVycmlkZUJ1aWx0aW5zOjpnZXRPd25Qcm9wZQogCiBib29sIEpTVGVzdE92ZXJyaWRlQnVp
bHRpbnM6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0
YXRlKiBzdGF0ZSwgdW5zaWduZWQgaW5kZXgsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKKyAgICBW
TSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVz
dE92ZXJyaWRlQnVpbHRpbnMqPihvYmplY3QpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJ
VFModGhpc09iamVjdCwgaW5mbygpKTsKLSAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZp
ZXI6OmZyb20oc3RhdGUsIGluZGV4KTsKKyAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZp
ZXI6OmZyb20odm0sIGluZGV4KTsKICAgICB1c2luZyBHZXR0ZXJJRExUeXBlID0gSURMSW50ZXJm
YWNlPE5vZGU+OwogICAgIGF1dG8gZ2V0dGVyRnVuY3RvciA9IFtdIChhdXRvJiB0aGlzT2JqZWN0
LCBhdXRvIHByb3BlcnR5TmFtZSkgLT4gT3B0aW9uYWw8dHlwZW5hbWUgR2V0dGVySURMVHlwZTo6
SW1wbGVtZW50YXRpb25UeXBlPiB7CiAgICAgICAgIGF1dG8gcmVzdWx0ID0gdGhpc09iamVjdC53
cmFwcGVkKCkubmFtZWRJdGVtKHByb3BlcnR5TmFtZVRvQXRvbVN0cmluZyhwcm9wZXJ0eU5hbWUp
KTsKQEAgLTE4NiwxMCArMTg3LDExIEBAIGJvb2wgSlNUZXN0T3ZlcnJpZGVCdWlsdGluczo6Z2V0
T3duUHJvcGUKIAogdm9pZCBKU1Rlc3RPdmVycmlkZUJ1aWx0aW5zOjpnZXRPd25Qcm9wZXJ0eU5h
bWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogc3RhdGUsIFByb3BlcnR5TmFtZUFycmF5
JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKKyAgICBWTSYgdm0gPSBz
dGF0ZS0+dm0oKTsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE92ZXJyaWRl
QnVpbHRpbnMqPihvYmplY3QpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMob2JqZWN0
LCBpbmZvKCkpOwogICAgIGZvciAoYXV0byYgcHJvcGVydHlOYW1lIDogdGhpc09iamVjdC0+d3Jh
cHBlZCgpLnN1cHBvcnRlZFByb3BlcnR5TmFtZXMoKSkKLSAgICAgICAgcHJvcGVydHlOYW1lcy5h
ZGQoSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhzdGF0ZSwgcHJvcGVydHlOYW1lKSk7CisgICAgICAg
IHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHByb3BlcnR5TmFt
ZSkpOwogICAgIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgc3RhdGUsIHBy
b3BlcnR5TmFtZXMsIG1vZGUpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0UGx1Z2luSW50ZXJmYWNlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0UGx1Z2luSW50ZXJm
YWNlLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdFBsdWdpbkludGVyZmFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTc5LDcgKzc5LDcgQEAgdGVtcGxhdGU8PiBKU1ZhbHVlIEpTVGVzdFBsdWdpbkludGVyZmFjZQog
dGVtcGxhdGU8PiB2b2lkIEpTVGVzdFBsdWdpbkludGVyZmFjZUNvbnN0cnVjdG9yOjppbml0aWFs
aXplUHJvcGVydGllcyhWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCiB7
CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdFBs
dWdpbkludGVyZmFjZTo6cHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QpLCBKU0M6OlByb3BlcnR5
QXR0cmlidXRlOjpEb250RGVsZXRlIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkg
fCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7Ci0gICAgcHV0RGlyZWN0KHZtLCB2
bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcoJnZtLCBTdHJpbmcoIlRl
c3RQbHVnaW5JbnRlcmZhY2UiX3MpKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkg
fCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CisgICAgcHV0RGlyZWN0KHZtLCB2
bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcodm0sIFN0cmluZygiVGVz
dFBsdWdpbkludGVyZmFjZSJfcykpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8
IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKICAgICBwdXREaXJlY3Qodm0sIHZt
LnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1
dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwogfQogCkBA
IC0xNDYsOSArMTQ2LDEwIEBAIGJvb2wgSlNUZXN0UGx1Z2luSW50ZXJmYWNlOjpnZXRPd25Qcm9w
ZXIKIAogYm9vbCBKU1Rlc3RQbHVnaW5JbnRlcmZhY2U6OmdldE93blByb3BlcnR5U2xvdEJ5SW5k
ZXgoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBzdGF0ZSwgdW5zaWduZWQgaW5kZXgsIFBy
b3BlcnR5U2xvdCYgc2xvdCkKIHsKKyAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRv
KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdFBsdWdpbkludGVyZmFjZSo+KG9iamVjdCk7CiAg
ICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwotICAgIGF1
dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbShzdGF0ZSwgaW5kZXgpOworICAgIGF1
dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbSh2bSwgaW5kZXgpOwogICAgIGlmIChw
bHVnaW5FbGVtZW50Q3VzdG9tR2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIHN0YXRlLCBw
cm9wZXJ0eU5hbWUsIHNsb3QpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICByZXR1cm4gSlNP
YmplY3Q6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgob2JqZWN0LCBzdGF0ZSwgaW5kZXgsIHNs
b3QpOwpAQCAtMTY4LDEwICsxNjksMTEgQEAgYm9vbCBKU1Rlc3RQbHVnaW5JbnRlcmZhY2U6OnB1
dChKU0NlbGwqIAogCiBib29sIEpTVGVzdFBsdWdpbkludGVyZmFjZTo6cHV0QnlJbmRleChKU0Nl
bGwqIGNlbGwsIEV4ZWNTdGF0ZSogc3RhdGUsIHVuc2lnbmVkIGluZGV4LCBKU1ZhbHVlIHZhbHVl
LCBib29sIHNob3VsZFRocm93KQogeworICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1
dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0UGx1Z2luSW50ZXJmYWNlKj4oY2VsbCk7CiAg
ICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogCi0gICAg
YXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tKHN0YXRlLCBpbmRleCk7CisgICAg
YXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tKHZtLCBpbmRleCk7CiAgICAgUHV0
UHJvcGVydHlTbG90IHB1dFByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBzaG91bGRUaHJvdyk7CiAg
ICAgYm9vbCBwdXRSZXN1bHQgPSBmYWxzZTsKICAgICBpZiAocGx1Z2luRWxlbWVudEN1c3RvbVB1
dCh0aGlzT2JqZWN0LCBzdGF0ZSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgcHV0UHJvcGVydHlTbG90
LCBwdXRSZXN1bHQpKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdFByb21pc2VSZWplY3Rpb25FdmVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFByb21pc2VSZWplY3Rpb25F
dmVudC5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01OSw3ICs1OSw3IEBAIHRlbXBsYXRlPD4gVGVzdFByb21pc2VSZWplY3Rpb25FdmVu
dDo6SW4KICAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQpCiAgICAgICAgIGJ1YmJsZXNWYWx1ZSA9
IGpzVW5kZWZpbmVkKCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIGJ1YmJsZXNWYWx1ZSA9IG9iamVj
dC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJidWJibGVzIikp
OworICAgICAgICBidWJibGVzVmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6
OmZyb21TdHJpbmcodm0sICJidWJibGVzIikpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHRocm93U2NvcGUsIHsgfSk7CiAgICAgfQogICAgIGlmICghYnViYmxlc1ZhbHVlLmlzVW5kZWZp
bmVkKCkpIHsKQEAgLTcxLDcgKzcxLDcgQEAgdGVtcGxhdGU8PiBUZXN0UHJvbWlzZVJlamVjdGlv
bkV2ZW50OjpJbgogICAgIGlmIChpc051bGxPclVuZGVmaW5lZCkKICAgICAgICAgY2FuY2VsYWJs
ZVZhbHVlID0ganNVbmRlZmluZWQoKTsKICAgICBlbHNlIHsKLSAgICAgICAgY2FuY2VsYWJsZVZh
bHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwg
ImNhbmNlbGFibGUiKSk7CisgICAgICAgIGNhbmNlbGFibGVWYWx1ZSA9IG9iamVjdC0+Z2V0KCZz
dGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImNhbmNlbGFibGUiKSk7CiAgICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICB9CiAgICAgaWYgKCFj
YW5jZWxhYmxlVmFsdWUuaXNVbmRlZmluZWQoKSkgewpAQCAtODMsNyArODMsNyBAQCB0ZW1wbGF0
ZTw+IFRlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnQ6OkluCiAgICAgaWYgKGlzTnVsbE9yVW5kZWZp
bmVkKQogICAgICAgICBjb21wb3NlZFZhbHVlID0ganNVbmRlZmluZWQoKTsKICAgICBlbHNlIHsK
LSAgICAgICAgY29tcG9zZWRWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZygmc3RhdGUsICJjb21wb3NlZCIpKTsKKyAgICAgICAgY29tcG9zZWRWYWx1ZSA9
IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImNvbXBvc2Vk
IikpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAg
fQogICAgIGlmICghY29tcG9zZWRWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7CkBAIC05NSw3ICs5NSw3
IEBAIHRlbXBsYXRlPD4gVGVzdFByb21pc2VSZWplY3Rpb25FdmVudDo6SW4KICAgICBpZiAoaXNO
dWxsT3JVbmRlZmluZWQpCiAgICAgICAgIHByb21pc2VWYWx1ZSA9IGpzVW5kZWZpbmVkKCk7CiAg
ICAgZWxzZSB7Ci0gICAgICAgIHByb21pc2VWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJwcm9taXNlIikpOworICAgICAgICBwcm9taXNl
VmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJw
cm9taXNlIikpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7
CiAgICAgfQogICAgIGlmICghcHJvbWlzZVZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKQEAgLTEwOSw3
ICsxMDksNyBAQCB0ZW1wbGF0ZTw+IFRlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnQ6OkluCiAgICAg
aWYgKGlzTnVsbE9yVW5kZWZpbmVkKQogICAgICAgICByZWFzb25WYWx1ZSA9IGpzVW5kZWZpbmVk
KCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIHJlYXNvblZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRl
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgInJlYXNvbiIpKTsKKyAgICAgICAgcmVh
c29uVmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0s
ICJyZWFzb24iKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9
KTsKICAgICB9CiAgICAgaWYgKCFyZWFzb25WYWx1ZS5pc1VuZGVmaW5lZCgpKSB7CkBAIC0xODAs
NyArMTgwLDcgQEAgdGVtcGxhdGU8PiBKU1ZhbHVlIEpTVGVzdFByb21pc2VSZWplY3RpbwogdGVt
cGxhdGU8PiB2b2lkIEpTVGVzdFByb21pc2VSZWplY3Rpb25FdmVudENvbnN0cnVjdG9yOjppbml0
aWFsaXplUHJvcGVydGllcyhWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3Qp
CiB7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVz
dFByb21pc2VSZWplY3Rpb25FdmVudDo6cHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QpLCBKU0M6
OlByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6
UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7Ci0gICAgcHV0RGly
ZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcoJnZtLCBT
dHJpbmcoIlRlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnQiX3MpKSwgSlNDOjpQcm9wZXJ0eUF0dHJp
YnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CisgICAg
cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmco
dm0sIFN0cmluZygiVGVzdFByb21pc2VSZWplY3Rpb25FdmVudCJfcykpLCBKU0M6OlByb3BlcnR5
QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsK
ICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMiks
IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0
ZTo6RG9udEVudW0pOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXphdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb24uY3BwCShy
ZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0U2VyaWFsaXphdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMCw3ICsxMjAs
NyBAQCB0ZW1wbGF0ZTw+IEpTVmFsdWUgSlNUZXN0U2VyaWFsaXphdGlvbkNvCiB0ZW1wbGF0ZTw+
IHZvaWQgSlNUZXN0U2VyaWFsaXphdGlvbkNvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGll
cyhWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCiB7CiAgICAgcHV0RGly
ZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdFNlcmlhbGl6YXRpb246
OnByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9u
dERlbGV0ZSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0
eUF0dHJpYnV0ZTo6RG9udEVudW0pOwotICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1l
cy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKCZ2bSwgU3RyaW5nKCJUZXN0U2VyaWFsaXphdGlv
biJfcykpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlB
dHRyaWJ1dGU6OkRvbnRFbnVtKTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMt
Pm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZyh2bSwgU3RyaW5nKCJUZXN0U2VyaWFsaXphdGlvbiJf
cykpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRy
aWJ1dGU6OkRvbnRFbnVtKTsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxl
bmd0aCwganNOdW1iZXIoMCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlND
OjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwogfQogCkBAIC0yMzgsNiArMjM4LDcgQEAg
RW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvbkZpcnN0UwogCiBzdGF0aWMgaW5saW5l
IGJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvbkZpcnN0U3RyaW5nQXR0cmlidXRlU2V0dGVyKEV4
ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdFNlcmlhbGl6YXRpb24mIHRoaXNPYmplY3QsIEpTVmFsdWUg
dmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRl
KTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNP
YmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0
cmluZz4oc3RhdGUsIHZhbHVlKTsKQEAgLTI2OSw2ICsyNzAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RTZXJpYWxpemF0aW9uU2Vjb25kCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RT
ZXJpYWxpemF0aW9uU2Vjb25kTG9uZ0F0dHJpYnV0ZVNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBK
U1Rlc3RTZXJpYWxpemF0aW9uJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKQogeworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsK
ICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExMb25nPihzdGF0ZSwgdmFsdWUpOwpA
QCAtMzAwLDYgKzMwMiw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25UaGly
ZFUKIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25UaGlyZFVuc2Vy
aWFsaXphYmxlQXR0cmlidXRlU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdFNlcmlhbGl6
YXRpb24mIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUp
CiB7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0
aXZlVmFsdWUgPSBjb252ZXJ0PElETEludGVyZmFjZTxUZXN0RXhjZXB0aW9uPj4oc3RhdGUsIHZh
bHVlLCBbXShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsg
dGhyb3dBdHRyaWJ1dGVUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlLCAiVGVzdFNlcmlhbGl6YXRpb24i
LCAidGhpcmRVbnNlcmlhbGl6YWJsZUF0dHJpYnV0ZSIsICJUZXN0RXhjZXB0aW9uIik7IH0pOwpA
QCAtMzMxLDYgKzMzNCw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25Gb3Vy
dGgKIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25Gb3VydGhVbnJl
c3RyaWN0ZWREb3VibGVBdHRyaWJ1dGVTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0U2Vy
aWFsaXphdGlvbiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dT
Y29wZSkKIHsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0
byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMVW5yZXN0cmljdGVkRG91YmxlPihzdGF0ZSwgdmFs
dWUpOwpAQCAtMzYyLDYgKzM2Niw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRp
b25GaWZ0aEwKIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25GaWZ0
aExvbmdBdHRyaWJ1dGVTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0U2VyaWFsaXphdGlv
biYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsK
KyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
ICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVW
YWx1ZSA9IGNvbnZlcnQ8SURMTG9uZz4oc3RhdGUsIHZhbHVlKTsKQEAgLTM5Myw2ICszOTgsNyBA
QCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uU2l4dGhUCiAKIHN0YXRpYyBpbmxp
bmUgYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uU2l4dGhUeXBlZGVmQXR0cmlidXRlU2V0dGVy
KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdFNlcmlhbGl6YXRpb24mIHRoaXNPYmplY3QsIEpTVmFs
dWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CisgICAgVU5VU0VEX1BBUkFNKHN0
YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRo
aXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERv
dWJsZT4oc3RhdGUsIHZhbHVlKTsKQEAgLTQyNCw2ICs0MzAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RTZXJpYWxpemF0aW9uU2V2ZW50CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RT
ZXJpYWxpemF0aW9uU2V2ZW50aERpcmVjdGx5U2VyaWFsaXphYmxlQXR0cmlidXRlU2V0dGVyKEV4
ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdFNlcmlhbGl6YXRpb24mIHRoaXNPYmplY3QsIEpTVmFsdWUg
dmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRl
KTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNP
YmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETEludGVy
ZmFjZTxUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbD4+KHN0YXRlLCB2YWx1ZSwgW10oSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXR0cmli
dXRlVHlwZUVycm9yKHN0YXRlLCBzY29wZSwgIlRlc3RTZXJpYWxpemF0aW9uIiwgInNldmVudGhE
aXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZSIsICJUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRG
aW5hbCIpOyB9KTsKQEAgLTQ1NSw2ICs0NjIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJp
YWxpemF0aW9uRWlnaHRoCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0
aW9uRWlnaHRoSW5kaXJlY3RseUF0dHJpYnV0ZVNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rl
c3RTZXJpYWxpemF0aW9uJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKQogeworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAg
ICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExJbnRlcmZhY2U8VGVzdFNlcmlhbGl6YXRp
b25JbmRpcmVjdEluaGVyaXRhbmNlPj4oc3RhdGUsIHZhbHVlLCBbXShKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBdHRyaWJ1dGVUeXBlRXJyb3Io
c3RhdGUsIHNjb3BlLCAiVGVzdFNlcmlhbGl6YXRpb24iLCAiZWlnaHRoSW5kaXJlY3RseUF0dHJp
YnV0ZSIsICJUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2UiKTsgfSk7CkBAIC00
ODYsNiArNDk0LDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvbk5pbnRoTwog
CiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvbk5pbnRoT3B0aW9uYWxE
aXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZVNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rl
c3RTZXJpYWxpemF0aW9uJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKQogeworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAg
ICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExOdWxsYWJsZTxJRExJbnRlcmZhY2U8VGVz
dFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWw+Pj4oc3RhdGUsIHZhbHVlLCBbXShKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBdHRyaWJ1dGVUeXBl
RXJyb3Ioc3RhdGUsIHNjb3BlLCAiVGVzdFNlcmlhbGl6YXRpb24iLCAibmludGhPcHRpb25hbERp
cmVjdGx5U2VyaWFsaXphYmxlQXR0cmlidXRlIiwgIlRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZp
bmFsIik7IH0pOwpAQCAtNTE3LDYgKzUyNiw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlh
bGl6YXRpb25UZW50aEYKIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFNlcmlhbGl6YXRp
b25UZW50aEZyb3plbkFycmF5QXR0cmlidXRlU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVz
dFNlcmlhbGl6YXRpb24mIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRo
cm93U2NvcGUpCiB7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAg
IGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETEZyb3plbkFycmF5PElETEJvb2xlYW4+Pihz
dGF0ZSwgdmFsdWUpOwpAQCAtNTQ4LDYgKzU1OCw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdFNl
cmlhbGl6YXRpb25FbGV2ZW4KIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFNlcmlhbGl6
YXRpb25FbGV2ZW50aFNlcXVlbmNlQXR0cmlidXRlU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpT
VGVzdFNlcmlhbGl6YXRpb24mIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUm
IHRocm93U2NvcGUpCiB7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwog
ICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETFNlcXVlbmNlPElETERPTVN0cmluZz4+
KHN0YXRlLCB2YWx1ZSk7CkBAIC01NzksNiArNTkwLDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0
U2VyaWFsaXphdGlvblR3ZWxmdAogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0U2VyaWFs
aXphdGlvblR3ZWxmdGhJbnRlcmZhY2VTZXF1ZW5jZUF0dHJpYnV0ZVNldHRlcihFeGVjU3RhdGUm
IHN0YXRlLCBKU1Rlc3RTZXJpYWxpemF0aW9uJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogeworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAg
VU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0Lndy
YXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExTZXF1ZW5jZTxJRExJ
bnRlcmZhY2U8VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWw+Pj4oc3RhdGUsIHZhbHVlKTsK
QEAgLTYwMSw0OSArNjEzLDQ5IEBAIEpTQzo6SlNPYmplY3QqIEpTVGVzdFNlcmlhbGl6YXRpb246
OnNlcmkKIAogICAgIGF1dG8gZmlyc3RTdHJpbmdBdHRyaWJ1dGVWYWx1ZSA9IGpzVGVzdFNlcmlh
bGl6YXRpb25GaXJzdFN0cmluZ0F0dHJpYnV0ZUdldHRlcihzdGF0ZSwgdGhpc09iamVjdCwgdGhy
b3dTY29wZSk7CiAgICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwotICAgIHJlc3Vs
dC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImZpcnN0U3RyaW5n
QXR0cmlidXRlIiksIGZpcnN0U3RyaW5nQXR0cmlidXRlVmFsdWUpOworICAgIHJlc3VsdC0+cHV0
RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiZmlyc3RTdHJpbmdBdHRyaWJ1
dGUiKSwgZmlyc3RTdHJpbmdBdHRyaWJ1dGVWYWx1ZSk7CiAKICAgICBhdXRvIHNlY29uZExvbmdB
dHRyaWJ1dGVWYWx1ZSA9IGpzVGVzdFNlcmlhbGl6YXRpb25TZWNvbmRMb25nQXR0cmlidXRlR2V0
dGVyKHN0YXRlLCB0aGlzT2JqZWN0LCB0aHJvd1Njb3BlKTsKICAgICB0aHJvd1Njb3BlLmFzc2Vy
dE5vRXhjZXB0aW9uKCk7Ci0gICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZy
b21TdHJpbmcoJnZtLCAic2Vjb25kTG9uZ0F0dHJpYnV0ZSIpLCBzZWNvbmRMb25nQXR0cmlidXRl
VmFsdWUpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KHZtLCAic2Vjb25kTG9uZ0F0dHJpYnV0ZSIpLCBzZWNvbmRMb25nQXR0cmlidXRlVmFsdWUpOwog
CiAgICAgYXV0byBmb3VydGhVbnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGVWYWx1ZSA9IGpzVGVz
dFNlcmlhbGl6YXRpb25Gb3VydGhVbnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGVHZXR0ZXIoc3Rh
dGUsIHRoaXNPYmplY3QsIHRocm93U2NvcGUpOwogICAgIHRocm93U2NvcGUuYXNzZXJ0Tm9FeGNl
cHRpb24oKTsKLSAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zygmdm0sICJmb3VydGhVbnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGUiKSwgZm91cnRoVW5yZXN0
cmljdGVkRG91YmxlQXR0cmlidXRlVmFsdWUpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiZm91cnRoVW5yZXN0cmljdGVkRG91YmxlQXR0cmli
dXRlIiksIGZvdXJ0aFVucmVzdHJpY3RlZERvdWJsZUF0dHJpYnV0ZVZhbHVlKTsKIAogICAgIGF1
dG8gZmlmdGhMb25nQXR0cmlidXRlVmFsdWUgPSBqc1Rlc3RTZXJpYWxpemF0aW9uRmlmdGhMb25n
QXR0cmlidXRlR2V0dGVyKHN0YXRlLCB0aGlzT2JqZWN0LCB0aHJvd1Njb3BlKTsKICAgICB0aHJv
d1Njb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7Ci0gICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiZmlmdGhMb25nQXR0cmlidXRlIiksIGZpZnRoTG9u
Z0F0dHJpYnV0ZVZhbHVlKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZyh2bSwgImZpZnRoTG9uZ0F0dHJpYnV0ZSIpLCBmaWZ0aExvbmdBdHRyaWJ1dGVW
YWx1ZSk7CiAKICAgICBhdXRvIHNpeHRoVHlwZWRlZkF0dHJpYnV0ZVZhbHVlID0ganNUZXN0U2Vy
aWFsaXphdGlvblNpeHRoVHlwZWRlZkF0dHJpYnV0ZUdldHRlcihzdGF0ZSwgdGhpc09iamVjdCwg
dGhyb3dTY29wZSk7CiAgICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwotICAgIHJl
c3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgInNpeHRoVHlw
ZWRlZkF0dHJpYnV0ZSIpLCBzaXh0aFR5cGVkZWZBdHRyaWJ1dGVWYWx1ZSk7CisgICAgcmVzdWx0
LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJzaXh0aFR5cGVkZWZB
dHRyaWJ1dGUiKSwgc2l4dGhUeXBlZGVmQXR0cmlidXRlVmFsdWUpOwogCiAgICAgYXV0byBzZXZl
bnRoRGlyZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGVWYWx1ZSA9IGpzVGVzdFNlcmlhbGl6YXRp
b25TZXZlbnRoRGlyZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGVHZXR0ZXIoc3RhdGUsIHRoaXNP
YmplY3QsIHRocm93U2NvcGUpOwogICAgIHRocm93U2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsK
ICAgICBhdXRvKiBzZXZlbnRoRGlyZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGVTZXJpYWxpemVk
VmFsdWUgPSBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsOjpzZXJpYWxpemUoc3RhdGUs
ICpqc0Nhc3Q8SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbCo+KHNldmVudGhEaXJlY3Rs
eVNlcmlhbGl6YWJsZUF0dHJpYnV0ZVZhbHVlKSwgZ2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlKTsK
LSAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJz
ZXZlbnRoRGlyZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGUiKSwgc2V2ZW50aERpcmVjdGx5U2Vy
aWFsaXphYmxlQXR0cmlidXRlU2VyaWFsaXplZFZhbHVlKTsKKyAgICByZXN1bHQtPnB1dERpcmVj
dCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInNldmVudGhEaXJlY3RseVNlcmlhbGl6
YWJsZUF0dHJpYnV0ZSIpLCBzZXZlbnRoRGlyZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGVTZXJp
YWxpemVkVmFsdWUpOwogCiAgICAgYXV0byBlaWdodGhJbmRpcmVjdGx5QXR0cmlidXRlVmFsdWUg
PSBqc1Rlc3RTZXJpYWxpemF0aW9uRWlnaHRoSW5kaXJlY3RseUF0dHJpYnV0ZUdldHRlcihzdGF0
ZSwgdGhpc09iamVjdCwgdGhyb3dTY29wZSk7CiAgICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2Vw
dGlvbigpOwogICAgIGF1dG8qIGVpZ2h0aEluZGlyZWN0bHlBdHRyaWJ1dGVTZXJpYWxpemVkVmFs
dWUgPSBKU1Rlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZTo6c2VyaWFsaXplKHN0
YXRlLCAqanNDYXN0PEpTVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlKj4oZWln
aHRoSW5kaXJlY3RseUF0dHJpYnV0ZVZhbHVlKSwgZ2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlKTsK
LSAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJl
aWdodGhJbmRpcmVjdGx5QXR0cmlidXRlIiksIGVpZ2h0aEluZGlyZWN0bHlBdHRyaWJ1dGVTZXJp
YWxpemVkVmFsdWUpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKHZtLCAiZWlnaHRoSW5kaXJlY3RseUF0dHJpYnV0ZSIpLCBlaWdodGhJbmRpcmVjdGx5
QXR0cmlidXRlU2VyaWFsaXplZFZhbHVlKTsKIAogICAgIGF1dG8gbmludGhPcHRpb25hbERpcmVj
dGx5U2VyaWFsaXphYmxlQXR0cmlidXRlVmFsdWUgPSBqc1Rlc3RTZXJpYWxpemF0aW9uTmludGhP
cHRpb25hbERpcmVjdGx5U2VyaWFsaXphYmxlQXR0cmlidXRlR2V0dGVyKHN0YXRlLCB0aGlzT2Jq
ZWN0LCB0aHJvd1Njb3BlKTsKICAgICB0aHJvd1Njb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7CiAg
ICAgaWYgKCFuaW50aE9wdGlvbmFsRGlyZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGVWYWx1ZS5p
c051bGwoKSkgewogICAgICAgICBhdXRvKiBuaW50aE9wdGlvbmFsRGlyZWN0bHlTZXJpYWxpemFi
bGVBdHRyaWJ1dGVTZXJpYWxpemVkVmFsdWUgPSBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZp
bmFsOjpzZXJpYWxpemUoc3RhdGUsICpqc0Nhc3Q8SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRG
aW5hbCo+KG5pbnRoT3B0aW9uYWxEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZVZhbHVlKSwg
Z2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlKTsKLSAgICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0s
IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAibmludGhPcHRpb25hbERpcmVjdGx5U2VyaWFs
aXphYmxlQXR0cmlidXRlIiksIG5pbnRoT3B0aW9uYWxEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJp
YnV0ZVNlcmlhbGl6ZWRWYWx1ZSk7CisgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAibmludGhPcHRpb25hbERpcmVjdGx5U2VyaWFsaXphYmxl
QXR0cmlidXRlIiksIG5pbnRoT3B0aW9uYWxEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZVNl
cmlhbGl6ZWRWYWx1ZSk7CiAgICAgfSBlbHNlCi0gICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZt
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgIm5pbnRoT3B0aW9uYWxEaXJlY3RseVNlcmlh
bGl6YWJsZUF0dHJpYnV0ZSIpLCBuaW50aE9wdGlvbmFsRGlyZWN0bHlTZXJpYWxpemFibGVBdHRy
aWJ1dGVWYWx1ZSk7CisgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCAibmludGhPcHRpb25hbERpcmVjdGx5U2VyaWFsaXphYmxlQXR0cmlidXRl
IiksIG5pbnRoT3B0aW9uYWxEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZVZhbHVlKTsKIAog
ICAgIGF1dG8gdGVudGhGcm96ZW5BcnJheUF0dHJpYnV0ZVZhbHVlID0ganNUZXN0U2VyaWFsaXph
dGlvblRlbnRoRnJvemVuQXJyYXlBdHRyaWJ1dGVHZXR0ZXIoc3RhdGUsIHRoaXNPYmplY3QsIHRo
cm93U2NvcGUpOwogICAgIHRocm93U2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKLSAgICByZXN1
bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJ0ZW50aEZyb3pl
bkFycmF5QXR0cmlidXRlIiksIHRlbnRoRnJvemVuQXJyYXlBdHRyaWJ1dGVWYWx1ZSk7CisgICAg
cmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJ0ZW50aEZy
b3plbkFycmF5QXR0cmlidXRlIiksIHRlbnRoRnJvemVuQXJyYXlBdHRyaWJ1dGVWYWx1ZSk7CiAK
ICAgICBhdXRvIGVsZXZlbnRoU2VxdWVuY2VBdHRyaWJ1dGVWYWx1ZSA9IGpzVGVzdFNlcmlhbGl6
YXRpb25FbGV2ZW50aFNlcXVlbmNlQXR0cmlidXRlR2V0dGVyKHN0YXRlLCB0aGlzT2JqZWN0LCB0
aHJvd1Njb3BlKTsKICAgICB0aHJvd1Njb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7Ci0gICAgcmVz
dWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiZWxldmVudGhT
ZXF1ZW5jZUF0dHJpYnV0ZSIpLCBlbGV2ZW50aFNlcXVlbmNlQXR0cmlidXRlVmFsdWUpOworICAg
IHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiZWxldmVu
dGhTZXF1ZW5jZUF0dHJpYnV0ZSIpLCBlbGV2ZW50aFNlcXVlbmNlQXR0cmlidXRlVmFsdWUpOwog
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlLmNwcAkocmV2aXNpb24gMjQ5MTI4
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlh
bGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzYsNyAr
NzYsNyBAQCB0ZW1wbGF0ZTw+IEpTVmFsdWUgSlNUZXN0U2VyaWFsaXphdGlvbkluCiB0ZW1wbGF0
ZTw+IHZvaWQgSlNUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2VDb25zdHJ1Y3Rv
cjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMoVk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFs
T2JqZWN0KQogewogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBl
LCBKU1Rlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZTo6cHJvdG90eXBlKHZtLCBn
bG9iYWxPYmplY3QpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgSlNDOjpQ
cm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250
RW51bSk7Ci0gICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRy
aXZpYWxTdHJpbmcoJnZtLCBTdHJpbmcoIlRlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0
YW5jZSJfcykpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVy
dHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFt
ZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZyh2bSwgU3RyaW5nKCJUZXN0U2VyaWFsaXphdGlv
bkluZGlyZWN0SW5oZXJpdGFuY2UiX3MpKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9u
bHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CiAgICAgcHV0RGlyZWN0KHZt
LCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDApLCBKU0M6OlByb3BlcnR5QXR0
cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKIH0K
IApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNl
cmlhbGl6YXRpb25Jbmhlcml0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQuY3BwCShyZXZp
c2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Niw3ICs4
Niw3IEBAIHRlbXBsYXRlPD4gSlNWYWx1ZSBKU1Rlc3RTZXJpYWxpemF0aW9uSW4KIHRlbXBsYXRl
PD4gdm9pZCBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdENvbnN0cnVjdG9yOjppbml0aWFsaXpl
UHJvcGVydGllcyhWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCiB7CiAg
ICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdFNlcmlh
bGl6YXRpb25Jbmhlcml0Ojpwcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCksIEpTQzo6UHJvcGVy
dHlBdHRyaWJ1dGU6OkRvbnREZWxldGUgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25s
eSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKLSAgICBwdXREaXJlY3Qodm0s
IHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZygmdm0sIFN0cmluZygi
VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Il9zKSksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJl
YWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOworICAgIHB1dERpcmVj
dCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKHZtLCBTdHJp
bmcoIlRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdCJfcykpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRl
OjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKICAgICBwdXRE
aXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMCksIEpTQzo6UHJv
cGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVu
dW0pOwogfQogCkBAIC0xODcsNiArMTg3LDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFs
aXphdGlvbkluaGVyaQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlv
bkluaGVyaXRJbmhlcml0TG9uZ0F0dHJpYnV0ZVNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rl
c3RTZXJpYWxpemF0aW9uSW5oZXJpdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dT
Y29wZSYgdGhyb3dTY29wZSkKIHsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVk
KCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMTG9uZz4oc3RhdGUsIHZhbHVl
KTsKQEAgLTIwOSw3ICsyMTAsNyBAQCBKU0M6OkpTT2JqZWN0KiBKU1Rlc3RTZXJpYWxpemF0aW9u
SW5oZXJpCiAKICAgICBhdXRvIGluaGVyaXRMb25nQXR0cmlidXRlVmFsdWUgPSBqc1Rlc3RTZXJp
YWxpemF0aW9uSW5oZXJpdEluaGVyaXRMb25nQXR0cmlidXRlR2V0dGVyKHN0YXRlLCB0aGlzT2Jq
ZWN0LCB0aHJvd1Njb3BlKTsKICAgICB0aHJvd1Njb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7Ci0g
ICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiaW5o
ZXJpdExvbmdBdHRyaWJ1dGUiKSwgaW5oZXJpdExvbmdBdHRyaWJ1dGVWYWx1ZSk7CisgICAgcmVz
dWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJpbmhlcml0TG9u
Z0F0dHJpYnV0ZSIpLCBpbmhlcml0TG9uZ0F0dHJpYnV0ZVZhbHVlKTsKIAogICAgIHJldHVybiBy
ZXN1bHQ7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb25Jbmhl
cml0RmluYWwuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTg4LDcgKzg4LDcgQEAgdGVtcGxhdGU8PiBKU1ZhbHVlIEpTVGVzdFNl
cmlhbGl6YXRpb25JbgogdGVtcGxhdGU8PiB2b2lkIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0
RmluYWxDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMoVk0mIHZtLCBKU0RPTUdsb2Jh
bE9iamVjdCYgZ2xvYmFsT2JqZWN0KQogewogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlO
YW1lcy0+cHJvdG90eXBlLCBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsOjpwcm90b3R5
cGUodm0sIGdsb2JhbE9iamVjdCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUg
fCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1
dGU6OkRvbnRFbnVtKTsKLSAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUs
IGpzTm9udHJpdmlhbFN0cmluZygmdm0sIFN0cmluZygiVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0
RmluYWwiX3MpKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3Bl
cnR5QXR0cmlidXRlOjpEb250RW51bSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5h
bWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcodm0sIFN0cmluZygiVGVzdFNlcmlhbGl6YXRp
b25Jbmhlcml0RmluYWwiX3MpKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBK
U0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5w
cm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDApLCBKU0M6OlByb3BlcnR5QXR0cmlidXRl
OjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKIH0KIApAQCAt
MTkwLDYgKzE5MCw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25JbmhlcmkK
IAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxG
aW5hbExvbmdBdHRyaWJ1dGVGb29TZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0U2VyaWFs
aXphdGlvbkluaGVyaXRGaW5hbCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29w
ZSYgdGhyb3dTY29wZSkKIHsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7
CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMTG9uZz4oc3RhdGUsIHZhbHVlKTsK
QEAgLTIyMSw2ICsyMjIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uSW5o
ZXJpCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZp
bmFsRmluYWxMb25nQXR0cmlidXRlQmFyU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdFNl
cmlhbGl6YXRpb25Jbmhlcml0RmluYWwmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93
U2NvcGUmIHRocm93U2NvcGUpCiB7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBl
ZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETExvbmc+KHN0YXRlLCB2YWx1
ZSk7CkBAIC0yNDMsNyArMjQ1LDcgQEAgSlNDOjpKU09iamVjdCogSlNUZXN0U2VyaWFsaXphdGlv
bkluaGVyaQogCiAgICAgYXV0byBmaW5hbExvbmdBdHRyaWJ1dGVCYXJWYWx1ZSA9IGpzVGVzdFNl
cmlhbGl6YXRpb25Jbmhlcml0RmluYWxGaW5hbExvbmdBdHRyaWJ1dGVCYXJHZXR0ZXIoc3RhdGUs
IHRoaXNPYmplY3QsIHRocm93U2NvcGUpOwogICAgIHRocm93U2NvcGUuYXNzZXJ0Tm9FeGNlcHRp
b24oKTsKLSAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygm
dm0sICJmaW5hbExvbmdBdHRyaWJ1dGVCYXIiKSwgZmluYWxMb25nQXR0cmlidXRlQmFyVmFsdWUp
OworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAi
ZmluYWxMb25nQXR0cmlidXRlQmFyIiksIGZpbmFsTG9uZ0F0dHJpYnV0ZUJhclZhbHVlKTsKIAog
ICAgIHJldHVybiByZXN1bHQ7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZUludGVyZmFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMiw3ICsxMDIsNyBA
QCB0ZW1wbGF0ZTw+IEpTVmFsdWUgSlNUZXN0U2VyaWFsaXplZFNjcmlwCiB0ZW1wbGF0ZTw+IHZv
aWQgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ29uc3RydWN0b3I6OmluaXRp
YWxpemVQcm9wZXJ0aWVzKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkK
IHsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgSlNUZXN0
U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlOjpwcm90b3R5cGUodm0sIGdsb2JhbE9iamVj
dCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUgfCBKU0M6OlByb3BlcnR5QXR0
cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKLSAg
ICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0cmlu
Zygmdm0sIFN0cmluZygiVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSJfcykpLCBK
U0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6
OkRvbnRFbnVtKTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpz
Tm9udHJpdmlhbFN0cmluZyh2bSwgU3RyaW5nKCJUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50
ZXJmYWNlIl9zKSksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9w
ZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlO
YW1lcy0+bGVuZ3RoLCBqc051bWJlcigwKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9u
bHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CiB9CiAKQEAgLTIxNCw2ICsy
MTQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsCiAKIHN0YXRp
YyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VWYWx1
ZVNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRl
cmZhY2UmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUp
CiB7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0
aXZlVmFsdWUgPSBjb252ZXJ0PElETFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTxTZXJpYWxpemVkU2Ny
aXB0VmFsdWU+PihzdGF0ZSwgdmFsdWUpOwpAQCAtMjYyLDYgKzI2Myw3IEBAIEVuY29kZWRKU1Zh
bHVlIGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWwKIAogc3RhdGljIGlubGluZSBib29sIHNldEpT
VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNhY2hlZFZhbHVlU2V0dGVyKEV4ZWNT
dGF0ZSYgc3RhdGUsIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSYgdGhpc09i
amVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKKyAgICBVTlVT
RURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRv
JiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNv
bnZlcnQ8SURMU2VyaWFsaXplZFNjcmlwdFZhbHVlPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4+KHN0
YXRlLCB2YWx1ZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0U3RhbmRhbG9uZURpY3Rpb25hcnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdGFuZGFsb25lRGljdGlvbmFy
eS5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RTdGFuZGFsb25lRGljdGlvbmFyeS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTU4LDcgKzU4LDcgQEAgdGVtcGxhdGU8PiBEaWN0aW9uYXJ5SW1wbE5hbWUgY29udmVydERp
YwogICAgIGlmIChpc051bGxPclVuZGVmaW5lZCkKICAgICAgICAgYm9vbE1lbWJlclZhbHVlID0g
anNVbmRlZmluZWQoKTsKICAgICBlbHNlIHsKLSAgICAgICAgYm9vbE1lbWJlclZhbHVlID0gb2Jq
ZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImJvb2xNZW1i
ZXIiKSk7CisgICAgICAgIGJvb2xNZW1iZXJWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImJvb2xNZW1iZXIiKSk7CiAgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICB9CiAgICAgaWYgKCFib29sTWVtYmVy
VmFsdWUuaXNVbmRlZmluZWQoKSkgewpAQCAtNjksNyArNjksNyBAQCB0ZW1wbGF0ZTw+IERpY3Rp
b25hcnlJbXBsTmFtZSBjb252ZXJ0RGljCiAgICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKQogICAg
ICAgICBjYWxsYmFja01lbWJlclZhbHVlID0ganNVbmRlZmluZWQoKTsKICAgICBlbHNlIHsKLSAg
ICAgICAgY2FsbGJhY2tNZW1iZXJWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZygmc3RhdGUsICJjYWxsYmFja01lbWJlciIpKTsKKyAgICAgICAgY2FsbGJh
Y2tNZW1iZXJWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zyh2bSwgImNhbGxiYWNrTWVtYmVyIikpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIHsgfSk7CiAgICAgfQogICAgIGlmICghY2FsbGJhY2tNZW1iZXJWYWx1ZS5pc1Vu
ZGVmaW5lZCgpKSB7CkBAIC04MCw3ICs4MCw3IEBAIHRlbXBsYXRlPD4gRGljdGlvbmFyeUltcGxO
YW1lIGNvbnZlcnREaWMKICAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQpCiAgICAgICAgIGVudW1N
ZW1iZXJWYWx1ZSA9IGpzVW5kZWZpbmVkKCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIGVudW1NZW1i
ZXJWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3Rh
dGUsICJlbnVtTWVtYmVyIikpOworICAgICAgICBlbnVtTWVtYmVyVmFsdWUgPSBvYmplY3QtPmdl
dCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJlbnVtTWVtYmVyIikpOwogICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgfQogICAgIGlm
ICghZW51bU1lbWJlclZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKQEAgLTkyLDcgKzkyLDcgQEAgdGVt
cGxhdGU8PiBEaWN0aW9uYXJ5SW1wbE5hbWUgY29udmVydERpYwogICAgIGlmIChpc051bGxPclVu
ZGVmaW5lZCkKICAgICAgICAgcGFydGlhbEJvb2xlYW5NZW1iZXJWYWx1ZSA9IGpzVW5kZWZpbmVk
KCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIHBhcnRpYWxCb29sZWFuTWVtYmVyVmFsdWUgPSBvYmpl
Y3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAicGFydGlhbEJv
b2xlYW5NZW1iZXIiKSk7CisgICAgICAgIHBhcnRpYWxCb29sZWFuTWVtYmVyVmFsdWUgPSBvYmpl
Y3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJwYXJ0aWFsQm9vbGVh
bk1lbWJlciIpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0p
OwogICAgIH0KICAgICBpZiAoIXBhcnRpYWxCb29sZWFuTWVtYmVyVmFsdWUuaXNVbmRlZmluZWQo
KSkgewpAQCAtMTA1LDcgKzEwNSw3IEBAIHRlbXBsYXRlPD4gRGljdGlvbmFyeUltcGxOYW1lIGNv
bnZlcnREaWMKICAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQpCiAgICAgICAgIHBhcnRpYWxCb29s
ZWFuTWVtYmVyV2l0aElnbm9yZWRDb25kaXRpb25hbFZhbHVlID0ganNVbmRlZmluZWQoKTsKICAg
ICBlbHNlIHsKLSAgICAgICAgcGFydGlhbEJvb2xlYW5NZW1iZXJXaXRoSWdub3JlZENvbmRpdGlv
bmFsVmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0
YXRlLCAicGFydGlhbEJvb2xlYW5NZW1iZXJXaXRoSWdub3JlZENvbmRpdGlvbmFsIikpOworICAg
ICAgICBwYXJ0aWFsQm9vbGVhbk1lbWJlcldpdGhJZ25vcmVkQ29uZGl0aW9uYWxWYWx1ZSA9IG9i
amVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInBhcnRpYWxCb29s
ZWFuTWVtYmVyV2l0aElnbm9yZWRDb25kaXRpb25hbCIpKTsKICAgICAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0KICAgICBpZiAoIXBhcnRpYWxCb29sZWFu
TWVtYmVyV2l0aElnbm9yZWRDb25kaXRpb25hbFZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKQEAgLTEx
OCw3ICsxMTgsNyBAQCB0ZW1wbGF0ZTw+IERpY3Rpb25hcnlJbXBsTmFtZSBjb252ZXJ0RGljCiAg
ICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKQogICAgICAgICBwYXJ0aWFsQ2FsbGJhY2tNZW1iZXJW
YWx1ZSA9IGpzVW5kZWZpbmVkKCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIHBhcnRpYWxDYWxsYmFj
a01lbWJlclZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KCZzdGF0ZSwgInBhcnRpYWxDYWxsYmFja01lbWJlciIpKTsKKyAgICAgICAgcGFydGlhbENhbGxi
YWNrTWVtYmVyVmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJp
bmcodm0sICJwYXJ0aWFsQ2FsbGJhY2tNZW1iZXIiKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICB9CiAgICAgaWYgKCFwYXJ0aWFsQ2FsbGJhY2tN
ZW1iZXJWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7CkBAIC0xMzEsNyArMTMxLDcgQEAgdGVtcGxhdGU8
PiBEaWN0aW9uYXJ5SW1wbE5hbWUgY29udmVydERpYwogICAgIGlmIChpc051bGxPclVuZGVmaW5l
ZCkKICAgICAgICAgcGFydGlhbEVudW1NZW1iZXJWYWx1ZSA9IGpzVW5kZWZpbmVkKCk7CiAgICAg
ZWxzZSB7Ci0gICAgICAgIHBhcnRpYWxFbnVtTWVtYmVyVmFsdWUgPSBvYmplY3QtPmdldCgmc3Rh
dGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAicGFydGlhbEVudW1NZW1iZXIiKSk7
CisgICAgICAgIHBhcnRpYWxFbnVtTWVtYmVyVmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJwYXJ0aWFsRW51bU1lbWJlciIpKTsKICAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0KICAgICBpZiAoIXBh
cnRpYWxFbnVtTWVtYmVyVmFsdWUuaXNVbmRlZmluZWQoKSkgewpAQCAtMTQ0LDcgKzE0NCw3IEBA
IHRlbXBsYXRlPD4gRGljdGlvbmFyeUltcGxOYW1lIGNvbnZlcnREaWMKICAgICBpZiAoaXNOdWxs
T3JVbmRlZmluZWQpCiAgICAgICAgIHBhcnRpYWxSZXF1aXJlZExvbmdNZW1iZXJWYWx1ZSA9IGpz
VW5kZWZpbmVkKCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIHBhcnRpYWxSZXF1aXJlZExvbmdNZW1i
ZXJWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3Rh
dGUsICJwYXJ0aWFsUmVxdWlyZWRMb25nTWVtYmVyIikpOworICAgICAgICBwYXJ0aWFsUmVxdWly
ZWRMb25nTWVtYmVyVmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21T
dHJpbmcodm0sICJwYXJ0aWFsUmVxdWlyZWRMb25nTWVtYmVyIikpOwogICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgfQogICAgIGlmICghcGFydGlhbFJl
cXVpcmVkTG9uZ01lbWJlclZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKQEAgLTE2MCw3ICsxNjAsNyBA
QCB0ZW1wbGF0ZTw+IERpY3Rpb25hcnlJbXBsTmFtZSBjb252ZXJ0RGljCiAgICAgaWYgKGlzTnVs
bE9yVW5kZWZpbmVkKQogICAgICAgICBwYXJ0aWFsU3RyaW5nTWVtYmVyVmFsdWUgPSBqc1VuZGVm
aW5lZCgpOwogICAgIGVsc2UgewotICAgICAgICBwYXJ0aWFsU3RyaW5nTWVtYmVyVmFsdWUgPSBv
YmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAicGFydGlh
bFN0cmluZ01lbWJlciIpKTsKKyAgICAgICAgcGFydGlhbFN0cmluZ01lbWJlclZhbHVlID0gb2Jq
ZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAicGFydGlhbFN0cmlu
Z01lbWJlciIpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0p
OwogICAgIH0KICAgICBpZiAoIXBhcnRpYWxTdHJpbmdNZW1iZXJWYWx1ZS5pc1VuZGVmaW5lZCgp
KSB7CkBAIC0xNzMsNyArMTczLDcgQEAgdGVtcGxhdGU8PiBEaWN0aW9uYXJ5SW1wbE5hbWUgY29u
dmVydERpYwogICAgIGlmIChpc051bGxPclVuZGVmaW5lZCkKICAgICAgICAgcGFydGlhbFN0cmlu
Z01lbWJlcldpdGhFbmFibGVkQnlTZXR0aW5nVmFsdWUgPSBqc1VuZGVmaW5lZCgpOwogICAgIGVs
c2UgewotICAgICAgICBwYXJ0aWFsU3RyaW5nTWVtYmVyV2l0aEVuYWJsZWRCeVNldHRpbmdWYWx1
ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJw
YXJ0aWFsU3RyaW5nTWVtYmVyV2l0aEVuYWJsZWRCeVNldHRpbmciKSk7CisgICAgICAgIHBhcnRp
YWxTdHJpbmdNZW1iZXJXaXRoRW5hYmxlZEJ5U2V0dGluZ1ZhbHVlID0gb2JqZWN0LT5nZXQoJnN0
YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAicGFydGlhbFN0cmluZ01lbWJlcldpdGhF
bmFibGVkQnlTZXR0aW5nIikpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2Nv
cGUsIHsgfSk7CiAgICAgfQogICAgIGlmICghcGFydGlhbFN0cmluZ01lbWJlcldpdGhFbmFibGVk
QnlTZXR0aW5nVmFsdWUuaXNVbmRlZmluZWQoKSkgewpAQCAtMTg2LDcgKzE4Niw3IEBAIHRlbXBs
YXRlPD4gRGljdGlvbmFyeUltcGxOYW1lIGNvbnZlcnREaWMKICAgICBpZiAoaXNOdWxsT3JVbmRl
ZmluZWQpCiAgICAgICAgIHBhcnRpYWxVbnNpZ25lZExvbmdNZW1iZXJXaXRoSW1wbGVtZW50ZWRB
c1ZhbHVlID0ganNVbmRlZmluZWQoKTsKICAgICBlbHNlIHsKLSAgICAgICAgcGFydGlhbFVuc2ln
bmVkTG9uZ01lbWJlcldpdGhJbXBsZW1lbnRlZEFzVmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUs
IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAicGFydGlhbFVuc2lnbmVkTG9uZ01lbWJl
cldpdGhJbXBsZW1lbnRlZEFzIikpOworICAgICAgICBwYXJ0aWFsVW5zaWduZWRMb25nTWVtYmVy
V2l0aEltcGxlbWVudGVkQXNWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZyh2bSwgInBhcnRpYWxVbnNpZ25lZExvbmdNZW1iZXJXaXRoSW1wbGVtZW50ZWRB
cyIpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAg
IH0KICAgICBpZiAoIXBhcnRpYWxVbnNpZ25lZExvbmdNZW1iZXJXaXRoSW1wbGVtZW50ZWRBc1Zh
bHVlLmlzVW5kZWZpbmVkKCkpIHsKQEAgLTE5OCw3ICsxOTgsNyBAQCB0ZW1wbGF0ZTw+IERpY3Rp
b25hcnlJbXBsTmFtZSBjb252ZXJ0RGljCiAgICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKQogICAg
ICAgICBzdHJpbmdNZW1iZXJWYWx1ZSA9IGpzVW5kZWZpbmVkKCk7CiAgICAgZWxzZSB7Ci0gICAg
ICAgIHN0cmluZ01lbWJlclZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKCZzdGF0ZSwgInN0cmluZ01lbWJlciIpKTsKKyAgICAgICAgc3RyaW5nTWVtYmVy
VmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJz
dHJpbmdNZW1iZXIiKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
eyB9KTsKICAgICB9CiAgICAgaWYgKCFzdHJpbmdNZW1iZXJWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7
CkBAIC0yMTYsNjcgKzIxNiw2NyBAQCBKU0M6OkpTT2JqZWN0KiBjb252ZXJ0RGljdGlvbmFyeVRv
SlMoSlNDCiAKICAgICBpZiAoIUlETEJvb2xlYW46OmlzTnVsbFZhbHVlKGRpY3Rpb25hcnkuYm9v
bE1lbWJlcikpIHsKICAgICAgICAgYXV0byBib29sTWVtYmVyVmFsdWUgPSB0b0pTPElETEJvb2xl
YW4+KElETEJvb2xlYW46OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZShkaWN0aW9uYXJ5LmJvb2xN
ZW1iZXIpKTsKLSAgICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6
ZnJvbVN0cmluZygmdm0sICJib29sTWVtYmVyIiksIGJvb2xNZW1iZXJWYWx1ZSk7CisgICAgICAg
IHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJi
b29sTWVtYmVyIiksIGJvb2xNZW1iZXJWYWx1ZSk7CiAgICAgfQogICAgIGlmICghSURMQ2FsbGJh
Y2tGdW5jdGlvbjxKU1ZvaWRDYWxsYmFjaz46OmlzTnVsbFZhbHVlKGRpY3Rpb25hcnkuY2FsbGJh
Y2tNZW1iZXIpKSB7CiAgICAgICAgIGF1dG8gY2FsbGJhY2tNZW1iZXJWYWx1ZSA9IHRvSlM8SURM
Q2FsbGJhY2tGdW5jdGlvbjxKU1ZvaWRDYWxsYmFjaz4+KHN0YXRlLCBnbG9iYWxPYmplY3QsIElE
TENhbGxiYWNrRnVuY3Rpb248SlNWb2lkQ2FsbGJhY2s+OjpleHRyYWN0VmFsdWVGcm9tTnVsbGFi
bGUoZGljdGlvbmFyeS5jYWxsYmFja01lbWJlcikpOwotICAgICAgICByZXN1bHQtPnB1dERpcmVj
dCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImNhbGxiYWNrTWVtYmVyIiks
IGNhbGxiYWNrTWVtYmVyVmFsdWUpOworICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlND
OjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiY2FsbGJhY2tNZW1iZXIiKSwgY2FsbGJhY2tN
ZW1iZXJWYWx1ZSk7CiAgICAgfQogICAgIGlmICghSURMRW51bWVyYXRpb248VGVzdFN0YW5kYWxv
bmVEaWN0aW9uYXJ5OjpFbnVtSW5TdGFuZGFsb25lRGljdGlvbmFyeUZpbGU+Ojppc051bGxWYWx1
ZShkaWN0aW9uYXJ5LmVudW1NZW1iZXIpKSB7CiAgICAgICAgIGF1dG8gZW51bU1lbWJlclZhbHVl
ID0gdG9KUzxJRExFbnVtZXJhdGlvbjxUZXN0U3RhbmRhbG9uZURpY3Rpb25hcnk6OkVudW1JblN0
YW5kYWxvbmVEaWN0aW9uYXJ5RmlsZT4+KHN0YXRlLCBJRExFbnVtZXJhdGlvbjxUZXN0U3RhbmRh
bG9uZURpY3Rpb25hcnk6OkVudW1JblN0YW5kYWxvbmVEaWN0aW9uYXJ5RmlsZT46OmV4dHJhY3RW
YWx1ZUZyb21OdWxsYWJsZShkaWN0aW9uYXJ5LmVudW1NZW1iZXIpKTsKLSAgICAgICAgcmVzdWx0
LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJlbnVtTWVt
YmVyIiksIGVudW1NZW1iZXJWYWx1ZSk7CisgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBK
U0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJlbnVtTWVtYmVyIiksIGVudW1NZW1iZXJW
YWx1ZSk7CiAgICAgfQogI2lmIEVOQUJMRShDb25kaXRpb25hbDEzKSB8fCBFTkFCTEUoQ29uZGl0
aW9uYWwxNCkKICAgICBpZiAoIUlETEJvb2xlYW46OmlzTnVsbFZhbHVlKGRpY3Rpb25hcnkucGFy
dGlhbEJvb2xlYW5NZW1iZXIpKSB7CiAgICAgICAgIGF1dG8gcGFydGlhbEJvb2xlYW5NZW1iZXJW
YWx1ZSA9IHRvSlM8SURMQm9vbGVhbj4oSURMQm9vbGVhbjo6ZXh0cmFjdFZhbHVlRnJvbU51bGxh
YmxlKGRpY3Rpb25hcnkucGFydGlhbEJvb2xlYW5NZW1iZXIpKTsKLSAgICAgICAgcmVzdWx0LT5w
dXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJwYXJ0aWFsQm9v
bGVhbk1lbWJlciIpLCBwYXJ0aWFsQm9vbGVhbk1lbWJlclZhbHVlKTsKKyAgICAgICAgcmVzdWx0
LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInBhcnRpYWxC
b29sZWFuTWVtYmVyIiksIHBhcnRpYWxCb29sZWFuTWVtYmVyVmFsdWUpOwogICAgIH0KICNlbmRp
ZgogI2lmIEVOQUJMRShDb25kaXRpb25hbDEzKSB8fCBFTkFCTEUoQ29uZGl0aW9uYWwxNCkKICAg
ICBpZiAoIUlETEJvb2xlYW46OmlzTnVsbFZhbHVlKGRpY3Rpb25hcnkucGFydGlhbEJvb2xlYW5N
ZW1iZXJXaXRoSWdub3JlZENvbmRpdGlvbmFsKSkgewogICAgICAgICBhdXRvIHBhcnRpYWxCb29s
ZWFuTWVtYmVyV2l0aElnbm9yZWRDb25kaXRpb25hbFZhbHVlID0gdG9KUzxJRExCb29sZWFuPihJ
RExCb29sZWFuOjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUoZGljdGlvbmFyeS5wYXJ0aWFsQm9v
bGVhbk1lbWJlcldpdGhJZ25vcmVkQ29uZGl0aW9uYWwpKTsKLSAgICAgICAgcmVzdWx0LT5wdXRE
aXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJwYXJ0aWFsQm9vbGVh
bk1lbWJlcldpdGhJZ25vcmVkQ29uZGl0aW9uYWwiKSwgcGFydGlhbEJvb2xlYW5NZW1iZXJXaXRo
SWdub3JlZENvbmRpdGlvbmFsVmFsdWUpOworICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwg
SlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAicGFydGlhbEJvb2xlYW5NZW1iZXJXaXRo
SWdub3JlZENvbmRpdGlvbmFsIiksIHBhcnRpYWxCb29sZWFuTWVtYmVyV2l0aElnbm9yZWRDb25k
aXRpb25hbFZhbHVlKTsKICAgICB9CiAjZW5kaWYKICNpZiBFTkFCTEUoQ29uZGl0aW9uYWwxMykg
fHwgRU5BQkxFKENvbmRpdGlvbmFsMTQpCiAgICAgaWYgKCFJRExDYWxsYmFja0Z1bmN0aW9uPEpT
Vm9pZENhbGxiYWNrPjo6aXNOdWxsVmFsdWUoZGljdGlvbmFyeS5wYXJ0aWFsQ2FsbGJhY2tNZW1i
ZXIpKSB7CiAgICAgICAgIGF1dG8gcGFydGlhbENhbGxiYWNrTWVtYmVyVmFsdWUgPSB0b0pTPElE
TENhbGxiYWNrRnVuY3Rpb248SlNWb2lkQ2FsbGJhY2s+PihzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBJ
RExDYWxsYmFja0Z1bmN0aW9uPEpTVm9pZENhbGxiYWNrPjo6ZXh0cmFjdFZhbHVlRnJvbU51bGxh
YmxlKGRpY3Rpb25hcnkucGFydGlhbENhbGxiYWNrTWVtYmVyKSk7Ci0gICAgICAgIHJlc3VsdC0+
cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAicGFydGlhbENh
bGxiYWNrTWVtYmVyIiksIHBhcnRpYWxDYWxsYmFja01lbWJlclZhbHVlKTsKKyAgICAgICAgcmVz
dWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInBhcnRp
YWxDYWxsYmFja01lbWJlciIpLCBwYXJ0aWFsQ2FsbGJhY2tNZW1iZXJWYWx1ZSk7CiAgICAgfQog
I2VuZGlmCiAjaWYgRU5BQkxFKENvbmRpdGlvbmFsMTMpIHx8IEVOQUJMRShDb25kaXRpb25hbDE0
KQogICAgIGlmICghSURMRW51bWVyYXRpb248VGVzdFN0YW5kYWxvbmVEaWN0aW9uYXJ5OjpFbnVt
SW5TdGFuZGFsb25lRGljdGlvbmFyeUZpbGU+Ojppc051bGxWYWx1ZShkaWN0aW9uYXJ5LnBhcnRp
YWxFbnVtTWVtYmVyKSkgewogICAgICAgICBhdXRvIHBhcnRpYWxFbnVtTWVtYmVyVmFsdWUgPSB0
b0pTPElETEVudW1lcmF0aW9uPFRlc3RTdGFuZGFsb25lRGljdGlvbmFyeTo6RW51bUluU3RhbmRh
bG9uZURpY3Rpb25hcnlGaWxlPj4oc3RhdGUsIElETEVudW1lcmF0aW9uPFRlc3RTdGFuZGFsb25l
RGljdGlvbmFyeTo6RW51bUluU3RhbmRhbG9uZURpY3Rpb25hcnlGaWxlPjo6ZXh0cmFjdFZhbHVl
RnJvbU51bGxhYmxlKGRpY3Rpb25hcnkucGFydGlhbEVudW1NZW1iZXIpKTsKLSAgICAgICAgcmVz
dWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJwYXJ0
aWFsRW51bU1lbWJlciIpLCBwYXJ0aWFsRW51bU1lbWJlclZhbHVlKTsKKyAgICAgICAgcmVzdWx0
LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInBhcnRpYWxF
bnVtTWVtYmVyIiksIHBhcnRpYWxFbnVtTWVtYmVyVmFsdWUpOwogICAgIH0KICNlbmRpZgogI2lm
IEVOQUJMRShDb25kaXRpb25hbDEzKSB8fCBFTkFCTEUoQ29uZGl0aW9uYWwxNCkKICAgICBhdXRv
IHBhcnRpYWxSZXF1aXJlZExvbmdNZW1iZXJWYWx1ZSA9IHRvSlM8SURMTG9uZz4oZGljdGlvbmFy
eS5wYXJ0aWFsUmVxdWlyZWRMb25nTWVtYmVyKTsKLSAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwg
SlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgInBhcnRpYWxSZXF1aXJlZExvbmdNZW1i
ZXIiKSwgcGFydGlhbFJlcXVpcmVkTG9uZ01lbWJlclZhbHVlKTsKKyAgICByZXN1bHQtPnB1dERp
cmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAicGFydGlhbFJlcXVpcmVk
TG9uZ01lbWJlciIpLCBwYXJ0aWFsUmVxdWlyZWRMb25nTWVtYmVyVmFsdWUpOwogI2VuZGlmCiAj
aWYgRU5BQkxFKENvbmRpdGlvbmFsMTMpIHx8IEVOQUJMRShDb25kaXRpb25hbDE0KQogICAgIGlm
ICghSURMRE9NU3RyaW5nOjppc051bGxWYWx1ZShkaWN0aW9uYXJ5LnBhcnRpYWxTdHJpbmdNZW1i
ZXIpKSB7CiAgICAgICAgIGF1dG8gcGFydGlhbFN0cmluZ01lbWJlclZhbHVlID0gdG9KUzxJRExE
T01TdHJpbmc+KHN0YXRlLCBJRExET01TdHJpbmc6OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZShk
aWN0aW9uYXJ5LnBhcnRpYWxTdHJpbmdNZW1iZXIpKTsKLSAgICAgICAgcmVzdWx0LT5wdXREaXJl
Y3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJwYXJ0aWFsU3RyaW5nTWVt
YmVyIiksIHBhcnRpYWxTdHJpbmdNZW1iZXJWYWx1ZSk7CisgICAgICAgIHJlc3VsdC0+cHV0RGly
ZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJwYXJ0aWFsU3RyaW5nTWVt
YmVyIiksIHBhcnRpYWxTdHJpbmdNZW1iZXJWYWx1ZSk7CiAgICAgfQogI2VuZGlmCiAjaWYgRU5B
QkxFKENvbmRpdGlvbmFsMTMpIHx8IEVOQUJMRShDb25kaXRpb25hbDE0KQogICAgIGlmIChkb3du
Y2FzdDxEb2N1bWVudD4oanNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmdsb2JhbE9iamVjdCkt
PnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSktPnNldHRpbmdzKCkudGVzdFNldHRpbmdFbmFibGVk
KCkpIHsKICAgICAgICAgaWYgKCFJRExET01TdHJpbmc6OmlzTnVsbFZhbHVlKGRpY3Rpb25hcnku
cGFydGlhbFN0cmluZ01lbWJlcldpdGhFbmFibGVkQnlTZXR0aW5nKSkgewogICAgICAgICAgICAg
YXV0byBwYXJ0aWFsU3RyaW5nTWVtYmVyV2l0aEVuYWJsZWRCeVNldHRpbmdWYWx1ZSA9IHRvSlM8
SURMRE9NU3RyaW5nPihzdGF0ZSwgSURMRE9NU3RyaW5nOjpleHRyYWN0VmFsdWVGcm9tTnVsbGFi
bGUoZGljdGlvbmFyeS5wYXJ0aWFsU3RyaW5nTWVtYmVyV2l0aEVuYWJsZWRCeVNldHRpbmcpKTsK
LSAgICAgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21T
dHJpbmcoJnZtLCAicGFydGlhbFN0cmluZ01lbWJlcldpdGhFbmFibGVkQnlTZXR0aW5nIiksIHBh
cnRpYWxTdHJpbmdNZW1iZXJXaXRoRW5hYmxlZEJ5U2V0dGluZ1ZhbHVlKTsKKyAgICAgICAgICAg
IHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJw
YXJ0aWFsU3RyaW5nTWVtYmVyV2l0aEVuYWJsZWRCeVNldHRpbmciKSwgcGFydGlhbFN0cmluZ01l
bWJlcldpdGhFbmFibGVkQnlTZXR0aW5nVmFsdWUpOwogICAgICAgICB9CiAgICAgfQogI2VuZGlm
CiAjaWYgRU5BQkxFKENvbmRpdGlvbmFsMTMpIHx8IEVOQUJMRShDb25kaXRpb25hbDE0KQogICAg
IGlmICghSURMVW5zaWduZWRMb25nOjppc051bGxWYWx1ZShkaWN0aW9uYXJ5LnBhcnRpYWxVbnNp
Z25lZExvbmdNZW1iZXIpKSB7CiAgICAgICAgIGF1dG8gcGFydGlhbFVuc2lnbmVkTG9uZ01lbWJl
cldpdGhJbXBsZW1lbnRlZEFzVmFsdWUgPSB0b0pTPElETFVuc2lnbmVkTG9uZz4oSURMVW5zaWdu
ZWRMb25nOjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUoZGljdGlvbmFyeS5wYXJ0aWFsVW5zaWdu
ZWRMb25nTWVtYmVyKSk7Ci0gICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50
aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAicGFydGlhbFVuc2lnbmVkTG9uZ01lbWJlcldpdGhJbXBs
ZW1lbnRlZEFzIiksIHBhcnRpYWxVbnNpZ25lZExvbmdNZW1iZXJXaXRoSW1wbGVtZW50ZWRBc1Zh
bHVlKTsKKyAgICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJv
bVN0cmluZyh2bSwgInBhcnRpYWxVbnNpZ25lZExvbmdNZW1iZXJXaXRoSW1wbGVtZW50ZWRBcyIp
LCBwYXJ0aWFsVW5zaWduZWRMb25nTWVtYmVyV2l0aEltcGxlbWVudGVkQXNWYWx1ZSk7CiAgICAg
fQogI2VuZGlmCiAgICAgaWYgKCFJRExET01TdHJpbmc6OmlzTnVsbFZhbHVlKGRpY3Rpb25hcnku
c3RyaW5nTWVtYmVyKSkgewogICAgICAgICBhdXRvIHN0cmluZ01lbWJlclZhbHVlID0gdG9KUzxJ
RExET01TdHJpbmc+KHN0YXRlLCBJRExET01TdHJpbmc6OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJs
ZShkaWN0aW9uYXJ5LnN0cmluZ01lbWJlcikpOwotICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2
bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgInN0cmluZ01lbWJlciIpLCBzdHJp
bmdNZW1iZXJWYWx1ZSk7CisgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50
aWZpZXI6OmZyb21TdHJpbmcodm0sICJzdHJpbmdNZW1iZXIiKSwgc3RyaW5nTWVtYmVyVmFsdWUp
OwogICAgIH0KICAgICByZXR1cm4gcmVzdWx0OwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZp
ZXIuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NCw3
ICs4NCw3IEBAIHRlbXBsYXRlPD4gSlNWYWx1ZSBKU1Rlc3RTdHJpbmdpZmllckNvbnMKIHRlbXBs
YXRlPD4gdm9pZCBKU1Rlc3RTdHJpbmdpZmllckNvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVy
dGllcyhWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCiB7CiAgICAgcHV0
RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdFN0cmluZ2lmaWVy
Ojpwcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRv
bnREZWxldGUgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVy
dHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKLSAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFt
ZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZygmdm0sIFN0cmluZygiVGVzdFN0cmluZ2lmaWVy
Il9zKSksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0
dHJpYnV0ZTo6RG9udEVudW0pOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+
bmFtZSwganNOb250cml2aWFsU3RyaW5nKHZtLCBTdHJpbmcoIlRlc3RTdHJpbmdpZmllciJfcykp
LCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1
dGU6OkRvbnRFbnVtKTsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0
aCwganNOdW1iZXIoMCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQ
cm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJBbm9ueW1vdXNPcGVyYXRp
b24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RTdHJpbmdpZmllckFub255bW91c09wZXJhdGlvbi5jcHAJKHJldmlzaW9uIDI0
OTEyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RT
dHJpbmdpZmllckFub255bW91c09wZXJhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg0LDcg
Kzg0LDcgQEAgdGVtcGxhdGU8PiBKU1ZhbHVlIEpTVGVzdFN0cmluZ2lmaWVyQW5vbgogdGVtcGxh
dGU8PiB2b2lkIEpTVGVzdFN0cmluZ2lmaWVyQW5vbnltb3VzT3BlcmF0aW9uQ29uc3RydWN0b3I6
OmluaXRpYWxpemVQcm9wZXJ0aWVzKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9i
amVjdCkKIHsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwg
SlNUZXN0U3RyaW5naWZpZXJBbm9ueW1vdXNPcGVyYXRpb246OnByb3RvdHlwZSh2bSwgZ2xvYmFs
T2JqZWN0KSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IEpTQzo6UHJvcGVy
dHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0p
OwotICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFs
U3RyaW5nKCZ2bSwgU3RyaW5nKCJUZXN0U3RyaW5naWZpZXJBbm9ueW1vdXNPcGVyYXRpb24iX3Mp
KSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmli
dXRlOjpEb250RW51bSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1l
LCBqc05vbnRyaXZpYWxTdHJpbmcodm0sIFN0cmluZygiVGVzdFN0cmluZ2lmaWVyQW5vbnltb3Vz
T3BlcmF0aW9uIl9zKSksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQ
cm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVy
dHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigwKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVh
ZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CiB9CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllck5h
bWVkT3BlcmF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvbi5jcHAJKHJldmlz
aW9uIDI0OTEyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RTdHJpbmdpZmllck5hbWVkT3BlcmF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODUs
NyArODUsNyBAQCB0ZW1wbGF0ZTw+IEpTVmFsdWUgSlNUZXN0U3RyaW5naWZpZXJOYW1lCiB0ZW1w
bGF0ZTw+IHZvaWQgSlNUZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvbkNvbnN0cnVjdG9yOjpp
bml0aWFsaXplUHJvcGVydGllcyhWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmpl
Y3QpCiB7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpT
VGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRpb246OnByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0
KSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IEpTQzo6UHJvcGVydHlBdHRy
aWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwotICAg
IHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5n
KCZ2bSwgU3RyaW5nKCJUZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvbiJfcykpLCBKU0M6OlBy
b3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRF
bnVtKTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJp
dmlhbFN0cmluZyh2bSwgU3RyaW5nKCJUZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvbiJfcykp
LCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1
dGU6OkRvbnRFbnVtKTsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0
aCwganNOdW1iZXIoMCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQ
cm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25JbXBsZW1l
bnRlZEFzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25JbXBsZW1lbnRlZEFzLmNwcAkocmV2
aXNpb24gMjQ5MTI4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uSW1wbGVtZW50ZWRBcy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTg1LDcgKzg1LDcgQEAgdGVtcGxhdGU8PiBKU1ZhbHVlIEpTVGVzdFN0cmluZ2lmaWVy
T3BlcgogdGVtcGxhdGU8PiB2b2lkIEpTVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uSW1wbGVtZW50
ZWRBc0NvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGllcyhWTSYgdm0sIEpTRE9NR2xvYmFs
T2JqZWN0JiBnbG9iYWxPYmplY3QpCiB7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5h
bWVzLT5wcm90b3R5cGUsIEpTVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uSW1wbGVtZW50ZWRBczo6
cHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250
RGVsZXRlIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5
QXR0cmlidXRlOjpEb250RW51bSk7Ci0gICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVz
LT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcoJnZtLCBTdHJpbmcoIlRlc3RTdHJpbmdpZmllck9w
ZXJhdGlvbkltcGxlbWVudGVkQXMiX3MpKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9u
bHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CisgICAgcHV0RGlyZWN0KHZt
LCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcodm0sIFN0cmluZygi
VGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uSW1wbGVtZW50ZWRBcyJfcykpLCBKU0M6OlByb3BlcnR5
QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsK
ICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMCks
IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0
ZTo6RG9udEVudW0pOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25OYW1lZFRvU3RyaW5nLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
U3RyaW5naWZpZXJPcGVyYXRpb25OYW1lZFRvU3RyaW5nLmNwcAkocmV2aXNpb24gMjQ5MTI4KQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lm
aWVyT3BlcmF0aW9uTmFtZWRUb1N0cmluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg0LDcgKzg0
LDcgQEAgdGVtcGxhdGU8PiBKU1ZhbHVlIEpTVGVzdFN0cmluZ2lmaWVyT3BlcgogdGVtcGxhdGU8
PiB2b2lkIEpTVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uTmFtZWRUb1N0cmluZ0NvbnN0cnVjdG9y
Ojppbml0aWFsaXplUHJvcGVydGllcyhWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxP
YmplY3QpCiB7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUs
IEpTVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uTmFtZWRUb1N0cmluZzo6cHJvdG90eXBlKHZtLCBn
bG9iYWxPYmplY3QpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgSlNDOjpQ
cm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250
RW51bSk7Ci0gICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRy
aXZpYWxTdHJpbmcoJnZtLCBTdHJpbmcoIlRlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9T
dHJpbmciX3MpKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3Bl
cnR5QXR0cmlidXRlOjpEb250RW51bSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5h
bWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcodm0sIFN0cmluZygiVGVzdFN0cmluZ2lmaWVy
T3BlcmF0aW9uTmFtZWRUb1N0cmluZyJfcykpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFk
T25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKICAgICBwdXREaXJlY3Qo
dm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMCksIEpTQzo6UHJvcGVydHlB
dHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwog
fQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
U3RyaW5naWZpZXJSZWFkT25seUF0dHJpYnV0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlB
dHRyaWJ1dGUuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJSZWFkT25seUF0dHJpYnV0ZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTg2LDcgKzg2LDcgQEAgdGVtcGxhdGU8PiBKU1ZhbHVlIEpTVGVz
dFN0cmluZ2lmaWVyUmVhZAogdGVtcGxhdGU8PiB2b2lkIEpTVGVzdFN0cmluZ2lmaWVyUmVhZE9u
bHlBdHRyaWJ1dGVDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMoVk0mIHZtLCBKU0RP
TUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQogewogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJv
cGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3RTdHJpbmdpZmllclJlYWRPbmx5QXR0cmlidXRl
Ojpwcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRv
bnREZWxldGUgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVy
dHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKLSAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFt
ZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZygmdm0sIFN0cmluZygiVGVzdFN0cmluZ2lmaWVy
UmVhZE9ubHlBdHRyaWJ1dGUiX3MpKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkg
fCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CisgICAgcHV0RGlyZWN0KHZtLCB2
bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcodm0sIFN0cmluZygiVGVz
dFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGUiX3MpKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0
ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CiAgICAgcHV0
RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDApLCBKU0M6OlBy
b3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRF
bnVtKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmlidXRlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJS
ZWFkV3JpdGVBdHRyaWJ1dGUuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRy
aWJ1dGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Nyw3ICs4Nyw3IEBAIHRlbXBsYXRlPD4gSlNW
YWx1ZSBKU1Rlc3RTdHJpbmdpZmllclJlYWQKIHRlbXBsYXRlPD4gdm9pZCBKU1Rlc3RTdHJpbmdp
ZmllclJlYWRXcml0ZUF0dHJpYnV0ZUNvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGllcyhW
TSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCiB7CiAgICAgcHV0RGlyZWN0
KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdFN0cmluZ2lmaWVyUmVhZFdy
aXRlQXR0cmlidXRlOjpwcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCksIEpTQzo6UHJvcGVydHlB
dHRyaWJ1dGU6OkRvbnREZWxldGUgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8
IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKLSAgICBwdXREaXJlY3Qodm0sIHZt
LnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZygmdm0sIFN0cmluZygiVGVz
dFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmlidXRlIl9zKSksIEpTQzo6UHJvcGVydHlBdHRyaWJ1
dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOworICAgIHB1
dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKHZt
LCBTdHJpbmcoIlRlc3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJpYnV0ZSJfcykpLCBKU0M6OlBy
b3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRF
bnVtKTsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1i
ZXIoMCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0
dHJpYnV0ZTo6RG9udEVudW0pOwogfQogCkBAIC0xOTQsNiArMTk0LDcgQEAgRW5jb2RlZEpTVmFs
dWUganNUZXN0U3RyaW5naWZpZXJSZWFkV3JpdAogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNU
ZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGVJZGVudGlmaWVyU2V0dGVyKEV4ZWNTdGF0
ZSYgc3RhdGUsIEpTVGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmlidXRlJiB0aGlzT2JqZWN0
LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogeworICAgIFVOVVNFRF9Q
QVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGlt
cGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVy
dDxJRExET01TdHJpbmc+KHN0YXRlLCB2YWx1ZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VHlwZWRlZnMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RUeXBlZGVmcy5jcHAJ
KHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RUeXBlZGVmcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3MCw3ICsxNzAsNyBA
QCB0ZW1wbGF0ZTw+IEpTVmFsdWUgSlNUZXN0VHlwZWRlZnNDb25zdHJ1CiB0ZW1wbGF0ZTw+IHZv
aWQgSlNUZXN0VHlwZWRlZnNDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMoVk0mIHZt
LCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQogewogICAgIHB1dERpcmVjdCh2bSwg
dm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3RUeXBlZGVmczo6cHJvdG90eXBlKHZt
LCBnbG9iYWxPYmplY3QpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgSlND
OjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpE
b250RW51bSk7Ci0gICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05v
bnRyaXZpYWxTdHJpbmcoJnZtLCBTdHJpbmcoIlRlc3RUeXBlZGVmcyJfcykpLCBKU0M6OlByb3Bl
cnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVt
KTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlh
bFN0cmluZyh2bSwgU3RyaW5nKCJUZXN0VHlwZWRlZnMiX3MpKSwgSlNDOjpQcm9wZXJ0eUF0dHJp
YnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CiAgICAg
cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDMpLCBKU0M6
OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRv
bnRFbnVtKTsKICAgICByZWlmeVN0YXRpY1Byb3BlcnRpZXModm0sIEpTVGVzdFR5cGVkZWZzOjpp
bmZvKCksIEpTVGVzdFR5cGVkZWZzQ29uc3RydWN0b3JUYWJsZVZhbHVlcywgKnRoaXMpOwogfQpA
QCAtMjk3LDYgKzI5Nyw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzVW5zaWduZWRM
b24KIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFR5cGVkZWZzVW5zaWduZWRMb25nTG9u
Z0F0dHJTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0VHlwZWRlZnMmIHRoaXNPYmplY3Qs
IEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CisgICAgVU5VU0VEX1BB
UkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1w
bCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0
PElETFVuc2lnbmVkTG9uZ0xvbmc+KHN0YXRlLCB2YWx1ZSk7CkBAIC0zMjgsNiArMzI5LDcgQEAg
RW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNTZXJpYWxpemVkUwogCiBzdGF0aWMgaW5saW5l
IGJvb2wgc2V0SlNUZXN0VHlwZWRlZnNTZXJpYWxpemVkU2NyaXB0VmFsdWVTZXR0ZXIoRXhlY1N0
YXRlJiBzdGF0ZSwgSlNUZXN0VHlwZWRlZnMmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRo
cm93U2NvcGUmIHRocm93U2NvcGUpCiB7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3Jh
cHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZTxTZXJpYWxpemVkU2NyaXB0VmFsdWU+PihzdGF0ZSwgdmFsdWUpOwpAQCAtMzcxLDYg
KzM3Myw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzQXR0cmlidXRlV2kKIAogc3Rh
dGljIGlubGluZSBib29sIHNldEpTVGVzdFR5cGVkZWZzQXR0cmlidXRlV2l0aENsYW1wU2V0dGVy
KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdFR5cGVkZWZzJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZh
bHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogeworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7
CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2Jq
ZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExDbGFtcEFk
YXB0b3I8SURMVW5zaWduZWRMb25nTG9uZz4+KHN0YXRlLCB2YWx1ZSk7CkBAIC00MDIsNiArNDA1
LDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNBdHRyaWJ1dGVXaQogCiBzdGF0aWMg
aW5saW5lIGJvb2wgc2V0SlNUZXN0VHlwZWRlZnNBdHRyaWJ1dGVXaXRoQ2xhbXBJblR5cGVkZWZT
ZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0VHlwZWRlZnMmIHRoaXNPYmplY3QsIEpTVmFs
dWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CisgICAgVU5VU0VEX1BBUkFNKHN0
YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRo
aXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETENs
YW1wQWRhcHRvcjxJRExMb25nPj4oc3RhdGUsIHZhbHVlKTsKQEAgLTQzMyw2ICs0MzcsNyBAQCBF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc0J1ZmZlclNvdXJjCiAKIHN0YXRpYyBpbmxpbmUg
Ym9vbCBzZXRKU1Rlc3RUeXBlZGVmc0J1ZmZlclNvdXJjZUF0dHJTZXR0ZXIoRXhlY1N0YXRlJiBz
dGF0ZSwgSlNUZXN0VHlwZWRlZnMmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2Nv
cGUmIHRocm93U2NvcGUpCiB7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgp
OwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETFVuaW9uPElETEFycmF5QnVmZmVy
VmlldywgSURMQXJyYXlCdWZmZXI+PihzdGF0ZSwgdmFsdWUpOwpAQCAtNDY0LDYgKzQ2OSw3IEBA
IEVuY29kZWRKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzRG9tVGltZVN0YW0KIAogc3RhdGljIGlubGlu
ZSBib29sIHNldEpTVGVzdFR5cGVkZWZzRG9tVGltZVN0YW1wQXR0clNldHRlcihFeGVjU3RhdGUm
IHN0YXRlLCBKU1Rlc3RUeXBlZGVmcyYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dT
Y29wZSYgdGhyb3dTY29wZSkKIHsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVk
KCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMVW5zaWduZWRMb25nTG9uZz4o
c3RhdGUsIHZhbHVlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9OUF9qc29iamVjdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL05QX2pzb2JqZWN0LmNwcAko
cmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL05QX2pzb2JqZWN0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDQtMjAxNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDA0LTIwMTkgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDg3LDcgKzQ4Nyw3IEBAIGJvb2wgX05QTl9FbnVtZXJh
dGUoTlBQLCBOUE9iamVjdCogbywgTlAKICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FU
Q0hfU0NPUEUodm0pOwogCiAgICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+
Z2xvYmFsRXhlYygpOwotICAgICAgICBQcm9wZXJ0eU5hbWVBcnJheSBwcm9wZXJ0eU5hbWVzKCZ2
bSwgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5ncywgUHJpdmF0ZVN5bWJvbE1vZGU6OkV4Y2x1ZGUp
OworICAgICAgICBQcm9wZXJ0eU5hbWVBcnJheSBwcm9wZXJ0eU5hbWVzKHZtLCBQcm9wZXJ0eU5h
bWVNb2RlOjpTdHJpbmdzLCBQcml2YXRlU3ltYm9sTW9kZTo6RXhjbHVkZSk7CiAKICAgICAgICAg
b2JqLT5pbXAtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0UHJvcGVydHlOYW1lcyhvYmotPmltcCwgZXhl
YywgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlKCkpOwogICAgICAgICB1bnNpZ25lZCBz
aXplID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHByb3BlcnR5TmFtZXMuc2l6ZSgpKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX2FycmF5LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9hcnJheS5jcHAJKHJldmlzaW9uIDI0OTEyOCkK
KysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX2FycmF5LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDgsIDIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDAzLTIw
MTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC03Nyw3ICs3Nyw3IEBAIHZvaWQgUnVudGltZUFycmF5OjpnZXRPd25Qcm9w
ZXJ0eU5hbWVzKEoKICAgICBSdW50aW1lQXJyYXkqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8UnVudGlt
ZUFycmF5Kj4ob2JqZWN0KTsKICAgICB1bnNpZ25lZCBsZW5ndGggPSB0aGlzT2JqZWN0LT5nZXRM
ZW5ndGgoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCi0gICAg
ICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb20oZXhlYywgaSkpOworICAgICAg
ICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9tKHZtLCBpKSk7CiAKICAgICBpZiAo
bW9kZS5pbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKCkpCiAgICAgICAgIHByb3BlcnR5TmFtZXMu
YWRkKHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlk
Z2UvYy9jX2luc3RhbmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uv
Yy9jX2luc3RhbmNlLmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL1dlYkNvcmUvYnJp
ZGdlL2MvY19pbnN0YW5jZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA2LCAyMDE2IEFwcGxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxOSBBcHBsZSBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOTUsNyAr
Mjk1LDcgQEAgSlNWYWx1ZSBDSW5zdGFuY2U6OnN0cmluZ1ZhbHVlKEV4ZWNTdGF0ZQogICAgICAg
ICByZXR1cm4gdmFsdWU7CiAKICAgICAvLyBGYWxsYmFjayB0byBkZWZhdWx0IGltcGxlbWVudGF0
aW9uLgotICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywgIk5QT2JqZWN0Il9zKTsK
KyAgICByZXR1cm4ganNOb250cml2aWFsU3RyaW5nKGV4ZWMtPnZtKCksICJOUE9iamVjdCJfcyk7
CiB9CiAKIEpTVmFsdWUgQ0luc3RhbmNlOjpudW1iZXJWYWx1ZShFeGVjU3RhdGUqKSBjb25zdApA
QCAtMzY2LDEzICszNjYsMTQgQEAgdm9pZCBDSW5zdGFuY2U6OmdldFByb3BlcnR5TmFtZXMoRXhl
Y1N0YQogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KIAorICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7CiAgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKICAgICAgICAg
SWRlbnRpZmllclJlcCogaWRlbnRpZmllciA9IHN0YXRpY19jYXN0PElkZW50aWZpZXJSZXAqPihp
ZGVudGlmaWVyc1tpXSk7CiAKICAgICAgICAgaWYgKGlkZW50aWZpZXItPmlzU3RyaW5nKCkpCiAg
ICAgICAgICAgICBuYW1lQXJyYXkuYWRkKGlkZW50aWZpZXJGcm9tTlBJZGVudGlmaWVyKGV4ZWMs
IGlkZW50aWZpZXItPnN0cmluZygpKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG5hbWVB
cnJheS5hZGQoSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpZGVudGlmaWVyLT5udW1iZXIoKSkpOwor
ICAgICAgICAgICAgbmFtZUFycmF5LmFkZChJZGVudGlmaWVyOjpmcm9tKHZtLCBpZGVudGlmaWVy
LT5udW1iZXIoKSkpOwogICAgIH0KIAogICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCByZWFsbHkg
Y2FsbCBOUE5fTWVtRnJlZSBidXQgdGhhdCdzIGluIFdlYktpdApJbmRleDogU291cmNlL1dlYkNv
cmUvYnJpZGdlL2MvY191dGlsaXR5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
cmlkZ2UvYy9jX3V0aWxpdHkuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvV2ViQ29y
ZS9icmlkZ2UvYy9jX3V0aWxpdHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiwgMjAxMyBBcHBsZSBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTkgQXBwbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlh
a292IChhcEBueXBvcC5jb20pCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0xNDYsNyArMTQ2LDggQEAg
U3RyaW5nIGNvbnZlcnROUFN0cmluZ1RvVVRGMTYoY29uc3QgTlBTdAogCiBJZGVudGlmaWVyIGlk
ZW50aWZpZXJGcm9tTlBJZGVudGlmaWVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgTlBVVEY4KiBu
YW1lKQogewotICAgIHJldHVybiBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsIGNvbnZlcnRV
VEY4VG9VVEYxNldpdGhMYXRpbjFGYWxsYmFjayhuYW1lLCAtMSkpOworICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CisgICAgcmV0dXJuIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIGNvbnZlcnRV
VEY4VG9VVEYxNldpdGhMYXRpbjFGYWxsYmFjayhuYW1lLCAtMSkpOwogfQogCiB9IH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9vYmpjL1dlYlNjcmlwdE9iamVjdC5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvb2JqYy9XZWJTY3JpcHRPYmplY3QubW0JKHJldmlz
aW9uIDI0OTEyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9vYmpjL1dlYlNjcmlwdE9iamVj
dC5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDQtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDQtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM0Nyw3ICszNDcsNyBAQCAtIChpZCljYWxsV2ViU2Ny
aXB0TWV0aG9kOihOU1N0cmluZyAqKW5hCiAgICAgRXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2Jq
ZWN0LT5nbG9iYWxFeGVjKCk7CiAgICAgVU5VU0VEX1BBUkFNKHNjb3BlKTsKIAotICAgIEpTQzo6
SlNWYWx1ZSBmdW5jdGlvbiA9IFtzZWxmIF9pbXBdLT5nZXQoZXhlYywgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyhleGVjLCBTdHJpbmcobmFtZSkpKTsKKyAgICBKU0M6OkpTVmFsdWUgZnVuY3Rpb24g
PSBbc2VsZiBfaW1wXS0+Z2V0KGV4ZWMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIFN0cmlu
ZyhuYW1lKSkpOwogICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgIENhbGxUeXBlIGNhbGxUeXBl
ID0gZ2V0Q2FsbERhdGEodm0sIGZ1bmN0aW9uLCBjYWxsRGF0YSk7CiAgICAgaWYgKGNhbGxUeXBl
ID09IENhbGxUeXBlOjpOb25lKQpAQCAtNDA2LDcgKzQwNiw3IEBAIC0gKHZvaWQpc2V0VmFsdWU6
KGlkKXZhbHVlIGZvcktleTooTlNTdHIKIAogICAgIEpTT2JqZWN0KiBvYmplY3QgPSBKU0M6Ompz
RHluYW1pY0Nhc3Q8SlNPYmplY3QqPih2bSwgW3NlbGYgX2ltcF0pOwogICAgIFB1dFByb3BlcnR5
U2xvdCBzbG90KG9iamVjdCk7Ci0gICAgb2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPnB1dChvYmpl
Y3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgU3RyaW5nKGtleSkpLCBjb252
ZXJ0T2JqY1ZhbHVlVG9WYWx1ZShleGVjLCAmdmFsdWUsIE9iamNPYmplY3RUeXBlLCBbc2VsZiBf
cm9vdE9iamVjdF0pLCBzbG90KTsKKyAgICBvYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+cHV0KG9i
amVjdCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgU3RyaW5nKGtleSkpLCBjb252
ZXJ0T2JqY1ZhbHVlVG9WYWx1ZShleGVjLCAmdmFsdWUsIE9iamNPYmplY3RUeXBlLCBbc2VsZiBf
cm9vdE9iamVjdF0pLCBzbG90KTsKIAogICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpIHsKICAgICAgICAgYWRkRXhjZXB0aW9uVG9Db25zb2xlKGV4ZWMpOwpAQCAtNDMyLDcgKzQz
Miw3IEBAIC0gKGlkKXZhbHVlRm9yS2V5OihOU1N0cmluZyAqKWtleQogICAgICAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CiAgICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9
IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwogCi0gICAgICAgIEpTQzo6SlNWYWx1ZSByZXN1
bHQgPSBbc2VsZiBfaW1wXS0+Z2V0KGV4ZWMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywg
U3RyaW5nKGtleSkpKTsKKyAgICAgICAgSlNDOjpKU1ZhbHVlIHJlc3VsdCA9IFtzZWxmIF9pbXBd
LT5nZXQoZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgU3RyaW5nKGtleSkpKTsKICAg
ICAgICAgCiAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpIHsKICAgICAg
ICAgICAgIGFkZEV4Y2VwdGlvblRvQ29uc29sZShleGVjKTsKQEAgLTQ2MCw3ICs0NjAsNyBAQCAt
ICh2b2lkKXJlbW92ZVdlYlNjcmlwdEtleTooTlNTdHJpbmcgKilrCiAgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9i
amVjdC0+Z2xvYmFsRXhlYygpOwogCi0gICAgW3NlbGYgX2ltcF0tPm1ldGhvZFRhYmxlKHZtKS0+
ZGVsZXRlUHJvcGVydHkoW3NlbGYgX2ltcF0sIGV4ZWMsIElkZW50aWZpZXI6OmZyb21TdHJpbmco
ZXhlYywgU3RyaW5nKGtleSkpKTsKKyAgICBbc2VsZiBfaW1wXS0+bWV0aG9kVGFibGUodm0pLT5k
ZWxldGVQcm9wZXJ0eShbc2VsZiBfaW1wXSwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2
bSwgU3RyaW5nKGtleSkpKTsKIAogICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
IHsKICAgICAgICAgYWRkRXhjZXB0aW9uVG9Db25zb2xlKGV4ZWMpOwpAQCAtNDc5LDcgKzQ3OSw3
IEBAIC0gKEJPT0wpaGFzV2ViU2NyaXB0S2V5OihOU1N0cmluZyAqKWtleQogICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9i
YWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKIAotICAgIEJPT0wgcmVzdWx0ID0gW3NlbGYgX2ltcF0t
Pmhhc1Byb3BlcnR5KGV4ZWMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgU3RyaW5nKGtl
eSkpKTsKKyAgICBCT09MIHJlc3VsdCA9IFtzZWxmIF9pbXBdLT5oYXNQcm9wZXJ0eShleGVjLCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBTdHJpbmcoa2V5KSkpOwogCiAgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgewogICAgICAgICBhZGRFeGNlcHRpb25Ub0NvbnNvbGUo
ZXhlYyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX3J1bnRpbWUubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL29iamMvb2JqY19ydW50aW1lLm1t
CShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX3J1
bnRpbWUubW0JKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA4LCAyMDEzLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjk1LDggKzI5NSw5IEBA
IGJvb2wgT2JqY0ZhbGxiYWNrT2JqZWN0SW1wOjpkZWxldGVQcm9wZXIKIAogSlNWYWx1ZSBPYmpj
RmFsbGJhY2tPYmplY3RJbXA6OmRlZmF1bHRWYWx1ZShjb25zdCBKU09iamVjdCogb2JqZWN0LCBF
eGVjU3RhdGUqIGV4ZWMsIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUpCiB7CisgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKICAgICBjb25zdCBPYmpjRmFsbGJhY2tPYmplY3RJbXAqIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8Y29uc3QgT2JqY0ZhbGxiYWNrT2JqZWN0SW1wKj4ob2JqZWN0KTsKLSAgICByZXR1
cm4gdGhpc09iamVjdC0+X2luc3RhbmNlLT5nZXRWYWx1ZU9mVW5kZWZpbmVkRmllbGQoZXhlYywg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCB0aGlzT2JqZWN0LT5tX2l0ZW0pKTsKKyAgICBy
ZXR1cm4gdGhpc09iamVjdC0+X2luc3RhbmNlLT5nZXRWYWx1ZU9mVW5kZWZpbmVkRmllbGQoZXhl
YywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgdGhpc09iamVjdC0+bV9pdGVtKSk7CiB9CiAK
IGJvb2wgT2JqY0ZhbGxiYWNrT2JqZWN0SW1wOjp0b0Jvb2xlYW4oRXhlY1N0YXRlICopIGNvbnN0
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX3V0aWxpdHkubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL29iamMvb2JqY191dGlsaXR5Lm1tCShyZXZp
c2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX3V0aWxpdHku
bW0JKHdvcmtpbmcgY29weSkKQEAgLTE1Miw4ICsxNTIsOSBAQCBPYmpjVmFsdWUgY29udmVydFZh
bHVlVG9PYmpjVmFsdWUoRXhlY1N0CiAKIEpTVmFsdWUgY29udmVydE5TU3RyaW5nVG9TdHJpbmco
RXhlY1N0YXRlKiBleGVjLCBOU1N0cmluZyAqbnNzdHJpbmcpCiB7Ci0gICAgSlNMb2NrSG9sZGVy
IGxvY2soZXhlYyk7Ci0gICAgSlNWYWx1ZSBhVmFsdWUgPSBqc1N0cmluZyhleGVjLCBTdHJpbmco
bnNzdHJpbmcpKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIEpTTG9ja0hvbGRlciBs
b2NrKHZtKTsKKyAgICBKU1ZhbHVlIGFWYWx1ZSA9IGpzU3RyaW5nKHZtLCBTdHJpbmcobnNzdHJp
bmcpKTsKICAgICByZXR1cm4gYVZhbHVlOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250
ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uUGFyc2VyLmNw
cAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMv
Q29udGVudEV4dGVuc2lvblBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMzEsMTEgKzEz
MSwxMSBAQCBzdGF0aWMgRXhwZWN0ZWQ8VHJpZ2dlciwgc3RkOjplcnJvcl9jb2RlCiAgICAgVk0m
IHZtID0gZXhlYy52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKIAotICAgIGNvbnN0IEpTVmFsdWUgdHJpZ2dlck9iamVjdCA9IHJ1bGVPYmplY3QuZ2V0KCZl
eGVjLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZleGVjLCAidHJpZ2dlciIpKTsKKyAgICBjb25z
dCBKU1ZhbHVlIHRyaWdnZXJPYmplY3QgPSBydWxlT2JqZWN0LmdldCgmZXhlYywgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZyh2bSwgInRyaWdnZXIiKSk7CiAgICAgaWYgKCF0cmlnZ2VyT2JqZWN0IHx8
IHNjb3BlLmV4Y2VwdGlvbigpIHx8ICF0cmlnZ2VyT2JqZWN0LmlzT2JqZWN0KCkpCiAgICAgICAg
IHJldHVybiBtYWtlVW5leHBlY3RlZChDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05JbnZhbGlk
VHJpZ2dlcik7CiAgICAgCi0gICAgY29uc3QgSlNWYWx1ZSB1cmxGaWx0ZXJPYmplY3QgPSB0cmln
Z2VyT2JqZWN0LmdldCgmZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmZXhlYywgInVybC1m
aWx0ZXIiKSk7CisgICAgY29uc3QgSlNWYWx1ZSB1cmxGaWx0ZXJPYmplY3QgPSB0cmlnZ2VyT2Jq
ZWN0LmdldCgmZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInVybC1maWx0ZXIiKSk7
CiAgICAgaWYgKCF1cmxGaWx0ZXJPYmplY3QgfHwgc2NvcGUuZXhjZXB0aW9uKCkgfHwgIXVybEZp
bHRlck9iamVjdC5pc1N0cmluZygpKQogICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoQ29u
dGVudEV4dGVuc2lvbkVycm9yOjpKU09OSW52YWxpZFVSTEZpbHRlckluVHJpZ2dlcik7CiAKQEAg
LTE0NiwxNSArMTQ2LDE1IEBAIHN0YXRpYyBFeHBlY3RlZDxUcmlnZ2VyLCBzdGQ6OmVycm9yX2Nv
ZGUKICAgICBUcmlnZ2VyIHRyaWdnZXI7CiAgICAgdHJpZ2dlci51cmxGaWx0ZXIgPSB1cmxGaWx0
ZXI7CiAKLSAgICBjb25zdCBKU1ZhbHVlIHVybEZpbHRlckNhc2VWYWx1ZSA9IHRyaWdnZXJPYmpl
Y3QuZ2V0KCZleGVjLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZleGVjLCAidXJsLWZpbHRlci1p
cy1jYXNlLXNlbnNpdGl2ZSIpKTsKKyAgICBjb25zdCBKU1ZhbHVlIHVybEZpbHRlckNhc2VWYWx1
ZSA9IHRyaWdnZXJPYmplY3QuZ2V0KCZleGVjLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAi
dXJsLWZpbHRlci1pcy1jYXNlLXNlbnNpdGl2ZSIpKTsKICAgICBpZiAodXJsRmlsdGVyQ2FzZVZh
bHVlICYmICFzY29wZS5leGNlcHRpb24oKSAmJiB1cmxGaWx0ZXJDYXNlVmFsdWUuaXNCb29sZWFu
KCkpCiAgICAgICAgIHRyaWdnZXIudXJsRmlsdGVySXNDYXNlU2Vuc2l0aXZlID0gdXJsRmlsdGVy
Q2FzZVZhbHVlLnRvQm9vbGVhbigmZXhlYyk7CiAKLSAgICBjb25zdCBKU1ZhbHVlIHRvcFVSTEZp
bHRlckNhc2VWYWx1ZSA9IHRyaWdnZXJPYmplY3QuZ2V0KCZleGVjLCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKCZleGVjLCAidG9wLXVybC1maWx0ZXItaXMtY2FzZS1zZW5zaXRpdmUiKSk7CisgICAg
Y29uc3QgSlNWYWx1ZSB0b3BVUkxGaWx0ZXJDYXNlVmFsdWUgPSB0cmlnZ2VyT2JqZWN0LmdldCgm
ZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInRvcC11cmwtZmlsdGVyLWlzLWNhc2Ut
c2Vuc2l0aXZlIikpOwogICAgIGlmICh0b3BVUkxGaWx0ZXJDYXNlVmFsdWUgJiYgIXNjb3BlLmV4
Y2VwdGlvbigpICYmIHRvcFVSTEZpbHRlckNhc2VWYWx1ZS5pc0Jvb2xlYW4oKSkKICAgICAgICAg
dHJpZ2dlci50b3BVUkxDb25kaXRpb25Jc0Nhc2VTZW5zaXRpdmUgPSB0b3BVUkxGaWx0ZXJDYXNl
VmFsdWUudG9Cb29sZWFuKCZleGVjKTsKIAotICAgIGNvbnN0IEpTVmFsdWUgcmVzb3VyY2VUeXBl
VmFsdWUgPSB0cmlnZ2VyT2JqZWN0LmdldCgmZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygm
ZXhlYywgInJlc291cmNlLXR5cGUiKSk7CisgICAgY29uc3QgSlNWYWx1ZSByZXNvdXJjZVR5cGVW
YWx1ZSA9IHRyaWdnZXJPYmplY3QuZ2V0KCZleGVjLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZt
LCAicmVzb3VyY2UtdHlwZSIpKTsKICAgICBpZiAoIXNjb3BlLmV4Y2VwdGlvbigpICYmIHJlc291
cmNlVHlwZVZhbHVlLmlzT2JqZWN0KCkpIHsKICAgICAgICAgYXV0byB0eXBlRmxhZ3NFcnJvciA9
IGdldFR5cGVGbGFncyhleGVjLCByZXNvdXJjZVR5cGVWYWx1ZSwgdHJpZ2dlci5mbGFncywgcmVh
ZFJlc291cmNlVHlwZSk7CiAgICAgICAgIGlmICh0eXBlRmxhZ3NFcnJvcikKQEAgLTE2Miw3ICsx
NjIsNyBAQCBzdGF0aWMgRXhwZWN0ZWQ8VHJpZ2dlciwgc3RkOjplcnJvcl9jb2RlCiAgICAgfSBl
bHNlIGlmICghcmVzb3VyY2VUeXBlVmFsdWUuaXNVbmRlZmluZWQoKSkKICAgICAgICAgcmV0dXJu
IG1ha2VVbmV4cGVjdGVkKENvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTkludmFsaWRUcmlnZ2Vy
RmxhZ3NBcnJheSk7CiAKLSAgICBjb25zdCBKU1ZhbHVlIGxvYWRUeXBlVmFsdWUgPSB0cmlnZ2Vy
T2JqZWN0LmdldCgmZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmZXhlYywgImxvYWQtdHlw
ZSIpKTsKKyAgICBjb25zdCBKU1ZhbHVlIGxvYWRUeXBlVmFsdWUgPSB0cmlnZ2VyT2JqZWN0Lmdl
dCgmZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImxvYWQtdHlwZSIpKTsKICAgICBp
ZiAoIXNjb3BlLmV4Y2VwdGlvbigpICYmIGxvYWRUeXBlVmFsdWUuaXNPYmplY3QoKSkgewogICAg
ICAgICBhdXRvIHR5cGVGbGFnc0Vycm9yID0gZ2V0VHlwZUZsYWdzKGV4ZWMsIGxvYWRUeXBlVmFs
dWUsIHRyaWdnZXIuZmxhZ3MsIHJlYWRMb2FkVHlwZSk7CiAgICAgICAgIGlmICh0eXBlRmxhZ3NF
cnJvcikKQEAgLTE3MCw3ICsxNzAsNyBAQCBzdGF0aWMgRXhwZWN0ZWQ8VHJpZ2dlciwgc3RkOjpl
cnJvcl9jb2RlCiAgICAgfSBlbHNlIGlmICghbG9hZFR5cGVWYWx1ZS5pc1VuZGVmaW5lZCgpKQog
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09O
SW52YWxpZFRyaWdnZXJGbGFnc0FycmF5KTsKIAotICAgIGNvbnN0IEpTVmFsdWUgaWZEb21haW5W
YWx1ZSA9IHRyaWdnZXJPYmplY3QuZ2V0KCZleGVjLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZl
eGVjLCAiaWYtZG9tYWluIikpOworICAgIGNvbnN0IEpTVmFsdWUgaWZEb21haW5WYWx1ZSA9IHRy
aWdnZXJPYmplY3QuZ2V0KCZleGVjLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiaWYtZG9t
YWluIikpOwogICAgIGlmICghc2NvcGUuZXhjZXB0aW9uKCkgJiYgaWZEb21haW5WYWx1ZS5pc09i
amVjdCgpKSB7CiAgICAgICAgIGF1dG8gaWZEb21haW4gPSBnZXREb21haW5MaXN0KGV4ZWMsIGFz
T2JqZWN0KGlmRG9tYWluVmFsdWUpKTsKICAgICAgICAgaWYgKCFpZkRvbWFpbi5oYXNfdmFsdWUo
KSkKQEAgLTE4Myw3ICsxODMsNyBAQCBzdGF0aWMgRXhwZWN0ZWQ8VHJpZ2dlciwgc3RkOjplcnJv
cl9jb2RlCiAgICAgfSBlbHNlIGlmICghaWZEb21haW5WYWx1ZS5pc1VuZGVmaW5lZCgpKQogICAg
ICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OSW52
YWxpZENvbmRpdGlvbkxpc3QpOwogCi0gICAgY29uc3QgSlNWYWx1ZSB1bmxlc3NEb21haW5WYWx1
ZSA9IHRyaWdnZXJPYmplY3QuZ2V0KCZleGVjLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZleGVj
LCAidW5sZXNzLWRvbWFpbiIpKTsKKyAgICBjb25zdCBKU1ZhbHVlIHVubGVzc0RvbWFpblZhbHVl
ID0gdHJpZ2dlck9iamVjdC5nZXQoJmV4ZWMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJ1
bmxlc3MtZG9tYWluIikpOwogICAgIGlmICghc2NvcGUuZXhjZXB0aW9uKCkgJiYgdW5sZXNzRG9t
YWluVmFsdWUuaXNPYmplY3QoKSkgewogICAgICAgICBpZiAodHJpZ2dlci5jb25kaXRpb25UeXBl
ICE9IFRyaWdnZXI6OkNvbmRpdGlvblR5cGU6Ok5vbmUpCiAgICAgICAgICAgICByZXR1cm4gbWFr
ZVVuZXhwZWN0ZWQoQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OTXVsdGlwbGVDb25kaXRpb25z
KTsKQEAgLTE5Nyw3ICsxOTcsNyBAQCBzdGF0aWMgRXhwZWN0ZWQ8VHJpZ2dlciwgc3RkOjplcnJv
cl9jb2RlCiAgICAgfSBlbHNlIGlmICghdW5sZXNzRG9tYWluVmFsdWUuaXNVbmRlZmluZWQoKSkK
ICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKENvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNP
TkludmFsaWRDb25kaXRpb25MaXN0KTsKIAotICAgIGNvbnN0IEpTVmFsdWUgaWZUb3BVUkxWYWx1
ZSA9IHRyaWdnZXJPYmplY3QuZ2V0KCZleGVjLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZleGVj
LCAiaWYtdG9wLXVybCIpKTsKKyAgICBjb25zdCBKU1ZhbHVlIGlmVG9wVVJMVmFsdWUgPSB0cmln
Z2VyT2JqZWN0LmdldCgmZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImlmLXRvcC11
cmwiKSk7CiAgICAgaWYgKCFzY29wZS5leGNlcHRpb24oKSAmJiBpZlRvcFVSTFZhbHVlLmlzT2Jq
ZWN0KCkpIHsKICAgICAgICAgaWYgKHRyaWdnZXIuY29uZGl0aW9uVHlwZSAhPSBUcmlnZ2VyOjpD
b25kaXRpb25UeXBlOjpOb25lKQogICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKENv
bnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTk11bHRpcGxlQ29uZGl0aW9ucyk7CkBAIC0yMTEsNyAr
MjExLDcgQEAgc3RhdGljIEV4cGVjdGVkPFRyaWdnZXIsIHN0ZDo6ZXJyb3JfY29kZQogICAgIH0g
ZWxzZSBpZiAoIWlmVG9wVVJMVmFsdWUuaXNVbmRlZmluZWQoKSkKICAgICAgICAgcmV0dXJuIG1h
a2VVbmV4cGVjdGVkKENvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTkludmFsaWRDb25kaXRpb25M
aXN0KTsKIAotICAgIGNvbnN0IEpTVmFsdWUgdW5sZXNzVG9wVVJMVmFsdWUgPSB0cmlnZ2VyT2Jq
ZWN0LmdldCgmZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmZXhlYywgInVubGVzcy10b3At
dXJsIikpOworICAgIGNvbnN0IEpTVmFsdWUgdW5sZXNzVG9wVVJMVmFsdWUgPSB0cmlnZ2VyT2Jq
ZWN0LmdldCgmZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInVubGVzcy10b3AtdXJs
IikpOwogICAgIGlmICghc2NvcGUuZXhjZXB0aW9uKCkgJiYgdW5sZXNzVG9wVVJMVmFsdWUuaXNP
YmplY3QoKSkgewogICAgICAgICBpZiAodHJpZ2dlci5jb25kaXRpb25UeXBlICE9IFRyaWdnZXI6
OkNvbmRpdGlvblR5cGU6Ok5vbmUpCiAgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQo
Q29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OTXVsdGlwbGVDb25kaXRpb25zKTsKQEAgLTI0NSwx
MSArMjQ1LDExIEBAIHN0YXRpYyBFeHBlY3RlZDxPcHRpb25hbDxBY3Rpb24+LCBzdGQ6OmUKICAg
ICBWTSYgdm0gPSBleGVjLnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwogCi0gICAgY29uc3QgSlNWYWx1ZSBhY3Rpb25PYmplY3QgPSBydWxlT2JqZWN0Lmdl
dCgmZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmZXhlYywgImFjdGlvbiIpKTsKKyAgICBj
b25zdCBKU1ZhbHVlIGFjdGlvbk9iamVjdCA9IHJ1bGVPYmplY3QuZ2V0KCZleGVjLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKHZtLCAiYWN0aW9uIikpOwogICAgIGlmIChzY29wZS5leGNlcHRpb24o
KSB8fCAhYWN0aW9uT2JqZWN0LmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiBtYWtlVW5leHBl
Y3RlZChDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05JbnZhbGlkQWN0aW9uKTsKIAotICAgIGNv
bnN0IEpTVmFsdWUgdHlwZU9iamVjdCA9IGFjdGlvbk9iamVjdC5nZXQoJmV4ZWMsIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcoJmV4ZWMsICJ0eXBlIikpOworICAgIGNvbnN0IEpTVmFsdWUgdHlwZU9i
amVjdCA9IGFjdGlvbk9iamVjdC5nZXQoJmV4ZWMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0s
ICJ0eXBlIikpOwogICAgIGlmIChzY29wZS5leGNlcHRpb24oKSB8fCAhdHlwZU9iamVjdC5pc1N0
cmluZygpKQogICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoQ29udGVudEV4dGVuc2lvbkVy
cm9yOjpKU09OSW52YWxpZEFjdGlvblR5cGUpOwogCkBAIC0yNjIsNyArMjYyLDcgQEAgc3RhdGlj
IEV4cGVjdGVkPE9wdGlvbmFsPEFjdGlvbj4sIHN0ZDo6ZQogICAgIGlmIChhY3Rpb25UeXBlID09
ICJibG9jay1jb29raWVzIikKICAgICAgICAgcmV0dXJuIHsgQWN0aW9uKEFjdGlvblR5cGU6OkJs
b2NrQ29va2llcykgfTsKICAgICBpZiAoYWN0aW9uVHlwZSA9PSAiY3NzLWRpc3BsYXktbm9uZSIp
IHsKLSAgICAgICAgSlNWYWx1ZSBzZWxlY3RvciA9IGFjdGlvbk9iamVjdC5nZXQoJmV4ZWMsIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcoJmV4ZWMsICJzZWxlY3RvciIpKTsKKyAgICAgICAgSlNWYWx1
ZSBzZWxlY3RvciA9IGFjdGlvbk9iamVjdC5nZXQoJmV4ZWMsIElkZW50aWZpZXI6OmZyb21TdHJp
bmcodm0sICJzZWxlY3RvciIpKTsKICAgICAgICAgaWYgKHNjb3BlLmV4Y2VwdGlvbigpIHx8ICFz
ZWxlY3Rvci5pc1N0cmluZygpKQogICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKENv
bnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTkludmFsaWRDU1NEaXNwbGF5Tm9uZUFjdGlvblR5cGUp
OwogCkBAIC0yNzYsNyArMjc2LDcgQEAgc3RhdGljIEV4cGVjdGVkPE9wdGlvbmFsPEFjdGlvbj4s
IHN0ZDo6ZQogICAgIGlmIChhY3Rpb25UeXBlID09ICJtYWtlLWh0dHBzIikKICAgICAgICAgcmV0
dXJuIHsgQWN0aW9uKEFjdGlvblR5cGU6Ok1ha2VIVFRQUykgfTsKICAgICBpZiAoYWN0aW9uVHlw
ZSA9PSAibm90aWZ5IikgewotICAgICAgICBKU1ZhbHVlIG5vdGlmaWNhdGlvbiA9IGFjdGlvbk9i
amVjdC5nZXQoJmV4ZWMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJmV4ZWMsICJub3RpZmljYXRp
b24iKSk7CisgICAgICAgIEpTVmFsdWUgbm90aWZpY2F0aW9uID0gYWN0aW9uT2JqZWN0LmdldCgm
ZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIm5vdGlmaWNhdGlvbiIpKTsKICAgICAg
ICAgaWYgKHNjb3BlLmV4Y2VwdGlvbigpIHx8ICFub3RpZmljYXRpb24uaXNTdHJpbmcoKSkKICAg
ICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpT
T05JbnZhbGlkTm90aWZpY2F0aW9uKTsKICAgICAgICAgcmV0dXJuIHsgQWN0aW9uKEFjdGlvblR5
cGU6Ok5vdGlmeSwgYXNTdHJpbmcobm90aWZpY2F0aW9uKS0+dmFsdWUoJmV4ZWMpKSB9OwpJbmRl
eDogU291cmNlL1dlYkNvcmUvY3J5cHRvL1N1YnRsZUNyeXB0by5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvY3J5cHRvL1N1YnRsZUNyeXB0by5jcHAJKHJldmlzaW9uIDI0OTEyOCkK
KysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9TdWJ0bGVDcnlwdG8uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTk1LDcgKzk1LDcgQEAgc3RhdGljIEV4Y2VwdGlvbk9yPHN0ZDo6dW5pcXVlX3B0cjxDcnlwdAog
CiAgICAgaWYgKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8U3RyaW5nPihhbGdvcml0aG1JZGVudGlm
aWVyKSkgewogICAgICAgICBhdXRvIG5ld1BhcmFtcyA9IFN0cm9uZzxKU09iamVjdD4odm0sIGNv
bnN0cnVjdEVtcHR5T2JqZWN0KCZzdGF0ZSkpOwotICAgICAgICBuZXdQYXJhbXMtPnB1dERpcmVj
dCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJuYW1lIiksIGpzU3RyaW5nKCZzdGF0
ZSwgV1RGOjpnZXQ8U3RyaW5nPihhbGdvcml0aG1JZGVudGlmaWVyKSkpOworICAgICAgICBuZXdQ
YXJhbXMtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIm5hbWUiKSwg
anNTdHJpbmcodm0sIFdURjo6Z2V0PFN0cmluZz4oYWxnb3JpdGhtSWRlbnRpZmllcikpKTsKICAg
ICAgICAgCiAgICAgICAgIHJldHVybiBub3JtYWxpemVDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJz
KHN0YXRlLCBuZXdQYXJhbXMsIG9wZXJhdGlvbik7CiAgICAgfQpAQCAtMjQxLDExICsyNDEsMTEg
QEAgc3RhdGljIEV4Y2VwdGlvbk9yPHN0ZDo6dW5pcXVlX3B0cjxDcnlwdAogICAgICAgICBzd2l0
Y2ggKCppZGVudGlmaWVyKSB7CiAgICAgICAgIGNhc2UgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmll
cjo6RUNESDogewogICAgICAgICAgICAgLy8gUmVtb3ZlIHRoaXMgaGFjayBvbmNlIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjkzMzMgaXMgZml4ZWQuCi0gICAgICAg
ICAgICBKU1ZhbHVlIG5hbWVWYWx1ZSA9IHZhbHVlLmdldCgpLT5nZXQoJnN0YXRlLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgIm5hbWUiKSk7Ci0gICAgICAgICAgICBKU1ZhbHVlIHB1
YmxpY1ZhbHVlID0gdmFsdWUuZ2V0KCktPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJp
bmcoJnN0YXRlLCAicHVibGljIikpOworICAgICAgICAgICAgSlNWYWx1ZSBuYW1lVmFsdWUgPSB2
YWx1ZS5nZXQoKS0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIm5hbWUi
KSk7CisgICAgICAgICAgICBKU1ZhbHVlIHB1YmxpY1ZhbHVlID0gdmFsdWUuZ2V0KCktPmdldCgm
c3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJwdWJsaWMiKSk7CiAgICAgICAgICAg
ICBKU09iamVjdCogbmV3VmFsdWUgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdCgmc3RhdGUpOwotICAg
ICAgICAgICAgbmV3VmFsdWUtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygm
dm0sICJuYW1lIiksIG5hbWVWYWx1ZSk7Ci0gICAgICAgICAgICBuZXdWYWx1ZS0+cHV0RGlyZWN0
KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgInB1YmxpY0tleSIpLCBwdWJsaWNWYWx1
ZSk7CisgICAgICAgICAgICBuZXdWYWx1ZS0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKHZtLCAibmFtZSIpLCBuYW1lVmFsdWUpOworICAgICAgICAgICAgbmV3VmFsdWUtPnB1
dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInB1YmxpY0tleSIpLCBwdWJs
aWNWYWx1ZSk7CiAKICAgICAgICAgICAgIGF1dG8gcGFyYW1zID0gY29udmVydERpY3Rpb25hcnk8
Q3J5cHRvQWxnb3JpdGhtRWNkaEtleURlcml2ZVBhcmFtcz4oc3RhdGUsIG5ld1ZhbHVlKTsKICAg
ICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEV4Y2VwdGlvbiB7IEV4aXN0aW5n
RXhjZXB0aW9uRXJyb3IgfSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb21qaXQvRE9NSklUSGVs
cGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbWppdC9ET01KSVRIZWxwZXJz
LmgJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbWppdC9ET01KSVRIZWxw
ZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDE2IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNi0yMDE5IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtNTgsNyArNTgsNyBAQCBKU0M6OkVuY29kZWRKU1ZhbHVlIEpJ
VF9PUEVSQVRJT04gdG9XcmFwCiAgICAgQVNTRVJUKGV4ZWMpOwogICAgIEFTU0VSVChyZXN1bHQp
OwogICAgIEFTU0VSVChnbG9iYWxPYmplY3QpOwotICAgIEpTQzo6TmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcigmZXhlYy0+dm0oKSwgZXhlYyk7CisgICAgSlNDOjpOYXRpdmVDYWxsRnJhbWVU
cmFjZXIgdHJhY2VyKGdsb2JhbE9iamVjdC0+dm0oKSwgZXhlYyk7CiAgICAgcmV0dXJuIEpTQzo6
SlNWYWx1ZTo6ZW5jb2RlKHRvSlMoZXhlYywgc3RhdGljX2Nhc3Q8SlNET01HbG9iYWxPYmplY3Qq
PihnbG9iYWxPYmplY3QpLCAqc3RhdGljX2Nhc3Q8V3JhcHBlZE5vZGUqPihyZXN1bHQpKSk7CiB9
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAkocmV2aXNp
b24gMjQ5MTI4KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDM3Niw3ICs0Mzc2LDcgQEAgc3RhdGljIEpTQzo6SlNWYWx1ZSBj
b250cm9sbGVySlNWYWx1ZShKUwogICAgIGlmICghbWVkaWFKU1dyYXBwZXJPYmplY3QpCiAgICAg
ICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOwogCi0gICAgSlNDOjpJZGVudGlmaWVyIGNvbnRyb2xz
SG9zdCA9IEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJjb250cm9sc0hvc3QiKTsK
KyAgICBKU0M6OklkZW50aWZpZXIgY29udHJvbHNIb3N0ID0gSlNDOjpJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKHZtLCAiY29udHJvbHNIb3N0Iik7CiAgICAgSlNDOjpKU1ZhbHVlIGNvbnRyb2xzSG9z
dEpTV3JhcHBlciA9IG1lZGlhSlNXcmFwcGVyT2JqZWN0LT5nZXQoJmV4ZWMsIGNvbnRyb2xzSG9z
dCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNDOjpqc051bGwoKSk7CiAKQEAg
LTQzODQsNyArNDM4NCw3IEBAIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udHJvbGxlckpTVmFsdWUo
SlMKICAgICBpZiAoIWNvbnRyb2xzSG9zdEpTV3JhcHBlck9iamVjdCkKICAgICAgICAgcmV0dXJu
IEpTQzo6anNOdWxsKCk7CiAKLSAgICBKU0M6OklkZW50aWZpZXIgY29udHJvbGxlcklEID0gSlND
OjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImNvbnRyb2xsZXIiKTsKKyAgICBKU0M6Oklk
ZW50aWZpZXIgY29udHJvbGxlcklEID0gSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAi
Y29udHJvbGxlciIpOwogICAgIEpTQzo6SlNWYWx1ZSBjb250cm9sbGVySlNXcmFwcGVyID0gY29u
dHJvbHNIb3N0SlNXcmFwcGVyT2JqZWN0LT5nZXQoJmV4ZWMsIGNvbnRyb2xsZXJJRCk7CiAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNDOjpqc051bGwoKSk7CiAKQEAgLTQ0NDcsNyAr
NDQ0Nyw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6dXBkYXRlQ2FwdGlvbkNvbnQKICAgICAg
ICAgLy8gICAgIE5vbmUKICAgICAgICAgLy8gUmV0dXJuIHZhbHVlOgogICAgICAgICAvLyAgICAg
Tm9uZQotICAgICAgICBhdXRvIG1ldGhvZFZhbHVlID0gY29udHJvbGxlck9iamVjdC0+Z2V0KCZl
eGVjLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJmV4ZWMsICJ1cGRhdGVDYXB0aW9uQ29u
dGFpbmVyIikpOworICAgICAgICBhdXRvIG1ldGhvZFZhbHVlID0gY29udHJvbGxlck9iamVjdC0+
Z2V0KCZleGVjLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJ1cGRhdGVDYXB0aW9u
Q29udGFpbmVyIikpOwogICAgICAgICBhdXRvKiBtZXRob2RPYmplY3QgPSBKU0M6OmpzRHluYW1p
Y0Nhc3Q8SlNDOjpKU09iamVjdCo+KHZtLCBtZXRob2RWYWx1ZSk7CiAgICAgICAgIGlmICghbWV0
aG9kT2JqZWN0KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNzI3MSw3ICs3MjcxLDcg
QEAgYm9vbCBIVE1MTWVkaWFFbGVtZW50OjplbnN1cmVNZWRpYUNvbnRybwogICAgICAgICBhdXRv
JiB2bSA9IGdsb2JhbE9iamVjdC52bSgpOwogICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9D
QVRDSF9TQ09QRSh2bSk7CiAKLSAgICAgICAgYXV0byBmdW5jdGlvblZhbHVlID0gZ2xvYmFsT2Jq
ZWN0LmdldCgmZXhlYywgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZleGVjLCAiY3JlYXRl
Q29udHJvbHMiKSk7CisgICAgICAgIGF1dG8gZnVuY3Rpb25WYWx1ZSA9IGdsb2JhbE9iamVjdC5n
ZXQoJmV4ZWMsIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImNyZWF0ZUNvbnRyb2xz
IikpOwogICAgICAgICBpZiAoZnVuY3Rpb25WYWx1ZS5pc0Z1bmN0aW9uKHZtKSkKICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwogCkBAIC03MzIzLDcgKzczMjMsNyBAQCB2b2lkIEhUTUxNZWRpYUVs
ZW1lbnQ6OnNldENvbnRyb2xsZXJKU1ByCiAgICAgICAgIGlmICghY29udHJvbGxlck9iamVjdCkK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBjb250cm9sbGVyT2JqZWN0LT5t
ZXRob2RUYWJsZSh2bSktPnB1dChjb250cm9sbGVyT2JqZWN0LCAmZXhlYywgSlNDOjpJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKCZleGVjLCBwcm9wZXJ0eU5hbWUpLCBwcm9wZXJ0eVZhbHVlLCBwcm9w
ZXJ0eVNsb3QpOworICAgICAgICBjb250cm9sbGVyT2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPnB1
dChjb250cm9sbGVyT2JqZWN0LCAmZXhlYywgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZt
LCBwcm9wZXJ0eU5hbWUpLCBwcm9wZXJ0eVZhbHVlLCBwcm9wZXJ0eVNsb3QpOwogCiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0pOwpAQCAtNzM0OSw3ICs3MzQ5LDcgQEAgdm9pZCBIVE1MTWVk
aWFFbGVtZW50OjpkaWRBZGRVc2VyQWdlbnRTaAogICAgICAgICAvLyBSZXR1cm4gdmFsdWU6CiAg
ICAgICAgIC8vICAgICBBIHJlZmVyZW5jZSB0byB0aGUgY3JlYXRlZCBtZWRpYSBjb250cm9sbGVy
IGluc3RhbmNlLgogCi0gICAgICAgIGF1dG8gZnVuY3Rpb25WYWx1ZSA9IGdsb2JhbE9iamVjdC5n
ZXQoJmV4ZWMsIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmZXhlYywgImNyZWF0ZUNvbnRy
b2xzIikpOworICAgICAgICBhdXRvIGZ1bmN0aW9uVmFsdWUgPSBnbG9iYWxPYmplY3QuZ2V0KCZl
eGVjLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJjcmVhdGVDb250cm9scyIpKTsK
ICAgICAgICAgaWYgKGZ1bmN0aW9uVmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKIApAQCAtNzM4MSwyMSArNzM4MSwyMSBAQCB2b2lkIEhUTUxNZWRp
YUVsZW1lbnQ6OmRpZEFkZFVzZXJBZ2VudFNoCiAgICAgICAgIC8vIENvbm5lY3QgdGhlIE1lZGlh
LCBNZWRpYUNvbnRyb2xsZXJIb3N0LCBhbmQgQ29udHJvbGxlciBzbyB0aGUgR0Mga25vd3MgYWJv
dXQgdGhlaXIgcmVsYXRpb25zaGlwCiAgICAgICAgIGF1dG8qIG1lZGlhSlNXcmFwcGVyT2JqZWN0
ID0gbWVkaWFKU1dyYXBwZXIudG9PYmplY3QoJmV4ZWMpOwogICAgICAgICBzY29wZS5hc3NlcnRO
b0V4Y2VwdGlvbigpOwotICAgICAgICBhdXRvIGNvbnRyb2xzSG9zdCA9IEpTQzo6SWRlbnRpZmll
cjo6ZnJvbVN0cmluZygmZXhlYy52bSgpLCAiY29udHJvbHNIb3N0Iik7CisgICAgICAgIGF1dG8g
Y29udHJvbHNIb3N0ID0gSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiY29udHJvbHNI
b3N0Iik7CiAKICAgICAgICAgQVNTRVJUKCFtZWRpYUpTV3JhcHBlck9iamVjdC0+aGFzUHJvcGVy
dHkoJmV4ZWMsIGNvbnRyb2xzSG9zdCkpOwogCi0gICAgICAgIG1lZGlhSlNXcmFwcGVyT2JqZWN0
LT5wdXREaXJlY3QoZXhlYy52bSgpLCBjb250cm9sc0hvc3QsIG1lZGlhQ29udHJvbHNIb3N0SlNX
cmFwcGVyLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgSlNDOjpQcm9wZXJ0
eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSk7
CisgICAgICAgIG1lZGlhSlNXcmFwcGVyT2JqZWN0LT5wdXREaXJlY3Qodm0sIGNvbnRyb2xzSG9z
dCwgbWVkaWFDb250cm9sc0hvc3RKU1dyYXBwZXIsIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRv
bnREZWxldGUgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8IEpTQzo6UHJvcGVy
dHlBdHRyaWJ1dGU6OlJlYWRPbmx5KTsKIAogICAgICAgICBhdXRvKiBtZWRpYUNvbnRyb2xzSG9z
dEpTV3JhcHBlck9iamVjdCA9IEpTQzo6anNEeW5hbWljQ2FzdDxKU0M6OkpTT2JqZWN0Kj4odm0s
IG1lZGlhQ29udHJvbHNIb3N0SlNXcmFwcGVyKTsKICAgICAgICAgaWYgKCFtZWRpYUNvbnRyb2xz
SG9zdEpTV3JhcHBlck9iamVjdCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAg
ICBhdXRvIGNvbnRyb2xsZXIgPSBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJmV4ZWMudm0o
KSwgImNvbnRyb2xsZXIiKTsKKyAgICAgICAgYXV0byBjb250cm9sbGVyID0gSlNDOjpJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKHZtLCAiY29udHJvbGxlciIpOwogCiAgICAgICAgIEFTU0VSVCghY29u
dHJvbGxlck9iamVjdC0+aGFzUHJvcGVydHkoJmV4ZWMsIGNvbnRyb2xsZXIpKTsKIAotICAgICAg
ICBtZWRpYUNvbnRyb2xzSG9zdEpTV3JhcHBlck9iamVjdC0+cHV0RGlyZWN0KGV4ZWMudm0oKSwg
Y29udHJvbGxlciwgY29udHJvbGxlclZhbHVlLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250
RGVsZXRlIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBKU0M6OlByb3BlcnR5
QXR0cmlidXRlOjpSZWFkT25seSk7CisgICAgICAgIG1lZGlhQ29udHJvbHNIb3N0SlNXcmFwcGVy
T2JqZWN0LT5wdXREaXJlY3Qodm0sIGNvbnRyb2xsZXIsIGNvbnRyb2xsZXJWYWx1ZSwgSlNDOjpQ
cm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRv
bnRFbnVtIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpOwogCiAgICAgICAgIHVw
ZGF0ZVBhZ2VTY2FsZUZhY3RvckpTUHJvcGVydHkoKTsKICAgICAgICAgdXBkYXRlVXNlc0xUUlVz
ZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb25KU1Byb3BlcnR5KCk7CkBAIC03NDQ0LDcgKzc0NDQs
NyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnVwZGF0ZU1lZGlhQ29udHJvCiAKICAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwogCi0gICAgICAgIGF1dG8gZnVuY3Rp
b25WYWx1ZSA9IGNvbnRyb2xsZXJPYmplY3QtPmdldCgmZXhlYywgSlNDOjpJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKCZleGVjLCAiaGFuZGxlUHJlc2VudGF0aW9uTW9kZUNoYW5nZSIpKTsKKyAgICAg
ICAgYXV0byBmdW5jdGlvblZhbHVlID0gY29udHJvbGxlck9iamVjdC0+Z2V0KCZleGVjLCBKU0M6
OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJoYW5kbGVQcmVzZW50YXRpb25Nb2RlQ2hhbmdl
IikpOwogICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpIHx8IGZ1bmN0aW9u
VmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIApA
QCAtNzQ4Nyw3ICs3NDg3LDcgQEAgU3RyaW5nIEhUTUxNZWRpYUVsZW1lbnQ6OmdldEN1cnJlbnRN
ZWRpYQogCiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKIAotICAg
ICAgICBhdXRvIGZ1bmN0aW9uVmFsdWUgPSBjb250cm9sbGVyT2JqZWN0LT5nZXQoJmV4ZWMsIEpT
Qzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmZXhlYywgImdldEN1cnJlbnRDb250cm9sc1N0YXR1
cyIpKTsKKyAgICAgICAgYXV0byBmdW5jdGlvblZhbHVlID0gY29udHJvbGxlck9iamVjdC0+Z2V0
KCZleGVjLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJnZXRDdXJyZW50Q29udHJv
bHNTdGF0dXMiKSk7CiAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkgfHwg
ZnVuY3Rpb25WYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkltYWdlRWxl
bWVudC5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBs
dWdJbkltYWdlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwNSw3ICs0MDUsNyBAQCB2
b2lkIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ6OmRpZEFkZFVzZXJBCiAgICAgQVNTRVJUKCFhcmdM
aXN0Lmhhc092ZXJmbG93ZWQoKSk7CiAKICAgICAvLyBJdCBpcyBleHBlY3RlZCB0aGUgSlMgZmls
ZSBwcm92aWRlcyBhIGNyZWF0ZU92ZXJsYXkoc2hhZG93Um9vdCwgdGl0bGUsIHN1YnRpdGxlKSBm
dW5jdGlvbi4KLSAgICBhdXRvKiBvdmVybGF5ID0gZ2xvYmFsT2JqZWN0LmdldCgmc3RhdGUsIEpT
Qzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJjcmVhdGVPdmVybGF5IikpLnRvT2Jq
ZWN0KCZzdGF0ZSk7CisgICAgYXV0byogb3ZlcmxheSA9IGdsb2JhbE9iamVjdC5nZXQoJnN0YXRl
LCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJjcmVhdGVPdmVybGF5IikpLnRvT2Jq
ZWN0KCZzdGF0ZSk7CiAgICAgQVNTRVJUKCFvdmVybGF5ID09ICEhc2NvcGUuZXhjZXB0aW9uKCkp
OwogICAgIGlmICghb3ZlcmxheSkgewogICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5k
SG9zdC5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JGcm9udGVuZEhvc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOCBNYXR0IExpbGVrIDx3ZWJraXRAbWF0dGxp
bGVrLmNvbT4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTE1OCw3ICsxNTgsNyBAQCB2b2lkIEluc3Bl
Y3RvckZyb250ZW5kSG9zdDo6YWRkU2VsZlRvR2xvCiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
Q0FUQ0hfU0NPUEUodm0pOwogCiAgICAgYXV0byYgZ2xvYmFsT2JqZWN0ID0gKkpTQzo6anNDYXN0
PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUubGV4aWNhbEdsb2JhbE9iamVjdCgpKTsKLSAgICBn
bG9iYWxPYmplY3QucHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZt
LCAiSW5zcGVjdG9yRnJvbnRlbmRIb3N0IiksIHRvSlM8SURMSW50ZXJmYWNlPEluc3BlY3RvckZy
b250ZW5kSG9zdD4+KHN0YXRlLCBnbG9iYWxPYmplY3QsICp0aGlzKSk7CisgICAgZ2xvYmFsT2Jq
ZWN0LnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiSW5zcGVj
dG9yRnJvbnRlbmRIb3N0IiksIHRvSlM8SURMSW50ZXJmYWNlPEluc3BlY3RvckZyb250ZW5kSG9z
dD4+KHN0YXRlLCBnbG9iYWxPYmplY3QsICp0aGlzKSk7CiAgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmVwb3J0RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUuZXhj
ZXB0aW9uKCkpOwogfQpAQCAtNDA5LDcgKzQwOSw4IEBAIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmRI
b3N0OjpzaG93Q29udGV4dE0KICAgICBBU1NFUlQobV9mcm9udGVuZFBhZ2UpOwogCiAgICAgYXV0
byYgc3RhdGUgPSAqZXhlY1N0YXRlRnJvbVBhZ2UoZGVidWdnZXJXb3JsZCgpLCBtX2Zyb250ZW5k
UGFnZSk7Ci0gICAgYXV0byB2YWx1ZSA9IHN0YXRlLmxleGljYWxHbG9iYWxPYmplY3QoKS0+Z2V0
KCZzdGF0ZSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZS52bSgpLCAiSW5zcGVj
dG9yRnJvbnRlbmRBUEkiKSk7CisgICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8g
dmFsdWUgPSBzdGF0ZS5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmdldCgmc3RhdGUsIEpTQzo6SWRl
bnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIkluc3BlY3RvckZyb250ZW5kQVBJIikpOwogICAgIEFT
U0VSVCh2YWx1ZSk7CiAgICAgQVNTRVJUKHZhbHVlLmlzT2JqZWN0KCkpOwogICAgIGF1dG8qIGZy
b250ZW5kQVBJT2JqZWN0ID0gYXNPYmplY3QodmFsdWUpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL1dlYkluamVjdGVkU2NyaXB0SG9zdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL1dlYkluamVjdGVkU2NyaXB0SG9zdC5jcHAJKHJldmlzaW9uIDI0
OTEyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9XZWJJbmplY3RlZFNjcmlwdEhvc3Qu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDgsMTMgKzQ4LDEzIEBAIEpTVmFsdWUgV2ViSW5qZWN0
ZWRTY3JpcHRIb3N0OjpzdWJ0eXBlKEUKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAg
IGlmICh2YWx1ZS5pbmhlcml0czxKU05vZGU+KHZtKSkKLSAgICAgICAgcmV0dXJuIGpzTm9udHJp
dmlhbFN0cmluZyhleGVjLCAibm9kZSJfcyk7CisgICAgICAgIHJldHVybiBqc05vbnRyaXZpYWxT
dHJpbmcodm0sICJub2RlIl9zKTsKICAgICBpZiAodmFsdWUuaW5oZXJpdHM8SlNOb2RlTGlzdD4o
dm0pKQotICAgICAgICByZXR1cm4ganNOb250cml2aWFsU3RyaW5nKGV4ZWMsICJhcnJheSJfcyk7
CisgICAgICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcodm0sICJhcnJheSJfcyk7CiAgICAg
aWYgKHZhbHVlLmluaGVyaXRzPEpTSFRNTENvbGxlY3Rpb24+KHZtKSkKLSAgICAgICAgcmV0dXJu
IGpzTm9udHJpdmlhbFN0cmluZyhleGVjLCAiYXJyYXkiX3MpOworICAgICAgICByZXR1cm4ganNO
b250cml2aWFsU3RyaW5nKHZtLCAiYXJyYXkiX3MpOwogICAgIGlmICh2YWx1ZS5pbmhlcml0czxK
U0RPTUV4Y2VwdGlvbj4odm0pKQotICAgICAgICByZXR1cm4ganNOb250cml2aWFsU3RyaW5nKGV4
ZWMsICJlcnJvciJfcyk7CisgICAgICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcodm0sICJl
cnJvciJfcyk7CiAKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KQEAgLTYzLDQ2ICs2Myw0
NiBAQCBKU1ZhbHVlIFdlYkluamVjdGVkU2NyaXB0SG9zdDo6c3VidHlwZShFCiBzdGF0aWMgSlNP
YmplY3QqIGNvbnN0cnVjdEludGVybmFsUHJvcGVydHkoVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IFN0cmluZyYgbmFtZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBhdXRvKiBvYmplY3Qg
PSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjKTsKLSAgICBvYmplY3QtPnB1dERpcmVjdCh2bSwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCAibmFtZSIpLCBqc1N0cmluZyhleGVjLCBuYW1l
KSk7Ci0gICAgb2JqZWN0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhl
YywgInZhbHVlIiksIHZhbHVlKTsKKyAgICBvYmplY3QtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZyh2bSwgIm5hbWUiKSwganNTdHJpbmcodm0sIG5hbWUpKTsKKyAgICBvYmpl
Y3QtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInZhbHVlIiksIHZh
bHVlKTsKICAgICByZXR1cm4gb2JqZWN0OwogfQogCiBzdGF0aWMgSlNPYmplY3QqIG9iamVjdEZv
clBheW1lbnRPcHRpb25zKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBjb25zdCBQYXltZW50T3B0
aW9ucyYgcGF5bWVudE9wdGlvbnMpCiB7CiAgICAgYXV0byogb2JqZWN0ID0gY29uc3RydWN0RW1w
dHlPYmplY3QoZXhlYyk7Ci0gICAgb2JqZWN0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZy
b21TdHJpbmcoZXhlYywgInJlcXVlc3RQYXllck5hbWUiKSwganNCb29sZWFuKHBheW1lbnRPcHRp
b25zLnJlcXVlc3RQYXllck5hbWUpKTsKLSAgICBvYmplY3QtPnB1dERpcmVjdCh2bSwgSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZyhleGVjLCAicmVxdWVzdFBheWVyRW1haWwiKSwganNCb29sZWFuKHBh
eW1lbnRPcHRpb25zLnJlcXVlc3RQYXllckVtYWlsKSk7Ci0gICAgb2JqZWN0LT5wdXREaXJlY3Qo
dm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgInJlcXVlc3RQYXllclBob25lIiksIGpz
Qm9vbGVhbihwYXltZW50T3B0aW9ucy5yZXF1ZXN0UGF5ZXJQaG9uZSkpOwotICAgIG9iamVjdC0+
cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJyZXF1ZXN0U2hpcHBp
bmciKSwganNCb29sZWFuKHBheW1lbnRPcHRpb25zLnJlcXVlc3RTaGlwcGluZykpOwotICAgIG9i
amVjdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJzaGlwcGlu
Z1R5cGUiKSwganNOb250cml2aWFsU3RyaW5nKGV4ZWMsIGNvbnZlcnRFbnVtZXJhdGlvblRvU3Ry
aW5nKHBheW1lbnRPcHRpb25zLnNoaXBwaW5nVHlwZSkpKTsKKyAgICBvYmplY3QtPnB1dERpcmVj
dCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInJlcXVlc3RQYXllck5hbWUiKSwganNC
b29sZWFuKHBheW1lbnRPcHRpb25zLnJlcXVlc3RQYXllck5hbWUpKTsKKyAgICBvYmplY3QtPnB1
dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInJlcXVlc3RQYXllckVtYWls
IiksIGpzQm9vbGVhbihwYXltZW50T3B0aW9ucy5yZXF1ZXN0UGF5ZXJFbWFpbCkpOworICAgIG9i
amVjdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAicmVxdWVzdFBh
eWVyUGhvbmUiKSwganNCb29sZWFuKHBheW1lbnRPcHRpb25zLnJlcXVlc3RQYXllclBob25lKSk7
CisgICAgb2JqZWN0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJy
ZXF1ZXN0U2hpcHBpbmciKSwganNCb29sZWFuKHBheW1lbnRPcHRpb25zLnJlcXVlc3RTaGlwcGlu
ZykpOworICAgIG9iamVjdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZt
LCAic2hpcHBpbmdUeXBlIiksIGpzTm9udHJpdmlhbFN0cmluZyh2bSwgY29udmVydEVudW1lcmF0
aW9uVG9TdHJpbmcocGF5bWVudE9wdGlvbnMuc2hpcHBpbmdUeXBlKSkpOwogICAgIHJldHVybiBv
YmplY3Q7CiB9CiAKIHN0YXRpYyBKU09iamVjdCogb2JqZWN0Rm9yUGF5bWVudEN1cnJlbmN5QW1v
dW50KFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBjb25zdCBQYXltZW50Q3VycmVuY3lBbW91bnQm
IHBheW1lbnRDdXJyZW5jeUFtb3VudCkKIHsKICAgICBhdXRvKiBvYmplY3QgPSBjb25zdHJ1Y3RF
bXB0eU9iamVjdChleGVjKTsKLSAgICBvYmplY3QtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZyhleGVjLCAiY3VycmVuY3kiKSwganNTdHJpbmcoZXhlYywgcGF5bWVudEN1cnJl
bmN5QW1vdW50LmN1cnJlbmN5KSk7Ci0gICAgb2JqZWN0LT5wdXREaXJlY3Qodm0sIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcoZXhlYywgInZhbHVlIiksIGpzU3RyaW5nKGV4ZWMsIHBheW1lbnRDdXJy
ZW5jeUFtb3VudC52YWx1ZSkpOworICAgIG9iamVjdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKHZtLCAiY3VycmVuY3kiKSwganNTdHJpbmcodm0sIHBheW1lbnRDdXJyZW5j
eUFtb3VudC5jdXJyZW5jeSkpOworICAgIG9iamVjdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKHZtLCAidmFsdWUiKSwganNTdHJpbmcodm0sIHBheW1lbnRDdXJyZW5jeUFt
b3VudC52YWx1ZSkpOwogICAgIHJldHVybiBvYmplY3Q7CiB9CiAKIHN0YXRpYyBKU09iamVjdCog
b2JqZWN0Rm9yUGF5bWVudEl0ZW0oVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFBheW1l
bnRJdGVtJiBwYXltZW50SXRlbSkKIHsKICAgICBhdXRvKiBvYmplY3QgPSBjb25zdHJ1Y3RFbXB0
eU9iamVjdChleGVjKTsKLSAgICBvYmplY3QtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyhleGVjLCAibGFiZWwiKSwganNTdHJpbmcoZXhlYywgcGF5bWVudEl0ZW0ubGFiZWwp
KTsKLSAgICBvYmplY3QtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVj
LCAiYW1vdW50IiksIG9iamVjdEZvclBheW1lbnRDdXJyZW5jeUFtb3VudCh2bSwgZXhlYywgcGF5
bWVudEl0ZW0uYW1vdW50KSk7Ci0gICAgb2JqZWN0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6
OmZyb21TdHJpbmcoZXhlYywgInBlbmRpbmciKSwganNCb29sZWFuKHBheW1lbnRJdGVtLnBlbmRp
bmcpKTsKKyAgICBvYmplY3QtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2
bSwgImxhYmVsIiksIGpzU3RyaW5nKHZtLCBwYXltZW50SXRlbS5sYWJlbCkpOworICAgIG9iamVj
dC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiYW1vdW50IiksIG9i
amVjdEZvclBheW1lbnRDdXJyZW5jeUFtb3VudCh2bSwgZXhlYywgcGF5bWVudEl0ZW0uYW1vdW50
KSk7CisgICAgb2JqZWN0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0s
ICJwZW5kaW5nIiksIGpzQm9vbGVhbihwYXltZW50SXRlbS5wZW5kaW5nKSk7CiAgICAgcmV0dXJu
IG9iamVjdDsKIH0KIAogc3RhdGljIEpTT2JqZWN0KiBvYmplY3RGb3JQYXltZW50U2hpcHBpbmdP
cHRpb24oVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFBheW1lbnRTaGlwcGluZ09wdGlv
biYgcGF5bWVudFNoaXBwaW5nT3B0aW9uKQogewogICAgIGF1dG8qIG9iamVjdCA9IGNvbnN0cnVj
dEVtcHR5T2JqZWN0KGV4ZWMpOwotICAgIG9iamVjdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKGV4ZWMsICJpZCIpLCBqc1N0cmluZyhleGVjLCBwYXltZW50U2hpcHBpbmdP
cHRpb24uaWQpKTsKLSAgICBvYmplY3QtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZyhleGVjLCAibGFiZWwiKSwganNTdHJpbmcoZXhlYywgcGF5bWVudFNoaXBwaW5nT3B0aW9u
LmxhYmVsKSk7Ci0gICAgb2JqZWN0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJp
bmcoZXhlYywgImFtb3VudCIpLCBvYmplY3RGb3JQYXltZW50Q3VycmVuY3lBbW91bnQodm0sIGV4
ZWMsIHBheW1lbnRTaGlwcGluZ09wdGlvbi5hbW91bnQpKTsKLSAgICBvYmplY3QtPnB1dERpcmVj
dCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCAic2VsZWN0ZWQiKSwganNCb29sZWFu
KHBheW1lbnRTaGlwcGluZ09wdGlvbi5zZWxlY3RlZCkpOworICAgIG9iamVjdC0+cHV0RGlyZWN0
KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiaWQiKSwganNTdHJpbmcodm0sIHBheW1l
bnRTaGlwcGluZ09wdGlvbi5pZCkpOworICAgIG9iamVjdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKHZtLCAibGFiZWwiKSwganNTdHJpbmcodm0sIHBheW1lbnRTaGlwcGlu
Z09wdGlvbi5sYWJlbCkpOworICAgIG9iamVjdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCAiYW1vdW50IiksIG9iamVjdEZvclBheW1lbnRDdXJyZW5jeUFtb3VudCh2
bSwgZXhlYywgcGF5bWVudFNoaXBwaW5nT3B0aW9uLmFtb3VudCkpOworICAgIG9iamVjdC0+cHV0
RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAic2VsZWN0ZWQiKSwganNCb29s
ZWFuKHBheW1lbnRTaGlwcGluZ09wdGlvbi5zZWxlY3RlZCkpOwogICAgIHJldHVybiBvYmplY3Q7
CiB9CiAKQEAgLTExMywxMCArMTEzLDEwIEBAIHN0YXRpYyBKU09iamVjdCogb2JqZWN0Rm9yUGF5
bWVudERldGFpbHMKICAgICAgICAgYWRkaXRpb25hbERpc3BsYXlJdGVtcy0+cHV0RGlyZWN0SW5k
ZXgoZXhlYywgaSwgb2JqZWN0Rm9yUGF5bWVudEl0ZW0odm0sIGV4ZWMsIG1vZGlmaWVyLmFkZGl0
aW9uYWxEaXNwbGF5SXRlbXNbaV0pKTsKIAogICAgIGF1dG8qIG9iamVjdCA9IGNvbnN0cnVjdEVt
cHR5T2JqZWN0KGV4ZWMpOwotICAgIG9iamVjdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKGV4ZWMsICJzdXBwb3J0ZWRNZXRob2RzIiksIGpzU3RyaW5nKGV4ZWMsIG1vZGlm
aWVyLnN1cHBvcnRlZE1ldGhvZHMpKTsKLSAgICBvYmplY3QtPnB1dERpcmVjdCh2bSwgSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZyhleGVjLCAidG90YWwiKSwgIW1vZGlmaWVyLnRvdGFsID8ganNOdWxs
KCkgOiBvYmplY3RGb3JQYXltZW50SXRlbSh2bSwgZXhlYywgKm1vZGlmaWVyLnRvdGFsKSk7Ci0g
ICAgb2JqZWN0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgImFk
ZGl0aW9uYWxEaXNwbGF5SXRlbXMiKSwgYWRkaXRpb25hbERpc3BsYXlJdGVtcyk7Ci0gICAgb2Jq
ZWN0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgImRhdGEiKSwg
IW1vZGlmaWVyLmRhdGEgPyBqc051bGwoKSA6IG1vZGlmaWVyLmRhdGEuZ2V0KCkpOworICAgIG9i
amVjdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAic3VwcG9ydGVk
TWV0aG9kcyIpLCBqc1N0cmluZyh2bSwgbW9kaWZpZXIuc3VwcG9ydGVkTWV0aG9kcykpOworICAg
IG9iamVjdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAidG90YWwi
KSwgIW1vZGlmaWVyLnRvdGFsID8ganNOdWxsKCkgOiBvYmplY3RGb3JQYXltZW50SXRlbSh2bSwg
ZXhlYywgKm1vZGlmaWVyLnRvdGFsKSk7CisgICAgb2JqZWN0LT5wdXREaXJlY3Qodm0sIElkZW50
aWZpZXI6OmZyb21TdHJpbmcodm0sICJhZGRpdGlvbmFsRGlzcGxheUl0ZW1zIiksIGFkZGl0aW9u
YWxEaXNwbGF5SXRlbXMpOworICAgIG9iamVjdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCAiZGF0YSIpLCAhbW9kaWZpZXIuZGF0YSA/IGpzTnVsbCgpIDogbW9kaWZp
ZXIuZGF0YS5nZXQoKSk7CiAgICAgcmV0dXJuIG9iamVjdDsKIH0KIApAQCAtMTM1LDI3ICsxMzUs
MjcgQEAgc3RhdGljIEpTT2JqZWN0KiBvYmplY3RGb3JQYXltZW50RGV0YWlscwogICAgICAgICBt
b2RpZmllcnMtPnB1dERpcmVjdEluZGV4KGV4ZWMsIGksIG9iamVjdEZvclBheW1lbnREZXRhaWxz
TW9kaWZpZXIodm0sIGV4ZWMsIHBheW1lbnREZXRhaWxzLm1vZGlmaWVyc1tpXSkpOwogCiAgICAg
YXV0byogb2JqZWN0ID0gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYyk7Ci0gICAgb2JqZWN0LT5w
dXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgImlkIiksIGpzU3RyaW5n
KGV4ZWMsIHBheW1lbnREZXRhaWxzLmlkKSk7Ci0gICAgb2JqZWN0LT5wdXREaXJlY3Qodm0sIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgInRvdGFsIiksIG9iamVjdEZvclBheW1lbnRJdGVt
KHZtLCBleGVjLCBwYXltZW50RGV0YWlscy50b3RhbCkpOwotICAgIG9iamVjdC0+cHV0RGlyZWN0
KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJkaXNwbGF5SXRlbXMiKSwgZGlzcGxh
eUl0ZW1zKTsKLSAgICBvYmplY3QtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
ZyhleGVjLCAic2hpcHBpbmdPcHRpb25zIiksIHNoaXBwaW5nT3B0aW9ucyk7Ci0gICAgb2JqZWN0
LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgIm1vZGlmaWVycyIp
LCBtb2RpZmllcnMpOworICAgIG9iamVjdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKHZtLCAiaWQiKSwganNTdHJpbmcodm0sIHBheW1lbnREZXRhaWxzLmlkKSk7CisgICAg
b2JqZWN0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJ0b3RhbCIp
LCBvYmplY3RGb3JQYXltZW50SXRlbSh2bSwgZXhlYywgcGF5bWVudERldGFpbHMudG90YWwpKTsK
KyAgICBvYmplY3QtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImRp
c3BsYXlJdGVtcyIpLCBkaXNwbGF5SXRlbXMpOworICAgIG9iamVjdC0+cHV0RGlyZWN0KHZtLCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAic2hpcHBpbmdPcHRpb25zIiksIHNoaXBwaW5nT3B0
aW9ucyk7CisgICAgb2JqZWN0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmco
dm0sICJtb2RpZmllcnMiKSwgbW9kaWZpZXJzKTsKICAgICByZXR1cm4gb2JqZWN0OwogfQogCi1z
dGF0aWMgSlNTdHJpbmcqIGpzU3RyaW5nRm9yUGF5bWVudFJlcXVlc3RTdGF0ZShWTSYgdm0sIEV4
ZWNTdGF0ZSogZXhlYywgUGF5bWVudFJlcXVlc3Q6OlN0YXRlIHN0YXRlKQorc3RhdGljIEpTU3Ry
aW5nKiBqc1N0cmluZ0ZvclBheW1lbnRSZXF1ZXN0U3RhdGUoVk0mIHZtLCBQYXltZW50UmVxdWVz
dDo6U3RhdGUgc3RhdGUpCiB7CiAgICAgc3dpdGNoIChzdGF0ZSkgewogICAgIGNhc2UgUGF5bWVu
dFJlcXVlc3Q6OlN0YXRlOjpDcmVhdGVkOgotICAgICAgICByZXR1cm4ganNOb250cml2aWFsU3Ry
aW5nKGV4ZWMsICJjcmVhdGVkIl9zKTsKKyAgICAgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmlu
Zyh2bSwgImNyZWF0ZWQiX3MpOwogICAgIGNhc2UgUGF5bWVudFJlcXVlc3Q6OlN0YXRlOjpJbnRl
cmFjdGl2ZToKLSAgICAgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyhleGVjLCAiaW50ZXJh
Y3RpdmUiX3MpOworICAgICAgICByZXR1cm4ganNOb250cml2aWFsU3RyaW5nKHZtLCAiaW50ZXJh
Y3RpdmUiX3MpOwogICAgIGNhc2UgUGF5bWVudFJlcXVlc3Q6OlN0YXRlOjpDbG9zZWQ6Ci0gICAg
ICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywgImNsb3NlZCJfcyk7CisgICAgICAg
IHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcodm0sICJjbG9zZWQiX3MpOwogICAgIH0KIAogICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBqc0VtcHR5U3RyaW5nKCZ2bSk7Cisg
ICAgcmV0dXJuIGpzRW1wdHlTdHJpbmcodm0pOwogfQogI2VuZGlmCiAKQEAgLTE2OSw3ICsxNjks
NyBAQCBKU1ZhbHVlIFdlYkluamVjdGVkU2NyaXB0SG9zdDo6Z2V0SW50ZXJuCiAgICAgICAgIGF1
dG8qIGFycmF5ID0gY29uc3RydWN0RW1wdHlBcnJheShleGVjLCBudWxscHRyKTsKICAgICAgICAg
YXJyYXktPnB1dERpcmVjdEluZGV4KGV4ZWMsIGluZGV4KyssIGNvbnN0cnVjdEludGVybmFsUHJv
cGVydHkodm0sIGV4ZWMsICJvcHRpb25zIl9zLCBvYmplY3RGb3JQYXltZW50T3B0aW9ucyh2bSwg
ZXhlYywgcGF5bWVudFJlcXVlc3QtPnBheW1lbnRPcHRpb25zKCkpKSk7CiAgICAgICAgIGFycmF5
LT5wdXREaXJlY3RJbmRleChleGVjLCBpbmRleCsrLCBjb25zdHJ1Y3RJbnRlcm5hbFByb3BlcnR5
KHZtLCBleGVjLCAiZGV0YWlscyJfcywgb2JqZWN0Rm9yUGF5bWVudERldGFpbHModm0sIGV4ZWMs
IHBheW1lbnRSZXF1ZXN0LT5wYXltZW50RGV0YWlscygpKSkpOwotICAgICAgICBhcnJheS0+cHV0
RGlyZWN0SW5kZXgoZXhlYywgaW5kZXgrKywgY29uc3RydWN0SW50ZXJuYWxQcm9wZXJ0eSh2bSwg
ZXhlYywgInN0YXRlIl9zLCBqc1N0cmluZ0ZvclBheW1lbnRSZXF1ZXN0U3RhdGUodm0sIGV4ZWMs
IHBheW1lbnRSZXF1ZXN0LT5zdGF0ZSgpKSkpOworICAgICAgICBhcnJheS0+cHV0RGlyZWN0SW5k
ZXgoZXhlYywgaW5kZXgrKywgY29uc3RydWN0SW50ZXJuYWxQcm9wZXJ0eSh2bSwgZXhlYywgInN0
YXRlIl9zLCBqc1N0cmluZ0ZvclBheW1lbnRSZXF1ZXN0U3RhdGUodm0sIHBheW1lbnRSZXF1ZXN0
LT5zdGF0ZSgpKSkpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwog
ICAgICAgICByZXR1cm4gYXJyYXk7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2FnZW50cy9JbnNwZWN0b3JDYW52YXNBZ2VudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDYW52YXNBZ2VudC5jcHAJKHJldmlz
aW9uIDI0OTEyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9y
Q2FudmFzQWdlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTctMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUzMCwxMyArNTMwLDE0IEBAIHZvaWQgSW5z
cGVjdG9yQ2FudmFzQWdlbnQ6OmNvbnNvbGVTdGFydFIKIAogICAgIFJlY29yZGluZ09wdGlvbnMg
cmVjb3JkaW5nT3B0aW9uczsKICAgICBpZiAob3B0aW9ucykgewotICAgICAgICBpZiAoSlNDOjpK
U1ZhbHVlIG9wdGlvblNpbmdsZUZyYW1lID0gb3B0aW9ucy0+Z2V0KCZleGVjLCBKU0M6OklkZW50
aWZpZXI6OmZyb21TdHJpbmcoJmV4ZWMsICJzaW5nbGVGcmFtZSIpKSkKKyAgICAgICAgSlNDOjpW
TSYgdm0gPSBleGVjLnZtKCk7CisgICAgICAgIGlmIChKU0M6OkpTVmFsdWUgb3B0aW9uU2luZ2xl
RnJhbWUgPSBvcHRpb25zLT5nZXQoJmV4ZWMsIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2
bSwgInNpbmdsZUZyYW1lIikpKQogICAgICAgICAgICAgcmVjb3JkaW5nT3B0aW9ucy5mcmFtZUNv
dW50ID0gb3B0aW9uU2luZ2xlRnJhbWUudG9Cb29sZWFuKCZleGVjKSA/IDEgOiAwOwotICAgICAg
ICBpZiAoSlNDOjpKU1ZhbHVlIG9wdGlvbkZyYW1lQ291bnQgPSBvcHRpb25zLT5nZXQoJmV4ZWMs
IEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmZXhlYywgImZyYW1lQ291bnQiKSkpCisgICAg
ICAgIGlmIChKU0M6OkpTVmFsdWUgb3B0aW9uRnJhbWVDb3VudCA9IG9wdGlvbnMtPmdldCgmZXhl
YywgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiZnJhbWVDb3VudCIpKSkKICAgICAg
ICAgICAgIHJlY29yZGluZ09wdGlvbnMuZnJhbWVDb3VudCA9IG9wdGlvbkZyYW1lQ291bnQudG9O
dW1iZXIoJmV4ZWMpOwotICAgICAgICBpZiAoSlNDOjpKU1ZhbHVlIG9wdGlvbk1lbW9yeUxpbWl0
ID0gb3B0aW9ucy0+Z2V0KCZleGVjLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJmV4ZWMs
ICJtZW1vcnlMaW1pdCIpKSkKKyAgICAgICAgaWYgKEpTQzo6SlNWYWx1ZSBvcHRpb25NZW1vcnlM
aW1pdCA9IG9wdGlvbnMtPmdldCgmZXhlYywgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZt
LCAibWVtb3J5TGltaXQiKSkpCiAgICAgICAgICAgICByZWNvcmRpbmdPcHRpb25zLm1lbW9yeUxp
bWl0ID0gb3B0aW9uTWVtb3J5TGltaXQudG9OdW1iZXIoJmV4ZWMpOwotICAgICAgICBpZiAoSlND
OjpKU1ZhbHVlIG9wdGlvbk5hbWUgPSBvcHRpb25zLT5nZXQoJmV4ZWMsIEpTQzo6SWRlbnRpZmll
cjo6ZnJvbVN0cmluZygmZXhlYywgIm5hbWUiKSkpCisgICAgICAgIGlmIChKU0M6OkpTVmFsdWUg
b3B0aW9uTmFtZSA9IG9wdGlvbnMtPmdldCgmZXhlYywgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKHZtLCAibmFtZSIpKSkKICAgICAgICAgICAgIHJlY29yZGluZ09wdGlvbnMubmFtZSA9IG9w
dGlvbk5hbWUudG9XVEZTdHJpbmcoJmV4ZWMpOwogICAgIH0KICAgICBzdGFydFJlY29yZGluZygq
aW5zcGVjdG9yQ2FudmFzLCBJbnNwZWN0b3I6OlByb3RvY29sOjpSZWNvcmRpbmc6OkluaXRpYXRv
cjo6Q29uc29sZSwgV1RGTW92ZShyZWNvcmRpbmdPcHRpb25zKSk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmNwcAko
cmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNw
ZWN0b3JET01BZ2VudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDA5LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSm9zZXBoIFBlY29yYXJvCiAgKgpAQCAtMTcwMSwxOSAr
MTcwMSwyMCBAQCBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpFdmVudExpc3RlCiAgICAg
ICAgIH0KIAogICAgICAgICBpZiAoaGFuZGxlck9iamVjdCAmJiBleGVjKSB7Ci0gICAgICAgICAg
ICBKU0M6OkpTRnVuY3Rpb24qIGhhbmRsZXJGdW5jdGlvbiA9IEpTQzo6anNEeW5hbWljQ2FzdDxK
U0M6OkpTRnVuY3Rpb24qPihleGVjLT52bSgpLCBoYW5kbGVyT2JqZWN0KTsKKyAgICAgICAgICAg
IEpTQzo6Vk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICAgICAgICAgIEpTQzo6SlNGdW5jdGlvbiog
aGFuZGxlckZ1bmN0aW9uID0gSlNDOjpqc0R5bmFtaWNDYXN0PEpTQzo6SlNGdW5jdGlvbio+KHZt
LCBoYW5kbGVyT2JqZWN0KTsKIAogICAgICAgICAgICAgaWYgKCFoYW5kbGVyRnVuY3Rpb24pIHsK
LSAgICAgICAgICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRShleGVjLT52
bSgpKTsKKyAgICAgICAgICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2
bSk7CiAKICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgaGFuZGxlciBpcyBub3QgYWN0dWFsbHkg
YSBmdW5jdGlvbiwgc2VlIGlmIGl0IGltcGxlbWVudHMgdGhlIEV2ZW50TGlzdGVuZXIgaW50ZXJm
YWNlIGFuZCB1c2UgdGhhdC4KLSAgICAgICAgICAgICAgICBhdXRvIGhhbmRsZUV2ZW50VmFsdWUg
PSBoYW5kbGVyT2JqZWN0LT5nZXQoZXhlYywgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4
ZWMsICJoYW5kbGVFdmVudCIpKTsKKyAgICAgICAgICAgICAgICBhdXRvIGhhbmRsZUV2ZW50VmFs
dWUgPSBoYW5kbGVyT2JqZWN0LT5nZXQoZXhlYywgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KHZtLCAiaGFuZGxlRXZlbnQiKSk7CiAKICAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlv
bigpOwogCiAgICAgICAgICAgICAgICAgaWYgKGhhbmRsZUV2ZW50VmFsdWUpCi0gICAgICAgICAg
ICAgICAgICAgIGhhbmRsZXJGdW5jdGlvbiA9IEpTQzo6anNEeW5hbWljQ2FzdDxKU0M6OkpTRnVu
Y3Rpb24qPihleGVjLT52bSgpLCBoYW5kbGVFdmVudFZhbHVlKTsKKyAgICAgICAgICAgICAgICAg
ICAgaGFuZGxlckZ1bmN0aW9uID0gSlNDOjpqc0R5bmFtaWNDYXN0PEpTQzo6SlNGdW5jdGlvbio+
KHZtLCBoYW5kbGVFdmVudFZhbHVlKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYg
KGhhbmRsZXJGdW5jdGlvbiAmJiAhaGFuZGxlckZ1bmN0aW9uLT5pc0hvc3RPckJ1aWx0aW5GdW5j
dGlvbigpKSB7CkBAIC0xNzIyLDcgKzE3MjMsNyBAQCBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6
RE9NOjpFdmVudExpc3RlCiAgICAgICAgICAgICAgICAgaWYgKGhhbmRsZXJGdW5jdGlvbiAhPSBo
YW5kbGVyT2JqZWN0KQogICAgICAgICAgICAgICAgICAgICBoYW5kbGVyTmFtZSA9IEpTQzo6SlNP
YmplY3Q6OmNhbGN1bGF0ZWRDbGFzc05hbWUoaGFuZGxlck9iamVjdCk7CiAgICAgICAgICAgICAg
ICAgaWYgKGhhbmRsZXJOYW1lLmlzRW1wdHkoKSB8fCBoYW5kbGVyTmFtZSA9PSAiT2JqZWN0Il9z
KQotICAgICAgICAgICAgICAgICAgICBoYW5kbGVyTmFtZSA9IGhhbmRsZXJGdW5jdGlvbi0+Y2Fs
Y3VsYXRlZERpc3BsYXlOYW1lKGV4ZWMtPnZtKCkpOworICAgICAgICAgICAgICAgICAgICBoYW5k
bGVyTmFtZSA9IGhhbmRsZXJGdW5jdGlvbi0+Y2FsY3VsYXRlZERpc3BsYXlOYW1lKHZtKTsKIAog
ICAgICAgICAgICAgICAgIGlmIChhdXRvIGV4ZWN1dGFibGUgPSBoYW5kbGVyRnVuY3Rpb24tPmpz
RXhlY3V0YWJsZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGxpbmVOdW1iZXIgPSBleGVjdXRh
YmxlLT5maXJzdExpbmUoKSAtIDE7CkBAIC0yNjA4LDcgKzI2MDksNyBAQCBOb2RlKiBJbnNwZWN0
b3JET01BZ2VudDo6c2NyaXB0VmFsdWVBc05vCiB7CiAgICAgaWYgKCF2YWx1ZSB8fCAhdmFsdWUu
aXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIEpTTm9kZTo6
dG9XcmFwcGVkKCp2YWx1ZS5nZXRPYmplY3QoKS0+dm0oKSwgdmFsdWUuZ2V0T2JqZWN0KCkpOwor
ICAgIHJldHVybiBKU05vZGU6OnRvV3JhcHBlZCh2YWx1ZS5nZXRPYmplY3QoKS0+dm0oKSwgdmFs
dWUuZ2V0T2JqZWN0KCkpOwogfQogCiBKU0M6OkpTVmFsdWUgSW5zcGVjdG9yRE9NQWdlbnQ6Om5v
ZGVBc1NjcmlwdFZhbHVlKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgTm9kZSogbm9kZSkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlQXVkaXRBZ2VudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VB
dWRpdEFnZW50LmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2FnZW50cy9wYWdlL1BhZ2VBdWRpdEFnZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODQs
MTYgKzg0LDE3IEBAIHZvaWQgUGFnZUF1ZGl0QWdlbnQ6OnBvcHVsYXRlQXVkaXRPYmplY3QKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgaWYgKGF1dG8qIGdsb2JhbE9iamVjdCA9IEpTQzo6anNDYXN0
PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZXhlY1N0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpKSB7
Ci0gICAgICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2soZXhlY1N0YXRlKTsKKyAgICAgICAgSlND
OjpWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgICAgIEpTQzo6SlNMb2NrSG9sZGVy
IGxvY2sodm0pOwogCiAgICAgICAgIGlmIChKU0M6OkpTVmFsdWUganNJbnNwZWN0b3JBdWRpdEFj
Y2Vzc2liaWxpdHlPYmplY3QgPSB0b0pTTmV3bHlDcmVhdGVkKGV4ZWNTdGF0ZSwgZ2xvYmFsT2Jq
ZWN0LCBJbnNwZWN0b3JBdWRpdEFjY2Vzc2liaWxpdHlPYmplY3Q6OmNyZWF0ZSgqdGhpcykpKQot
ICAgICAgICAgICAgYXVkaXRPYmplY3QtPnB1dERpcmVjdChleGVjU3RhdGUtPnZtKCksIEpTQzo6
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjU3RhdGUsICJBY2Nlc3NpYmlsaXR5IiksIGpzSW5z
cGVjdG9yQXVkaXRBY2Nlc3NpYmlsaXR5T2JqZWN0KTsKKyAgICAgICAgICAgIGF1ZGl0T2JqZWN0
LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIkFjY2Vzc2li
aWxpdHkiKSwganNJbnNwZWN0b3JBdWRpdEFjY2Vzc2liaWxpdHlPYmplY3QpOwogCiAgICAgICAg
IGlmIChKU0M6OkpTVmFsdWUganNJbnNwZWN0b3JBdWRpdERPTU9iamVjdCA9IHRvSlNOZXdseUNy
ZWF0ZWQoZXhlY1N0YXRlLCBnbG9iYWxPYmplY3QsIEluc3BlY3RvckF1ZGl0RE9NT2JqZWN0Ojpj
cmVhdGUoKnRoaXMpKSkKLSAgICAgICAgICAgIGF1ZGl0T2JqZWN0LT5wdXREaXJlY3QoZXhlY1N0
YXRlLT52bSgpLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlY1N0YXRlLCAiRE9NIiks
IGpzSW5zcGVjdG9yQXVkaXRET01PYmplY3QpOworICAgICAgICAgICAgYXVkaXRPYmplY3QtPnB1
dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiRE9NIiksIGpzSW5z
cGVjdG9yQXVkaXRET01PYmplY3QpOwogCiAgICAgICAgIGlmIChKU0M6OkpTVmFsdWUganNJbnNw
ZWN0b3JBdWRpdFJlc291cmNlc09iamVjdCA9IHRvSlNOZXdseUNyZWF0ZWQoZXhlY1N0YXRlLCBn
bG9iYWxPYmplY3QsIEluc3BlY3RvckF1ZGl0UmVzb3VyY2VzT2JqZWN0OjpjcmVhdGUoKnRoaXMp
KSkKLSAgICAgICAgICAgIGF1ZGl0T2JqZWN0LT5wdXREaXJlY3QoZXhlY1N0YXRlLT52bSgpLCBK
U0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlY1N0YXRlLCAiUmVzb3VyY2VzIiksIGpzSW5z
cGVjdG9yQXVkaXRSZXNvdXJjZXNPYmplY3QpOworICAgICAgICAgICAgYXVkaXRPYmplY3QtPnB1
dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiUmVzb3VyY2VzIiks
IGpzSW5zcGVjdG9yQXVkaXRSZXNvdXJjZXNPYmplY3QpOwogICAgIH0KIH0KIApJbmRleDogU291
cmNlL1dlYkNvcmUvcGFnZS9QYWdlQ29uc29sZUNsaWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGFnZS9QYWdlQ29uc29sZUNsaWVudC5jcHAJKHJldmlzaW9uIDI0OTEyOCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUNvbnNvbGVDbGllbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTMwMiwxMyArMzAyLDE0IEBAIHN0YXRpYyBPcHRpb25hbDxTdHJpbmc+IHNuYXBz
aG90Q2FudmFzKEgKIAogdm9pZCBQYWdlQ29uc29sZUNsaWVudDo6c2NyZWVuc2hvdChKU0M6OkV4
ZWNTdGF0ZSogc3RhdGUsIFJlZjxTY3JpcHRBcmd1bWVudHM+JiYgYXJndW1lbnRzKQogeworICAg
IEpTQzo6Vk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgU3RyaW5nIGRhdGFVUkw7CiAgICAgSlND
OjpKU1ZhbHVlIHRhcmdldDsKIAogICAgIGlmIChhcmd1bWVudHMtPmFyZ3VtZW50Q291bnQoKSkg
ewogICAgICAgICBhdXRvIHBvc3NpYmxlVGFyZ2V0ID0gYXJndW1lbnRzLT5hcmd1bWVudEF0KDAp
OwogCi0gICAgICAgIGlmIChhdXRvKiBub2RlID0gSlNOb2RlOjp0b1dyYXBwZWQoc3RhdGUtPnZt
KCksIHBvc3NpYmxlVGFyZ2V0KSkgeworICAgICAgICBpZiAoYXV0byogbm9kZSA9IEpTTm9kZTo6
dG9XcmFwcGVkKHZtLCBwb3NzaWJsZVRhcmdldCkpIHsKICAgICAgICAgICAgIHRhcmdldCA9IHBv
c3NpYmxlVGFyZ2V0OwogICAgICAgICAgICAgaWYgKFVOTElLRUxZKEluc3BlY3Rvckluc3RydW1l
bnRhdGlvbjo6aGFzRnJvbnRlbmRzKCkpKSB7CiAgICAgICAgICAgICAgICAgc3RkOjp1bmlxdWVf
cHRyPEltYWdlQnVmZmVyPiBzbmFwc2hvdDsKQEAgLTM1Nyw3ICszNTgsNyBAQCB2b2lkIFBhZ2VD
b25zb2xlQ2xpZW50OjpzY3JlZW5zaG90KEpTQzo6CiAgICAgICAgICAgICAgICAgICAgICAgICBk
YXRhVVJMID0gc25hcHNob3QtPnRvRGF0YVVSTCgiaW1hZ2UvcG5nIl9zLCBXVEY6Om51bGxvcHQs
IFByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoYXV0byogaW1hZ2VEYXRhID0gSlNJbWFnZURhdGE6OnRv
V3JhcHBlZChzdGF0ZS0+dm0oKSwgcG9zc2libGVUYXJnZXQpKSB7CisgICAgICAgIH0gZWxzZSBp
ZiAoYXV0byogaW1hZ2VEYXRhID0gSlNJbWFnZURhdGE6OnRvV3JhcHBlZCh2bSwgcG9zc2libGVU
YXJnZXQpKSB7CiAgICAgICAgICAgICB0YXJnZXQgPSBwb3NzaWJsZVRhcmdldDsKICAgICAgICAg
ICAgIGlmIChVTkxJS0VMWShJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246Omhhc0Zyb250ZW5kcygp
KSkgewogICAgICAgICAgICAgICAgIGF1dG8gc291cmNlU2l6ZSA9IGltYWdlRGF0YS0+c2l6ZSgp
OwpAQCAtMzY3LDEzICszNjgsMTMgQEAgdm9pZCBQYWdlQ29uc29sZUNsaWVudDo6c2NyZWVuc2hv
dChKU0M6OgogICAgICAgICAgICAgICAgICAgICBkYXRhVVJMID0gaW1hZ2VCdWZmZXItPnRvRGF0
YVVSTCgiaW1hZ2UvcG5nIl9zLCBXVEY6Om51bGxvcHQsIFByZXNlcnZlUmVzb2x1dGlvbjo6WWVz
KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAo
YXV0byogaW1hZ2VCaXRtYXAgPSBKU0ltYWdlQml0bWFwOjp0b1dyYXBwZWQoc3RhdGUtPnZtKCks
IHBvc3NpYmxlVGFyZ2V0KSkgeworICAgICAgICB9IGVsc2UgaWYgKGF1dG8qIGltYWdlQml0bWFw
ID0gSlNJbWFnZUJpdG1hcDo6dG9XcmFwcGVkKHZtLCBwb3NzaWJsZVRhcmdldCkpIHsKICAgICAg
ICAgICAgIHRhcmdldCA9IHBvc3NpYmxlVGFyZ2V0OwogICAgICAgICAgICAgaWYgKFVOTElLRUxZ
KEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6aGFzRnJvbnRlbmRzKCkpKSB7CiAgICAgICAgICAg
ICAgICAgaWYgKGF1dG8qIGltYWdlQnVmZmVyID0gaW1hZ2VCaXRtYXAtPmJ1ZmZlcigpKQogICAg
ICAgICAgICAgICAgICAgICBkYXRhVVJMID0gaW1hZ2VCdWZmZXItPnRvRGF0YVVSTCgiaW1hZ2Uv
cG5nIl9zLCBXVEY6Om51bGxvcHQsIFByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKTsKICAgICAgICAg
ICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChhdXRvKiBjb250ZXh0ID0gY2FudmFzUmVuZGVyaW5n
Q29udGV4dChzdGF0ZS0+dm0oKSwgcG9zc2libGVUYXJnZXQpKSB7CisgICAgICAgIH0gZWxzZSBp
ZiAoYXV0byogY29udGV4dCA9IGNhbnZhc1JlbmRlcmluZ0NvbnRleHQodm0sIHBvc3NpYmxlVGFy
Z2V0KSkgewogICAgICAgICAgICAgYXV0byYgY2FudmFzID0gY29udGV4dC0+Y2FudmFzQmFzZSgp
OwogICAgICAgICAgICAgaWYgKGlzPEhUTUxDYW52YXNFbGVtZW50PihjYW52YXMpKSB7CiAgICAg
ICAgICAgICAgICAgdGFyZ2V0ID0gcG9zc2libGVUYXJnZXQ7CkBAIC00MDgsOSArNDA5LDkgQEAg
dm9pZCBQYWdlQ29uc29sZUNsaWVudDo6c2NyZWVuc2hvdChKU0M6OgogICAgIH0KIAogICAgIFZl
Y3RvcjxKU0M6OlN0cm9uZzxKU0M6OlVua25vd24+PiBhZGp1c3RlZEFyZ3VtZW50czsKLSAgICBh
ZGp1c3RlZEFyZ3VtZW50cy5hcHBlbmQoeyBzdGF0ZS0+dm0oKSwgdGFyZ2V0ID8gdGFyZ2V0IDog
SlNDOjpqc05vbnRyaXZpYWxTdHJpbmcoc3RhdGUsICJWaWV3cG9ydCJfcykgfSk7CisgICAgYWRq
dXN0ZWRBcmd1bWVudHMuYXBwZW5kKHsgdm0sIHRhcmdldCA/IHRhcmdldCA6IEpTQzo6anNOb250
cml2aWFsU3RyaW5nKHZtLCAiVmlld3BvcnQiX3MpIH0pOwogICAgIGZvciAoc2l6ZV90IGkgPSAo
IXRhcmdldCA/IDAgOiAxKTsgaSA8IGFyZ3VtZW50cy0+YXJndW1lbnRDb3VudCgpOyArK2kpCi0g
ICAgICAgIGFkanVzdGVkQXJndW1lbnRzLmFwcGVuZCh7IHN0YXRlLT52bSgpLCBhcmd1bWVudHMt
PmFyZ3VtZW50QXQoaSkgfSk7CisgICAgICAgIGFkanVzdGVkQXJndW1lbnRzLmFwcGVuZCh7IHZt
LCBhcmd1bWVudHMtPmFyZ3VtZW50QXQoaSkgfSk7CiAgICAgYXJndW1lbnRzID0gU2NyaXB0QXJn
dW1lbnRzOjpjcmVhdGUoKnN0YXRlLCBXVEZNb3ZlKGFkanVzdGVkQXJndW1lbnRzKSk7CiAgICAg
YWRkTWVzc2FnZShtYWtlVW5pcXVlPEluc3BlY3Rvcjo6Q29uc29sZU1lc3NhZ2U+KE1lc3NhZ2VT
b3VyY2U6OkNvbnNvbGVBUEksIE1lc3NhZ2VUeXBlOjpJbWFnZSwgTWVzc2FnZUxldmVsOjpMb2cs
IGRhdGFVUkwsIFdURk1vdmUoYXJndW1lbnRzKSkpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvQ3VzdG9tUGFpbnRJbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ3VzdG9tUGFpbnRJbWFnZS5jcHAJKHJldmlz
aW9uIDI0OTEyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0N1c3RvbVBh
aW50SW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTgtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE0Nyw3ICsxNDcsNyBAQCBJbWFnZURyYXdSZXN1
bHQgQ3VzdG9tUGFpbnRJbWFnZTo6ZG9DdXN0CiAgICAgYXV0byBzaXplID0gQ1NTUGFpbnRTaXpl
OjpjcmVhdGUoZGVzdFNpemUud2lkdGgoKSwgZGVzdFNpemUuaGVpZ2h0KCkpOwogICAgIFJlZjxT
dHlsZVByb3BlcnR5TWFwUmVhZE9ubHk+IHByb3BlcnR5TWFwID0gSGFzaE1hcFN0eWxlUHJvcGVy
dHlNYXA6OmNyZWF0ZShXVEZNb3ZlKHByb3BlcnR5VmFsdWVzKSk7CiAKLSAgICBhdXRvJiB2bSA9
ICpwYWludENvbnN0cnVjdG9yLmdldE9iamVjdCgpLT52bSgpOworICAgIGF1dG8mIHZtID0gcGFp
bnRDb25zdHJ1Y3Rvci5nZXRPYmplY3QoKS0+dm0oKTsKICAgICBKU0M6OkpTTG9ja0hvbGRlciBs
b2NrKHZtKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAg
YXV0byYgZ2xvYmFsT2JqZWN0ID0gKnBhaW50Q29uc3RydWN0b3IuZ2V0T2JqZWN0KCktPmdsb2Jh
bE9iamVjdCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvdGVzdGluZy9qcy9XZWJDb3JlVGVzdFN1
cHBvcnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvanMvV2ViQ29y
ZVRlc3RTdXBwb3J0LmNwcAkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL1dlYkNvcmUvdGVz
dGluZy9qcy9XZWJDb3JlVGVzdFN1cHBvcnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEs
NiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxNSBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTcsMTIg
KzU3LDEyIEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogdm9pZCBpbmplY3RJbnRlcm5hbHNP
YmplY3QoSlNDb250ZXh0UmVmIGNvbnRleHQpCiB7CiAgICAgRXhlY1N0YXRlKiBleGVjID0gdG9K
Uyhjb250ZXh0KTsKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKKyAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKICAgICBKU0RPTUdsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZXhlYy0+bGV4
aWNhbEdsb2JhbE9iamVjdCgpKTsKICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRD
b250ZXh0ID0gZ2xvYmFsT2JqZWN0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgaWYg
KGlzPERvY3VtZW50Pigqc2NyaXB0Q29udGV4dCkpIHsKLSAgICAgICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKLSAgICAgICAgZ2xvYmFsT2JqZWN0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZy
b21TdHJpbmcoJnZtLCBJbnRlcm5hbHM6OmludGVybmFsc0lkKSwgdG9KUyhleGVjLCBnbG9iYWxP
YmplY3QsIEludGVybmFsczo6Y3JlYXRlKGRvd25jYXN0PERvY3VtZW50Pigqc2NyaXB0Q29udGV4
dCkpKSk7CisgICAgICAgIGdsb2JhbE9iamVjdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCBJbnRlcm5hbHM6OmludGVybmFsc0lkKSwgdG9KUyhleGVjLCBnbG9iYWxP
YmplY3QsIEludGVybmFsczo6Y3JlYXRlKGRvd25jYXN0PERvY3VtZW50Pigqc2NyaXB0Q29udGV4
dCkpKSk7CiAgICAgICAgIGdsb2JhbE9iamVjdC0+ZXhwb3NlRG9sbGFyVk0odm0pOwogICAgIH0K
IH0KQEAgLTIwMCw5ICsyMDAsMTAgQEAgdm9pZCBzZXR1cE5ld2x5Q3JlYXRlZFNlcnZpY2VXb3Jr
ZXIodWludAogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIGF1dG8mIHN0YXRlID0gKmds
b2JhbFNjb3BlLmV4ZWNTdGF0ZSgpOwotICAgICAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKHN0YXRl
LnZtKCkpOworICAgICAgICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgICAgIEpTTG9ja0hv
bGRlciBsb2NrZXIodm0pOwogICAgICAgICBhdXRvKiBjb250ZXh0V3JhcHBlciA9IHNjcmlwdC0+
d29ya2VyR2xvYmFsU2NvcGVXcmFwcGVyKCk7Ci0gICAgICAgIGNvbnRleHRXcmFwcGVyLT5wdXRE
aXJlY3Qoc3RhdGUudm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsIEludGVybmFs
czo6aW50ZXJuYWxzSWQpLCB0b0pTKCZzdGF0ZSwgY29udGV4dFdyYXBwZXIsIFNlcnZpY2VXb3Jr
ZXJJbnRlcm5hbHM6OmNyZWF0ZShpZGVudGlmaWVyKSkpOworICAgICAgICBjb250ZXh0V3JhcHBl
ci0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBJbnRlcm5hbHM6Omlu
dGVybmFsc0lkKSwgdG9KUygmc3RhdGUsIGNvbnRleHRXcmFwcGVyLCBTZXJ2aWNlV29ya2VySW50
ZXJuYWxzOjpjcmVhdGUoaWRlbnRpZmllcikpKTsKICAgICB9KTsKICNlbHNlCiAgICAgVU5VU0VE
X1BBUkFNKHNlcnZpY2VXb3JrZXJJZGVudGlmaWVyKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dv
cmtsZXRzL1BhaW50V29ya2xldEdsb2JhbFNjb3BlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS93b3JrbGV0cy9QYWludFdvcmtsZXRHbG9iYWxTY29wZS5jcHAJKHJldmlzaW9uIDI0
OTEyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3dvcmtsZXRzL1BhaW50V29ya2xldEdsb2JhbFNjb3Bl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE4LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC03MSw3ICs3MSw3IEBAIFBhaW50V29ya2xldEdsb2JhbFNjb3Bl
OjpQYWludERlZmluaXRpb24KIC8vIGh0dHBzOi8vZHJhZnRzLmNzcy1ob3VkaW5pLm9yZy9jc3Mt
cGFpbnQtYXBpLyNyZWdpc3RlcmluZy1jdXN0b20tcGFpbnQKIEV4Y2VwdGlvbk9yPHZvaWQ+IFBh
aW50V29ya2xldEdsb2JhbFNjb3BlOjpyZWdpc3RlclBhaW50KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBT
dHJvbmc8SlNPYmplY3Q+IHBhaW50Q29uc3RydWN0b3IpCiB7Ci0gICAgYXV0byYgdm0gPSAqcGFp
bnRDb25zdHJ1Y3Rvci0+dm0oKTsKKyAgICBhdXRvJiB2bSA9IHBhaW50Q29uc3RydWN0b3ItPnZt
KCk7CiAgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayh2bSk7CiAgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwogCkBAIC05MSw3ICs5MSw3IEBAIEV4Y2VwdGlvbk9yPHZv
aWQ+IFBhaW50V29ya2xldEdsb2JhbFNjb3AKIAogICAgICAgICBWZWN0b3I8U3RyaW5nPiBpbnB1
dFByb3BlcnRpZXM7CiAKLSAgICAgICAgSlNWYWx1ZSBpbnB1dFByb3BlcnRpZXNJdGVyYWJsZVZh
bHVlID0gcGFpbnRDb25zdHJ1Y3Rvci0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zygmdm0sICJpbnB1dFByb3BlcnRpZXMiKSk7CisgICAgICAgIEpTVmFsdWUgaW5wdXRQcm9wZXJ0
aWVzSXRlcmFibGVWYWx1ZSA9IHBhaW50Q29uc3RydWN0b3ItPmdldCgmc3RhdGUsIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcodm0sICJpbnB1dFByb3BlcnRpZXMiKSk7CiAgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIEV4Y2VwdGlvbiB7IEV4aXN0aW5nRXhjZXB0aW9uRXJyb3IgfSk7
CiAKICAgICAgICAgaWYgKCFpbnB1dFByb3BlcnRpZXNJdGVyYWJsZVZhbHVlLmlzVW5kZWZpbmVk
KCkpCkBAIC0xMDIsNyArMTAyLDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gUGFpbnRXb3JrbGV0R2xv
YmFsU2NvcAogCiAgICAgICAgIFZlY3RvcjxTdHJpbmc+IGlucHV0QXJndW1lbnRzOwogCi0gICAg
ICAgIEpTVmFsdWUgaW5wdXRBcmd1bWVudHNJdGVyYWJsZVZhbHVlID0gcGFpbnRDb25zdHJ1Y3Rv
ci0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJpbnB1dEFyZ3VtZW50
cyIpKTsKKyAgICAgICAgSlNWYWx1ZSBpbnB1dEFyZ3VtZW50c0l0ZXJhYmxlVmFsdWUgPSBwYWlu
dENvbnN0cnVjdG9yLT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiaW5w
dXRBcmd1bWVudHMiKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEV4Y2Vw
dGlvbiB7IEV4aXN0aW5nRXhjZXB0aW9uRXJyb3IgfSk7CiAKICAgICAgICAgaWYgKCFpbnB1dEFy
Z3VtZW50c0l0ZXJhYmxlVmFsdWUuaXNVbmRlZmluZWQoKSkKQEAgLTExMSw3ICsxMTEsNyBAQCBF
eGNlcHRpb25Pcjx2b2lkPiBQYWludFdvcmtsZXRHbG9iYWxTY29wCiAKICAgICAgICAgLy8gRklY
TUU6IFBhcnNlIHN5bnRheCBmb3IgaW5wdXRBcmd1bWVudHMgaGVyZSAoc3RlcHMgMTEgYW5kIDEy
KS4KIAotICAgICAgICBKU1ZhbHVlIGNvbnRleHRPcHRpb25zVmFsdWUgPSBwYWludENvbnN0cnVj
dG9yLT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImNvbnRleHRPcHRp
b25zIikpOworICAgICAgICBKU1ZhbHVlIGNvbnRleHRPcHRpb25zVmFsdWUgPSBwYWludENvbnN0
cnVjdG9yLT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiY29udGV4dE9w
dGlvbnMiKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEV4Y2VwdGlvbiB7
IEV4aXN0aW5nRXhjZXB0aW9uRXJyb3IgfSk7CiAgICAgICAgIFVOVVNFRF9QQVJBTShjb250ZXh0
T3B0aW9uc1ZhbHVlKTsKIApAQCAtMTI2LDcgKzEyNiw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFBh
aW50V29ya2xldEdsb2JhbFNjb3AKICAgICAgICAgaWYgKCFwcm90b3R5cGVWYWx1ZS5pc09iamVj
dCgpKQogICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFR5cGVFcnJvciwgIlRoZSBzZWNv
bmQgYXJndW1lbnQgbXVzdCBoYXZlIGEgcHJvdG90eXBlIHRoYXQgaXMgYW4gb2JqZWN0IiB9Owog
Ci0gICAgICAgIEpTVmFsdWUgcGFpbnRWYWx1ZSA9IHByb3RvdHlwZVZhbHVlLmdldCgmc3RhdGUs
IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAicGFpbnQiKSk7CisgICAgICAgIEpTVmFsdWUg
cGFpbnRWYWx1ZSA9IHByb3RvdHlwZVZhbHVlLmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21T
dHJpbmcodm0sICJwYWludCIpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
RXhjZXB0aW9uIHsgRXhpc3RpbmdFeGNlcHRpb25FcnJvciB9KTsKIAogICAgICAgICBpZiAocGFp
bnRWYWx1ZS5pc1VuZGVmaW5lZCgpKQpJbmRleDogU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0OTEzNSkKKysr
IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjUgQEAK
KzIwMTktMDgtMjcgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgorCisgICAgICAgIFJl
ZmFjdG9yIHRvIHVzZSBWTSYgaW5zdGVhZCBvZiBWTSogYXQgYXMgbWFueSBwbGFjZXMgYXMgcG9z
c2libGUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MDExNzIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2dsaWIvRE9NL1dlYktpdERPTU5vZGUuY3Bw
OgorICAgICAgICAod2Via2l0X2RvbV9ub2RlX2Zvcl9qc192YWx1ZSk6CisgICAgICAgICogV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9ET00vSW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxlLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6SW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxlOjpnZXRPckNyZWF0ZSk6
CisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL0pTTlBPYmplY3QuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpKU05QT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKToKKyAgICAg
ICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBKU09iamVjdC5jcHA6CisgICAgICAg
IChXZWJLaXQ6OmlkZW50aWZpZXJGcm9tSWRlbnRpZmllclJlcCk6CisgICAgICAgIChXZWJLaXQ6
Ok5QSlNPYmplY3Q6OmVudW1lcmF0ZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL05l
dHNjYXBlL05QUnVudGltZU9iamVjdE1hcC5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5QUnVudGlt
ZU9iamVjdE1hcDo6Y29udmVydE5QVmFyaWFudFRvSlNWYWx1ZSk6CisgICAgICAgIChXZWJLaXQ6
Ok5QUnVudGltZU9iamVjdE1hcDo6Y29udmVydEpTVmFsdWVUb05QVmFyaWFudCk6CisgICAgICAg
ICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2Vi
RnJhbWU6OmNvdW50ZXJWYWx1ZSk6CisKIDIwMTktMDgtMjYgIERldmluIFJvdXNzbyAgPGRyb3Vz
c29AYXBwbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IHVzZSBtb3JlIEMrKyBrZXl3
b3JkcyBmb3IgZGVmaW5pbmcgYWdlbnRzCkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2dsaWIvRE9NL1dlYktpdERPTU5vZGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ2xpYi9ET00v
V2ViS2l0RE9NTm9kZS5jcHAJKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ2xpYi9ET00vV2ViS2l0RE9NTm9kZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE1MCw1ICsxNTAsNSBAQCBXZWJLaXRET01Ob2RlKiB3ZWJraXRfZG9t
X25vZGVfZm9yX2pzX3ZhCiAgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoanNjX3ZhbHVlX2lzX29i
amVjdCh2YWx1ZSksIG51bGxwdHIpOwogCiAgICAgYXV0byoganNPYmplY3QgPSBKU1ZhbHVlVG9P
YmplY3QoanNjQ29udGV4dEdldEpTQ29udGV4dChqc2NfdmFsdWVfZ2V0X2NvbnRleHQodmFsdWUp
KSwganNjVmFsdWVHZXRKU1ZhbHVlKHZhbHVlKSwgbnVsbHB0cik7Ci0gICAgcmV0dXJuIGpzT2Jq
ZWN0ID8gV2ViS2l0OjpraXQoV2ViQ29yZTo6SlNOb2RlOjp0b1dyYXBwZWQoKnRvSlMoanNPYmpl
Y3QpLT52bSgpLCB0b0pTKGpzT2JqZWN0KSkpIDogbnVsbHB0cjsKKyAgICByZXR1cm4ganNPYmpl
Y3QgPyBXZWJLaXQ6OmtpdChXZWJDb3JlOjpKU05vZGU6OnRvV3JhcHBlZCh0b0pTKGpzT2JqZWN0
KS0+dm0oKSwgdG9KUyhqc09iamVjdCkpKSA6IG51bGxwdHI7CiB9CkluZGV4OiBTb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvRE9NL0luamVjdGVkQnVuZGxlTm9kZUhhbmRs
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0RPTS9JbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGUuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisr
KyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvRE9NL0luamVjdGVkQnVu
ZGxlTm9kZUhhbmRsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzAsNyArNzAsNyBAQCBzdGF0aWMgRE9N
Tm9kZUhhbmRsZUNhY2hlJiBkb21Ob2RlSGFuZGxlCiAKIFJlZlB0cjxJbmplY3RlZEJ1bmRsZU5v
ZGVIYW5kbGU+IEluamVjdGVkQnVuZGxlTm9kZUhhbmRsZTo6Z2V0T3JDcmVhdGUoSlNDb250ZXh0
UmVmLCBKU09iamVjdFJlZiBvYmplY3QpCiB7Ci0gICAgTm9kZSogbm9kZSA9IEpTTm9kZTo6dG9X
cmFwcGVkKCp0b0pTKG9iamVjdCktPnZtKCksIHRvSlMob2JqZWN0KSk7CisgICAgTm9kZSogbm9k
ZSA9IEpTTm9kZTo6dG9XcmFwcGVkKHRvSlMob2JqZWN0KS0+dm0oKSwgdG9KUyhvYmplY3QpKTsK
ICAgICByZXR1cm4gZ2V0T3JDcmVhdGUobm9kZSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL0pTTlBPYmplY3QuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL0pTTlBPYmplY3QuY3Bw
CShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9O
ZXRzY2FwZS9KU05QT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUxLDkgKzQ1MSw5IEBA
IHZvaWQgSlNOUE9iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU08KICAgICAgICAgICAgIGNv
bnN0IGNoYXIqIHN0cmluZyA9IGlkZW50aWZpZXJSZXAtPnN0cmluZygpOwogICAgICAgICAgICAg
aW50IGxlbmd0aCA9IHN0cmxlbihzdHJpbmcpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBp
ZGVudGlmaWVyID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCBTdHJpbmc6OmZyb21VVEY4
V2l0aExhdGluMUZhbGxiYWNrKHN0cmluZywgbGVuZ3RoKSk7CisgICAgICAgICAgICBpZGVudGlm
aWVyID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgU3RyaW5nOjpmcm9tVVRGOFdpdGhMYXRp
bjFGYWxsYmFjayhzdHJpbmcsIGxlbmd0aCkpOwogICAgICAgICB9IGVsc2UKLSAgICAgICAgICAg
IGlkZW50aWZpZXIgPSBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGlkZW50aWZpZXJSZXAtPm51bWJl
cigpKTsKKyAgICAgICAgICAgIGlkZW50aWZpZXIgPSBJZGVudGlmaWVyOjpmcm9tKHZtLCBpZGVu
dGlmaWVyUmVwLT5udW1iZXIoKSk7CiAKICAgICAgICAgcHJvcGVydHlOYW1lQXJyYXkuYWRkKGlk
ZW50aWZpZXIpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5z
L05ldHNjYXBlL05QSlNPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05QSlNPYmplY3QuY3BwCShyZXZpc2lvbiAyNDkxMjgp
CisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUEpTT2JqZWN0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEwLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC04MiwxMiArODIsMTMgQEAgdm9pZCBOUEpTT2JqZWN0Ojppbml0
aWFsaXplKFZNJiB2bSwgTlBSdQogCiBzdGF0aWMgSWRlbnRpZmllciBpZGVudGlmaWVyRnJvbUlk
ZW50aWZpZXJSZXAoRXhlY1N0YXRlKiBleGVjLCBJZGVudGlmaWVyUmVwKiBpZGVudGlmaWVyUmVw
KQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgQVNTRVJUKGlkZW50aWZpZXJSZXAt
PmlzU3RyaW5nKCkpOwogCiAgICAgY29uc3QgY2hhciogc3RyaW5nID0gaWRlbnRpZmllclJlcC0+
c3RyaW5nKCk7CiAgICAgaW50IGxlbmd0aCA9IHN0cmxlbihzdHJpbmcpOwogCi0gICAgcmV0dXJu
IElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgU3RyaW5nOjpmcm9tVVRGOFdpdGhMYXRpbjFG
YWxsYmFjayhzdHJpbmcsIGxlbmd0aCkpOworICAgIHJldHVybiBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKHZtLCBTdHJpbmc6OmZyb21VVEY4V2l0aExhdGluMUZhbGxiYWNrKHN0cmluZywgbGVuZ3Ro
KSk7CiB9CiAKIGJvb2wgTlBKU09iamVjdDo6aGFzTWV0aG9kKE5QSWRlbnRpZmllciBtZXRob2RO
YW1lKQpAQCAtMjUyLDcgKzI1Myw3IEBAIGJvb2wgTlBKU09iamVjdDo6ZW51bWVyYXRlKE5QSWRl
bnRpZmllcioKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIEpTTG9ja0hvbGRlciBsb2Nr
KHZtKTsKIAotICAgIFByb3BlcnR5TmFtZUFycmF5IHByb3BlcnR5TmFtZXMoJnZtLCBQcm9wZXJ0
eU5hbWVNb2RlOjpTdHJpbmdzLCBQcml2YXRlU3ltYm9sTW9kZTo6RXhjbHVkZSk7CisgICAgUHJv
cGVydHlOYW1lQXJyYXkgcHJvcGVydHlOYW1lcyh2bSwgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5n
cywgUHJpdmF0ZVN5bWJvbE1vZGU6OkV4Y2x1ZGUpOwogICAgIG1fanNPYmplY3QtPm1ldGhvZFRh
YmxlKHZtKS0+Z2V0UHJvcGVydHlOYW1lcyhtX2pzT2JqZWN0LmdldCgpLCBleGVjLCBwcm9wZXJ0
eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUoKSk7CiAKICAgICBOUElkZW50aWZpZXIqIG5hbWVJZGVu
dGlmaWVycyA9IG5wbk1lbU5ld0FycmF5PE5QSWRlbnRpZmllcj4ocHJvcGVydHlOYW1lcy5zaXpl
KCkpOwpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBS
dW50aW1lT2JqZWN0TWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvUGx1Z2lucy9OZXRzY2FwZS9OUFJ1bnRpbWVPYmplY3RNYXAuY3BwCShyZXZpc2lvbiAyNDkx
MjgpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUFJ1bnRp
bWVPYmplY3RNYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMCwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEyOSw3ICsxMjksNyBAQCBKU1Zh
bHVlIE5QUnVudGltZU9iamVjdE1hcDo6Y29udmVydE5QVmFyCiAgICAgICAgIHJldHVybiBqc051
bWJlcih2YXJpYW50LnZhbHVlLmRvdWJsZVZhbHVlKTsKIAogICAgIGNhc2UgTlBWYXJpYW50VHlw
ZV9TdHJpbmc6Ci0gICAgICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBTdHJpbmc6OmZyb21VVEY4
V2l0aExhdGluMUZhbGxiYWNrKHZhcmlhbnQudmFsdWUuc3RyaW5nVmFsdWUuVVRGOENoYXJhY3Rl
cnMsIAorICAgICAgICByZXR1cm4ganNTdHJpbmcoZ2xvYmFsT2JqZWN0LT52bSgpLCBTdHJpbmc6
OmZyb21VVEY4V2l0aExhdGluMUZhbGxiYWNrKHZhcmlhbnQudmFsdWUuc3RyaW5nVmFsdWUuVVRG
OENoYXJhY3RlcnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQudmFsdWUuc3RyaW5nVmFsdWUuVVRGOExlbmd0
aCkpOwogICAgIGNhc2UgTlBWYXJpYW50VHlwZV9PYmplY3Q6CiAgICAgICAgIHJldHVybiBnZXRP
ckNyZWF0ZUpTT2JqZWN0KGdsb2JhbE9iamVjdCwgdmFyaWFudC52YWx1ZS5vYmplY3RWYWx1ZSk7
CkBAIC0xNDEsNiArMTQxLDcgQEAgSlNWYWx1ZSBOUFJ1bnRpbWVPYmplY3RNYXA6OmNvbnZlcnRO
UFZhcgogCiB2b2lkIE5QUnVudGltZU9iamVjdE1hcDo6Y29udmVydEpTVmFsdWVUb05QVmFyaWFu
dChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUsIE5QVmFyaWFudCYgdmFyaWFudCkKIHsK
KyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwog
CiAgICAgVk9JRF9UT19OUFZBUklBTlQodmFyaWFudCk7CkBAIC0xNzIsNyArMTczLDcgQEAgdm9p
ZCBOUFJ1bnRpbWVPYmplY3RNYXA6OmNvbnZlcnRKU1ZhbHVlVAogICAgIH0KIAogICAgIGlmICh2
YWx1ZS5pc09iamVjdCgpKSB7Ci0gICAgICAgIE5QT2JqZWN0KiBucE9iamVjdCA9IGdldE9yQ3Jl
YXRlTlBPYmplY3QoZXhlYy0+dm0oKSwgYXNPYmplY3QodmFsdWUpKTsKKyAgICAgICAgTlBPYmpl
Y3QqIG5wT2JqZWN0ID0gZ2V0T3JDcmVhdGVOUE9iamVjdCh2bSwgYXNPYmplY3QodmFsdWUpKTsK
ICAgICAgICAgT0JKRUNUX1RPX05QVkFSSUFOVChucE9iamVjdCwgdmFyaWFudCk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJGcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViRnJhbWUuY3BwCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczOCw3ICs3Mzgs
NyBAQCBKU1ZhbHVlUmVmIFdlYkZyYW1lOjpqc1dyYXBwZXJGb3JXb3JsZChJCiAKIFN0cmluZyBX
ZWJGcmFtZTo6Y291bnRlclZhbHVlKEpTT2JqZWN0UmVmIGVsZW1lbnQpCiB7Ci0gICAgaWYgKCF0
b0pTKGVsZW1lbnQpLT5pbmhlcml0czxKU0VsZW1lbnQ+KCp0b0pTKGVsZW1lbnQpLT52bSgpKSkK
KyAgICBpZiAoIXRvSlMoZWxlbWVudCktPmluaGVyaXRzPEpTRWxlbWVudD4odG9KUyhlbGVtZW50
KS0+dm0oKSkpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKIAogICAgIHJldHVybiBjb3VudGVy
VmFsdWVGb3JFbGVtZW50KCZqc0Nhc3Q8SlNFbGVtZW50Kj4odG9KUyhlbGVtZW50KSktPndyYXBw
ZWQoKSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNDkxMjgp
CisrKyBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSwyOSBAQAorMjAxOS0wOC0yNyAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+
CisKKyAgICAgICAgUmVmYWN0b3IgdG8gdXNlIFZNJiBpbnN0ZWFkIG9mIFZNKiBhdCBhcyBtYW55
IHBsYWNlcyBhcyBwb3NzaWJsZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIwMTE3MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogRE9NL0RPTS5tbToKKyAgICAgICAgKCtbRE9NTm9kZSBfbm9kZUZyb21K
U1dyYXBwZXI6XSk6CisgICAgICAgICogRE9NL0RPTVV0aWxpdHkubW06CisgICAgICAgIChjcmVh
dGVET01XcmFwcGVyKToKKyAgICAgICAgKiBQbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkhv
c3RQcm94eS5tbToKKyAgICAgICAgKGlkZW50aWZpZXJGcm9tSWRlbnRpZmllclJlcCk6CisgICAg
ICAgICogUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Lm1tOgorICAg
ICAgICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OmVudW1lcmF0ZSk6Cisg
ICAgICAgIChXZWJLaXQ6OmdldE9iamVjdElEKToKKyAgICAgICAgKFdlYktpdDo6TmV0c2NhcGVQ
bHVnaW5JbnN0YW5jZVByb3h5OjphZGRWYWx1ZVRvQXJyYXkpOgorICAgICAgICAoV2ViS2l0OjpO
ZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OmRlbWFyc2hhbFZhbHVlRnJvbUFycmF5KToKKyAg
ICAgICAgKFdlYktpdDo6TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpyZXRhaW5Mb2NhbE9i
amVjdCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6cmVs
ZWFzZUxvY2FsT2JqZWN0KToKKyAgICAgICAgKiBQbHVnaW5zL0hvc3RlZC9Qcm94eUluc3RhbmNl
Lm1tOgorICAgICAgICAoV2ViS2l0OjpQcm94eUluc3RhbmNlOjpzdHJpbmdWYWx1ZSBjb25zdCk6
CisgICAgICAgIChXZWJLaXQ6OlByb3h5SW5zdGFuY2U6OmdldFByb3BlcnR5TmFtZXMpOgorICAg
ICAgICAqIFdlYlZpZXcvV2ViRnJhbWUubW06CisgICAgICAgICgtW1dlYkZyYW1lIF9zdHJpbmdC
eUV2YWx1YXRpbmdKYXZhU2NyaXB0RnJvbVN0cmluZzp3aXRoR2xvYmFsT2JqZWN0OmluU2NyaXB0
V29ybGQ6XSk6CisKIDIwMTktMDgtMjMgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4K
IAogICAgICAgICBbZ2VvbG9jYXRpb25dIFJlbmFtZSBpbnRlcmZhY2VzIGFuZCByZW1vdmUgW05v
SW50ZXJmYWNlT2JqZWN0XQpJbmRleDogU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTS5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NLm1tCShyZXZp
c2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NLm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC01MjksNyArNTI5LDcgQEAgLSAoTlNBcnJheSAqKXRleHRSZWN0cwogKyAo
aWQpX25vZGVGcm9tSlNXcmFwcGVyOihKU09iamVjdFJlZilqc1dyYXBwZXIKIHsKICAgICBKU09i
amVjdCogb2JqZWN0ID0gdG9KUyhqc1dyYXBwZXIpOwotICAgIGlmICghb2JqZWN0LT5pbmhlcml0
czxKU05vZGU+KCpvYmplY3QtPnZtKCkpKQorICAgIGlmICghb2JqZWN0LT5pbmhlcml0czxKU05v
ZGU+KG9iamVjdC0+dm0oKSkpCiAgICAgICAgIHJldHVybiBuaWw7CiAgICAgcmV0dXJuIGtpdCgm
anNDYXN0PEpTTm9kZSo+KG9iamVjdCktPndyYXBwZWQoKSk7CiB9CkluZGV4OiBTb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9ET00vRE9NVXRpbGl0eS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9ET00vRE9NVXRpbGl0eS5tbQkocmV2aXNpb24gMjQ5MTI4KQorKysgU291
cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTVV0aWxpdHkubW0JKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3
LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHly
aWdodCAoQykgMjAwNiBKYW1lcyBHLiBTcGV0aCAoc3BldGhAZW5kLmNvbSkKICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKQEAgLTc0LDcgKzc0LDcgQEAKIAogc3RhdGljIFdlYlNjcmlwdE9iamVjdCAqY3JlYXRl
RE9NV3JhcHBlcihKU0M6OkpTT2JqZWN0JiBqc1dyYXBwZXIpCiB7Ci0gICAgSlNDOjpWTSYgdm0g
PSAqanNXcmFwcGVyLnZtKCk7CisgICAgSlNDOjpWTSYgdm0gPSBqc1dyYXBwZXIudm0oKTsKICAg
ICAjZGVmaW5lIFdSQVAoY2xhc3NOYW1lKSBcCiAgICAgICAgIGlmIChhdXRvKiB3cmFwcGVkID0g
V2ViQ29yZTo6SlMjI2NsYXNzTmFtZTo6dG9XcmFwcGVkKHZtLCAmanNXcmFwcGVyKSkgXAogICAg
ICAgICAgICAgcmV0dXJuIGtpdCh3cmFwcGVkKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXRMZWdhY3kv
bWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSG9zdFByb3h5Lm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2lu
SG9zdFByb3h5Lm1tCShyZXZpc2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvV2ViS2l0TGVnYWN5L21h
Yy9QbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkhvc3RQcm94eS5tbQkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxOCBBcHBsZSBJ
bmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxOSBBcHBs
ZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTY2NSw3ICs2NjUsNyBAQCBzdGF0aWMgSWRlbnRpZmllciBpZGVudGlmaWVyRnJvbUlk
ZW50aWZpCiAgICAgQVNTRVJUKGlkZW50aWZpZXItPmlzU3RyaW5nKCkpOwogICAKICAgICBjb25z
dCBjaGFyKiBzdHIgPSBpZGVudGlmaWVyLT5zdHJpbmcoKTsgICAgCi0gICAgcmV0dXJuIElkZW50
aWZpZXI6OmZyb21TdHJpbmcoJmNvbW1vblZNKCksIFN0cmluZzo6ZnJvbVVURjhXaXRoTGF0aW4x
RmFsbGJhY2soc3RyLCBzdHJsZW4oc3RyKSkpOworICAgIHJldHVybiBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKGNvbW1vblZNKCksIFN0cmluZzo6ZnJvbVVURjhXaXRoTGF0aW4xRmFsbGJhY2soc3Ry
LCBzdHJsZW4oc3RyKSkpOwogfQogCiBrZXJuX3JldHVybl90IFdLUENJbnZva2UobWFjaF9wb3J0
X3QgY2xpZW50UG9ydCwgdWludDMyX3QgcGx1Z2luSUQsIHVpbnQzMl90IHJlcXVlc3RJRCwgdWlu
dDMyX3Qgb2JqZWN0SUQsIHVpbnQ2NF90IHNlcnZlcklkZW50aWZpZXIsCkluZGV4OiBTb3VyY2Uv
V2ViS2l0TGVnYWN5L21hYy9QbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJv
eHkubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdExlZ2FjeS9tYWMvUGx1Z2lucy9Ib3N0
ZWQvTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Lm1tCShyZXZpc2lvbiAyNDkxMjgpCisrKyBT
b3VyY2UvV2ViS2l0TGVnYWN5L21hYy9QbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkluc3Rh
bmNlUHJveHkubW0JKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDA4LTIwMTAsIDIwMTYgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMjc1LDcgKzEyNzUsNyBAQCBi
b29sIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6ZW51bWVyCiAKICAgICBFeGVjU3RhdGUq
IGV4ZWMgPSBmcmFtZS0+c2NyaXB0KCkuZ2xvYmFsT2JqZWN0KHBsdWdpbldvcmxkKCkpLT5nbG9i
YWxFeGVjKCk7CiAgCi0gICAgUHJvcGVydHlOYW1lQXJyYXkgcHJvcGVydHlOYW1lcygmdm0sIFBy
b3BlcnR5TmFtZU1vZGU6OlN0cmluZ3MsIFByaXZhdGVTeW1ib2xNb2RlOjpFeGNsdWRlKTsKKyAg
ICBQcm9wZXJ0eU5hbWVBcnJheSBwcm9wZXJ0eU5hbWVzKHZtLCBQcm9wZXJ0eU5hbWVNb2RlOjpT
dHJpbmdzLCBQcml2YXRlU3ltYm9sTW9kZTo6RXhjbHVkZSk7CiAgICAgb2JqZWN0LT5tZXRob2RU
YWJsZSh2bSktPmdldFByb3BlcnR5TmFtZXMob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBF
bnVtZXJhdGlvbk1vZGUoKSk7CiAKICAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+IGFycmF5
ID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XSk7CkBAIC0xMzAwLDcgKzEz
MDAsNyBAQCBib29sIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6ZW51bWVyCiAKIHN0YXRp
YyBib29sIGdldE9iamVjdElEKE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eSogcGx1Z2luSW5z
dGFuY2VQcm94eSwgSlNPYmplY3QqIG9iamVjdCwgdWludDY0X3QmIG9iamVjdElEKQogewotICAg
IEpTQzo6Vk0mIHZtID0gKm9iamVjdC0+dm0oKTsKKyAgICBKU0M6OlZNJiB2bSA9IG9iamVjdC0+
dm0oKTsKICAgICBpZiAob2JqZWN0LT5jbGFzc0luZm8odm0pICE9IFByb3h5UnVudGltZU9iamVj
dDo6aW5mbygpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTEzMTgsNyArMTMxOCw4IEBA
IHN0YXRpYyBib29sIGdldE9iamVjdElEKE5ldHNjYXBlUGx1Z2luSW4KICAgICAKIHZvaWQgTmV0
c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjphZGRWYWx1ZVRvQXJyYXkoTlNNdXRhYmxlQXJyYXkg
KmFycmF5LCBFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgSlNMb2NrSG9s
ZGVyIGxvY2soZXhlYyk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBKU0xvY2tIb2xk
ZXIgbG9jayh2bSk7CiAKICAgICBpZiAodmFsdWUuaXNTdHJpbmcoKSkgewogICAgICAgICBbYXJy
YXkgYWRkT2JqZWN0OltOU051bWJlciBudW1iZXJXaXRoSW50OlN0cmluZ1ZhbHVlVHlwZV1dOwpA
QCAtMTMzOSw3ICsxMzQwLDcgQEAgdm9pZCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OmFk
ZFZhbAogICAgICAgICAgICAgW2FycmF5IGFkZE9iamVjdDpbTlNOdW1iZXIgbnVtYmVyV2l0aElu
dDpvYmplY3RJRF1dOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgW2FycmF5IGFkZE9i
amVjdDpbTlNOdW1iZXIgbnVtYmVyV2l0aEludDpKU09iamVjdFZhbHVlVHlwZV1dOwotICAgICAg
ICAgICAgW2FycmF5IGFkZE9iamVjdDpbTlNOdW1iZXIgbnVtYmVyV2l0aEludDptX2xvY2FsT2Jq
ZWN0cy5pZEZvck9iamVjdChleGVjLT52bSgpLCBvYmplY3QpXV07CisgICAgICAgICAgICBbYXJy
YXkgYWRkT2JqZWN0OltOU051bWJlciBudW1iZXJXaXRoSW50Om1fbG9jYWxPYmplY3RzLmlkRm9y
T2JqZWN0KHZtLCBvYmplY3QpXV07CiAgICAgICAgIH0KICAgICB9IGVsc2UKICAgICAgICAgW2Fy
cmF5IGFkZE9iamVjdDpbTlNOdW1iZXIgbnVtYmVyV2l0aEludDpWb2lkVmFsdWVUeXBlXV07CkBA
IC0xMzk1LDcgKzEzOTYsNyBAQCBib29sIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6ZGVt
YXJzCiAgICAgICAgIGNhc2UgU3RyaW5nVmFsdWVUeXBlOiB7CiAgICAgICAgICAgICBOU1N0cmlu
ZyAqc3RyaW5nID0gW2FycmF5IG9iamVjdEF0SW5kZXg6aW5kZXgrK107CiAgICAgICAgICAgICAK
LSAgICAgICAgICAgIHJlc3VsdCA9IGpzU3RyaW5nKGV4ZWMsIFN0cmluZyhzdHJpbmcpKTsKKyAg
ICAgICAgICAgIHJlc3VsdCA9IGpzU3RyaW5nKGV4ZWMtPnZtKCksIFN0cmluZyhzdHJpbmcpKTsK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgSlNPYmpl
Y3RWYWx1ZVR5cGU6IHsKQEAgLTE0NTMsNyArMTQ1NCw3IEBAIHZvaWQgTmV0c2NhcGVQbHVnaW5J
bnN0YW5jZVByb3h5OjpkZW1hcnMKIAogdm9pZCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6
OnJldGFpbkxvY2FsT2JqZWN0KEpTQzo6SlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICBpZiAoIXZhbHVl
LmlzT2JqZWN0KCkgfHwgdmFsdWUuaW5oZXJpdHM8UHJveHlSdW50aW1lT2JqZWN0PigqdmFsdWUu
Z2V0T2JqZWN0KCktPnZtKCkpKQorICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSB8fCB2YWx1ZS5p
bmhlcml0czxQcm94eVJ1bnRpbWVPYmplY3Q+KHZhbHVlLmdldE9iamVjdCgpLT52bSgpKSkKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgbV9sb2NhbE9iamVjdHMucmV0YWluKGFzT2JqZWN0KHZhbHVl
KSk7CkBAIC0xNDYxLDcgKzE0NjIsNyBAQCB2b2lkIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94
eTo6cmV0YWluCiAKIHZvaWQgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpyZWxlYXNlTG9j
YWxPYmplY3QoSlNDOjpKU1ZhbHVlIHZhbHVlKQogewotICAgIGlmICghdmFsdWUuaXNPYmplY3Qo
KSB8fCB2YWx1ZS5pbmhlcml0czxQcm94eVJ1bnRpbWVPYmplY3Q+KCp2YWx1ZS5nZXRPYmplY3Qo
KS0+dm0oKSkpCisgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpIHx8IHZhbHVlLmluaGVyaXRzPFBy
b3h5UnVudGltZU9iamVjdD4odmFsdWUuZ2V0T2JqZWN0KCktPnZtKCkpKQogICAgICAgICByZXR1
cm47CiAKICAgICBtX2xvY2FsT2JqZWN0cy5yZWxlYXNlKGFzT2JqZWN0KHZhbHVlKSk7CkluZGV4
OiBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9QbHVnaW5zL0hvc3RlZC9Qcm94eUluc3RhbmNlLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1BsdWdpbnMvSG9zdGVkL1By
b3h5SW5zdGFuY2UubW0JKHJldmlzaW9uIDI0OTEyOCkKKysrIFNvdXJjZS9XZWJLaXRMZWdhY3kv
bWFjL1BsdWdpbnMvSG9zdGVkL1Byb3h5SW5zdGFuY2UubW0JKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTAsIDIwMTYgQXBwbGUgSW5j
LiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTkgQXBwbGUg
SW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0yODIsNyArMjgyLDcgQEAgSlNWYWx1ZSBQcm94eUluc3RhbmNlOjpkZWZhdWx0VmFsdWUo
RXhlYwogSlNWYWx1ZSBQcm94eUluc3RhbmNlOjpzdHJpbmdWYWx1ZShFeGVjU3RhdGUqIGV4ZWMp
IGNvbnN0CiB7CiAgICAgLy8gRklYTUU6IEltcGxlbWVudCBzb21ldGhpbmcgc2Vuc2libGUuCi0g
ICAgcmV0dXJuIGpzRW1wdHlTdHJpbmcoZXhlYyk7CisgICAgcmV0dXJuIGpzRW1wdHlTdHJpbmco
ZXhlYy0+dm0oKSk7CiB9CiAKIEpTVmFsdWUgUHJveHlJbnN0YW5jZTo6bnVtYmVyVmFsdWUoRXhl
Y1N0YXRlKikgY29uc3QKQEAgLTMxOSw2ICszMTksNyBAQCB2b2lkIFByb3h5SW5zdGFuY2U6Omdl
dFByb3BlcnR5TmFtZXMoRXhlCiAgICAgCiAgICAgTlNBcnJheSAqYXJyYXkgPSBbTlNQcm9wZXJ0
eUxpc3RTZXJpYWxpemF0aW9uIHByb3BlcnR5TGlzdFdpdGhEYXRhOihfX2JyaWRnZSBOU0RhdGEg
KilyZXBseS0+bV9yZXN1bHQuZ2V0KCkgb3B0aW9uczpOU1Byb3BlcnR5TGlzdEltbXV0YWJsZSBm
b3JtYXQ6bnVsbHB0ciBlcnJvcjpudWxscHRyXTsKICAgICAKKyAgICBWTSYgdm0gPSBleGVjLT52
bSgpOwogICAgIGZvciAoTlNOdW1iZXIgKm51bWJlciBpbiBhcnJheSkgewogICAgICAgICBJZGVu
dGlmaWVyUmVwKiBpZGVudGlmaWVyID0gcmVpbnRlcnByZXRfY2FzdDxJZGVudGlmaWVyUmVwKj4o
W251bWJlciBsb25nTG9uZ1ZhbHVlXSk7CiAgICAgICAgIGlmICghSWRlbnRpZmllclJlcDo6aXNW
YWxpZChpZGVudGlmaWVyKSkKQEAgLTMyNiw5ICszMjcsOSBAQCB2b2lkIFByb3h5SW5zdGFuY2U6
OmdldFByb3BlcnR5TmFtZXMoRXhlCiAKICAgICAgICAgaWYgKGlkZW50aWZpZXItPmlzU3RyaW5n
KCkpIHsKICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHN0ciA9IGlkZW50aWZpZXItPnN0cmluZygp
OwotICAgICAgICAgICAgbmFtZUFycmF5LmFkZChJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZjb21t
b25WTSgpLCBTdHJpbmc6OmZyb21VVEY4V2l0aExhdGluMUZhbGxiYWNrKHN0ciwgc3RybGVuKHN0
cikpKSk7CisgICAgICAgICAgICBuYW1lQXJyYXkuYWRkKElkZW50aWZpZXI6OmZyb21TdHJpbmco
dm0sIFN0cmluZzo6ZnJvbVVURjhXaXRoTGF0aW4xRmFsbGJhY2soc3RyLCBzdHJsZW4oc3RyKSkp
KTsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBuYW1lQXJyYXkuYWRkKElkZW50aWZpZXI6
OmZyb20oZXhlYywgaWRlbnRpZmllci0+bnVtYmVyKCkpKTsKKyAgICAgICAgICAgIG5hbWVBcnJh
eS5hZGQoSWRlbnRpZmllcjo6ZnJvbSh2bSwgaWRlbnRpZmllci0+bnVtYmVyKCkpKTsKICAgICB9
CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFtZS5t
bQkocmV2aXNpb24gMjQ5MTI4KQorKysgU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9X
ZWJGcmFtZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDUtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIwOTAsNyArMjA5MCw3IEBAIC0gKE5TU3Ry
aW5nICopX3N0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3IKIAogICAgIC8vIFRoZSBnbG9iYWwgb2Jq
ZWN0IGlzIHByb2JhYmx5IGEgcHJveHkgb2JqZWN0PyAtIGlmIHNvLCB3ZSBrbm93IGhvdyB0byB1
c2UgdGhpcyEKICAgICBKU0M6OkpTT2JqZWN0KiBnbG9iYWxPYmplY3RPYmogPSB0b0pTKGdsb2Jh
bE9iamVjdFJlZik7Ci0gICAgSlNDOjpWTSYgdm0gPSAqZ2xvYmFsT2JqZWN0T2JqLT52bSgpOwor
ICAgIEpTQzo6Vk0mIHZtID0gZ2xvYmFsT2JqZWN0T2JqLT52bSgpOwogICAgIGlmICghc3RyY21w
KGdsb2JhbE9iamVjdE9iai0+Y2xhc3NJbmZvKHZtKS0+Y2xhc3NOYW1lLCAiSlNXaW5kb3dQcm94
eSIpKQogICAgICAgICBhbnlXb3JsZEdsb2JhbE9iamVjdCA9IEpTQzo6anNEeW5hbWljQ2FzdDxK
U0RPTVdpbmRvdyo+KHZtLCBzdGF0aWNfY2FzdDxKU1dpbmRvd1Byb3h5Kj4oZ2xvYmFsT2JqZWN0
T2JqKS0+d2luZG93KCkpOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9DaGFuZ2VM
b2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdExlZ2FjeS93aW4vQ2hhbmdlTG9nCShyZXZp
c2lvbiAyNDkxMjgpCisrKyBTb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAxOS0wOC0yNyAgTWFyayBMYW0gIDxtYXJrLmxh
bUBhcHBsZS5jb20+CisKKyAgICAgICAgUmVmYWN0b3IgdG8gdXNlIFZNJiBpbnN0ZWFkIG9mIFZN
KiBhdCBhcyBtYW55IHBsYWNlcyBhcyBwb3NzaWJsZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMTE3MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViRnJhbWUuY3BwOgorICAgICAgICAoV2ViRnJh
bWU6OnN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHRJblNjcmlwdFdvcmxkKToKKwogMjAxOS0w
OC0yMSAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBQdXQga2V5
Z2VuIGVsZW1lbnQgYmVoaW5kIGEgcnVudGltZSBmbGFnIGFuZCBkaXNhYmxlIGl0IGJ5IGRlZmF1
bHQKSW5kZXg6IFNvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYkZyYW1lLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJGcmFtZS5jcHAJKHJldmlzaW9uIDI0OTEy
OCkKKysrIFNvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYkZyYW1lLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjA0NSw3ICsyMDQ1LDcgQEAgSFJFU1VMVCBXZWJGcmFtZTo6c3RyaW5nQnlFdmFsdWF0
aW5nSmF2YQogCiAgICAgLy8gVGhlIGdsb2JhbCBvYmplY3QgaXMgcHJvYmFibHkgYSBwcm94eSBv
YmplY3Q/IC0gaWYgc28sIHdlIGtub3cgaG93IHRvIHVzZSB0aGlzIQogICAgIEpTQzo6SlNPYmpl
Y3QqIGdsb2JhbE9iamVjdE9iaiA9IHRvSlMoZ2xvYmFsT2JqZWN0UmVmKTsKLSAgICBhdXRvJiB2
bSA9ICpnbG9iYWxPYmplY3RPYmotPnZtKCk7CisgICAgYXV0byYgdm0gPSBnbG9iYWxPYmplY3RP
YmotPnZtKCk7CiAgICAgaWYgKGdsb2JhbE9iamVjdE9iai0+aW5oZXJpdHM8SlNXaW5kb3dQcm94
eT4odm0pKQogICAgICAgICBhbnlXb3JsZEdsb2JhbE9iamVjdCA9IEpTQzo6anNEeW5hbWljQ2Fz
dDxKU0RPTVdpbmRvdyo+KHZtLCBzdGF0aWNfY2FzdDxKU1dpbmRvd1Byb3h5Kj4oZ2xvYmFsT2Jq
ZWN0T2JqKS0+d2luZG93KCkpOwogCg==
</data>
<flag name="review"
          id="393130"
          type_id="1"
          status="+"
          setter="ysuzuki"
    />
          </attachment>
      

    </bug>

</bugzilla>